From 0fa0ab31c972a2bc707bb96c37f2952353354e77 Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Mon, 29 Feb 2016 12:03:37 -0600 Subject: [PATCH 001/275] Linux v4.5-rc6 --- ...blocking-ops-call-in-prepare_to_wait.patch | 170 ------------------ drm-nouveau-platform-Fix-deferred-probe.patch | 116 ------------ gitrev | 2 +- kernel.spec | 12 +- sources | 2 +- 5 files changed, 7 insertions(+), 295 deletions(-) delete mode 100644 0001-vsock-Fix-blocking-ops-call-in-prepare_to_wait.patch delete mode 100644 drm-nouveau-platform-Fix-deferred-probe.patch diff --git a/0001-vsock-Fix-blocking-ops-call-in-prepare_to_wait.patch b/0001-vsock-Fix-blocking-ops-call-in-prepare_to_wait.patch deleted file mode 100644 index 6d871b10d..000000000 --- a/0001-vsock-Fix-blocking-ops-call-in-prepare_to_wait.patch +++ /dev/null @@ -1,170 +0,0 @@ -From b5671c331cc2e78c83fc826a69dff461903c0fd5 Mon Sep 17 00:00:00 2001 -From: Laura Abbott -Date: Mon, 25 Jan 2016 15:10:02 -0800 -Subject: [PATCHv2] vsock: Fix blocking ops call in prepare_to_wait -To: "David S. Miller" -Cc: netdev@vger.kernel.org -Cc: linux-kernel@vger.kernel.org -To: Aditya Asarwade -To: Thomas Hellstrom -To: Jorgen Hansen - -We receoved a bug report from someone using vmware: - -WARNING: CPU: 3 PID: 660 at kernel/sched/core.c:7389 -__might_sleep+0x7d/0x90() -do not call blocking ops when !TASK_RUNNING; state=1 set at -[] prepare_to_wait+0x2d/0x90 -Modules linked in: vmw_vsock_vmci_transport vsock snd_seq_midi -snd_seq_midi_event snd_ens1371 iosf_mbi gameport snd_rawmidi -snd_ac97_codec ac97_bus snd_seq coretemp snd_seq_device snd_pcm -snd_timer snd soundcore ppdev crct10dif_pclmul crc32_pclmul -ghash_clmulni_intel vmw_vmci vmw_balloon i2c_piix4 shpchp parport_pc -parport acpi_cpufreq nfsd auth_rpcgss nfs_acl lockd grace sunrpc btrfs -xor raid6_pq 8021q garp stp llc mrp crc32c_intel serio_raw mptspi vmwgfx -drm_kms_helper ttm drm scsi_transport_spi mptscsih e1000 ata_generic -mptbase pata_acpi -CPU: 3 PID: 660 Comm: vmtoolsd Not tainted -4.2.0-0.rc1.git3.1.fc23.x86_64 #1 -Hardware name: VMware, Inc. VMware Virtual Platform/440BX Desktop -Reference Platform, BIOS 6.00 05/20/2014 - 0000000000000000 0000000049e617f3 ffff88006ac37ac8 ffffffff818641f5 - 0000000000000000 ffff88006ac37b20 ffff88006ac37b08 ffffffff810ab446 - ffff880068009f40 ffffffff81c63bc0 0000000000000061 0000000000000000 -Call Trace: - [] dump_stack+0x4c/0x65 - [] warn_slowpath_common+0x86/0xc0 - [] warn_slowpath_fmt+0x55/0x70 - [] ? debug_lockdep_rcu_enabled+0x1d/0x20 - [] ? prepare_to_wait+0x2d/0x90 - [] ? prepare_to_wait+0x2d/0x90 - [] __might_sleep+0x7d/0x90 - [] __might_fault+0x43/0xa0 - [] copy_from_iter+0x87/0x2a0 - [] __qp_memcpy_to_queue+0x9a/0x1b0 [vmw_vmci] - [] ? qp_memcpy_to_queue+0x20/0x20 [vmw_vmci] - [] qp_memcpy_to_queue_iov+0x17/0x20 [vmw_vmci] - [] qp_enqueue_locked+0xa0/0x140 [vmw_vmci] - [] vmci_qpair_enquev+0x4f/0xd0 [vmw_vmci] - [] vmci_transport_stream_enqueue+0x1b/0x20 -[vmw_vsock_vmci_transport] - [] vsock_stream_sendmsg+0x2c5/0x320 [vsock] - [] ? wake_atomic_t_function+0x70/0x70 - [] sock_sendmsg+0x38/0x50 - [] SYSC_sendto+0x104/0x190 - [] ? vfs_read+0x8a/0x140 - [] SyS_sendto+0xe/0x10 - [] entry_SYSCALL_64_fastpath+0x12/0x76 - -transport->stream_enqueue may call copy_to_user so it should -not be called inside a prepare_to_wait. Narrow the scope of -the prepare_to_wait to avoid the bad call. This also applies -to vsock_stream_recvmsg as well. - -Reported-by: Vinson Lee -Tested-by: Vinson Lee -Signed-off-by: Laura Abbott ---- -v2: fix same issue in recvmsg path as well. ---- - net/vmw_vsock/af_vsock.c | 19 ++++++------------- - 1 file changed, 6 insertions(+), 13 deletions(-) - -diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c -index 7fd1220..bbe65dc 100644 ---- a/net/vmw_vsock/af_vsock.c -+++ b/net/vmw_vsock/af_vsock.c -@@ -1557,8 +1557,6 @@ static int vsock_stream_sendmsg(struct socket *sock, struct msghdr *msg, - if (err < 0) - goto out; - -- prepare_to_wait(sk_sleep(sk), &wait, TASK_INTERRUPTIBLE); -- - while (total_written < len) { - ssize_t written; - -@@ -1578,7 +1576,9 @@ static int vsock_stream_sendmsg(struct socket *sock, struct msghdr *msg, - goto out_wait; - - release_sock(sk); -+ prepare_to_wait(sk_sleep(sk), &wait, TASK_INTERRUPTIBLE); - timeout = schedule_timeout(timeout); -+ finish_wait(sk_sleep(sk), &wait); - lock_sock(sk); - if (signal_pending(current)) { - err = sock_intr_errno(timeout); -@@ -1588,8 +1588,6 @@ static int vsock_stream_sendmsg(struct socket *sock, struct msghdr *msg, - goto out_wait; - } - -- prepare_to_wait(sk_sleep(sk), &wait, -- TASK_INTERRUPTIBLE); - } - - /* These checks occur both as part of and after the loop -@@ -1635,7 +1633,6 @@ static int vsock_stream_sendmsg(struct socket *sock, struct msghdr *msg, - out_wait: - if (total_written > 0) - err = total_written; -- finish_wait(sk_sleep(sk), &wait); - out: - release_sock(sk); - return err; -@@ -1716,7 +1713,6 @@ vsock_stream_recvmsg(struct socket *sock, struct msghdr *msg, size_t len, - if (err < 0) - goto out; - -- prepare_to_wait(sk_sleep(sk), &wait, TASK_INTERRUPTIBLE); - - while (1) { - s64 ready = vsock_stream_has_data(vsk); -@@ -1727,7 +1723,7 @@ vsock_stream_recvmsg(struct socket *sock, struct msghdr *msg, size_t len, - */ - - err = -ENOMEM; -- goto out_wait; -+ goto out; - } else if (ready > 0) { - ssize_t read; - -@@ -1750,7 +1746,7 @@ vsock_stream_recvmsg(struct socket *sock, struct msghdr *msg, size_t len, - vsk, target, read, - !(flags & MSG_PEEK), &recv_data); - if (err < 0) -- goto out_wait; -+ goto out; - - if (read >= target || flags & MSG_PEEK) - break; -@@ -1773,7 +1769,9 @@ vsock_stream_recvmsg(struct socket *sock, struct msghdr *msg, size_t len, - break; - - release_sock(sk); -+ prepare_to_wait(sk_sleep(sk), &wait, TASK_INTERRUPTIBLE); - timeout = schedule_timeout(timeout); -+ finish_wait(sk_sleep(sk), &wait); - lock_sock(sk); - - if (signal_pending(current)) { -@@ -1783,9 +1781,6 @@ vsock_stream_recvmsg(struct socket *sock, struct msghdr *msg, size_t len, - err = -EAGAIN; - break; - } -- -- prepare_to_wait(sk_sleep(sk), &wait, -- TASK_INTERRUPTIBLE); - } - } - -@@ -1816,8 +1811,6 @@ vsock_stream_recvmsg(struct socket *sock, struct msghdr *msg, size_t len, - err = copied; - } - --out_wait: -- finish_wait(sk_sleep(sk), &wait); - out: - release_sock(sk); - return err; --- -2.5.0 - diff --git a/drm-nouveau-platform-Fix-deferred-probe.patch b/drm-nouveau-platform-Fix-deferred-probe.patch deleted file mode 100644 index bae1dae7a..000000000 --- a/drm-nouveau-platform-Fix-deferred-probe.patch +++ /dev/null @@ -1,116 +0,0 @@ -From patchwork Wed Feb 24 17:34:43 2016 -Content-Type: text/plain; charset="utf-8" -MIME-Version: 1.0 -Content-Transfer-Encoding: 7bit -Subject: drm/nouveau: platform: Fix deferred probe -From: Thierry Reding -X-Patchwork-Id: 587554 -Message-Id: <1456335283-22097-1-git-send-email-thierry.reding@gmail.com> -To: Ben Skeggs -Cc: Alexandre Courbot , Nicolas Chauvet , - dri-devel@lists.freedesktop.org, linux-tegra@vger.kernel.org -Date: Wed, 24 Feb 2016 18:34:43 +0100 - -From: Thierry Reding - -The error cleanup paths aren't quite correct and will crash upon -deferred probe. - -Cc: stable@vger.kernel.org # v4.3+ -Signed-off-by: Thierry Reding -Reviewed-by: Ben Skeggs -Reviewed-by: Alexandre Courbot ---- - drivers/gpu/drm/nouveau/nouveau_platform.c | 2 +- - drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c | 40 ++++++++++++++++------ - 2 files changed, 30 insertions(+), 12 deletions(-) - -diff --git a/drivers/gpu/drm/nouveau/nouveau_platform.c b/drivers/gpu/drm/nouveau/nouveau_platform.c -index 8a70cec59bcd..2dfe58af12e4 100644 ---- a/drivers/gpu/drm/nouveau/nouveau_platform.c -+++ b/drivers/gpu/drm/nouveau/nouveau_platform.c -@@ -24,7 +24,7 @@ - static int nouveau_platform_probe(struct platform_device *pdev) - { - const struct nvkm_device_tegra_func *func; -- struct nvkm_device *device; -+ struct nvkm_device *device = NULL; - struct drm_device *drm; - int ret; - -diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c -index 7f8a42721eb2..e7e581d6a8ff 100644 ---- a/drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c -+++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c -@@ -252,32 +252,40 @@ nvkm_device_tegra_new(const struct nvkm_device_tegra_func *func, - - if (!(tdev = kzalloc(sizeof(*tdev), GFP_KERNEL))) - return -ENOMEM; -- *pdevice = &tdev->device; -+ - tdev->func = func; - tdev->pdev = pdev; - tdev->irq = -1; - - tdev->vdd = devm_regulator_get(&pdev->dev, "vdd"); -- if (IS_ERR(tdev->vdd)) -- return PTR_ERR(tdev->vdd); -+ if (IS_ERR(tdev->vdd)) { -+ ret = PTR_ERR(tdev->vdd); -+ goto free; -+ } - - tdev->rst = devm_reset_control_get(&pdev->dev, "gpu"); -- if (IS_ERR(tdev->rst)) -- return PTR_ERR(tdev->rst); -+ if (IS_ERR(tdev->rst)) { -+ ret = PTR_ERR(tdev->rst); -+ goto free; -+ } - - tdev->clk = devm_clk_get(&pdev->dev, "gpu"); -- if (IS_ERR(tdev->clk)) -- return PTR_ERR(tdev->clk); -+ if (IS_ERR(tdev->clk)) { -+ ret = PTR_ERR(tdev->clk); -+ goto free; -+ } - - tdev->clk_pwr = devm_clk_get(&pdev->dev, "pwr"); -- if (IS_ERR(tdev->clk_pwr)) -- return PTR_ERR(tdev->clk_pwr); -+ if (IS_ERR(tdev->clk_pwr)) { -+ ret = PTR_ERR(tdev->clk_pwr); -+ goto free; -+ } - - nvkm_device_tegra_probe_iommu(tdev); - - ret = nvkm_device_tegra_power_up(tdev); - if (ret) -- return ret; -+ goto remove; - - tdev->gpu_speedo = tegra_sku_info.gpu_speedo_value; - ret = nvkm_device_ctor(&nvkm_device_tegra_func, NULL, &pdev->dev, -@@ -285,9 +293,19 @@ nvkm_device_tegra_new(const struct nvkm_device_tegra_func *func, - cfg, dbg, detect, mmio, subdev_mask, - &tdev->device); - if (ret) -- return ret; -+ goto powerdown; -+ -+ *pdevice = &tdev->device; - - return 0; -+ -+powerdown: -+ nvkm_device_tegra_power_down(tdev); -+remove: -+ nvkm_device_tegra_remove_iommu(tdev); -+free: -+ kfree(tdev); -+ return ret; - } - #else - int diff --git a/gitrev b/gitrev index 58b5cbbca..9ecca9950 100644 --- a/gitrev +++ b/gitrev @@ -1 +1 @@ -81f70ba233d5f660e1ea5fe23260ee323af5d53a +fc77dbd34c5c99bce46d40a2491937c3bcbd10af diff --git a/kernel.spec b/kernel.spec index 8d991573b..ade564b62 100644 --- a/kernel.spec +++ b/kernel.spec @@ -40,7 +40,7 @@ Summary: The Linux kernel # For non-released -rc kernels, this will be appended after the rcX and # gitX tags, so a 3 here would become part of release "0.rcX.gitX.3" # -%global baserelease 2 +%global baserelease 1 %global fedora_build %{baserelease} # base_sublevel is the kernel version we're starting with and patching @@ -65,7 +65,7 @@ Summary: The Linux kernel # The next upstream release sublevel (base_sublevel+1) %define upstream_sublevel %(echo $((%{base_sublevel} + 1))) # The rc snapshot level -%define rcrev 5 +%define rcrev 6 # The git snapshot level %define gitrev 0 # Set rpm version accordingly @@ -506,8 +506,6 @@ Patch456: arm64-acpi-drop-expert-patch.patch # http://patchwork.ozlabs.org/patch/587554/ Patch457: ARM-tegra-usb-no-reset.patch -Patch458: drm-nouveau-platform-Fix-deferred-probe.patch - Patch463: arm-i.MX6-Utilite-device-dtb.patch Patch466: input-kill-stupid-messages.patch @@ -602,9 +600,6 @@ Patch645: cfg80211-wext-fix-message-ordering.patch #rhbz 1255325 Patch646: HID-sony-do-not-bail-out-when-the-sixaxis-refuses-th.patch -#rhbz 1288684 -Patch647: 0001-vsock-Fix-blocking-ops-call-in-prepare_to_wait.patch - #rhbz 1309658 Patch648: 0001-mm-CONFIG_NR_ZONES_EXTENDED.patch @@ -2130,6 +2125,9 @@ fi # # %changelog +* Mon Feb 29 2016 Justin M. Forbes - 4.5.0-0.rc6.git0.1 +- Linux v4.5-rc6 + * Mon Feb 29 2016 Josh Boyer - Enable DHT11 (rhbz 1312888) - Fix erroneously installed .o files in python-perf subpackage (rhbz 1312102) diff --git a/sources b/sources index 69c445601..6ff008987 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ 9a78fa2eb6c68ca5a40ed5af08142599 linux-4.4.tar.xz dcbc8fe378a676d5d0dd208cf524e144 perf-man-4.4.tar.gz -426c5d4cc72504c364485d14e36bfaa8 patch-4.5-rc5.xz +cb386089b7af5ea8eab95b5975142529 patch-4.5-rc6.xz From e99b41c4b9c86e834bd3543b01996c6b9825b39a Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Wed, 2 Mar 2016 09:30:36 -0600 Subject: [PATCH 002/275] Linux v4.5-rc6-8-gf691b77 --- config-generic | 12 +++-- config-nodebug | 112 ++++++++++++++++++++++----------------------- config-x86-generic | 2 +- gitrev | 2 +- kernel.spec | 9 +++- sources | 1 + 6 files changed, 74 insertions(+), 64 deletions(-) diff --git a/config-generic b/config-generic index edc1d04d6..30f00b23b 100644 --- a/config-generic +++ b/config-generic @@ -1825,13 +1825,13 @@ CONFIG_B43_PCMCIA=y CONFIG_B43_SDIO=y CONFIG_B43_BCMA=y CONFIG_B43_BCMA_PIO=y -# CONFIG_B43_DEBUG is not set +CONFIG_B43_DEBUG=y CONFIG_B43_PHY_LP=y CONFIG_B43_PHY_N=y CONFIG_B43_PHY_HT=y CONFIG_B43_PHY_G=y CONFIG_B43LEGACY=m -# CONFIG_B43LEGACY_DEBUG is not set +CONFIG_B43LEGACY_DEBUG=y CONFIG_B43LEGACY_DMA=y CONFIG_B43LEGACY_PIO=y CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y @@ -3410,6 +3410,10 @@ CONFIG_VIDEO_CX231XX=m CONFIG_VIDEO_CX231XX_ALSA=m CONFIG_VIDEO_CX231XX_DVB=m CONFIG_VIDEO_CX231XX_RC=y +CONFIG_VIDEO_GO7007=m +CONFIG_VIDEO_GO7007_USB=m +CONFIG_VIDEO_GO7007_LOADER=m +CONFIG_VIDEO_GO7007_USB_S2250_BOARD=m CONFIG_VIDEO_HEXIUM_ORION=m CONFIG_VIDEO_HEXIUM_GEMINI=m CONFIG_VIDEO_IVTV=m @@ -3422,6 +3426,7 @@ CONFIG_VIDEO_SAA6588=m CONFIG_VIDEO_SAA7134=m CONFIG_VIDEO_SAA7134_ALSA=m CONFIG_VIDEO_SAA7134_DVB=m +CONFIG_VIDEO_SAA7134_GO7007=m CONFIG_VIDEO_SAA7134_RC=y CONFIG_VIDEO_SOLO6X10=m CONFIG_VIDEO_USBVISION=m @@ -5127,7 +5132,7 @@ CONFIG_PM_DEBUG=y # CONFIG_DPM_WATCHDOG is not set # revisit this in debug CONFIG_PM_TRACE=y CONFIG_PM_TRACE_RTC=y -# CONFIG_PM_TEST_SUSPEND is not set +CONFIG_PM_TEST_SUSPEND=y # CONFIG_PM_OPP is not set # CONFIG_PM_AUTOSLEEP is not set # CONFIG_PM_WAKELOCKS is not set @@ -5560,7 +5565,6 @@ CONFIG_STAGING_MEDIA=y # CONFIG_VIDEO_DT3155 is not set # CONFIG_TI_ST is not set # CONFIG_FB_XGI is not set -# CONFIG_VIDEO_GO7007 is not set # CONFIG_I2C_BCM2048 is not set # CONFIG_DT3155 is not set # CONFIG_PRISM2_USB is not set diff --git a/config-nodebug b/config-nodebug index c173637a2..3a2eee381 100644 --- a/config-nodebug +++ b/config-nodebug @@ -2,101 +2,101 @@ CONFIG_SND_VERBOSE_PRINTK=y CONFIG_SND_DEBUG=y CONFIG_SND_PCM_XRUN_DEBUG=y -# CONFIG_DEBUG_ATOMIC_SLEEP is not set +CONFIG_DEBUG_ATOMIC_SLEEP=y -# CONFIG_DEBUG_MUTEXES is not set -# CONFIG_DEBUG_RT_MUTEXES is not set -# CONFIG_DEBUG_LOCK_ALLOC is not set -# CONFIG_LOCK_TORTURE_TEST is not set -# CONFIG_PROVE_LOCKING is not set -# CONFIG_DEBUG_SPINLOCK is not set -# CONFIG_PROVE_RCU is not set +CONFIG_DEBUG_MUTEXES=y +CONFIG_DEBUG_RT_MUTEXES=y +CONFIG_DEBUG_LOCK_ALLOC=y +CONFIG_LOCK_TORTURE_TEST=m +CONFIG_PROVE_LOCKING=y +CONFIG_DEBUG_SPINLOCK=y +CONFIG_PROVE_RCU=y # CONFIG_PROVE_RCU_REPEATEDLY is not set -# CONFIG_DEBUG_PER_CPU_MAPS is not set +CONFIG_DEBUG_PER_CPU_MAPS=y CONFIG_CPUMASK_OFFSTACK=y -# CONFIG_CPU_NOTIFIER_ERROR_INJECT is not set +CONFIG_CPU_NOTIFIER_ERROR_INJECT=m -# CONFIG_FAULT_INJECTION is not set -# CONFIG_FAILSLAB is not set -# CONFIG_FAIL_PAGE_ALLOC is not set -# CONFIG_FAIL_MAKE_REQUEST is not set -# CONFIG_FAULT_INJECTION_DEBUG_FS is not set -# CONFIG_FAULT_INJECTION_STACKTRACE_FILTER is not set -# CONFIG_FAIL_IO_TIMEOUT is not set -# CONFIG_FAIL_MMC_REQUEST is not set +CONFIG_FAULT_INJECTION=y +CONFIG_FAILSLAB=y +CONFIG_FAIL_PAGE_ALLOC=y +CONFIG_FAIL_MAKE_REQUEST=y +CONFIG_FAULT_INJECTION_DEBUG_FS=y +CONFIG_FAULT_INJECTION_STACKTRACE_FILTER=y +CONFIG_FAIL_IO_TIMEOUT=y +CONFIG_FAIL_MMC_REQUEST=y -# CONFIG_LOCK_STAT is not set +CONFIG_LOCK_STAT=y -# CONFIG_DEBUG_STACK_USAGE is not set +CONFIG_DEBUG_STACK_USAGE=y -# CONFIG_ACPI_DEBUG is not set +CONFIG_ACPI_DEBUG=y # CONFIG_ACPI_DEBUGGER is not set -# CONFIG_DEBUG_SG is not set -# CONFIG_DEBUG_PI_LIST is not set +CONFIG_DEBUG_SG=y +CONFIG_DEBUG_PI_LIST=y # CONFIG_PAGE_EXTENSION is not set # CONFIG_PAGE_OWNER is not set # CONFIG_DEBUG_PAGEALLOC is not set -# CONFIG_DEBUG_OBJECTS is not set +CONFIG_DEBUG_OBJECTS=y # CONFIG_DEBUG_OBJECTS_SELFTEST is not set -# CONFIG_DEBUG_OBJECTS_FREE is not set -# CONFIG_DEBUG_OBJECTS_TIMERS is not set -# CONFIG_DEBUG_OBJECTS_RCU_HEAD is not set +CONFIG_DEBUG_OBJECTS_FREE=y +CONFIG_DEBUG_OBJECTS_TIMERS=y +CONFIG_DEBUG_OBJECTS_RCU_HEAD=y CONFIG_DEBUG_OBJECTS_ENABLE_DEFAULT=1 CONFIG_X86_PTDUMP=y -# CONFIG_ARM64_PTDUMP is not set -# CONFIG_EFI_PGT_DUMP is not set +CONFIG_ARM64_PTDUMP=y +CONFIG_EFI_PGT_DUMP=y -# CONFIG_CAN_DEBUG_DEVICES is not set +CONFIG_CAN_DEBUG_DEVICES=y -# CONFIG_MODULE_FORCE_UNLOAD is not set +CONFIG_MODULE_FORCE_UNLOAD=y -# CONFIG_DEBUG_NOTIFIERS is not set +CONFIG_DEBUG_NOTIFIERS=y -# CONFIG_DMA_API_DEBUG is not set +CONFIG_DMA_API_DEBUG=y -# CONFIG_MMIOTRACE is not set +CONFIG_MMIOTRACE=y -# CONFIG_DEBUG_CREDENTIALS is not set +CONFIG_DEBUG_CREDENTIALS=y # off in both production debug and nodebug builds, # on in rawhide nodebug builds -# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set +CONFIG_DEBUG_FORCE_WEAK_PER_CPU=y -# CONFIG_EXT4_DEBUG is not set +CONFIG_EXT4_DEBUG=y # CONFIG_XFS_WARN is not set -# CONFIG_DEBUG_PERF_USE_VMALLOC is not set +CONFIG_DEBUG_PERF_USE_VMALLOC=y -# CONFIG_JBD2_DEBUG is not set +CONFIG_JBD2_DEBUG=y -# CONFIG_NFSD_FAULT_INJECTION is not set +CONFIG_NFSD_FAULT_INJECTION=y -# CONFIG_DEBUG_BLK_CGROUP is not set +CONFIG_DEBUG_BLK_CGROUP=y -# CONFIG_DRBD_FAULT_INJECTION is not set +CONFIG_DRBD_FAULT_INJECTION=y -# CONFIG_ATH_DEBUG is not set -# CONFIG_CARL9170_DEBUGFS is not set -# CONFIG_IWLWIFI_DEVICE_TRACING is not set +CONFIG_ATH_DEBUG=y +CONFIG_CARL9170_DEBUGFS=y +CONFIG_IWLWIFI_DEVICE_TRACING=y # CONFIG_RTLWIFI_DEBUG is not set -# CONFIG_DEBUG_OBJECTS_WORK is not set +CONFIG_DEBUG_OBJECTS_WORK=y -# CONFIG_DMADEVICES_DEBUG is not set +CONFIG_DMADEVICES_DEBUG=y # CONFIG_DMADEVICES_VDEBUG is not set CONFIG_PM_ADVANCED_DEBUG=y -# CONFIG_CEPH_LIB_PRETTYDEBUG is not set -# CONFIG_QUOTA_DEBUG is not set +CONFIG_CEPH_LIB_PRETTYDEBUG=y +CONFIG_QUOTA_DEBUG=y CONFIG_KGDB_KDB=y @@ -104,19 +104,19 @@ CONFIG_KDB_DEFAULT_ENABLE=0x0 CONFIG_KDB_KEYBOARD=y CONFIG_KDB_CONTINUE_CATASTROPHIC=0 -# CONFIG_DEBUG_OBJECTS_PERCPU_COUNTER is not set +CONFIG_DEBUG_OBJECTS_PERCPU_COUNTER=y # CONFIG_PERCPU_TEST is not set -# CONFIG_TEST_LIST_SORT is not set +CONFIG_TEST_LIST_SORT=y # CONFIG_TEST_STRING_HELPERS is not set -# CONFIG_DETECT_HUNG_TASK is not set +CONFIG_DETECT_HUNG_TASK=y CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=120 # CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set -# CONFIG_WQ_WATCHDOG is not set +CONFIG_WQ_WATCHDOG=y -# CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK is not set +CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK=y -# CONFIG_DEBUG_KMEMLEAK is not set +CONFIG_DEBUG_KMEMLEAK=y CONFIG_DEBUG_KMEMLEAK_EARLY_LOG_SIZE=1024 # CONFIG_DEBUG_KMEMLEAK_TEST is not set CONFIG_DEBUG_KMEMLEAK_DEFAULT_OFF=y @@ -127,4 +127,4 @@ CONFIG_DEBUG_KMEMLEAK_DEFAULT_OFF=y # CONFIG_SPI_DEBUG is not set -# CONFIG_X86_DEBUG_STATIC_CPU_HAS is not set +CONFIG_X86_DEBUG_STATIC_CPU_HAS=y diff --git a/config-x86-generic b/config-x86-generic index f54836a6d..33b55f3a1 100644 --- a/config-x86-generic +++ b/config-x86-generic @@ -377,7 +377,7 @@ CONFIG_SP5100_TCO=m # CONFIG_MEMTEST is not set # CONFIG_DEBUG_TLBFLUSH is not set -# CONFIG_MAXSMP is not set +CONFIG_MAXSMP=y CONFIG_HP_ILO=m diff --git a/gitrev b/gitrev index 9ecca9950..1ca391013 100644 --- a/gitrev +++ b/gitrev @@ -1 +1 @@ -fc77dbd34c5c99bce46d40a2491937c3bcbd10af +f691b77b1fc491dae601631c8531a0a13e915466 diff --git a/kernel.spec b/kernel.spec index ade564b62..68a74eca6 100644 --- a/kernel.spec +++ b/kernel.spec @@ -67,7 +67,7 @@ Summary: The Linux kernel # The rc snapshot level %define rcrev 6 # The git snapshot level -%define gitrev 0 +%define gitrev 1 # Set rpm version accordingly %define rpmversion 4.%{upstream_sublevel}.0 %endif @@ -123,7 +123,7 @@ Summary: The Linux kernel # Set debugbuildsenabled to 1 for production (build separate debug kernels) # and 0 for rawhide (all kernels are debug kernels). # See also 'make debug' and 'make release'. -%define debugbuildsenabled 1 +%define debugbuildsenabled 0 # Want to build a vanilla kernel build without any non-upstream patches? %define with_vanilla %{?_with_vanilla: 1} %{?!_with_vanilla: 0} @@ -2125,6 +2125,11 @@ fi # # %changelog +* Wed Mar 02 2016 Justin M. Forbes - 4.5.0-0.rc6.git1.1 +- Linux v4.5-rc6-8-gf691b77 +- Reenable debugging options. +- enable VIDEO_GO7007 + * Mon Feb 29 2016 Justin M. Forbes - 4.5.0-0.rc6.git0.1 - Linux v4.5-rc6 diff --git a/sources b/sources index 6ff008987..bd6c66ed0 100644 --- a/sources +++ b/sources @@ -1,3 +1,4 @@ 9a78fa2eb6c68ca5a40ed5af08142599 linux-4.4.tar.xz dcbc8fe378a676d5d0dd208cf524e144 perf-man-4.4.tar.gz cb386089b7af5ea8eab95b5975142529 patch-4.5-rc6.xz +47df42b4d87c1306ad9063f7ebb83152 patch-4.5-rc6-git1.xz From 90bead45c82b1336adcacf0d767876336a68afd1 Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Thu, 3 Mar 2016 12:32:46 -0600 Subject: [PATCH 003/275] Linux v4.5-rc6-18-gf983cd3 --- gitrev | 2 +- kernel.spec | 6 +++++- sources | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/gitrev b/gitrev index 1ca391013..7928f40e9 100644 --- a/gitrev +++ b/gitrev @@ -1 +1 @@ -f691b77b1fc491dae601631c8531a0a13e915466 +f983cd32cd5d2ec47ac8868f387bad15e8f11f85 diff --git a/kernel.spec b/kernel.spec index 68a74eca6..33bab8dd2 100644 --- a/kernel.spec +++ b/kernel.spec @@ -67,7 +67,7 @@ Summary: The Linux kernel # The rc snapshot level %define rcrev 6 # The git snapshot level -%define gitrev 1 +%define gitrev 2 # Set rpm version accordingly %define rpmversion 4.%{upstream_sublevel}.0 %endif @@ -2097,6 +2097,7 @@ fi %defattr(-,root,root)\ %{expand:%%files %{?2:%{2}-}devel}\ %defattr(-,root,root)\ +%defverify(not mtime)\ /usr/src/kernels/%{KVERREL}%{?2:+%{2}}\ %{expand:%%files %{?2:%{2}-}modules-extra}\ %defattr(-,root,root)\ @@ -2125,6 +2126,9 @@ fi # # %changelog +* Thu Mar 03 2016 Justin M. Forbes - 4.5.0-0.rc6.git2.1 +- Linux v4.5-rc6-18-gf983cd3 + * Wed Mar 02 2016 Justin M. Forbes - 4.5.0-0.rc6.git1.1 - Linux v4.5-rc6-8-gf691b77 - Reenable debugging options. diff --git a/sources b/sources index bd6c66ed0..fac4e2582 100644 --- a/sources +++ b/sources @@ -1,4 +1,4 @@ 9a78fa2eb6c68ca5a40ed5af08142599 linux-4.4.tar.xz dcbc8fe378a676d5d0dd208cf524e144 perf-man-4.4.tar.gz cb386089b7af5ea8eab95b5975142529 patch-4.5-rc6.xz -47df42b4d87c1306ad9063f7ebb83152 patch-4.5-rc6-git1.xz +d24ae7d8a2cbfecd76f8c78b53c2043a patch-4.5-rc6-git2.xz From 52f552f77229a99db5dc8206d7a05d018f0e29c4 Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Fri, 4 Mar 2016 11:32:21 -0600 Subject: [PATCH 004/275] Linux v4.5-rc6-41-ge3c2ef4 --- gitrev | 2 +- kernel.spec | 6 +++++- sources | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/gitrev b/gitrev index 7928f40e9..c1e48a723 100644 --- a/gitrev +++ b/gitrev @@ -1 +1 @@ -f983cd32cd5d2ec47ac8868f387bad15e8f11f85 +e3c2ef41f88e50c8557270868600d3132028af3b diff --git a/kernel.spec b/kernel.spec index 33bab8dd2..4c5c5aa37 100644 --- a/kernel.spec +++ b/kernel.spec @@ -67,7 +67,7 @@ Summary: The Linux kernel # The rc snapshot level %define rcrev 6 # The git snapshot level -%define gitrev 2 +%define gitrev 3 # Set rpm version accordingly %define rpmversion 4.%{upstream_sublevel}.0 %endif @@ -630,6 +630,7 @@ Requires(pre): %{kernel_prereq}\ Requires(pre): %{initrd_prereq}\ Requires(pre): linux-firmware >= 20150904-56.git6ebf5d57\ Requires(preun): systemd >= 200\ +Conflicts: xfsprogs < 4.3.0-1\ Conflicts: xorg-x11-drv-vmmouse < 13.0.99\ %{expand:%%{?kernel%{?1:_%{1}}_conflicts:Conflicts: %%{kernel%{?1:_%{1}}_conflicts}}}\ %{expand:%%{?kernel%{?1:_%{1}}_obsoletes:Obsoletes: %%{kernel%{?1:_%{1}}_obsoletes}}}\ @@ -2126,6 +2127,9 @@ fi # # %changelog +* Fri Mar 04 2016 Justin M. Forbes - 4.5.0-0.rc6.git3.1 +- Linux v4.5-rc6-41-ge3c2ef4 + * Thu Mar 03 2016 Justin M. Forbes - 4.5.0-0.rc6.git2.1 - Linux v4.5-rc6-18-gf983cd3 diff --git a/sources b/sources index fac4e2582..3ac6df493 100644 --- a/sources +++ b/sources @@ -1,4 +1,4 @@ 9a78fa2eb6c68ca5a40ed5af08142599 linux-4.4.tar.xz dcbc8fe378a676d5d0dd208cf524e144 perf-man-4.4.tar.gz cb386089b7af5ea8eab95b5975142529 patch-4.5-rc6.xz -d24ae7d8a2cbfecd76f8c78b53c2043a patch-4.5-rc6-git2.xz +70db20ea509a88291b90141d5755b57d patch-4.5-rc6-git3.xz From 36894caab5795191ea1aabea5e3cfd620a75cc3e Mon Sep 17 00:00:00 2001 From: Peter Robinson Date: Sun, 6 Mar 2016 18:50:49 +0000 Subject: [PATCH 005/275] largish update for ARMv7 and aarch64 - Updates and new SoCs for aarch64 and ARMv7 - Add aarch64 support for PINE64 and Geekbox devices - Fix ethernet naming on Armada 38x devices - Serial console fixes for Tegra --- ...r-of-ethernet-DT-nodes-on-Armada-38x.patch | 101 + ...o-use-stdout-path-for-serial-console.patch | 318 +++ Geekbox-device-tree-support.patch | 437 ++++ ...ial-AllWinner-A64-and-PINE64-support.patch | 1882 +++++++++++++++++ config-arm-generic | 59 +- config-arm64 | 28 +- config-armv7 | 24 +- config-armv7-generic | 83 +- kernel.spec | 17 + 9 files changed, 2885 insertions(+), 64 deletions(-) create mode 100644 ARM-mvebu-change-order-of-ethernet-DT-nodes-on-Armada-38x.patch create mode 100644 Fix-tegra-to-use-stdout-path-for-serial-console.patch create mode 100644 Geekbox-device-tree-support.patch create mode 100644 Initial-AllWinner-A64-and-PINE64-support.patch diff --git a/ARM-mvebu-change-order-of-ethernet-DT-nodes-on-Armada-38x.patch b/ARM-mvebu-change-order-of-ethernet-DT-nodes-on-Armada-38x.patch new file mode 100644 index 000000000..cff3d3339 --- /dev/null +++ b/ARM-mvebu-change-order-of-ethernet-DT-nodes-on-Armada-38x.patch @@ -0,0 +1,101 @@ +From patchwork Wed Jan 27 15:08:19 2016 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +Subject: [1/2] ARM: mvebu: change order of ethernet DT nodes on Armada 38x +From: Thomas Petazzoni +X-Patchwork-Id: 8134751 +Message-Id: <1453907300-28283-2-git-send-email-thomas.petazzoni@free-electrons.com> +To: Jason Cooper , Andrew Lunn , + Sebastian Hesselbarth , + Gregory Clement +Cc: Nadav Haklai , Lior Amsalem , + Thomas Petazzoni , + linux-arm-kernel@lists.infradead.org +Date: Wed, 27 Jan 2016 16:08:19 +0100 + +On Armada 38x, the available network interfaces are: + + - port 0, at 0x70000 + - port 1, at 0x30000 + - port 2, at 0x34000 + +Due to the rule saying that DT nodes should be ordered by register +addresses, the network interfaces are probed in this order: + + - port 1, at 0x30000, which gets named eth0 + - port 2, at 0x34000, which gets named eth1 + - port 0, at 0x70000, which gets named eth2 + +(if all three ports are enabled at the board level) + +Unfortunately, the network subsystem doesn't provide any way to rename +network interfaces from the kernel (it can only be done from +userspace). So, the default naming of the network interfaces is very +confusing as it doesn't match the datasheet, nor the naming of the +interfaces in the bootloader, nor the naming of the interfaces on +labels printed on the board. + +For example, on the Armada 388 GP, the board has two ports, labelled +GE0 and GE1. One has to know that GE0 is eth1 and GE1 is eth0, which +isn't really obvious. + +In order to solve this, this patch proposes to exceptionaly violate +the rule of "order DT nodes by register address", and put the 0x70000 +node before the 0x30000 node, so that network interfaces get named in +a more natural way. + +Signed-off-by: Thomas Petazzoni + +--- +arch/arm/boot/dts/armada-38x.dtsi | 30 +++++++++++++++++++++--------- + 1 file changed, 21 insertions(+), 9 deletions(-) + +diff --git a/arch/arm/boot/dts/armada-38x.dtsi b/arch/arm/boot/dts/armada-38x.dtsi +index e8b7f67..b50784d 100644 +--- a/arch/arm/boot/dts/armada-38x.dtsi ++++ b/arch/arm/boot/dts/armada-38x.dtsi +@@ -429,6 +429,27 @@ + reg = <0x22000 0x1000>; + }; + ++ /* ++ * As a special exception to the "order by ++ * register address" rule, the eth0 node is ++ * placed here to ensure that it gets ++ * registered as the first interface, since ++ * the network subsystem doesn't allow naming ++ * interfaces using DT aliases. Without this, ++ * the ordering of interfaces is different ++ * from the one used in U-Boot and the ++ * labeling of interfaces on the boards, which ++ * is very confusing for users. ++ */ ++ eth0: ethernet@70000 { ++ compatible = "marvell,armada-370-neta"; ++ reg = <0x70000 0x4000>; ++ interrupts-extended = <&mpic 8>; ++ clocks = <&gateclk 4>; ++ tx-csum-limit = <9800>; ++ status = "disabled"; ++ }; ++ + eth1: ethernet@30000 { + compatible = "marvell,armada-370-neta"; + reg = <0x30000 0x4000>; +@@ -493,15 +514,6 @@ + }; + }; + +- eth0: ethernet@70000 { +- compatible = "marvell,armada-370-neta"; +- reg = <0x70000 0x4000>; +- interrupts-extended = <&mpic 8>; +- clocks = <&gateclk 4>; +- tx-csum-limit = <9800>; +- status = "disabled"; +- }; +- + mdio: mdio@72004 { + #address-cells = <1>; + #size-cells = <0>; diff --git a/Fix-tegra-to-use-stdout-path-for-serial-console.patch b/Fix-tegra-to-use-stdout-path-for-serial-console.patch new file mode 100644 index 000000000..80a2d1b95 --- /dev/null +++ b/Fix-tegra-to-use-stdout-path-for-serial-console.patch @@ -0,0 +1,318 @@ +From 15b8caef5f380d9465876478ff5e365bc6afa5b6 Mon Sep 17 00:00:00 2001 +From: Peter Robinson +Date: Sun, 6 Mar 2016 10:59:13 +0000 +Subject: [PATCH] Fix tegra to use stdout-path for serial console + +--- + arch/arm/boot/dts/tegra114-dalmore.dts | 4 ++++ + arch/arm/boot/dts/tegra124-jetson-tk1.dts | 4 ++++ + arch/arm/boot/dts/tegra124-nyan.dtsi | 4 ++++ + arch/arm/boot/dts/tegra124-venice2.dts | 4 ++++ + arch/arm/boot/dts/tegra20-harmony.dts | 4 ++++ + arch/arm/boot/dts/tegra20-iris-512.dts | 4 ++++ + arch/arm/boot/dts/tegra20-medcom-wide.dts | 4 ++++ + arch/arm/boot/dts/tegra20-paz00.dts | 4 ++++ + arch/arm/boot/dts/tegra20-seaboard.dts | 4 ++++ + arch/arm/boot/dts/tegra20-tamonten.dtsi | 4 ++++ + arch/arm/boot/dts/tegra20-trimslice.dts | 4 ++++ + arch/arm/boot/dts/tegra20-ventana.dts | 4 ++++ + arch/arm/boot/dts/tegra20-whistler.dts | 4 ++++ + arch/arm/boot/dts/tegra30-apalis-eval.dts | 4 ++++ + arch/arm/boot/dts/tegra30-beaver.dts | 4 ++++ + arch/arm/boot/dts/tegra30-cardhu.dtsi | 4 ++++ + arch/arm/boot/dts/tegra30-colibri-eval-v3.dts | 4 ++++ + arch/arm64/boot/dts/nvidia/tegra132-norrin.dts | 5 ++++- + arch/arm64/boot/dts/nvidia/tegra210-p2530.dtsi | 4 ++++ + 19 files changed, 76 insertions(+), 1 deletion(-) + +diff --git a/arch/arm/boot/dts/tegra114-dalmore.dts b/arch/arm/boot/dts/tegra114-dalmore.dts +index 8b7aa0d..b5748ee 100644 +--- a/arch/arm/boot/dts/tegra114-dalmore.dts ++++ b/arch/arm/boot/dts/tegra114-dalmore.dts +@@ -18,6 +18,10 @@ + serial0 = &uartd; + }; + ++ chosen { ++ stdout-path = "serial0:115200n8"; ++ }; ++ + memory { + reg = <0x80000000 0x40000000>; + }; +diff --git a/arch/arm/boot/dts/tegra124-jetson-tk1.dts b/arch/arm/boot/dts/tegra124-jetson-tk1.dts +index 66b4451..abf046a 100644 +--- a/arch/arm/boot/dts/tegra124-jetson-tk1.dts ++++ b/arch/arm/boot/dts/tegra124-jetson-tk1.dts +@@ -15,6 +15,10 @@ + serial0 = &uartd; + }; + ++ chosen { ++ stdout-path = "serial0:115200n8"; ++ }; ++ + memory { + reg = <0x0 0x80000000 0x0 0x80000000>; + }; +diff --git a/arch/arm/boot/dts/tegra124-nyan.dtsi b/arch/arm/boot/dts/tegra124-nyan.dtsi +index ec1aa64..e2cd39e 100644 +--- a/arch/arm/boot/dts/tegra124-nyan.dtsi ++++ b/arch/arm/boot/dts/tegra124-nyan.dtsi +@@ -8,6 +8,10 @@ + serial0 = &uarta; + }; + ++ chosen { ++ stdout-path = "serial0:115200n8"; ++ }; ++ + memory { + reg = <0x0 0x80000000 0x0 0x80000000>; + }; +diff --git a/arch/arm/boot/dts/tegra124-venice2.dts b/arch/arm/boot/dts/tegra124-venice2.dts +index cfbdf42..604f4b7 100644 +--- a/arch/arm/boot/dts/tegra124-venice2.dts ++++ b/arch/arm/boot/dts/tegra124-venice2.dts +@@ -13,6 +13,10 @@ + serial0 = &uarta; + }; + ++ chosen { ++ stdout-path = "serial0:115200n8"; ++ }; ++ + memory { + reg = <0x0 0x80000000 0x0 0x80000000>; + }; +diff --git a/arch/arm/boot/dts/tegra20-harmony.dts b/arch/arm/boot/dts/tegra20-harmony.dts +index b926a07..4b73c76 100644 +--- a/arch/arm/boot/dts/tegra20-harmony.dts ++++ b/arch/arm/boot/dts/tegra20-harmony.dts +@@ -13,6 +13,10 @@ + serial0 = &uartd; + }; + ++ chosen { ++ stdout-path = "serial0:115200n8"; ++ }; ++ + memory { + reg = <0x00000000 0x40000000>; + }; +diff --git a/arch/arm/boot/dts/tegra20-iris-512.dts b/arch/arm/boot/dts/tegra20-iris-512.dts +index 1dd7d7b..bb56dfe 100644 +--- a/arch/arm/boot/dts/tegra20-iris-512.dts ++++ b/arch/arm/boot/dts/tegra20-iris-512.dts +@@ -11,6 +11,10 @@ + serial1 = &uartd; + }; + ++ chosen { ++ stdout-path = "serial0:115200n8"; ++ }; ++ + host1x@50000000 { + hdmi@54280000 { + status = "okay"; +diff --git a/arch/arm/boot/dts/tegra20-medcom-wide.dts b/arch/arm/boot/dts/tegra20-medcom-wide.dts +index 9b87526..34c6588 100644 +--- a/arch/arm/boot/dts/tegra20-medcom-wide.dts ++++ b/arch/arm/boot/dts/tegra20-medcom-wide.dts +@@ -10,6 +10,10 @@ + serial0 = &uartd; + }; + ++ chosen { ++ stdout-path = "serial0:115200n8"; ++ }; ++ + pwm@7000a000 { + status = "okay"; + }; +diff --git a/arch/arm/boot/dts/tegra20-paz00.dts b/arch/arm/boot/dts/tegra20-paz00.dts +index ed7e100..81a10a9 100644 +--- a/arch/arm/boot/dts/tegra20-paz00.dts ++++ b/arch/arm/boot/dts/tegra20-paz00.dts +@@ -14,6 +14,10 @@ + serial1 = &uartc; + }; + ++ chosen { ++ stdout-path = "serial0:115200n8"; ++ }; ++ + memory { + reg = <0x00000000 0x20000000>; + }; +diff --git a/arch/arm/boot/dts/tegra20-seaboard.dts b/arch/arm/boot/dts/tegra20-seaboard.dts +index aea8994..0aed748 100644 +--- a/arch/arm/boot/dts/tegra20-seaboard.dts ++++ b/arch/arm/boot/dts/tegra20-seaboard.dts +@@ -13,6 +13,10 @@ + serial0 = &uartd; + }; + ++ chosen { ++ stdout-path = "serial0:115200n8"; ++ }; ++ + memory { + reg = <0x00000000 0x40000000>; + }; +diff --git a/arch/arm/boot/dts/tegra20-tamonten.dtsi b/arch/arm/boot/dts/tegra20-tamonten.dtsi +index 13d4e61..025e9e8 100644 +--- a/arch/arm/boot/dts/tegra20-tamonten.dtsi ++++ b/arch/arm/boot/dts/tegra20-tamonten.dtsi +@@ -10,6 +10,10 @@ + serial0 = &uartd; + }; + ++ chosen { ++ stdout-path = "serial0:115200n8"; ++ }; ++ + memory { + reg = <0x00000000 0x20000000>; + }; +diff --git a/arch/arm/boot/dts/tegra20-trimslice.dts b/arch/arm/boot/dts/tegra20-trimslice.dts +index d99af4e..69d25ca 100644 +--- a/arch/arm/boot/dts/tegra20-trimslice.dts ++++ b/arch/arm/boot/dts/tegra20-trimslice.dts +@@ -13,6 +13,10 @@ + serial0 = &uarta; + }; + ++ chosen { ++ stdout-path = "serial0:115200n8"; ++ }; ++ + memory { + reg = <0x00000000 0x40000000>; + }; +diff --git a/arch/arm/boot/dts/tegra20-ventana.dts b/arch/arm/boot/dts/tegra20-ventana.dts +index 04c58e9..c61533a 100644 +--- a/arch/arm/boot/dts/tegra20-ventana.dts ++++ b/arch/arm/boot/dts/tegra20-ventana.dts +@@ -13,6 +13,10 @@ + serial0 = &uartd; + }; + ++ chosen { ++ stdout-path = "serial0:115200n8"; ++ }; ++ + memory { + reg = <0x00000000 0x40000000>; + }; +diff --git a/arch/arm/boot/dts/tegra20-whistler.dts b/arch/arm/boot/dts/tegra20-whistler.dts +index 340d811..bd76585 100644 +--- a/arch/arm/boot/dts/tegra20-whistler.dts ++++ b/arch/arm/boot/dts/tegra20-whistler.dts +@@ -13,6 +13,10 @@ + serial0 = &uarta; + }; + ++ chosen { ++ stdout-path = "serial0:115200n8"; ++ }; ++ + memory { + reg = <0x00000000 0x20000000>; + }; +diff --git a/arch/arm/boot/dts/tegra30-apalis-eval.dts b/arch/arm/boot/dts/tegra30-apalis-eval.dts +index f2879cf..b914bcb 100644 +--- a/arch/arm/boot/dts/tegra30-apalis-eval.dts ++++ b/arch/arm/boot/dts/tegra30-apalis-eval.dts +@@ -17,6 +17,10 @@ + serial3 = &uartd; + }; + ++ chosen { ++ stdout-path = "serial0:115200n8"; ++ }; ++ + pcie-controller@00003000 { + status = "okay"; + +diff --git a/arch/arm/boot/dts/tegra30-beaver.dts b/arch/arm/boot/dts/tegra30-beaver.dts +index 3dede39..1eca3b2 100644 +--- a/arch/arm/boot/dts/tegra30-beaver.dts ++++ b/arch/arm/boot/dts/tegra30-beaver.dts +@@ -12,6 +12,10 @@ + serial0 = &uarta; + }; + ++ chosen { ++ stdout-path = "serial0:115200n8"; ++ }; ++ + memory { + reg = <0x80000000 0x7ff00000>; + }; +diff --git a/arch/arm/boot/dts/tegra30-cardhu.dtsi b/arch/arm/boot/dts/tegra30-cardhu.dtsi +index bb1ca15..de9d6cc 100644 +--- a/arch/arm/boot/dts/tegra30-cardhu.dtsi ++++ b/arch/arm/boot/dts/tegra30-cardhu.dtsi +@@ -35,6 +35,10 @@ + serial1 = &uartc; + }; + ++ chosen { ++ stdout-path = "serial0:115200n8"; ++ }; ++ + memory { + reg = <0x80000000 0x40000000>; + }; +diff --git a/arch/arm/boot/dts/tegra30-colibri-eval-v3.dts b/arch/arm/boot/dts/tegra30-colibri-eval-v3.dts +index 3ff019f..93e1ffd 100644 +--- a/arch/arm/boot/dts/tegra30-colibri-eval-v3.dts ++++ b/arch/arm/boot/dts/tegra30-colibri-eval-v3.dts +@@ -15,6 +15,10 @@ + serial2 = &uartd; + }; + ++ chosen { ++ stdout-path = "serial0:115200n8"; ++ }; ++ + host1x@50000000 { + dc@54200000 { + rgb { +diff --git a/arch/arm64/boot/dts/nvidia/tegra132-norrin.dts b/arch/arm64/boot/dts/nvidia/tegra132-norrin.dts +index 62f33fc..3c0b4d7 100644 +--- a/arch/arm64/boot/dts/nvidia/tegra132-norrin.dts ++++ b/arch/arm64/boot/dts/nvidia/tegra132-norrin.dts +@@ -10,9 +10,12 @@ + aliases { + rtc0 = "/i2c@0,7000d000/as3722@40"; + rtc1 = "/rtc@0,7000e000"; ++ serial0 = &uarta; + }; + +- chosen { }; ++ chosen { ++ stdout-path = "serial0:115200n8"; ++ }; + + memory { + device_type = "memory"; +diff --git a/arch/arm64/boot/dts/nvidia/tegra210-p2530.dtsi b/arch/arm64/boot/dts/nvidia/tegra210-p2530.dtsi +index ece0dec..73ba582 100644 +--- a/arch/arm64/boot/dts/nvidia/tegra210-p2530.dtsi ++++ b/arch/arm64/boot/dts/nvidia/tegra210-p2530.dtsi +@@ -9,6 +9,10 @@ + serial0 = &uarta; + }; + ++ chosen { ++ stdout-path = "serial0:115200n8"; ++ }; ++ + memory { + device_type = "memory"; + reg = <0x0 0x80000000 0x0 0xc0000000>; +-- +2.5.0 + diff --git a/Geekbox-device-tree-support.patch b/Geekbox-device-tree-support.patch new file mode 100644 index 000000000..51caf8aaf --- /dev/null +++ b/Geekbox-device-tree-support.patch @@ -0,0 +1,437 @@ +From a516bbf04744817e49e173b2a217a2a6366b5f9c Mon Sep 17 00:00:00 2001 +From: Peter Robinson +Date: Wed, 2 Mar 2016 18:12:09 +0000 +Subject: [PATCH] Geekbox device tree support + +--- + Documentation/devicetree/bindings/arm/rockchip.txt | 9 + + arch/arm64/boot/dts/rockchip/Makefile | 2 + + .../dts/rockchip/rk3368-geekbox-landingship.dts | 56 ++++ + arch/arm64/boot/dts/rockchip/rk3368-geekbox.dts | 321 +++++++++++++++++++++ + 4 files changed, 388 insertions(+) + create mode 100644 arch/arm64/boot/dts/rockchip/rk3368-geekbox-landingship.dts + create mode 100644 arch/arm64/boot/dts/rockchip/rk3368-geekbox.dts + +diff --git a/Documentation/devicetree/bindings/arm/rockchip.txt b/Documentation/devicetree/bindings/arm/rockchip.txt +index 078c14f..c6d95f2 100644 +--- a/Documentation/devicetree/bindings/arm/rockchip.txt ++++ b/Documentation/devicetree/bindings/arm/rockchip.txt +@@ -87,6 +87,15 @@ Rockchip platforms device tree bindings + "google,veyron-speedy-rev3", "google,veyron-speedy-rev2", + "google,veyron-speedy", "google,veyron", "rockchip,rk3288"; + ++- GeekBuying GeekBox: ++ Required root node properties: ++ - compatible = "geekbuying,geekbox", "rockchip,rk3368"; ++ ++- GeekBuying Landingship: ++ Required root node properties: ++ - compatible = "geekbuying,landingship", ++ "geekbuying,geekbox", "rockchip,rk3368"; ++ + - Rockchip RK3368 evb: + Required root node properties: + - compatible = "rockchip,rk3368-evb-act8846", "rockchip,rk3368"; +diff --git a/arch/arm64/boot/dts/rockchip/Makefile b/arch/arm64/boot/dts/rockchip/Makefile +index e3f0b5f..201bcd9 100644 +--- a/arch/arm64/boot/dts/rockchip/Makefile ++++ b/arch/arm64/boot/dts/rockchip/Makefile +@@ -1,4 +1,6 @@ + dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3368-evb-act8846.dtb ++dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3368-geekbox.dtb ++dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3368-geekbox-landingship.dtb + dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3368-r88.dtb + + always := $(dtb-y) +diff --git a/arch/arm64/boot/dts/rockchip/rk3368-geekbox-landingship.dts b/arch/arm64/boot/dts/rockchip/rk3368-geekbox-landingship.dts +new file mode 100644 +index 0000000..e4a1175 +--- /dev/null ++++ b/arch/arm64/boot/dts/rockchip/rk3368-geekbox-landingship.dts +@@ -0,0 +1,56 @@ ++/* ++ * Copyright (c) 2016 Andreas Färber ++ * ++ * This file is dual-licensed: you can use it either under the terms ++ * of the GPL or the X11 license, at your option. Note that this dual ++ * licensing only applies to this file, and not this project as a ++ * whole. ++ * ++ * a) This file 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. ++ * ++ * This file 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. ++ * ++ * Or, alternatively, ++ * ++ * b) Permission is hereby granted, free of charge, to any person ++ * obtaining a copy of this software and associated documentation ++ * files (the "Software"), to deal in the Software without ++ * restriction, including without limitation the rights to use, ++ * copy, modify, merge, publish, distribute, sublicense, and/or ++ * sell copies of the Software, and to permit persons to whom the ++ * Software is furnished to do so, subject to the following ++ * conditions: ++ * ++ * The above copyright notice and this permission notice shall be ++ * included in all copies or substantial portions of the Software. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ++ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES ++ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND ++ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT ++ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, ++ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING ++ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR ++ * OTHER DEALINGS IN THE SOFTWARE. ++ */ ++ ++#include "rk3368-geekbox.dts" ++ ++/ { ++ model = "GeekBox on Landingship"; ++ compatible = "geekbuying,landingship", "geekbuying,geekbox", "rockchip,rk3368"; ++}; ++ ++&i2c1 { ++ status = "okay"; ++}; ++ ++&i2c2 { ++ status = "okay"; ++}; +diff --git a/arch/arm64/boot/dts/rockchip/rk3368-geekbox.dts b/arch/arm64/boot/dts/rockchip/rk3368-geekbox.dts +new file mode 100644 +index 0000000..7e51876 +--- /dev/null ++++ b/arch/arm64/boot/dts/rockchip/rk3368-geekbox.dts +@@ -0,0 +1,321 @@ ++/* ++ * Copyright (c) 2016 Andreas Färber ++ * ++ * This file is dual-licensed: you can use it either under the terms ++ * of the GPL or the X11 license, at your option. Note that this dual ++ * licensing only applies to this file, and not this project as a ++ * whole. ++ * ++ * a) This file 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. ++ * ++ * This file 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. ++ * ++ * Or, alternatively, ++ * ++ * b) Permission is hereby granted, free of charge, to any person ++ * obtaining a copy of this software and associated documentation ++ * files (the "Software"), to deal in the Software without ++ * restriction, including without limitation the rights to use, ++ * copy, modify, merge, publish, distribute, sublicense, and/or ++ * sell copies of the Software, and to permit persons to whom the ++ * Software is furnished to do so, subject to the following ++ * conditions: ++ * ++ * The above copyright notice and this permission notice shall be ++ * included in all copies or substantial portions of the Software. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ++ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES ++ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND ++ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT ++ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, ++ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING ++ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR ++ * OTHER DEALINGS IN THE SOFTWARE. ++ */ ++ ++/dts-v1/; ++#include "rk3368.dtsi" ++ ++/ { ++ model = "GeekBox"; ++ compatible = "geekbuying,geekbox", "rockchip,rk3368"; ++ ++ chosen { ++ stdout-path = "serial2:115200n8"; ++ }; ++ ++ memory { ++ device_type = "memory"; ++ reg = <0x0 0x0 0x0 0x80000000>; ++ }; ++ ++ ext_gmac: gmac-clk { ++ compatible = "fixed-clock"; ++ clock-frequency = <125000000>; ++ clock-output-names = "ext_gmac"; ++ #clock-cells = <0>; ++ }; ++ ++ ir: ir-receiver { ++ compatible = "gpio-ir-receiver"; ++ gpios = <&gpio3 30 GPIO_ACTIVE_LOW>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&ir_int>; ++ }; ++ ++ keys: gpio-keys { ++ compatible = "gpio-keys"; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pwr_key>; ++ #address-cells = <1>; ++ #size-cells = <0>; ++ ++ button@0 { ++ reg = <0>; ++ gpio-key,wakeup = <1>; ++ gpios = <&gpio0 2 GPIO_ACTIVE_LOW>; ++ label = "GPIO Power"; ++ linux,code = <116>; ++ }; ++ }; ++ ++ leds: gpio-leds { ++ compatible = "gpio-leds"; ++ ++ blue { ++ gpios = <&gpio2 2 GPIO_ACTIVE_HIGH>; ++ label = "geekbox:blue:led"; ++ default-state = "on"; ++ }; ++ ++ red { ++ gpios = <&gpio2 3 GPIO_ACTIVE_HIGH>; ++ label = "geekbox:red:led"; ++ default-state = "off"; ++ }; ++ }; ++ ++ vcc_sys: vcc-sys-regulator { ++ compatible = "regulator-fixed"; ++ regulator-name = "vcc_sys"; ++ regulator-min-microvolt = <5000000>; ++ regulator-max-microvolt = <5000000>; ++ regulator-always-on; ++ regulator-boot-on; ++ }; ++}; ++ ++&emmc { ++ status = "okay"; ++ bus-width = <8>; ++ cap-mmc-highspeed; ++ clock-frequency = <150000000>; ++ disable-wp; ++ keep-power-in-suspend; ++ non-removable; ++ num-slots = <1>; ++ vmmc-supply = <&vcc_io>; ++ vqmmc-supply = <&vcc18_flash>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&emmc_clk>, <&emmc_cmd>, <&emmc_bus8>; ++}; ++ ++&gmac { ++ status = "okay"; ++ phy-supply = <&vcc_lan>; ++ phy-mode = "rgmii"; ++ clock_in_out = "input"; ++ assigned-clocks = <&cru SCLK_MAC>; ++ assigned-clock-parents = <&ext_gmac>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&rgmii_pins>; ++ tx_delay = <0x30>; ++ rx_delay = <0x10>; ++}; ++ ++&i2c0 { ++ status = "okay"; ++ ++ rk808: pmic@1b { ++ compatible = "rockchip,rk808"; ++ reg = <0x1b>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pmic_int>, <&pmic_sleep>; ++ interrupt-parent = <&gpio0>; ++ interrupts = <5 IRQ_TYPE_LEVEL_LOW>; ++ rockchip,system-power-controller; ++ vcc1-supply = <&vcc_sys>; ++ vcc2-supply = <&vcc_sys>; ++ vcc3-supply = <&vcc_sys>; ++ vcc4-supply = <&vcc_sys>; ++ vcc6-supply = <&vcc_sys>; ++ vcc7-supply = <&vcc_sys>; ++ vcc8-supply = <&vcc_io>; ++ vcc9-supply = <&vcc_sys>; ++ vcc10-supply = <&vcc_sys>; ++ vcc11-supply = <&vcc_sys>; ++ vcc12-supply = <&vcc_io>; ++ clock-output-names = "xin32k", "rk808-clkout2"; ++ #clock-cells = <1>; ++ ++ regulators { ++ vdd_cpu: DCDC_REG1 { ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <700000>; ++ regulator-max-microvolt = <1500000>; ++ regulator-name = "vdd_cpu"; ++ }; ++ ++ vdd_log: DCDC_REG2 { ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <700000>; ++ regulator-max-microvolt = <1500000>; ++ regulator-name = "vdd_log"; ++ }; ++ ++ vcc_ddr: DCDC_REG3 { ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-name = "vcc_ddr"; ++ }; ++ ++ vcc_io: DCDC_REG4 { ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <3300000>; ++ regulator-max-microvolt = <3300000>; ++ regulator-name = "vcc_io"; ++ }; ++ ++ vcc18_flash: LDO_REG1 { ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <1800000>; ++ regulator-name = "vcc18_flash"; ++ }; ++ ++ vcc33_lcd: LDO_REG2 { ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <3300000>; ++ regulator-max-microvolt = <3300000>; ++ regulator-name = "vcc33_lcd"; ++ }; ++ ++ vdd_10: LDO_REG3 { ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <1000000>; ++ regulator-max-microvolt = <1000000>; ++ regulator-name = "vdd_10"; ++ }; ++ ++ vcca_18: LDO_REG4 { ++ regulator-boot-on; ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <1800000>; ++ regulator-name = "vcca_18"; ++ }; ++ ++ vccio_sd: LDO_REG5 { ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <3300000>; ++ regulator-name = "vccio_sd"; ++ }; ++ ++ vdd10_lcd: LDO_REG6 { ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <1000000>; ++ regulator-max-microvolt = <1000000>; ++ regulator-name = "vdd10_lcd"; ++ }; ++ ++ vcc_18: LDO_REG7 { ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <1800000>; ++ regulator-name = "vcc_18"; ++ }; ++ ++ vcc18_lcd: LDO_REG8 { ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <1800000>; ++ regulator-name = "vcc18_lcd"; ++ }; ++ ++ vcc_sd: SWITCH_REG1 { ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-name = "vcc_sd"; ++ }; ++ ++ vcc_lan: SWITCH_REG2 { ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-name = "vcc_lan"; ++ }; ++ }; ++ }; ++}; ++ ++&pinctrl { ++ ir { ++ ir_int: ir-int { ++ rockchip,pins = <3 30 RK_FUNC_GPIO &pcfg_pull_up>; ++ }; ++ }; ++ ++ keys { ++ pwr_key: pwr-key { ++ rockchip,pins = <0 2 RK_FUNC_GPIO &pcfg_pull_up>; ++ }; ++ }; ++ ++ pmic { ++ pmic_sleep: pmic-sleep { ++ rockchip,pins = <0 0 RK_FUNC_2 &pcfg_pull_none>; ++ }; ++ ++ pmic_int: pmic-int { ++ rockchip,pins = <0 5 RK_FUNC_GPIO &pcfg_pull_up>; ++ }; ++ }; ++}; ++ ++&tsadc { ++ status = "okay"; ++ rockchip,hw-tshut-mode = <0>; /* CRU */ ++ rockchip,hw-tshut-polarity = <0>; /* low */ ++}; ++ ++&uart2 { ++ status = "okay"; ++}; ++ ++&usb_host0_ehci { ++ status = "okay"; ++}; ++ ++&usb_otg { ++ status = "okay"; ++}; ++ ++&wdt { ++ status = "okay"; ++}; +-- +2.5.0 + diff --git a/Initial-AllWinner-A64-and-PINE64-support.patch b/Initial-AllWinner-A64-and-PINE64-support.patch new file mode 100644 index 000000000..d21cbc1ca --- /dev/null +++ b/Initial-AllWinner-A64-and-PINE64-support.patch @@ -0,0 +1,1882 @@ +From 97f002d28e975991226ab70599731bd2ccc8c060 Mon Sep 17 00:00:00 2001 +From: Peter Robinson +Date: Sun, 6 Mar 2016 12:06:41 +0000 +Subject: [PATCH] Initial AllWinner A64 and PINE64 support + +--- + Documentation/devicetree/bindings/arm/sunxi.txt | 1 + + Documentation/devicetree/bindings/clock/sunxi.txt | 7 + + .../bindings/pinctrl/allwinner,sunxi-pinctrl.txt | 1 + + .../devicetree/bindings/vendor-prefixes.txt | 1 + + arch/arm/boot/dts/sun8i-h3.dtsi | 18 +- + arch/arm/mach-sunxi/Kconfig | 7 + + arch/arm64/Kconfig.platforms | 6 + + arch/arm64/boot/dts/Makefile | 1 + + arch/arm64/boot/dts/allwinner/Makefile | 5 + + .../dts/allwinner/sun50i-a64-pine64-common.dtsi | 80 +++ + .../boot/dts/allwinner/sun50i-a64-pine64-plus.dts | 59 ++ + .../arm64/boot/dts/allwinner/sun50i-a64-pine64.dts | 58 ++ + arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi | 624 +++++++++++++++++++++ + drivers/clk/sunxi/Makefile | 1 + + drivers/clk/sunxi/clk-factors.c | 3 +- + drivers/clk/sunxi/clk-factors.h | 1 + + drivers/clk/sunxi/clk-multi-gates.c | 105 ++++ + drivers/clk/sunxi/clk-sunxi.c | 4 +- + drivers/crypto/Kconfig | 2 +- + drivers/pinctrl/sunxi/Kconfig | 4 + + drivers/pinctrl/sunxi/Makefile | 1 + + drivers/pinctrl/sunxi/pinctrl-sun50i-a64.c | 602 ++++++++++++++++++++ + drivers/rtc/Kconfig | 7 +- + 23 files changed, 1582 insertions(+), 16 deletions(-) + create mode 100644 arch/arm64/boot/dts/allwinner/Makefile + create mode 100644 arch/arm64/boot/dts/allwinner/sun50i-a64-pine64-common.dtsi + create mode 100644 arch/arm64/boot/dts/allwinner/sun50i-a64-pine64-plus.dts + create mode 100644 arch/arm64/boot/dts/allwinner/sun50i-a64-pine64.dts + create mode 100644 arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi + create mode 100644 drivers/clk/sunxi/clk-multi-gates.c + create mode 100644 drivers/pinctrl/sunxi/pinctrl-sun50i-a64.c + +diff --git a/Documentation/devicetree/bindings/arm/sunxi.txt b/Documentation/devicetree/bindings/arm/sunxi.txt +index bb9b0faa..8b39d2b 100644 +--- a/Documentation/devicetree/bindings/arm/sunxi.txt ++++ b/Documentation/devicetree/bindings/arm/sunxi.txt +@@ -13,3 +13,4 @@ using one of the following compatible strings: + allwinner,sun8i-a33 + allwinner,sun8i-h3 + allwinner,sun9i-a80 ++ allwinner,sun50i-a64 +diff --git a/Documentation/devicetree/bindings/clock/sunxi.txt b/Documentation/devicetree/bindings/clock/sunxi.txt +index e59f57b..8af12b5 100644 +--- a/Documentation/devicetree/bindings/clock/sunxi.txt ++++ b/Documentation/devicetree/bindings/clock/sunxi.txt +@@ -77,6 +77,8 @@ Required properties: + "allwinner,sun9i-a80-usb-mod-clk" - for usb gates + resets on A80 + "allwinner,sun9i-a80-usb-phy-clk" - for usb phy gates + resets on A80 + "allwinner,sun4i-a10-ve-clk" - for the Video Engine clock ++ "allwinner,sunxi-multi-bus-gates-clk" - for the multi-parent bus gates ++ "allwinner,sun50i-a64-bus-gates-clk" - for the bus gates on A64 + + Required properties for all clocks: + - reg : shall be the control register address for the clock. +@@ -117,6 +119,11 @@ For "allwinner,sun6i-a31-pll6-clk", there are 2 outputs. The first output + is the normal PLL6 output, or "pll6". The second output is rate doubled + PLL6, or "pll6x2". + ++The "allwinner,sunxi-multi-bus-gates-clk" holds the actual clocks in ++child nodes, where each one specifies the parent clock that the particular ++gates are depending from. The child nodes each follow the common clock ++binding as described in this document. ++ + The "allwinner,*-mmc-clk" clocks have three different outputs: the + main clock, with the ID 0, and the output and sample clocks, with the + IDs 1 and 2, respectively. +diff --git a/Documentation/devicetree/bindings/pinctrl/allwinner,sunxi-pinctrl.txt b/Documentation/devicetree/bindings/pinctrl/allwinner,sunxi-pinctrl.txt +index 9213b27..08b2361 100644 +--- a/Documentation/devicetree/bindings/pinctrl/allwinner,sunxi-pinctrl.txt ++++ b/Documentation/devicetree/bindings/pinctrl/allwinner,sunxi-pinctrl.txt +@@ -21,6 +21,7 @@ Required properties: + "allwinner,sun9i-a80-r-pinctrl" + "allwinner,sun8i-a83t-pinctrl" + "allwinner,sun8i-h3-pinctrl" ++ "allwinner,sun50i-a64-pinctrl" + + - reg: Should contain the register physical address and length for the + pin controller. +diff --git a/Documentation/devicetree/bindings/vendor-prefixes.txt b/Documentation/devicetree/bindings/vendor-prefixes.txt +index 72e2c5a..0c22fa9 100644 +--- a/Documentation/devicetree/bindings/vendor-prefixes.txt ++++ b/Documentation/devicetree/bindings/vendor-prefixes.txt +@@ -175,6 +175,7 @@ parade Parade Technologies Inc. + pericom Pericom Technology Inc. + phytec PHYTEC Messtechnik GmbH + picochip Picochip Ltd ++pine64 Pine64 + plathome Plat'Home Co., Ltd. + plda PLDA + pixcir PIXCIR MICROELECTRONICS Co., Ltd +diff --git a/arch/arm/boot/dts/sun8i-h3.dtsi b/arch/arm/boot/dts/sun8i-h3.dtsi +index 1524130e..7c50fa0 100644 +--- a/arch/arm/boot/dts/sun8i-h3.dtsi ++++ b/arch/arm/boot/dts/sun8i-h3.dtsi +@@ -137,12 +137,12 @@ + clock-output-names = "pll6d2"; + }; + +- /* dummy clock until pll6 can be reused */ +- pll8: pll8_clk { +- #clock-cells = <0>; +- compatible = "fixed-clock"; +- clock-frequency = <1>; +- clock-output-names = "pll8"; ++ pll8: clk@c01c20044 { ++ #clock-cells = <1>; ++ compatible = "allwinner,sun6i-a31-pll6-clk"; ++ reg = <0x01c20044 0x4>; ++ clocks = <&osc24M>; ++ clock-output-names = "pll8", "pll8x2"; + }; + + cpu: cpu_clk@01c20050 { +@@ -243,7 +243,7 @@ + #clock-cells = <1>; + compatible = "allwinner,sun4i-a10-mmc-clk"; + reg = <0x01c20088 0x4>; +- clocks = <&osc24M>, <&pll6 0>, <&pll8>; ++ clocks = <&osc24M>, <&pll6 0>, <&pll8 0>; + clock-output-names = "mmc0", + "mmc0_output", + "mmc0_sample"; +@@ -253,7 +253,7 @@ + #clock-cells = <1>; + compatible = "allwinner,sun4i-a10-mmc-clk"; + reg = <0x01c2008c 0x4>; +- clocks = <&osc24M>, <&pll6 0>, <&pll8>; ++ clocks = <&osc24M>, <&pll6 0>, <&pll8 0>; + clock-output-names = "mmc1", + "mmc1_output", + "mmc1_sample"; +@@ -263,7 +263,7 @@ + #clock-cells = <1>; + compatible = "allwinner,sun4i-a10-mmc-clk"; + reg = <0x01c20090 0x4>; +- clocks = <&osc24M>, <&pll6 0>, <&pll8>; ++ clocks = <&osc24M>, <&pll6 0>, <&pll8 0>; + clock-output-names = "mmc2", + "mmc2_output", + "mmc2_sample"; +diff --git a/arch/arm/mach-sunxi/Kconfig b/arch/arm/mach-sunxi/Kconfig +index c124d65..b305f5b 100644 +--- a/arch/arm/mach-sunxi/Kconfig ++++ b/arch/arm/mach-sunxi/Kconfig +@@ -46,4 +46,11 @@ config MACH_SUN9I + default ARCH_SUNXI + select ARM_GIC + ++config MACH_SUN50I ++ bool "Allwinner A64 (sun50i) SoCs support" ++ default ARCH_SUNXI ++ select ARM_GIC ++ select HAVE_ARM_ARCH_TIMER ++ select PINCTRL_SUN50I_A64 ++ + endif +diff --git a/arch/arm64/Kconfig.platforms b/arch/arm64/Kconfig.platforms +index 21074f6..63a690d 100644 +--- a/arch/arm64/Kconfig.platforms ++++ b/arch/arm64/Kconfig.platforms +@@ -72,6 +72,12 @@ config ARCH_SEATTLE + config ARCH_SHMOBILE + bool + ++config ARCH_SUNXI ++ bool "Allwinner sunxi 64-bit SoC Family" ++ select PINCTRL_SUN50I_A64 ++ help ++ This enables support for Allwinner sunxi based SoCs like the A64. ++ + config ARCH_RENESAS + bool "Renesas SoC Platforms" + select ARCH_SHMOBILE +diff --git a/arch/arm64/boot/dts/Makefile b/arch/arm64/boot/dts/Makefile +index f832b8a..3b7428a 100644 +--- a/arch/arm64/boot/dts/Makefile ++++ b/arch/arm64/boot/dts/Makefile +@@ -1,3 +1,4 @@ ++dts-dirs += allwinner + dts-dirs += altera + dts-dirs += amd + dts-dirs += apm +diff --git a/arch/arm64/boot/dts/allwinner/Makefile b/arch/arm64/boot/dts/allwinner/Makefile +new file mode 100644 +index 0000000..1e29a5a +--- /dev/null ++++ b/arch/arm64/boot/dts/allwinner/Makefile +@@ -0,0 +1,5 @@ ++dtb-$(CONFIG_ARCH_SUNXI) += sun50i-a64-pine64-plus.dtb sun50i-a64-pine64.dtb ++ ++always := $(dtb-y) ++subdir-y := $(dts-dirs) ++clean-files := *.dtb +diff --git a/arch/arm64/boot/dts/allwinner/sun50i-a64-pine64-common.dtsi b/arch/arm64/boot/dts/allwinner/sun50i-a64-pine64-common.dtsi +new file mode 100644 +index 0000000..d5a7249 +--- /dev/null ++++ b/arch/arm64/boot/dts/allwinner/sun50i-a64-pine64-common.dtsi +@@ -0,0 +1,80 @@ ++/* ++ * Copyright (c) 2016 ARM Ltd. ++ * ++ * This file is dual-licensed: you can use it either under the terms ++ * of the GPL or the X11 license, at your option. Note that this dual ++ * licensing only applies to this file, and not this project as a ++ * whole. ++ * ++ * a) This library 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. ++ * ++ * This library 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. ++ * ++ * Or, alternatively, ++ * ++ * b) Permission is hereby granted, free of charge, to any person ++ * obtaining a copy of this software and associated documentation ++ * files (the "Software"), to deal in the Software without ++ * restriction, including without limitation the rights to use, ++ * copy, modify, merge, publish, distribute, sublicense, and/or ++ * sell copies of the Software, and to permit persons to whom the ++ * Software is furnished to do so, subject to the following ++ * conditions: ++ * ++ * The above copyright notice and this permission notice shall be ++ * included in all copies or substantial portions of the Software. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ++ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES ++ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND ++ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT ++ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, ++ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING ++ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR ++ * OTHER DEALINGS IN THE SOFTWARE. ++ */ ++ ++#include "sun50i-a64.dtsi" ++ ++/ { ++ ++ aliases { ++ serial0 = &uart0; ++ }; ++ ++ soc { ++ reg_vcc3v3: vcc3v3 { ++ compatible = "regulator-fixed"; ++ regulator-name = "vcc3v3"; ++ regulator-min-microvolt = <3300000>; ++ regulator-max-microvolt = <3300000>; ++ }; ++ }; ++}; ++ ++&mmc0 { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&mmc0_pins>, <&mmc0_default_cd_pin>; ++ vmmc-supply = <®_vcc3v3>; ++ cd-gpios = <&pio 5 6 0>; ++ cd-inverted; ++ status = "okay"; ++}; ++ ++&uart0 { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&uart0_pins_a>; ++ status = "okay"; ++}; ++ ++&i2c1 { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&i2c1_pins>; ++ status = "okay"; ++}; +diff --git a/arch/arm64/boot/dts/allwinner/sun50i-a64-pine64-plus.dts b/arch/arm64/boot/dts/allwinner/sun50i-a64-pine64-plus.dts +new file mode 100644 +index 0000000..549dc15 +--- /dev/null ++++ b/arch/arm64/boot/dts/allwinner/sun50i-a64-pine64-plus.dts +@@ -0,0 +1,59 @@ ++/* ++ * Copyright (c) 2016 ARM Ltd. ++ * ++ * This file is dual-licensed: you can use it either under the terms ++ * of the GPL or the X11 license, at your option. Note that this dual ++ * licensing only applies to this file, and not this project as a ++ * whole. ++ * ++ * a) This library 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. ++ * ++ * This library 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. ++ * ++ * Or, alternatively, ++ * ++ * b) Permission is hereby granted, free of charge, to any person ++ * obtaining a copy of this software and associated documentation ++ * files (the "Software"), to deal in the Software without ++ * restriction, including without limitation the rights to use, ++ * copy, modify, merge, publish, distribute, sublicense, and/or ++ * sell copies of the Software, and to permit persons to whom the ++ * Software is furnished to do so, subject to the following ++ * conditions: ++ * ++ * The above copyright notice and this permission notice shall be ++ * included in all copies or substantial portions of the Software. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ++ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES ++ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND ++ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT ++ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, ++ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING ++ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR ++ * OTHER DEALINGS IN THE SOFTWARE. ++ */ ++ ++/dts-v1/; ++ ++#include "sun50i-a64-pine64-common.dtsi" ++ ++/ { ++ model = "Pine64+"; ++ compatible = "pine64,pine64-plus", "allwinner,sun50i-a64"; ++ ++ chosen { ++ stdout-path = "serial0:115200n8"; ++ }; ++ ++ /* There is a model with 2GB of DRAM, but U-Boot fixes this for us. */ ++ memory { ++ reg = <0x40000000 0x40000000>; ++ }; ++}; +diff --git a/arch/arm64/boot/dts/allwinner/sun50i-a64-pine64.dts b/arch/arm64/boot/dts/allwinner/sun50i-a64-pine64.dts +new file mode 100644 +index 0000000..ebe029e +--- /dev/null ++++ b/arch/arm64/boot/dts/allwinner/sun50i-a64-pine64.dts +@@ -0,0 +1,58 @@ ++/* ++ * Copyright (c) 2016 ARM Ltd. ++ * ++ * This file is dual-licensed: you can use it either under the terms ++ * of the GPL or the X11 license, at your option. Note that this dual ++ * licensing only applies to this file, and not this project as a ++ * whole. ++ * ++ * a) This library 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. ++ * ++ * This library 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. ++ * ++ * Or, alternatively, ++ * ++ * b) Permission is hereby granted, free of charge, to any person ++ * obtaining a copy of this software and associated documentation ++ * files (the "Software"), to deal in the Software without ++ * restriction, including without limitation the rights to use, ++ * copy, modify, merge, publish, distribute, sublicense, and/or ++ * sell copies of the Software, and to permit persons to whom the ++ * Software is furnished to do so, subject to the following ++ * conditions: ++ * ++ * The above copyright notice and this permission notice shall be ++ * included in all copies or substantial portions of the Software. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ++ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES ++ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND ++ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT ++ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, ++ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING ++ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR ++ * OTHER DEALINGS IN THE SOFTWARE. ++ */ ++ ++/dts-v1/; ++ ++#include "sun50i-a64-pine64-common.dtsi" ++ ++/ { ++ model = "Pine64"; ++ compatible = "pine64,pine64", "allwinner,sun50i-a64"; ++ ++ chosen { ++ stdout-path = "serial0:115200n8"; ++ }; ++ ++ memory { ++ reg = <0x40000000 0x20000000>; ++ }; ++}; +diff --git a/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi b/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi +new file mode 100644 +index 0000000..1bd436f +--- /dev/null ++++ b/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi +@@ -0,0 +1,624 @@ ++/* ++ * Copyright (C) 2016 ARM Ltd. ++ * based on the Allwinner H3 dtsi: ++ * Copyright (C) 2015 Jens Kuske ++ * ++ * This file is dual-licensed: you can use it either under the terms ++ * of the GPL or the X11 license, at your option. Note that this dual ++ * licensing only applies to this file, and not this project as a ++ * whole. ++ * ++ * a) This file 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. ++ * ++ * This file 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. ++ * ++ * Or, alternatively, ++ * ++ * b) Permission is hereby granted, free of charge, to any person ++ * obtaining a copy of this software and associated documentation ++ * files (the "Software"), to deal in the Software without ++ * restriction, including without limitation the rights to use, ++ * copy, modify, merge, publish, distribute, sublicense, and/or ++ * sell copies of the Software, and to permit persons to whom the ++ * Software is furnished to do so, subject to the following ++ * conditions: ++ * ++ * The above copyright notice and this permission notice shall be ++ * included in all copies or substantial portions of the Software. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ++ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES ++ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND ++ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT ++ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, ++ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING ++ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR ++ * OTHER DEALINGS IN THE SOFTWARE. ++ */ ++ ++#include ++#include ++ ++/ { ++ interrupt-parent = <&gic>; ++ #address-cells = <1>; ++ #size-cells = <1>; ++ ++ cpus { ++ #address-cells = <1>; ++ #size-cells = <0>; ++ ++ cpu@0 { ++ compatible = "arm,cortex-a53", "arm,armv8"; ++ device_type = "cpu"; ++ reg = <0>; ++ enable-method = "psci"; ++ }; ++ ++ cpu@1 { ++ compatible = "arm,cortex-a53", "arm,armv8"; ++ device_type = "cpu"; ++ reg = <1>; ++ enable-method = "psci"; ++ }; ++ ++ cpu@2 { ++ compatible = "arm,cortex-a53", "arm,armv8"; ++ device_type = "cpu"; ++ reg = <2>; ++ enable-method = "psci"; ++ }; ++ ++ cpu@3 { ++ compatible = "arm,cortex-a53", "arm,armv8"; ++ device_type = "cpu"; ++ reg = <3>; ++ enable-method = "psci"; ++ }; ++ }; ++ ++ psci { ++ compatible = "arm,psci-0.2"; ++ method = "smc"; ++ }; ++ ++ memory { ++ device_type = "memory"; ++ reg = <0x40000000 0>; ++ }; ++ ++ gic: interrupt-controller@1c81000 { ++ compatible = "arm,gic-400"; ++ interrupt-controller; ++ #interrupt-cells = <3>; ++ #address-cells = <0>; ++ ++ reg = <0x01c81000 0x1000>, ++ <0x01c82000 0x2000>, ++ <0x01c84000 0x2000>, ++ <0x01c86000 0x2000>; ++ interrupts = ; ++ }; ++ ++ timer { ++ compatible = "arm,armv8-timer"; ++ interrupts = , ++ , ++ , ++ ; ++ }; ++ ++ clocks { ++ #address-cells = <1>; ++ #size-cells = <1>; ++ ranges; ++ ++ osc24M: osc24M_clk { ++ #clock-cells = <0>; ++ compatible = "fixed-clock"; ++ clock-frequency = <24000000>; ++ clock-output-names = "osc24M"; ++ }; ++ ++ osc32k: osc32k_clk { ++ #clock-cells = <0>; ++ compatible = "fixed-clock"; ++ clock-frequency = <32768>; ++ clock-output-names = "osc32k"; ++ }; ++ ++ pll1: pll1_clk@1c20000 { ++ #clock-cells = <0>; ++ compatible = "allwinner,sun8i-a23-pll1-clk"; ++ reg = <0x01c20000 0x4>; ++ clocks = <&osc24M>; ++ clock-output-names = "pll1"; ++ }; ++ ++ pll6: pll6_clk@1c20028 { ++ #clock-cells = <1>; ++ compatible = "allwinner,sun6i-a31-pll6-clk"; ++ reg = <0x01c20028 0x4>; ++ clocks = <&osc24M>; ++ clock-output-names = "pll6", "pll6x2"; ++ }; ++ ++ pll6d2: pll6d2_clk { ++ #clock-cells = <0>; ++ compatible = "fixed-factor-clock"; ++ clock-div = <2>; ++ clock-mult = <1>; ++ clocks = <&pll6 0>; ++ clock-output-names = "pll6d2"; ++ }; ++ ++ pll7: pll7_clk@1c2002c { ++ #clock-cells = <1>; ++ compatible = "allwinner,sun6i-a31-pll6-clk"; ++ reg = <0x01c2002c 0x4>; ++ clocks = <&osc24M>; ++ clock-output-names = "pll7", "pll7x2"; ++ }; ++ ++ cpu: cpu_clk@1c20050 { ++ #clock-cells = <0>; ++ compatible = "allwinner,sun4i-a10-cpu-clk"; ++ reg = <0x01c20050 0x4>; ++ clocks = <&osc32k>, <&osc24M>, <&pll1>, <&pll1>; ++ clock-output-names = "cpu"; ++ critical-clocks = <0>; ++ }; ++ ++ axi: axi_clk@1c20050 { ++ #clock-cells = <0>; ++ compatible = "allwinner,sun4i-a10-axi-clk"; ++ reg = <0x01c20050 0x4>; ++ clocks = <&cpu>; ++ clock-output-names = "axi"; ++ }; ++ ++ ahb1: ahb1_clk@1c20054 { ++ #clock-cells = <0>; ++ compatible = "allwinner,sun6i-a31-ahb1-clk"; ++ reg = <0x01c20054 0x4>; ++ clocks = <&osc32k>, <&osc24M>, <&axi>, <&pll6 0>; ++ clock-output-names = "ahb1"; ++ }; ++ ++ ahb2: ahb2_clk@1c2005c { ++ #clock-cells = <0>; ++ compatible = "allwinner,sun8i-h3-ahb2-clk"; ++ reg = <0x01c2005c 0x4>; ++ clocks = <&ahb1>, <&pll6d2>; ++ clock-output-names = "ahb2"; ++ }; ++ ++ apb1: apb1_clk@1c20054 { ++ #clock-cells = <0>; ++ compatible = "allwinner,sun4i-a10-apb0-clk"; ++ reg = <0x01c20054 0x4>; ++ clocks = <&ahb1>; ++ clock-output-names = "apb1"; ++ }; ++ ++ apb2: apb2_clk@1c20058 { ++ #clock-cells = <0>; ++ compatible = "allwinner,sun4i-a10-apb1-clk"; ++ reg = <0x01c20058 0x4>; ++ clocks = <&osc32k>, <&osc24M>, <&pll6 1>, <&pll6 1>; ++ clock-output-names = "apb2"; ++ }; ++ ++ bus_gates: bus_gates_clk@1c20060 { ++ #clock-cells = <1>; ++ compatible = "allwinner,sun50i-a64-bus-gates-clk", ++ "allwinner,sunxi-multi-bus-gates-clk"; ++ reg = <0x01c20060 0x14>; ++ ahb1_parent { ++ clocks = <&ahb1>; ++ clock-indices = <1>, <5>, ++ <6>, <8>, ++ <9>, <10>, ++ <13>, <14>, ++ <18>, <19>, ++ <20>, <21>, ++ <23>, <24>, ++ <25>, <28>, ++ <32>, <35>, ++ <36>, <37>, ++ <40>, <43>, ++ <44>, <52>, ++ <53>, <54>, ++ <135>; ++ clock-output-names = "bus_mipidsi", "bus_ce", ++ "bus_dma", "bus_mmc0", ++ "bus_mmc1", "bus_mmc2", ++ "bus_nand", "bus_sdram", ++ "bus_ts", "bus_hstimer", ++ "bus_spi0", "bus_spi1", ++ "bus_otg", "bus_otg_ehci0", ++ "bus_ehci0", "bus_otg_ohci0", ++ "bus_ve", "bus_lcd0", ++ "bus_lcd1", "bus_deint", ++ "bus_csi", "bus_hdmi", ++ "bus_de", "bus_gpu", ++ "bus_msgbox", "bus_spinlock", ++ "bus_dbg"; ++ }; ++ ahb2_parent { ++ clocks = <&ahb2>; ++ clock-indices = <17>, <29>; ++ clock-output-names = "bus_gmac", "bus_ohci0"; ++ }; ++ apb1_parent { ++ clocks = <&apb1>; ++ clock-indices = <64>, <65>, ++ <69>, <72>, ++ <76>, <77>, ++ <78>; ++ clock-output-names = "bus_codec", "bus_spdif", ++ "bus_pio", "bus_ths", ++ "bus_i2s0", "bus_i2s1", ++ "bus_i2s2"; ++ }; ++ abp2_parent { ++ clocks = <&apb2>; ++ clock-indices = <96>, <97>, ++ <98>, <101>, ++ <112>, <113>, ++ <114>, <115>, ++ <116>; ++ clock-output-names = "bus_i2c0", "bus_i2c1", ++ "bus_i2c2", "bus_scr", ++ "bus_uart0", "bus_uart1", ++ "bus_uart2", "bus_uart3", ++ "bus_uart4"; ++ }; ++ }; ++ ++ mmc0_clk: mmc0_clk@1c20088 { ++ #clock-cells = <0>; ++ compatible = "allwinner,sun4i-a10-mod0-clk"; ++ reg = <0x01c20088 0x4>; ++ clocks = <&osc24M>, <&pll6 1>, <&pll7 1>; ++ clock-output-names = "mmc0"; ++ }; ++ ++ mmc1_clk: mmc1_clk@1c2008c { ++ #clock-cells = <0>; ++ compatible = "allwinner,sun4i-a10-mod0-clk"; ++ reg = <0x01c2008c 0x4>; ++ clocks = <&osc24M>, <&pll6 1>, <&pll7 1>; ++ clock-output-names = "mmc1"; ++ }; ++ ++ mmc2_clk: mmc2_clk@1c20090 { ++ #clock-cells = <0>; ++ compatible = "allwinner,sun4i-a10-mod0-clk"; ++ reg = <0x01c20090 0x4>; ++ clocks = <&osc24M>, <&pll6 1>, <&pll7 1>; ++ clock-output-names = "mmc2"; ++ }; ++ }; ++ ++ soc { ++ compatible = "simple-bus"; ++ #address-cells = <1>; ++ #size-cells = <1>; ++ ranges; ++ ++ mmc0: mmc@1c0f000 { ++ compatible = "allwinner,sun50i-a64-mmc", ++ "allwinner,sun5i-a13-mmc"; ++ reg = <0x01c0f000 0x1000>; ++ clocks = <&bus_gates 8>, <&mmc0_clk>, ++ <&mmc0_clk>, <&mmc0_clk>; ++ clock-names = "ahb", "mmc", ++ "output", "sample"; ++ resets = <&ahb_rst 8>; ++ reset-names = "ahb"; ++ interrupts = ; ++ status = "disabled"; ++ #address-cells = <1>; ++ #size-cells = <0>; ++ }; ++ ++ mmc1: mmc@1c10000 { ++ compatible = "allwinner,sun50i-a64-mmc", ++ "allwinner,sun5i-a13-mmc"; ++ reg = <0x01c10000 0x1000>; ++ clocks = <&bus_gates 9>, <&mmc1_clk>, ++ <&mmc1_clk>, <&mmc1_clk>; ++ clock-names = "ahb", "mmc", ++ "output", "sample"; ++ resets = <&ahb_rst 9>; ++ reset-names = "ahb"; ++ interrupts = ; ++ status = "disabled"; ++ #address-cells = <1>; ++ #size-cells = <0>; ++ }; ++ ++ mmc2: mmc@1c11000 { ++ compatible = "allwinner,sun50i-a64-mmc", ++ "allwinner,sun5i-a13-mmc"; ++ reg = <0x01c11000 0x1000>; ++ clocks = <&bus_gates 10>, <&mmc2_clk>, ++ <&mmc2_clk>, <&mmc2_clk>; ++ clock-names = "ahb", "mmc", ++ "output", "sample"; ++ resets = <&ahb_rst 10>; ++ reset-names = "ahb"; ++ interrupts = ; ++ status = "disabled"; ++ #address-cells = <1>; ++ #size-cells = <0>; ++ }; ++ ++ pio: pinctrl@1c20800 { ++ compatible = "allwinner,sun50i-a64-pinctrl"; ++ reg = <0x01c20800 0x400>; ++ interrupts = , ++ , ++ ; ++ clocks = <&bus_gates 69>; ++ gpio-controller; ++ #gpio-cells = <3>; ++ interrupt-controller; ++ #interrupt-cells = <2>; ++ ++ uart0_pins_a: uart0@0 { ++ allwinner,pins = "PB8", "PB9"; ++ allwinner,function = "uart0"; ++ allwinner,drive = ; ++ allwinner,pull = ; ++ }; ++ ++ uart0_pins_b: uart0@1 { ++ allwinner,pins = "PF2", "PF3"; ++ allwinner,function = "uart0"; ++ allwinner,drive = ; ++ allwinner,pull = ; ++ }; ++ ++ uart1_2pins: uart1_2@0 { ++ allwinner,pins = "PG6", "PG7"; ++ allwinner,function = "uart1"; ++ allwinner,drive = ; ++ allwinner,pull = ; ++ }; ++ ++ uart1_4pins: uart1_4@0 { ++ allwinner,pins = "PG6", "PG7", "PG8", "PG9"; ++ allwinner,function = "uart1"; ++ allwinner,drive = ; ++ allwinner,pull = ; ++ }; ++ ++ uart2_2pins: uart2_2@0 { ++ allwinner,pins = "PB0", "PB1"; ++ allwinner,function = "uart2"; ++ allwinner,drive = ; ++ allwinner,pull = ; ++ }; ++ ++ uart2_4pins: uart2_4@0 { ++ allwinner,pins = "PB0", "PB1", "PB2", "PB3"; ++ allwinner,function = "uart2"; ++ allwinner,drive = ; ++ allwinner,pull = ; ++ }; ++ ++ uart3_pins_a: uart3@0 { ++ allwinner,pins = "PD0", "PD1"; ++ allwinner,function = "uart3"; ++ allwinner,drive = ; ++ allwinner,pull = ; ++ }; ++ ++ uart3_2pins_b: uart3_2@1 { ++ allwinner,pins = "PH4", "PH5"; ++ allwinner,function = "uart3"; ++ allwinner,drive = ; ++ allwinner,pull = ; ++ }; ++ ++ uart3_4pins_b: uart3_4@1 { ++ allwinner,pins = "PH4", "PH5", "PH6", "PH7"; ++ allwinner,function = "uart3"; ++ allwinner,drive = ; ++ allwinner,pull = ; ++ }; ++ ++ uart4_2pins: uart4_2@0 { ++ allwinner,pins = "PD2", "PD3"; ++ allwinner,function = "uart4"; ++ allwinner,drive = ; ++ allwinner,pull = ; ++ }; ++ ++ uart4_4pins: uart4_4@0 { ++ allwinner,pins = "PD2", "PD3", "PD4", "PD5"; ++ allwinner,function = "uart4"; ++ allwinner,drive = ; ++ allwinner,pull = ; ++ }; ++ ++ mmc0_pins: mmc0@0 { ++ allwinner,pins = "PF0", "PF1", "PF2", "PF3", ++ "PF4", "PF5"; ++ allwinner,function = "mmc0"; ++ allwinner,drive = ; ++ allwinner,pull = ; ++ }; ++ ++ mmc0_default_cd_pin: mmc0_cd_pin@0 { ++ allwinner,pins = "PF6"; ++ allwinner,function = "gpio_in"; ++ allwinner,drive = ; ++ allwinner,pull = ; ++ }; ++ ++ mmc1_pins: mmc1@0 { ++ allwinner,pins = "PG0", "PG1", "PG2", "PG3", ++ "PG4", "PG5"; ++ allwinner,function = "mmc1"; ++ allwinner,drive = ; ++ allwinner,pull = ; ++ }; ++ ++ mmc2_pins: mmc2@0 { ++ allwinner,pins = "PC1", "PC5", "PC6", "PC8", ++ "PC9", "PC10"; ++ allwinner,function = "mmc2"; ++ allwinner,drive = ; ++ allwinner,pull = ; ++ }; ++ ++ i2c0_pins: i2c0_pins { ++ allwinner,pins = "PH0", "PH1"; ++ allwinner,function = "i2c0"; ++ allwinner,drive = ; ++ allwinner,pull = ; ++ }; ++ ++ i2c1_pins: i2c1_pins { ++ allwinner,pins = "PH2", "PH3"; ++ allwinner,function = "i2c1"; ++ allwinner,drive = ; ++ allwinner,pull = ; ++ }; ++ ++ i2c2_pins: i2c2_pins { ++ allwinner,pins = "PE14", "PE15"; ++ allwinner,function = "i2c2"; ++ allwinner,drive = ; ++ allwinner,pull = ; ++ }; ++ }; ++ ++ ahb_rst: reset@1c202c0 { ++ #reset-cells = <1>; ++ compatible = "allwinner,sun6i-a31-clock-reset"; ++ reg = <0x01c202c0 0xc>; ++ }; ++ ++ apb1_rst: reset@1c202d0 { ++ #reset-cells = <1>; ++ compatible = "allwinner,sun6i-a31-clock-reset"; ++ reg = <0x01c202d0 0x4>; ++ }; ++ ++ apb2_rst: reset@1c202d8 { ++ #reset-cells = <1>; ++ compatible = "allwinner,sun6i-a31-clock-reset"; ++ reg = <0x01c202d8 0x4>; ++ }; ++ ++ uart0: serial@1c28000 { ++ compatible = "snps,dw-apb-uart"; ++ reg = <0x01c28000 0x400>; ++ interrupts = ; ++ reg-shift = <2>; ++ reg-io-width = <4>; ++ clocks = <&bus_gates 112>; ++ resets = <&apb2_rst 16>; ++ status = "disabled"; ++ }; ++ ++ uart1: serial@1c28400 { ++ compatible = "snps,dw-apb-uart"; ++ reg = <0x01c28400 0x400>; ++ interrupts = ; ++ reg-shift = <2>; ++ reg-io-width = <4>; ++ clocks = <&bus_gates 113>; ++ resets = <&apb2_rst 17>; ++ status = "disabled"; ++ }; ++ ++ uart2: serial@1c28800 { ++ compatible = "snps,dw-apb-uart"; ++ reg = <0x01c28800 0x400>; ++ interrupts = ; ++ reg-shift = <2>; ++ reg-io-width = <4>; ++ clocks = <&bus_gates 114>; ++ resets = <&apb2_rst 18>; ++ status = "disabled"; ++ }; ++ ++ uart3: serial@1c28c00 { ++ compatible = "snps,dw-apb-uart"; ++ reg = <0x01c28c00 0x400>; ++ interrupts = ; ++ reg-shift = <2>; ++ reg-io-width = <4>; ++ clocks = <&bus_gates 115>; ++ resets = <&apb2_rst 19>; ++ status = "disabled"; ++ }; ++ ++ uart4: serial@1c29000 { ++ compatible = "snps,dw-apb-uart"; ++ reg = <0x01c29000 0x400>; ++ interrupts = ; ++ reg-shift = <2>; ++ reg-io-width = <4>; ++ clocks = <&bus_gates 116>; ++ resets = <&apb2_rst 20>; ++ status = "disabled"; ++ }; ++ ++ rtc: rtc@1f00000 { ++ compatible = "allwinner,sun6i-a31-rtc"; ++ reg = <0x01f00000 0x54>; ++ interrupts = , ++ ; ++ }; ++ ++ i2c0: i2c@1c2ac00 { ++ compatible = "allwinner,sun6i-a31-i2c"; ++ reg = <0x01c2ac00 0x400>; ++ interrupts = ; ++ clocks = <&bus_gates 96>; ++ resets = <&apb2_rst 0>; ++ status = "disabled"; ++ #address-cells = <1>; ++ #size-cells = <0>; ++ }; ++ ++ i2c1: i2c@1c2b000 { ++ compatible = "allwinner,sun6i-a31-i2c"; ++ reg = <0x01c2b000 0x400>; ++ interrupts = ; ++ clocks = <&bus_gates 97>; ++ resets = <&apb2_rst 1>; ++ status = "disabled"; ++ #address-cells = <1>; ++ #size-cells = <0>; ++ }; ++ ++ i2c2: i2c@1c2b400 { ++ compatible = "allwinner,sun6i-a31-i2c"; ++ reg = <0x01c2b400 0x400>; ++ interrupts = ; ++ clocks = <&bus_gates 98>; ++ resets = <&apb2_rst 2>; ++ status = "disabled"; ++ #address-cells = <1>; ++ #size-cells = <0>; ++ }; ++ }; ++}; +diff --git a/drivers/clk/sunxi/Makefile b/drivers/clk/sunxi/Makefile +index 3fd7901..3a9dc31 100644 +--- a/drivers/clk/sunxi/Makefile ++++ b/drivers/clk/sunxi/Makefile +@@ -11,6 +11,7 @@ obj-y += clk-a10-ve.o + obj-y += clk-a20-gmac.o + obj-y += clk-mod0.o + obj-y += clk-simple-gates.o ++obj-y += clk-multi-gates.o + obj-y += clk-sun8i-bus-gates.o + obj-y += clk-sun8i-mbus.o + obj-y += clk-sun9i-core.o +diff --git a/drivers/clk/sunxi/clk-factors.c b/drivers/clk/sunxi/clk-factors.c +index 59428db..607ba53 100644 +--- a/drivers/clk/sunxi/clk-factors.c ++++ b/drivers/clk/sunxi/clk-factors.c +@@ -184,7 +184,8 @@ struct clk *sunxi_factors_register(struct device_node *node, + if (data->name) + clk_name = data->name; + else +- of_property_read_string(node, "clock-output-names", &clk_name); ++ of_property_read_string_index(node, "clock-output-names", ++ data->name_idx, &clk_name); + + factors = kzalloc(sizeof(struct clk_factors), GFP_KERNEL); + if (!factors) +diff --git a/drivers/clk/sunxi/clk-factors.h b/drivers/clk/sunxi/clk-factors.h +index 171085a..cc89d1f 100644 +--- a/drivers/clk/sunxi/clk-factors.h ++++ b/drivers/clk/sunxi/clk-factors.h +@@ -26,6 +26,7 @@ struct factors_data { + struct clk_factors_config *table; + void (*getter) (u32 *rate, u32 parent_rate, u8 *n, u8 *k, u8 *m, u8 *p); + const char *name; ++ int name_idx; + }; + + struct clk_factors { +diff --git a/drivers/clk/sunxi/clk-multi-gates.c b/drivers/clk/sunxi/clk-multi-gates.c +new file mode 100644 +index 0000000..76e715a +--- /dev/null ++++ b/drivers/clk/sunxi/clk-multi-gates.c +@@ -0,0 +1,105 @@ ++/* ++ * Copyright (C) 2016 ARM Ltd. ++ * ++ * Based on clk-sun8i-bus-gates.c, which is: ++ * Copyright (C) 2015 Jens Kuske ++ * Based on clk-simple-gates.c, which is: ++ * Copyright 2015 Maxime Ripard ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++ ++static DEFINE_SPINLOCK(gates_lock); ++ ++static void __init sunxi_parse_parent(struct device_node *node, ++ struct clk_onecell_data *clk_data, ++ void __iomem *reg) ++{ ++ const char *parent = of_clk_get_parent_name(node, 0); ++ const char *clk_name; ++ struct property *prop; ++ struct clk *clk; ++ const __be32 *p; ++ int index, i = 0; ++ ++ of_property_for_each_u32(node, "clock-indices", prop, p, index) { ++ of_property_read_string_index(node, "clock-output-names", ++ i, &clk_name); ++ ++ clk = clk_register_gate(NULL, clk_name, parent, 0, ++ reg + 4 * (index / 32), index % 32, ++ 0, &gates_lock); ++ i++; ++ if (IS_ERR(clk)) { ++ pr_warn("could not register gate clock \"%s\"\n", ++ clk_name); ++ continue; ++ } ++ if (clk_data->clks[index]) ++ pr_warn("bus-gate clock %s: index #%d already registered as %s\n", ++ clk_name, index, "?"); ++ else ++ clk_data->clks[index] = clk; ++ } ++} ++ ++static void __init sunxi_multi_bus_gates_init(struct device_node *node) ++{ ++ struct clk_onecell_data *clk_data; ++ struct device_node *child; ++ struct property *prop; ++ struct resource res; ++ void __iomem *reg; ++ const __be32 *p; ++ int number = 0; ++ int index; ++ ++ reg = of_io_request_and_map(node, 0, of_node_full_name(node)); ++ if (IS_ERR(reg)) ++ return; ++ ++ clk_data = kmalloc(sizeof(struct clk_onecell_data), GFP_KERNEL); ++ if (!clk_data) ++ goto err_unmap; ++ ++ for_each_child_of_node(node, child) ++ of_property_for_each_u32(child, "clock-indices", prop, p, index) ++ number = max(number, index); ++ ++ clk_data->clks = kcalloc(number + 1, sizeof(struct clk *), GFP_KERNEL); ++ if (!clk_data->clks) ++ goto err_free_data; ++ ++ for_each_child_of_node(node, child) ++ sunxi_parse_parent(child, clk_data, reg); ++ ++ clk_data->clk_num = number + 1; ++ if (of_clk_add_provider(node, of_clk_src_onecell_get, clk_data)) ++ pr_err("registering bus-gate clock %s failed\n", node->name); ++ ++ return; ++ ++err_free_data: ++ kfree(clk_data); ++err_unmap: ++ iounmap(reg); ++ of_address_to_resource(node, 0, &res); ++ release_mem_region(res.start, resource_size(&res)); ++} ++ ++CLK_OF_DECLARE(sunxi_multi_bus_gates, "allwinner,sunxi-multi-bus-gates-clk", ++ sunxi_multi_bus_gates_init); +diff --git a/drivers/clk/sunxi/clk-sunxi.c b/drivers/clk/sunxi/clk-sunxi.c +index 5ba2188..ca59458 100644 +--- a/drivers/clk/sunxi/clk-sunxi.c ++++ b/drivers/clk/sunxi/clk-sunxi.c +@@ -711,14 +711,14 @@ static const struct factors_data sun4i_pll6_data __initconst = { + .enable = 31, + .table = &sun4i_pll5_config, + .getter = sun4i_get_pll5_factors, +- .name = "pll6", ++ .name_idx = 2, + }; + + static const struct factors_data sun6i_a31_pll6_data __initconst = { + .enable = 31, + .table = &sun6i_a31_pll6_config, + .getter = sun6i_a31_get_pll6_factors, +- .name = "pll6x2", ++ .name_idx = 1, + }; + + static const struct factors_data sun5i_a13_ahb_data __initconst = { +diff --git a/drivers/crypto/Kconfig b/drivers/crypto/Kconfig +index 07d4942..737200f 100644 +--- a/drivers/crypto/Kconfig ++++ b/drivers/crypto/Kconfig +@@ -487,7 +487,7 @@ config CRYPTO_DEV_IMGTEC_HASH + + config CRYPTO_DEV_SUN4I_SS + tristate "Support for Allwinner Security System cryptographic accelerator" +- depends on ARCH_SUNXI ++ depends on ARCH_SUNXI && !64BIT + select CRYPTO_MD5 + select CRYPTO_SHA1 + select CRYPTO_AES +diff --git a/drivers/pinctrl/sunxi/Kconfig b/drivers/pinctrl/sunxi/Kconfig +index f8dbc8b..c1f970f 100644 +--- a/drivers/pinctrl/sunxi/Kconfig ++++ b/drivers/pinctrl/sunxi/Kconfig +@@ -64,4 +64,8 @@ config PINCTRL_SUN9I_A80_R + depends on RESET_CONTROLLER + select PINCTRL_SUNXI_COMMON + ++config PINCTRL_SUN50I_A64 ++ bool ++ select PINCTRL_SUNXI_COMMON ++ + endif +diff --git a/drivers/pinctrl/sunxi/Makefile b/drivers/pinctrl/sunxi/Makefile +index ef82f22..0ca7681 100644 +--- a/drivers/pinctrl/sunxi/Makefile ++++ b/drivers/pinctrl/sunxi/Makefile +@@ -12,6 +12,7 @@ obj-$(CONFIG_PINCTRL_SUN7I_A20) += pinctrl-sun7i-a20.o + obj-$(CONFIG_PINCTRL_SUN8I_A23) += pinctrl-sun8i-a23.o + obj-$(CONFIG_PINCTRL_SUN8I_A23_R) += pinctrl-sun8i-a23-r.o + obj-$(CONFIG_PINCTRL_SUN8I_A33) += pinctrl-sun8i-a33.o ++obj-$(CONFIG_PINCTRL_SUN50I_A64) += pinctrl-sun50i-a64.o + obj-$(CONFIG_PINCTRL_SUN8I_A83T) += pinctrl-sun8i-a83t.o + obj-$(CONFIG_PINCTRL_SUN8I_H3) += pinctrl-sun8i-h3.o + obj-$(CONFIG_PINCTRL_SUN9I_A80) += pinctrl-sun9i-a80.o +diff --git a/drivers/pinctrl/sunxi/pinctrl-sun50i-a64.c b/drivers/pinctrl/sunxi/pinctrl-sun50i-a64.c +new file mode 100644 +index 0000000..a53cc23 +--- /dev/null ++++ b/drivers/pinctrl/sunxi/pinctrl-sun50i-a64.c +@@ -0,0 +1,602 @@ ++/* ++ * Allwinner A64 SoCs pinctrl driver. ++ * ++ * Copyright (C) 2016 - ARM Ltd. ++ * Author: Andre Przywara ++ * ++ * Based on pinctrl-sun7i-a20.c, which is: ++ * Copyright (C) 2014 Maxime Ripard ++ * ++ * This file is licensed under the terms of the GNU General Public ++ * License version 2. This program is licensed "as is" without any ++ * warranty of any kind, whether express or implied. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++ ++#include "pinctrl-sunxi.h" ++ ++static const struct sunxi_desc_pin a64_pins[] = { ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 0), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "uart2"), /* TX */ ++ SUNXI_FUNCTION(0x4, "jtag"), /* MS0 */ ++ SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 0)), /* EINT0 */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 1), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "uart2"), /* RX */ ++ SUNXI_FUNCTION(0x4, "jtag"), /* CK0 */ ++ SUNXI_FUNCTION(0x5, "sim"), /* VCCEN */ ++ SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 1)), /* EINT1 */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 2), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "uart2"), /* RTS */ ++ SUNXI_FUNCTION(0x4, "jtag"), /* DO0 */ ++ SUNXI_FUNCTION(0x5, "sim"), /* VPPEN */ ++ SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 2)), /* EINT2 */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 3), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "uart2"), /* CTS */ ++ SUNXI_FUNCTION(0x3, "i2s0"), /* MCLK */ ++ SUNXI_FUNCTION(0x4, "jtag"), /* DI0 */ ++ SUNXI_FUNCTION(0x5, "sim"), /* VPPPP */ ++ SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 3)), /* EINT3 */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 4), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "aif2"), /* SYNC */ ++ SUNXI_FUNCTION(0x3, "i2s0"), /* SYNC */ ++ SUNXI_FUNCTION(0x5, "sim"), /* CLK */ ++ SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 4)), /* EINT4 */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 5), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "aif2"), /* BCLK */ ++ SUNXI_FUNCTION(0x3, "i2s0"), /* BCLK */ ++ SUNXI_FUNCTION(0x5, "sim"), /* DATA */ ++ SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 5)), /* EINT5 */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 6), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "aif2"), /* DOUT */ ++ SUNXI_FUNCTION(0x3, "i2s0"), /* DOUT */ ++ SUNXI_FUNCTION(0x5, "sim"), /* RST */ ++ SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 6)), /* EINT6 */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 7), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "aif2"), /* DIN */ ++ SUNXI_FUNCTION(0x3, "i2s0"), /* DIN */ ++ SUNXI_FUNCTION(0x5, "sim"), /* DET */ ++ SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 7)), /* EINT7 */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 8), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x4, "uart0"), /* TX */ ++ SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 8)), /* EINT8 */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 9), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x4, "uart0"), /* RX */ ++ SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 9)), /* EINT9 */ ++ /* Hole */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 0), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "nand0"), /* NWE */ ++ SUNXI_FUNCTION(0x4, "spi0")), /* MOSI */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 1), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "nand0"), /* NALE */ ++ SUNXI_FUNCTION(0x3, "mmc2"), /* DS */ ++ SUNXI_FUNCTION(0x4, "spi0")), /* MISO */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 2), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "nand0"), /* NCLE */ ++ SUNXI_FUNCTION(0x4, "spi0")), /* SCK */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 3), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "nand0"), /* NCE1 */ ++ SUNXI_FUNCTION(0x4, "spi0")), /* CS */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 4), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "nand0")), /* NCE0 */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 5), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "nand0"), /* NRE# */ ++ SUNXI_FUNCTION(0x3, "mmc2")), /* CLK */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 6), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "nand0"), /* NRB0 */ ++ SUNXI_FUNCTION(0x3, "mmc2")), /* CMD */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 7), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "nand0")), /* NRB1 */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 8), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "nand0"), /* NDQ0 */ ++ SUNXI_FUNCTION(0x3, "mmc2")), /* D0 */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 9), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "nand0"), /* NDQ1 */ ++ SUNXI_FUNCTION(0x3, "mmc2")), /* D1 */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 10), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "nand0"), /* NDQ2 */ ++ SUNXI_FUNCTION(0x3, "mmc2")), /* D2 */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 11), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "nand0"), /* NDQ3 */ ++ SUNXI_FUNCTION(0x3, "mmc2")), /* D3 */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 12), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "nand0"), /* NDQ4 */ ++ SUNXI_FUNCTION(0x3, "mmc2")), /* D4 */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 13), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "nand0"), /* NDQ5 */ ++ SUNXI_FUNCTION(0x3, "mmc2")), /* D5 */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 14), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "nand0"), /* NDQ6 */ ++ SUNXI_FUNCTION(0x3, "mmc2")), /* D6 */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 15), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "nand0"), /* NDQ7 */ ++ SUNXI_FUNCTION(0x3, "mmc2")), /* D7 */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 16), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "nand0"), /* NDQS */ ++ SUNXI_FUNCTION(0x3, "mmc2")), /* RST */ ++ /* Hole */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 0), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "lcd0"), /* D2 */ ++ SUNXI_FUNCTION(0x3, "uart3"), /* TX */ ++ SUNXI_FUNCTION(0x4, "spi1"), /* CS */ ++ SUNXI_FUNCTION(0x5, "ccir")), /* CLK */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 1), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "lcd0"), /* D3 */ ++ SUNXI_FUNCTION(0x3, "uart3"), /* RX */ ++ SUNXI_FUNCTION(0x4, "spi1"), /* CLK */ ++ SUNXI_FUNCTION(0x5, "ccir")), /* DE */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 2), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "lcd0"), /* D4 */ ++ SUNXI_FUNCTION(0x3, "uart4"), /* TX */ ++ SUNXI_FUNCTION(0x4, "spi1"), /* MOSI */ ++ SUNXI_FUNCTION(0x5, "ccir")), /* HSYNC */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 3), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "lcd0"), /* D5 */ ++ SUNXI_FUNCTION(0x3, "uart4"), /* RX */ ++ SUNXI_FUNCTION(0x4, "spi1"), /* MISO */ ++ SUNXI_FUNCTION(0x5, "ccir")), /* VSYNC */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 4), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "lcd0"), /* D6 */ ++ SUNXI_FUNCTION(0x3, "uart4"), /* RTS */ ++ SUNXI_FUNCTION(0x5, "ccir")), /* D0 */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 5), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "lcd0"), /* D7 */ ++ SUNXI_FUNCTION(0x3, "uart4"), /* CTS */ ++ SUNXI_FUNCTION(0x5, "ccir")), /* D1 */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 6), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "lcd0"), /* D10 */ ++ SUNXI_FUNCTION(0x5, "ccir")), /* D2 */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 7), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "lcd0"), /* D11 */ ++ SUNXI_FUNCTION(0x5, "ccir")), /* D3 */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 8), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "lcd0"), /* D12 */ ++ SUNXI_FUNCTION(0x4, "emac"), /* ERXD3 */ ++ SUNXI_FUNCTION(0x5, "ccir")), /* D4 */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 9), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "lcd0"), /* D13 */ ++ SUNXI_FUNCTION(0x4, "emac"), /* ERXD2 */ ++ SUNXI_FUNCTION(0x5, "ccir")), /* D5 */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 10), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "lcd0"), /* D14 */ ++ SUNXI_FUNCTION(0x4, "emac")), /* ERXD1 */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 11), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "lcd0"), /* D15 */ ++ SUNXI_FUNCTION(0x4, "emac")), /* ERXD0 */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 12), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "lcd0"), /* D18 */ ++ SUNXI_FUNCTION(0x3, "lvds0"), /* VP0 */ ++ SUNXI_FUNCTION(0x4, "emac")), /* ERXCK */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 13), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "lcd0"), /* D19 */ ++ SUNXI_FUNCTION(0x3, "lvds0"), /* VN0 */ ++ SUNXI_FUNCTION(0x4, "emac")), /* ERXCTL */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 14), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "lcd0"), /* D20 */ ++ SUNXI_FUNCTION(0x3, "lvds0"), /* VP1 */ ++ SUNXI_FUNCTION(0x4, "emac")), /* ENULL */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 15), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "lcd0"), /* D21 */ ++ SUNXI_FUNCTION(0x3, "lvds0"), /* VN1 */ ++ SUNXI_FUNCTION(0x4, "emac"), /* ETXD3 */ ++ SUNXI_FUNCTION(0x5, "ccir")), /* D6 */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 16), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "lcd0"), /* D22 */ ++ SUNXI_FUNCTION(0x3, "lvds0"), /* VP2 */ ++ SUNXI_FUNCTION(0x4, "emac"), /* ETXD2 */ ++ SUNXI_FUNCTION(0x5, "ccir")), /* D7 */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 17), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "lcd0"), /* D23 */ ++ SUNXI_FUNCTION(0x3, "lvds0"), /* VN2 */ ++ SUNXI_FUNCTION(0x4, "emac")), /* ETXD1 */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 18), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "lcd0"), /* CLK */ ++ SUNXI_FUNCTION(0x3, "lvds0"), /* VPC */ ++ SUNXI_FUNCTION(0x4, "emac")), /* ETXD0 */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 19), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "lcd0"), /* DE */ ++ SUNXI_FUNCTION(0x3, "lvds0"), /* VNC */ ++ SUNXI_FUNCTION(0x4, "emac")), /* ETXCK */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 20), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "lcd0"), /* HSYNC */ ++ SUNXI_FUNCTION(0x3, "lvds0"), /* VP3 */ ++ SUNXI_FUNCTION(0x4, "emac")), /* ETXCTL */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 21), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "lcd0"), /* VSYNC */ ++ SUNXI_FUNCTION(0x3, "lvds0"), /* VN3 */ ++ SUNXI_FUNCTION(0x4, "emac")), /* ECLKIN */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 22), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "pwm"), /* PWM0 */ ++ SUNXI_FUNCTION(0x4, "emac")), /* EMDC */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 23), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x4, "emac")), /* EMDIO */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 24), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out")), ++ /* Hole */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 0), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "csi0"), /* PCK */ ++ SUNXI_FUNCTION(0x4, "ts0")), /* CLK */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 1), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "csi0"), /* CK */ ++ SUNXI_FUNCTION(0x4, "ts0")), /* ERR */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 2), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "csi0"), /* HSYNC */ ++ SUNXI_FUNCTION(0x4, "ts0")), /* SYNC */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 3), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "csi0"), /* VSYNC */ ++ SUNXI_FUNCTION(0x4, "ts0")), /* DVLD */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 4), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "csi0"), /* D0 */ ++ SUNXI_FUNCTION(0x4, "ts0")), /* D0 */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 5), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "csi0"), /* D1 */ ++ SUNXI_FUNCTION(0x4, "ts0")), /* D1 */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 6), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "csi0"), /* D2 */ ++ SUNXI_FUNCTION(0x4, "ts0")), /* D2 */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 7), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "csi0"), /* D3 */ ++ SUNXI_FUNCTION(0x4, "ts0")), /* D3 */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 8), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "csi0"), /* D4 */ ++ SUNXI_FUNCTION(0x4, "ts0")), /* D4 */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 9), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "csi0"), /* D5 */ ++ SUNXI_FUNCTION(0x4, "ts0")), /* D5 */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 10), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "csi0"), /* D6 */ ++ SUNXI_FUNCTION(0x4, "ts0")), /* D6 */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 11), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "csi0"), /* D7 */ ++ SUNXI_FUNCTION(0x4, "ts0")), /* D7 */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 12), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "csi0")), /* SCK */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 13), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "csi0")), /* SDA */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 14), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "pll"), /* LOCK_DBG */ ++ SUNXI_FUNCTION(0x3, "i2c2")), /* SCK */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 15), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x3, "i2c2")), /* SDA */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 16), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out")), ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 17), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out")), ++ /* Hole */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 0), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "mmc0"), /* D1 */ ++ SUNXI_FUNCTION(0x3, "jtag")), /* MSI */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 1), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "mmc0"), /* D0 */ ++ SUNXI_FUNCTION(0x3, "jtag")), /* DI1 */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 2), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "mmc0"), /* CLK */ ++ SUNXI_FUNCTION(0x3, "uart0")), /* TX */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 3), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "mmc0"), /* CMD */ ++ SUNXI_FUNCTION(0x3, "jtag")), /* DO1 */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 4), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "mmc0"), /* D3 */ ++ SUNXI_FUNCTION(0x4, "uart0")), /* RX */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 5), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "mmc0"), /* D2 */ ++ SUNXI_FUNCTION(0x3, "jtag")), /* CK1 */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 6), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out")), ++ /* Hole */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 0), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "mmc1"), /* CLK */ ++ SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 0)), /* EINT0 */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 1), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "mmc1"), /* CMD */ ++ SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 1)), /* EINT1 */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 2), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "mmc1"), /* D0 */ ++ SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 2)), /* EINT2 */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 3), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "mmc1"), /* D1 */ ++ SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 3)), /* EINT3 */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 4), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "mmc1"), /* D2 */ ++ SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 4)), /* EINT4 */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 5), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "mmc1"), /* D3 */ ++ SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 5)), /* EINT5 */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 6), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "uart1"), /* TX */ ++ SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 6)), /* EINT6 */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 7), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "uart1"), /* RX */ ++ SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 7)), /* EINT7 */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 8), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "uart1"), /* RTS */ ++ SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 8)), /* EINT8 */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 9), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "uart1"), /* CTS */ ++ SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 9)), /* EINT9 */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 10), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "aif3"), /* SYNC */ ++ SUNXI_FUNCTION(0x3, "i2s1"), /* SYNC */ ++ SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 10)), /* EINT10 */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 11), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "aif3"), /* BCLK */ ++ SUNXI_FUNCTION(0x3, "i2s1"), /* BCLK */ ++ SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 11)), /* EINT11 */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 12), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "aif3"), /* DOUT */ ++ SUNXI_FUNCTION(0x3, "i2s1"), /* DOUT */ ++ SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 12)), /* EINT12 */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 13), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "aif3"), /* DIN */ ++ SUNXI_FUNCTION(0x3, "i2s1"), /* DIN */ ++ SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 13)), /* EINT13 */ ++ /* Hole */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 0), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "i2c0"), /* SCK */ ++ SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 0)), /* EINT0 */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 1), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "i2c0"), /* SDA */ ++ SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 1)), /* EINT1 */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 2), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "i2c1"), /* SCK */ ++ SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 2)), /* EINT2 */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 3), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "i2c1"), /* SDA */ ++ SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 3)), /* EINT3 */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 4), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "uart3"), /* TX */ ++ SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 4)), /* EINT4 */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 5), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "uart3"), /* RX */ ++ SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 5)), /* EINT5 */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 6), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "uart3"), /* RTS */ ++ SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 6)), /* EINT6 */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 7), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "uart3"), /* CTS */ ++ SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 7)), /* EINT7 */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 8), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "spdif"), /* OUT */ ++ SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 8)), /* EINT8 */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 9), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 9)), /* EINT9 */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 10), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "mic"), /* CLK */ ++ SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 10)), /* EINT10 */ ++ SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 11), ++ SUNXI_FUNCTION(0x0, "gpio_in"), ++ SUNXI_FUNCTION(0x1, "gpio_out"), ++ SUNXI_FUNCTION(0x2, "mic"), /* DATA */ ++ SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 11)), /* EINT11 */ ++}; ++ ++static const struct sunxi_pinctrl_desc a64_pinctrl_data = { ++ .pins = a64_pins, ++ .npins = ARRAY_SIZE(a64_pins), ++ .irq_banks = 3, ++}; ++ ++static int a64_pinctrl_probe(struct platform_device *pdev) ++{ ++ return sunxi_pinctrl_init(pdev, ++ &a64_pinctrl_data); ++} ++ ++static const struct of_device_id a64_pinctrl_match[] = { ++ { .compatible = "allwinner,sun50i-a64-pinctrl", }, ++ {} ++}; ++MODULE_DEVICE_TABLE(of, a64_pinctrl_match); ++ ++static struct platform_driver a64_pinctrl_driver = { ++ .probe = a64_pinctrl_probe, ++ .driver = { ++ .name = "sun50i-a64-pinctrl", ++ .of_match_table = a64_pinctrl_match, ++ }, ++}; ++builtin_platform_driver(a64_pinctrl_driver); +diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig +index 376322f..526eaf4 100644 +--- a/drivers/rtc/Kconfig ++++ b/drivers/rtc/Kconfig +@@ -1360,10 +1360,11 @@ config RTC_DRV_SUN4V + + config RTC_DRV_SUN6I + tristate "Allwinner A31 RTC" +- depends on MACH_SUN6I || MACH_SUN8I ++ default MACH_SUN6I || MACH_SUN8I ++ depends on ARCH_SUNXI + help +- If you say Y here you will get support for the RTC found on +- Allwinner A31. ++ If you say Y here you will get support for the RTC found in ++ some Allwinner SoCs like the A31 or the A64. + + config RTC_DRV_SUNXI + tristate "Allwinner sun4i/sun7i RTC" +-- +2.5.0 + diff --git a/config-arm-generic b/config-arm-generic index 987695636..8215a36a8 100644 --- a/config-arm-generic +++ b/config-arm-generic @@ -79,6 +79,11 @@ CONFIG_CRYPTO_SHA1_ARM_NEON=y CONFIG_CRYPTO_SHA512_ARM_NEON=y CONFIG_CRYPTO_SHA512_ARM=y +# EDAC +CONFIG_EDAC=y +CONFIG_EDAC_MM_EDAC=m +CONFIG_EDAC_LEGACY_SYSFS=y + # ARM VExpress CONFIG_ARCH_VEXPRESS=y CONFIG_MFD_VEXPRESS_SYSREG=y @@ -128,8 +133,41 @@ CONFIG_CRYPTO_DEV_ROCKCHIP=m CONFIG_ROCKCHIP_EFUSE=m # Tegra -# CONFIG_TEGRA_AHB is not set -# +CONFIG_ARM_TEGRA_CPUFREQ=y +CONFIG_TEGRA_MC=y +CONFIG_TEGRA124_EMC=y +CONFIG_TEGRA_IOMMU_SMMU=y +CONFIG_TEGRA_AHB=y +CONFIG_TEGRA20_APB_DMA=y +CONFIG_TRUSTED_FOUNDATIONS=y +CONFIG_SERIAL_TEGRA=y +CONFIG_PCI_TEGRA=y +CONFIG_AHCI_TEGRA=m +CONFIG_MMC_SDHCI_TEGRA=m +CONFIG_TEGRA_WATCHDOG=m +CONFIG_I2C_TEGRA=m +CONFIG_SPI_TEGRA114=m +CONFIG_PWM_TEGRA=m +CONFIG_KEYBOARD_TEGRA=m +CONFIG_USB_EHCI_TEGRA=m +CONFIG_RTC_DRV_TEGRA=m +CONFIG_ARM_TEGRA_DEVFREQ=m +CONFIG_ARM_TEGRA124_CPUFREQ=m +CONFIG_TEGRA_SOCTHERM=m + +CONFIG_TEGRA_HOST1X=m +CONFIG_TEGRA_HOST1X_FIREWALL=y +CONFIG_DRM_TEGRA=m +CONFIG_DRM_TEGRA_FBDEV=y +# CONFIG_DRM_TEGRA_DEBUG is not set +CONFIG_DRM_TEGRA_STAGING=y +CONFIG_NOUVEAU_PLATFORM_DRIVER=y +CONFIG_SND_HDA_TEGRA=m + +# CONFIG_ARM_TEGRA20_CPUFREQ is not set +# CONFIG_MFD_NVEC is not set +# CONFIG_TEGRA20_APB_DMA is not set + # Virt CONFIG_PARAVIRT=y CONFIG_PARAVIRT_TIME_ACCOUNTING=y @@ -248,6 +286,18 @@ CONFIG_USB_CONFIGFS_SERIAL=y CONFIG_MMC_SPI=m CONFIG_MMC_SDHCI_OF_ARASAN=m +# LCD Panels +CONFIG_DRM_PANEL=y +CONFIG_DRM_PANEL_SIMPLE=m +CONFIG_DRM_PANEL_LD9040=m +CONFIG_DRM_PANEL_LG_LG4573=m +CONFIG_DRM_PANEL_PANASONIC_VVX10F034N00=m +CONFIG_DRM_PANEL_S6E8AA0=m +CONFIG_DRM_PANEL_SHARP_LQ101R1SX01=m +CONFIG_DRM_PANEL_SHARP_LS043T1LE01=m +CONFIG_DRM_PANEL_SAMSUNG_LD9040=m +CONFIG_DRM_PANEL_SAMSUNG_S6E8AA0=m + # Designware (used by numerous devices) CONFIG_MMC_DW=m CONFIG_MMC_DW_PLTFM=m @@ -367,11 +417,6 @@ CONFIG_CMA_SIZE_SEL_MBYTES=y CONFIG_CMA_ALIGNMENT=8 CONFIG_CMA_AREAS=7 -# EDAC -CONFIG_EDAC=y -CONFIG_EDAC_MM_EDAC=m -CONFIG_EDAC_LEGACY_SYSFS=y - # VFIO CONFIG_VFIO_PLATFORM=m CONFIG_VFIO_AMBA=m diff --git a/config-arm64 b/config-arm64 index 1ef481a75..773a35ee5 100644 --- a/config-arm64 +++ b/config-arm64 @@ -9,6 +9,8 @@ CONFIG_SCHED_SMT=y # arm64 only SoCs CONFIG_ARCH_HISI=y CONFIG_ARCH_SEATTLE=y +CONFIG_ARCH_SUNXI=y +CONFIG_ARCH_TEGRA=y CONFIG_ARCH_XGENE=y # CONFIG_ARCH_BCM_IPROC is not set # CONFIG_ARCH_BERLIN is not set @@ -20,7 +22,6 @@ CONFIG_ARCH_XGENE=y # CONFIG_ARCH_RENESAS is not set # CONFIG_ARCH_SPRD is not set # CONFIG_ARCH_STRATIX10 is not set -# CONFIG_ARCH_TEGRA is not set # CONFIG_ARCH_THUNDER is not set # CONFIG_ARCH_ZYNQMP is not set # CONFIG_ARCH_UNIPHIER is not set @@ -142,6 +143,31 @@ CONFIG_STUB_CLK_HI6220=y CONFIG_PHY_HI6220_USB=m CONFIG_COMMON_RESET_HI6220=m +# Tegra +CONFIG_ARCH_TEGRA_132_SOC=y +CONFIG_ARCH_TEGRA_210_SOC=y + +# AllWinner +CONFIG_MACH_SUN50I=y +CONFIG_SUNXI_RSB=m +CONFIG_AHCI_SUNXI=m +CONFIG_NET_VENDOR_ALLWINNER=y +# CONFIG_SUN4I_EMAC is not set +# CONFIG_MDIO_SUN4I is not set +# CONFIG_KEYBOARD_SUN4I_LRADC is not set +# CONFIG_TOUCHSCREEN_SUN4I is not set +# CONFIG_SERIO_SUN4I_PS2 is not set +CONFIG_I2C_MV64XXX=m +CONFIG_SUNXI_WATCHDOG=m +CONFIG_MFD_SUN6I_PRCM=y +CONFIG_IR_SUNXI=m +CONFIG_MMC_SUNXI=m +CONFIG_RTC_DRV_SUN6I=m +CONFIG_PWM_SUN4I=m +# CONFIG_PHY_SUN4I_USB is not set +# CONFIG_PHY_SUN9I_USB is not set +CONFIG_NVMEM_SUNXI_SID=m + # ThunderX # CONFIG_MDIO_OCTEON is not set diff --git a/config-armv7 b/config-armv7 index bf1742e09..0cce9bc04 100644 --- a/config-armv7 +++ b/config-armv7 @@ -3,6 +3,7 @@ # CONFIG_ARCH_BERLIN is not set # CONFIG_ARCH_KEYSTONE is not set CONFIG_ARCH_MXC=y +CONFIG_ARCH_MMP=y CONFIG_ARCH_OMAP3=y CONFIG_ARCH_OMAP4=y CONFIG_ARCH_QCOM=y @@ -510,6 +511,24 @@ CONFIG_REGULATOR_DA9055=m # picoxcell # CONFIG_CRYPTO_DEV_PICOXCELL is not set +# MMP XO 1.75 +# CONFIG_MACH_BROWNSTONE is not set +# CONFIG_MACH_FLINT is not set +# CONFIG_MACH_MARVELL_JASPER is not set +CONFIG_MACH_MMP2_DT=y +CONFIG_SERIAL_PXA=y +CONFIG_SERIAL_PXA_CONSOLE=y +CONFIG_KEYBOARD_PXA27x=y +CONFIG_I2C_PXA=m +# CONFIG_I2C_PXA_SLAVE is not set +CONFIG_SND_MMP_SOC=y +CONFIG_SND_PXA910_SOC=m +CONFIG_MMC_SDHCI_PXAV2=m +CONFIG_MMP_PDMA=y +CONFIG_MMP_TDMA=y +CONFIG_PXA_DMA=y +CONFIG_SERIO_OLPC_APSP=m + # Exynos 4 CONFIG_ARCH_EXYNOS4=y CONFIG_SOC_EXYNOS4212=y @@ -591,9 +610,6 @@ CONFIG_MFD_TPS6586X=y CONFIG_GPIO_TPS6586X=y CONFIG_RTC_DRV_TPS6586X=m -# OLPC XO -CONFIG_SERIO_OLPC_APSP=m - # Zynq-7xxx CONFIG_SERIAL_UARTLITE=y CONFIG_SERIAL_UARTLITE_CONSOLE=y @@ -626,9 +642,9 @@ CONFIG_USB_GADGET_XILINX=m CONFIG_PCIE_XILINX=y CONFIG_CADENCE_WATCHDOG=m CONFIG_REGULATOR_ISL9305=m -CONFIG_EDAC_SYNOPSYS=m CONFIG_PINCTRL_ZYNQ=y CONFIG_AXI_DMAC=m +CONFIG_EDAC_SYNOPSYS=m # Multi function devices CONFIG_MFD_88PM800=m diff --git a/config-armv7-generic b/config-armv7-generic index d845e63c0..e4322ac8e 100644 --- a/config-armv7-generic +++ b/config-armv7-generic @@ -49,6 +49,7 @@ CONFIG_CPU_SW_DOMAIN_PAN=y # CONFIG_ARM_VIRT_EXT is not set # Platforms enabled/disabled globally on ARMv7 +CONFIG_ARCH_BCM2835=y CONFIG_ARCH_EXYNOS=y CONFIG_ARCH_HIGHBANK=y CONFIG_ARCH_SUNXI=y @@ -170,8 +171,6 @@ CONFIG_RTC_DRV_PL030=y CONFIG_AMBA_PL08X=y CONFIG_SND_ARMAACI=m -CONFIG_EDAC=y - # highbank CONFIG_EDAC_HIGHBANK_MC=m CONFIG_EDAC_HIGHBANK_L2=m @@ -188,6 +187,7 @@ CONFIG_MACH_SUN6I=y CONFIG_MACH_SUN7I=y CONFIG_MACH_SUN8I=y # CONFIG_MACH_SUN9I is not set +# CONFIG_MACH_SUN50I is not set CONFIG_SUNXI_SRAM=y CONFIG_DMA_SUN4I=m CONFIG_DMA_SUN6I=m @@ -229,6 +229,22 @@ CONFIG_SND_SUN4I_CODEC=m CONFIG_SUNXI_RSB=m CONFIG_NVMEM_SUNXI_SID=m +# BCM 283x +CONFIG_SERIAL_AMBA_PL011=y +CONFIG_SERIAL_AMBA_PL011_CONSOLE=y +CONFIG_DMA_BCM2835=m +CONFIG_MMC_SDHCI_BCM2835=m +CONFIG_BCM2835_MBOX=m +CONFIG_PWM_BCM2835=m +CONFIG_HW_RANDOM_BCM2835=m +CONFIG_I2C_BCM2835=m +CONFIG_SPI_BCM2835=m +CONFIG_SPI_BCM2835AUX=m +CONFIG_BCM2835_WDT=m +CONFIG_SND_BCM2835_SOC_I2S=m +CONFIG_DRM_VC4=m +CONFIG_RASPBERRYPI_FIRMWARE=m + # Exynos CONFIG_ARCH_EXYNOS3=y # CONFIG_ARCH_EXYNOS4 is not set @@ -344,52 +360,15 @@ CONFIG_EXTCON_MAX8997=m # Tegra CONFIG_ARCH_TEGRA_114_SOC=y CONFIG_ARCH_TEGRA_124_SOC=y -CONFIG_ARM_TEGRA_CPUFREQ=y -CONFIG_TRUSTED_FOUNDATIONS=y -CONFIG_SERIAL_TEGRA=y -CONFIG_PCI_TEGRA=y -CONFIG_AHCI_TEGRA=m -CONFIG_TEGRA_IOMMU_SMMU=y -CONFIG_MMC_SDHCI_TEGRA=m -CONFIG_TEGRA_WATCHDOG=m -CONFIG_I2C_TEGRA=m -CONFIG_TEGRA_AHB=y -CONFIG_TEGRA20_APB_DMA=y -CONFIG_SPI_TEGRA114=m -CONFIG_PWM_TEGRA=m -CONFIG_KEYBOARD_TEGRA=m -CONFIG_USB_EHCI_TEGRA=m -CONFIG_RTC_DRV_TEGRA=m CONFIG_SND_SOC_TEGRA=m -CONFIG_SND_SOC_TEGRA_MAX98090=m -CONFIG_SND_SOC_TEGRA_RT5640=m CONFIG_SND_SOC_TEGRA30_AHUB=m CONFIG_SND_SOC_TEGRA30_I2S=m +CONFIG_SND_SOC_TEGRA_MAX98090=m +CONFIG_SND_SOC_TEGRA_RT5640=m CONFIG_SND_SOC_TEGRA_RT5677=m -CONFIG_SND_HDA_TEGRA=m -CONFIG_TEGRA_HOST1X=m -CONFIG_TEGRA_HOST1X_FIREWALL=y -CONFIG_DRM_TEGRA=m -CONFIG_DRM_TEGRA_FBDEV=y -# CONFIG_DRM_TEGRA_DEBUG is not set -CONFIG_DRM_TEGRA_STAGING=y -CONFIG_NOUVEAU_PLATFORM_DRIVER=y CONFIG_AD525X_DPOT=m CONFIG_AD525X_DPOT_I2C=m CONFIG_AD525X_DPOT_SPI=m -CONFIG_TEGRA_SOCTHERM=m -CONFIG_TEGRA_MC=y -CONFIG_TEGRA124_EMC=y -CONFIG_ARM_TEGRA_DEVFREQ=m -# CONFIG_ARM_TEGRA20_CPUFREQ is not set -CONFIG_ARM_TEGRA124_CPUFREQ=m - -# Jetson TK1 -CONFIG_PINCTRL_AS3722=y -CONFIG_POWER_RESET_AS3722=y -CONFIG_MFD_AS3722=y -CONFIG_REGULATOR_AS3722=m -CONFIG_RTC_DRV_AS3722=y # TI Generic CONFIG_TI_SOC_THERMAL=m @@ -853,18 +832,18 @@ CONFIG_R8188EU=m # CONFIG_SND_SOC_APQ8016_SBC is not set # CONFIG_SND_SOC_TAS571X is not set -# Debug options. We need to deal with them at some point like x86 -# CONFIG_DEBUG_USER is not set -# CONFIG_DEBUG_LL is not set -# CONFIG_DEBUG_PINCTRL is not set -# CONFIG_DMADEVICES_VDEBUG is not set -# CONFIG_DMADEVICES_DEBUG is not set -# CONFIG_OMAP2_DSS_DEBUG is not set -# CONFIG_CRYPTO_DEV_UX500_DEBUG is not set -# CONFIG_AB8500_DEBUG is not set -# CONFIG_ARM_KERNMEM_PERMS is not set - # CONFIG_VFIO_PLATFORM_AMDXGBE_RESET is not set # Altera? # CONFIG_PCIE_ALTERA is not set + +# Debug options. We need to deal with them at some point like x86 +# CONFIG_DEBUG_USER is not set +# CONFIG_DMADEVICES_VDEBUG is not set +# CONFIG_DMADEVICES_DEBUG is not set +# CONFIG_SERIAL_SAMSUNG_DEBUG is not set +# CONFIG_OMAP2_DSS_DEBUG is not set +# CONFIG_CRYPTO_DEV_UX500_DEBUG is not set +# CONFIG_AB8500_DEBUG is not set +# CONFIG_ARM_KERNMEM_PERMS is not set +# CONFIG_DEBUG_LL is not set diff --git a/kernel.spec b/kernel.spec index 4c5c5aa37..6783bb396 100644 --- a/kernel.spec +++ b/kernel.spec @@ -506,6 +506,17 @@ Patch456: arm64-acpi-drop-expert-patch.patch # http://patchwork.ozlabs.org/patch/587554/ Patch457: ARM-tegra-usb-no-reset.patch +Patch458: ARM-mvebu-change-order-of-ethernet-DT-nodes-on-Armada-38x.patch + +# http://www.spinics.net/lists/arm-kernel/msg480703.html +Patch459: Geekbox-device-tree-support.patch + +# http://www.spinics.net/lists/arm-kernel/msg483898.html +Patch460: Initial-AllWinner-A64-and-PINE64-support.patch + +# http://www.spinics.net/lists/linux-tegra/msg25152.html +Patch461: Fix-tegra-to-use-stdout-path-for-serial-console.patch + Patch463: arm-i.MX6-Utilite-device-dtb.patch Patch466: input-kill-stupid-messages.patch @@ -2127,6 +2138,12 @@ fi # # %changelog +* Sat Mar 5 2016 Peter Robinson +- Updates and new SoCs for aarch64 and ARMv7 +- Add aarch64 support for PINE64 and Geekbox devices +- Fix ethernet naming on Armada 38x devices +- Serial console fixes for Tegra + * Fri Mar 04 2016 Justin M. Forbes - 4.5.0-0.rc6.git3.1 - Linux v4.5-rc6-41-ge3c2ef4 From da4b67545d262546d8685a5dd3a98f1a06975727 Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Mon, 7 Mar 2016 09:50:02 -0600 Subject: [PATCH 006/275] Linux v4.5-rc7 --- config-generic | 6 +-- config-nodebug | 112 ++++++++++++++++++++++----------------------- config-x86-generic | 2 +- gitrev | 2 +- kernel.spec | 10 ++-- sources | 3 +- 6 files changed, 69 insertions(+), 66 deletions(-) diff --git a/config-generic b/config-generic index 30f00b23b..1300bd015 100644 --- a/config-generic +++ b/config-generic @@ -1825,13 +1825,13 @@ CONFIG_B43_PCMCIA=y CONFIG_B43_SDIO=y CONFIG_B43_BCMA=y CONFIG_B43_BCMA_PIO=y -CONFIG_B43_DEBUG=y +# CONFIG_B43_DEBUG is not set CONFIG_B43_PHY_LP=y CONFIG_B43_PHY_N=y CONFIG_B43_PHY_HT=y CONFIG_B43_PHY_G=y CONFIG_B43LEGACY=m -CONFIG_B43LEGACY_DEBUG=y +# CONFIG_B43LEGACY_DEBUG is not set CONFIG_B43LEGACY_DMA=y CONFIG_B43LEGACY_PIO=y CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y @@ -5132,7 +5132,7 @@ CONFIG_PM_DEBUG=y # CONFIG_DPM_WATCHDOG is not set # revisit this in debug CONFIG_PM_TRACE=y CONFIG_PM_TRACE_RTC=y -CONFIG_PM_TEST_SUSPEND=y +# CONFIG_PM_TEST_SUSPEND is not set # CONFIG_PM_OPP is not set # CONFIG_PM_AUTOSLEEP is not set # CONFIG_PM_WAKELOCKS is not set diff --git a/config-nodebug b/config-nodebug index 3a2eee381..c173637a2 100644 --- a/config-nodebug +++ b/config-nodebug @@ -2,101 +2,101 @@ CONFIG_SND_VERBOSE_PRINTK=y CONFIG_SND_DEBUG=y CONFIG_SND_PCM_XRUN_DEBUG=y -CONFIG_DEBUG_ATOMIC_SLEEP=y +# CONFIG_DEBUG_ATOMIC_SLEEP is not set -CONFIG_DEBUG_MUTEXES=y -CONFIG_DEBUG_RT_MUTEXES=y -CONFIG_DEBUG_LOCK_ALLOC=y -CONFIG_LOCK_TORTURE_TEST=m -CONFIG_PROVE_LOCKING=y -CONFIG_DEBUG_SPINLOCK=y -CONFIG_PROVE_RCU=y +# CONFIG_DEBUG_MUTEXES is not set +# CONFIG_DEBUG_RT_MUTEXES is not set +# CONFIG_DEBUG_LOCK_ALLOC is not set +# CONFIG_LOCK_TORTURE_TEST is not set +# CONFIG_PROVE_LOCKING is not set +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_PROVE_RCU is not set # CONFIG_PROVE_RCU_REPEATEDLY is not set -CONFIG_DEBUG_PER_CPU_MAPS=y +# CONFIG_DEBUG_PER_CPU_MAPS is not set CONFIG_CPUMASK_OFFSTACK=y -CONFIG_CPU_NOTIFIER_ERROR_INJECT=m +# CONFIG_CPU_NOTIFIER_ERROR_INJECT is not set -CONFIG_FAULT_INJECTION=y -CONFIG_FAILSLAB=y -CONFIG_FAIL_PAGE_ALLOC=y -CONFIG_FAIL_MAKE_REQUEST=y -CONFIG_FAULT_INJECTION_DEBUG_FS=y -CONFIG_FAULT_INJECTION_STACKTRACE_FILTER=y -CONFIG_FAIL_IO_TIMEOUT=y -CONFIG_FAIL_MMC_REQUEST=y +# CONFIG_FAULT_INJECTION is not set +# CONFIG_FAILSLAB is not set +# CONFIG_FAIL_PAGE_ALLOC is not set +# CONFIG_FAIL_MAKE_REQUEST is not set +# CONFIG_FAULT_INJECTION_DEBUG_FS is not set +# CONFIG_FAULT_INJECTION_STACKTRACE_FILTER is not set +# CONFIG_FAIL_IO_TIMEOUT is not set +# CONFIG_FAIL_MMC_REQUEST is not set -CONFIG_LOCK_STAT=y +# CONFIG_LOCK_STAT is not set -CONFIG_DEBUG_STACK_USAGE=y +# CONFIG_DEBUG_STACK_USAGE is not set -CONFIG_ACPI_DEBUG=y +# CONFIG_ACPI_DEBUG is not set # CONFIG_ACPI_DEBUGGER is not set -CONFIG_DEBUG_SG=y -CONFIG_DEBUG_PI_LIST=y +# CONFIG_DEBUG_SG is not set +# CONFIG_DEBUG_PI_LIST is not set # CONFIG_PAGE_EXTENSION is not set # CONFIG_PAGE_OWNER is not set # CONFIG_DEBUG_PAGEALLOC is not set -CONFIG_DEBUG_OBJECTS=y +# CONFIG_DEBUG_OBJECTS is not set # CONFIG_DEBUG_OBJECTS_SELFTEST is not set -CONFIG_DEBUG_OBJECTS_FREE=y -CONFIG_DEBUG_OBJECTS_TIMERS=y -CONFIG_DEBUG_OBJECTS_RCU_HEAD=y +# CONFIG_DEBUG_OBJECTS_FREE is not set +# CONFIG_DEBUG_OBJECTS_TIMERS is not set +# CONFIG_DEBUG_OBJECTS_RCU_HEAD is not set CONFIG_DEBUG_OBJECTS_ENABLE_DEFAULT=1 CONFIG_X86_PTDUMP=y -CONFIG_ARM64_PTDUMP=y -CONFIG_EFI_PGT_DUMP=y +# CONFIG_ARM64_PTDUMP is not set +# CONFIG_EFI_PGT_DUMP is not set -CONFIG_CAN_DEBUG_DEVICES=y +# CONFIG_CAN_DEBUG_DEVICES is not set -CONFIG_MODULE_FORCE_UNLOAD=y +# CONFIG_MODULE_FORCE_UNLOAD is not set -CONFIG_DEBUG_NOTIFIERS=y +# CONFIG_DEBUG_NOTIFIERS is not set -CONFIG_DMA_API_DEBUG=y +# CONFIG_DMA_API_DEBUG is not set -CONFIG_MMIOTRACE=y +# CONFIG_MMIOTRACE is not set -CONFIG_DEBUG_CREDENTIALS=y +# CONFIG_DEBUG_CREDENTIALS is not set # off in both production debug and nodebug builds, # on in rawhide nodebug builds -CONFIG_DEBUG_FORCE_WEAK_PER_CPU=y +# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set -CONFIG_EXT4_DEBUG=y +# CONFIG_EXT4_DEBUG is not set # CONFIG_XFS_WARN is not set -CONFIG_DEBUG_PERF_USE_VMALLOC=y +# CONFIG_DEBUG_PERF_USE_VMALLOC is not set -CONFIG_JBD2_DEBUG=y +# CONFIG_JBD2_DEBUG is not set -CONFIG_NFSD_FAULT_INJECTION=y +# CONFIG_NFSD_FAULT_INJECTION is not set -CONFIG_DEBUG_BLK_CGROUP=y +# CONFIG_DEBUG_BLK_CGROUP is not set -CONFIG_DRBD_FAULT_INJECTION=y +# CONFIG_DRBD_FAULT_INJECTION is not set -CONFIG_ATH_DEBUG=y -CONFIG_CARL9170_DEBUGFS=y -CONFIG_IWLWIFI_DEVICE_TRACING=y +# CONFIG_ATH_DEBUG is not set +# CONFIG_CARL9170_DEBUGFS is not set +# CONFIG_IWLWIFI_DEVICE_TRACING is not set # CONFIG_RTLWIFI_DEBUG is not set -CONFIG_DEBUG_OBJECTS_WORK=y +# CONFIG_DEBUG_OBJECTS_WORK is not set -CONFIG_DMADEVICES_DEBUG=y +# CONFIG_DMADEVICES_DEBUG is not set # CONFIG_DMADEVICES_VDEBUG is not set CONFIG_PM_ADVANCED_DEBUG=y -CONFIG_CEPH_LIB_PRETTYDEBUG=y -CONFIG_QUOTA_DEBUG=y +# CONFIG_CEPH_LIB_PRETTYDEBUG is not set +# CONFIG_QUOTA_DEBUG is not set CONFIG_KGDB_KDB=y @@ -104,19 +104,19 @@ CONFIG_KDB_DEFAULT_ENABLE=0x0 CONFIG_KDB_KEYBOARD=y CONFIG_KDB_CONTINUE_CATASTROPHIC=0 -CONFIG_DEBUG_OBJECTS_PERCPU_COUNTER=y +# CONFIG_DEBUG_OBJECTS_PERCPU_COUNTER is not set # CONFIG_PERCPU_TEST is not set -CONFIG_TEST_LIST_SORT=y +# CONFIG_TEST_LIST_SORT is not set # CONFIG_TEST_STRING_HELPERS is not set -CONFIG_DETECT_HUNG_TASK=y +# CONFIG_DETECT_HUNG_TASK is not set CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=120 # CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set -CONFIG_WQ_WATCHDOG=y +# CONFIG_WQ_WATCHDOG is not set -CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK=y +# CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK is not set -CONFIG_DEBUG_KMEMLEAK=y +# CONFIG_DEBUG_KMEMLEAK is not set CONFIG_DEBUG_KMEMLEAK_EARLY_LOG_SIZE=1024 # CONFIG_DEBUG_KMEMLEAK_TEST is not set CONFIG_DEBUG_KMEMLEAK_DEFAULT_OFF=y @@ -127,4 +127,4 @@ CONFIG_DEBUG_KMEMLEAK_DEFAULT_OFF=y # CONFIG_SPI_DEBUG is not set -CONFIG_X86_DEBUG_STATIC_CPU_HAS=y +# CONFIG_X86_DEBUG_STATIC_CPU_HAS is not set diff --git a/config-x86-generic b/config-x86-generic index 33b55f3a1..f54836a6d 100644 --- a/config-x86-generic +++ b/config-x86-generic @@ -377,7 +377,7 @@ CONFIG_SP5100_TCO=m # CONFIG_MEMTEST is not set # CONFIG_DEBUG_TLBFLUSH is not set -CONFIG_MAXSMP=y +# CONFIG_MAXSMP is not set CONFIG_HP_ILO=m diff --git a/gitrev b/gitrev index c1e48a723..fa461aace 100644 --- a/gitrev +++ b/gitrev @@ -1 +1 @@ -e3c2ef41f88e50c8557270868600d3132028af3b +f6cede5b49e822ebc41a099fe41ab4989f64e2cb diff --git a/kernel.spec b/kernel.spec index 6783bb396..26ae13e56 100644 --- a/kernel.spec +++ b/kernel.spec @@ -65,9 +65,9 @@ Summary: The Linux kernel # The next upstream release sublevel (base_sublevel+1) %define upstream_sublevel %(echo $((%{base_sublevel} + 1))) # The rc snapshot level -%define rcrev 6 +%define rcrev 7 # The git snapshot level -%define gitrev 3 +%define gitrev 0 # Set rpm version accordingly %define rpmversion 4.%{upstream_sublevel}.0 %endif @@ -123,7 +123,7 @@ Summary: The Linux kernel # Set debugbuildsenabled to 1 for production (build separate debug kernels) # and 0 for rawhide (all kernels are debug kernels). # See also 'make debug' and 'make release'. -%define debugbuildsenabled 0 +%define debugbuildsenabled 1 # Want to build a vanilla kernel build without any non-upstream patches? %define with_vanilla %{?_with_vanilla: 1} %{?!_with_vanilla: 0} @@ -2138,6 +2138,10 @@ fi # # %changelog +* Mon Mar 07 2016 Justin M. Forbes - 4.5.0-0.rc7.git0.1 +- Disable debugging options. +- Linux v4.5-rc7 + * Sat Mar 5 2016 Peter Robinson - Updates and new SoCs for aarch64 and ARMv7 - Add aarch64 support for PINE64 and Geekbox devices diff --git a/sources b/sources index 3ac6df493..de62ecac0 100644 --- a/sources +++ b/sources @@ -1,4 +1,3 @@ 9a78fa2eb6c68ca5a40ed5af08142599 linux-4.4.tar.xz dcbc8fe378a676d5d0dd208cf524e144 perf-man-4.4.tar.gz -cb386089b7af5ea8eab95b5975142529 patch-4.5-rc6.xz -70db20ea509a88291b90141d5755b57d patch-4.5-rc6-git3.xz +78a23c8a117f99bbe8f45bdd0183cf18 patch-4.5-rc7.xz From aa7ced39ea652c9f44f71ae949b1de318b4ae11e Mon Sep 17 00:00:00 2001 From: Peter Robinson Date: Mon, 7 Mar 2016 23:49:31 +0000 Subject: [PATCH 007/275] Disble ARM_PATCH_IDIV as a work around to fix rhbz 1303147 --- config-armv7-generic | 3 ++- kernel.spec | 5 ++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/config-armv7-generic b/config-armv7-generic index e4322ac8e..563811d20 100644 --- a/config-armv7-generic +++ b/config-armv7-generic @@ -19,7 +19,8 @@ CONFIG_ARM_UNWIND=y CONFIG_ARM_THUMB=y CONFIG_ARM_THUMBEE=y CONFIG_ARM_ASM_UNIFIED=y -CONFIG_ARM_PATCH_IDIV=y +# see rhbz 1303147 +# CONFIG_ARM_PATCH_IDIV is not set CONFIG_ARM_CPU_TOPOLOGY=y CONFIG_ARM_DMA_MEM_BUFFERABLE=y CONFIG_SWP_EMULATE=y diff --git a/kernel.spec b/kernel.spec index 26ae13e56..7cfdd5ab1 100644 --- a/kernel.spec +++ b/kernel.spec @@ -40,7 +40,7 @@ Summary: The Linux kernel # For non-released -rc kernels, this will be appended after the rcX and # gitX tags, so a 3 here would become part of release "0.rcX.gitX.3" # -%global baserelease 1 +%global baserelease 2 %global fedora_build %{baserelease} # base_sublevel is the kernel version we're starting with and patching @@ -2138,6 +2138,9 @@ fi # # %changelog +* Mon Mar 7 2016 Peter Robinson 4.5.0-0.rc7.git0.2 +- Disble ARM_PATCH_IDIV as a work around to fix rhbz 1303147 + * Mon Mar 07 2016 Justin M. Forbes - 4.5.0-0.rc7.git0.1 - Disable debugging options. - Linux v4.5-rc7 From d761b8935db4f1169daf38985081c1ca7b7faeba Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Tue, 8 Mar 2016 10:37:50 -0600 Subject: [PATCH 008/275] Linux v4.5-rc7-116-ge2857b8 --- config-generic | 23 +++++++--- config-nodebug | 112 ++++++++++++++++++++++----------------------- config-x86-generic | 15 +----- gitrev | 2 +- kernel.spec | 31 ++++++++----- sources | 1 + 6 files changed, 97 insertions(+), 87 deletions(-) diff --git a/config-generic b/config-generic index 1300bd015..0e8f19219 100644 --- a/config-generic +++ b/config-generic @@ -1825,13 +1825,13 @@ CONFIG_B43_PCMCIA=y CONFIG_B43_SDIO=y CONFIG_B43_BCMA=y CONFIG_B43_BCMA_PIO=y -# CONFIG_B43_DEBUG is not set +CONFIG_B43_DEBUG=y CONFIG_B43_PHY_LP=y CONFIG_B43_PHY_N=y CONFIG_B43_PHY_HT=y CONFIG_B43_PHY_G=y CONFIG_B43LEGACY=m -# CONFIG_B43LEGACY_DEBUG is not set +CONFIG_B43LEGACY_DEBUG=y CONFIG_B43LEGACY_DMA=y CONFIG_B43LEGACY_PIO=y CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y @@ -5132,7 +5132,7 @@ CONFIG_PM_DEBUG=y # CONFIG_DPM_WATCHDOG is not set # revisit this in debug CONFIG_PM_TRACE=y CONFIG_PM_TRACE_RTC=y -# CONFIG_PM_TEST_SUSPEND is not set +CONFIG_PM_TEST_SUSPEND=y # CONFIG_PM_OPP is not set # CONFIG_PM_AUTOSLEEP is not set # CONFIG_PM_WAKELOCKS is not set @@ -5855,11 +5855,22 @@ CONFIG_POWERCAP=y # CONFIG_CPUFREQ_DT is not set -# CONFIG_MODULE_SIG is not set +CONFIG_MODULE_SIG=y +CONFIG_MODULE_SIG_ALL=y +# CONFIG_MODULE_SIG_SHA1 is not set +CONFIG_MODULE_SIG_SHA256=y +# CONFIG_MODULE_SIG_FORCE is not set +CONFIG_MODULE_SIG_KEY="certs/signing_key.pem" +CONFIG_SYSTEM_TRUSTED_KEYS="" +CONFIG_PKCS7_MESSAGE_PARSER=y +# CONFIG_PKCS7_TEST_KEY is not set +CONFIG_SIGNED_PE_FILE_VERIFICATION=y +CONFIG_SYSTEM_TRUSTED_KEYRING=y +CONFIG_SYSTEM_BLACKLIST_KEYRING=y +# CONFIG_MODULE_SIG_UEFI is not set +# CONFIG_EFI_SIGNATURE_LIST_PARSER is not set # FIXME: Revisit this to see if we can use it instead of the spec file stuff # CONFIG_MODULE_COMPRESS is not set -# CONFIG_SYSTEM_TRUSTED_KEYRING is not set -# CONFIG_SYSTEM_BLACKLIST_KEYRING is not set # CONFIG_RTC_DRV_EFI is not set # CONFIG_NET_XGENE is not set diff --git a/config-nodebug b/config-nodebug index c173637a2..3a2eee381 100644 --- a/config-nodebug +++ b/config-nodebug @@ -2,101 +2,101 @@ CONFIG_SND_VERBOSE_PRINTK=y CONFIG_SND_DEBUG=y CONFIG_SND_PCM_XRUN_DEBUG=y -# CONFIG_DEBUG_ATOMIC_SLEEP is not set +CONFIG_DEBUG_ATOMIC_SLEEP=y -# CONFIG_DEBUG_MUTEXES is not set -# CONFIG_DEBUG_RT_MUTEXES is not set -# CONFIG_DEBUG_LOCK_ALLOC is not set -# CONFIG_LOCK_TORTURE_TEST is not set -# CONFIG_PROVE_LOCKING is not set -# CONFIG_DEBUG_SPINLOCK is not set -# CONFIG_PROVE_RCU is not set +CONFIG_DEBUG_MUTEXES=y +CONFIG_DEBUG_RT_MUTEXES=y +CONFIG_DEBUG_LOCK_ALLOC=y +CONFIG_LOCK_TORTURE_TEST=m +CONFIG_PROVE_LOCKING=y +CONFIG_DEBUG_SPINLOCK=y +CONFIG_PROVE_RCU=y # CONFIG_PROVE_RCU_REPEATEDLY is not set -# CONFIG_DEBUG_PER_CPU_MAPS is not set +CONFIG_DEBUG_PER_CPU_MAPS=y CONFIG_CPUMASK_OFFSTACK=y -# CONFIG_CPU_NOTIFIER_ERROR_INJECT is not set +CONFIG_CPU_NOTIFIER_ERROR_INJECT=m -# CONFIG_FAULT_INJECTION is not set -# CONFIG_FAILSLAB is not set -# CONFIG_FAIL_PAGE_ALLOC is not set -# CONFIG_FAIL_MAKE_REQUEST is not set -# CONFIG_FAULT_INJECTION_DEBUG_FS is not set -# CONFIG_FAULT_INJECTION_STACKTRACE_FILTER is not set -# CONFIG_FAIL_IO_TIMEOUT is not set -# CONFIG_FAIL_MMC_REQUEST is not set +CONFIG_FAULT_INJECTION=y +CONFIG_FAILSLAB=y +CONFIG_FAIL_PAGE_ALLOC=y +CONFIG_FAIL_MAKE_REQUEST=y +CONFIG_FAULT_INJECTION_DEBUG_FS=y +CONFIG_FAULT_INJECTION_STACKTRACE_FILTER=y +CONFIG_FAIL_IO_TIMEOUT=y +CONFIG_FAIL_MMC_REQUEST=y -# CONFIG_LOCK_STAT is not set +CONFIG_LOCK_STAT=y -# CONFIG_DEBUG_STACK_USAGE is not set +CONFIG_DEBUG_STACK_USAGE=y -# CONFIG_ACPI_DEBUG is not set +CONFIG_ACPI_DEBUG=y # CONFIG_ACPI_DEBUGGER is not set -# CONFIG_DEBUG_SG is not set -# CONFIG_DEBUG_PI_LIST is not set +CONFIG_DEBUG_SG=y +CONFIG_DEBUG_PI_LIST=y # CONFIG_PAGE_EXTENSION is not set # CONFIG_PAGE_OWNER is not set # CONFIG_DEBUG_PAGEALLOC is not set -# CONFIG_DEBUG_OBJECTS is not set +CONFIG_DEBUG_OBJECTS=y # CONFIG_DEBUG_OBJECTS_SELFTEST is not set -# CONFIG_DEBUG_OBJECTS_FREE is not set -# CONFIG_DEBUG_OBJECTS_TIMERS is not set -# CONFIG_DEBUG_OBJECTS_RCU_HEAD is not set +CONFIG_DEBUG_OBJECTS_FREE=y +CONFIG_DEBUG_OBJECTS_TIMERS=y +CONFIG_DEBUG_OBJECTS_RCU_HEAD=y CONFIG_DEBUG_OBJECTS_ENABLE_DEFAULT=1 CONFIG_X86_PTDUMP=y -# CONFIG_ARM64_PTDUMP is not set -# CONFIG_EFI_PGT_DUMP is not set +CONFIG_ARM64_PTDUMP=y +CONFIG_EFI_PGT_DUMP=y -# CONFIG_CAN_DEBUG_DEVICES is not set +CONFIG_CAN_DEBUG_DEVICES=y -# CONFIG_MODULE_FORCE_UNLOAD is not set +CONFIG_MODULE_FORCE_UNLOAD=y -# CONFIG_DEBUG_NOTIFIERS is not set +CONFIG_DEBUG_NOTIFIERS=y -# CONFIG_DMA_API_DEBUG is not set +CONFIG_DMA_API_DEBUG=y -# CONFIG_MMIOTRACE is not set +CONFIG_MMIOTRACE=y -# CONFIG_DEBUG_CREDENTIALS is not set +CONFIG_DEBUG_CREDENTIALS=y # off in both production debug and nodebug builds, # on in rawhide nodebug builds -# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set +CONFIG_DEBUG_FORCE_WEAK_PER_CPU=y -# CONFIG_EXT4_DEBUG is not set +CONFIG_EXT4_DEBUG=y # CONFIG_XFS_WARN is not set -# CONFIG_DEBUG_PERF_USE_VMALLOC is not set +CONFIG_DEBUG_PERF_USE_VMALLOC=y -# CONFIG_JBD2_DEBUG is not set +CONFIG_JBD2_DEBUG=y -# CONFIG_NFSD_FAULT_INJECTION is not set +CONFIG_NFSD_FAULT_INJECTION=y -# CONFIG_DEBUG_BLK_CGROUP is not set +CONFIG_DEBUG_BLK_CGROUP=y -# CONFIG_DRBD_FAULT_INJECTION is not set +CONFIG_DRBD_FAULT_INJECTION=y -# CONFIG_ATH_DEBUG is not set -# CONFIG_CARL9170_DEBUGFS is not set -# CONFIG_IWLWIFI_DEVICE_TRACING is not set +CONFIG_ATH_DEBUG=y +CONFIG_CARL9170_DEBUGFS=y +CONFIG_IWLWIFI_DEVICE_TRACING=y # CONFIG_RTLWIFI_DEBUG is not set -# CONFIG_DEBUG_OBJECTS_WORK is not set +CONFIG_DEBUG_OBJECTS_WORK=y -# CONFIG_DMADEVICES_DEBUG is not set +CONFIG_DMADEVICES_DEBUG=y # CONFIG_DMADEVICES_VDEBUG is not set CONFIG_PM_ADVANCED_DEBUG=y -# CONFIG_CEPH_LIB_PRETTYDEBUG is not set -# CONFIG_QUOTA_DEBUG is not set +CONFIG_CEPH_LIB_PRETTYDEBUG=y +CONFIG_QUOTA_DEBUG=y CONFIG_KGDB_KDB=y @@ -104,19 +104,19 @@ CONFIG_KDB_DEFAULT_ENABLE=0x0 CONFIG_KDB_KEYBOARD=y CONFIG_KDB_CONTINUE_CATASTROPHIC=0 -# CONFIG_DEBUG_OBJECTS_PERCPU_COUNTER is not set +CONFIG_DEBUG_OBJECTS_PERCPU_COUNTER=y # CONFIG_PERCPU_TEST is not set -# CONFIG_TEST_LIST_SORT is not set +CONFIG_TEST_LIST_SORT=y # CONFIG_TEST_STRING_HELPERS is not set -# CONFIG_DETECT_HUNG_TASK is not set +CONFIG_DETECT_HUNG_TASK=y CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=120 # CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set -# CONFIG_WQ_WATCHDOG is not set +CONFIG_WQ_WATCHDOG=y -# CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK is not set +CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK=y -# CONFIG_DEBUG_KMEMLEAK is not set +CONFIG_DEBUG_KMEMLEAK=y CONFIG_DEBUG_KMEMLEAK_EARLY_LOG_SIZE=1024 # CONFIG_DEBUG_KMEMLEAK_TEST is not set CONFIG_DEBUG_KMEMLEAK_DEFAULT_OFF=y @@ -127,4 +127,4 @@ CONFIG_DEBUG_KMEMLEAK_DEFAULT_OFF=y # CONFIG_SPI_DEBUG is not set -# CONFIG_X86_DEBUG_STATIC_CPU_HAS is not set +CONFIG_X86_DEBUG_STATIC_CPU_HAS=y diff --git a/config-x86-generic b/config-x86-generic index f54836a6d..4815913be 100644 --- a/config-x86-generic +++ b/config-x86-generic @@ -377,7 +377,7 @@ CONFIG_SP5100_TCO=m # CONFIG_MEMTEST is not set # CONFIG_DEBUG_TLBFLUSH is not set -# CONFIG_MAXSMP is not set +CONFIG_MAXSMP=y CONFIG_HP_ILO=m @@ -583,18 +583,7 @@ CONFIG_MOUSE_PS2_VMMOUSE=y CONFIG_XZ_DEC_X86=y CONFIG_MPILIB=y -CONFIG_PKCS7_MESSAGE_PARSER=y -# CONFIG_PKCS7_TEST_KEY is not set -CONFIG_SIGNED_PE_FILE_VERIFICATION=y -CONFIG_SYSTEM_TRUSTED_KEYRING=y -CONFIG_SYSTEM_BLACKLIST_KEYRING=y -CONFIG_MODULE_SIG=y -CONFIG_MODULE_SIG_ALL=y -# CONFIG_MODULE_SIG_SHA1 is not set -CONFIG_MODULE_SIG_SHA256=y -# CONFIG_MODULE_SIG_FORCE is not set -CONFIG_MODULE_SIG_KEY="certs/signing_key.pem" -CONFIG_SYSTEM_TRUSTED_KEYS="" + CONFIG_EFI_SECURE_BOOT_SIG_ENFORCE=y CONFIG_EFI_SIGNATURE_LIST_PARSER=y diff --git a/gitrev b/gitrev index fa461aace..d6224cd72 100644 --- a/gitrev +++ b/gitrev @@ -1 +1 @@ -f6cede5b49e822ebc41a099fe41ab4989f64e2cb +e2857b8f11a289ed2b61d18d0665e05c1053c446 diff --git a/kernel.spec b/kernel.spec index 7cfdd5ab1..650b83158 100644 --- a/kernel.spec +++ b/kernel.spec @@ -11,10 +11,12 @@ Summary: The Linux kernel # Sign modules on x86. Make sure the config files match this setting if more # architectures are added. %ifarch %{ix86} x86_64 +%global signkernel 1 %global signmodules 1 %global zipmodules 1 %else -%global signmodules 0 +%global signkernel 0 +%global signmodules 1 %global zipmodules 0 %endif @@ -40,7 +42,7 @@ Summary: The Linux kernel # For non-released -rc kernels, this will be appended after the rcX and # gitX tags, so a 3 here would become part of release "0.rcX.gitX.3" # -%global baserelease 2 +%global baserelease 1 %global fedora_build %{baserelease} # base_sublevel is the kernel version we're starting with and patching @@ -67,7 +69,7 @@ Summary: The Linux kernel # The rc snapshot level %define rcrev 7 # The git snapshot level -%define gitrev 0 +%define gitrev 1 # Set rpm version accordingly %define rpmversion 4.%{upstream_sublevel}.0 %endif @@ -123,7 +125,7 @@ Summary: The Linux kernel # Set debugbuildsenabled to 1 for production (build separate debug kernels) # and 0 for rawhide (all kernels are debug kernels). # See also 'make debug' and 'make release'. -%define debugbuildsenabled 1 +%define debugbuildsenabled 0 # Want to build a vanilla kernel build without any non-upstream patches? %define with_vanilla %{?_with_vanilla: 1} %{?!_with_vanilla: 0} @@ -391,14 +393,12 @@ BuildRequires: rpm-build, elfutils %define debuginfo_args --strict-build-id -r %endif -%ifarch %{ix86} x86_64 -# MODULE_SIG is enabled in config-x86-generic and needs these: +%if %{signkernel}%{signmodules} BuildRequires: openssl openssl-devel -%endif - -%if %{signmodules} +%if %{signkernel} BuildRequires: pesign >= 0.10-4 %endif +%endif %if %{with_cross} BuildRequires: binutils-%{_build_arch}-linux-gnu, gcc-%{_build_arch}-linux-gnu @@ -1335,7 +1335,7 @@ BuildKernel() { make -s mrproper cp configs/$Config .config - %if %{signmodules} + %if %{signkernel}%{signmodules} cp %{SOURCE11} certs/. %endif @@ -1372,7 +1372,7 @@ BuildKernel() { cp arch/$Arch/boot/zImage.stub $RPM_BUILD_ROOT/%{image_install_path}/zImage.stub-$KernelVer || : cp arch/$Arch/boot/zImage.stub $RPM_BUILD_ROOT/lib/modules/$KernelVer/zImage.stub-$KernelVer || : fi - %if %{signmodules} + %if %{signkernel} # Sign the image if we're using EFI %pesign -s -i $KernelImage -o vmlinuz.signed if [ ! -s vmlinuz.signed ]; then @@ -2138,6 +2138,15 @@ fi # # %changelog +* Tue Mar 08 2016 Justin M. Forbes - 4.5.0-0.rc7.git1.1 +- Linux v4.5-rc7-116-ge2857b8 +- Reenable debugging options. + +* Tue Mar 08 2016 Thorsten Leemhuis +- add signkernel macro to make signing kernel and signing modules + independent from each other +- sign modules on all archs + * Mon Mar 7 2016 Peter Robinson 4.5.0-0.rc7.git0.2 - Disble ARM_PATCH_IDIV as a work around to fix rhbz 1303147 diff --git a/sources b/sources index de62ecac0..221ee30f5 100644 --- a/sources +++ b/sources @@ -1,3 +1,4 @@ 9a78fa2eb6c68ca5a40ed5af08142599 linux-4.4.tar.xz dcbc8fe378a676d5d0dd208cf524e144 perf-man-4.4.tar.gz 78a23c8a117f99bbe8f45bdd0183cf18 patch-4.5-rc7.xz +32bbfaa7c0b7a881c039b96b939b2d0f patch-4.5-rc7-git1.xz From 577f25efd7a7077604b77545c081fcdc0094240a Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Tue, 8 Mar 2016 11:07:12 -0600 Subject: [PATCH 009/275] Remove wext patches now upstream --- cfg80211-wext-fix-message-ordering.patch | 83 --------------- kernel.spec | 4 - wext-fix-message-delay-ordering.patch | 122 ----------------------- 3 files changed, 209 deletions(-) delete mode 100644 cfg80211-wext-fix-message-ordering.patch delete mode 100644 wext-fix-message-delay-ordering.patch diff --git a/cfg80211-wext-fix-message-ordering.patch b/cfg80211-wext-fix-message-ordering.patch deleted file mode 100644 index 8d3cdfdda..000000000 --- a/cfg80211-wext-fix-message-ordering.patch +++ /dev/null @@ -1,83 +0,0 @@ -From cb150b9d23be6ee7f3a0fff29784f1c5b5ac514d Mon Sep 17 00:00:00 2001 -From: Johannes Berg -Date: Wed, 27 Jan 2016 13:29:34 +0100 -Subject: cfg80211/wext: fix message ordering - -Since cfg80211 frequently takes actions from its netdev notifier -call, wireless extensions messages could still be ordered badly -since the wext netdev notifier, since wext is built into the -kernel, runs before the cfg80211 netdev notifier. For example, -the following can happen: - -5: wlan1: mtu 1500 qdisc mq state DOWN group default - link/ether 02:00:00:00:01:00 brd ff:ff:ff:ff:ff:ff -5: wlan1: - link/ether - -when setting the interface down causes the wext message. - -To also fix this, export the wireless_nlevent_flush() function -and also call it from the cfg80211 notifier. - -Cc: stable@vger.kernel.org -Signed-off-by: Johannes Berg ---- - include/net/iw_handler.h | 6 ++++++ - net/wireless/core.c | 2 ++ - net/wireless/wext-core.c | 3 ++- - 3 files changed, 10 insertions(+), 1 deletion(-) - -diff --git a/include/net/iw_handler.h b/include/net/iw_handler.h -index 8f81bbb..e0f4109 100644 ---- a/include/net/iw_handler.h -+++ b/include/net/iw_handler.h -@@ -439,6 +439,12 @@ int dev_get_wireless_info(char *buffer, char **start, off_t offset, int length); - /* Send a single event to user space */ - void wireless_send_event(struct net_device *dev, unsigned int cmd, - union iwreq_data *wrqu, const char *extra); -+#ifdef CONFIG_WEXT_CORE -+/* flush all previous wext events - if work is done from netdev notifiers */ -+void wireless_nlevent_flush(void); -+#else -+static inline void wireless_nlevent_flush(void) {} -+#endif - - /* We may need a function to send a stream of events to user space. - * More on that later... */ -diff --git a/net/wireless/core.c b/net/wireless/core.c -index b091551..8f0bac7 100644 ---- a/net/wireless/core.c -+++ b/net/wireless/core.c -@@ -1147,6 +1147,8 @@ static int cfg80211_netdev_notifier_call(struct notifier_block *nb, - return NOTIFY_DONE; - } - -+ wireless_nlevent_flush(); -+ - return NOTIFY_OK; - } - -diff --git a/net/wireless/wext-core.c b/net/wireless/wext-core.c -index 87dd619..b50ee5d 100644 ---- a/net/wireless/wext-core.c -+++ b/net/wireless/wext-core.c -@@ -342,7 +342,7 @@ static const int compat_event_type_size[] = { - - /* IW event code */ - --static void wireless_nlevent_flush(void) -+void wireless_nlevent_flush(void) - { - struct sk_buff *skb; - struct net *net; -@@ -355,6 +355,7 @@ static void wireless_nlevent_flush(void) - GFP_KERNEL); - } - } -+EXPORT_SYMBOL_GPL(wireless_nlevent_flush); - - static int wext_netdev_notifier_call(struct notifier_block *nb, - unsigned long state, void *ptr) --- -cgit v0.12 - diff --git a/kernel.spec b/kernel.spec index 650b83158..b4de6df7f 100644 --- a/kernel.spec +++ b/kernel.spec @@ -604,10 +604,6 @@ Patch621: drm-udl-Use-unlocked-gem-unreferencing.patch #Required for some persistent memory options Patch641: disable-CONFIG_EXPERT-for-ZONE_DMA.patch -#rhbz 1302037 -Patch644: wext-fix-message-delay-ordering.patch -Patch645: cfg80211-wext-fix-message-ordering.patch - #rhbz 1255325 Patch646: HID-sony-do-not-bail-out-when-the-sixaxis-refuses-th.patch diff --git a/wext-fix-message-delay-ordering.patch b/wext-fix-message-delay-ordering.patch deleted file mode 100644 index 109b68da3..000000000 --- a/wext-fix-message-delay-ordering.patch +++ /dev/null @@ -1,122 +0,0 @@ -From 8bf862739a7786ae72409220914df960a0aa80d8 Mon Sep 17 00:00:00 2001 -From: Johannes Berg -Date: Wed, 27 Jan 2016 12:37:52 +0100 -Subject: wext: fix message delay/ordering - -Beniamino reported that he was getting an RTM_NEWLINK message for a -given interface, after the RTM_DELLINK for it. It turns out that the -message is a wireless extensions message, which was sent because the -interface had been connected and disconnection while it was deleted -caused a wext message. - -For its netlink messages, wext uses RTM_NEWLINK, but the message is -without all the regular rtnetlink attributes, so "ip monitor link" -prints just rudimentary information: - -5: wlan1: mtu 1500 qdisc mq state DOWN group default - link/ether 02:00:00:00:01:00 brd ff:ff:ff:ff:ff:ff -Deleted 5: wlan1: mtu 1500 qdisc noop state DOWN group default - link/ether 02:00:00:00:01:00 brd ff:ff:ff:ff:ff:ff -5: wlan1: - link/ether -(from my hwsim reproduction) - -This can cause userspace to get confused since it doesn't expect an -RTM_NEWLINK message after RTM_DELLINK. - -The reason for this is that wext schedules a worker to send out the -messages, and the scheduling delay can cause the messages to get out -to userspace in different order. - -To fix this, have wext register a netdevice notifier and flush out -any pending messages when netdevice state changes. This fixes any -ordering whenever the original message wasn't sent by a notifier -itself. - -Cc: stable@vger.kernel.org -Reported-by: Beniamino Galvani -Signed-off-by: Johannes Berg ---- - net/wireless/wext-core.c | 51 +++++++++++++++++++++++++++++++++++++----------- - 1 file changed, 40 insertions(+), 11 deletions(-) - -diff --git a/net/wireless/wext-core.c b/net/wireless/wext-core.c -index c8717c1..87dd619 100644 ---- a/net/wireless/wext-core.c -+++ b/net/wireless/wext-core.c -@@ -342,6 +342,39 @@ static const int compat_event_type_size[] = { - - /* IW event code */ - -+static void wireless_nlevent_flush(void) -+{ -+ struct sk_buff *skb; -+ struct net *net; -+ -+ ASSERT_RTNL(); -+ -+ for_each_net(net) { -+ while ((skb = skb_dequeue(&net->wext_nlevents))) -+ rtnl_notify(skb, net, 0, RTNLGRP_LINK, NULL, -+ GFP_KERNEL); -+ } -+} -+ -+static int wext_netdev_notifier_call(struct notifier_block *nb, -+ unsigned long state, void *ptr) -+{ -+ /* -+ * When a netdev changes state in any way, flush all pending messages -+ * to avoid them going out in a strange order, e.g. RTM_NEWLINK after -+ * RTM_DELLINK, or with IFF_UP after without IFF_UP during dev_close() -+ * or similar - all of which could otherwise happen due to delays from -+ * schedule_work(). -+ */ -+ wireless_nlevent_flush(); -+ -+ return NOTIFY_OK; -+} -+ -+static struct notifier_block wext_netdev_notifier = { -+ .notifier_call = wext_netdev_notifier_call, -+}; -+ - static int __net_init wext_pernet_init(struct net *net) - { - skb_queue_head_init(&net->wext_nlevents); -@@ -360,7 +393,12 @@ static struct pernet_operations wext_pernet_ops = { - - static int __init wireless_nlevent_init(void) - { -- return register_pernet_subsys(&wext_pernet_ops); -+ int err = register_pernet_subsys(&wext_pernet_ops); -+ -+ if (err) -+ return err; -+ -+ return register_netdevice_notifier(&wext_netdev_notifier); - } - - subsys_initcall(wireless_nlevent_init); -@@ -368,17 +406,8 @@ subsys_initcall(wireless_nlevent_init); - /* Process events generated by the wireless layer or the driver. */ - static void wireless_nlevent_process(struct work_struct *work) - { -- struct sk_buff *skb; -- struct net *net; -- - rtnl_lock(); -- -- for_each_net(net) { -- while ((skb = skb_dequeue(&net->wext_nlevents))) -- rtnl_notify(skb, net, 0, RTNLGRP_LINK, NULL, -- GFP_KERNEL); -- } -- -+ wireless_nlevent_flush(); - rtnl_unlock(); - } - --- -cgit v0.12 - From f704286d264abef123c2a71968586cb62adcb8c7 Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Wed, 9 Mar 2016 10:55:09 -0600 Subject: [PATCH 010/275] Linux v4.5-rc7-159-g7f02bf6 --- gitrev | 2 +- kernel.spec | 5 ++++- sources | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/gitrev b/gitrev index d6224cd72..fe30586f1 100644 --- a/gitrev +++ b/gitrev @@ -1 +1 @@ -e2857b8f11a289ed2b61d18d0665e05c1053c446 +7f02bf6b5f5de90b7a331759b5364e41c0f39bf9 diff --git a/kernel.spec b/kernel.spec index b4de6df7f..f0b3c1f44 100644 --- a/kernel.spec +++ b/kernel.spec @@ -69,7 +69,7 @@ Summary: The Linux kernel # The rc snapshot level %define rcrev 7 # The git snapshot level -%define gitrev 1 +%define gitrev 2 # Set rpm version accordingly %define rpmversion 4.%{upstream_sublevel}.0 %endif @@ -2134,6 +2134,9 @@ fi # # %changelog +* Wed Mar 09 2016 Justin M. Forbes - 4.5.0-0.rc7.git2.1 +- Linux v4.5-rc7-159-g7f02bf6 + * Tue Mar 08 2016 Justin M. Forbes - 4.5.0-0.rc7.git1.1 - Linux v4.5-rc7-116-ge2857b8 - Reenable debugging options. diff --git a/sources b/sources index 221ee30f5..0695297d3 100644 --- a/sources +++ b/sources @@ -1,4 +1,4 @@ 9a78fa2eb6c68ca5a40ed5af08142599 linux-4.4.tar.xz dcbc8fe378a676d5d0dd208cf524e144 perf-man-4.4.tar.gz 78a23c8a117f99bbe8f45bdd0183cf18 patch-4.5-rc7.xz -32bbfaa7c0b7a881c039b96b939b2d0f patch-4.5-rc7-git1.xz +6fb09377dd2cd1acddc7f23dadbfafa5 patch-4.5-rc7-git2.xz From 598f041c32630090947a4bf4825e4f058825c4b7 Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Thu, 10 Mar 2016 15:21:34 -0600 Subject: [PATCH 011/275] Linux v4.5-rc7-215-gf2c1242 --- gitrev | 2 +- kernel.spec | 5 ++++- sources | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/gitrev b/gitrev index fe30586f1..9391263df 100644 --- a/gitrev +++ b/gitrev @@ -1 +1 @@ -7f02bf6b5f5de90b7a331759b5364e41c0f39bf9 +f2c1242194c7af9b26f53359ab2b23df36d3a643 diff --git a/kernel.spec b/kernel.spec index f0b3c1f44..1bf8f1726 100644 --- a/kernel.spec +++ b/kernel.spec @@ -69,7 +69,7 @@ Summary: The Linux kernel # The rc snapshot level %define rcrev 7 # The git snapshot level -%define gitrev 2 +%define gitrev 3 # Set rpm version accordingly %define rpmversion 4.%{upstream_sublevel}.0 %endif @@ -2134,6 +2134,9 @@ fi # # %changelog +* Thu Mar 10 2016 Justin M. Forbes - 4.5.0-0.rc7.git3.1 +- Linux v4.5-rc7-215-gf2c1242 + * Wed Mar 09 2016 Justin M. Forbes - 4.5.0-0.rc7.git2.1 - Linux v4.5-rc7-159-g7f02bf6 diff --git a/sources b/sources index 0695297d3..76edd08d2 100644 --- a/sources +++ b/sources @@ -1,4 +1,4 @@ 9a78fa2eb6c68ca5a40ed5af08142599 linux-4.4.tar.xz dcbc8fe378a676d5d0dd208cf524e144 perf-man-4.4.tar.gz 78a23c8a117f99bbe8f45bdd0183cf18 patch-4.5-rc7.xz -6fb09377dd2cd1acddc7f23dadbfafa5 patch-4.5-rc7-git2.xz +e41f8602306f56d8abdda9bdb4cdfb46 patch-4.5-rc7-git3.xz From 45ab0ced853762fe12435810849e70268dc0a46b Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Fri, 11 Mar 2016 08:12:05 -0500 Subject: [PATCH 012/275] Add patch for ICP DAS I-756xU devices (rhbz 1316136) --- ...sio-Add-support-for-ICP-DAS-I-756xU-.patch | 59 +++++++++++++++++++ kernel.spec | 6 ++ 2 files changed, 65 insertions(+) create mode 100644 USB-serial-ftdi_sio-Add-support-for-ICP-DAS-I-756xU-.patch diff --git a/USB-serial-ftdi_sio-Add-support-for-ICP-DAS-I-756xU-.patch b/USB-serial-ftdi_sio-Add-support-for-ICP-DAS-I-756xU-.patch new file mode 100644 index 000000000..ac8e71c72 --- /dev/null +++ b/USB-serial-ftdi_sio-Add-support-for-ICP-DAS-I-756xU-.patch @@ -0,0 +1,59 @@ +From 94c78c81df3056e573fb84000a32512e9c16e555 Mon Sep 17 00:00:00 2001 +From: Josh Boyer +Date: Thu, 10 Mar 2016 08:49:02 -0500 +Subject: [PATCH] USB: serial: ftdi_sio: Add support for ICP DAS I-756xU + devices + +A Fedora user reports that the ftdi_sio driver works properly for the +ICP DAS I-7561U device. Further, the user manual for these devices +instructs users to load the driver and add the ids using the sysfs +interface. + +Add support for these in the driver directly so that the devices work +out of the box instead of needing manual configuration. + +Reported-by: +CC: stable +Signed-off-by: Josh Boyer +--- + drivers/usb/serial/ftdi_sio.c | 4 ++++ + drivers/usb/serial/ftdi_sio_ids.h | 8 ++++++++ + 2 files changed, 12 insertions(+) + +diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c +index 8c660ae401d8..b61f12160d37 100644 +--- a/drivers/usb/serial/ftdi_sio.c ++++ b/drivers/usb/serial/ftdi_sio.c +@@ -1004,6 +1004,10 @@ static const struct usb_device_id id_table_combined[] = { + { USB_DEVICE(FTDI_VID, CHETCO_SEASMART_DISPLAY_PID) }, + { USB_DEVICE(FTDI_VID, CHETCO_SEASMART_LITE_PID) }, + { USB_DEVICE(FTDI_VID, CHETCO_SEASMART_ANALOG_PID) }, ++ /* ICP DAS I-756xU devices */ ++ { USB_DEVICE(ICPDAS_VID, ICPDAS_I7560U_PID) }, ++ { USB_DEVICE(ICPDAS_VID, ICPDAS_I7561U_PID) }, ++ { USB_DEVICE(ICPDAS_VID, ICPDAS_I7563U_PID) }, + { } /* Terminating entry */ + }; + +diff --git a/drivers/usb/serial/ftdi_sio_ids.h b/drivers/usb/serial/ftdi_sio_ids.h +index a84df2513994..a4ec24ce6a11 100644 +--- a/drivers/usb/serial/ftdi_sio_ids.h ++++ b/drivers/usb/serial/ftdi_sio_ids.h +@@ -872,6 +872,14 @@ + #define NOVITUS_BONO_E_PID 0x6010 + + /* ++ * ICPDAS I-756*U devices ++ */ ++#define ICPDAS_VID 0x1b5c ++#define ICPDAS_I7560U_PID 0x0103 ++#define ICPDAS_I7561U_PID 0x0104 ++#define ICPDAS_I7563U_PID 0x0105 ++ ++/* + * RT Systems programming cables for various ham radios + */ + #define RTSYSTEMS_VID 0x2100 /* Vendor ID */ +-- +2.5.0 + diff --git a/kernel.spec b/kernel.spec index 1bf8f1726..af22cf783 100644 --- a/kernel.spec +++ b/kernel.spec @@ -613,6 +613,9 @@ Patch648: 0001-mm-CONFIG_NR_ZONES_EXTENDED.patch #rhbz 1312102 Patch649: perf-tools-Fix-python-extension-build.patch +#rhbz 1316136 +Patch663: USB-serial-ftdi_sio-Add-support-for-ICP-DAS-I-756xU-.patch + # END OF PATCH DEFINITIONS %endif @@ -2134,6 +2137,9 @@ fi # # %changelog +* Fri Mar 11 2016 Josh Boyer +- Add patch for ICP DAS I-756xU devices (rhbz 1316136) + * Thu Mar 10 2016 Justin M. Forbes - 4.5.0-0.rc7.git3.1 - Linux v4.5-rc7-215-gf2c1242 From f721d46cf60ce310d6ff2e061cc17289ba795200 Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Mon, 14 Mar 2016 08:44:02 -0400 Subject: [PATCH 013/275] CVE-2016-3135 netfilter: size overflow in x_tables (rhbz 1317386 1317387) --- kernel.spec | 6 ++++ ...ter-x_tables-check-for-size-overflow.patch | 31 +++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 netfilter-x_tables-check-for-size-overflow.patch diff --git a/kernel.spec b/kernel.spec index af22cf783..dea176571 100644 --- a/kernel.spec +++ b/kernel.spec @@ -616,6 +616,9 @@ Patch649: perf-tools-Fix-python-extension-build.patch #rhbz 1316136 Patch663: USB-serial-ftdi_sio-Add-support-for-ICP-DAS-I-756xU-.patch +#CVE-2016-3135 rhbz 1317386 1317387 +Patch664: netfilter-x_tables-check-for-size-overflow.patch + # END OF PATCH DEFINITIONS %endif @@ -2137,6 +2140,9 @@ fi # # %changelog +* Mon Mar 14 2016 Josh Boyer +- CVE-2016-3135 netfilter: size overflow in x_tables (rhbz 1317386 1317387) + * Fri Mar 11 2016 Josh Boyer - Add patch for ICP DAS I-756xU devices (rhbz 1316136) diff --git a/netfilter-x_tables-check-for-size-overflow.patch b/netfilter-x_tables-check-for-size-overflow.patch new file mode 100644 index 000000000..81e3d36fa --- /dev/null +++ b/netfilter-x_tables-check-for-size-overflow.patch @@ -0,0 +1,31 @@ +Subject: [PATCH nf] netfilter: x_tables: check for size overflow +From: Florian Westphal +Date: 2016-03-10 0:56:23 + +Ben Hawkes says: + integer overflow in xt_alloc_table_info, which on 32-bit systems can + lead to small structure allocation and a copy_from_user based heap + corruption. + +Reported-by: Ben Hawkes +Signed-off-by: Florian Westphal +--- + net/netfilter/x_tables.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/net/netfilter/x_tables.c b/net/netfilter/x_tables.c +index c8a0b7d..17a9a9f 100644 +--- a/net/netfilter/x_tables.c ++++ b/net/netfilter/x_tables.c +@@ -659,6 +659,9 @@ struct xt_table_info *xt_alloc_table_info(unsigned int size) + struct xt_table_info *info = NULL; + size_t sz = sizeof(*info) + size; + ++ if (sz < sizeof(*info)) ++ return NULL; ++ + /* Pedantry: prevent them from hitting BUG() in vmalloc.c --RR */ + if ((SMP_ALIGN(size) >> PAGE_SHIFT) + 2 > totalram_pages) + return NULL; +-- +2.4.10 From 291d5c505ced68f62d235ff665ef48c869723a48 Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Mon, 14 Mar 2016 08:50:20 -0400 Subject: [PATCH 014/275] CVE-2016-3134 netfilter: missing bounds check in ipt_entry struct (rhbz 1317383 1317384) --- kernel.spec | 4 + ...es-deal-with-bogus-nextoffset-values.patch | 150 ++++++++++++++++++ 2 files changed, 154 insertions(+) create mode 100644 netfilter-x_tables-deal-with-bogus-nextoffset-values.patch diff --git a/kernel.spec b/kernel.spec index dea176571..bd8bd6e5b 100644 --- a/kernel.spec +++ b/kernel.spec @@ -619,6 +619,9 @@ Patch663: USB-serial-ftdi_sio-Add-support-for-ICP-DAS-I-756xU-.patch #CVE-2016-3135 rhbz 1317386 1317387 Patch664: netfilter-x_tables-check-for-size-overflow.patch +#CVE-2016-3134 rhbz 1317383 1317384 +Patch665: netfilter-x_tables-deal-with-bogus-nextoffset-values.patch + # END OF PATCH DEFINITIONS %endif @@ -2141,6 +2144,7 @@ fi # %changelog * Mon Mar 14 2016 Josh Boyer +- CVE-2016-3134 netfilter: missing bounds check in ipt_entry struct (rhbz 1317383 1317384) - CVE-2016-3135 netfilter: size overflow in x_tables (rhbz 1317386 1317387) * Fri Mar 11 2016 Josh Boyer diff --git a/netfilter-x_tables-deal-with-bogus-nextoffset-values.patch b/netfilter-x_tables-deal-with-bogus-nextoffset-values.patch new file mode 100644 index 000000000..ebfe1716f --- /dev/null +++ b/netfilter-x_tables-deal-with-bogus-nextoffset-values.patch @@ -0,0 +1,150 @@ +Subject: [PATCH nf] netfilter: x_tables: deal with bogus nextoffset values +From: Florian Westphal +Date: 2016-03-10 0:56:02 + +Ben Hawkes says: + + In the mark_source_chains function (net/ipv4/netfilter/ip_tables.c) it + is possible for a user-supplied ipt_entry structure to have a large + next_offset field. This field is not bounds checked prior to writing a + counter value at the supplied offset. + +Problem is that xt_entry_foreach() macro stops iterating once e->next_offset +is out of bounds, assuming this is the last entry. + +With malformed data thats not necessarily the case so we can +write outside of allocated area later as we might not have walked the +entire blob. + +Fix this by simplifying mark_source_chains -- it already has to check +if nextoff is in range to catch invalid jumps, so just do the check +when we move to a next entry as well. + +Signed-off-by: Florian Westphal +--- + net/ipv4/netfilter/arp_tables.c | 16 ++++++++-------- + net/ipv4/netfilter/ip_tables.c | 15 ++++++++------- + net/ipv6/netfilter/ip6_tables.c | 13 ++++++------- + 3 files changed, 22 insertions(+), 22 deletions(-) + +diff --git a/net/ipv4/netfilter/arp_tables.c b/net/ipv4/netfilter/arp_tables.c +index b488cac..5a0b591 100644 +--- a/net/ipv4/netfilter/arp_tables.c ++++ b/net/ipv4/netfilter/arp_tables.c +@@ -437,6 +437,10 @@ static int mark_source_chains(const struct xt_table_info *newinfo, + + /* Move along one */ + size = e->next_offset; ++ ++ if (pos + size > newinfo->size - sizeof(*e)) ++ return 0; ++ + e = (struct arpt_entry *) + (entry0 + pos + size); + e->counters.pcnt = pos; +@@ -447,14 +451,6 @@ static int mark_source_chains(const struct xt_table_info *newinfo, + if (strcmp(t->target.u.user.name, + XT_STANDARD_TARGET) == 0 && + newpos >= 0) { +- if (newpos > newinfo->size - +- sizeof(struct arpt_entry)) { +- duprintf("mark_source_chains: " +- "bad verdict (%i)\n", +- newpos); +- return 0; +- } +- + /* This a jump; chase it. */ + duprintf("Jump rule %u -> %u\n", + pos, newpos); +@@ -462,6 +458,10 @@ static int mark_source_chains(const struct xt_table_info *newinfo, + /* ... this is a fallthru */ + newpos = pos + e->next_offset; + } ++ ++ if (newpos > newinfo->size - sizeof(*e)) ++ return 0; ++ + e = (struct arpt_entry *) + (entry0 + newpos); + e->counters.pcnt = pos; +diff --git a/net/ipv4/netfilter/ip_tables.c b/net/ipv4/netfilter/ip_tables.c +index b99affa..ceb995f 100644 +--- a/net/ipv4/netfilter/ip_tables.c ++++ b/net/ipv4/netfilter/ip_tables.c +@@ -519,6 +519,10 @@ mark_source_chains(const struct xt_table_info *newinfo, + + /* Move along one */ + size = e->next_offset; ++ ++ if (pos + size > newinfo->size - sizeof(*e)) ++ return 0; ++ + e = (struct ipt_entry *) + (entry0 + pos + size); + e->counters.pcnt = pos; +@@ -529,13 +533,6 @@ mark_source_chains(const struct xt_table_info *newinfo, + if (strcmp(t->target.u.user.name, + XT_STANDARD_TARGET) == 0 && + newpos >= 0) { +- if (newpos > newinfo->size - +- sizeof(struct ipt_entry)) { +- duprintf("mark_source_chains: " +- "bad verdict (%i)\n", +- newpos); +- return 0; +- } + /* This a jump; chase it. */ + duprintf("Jump rule %u -> %u\n", + pos, newpos); +@@ -543,6 +540,10 @@ mark_source_chains(const struct xt_table_info *newinfo, + /* ... this is a fallthru */ + newpos = pos + e->next_offset; + } ++ ++ if (newpos > newinfo->size - sizeof(*e)) ++ return 0; ++ + e = (struct ipt_entry *) + (entry0 + newpos); + e->counters.pcnt = pos; +diff --git a/net/ipv6/netfilter/ip6_tables.c b/net/ipv6/netfilter/ip6_tables.c +index 99425cf..d88a794 100644 +--- a/net/ipv6/netfilter/ip6_tables.c ++++ b/net/ipv6/netfilter/ip6_tables.c +@@ -531,6 +531,8 @@ mark_source_chains(const struct xt_table_info *newinfo, + + /* Move along one */ + size = e->next_offset; ++ if (pos + size > newinfo->size - sizeof(*e)) ++ return 0; + e = (struct ip6t_entry *) + (entry0 + pos + size); + e->counters.pcnt = pos; +@@ -541,13 +543,6 @@ mark_source_chains(const struct xt_table_info *newinfo, + if (strcmp(t->target.u.user.name, + XT_STANDARD_TARGET) == 0 && + newpos >= 0) { +- if (newpos > newinfo->size - +- sizeof(struct ip6t_entry)) { +- duprintf("mark_source_chains: " +- "bad verdict (%i)\n", +- newpos); +- return 0; +- } + /* This a jump; chase it. */ + duprintf("Jump rule %u -> %u\n", + pos, newpos); +@@ -555,6 +550,10 @@ mark_source_chains(const struct xt_table_info *newinfo, + /* ... this is a fallthru */ + newpos = pos + e->next_offset; + } ++ ++ if (newpos > newinfo->size - sizeof(*e)) ++ return 0; ++ + e = (struct ip6t_entry *) + (entry0 + newpos); + e->counters.pcnt = pos; +-- +2.4.10 From 1fe0d24720a5fe4f58cb0fd7a21165a492400d5d Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Mon, 14 Mar 2016 11:25:08 -0500 Subject: [PATCH 015/275] Linux v4.5 --- config-generic | 6 +-- config-nodebug | 112 ++++++++++++++++++++++----------------------- config-x86-generic | 2 +- kernel.spec | 14 ++++-- sources | 6 +-- 5 files changed, 71 insertions(+), 69 deletions(-) diff --git a/config-generic b/config-generic index 0e8f19219..a970c6577 100644 --- a/config-generic +++ b/config-generic @@ -1825,13 +1825,13 @@ CONFIG_B43_PCMCIA=y CONFIG_B43_SDIO=y CONFIG_B43_BCMA=y CONFIG_B43_BCMA_PIO=y -CONFIG_B43_DEBUG=y +# CONFIG_B43_DEBUG is not set CONFIG_B43_PHY_LP=y CONFIG_B43_PHY_N=y CONFIG_B43_PHY_HT=y CONFIG_B43_PHY_G=y CONFIG_B43LEGACY=m -CONFIG_B43LEGACY_DEBUG=y +# CONFIG_B43LEGACY_DEBUG is not set CONFIG_B43LEGACY_DMA=y CONFIG_B43LEGACY_PIO=y CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y @@ -5132,7 +5132,7 @@ CONFIG_PM_DEBUG=y # CONFIG_DPM_WATCHDOG is not set # revisit this in debug CONFIG_PM_TRACE=y CONFIG_PM_TRACE_RTC=y -CONFIG_PM_TEST_SUSPEND=y +# CONFIG_PM_TEST_SUSPEND is not set # CONFIG_PM_OPP is not set # CONFIG_PM_AUTOSLEEP is not set # CONFIG_PM_WAKELOCKS is not set diff --git a/config-nodebug b/config-nodebug index 3a2eee381..c173637a2 100644 --- a/config-nodebug +++ b/config-nodebug @@ -2,101 +2,101 @@ CONFIG_SND_VERBOSE_PRINTK=y CONFIG_SND_DEBUG=y CONFIG_SND_PCM_XRUN_DEBUG=y -CONFIG_DEBUG_ATOMIC_SLEEP=y +# CONFIG_DEBUG_ATOMIC_SLEEP is not set -CONFIG_DEBUG_MUTEXES=y -CONFIG_DEBUG_RT_MUTEXES=y -CONFIG_DEBUG_LOCK_ALLOC=y -CONFIG_LOCK_TORTURE_TEST=m -CONFIG_PROVE_LOCKING=y -CONFIG_DEBUG_SPINLOCK=y -CONFIG_PROVE_RCU=y +# CONFIG_DEBUG_MUTEXES is not set +# CONFIG_DEBUG_RT_MUTEXES is not set +# CONFIG_DEBUG_LOCK_ALLOC is not set +# CONFIG_LOCK_TORTURE_TEST is not set +# CONFIG_PROVE_LOCKING is not set +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_PROVE_RCU is not set # CONFIG_PROVE_RCU_REPEATEDLY is not set -CONFIG_DEBUG_PER_CPU_MAPS=y +# CONFIG_DEBUG_PER_CPU_MAPS is not set CONFIG_CPUMASK_OFFSTACK=y -CONFIG_CPU_NOTIFIER_ERROR_INJECT=m +# CONFIG_CPU_NOTIFIER_ERROR_INJECT is not set -CONFIG_FAULT_INJECTION=y -CONFIG_FAILSLAB=y -CONFIG_FAIL_PAGE_ALLOC=y -CONFIG_FAIL_MAKE_REQUEST=y -CONFIG_FAULT_INJECTION_DEBUG_FS=y -CONFIG_FAULT_INJECTION_STACKTRACE_FILTER=y -CONFIG_FAIL_IO_TIMEOUT=y -CONFIG_FAIL_MMC_REQUEST=y +# CONFIG_FAULT_INJECTION is not set +# CONFIG_FAILSLAB is not set +# CONFIG_FAIL_PAGE_ALLOC is not set +# CONFIG_FAIL_MAKE_REQUEST is not set +# CONFIG_FAULT_INJECTION_DEBUG_FS is not set +# CONFIG_FAULT_INJECTION_STACKTRACE_FILTER is not set +# CONFIG_FAIL_IO_TIMEOUT is not set +# CONFIG_FAIL_MMC_REQUEST is not set -CONFIG_LOCK_STAT=y +# CONFIG_LOCK_STAT is not set -CONFIG_DEBUG_STACK_USAGE=y +# CONFIG_DEBUG_STACK_USAGE is not set -CONFIG_ACPI_DEBUG=y +# CONFIG_ACPI_DEBUG is not set # CONFIG_ACPI_DEBUGGER is not set -CONFIG_DEBUG_SG=y -CONFIG_DEBUG_PI_LIST=y +# CONFIG_DEBUG_SG is not set +# CONFIG_DEBUG_PI_LIST is not set # CONFIG_PAGE_EXTENSION is not set # CONFIG_PAGE_OWNER is not set # CONFIG_DEBUG_PAGEALLOC is not set -CONFIG_DEBUG_OBJECTS=y +# CONFIG_DEBUG_OBJECTS is not set # CONFIG_DEBUG_OBJECTS_SELFTEST is not set -CONFIG_DEBUG_OBJECTS_FREE=y -CONFIG_DEBUG_OBJECTS_TIMERS=y -CONFIG_DEBUG_OBJECTS_RCU_HEAD=y +# CONFIG_DEBUG_OBJECTS_FREE is not set +# CONFIG_DEBUG_OBJECTS_TIMERS is not set +# CONFIG_DEBUG_OBJECTS_RCU_HEAD is not set CONFIG_DEBUG_OBJECTS_ENABLE_DEFAULT=1 CONFIG_X86_PTDUMP=y -CONFIG_ARM64_PTDUMP=y -CONFIG_EFI_PGT_DUMP=y +# CONFIG_ARM64_PTDUMP is not set +# CONFIG_EFI_PGT_DUMP is not set -CONFIG_CAN_DEBUG_DEVICES=y +# CONFIG_CAN_DEBUG_DEVICES is not set -CONFIG_MODULE_FORCE_UNLOAD=y +# CONFIG_MODULE_FORCE_UNLOAD is not set -CONFIG_DEBUG_NOTIFIERS=y +# CONFIG_DEBUG_NOTIFIERS is not set -CONFIG_DMA_API_DEBUG=y +# CONFIG_DMA_API_DEBUG is not set -CONFIG_MMIOTRACE=y +# CONFIG_MMIOTRACE is not set -CONFIG_DEBUG_CREDENTIALS=y +# CONFIG_DEBUG_CREDENTIALS is not set # off in both production debug and nodebug builds, # on in rawhide nodebug builds -CONFIG_DEBUG_FORCE_WEAK_PER_CPU=y +# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set -CONFIG_EXT4_DEBUG=y +# CONFIG_EXT4_DEBUG is not set # CONFIG_XFS_WARN is not set -CONFIG_DEBUG_PERF_USE_VMALLOC=y +# CONFIG_DEBUG_PERF_USE_VMALLOC is not set -CONFIG_JBD2_DEBUG=y +# CONFIG_JBD2_DEBUG is not set -CONFIG_NFSD_FAULT_INJECTION=y +# CONFIG_NFSD_FAULT_INJECTION is not set -CONFIG_DEBUG_BLK_CGROUP=y +# CONFIG_DEBUG_BLK_CGROUP is not set -CONFIG_DRBD_FAULT_INJECTION=y +# CONFIG_DRBD_FAULT_INJECTION is not set -CONFIG_ATH_DEBUG=y -CONFIG_CARL9170_DEBUGFS=y -CONFIG_IWLWIFI_DEVICE_TRACING=y +# CONFIG_ATH_DEBUG is not set +# CONFIG_CARL9170_DEBUGFS is not set +# CONFIG_IWLWIFI_DEVICE_TRACING is not set # CONFIG_RTLWIFI_DEBUG is not set -CONFIG_DEBUG_OBJECTS_WORK=y +# CONFIG_DEBUG_OBJECTS_WORK is not set -CONFIG_DMADEVICES_DEBUG=y +# CONFIG_DMADEVICES_DEBUG is not set # CONFIG_DMADEVICES_VDEBUG is not set CONFIG_PM_ADVANCED_DEBUG=y -CONFIG_CEPH_LIB_PRETTYDEBUG=y -CONFIG_QUOTA_DEBUG=y +# CONFIG_CEPH_LIB_PRETTYDEBUG is not set +# CONFIG_QUOTA_DEBUG is not set CONFIG_KGDB_KDB=y @@ -104,19 +104,19 @@ CONFIG_KDB_DEFAULT_ENABLE=0x0 CONFIG_KDB_KEYBOARD=y CONFIG_KDB_CONTINUE_CATASTROPHIC=0 -CONFIG_DEBUG_OBJECTS_PERCPU_COUNTER=y +# CONFIG_DEBUG_OBJECTS_PERCPU_COUNTER is not set # CONFIG_PERCPU_TEST is not set -CONFIG_TEST_LIST_SORT=y +# CONFIG_TEST_LIST_SORT is not set # CONFIG_TEST_STRING_HELPERS is not set -CONFIG_DETECT_HUNG_TASK=y +# CONFIG_DETECT_HUNG_TASK is not set CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=120 # CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set -CONFIG_WQ_WATCHDOG=y +# CONFIG_WQ_WATCHDOG is not set -CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK=y +# CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK is not set -CONFIG_DEBUG_KMEMLEAK=y +# CONFIG_DEBUG_KMEMLEAK is not set CONFIG_DEBUG_KMEMLEAK_EARLY_LOG_SIZE=1024 # CONFIG_DEBUG_KMEMLEAK_TEST is not set CONFIG_DEBUG_KMEMLEAK_DEFAULT_OFF=y @@ -127,4 +127,4 @@ CONFIG_DEBUG_KMEMLEAK_DEFAULT_OFF=y # CONFIG_SPI_DEBUG is not set -CONFIG_X86_DEBUG_STATIC_CPU_HAS=y +# CONFIG_X86_DEBUG_STATIC_CPU_HAS is not set diff --git a/config-x86-generic b/config-x86-generic index 4815913be..10a3a126b 100644 --- a/config-x86-generic +++ b/config-x86-generic @@ -377,7 +377,7 @@ CONFIG_SP5100_TCO=m # CONFIG_MEMTEST is not set # CONFIG_DEBUG_TLBFLUSH is not set -CONFIG_MAXSMP=y +# CONFIG_MAXSMP is not set CONFIG_HP_ILO=m diff --git a/kernel.spec b/kernel.spec index bd8bd6e5b..e43060c49 100644 --- a/kernel.spec +++ b/kernel.spec @@ -6,7 +6,7 @@ Summary: The Linux kernel # For a stable, released kernel, released_kernel should be 1. For rawhide # and/or a kernel built from an rc or git snapshot, released_kernel should # be 0. -%global released_kernel 0 +%global released_kernel 1 # Sign modules on x86. Make sure the config files match this setting if more # architectures are added. @@ -48,7 +48,7 @@ Summary: The Linux kernel # base_sublevel is the kernel version we're starting with and patching # on top of -- for example, 3.1-rc7-git1 starts with a 3.0 base, # which yields a base_sublevel of 0. -%define base_sublevel 4 +%define base_sublevel 5 ## If this is a released kernel ## %if 0%{?released_kernel} @@ -67,9 +67,9 @@ Summary: The Linux kernel # The next upstream release sublevel (base_sublevel+1) %define upstream_sublevel %(echo $((%{base_sublevel} + 1))) # The rc snapshot level -%define rcrev 7 +%define rcrev 0 # The git snapshot level -%define gitrev 3 +%define gitrev 0 # Set rpm version accordingly %define rpmversion 4.%{upstream_sublevel}.0 %endif @@ -125,7 +125,7 @@ Summary: The Linux kernel # Set debugbuildsenabled to 1 for production (build separate debug kernels) # and 0 for rawhide (all kernels are debug kernels). # See also 'make debug' and 'make release'. -%define debugbuildsenabled 0 +%define debugbuildsenabled 1 # Want to build a vanilla kernel build without any non-upstream patches? %define with_vanilla %{?_with_vanilla: 1} %{?!_with_vanilla: 0} @@ -2143,6 +2143,10 @@ fi # # %changelog +* Mon Mar 14 2016 Justin M. Forbes - 4.5.0-1 +- Linux v4.5 +- Disable debugging options. + * Mon Mar 14 2016 Josh Boyer - CVE-2016-3134 netfilter: missing bounds check in ipt_entry struct (rhbz 1317383 1317384) - CVE-2016-3135 netfilter: size overflow in x_tables (rhbz 1317386 1317387) diff --git a/sources b/sources index 76edd08d2..4d9a84fe2 100644 --- a/sources +++ b/sources @@ -1,4 +1,2 @@ -9a78fa2eb6c68ca5a40ed5af08142599 linux-4.4.tar.xz -dcbc8fe378a676d5d0dd208cf524e144 perf-man-4.4.tar.gz -78a23c8a117f99bbe8f45bdd0183cf18 patch-4.5-rc7.xz -e41f8602306f56d8abdda9bdb4cdfb46 patch-4.5-rc7-git3.xz +a60d48eee08ec0536d5efb17ca819aef linux-4.5.tar.xz +6f557fe90b800b615c85c2ca04da6154 perf-man-4.5.tar.gz From 2e7e84333ec23b0e79a19446a2bcbafec1acaffe Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Mon, 14 Mar 2016 11:30:28 -0500 Subject: [PATCH 016/275] Bump baserelease --- kernel.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kernel.spec b/kernel.spec index e43060c49..cf56f4f34 100644 --- a/kernel.spec +++ b/kernel.spec @@ -42,7 +42,7 @@ Summary: The Linux kernel # For non-released -rc kernels, this will be appended after the rcX and # gitX tags, so a 3 here would become part of release "0.rcX.gitX.3" # -%global baserelease 1 +%global baserelease 300 %global fedora_build %{baserelease} # base_sublevel is the kernel version we're starting with and patching From f1e9fcace54a534c20acb08c859be2fde2d5573d Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Wed, 16 Mar 2016 08:21:56 -0400 Subject: [PATCH 017/275] CVE-2016-3135 ipv4: DoS when destroying a network interface (rhbz 1318172 1318270) --- ...sive-useless-work-during-inetdev-des.patch | 97 +++++++++++++++++++ kernel.spec | 6 ++ 2 files changed, 103 insertions(+) create mode 100644 ipv4-Dont-do-expensive-useless-work-during-inetdev-des.patch diff --git a/ipv4-Dont-do-expensive-useless-work-during-inetdev-des.patch b/ipv4-Dont-do-expensive-useless-work-during-inetdev-des.patch new file mode 100644 index 000000000..48e4762e3 --- /dev/null +++ b/ipv4-Dont-do-expensive-useless-work-during-inetdev-des.patch @@ -0,0 +1,97 @@ +From fbd40ea0180a2d328c5adc61414dc8bab9335ce2 Mon Sep 17 00:00:00 2001 +From: "David S. Miller" +Date: Sun, 13 Mar 2016 23:28:00 -0400 +Subject: ipv4: Don't do expensive useless work during inetdev destroy. + +When an inetdev is destroyed, every address assigned to the interface +is removed. And in this scenerio we do two pointless things which can +be very expensive if the number of assigned interfaces is large: + +1) Address promotion. We are deleting all addresses, so there is no + point in doing this. + +2) A full nf conntrack table purge for every address. We only need to + do this once, as is already caught by the existing + masq_dev_notifier so masq_inet_event() can skip this. + +Reported-by: Solar Designer +Signed-off-by: David S. Miller +Tested-by: Cyrill Gorcunov +--- + net/ipv4/devinet.c | 4 ++++ + net/ipv4/fib_frontend.c | 4 ++++ + net/ipv4/netfilter/nf_nat_masquerade_ipv4.c | 12 ++++++++++-- + 3 files changed, 18 insertions(+), 2 deletions(-) + +diff --git a/net/ipv4/devinet.c b/net/ipv4/devinet.c +index 65e76a4..e333bc8 100644 +--- a/net/ipv4/devinet.c ++++ b/net/ipv4/devinet.c +@@ -334,6 +334,9 @@ static void __inet_del_ifa(struct in_device *in_dev, struct in_ifaddr **ifap, + + ASSERT_RTNL(); + ++ if (in_dev->dead) ++ goto no_promotions; ++ + /* 1. Deleting primary ifaddr forces deletion all secondaries + * unless alias promotion is set + **/ +@@ -380,6 +383,7 @@ static void __inet_del_ifa(struct in_device *in_dev, struct in_ifaddr **ifap, + fib_del_ifaddr(ifa, ifa1); + } + ++no_promotions: + /* 2. Unlink it */ + + *ifap = ifa1->ifa_next; +diff --git a/net/ipv4/fib_frontend.c b/net/ipv4/fib_frontend.c +index 4734475..21add55 100644 +--- a/net/ipv4/fib_frontend.c ++++ b/net/ipv4/fib_frontend.c +@@ -922,6 +922,9 @@ void fib_del_ifaddr(struct in_ifaddr *ifa, struct in_ifaddr *iprim) + subnet = 1; + } + ++ if (in_dev->dead) ++ goto no_promotions; ++ + /* Deletion is more complicated than add. + * We should take care of not to delete too much :-) + * +@@ -997,6 +1000,7 @@ void fib_del_ifaddr(struct in_ifaddr *ifa, struct in_ifaddr *iprim) + } + } + ++no_promotions: + if (!(ok & BRD_OK)) + fib_magic(RTM_DELROUTE, RTN_BROADCAST, ifa->ifa_broadcast, 32, prim); + if (subnet && ifa->ifa_prefixlen < 31) { +diff --git a/net/ipv4/netfilter/nf_nat_masquerade_ipv4.c b/net/ipv4/netfilter/nf_nat_masquerade_ipv4.c +index c6eb421..ea91058 100644 +--- a/net/ipv4/netfilter/nf_nat_masquerade_ipv4.c ++++ b/net/ipv4/netfilter/nf_nat_masquerade_ipv4.c +@@ -108,10 +108,18 @@ static int masq_inet_event(struct notifier_block *this, + unsigned long event, + void *ptr) + { +- struct net_device *dev = ((struct in_ifaddr *)ptr)->ifa_dev->dev; ++ struct in_device *idev = ((struct in_ifaddr *)ptr)->ifa_dev; + struct netdev_notifier_info info; + +- netdev_notifier_info_init(&info, dev); ++ /* The masq_dev_notifier will catch the case of the device going ++ * down. So if the inetdev is dead and being destroyed we have ++ * no work to do. Otherwise this is an individual address removal ++ * and we have to perform the flush. ++ */ ++ if (idev->dead) ++ return NOTIFY_DONE; ++ ++ netdev_notifier_info_init(&info, idev->dev); + return masq_device_event(this, event, &info); + } + +-- +cgit v0.12 + diff --git a/kernel.spec b/kernel.spec index cf56f4f34..569086999 100644 --- a/kernel.spec +++ b/kernel.spec @@ -622,6 +622,9 @@ Patch664: netfilter-x_tables-check-for-size-overflow.patch #CVE-2016-3134 rhbz 1317383 1317384 Patch665: netfilter-x_tables-deal-with-bogus-nextoffset-values.patch +#CVE-2016-3135 rhbz 1318172 1318270 +Patch666: ipv4-Dont-do-expensive-useless-work-during-inetdev-des.patch + # END OF PATCH DEFINITIONS %endif @@ -2143,6 +2146,9 @@ fi # # %changelog +* Wed Mar 16 2016 Josh Boyer +- CVE-2016-3135 ipv4: DoS when destroying a network interface (rhbz 1318172 1318270) + * Mon Mar 14 2016 Justin M. Forbes - 4.5.0-1 - Linux v4.5 - Disable debugging options. From 06e2f0cee1d9fd78945a0703cb5246d6c754eca0 Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Fri, 18 Mar 2016 10:08:28 -0400 Subject: [PATCH 018/275] CVE-2016-2184 alsa: panic on invalid USB descriptors (rhbz 1317012 1317470) --- ...dd-sanity-checks-for-endpoint-access.patch | 80 +++++++++++++++++++ ...ix-NULL-dereference-in-create_fixed_.patch | 40 ++++++++++ kernel.spec | 7 ++ 3 files changed, 127 insertions(+) create mode 100644 ALSA-usb-audio-Add-sanity-checks-for-endpoint-access.patch create mode 100644 ALSA-usb-audio-Fix-NULL-dereference-in-create_fixed_.patch diff --git a/ALSA-usb-audio-Add-sanity-checks-for-endpoint-access.patch b/ALSA-usb-audio-Add-sanity-checks-for-endpoint-access.patch new file mode 100644 index 000000000..801434a26 --- /dev/null +++ b/ALSA-usb-audio-Add-sanity-checks-for-endpoint-access.patch @@ -0,0 +1,80 @@ +From 873156565ca67779bbf5a3475ccd08ea3bb92522 Mon Sep 17 00:00:00 2001 +From: Takashi Iwai +Date: Tue, 15 Mar 2016 15:20:58 +0100 +Subject: [PATCH 2/2] ALSA: usb-audio: Add sanity checks for endpoint accesses + +Add some sanity check codes before actually accessing the endpoint via +get_endpoint() in order to avoid the invalid access through a +malformed USB descriptor. Mostly just checking bNumEndpoints, but in +one place (snd_microii_spdif_default_get()), the validity of iface and +altsetting index is checked as well. + +Bugzilla: https://bugzilla.suse.com/show_bug.cgi?id=971125 +Cc: +Signed-off-by: Takashi Iwai +--- + sound/usb/clock.c | 2 ++ + sound/usb/endpoint.c | 3 +++ + sound/usb/mixer_quirks.c | 4 ++++ + sound/usb/pcm.c | 2 ++ + 4 files changed, 11 insertions(+) + +diff --git a/sound/usb/clock.c b/sound/usb/clock.c +index 2ed260b10f6d..7ccbcaf6a147 100644 +--- a/sound/usb/clock.c ++++ b/sound/usb/clock.c +@@ -285,6 +285,8 @@ static int set_sample_rate_v1(struct snd_usb_audio *chip, int iface, + unsigned char data[3]; + int err, crate; + ++ if (get_iface_desc(alts)->bNumEndpoints < 1) ++ return -EINVAL; + ep = get_endpoint(alts, 0)->bEndpointAddress; + + /* if endpoint doesn't have sampling rate control, bail out */ +diff --git a/sound/usb/endpoint.c b/sound/usb/endpoint.c +index e6f71894ecdc..c2131b851602 100644 +--- a/sound/usb/endpoint.c ++++ b/sound/usb/endpoint.c +@@ -415,6 +415,9 @@ exit_clear: + * + * New endpoints will be added to chip->ep_list and must be freed by + * calling snd_usb_endpoint_free(). ++ * ++ * For SND_USB_ENDPOINT_TYPE_SYNC, the caller needs to guarantee that ++ * bNumEndpoints > 1 beforehand. + */ + struct snd_usb_endpoint *snd_usb_add_endpoint(struct snd_usb_audio *chip, + struct usb_host_interface *alts, +diff --git a/sound/usb/mixer_quirks.c b/sound/usb/mixer_quirks.c +index d3608c0a29f3..2d724e3c4cc0 100644 +--- a/sound/usb/mixer_quirks.c ++++ b/sound/usb/mixer_quirks.c +@@ -1518,7 +1518,11 @@ static int snd_microii_spdif_default_get(struct snd_kcontrol *kcontrol, + + /* use known values for that card: interface#1 altsetting#1 */ + iface = usb_ifnum_to_if(chip->dev, 1); ++ if (!iface || iface->num_altsetting < 2) ++ return -EINVAL; + alts = &iface->altsetting[1]; ++ if (get_iface_desc(alts)->bNumEndpoints < 1) ++ return -EINVAL; + ep = get_endpoint(alts, 0)->bEndpointAddress; + + err = snd_usb_ctl_msg(chip->dev, +diff --git a/sound/usb/pcm.c b/sound/usb/pcm.c +index cdac5179db3f..4da64896df6d 100644 +--- a/sound/usb/pcm.c ++++ b/sound/usb/pcm.c +@@ -159,6 +159,8 @@ static int init_pitch_v1(struct snd_usb_audio *chip, int iface, + unsigned char data[1]; + int err; + ++ if (get_iface_desc(alts)->bNumEndpoints < 1) ++ return -EINVAL; + ep = get_endpoint(alts, 0)->bEndpointAddress; + + data[0] = 1; +-- +2.5.0 + diff --git a/ALSA-usb-audio-Fix-NULL-dereference-in-create_fixed_.patch b/ALSA-usb-audio-Fix-NULL-dereference-in-create_fixed_.patch new file mode 100644 index 000000000..37cdb213a --- /dev/null +++ b/ALSA-usb-audio-Fix-NULL-dereference-in-create_fixed_.patch @@ -0,0 +1,40 @@ +From b0bb5691b38e2f439b071e226bad9f699c33b77d Mon Sep 17 00:00:00 2001 +From: Takashi Iwai +Date: Tue, 15 Mar 2016 12:09:10 +0100 +Subject: [PATCH 1/2] ALSA: usb-audio: Fix NULL dereference in + create_fixed_stream_quirk() + +create_fixed_stream_quirk() may cause a NULL-pointer dereference by +accessing the non-existing endpoint when a USB device with a malformed +USB descriptor is used. + +This patch avoids it simply by adding a sanity check of bNumEndpoints +before the accesses. + +Bugzilla: https://bugzilla.suse.com/show_bug.cgi?id=971125 +Cc: +Signed-off-by: Takashi Iwai +--- + sound/usb/quirks.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c +index eef9b8e4b949..e128ca62eb44 100644 +--- a/sound/usb/quirks.c ++++ b/sound/usb/quirks.c +@@ -177,6 +177,12 @@ static int create_fixed_stream_quirk(struct snd_usb_audio *chip, + } + alts = &iface->altsetting[fp->altset_idx]; + altsd = get_iface_desc(alts); ++ if (altsd->bNumEndpoints < 1) { ++ kfree(fp); ++ kfree(rate_table); ++ return -EINVAL; ++ } ++ + fp->protocol = altsd->bInterfaceProtocol; + + if (fp->datainterval == 0) +-- +2.5.0 + diff --git a/kernel.spec b/kernel.spec index 569086999..c0cb527ff 100644 --- a/kernel.spec +++ b/kernel.spec @@ -625,6 +625,10 @@ Patch665: netfilter-x_tables-deal-with-bogus-nextoffset-values.patch #CVE-2016-3135 rhbz 1318172 1318270 Patch666: ipv4-Dont-do-expensive-useless-work-during-inetdev-des.patch +#CVE-2016-2184 rhbz 1317012 1317470 +Patch670: ALSA-usb-audio-Fix-NULL-dereference-in-create_fixed_.patch +Patch671: ALSA-usb-audio-Add-sanity-checks-for-endpoint-access.patch + # END OF PATCH DEFINITIONS %endif @@ -2146,6 +2150,9 @@ fi # # %changelog +* Fri Mar 18 2016 Josh Boyer +- CVE-2016-2184 alsa: panic on invalid USB descriptors (rhbz 1317012 1317470) + * Wed Mar 16 2016 Josh Boyer - CVE-2016-3135 ipv4: DoS when destroying a network interface (rhbz 1318172 1318270) From fdfe624e9a859971569d8cb787d432efb6c3af7e Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Fri, 18 Mar 2016 10:20:51 -0400 Subject: [PATCH 019/275] CVE-2016-3137 cypress_m8: oops on invalid USB descriptors (rhbz 1317010 1316996) --- cypress_m8-add-sanity-checking.patch | 50 ++++++++++++++++++++++++++++ kernel.spec | 4 +++ 2 files changed, 54 insertions(+) create mode 100644 cypress_m8-add-sanity-checking.patch diff --git a/cypress_m8-add-sanity-checking.patch b/cypress_m8-add-sanity-checking.patch new file mode 100644 index 000000000..fa8513f94 --- /dev/null +++ b/cypress_m8-add-sanity-checking.patch @@ -0,0 +1,50 @@ +From f7a3aa353011e38e119adebd845b38551587a26a Mon Sep 17 00:00:00 2001 +From: Oliver Neukum +Date: Thu, 17 Mar 2016 16:25:33 +0100 +Subject: [PATCH] cypress_m8: add sanity checking + +An attack using missing endpoints exists. +CVE-2016-3137 + +Signed-off-by: Oliver Neukum +CC: stable@vger.kernel.org + +v1 - add sanity check +v2 - add error logging +v3 - correct error message +--- + drivers/usb/serial/cypress_m8.c | 11 +++++------ + 1 file changed, 5 insertions(+), 6 deletions(-) + +diff --git a/drivers/usb/serial/cypress_m8.c b/drivers/usb/serial/cypress_m8.c +index 01bf53392819..5e25443fe4ef 100644 +--- a/drivers/usb/serial/cypress_m8.c ++++ b/drivers/usb/serial/cypress_m8.c +@@ -447,6 +447,11 @@ static int cypress_generic_port_probe(struct usb_serial_port *port) + struct usb_serial *serial = port->serial; + struct cypress_private *priv; + ++ if (!port->interrupt_out_urb || !port->interrupt_in_urb) { ++ dev_err(&port->dev, "A required endpoint is missing\n"); ++ return -ENODEV; ++ } ++ + priv = kzalloc(sizeof(struct cypress_private), GFP_KERNEL); + if (!priv) + return -ENOMEM; +@@ -606,12 +611,6 @@ static int cypress_open(struct tty_struct *tty, struct usb_serial_port *port) + cypress_set_termios(tty, port, &priv->tmp_termios); + + /* setup the port and start reading from the device */ +- if (!port->interrupt_in_urb) { +- dev_err(&port->dev, "%s - interrupt_in_urb is empty!\n", +- __func__); +- return -1; +- } +- + usb_fill_int_urb(port->interrupt_in_urb, serial->dev, + usb_rcvintpipe(serial->dev, port->interrupt_in_endpointAddress), + port->interrupt_in_urb->transfer_buffer, +-- +2.5.0 + diff --git a/kernel.spec b/kernel.spec index c0cb527ff..3dcd6a48b 100644 --- a/kernel.spec +++ b/kernel.spec @@ -629,6 +629,9 @@ Patch666: ipv4-Dont-do-expensive-useless-work-during-inetdev-des.patch Patch670: ALSA-usb-audio-Fix-NULL-dereference-in-create_fixed_.patch Patch671: ALSA-usb-audio-Add-sanity-checks-for-endpoint-access.patch +#CVE-2016-3137 rhbz 1317010 1316996 +Patch672: cypress_m8-add-sanity-checking.patch + # END OF PATCH DEFINITIONS %endif @@ -2151,6 +2154,7 @@ fi # %changelog * Fri Mar 18 2016 Josh Boyer +- CVE-2016-3137 cypress_m8: oops on invalid USB descriptors (rhbz 1317010 1316996) - CVE-2016-2184 alsa: panic on invalid USB descriptors (rhbz 1317012 1317470) * Wed Mar 16 2016 Josh Boyer From b8f173e7723464a28c2f9496bdf4399a53a249f6 Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Fri, 18 Mar 2016 10:32:05 -0400 Subject: [PATCH 020/275] CVE-2016-2186 powermate: oops on invalid USB descriptors (rhbz 1317015 1317464) --- ...ate-fix-oops-with-malicious-USB-desc.patch | 38 +++++++++++++++++++ kernel.spec | 4 ++ 2 files changed, 42 insertions(+) create mode 100644 USB-input-powermate-fix-oops-with-malicious-USB-desc.patch diff --git a/USB-input-powermate-fix-oops-with-malicious-USB-desc.patch b/USB-input-powermate-fix-oops-with-malicious-USB-desc.patch new file mode 100644 index 000000000..7de890e1b --- /dev/null +++ b/USB-input-powermate-fix-oops-with-malicious-USB-desc.patch @@ -0,0 +1,38 @@ +From 0383ff3ba89d3e6c604138e3ba46685621d71f98 Mon Sep 17 00:00:00 2001 +From: Josh Boyer +Date: Mon, 14 Mar 2016 10:02:51 -0400 +Subject: [PATCH] USB: input: powermate: fix oops with malicious USB + descriptors + +The powermate driver expects at least one valid USB endpoint in its +probe function. If given malicious descriptors that specify 0 for +the number of endpoints, it will crash. Validate the number of +endpoints on the interface before using them. + +The full report for this issue can be found here: +http://seclists.org/bugtraq/2016/Mar/85 + +Reported-by: Ralf Spenneberg +Cc: stable +Signed-off-by: Josh Boyer +--- + drivers/input/misc/powermate.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/drivers/input/misc/powermate.c b/drivers/input/misc/powermate.c +index 63b539d3daba..84909a12ff36 100644 +--- a/drivers/input/misc/powermate.c ++++ b/drivers/input/misc/powermate.c +@@ -307,6 +307,9 @@ static int powermate_probe(struct usb_interface *intf, const struct usb_device_i + int error = -ENOMEM; + + interface = intf->cur_altsetting; ++ if (interface->desc.bNumEndpoints < 1) ++ return -EINVAL; ++ + endpoint = &interface->endpoint[0].desc; + if (!usb_endpoint_is_int_in(endpoint)) + return -EIO; +-- +2.5.0 + diff --git a/kernel.spec b/kernel.spec index 3dcd6a48b..d96a1a32c 100644 --- a/kernel.spec +++ b/kernel.spec @@ -632,6 +632,9 @@ Patch671: ALSA-usb-audio-Add-sanity-checks-for-endpoint-access.patch #CVE-2016-3137 rhbz 1317010 1316996 Patch672: cypress_m8-add-sanity-checking.patch +#CVE-2016-2186 rhbz 1317015 1317464 +Patch673: USB-input-powermate-fix-oops-with-malicious-USB-desc.patch + # END OF PATCH DEFINITIONS %endif @@ -2154,6 +2157,7 @@ fi # %changelog * Fri Mar 18 2016 Josh Boyer +- CVE-2016-2186 powermate: oops on invalid USB descriptors (rhbz 1317015 1317464) - CVE-2016-3137 cypress_m8: oops on invalid USB descriptors (rhbz 1317010 1316996) - CVE-2016-2184 alsa: panic on invalid USB descriptors (rhbz 1317012 1317470) From 927ee75ff2bab9a0a8505ae5f14ee33a3d7fa7f6 Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Fri, 18 Mar 2016 10:37:29 -0400 Subject: [PATCH 021/275] CVE-2016-2188 iowarrior: oops on invalid USB descriptors (rhbz 1317018 1317467) --- ...x-oops-with-malicious-USB-descriptor.patch | 40 +++++++++++++++++++ kernel.spec | 4 ++ 2 files changed, 44 insertions(+) create mode 100644 USB-iowarrior-fix-oops-with-malicious-USB-descriptor.patch diff --git a/USB-iowarrior-fix-oops-with-malicious-USB-descriptor.patch b/USB-iowarrior-fix-oops-with-malicious-USB-descriptor.patch new file mode 100644 index 000000000..7df3af2b1 --- /dev/null +++ b/USB-iowarrior-fix-oops-with-malicious-USB-descriptor.patch @@ -0,0 +1,40 @@ +From 3620ebad64a327113bed34edefd45c3605086fc6 Mon Sep 17 00:00:00 2001 +From: Josh Boyer +Date: Mon, 14 Mar 2016 10:38:31 -0400 +Subject: [PATCH] USB: iowarrior: fix oops with malicious USB descriptors + +The iowarrior driver expects at least one valid endpoint. If given +malicious descriptors that specify 0 for the number of endpoints, +it will crash in the probe function. Ensure there is at least +one endpoint on the interface before using it. + +The full report of this issue can be found here: +http://seclists.org/bugtraq/2016/Mar/87 + +Reported-by: Ralf Spenneberg +Cc: stable +Signed-off-by: Josh Boyer +--- + drivers/usb/misc/iowarrior.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/drivers/usb/misc/iowarrior.c b/drivers/usb/misc/iowarrior.c +index c6bfd13f6c92..1950e87b4219 100644 +--- a/drivers/usb/misc/iowarrior.c ++++ b/drivers/usb/misc/iowarrior.c +@@ -787,6 +787,12 @@ static int iowarrior_probe(struct usb_interface *interface, + iface_desc = interface->cur_altsetting; + dev->product_id = le16_to_cpu(udev->descriptor.idProduct); + ++ if (iface_desc->desc.bNumEndpoints < 1) { ++ dev_err(&interface->dev, "Invalid number of endpoints\n"); ++ retval = -EINVAL; ++ goto error; ++ } ++ + /* set up the endpoint information */ + for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) { + endpoint = &iface_desc->endpoint[i].desc; +-- +2.5.0 + diff --git a/kernel.spec b/kernel.spec index d96a1a32c..592ab0639 100644 --- a/kernel.spec +++ b/kernel.spec @@ -635,6 +635,9 @@ Patch672: cypress_m8-add-sanity-checking.patch #CVE-2016-2186 rhbz 1317015 1317464 Patch673: USB-input-powermate-fix-oops-with-malicious-USB-desc.patch +#CVE-2016-2188 rhbz 1317018 1317467 +Patch674: USB-iowarrior-fix-oops-with-malicious-USB-descriptor.patch + # END OF PATCH DEFINITIONS %endif @@ -2157,6 +2160,7 @@ fi # %changelog * Fri Mar 18 2016 Josh Boyer +- CVE-2016-2188 iowarrior: oops on invalid USB descriptors (rhbz 1317018 1317467) - CVE-2016-2186 powermate: oops on invalid USB descriptors (rhbz 1317015 1317464) - CVE-2016-3137 cypress_m8: oops on invalid USB descriptors (rhbz 1317010 1316996) - CVE-2016-2184 alsa: panic on invalid USB descriptors (rhbz 1317012 1317470) From e4ce5f635ae69e96baf8949a501f35b6b4aa2611 Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Fri, 18 Mar 2016 10:50:37 -0400 Subject: [PATCH 022/275] CVE-2016-2185 ati_remote2: oops on invalid USB descriptors (rhbz 1317014 1317471) --- kernel.spec | 4 ++ ..._claim_interface-add-sanity-checking.patch | 39 +++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 usb_driver_claim_interface-add-sanity-checking.patch diff --git a/kernel.spec b/kernel.spec index 592ab0639..fd121a0e4 100644 --- a/kernel.spec +++ b/kernel.spec @@ -638,6 +638,9 @@ Patch673: USB-input-powermate-fix-oops-with-malicious-USB-desc.patch #CVE-2016-2188 rhbz 1317018 1317467 Patch674: USB-iowarrior-fix-oops-with-malicious-USB-descriptor.patch +#CVE-2016-2185 rhbz 1317014 1317471 +Patch675: usb_driver_claim_interface-add-sanity-checking.patch + # END OF PATCH DEFINITIONS %endif @@ -2160,6 +2163,7 @@ fi # %changelog * Fri Mar 18 2016 Josh Boyer +- CVE-2016-2185 ati_remote2: oops on invalid USB descriptors (rhbz 1317014 1317471) - CVE-2016-2188 iowarrior: oops on invalid USB descriptors (rhbz 1317018 1317467) - CVE-2016-2186 powermate: oops on invalid USB descriptors (rhbz 1317015 1317464) - CVE-2016-3137 cypress_m8: oops on invalid USB descriptors (rhbz 1317010 1316996) diff --git a/usb_driver_claim_interface-add-sanity-checking.patch b/usb_driver_claim_interface-add-sanity-checking.patch new file mode 100644 index 000000000..079ff03fd --- /dev/null +++ b/usb_driver_claim_interface-add-sanity-checking.patch @@ -0,0 +1,39 @@ +From de0784bdf6314b70c69416d8c576eb83237d5b1e Mon Sep 17 00:00:00 2001 +From: Oliver Neukum +Date: Wed, 16 Mar 2016 12:26:17 -0400 +Subject: [PATCH] usb_driver_claim_interface: add sanity checking + +Attacks that trick drivers into passing a NULL pointer +to usb_driver_claim_interface() using forged descriptors are +known. This thwarts them by sanity checking. + +Signed-off-by: Oliver Neukum +CC: stable@vger.kernel.org +--- + drivers/usb/core/driver.c | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +diff --git a/drivers/usb/core/driver.c b/drivers/usb/core/driver.c +index 6b5063e7943f..e2d242b68d4b 100644 +--- a/drivers/usb/core/driver.c ++++ b/drivers/usb/core/driver.c +@@ -500,11 +500,15 @@ static int usb_unbind_interface(struct device *dev) + int usb_driver_claim_interface(struct usb_driver *driver, + struct usb_interface *iface, void *priv) + { +- struct device *dev = &iface->dev; ++ struct device *dev; + struct usb_device *udev; + int retval = 0; + int lpm_disable_error; + ++ if (!iface) ++ return -ENODEV; ++ ++ dev = &iface->dev; + if (dev->driver) + return -EBUSY; + +-- +2.5.0 + From e9295a6761320b5b94b8beafba3cc8265bffe766 Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Fri, 18 Mar 2016 10:58:57 -0400 Subject: [PATCH 023/275] CVE-2016-3138 cdc_acm: oops on invalid USB descriptors (rhbz 1317010 1316204) --- cdc-acm-more-sanity-checking.patch | 33 ++++++++++++++++++++++++++++++ kernel.spec | 4 ++++ 2 files changed, 37 insertions(+) create mode 100644 cdc-acm-more-sanity-checking.patch diff --git a/cdc-acm-more-sanity-checking.patch b/cdc-acm-more-sanity-checking.patch new file mode 100644 index 000000000..99ad43416 --- /dev/null +++ b/cdc-acm-more-sanity-checking.patch @@ -0,0 +1,33 @@ +From e6a87f147002fa16adcbafebbc458ff90a463474 Mon Sep 17 00:00:00 2001 +From: Oliver Neukum +Date: Tue, 15 Mar 2016 10:14:04 +0100 +Subject: [PATCH] cdc-acm: more sanity checking + +An attack has become available which pretends to be a quirky +device circumventing normal sanity checks and crashes the kernel +by an insufficient number of interfaces. This patch adds a check +to the code path for quirky devices. + +Signed-off-by: Oliver Neukum +CC: stable@vger.kernel.org +--- + drivers/usb/class/cdc-acm.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c +index 26ca4f910cb0..a7732f80a912 100644 +--- a/drivers/usb/class/cdc-acm.c ++++ b/drivers/usb/class/cdc-acm.c +@@ -1113,6 +1113,9 @@ static int acm_probe(struct usb_interface *intf, + if (quirks == NO_UNION_NORMAL) { + data_interface = usb_ifnum_to_if(usb_dev, 1); + control_interface = usb_ifnum_to_if(usb_dev, 0); ++ /* we would crash */ ++ if (!data_interface || !control_interface) ++ return -ENODEV; + goto skip_normal_probe; + } + +-- +2.5.0 + diff --git a/kernel.spec b/kernel.spec index fd121a0e4..5bf3cfea7 100644 --- a/kernel.spec +++ b/kernel.spec @@ -641,6 +641,9 @@ Patch674: USB-iowarrior-fix-oops-with-malicious-USB-descriptor.patch #CVE-2016-2185 rhbz 1317014 1317471 Patch675: usb_driver_claim_interface-add-sanity-checking.patch +#CVE-2016-3138 rhbz 1317010 1316204 +Patch676: cdc-acm-more-sanity-checking.patch + # END OF PATCH DEFINITIONS %endif @@ -2163,6 +2166,7 @@ fi # %changelog * Fri Mar 18 2016 Josh Boyer +- CVE-2016-3138 cdc_acm: oops on invalid USB descriptors (rhbz 1317010 1316204) - CVE-2016-2185 ati_remote2: oops on invalid USB descriptors (rhbz 1317014 1317471) - CVE-2016-2188 iowarrior: oops on invalid USB descriptors (rhbz 1317018 1317467) - CVE-2016-2186 powermate: oops on invalid USB descriptors (rhbz 1317015 1317464) From 855e4071a20e905fc58c1f857212b8e3b94dc5b7 Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Fri, 18 Mar 2016 11:05:14 -0400 Subject: [PATCH 024/275] CVE-2016-3140 digi_acceleport: oops on invalid USB descriptors (rhbz 1317010 1316995) --- ...do-sanity-checking-for-the-number-of.patch | 34 +++++++++++++++++++ kernel.spec | 4 +++ 2 files changed, 38 insertions(+) create mode 100644 digi_acceleport-do-sanity-checking-for-the-number-of.patch diff --git a/digi_acceleport-do-sanity-checking-for-the-number-of.patch b/digi_acceleport-do-sanity-checking-for-the-number-of.patch new file mode 100644 index 000000000..2bbae94b7 --- /dev/null +++ b/digi_acceleport-do-sanity-checking-for-the-number-of.patch @@ -0,0 +1,34 @@ +From e9c2a3972496927631a1a98fef43e9538e9fd5d5 Mon Sep 17 00:00:00 2001 +From: Oliver Neukum +Date: Mon, 14 Mar 2016 15:53:38 +0100 +Subject: [PATCH] digi_acceleport: do sanity checking for the number of ports + +The driver can be crashed with devices that expose crafted +descriptors with too few endpoints. +See: +http://seclists.org/bugtraq/2016/Mar/61 + +Signed-off-by: Oliver Neukum +--- + drivers/usb/serial/digi_acceleport.c | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/drivers/usb/serial/digi_acceleport.c b/drivers/usb/serial/digi_acceleport.c +index 12b0e67473ba..c4d4d4547d40 100644 +--- a/drivers/usb/serial/digi_acceleport.c ++++ b/drivers/usb/serial/digi_acceleport.c +@@ -1260,6 +1260,11 @@ static int digi_startup(struct usb_serial *serial) + + spin_lock_init(&serial_priv->ds_serial_lock); + serial_priv->ds_oob_port_num = serial->type->num_ports; ++ if (!(serial_priv->ds_oob_port_num == 2 && serial->type == &digi_acceleport_2_device) ++ && !(serial_priv->ds_oob_port_num == 4 && serial->type == &digi_acceleport_4_device)) { ++ kfree(serial_priv); ++ return -EINVAL; ++ } + serial_priv->ds_oob_port = serial->port[serial_priv->ds_oob_port_num]; + + ret = digi_port_init(serial_priv->ds_oob_port, +-- +2.5.0 + diff --git a/kernel.spec b/kernel.spec index 5bf3cfea7..01036fc6f 100644 --- a/kernel.spec +++ b/kernel.spec @@ -644,6 +644,9 @@ Patch675: usb_driver_claim_interface-add-sanity-checking.patch #CVE-2016-3138 rhbz 1317010 1316204 Patch676: cdc-acm-more-sanity-checking.patch +#CVE-2016-3140 rhbz 1317010 1316995 +Patch677: digi_acceleport-do-sanity-checking-for-the-number-of.patch + # END OF PATCH DEFINITIONS %endif @@ -2166,6 +2169,7 @@ fi # %changelog * Fri Mar 18 2016 Josh Boyer +- CVE-2016-3140 digi_acceleport: oops on invalid USB descriptors (rhbz 1317010 1316995) - CVE-2016-3138 cdc_acm: oops on invalid USB descriptors (rhbz 1317010 1316204) - CVE-2016-2185 ati_remote2: oops on invalid USB descriptors (rhbz 1317014 1317471) - CVE-2016-2188 iowarrior: oops on invalid USB descriptors (rhbz 1317018 1317467) From 65cfe57f36b1de1b938ffe21e0125e53bb27d71a Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Fri, 18 Mar 2016 11:12:40 -0400 Subject: [PATCH 025/275] ims-pcu: sanity checking on missing interfaces --- ...ity-check-against-missing-interfaces.patch | 39 +++++++++++++++++++ kernel.spec | 3 ++ 2 files changed, 42 insertions(+) create mode 100644 ims-pcu-sanity-check-against-missing-interfaces.patch diff --git a/ims-pcu-sanity-check-against-missing-interfaces.patch b/ims-pcu-sanity-check-against-missing-interfaces.patch new file mode 100644 index 000000000..827a2b7ee --- /dev/null +++ b/ims-pcu-sanity-check-against-missing-interfaces.patch @@ -0,0 +1,39 @@ +From a4200b7eb26271108586d3a7cf34a2f16d460e48 Mon Sep 17 00:00:00 2001 +From: Oliver Neukum +Date: Thu, 17 Mar 2016 15:10:47 +0100 +Subject: [PATCH] ims-pcu: sanity check against missing interfaces + +A malicious device missing interface can make the driver oops. +Add sanity checking. + +Signed-off-by: Oliver Neukum +CC: stable@vger.kernel.org +--- + drivers/input/misc/ims-pcu.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/drivers/input/misc/ims-pcu.c b/drivers/input/misc/ims-pcu.c +index ac1fa5f44580..9c0ea36913b4 100644 +--- a/drivers/input/misc/ims-pcu.c ++++ b/drivers/input/misc/ims-pcu.c +@@ -1663,6 +1663,8 @@ static int ims_pcu_parse_cdc_data(struct usb_interface *intf, struct ims_pcu *pc + + pcu->ctrl_intf = usb_ifnum_to_if(pcu->udev, + union_desc->bMasterInterface0); ++ if (!pcu->ctrl_intf) ++ return -EINVAL; + + alt = pcu->ctrl_intf->cur_altsetting; + pcu->ep_ctrl = &alt->endpoint[0].desc; +@@ -1670,6 +1672,8 @@ static int ims_pcu_parse_cdc_data(struct usb_interface *intf, struct ims_pcu *pc + + pcu->data_intf = usb_ifnum_to_if(pcu->udev, + union_desc->bSlaveInterface0); ++ if (!pcu->data_intf) ++ return -EINVAL; + + alt = pcu->data_intf->cur_altsetting; + if (alt->desc.bNumEndpoints != 2) { +-- +2.5.0 + diff --git a/kernel.spec b/kernel.spec index 01036fc6f..9c7d5aa4f 100644 --- a/kernel.spec +++ b/kernel.spec @@ -647,6 +647,8 @@ Patch676: cdc-acm-more-sanity-checking.patch #CVE-2016-3140 rhbz 1317010 1316995 Patch677: digi_acceleport-do-sanity-checking-for-the-number-of.patch +Patch678: ims-pcu-sanity-check-against-missing-interfaces.patch + # END OF PATCH DEFINITIONS %endif @@ -2169,6 +2171,7 @@ fi # %changelog * Fri Mar 18 2016 Josh Boyer +- ims-pcu: sanity checking on missing interfaces - CVE-2016-3140 digi_acceleport: oops on invalid USB descriptors (rhbz 1317010 1316995) - CVE-2016-3138 cdc_acm: oops on invalid USB descriptors (rhbz 1317010 1316204) - CVE-2016-2185 ati_remote2: oops on invalid USB descriptors (rhbz 1317014 1317471) From d35230fb5e8ed9812597ccfb87beb10bde0870bf Mon Sep 17 00:00:00 2001 From: Peter Robinson Date: Fri, 18 Mar 2016 20:59:19 +0000 Subject: [PATCH 026/275] Various ARMv7 and aarch64 fixes - Upstream fix for stmmac driver regressions (AllWinner Gb NICs) - regression from rc7 - Update various ARM device support patches - General ARM updates --- ...uart-support-extra-DT-bits-initial-r.patch | 2155 +++++++++++++++++ config-armv7-generic | 10 +- ...ch => geekbox-v4-device-tree-support.patch | 77 +- kernel.spec | 21 +- ...mac-Fix-eth0-No-PHY-found-regression.patch | 87 + stmmac-fix-MDIO-settings.patch | 235 ++ 6 files changed, 2554 insertions(+), 31 deletions(-) create mode 100644 bcm283x-add-aux-uart-support-extra-DT-bits-initial-r.patch rename Geekbox-device-tree-support.patch => geekbox-v4-device-tree-support.patch (86%) create mode 100644 revert-stmmac-Fix-eth0-No-PHY-found-regression.patch create mode 100644 stmmac-fix-MDIO-settings.patch diff --git a/bcm283x-add-aux-uart-support-extra-DT-bits-initial-r.patch b/bcm283x-add-aux-uart-support-extra-DT-bits-initial-r.patch new file mode 100644 index 000000000..beaa6bd0f --- /dev/null +++ b/bcm283x-add-aux-uart-support-extra-DT-bits-initial-r.patch @@ -0,0 +1,2155 @@ +From 59fb5b800868d984e836ab4a38d8ba1598dc675a Mon Sep 17 00:00:00 2001 +From: Peter Robinson +Date: Fri, 18 Mar 2016 19:18:51 +0000 +Subject: [PATCH] bcm283x: add aux uart support, extra DT bits, initial rpi3, + VC4 fixes and VC4 DT bindings + +--- + .../devicetree/bindings/arm/bcm/brcm,bcm2835.txt | 4 + + .../bindings/serial/brcm,bcm2835-aux-uart.txt | 18 + + arch/arm/boot/dts/Makefile | 4 +- + arch/arm/boot/dts/bcm2835-rpi-a-plus.dts | 4 + + arch/arm/boot/dts/bcm2835-rpi-a.dts | 28 + + arch/arm/boot/dts/bcm2835-rpi-b-plus.dts | 4 + + arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts | 4 + + arch/arm/boot/dts/bcm2835-rpi-b.dts | 4 + + arch/arm/boot/dts/bcm2835-rpi.dtsi | 25 + + arch/arm/boot/dts/bcm2836-rpi-2-b.dts | 4 + + arch/arm/boot/dts/bcm2837-rpi-3-b.dts | 22 + + arch/arm/boot/dts/bcm2837.dtsi | 68 +++ + arch/arm/boot/dts/bcm283x.dtsi | 90 ++- + drivers/clk/bcm/clk-bcm2835.c | 12 +- + drivers/gpu/drm/vc4/vc4_bo.c | 7 +- + drivers/gpu/drm/vc4/vc4_crtc.c | 134 +++-- + drivers/gpu/drm/vc4/vc4_drv.h | 12 +- + drivers/gpu/drm/vc4/vc4_hdmi.c | 42 +- + drivers/gpu/drm/vc4/vc4_hvs.c | 97 ++++ + drivers/gpu/drm/vc4/vc4_kms.c | 9 + + drivers/gpu/drm/vc4/vc4_plane.c | 603 +++++++++++++++++++-- + drivers/gpu/drm/vc4/vc4_regs.h | 120 +++- + drivers/gpu/drm/vc4/vc4_v3d.c | 1 + + drivers/tty/serial/8250/8250_bcm2835aux.c | 146 +++++ + drivers/tty/serial/8250/Kconfig | 24 + + drivers/tty/serial/8250/Makefile | 1 + + 26 files changed, 1365 insertions(+), 122 deletions(-) + create mode 100644 Documentation/devicetree/bindings/serial/brcm,bcm2835-aux-uart.txt + create mode 100644 arch/arm/boot/dts/bcm2835-rpi-a.dts + create mode 100644 arch/arm/boot/dts/bcm2837-rpi-3-b.dts + create mode 100644 arch/arm/boot/dts/bcm2837.dtsi + create mode 100644 drivers/tty/serial/8250/8250_bcm2835aux.c + +diff --git a/Documentation/devicetree/bindings/arm/bcm/brcm,bcm2835.txt b/Documentation/devicetree/bindings/arm/bcm/brcm,bcm2835.txt +index 11d3056..6ffe087 100644 +--- a/Documentation/devicetree/bindings/arm/bcm/brcm,bcm2835.txt ++++ b/Documentation/devicetree/bindings/arm/bcm/brcm,bcm2835.txt +@@ -30,6 +30,10 @@ Raspberry Pi 2 Model B + Required root node properties: + compatible = "raspberrypi,2-model-b", "brcm,bcm2836"; + ++Raspberry Pi 3 Model B ++Required root node properties: ++compatible = "raspberrypi,3-model-b", "brcm,bcm2837"; ++ + Raspberry Pi Compute Module + Required root node properties: + compatible = "raspberrypi,compute-module", "brcm,bcm2835"; +diff --git a/Documentation/devicetree/bindings/serial/brcm,bcm2835-aux-uart.txt b/Documentation/devicetree/bindings/serial/brcm,bcm2835-aux-uart.txt +new file mode 100644 +index 0000000..b5cc629 +--- /dev/null ++++ b/Documentation/devicetree/bindings/serial/brcm,bcm2835-aux-uart.txt +@@ -0,0 +1,18 @@ ++* BCM2835 AUXILIAR UART ++ ++Required properties: ++ ++- compatible: "brcm,bcm2835-aux-uart" ++- reg: The base address of the UART register bank. ++- interrupts: A single interrupt specifier. ++- clocks: Clock driving the hardware; used to figure out the baud rate ++ divisor. ++ ++Example: ++ ++ uart1: serial@7e215040 { ++ compatible = "brcm,bcm2835-aux-uart"; ++ reg = <0x7e215040 0x40>; ++ interrupts = <1 29>; ++ clocks = <&aux BCM2835_AUX_CLOCK_UART>; ++ }; +diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile +index a4a6d70..a8a0767 100644 +--- a/arch/arm/boot/dts/Makefile ++++ b/arch/arm/boot/dts/Makefile +@@ -60,10 +60,12 @@ dtb-$(CONFIG_ARCH_AXXIA) += \ + axm5516-amarillo.dtb + dtb-$(CONFIG_ARCH_BCM2835) += \ + bcm2835-rpi-b.dtb \ ++ bcm2835-rpi-a.dtb \ + bcm2835-rpi-b-rev2.dtb \ + bcm2835-rpi-b-plus.dtb \ + bcm2835-rpi-a-plus.dtb \ +- bcm2836-rpi-2-b.dtb ++ bcm2836-rpi-2-b.dtb \ ++ bcm2837-rpi-3-b.dtb + dtb-$(CONFIG_ARCH_BCM_5301X) += \ + bcm4708-asus-rt-ac56u.dtb \ + bcm4708-asus-rt-ac68u.dtb \ +diff --git a/arch/arm/boot/dts/bcm2835-rpi-a-plus.dts b/arch/arm/boot/dts/bcm2835-rpi-a-plus.dts +index 228614f..35ff4e7a 100644 +--- a/arch/arm/boot/dts/bcm2835-rpi-a-plus.dts ++++ b/arch/arm/boot/dts/bcm2835-rpi-a-plus.dts +@@ -29,3 +29,7 @@ + brcm,function = ; + }; + }; ++ ++&hdmi { ++ hpd-gpios = <&gpio 46 GPIO_ACTIVE_LOW>; ++}; +diff --git a/arch/arm/boot/dts/bcm2835-rpi-a.dts b/arch/arm/boot/dts/bcm2835-rpi-a.dts +new file mode 100644 +index 0000000..306a84e +--- /dev/null ++++ b/arch/arm/boot/dts/bcm2835-rpi-a.dts +@@ -0,0 +1,28 @@ ++/dts-v1/; ++#include "bcm2835.dtsi" ++#include "bcm2835-rpi.dtsi" ++ ++/ { ++ compatible = "raspberrypi,model-a", "brcm,bcm2835"; ++ model = "Raspberry Pi Model A"; ++ ++ leds { ++ act { ++ gpios = <&gpio 16 1>; ++ }; ++ }; ++}; ++ ++&gpio { ++ pinctrl-0 = <&gpioout &alt0 &i2s_alt2 &alt3>; ++ ++ /* I2S interface */ ++ i2s_alt2: i2s_alt2 { ++ brcm,pins = <28 29 30 31>; ++ brcm,function = ; ++ }; ++}; ++ ++&hdmi { ++ hpd-gpios = <&gpio 46 GPIO_ACTIVE_HIGH>; ++}; +diff --git a/arch/arm/boot/dts/bcm2835-rpi-b-plus.dts b/arch/arm/boot/dts/bcm2835-rpi-b-plus.dts +index ef54050..57d313b 100644 +--- a/arch/arm/boot/dts/bcm2835-rpi-b-plus.dts ++++ b/arch/arm/boot/dts/bcm2835-rpi-b-plus.dts +@@ -29,3 +29,7 @@ + brcm,function = ; + }; + }; ++ ++&hdmi { ++ hpd-gpios = <&gpio 46 GPIO_ACTIVE_LOW>; ++}; +diff --git a/arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts b/arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts +index 86f1f2f..cf2774e 100644 +--- a/arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts ++++ b/arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts +@@ -22,3 +22,7 @@ + brcm,function = ; + }; + }; ++ ++&hdmi { ++ hpd-gpios = <&gpio 46 GPIO_ACTIVE_LOW>; ++}; +diff --git a/arch/arm/boot/dts/bcm2835-rpi-b.dts b/arch/arm/boot/dts/bcm2835-rpi-b.dts +index 4859e9d..8b15f9c 100644 +--- a/arch/arm/boot/dts/bcm2835-rpi-b.dts ++++ b/arch/arm/boot/dts/bcm2835-rpi-b.dts +@@ -16,3 +16,7 @@ + &gpio { + pinctrl-0 = <&gpioout &alt0 &alt3>; + }; ++ ++&hdmi { ++ hpd-gpios = <&gpio 46 GPIO_ACTIVE_HIGH>; ++}; +diff --git a/arch/arm/boot/dts/bcm2835-rpi.dtsi b/arch/arm/boot/dts/bcm2835-rpi.dtsi +index 3afb9fe..40510df 100644 +--- a/arch/arm/boot/dts/bcm2835-rpi.dtsi ++++ b/arch/arm/boot/dts/bcm2835-rpi.dtsi +@@ -1,3 +1,5 @@ ++#include ++ + / { + memory { + reg = <0 0x10000000>; +@@ -18,6 +20,12 @@ + compatible = "raspberrypi,bcm2835-firmware"; + mboxes = <&mailbox>; + }; ++ ++ power: power { ++ compatible = "raspberrypi,bcm2835-power"; ++ firmware = <&firmware>; ++ #power-domain-cells = <1>; ++ }; + }; + }; + +@@ -58,3 +66,20 @@ + status = "okay"; + bus-width = <4>; + }; ++ ++&usb { ++ power-domains = <&power RPI_POWER_DOMAIN_USB>; ++}; ++ ++&pwm { ++ status = "okay"; ++}; ++ ++&v3d { ++ power-domains = <&power RPI_POWER_DOMAIN_V3D>; ++}; ++ ++&hdmi { ++ power-domains = <&power RPI_POWER_DOMAIN_HDMI>; ++ status = "okay"; ++}; +diff --git a/arch/arm/boot/dts/bcm2836-rpi-2-b.dts b/arch/arm/boot/dts/bcm2836-rpi-2-b.dts +index ff94666..c4743f4 100644 +--- a/arch/arm/boot/dts/bcm2836-rpi-2-b.dts ++++ b/arch/arm/boot/dts/bcm2836-rpi-2-b.dts +@@ -33,3 +33,7 @@ + brcm,function = ; + }; + }; ++ ++&hdmi { ++ hpd-gpios = <&gpio 46 GPIO_ACTIVE_LOW>; ++}; +diff --git a/arch/arm/boot/dts/bcm2837-rpi-3-b.dts b/arch/arm/boot/dts/bcm2837-rpi-3-b.dts +new file mode 100644 +index 0000000..5e8eafd +--- /dev/null ++++ b/arch/arm/boot/dts/bcm2837-rpi-3-b.dts +@@ -0,0 +1,22 @@ ++/dts-v1/; ++#include "bcm2837.dtsi" ++#include "bcm2835-rpi.dtsi" ++ ++/ { ++ compatible = "raspberrypi,3-model-b", "brcm,bcm2837"; ++ model = "Raspberry Pi 3 Model B"; ++ ++ memory { ++ reg = <0 0x40000000>; ++ }; ++}; ++ ++&gpio { ++ pinctrl-0 = <&gpioout &alt0 &i2s_alt0 &alt3>; ++ ++ /* I2S interface */ ++ i2s_alt0: i2s_alt0 { ++ brcm,pins = <28 29 30 31>; ++ brcm,function = ; ++ }; ++}; +diff --git a/arch/arm/boot/dts/bcm2837.dtsi b/arch/arm/boot/dts/bcm2837.dtsi +new file mode 100644 +index 0000000..2f36722 +--- /dev/null ++++ b/arch/arm/boot/dts/bcm2837.dtsi +@@ -0,0 +1,68 @@ ++#include "bcm283x.dtsi" ++ ++/ { ++ compatible = "brcm,bcm2836"; ++ ++ soc { ++ ranges = <0x7e000000 0x3f000000 0x1000000>, ++ <0x40000000 0x40000000 0x00001000>; ++ dma-ranges = <0xc0000000 0x00000000 0x3f000000>; ++ ++ local_intc: local_intc { ++ compatible = "brcm,bcm2836-l1-intc"; ++ reg = <0x40000000 0x100>; ++ interrupt-controller; ++ #interrupt-cells = <1>; ++ interrupt-parent = <&local_intc>; ++ }; ++ }; ++ ++ timer { ++ compatible = "arm,armv7-timer"; ++ interrupt-parent = <&local_intc>; ++ interrupts = <0>, // PHYS_SECURE_PPI ++ <1>, // PHYS_NONSECURE_PPI ++ <3>, // VIRT_PPI ++ <2>; // HYP_PPI ++ always-on; ++ }; ++ ++ cpus: cpus { ++ #address-cells = <1>; ++ #size-cells = <0>; ++ ++ cpu0: cpu@0 { ++ device_type = "cpu"; ++ compatible = "arm,cortex-a53"; ++ reg = <0>; ++ }; ++ ++ cpu1: cpu@1 { ++ device_type = "cpu"; ++ compatible = "arm,cortex-a53"; ++ reg = <1>; ++ }; ++ ++ cpu2: cpu@2 { ++ device_type = "cpu"; ++ compatible = "arm,cortex-a53"; ++ reg = <2>; ++ }; ++ ++ cpu3: cpu@3 { ++ device_type = "cpu"; ++ compatible = "arm,cortex-a53"; ++ reg = <3>; ++ }; ++ }; ++}; ++ ++/* Make the BCM2835-style global interrupt controller be a child of the ++ * CPU-local interrupt controller. ++ */ ++&intc { ++ compatible = "brcm,bcm2836-armctrl-ic"; ++ reg = <0x7e00b200 0x200>; ++ interrupt-parent = <&local_intc>; ++ interrupts = <8>; ++}; +diff --git a/arch/arm/boot/dts/bcm283x.dtsi b/arch/arm/boot/dts/bcm283x.dtsi +index 971e741..31cc2f2 100644 +--- a/arch/arm/boot/dts/bcm283x.dtsi ++++ b/arch/arm/boot/dts/bcm283x.dtsi +@@ -1,5 +1,7 @@ + #include + #include ++#include ++#include + #include "skeleton.dtsi" + + /* This include file covers the common peripherals and configuration between +@@ -111,7 +113,7 @@ + #interrupt-cells = <2>; + }; + +- uart0: uart@7e201000 { ++ uart0: serial@7e201000 { + compatible = "brcm,bcm2835-pl011", "arm,pl011", "arm,primecell"; + reg = <0x7e201000 0x1000>; + interrupts = <2 25>; +@@ -152,6 +154,18 @@ + status = "disabled"; + }; + ++ pixelvalve@7e206000 { ++ compatible = "brcm,bcm2835-pixelvalve0"; ++ reg = <0x7e206000 0x100>; ++ interrupts = <2 13>; /* pwa0 */ ++ }; ++ ++ pixelvalve@7e207000 { ++ compatible = "brcm,bcm2835-pixelvalve1"; ++ reg = <0x7e207000 0x100>; ++ interrupts = <2 14>; /* pwa1 */ ++ }; ++ + aux: aux@0x7e215000 { + compatible = "brcm,bcm2835-aux"; + #clock-cells = <1>; +@@ -159,6 +173,44 @@ + clocks = <&clocks BCM2835_CLOCK_VPU>; + }; + ++ uart1: serial@7e215040 { ++ compatible = "brcm,bcm2835-aux-uart"; ++ reg = <0x7e215040 0x40>; ++ interrupts = <1 29>; ++ clocks = <&aux BCM2835_AUX_CLOCK_UART>; ++ status = "disabled"; ++ }; ++ ++ spi1: spi@7e215080 { ++ compatible = "brcm,bcm2835-aux-spi"; ++ reg = <0x7e215080 0x40>; ++ interrupts = <1 29>; ++ clocks = <&aux BCM2835_AUX_CLOCK_SPI1>; ++ #address-cells = <1>; ++ #size-cells = <0>; ++ status = "disabled"; ++ }; ++ ++ spi2: spi@7e2150c0 { ++ compatible = "brcm,bcm2835-aux-spi"; ++ reg = <0x7e2150c0 0x40>; ++ interrupts = <1 29>; ++ clocks = <&aux BCM2835_AUX_CLOCK_SPI2>; ++ #address-cells = <1>; ++ #size-cells = <0>; ++ status = "disabled"; ++ }; ++ ++ pwm: pwm@7e20c000 { ++ compatible = "brcm,bcm2835-pwm"; ++ reg = <0x7e20c000 0x28>; ++ clocks = <&clocks BCM2835_CLOCK_PWM>; ++ assigned-clocks = <&clocks BCM2835_CLOCK_PWM>; ++ assigned-clock-rates = <10000000>; ++ #pwm-cells = <2>; ++ status = "disabled"; ++ }; ++ + sdhci: sdhci@7e300000 { + compatible = "brcm,bcm2835-sdhci"; + reg = <0x7e300000 0x100>; +@@ -167,6 +219,12 @@ + status = "disabled"; + }; + ++ hvs@7e400000 { ++ compatible = "brcm,bcm2835-hvs"; ++ reg = <0x7e400000 0x6000>; ++ interrupts = <2 1>; ++ }; ++ + i2c1: i2c@7e804000 { + compatible = "brcm,bcm2835-i2c"; + reg = <0x7e804000 0x1000>; +@@ -187,11 +245,39 @@ + status = "disabled"; + }; + +- usb@7e980000 { ++ pixelvalve@7e807000 { ++ compatible = "brcm,bcm2835-pixelvalve2"; ++ reg = <0x7e807000 0x100>; ++ interrupts = <2 10>; /* pixelvalve */ ++ }; ++ ++ hdmi: hdmi@7e902000 { ++ compatible = "brcm,bcm2835-hdmi"; ++ reg = <0x7e902000 0x600>, ++ <0x7e808000 0x100>; ++ interrupts = <2 8>, <2 9>; ++ ddc = <&i2c2>; ++ clocks = <&clocks BCM2835_PLLH_PIX>, ++ <&clocks BCM2835_CLOCK_HSM>; ++ clock-names = "pixel", "hdmi"; ++ status = "disabled"; ++ }; ++ ++ usb: usb@7e980000 { + compatible = "brcm,bcm2835-usb"; + reg = <0x7e980000 0x10000>; + interrupts = <1 9>; + }; ++ ++ v3d: v3d@7ec00000 { ++ compatible = "brcm,bcm2835-v3d"; ++ reg = <0x7ec00000 0x1000>; ++ interrupts = <1 10>; ++ }; ++ ++ vc4: gpu { ++ compatible = "brcm,bcm2835-vc4"; ++ }; + }; + + clocks { +diff --git a/drivers/clk/bcm/clk-bcm2835.c b/drivers/clk/bcm/clk-bcm2835.c +index 015e687..9f4df8f 100644 +--- a/drivers/clk/bcm/clk-bcm2835.c ++++ b/drivers/clk/bcm/clk-bcm2835.c +@@ -1107,13 +1107,15 @@ static int bcm2835_pll_divider_set_rate(struct clk_hw *hw, + struct bcm2835_pll_divider *divider = bcm2835_pll_divider_from_hw(hw); + struct bcm2835_cprman *cprman = divider->cprman; + const struct bcm2835_pll_divider_data *data = divider->data; +- u32 cm; +- int ret; ++ u32 cm, div, max_div = 1 << A2W_PLL_DIV_BITS; + +- ret = clk_divider_ops.set_rate(hw, rate, parent_rate); +- if (ret) +- return ret; ++ div = DIV_ROUND_UP_ULL(parent_rate, rate); ++ ++ div = min(div, max_div); ++ if (div == max_div) ++ div = 0; + ++ cprman_write(cprman, data->a2w_reg, div); + cm = cprman_read(cprman, data->cm_reg); + cprman_write(cprman, data->cm_reg, cm | data->load_mask); + cprman_write(cprman, data->cm_reg, cm & ~data->load_mask); +diff --git a/drivers/gpu/drm/vc4/vc4_bo.c b/drivers/gpu/drm/vc4/vc4_bo.c +index 22278bc..ac8eafe 100644 +--- a/drivers/gpu/drm/vc4/vc4_bo.c ++++ b/drivers/gpu/drm/vc4/vc4_bo.c +@@ -499,11 +499,12 @@ vc4_create_shader_bo_ioctl(struct drm_device *dev, void *data, + if (IS_ERR(bo)) + return PTR_ERR(bo); + +- ret = copy_from_user(bo->base.vaddr, ++ if (copy_from_user(bo->base.vaddr, + (void __user *)(uintptr_t)args->data, +- args->size); +- if (ret != 0) ++ args->size)) { ++ ret = -EFAULT; + goto fail; ++ } + /* Clear the rest of the memory from allocating from the BO + * cache. + */ +diff --git a/drivers/gpu/drm/vc4/vc4_crtc.c b/drivers/gpu/drm/vc4/vc4_crtc.c +index 018145e..9032c06 100644 +--- a/drivers/gpu/drm/vc4/vc4_crtc.c ++++ b/drivers/gpu/drm/vc4/vc4_crtc.c +@@ -49,22 +49,27 @@ struct vc4_crtc { + /* Which HVS channel we're using for our CRTC. */ + int channel; + +- /* Pointer to the actual hardware display list memory for the +- * crtc. +- */ +- u32 __iomem *dlist; +- +- u32 dlist_size; /* in dwords */ +- + struct drm_pending_vblank_event *event; + }; + ++struct vc4_crtc_state { ++ struct drm_crtc_state base; ++ /* Dlist area for this CRTC configuration. */ ++ struct drm_mm_node mm; ++}; ++ + static inline struct vc4_crtc * + to_vc4_crtc(struct drm_crtc *crtc) + { + return (struct vc4_crtc *)crtc; + } + ++static inline struct vc4_crtc_state * ++to_vc4_crtc_state(struct drm_crtc_state *crtc_state) ++{ ++ return (struct vc4_crtc_state *)crtc_state; ++} ++ + struct vc4_crtc_data { + /* Which channel of the HVS this pixelvalve sources from. */ + int hvs_channel; +@@ -83,7 +88,7 @@ static const struct { + } crtc_regs[] = { + CRTC_REG(PV_CONTROL), + CRTC_REG(PV_V_CONTROL), +- CRTC_REG(PV_VSYNCD), ++ CRTC_REG(PV_VSYNCD_EVEN), + CRTC_REG(PV_HORZA), + CRTC_REG(PV_HORZB), + CRTC_REG(PV_VERTA), +@@ -183,6 +188,8 @@ static int vc4_get_clock_select(struct drm_crtc *crtc) + + static void vc4_crtc_mode_set_nofb(struct drm_crtc *crtc) + { ++ struct drm_device *dev = crtc->dev; ++ struct vc4_dev *vc4 = to_vc4_dev(dev); + struct vc4_crtc *vc4_crtc = to_vc4_crtc(crtc); + struct drm_crtc_state *state = crtc->state; + struct drm_display_mode *mode = &state->adjusted_mode; +@@ -212,6 +219,16 @@ static void vc4_crtc_mode_set_nofb(struct drm_crtc *crtc) + PV_HORZB_HFP) | + VC4_SET_FIELD(mode->hdisplay, PV_HORZB_HACTIVE)); + ++ CRTC_WRITE(PV_VERTA, ++ VC4_SET_FIELD(mode->vtotal - mode->vsync_end, ++ PV_VERTA_VBP) | ++ VC4_SET_FIELD(mode->vsync_end - mode->vsync_start, ++ PV_VERTA_VSYNC)); ++ CRTC_WRITE(PV_VERTB, ++ VC4_SET_FIELD(mode->vsync_start - mode->vdisplay, ++ PV_VERTB_VFP) | ++ VC4_SET_FIELD(vactive, PV_VERTB_VACTIVE)); ++ + if (interlace) { + CRTC_WRITE(PV_VERTA_EVEN, + VC4_SET_FIELD(mode->vtotal - mode->vsync_end - 1, +@@ -241,6 +258,10 @@ static void vc4_crtc_mode_set_nofb(struct drm_crtc *crtc) + PV_CONTROL_FIFO_CLR | + PV_CONTROL_EN); + ++ HVS_WRITE(SCALER_DISPBKGNDX(vc4_crtc->channel), ++ SCALER_DISPBKGND_AUTOHS | ++ (interlace ? SCALER_DISPBKGND_INTERLACE : 0)); ++ + if (debug_dump_regs) { + DRM_INFO("CRTC %d regs after:\n", drm_crtc_index(crtc)); + vc4_crtc_dump_regs(vc4_crtc); +@@ -319,11 +340,13 @@ static void vc4_crtc_enable(struct drm_crtc *crtc) + static int vc4_crtc_atomic_check(struct drm_crtc *crtc, + struct drm_crtc_state *state) + { ++ struct vc4_crtc_state *vc4_state = to_vc4_crtc_state(state); + struct drm_device *dev = crtc->dev; + struct vc4_dev *vc4 = to_vc4_dev(dev); + struct drm_plane *plane; +- struct vc4_crtc *vc4_crtc = to_vc4_crtc(crtc); ++ unsigned long flags; + u32 dlist_count = 0; ++ int ret; + + /* The pixelvalve can only feed one encoder (and encoders are + * 1:1 with connectors.) +@@ -346,18 +369,12 @@ static int vc4_crtc_atomic_check(struct drm_crtc *crtc, + + dlist_count++; /* Account for SCALER_CTL0_END. */ + +- if (!vc4_crtc->dlist || dlist_count > vc4_crtc->dlist_size) { +- vc4_crtc->dlist = ((u32 __iomem *)vc4->hvs->dlist + +- HVS_BOOTLOADER_DLIST_END); +- vc4_crtc->dlist_size = ((SCALER_DLIST_SIZE >> 2) - +- HVS_BOOTLOADER_DLIST_END); +- +- if (dlist_count > vc4_crtc->dlist_size) { +- DRM_DEBUG_KMS("dlist too large for CRTC (%d > %d).\n", +- dlist_count, vc4_crtc->dlist_size); +- return -EINVAL; +- } +- } ++ spin_lock_irqsave(&vc4->hvs->mm_lock, flags); ++ ret = drm_mm_insert_node(&vc4->hvs->dlist_mm, &vc4_state->mm, ++ dlist_count, 1, 0); ++ spin_unlock_irqrestore(&vc4->hvs->mm_lock, flags); ++ if (ret) ++ return ret; + + return 0; + } +@@ -368,47 +385,29 @@ static void vc4_crtc_atomic_flush(struct drm_crtc *crtc, + struct drm_device *dev = crtc->dev; + struct vc4_dev *vc4 = to_vc4_dev(dev); + struct vc4_crtc *vc4_crtc = to_vc4_crtc(crtc); ++ struct vc4_crtc_state *vc4_state = to_vc4_crtc_state(crtc->state); + struct drm_plane *plane; + bool debug_dump_regs = false; +- u32 __iomem *dlist_next = vc4_crtc->dlist; ++ u32 __iomem *dlist_start = vc4->hvs->dlist + vc4_state->mm.start; ++ u32 __iomem *dlist_next = dlist_start; + + if (debug_dump_regs) { + DRM_INFO("CRTC %d HVS before:\n", drm_crtc_index(crtc)); + vc4_hvs_dump_state(dev); + } + +- /* Copy all the active planes' dlist contents to the hardware dlist. +- * +- * XXX: If the new display list was large enough that it +- * overlapped a currently-read display list, we need to do +- * something like disable scanout before putting in the new +- * list. For now, we're safe because we only have the two +- * planes. +- */ ++ /* Copy all the active planes' dlist contents to the hardware dlist. */ + drm_atomic_crtc_for_each_plane(plane, crtc) { + dlist_next += vc4_plane_write_dlist(plane, dlist_next); + } + +- if (dlist_next == vc4_crtc->dlist) { +- /* If no planes were enabled, use the SCALER_CTL0_END +- * at the start of the display list memory (in the +- * bootloader section). We'll rewrite that +- * SCALER_CTL0_END, just in case, though. +- */ +- writel(SCALER_CTL0_END, vc4->hvs->dlist); +- HVS_WRITE(SCALER_DISPLISTX(vc4_crtc->channel), 0); +- } else { +- writel(SCALER_CTL0_END, dlist_next); +- dlist_next++; +- +- HVS_WRITE(SCALER_DISPLISTX(vc4_crtc->channel), +- (u32 __iomem *)vc4_crtc->dlist - +- (u32 __iomem *)vc4->hvs->dlist); +- +- /* Make the next display list start after ours. */ +- vc4_crtc->dlist_size -= (dlist_next - vc4_crtc->dlist); +- vc4_crtc->dlist = dlist_next; +- } ++ writel(SCALER_CTL0_END, dlist_next); ++ dlist_next++; ++ ++ WARN_ON_ONCE(dlist_next - dlist_start != vc4_state->mm.size); ++ ++ HVS_WRITE(SCALER_DISPLISTX(vc4_crtc->channel), ++ vc4_state->mm.start); + + if (debug_dump_regs) { + DRM_INFO("CRTC %d HVS after:\n", drm_crtc_index(crtc)); +@@ -544,6 +543,7 @@ static int vc4_async_page_flip(struct drm_crtc *crtc, + /* Make sure all other async modesetes have landed. */ + ret = down_interruptible(&vc4->async_modeset); + if (ret) { ++ drm_framebuffer_unreference(fb); + kfree(flip_state); + return ret; + } +@@ -573,6 +573,36 @@ static int vc4_page_flip(struct drm_crtc *crtc, + return drm_atomic_helper_page_flip(crtc, fb, event, flags); + } + ++static struct drm_crtc_state *vc4_crtc_duplicate_state(struct drm_crtc *crtc) ++{ ++ struct vc4_crtc_state *vc4_state; ++ ++ vc4_state = kzalloc(sizeof(*vc4_state), GFP_KERNEL); ++ if (!vc4_state) ++ return NULL; ++ ++ __drm_atomic_helper_crtc_duplicate_state(crtc, &vc4_state->base); ++ return &vc4_state->base; ++} ++ ++static void vc4_crtc_destroy_state(struct drm_crtc *crtc, ++ struct drm_crtc_state *state) ++{ ++ struct vc4_dev *vc4 = to_vc4_dev(crtc->dev); ++ struct vc4_crtc_state *vc4_state = to_vc4_crtc_state(state); ++ ++ if (vc4_state->mm.allocated) { ++ unsigned long flags; ++ ++ spin_lock_irqsave(&vc4->hvs->mm_lock, flags); ++ drm_mm_remove_node(&vc4_state->mm); ++ spin_unlock_irqrestore(&vc4->hvs->mm_lock, flags); ++ ++ } ++ ++ __drm_atomic_helper_crtc_destroy_state(crtc, state); ++} ++ + static const struct drm_crtc_funcs vc4_crtc_funcs = { + .set_config = drm_atomic_helper_set_config, + .destroy = vc4_crtc_destroy, +@@ -581,8 +611,8 @@ static const struct drm_crtc_funcs vc4_crtc_funcs = { + .cursor_set = NULL, /* handled by drm_mode_cursor_universal */ + .cursor_move = NULL, /* handled by drm_mode_cursor_universal */ + .reset = drm_atomic_helper_crtc_reset, +- .atomic_duplicate_state = drm_atomic_helper_crtc_duplicate_state, +- .atomic_destroy_state = drm_atomic_helper_crtc_destroy_state, ++ .atomic_duplicate_state = vc4_crtc_duplicate_state, ++ .atomic_destroy_state = vc4_crtc_destroy_state, + }; + + static const struct drm_crtc_helper_funcs vc4_crtc_helper_funcs = { +diff --git a/drivers/gpu/drm/vc4/vc4_drv.h b/drivers/gpu/drm/vc4/vc4_drv.h +index 51a6333..83db0b7 100644 +--- a/drivers/gpu/drm/vc4/vc4_drv.h ++++ b/drivers/gpu/drm/vc4/vc4_drv.h +@@ -154,7 +154,17 @@ struct vc4_v3d { + struct vc4_hvs { + struct platform_device *pdev; + void __iomem *regs; +- void __iomem *dlist; ++ u32 __iomem *dlist; ++ ++ /* Memory manager for CRTCs to allocate space in the display ++ * list. Units are dwords. ++ */ ++ struct drm_mm dlist_mm; ++ /* Memory manager for the LBM memory used by HVS scaling. */ ++ struct drm_mm lbm_mm; ++ spinlock_t mm_lock; ++ ++ struct drm_mm_node mitchell_netravali_filter; + }; + + struct vc4_plane { +diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c +index c69c046..d8b8649 100644 +--- a/drivers/gpu/drm/vc4/vc4_hdmi.c ++++ b/drivers/gpu/drm/vc4/vc4_hdmi.c +@@ -47,6 +47,7 @@ struct vc4_hdmi { + void __iomem *hdmicore_regs; + void __iomem *hd_regs; + int hpd_gpio; ++ bool hpd_active_low; + + struct clk *pixel_clock; + struct clk *hsm_clock; +@@ -95,6 +96,7 @@ static const struct { + HDMI_REG(VC4_HDMI_SW_RESET_CONTROL), + HDMI_REG(VC4_HDMI_HOTPLUG_INT), + HDMI_REG(VC4_HDMI_HOTPLUG), ++ HDMI_REG(VC4_HDMI_RAM_PACKET_CONFIG), + HDMI_REG(VC4_HDMI_HORZA), + HDMI_REG(VC4_HDMI_HORZB), + HDMI_REG(VC4_HDMI_FIFO_CTL), +@@ -165,7 +167,8 @@ vc4_hdmi_connector_detect(struct drm_connector *connector, bool force) + struct vc4_dev *vc4 = to_vc4_dev(dev); + + if (vc4->hdmi->hpd_gpio) { +- if (gpio_get_value(vc4->hdmi->hpd_gpio)) ++ if (gpio_get_value_cansleep(vc4->hdmi->hpd_gpio) ^ ++ vc4->hdmi->hpd_active_low) + return connector_status_connected; + else + return connector_status_disconnected; +@@ -495,6 +498,16 @@ static int vc4_hdmi_bind(struct device *dev, struct device *master, void *data) + goto err_put_i2c; + } + ++ /* This is the rate that is set by the firmware. The number ++ * needs to be a bit higher than the pixel clock rate ++ * (generally 148.5Mhz). ++ */ ++ ret = clk_set_rate(hdmi->hsm_clock, 163682864); ++ if (ret) { ++ DRM_ERROR("Failed to set HSM clock rate: %d\n", ret); ++ goto err_unprepare_pix; ++ } ++ + ret = clk_prepare_enable(hdmi->hsm_clock); + if (ret) { + DRM_ERROR("Failed to turn on HDMI state machine clock: %d\n", +@@ -506,17 +519,40 @@ static int vc4_hdmi_bind(struct device *dev, struct device *master, void *data) + * we'll use the HDMI core's register. + */ + if (of_find_property(dev->of_node, "hpd-gpios", &value)) { +- hdmi->hpd_gpio = of_get_named_gpio(dev->of_node, "hpd-gpios", 0); ++ enum of_gpio_flags hpd_gpio_flags; ++ ++ hdmi->hpd_gpio = of_get_named_gpio_flags(dev->of_node, ++ "hpd-gpios", 0, ++ &hpd_gpio_flags); + if (hdmi->hpd_gpio < 0) { + ret = hdmi->hpd_gpio; + goto err_unprepare_hsm; + } ++ ++ hdmi->hpd_active_low = hpd_gpio_flags & OF_GPIO_ACTIVE_LOW; + } + + vc4->hdmi = hdmi; + + /* HDMI core must be enabled. */ +- WARN_ON_ONCE((HD_READ(VC4_HD_M_CTL) & VC4_HD_M_ENABLE) == 0); ++ if (!(HD_READ(VC4_HD_M_CTL) & VC4_HD_M_ENABLE)) { ++ HD_WRITE(VC4_HD_M_CTL, VC4_HD_M_SW_RST); ++ udelay(1); ++ HD_WRITE(VC4_HD_M_CTL, 0); ++ ++ HD_WRITE(VC4_HD_M_CTL, VC4_HD_M_ENABLE); ++ ++ HDMI_WRITE(VC4_HDMI_SW_RESET_CONTROL, ++ VC4_HDMI_SW_RESET_HDMI | ++ VC4_HDMI_SW_RESET_FORMAT_DETECT); ++ ++ HDMI_WRITE(VC4_HDMI_SW_RESET_CONTROL, 0); ++ ++ /* PHY should be in reset, like ++ * vc4_hdmi_encoder_disable() does. ++ */ ++ HDMI_WRITE(VC4_HDMI_TX_PHY_RESET_CTL, 0xf << 16); ++ } + + drm_encoder_init(drm, hdmi->encoder, &vc4_hdmi_encoder_funcs, + DRM_MODE_ENCODER_TMDS, NULL); +diff --git a/drivers/gpu/drm/vc4/vc4_hvs.c b/drivers/gpu/drm/vc4/vc4_hvs.c +index 8098c5b..6fbab1c 100644 +--- a/drivers/gpu/drm/vc4/vc4_hvs.c ++++ b/drivers/gpu/drm/vc4/vc4_hvs.c +@@ -100,12 +100,76 @@ int vc4_hvs_debugfs_regs(struct seq_file *m, void *unused) + } + #endif + ++/* The filter kernel is composed of dwords each containing 3 9-bit ++ * signed integers packed next to each other. ++ */ ++#define VC4_INT_TO_COEFF(coeff) (coeff & 0x1ff) ++#define VC4_PPF_FILTER_WORD(c0, c1, c2) \ ++ ((((c0) & 0x1ff) << 0) | \ ++ (((c1) & 0x1ff) << 9) | \ ++ (((c2) & 0x1ff) << 18)) ++ ++/* The whole filter kernel is arranged as the coefficients 0-16 going ++ * up, then a pad, then 17-31 going down and reversed within the ++ * dwords. This means that a linear phase kernel (where it's ++ * symmetrical at the boundary between 15 and 16) has the last 5 ++ * dwords matching the first 5, but reversed. ++ */ ++#define VC4_LINEAR_PHASE_KERNEL(c0, c1, c2, c3, c4, c5, c6, c7, c8, \ ++ c9, c10, c11, c12, c13, c14, c15) \ ++ {VC4_PPF_FILTER_WORD(c0, c1, c2), \ ++ VC4_PPF_FILTER_WORD(c3, c4, c5), \ ++ VC4_PPF_FILTER_WORD(c6, c7, c8), \ ++ VC4_PPF_FILTER_WORD(c9, c10, c11), \ ++ VC4_PPF_FILTER_WORD(c12, c13, c14), \ ++ VC4_PPF_FILTER_WORD(c15, c15, 0)} ++ ++#define VC4_LINEAR_PHASE_KERNEL_DWORDS 6 ++#define VC4_KERNEL_DWORDS (VC4_LINEAR_PHASE_KERNEL_DWORDS * 2 - 1) ++ ++/* Recommended B=1/3, C=1/3 filter choice from Mitchell/Netravali. ++ * http://www.cs.utexas.edu/~fussell/courses/cs384g/lectures/mitchell/Mitchell.pdf ++ */ ++static const u32 mitchell_netravali_1_3_1_3_kernel[] = ++ VC4_LINEAR_PHASE_KERNEL(0, -2, -6, -8, -10, -8, -3, 2, 18, ++ 50, 82, 119, 155, 187, 213, 227); ++ ++static int vc4_hvs_upload_linear_kernel(struct vc4_hvs *hvs, ++ struct drm_mm_node *space, ++ const u32 *kernel) ++{ ++ int ret, i; ++ u32 __iomem *dst_kernel; ++ ++ ret = drm_mm_insert_node(&hvs->dlist_mm, space, VC4_KERNEL_DWORDS, 1, ++ 0); ++ if (ret) { ++ DRM_ERROR("Failed to allocate space for filter kernel: %d\n", ++ ret); ++ return ret; ++ } ++ ++ dst_kernel = hvs->dlist + space->start; ++ ++ for (i = 0; i < VC4_KERNEL_DWORDS; i++) { ++ if (i < VC4_LINEAR_PHASE_KERNEL_DWORDS) ++ writel(kernel[i], &dst_kernel[i]); ++ else { ++ writel(kernel[VC4_KERNEL_DWORDS - i - 1], ++ &dst_kernel[i]); ++ } ++ } ++ ++ return 0; ++} ++ + static int vc4_hvs_bind(struct device *dev, struct device *master, void *data) + { + struct platform_device *pdev = to_platform_device(dev); + struct drm_device *drm = dev_get_drvdata(master); + struct vc4_dev *vc4 = drm->dev_private; + struct vc4_hvs *hvs = NULL; ++ int ret; + + hvs = devm_kzalloc(&pdev->dev, sizeof(*hvs), GFP_KERNEL); + if (!hvs) +@@ -119,6 +183,33 @@ static int vc4_hvs_bind(struct device *dev, struct device *master, void *data) + + hvs->dlist = hvs->regs + SCALER_DLIST_START; + ++ spin_lock_init(&hvs->mm_lock); ++ ++ /* Set up the HVS display list memory manager. We never ++ * overwrite the setup from the bootloader (just 128b out of ++ * our 16K), since we don't want to scramble the screen when ++ * transitioning from the firmware's boot setup to runtime. ++ */ ++ drm_mm_init(&hvs->dlist_mm, ++ HVS_BOOTLOADER_DLIST_END, ++ (SCALER_DLIST_SIZE >> 2) - HVS_BOOTLOADER_DLIST_END); ++ ++ /* Set up the HVS LBM memory manager. We could have some more ++ * complicated data structure that allowed reuse of LBM areas ++ * between planes when they don't overlap on the screen, but ++ * for now we just allocate globally. ++ */ ++ drm_mm_init(&hvs->lbm_mm, 0, 96 * 1024); ++ ++ /* Upload filter kernels. We only have the one for now, so we ++ * keep it around for the lifetime of the driver. ++ */ ++ ret = vc4_hvs_upload_linear_kernel(hvs, ++ &hvs->mitchell_netravali_filter, ++ mitchell_netravali_1_3_1_3_kernel); ++ if (ret) ++ return ret; ++ + vc4->hvs = hvs; + return 0; + } +@@ -129,6 +220,12 @@ static void vc4_hvs_unbind(struct device *dev, struct device *master, + struct drm_device *drm = dev_get_drvdata(master); + struct vc4_dev *vc4 = drm->dev_private; + ++ if (vc4->hvs->mitchell_netravali_filter.allocated) ++ drm_mm_remove_node(&vc4->hvs->mitchell_netravali_filter); ++ ++ drm_mm_takedown(&vc4->hvs->dlist_mm); ++ drm_mm_takedown(&vc4->hvs->lbm_mm); ++ + vc4->hvs = NULL; + } + +diff --git a/drivers/gpu/drm/vc4/vc4_kms.c b/drivers/gpu/drm/vc4/vc4_kms.c +index f95f2df..4718ae5 100644 +--- a/drivers/gpu/drm/vc4/vc4_kms.c ++++ b/drivers/gpu/drm/vc4/vc4_kms.c +@@ -49,6 +49,15 @@ vc4_atomic_complete_commit(struct vc4_commit *c) + + drm_atomic_helper_commit_modeset_enables(dev, state); + ++ /* Make sure that drm_atomic_helper_wait_for_vblanks() ++ * actually waits for vblank. If we're doing a full atomic ++ * modeset (as opposed to a vc4_update_plane() short circuit), ++ * then we need to wait for scanout to be done with our ++ * display lists before we free it and potentially reallocate ++ * and overwrite the dlist memory with a new modeset. ++ */ ++ state->legacy_cursor_update = false; ++ + drm_atomic_helper_wait_for_vblanks(dev, state); + + drm_atomic_helper_cleanup_planes(dev, state); +diff --git a/drivers/gpu/drm/vc4/vc4_plane.c b/drivers/gpu/drm/vc4/vc4_plane.c +index 0addbad..7b0c72a 100644 +--- a/drivers/gpu/drm/vc4/vc4_plane.c ++++ b/drivers/gpu/drm/vc4/vc4_plane.c +@@ -24,19 +24,52 @@ + #include "drm_fb_cma_helper.h" + #include "drm_plane_helper.h" + ++enum vc4_scaling_mode { ++ VC4_SCALING_NONE, ++ VC4_SCALING_TPZ, ++ VC4_SCALING_PPF, ++}; ++ + struct vc4_plane_state { + struct drm_plane_state base; ++ /* System memory copy of the display list for this element, computed ++ * at atomic_check time. ++ */ + u32 *dlist; +- u32 dlist_size; /* Number of dwords in allocated for the display list */ ++ u32 dlist_size; /* Number of dwords allocated for the display list */ + u32 dlist_count; /* Number of used dwords in the display list. */ + +- /* Offset in the dlist to pointer word 0. */ +- u32 pw0_offset; ++ /* Offset in the dlist to various words, for pageflip or ++ * cursor updates. ++ */ ++ u32 pos0_offset; ++ u32 pos2_offset; ++ u32 ptr0_offset; + + /* Offset where the plane's dlist was last stored in the +- hardware at vc4_crtc_atomic_flush() time. +- */ +- u32 *hw_dlist; ++ * hardware at vc4_crtc_atomic_flush() time. ++ */ ++ u32 __iomem *hw_dlist; ++ ++ /* Clipped coordinates of the plane on the display. */ ++ int crtc_x, crtc_y, crtc_w, crtc_h; ++ /* Clipped area being scanned from in the FB. */ ++ u32 src_x, src_y; ++ ++ u32 src_w[2], src_h[2]; ++ ++ /* Scaling selection for the RGB/Y plane and the Cb/Cr planes. */ ++ enum vc4_scaling_mode x_scaling[2], y_scaling[2]; ++ bool is_unity; ++ bool is_yuv; ++ ++ /* Offset to start scanning out from the start of the plane's ++ * BO. ++ */ ++ u32 offsets[3]; ++ ++ /* Our allocation in LBM for temporary storage during scaling. */ ++ struct drm_mm_node lbm; + }; + + static inline struct vc4_plane_state * +@@ -50,6 +83,7 @@ static const struct hvs_format { + u32 hvs; /* HVS_FORMAT_* */ + u32 pixel_order; + bool has_alpha; ++ bool flip_cbcr; + } hvs_formats[] = { + { + .drm = DRM_FORMAT_XRGB8888, .hvs = HVS_PIXEL_FORMAT_RGBA8888, +@@ -59,6 +93,48 @@ static const struct hvs_format { + .drm = DRM_FORMAT_ARGB8888, .hvs = HVS_PIXEL_FORMAT_RGBA8888, + .pixel_order = HVS_PIXEL_ORDER_ABGR, .has_alpha = true, + }, ++ { ++ .drm = DRM_FORMAT_RGB565, .hvs = HVS_PIXEL_FORMAT_RGB565, ++ .pixel_order = HVS_PIXEL_ORDER_XRGB, .has_alpha = false, ++ }, ++ { ++ .drm = DRM_FORMAT_BGR565, .hvs = HVS_PIXEL_FORMAT_RGB565, ++ .pixel_order = HVS_PIXEL_ORDER_XBGR, .has_alpha = false, ++ }, ++ { ++ .drm = DRM_FORMAT_ARGB1555, .hvs = HVS_PIXEL_FORMAT_RGBA5551, ++ .pixel_order = HVS_PIXEL_ORDER_ABGR, .has_alpha = true, ++ }, ++ { ++ .drm = DRM_FORMAT_XRGB1555, .hvs = HVS_PIXEL_FORMAT_RGBA5551, ++ .pixel_order = HVS_PIXEL_ORDER_ABGR, .has_alpha = false, ++ }, ++ { ++ .drm = DRM_FORMAT_YUV422, ++ .hvs = HVS_PIXEL_FORMAT_YCBCR_YUV422_3PLANE, ++ }, ++ { ++ .drm = DRM_FORMAT_YVU422, ++ .hvs = HVS_PIXEL_FORMAT_YCBCR_YUV422_3PLANE, ++ .flip_cbcr = true, ++ }, ++ { ++ .drm = DRM_FORMAT_YUV420, ++ .hvs = HVS_PIXEL_FORMAT_YCBCR_YUV420_3PLANE, ++ }, ++ { ++ .drm = DRM_FORMAT_YVU420, ++ .hvs = HVS_PIXEL_FORMAT_YCBCR_YUV420_3PLANE, ++ .flip_cbcr = true, ++ }, ++ { ++ .drm = DRM_FORMAT_NV12, ++ .hvs = HVS_PIXEL_FORMAT_YCBCR_YUV420_2PLANE, ++ }, ++ { ++ .drm = DRM_FORMAT_NV16, ++ .hvs = HVS_PIXEL_FORMAT_YCBCR_YUV422_2PLANE, ++ }, + }; + + static const struct hvs_format *vc4_get_hvs_format(u32 drm_format) +@@ -73,6 +149,16 @@ static const struct hvs_format *vc4_get_hvs_format(u32 drm_format) + return NULL; + } + ++static enum vc4_scaling_mode vc4_get_scaling_mode(u32 src, u32 dst) ++{ ++ if (dst > src) ++ return VC4_SCALING_PPF; ++ else if (dst < src) ++ return VC4_SCALING_TPZ; ++ else ++ return VC4_SCALING_NONE; ++} ++ + static bool plane_enabled(struct drm_plane_state *state) + { + return state->fb && state->crtc; +@@ -89,6 +175,8 @@ static struct drm_plane_state *vc4_plane_duplicate_state(struct drm_plane *plane + if (!vc4_state) + return NULL; + ++ memset(&vc4_state->lbm, 0, sizeof(vc4_state->lbm)); ++ + __drm_atomic_helper_plane_duplicate_state(plane, &vc4_state->base); + + if (vc4_state->dlist) { +@@ -108,8 +196,17 @@ static struct drm_plane_state *vc4_plane_duplicate_state(struct drm_plane *plane + static void vc4_plane_destroy_state(struct drm_plane *plane, + struct drm_plane_state *state) + { ++ struct vc4_dev *vc4 = to_vc4_dev(plane->dev); + struct vc4_plane_state *vc4_state = to_vc4_plane_state(state); + ++ if (vc4_state->lbm.allocated) { ++ unsigned long irqflags; ++ ++ spin_lock_irqsave(&vc4->hvs->mm_lock, irqflags); ++ drm_mm_remove_node(&vc4_state->lbm); ++ spin_unlock_irqrestore(&vc4->hvs->mm_lock, irqflags); ++ } ++ + kfree(vc4_state->dlist); + __drm_atomic_helper_plane_destroy_state(plane, &vc4_state->base); + kfree(state); +@@ -148,84 +245,400 @@ static void vc4_dlist_write(struct vc4_plane_state *vc4_state, u32 val) + vc4_state->dlist[vc4_state->dlist_count++] = val; + } + ++/* Returns the scl0/scl1 field based on whether the dimensions need to ++ * be up/down/non-scaled. ++ * ++ * This is a replication of a table from the spec. ++ */ ++static u32 vc4_get_scl_field(struct drm_plane_state *state, int plane) ++{ ++ struct vc4_plane_state *vc4_state = to_vc4_plane_state(state); ++ ++ switch (vc4_state->x_scaling[plane] << 2 | vc4_state->y_scaling[plane]) { ++ case VC4_SCALING_PPF << 2 | VC4_SCALING_PPF: ++ return SCALER_CTL0_SCL_H_PPF_V_PPF; ++ case VC4_SCALING_TPZ << 2 | VC4_SCALING_PPF: ++ return SCALER_CTL0_SCL_H_TPZ_V_PPF; ++ case VC4_SCALING_PPF << 2 | VC4_SCALING_TPZ: ++ return SCALER_CTL0_SCL_H_PPF_V_TPZ; ++ case VC4_SCALING_TPZ << 2 | VC4_SCALING_TPZ: ++ return SCALER_CTL0_SCL_H_TPZ_V_TPZ; ++ case VC4_SCALING_PPF << 2 | VC4_SCALING_NONE: ++ return SCALER_CTL0_SCL_H_PPF_V_NONE; ++ case VC4_SCALING_NONE << 2 | VC4_SCALING_PPF: ++ return SCALER_CTL0_SCL_H_NONE_V_PPF; ++ case VC4_SCALING_NONE << 2 | VC4_SCALING_TPZ: ++ return SCALER_CTL0_SCL_H_NONE_V_TPZ; ++ case VC4_SCALING_TPZ << 2 | VC4_SCALING_NONE: ++ return SCALER_CTL0_SCL_H_TPZ_V_NONE; ++ default: ++ case VC4_SCALING_NONE << 2 | VC4_SCALING_NONE: ++ /* The unity case is independently handled by ++ * SCALER_CTL0_UNITY. ++ */ ++ return 0; ++ } ++} ++ ++static int vc4_plane_setup_clipping_and_scaling(struct drm_plane_state *state) ++{ ++ struct drm_plane *plane = state->plane; ++ struct vc4_plane_state *vc4_state = to_vc4_plane_state(state); ++ struct drm_framebuffer *fb = state->fb; ++ struct drm_gem_cma_object *bo = drm_fb_cma_get_gem_obj(fb, 0); ++ u32 subpixel_src_mask = (1 << 16) - 1; ++ u32 format = fb->pixel_format; ++ int num_planes = drm_format_num_planes(format); ++ u32 h_subsample = 1; ++ u32 v_subsample = 1; ++ int i; ++ ++ for (i = 0; i < num_planes; i++) ++ vc4_state->offsets[i] = bo->paddr + fb->offsets[i]; ++ ++ /* We don't support subpixel source positioning for scaling. */ ++ if ((state->src_x & subpixel_src_mask) || ++ (state->src_y & subpixel_src_mask) || ++ (state->src_w & subpixel_src_mask) || ++ (state->src_h & subpixel_src_mask)) { ++ return -EINVAL; ++ } ++ ++ vc4_state->src_x = state->src_x >> 16; ++ vc4_state->src_y = state->src_y >> 16; ++ vc4_state->src_w[0] = state->src_w >> 16; ++ vc4_state->src_h[0] = state->src_h >> 16; ++ ++ vc4_state->crtc_x = state->crtc_x; ++ vc4_state->crtc_y = state->crtc_y; ++ vc4_state->crtc_w = state->crtc_w; ++ vc4_state->crtc_h = state->crtc_h; ++ ++ vc4_state->x_scaling[0] = vc4_get_scaling_mode(vc4_state->src_w[0], ++ vc4_state->crtc_w); ++ vc4_state->y_scaling[0] = vc4_get_scaling_mode(vc4_state->src_h[0], ++ vc4_state->crtc_h); ++ ++ if (num_planes > 1) { ++ vc4_state->is_yuv = true; ++ ++ h_subsample = drm_format_horz_chroma_subsampling(format); ++ v_subsample = drm_format_vert_chroma_subsampling(format); ++ vc4_state->src_w[1] = vc4_state->src_w[0] / h_subsample; ++ vc4_state->src_h[1] = vc4_state->src_h[0] / v_subsample; ++ ++ vc4_state->x_scaling[1] = ++ vc4_get_scaling_mode(vc4_state->src_w[1], ++ vc4_state->crtc_w); ++ vc4_state->y_scaling[1] = ++ vc4_get_scaling_mode(vc4_state->src_h[1], ++ vc4_state->crtc_h); ++ ++ /* YUV conversion requires that scaling be enabled, ++ * even on a plane that's otherwise 1:1. Choose TPZ ++ * for simplicity. ++ */ ++ if (vc4_state->x_scaling[0] == VC4_SCALING_NONE) ++ vc4_state->x_scaling[0] = VC4_SCALING_TPZ; ++ if (vc4_state->y_scaling[0] == VC4_SCALING_NONE) ++ vc4_state->y_scaling[0] = VC4_SCALING_TPZ; ++ } ++ ++ vc4_state->is_unity = (vc4_state->x_scaling[0] == VC4_SCALING_NONE && ++ vc4_state->y_scaling[0] == VC4_SCALING_NONE && ++ vc4_state->x_scaling[1] == VC4_SCALING_NONE && ++ vc4_state->y_scaling[1] == VC4_SCALING_NONE); ++ ++ /* No configuring scaling on the cursor plane, since it gets ++ non-vblank-synced updates, and scaling requires requires ++ LBM changes which have to be vblank-synced. ++ */ ++ if (plane->type == DRM_PLANE_TYPE_CURSOR && !vc4_state->is_unity) ++ return -EINVAL; ++ ++ /* Clamp the on-screen start x/y to 0. The hardware doesn't ++ * support negative y, and negative x wastes bandwidth. ++ */ ++ if (vc4_state->crtc_x < 0) { ++ for (i = 0; i < num_planes; i++) { ++ u32 cpp = drm_format_plane_cpp(fb->pixel_format, i); ++ u32 subs = ((i == 0) ? 1 : h_subsample); ++ ++ vc4_state->offsets[i] += (cpp * ++ (-vc4_state->crtc_x) / subs); ++ } ++ vc4_state->src_w[0] += vc4_state->crtc_x; ++ vc4_state->src_w[1] += vc4_state->crtc_x / h_subsample; ++ vc4_state->crtc_x = 0; ++ } ++ ++ if (vc4_state->crtc_y < 0) { ++ for (i = 0; i < num_planes; i++) { ++ u32 subs = ((i == 0) ? 1 : v_subsample); ++ ++ vc4_state->offsets[i] += (fb->pitches[i] * ++ (-vc4_state->crtc_y) / subs); ++ } ++ vc4_state->src_h[0] += vc4_state->crtc_y; ++ vc4_state->src_h[1] += vc4_state->crtc_y / v_subsample; ++ vc4_state->crtc_y = 0; ++ } ++ ++ return 0; ++} ++ ++static void vc4_write_tpz(struct vc4_plane_state *vc4_state, u32 src, u32 dst) ++{ ++ u32 scale, recip; ++ ++ scale = (1 << 16) * src / dst; ++ ++ /* The specs note that while the reciprocal would be defined ++ * as (1<<32)/scale, ~0 is close enough. ++ */ ++ recip = ~0 / scale; ++ ++ vc4_dlist_write(vc4_state, ++ VC4_SET_FIELD(scale, SCALER_TPZ0_SCALE) | ++ VC4_SET_FIELD(0, SCALER_TPZ0_IPHASE)); ++ vc4_dlist_write(vc4_state, ++ VC4_SET_FIELD(recip, SCALER_TPZ1_RECIP)); ++} ++ ++static void vc4_write_ppf(struct vc4_plane_state *vc4_state, u32 src, u32 dst) ++{ ++ u32 scale = (1 << 16) * src / dst; ++ ++ vc4_dlist_write(vc4_state, ++ SCALER_PPF_AGC | ++ VC4_SET_FIELD(scale, SCALER_PPF_SCALE) | ++ VC4_SET_FIELD(0, SCALER_PPF_IPHASE)); ++} ++ ++static u32 vc4_lbm_size(struct drm_plane_state *state) ++{ ++ struct vc4_plane_state *vc4_state = to_vc4_plane_state(state); ++ /* This is the worst case number. One of the two sizes will ++ * be used depending on the scaling configuration. ++ */ ++ u32 pix_per_line = max(vc4_state->src_w[0], (u32)vc4_state->crtc_w); ++ u32 lbm; ++ ++ if (!vc4_state->is_yuv) { ++ if (vc4_state->is_unity) ++ return 0; ++ else if (vc4_state->y_scaling[0] == VC4_SCALING_TPZ) ++ lbm = pix_per_line * 8; ++ else { ++ /* In special cases, this multiplier might be 12. */ ++ lbm = pix_per_line * 16; ++ } ++ } else { ++ /* There are cases for this going down to a multiplier ++ * of 2, but according to the firmware source, the ++ * table in the docs is somewhat wrong. ++ */ ++ lbm = pix_per_line * 16; ++ } ++ ++ lbm = roundup(lbm, 32); ++ ++ return lbm; ++} ++ ++static void vc4_write_scaling_parameters(struct drm_plane_state *state, ++ int channel) ++{ ++ struct vc4_plane_state *vc4_state = to_vc4_plane_state(state); ++ ++ /* Ch0 H-PPF Word 0: Scaling Parameters */ ++ if (vc4_state->x_scaling[channel] == VC4_SCALING_PPF) { ++ vc4_write_ppf(vc4_state, ++ vc4_state->src_w[channel], vc4_state->crtc_w); ++ } ++ ++ /* Ch0 V-PPF Words 0-1: Scaling Parameters, Context */ ++ if (vc4_state->y_scaling[channel] == VC4_SCALING_PPF) { ++ vc4_write_ppf(vc4_state, ++ vc4_state->src_h[channel], vc4_state->crtc_h); ++ vc4_dlist_write(vc4_state, 0xc0c0c0c0); ++ } ++ ++ /* Ch0 H-TPZ Words 0-1: Scaling Parameters, Recip */ ++ if (vc4_state->x_scaling[channel] == VC4_SCALING_TPZ) { ++ vc4_write_tpz(vc4_state, ++ vc4_state->src_w[channel], vc4_state->crtc_w); ++ } ++ ++ /* Ch0 V-TPZ Words 0-2: Scaling Parameters, Recip, Context */ ++ if (vc4_state->y_scaling[channel] == VC4_SCALING_TPZ) { ++ vc4_write_tpz(vc4_state, ++ vc4_state->src_h[channel], vc4_state->crtc_h); ++ vc4_dlist_write(vc4_state, 0xc0c0c0c0); ++ } ++} ++ + /* Writes out a full display list for an active plane to the plane's + * private dlist state. + */ + static int vc4_plane_mode_set(struct drm_plane *plane, + struct drm_plane_state *state) + { ++ struct vc4_dev *vc4 = to_vc4_dev(plane->dev); + struct vc4_plane_state *vc4_state = to_vc4_plane_state(state); + struct drm_framebuffer *fb = state->fb; +- struct drm_gem_cma_object *bo = drm_fb_cma_get_gem_obj(fb, 0); + u32 ctl0_offset = vc4_state->dlist_count; + const struct hvs_format *format = vc4_get_hvs_format(fb->pixel_format); +- uint32_t offset = fb->offsets[0]; +- int crtc_x = state->crtc_x; +- int crtc_y = state->crtc_y; +- int crtc_w = state->crtc_w; +- int crtc_h = state->crtc_h; +- +- if (state->crtc_w << 16 != state->src_w || +- state->crtc_h << 16 != state->src_h) { +- /* We don't support scaling yet, which involves +- * allocating the LBM memory for scaling temporary +- * storage, and putting filter kernels in the HVS +- * context. +- */ +- return -EINVAL; ++ int num_planes = drm_format_num_planes(format->drm); ++ u32 scl0, scl1; ++ u32 lbm_size; ++ unsigned long irqflags; ++ int ret, i; ++ ++ ret = vc4_plane_setup_clipping_and_scaling(state); ++ if (ret) ++ return ret; ++ ++ /* Allocate the LBM memory that the HVS will use for temporary ++ * storage due to our scaling/format conversion. ++ */ ++ lbm_size = vc4_lbm_size(state); ++ if (lbm_size) { ++ if (!vc4_state->lbm.allocated) { ++ spin_lock_irqsave(&vc4->hvs->mm_lock, irqflags); ++ ret = drm_mm_insert_node(&vc4->hvs->lbm_mm, ++ &vc4_state->lbm, ++ lbm_size, 32, 0); ++ spin_unlock_irqrestore(&vc4->hvs->mm_lock, irqflags); ++ } else { ++ WARN_ON_ONCE(lbm_size != vc4_state->lbm.size); ++ } + } + +- if (crtc_x < 0) { +- offset += drm_format_plane_cpp(fb->pixel_format, 0) * -crtc_x; +- crtc_w += crtc_x; +- crtc_x = 0; +- } ++ if (ret) ++ return ret; + +- if (crtc_y < 0) { +- offset += fb->pitches[0] * -crtc_y; +- crtc_h += crtc_y; +- crtc_y = 0; ++ /* SCL1 is used for Cb/Cr scaling of planar formats. For RGB ++ * and 4:4:4, scl1 should be set to scl0 so both channels of ++ * the scaler do the same thing. For YUV, the Y plane needs ++ * to be put in channel 1 and Cb/Cr in channel 0, so we swap ++ * the scl fields here. ++ */ ++ if (num_planes == 1) { ++ scl0 = vc4_get_scl_field(state, 1); ++ scl1 = scl0; ++ } else { ++ scl0 = vc4_get_scl_field(state, 1); ++ scl1 = vc4_get_scl_field(state, 0); + } + ++ /* Control word */ + vc4_dlist_write(vc4_state, + SCALER_CTL0_VALID | + (format->pixel_order << SCALER_CTL0_ORDER_SHIFT) | + (format->hvs << SCALER_CTL0_PIXEL_FORMAT_SHIFT) | +- SCALER_CTL0_UNITY); ++ (vc4_state->is_unity ? SCALER_CTL0_UNITY : 0) | ++ VC4_SET_FIELD(scl0, SCALER_CTL0_SCL0) | ++ VC4_SET_FIELD(scl1, SCALER_CTL0_SCL1)); + + /* Position Word 0: Image Positions and Alpha Value */ ++ vc4_state->pos0_offset = vc4_state->dlist_count; + vc4_dlist_write(vc4_state, + VC4_SET_FIELD(0xff, SCALER_POS0_FIXED_ALPHA) | +- VC4_SET_FIELD(crtc_x, SCALER_POS0_START_X) | +- VC4_SET_FIELD(crtc_y, SCALER_POS0_START_Y)); +- +- /* Position Word 1: Scaled Image Dimensions. +- * Skipped due to SCALER_CTL0_UNITY scaling. +- */ ++ VC4_SET_FIELD(vc4_state->crtc_x, SCALER_POS0_START_X) | ++ VC4_SET_FIELD(vc4_state->crtc_y, SCALER_POS0_START_Y)); ++ ++ /* Position Word 1: Scaled Image Dimensions. */ ++ if (!vc4_state->is_unity) { ++ vc4_dlist_write(vc4_state, ++ VC4_SET_FIELD(vc4_state->crtc_w, ++ SCALER_POS1_SCL_WIDTH) | ++ VC4_SET_FIELD(vc4_state->crtc_h, ++ SCALER_POS1_SCL_HEIGHT)); ++ } + + /* Position Word 2: Source Image Size, Alpha Mode */ ++ vc4_state->pos2_offset = vc4_state->dlist_count; + vc4_dlist_write(vc4_state, + VC4_SET_FIELD(format->has_alpha ? + SCALER_POS2_ALPHA_MODE_PIPELINE : + SCALER_POS2_ALPHA_MODE_FIXED, + SCALER_POS2_ALPHA_MODE) | +- VC4_SET_FIELD(crtc_w, SCALER_POS2_WIDTH) | +- VC4_SET_FIELD(crtc_h, SCALER_POS2_HEIGHT)); ++ VC4_SET_FIELD(vc4_state->src_w[0], SCALER_POS2_WIDTH) | ++ VC4_SET_FIELD(vc4_state->src_h[0], SCALER_POS2_HEIGHT)); + + /* Position Word 3: Context. Written by the HVS. */ + vc4_dlist_write(vc4_state, 0xc0c0c0c0); + +- vc4_state->pw0_offset = vc4_state->dlist_count; + +- /* Pointer Word 0: RGB / Y Pointer */ +- vc4_dlist_write(vc4_state, bo->paddr + offset); ++ /* Pointer Word 0/1/2: RGB / Y / Cb / Cr Pointers ++ * ++ * The pointers may be any byte address. ++ */ ++ vc4_state->ptr0_offset = vc4_state->dlist_count; ++ if (!format->flip_cbcr) { ++ for (i = 0; i < num_planes; i++) ++ vc4_dlist_write(vc4_state, vc4_state->offsets[i]); ++ } else { ++ WARN_ON_ONCE(num_planes != 3); ++ vc4_dlist_write(vc4_state, vc4_state->offsets[0]); ++ vc4_dlist_write(vc4_state, vc4_state->offsets[2]); ++ vc4_dlist_write(vc4_state, vc4_state->offsets[1]); ++ } + +- /* Pointer Context Word 0: Written by the HVS */ +- vc4_dlist_write(vc4_state, 0xc0c0c0c0); ++ /* Pointer Context Word 0/1/2: Written by the HVS */ ++ for (i = 0; i < num_planes; i++) ++ vc4_dlist_write(vc4_state, 0xc0c0c0c0); + +- /* Pitch word 0: Pointer 0 Pitch */ +- vc4_dlist_write(vc4_state, +- VC4_SET_FIELD(fb->pitches[0], SCALER_SRC_PITCH)); ++ /* Pitch word 0/1/2 */ ++ for (i = 0; i < num_planes; i++) { ++ vc4_dlist_write(vc4_state, ++ VC4_SET_FIELD(fb->pitches[i], SCALER_SRC_PITCH)); ++ } ++ ++ /* Colorspace conversion words */ ++ if (vc4_state->is_yuv) { ++ vc4_dlist_write(vc4_state, SCALER_CSC0_ITR_R_601_5); ++ vc4_dlist_write(vc4_state, SCALER_CSC1_ITR_R_601_5); ++ vc4_dlist_write(vc4_state, SCALER_CSC2_ITR_R_601_5); ++ } ++ ++ if (!vc4_state->is_unity) { ++ /* LBM Base Address. */ ++ if (vc4_state->y_scaling[0] != VC4_SCALING_NONE || ++ vc4_state->y_scaling[1] != VC4_SCALING_NONE) { ++ vc4_dlist_write(vc4_state, vc4_state->lbm.start); ++ } ++ ++ if (num_planes > 1) { ++ /* Emit Cb/Cr as channel 0 and Y as channel ++ * 1. This matches how we set up scl0/scl1 ++ * above. ++ */ ++ vc4_write_scaling_parameters(state, 1); ++ } ++ vc4_write_scaling_parameters(state, 0); ++ ++ /* If any PPF setup was done, then all the kernel ++ * pointers get uploaded. ++ */ ++ if (vc4_state->x_scaling[0] == VC4_SCALING_PPF || ++ vc4_state->y_scaling[0] == VC4_SCALING_PPF || ++ vc4_state->x_scaling[1] == VC4_SCALING_PPF || ++ vc4_state->y_scaling[1] == VC4_SCALING_PPF) { ++ u32 kernel = VC4_SET_FIELD(vc4->hvs->mitchell_netravali_filter.start, ++ SCALER_PPF_KERNEL_OFFSET); ++ ++ /* HPPF plane 0 */ ++ vc4_dlist_write(vc4_state, kernel); ++ /* VPPF plane 0 */ ++ vc4_dlist_write(vc4_state, kernel); ++ /* HPPF plane 1 */ ++ vc4_dlist_write(vc4_state, kernel); ++ /* VPPF plane 1 */ ++ vc4_dlist_write(vc4_state, kernel); ++ } ++ } + + vc4_state->dlist[ctl0_offset] |= + VC4_SET_FIELD(vc4_state->dlist_count, SCALER_CTL0_SIZE); +@@ -303,13 +716,13 @@ void vc4_plane_async_set_fb(struct drm_plane *plane, struct drm_framebuffer *fb) + * scanout will start from this address as soon as the FIFO + * needs to refill with pixels. + */ +- writel(addr, &vc4_state->hw_dlist[vc4_state->pw0_offset]); ++ writel(addr, &vc4_state->hw_dlist[vc4_state->ptr0_offset]); + + /* Also update the CPU-side dlist copy, so that any later + * atomic updates that don't do a new modeset on our plane + * also use our updated address. + */ +- vc4_state->dlist[vc4_state->pw0_offset] = addr; ++ vc4_state->dlist[vc4_state->ptr0_offset] = addr; + } + + static const struct drm_plane_helper_funcs vc4_plane_helper_funcs = { +@@ -325,8 +738,83 @@ static void vc4_plane_destroy(struct drm_plane *plane) + drm_plane_cleanup(plane); + } + ++/* Implements immediate (non-vblank-synced) updates of the cursor ++ * position, or falls back to the atomic helper otherwise. ++ */ ++static int ++vc4_update_plane(struct drm_plane *plane, ++ struct drm_crtc *crtc, ++ struct drm_framebuffer *fb, ++ int crtc_x, int crtc_y, ++ unsigned int crtc_w, unsigned int crtc_h, ++ uint32_t src_x, uint32_t src_y, ++ uint32_t src_w, uint32_t src_h) ++{ ++ struct drm_plane_state *plane_state; ++ struct vc4_plane_state *vc4_state; ++ ++ if (plane != crtc->cursor) ++ goto out; ++ ++ plane_state = plane->state; ++ vc4_state = to_vc4_plane_state(plane_state); ++ ++ if (!plane_state) ++ goto out; ++ ++ /* If we're changing the cursor contents, do that in the ++ * normal vblank-synced atomic path. ++ */ ++ if (fb != plane_state->fb) ++ goto out; ++ ++ /* No configuring new scaling in the fast path. */ ++ if (crtc_w != plane_state->crtc_w || ++ crtc_h != plane_state->crtc_h || ++ src_w != plane_state->src_w || ++ src_h != plane_state->src_h) { ++ goto out; ++ } ++ ++ /* Set the cursor's position on the screen. This is the ++ * expected change from the drm_mode_cursor_universal() ++ * helper. ++ */ ++ plane_state->crtc_x = crtc_x; ++ plane_state->crtc_y = crtc_y; ++ ++ /* Allow changing the start position within the cursor BO, if ++ * that matters. ++ */ ++ plane_state->src_x = src_x; ++ plane_state->src_y = src_y; ++ ++ /* Update the display list based on the new crtc_x/y. */ ++ vc4_plane_atomic_check(plane, plane_state); ++ ++ /* Note that we can't just call vc4_plane_write_dlist() ++ * because that would smash the context data that the HVS is ++ * currently using. ++ */ ++ writel(vc4_state->dlist[vc4_state->pos0_offset], ++ &vc4_state->hw_dlist[vc4_state->pos0_offset]); ++ writel(vc4_state->dlist[vc4_state->pos2_offset], ++ &vc4_state->hw_dlist[vc4_state->pos2_offset]); ++ writel(vc4_state->dlist[vc4_state->ptr0_offset], ++ &vc4_state->hw_dlist[vc4_state->ptr0_offset]); ++ ++ return 0; ++ ++out: ++ return drm_atomic_helper_update_plane(plane, crtc, fb, ++ crtc_x, crtc_y, ++ crtc_w, crtc_h, ++ src_x, src_y, ++ src_w, src_h); ++} ++ + static const struct drm_plane_funcs vc4_plane_funcs = { +- .update_plane = drm_atomic_helper_update_plane, ++ .update_plane = vc4_update_plane, + .disable_plane = drm_atomic_helper_disable_plane, + .destroy = vc4_plane_destroy, + .set_property = NULL, +@@ -341,6 +829,7 @@ struct drm_plane *vc4_plane_init(struct drm_device *dev, + struct drm_plane *plane = NULL; + struct vc4_plane *vc4_plane; + u32 formats[ARRAY_SIZE(hvs_formats)]; ++ u32 num_formats = 0; + int ret = 0; + unsigned i; + +@@ -351,12 +840,20 @@ struct drm_plane *vc4_plane_init(struct drm_device *dev, + goto fail; + } + +- for (i = 0; i < ARRAY_SIZE(hvs_formats); i++) +- formats[i] = hvs_formats[i].drm; ++ for (i = 0; i < ARRAY_SIZE(hvs_formats); i++) { ++ /* Don't allow YUV in cursor planes, since that means ++ * tuning on the scaler, which we don't allow for the ++ * cursor. ++ */ ++ if (type != DRM_PLANE_TYPE_CURSOR || ++ hvs_formats[i].hvs < HVS_PIXEL_FORMAT_YCBCR_YUV420_3PLANE) { ++ formats[num_formats++] = hvs_formats[i].drm; ++ } ++ } + plane = &vc4_plane->base; + ret = drm_universal_plane_init(dev, plane, 0xff, + &vc4_plane_funcs, +- formats, ARRAY_SIZE(formats), ++ formats, num_formats, + type, NULL); + + drm_plane_helper_add(plane, &vc4_plane_helper_funcs); +diff --git a/drivers/gpu/drm/vc4/vc4_regs.h b/drivers/gpu/drm/vc4/vc4_regs.h +index 4e52a0a..bf42a8e 100644 +--- a/drivers/gpu/drm/vc4/vc4_regs.h ++++ b/drivers/gpu/drm/vc4/vc4_regs.h +@@ -187,7 +187,7 @@ + # define PV_VCONTROL_CONTINUOUS BIT(1) + # define PV_VCONTROL_VIDEN BIT(0) + +-#define PV_VSYNCD 0x08 ++#define PV_VSYNCD_EVEN 0x08 + + #define PV_HORZA 0x0c + # define PV_HORZA_HBP_MASK VC4_MASK(31, 16) +@@ -350,6 +350,17 @@ + # define SCALER_DISPCTRLX_HEIGHT_SHIFT 0 + + #define SCALER_DISPBKGND0 0x00000044 ++# define SCALER_DISPBKGND_AUTOHS BIT(31) ++# define SCALER_DISPBKGND_INTERLACE BIT(30) ++# define SCALER_DISPBKGND_GAMMA BIT(29) ++# define SCALER_DISPBKGND_TESTMODE_MASK VC4_MASK(28, 25) ++# define SCALER_DISPBKGND_TESTMODE_SHIFT 25 ++/* Enables filling the scaler line with the RGB value in the low 24 ++ * bits before compositing. Costs cycles, so should be skipped if ++ * opaque display planes will cover everything. ++ */ ++# define SCALER_DISPBKGND_FILL BIT(24) ++ + #define SCALER_DISPSTAT0 0x00000048 + #define SCALER_DISPBASE0 0x0000004c + # define SCALER_DISPSTATX_MODE_MASK VC4_MASK(31, 30) +@@ -362,6 +373,9 @@ + # define SCALER_DISPSTATX_EMPTY BIT(28) + #define SCALER_DISPCTRL1 0x00000050 + #define SCALER_DISPBKGND1 0x00000054 ++#define SCALER_DISPBKGNDX(x) (SCALER_DISPBKGND0 + \ ++ (x) * (SCALER_DISPBKGND1 - \ ++ SCALER_DISPBKGND0)) + #define SCALER_DISPSTAT1 0x00000058 + #define SCALER_DISPSTATX(x) (SCALER_DISPSTAT0 + \ + (x) * (SCALER_DISPSTAT1 - \ +@@ -456,6 +470,8 @@ + #define VC4_HDMI_TX_PHY_RESET_CTL 0x2c0 + + #define VC4_HD_M_CTL 0x00c ++# define VC4_HD_M_REGISTER_FILE_STANDBY (3 << 6) ++# define VC4_HD_M_RAM_STANDBY (3 << 4) + # define VC4_HD_M_SW_RST BIT(2) + # define VC4_HD_M_ENABLE BIT(0) + +@@ -503,7 +519,12 @@ enum hvs_pixel_format { + HVS_PIXEL_FORMAT_RGB888 = 5, + HVS_PIXEL_FORMAT_RGBA6666 = 6, + /* 32bpp */ +- HVS_PIXEL_FORMAT_RGBA8888 = 7 ++ HVS_PIXEL_FORMAT_RGBA8888 = 7, ++ ++ HVS_PIXEL_FORMAT_YCBCR_YUV420_3PLANE = 8, ++ HVS_PIXEL_FORMAT_YCBCR_YUV420_2PLANE = 9, ++ HVS_PIXEL_FORMAT_YCBCR_YUV422_3PLANE = 10, ++ HVS_PIXEL_FORMAT_YCBCR_YUV422_2PLANE = 11, + }; + + /* Note: the LSB is the rightmost character shown. Only valid for +@@ -536,6 +557,21 @@ enum hvs_pixel_format { + #define SCALER_CTL0_ORDER_MASK VC4_MASK(14, 13) + #define SCALER_CTL0_ORDER_SHIFT 13 + ++#define SCALER_CTL0_SCL1_MASK VC4_MASK(10, 8) ++#define SCALER_CTL0_SCL1_SHIFT 8 ++ ++#define SCALER_CTL0_SCL0_MASK VC4_MASK(7, 5) ++#define SCALER_CTL0_SCL0_SHIFT 5 ++ ++#define SCALER_CTL0_SCL_H_PPF_V_PPF 0 ++#define SCALER_CTL0_SCL_H_TPZ_V_PPF 1 ++#define SCALER_CTL0_SCL_H_PPF_V_TPZ 2 ++#define SCALER_CTL0_SCL_H_TPZ_V_TPZ 3 ++#define SCALER_CTL0_SCL_H_PPF_V_NONE 4 ++#define SCALER_CTL0_SCL_H_NONE_V_PPF 5 ++#define SCALER_CTL0_SCL_H_NONE_V_TPZ 6 ++#define SCALER_CTL0_SCL_H_TPZ_V_NONE 7 ++ + /* Set to indicate no scaling. */ + #define SCALER_CTL0_UNITY BIT(4) + +@@ -551,6 +587,12 @@ enum hvs_pixel_format { + #define SCALER_POS0_START_X_MASK VC4_MASK(11, 0) + #define SCALER_POS0_START_X_SHIFT 0 + ++#define SCALER_POS1_SCL_HEIGHT_MASK VC4_MASK(27, 16) ++#define SCALER_POS1_SCL_HEIGHT_SHIFT 16 ++ ++#define SCALER_POS1_SCL_WIDTH_MASK VC4_MASK(11, 0) ++#define SCALER_POS1_SCL_WIDTH_SHIFT 0 ++ + #define SCALER_POS2_ALPHA_MODE_MASK VC4_MASK(31, 30) + #define SCALER_POS2_ALPHA_MODE_SHIFT 30 + #define SCALER_POS2_ALPHA_MODE_PIPELINE 0 +@@ -564,6 +606,80 @@ enum hvs_pixel_format { + #define SCALER_POS2_WIDTH_MASK VC4_MASK(11, 0) + #define SCALER_POS2_WIDTH_SHIFT 0 + ++/* Color Space Conversion words. Some values are S2.8 signed ++ * integers, except that the 2 integer bits map as {0x0: 0, 0x1: 1, ++ * 0x2: 2, 0x3: -1} ++ */ ++/* bottom 8 bits of S2.8 contribution of Cr to Blue */ ++#define SCALER_CSC0_COEF_CR_BLU_MASK VC4_MASK(31, 24) ++#define SCALER_CSC0_COEF_CR_BLU_SHIFT 24 ++/* Signed offset to apply to Y before CSC. (Y' = Y + YY_OFS) */ ++#define SCALER_CSC0_COEF_YY_OFS_MASK VC4_MASK(23, 16) ++#define SCALER_CSC0_COEF_YY_OFS_SHIFT 16 ++/* Signed offset to apply to CB before CSC (Cb' = Cb - 128 + CB_OFS). */ ++#define SCALER_CSC0_COEF_CB_OFS_MASK VC4_MASK(15, 8) ++#define SCALER_CSC0_COEF_CB_OFS_SHIFT 8 ++/* Signed offset to apply to CB before CSC (Cr' = Cr - 128 + CR_OFS). */ ++#define SCALER_CSC0_COEF_CR_OFS_MASK VC4_MASK(7, 0) ++#define SCALER_CSC0_COEF_CR_OFS_SHIFT 0 ++#define SCALER_CSC0_ITR_R_601_5 0x00f00000 ++#define SCALER_CSC0_ITR_R_709_3 0x00f00000 ++#define SCALER_CSC0_JPEG_JFIF 0x00000000 ++ ++/* S2.8 contribution of Cb to Green */ ++#define SCALER_CSC1_COEF_CB_GRN_MASK VC4_MASK(31, 22) ++#define SCALER_CSC1_COEF_CB_GRN_SHIFT 22 ++/* S2.8 contribution of Cr to Green */ ++#define SCALER_CSC1_COEF_CR_GRN_MASK VC4_MASK(21, 12) ++#define SCALER_CSC1_COEF_CR_GRN_SHIFT 12 ++/* S2.8 contribution of Y to all of RGB */ ++#define SCALER_CSC1_COEF_YY_ALL_MASK VC4_MASK(11, 2) ++#define SCALER_CSC1_COEF_YY_ALL_SHIFT 2 ++/* top 2 bits of S2.8 contribution of Cr to Blue */ ++#define SCALER_CSC1_COEF_CR_BLU_MASK VC4_MASK(1, 0) ++#define SCALER_CSC1_COEF_CR_BLU_SHIFT 0 ++#define SCALER_CSC1_ITR_R_601_5 0xe73304a8 ++#define SCALER_CSC1_ITR_R_709_3 0xf2b784a8 ++#define SCALER_CSC1_JPEG_JFIF 0xea34a400 ++ ++/* S2.8 contribution of Cb to Red */ ++#define SCALER_CSC2_COEF_CB_RED_MASK VC4_MASK(29, 20) ++#define SCALER_CSC2_COEF_CB_RED_SHIFT 20 ++/* S2.8 contribution of Cr to Red */ ++#define SCALER_CSC2_COEF_CR_RED_MASK VC4_MASK(19, 10) ++#define SCALER_CSC2_COEF_CR_RED_SHIFT 10 ++/* S2.8 contribution of Cb to Blue */ ++#define SCALER_CSC2_COEF_CB_BLU_MASK VC4_MASK(19, 10) ++#define SCALER_CSC2_COEF_CB_BLU_SHIFT 10 ++#define SCALER_CSC2_ITR_R_601_5 0x00066204 ++#define SCALER_CSC2_ITR_R_709_3 0x00072a1c ++#define SCALER_CSC2_JPEG_JFIF 0x000599c5 ++ ++#define SCALER_TPZ0_VERT_RECALC BIT(31) ++#define SCALER_TPZ0_SCALE_MASK VC4_MASK(28, 8) ++#define SCALER_TPZ0_SCALE_SHIFT 8 ++#define SCALER_TPZ0_IPHASE_MASK VC4_MASK(7, 0) ++#define SCALER_TPZ0_IPHASE_SHIFT 0 ++#define SCALER_TPZ1_RECIP_MASK VC4_MASK(15, 0) ++#define SCALER_TPZ1_RECIP_SHIFT 0 ++ ++/* Skips interpolating coefficients to 64 phases, so just 8 are used. ++ * Required for nearest neighbor. ++ */ ++#define SCALER_PPF_NOINTERP BIT(31) ++/* Replaes the highest valued coefficient with one that makes all 4 ++ * sum to unity. ++ */ ++#define SCALER_PPF_AGC BIT(30) ++#define SCALER_PPF_SCALE_MASK VC4_MASK(24, 8) ++#define SCALER_PPF_SCALE_SHIFT 8 ++#define SCALER_PPF_IPHASE_MASK VC4_MASK(6, 0) ++#define SCALER_PPF_IPHASE_SHIFT 0 ++ ++#define SCALER_PPF_KERNEL_OFFSET_MASK VC4_MASK(13, 0) ++#define SCALER_PPF_KERNEL_OFFSET_SHIFT 0 ++#define SCALER_PPF_KERNEL_UNCACHED BIT(31) ++ + #define SCALER_SRC_PITCH_MASK VC4_MASK(15, 0) + #define SCALER_SRC_PITCH_SHIFT 0 + +diff --git a/drivers/gpu/drm/vc4/vc4_v3d.c b/drivers/gpu/drm/vc4/vc4_v3d.c +index 31de5d1..e6d3c60 100644 +--- a/drivers/gpu/drm/vc4/vc4_v3d.c ++++ b/drivers/gpu/drm/vc4/vc4_v3d.c +@@ -268,6 +268,7 @@ static int vc4_v3d_dev_remove(struct platform_device *pdev) + } + + static const struct of_device_id vc4_v3d_dt_match[] = { ++ { .compatible = "brcm,bcm2835-v3d" }, + { .compatible = "brcm,vc4-v3d" }, + {} + }; +diff --git a/drivers/tty/serial/8250/8250_bcm2835aux.c b/drivers/tty/serial/8250/8250_bcm2835aux.c +new file mode 100644 +index 0000000..ecf89f1 +--- /dev/null ++++ b/drivers/tty/serial/8250/8250_bcm2835aux.c +@@ -0,0 +1,146 @@ ++/* ++ * Serial port driver for BCM2835AUX UART ++ * ++ * Copyright (C) 2016 Martin Sperl ++ * ++ * Based on 8250_lpc18xx.c: ++ * Copyright (C) 2015 Joachim Eastwood ++ * ++ * 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 ++#include ++#include ++#include ++#include ++ ++#include "8250.h" ++ ++struct bcm2835aux_data { ++ struct uart_8250_port uart; ++ struct clk *clk; ++ int line; ++}; ++ ++static int bcm2835aux_serial_probe(struct platform_device *pdev) ++{ ++ struct bcm2835aux_data *data; ++ struct resource *res; ++ int ret; ++ ++ /* allocate the custom structure */ ++ data = devm_kzalloc(&pdev->dev, sizeof(*data), GFP_KERNEL); ++ if (!data) ++ return -ENOMEM; ++ ++ /* initialize data */ ++ spin_lock_init(&data->uart.port.lock); ++ data->uart.capabilities = UART_CAP_FIFO; ++ data->uart.port.dev = &pdev->dev; ++ data->uart.port.regshift = 2; ++ data->uart.port.type = PORT_16550; ++ data->uart.port.iotype = UPIO_MEM; ++ data->uart.port.fifosize = 8; ++ data->uart.port.flags = UPF_SHARE_IRQ | ++ UPF_FIXED_PORT | ++ UPF_FIXED_TYPE | ++ UPF_SKIP_TEST; ++ ++ /* get the clock - this also enables the HW */ ++ data->clk = devm_clk_get(&pdev->dev, NULL); ++ ret = PTR_ERR_OR_ZERO(data->clk); ++ if (ret) { ++ dev_err(&pdev->dev, "could not get clk: %d\n", ret); ++ return ret; ++ } ++ ++ /* get the interrupt */ ++ data->uart.port.irq = platform_get_irq(pdev, 0); ++ if (data->uart.port.irq < 0) { ++ dev_err(&pdev->dev, "irq not found - %i", ++ data->uart.port.irq); ++ return data->uart.port.irq; ++ } ++ ++ /* map the main registers */ ++ res = platform_get_resource(pdev, IORESOURCE_MEM, 0); ++ if (!res) { ++ dev_err(&pdev->dev, "memory resource not found"); ++ return -EINVAL; ++ } ++ data->uart.port.membase = devm_ioremap_resource(&pdev->dev, res); ++ ret = PTR_ERR_OR_ZERO(data->uart.port.membase); ++ if (ret) ++ return ret; ++ ++ /* Check for a fixed line number */ ++ ret = of_alias_get_id(pdev->dev.of_node, "serial"); ++ if (ret >= 0) ++ data->uart.port.line = ret; ++ ++ /* enable the clock as a last step */ ++ ret = clk_prepare_enable(data->clk); ++ if (ret) { ++ dev_err(&pdev->dev, "unable to enable uart clock - %d\n", ++ ret); ++ return ret; ++ } ++ ++ /* the HW-clock divider for bcm2835aux is 8, ++ * but 8250 expects a divider of 16, ++ * so we have to multiply the actual clock by 2 ++ * to get identical baudrates. ++ */ ++ data->uart.port.uartclk = clk_get_rate(data->clk) * 2; ++ ++ /* register the port */ ++ ret = serial8250_register_8250_port(&data->uart); ++ if (ret < 0) { ++ dev_err(&pdev->dev, "unable to register 8250 port - %d\n", ++ ret); ++ goto dis_clk; ++ } ++ data->line = ret; ++ ++ platform_set_drvdata(pdev, data); ++ ++ return 0; ++ ++dis_clk: ++ clk_disable_unprepare(data->clk); ++ return ret; ++} ++ ++static int bcm2835aux_serial_remove(struct platform_device *pdev) ++{ ++ struct bcm2835aux_data *data = platform_get_drvdata(pdev); ++ ++ serial8250_unregister_port(data->uart.port.line); ++ clk_disable_unprepare(data->clk); ++ ++ return 0; ++} ++ ++static const struct of_device_id bcm2835aux_serial_match[] = { ++ { .compatible = "brcm,bcm2835-aux-uart" }, ++ { }, ++}; ++MODULE_DEVICE_TABLE(of, bcm2835aux_serial_match); ++ ++static struct platform_driver bcm2835aux_serial_driver = { ++ .driver = { ++ .name = "bcm2835-aux-uart", ++ .of_match_table = bcm2835aux_serial_match, ++ }, ++ .probe = bcm2835aux_serial_probe, ++ .remove = bcm2835aux_serial_remove, ++}; ++module_platform_driver(bcm2835aux_serial_driver); ++ ++MODULE_DESCRIPTION("BCM2835 auxiliar UART driver"); ++MODULE_AUTHOR("Martin Sperl "); ++MODULE_LICENSE("GPL v2"); +diff --git a/drivers/tty/serial/8250/Kconfig b/drivers/tty/serial/8250/Kconfig +index b03cb517..67ad6b0 100644 +--- a/drivers/tty/serial/8250/Kconfig ++++ b/drivers/tty/serial/8250/Kconfig +@@ -272,6 +272,30 @@ config SERIAL_8250_ACORN + system, say Y to this option. The driver can handle 1, 2, or 3 port + cards. If unsure, say N. + ++config SERIAL_8250_BCM2835AUX ++ tristate "BCM2835 auxiliar mini UART support" ++ depends on ARCH_BCM2835 || COMPILE_TEST ++ depends on SERIAL_8250 && SERIAL_8250_SHARE_IRQ ++ help ++ Support for the BCM2835 auxiliar mini UART. ++ ++ Features and limitations of the UART are ++ Registers are similar to 16650 registers, ++ set bits in the control registers that are unsupported ++ are ignored and read back as 0 ++ 7/8 bit operation with 1 start and 1 stop bit ++ 8 symbols deep fifo for rx and tx ++ SW controlled RTS and SW readable CTS ++ Clock rate derived from system clock ++ Uses 8 times oversampling (compared to 16 times for 16650) ++ Missing break detection (but break generation) ++ Missing framing error detection ++ Missing parity bit ++ Missing receive time-out interrupt ++ Missing DCD, DSR, DTR and RI signals ++ ++ If unsure, say N. ++ + config SERIAL_8250_FSL + bool + depends on SERIAL_8250_CONSOLE +diff --git a/drivers/tty/serial/8250/Makefile b/drivers/tty/serial/8250/Makefile +index b9b9bca..5c1869f 100644 +--- a/drivers/tty/serial/8250/Makefile ++++ b/drivers/tty/serial/8250/Makefile +@@ -12,6 +12,7 @@ obj-$(CONFIG_SERIAL_8250_PCI) += 8250_pci.o + obj-$(CONFIG_SERIAL_8250_HP300) += 8250_hp300.o + obj-$(CONFIG_SERIAL_8250_CS) += serial_cs.o + obj-$(CONFIG_SERIAL_8250_ACORN) += 8250_acorn.o ++obj-$(CONFIG_SERIAL_8250_BCM2835AUX) += 8250_bcm2835aux.o + obj-$(CONFIG_SERIAL_8250_CONSOLE) += 8250_early.o + obj-$(CONFIG_SERIAL_8250_FOURPORT) += 8250_fourport.o + obj-$(CONFIG_SERIAL_8250_ACCENT) += 8250_accent.o +-- +2.5.0 + diff --git a/config-armv7-generic b/config-armv7-generic index 563811d20..54f3f4849 100644 --- a/config-armv7-generic +++ b/config-armv7-generic @@ -50,6 +50,7 @@ CONFIG_CPU_SW_DOMAIN_PAN=y # CONFIG_ARM_VIRT_EXT is not set # Platforms enabled/disabled globally on ARMv7 +CONFIG_ARCH_BCM=y CONFIG_ARCH_BCM2835=y CONFIG_ARCH_EXYNOS=y CONFIG_ARCH_HIGHBANK=y @@ -57,7 +58,13 @@ CONFIG_ARCH_SUNXI=y CONFIG_ARCH_TEGRA=y CONFIG_ARCH_VEXPRESS_CORTEX_A5_A9_ERRATA=y CONFIG_ARCH_VIRT=y -# CONFIG_ARCH_BCM is not set +# CONFIG_ARCH_BCM_CYGNUS is not set +# CONFIG_ARCH_BCM_NSP is not set +# CONFIG_ARCH_BCM_5301X is not set +# CONFIG_ARCH_BCM_281XX is not set +# CONFIG_ARCH_BCM_21664 is not set +# CONFIG_ARCH_BCM_63XX is not set +# CONFIG_ARCH_BRCMSTB is not set # CONFIG_ARCH_BERLIN is not set # CONFIG_ARCH_HI3xxx is not set # CONFIG_ARCH_HISI is not set @@ -233,6 +240,7 @@ CONFIG_NVMEM_SUNXI_SID=m # BCM 283x CONFIG_SERIAL_AMBA_PL011=y CONFIG_SERIAL_AMBA_PL011_CONSOLE=y +CONFIG_SERIAL_8250_BCM2835AUX=y CONFIG_DMA_BCM2835=m CONFIG_MMC_SDHCI_BCM2835=m CONFIG_BCM2835_MBOX=m diff --git a/Geekbox-device-tree-support.patch b/geekbox-v4-device-tree-support.patch similarity index 86% rename from Geekbox-device-tree-support.patch rename to geekbox-v4-device-tree-support.patch index 51caf8aaf..77c1e5c28 100644 --- a/Geekbox-device-tree-support.patch +++ b/geekbox-v4-device-tree-support.patch @@ -1,19 +1,21 @@ -From a516bbf04744817e49e173b2a217a2a6366b5f9c Mon Sep 17 00:00:00 2001 +From 4d321bf15d2d5e5b1b674f2a26a1c5202090a800 Mon Sep 17 00:00:00 2001 From: Peter Robinson -Date: Wed, 2 Mar 2016 18:12:09 +0000 -Subject: [PATCH] Geekbox device tree support +Date: Thu, 17 Mar 2016 15:19:04 +0000 +Subject: [PATCH] geekbox v4 patchset --- Documentation/devicetree/bindings/arm/rockchip.txt | 9 + arch/arm64/boot/dts/rockchip/Makefile | 2 + - .../dts/rockchip/rk3368-geekbox-landingship.dts | 56 ++++ - arch/arm64/boot/dts/rockchip/rk3368-geekbox.dts | 321 +++++++++++++++++++++ - 4 files changed, 388 insertions(+) + arch/arm64/boot/dts/rockchip/rk3368-evb.dtsi | 2 +- + .../dts/rockchip/rk3368-geekbox-landingship.dts | 57 ++++ + arch/arm64/boot/dts/rockchip/rk3368-geekbox.dts | 319 +++++++++++++++++++++ + arch/arm64/boot/dts/rockchip/rk3368-r88.dts | 2 +- + 6 files changed, 389 insertions(+), 2 deletions(-) create mode 100644 arch/arm64/boot/dts/rockchip/rk3368-geekbox-landingship.dts create mode 100644 arch/arm64/boot/dts/rockchip/rk3368-geekbox.dts diff --git a/Documentation/devicetree/bindings/arm/rockchip.txt b/Documentation/devicetree/bindings/arm/rockchip.txt -index 078c14f..c6d95f2 100644 +index 078c14f..ae84f4e 100644 --- a/Documentation/devicetree/bindings/arm/rockchip.txt +++ b/Documentation/devicetree/bindings/arm/rockchip.txt @@ -87,6 +87,15 @@ Rockchip platforms device tree bindings @@ -24,9 +26,9 @@ index 078c14f..c6d95f2 100644 + Required root node properties: + - compatible = "geekbuying,geekbox", "rockchip,rk3368"; + -+- GeekBuying Landingship: ++- GeekBuying Landingship with GeekBox module: + Required root node properties: -+ - compatible = "geekbuying,landingship", ++ - compatible = "geekbuying,geekbox-landingship", + "geekbuying,geekbox", "rockchip,rk3368"; + - Rockchip RK3368 evb: @@ -43,12 +45,25 @@ index e3f0b5f..201bcd9 100644 dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3368-r88.dtb always := $(dtb-y) +diff --git a/arch/arm64/boot/dts/rockchip/rk3368-evb.dtsi b/arch/arm64/boot/dts/rockchip/rk3368-evb.dtsi +index 8c219cc..e4ceb53 100644 +--- a/arch/arm64/boot/dts/rockchip/rk3368-evb.dtsi ++++ b/arch/arm64/boot/dts/rockchip/rk3368-evb.dtsi +@@ -48,7 +48,7 @@ + stdout-path = "serial2:115200n8"; + }; + +- memory { ++ memory@0 { + device_type = "memory"; + reg = <0x0 0x0 0x0 0x40000000>; + }; diff --git a/arch/arm64/boot/dts/rockchip/rk3368-geekbox-landingship.dts b/arch/arm64/boot/dts/rockchip/rk3368-geekbox-landingship.dts new file mode 100644 -index 0000000..e4a1175 +index 0000000..a28ace9 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3368-geekbox-landingship.dts -@@ -0,0 +1,56 @@ +@@ -0,0 +1,57 @@ +/* + * Copyright (c) 2016 Andreas Färber + * @@ -95,11 +110,12 @@ index 0000000..e4a1175 + +/ { + model = "GeekBox on Landingship"; -+ compatible = "geekbuying,landingship", "geekbuying,geekbox", "rockchip,rk3368"; ++ compatible = "geekbuying,geekbox-landingship", ++ "geekbuying,geekbox", "rockchip,rk3368"; +}; + +&i2c1 { -+ status = "okay"; ++ status = "disabled"; +}; + +&i2c2 { @@ -107,10 +123,10 @@ index 0000000..e4a1175 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3368-geekbox.dts b/arch/arm64/boot/dts/rockchip/rk3368-geekbox.dts new file mode 100644 -index 0000000..7e51876 +index 0000000..46cdddf --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3368-geekbox.dts -@@ -0,0 +1,321 @@ +@@ -0,0 +1,319 @@ +/* + * Copyright (c) 2016 Andreas Färber + * @@ -155,6 +171,7 @@ index 0000000..7e51876 + +/dts-v1/; +#include "rk3368.dtsi" ++#include + +/ { + model = "GeekBox"; @@ -164,7 +181,7 @@ index 0000000..7e51876 + stdout-path = "serial2:115200n8"; + }; + -+ memory { ++ memory@0 { + device_type = "memory"; + reg = <0x0 0x0 0x0 0x80000000>; + }; @@ -187,15 +204,12 @@ index 0000000..7e51876 + compatible = "gpio-keys"; + pinctrl-names = "default"; + pinctrl-0 = <&pwr_key>; -+ #address-cells = <1>; -+ #size-cells = <0>; + -+ button@0 { -+ reg = <0>; -+ gpio-key,wakeup = <1>; ++ power { + gpios = <&gpio0 2 GPIO_ACTIVE_LOW>; + label = "GPIO Power"; -+ linux,code = <116>; ++ linux,code = ; ++ wakeup-source; + }; + }; + @@ -390,13 +404,13 @@ index 0000000..7e51876 +&pinctrl { + ir { + ir_int: ir-int { -+ rockchip,pins = <3 30 RK_FUNC_GPIO &pcfg_pull_up>; ++ rockchip,pins = <3 30 RK_FUNC_GPIO &pcfg_pull_none>; + }; + }; + + keys { + pwr_key: pwr-key { -+ rockchip,pins = <0 2 RK_FUNC_GPIO &pcfg_pull_up>; ++ rockchip,pins = <0 2 RK_FUNC_GPIO &pcfg_pull_none>; + }; + }; + @@ -414,7 +428,7 @@ index 0000000..7e51876 +&tsadc { + status = "okay"; + rockchip,hw-tshut-mode = <0>; /* CRU */ -+ rockchip,hw-tshut-polarity = <0>; /* low */ ++ rockchip,hw-tshut-polarity = <1>; /* high */ +}; + +&uart2 { @@ -432,6 +446,19 @@ index 0000000..7e51876 +&wdt { + status = "okay"; +}; +diff --git a/arch/arm64/boot/dts/rockchip/rk3368-r88.dts b/arch/arm64/boot/dts/rockchip/rk3368-r88.dts +index 104cbee..9548129 100644 +--- a/arch/arm64/boot/dts/rockchip/rk3368-r88.dts ++++ b/arch/arm64/boot/dts/rockchip/rk3368-r88.dts +@@ -51,7 +51,7 @@ + stdout-path = "serial2:115200n8"; + }; + +- memory { ++ memory@0 { + device_type = "memory"; + reg = <0x0 0x0 0x0 0x40000000>; + }; -- 2.5.0 diff --git a/kernel.spec b/kernel.spec index 9c7d5aa4f..86d4b9f46 100644 --- a/kernel.spec +++ b/kernel.spec @@ -497,9 +497,13 @@ Source5005: kbuild-AFTER_LINK.patch # Standalone patches -Patch451: lib-cpumask-Make-CPUMASK_OFFSTACK-usable-without-deb.patch +# http://www.spinics.net/lists/netdev/msg369442.html +Patch452: revert-stmmac-Fix-eth0-No-PHY-found-regression.patch +Patch453: stmmac-fix-MDIO-settings.patch -Patch454: arm64-avoid-needing-console-to-enable-serial-console.patch +Patch454: bcm283x-add-aux-uart-support-extra-DT-bits-initial-r.patch + +Patch455: arm64-avoid-needing-console-to-enable-serial-console.patch Patch456: arm64-acpi-drop-expert-patch.patch @@ -508,8 +512,8 @@ Patch457: ARM-tegra-usb-no-reset.patch Patch458: ARM-mvebu-change-order-of-ethernet-DT-nodes-on-Armada-38x.patch -# http://www.spinics.net/lists/arm-kernel/msg480703.html -Patch459: Geekbox-device-tree-support.patch +# http://www.spinics.net/lists/arm-kernel/msg490981.html +Patch459: geekbox-v4-device-tree-support.patch # http://www.spinics.net/lists/arm-kernel/msg483898.html Patch460: Initial-AllWinner-A64-and-PINE64-support.patch @@ -519,6 +523,8 @@ Patch461: Fix-tegra-to-use-stdout-path-for-serial-console.patch Patch463: arm-i.MX6-Utilite-device-dtb.patch +Patch465: lib-cpumask-Make-CPUMASK_OFFSTACK-usable-without-deb.patch + Patch466: input-kill-stupid-messages.patch Patch467: die-floppy-die.patch @@ -2170,6 +2176,11 @@ fi # # %changelog +* Fri Mar 18 2016 Peter Robinson +- Upstream fix for stmmac driver regressions (AllWinner Gb NICs) +- Update various ARM device support patches +- General ARM updates + * Fri Mar 18 2016 Josh Boyer - ims-pcu: sanity checking on missing interfaces - CVE-2016-3140 digi_acceleport: oops on invalid USB descriptors (rhbz 1317010 1316995) @@ -2183,7 +2194,7 @@ fi * Wed Mar 16 2016 Josh Boyer - CVE-2016-3135 ipv4: DoS when destroying a network interface (rhbz 1318172 1318270) -* Mon Mar 14 2016 Justin M. Forbes - 4.5.0-1 +* Mon Mar 14 2016 Justin M. Forbes - 4.5.0-300 - Linux v4.5 - Disable debugging options. diff --git a/revert-stmmac-Fix-eth0-No-PHY-found-regression.patch b/revert-stmmac-Fix-eth0-No-PHY-found-regression.patch new file mode 100644 index 000000000..68b9cd3ab --- /dev/null +++ b/revert-stmmac-Fix-eth0-No-PHY-found-regression.patch @@ -0,0 +1,87 @@ +From 44f947bb8ef5f4add9f2d84e1ff53afd8f2f5537 Mon Sep 17 00:00:00 2001 +From: Peter Robinson +Date: Wed, 16 Mar 2016 15:21:44 +0000 +Subject: [PATCH 1/2] Revert "stmmac: Fix 'eth0: No PHY found' regression" + +This reverts commit 88f8b1bb41c6208f81b6a480244533ded7b59493. +--- + drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c | 11 ++++++++++- + drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c | 9 +-------- + include/linux/stmmac.h | 1 - + 3 files changed, 11 insertions(+), 10 deletions(-) + +diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c +index efb54f3..0faf163 100644 +--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c ++++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c +@@ -199,12 +199,21 @@ int stmmac_mdio_register(struct net_device *ndev) + struct stmmac_priv *priv = netdev_priv(ndev); + struct stmmac_mdio_bus_data *mdio_bus_data = priv->plat->mdio_bus_data; + int addr, found; +- struct device_node *mdio_node = priv->plat->mdio_node; ++ struct device_node *mdio_node = NULL; ++ struct device_node *child_node = NULL; + + if (!mdio_bus_data) + return 0; + + if (IS_ENABLED(CONFIG_OF)) { ++ for_each_child_of_node(priv->device->of_node, child_node) { ++ if (of_device_is_compatible(child_node, ++ "snps,dwmac-mdio")) { ++ mdio_node = child_node; ++ break; ++ } ++ } ++ + if (mdio_node) { + netdev_dbg(ndev, "FOUND MDIO subnode\n"); + } else { +diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c +index 4514ba7..6a52fa1 100644 +--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c ++++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c +@@ -110,7 +110,6 @@ stmmac_probe_config_dt(struct platform_device *pdev, const char **mac) + struct device_node *np = pdev->dev.of_node; + struct plat_stmmacenet_data *plat; + struct stmmac_dma_cfg *dma_cfg; +- struct device_node *child_node = NULL; + + plat = devm_kzalloc(&pdev->dev, sizeof(*plat), GFP_KERNEL); + if (!plat) +@@ -141,19 +140,13 @@ stmmac_probe_config_dt(struct platform_device *pdev, const char **mac) + plat->phy_node = of_node_get(np); + } + +- for_each_child_of_node(np, child_node) +- if (of_device_is_compatible(child_node, "snps,dwmac-mdio")) { +- plat->mdio_node = child_node; +- break; +- } +- + /* "snps,phy-addr" is not a standard property. Mark it as deprecated + * and warn of its use. Remove this when phy node support is added. + */ + if (of_property_read_u32(np, "snps,phy-addr", &plat->phy_addr) == 0) + dev_warn(&pdev->dev, "snps,phy-addr property is deprecated\n"); + +- if ((plat->phy_node && !of_phy_is_fixed_link(np)) || !plat->mdio_node) ++ if ((plat->phy_node && !of_phy_is_fixed_link(np)) || plat->phy_bus_name) + plat->mdio_bus_data = NULL; + else + plat->mdio_bus_data = +diff --git a/include/linux/stmmac.h b/include/linux/stmmac.h +index 881a79d..eead8ab 100644 +--- a/include/linux/stmmac.h ++++ b/include/linux/stmmac.h +@@ -100,7 +100,6 @@ struct plat_stmmacenet_data { + int interface; + struct stmmac_mdio_bus_data *mdio_bus_data; + struct device_node *phy_node; +- struct device_node *mdio_node; + struct stmmac_dma_cfg *dma_cfg; + int clk_csr; + int has_gmac; +-- +2.5.0 + diff --git a/stmmac-fix-MDIO-settings.patch b/stmmac-fix-MDIO-settings.patch new file mode 100644 index 000000000..41fa928a4 --- /dev/null +++ b/stmmac-fix-MDIO-settings.patch @@ -0,0 +1,235 @@ +From d55a02f460ffd64a5ba7f331489af87edeebf8da Mon Sep 17 00:00:00 2001 +From: Giuseppe CAVALLARO +Date: Wed, 16 Mar 2016 10:38:49 +0100 +Subject: [PATCH 2/2] stmmac: fix MDIO settings +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Initially the phy_bus_name was added to manipulate the +driver name but it was recently just used to manage the +fixed-link and then to take some decision at run-time. +So the patch uses the is_pseudo_fixed_link and removes +the phy_bus_name variable not necessary anymore. + +The driver can manage the mdio registration by using phy-handle, +dwmac-mdio and own parameter e.g. snps,phy-addr. +This patch takes care about all these possible configurations +and fixes the mdio registration in case of there is a real +transceiver or a switch (that needs to be managed by using +fixed-link). + +Signed-off-by: Giuseppe Cavallaro +Reviewed-by: Andreas Färber +Tested-by: Frank Schäfer +Cc: Gabriel Fernandez +Cc: Dinh Nguyen +Cc: David S. Miller +Cc: Phil Reid +--- + drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 11 +-- + drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c | 19 +---- + .../net/ethernet/stmicro/stmmac/stmmac_platform.c | 84 +++++++++++++++++----- + include/linux/stmmac.h | 2 +- + 4 files changed, 71 insertions(+), 45 deletions(-) + +diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +index c21015b..389d7d0 100644 +--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c ++++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +@@ -271,7 +271,6 @@ static void stmmac_eee_ctrl_timer(unsigned long arg) + */ + bool stmmac_eee_init(struct stmmac_priv *priv) + { +- char *phy_bus_name = priv->plat->phy_bus_name; + unsigned long flags; + bool ret = false; + +@@ -283,7 +282,7 @@ bool stmmac_eee_init(struct stmmac_priv *priv) + goto out; + + /* Never init EEE in case of a switch is attached */ +- if (phy_bus_name && (!strcmp(phy_bus_name, "fixed"))) ++ if (priv->phydev->is_pseudo_fixed_link) + goto out; + + /* MAC core supports the EEE feature. */ +@@ -820,12 +819,8 @@ static int stmmac_init_phy(struct net_device *dev) + phydev = of_phy_connect(dev, priv->plat->phy_node, + &stmmac_adjust_link, 0, interface); + } else { +- if (priv->plat->phy_bus_name) +- snprintf(bus_id, MII_BUS_ID_SIZE, "%s-%x", +- priv->plat->phy_bus_name, priv->plat->bus_id); +- else +- snprintf(bus_id, MII_BUS_ID_SIZE, "stmmac-%x", +- priv->plat->bus_id); ++ snprintf(bus_id, MII_BUS_ID_SIZE, "stmmac-%x", ++ priv->plat->bus_id); + + snprintf(phy_id_fmt, MII_BUS_ID_SIZE + 3, PHY_ID_FMT, bus_id, + priv->plat->phy_addr); +diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c +index 0faf163..3f5512f 100644 +--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c ++++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c +@@ -198,29 +198,12 @@ int stmmac_mdio_register(struct net_device *ndev) + struct mii_bus *new_bus; + struct stmmac_priv *priv = netdev_priv(ndev); + struct stmmac_mdio_bus_data *mdio_bus_data = priv->plat->mdio_bus_data; ++ struct device_node *mdio_node = priv->plat->mdio_node; + int addr, found; +- struct device_node *mdio_node = NULL; +- struct device_node *child_node = NULL; + + if (!mdio_bus_data) + return 0; + +- if (IS_ENABLED(CONFIG_OF)) { +- for_each_child_of_node(priv->device->of_node, child_node) { +- if (of_device_is_compatible(child_node, +- "snps,dwmac-mdio")) { +- mdio_node = child_node; +- break; +- } +- } +- +- if (mdio_node) { +- netdev_dbg(ndev, "FOUND MDIO subnode\n"); +- } else { +- netdev_warn(ndev, "No MDIO subnode found\n"); +- } +- } +- + new_bus = mdiobus_alloc(); + if (new_bus == NULL) + return -ENOMEM; +diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c +index 6a52fa1..190fb6d 100644 +--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c ++++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c +@@ -96,6 +96,69 @@ static int dwmac1000_validate_ucast_entries(int ucast_entries) + } + + /** ++ * stmmac_dt_phy - parse device-tree driver parameters to allocate PHY resources ++ * @plat: driver data platform structure ++ * @np: device tree node ++ * @dev: device pointer ++ * Description: ++ * The mdio bus will be allocated in case of a phy transceiver is on board; ++ * it will be NULL if the fixed-link is configured. ++ * If there is the "snps,dwmac-mdio" sub-node the mdio will be allocated ++ * in any case (for DSA, mdio must be registered even if fixed-link). ++ * The table below sums the supported configurations: ++ * ------------------------------- ++ * snps,phy-addr | Y ++ * ------------------------------- ++ * phy-handle | Y ++ * ------------------------------- ++ * fixed-link | N ++ * ------------------------------- ++ * snps,dwmac-mdio | ++ * even if | Y ++ * fixed-link | ++ * ------------------------------- ++ * ++ * It returns 0 in case of success otherwise -ENODEV. ++ */ ++static int stmmac_dt_phy(struct plat_stmmacenet_data *plat, ++ struct device_node *np, struct device *dev) ++{ ++ bool mdio = true; ++ ++ /* If phy-handle property is passed from DT, use it as the PHY */ ++ plat->phy_node = of_parse_phandle(np, "phy-handle", 0); ++ if (plat->phy_node) ++ dev_dbg(dev, "Found phy-handle subnode\n"); ++ ++ /* If phy-handle is not specified, check if we have a fixed-phy */ ++ if (!plat->phy_node && of_phy_is_fixed_link(np)) { ++ if ((of_phy_register_fixed_link(np) < 0)) ++ return -ENODEV; ++ ++ dev_dbg(dev, "Found fixed-link subnode\n"); ++ plat->phy_node = of_node_get(np); ++ mdio = false; ++ } ++ ++ /* If snps,dwmac-mdio is passed from DT, always register the MDIO */ ++ for_each_child_of_node(np, plat->mdio_node) { ++ if (of_device_is_compatible(plat->mdio_node, "snps,dwmac-mdio")) ++ break; ++ } ++ ++ if (plat->mdio_node) { ++ dev_dbg(dev, "Found MDIO subnode\n"); ++ mdio = true; ++ } ++ ++ if (mdio) ++ plat->mdio_bus_data = ++ devm_kzalloc(dev, sizeof(struct stmmac_mdio_bus_data), ++ GFP_KERNEL); ++ return 0; ++} ++ ++/** + * stmmac_probe_config_dt - parse device-tree driver parameters + * @pdev: platform_device structure + * @plat: driver data platform structure +@@ -129,30 +192,15 @@ stmmac_probe_config_dt(struct platform_device *pdev, const char **mac) + /* Default to phy auto-detection */ + plat->phy_addr = -1; + +- /* If we find a phy-handle property, use it as the PHY */ +- plat->phy_node = of_parse_phandle(np, "phy-handle", 0); +- +- /* If phy-handle is not specified, check if we have a fixed-phy */ +- if (!plat->phy_node && of_phy_is_fixed_link(np)) { +- if ((of_phy_register_fixed_link(np) < 0)) +- return ERR_PTR(-ENODEV); +- +- plat->phy_node = of_node_get(np); +- } +- + /* "snps,phy-addr" is not a standard property. Mark it as deprecated + * and warn of its use. Remove this when phy node support is added. + */ + if (of_property_read_u32(np, "snps,phy-addr", &plat->phy_addr) == 0) + dev_warn(&pdev->dev, "snps,phy-addr property is deprecated\n"); + +- if ((plat->phy_node && !of_phy_is_fixed_link(np)) || plat->phy_bus_name) +- plat->mdio_bus_data = NULL; +- else +- plat->mdio_bus_data = +- devm_kzalloc(&pdev->dev, +- sizeof(struct stmmac_mdio_bus_data), +- GFP_KERNEL); ++ /* To Configure PHY by using all device-tree supported properties */ ++ if (stmmac_dt_phy(plat, np, &pdev->dev)) ++ return ERR_PTR(-ENODEV); + + of_property_read_u32(np, "tx-fifo-depth", &plat->tx_fifo_size); + +diff --git a/include/linux/stmmac.h b/include/linux/stmmac.h +index eead8ab..8b1ff2b 100644 +--- a/include/linux/stmmac.h ++++ b/include/linux/stmmac.h +@@ -94,12 +94,12 @@ struct stmmac_dma_cfg { + }; + + struct plat_stmmacenet_data { +- char *phy_bus_name; + int bus_id; + int phy_addr; + int interface; + struct stmmac_mdio_bus_data *mdio_bus_data; + struct device_node *phy_node; ++ struct device_node *mdio_node; + struct stmmac_dma_cfg *dma_cfg; + int clk_csr; + int has_gmac; +-- +2.5.0 + From c8706d96f4f88de3b503188bf425015b25c20e64 Mon Sep 17 00:00:00 2001 From: Peter Robinson Date: Sat, 19 Mar 2016 08:59:20 +0000 Subject: [PATCH 027/275] A few more ARM cleanups --- config-armv7 | 42 +----------------------------------------- config-armv7-generic | 3 ++- kernel.spec | 2 +- 3 files changed, 4 insertions(+), 43 deletions(-) diff --git a/config-armv7 b/config-armv7 index 0cce9bc04..1a040d692 100644 --- a/config-armv7 +++ b/config-armv7 @@ -8,7 +8,6 @@ CONFIG_ARCH_OMAP3=y CONFIG_ARCH_OMAP4=y CONFIG_ARCH_QCOM=y CONFIG_ARCH_TEGRA=y -CONFIG_ARCH_U8500=y CONFIG_ARCH_ZYNQ=y # These are supported in the LPAE kernel @@ -259,6 +258,7 @@ CONFIG_INPUT_TPS65218_PWRBUTTON=m CONFIG_VIDEO_AM437X_VPFE=m CONFIG_UIO_PRUSS=m CONFIG_WKUP_M3_RPROC=m +CONFIG_WKUP_M3_IPC=m # Builtin needed for BBone White CONFIG_MFD_TPS65217=y @@ -538,46 +538,6 @@ CONFIG_AK8975=m CONFIG_CM36651=m CONFIG_KEYBOARD_SAMSUNG=m -# ST Ericsson -CONFIG_MACH_HREFV60=y -CONFIG_MACH_SNOWBALL=y - -CONFIG_ABX500_CORE=y -# CONFIG_ARM_U8500_CPUIDLE is not set -CONFIG_UX500_DEBUG_UART=2 -CONFIG_AB8500_CORE=y -CONFIG_STE_DMA40=y -CONFIG_HSEM_U8500=m -CONFIG_PINCTRL_ABX500=y -CONFIG_PINCTRL_AB8500=y -CONFIG_I2C_NOMADIK=m -CONFIG_KEYBOARD_NOMADIK=m -CONFIG_DB8500_CPUFREQ_COOLING=m -CONFIG_DB8500_THERMAL=y -CONFIG_UX500_WATCHDOG=m -CONFIG_AHCI_ST=m -CONFIG_INPUT_AB8500_PONKEY=m -CONFIG_REGULATOR_AB8500=y -CONFIG_AB8500_USB=m -CONFIG_USB_MUSB_UX500=m -# CONFIG_USB_UX500_DMA is not set -CONFIG_RTC_DRV_AB8500=m -CONFIG_PWM_AB8500=m -CONFIG_SND_SOC_UX500=m -CONFIG_SND_SOC_UX500_PLAT_DMA=m -CONFIG_SND_SOC_UX500_MACH_MOP500=m -CONFIG_CLKSRC_DBX500_PRCMU=y -CONFIG_CLKSRC_DBX500_PRCMU_SCHED_CLOCK=y -CONFIG_CRYPTO_DEV_UX500=m -CONFIG_CRYPTO_DEV_UX500_CRYP=m -CONFIG_CRYPTO_DEV_UX500_HASH=m -CONFIG_SENSORS_LIS3_I2C=m -CONFIG_AB8500_BM=y -CONFIG_AB8500_GPADC=y -CONFIG_SENSORS_AB8500=m -CONFIG_STE_MODEM_RPROC=m -CONFIG_STIH415_RESET=y - # Allwinner CONFIG_MACH_SUN4I=y CONFIG_MACH_SUN5I=y diff --git a/config-armv7-generic b/config-armv7-generic index 54f3f4849..e5d10e198 100644 --- a/config-armv7-generic +++ b/config-armv7-generic @@ -252,7 +252,8 @@ CONFIG_SPI_BCM2835AUX=m CONFIG_BCM2835_WDT=m CONFIG_SND_BCM2835_SOC_I2S=m CONFIG_DRM_VC4=m -CONFIG_RASPBERRYPI_FIRMWARE=m +CONFIG_RASPBERRYPI_FIRMWARE=y +CONFIG_RASPBERRYPI_POWER=y # Exynos CONFIG_ARCH_EXYNOS3=y diff --git a/kernel.spec b/kernel.spec index 86d4b9f46..85564e385 100644 --- a/kernel.spec +++ b/kernel.spec @@ -2176,7 +2176,7 @@ fi # # %changelog -* Fri Mar 18 2016 Peter Robinson +* Sat Mar 19 2016 Peter Robinson - Upstream fix for stmmac driver regressions (AllWinner Gb NICs) - Update various ARM device support patches - General ARM updates From 8cd8f7618f6a44e1c403dcb32d28c9fdedde17ca Mon Sep 17 00:00:00 2001 From: Peter Robinson Date: Sat, 19 Mar 2016 10:26:18 +0000 Subject: [PATCH 028/275] build a 301 --- kernel.spec | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kernel.spec b/kernel.spec index 85564e385..06cb31748 100644 --- a/kernel.spec +++ b/kernel.spec @@ -42,7 +42,7 @@ Summary: The Linux kernel # For non-released -rc kernels, this will be appended after the rcX and # gitX tags, so a 3 here would become part of release "0.rcX.gitX.3" # -%global baserelease 300 +%global baserelease 301 %global fedora_build %{baserelease} # base_sublevel is the kernel version we're starting with and patching @@ -2176,7 +2176,7 @@ fi # # %changelog -* Sat Mar 19 2016 Peter Robinson +* Sat Mar 19 2016 Peter Robinson 4.5.0-301 - Upstream fix for stmmac driver regressions (AllWinner Gb NICs) - Update various ARM device support patches - General ARM updates From b77dc98b4a2ca44832231ca1248f8159f0e14b0f Mon Sep 17 00:00:00 2001 From: Laura Abbott Date: Mon, 21 Mar 2016 10:27:34 -0700 Subject: [PATCH 029/275] Misc fixes - uas: Limit qdepth at the scsi-host level (rhbz 1315013) - Fix for performance regression caused by thermal (rhbz 1317190) - Input: synaptics - handle spurious release of trackstick buttons, again (rhbz 1318079) --- ...handle-spurious-release-of-trackstic.patch | 31 ++++++++ ...-Limit-qdepth-at-the-scsi-host-level.patch | 45 +++++++++++ kernel.spec | 14 ++++ thermal-fix.patch | 77 +++++++++++++++++++ 4 files changed, 167 insertions(+) create mode 100644 0001-Input-synaptics-handle-spurious-release-of-trackstic.patch create mode 100644 0001-uas-Limit-qdepth-at-the-scsi-host-level.patch create mode 100644 thermal-fix.patch diff --git a/0001-Input-synaptics-handle-spurious-release-of-trackstic.patch b/0001-Input-synaptics-handle-spurious-release-of-trackstic.patch new file mode 100644 index 000000000..52b082b36 --- /dev/null +++ b/0001-Input-synaptics-handle-spurious-release-of-trackstic.patch @@ -0,0 +1,31 @@ +From cb6fcfe5a7e9197ceb7e9eec56e9c526e4e76354 Mon Sep 17 00:00:00 2001 +From: Benjamin Tissoires +Date: Mon, 14 Mar 2016 19:37:12 +0100 +Subject: [PATCH] Input: synaptics - handle spurious release of trackstick + buttons, again + +Looks like the fimware 8.2 stall has the extra buttons spurious release +bug. + +Signed-off-by: Benjamin Tissoires +--- + drivers/input/mouse/synaptics.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c +index 6025eb4..4ef8d7a 100644 +--- a/drivers/input/mouse/synaptics.c ++++ b/drivers/input/mouse/synaptics.c +@@ -863,7 +863,8 @@ static void synaptics_report_ext_buttons(struct psmouse *psmouse, + return; + + /* Bug in FW 8.1, buttons are reported only when ExtBit is 1 */ +- if (SYN_ID_FULL(priv->identity) == 0x801 && ++ if ((SYN_ID_FULL(priv->identity) == 0x801 || ++ SYN_ID_FULL(priv->identity) == 0x802) && + !((psmouse->packet[0] ^ psmouse->packet[3]) & 0x02)) + return; + +-- +2.5.0 + diff --git a/0001-uas-Limit-qdepth-at-the-scsi-host-level.patch b/0001-uas-Limit-qdepth-at-the-scsi-host-level.patch new file mode 100644 index 000000000..b6c446829 --- /dev/null +++ b/0001-uas-Limit-qdepth-at-the-scsi-host-level.patch @@ -0,0 +1,45 @@ +From 79abe2bd501d628b165f323098d6972d69bd13d7 Mon Sep 17 00:00:00 2001 +From: Hans de Goede +Date: Wed, 16 Mar 2016 13:20:51 +0100 +Subject: [PATCH] uas: Limit qdepth at the scsi-host level + +Commit 64d513ac31bd ("scsi: use host wide tags by default") causes +the scsi-core to queue more cmnds then we can handle on devices with +multiple LUNs, limit the qdepth at the scsi-host level instead of +per slave to fix this. + +BugLink: https://bugzilla.redhat.com/show_bug.cgi?id=1315013 +Cc: stable@vger.kernel.org # 4.4.x and 4.5.x +Signed-off-by: Hans de Goede +--- + drivers/usb/storage/uas.c | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +diff --git a/drivers/usb/storage/uas.c b/drivers/usb/storage/uas.c +index c90a7e4..b5cb7ab 100644 +--- a/drivers/usb/storage/uas.c ++++ b/drivers/usb/storage/uas.c +@@ -800,7 +800,6 @@ static int uas_slave_configure(struct scsi_device *sdev) + if (devinfo->flags & US_FL_BROKEN_FUA) + sdev->broken_fua = 1; + +- scsi_change_queue_depth(sdev, devinfo->qdepth - 2); + return 0; + } + +@@ -932,6 +931,12 @@ static int uas_probe(struct usb_interface *intf, const struct usb_device_id *id) + if (result) + goto set_alt0; + ++ /* ++ * 1 tag is reserved for untagged commands + ++ * 1 tag to avoid of by one errors in some bridge firmwares ++ */ ++ shost->can_queue = devinfo->qdepth - 2; ++ + usb_set_intfdata(intf, shost); + result = scsi_add_host(shost, &intf->dev); + if (result) +-- +2.7.3 + diff --git a/kernel.spec b/kernel.spec index 06cb31748..3da13b621 100644 --- a/kernel.spec +++ b/kernel.spec @@ -655,6 +655,15 @@ Patch677: digi_acceleport-do-sanity-checking-for-the-number-of.patch Patch678: ims-pcu-sanity-check-against-missing-interfaces.patch +#rhbz 1315013 +Patch679: 0001-uas-Limit-qdepth-at-the-scsi-host-level.patch + +#rhbz 1317190 +Patch680: thermal-fix.patch + +#rhbz 1318079 +Patch681: 0001-Input-synaptics-handle-spurious-release-of-trackstic.patch + # END OF PATCH DEFINITIONS %endif @@ -2176,6 +2185,11 @@ fi # # %changelog +* Mon Mar 21 2016 Laura Abbott +- uas: Limit qdepth at the scsi-host level (rhbz 1315013) +- Fix for performance regression caused by thermal (rhbz 1317190) +- Input: synaptics - handle spurious release of trackstick buttons, again (rhbz 1318079) + * Sat Mar 19 2016 Peter Robinson 4.5.0-301 - Upstream fix for stmmac driver regressions (AllWinner Gb NICs) - Update various ARM device support patches diff --git a/thermal-fix.patch b/thermal-fix.patch new file mode 100644 index 000000000..bca27cfbe --- /dev/null +++ b/thermal-fix.patch @@ -0,0 +1,77 @@ +From 81ad4276b505e987dd8ebbdf63605f92cd172b52 Mon Sep 17 00:00:00 2001 +From: Zhang Rui +Date: Fri, 18 Mar 2016 10:03:24 +0800 +Subject: [PATCH] Thermal: Ignore invalid trip points + +In some cases, platform thermal driver may report invalid trip points, +thermal core should not take any action for these trip points. + +CC: #3.18+ +Link: https://bugzilla.redhat.com/show_bug.cgi?id=1317190 +Link: https://bugzilla.kernel.org/show_bug.cgi?id=114551 +Signed-off-by: Zhang Rui +--- + drivers/thermal/thermal_core.c | 13 ++++++++++++- + include/linux/thermal.h | 2 ++ + 2 files changed, 14 insertions(+), 1 deletion(-) + +diff --git a/drivers/thermal/thermal_core.c b/drivers/thermal/thermal_core.c +index a0a8fd1..d4b5465 100644 +--- a/drivers/thermal/thermal_core.c ++++ b/drivers/thermal/thermal_core.c +@@ -454,6 +454,10 @@ static void handle_thermal_trip(struct thermal_zone_device *tz, int trip) + { + enum thermal_trip_type type; + ++ /* Ignore disabled trip points */ ++ if (test_bit(trip, &tz->trips_disabled)) ++ return; ++ + tz->ops->get_trip_type(tz, trip, &type); + + if (type == THERMAL_TRIP_CRITICAL || type == THERMAL_TRIP_HOT) +@@ -1800,6 +1804,7 @@ struct thermal_zone_device *thermal_zone_device_register(const char *type, + { + struct thermal_zone_device *tz; + enum thermal_trip_type trip_type; ++ int trip_temp; + int result; + int count; + int passive = 0; +@@ -1871,9 +1876,15 @@ struct thermal_zone_device *thermal_zone_device_register(const char *type, + goto unregister; + + for (count = 0; count < trips; count++) { +- tz->ops->get_trip_type(tz, count, &trip_type); ++ if (tz->ops->get_trip_type(tz, count, &trip_type)) ++ set_bit(count, &tz->trips_disabled); + if (trip_type == THERMAL_TRIP_PASSIVE) + passive = 1; ++ if (tz->ops->get_trip_temp(tz, count, &trip_temp)) ++ set_bit(count, &tz->trips_disabled); ++ /* Check for bogus trip points */ ++ if (trip_temp == 0) ++ set_bit(count, &tz->trips_disabled); + } + + if (!passive) { +diff --git a/include/linux/thermal.h b/include/linux/thermal.h +index 9c48199..a55d052 100644 +--- a/include/linux/thermal.h ++++ b/include/linux/thermal.h +@@ -156,6 +156,7 @@ struct thermal_attr { + * @trip_hyst_attrs: attributes for trip points for sysfs: trip hysteresis + * @devdata: private pointer for device private data + * @trips: number of trip points the thermal zone supports ++ * @trips_disabled; bitmap for disabled trips + * @passive_delay: number of milliseconds to wait between polls when + * performing passive cooling. + * @polling_delay: number of milliseconds to wait between polls when +@@ -191,6 +192,7 @@ struct thermal_zone_device { + struct thermal_attr *trip_hyst_attrs; + void *devdata; + int trips; ++ unsigned long trips_disabled; /* bitmap for disabled trips */ + int passive_delay; + int polling_delay; + int temperature; From 79df94781f8bfb88ffcfc50bd65288659c903984 Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Tue, 22 Mar 2016 14:09:20 -0400 Subject: [PATCH 030/275] Use updated version of digiport CVE fix --- ...do-sanity-checking-for-the-number-of.patch | 58 +++++++++++++++---- 1 file changed, 47 insertions(+), 11 deletions(-) diff --git a/digi_acceleport-do-sanity-checking-for-the-number-of.patch b/digi_acceleport-do-sanity-checking-for-the-number-of.patch index 2bbae94b7..eb060eb08 100644 --- a/digi_acceleport-do-sanity-checking-for-the-number-of.patch +++ b/digi_acceleport-do-sanity-checking-for-the-number-of.patch @@ -1,7 +1,7 @@ From e9c2a3972496927631a1a98fef43e9538e9fd5d5 Mon Sep 17 00:00:00 2001 From: Oliver Neukum Date: Mon, 14 Mar 2016 15:53:38 +0100 -Subject: [PATCH] digi_acceleport: do sanity checking for the number of ports +Subject: [PATCH v2] digi_acceleport: do sanity checking for the number of ports The driver can be crashed with devices that expose crafted descriptors with too few endpoints. @@ -9,26 +9,62 @@ See: http://seclists.org/bugtraq/2016/Mar/61 Signed-off-by: Oliver Neukum + +v1 - added sanity checks +v2 - moved them to probe() to fix problems Johan pointed out --- - drivers/usb/serial/digi_acceleport.c | 5 +++++ - 1 file changed, 5 insertions(+) + drivers/usb/serial/digi_acceleport.c | 24 +++++++++++++++++++----- + 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/drivers/usb/serial/digi_acceleport.c b/drivers/usb/serial/digi_acceleport.c -index 12b0e67473ba..c4d4d4547d40 100644 +index 12b0e67..dab1dcf 100644 --- a/drivers/usb/serial/digi_acceleport.c +++ b/drivers/usb/serial/digi_acceleport.c -@@ -1260,6 +1260,11 @@ static int digi_startup(struct usb_serial *serial) +@@ -1252,7 +1252,8 @@ static int digi_port_init(struct usb_serial_port *port, unsigned port_num) + static int digi_startup(struct usb_serial *serial) + { + struct digi_serial *serial_priv; +- int ret; ++ int ret = -ENODEV; ++ int i; + + serial_priv = kzalloc(sizeof(*serial_priv), GFP_KERNEL); + if (!serial_priv) +@@ -1260,18 +1261,31 @@ static int digi_startup(struct usb_serial *serial) spin_lock_init(&serial_priv->ds_serial_lock); serial_priv->ds_oob_port_num = serial->type->num_ports; -+ if (!(serial_priv->ds_oob_port_num == 2 && serial->type == &digi_acceleport_2_device) -+ && !(serial_priv->ds_oob_port_num == 4 && serial->type == &digi_acceleport_4_device)) { -+ kfree(serial_priv); -+ return -EINVAL; ++ ++ /* Check whether the expected number of ports matches the device */ ++ if (serial->num_ports < serial_priv->ds_oob_port_num) ++ goto error; ++ /* all features must be present */ ++ for (i = 0; i < serial->type->num_ports + 1 ; i++) { ++ if (!serial->port[i]->read_urb) ++ goto error; ++ if (!serial->port[i]->write_urb) ++ goto error; + } ++ serial_priv->ds_oob_port = serial->port[serial_priv->ds_oob_port_num]; ret = digi_port_init(serial_priv->ds_oob_port, + serial_priv->ds_oob_port_num); +- if (ret) { +- kfree(serial_priv); +- return ret; +- } ++ if (ret) ++ goto error; + + usb_set_serial_data(serial, serial_priv); + + return 0; ++error: ++ kfree(serial_priv); ++ return ret; + } + + -- -2.5.0 - +2.1.4 From 24bf1dfe049ff6aac589caec9441182a4dc418da Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Tue, 22 Mar 2016 14:17:30 -0400 Subject: [PATCH 031/275] CVE-2016-2187 gtco: oops on invalid USB descriptors (rhbz 1317017 1317010) --- ...rash-on-detecting-device-without-end.patch | 49 +++++++++++++++++++ kernel.spec | 6 +++ 2 files changed, 55 insertions(+) create mode 100644 input-gtco-fix-crash-on-detecting-device-without-end.patch diff --git a/input-gtco-fix-crash-on-detecting-device-without-end.patch b/input-gtco-fix-crash-on-detecting-device-without-end.patch new file mode 100644 index 000000000..849f607a5 --- /dev/null +++ b/input-gtco-fix-crash-on-detecting-device-without-end.patch @@ -0,0 +1,49 @@ +Subject: [PATCH] Input: gtco: fix crash on detecting device without endpoints +From: Vladis Dronov +Date: 2016-03-18 18:35:00 + +The gtco driver expects at least one valid endpoint. If given +malicious descriptors that specify 0 for the number of endpoints, +it will crash in the probe function. Ensure there is at least +one endpoint on the interface before using it. Fix minor coding +style issue. + +The full report of this issue can be found here: +http://seclists.org/bugtraq/2016/Mar/86 + +Reported-by: Ralf Spenneberg +Signed-off-by: Vladis Dronov +--- + drivers/input/tablet/gtco.c | 10 +++++++++- + 1 file changed, 9 insertions(+), 1 deletion(-) + +diff --git a/drivers/input/tablet/gtco.c b/drivers/input/tablet/gtco.c +index 3a7f3a4..7c18249 100644 +--- a/drivers/input/tablet/gtco.c ++++ b/drivers/input/tablet/gtco.c +@@ -858,6 +858,14 @@ static int gtco_probe(struct usb_interface *usbinterface, + goto err_free_buf; + } + ++ /* Sanity check that a device has an endpoint */ ++ if (usbinterface->altsetting[0].desc.bNumEndpoints < 1) { ++ dev_err(&usbinterface->dev, ++ "Invalid number of endpoints\n"); ++ error = -EINVAL; ++ goto err_free_urb; ++ } ++ + /* + * The endpoint is always altsetting 0, we know this since we know + * this device only has one interrupt endpoint +@@ -879,7 +887,7 @@ static int gtco_probe(struct usb_interface *usbinterface, + * HID report descriptor + */ + if (usb_get_extra_descriptor(usbinterface->cur_altsetting, +- HID_DEVICE_TYPE, &hid_desc) != 0){ ++ HID_DEVICE_TYPE, &hid_desc) != 0) { + dev_err(&usbinterface->dev, + "Can't retrieve exta USB descriptor to get hid report descriptor length\n"); + error = -EIO; +-- +2.5.0 diff --git a/kernel.spec b/kernel.spec index 3da13b621..7a7190e7c 100644 --- a/kernel.spec +++ b/kernel.spec @@ -664,6 +664,9 @@ Patch680: thermal-fix.patch #rhbz 1318079 Patch681: 0001-Input-synaptics-handle-spurious-release-of-trackstic.patch +#CVE-2016-2187 rhbz 1317017 1317010 +Patch686: input-gtco-fix-crash-on-detecting-device-without-end.patch + # END OF PATCH DEFINITIONS %endif @@ -2185,6 +2188,9 @@ fi # # %changelog +* Tue Mar 22 2016 Josh Boyer +- CVE-2016-2187 gtco: oops on invalid USB descriptors (rhbz 1317017 1317010) + * Mon Mar 21 2016 Laura Abbott - uas: Limit qdepth at the scsi-host level (rhbz 1315013) - Fix for performance regression caused by thermal (rhbz 1317190) From c890f63971b98ec53512f26ab38e0af78bd2d8ce Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Tue, 22 Mar 2016 14:25:01 -0400 Subject: [PATCH 032/275] CVE-2016-3136 mct_u232: oops on invalid USB descriptors (rhbz 1317007 1317010) --- kernel.spec | 4 +++ mct_u232-sanity-checking-in-probe.patch | 35 +++++++++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 mct_u232-sanity-checking-in-probe.patch diff --git a/kernel.spec b/kernel.spec index 7a7190e7c..f7a25b0cf 100644 --- a/kernel.spec +++ b/kernel.spec @@ -667,6 +667,9 @@ Patch681: 0001-Input-synaptics-handle-spurious-release-of-trackstic.patch #CVE-2016-2187 rhbz 1317017 1317010 Patch686: input-gtco-fix-crash-on-detecting-device-without-end.patch +#CVE-2016-3136 rhbz 1317007 1317010 +Patch687: mct_u232-sanity-checking-in-probe.patch + # END OF PATCH DEFINITIONS %endif @@ -2189,6 +2192,7 @@ fi # %changelog * Tue Mar 22 2016 Josh Boyer +- CVE-2016-3136 mct_u232: oops on invalid USB descriptors (rhbz 1317007 1317010) - CVE-2016-2187 gtco: oops on invalid USB descriptors (rhbz 1317017 1317010) * Mon Mar 21 2016 Laura Abbott diff --git a/mct_u232-sanity-checking-in-probe.patch b/mct_u232-sanity-checking-in-probe.patch new file mode 100644 index 000000000..006faf15f --- /dev/null +++ b/mct_u232-sanity-checking-in-probe.patch @@ -0,0 +1,35 @@ +Subject: [PATCH v2] mct_u232: sanity checking in probe +From: Oliver Neukum +Date: 2016-03-21 13:14:37 + +An attack using the lack of sanity checking in probe +is known. This patch checks for the existance of a +second port. +CVE-2016-3136 + +Signed-off-by: Oliver Neukum +CC: stable@vger.kernel.org + +v1 - add sanity check for presence of a second port +v2 - add sanity check for an interrupt endpoint +--- + drivers/usb/serial/mct_u232.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/drivers/usb/serial/mct_u232.c b/drivers/usb/serial/mct_u232.c +index 4446b8d..3e64538 100644 +--- a/drivers/usb/serial/mct_u232.c ++++ b/drivers/usb/serial/mct_u232.c +@@ -378,6 +378,10 @@ static int mct_u232_port_probe(struct usb_serial_port *port) + { + struct mct_u232_private *priv; + ++ /* check first to simplify error handling */ ++ if (!port->serial->port[1] || !port->serial->port[1]->interrupt_in_urb) ++ return -ENODEV; ++ + priv = kzalloc(sizeof(*priv), GFP_KERNEL); + if (!priv) + return -ENOMEM; +-- +2.1.4 From 2a0da84180c257a00b1b81246257187b6cb59e1c Mon Sep 17 00:00:00 2001 From: Peter Robinson Date: Wed, 23 Mar 2016 12:17:12 +0000 Subject: [PATCH 033/275] Fix Tegra Jetson TK1 --- config-arm-generic | 2 -- config-armv7-generic | 7 +++++++ config-armv7-lpae | 2 -- kernel.spec | 3 +++ 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/config-arm-generic b/config-arm-generic index 8215a36a8..b868cf20d 100644 --- a/config-arm-generic +++ b/config-arm-generic @@ -166,7 +166,6 @@ CONFIG_SND_HDA_TEGRA=m # CONFIG_ARM_TEGRA20_CPUFREQ is not set # CONFIG_MFD_NVEC is not set -# CONFIG_TEGRA20_APB_DMA is not set # Virt CONFIG_PARAVIRT=y @@ -436,7 +435,6 @@ CONFIG_VFIO_AMBA=m # CONFIG_CADENCE_WATCHDOG is not set # CONFIG_DRM_ARMADA is not set -# CONFIG_DRM_TEGRA is not set # CONFIG_SHMOBILE_IOMMU is not set # CONFIG_COMMON_CLK_SI570 is not set diff --git a/config-armv7-generic b/config-armv7-generic index e5d10e198..ba5f41aa1 100644 --- a/config-armv7-generic +++ b/config-armv7-generic @@ -380,6 +380,13 @@ CONFIG_AD525X_DPOT=m CONFIG_AD525X_DPOT_I2C=m CONFIG_AD525X_DPOT_SPI=m +# Jetson TK1 +CONFIG_PINCTRL_AS3722=y +CONFIG_POWER_RESET_AS3722=y +CONFIG_MFD_AS3722=y +CONFIG_REGULATOR_AS3722=m +CONFIG_RTC_DRV_AS3722=y + # TI Generic CONFIG_TI_SOC_THERMAL=m CONFIG_TI_THERMAL=y diff --git a/config-armv7-lpae b/config-armv7-lpae index 828b13a87..4baa10c9b 100644 --- a/config-armv7-lpae +++ b/config-armv7-lpae @@ -71,7 +71,6 @@ CONFIG_GPIO_SYSCON=m # CONFIG_SPI_TEGRA20_SFLASH is not set # CONFIG_SPI_TEGRA20_SLINK is not set # CONFIG_MFD_MAX8907 is not set -# CONFIG_MFD_NVEC is not set # CONFIG_SND_SOC_TEGRA_ALC5632 is not set # CONFIG_SND_SOC_TEGRA_TRIMSLICE is not set # CONFIG_SND_SOC_TEGRA_WM8753 is not set @@ -80,5 +79,4 @@ CONFIG_GPIO_SYSCON=m # CONFIG_SND_SOC_TEGRA20_AC97 is not set # CONFIG_SND_SOC_TEGRA20_DAS is not set # CONFIG_SND_SOC_TEGRA20_SPDIF is not set -# CONFIG_SND_SOC_TEGRA_RT5677 is not set # CONFIG_DRM_OMAP is not set diff --git a/kernel.spec b/kernel.spec index f7a25b0cf..463faf6fc 100644 --- a/kernel.spec +++ b/kernel.spec @@ -2191,6 +2191,9 @@ fi # # %changelog +* Wed Mar 23 2016 Peter Robinson +- Fix Tegra Jetson TK1 + * Tue Mar 22 2016 Josh Boyer - CVE-2016-3136 mct_u232: oops on invalid USB descriptors (rhbz 1317007 1317010) - CVE-2016-2187 gtco: oops on invalid USB descriptors (rhbz 1317017 1317010) From 23a2b1c088f723891440104b24eeb7a57387cf38 Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Wed, 23 Mar 2016 13:53:40 -0400 Subject: [PATCH 034/275] Add another patch for CVE-2016-2185 --- ...2-fix-crashes-on-detecting-device-wi.patch | 107 ++++++++++++++++++ kernel.spec | 1 + 2 files changed, 108 insertions(+) create mode 100644 Input-ati_remote2-fix-crashes-on-detecting-device-wi.patch diff --git a/Input-ati_remote2-fix-crashes-on-detecting-device-wi.patch b/Input-ati_remote2-fix-crashes-on-detecting-device-wi.patch new file mode 100644 index 000000000..c7a461de8 --- /dev/null +++ b/Input-ati_remote2-fix-crashes-on-detecting-device-wi.patch @@ -0,0 +1,107 @@ +From 0f8536022831faaba3a952fa633902d9686f535f Mon Sep 17 00:00:00 2001 +From: Vladis Dronov +Date: Wed, 23 Mar 2016 15:53:07 -0400 +Subject: [PATCH] Input: ati_remote2: fix crashes on detecting device with + invalid descriptor + +The ati_remote2 driver expects at least two interfaces with one +endpoint each. If given malicious descriptor that specify one +interface or no endpoints, it will crash in the probe function. +Ensure there is at least two interfaces and one endpoint for each +interface before using it. + +The full disclosure: http://seclists.org/bugtraq/2016/Mar/90 + +Reported-by: Ralf Spenneberg +Signed-off-by: Vladis Dronov +--- + drivers/input/misc/ati_remote2.c | 36 ++++++++++++++++++++++++++++++------ + 1 file changed, 30 insertions(+), 6 deletions(-) + +diff --git a/drivers/input/misc/ati_remote2.c b/drivers/input/misc/ati_remote2.c +index cfd58e87da26..cf5d1e8d92c7 100644 +--- a/drivers/input/misc/ati_remote2.c ++++ b/drivers/input/misc/ati_remote2.c +@@ -817,26 +817,49 @@ static int ati_remote2_probe(struct usb_interface *interface, const struct usb_d + + ar2->udev = udev; + ++ /* Sanity check, first interface must have an endpoint */ ++ if ((alt->desc.bNumEndpoints < 1) || !alt->endpoint) { ++ dev_err(&interface->dev, ++ "%s(): interface 0 must have an endpoint\n", __func__); ++ r = -ENODEV; ++ goto fail1; ++ } + ar2->intf[0] = interface; + ar2->ep[0] = &alt->endpoint[0].desc; + ++ /* Sanity check, the device must have two interfaces */ + ar2->intf[1] = usb_ifnum_to_if(udev, 1); ++ if ((udev->actconfig->desc.bNumInterfaces < 2) || !ar2->intf[1]) { ++ dev_err(&interface->dev, "%s(): need 2 interfaces, found %d\n", ++ __func__, udev->actconfig->desc.bNumInterfaces); ++ r = -ENODEV; ++ goto fail1; ++ } ++ + r = usb_driver_claim_interface(&ati_remote2_driver, ar2->intf[1], ar2); + if (r) + goto fail1; ++ ++ /* Sanity check, second interface must have an endpoint */ + alt = ar2->intf[1]->cur_altsetting; ++ if ((alt->desc.bNumEndpoints < 1) || !alt->endpoint) { ++ dev_err(&interface->dev, ++ "%s(): interface 1 must have an endpoint\n", __func__); ++ r = -ENODEV; ++ goto fail2; ++ } + ar2->ep[1] = &alt->endpoint[0].desc; + + r = ati_remote2_urb_init(ar2); + if (r) +- goto fail2; ++ goto fail3; + + ar2->channel_mask = channel_mask; + ar2->mode_mask = mode_mask; + + r = ati_remote2_setup(ar2, ar2->channel_mask); + if (r) +- goto fail2; ++ goto fail3; + + usb_make_path(udev, ar2->phys, sizeof(ar2->phys)); + strlcat(ar2->phys, "/input0", sizeof(ar2->phys)); +@@ -845,11 +868,11 @@ static int ati_remote2_probe(struct usb_interface *interface, const struct usb_d + + r = sysfs_create_group(&udev->dev.kobj, &ati_remote2_attr_group); + if (r) +- goto fail2; ++ goto fail3; + + r = ati_remote2_input_init(ar2); + if (r) +- goto fail3; ++ goto fail4; + + usb_set_intfdata(interface, ar2); + +@@ -857,10 +880,11 @@ static int ati_remote2_probe(struct usb_interface *interface, const struct usb_d + + return 0; + +- fail3: ++ fail4: + sysfs_remove_group(&udev->dev.kobj, &ati_remote2_attr_group); +- fail2: ++ fail3: + ati_remote2_urb_cleanup(ar2); ++ fail2: + usb_driver_release_interface(&ati_remote2_driver, ar2->intf[1]); + fail1: + kfree(ar2); +-- +2.5.0 + diff --git a/kernel.spec b/kernel.spec index 463faf6fc..8f71abd63 100644 --- a/kernel.spec +++ b/kernel.spec @@ -646,6 +646,7 @@ Patch674: USB-iowarrior-fix-oops-with-malicious-USB-descriptor.patch #CVE-2016-2185 rhbz 1317014 1317471 Patch675: usb_driver_claim_interface-add-sanity-checking.patch +Patch669: Input-ati_remote2-fix-crashes-on-detecting-device-wi.patch #CVE-2016-3138 rhbz 1317010 1316204 Patch676: cdc-acm-more-sanity-checking.patch From 713244c6fcdf9e26913e89e7f35bbfefd4823fe4 Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Tue, 29 Mar 2016 10:08:36 -0500 Subject: [PATCH 035/275] Turn off DEBUG_WX (rhbz 1318599) --- config-x86-generic | 2 +- kernel.spec | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/config-x86-generic b/config-x86-generic index 10a3a126b..af204bcf1 100644 --- a/config-x86-generic +++ b/config-x86-generic @@ -72,7 +72,7 @@ CONFIG_MMIOTRACE=y # CONFIG_MMIOTRACE_TEST is not set # CONFIG_DEBUG_PER_CPU_MAPS is not set CONFIG_DEBUG_RODATA=y -CONFIG_DEBUG_WX=y +# CONFIG_DEBUG_WX is not set CONFIG_DEBUG_STACKOVERFLOW=y CONFIG_ACPI=y diff --git a/kernel.spec b/kernel.spec index 8f71abd63..9e54aaa21 100644 --- a/kernel.spec +++ b/kernel.spec @@ -42,7 +42,7 @@ Summary: The Linux kernel # For non-released -rc kernels, this will be appended after the rcX and # gitX tags, so a 3 here would become part of release "0.rcX.gitX.3" # -%global baserelease 301 +%global baserelease 302 %global fedora_build %{baserelease} # base_sublevel is the kernel version we're starting with and patching @@ -2192,6 +2192,9 @@ fi # # %changelog +* Tue Mar 29 2016 Justin M. Forbes +- Turn off DEBUG_WX (rhbz 1318599) + * Wed Mar 23 2016 Peter Robinson - Fix Tegra Jetson TK1 From ed12bfb0f64b462b19bc2cf310de73b6fef932b8 Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Tue, 29 Mar 2016 14:22:22 -0400 Subject: [PATCH 036/275] CVE-2016-3157 xen: priv escalation on 64bit PV domains with io port access (rhbz 1315711 1321948) --- kernel.spec | 6 ++ ...operly-context-switch-IOPL-on-Xen-PV.patch | 96 +++++++++++++++++++ 2 files changed, 102 insertions(+) create mode 100644 x86-iopl-64-Properly-context-switch-IOPL-on-Xen-PV.patch diff --git a/kernel.spec b/kernel.spec index 9e54aaa21..09a63d68c 100644 --- a/kernel.spec +++ b/kernel.spec @@ -671,6 +671,9 @@ Patch686: input-gtco-fix-crash-on-detecting-device-without-end.patch #CVE-2016-3136 rhbz 1317007 1317010 Patch687: mct_u232-sanity-checking-in-probe.patch +# CVE-2016-3157 rhbz 1315711 1321948 +Patch688: x86-iopl-64-Properly-context-switch-IOPL-on-Xen-PV.patch + # END OF PATCH DEFINITIONS %endif @@ -2192,6 +2195,9 @@ fi # # %changelog +* Tue Mar 29 2016 Josh Boyer +- CVE-2016-3157 xen: priv escalation on 64bit PV domains with io port access (rhbz 1315711 1321948) + * Tue Mar 29 2016 Justin M. Forbes - Turn off DEBUG_WX (rhbz 1318599) diff --git a/x86-iopl-64-Properly-context-switch-IOPL-on-Xen-PV.patch b/x86-iopl-64-Properly-context-switch-IOPL-on-Xen-PV.patch new file mode 100644 index 000000000..38f7bfbb0 --- /dev/null +++ b/x86-iopl-64-Properly-context-switch-IOPL-on-Xen-PV.patch @@ -0,0 +1,96 @@ +From b7a584598aea7ca73140cb87b40319944dd3393f Mon Sep 17 00:00:00 2001 +From: Andy Lutomirski +Date: Wed, 16 Mar 2016 14:14:21 -0700 +Subject: [PATCH] x86/iopl/64: Properly context-switch IOPL on Xen PV + +On Xen PV, regs->flags doesn't reliably reflect IOPL and the +exit-to-userspace code doesn't change IOPL. We need to context +switch it manually. + +I'm doing this without going through paravirt because this is +specific to Xen PV. After the dust settles, we can merge this with +the 32-bit code, tidy up the iopl syscall implementation, and remove +the set_iopl pvop entirely. + +Fixes XSA-171. + +Reviewewd-by: Jan Beulich +Signed-off-by: Andy Lutomirski +Cc: Andrew Cooper +Cc: Andy Lutomirski +Cc: Boris Ostrovsky +Cc: Borislav Petkov +Cc: Brian Gerst +Cc: David Vrabel +Cc: Denys Vlasenko +Cc: H. Peter Anvin +Cc: Jan Beulich +Cc: Linus Torvalds +Cc: Peter Zijlstra +Cc: Thomas Gleixner +Cc: stable@vger.kernel.org +Link: http://lkml.kernel.org/r/693c3bd7aeb4d3c27c92c622b7d0f554a458173c.1458162709.git.luto@kernel.org +Signed-off-by: Ingo Molnar +--- + arch/x86/include/asm/xen/hypervisor.h | 2 ++ + arch/x86/kernel/process_64.c | 12 ++++++++++++ + arch/x86/xen/enlighten.c | 2 +- + 3 files changed, 15 insertions(+), 1 deletion(-) + +diff --git a/arch/x86/include/asm/xen/hypervisor.h b/arch/x86/include/asm/xen/hypervisor.h +index 8b2d4bea9962..39171b3646bb 100644 +--- a/arch/x86/include/asm/xen/hypervisor.h ++++ b/arch/x86/include/asm/xen/hypervisor.h +@@ -62,4 +62,6 @@ void xen_arch_register_cpu(int num); + void xen_arch_unregister_cpu(int num); + #endif + ++extern void xen_set_iopl_mask(unsigned mask); ++ + #endif /* _ASM_X86_XEN_HYPERVISOR_H */ +diff --git a/arch/x86/kernel/process_64.c b/arch/x86/kernel/process_64.c +index b9d99e0f82c4..9f751876066f 100644 +--- a/arch/x86/kernel/process_64.c ++++ b/arch/x86/kernel/process_64.c +@@ -48,6 +48,7 @@ + #include + #include + #include ++#include + + asmlinkage extern void ret_from_fork(void); + +@@ -411,6 +412,17 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p) + task_thread_info(prev_p)->flags & _TIF_WORK_CTXSW_PREV)) + __switch_to_xtra(prev_p, next_p, tss); + ++#ifdef CONFIG_XEN ++ /* ++ * On Xen PV, IOPL bits in pt_regs->flags have no effect, and ++ * current_pt_regs()->flags may not match the current task's ++ * intended IOPL. We need to switch it manually. ++ */ ++ if (unlikely(static_cpu_has(X86_FEATURE_XENPV) && ++ prev->iopl != next->iopl)) ++ xen_set_iopl_mask(next->iopl); ++#endif ++ + if (static_cpu_has_bug(X86_BUG_SYSRET_SS_ATTRS)) { + /* + * AMD CPUs have a misfeature: SYSRET sets the SS selector but +diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c +index 2c261082eadf..8381fb990c7f 100644 +--- a/arch/x86/xen/enlighten.c ++++ b/arch/x86/xen/enlighten.c +@@ -961,7 +961,7 @@ static void xen_load_sp0(struct tss_struct *tss, + tss->x86_tss.sp0 = thread->sp0; + } + +-static void xen_set_iopl_mask(unsigned mask) ++void xen_set_iopl_mask(unsigned mask) + { + struct physdev_set_iopl set_iopl; + +-- +2.5.5 + From 2463f3be22278b3001e3e7a94ec88d658d80780d Mon Sep 17 00:00:00 2001 From: Peter Robinson Date: Wed, 30 Mar 2016 12:45:15 +0100 Subject: [PATCH 037/275] - Add upstream mvebu/DSA fixes - Minor ARMv7 fixes - Boot fix for aarch64 devices with 64K page size requirements (Seattle) --- ...ebu-Correct-unit-address-for-linksys.patch | 32 ++++++ ...x-Introduce-_mv88e6xxx_phy_page_-rea.patch | 95 ++++++++++++++++ ...88e6xxx-Clear-the-PDOWN-bit-on-setup.patch | 104 ++++++++++++++++++ ...patch => bcm283x-Pull-upstream-fixes.patch | 21 ++-- ...OCK_NOMAP-to-UEFI-memory-map-mapping.patch | 92 ++++++++++++++++ kernel.spec | 52 ++++++--- 6 files changed, 365 insertions(+), 31 deletions(-) create mode 100644 0001-ARM-mvebu-Correct-unit-address-for-linksys.patch create mode 100644 0001-net-dsa-mv88e6xxx-Introduce-_mv88e6xxx_phy_page_-rea.patch create mode 100644 0002-net-dsa-mv88e6xxx-Clear-the-PDOWN-bit-on-setup.patch rename bcm283x-add-aux-uart-support-extra-DT-bits-initial-r.patch => bcm283x-Pull-upstream-fixes.patch (99%) create mode 100644 efi-arm64-don-t-apply-MEMBLOCK_NOMAP-to-UEFI-memory-map-mapping.patch diff --git a/0001-ARM-mvebu-Correct-unit-address-for-linksys.patch b/0001-ARM-mvebu-Correct-unit-address-for-linksys.patch new file mode 100644 index 000000000..ba0320c8e --- /dev/null +++ b/0001-ARM-mvebu-Correct-unit-address-for-linksys.patch @@ -0,0 +1,32 @@ +From 0eebfe3b5ae99d3a825be8e45395cea478fd83d8 Mon Sep 17 00:00:00 2001 +From: Patrick Uiterwijk +Date: Mon, 28 Mar 2016 21:30:41 +0000 +Subject: [PATCH] ARM: mvebu: Correct unit address for linksys + +The USB2 port for Armada 38x is defined to be at 58000, not at +50000. + +Acked-by: Imre Kaloz +Cc: +Fixes: 2d0a7addbd10 ("ARM: Kirkwood: Add support for many Synology NAS devices") +Signed-off-by: Patrick Uiterwijk +--- + arch/arm/boot/dts/armada-385-linksys.dtsi | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/arch/arm/boot/dts/armada-385-linksys.dtsi b/arch/arm/boot/dts/armada-385-linksys.dtsi +index 3710755..85d2c37 100644 +--- a/arch/arm/boot/dts/armada-385-linksys.dtsi ++++ b/arch/arm/boot/dts/armada-385-linksys.dtsi +@@ -117,7 +117,7 @@ + }; + + /* USB part of the eSATA/USB 2.0 port */ +- usb@50000 { ++ usb@58000 { + status = "okay"; + }; + +-- +2.5.0 + diff --git a/0001-net-dsa-mv88e6xxx-Introduce-_mv88e6xxx_phy_page_-rea.patch b/0001-net-dsa-mv88e6xxx-Introduce-_mv88e6xxx_phy_page_-rea.patch new file mode 100644 index 000000000..1e2d4db59 --- /dev/null +++ b/0001-net-dsa-mv88e6xxx-Introduce-_mv88e6xxx_phy_page_-rea.patch @@ -0,0 +1,95 @@ +From 4d1b08a69350d40e0aa14baba4797ef175295718 Mon Sep 17 00:00:00 2001 +From: Peter Robinson +Date: Wed, 30 Mar 2016 12:40:54 +0100 +Subject: [PATCH 1/2] net: dsa: mv88e6xxx: Introduce + _mv88e6xxx_phy_page_{read,write} + +Add versions of the phy_page_read and _write functions to +be used in a context where the SMI mutex is held. + +Tested-by: Vivien Didelot +Reviewed-by: Vivien Didelot +Signed-off-by: Patrick Uiterwijk +--- + drivers/net/dsa/mv88e6xxx.c | 49 +++++++++++++++++++++++++++++++++------------ + 1 file changed, 36 insertions(+), 13 deletions(-) + +diff --git a/drivers/net/dsa/mv88e6xxx.c b/drivers/net/dsa/mv88e6xxx.c +index 512c8c0..3dcfe13 100644 +--- a/drivers/net/dsa/mv88e6xxx.c ++++ b/drivers/net/dsa/mv88e6xxx.c +@@ -1929,6 +1929,38 @@ static void mv88e6xxx_bridge_work(struct work_struct *work) + } + } + ++static int _mv88e6xxx_phy_page_write(struct dsa_switch *ds, int port, int page, ++ int reg, int val) ++{ ++ int ret; ++ ++ ret = _mv88e6xxx_phy_write_indirect(ds, port, 0x16, page); ++ if (ret < 0) ++ goto restore_page_0; ++ ++ ret = _mv88e6xxx_phy_write_indirect(ds, port, reg, val); ++restore_page_0: ++ _mv88e6xxx_phy_write_indirect(ds, port, 0x16, 0x0); ++ ++ return ret; ++} ++ ++static int _mv88e6xxx_phy_page_read(struct dsa_switch *ds, int port, int page, ++ int reg) ++{ ++ int ret; ++ ++ ret = _mv88e6xxx_phy_write_indirect(ds, port, 0x16, page); ++ if (ret < 0) ++ goto restore_page_0; ++ ++ ret = _mv88e6xxx_phy_read_indirect(ds, port, reg); ++restore_page_0: ++ _mv88e6xxx_phy_write_indirect(ds, port, 0x16, 0x0); ++ ++ return ret; ++} ++ + static int mv88e6xxx_setup_port(struct dsa_switch *ds, int port) + { + struct mv88e6xxx_priv_state *ps = ds_to_priv(ds); +@@ -2383,13 +2415,9 @@ int mv88e6xxx_phy_page_read(struct dsa_switch *ds, int port, int page, int reg) + int ret; + + mutex_lock(&ps->smi_mutex); +- ret = _mv88e6xxx_phy_write_indirect(ds, port, 0x16, page); +- if (ret < 0) +- goto error; +- ret = _mv88e6xxx_phy_read_indirect(ds, port, reg); +-error: +- _mv88e6xxx_phy_write_indirect(ds, port, 0x16, 0x0); ++ ret = _mv88e6xxx_phy_page_read(ds, port, page, reg); + mutex_unlock(&ps->smi_mutex); ++ + return ret; + } + +@@ -2400,14 +2428,9 @@ int mv88e6xxx_phy_page_write(struct dsa_switch *ds, int port, int page, + int ret; + + mutex_lock(&ps->smi_mutex); +- ret = _mv88e6xxx_phy_write_indirect(ds, port, 0x16, page); +- if (ret < 0) +- goto error; +- +- ret = _mv88e6xxx_phy_write_indirect(ds, port, reg, val); +-error: +- _mv88e6xxx_phy_write_indirect(ds, port, 0x16, 0x0); ++ ret = _mv88e6xxx_phy_page_write(ds, port, page, reg, val); + mutex_unlock(&ps->smi_mutex); ++ + return ret; + } + +-- +2.7.3 + diff --git a/0002-net-dsa-mv88e6xxx-Clear-the-PDOWN-bit-on-setup.patch b/0002-net-dsa-mv88e6xxx-Clear-the-PDOWN-bit-on-setup.patch new file mode 100644 index 000000000..35b369312 --- /dev/null +++ b/0002-net-dsa-mv88e6xxx-Clear-the-PDOWN-bit-on-setup.patch @@ -0,0 +1,104 @@ +From a878e3fa9657646ff85468075823870fbbd5745f Mon Sep 17 00:00:00 2001 +From: Peter Robinson +Date: Wed, 30 Mar 2016 12:41:22 +0100 +Subject: [PATCH 2/2] net: dsa: mv88e6xxx: Clear the PDOWN bit on setup + +Some of the vendor-specific bootloaders set up this part +of the initialization for us, so this was never added. +However, since upstream bootloaders don't initialize the +chip specifically, they leave the fiber MII's PDOWN flag +set, which means that the CPU port doesn't connect. + +This patch checks whether this flag has been clear prior +by something else, and if not make us clear it. + +Reviewed-by: Andrew Lunn +Signed-off-by: Patrick Uiterwijk +--- + drivers/net/dsa/mv88e6xxx.c | 36 ++++++++++++++++++++++++++++++++++++ + drivers/net/dsa/mv88e6xxx.h | 8 ++++++++ + 2 files changed, 44 insertions(+) + +diff --git a/drivers/net/dsa/mv88e6xxx.c b/drivers/net/dsa/mv88e6xxx.c +index 3dcfe13..a4e3750 100644 +--- a/drivers/net/dsa/mv88e6xxx.c ++++ b/drivers/net/dsa/mv88e6xxx.c +@@ -1961,6 +1961,25 @@ restore_page_0: + return ret; + } + ++static int mv88e6xxx_power_on_serdes(struct dsa_switch *ds) ++{ ++ int ret; ++ ++ ret = _mv88e6xxx_phy_page_read(ds, REG_FIBER_SERDES, PAGE_FIBER_SERDES, ++ MII_BMCR); ++ if (ret < 0) ++ return ret; ++ ++ if (ret & BMCR_PDOWN) { ++ ret &= ~BMCR_PDOWN; ++ ret = _mv88e6xxx_phy_page_write(ds, REG_FIBER_SERDES, ++ PAGE_FIBER_SERDES, MII_BMCR, ++ ret); ++ } ++ ++ return ret; ++} ++ + static int mv88e6xxx_setup_port(struct dsa_switch *ds, int port) + { + struct mv88e6xxx_priv_state *ps = ds_to_priv(ds); +@@ -2064,6 +2083,23 @@ static int mv88e6xxx_setup_port(struct dsa_switch *ds, int port) + goto abort; + } + ++ /* If this port is connected to a SerDes, make sure the SerDes is not ++ * powered down. ++ */ ++ if (mv88e6xxx_6352_family(ds)) { ++ ret = _mv88e6xxx_reg_read(ds, REG_PORT(port), PORT_STATUS); ++ if (ret < 0) ++ goto abort; ++ ret &= PORT_STATUS_CMODE_MASK; ++ if ((ret == PORT_STATUS_CMODE_100BASE_X) || ++ (ret == PORT_STATUS_CMODE_1000BASE_X) || ++ (ret == PORT_STATUS_CMODE_SGMII)) { ++ ret = mv88e6xxx_power_on_serdes(ds); ++ if (ret < 0) ++ goto abort; ++ } ++ } ++ + /* Port Control 2: don't force a good FCS, set the maximum frame size to + * 10240 bytes, enable secure 802.1q tags, don't discard tagged or + * untagged frames on this port, do a destination address lookup on all +diff --git a/drivers/net/dsa/mv88e6xxx.h b/drivers/net/dsa/mv88e6xxx.h +index ca08f91..adc7f0d 100644 +--- a/drivers/net/dsa/mv88e6xxx.h ++++ b/drivers/net/dsa/mv88e6xxx.h +@@ -28,6 +28,10 @@ + #define SMI_CMD_OP_45_READ_DATA_INC ((3 << 10) | SMI_CMD_BUSY) + #define SMI_DATA 0x01 + ++/* Fiber/SERDES Registers are located at SMI address F, page 1 */ ++#define REG_FIBER_SERDES 0x0f ++#define PAGE_FIBER_SERDES 0x01 ++ + #define REG_PORT(p) (0x10 + (p)) + #define PORT_STATUS 0x00 + #define PORT_STATUS_PAUSE_EN BIT(15) +@@ -45,6 +49,10 @@ + #define PORT_STATUS_MGMII BIT(6) /* 6185 */ + #define PORT_STATUS_TX_PAUSED BIT(5) + #define PORT_STATUS_FLOW_CTRL BIT(4) ++#define PORT_STATUS_CMODE_MASK 0x0f ++#define PORT_STATUS_CMODE_100BASE_X 0x8 ++#define PORT_STATUS_CMODE_1000BASE_X 0x9 ++#define PORT_STATUS_CMODE_SGMII 0xa + #define PORT_PCS_CTRL 0x01 + #define PORT_PCS_CTRL_RGMII_DELAY_RXCLK BIT(15) + #define PORT_PCS_CTRL_RGMII_DELAY_TXCLK BIT(14) +-- +2.7.3 + diff --git a/bcm283x-add-aux-uart-support-extra-DT-bits-initial-r.patch b/bcm283x-Pull-upstream-fixes.patch similarity index 99% rename from bcm283x-add-aux-uart-support-extra-DT-bits-initial-r.patch rename to bcm283x-Pull-upstream-fixes.patch index beaa6bd0f..4d639ef89 100644 --- a/bcm283x-add-aux-uart-support-extra-DT-bits-initial-r.patch +++ b/bcm283x-Pull-upstream-fixes.patch @@ -1,8 +1,7 @@ -From 59fb5b800868d984e836ab4a38d8ba1598dc675a Mon Sep 17 00:00:00 2001 +From 1039ba1b91421a9018312f5901855fe03fbb0d1f Mon Sep 17 00:00:00 2001 From: Peter Robinson -Date: Fri, 18 Mar 2016 19:18:51 +0000 -Subject: [PATCH] bcm283x: add aux uart support, extra DT bits, initial rpi3, - VC4 fixes and VC4 DT bindings +Date: Wed, 30 Mar 2016 10:32:41 +0100 +Subject: [PATCH] bcm283x: Pull upstream fixes --- .../devicetree/bindings/arm/bcm/brcm,bcm2835.txt | 4 + @@ -13,7 +12,7 @@ Subject: [PATCH] bcm283x: add aux uart support, extra DT bits, initial rpi3, arch/arm/boot/dts/bcm2835-rpi-b-plus.dts | 4 + arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts | 4 + arch/arm/boot/dts/bcm2835-rpi-b.dts | 4 + - arch/arm/boot/dts/bcm2835-rpi.dtsi | 25 + + arch/arm/boot/dts/bcm2835-rpi.dtsi | 21 + arch/arm/boot/dts/bcm2836-rpi-2-b.dts | 4 + arch/arm/boot/dts/bcm2837-rpi-3-b.dts | 22 + arch/arm/boot/dts/bcm2837.dtsi | 68 +++ @@ -31,7 +30,7 @@ Subject: [PATCH] bcm283x: add aux uart support, extra DT bits, initial rpi3, drivers/tty/serial/8250/8250_bcm2835aux.c | 146 +++++ drivers/tty/serial/8250/Kconfig | 24 + drivers/tty/serial/8250/Makefile | 1 + - 26 files changed, 1365 insertions(+), 122 deletions(-) + 26 files changed, 1361 insertions(+), 122 deletions(-) create mode 100644 Documentation/devicetree/bindings/serial/brcm,bcm2835-aux-uart.txt create mode 100644 arch/arm/boot/dts/bcm2835-rpi-a.dts create mode 100644 arch/arm/boot/dts/bcm2837-rpi-3-b.dts @@ -178,7 +177,7 @@ index 4859e9d..8b15f9c 100644 + hpd-gpios = <&gpio 46 GPIO_ACTIVE_HIGH>; +}; diff --git a/arch/arm/boot/dts/bcm2835-rpi.dtsi b/arch/arm/boot/dts/bcm2835-rpi.dtsi -index 3afb9fe..40510df 100644 +index 3afb9fe..b1e8145 100644 --- a/arch/arm/boot/dts/bcm2835-rpi.dtsi +++ b/arch/arm/boot/dts/bcm2835-rpi.dtsi @@ -1,3 +1,5 @@ @@ -200,15 +199,11 @@ index 3afb9fe..40510df 100644 }; }; -@@ -58,3 +66,20 @@ +@@ -58,3 +66,16 @@ status = "okay"; bus-width = <4>; }; + -+&usb { -+ power-domains = <&power RPI_POWER_DOMAIN_USB>; -+}; -+ +&pwm { + status = "okay"; +}; @@ -2151,5 +2146,5 @@ index b9b9bca..5c1869f 100644 obj-$(CONFIG_SERIAL_8250_FOURPORT) += 8250_fourport.o obj-$(CONFIG_SERIAL_8250_ACCENT) += 8250_accent.o -- -2.5.0 +2.7.3 diff --git a/efi-arm64-don-t-apply-MEMBLOCK_NOMAP-to-UEFI-memory-map-mapping.patch b/efi-arm64-don-t-apply-MEMBLOCK_NOMAP-to-UEFI-memory-map-mapping.patch new file mode 100644 index 000000000..2e3ae0c9b --- /dev/null +++ b/efi-arm64-don-t-apply-MEMBLOCK_NOMAP-to-UEFI-memory-map-mapping.patch @@ -0,0 +1,92 @@ +From patchwork Wed Mar 30 07:46:23 2016 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +Subject: efi/arm64: don't apply MEMBLOCK_NOMAP to UEFI memory map mapping +From: Ard Biesheuvel +X-Patchwork-Id: 8693271 +Message-Id: <1459323983-9120-1-git-send-email-ard.biesheuvel@linaro.org> +To: linux-efi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, + matt@codeblueprint.co.uk +Cc: mark.rutland@arm.com, mlangsdo@redhat.com, + Ard Biesheuvel , leif.lindholm@linaro.org, + jeremy.linton@arm.com, msalter@redhat.com +Date: Wed, 30 Mar 2016 09:46:23 +0200 + +Hi Matt, + +Could we queue this as a fix for v4.6 with a cc:stable for v4.5, please? +(assuming no objections from any of the cc'ees) + +Thanks, +Ard. + +----------8<-------------- +Commit 4dffbfc48d65 ("arm64/efi: mark UEFI reserved regions as +MEMBLOCK_NOMAP") updated the mapping logic of both the RuntimeServices +regions as well as the kernel's copy of the UEFI memory map to set the +MEMBLOCK_NOMAP flag, which causes these regions to be omitted from the +kernel direct mapping, and from being covered by a struct page. +For the RuntimeServices regions, this is an obvious win, since the contents +of these regions have significance to the firmware executable code itself, +and are mapped in the EFI page tables using attributes that are described in +the UEFI memory map, and which may differ from the attributes we use for +mapping system RAM. It also prevents the contents from being modified +inadvertently, since the EFI page tables are only live during runtime +service invocations. + +None of these concerns apply to the allocation that covers the UEFI memory +map, since it is entirely owned by the kernel. Setting the MEMBLOCK_NOMAP on +the region did allow us to use ioremap_cache() to map it both on arm64 and +on ARM, since the latter does not allow ioremap_cache() to be used on +regions that are covered by a struct page. + +The ioremap_cache() on ARM restriction will be lifted in the v4.7 timeframe, +but in the mean time, it has been reported that commit 4dffbfc48d65 causes +a regression on 64k granule kernels. This is due to the fact that, given +the 64 KB page size, the region that we end up removing from the kernel +direct mapping is rounded up to 64 KB, and this 64 KB page frame may be +shared with the initrd when booting via GRUB (which does not align its +EFI_LOADER_DATA allocations to 64 KB like the stub does). This will crash +the kernel as soon as it tries to access the initrd. + +Since the issue is specific to arm64, revert back to memblock_reserve()'ing +the UEFI memory map when running on arm64. This is a temporary fix for v4.5 +and v4.6, and will be superseded in the v4.7 timeframe when we will be able +to move back to memblock_reserve() unconditionally. + +Fixes: 4dffbfc48d65 ("arm64/efi: mark UEFI reserved regions as MEMBLOCK_NOMAP") +Reported-by: Mark Salter +Signed-off-by: Ard Biesheuvel + +--- +drivers/firmware/efi/arm-init.c | 18 +++++++++++++++--- + 1 file changed, 15 insertions(+), 3 deletions(-) + +diff --git a/drivers/firmware/efi/arm-init.c b/drivers/firmware/efi/arm-init.c +index aa1f743152a2..8714f8c271ba 100644 +--- a/drivers/firmware/efi/arm-init.c ++++ b/drivers/firmware/efi/arm-init.c +@@ -203,7 +203,19 @@ void __init efi_init(void) + + reserve_regions(); + early_memunmap(memmap.map, params.mmap_size); +- memblock_mark_nomap(params.mmap & PAGE_MASK, +- PAGE_ALIGN(params.mmap_size + +- (params.mmap & ~PAGE_MASK))); ++ ++ if (IS_ENABLED(CONFIG_ARM)) { ++ /* ++ * ARM currently does not allow ioremap_cache() to be called on ++ * memory regions that are covered by struct page. So remove the ++ * UEFI memory map from the linear mapping. ++ */ ++ memblock_mark_nomap(params.mmap & PAGE_MASK, ++ PAGE_ALIGN(params.mmap_size + ++ (params.mmap & ~PAGE_MASK))); ++ } else { ++ memblock_reserve(params.mmap & PAGE_MASK, ++ PAGE_ALIGN(params.mmap_size + ++ (params.mmap & ~PAGE_MASK))); ++ } + } diff --git a/kernel.spec b/kernel.spec index 09a63d68c..bff260d79 100644 --- a/kernel.spec +++ b/kernel.spec @@ -497,33 +497,44 @@ Source5005: kbuild-AFTER_LINK.patch # Standalone patches -# http://www.spinics.net/lists/netdev/msg369442.html -Patch452: revert-stmmac-Fix-eth0-No-PHY-found-regression.patch -Patch453: stmmac-fix-MDIO-settings.patch +Patch420: arm64-avoid-needing-console-to-enable-serial-console.patch -Patch454: bcm283x-add-aux-uart-support-extra-DT-bits-initial-r.patch - -Patch455: arm64-avoid-needing-console-to-enable-serial-console.patch - -Patch456: arm64-acpi-drop-expert-patch.patch - -# http://patchwork.ozlabs.org/patch/587554/ -Patch457: ARM-tegra-usb-no-reset.patch - -Patch458: ARM-mvebu-change-order-of-ethernet-DT-nodes-on-Armada-38x.patch +Patch421: arm64-acpi-drop-expert-patch.patch # http://www.spinics.net/lists/arm-kernel/msg490981.html -Patch459: geekbox-v4-device-tree-support.patch +Patch422: geekbox-v4-device-tree-support.patch # http://www.spinics.net/lists/arm-kernel/msg483898.html -Patch460: Initial-AllWinner-A64-and-PINE64-support.patch +Patch423: Initial-AllWinner-A64-and-PINE64-support.patch + +# http://www.spinics.net/lists/arm-kernel/msg493431.html +Patch424: efi-arm64-don-t-apply-MEMBLOCK_NOMAP-to-UEFI-memory-map-mapping.patch + +# http://patchwork.ozlabs.org/patch/587554/ +Patch430: ARM-tegra-usb-no-reset.patch + +Patch431: arm-i.MX6-Utilite-device-dtb.patch # http://www.spinics.net/lists/linux-tegra/msg25152.html -Patch461: Fix-tegra-to-use-stdout-path-for-serial-console.patch +Patch432: Fix-tegra-to-use-stdout-path-for-serial-console.patch -Patch463: arm-i.MX6-Utilite-device-dtb.patch +Patch433: bcm283x-Pull-upstream-fixes.patch -Patch465: lib-cpumask-Make-CPUMASK_OFFSTACK-usable-without-deb.patch +# http://www.spinics.net/lists/netdev/msg369442.html +Patch434: revert-stmmac-Fix-eth0-No-PHY-found-regression.patch +Patch435: stmmac-fix-MDIO-settings.patch + +Patch436: ARM-mvebu-change-order-of-ethernet-DT-nodes-on-Armada-38x.patch + +# mvebu usb fixes http://www.spinics.net/lists/arm-kernel/msg493305.html +Patch437: 0001-ARM-mvebu-Correct-unit-address-for-linksys.patch + +# mvebu DSA switch fixes +# http://www.spinics.net/lists/netdev/msg370841.html http://www.spinics.net/lists/netdev/msg370842.html +Patch438: 0001-net-dsa-mv88e6xxx-Introduce-_mv88e6xxx_phy_page_-rea.patch +Patch439: 0002-net-dsa-mv88e6xxx-Clear-the-PDOWN-bit-on-setup.patch + +Patch460: lib-cpumask-Make-CPUMASK_OFFSTACK-usable-without-deb.patch Patch466: input-kill-stupid-messages.patch @@ -2195,6 +2206,11 @@ fi # # %changelog +* Wed Mar 30 2016 Peter Robinson +- Add upstream mvebu/DSA fixes +- Minor ARMv7 fixes +- Boot fix for aarch64 devices with 64K page size requirements (Seattle) + * Tue Mar 29 2016 Josh Boyer - CVE-2016-3157 xen: priv escalation on 64bit PV domains with io port access (rhbz 1315711 1321948) From b37954fced31fa97f97175305d98fa643772366e Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Wed, 30 Mar 2016 10:09:17 -0500 Subject: [PATCH 038/275] Tag for build --- kernel.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kernel.spec b/kernel.spec index bff260d79..834264021 100644 --- a/kernel.spec +++ b/kernel.spec @@ -2206,7 +2206,7 @@ fi # # %changelog -* Wed Mar 30 2016 Peter Robinson +* Wed Mar 30 2016 Peter Robinson - 4.5.0-302 - Add upstream mvebu/DSA fixes - Minor ARMv7 fixes - Boot fix for aarch64 devices with 64K page size requirements (Seattle) From bdf7d4b7998fff682db6ac6eaae6aba777cd2bb7 Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Thu, 31 Mar 2016 14:30:06 -0400 Subject: [PATCH 039/275] Add two more patches for CVE-2016-2184 --- ...ix-double-free-in-error-paths-after-.patch | 100 ++++++++++++++++++ ...inor-code-cleanup-in-create_fixed_st.patch | 62 +++++++++++ kernel.spec | 5 + 3 files changed, 167 insertions(+) create mode 100644 ALSA-usb-audio-Fix-double-free-in-error-paths-after-.patch create mode 100644 ALSA-usb-audio-Minor-code-cleanup-in-create_fixed_st.patch diff --git a/ALSA-usb-audio-Fix-double-free-in-error-paths-after-.patch b/ALSA-usb-audio-Fix-double-free-in-error-paths-after-.patch new file mode 100644 index 000000000..c1c72f9bf --- /dev/null +++ b/ALSA-usb-audio-Fix-double-free-in-error-paths-after-.patch @@ -0,0 +1,100 @@ +From 1b9e866417f77622b03f5b9c4e2845133054e670 Mon Sep 17 00:00:00 2001 +From: Vladis Dronov +Date: Thu, 31 Mar 2016 12:05:43 -0400 +Subject: [PATCH 2/2] ALSA: usb-audio: Fix double-free in error paths after + snd_usb_add_audio_stream() call + +create_fixed_stream_quirk(), snd_usb_parse_audio_interface() and +create_uaxx_quirk() functions allocate the audioformat object by themselves +and free it upon error before returning. However, once the object is linked +to a stream, it's freed again in snd_usb_audio_pcm_free(), thus it'll be +double-freed, eventually resulting in a memory corruption. + +This patch fixes these failures in the error paths by unlinking the audioformat +object before freeing it. + +Based on a patch by Takashi Iwai" + +[Note for stable backports: + this patch requires the commit 902eb7fd1e4a ('ALSA: usb-audio: Minor + code cleanup in create_fixed_stream_quirk()')] + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1283358 +Reported-by: Ralf Spenneberg +Cc: # see the note above +Signed-off-by: Vladis Dronov +--- + sound/usb/quirks.c | 4 ++++ + sound/usb/stream.c | 6 +++++- + 2 files changed, 9 insertions(+), 1 deletion(-) + +diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c +index 2f0bbc43f902..6f68ba9bda8a 100644 +--- a/sound/usb/quirks.c ++++ b/sound/usb/quirks.c +@@ -150,6 +150,7 @@ static int create_fixed_stream_quirk(struct snd_usb_audio *chip, + usb_audio_err(chip, "cannot memdup\n"); + return -ENOMEM; + } ++ INIT_LIST_HEAD(&fp->list); + if (fp->nr_rates > MAX_NR_RATES) { + kfree(fp); + return -EINVAL; +@@ -193,6 +194,7 @@ static int create_fixed_stream_quirk(struct snd_usb_audio *chip, + return 0; + + error: ++ list_del(&fp->list); /* unlink for avoiding double-free */ + kfree(fp); + kfree(rate_table); + return err; +@@ -468,6 +470,7 @@ static int create_uaxx_quirk(struct snd_usb_audio *chip, + fp->ep_attr = get_endpoint(alts, 0)->bmAttributes; + fp->datainterval = 0; + fp->maxpacksize = le16_to_cpu(get_endpoint(alts, 0)->wMaxPacketSize); ++ INIT_LIST_HEAD(&fp->list); + + switch (fp->maxpacksize) { + case 0x120: +@@ -491,6 +494,7 @@ static int create_uaxx_quirk(struct snd_usb_audio *chip, + ? SNDRV_PCM_STREAM_CAPTURE : SNDRV_PCM_STREAM_PLAYBACK; + err = snd_usb_add_audio_stream(chip, stream, fp); + if (err < 0) { ++ list_del(&fp->list); /* unlink for avoiding double-free */ + kfree(fp); + return err; + } +diff --git a/sound/usb/stream.c b/sound/usb/stream.c +index 8ee14f2365e7..3b23102230c0 100644 +--- a/sound/usb/stream.c ++++ b/sound/usb/stream.c +@@ -316,7 +316,9 @@ static struct snd_pcm_chmap_elem *convert_chmap(int channels, unsigned int bits, + /* + * add this endpoint to the chip instance. + * if a stream with the same endpoint already exists, append to it. +- * if not, create a new pcm stream. ++ * if not, create a new pcm stream. note, fp is added to the substream ++ * fmt_list and will be freed on the chip instance release. do not free ++ * fp or do remove it from the substream fmt_list to avoid double-free. + */ + int snd_usb_add_audio_stream(struct snd_usb_audio *chip, + int stream, +@@ -677,6 +679,7 @@ int snd_usb_parse_audio_interface(struct snd_usb_audio *chip, int iface_no) + * (fp->maxpacksize & 0x7ff); + fp->attributes = parse_uac_endpoint_attributes(chip, alts, protocol, iface_no); + fp->clock = clock; ++ INIT_LIST_HEAD(&fp->list); + + /* some quirks for attributes here */ + +@@ -725,6 +728,7 @@ int snd_usb_parse_audio_interface(struct snd_usb_audio *chip, int iface_no) + dev_dbg(&dev->dev, "%u:%d: add audio endpoint %#x\n", iface_no, altno, fp->endpoint); + err = snd_usb_add_audio_stream(chip, stream, fp); + if (err < 0) { ++ list_del(&fp->list); /* unlink for avoiding double-free */ + kfree(fp->rate_table); + kfree(fp->chmap); + kfree(fp); +-- +2.5.5 + diff --git a/ALSA-usb-audio-Minor-code-cleanup-in-create_fixed_st.patch b/ALSA-usb-audio-Minor-code-cleanup-in-create_fixed_st.patch new file mode 100644 index 000000000..65f88553b --- /dev/null +++ b/ALSA-usb-audio-Minor-code-cleanup-in-create_fixed_st.patch @@ -0,0 +1,62 @@ +From aa6c68ed429ba354b904554d396326bfd9ab96bf Mon Sep 17 00:00:00 2001 +From: Takashi Iwai +Date: Tue, 15 Mar 2016 12:14:49 +0100 +Subject: [PATCH 1/2] ALSA: usb-audio: Minor code cleanup in + create_fixed_stream_quirk() + +Just a minor code cleanup: unify the error paths. + +Signed-off-by: Takashi Iwai +--- + sound/usb/quirks.c | 22 +++++++++++----------- + 1 file changed, 11 insertions(+), 11 deletions(-) + +diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c +index f2e4eebdf76d..2f0bbc43f902 100644 +--- a/sound/usb/quirks.c ++++ b/sound/usb/quirks.c +@@ -167,23 +167,18 @@ static int create_fixed_stream_quirk(struct snd_usb_audio *chip, + stream = (fp->endpoint & USB_DIR_IN) + ? SNDRV_PCM_STREAM_CAPTURE : SNDRV_PCM_STREAM_PLAYBACK; + err = snd_usb_add_audio_stream(chip, stream, fp); +- if (err < 0) { +- kfree(fp); +- kfree(rate_table); +- return err; +- } ++ if (err < 0) ++ goto error; + if (fp->iface != get_iface_desc(&iface->altsetting[0])->bInterfaceNumber || + fp->altset_idx >= iface->num_altsetting) { +- kfree(fp); +- kfree(rate_table); +- return -EINVAL; ++ err = -EINVAL; ++ goto error; + } + alts = &iface->altsetting[fp->altset_idx]; + altsd = get_iface_desc(alts); + if (altsd->bNumEndpoints < 1) { +- kfree(fp); +- kfree(rate_table); +- return -EINVAL; ++ err = -EINVAL; ++ goto error; + } + + fp->protocol = altsd->bInterfaceProtocol; +@@ -196,6 +191,11 @@ static int create_fixed_stream_quirk(struct snd_usb_audio *chip, + snd_usb_init_pitch(chip, fp->iface, alts, fp); + snd_usb_init_sample_rate(chip, fp->iface, alts, fp, fp->rate_max); + return 0; ++ ++ error: ++ kfree(fp); ++ kfree(rate_table); ++ return err; + } + + static int create_auto_pcm_quirk(struct snd_usb_audio *chip, +-- +2.5.5 + diff --git a/kernel.spec b/kernel.spec index 834264021..3cd77dc93 100644 --- a/kernel.spec +++ b/kernel.spec @@ -645,6 +645,8 @@ Patch666: ipv4-Dont-do-expensive-useless-work-during-inetdev-des.patch #CVE-2016-2184 rhbz 1317012 1317470 Patch670: ALSA-usb-audio-Fix-NULL-dereference-in-create_fixed_.patch Patch671: ALSA-usb-audio-Add-sanity-checks-for-endpoint-access.patch +Patch667: ALSA-usb-audio-Minor-code-cleanup-in-create_fixed_st.patch +Patch668: ALSA-usb-audio-Fix-double-free-in-error-paths-after-.patch #CVE-2016-3137 rhbz 1317010 1316996 Patch672: cypress_m8-add-sanity-checking.patch @@ -2206,6 +2208,9 @@ fi # # %changelog +* Thu Mar 31 2016 Josh Boyer +- Add two more patches for CVE-2016-2184 + * Wed Mar 30 2016 Peter Robinson - 4.5.0-302 - Add upstream mvebu/DSA fixes - Minor ARMv7 fixes From 3ca6c4cf4d75d9f0dcb3747f3fd5d28c75daabb8 Mon Sep 17 00:00:00 2001 From: Peter Robinson Date: Sun, 3 Apr 2016 23:49:26 +0100 Subject: [PATCH 040/275] Some minor ARMv7/aarch64 cleanups2 --- config-arm-generic | 23 +++++++++++++++++++---- config-arm64 | 4 +++- config-armv7-generic | 26 ++------------------------ config-armv7-lpae | 1 + config-generic | 5 +---- config-x86-generic | 1 - kernel.spec | 3 +++ 7 files changed, 29 insertions(+), 34 deletions(-) diff --git a/config-arm-generic b/config-arm-generic index b868cf20d..6d27a0828 100644 --- a/config-arm-generic +++ b/config-arm-generic @@ -17,10 +17,6 @@ CONFIG_CC_STACKPROTECTOR=y # CONFIG_BIG_LITTLE is not set # CONFIG_IWMMXT is not set -CONFIG_PWM=y -CONFIG_PWM_SYSFS=y -# CONFIG_PWM_FSL_FTM is not set - CONFIG_RESET_CONTROLLER=y CONFIG_RESET_GPIO=y @@ -221,6 +217,24 @@ CONFIG_ARM_SCPI_PROTOCOL=m # NVMem CONFIG_NVMEM=m +# SPI +CONFIG_SPI=y +CONFIG_SPI_MASTER=y +CONFIG_SPI_GPIO=m +CONFIG_SPI_SPIDEV=m +CONFIG_SPI_BITBANG=m +CONFIG_SPI_DESIGNWARE=m +# CONFIG_SPI_CADENCE is not set +# CONFIG_SPI_SUN4I is not set +# CONFIG_SPI_SUN6I is not set +# CONFIG_SPI_TEGRA20_SFLASH is not set +# CONFIG_SPI_TEGRA20_SLINK is not set +# CONFIG_SPI_ZYNQMP_GQSPI is not set + +CONFIG_PWM=y +CONFIG_PWM_SYSFS=y +# CONFIG_PWM_FSL_FTM is not set + # USB CONFIG_USB_OHCI_HCD_PLATFORM=m CONFIG_USB_EHCI_HCD_PLATFORM=m @@ -385,6 +399,7 @@ CONFIG_I2C_MUX_PINCTRL=m CONFIG_I2C_MUX_PCA9541=m CONFIG_I2C_MUX_PCA954x=m CONFIG_I2C_MUX_REG=m +CONFIG_I2C_MV64XXX=m # spi CONFIG_SPI_PL022=m diff --git a/config-arm64 b/config-arm64 index 773a35ee5..77dde021b 100644 --- a/config-arm64 +++ b/config-arm64 @@ -136,10 +136,13 @@ CONFIG_PINCTRL_AMD=y # HiSilicon CONFIG_HISILICON_IRQ_MBIGEN=y +CONFIG_COMMON_CLK_HI6220=y CONFIG_PCI_HISI=y CONFIG_POWER_RESET_HISI=y CONFIG_HISI_THERMAL=m CONFIG_STUB_CLK_HI6220=y +CONFIG_MFD_HI655X_PMIC=m +CONFIG_REGULATOR_HI655X=m CONFIG_PHY_HI6220_USB=m CONFIG_COMMON_RESET_HI6220=m @@ -157,7 +160,6 @@ CONFIG_NET_VENDOR_ALLWINNER=y # CONFIG_KEYBOARD_SUN4I_LRADC is not set # CONFIG_TOUCHSCREEN_SUN4I is not set # CONFIG_SERIO_SUN4I_PS2 is not set -CONFIG_I2C_MV64XXX=m CONFIG_SUNXI_WATCHDOG=m CONFIG_MFD_SUN6I_PRCM=y CONFIG_IR_SUNXI=m diff --git a/config-armv7-generic b/config-armv7-generic index ba5f41aa1..c7c2d98b9 100644 --- a/config-armv7-generic +++ b/config-armv7-generic @@ -231,6 +231,7 @@ CONFIG_MTD_NAND_SUNXI=m CONFIG_SERIO_SUN4I_PS2=m CONFIG_KEYBOARD_SUN4I_LRADC=m CONFIG_PWM_SUN4I=m +CONFIG_CAN_SUN4I=m CONFIG_USB_MUSB_SUNXI=m CONFIG_CRYPTO_DEV_SUN4I_SS=m CONFIG_SND_SUN4I_CODEC=m @@ -286,6 +287,7 @@ CONFIG_MMC_DW_EXYNOS=m # CONFIG_EXYNOS_IOMMU is not set CONFIG_PCI_EXYNOS=y CONFIG_PHY_EXYNOS5_USBDRD=m +CONFIG_SAMSUNG_USBPHY=m CONFIG_PHY_SAMSUNG_USB2=m CONFIG_USB_EHCI_EXYNOS=m CONFIG_USB_OHCI_EXYNOS=m @@ -525,29 +527,6 @@ CONFIG_KEYBOARD_MATRIX=m # CONFIG_GPIO_RCAR is not set CONFIG_W1_MASTER_GPIO=m -# SPI -CONFIG_SPI=y -CONFIG_SPI_MASTER=y -CONFIG_SPI_GPIO=m -CONFIG_SPI_SPIDEV=m -CONFIG_SPI_ALTERA=m -CONFIG_SPI_BITBANG=m -CONFIG_SPI_BUTTERFLY=m -CONFIG_SPI_DESIGNWARE=m -CONFIG_SPI_LM70_LLP=m -CONFIG_SPI_OC_TINY=m -CONFIG_SPI_SC18IS602=m -CONFIG_SPI_TLE62X0=m -CONFIG_SPI_XCOMM=m -# CONFIG_SPI_FSL_SPI is not set -# CONFIG_SPI_CADENCE is not set -# CONFIG_SPI_ZYNQMP_GQSPI is not set - -CONFIG_NFC_NCI_SPI=y - -# i2c -CONFIG_I2C_MV64XXX=m - # HW crypto and rng # CONFIG_CRYPTO_SHA1_ARM_CE is not set # CONFIG_CRYPTO_SHA2_ARM_CE is not set @@ -784,7 +763,6 @@ CONFIG_R8188EU=m # CONFIG_CAN_TI_HECC is not set # CONFIG_CAN_FLEXCAN is not set # CONFIG_CAN_RCAR is not set -# CONFIG_CAN_MCP251X is not set # Needs work/investigation # CONFIG_ARM_KPROBES_TEST is not set diff --git a/config-armv7-lpae b/config-armv7-lpae index 4baa10c9b..2ecc010e5 100644 --- a/config-armv7-lpae +++ b/config-armv7-lpae @@ -80,3 +80,4 @@ CONFIG_GPIO_SYSCON=m # CONFIG_SND_SOC_TEGRA20_DAS is not set # CONFIG_SND_SOC_TEGRA20_SPDIF is not set # CONFIG_DRM_OMAP is not set +# CONFIG_AM335X_PHY_USB is not set diff --git a/config-generic b/config-generic index a970c6577..c03972816 100644 --- a/config-generic +++ b/config-generic @@ -214,7 +214,6 @@ CONFIG_BINFMT_MISC=m # CONFIG_COMMON_CLK_CS2000_CP is not set # CONFIG_COMMON_CLK_PWM is not set # CONFIG_COMMON_CLK_CDCE925 is not set -# CONFIG_COMMON_CLK_HI6220 is not set # # @@ -2063,6 +2062,7 @@ CONFIG_CAN_PEAK_PCIEC=y CONFIG_CAN_PEAK_USB=m CONFIG_CAN_KVASER_PCI=m CONFIG_CAN_KVASER_USB=m +# CONFIG_CAN_MCP251X is not set CONFIG_CAN_PLX_PCI=m # CONFIG_CAN_TSCAN1 is not set CONFIG_CAN_C_CAN=m @@ -2077,7 +2077,6 @@ CONFIG_CAN_GS_USB=m CONFIG_CAN_8DEV_USB=m CONFIG_CAN_SOFTING=m # CONFIG_CAN_SOFTING_CS is not set -CONFIG_CAN_SUN4I=m CONFIG_NETROM=m CONFIG_ROSE=m @@ -4297,8 +4296,6 @@ CONFIG_USB_ULPI_BUS=m # CONFIG_PHY_PXA_28NM_HSIC is not set # CONFIG_PHY_PXA_28NM_USB2 is not set # CONFIG_PHY_TUSB1210 is not set -# CONFIG_PHY_HI6220_USB is not set -# CONFIG_AM335X_PHY_USB is not set # CONFIG_SAMSUNG_USBPHY is not set # CONFIG_BCM_KONA_USB2_PHY is not set # CONFIG_USB_RCAR_PHY is not set diff --git a/config-x86-generic b/config-x86-generic index af204bcf1..47060b9de 100644 --- a/config-x86-generic +++ b/config-x86-generic @@ -326,7 +326,6 @@ CONFIG_XEN_SYMS=y CONFIG_SPI=y CONFIG_SPI_MASTER=y CONFIG_SPI_PXA2XX=m -# CONFIG_CAN_MCP251X is not set # CONFIG_SPI_CADENCE is not set # CONFIG_SPI_ZYNQMP_GQSPI is not set # CONFIG_DRM_PANEL_SAMSUNG_LD9040 is not set diff --git a/kernel.spec b/kernel.spec index 3cd77dc93..86cdf91fe 100644 --- a/kernel.spec +++ b/kernel.spec @@ -2208,6 +2208,9 @@ fi # # %changelog +* Sun Apr 3 2016 Peter Robinson +- Some minor ARMv7/aarch64 cleanups + * Thu Mar 31 2016 Josh Boyer - Add two more patches for CVE-2016-2184 From 2b5ee7885ac48d21cf2a48a43ad4602a08d6dc54 Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Thu, 7 Apr 2016 12:15:09 -0500 Subject: [PATCH 041/275] Enable Full Randomization on 32bit x86 CVE-2016-3672 (rhbz 1324749 1324750) --- kernel.spec | 6 ++ ...-full-randomization-on-i386-and-X86_.patch | 83 +++++++++++++++++++ 2 files changed, 89 insertions(+) create mode 100644 x86-mm-32-Enable-full-randomization-on-i386-and-X86_.patch diff --git a/kernel.spec b/kernel.spec index 86cdf91fe..ce4fa5940 100644 --- a/kernel.spec +++ b/kernel.spec @@ -687,6 +687,9 @@ Patch687: mct_u232-sanity-checking-in-probe.patch # CVE-2016-3157 rhbz 1315711 1321948 Patch688: x86-iopl-64-Properly-context-switch-IOPL-on-Xen-PV.patch +# CVE-2016-3672 rhbz 1324749 1324750 +Patch689: x86-mm-32-Enable-full-randomization-on-i386-and-X86_.patch + # END OF PATCH DEFINITIONS %endif @@ -2208,6 +2211,9 @@ fi # # %changelog +* Thu Apr 07 2016 Justin M. Forbes +- Enable Full Randomization on 32bit x86 CVE-2016-3672 (rhbz 1324749 1324750) + * Sun Apr 3 2016 Peter Robinson - Some minor ARMv7/aarch64 cleanups diff --git a/x86-mm-32-Enable-full-randomization-on-i386-and-X86_.patch b/x86-mm-32-Enable-full-randomization-on-i386-and-X86_.patch new file mode 100644 index 000000000..0776982c1 --- /dev/null +++ b/x86-mm-32-Enable-full-randomization-on-i386-and-X86_.patch @@ -0,0 +1,83 @@ +From 8b8addf891de8a00e4d39fc32f93f7c5eb8feceb Mon Sep 17 00:00:00 2001 +From: Hector Marco-Gisbert +Date: Thu, 10 Mar 2016 20:51:00 +0100 +Subject: [PATCH] x86/mm/32: Enable full randomization on i386 and X86_32 + +Currently on i386 and on X86_64 when emulating X86_32 in legacy mode, only +the stack and the executable are randomized but not other mmapped files +(libraries, vDSO, etc.). This patch enables randomization for the +libraries, vDSO and mmap requests on i386 and in X86_32 in legacy mode. + +By default on i386 there are 8 bits for the randomization of the libraries, +vDSO and mmaps which only uses 1MB of VA. + +This patch preserves the original randomness, using 1MB of VA out of 3GB or +4GB. We think that 1MB out of 3GB is not a big cost for having the ASLR. + +The first obvious security benefit is that all objects are randomized (not +only the stack and the executable) in legacy mode which highly increases +the ASLR effectiveness, otherwise the attackers may use these +non-randomized areas. But also sensitive setuid/setgid applications are +more secure because currently, attackers can disable the randomization of +these applications by setting the ulimit stack to "unlimited". This is a +very old and widely known trick to disable the ASLR in i386 which has been +allowed for too long. + +Another trick used to disable the ASLR was to set the ADDR_NO_RANDOMIZE +personality flag, but fortunately this doesn't work on setuid/setgid +applications because there is security checks which clear Security-relevant +flags. + +This patch always randomizes the mmap_legacy_base address, removing the +possibility to disable the ASLR by setting the stack to "unlimited". + +Signed-off-by: Hector Marco-Gisbert +Acked-by: Ismael Ripoll Ripoll +Acked-by: Kees Cook +Acked-by: Arjan van de Ven +Cc: Linus Torvalds +Cc: Peter Zijlstra +Cc: Thomas Gleixner +Cc: akpm@linux-foundation.org +Cc: kees Cook +Link: http://lkml.kernel.org/r/1457639460-5242-1-git-send-email-hecmargi@upv.es +Signed-off-by: Ingo Molnar +--- + arch/x86/mm/mmap.c | 14 +------------- + 1 file changed, 1 insertion(+), 13 deletions(-) + +diff --git a/arch/x86/mm/mmap.c b/arch/x86/mm/mmap.c +index 96bd1e2..389939f 100644 +--- a/arch/x86/mm/mmap.c ++++ b/arch/x86/mm/mmap.c +@@ -94,18 +94,6 @@ static unsigned long mmap_base(unsigned long rnd) + } + + /* +- * Bottom-up (legacy) layout on X86_32 did not support randomization, X86_64 +- * does, but not when emulating X86_32 +- */ +-static unsigned long mmap_legacy_base(unsigned long rnd) +-{ +- if (mmap_is_ia32()) +- return TASK_UNMAPPED_BASE; +- else +- return TASK_UNMAPPED_BASE + rnd; +-} +- +-/* + * This function, called very early during the creation of a new + * process VM image, sets up which VM layout function to use: + */ +@@ -116,7 +104,7 @@ void arch_pick_mmap_layout(struct mm_struct *mm) + if (current->flags & PF_RANDOMIZE) + random_factor = arch_mmap_rnd(); + +- mm->mmap_legacy_base = mmap_legacy_base(random_factor); ++ mm->mmap_legacy_base = TASK_UNMAPPED_BASE + random_factor; + + if (mmap_is_legacy()) { + mm->mmap_base = mm->mmap_legacy_base; +-- +2.7.3 + From 0ef5eed43781990438ae866b7f79eb5adcdfed7c Mon Sep 17 00:00:00 2001 From: Peter Robinson Date: Mon, 11 Apr 2016 10:37:43 +0100 Subject: [PATCH 042/275] Add upstream patch to fix IDIV issue when booting on Cortex-A7/15/17 devices --- arm-fix-idiv.patch | 52 ++++++++++++++++++++++++++++++++++++++++++++ config-armv7-generic | 3 +-- kernel.spec | 5 +++++ 3 files changed, 58 insertions(+), 2 deletions(-) create mode 100644 arm-fix-idiv.patch diff --git a/arm-fix-idiv.patch b/arm-fix-idiv.patch new file mode 100644 index 000000000..26eac32d8 --- /dev/null +++ b/arm-fix-idiv.patch @@ -0,0 +1,52 @@ +From 208fae5c3b9431013ad7bcea07cbcee114e7d163 Mon Sep 17 00:00:00 2001 +From: Nicolas Pitre +Date: Mon, 14 Mar 2016 02:55:45 +0100 +Subject: ARM: 8550/1: protect idiv patching against undefined gcc behavior + +It was reported that a kernel with CONFIG_ARM_PATCH_IDIV=y stopped +booting when compiled with the upcoming gcc 6. Turns out that turning +a function address into a writable array is undefined and gcc 6 decided +it was OK to omit the store to the first word of the function while +still preserving the store to the second word. + +Even though gcc 6 is now fixed to behave more coherently, it is a +mystery that gcc 4 and gcc 5 actually produce wanted code in the kernel. +And in fact the reduced test case to illustrate the issue does indeed +break with gcc < 6 as well. + +In any case, let's guard the kernel against undefined compiler behavior +by hiding the nature of the array location as suggested by gcc +developers. + +Reference: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70128 + +Signed-off-by: Nicolas Pitre +Reported-by: Marcin Juszkiewicz +Cc: Arnd Bergmann +Cc: stable@vger.kernel.org # v4.5 +Signed-off-by: Russell King +--- + arch/arm/kernel/setup.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c +index 139791e..a28fce0 100644 +--- a/arch/arm/kernel/setup.c ++++ b/arch/arm/kernel/setup.c +@@ -430,11 +430,13 @@ static void __init patch_aeabi_idiv(void) + pr_info("CPU: div instructions available: patching division code\n"); + + fn_addr = ((uintptr_t)&__aeabi_uidiv) & ~1; ++ asm ("" : "+g" (fn_addr)); + ((u32 *)fn_addr)[0] = udiv_instruction(); + ((u32 *)fn_addr)[1] = bx_lr_instruction(); + flush_icache_range(fn_addr, fn_addr + 8); + + fn_addr = ((uintptr_t)&__aeabi_idiv) & ~1; ++ asm ("" : "+g" (fn_addr)); + ((u32 *)fn_addr)[0] = sdiv_instruction(); + ((u32 *)fn_addr)[1] = bx_lr_instruction(); + flush_icache_range(fn_addr, fn_addr + 8); +-- +cgit v0.12 + diff --git a/config-armv7-generic b/config-armv7-generic index c7c2d98b9..21cc00f3a 100644 --- a/config-armv7-generic +++ b/config-armv7-generic @@ -19,8 +19,7 @@ CONFIG_ARM_UNWIND=y CONFIG_ARM_THUMB=y CONFIG_ARM_THUMBEE=y CONFIG_ARM_ASM_UNIFIED=y -# see rhbz 1303147 -# CONFIG_ARM_PATCH_IDIV is not set +CONFIG_ARM_PATCH_IDIV=y CONFIG_ARM_CPU_TOPOLOGY=y CONFIG_ARM_DMA_MEM_BUFFERABLE=y CONFIG_SWP_EMULATE=y diff --git a/kernel.spec b/kernel.spec index ce4fa5940..0fa2dc49a 100644 --- a/kernel.spec +++ b/kernel.spec @@ -510,6 +510,8 @@ Patch423: Initial-AllWinner-A64-and-PINE64-support.patch # http://www.spinics.net/lists/arm-kernel/msg493431.html Patch424: efi-arm64-don-t-apply-MEMBLOCK_NOMAP-to-UEFI-memory-map-mapping.patch +Patch425: arm-fix-idiv.patch + # http://patchwork.ozlabs.org/patch/587554/ Patch430: ARM-tegra-usb-no-reset.patch @@ -2211,6 +2213,9 @@ fi # # %changelog +* Mon Apr 11 2016 Peter Robinson +- Add upstream patch to fix IDIV issue when booting on Cortex-A7/15/17 devices + * Thu Apr 07 2016 Justin M. Forbes - Enable Full Randomization on 32bit x86 CVE-2016-3672 (rhbz 1324749 1324750) From 1fd1a427cc84c1b82713d48a09cfc1dffb2090aa Mon Sep 17 00:00:00 2001 From: Peter Robinson Date: Mon, 11 Apr 2016 12:15:38 +0100 Subject: [PATCH 043/275] Update bcm238x patch --- ...upstream-fixes-plus-iproc-mmc-driver.patch | 107 +++++++++++++++++- config-armv7-generic | 3 +- kernel.spec | 3 +- 3 files changed, 107 insertions(+), 6 deletions(-) rename bcm283x-Pull-upstream-fixes.patch => bcm283x-Pull-upstream-fixes-plus-iproc-mmc-driver.patch (95%) diff --git a/bcm283x-Pull-upstream-fixes.patch b/bcm283x-Pull-upstream-fixes-plus-iproc-mmc-driver.patch similarity index 95% rename from bcm283x-Pull-upstream-fixes.patch rename to bcm283x-Pull-upstream-fixes-plus-iproc-mmc-driver.patch index 4d639ef89..35c6e524b 100644 --- a/bcm283x-Pull-upstream-fixes.patch +++ b/bcm283x-Pull-upstream-fixes-plus-iproc-mmc-driver.patch @@ -1,7 +1,7 @@ -From 1039ba1b91421a9018312f5901855fe03fbb0d1f Mon Sep 17 00:00:00 2001 +From 19778e51ab57b1a7e310c2efedbe8d9df1b81672 Mon Sep 17 00:00:00 2001 From: Peter Robinson -Date: Wed, 30 Mar 2016 10:32:41 +0100 -Subject: [PATCH] bcm283x: Pull upstream fixes +Date: Mon, 11 Apr 2016 11:10:17 +0100 +Subject: [PATCH] bcm283x: Pull upstream fixes plus iproc mmc driver --- .../devicetree/bindings/arm/bcm/brcm,bcm2835.txt | 4 + @@ -27,10 +27,12 @@ Subject: [PATCH] bcm283x: Pull upstream fixes drivers/gpu/drm/vc4/vc4_plane.c | 603 +++++++++++++++++++-- drivers/gpu/drm/vc4/vc4_regs.h | 120 +++- drivers/gpu/drm/vc4/vc4_v3d.c | 1 + + drivers/mmc/host/Kconfig | 6 +- + drivers/mmc/host/sdhci-iproc.c | 33 +- drivers/tty/serial/8250/8250_bcm2835aux.c | 146 +++++ drivers/tty/serial/8250/Kconfig | 24 + drivers/tty/serial/8250/Makefile | 1 + - 26 files changed, 1361 insertions(+), 122 deletions(-) + 28 files changed, 1394 insertions(+), 128 deletions(-) create mode 100644 Documentation/devicetree/bindings/serial/brcm,bcm2835-aux-uart.txt create mode 100644 arch/arm/boot/dts/bcm2835-rpi-a.dts create mode 100644 arch/arm/boot/dts/bcm2837-rpi-3-b.dts @@ -1946,6 +1948,103 @@ index 31de5d1..e6d3c60 100644 { .compatible = "brcm,vc4-v3d" }, {} }; +diff --git a/drivers/mmc/host/Kconfig b/drivers/mmc/host/Kconfig +index 1526b8a..60de1e4 100644 +--- a/drivers/mmc/host/Kconfig ++++ b/drivers/mmc/host/Kconfig +@@ -318,15 +318,15 @@ config MMC_SDHCI_F_SDH30 + If unsure, say N. + + config MMC_SDHCI_IPROC +- tristate "SDHCI platform support for the iProc SD/MMC Controller" +- depends on ARCH_BCM_IPROC || COMPILE_TEST ++ tristate "SDHCI support for the BCM2835 & iProc SD/MMC Controller" ++ depends on ARCH_BCM2835 || ARCH_BCM_IPROC || COMPILE_TEST + depends on MMC_SDHCI_PLTFM + default ARCH_BCM_IPROC + select MMC_SDHCI_IO_ACCESSORS + help + This selects the iProc SD/MMC controller. + +- If you have an IPROC platform with SD or MMC devices, ++ If you have a BCM2835 or IPROC platform with SD or MMC devices, + say Y or M here. + + If unsure, say N. +diff --git a/drivers/mmc/host/sdhci-iproc.c b/drivers/mmc/host/sdhci-iproc.c +index 3b423b0..871c92c 100644 +--- a/drivers/mmc/host/sdhci-iproc.c ++++ b/drivers/mmc/host/sdhci-iproc.c +@@ -26,6 +26,7 @@ struct sdhci_iproc_data { + const struct sdhci_pltfm_data *pdata; + u32 caps; + u32 caps1; ++ u32 mmc_caps; + }; + + struct sdhci_iproc_host { +@@ -165,9 +166,25 @@ static const struct sdhci_iproc_data iproc_data = { + .pdata = &sdhci_iproc_pltfm_data, + .caps = 0x05E90000, + .caps1 = 0x00000064, ++ .mmc_caps = MMC_CAP_1_8V_DDR, ++}; ++ ++static const struct sdhci_pltfm_data sdhci_bcm2835_pltfm_data = { ++ .quirks = SDHCI_QUIRK_BROKEN_CARD_DETECTION | ++ SDHCI_QUIRK_DATA_TIMEOUT_USES_SDCLK | ++ SDHCI_QUIRK_MISSING_CAPS, ++ .ops = &sdhci_iproc_ops, ++}; ++ ++static const struct sdhci_iproc_data bcm2835_data = { ++ .pdata = &sdhci_bcm2835_pltfm_data, ++ .caps = SDHCI_CAN_VDD_330, ++ .caps1 = 0x00000000, ++ .mmc_caps = 0x00000000, + }; + + static const struct of_device_id sdhci_iproc_of_match[] = { ++ { .compatible = "brcm,bcm2835-sdhci", .data = &bcm2835_data }, + { .compatible = "brcm,sdhci-iproc-cygnus", .data = &iproc_data }, + { } + }; +@@ -199,22 +216,32 @@ static int sdhci_iproc_probe(struct platform_device *pdev) + mmc_of_parse(host->mmc); + sdhci_get_of_property(pdev); + +- /* Enable EMMC 1/8V DDR capable */ +- host->mmc->caps |= MMC_CAP_1_8V_DDR; ++ host->mmc->caps |= iproc_host->data->mmc_caps; + + pltfm_host->clk = devm_clk_get(&pdev->dev, NULL); + if (IS_ERR(pltfm_host->clk)) { + ret = PTR_ERR(pltfm_host->clk); + goto err; + } ++ ret = clk_prepare_enable(pltfm_host->clk); ++ if (ret) { ++ dev_err(&pdev->dev, "failed to enable host clk\n"); ++ goto err; ++ } + + if (iproc_host->data->pdata->quirks & SDHCI_QUIRK_MISSING_CAPS) { + host->caps = iproc_host->data->caps; + host->caps1 = iproc_host->data->caps1; + } + +- return sdhci_add_host(host); ++ ret = sdhci_add_host(host); ++ if (ret) ++ goto err_clk; ++ ++ return 0; + ++err_clk: ++ clk_disable_unprepare(pltfm_host->clk); + err: + sdhci_pltfm_free(pdev); + return ret; diff --git a/drivers/tty/serial/8250/8250_bcm2835aux.c b/drivers/tty/serial/8250/8250_bcm2835aux.c new file mode 100644 index 0000000..ecf89f1 diff --git a/config-armv7-generic b/config-armv7-generic index 21cc00f3a..846667598 100644 --- a/config-armv7-generic +++ b/config-armv7-generic @@ -242,7 +242,8 @@ CONFIG_SERIAL_AMBA_PL011=y CONFIG_SERIAL_AMBA_PL011_CONSOLE=y CONFIG_SERIAL_8250_BCM2835AUX=y CONFIG_DMA_BCM2835=m -CONFIG_MMC_SDHCI_BCM2835=m +# CONFIG_MMC_SDHCI_BCM2835 is not set +CONFIG_MMC_SDHCI_IPROC=m CONFIG_BCM2835_MBOX=m CONFIG_PWM_BCM2835=m CONFIG_HW_RANDOM_BCM2835=m diff --git a/kernel.spec b/kernel.spec index 0fa2dc49a..a8608fd07 100644 --- a/kernel.spec +++ b/kernel.spec @@ -520,7 +520,7 @@ Patch431: arm-i.MX6-Utilite-device-dtb.patch # http://www.spinics.net/lists/linux-tegra/msg25152.html Patch432: Fix-tegra-to-use-stdout-path-for-serial-console.patch -Patch433: bcm283x-Pull-upstream-fixes.patch +Patch433: bcm283x-Pull-upstream-fixes-plus-iproc-mmc-driver.patch # http://www.spinics.net/lists/netdev/msg369442.html Patch434: revert-stmmac-Fix-eth0-No-PHY-found-regression.patch @@ -2215,6 +2215,7 @@ fi %changelog * Mon Apr 11 2016 Peter Robinson - Add upstream patch to fix IDIV issue when booting on Cortex-A7/15/17 devices +- Update bcm238x patch * Thu Apr 07 2016 Justin M. Forbes - Enable Full Randomization on 32bit x86 CVE-2016-3672 (rhbz 1324749 1324750) From df1a50892b8faf073790cfcacb73a81a23a0162a Mon Sep 17 00:00:00 2001 From: Peter Robinson Date: Mon, 11 Apr 2016 22:36:23 +0100 Subject: [PATCH 044/275] change the means of bcm238x patch set. NFC --- ...upstream-fixes-plus-iproc-mmc-driver.patch | 5009 +++++++++++------ 1 file changed, 3187 insertions(+), 1822 deletions(-) diff --git a/bcm283x-Pull-upstream-fixes-plus-iproc-mmc-driver.patch b/bcm283x-Pull-upstream-fixes-plus-iproc-mmc-driver.patch index 35c6e524b..56f2a3981 100644 --- a/bcm283x-Pull-upstream-fixes-plus-iproc-mmc-driver.patch +++ b/bcm283x-Pull-upstream-fixes-plus-iproc-mmc-driver.patch @@ -1,88 +1,2546 @@ -From 19778e51ab57b1a7e310c2efedbe8d9df1b81672 Mon Sep 17 00:00:00 2001 -From: Peter Robinson -Date: Mon, 11 Apr 2016 11:10:17 +0100 -Subject: [PATCH] bcm283x: Pull upstream fixes plus iproc mmc driver +From 735f01326873349426f041a4fa2f5703a1ed43a4 Mon Sep 17 00:00:00 2001 +From: Eric Anholt +Date: Fri, 5 Feb 2016 15:06:15 -0800 +Subject: [PATCH 01/36] drm/vc4: Fix a framebuffer reference leak on async flip + interrupt. +We'd need X to queue up an async pageflip while another is +outstanding, and then take a SIGIO. I think X actually avoids sending +out the next pageflip while one's already queued, but I'm not sure. + +Signed-off-by: Eric Anholt --- - .../devicetree/bindings/arm/bcm/brcm,bcm2835.txt | 4 + - .../bindings/serial/brcm,bcm2835-aux-uart.txt | 18 + - arch/arm/boot/dts/Makefile | 4 +- - arch/arm/boot/dts/bcm2835-rpi-a-plus.dts | 4 + - arch/arm/boot/dts/bcm2835-rpi-a.dts | 28 + - arch/arm/boot/dts/bcm2835-rpi-b-plus.dts | 4 + - arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts | 4 + - arch/arm/boot/dts/bcm2835-rpi-b.dts | 4 + - arch/arm/boot/dts/bcm2835-rpi.dtsi | 21 + - arch/arm/boot/dts/bcm2836-rpi-2-b.dts | 4 + - arch/arm/boot/dts/bcm2837-rpi-3-b.dts | 22 + - arch/arm/boot/dts/bcm2837.dtsi | 68 +++ - arch/arm/boot/dts/bcm283x.dtsi | 90 ++- - drivers/clk/bcm/clk-bcm2835.c | 12 +- - drivers/gpu/drm/vc4/vc4_bo.c | 7 +- - drivers/gpu/drm/vc4/vc4_crtc.c | 134 +++-- - drivers/gpu/drm/vc4/vc4_drv.h | 12 +- - drivers/gpu/drm/vc4/vc4_hdmi.c | 42 +- - drivers/gpu/drm/vc4/vc4_hvs.c | 97 ++++ - drivers/gpu/drm/vc4/vc4_kms.c | 9 + - drivers/gpu/drm/vc4/vc4_plane.c | 603 +++++++++++++++++++-- - drivers/gpu/drm/vc4/vc4_regs.h | 120 +++- - drivers/gpu/drm/vc4/vc4_v3d.c | 1 + - drivers/mmc/host/Kconfig | 6 +- - drivers/mmc/host/sdhci-iproc.c | 33 +- - drivers/tty/serial/8250/8250_bcm2835aux.c | 146 +++++ - drivers/tty/serial/8250/Kconfig | 24 + - drivers/tty/serial/8250/Makefile | 1 + - 28 files changed, 1394 insertions(+), 128 deletions(-) - create mode 100644 Documentation/devicetree/bindings/serial/brcm,bcm2835-aux-uart.txt - create mode 100644 arch/arm/boot/dts/bcm2835-rpi-a.dts - create mode 100644 arch/arm/boot/dts/bcm2837-rpi-3-b.dts - create mode 100644 arch/arm/boot/dts/bcm2837.dtsi - create mode 100644 drivers/tty/serial/8250/8250_bcm2835aux.c + drivers/gpu/drm/vc4/vc4_crtc.c | 1 + + 1 file changed, 1 insertion(+) -diff --git a/Documentation/devicetree/bindings/arm/bcm/brcm,bcm2835.txt b/Documentation/devicetree/bindings/arm/bcm/brcm,bcm2835.txt -index 11d3056..6ffe087 100644 ---- a/Documentation/devicetree/bindings/arm/bcm/brcm,bcm2835.txt -+++ b/Documentation/devicetree/bindings/arm/bcm/brcm,bcm2835.txt -@@ -30,6 +30,10 @@ Raspberry Pi 2 Model B - Required root node properties: - compatible = "raspberrypi,2-model-b", "brcm,bcm2836"; +diff --git a/drivers/gpu/drm/vc4/vc4_crtc.c b/drivers/gpu/drm/vc4/vc4_crtc.c +index 018145e..989ee72 100644 +--- a/drivers/gpu/drm/vc4/vc4_crtc.c ++++ b/drivers/gpu/drm/vc4/vc4_crtc.c +@@ -544,6 +544,7 @@ static int vc4_async_page_flip(struct drm_crtc *crtc, + /* Make sure all other async modesetes have landed. */ + ret = down_interruptible(&vc4->async_modeset); + if (ret) { ++ drm_framebuffer_unreference(fb); + kfree(flip_state); + return ret; + } +-- +2.7.3 + +From e1ceac2cefbda12d1d9d9ee547fc0cc8bfeebde6 Mon Sep 17 00:00:00 2001 +From: Eric Anholt +Date: Fri, 12 Feb 2016 14:15:14 -0800 +Subject: [PATCH 02/36] drm/vc4: Bring HDMI up from power off if necessary. + +If the firmware hadn't brought up HDMI for us, we need to do its +power-on reset sequence (reset HD and and clear its STANDBY bits, +reset HDMI, and leave the PHY disabled). + +Signed-off-by: Eric Anholt +--- + drivers/gpu/drm/vc4/vc4_hdmi.c | 29 ++++++++++++++++++++++++++++- + drivers/gpu/drm/vc4/vc4_regs.h | 2 ++ + 2 files changed, 30 insertions(+), 1 deletion(-) + +diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c +index c69c046..6e55760 100644 +--- a/drivers/gpu/drm/vc4/vc4_hdmi.c ++++ b/drivers/gpu/drm/vc4/vc4_hdmi.c +@@ -495,6 +495,16 @@ static int vc4_hdmi_bind(struct device *dev, struct device *master, void *data) + goto err_put_i2c; + } -+Raspberry Pi 3 Model B -+Required root node properties: -+compatible = "raspberrypi,3-model-b", "brcm,bcm2837"; ++ /* This is the rate that is set by the firmware. The number ++ * needs to be a bit higher than the pixel clock rate ++ * (generally 148.5Mhz). ++ */ ++ ret = clk_set_rate(hdmi->hsm_clock, 163682864); ++ if (ret) { ++ DRM_ERROR("Failed to set HSM clock rate: %d\n", ret); ++ goto err_unprepare_pix; ++ } + - Raspberry Pi Compute Module - Required root node properties: - compatible = "raspberrypi,compute-module", "brcm,bcm2835"; -diff --git a/Documentation/devicetree/bindings/serial/brcm,bcm2835-aux-uart.txt b/Documentation/devicetree/bindings/serial/brcm,bcm2835-aux-uart.txt -new file mode 100644 -index 0000000..b5cc629 ---- /dev/null -+++ b/Documentation/devicetree/bindings/serial/brcm,bcm2835-aux-uart.txt -@@ -0,0 +1,18 @@ -+* BCM2835 AUXILIAR UART + ret = clk_prepare_enable(hdmi->hsm_clock); + if (ret) { + DRM_ERROR("Failed to turn on HDMI state machine clock: %d\n", +@@ -516,7 +526,24 @@ static int vc4_hdmi_bind(struct device *dev, struct device *master, void *data) + vc4->hdmi = hdmi; + + /* HDMI core must be enabled. */ +- WARN_ON_ONCE((HD_READ(VC4_HD_M_CTL) & VC4_HD_M_ENABLE) == 0); ++ if (!(HD_READ(VC4_HD_M_CTL) & VC4_HD_M_ENABLE)) { ++ HD_WRITE(VC4_HD_M_CTL, VC4_HD_M_SW_RST); ++ udelay(1); ++ HD_WRITE(VC4_HD_M_CTL, 0); + -+Required properties: ++ HD_WRITE(VC4_HD_M_CTL, VC4_HD_M_ENABLE); + -+- compatible: "brcm,bcm2835-aux-uart" -+- reg: The base address of the UART register bank. -+- interrupts: A single interrupt specifier. -+- clocks: Clock driving the hardware; used to figure out the baud rate -+ divisor. ++ HDMI_WRITE(VC4_HDMI_SW_RESET_CONTROL, ++ VC4_HDMI_SW_RESET_HDMI | ++ VC4_HDMI_SW_RESET_FORMAT_DETECT); + -+Example: ++ HDMI_WRITE(VC4_HDMI_SW_RESET_CONTROL, 0); + -+ uart1: serial@7e215040 { -+ compatible = "brcm,bcm2835-aux-uart"; -+ reg = <0x7e215040 0x40>; -+ interrupts = <1 29>; -+ clocks = <&aux BCM2835_AUX_CLOCK_UART>; -+ }; ++ /* PHY should be in reset, like ++ * vc4_hdmi_encoder_disable() does. ++ */ ++ HDMI_WRITE(VC4_HDMI_TX_PHY_RESET_CTL, 0xf << 16); ++ } + + drm_encoder_init(drm, hdmi->encoder, &vc4_hdmi_encoder_funcs, + DRM_MODE_ENCODER_TMDS, NULL); +diff --git a/drivers/gpu/drm/vc4/vc4_regs.h b/drivers/gpu/drm/vc4/vc4_regs.h +index 4e52a0a..85c36d2 100644 +--- a/drivers/gpu/drm/vc4/vc4_regs.h ++++ b/drivers/gpu/drm/vc4/vc4_regs.h +@@ -456,6 +456,8 @@ + #define VC4_HDMI_TX_PHY_RESET_CTL 0x2c0 + + #define VC4_HD_M_CTL 0x00c ++# define VC4_HD_M_REGISTER_FILE_STANDBY (3 << 6) ++# define VC4_HD_M_RAM_STANDBY (3 << 4) + # define VC4_HD_M_SW_RST BIT(2) + # define VC4_HD_M_ENABLE BIT(0) + +-- +2.7.3 + +From 63d38d99739736480b24c9f9bd7880ce4e49eb0c Mon Sep 17 00:00:00 2001 +From: Eric Anholt +Date: Fri, 12 Feb 2016 15:16:56 -0800 +Subject: [PATCH 03/36] drm/vc4: Add another reg to HDMI debug dumping. + +This is also involved in the HDMI setup sequence so it's nice to see +it. + +Signed-off-by: Eric Anholt +--- + drivers/gpu/drm/vc4/vc4_hdmi.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c +index 6e55760..56272ca 100644 +--- a/drivers/gpu/drm/vc4/vc4_hdmi.c ++++ b/drivers/gpu/drm/vc4/vc4_hdmi.c +@@ -95,6 +95,7 @@ static const struct { + HDMI_REG(VC4_HDMI_SW_RESET_CONTROL), + HDMI_REG(VC4_HDMI_HOTPLUG_INT), + HDMI_REG(VC4_HDMI_HOTPLUG), ++ HDMI_REG(VC4_HDMI_RAM_PACKET_CONFIG), + HDMI_REG(VC4_HDMI_HORZA), + HDMI_REG(VC4_HDMI_HORZB), + HDMI_REG(VC4_HDMI_FIFO_CTL), +-- +2.7.3 + +From 46e96facb9b67486285c26f88ee747b8d9f4abc9 Mon Sep 17 00:00:00 2001 +From: Eric Anholt +Date: Mon, 15 Feb 2016 17:06:02 -0800 +Subject: [PATCH 04/36] drm/vc4: Fix the name of the VSYNCD_EVEN register. + +It's used for delaying vsync in interlaced mode. + +Signed-off-by: Eric Anholt +--- + drivers/gpu/drm/vc4/vc4_crtc.c | 2 +- + drivers/gpu/drm/vc4/vc4_regs.h | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/drivers/gpu/drm/vc4/vc4_crtc.c b/drivers/gpu/drm/vc4/vc4_crtc.c +index 989ee72..5e84be2 100644 +--- a/drivers/gpu/drm/vc4/vc4_crtc.c ++++ b/drivers/gpu/drm/vc4/vc4_crtc.c +@@ -83,7 +83,7 @@ static const struct { + } crtc_regs[] = { + CRTC_REG(PV_CONTROL), + CRTC_REG(PV_V_CONTROL), +- CRTC_REG(PV_VSYNCD), ++ CRTC_REG(PV_VSYNCD_EVEN), + CRTC_REG(PV_HORZA), + CRTC_REG(PV_HORZB), + CRTC_REG(PV_VERTA), +diff --git a/drivers/gpu/drm/vc4/vc4_regs.h b/drivers/gpu/drm/vc4/vc4_regs.h +index 85c36d2..d529665 100644 +--- a/drivers/gpu/drm/vc4/vc4_regs.h ++++ b/drivers/gpu/drm/vc4/vc4_regs.h +@@ -187,7 +187,7 @@ + # define PV_VCONTROL_CONTINUOUS BIT(1) + # define PV_VCONTROL_VIDEN BIT(0) + +-#define PV_VSYNCD 0x08 ++#define PV_VSYNCD_EVEN 0x08 + + #define PV_HORZA 0x0c + # define PV_HORZA_HBP_MASK VC4_MASK(31, 16) +-- +2.7.3 + +From baff41935a7b4c1b6015a99a0ca222fd0a5552b9 Mon Sep 17 00:00:00 2001 +From: Eric Anholt +Date: Mon, 15 Feb 2016 17:31:41 -0800 +Subject: [PATCH 05/36] drm/vc4: Fix setting of vertical timings in the CRTC. + +It looks like when I went to add the interlaced bits, I just took the +existing PV_VERT* block and indented it, instead of copy and pasting +it first. Without this, changing resolution never worked. + +Signed-off-by: Eric Anholt +--- + drivers/gpu/drm/vc4/vc4_crtc.c | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +diff --git a/drivers/gpu/drm/vc4/vc4_crtc.c b/drivers/gpu/drm/vc4/vc4_crtc.c +index 5e84be2..93d53c2 100644 +--- a/drivers/gpu/drm/vc4/vc4_crtc.c ++++ b/drivers/gpu/drm/vc4/vc4_crtc.c +@@ -212,6 +212,16 @@ static void vc4_crtc_mode_set_nofb(struct drm_crtc *crtc) + PV_HORZB_HFP) | + VC4_SET_FIELD(mode->hdisplay, PV_HORZB_HACTIVE)); + ++ CRTC_WRITE(PV_VERTA, ++ VC4_SET_FIELD(mode->vtotal - mode->vsync_end, ++ PV_VERTA_VBP) | ++ VC4_SET_FIELD(mode->vsync_end - mode->vsync_start, ++ PV_VERTA_VSYNC)); ++ CRTC_WRITE(PV_VERTB, ++ VC4_SET_FIELD(mode->vsync_start - mode->vdisplay, ++ PV_VERTB_VFP) | ++ VC4_SET_FIELD(vactive, PV_VERTB_VACTIVE)); ++ + if (interlace) { + CRTC_WRITE(PV_VERTA_EVEN, + VC4_SET_FIELD(mode->vtotal - mode->vsync_end - 1, +-- +2.7.3 + +From 6f7cde6ad6e866660b8e5607a213872e5f34e8fd Mon Sep 17 00:00:00 2001 +From: Eric Anholt +Date: Tue, 16 Feb 2016 10:24:08 -0800 +Subject: [PATCH 06/36] drm/vc4: Initialize scaler DISPBKGND on modeset. + +We weren't updating the interlaced bit, so we'd scan out incorrectly +if the firmware had brought up the TV encoder and we were switching to +HDMI. + +Signed-off-by: Eric Anholt +--- + drivers/gpu/drm/vc4/vc4_crtc.c | 6 ++++++ + drivers/gpu/drm/vc4/vc4_regs.h | 14 ++++++++++++++ + 2 files changed, 20 insertions(+) + +diff --git a/drivers/gpu/drm/vc4/vc4_crtc.c b/drivers/gpu/drm/vc4/vc4_crtc.c +index 93d53c2..6ae5abc 100644 +--- a/drivers/gpu/drm/vc4/vc4_crtc.c ++++ b/drivers/gpu/drm/vc4/vc4_crtc.c +@@ -183,6 +183,8 @@ static int vc4_get_clock_select(struct drm_crtc *crtc) + + static void vc4_crtc_mode_set_nofb(struct drm_crtc *crtc) + { ++ struct drm_device *dev = crtc->dev; ++ struct vc4_dev *vc4 = to_vc4_dev(dev); + struct vc4_crtc *vc4_crtc = to_vc4_crtc(crtc); + struct drm_crtc_state *state = crtc->state; + struct drm_display_mode *mode = &state->adjusted_mode; +@@ -251,6 +253,10 @@ static void vc4_crtc_mode_set_nofb(struct drm_crtc *crtc) + PV_CONTROL_FIFO_CLR | + PV_CONTROL_EN); + ++ HVS_WRITE(SCALER_DISPBKGNDX(vc4_crtc->channel), ++ SCALER_DISPBKGND_AUTOHS | ++ (interlace ? SCALER_DISPBKGND_INTERLACE : 0)); ++ + if (debug_dump_regs) { + DRM_INFO("CRTC %d regs after:\n", drm_crtc_index(crtc)); + vc4_crtc_dump_regs(vc4_crtc); +diff --git a/drivers/gpu/drm/vc4/vc4_regs.h b/drivers/gpu/drm/vc4/vc4_regs.h +index d529665..7c29993 100644 +--- a/drivers/gpu/drm/vc4/vc4_regs.h ++++ b/drivers/gpu/drm/vc4/vc4_regs.h +@@ -350,6 +350,17 @@ + # define SCALER_DISPCTRLX_HEIGHT_SHIFT 0 + + #define SCALER_DISPBKGND0 0x00000044 ++# define SCALER_DISPBKGND_AUTOHS BIT(31) ++# define SCALER_DISPBKGND_INTERLACE BIT(30) ++# define SCALER_DISPBKGND_GAMMA BIT(29) ++# define SCALER_DISPBKGND_TESTMODE_MASK VC4_MASK(28, 25) ++# define SCALER_DISPBKGND_TESTMODE_SHIFT 25 ++/* Enables filling the scaler line with the RGB value in the low 24 ++ * bits before compositing. Costs cycles, so should be skipped if ++ * opaque display planes will cover everything. ++ */ ++# define SCALER_DISPBKGND_FILL BIT(24) ++ + #define SCALER_DISPSTAT0 0x00000048 + #define SCALER_DISPBASE0 0x0000004c + # define SCALER_DISPSTATX_MODE_MASK VC4_MASK(31, 30) +@@ -362,6 +373,9 @@ + # define SCALER_DISPSTATX_EMPTY BIT(28) + #define SCALER_DISPCTRL1 0x00000050 + #define SCALER_DISPBKGND1 0x00000054 ++#define SCALER_DISPBKGNDX(x) (SCALER_DISPBKGND0 + \ ++ (x) * (SCALER_DISPBKGND1 - \ ++ SCALER_DISPBKGND0)) + #define SCALER_DISPSTAT1 0x00000058 + #define SCALER_DISPSTATX(x) (SCALER_DISPSTAT0 + \ + (x) * (SCALER_DISPSTAT1 - \ +-- +2.7.3 + +From 449c91f1f06a573ad4a3edd18d7b493bf44478f6 Mon Sep 17 00:00:00 2001 +From: Eric Anholt +Date: Mon, 28 Dec 2015 14:14:09 -0800 +Subject: [PATCH 07/36] drm/vc4: Improve comments on vc4_plane_state members. + +Signed-off-by: Eric Anholt +--- + drivers/gpu/drm/vc4/vc4_plane.c | 9 ++++++--- + 1 file changed, 6 insertions(+), 3 deletions(-) + +diff --git a/drivers/gpu/drm/vc4/vc4_plane.c b/drivers/gpu/drm/vc4/vc4_plane.c +index 0addbad..45e353d 100644 +--- a/drivers/gpu/drm/vc4/vc4_plane.c ++++ b/drivers/gpu/drm/vc4/vc4_plane.c +@@ -26,16 +26,19 @@ + + struct vc4_plane_state { + struct drm_plane_state base; ++ /* System memory copy of the display list for this element, computed ++ * at atomic_check time. ++ */ + u32 *dlist; +- u32 dlist_size; /* Number of dwords in allocated for the display list */ ++ u32 dlist_size; /* Number of dwords allocated for the display list */ + u32 dlist_count; /* Number of used dwords in the display list. */ + + /* Offset in the dlist to pointer word 0. */ + u32 pw0_offset; + + /* Offset where the plane's dlist was last stored in the +- hardware at vc4_crtc_atomic_flush() time. +- */ ++ * hardware at vc4_crtc_atomic_flush() time. ++ */ + u32 *hw_dlist; + }; + +-- +2.7.3 + +From 4c8b2ce80659e1c7a75b7b54430dab320aeb440b Mon Sep 17 00:00:00 2001 +From: Eric Anholt +Date: Mon, 28 Dec 2015 14:14:57 -0800 +Subject: [PATCH 08/36] drm/vc4: Add missing __iomem annotation to hw_dlist. + +This is the pointer to the HVS device's memory where we stored the +contents of *dlist. + +Signed-off-by: Eric Anholt +--- + drivers/gpu/drm/vc4/vc4_plane.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/gpu/drm/vc4/vc4_plane.c b/drivers/gpu/drm/vc4/vc4_plane.c +index 45e353d..ed07ee5 100644 +--- a/drivers/gpu/drm/vc4/vc4_plane.c ++++ b/drivers/gpu/drm/vc4/vc4_plane.c +@@ -39,7 +39,7 @@ struct vc4_plane_state { + /* Offset where the plane's dlist was last stored in the + * hardware at vc4_crtc_atomic_flush() time. + */ +- u32 *hw_dlist; ++ u32 __iomem *hw_dlist; + }; + + static inline struct vc4_plane_state * +-- +2.7.3 + +From f792f380190638916b495f3051547a849fc97fd2 Mon Sep 17 00:00:00 2001 +From: Eric Anholt +Date: Mon, 28 Dec 2015 14:34:44 -0800 +Subject: [PATCH 09/36] drm/vc4: Move the plane clipping/scaling setup to a + separate function. + +As we add actual scaling, this is going to get way more complicated. + +Signed-off-by: Eric Anholt +--- + drivers/gpu/drm/vc4/vc4_plane.c | 78 +++++++++++++++++++++++++++-------------- + 1 file changed, 52 insertions(+), 26 deletions(-) + +diff --git a/drivers/gpu/drm/vc4/vc4_plane.c b/drivers/gpu/drm/vc4/vc4_plane.c +index ed07ee5..554ed54 100644 +--- a/drivers/gpu/drm/vc4/vc4_plane.c ++++ b/drivers/gpu/drm/vc4/vc4_plane.c +@@ -40,6 +40,14 @@ struct vc4_plane_state { + * hardware at vc4_crtc_atomic_flush() time. + */ + u32 __iomem *hw_dlist; ++ ++ /* Clipped coordinates of the plane on the display. */ ++ int crtc_x, crtc_y, crtc_w, crtc_h; ++ ++ /* Offset to start scanning out from the start of the plane's ++ * BO. ++ */ ++ u32 offset; + }; + + static inline struct vc4_plane_state * +@@ -151,22 +159,17 @@ static void vc4_dlist_write(struct vc4_plane_state *vc4_state, u32 val) + vc4_state->dlist[vc4_state->dlist_count++] = val; + } + +-/* Writes out a full display list for an active plane to the plane's +- * private dlist state. +- */ +-static int vc4_plane_mode_set(struct drm_plane *plane, +- struct drm_plane_state *state) ++static int vc4_plane_setup_clipping_and_scaling(struct drm_plane_state *state) + { + struct vc4_plane_state *vc4_state = to_vc4_plane_state(state); + struct drm_framebuffer *fb = state->fb; +- struct drm_gem_cma_object *bo = drm_fb_cma_get_gem_obj(fb, 0); +- u32 ctl0_offset = vc4_state->dlist_count; +- const struct hvs_format *format = vc4_get_hvs_format(fb->pixel_format); +- uint32_t offset = fb->offsets[0]; +- int crtc_x = state->crtc_x; +- int crtc_y = state->crtc_y; +- int crtc_w = state->crtc_w; +- int crtc_h = state->crtc_h; ++ ++ vc4_state->offset = fb->offsets[0]; ++ ++ vc4_state->crtc_x = state->crtc_x; ++ vc4_state->crtc_y = state->crtc_y; ++ vc4_state->crtc_w = state->crtc_w; ++ vc4_state->crtc_h = state->crtc_h; + + if (state->crtc_w << 16 != state->src_w || + state->crtc_h << 16 != state->src_h) { +@@ -178,18 +181,41 @@ static int vc4_plane_mode_set(struct drm_plane *plane, + return -EINVAL; + } + +- if (crtc_x < 0) { +- offset += drm_format_plane_cpp(fb->pixel_format, 0) * -crtc_x; +- crtc_w += crtc_x; +- crtc_x = 0; ++ if (vc4_state->crtc_x < 0) { ++ vc4_state->offset += (drm_format_plane_cpp(fb->pixel_format, ++ 0) * ++ -vc4_state->crtc_x); ++ vc4_state->crtc_w += vc4_state->crtc_x; ++ vc4_state->crtc_x = 0; + } + +- if (crtc_y < 0) { +- offset += fb->pitches[0] * -crtc_y; +- crtc_h += crtc_y; +- crtc_y = 0; ++ if (vc4_state->crtc_y < 0) { ++ vc4_state->offset += fb->pitches[0] * -vc4_state->crtc_y; ++ vc4_state->crtc_h += vc4_state->crtc_y; ++ vc4_state->crtc_y = 0; + } + ++ return 0; ++} ++ ++ ++/* Writes out a full display list for an active plane to the plane's ++ * private dlist state. ++ */ ++static int vc4_plane_mode_set(struct drm_plane *plane, ++ struct drm_plane_state *state) ++{ ++ struct vc4_plane_state *vc4_state = to_vc4_plane_state(state); ++ struct drm_framebuffer *fb = state->fb; ++ struct drm_gem_cma_object *bo = drm_fb_cma_get_gem_obj(fb, 0); ++ u32 ctl0_offset = vc4_state->dlist_count; ++ const struct hvs_format *format = vc4_get_hvs_format(fb->pixel_format); ++ int ret; ++ ++ ret = vc4_plane_setup_clipping_and_scaling(state); ++ if (ret) ++ return ret; ++ + vc4_dlist_write(vc4_state, + SCALER_CTL0_VALID | + (format->pixel_order << SCALER_CTL0_ORDER_SHIFT) | +@@ -199,8 +225,8 @@ static int vc4_plane_mode_set(struct drm_plane *plane, + /* Position Word 0: Image Positions and Alpha Value */ + vc4_dlist_write(vc4_state, + VC4_SET_FIELD(0xff, SCALER_POS0_FIXED_ALPHA) | +- VC4_SET_FIELD(crtc_x, SCALER_POS0_START_X) | +- VC4_SET_FIELD(crtc_y, SCALER_POS0_START_Y)); ++ VC4_SET_FIELD(vc4_state->crtc_x, SCALER_POS0_START_X) | ++ VC4_SET_FIELD(vc4_state->crtc_y, SCALER_POS0_START_Y)); + + /* Position Word 1: Scaled Image Dimensions. + * Skipped due to SCALER_CTL0_UNITY scaling. +@@ -212,8 +238,8 @@ static int vc4_plane_mode_set(struct drm_plane *plane, + SCALER_POS2_ALPHA_MODE_PIPELINE : + SCALER_POS2_ALPHA_MODE_FIXED, + SCALER_POS2_ALPHA_MODE) | +- VC4_SET_FIELD(crtc_w, SCALER_POS2_WIDTH) | +- VC4_SET_FIELD(crtc_h, SCALER_POS2_HEIGHT)); ++ VC4_SET_FIELD(vc4_state->crtc_w, SCALER_POS2_WIDTH) | ++ VC4_SET_FIELD(vc4_state->crtc_h, SCALER_POS2_HEIGHT)); + + /* Position Word 3: Context. Written by the HVS. */ + vc4_dlist_write(vc4_state, 0xc0c0c0c0); +@@ -221,7 +247,7 @@ static int vc4_plane_mode_set(struct drm_plane *plane, + vc4_state->pw0_offset = vc4_state->dlist_count; + + /* Pointer Word 0: RGB / Y Pointer */ +- vc4_dlist_write(vc4_state, bo->paddr + offset); ++ vc4_dlist_write(vc4_state, bo->paddr + vc4_state->offset); + + /* Pointer Context Word 0: Written by the HVS */ + vc4_dlist_write(vc4_state, 0xc0c0c0c0); +-- +2.7.3 + +From 696f1db279f08e58bc94172818209d5914e0e2d8 Mon Sep 17 00:00:00 2001 +From: Eric Anholt +Date: Wed, 30 Dec 2015 11:50:22 -0800 +Subject: [PATCH 10/36] drm/vc4: Add a proper short-circut path for legacy + cursor updates. + +Previously, on every modeset we would allocate new display list +memory, recompute changed planes, write all of them to the new memory, +and pointed scanout at the new list (which will latch approximately at +the next line of scanout). We let +drm_atomic_helper_wait_for_vblanks() decide whether we needed to wait +for a vblank after a modeset before cleaning up the old state and +letting the next modeset proceed, and on legacy cursor updates we +wouldn't wait. If you moved the cursor fast enough, we could +potentially wrap around the display list memory area and overwrite the +existing display list while it was still being scanned out, resulting +in the HVS scanning out garbage or just halting. + +Instead of making cursor updates wait for scanout to move to the new +display list area (which introduces significant cursor lag in X), we +just rewrite our current display list. + +Signed-off-by: Eric Anholt +--- + drivers/gpu/drm/vc4/vc4_kms.c | 9 ++++ + drivers/gpu/drm/vc4/vc4_plane.c | 94 ++++++++++++++++++++++++++++++++++++++--- + 2 files changed, 96 insertions(+), 7 deletions(-) + +diff --git a/drivers/gpu/drm/vc4/vc4_kms.c b/drivers/gpu/drm/vc4/vc4_kms.c +index f95f2df..4718ae5 100644 +--- a/drivers/gpu/drm/vc4/vc4_kms.c ++++ b/drivers/gpu/drm/vc4/vc4_kms.c +@@ -49,6 +49,15 @@ vc4_atomic_complete_commit(struct vc4_commit *c) + + drm_atomic_helper_commit_modeset_enables(dev, state); + ++ /* Make sure that drm_atomic_helper_wait_for_vblanks() ++ * actually waits for vblank. If we're doing a full atomic ++ * modeset (as opposed to a vc4_update_plane() short circuit), ++ * then we need to wait for scanout to be done with our ++ * display lists before we free it and potentially reallocate ++ * and overwrite the dlist memory with a new modeset. ++ */ ++ state->legacy_cursor_update = false; ++ + drm_atomic_helper_wait_for_vblanks(dev, state); + + drm_atomic_helper_cleanup_planes(dev, state); +diff --git a/drivers/gpu/drm/vc4/vc4_plane.c b/drivers/gpu/drm/vc4/vc4_plane.c +index 554ed54..713ec00 100644 +--- a/drivers/gpu/drm/vc4/vc4_plane.c ++++ b/drivers/gpu/drm/vc4/vc4_plane.c +@@ -33,8 +33,12 @@ struct vc4_plane_state { + u32 dlist_size; /* Number of dwords allocated for the display list */ + u32 dlist_count; /* Number of used dwords in the display list. */ + +- /* Offset in the dlist to pointer word 0. */ +- u32 pw0_offset; ++ /* Offset in the dlist to various words, for pageflip or ++ * cursor updates. ++ */ ++ u32 pos0_offset; ++ u32 pos2_offset; ++ u32 ptr0_offset; + + /* Offset where the plane's dlist was last stored in the + * hardware at vc4_crtc_atomic_flush() time. +@@ -223,6 +227,7 @@ static int vc4_plane_mode_set(struct drm_plane *plane, + SCALER_CTL0_UNITY); + + /* Position Word 0: Image Positions and Alpha Value */ ++ vc4_state->pos0_offset = vc4_state->dlist_count; + vc4_dlist_write(vc4_state, + VC4_SET_FIELD(0xff, SCALER_POS0_FIXED_ALPHA) | + VC4_SET_FIELD(vc4_state->crtc_x, SCALER_POS0_START_X) | +@@ -233,6 +238,7 @@ static int vc4_plane_mode_set(struct drm_plane *plane, + */ + + /* Position Word 2: Source Image Size, Alpha Mode */ ++ vc4_state->pos2_offset = vc4_state->dlist_count; + vc4_dlist_write(vc4_state, + VC4_SET_FIELD(format->has_alpha ? + SCALER_POS2_ALPHA_MODE_PIPELINE : +@@ -244,9 +250,8 @@ static int vc4_plane_mode_set(struct drm_plane *plane, + /* Position Word 3: Context. Written by the HVS. */ + vc4_dlist_write(vc4_state, 0xc0c0c0c0); + +- vc4_state->pw0_offset = vc4_state->dlist_count; +- + /* Pointer Word 0: RGB / Y Pointer */ ++ vc4_state->ptr0_offset = vc4_state->dlist_count; + vc4_dlist_write(vc4_state, bo->paddr + vc4_state->offset); + + /* Pointer Context Word 0: Written by the HVS */ +@@ -332,13 +337,13 @@ void vc4_plane_async_set_fb(struct drm_plane *plane, struct drm_framebuffer *fb) + * scanout will start from this address as soon as the FIFO + * needs to refill with pixels. + */ +- writel(addr, &vc4_state->hw_dlist[vc4_state->pw0_offset]); ++ writel(addr, &vc4_state->hw_dlist[vc4_state->ptr0_offset]); + + /* Also update the CPU-side dlist copy, so that any later + * atomic updates that don't do a new modeset on our plane + * also use our updated address. + */ +- vc4_state->dlist[vc4_state->pw0_offset] = addr; ++ vc4_state->dlist[vc4_state->ptr0_offset] = addr; + } + + static const struct drm_plane_helper_funcs vc4_plane_helper_funcs = { +@@ -354,8 +359,83 @@ static void vc4_plane_destroy(struct drm_plane *plane) + drm_plane_cleanup(plane); + } + ++/* Implements immediate (non-vblank-synced) updates of the cursor ++ * position, or falls back to the atomic helper otherwise. ++ */ ++static int ++vc4_update_plane(struct drm_plane *plane, ++ struct drm_crtc *crtc, ++ struct drm_framebuffer *fb, ++ int crtc_x, int crtc_y, ++ unsigned int crtc_w, unsigned int crtc_h, ++ uint32_t src_x, uint32_t src_y, ++ uint32_t src_w, uint32_t src_h) ++{ ++ struct drm_plane_state *plane_state; ++ struct vc4_plane_state *vc4_state; ++ ++ if (plane != crtc->cursor) ++ goto out; ++ ++ plane_state = plane->state; ++ vc4_state = to_vc4_plane_state(plane_state); ++ ++ if (!plane_state) ++ goto out; ++ ++ /* If we're changing the cursor contents, do that in the ++ * normal vblank-synced atomic path. ++ */ ++ if (fb != plane_state->fb) ++ goto out; ++ ++ /* No configuring new scaling in the fast path. */ ++ if (crtc_w != plane_state->crtc_w || ++ crtc_h != plane_state->crtc_h || ++ src_w != plane_state->src_w || ++ src_h != plane_state->src_h) { ++ goto out; ++ } ++ ++ /* Set the cursor's position on the screen. This is the ++ * expected change from the drm_mode_cursor_universal() ++ * helper. ++ */ ++ plane_state->crtc_x = crtc_x; ++ plane_state->crtc_y = crtc_y; ++ ++ /* Allow changing the start position within the cursor BO, if ++ * that matters. ++ */ ++ plane_state->src_x = src_x; ++ plane_state->src_y = src_y; ++ ++ /* Update the display list based on the new crtc_x/y. */ ++ vc4_plane_atomic_check(plane, plane_state); ++ ++ /* Note that we can't just call vc4_plane_write_dlist() ++ * because that would smash the context data that the HVS is ++ * currently using. ++ */ ++ writel(vc4_state->dlist[vc4_state->pos0_offset], ++ &vc4_state->hw_dlist[vc4_state->pos0_offset]); ++ writel(vc4_state->dlist[vc4_state->pos2_offset], ++ &vc4_state->hw_dlist[vc4_state->pos2_offset]); ++ writel(vc4_state->dlist[vc4_state->ptr0_offset], ++ &vc4_state->hw_dlist[vc4_state->ptr0_offset]); ++ ++ return 0; ++ ++out: ++ return drm_atomic_helper_update_plane(plane, crtc, fb, ++ crtc_x, crtc_y, ++ crtc_w, crtc_h, ++ src_x, src_y, ++ src_w, src_h); ++} ++ + static const struct drm_plane_funcs vc4_plane_funcs = { +- .update_plane = drm_atomic_helper_update_plane, ++ .update_plane = vc4_update_plane, + .disable_plane = drm_atomic_helper_disable_plane, + .destroy = vc4_plane_destroy, + .set_property = NULL, +-- +2.7.3 + +From cd30019db690e3a92fe5d7d771352f118a105f82 Mon Sep 17 00:00:00 2001 +From: Eric Anholt +Date: Mon, 28 Dec 2015 13:25:41 -0800 +Subject: [PATCH 11/36] drm/vc4: Make the CRTCs cooperate on allocating display + lists. + +So far, we've only ever lit up one CRTC, so this has been fine. To +extend to more displays or more planes, we need to make sure we don't +run our display lists into each other. + +Signed-off-by: Eric Anholt +--- + drivers/gpu/drm/vc4/vc4_crtc.c | 115 +++++++++++++++++++++++------------------ + drivers/gpu/drm/vc4/vc4_drv.h | 8 ++- + drivers/gpu/drm/vc4/vc4_hvs.c | 13 +++++ + 3 files changed, 84 insertions(+), 52 deletions(-) + +diff --git a/drivers/gpu/drm/vc4/vc4_crtc.c b/drivers/gpu/drm/vc4/vc4_crtc.c +index 6ae5abc..9032c06 100644 +--- a/drivers/gpu/drm/vc4/vc4_crtc.c ++++ b/drivers/gpu/drm/vc4/vc4_crtc.c +@@ -49,22 +49,27 @@ struct vc4_crtc { + /* Which HVS channel we're using for our CRTC. */ + int channel; + +- /* Pointer to the actual hardware display list memory for the +- * crtc. +- */ +- u32 __iomem *dlist; +- +- u32 dlist_size; /* in dwords */ +- + struct drm_pending_vblank_event *event; + }; + ++struct vc4_crtc_state { ++ struct drm_crtc_state base; ++ /* Dlist area for this CRTC configuration. */ ++ struct drm_mm_node mm; ++}; ++ + static inline struct vc4_crtc * + to_vc4_crtc(struct drm_crtc *crtc) + { + return (struct vc4_crtc *)crtc; + } + ++static inline struct vc4_crtc_state * ++to_vc4_crtc_state(struct drm_crtc_state *crtc_state) ++{ ++ return (struct vc4_crtc_state *)crtc_state; ++} ++ + struct vc4_crtc_data { + /* Which channel of the HVS this pixelvalve sources from. */ + int hvs_channel; +@@ -335,11 +340,13 @@ static void vc4_crtc_enable(struct drm_crtc *crtc) + static int vc4_crtc_atomic_check(struct drm_crtc *crtc, + struct drm_crtc_state *state) + { ++ struct vc4_crtc_state *vc4_state = to_vc4_crtc_state(state); + struct drm_device *dev = crtc->dev; + struct vc4_dev *vc4 = to_vc4_dev(dev); + struct drm_plane *plane; +- struct vc4_crtc *vc4_crtc = to_vc4_crtc(crtc); ++ unsigned long flags; + u32 dlist_count = 0; ++ int ret; + + /* The pixelvalve can only feed one encoder (and encoders are + * 1:1 with connectors.) +@@ -362,18 +369,12 @@ static int vc4_crtc_atomic_check(struct drm_crtc *crtc, + + dlist_count++; /* Account for SCALER_CTL0_END. */ + +- if (!vc4_crtc->dlist || dlist_count > vc4_crtc->dlist_size) { +- vc4_crtc->dlist = ((u32 __iomem *)vc4->hvs->dlist + +- HVS_BOOTLOADER_DLIST_END); +- vc4_crtc->dlist_size = ((SCALER_DLIST_SIZE >> 2) - +- HVS_BOOTLOADER_DLIST_END); +- +- if (dlist_count > vc4_crtc->dlist_size) { +- DRM_DEBUG_KMS("dlist too large for CRTC (%d > %d).\n", +- dlist_count, vc4_crtc->dlist_size); +- return -EINVAL; +- } +- } ++ spin_lock_irqsave(&vc4->hvs->mm_lock, flags); ++ ret = drm_mm_insert_node(&vc4->hvs->dlist_mm, &vc4_state->mm, ++ dlist_count, 1, 0); ++ spin_unlock_irqrestore(&vc4->hvs->mm_lock, flags); ++ if (ret) ++ return ret; + + return 0; + } +@@ -384,47 +385,29 @@ static void vc4_crtc_atomic_flush(struct drm_crtc *crtc, + struct drm_device *dev = crtc->dev; + struct vc4_dev *vc4 = to_vc4_dev(dev); + struct vc4_crtc *vc4_crtc = to_vc4_crtc(crtc); ++ struct vc4_crtc_state *vc4_state = to_vc4_crtc_state(crtc->state); + struct drm_plane *plane; + bool debug_dump_regs = false; +- u32 __iomem *dlist_next = vc4_crtc->dlist; ++ u32 __iomem *dlist_start = vc4->hvs->dlist + vc4_state->mm.start; ++ u32 __iomem *dlist_next = dlist_start; + + if (debug_dump_regs) { + DRM_INFO("CRTC %d HVS before:\n", drm_crtc_index(crtc)); + vc4_hvs_dump_state(dev); + } + +- /* Copy all the active planes' dlist contents to the hardware dlist. +- * +- * XXX: If the new display list was large enough that it +- * overlapped a currently-read display list, we need to do +- * something like disable scanout before putting in the new +- * list. For now, we're safe because we only have the two +- * planes. +- */ ++ /* Copy all the active planes' dlist contents to the hardware dlist. */ + drm_atomic_crtc_for_each_plane(plane, crtc) { + dlist_next += vc4_plane_write_dlist(plane, dlist_next); + } + +- if (dlist_next == vc4_crtc->dlist) { +- /* If no planes were enabled, use the SCALER_CTL0_END +- * at the start of the display list memory (in the +- * bootloader section). We'll rewrite that +- * SCALER_CTL0_END, just in case, though. +- */ +- writel(SCALER_CTL0_END, vc4->hvs->dlist); +- HVS_WRITE(SCALER_DISPLISTX(vc4_crtc->channel), 0); +- } else { +- writel(SCALER_CTL0_END, dlist_next); +- dlist_next++; +- +- HVS_WRITE(SCALER_DISPLISTX(vc4_crtc->channel), +- (u32 __iomem *)vc4_crtc->dlist - +- (u32 __iomem *)vc4->hvs->dlist); +- +- /* Make the next display list start after ours. */ +- vc4_crtc->dlist_size -= (dlist_next - vc4_crtc->dlist); +- vc4_crtc->dlist = dlist_next; +- } ++ writel(SCALER_CTL0_END, dlist_next); ++ dlist_next++; ++ ++ WARN_ON_ONCE(dlist_next - dlist_start != vc4_state->mm.size); ++ ++ HVS_WRITE(SCALER_DISPLISTX(vc4_crtc->channel), ++ vc4_state->mm.start); + + if (debug_dump_regs) { + DRM_INFO("CRTC %d HVS after:\n", drm_crtc_index(crtc)); +@@ -590,6 +573,36 @@ static int vc4_page_flip(struct drm_crtc *crtc, + return drm_atomic_helper_page_flip(crtc, fb, event, flags); + } + ++static struct drm_crtc_state *vc4_crtc_duplicate_state(struct drm_crtc *crtc) ++{ ++ struct vc4_crtc_state *vc4_state; ++ ++ vc4_state = kzalloc(sizeof(*vc4_state), GFP_KERNEL); ++ if (!vc4_state) ++ return NULL; ++ ++ __drm_atomic_helper_crtc_duplicate_state(crtc, &vc4_state->base); ++ return &vc4_state->base; ++} ++ ++static void vc4_crtc_destroy_state(struct drm_crtc *crtc, ++ struct drm_crtc_state *state) ++{ ++ struct vc4_dev *vc4 = to_vc4_dev(crtc->dev); ++ struct vc4_crtc_state *vc4_state = to_vc4_crtc_state(state); ++ ++ if (vc4_state->mm.allocated) { ++ unsigned long flags; ++ ++ spin_lock_irqsave(&vc4->hvs->mm_lock, flags); ++ drm_mm_remove_node(&vc4_state->mm); ++ spin_unlock_irqrestore(&vc4->hvs->mm_lock, flags); ++ ++ } ++ ++ __drm_atomic_helper_crtc_destroy_state(crtc, state); ++} ++ + static const struct drm_crtc_funcs vc4_crtc_funcs = { + .set_config = drm_atomic_helper_set_config, + .destroy = vc4_crtc_destroy, +@@ -598,8 +611,8 @@ static const struct drm_crtc_funcs vc4_crtc_funcs = { + .cursor_set = NULL, /* handled by drm_mode_cursor_universal */ + .cursor_move = NULL, /* handled by drm_mode_cursor_universal */ + .reset = drm_atomic_helper_crtc_reset, +- .atomic_duplicate_state = drm_atomic_helper_crtc_duplicate_state, +- .atomic_destroy_state = drm_atomic_helper_crtc_destroy_state, ++ .atomic_duplicate_state = vc4_crtc_duplicate_state, ++ .atomic_destroy_state = vc4_crtc_destroy_state, + }; + + static const struct drm_crtc_helper_funcs vc4_crtc_helper_funcs = { +diff --git a/drivers/gpu/drm/vc4/vc4_drv.h b/drivers/gpu/drm/vc4/vc4_drv.h +index 51a6333..38a31c7 100644 +--- a/drivers/gpu/drm/vc4/vc4_drv.h ++++ b/drivers/gpu/drm/vc4/vc4_drv.h +@@ -154,7 +154,13 @@ struct vc4_v3d { + struct vc4_hvs { + struct platform_device *pdev; + void __iomem *regs; +- void __iomem *dlist; ++ u32 __iomem *dlist; ++ ++ /* Memory manager for CRTCs to allocate space in the display ++ * list. Units are dwords. ++ */ ++ struct drm_mm dlist_mm; ++ spinlock_t mm_lock; + }; + + struct vc4_plane { +diff --git a/drivers/gpu/drm/vc4/vc4_hvs.c b/drivers/gpu/drm/vc4/vc4_hvs.c +index 8098c5b..9e43554 100644 +--- a/drivers/gpu/drm/vc4/vc4_hvs.c ++++ b/drivers/gpu/drm/vc4/vc4_hvs.c +@@ -119,6 +119,17 @@ static int vc4_hvs_bind(struct device *dev, struct device *master, void *data) + + hvs->dlist = hvs->regs + SCALER_DLIST_START; + ++ spin_lock_init(&hvs->mm_lock); ++ ++ /* Set up the HVS display list memory manager. We never ++ * overwrite the setup from the bootloader (just 128b out of ++ * our 16K), since we don't want to scramble the screen when ++ * transitioning from the firmware's boot setup to runtime. ++ */ ++ drm_mm_init(&hvs->dlist_mm, ++ HVS_BOOTLOADER_DLIST_END, ++ (SCALER_DLIST_SIZE >> 2) - HVS_BOOTLOADER_DLIST_END); ++ + vc4->hvs = hvs; + return 0; + } +@@ -129,6 +140,8 @@ static void vc4_hvs_unbind(struct device *dev, struct device *master, + struct drm_device *drm = dev_get_drvdata(master); + struct vc4_dev *vc4 = drm->dev_private; + ++ drm_mm_takedown(&vc4->hvs->dlist_mm); ++ + vc4->hvs = NULL; + } + +-- +2.7.3 + +From 7934fe9bdbbe2ffb4bcfe656a22a8f9f4e3d266a Mon Sep 17 00:00:00 2001 +From: Eric Anholt +Date: Mon, 28 Dec 2015 14:45:25 -0800 +Subject: [PATCH 12/36] drm/vc4: Fix which value is being used for source image + size. + +This doesn't matter yet since we only allow 1:1 scaling, but the +comment clearly says we should be using the source size. + +Signed-off-by: Eric Anholt +--- + drivers/gpu/drm/vc4/vc4_plane.c | 23 ++++++++++++++--------- + 1 file changed, 14 insertions(+), 9 deletions(-) + +diff --git a/drivers/gpu/drm/vc4/vc4_plane.c b/drivers/gpu/drm/vc4/vc4_plane.c +index 713ec00..d9c9290 100644 +--- a/drivers/gpu/drm/vc4/vc4_plane.c ++++ b/drivers/gpu/drm/vc4/vc4_plane.c +@@ -47,6 +47,8 @@ struct vc4_plane_state { + + /* Clipped coordinates of the plane on the display. */ + int crtc_x, crtc_y, crtc_w, crtc_h; ++ /* Clipped size of the area scanned from in the FB. */ ++ u32 src_w, src_h; + + /* Offset to start scanning out from the start of the plane's + * BO. +@@ -170,11 +172,6 @@ static int vc4_plane_setup_clipping_and_scaling(struct drm_plane_state *state) + + vc4_state->offset = fb->offsets[0]; + +- vc4_state->crtc_x = state->crtc_x; +- vc4_state->crtc_y = state->crtc_y; +- vc4_state->crtc_w = state->crtc_w; +- vc4_state->crtc_h = state->crtc_h; +- + if (state->crtc_w << 16 != state->src_w || + state->crtc_h << 16 != state->src_h) { + /* We don't support scaling yet, which involves +@@ -185,17 +182,25 @@ static int vc4_plane_setup_clipping_and_scaling(struct drm_plane_state *state) + return -EINVAL; + } + ++ vc4_state->src_w = state->src_w >> 16; ++ vc4_state->src_h = state->src_h >> 16; ++ ++ vc4_state->crtc_x = state->crtc_x; ++ vc4_state->crtc_y = state->crtc_y; ++ vc4_state->crtc_w = state->crtc_w; ++ vc4_state->crtc_h = state->crtc_h; ++ + if (vc4_state->crtc_x < 0) { + vc4_state->offset += (drm_format_plane_cpp(fb->pixel_format, + 0) * + -vc4_state->crtc_x); +- vc4_state->crtc_w += vc4_state->crtc_x; ++ vc4_state->src_w += vc4_state->crtc_x; + vc4_state->crtc_x = 0; + } + + if (vc4_state->crtc_y < 0) { + vc4_state->offset += fb->pitches[0] * -vc4_state->crtc_y; +- vc4_state->crtc_h += vc4_state->crtc_y; ++ vc4_state->src_h += vc4_state->crtc_y; + vc4_state->crtc_y = 0; + } + +@@ -244,8 +249,8 @@ static int vc4_plane_mode_set(struct drm_plane *plane, + SCALER_POS2_ALPHA_MODE_PIPELINE : + SCALER_POS2_ALPHA_MODE_FIXED, + SCALER_POS2_ALPHA_MODE) | +- VC4_SET_FIELD(vc4_state->crtc_w, SCALER_POS2_WIDTH) | +- VC4_SET_FIELD(vc4_state->crtc_h, SCALER_POS2_HEIGHT)); ++ VC4_SET_FIELD(vc4_state->src_w, SCALER_POS2_WIDTH) | ++ VC4_SET_FIELD(vc4_state->src_h, SCALER_POS2_HEIGHT)); + + /* Position Word 3: Context. Written by the HVS. */ + vc4_dlist_write(vc4_state, 0xc0c0c0c0); +-- +2.7.3 + +From e710e8e1d13c85a635c09168df6d008955ac5a4e Mon Sep 17 00:00:00 2001 +From: Eric Anholt +Date: Tue, 20 Oct 2015 16:06:57 +0100 +Subject: [PATCH 13/36] drm/vc4: Add support for scaling of display planes. + +This implements a simple policy for choosing scaling modes +(trapezoidal for decimation, PPF for magnification), and a single PPF +filter (Mitchell/Netravali's recommendation). + +Signed-off-by: Eric Anholt +--- + drivers/gpu/drm/vc4/vc4_drv.h | 4 + + drivers/gpu/drm/vc4/vc4_hvs.c | 84 +++++++++++++ + drivers/gpu/drm/vc4/vc4_plane.c | 253 +++++++++++++++++++++++++++++++++++++--- + drivers/gpu/drm/vc4/vc4_regs.h | 46 ++++++++ + 4 files changed, 374 insertions(+), 13 deletions(-) + +diff --git a/drivers/gpu/drm/vc4/vc4_drv.h b/drivers/gpu/drm/vc4/vc4_drv.h +index 38a31c7..83db0b7 100644 +--- a/drivers/gpu/drm/vc4/vc4_drv.h ++++ b/drivers/gpu/drm/vc4/vc4_drv.h +@@ -160,7 +160,11 @@ struct vc4_hvs { + * list. Units are dwords. + */ + struct drm_mm dlist_mm; ++ /* Memory manager for the LBM memory used by HVS scaling. */ ++ struct drm_mm lbm_mm; + spinlock_t mm_lock; ++ ++ struct drm_mm_node mitchell_netravali_filter; + }; + + struct vc4_plane { +diff --git a/drivers/gpu/drm/vc4/vc4_hvs.c b/drivers/gpu/drm/vc4/vc4_hvs.c +index 9e43554..6fbab1c 100644 +--- a/drivers/gpu/drm/vc4/vc4_hvs.c ++++ b/drivers/gpu/drm/vc4/vc4_hvs.c +@@ -100,12 +100,76 @@ int vc4_hvs_debugfs_regs(struct seq_file *m, void *unused) + } + #endif + ++/* The filter kernel is composed of dwords each containing 3 9-bit ++ * signed integers packed next to each other. ++ */ ++#define VC4_INT_TO_COEFF(coeff) (coeff & 0x1ff) ++#define VC4_PPF_FILTER_WORD(c0, c1, c2) \ ++ ((((c0) & 0x1ff) << 0) | \ ++ (((c1) & 0x1ff) << 9) | \ ++ (((c2) & 0x1ff) << 18)) ++ ++/* The whole filter kernel is arranged as the coefficients 0-16 going ++ * up, then a pad, then 17-31 going down and reversed within the ++ * dwords. This means that a linear phase kernel (where it's ++ * symmetrical at the boundary between 15 and 16) has the last 5 ++ * dwords matching the first 5, but reversed. ++ */ ++#define VC4_LINEAR_PHASE_KERNEL(c0, c1, c2, c3, c4, c5, c6, c7, c8, \ ++ c9, c10, c11, c12, c13, c14, c15) \ ++ {VC4_PPF_FILTER_WORD(c0, c1, c2), \ ++ VC4_PPF_FILTER_WORD(c3, c4, c5), \ ++ VC4_PPF_FILTER_WORD(c6, c7, c8), \ ++ VC4_PPF_FILTER_WORD(c9, c10, c11), \ ++ VC4_PPF_FILTER_WORD(c12, c13, c14), \ ++ VC4_PPF_FILTER_WORD(c15, c15, 0)} ++ ++#define VC4_LINEAR_PHASE_KERNEL_DWORDS 6 ++#define VC4_KERNEL_DWORDS (VC4_LINEAR_PHASE_KERNEL_DWORDS * 2 - 1) ++ ++/* Recommended B=1/3, C=1/3 filter choice from Mitchell/Netravali. ++ * http://www.cs.utexas.edu/~fussell/courses/cs384g/lectures/mitchell/Mitchell.pdf ++ */ ++static const u32 mitchell_netravali_1_3_1_3_kernel[] = ++ VC4_LINEAR_PHASE_KERNEL(0, -2, -6, -8, -10, -8, -3, 2, 18, ++ 50, 82, 119, 155, 187, 213, 227); ++ ++static int vc4_hvs_upload_linear_kernel(struct vc4_hvs *hvs, ++ struct drm_mm_node *space, ++ const u32 *kernel) ++{ ++ int ret, i; ++ u32 __iomem *dst_kernel; ++ ++ ret = drm_mm_insert_node(&hvs->dlist_mm, space, VC4_KERNEL_DWORDS, 1, ++ 0); ++ if (ret) { ++ DRM_ERROR("Failed to allocate space for filter kernel: %d\n", ++ ret); ++ return ret; ++ } ++ ++ dst_kernel = hvs->dlist + space->start; ++ ++ for (i = 0; i < VC4_KERNEL_DWORDS; i++) { ++ if (i < VC4_LINEAR_PHASE_KERNEL_DWORDS) ++ writel(kernel[i], &dst_kernel[i]); ++ else { ++ writel(kernel[VC4_KERNEL_DWORDS - i - 1], ++ &dst_kernel[i]); ++ } ++ } ++ ++ return 0; ++} ++ + static int vc4_hvs_bind(struct device *dev, struct device *master, void *data) + { + struct platform_device *pdev = to_platform_device(dev); + struct drm_device *drm = dev_get_drvdata(master); + struct vc4_dev *vc4 = drm->dev_private; + struct vc4_hvs *hvs = NULL; ++ int ret; + + hvs = devm_kzalloc(&pdev->dev, sizeof(*hvs), GFP_KERNEL); + if (!hvs) +@@ -130,6 +194,22 @@ static int vc4_hvs_bind(struct device *dev, struct device *master, void *data) + HVS_BOOTLOADER_DLIST_END, + (SCALER_DLIST_SIZE >> 2) - HVS_BOOTLOADER_DLIST_END); + ++ /* Set up the HVS LBM memory manager. We could have some more ++ * complicated data structure that allowed reuse of LBM areas ++ * between planes when they don't overlap on the screen, but ++ * for now we just allocate globally. ++ */ ++ drm_mm_init(&hvs->lbm_mm, 0, 96 * 1024); ++ ++ /* Upload filter kernels. We only have the one for now, so we ++ * keep it around for the lifetime of the driver. ++ */ ++ ret = vc4_hvs_upload_linear_kernel(hvs, ++ &hvs->mitchell_netravali_filter, ++ mitchell_netravali_1_3_1_3_kernel); ++ if (ret) ++ return ret; ++ + vc4->hvs = hvs; + return 0; + } +@@ -140,7 +220,11 @@ static void vc4_hvs_unbind(struct device *dev, struct device *master, + struct drm_device *drm = dev_get_drvdata(master); + struct vc4_dev *vc4 = drm->dev_private; + ++ if (vc4->hvs->mitchell_netravali_filter.allocated) ++ drm_mm_remove_node(&vc4->hvs->mitchell_netravali_filter); ++ + drm_mm_takedown(&vc4->hvs->dlist_mm); ++ drm_mm_takedown(&vc4->hvs->lbm_mm); + + vc4->hvs = NULL; + } +diff --git a/drivers/gpu/drm/vc4/vc4_plane.c b/drivers/gpu/drm/vc4/vc4_plane.c +index d9c9290..7c2d697 100644 +--- a/drivers/gpu/drm/vc4/vc4_plane.c ++++ b/drivers/gpu/drm/vc4/vc4_plane.c +@@ -24,6 +24,12 @@ + #include "drm_fb_cma_helper.h" + #include "drm_plane_helper.h" + ++enum vc4_scaling_mode { ++ VC4_SCALING_NONE, ++ VC4_SCALING_TPZ, ++ VC4_SCALING_PPF, ++}; ++ + struct vc4_plane_state { + struct drm_plane_state base; + /* System memory copy of the display list for this element, computed +@@ -47,13 +53,19 @@ struct vc4_plane_state { + + /* Clipped coordinates of the plane on the display. */ + int crtc_x, crtc_y, crtc_w, crtc_h; +- /* Clipped size of the area scanned from in the FB. */ +- u32 src_w, src_h; ++ /* Clipped area being scanned from in the FB. */ ++ u32 src_x, src_y, src_w, src_h; ++ ++ enum vc4_scaling_mode x_scaling, y_scaling; ++ bool is_unity; + + /* Offset to start scanning out from the start of the plane's + * BO. + */ + u32 offset; ++ ++ /* Our allocation in LBM for temporary storage during scaling. */ ++ struct drm_mm_node lbm; + }; + + static inline struct vc4_plane_state * +@@ -90,6 +102,16 @@ static const struct hvs_format *vc4_get_hvs_format(u32 drm_format) + return NULL; + } + ++static enum vc4_scaling_mode vc4_get_scaling_mode(u32 src, u32 dst) ++{ ++ if (dst > src) ++ return VC4_SCALING_PPF; ++ else if (dst < src) ++ return VC4_SCALING_TPZ; ++ else ++ return VC4_SCALING_NONE; ++} ++ + static bool plane_enabled(struct drm_plane_state *state) + { + return state->fb && state->crtc; +@@ -106,6 +128,8 @@ static struct drm_plane_state *vc4_plane_duplicate_state(struct drm_plane *plane + if (!vc4_state) + return NULL; + ++ memset(&vc4_state->lbm, 0, sizeof(vc4_state->lbm)); ++ + __drm_atomic_helper_plane_duplicate_state(plane, &vc4_state->base); + + if (vc4_state->dlist) { +@@ -125,8 +149,17 @@ static struct drm_plane_state *vc4_plane_duplicate_state(struct drm_plane *plane + static void vc4_plane_destroy_state(struct drm_plane *plane, + struct drm_plane_state *state) + { ++ struct vc4_dev *vc4 = to_vc4_dev(plane->dev); + struct vc4_plane_state *vc4_state = to_vc4_plane_state(state); + ++ if (vc4_state->lbm.allocated) { ++ unsigned long irqflags; ++ ++ spin_lock_irqsave(&vc4->hvs->mm_lock, irqflags); ++ drm_mm_remove_node(&vc4_state->lbm); ++ spin_unlock_irqrestore(&vc4->hvs->mm_lock, irqflags); ++ } ++ + kfree(vc4_state->dlist); + __drm_atomic_helper_plane_destroy_state(plane, &vc4_state->base); + kfree(state); +@@ -165,23 +198,60 @@ static void vc4_dlist_write(struct vc4_plane_state *vc4_state, u32 val) + vc4_state->dlist[vc4_state->dlist_count++] = val; + } + ++/* Returns the scl0/scl1 field based on whether the dimensions need to ++ * be up/down/non-scaled. ++ * ++ * This is a replication of a table from the spec. ++ */ ++static u32 vc4_get_scl_field(struct drm_plane_state *state) ++{ ++ struct vc4_plane_state *vc4_state = to_vc4_plane_state(state); ++ ++ switch (vc4_state->x_scaling << 2 | vc4_state->y_scaling) { ++ case VC4_SCALING_PPF << 2 | VC4_SCALING_PPF: ++ return SCALER_CTL0_SCL_H_PPF_V_PPF; ++ case VC4_SCALING_TPZ << 2 | VC4_SCALING_PPF: ++ return SCALER_CTL0_SCL_H_TPZ_V_PPF; ++ case VC4_SCALING_PPF << 2 | VC4_SCALING_TPZ: ++ return SCALER_CTL0_SCL_H_PPF_V_TPZ; ++ case VC4_SCALING_TPZ << 2 | VC4_SCALING_TPZ: ++ return SCALER_CTL0_SCL_H_TPZ_V_TPZ; ++ case VC4_SCALING_PPF << 2 | VC4_SCALING_NONE: ++ return SCALER_CTL0_SCL_H_PPF_V_NONE; ++ case VC4_SCALING_NONE << 2 | VC4_SCALING_PPF: ++ return SCALER_CTL0_SCL_H_NONE_V_PPF; ++ case VC4_SCALING_NONE << 2 | VC4_SCALING_TPZ: ++ return SCALER_CTL0_SCL_H_NONE_V_TPZ; ++ case VC4_SCALING_TPZ << 2 | VC4_SCALING_NONE: ++ return SCALER_CTL0_SCL_H_TPZ_V_NONE; ++ default: ++ case VC4_SCALING_NONE << 2 | VC4_SCALING_NONE: ++ /* The unity case is independently handled by ++ * SCALER_CTL0_UNITY. ++ */ ++ return 0; ++ } ++} ++ + static int vc4_plane_setup_clipping_and_scaling(struct drm_plane_state *state) + { ++ struct drm_plane *plane = state->plane; + struct vc4_plane_state *vc4_state = to_vc4_plane_state(state); + struct drm_framebuffer *fb = state->fb; ++ u32 subpixel_src_mask = (1 << 16) - 1; + + vc4_state->offset = fb->offsets[0]; + +- if (state->crtc_w << 16 != state->src_w || +- state->crtc_h << 16 != state->src_h) { +- /* We don't support scaling yet, which involves +- * allocating the LBM memory for scaling temporary +- * storage, and putting filter kernels in the HVS +- * context. +- */ ++ /* We don't support subpixel source positioning for scaling. */ ++ if ((state->src_x & subpixel_src_mask) || ++ (state->src_y & subpixel_src_mask) || ++ (state->src_w & subpixel_src_mask) || ++ (state->src_h & subpixel_src_mask)) { + return -EINVAL; + } + ++ vc4_state->src_x = state->src_x >> 16; ++ vc4_state->src_y = state->src_y >> 16; + vc4_state->src_w = state->src_w >> 16; + vc4_state->src_h = state->src_h >> 16; + +@@ -190,6 +260,23 @@ static int vc4_plane_setup_clipping_and_scaling(struct drm_plane_state *state) + vc4_state->crtc_w = state->crtc_w; + vc4_state->crtc_h = state->crtc_h; + ++ vc4_state->x_scaling = vc4_get_scaling_mode(vc4_state->src_w, ++ vc4_state->crtc_w); ++ vc4_state->y_scaling = vc4_get_scaling_mode(vc4_state->src_h, ++ vc4_state->crtc_h); ++ vc4_state->is_unity = (vc4_state->x_scaling == VC4_SCALING_NONE && ++ vc4_state->y_scaling == VC4_SCALING_NONE); ++ ++ /* No configuring scaling on the cursor plane, since it gets ++ non-vblank-synced updates, and scaling requires requires ++ LBM changes which have to be vblank-synced. ++ */ ++ if (plane->type == DRM_PLANE_TYPE_CURSOR && !vc4_state->is_unity) ++ return -EINVAL; ++ ++ /* Clamp the on-screen start x/y to 0. The hardware doesn't ++ * support negative y, and negative x wastes bandwidth. ++ */ + if (vc4_state->crtc_x < 0) { + vc4_state->offset += (drm_format_plane_cpp(fb->pixel_format, + 0) * +@@ -207,6 +294,87 @@ static int vc4_plane_setup_clipping_and_scaling(struct drm_plane_state *state) + return 0; + } + ++static void vc4_write_tpz(struct vc4_plane_state *vc4_state, u32 src, u32 dst) ++{ ++ u32 scale, recip; ++ ++ scale = (1 << 16) * src / dst; ++ ++ /* The specs note that while the reciprocal would be defined ++ * as (1<<32)/scale, ~0 is close enough. ++ */ ++ recip = ~0 / scale; ++ ++ vc4_dlist_write(vc4_state, ++ VC4_SET_FIELD(scale, SCALER_TPZ0_SCALE) | ++ VC4_SET_FIELD(0, SCALER_TPZ0_IPHASE)); ++ vc4_dlist_write(vc4_state, ++ VC4_SET_FIELD(recip, SCALER_TPZ1_RECIP)); ++} ++ ++static void vc4_write_ppf(struct vc4_plane_state *vc4_state, u32 src, u32 dst) ++{ ++ u32 scale = (1 << 16) * src / dst; ++ ++ vc4_dlist_write(vc4_state, ++ SCALER_PPF_AGC | ++ VC4_SET_FIELD(scale, SCALER_PPF_SCALE) | ++ VC4_SET_FIELD(0, SCALER_PPF_IPHASE)); ++} ++ ++static u32 vc4_lbm_size(struct drm_plane_state *state) ++{ ++ struct vc4_plane_state *vc4_state = to_vc4_plane_state(state); ++ /* This is the worst case number. One of the two sizes will ++ * be used depending on the scaling configuration. ++ */ ++ u32 pix_per_line = max(vc4_state->src_w, (u32)vc4_state->crtc_w); ++ u32 lbm; ++ ++ if (vc4_state->is_unity) ++ return 0; ++ else if (vc4_state->y_scaling == VC4_SCALING_TPZ) ++ lbm = pix_per_line * 8; ++ else { ++ /* In special cases, this multiplier might be 12. */ ++ lbm = pix_per_line * 16; ++ } ++ ++ lbm = roundup(lbm, 32); ++ ++ return lbm; ++} ++ ++static void vc4_write_scaling_parameters(struct drm_plane_state *state) ++{ ++ struct vc4_plane_state *vc4_state = to_vc4_plane_state(state); ++ ++ /* Ch0 H-PPF Word 0: Scaling Parameters */ ++ if (vc4_state->x_scaling == VC4_SCALING_PPF) { ++ vc4_write_ppf(vc4_state, ++ vc4_state->src_w, vc4_state->crtc_w); ++ } ++ ++ /* Ch0 V-PPF Words 0-1: Scaling Parameters, Context */ ++ if (vc4_state->y_scaling == VC4_SCALING_PPF) { ++ vc4_write_ppf(vc4_state, ++ vc4_state->src_h, vc4_state->crtc_h); ++ vc4_dlist_write(vc4_state, 0xc0c0c0c0); ++ } ++ ++ /* Ch0 H-TPZ Words 0-1: Scaling Parameters, Recip */ ++ if (vc4_state->x_scaling == VC4_SCALING_TPZ) { ++ vc4_write_tpz(vc4_state, ++ vc4_state->src_w, vc4_state->crtc_w); ++ } ++ ++ /* Ch0 V-TPZ Words 0-2: Scaling Parameters, Recip, Context */ ++ if (vc4_state->y_scaling == VC4_SCALING_TPZ) { ++ vc4_write_tpz(vc4_state, ++ vc4_state->src_h, vc4_state->crtc_h); ++ vc4_dlist_write(vc4_state, 0xc0c0c0c0); ++ } ++} + + /* Writes out a full display list for an active plane to the plane's + * private dlist state. +@@ -214,22 +382,50 @@ static int vc4_plane_setup_clipping_and_scaling(struct drm_plane_state *state) + static int vc4_plane_mode_set(struct drm_plane *plane, + struct drm_plane_state *state) + { ++ struct vc4_dev *vc4 = to_vc4_dev(plane->dev); + struct vc4_plane_state *vc4_state = to_vc4_plane_state(state); + struct drm_framebuffer *fb = state->fb; + struct drm_gem_cma_object *bo = drm_fb_cma_get_gem_obj(fb, 0); + u32 ctl0_offset = vc4_state->dlist_count; + const struct hvs_format *format = vc4_get_hvs_format(fb->pixel_format); ++ u32 scl; ++ u32 lbm_size; ++ unsigned long irqflags; + int ret; + + ret = vc4_plane_setup_clipping_and_scaling(state); + if (ret) + return ret; + ++ /* Allocate the LBM memory that the HVS will use for temporary ++ * storage due to our scaling/format conversion. ++ */ ++ lbm_size = vc4_lbm_size(state); ++ if (lbm_size) { ++ if (!vc4_state->lbm.allocated) { ++ spin_lock_irqsave(&vc4->hvs->mm_lock, irqflags); ++ ret = drm_mm_insert_node(&vc4->hvs->lbm_mm, ++ &vc4_state->lbm, ++ lbm_size, 32, 0); ++ spin_unlock_irqrestore(&vc4->hvs->mm_lock, irqflags); ++ } else { ++ WARN_ON_ONCE(lbm_size != vc4_state->lbm.size); ++ } ++ } ++ ++ if (ret) ++ return ret; ++ ++ scl = vc4_get_scl_field(state); ++ ++ /* Control word */ + vc4_dlist_write(vc4_state, + SCALER_CTL0_VALID | + (format->pixel_order << SCALER_CTL0_ORDER_SHIFT) | + (format->hvs << SCALER_CTL0_PIXEL_FORMAT_SHIFT) | +- SCALER_CTL0_UNITY); ++ (vc4_state->is_unity ? SCALER_CTL0_UNITY : 0) | ++ VC4_SET_FIELD(scl, SCALER_CTL0_SCL0) | ++ VC4_SET_FIELD(scl, SCALER_CTL0_SCL1)); + + /* Position Word 0: Image Positions and Alpha Value */ + vc4_state->pos0_offset = vc4_state->dlist_count; +@@ -238,9 +434,14 @@ static int vc4_plane_mode_set(struct drm_plane *plane, + VC4_SET_FIELD(vc4_state->crtc_x, SCALER_POS0_START_X) | + VC4_SET_FIELD(vc4_state->crtc_y, SCALER_POS0_START_Y)); + +- /* Position Word 1: Scaled Image Dimensions. +- * Skipped due to SCALER_CTL0_UNITY scaling. +- */ ++ /* Position Word 1: Scaled Image Dimensions. */ ++ if (!vc4_state->is_unity) { ++ vc4_dlist_write(vc4_state, ++ VC4_SET_FIELD(vc4_state->crtc_w, ++ SCALER_POS1_SCL_WIDTH) | ++ VC4_SET_FIELD(vc4_state->crtc_h, ++ SCALER_POS1_SCL_HEIGHT)); ++ } + + /* Position Word 2: Source Image Size, Alpha Mode */ + vc4_state->pos2_offset = vc4_state->dlist_count; +@@ -266,6 +467,32 @@ static int vc4_plane_mode_set(struct drm_plane *plane, + vc4_dlist_write(vc4_state, + VC4_SET_FIELD(fb->pitches[0], SCALER_SRC_PITCH)); + ++ if (!vc4_state->is_unity) { ++ /* LBM Base Address. */ ++ if (vc4_state->y_scaling != VC4_SCALING_NONE) ++ vc4_dlist_write(vc4_state, vc4_state->lbm.start); ++ ++ vc4_write_scaling_parameters(state); ++ ++ /* If any PPF setup was done, then all the kernel ++ * pointers get uploaded. ++ */ ++ if (vc4_state->x_scaling == VC4_SCALING_PPF || ++ vc4_state->y_scaling == VC4_SCALING_PPF) { ++ u32 kernel = VC4_SET_FIELD(vc4->hvs->mitchell_netravali_filter.start, ++ SCALER_PPF_KERNEL_OFFSET); ++ ++ /* HPPF plane 0 */ ++ vc4_dlist_write(vc4_state, kernel); ++ /* VPPF plane 0 */ ++ vc4_dlist_write(vc4_state, kernel); ++ /* HPPF plane 1 */ ++ vc4_dlist_write(vc4_state, kernel); ++ /* VPPF plane 1 */ ++ vc4_dlist_write(vc4_state, kernel); ++ } ++ } ++ + vc4_state->dlist[ctl0_offset] |= + VC4_SET_FIELD(vc4_state->dlist_count, SCALER_CTL0_SIZE); + +diff --git a/drivers/gpu/drm/vc4/vc4_regs.h b/drivers/gpu/drm/vc4/vc4_regs.h +index 7c29993..a5b544d 100644 +--- a/drivers/gpu/drm/vc4/vc4_regs.h ++++ b/drivers/gpu/drm/vc4/vc4_regs.h +@@ -552,6 +552,21 @@ enum hvs_pixel_format { + #define SCALER_CTL0_ORDER_MASK VC4_MASK(14, 13) + #define SCALER_CTL0_ORDER_SHIFT 13 + ++#define SCALER_CTL0_SCL1_MASK VC4_MASK(10, 8) ++#define SCALER_CTL0_SCL1_SHIFT 8 ++ ++#define SCALER_CTL0_SCL0_MASK VC4_MASK(7, 5) ++#define SCALER_CTL0_SCL0_SHIFT 5 ++ ++#define SCALER_CTL0_SCL_H_PPF_V_PPF 0 ++#define SCALER_CTL0_SCL_H_TPZ_V_PPF 1 ++#define SCALER_CTL0_SCL_H_PPF_V_TPZ 2 ++#define SCALER_CTL0_SCL_H_TPZ_V_TPZ 3 ++#define SCALER_CTL0_SCL_H_PPF_V_NONE 4 ++#define SCALER_CTL0_SCL_H_NONE_V_PPF 5 ++#define SCALER_CTL0_SCL_H_NONE_V_TPZ 6 ++#define SCALER_CTL0_SCL_H_TPZ_V_NONE 7 ++ + /* Set to indicate no scaling. */ + #define SCALER_CTL0_UNITY BIT(4) + +@@ -567,6 +582,12 @@ enum hvs_pixel_format { + #define SCALER_POS0_START_X_MASK VC4_MASK(11, 0) + #define SCALER_POS0_START_X_SHIFT 0 + ++#define SCALER_POS1_SCL_HEIGHT_MASK VC4_MASK(27, 16) ++#define SCALER_POS1_SCL_HEIGHT_SHIFT 16 ++ ++#define SCALER_POS1_SCL_WIDTH_MASK VC4_MASK(11, 0) ++#define SCALER_POS1_SCL_WIDTH_SHIFT 0 ++ + #define SCALER_POS2_ALPHA_MODE_MASK VC4_MASK(31, 30) + #define SCALER_POS2_ALPHA_MODE_SHIFT 30 + #define SCALER_POS2_ALPHA_MODE_PIPELINE 0 +@@ -580,6 +601,31 @@ enum hvs_pixel_format { + #define SCALER_POS2_WIDTH_MASK VC4_MASK(11, 0) + #define SCALER_POS2_WIDTH_SHIFT 0 + ++#define SCALER_TPZ0_VERT_RECALC BIT(31) ++#define SCALER_TPZ0_SCALE_MASK VC4_MASK(28, 8) ++#define SCALER_TPZ0_SCALE_SHIFT 8 ++#define SCALER_TPZ0_IPHASE_MASK VC4_MASK(7, 0) ++#define SCALER_TPZ0_IPHASE_SHIFT 0 ++#define SCALER_TPZ1_RECIP_MASK VC4_MASK(15, 0) ++#define SCALER_TPZ1_RECIP_SHIFT 0 ++ ++/* Skips interpolating coefficients to 64 phases, so just 8 are used. ++ * Required for nearest neighbor. ++ */ ++#define SCALER_PPF_NOINTERP BIT(31) ++/* Replaes the highest valued coefficient with one that makes all 4 ++ * sum to unity. ++ */ ++#define SCALER_PPF_AGC BIT(30) ++#define SCALER_PPF_SCALE_MASK VC4_MASK(24, 8) ++#define SCALER_PPF_SCALE_SHIFT 8 ++#define SCALER_PPF_IPHASE_MASK VC4_MASK(6, 0) ++#define SCALER_PPF_IPHASE_SHIFT 0 ++ ++#define SCALER_PPF_KERNEL_OFFSET_MASK VC4_MASK(13, 0) ++#define SCALER_PPF_KERNEL_OFFSET_SHIFT 0 ++#define SCALER_PPF_KERNEL_UNCACHED BIT(31) ++ + #define SCALER_SRC_PITCH_MASK VC4_MASK(15, 0) + #define SCALER_SRC_PITCH_SHIFT 0 + +-- +2.7.3 + +From c1f11c3b1a4379841341911c379237d3a3870607 Mon Sep 17 00:00:00 2001 +From: Eric Anholt +Date: Tue, 20 Oct 2015 13:59:15 +0100 +Subject: [PATCH 14/36] drm/vc4: Add support a few more RGB display plane + formats. + +These were all touch-tested with modetest. + +Signed-off-by: Eric Anholt +--- + drivers/gpu/drm/vc4/vc4_plane.c | 16 ++++++++++++++++ + 1 file changed, 16 insertions(+) + +diff --git a/drivers/gpu/drm/vc4/vc4_plane.c b/drivers/gpu/drm/vc4/vc4_plane.c +index 7c2d697..013ebff 100644 +--- a/drivers/gpu/drm/vc4/vc4_plane.c ++++ b/drivers/gpu/drm/vc4/vc4_plane.c +@@ -88,6 +88,22 @@ static const struct hvs_format { + .drm = DRM_FORMAT_ARGB8888, .hvs = HVS_PIXEL_FORMAT_RGBA8888, + .pixel_order = HVS_PIXEL_ORDER_ABGR, .has_alpha = true, + }, ++ { ++ .drm = DRM_FORMAT_RGB565, .hvs = HVS_PIXEL_FORMAT_RGB565, ++ .pixel_order = HVS_PIXEL_ORDER_XRGB, .has_alpha = false, ++ }, ++ { ++ .drm = DRM_FORMAT_BGR565, .hvs = HVS_PIXEL_FORMAT_RGB565, ++ .pixel_order = HVS_PIXEL_ORDER_XBGR, .has_alpha = false, ++ }, ++ { ++ .drm = DRM_FORMAT_ARGB1555, .hvs = HVS_PIXEL_FORMAT_RGBA5551, ++ .pixel_order = HVS_PIXEL_ORDER_ABGR, .has_alpha = true, ++ }, ++ { ++ .drm = DRM_FORMAT_XRGB1555, .hvs = HVS_PIXEL_FORMAT_RGBA5551, ++ .pixel_order = HVS_PIXEL_ORDER_ABGR, .has_alpha = false, ++ }, + }; + + static const struct hvs_format *vc4_get_hvs_format(u32 drm_format) +-- +2.7.3 + +From 149a88adaedd0bea6c6f2f12dcf893d740be2ebb Mon Sep 17 00:00:00 2001 +From: Eric Anholt +Date: Wed, 30 Dec 2015 12:25:44 -0800 +Subject: [PATCH 15/36] drm/vc4: Add support for YUV planes. + +This supports 420 and 422 subsampling with 2 or 3 planes, tested with +modetest. It doesn't set up chroma subsampling position (which it +appears KMS doesn't deal with yet). + +The LBM memory is overallocated in many cases, but apparently the docs +aren't quite correct and I'll probably need to look at the hardware +source to really figure it out. + +Signed-off-by: Eric Anholt +--- + drivers/gpu/drm/vc4/vc4_plane.c | 256 +++++++++++++++++++++++++++++++--------- + drivers/gpu/drm/vc4/vc4_regs.h | 56 ++++++++- + 2 files changed, 253 insertions(+), 59 deletions(-) + +diff --git a/drivers/gpu/drm/vc4/vc4_plane.c b/drivers/gpu/drm/vc4/vc4_plane.c +index 013ebff..7b0c72a 100644 +--- a/drivers/gpu/drm/vc4/vc4_plane.c ++++ b/drivers/gpu/drm/vc4/vc4_plane.c +@@ -54,15 +54,19 @@ struct vc4_plane_state { + /* Clipped coordinates of the plane on the display. */ + int crtc_x, crtc_y, crtc_w, crtc_h; + /* Clipped area being scanned from in the FB. */ +- u32 src_x, src_y, src_w, src_h; ++ u32 src_x, src_y; + +- enum vc4_scaling_mode x_scaling, y_scaling; ++ u32 src_w[2], src_h[2]; ++ ++ /* Scaling selection for the RGB/Y plane and the Cb/Cr planes. */ ++ enum vc4_scaling_mode x_scaling[2], y_scaling[2]; + bool is_unity; ++ bool is_yuv; + + /* Offset to start scanning out from the start of the plane's + * BO. + */ +- u32 offset; ++ u32 offsets[3]; + + /* Our allocation in LBM for temporary storage during scaling. */ + struct drm_mm_node lbm; +@@ -79,6 +83,7 @@ static const struct hvs_format { + u32 hvs; /* HVS_FORMAT_* */ + u32 pixel_order; + bool has_alpha; ++ bool flip_cbcr; + } hvs_formats[] = { + { + .drm = DRM_FORMAT_XRGB8888, .hvs = HVS_PIXEL_FORMAT_RGBA8888, +@@ -104,6 +109,32 @@ static const struct hvs_format { + .drm = DRM_FORMAT_XRGB1555, .hvs = HVS_PIXEL_FORMAT_RGBA5551, + .pixel_order = HVS_PIXEL_ORDER_ABGR, .has_alpha = false, + }, ++ { ++ .drm = DRM_FORMAT_YUV422, ++ .hvs = HVS_PIXEL_FORMAT_YCBCR_YUV422_3PLANE, ++ }, ++ { ++ .drm = DRM_FORMAT_YVU422, ++ .hvs = HVS_PIXEL_FORMAT_YCBCR_YUV422_3PLANE, ++ .flip_cbcr = true, ++ }, ++ { ++ .drm = DRM_FORMAT_YUV420, ++ .hvs = HVS_PIXEL_FORMAT_YCBCR_YUV420_3PLANE, ++ }, ++ { ++ .drm = DRM_FORMAT_YVU420, ++ .hvs = HVS_PIXEL_FORMAT_YCBCR_YUV420_3PLANE, ++ .flip_cbcr = true, ++ }, ++ { ++ .drm = DRM_FORMAT_NV12, ++ .hvs = HVS_PIXEL_FORMAT_YCBCR_YUV420_2PLANE, ++ }, ++ { ++ .drm = DRM_FORMAT_NV16, ++ .hvs = HVS_PIXEL_FORMAT_YCBCR_YUV422_2PLANE, ++ }, + }; + + static const struct hvs_format *vc4_get_hvs_format(u32 drm_format) +@@ -219,11 +250,11 @@ static void vc4_dlist_write(struct vc4_plane_state *vc4_state, u32 val) + * + * This is a replication of a table from the spec. + */ +-static u32 vc4_get_scl_field(struct drm_plane_state *state) ++static u32 vc4_get_scl_field(struct drm_plane_state *state, int plane) + { + struct vc4_plane_state *vc4_state = to_vc4_plane_state(state); + +- switch (vc4_state->x_scaling << 2 | vc4_state->y_scaling) { ++ switch (vc4_state->x_scaling[plane] << 2 | vc4_state->y_scaling[plane]) { + case VC4_SCALING_PPF << 2 | VC4_SCALING_PPF: + return SCALER_CTL0_SCL_H_PPF_V_PPF; + case VC4_SCALING_TPZ << 2 | VC4_SCALING_PPF: +@@ -254,9 +285,16 @@ static int vc4_plane_setup_clipping_and_scaling(struct drm_plane_state *state) + struct drm_plane *plane = state->plane; + struct vc4_plane_state *vc4_state = to_vc4_plane_state(state); + struct drm_framebuffer *fb = state->fb; ++ struct drm_gem_cma_object *bo = drm_fb_cma_get_gem_obj(fb, 0); + u32 subpixel_src_mask = (1 << 16) - 1; ++ u32 format = fb->pixel_format; ++ int num_planes = drm_format_num_planes(format); ++ u32 h_subsample = 1; ++ u32 v_subsample = 1; ++ int i; + +- vc4_state->offset = fb->offsets[0]; ++ for (i = 0; i < num_planes; i++) ++ vc4_state->offsets[i] = bo->paddr + fb->offsets[i]; + + /* We don't support subpixel source positioning for scaling. */ + if ((state->src_x & subpixel_src_mask) || +@@ -268,20 +306,48 @@ static int vc4_plane_setup_clipping_and_scaling(struct drm_plane_state *state) + + vc4_state->src_x = state->src_x >> 16; + vc4_state->src_y = state->src_y >> 16; +- vc4_state->src_w = state->src_w >> 16; +- vc4_state->src_h = state->src_h >> 16; ++ vc4_state->src_w[0] = state->src_w >> 16; ++ vc4_state->src_h[0] = state->src_h >> 16; + + vc4_state->crtc_x = state->crtc_x; + vc4_state->crtc_y = state->crtc_y; + vc4_state->crtc_w = state->crtc_w; + vc4_state->crtc_h = state->crtc_h; + +- vc4_state->x_scaling = vc4_get_scaling_mode(vc4_state->src_w, +- vc4_state->crtc_w); +- vc4_state->y_scaling = vc4_get_scaling_mode(vc4_state->src_h, +- vc4_state->crtc_h); +- vc4_state->is_unity = (vc4_state->x_scaling == VC4_SCALING_NONE && +- vc4_state->y_scaling == VC4_SCALING_NONE); ++ vc4_state->x_scaling[0] = vc4_get_scaling_mode(vc4_state->src_w[0], ++ vc4_state->crtc_w); ++ vc4_state->y_scaling[0] = vc4_get_scaling_mode(vc4_state->src_h[0], ++ vc4_state->crtc_h); ++ ++ if (num_planes > 1) { ++ vc4_state->is_yuv = true; ++ ++ h_subsample = drm_format_horz_chroma_subsampling(format); ++ v_subsample = drm_format_vert_chroma_subsampling(format); ++ vc4_state->src_w[1] = vc4_state->src_w[0] / h_subsample; ++ vc4_state->src_h[1] = vc4_state->src_h[0] / v_subsample; ++ ++ vc4_state->x_scaling[1] = ++ vc4_get_scaling_mode(vc4_state->src_w[1], ++ vc4_state->crtc_w); ++ vc4_state->y_scaling[1] = ++ vc4_get_scaling_mode(vc4_state->src_h[1], ++ vc4_state->crtc_h); ++ ++ /* YUV conversion requires that scaling be enabled, ++ * even on a plane that's otherwise 1:1. Choose TPZ ++ * for simplicity. ++ */ ++ if (vc4_state->x_scaling[0] == VC4_SCALING_NONE) ++ vc4_state->x_scaling[0] = VC4_SCALING_TPZ; ++ if (vc4_state->y_scaling[0] == VC4_SCALING_NONE) ++ vc4_state->y_scaling[0] = VC4_SCALING_TPZ; ++ } ++ ++ vc4_state->is_unity = (vc4_state->x_scaling[0] == VC4_SCALING_NONE && ++ vc4_state->y_scaling[0] == VC4_SCALING_NONE && ++ vc4_state->x_scaling[1] == VC4_SCALING_NONE && ++ vc4_state->y_scaling[1] == VC4_SCALING_NONE); + + /* No configuring scaling on the cursor plane, since it gets + non-vblank-synced updates, and scaling requires requires +@@ -294,16 +360,27 @@ static int vc4_plane_setup_clipping_and_scaling(struct drm_plane_state *state) + * support negative y, and negative x wastes bandwidth. + */ + if (vc4_state->crtc_x < 0) { +- vc4_state->offset += (drm_format_plane_cpp(fb->pixel_format, +- 0) * +- -vc4_state->crtc_x); +- vc4_state->src_w += vc4_state->crtc_x; ++ for (i = 0; i < num_planes; i++) { ++ u32 cpp = drm_format_plane_cpp(fb->pixel_format, i); ++ u32 subs = ((i == 0) ? 1 : h_subsample); ++ ++ vc4_state->offsets[i] += (cpp * ++ (-vc4_state->crtc_x) / subs); ++ } ++ vc4_state->src_w[0] += vc4_state->crtc_x; ++ vc4_state->src_w[1] += vc4_state->crtc_x / h_subsample; + vc4_state->crtc_x = 0; + } + + if (vc4_state->crtc_y < 0) { +- vc4_state->offset += fb->pitches[0] * -vc4_state->crtc_y; +- vc4_state->src_h += vc4_state->crtc_y; ++ for (i = 0; i < num_planes; i++) { ++ u32 subs = ((i == 0) ? 1 : v_subsample); ++ ++ vc4_state->offsets[i] += (fb->pitches[i] * ++ (-vc4_state->crtc_y) / subs); ++ } ++ vc4_state->src_h[0] += vc4_state->crtc_y; ++ vc4_state->src_h[1] += vc4_state->crtc_y / v_subsample; + vc4_state->crtc_y = 0; + } + +@@ -344,15 +421,23 @@ static u32 vc4_lbm_size(struct drm_plane_state *state) + /* This is the worst case number. One of the two sizes will + * be used depending on the scaling configuration. + */ +- u32 pix_per_line = max(vc4_state->src_w, (u32)vc4_state->crtc_w); ++ u32 pix_per_line = max(vc4_state->src_w[0], (u32)vc4_state->crtc_w); + u32 lbm; + +- if (vc4_state->is_unity) +- return 0; +- else if (vc4_state->y_scaling == VC4_SCALING_TPZ) +- lbm = pix_per_line * 8; +- else { +- /* In special cases, this multiplier might be 12. */ ++ if (!vc4_state->is_yuv) { ++ if (vc4_state->is_unity) ++ return 0; ++ else if (vc4_state->y_scaling[0] == VC4_SCALING_TPZ) ++ lbm = pix_per_line * 8; ++ else { ++ /* In special cases, this multiplier might be 12. */ ++ lbm = pix_per_line * 16; ++ } ++ } else { ++ /* There are cases for this going down to a multiplier ++ * of 2, but according to the firmware source, the ++ * table in the docs is somewhat wrong. ++ */ + lbm = pix_per_line * 16; + } + +@@ -361,33 +446,34 @@ static u32 vc4_lbm_size(struct drm_plane_state *state) + return lbm; + } + +-static void vc4_write_scaling_parameters(struct drm_plane_state *state) ++static void vc4_write_scaling_parameters(struct drm_plane_state *state, ++ int channel) + { + struct vc4_plane_state *vc4_state = to_vc4_plane_state(state); + + /* Ch0 H-PPF Word 0: Scaling Parameters */ +- if (vc4_state->x_scaling == VC4_SCALING_PPF) { ++ if (vc4_state->x_scaling[channel] == VC4_SCALING_PPF) { + vc4_write_ppf(vc4_state, +- vc4_state->src_w, vc4_state->crtc_w); ++ vc4_state->src_w[channel], vc4_state->crtc_w); + } + + /* Ch0 V-PPF Words 0-1: Scaling Parameters, Context */ +- if (vc4_state->y_scaling == VC4_SCALING_PPF) { ++ if (vc4_state->y_scaling[channel] == VC4_SCALING_PPF) { + vc4_write_ppf(vc4_state, +- vc4_state->src_h, vc4_state->crtc_h); ++ vc4_state->src_h[channel], vc4_state->crtc_h); + vc4_dlist_write(vc4_state, 0xc0c0c0c0); + } + + /* Ch0 H-TPZ Words 0-1: Scaling Parameters, Recip */ +- if (vc4_state->x_scaling == VC4_SCALING_TPZ) { ++ if (vc4_state->x_scaling[channel] == VC4_SCALING_TPZ) { + vc4_write_tpz(vc4_state, +- vc4_state->src_w, vc4_state->crtc_w); ++ vc4_state->src_w[channel], vc4_state->crtc_w); + } + + /* Ch0 V-TPZ Words 0-2: Scaling Parameters, Recip, Context */ +- if (vc4_state->y_scaling == VC4_SCALING_TPZ) { ++ if (vc4_state->y_scaling[channel] == VC4_SCALING_TPZ) { + vc4_write_tpz(vc4_state, +- vc4_state->src_h, vc4_state->crtc_h); ++ vc4_state->src_h[channel], vc4_state->crtc_h); + vc4_dlist_write(vc4_state, 0xc0c0c0c0); + } + } +@@ -401,13 +487,13 @@ static int vc4_plane_mode_set(struct drm_plane *plane, + struct vc4_dev *vc4 = to_vc4_dev(plane->dev); + struct vc4_plane_state *vc4_state = to_vc4_plane_state(state); + struct drm_framebuffer *fb = state->fb; +- struct drm_gem_cma_object *bo = drm_fb_cma_get_gem_obj(fb, 0); + u32 ctl0_offset = vc4_state->dlist_count; + const struct hvs_format *format = vc4_get_hvs_format(fb->pixel_format); +- u32 scl; ++ int num_planes = drm_format_num_planes(format->drm); ++ u32 scl0, scl1; + u32 lbm_size; + unsigned long irqflags; +- int ret; ++ int ret, i; + + ret = vc4_plane_setup_clipping_and_scaling(state); + if (ret) +@@ -432,7 +518,19 @@ static int vc4_plane_mode_set(struct drm_plane *plane, + if (ret) + return ret; + +- scl = vc4_get_scl_field(state); ++ /* SCL1 is used for Cb/Cr scaling of planar formats. For RGB ++ * and 4:4:4, scl1 should be set to scl0 so both channels of ++ * the scaler do the same thing. For YUV, the Y plane needs ++ * to be put in channel 1 and Cb/Cr in channel 0, so we swap ++ * the scl fields here. ++ */ ++ if (num_planes == 1) { ++ scl0 = vc4_get_scl_field(state, 1); ++ scl1 = scl0; ++ } else { ++ scl0 = vc4_get_scl_field(state, 1); ++ scl1 = vc4_get_scl_field(state, 0); ++ } + + /* Control word */ + vc4_dlist_write(vc4_state, +@@ -440,8 +538,8 @@ static int vc4_plane_mode_set(struct drm_plane *plane, + (format->pixel_order << SCALER_CTL0_ORDER_SHIFT) | + (format->hvs << SCALER_CTL0_PIXEL_FORMAT_SHIFT) | + (vc4_state->is_unity ? SCALER_CTL0_UNITY : 0) | +- VC4_SET_FIELD(scl, SCALER_CTL0_SCL0) | +- VC4_SET_FIELD(scl, SCALER_CTL0_SCL1)); ++ VC4_SET_FIELD(scl0, SCALER_CTL0_SCL0) | ++ VC4_SET_FIELD(scl1, SCALER_CTL0_SCL1)); + + /* Position Word 0: Image Positions and Alpha Value */ + vc4_state->pos0_offset = vc4_state->dlist_count; +@@ -466,35 +564,68 @@ static int vc4_plane_mode_set(struct drm_plane *plane, + SCALER_POS2_ALPHA_MODE_PIPELINE : + SCALER_POS2_ALPHA_MODE_FIXED, + SCALER_POS2_ALPHA_MODE) | +- VC4_SET_FIELD(vc4_state->src_w, SCALER_POS2_WIDTH) | +- VC4_SET_FIELD(vc4_state->src_h, SCALER_POS2_HEIGHT)); ++ VC4_SET_FIELD(vc4_state->src_w[0], SCALER_POS2_WIDTH) | ++ VC4_SET_FIELD(vc4_state->src_h[0], SCALER_POS2_HEIGHT)); + + /* Position Word 3: Context. Written by the HVS. */ + vc4_dlist_write(vc4_state, 0xc0c0c0c0); + +- /* Pointer Word 0: RGB / Y Pointer */ ++ ++ /* Pointer Word 0/1/2: RGB / Y / Cb / Cr Pointers ++ * ++ * The pointers may be any byte address. ++ */ + vc4_state->ptr0_offset = vc4_state->dlist_count; +- vc4_dlist_write(vc4_state, bo->paddr + vc4_state->offset); ++ if (!format->flip_cbcr) { ++ for (i = 0; i < num_planes; i++) ++ vc4_dlist_write(vc4_state, vc4_state->offsets[i]); ++ } else { ++ WARN_ON_ONCE(num_planes != 3); ++ vc4_dlist_write(vc4_state, vc4_state->offsets[0]); ++ vc4_dlist_write(vc4_state, vc4_state->offsets[2]); ++ vc4_dlist_write(vc4_state, vc4_state->offsets[1]); ++ } + +- /* Pointer Context Word 0: Written by the HVS */ +- vc4_dlist_write(vc4_state, 0xc0c0c0c0); ++ /* Pointer Context Word 0/1/2: Written by the HVS */ ++ for (i = 0; i < num_planes; i++) ++ vc4_dlist_write(vc4_state, 0xc0c0c0c0); + +- /* Pitch word 0: Pointer 0 Pitch */ +- vc4_dlist_write(vc4_state, +- VC4_SET_FIELD(fb->pitches[0], SCALER_SRC_PITCH)); ++ /* Pitch word 0/1/2 */ ++ for (i = 0; i < num_planes; i++) { ++ vc4_dlist_write(vc4_state, ++ VC4_SET_FIELD(fb->pitches[i], SCALER_SRC_PITCH)); ++ } ++ ++ /* Colorspace conversion words */ ++ if (vc4_state->is_yuv) { ++ vc4_dlist_write(vc4_state, SCALER_CSC0_ITR_R_601_5); ++ vc4_dlist_write(vc4_state, SCALER_CSC1_ITR_R_601_5); ++ vc4_dlist_write(vc4_state, SCALER_CSC2_ITR_R_601_5); ++ } + + if (!vc4_state->is_unity) { + /* LBM Base Address. */ +- if (vc4_state->y_scaling != VC4_SCALING_NONE) ++ if (vc4_state->y_scaling[0] != VC4_SCALING_NONE || ++ vc4_state->y_scaling[1] != VC4_SCALING_NONE) { + vc4_dlist_write(vc4_state, vc4_state->lbm.start); ++ } + +- vc4_write_scaling_parameters(state); ++ if (num_planes > 1) { ++ /* Emit Cb/Cr as channel 0 and Y as channel ++ * 1. This matches how we set up scl0/scl1 ++ * above. ++ */ ++ vc4_write_scaling_parameters(state, 1); ++ } ++ vc4_write_scaling_parameters(state, 0); + + /* If any PPF setup was done, then all the kernel + * pointers get uploaded. + */ +- if (vc4_state->x_scaling == VC4_SCALING_PPF || +- vc4_state->y_scaling == VC4_SCALING_PPF) { ++ if (vc4_state->x_scaling[0] == VC4_SCALING_PPF || ++ vc4_state->y_scaling[0] == VC4_SCALING_PPF || ++ vc4_state->x_scaling[1] == VC4_SCALING_PPF || ++ vc4_state->y_scaling[1] == VC4_SCALING_PPF) { + u32 kernel = VC4_SET_FIELD(vc4->hvs->mitchell_netravali_filter.start, + SCALER_PPF_KERNEL_OFFSET); + +@@ -698,6 +829,7 @@ struct drm_plane *vc4_plane_init(struct drm_device *dev, + struct drm_plane *plane = NULL; + struct vc4_plane *vc4_plane; + u32 formats[ARRAY_SIZE(hvs_formats)]; ++ u32 num_formats = 0; + int ret = 0; + unsigned i; + +@@ -708,12 +840,20 @@ struct drm_plane *vc4_plane_init(struct drm_device *dev, + goto fail; + } + +- for (i = 0; i < ARRAY_SIZE(hvs_formats); i++) +- formats[i] = hvs_formats[i].drm; ++ for (i = 0; i < ARRAY_SIZE(hvs_formats); i++) { ++ /* Don't allow YUV in cursor planes, since that means ++ * tuning on the scaler, which we don't allow for the ++ * cursor. ++ */ ++ if (type != DRM_PLANE_TYPE_CURSOR || ++ hvs_formats[i].hvs < HVS_PIXEL_FORMAT_YCBCR_YUV420_3PLANE) { ++ formats[num_formats++] = hvs_formats[i].drm; ++ } ++ } + plane = &vc4_plane->base; + ret = drm_universal_plane_init(dev, plane, 0xff, + &vc4_plane_funcs, +- formats, ARRAY_SIZE(formats), ++ formats, num_formats, + type, NULL); + + drm_plane_helper_add(plane, &vc4_plane_helper_funcs); +diff --git a/drivers/gpu/drm/vc4/vc4_regs.h b/drivers/gpu/drm/vc4/vc4_regs.h +index a5b544d..bf42a8e 100644 +--- a/drivers/gpu/drm/vc4/vc4_regs.h ++++ b/drivers/gpu/drm/vc4/vc4_regs.h +@@ -519,7 +519,12 @@ enum hvs_pixel_format { + HVS_PIXEL_FORMAT_RGB888 = 5, + HVS_PIXEL_FORMAT_RGBA6666 = 6, + /* 32bpp */ +- HVS_PIXEL_FORMAT_RGBA8888 = 7 ++ HVS_PIXEL_FORMAT_RGBA8888 = 7, ++ ++ HVS_PIXEL_FORMAT_YCBCR_YUV420_3PLANE = 8, ++ HVS_PIXEL_FORMAT_YCBCR_YUV420_2PLANE = 9, ++ HVS_PIXEL_FORMAT_YCBCR_YUV422_3PLANE = 10, ++ HVS_PIXEL_FORMAT_YCBCR_YUV422_2PLANE = 11, + }; + + /* Note: the LSB is the rightmost character shown. Only valid for +@@ -601,6 +606,55 @@ enum hvs_pixel_format { + #define SCALER_POS2_WIDTH_MASK VC4_MASK(11, 0) + #define SCALER_POS2_WIDTH_SHIFT 0 + ++/* Color Space Conversion words. Some values are S2.8 signed ++ * integers, except that the 2 integer bits map as {0x0: 0, 0x1: 1, ++ * 0x2: 2, 0x3: -1} ++ */ ++/* bottom 8 bits of S2.8 contribution of Cr to Blue */ ++#define SCALER_CSC0_COEF_CR_BLU_MASK VC4_MASK(31, 24) ++#define SCALER_CSC0_COEF_CR_BLU_SHIFT 24 ++/* Signed offset to apply to Y before CSC. (Y' = Y + YY_OFS) */ ++#define SCALER_CSC0_COEF_YY_OFS_MASK VC4_MASK(23, 16) ++#define SCALER_CSC0_COEF_YY_OFS_SHIFT 16 ++/* Signed offset to apply to CB before CSC (Cb' = Cb - 128 + CB_OFS). */ ++#define SCALER_CSC0_COEF_CB_OFS_MASK VC4_MASK(15, 8) ++#define SCALER_CSC0_COEF_CB_OFS_SHIFT 8 ++/* Signed offset to apply to CB before CSC (Cr' = Cr - 128 + CR_OFS). */ ++#define SCALER_CSC0_COEF_CR_OFS_MASK VC4_MASK(7, 0) ++#define SCALER_CSC0_COEF_CR_OFS_SHIFT 0 ++#define SCALER_CSC0_ITR_R_601_5 0x00f00000 ++#define SCALER_CSC0_ITR_R_709_3 0x00f00000 ++#define SCALER_CSC0_JPEG_JFIF 0x00000000 ++ ++/* S2.8 contribution of Cb to Green */ ++#define SCALER_CSC1_COEF_CB_GRN_MASK VC4_MASK(31, 22) ++#define SCALER_CSC1_COEF_CB_GRN_SHIFT 22 ++/* S2.8 contribution of Cr to Green */ ++#define SCALER_CSC1_COEF_CR_GRN_MASK VC4_MASK(21, 12) ++#define SCALER_CSC1_COEF_CR_GRN_SHIFT 12 ++/* S2.8 contribution of Y to all of RGB */ ++#define SCALER_CSC1_COEF_YY_ALL_MASK VC4_MASK(11, 2) ++#define SCALER_CSC1_COEF_YY_ALL_SHIFT 2 ++/* top 2 bits of S2.8 contribution of Cr to Blue */ ++#define SCALER_CSC1_COEF_CR_BLU_MASK VC4_MASK(1, 0) ++#define SCALER_CSC1_COEF_CR_BLU_SHIFT 0 ++#define SCALER_CSC1_ITR_R_601_5 0xe73304a8 ++#define SCALER_CSC1_ITR_R_709_3 0xf2b784a8 ++#define SCALER_CSC1_JPEG_JFIF 0xea34a400 ++ ++/* S2.8 contribution of Cb to Red */ ++#define SCALER_CSC2_COEF_CB_RED_MASK VC4_MASK(29, 20) ++#define SCALER_CSC2_COEF_CB_RED_SHIFT 20 ++/* S2.8 contribution of Cr to Red */ ++#define SCALER_CSC2_COEF_CR_RED_MASK VC4_MASK(19, 10) ++#define SCALER_CSC2_COEF_CR_RED_SHIFT 10 ++/* S2.8 contribution of Cb to Blue */ ++#define SCALER_CSC2_COEF_CB_BLU_MASK VC4_MASK(19, 10) ++#define SCALER_CSC2_COEF_CB_BLU_SHIFT 10 ++#define SCALER_CSC2_ITR_R_601_5 0x00066204 ++#define SCALER_CSC2_ITR_R_709_3 0x00072a1c ++#define SCALER_CSC2_JPEG_JFIF 0x000599c5 ++ + #define SCALER_TPZ0_VERT_RECALC BIT(31) + #define SCALER_TPZ0_SCALE_MASK VC4_MASK(28, 8) + #define SCALER_TPZ0_SCALE_SHIFT 8 +-- +2.7.3 + +From 47ed1ee3dbfde89297b81bc09f1b483f4da1b06d Mon Sep 17 00:00:00 2001 +From: Eric Anholt +Date: Mon, 29 Feb 2016 17:53:00 -0800 +Subject: [PATCH 16/36] drm/vc4: Let gpiolib know that we're OK with sleeping + for HPD. + +Fixes an error thrown every few seconds when we poll HPD when it's on +a I2C to GPIO expander. + +Signed-off-by: Eric Anholt +Tested-by: Daniel Stone +--- + drivers/gpu/drm/vc4/vc4_hdmi.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c +index 56272ca..6bcf51d 100644 +--- a/drivers/gpu/drm/vc4/vc4_hdmi.c ++++ b/drivers/gpu/drm/vc4/vc4_hdmi.c +@@ -166,7 +166,7 @@ vc4_hdmi_connector_detect(struct drm_connector *connector, bool force) + struct vc4_dev *vc4 = to_vc4_dev(dev); + + if (vc4->hdmi->hpd_gpio) { +- if (gpio_get_value(vc4->hdmi->hpd_gpio)) ++ if (gpio_get_value_cansleep(vc4->hdmi->hpd_gpio)) + return connector_status_connected; + else + return connector_status_disconnected; +-- +2.7.3 + +From 24b28acef42486c282bc58e977cbfc66191a8f38 Mon Sep 17 00:00:00 2001 +From: Eric Anholt +Date: Mon, 29 Feb 2016 17:53:01 -0800 +Subject: [PATCH 17/36] drm/vc4: Respect GPIO_ACTIVE_LOW on HDMI HPD if set in + the devicetree. + +The original Raspberry Pi had the GPIO active high, but the later +models are active low. The DT GPIO bindings allow specifying the +active flag, except that it doesn't get propagated to the gpiodesc, so +you have to handle it yourself. + +Signed-off-by: Eric Anholt +Tested-by: Daniel Stone +--- + drivers/gpu/drm/vc4/vc4_hdmi.c | 12 ++++++++++-- + 1 file changed, 10 insertions(+), 2 deletions(-) + +diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c +index 6bcf51d..d8b8649 100644 +--- a/drivers/gpu/drm/vc4/vc4_hdmi.c ++++ b/drivers/gpu/drm/vc4/vc4_hdmi.c +@@ -47,6 +47,7 @@ struct vc4_hdmi { + void __iomem *hdmicore_regs; + void __iomem *hd_regs; + int hpd_gpio; ++ bool hpd_active_low; + + struct clk *pixel_clock; + struct clk *hsm_clock; +@@ -166,7 +167,8 @@ vc4_hdmi_connector_detect(struct drm_connector *connector, bool force) + struct vc4_dev *vc4 = to_vc4_dev(dev); + + if (vc4->hdmi->hpd_gpio) { +- if (gpio_get_value_cansleep(vc4->hdmi->hpd_gpio)) ++ if (gpio_get_value_cansleep(vc4->hdmi->hpd_gpio) ^ ++ vc4->hdmi->hpd_active_low) + return connector_status_connected; + else + return connector_status_disconnected; +@@ -517,11 +519,17 @@ static int vc4_hdmi_bind(struct device *dev, struct device *master, void *data) + * we'll use the HDMI core's register. + */ + if (of_find_property(dev->of_node, "hpd-gpios", &value)) { +- hdmi->hpd_gpio = of_get_named_gpio(dev->of_node, "hpd-gpios", 0); ++ enum of_gpio_flags hpd_gpio_flags; ++ ++ hdmi->hpd_gpio = of_get_named_gpio_flags(dev->of_node, ++ "hpd-gpios", 0, ++ &hpd_gpio_flags); + if (hdmi->hpd_gpio < 0) { + ret = hdmi->hpd_gpio; + goto err_unprepare_hsm; + } ++ ++ hdmi->hpd_active_low = hpd_gpio_flags & OF_GPIO_ACTIVE_LOW; + } + + vc4->hdmi = hdmi; +-- +2.7.3 + +From d258332b618af0136386d4fb8f738caedae8c71d Mon Sep 17 00:00:00 2001 +From: Dan Carpenter +Date: Tue, 8 Mar 2016 15:09:41 +0300 +Subject: [PATCH 18/36] drm/vc4: Return -EFAULT on copy_from_user() failure + +The copy_from_user() function returns the number of bytes not copied but +we want to return a negative error code. + +Fixes: 463873d57014 ('drm/vc4: Add an API for creating GPU shaders in GEM BOs.') +Cc: stable@vger.kernel.org +Signed-off-by: Dan Carpenter +Reviewed-by: Eric Anholt +Signed-off-by: Eric Anholt +--- + drivers/gpu/drm/vc4/vc4_bo.c | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +diff --git a/drivers/gpu/drm/vc4/vc4_bo.c b/drivers/gpu/drm/vc4/vc4_bo.c +index 22278bc..ac8eafe 100644 +--- a/drivers/gpu/drm/vc4/vc4_bo.c ++++ b/drivers/gpu/drm/vc4/vc4_bo.c +@@ -499,11 +499,12 @@ vc4_create_shader_bo_ioctl(struct drm_device *dev, void *data, + if (IS_ERR(bo)) + return PTR_ERR(bo); + +- ret = copy_from_user(bo->base.vaddr, ++ if (copy_from_user(bo->base.vaddr, + (void __user *)(uintptr_t)args->data, +- args->size); +- if (ret != 0) ++ args->size)) { ++ ret = -EFAULT; + goto fail; ++ } + /* Clear the rest of the memory from allocating from the BO + * cache. + */ +-- +2.7.3 + +From ed6836e411dd559a811dd063509a01772f4fe00f Mon Sep 17 00:00:00 2001 +From: Eric Anholt +Date: Fri, 4 Mar 2016 12:32:07 -0800 +Subject: [PATCH 19/36] drm/vc4: Recognize a more specific compatible string + for V3D. + +The Raspberry Pi Foundation's firmware updates are shipping device +trees using the old string, so we'll keep recognizing that as this rev +of V3D. Still, we should use a more specific name in the upstream DT +to clarify which board is being supported, in case we do other revs of +V3D in the future. + +Signed-off-by: Eric Anholt +Acked-by: Stephen Warren +--- + drivers/gpu/drm/vc4/vc4_v3d.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/drivers/gpu/drm/vc4/vc4_v3d.c b/drivers/gpu/drm/vc4/vc4_v3d.c +index 31de5d1..e6d3c60 100644 +--- a/drivers/gpu/drm/vc4/vc4_v3d.c ++++ b/drivers/gpu/drm/vc4/vc4_v3d.c +@@ -268,6 +268,7 @@ static int vc4_v3d_dev_remove(struct platform_device *pdev) + } + + static const struct of_device_id vc4_v3d_dt_match[] = { ++ { .compatible = "brcm,bcm2835-v3d" }, + { .compatible = "brcm,vc4-v3d" }, + {} + }; +-- +2.7.3 + +From 142ad4bd29558b85f269a02b74c5149b514acf88 Mon Sep 17 00:00:00 2001 +From: Eric Anholt +Date: Mon, 15 Feb 2016 19:03:57 -0800 +Subject: [PATCH 20/36] clk: bcm2835: Fix setting of PLL divider clock rates + +Our dividers weren't being set successfully because CM_PASSWORD wasn't +included in the register write. It looks easier to just compute the +divider to write ourselves than to update clk-divider for the ability +to OR in some arbitrary bits on write. + +Fixes about half of the video modes on my HDMI monitor (everything +except 720x400). + +Cc: stable@vger.kernel.org +Signed-off-by: Eric Anholt +Signed-off-by: Michael Turquette +--- + drivers/clk/bcm/clk-bcm2835.c | 12 +++++++----- + 1 file changed, 7 insertions(+), 5 deletions(-) + +diff --git a/drivers/clk/bcm/clk-bcm2835.c b/drivers/clk/bcm/clk-bcm2835.c +index 015e687..9f4df8f 100644 +--- a/drivers/clk/bcm/clk-bcm2835.c ++++ b/drivers/clk/bcm/clk-bcm2835.c +@@ -1107,13 +1107,15 @@ static int bcm2835_pll_divider_set_rate(struct clk_hw *hw, + struct bcm2835_pll_divider *divider = bcm2835_pll_divider_from_hw(hw); + struct bcm2835_cprman *cprman = divider->cprman; + const struct bcm2835_pll_divider_data *data = divider->data; +- u32 cm; +- int ret; ++ u32 cm, div, max_div = 1 << A2W_PLL_DIV_BITS; + +- ret = clk_divider_ops.set_rate(hw, rate, parent_rate); +- if (ret) +- return ret; ++ div = DIV_ROUND_UP_ULL(parent_rate, rate); ++ ++ div = min(div, max_div); ++ if (div == max_div) ++ div = 0; + ++ cprman_write(cprman, data->a2w_reg, div); + cm = cprman_read(cprman, data->cm_reg); + cprman_write(cprman, data->cm_reg, cm | data->load_mask); + cprman_write(cprman, data->cm_reg, cm & ~data->load_mask); +-- +2.7.3 + +From 55acd7db60c8247d926969b705373765c26c1f44 Mon Sep 17 00:00:00 2001 +From: Martin Sperl +Date: Fri, 11 Sep 2015 11:22:05 +0000 +Subject: [PATCH 21/36] ARM: bcm2835: add the auxiliary spi1 and spi2 to the + device tree + +This enables the use of the auxiliary spi1 and spi2 devices +on the bcm2835 SOC. + +Note that this requires the use of the new clk-bcm2835-aux to work. + +Signed-off-by: Martin Sperl +Acked-by: Stephen Warren +[anholt: Rebased on 2835.dtsi -> 283x.dtsi change] +Signed-off-by: Eric Anholt +--- + arch/arm/boot/dts/bcm283x.dtsi | 21 +++++++++++++++++++++ + 1 file changed, 21 insertions(+) + +diff --git a/arch/arm/boot/dts/bcm283x.dtsi b/arch/arm/boot/dts/bcm283x.dtsi +index 971e741..f0d4573 100644 +--- a/arch/arm/boot/dts/bcm283x.dtsi ++++ b/arch/arm/boot/dts/bcm283x.dtsi +@@ -1,5 +1,6 @@ + #include + #include ++#include + #include "skeleton.dtsi" + + /* This include file covers the common peripherals and configuration between +@@ -159,6 +160,26 @@ + clocks = <&clocks BCM2835_CLOCK_VPU>; + }; + ++ spi1: spi@7e215080 { ++ compatible = "brcm,bcm2835-aux-spi"; ++ reg = <0x7e215080 0x40>; ++ interrupts = <1 29>; ++ clocks = <&aux BCM2835_AUX_CLOCK_SPI1>; ++ #address-cells = <1>; ++ #size-cells = <0>; ++ status = "disabled"; ++ }; ++ ++ spi2: spi@7e2150c0 { ++ compatible = "brcm,bcm2835-aux-spi"; ++ reg = <0x7e2150c0 0x40>; ++ interrupts = <1 29>; ++ clocks = <&aux BCM2835_AUX_CLOCK_SPI2>; ++ #address-cells = <1>; ++ #size-cells = <0>; ++ status = "disabled"; ++ }; ++ + sdhci: sdhci@7e300000 { + compatible = "brcm,bcm2835-sdhci"; + reg = <0x7e300000 0x100>; +-- +2.7.3 + +From 3e0a385cebe3b0d9338cab356c6a11daaa64f808 Mon Sep 17 00:00:00 2001 +From: Remi Pommarel +Date: Mon, 21 Dec 2015 21:12:59 +0100 +Subject: [PATCH 22/36] ARM: bcm2835: Add PWM clock support to the device tree + +Signed-off-by: Remi Pommarel +[anholt: Rebased on 2835.dtsi -> 283x.dtsi change] +Signed-off-by: Eric Anholt +--- + arch/arm/boot/dts/bcm2835-rpi.dtsi | 4 ++++ + arch/arm/boot/dts/bcm283x.dtsi | 10 ++++++++++ + 2 files changed, 14 insertions(+) + +diff --git a/arch/arm/boot/dts/bcm2835-rpi.dtsi b/arch/arm/boot/dts/bcm2835-rpi.dtsi +index 3afb9fe..a584a93 100644 +--- a/arch/arm/boot/dts/bcm2835-rpi.dtsi ++++ b/arch/arm/boot/dts/bcm2835-rpi.dtsi +@@ -58,3 +58,7 @@ + status = "okay"; + bus-width = <4>; + }; ++ ++&pwm { ++ status = "okay"; ++}; +diff --git a/arch/arm/boot/dts/bcm283x.dtsi b/arch/arm/boot/dts/bcm283x.dtsi +index f0d4573..e4a2792 100644 +--- a/arch/arm/boot/dts/bcm283x.dtsi ++++ b/arch/arm/boot/dts/bcm283x.dtsi +@@ -180,6 +180,16 @@ + status = "disabled"; + }; + ++ pwm: pwm@7e20c000 { ++ compatible = "brcm,bcm2835-pwm"; ++ reg = <0x7e20c000 0x28>; ++ clocks = <&clocks BCM2835_CLOCK_PWM>; ++ assigned-clocks = <&clocks BCM2835_CLOCK_PWM>; ++ assigned-clock-rates = <10000000>; ++ #pwm-cells = <2>; ++ status = "disabled"; ++ }; ++ + sdhci: sdhci@7e300000 { + compatible = "brcm,bcm2835-sdhci"; + reg = <0x7e300000 0x100>; +-- +2.7.3 + +From 84416a8360e7c31e6ba9f7775c077bd5f3fe32de Mon Sep 17 00:00:00 2001 +From: Lubomir Rintel +Date: Mon, 25 Jan 2016 21:40:06 +0100 +Subject: [PATCH 23/36] ARM: bcm2835: dt: Add Raspberry Pi Model A + +This one is essentially the same as revision 2 B board (with the I2S on +P5 header). + +Signed-off-by: Lubomir Rintel +Acked-by: Stephen Warren +[anholt: Rebased on bcm2835.dtsi -> bcm283x.dtsi change] +Signed-off-by: Eric Anholt +--- + arch/arm/boot/dts/Makefile | 1 + + arch/arm/boot/dts/bcm2835-rpi-a.dts | 24 ++++++++++++++++++++++++ + 2 files changed, 25 insertions(+) + create mode 100644 arch/arm/boot/dts/bcm2835-rpi-a.dts + diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile -index a4a6d70..a8a0767 100644 +index a4a6d70..d000814 100644 --- a/arch/arm/boot/dts/Makefile +++ b/arch/arm/boot/dts/Makefile -@@ -60,10 +60,12 @@ dtb-$(CONFIG_ARCH_AXXIA) += \ +@@ -60,6 +60,7 @@ dtb-$(CONFIG_ARCH_AXXIA) += \ axm5516-amarillo.dtb dtb-$(CONFIG_ARCH_BCM2835) += \ bcm2835-rpi-b.dtb \ @@ -90,30 +2548,12 @@ index a4a6d70..a8a0767 100644 bcm2835-rpi-b-rev2.dtb \ bcm2835-rpi-b-plus.dtb \ bcm2835-rpi-a-plus.dtb \ -- bcm2836-rpi-2-b.dtb -+ bcm2836-rpi-2-b.dtb \ -+ bcm2837-rpi-3-b.dtb - dtb-$(CONFIG_ARCH_BCM_5301X) += \ - bcm4708-asus-rt-ac56u.dtb \ - bcm4708-asus-rt-ac68u.dtb \ -diff --git a/arch/arm/boot/dts/bcm2835-rpi-a-plus.dts b/arch/arm/boot/dts/bcm2835-rpi-a-plus.dts -index 228614f..35ff4e7a 100644 ---- a/arch/arm/boot/dts/bcm2835-rpi-a-plus.dts -+++ b/arch/arm/boot/dts/bcm2835-rpi-a-plus.dts -@@ -29,3 +29,7 @@ - brcm,function = ; - }; - }; -+ -+&hdmi { -+ hpd-gpios = <&gpio 46 GPIO_ACTIVE_LOW>; -+}; diff --git a/arch/arm/boot/dts/bcm2835-rpi-a.dts b/arch/arm/boot/dts/bcm2835-rpi-a.dts new file mode 100644 -index 0000000..306a84e +index 0000000..ddbbbbd --- /dev/null +++ b/arch/arm/boot/dts/bcm2835-rpi-a.dts -@@ -0,0 +1,28 @@ +@@ -0,0 +1,24 @@ +/dts-v1/; +#include "bcm2835.dtsi" +#include "bcm2835-rpi.dtsi" @@ -138,6 +2578,158 @@ index 0000000..306a84e + brcm,function = ; + }; +}; +-- +2.7.3 + +From f6fd06c97f0d6d8398b8caba1b6879fa7e0284ba Mon Sep 17 00:00:00 2001 +From: Alexander Aring +Date: Wed, 16 Dec 2015 16:26:49 -0800 +Subject: [PATCH 24/36] ARM: bcm2835: Add the Raspberry Pi power domain driver + to the DT. + +This connects the USB driver to the USB power domain, so that USB can +actually be turned on at boot if the bootloader didn't do it for us. + +Signed-off-by: Alexander Aring +Signed-off-by: Eric Anholt +Reviewed-by: Kevin Hilman +--- + arch/arm/boot/dts/bcm2835-rpi.dtsi | 12 ++++++++++++ + arch/arm/boot/dts/bcm283x.dtsi | 2 +- + 2 files changed, 13 insertions(+), 1 deletion(-) + +diff --git a/arch/arm/boot/dts/bcm2835-rpi.dtsi b/arch/arm/boot/dts/bcm2835-rpi.dtsi +index a584a93..76bdbca 100644 +--- a/arch/arm/boot/dts/bcm2835-rpi.dtsi ++++ b/arch/arm/boot/dts/bcm2835-rpi.dtsi +@@ -1,3 +1,5 @@ ++#include ++ + / { + memory { + reg = <0 0x10000000>; +@@ -18,6 +20,12 @@ + compatible = "raspberrypi,bcm2835-firmware"; + mboxes = <&mailbox>; + }; ++ ++ power: power { ++ compatible = "raspberrypi,bcm2835-power"; ++ firmware = <&firmware>; ++ #power-domain-cells = <1>; ++ }; + }; + }; + +@@ -62,3 +70,7 @@ + &pwm { + status = "okay"; + }; ++ ++&usb { ++ power-domains = <&power RPI_POWER_DOMAIN_USB>; ++}; +diff --git a/arch/arm/boot/dts/bcm283x.dtsi b/arch/arm/boot/dts/bcm283x.dtsi +index e4a2792..e69a6cf 100644 +--- a/arch/arm/boot/dts/bcm283x.dtsi ++++ b/arch/arm/boot/dts/bcm283x.dtsi +@@ -218,7 +218,7 @@ + status = "disabled"; + }; + +- usb@7e980000 { ++ usb: usb@7e980000 { + compatible = "brcm,bcm2835-usb"; + reg = <0x7e980000 0x10000>; + interrupts = <1 9>; +-- +2.7.3 + +From 580146c680ac7b706ac54d7d7db8204bee3d2e93 Mon Sep 17 00:00:00 2001 +From: Martin Sperl +Date: Fri, 12 Feb 2016 11:14:25 +0000 +Subject: [PATCH 25/36] ARM: bcm2835: add bcm2835-aux-uart support to DT + +Add bcm2835-aux-uart support to the device tree. + +Signed-off-by: Martin Sperl +Signed-off-by: Eric Anholt +--- + arch/arm/boot/dts/bcm283x.dtsi | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/arch/arm/boot/dts/bcm283x.dtsi b/arch/arm/boot/dts/bcm283x.dtsi +index e69a6cf..fc67964 100644 +--- a/arch/arm/boot/dts/bcm283x.dtsi ++++ b/arch/arm/boot/dts/bcm283x.dtsi +@@ -160,6 +160,14 @@ + clocks = <&clocks BCM2835_CLOCK_VPU>; + }; + ++ uart1: serial@7e215040 { ++ compatible = "brcm,bcm2835-aux-uart"; ++ reg = <0x7e215040 0x40>; ++ interrupts = <1 29>; ++ clocks = <&aux BCM2835_AUX_CLOCK_UART>; ++ status = "disabled"; ++ }; ++ + spi1: spi@7e215080 { + compatible = "brcm,bcm2835-aux-spi"; + reg = <0x7e215080 0x40>; +-- +2.7.3 + +From 41135d2ce60509e53306e5b76afab98ddc15951b Mon Sep 17 00:00:00 2001 +From: Eric Anholt +Date: Mon, 2 Mar 2015 14:36:16 -0800 +Subject: [PATCH 26/36] ARM: bcm2835: Add VC4 to the device tree. + +VC4 is the GPU (display and 3D) present on the 283x. + +v2: Sort by register address, mark HDMI as disabled by default in the + SoC file and enable it from -rpi. +v3: Add references to the pixel/HSM clocks for HDMI. Rename + compatibility strings and clean up node names. +v4: Fix comment marking pv0's interrupt as pwa2 instead of pwa0. + Rename hpd-gpio to hpd-gpios. +v5: Rebase on bcm283x.dtsi change, add v3d. +v6: Make HDMI reference the power domain. +v7: Fix the HDMI HPD gpios active value and HDMI enable for each RPI + board. Change V3D compatible string to 2835. + +Signed-off-by: Eric Anholt +--- + arch/arm/boot/dts/bcm2835-rpi-a-plus.dts | 4 +++ + arch/arm/boot/dts/bcm2835-rpi-a.dts | 4 +++ + arch/arm/boot/dts/bcm2835-rpi-b-plus.dts | 4 +++ + arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts | 4 +++ + arch/arm/boot/dts/bcm2835-rpi-b.dts | 4 +++ + arch/arm/boot/dts/bcm2835-rpi.dtsi | 9 ++++++ + arch/arm/boot/dts/bcm2836-rpi-2-b.dts | 4 +++ + arch/arm/boot/dts/bcm283x.dtsi | 47 ++++++++++++++++++++++++++++++++ + 8 files changed, 80 insertions(+) + +diff --git a/arch/arm/boot/dts/bcm2835-rpi-a-plus.dts b/arch/arm/boot/dts/bcm2835-rpi-a-plus.dts +index 228614f..35ff4e7a 100644 +--- a/arch/arm/boot/dts/bcm2835-rpi-a-plus.dts ++++ b/arch/arm/boot/dts/bcm2835-rpi-a-plus.dts +@@ -29,3 +29,7 @@ + brcm,function = ; + }; + }; ++ ++&hdmi { ++ hpd-gpios = <&gpio 46 GPIO_ACTIVE_LOW>; ++}; +diff --git a/arch/arm/boot/dts/bcm2835-rpi-a.dts b/arch/arm/boot/dts/bcm2835-rpi-a.dts +index ddbbbbd..306a84e 100644 +--- a/arch/arm/boot/dts/bcm2835-rpi-a.dts ++++ b/arch/arm/boot/dts/bcm2835-rpi-a.dts +@@ -22,3 +22,7 @@ + brcm,function = ; + }; + }; + +&hdmi { + hpd-gpios = <&gpio 46 GPIO_ACTIVE_HIGH>; @@ -179,36 +2771,13 @@ index 4859e9d..8b15f9c 100644 + hpd-gpios = <&gpio 46 GPIO_ACTIVE_HIGH>; +}; diff --git a/arch/arm/boot/dts/bcm2835-rpi.dtsi b/arch/arm/boot/dts/bcm2835-rpi.dtsi -index 3afb9fe..b1e8145 100644 +index 76bdbca..caf2707 100644 --- a/arch/arm/boot/dts/bcm2835-rpi.dtsi +++ b/arch/arm/boot/dts/bcm2835-rpi.dtsi -@@ -1,3 +1,5 @@ -+#include -+ - / { - memory { - reg = <0 0x10000000>; -@@ -18,6 +20,12 @@ - compatible = "raspberrypi,bcm2835-firmware"; - mboxes = <&mailbox>; - }; -+ -+ power: power { -+ compatible = "raspberrypi,bcm2835-power"; -+ firmware = <&firmware>; -+ #power-domain-cells = <1>; -+ }; - }; +@@ -74,3 +74,12 @@ + &usb { + power-domains = <&power RPI_POWER_DOMAIN_USB>; }; - -@@ -58,3 +66,16 @@ - status = "okay"; - bus-width = <4>; - }; -+ -+&pwm { -+ status = "okay"; -+}; + +&v3d { + power-domains = <&power RPI_POWER_DOMAIN_V3D>; @@ -230,6 +2799,155 @@ index ff94666..c4743f4 100644 +&hdmi { + hpd-gpios = <&gpio 46 GPIO_ACTIVE_LOW>; +}; +diff --git a/arch/arm/boot/dts/bcm283x.dtsi b/arch/arm/boot/dts/bcm283x.dtsi +index fc67964..bbe4eab 100644 +--- a/arch/arm/boot/dts/bcm283x.dtsi ++++ b/arch/arm/boot/dts/bcm283x.dtsi +@@ -1,6 +1,7 @@ + #include + #include + #include ++#include + #include "skeleton.dtsi" + + /* This include file covers the common peripherals and configuration between +@@ -153,6 +154,18 @@ + status = "disabled"; + }; + ++ pixelvalve@7e206000 { ++ compatible = "brcm,bcm2835-pixelvalve0"; ++ reg = <0x7e206000 0x100>; ++ interrupts = <2 13>; /* pwa0 */ ++ }; ++ ++ pixelvalve@7e207000 { ++ compatible = "brcm,bcm2835-pixelvalve1"; ++ reg = <0x7e207000 0x100>; ++ interrupts = <2 14>; /* pwa1 */ ++ }; ++ + aux: aux@0x7e215000 { + compatible = "brcm,bcm2835-aux"; + #clock-cells = <1>; +@@ -206,6 +219,12 @@ + status = "disabled"; + }; + ++ hvs@7e400000 { ++ compatible = "brcm,bcm2835-hvs"; ++ reg = <0x7e400000 0x6000>; ++ interrupts = <2 1>; ++ }; ++ + i2c1: i2c@7e804000 { + compatible = "brcm,bcm2835-i2c"; + reg = <0x7e804000 0x1000>; +@@ -226,11 +245,39 @@ + status = "disabled"; + }; + ++ pixelvalve@7e807000 { ++ compatible = "brcm,bcm2835-pixelvalve2"; ++ reg = <0x7e807000 0x100>; ++ interrupts = <2 10>; /* pixelvalve */ ++ }; ++ ++ hdmi: hdmi@7e902000 { ++ compatible = "brcm,bcm2835-hdmi"; ++ reg = <0x7e902000 0x600>, ++ <0x7e808000 0x100>; ++ interrupts = <2 8>, <2 9>; ++ ddc = <&i2c2>; ++ clocks = <&clocks BCM2835_PLLH_PIX>, ++ <&clocks BCM2835_CLOCK_HSM>; ++ clock-names = "pixel", "hdmi"; ++ status = "disabled"; ++ }; ++ + usb: usb@7e980000 { + compatible = "brcm,bcm2835-usb"; + reg = <0x7e980000 0x10000>; + interrupts = <1 9>; + }; ++ ++ v3d: v3d@7ec00000 { ++ compatible = "brcm,bcm2835-v3d"; ++ reg = <0x7ec00000 0x1000>; ++ interrupts = <1 10>; ++ }; ++ ++ vc4: gpu { ++ compatible = "brcm,bcm2835-vc4"; ++ }; + }; + + clocks { +-- +2.7.3 + +From da77f737f9f5a487f3a1f80f8546585ee18cd7b9 Mon Sep 17 00:00:00 2001 +From: Eric Anholt +Date: Fri, 4 Mar 2016 10:39:28 -0800 +Subject: [PATCH 27/36] dt-bindings: Add root properties for Raspberry Pi 3 + +Signed-off-by: Eric Anholt +Acked-by: Rob Herring +--- + Documentation/devicetree/bindings/arm/bcm/brcm,bcm2835.txt | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/Documentation/devicetree/bindings/arm/bcm/brcm,bcm2835.txt b/Documentation/devicetree/bindings/arm/bcm/brcm,bcm2835.txt +index 11d3056..6ffe087 100644 +--- a/Documentation/devicetree/bindings/arm/bcm/brcm,bcm2835.txt ++++ b/Documentation/devicetree/bindings/arm/bcm/brcm,bcm2835.txt +@@ -30,6 +30,10 @@ Raspberry Pi 2 Model B + Required root node properties: + compatible = "raspberrypi,2-model-b", "brcm,bcm2836"; + ++Raspberry Pi 3 Model B ++Required root node properties: ++compatible = "raspberrypi,3-model-b", "brcm,bcm2837"; ++ + Raspberry Pi Compute Module + Required root node properties: + compatible = "raspberrypi,compute-module", "brcm,bcm2835"; +-- +2.7.3 + +From b76b1cdf2e569cceab41dcf3b3f6a90965d0a02c Mon Sep 17 00:00:00 2001 +From: Eric Anholt +Date: Fri, 4 Mar 2016 10:39:29 -0800 +Subject: [PATCH 28/36] ARM: bcm2835: Add devicetree for the Raspberry Pi 3. + +For now this doesn't support the new hardware present on the Pi 3 (BT, +wifi, GPIO expander). Since the GPIO expander isn't supported, we +also don't have the LEDs like the other board files do. + +Signed-off-by: Eric Anholt +Acked-by: Stephen Warren +--- + arch/arm/boot/dts/Makefile | 3 +- + arch/arm/boot/dts/bcm2837-rpi-3-b.dts | 22 ++++++++++++ + arch/arm/boot/dts/bcm2837.dtsi | 68 +++++++++++++++++++++++++++++++++++ + 3 files changed, 92 insertions(+), 1 deletion(-) + create mode 100644 arch/arm/boot/dts/bcm2837-rpi-3-b.dts + create mode 100644 arch/arm/boot/dts/bcm2837.dtsi + +diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile +index d000814..a8a0767 100644 +--- a/arch/arm/boot/dts/Makefile ++++ b/arch/arm/boot/dts/Makefile +@@ -64,7 +64,8 @@ dtb-$(CONFIG_ARCH_BCM2835) += \ + bcm2835-rpi-b-rev2.dtb \ + bcm2835-rpi-b-plus.dtb \ + bcm2835-rpi-a-plus.dtb \ +- bcm2836-rpi-2-b.dtb ++ bcm2836-rpi-2-b.dtb \ ++ bcm2837-rpi-3-b.dtb + dtb-$(CONFIG_ARCH_BCM_5301X) += \ + bcm4708-asus-rt-ac56u.dtb \ + bcm4708-asus-rt-ac68u.dtb \ diff --git a/arch/arm/boot/dts/bcm2837-rpi-3-b.dts b/arch/arm/boot/dts/bcm2837-rpi-3-b.dts new file mode 100644 index 0000000..5e8eafd @@ -332,19 +3050,27 @@ index 0000000..2f36722 + interrupt-parent = <&local_intc>; + interrupts = <8>; +}; +-- +2.7.3 + +From 43aa67b7bccfb189a3e57832f08710c98fe707c6 Mon Sep 17 00:00:00 2001 +From: Martin Sperl +Date: Sun, 17 Jan 2016 12:15:28 +0000 +Subject: [PATCH 29/36] ARM: bcm2835: follow dt uart node-naming convention + +This patch fixes the naming of the device tree node: uart@7e201000 +to conform to the standard of: serial@7e201000 + +Signed-off-by: Martin Sperl +--- + arch/arm/boot/dts/bcm283x.dtsi | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + diff --git a/arch/arm/boot/dts/bcm283x.dtsi b/arch/arm/boot/dts/bcm283x.dtsi -index 971e741..31cc2f2 100644 +index bbe4eab..31cc2f2 100644 --- a/arch/arm/boot/dts/bcm283x.dtsi +++ b/arch/arm/boot/dts/bcm283x.dtsi -@@ -1,5 +1,7 @@ - #include - #include -+#include -+#include - #include "skeleton.dtsi" - - /* This include file covers the common peripherals and configuration between -@@ -111,7 +113,7 @@ +@@ -113,7 +113,7 @@ #interrupt-cells = <2>; }; @@ -353,1698 +3079,90 @@ index 971e741..31cc2f2 100644 compatible = "brcm,bcm2835-pl011", "arm,pl011", "arm,primecell"; reg = <0x7e201000 0x1000>; interrupts = <2 25>; -@@ -152,6 +154,18 @@ - status = "disabled"; - }; - -+ pixelvalve@7e206000 { -+ compatible = "brcm,bcm2835-pixelvalve0"; -+ reg = <0x7e206000 0x100>; -+ interrupts = <2 13>; /* pwa0 */ -+ }; -+ -+ pixelvalve@7e207000 { -+ compatible = "brcm,bcm2835-pixelvalve1"; -+ reg = <0x7e207000 0x100>; -+ interrupts = <2 14>; /* pwa1 */ -+ }; -+ - aux: aux@0x7e215000 { - compatible = "brcm,bcm2835-aux"; - #clock-cells = <1>; -@@ -159,6 +173,44 @@ - clocks = <&clocks BCM2835_CLOCK_VPU>; - }; - -+ uart1: serial@7e215040 { -+ compatible = "brcm,bcm2835-aux-uart"; -+ reg = <0x7e215040 0x40>; -+ interrupts = <1 29>; -+ clocks = <&aux BCM2835_AUX_CLOCK_UART>; -+ status = "disabled"; -+ }; -+ -+ spi1: spi@7e215080 { -+ compatible = "brcm,bcm2835-aux-spi"; -+ reg = <0x7e215080 0x40>; -+ interrupts = <1 29>; -+ clocks = <&aux BCM2835_AUX_CLOCK_SPI1>; -+ #address-cells = <1>; -+ #size-cells = <0>; -+ status = "disabled"; -+ }; -+ -+ spi2: spi@7e2150c0 { -+ compatible = "brcm,bcm2835-aux-spi"; -+ reg = <0x7e2150c0 0x40>; -+ interrupts = <1 29>; -+ clocks = <&aux BCM2835_AUX_CLOCK_SPI2>; -+ #address-cells = <1>; -+ #size-cells = <0>; -+ status = "disabled"; -+ }; -+ -+ pwm: pwm@7e20c000 { -+ compatible = "brcm,bcm2835-pwm"; -+ reg = <0x7e20c000 0x28>; -+ clocks = <&clocks BCM2835_CLOCK_PWM>; -+ assigned-clocks = <&clocks BCM2835_CLOCK_PWM>; -+ assigned-clock-rates = <10000000>; -+ #pwm-cells = <2>; -+ status = "disabled"; -+ }; -+ - sdhci: sdhci@7e300000 { - compatible = "brcm,bcm2835-sdhci"; - reg = <0x7e300000 0x100>; -@@ -167,6 +219,12 @@ - status = "disabled"; - }; - -+ hvs@7e400000 { -+ compatible = "brcm,bcm2835-hvs"; -+ reg = <0x7e400000 0x6000>; -+ interrupts = <2 1>; -+ }; -+ - i2c1: i2c@7e804000 { - compatible = "brcm,bcm2835-i2c"; - reg = <0x7e804000 0x1000>; -@@ -187,11 +245,39 @@ - status = "disabled"; - }; - -- usb@7e980000 { -+ pixelvalve@7e807000 { -+ compatible = "brcm,bcm2835-pixelvalve2"; -+ reg = <0x7e807000 0x100>; -+ interrupts = <2 10>; /* pixelvalve */ -+ }; -+ -+ hdmi: hdmi@7e902000 { -+ compatible = "brcm,bcm2835-hdmi"; -+ reg = <0x7e902000 0x600>, -+ <0x7e808000 0x100>; -+ interrupts = <2 8>, <2 9>; -+ ddc = <&i2c2>; -+ clocks = <&clocks BCM2835_PLLH_PIX>, -+ <&clocks BCM2835_CLOCK_HSM>; -+ clock-names = "pixel", "hdmi"; -+ status = "disabled"; -+ }; -+ -+ usb: usb@7e980000 { - compatible = "brcm,bcm2835-usb"; - reg = <0x7e980000 0x10000>; - interrupts = <1 9>; - }; -+ -+ v3d: v3d@7ec00000 { -+ compatible = "brcm,bcm2835-v3d"; -+ reg = <0x7ec00000 0x1000>; -+ interrupts = <1 10>; -+ }; -+ -+ vc4: gpu { -+ compatible = "brcm,bcm2835-vc4"; -+ }; - }; - - clocks { -diff --git a/drivers/clk/bcm/clk-bcm2835.c b/drivers/clk/bcm/clk-bcm2835.c -index 015e687..9f4df8f 100644 ---- a/drivers/clk/bcm/clk-bcm2835.c -+++ b/drivers/clk/bcm/clk-bcm2835.c -@@ -1107,13 +1107,15 @@ static int bcm2835_pll_divider_set_rate(struct clk_hw *hw, - struct bcm2835_pll_divider *divider = bcm2835_pll_divider_from_hw(hw); - struct bcm2835_cprman *cprman = divider->cprman; - const struct bcm2835_pll_divider_data *data = divider->data; -- u32 cm; -- int ret; -+ u32 cm, div, max_div = 1 << A2W_PLL_DIV_BITS; - -- ret = clk_divider_ops.set_rate(hw, rate, parent_rate); -- if (ret) -- return ret; -+ div = DIV_ROUND_UP_ULL(parent_rate, rate); -+ -+ div = min(div, max_div); -+ if (div == max_div) -+ div = 0; - -+ cprman_write(cprman, data->a2w_reg, div); - cm = cprman_read(cprman, data->cm_reg); - cprman_write(cprman, data->cm_reg, cm | data->load_mask); - cprman_write(cprman, data->cm_reg, cm & ~data->load_mask); -diff --git a/drivers/gpu/drm/vc4/vc4_bo.c b/drivers/gpu/drm/vc4/vc4_bo.c -index 22278bc..ac8eafe 100644 ---- a/drivers/gpu/drm/vc4/vc4_bo.c -+++ b/drivers/gpu/drm/vc4/vc4_bo.c -@@ -499,11 +499,12 @@ vc4_create_shader_bo_ioctl(struct drm_device *dev, void *data, - if (IS_ERR(bo)) - return PTR_ERR(bo); - -- ret = copy_from_user(bo->base.vaddr, -+ if (copy_from_user(bo->base.vaddr, - (void __user *)(uintptr_t)args->data, -- args->size); -- if (ret != 0) -+ args->size)) { -+ ret = -EFAULT; - goto fail; -+ } - /* Clear the rest of the memory from allocating from the BO - * cache. - */ -diff --git a/drivers/gpu/drm/vc4/vc4_crtc.c b/drivers/gpu/drm/vc4/vc4_crtc.c -index 018145e..9032c06 100644 ---- a/drivers/gpu/drm/vc4/vc4_crtc.c -+++ b/drivers/gpu/drm/vc4/vc4_crtc.c -@@ -49,22 +49,27 @@ struct vc4_crtc { - /* Which HVS channel we're using for our CRTC. */ - int channel; - -- /* Pointer to the actual hardware display list memory for the -- * crtc. -- */ -- u32 __iomem *dlist; -- -- u32 dlist_size; /* in dwords */ -- - struct drm_pending_vblank_event *event; - }; - -+struct vc4_crtc_state { -+ struct drm_crtc_state base; -+ /* Dlist area for this CRTC configuration. */ -+ struct drm_mm_node mm; -+}; -+ - static inline struct vc4_crtc * - to_vc4_crtc(struct drm_crtc *crtc) - { - return (struct vc4_crtc *)crtc; - } - -+static inline struct vc4_crtc_state * -+to_vc4_crtc_state(struct drm_crtc_state *crtc_state) -+{ -+ return (struct vc4_crtc_state *)crtc_state; -+} -+ - struct vc4_crtc_data { - /* Which channel of the HVS this pixelvalve sources from. */ - int hvs_channel; -@@ -83,7 +88,7 @@ static const struct { - } crtc_regs[] = { - CRTC_REG(PV_CONTROL), - CRTC_REG(PV_V_CONTROL), -- CRTC_REG(PV_VSYNCD), -+ CRTC_REG(PV_VSYNCD_EVEN), - CRTC_REG(PV_HORZA), - CRTC_REG(PV_HORZB), - CRTC_REG(PV_VERTA), -@@ -183,6 +188,8 @@ static int vc4_get_clock_select(struct drm_crtc *crtc) - - static void vc4_crtc_mode_set_nofb(struct drm_crtc *crtc) - { -+ struct drm_device *dev = crtc->dev; -+ struct vc4_dev *vc4 = to_vc4_dev(dev); - struct vc4_crtc *vc4_crtc = to_vc4_crtc(crtc); - struct drm_crtc_state *state = crtc->state; - struct drm_display_mode *mode = &state->adjusted_mode; -@@ -212,6 +219,16 @@ static void vc4_crtc_mode_set_nofb(struct drm_crtc *crtc) - PV_HORZB_HFP) | - VC4_SET_FIELD(mode->hdisplay, PV_HORZB_HACTIVE)); - -+ CRTC_WRITE(PV_VERTA, -+ VC4_SET_FIELD(mode->vtotal - mode->vsync_end, -+ PV_VERTA_VBP) | -+ VC4_SET_FIELD(mode->vsync_end - mode->vsync_start, -+ PV_VERTA_VSYNC)); -+ CRTC_WRITE(PV_VERTB, -+ VC4_SET_FIELD(mode->vsync_start - mode->vdisplay, -+ PV_VERTB_VFP) | -+ VC4_SET_FIELD(vactive, PV_VERTB_VACTIVE)); -+ - if (interlace) { - CRTC_WRITE(PV_VERTA_EVEN, - VC4_SET_FIELD(mode->vtotal - mode->vsync_end - 1, -@@ -241,6 +258,10 @@ static void vc4_crtc_mode_set_nofb(struct drm_crtc *crtc) - PV_CONTROL_FIFO_CLR | - PV_CONTROL_EN); - -+ HVS_WRITE(SCALER_DISPBKGNDX(vc4_crtc->channel), -+ SCALER_DISPBKGND_AUTOHS | -+ (interlace ? SCALER_DISPBKGND_INTERLACE : 0)); -+ - if (debug_dump_regs) { - DRM_INFO("CRTC %d regs after:\n", drm_crtc_index(crtc)); - vc4_crtc_dump_regs(vc4_crtc); -@@ -319,11 +340,13 @@ static void vc4_crtc_enable(struct drm_crtc *crtc) - static int vc4_crtc_atomic_check(struct drm_crtc *crtc, - struct drm_crtc_state *state) - { -+ struct vc4_crtc_state *vc4_state = to_vc4_crtc_state(state); - struct drm_device *dev = crtc->dev; - struct vc4_dev *vc4 = to_vc4_dev(dev); - struct drm_plane *plane; -- struct vc4_crtc *vc4_crtc = to_vc4_crtc(crtc); -+ unsigned long flags; - u32 dlist_count = 0; -+ int ret; - - /* The pixelvalve can only feed one encoder (and encoders are - * 1:1 with connectors.) -@@ -346,18 +369,12 @@ static int vc4_crtc_atomic_check(struct drm_crtc *crtc, - - dlist_count++; /* Account for SCALER_CTL0_END. */ - -- if (!vc4_crtc->dlist || dlist_count > vc4_crtc->dlist_size) { -- vc4_crtc->dlist = ((u32 __iomem *)vc4->hvs->dlist + -- HVS_BOOTLOADER_DLIST_END); -- vc4_crtc->dlist_size = ((SCALER_DLIST_SIZE >> 2) - -- HVS_BOOTLOADER_DLIST_END); -- -- if (dlist_count > vc4_crtc->dlist_size) { -- DRM_DEBUG_KMS("dlist too large for CRTC (%d > %d).\n", -- dlist_count, vc4_crtc->dlist_size); -- return -EINVAL; -- } -- } -+ spin_lock_irqsave(&vc4->hvs->mm_lock, flags); -+ ret = drm_mm_insert_node(&vc4->hvs->dlist_mm, &vc4_state->mm, -+ dlist_count, 1, 0); -+ spin_unlock_irqrestore(&vc4->hvs->mm_lock, flags); -+ if (ret) -+ return ret; - - return 0; - } -@@ -368,47 +385,29 @@ static void vc4_crtc_atomic_flush(struct drm_crtc *crtc, - struct drm_device *dev = crtc->dev; - struct vc4_dev *vc4 = to_vc4_dev(dev); - struct vc4_crtc *vc4_crtc = to_vc4_crtc(crtc); -+ struct vc4_crtc_state *vc4_state = to_vc4_crtc_state(crtc->state); - struct drm_plane *plane; - bool debug_dump_regs = false; -- u32 __iomem *dlist_next = vc4_crtc->dlist; -+ u32 __iomem *dlist_start = vc4->hvs->dlist + vc4_state->mm.start; -+ u32 __iomem *dlist_next = dlist_start; - - if (debug_dump_regs) { - DRM_INFO("CRTC %d HVS before:\n", drm_crtc_index(crtc)); - vc4_hvs_dump_state(dev); - } - -- /* Copy all the active planes' dlist contents to the hardware dlist. -- * -- * XXX: If the new display list was large enough that it -- * overlapped a currently-read display list, we need to do -- * something like disable scanout before putting in the new -- * list. For now, we're safe because we only have the two -- * planes. -- */ -+ /* Copy all the active planes' dlist contents to the hardware dlist. */ - drm_atomic_crtc_for_each_plane(plane, crtc) { - dlist_next += vc4_plane_write_dlist(plane, dlist_next); - } - -- if (dlist_next == vc4_crtc->dlist) { -- /* If no planes were enabled, use the SCALER_CTL0_END -- * at the start of the display list memory (in the -- * bootloader section). We'll rewrite that -- * SCALER_CTL0_END, just in case, though. -- */ -- writel(SCALER_CTL0_END, vc4->hvs->dlist); -- HVS_WRITE(SCALER_DISPLISTX(vc4_crtc->channel), 0); -- } else { -- writel(SCALER_CTL0_END, dlist_next); -- dlist_next++; -- -- HVS_WRITE(SCALER_DISPLISTX(vc4_crtc->channel), -- (u32 __iomem *)vc4_crtc->dlist - -- (u32 __iomem *)vc4->hvs->dlist); -- -- /* Make the next display list start after ours. */ -- vc4_crtc->dlist_size -= (dlist_next - vc4_crtc->dlist); -- vc4_crtc->dlist = dlist_next; -- } -+ writel(SCALER_CTL0_END, dlist_next); -+ dlist_next++; -+ -+ WARN_ON_ONCE(dlist_next - dlist_start != vc4_state->mm.size); -+ -+ HVS_WRITE(SCALER_DISPLISTX(vc4_crtc->channel), -+ vc4_state->mm.start); - - if (debug_dump_regs) { - DRM_INFO("CRTC %d HVS after:\n", drm_crtc_index(crtc)); -@@ -544,6 +543,7 @@ static int vc4_async_page_flip(struct drm_crtc *crtc, - /* Make sure all other async modesetes have landed. */ - ret = down_interruptible(&vc4->async_modeset); - if (ret) { -+ drm_framebuffer_unreference(fb); - kfree(flip_state); - return ret; - } -@@ -573,6 +573,36 @@ static int vc4_page_flip(struct drm_crtc *crtc, - return drm_atomic_helper_page_flip(crtc, fb, event, flags); - } - -+static struct drm_crtc_state *vc4_crtc_duplicate_state(struct drm_crtc *crtc) -+{ -+ struct vc4_crtc_state *vc4_state; -+ -+ vc4_state = kzalloc(sizeof(*vc4_state), GFP_KERNEL); -+ if (!vc4_state) -+ return NULL; -+ -+ __drm_atomic_helper_crtc_duplicate_state(crtc, &vc4_state->base); -+ return &vc4_state->base; -+} -+ -+static void vc4_crtc_destroy_state(struct drm_crtc *crtc, -+ struct drm_crtc_state *state) -+{ -+ struct vc4_dev *vc4 = to_vc4_dev(crtc->dev); -+ struct vc4_crtc_state *vc4_state = to_vc4_crtc_state(state); -+ -+ if (vc4_state->mm.allocated) { -+ unsigned long flags; -+ -+ spin_lock_irqsave(&vc4->hvs->mm_lock, flags); -+ drm_mm_remove_node(&vc4_state->mm); -+ spin_unlock_irqrestore(&vc4->hvs->mm_lock, flags); -+ -+ } -+ -+ __drm_atomic_helper_crtc_destroy_state(crtc, state); -+} -+ - static const struct drm_crtc_funcs vc4_crtc_funcs = { - .set_config = drm_atomic_helper_set_config, - .destroy = vc4_crtc_destroy, -@@ -581,8 +611,8 @@ static const struct drm_crtc_funcs vc4_crtc_funcs = { - .cursor_set = NULL, /* handled by drm_mode_cursor_universal */ - .cursor_move = NULL, /* handled by drm_mode_cursor_universal */ - .reset = drm_atomic_helper_crtc_reset, -- .atomic_duplicate_state = drm_atomic_helper_crtc_duplicate_state, -- .atomic_destroy_state = drm_atomic_helper_crtc_destroy_state, -+ .atomic_duplicate_state = vc4_crtc_duplicate_state, -+ .atomic_destroy_state = vc4_crtc_destroy_state, - }; - - static const struct drm_crtc_helper_funcs vc4_crtc_helper_funcs = { -diff --git a/drivers/gpu/drm/vc4/vc4_drv.h b/drivers/gpu/drm/vc4/vc4_drv.h -index 51a6333..83db0b7 100644 ---- a/drivers/gpu/drm/vc4/vc4_drv.h -+++ b/drivers/gpu/drm/vc4/vc4_drv.h -@@ -154,7 +154,17 @@ struct vc4_v3d { - struct vc4_hvs { - struct platform_device *pdev; - void __iomem *regs; -- void __iomem *dlist; -+ u32 __iomem *dlist; -+ -+ /* Memory manager for CRTCs to allocate space in the display -+ * list. Units are dwords. -+ */ -+ struct drm_mm dlist_mm; -+ /* Memory manager for the LBM memory used by HVS scaling. */ -+ struct drm_mm lbm_mm; -+ spinlock_t mm_lock; -+ -+ struct drm_mm_node mitchell_netravali_filter; - }; - - struct vc4_plane { -diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c -index c69c046..d8b8649 100644 ---- a/drivers/gpu/drm/vc4/vc4_hdmi.c -+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c -@@ -47,6 +47,7 @@ struct vc4_hdmi { - void __iomem *hdmicore_regs; - void __iomem *hd_regs; - int hpd_gpio; -+ bool hpd_active_low; - - struct clk *pixel_clock; - struct clk *hsm_clock; -@@ -95,6 +96,7 @@ static const struct { - HDMI_REG(VC4_HDMI_SW_RESET_CONTROL), - HDMI_REG(VC4_HDMI_HOTPLUG_INT), - HDMI_REG(VC4_HDMI_HOTPLUG), -+ HDMI_REG(VC4_HDMI_RAM_PACKET_CONFIG), - HDMI_REG(VC4_HDMI_HORZA), - HDMI_REG(VC4_HDMI_HORZB), - HDMI_REG(VC4_HDMI_FIFO_CTL), -@@ -165,7 +167,8 @@ vc4_hdmi_connector_detect(struct drm_connector *connector, bool force) - struct vc4_dev *vc4 = to_vc4_dev(dev); - - if (vc4->hdmi->hpd_gpio) { -- if (gpio_get_value(vc4->hdmi->hpd_gpio)) -+ if (gpio_get_value_cansleep(vc4->hdmi->hpd_gpio) ^ -+ vc4->hdmi->hpd_active_low) - return connector_status_connected; - else - return connector_status_disconnected; -@@ -495,6 +498,16 @@ static int vc4_hdmi_bind(struct device *dev, struct device *master, void *data) - goto err_put_i2c; - } - -+ /* This is the rate that is set by the firmware. The number -+ * needs to be a bit higher than the pixel clock rate -+ * (generally 148.5Mhz). -+ */ -+ ret = clk_set_rate(hdmi->hsm_clock, 163682864); -+ if (ret) { -+ DRM_ERROR("Failed to set HSM clock rate: %d\n", ret); -+ goto err_unprepare_pix; -+ } -+ - ret = clk_prepare_enable(hdmi->hsm_clock); - if (ret) { - DRM_ERROR("Failed to turn on HDMI state machine clock: %d\n", -@@ -506,17 +519,40 @@ static int vc4_hdmi_bind(struct device *dev, struct device *master, void *data) - * we'll use the HDMI core's register. - */ - if (of_find_property(dev->of_node, "hpd-gpios", &value)) { -- hdmi->hpd_gpio = of_get_named_gpio(dev->of_node, "hpd-gpios", 0); -+ enum of_gpio_flags hpd_gpio_flags; -+ -+ hdmi->hpd_gpio = of_get_named_gpio_flags(dev->of_node, -+ "hpd-gpios", 0, -+ &hpd_gpio_flags); - if (hdmi->hpd_gpio < 0) { - ret = hdmi->hpd_gpio; - goto err_unprepare_hsm; - } -+ -+ hdmi->hpd_active_low = hpd_gpio_flags & OF_GPIO_ACTIVE_LOW; - } - - vc4->hdmi = hdmi; - - /* HDMI core must be enabled. */ -- WARN_ON_ONCE((HD_READ(VC4_HD_M_CTL) & VC4_HD_M_ENABLE) == 0); -+ if (!(HD_READ(VC4_HD_M_CTL) & VC4_HD_M_ENABLE)) { -+ HD_WRITE(VC4_HD_M_CTL, VC4_HD_M_SW_RST); -+ udelay(1); -+ HD_WRITE(VC4_HD_M_CTL, 0); -+ -+ HD_WRITE(VC4_HD_M_CTL, VC4_HD_M_ENABLE); -+ -+ HDMI_WRITE(VC4_HDMI_SW_RESET_CONTROL, -+ VC4_HDMI_SW_RESET_HDMI | -+ VC4_HDMI_SW_RESET_FORMAT_DETECT); -+ -+ HDMI_WRITE(VC4_HDMI_SW_RESET_CONTROL, 0); -+ -+ /* PHY should be in reset, like -+ * vc4_hdmi_encoder_disable() does. -+ */ -+ HDMI_WRITE(VC4_HDMI_TX_PHY_RESET_CTL, 0xf << 16); -+ } - - drm_encoder_init(drm, hdmi->encoder, &vc4_hdmi_encoder_funcs, - DRM_MODE_ENCODER_TMDS, NULL); -diff --git a/drivers/gpu/drm/vc4/vc4_hvs.c b/drivers/gpu/drm/vc4/vc4_hvs.c -index 8098c5b..6fbab1c 100644 ---- a/drivers/gpu/drm/vc4/vc4_hvs.c -+++ b/drivers/gpu/drm/vc4/vc4_hvs.c -@@ -100,12 +100,76 @@ int vc4_hvs_debugfs_regs(struct seq_file *m, void *unused) - } - #endif - -+/* The filter kernel is composed of dwords each containing 3 9-bit -+ * signed integers packed next to each other. -+ */ -+#define VC4_INT_TO_COEFF(coeff) (coeff & 0x1ff) -+#define VC4_PPF_FILTER_WORD(c0, c1, c2) \ -+ ((((c0) & 0x1ff) << 0) | \ -+ (((c1) & 0x1ff) << 9) | \ -+ (((c2) & 0x1ff) << 18)) -+ -+/* The whole filter kernel is arranged as the coefficients 0-16 going -+ * up, then a pad, then 17-31 going down and reversed within the -+ * dwords. This means that a linear phase kernel (where it's -+ * symmetrical at the boundary between 15 and 16) has the last 5 -+ * dwords matching the first 5, but reversed. -+ */ -+#define VC4_LINEAR_PHASE_KERNEL(c0, c1, c2, c3, c4, c5, c6, c7, c8, \ -+ c9, c10, c11, c12, c13, c14, c15) \ -+ {VC4_PPF_FILTER_WORD(c0, c1, c2), \ -+ VC4_PPF_FILTER_WORD(c3, c4, c5), \ -+ VC4_PPF_FILTER_WORD(c6, c7, c8), \ -+ VC4_PPF_FILTER_WORD(c9, c10, c11), \ -+ VC4_PPF_FILTER_WORD(c12, c13, c14), \ -+ VC4_PPF_FILTER_WORD(c15, c15, 0)} -+ -+#define VC4_LINEAR_PHASE_KERNEL_DWORDS 6 -+#define VC4_KERNEL_DWORDS (VC4_LINEAR_PHASE_KERNEL_DWORDS * 2 - 1) -+ -+/* Recommended B=1/3, C=1/3 filter choice from Mitchell/Netravali. -+ * http://www.cs.utexas.edu/~fussell/courses/cs384g/lectures/mitchell/Mitchell.pdf -+ */ -+static const u32 mitchell_netravali_1_3_1_3_kernel[] = -+ VC4_LINEAR_PHASE_KERNEL(0, -2, -6, -8, -10, -8, -3, 2, 18, -+ 50, 82, 119, 155, 187, 213, 227); -+ -+static int vc4_hvs_upload_linear_kernel(struct vc4_hvs *hvs, -+ struct drm_mm_node *space, -+ const u32 *kernel) -+{ -+ int ret, i; -+ u32 __iomem *dst_kernel; -+ -+ ret = drm_mm_insert_node(&hvs->dlist_mm, space, VC4_KERNEL_DWORDS, 1, -+ 0); -+ if (ret) { -+ DRM_ERROR("Failed to allocate space for filter kernel: %d\n", -+ ret); -+ return ret; -+ } -+ -+ dst_kernel = hvs->dlist + space->start; -+ -+ for (i = 0; i < VC4_KERNEL_DWORDS; i++) { -+ if (i < VC4_LINEAR_PHASE_KERNEL_DWORDS) -+ writel(kernel[i], &dst_kernel[i]); -+ else { -+ writel(kernel[VC4_KERNEL_DWORDS - i - 1], -+ &dst_kernel[i]); -+ } -+ } -+ -+ return 0; -+} -+ - static int vc4_hvs_bind(struct device *dev, struct device *master, void *data) - { - struct platform_device *pdev = to_platform_device(dev); - struct drm_device *drm = dev_get_drvdata(master); - struct vc4_dev *vc4 = drm->dev_private; - struct vc4_hvs *hvs = NULL; -+ int ret; - - hvs = devm_kzalloc(&pdev->dev, sizeof(*hvs), GFP_KERNEL); - if (!hvs) -@@ -119,6 +183,33 @@ static int vc4_hvs_bind(struct device *dev, struct device *master, void *data) - - hvs->dlist = hvs->regs + SCALER_DLIST_START; - -+ spin_lock_init(&hvs->mm_lock); -+ -+ /* Set up the HVS display list memory manager. We never -+ * overwrite the setup from the bootloader (just 128b out of -+ * our 16K), since we don't want to scramble the screen when -+ * transitioning from the firmware's boot setup to runtime. -+ */ -+ drm_mm_init(&hvs->dlist_mm, -+ HVS_BOOTLOADER_DLIST_END, -+ (SCALER_DLIST_SIZE >> 2) - HVS_BOOTLOADER_DLIST_END); -+ -+ /* Set up the HVS LBM memory manager. We could have some more -+ * complicated data structure that allowed reuse of LBM areas -+ * between planes when they don't overlap on the screen, but -+ * for now we just allocate globally. -+ */ -+ drm_mm_init(&hvs->lbm_mm, 0, 96 * 1024); -+ -+ /* Upload filter kernels. We only have the one for now, so we -+ * keep it around for the lifetime of the driver. -+ */ -+ ret = vc4_hvs_upload_linear_kernel(hvs, -+ &hvs->mitchell_netravali_filter, -+ mitchell_netravali_1_3_1_3_kernel); -+ if (ret) -+ return ret; -+ - vc4->hvs = hvs; - return 0; - } -@@ -129,6 +220,12 @@ static void vc4_hvs_unbind(struct device *dev, struct device *master, - struct drm_device *drm = dev_get_drvdata(master); - struct vc4_dev *vc4 = drm->dev_private; - -+ if (vc4->hvs->mitchell_netravali_filter.allocated) -+ drm_mm_remove_node(&vc4->hvs->mitchell_netravali_filter); -+ -+ drm_mm_takedown(&vc4->hvs->dlist_mm); -+ drm_mm_takedown(&vc4->hvs->lbm_mm); -+ - vc4->hvs = NULL; - } - -diff --git a/drivers/gpu/drm/vc4/vc4_kms.c b/drivers/gpu/drm/vc4/vc4_kms.c -index f95f2df..4718ae5 100644 ---- a/drivers/gpu/drm/vc4/vc4_kms.c -+++ b/drivers/gpu/drm/vc4/vc4_kms.c -@@ -49,6 +49,15 @@ vc4_atomic_complete_commit(struct vc4_commit *c) - - drm_atomic_helper_commit_modeset_enables(dev, state); - -+ /* Make sure that drm_atomic_helper_wait_for_vblanks() -+ * actually waits for vblank. If we're doing a full atomic -+ * modeset (as opposed to a vc4_update_plane() short circuit), -+ * then we need to wait for scanout to be done with our -+ * display lists before we free it and potentially reallocate -+ * and overwrite the dlist memory with a new modeset. -+ */ -+ state->legacy_cursor_update = false; -+ - drm_atomic_helper_wait_for_vblanks(dev, state); - - drm_atomic_helper_cleanup_planes(dev, state); -diff --git a/drivers/gpu/drm/vc4/vc4_plane.c b/drivers/gpu/drm/vc4/vc4_plane.c -index 0addbad..7b0c72a 100644 ---- a/drivers/gpu/drm/vc4/vc4_plane.c -+++ b/drivers/gpu/drm/vc4/vc4_plane.c -@@ -24,19 +24,52 @@ - #include "drm_fb_cma_helper.h" - #include "drm_plane_helper.h" - -+enum vc4_scaling_mode { -+ VC4_SCALING_NONE, -+ VC4_SCALING_TPZ, -+ VC4_SCALING_PPF, -+}; -+ - struct vc4_plane_state { - struct drm_plane_state base; -+ /* System memory copy of the display list for this element, computed -+ * at atomic_check time. -+ */ - u32 *dlist; -- u32 dlist_size; /* Number of dwords in allocated for the display list */ -+ u32 dlist_size; /* Number of dwords allocated for the display list */ - u32 dlist_count; /* Number of used dwords in the display list. */ - -- /* Offset in the dlist to pointer word 0. */ -- u32 pw0_offset; -+ /* Offset in the dlist to various words, for pageflip or -+ * cursor updates. -+ */ -+ u32 pos0_offset; -+ u32 pos2_offset; -+ u32 ptr0_offset; - - /* Offset where the plane's dlist was last stored in the -- hardware at vc4_crtc_atomic_flush() time. -- */ -- u32 *hw_dlist; -+ * hardware at vc4_crtc_atomic_flush() time. -+ */ -+ u32 __iomem *hw_dlist; -+ -+ /* Clipped coordinates of the plane on the display. */ -+ int crtc_x, crtc_y, crtc_w, crtc_h; -+ /* Clipped area being scanned from in the FB. */ -+ u32 src_x, src_y; -+ -+ u32 src_w[2], src_h[2]; -+ -+ /* Scaling selection for the RGB/Y plane and the Cb/Cr planes. */ -+ enum vc4_scaling_mode x_scaling[2], y_scaling[2]; -+ bool is_unity; -+ bool is_yuv; -+ -+ /* Offset to start scanning out from the start of the plane's -+ * BO. -+ */ -+ u32 offsets[3]; -+ -+ /* Our allocation in LBM for temporary storage during scaling. */ -+ struct drm_mm_node lbm; - }; - - static inline struct vc4_plane_state * -@@ -50,6 +83,7 @@ static const struct hvs_format { - u32 hvs; /* HVS_FORMAT_* */ - u32 pixel_order; - bool has_alpha; -+ bool flip_cbcr; - } hvs_formats[] = { - { - .drm = DRM_FORMAT_XRGB8888, .hvs = HVS_PIXEL_FORMAT_RGBA8888, -@@ -59,6 +93,48 @@ static const struct hvs_format { - .drm = DRM_FORMAT_ARGB8888, .hvs = HVS_PIXEL_FORMAT_RGBA8888, - .pixel_order = HVS_PIXEL_ORDER_ABGR, .has_alpha = true, - }, -+ { -+ .drm = DRM_FORMAT_RGB565, .hvs = HVS_PIXEL_FORMAT_RGB565, -+ .pixel_order = HVS_PIXEL_ORDER_XRGB, .has_alpha = false, -+ }, -+ { -+ .drm = DRM_FORMAT_BGR565, .hvs = HVS_PIXEL_FORMAT_RGB565, -+ .pixel_order = HVS_PIXEL_ORDER_XBGR, .has_alpha = false, -+ }, -+ { -+ .drm = DRM_FORMAT_ARGB1555, .hvs = HVS_PIXEL_FORMAT_RGBA5551, -+ .pixel_order = HVS_PIXEL_ORDER_ABGR, .has_alpha = true, -+ }, -+ { -+ .drm = DRM_FORMAT_XRGB1555, .hvs = HVS_PIXEL_FORMAT_RGBA5551, -+ .pixel_order = HVS_PIXEL_ORDER_ABGR, .has_alpha = false, -+ }, -+ { -+ .drm = DRM_FORMAT_YUV422, -+ .hvs = HVS_PIXEL_FORMAT_YCBCR_YUV422_3PLANE, -+ }, -+ { -+ .drm = DRM_FORMAT_YVU422, -+ .hvs = HVS_PIXEL_FORMAT_YCBCR_YUV422_3PLANE, -+ .flip_cbcr = true, -+ }, -+ { -+ .drm = DRM_FORMAT_YUV420, -+ .hvs = HVS_PIXEL_FORMAT_YCBCR_YUV420_3PLANE, -+ }, -+ { -+ .drm = DRM_FORMAT_YVU420, -+ .hvs = HVS_PIXEL_FORMAT_YCBCR_YUV420_3PLANE, -+ .flip_cbcr = true, -+ }, -+ { -+ .drm = DRM_FORMAT_NV12, -+ .hvs = HVS_PIXEL_FORMAT_YCBCR_YUV420_2PLANE, -+ }, -+ { -+ .drm = DRM_FORMAT_NV16, -+ .hvs = HVS_PIXEL_FORMAT_YCBCR_YUV422_2PLANE, -+ }, - }; - - static const struct hvs_format *vc4_get_hvs_format(u32 drm_format) -@@ -73,6 +149,16 @@ static const struct hvs_format *vc4_get_hvs_format(u32 drm_format) - return NULL; - } - -+static enum vc4_scaling_mode vc4_get_scaling_mode(u32 src, u32 dst) -+{ -+ if (dst > src) -+ return VC4_SCALING_PPF; -+ else if (dst < src) -+ return VC4_SCALING_TPZ; -+ else -+ return VC4_SCALING_NONE; -+} -+ - static bool plane_enabled(struct drm_plane_state *state) - { - return state->fb && state->crtc; -@@ -89,6 +175,8 @@ static struct drm_plane_state *vc4_plane_duplicate_state(struct drm_plane *plane - if (!vc4_state) - return NULL; - -+ memset(&vc4_state->lbm, 0, sizeof(vc4_state->lbm)); -+ - __drm_atomic_helper_plane_duplicate_state(plane, &vc4_state->base); - - if (vc4_state->dlist) { -@@ -108,8 +196,17 @@ static struct drm_plane_state *vc4_plane_duplicate_state(struct drm_plane *plane - static void vc4_plane_destroy_state(struct drm_plane *plane, - struct drm_plane_state *state) - { -+ struct vc4_dev *vc4 = to_vc4_dev(plane->dev); - struct vc4_plane_state *vc4_state = to_vc4_plane_state(state); - -+ if (vc4_state->lbm.allocated) { -+ unsigned long irqflags; -+ -+ spin_lock_irqsave(&vc4->hvs->mm_lock, irqflags); -+ drm_mm_remove_node(&vc4_state->lbm); -+ spin_unlock_irqrestore(&vc4->hvs->mm_lock, irqflags); -+ } -+ - kfree(vc4_state->dlist); - __drm_atomic_helper_plane_destroy_state(plane, &vc4_state->base); - kfree(state); -@@ -148,84 +245,400 @@ static void vc4_dlist_write(struct vc4_plane_state *vc4_state, u32 val) - vc4_state->dlist[vc4_state->dlist_count++] = val; - } - -+/* Returns the scl0/scl1 field based on whether the dimensions need to -+ * be up/down/non-scaled. -+ * -+ * This is a replication of a table from the spec. -+ */ -+static u32 vc4_get_scl_field(struct drm_plane_state *state, int plane) -+{ -+ struct vc4_plane_state *vc4_state = to_vc4_plane_state(state); -+ -+ switch (vc4_state->x_scaling[plane] << 2 | vc4_state->y_scaling[plane]) { -+ case VC4_SCALING_PPF << 2 | VC4_SCALING_PPF: -+ return SCALER_CTL0_SCL_H_PPF_V_PPF; -+ case VC4_SCALING_TPZ << 2 | VC4_SCALING_PPF: -+ return SCALER_CTL0_SCL_H_TPZ_V_PPF; -+ case VC4_SCALING_PPF << 2 | VC4_SCALING_TPZ: -+ return SCALER_CTL0_SCL_H_PPF_V_TPZ; -+ case VC4_SCALING_TPZ << 2 | VC4_SCALING_TPZ: -+ return SCALER_CTL0_SCL_H_TPZ_V_TPZ; -+ case VC4_SCALING_PPF << 2 | VC4_SCALING_NONE: -+ return SCALER_CTL0_SCL_H_PPF_V_NONE; -+ case VC4_SCALING_NONE << 2 | VC4_SCALING_PPF: -+ return SCALER_CTL0_SCL_H_NONE_V_PPF; -+ case VC4_SCALING_NONE << 2 | VC4_SCALING_TPZ: -+ return SCALER_CTL0_SCL_H_NONE_V_TPZ; -+ case VC4_SCALING_TPZ << 2 | VC4_SCALING_NONE: -+ return SCALER_CTL0_SCL_H_TPZ_V_NONE; -+ default: -+ case VC4_SCALING_NONE << 2 | VC4_SCALING_NONE: -+ /* The unity case is independently handled by -+ * SCALER_CTL0_UNITY. -+ */ -+ return 0; -+ } -+} -+ -+static int vc4_plane_setup_clipping_and_scaling(struct drm_plane_state *state) -+{ -+ struct drm_plane *plane = state->plane; -+ struct vc4_plane_state *vc4_state = to_vc4_plane_state(state); -+ struct drm_framebuffer *fb = state->fb; -+ struct drm_gem_cma_object *bo = drm_fb_cma_get_gem_obj(fb, 0); -+ u32 subpixel_src_mask = (1 << 16) - 1; -+ u32 format = fb->pixel_format; -+ int num_planes = drm_format_num_planes(format); -+ u32 h_subsample = 1; -+ u32 v_subsample = 1; -+ int i; -+ -+ for (i = 0; i < num_planes; i++) -+ vc4_state->offsets[i] = bo->paddr + fb->offsets[i]; -+ -+ /* We don't support subpixel source positioning for scaling. */ -+ if ((state->src_x & subpixel_src_mask) || -+ (state->src_y & subpixel_src_mask) || -+ (state->src_w & subpixel_src_mask) || -+ (state->src_h & subpixel_src_mask)) { -+ return -EINVAL; -+ } -+ -+ vc4_state->src_x = state->src_x >> 16; -+ vc4_state->src_y = state->src_y >> 16; -+ vc4_state->src_w[0] = state->src_w >> 16; -+ vc4_state->src_h[0] = state->src_h >> 16; -+ -+ vc4_state->crtc_x = state->crtc_x; -+ vc4_state->crtc_y = state->crtc_y; -+ vc4_state->crtc_w = state->crtc_w; -+ vc4_state->crtc_h = state->crtc_h; -+ -+ vc4_state->x_scaling[0] = vc4_get_scaling_mode(vc4_state->src_w[0], -+ vc4_state->crtc_w); -+ vc4_state->y_scaling[0] = vc4_get_scaling_mode(vc4_state->src_h[0], -+ vc4_state->crtc_h); -+ -+ if (num_planes > 1) { -+ vc4_state->is_yuv = true; -+ -+ h_subsample = drm_format_horz_chroma_subsampling(format); -+ v_subsample = drm_format_vert_chroma_subsampling(format); -+ vc4_state->src_w[1] = vc4_state->src_w[0] / h_subsample; -+ vc4_state->src_h[1] = vc4_state->src_h[0] / v_subsample; -+ -+ vc4_state->x_scaling[1] = -+ vc4_get_scaling_mode(vc4_state->src_w[1], -+ vc4_state->crtc_w); -+ vc4_state->y_scaling[1] = -+ vc4_get_scaling_mode(vc4_state->src_h[1], -+ vc4_state->crtc_h); -+ -+ /* YUV conversion requires that scaling be enabled, -+ * even on a plane that's otherwise 1:1. Choose TPZ -+ * for simplicity. -+ */ -+ if (vc4_state->x_scaling[0] == VC4_SCALING_NONE) -+ vc4_state->x_scaling[0] = VC4_SCALING_TPZ; -+ if (vc4_state->y_scaling[0] == VC4_SCALING_NONE) -+ vc4_state->y_scaling[0] = VC4_SCALING_TPZ; -+ } -+ -+ vc4_state->is_unity = (vc4_state->x_scaling[0] == VC4_SCALING_NONE && -+ vc4_state->y_scaling[0] == VC4_SCALING_NONE && -+ vc4_state->x_scaling[1] == VC4_SCALING_NONE && -+ vc4_state->y_scaling[1] == VC4_SCALING_NONE); -+ -+ /* No configuring scaling on the cursor plane, since it gets -+ non-vblank-synced updates, and scaling requires requires -+ LBM changes which have to be vblank-synced. -+ */ -+ if (plane->type == DRM_PLANE_TYPE_CURSOR && !vc4_state->is_unity) -+ return -EINVAL; -+ -+ /* Clamp the on-screen start x/y to 0. The hardware doesn't -+ * support negative y, and negative x wastes bandwidth. -+ */ -+ if (vc4_state->crtc_x < 0) { -+ for (i = 0; i < num_planes; i++) { -+ u32 cpp = drm_format_plane_cpp(fb->pixel_format, i); -+ u32 subs = ((i == 0) ? 1 : h_subsample); -+ -+ vc4_state->offsets[i] += (cpp * -+ (-vc4_state->crtc_x) / subs); -+ } -+ vc4_state->src_w[0] += vc4_state->crtc_x; -+ vc4_state->src_w[1] += vc4_state->crtc_x / h_subsample; -+ vc4_state->crtc_x = 0; -+ } -+ -+ if (vc4_state->crtc_y < 0) { -+ for (i = 0; i < num_planes; i++) { -+ u32 subs = ((i == 0) ? 1 : v_subsample); -+ -+ vc4_state->offsets[i] += (fb->pitches[i] * -+ (-vc4_state->crtc_y) / subs); -+ } -+ vc4_state->src_h[0] += vc4_state->crtc_y; -+ vc4_state->src_h[1] += vc4_state->crtc_y / v_subsample; -+ vc4_state->crtc_y = 0; -+ } -+ -+ return 0; -+} -+ -+static void vc4_write_tpz(struct vc4_plane_state *vc4_state, u32 src, u32 dst) -+{ -+ u32 scale, recip; -+ -+ scale = (1 << 16) * src / dst; -+ -+ /* The specs note that while the reciprocal would be defined -+ * as (1<<32)/scale, ~0 is close enough. -+ */ -+ recip = ~0 / scale; -+ -+ vc4_dlist_write(vc4_state, -+ VC4_SET_FIELD(scale, SCALER_TPZ0_SCALE) | -+ VC4_SET_FIELD(0, SCALER_TPZ0_IPHASE)); -+ vc4_dlist_write(vc4_state, -+ VC4_SET_FIELD(recip, SCALER_TPZ1_RECIP)); -+} -+ -+static void vc4_write_ppf(struct vc4_plane_state *vc4_state, u32 src, u32 dst) -+{ -+ u32 scale = (1 << 16) * src / dst; -+ -+ vc4_dlist_write(vc4_state, -+ SCALER_PPF_AGC | -+ VC4_SET_FIELD(scale, SCALER_PPF_SCALE) | -+ VC4_SET_FIELD(0, SCALER_PPF_IPHASE)); -+} -+ -+static u32 vc4_lbm_size(struct drm_plane_state *state) -+{ -+ struct vc4_plane_state *vc4_state = to_vc4_plane_state(state); -+ /* This is the worst case number. One of the two sizes will -+ * be used depending on the scaling configuration. -+ */ -+ u32 pix_per_line = max(vc4_state->src_w[0], (u32)vc4_state->crtc_w); -+ u32 lbm; -+ -+ if (!vc4_state->is_yuv) { -+ if (vc4_state->is_unity) -+ return 0; -+ else if (vc4_state->y_scaling[0] == VC4_SCALING_TPZ) -+ lbm = pix_per_line * 8; -+ else { -+ /* In special cases, this multiplier might be 12. */ -+ lbm = pix_per_line * 16; -+ } -+ } else { -+ /* There are cases for this going down to a multiplier -+ * of 2, but according to the firmware source, the -+ * table in the docs is somewhat wrong. -+ */ -+ lbm = pix_per_line * 16; -+ } -+ -+ lbm = roundup(lbm, 32); -+ -+ return lbm; -+} -+ -+static void vc4_write_scaling_parameters(struct drm_plane_state *state, -+ int channel) -+{ -+ struct vc4_plane_state *vc4_state = to_vc4_plane_state(state); -+ -+ /* Ch0 H-PPF Word 0: Scaling Parameters */ -+ if (vc4_state->x_scaling[channel] == VC4_SCALING_PPF) { -+ vc4_write_ppf(vc4_state, -+ vc4_state->src_w[channel], vc4_state->crtc_w); -+ } -+ -+ /* Ch0 V-PPF Words 0-1: Scaling Parameters, Context */ -+ if (vc4_state->y_scaling[channel] == VC4_SCALING_PPF) { -+ vc4_write_ppf(vc4_state, -+ vc4_state->src_h[channel], vc4_state->crtc_h); -+ vc4_dlist_write(vc4_state, 0xc0c0c0c0); -+ } -+ -+ /* Ch0 H-TPZ Words 0-1: Scaling Parameters, Recip */ -+ if (vc4_state->x_scaling[channel] == VC4_SCALING_TPZ) { -+ vc4_write_tpz(vc4_state, -+ vc4_state->src_w[channel], vc4_state->crtc_w); -+ } -+ -+ /* Ch0 V-TPZ Words 0-2: Scaling Parameters, Recip, Context */ -+ if (vc4_state->y_scaling[channel] == VC4_SCALING_TPZ) { -+ vc4_write_tpz(vc4_state, -+ vc4_state->src_h[channel], vc4_state->crtc_h); -+ vc4_dlist_write(vc4_state, 0xc0c0c0c0); -+ } -+} -+ - /* Writes out a full display list for an active plane to the plane's - * private dlist state. - */ - static int vc4_plane_mode_set(struct drm_plane *plane, - struct drm_plane_state *state) - { -+ struct vc4_dev *vc4 = to_vc4_dev(plane->dev); - struct vc4_plane_state *vc4_state = to_vc4_plane_state(state); - struct drm_framebuffer *fb = state->fb; -- struct drm_gem_cma_object *bo = drm_fb_cma_get_gem_obj(fb, 0); - u32 ctl0_offset = vc4_state->dlist_count; - const struct hvs_format *format = vc4_get_hvs_format(fb->pixel_format); -- uint32_t offset = fb->offsets[0]; -- int crtc_x = state->crtc_x; -- int crtc_y = state->crtc_y; -- int crtc_w = state->crtc_w; -- int crtc_h = state->crtc_h; -- -- if (state->crtc_w << 16 != state->src_w || -- state->crtc_h << 16 != state->src_h) { -- /* We don't support scaling yet, which involves -- * allocating the LBM memory for scaling temporary -- * storage, and putting filter kernels in the HVS -- * context. -- */ -- return -EINVAL; -+ int num_planes = drm_format_num_planes(format->drm); -+ u32 scl0, scl1; -+ u32 lbm_size; -+ unsigned long irqflags; -+ int ret, i; -+ -+ ret = vc4_plane_setup_clipping_and_scaling(state); -+ if (ret) -+ return ret; -+ -+ /* Allocate the LBM memory that the HVS will use for temporary -+ * storage due to our scaling/format conversion. -+ */ -+ lbm_size = vc4_lbm_size(state); -+ if (lbm_size) { -+ if (!vc4_state->lbm.allocated) { -+ spin_lock_irqsave(&vc4->hvs->mm_lock, irqflags); -+ ret = drm_mm_insert_node(&vc4->hvs->lbm_mm, -+ &vc4_state->lbm, -+ lbm_size, 32, 0); -+ spin_unlock_irqrestore(&vc4->hvs->mm_lock, irqflags); -+ } else { -+ WARN_ON_ONCE(lbm_size != vc4_state->lbm.size); -+ } - } - -- if (crtc_x < 0) { -- offset += drm_format_plane_cpp(fb->pixel_format, 0) * -crtc_x; -- crtc_w += crtc_x; -- crtc_x = 0; -- } -+ if (ret) -+ return ret; - -- if (crtc_y < 0) { -- offset += fb->pitches[0] * -crtc_y; -- crtc_h += crtc_y; -- crtc_y = 0; -+ /* SCL1 is used for Cb/Cr scaling of planar formats. For RGB -+ * and 4:4:4, scl1 should be set to scl0 so both channels of -+ * the scaler do the same thing. For YUV, the Y plane needs -+ * to be put in channel 1 and Cb/Cr in channel 0, so we swap -+ * the scl fields here. -+ */ -+ if (num_planes == 1) { -+ scl0 = vc4_get_scl_field(state, 1); -+ scl1 = scl0; -+ } else { -+ scl0 = vc4_get_scl_field(state, 1); -+ scl1 = vc4_get_scl_field(state, 0); - } - -+ /* Control word */ - vc4_dlist_write(vc4_state, - SCALER_CTL0_VALID | - (format->pixel_order << SCALER_CTL0_ORDER_SHIFT) | - (format->hvs << SCALER_CTL0_PIXEL_FORMAT_SHIFT) | -- SCALER_CTL0_UNITY); -+ (vc4_state->is_unity ? SCALER_CTL0_UNITY : 0) | -+ VC4_SET_FIELD(scl0, SCALER_CTL0_SCL0) | -+ VC4_SET_FIELD(scl1, SCALER_CTL0_SCL1)); - - /* Position Word 0: Image Positions and Alpha Value */ -+ vc4_state->pos0_offset = vc4_state->dlist_count; - vc4_dlist_write(vc4_state, - VC4_SET_FIELD(0xff, SCALER_POS0_FIXED_ALPHA) | -- VC4_SET_FIELD(crtc_x, SCALER_POS0_START_X) | -- VC4_SET_FIELD(crtc_y, SCALER_POS0_START_Y)); -- -- /* Position Word 1: Scaled Image Dimensions. -- * Skipped due to SCALER_CTL0_UNITY scaling. -- */ -+ VC4_SET_FIELD(vc4_state->crtc_x, SCALER_POS0_START_X) | -+ VC4_SET_FIELD(vc4_state->crtc_y, SCALER_POS0_START_Y)); -+ -+ /* Position Word 1: Scaled Image Dimensions. */ -+ if (!vc4_state->is_unity) { -+ vc4_dlist_write(vc4_state, -+ VC4_SET_FIELD(vc4_state->crtc_w, -+ SCALER_POS1_SCL_WIDTH) | -+ VC4_SET_FIELD(vc4_state->crtc_h, -+ SCALER_POS1_SCL_HEIGHT)); -+ } - - /* Position Word 2: Source Image Size, Alpha Mode */ -+ vc4_state->pos2_offset = vc4_state->dlist_count; - vc4_dlist_write(vc4_state, - VC4_SET_FIELD(format->has_alpha ? - SCALER_POS2_ALPHA_MODE_PIPELINE : - SCALER_POS2_ALPHA_MODE_FIXED, - SCALER_POS2_ALPHA_MODE) | -- VC4_SET_FIELD(crtc_w, SCALER_POS2_WIDTH) | -- VC4_SET_FIELD(crtc_h, SCALER_POS2_HEIGHT)); -+ VC4_SET_FIELD(vc4_state->src_w[0], SCALER_POS2_WIDTH) | -+ VC4_SET_FIELD(vc4_state->src_h[0], SCALER_POS2_HEIGHT)); - - /* Position Word 3: Context. Written by the HVS. */ - vc4_dlist_write(vc4_state, 0xc0c0c0c0); - -- vc4_state->pw0_offset = vc4_state->dlist_count; - -- /* Pointer Word 0: RGB / Y Pointer */ -- vc4_dlist_write(vc4_state, bo->paddr + offset); -+ /* Pointer Word 0/1/2: RGB / Y / Cb / Cr Pointers -+ * -+ * The pointers may be any byte address. -+ */ -+ vc4_state->ptr0_offset = vc4_state->dlist_count; -+ if (!format->flip_cbcr) { -+ for (i = 0; i < num_planes; i++) -+ vc4_dlist_write(vc4_state, vc4_state->offsets[i]); -+ } else { -+ WARN_ON_ONCE(num_planes != 3); -+ vc4_dlist_write(vc4_state, vc4_state->offsets[0]); -+ vc4_dlist_write(vc4_state, vc4_state->offsets[2]); -+ vc4_dlist_write(vc4_state, vc4_state->offsets[1]); -+ } - -- /* Pointer Context Word 0: Written by the HVS */ -- vc4_dlist_write(vc4_state, 0xc0c0c0c0); -+ /* Pointer Context Word 0/1/2: Written by the HVS */ -+ for (i = 0; i < num_planes; i++) -+ vc4_dlist_write(vc4_state, 0xc0c0c0c0); - -- /* Pitch word 0: Pointer 0 Pitch */ -- vc4_dlist_write(vc4_state, -- VC4_SET_FIELD(fb->pitches[0], SCALER_SRC_PITCH)); -+ /* Pitch word 0/1/2 */ -+ for (i = 0; i < num_planes; i++) { -+ vc4_dlist_write(vc4_state, -+ VC4_SET_FIELD(fb->pitches[i], SCALER_SRC_PITCH)); -+ } -+ -+ /* Colorspace conversion words */ -+ if (vc4_state->is_yuv) { -+ vc4_dlist_write(vc4_state, SCALER_CSC0_ITR_R_601_5); -+ vc4_dlist_write(vc4_state, SCALER_CSC1_ITR_R_601_5); -+ vc4_dlist_write(vc4_state, SCALER_CSC2_ITR_R_601_5); -+ } -+ -+ if (!vc4_state->is_unity) { -+ /* LBM Base Address. */ -+ if (vc4_state->y_scaling[0] != VC4_SCALING_NONE || -+ vc4_state->y_scaling[1] != VC4_SCALING_NONE) { -+ vc4_dlist_write(vc4_state, vc4_state->lbm.start); -+ } -+ -+ if (num_planes > 1) { -+ /* Emit Cb/Cr as channel 0 and Y as channel -+ * 1. This matches how we set up scl0/scl1 -+ * above. -+ */ -+ vc4_write_scaling_parameters(state, 1); -+ } -+ vc4_write_scaling_parameters(state, 0); -+ -+ /* If any PPF setup was done, then all the kernel -+ * pointers get uploaded. -+ */ -+ if (vc4_state->x_scaling[0] == VC4_SCALING_PPF || -+ vc4_state->y_scaling[0] == VC4_SCALING_PPF || -+ vc4_state->x_scaling[1] == VC4_SCALING_PPF || -+ vc4_state->y_scaling[1] == VC4_SCALING_PPF) { -+ u32 kernel = VC4_SET_FIELD(vc4->hvs->mitchell_netravali_filter.start, -+ SCALER_PPF_KERNEL_OFFSET); -+ -+ /* HPPF plane 0 */ -+ vc4_dlist_write(vc4_state, kernel); -+ /* VPPF plane 0 */ -+ vc4_dlist_write(vc4_state, kernel); -+ /* HPPF plane 1 */ -+ vc4_dlist_write(vc4_state, kernel); -+ /* VPPF plane 1 */ -+ vc4_dlist_write(vc4_state, kernel); -+ } -+ } - - vc4_state->dlist[ctl0_offset] |= - VC4_SET_FIELD(vc4_state->dlist_count, SCALER_CTL0_SIZE); -@@ -303,13 +716,13 @@ void vc4_plane_async_set_fb(struct drm_plane *plane, struct drm_framebuffer *fb) - * scanout will start from this address as soon as the FIFO - * needs to refill with pixels. - */ -- writel(addr, &vc4_state->hw_dlist[vc4_state->pw0_offset]); -+ writel(addr, &vc4_state->hw_dlist[vc4_state->ptr0_offset]); - - /* Also update the CPU-side dlist copy, so that any later - * atomic updates that don't do a new modeset on our plane - * also use our updated address. - */ -- vc4_state->dlist[vc4_state->pw0_offset] = addr; -+ vc4_state->dlist[vc4_state->ptr0_offset] = addr; - } - - static const struct drm_plane_helper_funcs vc4_plane_helper_funcs = { -@@ -325,8 +738,83 @@ static void vc4_plane_destroy(struct drm_plane *plane) - drm_plane_cleanup(plane); - } - -+/* Implements immediate (non-vblank-synced) updates of the cursor -+ * position, or falls back to the atomic helper otherwise. -+ */ -+static int -+vc4_update_plane(struct drm_plane *plane, -+ struct drm_crtc *crtc, -+ struct drm_framebuffer *fb, -+ int crtc_x, int crtc_y, -+ unsigned int crtc_w, unsigned int crtc_h, -+ uint32_t src_x, uint32_t src_y, -+ uint32_t src_w, uint32_t src_h) -+{ -+ struct drm_plane_state *plane_state; -+ struct vc4_plane_state *vc4_state; -+ -+ if (plane != crtc->cursor) -+ goto out; -+ -+ plane_state = plane->state; -+ vc4_state = to_vc4_plane_state(plane_state); -+ -+ if (!plane_state) -+ goto out; -+ -+ /* If we're changing the cursor contents, do that in the -+ * normal vblank-synced atomic path. -+ */ -+ if (fb != plane_state->fb) -+ goto out; -+ -+ /* No configuring new scaling in the fast path. */ -+ if (crtc_w != plane_state->crtc_w || -+ crtc_h != plane_state->crtc_h || -+ src_w != plane_state->src_w || -+ src_h != plane_state->src_h) { -+ goto out; -+ } -+ -+ /* Set the cursor's position on the screen. This is the -+ * expected change from the drm_mode_cursor_universal() -+ * helper. -+ */ -+ plane_state->crtc_x = crtc_x; -+ plane_state->crtc_y = crtc_y; -+ -+ /* Allow changing the start position within the cursor BO, if -+ * that matters. -+ */ -+ plane_state->src_x = src_x; -+ plane_state->src_y = src_y; -+ -+ /* Update the display list based on the new crtc_x/y. */ -+ vc4_plane_atomic_check(plane, plane_state); -+ -+ /* Note that we can't just call vc4_plane_write_dlist() -+ * because that would smash the context data that the HVS is -+ * currently using. -+ */ -+ writel(vc4_state->dlist[vc4_state->pos0_offset], -+ &vc4_state->hw_dlist[vc4_state->pos0_offset]); -+ writel(vc4_state->dlist[vc4_state->pos2_offset], -+ &vc4_state->hw_dlist[vc4_state->pos2_offset]); -+ writel(vc4_state->dlist[vc4_state->ptr0_offset], -+ &vc4_state->hw_dlist[vc4_state->ptr0_offset]); -+ -+ return 0; -+ -+out: -+ return drm_atomic_helper_update_plane(plane, crtc, fb, -+ crtc_x, crtc_y, -+ crtc_w, crtc_h, -+ src_x, src_y, -+ src_w, src_h); -+} -+ - static const struct drm_plane_funcs vc4_plane_funcs = { -- .update_plane = drm_atomic_helper_update_plane, -+ .update_plane = vc4_update_plane, - .disable_plane = drm_atomic_helper_disable_plane, - .destroy = vc4_plane_destroy, - .set_property = NULL, -@@ -341,6 +829,7 @@ struct drm_plane *vc4_plane_init(struct drm_device *dev, - struct drm_plane *plane = NULL; - struct vc4_plane *vc4_plane; - u32 formats[ARRAY_SIZE(hvs_formats)]; -+ u32 num_formats = 0; - int ret = 0; - unsigned i; - -@@ -351,12 +840,20 @@ struct drm_plane *vc4_plane_init(struct drm_device *dev, - goto fail; - } - -- for (i = 0; i < ARRAY_SIZE(hvs_formats); i++) -- formats[i] = hvs_formats[i].drm; -+ for (i = 0; i < ARRAY_SIZE(hvs_formats); i++) { -+ /* Don't allow YUV in cursor planes, since that means -+ * tuning on the scaler, which we don't allow for the -+ * cursor. -+ */ -+ if (type != DRM_PLANE_TYPE_CURSOR || -+ hvs_formats[i].hvs < HVS_PIXEL_FORMAT_YCBCR_YUV420_3PLANE) { -+ formats[num_formats++] = hvs_formats[i].drm; -+ } -+ } - plane = &vc4_plane->base; - ret = drm_universal_plane_init(dev, plane, 0xff, - &vc4_plane_funcs, -- formats, ARRAY_SIZE(formats), -+ formats, num_formats, - type, NULL); - - drm_plane_helper_add(plane, &vc4_plane_helper_funcs); -diff --git a/drivers/gpu/drm/vc4/vc4_regs.h b/drivers/gpu/drm/vc4/vc4_regs.h -index 4e52a0a..bf42a8e 100644 ---- a/drivers/gpu/drm/vc4/vc4_regs.h -+++ b/drivers/gpu/drm/vc4/vc4_regs.h -@@ -187,7 +187,7 @@ - # define PV_VCONTROL_CONTINUOUS BIT(1) - # define PV_VCONTROL_VIDEN BIT(0) - --#define PV_VSYNCD 0x08 -+#define PV_VSYNCD_EVEN 0x08 - - #define PV_HORZA 0x0c - # define PV_HORZA_HBP_MASK VC4_MASK(31, 16) -@@ -350,6 +350,17 @@ - # define SCALER_DISPCTRLX_HEIGHT_SHIFT 0 - - #define SCALER_DISPBKGND0 0x00000044 -+# define SCALER_DISPBKGND_AUTOHS BIT(31) -+# define SCALER_DISPBKGND_INTERLACE BIT(30) -+# define SCALER_DISPBKGND_GAMMA BIT(29) -+# define SCALER_DISPBKGND_TESTMODE_MASK VC4_MASK(28, 25) -+# define SCALER_DISPBKGND_TESTMODE_SHIFT 25 -+/* Enables filling the scaler line with the RGB value in the low 24 -+ * bits before compositing. Costs cycles, so should be skipped if -+ * opaque display planes will cover everything. -+ */ -+# define SCALER_DISPBKGND_FILL BIT(24) -+ - #define SCALER_DISPSTAT0 0x00000048 - #define SCALER_DISPBASE0 0x0000004c - # define SCALER_DISPSTATX_MODE_MASK VC4_MASK(31, 30) -@@ -362,6 +373,9 @@ - # define SCALER_DISPSTATX_EMPTY BIT(28) - #define SCALER_DISPCTRL1 0x00000050 - #define SCALER_DISPBKGND1 0x00000054 -+#define SCALER_DISPBKGNDX(x) (SCALER_DISPBKGND0 + \ -+ (x) * (SCALER_DISPBKGND1 - \ -+ SCALER_DISPBKGND0)) - #define SCALER_DISPSTAT1 0x00000058 - #define SCALER_DISPSTATX(x) (SCALER_DISPSTAT0 + \ - (x) * (SCALER_DISPSTAT1 - \ -@@ -456,6 +470,8 @@ - #define VC4_HDMI_TX_PHY_RESET_CTL 0x2c0 - - #define VC4_HD_M_CTL 0x00c -+# define VC4_HD_M_REGISTER_FILE_STANDBY (3 << 6) -+# define VC4_HD_M_RAM_STANDBY (3 << 4) - # define VC4_HD_M_SW_RST BIT(2) - # define VC4_HD_M_ENABLE BIT(0) - -@@ -503,7 +519,12 @@ enum hvs_pixel_format { - HVS_PIXEL_FORMAT_RGB888 = 5, - HVS_PIXEL_FORMAT_RGBA6666 = 6, - /* 32bpp */ -- HVS_PIXEL_FORMAT_RGBA8888 = 7 -+ HVS_PIXEL_FORMAT_RGBA8888 = 7, -+ -+ HVS_PIXEL_FORMAT_YCBCR_YUV420_3PLANE = 8, -+ HVS_PIXEL_FORMAT_YCBCR_YUV420_2PLANE = 9, -+ HVS_PIXEL_FORMAT_YCBCR_YUV422_3PLANE = 10, -+ HVS_PIXEL_FORMAT_YCBCR_YUV422_2PLANE = 11, - }; - - /* Note: the LSB is the rightmost character shown. Only valid for -@@ -536,6 +557,21 @@ enum hvs_pixel_format { - #define SCALER_CTL0_ORDER_MASK VC4_MASK(14, 13) - #define SCALER_CTL0_ORDER_SHIFT 13 - -+#define SCALER_CTL0_SCL1_MASK VC4_MASK(10, 8) -+#define SCALER_CTL0_SCL1_SHIFT 8 -+ -+#define SCALER_CTL0_SCL0_MASK VC4_MASK(7, 5) -+#define SCALER_CTL0_SCL0_SHIFT 5 -+ -+#define SCALER_CTL0_SCL_H_PPF_V_PPF 0 -+#define SCALER_CTL0_SCL_H_TPZ_V_PPF 1 -+#define SCALER_CTL0_SCL_H_PPF_V_TPZ 2 -+#define SCALER_CTL0_SCL_H_TPZ_V_TPZ 3 -+#define SCALER_CTL0_SCL_H_PPF_V_NONE 4 -+#define SCALER_CTL0_SCL_H_NONE_V_PPF 5 -+#define SCALER_CTL0_SCL_H_NONE_V_TPZ 6 -+#define SCALER_CTL0_SCL_H_TPZ_V_NONE 7 -+ - /* Set to indicate no scaling. */ - #define SCALER_CTL0_UNITY BIT(4) - -@@ -551,6 +587,12 @@ enum hvs_pixel_format { - #define SCALER_POS0_START_X_MASK VC4_MASK(11, 0) - #define SCALER_POS0_START_X_SHIFT 0 - -+#define SCALER_POS1_SCL_HEIGHT_MASK VC4_MASK(27, 16) -+#define SCALER_POS1_SCL_HEIGHT_SHIFT 16 -+ -+#define SCALER_POS1_SCL_WIDTH_MASK VC4_MASK(11, 0) -+#define SCALER_POS1_SCL_WIDTH_SHIFT 0 -+ - #define SCALER_POS2_ALPHA_MODE_MASK VC4_MASK(31, 30) - #define SCALER_POS2_ALPHA_MODE_SHIFT 30 - #define SCALER_POS2_ALPHA_MODE_PIPELINE 0 -@@ -564,6 +606,80 @@ enum hvs_pixel_format { - #define SCALER_POS2_WIDTH_MASK VC4_MASK(11, 0) - #define SCALER_POS2_WIDTH_SHIFT 0 - -+/* Color Space Conversion words. Some values are S2.8 signed -+ * integers, except that the 2 integer bits map as {0x0: 0, 0x1: 1, -+ * 0x2: 2, 0x3: -1} -+ */ -+/* bottom 8 bits of S2.8 contribution of Cr to Blue */ -+#define SCALER_CSC0_COEF_CR_BLU_MASK VC4_MASK(31, 24) -+#define SCALER_CSC0_COEF_CR_BLU_SHIFT 24 -+/* Signed offset to apply to Y before CSC. (Y' = Y + YY_OFS) */ -+#define SCALER_CSC0_COEF_YY_OFS_MASK VC4_MASK(23, 16) -+#define SCALER_CSC0_COEF_YY_OFS_SHIFT 16 -+/* Signed offset to apply to CB before CSC (Cb' = Cb - 128 + CB_OFS). */ -+#define SCALER_CSC0_COEF_CB_OFS_MASK VC4_MASK(15, 8) -+#define SCALER_CSC0_COEF_CB_OFS_SHIFT 8 -+/* Signed offset to apply to CB before CSC (Cr' = Cr - 128 + CR_OFS). */ -+#define SCALER_CSC0_COEF_CR_OFS_MASK VC4_MASK(7, 0) -+#define SCALER_CSC0_COEF_CR_OFS_SHIFT 0 -+#define SCALER_CSC0_ITR_R_601_5 0x00f00000 -+#define SCALER_CSC0_ITR_R_709_3 0x00f00000 -+#define SCALER_CSC0_JPEG_JFIF 0x00000000 -+ -+/* S2.8 contribution of Cb to Green */ -+#define SCALER_CSC1_COEF_CB_GRN_MASK VC4_MASK(31, 22) -+#define SCALER_CSC1_COEF_CB_GRN_SHIFT 22 -+/* S2.8 contribution of Cr to Green */ -+#define SCALER_CSC1_COEF_CR_GRN_MASK VC4_MASK(21, 12) -+#define SCALER_CSC1_COEF_CR_GRN_SHIFT 12 -+/* S2.8 contribution of Y to all of RGB */ -+#define SCALER_CSC1_COEF_YY_ALL_MASK VC4_MASK(11, 2) -+#define SCALER_CSC1_COEF_YY_ALL_SHIFT 2 -+/* top 2 bits of S2.8 contribution of Cr to Blue */ -+#define SCALER_CSC1_COEF_CR_BLU_MASK VC4_MASK(1, 0) -+#define SCALER_CSC1_COEF_CR_BLU_SHIFT 0 -+#define SCALER_CSC1_ITR_R_601_5 0xe73304a8 -+#define SCALER_CSC1_ITR_R_709_3 0xf2b784a8 -+#define SCALER_CSC1_JPEG_JFIF 0xea34a400 -+ -+/* S2.8 contribution of Cb to Red */ -+#define SCALER_CSC2_COEF_CB_RED_MASK VC4_MASK(29, 20) -+#define SCALER_CSC2_COEF_CB_RED_SHIFT 20 -+/* S2.8 contribution of Cr to Red */ -+#define SCALER_CSC2_COEF_CR_RED_MASK VC4_MASK(19, 10) -+#define SCALER_CSC2_COEF_CR_RED_SHIFT 10 -+/* S2.8 contribution of Cb to Blue */ -+#define SCALER_CSC2_COEF_CB_BLU_MASK VC4_MASK(19, 10) -+#define SCALER_CSC2_COEF_CB_BLU_SHIFT 10 -+#define SCALER_CSC2_ITR_R_601_5 0x00066204 -+#define SCALER_CSC2_ITR_R_709_3 0x00072a1c -+#define SCALER_CSC2_JPEG_JFIF 0x000599c5 -+ -+#define SCALER_TPZ0_VERT_RECALC BIT(31) -+#define SCALER_TPZ0_SCALE_MASK VC4_MASK(28, 8) -+#define SCALER_TPZ0_SCALE_SHIFT 8 -+#define SCALER_TPZ0_IPHASE_MASK VC4_MASK(7, 0) -+#define SCALER_TPZ0_IPHASE_SHIFT 0 -+#define SCALER_TPZ1_RECIP_MASK VC4_MASK(15, 0) -+#define SCALER_TPZ1_RECIP_SHIFT 0 -+ -+/* Skips interpolating coefficients to 64 phases, so just 8 are used. -+ * Required for nearest neighbor. -+ */ -+#define SCALER_PPF_NOINTERP BIT(31) -+/* Replaes the highest valued coefficient with one that makes all 4 -+ * sum to unity. -+ */ -+#define SCALER_PPF_AGC BIT(30) -+#define SCALER_PPF_SCALE_MASK VC4_MASK(24, 8) -+#define SCALER_PPF_SCALE_SHIFT 8 -+#define SCALER_PPF_IPHASE_MASK VC4_MASK(6, 0) -+#define SCALER_PPF_IPHASE_SHIFT 0 -+ -+#define SCALER_PPF_KERNEL_OFFSET_MASK VC4_MASK(13, 0) -+#define SCALER_PPF_KERNEL_OFFSET_SHIFT 0 -+#define SCALER_PPF_KERNEL_UNCACHED BIT(31) -+ - #define SCALER_SRC_PITCH_MASK VC4_MASK(15, 0) - #define SCALER_SRC_PITCH_SHIFT 0 - -diff --git a/drivers/gpu/drm/vc4/vc4_v3d.c b/drivers/gpu/drm/vc4/vc4_v3d.c -index 31de5d1..e6d3c60 100644 ---- a/drivers/gpu/drm/vc4/vc4_v3d.c -+++ b/drivers/gpu/drm/vc4/vc4_v3d.c -@@ -268,6 +268,7 @@ static int vc4_v3d_dev_remove(struct platform_device *pdev) - } - - static const struct of_device_id vc4_v3d_dt_match[] = { -+ { .compatible = "brcm,bcm2835-v3d" }, - { .compatible = "brcm,vc4-v3d" }, - {} - }; -diff --git a/drivers/mmc/host/Kconfig b/drivers/mmc/host/Kconfig -index 1526b8a..60de1e4 100644 ---- a/drivers/mmc/host/Kconfig -+++ b/drivers/mmc/host/Kconfig -@@ -318,15 +318,15 @@ config MMC_SDHCI_F_SDH30 - If unsure, say N. - - config MMC_SDHCI_IPROC -- tristate "SDHCI platform support for the iProc SD/MMC Controller" -- depends on ARCH_BCM_IPROC || COMPILE_TEST -+ tristate "SDHCI support for the BCM2835 & iProc SD/MMC Controller" -+ depends on ARCH_BCM2835 || ARCH_BCM_IPROC || COMPILE_TEST - depends on MMC_SDHCI_PLTFM - default ARCH_BCM_IPROC - select MMC_SDHCI_IO_ACCESSORS - help - This selects the iProc SD/MMC controller. - -- If you have an IPROC platform with SD or MMC devices, -+ If you have a BCM2835 or IPROC platform with SD or MMC devices, - say Y or M here. - - If unsure, say N. -diff --git a/drivers/mmc/host/sdhci-iproc.c b/drivers/mmc/host/sdhci-iproc.c -index 3b423b0..871c92c 100644 ---- a/drivers/mmc/host/sdhci-iproc.c -+++ b/drivers/mmc/host/sdhci-iproc.c -@@ -26,6 +26,7 @@ struct sdhci_iproc_data { - const struct sdhci_pltfm_data *pdata; - u32 caps; - u32 caps1; -+ u32 mmc_caps; - }; - - struct sdhci_iproc_host { -@@ -165,9 +166,25 @@ static const struct sdhci_iproc_data iproc_data = { - .pdata = &sdhci_iproc_pltfm_data, - .caps = 0x05E90000, - .caps1 = 0x00000064, -+ .mmc_caps = MMC_CAP_1_8V_DDR, -+}; -+ -+static const struct sdhci_pltfm_data sdhci_bcm2835_pltfm_data = { -+ .quirks = SDHCI_QUIRK_BROKEN_CARD_DETECTION | -+ SDHCI_QUIRK_DATA_TIMEOUT_USES_SDCLK | -+ SDHCI_QUIRK_MISSING_CAPS, -+ .ops = &sdhci_iproc_ops, -+}; -+ -+static const struct sdhci_iproc_data bcm2835_data = { -+ .pdata = &sdhci_bcm2835_pltfm_data, -+ .caps = SDHCI_CAN_VDD_330, -+ .caps1 = 0x00000000, -+ .mmc_caps = 0x00000000, - }; - - static const struct of_device_id sdhci_iproc_of_match[] = { -+ { .compatible = "brcm,bcm2835-sdhci", .data = &bcm2835_data }, - { .compatible = "brcm,sdhci-iproc-cygnus", .data = &iproc_data }, - { } - }; -@@ -199,22 +216,32 @@ static int sdhci_iproc_probe(struct platform_device *pdev) - mmc_of_parse(host->mmc); - sdhci_get_of_property(pdev); - -- /* Enable EMMC 1/8V DDR capable */ -- host->mmc->caps |= MMC_CAP_1_8V_DDR; -+ host->mmc->caps |= iproc_host->data->mmc_caps; - - pltfm_host->clk = devm_clk_get(&pdev->dev, NULL); - if (IS_ERR(pltfm_host->clk)) { - ret = PTR_ERR(pltfm_host->clk); - goto err; - } -+ ret = clk_prepare_enable(pltfm_host->clk); -+ if (ret) { -+ dev_err(&pdev->dev, "failed to enable host clk\n"); -+ goto err; -+ } - - if (iproc_host->data->pdata->quirks & SDHCI_QUIRK_MISSING_CAPS) { - host->caps = iproc_host->data->caps; - host->caps1 = iproc_host->data->caps1; - } - -- return sdhci_add_host(host); -+ ret = sdhci_add_host(host); -+ if (ret) -+ goto err_clk; -+ -+ return 0; - -+err_clk: -+ clk_disable_unprepare(pltfm_host->clk); - err: - sdhci_pltfm_free(pdev); - return ret; +-- +2.7.3 + +From 72b53a14be5ff0bda535faefa09bc9726acbe1ff Mon Sep 17 00:00:00 2001 +From: Martin Sperl +Date: Sun, 17 Jan 2016 12:15:29 +0000 +Subject: [PATCH 30/36] dt/bindings: serial: bcm2835: add binding documentation + for bcm2835-aux-uart + +Add binding documentation for the bcm2835-aux-uart driver. + +Signed-off-by: Martin Sperl + +Changelog: + V2->V3: fixed naming convention for node +Acked-by: Rob Herring +Acked-by: Eric Anholt +--- + .../bindings/serial/brcm,bcm2835-aux-uart.txt | 18 ++++++++++++++++++ + 1 file changed, 18 insertions(+) + create mode 100644 Documentation/devicetree/bindings/serial/brcm,bcm2835-aux-uart.txt + +diff --git a/Documentation/devicetree/bindings/serial/brcm,bcm2835-aux-uart.txt b/Documentation/devicetree/bindings/serial/brcm,bcm2835-aux-uart.txt +new file mode 100644 +index 0000000..b5cc629 +--- /dev/null ++++ b/Documentation/devicetree/bindings/serial/brcm,bcm2835-aux-uart.txt +@@ -0,0 +1,18 @@ ++* BCM2835 AUXILIAR UART ++ ++Required properties: ++ ++- compatible: "brcm,bcm2835-aux-uart" ++- reg: The base address of the UART register bank. ++- interrupts: A single interrupt specifier. ++- clocks: Clock driving the hardware; used to figure out the baud rate ++ divisor. ++ ++Example: ++ ++ uart1: serial@7e215040 { ++ compatible = "brcm,bcm2835-aux-uart"; ++ reg = <0x7e215040 0x40>; ++ interrupts = <1 29>; ++ clocks = <&aux BCM2835_AUX_CLOCK_UART>; ++ }; +-- +2.7.3 + +From 285a4ac466d3712b50f5c0d29bf5874476f00c30 Mon Sep 17 00:00:00 2001 +From: Martin Sperl +Date: Sun, 17 Jan 2016 12:15:30 +0000 +Subject: [PATCH 31/36] serial: bcm2835: add driver for bcm2835-aux-uart + +The bcm2835 SOC contains an auxiliary uart, which is very close +to the ns16550 with some differences. + +The big difference is that the uart HW is not using an internal divider +of 16 but 8, which results in an effictive baud-rate being twice +the requested baud-rate. + +This driver handles this device correctly and handles the difference in +the HW divider by scaling up the clock by a factor of 2. + +The approach to write a separate (wrapper) driver instead of using a +multiplying clock and "ns16550" as compatibility in the device-tree +has been recommended by Stephen Warren. + +Signed-off-by: Martin Sperl + +Changelog: + V1->V2: made an explicit bcm2835-aux-uart driver + not conrolling the settings via DT only + V2->V3: added comments on UART capabilities + applied recommendations by Stefan Wahren + keep registered line-id in bcm2835aux_data +Acked-by: Eric Anholt +--- + drivers/tty/serial/8250/8250_bcm2835aux.c | 146 ++++++++++++++++++++++++++++++ + drivers/tty/serial/8250/Kconfig | 24 +++++ + drivers/tty/serial/8250/Makefile | 1 + + 3 files changed, 171 insertions(+) + create mode 100644 drivers/tty/serial/8250/8250_bcm2835aux.c + diff --git a/drivers/tty/serial/8250/8250_bcm2835aux.c b/drivers/tty/serial/8250/8250_bcm2835aux.c new file mode 100644 index 0000000..ecf89f1 @@ -2247,3 +3365,250 @@ index b9b9bca..5c1869f 100644 -- 2.7.3 +From 528285e99c25249456023d28f521689bf9e9eb8b Mon Sep 17 00:00:00 2001 +From: Peter Robinson +Date: Wed, 30 Mar 2016 09:35:13 +0100 +Subject: [PATCH 32/36] drop usb power domain support for the moment, kills usb + +--- + arch/arm/boot/dts/bcm2835-rpi.dtsi | 4 ---- + 1 file changed, 4 deletions(-) + +diff --git a/arch/arm/boot/dts/bcm2835-rpi.dtsi b/arch/arm/boot/dts/bcm2835-rpi.dtsi +index caf2707..b1e8145 100644 +--- a/arch/arm/boot/dts/bcm2835-rpi.dtsi ++++ b/arch/arm/boot/dts/bcm2835-rpi.dtsi +@@ -71,10 +71,6 @@ + status = "okay"; + }; + +-&usb { +- power-domains = <&power RPI_POWER_DOMAIN_USB>; +-}; +- + &v3d { + power-domains = <&power RPI_POWER_DOMAIN_V3D>; + }; +-- +2.7.3 + +From 6af83c5ff7f5514f32b1b3fa6d8d7dfe77e3acce Mon Sep 17 00:00:00 2001 +From: Stefan Wahren +Date: Sun, 17 Jan 2016 14:59:00 +0000 +Subject: [PATCH 33/36] mmc: sdhci-iproc: Clean up platform allocations if + shdci init fails + +This patch adopts the changes from 475c9e43bfa7 ("mmc: sdhci-bcm2835: +Clean up platform allocations if sdhci init fails") to sdhci-iproc. + +Signed-off-by: Stefan Wahren +Acked-by: Scott Branden +Signed-off-by: Ulf Hansson +--- + drivers/mmc/host/sdhci-iproc.c | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +diff --git a/drivers/mmc/host/sdhci-iproc.c b/drivers/mmc/host/sdhci-iproc.c +index 3b423b0..e22060a 100644 +--- a/drivers/mmc/host/sdhci-iproc.c ++++ b/drivers/mmc/host/sdhci-iproc.c +@@ -213,7 +213,11 @@ static int sdhci_iproc_probe(struct platform_device *pdev) + host->caps1 = iproc_host->data->caps1; + } + +- return sdhci_add_host(host); ++ ret = sdhci_add_host(host); ++ if (ret) ++ goto err; ++ ++ return 0; + + err: + sdhci_pltfm_free(pdev); +-- +2.7.3 + +From 1565145761d5d94991e4763001c9e60c655818f1 Mon Sep 17 00:00:00 2001 +From: Stefan Wahren +Date: Sun, 17 Jan 2016 14:59:01 +0000 +Subject: [PATCH 34/36] mmc: sdhci-iproc: Actually enable the clock + +The RPi firmware-based clocks driver can actually disable +unused clocks, so when switching to use it we ended up losing +our MMC clock once all devices were probed. + +This patch adopts the changes from 1e5a0a9a58e2 ("mmc: sdhci-bcm2835: +Actually enable the clock") to sdhci-iproc. + +Signed-off-by: Stefan Wahren +Acked-by: Scott Branden +Signed-off-by: Ulf Hansson +--- + drivers/mmc/host/sdhci-iproc.c | 9 ++++++++- + 1 file changed, 8 insertions(+), 1 deletion(-) + +diff --git a/drivers/mmc/host/sdhci-iproc.c b/drivers/mmc/host/sdhci-iproc.c +index e22060a..55bc348 100644 +--- a/drivers/mmc/host/sdhci-iproc.c ++++ b/drivers/mmc/host/sdhci-iproc.c +@@ -207,6 +207,11 @@ static int sdhci_iproc_probe(struct platform_device *pdev) + ret = PTR_ERR(pltfm_host->clk); + goto err; + } ++ ret = clk_prepare_enable(pltfm_host->clk); ++ if (ret) { ++ dev_err(&pdev->dev, "failed to enable host clk\n"); ++ goto err; ++ } + + if (iproc_host->data->pdata->quirks & SDHCI_QUIRK_MISSING_CAPS) { + host->caps = iproc_host->data->caps; +@@ -215,10 +220,12 @@ static int sdhci_iproc_probe(struct platform_device *pdev) + + ret = sdhci_add_host(host); + if (ret) +- goto err; ++ goto err_clk; + + return 0; + ++err_clk: ++ clk_disable_unprepare(pltfm_host->clk); + err: + sdhci_pltfm_free(pdev); + return ret; +-- +2.7.3 + +From 49ebf153a97a0840c1e54f934411aceb93bbdee4 Mon Sep 17 00:00:00 2001 +From: Stefan Wahren +Date: Wed, 27 Jan 2016 22:25:40 +0000 +Subject: [PATCH 35/36] mmc: sdhci-iproc: define MMC caps in platform data + +This patch moves the definition of the MMC capabilities +from the probe function into iproc platform data. After +that we are able to add support for another platform more +easily. + +Signed-off-by: Stefan Wahren +Suggested-by: Stephen Warren +Acked-by: Scott Branden +Acked-by: Stephen Warren +Signed-off-by: Ulf Hansson +--- + drivers/mmc/host/sdhci-iproc.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/drivers/mmc/host/sdhci-iproc.c b/drivers/mmc/host/sdhci-iproc.c +index 55bc348..cdc6c4a 100644 +--- a/drivers/mmc/host/sdhci-iproc.c ++++ b/drivers/mmc/host/sdhci-iproc.c +@@ -26,6 +26,7 @@ struct sdhci_iproc_data { + const struct sdhci_pltfm_data *pdata; + u32 caps; + u32 caps1; ++ u32 mmc_caps; + }; + + struct sdhci_iproc_host { +@@ -165,6 +166,7 @@ static const struct sdhci_iproc_data iproc_data = { + .pdata = &sdhci_iproc_pltfm_data, + .caps = 0x05E90000, + .caps1 = 0x00000064, ++ .mmc_caps = MMC_CAP_1_8V_DDR, + }; + + static const struct of_device_id sdhci_iproc_of_match[] = { +@@ -199,8 +201,7 @@ static int sdhci_iproc_probe(struct platform_device *pdev) + mmc_of_parse(host->mmc); + sdhci_get_of_property(pdev); + +- /* Enable EMMC 1/8V DDR capable */ +- host->mmc->caps |= MMC_CAP_1_8V_DDR; ++ host->mmc->caps |= iproc_host->data->mmc_caps; + + pltfm_host->clk = devm_clk_get(&pdev->dev, NULL); + if (IS_ERR(pltfm_host->clk)) { +-- +2.7.3 + +From 208897fb02fa78d06f960916bc3781c8a060ab72 Mon Sep 17 00:00:00 2001 +From: Stefan Wahren +Date: Wed, 27 Jan 2016 22:25:41 +0000 +Subject: [PATCH 36/36] mmc: sdhci-iproc: add bcm2835 support + +Scott Branden from Broadcom said that the BCM2835 eMMC IP core is +very similar to IPROC and share most of the quirks. So use this driver +instead of separate one. + +The sdhci-iproc contains a better workaround for the clock domain +crossing problem which doesn't need any delays. This results in a +better write performance. + +Btw we get the rid of the SDHCI_CAPABILITIES hack in the sdhci_readl +function. + +Suggested-by: Scott Branden +Signed-off-by: Stefan Wahren +Acked-by: Eric Anholt +Acked-by: Scott Branden +Acked-by: Stephen Warren +Signed-off-by: Ulf Hansson +--- + drivers/mmc/host/Kconfig | 6 +++--- + drivers/mmc/host/sdhci-iproc.c | 15 +++++++++++++++ + 2 files changed, 18 insertions(+), 3 deletions(-) + +diff --git a/drivers/mmc/host/Kconfig b/drivers/mmc/host/Kconfig +index 1526b8a..60de1e4 100644 +--- a/drivers/mmc/host/Kconfig ++++ b/drivers/mmc/host/Kconfig +@@ -318,15 +318,15 @@ config MMC_SDHCI_F_SDH30 + If unsure, say N. + + config MMC_SDHCI_IPROC +- tristate "SDHCI platform support for the iProc SD/MMC Controller" +- depends on ARCH_BCM_IPROC || COMPILE_TEST ++ tristate "SDHCI support for the BCM2835 & iProc SD/MMC Controller" ++ depends on ARCH_BCM2835 || ARCH_BCM_IPROC || COMPILE_TEST + depends on MMC_SDHCI_PLTFM + default ARCH_BCM_IPROC + select MMC_SDHCI_IO_ACCESSORS + help + This selects the iProc SD/MMC controller. + +- If you have an IPROC platform with SD or MMC devices, ++ If you have a BCM2835 or IPROC platform with SD or MMC devices, + say Y or M here. + + If unsure, say N. +diff --git a/drivers/mmc/host/sdhci-iproc.c b/drivers/mmc/host/sdhci-iproc.c +index cdc6c4a..871c92c 100644 +--- a/drivers/mmc/host/sdhci-iproc.c ++++ b/drivers/mmc/host/sdhci-iproc.c +@@ -169,7 +169,22 @@ static const struct sdhci_iproc_data iproc_data = { + .mmc_caps = MMC_CAP_1_8V_DDR, + }; + ++static const struct sdhci_pltfm_data sdhci_bcm2835_pltfm_data = { ++ .quirks = SDHCI_QUIRK_BROKEN_CARD_DETECTION | ++ SDHCI_QUIRK_DATA_TIMEOUT_USES_SDCLK | ++ SDHCI_QUIRK_MISSING_CAPS, ++ .ops = &sdhci_iproc_ops, ++}; ++ ++static const struct sdhci_iproc_data bcm2835_data = { ++ .pdata = &sdhci_bcm2835_pltfm_data, ++ .caps = SDHCI_CAN_VDD_330, ++ .caps1 = 0x00000000, ++ .mmc_caps = 0x00000000, ++}; ++ + static const struct of_device_id sdhci_iproc_of_match[] = { ++ { .compatible = "brcm,bcm2835-sdhci", .data = &bcm2835_data }, + { .compatible = "brcm,sdhci-iproc-cygnus", .data = &iproc_data }, + { } + }; +-- +2.7.3 + From e2a6e6abc32ef38782d0fe906f52745aaeeb24a5 Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Tue, 12 Apr 2016 08:12:11 -0400 Subject: [PATCH 045/275] Fix Bamboo ONE issues (rhbz 1317116) --- HID-wacom-fix-Bamboo-ONE-oops.patch | 46 +++++++++++++++++++++++++++++ kernel.spec | 6 ++++ 2 files changed, 52 insertions(+) create mode 100644 HID-wacom-fix-Bamboo-ONE-oops.patch diff --git a/HID-wacom-fix-Bamboo-ONE-oops.patch b/HID-wacom-fix-Bamboo-ONE-oops.patch new file mode 100644 index 000000000..09e83179a --- /dev/null +++ b/HID-wacom-fix-Bamboo-ONE-oops.patch @@ -0,0 +1,46 @@ +From 580549ef6b3e3fb3b958de490ca99f43a089a2cf Mon Sep 17 00:00:00 2001 +From: Benjamin Tissoires +Date: Fri, 25 Mar 2016 15:26:55 +0100 +Subject: [PATCH] HID: wacom: fix Bamboo ONE oops + +Looks like recent changes in the Wacom driver made the Bamboo ONE crashes. +The tablet behaves as if it was a regular Bamboo device with pen, touch +and pad, but there is no physical pad connected to it. +The weird part is that the pad is still sending events and given that +there is no input node connected to it, we get anull pointer exception. + +Link: https://bugzilla.redhat.com/show_bug.cgi?id=1317116 + +Signed-off-by: Benjamin Tissoires +Acked-by: Ping Cheng +Cc: stable@vger.kernel.org +Signed-off-by: Jiri Kosina +--- + drivers/hid/wacom_wac.c | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +diff --git a/drivers/hid/wacom_wac.c b/drivers/hid/wacom_wac.c +index bd198bbd4df0..02c4efea241c 100644 +--- a/drivers/hid/wacom_wac.c ++++ b/drivers/hid/wacom_wac.c +@@ -2426,6 +2426,17 @@ void wacom_setup_device_quirks(struct wacom *wacom) + } + + /* ++ * Hack for the Bamboo One: ++ * the device presents a PAD/Touch interface as most Bamboos and even ++ * sends ghosts PAD data on it. However, later, we must disable this ++ * ghost interface, and we can not detect it unless we set it here ++ * to WACOM_DEVICETYPE_PAD or WACOM_DEVICETYPE_TOUCH. ++ */ ++ if (features->type == BAMBOO_PEN && ++ features->pktlen == WACOM_PKGLEN_BBTOUCH3) ++ features->device_type |= WACOM_DEVICETYPE_PAD; ++ ++ /* + * Raw Wacom-mode pen and touch events both come from interface + * 0, whose HID descriptor has an application usage of 0xFF0D + * (i.e., WACOM_VENDORDEFINED_PEN). We route pen packets back +-- +2.5.5 + diff --git a/kernel.spec b/kernel.spec index a8608fd07..d166d8878 100644 --- a/kernel.spec +++ b/kernel.spec @@ -692,6 +692,9 @@ Patch688: x86-iopl-64-Properly-context-switch-IOPL-on-Xen-PV.patch # CVE-2016-3672 rhbz 1324749 1324750 Patch689: x86-mm-32-Enable-full-randomization-on-i386-and-X86_.patch +#rhbz 1317116 +Patch697: HID-wacom-fix-Bamboo-ONE-oops.patch + # END OF PATCH DEFINITIONS %endif @@ -2213,6 +2216,9 @@ fi # # %changelog +* Tue Apr 12 2016 Josh Boyer +- Fix Bamboo ONE issues (rhbz 1317116) + * Mon Apr 11 2016 Peter Robinson - Add upstream patch to fix IDIV issue when booting on Cortex-A7/15/17 devices - Update bcm238x patch From 5b87b4bfd943976e122b6f4b0de6945617526fbf Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Tue, 12 Apr 2016 13:28:45 -0500 Subject: [PATCH 046/275] Linux v4.5.1 --- ...handle-spurious-release-of-trackstic.patch | 31 ----- ...dd-sanity-checks-for-endpoint-access.patch | 80 ------------- ...ix-NULL-dereference-in-create_fixed_.patch | 40 ------- ...ix-double-free-in-error-paths-after-.patch | 100 ---------------- ...inor-code-cleanup-in-create_fixed_st.patch | 62 ---------- ...2-fix-crashes-on-detecting-device-wi.patch | 107 ------------------ ...ate-fix-oops-with-malicious-USB-desc.patch | 38 ------- ...x-oops-with-malicious-USB-descriptor.patch | 40 ------- ...sio-Add-support-for-ICP-DAS-I-756xU-.patch | 59 ---------- ...upstream-fixes-plus-iproc-mmc-driver.patch | 88 -------------- cdc-acm-more-sanity-checking.patch | 33 ------ cypress_m8-add-sanity-checking.patch | 50 -------- ...do-sanity-checking-for-the-number-of.patch | 70 ------------ ...ity-check-against-missing-interfaces.patch | 39 ------- kernel.spec | 53 +-------- mct_u232-sanity-checking-in-probe.patch | 35 ------ perf-tools-Fix-python-extension-build.patch | 71 ------------ sources | 1 + thermal-fix.patch | 77 ------------- ..._claim_interface-add-sanity-checking.patch | 39 ------- ...-port-access-when-module-security-is.patch | 2 +- ...operly-context-switch-IOPL-on-Xen-PV.patch | 96 ---------------- 22 files changed, 7 insertions(+), 1204 deletions(-) delete mode 100644 0001-Input-synaptics-handle-spurious-release-of-trackstic.patch delete mode 100644 ALSA-usb-audio-Add-sanity-checks-for-endpoint-access.patch delete mode 100644 ALSA-usb-audio-Fix-NULL-dereference-in-create_fixed_.patch delete mode 100644 ALSA-usb-audio-Fix-double-free-in-error-paths-after-.patch delete mode 100644 ALSA-usb-audio-Minor-code-cleanup-in-create_fixed_st.patch delete mode 100644 Input-ati_remote2-fix-crashes-on-detecting-device-wi.patch delete mode 100644 USB-input-powermate-fix-oops-with-malicious-USB-desc.patch delete mode 100644 USB-iowarrior-fix-oops-with-malicious-USB-descriptor.patch delete mode 100644 USB-serial-ftdi_sio-Add-support-for-ICP-DAS-I-756xU-.patch delete mode 100644 cdc-acm-more-sanity-checking.patch delete mode 100644 cypress_m8-add-sanity-checking.patch delete mode 100644 digi_acceleport-do-sanity-checking-for-the-number-of.patch delete mode 100644 ims-pcu-sanity-check-against-missing-interfaces.patch delete mode 100644 mct_u232-sanity-checking-in-probe.patch delete mode 100644 perf-tools-Fix-python-extension-build.patch delete mode 100644 thermal-fix.patch delete mode 100644 usb_driver_claim_interface-add-sanity-checking.patch delete mode 100644 x86-iopl-64-Properly-context-switch-IOPL-on-Xen-PV.patch diff --git a/0001-Input-synaptics-handle-spurious-release-of-trackstic.patch b/0001-Input-synaptics-handle-spurious-release-of-trackstic.patch deleted file mode 100644 index 52b082b36..000000000 --- a/0001-Input-synaptics-handle-spurious-release-of-trackstic.patch +++ /dev/null @@ -1,31 +0,0 @@ -From cb6fcfe5a7e9197ceb7e9eec56e9c526e4e76354 Mon Sep 17 00:00:00 2001 -From: Benjamin Tissoires -Date: Mon, 14 Mar 2016 19:37:12 +0100 -Subject: [PATCH] Input: synaptics - handle spurious release of trackstick - buttons, again - -Looks like the fimware 8.2 stall has the extra buttons spurious release -bug. - -Signed-off-by: Benjamin Tissoires ---- - drivers/input/mouse/synaptics.c | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c -index 6025eb4..4ef8d7a 100644 ---- a/drivers/input/mouse/synaptics.c -+++ b/drivers/input/mouse/synaptics.c -@@ -863,7 +863,8 @@ static void synaptics_report_ext_buttons(struct psmouse *psmouse, - return; - - /* Bug in FW 8.1, buttons are reported only when ExtBit is 1 */ -- if (SYN_ID_FULL(priv->identity) == 0x801 && -+ if ((SYN_ID_FULL(priv->identity) == 0x801 || -+ SYN_ID_FULL(priv->identity) == 0x802) && - !((psmouse->packet[0] ^ psmouse->packet[3]) & 0x02)) - return; - --- -2.5.0 - diff --git a/ALSA-usb-audio-Add-sanity-checks-for-endpoint-access.patch b/ALSA-usb-audio-Add-sanity-checks-for-endpoint-access.patch deleted file mode 100644 index 801434a26..000000000 --- a/ALSA-usb-audio-Add-sanity-checks-for-endpoint-access.patch +++ /dev/null @@ -1,80 +0,0 @@ -From 873156565ca67779bbf5a3475ccd08ea3bb92522 Mon Sep 17 00:00:00 2001 -From: Takashi Iwai -Date: Tue, 15 Mar 2016 15:20:58 +0100 -Subject: [PATCH 2/2] ALSA: usb-audio: Add sanity checks for endpoint accesses - -Add some sanity check codes before actually accessing the endpoint via -get_endpoint() in order to avoid the invalid access through a -malformed USB descriptor. Mostly just checking bNumEndpoints, but in -one place (snd_microii_spdif_default_get()), the validity of iface and -altsetting index is checked as well. - -Bugzilla: https://bugzilla.suse.com/show_bug.cgi?id=971125 -Cc: -Signed-off-by: Takashi Iwai ---- - sound/usb/clock.c | 2 ++ - sound/usb/endpoint.c | 3 +++ - sound/usb/mixer_quirks.c | 4 ++++ - sound/usb/pcm.c | 2 ++ - 4 files changed, 11 insertions(+) - -diff --git a/sound/usb/clock.c b/sound/usb/clock.c -index 2ed260b10f6d..7ccbcaf6a147 100644 ---- a/sound/usb/clock.c -+++ b/sound/usb/clock.c -@@ -285,6 +285,8 @@ static int set_sample_rate_v1(struct snd_usb_audio *chip, int iface, - unsigned char data[3]; - int err, crate; - -+ if (get_iface_desc(alts)->bNumEndpoints < 1) -+ return -EINVAL; - ep = get_endpoint(alts, 0)->bEndpointAddress; - - /* if endpoint doesn't have sampling rate control, bail out */ -diff --git a/sound/usb/endpoint.c b/sound/usb/endpoint.c -index e6f71894ecdc..c2131b851602 100644 ---- a/sound/usb/endpoint.c -+++ b/sound/usb/endpoint.c -@@ -415,6 +415,9 @@ exit_clear: - * - * New endpoints will be added to chip->ep_list and must be freed by - * calling snd_usb_endpoint_free(). -+ * -+ * For SND_USB_ENDPOINT_TYPE_SYNC, the caller needs to guarantee that -+ * bNumEndpoints > 1 beforehand. - */ - struct snd_usb_endpoint *snd_usb_add_endpoint(struct snd_usb_audio *chip, - struct usb_host_interface *alts, -diff --git a/sound/usb/mixer_quirks.c b/sound/usb/mixer_quirks.c -index d3608c0a29f3..2d724e3c4cc0 100644 ---- a/sound/usb/mixer_quirks.c -+++ b/sound/usb/mixer_quirks.c -@@ -1518,7 +1518,11 @@ static int snd_microii_spdif_default_get(struct snd_kcontrol *kcontrol, - - /* use known values for that card: interface#1 altsetting#1 */ - iface = usb_ifnum_to_if(chip->dev, 1); -+ if (!iface || iface->num_altsetting < 2) -+ return -EINVAL; - alts = &iface->altsetting[1]; -+ if (get_iface_desc(alts)->bNumEndpoints < 1) -+ return -EINVAL; - ep = get_endpoint(alts, 0)->bEndpointAddress; - - err = snd_usb_ctl_msg(chip->dev, -diff --git a/sound/usb/pcm.c b/sound/usb/pcm.c -index cdac5179db3f..4da64896df6d 100644 ---- a/sound/usb/pcm.c -+++ b/sound/usb/pcm.c -@@ -159,6 +159,8 @@ static int init_pitch_v1(struct snd_usb_audio *chip, int iface, - unsigned char data[1]; - int err; - -+ if (get_iface_desc(alts)->bNumEndpoints < 1) -+ return -EINVAL; - ep = get_endpoint(alts, 0)->bEndpointAddress; - - data[0] = 1; --- -2.5.0 - diff --git a/ALSA-usb-audio-Fix-NULL-dereference-in-create_fixed_.patch b/ALSA-usb-audio-Fix-NULL-dereference-in-create_fixed_.patch deleted file mode 100644 index 37cdb213a..000000000 --- a/ALSA-usb-audio-Fix-NULL-dereference-in-create_fixed_.patch +++ /dev/null @@ -1,40 +0,0 @@ -From b0bb5691b38e2f439b071e226bad9f699c33b77d Mon Sep 17 00:00:00 2001 -From: Takashi Iwai -Date: Tue, 15 Mar 2016 12:09:10 +0100 -Subject: [PATCH 1/2] ALSA: usb-audio: Fix NULL dereference in - create_fixed_stream_quirk() - -create_fixed_stream_quirk() may cause a NULL-pointer dereference by -accessing the non-existing endpoint when a USB device with a malformed -USB descriptor is used. - -This patch avoids it simply by adding a sanity check of bNumEndpoints -before the accesses. - -Bugzilla: https://bugzilla.suse.com/show_bug.cgi?id=971125 -Cc: -Signed-off-by: Takashi Iwai ---- - sound/usb/quirks.c | 6 ++++++ - 1 file changed, 6 insertions(+) - -diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c -index eef9b8e4b949..e128ca62eb44 100644 ---- a/sound/usb/quirks.c -+++ b/sound/usb/quirks.c -@@ -177,6 +177,12 @@ static int create_fixed_stream_quirk(struct snd_usb_audio *chip, - } - alts = &iface->altsetting[fp->altset_idx]; - altsd = get_iface_desc(alts); -+ if (altsd->bNumEndpoints < 1) { -+ kfree(fp); -+ kfree(rate_table); -+ return -EINVAL; -+ } -+ - fp->protocol = altsd->bInterfaceProtocol; - - if (fp->datainterval == 0) --- -2.5.0 - diff --git a/ALSA-usb-audio-Fix-double-free-in-error-paths-after-.patch b/ALSA-usb-audio-Fix-double-free-in-error-paths-after-.patch deleted file mode 100644 index c1c72f9bf..000000000 --- a/ALSA-usb-audio-Fix-double-free-in-error-paths-after-.patch +++ /dev/null @@ -1,100 +0,0 @@ -From 1b9e866417f77622b03f5b9c4e2845133054e670 Mon Sep 17 00:00:00 2001 -From: Vladis Dronov -Date: Thu, 31 Mar 2016 12:05:43 -0400 -Subject: [PATCH 2/2] ALSA: usb-audio: Fix double-free in error paths after - snd_usb_add_audio_stream() call - -create_fixed_stream_quirk(), snd_usb_parse_audio_interface() and -create_uaxx_quirk() functions allocate the audioformat object by themselves -and free it upon error before returning. However, once the object is linked -to a stream, it's freed again in snd_usb_audio_pcm_free(), thus it'll be -double-freed, eventually resulting in a memory corruption. - -This patch fixes these failures in the error paths by unlinking the audioformat -object before freeing it. - -Based on a patch by Takashi Iwai" - -[Note for stable backports: - this patch requires the commit 902eb7fd1e4a ('ALSA: usb-audio: Minor - code cleanup in create_fixed_stream_quirk()')] - -Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1283358 -Reported-by: Ralf Spenneberg -Cc: # see the note above -Signed-off-by: Vladis Dronov ---- - sound/usb/quirks.c | 4 ++++ - sound/usb/stream.c | 6 +++++- - 2 files changed, 9 insertions(+), 1 deletion(-) - -diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c -index 2f0bbc43f902..6f68ba9bda8a 100644 ---- a/sound/usb/quirks.c -+++ b/sound/usb/quirks.c -@@ -150,6 +150,7 @@ static int create_fixed_stream_quirk(struct snd_usb_audio *chip, - usb_audio_err(chip, "cannot memdup\n"); - return -ENOMEM; - } -+ INIT_LIST_HEAD(&fp->list); - if (fp->nr_rates > MAX_NR_RATES) { - kfree(fp); - return -EINVAL; -@@ -193,6 +194,7 @@ static int create_fixed_stream_quirk(struct snd_usb_audio *chip, - return 0; - - error: -+ list_del(&fp->list); /* unlink for avoiding double-free */ - kfree(fp); - kfree(rate_table); - return err; -@@ -468,6 +470,7 @@ static int create_uaxx_quirk(struct snd_usb_audio *chip, - fp->ep_attr = get_endpoint(alts, 0)->bmAttributes; - fp->datainterval = 0; - fp->maxpacksize = le16_to_cpu(get_endpoint(alts, 0)->wMaxPacketSize); -+ INIT_LIST_HEAD(&fp->list); - - switch (fp->maxpacksize) { - case 0x120: -@@ -491,6 +494,7 @@ static int create_uaxx_quirk(struct snd_usb_audio *chip, - ? SNDRV_PCM_STREAM_CAPTURE : SNDRV_PCM_STREAM_PLAYBACK; - err = snd_usb_add_audio_stream(chip, stream, fp); - if (err < 0) { -+ list_del(&fp->list); /* unlink for avoiding double-free */ - kfree(fp); - return err; - } -diff --git a/sound/usb/stream.c b/sound/usb/stream.c -index 8ee14f2365e7..3b23102230c0 100644 ---- a/sound/usb/stream.c -+++ b/sound/usb/stream.c -@@ -316,7 +316,9 @@ static struct snd_pcm_chmap_elem *convert_chmap(int channels, unsigned int bits, - /* - * add this endpoint to the chip instance. - * if a stream with the same endpoint already exists, append to it. -- * if not, create a new pcm stream. -+ * if not, create a new pcm stream. note, fp is added to the substream -+ * fmt_list and will be freed on the chip instance release. do not free -+ * fp or do remove it from the substream fmt_list to avoid double-free. - */ - int snd_usb_add_audio_stream(struct snd_usb_audio *chip, - int stream, -@@ -677,6 +679,7 @@ int snd_usb_parse_audio_interface(struct snd_usb_audio *chip, int iface_no) - * (fp->maxpacksize & 0x7ff); - fp->attributes = parse_uac_endpoint_attributes(chip, alts, protocol, iface_no); - fp->clock = clock; -+ INIT_LIST_HEAD(&fp->list); - - /* some quirks for attributes here */ - -@@ -725,6 +728,7 @@ int snd_usb_parse_audio_interface(struct snd_usb_audio *chip, int iface_no) - dev_dbg(&dev->dev, "%u:%d: add audio endpoint %#x\n", iface_no, altno, fp->endpoint); - err = snd_usb_add_audio_stream(chip, stream, fp); - if (err < 0) { -+ list_del(&fp->list); /* unlink for avoiding double-free */ - kfree(fp->rate_table); - kfree(fp->chmap); - kfree(fp); --- -2.5.5 - diff --git a/ALSA-usb-audio-Minor-code-cleanup-in-create_fixed_st.patch b/ALSA-usb-audio-Minor-code-cleanup-in-create_fixed_st.patch deleted file mode 100644 index 65f88553b..000000000 --- a/ALSA-usb-audio-Minor-code-cleanup-in-create_fixed_st.patch +++ /dev/null @@ -1,62 +0,0 @@ -From aa6c68ed429ba354b904554d396326bfd9ab96bf Mon Sep 17 00:00:00 2001 -From: Takashi Iwai -Date: Tue, 15 Mar 2016 12:14:49 +0100 -Subject: [PATCH 1/2] ALSA: usb-audio: Minor code cleanup in - create_fixed_stream_quirk() - -Just a minor code cleanup: unify the error paths. - -Signed-off-by: Takashi Iwai ---- - sound/usb/quirks.c | 22 +++++++++++----------- - 1 file changed, 11 insertions(+), 11 deletions(-) - -diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c -index f2e4eebdf76d..2f0bbc43f902 100644 ---- a/sound/usb/quirks.c -+++ b/sound/usb/quirks.c -@@ -167,23 +167,18 @@ static int create_fixed_stream_quirk(struct snd_usb_audio *chip, - stream = (fp->endpoint & USB_DIR_IN) - ? SNDRV_PCM_STREAM_CAPTURE : SNDRV_PCM_STREAM_PLAYBACK; - err = snd_usb_add_audio_stream(chip, stream, fp); -- if (err < 0) { -- kfree(fp); -- kfree(rate_table); -- return err; -- } -+ if (err < 0) -+ goto error; - if (fp->iface != get_iface_desc(&iface->altsetting[0])->bInterfaceNumber || - fp->altset_idx >= iface->num_altsetting) { -- kfree(fp); -- kfree(rate_table); -- return -EINVAL; -+ err = -EINVAL; -+ goto error; - } - alts = &iface->altsetting[fp->altset_idx]; - altsd = get_iface_desc(alts); - if (altsd->bNumEndpoints < 1) { -- kfree(fp); -- kfree(rate_table); -- return -EINVAL; -+ err = -EINVAL; -+ goto error; - } - - fp->protocol = altsd->bInterfaceProtocol; -@@ -196,6 +191,11 @@ static int create_fixed_stream_quirk(struct snd_usb_audio *chip, - snd_usb_init_pitch(chip, fp->iface, alts, fp); - snd_usb_init_sample_rate(chip, fp->iface, alts, fp, fp->rate_max); - return 0; -+ -+ error: -+ kfree(fp); -+ kfree(rate_table); -+ return err; - } - - static int create_auto_pcm_quirk(struct snd_usb_audio *chip, --- -2.5.5 - diff --git a/Input-ati_remote2-fix-crashes-on-detecting-device-wi.patch b/Input-ati_remote2-fix-crashes-on-detecting-device-wi.patch deleted file mode 100644 index c7a461de8..000000000 --- a/Input-ati_remote2-fix-crashes-on-detecting-device-wi.patch +++ /dev/null @@ -1,107 +0,0 @@ -From 0f8536022831faaba3a952fa633902d9686f535f Mon Sep 17 00:00:00 2001 -From: Vladis Dronov -Date: Wed, 23 Mar 2016 15:53:07 -0400 -Subject: [PATCH] Input: ati_remote2: fix crashes on detecting device with - invalid descriptor - -The ati_remote2 driver expects at least two interfaces with one -endpoint each. If given malicious descriptor that specify one -interface or no endpoints, it will crash in the probe function. -Ensure there is at least two interfaces and one endpoint for each -interface before using it. - -The full disclosure: http://seclists.org/bugtraq/2016/Mar/90 - -Reported-by: Ralf Spenneberg -Signed-off-by: Vladis Dronov ---- - drivers/input/misc/ati_remote2.c | 36 ++++++++++++++++++++++++++++++------ - 1 file changed, 30 insertions(+), 6 deletions(-) - -diff --git a/drivers/input/misc/ati_remote2.c b/drivers/input/misc/ati_remote2.c -index cfd58e87da26..cf5d1e8d92c7 100644 ---- a/drivers/input/misc/ati_remote2.c -+++ b/drivers/input/misc/ati_remote2.c -@@ -817,26 +817,49 @@ static int ati_remote2_probe(struct usb_interface *interface, const struct usb_d - - ar2->udev = udev; - -+ /* Sanity check, first interface must have an endpoint */ -+ if ((alt->desc.bNumEndpoints < 1) || !alt->endpoint) { -+ dev_err(&interface->dev, -+ "%s(): interface 0 must have an endpoint\n", __func__); -+ r = -ENODEV; -+ goto fail1; -+ } - ar2->intf[0] = interface; - ar2->ep[0] = &alt->endpoint[0].desc; - -+ /* Sanity check, the device must have two interfaces */ - ar2->intf[1] = usb_ifnum_to_if(udev, 1); -+ if ((udev->actconfig->desc.bNumInterfaces < 2) || !ar2->intf[1]) { -+ dev_err(&interface->dev, "%s(): need 2 interfaces, found %d\n", -+ __func__, udev->actconfig->desc.bNumInterfaces); -+ r = -ENODEV; -+ goto fail1; -+ } -+ - r = usb_driver_claim_interface(&ati_remote2_driver, ar2->intf[1], ar2); - if (r) - goto fail1; -+ -+ /* Sanity check, second interface must have an endpoint */ - alt = ar2->intf[1]->cur_altsetting; -+ if ((alt->desc.bNumEndpoints < 1) || !alt->endpoint) { -+ dev_err(&interface->dev, -+ "%s(): interface 1 must have an endpoint\n", __func__); -+ r = -ENODEV; -+ goto fail2; -+ } - ar2->ep[1] = &alt->endpoint[0].desc; - - r = ati_remote2_urb_init(ar2); - if (r) -- goto fail2; -+ goto fail3; - - ar2->channel_mask = channel_mask; - ar2->mode_mask = mode_mask; - - r = ati_remote2_setup(ar2, ar2->channel_mask); - if (r) -- goto fail2; -+ goto fail3; - - usb_make_path(udev, ar2->phys, sizeof(ar2->phys)); - strlcat(ar2->phys, "/input0", sizeof(ar2->phys)); -@@ -845,11 +868,11 @@ static int ati_remote2_probe(struct usb_interface *interface, const struct usb_d - - r = sysfs_create_group(&udev->dev.kobj, &ati_remote2_attr_group); - if (r) -- goto fail2; -+ goto fail3; - - r = ati_remote2_input_init(ar2); - if (r) -- goto fail3; -+ goto fail4; - - usb_set_intfdata(interface, ar2); - -@@ -857,10 +880,11 @@ static int ati_remote2_probe(struct usb_interface *interface, const struct usb_d - - return 0; - -- fail3: -+ fail4: - sysfs_remove_group(&udev->dev.kobj, &ati_remote2_attr_group); -- fail2: -+ fail3: - ati_remote2_urb_cleanup(ar2); -+ fail2: - usb_driver_release_interface(&ati_remote2_driver, ar2->intf[1]); - fail1: - kfree(ar2); --- -2.5.0 - diff --git a/USB-input-powermate-fix-oops-with-malicious-USB-desc.patch b/USB-input-powermate-fix-oops-with-malicious-USB-desc.patch deleted file mode 100644 index 7de890e1b..000000000 --- a/USB-input-powermate-fix-oops-with-malicious-USB-desc.patch +++ /dev/null @@ -1,38 +0,0 @@ -From 0383ff3ba89d3e6c604138e3ba46685621d71f98 Mon Sep 17 00:00:00 2001 -From: Josh Boyer -Date: Mon, 14 Mar 2016 10:02:51 -0400 -Subject: [PATCH] USB: input: powermate: fix oops with malicious USB - descriptors - -The powermate driver expects at least one valid USB endpoint in its -probe function. If given malicious descriptors that specify 0 for -the number of endpoints, it will crash. Validate the number of -endpoints on the interface before using them. - -The full report for this issue can be found here: -http://seclists.org/bugtraq/2016/Mar/85 - -Reported-by: Ralf Spenneberg -Cc: stable -Signed-off-by: Josh Boyer ---- - drivers/input/misc/powermate.c | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/drivers/input/misc/powermate.c b/drivers/input/misc/powermate.c -index 63b539d3daba..84909a12ff36 100644 ---- a/drivers/input/misc/powermate.c -+++ b/drivers/input/misc/powermate.c -@@ -307,6 +307,9 @@ static int powermate_probe(struct usb_interface *intf, const struct usb_device_i - int error = -ENOMEM; - - interface = intf->cur_altsetting; -+ if (interface->desc.bNumEndpoints < 1) -+ return -EINVAL; -+ - endpoint = &interface->endpoint[0].desc; - if (!usb_endpoint_is_int_in(endpoint)) - return -EIO; --- -2.5.0 - diff --git a/USB-iowarrior-fix-oops-with-malicious-USB-descriptor.patch b/USB-iowarrior-fix-oops-with-malicious-USB-descriptor.patch deleted file mode 100644 index 7df3af2b1..000000000 --- a/USB-iowarrior-fix-oops-with-malicious-USB-descriptor.patch +++ /dev/null @@ -1,40 +0,0 @@ -From 3620ebad64a327113bed34edefd45c3605086fc6 Mon Sep 17 00:00:00 2001 -From: Josh Boyer -Date: Mon, 14 Mar 2016 10:38:31 -0400 -Subject: [PATCH] USB: iowarrior: fix oops with malicious USB descriptors - -The iowarrior driver expects at least one valid endpoint. If given -malicious descriptors that specify 0 for the number of endpoints, -it will crash in the probe function. Ensure there is at least -one endpoint on the interface before using it. - -The full report of this issue can be found here: -http://seclists.org/bugtraq/2016/Mar/87 - -Reported-by: Ralf Spenneberg -Cc: stable -Signed-off-by: Josh Boyer ---- - drivers/usb/misc/iowarrior.c | 6 ++++++ - 1 file changed, 6 insertions(+) - -diff --git a/drivers/usb/misc/iowarrior.c b/drivers/usb/misc/iowarrior.c -index c6bfd13f6c92..1950e87b4219 100644 ---- a/drivers/usb/misc/iowarrior.c -+++ b/drivers/usb/misc/iowarrior.c -@@ -787,6 +787,12 @@ static int iowarrior_probe(struct usb_interface *interface, - iface_desc = interface->cur_altsetting; - dev->product_id = le16_to_cpu(udev->descriptor.idProduct); - -+ if (iface_desc->desc.bNumEndpoints < 1) { -+ dev_err(&interface->dev, "Invalid number of endpoints\n"); -+ retval = -EINVAL; -+ goto error; -+ } -+ - /* set up the endpoint information */ - for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) { - endpoint = &iface_desc->endpoint[i].desc; --- -2.5.0 - diff --git a/USB-serial-ftdi_sio-Add-support-for-ICP-DAS-I-756xU-.patch b/USB-serial-ftdi_sio-Add-support-for-ICP-DAS-I-756xU-.patch deleted file mode 100644 index ac8e71c72..000000000 --- a/USB-serial-ftdi_sio-Add-support-for-ICP-DAS-I-756xU-.patch +++ /dev/null @@ -1,59 +0,0 @@ -From 94c78c81df3056e573fb84000a32512e9c16e555 Mon Sep 17 00:00:00 2001 -From: Josh Boyer -Date: Thu, 10 Mar 2016 08:49:02 -0500 -Subject: [PATCH] USB: serial: ftdi_sio: Add support for ICP DAS I-756xU - devices - -A Fedora user reports that the ftdi_sio driver works properly for the -ICP DAS I-7561U device. Further, the user manual for these devices -instructs users to load the driver and add the ids using the sysfs -interface. - -Add support for these in the driver directly so that the devices work -out of the box instead of needing manual configuration. - -Reported-by: -CC: stable -Signed-off-by: Josh Boyer ---- - drivers/usb/serial/ftdi_sio.c | 4 ++++ - drivers/usb/serial/ftdi_sio_ids.h | 8 ++++++++ - 2 files changed, 12 insertions(+) - -diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c -index 8c660ae401d8..b61f12160d37 100644 ---- a/drivers/usb/serial/ftdi_sio.c -+++ b/drivers/usb/serial/ftdi_sio.c -@@ -1004,6 +1004,10 @@ static const struct usb_device_id id_table_combined[] = { - { USB_DEVICE(FTDI_VID, CHETCO_SEASMART_DISPLAY_PID) }, - { USB_DEVICE(FTDI_VID, CHETCO_SEASMART_LITE_PID) }, - { USB_DEVICE(FTDI_VID, CHETCO_SEASMART_ANALOG_PID) }, -+ /* ICP DAS I-756xU devices */ -+ { USB_DEVICE(ICPDAS_VID, ICPDAS_I7560U_PID) }, -+ { USB_DEVICE(ICPDAS_VID, ICPDAS_I7561U_PID) }, -+ { USB_DEVICE(ICPDAS_VID, ICPDAS_I7563U_PID) }, - { } /* Terminating entry */ - }; - -diff --git a/drivers/usb/serial/ftdi_sio_ids.h b/drivers/usb/serial/ftdi_sio_ids.h -index a84df2513994..a4ec24ce6a11 100644 ---- a/drivers/usb/serial/ftdi_sio_ids.h -+++ b/drivers/usb/serial/ftdi_sio_ids.h -@@ -872,6 +872,14 @@ - #define NOVITUS_BONO_E_PID 0x6010 - - /* -+ * ICPDAS I-756*U devices -+ */ -+#define ICPDAS_VID 0x1b5c -+#define ICPDAS_I7560U_PID 0x0103 -+#define ICPDAS_I7561U_PID 0x0104 -+#define ICPDAS_I7563U_PID 0x0105 -+ -+/* - * RT Systems programming cables for various ham radios - */ - #define RTSYSTEMS_VID 0x2100 /* Vendor ID */ --- -2.5.0 - diff --git a/bcm283x-Pull-upstream-fixes-plus-iproc-mmc-driver.patch b/bcm283x-Pull-upstream-fixes-plus-iproc-mmc-driver.patch index 56f2a3981..092e7206a 100644 --- a/bcm283x-Pull-upstream-fixes-plus-iproc-mmc-driver.patch +++ b/bcm283x-Pull-upstream-fixes-plus-iproc-mmc-driver.patch @@ -2288,46 +2288,6 @@ index 6bcf51d..d8b8649 100644 -- 2.7.3 -From d258332b618af0136386d4fb8f738caedae8c71d Mon Sep 17 00:00:00 2001 -From: Dan Carpenter -Date: Tue, 8 Mar 2016 15:09:41 +0300 -Subject: [PATCH 18/36] drm/vc4: Return -EFAULT on copy_from_user() failure - -The copy_from_user() function returns the number of bytes not copied but -we want to return a negative error code. - -Fixes: 463873d57014 ('drm/vc4: Add an API for creating GPU shaders in GEM BOs.') -Cc: stable@vger.kernel.org -Signed-off-by: Dan Carpenter -Reviewed-by: Eric Anholt -Signed-off-by: Eric Anholt ---- - drivers/gpu/drm/vc4/vc4_bo.c | 7 ++++--- - 1 file changed, 4 insertions(+), 3 deletions(-) - -diff --git a/drivers/gpu/drm/vc4/vc4_bo.c b/drivers/gpu/drm/vc4/vc4_bo.c -index 22278bc..ac8eafe 100644 ---- a/drivers/gpu/drm/vc4/vc4_bo.c -+++ b/drivers/gpu/drm/vc4/vc4_bo.c -@@ -499,11 +499,12 @@ vc4_create_shader_bo_ioctl(struct drm_device *dev, void *data, - if (IS_ERR(bo)) - return PTR_ERR(bo); - -- ret = copy_from_user(bo->base.vaddr, -+ if (copy_from_user(bo->base.vaddr, - (void __user *)(uintptr_t)args->data, -- args->size); -- if (ret != 0) -+ args->size)) { -+ ret = -EFAULT; - goto fail; -+ } - /* Clear the rest of the memory from allocating from the BO - * cache. - */ --- -2.7.3 - From ed6836e411dd559a811dd063509a01772f4fe00f Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Fri, 4 Mar 2016 12:32:07 -0800 @@ -2361,54 +2321,6 @@ index 31de5d1..e6d3c60 100644 -- 2.7.3 -From 142ad4bd29558b85f269a02b74c5149b514acf88 Mon Sep 17 00:00:00 2001 -From: Eric Anholt -Date: Mon, 15 Feb 2016 19:03:57 -0800 -Subject: [PATCH 20/36] clk: bcm2835: Fix setting of PLL divider clock rates - -Our dividers weren't being set successfully because CM_PASSWORD wasn't -included in the register write. It looks easier to just compute the -divider to write ourselves than to update clk-divider for the ability -to OR in some arbitrary bits on write. - -Fixes about half of the video modes on my HDMI monitor (everything -except 720x400). - -Cc: stable@vger.kernel.org -Signed-off-by: Eric Anholt -Signed-off-by: Michael Turquette ---- - drivers/clk/bcm/clk-bcm2835.c | 12 +++++++----- - 1 file changed, 7 insertions(+), 5 deletions(-) - -diff --git a/drivers/clk/bcm/clk-bcm2835.c b/drivers/clk/bcm/clk-bcm2835.c -index 015e687..9f4df8f 100644 ---- a/drivers/clk/bcm/clk-bcm2835.c -+++ b/drivers/clk/bcm/clk-bcm2835.c -@@ -1107,13 +1107,15 @@ static int bcm2835_pll_divider_set_rate(struct clk_hw *hw, - struct bcm2835_pll_divider *divider = bcm2835_pll_divider_from_hw(hw); - struct bcm2835_cprman *cprman = divider->cprman; - const struct bcm2835_pll_divider_data *data = divider->data; -- u32 cm; -- int ret; -+ u32 cm, div, max_div = 1 << A2W_PLL_DIV_BITS; - -- ret = clk_divider_ops.set_rate(hw, rate, parent_rate); -- if (ret) -- return ret; -+ div = DIV_ROUND_UP_ULL(parent_rate, rate); -+ -+ div = min(div, max_div); -+ if (div == max_div) -+ div = 0; - -+ cprman_write(cprman, data->a2w_reg, div); - cm = cprman_read(cprman, data->cm_reg); - cprman_write(cprman, data->cm_reg, cm | data->load_mask); - cprman_write(cprman, data->cm_reg, cm & ~data->load_mask); --- -2.7.3 - From 55acd7db60c8247d926969b705373765c26c1f44 Mon Sep 17 00:00:00 2001 From: Martin Sperl Date: Fri, 11 Sep 2015 11:22:05 +0000 diff --git a/cdc-acm-more-sanity-checking.patch b/cdc-acm-more-sanity-checking.patch deleted file mode 100644 index 99ad43416..000000000 --- a/cdc-acm-more-sanity-checking.patch +++ /dev/null @@ -1,33 +0,0 @@ -From e6a87f147002fa16adcbafebbc458ff90a463474 Mon Sep 17 00:00:00 2001 -From: Oliver Neukum -Date: Tue, 15 Mar 2016 10:14:04 +0100 -Subject: [PATCH] cdc-acm: more sanity checking - -An attack has become available which pretends to be a quirky -device circumventing normal sanity checks and crashes the kernel -by an insufficient number of interfaces. This patch adds a check -to the code path for quirky devices. - -Signed-off-by: Oliver Neukum -CC: stable@vger.kernel.org ---- - drivers/usb/class/cdc-acm.c | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c -index 26ca4f910cb0..a7732f80a912 100644 ---- a/drivers/usb/class/cdc-acm.c -+++ b/drivers/usb/class/cdc-acm.c -@@ -1113,6 +1113,9 @@ static int acm_probe(struct usb_interface *intf, - if (quirks == NO_UNION_NORMAL) { - data_interface = usb_ifnum_to_if(usb_dev, 1); - control_interface = usb_ifnum_to_if(usb_dev, 0); -+ /* we would crash */ -+ if (!data_interface || !control_interface) -+ return -ENODEV; - goto skip_normal_probe; - } - --- -2.5.0 - diff --git a/cypress_m8-add-sanity-checking.patch b/cypress_m8-add-sanity-checking.patch deleted file mode 100644 index fa8513f94..000000000 --- a/cypress_m8-add-sanity-checking.patch +++ /dev/null @@ -1,50 +0,0 @@ -From f7a3aa353011e38e119adebd845b38551587a26a Mon Sep 17 00:00:00 2001 -From: Oliver Neukum -Date: Thu, 17 Mar 2016 16:25:33 +0100 -Subject: [PATCH] cypress_m8: add sanity checking - -An attack using missing endpoints exists. -CVE-2016-3137 - -Signed-off-by: Oliver Neukum -CC: stable@vger.kernel.org - -v1 - add sanity check -v2 - add error logging -v3 - correct error message ---- - drivers/usb/serial/cypress_m8.c | 11 +++++------ - 1 file changed, 5 insertions(+), 6 deletions(-) - -diff --git a/drivers/usb/serial/cypress_m8.c b/drivers/usb/serial/cypress_m8.c -index 01bf53392819..5e25443fe4ef 100644 ---- a/drivers/usb/serial/cypress_m8.c -+++ b/drivers/usb/serial/cypress_m8.c -@@ -447,6 +447,11 @@ static int cypress_generic_port_probe(struct usb_serial_port *port) - struct usb_serial *serial = port->serial; - struct cypress_private *priv; - -+ if (!port->interrupt_out_urb || !port->interrupt_in_urb) { -+ dev_err(&port->dev, "A required endpoint is missing\n"); -+ return -ENODEV; -+ } -+ - priv = kzalloc(sizeof(struct cypress_private), GFP_KERNEL); - if (!priv) - return -ENOMEM; -@@ -606,12 +611,6 @@ static int cypress_open(struct tty_struct *tty, struct usb_serial_port *port) - cypress_set_termios(tty, port, &priv->tmp_termios); - - /* setup the port and start reading from the device */ -- if (!port->interrupt_in_urb) { -- dev_err(&port->dev, "%s - interrupt_in_urb is empty!\n", -- __func__); -- return -1; -- } -- - usb_fill_int_urb(port->interrupt_in_urb, serial->dev, - usb_rcvintpipe(serial->dev, port->interrupt_in_endpointAddress), - port->interrupt_in_urb->transfer_buffer, --- -2.5.0 - diff --git a/digi_acceleport-do-sanity-checking-for-the-number-of.patch b/digi_acceleport-do-sanity-checking-for-the-number-of.patch deleted file mode 100644 index eb060eb08..000000000 --- a/digi_acceleport-do-sanity-checking-for-the-number-of.patch +++ /dev/null @@ -1,70 +0,0 @@ -From e9c2a3972496927631a1a98fef43e9538e9fd5d5 Mon Sep 17 00:00:00 2001 -From: Oliver Neukum -Date: Mon, 14 Mar 2016 15:53:38 +0100 -Subject: [PATCH v2] digi_acceleport: do sanity checking for the number of ports - -The driver can be crashed with devices that expose crafted -descriptors with too few endpoints. -See: -http://seclists.org/bugtraq/2016/Mar/61 - -Signed-off-by: Oliver Neukum - -v1 - added sanity checks -v2 - moved them to probe() to fix problems Johan pointed out ---- - drivers/usb/serial/digi_acceleport.c | 24 +++++++++++++++++++----- - 1 file changed, 19 insertions(+), 5 deletions(-) - -diff --git a/drivers/usb/serial/digi_acceleport.c b/drivers/usb/serial/digi_acceleport.c -index 12b0e67..dab1dcf 100644 ---- a/drivers/usb/serial/digi_acceleport.c -+++ b/drivers/usb/serial/digi_acceleport.c -@@ -1252,7 +1252,8 @@ static int digi_port_init(struct usb_serial_port *port, unsigned port_num) - static int digi_startup(struct usb_serial *serial) - { - struct digi_serial *serial_priv; -- int ret; -+ int ret = -ENODEV; -+ int i; - - serial_priv = kzalloc(sizeof(*serial_priv), GFP_KERNEL); - if (!serial_priv) -@@ -1260,18 +1261,31 @@ static int digi_startup(struct usb_serial *serial) - - spin_lock_init(&serial_priv->ds_serial_lock); - serial_priv->ds_oob_port_num = serial->type->num_ports; -+ -+ /* Check whether the expected number of ports matches the device */ -+ if (serial->num_ports < serial_priv->ds_oob_port_num) -+ goto error; -+ /* all features must be present */ -+ for (i = 0; i < serial->type->num_ports + 1 ; i++) { -+ if (!serial->port[i]->read_urb) -+ goto error; -+ if (!serial->port[i]->write_urb) -+ goto error; -+ } -+ - serial_priv->ds_oob_port = serial->port[serial_priv->ds_oob_port_num]; - - ret = digi_port_init(serial_priv->ds_oob_port, - serial_priv->ds_oob_port_num); -- if (ret) { -- kfree(serial_priv); -- return ret; -- } -+ if (ret) -+ goto error; - - usb_set_serial_data(serial, serial_priv); - - return 0; -+error: -+ kfree(serial_priv); -+ return ret; - } - - --- -2.1.4 diff --git a/ims-pcu-sanity-check-against-missing-interfaces.patch b/ims-pcu-sanity-check-against-missing-interfaces.patch deleted file mode 100644 index 827a2b7ee..000000000 --- a/ims-pcu-sanity-check-against-missing-interfaces.patch +++ /dev/null @@ -1,39 +0,0 @@ -From a4200b7eb26271108586d3a7cf34a2f16d460e48 Mon Sep 17 00:00:00 2001 -From: Oliver Neukum -Date: Thu, 17 Mar 2016 15:10:47 +0100 -Subject: [PATCH] ims-pcu: sanity check against missing interfaces - -A malicious device missing interface can make the driver oops. -Add sanity checking. - -Signed-off-by: Oliver Neukum -CC: stable@vger.kernel.org ---- - drivers/input/misc/ims-pcu.c | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/drivers/input/misc/ims-pcu.c b/drivers/input/misc/ims-pcu.c -index ac1fa5f44580..9c0ea36913b4 100644 ---- a/drivers/input/misc/ims-pcu.c -+++ b/drivers/input/misc/ims-pcu.c -@@ -1663,6 +1663,8 @@ static int ims_pcu_parse_cdc_data(struct usb_interface *intf, struct ims_pcu *pc - - pcu->ctrl_intf = usb_ifnum_to_if(pcu->udev, - union_desc->bMasterInterface0); -+ if (!pcu->ctrl_intf) -+ return -EINVAL; - - alt = pcu->ctrl_intf->cur_altsetting; - pcu->ep_ctrl = &alt->endpoint[0].desc; -@@ -1670,6 +1672,8 @@ static int ims_pcu_parse_cdc_data(struct usb_interface *intf, struct ims_pcu *pc - - pcu->data_intf = usb_ifnum_to_if(pcu->udev, - union_desc->bSlaveInterface0); -+ if (!pcu->data_intf) -+ return -EINVAL; - - alt = pcu->data_intf->cur_altsetting; - if (alt->desc.bNumEndpoints != 2) { --- -2.5.0 - diff --git a/kernel.spec b/kernel.spec index d166d8878..a4bb22304 100644 --- a/kernel.spec +++ b/kernel.spec @@ -42,7 +42,7 @@ Summary: The Linux kernel # For non-released -rc kernels, this will be appended after the rcX and # gitX tags, so a 3 here would become part of release "0.rcX.gitX.3" # -%global baserelease 302 +%global baserelease 300 %global fedora_build %{baserelease} # base_sublevel is the kernel version we're starting with and patching @@ -54,7 +54,7 @@ Summary: The Linux kernel %if 0%{?released_kernel} # Do we have a -stable update to apply? -%define stable_update 0 +%define stable_update 1 # Set rpm version accordingly %if 0%{?stable_update} %define stablerev %{stable_update} @@ -496,7 +496,6 @@ Source5005: kbuild-AFTER_LINK.patch # Git trees. # Standalone patches - Patch420: arm64-avoid-needing-console-to-enable-serial-console.patch Patch421: arm64-acpi-drop-expert-patch.patch @@ -629,12 +628,6 @@ Patch646: HID-sony-do-not-bail-out-when-the-sixaxis-refuses-th.patch #rhbz 1309658 Patch648: 0001-mm-CONFIG_NR_ZONES_EXTENDED.patch -#rhbz 1312102 -Patch649: perf-tools-Fix-python-extension-build.patch - -#rhbz 1316136 -Patch663: USB-serial-ftdi_sio-Add-support-for-ICP-DAS-I-756xU-.patch - #CVE-2016-3135 rhbz 1317386 1317387 Patch664: netfilter-x_tables-check-for-size-overflow.patch @@ -644,51 +637,12 @@ Patch665: netfilter-x_tables-deal-with-bogus-nextoffset-values.patch #CVE-2016-3135 rhbz 1318172 1318270 Patch666: ipv4-Dont-do-expensive-useless-work-during-inetdev-des.patch -#CVE-2016-2184 rhbz 1317012 1317470 -Patch670: ALSA-usb-audio-Fix-NULL-dereference-in-create_fixed_.patch -Patch671: ALSA-usb-audio-Add-sanity-checks-for-endpoint-access.patch -Patch667: ALSA-usb-audio-Minor-code-cleanup-in-create_fixed_st.patch -Patch668: ALSA-usb-audio-Fix-double-free-in-error-paths-after-.patch - -#CVE-2016-3137 rhbz 1317010 1316996 -Patch672: cypress_m8-add-sanity-checking.patch - -#CVE-2016-2186 rhbz 1317015 1317464 -Patch673: USB-input-powermate-fix-oops-with-malicious-USB-desc.patch - -#CVE-2016-2188 rhbz 1317018 1317467 -Patch674: USB-iowarrior-fix-oops-with-malicious-USB-descriptor.patch - -#CVE-2016-2185 rhbz 1317014 1317471 -Patch675: usb_driver_claim_interface-add-sanity-checking.patch -Patch669: Input-ati_remote2-fix-crashes-on-detecting-device-wi.patch - -#CVE-2016-3138 rhbz 1317010 1316204 -Patch676: cdc-acm-more-sanity-checking.patch - -#CVE-2016-3140 rhbz 1317010 1316995 -Patch677: digi_acceleport-do-sanity-checking-for-the-number-of.patch - -Patch678: ims-pcu-sanity-check-against-missing-interfaces.patch - #rhbz 1315013 Patch679: 0001-uas-Limit-qdepth-at-the-scsi-host-level.patch -#rhbz 1317190 -Patch680: thermal-fix.patch - -#rhbz 1318079 -Patch681: 0001-Input-synaptics-handle-spurious-release-of-trackstic.patch - #CVE-2016-2187 rhbz 1317017 1317010 Patch686: input-gtco-fix-crash-on-detecting-device-without-end.patch -#CVE-2016-3136 rhbz 1317007 1317010 -Patch687: mct_u232-sanity-checking-in-probe.patch - -# CVE-2016-3157 rhbz 1315711 1321948 -Patch688: x86-iopl-64-Properly-context-switch-IOPL-on-Xen-PV.patch - # CVE-2016-3672 rhbz 1324749 1324750 Patch689: x86-mm-32-Enable-full-randomization-on-i386-and-X86_.patch @@ -2216,6 +2170,9 @@ fi # # %changelog +* Tue Apr 12 2016 Justin M. Forbes - 4.5.1-300 +- Linux v4.5.1 + * Tue Apr 12 2016 Josh Boyer - Fix Bamboo ONE issues (rhbz 1317116) diff --git a/mct_u232-sanity-checking-in-probe.patch b/mct_u232-sanity-checking-in-probe.patch deleted file mode 100644 index 006faf15f..000000000 --- a/mct_u232-sanity-checking-in-probe.patch +++ /dev/null @@ -1,35 +0,0 @@ -Subject: [PATCH v2] mct_u232: sanity checking in probe -From: Oliver Neukum -Date: 2016-03-21 13:14:37 - -An attack using the lack of sanity checking in probe -is known. This patch checks for the existance of a -second port. -CVE-2016-3136 - -Signed-off-by: Oliver Neukum -CC: stable@vger.kernel.org - -v1 - add sanity check for presence of a second port -v2 - add sanity check for an interrupt endpoint ---- - drivers/usb/serial/mct_u232.c | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/drivers/usb/serial/mct_u232.c b/drivers/usb/serial/mct_u232.c -index 4446b8d..3e64538 100644 ---- a/drivers/usb/serial/mct_u232.c -+++ b/drivers/usb/serial/mct_u232.c -@@ -378,6 +378,10 @@ static int mct_u232_port_probe(struct usb_serial_port *port) - { - struct mct_u232_private *priv; - -+ /* check first to simplify error handling */ -+ if (!port->serial->port[1] || !port->serial->port[1]->interrupt_in_urb) -+ return -ENODEV; -+ - priv = kzalloc(sizeof(*priv), GFP_KERNEL); - if (!priv) - return -ENOMEM; --- -2.1.4 diff --git a/perf-tools-Fix-python-extension-build.patch b/perf-tools-Fix-python-extension-build.patch deleted file mode 100644 index cdca4a69b..000000000 --- a/perf-tools-Fix-python-extension-build.patch +++ /dev/null @@ -1,71 +0,0 @@ -From 99b0044d511e16fb373df6d8a4e011d4804432c4 Mon Sep 17 00:00:00 2001 -From: Jiri Olsa -Date: Sat, 27 Feb 2016 21:21:12 +0100 -Subject: [PATCH] perf tools: Fix python extension build - -On Fri, Feb 26, 2016 at 11:59:03PM +0100, Jiri Olsa wrote: -> On Fri, Feb 26, 2016 at 05:49:02PM -0500, Josh Boyer wrote: -> -> SNIP -> -> > > ./python_ext_build/tmp/home/jolsa/kernel/linux-perf/tools/perf/util/evsel.o -> > > ./python_ext_build/tmp/home/jolsa/kernel/linux-perf/tools/perf/util/trace-event.o -> > > ./python_ext_build/tmp/home/jolsa/kernel/linux-perf/tools/perf/util/xyarray.o -> > > ./python_ext_build/tmp/home/jolsa/kernel/linux-perf/tools/perf/util/python.o -> > > ./python_ext_build/tmp/home/jolsa/kernel/linux-perf/tools/perf/util/ctype.o -> > > ./python_ext_build/tmp/home/jolsa/kernel/linux-perf/tools/perf/util/cgroup.o -> > > ./python_ext_build/tmp/home/jolsa/kernel/linux-perf/tools/perf/util/rblist.o -> > > ./python_ext_build/tmp/home/jolsa/kernel/linux-perf/tools/perf/util/string.o -> > > ./python_ext_build/tmp/home/jolsa/kernel/linux-perf/tools/lib -> > > ./python_ext_build/tmp/home/jolsa/kernel/linux-perf/tools/lib/hweight.o -> > > ./python_ext_build/tmp/home/jolsa/kernel/linux-perf/tools/lib/rbtree.o -> > > ./python_ext_build/tmp/home/jolsa/kernel/linux-perf/tools/lib/bitmap.o -> > > ./python_ext_build/tmp/home/jolsa/kernel/linux-perf/tools/lib/find_bit.o -> > > -> > > not sure we want to come up with some 'nicer' solution -> > -> > I don't think anything under python_ext_build/tmp/ actually matters in -> > any significant way. As long as this doesn't negatively impact -> > something via side-effect, it's probably good enough. -> -> right, and it's probably generic sollution too -> -> > -> > Will you write up a full patch? -> -> yep, will post it tomorrow -> -> jirka - -sending full patch - -jirka ---- - tools/perf/util/setup.py | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/tools/perf/util/setup.py b/tools/perf/util/setup.py -index 1833103768cb..c8680984d2d6 100644 ---- a/tools/perf/util/setup.py -+++ b/tools/perf/util/setup.py -@@ -22,6 +22,7 @@ cflags = getenv('CFLAGS', '').split() - # switch off several checks (need to be at the end of cflags list) - cflags += ['-fno-strict-aliasing', '-Wno-write-strings', '-Wno-unused-parameter' ] - -+src_perf = getenv('srctree') + '/tools/perf' - build_lib = getenv('PYTHON_EXTBUILD_LIB') - build_tmp = getenv('PYTHON_EXTBUILD_TMP') - libtraceevent = getenv('LIBTRACEEVENT') -@@ -30,6 +31,9 @@ libapikfs = getenv('LIBAPI') - ext_sources = [f.strip() for f in file('util/python-ext-sources') - if len(f.strip()) > 0 and f[0] != '#'] - -+# use full paths with source files -+ext_sources = map(lambda x: '%s/%s' % (src_perf, x) , ext_sources) -+ - perf = Extension('perf', - sources = ext_sources, - include_dirs = ['util/include'], --- -2.5.0 - diff --git a/sources b/sources index 4d9a84fe2..c02933f34 100644 --- a/sources +++ b/sources @@ -1,2 +1,3 @@ a60d48eee08ec0536d5efb17ca819aef linux-4.5.tar.xz 6f557fe90b800b615c85c2ca04da6154 perf-man-4.5.tar.gz +1df9ff0283c1732ebbf7c55f340a121b patch-4.5.1.xz diff --git a/thermal-fix.patch b/thermal-fix.patch deleted file mode 100644 index bca27cfbe..000000000 --- a/thermal-fix.patch +++ /dev/null @@ -1,77 +0,0 @@ -From 81ad4276b505e987dd8ebbdf63605f92cd172b52 Mon Sep 17 00:00:00 2001 -From: Zhang Rui -Date: Fri, 18 Mar 2016 10:03:24 +0800 -Subject: [PATCH] Thermal: Ignore invalid trip points - -In some cases, platform thermal driver may report invalid trip points, -thermal core should not take any action for these trip points. - -CC: #3.18+ -Link: https://bugzilla.redhat.com/show_bug.cgi?id=1317190 -Link: https://bugzilla.kernel.org/show_bug.cgi?id=114551 -Signed-off-by: Zhang Rui ---- - drivers/thermal/thermal_core.c | 13 ++++++++++++- - include/linux/thermal.h | 2 ++ - 2 files changed, 14 insertions(+), 1 deletion(-) - -diff --git a/drivers/thermal/thermal_core.c b/drivers/thermal/thermal_core.c -index a0a8fd1..d4b5465 100644 ---- a/drivers/thermal/thermal_core.c -+++ b/drivers/thermal/thermal_core.c -@@ -454,6 +454,10 @@ static void handle_thermal_trip(struct thermal_zone_device *tz, int trip) - { - enum thermal_trip_type type; - -+ /* Ignore disabled trip points */ -+ if (test_bit(trip, &tz->trips_disabled)) -+ return; -+ - tz->ops->get_trip_type(tz, trip, &type); - - if (type == THERMAL_TRIP_CRITICAL || type == THERMAL_TRIP_HOT) -@@ -1800,6 +1804,7 @@ struct thermal_zone_device *thermal_zone_device_register(const char *type, - { - struct thermal_zone_device *tz; - enum thermal_trip_type trip_type; -+ int trip_temp; - int result; - int count; - int passive = 0; -@@ -1871,9 +1876,15 @@ struct thermal_zone_device *thermal_zone_device_register(const char *type, - goto unregister; - - for (count = 0; count < trips; count++) { -- tz->ops->get_trip_type(tz, count, &trip_type); -+ if (tz->ops->get_trip_type(tz, count, &trip_type)) -+ set_bit(count, &tz->trips_disabled); - if (trip_type == THERMAL_TRIP_PASSIVE) - passive = 1; -+ if (tz->ops->get_trip_temp(tz, count, &trip_temp)) -+ set_bit(count, &tz->trips_disabled); -+ /* Check for bogus trip points */ -+ if (trip_temp == 0) -+ set_bit(count, &tz->trips_disabled); - } - - if (!passive) { -diff --git a/include/linux/thermal.h b/include/linux/thermal.h -index 9c48199..a55d052 100644 ---- a/include/linux/thermal.h -+++ b/include/linux/thermal.h -@@ -156,6 +156,7 @@ struct thermal_attr { - * @trip_hyst_attrs: attributes for trip points for sysfs: trip hysteresis - * @devdata: private pointer for device private data - * @trips: number of trip points the thermal zone supports -+ * @trips_disabled; bitmap for disabled trips - * @passive_delay: number of milliseconds to wait between polls when - * performing passive cooling. - * @polling_delay: number of milliseconds to wait between polls when -@@ -191,6 +192,7 @@ struct thermal_zone_device { - struct thermal_attr *trip_hyst_attrs; - void *devdata; - int trips; -+ unsigned long trips_disabled; /* bitmap for disabled trips */ - int passive_delay; - int polling_delay; - int temperature; diff --git a/usb_driver_claim_interface-add-sanity-checking.patch b/usb_driver_claim_interface-add-sanity-checking.patch deleted file mode 100644 index 079ff03fd..000000000 --- a/usb_driver_claim_interface-add-sanity-checking.patch +++ /dev/null @@ -1,39 +0,0 @@ -From de0784bdf6314b70c69416d8c576eb83237d5b1e Mon Sep 17 00:00:00 2001 -From: Oliver Neukum -Date: Wed, 16 Mar 2016 12:26:17 -0400 -Subject: [PATCH] usb_driver_claim_interface: add sanity checking - -Attacks that trick drivers into passing a NULL pointer -to usb_driver_claim_interface() using forged descriptors are -known. This thwarts them by sanity checking. - -Signed-off-by: Oliver Neukum -CC: stable@vger.kernel.org ---- - drivers/usb/core/driver.c | 6 +++++- - 1 file changed, 5 insertions(+), 1 deletion(-) - -diff --git a/drivers/usb/core/driver.c b/drivers/usb/core/driver.c -index 6b5063e7943f..e2d242b68d4b 100644 ---- a/drivers/usb/core/driver.c -+++ b/drivers/usb/core/driver.c -@@ -500,11 +500,15 @@ static int usb_unbind_interface(struct device *dev) - int usb_driver_claim_interface(struct usb_driver *driver, - struct usb_interface *iface, void *priv) - { -- struct device *dev = &iface->dev; -+ struct device *dev; - struct usb_device *udev; - int retval = 0; - int lpm_disable_error; - -+ if (!iface) -+ return -ENODEV; -+ -+ dev = &iface->dev; - if (dev->driver) - return -EBUSY; - --- -2.5.0 - diff --git a/x86-Lock-down-IO-port-access-when-module-security-is.patch b/x86-Lock-down-IO-port-access-when-module-security-is.patch index 708006c2e..31126f89d 100644 --- a/x86-Lock-down-IO-port-access-when-module-security-is.patch +++ b/x86-Lock-down-IO-port-access-when-module-security-is.patch @@ -44,7 +44,7 @@ index 37dae792dbbe..1ecc03ca3c15 100644 + if (!capable(CAP_SYS_RAWIO) || secure_modules()) return -EPERM; } - regs->flags = (regs->flags & ~X86_EFLAGS_IOPL) | (level << 12); + regs->flags = (regs->flags & ~X86_EFLAGS_IOPL) | diff --git a/drivers/char/mem.c b/drivers/char/mem.c index 6b1721f978c2..53fe675f9bd7 100644 --- a/drivers/char/mem.c diff --git a/x86-iopl-64-Properly-context-switch-IOPL-on-Xen-PV.patch b/x86-iopl-64-Properly-context-switch-IOPL-on-Xen-PV.patch deleted file mode 100644 index 38f7bfbb0..000000000 --- a/x86-iopl-64-Properly-context-switch-IOPL-on-Xen-PV.patch +++ /dev/null @@ -1,96 +0,0 @@ -From b7a584598aea7ca73140cb87b40319944dd3393f Mon Sep 17 00:00:00 2001 -From: Andy Lutomirski -Date: Wed, 16 Mar 2016 14:14:21 -0700 -Subject: [PATCH] x86/iopl/64: Properly context-switch IOPL on Xen PV - -On Xen PV, regs->flags doesn't reliably reflect IOPL and the -exit-to-userspace code doesn't change IOPL. We need to context -switch it manually. - -I'm doing this without going through paravirt because this is -specific to Xen PV. After the dust settles, we can merge this with -the 32-bit code, tidy up the iopl syscall implementation, and remove -the set_iopl pvop entirely. - -Fixes XSA-171. - -Reviewewd-by: Jan Beulich -Signed-off-by: Andy Lutomirski -Cc: Andrew Cooper -Cc: Andy Lutomirski -Cc: Boris Ostrovsky -Cc: Borislav Petkov -Cc: Brian Gerst -Cc: David Vrabel -Cc: Denys Vlasenko -Cc: H. Peter Anvin -Cc: Jan Beulich -Cc: Linus Torvalds -Cc: Peter Zijlstra -Cc: Thomas Gleixner -Cc: stable@vger.kernel.org -Link: http://lkml.kernel.org/r/693c3bd7aeb4d3c27c92c622b7d0f554a458173c.1458162709.git.luto@kernel.org -Signed-off-by: Ingo Molnar ---- - arch/x86/include/asm/xen/hypervisor.h | 2 ++ - arch/x86/kernel/process_64.c | 12 ++++++++++++ - arch/x86/xen/enlighten.c | 2 +- - 3 files changed, 15 insertions(+), 1 deletion(-) - -diff --git a/arch/x86/include/asm/xen/hypervisor.h b/arch/x86/include/asm/xen/hypervisor.h -index 8b2d4bea9962..39171b3646bb 100644 ---- a/arch/x86/include/asm/xen/hypervisor.h -+++ b/arch/x86/include/asm/xen/hypervisor.h -@@ -62,4 +62,6 @@ void xen_arch_register_cpu(int num); - void xen_arch_unregister_cpu(int num); - #endif - -+extern void xen_set_iopl_mask(unsigned mask); -+ - #endif /* _ASM_X86_XEN_HYPERVISOR_H */ -diff --git a/arch/x86/kernel/process_64.c b/arch/x86/kernel/process_64.c -index b9d99e0f82c4..9f751876066f 100644 ---- a/arch/x86/kernel/process_64.c -+++ b/arch/x86/kernel/process_64.c -@@ -48,6 +48,7 @@ - #include - #include - #include -+#include - - asmlinkage extern void ret_from_fork(void); - -@@ -411,6 +412,17 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p) - task_thread_info(prev_p)->flags & _TIF_WORK_CTXSW_PREV)) - __switch_to_xtra(prev_p, next_p, tss); - -+#ifdef CONFIG_XEN -+ /* -+ * On Xen PV, IOPL bits in pt_regs->flags have no effect, and -+ * current_pt_regs()->flags may not match the current task's -+ * intended IOPL. We need to switch it manually. -+ */ -+ if (unlikely(static_cpu_has(X86_FEATURE_XENPV) && -+ prev->iopl != next->iopl)) -+ xen_set_iopl_mask(next->iopl); -+#endif -+ - if (static_cpu_has_bug(X86_BUG_SYSRET_SS_ATTRS)) { - /* - * AMD CPUs have a misfeature: SYSRET sets the SS selector but -diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c -index 2c261082eadf..8381fb990c7f 100644 ---- a/arch/x86/xen/enlighten.c -+++ b/arch/x86/xen/enlighten.c -@@ -961,7 +961,7 @@ static void xen_load_sp0(struct tss_struct *tss, - tss->x86_tss.sp0 = thread->sp0; - } - --static void xen_set_iopl_mask(unsigned mask) -+void xen_set_iopl_mask(unsigned mask) - { - struct physdev_set_iopl set_iopl; - --- -2.5.5 - From 74fed5240fa1461747a62be7951bd181455fbf55 Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Wed, 13 Apr 2016 13:25:07 -0500 Subject: [PATCH 047/275] Add CONFIG_DW_DMAC_CORE to rebase notes --- rebase-notes.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/rebase-notes.txt b/rebase-notes.txt index 0b077dd37..0d7d76f2d 100644 --- a/rebase-notes.txt +++ b/rebase-notes.txt @@ -2,6 +2,7 @@ Linux 4.5 rebase notes: - Check on status of drm-i915-turn-off-wc-mmaps.patch - Check on status of disabled ZONE_DMA +- Check on status of CONFIG_DW_DMAC_CORE Linux 4.4 rebase notes: From 7fc022462f3613968b27fb98ad2c410238961ab5 Mon Sep 17 00:00:00 2001 From: Laura Abbott Date: Thu, 14 Apr 2016 06:59:53 -0700 Subject: [PATCH 048/275] Fix for Skylake pstate issues (rhbz 1309980) --- ...equest-native-thermal-interrupt-hand.patch | 169 ++++++++++++++++++ kernel.spec | 6 + 2 files changed, 175 insertions(+) create mode 100644 0001-ACPI-processor-Request-native-thermal-interrupt-hand.patch diff --git a/0001-ACPI-processor-Request-native-thermal-interrupt-hand.patch b/0001-ACPI-processor-Request-native-thermal-interrupt-hand.patch new file mode 100644 index 000000000..a76603900 --- /dev/null +++ b/0001-ACPI-processor-Request-native-thermal-interrupt-hand.patch @@ -0,0 +1,169 @@ +From a21211672c9a1d730a39aa65d4a5b3414700adfb Mon Sep 17 00:00:00 2001 +From: Srinivas Pandruvada +Date: Wed, 23 Mar 2016 21:07:39 -0700 +Subject: [PATCH] ACPI / processor: Request native thermal interrupt handling + via _OSC + +There are several reports of freeze on enabling HWP (Hardware PStates) +feature on Skylake-based systems by the Intel P-states driver. The root +cause is identified as the HWP interrupts causing BIOS code to freeze. + +HWP interrupts use the thermal LVT which can be handled by Linux +natively, but on the affected Skylake-based systems SMM will respond +to it by default. This is a problem for several reasons: + - On the affected systems the SMM thermal LVT handler is broken (it + will crash when invoked) and a BIOS update is necessary to fix it. + - With thermal interrupt handled in SMM we lose all of the reporting + features of the arch/x86/kernel/cpu/mcheck/therm_throt driver. + - Some thermal drivers like x86-package-temp depend on the thermal + threshold interrupts signaled via the thermal LVT. + - The HWP interrupts are useful for debugging and tuning + performance (if the kernel can handle them). +The native handling of thermal interrupts needs to be enabled +because of that. + +This requires some way to tell SMM that the OS can handle thermal +interrupts. That can be done by using _OSC/_PDC in processor +scope very early during ACPI initialization. + +The meaning of _OSC/_PDC bit 12 in processor scope is whether or +not the OS supports native handling of interrupts for Collaborative +Processor Performance Control (CPPC) notifications. Since on +HWP-capable systems CPPC is a firmware interface to HWP, setting +this bit effectively tells the firmware that the OS will handle +thermal interrupts natively going forward. + +For details on _OSC/_PDC refer to: +http://www.intel.com/content/www/us/en/standards/processor-vendor-specific-acpi-specification.html + +To implement the _OSC/_PDC handshake as described, introduce a new +function, acpi_early_processor_osc(), that walks the ACPI +namespace looking for ACPI processor objects and invokes _OSC for +them with bit 12 in the capabilities buffer set and terminates the +namespace walk on the first success. + +Also modify intel_thermal_interrupt() to clear HWP status bits in +the HWP_STATUS MSR to acknowledge HWP interrupts (which prevents +them from firing continuously). + +Signed-off-by: Srinivas Pandruvada +[ rjw: Subject & changelog, function rename ] +Signed-off-by: Rafael J. Wysocki +--- + arch/x86/kernel/cpu/mcheck/therm_throt.c | 3 ++ + drivers/acpi/acpi_processor.c | 52 ++++++++++++++++++++++++++++++++ + drivers/acpi/bus.c | 3 ++ + drivers/acpi/internal.h | 6 ++++ + 4 files changed, 64 insertions(+) + +diff --git a/arch/x86/kernel/cpu/mcheck/therm_throt.c b/arch/x86/kernel/cpu/mcheck/therm_throt.c +index 2c5aaf8..0553858 100644 +--- a/arch/x86/kernel/cpu/mcheck/therm_throt.c ++++ b/arch/x86/kernel/cpu/mcheck/therm_throt.c +@@ -385,6 +385,9 @@ static void intel_thermal_interrupt(void) + { + __u64 msr_val; + ++ if (static_cpu_has(X86_FEATURE_HWP)) ++ wrmsrl_safe(MSR_HWP_STATUS, 0); ++ + rdmsrl(MSR_IA32_THERM_STATUS, msr_val); + + /* Check for violation of core thermal thresholds*/ +diff --git a/drivers/acpi/acpi_processor.c b/drivers/acpi/acpi_processor.c +index b5e54f2..0d92d0f 100644 +--- a/drivers/acpi/acpi_processor.c ++++ b/drivers/acpi/acpi_processor.c +@@ -491,6 +491,58 @@ static void acpi_processor_remove(struct acpi_device *device) + } + #endif /* CONFIG_ACPI_HOTPLUG_CPU */ + ++#ifdef CONFIG_X86 ++static bool acpi_hwp_native_thermal_lvt_set; ++static acpi_status __init acpi_hwp_native_thermal_lvt_osc(acpi_handle handle, ++ u32 lvl, ++ void *context, ++ void **rv) ++{ ++ u8 sb_uuid_str[] = "4077A616-290C-47BE-9EBD-D87058713953"; ++ u32 capbuf[2]; ++ struct acpi_osc_context osc_context = { ++ .uuid_str = sb_uuid_str, ++ .rev = 1, ++ .cap.length = 8, ++ .cap.pointer = capbuf, ++ }; ++ ++ if (acpi_hwp_native_thermal_lvt_set) ++ return AE_CTRL_TERMINATE; ++ ++ capbuf[0] = 0x0000; ++ capbuf[1] = 0x1000; /* set bit 12 */ ++ ++ if (ACPI_SUCCESS(acpi_run_osc(handle, &osc_context))) { ++ if (osc_context.ret.pointer && osc_context.ret.length > 1) { ++ u32 *capbuf_ret = osc_context.ret.pointer; ++ ++ if (capbuf_ret[1] & 0x1000) { ++ acpi_handle_info(handle, ++ "_OSC native thermal LVT Acked\n"); ++ acpi_hwp_native_thermal_lvt_set = true; ++ } ++ } ++ kfree(osc_context.ret.pointer); ++ } ++ ++ return AE_OK; ++} ++ ++void __init acpi_early_processor_osc(void) ++{ ++ if (boot_cpu_has(X86_FEATURE_HWP)) { ++ acpi_walk_namespace(ACPI_TYPE_PROCESSOR, ACPI_ROOT_OBJECT, ++ ACPI_UINT32_MAX, ++ acpi_hwp_native_thermal_lvt_osc, ++ NULL, NULL, NULL); ++ acpi_get_devices(ACPI_PROCESSOR_DEVICE_HID, ++ acpi_hwp_native_thermal_lvt_osc, ++ NULL, NULL); ++ } ++} ++#endif ++ + /* + * The following ACPI IDs are known to be suitable for representing as + * processor devices. +diff --git a/drivers/acpi/bus.c b/drivers/acpi/bus.c +index 891c42d..f9081b7 100644 +--- a/drivers/acpi/bus.c ++++ b/drivers/acpi/bus.c +@@ -1005,6 +1005,9 @@ static int __init acpi_bus_init(void) + goto error1; + } + ++ /* Set capability bits for _OSC under processor scope */ ++ acpi_early_processor_osc(); ++ + /* + * _OSC method may exist in module level code, + * so it must be run after ACPI_FULL_INITIALIZATION +diff --git a/drivers/acpi/internal.h b/drivers/acpi/internal.h +index 1e6833a..6f41c73 100644 +--- a/drivers/acpi/internal.h ++++ b/drivers/acpi/internal.h +@@ -138,6 +138,12 @@ void acpi_early_processor_set_pdc(void); + static inline void acpi_early_processor_set_pdc(void) {} + #endif + ++#ifdef CONFIG_X86 ++void acpi_early_processor_osc(void); ++#else ++static inline void acpi_early_processor_osc(void) {} ++#endif ++ + /* -------------------------------------------------------------------------- + Embedded Controller + -------------------------------------------------------------------------- */ +-- +2.5.5 + diff --git a/kernel.spec b/kernel.spec index a4bb22304..bb6f55a21 100644 --- a/kernel.spec +++ b/kernel.spec @@ -649,6 +649,9 @@ Patch689: x86-mm-32-Enable-full-randomization-on-i386-and-X86_.patch #rhbz 1317116 Patch697: HID-wacom-fix-Bamboo-ONE-oops.patch +#rhbz 1309980 +Patch698: 0001-ACPI-processor-Request-native-thermal-interrupt-hand.patch + # END OF PATCH DEFINITIONS %endif @@ -2170,6 +2173,9 @@ fi # # %changelog +* Wed Apr 13 2016 Laura Abbott +- Fix for Skylake pstate issues (rhbz 1309980) + * Tue Apr 12 2016 Justin M. Forbes - 4.5.1-300 - Linux v4.5.1 From da97aab847f0c9ed9aceeb0a03d0eb234d6e5cba Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Fri, 15 Apr 2016 11:23:42 -0400 Subject: [PATCH 049/275] CVE-2016-3961 xen: hugetlbfs use may crash PV guests (rhbz 1327219 1323956) --- kernel.spec | 6 ++ x86-xen-suppress-hugetlbfs-in-PV-guests.patch | 70 +++++++++++++++++++ 2 files changed, 76 insertions(+) create mode 100644 x86-xen-suppress-hugetlbfs-in-PV-guests.patch diff --git a/kernel.spec b/kernel.spec index bb6f55a21..19158e069 100644 --- a/kernel.spec +++ b/kernel.spec @@ -652,6 +652,9 @@ Patch697: HID-wacom-fix-Bamboo-ONE-oops.patch #rhbz 1309980 Patch698: 0001-ACPI-processor-Request-native-thermal-interrupt-hand.patch +# CVE-2016-3961 rhbz 1327219 1323956 +Patch699: x86-xen-suppress-hugetlbfs-in-PV-guests.patch + # END OF PATCH DEFINITIONS %endif @@ -2173,6 +2176,9 @@ fi # # %changelog +* Fri Apr 15 2016 Josh Boyer +- CVE-2016-3961 xen: hugetlbfs use may crash PV guests (rhbz 1327219 1323956) + * Wed Apr 13 2016 Laura Abbott - Fix for Skylake pstate issues (rhbz 1309980) diff --git a/x86-xen-suppress-hugetlbfs-in-PV-guests.patch b/x86-xen-suppress-hugetlbfs-in-PV-guests.patch new file mode 100644 index 000000000..1b7c8f24a --- /dev/null +++ b/x86-xen-suppress-hugetlbfs-in-PV-guests.patch @@ -0,0 +1,70 @@ +From 72c339e0c6d9969e664c2cf63e162753d7d859ae Mon Sep 17 00:00:00 2001 +From: Jan Beulich +Date: Thu, 14 Apr 2016 13:03:47 +0000 +Subject: [PATCH] x86/xen: suppress hugetlbfs in PV guests + +Huge pages are not normally available to PV guests. Not suppressing +hugetlbfs use results in an endless loop of page faults when user mode +code tries to access a hugetlbfs mapped area (since the hypervisor +denies such PTEs to be created, but error indications can't be +propagated out of xen_set_pte_at(), just like for various of its +siblings), and - once killed in an oops like this: + +kernel BUG at .../fs/hugetlbfs/inode.c:428! +invalid opcode: 0000 [#1] SMP +Modules linked in: ... +Supported: Yes +CPU: 2 PID: 6088 Comm: hugetlbfs Tainted: G W 4.4.0-2016-01-20-pv #2 +Hardware name: ... +task: ffff8808059205c0 ti: ffff880803c84000 task.ti: ffff880803c84000 +RIP: e030:[] [] remove_inode_hugepages+0x25b/0x320 +RSP: e02b:ffff880803c879a8 EFLAGS: 00010202 +RAX: 000000000077a4db RBX: ffffea001acff000 RCX: 0000000078417d38 +RDX: 0000000000000000 RSI: 000000007e154fa7 RDI: ffff880805d70960 +RBP: 0000000000000960 R08: 0000000000000000 R09: 0000000000000000 +R10: 0000000000000000 R11: 0000000000000001 R12: 0000000000000000 +R13: ffff880807486018 R14: 0000000000000000 R15: ffff880803c87af0 +FS: 00007f85fa8b8700(0000) GS:ffff88080b640000(0000) knlGS:0000000000000000 +CS: e033 DS: 0000 ES: 0000 CR0: 000000008005003b +CR2: 00007f85fa000000 CR3: 0000000001a0a000 CR4: 0000000000040660 +Stack: + ffff880000000fb0 ffff880803c87a18 ffff880803c87ae8 ffff8808059205c0 + ffff880803c87af0 ffff880803c87ae8 ffff880807486018 0000000000000000 + ffffffff81bf6e60 ffff880807486168 000003ffffffffff 0000000003c87758 +Call Trace: + [] hugetlbfs_evict_inode+0x15/0x40 + [] evict+0xbd/0x1b0 + [] __dentry_kill+0x19a/0x1f0 + [] dput+0x1fe/0x220 + [] __fput+0x155/0x200 + [] task_work_run+0x60/0xa0 + [] do_exit+0x160/0x400 + [] do_group_exit+0x3b/0xa0 + [] get_signal+0x1ed/0x470 + [] do_signal+0x14/0x110 + [] prepare_exit_to_usermode+0xe9/0xf0 + [] retint_user+0x8/0x13 + +This is XSA-174. + +Signed-off-by: Jan Beulich +Cc: stable@vger.kernel.org +--- + arch/x86/include/asm/hugetlb.h | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/arch/x86/include/asm/hugetlb.h b/arch/x86/include/asm/hugetlb.h +index f8a29d2c97b0..e6a8613fbfb0 100644 +--- a/arch/x86/include/asm/hugetlb.h ++++ b/arch/x86/include/asm/hugetlb.h +@@ -4,6 +4,7 @@ + #include + #include + ++#define hugepages_supported() cpu_has_pse + + static inline int is_hugepage_only_range(struct mm_struct *mm, + unsigned long addr, +-- +2.5.5 + From 81f7b31b57d0522ff7ffb95f3d2621ac3ce7ab0b Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Tue, 19 Apr 2016 10:14:21 -0400 Subject: [PATCH 050/275] CVE-2016-3955 usbip: buffer overflow by trusting length of incoming packets (rhbz 1328478 1328479) --- ...ip-fix-potential-out-of-bounds-write.patch | 45 +++++++++++++++++++ kernel.spec | 6 +++ 2 files changed, 51 insertions(+) create mode 100644 USB-usbip-fix-potential-out-of-bounds-write.patch diff --git a/USB-usbip-fix-potential-out-of-bounds-write.patch b/USB-usbip-fix-potential-out-of-bounds-write.patch new file mode 100644 index 000000000..3d9f7c294 --- /dev/null +++ b/USB-usbip-fix-potential-out-of-bounds-write.patch @@ -0,0 +1,45 @@ +From b348d7dddb6c4fbfc810b7a0626e8ec9e29f7cbb Mon Sep 17 00:00:00 2001 +From: Ignat Korchagin +Date: Thu, 17 Mar 2016 18:00:29 +0000 +Subject: [PATCH] USB: usbip: fix potential out-of-bounds write + +Fix potential out-of-bounds write to urb->transfer_buffer +usbip handles network communication directly in the kernel. When receiving a +packet from its peer, usbip code parses headers according to protocol. As +part of this parsing urb->actual_length is filled. Since the input for +urb->actual_length comes from the network, it should be treated as untrusted. +Any entity controlling the network may put any value in the input and the +preallocated urb->transfer_buffer may not be large enough to hold the data. +Thus, the malicious entity is able to write arbitrary data to kernel memory. + +Signed-off-by: Ignat Korchagin +Signed-off-by: Greg Kroah-Hartman +--- + drivers/usb/usbip/usbip_common.c | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +diff --git a/drivers/usb/usbip/usbip_common.c b/drivers/usb/usbip/usbip_common.c +index facaaf003f19..e40da7759a0e 100644 +--- a/drivers/usb/usbip/usbip_common.c ++++ b/drivers/usb/usbip/usbip_common.c +@@ -741,6 +741,17 @@ int usbip_recv_xbuff(struct usbip_device *ud, struct urb *urb) + if (!(size > 0)) + return 0; + ++ if (size > urb->transfer_buffer_length) { ++ /* should not happen, probably malicious packet */ ++ if (ud->side == USBIP_STUB) { ++ usbip_event_add(ud, SDEV_EVENT_ERROR_TCP); ++ return 0; ++ } else { ++ usbip_event_add(ud, VDEV_EVENT_ERROR_TCP); ++ return -EPIPE; ++ } ++ } ++ + ret = usbip_recv(ud->tcp_socket, urb->transfer_buffer, size); + if (ret != size) { + dev_err(&urb->dev->dev, "recv xbuf, %d\n", ret); +-- +2.5.5 + diff --git a/kernel.spec b/kernel.spec index 19158e069..55a5b6fa9 100644 --- a/kernel.spec +++ b/kernel.spec @@ -655,6 +655,9 @@ Patch698: 0001-ACPI-processor-Request-native-thermal-interrupt-hand.patch # CVE-2016-3961 rhbz 1327219 1323956 Patch699: x86-xen-suppress-hugetlbfs-in-PV-guests.patch +# CVE-2016-3955 rhbz 1328478 1328479 +Patch700: USB-usbip-fix-potential-out-of-bounds-write.patch + # END OF PATCH DEFINITIONS %endif @@ -2176,6 +2179,9 @@ fi # # %changelog +* Tue Apr 19 2016 Josh Boyer +- CVE-2016-3955 usbip: buffer overflow by trusting length of incoming packets (rhbz 1328478 1328479) + * Fri Apr 15 2016 Josh Boyer - CVE-2016-3961 xen: hugetlbfs use may crash PV guests (rhbz 1327219 1323956) From a6422490d5769e570a2df18688282fe35f7d9003 Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Wed, 20 Apr 2016 09:24:36 -0500 Subject: [PATCH 051/275] Linux v4.5.2 --- ...-Limit-qdepth-at-the-scsi-host-level.patch | 45 --------- HID-wacom-fix-Bamboo-ONE-oops.patch | 46 --------- arm-fix-idiv.patch | 52 ---------- drm-udl-Use-unlocked-gem-unreferencing.patch | 58 ----------- ...sive-useless-work-during-inetdev-des.patch | 97 ------------------- kernel.spec | 19 +--- sources | 2 +- 7 files changed, 5 insertions(+), 314 deletions(-) delete mode 100644 0001-uas-Limit-qdepth-at-the-scsi-host-level.patch delete mode 100644 HID-wacom-fix-Bamboo-ONE-oops.patch delete mode 100644 arm-fix-idiv.patch delete mode 100644 drm-udl-Use-unlocked-gem-unreferencing.patch delete mode 100644 ipv4-Dont-do-expensive-useless-work-during-inetdev-des.patch diff --git a/0001-uas-Limit-qdepth-at-the-scsi-host-level.patch b/0001-uas-Limit-qdepth-at-the-scsi-host-level.patch deleted file mode 100644 index b6c446829..000000000 --- a/0001-uas-Limit-qdepth-at-the-scsi-host-level.patch +++ /dev/null @@ -1,45 +0,0 @@ -From 79abe2bd501d628b165f323098d6972d69bd13d7 Mon Sep 17 00:00:00 2001 -From: Hans de Goede -Date: Wed, 16 Mar 2016 13:20:51 +0100 -Subject: [PATCH] uas: Limit qdepth at the scsi-host level - -Commit 64d513ac31bd ("scsi: use host wide tags by default") causes -the scsi-core to queue more cmnds then we can handle on devices with -multiple LUNs, limit the qdepth at the scsi-host level instead of -per slave to fix this. - -BugLink: https://bugzilla.redhat.com/show_bug.cgi?id=1315013 -Cc: stable@vger.kernel.org # 4.4.x and 4.5.x -Signed-off-by: Hans de Goede ---- - drivers/usb/storage/uas.c | 7 ++++++- - 1 file changed, 6 insertions(+), 1 deletion(-) - -diff --git a/drivers/usb/storage/uas.c b/drivers/usb/storage/uas.c -index c90a7e4..b5cb7ab 100644 ---- a/drivers/usb/storage/uas.c -+++ b/drivers/usb/storage/uas.c -@@ -800,7 +800,6 @@ static int uas_slave_configure(struct scsi_device *sdev) - if (devinfo->flags & US_FL_BROKEN_FUA) - sdev->broken_fua = 1; - -- scsi_change_queue_depth(sdev, devinfo->qdepth - 2); - return 0; - } - -@@ -932,6 +931,12 @@ static int uas_probe(struct usb_interface *intf, const struct usb_device_id *id) - if (result) - goto set_alt0; - -+ /* -+ * 1 tag is reserved for untagged commands + -+ * 1 tag to avoid of by one errors in some bridge firmwares -+ */ -+ shost->can_queue = devinfo->qdepth - 2; -+ - usb_set_intfdata(intf, shost); - result = scsi_add_host(shost, &intf->dev); - if (result) --- -2.7.3 - diff --git a/HID-wacom-fix-Bamboo-ONE-oops.patch b/HID-wacom-fix-Bamboo-ONE-oops.patch deleted file mode 100644 index 09e83179a..000000000 --- a/HID-wacom-fix-Bamboo-ONE-oops.patch +++ /dev/null @@ -1,46 +0,0 @@ -From 580549ef6b3e3fb3b958de490ca99f43a089a2cf Mon Sep 17 00:00:00 2001 -From: Benjamin Tissoires -Date: Fri, 25 Mar 2016 15:26:55 +0100 -Subject: [PATCH] HID: wacom: fix Bamboo ONE oops - -Looks like recent changes in the Wacom driver made the Bamboo ONE crashes. -The tablet behaves as if it was a regular Bamboo device with pen, touch -and pad, but there is no physical pad connected to it. -The weird part is that the pad is still sending events and given that -there is no input node connected to it, we get anull pointer exception. - -Link: https://bugzilla.redhat.com/show_bug.cgi?id=1317116 - -Signed-off-by: Benjamin Tissoires -Acked-by: Ping Cheng -Cc: stable@vger.kernel.org -Signed-off-by: Jiri Kosina ---- - drivers/hid/wacom_wac.c | 11 +++++++++++ - 1 file changed, 11 insertions(+) - -diff --git a/drivers/hid/wacom_wac.c b/drivers/hid/wacom_wac.c -index bd198bbd4df0..02c4efea241c 100644 ---- a/drivers/hid/wacom_wac.c -+++ b/drivers/hid/wacom_wac.c -@@ -2426,6 +2426,17 @@ void wacom_setup_device_quirks(struct wacom *wacom) - } - - /* -+ * Hack for the Bamboo One: -+ * the device presents a PAD/Touch interface as most Bamboos and even -+ * sends ghosts PAD data on it. However, later, we must disable this -+ * ghost interface, and we can not detect it unless we set it here -+ * to WACOM_DEVICETYPE_PAD or WACOM_DEVICETYPE_TOUCH. -+ */ -+ if (features->type == BAMBOO_PEN && -+ features->pktlen == WACOM_PKGLEN_BBTOUCH3) -+ features->device_type |= WACOM_DEVICETYPE_PAD; -+ -+ /* - * Raw Wacom-mode pen and touch events both come from interface - * 0, whose HID descriptor has an application usage of 0xFF0D - * (i.e., WACOM_VENDORDEFINED_PEN). We route pen packets back --- -2.5.5 - diff --git a/arm-fix-idiv.patch b/arm-fix-idiv.patch deleted file mode 100644 index 26eac32d8..000000000 --- a/arm-fix-idiv.patch +++ /dev/null @@ -1,52 +0,0 @@ -From 208fae5c3b9431013ad7bcea07cbcee114e7d163 Mon Sep 17 00:00:00 2001 -From: Nicolas Pitre -Date: Mon, 14 Mar 2016 02:55:45 +0100 -Subject: ARM: 8550/1: protect idiv patching against undefined gcc behavior - -It was reported that a kernel with CONFIG_ARM_PATCH_IDIV=y stopped -booting when compiled with the upcoming gcc 6. Turns out that turning -a function address into a writable array is undefined and gcc 6 decided -it was OK to omit the store to the first word of the function while -still preserving the store to the second word. - -Even though gcc 6 is now fixed to behave more coherently, it is a -mystery that gcc 4 and gcc 5 actually produce wanted code in the kernel. -And in fact the reduced test case to illustrate the issue does indeed -break with gcc < 6 as well. - -In any case, let's guard the kernel against undefined compiler behavior -by hiding the nature of the array location as suggested by gcc -developers. - -Reference: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70128 - -Signed-off-by: Nicolas Pitre -Reported-by: Marcin Juszkiewicz -Cc: Arnd Bergmann -Cc: stable@vger.kernel.org # v4.5 -Signed-off-by: Russell King ---- - arch/arm/kernel/setup.c | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c -index 139791e..a28fce0 100644 ---- a/arch/arm/kernel/setup.c -+++ b/arch/arm/kernel/setup.c -@@ -430,11 +430,13 @@ static void __init patch_aeabi_idiv(void) - pr_info("CPU: div instructions available: patching division code\n"); - - fn_addr = ((uintptr_t)&__aeabi_uidiv) & ~1; -+ asm ("" : "+g" (fn_addr)); - ((u32 *)fn_addr)[0] = udiv_instruction(); - ((u32 *)fn_addr)[1] = bx_lr_instruction(); - flush_icache_range(fn_addr, fn_addr + 8); - - fn_addr = ((uintptr_t)&__aeabi_idiv) & ~1; -+ asm ("" : "+g" (fn_addr)); - ((u32 *)fn_addr)[0] = sdiv_instruction(); - ((u32 *)fn_addr)[1] = bx_lr_instruction(); - flush_icache_range(fn_addr, fn_addr + 8); --- -cgit v0.12 - diff --git a/drm-udl-Use-unlocked-gem-unreferencing.patch b/drm-udl-Use-unlocked-gem-unreferencing.patch deleted file mode 100644 index e2dbabe83..000000000 --- a/drm-udl-Use-unlocked-gem-unreferencing.patch +++ /dev/null @@ -1,58 +0,0 @@ -From patchwork Mon Nov 23 09:32:42 2015 -Content-Type: text/plain; charset="utf-8" -MIME-Version: 1.0 -Content-Transfer-Encoding: 7bit -Subject: [09/29] drm/udl: Use unlocked gem unreferencing -From: Daniel Vetter -X-Patchwork-Id: 65722 -Message-Id: <1448271183-20523-10-git-send-email-daniel.vetter@ffwll.ch> -To: DRI Development -Cc: Daniel Vetter , - Daniel Vetter , - Intel Graphics Development , - Dave Airlie -Date: Mon, 23 Nov 2015 10:32:42 +0100 - -For drm_gem_object_unreference callers are required to hold -dev->struct_mutex, which these paths don't. Enforcing this requirement -has become a bit more strict with - -commit ef4c6270bf2867e2f8032e9614d1a8cfc6c71663 -Author: Daniel Vetter -Date: Thu Oct 15 09:36:25 2015 +0200 - - drm/gem: Check locking in drm_gem_object_unreference - -Cc: Dave Airlie -Signed-off-by: Daniel Vetter ---- - drivers/gpu/drm/udl/udl_fb.c | 2 +- - drivers/gpu/drm/udl/udl_gem.c | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -diff --git a/drivers/gpu/drm/udl/udl_fb.c b/drivers/gpu/drm/udl/udl_fb.c -index 200419d4d43c..18a2acbccb7d 100644 ---- a/drivers/gpu/drm/udl/udl_fb.c -+++ b/drivers/gpu/drm/udl/udl_fb.c -@@ -538,7 +538,7 @@ static int udlfb_create(struct drm_fb_helper *helper, - out_destroy_fbi: - drm_fb_helper_release_fbi(helper); - out_gfree: -- drm_gem_object_unreference(&ufbdev->ufb.obj->base); -+ drm_gem_object_unreference_unlocked(&ufbdev->ufb.obj->base); - out: - return ret; - } -diff --git a/drivers/gpu/drm/udl/udl_gem.c b/drivers/gpu/drm/udl/udl_gem.c -index 2a0a784ab6ee..d7528e0d8442 100644 ---- a/drivers/gpu/drm/udl/udl_gem.c -+++ b/drivers/gpu/drm/udl/udl_gem.c -@@ -52,7 +52,7 @@ udl_gem_create(struct drm_file *file, - return ret; - } - -- drm_gem_object_unreference(&obj->base); -+ drm_gem_object_unreference_unlocked(&obj->base); - *handle_p = handle; - return 0; - } diff --git a/ipv4-Dont-do-expensive-useless-work-during-inetdev-des.patch b/ipv4-Dont-do-expensive-useless-work-during-inetdev-des.patch deleted file mode 100644 index 48e4762e3..000000000 --- a/ipv4-Dont-do-expensive-useless-work-during-inetdev-des.patch +++ /dev/null @@ -1,97 +0,0 @@ -From fbd40ea0180a2d328c5adc61414dc8bab9335ce2 Mon Sep 17 00:00:00 2001 -From: "David S. Miller" -Date: Sun, 13 Mar 2016 23:28:00 -0400 -Subject: ipv4: Don't do expensive useless work during inetdev destroy. - -When an inetdev is destroyed, every address assigned to the interface -is removed. And in this scenerio we do two pointless things which can -be very expensive if the number of assigned interfaces is large: - -1) Address promotion. We are deleting all addresses, so there is no - point in doing this. - -2) A full nf conntrack table purge for every address. We only need to - do this once, as is already caught by the existing - masq_dev_notifier so masq_inet_event() can skip this. - -Reported-by: Solar Designer -Signed-off-by: David S. Miller -Tested-by: Cyrill Gorcunov ---- - net/ipv4/devinet.c | 4 ++++ - net/ipv4/fib_frontend.c | 4 ++++ - net/ipv4/netfilter/nf_nat_masquerade_ipv4.c | 12 ++++++++++-- - 3 files changed, 18 insertions(+), 2 deletions(-) - -diff --git a/net/ipv4/devinet.c b/net/ipv4/devinet.c -index 65e76a4..e333bc8 100644 ---- a/net/ipv4/devinet.c -+++ b/net/ipv4/devinet.c -@@ -334,6 +334,9 @@ static void __inet_del_ifa(struct in_device *in_dev, struct in_ifaddr **ifap, - - ASSERT_RTNL(); - -+ if (in_dev->dead) -+ goto no_promotions; -+ - /* 1. Deleting primary ifaddr forces deletion all secondaries - * unless alias promotion is set - **/ -@@ -380,6 +383,7 @@ static void __inet_del_ifa(struct in_device *in_dev, struct in_ifaddr **ifap, - fib_del_ifaddr(ifa, ifa1); - } - -+no_promotions: - /* 2. Unlink it */ - - *ifap = ifa1->ifa_next; -diff --git a/net/ipv4/fib_frontend.c b/net/ipv4/fib_frontend.c -index 4734475..21add55 100644 ---- a/net/ipv4/fib_frontend.c -+++ b/net/ipv4/fib_frontend.c -@@ -922,6 +922,9 @@ void fib_del_ifaddr(struct in_ifaddr *ifa, struct in_ifaddr *iprim) - subnet = 1; - } - -+ if (in_dev->dead) -+ goto no_promotions; -+ - /* Deletion is more complicated than add. - * We should take care of not to delete too much :-) - * -@@ -997,6 +1000,7 @@ void fib_del_ifaddr(struct in_ifaddr *ifa, struct in_ifaddr *iprim) - } - } - -+no_promotions: - if (!(ok & BRD_OK)) - fib_magic(RTM_DELROUTE, RTN_BROADCAST, ifa->ifa_broadcast, 32, prim); - if (subnet && ifa->ifa_prefixlen < 31) { -diff --git a/net/ipv4/netfilter/nf_nat_masquerade_ipv4.c b/net/ipv4/netfilter/nf_nat_masquerade_ipv4.c -index c6eb421..ea91058 100644 ---- a/net/ipv4/netfilter/nf_nat_masquerade_ipv4.c -+++ b/net/ipv4/netfilter/nf_nat_masquerade_ipv4.c -@@ -108,10 +108,18 @@ static int masq_inet_event(struct notifier_block *this, - unsigned long event, - void *ptr) - { -- struct net_device *dev = ((struct in_ifaddr *)ptr)->ifa_dev->dev; -+ struct in_device *idev = ((struct in_ifaddr *)ptr)->ifa_dev; - struct netdev_notifier_info info; - -- netdev_notifier_info_init(&info, dev); -+ /* The masq_dev_notifier will catch the case of the device going -+ * down. So if the inetdev is dead and being destroyed we have -+ * no work to do. Otherwise this is an individual address removal -+ * and we have to perform the flush. -+ */ -+ if (idev->dead) -+ return NOTIFY_DONE; -+ -+ netdev_notifier_info_init(&info, idev->dev); - return masq_device_event(this, event, &info); - } - --- -cgit v0.12 - diff --git a/kernel.spec b/kernel.spec index 55a5b6fa9..f60757743 100644 --- a/kernel.spec +++ b/kernel.spec @@ -54,7 +54,7 @@ Summary: The Linux kernel %if 0%{?released_kernel} # Do we have a -stable update to apply? -%define stable_update 1 +%define stable_update 2 # Set rpm version accordingly %if 0%{?stable_update} %define stablerev %{stable_update} @@ -509,8 +509,6 @@ Patch423: Initial-AllWinner-A64-and-PINE64-support.patch # http://www.spinics.net/lists/arm-kernel/msg493431.html Patch424: efi-arm64-don-t-apply-MEMBLOCK_NOMAP-to-UEFI-memory-map-mapping.patch -Patch425: arm-fix-idiv.patch - # http://patchwork.ozlabs.org/patch/587554/ Patch430: ARM-tegra-usb-no-reset.patch @@ -616,9 +614,6 @@ Patch508: kexec-uefi-copy-secure_boot-flag-in-boot-params.patch #rhbz 1286293 Patch571: ideapad-laptop-Add-Lenovo-ideapad-Y700-17ISK-to-no_h.patch -#rhbz 1295646 -Patch621: drm-udl-Use-unlocked-gem-unreferencing.patch - #Required for some persistent memory options Patch641: disable-CONFIG_EXPERT-for-ZONE_DMA.patch @@ -634,21 +629,12 @@ Patch664: netfilter-x_tables-check-for-size-overflow.patch #CVE-2016-3134 rhbz 1317383 1317384 Patch665: netfilter-x_tables-deal-with-bogus-nextoffset-values.patch -#CVE-2016-3135 rhbz 1318172 1318270 -Patch666: ipv4-Dont-do-expensive-useless-work-during-inetdev-des.patch - -#rhbz 1315013 -Patch679: 0001-uas-Limit-qdepth-at-the-scsi-host-level.patch - #CVE-2016-2187 rhbz 1317017 1317010 Patch686: input-gtco-fix-crash-on-detecting-device-without-end.patch # CVE-2016-3672 rhbz 1324749 1324750 Patch689: x86-mm-32-Enable-full-randomization-on-i386-and-X86_.patch -#rhbz 1317116 -Patch697: HID-wacom-fix-Bamboo-ONE-oops.patch - #rhbz 1309980 Patch698: 0001-ACPI-processor-Request-native-thermal-interrupt-hand.patch @@ -2179,6 +2165,9 @@ fi # # %changelog +* Wed Apr 20 2016 Justin M. Forbes - 4.5.2-300 +- Linux v4.5.2 + * Tue Apr 19 2016 Josh Boyer - CVE-2016-3955 usbip: buffer overflow by trusting length of incoming packets (rhbz 1328478 1328479) diff --git a/sources b/sources index c02933f34..4a185128c 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ a60d48eee08ec0536d5efb17ca819aef linux-4.5.tar.xz 6f557fe90b800b615c85c2ca04da6154 perf-man-4.5.tar.gz -1df9ff0283c1732ebbf7c55f340a121b patch-4.5.1.xz +19a835c1d16183f629d45779f62d36b6 patch-4.5.2.xz From 59c51515fbcd2a878cb7ce1f300654ef863831a6 Mon Sep 17 00:00:00 2001 From: Laura Abbott Date: Wed, 20 Apr 2016 10:04:40 -0700 Subject: [PATCH 052/275] Allow antenna selection for rtl8723be (rhbz 1309487) --- antenna_select.patch | 227 +++++++++++++++++++++++++++++++++++++++++++ kernel.spec | 6 ++ 2 files changed, 233 insertions(+) create mode 100644 antenna_select.patch diff --git a/antenna_select.patch b/antenna_select.patch new file mode 100644 index 000000000..15763e9bc --- /dev/null +++ b/antenna_select.patch @@ -0,0 +1,227 @@ +From c18d8f5095715c56bb3cd9cba64242542632054b Mon Sep 17 00:00:00 2001 +From: Larry Finger +Date: Wed, 16 Mar 2016 13:33:34 -0500 +Subject: rtlwifi: rtl8723be: Add antenna select module parameter + +A number of new laptops have been delivered with only a single antenna. +In principle, this is OK; however, a problem arises when the on-board +EEPROM is programmed to use the other antenna connection. The option +of opening the computer and moving the connector is not always possible +as it will void the warranty in some cases. In addition, this solution +breaks the Windows driver when the box dual boots Linux and Windows. + +A fix involving a new module parameter has been developed. This commit +adds the new parameter and implements the changes needed for the driver. + +Signed-off-by: Larry Finger +Cc: Stable [V4.0+] +Signed-off-by: Kalle Valo +--- + drivers/net/wireless/realtek/rtlwifi/rtl8723be/hw.c | 5 +++++ + drivers/net/wireless/realtek/rtlwifi/rtl8723be/sw.c | 3 +++ + drivers/net/wireless/realtek/rtlwifi/wifi.h | 3 +++ + 3 files changed, 11 insertions(+) + +diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8723be/hw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8723be/hw.c +index c983d2f..5a3df91 100644 +--- a/drivers/net/wireless/realtek/rtlwifi/rtl8723be/hw.c ++++ b/drivers/net/wireless/realtek/rtlwifi/rtl8723be/hw.c +@@ -2684,6 +2684,7 @@ void rtl8723be_read_bt_coexist_info_from_hwpg(struct ieee80211_hw *hw, + bool auto_load_fail, u8 *hwinfo) + { + struct rtl_priv *rtlpriv = rtl_priv(hw); ++ struct rtl_mod_params *mod_params = rtlpriv->cfg->mod_params; + u8 value; + u32 tmpu_32; + +@@ -2702,6 +2703,10 @@ void rtl8723be_read_bt_coexist_info_from_hwpg(struct ieee80211_hw *hw, + rtlpriv->btcoexist.btc_info.ant_num = ANT_X2; + } + ++ /* override ant_num / ant_path */ ++ if (mod_params->ant_sel) ++ rtlpriv->btcoexist.btc_info.ant_num = ++ (mod_params->ant_sel == 1 ? ANT_X2 : ANT_X1); + } + + void rtl8723be_bt_reg_init(struct ieee80211_hw *hw) +diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8723be/sw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8723be/sw.c +index a78eaed..2101793 100644 +--- a/drivers/net/wireless/realtek/rtlwifi/rtl8723be/sw.c ++++ b/drivers/net/wireless/realtek/rtlwifi/rtl8723be/sw.c +@@ -273,6 +273,7 @@ static struct rtl_mod_params rtl8723be_mod_params = { + .msi_support = false, + .disable_watchdog = false, + .debug = DBG_EMERG, ++ .ant_sel = 0, + }; + + static struct rtl_hal_cfg rtl8723be_hal_cfg = { +@@ -394,6 +395,7 @@ module_param_named(fwlps, rtl8723be_mod_params.fwctrl_lps, bool, 0444); + module_param_named(msi, rtl8723be_mod_params.msi_support, bool, 0444); + module_param_named(disable_watchdog, rtl8723be_mod_params.disable_watchdog, + bool, 0444); ++module_param_named(ant_sel, rtl8723be_mod_params.ant_sel, int, 0444); + MODULE_PARM_DESC(swenc, "Set to 1 for software crypto (default 0)\n"); + MODULE_PARM_DESC(ips, "Set to 0 to not use link power save (default 1)\n"); + MODULE_PARM_DESC(swlps, "Set to 1 to use SW control power save (default 0)\n"); +@@ -402,6 +404,7 @@ MODULE_PARM_DESC(msi, "Set to 1 to use MSI interrupts mode (default 0)\n"); + MODULE_PARM_DESC(debug, "Set debug level (0-5) (default 0)"); + MODULE_PARM_DESC(disable_watchdog, + "Set to 1 to disable the watchdog (default 0)\n"); ++MODULE_PARM_DESC(ant_sel, "Set to 1 or 2 to force antenna number (default 0)\n"); + + static SIMPLE_DEV_PM_OPS(rtlwifi_pm_ops, rtl_pci_suspend, rtl_pci_resume); + +diff --git a/drivers/net/wireless/realtek/rtlwifi/wifi.h b/drivers/net/wireless/realtek/rtlwifi/wifi.h +index 554d814..93bd7fc 100644 +--- a/drivers/net/wireless/realtek/rtlwifi/wifi.h ++++ b/drivers/net/wireless/realtek/rtlwifi/wifi.h +@@ -2246,6 +2246,9 @@ struct rtl_mod_params { + + /* default 0: 1 means do not disable interrupts */ + bool int_clear; ++ ++ /* select antenna */ ++ int ant_sel; + }; + + struct rtl_hal_usbint_cfg { +-- +cgit v0.12 + +From baa1702290953295e421f0f433e2b1ff4815827c Mon Sep 17 00:00:00 2001 +From: Larry Finger +Date: Wed, 16 Mar 2016 13:33:35 -0500 +Subject: rtlwifi: btcoexist: Implement antenna selection + +The previous patch added an option to rtl8723be to manually select the +antenna for those cases when only a single antenna is present, and the +on-board EEPROM is incorrectly programmed. This patch implements the +necessary changes in the Bluetooth coexistence driver. + +Signed-off-by: Larry Finger +Cc: Stable [V4.0+] +Signed-off-by: Kalle Valo +--- + .../realtek/rtlwifi/btcoexist/halbtc8723b2ant.c | 9 ++++++-- + .../realtek/rtlwifi/btcoexist/halbtcoutsrc.c | 27 +++++++++++++++++++++- + .../realtek/rtlwifi/btcoexist/halbtcoutsrc.h | 2 +- + .../wireless/realtek/rtlwifi/btcoexist/rtl_btc.c | 5 +++- + 4 files changed, 38 insertions(+), 5 deletions(-) + +diff --git a/drivers/net/wireless/realtek/rtlwifi/btcoexist/halbtc8723b2ant.c b/drivers/net/wireless/realtek/rtlwifi/btcoexist/halbtc8723b2ant.c +index c43ab59..77cbd10 100644 +--- a/drivers/net/wireless/realtek/rtlwifi/btcoexist/halbtc8723b2ant.c ++++ b/drivers/net/wireless/realtek/rtlwifi/btcoexist/halbtc8723b2ant.c +@@ -1203,7 +1203,6 @@ static void btc8723b2ant_set_ant_path(struct btc_coexist *btcoexist, + + /* Force GNT_BT to low */ + btcoexist->btc_write_1byte_bitmask(btcoexist, 0x765, 0x18, 0x0); +- btcoexist->btc_write_2byte(btcoexist, 0x948, 0x0); + + if (board_info->btdm_ant_pos == BTC_ANTENNA_AT_MAIN_PORT) { + /* tell firmware "no antenna inverse" */ +@@ -1211,19 +1210,25 @@ static void btc8723b2ant_set_ant_path(struct btc_coexist *btcoexist, + h2c_parameter[1] = 1; /* ext switch type */ + btcoexist->btc_fill_h2c(btcoexist, 0x65, 2, + h2c_parameter); ++ btcoexist->btc_write_2byte(btcoexist, 0x948, 0x0); + } else { + /* tell firmware "antenna inverse" */ + h2c_parameter[0] = 1; + h2c_parameter[1] = 1; /* ext switch type */ + btcoexist->btc_fill_h2c(btcoexist, 0x65, 2, + h2c_parameter); ++ btcoexist->btc_write_2byte(btcoexist, 0x948, 0x280); + } + } + + /* ext switch setting */ + if (use_ext_switch) { + /* fixed internal switch S1->WiFi, S0->BT */ +- btcoexist->btc_write_2byte(btcoexist, 0x948, 0x0); ++ if (board_info->btdm_ant_pos == BTC_ANTENNA_AT_MAIN_PORT) ++ btcoexist->btc_write_2byte(btcoexist, 0x948, 0x0); ++ else ++ btcoexist->btc_write_2byte(btcoexist, 0x948, 0x280); ++ + switch (antpos_type) { + case BTC_ANT_WIFI_AT_MAIN: + /* ext switch main at wifi */ +diff --git a/drivers/net/wireless/realtek/rtlwifi/btcoexist/halbtcoutsrc.c b/drivers/net/wireless/realtek/rtlwifi/btcoexist/halbtcoutsrc.c +index b2791c8..babd149 100644 +--- a/drivers/net/wireless/realtek/rtlwifi/btcoexist/halbtcoutsrc.c ++++ b/drivers/net/wireless/realtek/rtlwifi/btcoexist/halbtcoutsrc.c +@@ -965,13 +965,38 @@ void exhalbtc_set_chip_type(u8 chip_type) + } + } + +-void exhalbtc_set_ant_num(u8 type, u8 ant_num) ++void exhalbtc_set_ant_num(struct rtl_priv *rtlpriv, u8 type, u8 ant_num) + { + if (BT_COEX_ANT_TYPE_PG == type) { + gl_bt_coexist.board_info.pg_ant_num = ant_num; + gl_bt_coexist.board_info.btdm_ant_num = ant_num; ++ /* The antenna position: ++ * Main (default) or Aux for pgAntNum=2 && btdmAntNum =1. ++ * The antenna position should be determined by ++ * auto-detect mechanism. ++ * The following is assumed to main, ++ * and those must be modified ++ * if y auto-detect mechanism is ready ++ */ ++ if ((gl_bt_coexist.board_info.pg_ant_num == 2) && ++ (gl_bt_coexist.board_info.btdm_ant_num == 1)) ++ gl_bt_coexist.board_info.btdm_ant_pos = ++ BTC_ANTENNA_AT_MAIN_PORT; ++ else ++ gl_bt_coexist.board_info.btdm_ant_pos = ++ BTC_ANTENNA_AT_MAIN_PORT; + } else if (BT_COEX_ANT_TYPE_ANTDIV == type) { + gl_bt_coexist.board_info.btdm_ant_num = ant_num; ++ gl_bt_coexist.board_info.btdm_ant_pos = ++ BTC_ANTENNA_AT_MAIN_PORT; ++ } else if (type == BT_COEX_ANT_TYPE_DETECTED) { ++ gl_bt_coexist.board_info.btdm_ant_num = ant_num; ++ if (rtlpriv->cfg->mod_params->ant_sel == 1) ++ gl_bt_coexist.board_info.btdm_ant_pos = ++ BTC_ANTENNA_AT_AUX_PORT; ++ else ++ gl_bt_coexist.board_info.btdm_ant_pos = ++ BTC_ANTENNA_AT_MAIN_PORT; + } + } + +diff --git a/drivers/net/wireless/realtek/rtlwifi/btcoexist/halbtcoutsrc.h b/drivers/net/wireless/realtek/rtlwifi/btcoexist/halbtcoutsrc.h +index 0a903ea..f41ca57 100644 +--- a/drivers/net/wireless/realtek/rtlwifi/btcoexist/halbtcoutsrc.h ++++ b/drivers/net/wireless/realtek/rtlwifi/btcoexist/halbtcoutsrc.h +@@ -535,7 +535,7 @@ void exhalbtc_set_bt_patch_version(u16 bt_hci_version, u16 bt_patch_version); + void exhalbtc_update_min_bt_rssi(char bt_rssi); + void exhalbtc_set_bt_exist(bool bt_exist); + void exhalbtc_set_chip_type(u8 chip_type); +-void exhalbtc_set_ant_num(u8 type, u8 ant_num); ++void exhalbtc_set_ant_num(struct rtl_priv *rtlpriv, u8 type, u8 ant_num); + void exhalbtc_display_bt_coex_info(struct btc_coexist *btcoexist); + void exhalbtc_signal_compensation(struct btc_coexist *btcoexist, + u8 *rssi_wifi, u8 *rssi_bt); +diff --git a/drivers/net/wireless/realtek/rtlwifi/btcoexist/rtl_btc.c b/drivers/net/wireless/realtek/rtlwifi/btcoexist/rtl_btc.c +index b9b0cb7..d3fd921 100644 +--- a/drivers/net/wireless/realtek/rtlwifi/btcoexist/rtl_btc.c ++++ b/drivers/net/wireless/realtek/rtlwifi/btcoexist/rtl_btc.c +@@ -72,7 +72,10 @@ void rtl_btc_init_hal_vars(struct rtl_priv *rtlpriv) + __func__, bt_type); + exhalbtc_set_chip_type(bt_type); + +- exhalbtc_set_ant_num(BT_COEX_ANT_TYPE_PG, ant_num); ++ if (rtlpriv->cfg->mod_params->ant_sel == 1) ++ exhalbtc_set_ant_num(rtlpriv, BT_COEX_ANT_TYPE_DETECTED, 1); ++ else ++ exhalbtc_set_ant_num(rtlpriv, BT_COEX_ANT_TYPE_PG, ant_num); + } + + void rtl_btc_init_hw_config(struct rtl_priv *rtlpriv) +-- +cgit v0.12 + diff --git a/kernel.spec b/kernel.spec index f60757743..8dbaa585e 100644 --- a/kernel.spec +++ b/kernel.spec @@ -644,6 +644,9 @@ Patch699: x86-xen-suppress-hugetlbfs-in-PV-guests.patch # CVE-2016-3955 rhbz 1328478 1328479 Patch700: USB-usbip-fix-potential-out-of-bounds-write.patch +#rhbz 1309487 +Patch701: antenna_select.patch + # END OF PATCH DEFINITIONS %endif @@ -2165,6 +2168,9 @@ fi # # %changelog +* Wed Apr 20 2016 Laura Abbott +- Allow antenna selection for rtl8723be (rhbz 1309487) + * Wed Apr 20 2016 Justin M. Forbes - 4.5.2-300 - Linux v4.5.2 From 5e92138405fb743e35203bad695e58e9749aff42 Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Thu, 21 Apr 2016 08:50:49 -0500 Subject: [PATCH 053/275] Build 32bit x86 compressed kernels as PIE (rhbz 1302071) --- kernel.spec | 8 +- ...-Build-compressed-x86-kernels-as-PIE.patch | 159 ++++++++++++++++++ 2 files changed, 166 insertions(+), 1 deletion(-) create mode 100644 x86-build-Build-compressed-x86-kernels-as-PIE.patch diff --git a/kernel.spec b/kernel.spec index 8dbaa585e..d2e342038 100644 --- a/kernel.spec +++ b/kernel.spec @@ -42,7 +42,7 @@ Summary: The Linux kernel # For non-released -rc kernels, this will be appended after the rcX and # gitX tags, so a 3 here would become part of release "0.rcX.gitX.3" # -%global baserelease 300 +%global baserelease 301 %global fedora_build %{baserelease} # base_sublevel is the kernel version we're starting with and patching @@ -647,6 +647,9 @@ Patch700: USB-usbip-fix-potential-out-of-bounds-write.patch #rhbz 1309487 Patch701: antenna_select.patch +#rhbz 1302071 +Patch702: x86-build-Build-compressed-x86-kernels-as-PIE.patch + # END OF PATCH DEFINITIONS %endif @@ -2168,6 +2171,9 @@ fi # # %changelog +* Thu Apr 21 2016 Justin M. Forbes - 4.5.2-301 +- Build 32bit x86 compressed kernels as PIE (rhbz 1302071) + * Wed Apr 20 2016 Laura Abbott - Allow antenna selection for rtl8723be (rhbz 1309487) diff --git a/x86-build-Build-compressed-x86-kernels-as-PIE.patch b/x86-build-Build-compressed-x86-kernels-as-PIE.patch new file mode 100644 index 000000000..064cb485b --- /dev/null +++ b/x86-build-Build-compressed-x86-kernels-as-PIE.patch @@ -0,0 +1,159 @@ +From 6d92bc9d483aa1751755a66fee8fb39dffb088c0 Mon Sep 17 00:00:00 2001 +From: "H.J. Lu" +Date: Wed, 16 Mar 2016 20:04:35 -0700 +Subject: [PATCH] x86/build: Build compressed x86 kernels as PIE + +The 32-bit x86 assembler in binutils 2.26 will generate R_386_GOT32X +relocation to get the symbol address in PIC. When the compressed x86 +kernel isn't built as PIC, the linker optimizes R_386_GOT32X relocations +to their fixed symbol addresses. However, when the compressed x86 +kernel is loaded at a different address, it leads to the following +load failure: + + Failed to allocate space for phdrs + +during the decompression stage. + +If the compressed x86 kernel is relocatable at run-time, it should be +compiled with -fPIE, instead of -fPIC, if possible and should be built as +Position Independent Executable (PIE) so that linker won't optimize +R_386_GOT32X relocation to its fixed symbol address. + +Older linkers generate R_386_32 relocations against locally defined +symbols, _bss, _ebss, _got and _egot, in PIE. It isn't wrong, just less +optimal than R_386_RELATIVE. But the x86 kernel fails to properly handle +R_386_32 relocations when relocating the kernel. To generate +R_386_RELATIVE relocations, we mark _bss, _ebss, _got and _egot as +hidden in both 32-bit and 64-bit x86 kernels. + +To build a 64-bit compressed x86 kernel as PIE, we need to disable the +relocation overflow check to avoid relocation overflow errors. We do +this with a new linker command-line option, -z noreloc-overflow, which +got added recently: + + commit 4c10bbaa0912742322f10d9d5bb630ba4e15dfa7 + Author: H.J. Lu + Date: Tue Mar 15 11:07:06 2016 -0700 + + Add -z noreloc-overflow option to x86-64 ld + + Add -z noreloc-overflow command-line option to the x86-64 ELF linker to + disable relocation overflow check. This can be used to avoid relocation + overflow check if there will be no dynamic relocation overflow at + run-time. + +The 64-bit compressed x86 kernel is built as PIE only if the linker supports +-z noreloc-overflow. So far 64-bit relocatable compressed x86 kernel +boots fine even when it is built as a normal executable. + +Signed-off-by: H.J. Lu +Cc: Andy Lutomirski +Cc: Borislav Petkov +Cc: Brian Gerst +Cc: Denys Vlasenko +Cc: H. Peter Anvin +Cc: Linus Torvalds +Cc: Peter Zijlstra +Cc: Thomas Gleixner +Cc: linux-kernel@vger.kernel.org +[ Edited the changelog and comments. ] +Signed-off-by: Ingo Molnar +--- + arch/x86/boot/compressed/Makefile | 14 +++++++++++++- + arch/x86/boot/compressed/head_32.S | 28 ++++++++++++++++++++++++++++ + arch/x86/boot/compressed/head_64.S | 8 ++++++++ + 3 files changed, 49 insertions(+), 1 deletion(-) + +diff --git a/arch/x86/boot/compressed/Makefile b/arch/x86/boot/compressed/Makefile +index 6915ff2..8774cb2 100644 +--- a/arch/x86/boot/compressed/Makefile ++++ b/arch/x86/boot/compressed/Makefile +@@ -26,7 +26,7 @@ targets := vmlinux vmlinux.bin vmlinux.bin.gz vmlinux.bin.bz2 vmlinux.bin.lzma \ + vmlinux.bin.xz vmlinux.bin.lzo vmlinux.bin.lz4 + + KBUILD_CFLAGS := -m$(BITS) -D__KERNEL__ $(LINUX_INCLUDE) -O2 +-KBUILD_CFLAGS += -fno-strict-aliasing -fPIC ++KBUILD_CFLAGS += -fno-strict-aliasing $(call cc-option, -fPIE, -fPIC) + KBUILD_CFLAGS += -DDISABLE_BRANCH_PROFILING + cflags-$(CONFIG_X86_32) := -march=i386 + cflags-$(CONFIG_X86_64) := -mcmodel=small +@@ -40,6 +40,18 @@ GCOV_PROFILE := n + UBSAN_SANITIZE :=n + + LDFLAGS := -m elf_$(UTS_MACHINE) ++ifeq ($(CONFIG_RELOCATABLE),y) ++# If kernel is relocatable, build compressed kernel as PIE. ++ifeq ($(CONFIG_X86_32),y) ++LDFLAGS += $(call ld-option, -pie) $(call ld-option, --no-dynamic-linker) ++else ++# To build 64-bit compressed kernel as PIE, we disable relocation ++# overflow check to avoid relocation overflow error with a new linker ++# command-line option, -z noreloc-overflow. ++LDFLAGS += $(shell $(LD) --help 2>&1 | grep -q "\-z noreloc-overflow" \ ++ && echo "-z noreloc-overflow -pie --no-dynamic-linker") ++endif ++endif + LDFLAGS_vmlinux := -T + + hostprogs-y := mkpiggy +diff --git a/arch/x86/boot/compressed/head_32.S b/arch/x86/boot/compressed/head_32.S +index 8ef964d..0256064 100644 +--- a/arch/x86/boot/compressed/head_32.S ++++ b/arch/x86/boot/compressed/head_32.S +@@ -31,6 +31,34 @@ + #include + #include + ++/* ++ * The 32-bit x86 assembler in binutils 2.26 will generate R_386_GOT32X ++ * relocation to get the symbol address in PIC. When the compressed x86 ++ * kernel isn't built as PIC, the linker optimizes R_386_GOT32X ++ * relocations to their fixed symbol addresses. However, when the ++ * compressed x86 kernel is loaded at a different address, it leads ++ * to the following load failure: ++ * ++ * Failed to allocate space for phdrs ++ * ++ * during the decompression stage. ++ * ++ * If the compressed x86 kernel is relocatable at run-time, it should be ++ * compiled with -fPIE, instead of -fPIC, if possible and should be built as ++ * Position Independent Executable (PIE) so that linker won't optimize ++ * R_386_GOT32X relocation to its fixed symbol address. Older ++ * linkers generate R_386_32 relocations against locally defined symbols, ++ * _bss, _ebss, _got and _egot, in PIE. It isn't wrong, just less ++ * optimal than R_386_RELATIVE. But the x86 kernel fails to properly handle ++ * R_386_32 relocations when relocating the kernel. To generate ++ * R_386_RELATIVE relocations, we mark _bss, _ebss, _got and _egot as ++ * hidden: ++ */ ++ .hidden _bss ++ .hidden _ebss ++ .hidden _got ++ .hidden _egot ++ + __HEAD + ENTRY(startup_32) + #ifdef CONFIG_EFI_STUB +diff --git a/arch/x86/boot/compressed/head_64.S b/arch/x86/boot/compressed/head_64.S +index b0c0d16..86558a1 100644 +--- a/arch/x86/boot/compressed/head_64.S ++++ b/arch/x86/boot/compressed/head_64.S +@@ -33,6 +33,14 @@ + #include + #include + ++/* ++ * Locally defined symbols should be marked hidden: ++ */ ++ .hidden _bss ++ .hidden _ebss ++ .hidden _got ++ .hidden _egot ++ + __HEAD + .code32 + ENTRY(startup_32) +-- +2.7.3 + From e1041e2d13a6e66115eb560acc15cae94d3c84a9 Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Tue, 26 Apr 2016 10:54:31 -0400 Subject: [PATCH 054/275] Avoid unnecessary warnings when deleting a network device --- ...arn-when-primary-address-is-missing-.patch | 40 +++++++++++++++++++ kernel.spec | 3 ++ 2 files changed, 43 insertions(+) create mode 100644 ipv4-fib-don-t-warn-when-primary-address-is-missing-.patch diff --git a/ipv4-fib-don-t-warn-when-primary-address-is-missing-.patch b/ipv4-fib-don-t-warn-when-primary-address-is-missing-.patch new file mode 100644 index 000000000..9e4cf4e0e --- /dev/null +++ b/ipv4-fib-don-t-warn-when-primary-address-is-missing-.patch @@ -0,0 +1,40 @@ +From 9f79323a0aebccb9915ab8f4b7dcf531578b9cf9 Mon Sep 17 00:00:00 2001 +From: Paolo Abeni +Date: Thu, 21 Apr 2016 20:23:31 -0400 +Subject: [PATCH] ipv4/fib: don't warn when primary address is missing if + in_dev is dead + +After commit fbd40ea0180a ("ipv4: Don't do expensive useless work +during inetdev destroy.") when deleting an interface, +fib_del_ifaddr() can be executed without any primary address +present on the dead interface. + +The above is safe, but triggers some "bug: prim == NULL" warnings. + +This commit avoids warning if the in_dev is dead + +Signed-off-by: Paolo Abeni +--- + net/ipv4/fib_frontend.c | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +diff --git a/net/ipv4/fib_frontend.c b/net/ipv4/fib_frontend.c +index 8a9246deccfe..63566ec54794 100644 +--- a/net/ipv4/fib_frontend.c ++++ b/net/ipv4/fib_frontend.c +@@ -904,7 +904,11 @@ void fib_del_ifaddr(struct in_ifaddr *ifa, struct in_ifaddr *iprim) + if (ifa->ifa_flags & IFA_F_SECONDARY) { + prim = inet_ifa_byprefix(in_dev, any, ifa->ifa_mask); + if (!prim) { +- pr_warn("%s: bug: prim == NULL\n", __func__); ++ /* if the device has been deleted, we don't perform ++ * address promotion ++ */ ++ if (!in_dev->dead) ++ pr_warn("%s: bug: prim == NULL\n", __func__); + return; + } + if (iprim && iprim != prim) { +-- +2.5.5 + diff --git a/kernel.spec b/kernel.spec index d2e342038..9ce5bc628 100644 --- a/kernel.spec +++ b/kernel.spec @@ -650,6 +650,9 @@ Patch701: antenna_select.patch #rhbz 1302071 Patch702: x86-build-Build-compressed-x86-kernels-as-PIE.patch +# Follow on for CVE-2016-3156 +Patch703: ipv4-fib-don-t-warn-when-primary-address-is-missing-.patch + # END OF PATCH DEFINITIONS %endif From a5f6e99b8358d942db45cec03c352d106451c208 Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Tue, 26 Apr 2016 11:09:38 -0400 Subject: [PATCH 055/275] Enable IEEE802154_AT86RF230 on more arches (rhbz 1330356) --- config-armv7-generic | 1 - config-generic | 4 ++-- kernel.spec | 3 +++ 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/config-armv7-generic b/config-armv7-generic index 846667598..54f79c962 100644 --- a/config-armv7-generic +++ b/config-armv7-generic @@ -711,7 +711,6 @@ CONFIG_LIBERTAS_SPI=m CONFIG_P54_SPI=m CONFIG_P54_SPI_DEFAULT_EEPROM=n CONFIG_MICREL_KS8995MA=m -CONFIG_IEEE802154_AT86RF230=m CONFIG_IEEE802154_MRF24J40=m CONFIG_ARM_KPROBES_TEST=m diff --git a/config-generic b/config-generic index c03972816..8e6a0ddf6 100644 --- a/config-generic +++ b/config-generic @@ -1983,11 +1983,11 @@ CONFIG_IEEE802154_DRIVERS=m CONFIG_IEEE802154_FAKELB=m CONFIG_IEEE802154_ATUSB=m CONFIG_IEEE802154_CC2520=m -# CONFIG_IEEE802154_AT86RF230 is not set +CONFIG_IEEE802154_AT86RF230=m +# CONFIG_IEEE802154_AT86RF230_DEBUGFS is not set # CONFIG_IEEE802154_ADF7242 is not set # CONFIG_IEEE802154_MRF24J40 is not set # CONFIG_IEEE802154_NL802154_EXPERIMENTAL is not set -# CONFIG_IEEE802154_AT86RF230_DEBUGFS is not set CONFIG_MAC802154=m CONFIG_NET_MPLS_GSO=m diff --git a/kernel.spec b/kernel.spec index 9ce5bc628..3635e6a90 100644 --- a/kernel.spec +++ b/kernel.spec @@ -2174,6 +2174,9 @@ fi # # %changelog +* Tue Apr 26 2016 Josh Boyer +- Enable IEEE802154_AT86RF230 on more arches (rhbz 1330356) + * Thu Apr 21 2016 Justin M. Forbes - 4.5.2-301 - Build 32bit x86 compressed kernels as PIE (rhbz 1302071) From 1182fce9ed5857e87813609b09f8e5b23e8970bb Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Tue, 26 Apr 2016 12:17:34 -0500 Subject: [PATCH 056/275] Change CONFIG_DW_DMAC to built-in to fix sound on some intel platforms --- config-x86_64-generic | 3 +++ kernel.spec | 4 ++++ rebase-notes.txt | 6 +++--- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/config-x86_64-generic b/config-x86_64-generic index 8d8b27519..5d0f7b2b2 100644 --- a/config-x86_64-generic +++ b/config-x86_64-generic @@ -231,3 +231,6 @@ CONFIG_INFINIBAND_HFI1=m CONFIG_HFI1_VERBS_31BIT_PSN=y # CONFIG_SDMA_VERBOSITY is not set # CONFIG_PRESCAN_RXQ is not set + +# Temporary workaround until SND_SOC_INTEL_HASWELL_MACH no longer requires builtin +CONFIG_DW_DMAC=y diff --git a/kernel.spec b/kernel.spec index 3635e6a90..43c8bfa3d 100644 --- a/kernel.spec +++ b/kernel.spec @@ -2174,6 +2174,10 @@ fi # # %changelog +* Tue Apr 26 2016 Justin M. Forbes +- Change CONFIG_DW_DMAC to built-in to fix sound on some intel platforms + This needs to be revisited later. + * Tue Apr 26 2016 Josh Boyer - Enable IEEE802154_AT86RF230 on more arches (rhbz 1330356) diff --git a/rebase-notes.txt b/rebase-notes.txt index 0d7d76f2d..1cc632157 100644 --- a/rebase-notes.txt +++ b/rebase-notes.txt @@ -1,8 +1,8 @@ Linux 4.5 rebase notes: -- Check on status of drm-i915-turn-off-wc-mmaps.patch -- Check on status of disabled ZONE_DMA -- Check on status of CONFIG_DW_DMAC_CORE +- Check on status of drm-i915-turn-off-wc-mmaps.patch (Should be okay to remove in F24, but not F22 or F23) +- Check on status of disabled ZONE_DMA (They can now coexist with ZONE_DEVICE) +- Check on status of CONFIG_DW_DMAC_CORE ( Built-in DW_DMAC for now, revisit later) Linux 4.4 rebase notes: From bfeccd5029dc06a5cc10b1fe22f57c825d02c63c Mon Sep 17 00:00:00 2001 From: Lubomir Rintel Date: Mon, 11 Jan 2016 11:35:49 +0100 Subject: [PATCH 057/275] Add armv6hl-based Raspberry Pi --- Makefile.config | 7 ++ config-armv6 | 246 ++++++++++++++++++++++++++++++++++++++++++++++ filter-armv6hl.sh | 14 +++ kernel.spec | 9 +- 4 files changed, 275 insertions(+), 1 deletion(-) create mode 100644 config-armv6 create mode 100644 filter-armv6hl.sh diff --git a/Makefile.config b/Makefile.config index 148e21fef..87fb20e71 100644 --- a/Makefile.config +++ b/Makefile.config @@ -10,6 +10,7 @@ CONFIGFILES = \ $(CFG)-x86_64.config $(CFG)-x86_64-debug.config \ $(CFG)-s390x.config \ $(CFG)-armv7hl.config $(CFG)-armv7hl-lpae.config \ + $(CFG)-armv6hl.config \ $(CFG)-aarch64.config \ $(CFG)-ppc64.config $(CFG)-ppc64p7.config $(CFG)-ppc64-debug.config \ $(CFG)-ppc64le.config $(CFG)-ppc64le-debug.config @@ -47,6 +48,9 @@ temp-armv7: config-armv7 temp-armv7-generic temp-armv7-lpae: config-armv7-lpae temp-armv7-generic perl merge.pl $^ > $@ +temp-armv6: config-armv6 temp-arm-generic + perl merge.pl $^ > $@ + temp-arm-debug-generic: temp-arm-generic temp-debug-generic perl merge.pl $^ > $@ @@ -122,6 +126,9 @@ $(CFG)-s390x.config: config-s390x temp-s390-generic $(CFG)-armv7hl.config: /dev/null temp-armv7 perl merge.pl $^ arm > $@ +$(CFG)-armv6hl.config: /dev/null temp-armv6 + perl merge.pl $^ arm > $@ + $(CFG)-armv7hl-lpae.config: /dev/null temp-armv7-lpae perl merge.pl $^ arm > $@ diff --git a/config-armv6 b/config-armv6 new file mode 100644 index 000000000..57bc72cdf --- /dev/null +++ b/config-armv6 @@ -0,0 +1,246 @@ +# arm configs for armv6-based Raspberry Pi +# Generic ARM config options +CONFIG_ARM=y + +CONFIG_ARCH_MULTI_V6=y +# CONFIG_ARCH_MULTI_V7 is not set + +CONFIG_CMDLINE="" +CONFIG_AEABI=y +CONFIG_VFP=y + +CONFIG_ARM_UNWIND=y +CONFIG_ARM_THUMB=y +CONFIG_ARM_DMA_MEM_BUFFERABLE=y +# CONFIG_CACHE_L2X0 is not set +CONFIG_ATAGS=y +CONFIG_ATAGS_PROC=y +CONFIG_ATAGS_PROC=y +CONFIG_ZBOOT_ROM_TEXT=0 +CONFIG_ZBOOT_ROM_BSS=0 +CONFIG_XZ_DEC_ARMTHUMB=y +CONFIG_CPU_SW_DOMAIN_PAN=y + +# CONFIG_OABI_COMPAT is not set +# CONFIG_APM_EMULATION is not set +# CONFIG_CPU_ICACHE_DISABLE is not set +# CONFIG_CPU_DCACHE_DISABLE is not set +# CONFIG_CPU_BPREDICT_DISABLE is not set +# CONFIG_HVC_DCC is not set + +# We only enable Raspberry Pi for this ARMv6 kernel +CONFIG_ARCH_BCM=y +CONFIG_ARCH_BCM2835=y +# CONFIG_ARCH_REALVIEW is not set +# CONFIG_ARCH_CNS3XXX is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_MXC is not set +# CONFIG_ARCH_OMAP2 is not set +# CONFIG_ARCH_PICOXCELL is not set +# CONFIG_ARCH_S3C64XX is not set +# CONFIG_ARCH_WM8750 is not set +# CONFIG_SOC_BRCMSTB is not set + +# generic that deviates from or should be merged into config-generic +# CONFIG_HIGHMEM is not set +# CONFIG_ARM_MODULE_PLTS is not set + +# Power management / thermal / cpu scaling +# CONFIG_THERMAL is not set +CONFIG_CPUFREQ_DT=m +CONFIG_PM_DEVFREQ=y +CONFIG_PM_DEVFREQ_EVENT=y +CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND=y +CONFIG_DEVFREQ_GOV_PERFORMANCE=y +CONFIG_DEVFREQ_GOV_POWERSAVE=y +CONFIG_DEVFREQ_GOV_USERSPACE=y + +# CONFIG_PCI_LAYERSCAPE is not set +# Do NOT enable this, it breaks stuff and makes things go slow +# CONFIG_UACCESS_WITH_MEMCPY is not set + +CONFIG_LBDAF=y + +# Device tree +# CONFIG_ARM_APPENDED_DTB is not set + +# Raspberry Pi +CONFIG_HW_RANDOM_BCM2835=m +CONFIG_I2C_BCM2835=m +CONFIG_SPI_BCM2835=m +CONFIG_SPI_BCM2835AUX=m +CONFIG_BCM2835_WDT=m +CONFIG_DRM_VC4=m +CONFIG_SND_BCM2835_SOC_I2S=m +CONFIG_MMC_SDHCI_BCM2835=m +CONFIG_DMA_BCM2835=m +CONFIG_BCM2835_MBOX=m +CONFIG_PWM_BCM2835=m +CONFIG_RASPBERRYPI_FIRMWARE=m +CONFIG_SERIAL_8250_BCM2835AUX=y +CONFIG_MMC_SDHCI_IPROC=m + +# Multifunction Devices +# CONFIG_MFD_TPS65912_SPI is not set +# CONFIG_MFD_DA9052_SPI is not set +# CONFIG_MFD_ARIZONA_SPI is not set +# CONFIG_MFD_WM831X_SPI is not set +# CONFIG_MFD_MC13XXX_SPI is not set +# CONFIG_MFD_PM8921_CORE is not set +# CONFIG_MFD_T7L66XB is not set +# CONFIG_MFD_TC6387XB is not set + +# Pin stuff +# CONFIG_PINCTRL_AMD is not set + +# GPIO +# CONFIG_GPIO_EM is not set +CONFIG_GPIO_74X164=m +CONFIG_GPIO_MAX7301=m +CONFIG_GPIO_MC33880=m +# CONFIG_GPIO_ZEVIO is not set +CONFIG_LEDS_GPIO=m +CONFIG_INPUT_GPIO_BEEPER=m +CONFIG_INPUT_GPIO_TILT_POLLED=m +CONFIG_INPUT_MATRIXKMAP=m +CONFIG_KEYBOARD_MATRIX=m + +# SPI +CONFIG_SPI=y +CONFIG_SPI_GPIO=m +CONFIG_SPI_SPIDEV=m +# CONFIG_SPI_ALTERA is not set +CONFIG_SPI_BITBANG=m +# CONFIG_SPI_DESIGNWARE is not set +# CONFIG_SPI_OC_TINY is not set +# CONFIG_SPI_SC18IS602 is not set +# CONFIG_SPI_TLE62X0 is not set +# CONFIG_SPI_XCOMM is not set +# CONFIG_SPI_FSL_SPI is not set +# CONFIG_SPI_CADENCE is not set +# CONFIG_SPI_ZYNQMP_GQSPI is not set + +# MTD +# CONFIG_MG_DISK is not set +CONFIG_MTD_DATAFLASH=m +CONFIG_MTD_DATAFLASH_WRITE_VERIFY=y +CONFIG_MTD_DATAFLASH_OTP=y +CONFIG_MTD_SST25L=m +CONFIG_EEPROM_AT25=m +CONFIG_EEPROM_93XX46=m + +# Sound +# CONFIG_SND_ARM is not set +# CONFIG_SND_SOC_AC97_CODEC is not set +# CONFIG_SND_SUN4I_CODEC is not set +# CONFIG_SND_SOC_TAS571X is not set + +# RTC +CONFIG_RTC_DRV_DS1305=m +CONFIG_RTC_DRV_DS1347=m +CONFIG_RTC_DRV_DS1390=m +CONFIG_RTC_DRV_DS3234=m +CONFIG_RTC_DRV_M41T93=m +CONFIG_RTC_DRV_M41T94=m +CONFIG_RTC_DRV_MAX6902=m +CONFIG_RTC_DRV_PCF2123=m +CONFIG_RTC_DRV_PL030=m +CONFIG_RTC_DRV_R9701=m +CONFIG_RTC_DRV_RS5C348=m +CONFIG_RTC_DRV_RX4581=m + +CONFIG_CHARGER_GPIO=m +CONFIG_GENERIC_ADC_BATTERY=m + +# Sensors +CONFIG_SENSORS_AD7314=m +CONFIG_SENSORS_ADCXX=m +CONFIG_SENSORS_ADS7871=m +CONFIG_SENSORS_LIS3_SPI=m +CONFIG_SENSORS_LM70=m +CONFIG_SENSORS_MAX1111=m + +# Displays +CONFIG_LCD_L4F00242T03=m +CONFIG_LCD_LMS283GF05=m +CONFIG_LCD_LTV350QV=m +CONFIG_LCD_ILI922X=m +CONFIG_LCD_ILI9320=m +CONFIG_LCD_TDO24M=m +CONFIG_LCD_VGG2432A4=m +CONFIG_LCD_S6E63M0=m +CONFIG_LCD_LD9040=m +CONFIG_LCD_AMS369FG06=m +CONFIG_LCD_LMS501KF03=m +CONFIG_LCD_HX8357=m +CONFIG_TOUCHSCREEN_ADS7846=m +CONFIG_TOUCHSCREEN_AD7877=m +CONFIG_TOUCHSCREEN_TSC2005=m + +CONFIG_LEDS_TRIGGER_CPU=y +CONFIG_LEDS_DAC124S085=m +CONFIG_LEDS_PWM=m +CONFIG_LEDS_SYSCON=y + +CONFIG_POWER_RESET_SYSCON=y + +# Network +CONFIG_KS8851=m +CONFIG_LIBERTAS_SPI=m +CONFIG_P54_SPI=m +# CONFIG_P54_SPI_DEFAULT_EEPROM is not set +CONFIG_MICREL_KS8995MA=m +# CONFIG_NET_VENDOR_CIRRUS is not set +CONFIG_NET_VENDOR_MICROCHIP=y +CONFIG_ENCX24J600=m +CONFIG_IEEE802154_AT86RF230=m +CONFIG_IEEE802154_MRF24J40=m + +# CAN drivers +# CONFIG_CAN_TI_HECC is not set +# CONFIG_CAN_FLEXCAN is not set +# CONFIG_CAN_RCAR is not set +# CONFIG_CAN_MCP251X is not set + +# Needs work/investigation +# CONFIG_ARM_KPROBES_TEST is not set + +# Not needed on Raspberry Pi +# CONFIG_DRM_TILCDC is not set +# CONFIG_DRM_STI is not set +# CONFIG_DRM_FSL_DCU is not set +# CONFIG_DRM_OMAP is not set +# CONFIG_DRM_EXYNOS is not set +# CONFIG_MFD_T7L66XB is not set +# CONFIG_MFD_TC6387XB is not set +# CONFIG_EZX_PCAP is not set +# CONFIG_DM9000 is not set +# CONFIG_DEPRECATED_PARAM_STRUCT is not set +# CONFIG_SERIAL_8250_EM is not set +# CONFIG_SERIAL_BCM63XX is not set +# CONFIG_SERIAL_STM32 is not set +# CONFIG_SERIAL_AMBA_PL010 is not set +# CONFIG_BRCMSTB_GISB_ARB is not set +# CONFIG_AMBA_PL08X is not set +# CONFIG_EDAC is not set +# CONFIG_AX88796 is not set + +# CONFIG_POWER_RESET_BRCMSTB is not set +# CONFIG_CLK_QORIQ is not set +# CONFIG_QORIQ_CPUFREQ is not set + +# Debug options. We need to deal with them at some point like x86 +# CONFIG_DEBUG_USER is not set +CONFIG_DEBUG_LL=y +CONFIG_DEBUG_LL_INCLUDE="debug/pl01x.S" +CONFIG_DEBUG_UART_PHYS=0x20201000 +CONFIG_DEBUG_UART_VIRT=0xf0201000 +# CONFIG_ARM_KERNMEM_PERMS is not set + +# CONFIG_VFIO_PLATFORM_AMDXGBE_RESET is not set + +# Altera? +# CONFIG_PCIE_ALTERA is not set + +# CONFIG_VEXPRESS_CONFIG is not set +# CONFIG_AM335X_PHY_USB is not set diff --git a/filter-armv6hl.sh b/filter-armv6hl.sh new file mode 100644 index 000000000..d02baab52 --- /dev/null +++ b/filter-armv6hl.sh @@ -0,0 +1,14 @@ +#! /bin/bash + +# This is the armv6hl override file for the core/drivers package split. The +# module directories listed here and in the generic list in filter-modules.sh +# will be moved to the resulting kernel-modules package for this arch. +# Anything not listed in those files will be in the kernel-core package. +# +# Please review the default list in filter-modules.sh before making +# modifications to the overrides below. If something should be removed across +# all arches, remove it in the default instead of per-arch. + +# There's some hwmon drivers that use iio, and we filter out iio in filter-modules.sh +# We probably don't want anything from there on a Raspberry Pi anyway +driverdirs="$driverdirs hwmon extcon" diff --git a/kernel.spec b/kernel.spec index 43c8bfa3d..8ca41c185 100644 --- a/kernel.spec +++ b/kernel.spec @@ -25,6 +25,7 @@ Summary: The Linux kernel %endif # define buildid .local +%define buildid .pi1 # baserelease defines which build revision of this kernel version we're # building. We used to call this fedora_build, but the magical name @@ -293,7 +294,7 @@ Summary: The Linux kernel %define kernel_mflags KALLSYMS_EXTRA_PASS=1 # we only build headers/perf/tools on the base arm arches # just like we used to only build them on i386 for x86 -%ifnarch armv7hl +%ifnarch armv6hl armv7hl %define with_headers 0 %define with_cross_headers 0 %define with_perf 0 @@ -414,6 +415,7 @@ Source15: merge.pl Source16: mod-extra.list Source17: mod-extra.sh Source18: mod-sign.sh +Source89: filter-armv6hl.sh Source90: filter-x86_64.sh Source91: filter-armv7hl.sh Source92: filter-i686.sh @@ -452,6 +454,8 @@ Source101: config-armv7-generic Source102: config-armv7 Source103: config-armv7-lpae +Source105: config-armv6 + Source110: config-arm64 # This file is intentionally left empty in the stock kernel. Its a nicety @@ -2174,6 +2178,9 @@ fi # # %changelog +* Tue Apr 26 2016 Lubomir Rintel - 4.5.1-300.pi1 +- Build for bcm2835/rpi + * Tue Apr 26 2016 Justin M. Forbes - Change CONFIG_DW_DMAC to built-in to fix sound on some intel platforms This needs to be revisited later. From 5f525a07f17a2be240921ba0da77c4bd05fb8f1c Mon Sep 17 00:00:00 2001 From: Lubomir Rintel Date: Sun, 14 Feb 2016 19:45:08 +0100 Subject: [PATCH 058/275] Add model Zero dts --- ...ARM-bcm2835-dt-Add-Raspberry-Pi-Zero.patch | 59 +++++++++++++++++++ kernel.spec | 3 + 2 files changed, 62 insertions(+) create mode 100644 0001-ARM-bcm2835-dt-Add-Raspberry-Pi-Zero.patch diff --git a/0001-ARM-bcm2835-dt-Add-Raspberry-Pi-Zero.patch b/0001-ARM-bcm2835-dt-Add-Raspberry-Pi-Zero.patch new file mode 100644 index 000000000..be5330a33 --- /dev/null +++ b/0001-ARM-bcm2835-dt-Add-Raspberry-Pi-Zero.patch @@ -0,0 +1,59 @@ +From d9be5aeb6f4024e4fef844003b031ef008f79807 Mon Sep 17 00:00:00 2001 +From: Lubomir Rintel +Date: Tue, 2 Feb 2016 11:22:26 +0100 +Subject: [PATCH 1/4] ARM: bcm2835: dt: Add Raspberry Pi Zero + +Notable difference from the other Raspberry Pi boards is the lack of PWR LED. + +Signed-off-by: Lubomir Rintel +--- + arch/arm/boot/dts/Makefile | 1 + + arch/arm/boot/dts/bcm2835-rpi-zero.dts | 24 ++++++++++++++++++++++++ + 2 files changed, 25 insertions(+) + create mode 100644 arch/arm/boot/dts/bcm2835-rpi-zero.dts + +diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile +index a8a0767..6db8ef8 100644 +--- a/arch/arm/boot/dts/Makefile ++++ b/arch/arm/boot/dts/Makefile +@@ -64,6 +64,7 @@ dtb-$(CONFIG_ARCH_BCM2835) += \ + bcm2835-rpi-b-rev2.dtb \ + bcm2835-rpi-b-plus.dtb \ + bcm2835-rpi-a-plus.dtb \ ++ bcm2835-rpi-zero.dtb \ + bcm2836-rpi-2-b.dtb \ + bcm2837-rpi-3-b.dtb + dtb-$(CONFIG_ARCH_BCM_5301X) += \ +diff --git a/arch/arm/boot/dts/bcm2835-rpi-zero.dts b/arch/arm/boot/dts/bcm2835-rpi-zero.dts +new file mode 100644 +index 0000000..f9afc1a +--- /dev/null ++++ b/arch/arm/boot/dts/bcm2835-rpi-zero.dts +@@ -0,0 +1,24 @@ ++/dts-v1/; ++#include "bcm2835.dtsi" ++#include "bcm2835-rpi.dtsi" ++ ++/ { ++ compatible = "raspberrypi,model-zero", "brcm,bcm2835"; ++ model = "Raspberry Pi Zero"; ++ ++ leds { ++ act { ++ gpios = <&gpio 47 0>; ++ }; ++ }; ++}; ++ ++&gpio { ++ pinctrl-0 = <&gpioout &alt0 &i2s_alt0 &alt3>; ++ ++ /* I2S interface */ ++ i2s_alt0: i2s_alt0 { ++ brcm,pins = <18 19 20 21>; ++ brcm,function = ; ++ }; ++}; +-- +2.5.5 + diff --git a/kernel.spec b/kernel.spec index 8ca41c185..5e4b49f39 100644 --- a/kernel.spec +++ b/kernel.spec @@ -657,6 +657,8 @@ Patch702: x86-build-Build-compressed-x86-kernels-as-PIE.patch # Follow on for CVE-2016-3156 Patch703: ipv4-fib-don-t-warn-when-primary-address-is-missing-.patch +Patch66601: 0001-ARM-bcm2835-dt-Add-Raspberry-Pi-Zero.patch + # END OF PATCH DEFINITIONS %endif @@ -2180,6 +2182,7 @@ fi %changelog * Tue Apr 26 2016 Lubomir Rintel - 4.5.1-300.pi1 - Build for bcm2835/rpi +- Add Raspberry Pi Zero dts * Tue Apr 26 2016 Justin M. Forbes - Change CONFIG_DW_DMAC to built-in to fix sound on some intel platforms From 0ffad22231f344210755ff2a6a5a419648c62a20 Mon Sep 17 00:00:00 2001 From: Lubomir Rintel Date: Sun, 14 Feb 2016 19:45:01 +0100 Subject: [PATCH 059/275] Use stable MAC address for rpi boards with ethernet --- ...Add-the-ethernet-to-the-device-trees.patch | 105 ++++++++++ ...core-let-USB-device-know-device-node.patch | 186 ++++++++++++++++++ ...-use-the-device-tree-for-mac-address.patch | 104 ++++++++++ kernel.spec | 4 + 4 files changed, 399 insertions(+) create mode 100644 0002-ARM-bcm2835-dt-Add-the-ethernet-to-the-device-trees.patch create mode 100644 0003-USB-core-let-USB-device-know-device-node.patch create mode 100644 0004-net-smscx5xx-use-the-device-tree-for-mac-address.patch diff --git a/0002-ARM-bcm2835-dt-Add-the-ethernet-to-the-device-trees.patch b/0002-ARM-bcm2835-dt-Add-the-ethernet-to-the-device-trees.patch new file mode 100644 index 000000000..fd23a0e4a --- /dev/null +++ b/0002-ARM-bcm2835-dt-Add-the-ethernet-to-the-device-trees.patch @@ -0,0 +1,105 @@ +From 60aa7209a0e3194208ae6d58145c28e3c951ca50 Mon Sep 17 00:00:00 2001 +From: Lubomir Rintel +Date: Wed, 3 Feb 2016 14:12:54 +0100 +Subject: [PATCH 2/4] ARM: bcm2835: dt: Add the ethernet to the device trees + +The hub and the ethernet in its port 1 are hardwired on the board. + +Compared to the adapters that can be plugged into the USB ports, this +one has no serial EEPROM to store its MAC. Nevertheless, the Raspberry Pi +has the MAC address for this adapter in its ROM, accessible from its +firmware. + +U-Boot can read out the address and set the local-mac-address property of the +node with "ethernet" alias. Let's add the node so that U-Boot can do its +business. + +Signed-off-by: Lubomir Rintel +--- + arch/arm/boot/dts/bcm2835-rpi-b-plus.dts | 18 ++++++++++++++++++ + arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts | 18 ++++++++++++++++++ + arch/arm/boot/dts/bcm283x.dtsi | 2 ++ + 3 files changed, 38 insertions(+) + +diff --git a/arch/arm/boot/dts/bcm2835-rpi-b-plus.dts b/arch/arm/boot/dts/bcm2835-rpi-b-plus.dts +index 57d313b..160ac85 100644 +--- a/arch/arm/boot/dts/bcm2835-rpi-b-plus.dts ++++ b/arch/arm/boot/dts/bcm2835-rpi-b-plus.dts +@@ -6,6 +6,10 @@ + compatible = "raspberrypi,model-b-plus", "brcm,bcm2835"; + model = "Raspberry Pi Model B+"; + ++ aliases { ++ ethernet = ðernet; ++ }; ++ + leds { + act { + gpios = <&gpio 47 0>; +@@ -33,3 +37,17 @@ + &hdmi { + hpd-gpios = <&gpio 46 GPIO_ACTIVE_LOW>; + }; ++ ++&usb { ++ usb1@01 { ++ compatible = "usb0424,9514"; ++ reg = <01>; ++ #address-cells = <1>; ++ #size-cells = <0>; ++ ++ ethernet: usbether@01 { ++ compatible = "usb0424,ec00"; ++ reg = <01>; ++ }; ++ }; ++}; +diff --git a/arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts b/arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts +index cf2774e..081dc56 100644 +--- a/arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts ++++ b/arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts +@@ -6,6 +6,10 @@ + compatible = "raspberrypi,model-b-rev2", "brcm,bcm2835"; + model = "Raspberry Pi Model B rev2"; + ++ aliases { ++ ethernet = ðernet; ++ }; ++ + leds { + act { + gpios = <&gpio 16 1>; +@@ -26,3 +30,17 @@ + &hdmi { + hpd-gpios = <&gpio 46 GPIO_ACTIVE_LOW>; + }; ++ ++&usb { ++ usb1@01 { ++ compatible = "usb0424,9512"; ++ reg = <01>; ++ #address-cells = <1>; ++ #size-cells = <0>; ++ ++ ethernet: usbether@01 { ++ compatible = "usb0424,ec00"; ++ reg = <01>; ++ }; ++ }; ++}; +diff --git a/arch/arm/boot/dts/bcm283x.dtsi b/arch/arm/boot/dts/bcm283x.dtsi +index 31cc2f2..2f1e7de 100644 +--- a/arch/arm/boot/dts/bcm283x.dtsi ++++ b/arch/arm/boot/dts/bcm283x.dtsi +@@ -267,6 +267,8 @@ + compatible = "brcm,bcm2835-usb"; + reg = <0x7e980000 0x10000>; + interrupts = <1 9>; ++ #address-cells = <1>; ++ #size-cells = <0>; + }; + + v3d: v3d@7ec00000 { +-- +2.5.5 + diff --git a/0003-USB-core-let-USB-device-know-device-node.patch b/0003-USB-core-let-USB-device-know-device-node.patch new file mode 100644 index 000000000..f4b518e69 --- /dev/null +++ b/0003-USB-core-let-USB-device-know-device-node.patch @@ -0,0 +1,186 @@ +From 5ab960c506a1cd60fe3079ec5c234605388fd166 Mon Sep 17 00:00:00 2001 +From: Peter Chen +Date: Mon, 25 Jan 2016 07:24:39 +0100 +Subject: [PATCH 3/4] USB: core: let USB device know device node + +Although most of USB devices are hot-plug's, there are still some devices +are hard wired on the board, eg, for HSIC and SSIC interface USB devices. +If these kinds of USB devices are multiple functions, and they can supply +other interfaces like i2c, gpios for other devices, we may need to +describe these at device tree. + +In this commit, it uses "reg" in dts as physical port number to match +the phyiscal port number decided by USB core, if they are the same, +then the device node is for the device we are creating for USB core. + +Signed-off-by: Peter Chen +--- + .../devicetree/bindings/usb/usb-device.txt | 25 ++++++++++++ + drivers/usb/core/Makefile | 2 +- + drivers/usb/core/of.c | 47 ++++++++++++++++++++++ + drivers/usb/core/usb.c | 14 ++++++- + include/linux/usb/of.h | 7 ++++ + 5 files changed, 92 insertions(+), 3 deletions(-) + create mode 100644 Documentation/devicetree/bindings/usb/usb-device.txt + create mode 100644 drivers/usb/core/of.c + +diff --git a/Documentation/devicetree/bindings/usb/usb-device.txt b/Documentation/devicetree/bindings/usb/usb-device.txt +new file mode 100644 +index 0000000..c702885 +--- /dev/null ++++ b/Documentation/devicetree/bindings/usb/usb-device.txt +@@ -0,0 +1,25 @@ ++Generic USB Device Properties ++ ++Usually, we only use device tree for hard wired USB device. ++The reference binding doc is from: ++http://www.firmware.org/1275/bindings/usb/usb-1_0.ps ++ ++Required properties: ++- compatible: usbVID,PID ++- reg: the port number which this device is connecting to, the range ++ is 1-31. ++ ++ ++Example: ++ ++&usb1 { ++ status = "okay"; ++ ++ #address-cells = <1>; ++ #size-cells = <0>; ++ ++ hub: genesys@1 { ++ compatible = "usb05e3,0608"; ++ reg = <0x1>; ++ }; ++} +diff --git a/drivers/usb/core/Makefile b/drivers/usb/core/Makefile +index 2f6f932..9780877 100644 +--- a/drivers/usb/core/Makefile ++++ b/drivers/usb/core/Makefile +@@ -5,7 +5,7 @@ + usbcore-y := usb.o hub.o hcd.o urb.o message.o driver.o + usbcore-y += config.o file.o buffer.o sysfs.o endpoint.o + usbcore-y += devio.o notify.o generic.o quirks.o devices.o +-usbcore-y += port.o ++usbcore-y += port.o of.o + + usbcore-$(CONFIG_PCI) += hcd-pci.o + usbcore-$(CONFIG_ACPI) += usb-acpi.o +diff --git a/drivers/usb/core/of.c b/drivers/usb/core/of.c +new file mode 100644 +index 0000000..2289700 +--- /dev/null ++++ b/drivers/usb/core/of.c +@@ -0,0 +1,47 @@ ++/* ++ * of.c The helpers for hcd device tree support ++ * ++ * Copyright (C) 2016 Freescale Semiconductor, Inc. ++ * Author: Peter Chen ++ * ++ * This program is free software: you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 of ++ * the License as published by the Free Software Foundation. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program. If not, see . ++ */ ++ ++#include ++ ++/** ++ * usb_of_get_child_node - Find the device node match port number ++ * @parent: the parent device node ++ * @portnum: the port number which device is connecting ++ * ++ * Find the node from device tree according to its port number. ++ * ++ * Return: On success, a pointer to the device node, %NULL on failure. ++ */ ++struct device_node *usb_of_get_child_node(struct device_node *parent, ++ int portnum) ++{ ++ struct device_node *node; ++ u32 port; ++ ++ for_each_child_of_node(parent, node) { ++ if (!of_property_read_u32(node, "reg", &port)) { ++ if (port == portnum) ++ return node; ++ } ++ } ++ ++ return NULL; ++} ++EXPORT_SYMBOL_GPL(usb_of_get_child_node); ++ +diff --git a/drivers/usb/core/usb.c b/drivers/usb/core/usb.c +index ebb29ca..25d9770 100644 +--- a/drivers/usb/core/usb.c ++++ b/drivers/usb/core/usb.c +@@ -36,6 +36,7 @@ + #include + #include + #include ++#include + + #include + #include +@@ -508,11 +509,20 @@ struct usb_device *usb_alloc_dev(struct usb_device *parent, + dev->connect_time = jiffies; + dev->active_duration = -jiffies; + #endif +- if (root_hub) /* Root hub always ok [and always wired] */ ++ if (root_hub) { /* Root hub always ok [and always wired] */ + dev->authorized = 1; +- else { ++ dev->dev.of_node = bus->controller->of_node; ++ } else { + dev->authorized = !!HCD_DEV_AUTHORIZED(usb_hcd); + dev->wusb = usb_bus_is_wusb(bus) ? 1 : 0; ++ ++ if (dev->dev.parent->parent == bus->controller) ++ /* device under root hub's port */ ++ port1 = usb_hcd_find_raw_port_number(usb_hcd, ++ port1); ++ ++ dev->dev.of_node = usb_of_get_child_node(parent->dev.of_node, ++ port1); + } + return dev; + } +diff --git a/include/linux/usb/of.h b/include/linux/usb/of.h +index 974bce9..de3237f 100644 +--- a/include/linux/usb/of.h ++++ b/include/linux/usb/of.h +@@ -16,6 +16,8 @@ enum usb_dr_mode of_usb_get_dr_mode_by_phy(struct device_node *phy_np); + bool of_usb_host_tpl_support(struct device_node *np); + int of_usb_update_otg_caps(struct device_node *np, + struct usb_otg_caps *otg_caps); ++struct device_node *usb_of_get_child_node(struct device_node *parent, ++ int portnum); + #else + static inline enum usb_dr_mode + of_usb_get_dr_mode_by_phy(struct device_node *phy_np) +@@ -31,6 +33,11 @@ static inline int of_usb_update_otg_caps(struct device_node *np, + { + return 0; + } ++static inline struct device_node *usb_of_get_child_node ++ (struct device_node *parent, int portnum) ++{ ++ return NULL; ++} + #endif + + #if IS_ENABLED(CONFIG_OF) && IS_ENABLED(CONFIG_USB_SUPPORT) +-- +2.5.5 + diff --git a/0004-net-smscx5xx-use-the-device-tree-for-mac-address.patch b/0004-net-smscx5xx-use-the-device-tree-for-mac-address.patch new file mode 100644 index 000000000..67bb28a47 --- /dev/null +++ b/0004-net-smscx5xx-use-the-device-tree-for-mac-address.patch @@ -0,0 +1,104 @@ +From 6c9337a5cc4e9a980a14ed99da756670898c72f3 Mon Sep 17 00:00:00 2001 +From: Arnd Bergmann +Date: Sun, 31 Jan 2016 12:58:56 +0100 +Subject: [PATCH 4/4] net/smscx5xx: use the device tree for mac address + +This takes the MAC address for smsc75xx/smsc95xx USB network devices +from a the device tree. This is required to get a usable persistent +address on the popular beagleboard, whose hardware designers +accidentally forgot that an ethernet device really requires an a +MAC address to be functional. + +The Raspberry Pi also ships smsc9514 without a serial EEPROM, stores the MAC +address in ROM accessible via VC4 firmware. + +The smsc75xx and smsc95xx drivers are just two copies of the +same code, so better fix both. + +[lkundrak@v3.sk: updated to use of_get_property() as per suggestion from Arnd, +reworded the message and comments a bit] + +Tested-by: Lubomir Rintel +Signed-off-by: Arnd Bergmann +--- + drivers/net/usb/smsc75xx.c | 12 +++++++++++- + drivers/net/usb/smsc95xx.c | 12 +++++++++++- + 2 files changed, 22 insertions(+), 2 deletions(-) + +diff --git a/drivers/net/usb/smsc75xx.c b/drivers/net/usb/smsc75xx.c +index 30033db..8266e27 100644 +--- a/drivers/net/usb/smsc75xx.c ++++ b/drivers/net/usb/smsc75xx.c +@@ -29,6 +29,7 @@ + #include + #include + #include ++#include + #include "smsc75xx.h" + + #define SMSC_CHIPNAME "smsc75xx" +@@ -761,6 +762,8 @@ static int smsc75xx_ioctl(struct net_device *netdev, struct ifreq *rq, int cmd) + + static void smsc75xx_init_mac_address(struct usbnet *dev) + { ++ const u8 *mac_addr; ++ + /* try reading mac address from EEPROM */ + if (smsc75xx_read_eeprom(dev, EEPROM_MAC_OFFSET, ETH_ALEN, + dev->net->dev_addr) == 0) { +@@ -772,7 +775,14 @@ static void smsc75xx_init_mac_address(struct usbnet *dev) + } + } + +- /* no eeprom, or eeprom values are invalid. generate random MAC */ ++ /* maybe the boot loader passed the MAC address in devicetree */ ++ mac_addr = of_get_mac_address (dev->udev->dev.of_node); ++ if (mac_addr) { ++ memcpy(dev->net->dev_addr, mac_addr, ETH_ALEN); ++ return; ++ } ++ ++ /* no useful static MAC address found. generate a random one */ + eth_hw_addr_random(dev->net); + netif_dbg(dev, ifup, dev->net, "MAC address set to eth_random_addr\n"); + } +diff --git a/drivers/net/usb/smsc95xx.c b/drivers/net/usb/smsc95xx.c +index 66b3ab9..623bb2e 100644 +--- a/drivers/net/usb/smsc95xx.c ++++ b/drivers/net/usb/smsc95xx.c +@@ -29,6 +29,7 @@ + #include + #include + #include ++#include + #include "smsc95xx.h" + + #define SMSC_CHIPNAME "smsc95xx" +@@ -765,6 +766,8 @@ static int smsc95xx_ioctl(struct net_device *netdev, struct ifreq *rq, int cmd) + + static void smsc95xx_init_mac_address(struct usbnet *dev) + { ++ const u8 *mac_addr; ++ + /* try reading mac address from EEPROM */ + if (smsc95xx_read_eeprom(dev, EEPROM_MAC_OFFSET, ETH_ALEN, + dev->net->dev_addr) == 0) { +@@ -775,7 +778,14 @@ static void smsc95xx_init_mac_address(struct usbnet *dev) + } + } + +- /* no eeprom, or eeprom values are invalid. generate random MAC */ ++ /* maybe the boot loader passed the MAC address in devicetree */ ++ mac_addr = of_get_mac_address (dev->udev->dev.of_node); ++ if (mac_addr) { ++ memcpy(dev->net->dev_addr, mac_addr, ETH_ALEN); ++ return; ++ } ++ ++ /* no useful static MAC address found. generate a random one */ + eth_hw_addr_random(dev->net); + netif_dbg(dev, ifup, dev->net, "MAC address set to eth_random_addr\n"); + } +-- +2.5.5 + diff --git a/kernel.spec b/kernel.spec index 5e4b49f39..e38dc0c5f 100644 --- a/kernel.spec +++ b/kernel.spec @@ -658,6 +658,9 @@ Patch702: x86-build-Build-compressed-x86-kernels-as-PIE.patch Patch703: ipv4-fib-don-t-warn-when-primary-address-is-missing-.patch Patch66601: 0001-ARM-bcm2835-dt-Add-Raspberry-Pi-Zero.patch +Patch66602: 0002-ARM-bcm2835-dt-Add-the-ethernet-to-the-device-trees.patch +Patch66603: 0003-USB-core-let-USB-device-know-device-node.patch +Patch66604: 0004-net-smscx5xx-use-the-device-tree-for-mac-address.patch # END OF PATCH DEFINITIONS @@ -2183,6 +2186,7 @@ fi * Tue Apr 26 2016 Lubomir Rintel - 4.5.1-300.pi1 - Build for bcm2835/rpi - Add Raspberry Pi Zero dts +- Use stable MAC address for rpi boards with ethernet * Tue Apr 26 2016 Justin M. Forbes - Change CONFIG_DW_DMAC to built-in to fix sound on some intel platforms From 292e197a03b3a9c266e6570da61c17cf53ddb51b Mon Sep 17 00:00:00 2001 From: Lubomir Rintel Date: Tue, 26 Apr 2016 21:19:13 +0200 Subject: [PATCH 060/275] Revert "Use stable MAC address for rpi boards with ethernet" This reverts commit 0ffad22231f344210755ff2a6a5a419648c62a20. --- ...Add-the-ethernet-to-the-device-trees.patch | 105 ---------- ...core-let-USB-device-know-device-node.patch | 186 ------------------ ...-use-the-device-tree-for-mac-address.patch | 104 ---------- kernel.spec | 4 - 4 files changed, 399 deletions(-) delete mode 100644 0002-ARM-bcm2835-dt-Add-the-ethernet-to-the-device-trees.patch delete mode 100644 0003-USB-core-let-USB-device-know-device-node.patch delete mode 100644 0004-net-smscx5xx-use-the-device-tree-for-mac-address.patch diff --git a/0002-ARM-bcm2835-dt-Add-the-ethernet-to-the-device-trees.patch b/0002-ARM-bcm2835-dt-Add-the-ethernet-to-the-device-trees.patch deleted file mode 100644 index fd23a0e4a..000000000 --- a/0002-ARM-bcm2835-dt-Add-the-ethernet-to-the-device-trees.patch +++ /dev/null @@ -1,105 +0,0 @@ -From 60aa7209a0e3194208ae6d58145c28e3c951ca50 Mon Sep 17 00:00:00 2001 -From: Lubomir Rintel -Date: Wed, 3 Feb 2016 14:12:54 +0100 -Subject: [PATCH 2/4] ARM: bcm2835: dt: Add the ethernet to the device trees - -The hub and the ethernet in its port 1 are hardwired on the board. - -Compared to the adapters that can be plugged into the USB ports, this -one has no serial EEPROM to store its MAC. Nevertheless, the Raspberry Pi -has the MAC address for this adapter in its ROM, accessible from its -firmware. - -U-Boot can read out the address and set the local-mac-address property of the -node with "ethernet" alias. Let's add the node so that U-Boot can do its -business. - -Signed-off-by: Lubomir Rintel ---- - arch/arm/boot/dts/bcm2835-rpi-b-plus.dts | 18 ++++++++++++++++++ - arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts | 18 ++++++++++++++++++ - arch/arm/boot/dts/bcm283x.dtsi | 2 ++ - 3 files changed, 38 insertions(+) - -diff --git a/arch/arm/boot/dts/bcm2835-rpi-b-plus.dts b/arch/arm/boot/dts/bcm2835-rpi-b-plus.dts -index 57d313b..160ac85 100644 ---- a/arch/arm/boot/dts/bcm2835-rpi-b-plus.dts -+++ b/arch/arm/boot/dts/bcm2835-rpi-b-plus.dts -@@ -6,6 +6,10 @@ - compatible = "raspberrypi,model-b-plus", "brcm,bcm2835"; - model = "Raspberry Pi Model B+"; - -+ aliases { -+ ethernet = ðernet; -+ }; -+ - leds { - act { - gpios = <&gpio 47 0>; -@@ -33,3 +37,17 @@ - &hdmi { - hpd-gpios = <&gpio 46 GPIO_ACTIVE_LOW>; - }; -+ -+&usb { -+ usb1@01 { -+ compatible = "usb0424,9514"; -+ reg = <01>; -+ #address-cells = <1>; -+ #size-cells = <0>; -+ -+ ethernet: usbether@01 { -+ compatible = "usb0424,ec00"; -+ reg = <01>; -+ }; -+ }; -+}; -diff --git a/arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts b/arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts -index cf2774e..081dc56 100644 ---- a/arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts -+++ b/arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts -@@ -6,6 +6,10 @@ - compatible = "raspberrypi,model-b-rev2", "brcm,bcm2835"; - model = "Raspberry Pi Model B rev2"; - -+ aliases { -+ ethernet = ðernet; -+ }; -+ - leds { - act { - gpios = <&gpio 16 1>; -@@ -26,3 +30,17 @@ - &hdmi { - hpd-gpios = <&gpio 46 GPIO_ACTIVE_LOW>; - }; -+ -+&usb { -+ usb1@01 { -+ compatible = "usb0424,9512"; -+ reg = <01>; -+ #address-cells = <1>; -+ #size-cells = <0>; -+ -+ ethernet: usbether@01 { -+ compatible = "usb0424,ec00"; -+ reg = <01>; -+ }; -+ }; -+}; -diff --git a/arch/arm/boot/dts/bcm283x.dtsi b/arch/arm/boot/dts/bcm283x.dtsi -index 31cc2f2..2f1e7de 100644 ---- a/arch/arm/boot/dts/bcm283x.dtsi -+++ b/arch/arm/boot/dts/bcm283x.dtsi -@@ -267,6 +267,8 @@ - compatible = "brcm,bcm2835-usb"; - reg = <0x7e980000 0x10000>; - interrupts = <1 9>; -+ #address-cells = <1>; -+ #size-cells = <0>; - }; - - v3d: v3d@7ec00000 { --- -2.5.5 - diff --git a/0003-USB-core-let-USB-device-know-device-node.patch b/0003-USB-core-let-USB-device-know-device-node.patch deleted file mode 100644 index f4b518e69..000000000 --- a/0003-USB-core-let-USB-device-know-device-node.patch +++ /dev/null @@ -1,186 +0,0 @@ -From 5ab960c506a1cd60fe3079ec5c234605388fd166 Mon Sep 17 00:00:00 2001 -From: Peter Chen -Date: Mon, 25 Jan 2016 07:24:39 +0100 -Subject: [PATCH 3/4] USB: core: let USB device know device node - -Although most of USB devices are hot-plug's, there are still some devices -are hard wired on the board, eg, for HSIC and SSIC interface USB devices. -If these kinds of USB devices are multiple functions, and they can supply -other interfaces like i2c, gpios for other devices, we may need to -describe these at device tree. - -In this commit, it uses "reg" in dts as physical port number to match -the phyiscal port number decided by USB core, if they are the same, -then the device node is for the device we are creating for USB core. - -Signed-off-by: Peter Chen ---- - .../devicetree/bindings/usb/usb-device.txt | 25 ++++++++++++ - drivers/usb/core/Makefile | 2 +- - drivers/usb/core/of.c | 47 ++++++++++++++++++++++ - drivers/usb/core/usb.c | 14 ++++++- - include/linux/usb/of.h | 7 ++++ - 5 files changed, 92 insertions(+), 3 deletions(-) - create mode 100644 Documentation/devicetree/bindings/usb/usb-device.txt - create mode 100644 drivers/usb/core/of.c - -diff --git a/Documentation/devicetree/bindings/usb/usb-device.txt b/Documentation/devicetree/bindings/usb/usb-device.txt -new file mode 100644 -index 0000000..c702885 ---- /dev/null -+++ b/Documentation/devicetree/bindings/usb/usb-device.txt -@@ -0,0 +1,25 @@ -+Generic USB Device Properties -+ -+Usually, we only use device tree for hard wired USB device. -+The reference binding doc is from: -+http://www.firmware.org/1275/bindings/usb/usb-1_0.ps -+ -+Required properties: -+- compatible: usbVID,PID -+- reg: the port number which this device is connecting to, the range -+ is 1-31. -+ -+ -+Example: -+ -+&usb1 { -+ status = "okay"; -+ -+ #address-cells = <1>; -+ #size-cells = <0>; -+ -+ hub: genesys@1 { -+ compatible = "usb05e3,0608"; -+ reg = <0x1>; -+ }; -+} -diff --git a/drivers/usb/core/Makefile b/drivers/usb/core/Makefile -index 2f6f932..9780877 100644 ---- a/drivers/usb/core/Makefile -+++ b/drivers/usb/core/Makefile -@@ -5,7 +5,7 @@ - usbcore-y := usb.o hub.o hcd.o urb.o message.o driver.o - usbcore-y += config.o file.o buffer.o sysfs.o endpoint.o - usbcore-y += devio.o notify.o generic.o quirks.o devices.o --usbcore-y += port.o -+usbcore-y += port.o of.o - - usbcore-$(CONFIG_PCI) += hcd-pci.o - usbcore-$(CONFIG_ACPI) += usb-acpi.o -diff --git a/drivers/usb/core/of.c b/drivers/usb/core/of.c -new file mode 100644 -index 0000000..2289700 ---- /dev/null -+++ b/drivers/usb/core/of.c -@@ -0,0 +1,47 @@ -+/* -+ * of.c The helpers for hcd device tree support -+ * -+ * Copyright (C) 2016 Freescale Semiconductor, Inc. -+ * Author: Peter Chen -+ * -+ * This program is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License version 2 of -+ * the License as published by the Free Software Foundation. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program. If not, see . -+ */ -+ -+#include -+ -+/** -+ * usb_of_get_child_node - Find the device node match port number -+ * @parent: the parent device node -+ * @portnum: the port number which device is connecting -+ * -+ * Find the node from device tree according to its port number. -+ * -+ * Return: On success, a pointer to the device node, %NULL on failure. -+ */ -+struct device_node *usb_of_get_child_node(struct device_node *parent, -+ int portnum) -+{ -+ struct device_node *node; -+ u32 port; -+ -+ for_each_child_of_node(parent, node) { -+ if (!of_property_read_u32(node, "reg", &port)) { -+ if (port == portnum) -+ return node; -+ } -+ } -+ -+ return NULL; -+} -+EXPORT_SYMBOL_GPL(usb_of_get_child_node); -+ -diff --git a/drivers/usb/core/usb.c b/drivers/usb/core/usb.c -index ebb29ca..25d9770 100644 ---- a/drivers/usb/core/usb.c -+++ b/drivers/usb/core/usb.c -@@ -36,6 +36,7 @@ - #include - #include - #include -+#include - - #include - #include -@@ -508,11 +509,20 @@ struct usb_device *usb_alloc_dev(struct usb_device *parent, - dev->connect_time = jiffies; - dev->active_duration = -jiffies; - #endif -- if (root_hub) /* Root hub always ok [and always wired] */ -+ if (root_hub) { /* Root hub always ok [and always wired] */ - dev->authorized = 1; -- else { -+ dev->dev.of_node = bus->controller->of_node; -+ } else { - dev->authorized = !!HCD_DEV_AUTHORIZED(usb_hcd); - dev->wusb = usb_bus_is_wusb(bus) ? 1 : 0; -+ -+ if (dev->dev.parent->parent == bus->controller) -+ /* device under root hub's port */ -+ port1 = usb_hcd_find_raw_port_number(usb_hcd, -+ port1); -+ -+ dev->dev.of_node = usb_of_get_child_node(parent->dev.of_node, -+ port1); - } - return dev; - } -diff --git a/include/linux/usb/of.h b/include/linux/usb/of.h -index 974bce9..de3237f 100644 ---- a/include/linux/usb/of.h -+++ b/include/linux/usb/of.h -@@ -16,6 +16,8 @@ enum usb_dr_mode of_usb_get_dr_mode_by_phy(struct device_node *phy_np); - bool of_usb_host_tpl_support(struct device_node *np); - int of_usb_update_otg_caps(struct device_node *np, - struct usb_otg_caps *otg_caps); -+struct device_node *usb_of_get_child_node(struct device_node *parent, -+ int portnum); - #else - static inline enum usb_dr_mode - of_usb_get_dr_mode_by_phy(struct device_node *phy_np) -@@ -31,6 +33,11 @@ static inline int of_usb_update_otg_caps(struct device_node *np, - { - return 0; - } -+static inline struct device_node *usb_of_get_child_node -+ (struct device_node *parent, int portnum) -+{ -+ return NULL; -+} - #endif - - #if IS_ENABLED(CONFIG_OF) && IS_ENABLED(CONFIG_USB_SUPPORT) --- -2.5.5 - diff --git a/0004-net-smscx5xx-use-the-device-tree-for-mac-address.patch b/0004-net-smscx5xx-use-the-device-tree-for-mac-address.patch deleted file mode 100644 index 67bb28a47..000000000 --- a/0004-net-smscx5xx-use-the-device-tree-for-mac-address.patch +++ /dev/null @@ -1,104 +0,0 @@ -From 6c9337a5cc4e9a980a14ed99da756670898c72f3 Mon Sep 17 00:00:00 2001 -From: Arnd Bergmann -Date: Sun, 31 Jan 2016 12:58:56 +0100 -Subject: [PATCH 4/4] net/smscx5xx: use the device tree for mac address - -This takes the MAC address for smsc75xx/smsc95xx USB network devices -from a the device tree. This is required to get a usable persistent -address on the popular beagleboard, whose hardware designers -accidentally forgot that an ethernet device really requires an a -MAC address to be functional. - -The Raspberry Pi also ships smsc9514 without a serial EEPROM, stores the MAC -address in ROM accessible via VC4 firmware. - -The smsc75xx and smsc95xx drivers are just two copies of the -same code, so better fix both. - -[lkundrak@v3.sk: updated to use of_get_property() as per suggestion from Arnd, -reworded the message and comments a bit] - -Tested-by: Lubomir Rintel -Signed-off-by: Arnd Bergmann ---- - drivers/net/usb/smsc75xx.c | 12 +++++++++++- - drivers/net/usb/smsc95xx.c | 12 +++++++++++- - 2 files changed, 22 insertions(+), 2 deletions(-) - -diff --git a/drivers/net/usb/smsc75xx.c b/drivers/net/usb/smsc75xx.c -index 30033db..8266e27 100644 ---- a/drivers/net/usb/smsc75xx.c -+++ b/drivers/net/usb/smsc75xx.c -@@ -29,6 +29,7 @@ - #include - #include - #include -+#include - #include "smsc75xx.h" - - #define SMSC_CHIPNAME "smsc75xx" -@@ -761,6 +762,8 @@ static int smsc75xx_ioctl(struct net_device *netdev, struct ifreq *rq, int cmd) - - static void smsc75xx_init_mac_address(struct usbnet *dev) - { -+ const u8 *mac_addr; -+ - /* try reading mac address from EEPROM */ - if (smsc75xx_read_eeprom(dev, EEPROM_MAC_OFFSET, ETH_ALEN, - dev->net->dev_addr) == 0) { -@@ -772,7 +775,14 @@ static void smsc75xx_init_mac_address(struct usbnet *dev) - } - } - -- /* no eeprom, or eeprom values are invalid. generate random MAC */ -+ /* maybe the boot loader passed the MAC address in devicetree */ -+ mac_addr = of_get_mac_address (dev->udev->dev.of_node); -+ if (mac_addr) { -+ memcpy(dev->net->dev_addr, mac_addr, ETH_ALEN); -+ return; -+ } -+ -+ /* no useful static MAC address found. generate a random one */ - eth_hw_addr_random(dev->net); - netif_dbg(dev, ifup, dev->net, "MAC address set to eth_random_addr\n"); - } -diff --git a/drivers/net/usb/smsc95xx.c b/drivers/net/usb/smsc95xx.c -index 66b3ab9..623bb2e 100644 ---- a/drivers/net/usb/smsc95xx.c -+++ b/drivers/net/usb/smsc95xx.c -@@ -29,6 +29,7 @@ - #include - #include - #include -+#include - #include "smsc95xx.h" - - #define SMSC_CHIPNAME "smsc95xx" -@@ -765,6 +766,8 @@ static int smsc95xx_ioctl(struct net_device *netdev, struct ifreq *rq, int cmd) - - static void smsc95xx_init_mac_address(struct usbnet *dev) - { -+ const u8 *mac_addr; -+ - /* try reading mac address from EEPROM */ - if (smsc95xx_read_eeprom(dev, EEPROM_MAC_OFFSET, ETH_ALEN, - dev->net->dev_addr) == 0) { -@@ -775,7 +778,14 @@ static void smsc95xx_init_mac_address(struct usbnet *dev) - } - } - -- /* no eeprom, or eeprom values are invalid. generate random MAC */ -+ /* maybe the boot loader passed the MAC address in devicetree */ -+ mac_addr = of_get_mac_address (dev->udev->dev.of_node); -+ if (mac_addr) { -+ memcpy(dev->net->dev_addr, mac_addr, ETH_ALEN); -+ return; -+ } -+ -+ /* no useful static MAC address found. generate a random one */ - eth_hw_addr_random(dev->net); - netif_dbg(dev, ifup, dev->net, "MAC address set to eth_random_addr\n"); - } --- -2.5.5 - diff --git a/kernel.spec b/kernel.spec index e38dc0c5f..5e4b49f39 100644 --- a/kernel.spec +++ b/kernel.spec @@ -658,9 +658,6 @@ Patch702: x86-build-Build-compressed-x86-kernels-as-PIE.patch Patch703: ipv4-fib-don-t-warn-when-primary-address-is-missing-.patch Patch66601: 0001-ARM-bcm2835-dt-Add-Raspberry-Pi-Zero.patch -Patch66602: 0002-ARM-bcm2835-dt-Add-the-ethernet-to-the-device-trees.patch -Patch66603: 0003-USB-core-let-USB-device-know-device-node.patch -Patch66604: 0004-net-smscx5xx-use-the-device-tree-for-mac-address.patch # END OF PATCH DEFINITIONS @@ -2186,7 +2183,6 @@ fi * Tue Apr 26 2016 Lubomir Rintel - 4.5.1-300.pi1 - Build for bcm2835/rpi - Add Raspberry Pi Zero dts -- Use stable MAC address for rpi boards with ethernet * Tue Apr 26 2016 Justin M. Forbes - Change CONFIG_DW_DMAC to built-in to fix sound on some intel platforms From 10d8c0e75507fae599633dfb363d3e2d65286f8d Mon Sep 17 00:00:00 2001 From: Lubomir Rintel Date: Tue, 26 Apr 2016 21:19:15 +0200 Subject: [PATCH 061/275] Revert "Add model Zero dts" This reverts commit 5f525a07f17a2be240921ba0da77c4bd05fb8f1c. --- ...ARM-bcm2835-dt-Add-Raspberry-Pi-Zero.patch | 59 ------------------- kernel.spec | 3 - 2 files changed, 62 deletions(-) delete mode 100644 0001-ARM-bcm2835-dt-Add-Raspberry-Pi-Zero.patch diff --git a/0001-ARM-bcm2835-dt-Add-Raspberry-Pi-Zero.patch b/0001-ARM-bcm2835-dt-Add-Raspberry-Pi-Zero.patch deleted file mode 100644 index be5330a33..000000000 --- a/0001-ARM-bcm2835-dt-Add-Raspberry-Pi-Zero.patch +++ /dev/null @@ -1,59 +0,0 @@ -From d9be5aeb6f4024e4fef844003b031ef008f79807 Mon Sep 17 00:00:00 2001 -From: Lubomir Rintel -Date: Tue, 2 Feb 2016 11:22:26 +0100 -Subject: [PATCH 1/4] ARM: bcm2835: dt: Add Raspberry Pi Zero - -Notable difference from the other Raspberry Pi boards is the lack of PWR LED. - -Signed-off-by: Lubomir Rintel ---- - arch/arm/boot/dts/Makefile | 1 + - arch/arm/boot/dts/bcm2835-rpi-zero.dts | 24 ++++++++++++++++++++++++ - 2 files changed, 25 insertions(+) - create mode 100644 arch/arm/boot/dts/bcm2835-rpi-zero.dts - -diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile -index a8a0767..6db8ef8 100644 ---- a/arch/arm/boot/dts/Makefile -+++ b/arch/arm/boot/dts/Makefile -@@ -64,6 +64,7 @@ dtb-$(CONFIG_ARCH_BCM2835) += \ - bcm2835-rpi-b-rev2.dtb \ - bcm2835-rpi-b-plus.dtb \ - bcm2835-rpi-a-plus.dtb \ -+ bcm2835-rpi-zero.dtb \ - bcm2836-rpi-2-b.dtb \ - bcm2837-rpi-3-b.dtb - dtb-$(CONFIG_ARCH_BCM_5301X) += \ -diff --git a/arch/arm/boot/dts/bcm2835-rpi-zero.dts b/arch/arm/boot/dts/bcm2835-rpi-zero.dts -new file mode 100644 -index 0000000..f9afc1a ---- /dev/null -+++ b/arch/arm/boot/dts/bcm2835-rpi-zero.dts -@@ -0,0 +1,24 @@ -+/dts-v1/; -+#include "bcm2835.dtsi" -+#include "bcm2835-rpi.dtsi" -+ -+/ { -+ compatible = "raspberrypi,model-zero", "brcm,bcm2835"; -+ model = "Raspberry Pi Zero"; -+ -+ leds { -+ act { -+ gpios = <&gpio 47 0>; -+ }; -+ }; -+}; -+ -+&gpio { -+ pinctrl-0 = <&gpioout &alt0 &i2s_alt0 &alt3>; -+ -+ /* I2S interface */ -+ i2s_alt0: i2s_alt0 { -+ brcm,pins = <18 19 20 21>; -+ brcm,function = ; -+ }; -+}; --- -2.5.5 - diff --git a/kernel.spec b/kernel.spec index 5e4b49f39..8ca41c185 100644 --- a/kernel.spec +++ b/kernel.spec @@ -657,8 +657,6 @@ Patch702: x86-build-Build-compressed-x86-kernels-as-PIE.patch # Follow on for CVE-2016-3156 Patch703: ipv4-fib-don-t-warn-when-primary-address-is-missing-.patch -Patch66601: 0001-ARM-bcm2835-dt-Add-Raspberry-Pi-Zero.patch - # END OF PATCH DEFINITIONS %endif @@ -2182,7 +2180,6 @@ fi %changelog * Tue Apr 26 2016 Lubomir Rintel - 4.5.1-300.pi1 - Build for bcm2835/rpi -- Add Raspberry Pi Zero dts * Tue Apr 26 2016 Justin M. Forbes - Change CONFIG_DW_DMAC to built-in to fix sound on some intel platforms From 7d082db715de9e27d8c513b04dd406bc29f8e6b5 Mon Sep 17 00:00:00 2001 From: Lubomir Rintel Date: Tue, 26 Apr 2016 21:19:16 +0200 Subject: [PATCH 062/275] Revert "Add armv6hl-based Raspberry Pi" This reverts commit bfeccd5029dc06a5cc10b1fe22f57c825d02c63c. --- Makefile.config | 7 -- config-armv6 | 246 ---------------------------------------------- filter-armv6hl.sh | 14 --- kernel.spec | 9 +- 4 files changed, 1 insertion(+), 275 deletions(-) delete mode 100644 config-armv6 delete mode 100644 filter-armv6hl.sh diff --git a/Makefile.config b/Makefile.config index 87fb20e71..148e21fef 100644 --- a/Makefile.config +++ b/Makefile.config @@ -10,7 +10,6 @@ CONFIGFILES = \ $(CFG)-x86_64.config $(CFG)-x86_64-debug.config \ $(CFG)-s390x.config \ $(CFG)-armv7hl.config $(CFG)-armv7hl-lpae.config \ - $(CFG)-armv6hl.config \ $(CFG)-aarch64.config \ $(CFG)-ppc64.config $(CFG)-ppc64p7.config $(CFG)-ppc64-debug.config \ $(CFG)-ppc64le.config $(CFG)-ppc64le-debug.config @@ -48,9 +47,6 @@ temp-armv7: config-armv7 temp-armv7-generic temp-armv7-lpae: config-armv7-lpae temp-armv7-generic perl merge.pl $^ > $@ -temp-armv6: config-armv6 temp-arm-generic - perl merge.pl $^ > $@ - temp-arm-debug-generic: temp-arm-generic temp-debug-generic perl merge.pl $^ > $@ @@ -126,9 +122,6 @@ $(CFG)-s390x.config: config-s390x temp-s390-generic $(CFG)-armv7hl.config: /dev/null temp-armv7 perl merge.pl $^ arm > $@ -$(CFG)-armv6hl.config: /dev/null temp-armv6 - perl merge.pl $^ arm > $@ - $(CFG)-armv7hl-lpae.config: /dev/null temp-armv7-lpae perl merge.pl $^ arm > $@ diff --git a/config-armv6 b/config-armv6 deleted file mode 100644 index 57bc72cdf..000000000 --- a/config-armv6 +++ /dev/null @@ -1,246 +0,0 @@ -# arm configs for armv6-based Raspberry Pi -# Generic ARM config options -CONFIG_ARM=y - -CONFIG_ARCH_MULTI_V6=y -# CONFIG_ARCH_MULTI_V7 is not set - -CONFIG_CMDLINE="" -CONFIG_AEABI=y -CONFIG_VFP=y - -CONFIG_ARM_UNWIND=y -CONFIG_ARM_THUMB=y -CONFIG_ARM_DMA_MEM_BUFFERABLE=y -# CONFIG_CACHE_L2X0 is not set -CONFIG_ATAGS=y -CONFIG_ATAGS_PROC=y -CONFIG_ATAGS_PROC=y -CONFIG_ZBOOT_ROM_TEXT=0 -CONFIG_ZBOOT_ROM_BSS=0 -CONFIG_XZ_DEC_ARMTHUMB=y -CONFIG_CPU_SW_DOMAIN_PAN=y - -# CONFIG_OABI_COMPAT is not set -# CONFIG_APM_EMULATION is not set -# CONFIG_CPU_ICACHE_DISABLE is not set -# CONFIG_CPU_DCACHE_DISABLE is not set -# CONFIG_CPU_BPREDICT_DISABLE is not set -# CONFIG_HVC_DCC is not set - -# We only enable Raspberry Pi for this ARMv6 kernel -CONFIG_ARCH_BCM=y -CONFIG_ARCH_BCM2835=y -# CONFIG_ARCH_REALVIEW is not set -# CONFIG_ARCH_CNS3XXX is not set -# CONFIG_ARCH_INTEGRATOR is not set -# CONFIG_ARCH_MXC is not set -# CONFIG_ARCH_OMAP2 is not set -# CONFIG_ARCH_PICOXCELL is not set -# CONFIG_ARCH_S3C64XX is not set -# CONFIG_ARCH_WM8750 is not set -# CONFIG_SOC_BRCMSTB is not set - -# generic that deviates from or should be merged into config-generic -# CONFIG_HIGHMEM is not set -# CONFIG_ARM_MODULE_PLTS is not set - -# Power management / thermal / cpu scaling -# CONFIG_THERMAL is not set -CONFIG_CPUFREQ_DT=m -CONFIG_PM_DEVFREQ=y -CONFIG_PM_DEVFREQ_EVENT=y -CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND=y -CONFIG_DEVFREQ_GOV_PERFORMANCE=y -CONFIG_DEVFREQ_GOV_POWERSAVE=y -CONFIG_DEVFREQ_GOV_USERSPACE=y - -# CONFIG_PCI_LAYERSCAPE is not set -# Do NOT enable this, it breaks stuff and makes things go slow -# CONFIG_UACCESS_WITH_MEMCPY is not set - -CONFIG_LBDAF=y - -# Device tree -# CONFIG_ARM_APPENDED_DTB is not set - -# Raspberry Pi -CONFIG_HW_RANDOM_BCM2835=m -CONFIG_I2C_BCM2835=m -CONFIG_SPI_BCM2835=m -CONFIG_SPI_BCM2835AUX=m -CONFIG_BCM2835_WDT=m -CONFIG_DRM_VC4=m -CONFIG_SND_BCM2835_SOC_I2S=m -CONFIG_MMC_SDHCI_BCM2835=m -CONFIG_DMA_BCM2835=m -CONFIG_BCM2835_MBOX=m -CONFIG_PWM_BCM2835=m -CONFIG_RASPBERRYPI_FIRMWARE=m -CONFIG_SERIAL_8250_BCM2835AUX=y -CONFIG_MMC_SDHCI_IPROC=m - -# Multifunction Devices -# CONFIG_MFD_TPS65912_SPI is not set -# CONFIG_MFD_DA9052_SPI is not set -# CONFIG_MFD_ARIZONA_SPI is not set -# CONFIG_MFD_WM831X_SPI is not set -# CONFIG_MFD_MC13XXX_SPI is not set -# CONFIG_MFD_PM8921_CORE is not set -# CONFIG_MFD_T7L66XB is not set -# CONFIG_MFD_TC6387XB is not set - -# Pin stuff -# CONFIG_PINCTRL_AMD is not set - -# GPIO -# CONFIG_GPIO_EM is not set -CONFIG_GPIO_74X164=m -CONFIG_GPIO_MAX7301=m -CONFIG_GPIO_MC33880=m -# CONFIG_GPIO_ZEVIO is not set -CONFIG_LEDS_GPIO=m -CONFIG_INPUT_GPIO_BEEPER=m -CONFIG_INPUT_GPIO_TILT_POLLED=m -CONFIG_INPUT_MATRIXKMAP=m -CONFIG_KEYBOARD_MATRIX=m - -# SPI -CONFIG_SPI=y -CONFIG_SPI_GPIO=m -CONFIG_SPI_SPIDEV=m -# CONFIG_SPI_ALTERA is not set -CONFIG_SPI_BITBANG=m -# CONFIG_SPI_DESIGNWARE is not set -# CONFIG_SPI_OC_TINY is not set -# CONFIG_SPI_SC18IS602 is not set -# CONFIG_SPI_TLE62X0 is not set -# CONFIG_SPI_XCOMM is not set -# CONFIG_SPI_FSL_SPI is not set -# CONFIG_SPI_CADENCE is not set -# CONFIG_SPI_ZYNQMP_GQSPI is not set - -# MTD -# CONFIG_MG_DISK is not set -CONFIG_MTD_DATAFLASH=m -CONFIG_MTD_DATAFLASH_WRITE_VERIFY=y -CONFIG_MTD_DATAFLASH_OTP=y -CONFIG_MTD_SST25L=m -CONFIG_EEPROM_AT25=m -CONFIG_EEPROM_93XX46=m - -# Sound -# CONFIG_SND_ARM is not set -# CONFIG_SND_SOC_AC97_CODEC is not set -# CONFIG_SND_SUN4I_CODEC is not set -# CONFIG_SND_SOC_TAS571X is not set - -# RTC -CONFIG_RTC_DRV_DS1305=m -CONFIG_RTC_DRV_DS1347=m -CONFIG_RTC_DRV_DS1390=m -CONFIG_RTC_DRV_DS3234=m -CONFIG_RTC_DRV_M41T93=m -CONFIG_RTC_DRV_M41T94=m -CONFIG_RTC_DRV_MAX6902=m -CONFIG_RTC_DRV_PCF2123=m -CONFIG_RTC_DRV_PL030=m -CONFIG_RTC_DRV_R9701=m -CONFIG_RTC_DRV_RS5C348=m -CONFIG_RTC_DRV_RX4581=m - -CONFIG_CHARGER_GPIO=m -CONFIG_GENERIC_ADC_BATTERY=m - -# Sensors -CONFIG_SENSORS_AD7314=m -CONFIG_SENSORS_ADCXX=m -CONFIG_SENSORS_ADS7871=m -CONFIG_SENSORS_LIS3_SPI=m -CONFIG_SENSORS_LM70=m -CONFIG_SENSORS_MAX1111=m - -# Displays -CONFIG_LCD_L4F00242T03=m -CONFIG_LCD_LMS283GF05=m -CONFIG_LCD_LTV350QV=m -CONFIG_LCD_ILI922X=m -CONFIG_LCD_ILI9320=m -CONFIG_LCD_TDO24M=m -CONFIG_LCD_VGG2432A4=m -CONFIG_LCD_S6E63M0=m -CONFIG_LCD_LD9040=m -CONFIG_LCD_AMS369FG06=m -CONFIG_LCD_LMS501KF03=m -CONFIG_LCD_HX8357=m -CONFIG_TOUCHSCREEN_ADS7846=m -CONFIG_TOUCHSCREEN_AD7877=m -CONFIG_TOUCHSCREEN_TSC2005=m - -CONFIG_LEDS_TRIGGER_CPU=y -CONFIG_LEDS_DAC124S085=m -CONFIG_LEDS_PWM=m -CONFIG_LEDS_SYSCON=y - -CONFIG_POWER_RESET_SYSCON=y - -# Network -CONFIG_KS8851=m -CONFIG_LIBERTAS_SPI=m -CONFIG_P54_SPI=m -# CONFIG_P54_SPI_DEFAULT_EEPROM is not set -CONFIG_MICREL_KS8995MA=m -# CONFIG_NET_VENDOR_CIRRUS is not set -CONFIG_NET_VENDOR_MICROCHIP=y -CONFIG_ENCX24J600=m -CONFIG_IEEE802154_AT86RF230=m -CONFIG_IEEE802154_MRF24J40=m - -# CAN drivers -# CONFIG_CAN_TI_HECC is not set -# CONFIG_CAN_FLEXCAN is not set -# CONFIG_CAN_RCAR is not set -# CONFIG_CAN_MCP251X is not set - -# Needs work/investigation -# CONFIG_ARM_KPROBES_TEST is not set - -# Not needed on Raspberry Pi -# CONFIG_DRM_TILCDC is not set -# CONFIG_DRM_STI is not set -# CONFIG_DRM_FSL_DCU is not set -# CONFIG_DRM_OMAP is not set -# CONFIG_DRM_EXYNOS is not set -# CONFIG_MFD_T7L66XB is not set -# CONFIG_MFD_TC6387XB is not set -# CONFIG_EZX_PCAP is not set -# CONFIG_DM9000 is not set -# CONFIG_DEPRECATED_PARAM_STRUCT is not set -# CONFIG_SERIAL_8250_EM is not set -# CONFIG_SERIAL_BCM63XX is not set -# CONFIG_SERIAL_STM32 is not set -# CONFIG_SERIAL_AMBA_PL010 is not set -# CONFIG_BRCMSTB_GISB_ARB is not set -# CONFIG_AMBA_PL08X is not set -# CONFIG_EDAC is not set -# CONFIG_AX88796 is not set - -# CONFIG_POWER_RESET_BRCMSTB is not set -# CONFIG_CLK_QORIQ is not set -# CONFIG_QORIQ_CPUFREQ is not set - -# Debug options. We need to deal with them at some point like x86 -# CONFIG_DEBUG_USER is not set -CONFIG_DEBUG_LL=y -CONFIG_DEBUG_LL_INCLUDE="debug/pl01x.S" -CONFIG_DEBUG_UART_PHYS=0x20201000 -CONFIG_DEBUG_UART_VIRT=0xf0201000 -# CONFIG_ARM_KERNMEM_PERMS is not set - -# CONFIG_VFIO_PLATFORM_AMDXGBE_RESET is not set - -# Altera? -# CONFIG_PCIE_ALTERA is not set - -# CONFIG_VEXPRESS_CONFIG is not set -# CONFIG_AM335X_PHY_USB is not set diff --git a/filter-armv6hl.sh b/filter-armv6hl.sh deleted file mode 100644 index d02baab52..000000000 --- a/filter-armv6hl.sh +++ /dev/null @@ -1,14 +0,0 @@ -#! /bin/bash - -# This is the armv6hl override file for the core/drivers package split. The -# module directories listed here and in the generic list in filter-modules.sh -# will be moved to the resulting kernel-modules package for this arch. -# Anything not listed in those files will be in the kernel-core package. -# -# Please review the default list in filter-modules.sh before making -# modifications to the overrides below. If something should be removed across -# all arches, remove it in the default instead of per-arch. - -# There's some hwmon drivers that use iio, and we filter out iio in filter-modules.sh -# We probably don't want anything from there on a Raspberry Pi anyway -driverdirs="$driverdirs hwmon extcon" diff --git a/kernel.spec b/kernel.spec index 8ca41c185..43c8bfa3d 100644 --- a/kernel.spec +++ b/kernel.spec @@ -25,7 +25,6 @@ Summary: The Linux kernel %endif # define buildid .local -%define buildid .pi1 # baserelease defines which build revision of this kernel version we're # building. We used to call this fedora_build, but the magical name @@ -294,7 +293,7 @@ Summary: The Linux kernel %define kernel_mflags KALLSYMS_EXTRA_PASS=1 # we only build headers/perf/tools on the base arm arches # just like we used to only build them on i386 for x86 -%ifnarch armv6hl armv7hl +%ifnarch armv7hl %define with_headers 0 %define with_cross_headers 0 %define with_perf 0 @@ -415,7 +414,6 @@ Source15: merge.pl Source16: mod-extra.list Source17: mod-extra.sh Source18: mod-sign.sh -Source89: filter-armv6hl.sh Source90: filter-x86_64.sh Source91: filter-armv7hl.sh Source92: filter-i686.sh @@ -454,8 +452,6 @@ Source101: config-armv7-generic Source102: config-armv7 Source103: config-armv7-lpae -Source105: config-armv6 - Source110: config-arm64 # This file is intentionally left empty in the stock kernel. Its a nicety @@ -2178,9 +2174,6 @@ fi # # %changelog -* Tue Apr 26 2016 Lubomir Rintel - 4.5.1-300.pi1 -- Build for bcm2835/rpi - * Tue Apr 26 2016 Justin M. Forbes - Change CONFIG_DW_DMAC to built-in to fix sound on some intel platforms This needs to be revisited later. From 0cdc3924ab8f972fa6736f6e063c9bf1d21db36c Mon Sep 17 00:00:00 2001 From: Peter Robinson Date: Wed, 27 Apr 2016 14:59:01 +0100 Subject: [PATCH 063/275] Fix i.MX6 gpu loading - rhbz 1321330, Fix usb loading on some tegra devices --- ...ix-imx-ipuv3-crtc-module-autoloading.patch | 37 +++++++++++++ kernel.spec | 12 ++++- ...-tegra-Add-38.4MHz-clock-table-entry.patch | 53 +++++++++++++++++++ 3 files changed, 101 insertions(+), 1 deletion(-) create mode 100644 0001-gpu-ipu-v3-Fix-imx-ipuv3-crtc-module-autoloading.patch create mode 100644 usb-phy-tegra-Add-38.4MHz-clock-table-entry.patch diff --git a/0001-gpu-ipu-v3-Fix-imx-ipuv3-crtc-module-autoloading.patch b/0001-gpu-ipu-v3-Fix-imx-ipuv3-crtc-module-autoloading.patch new file mode 100644 index 000000000..d26c5d52d --- /dev/null +++ b/0001-gpu-ipu-v3-Fix-imx-ipuv3-crtc-module-autoloading.patch @@ -0,0 +1,37 @@ +From 88fd0f33c3cc5aa6a26f56902241941ac717e9f8 Mon Sep 17 00:00:00 2001 +From: Peter Robinson +Date: Wed, 27 Apr 2016 13:44:05 +0100 +Subject: [PATCH] gpu: ipu-v3: Fix imx-ipuv3-crtc module autoloading + +--- + drivers/gpu/ipu-v3/ipu-common.c | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +diff --git a/drivers/gpu/ipu-v3/ipu-common.c b/drivers/gpu/ipu-v3/ipu-common.c +index e00db3f..abb98c7 100644 +--- a/drivers/gpu/ipu-v3/ipu-common.c ++++ b/drivers/gpu/ipu-v3/ipu-common.c +@@ -1068,7 +1068,6 @@ static int ipu_add_client_devices(struct ipu_soc *ipu, unsigned long ipu_base) + goto err_register; + } + +- pdev->dev.of_node = of_node; + pdev->dev.parent = dev; + + ret = platform_device_add_data(pdev, ®->pdata, +@@ -1079,6 +1078,12 @@ static int ipu_add_client_devices(struct ipu_soc *ipu, unsigned long ipu_base) + platform_device_put(pdev); + goto err_register; + } ++ ++ /* ++ * Set of_node only after calling platform_device_add. Otherwise ++ * the platform:imx-ipuv3-crtc modalias won't be used. ++ */ ++ pdev->dev.of_node = of_node; + } + + return 0; +-- +2.7.4 + diff --git a/kernel.spec b/kernel.spec index 43c8bfa3d..03072b24f 100644 --- a/kernel.spec +++ b/kernel.spec @@ -42,7 +42,7 @@ Summary: The Linux kernel # For non-released -rc kernels, this will be appended after the rcX and # gitX tags, so a 3 here would become part of release "0.rcX.gitX.3" # -%global baserelease 301 +%global baserelease 302 %global fedora_build %{baserelease} # base_sublevel is the kernel version we're starting with and patching @@ -509,6 +509,12 @@ Patch423: Initial-AllWinner-A64-and-PINE64-support.patch # http://www.spinics.net/lists/arm-kernel/msg493431.html Patch424: efi-arm64-don-t-apply-MEMBLOCK_NOMAP-to-UEFI-memory-map-mapping.patch +# rhbz 1321330 http://www.spinics.net/lists/dri-devel/msg105829.html +Patch425: 0001-gpu-ipu-v3-Fix-imx-ipuv3-crtc-module-autoloading.patch + +# http://www.spinics.net/lists/linux-tegra/msg26029.html +Patch426: usb-phy-tegra-Add-38.4MHz-clock-table-entry.patch + # http://patchwork.ozlabs.org/patch/587554/ Patch430: ARM-tegra-usb-no-reset.patch @@ -2174,6 +2180,10 @@ fi # # %changelog +* Wed Apr 27 2016 Peter Robinson 4.5.2-302 +- Fix i.MX6 gpu loading - rhbz 1321330 +- Fix usb loading on some tegra devices + * Tue Apr 26 2016 Justin M. Forbes - Change CONFIG_DW_DMAC to built-in to fix sound on some intel platforms This needs to be revisited later. diff --git a/usb-phy-tegra-Add-38.4MHz-clock-table-entry.patch b/usb-phy-tegra-Add-38.4MHz-clock-table-entry.patch new file mode 100644 index 000000000..2a44851d7 --- /dev/null +++ b/usb-phy-tegra-Add-38.4MHz-clock-table-entry.patch @@ -0,0 +1,53 @@ +From patchwork Wed Apr 6 07:54:05 2016 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +Subject: usb: phy: tegra: Add 38.4MHz clock table entry +From: Hunter Laux +X-Patchwork-Id: 606877 +Message-Id: <1459929245-23449-1-git-send-email-hunterlaux@gmail.com> +To: Stephen Warren , + Thierry Reding , + Alexandre Courbot , linux-tegra@vger.kernel.org +Cc: Hunter Laux +Date: Wed, 6 Apr 2016 00:54:05 -0700 + +The Tegra210 uses a 38.4MHz OSC. This clock table entry is required to +use the ehci phy on the Jetson TX1. + +The xtal_freq_count is actually a 12 bit value, so it should be a u16 +instead of u8. + +Signed-off-by: Hunter Laux +--- + drivers/usb/phy/phy-tegra-usb.c | 10 +++++++++- + 1 file changed, 9 insertions(+), 1 deletion(-) + +diff --git a/drivers/usb/phy/phy-tegra-usb.c b/drivers/usb/phy/phy-tegra-usb.c +index 5fe4a57..f0431f0 100644 +--- a/drivers/usb/phy/phy-tegra-usb.c ++++ b/drivers/usb/phy/phy-tegra-usb.c +@@ -164,7 +164,7 @@ struct tegra_xtal_freq { + u8 enable_delay; + u8 stable_count; + u8 active_delay; +- u8 xtal_freq_count; ++ u16 xtal_freq_count; + u16 debounce; + }; + +@@ -201,6 +201,14 @@ static const struct tegra_xtal_freq tegra_freq_table[] = { + .xtal_freq_count = 0xFE, + .debounce = 0xFDE8, + }, ++ { ++ .freq = 38400000, ++ .enable_delay = 0x00, ++ .stable_count = 0x00, ++ .active_delay = 0x18, ++ .xtal_freq_count = 0x177, ++ .debounce = 0xBB80, ++ }, + }; + + static void set_pts(struct tegra_usb_phy *phy, u8 pts_val) From 36fbeb0c142ef673fdbce16dc7218374a7510d5e Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Thu, 28 Apr 2016 08:19:01 -0400 Subject: [PATCH 064/275] Require /usr/bin/kernel-install (rhbz 1331012) --- kernel.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/kernel.spec b/kernel.spec index 03072b24f..5da423a40 100644 --- a/kernel.spec +++ b/kernel.spec @@ -347,7 +347,7 @@ Summary: The Linux kernel # Packages that need to be installed before the kernel is, because the %%post # scripts use them. # -%define kernel_prereq fileutils, systemd >= 203-2 +%define kernel_prereq fileutils, systemd >= 203-2, /usr/bin/kernel-install %define initrd_prereq dracut >= 027 @@ -2180,6 +2180,9 @@ fi # # %changelog +* Thu Apr 28 2016 Josh Boyer +- Require /usr/bin/kernel-install (rhbz 1331012) + * Wed Apr 27 2016 Peter Robinson 4.5.2-302 - Fix i.MX6 gpu loading - rhbz 1321330 - Fix usb loading on some tegra devices From 0d217e65ea07950b887a395cd4b0ffd2e4cc69da Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Thu, 28 Apr 2016 08:30:21 -0400 Subject: [PATCH 065/275] Don't splash warnings from broken BGRT firmware implementations --- kernel.spec | 4 + ...tch-all-pr_err-to-pr_debug-for-inval.patch | 94 +++++++++++++++++++ 2 files changed, 98 insertions(+) create mode 100644 x86-efi-bgrt-Switch-all-pr_err-to-pr_debug-for-inval.patch diff --git a/kernel.spec b/kernel.spec index 5da423a40..b9e6674c5 100644 --- a/kernel.spec +++ b/kernel.spec @@ -659,6 +659,9 @@ Patch702: x86-build-Build-compressed-x86-kernels-as-PIE.patch # Follow on for CVE-2016-3156 Patch703: ipv4-fib-don-t-warn-when-primary-address-is-missing-.patch +# Stop splashing crap about broken firmware BGRT +Patch704: x86-efi-bgrt-Switch-all-pr_err-to-pr_debug-for-inval.patch + # END OF PATCH DEFINITIONS %endif @@ -2181,6 +2184,7 @@ fi # %changelog * Thu Apr 28 2016 Josh Boyer +- Don't splash warnings from broken BGRT firmware implementations - Require /usr/bin/kernel-install (rhbz 1331012) * Wed Apr 27 2016 Peter Robinson 4.5.2-302 diff --git a/x86-efi-bgrt-Switch-all-pr_err-to-pr_debug-for-inval.patch b/x86-efi-bgrt-Switch-all-pr_err-to-pr_debug-for-inval.patch new file mode 100644 index 000000000..d3d0aa2c3 --- /dev/null +++ b/x86-efi-bgrt-Switch-all-pr_err-to-pr_debug-for-inval.patch @@ -0,0 +1,94 @@ +From 3e4f68f273ef86e6ed8be24a86f8ef514deaecc0 Mon Sep 17 00:00:00 2001 +From: Josh Boyer +Date: Wed, 27 Apr 2016 08:37:41 -0400 +Subject: [PATCH] x86/efi-bgrt: Switch all pr_err() to pr_debug() for invalid + BGRT + +The promise of pretty boot splashes from firmware via BGRT was at +best only that; a promise. The kernel diligently checks to make +sure the BGRT data firmware gives it is valid, and dutifully warns +the user when it isn't. However, it does so via the pr_err log +level which seems unnecessary. The user cannot do anything about +this and there really isn't an error on the part of Linux to +correct. + +This lowers the log level by using pr_debug instead. Users will +no longer have their boot process uglified by the kernel reminding +us that firmware can and often is broken. Ironic, considering +BGRT is supposed to make boot pretty to begin with. + +Signed-off-by: Josh Boyer +--- + arch/x86/platform/efi/efi-bgrt.c | 16 ++++++++-------- + 1 file changed, 8 insertions(+), 8 deletions(-) + +diff --git a/arch/x86/platform/efi/efi-bgrt.c b/arch/x86/platform/efi/efi-bgrt.c +index ea48449b2e63..87da4108785b 100644 +--- a/arch/x86/platform/efi/efi-bgrt.c ++++ b/arch/x86/platform/efi/efi-bgrt.c +@@ -41,17 +41,17 @@ void __init efi_bgrt_init(void) + return; + + if (bgrt_tab->header.length < sizeof(*bgrt_tab)) { +- pr_err("Ignoring BGRT: invalid length %u (expected %zu)\n", ++ pr_debug("Ignoring BGRT: invalid length %u (expected %zu)\n", + bgrt_tab->header.length, sizeof(*bgrt_tab)); + return; + } + if (bgrt_tab->version != 1) { +- pr_err("Ignoring BGRT: invalid version %u (expected 1)\n", ++ pr_debug("Ignoring BGRT: invalid version %u (expected 1)\n", + bgrt_tab->version); + return; + } + if (bgrt_tab->status & 0xfe) { +- pr_err("Ignoring BGRT: reserved status bits are non-zero %u\n", ++ pr_debug("Ignoring BGRT: reserved status bits are non-zero %u\n", + bgrt_tab->status); + return; + } +@@ -61,12 +61,12 @@ void __init efi_bgrt_init(void) + return; + } + if (bgrt_tab->image_type != 0) { +- pr_err("Ignoring BGRT: invalid image type %u (expected 0)\n", ++ pr_debug("Ignoring BGRT: invalid image type %u (expected 0)\n", + bgrt_tab->image_type); + return; + } + if (!bgrt_tab->image_address) { +- pr_err("Ignoring BGRT: null image address\n"); ++ pr_debug("Ignoring BGRT: null image address\n"); + return; + } + +@@ -76,7 +76,7 @@ void __init efi_bgrt_init(void) + sizeof(bmp_header)); + ioremapped = true; + if (!image) { +- pr_err("Ignoring BGRT: failed to map image header memory\n"); ++ pr_debug("Ignoring BGRT: failed to map image header memory\n"); + return; + } + } +@@ -88,7 +88,7 @@ void __init efi_bgrt_init(void) + + bgrt_image = kmalloc(bgrt_image_size, GFP_KERNEL | __GFP_NOWARN); + if (!bgrt_image) { +- pr_err("Ignoring BGRT: failed to allocate memory for image (wanted %zu bytes)\n", ++ pr_debug("Ignoring BGRT: failed to allocate memory for image (wanted %zu bytes)\n", + bgrt_image_size); + return; + } +@@ -97,7 +97,7 @@ void __init efi_bgrt_init(void) + image = early_ioremap(bgrt_tab->image_address, + bmp_header.size); + if (!image) { +- pr_err("Ignoring BGRT: failed to map image memory\n"); ++ pr_debug("Ignoring BGRT: failed to map image memory\n"); + kfree(bgrt_image); + bgrt_image = NULL; + return; +-- +2.5.5 + From b34d678196bcaed14037ff3594e9e8488691404e Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Thu, 28 Apr 2016 14:25:33 -0500 Subject: [PATCH 066/275] Fix KVM with THP corruption (rhbz 1331092) --- kernel.spec | 6 + ...emory-corruption-in-KVM-with-THP-ena.patch | 126 ++++++++++++++++++ 2 files changed, 132 insertions(+) create mode 100644 mm-thp-kvm-fix-memory-corruption-in-KVM-with-THP-ena.patch diff --git a/kernel.spec b/kernel.spec index b9e6674c5..b22d7b453 100644 --- a/kernel.spec +++ b/kernel.spec @@ -662,6 +662,9 @@ Patch703: ipv4-fib-don-t-warn-when-primary-address-is-missing-.patch # Stop splashing crap about broken firmware BGRT Patch704: x86-efi-bgrt-Switch-all-pr_err-to-pr_debug-for-inval.patch +#rhbz 1331092 +Patch705: mm-thp-kvm-fix-memory-corruption-in-KVM-with-THP-ena.patch + # END OF PATCH DEFINITIONS %endif @@ -2183,6 +2186,9 @@ fi # # %changelog +* Thu Apr 28 2016 Justin M. Forbes +- Fix KVM with THP corruption (rhbz 1331092) + * Thu Apr 28 2016 Josh Boyer - Don't splash warnings from broken BGRT firmware implementations - Require /usr/bin/kernel-install (rhbz 1331012) diff --git a/mm-thp-kvm-fix-memory-corruption-in-KVM-with-THP-ena.patch b/mm-thp-kvm-fix-memory-corruption-in-KVM-with-THP-ena.patch new file mode 100644 index 000000000..cc3e2168c --- /dev/null +++ b/mm-thp-kvm-fix-memory-corruption-in-KVM-with-THP-ena.patch @@ -0,0 +1,126 @@ +From 94f984ff563d1777652b822d7a282cacc1e481c2 Mon Sep 17 00:00:00 2001 +From: Andrea Arcangeli +Date: Wed, 27 Apr 2016 12:04:46 -0500 +Subject: [PATCH] mm: thp: kvm: fix memory corruption in KVM with THP enabled + +After the THP refcounting change, obtaining a compound pages from +get_user_pages() no longer allows us to assume the entire compound +page is immediately mappable from a secondary MMU. + +A secondary MMU doesn't want to call get_user_pages() more than once +for each compound page, in order to know if it can map the whole +compound page. So a secondary MMU needs to know from a single +get_user_pages() invocation when it can map immediately the entire +compound page to avoid a flood of unnecessary secondary MMU faults and +spurious atomic_inc()/atomic_dec() (pages don't have to be pinned by +MMU notifier users). + +Ideally instead of the page->_mapcount < 1 check, get_user_pages() +should return the granularity of the "page" mapping in the "mm" passed +to get_user_pages(). However it's non trivial change to pass the "pmd" +status belonging to the "mm" walked by get_user_pages up the stack (up +to the caller of get_user_pages). So the fix just checks if there is +not a single pte mapping on the page returned by get_user_pages, and +in turn if the caller can assume that the whole compound page is +mapped in the current "mm" (in a pmd_trans_huge()). In such case the +entire compound page is safe to map into the secondary MMU without +additional get_user_pages() calls on the surrounding tail/head +pages. In addition of being faster, not having to run other +get_user_pages() calls also reduces the memory footprint of the +secondary MMU fault in case the pmd split happened as result of memory +pressure. + +Without this fix after a MADV_DONTNEED (like invoked by QEMU during +postcopy live migration or balloning) or after generic swapping (with +a failure in split_huge_page() that would only result in pmd splitting +and not a physical page split), KVM would map the whole compound page +into the shadow pagetables, despite regular faults or userfaults (like +UFFDIO_COPY) may map regular pages into the primary MMU as result of +the pte faults, leading to the guest mode and userland mode going out +of sync and not working on the same memory at all times. + +Signed-off-by: Andrea Arcangeli +--- + arch/arm/kvm/mmu.c | 2 +- + arch/x86/kvm/mmu.c | 4 ++-- + include/linux/page-flags.h | 22 ++++++++++++++++++++++ + 3 files changed, 25 insertions(+), 3 deletions(-) + +diff --git a/arch/arm/kvm/mmu.c b/arch/arm/kvm/mmu.c +index aba61fd..8dafe97 100644 +--- a/arch/arm/kvm/mmu.c ++++ b/arch/arm/kvm/mmu.c +@@ -997,7 +997,7 @@ static bool transparent_hugepage_adjust(kvm_pfn_t *pfnp, phys_addr_t *ipap) + kvm_pfn_t pfn = *pfnp; + gfn_t gfn = *ipap >> PAGE_SHIFT; + +- if (PageTransCompound(pfn_to_page(pfn))) { ++ if (PageTransCompoundMap(pfn_to_page(pfn))) { + unsigned long mask; + /* + * The address we faulted on is backed by a transparent huge +diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c +index 1e7a49b..3a371f7 100644 +--- a/arch/x86/kvm/mmu.c ++++ b/arch/x86/kvm/mmu.c +@@ -2767,7 +2767,7 @@ static void transparent_hugepage_adjust(struct kvm_vcpu *vcpu, + */ + if (!is_error_noslot_pfn(pfn) && !kvm_is_reserved_pfn(pfn) && + level == PT_PAGE_TABLE_LEVEL && +- PageTransCompound(pfn_to_page(pfn)) && ++ PageTransCompoundMap(pfn_to_page(pfn)) && + !has_wrprotected_page(vcpu, gfn, PT_DIRECTORY_LEVEL)) { + unsigned long mask; + /* +@@ -4621,7 +4621,7 @@ restart: + */ + if (sp->role.direct && + !kvm_is_reserved_pfn(pfn) && +- PageTransCompound(pfn_to_page(pfn))) { ++ PageTransCompoundMap(pfn_to_page(pfn))) { + drop_spte(kvm, sptep); + need_tlb_flush = 1; + goto restart; +diff --git a/include/linux/page-flags.h b/include/linux/page-flags.h +index 19724e6..522bd6d 100644 +--- a/include/linux/page-flags.h ++++ b/include/linux/page-flags.h +@@ -517,6 +517,27 @@ static inline int PageTransCompound(struct page *page) + } + + /* ++ * PageTransCompoundMap is the same as PageTransCompound, but it also ++ * guarantees the primary MMU has the entire compound page mapped ++ * through pmd_trans_huge, which in turn guarantees the secondary MMUs ++ * can also map the entire compound page. This allows the secondary ++ * MMUs to call get_user_pages() only once for each compound page and ++ * to immediately map the entire compound page with a single secondary ++ * MMU fault. If there will be a pmd split later, the secondary MMUs ++ * will get an update through the MMU notifier invalidation through ++ * split_huge_pmd(). ++ * ++ * Unlike PageTransCompound, this is safe to be called only while ++ * split_huge_pmd() cannot run from under us, like if protected by the ++ * MMU notifier, otherwise it may result in page->_mapcount < 0 false ++ * positives. ++ */ ++static inline int PageTransCompoundMap(struct page *page) ++{ ++ return PageTransCompound(page) && atomic_read(&page->_mapcount) < 0; ++} ++ ++/* + * PageTransTail returns true for both transparent huge pages + * and hugetlbfs pages, so it should only be called when it's known + * that hugetlbfs pages aren't involved. +@@ -559,6 +580,7 @@ static inline int TestClearPageDoubleMap(struct page *page) + #else + TESTPAGEFLAG_FALSE(TransHuge) + TESTPAGEFLAG_FALSE(TransCompound) ++TESTPAGEFLAG_FALSE(TransCompoundMap) + TESTPAGEFLAG_FALSE(TransTail) + TESTPAGEFLAG_FALSE(DoubleMap) + TESTSETFLAG_FALSE(DoubleMap) +-- +2.7.4 + From 05bf4c34e415410091f59525e80ef73d0691f6a4 Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Wed, 4 May 2016 08:15:28 -0400 Subject: [PATCH 067/275] CVE-2016-4482 info leak in devio.c (rhbz 1332931 1332932) --- ...sbfs-fix-potential-infoleak-in-devio.patch | 41 +++++++++++++++++++ kernel.spec | 6 +++ 2 files changed, 47 insertions(+) create mode 100644 USB-usbfs-fix-potential-infoleak-in-devio.patch diff --git a/USB-usbfs-fix-potential-infoleak-in-devio.patch b/USB-usbfs-fix-potential-infoleak-in-devio.patch new file mode 100644 index 000000000..48360c930 --- /dev/null +++ b/USB-usbfs-fix-potential-infoleak-in-devio.patch @@ -0,0 +1,41 @@ +From 7adc5cbc25dcc47dc3856108d9823d08da75da9d Mon Sep 17 00:00:00 2001 +From: Kangjie Lu +Date: Tue, 3 May 2016 16:32:16 -0400 +Subject: [PATCH] USB: usbfs: fix potential infoleak in devio +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The stack object “ci” has a total size of 8 bytes. Its last 3 bytes +are padding bytes which are not initialized and leaked to userland +via “copy_to_user”. + +Signed-off-by: Kangjie Lu +Signed-off-by: Greg Kroah-Hartman +--- + drivers/usb/core/devio.c | 9 +++++---- + 1 file changed, 5 insertions(+), 4 deletions(-) + +diff --git a/drivers/usb/core/devio.c b/drivers/usb/core/devio.c +index 52c4461dfccd..9b7f1f75e887 100644 +--- a/drivers/usb/core/devio.c ++++ b/drivers/usb/core/devio.c +@@ -1316,10 +1316,11 @@ static int proc_getdriver(struct usb_dev_state *ps, void __user *arg) + + static int proc_connectinfo(struct usb_dev_state *ps, void __user *arg) + { +- struct usbdevfs_connectinfo ci = { +- .devnum = ps->dev->devnum, +- .slow = ps->dev->speed == USB_SPEED_LOW +- }; ++ struct usbdevfs_connectinfo ci; ++ ++ memset(&ci, 0, sizeof(ci)); ++ ci.devnum = ps->dev->devnum; ++ ci.slow = ps->dev->speed == USB_SPEED_LOW; + + if (copy_to_user(arg, &ci, sizeof(ci))) + return -EFAULT; +-- +2.5.5 + diff --git a/kernel.spec b/kernel.spec index b22d7b453..9dfe78144 100644 --- a/kernel.spec +++ b/kernel.spec @@ -665,6 +665,9 @@ Patch704: x86-efi-bgrt-Switch-all-pr_err-to-pr_debug-for-inval.patch #rhbz 1331092 Patch705: mm-thp-kvm-fix-memory-corruption-in-KVM-with-THP-ena.patch +#CVE-2016-4482 rhbz 1332931 1332932 +Patch706: USB-usbfs-fix-potential-infoleak-in-devio.patch + # END OF PATCH DEFINITIONS %endif @@ -2186,6 +2189,9 @@ fi # # %changelog +* Wed May 03 2016 Josh Boyer +- CVE-2016-4482 info leak in devio.c (rhbz 1332931 1332932) + * Thu Apr 28 2016 Justin M. Forbes - Fix KVM with THP corruption (rhbz 1331092) From e451ea92f07d680276324bead3efdb81a8ba8834 Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Wed, 4 May 2016 08:29:54 -0400 Subject: [PATCH 068/275] Fix changelog date --- kernel.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kernel.spec b/kernel.spec index 9dfe78144..204fc1900 100644 --- a/kernel.spec +++ b/kernel.spec @@ -2189,7 +2189,7 @@ fi # # %changelog -* Wed May 03 2016 Josh Boyer +* Wed May 04 2016 Josh Boyer - CVE-2016-4482 info leak in devio.c (rhbz 1332931 1332932) * Thu Apr 28 2016 Justin M. Forbes From d5b1540844532e0426f6762d3725311301065cdc Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Wed, 4 May 2016 11:00:13 -0400 Subject: [PATCH 069/275] Enable NFC_NXP_NCI options (rhbz 1290556) --- config-generic | 3 ++- kernel.spec | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/config-generic b/config-generic index 8e6a0ddf6..c2e8352ce 100644 --- a/config-generic +++ b/config-generic @@ -2113,7 +2113,8 @@ CONFIG_NFC_ST21NFCA_I2C=m # CONFIG_NFC_ST21NFCB is not set # CONFIG_NFC_ST21NFCB_I2C is not set # CONFIG_NFC_ST95HF is not set -# CONFIG_NFC_NXP_NCI is not set +CONFIG_NFC_NXP_NCI=m +CONFIG_NFC_NXP_NCI_I2C=m # CONFIG_NFC_NCI_SPI is not set # CONFIG_NFC_NCI_UART is not set # CONFIG_NFC_ST_NCI is not set diff --git a/kernel.spec b/kernel.spec index 204fc1900..8bcc5d75f 100644 --- a/kernel.spec +++ b/kernel.spec @@ -2190,6 +2190,7 @@ fi # %changelog * Wed May 04 2016 Josh Boyer +- Enable NFC_NXP_NCI options (rhbz 1290556) - CVE-2016-4482 info leak in devio.c (rhbz 1332931 1332932) * Thu Apr 28 2016 Justin M. Forbes From 4d81848a2b0f1040041a335551c14740202cf2ba Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Wed, 4 May 2016 20:24:32 -0500 Subject: [PATCH 070/275] Linux v4.5.3 --- ...ebu-Correct-unit-address-for-linksys.patch | 32 ------- ...ip-fix-potential-out-of-bounds-write.patch | 45 --------- ...OCK_NOMAP-to-UEFI-memory-map-mapping.patch | 92 ------------------- ...rash-on-detecting-device-without-end.patch | 49 ---------- kernel.spec | 22 +---- sources | 2 +- x86-xen-suppress-hugetlbfs-in-PV-guests.patch | 70 -------------- 7 files changed, 6 insertions(+), 306 deletions(-) delete mode 100644 0001-ARM-mvebu-Correct-unit-address-for-linksys.patch delete mode 100644 USB-usbip-fix-potential-out-of-bounds-write.patch delete mode 100644 efi-arm64-don-t-apply-MEMBLOCK_NOMAP-to-UEFI-memory-map-mapping.patch delete mode 100644 input-gtco-fix-crash-on-detecting-device-without-end.patch delete mode 100644 x86-xen-suppress-hugetlbfs-in-PV-guests.patch diff --git a/0001-ARM-mvebu-Correct-unit-address-for-linksys.patch b/0001-ARM-mvebu-Correct-unit-address-for-linksys.patch deleted file mode 100644 index ba0320c8e..000000000 --- a/0001-ARM-mvebu-Correct-unit-address-for-linksys.patch +++ /dev/null @@ -1,32 +0,0 @@ -From 0eebfe3b5ae99d3a825be8e45395cea478fd83d8 Mon Sep 17 00:00:00 2001 -From: Patrick Uiterwijk -Date: Mon, 28 Mar 2016 21:30:41 +0000 -Subject: [PATCH] ARM: mvebu: Correct unit address for linksys - -The USB2 port for Armada 38x is defined to be at 58000, not at -50000. - -Acked-by: Imre Kaloz -Cc: -Fixes: 2d0a7addbd10 ("ARM: Kirkwood: Add support for many Synology NAS devices") -Signed-off-by: Patrick Uiterwijk ---- - arch/arm/boot/dts/armada-385-linksys.dtsi | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/arch/arm/boot/dts/armada-385-linksys.dtsi b/arch/arm/boot/dts/armada-385-linksys.dtsi -index 3710755..85d2c37 100644 ---- a/arch/arm/boot/dts/armada-385-linksys.dtsi -+++ b/arch/arm/boot/dts/armada-385-linksys.dtsi -@@ -117,7 +117,7 @@ - }; - - /* USB part of the eSATA/USB 2.0 port */ -- usb@50000 { -+ usb@58000 { - status = "okay"; - }; - --- -2.5.0 - diff --git a/USB-usbip-fix-potential-out-of-bounds-write.patch b/USB-usbip-fix-potential-out-of-bounds-write.patch deleted file mode 100644 index 3d9f7c294..000000000 --- a/USB-usbip-fix-potential-out-of-bounds-write.patch +++ /dev/null @@ -1,45 +0,0 @@ -From b348d7dddb6c4fbfc810b7a0626e8ec9e29f7cbb Mon Sep 17 00:00:00 2001 -From: Ignat Korchagin -Date: Thu, 17 Mar 2016 18:00:29 +0000 -Subject: [PATCH] USB: usbip: fix potential out-of-bounds write - -Fix potential out-of-bounds write to urb->transfer_buffer -usbip handles network communication directly in the kernel. When receiving a -packet from its peer, usbip code parses headers according to protocol. As -part of this parsing urb->actual_length is filled. Since the input for -urb->actual_length comes from the network, it should be treated as untrusted. -Any entity controlling the network may put any value in the input and the -preallocated urb->transfer_buffer may not be large enough to hold the data. -Thus, the malicious entity is able to write arbitrary data to kernel memory. - -Signed-off-by: Ignat Korchagin -Signed-off-by: Greg Kroah-Hartman ---- - drivers/usb/usbip/usbip_common.c | 11 +++++++++++ - 1 file changed, 11 insertions(+) - -diff --git a/drivers/usb/usbip/usbip_common.c b/drivers/usb/usbip/usbip_common.c -index facaaf003f19..e40da7759a0e 100644 ---- a/drivers/usb/usbip/usbip_common.c -+++ b/drivers/usb/usbip/usbip_common.c -@@ -741,6 +741,17 @@ int usbip_recv_xbuff(struct usbip_device *ud, struct urb *urb) - if (!(size > 0)) - return 0; - -+ if (size > urb->transfer_buffer_length) { -+ /* should not happen, probably malicious packet */ -+ if (ud->side == USBIP_STUB) { -+ usbip_event_add(ud, SDEV_EVENT_ERROR_TCP); -+ return 0; -+ } else { -+ usbip_event_add(ud, VDEV_EVENT_ERROR_TCP); -+ return -EPIPE; -+ } -+ } -+ - ret = usbip_recv(ud->tcp_socket, urb->transfer_buffer, size); - if (ret != size) { - dev_err(&urb->dev->dev, "recv xbuf, %d\n", ret); --- -2.5.5 - diff --git a/efi-arm64-don-t-apply-MEMBLOCK_NOMAP-to-UEFI-memory-map-mapping.patch b/efi-arm64-don-t-apply-MEMBLOCK_NOMAP-to-UEFI-memory-map-mapping.patch deleted file mode 100644 index 2e3ae0c9b..000000000 --- a/efi-arm64-don-t-apply-MEMBLOCK_NOMAP-to-UEFI-memory-map-mapping.patch +++ /dev/null @@ -1,92 +0,0 @@ -From patchwork Wed Mar 30 07:46:23 2016 -Content-Type: text/plain; charset="utf-8" -MIME-Version: 1.0 -Content-Transfer-Encoding: 7bit -Subject: efi/arm64: don't apply MEMBLOCK_NOMAP to UEFI memory map mapping -From: Ard Biesheuvel -X-Patchwork-Id: 8693271 -Message-Id: <1459323983-9120-1-git-send-email-ard.biesheuvel@linaro.org> -To: linux-efi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, - matt@codeblueprint.co.uk -Cc: mark.rutland@arm.com, mlangsdo@redhat.com, - Ard Biesheuvel , leif.lindholm@linaro.org, - jeremy.linton@arm.com, msalter@redhat.com -Date: Wed, 30 Mar 2016 09:46:23 +0200 - -Hi Matt, - -Could we queue this as a fix for v4.6 with a cc:stable for v4.5, please? -(assuming no objections from any of the cc'ees) - -Thanks, -Ard. - -----------8<-------------- -Commit 4dffbfc48d65 ("arm64/efi: mark UEFI reserved regions as -MEMBLOCK_NOMAP") updated the mapping logic of both the RuntimeServices -regions as well as the kernel's copy of the UEFI memory map to set the -MEMBLOCK_NOMAP flag, which causes these regions to be omitted from the -kernel direct mapping, and from being covered by a struct page. -For the RuntimeServices regions, this is an obvious win, since the contents -of these regions have significance to the firmware executable code itself, -and are mapped in the EFI page tables using attributes that are described in -the UEFI memory map, and which may differ from the attributes we use for -mapping system RAM. It also prevents the contents from being modified -inadvertently, since the EFI page tables are only live during runtime -service invocations. - -None of these concerns apply to the allocation that covers the UEFI memory -map, since it is entirely owned by the kernel. Setting the MEMBLOCK_NOMAP on -the region did allow us to use ioremap_cache() to map it both on arm64 and -on ARM, since the latter does not allow ioremap_cache() to be used on -regions that are covered by a struct page. - -The ioremap_cache() on ARM restriction will be lifted in the v4.7 timeframe, -but in the mean time, it has been reported that commit 4dffbfc48d65 causes -a regression on 64k granule kernels. This is due to the fact that, given -the 64 KB page size, the region that we end up removing from the kernel -direct mapping is rounded up to 64 KB, and this 64 KB page frame may be -shared with the initrd when booting via GRUB (which does not align its -EFI_LOADER_DATA allocations to 64 KB like the stub does). This will crash -the kernel as soon as it tries to access the initrd. - -Since the issue is specific to arm64, revert back to memblock_reserve()'ing -the UEFI memory map when running on arm64. This is a temporary fix for v4.5 -and v4.6, and will be superseded in the v4.7 timeframe when we will be able -to move back to memblock_reserve() unconditionally. - -Fixes: 4dffbfc48d65 ("arm64/efi: mark UEFI reserved regions as MEMBLOCK_NOMAP") -Reported-by: Mark Salter -Signed-off-by: Ard Biesheuvel - ---- -drivers/firmware/efi/arm-init.c | 18 +++++++++++++++--- - 1 file changed, 15 insertions(+), 3 deletions(-) - -diff --git a/drivers/firmware/efi/arm-init.c b/drivers/firmware/efi/arm-init.c -index aa1f743152a2..8714f8c271ba 100644 ---- a/drivers/firmware/efi/arm-init.c -+++ b/drivers/firmware/efi/arm-init.c -@@ -203,7 +203,19 @@ void __init efi_init(void) - - reserve_regions(); - early_memunmap(memmap.map, params.mmap_size); -- memblock_mark_nomap(params.mmap & PAGE_MASK, -- PAGE_ALIGN(params.mmap_size + -- (params.mmap & ~PAGE_MASK))); -+ -+ if (IS_ENABLED(CONFIG_ARM)) { -+ /* -+ * ARM currently does not allow ioremap_cache() to be called on -+ * memory regions that are covered by struct page. So remove the -+ * UEFI memory map from the linear mapping. -+ */ -+ memblock_mark_nomap(params.mmap & PAGE_MASK, -+ PAGE_ALIGN(params.mmap_size + -+ (params.mmap & ~PAGE_MASK))); -+ } else { -+ memblock_reserve(params.mmap & PAGE_MASK, -+ PAGE_ALIGN(params.mmap_size + -+ (params.mmap & ~PAGE_MASK))); -+ } - } diff --git a/input-gtco-fix-crash-on-detecting-device-without-end.patch b/input-gtco-fix-crash-on-detecting-device-without-end.patch deleted file mode 100644 index 849f607a5..000000000 --- a/input-gtco-fix-crash-on-detecting-device-without-end.patch +++ /dev/null @@ -1,49 +0,0 @@ -Subject: [PATCH] Input: gtco: fix crash on detecting device without endpoints -From: Vladis Dronov -Date: 2016-03-18 18:35:00 - -The gtco driver expects at least one valid endpoint. If given -malicious descriptors that specify 0 for the number of endpoints, -it will crash in the probe function. Ensure there is at least -one endpoint on the interface before using it. Fix minor coding -style issue. - -The full report of this issue can be found here: -http://seclists.org/bugtraq/2016/Mar/86 - -Reported-by: Ralf Spenneberg -Signed-off-by: Vladis Dronov ---- - drivers/input/tablet/gtco.c | 10 +++++++++- - 1 file changed, 9 insertions(+), 1 deletion(-) - -diff --git a/drivers/input/tablet/gtco.c b/drivers/input/tablet/gtco.c -index 3a7f3a4..7c18249 100644 ---- a/drivers/input/tablet/gtco.c -+++ b/drivers/input/tablet/gtco.c -@@ -858,6 +858,14 @@ static int gtco_probe(struct usb_interface *usbinterface, - goto err_free_buf; - } - -+ /* Sanity check that a device has an endpoint */ -+ if (usbinterface->altsetting[0].desc.bNumEndpoints < 1) { -+ dev_err(&usbinterface->dev, -+ "Invalid number of endpoints\n"); -+ error = -EINVAL; -+ goto err_free_urb; -+ } -+ - /* - * The endpoint is always altsetting 0, we know this since we know - * this device only has one interrupt endpoint -@@ -879,7 +887,7 @@ static int gtco_probe(struct usb_interface *usbinterface, - * HID report descriptor - */ - if (usb_get_extra_descriptor(usbinterface->cur_altsetting, -- HID_DEVICE_TYPE, &hid_desc) != 0){ -+ HID_DEVICE_TYPE, &hid_desc) != 0) { - dev_err(&usbinterface->dev, - "Can't retrieve exta USB descriptor to get hid report descriptor length\n"); - error = -EIO; --- -2.5.0 diff --git a/kernel.spec b/kernel.spec index 8bcc5d75f..3dced63cc 100644 --- a/kernel.spec +++ b/kernel.spec @@ -42,7 +42,7 @@ Summary: The Linux kernel # For non-released -rc kernels, this will be appended after the rcX and # gitX tags, so a 3 here would become part of release "0.rcX.gitX.3" # -%global baserelease 302 +%global baserelease 300 %global fedora_build %{baserelease} # base_sublevel is the kernel version we're starting with and patching @@ -54,7 +54,7 @@ Summary: The Linux kernel %if 0%{?released_kernel} # Do we have a -stable update to apply? -%define stable_update 2 +%define stable_update 3 # Set rpm version accordingly %if 0%{?stable_update} %define stablerev %{stable_update} @@ -506,9 +506,6 @@ Patch422: geekbox-v4-device-tree-support.patch # http://www.spinics.net/lists/arm-kernel/msg483898.html Patch423: Initial-AllWinner-A64-and-PINE64-support.patch -# http://www.spinics.net/lists/arm-kernel/msg493431.html -Patch424: efi-arm64-don-t-apply-MEMBLOCK_NOMAP-to-UEFI-memory-map-mapping.patch - # rhbz 1321330 http://www.spinics.net/lists/dri-devel/msg105829.html Patch425: 0001-gpu-ipu-v3-Fix-imx-ipuv3-crtc-module-autoloading.patch @@ -531,9 +528,6 @@ Patch435: stmmac-fix-MDIO-settings.patch Patch436: ARM-mvebu-change-order-of-ethernet-DT-nodes-on-Armada-38x.patch -# mvebu usb fixes http://www.spinics.net/lists/arm-kernel/msg493305.html -Patch437: 0001-ARM-mvebu-Correct-unit-address-for-linksys.patch - # mvebu DSA switch fixes # http://www.spinics.net/lists/netdev/msg370841.html http://www.spinics.net/lists/netdev/msg370842.html Patch438: 0001-net-dsa-mv88e6xxx-Introduce-_mv88e6xxx_phy_page_-rea.patch @@ -635,21 +629,12 @@ Patch664: netfilter-x_tables-check-for-size-overflow.patch #CVE-2016-3134 rhbz 1317383 1317384 Patch665: netfilter-x_tables-deal-with-bogus-nextoffset-values.patch -#CVE-2016-2187 rhbz 1317017 1317010 -Patch686: input-gtco-fix-crash-on-detecting-device-without-end.patch - # CVE-2016-3672 rhbz 1324749 1324750 Patch689: x86-mm-32-Enable-full-randomization-on-i386-and-X86_.patch #rhbz 1309980 Patch698: 0001-ACPI-processor-Request-native-thermal-interrupt-hand.patch -# CVE-2016-3961 rhbz 1327219 1323956 -Patch699: x86-xen-suppress-hugetlbfs-in-PV-guests.patch - -# CVE-2016-3955 rhbz 1328478 1328479 -Patch700: USB-usbip-fix-potential-out-of-bounds-write.patch - #rhbz 1309487 Patch701: antenna_select.patch @@ -2189,6 +2174,9 @@ fi # # %changelog +* Wed May 04 2016 Justin M. Forbes - 4.5.3-300 +- Linux v4.5.3 + * Wed May 04 2016 Josh Boyer - Enable NFC_NXP_NCI options (rhbz 1290556) - CVE-2016-4482 info leak in devio.c (rhbz 1332931 1332932) diff --git a/sources b/sources index 4a185128c..623f6493c 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ a60d48eee08ec0536d5efb17ca819aef linux-4.5.tar.xz 6f557fe90b800b615c85c2ca04da6154 perf-man-4.5.tar.gz -19a835c1d16183f629d45779f62d36b6 patch-4.5.2.xz +efc81327bd2bd0d946f057ac71cbb1a7 patch-4.5.3.xz diff --git a/x86-xen-suppress-hugetlbfs-in-PV-guests.patch b/x86-xen-suppress-hugetlbfs-in-PV-guests.patch deleted file mode 100644 index 1b7c8f24a..000000000 --- a/x86-xen-suppress-hugetlbfs-in-PV-guests.patch +++ /dev/null @@ -1,70 +0,0 @@ -From 72c339e0c6d9969e664c2cf63e162753d7d859ae Mon Sep 17 00:00:00 2001 -From: Jan Beulich -Date: Thu, 14 Apr 2016 13:03:47 +0000 -Subject: [PATCH] x86/xen: suppress hugetlbfs in PV guests - -Huge pages are not normally available to PV guests. Not suppressing -hugetlbfs use results in an endless loop of page faults when user mode -code tries to access a hugetlbfs mapped area (since the hypervisor -denies such PTEs to be created, but error indications can't be -propagated out of xen_set_pte_at(), just like for various of its -siblings), and - once killed in an oops like this: - -kernel BUG at .../fs/hugetlbfs/inode.c:428! -invalid opcode: 0000 [#1] SMP -Modules linked in: ... -Supported: Yes -CPU: 2 PID: 6088 Comm: hugetlbfs Tainted: G W 4.4.0-2016-01-20-pv #2 -Hardware name: ... -task: ffff8808059205c0 ti: ffff880803c84000 task.ti: ffff880803c84000 -RIP: e030:[] [] remove_inode_hugepages+0x25b/0x320 -RSP: e02b:ffff880803c879a8 EFLAGS: 00010202 -RAX: 000000000077a4db RBX: ffffea001acff000 RCX: 0000000078417d38 -RDX: 0000000000000000 RSI: 000000007e154fa7 RDI: ffff880805d70960 -RBP: 0000000000000960 R08: 0000000000000000 R09: 0000000000000000 -R10: 0000000000000000 R11: 0000000000000001 R12: 0000000000000000 -R13: ffff880807486018 R14: 0000000000000000 R15: ffff880803c87af0 -FS: 00007f85fa8b8700(0000) GS:ffff88080b640000(0000) knlGS:0000000000000000 -CS: e033 DS: 0000 ES: 0000 CR0: 000000008005003b -CR2: 00007f85fa000000 CR3: 0000000001a0a000 CR4: 0000000000040660 -Stack: - ffff880000000fb0 ffff880803c87a18 ffff880803c87ae8 ffff8808059205c0 - ffff880803c87af0 ffff880803c87ae8 ffff880807486018 0000000000000000 - ffffffff81bf6e60 ffff880807486168 000003ffffffffff 0000000003c87758 -Call Trace: - [] hugetlbfs_evict_inode+0x15/0x40 - [] evict+0xbd/0x1b0 - [] __dentry_kill+0x19a/0x1f0 - [] dput+0x1fe/0x220 - [] __fput+0x155/0x200 - [] task_work_run+0x60/0xa0 - [] do_exit+0x160/0x400 - [] do_group_exit+0x3b/0xa0 - [] get_signal+0x1ed/0x470 - [] do_signal+0x14/0x110 - [] prepare_exit_to_usermode+0xe9/0xf0 - [] retint_user+0x8/0x13 - -This is XSA-174. - -Signed-off-by: Jan Beulich -Cc: stable@vger.kernel.org ---- - arch/x86/include/asm/hugetlb.h | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/arch/x86/include/asm/hugetlb.h b/arch/x86/include/asm/hugetlb.h -index f8a29d2c97b0..e6a8613fbfb0 100644 ---- a/arch/x86/include/asm/hugetlb.h -+++ b/arch/x86/include/asm/hugetlb.h -@@ -4,6 +4,7 @@ - #include - #include - -+#define hugepages_supported() cpu_has_pse - - static inline int is_hugepage_only_range(struct mm_struct *mm, - unsigned long addr, --- -2.5.5 - From 602ad306440f8415945ef43dc6398c6414b1b1e0 Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Thu, 5 May 2016 08:45:43 -0400 Subject: [PATCH 071/275] CVE-2016-4486 CVE-2016-4485 info leaks (rhbz 1333316 1333309 1333321) --- kernel.spec | 7 ++++ net-fix-infoleak-in-llc.patch | 32 ++++++++++++++++++ net-fix-infoleak-in-rtnetlink.patch | 50 +++++++++++++++++++++++++++++ 3 files changed, 89 insertions(+) create mode 100644 net-fix-infoleak-in-llc.patch create mode 100644 net-fix-infoleak-in-rtnetlink.patch diff --git a/kernel.spec b/kernel.spec index 3dced63cc..36394c455 100644 --- a/kernel.spec +++ b/kernel.spec @@ -653,6 +653,10 @@ Patch705: mm-thp-kvm-fix-memory-corruption-in-KVM-with-THP-ena.patch #CVE-2016-4482 rhbz 1332931 1332932 Patch706: USB-usbfs-fix-potential-infoleak-in-devio.patch +#CVE-2016-4486 CVE-2016-4485 rhbz 1333316 1333309 1333321 +Patch707: net-fix-infoleak-in-llc.patch +Patch708: net-fix-infoleak-in-rtnetlink.patch + # END OF PATCH DEFINITIONS %endif @@ -2174,6 +2178,9 @@ fi # # %changelog +* Thu May 05 2016 Josh Boyer +- CVE-2016-4486 CVE-2016-4485 info leaks (rhbz 1333316 1333309 1333321) + * Wed May 04 2016 Justin M. Forbes - 4.5.3-300 - Linux v4.5.3 diff --git a/net-fix-infoleak-in-llc.patch b/net-fix-infoleak-in-llc.patch new file mode 100644 index 000000000..38f0d506a --- /dev/null +++ b/net-fix-infoleak-in-llc.patch @@ -0,0 +1,32 @@ +From ec0de35ded8c4a8588290a1b442aa3aa4bdf4de1 Mon Sep 17 00:00:00 2001 +From: Kangjie Lu +Date: Tue, 3 May 2016 16:35:05 -0400 +Subject: [PATCH 2/2] net: fix infoleak in llc +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The stack object “info” has a total size of 12 bytes. Its last byte +is padding which is not initialized and leaked via “put_cmsg”. + +Signed-off-by: Kangjie Lu +Signed-off-by: David S. Miller +--- + net/llc/af_llc.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/net/llc/af_llc.c b/net/llc/af_llc.c +index b3c52e3f689a..8ae3ed97d95c 100644 +--- a/net/llc/af_llc.c ++++ b/net/llc/af_llc.c +@@ -626,6 +626,7 @@ static void llc_cmsg_rcv(struct msghdr *msg, struct sk_buff *skb) + if (llc->cmsg_flags & LLC_CMSG_PKTINFO) { + struct llc_pktinfo info; + ++ memset(&info, 0, sizeof(info)); + info.lpi_ifindex = llc_sk(skb->sk)->dev->ifindex; + llc_pdu_decode_dsap(skb, &info.lpi_sap); + llc_pdu_decode_da(skb, info.lpi_mac); +-- +2.5.5 + diff --git a/net-fix-infoleak-in-rtnetlink.patch b/net-fix-infoleak-in-rtnetlink.patch new file mode 100644 index 000000000..0da35108d --- /dev/null +++ b/net-fix-infoleak-in-rtnetlink.patch @@ -0,0 +1,50 @@ +From 55a8a812d867ec9953bde7d86eef255a1abbf93e Mon Sep 17 00:00:00 2001 +From: Kangjie Lu +Date: Tue, 3 May 2016 16:46:24 -0400 +Subject: [PATCH 1/2] net: fix infoleak in rtnetlink +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The stack object “map” has a total size of 32 bytes. Its last 4 +bytes are padding generated by compiler. These padding bytes are +not initialized and sent out via “nla_put”. + +Signed-off-by: Kangjie Lu +Signed-off-by: David S. Miller +--- + net/core/rtnetlink.c | 18 ++++++++++-------- + 1 file changed, 10 insertions(+), 8 deletions(-) + +diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c +index a75f7e94b445..65763c29f845 100644 +--- a/net/core/rtnetlink.c ++++ b/net/core/rtnetlink.c +@@ -1180,14 +1180,16 @@ static noinline_for_stack int rtnl_fill_vfinfo(struct sk_buff *skb, + + static int rtnl_fill_link_ifmap(struct sk_buff *skb, struct net_device *dev) + { +- struct rtnl_link_ifmap map = { +- .mem_start = dev->mem_start, +- .mem_end = dev->mem_end, +- .base_addr = dev->base_addr, +- .irq = dev->irq, +- .dma = dev->dma, +- .port = dev->if_port, +- }; ++ struct rtnl_link_ifmap map; ++ ++ memset(&map, 0, sizeof(map)); ++ map.mem_start = dev->mem_start; ++ map.mem_end = dev->mem_end; ++ map.base_addr = dev->base_addr; ++ map.irq = dev->irq; ++ map.dma = dev->dma; ++ map.port = dev->if_port; ++ + if (nla_put(skb, IFLA_MAP, sizeof(map), &map)) + return -EMSGSIZE; + +-- +2.5.5 + From b304d314dd067361f9eca204bdd5e1b43e2cb7b4 Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Fri, 6 May 2016 09:14:16 -0400 Subject: [PATCH 072/275] Oops in propogate_mnt if first copy is slave (rhbz 1333712 1333713) --- kernel.spec | 6 + ...ndle-the-first-propogated-copy-being.patch | 131 ++++++++++++++++++ 2 files changed, 137 insertions(+) create mode 100644 propogate_mnt-Handle-the-first-propogated-copy-being.patch diff --git a/kernel.spec b/kernel.spec index 36394c455..3fd5c2d03 100644 --- a/kernel.spec +++ b/kernel.spec @@ -657,6 +657,9 @@ Patch706: USB-usbfs-fix-potential-infoleak-in-devio.patch Patch707: net-fix-infoleak-in-llc.patch Patch708: net-fix-infoleak-in-rtnetlink.patch +#CVE-2016-xxxx rhbz 1333712 1333713 +Patch709: propogate_mnt-Handle-the-first-propogated-copy-being.patch + # END OF PATCH DEFINITIONS %endif @@ -2178,6 +2181,9 @@ fi # # %changelog +* Fri May 06 2016 Josh Boyer +- Oops in propogate_mnt if first copy is slave (rhbz 1333712 1333713) + * Thu May 05 2016 Josh Boyer - CVE-2016-4486 CVE-2016-4485 info leaks (rhbz 1333316 1333309 1333321) diff --git a/propogate_mnt-Handle-the-first-propogated-copy-being.patch b/propogate_mnt-Handle-the-first-propogated-copy-being.patch new file mode 100644 index 000000000..c5c594045 --- /dev/null +++ b/propogate_mnt-Handle-the-first-propogated-copy-being.patch @@ -0,0 +1,131 @@ +From ba23dd7749dfeab511f2eab29eef21dde31ad480 Mon Sep 17 00:00:00 2001 +From: "Eric W. Biederman" +Date: Thu, 5 May 2016 09:29:29 -0500 +Subject: [PATCH] propogate_mnt: Handle the first propogated copy being a slave + +When the first propgated copy was a slave the following oops would result: +> BUG: unable to handle kernel NULL pointer dereference at 0000000000000010 +> IP: [] propagate_one+0xbe/0x1c0 +> PGD bacd4067 PUD bac66067 PMD 0 +> Oops: 0000 [#1] SMP +> Modules linked in: +> CPU: 1 PID: 824 Comm: mount Not tainted 4.6.0-rc5userns+ #1523 +> Hardware name: Bochs Bochs, BIOS Bochs 01/01/2007 +> task: ffff8800bb0a8000 ti: ffff8800bac3c000 task.ti: ffff8800bac3c000 +> RIP: 0010:[] [] propagate_one+0xbe/0x1c0 +> RSP: 0018:ffff8800bac3fd38 EFLAGS: 00010283 +> RAX: 0000000000000000 RBX: ffff8800bb77ec00 RCX: 0000000000000010 +> RDX: 0000000000000000 RSI: ffff8800bb58c000 RDI: ffff8800bb58c480 +> RBP: ffff8800bac3fd48 R08: 0000000000000001 R09: 0000000000000000 +> R10: 0000000000001ca1 R11: 0000000000001c9d R12: 0000000000000000 +> R13: ffff8800ba713800 R14: ffff8800bac3fda0 R15: ffff8800bb77ec00 +> FS: 00007f3c0cd9b7e0(0000) GS:ffff8800bfb00000(0000) knlGS:0000000000000000 +> CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 +> CR2: 0000000000000010 CR3: 00000000bb79d000 CR4: 00000000000006e0 +> Stack: +> ffff8800bb77ec00 0000000000000000 ffff8800bac3fd88 ffffffff811fbf85 +> ffff8800bac3fd98 ffff8800bb77f080 ffff8800ba713800 ffff8800bb262b40 +> 0000000000000000 0000000000000000 ffff8800bac3fdd8 ffffffff811f1da0 +> Call Trace: +> [] propagate_mnt+0x105/0x140 +> [] attach_recursive_mnt+0x120/0x1e0 +> [] graft_tree+0x63/0x70 +> [] do_add_mount+0x9b/0x100 +> [] do_mount+0x2aa/0xdf0 +> [] ? strndup_user+0x4e/0x70 +> [] SyS_mount+0x75/0xc0 +> [] do_syscall_64+0x4b/0xa0 +> [] entry_SYSCALL64_slow_path+0x25/0x25 +> Code: 00 00 75 ec 48 89 0d 02 22 22 01 8b 89 10 01 00 00 48 89 05 fd 21 22 01 39 8e 10 01 00 00 0f 84 e0 00 00 00 48 8b 80 d8 00 00 00 <48> 8b 50 10 48 89 05 df 21 22 01 48 89 15 d0 21 22 01 8b 53 30 +> RIP [] propagate_one+0xbe/0x1c0 +> RSP +> CR2: 0000000000000010 +> ---[ end trace 2725ecd95164f217 ]--- + +This oops happens with the namespace_sem held and can be triggered by +non-root users. An all around not pleasant experience. + +To avoid this scenario when finding the appropriate source mount to +copy stop the walk up the mnt_master chain when the first source mount +is encountered. + +Further rewrite the walk up the last_source mnt_master chain so that +it is clear what is going on. + +The reason why the first source mount is special is that it it's +mnt_parent is not a mount in the dest_mnt propagation tree, and as +such termination conditions based up on the dest_mnt mount propgation +tree do not make sense. + +To avoid other kinds of confusion last_dest is not changed when +computing last_source. last_dest is only used once in propagate_one +and that is above the point of the code being modified, so changing +the global variable is meaningless and confusing. + +Cc: stable@vger.kernel.org +fixes: f2ebb3a921c1ca1e2ddd9242e95a1989a50c4c68 ("smarter propagate_mnt()") +Reported-by: Tycho Andersen +Reviewed-by: Seth Forshee +Tested-by: Seth Forshee +Signed-off-by: "Eric W. Biederman" +--- + fs/pnode.c | 25 ++++++++++++++----------- + 1 file changed, 14 insertions(+), 11 deletions(-) + +diff --git a/fs/pnode.c b/fs/pnode.c +index c524fdddc7fb..99899705b105 100644 +--- a/fs/pnode.c ++++ b/fs/pnode.c +@@ -198,7 +198,7 @@ static struct mount *next_group(struct mount *m, struct mount *origin) + + /* all accesses are serialized by namespace_sem */ + static struct user_namespace *user_ns; +-static struct mount *last_dest, *last_source, *dest_master; ++static struct mount *last_dest, *first_source, *last_source, *dest_master; + static struct mountpoint *mp; + static struct hlist_head *list; + +@@ -221,20 +221,22 @@ static int propagate_one(struct mount *m) + type = CL_MAKE_SHARED; + } else { + struct mount *n, *p; ++ bool done; + for (n = m; ; n = p) { + p = n->mnt_master; +- if (p == dest_master || IS_MNT_MARKED(p)) { +- while (last_dest->mnt_master != p) { +- last_source = last_source->mnt_master; +- last_dest = last_source->mnt_parent; +- } +- if (!peers(n, last_dest)) { +- last_source = last_source->mnt_master; +- last_dest = last_source->mnt_parent; +- } ++ if (p == dest_master || IS_MNT_MARKED(p)) + break; +- } + } ++ do { ++ struct mount *parent = last_source->mnt_parent; ++ if (last_source == first_source) ++ break; ++ done = parent->mnt_master == p; ++ if (done && peers(n, parent)) ++ break; ++ last_source = last_source->mnt_master; ++ } while (!done); ++ + type = CL_SLAVE; + /* beginning of peer group among the slaves? */ + if (IS_MNT_SHARED(m)) +@@ -286,6 +288,7 @@ int propagate_mnt(struct mount *dest_mnt, struct mountpoint *dest_mp, + */ + user_ns = current->nsproxy->mnt_ns->user_ns; + last_dest = dest_mnt; ++ first_source = source_mnt; + last_source = source_mnt; + mp = dest_mp; + list = tree_list; +-- +2.5.5 + From 91c15d7b5323303c2f86826ceef4235012c33827 Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Mon, 9 May 2016 08:36:44 -0400 Subject: [PATCH 073/275] CVE-2016-4557 bpf: Use after free vulnerability via double fdput CVE-2016-4558 bpf: refcnt overflow (rhbz 1334307 1334303 1334311) --- ...fdput-in-replace_map_fd_with_map_ptr.patch | 46 +++++ bpf-fix-refcnt-overflow.patch | 158 ++++++++++++++++++ kernel.spec | 8 + 3 files changed, 212 insertions(+) create mode 100644 bpf-fix-double-fdput-in-replace_map_fd_with_map_ptr.patch create mode 100644 bpf-fix-refcnt-overflow.patch diff --git a/bpf-fix-double-fdput-in-replace_map_fd_with_map_ptr.patch b/bpf-fix-double-fdput-in-replace_map_fd_with_map_ptr.patch new file mode 100644 index 000000000..3ba32bae7 --- /dev/null +++ b/bpf-fix-double-fdput-in-replace_map_fd_with_map_ptr.patch @@ -0,0 +1,46 @@ +From 8358b02bf67d3a5d8a825070e1aa73f25fb2e4c7 Mon Sep 17 00:00:00 2001 +From: Jann Horn +Date: Tue, 26 Apr 2016 22:26:26 +0200 +Subject: [PATCH] bpf: fix double-fdput in replace_map_fd_with_map_ptr() + +When bpf(BPF_PROG_LOAD, ...) was invoked with a BPF program whose bytecode +references a non-map file descriptor as a map file descriptor, the error +handling code called fdput() twice instead of once (in __bpf_map_get() and +in replace_map_fd_with_map_ptr()). If the file descriptor table of the +current task is shared, this causes f_count to be decremented too much, +allowing the struct file to be freed while it is still in use +(use-after-free). This can be exploited to gain root privileges by an +unprivileged user. + +This bug was introduced in +commit 0246e64d9a5f ("bpf: handle pseudo BPF_LD_IMM64 insn"), but is only +exploitable since +commit 1be7f75d1668 ("bpf: enable non-root eBPF programs") because +previously, CAP_SYS_ADMIN was required to reach the vulnerable code. + +(posted publicly according to request by maintainer) + +Signed-off-by: Jann Horn +Signed-off-by: Linus Torvalds +Acked-by: Alexei Starovoitov +Acked-by: Daniel Borkmann +Signed-off-by: David S. Miller +--- + kernel/bpf/verifier.c | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c +index 618ef77c302a..db2574e7b8b0 100644 +--- a/kernel/bpf/verifier.c ++++ b/kernel/bpf/verifier.c +@@ -2030,7 +2030,6 @@ static int replace_map_fd_with_map_ptr(struct verifier_env *env) + if (IS_ERR(map)) { + verbose("fd %d is not pointing to valid bpf_map\n", + insn->imm); +- fdput(f); + return PTR_ERR(map); + } + +-- +2.5.5 + diff --git a/bpf-fix-refcnt-overflow.patch b/bpf-fix-refcnt-overflow.patch new file mode 100644 index 000000000..1143c8286 --- /dev/null +++ b/bpf-fix-refcnt-overflow.patch @@ -0,0 +1,158 @@ +From 86db8dac9286f8397434184a6b442b6419e54ec0 Mon Sep 17 00:00:00 2001 +From: Alexei Starovoitov +Date: Wed, 27 Apr 2016 18:56:20 -0700 +Subject: [PATCH] bpf: fix refcnt overflow + +On a system with >32Gbyte of phyiscal memory and infinite RLIMIT_MEMLOCK, +the malicious application may overflow 32-bit bpf program refcnt. +It's also possible to overflow map refcnt on 1Tb system. +Impose 32k hard limit which means that the same bpf program or +map cannot be shared by more than 32k processes. + +Fixes: 1be7f75d1668 ("bpf: enable non-root eBPF programs") +Reported-by: Jann Horn +Signed-off-by: Alexei Starovoitov +Acked-by: Daniel Borkmann +Signed-off-by: David S. Miller +--- + include/linux/bpf.h | 3 ++- + kernel/bpf/inode.c | 7 ++++--- + kernel/bpf/syscall.c | 24 ++++++++++++++++++++---- + kernel/bpf/verifier.c | 11 +++++++---- + 4 files changed, 33 insertions(+), 12 deletions(-) + +diff --git a/include/linux/bpf.h b/include/linux/bpf.h +index 83d1926c61e4..67bc2da5d233 100644 +--- a/include/linux/bpf.h ++++ b/include/linux/bpf.h +@@ -165,12 +165,13 @@ void bpf_register_prog_type(struct bpf_prog_type_list *tl); + void bpf_register_map_type(struct bpf_map_type_list *tl); + + struct bpf_prog *bpf_prog_get(u32 ufd); ++struct bpf_prog *bpf_prog_inc(struct bpf_prog *prog); + void bpf_prog_put(struct bpf_prog *prog); + void bpf_prog_put_rcu(struct bpf_prog *prog); + + struct bpf_map *bpf_map_get_with_uref(u32 ufd); + struct bpf_map *__bpf_map_get(struct fd f); +-void bpf_map_inc(struct bpf_map *map, bool uref); ++struct bpf_map *bpf_map_inc(struct bpf_map *map, bool uref); + void bpf_map_put_with_uref(struct bpf_map *map); + void bpf_map_put(struct bpf_map *map); + +diff --git a/kernel/bpf/inode.c b/kernel/bpf/inode.c +index 5a8a797d50b7..d1a7646f79c5 100644 +--- a/kernel/bpf/inode.c ++++ b/kernel/bpf/inode.c +@@ -31,10 +31,10 @@ static void *bpf_any_get(void *raw, enum bpf_type type) + { + switch (type) { + case BPF_TYPE_PROG: +- atomic_inc(&((struct bpf_prog *)raw)->aux->refcnt); ++ raw = bpf_prog_inc(raw); + break; + case BPF_TYPE_MAP: +- bpf_map_inc(raw, true); ++ raw = bpf_map_inc(raw, true); + break; + default: + WARN_ON_ONCE(1); +@@ -277,7 +277,8 @@ static void *bpf_obj_do_get(const struct filename *pathname, + goto out; + + raw = bpf_any_get(inode->i_private, *type); +- touch_atime(&path); ++ if (!IS_ERR(raw)) ++ touch_atime(&path); + + path_put(&path); + return raw; +diff --git a/kernel/bpf/syscall.c b/kernel/bpf/syscall.c +index 3b39550d8485..4e32cc94edd9 100644 +--- a/kernel/bpf/syscall.c ++++ b/kernel/bpf/syscall.c +@@ -181,11 +181,18 @@ struct bpf_map *__bpf_map_get(struct fd f) + return f.file->private_data; + } + +-void bpf_map_inc(struct bpf_map *map, bool uref) ++/* prog's and map's refcnt limit */ ++#define BPF_MAX_REFCNT 32768 ++ ++struct bpf_map *bpf_map_inc(struct bpf_map *map, bool uref) + { +- atomic_inc(&map->refcnt); ++ if (atomic_inc_return(&map->refcnt) > BPF_MAX_REFCNT) { ++ atomic_dec(&map->refcnt); ++ return ERR_PTR(-EBUSY); ++ } + if (uref) + atomic_inc(&map->usercnt); ++ return map; + } + + struct bpf_map *bpf_map_get_with_uref(u32 ufd) +@@ -197,7 +204,7 @@ struct bpf_map *bpf_map_get_with_uref(u32 ufd) + if (IS_ERR(map)) + return map; + +- bpf_map_inc(map, true); ++ map = bpf_map_inc(map, true); + fdput(f); + + return map; +@@ -580,6 +587,15 @@ static struct bpf_prog *__bpf_prog_get(struct fd f) + return f.file->private_data; + } + ++struct bpf_prog *bpf_prog_inc(struct bpf_prog *prog) ++{ ++ if (atomic_inc_return(&prog->aux->refcnt) > BPF_MAX_REFCNT) { ++ atomic_dec(&prog->aux->refcnt); ++ return ERR_PTR(-EBUSY); ++ } ++ return prog; ++} ++ + /* called by sockets/tracing/seccomp before attaching program to an event + * pairs with bpf_prog_put() + */ +@@ -592,7 +608,7 @@ struct bpf_prog *bpf_prog_get(u32 ufd) + if (IS_ERR(prog)) + return prog; + +- atomic_inc(&prog->aux->refcnt); ++ prog = bpf_prog_inc(prog); + fdput(f); + + return prog; +diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c +index 2e7f7ab739e4..060e4c4c37ea 100644 +--- a/kernel/bpf/verifier.c ++++ b/kernel/bpf/verifier.c +@@ -2023,15 +2023,18 @@ static int replace_map_fd_with_map_ptr(struct verifier_env *env) + return -E2BIG; + } + +- /* remember this map */ +- env->used_maps[env->used_map_cnt++] = map; +- + /* hold the map. If the program is rejected by verifier, + * the map will be released by release_maps() or it + * will be used by the valid program until it's unloaded + * and all maps are released in free_bpf_prog_info() + */ +- bpf_map_inc(map, false); ++ map = bpf_map_inc(map, false); ++ if (IS_ERR(map)) { ++ fdput(f); ++ return PTR_ERR(map); ++ } ++ env->used_maps[env->used_map_cnt++] = map; ++ + fdput(f); + next_insn: + insn++; +-- +2.5.5 + diff --git a/kernel.spec b/kernel.spec index 3fd5c2d03..7b675e05e 100644 --- a/kernel.spec +++ b/kernel.spec @@ -660,6 +660,10 @@ Patch708: net-fix-infoleak-in-rtnetlink.patch #CVE-2016-xxxx rhbz 1333712 1333713 Patch709: propogate_mnt-Handle-the-first-propogated-copy-being.patch +#CVE-2016-4557 CVE-2016-4558 rhbz 1334307 1334303 1334311 +Patch711: bpf-fix-double-fdput-in-replace_map_fd_with_map_ptr.patch +Patch712: bpf-fix-refcnt-overflow.patch + # END OF PATCH DEFINITIONS %endif @@ -2181,6 +2185,10 @@ fi # # %changelog +* Mon May 09 2016 Josh Boyer +- CVE-2016-4557 bpf: Use after free vulnerability via double fdput + CVE-2016-4558 bpf: refcnt overflow (rhbz 1334307 1334303 1334311) + * Fri May 06 2016 Josh Boyer - Oops in propogate_mnt if first copy is slave (rhbz 1333712 1333713) From 99d77bae9e013d8ffc450bdf185e8d1aaee80d08 Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Mon, 9 May 2016 08:59:00 -0500 Subject: [PATCH 074/275] Disable CONFIG_RTL8XXXU_UNTESTED for a stable branch --- config-generic | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config-generic b/config-generic index c2e8352ce..ccc53d89a 100644 --- a/config-generic +++ b/config-generic @@ -1969,7 +1969,7 @@ CONFIG_RTL8188EE=m CONFIG_RTL8821AE=m CONFIG_RTL8XXXU=m # NOTE! This should be disabled when branching to stable -CONFIG_RTL8XXXU_UNTESTED=y +# CONFIG_RTL8XXXU_UNTESTED is not set CONFIG_MWIFIEX=m CONFIG_MWIFIEX_SDIO=m From 82c82b098d81337e40efea5fdd7acc164dfb1f14 Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Mon, 9 May 2016 09:43:00 -0500 Subject: [PATCH 075/275] Fix ACPI issues with sp5100_tco (rhbz 1328633) --- kernel.spec | 6 ++ ...perly-check-for-new-register-layouts.patch | 75 +++++++++++++++++++ 2 files changed, 81 insertions(+) create mode 100644 sp5100_tco-properly-check-for-new-register-layouts.patch diff --git a/kernel.spec b/kernel.spec index 7b675e05e..182e0a27e 100644 --- a/kernel.spec +++ b/kernel.spec @@ -664,6 +664,9 @@ Patch709: propogate_mnt-Handle-the-first-propogated-copy-being.patch Patch711: bpf-fix-double-fdput-in-replace_map_fd_with_map_ptr.patch Patch712: bpf-fix-refcnt-overflow.patch +#rhbz 1328633 +Patch713: sp5100_tco-properly-check-for-new-register-layouts.patch + # END OF PATCH DEFINITIONS %endif @@ -2185,6 +2188,9 @@ fi # # %changelog +* Mon May 09 2016 Justin M. Forbes +- Fix ACPI issues with sp5100_tco (rhbz 1328633) + * Mon May 09 2016 Josh Boyer - CVE-2016-4557 bpf: Use after free vulnerability via double fdput CVE-2016-4558 bpf: refcnt overflow (rhbz 1334307 1334303 1334311) diff --git a/sp5100_tco-properly-check-for-new-register-layouts.patch b/sp5100_tco-properly-check-for-new-register-layouts.patch new file mode 100644 index 000000000..83c86d151 --- /dev/null +++ b/sp5100_tco-properly-check-for-new-register-layouts.patch @@ -0,0 +1,75 @@ +From 5896a59895689db447e888c1714022bbb9526ede Mon Sep 17 00:00:00 2001 +From: Lucas Stach +Date: Tue, 3 May 2016 19:15:58 +0200 +Subject: [PATCH] sp5100_tco: properly check for new register layouts + +Commits 190aa4304de6 (Add AMD Mullins platform support) and +cca118fa2a0a94 (Add AMD Carrizo platform support) enabled the +driver on a lot more devices, but the following commit missed +a single location in the code when checking if the SB800 register +offsets should be used. This leads to the wrong register being +written which in turn causes ACPI to go haywire. + +Fix this by introducing a helper function to check for the new +register layout and use this consistently. + +https://bugzilla.kernel.org/show_bug.cgi?id=114201 +https://bugzilla.redhat.com/show_bug.cgi?id=1329910 +Fixes: bdecfcdb5461 (sp5100_tco: fix the device check for SB800 +and later chipsets) +Cc: stable@vger.kernel.org (4.5+) +Signed-off-by: Lucas Stach +--- + drivers/watchdog/sp5100_tco.c | 15 ++++++++++----- + 1 file changed, 10 insertions(+), 5 deletions(-) + +diff --git a/drivers/watchdog/sp5100_tco.c b/drivers/watchdog/sp5100_tco.c +index 6467b91..028618c 100644 +--- a/drivers/watchdog/sp5100_tco.c ++++ b/drivers/watchdog/sp5100_tco.c +@@ -73,6 +73,13 @@ MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started." + /* + * Some TCO specific functions + */ ++ ++static bool tco_has_sp5100_reg_layout(struct pci_dev *dev) ++{ ++ return dev->device == PCI_DEVICE_ID_ATI_SBX00_SMBUS && ++ dev->revision < 0x40; ++} ++ + static void tco_timer_start(void) + { + u32 val; +@@ -129,7 +136,7 @@ static void tco_timer_enable(void) + { + int val; + +- if (sp5100_tco_pci->revision >= 0x40) { ++ if (!tco_has_sp5100_reg_layout(sp5100_tco_pci)) { + /* For SB800 or later */ + /* Set the Watchdog timer resolution to 1 sec */ + outb(SB800_PM_WATCHDOG_CONFIG, SB800_IO_PM_INDEX_REG); +@@ -342,8 +349,7 @@ static unsigned char sp5100_tco_setupdevice(void) + /* + * Determine type of southbridge chipset. + */ +- if (sp5100_tco_pci->device == PCI_DEVICE_ID_ATI_SBX00_SMBUS && +- sp5100_tco_pci->revision < 0x40) { ++ if (tco_has_sp5100_reg_layout(sp5100_tco_pci)) { + dev_name = SP5100_DEVNAME; + index_reg = SP5100_IO_PM_INDEX_REG; + data_reg = SP5100_IO_PM_DATA_REG; +@@ -388,8 +394,7 @@ static unsigned char sp5100_tco_setupdevice(void) + * Secondly, Find the watchdog timer MMIO address + * from SBResource_MMIO register. + */ +- if (sp5100_tco_pci->device == PCI_DEVICE_ID_ATI_SBX00_SMBUS && +- sp5100_tco_pci->revision < 0x40) { ++ if (tco_has_sp5100_reg_layout(sp5100_tco_pci)) { + /* Read SBResource_MMIO from PCI config(PCI_Reg: 9Ch) */ + pci_read_config_dword(sp5100_tco_pci, + SP5100_SB_RESOURCE_MMIO_BASE, &val); +-- +2.7.4 + From a7b0d91e02b8df4b56325b22bc3aafd5253baa3a Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Tue, 10 May 2016 08:16:35 -0400 Subject: [PATCH 076/275] CVE-2016-4569 info leak in sound module (rhbz 1334643 1334645) --- ...Fix-leak-in-SNDRV_TIMER_IOCTL_PARAMS.patch | 33 ++++++++++++++++++ ...eak-in-events-via-snd_timer_user_cca.patch | 34 +++++++++++++++++++ ...eak-in-events-via-snd_timer_user_tin.patch | 34 +++++++++++++++++++ kernel.spec | 8 +++++ 4 files changed, 109 insertions(+) create mode 100644 ALSA-timer-Fix-leak-in-SNDRV_TIMER_IOCTL_PARAMS.patch create mode 100644 ALSA-timer-Fix-leak-in-events-via-snd_timer_user_cca.patch create mode 100644 ALSA-timer-Fix-leak-in-events-via-snd_timer_user_tin.patch diff --git a/ALSA-timer-Fix-leak-in-SNDRV_TIMER_IOCTL_PARAMS.patch b/ALSA-timer-Fix-leak-in-SNDRV_TIMER_IOCTL_PARAMS.patch new file mode 100644 index 000000000..3eb8bf183 --- /dev/null +++ b/ALSA-timer-Fix-leak-in-SNDRV_TIMER_IOCTL_PARAMS.patch @@ -0,0 +1,33 @@ +From 527a5767c165abd2b4dba99da992c51ca7547562 Mon Sep 17 00:00:00 2001 +From: Kangjie Lu +Date: Tue, 3 May 2016 16:44:07 -0400 +Subject: [PATCH 1/3] ALSA: timer: Fix leak in SNDRV_TIMER_IOCTL_PARAMS +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The stack object “tread” has a total size of 32 bytes. Its field +“event” and “val” both contain 4 bytes padding. These 8 bytes +padding bytes are sent to user without being initialized. + +Signed-off-by: Kangjie Lu +Signed-off-by: Takashi Iwai +--- + sound/core/timer.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/sound/core/timer.c b/sound/core/timer.c +index 6469bedda2f3..964f5ebf495e 100644 +--- a/sound/core/timer.c ++++ b/sound/core/timer.c +@@ -1739,6 +1739,7 @@ static int snd_timer_user_params(struct file *file, + if (tu->timeri->flags & SNDRV_TIMER_IFLG_EARLY_EVENT) { + if (tu->tread) { + struct snd_timer_tread tread; ++ memset(&tread, 0, sizeof(tread)); + tread.event = SNDRV_TIMER_EVENT_EARLY; + tread.tstamp.tv_sec = 0; + tread.tstamp.tv_nsec = 0; +-- +2.5.5 + diff --git a/ALSA-timer-Fix-leak-in-events-via-snd_timer_user_cca.patch b/ALSA-timer-Fix-leak-in-events-via-snd_timer_user_cca.patch new file mode 100644 index 000000000..e6f46f8a8 --- /dev/null +++ b/ALSA-timer-Fix-leak-in-events-via-snd_timer_user_cca.patch @@ -0,0 +1,34 @@ +From addd6e9f0e25efb00d813d54528607c75b77c416 Mon Sep 17 00:00:00 2001 +From: Kangjie Lu +Date: Tue, 3 May 2016 16:44:20 -0400 +Subject: [PATCH 2/3] ALSA: timer: Fix leak in events via + snd_timer_user_ccallback +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The stack object “r1” has a total size of 32 bytes. Its field +“event” and “val” both contain 4 bytes padding. These 8 bytes +padding bytes are sent to user without being initialized. + +Signed-off-by: Kangjie Lu +Signed-off-by: Takashi Iwai +--- + sound/core/timer.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/sound/core/timer.c b/sound/core/timer.c +index 964f5ebf495e..e98fa5feb731 100644 +--- a/sound/core/timer.c ++++ b/sound/core/timer.c +@@ -1225,6 +1225,7 @@ static void snd_timer_user_ccallback(struct snd_timer_instance *timeri, + tu->tstamp = *tstamp; + if ((tu->filter & (1 << event)) == 0 || !tu->tread) + return; ++ memset(&r1, 0, sizeof(r1)); + r1.event = event; + r1.tstamp = *tstamp; + r1.val = resolution; +-- +2.5.5 + diff --git a/ALSA-timer-Fix-leak-in-events-via-snd_timer_user_tin.patch b/ALSA-timer-Fix-leak-in-events-via-snd_timer_user_tin.patch new file mode 100644 index 000000000..7851c55a2 --- /dev/null +++ b/ALSA-timer-Fix-leak-in-events-via-snd_timer_user_tin.patch @@ -0,0 +1,34 @@ +From b06a443b5679e9a0298e2f206ddb60845569f62f Mon Sep 17 00:00:00 2001 +From: Kangjie Lu +Date: Tue, 3 May 2016 16:44:32 -0400 +Subject: [PATCH 3/3] ALSA: timer: Fix leak in events via + snd_timer_user_tinterrupt +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The stack object “r1” has a total size of 32 bytes. Its field +“event” and “val” both contain 4 bytes padding. These 8 bytes +padding bytes are sent to user without being initialized. + +Signed-off-by: Kangjie Lu +Signed-off-by: Takashi Iwai +--- + sound/core/timer.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/sound/core/timer.c b/sound/core/timer.c +index e98fa5feb731..c69a27155433 100644 +--- a/sound/core/timer.c ++++ b/sound/core/timer.c +@@ -1268,6 +1268,7 @@ static void snd_timer_user_tinterrupt(struct snd_timer_instance *timeri, + } + if ((tu->filter & (1 << SNDRV_TIMER_EVENT_RESOLUTION)) && + tu->last_resolution != resolution) { ++ memset(&r1, 0, sizeof(r1)); + r1.event = SNDRV_TIMER_EVENT_RESOLUTION; + r1.tstamp = tstamp; + r1.val = resolution; +-- +2.5.5 + diff --git a/kernel.spec b/kernel.spec index 182e0a27e..9db76e260 100644 --- a/kernel.spec +++ b/kernel.spec @@ -667,6 +667,11 @@ Patch712: bpf-fix-refcnt-overflow.patch #rhbz 1328633 Patch713: sp5100_tco-properly-check-for-new-register-layouts.patch +#CVE-2016-4569 rhbz 1334643 1334645 +Patch714: ALSA-timer-Fix-leak-in-SNDRV_TIMER_IOCTL_PARAMS.patch +Patch715: ALSA-timer-Fix-leak-in-events-via-snd_timer_user_cca.patch +Patch716: ALSA-timer-Fix-leak-in-events-via-snd_timer_user_tin.patch + # END OF PATCH DEFINITIONS %endif @@ -2188,6 +2193,9 @@ fi # # %changelog +* Tue May 10 2016 Josh Boyer +- CVE-2016-4569 info leak in sound module (rhbz 1334643 1334645) + * Mon May 09 2016 Justin M. Forbes - Fix ACPI issues with sp5100_tco (rhbz 1328633) From ed0df02784c7adf7e0f5071e4b1e90ff7f052427 Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Tue, 10 May 2016 08:24:56 -0400 Subject: [PATCH 077/275] Enable XEN SCSI front and backend (rhbz 1334512) --- config-x86-generic | 4 ++-- kernel.spec | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/config-x86-generic b/config-x86-generic index 47060b9de..ea3d44975 100644 --- a/config-x86-generic +++ b/config-x86-generic @@ -319,8 +319,8 @@ CONFIG_INPUT_XEN_KBDDEV_FRONTEND=m CONFIG_XEN_SELFBALLOONING=y CONFIG_XEN_PCIDEV_BACKEND=m CONFIG_XEN_ACPI_PROCESSOR=m -# CONFIG_XEN_SCSI_FRONTEND is not set -# CONFIG_XEN_SCSI_BACKEND is not set +CONFIG_XEN_SCSI_FRONTEND=m +CONFIG_XEN_SCSI_BACKEND=m CONFIG_XEN_SYMS=y CONFIG_SPI=y diff --git a/kernel.spec b/kernel.spec index 9db76e260..7012e80dc 100644 --- a/kernel.spec +++ b/kernel.spec @@ -2194,6 +2194,7 @@ fi # %changelog * Tue May 10 2016 Josh Boyer +- Enable XEN SCSI front and backend (rhbz 1334512) - CVE-2016-4569 info leak in sound module (rhbz 1334643 1334645) * Mon May 09 2016 Justin M. Forbes From 8cbd263769db321c097cbbff1e6c234febf016d9 Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Wed, 11 May 2016 12:25:53 -0500 Subject: [PATCH 078/275] Linux v4.5.4 --- ...ix-imx-ipuv3-crtc-module-autoloading.patch | 37 ----- kernel.spec | 14 +- ...ndle-the-first-propogated-copy-being.patch | 131 ------------------ sources | 2 +- 4 files changed, 5 insertions(+), 179 deletions(-) delete mode 100644 0001-gpu-ipu-v3-Fix-imx-ipuv3-crtc-module-autoloading.patch delete mode 100644 propogate_mnt-Handle-the-first-propogated-copy-being.patch diff --git a/0001-gpu-ipu-v3-Fix-imx-ipuv3-crtc-module-autoloading.patch b/0001-gpu-ipu-v3-Fix-imx-ipuv3-crtc-module-autoloading.patch deleted file mode 100644 index d26c5d52d..000000000 --- a/0001-gpu-ipu-v3-Fix-imx-ipuv3-crtc-module-autoloading.patch +++ /dev/null @@ -1,37 +0,0 @@ -From 88fd0f33c3cc5aa6a26f56902241941ac717e9f8 Mon Sep 17 00:00:00 2001 -From: Peter Robinson -Date: Wed, 27 Apr 2016 13:44:05 +0100 -Subject: [PATCH] gpu: ipu-v3: Fix imx-ipuv3-crtc module autoloading - ---- - drivers/gpu/ipu-v3/ipu-common.c | 7 ++++++- - 1 file changed, 6 insertions(+), 1 deletion(-) - -diff --git a/drivers/gpu/ipu-v3/ipu-common.c b/drivers/gpu/ipu-v3/ipu-common.c -index e00db3f..abb98c7 100644 ---- a/drivers/gpu/ipu-v3/ipu-common.c -+++ b/drivers/gpu/ipu-v3/ipu-common.c -@@ -1068,7 +1068,6 @@ static int ipu_add_client_devices(struct ipu_soc *ipu, unsigned long ipu_base) - goto err_register; - } - -- pdev->dev.of_node = of_node; - pdev->dev.parent = dev; - - ret = platform_device_add_data(pdev, ®->pdata, -@@ -1079,6 +1078,12 @@ static int ipu_add_client_devices(struct ipu_soc *ipu, unsigned long ipu_base) - platform_device_put(pdev); - goto err_register; - } -+ -+ /* -+ * Set of_node only after calling platform_device_add. Otherwise -+ * the platform:imx-ipuv3-crtc modalias won't be used. -+ */ -+ pdev->dev.of_node = of_node; - } - - return 0; --- -2.7.4 - diff --git a/kernel.spec b/kernel.spec index 7012e80dc..81d2e8838 100644 --- a/kernel.spec +++ b/kernel.spec @@ -54,7 +54,7 @@ Summary: The Linux kernel %if 0%{?released_kernel} # Do we have a -stable update to apply? -%define stable_update 3 +%define stable_update 4 # Set rpm version accordingly %if 0%{?stable_update} %define stablerev %{stable_update} @@ -506,9 +506,6 @@ Patch422: geekbox-v4-device-tree-support.patch # http://www.spinics.net/lists/arm-kernel/msg483898.html Patch423: Initial-AllWinner-A64-and-PINE64-support.patch -# rhbz 1321330 http://www.spinics.net/lists/dri-devel/msg105829.html -Patch425: 0001-gpu-ipu-v3-Fix-imx-ipuv3-crtc-module-autoloading.patch - # http://www.spinics.net/lists/linux-tegra/msg26029.html Patch426: usb-phy-tegra-Add-38.4MHz-clock-table-entry.patch @@ -632,9 +629,6 @@ Patch665: netfilter-x_tables-deal-with-bogus-nextoffset-values.patch # CVE-2016-3672 rhbz 1324749 1324750 Patch689: x86-mm-32-Enable-full-randomization-on-i386-and-X86_.patch -#rhbz 1309980 -Patch698: 0001-ACPI-processor-Request-native-thermal-interrupt-hand.patch - #rhbz 1309487 Patch701: antenna_select.patch @@ -657,9 +651,6 @@ Patch706: USB-usbfs-fix-potential-infoleak-in-devio.patch Patch707: net-fix-infoleak-in-llc.patch Patch708: net-fix-infoleak-in-rtnetlink.patch -#CVE-2016-xxxx rhbz 1333712 1333713 -Patch709: propogate_mnt-Handle-the-first-propogated-copy-being.patch - #CVE-2016-4557 CVE-2016-4558 rhbz 1334307 1334303 1334311 Patch711: bpf-fix-double-fdput-in-replace_map_fd_with_map_ptr.patch Patch712: bpf-fix-refcnt-overflow.patch @@ -2193,6 +2184,9 @@ fi # # %changelog +* Wed May 11 2016 Justin M. Forbes - 4.5.4-300 +- Linux v4.5.4 + * Tue May 10 2016 Josh Boyer - Enable XEN SCSI front and backend (rhbz 1334512) - CVE-2016-4569 info leak in sound module (rhbz 1334643 1334645) diff --git a/propogate_mnt-Handle-the-first-propogated-copy-being.patch b/propogate_mnt-Handle-the-first-propogated-copy-being.patch deleted file mode 100644 index c5c594045..000000000 --- a/propogate_mnt-Handle-the-first-propogated-copy-being.patch +++ /dev/null @@ -1,131 +0,0 @@ -From ba23dd7749dfeab511f2eab29eef21dde31ad480 Mon Sep 17 00:00:00 2001 -From: "Eric W. Biederman" -Date: Thu, 5 May 2016 09:29:29 -0500 -Subject: [PATCH] propogate_mnt: Handle the first propogated copy being a slave - -When the first propgated copy was a slave the following oops would result: -> BUG: unable to handle kernel NULL pointer dereference at 0000000000000010 -> IP: [] propagate_one+0xbe/0x1c0 -> PGD bacd4067 PUD bac66067 PMD 0 -> Oops: 0000 [#1] SMP -> Modules linked in: -> CPU: 1 PID: 824 Comm: mount Not tainted 4.6.0-rc5userns+ #1523 -> Hardware name: Bochs Bochs, BIOS Bochs 01/01/2007 -> task: ffff8800bb0a8000 ti: ffff8800bac3c000 task.ti: ffff8800bac3c000 -> RIP: 0010:[] [] propagate_one+0xbe/0x1c0 -> RSP: 0018:ffff8800bac3fd38 EFLAGS: 00010283 -> RAX: 0000000000000000 RBX: ffff8800bb77ec00 RCX: 0000000000000010 -> RDX: 0000000000000000 RSI: ffff8800bb58c000 RDI: ffff8800bb58c480 -> RBP: ffff8800bac3fd48 R08: 0000000000000001 R09: 0000000000000000 -> R10: 0000000000001ca1 R11: 0000000000001c9d R12: 0000000000000000 -> R13: ffff8800ba713800 R14: ffff8800bac3fda0 R15: ffff8800bb77ec00 -> FS: 00007f3c0cd9b7e0(0000) GS:ffff8800bfb00000(0000) knlGS:0000000000000000 -> CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 -> CR2: 0000000000000010 CR3: 00000000bb79d000 CR4: 00000000000006e0 -> Stack: -> ffff8800bb77ec00 0000000000000000 ffff8800bac3fd88 ffffffff811fbf85 -> ffff8800bac3fd98 ffff8800bb77f080 ffff8800ba713800 ffff8800bb262b40 -> 0000000000000000 0000000000000000 ffff8800bac3fdd8 ffffffff811f1da0 -> Call Trace: -> [] propagate_mnt+0x105/0x140 -> [] attach_recursive_mnt+0x120/0x1e0 -> [] graft_tree+0x63/0x70 -> [] do_add_mount+0x9b/0x100 -> [] do_mount+0x2aa/0xdf0 -> [] ? strndup_user+0x4e/0x70 -> [] SyS_mount+0x75/0xc0 -> [] do_syscall_64+0x4b/0xa0 -> [] entry_SYSCALL64_slow_path+0x25/0x25 -> Code: 00 00 75 ec 48 89 0d 02 22 22 01 8b 89 10 01 00 00 48 89 05 fd 21 22 01 39 8e 10 01 00 00 0f 84 e0 00 00 00 48 8b 80 d8 00 00 00 <48> 8b 50 10 48 89 05 df 21 22 01 48 89 15 d0 21 22 01 8b 53 30 -> RIP [] propagate_one+0xbe/0x1c0 -> RSP -> CR2: 0000000000000010 -> ---[ end trace 2725ecd95164f217 ]--- - -This oops happens with the namespace_sem held and can be triggered by -non-root users. An all around not pleasant experience. - -To avoid this scenario when finding the appropriate source mount to -copy stop the walk up the mnt_master chain when the first source mount -is encountered. - -Further rewrite the walk up the last_source mnt_master chain so that -it is clear what is going on. - -The reason why the first source mount is special is that it it's -mnt_parent is not a mount in the dest_mnt propagation tree, and as -such termination conditions based up on the dest_mnt mount propgation -tree do not make sense. - -To avoid other kinds of confusion last_dest is not changed when -computing last_source. last_dest is only used once in propagate_one -and that is above the point of the code being modified, so changing -the global variable is meaningless and confusing. - -Cc: stable@vger.kernel.org -fixes: f2ebb3a921c1ca1e2ddd9242e95a1989a50c4c68 ("smarter propagate_mnt()") -Reported-by: Tycho Andersen -Reviewed-by: Seth Forshee -Tested-by: Seth Forshee -Signed-off-by: "Eric W. Biederman" ---- - fs/pnode.c | 25 ++++++++++++++----------- - 1 file changed, 14 insertions(+), 11 deletions(-) - -diff --git a/fs/pnode.c b/fs/pnode.c -index c524fdddc7fb..99899705b105 100644 ---- a/fs/pnode.c -+++ b/fs/pnode.c -@@ -198,7 +198,7 @@ static struct mount *next_group(struct mount *m, struct mount *origin) - - /* all accesses are serialized by namespace_sem */ - static struct user_namespace *user_ns; --static struct mount *last_dest, *last_source, *dest_master; -+static struct mount *last_dest, *first_source, *last_source, *dest_master; - static struct mountpoint *mp; - static struct hlist_head *list; - -@@ -221,20 +221,22 @@ static int propagate_one(struct mount *m) - type = CL_MAKE_SHARED; - } else { - struct mount *n, *p; -+ bool done; - for (n = m; ; n = p) { - p = n->mnt_master; -- if (p == dest_master || IS_MNT_MARKED(p)) { -- while (last_dest->mnt_master != p) { -- last_source = last_source->mnt_master; -- last_dest = last_source->mnt_parent; -- } -- if (!peers(n, last_dest)) { -- last_source = last_source->mnt_master; -- last_dest = last_source->mnt_parent; -- } -+ if (p == dest_master || IS_MNT_MARKED(p)) - break; -- } - } -+ do { -+ struct mount *parent = last_source->mnt_parent; -+ if (last_source == first_source) -+ break; -+ done = parent->mnt_master == p; -+ if (done && peers(n, parent)) -+ break; -+ last_source = last_source->mnt_master; -+ } while (!done); -+ - type = CL_SLAVE; - /* beginning of peer group among the slaves? */ - if (IS_MNT_SHARED(m)) -@@ -286,6 +288,7 @@ int propagate_mnt(struct mount *dest_mnt, struct mountpoint *dest_mp, - */ - user_ns = current->nsproxy->mnt_ns->user_ns; - last_dest = dest_mnt; -+ first_source = source_mnt; - last_source = source_mnt; - mp = dest_mp; - list = tree_list; --- -2.5.5 - diff --git a/sources b/sources index 623f6493c..1d6359066 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ a60d48eee08ec0536d5efb17ca819aef linux-4.5.tar.xz 6f557fe90b800b615c85c2ca04da6154 perf-man-4.5.tar.gz -efc81327bd2bd0d946f057ac71cbb1a7 patch-4.5.3.xz +137460a1e32335e2eedc61fcfc2643fa patch-4.5.4.xz From decdd1f9105004f6e2ca24cc85bffcf6efb82d28 Mon Sep 17 00:00:00 2001 From: Peter Robinson Date: Thu, 12 May 2016 18:06:15 +0100 Subject: [PATCH 079/275] Enable PCI_HOST_GENERIC for all ARM arches --- config-arm-generic | 2 +- config-armv7-generic | 1 - kernel.spec | 3 +++ 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/config-arm-generic b/config-arm-generic index 6d27a0828..db4026b83 100644 --- a/config-arm-generic +++ b/config-arm-generic @@ -195,7 +195,7 @@ CONFIG_OF_NET=y CONFIG_OF_OVERLAY=y CONFIG_OF_PCI_IRQ=m CONFIG_OF_PCI=m -# CONFIG_PCI_HOST_GENERIC is not set +CONFIG_PCI_HOST_GENERIC=y # CONFIG_PCIE_IPROC is not set CONFIG_OF_RESERVED_MEM=y CONFIG_OF_RESOLVE=y diff --git a/config-armv7-generic b/config-armv7-generic index 54f79c962..bcfb36bb1 100644 --- a/config-armv7-generic +++ b/config-armv7-generic @@ -154,7 +154,6 @@ CONFIG_LSM_MMAP_MIN_ADDR=32768 CONFIG_XZ_DEC_ARM=y -CONFIG_PCI_HOST_GENERIC=y # CONFIG_PCI_LAYERSCAPE is not set # Do NOT enable this, it breaks stuff and makes things go slow # CONFIG_UACCESS_WITH_MEMCPY is not set diff --git a/kernel.spec b/kernel.spec index 81d2e8838..727d48b84 100644 --- a/kernel.spec +++ b/kernel.spec @@ -2184,6 +2184,9 @@ fi # # %changelog +* Thu May 12 2016 Peter Robinson +- Enable PCI_HOST_GENERIC for all ARM arches (Jeremy Linton) + * Wed May 11 2016 Justin M. Forbes - 4.5.4-300 - Linux v4.5.4 From bfbc6028ec5449ff943997ec78019de74c9f871c Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Fri, 13 May 2016 08:12:17 -0400 Subject: [PATCH 080/275] CVE-2016-0758 pointer corruption in asn1 decoder (rhbz 1300257 1335386) --- ...N.1-indefinite-length-object-parsing.patch | 91 +++++++++++++++++++ kernel.spec | 6 ++ 2 files changed, 97 insertions(+) create mode 100644 KEYS-Fix-ASN.1-indefinite-length-object-parsing.patch diff --git a/KEYS-Fix-ASN.1-indefinite-length-object-parsing.patch b/KEYS-Fix-ASN.1-indefinite-length-object-parsing.patch new file mode 100644 index 000000000..957de0977 --- /dev/null +++ b/KEYS-Fix-ASN.1-indefinite-length-object-parsing.patch @@ -0,0 +1,91 @@ +From 23c8a812dc3c621009e4f0e5342aa4e2ede1ceaa Mon Sep 17 00:00:00 2001 +From: David Howells +Date: Tue, 23 Feb 2016 11:03:12 +0000 +Subject: [PATCH] KEYS: Fix ASN.1 indefinite length object parsing + +This fixes CVE-2016-0758. + +In the ASN.1 decoder, when the length field of an ASN.1 value is extracted, +it isn't validated against the remaining amount of data before being added +to the cursor. With a sufficiently large size indicated, the check: + + datalen - dp < 2 + +may then fail due to integer overflow. + +Fix this by checking the length indicated against the amount of remaining +data in both places a definite length is determined. + +Whilst we're at it, make the following changes: + + (1) Check the maximum size of extended length does not exceed the capacity + of the variable it's being stored in (len) rather than the type that + variable is assumed to be (size_t). + + (2) Compare the EOC tag to the symbolic constant ASN1_EOC rather than the + integer 0. + + (3) To reduce confusion, move the initialisation of len outside of: + + for (len = 0; n > 0; n--) { + + since it doesn't have anything to do with the loop counter n. + +Signed-off-by: David Howells +Reviewed-by: Mimi Zohar +Acked-by: David Woodhouse +Acked-by: Peter Jones +--- + lib/asn1_decoder.c | 16 +++++++++------- + 1 file changed, 9 insertions(+), 7 deletions(-) + +diff --git a/lib/asn1_decoder.c b/lib/asn1_decoder.c +index 2b3f46c049d4..554522934c44 100644 +--- a/lib/asn1_decoder.c ++++ b/lib/asn1_decoder.c +@@ -74,7 +74,7 @@ next_tag: + + /* Extract a tag from the data */ + tag = data[dp++]; +- if (tag == 0) { ++ if (tag == ASN1_EOC) { + /* It appears to be an EOC. */ + if (data[dp++] != 0) + goto invalid_eoc; +@@ -96,10 +96,8 @@ next_tag: + + /* Extract the length */ + len = data[dp++]; +- if (len <= 0x7f) { +- dp += len; +- goto next_tag; +- } ++ if (len <= 0x7f) ++ goto check_length; + + if (unlikely(len == ASN1_INDEFINITE_LENGTH)) { + /* Indefinite length */ +@@ -110,14 +108,18 @@ next_tag: + } + + n = len - 0x80; +- if (unlikely(n > sizeof(size_t) - 1)) ++ if (unlikely(n > sizeof(len) - 1)) + goto length_too_long; + if (unlikely(n > datalen - dp)) + goto data_overrun_error; +- for (len = 0; n > 0; n--) { ++ len = 0; ++ for (; n > 0; n--) { + len <<= 8; + len |= data[dp++]; + } ++check_length: ++ if (len > datalen - dp) ++ goto data_overrun_error; + dp += len; + goto next_tag; + +-- +2.5.5 + diff --git a/kernel.spec b/kernel.spec index 727d48b84..f9ca10b01 100644 --- a/kernel.spec +++ b/kernel.spec @@ -663,6 +663,9 @@ Patch714: ALSA-timer-Fix-leak-in-SNDRV_TIMER_IOCTL_PARAMS.patch Patch715: ALSA-timer-Fix-leak-in-events-via-snd_timer_user_cca.patch Patch716: ALSA-timer-Fix-leak-in-events-via-snd_timer_user_tin.patch +#CVE-2016-0758 rhbz 1300257 1335386 +Patch717: KEYS-Fix-ASN.1-indefinite-length-object-parsing.patch + # END OF PATCH DEFINITIONS %endif @@ -2184,6 +2187,9 @@ fi # # %changelog +* Fri May 13 2016 Josh Boyer +- CVE-2016-0758 pointer corruption in asn1 decoder (rhbz 1300257 1335386) + * Thu May 12 2016 Peter Robinson - Enable PCI_HOST_GENERIC for all ARM arches (Jeremy Linton) From d79e1f5c54658e2d14b524d6b1e98ec346f3546c Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Mon, 16 May 2016 10:26:31 -0400 Subject: [PATCH 081/275] CVE-2016-3713 kvm: out-of-bounds access in set_var_mtrr_msr (rhbz 1332139 1336410) --- KVM-MTRR-remove-MSR-0x2f8.patch | 49 +++++++++++++++++++++++++++++++++ kernel.spec | 6 ++++ 2 files changed, 55 insertions(+) create mode 100644 KVM-MTRR-remove-MSR-0x2f8.patch diff --git a/KVM-MTRR-remove-MSR-0x2f8.patch b/KVM-MTRR-remove-MSR-0x2f8.patch new file mode 100644 index 000000000..8066b2e8f --- /dev/null +++ b/KVM-MTRR-remove-MSR-0x2f8.patch @@ -0,0 +1,49 @@ +From bb0f06280beb6507226627a85076ae349a23fe22 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Radim=20Kr=C4=8Dm=C3=A1=C5=99?= +Date: Mon, 16 May 2016 09:45:35 -0400 +Subject: [PATCH] KVM: MTRR: remove MSR 0x2f8 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +MSR 0x2f8 accessed the 124th Variable Range MTRR ever since MTRR support +was introduced by 9ba075a664df ("KVM: MTRR support"). + +0x2f8 became harmful when 910a6aae4e2e ("KVM: MTRR: exactly define the +size of variable MTRRs") shrinked the array of VR MTRRs from 256 to 8, +which made access to index 124 out of bounds. The surrounding code only +WARNs in this situation, thus the guest gained a limited read/write +access to struct kvm_arch_vcpu. + +0x2f8 is not a valid VR MTRR MSR, because KVM has/advertises only 16 VR +MTRR MSRs, 0x200-0x20f. Every VR MTRR is set up using two MSRs, 0x2f8 +was treated as a PHYSBASE and 0x2f9 would be its PHYSMASK, but 0x2f9 was +not implemented in KVM, therefore 0x2f8 could never do anything useful +and getting rid of it is safe. + +This fixes CVE-2016-TBD. + +Fixes: 910a6aae4e2e ("KVM: MTRR: exactly define the size of variable MTRRs") +Cc: stable@vger.kernel.org +Reported-by: David Matlack +Signed-off-by: Radim Krčmář +--- + arch/x86/kvm/mtrr.c | 2 -- + 1 file changed, 2 deletions(-) + +diff --git a/arch/x86/kvm/mtrr.c b/arch/x86/kvm/mtrr.c +index 3f8c732117ec..c146f3c262c3 100644 +--- a/arch/x86/kvm/mtrr.c ++++ b/arch/x86/kvm/mtrr.c +@@ -44,8 +44,6 @@ static bool msr_mtrr_valid(unsigned msr) + case MSR_MTRRdefType: + case MSR_IA32_CR_PAT: + return true; +- case 0x2f8: +- return true; + } + return false; + } +-- +2.5.5 + diff --git a/kernel.spec b/kernel.spec index f9ca10b01..957084563 100644 --- a/kernel.spec +++ b/kernel.spec @@ -666,6 +666,9 @@ Patch716: ALSA-timer-Fix-leak-in-events-via-snd_timer_user_tin.patch #CVE-2016-0758 rhbz 1300257 1335386 Patch717: KEYS-Fix-ASN.1-indefinite-length-object-parsing.patch +#CVE-2016-3713 rhbz 1332139 1336410 +Patch718: KVM-MTRR-remove-MSR-0x2f8.patch + # END OF PATCH DEFINITIONS %endif @@ -2187,6 +2190,9 @@ fi # # %changelog +* Mon May 16 2016 Josh Boyer +- CVE-2016-3713 kvm: out-of-bounds access in set_var_mtrr_msr (rhbz 1332139 1336410) + * Fri May 13 2016 Josh Boyer - CVE-2016-0758 pointer corruption in asn1 decoder (rhbz 1300257 1335386) From 35e58915f08d86ecd7f84e84f5ecd2927b88f8c7 Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Mon, 16 May 2016 11:43:30 -0500 Subject: [PATCH 082/275] Disable CONFIG_DEBUG_VM_PGFLAGS on non debug kernels (rhbz 1335173) --- Makefile | 1 + Makefile.release | 1 + config-debug | 2 ++ config-generic | 1 - config-nodebug | 2 ++ kernel.spec | 3 +++ 6 files changed, 9 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 694ac55af..22f5ddbc8 100644 --- a/Makefile +++ b/Makefile @@ -37,6 +37,7 @@ debug: @perl -pi -e 's/# CONFIG_PROVE_RCU is not set/CONFIG_PROVE_RCU=y/' config-nodebug @perl -pi -e 's/# CONFIG_DEBUG_SPINLOCK is not set/CONFIG_DEBUG_SPINLOCK=y/' config-nodebug @perl -pi -e 's/# CONFIG_DEBUG_VM is not set/CONFIG_DEBUG_VM=y/' config-nodebug + @perl -pi -e 's/# CONFIG_DEBUG_VM_PGFLAGS is not set/CONFIG_DEBUG_VM_PGFLAGS=y/' config-nodebug @perl -pi -e 's/# CONFIG_FAULT_INJECTION is not set/CONFIG_FAULT_INJECTION=y/' config-nodebug @perl -pi -e 's/# CONFIG_FAILSLAB is not set/CONFIG_FAILSLAB=y/' config-nodebug @perl -pi -e 's/# CONFIG_FAIL_PAGE_ALLOC is not set/CONFIG_FAIL_PAGE_ALLOC=y/' config-nodebug diff --git a/Makefile.release b/Makefile.release index 6fa0645b8..7a934b7c7 100644 --- a/Makefile.release +++ b/Makefile.release @@ -17,6 +17,7 @@ config-release: @perl -pi -e 's/CONFIG_PROVE_RCU=y/# CONFIG_PROVE_RCU is not set/' config-nodebug @perl -pi -e 's/CONFIG_DEBUG_SPINLOCK=y/# CONFIG_DEBUG_SPINLOCK is not set/' config-nodebug @perl -pi -e 's/CONFIG_DEBUG_VM=y/# CONFIG_DEBUG_VM is not set/' config-nodebug + @perl -pi -e 's/CONFIG_DEBUG_VM_PGFLAGS=y/# CONFIG_DEBUG_VM_PGFLAGS is not set/' config-nodebug @perl -pi -e 's/CONFIG_FAULT_INJECTION=y/# CONFIG_FAULT_INJECTION is not set/' config-nodebug @perl -pi -e 's/CONFIG_FAILSLAB=y/# CONFIG_FAILSLAB is not set/' config-nodebug @perl -pi -e 's/CONFIG_FAIL_PAGE_ALLOC=y/# CONFIG_FAIL_PAGE_ALLOC is not set/' config-nodebug diff --git a/config-debug b/config-debug index fc6505b48..c0b226889 100644 --- a/config-debug +++ b/config-debug @@ -128,3 +128,5 @@ CONFIG_EDAC_DEBUG=y CONFIG_SPI_DEBUG=y CONFIG_X86_DEBUG_STATIC_CPU_HAS=y + +CONFIG_DEBUG_VM_PGFLAGS=y diff --git a/config-generic b/config-generic index ccc53d89a..a62e247a8 100644 --- a/config-generic +++ b/config-generic @@ -4822,7 +4822,6 @@ CONFIG_DEBUG_BOOT_PARAMS=y CONFIG_DEBUG_VM=y # CONFIG_DEBUG_VM_VMACACHE is not set # CONFIG_DEBUG_VM_RB is not set # revisit this if performance isn't horrible -CONFIG_DEBUG_VM_PGFLAGS=y # CONFIG_DEBUG_STRICT_USER_COPY_CHECKS is not set CONFIG_LOCKUP_DETECTOR=y # CONFIG_DEBUG_INFO_REDUCED is not set diff --git a/config-nodebug b/config-nodebug index c173637a2..c070f68cf 100644 --- a/config-nodebug +++ b/config-nodebug @@ -128,3 +128,5 @@ CONFIG_DEBUG_KMEMLEAK_DEFAULT_OFF=y # CONFIG_SPI_DEBUG is not set # CONFIG_X86_DEBUG_STATIC_CPU_HAS is not set + +# CONFIG_DEBUG_VM_PGFLAGS is not set diff --git a/kernel.spec b/kernel.spec index 957084563..98cc9035f 100644 --- a/kernel.spec +++ b/kernel.spec @@ -2190,6 +2190,9 @@ fi # # %changelog +* Mon May 16 2016 Justin M. Forbes +- Disable CONFIG_DEBUG_VM_PGFLAGS on non debug kernels (rhbz 1335173) + * Mon May 16 2016 Josh Boyer - CVE-2016-3713 kvm: out-of-bounds access in set_var_mtrr_msr (rhbz 1332139 1336410) From 2b03673893aaa6b83e58dc3da35e68bafa088f1a Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Thu, 19 May 2016 08:08:00 -0400 Subject: [PATCH 083/275] CVE-2016-4913 isofs: info leak with malformed NM entries (rhbz 1337528 1337529) --- ...filename-handle-malformed-NM-entries.patch | 63 +++++++++++++++++++ kernel.spec | 6 ++ 2 files changed, 69 insertions(+) create mode 100644 get_rock_ridge_filename-handle-malformed-NM-entries.patch diff --git a/get_rock_ridge_filename-handle-malformed-NM-entries.patch b/get_rock_ridge_filename-handle-malformed-NM-entries.patch new file mode 100644 index 000000000..3f5db6c8a --- /dev/null +++ b/get_rock_ridge_filename-handle-malformed-NM-entries.patch @@ -0,0 +1,63 @@ +From 99d825822eade8d827a1817357cbf3f889a552d6 Mon Sep 17 00:00:00 2001 +From: Al Viro +Date: Thu, 5 May 2016 16:25:35 -0400 +Subject: [PATCH] get_rock_ridge_filename(): handle malformed NM entries + +Payloads of NM entries are not supposed to contain NUL. When we run +into such, only the part prior to the first NUL goes into the +concatenation (i.e. the directory entry name being encoded by a bunch +of NM entries). We do stop when the amount collected so far + the +claimed amount in the current NM entry exceed 254. So far, so good, +but what we return as the total length is the sum of *claimed* +sizes, not the actual amount collected. And that can grow pretty +large - not unlimited, since you'd need to put CE entries in +between to be able to get more than the maximum that could be +contained in one isofs directory entry / continuation chunk and +we are stop once we'd encountered 32 CEs, but you can get about 8Kb +easily. And that's what will be passed to readdir callback as the +name length. 8Kb __copy_to_user() from a buffer allocated by +__get_free_page() + +Cc: stable@vger.kernel.org # 0.98pl6+ (yes, really) +Signed-off-by: Al Viro +--- + fs/isofs/rock.c | 13 ++++++++++--- + 1 file changed, 10 insertions(+), 3 deletions(-) + +diff --git a/fs/isofs/rock.c b/fs/isofs/rock.c +index 5384ceb35b1c..98b3eb7d8eaf 100644 +--- a/fs/isofs/rock.c ++++ b/fs/isofs/rock.c +@@ -203,6 +203,8 @@ int get_rock_ridge_filename(struct iso_directory_record *de, + int retnamlen = 0; + int truncate = 0; + int ret = 0; ++ char *p; ++ int len; + + if (!ISOFS_SB(inode->i_sb)->s_rock) + return 0; +@@ -267,12 +269,17 @@ repeat: + rr->u.NM.flags); + break; + } +- if ((strlen(retname) + rr->len - 5) >= 254) { ++ len = rr->len - 5; ++ if (retnamlen + len >= 254) { + truncate = 1; + break; + } +- strncat(retname, rr->u.NM.name, rr->len - 5); +- retnamlen += rr->len - 5; ++ p = memchr(rr->u.NM.name, '\0', len); ++ if (unlikely(p)) ++ len = p - rr->u.NM.name; ++ memcpy(retname + retnamlen, rr->u.NM.name, len); ++ retnamlen += len; ++ retname[retnamlen] = '\0'; + break; + case SIG('R', 'E'): + kfree(rs.buffer); +-- +2.5.5 + diff --git a/kernel.spec b/kernel.spec index 98cc9035f..38c8f0e10 100644 --- a/kernel.spec +++ b/kernel.spec @@ -669,6 +669,9 @@ Patch717: KEYS-Fix-ASN.1-indefinite-length-object-parsing.patch #CVE-2016-3713 rhbz 1332139 1336410 Patch718: KVM-MTRR-remove-MSR-0x2f8.patch +#CVE-2016-4913 rhbz 1337528 1337529 +Patch719: get_rock_ridge_filename-handle-malformed-NM-entries.patch + # END OF PATCH DEFINITIONS %endif @@ -2190,6 +2193,9 @@ fi # # %changelog +* Thu May 19 2016 Josh Boyer +- CVE-2016-4913 isofs: info leak with malformed NM entries (rhbz 1337528 1337529) + * Mon May 16 2016 Justin M. Forbes - Disable CONFIG_DEBUG_VM_PGFLAGS on non debug kernels (rhbz 1335173) From c2ddac60277daa2635e502af48af5309eeae1ae0 Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Thu, 19 May 2016 08:29:30 -0400 Subject: [PATCH 084/275] Linux v4.5.5 --- ...fdput-in-replace_map_fd_with_map_ptr.patch | 46 ----- bpf-fix-refcnt-overflow.patch | 158 ------------------ ...filename-handle-malformed-NM-entries.patch | 63 ------- ...arn-when-primary-address-is-missing-.patch | 40 ----- kernel.spec | 19 +-- net-fix-infoleak-in-llc.patch | 32 ---- net-fix-infoleak-in-rtnetlink.patch | 50 ------ sources | 2 +- 8 files changed, 4 insertions(+), 406 deletions(-) delete mode 100644 bpf-fix-double-fdput-in-replace_map_fd_with_map_ptr.patch delete mode 100644 bpf-fix-refcnt-overflow.patch delete mode 100644 get_rock_ridge_filename-handle-malformed-NM-entries.patch delete mode 100644 ipv4-fib-don-t-warn-when-primary-address-is-missing-.patch delete mode 100644 net-fix-infoleak-in-llc.patch delete mode 100644 net-fix-infoleak-in-rtnetlink.patch diff --git a/bpf-fix-double-fdput-in-replace_map_fd_with_map_ptr.patch b/bpf-fix-double-fdput-in-replace_map_fd_with_map_ptr.patch deleted file mode 100644 index 3ba32bae7..000000000 --- a/bpf-fix-double-fdput-in-replace_map_fd_with_map_ptr.patch +++ /dev/null @@ -1,46 +0,0 @@ -From 8358b02bf67d3a5d8a825070e1aa73f25fb2e4c7 Mon Sep 17 00:00:00 2001 -From: Jann Horn -Date: Tue, 26 Apr 2016 22:26:26 +0200 -Subject: [PATCH] bpf: fix double-fdput in replace_map_fd_with_map_ptr() - -When bpf(BPF_PROG_LOAD, ...) was invoked with a BPF program whose bytecode -references a non-map file descriptor as a map file descriptor, the error -handling code called fdput() twice instead of once (in __bpf_map_get() and -in replace_map_fd_with_map_ptr()). If the file descriptor table of the -current task is shared, this causes f_count to be decremented too much, -allowing the struct file to be freed while it is still in use -(use-after-free). This can be exploited to gain root privileges by an -unprivileged user. - -This bug was introduced in -commit 0246e64d9a5f ("bpf: handle pseudo BPF_LD_IMM64 insn"), but is only -exploitable since -commit 1be7f75d1668 ("bpf: enable non-root eBPF programs") because -previously, CAP_SYS_ADMIN was required to reach the vulnerable code. - -(posted publicly according to request by maintainer) - -Signed-off-by: Jann Horn -Signed-off-by: Linus Torvalds -Acked-by: Alexei Starovoitov -Acked-by: Daniel Borkmann -Signed-off-by: David S. Miller ---- - kernel/bpf/verifier.c | 1 - - 1 file changed, 1 deletion(-) - -diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c -index 618ef77c302a..db2574e7b8b0 100644 ---- a/kernel/bpf/verifier.c -+++ b/kernel/bpf/verifier.c -@@ -2030,7 +2030,6 @@ static int replace_map_fd_with_map_ptr(struct verifier_env *env) - if (IS_ERR(map)) { - verbose("fd %d is not pointing to valid bpf_map\n", - insn->imm); -- fdput(f); - return PTR_ERR(map); - } - --- -2.5.5 - diff --git a/bpf-fix-refcnt-overflow.patch b/bpf-fix-refcnt-overflow.patch deleted file mode 100644 index 1143c8286..000000000 --- a/bpf-fix-refcnt-overflow.patch +++ /dev/null @@ -1,158 +0,0 @@ -From 86db8dac9286f8397434184a6b442b6419e54ec0 Mon Sep 17 00:00:00 2001 -From: Alexei Starovoitov -Date: Wed, 27 Apr 2016 18:56:20 -0700 -Subject: [PATCH] bpf: fix refcnt overflow - -On a system with >32Gbyte of phyiscal memory and infinite RLIMIT_MEMLOCK, -the malicious application may overflow 32-bit bpf program refcnt. -It's also possible to overflow map refcnt on 1Tb system. -Impose 32k hard limit which means that the same bpf program or -map cannot be shared by more than 32k processes. - -Fixes: 1be7f75d1668 ("bpf: enable non-root eBPF programs") -Reported-by: Jann Horn -Signed-off-by: Alexei Starovoitov -Acked-by: Daniel Borkmann -Signed-off-by: David S. Miller ---- - include/linux/bpf.h | 3 ++- - kernel/bpf/inode.c | 7 ++++--- - kernel/bpf/syscall.c | 24 ++++++++++++++++++++---- - kernel/bpf/verifier.c | 11 +++++++---- - 4 files changed, 33 insertions(+), 12 deletions(-) - -diff --git a/include/linux/bpf.h b/include/linux/bpf.h -index 83d1926c61e4..67bc2da5d233 100644 ---- a/include/linux/bpf.h -+++ b/include/linux/bpf.h -@@ -165,12 +165,13 @@ void bpf_register_prog_type(struct bpf_prog_type_list *tl); - void bpf_register_map_type(struct bpf_map_type_list *tl); - - struct bpf_prog *bpf_prog_get(u32 ufd); -+struct bpf_prog *bpf_prog_inc(struct bpf_prog *prog); - void bpf_prog_put(struct bpf_prog *prog); - void bpf_prog_put_rcu(struct bpf_prog *prog); - - struct bpf_map *bpf_map_get_with_uref(u32 ufd); - struct bpf_map *__bpf_map_get(struct fd f); --void bpf_map_inc(struct bpf_map *map, bool uref); -+struct bpf_map *bpf_map_inc(struct bpf_map *map, bool uref); - void bpf_map_put_with_uref(struct bpf_map *map); - void bpf_map_put(struct bpf_map *map); - -diff --git a/kernel/bpf/inode.c b/kernel/bpf/inode.c -index 5a8a797d50b7..d1a7646f79c5 100644 ---- a/kernel/bpf/inode.c -+++ b/kernel/bpf/inode.c -@@ -31,10 +31,10 @@ static void *bpf_any_get(void *raw, enum bpf_type type) - { - switch (type) { - case BPF_TYPE_PROG: -- atomic_inc(&((struct bpf_prog *)raw)->aux->refcnt); -+ raw = bpf_prog_inc(raw); - break; - case BPF_TYPE_MAP: -- bpf_map_inc(raw, true); -+ raw = bpf_map_inc(raw, true); - break; - default: - WARN_ON_ONCE(1); -@@ -277,7 +277,8 @@ static void *bpf_obj_do_get(const struct filename *pathname, - goto out; - - raw = bpf_any_get(inode->i_private, *type); -- touch_atime(&path); -+ if (!IS_ERR(raw)) -+ touch_atime(&path); - - path_put(&path); - return raw; -diff --git a/kernel/bpf/syscall.c b/kernel/bpf/syscall.c -index 3b39550d8485..4e32cc94edd9 100644 ---- a/kernel/bpf/syscall.c -+++ b/kernel/bpf/syscall.c -@@ -181,11 +181,18 @@ struct bpf_map *__bpf_map_get(struct fd f) - return f.file->private_data; - } - --void bpf_map_inc(struct bpf_map *map, bool uref) -+/* prog's and map's refcnt limit */ -+#define BPF_MAX_REFCNT 32768 -+ -+struct bpf_map *bpf_map_inc(struct bpf_map *map, bool uref) - { -- atomic_inc(&map->refcnt); -+ if (atomic_inc_return(&map->refcnt) > BPF_MAX_REFCNT) { -+ atomic_dec(&map->refcnt); -+ return ERR_PTR(-EBUSY); -+ } - if (uref) - atomic_inc(&map->usercnt); -+ return map; - } - - struct bpf_map *bpf_map_get_with_uref(u32 ufd) -@@ -197,7 +204,7 @@ struct bpf_map *bpf_map_get_with_uref(u32 ufd) - if (IS_ERR(map)) - return map; - -- bpf_map_inc(map, true); -+ map = bpf_map_inc(map, true); - fdput(f); - - return map; -@@ -580,6 +587,15 @@ static struct bpf_prog *__bpf_prog_get(struct fd f) - return f.file->private_data; - } - -+struct bpf_prog *bpf_prog_inc(struct bpf_prog *prog) -+{ -+ if (atomic_inc_return(&prog->aux->refcnt) > BPF_MAX_REFCNT) { -+ atomic_dec(&prog->aux->refcnt); -+ return ERR_PTR(-EBUSY); -+ } -+ return prog; -+} -+ - /* called by sockets/tracing/seccomp before attaching program to an event - * pairs with bpf_prog_put() - */ -@@ -592,7 +608,7 @@ struct bpf_prog *bpf_prog_get(u32 ufd) - if (IS_ERR(prog)) - return prog; - -- atomic_inc(&prog->aux->refcnt); -+ prog = bpf_prog_inc(prog); - fdput(f); - - return prog; -diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c -index 2e7f7ab739e4..060e4c4c37ea 100644 ---- a/kernel/bpf/verifier.c -+++ b/kernel/bpf/verifier.c -@@ -2023,15 +2023,18 @@ static int replace_map_fd_with_map_ptr(struct verifier_env *env) - return -E2BIG; - } - -- /* remember this map */ -- env->used_maps[env->used_map_cnt++] = map; -- - /* hold the map. If the program is rejected by verifier, - * the map will be released by release_maps() or it - * will be used by the valid program until it's unloaded - * and all maps are released in free_bpf_prog_info() - */ -- bpf_map_inc(map, false); -+ map = bpf_map_inc(map, false); -+ if (IS_ERR(map)) { -+ fdput(f); -+ return PTR_ERR(map); -+ } -+ env->used_maps[env->used_map_cnt++] = map; -+ - fdput(f); - next_insn: - insn++; --- -2.5.5 - diff --git a/get_rock_ridge_filename-handle-malformed-NM-entries.patch b/get_rock_ridge_filename-handle-malformed-NM-entries.patch deleted file mode 100644 index 3f5db6c8a..000000000 --- a/get_rock_ridge_filename-handle-malformed-NM-entries.patch +++ /dev/null @@ -1,63 +0,0 @@ -From 99d825822eade8d827a1817357cbf3f889a552d6 Mon Sep 17 00:00:00 2001 -From: Al Viro -Date: Thu, 5 May 2016 16:25:35 -0400 -Subject: [PATCH] get_rock_ridge_filename(): handle malformed NM entries - -Payloads of NM entries are not supposed to contain NUL. When we run -into such, only the part prior to the first NUL goes into the -concatenation (i.e. the directory entry name being encoded by a bunch -of NM entries). We do stop when the amount collected so far + the -claimed amount in the current NM entry exceed 254. So far, so good, -but what we return as the total length is the sum of *claimed* -sizes, not the actual amount collected. And that can grow pretty -large - not unlimited, since you'd need to put CE entries in -between to be able to get more than the maximum that could be -contained in one isofs directory entry / continuation chunk and -we are stop once we'd encountered 32 CEs, but you can get about 8Kb -easily. And that's what will be passed to readdir callback as the -name length. 8Kb __copy_to_user() from a buffer allocated by -__get_free_page() - -Cc: stable@vger.kernel.org # 0.98pl6+ (yes, really) -Signed-off-by: Al Viro ---- - fs/isofs/rock.c | 13 ++++++++++--- - 1 file changed, 10 insertions(+), 3 deletions(-) - -diff --git a/fs/isofs/rock.c b/fs/isofs/rock.c -index 5384ceb35b1c..98b3eb7d8eaf 100644 ---- a/fs/isofs/rock.c -+++ b/fs/isofs/rock.c -@@ -203,6 +203,8 @@ int get_rock_ridge_filename(struct iso_directory_record *de, - int retnamlen = 0; - int truncate = 0; - int ret = 0; -+ char *p; -+ int len; - - if (!ISOFS_SB(inode->i_sb)->s_rock) - return 0; -@@ -267,12 +269,17 @@ repeat: - rr->u.NM.flags); - break; - } -- if ((strlen(retname) + rr->len - 5) >= 254) { -+ len = rr->len - 5; -+ if (retnamlen + len >= 254) { - truncate = 1; - break; - } -- strncat(retname, rr->u.NM.name, rr->len - 5); -- retnamlen += rr->len - 5; -+ p = memchr(rr->u.NM.name, '\0', len); -+ if (unlikely(p)) -+ len = p - rr->u.NM.name; -+ memcpy(retname + retnamlen, rr->u.NM.name, len); -+ retnamlen += len; -+ retname[retnamlen] = '\0'; - break; - case SIG('R', 'E'): - kfree(rs.buffer); --- -2.5.5 - diff --git a/ipv4-fib-don-t-warn-when-primary-address-is-missing-.patch b/ipv4-fib-don-t-warn-when-primary-address-is-missing-.patch deleted file mode 100644 index 9e4cf4e0e..000000000 --- a/ipv4-fib-don-t-warn-when-primary-address-is-missing-.patch +++ /dev/null @@ -1,40 +0,0 @@ -From 9f79323a0aebccb9915ab8f4b7dcf531578b9cf9 Mon Sep 17 00:00:00 2001 -From: Paolo Abeni -Date: Thu, 21 Apr 2016 20:23:31 -0400 -Subject: [PATCH] ipv4/fib: don't warn when primary address is missing if - in_dev is dead - -After commit fbd40ea0180a ("ipv4: Don't do expensive useless work -during inetdev destroy.") when deleting an interface, -fib_del_ifaddr() can be executed without any primary address -present on the dead interface. - -The above is safe, but triggers some "bug: prim == NULL" warnings. - -This commit avoids warning if the in_dev is dead - -Signed-off-by: Paolo Abeni ---- - net/ipv4/fib_frontend.c | 6 +++++- - 1 file changed, 5 insertions(+), 1 deletion(-) - -diff --git a/net/ipv4/fib_frontend.c b/net/ipv4/fib_frontend.c -index 8a9246deccfe..63566ec54794 100644 ---- a/net/ipv4/fib_frontend.c -+++ b/net/ipv4/fib_frontend.c -@@ -904,7 +904,11 @@ void fib_del_ifaddr(struct in_ifaddr *ifa, struct in_ifaddr *iprim) - if (ifa->ifa_flags & IFA_F_SECONDARY) { - prim = inet_ifa_byprefix(in_dev, any, ifa->ifa_mask); - if (!prim) { -- pr_warn("%s: bug: prim == NULL\n", __func__); -+ /* if the device has been deleted, we don't perform -+ * address promotion -+ */ -+ if (!in_dev->dead) -+ pr_warn("%s: bug: prim == NULL\n", __func__); - return; - } - if (iprim && iprim != prim) { --- -2.5.5 - diff --git a/kernel.spec b/kernel.spec index 38c8f0e10..7e45a4161 100644 --- a/kernel.spec +++ b/kernel.spec @@ -54,7 +54,7 @@ Summary: The Linux kernel %if 0%{?released_kernel} # Do we have a -stable update to apply? -%define stable_update 4 +%define stable_update 5 # Set rpm version accordingly %if 0%{?stable_update} %define stablerev %{stable_update} @@ -635,9 +635,6 @@ Patch701: antenna_select.patch #rhbz 1302071 Patch702: x86-build-Build-compressed-x86-kernels-as-PIE.patch -# Follow on for CVE-2016-3156 -Patch703: ipv4-fib-don-t-warn-when-primary-address-is-missing-.patch - # Stop splashing crap about broken firmware BGRT Patch704: x86-efi-bgrt-Switch-all-pr_err-to-pr_debug-for-inval.patch @@ -647,14 +644,6 @@ Patch705: mm-thp-kvm-fix-memory-corruption-in-KVM-with-THP-ena.patch #CVE-2016-4482 rhbz 1332931 1332932 Patch706: USB-usbfs-fix-potential-infoleak-in-devio.patch -#CVE-2016-4486 CVE-2016-4485 rhbz 1333316 1333309 1333321 -Patch707: net-fix-infoleak-in-llc.patch -Patch708: net-fix-infoleak-in-rtnetlink.patch - -#CVE-2016-4557 CVE-2016-4558 rhbz 1334307 1334303 1334311 -Patch711: bpf-fix-double-fdput-in-replace_map_fd_with_map_ptr.patch -Patch712: bpf-fix-refcnt-overflow.patch - #rhbz 1328633 Patch713: sp5100_tco-properly-check-for-new-register-layouts.patch @@ -669,9 +658,6 @@ Patch717: KEYS-Fix-ASN.1-indefinite-length-object-parsing.patch #CVE-2016-3713 rhbz 1332139 1336410 Patch718: KVM-MTRR-remove-MSR-0x2f8.patch -#CVE-2016-4913 rhbz 1337528 1337529 -Patch719: get_rock_ridge_filename-handle-malformed-NM-entries.patch - # END OF PATCH DEFINITIONS %endif @@ -2193,7 +2179,8 @@ fi # # %changelog -* Thu May 19 2016 Josh Boyer +* Thu May 19 2016 Josh Boyer - 4.5.5-300 +- Linux v4.5.5 - CVE-2016-4913 isofs: info leak with malformed NM entries (rhbz 1337528 1337529) * Mon May 16 2016 Justin M. Forbes diff --git a/net-fix-infoleak-in-llc.patch b/net-fix-infoleak-in-llc.patch deleted file mode 100644 index 38f0d506a..000000000 --- a/net-fix-infoleak-in-llc.patch +++ /dev/null @@ -1,32 +0,0 @@ -From ec0de35ded8c4a8588290a1b442aa3aa4bdf4de1 Mon Sep 17 00:00:00 2001 -From: Kangjie Lu -Date: Tue, 3 May 2016 16:35:05 -0400 -Subject: [PATCH 2/2] net: fix infoleak in llc -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -The stack object “info” has a total size of 12 bytes. Its last byte -is padding which is not initialized and leaked via “put_cmsg”. - -Signed-off-by: Kangjie Lu -Signed-off-by: David S. Miller ---- - net/llc/af_llc.c | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/net/llc/af_llc.c b/net/llc/af_llc.c -index b3c52e3f689a..8ae3ed97d95c 100644 ---- a/net/llc/af_llc.c -+++ b/net/llc/af_llc.c -@@ -626,6 +626,7 @@ static void llc_cmsg_rcv(struct msghdr *msg, struct sk_buff *skb) - if (llc->cmsg_flags & LLC_CMSG_PKTINFO) { - struct llc_pktinfo info; - -+ memset(&info, 0, sizeof(info)); - info.lpi_ifindex = llc_sk(skb->sk)->dev->ifindex; - llc_pdu_decode_dsap(skb, &info.lpi_sap); - llc_pdu_decode_da(skb, info.lpi_mac); --- -2.5.5 - diff --git a/net-fix-infoleak-in-rtnetlink.patch b/net-fix-infoleak-in-rtnetlink.patch deleted file mode 100644 index 0da35108d..000000000 --- a/net-fix-infoleak-in-rtnetlink.patch +++ /dev/null @@ -1,50 +0,0 @@ -From 55a8a812d867ec9953bde7d86eef255a1abbf93e Mon Sep 17 00:00:00 2001 -From: Kangjie Lu -Date: Tue, 3 May 2016 16:46:24 -0400 -Subject: [PATCH 1/2] net: fix infoleak in rtnetlink -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -The stack object “map” has a total size of 32 bytes. Its last 4 -bytes are padding generated by compiler. These padding bytes are -not initialized and sent out via “nla_put”. - -Signed-off-by: Kangjie Lu -Signed-off-by: David S. Miller ---- - net/core/rtnetlink.c | 18 ++++++++++-------- - 1 file changed, 10 insertions(+), 8 deletions(-) - -diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c -index a75f7e94b445..65763c29f845 100644 ---- a/net/core/rtnetlink.c -+++ b/net/core/rtnetlink.c -@@ -1180,14 +1180,16 @@ static noinline_for_stack int rtnl_fill_vfinfo(struct sk_buff *skb, - - static int rtnl_fill_link_ifmap(struct sk_buff *skb, struct net_device *dev) - { -- struct rtnl_link_ifmap map = { -- .mem_start = dev->mem_start, -- .mem_end = dev->mem_end, -- .base_addr = dev->base_addr, -- .irq = dev->irq, -- .dma = dev->dma, -- .port = dev->if_port, -- }; -+ struct rtnl_link_ifmap map; -+ -+ memset(&map, 0, sizeof(map)); -+ map.mem_start = dev->mem_start; -+ map.mem_end = dev->mem_end; -+ map.base_addr = dev->base_addr; -+ map.irq = dev->irq; -+ map.dma = dev->dma; -+ map.port = dev->if_port; -+ - if (nla_put(skb, IFLA_MAP, sizeof(map), &map)) - return -EMSGSIZE; - --- -2.5.5 - diff --git a/sources b/sources index 1d6359066..aa475431e 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ a60d48eee08ec0536d5efb17ca819aef linux-4.5.tar.xz 6f557fe90b800b615c85c2ca04da6154 perf-man-4.5.tar.gz -137460a1e32335e2eedc61fcfc2643fa patch-4.5.4.xz +fe89010925304f6f07713741f0c8e811 patch-4.5.5.xz From 981658ddac3160cf7bce55696a5859cf4e32827f Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Fri, 20 May 2016 08:23:06 -0400 Subject: [PATCH 085/275] CVE-2016-4440 kvm: incorrect state leading to APIC register access (rhbz 1337806 1337807) --- kernel.spec | 6 + ...omplete-state-update-on-APICv-on-off.patch | 112 ++++++++++++++++++ 2 files changed, 118 insertions(+) create mode 100644 kvm-vmx-more-complete-state-update-on-APICv-on-off.patch diff --git a/kernel.spec b/kernel.spec index 7e45a4161..872fde373 100644 --- a/kernel.spec +++ b/kernel.spec @@ -658,6 +658,9 @@ Patch717: KEYS-Fix-ASN.1-indefinite-length-object-parsing.patch #CVE-2016-3713 rhbz 1332139 1336410 Patch718: KVM-MTRR-remove-MSR-0x2f8.patch +#CVE-2016-4440 rhbz 1337806 1337807 +Patch719: kvm-vmx-more-complete-state-update-on-APICv-on-off.patch + # END OF PATCH DEFINITIONS %endif @@ -2179,6 +2182,9 @@ fi # # %changelog +* Fri May 20 2016 Josh Boyer +- CVE-2016-4440 kvm: incorrect state leading to APIC register access (rhbz 1337806 1337807) + * Thu May 19 2016 Josh Boyer - 4.5.5-300 - Linux v4.5.5 - CVE-2016-4913 isofs: info leak with malformed NM entries (rhbz 1337528 1337529) diff --git a/kvm-vmx-more-complete-state-update-on-APICv-on-off.patch b/kvm-vmx-more-complete-state-update-on-APICv-on-off.patch new file mode 100644 index 000000000..67043300c --- /dev/null +++ b/kvm-vmx-more-complete-state-update-on-APICv-on-off.patch @@ -0,0 +1,112 @@ +From: Roman Kagan +Subject: [PATCH v3] kvm:vmx: more complete state update on APICv on/off +Date: 2016-05-18 14:48:20 GMT (1 day, 21 hours and 23 minutes ago) + +The function to update APICv on/off state (in particular, to deactivate +it when enabling Hyper-V SynIC), used to be incomplete: it didn't adjust +APICv-related fields among secondary processor-based VM-execution +controls. + +As a result, Windows 2012 guests would get stuck when SynIC-based +auto-EOI interrupt intersected with e.g. an IPI in the guest. + +In addition, the MSR intercept bitmap wasn't updated to correspond to +whether "virtualize x2APIC mode" was enabled. This path used not to be +triggered, since Windows didn't use x2APIC but rather their own +synthetic APIC access MSRs; however it represented a security risk +because the guest running in a SynIC-enabled VM could switch to x2APIC +and thus obtain direct access to host APIC MSRs (thanks to Yang Zhang + for spotting this). + +The patch fixes those omissions. + +Signed-off-by: Roman Kagan +Cc: Steve Rutherford +Cc: Yang Zhang +--- +v2 -> v3: + - only switch to x2apic msr bitmap if virtualize x2apic mode is on in vmcs + +v1 -> v2: + - only update relevant bits in the secondary exec control + - update msr intercept bitmap (also make x2apic msr bitmap always + correspond to APICv) + + arch/x86/kvm/vmx.c | 48 ++++++++++++++++++++++++++++++------------------ + 1 file changed, 30 insertions(+), 18 deletions(-) + +diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c +index ee1c8a9..cef741a 100644 +--- a/arch/x86/kvm/vmx.c ++++ b/arch/x86/kvm/vmx.c +@@ -2418,7 +2418,9 @@ static void vmx_set_msr_bitmap(struct kvm_vcpu *vcpu) + + if (is_guest_mode(vcpu)) + msr_bitmap = vmx_msr_bitmap_nested; +- else if (vcpu->arch.apic_base & X2APIC_ENABLE) { ++ else if (cpu_has_secondary_exec_ctrls() && ++ (vmcs_read32(SECONDARY_VM_EXEC_CONTROL) & ++ SECONDARY_EXEC_VIRTUALIZE_X2APIC_MODE)) { + if (is_long_mode(vcpu)) + msr_bitmap = vmx_msr_bitmap_longmode_x2apic; + else +@@ -4783,6 +4785,19 @@ static void vmx_refresh_apicv_exec_ctrl(struct kvm_vcpu *vcpu) + struct vcpu_vmx *vmx = to_vmx(vcpu); + + vmcs_write32(PIN_BASED_VM_EXEC_CONTROL, vmx_pin_based_exec_ctrl(vmx)); ++ if (cpu_has_secondary_exec_ctrls()) { ++ if (kvm_vcpu_apicv_active(vcpu)) ++ vmcs_set_bits(SECONDARY_VM_EXEC_CONTROL, ++ SECONDARY_EXEC_APIC_REGISTER_VIRT | ++ SECONDARY_EXEC_VIRTUAL_INTR_DELIVERY); ++ else ++ vmcs_clear_bits(SECONDARY_VM_EXEC_CONTROL, ++ SECONDARY_EXEC_APIC_REGISTER_VIRT | ++ SECONDARY_EXEC_VIRTUAL_INTR_DELIVERY); ++ } ++ ++ if (cpu_has_vmx_msr_bitmap()) ++ vmx_set_msr_bitmap(vcpu); + } + + static u32 vmx_exec_control(struct vcpu_vmx *vmx) +@@ -6329,23 +6344,20 @@ static __init int hardware_setup(void) + + set_bit(0, vmx_vpid_bitmap); /* 0 is reserved for host */ + +- if (enable_apicv) { +- for (msr = 0x800; msr <= 0x8ff; msr++) +- vmx_disable_intercept_msr_read_x2apic(msr); +- +- /* According SDM, in x2apic mode, the whole id reg is used. +- * But in KVM, it only use the highest eight bits. Need to +- * intercept it */ +- vmx_enable_intercept_msr_read_x2apic(0x802); +- /* TMCCT */ +- vmx_enable_intercept_msr_read_x2apic(0x839); +- /* TPR */ +- vmx_disable_intercept_msr_write_x2apic(0x808); +- /* EOI */ +- vmx_disable_intercept_msr_write_x2apic(0x80b); +- /* SELF-IPI */ +- vmx_disable_intercept_msr_write_x2apic(0x83f); +- } ++ for (msr = 0x800; msr <= 0x8ff; msr++) ++ vmx_disable_intercept_msr_read_x2apic(msr); ++ ++ /* According SDM, in x2apic mode, the whole id reg is used. But in ++ * KVM, it only use the highest eight bits. Need to intercept it */ ++ vmx_enable_intercept_msr_read_x2apic(0x802); ++ /* TMCCT */ ++ vmx_enable_intercept_msr_read_x2apic(0x839); ++ /* TPR */ ++ vmx_disable_intercept_msr_write_x2apic(0x808); ++ /* EOI */ ++ vmx_disable_intercept_msr_write_x2apic(0x80b); ++ /* SELF-IPI */ ++ vmx_disable_intercept_msr_write_x2apic(0x83f); + + if (enable_ept) { + kvm_mmu_set_mask_ptes(0ull, +-- +2.5.5 From c35316f9f74f63ce4f23bfcc767957fee4843ce7 Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Mon, 23 May 2016 08:16:50 -0400 Subject: [PATCH 086/275] CVE-2016-4951 null ptr deref in tipc_nl_publ_dump (rhbz 1338625 1338626) --- kernel.spec | 6 ++++ ...ock-before-parsing-nested-attributes.patch | 36 +++++++++++++++++++ 2 files changed, 42 insertions(+) create mode 100644 tipc-check-nl-sock-before-parsing-nested-attributes.patch diff --git a/kernel.spec b/kernel.spec index 872fde373..375f86bec 100644 --- a/kernel.spec +++ b/kernel.spec @@ -661,6 +661,9 @@ Patch718: KVM-MTRR-remove-MSR-0x2f8.patch #CVE-2016-4440 rhbz 1337806 1337807 Patch719: kvm-vmx-more-complete-state-update-on-APICv-on-off.patch +#CVE-2016-4951 rhbz 1338625 1338626 +Patch720: tipc-check-nl-sock-before-parsing-nested-attributes.patch + # END OF PATCH DEFINITIONS %endif @@ -2182,6 +2185,9 @@ fi # # %changelog +* Mon May 23 2016 Josh Boyer +- CVE-2016-4951 null ptr deref in tipc_nl_publ_dump (rhbz 1338625 1338626) + * Fri May 20 2016 Josh Boyer - CVE-2016-4440 kvm: incorrect state leading to APIC register access (rhbz 1337806 1337807) diff --git a/tipc-check-nl-sock-before-parsing-nested-attributes.patch b/tipc-check-nl-sock-before-parsing-nested-attributes.patch new file mode 100644 index 000000000..09bfe1485 --- /dev/null +++ b/tipc-check-nl-sock-before-parsing-nested-attributes.patch @@ -0,0 +1,36 @@ +From 45e093ae2830cd1264677d47ff9a95a71f5d9f9c Mon Sep 17 00:00:00 2001 +From: Richard Alpe +Date: Mon, 16 May 2016 11:14:54 +0200 +Subject: [PATCH] tipc: check nl sock before parsing nested attributes + +Make sure the socket for which the user is listing publication exists +before parsing the socket netlink attributes. + +Prior to this patch a call without any socket caused a NULL pointer +dereference in tipc_nl_publ_dump(). + +Tested-and-reported-by: Baozeng Ding +Signed-off-by: Richard Alpe +Acked-by: Jon Maloy +Signed-off-by: David S. Miller +--- + net/tipc/socket.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/net/tipc/socket.c b/net/tipc/socket.c +index 12628890c219..3b7a79991d55 100644 +--- a/net/tipc/socket.c ++++ b/net/tipc/socket.c +@@ -2853,6 +2853,9 @@ int tipc_nl_publ_dump(struct sk_buff *skb, struct netlink_callback *cb) + if (err) + return err; + ++ if (!attrs[TIPC_NLA_SOCK]) ++ return -EINVAL; ++ + err = nla_parse_nested(sock, TIPC_NLA_SOCK_MAX, + attrs[TIPC_NLA_SOCK], + tipc_nl_sock_policy); +-- +2.5.5 + From 767f0d5cef4fb54a816f44c788e3d736028bcf3d Mon Sep 17 00:00:00 2001 From: Peter Robinson Date: Sun, 29 May 2016 11:42:56 +0100 Subject: [PATCH 087/275] Update Utilite patch --- arm-i.MX6-Utilite-device-dtb.patch | 319 ++++++++++++++++++++++++++--- kernel.spec | 3 + 2 files changed, 299 insertions(+), 23 deletions(-) diff --git a/arm-i.MX6-Utilite-device-dtb.patch b/arm-i.MX6-Utilite-device-dtb.patch index 86f9e763d..1b98493b2 100644 --- a/arm-i.MX6-Utilite-device-dtb.patch +++ b/arm-i.MX6-Utilite-device-dtb.patch @@ -1,47 +1,180 @@ +From 6809645a740693c8c7fe1f86e396ae4c0cdac9ff Mon Sep 17 00:00:00 2001 From: Peter Robinson -Date: Fri, 11 Jul 2014 00:10:56 +0100 +Date: Sun, 29 May 2016 11:34:51 +0100 Subject: [PATCH] arm: i.MX6 Utilite device dtb --- - arch/arm/boot/dts/imx6q-cm-fx6.dts | 38 ++++++++++++++++++++++++++++++++++++++ - 1 file changed, 38 insertions(+) + arch/arm/boot/dts/Makefile | 1 + + arch/arm/boot/dts/imx6q-cm-fx6.dts | 136 ++++++++++++++++++++++++++++++++ + arch/arm/boot/dts/imx6q-utilite-pro.dts | 128 ++++++++++++++++++++++++++++++ + 3 files changed, 265 insertions(+) + create mode 100644 arch/arm/boot/dts/imx6q-utilite-pro.dts +diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile +index a4a6d70..90a85a2 100644 +--- a/arch/arm/boot/dts/Makefile ++++ b/arch/arm/boot/dts/Makefile +@@ -348,6 +348,7 @@ dtb-$(CONFIG_SOC_IMX6Q) += \ + imx6q-tx6q-1020-comtft.dtb \ + imx6q-tx6q-1110.dtb \ + imx6q-udoo.dtb \ ++ imx6q-utilite-pro.dtb \ + imx6q-wandboard.dtb \ + imx6q-wandboard-revb1.dtb + dtb-$(CONFIG_SOC_IMX6SL) += \ diff --git a/arch/arm/boot/dts/imx6q-cm-fx6.dts b/arch/arm/boot/dts/imx6q-cm-fx6.dts -index 99b46f8030ad..8b6ddd16dcc5 100644 +index 99b46f8..f4fc22e 100644 --- a/arch/arm/boot/dts/imx6q-cm-fx6.dts +++ b/arch/arm/boot/dts/imx6q-cm-fx6.dts -@@ -97,11 +97,49 @@ +@@ -31,6 +31,61 @@ + linux,default-trigger = "heartbeat"; + }; + }; ++ ++ regulators { ++ compatible = "simple-bus"; ++ #address-cells = <1>; ++ #size-cells = <0>; ++ ++ reg_usb_otg_vbus: usb_otg_vbus { ++ compatible = "regulator-fixed"; ++ regulator-name = "usb_otg_vbus"; ++ regulator-min-microvolt = <5000000>; ++ regulator-max-microvolt = <5000000>; ++ gpio = <&gpio3 22 0>; ++ 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>; ++ gpio = <&gpio7 8 0>; ++ enable-active-high; ++ }; ++ }; ++}; ++ ++&ecspi1 { ++ fsl,spi-num-chipselects = <2>; ++ cs-gpios = <&gpio2 30 0>, <&gpio3 19 0>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pinctrl_ecspi1>; ++ status = "okay"; ++ ++ flash: m25p80@0 { ++ #address-cells = <1>; ++ #size-cells = <1>; ++ compatible = "st,m25p", "jedec,spi-nor"; ++ spi-max-frequency = <20000000>; ++ reg = <0>; ++ ++ partition@0 { ++ label = "uboot"; ++ reg = <0x0 0xc0000>; ++ }; ++ ++ partition@c0000 { ++ label = "uboot environment"; ++ reg = <0xc0000 0x40000>; ++ }; ++ ++ partition@100000 { ++ label = "reserved"; ++ reg = <0x100000 0x100000>; ++ }; ++ }; + }; + + &fec { +@@ -46,8 +101,31 @@ + status = "okay"; + }; + ++&i2c3 { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pinctrl_i2c3>; ++ status = "okay"; ++ clock-frequency = <100000>; ++ ++ eeprom@50 { ++ compatible = "at24,24c02"; ++ reg = <0x50>; ++ pagesize = <16>; ++ }; ++}; ++ + &iomuxc { + imx6q-cm-fx6 { ++ pinctrl_ecspi1: ecspi1grp { ++ fsl,pins = < ++ MX6QDL_PAD_EIM_D16__ECSPI1_SCLK 0x100b1 ++ MX6QDL_PAD_EIM_D17__ECSPI1_MISO 0x100b1 ++ MX6QDL_PAD_EIM_D18__ECSPI1_MOSI 0x100b1 ++ MX6QDL_PAD_EIM_EB2__GPIO2_IO30 0x100b1 ++ MX6QDL_PAD_EIM_D19__GPIO3_IO19 0x100b1 ++ >; ++ }; ++ + pinctrl_enet: enetgrp { + fsl,pins = < + MX6QDL_PAD_RGMII_RXC__RGMII_RXC 0x1b0b0 +@@ -91,17 +169,75 @@ + >; + }; + ++ pinctrl_i2c3: i2c3grp { ++ fsl,pins = < ++ MX6QDL_PAD_GPIO_3__I2C3_SCL 0x4001b8b1 ++ MX6QDL_PAD_GPIO_6__I2C3_SDA 0x4001b8b1 ++ >; ++ }; ++ ++ pinctrl_pcie: pciegrp { ++ fsl,pins = < ++ MX6QDL_PAD_ENET_RXD1__GPIO1_IO26 0x80000000 ++ MX6QDL_PAD_EIM_CS1__GPIO2_IO24 0x80000000 ++ >; ++ }; ++ + pinctrl_uart4: uart4grp { + fsl,pins = < + MX6QDL_PAD_KEY_COL0__UART4_TX_DATA 0x1b0b1 MX6QDL_PAD_KEY_ROW0__UART4_RX_DATA 0x1b0b1 >; }; + -+ pinctrl_usdhc1: usdhc1grp { ++ pinctrl_usbh1: usbh1grp { + fsl,pins = < -+ MX6QDL_PAD_SD1_CMD__SD1_CMD 0x17059 -+ MX6QDL_PAD_SD1_CLK__SD1_CLK 0x10059 -+ MX6QDL_PAD_SD1_DAT0__SD1_DATA0 0x17059 -+ MX6QDL_PAD_SD1_DAT1__SD1_DATA1 0x17059 -+ MX6QDL_PAD_SD1_DAT2__SD1_DATA2 0x17059 -+ MX6QDL_PAD_SD1_DAT3__SD1_DATA3 0x17059 ++ MX6QDL_PAD_SD3_RST__GPIO7_IO08 0x80000000 + >; + }; + -+ pinctrl_usdhc3: usdhc3grp { ++ pinctrl_usbotg: usbotggrp { + 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_ENET_RX_ER__USB_OTG_ID 0x17059 ++ MX6QDL_PAD_EIM_D22__GPIO3_IO22 0x80000000 + >; + }; }; }; ++&pcie { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pinctrl_pcie>; ++ reset-gpio = <&gpio1 26 0>; ++ power-on-gpio = <&gpio2 24 0>; ++ status = "okay"; ++}; ++ +&sata { + status = "okay"; +}; ++ ++&snvs_poweroff { ++ status = "okay"; ++}; + &uart4 { pinctrl-names = "default"; @@ -49,14 +182,154 @@ index 99b46f8030ad..8b6ddd16dcc5 100644 status = "okay"; }; + -+&usdhc1 { ++&usbotg { ++ vbus-supply = <®_usb_otg_vbus>; + pinctrl-names = "default"; -+ pinctrl-0 = <&pinctrl_usdhc1>; ++ pinctrl-0 = <&pinctrl_usbotg>; ++ dr_mode = "otg"; + status = "okay"; +}; + -+&usdhc3 { ++&usbh1 { ++ vbus-supply = <®_usb_h1_vbus>; + pinctrl-names = "default"; -+ pinctrl-0 = <&pinctrl_usdhc3>; ++ pinctrl-0 = <&pinctrl_usbh1>; + status = "okay"; +}; +diff --git a/arch/arm/boot/dts/imx6q-utilite-pro.dts b/arch/arm/boot/dts/imx6q-utilite-pro.dts +new file mode 100644 +index 0000000..3966595 +--- /dev/null ++++ b/arch/arm/boot/dts/imx6q-utilite-pro.dts +@@ -0,0 +1,128 @@ ++/* ++ * Copyright 2016 Christopher Spinrath ++ * Copyright 2013 CompuLab Ltd. ++ * ++ * Based on the GPLv2 licensed devicetree distributed with the vendor ++ * kernel for the Utilite Pro: ++ * Copyright 2013 CompuLab Ltd. ++ * Author: Valentin Raevsky ++ * ++ * 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 "imx6q-cm-fx6.dts" ++ ++/ { ++ model = "CompuLab Utilite Pro"; ++ compatible = "compulab,utilite-pro", "compulab,cm-fx6", "fsl,imx6q"; ++ ++ aliases { ++ ethernet1 = ð1; ++ rtc0 = &em3027; ++ rtc1 = &snvs_rtc; ++ }; ++ ++ gpio-keys { ++ compatible = "gpio-keys"; ++ power { ++ label = "Power Button"; ++ gpios = <&gpio1 29 1>; ++ linux,code = <116>; /* KEY_POWER */ ++ gpio-key,wakeup; ++ }; ++ }; ++}; ++ ++&hdmi { ++ ddc-i2c-bus = <&i2c2>; ++ status = "okay"; ++}; ++ ++&i2c1 { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pinctrl_i2c1>; ++ status = "okay"; ++ ++ eeprom@50 { ++ compatible = "at24,24c02"; ++ reg = <0x50>; ++ pagesize = <16>; ++ }; ++ ++ em3027: rtc@56 { ++ compatible = "emmicro,em3027"; ++ reg = <0x56>; ++ }; ++}; ++ ++&i2c2 { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pinctrl_i2c2>; ++ status = "okay"; ++}; ++ ++&iomuxc { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pinctrl_hog>; ++ ++ hog { ++ pinctrl_hog: hoggrp { ++ fsl,pins = < ++ /* power button */ ++ MX6QDL_PAD_ENET_TXD1__GPIO1_IO29 0x80000000 ++ >; ++ }; ++ }; ++ ++ imx6q-utilite-pro { ++ pinctrl_i2c1: i2c1grp { ++ fsl,pins = < ++ MX6QDL_PAD_EIM_D21__I2C1_SCL 0x4001b8b1 ++ MX6QDL_PAD_EIM_D28__I2C1_SDA 0x4001b8b1 ++ >; ++ }; ++ ++ pinctrl_i2c2: i2c2grp { ++ fsl,pins = < ++ MX6QDL_PAD_KEY_COL3__I2C2_SCL 0x4001b8b1 ++ MX6QDL_PAD_KEY_ROW3__I2C2_SDA 0x4001b8b1 ++ >; ++ }; ++ ++ pinctrl_uart2: uart2grp { ++ fsl,pins = < ++ MX6QDL_PAD_GPIO_7__UART2_TX_DATA 0x1b0b1 ++ MX6QDL_PAD_GPIO_8__UART2_RX_DATA 0x1b0b1 ++ MX6QDL_PAD_SD4_DAT5__UART2_RTS_B 0x1b0b1 ++ MX6QDL_PAD_SD4_DAT6__UART2_CTS_B 0x1b0b1 ++ >; ++ }; ++ }; ++}; ++ ++&pcie { ++ pcie@0,0 { ++ reg = <0x000000 0 0 0 0>; ++ #address-cells = <3>; ++ #size-cells = <2>; ++ ++ /* non-removable i211 ethernet card */ ++ eth1: intel,i211@pcie0,0 { ++ reg = <0x010000 0 0 0 0>; ++ }; ++ }; ++}; ++ ++&uart2 { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pinctrl_uart2>; ++ fsl,uart-has-rtscts; ++ dma-names = "rx", "tx"; ++ dmas = <&sdma 27 4 0>, <&sdma 28 4 0>; ++ status = "okay"; ++}; +-- +2.7.4 + diff --git a/kernel.spec b/kernel.spec index 375f86bec..92236d8d4 100644 --- a/kernel.spec +++ b/kernel.spec @@ -2185,6 +2185,9 @@ fi # # %changelog +* Sun May 29 2016 Peter Robinson +- Update Utilite patch + * Mon May 23 2016 Josh Boyer - CVE-2016-4951 null ptr deref in tipc_nl_publ_dump (rhbz 1338625 1338626) From 0fcbdb2be7c764f8ce582dc3339ddc99de2e6c80 Mon Sep 17 00:00:00 2001 From: Peter Robinson Date: Sun, 29 May 2016 11:46:25 +0100 Subject: [PATCH 088/275] Fix AllWinner DMA driver loading --- ...ine-sun4i-support-module-autoloading.patch | 35 +++++++++++++++++++ kernel.spec | 3 ++ 2 files changed, 38 insertions(+) create mode 100644 dmaengine-sun4i-support-module-autoloading.patch diff --git a/dmaengine-sun4i-support-module-autoloading.patch b/dmaengine-sun4i-support-module-autoloading.patch new file mode 100644 index 000000000..7d7937474 --- /dev/null +++ b/dmaengine-sun4i-support-module-autoloading.patch @@ -0,0 +1,35 @@ +From 94c622b2a742c6793d74a71280df0c3a5365a156 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Emilio=20L=C3=B3pez?= +Date: Sun, 21 Feb 2016 22:26:35 -0300 +Subject: [PATCH 33831/39109] dmaengine: sun4i: support module autoloading +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +MODULE_DEVICE_TABLE() is missing, so the module isn't auto-loading on +supported systems. This commit adds the missing line so it loads +automatically when building it as a module and running on a system +with the early sunxi DMA engine. + +Signed-off-by: Emilio López +Reviewed-by: Javier Martinez Canillas +Signed-off-by: Vinod Koul +--- + drivers/dma/sun4i-dma.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/drivers/dma/sun4i-dma.c b/drivers/dma/sun4i-dma.c +index 1661d518..e0df233 100644 +--- a/drivers/dma/sun4i-dma.c ++++ b/drivers/dma/sun4i-dma.c +@@ -1271,6 +1271,7 @@ static const struct of_device_id sun4i_dma_match[] = { + { .compatible = "allwinner,sun4i-a10-dma" }, + { /* sentinel */ }, + }; ++MODULE_DEVICE_TABLE(of, sun4i_dma_match); + + static struct platform_driver sun4i_dma_driver = { + .probe = sun4i_dma_probe, +-- +2.7.4 + diff --git a/kernel.spec b/kernel.spec index 92236d8d4..4f17718b6 100644 --- a/kernel.spec +++ b/kernel.spec @@ -506,6 +506,8 @@ Patch422: geekbox-v4-device-tree-support.patch # http://www.spinics.net/lists/arm-kernel/msg483898.html Patch423: Initial-AllWinner-A64-and-PINE64-support.patch +Patch424: dmaengine-sun4i-support-module-autoloading.patch + # http://www.spinics.net/lists/linux-tegra/msg26029.html Patch426: usb-phy-tegra-Add-38.4MHz-clock-table-entry.patch @@ -2187,6 +2189,7 @@ fi %changelog * Sun May 29 2016 Peter Robinson - Update Utilite patch +- Fix AllWinner DMA driver loading * Mon May 23 2016 Josh Boyer - CVE-2016-4951 null ptr deref in tipc_nl_publ_dump (rhbz 1338625 1338626) From 2a2179c7473a62e7dc3fd1b157380ff51c222a87 Mon Sep 17 00:00:00 2001 From: Peter Robinson Date: Mon, 30 May 2016 14:37:12 +0100 Subject: [PATCH 089/275] Minor cleanups for ARM power/cpufreq management --- config-arm-generic | 6 ++++++ config-arm64 | 1 + config-armv7-generic | 14 +++----------- kernel.spec | 1 + 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/config-arm-generic b/config-arm-generic index db4026b83..448a8cba1 100644 --- a/config-arm-generic +++ b/config-arm-generic @@ -174,6 +174,12 @@ CONFIG_EFI_VARS_PSTORE=y CONFIG_EFI_VARS_PSTORE_DEFAULT_DISABLE=y # Power management / thermal / cpu scaling +CONFIG_PM_OPP=y +CONFIG_ARM_PSCI=y +CONFIG_THERMAL=y +CONFIG_CLOCK_THERMAL=y +CONFIG_CPUFREQ_DT=m +CONFIG_DEVFREQ_THERMAL=y # CONFIG_ARM_CPUIDLE is not set # CONFIG_ARM_DT_BL_CPUFREQ is not set # CONFIG_ARM_BIG_LITTLE_CPUFREQ is not set diff --git a/config-arm64 b/config-arm64 index 77dde021b..5b39f07e1 100644 --- a/config-arm64 +++ b/config-arm64 @@ -145,6 +145,7 @@ CONFIG_MFD_HI655X_PMIC=m CONFIG_REGULATOR_HI655X=m CONFIG_PHY_HI6220_USB=m CONFIG_COMMON_RESET_HI6220=m +# CONFIG_ARM_HISI_ACPU_CPUFREQ is not set # Tegra CONFIG_ARCH_TEGRA_132_SOC=y diff --git a/config-armv7-generic b/config-armv7-generic index bcfb36bb1..37e5c69c0 100644 --- a/config-armv7-generic +++ b/config-armv7-generic @@ -35,6 +35,7 @@ CONFIG_ARCH_HAS_TICK_BROADCAST=y CONFIG_IRQ_CROSSBAR=y CONFIG_IOMMU_IO_PGTABLE_LPAE=y CONFIG_CPU_SW_DOMAIN_PAN=y +CONFIG_ARM_CPU_SUSPEND=y # CONFIG_MCPM is not set # CONFIG_OABI_COMPAT is not set @@ -131,17 +132,7 @@ CONFIG_SCHED_SMT=y CONFIG_RCU_FANOUT=32 -CONFIG_CHECKPOINT_RESTORE=y - -# Power management / thermal / cpu scaling -CONFIG_PM_OPP=y -CONFIG_ARM_CPU_SUSPEND=y -CONFIG_ARM_PSCI=y -CONFIG_THERMAL=y -CONFIG_CLOCK_THERMAL=y -# CONFIG_DEVFREQ_THERMAL is not set -CONFIG_CPUFREQ_DT=m -# CONFIG_ARM_BIG_LITTLE_CPUFREQ is not set +# Dynamic Voltage and Frequency Scaling CONFIG_PM_DEVFREQ=y CONFIG_PM_DEVFREQ_EVENT=y CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND=y @@ -155,6 +146,7 @@ CONFIG_LSM_MMAP_MIN_ADDR=32768 CONFIG_XZ_DEC_ARM=y # CONFIG_PCI_LAYERSCAPE is not set + # Do NOT enable this, it breaks stuff and makes things go slow # CONFIG_UACCESS_WITH_MEMCPY is not set diff --git a/kernel.spec b/kernel.spec index 4f17718b6..45112dc30 100644 --- a/kernel.spec +++ b/kernel.spec @@ -2190,6 +2190,7 @@ fi * Sun May 29 2016 Peter Robinson - Update Utilite patch - Fix AllWinner DMA driver loading +- Minor cleanups for ARM power/cpufreq management * Mon May 23 2016 Josh Boyer - CVE-2016-4951 null ptr deref in tipc_nl_publ_dump (rhbz 1338625 1338626) From 39074468e2141b1ebd2c7052744703160e8b3cbf Mon Sep 17 00:00:00 2001 From: Peter Robinson Date: Mon, 30 May 2016 15:56:36 +0100 Subject: [PATCH 090/275] ARM: minor cleanups (NFC) --- config-arm-generic | 3 +++ config-arm64 | 5 ----- config-armv7-generic | 3 --- config-generic | 2 -- 4 files changed, 3 insertions(+), 10 deletions(-) diff --git a/config-arm-generic b/config-arm-generic index 448a8cba1..532aa004e 100644 --- a/config-arm-generic +++ b/config-arm-generic @@ -9,6 +9,9 @@ CONFIG_HW_PERF_EVENTS=y CONFIG_NFS_FS=y CONFIG_FORCE_MAX_ZONEORDER=11 +CONFIG_SCHED_MC=y +CONFIG_SCHED_SMT=y + CONFIG_CC_STACKPROTECTOR=y # CONFIG_PID_IN_CONTEXTIDR is not set diff --git a/config-arm64 b/config-arm64 index 5b39f07e1..c0c9e30cd 100644 --- a/config-arm64 +++ b/config-arm64 @@ -1,11 +1,6 @@ CONFIG_64BIT=y CONFIG_ARM64=y -CONFIG_SCHED_MC=y -CONFIG_SCHED_SMT=y - -# CONFIG_CPU_BIG_ENDIAN is not set - # arm64 only SoCs CONFIG_ARCH_HISI=y CONFIG_ARCH_SEATTLE=y diff --git a/config-armv7-generic b/config-armv7-generic index 37e5c69c0..bcaf9d9e8 100644 --- a/config-armv7-generic +++ b/config-armv7-generic @@ -127,9 +127,6 @@ CONFIG_HIGHMEM=y CONFIG_CC_OPTIMIZE_FOR_SIZE=y # CONFIG_ARM_MODULE_PLTS is not set -CONFIG_SCHED_MC=y -CONFIG_SCHED_SMT=y - CONFIG_RCU_FANOUT=32 # Dynamic Voltage and Frequency Scaling diff --git a/config-generic b/config-generic index a62e247a8..e6e721c32 100644 --- a/config-generic +++ b/config-generic @@ -1412,8 +1412,6 @@ CONFIG_NET_VENDOR_AMD=y CONFIG_PCNET32=m CONFIG_AMD8111_ETH=m CONFIG_PCMCIA_NMCLAN=m -# CONFIG_AMD_XGBE is not set -# CONFIG_AMD_XGBE_PHY is not set CONFIG_NET_VENDOR_ARC=y CONFIG_ARC_EMAC=m From 1f3eef073f24938c530cc3ee48917ae7fcca9f11 Mon Sep 17 00:00:00 2001 From: Peter Robinson Date: Mon, 30 May 2016 17:43:17 +0100 Subject: [PATCH 091/275] Initial Qualcomm ARM64 support (Dragonboard 410c) --- config-arm-generic | 55 +++++++++++++++++++++++++++++++++++++-- config-arm64 | 62 +++++++++++++++++++++++++++++++++++++++++++- config-armv7 | 6 ++--- config-armv7-generic | 8 ------ kernel.spec | 1 + 5 files changed, 118 insertions(+), 14 deletions(-) diff --git a/config-arm-generic b/config-arm-generic index 532aa004e..9cebbb0f6 100644 --- a/config-arm-generic +++ b/config-arm-generic @@ -83,6 +83,15 @@ CONFIG_EDAC=y CONFIG_EDAC_MM_EDAC=m CONFIG_EDAC_LEGACY_SYSFS=y +# Regulators +CONFIG_REGULATOR=y +CONFIG_RFKILL_REGULATOR=m +CONFIG_REGULATOR_FIXED_VOLTAGE=y +CONFIG_REGULATOR_VIRTUAL_CONSUMER=m +CONFIG_REGULATOR_USERSPACE_CONSUMER=m +CONFIG_REGULATOR_GPIO=m +CONFIG_REGULATOR_PWM=m + # ARM VExpress CONFIG_ARCH_VEXPRESS=y CONFIG_MFD_VEXPRESS_SYSREG=y @@ -166,6 +175,18 @@ CONFIG_SND_HDA_TEGRA=m # CONFIG_ARM_TEGRA20_CPUFREQ is not set # CONFIG_MFD_NVEC is not set +# Qualcomm - Don't currently support IPQ router devices +# CONFIG_IPQ_GCC_806X is not set +# CONFIG_IPQ_LCC_806X is not set +# CONFIG_IPQ_GCC_4019 is not st +# CONFIG_PHY_QCOM_IPQ806X_SATA is not set +# CONFIG_DWMAC_IPQ806X is not set +# CONFIG_PINCTRL_IPQ8064 is not set +# CONFIG_PINCTRL_IPQ4019 is not set +# CONFIG_REGULATOR_QCOM_SPMI is not set +# CONFIG_QCOM_SPMI_IADC is not set +# CONFIG_QCOM_SPMI_VADC is not set + # Virt CONFIG_PARAVIRT=y CONFIG_PARAVIRT_TIME_ACCOUNTING=y @@ -186,6 +207,9 @@ CONFIG_DEVFREQ_THERMAL=y # CONFIG_ARM_CPUIDLE is not set # CONFIG_ARM_DT_BL_CPUFREQ is not set # CONFIG_ARM_BIG_LITTLE_CPUFREQ is not set +CONFIG_SPMI=m +CONFIG_MFD_SPMI_PMIC=m +CONFIG_REGMAP_SPMI=m # Device tree CONFIG_DTC=y @@ -468,7 +492,6 @@ CONFIG_COMMON_CLK_SCPI=m # CONFIG_ARM_PTDUMP is not set # CONFIG_PATA_PLATFORM is not set -# CONFIG_USB_ULPI is not set # CONFIG_KEYBOARD_OMAP4 is not set # CONFIG_KEYBOARD_BCM is not set # CONFIG_PHY_SAMSUNG_USB2 is not set @@ -530,9 +553,37 @@ CONFIG_NET_VENDOR_MELLANOX=y # CONFIG_SERIAL_MAX310X is not set # CONFIG_SERIAL_IFX6X60 is not set +# regulator +# CONFIG_REGULATOR_AD5398 is not set +# CONFIG_REGULATOR_ANATOP is not set +# CONFIG_REGULATOR_DA9210 is not set +# CONFIG_REGULATOR_DA9211 is not set +# CONFIG_REGULATOR_FAN53555 is not set +# CONFIG_REGULATOR_ISL9305 is not set +# CONFIG_REGULATOR_ISL6271A is not set +# CONFIG_REGULATOR_LP3971 is not set +# CONFIG_REGULATOR_LP3972 is not set +# CONFIG_REGULATOR_LP872X is not set +# CONFIG_REGULATOR_LP8755 is not set +# CONFIG_REGULATOR_LTC3589 is not set +# CONFIG_REGULATOR_MAX1586 is not set +# CONFIG_REGULATOR_MAX8649 is not set +# CONFIG_REGULATOR_MAX8660 is not set +# CONFIG_REGULATOR_MAX8952 is not set +# CONFIG_REGULATOR_MAX8973 is not set +# CONFIG_REGULATOR_MT6311 is not set +# CONFIG_REGULATOR_PFUZE100 is not set +# CONFIG_REGULATOR_PV88060 is not set +# CONFIG_REGULATOR_PV88080 is not set +# CONFIG_REGULATOR_PV88090 is not set +# CONFIG_REGULATOR_TPS51632 is not set +# CONFIG_REGULATOR_TPS62360 is not set +# CONFIG_REGULATOR_TPS65023 is not set +# CONFIG_REGULATOR_TPS6507X is not set +# CONFIG_REGULATOR_TPS6524X is not set + # drm # CONFIG_DRM_VMWGFX is not set -# CONFIG_DRM_MSM_DSI is not set # CONFIG_IMX_IPUV3_CORE is not set # CONFIG_DEBUG_SET_MODULE_RONX is not set diff --git a/config-arm64 b/config-arm64 index c0c9e30cd..71ba5c8cd 100644 --- a/config-arm64 +++ b/config-arm64 @@ -3,6 +3,7 @@ CONFIG_ARM64=y # arm64 only SoCs CONFIG_ARCH_HISI=y +CONFIG_ARCH_QCOM=y CONFIG_ARCH_SEATTLE=y CONFIG_ARCH_SUNXI=y CONFIG_ARCH_TEGRA=y @@ -13,7 +14,6 @@ CONFIG_ARCH_XGENE=y # CONFIG_ARCH_FSL_LS2085A is not set # CONFIG_ARCH_LAYERSCAPE is not set # CONFIG_ARCH_MEDIATEK is not set -# CONFIG_ARCH_QCOM is not set # CONFIG_ARCH_RENESAS is not set # CONFIG_ARCH_SPRD is not set # CONFIG_ARCH_STRATIX10 is not set @@ -166,6 +166,66 @@ CONFIG_PWM_SUN4I=m # CONFIG_PHY_SUN9I_USB is not set CONFIG_NVMEM_SUNXI_SID=m +# qcom +# MSM8996 = SD-820, MSM8916 = SD-410 +CONFIG_SERIAL_MSM=y +CONFIG_SERIAL_MSM_CONSOLE=y +CONFIG_QCOM_GSBI=y +CONFIG_PCIE_QCOM=y +CONFIG_POWER_RESET_MSM=y +CONFIG_MMC_SDHCI_MSM=m +CONFIG_I2C_QUP=m +CONFIG_SPI_QUP=m +CONFIG_QCOM_WDT=m +CONFIG_MFD_QCOM_RPM=m +CONFIG_PINCTRL_MSM=y +CONFIG_PINCTRL_MSM8916=y +CONFIG_PINCTRL_MSM8996=y +CONFIG_REGULATOR_QCOM_RPM=m +CONFIG_REGULATOR_QCOM_SMD_RPM=m +CONFIG_QCOM_BAM_DMA=y +CONFIG_HWSPINLOCK_QCOM=m +CONFIG_HW_RANDOM_MSM=m +CONFIG_CRYPTO_DEV_QCE=m +CONFIG_RTC_DRV_PM8XXX=m +CONFIG_QCOM_QFPROM=m +CONFIG_QCOM_SMEM=m +CONFIG_QCOM_SMP2P=m +CONFIG_QCOM_SMSM=m +CONFIG_QCOM_SMD=m +CONFIG_QCOM_SMD_RPM=m +CONFIG_PINCTRL_QCOM_SPMI_PMIC=m +CONFIG_REGULATOR_QCOM_SPMI=m +CONFIG_QCOM_SPMI_TEMP_ALARM=m +CONFIG_QCOM_SPMI_IADC=m +CONFIG_QCOM_SPMI_VADC=m +CONFIG_SPMI_MSM_PMIC_ARB=m +CONFIG_USB_QCOM_8X16_PHY=m +CONFIG_USB_EHCI_MSM=m +CONFIG_USB_CHIPIDEA=m +CONFIG_USB_CHIPIDEA_UDC=y +CONFIG_USB_CHIPIDEA_HOST=y +CONFIG_USB_MSM_OTG=m +CONFIG_DRM_MSM=m +# CONFIG_DRM_MSM_DSI is not set +CONFIG_DRM_MSM_HDMI_HDCP=y +# CONFIG_DRM_MSM_REGISTER_LOGGING is not set +CONFIG_QCOM_WCNSS_CTRL=m +CONFIG_QCOM_COINCELL=m +# CONFIG_PHY_QCOM_APQ8064_SATA is not set +# CONFIG_PHY_QCOM_UFS is not set +# CONFIG_PINCTRL_QCOM_SSBI_PMIC is not set +# CONFIG_PINCTRL_APQ8064 is not set +# CONFIG_PINCTRL_APQ8084 is not set +# CONFIG_PINCTRL_MSM8660 is not set +# CONFIG_PINCTRL_MSM8960 is not set +# CONFIG_PINCTRL_MSM8X74 is not set +# CONFIG_PINCTRL_QDF2XXX is not set +# CONFIG_INPUT_PM8941_PWRKEY is not set +# CONFIG_INPUT_REGULATOR_HAPTIC is not set +# CONFIG_CHARGER_MANAGER is not set +# CONFIG_SENSORS_LTC2978_REGULATOR is not set + # ThunderX # CONFIG_MDIO_OCTEON is not set diff --git a/config-armv7 b/config-armv7 index 1a040d692..955ac2fb6 100644 --- a/config-armv7 +++ b/config-armv7 @@ -320,6 +320,9 @@ CONFIG_USB_DWC3_QCOM=m CONFIG_DWMAC_IPQ806X=m CONFIG_CRYPTO_DEV_QCE=m CONFIG_DRM_MSM=m +# CONFIG_DRM_MSM_DSI is not set +CONFIG_DRM_MSM_HDMI_HDCP=y +# CONFIG_DRM_MSM_REGISTER_LOGGING is not set CONFIG_DRM_MSM_FBDEV=y CONFIG_USB_EHCI_MSM=m CONFIG_MFD_PM8XXX=m @@ -328,10 +331,7 @@ CONFIG_INPUT_PM8XXX_VIBRATOR=m CONFIG_INPUT_PMIC8XXX_PWRKEY=m CONFIG_INPUT_PM8941_PWRKEY=m CONFIG_RTC_DRV_PM8XXX=m -# CONFIG_DRM_MSM_REGISTER_LOGGING is not set CONFIG_QCOM_WDT=m -CONFIG_MFD_SPMI_PMIC=m -CONFIG_SPMI=m CONFIG_SPMI_MSM_PMIC_ARB=m CONFIG_QCOM_SPMI_IADC=m CONFIG_QCOM_SPMI_VADC=m diff --git a/config-armv7-generic b/config-armv7-generic index bcaf9d9e8..19aaa55ad 100644 --- a/config-armv7-generic +++ b/config-armv7-generic @@ -453,7 +453,6 @@ CONFIG_DRM_DW_HDMI_AHB_AUDIO=m # regmap CONFIG_REGMAP_SPI=m -CONFIG_REGMAP_SPMI=m CONFIG_REGMAP_MMIO=m CONFIG_REGMAP_IRQ=y @@ -580,12 +579,6 @@ CONFIG_RTC_DRV_TPS80031=m # CONFIG_RTC_DRV_XGENE is not set # Regulators -CONFIG_REGULATOR=y -CONFIG_RFKILL_REGULATOR=m -CONFIG_REGULATOR_FIXED_VOLTAGE=y -CONFIG_REGULATOR_VIRTUAL_CONSUMER=m -CONFIG_REGULATOR_USERSPACE_CONSUMER=m -CONFIG_REGULATOR_GPIO=m # CONFIG_REGULATOR_ACT8865 is not set CONFIG_REGULATOR_AD5398=m CONFIG_REGULATOR_DA9210=m @@ -619,7 +612,6 @@ CONFIG_REGULATOR_ANATOP=m CONFIG_REGULATOR_DA9211=m CONFIG_REGULATOR_ISL9305=m CONFIG_REGULATOR_MAX77802=m -CONFIG_REGULATOR_PWM=m # CONFIG_REGULATOR_MT6311 is not set CONFIG_SENSORS_LTC2978_REGULATOR=y diff --git a/kernel.spec b/kernel.spec index 45112dc30..f7b83d1a1 100644 --- a/kernel.spec +++ b/kernel.spec @@ -2191,6 +2191,7 @@ fi - Update Utilite patch - Fix AllWinner DMA driver loading - Minor cleanups for ARM power/cpufreq management +- Initial Qualcomm ARM64 support (Dragonboard 410c) * Mon May 23 2016 Josh Boyer - CVE-2016-4951 null ptr deref in tipc_nl_publ_dump (rhbz 1338625 1338626) From 634a74ca7b69a862f4bba90886bb616336739e66 Mon Sep 17 00:00:00 2001 From: Paul Bolle Date: Thu, 14 Apr 2016 12:48:59 +0200 Subject: [PATCH 092/275] config: x86: stop pretending to be an Lguest guest Ever since v2.6.36 there's a conflict between OLPC support and Lguest guest support: a kernel image can't both support booting OLPC x86 hardware and booting as an Lguest guest. Booting a kernel image that tries to do both as an Lguest guest will fail with lguest: Reinjecting trap 13 for fault at 0x1000062: Invalid argument This means that people wanting to boot an Lguest guest on 32 bits x86 needed to build their own kernel image without OLPC support since, it seems, Fedora 15. So let's stop pretending to support being an Lguest guest. People wanting to have that will now not only have to disable CONFIG_OLPC but also enable CONFIG_LGUEST_GUEST. (A second order effect is that both CONFIG_VIRTIO and CONFIG_VIRTIO_CONSOLE will change from 'y' to 'm' in our builds. Assuming a sane build system no one should notice. We'll see.) Signed-off-by: Paul Bolle --- config-x86-generic | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config-x86-generic b/config-x86-generic index ea3d44975..2ad965e6f 100644 --- a/config-x86-generic +++ b/config-x86-generic @@ -281,7 +281,7 @@ CONFIG_KVM_INTEL=m CONFIG_KVM_AMD=m CONFIG_KVM_DEVICE_ASSIGNMENT=y CONFIG_LGUEST=m -CONFIG_LGUEST_GUEST=y +# CONFIG_LGUEST_GUEST is not set CONFIG_HYPERVISOR_GUEST=y CONFIG_PARAVIRT=y From 48656c00cbba8ec15be3f9f5b2147e41dc8b642d Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Wed, 1 Jun 2016 15:59:36 -0500 Subject: [PATCH 093/275] Linux v4.5.6 --- KVM-MTRR-remove-MSR-0x2f8.patch | 49 ------------ kernel.spec | 11 +-- sources | 2 +- ...perly-check-for-new-register-layouts.patch | 75 ------------------- 4 files changed, 5 insertions(+), 132 deletions(-) delete mode 100644 KVM-MTRR-remove-MSR-0x2f8.patch delete mode 100644 sp5100_tco-properly-check-for-new-register-layouts.patch diff --git a/KVM-MTRR-remove-MSR-0x2f8.patch b/KVM-MTRR-remove-MSR-0x2f8.patch deleted file mode 100644 index 8066b2e8f..000000000 --- a/KVM-MTRR-remove-MSR-0x2f8.patch +++ /dev/null @@ -1,49 +0,0 @@ -From bb0f06280beb6507226627a85076ae349a23fe22 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Radim=20Kr=C4=8Dm=C3=A1=C5=99?= -Date: Mon, 16 May 2016 09:45:35 -0400 -Subject: [PATCH] KVM: MTRR: remove MSR 0x2f8 -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -MSR 0x2f8 accessed the 124th Variable Range MTRR ever since MTRR support -was introduced by 9ba075a664df ("KVM: MTRR support"). - -0x2f8 became harmful when 910a6aae4e2e ("KVM: MTRR: exactly define the -size of variable MTRRs") shrinked the array of VR MTRRs from 256 to 8, -which made access to index 124 out of bounds. The surrounding code only -WARNs in this situation, thus the guest gained a limited read/write -access to struct kvm_arch_vcpu. - -0x2f8 is not a valid VR MTRR MSR, because KVM has/advertises only 16 VR -MTRR MSRs, 0x200-0x20f. Every VR MTRR is set up using two MSRs, 0x2f8 -was treated as a PHYSBASE and 0x2f9 would be its PHYSMASK, but 0x2f9 was -not implemented in KVM, therefore 0x2f8 could never do anything useful -and getting rid of it is safe. - -This fixes CVE-2016-TBD. - -Fixes: 910a6aae4e2e ("KVM: MTRR: exactly define the size of variable MTRRs") -Cc: stable@vger.kernel.org -Reported-by: David Matlack -Signed-off-by: Radim Krčmář ---- - arch/x86/kvm/mtrr.c | 2 -- - 1 file changed, 2 deletions(-) - -diff --git a/arch/x86/kvm/mtrr.c b/arch/x86/kvm/mtrr.c -index 3f8c732117ec..c146f3c262c3 100644 ---- a/arch/x86/kvm/mtrr.c -+++ b/arch/x86/kvm/mtrr.c -@@ -44,8 +44,6 @@ static bool msr_mtrr_valid(unsigned msr) - case MSR_MTRRdefType: - case MSR_IA32_CR_PAT: - return true; -- case 0x2f8: -- return true; - } - return false; - } --- -2.5.5 - diff --git a/kernel.spec b/kernel.spec index f7b83d1a1..d6e0b163c 100644 --- a/kernel.spec +++ b/kernel.spec @@ -54,7 +54,7 @@ Summary: The Linux kernel %if 0%{?released_kernel} # Do we have a -stable update to apply? -%define stable_update 5 +%define stable_update 6 # Set rpm version accordingly %if 0%{?stable_update} %define stablerev %{stable_update} @@ -646,9 +646,6 @@ Patch705: mm-thp-kvm-fix-memory-corruption-in-KVM-with-THP-ena.patch #CVE-2016-4482 rhbz 1332931 1332932 Patch706: USB-usbfs-fix-potential-infoleak-in-devio.patch -#rhbz 1328633 -Patch713: sp5100_tco-properly-check-for-new-register-layouts.patch - #CVE-2016-4569 rhbz 1334643 1334645 Patch714: ALSA-timer-Fix-leak-in-SNDRV_TIMER_IOCTL_PARAMS.patch Patch715: ALSA-timer-Fix-leak-in-events-via-snd_timer_user_cca.patch @@ -657,9 +654,6 @@ Patch716: ALSA-timer-Fix-leak-in-events-via-snd_timer_user_tin.patch #CVE-2016-0758 rhbz 1300257 1335386 Patch717: KEYS-Fix-ASN.1-indefinite-length-object-parsing.patch -#CVE-2016-3713 rhbz 1332139 1336410 -Patch718: KVM-MTRR-remove-MSR-0x2f8.patch - #CVE-2016-4440 rhbz 1337806 1337807 Patch719: kvm-vmx-more-complete-state-update-on-APICv-on-off.patch @@ -2187,6 +2181,9 @@ fi # # %changelog +* Wed Jun 01 2016 Justin M. Forbes 4.5.6-300 +- Linux v4.5.6 + * Sun May 29 2016 Peter Robinson - Update Utilite patch - Fix AllWinner DMA driver loading diff --git a/sources b/sources index aa475431e..51db1cae0 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ a60d48eee08ec0536d5efb17ca819aef linux-4.5.tar.xz 6f557fe90b800b615c85c2ca04da6154 perf-man-4.5.tar.gz -fe89010925304f6f07713741f0c8e811 patch-4.5.5.xz +165ea1f74c34d264f11be8c25d97635b patch-4.5.6.xz diff --git a/sp5100_tco-properly-check-for-new-register-layouts.patch b/sp5100_tco-properly-check-for-new-register-layouts.patch deleted file mode 100644 index 83c86d151..000000000 --- a/sp5100_tco-properly-check-for-new-register-layouts.patch +++ /dev/null @@ -1,75 +0,0 @@ -From 5896a59895689db447e888c1714022bbb9526ede Mon Sep 17 00:00:00 2001 -From: Lucas Stach -Date: Tue, 3 May 2016 19:15:58 +0200 -Subject: [PATCH] sp5100_tco: properly check for new register layouts - -Commits 190aa4304de6 (Add AMD Mullins platform support) and -cca118fa2a0a94 (Add AMD Carrizo platform support) enabled the -driver on a lot more devices, but the following commit missed -a single location in the code when checking if the SB800 register -offsets should be used. This leads to the wrong register being -written which in turn causes ACPI to go haywire. - -Fix this by introducing a helper function to check for the new -register layout and use this consistently. - -https://bugzilla.kernel.org/show_bug.cgi?id=114201 -https://bugzilla.redhat.com/show_bug.cgi?id=1329910 -Fixes: bdecfcdb5461 (sp5100_tco: fix the device check for SB800 -and later chipsets) -Cc: stable@vger.kernel.org (4.5+) -Signed-off-by: Lucas Stach ---- - drivers/watchdog/sp5100_tco.c | 15 ++++++++++----- - 1 file changed, 10 insertions(+), 5 deletions(-) - -diff --git a/drivers/watchdog/sp5100_tco.c b/drivers/watchdog/sp5100_tco.c -index 6467b91..028618c 100644 ---- a/drivers/watchdog/sp5100_tco.c -+++ b/drivers/watchdog/sp5100_tco.c -@@ -73,6 +73,13 @@ MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started." - /* - * Some TCO specific functions - */ -+ -+static bool tco_has_sp5100_reg_layout(struct pci_dev *dev) -+{ -+ return dev->device == PCI_DEVICE_ID_ATI_SBX00_SMBUS && -+ dev->revision < 0x40; -+} -+ - static void tco_timer_start(void) - { - u32 val; -@@ -129,7 +136,7 @@ static void tco_timer_enable(void) - { - int val; - -- if (sp5100_tco_pci->revision >= 0x40) { -+ if (!tco_has_sp5100_reg_layout(sp5100_tco_pci)) { - /* For SB800 or later */ - /* Set the Watchdog timer resolution to 1 sec */ - outb(SB800_PM_WATCHDOG_CONFIG, SB800_IO_PM_INDEX_REG); -@@ -342,8 +349,7 @@ static unsigned char sp5100_tco_setupdevice(void) - /* - * Determine type of southbridge chipset. - */ -- if (sp5100_tco_pci->device == PCI_DEVICE_ID_ATI_SBX00_SMBUS && -- sp5100_tco_pci->revision < 0x40) { -+ if (tco_has_sp5100_reg_layout(sp5100_tco_pci)) { - dev_name = SP5100_DEVNAME; - index_reg = SP5100_IO_PM_INDEX_REG; - data_reg = SP5100_IO_PM_DATA_REG; -@@ -388,8 +394,7 @@ static unsigned char sp5100_tco_setupdevice(void) - * Secondly, Find the watchdog timer MMIO address - * from SBResource_MMIO register. - */ -- if (sp5100_tco_pci->device == PCI_DEVICE_ID_ATI_SBX00_SMBUS && -- sp5100_tco_pci->revision < 0x40) { -+ if (tco_has_sp5100_reg_layout(sp5100_tco_pci)) { - /* Read SBResource_MMIO from PCI config(PCI_Reg: 9Ch) */ - pci_read_config_dword(sp5100_tco_pci, - SP5100_SB_RESOURCE_MMIO_BASE, &val); --- -2.7.4 - From 1289dc4eb94e8ba38a8e4aad147dd2da2815d4e5 Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Tue, 7 Jun 2016 08:12:33 -0400 Subject: [PATCH 094/275] CVE-2016-5243 info leak in tipc (rhbz 1343338 1343335) --- kernel.spec | 6 ++++ ...infoleak-in-tipc_nl_compat_link_dump.patch | 32 +++++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 tipc-fix-an-infoleak-in-tipc_nl_compat_link_dump.patch diff --git a/kernel.spec b/kernel.spec index d6e0b163c..7d8eeb73a 100644 --- a/kernel.spec +++ b/kernel.spec @@ -660,6 +660,9 @@ Patch719: kvm-vmx-more-complete-state-update-on-APICv-on-off.patch #CVE-2016-4951 rhbz 1338625 1338626 Patch720: tipc-check-nl-sock-before-parsing-nested-attributes.patch +#CVE-2016-5243 rhbz 1343338 1343335 +Patch721: tipc-fix-an-infoleak-in-tipc_nl_compat_link_dump.patch + # END OF PATCH DEFINITIONS %endif @@ -2181,6 +2184,9 @@ fi # # %changelog +* Tue Jun 07 2016 Josh Boyer +- CVE-2016-5243 info leak in tipc (rhbz 1343338 1343335) + * Wed Jun 01 2016 Justin M. Forbes 4.5.6-300 - Linux v4.5.6 diff --git a/tipc-fix-an-infoleak-in-tipc_nl_compat_link_dump.patch b/tipc-fix-an-infoleak-in-tipc_nl_compat_link_dump.patch new file mode 100644 index 000000000..9cd7c09a3 --- /dev/null +++ b/tipc-fix-an-infoleak-in-tipc_nl_compat_link_dump.patch @@ -0,0 +1,32 @@ +From 5d2be1422e02ccd697ccfcd45c85b4a26e6178e2 Mon Sep 17 00:00:00 2001 +From: Kangjie Lu +Date: Thu, 2 Jun 2016 04:04:56 -0400 +Subject: tipc: fix an infoleak in tipc_nl_compat_link_dump + +link_info.str is a char array of size 60. Memory after the NULL +byte is not initialized. Sending the whole object out can cause +a leak. + +Signed-off-by: Kangjie Lu +Signed-off-by: David S. Miller +--- + net/tipc/netlink_compat.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/net/tipc/netlink_compat.c b/net/tipc/netlink_compat.c +index f795b1d..3ad9fab 100644 +--- a/net/tipc/netlink_compat.c ++++ b/net/tipc/netlink_compat.c +@@ -604,7 +604,8 @@ static int tipc_nl_compat_link_dump(struct tipc_nl_compat_msg *msg, + + link_info.dest = nla_get_flag(link[TIPC_NLA_LINK_DEST]); + link_info.up = htonl(nla_get_flag(link[TIPC_NLA_LINK_UP])); +- strcpy(link_info.str, nla_data(link[TIPC_NLA_LINK_NAME])); ++ nla_strlcpy(link_info.str, nla_data(link[TIPC_NLA_LINK_NAME]), ++ TIPC_MAX_LINK_NAME); + + return tipc_add_tlv(msg->rep, TIPC_TLV_LINK_INFO, + &link_info, sizeof(link_info)); +-- +cgit v0.12 + From f378ba7d56bb7be254d537eec4e2d4e9e5853cd4 Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Tue, 7 Jun 2016 08:24:30 -0400 Subject: [PATCH 095/275] CVE-2016-5244 info leak in rds (rhbz 1343338 1343337) --- kernel.spec | 4 +++ rds-fix-an-infoleak-in-rds_inc_info_copy.txt | 31 ++++++++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 rds-fix-an-infoleak-in-rds_inc_info_copy.txt diff --git a/kernel.spec b/kernel.spec index 7d8eeb73a..3d19bb07b 100644 --- a/kernel.spec +++ b/kernel.spec @@ -663,6 +663,9 @@ Patch720: tipc-check-nl-sock-before-parsing-nested-attributes.patch #CVE-2016-5243 rhbz 1343338 1343335 Patch721: tipc-fix-an-infoleak-in-tipc_nl_compat_link_dump.patch +#CVE-2016-5244 rhbz 1343338 1343337 +Patch722: rds-fix-an-infoleak-in-rds_inc_info_copy.txt + # END OF PATCH DEFINITIONS %endif @@ -2185,6 +2188,7 @@ fi # %changelog * Tue Jun 07 2016 Josh Boyer +- CVE-2016-5244 info leak in rds (rhbz 1343338 1343337) - CVE-2016-5243 info leak in tipc (rhbz 1343338 1343335) * Wed Jun 01 2016 Justin M. Forbes 4.5.6-300 diff --git a/rds-fix-an-infoleak-in-rds_inc_info_copy.txt b/rds-fix-an-infoleak-in-rds_inc_info_copy.txt new file mode 100644 index 000000000..a9b1e49fe --- /dev/null +++ b/rds-fix-an-infoleak-in-rds_inc_info_copy.txt @@ -0,0 +1,31 @@ +From 4116def2337991b39919f3b448326e21c40e0dbb Mon Sep 17 00:00:00 2001 +From: Kangjie Lu +Date: Thu, 2 Jun 2016 04:11:20 -0400 +Subject: rds: fix an infoleak in rds_inc_info_copy + +The last field "flags" of object "minfo" is not initialized. +Copying this object out may leak kernel stack data. +Assign 0 to it to avoid leak. + +Signed-off-by: Kangjie Lu +Acked-by: Santosh Shilimkar +Signed-off-by: David S. Miller +--- + net/rds/recv.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/net/rds/recv.c b/net/rds/recv.c +index c0be1ec..8413f6c 100644 +--- a/net/rds/recv.c ++++ b/net/rds/recv.c +@@ -561,5 +561,7 @@ void rds_inc_info_copy(struct rds_incoming *inc, + minfo.fport = inc->i_hdr.h_dport; + } + ++ minfo.flags = 0; ++ + rds_info_copy(iter, &minfo, sizeof(minfo)); + } +-- +cgit v0.12 + From 2eb995b28812107ed6a639901dff9bc54b712d2d Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Wed, 8 Jun 2016 08:09:49 -0400 Subject: [PATCH 096/275] Linux v4.5.7 --- antenna_select.patch | 227 ------------------------------------------- kernel.spec | 8 +- sources | 2 +- 3 files changed, 5 insertions(+), 232 deletions(-) delete mode 100644 antenna_select.patch diff --git a/antenna_select.patch b/antenna_select.patch deleted file mode 100644 index 15763e9bc..000000000 --- a/antenna_select.patch +++ /dev/null @@ -1,227 +0,0 @@ -From c18d8f5095715c56bb3cd9cba64242542632054b Mon Sep 17 00:00:00 2001 -From: Larry Finger -Date: Wed, 16 Mar 2016 13:33:34 -0500 -Subject: rtlwifi: rtl8723be: Add antenna select module parameter - -A number of new laptops have been delivered with only a single antenna. -In principle, this is OK; however, a problem arises when the on-board -EEPROM is programmed to use the other antenna connection. The option -of opening the computer and moving the connector is not always possible -as it will void the warranty in some cases. In addition, this solution -breaks the Windows driver when the box dual boots Linux and Windows. - -A fix involving a new module parameter has been developed. This commit -adds the new parameter and implements the changes needed for the driver. - -Signed-off-by: Larry Finger -Cc: Stable [V4.0+] -Signed-off-by: Kalle Valo ---- - drivers/net/wireless/realtek/rtlwifi/rtl8723be/hw.c | 5 +++++ - drivers/net/wireless/realtek/rtlwifi/rtl8723be/sw.c | 3 +++ - drivers/net/wireless/realtek/rtlwifi/wifi.h | 3 +++ - 3 files changed, 11 insertions(+) - -diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8723be/hw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8723be/hw.c -index c983d2f..5a3df91 100644 ---- a/drivers/net/wireless/realtek/rtlwifi/rtl8723be/hw.c -+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8723be/hw.c -@@ -2684,6 +2684,7 @@ void rtl8723be_read_bt_coexist_info_from_hwpg(struct ieee80211_hw *hw, - bool auto_load_fail, u8 *hwinfo) - { - struct rtl_priv *rtlpriv = rtl_priv(hw); -+ struct rtl_mod_params *mod_params = rtlpriv->cfg->mod_params; - u8 value; - u32 tmpu_32; - -@@ -2702,6 +2703,10 @@ void rtl8723be_read_bt_coexist_info_from_hwpg(struct ieee80211_hw *hw, - rtlpriv->btcoexist.btc_info.ant_num = ANT_X2; - } - -+ /* override ant_num / ant_path */ -+ if (mod_params->ant_sel) -+ rtlpriv->btcoexist.btc_info.ant_num = -+ (mod_params->ant_sel == 1 ? ANT_X2 : ANT_X1); - } - - void rtl8723be_bt_reg_init(struct ieee80211_hw *hw) -diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8723be/sw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8723be/sw.c -index a78eaed..2101793 100644 ---- a/drivers/net/wireless/realtek/rtlwifi/rtl8723be/sw.c -+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8723be/sw.c -@@ -273,6 +273,7 @@ static struct rtl_mod_params rtl8723be_mod_params = { - .msi_support = false, - .disable_watchdog = false, - .debug = DBG_EMERG, -+ .ant_sel = 0, - }; - - static struct rtl_hal_cfg rtl8723be_hal_cfg = { -@@ -394,6 +395,7 @@ module_param_named(fwlps, rtl8723be_mod_params.fwctrl_lps, bool, 0444); - module_param_named(msi, rtl8723be_mod_params.msi_support, bool, 0444); - module_param_named(disable_watchdog, rtl8723be_mod_params.disable_watchdog, - bool, 0444); -+module_param_named(ant_sel, rtl8723be_mod_params.ant_sel, int, 0444); - MODULE_PARM_DESC(swenc, "Set to 1 for software crypto (default 0)\n"); - MODULE_PARM_DESC(ips, "Set to 0 to not use link power save (default 1)\n"); - MODULE_PARM_DESC(swlps, "Set to 1 to use SW control power save (default 0)\n"); -@@ -402,6 +404,7 @@ MODULE_PARM_DESC(msi, "Set to 1 to use MSI interrupts mode (default 0)\n"); - MODULE_PARM_DESC(debug, "Set debug level (0-5) (default 0)"); - MODULE_PARM_DESC(disable_watchdog, - "Set to 1 to disable the watchdog (default 0)\n"); -+MODULE_PARM_DESC(ant_sel, "Set to 1 or 2 to force antenna number (default 0)\n"); - - static SIMPLE_DEV_PM_OPS(rtlwifi_pm_ops, rtl_pci_suspend, rtl_pci_resume); - -diff --git a/drivers/net/wireless/realtek/rtlwifi/wifi.h b/drivers/net/wireless/realtek/rtlwifi/wifi.h -index 554d814..93bd7fc 100644 ---- a/drivers/net/wireless/realtek/rtlwifi/wifi.h -+++ b/drivers/net/wireless/realtek/rtlwifi/wifi.h -@@ -2246,6 +2246,9 @@ struct rtl_mod_params { - - /* default 0: 1 means do not disable interrupts */ - bool int_clear; -+ -+ /* select antenna */ -+ int ant_sel; - }; - - struct rtl_hal_usbint_cfg { --- -cgit v0.12 - -From baa1702290953295e421f0f433e2b1ff4815827c Mon Sep 17 00:00:00 2001 -From: Larry Finger -Date: Wed, 16 Mar 2016 13:33:35 -0500 -Subject: rtlwifi: btcoexist: Implement antenna selection - -The previous patch added an option to rtl8723be to manually select the -antenna for those cases when only a single antenna is present, and the -on-board EEPROM is incorrectly programmed. This patch implements the -necessary changes in the Bluetooth coexistence driver. - -Signed-off-by: Larry Finger -Cc: Stable [V4.0+] -Signed-off-by: Kalle Valo ---- - .../realtek/rtlwifi/btcoexist/halbtc8723b2ant.c | 9 ++++++-- - .../realtek/rtlwifi/btcoexist/halbtcoutsrc.c | 27 +++++++++++++++++++++- - .../realtek/rtlwifi/btcoexist/halbtcoutsrc.h | 2 +- - .../wireless/realtek/rtlwifi/btcoexist/rtl_btc.c | 5 +++- - 4 files changed, 38 insertions(+), 5 deletions(-) - -diff --git a/drivers/net/wireless/realtek/rtlwifi/btcoexist/halbtc8723b2ant.c b/drivers/net/wireless/realtek/rtlwifi/btcoexist/halbtc8723b2ant.c -index c43ab59..77cbd10 100644 ---- a/drivers/net/wireless/realtek/rtlwifi/btcoexist/halbtc8723b2ant.c -+++ b/drivers/net/wireless/realtek/rtlwifi/btcoexist/halbtc8723b2ant.c -@@ -1203,7 +1203,6 @@ static void btc8723b2ant_set_ant_path(struct btc_coexist *btcoexist, - - /* Force GNT_BT to low */ - btcoexist->btc_write_1byte_bitmask(btcoexist, 0x765, 0x18, 0x0); -- btcoexist->btc_write_2byte(btcoexist, 0x948, 0x0); - - if (board_info->btdm_ant_pos == BTC_ANTENNA_AT_MAIN_PORT) { - /* tell firmware "no antenna inverse" */ -@@ -1211,19 +1210,25 @@ static void btc8723b2ant_set_ant_path(struct btc_coexist *btcoexist, - h2c_parameter[1] = 1; /* ext switch type */ - btcoexist->btc_fill_h2c(btcoexist, 0x65, 2, - h2c_parameter); -+ btcoexist->btc_write_2byte(btcoexist, 0x948, 0x0); - } else { - /* tell firmware "antenna inverse" */ - h2c_parameter[0] = 1; - h2c_parameter[1] = 1; /* ext switch type */ - btcoexist->btc_fill_h2c(btcoexist, 0x65, 2, - h2c_parameter); -+ btcoexist->btc_write_2byte(btcoexist, 0x948, 0x280); - } - } - - /* ext switch setting */ - if (use_ext_switch) { - /* fixed internal switch S1->WiFi, S0->BT */ -- btcoexist->btc_write_2byte(btcoexist, 0x948, 0x0); -+ if (board_info->btdm_ant_pos == BTC_ANTENNA_AT_MAIN_PORT) -+ btcoexist->btc_write_2byte(btcoexist, 0x948, 0x0); -+ else -+ btcoexist->btc_write_2byte(btcoexist, 0x948, 0x280); -+ - switch (antpos_type) { - case BTC_ANT_WIFI_AT_MAIN: - /* ext switch main at wifi */ -diff --git a/drivers/net/wireless/realtek/rtlwifi/btcoexist/halbtcoutsrc.c b/drivers/net/wireless/realtek/rtlwifi/btcoexist/halbtcoutsrc.c -index b2791c8..babd149 100644 ---- a/drivers/net/wireless/realtek/rtlwifi/btcoexist/halbtcoutsrc.c -+++ b/drivers/net/wireless/realtek/rtlwifi/btcoexist/halbtcoutsrc.c -@@ -965,13 +965,38 @@ void exhalbtc_set_chip_type(u8 chip_type) - } - } - --void exhalbtc_set_ant_num(u8 type, u8 ant_num) -+void exhalbtc_set_ant_num(struct rtl_priv *rtlpriv, u8 type, u8 ant_num) - { - if (BT_COEX_ANT_TYPE_PG == type) { - gl_bt_coexist.board_info.pg_ant_num = ant_num; - gl_bt_coexist.board_info.btdm_ant_num = ant_num; -+ /* The antenna position: -+ * Main (default) or Aux for pgAntNum=2 && btdmAntNum =1. -+ * The antenna position should be determined by -+ * auto-detect mechanism. -+ * The following is assumed to main, -+ * and those must be modified -+ * if y auto-detect mechanism is ready -+ */ -+ if ((gl_bt_coexist.board_info.pg_ant_num == 2) && -+ (gl_bt_coexist.board_info.btdm_ant_num == 1)) -+ gl_bt_coexist.board_info.btdm_ant_pos = -+ BTC_ANTENNA_AT_MAIN_PORT; -+ else -+ gl_bt_coexist.board_info.btdm_ant_pos = -+ BTC_ANTENNA_AT_MAIN_PORT; - } else if (BT_COEX_ANT_TYPE_ANTDIV == type) { - gl_bt_coexist.board_info.btdm_ant_num = ant_num; -+ gl_bt_coexist.board_info.btdm_ant_pos = -+ BTC_ANTENNA_AT_MAIN_PORT; -+ } else if (type == BT_COEX_ANT_TYPE_DETECTED) { -+ gl_bt_coexist.board_info.btdm_ant_num = ant_num; -+ if (rtlpriv->cfg->mod_params->ant_sel == 1) -+ gl_bt_coexist.board_info.btdm_ant_pos = -+ BTC_ANTENNA_AT_AUX_PORT; -+ else -+ gl_bt_coexist.board_info.btdm_ant_pos = -+ BTC_ANTENNA_AT_MAIN_PORT; - } - } - -diff --git a/drivers/net/wireless/realtek/rtlwifi/btcoexist/halbtcoutsrc.h b/drivers/net/wireless/realtek/rtlwifi/btcoexist/halbtcoutsrc.h -index 0a903ea..f41ca57 100644 ---- a/drivers/net/wireless/realtek/rtlwifi/btcoexist/halbtcoutsrc.h -+++ b/drivers/net/wireless/realtek/rtlwifi/btcoexist/halbtcoutsrc.h -@@ -535,7 +535,7 @@ void exhalbtc_set_bt_patch_version(u16 bt_hci_version, u16 bt_patch_version); - void exhalbtc_update_min_bt_rssi(char bt_rssi); - void exhalbtc_set_bt_exist(bool bt_exist); - void exhalbtc_set_chip_type(u8 chip_type); --void exhalbtc_set_ant_num(u8 type, u8 ant_num); -+void exhalbtc_set_ant_num(struct rtl_priv *rtlpriv, u8 type, u8 ant_num); - void exhalbtc_display_bt_coex_info(struct btc_coexist *btcoexist); - void exhalbtc_signal_compensation(struct btc_coexist *btcoexist, - u8 *rssi_wifi, u8 *rssi_bt); -diff --git a/drivers/net/wireless/realtek/rtlwifi/btcoexist/rtl_btc.c b/drivers/net/wireless/realtek/rtlwifi/btcoexist/rtl_btc.c -index b9b0cb7..d3fd921 100644 ---- a/drivers/net/wireless/realtek/rtlwifi/btcoexist/rtl_btc.c -+++ b/drivers/net/wireless/realtek/rtlwifi/btcoexist/rtl_btc.c -@@ -72,7 +72,10 @@ void rtl_btc_init_hal_vars(struct rtl_priv *rtlpriv) - __func__, bt_type); - exhalbtc_set_chip_type(bt_type); - -- exhalbtc_set_ant_num(BT_COEX_ANT_TYPE_PG, ant_num); -+ if (rtlpriv->cfg->mod_params->ant_sel == 1) -+ exhalbtc_set_ant_num(rtlpriv, BT_COEX_ANT_TYPE_DETECTED, 1); -+ else -+ exhalbtc_set_ant_num(rtlpriv, BT_COEX_ANT_TYPE_PG, ant_num); - } - - void rtl_btc_init_hw_config(struct rtl_priv *rtlpriv) --- -cgit v0.12 - diff --git a/kernel.spec b/kernel.spec index 3d19bb07b..2d784f693 100644 --- a/kernel.spec +++ b/kernel.spec @@ -54,7 +54,7 @@ Summary: The Linux kernel %if 0%{?released_kernel} # Do we have a -stable update to apply? -%define stable_update 6 +%define stable_update 7 # Set rpm version accordingly %if 0%{?stable_update} %define stablerev %{stable_update} @@ -631,9 +631,6 @@ Patch665: netfilter-x_tables-deal-with-bogus-nextoffset-values.patch # CVE-2016-3672 rhbz 1324749 1324750 Patch689: x86-mm-32-Enable-full-randomization-on-i386-and-X86_.patch -#rhbz 1309487 -Patch701: antenna_select.patch - #rhbz 1302071 Patch702: x86-build-Build-compressed-x86-kernels-as-PIE.patch @@ -2187,6 +2184,9 @@ fi # # %changelog +* Wed Jun 08 2016 Josh Boyer - 4.5.7-300 +- Linux v4.5.7 + * Tue Jun 07 2016 Josh Boyer - CVE-2016-5244 info leak in rds (rhbz 1343338 1343337) - CVE-2016-5243 info leak in tipc (rhbz 1343338 1343335) diff --git a/sources b/sources index 51db1cae0..e9b1da3a8 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ a60d48eee08ec0536d5efb17ca819aef linux-4.5.tar.xz 6f557fe90b800b615c85c2ca04da6154 perf-man-4.5.tar.gz -165ea1f74c34d264f11be8c25d97635b patch-4.5.6.xz +5405f81eacd09def60777b0e0f0a1cb5 patch-4.5.7.xz From 61eafba2eea3f214b3aaa328591644bc4e03f0ea Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Thu, 9 Jun 2016 10:13:42 -0400 Subject: [PATCH 097/275] Drop upstreamed patch ideapad patch This went upstream as edde316acb5f07c04abf09a92f59db5d2efd14e2 --- ...dd-Lenovo-ideapad-Y700-17ISK-to-no_h.patch | 40 ------------------- kernel.spec | 3 -- 2 files changed, 43 deletions(-) delete mode 100644 ideapad-laptop-Add-Lenovo-ideapad-Y700-17ISK-to-no_h.patch diff --git a/ideapad-laptop-Add-Lenovo-ideapad-Y700-17ISK-to-no_h.patch b/ideapad-laptop-Add-Lenovo-ideapad-Y700-17ISK-to-no_h.patch deleted file mode 100644 index 16788f756..000000000 --- a/ideapad-laptop-Add-Lenovo-ideapad-Y700-17ISK-to-no_h.patch +++ /dev/null @@ -1,40 +0,0 @@ -From 14b627c610f93c2700f9a3825ac10c35d51acfe4 Mon Sep 17 00:00:00 2001 -From: Josh Boyer -Date: Mon, 7 Dec 2015 13:50:38 -0500 -Subject: [PATCH] ideapad-laptop: Add Lenovo ideapad Y700-17ISK to no_hw_rfkill - dmi list - -One of the newest ideapad models also lacks a physical hw rfkill switch, -and trying to read the hw rfkill switch through the ideapad module -causes it to always reported blocking breaking wifi. - -Fix it by adding this model to the DMI list. - -BugLink: https://bugzilla.redhat.com/show_bug.cgi?id=1286293 -Cc: stable@vger.kernel.org -Signed-off-by: Josh Boyer ---- - drivers/platform/x86/ideapad-laptop.c | 7 +++++++ - 1 file changed, 7 insertions(+) - -diff --git a/drivers/platform/x86/ideapad-laptop.c b/drivers/platform/x86/ideapad-laptop.c -index a313dfc0245f..d28db0e793df 100644 ---- a/drivers/platform/x86/ideapad-laptop.c -+++ b/drivers/platform/x86/ideapad-laptop.c -@@ -865,6 +865,13 @@ static const struct dmi_system_id no_hw_rfkill_list[] = { - }, - }, - { -+ .ident = "Lenovo ideapad Y700-17ISK", -+ .matches = { -+ DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), -+ DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo ideapad Y700-17ISK"), -+ }, -+ }, -+ { - .ident = "Lenovo Yoga 2 11 / 13 / Pro", - .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), --- -2.5.0 - diff --git a/kernel.spec b/kernel.spec index 2d784f693..7ac289827 100644 --- a/kernel.spec +++ b/kernel.spec @@ -610,9 +610,6 @@ Patch502: firmware-Drop-WARN-from-usermodehelper_read_trylock-.patch Patch508: kexec-uefi-copy-secure_boot-flag-in-boot-params.patch -#rhbz 1286293 -Patch571: ideapad-laptop-Add-Lenovo-ideapad-Y700-17ISK-to-no_h.patch - #Required for some persistent memory options Patch641: disable-CONFIG_EXPERT-for-ZONE_DMA.patch From 6de53e07b8f0c5b047fc548bda87aab85ea8adba Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Mon, 13 Jun 2016 07:40:54 -0400 Subject: [PATCH 098/275] CVE-2016-1583 stack overflow via ecryptfs and /proc (rhbz 1344721 1344722) --- ...fs-fix-handling-of-directory-opening.patch | 142 ++++++++++++++++++ ...d-opening-files-without-mmap-handler.patch | 59 ++++++++ kernel.spec | 9 ++ ...-prevent-stacking-filesystems-on-top.patch | 41 +++++ sched-panic-on-corrupted-stack-end.patch | 36 +++++ 5 files changed, 287 insertions(+) create mode 100644 ecryptfs-fix-handling-of-directory-opening.patch create mode 100644 ecryptfs-forbid-opening-files-without-mmap-handler.patch create mode 100644 proc-prevent-stacking-filesystems-on-top.patch create mode 100644 sched-panic-on-corrupted-stack-end.patch diff --git a/ecryptfs-fix-handling-of-directory-opening.patch b/ecryptfs-fix-handling-of-directory-opening.patch new file mode 100644 index 000000000..ce5f511d4 --- /dev/null +++ b/ecryptfs-fix-handling-of-directory-opening.patch @@ -0,0 +1,142 @@ +From 6a480a7842545ec520a91730209ec0bae41694c1 Mon Sep 17 00:00:00 2001 +From: Al Viro +Date: Wed, 4 May 2016 14:04:13 -0400 +Subject: [PATCH] ecryptfs: fix handling of directory opening + +First of all, trying to open them r/w is idiocy; it's guaranteed to fail. +Moreover, assigning ->f_pos and assuming that everything will work is +blatantly broken - try that with e.g. tmpfs as underlying layer and watch +the fireworks. There may be a non-trivial amount of state associated with +current IO position, well beyond the numeric offset. Using the single +struct file associated with underlying inode is really not a good idea; +we ought to open one for each ecryptfs directory struct file. + +Additionally, file_operations both for directories and non-directories are +full of pointless methods; non-directories should *not* have ->iterate(), +directories should not have ->flush(), ->fasync() and ->splice_read(). + +Signed-off-by: Al Viro +--- + fs/ecryptfs/file.c | 71 ++++++++++++++++++++++++++++++++++++++++++------------ + 1 file changed, 55 insertions(+), 16 deletions(-) + +diff --git a/fs/ecryptfs/file.c b/fs/ecryptfs/file.c +index feef8a9c4de7..f02404052b7b 100644 +--- a/fs/ecryptfs/file.c ++++ b/fs/ecryptfs/file.c +@@ -112,7 +112,6 @@ static int ecryptfs_readdir(struct file *file, struct dir_context *ctx) + .sb = inode->i_sb, + }; + lower_file = ecryptfs_file_to_lower(file); +- lower_file->f_pos = ctx->pos; + rc = iterate_dir(lower_file, &buf.ctx); + ctx->pos = buf.ctx.pos; + if (rc < 0) +@@ -223,14 +222,6 @@ static int ecryptfs_open(struct inode *inode, struct file *file) + } + ecryptfs_set_file_lower( + file, ecryptfs_inode_to_private(inode)->lower_file); +- if (d_is_dir(ecryptfs_dentry)) { +- ecryptfs_printk(KERN_DEBUG, "This is a directory\n"); +- mutex_lock(&crypt_stat->cs_mutex); +- crypt_stat->flags &= ~(ECRYPTFS_ENCRYPTED); +- mutex_unlock(&crypt_stat->cs_mutex); +- rc = 0; +- goto out; +- } + rc = read_or_initialize_metadata(ecryptfs_dentry); + if (rc) + goto out_put; +@@ -247,6 +238,45 @@ out: + return rc; + } + ++/** ++ * ecryptfs_dir_open ++ * @inode: inode speciying file to open ++ * @file: Structure to return filled in ++ * ++ * Opens the file specified by inode. ++ * ++ * Returns zero on success; non-zero otherwise ++ */ ++static int ecryptfs_dir_open(struct inode *inode, struct file *file) ++{ ++ struct dentry *ecryptfs_dentry = file->f_path.dentry; ++ /* Private value of ecryptfs_dentry allocated in ++ * ecryptfs_lookup() */ ++ struct ecryptfs_file_info *file_info; ++ struct file *lower_file; ++ ++ /* Released in ecryptfs_release or end of function if failure */ ++ file_info = kmem_cache_zalloc(ecryptfs_file_info_cache, GFP_KERNEL); ++ ecryptfs_set_file_private(file, file_info); ++ if (unlikely(!file_info)) { ++ ecryptfs_printk(KERN_ERR, ++ "Error attempting to allocate memory\n"); ++ return -ENOMEM; ++ } ++ lower_file = dentry_open(ecryptfs_dentry_to_lower_path(ecryptfs_dentry), ++ file->f_flags, current_cred()); ++ if (IS_ERR(lower_file)) { ++ printk(KERN_ERR "%s: Error attempting to initialize " ++ "the lower file for the dentry with name " ++ "[%pd]; rc = [%ld]\n", __func__, ++ ecryptfs_dentry, PTR_ERR(lower_file)); ++ kmem_cache_free(ecryptfs_file_info_cache, file_info); ++ return PTR_ERR(lower_file); ++ } ++ ecryptfs_set_file_lower(file, lower_file); ++ return 0; ++} ++ + static int ecryptfs_flush(struct file *file, fl_owner_t td) + { + struct file *lower_file = ecryptfs_file_to_lower(file); +@@ -267,6 +297,19 @@ static int ecryptfs_release(struct inode *inode, struct file *file) + return 0; + } + ++static int ecryptfs_dir_release(struct inode *inode, struct file *file) ++{ ++ fput(ecryptfs_file_to_lower(file)); ++ kmem_cache_free(ecryptfs_file_info_cache, ++ ecryptfs_file_to_private(file)); ++ return 0; ++} ++ ++static loff_t ecryptfs_dir_llseek(struct file *file, loff_t offset, int whence) ++{ ++ return vfs_llseek(ecryptfs_file_to_lower(file), offset, whence); ++} ++ + static int + ecryptfs_fsync(struct file *file, loff_t start, loff_t end, int datasync) + { +@@ -346,20 +389,16 @@ const struct file_operations ecryptfs_dir_fops = { + #ifdef CONFIG_COMPAT + .compat_ioctl = ecryptfs_compat_ioctl, + #endif +- .open = ecryptfs_open, +- .flush = ecryptfs_flush, +- .release = ecryptfs_release, ++ .open = ecryptfs_dir_open, ++ .release = ecryptfs_dir_release, + .fsync = ecryptfs_fsync, +- .fasync = ecryptfs_fasync, +- .splice_read = generic_file_splice_read, +- .llseek = default_llseek, ++ .llseek = ecryptfs_dir_llseek, + }; + + const struct file_operations ecryptfs_main_fops = { + .llseek = generic_file_llseek, + .read_iter = ecryptfs_read_update_atime, + .write_iter = generic_file_write_iter, +- .iterate = ecryptfs_readdir, + .unlocked_ioctl = ecryptfs_unlocked_ioctl, + #ifdef CONFIG_COMPAT + .compat_ioctl = ecryptfs_compat_ioctl, +-- +2.5.5 + diff --git a/ecryptfs-forbid-opening-files-without-mmap-handler.patch b/ecryptfs-forbid-opening-files-without-mmap-handler.patch new file mode 100644 index 000000000..2d40e68ed --- /dev/null +++ b/ecryptfs-forbid-opening-files-without-mmap-handler.patch @@ -0,0 +1,59 @@ +From 2f36db71009304b3f0b95afacd8eba1f9f046b87 Mon Sep 17 00:00:00 2001 +From: Jann Horn +Date: Wed, 1 Jun 2016 11:55:06 +0200 +Subject: [PATCH] ecryptfs: forbid opening files without mmap handler + +This prevents users from triggering a stack overflow through a recursive +invocation of pagefault handling that involves mapping procfs files into +virtual memory. + +Signed-off-by: Jann Horn +Acked-by: Tyler Hicks +Cc: stable@vger.kernel.org +Signed-off-by: Linus Torvalds +--- + fs/ecryptfs/kthread.c | 13 +++++++++++-- + 1 file changed, 11 insertions(+), 2 deletions(-) + +diff --git a/fs/ecryptfs/kthread.c b/fs/ecryptfs/kthread.c +index 866bb18efefe..e818f5ac7a26 100644 +--- a/fs/ecryptfs/kthread.c ++++ b/fs/ecryptfs/kthread.c +@@ -25,6 +25,7 @@ + #include + #include + #include ++#include + #include "ecryptfs_kernel.h" + + struct ecryptfs_open_req { +@@ -147,7 +148,7 @@ int ecryptfs_privileged_open(struct file **lower_file, + flags |= IS_RDONLY(d_inode(lower_dentry)) ? O_RDONLY : O_RDWR; + (*lower_file) = dentry_open(&req.path, flags, cred); + if (!IS_ERR(*lower_file)) +- goto out; ++ goto have_file; + if ((flags & O_ACCMODE) == O_RDONLY) { + rc = PTR_ERR((*lower_file)); + goto out; +@@ -165,8 +166,16 @@ int ecryptfs_privileged_open(struct file **lower_file, + mutex_unlock(&ecryptfs_kthread_ctl.mux); + wake_up(&ecryptfs_kthread_ctl.wait); + wait_for_completion(&req.done); +- if (IS_ERR(*lower_file)) ++ if (IS_ERR(*lower_file)) { + rc = PTR_ERR(*lower_file); ++ goto out; ++ } ++have_file: ++ if ((*lower_file)->f_op->mmap == NULL) { ++ fput(*lower_file); ++ *lower_file = NULL; ++ rc = -EMEDIUMTYPE; ++ } + out: + return rc; + } +-- +2.5.5 + diff --git a/kernel.spec b/kernel.spec index 7ac289827..5f146361f 100644 --- a/kernel.spec +++ b/kernel.spec @@ -660,6 +660,12 @@ Patch721: tipc-fix-an-infoleak-in-tipc_nl_compat_link_dump.patch #CVE-2016-5244 rhbz 1343338 1343337 Patch722: rds-fix-an-infoleak-in-rds_inc_info_copy.txt +#CVE-2016-1583 rhbz 1344721 1344722 +Patch723: proc-prevent-stacking-filesystems-on-top.patch +Patch724: ecryptfs-fix-handling-of-directory-opening.patch +Patch725: ecryptfs-forbid-opening-files-without-mmap-handler.patch +Patch726: sched-panic-on-corrupted-stack-end.patch + # END OF PATCH DEFINITIONS %endif @@ -2181,6 +2187,9 @@ fi # # %changelog +* Mon Jun 13 2016 Josh Boyer +- CVE-2016-1583 stack overflow via ecryptfs and /proc (rhbz 1344721 1344722) + * Wed Jun 08 2016 Josh Boyer - 4.5.7-300 - Linux v4.5.7 diff --git a/proc-prevent-stacking-filesystems-on-top.patch b/proc-prevent-stacking-filesystems-on-top.patch new file mode 100644 index 000000000..178aa3ba6 --- /dev/null +++ b/proc-prevent-stacking-filesystems-on-top.patch @@ -0,0 +1,41 @@ +From e54ad7f1ee263ffa5a2de9c609d58dfa27b21cd9 Mon Sep 17 00:00:00 2001 +From: Jann Horn +Date: Wed, 1 Jun 2016 11:55:05 +0200 +Subject: [PATCH] proc: prevent stacking filesystems on top + +This prevents stacking filesystems (ecryptfs and overlayfs) from using +procfs as lower filesystem. There is too much magic going on inside +procfs, and there is no good reason to stack stuff on top of procfs. + +(For example, procfs does access checks in VFS open handlers, and +ecryptfs by design calls open handlers from a kernel thread that doesn't +drop privileges or so.) + +Signed-off-by: Jann Horn +Cc: stable@vger.kernel.org +Signed-off-by: Linus Torvalds +--- + fs/proc/root.c | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/fs/proc/root.c b/fs/proc/root.c +index 361ab4ee42fc..ec649c92d270 100644 +--- a/fs/proc/root.c ++++ b/fs/proc/root.c +@@ -121,6 +121,13 @@ static struct dentry *proc_mount(struct file_system_type *fs_type, + if (IS_ERR(sb)) + return ERR_CAST(sb); + ++ /* ++ * procfs isn't actually a stacking filesystem; however, there is ++ * too much magic going on inside it to permit stacking things on ++ * top of it ++ */ ++ sb->s_stack_depth = FILESYSTEM_MAX_STACK_DEPTH; ++ + if (!proc_parse_options(options, ns)) { + deactivate_locked_super(sb); + return ERR_PTR(-EINVAL); +-- +2.5.5 + diff --git a/sched-panic-on-corrupted-stack-end.patch b/sched-panic-on-corrupted-stack-end.patch new file mode 100644 index 000000000..1d6bbaf3d --- /dev/null +++ b/sched-panic-on-corrupted-stack-end.patch @@ -0,0 +1,36 @@ +From 29d6455178a09e1dc340380c582b13356227e8df Mon Sep 17 00:00:00 2001 +From: Jann Horn +Date: Wed, 1 Jun 2016 11:55:07 +0200 +Subject: [PATCH] sched: panic on corrupted stack end + +Until now, hitting this BUG_ON caused a recursive oops (because oops +handling involves do_exit(), which calls into the scheduler, which in +turn raises an oops), which caused stuff below the stack to be +overwritten until a panic happened (e.g. via an oops in interrupt +context, caused by the overwritten CPU index in the thread_info). + +Just panic directly. + +Signed-off-by: Jann Horn +Signed-off-by: Linus Torvalds +--- + kernel/sched/core.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/kernel/sched/core.c b/kernel/sched/core.c +index d1f7149f8704..11546a6ed5df 100644 +--- a/kernel/sched/core.c ++++ b/kernel/sched/core.c +@@ -3047,7 +3047,8 @@ static noinline void __schedule_bug(struct task_struct *prev) + static inline void schedule_debug(struct task_struct *prev) + { + #ifdef CONFIG_SCHED_STACK_END_CHECK +- BUG_ON(task_stack_end_corrupted(prev)); ++ if (task_stack_end_corrupted(prev)) ++ panic("corrupted stack end detected inside scheduler\n"); + #endif + + if (unlikely(in_atomic_preempt_off())) { +-- +2.5.5 + From 83d855a219f9813a263a117fc7bc695559101972 Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Wed, 15 Jun 2016 09:37:42 -0400 Subject: [PATCH 099/275] CVE-2016-4470 keys: uninitialized variable crash (rhbz 1341716 1346626) --- KEYS-potential-uninitialized-variable.patch | 30 +++++++++++++++++++++ kernel.spec | 6 +++++ 2 files changed, 36 insertions(+) create mode 100644 KEYS-potential-uninitialized-variable.patch diff --git a/KEYS-potential-uninitialized-variable.patch b/KEYS-potential-uninitialized-variable.patch new file mode 100644 index 000000000..23cabbb2e --- /dev/null +++ b/KEYS-potential-uninitialized-variable.patch @@ -0,0 +1,30 @@ +From 82a50018782f84e733e718d4b24e1653d19333be Mon Sep 17 00:00:00 2001 +From: Dan Carpenter +Date: Wed, 15 Jun 2016 09:31:45 -0400 +Subject: [PATCH] KEYS: potential uninitialized variable + +If __key_link_begin() failed then "edit" would be uninitialized. I've +added a check to fix that. + +Fixes: f70e2e06196a ('KEYS: Do preallocation for __key_link()') +Signed-off-by: Dan Carpenter +--- + security/keys/key.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/security/keys/key.c b/security/keys/key.c +index bd5a272f28a6..346fbf201c22 100644 +--- a/security/keys/key.c ++++ b/security/keys/key.c +@@ -597,7 +597,7 @@ int key_reject_and_link(struct key *key, + + mutex_unlock(&key_construction_mutex); + +- if (keyring) ++ if (keyring && link_ret == 0) + __key_link_end(keyring, &key->index_key, edit); + + /* wake up anyone waiting for a key to be constructed */ +-- +2.5.5 + diff --git a/kernel.spec b/kernel.spec index 5f146361f..c60ef794c 100644 --- a/kernel.spec +++ b/kernel.spec @@ -666,6 +666,9 @@ Patch724: ecryptfs-fix-handling-of-directory-opening.patch Patch725: ecryptfs-forbid-opening-files-without-mmap-handler.patch Patch726: sched-panic-on-corrupted-stack-end.patch +#CVE-2016-4470 rhbz 1341716 1346626 +Patch727: KEYS-potential-uninitialized-variable.patch + # END OF PATCH DEFINITIONS %endif @@ -2187,6 +2190,9 @@ fi # # %changelog +* Wed Jun 15 2016 Josh Boyer +- CVE-2016-4470 keys: uninitialized variable crash (rhbz 1341716 1346626) + * Mon Jun 13 2016 Josh Boyer - CVE-2016-1583 stack overflow via ecryptfs and /proc (rhbz 1344721 1344722) From 9f800a78eb0bef7f32399364f63701a26b074a8c Mon Sep 17 00:00:00 2001 From: Laura Abbott Date: Wed, 15 Jun 2016 14:11:15 -0700 Subject: [PATCH 100/275] hp-wmi: fix wifi cannot be hard-unblock (rhbz 1338025) --- hp-wmi-fix-wifi-cannot-be-hard-unblock.patch | 44 ++++++++++++++++++++ kernel.spec | 6 +++ 2 files changed, 50 insertions(+) create mode 100644 hp-wmi-fix-wifi-cannot-be-hard-unblock.patch diff --git a/hp-wmi-fix-wifi-cannot-be-hard-unblock.patch b/hp-wmi-fix-wifi-cannot-be-hard-unblock.patch new file mode 100644 index 000000000..51ccc8c48 --- /dev/null +++ b/hp-wmi-fix-wifi-cannot-be-hard-unblock.patch @@ -0,0 +1,44 @@ +From 97345b0e9b02d6d794fc772e366efe6e44b9340a Mon Sep 17 00:00:00 2001 +From: Alex Hung +Date: Mon, 13 Jun 2016 19:44:00 +0800 +Subject: [PATCH] hp-wmi: fix wifi cannot be hard-unblock + +Several users reported wifi cannot be unblocked as discussed in [1]. +This patch removes the useof 2009 flag by BIOS but uses the actual WMI +function calls - it will be skipped if WMI reports unsupported + +[1] https://bugzilla.kernel.org/show_bug.cgi?id=69131 + +Signed-off-by: Alex Hung +--- + drivers/platform/x86/hp-wmi.c | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +diff --git a/drivers/platform/x86/hp-wmi.c b/drivers/platform/x86/hp-wmi.c +index fb4dd7b..af2046c 100644 +--- a/drivers/platform/x86/hp-wmi.c ++++ b/drivers/platform/x86/hp-wmi.c +@@ -723,6 +723,11 @@ static int __init hp_wmi_rfkill_setup(struct platform_device *device) + if (err) + return err; + ++ err = hp_wmi_perform_query(HPWMI_WIRELESS_QUERY, 1, &wireless, ++ sizeof(wireless), 0); ++ if (err) ++ return err; ++ + if (wireless & 0x1) { + wifi_rfkill = rfkill_alloc("hp-wifi", &device->dev, + RFKILL_TYPE_WLAN, +@@ -910,7 +915,7 @@ static int __init hp_wmi_bios_setup(struct platform_device *device) + gps_rfkill = NULL; + rfkill2_count = 0; + +- if (hp_wmi_bios_2009_later() || hp_wmi_rfkill_setup(device)) ++ if (hp_wmi_rfkill_setup(device)) + hp_wmi_rfkill2_setup(device); + + err = device_create_file(&device->dev, &dev_attr_display); +-- +2.5.5 + diff --git a/kernel.spec b/kernel.spec index c60ef794c..c5bad0d24 100644 --- a/kernel.spec +++ b/kernel.spec @@ -669,6 +669,9 @@ Patch726: sched-panic-on-corrupted-stack-end.patch #CVE-2016-4470 rhbz 1341716 1346626 Patch727: KEYS-potential-uninitialized-variable.patch +#rhbz 1338025 +Patch728: hp-wmi-fix-wifi-cannot-be-hard-unblock.patch + # END OF PATCH DEFINITIONS %endif @@ -2190,6 +2193,9 @@ fi # # %changelog +* Wed Jun 15 2016 Laura Abbott +- hp-wmi: fix wifi cannot be hard-unblock (rhbz 1338025) + * Wed Jun 15 2016 Josh Boyer - CVE-2016-4470 keys: uninitialized variable crash (rhbz 1341716 1346626) From 55efec4c97df33f8c3935eb89c2d4a5ea7597217 Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Fri, 24 Jun 2016 16:21:19 -0400 Subject: [PATCH 101/275] Linux v4.6.3 --- ...nize-WM-structs-unions-in-CRTC-state.patch | 198 + ...200-Black-screen-fix-for-G200e-rev-4.patch | 58 + 0001-mm-CONFIG_NR_ZONES_EXTENDED.patch | 173 - ...x-Introduce-_mv88e6xxx_phy_page_-rea.patch | 95 - ...s-skl_compute_pipe_wm-skl_build_pipe.patch | 60 + ...on-fix-out-of-bounds-memory-accesses.patch | 138 + ...88e6xxx-Clear-the-PDOWN-bit-on-setup.patch | 104 - ...Cache-plane-data-rates-in-CRTC-state.patch | 214 + ...-sor-gf119-both-links-use-the-same-t.patch | 46 + ...low-calculation-of-data-rate-for-in-.patch | 141 + ...-sor-gm107-training-pattern-register.patch | 195 + ...ore-plane-minimum-blocks-in-CRTC-wm-.patch | 67 + ...bc-Disable-on-HSW-by-default-for-now.patch | 55 + ...hether-an-atomic-transaction-changes.patch | 68 + ...low-skl_allocate_pipe_ddb-to-operate.patch | 352 ++ ...distrust_bios_wm-flag-to-dev_priv-v2.patch | 94 + ...mpute-DDB-allocation-at-atomic-check.patch | 254 ++ ...op-re-allocation-of-DDB-at-atomic-co.patch | 389 ++ ...gen9-Calculate-plane-WM-s-from-state.patch | 91 + ...low-watermark-calculation-on-in-flig.patch | 156 + ...e-a-bitmask-to-track-dirty-pipe-wate.patch | 91 + ...opagate-watermark-calculation-failur.patch | 254 ++ ...lculate-watermarks-during-atomic-che.patch | 321 ++ ...ject-display-updates-that-exceed-wm-.patch | 63 + ...wm_config-from-dev_priv-intel_atomic.patch | 115 + ...r-of-ethernet-DT-nodes-on-Armada-38x.patch | 101 - Add-EFI-signature-data-types.patch | 14 +- ...signature-blob-parser-and-key-loader.patch | 3 +- ...bail-out-when-the-sixaxis-refuses-th.patch | 49 - ...ial-AllWinner-A64-and-PINE64-support.patch | 692 +--- ...N.1-indefinite-length-object-parsing.patch | 91 - arm-i.MX6-Utilite-device-dtb.patch | 12 +- ...ing-console-to-enable-serial-console.patch | 12 +- ...upstream-fixes-plus-iproc-mmc-driver.patch | 3526 ----------------- bcm283x-upstream-fixes.patch | 400 ++ config-arm-generic | 25 +- config-arm64 | 26 +- config-armv7 | 16 +- config-armv7-generic | 29 +- config-armv7-lpae | 2 +- config-debug | 2 - config-generic | 167 +- config-nodebug | 2 - config-powerpc64-generic | 7 - config-powerpc64le | 2 + config-s390x | 1 - config-x86-32-generic | 9 - config-x86-generic | 19 +- config-x86_64-generic | 14 +- disable-CONFIG_EXPERT-for-ZONE_DMA.patch | 16 +- ...ine-sun4i-support-module-autoloading.patch | 35 - ...fs-fix-handling-of-directory-opening.patch | 142 - ...d-opening-files-without-mmap-handler.patch | 59 - filter-aarch64.sh | 2 +- filter-armv7hl.sh | 2 +- hp-wmi-fix-wifi-cannot-be-hard-unblock.patch | 22 +- kernel.spec | 97 +- ...emory-corruption-in-KVM-with-THP-ena.patch | 126 - ...ter-x_tables-check-for-size-overflow.patch | 31 - ...es-deal-with-bogus-nextoffset-values.patch | 150 - ...-prevent-stacking-filesystems-on-top.patch | 41 - ...mac-Fix-eth0-No-PHY-found-regression.patch | 87 - sched-panic-on-corrupted-stack-end.patch | 36 - sources | 6 +- stmmac-fix-MDIO-settings.patch | 235 -- ...ock-before-parsing-nested-attributes.patch | 36 - ...-Build-compressed-x86-kernels-as-PIE.patch | 159 - ...tch-all-pr_err-to-pr_debug-for-inval.patch | 94 - ...-full-randomization-on-i386-and-X86_.patch | 83 - 69 files changed, 4090 insertions(+), 6382 deletions(-) create mode 100644 0001-drm-i915-Reorganize-WM-structs-unions-in-CRTC-state.patch create mode 100644 0001-drm-mgag200-Black-screen-fix-for-G200e-rev-4.patch delete mode 100644 0001-mm-CONFIG_NR_ZONES_EXTENDED.patch delete mode 100644 0001-net-dsa-mv88e6xxx-Introduce-_mv88e6xxx_phy_page_-rea.patch create mode 100644 0002-drm-i915-Rename-s-skl_compute_pipe_wm-skl_build_pipe.patch create mode 100644 0002-drm-nouveau-fbcon-fix-out-of-bounds-memory-accesses.patch delete mode 100644 0002-net-dsa-mv88e6xxx-Clear-the-PDOWN-bit-on-setup.patch create mode 100644 0003-drm-i915-gen9-Cache-plane-data-rates-in-CRTC-state.patch create mode 100644 0003-drm-nouveau-disp-sor-gf119-both-links-use-the-same-t.patch create mode 100644 0004-drm-i915-gen9-Allow-calculation-of-data-rate-for-in-.patch create mode 100644 0004-drm-nouveau-disp-sor-gm107-training-pattern-register.patch create mode 100644 0005-drm-i915-gen9-Store-plane-minimum-blocks-in-CRTC-wm-.patch create mode 100644 0005-i915-fbc-Disable-on-HSW-by-default-for-now.patch create mode 100644 0006-drm-i915-Track-whether-an-atomic-transaction-changes.patch create mode 100644 0007-drm-i915-gen9-Allow-skl_allocate_pipe_ddb-to-operate.patch create mode 100644 0008-drm-i915-Add-distrust_bios_wm-flag-to-dev_priv-v2.patch create mode 100644 0009-drm-i915-gen9-Compute-DDB-allocation-at-atomic-check.patch create mode 100644 0010-drm-i915-gen9-Drop-re-allocation-of-DDB-at-atomic-co.patch create mode 100644 0011-drm-i915-gen9-Calculate-plane-WM-s-from-state.patch create mode 100644 0012-drm-i915-gen9-Allow-watermark-calculation-on-in-flig.patch create mode 100644 0013-drm-i915-gen9-Use-a-bitmask-to-track-dirty-pipe-wate.patch create mode 100644 0014-drm-i915-gen9-Propagate-watermark-calculation-failur.patch create mode 100644 0015-drm-i915-gen9-Calculate-watermarks-during-atomic-che.patch create mode 100644 0016-drm-i915-gen9-Reject-display-updates-that-exceed-wm-.patch create mode 100644 0017-drm-i915-Remove-wm_config-from-dev_priv-intel_atomic.patch delete mode 100644 ARM-mvebu-change-order-of-ethernet-DT-nodes-on-Armada-38x.patch delete mode 100644 HID-sony-do-not-bail-out-when-the-sixaxis-refuses-th.patch delete mode 100644 KEYS-Fix-ASN.1-indefinite-length-object-parsing.patch delete mode 100644 bcm283x-Pull-upstream-fixes-plus-iproc-mmc-driver.patch create mode 100644 bcm283x-upstream-fixes.patch delete mode 100644 dmaengine-sun4i-support-module-autoloading.patch delete mode 100644 ecryptfs-fix-handling-of-directory-opening.patch delete mode 100644 ecryptfs-forbid-opening-files-without-mmap-handler.patch delete mode 100644 mm-thp-kvm-fix-memory-corruption-in-KVM-with-THP-ena.patch delete mode 100644 netfilter-x_tables-check-for-size-overflow.patch delete mode 100644 netfilter-x_tables-deal-with-bogus-nextoffset-values.patch delete mode 100644 proc-prevent-stacking-filesystems-on-top.patch delete mode 100644 revert-stmmac-Fix-eth0-No-PHY-found-regression.patch delete mode 100644 sched-panic-on-corrupted-stack-end.patch delete mode 100644 stmmac-fix-MDIO-settings.patch delete mode 100644 tipc-check-nl-sock-before-parsing-nested-attributes.patch delete mode 100644 x86-build-Build-compressed-x86-kernels-as-PIE.patch delete mode 100644 x86-efi-bgrt-Switch-all-pr_err-to-pr_debug-for-inval.patch delete mode 100644 x86-mm-32-Enable-full-randomization-on-i386-and-X86_.patch diff --git a/0001-drm-i915-Reorganize-WM-structs-unions-in-CRTC-state.patch b/0001-drm-i915-Reorganize-WM-structs-unions-in-CRTC-state.patch new file mode 100644 index 000000000..dc6e2e086 --- /dev/null +++ b/0001-drm-i915-Reorganize-WM-structs-unions-in-CRTC-state.patch @@ -0,0 +1,198 @@ +From 2a6f0971d09e2bb88d2ae40d91ceb2776090497d Mon Sep 17 00:00:00 2001 +From: Fedora Kernel Team +Date: Mon, 20 Jun 2016 11:11:50 +0200 +Subject: [PATCH 01/17] drm/i915: Reorganize WM structs/unions in CRTC state + +Upstream: since drm-intel-next-2016-05-22 +commit e8f1f02e7125220b99af8047703b63c11a7081d6 + +Author: Matt Roper +AuthorDate: Thu May 12 07:05:55 2016 -0700 +Commit: Matt Roper +CommitDate: Fri May 13 07:32:11 2016 -0700 + + drm/i915: Reorganize WM structs/unions in CRTC state + + Reorganize the nested structures and unions we have for pipe watermark + data in intel_crtc_state so that platform-specific data can be added in + a more sensible manner (and save a bit of memory at the same time). + + The change basically changes the organization from: + + union { + struct intel_pipe_wm ilk; + struct intel_pipe_wm skl; + } optimal; + + struct intel_pipe_wm intermediate /* ILK-only */ + + to + + union { + struct { + struct intel_pipe_wm intermediate; + struct intel_pipe_wm optimal; + } ilk; + + struct { + struct intel_pipe_wm optimal; + } skl; + } + + There should be no functional change here, but it will allow us to add + more platform-specific fields going forward (and more easily extend to + other platform types like VLV). + + While we're at it, let's move the entire watermark substructure out to + its own structure definition to make the code slightly more readable. + + Signed-off-by: Matt Roper + Reviewed-by: Maarten Lankhorst + Link: http://patchwork.freedesktop.org/patch/msgid/1463061971-19638-2-git-send-email-matthew.d.roper@intel.com +--- + drivers/gpu/drm/i915/intel_drv.h | 48 +++++++++++++++++++++++++++++++--------- + drivers/gpu/drm/i915/intel_pm.c | 16 +++++++------- + 2 files changed, 46 insertions(+), 18 deletions(-) + +diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h +index 3a30b37..7d19baf 100644 +--- a/drivers/gpu/drm/i915/intel_drv.h ++++ b/drivers/gpu/drm/i915/intel_drv.h +@@ -363,6 +363,40 @@ struct skl_pipe_wm { + uint32_t linetime; + }; + ++struct intel_crtc_wm_state { ++ union { ++ struct { ++ /* ++ * Intermediate watermarks; these can be ++ * programmed immediately since they satisfy ++ * both the current configuration we're ++ * switching away from and the new ++ * configuration we're switching to. ++ */ ++ struct intel_pipe_wm intermediate; ++ ++ /* ++ * Optimal watermarks, programmed post-vblank ++ * when this state is committed. ++ */ ++ struct intel_pipe_wm optimal; ++ } ilk; ++ ++ struct { ++ /* gen9+ only needs 1-step wm programming */ ++ struct skl_pipe_wm optimal; ++ } skl; ++ }; ++ ++ /* ++ * Platforms with two-step watermark programming will need to ++ * update watermark programming post-vblank to switch from the ++ * safe intermediate watermarks to the optimal final ++ * watermarks. ++ */ ++ bool need_postvbl_update; ++}; ++ + struct intel_crtc_state { + struct drm_crtc_state base; + +@@ -509,16 +543,10 @@ struct intel_crtc_state { + /* IVB sprite scaling w/a (WaCxSRDisabledForSpriteScaling:ivb) */ + bool disable_lp_wm; + +- struct { +- /* +- * optimal watermarks, programmed post-vblank when this state +- * is committed +- */ +- union { +- struct intel_pipe_wm ilk; +- struct skl_pipe_wm skl; +- } optimal; +- } wm; ++ struct intel_crtc_wm_state wm; ++ ++ /* Gamma mode programmed on the pipe */ ++ uint32_t gamma_mode; + }; + + struct vlv_wm_state { +diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c +index 54ab023..0da1d60 100644 +--- a/drivers/gpu/drm/i915/intel_pm.c ++++ b/drivers/gpu/drm/i915/intel_pm.c +@@ -2302,7 +2302,7 @@ static int ilk_compute_pipe_wm(struct intel_crtc *intel_crtc, + if (IS_ERR(cstate)) + return PTR_ERR(cstate); + +- pipe_wm = &cstate->wm.optimal.ilk; ++ pipe_wm = &cstate->wm.ilk.optimal; + memset(pipe_wm, 0, sizeof(*pipe_wm)); + + for_each_intel_plane_on_crtc(dev, intel_crtc, intel_plane) { +@@ -2385,7 +2385,7 @@ static void ilk_merge_wm_level(struct drm_device *dev, + for_each_intel_crtc(dev, intel_crtc) { + const struct intel_crtc_state *cstate = + to_intel_crtc_state(intel_crtc->base.state); +- const struct intel_pipe_wm *active = &cstate->wm.optimal.ilk; ++ const struct intel_pipe_wm *active = &cstate->wm.ilk.optimal; + const struct intel_wm_level *wm = &active->wm[level]; + + if (!active->pipe_enabled) +@@ -2536,12 +2536,12 @@ static void ilk_compute_wm_results(struct drm_device *dev, + const struct intel_crtc_state *cstate = + to_intel_crtc_state(intel_crtc->base.state); + enum pipe pipe = intel_crtc->pipe; +- const struct intel_wm_level *r = &cstate->wm.optimal.ilk.wm[0]; ++ const struct intel_wm_level *r = &cstate->wm.ilk.optimal.wm[0]; + + if (WARN_ON(!r->enable)) + continue; + +- results->wm_linetime[pipe] = cstate->wm.optimal.ilk.linetime; ++ results->wm_linetime[pipe] = cstate->wm.ilk.optimal.linetime; + + results->wm_pipe[pipe] = + (r->pri_val << WM0_PIPE_PLANE_SHIFT) | +@@ -3617,7 +3617,7 @@ static void skl_update_wm(struct drm_crtc *crtc) + struct drm_i915_private *dev_priv = dev->dev_private; + struct skl_wm_values *results = &dev_priv->wm.skl_results; + struct intel_crtc_state *cstate = to_intel_crtc_state(crtc->state); +- struct skl_pipe_wm *pipe_wm = &cstate->wm.optimal.skl; ++ struct skl_pipe_wm *pipe_wm = &cstate->wm.skl.optimal; + + + /* Clear all dirty flags */ +@@ -3711,7 +3711,7 @@ static void ilk_update_wm(struct drm_crtc *crtc) + intel_wait_for_vblank(crtc->dev, intel_crtc->pipe); + } + +- intel_crtc->wm.active.ilk = cstate->wm.optimal.ilk; ++ intel_crtc->wm.active.ilk = cstate->wm.ilk.optimal; + + ilk_program_watermarks(cstate); + } +@@ -3767,7 +3767,7 @@ static void skl_pipe_wm_get_hw_state(struct drm_crtc *crtc) + struct skl_wm_values *hw = &dev_priv->wm.skl_hw; + struct intel_crtc *intel_crtc = to_intel_crtc(crtc); + struct intel_crtc_state *cstate = to_intel_crtc_state(crtc->state); +- struct skl_pipe_wm *active = &cstate->wm.optimal.skl; ++ struct skl_pipe_wm *active = &cstate->wm.skl.optimal; + enum pipe pipe = intel_crtc->pipe; + int level, i, max_level; + uint32_t temp; +@@ -3833,7 +3833,7 @@ static void ilk_pipe_wm_get_hw_state(struct drm_crtc *crtc) + struct ilk_wm_values *hw = &dev_priv->wm.hw; + struct intel_crtc *intel_crtc = to_intel_crtc(crtc); + struct intel_crtc_state *cstate = to_intel_crtc_state(crtc->state); +- struct intel_pipe_wm *active = &cstate->wm.optimal.ilk; ++ struct intel_pipe_wm *active = &cstate->wm.ilk.optimal; + enum pipe pipe = intel_crtc->pipe; + static const i915_reg_t wm0_pipe_reg[] = { + [PIPE_A] = WM0_PIPEA_ILK, +-- +2.7.4 + diff --git a/0001-drm-mgag200-Black-screen-fix-for-G200e-rev-4.patch b/0001-drm-mgag200-Black-screen-fix-for-G200e-rev-4.patch new file mode 100644 index 000000000..e583d09e8 --- /dev/null +++ b/0001-drm-mgag200-Black-screen-fix-for-G200e-rev-4.patch @@ -0,0 +1,58 @@ +From 1e5895f2c6068fb9ae5356e3a751a29a22af5f01 Mon Sep 17 00:00:00 2001 +From: Fedora Kernel Team +Date: Mon, 20 Jun 2016 14:53:03 +0200 +Subject: [PATCH 1/6] drm/mgag200: Black screen fix for G200e rev 4 + +Upstream: since drm-fixes-for-v4.7 +commit d3922b69617b62bb2509936b68301f837229d9f0 + +Author: Mathieu Larouche +AuthorDate: Fri May 27 15:12:50 2016 -0400 +Commit: Dave Airlie +CommitDate: Wed Jun 1 15:25:04 2016 +1000 + + drm/mgag200: Black screen fix for G200e rev 4 + + - Fixed black screen for some resolutions of G200e rev4 + - Fixed testm & testn which had predetermined value. + + Reported-by: Jan Beulich + + Signed-off-by: Mathieu Larouche + Cc: stable@vger.kernel.org + Signed-off-by: Dave Airlie +--- + drivers/gpu/drm/mgag200/mgag200_mode.c | 10 +++++++++- + 1 file changed, 9 insertions(+), 1 deletion(-) + +diff --git a/drivers/gpu/drm/mgag200/mgag200_mode.c b/drivers/gpu/drm/mgag200/mgag200_mode.c +index 14e64e0..d347dca 100644 +--- a/drivers/gpu/drm/mgag200/mgag200_mode.c ++++ b/drivers/gpu/drm/mgag200/mgag200_mode.c +@@ -182,7 +182,7 @@ static int mga_g200se_set_plls(struct mga_device *mdev, long clock) + } + } + +- fvv = pllreffreq * testn / testm; ++ fvv = pllreffreq * (n + 1) / (m + 1); + fvv = (fvv - 800000) / 50000; + + if (fvv > 15) +@@ -202,6 +202,14 @@ static int mga_g200se_set_plls(struct mga_device *mdev, long clock) + WREG_DAC(MGA1064_PIX_PLLC_M, m); + WREG_DAC(MGA1064_PIX_PLLC_N, n); + WREG_DAC(MGA1064_PIX_PLLC_P, p); ++ ++ if (mdev->unique_rev_id >= 0x04) { ++ WREG_DAC(0x1a, 0x09); ++ msleep(20); ++ WREG_DAC(0x1a, 0x01); ++ ++ } ++ + return 0; + } + +-- +2.7.4 + diff --git a/0001-mm-CONFIG_NR_ZONES_EXTENDED.patch b/0001-mm-CONFIG_NR_ZONES_EXTENDED.patch deleted file mode 100644 index 44ef3662b..000000000 --- a/0001-mm-CONFIG_NR_ZONES_EXTENDED.patch +++ /dev/null @@ -1,173 +0,0 @@ -From 8b368e8e961944105945fbe36f3f264252bfd19a Mon Sep 17 00:00:00 2001 -From: Dan Williams -Date: Thu, 25 Feb 2016 01:02:30 +0000 -Subject: [PATCH] mm: CONFIG_NR_ZONES_EXTENDED - -ZONE_DEVICE (merged in 4.3) and ZONE_CMA (proposed) are examples of new mm -zones that are bumping up against the current maximum limit of 4 zones, -i.e. 2 bits in page->flags. When adding a zone this equation still needs -to be satisified: - - SECTIONS_WIDTH + ZONES_WIDTH + NODES_SHIFT + LAST_CPUPID_SHIFT - <= BITS_PER_LONG - NR_PAGEFLAGS - -ZONE_DEVICE currently tries to satisfy this equation by requiring that -ZONE_DMA be disabled, but this is untenable given generic kernels want to -support ZONE_DEVICE and ZONE_DMA simultaneously. ZONE_CMA would like to -increase the amount of memory covered per section, but that limits the -minimum granularity at which consecutive memory ranges can be added via -devm_memremap_pages(). - -The trade-off of what is acceptable to sacrifice depends heavily on the -platform. For example, ZONE_CMA is targeted for 32-bit platforms where -page->flags is constrained, but those platforms likely do not care about -the minimum granularity of memory hotplug. A big iron machine with 1024 -numa nodes can likely sacrifice ZONE_DMA where a general purpose -distribution kernel can not. - -CONFIG_NR_ZONES_EXTENDED is a configuration symbol that gets selected when -the number of configured zones exceeds 4. It documents the configuration -symbols and definitions that get modified when ZONES_WIDTH is greater than -2. - -For now, it steals a bit from NODES_SHIFT. Later on it can be used to -document the definitions that get modified when a 32-bit configuration -wants more zone bits. - -Note that GFP_ZONE_TABLE poses an interesting constraint since -include/linux/gfp.h gets included by the 32-bit portion of a 64-bit build. -We need to be careful to only build the table for zones that have a -corresponding gfp_t flag. GFP_ZONES_SHIFT is introduced for this purpose. -This patch does not attempt to solve the problem of adding a new zone -that also has a corresponding GFP_ flag. - -Link: https://bugzilla.kernel.org/show_bug.cgi?id=110931 -Fixes: 033fbae988fc ("mm: ZONE_DEVICE for "device memory"") -Signed-off-by: Dan Williams -Reported-by: Mark -Cc: Mel Gorman -Cc: Rik van Riel -Cc: Joonsoo Kim -Cc: Dave Hansen -Cc: Sudip Mukherjee -Signed-off-by: Andrew Morton ---- - arch/x86/Kconfig | 6 ++++-- - include/linux/gfp.h | 33 ++++++++++++++++++++------------- - include/linux/page-flags-layout.h | 2 ++ - mm/Kconfig | 7 +++++-- - 4 files changed, 31 insertions(+), 17 deletions(-) - -diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig -index 3fef519..b94704a 100644 ---- a/arch/x86/Kconfig -+++ b/arch/x86/Kconfig -@@ -1409,8 +1409,10 @@ config NUMA_EMU - - config NODES_SHIFT - int "Maximum NUMA Nodes (as a power of 2)" if !MAXSMP -- range 1 10 -- default "10" if MAXSMP -+ range 1 10 if !NR_ZONES_EXTENDED -+ range 1 9 if NR_ZONES_EXTENDED -+ default "10" if MAXSMP && !NR_ZONES_EXTENDED -+ default "9" if MAXSMP && NR_ZONES_EXTENDED - default "6" if X86_64 - default "3" - depends on NEED_MULTIPLE_NODES -diff --git a/include/linux/gfp.h b/include/linux/gfp.h -index af1f2b2..d201d8a 100644 ---- a/include/linux/gfp.h -+++ b/include/linux/gfp.h -@@ -329,22 +329,29 @@ static inline bool gfpflags_allow_blocking(const gfp_t gfp_flags) - * 0xe => BAD (MOVABLE+DMA32+HIGHMEM) - * 0xf => BAD (MOVABLE+DMA32+HIGHMEM+DMA) - * -- * ZONES_SHIFT must be <= 2 on 32 bit platforms. -+ * GFP_ZONES_SHIFT must be <= 2 on 32 bit platforms. - */ - --#if 16 * ZONES_SHIFT > BITS_PER_LONG --#error ZONES_SHIFT too large to create GFP_ZONE_TABLE integer -+#if defined(CONFIG_ZONE_DEVICE) && (MAX_NR_ZONES-1) <= 4 -+/* ZONE_DEVICE is not a valid GFP zone specifier */ -+#define GFP_ZONES_SHIFT 2 -+#else -+#define GFP_ZONES_SHIFT ZONES_SHIFT -+#endif -+ -+#if 16 * GFP_ZONES_SHIFT > BITS_PER_LONG -+#error GFP_ZONES_SHIFT too large to create GFP_ZONE_TABLE integer - #endif - - #define GFP_ZONE_TABLE ( \ -- (ZONE_NORMAL << 0 * ZONES_SHIFT) \ -- | (OPT_ZONE_DMA << ___GFP_DMA * ZONES_SHIFT) \ -- | (OPT_ZONE_HIGHMEM << ___GFP_HIGHMEM * ZONES_SHIFT) \ -- | (OPT_ZONE_DMA32 << ___GFP_DMA32 * ZONES_SHIFT) \ -- | (ZONE_NORMAL << ___GFP_MOVABLE * ZONES_SHIFT) \ -- | (OPT_ZONE_DMA << (___GFP_MOVABLE | ___GFP_DMA) * ZONES_SHIFT) \ -- | (ZONE_MOVABLE << (___GFP_MOVABLE | ___GFP_HIGHMEM) * ZONES_SHIFT) \ -- | (OPT_ZONE_DMA32 << (___GFP_MOVABLE | ___GFP_DMA32) * ZONES_SHIFT) \ -+ (ZONE_NORMAL << 0 * GFP_ZONES_SHIFT) \ -+ | (OPT_ZONE_DMA << ___GFP_DMA * GFP_ZONES_SHIFT) \ -+ | (OPT_ZONE_HIGHMEM << ___GFP_HIGHMEM * GFP_ZONES_SHIFT) \ -+ | (OPT_ZONE_DMA32 << ___GFP_DMA32 * GFP_ZONES_SHIFT) \ -+ | (ZONE_NORMAL << ___GFP_MOVABLE * GFP_ZONES_SHIFT) \ -+ | (OPT_ZONE_DMA << (___GFP_MOVABLE | ___GFP_DMA) * GFP_ZONES_SHIFT) \ -+ | (ZONE_MOVABLE << (___GFP_MOVABLE | ___GFP_HIGHMEM) * GFP_ZONES_SHIFT) \ -+ | (OPT_ZONE_DMA32 << (___GFP_MOVABLE | ___GFP_DMA32) * GFP_ZONES_SHIFT) \ - ) - - /* -@@ -369,8 +376,8 @@ static inline enum zone_type gfp_zone(gfp_t flags) - enum zone_type z; - int bit = (__force int) (flags & GFP_ZONEMASK); - -- z = (GFP_ZONE_TABLE >> (bit * ZONES_SHIFT)) & -- ((1 << ZONES_SHIFT) - 1); -+ z = (GFP_ZONE_TABLE >> (bit * GFP_ZONES_SHIFT)) & -+ ((1 << GFP_ZONES_SHIFT) - 1); - VM_BUG_ON((GFP_ZONE_BAD >> bit) & 1); - return z; - } -diff --git a/include/linux/page-flags-layout.h b/include/linux/page-flags-layout.h -index da52366..77b078c 100644 ---- a/include/linux/page-flags-layout.h -+++ b/include/linux/page-flags-layout.h -@@ -17,6 +17,8 @@ - #define ZONES_SHIFT 1 - #elif MAX_NR_ZONES <= 4 - #define ZONES_SHIFT 2 -+#elif MAX_NR_ZONES <= 8 -+#define ZONES_SHIFT 3 - #else - #error ZONES_SHIFT -- too many zones configured adjust calculation - #endif -diff --git a/mm/Kconfig b/mm/Kconfig -index 031a329..7826216 100644 ---- a/mm/Kconfig -+++ b/mm/Kconfig -@@ -652,8 +652,6 @@ config IDLE_PAGE_TRACKING - - config ZONE_DEVICE - bool "Device memory (pmem, etc...) hotplug support" -- default !ZONE_DMA -- depends on !ZONE_DMA - depends on MEMORY_HOTPLUG - depends on MEMORY_HOTREMOVE - depends on X86_64 #arch_add_memory() comprehends device memory -@@ -667,5 +665,10 @@ config ZONE_DEVICE - - If FS_DAX is enabled, then say Y. - -+config NR_ZONES_EXTENDED -+ bool -+ default n if !64BIT -+ default y if ZONE_DEVICE && ZONE_DMA && ZONE_DMA32 -+ - config FRAME_VECTOR - bool --- -2.5.0 - diff --git a/0001-net-dsa-mv88e6xxx-Introduce-_mv88e6xxx_phy_page_-rea.patch b/0001-net-dsa-mv88e6xxx-Introduce-_mv88e6xxx_phy_page_-rea.patch deleted file mode 100644 index 1e2d4db59..000000000 --- a/0001-net-dsa-mv88e6xxx-Introduce-_mv88e6xxx_phy_page_-rea.patch +++ /dev/null @@ -1,95 +0,0 @@ -From 4d1b08a69350d40e0aa14baba4797ef175295718 Mon Sep 17 00:00:00 2001 -From: Peter Robinson -Date: Wed, 30 Mar 2016 12:40:54 +0100 -Subject: [PATCH 1/2] net: dsa: mv88e6xxx: Introduce - _mv88e6xxx_phy_page_{read,write} - -Add versions of the phy_page_read and _write functions to -be used in a context where the SMI mutex is held. - -Tested-by: Vivien Didelot -Reviewed-by: Vivien Didelot -Signed-off-by: Patrick Uiterwijk ---- - drivers/net/dsa/mv88e6xxx.c | 49 +++++++++++++++++++++++++++++++++------------ - 1 file changed, 36 insertions(+), 13 deletions(-) - -diff --git a/drivers/net/dsa/mv88e6xxx.c b/drivers/net/dsa/mv88e6xxx.c -index 512c8c0..3dcfe13 100644 ---- a/drivers/net/dsa/mv88e6xxx.c -+++ b/drivers/net/dsa/mv88e6xxx.c -@@ -1929,6 +1929,38 @@ static void mv88e6xxx_bridge_work(struct work_struct *work) - } - } - -+static int _mv88e6xxx_phy_page_write(struct dsa_switch *ds, int port, int page, -+ int reg, int val) -+{ -+ int ret; -+ -+ ret = _mv88e6xxx_phy_write_indirect(ds, port, 0x16, page); -+ if (ret < 0) -+ goto restore_page_0; -+ -+ ret = _mv88e6xxx_phy_write_indirect(ds, port, reg, val); -+restore_page_0: -+ _mv88e6xxx_phy_write_indirect(ds, port, 0x16, 0x0); -+ -+ return ret; -+} -+ -+static int _mv88e6xxx_phy_page_read(struct dsa_switch *ds, int port, int page, -+ int reg) -+{ -+ int ret; -+ -+ ret = _mv88e6xxx_phy_write_indirect(ds, port, 0x16, page); -+ if (ret < 0) -+ goto restore_page_0; -+ -+ ret = _mv88e6xxx_phy_read_indirect(ds, port, reg); -+restore_page_0: -+ _mv88e6xxx_phy_write_indirect(ds, port, 0x16, 0x0); -+ -+ return ret; -+} -+ - static int mv88e6xxx_setup_port(struct dsa_switch *ds, int port) - { - struct mv88e6xxx_priv_state *ps = ds_to_priv(ds); -@@ -2383,13 +2415,9 @@ int mv88e6xxx_phy_page_read(struct dsa_switch *ds, int port, int page, int reg) - int ret; - - mutex_lock(&ps->smi_mutex); -- ret = _mv88e6xxx_phy_write_indirect(ds, port, 0x16, page); -- if (ret < 0) -- goto error; -- ret = _mv88e6xxx_phy_read_indirect(ds, port, reg); --error: -- _mv88e6xxx_phy_write_indirect(ds, port, 0x16, 0x0); -+ ret = _mv88e6xxx_phy_page_read(ds, port, page, reg); - mutex_unlock(&ps->smi_mutex); -+ - return ret; - } - -@@ -2400,14 +2428,9 @@ int mv88e6xxx_phy_page_write(struct dsa_switch *ds, int port, int page, - int ret; - - mutex_lock(&ps->smi_mutex); -- ret = _mv88e6xxx_phy_write_indirect(ds, port, 0x16, page); -- if (ret < 0) -- goto error; -- -- ret = _mv88e6xxx_phy_write_indirect(ds, port, reg, val); --error: -- _mv88e6xxx_phy_write_indirect(ds, port, 0x16, 0x0); -+ ret = _mv88e6xxx_phy_page_write(ds, port, page, reg, val); - mutex_unlock(&ps->smi_mutex); -+ - return ret; - } - --- -2.7.3 - diff --git a/0002-drm-i915-Rename-s-skl_compute_pipe_wm-skl_build_pipe.patch b/0002-drm-i915-Rename-s-skl_compute_pipe_wm-skl_build_pipe.patch new file mode 100644 index 000000000..f9eecb97a --- /dev/null +++ b/0002-drm-i915-Rename-s-skl_compute_pipe_wm-skl_build_pipe.patch @@ -0,0 +1,60 @@ +From 4d428f0fd6aaaa75382885d897900f619b2dad35 Mon Sep 17 00:00:00 2001 +From: Fedora Kernel Team +Date: Mon, 20 Jun 2016 11:12:56 +0200 +Subject: [PATCH 02/17] drm/i915: Rename + s/skl_compute_pipe_wm/skl_build_pipe_wm/ + +Upstream: since drm-intel-next-2016-05-22 +commit e7649b54777ba6491204acbe1f1a34fce78637d5 + +Author: Matt Roper +AuthorDate: Thu May 12 07:05:56 2016 -0700 +Commit: Matt Roper +CommitDate: Fri May 13 07:32:27 2016 -0700 + + drm/i915: Rename s/skl_compute_pipe_wm/skl_build_pipe_wm/ + + When we added atomic watermarks, we added a new display vfunc + 'compute_pipe_wm' that is used to compute any pipe-specific watermark + information that we can at atomic check time. This was a somewhat poor + naming choice since we already had a 'skl_compute_pipe_wm' function that + doesn't quite fit this model --- the existing SKL function is something + that gets used at atomic commit time, after the DDB allocation has been + determined. Let's rename the existing SKL function to avoid confusion. + + Signed-off-by: Matt Roper + Reviewed-by: Maarten Lankhorst + Link: http://patchwork.freedesktop.org/patch/msgid/1463061971-19638-3-git-send-email-matthew.d.roper@intel.com +--- + drivers/gpu/drm/i915/intel_pm.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c +index 0da1d60..8f081b2 100644 +--- a/drivers/gpu/drm/i915/intel_pm.c ++++ b/drivers/gpu/drm/i915/intel_pm.c +@@ -3266,9 +3266,9 @@ static void skl_compute_transition_wm(struct intel_crtc_state *cstate, + } + } + +-static void skl_compute_pipe_wm(struct intel_crtc_state *cstate, +- struct skl_ddb_allocation *ddb, +- struct skl_pipe_wm *pipe_wm) ++static void skl_build_pipe_wm(struct intel_crtc_state *cstate, ++ struct skl_ddb_allocation *ddb, ++ struct skl_pipe_wm *pipe_wm) + { + struct drm_device *dev = cstate->base.crtc->dev; + const struct drm_i915_private *dev_priv = dev->dev_private; +@@ -3535,7 +3535,7 @@ static bool skl_update_pipe_wm(struct drm_crtc *crtc, + struct intel_crtc_state *cstate = to_intel_crtc_state(crtc->state); + + skl_allocate_pipe_ddb(cstate, ddb); +- skl_compute_pipe_wm(cstate, ddb, pipe_wm); ++ skl_build_pipe_wm(cstate, ddb, pipe_wm); + + if (!memcmp(&intel_crtc->wm.active.skl, pipe_wm, sizeof(*pipe_wm))) + return false; +-- +2.7.4 + diff --git a/0002-drm-nouveau-fbcon-fix-out-of-bounds-memory-accesses.patch b/0002-drm-nouveau-fbcon-fix-out-of-bounds-memory-accesses.patch new file mode 100644 index 000000000..d1c32b439 --- /dev/null +++ b/0002-drm-nouveau-fbcon-fix-out-of-bounds-memory-accesses.patch @@ -0,0 +1,138 @@ +From 02510a8805db2c3f8ca2926f90c4b3793934404a Mon Sep 17 00:00:00 2001 +From: Fedora Kernel Team +Date: Mon, 20 Jun 2016 14:51:45 +0200 +Subject: [PATCH 2/6] drm/nouveau/fbcon: fix out-of-bounds memory accesses + +Upstream: drm-fixes for 4.7 (and cc'd 4.6-stable) +commit f045f459d925138fe7d6193a8c86406bda7e49da + +Author: Ben Skeggs +AuthorDate: Thu Jun 2 12:23:31 2016 +1000 +Commit: Ben Skeggs +CommitDate: Thu Jun 2 13:53:44 2016 +1000 + + drm/nouveau/fbcon: fix out-of-bounds memory accesses + + Reported by KASAN. + + Signed-off-by: Ben Skeggs + Cc: stable@vger.kernel.org +--- + drivers/gpu/drm/nouveau/nouveau_fbcon.c | 1 + + drivers/gpu/drm/nouveau/nv04_fbcon.c | 7 ++----- + drivers/gpu/drm/nouveau/nv50_fbcon.c | 6 ++---- + drivers/gpu/drm/nouveau/nvc0_fbcon.c | 6 ++---- + 4 files changed, 7 insertions(+), 13 deletions(-) + +diff --git a/drivers/gpu/drm/nouveau/nouveau_fbcon.c b/drivers/gpu/drm/nouveau/nouveau_fbcon.c +index 59f27e7..bd89c86 100644 +--- a/drivers/gpu/drm/nouveau/nouveau_fbcon.c ++++ b/drivers/gpu/drm/nouveau/nouveau_fbcon.c +@@ -557,6 +557,7 @@ nouveau_fbcon_init(struct drm_device *dev) + if (ret) + goto fini; + ++ fbcon->helper.fbdev->pixmap.buf_align = 4; + return 0; + + fini: +diff --git a/drivers/gpu/drm/nouveau/nv04_fbcon.c b/drivers/gpu/drm/nouveau/nv04_fbcon.c +index 789dc29..8f715fe 100644 +--- a/drivers/gpu/drm/nouveau/nv04_fbcon.c ++++ b/drivers/gpu/drm/nouveau/nv04_fbcon.c +@@ -82,7 +82,6 @@ nv04_fbcon_imageblit(struct fb_info *info, const struct fb_image *image) + uint32_t fg; + uint32_t bg; + uint32_t dsize; +- uint32_t width; + uint32_t *data = (uint32_t *)image->data; + int ret; + +@@ -93,9 +92,6 @@ nv04_fbcon_imageblit(struct fb_info *info, const struct fb_image *image) + if (ret) + return ret; + +- width = ALIGN(image->width, 8); +- dsize = ALIGN(width * image->height, 32) >> 5; +- + if (info->fix.visual == FB_VISUAL_TRUECOLOR || + info->fix.visual == FB_VISUAL_DIRECTCOLOR) { + fg = ((uint32_t *) info->pseudo_palette)[image->fg_color]; +@@ -111,10 +107,11 @@ nv04_fbcon_imageblit(struct fb_info *info, const struct fb_image *image) + ((image->dx + image->width) & 0xffff)); + OUT_RING(chan, bg); + OUT_RING(chan, fg); +- OUT_RING(chan, (image->height << 16) | width); ++ OUT_RING(chan, (image->height << 16) | image->width); + OUT_RING(chan, (image->height << 16) | image->width); + OUT_RING(chan, (image->dy << 16) | (image->dx & 0xffff)); + ++ dsize = ALIGN(image->width * image->height, 32) >> 5; + while (dsize) { + int iter_len = dsize > 128 ? 128 : dsize; + +diff --git a/drivers/gpu/drm/nouveau/nv50_fbcon.c b/drivers/gpu/drm/nouveau/nv50_fbcon.c +index e05499d..a4e259a 100644 +--- a/drivers/gpu/drm/nouveau/nv50_fbcon.c ++++ b/drivers/gpu/drm/nouveau/nv50_fbcon.c +@@ -95,7 +95,7 @@ nv50_fbcon_imageblit(struct fb_info *info, const struct fb_image *image) + struct nouveau_fbdev *nfbdev = info->par; + struct nouveau_drm *drm = nouveau_drm(nfbdev->dev); + struct nouveau_channel *chan = drm->channel; +- uint32_t width, dwords, *data = (uint32_t *)image->data; ++ uint32_t dwords, *data = (uint32_t *)image->data; + uint32_t mask = ~(~0 >> (32 - info->var.bits_per_pixel)); + uint32_t *palette = info->pseudo_palette; + int ret; +@@ -107,9 +107,6 @@ nv50_fbcon_imageblit(struct fb_info *info, const struct fb_image *image) + if (ret) + return ret; + +- width = ALIGN(image->width, 32); +- dwords = (width * image->height) >> 5; +- + BEGIN_NV04(chan, NvSub2D, 0x0814, 2); + if (info->fix.visual == FB_VISUAL_TRUECOLOR || + info->fix.visual == FB_VISUAL_DIRECTCOLOR) { +@@ -128,6 +125,7 @@ nv50_fbcon_imageblit(struct fb_info *info, const struct fb_image *image) + OUT_RING(chan, 0); + OUT_RING(chan, image->dy); + ++ dwords = ALIGN(image->width * image->height, 32) >> 5; + while (dwords) { + int push = dwords > 2047 ? 2047 : dwords; + +diff --git a/drivers/gpu/drm/nouveau/nvc0_fbcon.c b/drivers/gpu/drm/nouveau/nvc0_fbcon.c +index c97395b..f28315e 100644 +--- a/drivers/gpu/drm/nouveau/nvc0_fbcon.c ++++ b/drivers/gpu/drm/nouveau/nvc0_fbcon.c +@@ -95,7 +95,7 @@ nvc0_fbcon_imageblit(struct fb_info *info, const struct fb_image *image) + struct nouveau_fbdev *nfbdev = info->par; + struct nouveau_drm *drm = nouveau_drm(nfbdev->dev); + struct nouveau_channel *chan = drm->channel; +- uint32_t width, dwords, *data = (uint32_t *)image->data; ++ uint32_t dwords, *data = (uint32_t *)image->data; + uint32_t mask = ~(~0 >> (32 - info->var.bits_per_pixel)); + uint32_t *palette = info->pseudo_palette; + int ret; +@@ -107,9 +107,6 @@ nvc0_fbcon_imageblit(struct fb_info *info, const struct fb_image *image) + if (ret) + return ret; + +- width = ALIGN(image->width, 32); +- dwords = (width * image->height) >> 5; +- + BEGIN_NVC0(chan, NvSub2D, 0x0814, 2); + if (info->fix.visual == FB_VISUAL_TRUECOLOR || + info->fix.visual == FB_VISUAL_DIRECTCOLOR) { +@@ -128,6 +125,7 @@ nvc0_fbcon_imageblit(struct fb_info *info, const struct fb_image *image) + OUT_RING (chan, 0); + OUT_RING (chan, image->dy); + ++ dwords = ALIGN(image->width * image->height, 32) >> 5; + while (dwords) { + int push = dwords > 2047 ? 2047 : dwords; + +-- +2.7.4 + diff --git a/0002-net-dsa-mv88e6xxx-Clear-the-PDOWN-bit-on-setup.patch b/0002-net-dsa-mv88e6xxx-Clear-the-PDOWN-bit-on-setup.patch deleted file mode 100644 index 35b369312..000000000 --- a/0002-net-dsa-mv88e6xxx-Clear-the-PDOWN-bit-on-setup.patch +++ /dev/null @@ -1,104 +0,0 @@ -From a878e3fa9657646ff85468075823870fbbd5745f Mon Sep 17 00:00:00 2001 -From: Peter Robinson -Date: Wed, 30 Mar 2016 12:41:22 +0100 -Subject: [PATCH 2/2] net: dsa: mv88e6xxx: Clear the PDOWN bit on setup - -Some of the vendor-specific bootloaders set up this part -of the initialization for us, so this was never added. -However, since upstream bootloaders don't initialize the -chip specifically, they leave the fiber MII's PDOWN flag -set, which means that the CPU port doesn't connect. - -This patch checks whether this flag has been clear prior -by something else, and if not make us clear it. - -Reviewed-by: Andrew Lunn -Signed-off-by: Patrick Uiterwijk ---- - drivers/net/dsa/mv88e6xxx.c | 36 ++++++++++++++++++++++++++++++++++++ - drivers/net/dsa/mv88e6xxx.h | 8 ++++++++ - 2 files changed, 44 insertions(+) - -diff --git a/drivers/net/dsa/mv88e6xxx.c b/drivers/net/dsa/mv88e6xxx.c -index 3dcfe13..a4e3750 100644 ---- a/drivers/net/dsa/mv88e6xxx.c -+++ b/drivers/net/dsa/mv88e6xxx.c -@@ -1961,6 +1961,25 @@ restore_page_0: - return ret; - } - -+static int mv88e6xxx_power_on_serdes(struct dsa_switch *ds) -+{ -+ int ret; -+ -+ ret = _mv88e6xxx_phy_page_read(ds, REG_FIBER_SERDES, PAGE_FIBER_SERDES, -+ MII_BMCR); -+ if (ret < 0) -+ return ret; -+ -+ if (ret & BMCR_PDOWN) { -+ ret &= ~BMCR_PDOWN; -+ ret = _mv88e6xxx_phy_page_write(ds, REG_FIBER_SERDES, -+ PAGE_FIBER_SERDES, MII_BMCR, -+ ret); -+ } -+ -+ return ret; -+} -+ - static int mv88e6xxx_setup_port(struct dsa_switch *ds, int port) - { - struct mv88e6xxx_priv_state *ps = ds_to_priv(ds); -@@ -2064,6 +2083,23 @@ static int mv88e6xxx_setup_port(struct dsa_switch *ds, int port) - goto abort; - } - -+ /* If this port is connected to a SerDes, make sure the SerDes is not -+ * powered down. -+ */ -+ if (mv88e6xxx_6352_family(ds)) { -+ ret = _mv88e6xxx_reg_read(ds, REG_PORT(port), PORT_STATUS); -+ if (ret < 0) -+ goto abort; -+ ret &= PORT_STATUS_CMODE_MASK; -+ if ((ret == PORT_STATUS_CMODE_100BASE_X) || -+ (ret == PORT_STATUS_CMODE_1000BASE_X) || -+ (ret == PORT_STATUS_CMODE_SGMII)) { -+ ret = mv88e6xxx_power_on_serdes(ds); -+ if (ret < 0) -+ goto abort; -+ } -+ } -+ - /* Port Control 2: don't force a good FCS, set the maximum frame size to - * 10240 bytes, enable secure 802.1q tags, don't discard tagged or - * untagged frames on this port, do a destination address lookup on all -diff --git a/drivers/net/dsa/mv88e6xxx.h b/drivers/net/dsa/mv88e6xxx.h -index ca08f91..adc7f0d 100644 ---- a/drivers/net/dsa/mv88e6xxx.h -+++ b/drivers/net/dsa/mv88e6xxx.h -@@ -28,6 +28,10 @@ - #define SMI_CMD_OP_45_READ_DATA_INC ((3 << 10) | SMI_CMD_BUSY) - #define SMI_DATA 0x01 - -+/* Fiber/SERDES Registers are located at SMI address F, page 1 */ -+#define REG_FIBER_SERDES 0x0f -+#define PAGE_FIBER_SERDES 0x01 -+ - #define REG_PORT(p) (0x10 + (p)) - #define PORT_STATUS 0x00 - #define PORT_STATUS_PAUSE_EN BIT(15) -@@ -45,6 +49,10 @@ - #define PORT_STATUS_MGMII BIT(6) /* 6185 */ - #define PORT_STATUS_TX_PAUSED BIT(5) - #define PORT_STATUS_FLOW_CTRL BIT(4) -+#define PORT_STATUS_CMODE_MASK 0x0f -+#define PORT_STATUS_CMODE_100BASE_X 0x8 -+#define PORT_STATUS_CMODE_1000BASE_X 0x9 -+#define PORT_STATUS_CMODE_SGMII 0xa - #define PORT_PCS_CTRL 0x01 - #define PORT_PCS_CTRL_RGMII_DELAY_RXCLK BIT(15) - #define PORT_PCS_CTRL_RGMII_DELAY_TXCLK BIT(14) --- -2.7.3 - diff --git a/0003-drm-i915-gen9-Cache-plane-data-rates-in-CRTC-state.patch b/0003-drm-i915-gen9-Cache-plane-data-rates-in-CRTC-state.patch new file mode 100644 index 000000000..9a9366c1c --- /dev/null +++ b/0003-drm-i915-gen9-Cache-plane-data-rates-in-CRTC-state.patch @@ -0,0 +1,214 @@ +From 0206aec944641c69815562407b73b6f9df22f041 Mon Sep 17 00:00:00 2001 +From: Fedora Kernel Team +Date: Mon, 20 Jun 2016 11:13:09 +0200 +Subject: [PATCH 03/17] drm/i915/gen9: Cache plane data rates in CRTC state + +Upstream: since drm-intel-next-2016-05-22 +commit a1de91e5f3039dfc32ac2b77ffb280a68646cbc7 + +Author: Matt Roper +AuthorDate: Thu May 12 07:05:57 2016 -0700 +Commit: Matt Roper +CommitDate: Fri May 13 07:32:35 2016 -0700 + + drm/i915/gen9: Cache plane data rates in CRTC state + + This will be important when we start calculating CRTC data rates for + in-flight CRTC states since it will allow us to calculate the total data + rate without needing to grab the plane state for any planes that aren't + updated by the transaction. + + Signed-off-by: Matt Roper + Reviewed-by: Maarten Lankhorst + Link: http://patchwork.freedesktop.org/patch/msgid/1463061971-19638-4-git-send-email-matthew.d.roper@intel.com +--- + drivers/gpu/drm/i915/intel_drv.h | 4 ++ + drivers/gpu/drm/i915/intel_pm.c | 92 ++++++++++++++++++++++++++-------------- + 2 files changed, 63 insertions(+), 33 deletions(-) + +diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h +index 7d19baf..7c00ab6 100644 +--- a/drivers/gpu/drm/i915/intel_drv.h ++++ b/drivers/gpu/drm/i915/intel_drv.h +@@ -385,6 +385,10 @@ struct intel_crtc_wm_state { + struct { + /* gen9+ only needs 1-step wm programming */ + struct skl_pipe_wm optimal; ++ ++ /* cached plane data rate */ ++ unsigned plane_data_rate[I915_MAX_PLANES]; ++ unsigned plane_y_data_rate[I915_MAX_PLANES]; + } skl; + }; + +diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c +index 8f081b2..854f0a4 100644 +--- a/drivers/gpu/drm/i915/intel_pm.c ++++ b/drivers/gpu/drm/i915/intel_pm.c +@@ -2879,6 +2879,14 @@ skl_plane_relative_data_rate(const struct intel_crtc_state *cstate, + struct intel_plane_state *intel_pstate = to_intel_plane_state(pstate); + struct drm_framebuffer *fb = pstate->fb; + uint32_t width = 0, height = 0; ++ unsigned format = fb ? fb->pixel_format : DRM_FORMAT_XRGB8888; ++ ++ if (!intel_pstate->visible) ++ return 0; ++ if (pstate->plane->type == DRM_PLANE_TYPE_CURSOR) ++ return 0; ++ if (y && format != DRM_FORMAT_NV12) ++ return 0; + + width = drm_rect_width(&intel_pstate->src) >> 16; + height = drm_rect_height(&intel_pstate->src) >> 16; +@@ -2887,17 +2895,17 @@ skl_plane_relative_data_rate(const struct intel_crtc_state *cstate, + swap(width, height); + + /* for planar format */ +- if (fb->pixel_format == DRM_FORMAT_NV12) { ++ if (format == DRM_FORMAT_NV12) { + if (y) /* y-plane data rate */ + return width * height * +- drm_format_plane_cpp(fb->pixel_format, 0); ++ drm_format_plane_cpp(format, 0); + else /* uv-plane data rate */ + return (width / 2) * (height / 2) * +- drm_format_plane_cpp(fb->pixel_format, 1); ++ drm_format_plane_cpp(format, 1); + } + + /* for packed formats */ +- return width * height * drm_format_plane_cpp(fb->pixel_format, 0); ++ return width * height * drm_format_plane_cpp(format, 0); + } + + /* +@@ -2906,32 +2914,34 @@ skl_plane_relative_data_rate(const struct intel_crtc_state *cstate, + * 3 * 4096 * 8192 * 4 < 2^32 + */ + static unsigned int +-skl_get_total_relative_data_rate(const struct intel_crtc_state *cstate) ++skl_get_total_relative_data_rate(struct intel_crtc_state *cstate) + { + struct intel_crtc *intel_crtc = to_intel_crtc(cstate->base.crtc); + struct drm_device *dev = intel_crtc->base.dev; + const struct intel_plane *intel_plane; +- unsigned int total_data_rate = 0; ++ unsigned int rate, total_data_rate = 0; + ++ /* Calculate and cache data rate for each plane */ + for_each_intel_plane_on_crtc(dev, intel_crtc, intel_plane) { + const struct drm_plane_state *pstate = intel_plane->base.state; ++ int id = skl_wm_plane_id(intel_plane); + +- if (pstate->fb == NULL) +- continue; ++ /* packed/uv */ ++ rate = skl_plane_relative_data_rate(cstate, pstate, 0); ++ cstate->wm.skl.plane_data_rate[id] = rate; + +- if (intel_plane->base.type == DRM_PLANE_TYPE_CURSOR) +- continue; ++ /* y-plane */ ++ rate = skl_plane_relative_data_rate(cstate, pstate, 1); ++ cstate->wm.skl.plane_y_data_rate[id] = rate; ++ } + +- /* packed/uv */ +- total_data_rate += skl_plane_relative_data_rate(cstate, +- pstate, +- 0); ++ /* Calculate CRTC's total data rate from cached values */ ++ for_each_intel_plane_on_crtc(dev, intel_crtc, intel_plane) { ++ int id = skl_wm_plane_id(intel_plane); + +- if (pstate->fb->pixel_format == DRM_FORMAT_NV12) +- /* y-plane */ +- total_data_rate += skl_plane_relative_data_rate(cstate, +- pstate, +- 1); ++ /* packed/uv */ ++ total_data_rate += cstate->wm.skl.plane_data_rate[id]; ++ total_data_rate += cstate->wm.skl.plane_y_data_rate[id]; + } + + return total_data_rate; +@@ -2995,6 +3005,8 @@ skl_allocate_pipe_ddb(struct intel_crtc_state *cstate, + * FIXME: we may not allocate every single block here. + */ + total_data_rate = skl_get_total_relative_data_rate(cstate); ++ if (total_data_rate == 0) ++ return; + + start = alloc->start; + for_each_intel_plane_on_crtc(dev, intel_crtc, intel_plane) { +@@ -3009,7 +3021,7 @@ skl_allocate_pipe_ddb(struct intel_crtc_state *cstate, + if (plane->type == DRM_PLANE_TYPE_CURSOR) + continue; + +- data_rate = skl_plane_relative_data_rate(cstate, pstate, 0); ++ data_rate = cstate->wm.skl.plane_data_rate[id]; + + /* + * allocation for (packed formats) or (uv-plane part of planar format): +@@ -3028,20 +3040,16 @@ skl_allocate_pipe_ddb(struct intel_crtc_state *cstate, + /* + * allocation for y_plane part of planar format: + */ +- if (pstate->fb->pixel_format == DRM_FORMAT_NV12) { +- y_data_rate = skl_plane_relative_data_rate(cstate, +- pstate, +- 1); +- y_plane_blocks = y_minimum[id]; +- y_plane_blocks += div_u64((uint64_t)alloc_size * y_data_rate, +- total_data_rate); +- +- ddb->y_plane[pipe][id].start = start; +- ddb->y_plane[pipe][id].end = start + y_plane_blocks; +- +- start += y_plane_blocks; +- } ++ y_data_rate = cstate->wm.skl.plane_y_data_rate[id]; ++ ++ y_plane_blocks = y_minimum[id]; ++ y_plane_blocks += div_u64((uint64_t)alloc_size * y_data_rate, ++ total_data_rate); + ++ ddb->y_plane[pipe][id].start = start; ++ ddb->y_plane[pipe][id].end = start + y_plane_blocks; ++ ++ start += y_plane_blocks; + } + + } +@@ -3820,10 +3828,28 @@ void skl_wm_get_hw_state(struct drm_device *dev) + struct drm_i915_private *dev_priv = dev->dev_private; + struct skl_ddb_allocation *ddb = &dev_priv->wm.skl_hw.ddb; + struct drm_crtc *crtc; ++ struct intel_crtc *intel_crtc; + + skl_ddb_get_hw_state(dev_priv, ddb); + list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) + skl_pipe_wm_get_hw_state(crtc); ++ ++ /* Calculate plane data rates */ ++ for_each_intel_crtc(dev, intel_crtc) { ++ struct intel_crtc_state *cstate = intel_crtc->config; ++ struct intel_plane *intel_plane; ++ ++ for_each_intel_plane_on_crtc(dev, intel_crtc, intel_plane) { ++ const struct drm_plane_state *pstate = ++ intel_plane->base.state; ++ int id = skl_wm_plane_id(intel_plane); ++ ++ cstate->wm.skl.plane_data_rate[id] = ++ skl_plane_relative_data_rate(cstate, pstate, 0); ++ cstate->wm.skl.plane_y_data_rate[id] = ++ skl_plane_relative_data_rate(cstate, pstate, 1); ++ } ++ } + } + + static void ilk_pipe_wm_get_hw_state(struct drm_crtc *crtc) +-- +2.7.4 + diff --git a/0003-drm-nouveau-disp-sor-gf119-both-links-use-the-same-t.patch b/0003-drm-nouveau-disp-sor-gf119-both-links-use-the-same-t.patch new file mode 100644 index 000000000..b93bdff17 --- /dev/null +++ b/0003-drm-nouveau-disp-sor-gf119-both-links-use-the-same-t.patch @@ -0,0 +1,46 @@ +From de35f524e89daf8862d49724b9045f9254bfdfea Mon Sep 17 00:00:00 2001 +From: Fedora Kernel Team +Date: Mon, 20 Jun 2016 14:52:01 +0200 +Subject: [PATCH 3/6] drm/nouveau/disp/sor/gf119: both links use the same + training register + +Upstream: drm-fixes for 4.7 (and cc'd 4.6-stable) +commit a8953c52b95167b5d21a66f0859751570271d834 + +Author: Ben Skeggs +AuthorDate: Fri Jun 3 14:37:40 2016 +1000 +Commit: Ben Skeggs +CommitDate: Tue Jun 7 08:11:14 2016 +1000 + + drm/nouveau/disp/sor/gf119: both links use the same training register + + It appears that, for whatever reason, both link A and B use the same + register to control the training pattern. It's a little odd, as the + GPUs before this (Tesla/Fermi1) have per-link registers, as do newer + GPUs (Maxwell). + + Fixes the third DP output on NVS 510 (GK107). + + Signed-off-by: Ben Skeggs + Cc: stable@vger.kernel.org +--- + drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgf119.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgf119.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgf119.c +index b4b41b1..5111560 100644 +--- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgf119.c ++++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgf119.c +@@ -40,8 +40,7 @@ static int + gf119_sor_dp_pattern(struct nvkm_output_dp *outp, int pattern) + { + struct nvkm_device *device = outp->base.disp->engine.subdev.device; +- const u32 loff = gf119_sor_loff(outp); +- nvkm_mask(device, 0x61c110 + loff, 0x0f0f0f0f, 0x01010101 * pattern); ++ nvkm_mask(device, 0x61c110, 0x0f0f0f0f, 0x01010101 * pattern); + return 0; + } + +-- +2.7.4 + diff --git a/0004-drm-i915-gen9-Allow-calculation-of-data-rate-for-in-.patch b/0004-drm-i915-gen9-Allow-calculation-of-data-rate-for-in-.patch new file mode 100644 index 000000000..3a2b0aa1c --- /dev/null +++ b/0004-drm-i915-gen9-Allow-calculation-of-data-rate-for-in-.patch @@ -0,0 +1,141 @@ +From a75a3c793e2cd3e7648597f2c77d87453f520f31 Mon Sep 17 00:00:00 2001 +From: Fedora Kernel Team +Date: Mon, 20 Jun 2016 11:13:23 +0200 +Subject: [PATCH 04/17] drm/i915/gen9: Allow calculation of data rate for + in-flight state (v2) + +Upstream: since drm-intel-next-2016-05-22 +commit 9c74d82621c553f0da1f41bd5d90f5eab5659fdb + +Author: Matt Roper +AuthorDate: Thu May 12 07:05:58 2016 -0700 +Commit: Matt Roper +CommitDate: Fri May 13 07:32:49 2016 -0700 + + drm/i915/gen9: Allow calculation of data rate for in-flight state (v2) + + Our skl_get_total_relative_data_rate() function gets passed a crtc state + object to calculate the data rate for, but it currently always looks + up the committed plane states that correspond to that CRTC. Let's + check whether the CRTC state is an in-flight state (meaning + cstate->state is non-NULL) and if so, use the corresponding in-flight + plane states. + + We'll soon be using this function exclusively for in-flight states; at + that time we'll be able to simplify the function a bit, but for now we + allow it to be used in either mode. + + v2: + - Rebase on top of changes to cache plane data rates. + + Signed-off-by: Matt Roper + Reviewed-by: Maarten Lankhorst + Link: http://patchwork.freedesktop.org/patch/msgid/1463061971-19638-5-git-send-email-matthew.d.roper@intel.com +--- + drivers/gpu/drm/i915/intel_pm.c | 74 +++++++++++++++++++++++++++++++++-------- + 1 file changed, 60 insertions(+), 14 deletions(-) + +diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c +index 854f0a4..b863bfc 100644 +--- a/drivers/gpu/drm/i915/intel_pm.c ++++ b/drivers/gpu/drm/i915/intel_pm.c +@@ -2914,25 +2914,69 @@ skl_plane_relative_data_rate(const struct intel_crtc_state *cstate, + * 3 * 4096 * 8192 * 4 < 2^32 + */ + static unsigned int +-skl_get_total_relative_data_rate(struct intel_crtc_state *cstate) ++skl_get_total_relative_data_rate(struct intel_crtc_state *intel_cstate) + { +- struct intel_crtc *intel_crtc = to_intel_crtc(cstate->base.crtc); +- struct drm_device *dev = intel_crtc->base.dev; ++ struct drm_crtc_state *cstate = &intel_cstate->base; ++ struct drm_atomic_state *state = cstate->state; ++ struct drm_crtc *crtc = cstate->crtc; ++ struct drm_device *dev = crtc->dev; ++ struct intel_crtc *intel_crtc = to_intel_crtc(crtc); + const struct intel_plane *intel_plane; + unsigned int rate, total_data_rate = 0; ++ int id; + + /* Calculate and cache data rate for each plane */ +- for_each_intel_plane_on_crtc(dev, intel_crtc, intel_plane) { +- const struct drm_plane_state *pstate = intel_plane->base.state; +- int id = skl_wm_plane_id(intel_plane); ++ /* ++ * FIXME: At the moment this function can be called on either an ++ * in-flight or a committed state object. If it's in-flight then we ++ * only want to re-calculate the plane data rate for planes that are ++ * part of the transaction (i.e., we don't want to grab any additional ++ * plane states if we don't have to). If we're operating on committed ++ * state, we'll just go ahead and recalculate the plane data rate for ++ * all planes. ++ * ++ * Once we finish moving our DDB allocation to the atomic check phase, ++ * we'll only be calling this function on in-flight state objects, so ++ * the 'else' branch here will go away. ++ */ ++ if (state) { ++ struct drm_plane *plane; ++ struct drm_plane_state *pstate; ++ int i; ++ ++ for_each_plane_in_state(state, plane, pstate, i) { ++ intel_plane = to_intel_plane(plane); ++ id = skl_wm_plane_id(intel_plane); ++ ++ if (intel_plane->pipe != intel_crtc->pipe) ++ continue; ++ ++ /* packed/uv */ ++ rate = skl_plane_relative_data_rate(intel_cstate, ++ pstate, 0); ++ intel_cstate->wm.skl.plane_data_rate[id] = rate; ++ ++ /* y-plane */ ++ rate = skl_plane_relative_data_rate(intel_cstate, ++ pstate, 1); ++ intel_cstate->wm.skl.plane_y_data_rate[id] = rate; ++ } ++ } else { ++ for_each_intel_plane_on_crtc(dev, intel_crtc, intel_plane) { ++ const struct drm_plane_state *pstate = ++ intel_plane->base.state; ++ int id = skl_wm_plane_id(intel_plane); + +- /* packed/uv */ +- rate = skl_plane_relative_data_rate(cstate, pstate, 0); +- cstate->wm.skl.plane_data_rate[id] = rate; ++ /* packed/uv */ ++ rate = skl_plane_relative_data_rate(intel_cstate, ++ pstate, 0); ++ intel_cstate->wm.skl.plane_data_rate[id] = rate; + +- /* y-plane */ +- rate = skl_plane_relative_data_rate(cstate, pstate, 1); +- cstate->wm.skl.plane_y_data_rate[id] = rate; ++ /* y-plane */ ++ rate = skl_plane_relative_data_rate(intel_cstate, ++ pstate, 1); ++ intel_cstate->wm.skl.plane_y_data_rate[id] = rate; ++ } + } + + /* Calculate CRTC's total data rate from cached values */ +@@ -2940,10 +2984,12 @@ skl_get_total_relative_data_rate(struct intel_crtc_state *cstate) + int id = skl_wm_plane_id(intel_plane); + + /* packed/uv */ +- total_data_rate += cstate->wm.skl.plane_data_rate[id]; +- total_data_rate += cstate->wm.skl.plane_y_data_rate[id]; ++ total_data_rate += intel_cstate->wm.skl.plane_data_rate[id]; ++ total_data_rate += intel_cstate->wm.skl.plane_y_data_rate[id]; + } + ++ WARN_ON(cstate->plane_mask && total_data_rate == 0); ++ + return total_data_rate; + } + +-- +2.7.4 + diff --git a/0004-drm-nouveau-disp-sor-gm107-training-pattern-register.patch b/0004-drm-nouveau-disp-sor-gm107-training-pattern-register.patch new file mode 100644 index 000000000..a0b6171d8 --- /dev/null +++ b/0004-drm-nouveau-disp-sor-gm107-training-pattern-register.patch @@ -0,0 +1,195 @@ +From eb4668302adce316f53896b0fd8144ffe380a3ad Mon Sep 17 00:00:00 2001 +From: Fedora Kernel Team +Date: Mon, 20 Jun 2016 14:52:06 +0200 +Subject: [PATCH 4/6] drm/nouveau/disp/sor/gm107: training pattern registers + are like gm200 + +Upstream: drm-fixes for 4.7 (and cc'd 4.6-stable) +commit 4691409b3e2250ed66aa8dcefa23fe765daf7add + +Author: Ben Skeggs +AuthorDate: Fri Jun 3 15:05:52 2016 +1000 +Commit: Ben Skeggs +CommitDate: Tue Jun 7 08:11:25 2016 +1000 + + drm/nouveau/disp/sor/gm107: training pattern registers are like gm200 + + Signed-off-by: Ben Skeggs + Cc: stable@vger.kernel.org +--- + drivers/gpu/drm/nouveau/nvkm/engine/disp/Kbuild | 1 + + drivers/gpu/drm/nouveau/nvkm/engine/disp/gm107.c | 2 +- + drivers/gpu/drm/nouveau/nvkm/engine/disp/outpdp.h | 9 +++- + .../gpu/drm/nouveau/nvkm/engine/disp/sorgf119.c | 2 +- + .../nvkm/engine/disp/{gm107.c => sorgm107.c} | 50 +++++++++++----------- + .../gpu/drm/nouveau/nvkm/engine/disp/sorgm200.c | 15 +------ + 6 files changed, 36 insertions(+), 43 deletions(-) + copy drivers/gpu/drm/nouveau/nvkm/engine/disp/{gm107.c => sorgm107.c} (55%) + +diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/Kbuild b/drivers/gpu/drm/nouveau/nvkm/engine/disp/Kbuild +index a74c5dd..e2a64ed 100644 +--- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/Kbuild ++++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/Kbuild +@@ -18,6 +18,7 @@ nvkm-y += nvkm/engine/disp/piornv50.o + nvkm-y += nvkm/engine/disp/sornv50.o + nvkm-y += nvkm/engine/disp/sorg94.o + nvkm-y += nvkm/engine/disp/sorgf119.o ++nvkm-y += nvkm/engine/disp/sorgm107.o + nvkm-y += nvkm/engine/disp/sorgm200.o + nvkm-y += nvkm/engine/disp/dport.o + +diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/gm107.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/gm107.c +index b694414..f4b9cf8 100644 +--- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/gm107.c ++++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/gm107.c +@@ -36,7 +36,7 @@ gm107_disp = { + .outp.internal.crt = nv50_dac_output_new, + .outp.internal.tmds = nv50_sor_output_new, + .outp.internal.lvds = nv50_sor_output_new, +- .outp.internal.dp = gf119_sor_dp_new, ++ .outp.internal.dp = gm107_sor_dp_new, + .dac.nr = 3, + .dac.power = nv50_dac_power, + .dac.sense = nv50_dac_sense, +diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/outpdp.h b/drivers/gpu/drm/nouveau/nvkm/engine/disp/outpdp.h +index e9067ba..4e983f6 100644 +--- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/outpdp.h ++++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/outpdp.h +@@ -62,7 +62,12 @@ int g94_sor_dp_lnk_pwr(struct nvkm_output_dp *, int); + int gf119_sor_dp_new(struct nvkm_disp *, int, struct dcb_output *, + struct nvkm_output **); + int gf119_sor_dp_lnk_ctl(struct nvkm_output_dp *, int, int, bool); ++int gf119_sor_dp_drv_ctl(struct nvkm_output_dp *, int, int, int, int); + +-int gm200_sor_dp_new(struct nvkm_disp *, int, struct dcb_output *, +- struct nvkm_output **); ++int gm107_sor_dp_new(struct nvkm_disp *, int, struct dcb_output *, ++ struct nvkm_output **); ++int gm107_sor_dp_pattern(struct nvkm_output_dp *, int); ++ ++int gm200_sor_dp_new(struct nvkm_disp *, int, struct dcb_output *, ++ struct nvkm_output **); + #endif +diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgf119.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgf119.c +index 5111560..22706c0 100644 +--- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgf119.c ++++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgf119.c +@@ -63,7 +63,7 @@ gf119_sor_dp_lnk_ctl(struct nvkm_output_dp *outp, int nr, int bw, bool ef) + return 0; + } + +-static int ++int + gf119_sor_dp_drv_ctl(struct nvkm_output_dp *outp, + int ln, int vs, int pe, int pc) + { +diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/gm107.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgm107.c +similarity index 55% +copy from drivers/gpu/drm/nouveau/nvkm/engine/disp/gm107.c +copy to drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgm107.c +index b694414..37790b2 100644 +--- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/gm107.c ++++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgm107.c +@@ -1,5 +1,5 @@ + /* +- * Copyright 2012 Red Hat Inc. ++ * Copyright 2016 Red Hat Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), +@@ -19,35 +19,35 @@ + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + * +- * Authors: Ben Skeggs ++ * Authors: Ben Skeggs + */ + #include "nv50.h" +-#include "rootnv50.h" ++#include "outpdp.h" + +-static const struct nv50_disp_func +-gm107_disp = { +- .intr = gf119_disp_intr, +- .uevent = &gf119_disp_chan_uevent, +- .super = gf119_disp_intr_supervisor, +- .root = &gm107_disp_root_oclass, +- .head.vblank_init = gf119_disp_vblank_init, +- .head.vblank_fini = gf119_disp_vblank_fini, +- .head.scanoutpos = gf119_disp_root_scanoutpos, +- .outp.internal.crt = nv50_dac_output_new, +- .outp.internal.tmds = nv50_sor_output_new, +- .outp.internal.lvds = nv50_sor_output_new, +- .outp.internal.dp = gf119_sor_dp_new, +- .dac.nr = 3, +- .dac.power = nv50_dac_power, +- .dac.sense = nv50_dac_sense, +- .sor.nr = 4, +- .sor.power = nv50_sor_power, +- .sor.hda_eld = gf119_hda_eld, +- .sor.hdmi = gk104_hdmi_ctrl, ++int ++gm107_sor_dp_pattern(struct nvkm_output_dp *outp, int pattern) ++{ ++ struct nvkm_device *device = outp->base.disp->engine.subdev.device; ++ const u32 soff = outp->base.or * 0x800; ++ const u32 data = 0x01010101 * pattern; ++ if (outp->base.info.sorconf.link & 1) ++ nvkm_mask(device, 0x61c110 + soff, 0x0f0f0f0f, data); ++ else ++ nvkm_mask(device, 0x61c12c + soff, 0x0f0f0f0f, data); ++ return 0; ++} ++ ++static const struct nvkm_output_dp_func ++gm107_sor_dp_func = { ++ .pattern = gm107_sor_dp_pattern, ++ .lnk_pwr = g94_sor_dp_lnk_pwr, ++ .lnk_ctl = gf119_sor_dp_lnk_ctl, ++ .drv_ctl = gf119_sor_dp_drv_ctl, + }; + + int +-gm107_disp_new(struct nvkm_device *device, int index, struct nvkm_disp **pdisp) ++gm107_sor_dp_new(struct nvkm_disp *disp, int index, ++ struct dcb_output *dcbE, struct nvkm_output **poutp) + { +- return gf119_disp_new_(&gm107_disp, device, index, pdisp); ++ return nvkm_output_dp_new_(&gm107_sor_dp_func, disp, index, dcbE, poutp); + } +diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgm200.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgm200.c +index 2cfbef9..c44fa7e 100644 +--- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgm200.c ++++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgm200.c +@@ -57,19 +57,6 @@ gm200_sor_dp_lane_map(struct nvkm_device *device, u8 lane) + } + + static int +-gm200_sor_dp_pattern(struct nvkm_output_dp *outp, int pattern) +-{ +- struct nvkm_device *device = outp->base.disp->engine.subdev.device; +- const u32 soff = gm200_sor_soff(outp); +- const u32 data = 0x01010101 * pattern; +- if (outp->base.info.sorconf.link & 1) +- nvkm_mask(device, 0x61c110 + soff, 0x0f0f0f0f, data); +- else +- nvkm_mask(device, 0x61c12c + soff, 0x0f0f0f0f, data); +- return 0; +-} +- +-static int + gm200_sor_dp_lnk_pwr(struct nvkm_output_dp *outp, int nr) + { + struct nvkm_device *device = outp->base.disp->engine.subdev.device; +@@ -129,7 +116,7 @@ gm200_sor_dp_drv_ctl(struct nvkm_output_dp *outp, + + static const struct nvkm_output_dp_func + gm200_sor_dp_func = { +- .pattern = gm200_sor_dp_pattern, ++ .pattern = gm107_sor_dp_pattern, + .lnk_pwr = gm200_sor_dp_lnk_pwr, + .lnk_ctl = gf119_sor_dp_lnk_ctl, + .drv_ctl = gm200_sor_dp_drv_ctl, +-- +2.7.4 + diff --git a/0005-drm-i915-gen9-Store-plane-minimum-blocks-in-CRTC-wm-.patch b/0005-drm-i915-gen9-Store-plane-minimum-blocks-in-CRTC-wm-.patch new file mode 100644 index 000000000..7b1fcb144 --- /dev/null +++ b/0005-drm-i915-gen9-Store-plane-minimum-blocks-in-CRTC-wm-.patch @@ -0,0 +1,67 @@ +From cd21ce996b94fd149b3487398e5250e9f0cc8811 Mon Sep 17 00:00:00 2001 +From: Fedora Kernel Team +Date: Mon, 20 Jun 2016 12:39:24 +0200 +Subject: [PATCH 05/17] drm/i915/gen9: Store plane minimum blocks in CRTC wm + state (v2) + +Upstream: since drm-intel-next-2016-05-22 +commit 86a2100a8b96594902bb59b90614377df4f64ce0 + +Author: Matt Roper +AuthorDate: Thu May 12 07:05:59 2016 -0700 +Commit: Matt Roper +CommitDate: Fri May 13 07:32:56 2016 -0700 + + drm/i915/gen9: Store plane minimum blocks in CRTC wm state (v2) + + This will eventually allow us to re-use old values without + re-calculating them for unchanged planes (which also helps us avoid + re-grabbing extra plane states). + + v2: + - Drop unnecessary memset's; they were meant for a later patch (which + got reworked anyway to not need them, but were mis-rebased into this + one. (Maarten) + + Cc: Maarten Lankhorst + Signed-off-by: Matt Roper + Reviewed-by: Maarten Lankhorst + Link: http://patchwork.freedesktop.org/patch/msgid/1463061971-19638-6-git-send-email-matthew.d.roper@intel.com +--- + drivers/gpu/drm/i915/intel_drv.h | 4 ++++ + drivers/gpu/drm/i915/intel_pm.c | 4 ++-- + 2 files changed, 6 insertions(+), 2 deletions(-) + +diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h +index 7c00ab6..d246308 100644 +--- a/drivers/gpu/drm/i915/intel_drv.h ++++ b/drivers/gpu/drm/i915/intel_drv.h +@@ -389,6 +389,10 @@ struct intel_crtc_wm_state { + /* cached plane data rate */ + unsigned plane_data_rate[I915_MAX_PLANES]; + unsigned plane_y_data_rate[I915_MAX_PLANES]; ++ ++ /* minimum block allocation */ ++ uint16_t minimum_blocks[I915_MAX_PLANES]; ++ uint16_t minimum_y_blocks[I915_MAX_PLANES]; + } skl; + }; + +diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c +index b863bfc..00db6e9 100644 +--- a/drivers/gpu/drm/i915/intel_pm.c ++++ b/drivers/gpu/drm/i915/intel_pm.c +@@ -3006,8 +3006,8 @@ skl_allocate_pipe_ddb(struct intel_crtc_state *cstate, + enum pipe pipe = intel_crtc->pipe; + struct skl_ddb_entry *alloc = &ddb->pipe[pipe]; + uint16_t alloc_size, start, cursor_blocks; +- uint16_t minimum[I915_MAX_PLANES]; +- uint16_t y_minimum[I915_MAX_PLANES]; ++ uint16_t *minimum = cstate->wm.skl.minimum_blocks; ++ uint16_t *y_minimum = cstate->wm.skl.minimum_y_blocks; + unsigned int total_data_rate; + + skl_ddb_get_pipe_allocation_limits(dev, cstate, config, alloc); +-- +2.7.4 + diff --git a/0005-i915-fbc-Disable-on-HSW-by-default-for-now.patch b/0005-i915-fbc-Disable-on-HSW-by-default-for-now.patch new file mode 100644 index 000000000..d95f2f4d0 --- /dev/null +++ b/0005-i915-fbc-Disable-on-HSW-by-default-for-now.patch @@ -0,0 +1,55 @@ +From 28d0147bded959b2c4d3eb1aa957452d5dbb0cc9 Mon Sep 17 00:00:00 2001 +From: Fedora Kernel Team +Date: Mon, 20 Jun 2016 14:52:10 +0200 +Subject: [PATCH 5/6] i915/fbc: Disable on HSW by default for now + +Upstream: posted on dri-devel (and r-b'd) + +Author: cpaul@redhat.com +AuthorDate: Thu Jun 9 11:58:15 2016 -0400 +Commit: Rob Clark +CommitDate: Thu Jun 9 15:43:07 2016 -0400 + + i915/fbc: Disable on HSW by default for now + + >From https://bugs.freedesktop.org/show_bug.cgi?id=96461 : + + This was kind of a difficult bug to track down. If you're using a + Haswell system running GNOME and you have fbc completely enabled and + working, playing videos can result in video artifacts. Steps to + reproduce: + + - Run GNOME + - Ensure FBC is enabled and active + - Download a movie, I used the ogg version of Big Buck Bunny for this + - Run `gst-launch-1.0 filesrc location='some_movie.ogg' ! decodebin ! + glimagesink` in a terminal + - Watch for about over a minute, you'll see small horizontal lines go + down the screen. + + For the time being, disable FBC for Haswell by default. + + Signed-off-by: Lyude + Reviewed-by: Paulo Zanoni + Cc: stable@vger.kernel.org +--- + drivers/gpu/drm/i915/intel_fbc.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/drivers/gpu/drm/i915/intel_fbc.c b/drivers/gpu/drm/i915/intel_fbc.c +index 0f0492f..28f4407 100644 +--- a/drivers/gpu/drm/i915/intel_fbc.c ++++ b/drivers/gpu/drm/i915/intel_fbc.c +@@ -823,8 +823,7 @@ static bool intel_fbc_can_choose(struct intel_crtc *crtc) + { + struct drm_i915_private *dev_priv = crtc->base.dev->dev_private; + struct intel_fbc *fbc = &dev_priv->fbc; +- bool enable_by_default = IS_HASWELL(dev_priv) || +- IS_BROADWELL(dev_priv); ++ bool enable_by_default = IS_BROADWELL(dev_priv); + + if (intel_vgpu_active(dev_priv->dev)) { + fbc->no_fbc_reason = "VGPU is active"; +-- +2.7.4 + diff --git a/0006-drm-i915-Track-whether-an-atomic-transaction-changes.patch b/0006-drm-i915-Track-whether-an-atomic-transaction-changes.patch new file mode 100644 index 000000000..7320abf6d --- /dev/null +++ b/0006-drm-i915-Track-whether-an-atomic-transaction-changes.patch @@ -0,0 +1,68 @@ +From 00edb23bcefa3ad6931f2a2855fe0801a55523f7 Mon Sep 17 00:00:00 2001 +From: Fedora Kernel Team +Date: Mon, 20 Jun 2016 12:39:40 +0200 +Subject: [PATCH 06/17] drm/i915: Track whether an atomic transaction changes + the active CRTC's + +Upstream: since drm-intel-next-2016-05-22 +commit 8b4a7d0597cd9910d7127ffae6ae91d21853a8a2 + +Author: Matt Roper +AuthorDate: Thu May 12 07:06:00 2016 -0700 +Commit: Matt Roper +CommitDate: Fri May 13 07:33:10 2016 -0700 + + drm/i915: Track whether an atomic transaction changes the active CRTC's + + For the purposes of DDB re-allocation we need to know whether a + transaction changes the list of CRTC's that are active. While + state->modeset could be used for this purpose, that would be slightly + too aggressive since it would lead us to re-allocate the DDB when a + CRTC's mode changes, but not its final active state. + + Signed-off-by: Matt Roper + Reviewed-by: Maarten Lankhorst + Link: http://patchwork.freedesktop.org/patch/msgid/1463061971-19638-7-git-send-email-matthew.d.roper@intel.com +--- + drivers/gpu/drm/i915/intel_display.c | 3 +++ + drivers/gpu/drm/i915/intel_drv.h | 10 ++++++++++ + 2 files changed, 13 insertions(+) + +diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c +index 7d855ba..f53df81 100644 +--- a/drivers/gpu/drm/i915/intel_display.c ++++ b/drivers/gpu/drm/i915/intel_display.c +@@ -13183,6 +13183,9 @@ static int intel_modeset_checks(struct drm_atomic_state *state) + intel_state->active_crtcs |= 1 << i; + else + intel_state->active_crtcs &= ~(1 << i); ++ ++ if (crtc_state->active != crtc->state->active) ++ intel_state->active_pipe_changes |= drm_crtc_mask(crtc); + } + + /* +diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h +index d246308..672ca56 100644 +--- a/drivers/gpu/drm/i915/intel_drv.h ++++ b/drivers/gpu/drm/i915/intel_drv.h +@@ -256,6 +256,16 @@ struct intel_atomic_state { + + bool dpll_set, modeset; + ++ /* ++ * Does this transaction change the pipes that are active? This mask ++ * tracks which CRTC's have changed their active state at the end of ++ * the transaction (not counting the temporary disable during modesets). ++ * This mask should only be non-zero when intel_state->modeset is true, ++ * but the converse is not necessarily true; simply changing a mode may ++ * not flip the final active status of any CRTC's ++ */ ++ unsigned int active_pipe_changes; ++ + unsigned int active_crtcs; + unsigned int min_pixclk[I915_MAX_PIPES]; + +-- +2.7.4 + diff --git a/0007-drm-i915-gen9-Allow-skl_allocate_pipe_ddb-to-operate.patch b/0007-drm-i915-gen9-Allow-skl_allocate_pipe_ddb-to-operate.patch new file mode 100644 index 000000000..deb90fb01 --- /dev/null +++ b/0007-drm-i915-gen9-Allow-skl_allocate_pipe_ddb-to-operate.patch @@ -0,0 +1,352 @@ +From 99dd9c3733696d4a2536b21988c9b1b8f5195c5b Mon Sep 17 00:00:00 2001 +From: Fedora Kernel Team +Date: Mon, 20 Jun 2016 12:40:00 +0200 +Subject: [PATCH 07/17] drm/i915/gen9: Allow skl_allocate_pipe_ddb() to operate + on in-flight state (v3) + +Upstream: since drm-intel-next-2016-05-22 +commit c107acfeb03187873657ccc8af4fc5c704b3626b + +Author: Matt Roper +AuthorDate: Thu May 12 07:06:01 2016 -0700 +Commit: Matt Roper +CommitDate: Fri May 13 07:33:16 2016 -0700 + + drm/i915/gen9: Allow skl_allocate_pipe_ddb() to operate on in-flight state (v3) + + We eventually want to calculate watermark values at atomic 'check' time + instead of atomic 'commit' time so that any requested configurations + that result in impossible watermark requirements are properly rejected. + The first step along this path is to allocate the DDB at atomic 'check' + time. As we perform this transition, allow the main allocation function + to operate successfully on either an in-flight state or an + already-commited state. Once we complete the transition in a future + patch, we'll come back and remove the unnecessary logic for the + already-committed case. + + v2: Rebase/refactor; we should no longer need to grab extra plane states + while allocating the DDB since we can pull cached data rates and + minimum block counts from the CRTC state for any planes that aren't + being modified by this transaction. + + v3: + - Simplify memsets to clear DDB plane entries. (Maarten) + - Drop a redundant memset of plane[pipe][PLANE_CURSOR] that was added + by an earlier Coccinelle patch. (Maarten) + - Assign *num_active at the top of skl_ddb_get_pipe_allocation_limits() + so that no code paths return without setting it. (kbuild robot) + + Cc: Maarten Lankhorst + Signed-off-by: Matt Roper + Reviewed-by: Maarten Lankhorst + Link: http://patchwork.freedesktop.org/patch/msgid/1463061971-19638-8-git-send-email-matthew.d.roper@intel.com +--- + drivers/gpu/drm/i915/i915_drv.h | 6 ++ + drivers/gpu/drm/i915/intel_pm.c | 179 +++++++++++++++++++++++++++++----------- + 2 files changed, 139 insertions(+), 46 deletions(-) + +diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h +index daba7eb..804af6f 100644 +--- a/drivers/gpu/drm/i915/i915_drv.h ++++ b/drivers/gpu/drm/i915/i915_drv.h +@@ -281,6 +281,12 @@ struct i915_hotplug { + &dev->mode_config.plane_list, \ + base.head) + ++#define for_each_intel_plane_mask(dev, intel_plane, plane_mask) \ ++ list_for_each_entry(intel_plane, &dev->mode_config.plane_list, \ ++ base.head) \ ++ for_each_if ((plane_mask) & \ ++ (1 << drm_plane_index(&intel_plane->base))) ++ + #define for_each_intel_plane_on_crtc(dev, intel_crtc, intel_plane) \ + list_for_each_entry(intel_plane, \ + &(dev)->mode_config.plane_list, \ +diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c +index 00db6e9..ee82b1f 100644 +--- a/drivers/gpu/drm/i915/intel_pm.c ++++ b/drivers/gpu/drm/i915/intel_pm.c +@@ -2788,13 +2788,25 @@ skl_wm_plane_id(const struct intel_plane *plane) + static void + skl_ddb_get_pipe_allocation_limits(struct drm_device *dev, + const struct intel_crtc_state *cstate, +- const struct intel_wm_config *config, +- struct skl_ddb_entry *alloc /* out */) ++ struct intel_wm_config *config, ++ struct skl_ddb_entry *alloc, /* out */ ++ int *num_active /* out */) + { ++ struct drm_atomic_state *state = cstate->base.state; ++ struct intel_atomic_state *intel_state = to_intel_atomic_state(state); ++ struct drm_i915_private *dev_priv = to_i915(dev); + struct drm_crtc *for_crtc = cstate->base.crtc; + struct drm_crtc *crtc; + unsigned int pipe_size, ddb_size; + int nth_active_pipe; ++ int pipe = to_intel_crtc(for_crtc)->pipe; ++ ++ if (intel_state && intel_state->active_pipe_changes) ++ *num_active = hweight32(intel_state->active_crtcs); ++ else if (intel_state) ++ *num_active = hweight32(dev_priv->active_crtcs); ++ else ++ *num_active = config->num_pipes_active; + + if (!cstate->base.active) { + alloc->start = 0; +@@ -2809,25 +2821,56 @@ skl_ddb_get_pipe_allocation_limits(struct drm_device *dev, + + ddb_size -= 4; /* 4 blocks for bypass path allocation */ + +- nth_active_pipe = 0; +- for_each_crtc(dev, crtc) { +- if (!to_intel_crtc(crtc)->active) +- continue; ++ /* ++ * FIXME: At the moment we may be called on either in-flight or fully ++ * committed cstate's. Once we fully move DDB allocation in the check ++ * phase, we'll only be called on in-flight states and the 'else' ++ * branch here will go away. ++ * ++ * The 'else' branch is slightly racy here, but it was racy to begin ++ * with; since it's going away soon, no effort is made to address that. ++ */ ++ if (state) { ++ /* ++ * If the state doesn't change the active CRTC's, then there's ++ * no need to recalculate; the existing pipe allocation limits ++ * should remain unchanged. Note that we're safe from racing ++ * commits since any racing commit that changes the active CRTC ++ * list would need to grab _all_ crtc locks, including the one ++ * we currently hold. ++ */ ++ if (!intel_state->active_pipe_changes) { ++ *alloc = dev_priv->wm.skl_hw.ddb.pipe[pipe]; ++ return; ++ } + +- if (crtc == for_crtc) +- break; ++ nth_active_pipe = hweight32(intel_state->active_crtcs & ++ (drm_crtc_mask(for_crtc) - 1)); ++ pipe_size = ddb_size / hweight32(intel_state->active_crtcs); ++ alloc->start = nth_active_pipe * ddb_size / *num_active; ++ alloc->end = alloc->start + pipe_size; ++ } else { ++ nth_active_pipe = 0; ++ for_each_crtc(dev, crtc) { ++ if (!to_intel_crtc(crtc)->active) ++ continue; + +- nth_active_pipe++; +- } ++ if (crtc == for_crtc) ++ break; ++ ++ nth_active_pipe++; ++ } + +- pipe_size = ddb_size / config->num_pipes_active; +- alloc->start = nth_active_pipe * ddb_size / config->num_pipes_active; +- alloc->end = alloc->start + pipe_size; ++ pipe_size = ddb_size / config->num_pipes_active; ++ alloc->start = nth_active_pipe * ddb_size / ++ config->num_pipes_active; ++ alloc->end = alloc->start + pipe_size; ++ } + } + +-static unsigned int skl_cursor_allocation(const struct intel_wm_config *config) ++static unsigned int skl_cursor_allocation(int num_active) + { +- if (config->num_pipes_active == 1) ++ if (num_active == 1) + return 32; + + return 8; +@@ -2993,33 +3036,44 @@ skl_get_total_relative_data_rate(struct intel_crtc_state *intel_cstate) + return total_data_rate; + } + +-static void ++static int + skl_allocate_pipe_ddb(struct intel_crtc_state *cstate, + struct skl_ddb_allocation *ddb /* out */) + { ++ struct drm_atomic_state *state = cstate->base.state; + struct drm_crtc *crtc = cstate->base.crtc; + struct drm_device *dev = crtc->dev; + struct drm_i915_private *dev_priv = to_i915(dev); + struct intel_wm_config *config = &dev_priv->wm.config; + struct intel_crtc *intel_crtc = to_intel_crtc(crtc); + struct intel_plane *intel_plane; ++ struct drm_plane *plane; ++ struct drm_plane_state *pstate; + enum pipe pipe = intel_crtc->pipe; + struct skl_ddb_entry *alloc = &ddb->pipe[pipe]; + uint16_t alloc_size, start, cursor_blocks; + uint16_t *minimum = cstate->wm.skl.minimum_blocks; + uint16_t *y_minimum = cstate->wm.skl.minimum_y_blocks; + unsigned int total_data_rate; ++ int num_active; ++ int id, i; ++ ++ if (!cstate->base.active) { ++ ddb->pipe[pipe].start = ddb->pipe[pipe].end = 0; ++ memset(ddb->plane[pipe], 0, sizeof(ddb->plane[pipe])); ++ memset(ddb->y_plane[pipe], 0, sizeof(ddb->y_plane[pipe])); ++ return 0; ++ } + +- skl_ddb_get_pipe_allocation_limits(dev, cstate, config, alloc); ++ skl_ddb_get_pipe_allocation_limits(dev, cstate, config, alloc, ++ &num_active); + alloc_size = skl_ddb_entry_size(alloc); + if (alloc_size == 0) { + memset(ddb->plane[pipe], 0, sizeof(ddb->plane[pipe])); +- memset(&ddb->plane[pipe][PLANE_CURSOR], 0, +- sizeof(ddb->plane[pipe][PLANE_CURSOR])); +- return; ++ return 0; + } + +- cursor_blocks = skl_cursor_allocation(config); ++ cursor_blocks = skl_cursor_allocation(num_active); + ddb->plane[pipe][PLANE_CURSOR].start = alloc->end - cursor_blocks; + ddb->plane[pipe][PLANE_CURSOR].end = alloc->end; + +@@ -3027,21 +3081,55 @@ skl_allocate_pipe_ddb(struct intel_crtc_state *cstate, + alloc->end -= cursor_blocks; + + /* 1. Allocate the mininum required blocks for each active plane */ +- for_each_intel_plane_on_crtc(dev, intel_crtc, intel_plane) { +- struct drm_plane *plane = &intel_plane->base; +- struct drm_framebuffer *fb = plane->state->fb; +- int id = skl_wm_plane_id(intel_plane); ++ /* ++ * TODO: Remove support for already-committed state once we ++ * only allocate DDB on in-flight states. ++ */ ++ if (state) { ++ for_each_plane_in_state(state, plane, pstate, i) { ++ intel_plane = to_intel_plane(plane); ++ id = skl_wm_plane_id(intel_plane); + +- if (!to_intel_plane_state(plane->state)->visible) +- continue; ++ if (intel_plane->pipe != pipe) ++ continue; + +- if (plane->type == DRM_PLANE_TYPE_CURSOR) +- continue; ++ if (!to_intel_plane_state(pstate)->visible) { ++ minimum[id] = 0; ++ y_minimum[id] = 0; ++ continue; ++ } ++ if (plane->type == DRM_PLANE_TYPE_CURSOR) { ++ minimum[id] = 0; ++ y_minimum[id] = 0; ++ continue; ++ } + +- minimum[id] = 8; +- alloc_size -= minimum[id]; +- y_minimum[id] = (fb->pixel_format == DRM_FORMAT_NV12) ? 8 : 0; +- alloc_size -= y_minimum[id]; ++ minimum[id] = 8; ++ if (pstate->fb->pixel_format == DRM_FORMAT_NV12) ++ y_minimum[id] = 8; ++ else ++ y_minimum[id] = 0; ++ } ++ } else { ++ for_each_intel_plane_on_crtc(dev, intel_crtc, intel_plane) { ++ struct drm_plane *plane = &intel_plane->base; ++ struct drm_framebuffer *fb = plane->state->fb; ++ int id = skl_wm_plane_id(intel_plane); ++ ++ if (!to_intel_plane_state(plane->state)->visible) ++ continue; ++ ++ if (plane->type == DRM_PLANE_TYPE_CURSOR) ++ continue; ++ ++ minimum[id] = 8; ++ y_minimum[id] = (fb->pixel_format == DRM_FORMAT_NV12) ? 8 : 0; ++ } ++ } ++ ++ for (i = 0; i < PLANE_CURSOR; i++) { ++ alloc_size -= minimum[i]; ++ alloc_size -= y_minimum[i]; + } + + /* +@@ -3052,21 +3140,14 @@ skl_allocate_pipe_ddb(struct intel_crtc_state *cstate, + */ + total_data_rate = skl_get_total_relative_data_rate(cstate); + if (total_data_rate == 0) +- return; ++ return 0; + + start = alloc->start; + for_each_intel_plane_on_crtc(dev, intel_crtc, intel_plane) { +- struct drm_plane *plane = &intel_plane->base; +- struct drm_plane_state *pstate = intel_plane->base.state; + unsigned int data_rate, y_data_rate; + uint16_t plane_blocks, y_plane_blocks = 0; + int id = skl_wm_plane_id(intel_plane); + +- if (!to_intel_plane_state(pstate)->visible) +- continue; +- if (plane->type == DRM_PLANE_TYPE_CURSOR) +- continue; +- + data_rate = cstate->wm.skl.plane_data_rate[id]; + + /* +@@ -3078,8 +3159,11 @@ skl_allocate_pipe_ddb(struct intel_crtc_state *cstate, + plane_blocks += div_u64((uint64_t)alloc_size * data_rate, + total_data_rate); + +- ddb->plane[pipe][id].start = start; +- ddb->plane[pipe][id].end = start + plane_blocks; ++ /* Leave disabled planes at (0,0) */ ++ if (data_rate) { ++ ddb->plane[pipe][id].start = start; ++ ddb->plane[pipe][id].end = start + plane_blocks; ++ } + + start += plane_blocks; + +@@ -3092,12 +3176,15 @@ skl_allocate_pipe_ddb(struct intel_crtc_state *cstate, + y_plane_blocks += div_u64((uint64_t)alloc_size * y_data_rate, + total_data_rate); + +- ddb->y_plane[pipe][id].start = start; +- ddb->y_plane[pipe][id].end = start + y_plane_blocks; ++ if (y_data_rate) { ++ ddb->y_plane[pipe][id].start = start; ++ ddb->y_plane[pipe][id].end = start + y_plane_blocks; ++ } + + start += y_plane_blocks; + } + ++ return 0; + } + + static uint32_t skl_pipe_pixel_rate(const struct intel_crtc_state *config) +@@ -3588,7 +3675,7 @@ static bool skl_update_pipe_wm(struct drm_crtc *crtc, + struct intel_crtc *intel_crtc = to_intel_crtc(crtc); + struct intel_crtc_state *cstate = to_intel_crtc_state(crtc->state); + +- skl_allocate_pipe_ddb(cstate, ddb); ++ WARN_ON(skl_allocate_pipe_ddb(cstate, ddb) != 0); + skl_build_pipe_wm(cstate, ddb, pipe_wm); + + if (!memcmp(&intel_crtc->wm.active.skl, pipe_wm, sizeof(*pipe_wm))) +-- +2.7.4 + diff --git a/0008-drm-i915-Add-distrust_bios_wm-flag-to-dev_priv-v2.patch b/0008-drm-i915-Add-distrust_bios_wm-flag-to-dev_priv-v2.patch new file mode 100644 index 000000000..7a45a28a4 --- /dev/null +++ b/0008-drm-i915-Add-distrust_bios_wm-flag-to-dev_priv-v2.patch @@ -0,0 +1,94 @@ +From 0126336af286ea85c1137ad13882f8c93d74c6c3 Mon Sep 17 00:00:00 2001 +From: Fedora Kernel Team +Date: Mon, 20 Jun 2016 12:40:13 +0200 +Subject: [PATCH 08/17] drm/i915: Add distrust_bios_wm flag to dev_priv (v2) + +Upstream: since drm-intel-next-2016-05-22 +commit 279e99d76e6097ee7b531114777fa9b030496d81 + +Author: Matt Roper +AuthorDate: Thu May 12 07:06:02 2016 -0700 +Commit: Matt Roper +CommitDate: Fri May 13 07:33:54 2016 -0700 + + drm/i915: Add distrust_bios_wm flag to dev_priv (v2) + + SKL-style platforms can't fully trust the watermark/DDB settings + programmed by the BIOS and need to do extra sanitization on their first + atomic update. Add a flag to dev_priv that is set during hardware + readout and cleared at the end of the first commit. + + Note that for the somewhat common case where everything is turned off + when the driver starts up, we don't need to bother with a recompute...we + know exactly what the DDB should be (all zero's) so just setup the DDB + directly in that case. + + v2: + - Move clearing of distrust_bios_wm up below the swap_state call since + it's a more natural / self-explanatory location. (Maarten) + - Use dev_priv->active_crtcs to test whether any CRTC's are turned on + during HW WM readout rather than trying to count the active CRTC's + again ourselves. (Maarten) + + Cc: Maarten Lankhorst + Signed-off-by: Matt Roper + Reviewed-by: Maarten Lankhorst + Link: http://patchwork.freedesktop.org/patch/msgid/1463061971-19638-9-git-send-email-matthew.d.roper@intel.com +--- + drivers/gpu/drm/i915/i915_drv.h | 7 +++++++ + drivers/gpu/drm/i915/intel_display.c | 1 + + drivers/gpu/drm/i915/intel_pm.c | 8 ++++++++ + 3 files changed, 16 insertions(+) + +diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h +index 804af6f..ae7932a 100644 +--- a/drivers/gpu/drm/i915/i915_drv.h ++++ b/drivers/gpu/drm/i915/i915_drv.h +@@ -1986,6 +1986,13 @@ struct drm_i915_private { + }; + + uint8_t max_level; ++ ++ /* ++ * Set during HW readout of watermarks/DDB. Some platforms ++ * need to know when we're still using BIOS-provided values ++ * (which we don't fully trust). ++ */ ++ bool distrust_bios_wm; + } wm; + + struct i915_runtime_pm pm; +diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c +index f53df81..786f3d9 100644 +--- a/drivers/gpu/drm/i915/intel_display.c ++++ b/drivers/gpu/drm/i915/intel_display.c +@@ -13516,6 +13516,7 @@ static int intel_atomic_commit(struct drm_device *dev, + + drm_atomic_helper_swap_state(dev, state); + dev_priv->wm.config = to_intel_atomic_state(state)->wm_config; ++ dev_priv->wm.distrust_bios_wm = false; + + if (intel_state->modeset) { + memcpy(dev_priv->min_pixclk, intel_state->min_pixclk, +diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c +index ee82b1f..6a09d7a 100644 +--- a/drivers/gpu/drm/i915/intel_pm.c ++++ b/drivers/gpu/drm/i915/intel_pm.c +@@ -3967,6 +3967,14 @@ void skl_wm_get_hw_state(struct drm_device *dev) + list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) + skl_pipe_wm_get_hw_state(crtc); + ++ if (dev_priv->active_crtcs) { ++ /* Fully recompute DDB on first atomic commit */ ++ dev_priv->wm.distrust_bios_wm = true; ++ } else { ++ /* Easy/common case; just sanitize DDB now if everything off */ ++ memset(ddb, 0, sizeof(*ddb)); ++ } ++ + /* Calculate plane data rates */ + for_each_intel_crtc(dev, intel_crtc) { + struct intel_crtc_state *cstate = intel_crtc->config; +-- +2.7.4 + diff --git a/0009-drm-i915-gen9-Compute-DDB-allocation-at-atomic-check.patch b/0009-drm-i915-gen9-Compute-DDB-allocation-at-atomic-check.patch new file mode 100644 index 000000000..53fb0cd7a --- /dev/null +++ b/0009-drm-i915-gen9-Compute-DDB-allocation-at-atomic-check.patch @@ -0,0 +1,254 @@ +From 0e9cf00438e4df1d97af44d3c52cc1cacc4dd2c9 Mon Sep 17 00:00:00 2001 +From: Fedora Kernel Team +Date: Mon, 20 Jun 2016 12:40:26 +0200 +Subject: [PATCH 09/17] drm/i915/gen9: Compute DDB allocation at atomic check + time (v4) + +Upstream: since drm-intel-next-2016-05-22 +commit 98d39494d3759f84ce50e505059bc80f54c1c47b + +Author: Matt Roper +AuthorDate: Thu May 12 07:06:03 2016 -0700 +Commit: Matt Roper +CommitDate: Fri May 13 07:34:00 2016 -0700 + + drm/i915/gen9: Compute DDB allocation at atomic check time (v4) + + Calculate the DDB blocks needed to satisfy the current atomic + transaction at atomic check time. This is a prerequisite to calculating + SKL watermarks during the 'check' phase and rejecting any configurations + that we can't find valid watermarks for. + + Due to the nature of DDB allocation, it's possible for the addition of a + new CRTC to make the watermark configuration already in use on another, + unchanged CRTC become invalid. A change in which CRTC's are active + triggers a recompute of the entire DDB, which unfortunately means we + need to disallow any other atomic commits from racing with such an + update. If the active CRTC's change, we need to grab the lock on all + CRTC's and run all CRTC's through their 'check' handler to recompute and + re-check their per-CRTC DDB allocations. + + Note that with this patch we only compute the DDB allocation but we + don't actually use the computed values during watermark programming yet. + For ease of review/testing/bisecting, we still recompute the DDB at + watermark programming time and just WARN() if it doesn't match the + precomputed values. A future patch will switch over to using the + precomputed values once we're sure they're being properly computed. + + Another clarifying note: DDB allocation itself shouldn't ever fail with + the algorithm we use today (i.e., we have enough DDB blocks on BXT to + support the minimum needs of the worst-case scenario of every pipe/plane + enabled at full size). However the watermarks calculations based on the + DDB may fail and we'll be moving those to the atomic check as well in + future patches. + + v2: + - Skip DDB calculations in the rare case where our transaction doesn't + actually touch any CRTC's at all. Assuming at least one CRTC state + is present in our transaction, then it means we can't race with any + transactions that would update dev_priv->active_crtcs (which requires + _all_ CRTC locks). + + v3: + - Also calculate DDB during initial hw readout, to prevent using + incorrect bios values. (Maarten) + + v4: + - Use new distrust_bios_wm flag instead of skip_initial_wm (which was + never actually set). + - Set intel_state->active_pipe_changes instead of just realloc_pipes + + Cc: Maarten Lankhorst + Cc: Lyude Paul + Cc: Radhakrishna Sripada + Signed-off-by: Matt Roper + Signed-off-by: Maarten Lankhorst + Reviewed-by: Maarten Lankhorst + Link: http://patchwork.freedesktop.org/patch/msgid/1463061971-19638-10-git-send-email-matthew.d.roper@intel.com +--- + drivers/gpu/drm/i915/i915_drv.h | 5 +++ + drivers/gpu/drm/i915/intel_display.c | 18 ++++++++ + drivers/gpu/drm/i915/intel_drv.h | 3 ++ + drivers/gpu/drm/i915/intel_pm.c | 79 ++++++++++++++++++++++++++++++++++++ + 4 files changed, 105 insertions(+) + +diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h +index ae7932a..237df9f 100644 +--- a/drivers/gpu/drm/i915/i915_drv.h ++++ b/drivers/gpu/drm/i915/i915_drv.h +@@ -296,6 +296,10 @@ struct i915_hotplug { + #define for_each_intel_crtc(dev, intel_crtc) \ + list_for_each_entry(intel_crtc, &dev->mode_config.crtc_list, base.head) + ++#define for_each_intel_crtc_mask(dev, intel_crtc, crtc_mask) \ ++ list_for_each_entry(intel_crtc, &dev->mode_config.crtc_list, base.head) \ ++ for_each_if ((crtc_mask) & (1 << drm_crtc_index(&intel_crtc->base))) ++ + #define for_each_intel_encoder(dev, intel_encoder) \ + list_for_each_entry(intel_encoder, \ + &(dev)->mode_config.encoder_list, \ +@@ -638,6 +642,7 @@ struct drm_i915_display_funcs { + int (*compute_pipe_wm)(struct intel_crtc *crtc, + struct drm_atomic_state *state); + void (*program_watermarks)(struct intel_crtc_state *cstate); ++ int (*compute_global_watermarks)(struct drm_atomic_state *state); + void (*update_wm)(struct drm_crtc *crtc); + int (*modeset_calc_cdclk)(struct drm_atomic_state *state); + void (*modeset_commit_cdclk)(struct drm_atomic_state *state); +diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c +index 786f3d9..03e2635 100644 +--- a/drivers/gpu/drm/i915/intel_display.c ++++ b/drivers/gpu/drm/i915/intel_display.c +@@ -13225,6 +13225,7 @@ static int intel_modeset_checks(struct drm_atomic_state *state) + static void calc_watermark_data(struct drm_atomic_state *state) + { + struct drm_device *dev = state->dev; ++ struct drm_i915_private *dev_priv = to_i915(dev); + struct intel_atomic_state *intel_state = to_intel_atomic_state(state); + struct drm_crtc *crtc; + struct drm_crtc_state *cstate; +@@ -13254,6 +13255,10 @@ static void calc_watermark_data(struct drm_atomic_state *state) + pstate->crtc_h != pstate->src_h >> 16) + intel_state->wm_config.sprites_scaled = true; + } ++ ++ /* Is there platform-specific watermark information to calculate? */ ++ if (dev_priv->display.compute_global_watermarks) ++ dev_priv->display.compute_global_watermarks(state); + } + + /** +@@ -13616,6 +13621,19 @@ static int intel_atomic_commit(struct drm_device *dev, + modeset_put_power_domains(dev_priv, put_domains[i]); + } + ++ /* ++ * Temporary sanity check: make sure our pre-computed DDB matches the ++ * one we actually wind up programming. ++ * ++ * Not a great place to put this, but the easiest place we have access ++ * to both the pre-computed and final DDB's; we'll be removing this ++ * check in the next patch anyway. ++ */ ++ WARN(IS_GEN9(dev) && ++ memcmp(&intel_state->ddb, &dev_priv->wm.skl_results.ddb, ++ sizeof(intel_state->ddb)), ++ "Pre-computed DDB does not match final DDB!\n"); ++ + if (intel_state->modeset) + intel_display_power_put(dev_priv, POWER_DOMAIN_MODESET); + +diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h +index 672ca56..4d6336a 100644 +--- a/drivers/gpu/drm/i915/intel_drv.h ++++ b/drivers/gpu/drm/i915/intel_drv.h +@@ -271,6 +271,9 @@ struct intel_atomic_state { + + struct intel_shared_dpll_config shared_dpll[I915_NUM_PLLS]; + struct intel_wm_config wm_config; ++ ++ /* Gen9+ only */ ++ struct skl_ddb_allocation ddb; + }; + + struct intel_plane_state { +diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c +index 6a09d7a..f60519d 100644 +--- a/drivers/gpu/drm/i915/intel_pm.c ++++ b/drivers/gpu/drm/i915/intel_pm.c +@@ -3751,6 +3751,84 @@ static void skl_clear_wm(struct skl_wm_values *watermarks, enum pipe pipe) + + } + ++static int ++skl_compute_ddb(struct drm_atomic_state *state) ++{ ++ struct drm_device *dev = state->dev; ++ struct drm_i915_private *dev_priv = to_i915(dev); ++ struct intel_atomic_state *intel_state = to_intel_atomic_state(state); ++ struct intel_crtc *intel_crtc; ++ unsigned realloc_pipes = dev_priv->active_crtcs; ++ int ret; ++ ++ /* ++ * If this is our first atomic update following hardware readout, ++ * we can't trust the DDB that the BIOS programmed for us. Let's ++ * pretend that all pipes switched active status so that we'll ++ * ensure a full DDB recompute. ++ */ ++ if (dev_priv->wm.distrust_bios_wm) ++ intel_state->active_pipe_changes = ~0; ++ ++ /* ++ * If the modeset changes which CRTC's are active, we need to ++ * recompute the DDB allocation for *all* active pipes, even ++ * those that weren't otherwise being modified in any way by this ++ * atomic commit. Due to the shrinking of the per-pipe allocations ++ * when new active CRTC's are added, it's possible for a pipe that ++ * we were already using and aren't changing at all here to suddenly ++ * become invalid if its DDB needs exceeds its new allocation. ++ * ++ * Note that if we wind up doing a full DDB recompute, we can't let ++ * any other display updates race with this transaction, so we need ++ * to grab the lock on *all* CRTC's. ++ */ ++ if (intel_state->active_pipe_changes) ++ realloc_pipes = ~0; ++ ++ for_each_intel_crtc_mask(dev, intel_crtc, realloc_pipes) { ++ struct intel_crtc_state *cstate; ++ ++ cstate = intel_atomic_get_crtc_state(state, intel_crtc); ++ if (IS_ERR(cstate)) ++ return PTR_ERR(cstate); ++ ++ ret = skl_allocate_pipe_ddb(cstate, &intel_state->ddb); ++ if (ret) ++ return ret; ++ } ++ ++ return 0; ++} ++ ++static int ++skl_compute_wm(struct drm_atomic_state *state) ++{ ++ struct drm_crtc *crtc; ++ struct drm_crtc_state *cstate; ++ int ret, i; ++ bool changed = false; ++ ++ /* ++ * If this transaction isn't actually touching any CRTC's, don't ++ * bother with watermark calculation. Note that if we pass this ++ * test, we're guaranteed to hold at least one CRTC state mutex, ++ * which means we can safely use values like dev_priv->active_crtcs ++ * since any racing commits that want to update them would need to ++ * hold _all_ CRTC state mutexes. ++ */ ++ for_each_crtc_in_state(state, crtc, cstate, i) ++ changed = true; ++ if (!changed) ++ return 0; ++ ++ ret = skl_compute_ddb(state); ++ if (ret) ++ return ret; ++ ++ return 0; ++} ++ + static void skl_update_wm(struct drm_crtc *crtc) + { + struct intel_crtc *intel_crtc = to_intel_crtc(crtc); +@@ -7258,6 +7336,7 @@ void intel_init_pm(struct drm_device *dev) + dev_priv->display.init_clock_gating = + bxt_init_clock_gating; + dev_priv->display.update_wm = skl_update_wm; ++ dev_priv->display.compute_global_watermarks = skl_compute_wm; + } else if (HAS_PCH_SPLIT(dev)) { + ilk_setup_wm_latency(dev); + +-- +2.7.4 + diff --git a/0010-drm-i915-gen9-Drop-re-allocation-of-DDB-at-atomic-co.patch b/0010-drm-i915-gen9-Drop-re-allocation-of-DDB-at-atomic-co.patch new file mode 100644 index 000000000..4d40a4e93 --- /dev/null +++ b/0010-drm-i915-gen9-Drop-re-allocation-of-DDB-at-atomic-co.patch @@ -0,0 +1,389 @@ +From 6a86f1d01bb25a687c59dd6b3e6deea362cf0ee1 Mon Sep 17 00:00:00 2001 +From: Fedora Kernel Team +Date: Mon, 20 Jun 2016 12:40:40 +0200 +Subject: [PATCH 10/17] drm/i915/gen9: Drop re-allocation of DDB at atomic + commit (v2) + +Upstream: since drm-intel-next-2016-05-22 +commit a6d3460e62d17098a815a53f23e44d814cb347e0 + +Author: Matt Roper +AuthorDate: Thu May 12 07:06:04 2016 -0700 +Commit: Matt Roper +CommitDate: Fri May 13 07:34:06 2016 -0700 + + drm/i915/gen9: Drop re-allocation of DDB at atomic commit (v2) + + Now that we're properly pre-allocating the DDB during the atomic check + phase and we trust that the allocation is appropriate, let's actually + use the allocation computed and not duplicate that work during the + commit phase. + + v2: + - Significant rebasing now that we can use cached data rates and + minimum block allocations to avoid grabbing additional plane states. + + Signed-off-by: Matt Roper + Reviewed-by: Maarten Lankhorst + Link: http://patchwork.freedesktop.org/patch/msgid/1463061971-19638-11-git-send-email-matthew.d.roper@intel.com +--- + drivers/gpu/drm/i915/intel_display.c | 14 +-- + drivers/gpu/drm/i915/intel_pm.c | 224 +++++++++++------------------------ + 2 files changed, 67 insertions(+), 171 deletions(-) + +diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c +index 03e2635..b484fda 100644 +--- a/drivers/gpu/drm/i915/intel_display.c ++++ b/drivers/gpu/drm/i915/intel_display.c +@@ -13522,6 +13522,7 @@ static int intel_atomic_commit(struct drm_device *dev, + drm_atomic_helper_swap_state(dev, state); + dev_priv->wm.config = to_intel_atomic_state(state)->wm_config; + dev_priv->wm.distrust_bios_wm = false; ++ dev_priv->wm.skl_results.ddb = intel_state->ddb; + + if (intel_state->modeset) { + memcpy(dev_priv->min_pixclk, intel_state->min_pixclk, +@@ -13621,19 +13622,6 @@ static int intel_atomic_commit(struct drm_device *dev, + modeset_put_power_domains(dev_priv, put_domains[i]); + } + +- /* +- * Temporary sanity check: make sure our pre-computed DDB matches the +- * one we actually wind up programming. +- * +- * Not a great place to put this, but the easiest place we have access +- * to both the pre-computed and final DDB's; we'll be removing this +- * check in the next patch anyway. +- */ +- WARN(IS_GEN9(dev) && +- memcmp(&intel_state->ddb, &dev_priv->wm.skl_results.ddb, +- sizeof(intel_state->ddb)), +- "Pre-computed DDB does not match final DDB!\n"); +- + if (intel_state->modeset) + intel_display_power_put(dev_priv, POWER_DOMAIN_MODESET); + +diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c +index f60519d..80f9f18 100644 +--- a/drivers/gpu/drm/i915/intel_pm.c ++++ b/drivers/gpu/drm/i915/intel_pm.c +@@ -2788,7 +2788,6 @@ skl_wm_plane_id(const struct intel_plane *plane) + static void + skl_ddb_get_pipe_allocation_limits(struct drm_device *dev, + const struct intel_crtc_state *cstate, +- struct intel_wm_config *config, + struct skl_ddb_entry *alloc, /* out */ + int *num_active /* out */) + { +@@ -2796,24 +2795,22 @@ skl_ddb_get_pipe_allocation_limits(struct drm_device *dev, + struct intel_atomic_state *intel_state = to_intel_atomic_state(state); + struct drm_i915_private *dev_priv = to_i915(dev); + struct drm_crtc *for_crtc = cstate->base.crtc; +- struct drm_crtc *crtc; + unsigned int pipe_size, ddb_size; + int nth_active_pipe; + int pipe = to_intel_crtc(for_crtc)->pipe; + +- if (intel_state && intel_state->active_pipe_changes) +- *num_active = hweight32(intel_state->active_crtcs); +- else if (intel_state) +- *num_active = hweight32(dev_priv->active_crtcs); +- else +- *num_active = config->num_pipes_active; +- +- if (!cstate->base.active) { ++ if (WARN_ON(!state) || !cstate->base.active) { + alloc->start = 0; + alloc->end = 0; ++ *num_active = hweight32(dev_priv->active_crtcs); + return; + } + ++ if (intel_state->active_pipe_changes) ++ *num_active = hweight32(intel_state->active_crtcs); ++ else ++ *num_active = hweight32(dev_priv->active_crtcs); ++ + if (IS_BROXTON(dev)) + ddb_size = BXT_DDB_SIZE; + else +@@ -2822,50 +2819,23 @@ skl_ddb_get_pipe_allocation_limits(struct drm_device *dev, + ddb_size -= 4; /* 4 blocks for bypass path allocation */ + + /* +- * FIXME: At the moment we may be called on either in-flight or fully +- * committed cstate's. Once we fully move DDB allocation in the check +- * phase, we'll only be called on in-flight states and the 'else' +- * branch here will go away. +- * +- * The 'else' branch is slightly racy here, but it was racy to begin +- * with; since it's going away soon, no effort is made to address that. ++ * If the state doesn't change the active CRTC's, then there's ++ * no need to recalculate; the existing pipe allocation limits ++ * should remain unchanged. Note that we're safe from racing ++ * commits since any racing commit that changes the active CRTC ++ * list would need to grab _all_ crtc locks, including the one ++ * we currently hold. + */ +- if (state) { +- /* +- * If the state doesn't change the active CRTC's, then there's +- * no need to recalculate; the existing pipe allocation limits +- * should remain unchanged. Note that we're safe from racing +- * commits since any racing commit that changes the active CRTC +- * list would need to grab _all_ crtc locks, including the one +- * we currently hold. +- */ +- if (!intel_state->active_pipe_changes) { +- *alloc = dev_priv->wm.skl_hw.ddb.pipe[pipe]; +- return; +- } +- +- nth_active_pipe = hweight32(intel_state->active_crtcs & +- (drm_crtc_mask(for_crtc) - 1)); +- pipe_size = ddb_size / hweight32(intel_state->active_crtcs); +- alloc->start = nth_active_pipe * ddb_size / *num_active; +- alloc->end = alloc->start + pipe_size; +- } else { +- nth_active_pipe = 0; +- for_each_crtc(dev, crtc) { +- if (!to_intel_crtc(crtc)->active) +- continue; +- +- if (crtc == for_crtc) +- break; +- +- nth_active_pipe++; +- } +- +- pipe_size = ddb_size / config->num_pipes_active; +- alloc->start = nth_active_pipe * ddb_size / +- config->num_pipes_active; +- alloc->end = alloc->start + pipe_size; ++ if (!intel_state->active_pipe_changes) { ++ *alloc = dev_priv->wm.skl_hw.ddb.pipe[pipe]; ++ return; + } ++ ++ nth_active_pipe = hweight32(intel_state->active_crtcs & ++ (drm_crtc_mask(for_crtc) - 1)); ++ pipe_size = ddb_size / hweight32(intel_state->active_crtcs); ++ alloc->start = nth_active_pipe * ddb_size / *num_active; ++ alloc->end = alloc->start + pipe_size; + } + + static unsigned int skl_cursor_allocation(int num_active) +@@ -2964,62 +2934,33 @@ skl_get_total_relative_data_rate(struct intel_crtc_state *intel_cstate) + struct drm_crtc *crtc = cstate->crtc; + struct drm_device *dev = crtc->dev; + struct intel_crtc *intel_crtc = to_intel_crtc(crtc); ++ const struct drm_plane *plane; + const struct intel_plane *intel_plane; ++ struct drm_plane_state *pstate; + unsigned int rate, total_data_rate = 0; + int id; ++ int i; ++ ++ if (WARN_ON(!state)) ++ return 0; + + /* Calculate and cache data rate for each plane */ +- /* +- * FIXME: At the moment this function can be called on either an +- * in-flight or a committed state object. If it's in-flight then we +- * only want to re-calculate the plane data rate for planes that are +- * part of the transaction (i.e., we don't want to grab any additional +- * plane states if we don't have to). If we're operating on committed +- * state, we'll just go ahead and recalculate the plane data rate for +- * all planes. +- * +- * Once we finish moving our DDB allocation to the atomic check phase, +- * we'll only be calling this function on in-flight state objects, so +- * the 'else' branch here will go away. +- */ +- if (state) { +- struct drm_plane *plane; +- struct drm_plane_state *pstate; +- int i; +- +- for_each_plane_in_state(state, plane, pstate, i) { +- intel_plane = to_intel_plane(plane); +- id = skl_wm_plane_id(intel_plane); +- +- if (intel_plane->pipe != intel_crtc->pipe) +- continue; +- +- /* packed/uv */ +- rate = skl_plane_relative_data_rate(intel_cstate, +- pstate, 0); +- intel_cstate->wm.skl.plane_data_rate[id] = rate; +- +- /* y-plane */ +- rate = skl_plane_relative_data_rate(intel_cstate, +- pstate, 1); +- intel_cstate->wm.skl.plane_y_data_rate[id] = rate; +- } +- } else { +- for_each_intel_plane_on_crtc(dev, intel_crtc, intel_plane) { +- const struct drm_plane_state *pstate = +- intel_plane->base.state; +- int id = skl_wm_plane_id(intel_plane); ++ for_each_plane_in_state(state, plane, pstate, i) { ++ id = skl_wm_plane_id(to_intel_plane(plane)); ++ intel_plane = to_intel_plane(plane); + +- /* packed/uv */ +- rate = skl_plane_relative_data_rate(intel_cstate, +- pstate, 0); +- intel_cstate->wm.skl.plane_data_rate[id] = rate; ++ if (intel_plane->pipe != intel_crtc->pipe) ++ continue; + +- /* y-plane */ +- rate = skl_plane_relative_data_rate(intel_cstate, +- pstate, 1); +- intel_cstate->wm.skl.plane_y_data_rate[id] = rate; +- } ++ /* packed/uv */ ++ rate = skl_plane_relative_data_rate(intel_cstate, ++ pstate, 0); ++ intel_cstate->wm.skl.plane_data_rate[id] = rate; ++ ++ /* y-plane */ ++ rate = skl_plane_relative_data_rate(intel_cstate, ++ pstate, 1); ++ intel_cstate->wm.skl.plane_y_data_rate[id] = rate; + } + + /* Calculate CRTC's total data rate from cached values */ +@@ -3043,8 +2984,6 @@ skl_allocate_pipe_ddb(struct intel_crtc_state *cstate, + struct drm_atomic_state *state = cstate->base.state; + struct drm_crtc *crtc = cstate->base.crtc; + struct drm_device *dev = crtc->dev; +- struct drm_i915_private *dev_priv = to_i915(dev); +- struct intel_wm_config *config = &dev_priv->wm.config; + struct intel_crtc *intel_crtc = to_intel_crtc(crtc); + struct intel_plane *intel_plane; + struct drm_plane *plane; +@@ -3058,6 +2997,9 @@ skl_allocate_pipe_ddb(struct intel_crtc_state *cstate, + int num_active; + int id, i; + ++ if (WARN_ON(!state)) ++ return 0; ++ + if (!cstate->base.active) { + ddb->pipe[pipe].start = ddb->pipe[pipe].end = 0; + memset(ddb->plane[pipe], 0, sizeof(ddb->plane[pipe])); +@@ -3065,8 +3007,7 @@ skl_allocate_pipe_ddb(struct intel_crtc_state *cstate, + return 0; + } + +- skl_ddb_get_pipe_allocation_limits(dev, cstate, config, alloc, +- &num_active); ++ skl_ddb_get_pipe_allocation_limits(dev, cstate, alloc, &num_active); + alloc_size = skl_ddb_entry_size(alloc); + if (alloc_size == 0) { + memset(ddb->plane[pipe], 0, sizeof(ddb->plane[pipe])); +@@ -3078,53 +3019,31 @@ skl_allocate_pipe_ddb(struct intel_crtc_state *cstate, + ddb->plane[pipe][PLANE_CURSOR].end = alloc->end; + + alloc_size -= cursor_blocks; +- alloc->end -= cursor_blocks; + + /* 1. Allocate the mininum required blocks for each active plane */ +- /* +- * TODO: Remove support for already-committed state once we +- * only allocate DDB on in-flight states. +- */ +- if (state) { +- for_each_plane_in_state(state, plane, pstate, i) { +- intel_plane = to_intel_plane(plane); +- id = skl_wm_plane_id(intel_plane); +- +- if (intel_plane->pipe != pipe) +- continue; +- +- if (!to_intel_plane_state(pstate)->visible) { +- minimum[id] = 0; +- y_minimum[id] = 0; +- continue; +- } +- if (plane->type == DRM_PLANE_TYPE_CURSOR) { +- minimum[id] = 0; +- y_minimum[id] = 0; +- continue; +- } +- +- minimum[id] = 8; +- if (pstate->fb->pixel_format == DRM_FORMAT_NV12) +- y_minimum[id] = 8; +- else +- y_minimum[id] = 0; +- } +- } else { +- for_each_intel_plane_on_crtc(dev, intel_crtc, intel_plane) { +- struct drm_plane *plane = &intel_plane->base; +- struct drm_framebuffer *fb = plane->state->fb; +- int id = skl_wm_plane_id(intel_plane); +- +- if (!to_intel_plane_state(plane->state)->visible) +- continue; ++ for_each_plane_in_state(state, plane, pstate, i) { ++ intel_plane = to_intel_plane(plane); ++ id = skl_wm_plane_id(intel_plane); + +- if (plane->type == DRM_PLANE_TYPE_CURSOR) +- continue; ++ if (intel_plane->pipe != pipe) ++ continue; + +- minimum[id] = 8; +- y_minimum[id] = (fb->pixel_format == DRM_FORMAT_NV12) ? 8 : 0; ++ if (!to_intel_plane_state(pstate)->visible) { ++ minimum[id] = 0; ++ y_minimum[id] = 0; ++ continue; ++ } ++ if (plane->type == DRM_PLANE_TYPE_CURSOR) { ++ minimum[id] = 0; ++ y_minimum[id] = 0; ++ continue; + } ++ ++ minimum[id] = 8; ++ if (pstate->fb->pixel_format == DRM_FORMAT_NV12) ++ y_minimum[id] = 8; ++ else ++ y_minimum[id] = 0; + } + + for (i = 0; i < PLANE_CURSOR; i++) { +@@ -3675,7 +3594,6 @@ static bool skl_update_pipe_wm(struct drm_crtc *crtc, + struct intel_crtc *intel_crtc = to_intel_crtc(crtc); + struct intel_crtc_state *cstate = to_intel_crtc_state(crtc->state); + +- WARN_ON(skl_allocate_pipe_ddb(cstate, ddb) != 0); + skl_build_pipe_wm(cstate, ddb, pipe_wm); + + if (!memcmp(&intel_crtc->wm.active.skl, pipe_wm, sizeof(*pipe_wm))) +@@ -3739,16 +3657,6 @@ static void skl_clear_wm(struct skl_wm_values *watermarks, enum pipe pipe) + memset(watermarks->plane_trans[pipe], + 0, sizeof(uint32_t) * I915_MAX_PLANES); + watermarks->plane_trans[pipe][PLANE_CURSOR] = 0; +- +- /* Clear ddb entries for pipe */ +- memset(&watermarks->ddb.pipe[pipe], 0, sizeof(struct skl_ddb_entry)); +- memset(&watermarks->ddb.plane[pipe], 0, +- sizeof(struct skl_ddb_entry) * I915_MAX_PLANES); +- memset(&watermarks->ddb.y_plane[pipe], 0, +- sizeof(struct skl_ddb_entry) * I915_MAX_PLANES); +- memset(&watermarks->ddb.plane[pipe][PLANE_CURSOR], 0, +- sizeof(struct skl_ddb_entry)); +- + } + + static int +-- +2.7.4 + diff --git a/0011-drm-i915-gen9-Calculate-plane-WM-s-from-state.patch b/0011-drm-i915-gen9-Calculate-plane-WM-s-from-state.patch new file mode 100644 index 000000000..9f839dfa2 --- /dev/null +++ b/0011-drm-i915-gen9-Calculate-plane-WM-s-from-state.patch @@ -0,0 +1,91 @@ +From eacd0ecb98a93e3ff83a4479eadeb9cda05d3579 Mon Sep 17 00:00:00 2001 +From: Fedora Kernel Team +Date: Mon, 20 Jun 2016 12:41:01 +0200 +Subject: [PATCH 11/17] drm/i915/gen9: Calculate plane WM's from state + +Upstream: since drm-intel-next-2016-05-22 +commit 33815fa55b31a5de4b197c09926ecab3dfb79732 + +Author: Matt Roper +AuthorDate: Thu May 12 07:06:05 2016 -0700 +Commit: Matt Roper +CommitDate: Fri May 13 07:34:12 2016 -0700 + + drm/i915/gen9: Calculate plane WM's from state + + In a future patch we'll want to calculate plane watermarks for in-flight + atomic state rather than the already-committed state. + + Signed-off-by: Matt Roper + Reviewed-by: Maarten Lankhorst + Link: http://patchwork.freedesktop.org/patch/msgid/1463061971-19638-12-git-send-email-matthew.d.roper@intel.com +--- + drivers/gpu/drm/i915/intel_pm.c | 16 ++++++++-------- + 1 file changed, 8 insertions(+), 8 deletions(-) + +diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c +index 80f9f18..3164f30 100644 +--- a/drivers/gpu/drm/i915/intel_pm.c ++++ b/drivers/gpu/drm/i915/intel_pm.c +@@ -3179,16 +3179,14 @@ static bool skl_ddb_allocation_changed(const struct skl_ddb_allocation *new_ddb, + + static bool skl_compute_plane_wm(const struct drm_i915_private *dev_priv, + struct intel_crtc_state *cstate, +- struct intel_plane *intel_plane, ++ struct intel_plane_state *intel_pstate, + uint16_t ddb_allocation, + int level, + uint16_t *out_blocks, /* out */ + uint8_t *out_lines /* out */) + { +- struct drm_plane *plane = &intel_plane->base; +- struct drm_framebuffer *fb = plane->state->fb; +- struct intel_plane_state *intel_pstate = +- to_intel_plane_state(plane->state); ++ struct drm_plane_state *pstate = &intel_pstate->base; ++ struct drm_framebuffer *fb = pstate->fb; + uint32_t latency = dev_priv->wm.skl_latency[level]; + uint32_t method1, method2; + uint32_t plane_bytes_per_line, plane_blocks_per_line; +@@ -3203,7 +3201,7 @@ static bool skl_compute_plane_wm(const struct drm_i915_private *dev_priv, + width = drm_rect_width(&intel_pstate->src) >> 16; + height = drm_rect_height(&intel_pstate->src) >> 16; + +- if (intel_rotation_90_or_270(plane->state->rotation)) ++ if (intel_rotation_90_or_270(pstate->rotation)) + swap(width, height); + + cpp = drm_format_plane_cpp(fb->pixel_format, 0); +@@ -3223,7 +3221,7 @@ static bool skl_compute_plane_wm(const struct drm_i915_private *dev_priv, + fb->modifier[0] == I915_FORMAT_MOD_Yf_TILED) { + uint32_t min_scanlines = 4; + uint32_t y_tile_minimum; +- if (intel_rotation_90_or_270(plane->state->rotation)) { ++ if (intel_rotation_90_or_270(pstate->rotation)) { + int cpp = (fb->pixel_format == DRM_FORMAT_NV12) ? + drm_format_plane_cpp(fb->pixel_format, 1) : + drm_format_plane_cpp(fb->pixel_format, 0); +@@ -3277,17 +3275,19 @@ static void skl_compute_wm_level(const struct drm_i915_private *dev_priv, + struct drm_device *dev = dev_priv->dev; + struct intel_crtc *intel_crtc = to_intel_crtc(cstate->base.crtc); + struct intel_plane *intel_plane; ++ struct intel_plane_state *intel_pstate; + uint16_t ddb_blocks; + enum pipe pipe = intel_crtc->pipe; + + for_each_intel_plane_on_crtc(dev, intel_crtc, intel_plane) { + int i = skl_wm_plane_id(intel_plane); + ++ intel_pstate = to_intel_plane_state(intel_plane->base.state); + ddb_blocks = skl_ddb_entry_size(&ddb->plane[pipe][i]); + + result->plane_en[i] = skl_compute_plane_wm(dev_priv, + cstate, +- intel_plane, ++ intel_pstate, + ddb_blocks, + level, + &result->plane_res_b[i], +-- +2.7.4 + diff --git a/0012-drm-i915-gen9-Allow-watermark-calculation-on-in-flig.patch b/0012-drm-i915-gen9-Allow-watermark-calculation-on-in-flig.patch new file mode 100644 index 000000000..d0cb50bac --- /dev/null +++ b/0012-drm-i915-gen9-Allow-watermark-calculation-on-in-flig.patch @@ -0,0 +1,156 @@ +From c3d2591095045a8230361d55fadf15ce5dc9127d Mon Sep 17 00:00:00 2001 +From: Fedora Kernel Team +Date: Mon, 20 Jun 2016 12:41:12 +0200 +Subject: [PATCH 12/17] drm/i915/gen9: Allow watermark calculation on in-flight + atomic state (v3) + +Upstream: since drm-intel-next-2016-05-22 +commit f4a967523ec7215a3ec867b7ed2e916bd34840e1 + +Author: Matt Roper +AuthorDate: Thu May 12 07:06:06 2016 -0700 +Commit: Matt Roper +CommitDate: Fri May 13 07:34:23 2016 -0700 + + drm/i915/gen9: Allow watermark calculation on in-flight atomic state (v3) + + In an upcoming patch we'll move this calculation to the atomic 'check' + phase so that the display update can be rejected early if no valid + watermark programming is possible. + + v2: + - Drop intel_pstate_for_cstate_plane() helper and add note about how + the code needs to evolve in the future if we start allowing more than + one pending commit against a CRTC. (Maarten) + + v3: + - Only have skl_compute_wm_level calculate watermarks for enabled + planes; we can just set the other planes on a CRTC to disabled + without having to look at the plane state. This is important because + despite our CRTC lock we can still have racing commits that modify + a disabled plane's property without turning it on. (Maarten) + + Signed-off-by: Matt Roper + Reviewed-by: Maarten Lankhorst + Link: http://patchwork.freedesktop.org/patch/msgid/1463061971-19638-13-git-send-email-matthew.d.roper@intel.com +--- + drivers/gpu/drm/i915/intel_pm.c | 61 ++++++++++++++++++++++++++++++++--------- + 1 file changed, 48 insertions(+), 13 deletions(-) + +diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c +index 3164f30..cd29ab6 100644 +--- a/drivers/gpu/drm/i915/intel_pm.c ++++ b/drivers/gpu/drm/i915/intel_pm.c +@@ -3266,23 +3266,56 @@ static bool skl_compute_plane_wm(const struct drm_i915_private *dev_priv, + return true; + } + +-static void skl_compute_wm_level(const struct drm_i915_private *dev_priv, +- struct skl_ddb_allocation *ddb, +- struct intel_crtc_state *cstate, +- int level, +- struct skl_wm_level *result) ++static int ++skl_compute_wm_level(const struct drm_i915_private *dev_priv, ++ struct skl_ddb_allocation *ddb, ++ struct intel_crtc_state *cstate, ++ int level, ++ struct skl_wm_level *result) + { + struct drm_device *dev = dev_priv->dev; ++ struct drm_atomic_state *state = cstate->base.state; + struct intel_crtc *intel_crtc = to_intel_crtc(cstate->base.crtc); ++ struct drm_plane *plane; + struct intel_plane *intel_plane; + struct intel_plane_state *intel_pstate; + uint16_t ddb_blocks; + enum pipe pipe = intel_crtc->pipe; + +- for_each_intel_plane_on_crtc(dev, intel_crtc, intel_plane) { ++ /* ++ * We'll only calculate watermarks for planes that are actually ++ * enabled, so make sure all other planes are set as disabled. ++ */ ++ memset(result, 0, sizeof(*result)); ++ ++ for_each_intel_plane_mask(dev, intel_plane, cstate->base.plane_mask) { + int i = skl_wm_plane_id(intel_plane); + +- intel_pstate = to_intel_plane_state(intel_plane->base.state); ++ plane = &intel_plane->base; ++ intel_pstate = NULL; ++ if (state) ++ intel_pstate = ++ intel_atomic_get_existing_plane_state(state, ++ intel_plane); ++ ++ /* ++ * Note: If we start supporting multiple pending atomic commits ++ * against the same planes/CRTC's in the future, plane->state ++ * will no longer be the correct pre-state to use for the ++ * calculations here and we'll need to change where we get the ++ * 'unchanged' plane data from. ++ * ++ * For now this is fine because we only allow one queued commit ++ * against a CRTC. Even if the plane isn't modified by this ++ * transaction and we don't have a plane lock, we still have ++ * the CRTC's lock, so we know that no other transactions are ++ * racing with us to update it. ++ */ ++ if (!intel_pstate) ++ intel_pstate = to_intel_plane_state(plane->state); ++ ++ WARN_ON(!intel_pstate->base.fb); ++ + ddb_blocks = skl_ddb_entry_size(&ddb->plane[pipe][i]); + + result->plane_en[i] = skl_compute_plane_wm(dev_priv, +@@ -3293,6 +3326,8 @@ static void skl_compute_wm_level(const struct drm_i915_private *dev_priv, + &result->plane_res_b[i], + &result->plane_res_l[i]); + } ++ ++ return 0; + } + + static uint32_t +@@ -3587,14 +3622,14 @@ static void skl_flush_wm_values(struct drm_i915_private *dev_priv, + } + } + +-static bool skl_update_pipe_wm(struct drm_crtc *crtc, ++static bool skl_update_pipe_wm(struct drm_crtc_state *cstate, + struct skl_ddb_allocation *ddb, /* out */ + struct skl_pipe_wm *pipe_wm /* out */) + { +- struct intel_crtc *intel_crtc = to_intel_crtc(crtc); +- struct intel_crtc_state *cstate = to_intel_crtc_state(crtc->state); ++ struct intel_crtc *intel_crtc = to_intel_crtc(cstate->crtc); ++ struct intel_crtc_state *intel_cstate = to_intel_crtc_state(cstate); + +- skl_build_pipe_wm(cstate, ddb, pipe_wm); ++ skl_build_pipe_wm(intel_cstate, ddb, pipe_wm); + + if (!memcmp(&intel_crtc->wm.active.skl, pipe_wm, sizeof(*pipe_wm))) + return false; +@@ -3634,7 +3669,7 @@ static void skl_update_other_pipe_wm(struct drm_device *dev, + if (!intel_crtc->active) + continue; + +- wm_changed = skl_update_pipe_wm(&intel_crtc->base, ++ wm_changed = skl_update_pipe_wm(intel_crtc->base.state, + &r->ddb, &pipe_wm); + + /* +@@ -3752,7 +3787,7 @@ static void skl_update_wm(struct drm_crtc *crtc) + + skl_clear_wm(results, intel_crtc->pipe); + +- if (!skl_update_pipe_wm(crtc, &results->ddb, pipe_wm)) ++ if (!skl_update_pipe_wm(crtc->state, &results->ddb, pipe_wm)) + return; + + skl_compute_wm_results(dev, pipe_wm, results, intel_crtc); +-- +2.7.4 + diff --git a/0013-drm-i915-gen9-Use-a-bitmask-to-track-dirty-pipe-wate.patch b/0013-drm-i915-gen9-Use-a-bitmask-to-track-dirty-pipe-wate.patch new file mode 100644 index 000000000..959860f95 --- /dev/null +++ b/0013-drm-i915-gen9-Use-a-bitmask-to-track-dirty-pipe-wate.patch @@ -0,0 +1,91 @@ +From b43247a865f73fa3b73a878236b5055bfb864169 Mon Sep 17 00:00:00 2001 +From: Fedora Kernel Team +Date: Mon, 20 Jun 2016 12:41:23 +0200 +Subject: [PATCH 13/17] drm/i915/gen9: Use a bitmask to track dirty pipe + watermarks + +Upstream: since drm-intel-next-2016-05-22 +commit 2b4b9f35d94b1b533bc23110b040b04316480b28 + +Author: Matt Roper +AuthorDate: Thu May 12 07:06:07 2016 -0700 +Commit: Matt Roper +CommitDate: Fri May 13 07:34:40 2016 -0700 + + drm/i915/gen9: Use a bitmask to track dirty pipe watermarks + + Slightly easier to work with than an array of bools. + + Signed-off-by: Matt Roper + Reviewed-by: Maarten Lankhorst + Link: http://patchwork.freedesktop.org/patch/msgid/1463061971-19638-14-git-send-email-matthew.d.roper@intel.com +--- + drivers/gpu/drm/i915/i915_drv.h | 2 +- + drivers/gpu/drm/i915/intel_pm.c | 10 +++++----- + 2 files changed, 6 insertions(+), 6 deletions(-) + +diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h +index 237df9f..67c76b6 100644 +--- a/drivers/gpu/drm/i915/i915_drv.h ++++ b/drivers/gpu/drm/i915/i915_drv.h +@@ -1615,7 +1615,7 @@ struct skl_ddb_allocation { + }; + + struct skl_wm_values { +- bool dirty[I915_MAX_PIPES]; ++ unsigned dirty_pipes; + struct skl_ddb_allocation ddb; + uint32_t wm_linetime[I915_MAX_PIPES]; + uint32_t plane[I915_MAX_PIPES][I915_MAX_PLANES][8]; +diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c +index cd29ab6..611c5a1 100644 +--- a/drivers/gpu/drm/i915/intel_pm.c ++++ b/drivers/gpu/drm/i915/intel_pm.c +@@ -3455,7 +3455,7 @@ static void skl_write_wm_values(struct drm_i915_private *dev_priv, + int i, level, max_level = ilk_wm_max_level(dev); + enum pipe pipe = crtc->pipe; + +- if (!new->dirty[pipe]) ++ if ((new->dirty_pipes & drm_crtc_mask(&crtc->base)) == 0) + continue; + + I915_WRITE(PIPE_WM_LINETIME(pipe), new->wm_linetime[pipe]); +@@ -3680,7 +3680,7 @@ static void skl_update_other_pipe_wm(struct drm_device *dev, + WARN_ON(!wm_changed); + + skl_compute_wm_results(dev, &pipe_wm, r, intel_crtc); +- r->dirty[intel_crtc->pipe] = true; ++ r->dirty_pipes |= drm_crtc_mask(&intel_crtc->base); + } + } + +@@ -3783,7 +3783,7 @@ static void skl_update_wm(struct drm_crtc *crtc) + + + /* Clear all dirty flags */ +- memset(results->dirty, 0, sizeof(bool) * I915_MAX_PIPES); ++ results->dirty_pipes = 0; + + skl_clear_wm(results, intel_crtc->pipe); + +@@ -3791,7 +3791,7 @@ static void skl_update_wm(struct drm_crtc *crtc) + return; + + skl_compute_wm_results(dev, pipe_wm, results, intel_crtc); +- results->dirty[intel_crtc->pipe] = true; ++ results->dirty_pipes |= drm_crtc_mask(&intel_crtc->base); + + skl_update_other_pipe_wm(dev, crtc, results); + skl_write_wm_values(dev_priv, results); +@@ -3952,7 +3952,7 @@ static void skl_pipe_wm_get_hw_state(struct drm_crtc *crtc) + if (!intel_crtc->active) + return; + +- hw->dirty[pipe] = true; ++ hw->dirty_pipes |= drm_crtc_mask(crtc); + + active->linetime = hw->wm_linetime[pipe]; + +-- +2.7.4 + diff --git a/0014-drm-i915-gen9-Propagate-watermark-calculation-failur.patch b/0014-drm-i915-gen9-Propagate-watermark-calculation-failur.patch new file mode 100644 index 000000000..a868ebd1f --- /dev/null +++ b/0014-drm-i915-gen9-Propagate-watermark-calculation-failur.patch @@ -0,0 +1,254 @@ +From 2dda82bdd570042820241e71c02ea36081835f67 Mon Sep 17 00:00:00 2001 +From: Fedora Kernel Team +Date: Mon, 20 Jun 2016 12:41:35 +0200 +Subject: [PATCH 14/17] drm/i915/gen9: Propagate watermark calculation failures + up the call chain + +Upstream: since drm-intel-next-2016-05-22 +commit 55994c2c38a1101f84cdf277b228f830af8a9c1b + +Author: Matt Roper +AuthorDate: Thu May 12 07:06:08 2016 -0700 +Commit: Matt Roper +CommitDate: Fri May 13 07:34:48 2016 -0700 + + drm/i915/gen9: Propagate watermark calculation failures up the call chain + + Once we move watermark calculation to the atomic check phase, we'll want + to start rejecting display configurations that exceed out watermark + limits. At the moment we just assume that there's always a valid set of + watermarks, even though this may not actually be true. Let's prepare by + passing return codes up through the call stack in preparation. + + Signed-off-by: Matt Roper + Reviewed-by: Maarten Lankhorst + Link: http://patchwork.freedesktop.org/patch/msgid/1463061971-19638-15-git-send-email-matthew.d.roper@intel.com +--- + drivers/gpu/drm/i915/intel_display.c | 10 ++-- + drivers/gpu/drm/i915/intel_pm.c | 90 ++++++++++++++++++++++-------------- + 2 files changed, 61 insertions(+), 39 deletions(-) + +diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c +index b484fda..9ac2346 100644 +--- a/drivers/gpu/drm/i915/intel_display.c ++++ b/drivers/gpu/drm/i915/intel_display.c +@@ -13222,7 +13222,7 @@ static int intel_modeset_checks(struct drm_atomic_state *state) + * phase. The code here should be run after the per-crtc and per-plane 'check' + * handlers to ensure that all derived state has been updated. + */ +-static void calc_watermark_data(struct drm_atomic_state *state) ++static int calc_watermark_data(struct drm_atomic_state *state) + { + struct drm_device *dev = state->dev; + struct drm_i915_private *dev_priv = to_i915(dev); +@@ -13258,7 +13258,9 @@ static void calc_watermark_data(struct drm_atomic_state *state) + + /* Is there platform-specific watermark information to calculate? */ + if (dev_priv->display.compute_global_watermarks) +- dev_priv->display.compute_global_watermarks(state); ++ return dev_priv->display.compute_global_watermarks(state); ++ ++ return 0; + } + + /** +@@ -13345,9 +13347,7 @@ static int intel_atomic_check(struct drm_device *dev, + return ret; + + intel_fbc_choose_crtc(dev_priv, state); +- calc_watermark_data(state); +- +- return 0; ++ return calc_watermark_data(state); + } + + static int intel_atomic_prepare_commit(struct drm_device *dev, +diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c +index 611c5a1..ec22d93 100644 +--- a/drivers/gpu/drm/i915/intel_pm.c ++++ b/drivers/gpu/drm/i915/intel_pm.c +@@ -3177,13 +3177,14 @@ static bool skl_ddb_allocation_changed(const struct skl_ddb_allocation *new_ddb, + return false; + } + +-static bool skl_compute_plane_wm(const struct drm_i915_private *dev_priv, +- struct intel_crtc_state *cstate, +- struct intel_plane_state *intel_pstate, +- uint16_t ddb_allocation, +- int level, +- uint16_t *out_blocks, /* out */ +- uint8_t *out_lines /* out */) ++static int skl_compute_plane_wm(const struct drm_i915_private *dev_priv, ++ struct intel_crtc_state *cstate, ++ struct intel_plane_state *intel_pstate, ++ uint16_t ddb_allocation, ++ int level, ++ uint16_t *out_blocks, /* out */ ++ uint8_t *out_lines, /* out */ ++ bool *enabled /* out */) + { + struct drm_plane_state *pstate = &intel_pstate->base; + struct drm_framebuffer *fb = pstate->fb; +@@ -3195,8 +3196,10 @@ static bool skl_compute_plane_wm(const struct drm_i915_private *dev_priv, + uint8_t cpp; + uint32_t width = 0, height = 0; + +- if (latency == 0 || !cstate->base.active || !intel_pstate->visible) +- return false; ++ if (latency == 0 || !cstate->base.active || !intel_pstate->visible) { ++ *enabled = false; ++ return 0; ++ } + + width = drm_rect_width(&intel_pstate->src) >> 16; + height = drm_rect_height(&intel_pstate->src) >> 16; +@@ -3257,13 +3260,16 @@ static bool skl_compute_plane_wm(const struct drm_i915_private *dev_priv, + res_blocks++; + } + +- if (res_blocks >= ddb_allocation || res_lines > 31) +- return false; ++ if (res_blocks >= ddb_allocation || res_lines > 31) { ++ *enabled = false; ++ return 0; ++ } + + *out_blocks = res_blocks; + *out_lines = res_lines; ++ *enabled = true; + +- return true; ++ return 0; + } + + static int +@@ -3281,6 +3287,7 @@ skl_compute_wm_level(const struct drm_i915_private *dev_priv, + struct intel_plane_state *intel_pstate; + uint16_t ddb_blocks; + enum pipe pipe = intel_crtc->pipe; ++ int ret; + + /* + * We'll only calculate watermarks for planes that are actually +@@ -3318,13 +3325,16 @@ skl_compute_wm_level(const struct drm_i915_private *dev_priv, + + ddb_blocks = skl_ddb_entry_size(&ddb->plane[pipe][i]); + +- result->plane_en[i] = skl_compute_plane_wm(dev_priv, +- cstate, +- intel_pstate, +- ddb_blocks, +- level, +- &result->plane_res_b[i], +- &result->plane_res_l[i]); ++ ret = skl_compute_plane_wm(dev_priv, ++ cstate, ++ intel_pstate, ++ ddb_blocks, ++ level, ++ &result->plane_res_b[i], ++ &result->plane_res_l[i], ++ &result->plane_en[i]); ++ if (ret) ++ return ret; + } + + return 0; +@@ -3361,21 +3371,26 @@ static void skl_compute_transition_wm(struct intel_crtc_state *cstate, + } + } + +-static void skl_build_pipe_wm(struct intel_crtc_state *cstate, +- struct skl_ddb_allocation *ddb, +- struct skl_pipe_wm *pipe_wm) ++static int skl_build_pipe_wm(struct intel_crtc_state *cstate, ++ struct skl_ddb_allocation *ddb, ++ struct skl_pipe_wm *pipe_wm) + { + struct drm_device *dev = cstate->base.crtc->dev; + const struct drm_i915_private *dev_priv = dev->dev_private; + int level, max_level = ilk_wm_max_level(dev); ++ int ret; + + for (level = 0; level <= max_level; level++) { +- skl_compute_wm_level(dev_priv, ddb, cstate, +- level, &pipe_wm->wm[level]); ++ ret = skl_compute_wm_level(dev_priv, ddb, cstate, ++ level, &pipe_wm->wm[level]); ++ if (ret) ++ return ret; + } + pipe_wm->linetime = skl_compute_linetime_wm(cstate); + + skl_compute_transition_wm(cstate, &pipe_wm->trans_wm); ++ ++ return 0; + } + + static void skl_compute_wm_results(struct drm_device *dev, +@@ -3622,21 +3637,27 @@ static void skl_flush_wm_values(struct drm_i915_private *dev_priv, + } + } + +-static bool skl_update_pipe_wm(struct drm_crtc_state *cstate, +- struct skl_ddb_allocation *ddb, /* out */ +- struct skl_pipe_wm *pipe_wm /* out */) ++static int skl_update_pipe_wm(struct drm_crtc_state *cstate, ++ struct skl_ddb_allocation *ddb, /* out */ ++ struct skl_pipe_wm *pipe_wm, /* out */ ++ bool *changed /* out */) + { + struct intel_crtc *intel_crtc = to_intel_crtc(cstate->crtc); + struct intel_crtc_state *intel_cstate = to_intel_crtc_state(cstate); ++ int ret; + +- skl_build_pipe_wm(intel_cstate, ddb, pipe_wm); ++ ret = skl_build_pipe_wm(intel_cstate, ddb, pipe_wm); ++ if (ret) ++ return ret; + + if (!memcmp(&intel_crtc->wm.active.skl, pipe_wm, sizeof(*pipe_wm))) +- return false; ++ *changed = false; ++ else ++ *changed = true; + + intel_crtc->wm.active.skl = *pipe_wm; + +- return true; ++ return 0; + } + + static void skl_update_other_pipe_wm(struct drm_device *dev, +@@ -3669,8 +3690,8 @@ static void skl_update_other_pipe_wm(struct drm_device *dev, + if (!intel_crtc->active) + continue; + +- wm_changed = skl_update_pipe_wm(intel_crtc->base.state, +- &r->ddb, &pipe_wm); ++ skl_update_pipe_wm(intel_crtc->base.state, ++ &r->ddb, &pipe_wm, &wm_changed); + + /* + * If we end up re-computing the other pipe WM values, it's +@@ -3780,14 +3801,15 @@ static void skl_update_wm(struct drm_crtc *crtc) + struct skl_wm_values *results = &dev_priv->wm.skl_results; + struct intel_crtc_state *cstate = to_intel_crtc_state(crtc->state); + struct skl_pipe_wm *pipe_wm = &cstate->wm.skl.optimal; +- ++ bool wm_changed; + + /* Clear all dirty flags */ + results->dirty_pipes = 0; + + skl_clear_wm(results, intel_crtc->pipe); + +- if (!skl_update_pipe_wm(crtc->state, &results->ddb, pipe_wm)) ++ skl_update_pipe_wm(crtc->state, &results->ddb, pipe_wm, &wm_changed); ++ if (!wm_changed) + return; + + skl_compute_wm_results(dev, pipe_wm, results, intel_crtc); +-- +2.7.4 + diff --git a/0015-drm-i915-gen9-Calculate-watermarks-during-atomic-che.patch b/0015-drm-i915-gen9-Calculate-watermarks-during-atomic-che.patch new file mode 100644 index 000000000..b8f602e0e --- /dev/null +++ b/0015-drm-i915-gen9-Calculate-watermarks-during-atomic-che.patch @@ -0,0 +1,321 @@ +From 71136125cc79dab464a0139dbf0c02891aa9ce6e Mon Sep 17 00:00:00 2001 +From: Fedora Kernel Team +Date: Mon, 20 Jun 2016 12:41:46 +0200 +Subject: [PATCH 15/17] drm/i915/gen9: Calculate watermarks during atomic + 'check' (v2) + +Upstream: since drm-intel-next-2016-05-22 +commit 734fa01f3a17ac80d2d53cee0b05b246c03df0e4 + +Author: Matt Roper +AuthorDate: Thu May 12 15:11:40 2016 -0700 +Commit: Matt Roper +CommitDate: Fri May 13 07:35:48 2016 -0700 + + drm/i915/gen9: Calculate watermarks during atomic 'check' (v2) + + Moving watermark calculation into the check phase will allow us to to + reject display configurations for which there are no valid watermark + values before we start trying to program the hardware (although those + tests will come in a subsequent patch). + + Another advantage of moving this calculation to the check phase is that + we can calculate the watermarks in a single shot as part of the atomic + transaction. The watermark interfaces we inherited from our legacy + modesetting days are a bit broken in the atomic design because they use + per-crtc entry points but actually re-calculate and re-program something + that is really more of a global state. That worked okay in the legacy + modesetting world because operations only ever updated a single CRTC at + a time. However in the atomic world, a transaction can involve multiple + CRTC's, which means we wind up computing and programming the watermarks + NxN times (where N is the number of CRTC's involved). With this patch + we eliminate the redundant re-calculation of watermark data for atomic + states (which was the cause of the WARN_ON(!wm_changed) problems that + have plagued us for a while). + + We still need to work on the 'commit' side of watermark handling so that + we aren't doing redundant NxN programming of watermarks, but that's + content for future patches. + + v2: + - Bail out of skl_write_wm_values() if the CRTC isn't active. Now that + we set dirty_pipes to ~0 if the active pipes change (because + we need to deal with DDB changes), we can now wind up here for + disabled pipes, whereas we couldn't before. + + Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=89055 + Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=92181 + Cc: Maarten Lankhorst + Signed-off-by: Matt Roper + Tested-by: Daniel Stone + Reviewed-by: Maarten Lankhorst + Link: http://patchwork.freedesktop.org/patch/msgid/1463091100-13747-1-git-send-email-matthew.d.roper@intel.com +--- + drivers/gpu/drm/i915/intel_display.c | 2 +- + drivers/gpu/drm/i915/intel_drv.h | 14 +++- + drivers/gpu/drm/i915/intel_pm.c | 135 ++++++++++++----------------------- + 3 files changed, 61 insertions(+), 90 deletions(-) + +diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c +index 9ac2346..1726ea4 100644 +--- a/drivers/gpu/drm/i915/intel_display.c ++++ b/drivers/gpu/drm/i915/intel_display.c +@@ -13522,7 +13522,7 @@ static int intel_atomic_commit(struct drm_device *dev, + drm_atomic_helper_swap_state(dev, state); + dev_priv->wm.config = to_intel_atomic_state(state)->wm_config; + dev_priv->wm.distrust_bios_wm = false; +- dev_priv->wm.skl_results.ddb = intel_state->ddb; ++ dev_priv->wm.skl_results = intel_state->wm_results; + + if (intel_state->modeset) { + memcpy(dev_priv->min_pixclk, intel_state->min_pixclk, +diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h +index 4d6336a..e5543b8 100644 +--- a/drivers/gpu/drm/i915/intel_drv.h ++++ b/drivers/gpu/drm/i915/intel_drv.h +@@ -273,7 +273,7 @@ struct intel_atomic_state { + struct intel_wm_config wm_config; + + /* Gen9+ only */ +- struct skl_ddb_allocation ddb; ++ struct skl_wm_values wm_results; + }; + + struct intel_plane_state { +@@ -1661,6 +1661,18 @@ intel_atomic_get_crtc_state(struct drm_atomic_state *state, + + return to_intel_crtc_state(crtc_state); + } ++ ++static inline struct intel_plane_state * ++intel_atomic_get_existing_plane_state(struct drm_atomic_state *state, ++ struct intel_plane *plane) ++{ ++ struct drm_plane_state *plane_state; ++ ++ plane_state = drm_atomic_get_existing_plane_state(state, &plane->base); ++ ++ return to_intel_plane_state(plane_state); ++} ++ + int intel_atomic_setup_scalers(struct drm_device *dev, + struct intel_crtc *intel_crtc, + struct intel_crtc_state *crtc_state); +diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c +index ec22d93..73e5242 100644 +--- a/drivers/gpu/drm/i915/intel_pm.c ++++ b/drivers/gpu/drm/i915/intel_pm.c +@@ -3160,23 +3160,6 @@ static uint32_t skl_wm_method2(uint32_t pixel_rate, uint32_t pipe_htotal, + return ret; + } + +-static bool skl_ddb_allocation_changed(const struct skl_ddb_allocation *new_ddb, +- const struct intel_crtc *intel_crtc) +-{ +- struct drm_device *dev = intel_crtc->base.dev; +- struct drm_i915_private *dev_priv = dev->dev_private; +- const struct skl_ddb_allocation *cur_ddb = &dev_priv->wm.skl_hw.ddb; +- +- /* +- * If ddb allocation of pipes changed, it may require recalculation of +- * watermarks +- */ +- if (memcmp(new_ddb->pipe, cur_ddb->pipe, sizeof(new_ddb->pipe))) +- return true; +- +- return false; +-} +- + static int skl_compute_plane_wm(const struct drm_i915_private *dev_priv, + struct intel_crtc_state *cstate, + struct intel_plane_state *intel_pstate, +@@ -3472,6 +3455,8 @@ static void skl_write_wm_values(struct drm_i915_private *dev_priv, + + if ((new->dirty_pipes & drm_crtc_mask(&crtc->base)) == 0) + continue; ++ if (!crtc->active) ++ continue; + + I915_WRITE(PIPE_WM_LINETIME(pipe), new->wm_linetime[pipe]); + +@@ -3655,66 +3640,9 @@ static int skl_update_pipe_wm(struct drm_crtc_state *cstate, + else + *changed = true; + +- intel_crtc->wm.active.skl = *pipe_wm; +- + return 0; + } + +-static void skl_update_other_pipe_wm(struct drm_device *dev, +- struct drm_crtc *crtc, +- struct skl_wm_values *r) +-{ +- struct intel_crtc *intel_crtc; +- struct intel_crtc *this_crtc = to_intel_crtc(crtc); +- +- /* +- * If the WM update hasn't changed the allocation for this_crtc (the +- * crtc we are currently computing the new WM values for), other +- * enabled crtcs will keep the same allocation and we don't need to +- * recompute anything for them. +- */ +- if (!skl_ddb_allocation_changed(&r->ddb, this_crtc)) +- return; +- +- /* +- * Otherwise, because of this_crtc being freshly enabled/disabled, the +- * other active pipes need new DDB allocation and WM values. +- */ +- for_each_intel_crtc(dev, intel_crtc) { +- struct skl_pipe_wm pipe_wm = {}; +- bool wm_changed; +- +- if (this_crtc->pipe == intel_crtc->pipe) +- continue; +- +- if (!intel_crtc->active) +- continue; +- +- skl_update_pipe_wm(intel_crtc->base.state, +- &r->ddb, &pipe_wm, &wm_changed); +- +- /* +- * If we end up re-computing the other pipe WM values, it's +- * because it was really needed, so we expect the WM values to +- * be different. +- */ +- WARN_ON(!wm_changed); +- +- skl_compute_wm_results(dev, &pipe_wm, r, intel_crtc); +- r->dirty_pipes |= drm_crtc_mask(&intel_crtc->base); +- } +-} +- +-static void skl_clear_wm(struct skl_wm_values *watermarks, enum pipe pipe) +-{ +- watermarks->wm_linetime[pipe] = 0; +- memset(watermarks->plane[pipe], 0, +- sizeof(uint32_t) * 8 * I915_MAX_PLANES); +- memset(watermarks->plane_trans[pipe], +- 0, sizeof(uint32_t) * I915_MAX_PLANES); +- watermarks->plane_trans[pipe][PLANE_CURSOR] = 0; +-} +- + static int + skl_compute_ddb(struct drm_atomic_state *state) + { +@@ -3722,6 +3650,7 @@ skl_compute_ddb(struct drm_atomic_state *state) + struct drm_i915_private *dev_priv = to_i915(dev); + struct intel_atomic_state *intel_state = to_intel_atomic_state(state); + struct intel_crtc *intel_crtc; ++ struct skl_ddb_allocation *ddb = &intel_state->wm_results.ddb; + unsigned realloc_pipes = dev_priv->active_crtcs; + int ret; + +@@ -3747,8 +3676,10 @@ skl_compute_ddb(struct drm_atomic_state *state) + * any other display updates race with this transaction, so we need + * to grab the lock on *all* CRTC's. + */ +- if (intel_state->active_pipe_changes) ++ if (intel_state->active_pipe_changes) { + realloc_pipes = ~0; ++ intel_state->wm_results.dirty_pipes = ~0; ++ } + + for_each_intel_crtc_mask(dev, intel_crtc, realloc_pipes) { + struct intel_crtc_state *cstate; +@@ -3757,7 +3688,7 @@ skl_compute_ddb(struct drm_atomic_state *state) + if (IS_ERR(cstate)) + return PTR_ERR(cstate); + +- ret = skl_allocate_pipe_ddb(cstate, &intel_state->ddb); ++ ret = skl_allocate_pipe_ddb(cstate, ddb); + if (ret) + return ret; + } +@@ -3770,8 +3701,11 @@ skl_compute_wm(struct drm_atomic_state *state) + { + struct drm_crtc *crtc; + struct drm_crtc_state *cstate; +- int ret, i; ++ struct intel_atomic_state *intel_state = to_intel_atomic_state(state); ++ struct skl_wm_values *results = &intel_state->wm_results; ++ struct skl_pipe_wm *pipe_wm; + bool changed = false; ++ int ret, i; + + /* + * If this transaction isn't actually touching any CRTC's, don't +@@ -3786,10 +3720,44 @@ skl_compute_wm(struct drm_atomic_state *state) + if (!changed) + return 0; + ++ /* Clear all dirty flags */ ++ results->dirty_pipes = 0; ++ + ret = skl_compute_ddb(state); + if (ret) + return ret; + ++ /* ++ * Calculate WM's for all pipes that are part of this transaction. ++ * Note that the DDB allocation above may have added more CRTC's that ++ * weren't otherwise being modified (and set bits in dirty_pipes) if ++ * pipe allocations had to change. ++ * ++ * FIXME: Now that we're doing this in the atomic check phase, we ++ * should allow skl_update_pipe_wm() to return failure in cases where ++ * no suitable watermark values can be found. ++ */ ++ for_each_crtc_in_state(state, crtc, cstate, i) { ++ struct intel_crtc *intel_crtc = to_intel_crtc(crtc); ++ struct intel_crtc_state *intel_cstate = ++ to_intel_crtc_state(cstate); ++ ++ pipe_wm = &intel_cstate->wm.skl.optimal; ++ ret = skl_update_pipe_wm(cstate, &results->ddb, pipe_wm, ++ &changed); ++ if (ret) ++ return ret; ++ ++ if (changed) ++ results->dirty_pipes |= drm_crtc_mask(crtc); ++ ++ if ((results->dirty_pipes & drm_crtc_mask(crtc)) == 0) ++ /* This pipe's WM's did not change */ ++ continue; ++ ++ skl_compute_wm_results(crtc->dev, pipe_wm, results, intel_crtc); ++ } ++ + return 0; + } + +@@ -3801,21 +3769,12 @@ static void skl_update_wm(struct drm_crtc *crtc) + struct skl_wm_values *results = &dev_priv->wm.skl_results; + struct intel_crtc_state *cstate = to_intel_crtc_state(crtc->state); + struct skl_pipe_wm *pipe_wm = &cstate->wm.skl.optimal; +- bool wm_changed; + +- /* Clear all dirty flags */ +- results->dirty_pipes = 0; +- +- skl_clear_wm(results, intel_crtc->pipe); +- +- skl_update_pipe_wm(crtc->state, &results->ddb, pipe_wm, &wm_changed); +- if (!wm_changed) ++ if ((results->dirty_pipes & drm_crtc_mask(crtc)) == 0) + return; + +- skl_compute_wm_results(dev, pipe_wm, results, intel_crtc); +- results->dirty_pipes |= drm_crtc_mask(&intel_crtc->base); ++ intel_crtc->wm.active.skl = *pipe_wm; + +- skl_update_other_pipe_wm(dev, crtc, results); + skl_write_wm_values(dev_priv, results); + skl_flush_wm_values(dev_priv, results); + +-- +2.7.4 + diff --git a/0016-drm-i915-gen9-Reject-display-updates-that-exceed-wm-.patch b/0016-drm-i915-gen9-Reject-display-updates-that-exceed-wm-.patch new file mode 100644 index 000000000..fb59572bd --- /dev/null +++ b/0016-drm-i915-gen9-Reject-display-updates-that-exceed-wm-.patch @@ -0,0 +1,63 @@ +From 7731c187f1f77501b7dddf419a06c1b42b0f1388 Mon Sep 17 00:00:00 2001 +From: Fedora Kernel Team +Date: Mon, 20 Jun 2016 12:42:00 +0200 +Subject: [PATCH 16/17] drm/i915/gen9: Reject display updates that exceed wm + limitations (v2) + +Upstream: since drm-intel-next-2016-05-22 +commit 6b6bada7d476b586d85b1f9df43125804877e09f + +Author: Matt Roper +AuthorDate: Thu May 12 07:06:10 2016 -0700 +Commit: Matt Roper +CommitDate: Fri May 13 07:36:04 2016 -0700 + + drm/i915/gen9: Reject display updates that exceed wm limitations (v2) + + If we can't find any valid level 0 watermark values for the requested + atomic transaction, reject the configuration before we try to start + programming the hardware. + + v2: + - Add extra debugging output when we reject level 0 watermarks so that + we can more easily debug how/why they were rejected. + + Cc: Lyude Paul + Signed-off-by: Matt Roper + Reviewed-by: Maarten Lankhorst + Link: http://patchwork.freedesktop.org/patch/msgid/1463061971-19638-17-git-send-email-matthew.d.roper@intel.com +--- + drivers/gpu/drm/i915/intel_pm.c | 17 ++++++++++++++++- + 1 file changed, 16 insertions(+), 1 deletion(-) + +diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c +index 73e5242..70dcd2e 100644 +--- a/drivers/gpu/drm/i915/intel_pm.c ++++ b/drivers/gpu/drm/i915/intel_pm.c +@@ -3245,7 +3245,22 @@ static int skl_compute_plane_wm(const struct drm_i915_private *dev_priv, + + if (res_blocks >= ddb_allocation || res_lines > 31) { + *enabled = false; +- return 0; ++ ++ /* ++ * If there are no valid level 0 watermarks, then we can't ++ * support this display configuration. ++ */ ++ if (level) { ++ return 0; ++ } else { ++ DRM_DEBUG_KMS("Requested display configuration exceeds system watermark limitations\n"); ++ DRM_DEBUG_KMS("Plane %d.%d: blocks required = %u/%u, lines required = %u/31\n", ++ to_intel_crtc(cstate->base.crtc)->pipe, ++ skl_wm_plane_id(to_intel_plane(pstate->plane)), ++ res_blocks, ddb_allocation, res_lines); ++ ++ return -EINVAL; ++ } + } + + *out_blocks = res_blocks; +-- +2.7.4 + diff --git a/0017-drm-i915-Remove-wm_config-from-dev_priv-intel_atomic.patch b/0017-drm-i915-Remove-wm_config-from-dev_priv-intel_atomic.patch new file mode 100644 index 000000000..e47725c25 --- /dev/null +++ b/0017-drm-i915-Remove-wm_config-from-dev_priv-intel_atomic.patch @@ -0,0 +1,115 @@ +From ebe515b1696401259781bc183e211a81287242f6 Mon Sep 17 00:00:00 2001 +From: Fedora Kernel Team +Date: Mon, 20 Jun 2016 12:42:13 +0200 +Subject: [PATCH 17/17] drm/i915: Remove wm_config from + dev_priv/intel_atomic_state + +Upstream: since drm-intel-next-2016-05-22 +commit 5b483747a92570176259bb896dcf2468291f3e42 + +Author: Matt Roper +AuthorDate: Thu May 12 07:06:11 2016 -0700 +Commit: Matt Roper +CommitDate: Fri May 13 07:36:05 2016 -0700 + + drm/i915: Remove wm_config from dev_priv/intel_atomic_state + + We calculate the watermark config into intel_atomic_state and then save + it into dev_priv, but never actually use it from there. This is + left-over from some early ILK-style watermark programming designs that + got changed over time. + + Signed-off-by: Matt Roper + Reviewed-by: Maarten Lankhorst + Link: http://patchwork.freedesktop.org/patch/msgid/1463061971-19638-18-git-send-email-matthew.d.roper@intel.com +--- + drivers/gpu/drm/i915/i915_drv.h | 3 --- + drivers/gpu/drm/i915/intel_display.c | 31 ------------------------------- + drivers/gpu/drm/i915/intel_drv.h | 1 - + 3 files changed, 35 deletions(-) + +diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h +index 67c76b6..59092cb 100644 +--- a/drivers/gpu/drm/i915/i915_drv.h ++++ b/drivers/gpu/drm/i915/i915_drv.h +@@ -1973,9 +1973,6 @@ struct drm_i915_private { + */ + uint16_t skl_latency[8]; + +- /* Committed wm config */ +- struct intel_wm_config config; +- + /* + * The skl_wm_values structure is a bit too big for stack + * allocation, so we keep the staging struct where we store +diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c +index 1726ea4..f5eefb1 100644 +--- a/drivers/gpu/drm/i915/intel_display.c ++++ b/drivers/gpu/drm/i915/intel_display.c +@@ -13226,35 +13226,6 @@ static int calc_watermark_data(struct drm_atomic_state *state) + { + struct drm_device *dev = state->dev; + struct drm_i915_private *dev_priv = to_i915(dev); +- struct intel_atomic_state *intel_state = to_intel_atomic_state(state); +- struct drm_crtc *crtc; +- struct drm_crtc_state *cstate; +- struct drm_plane *plane; +- struct drm_plane_state *pstate; +- +- /* +- * Calculate watermark configuration details now that derived +- * plane/crtc state is all properly updated. +- */ +- drm_for_each_crtc(crtc, dev) { +- cstate = drm_atomic_get_existing_crtc_state(state, crtc) ?: +- crtc->state; +- +- if (cstate->active) +- intel_state->wm_config.num_pipes_active++; +- } +- drm_for_each_legacy_plane(plane, dev) { +- pstate = drm_atomic_get_existing_plane_state(state, plane) ?: +- plane->state; +- +- if (!to_intel_plane_state(pstate)->visible) +- continue; +- +- intel_state->wm_config.sprites_enabled = true; +- if (pstate->crtc_w != pstate->src_w >> 16 || +- pstate->crtc_h != pstate->src_h >> 16) +- intel_state->wm_config.sprites_scaled = true; +- } + + /* Is there platform-specific watermark information to calculate? */ + if (dev_priv->display.compute_global_watermarks) +@@ -13520,7 +13491,6 @@ static int intel_atomic_commit(struct drm_device *dev, + } + + drm_atomic_helper_swap_state(dev, state); +- dev_priv->wm.config = to_intel_atomic_state(state)->wm_config; + dev_priv->wm.distrust_bios_wm = false; + dev_priv->wm.skl_results = intel_state->wm_results; + +@@ -15334,7 +15304,6 @@ retry: + } + + /* Write calculated watermark values back */ +- to_i915(dev)->wm.config = to_intel_atomic_state(state)->wm_config; + for_each_crtc_in_state(state, crtc, cstate, i) { + struct intel_crtc_state *cs = to_intel_crtc_state(cstate); + +diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h +index e5543b8..148f79d 100644 +--- a/drivers/gpu/drm/i915/intel_drv.h ++++ b/drivers/gpu/drm/i915/intel_drv.h +@@ -270,7 +270,6 @@ struct intel_atomic_state { + unsigned int min_pixclk[I915_MAX_PIPES]; + + struct intel_shared_dpll_config shared_dpll[I915_NUM_PLLS]; +- struct intel_wm_config wm_config; + + /* Gen9+ only */ + struct skl_wm_values wm_results; +-- +2.7.4 + diff --git a/ARM-mvebu-change-order-of-ethernet-DT-nodes-on-Armada-38x.patch b/ARM-mvebu-change-order-of-ethernet-DT-nodes-on-Armada-38x.patch deleted file mode 100644 index cff3d3339..000000000 --- a/ARM-mvebu-change-order-of-ethernet-DT-nodes-on-Armada-38x.patch +++ /dev/null @@ -1,101 +0,0 @@ -From patchwork Wed Jan 27 15:08:19 2016 -Content-Type: text/plain; charset="utf-8" -MIME-Version: 1.0 -Content-Transfer-Encoding: 7bit -Subject: [1/2] ARM: mvebu: change order of ethernet DT nodes on Armada 38x -From: Thomas Petazzoni -X-Patchwork-Id: 8134751 -Message-Id: <1453907300-28283-2-git-send-email-thomas.petazzoni@free-electrons.com> -To: Jason Cooper , Andrew Lunn , - Sebastian Hesselbarth , - Gregory Clement -Cc: Nadav Haklai , Lior Amsalem , - Thomas Petazzoni , - linux-arm-kernel@lists.infradead.org -Date: Wed, 27 Jan 2016 16:08:19 +0100 - -On Armada 38x, the available network interfaces are: - - - port 0, at 0x70000 - - port 1, at 0x30000 - - port 2, at 0x34000 - -Due to the rule saying that DT nodes should be ordered by register -addresses, the network interfaces are probed in this order: - - - port 1, at 0x30000, which gets named eth0 - - port 2, at 0x34000, which gets named eth1 - - port 0, at 0x70000, which gets named eth2 - -(if all three ports are enabled at the board level) - -Unfortunately, the network subsystem doesn't provide any way to rename -network interfaces from the kernel (it can only be done from -userspace). So, the default naming of the network interfaces is very -confusing as it doesn't match the datasheet, nor the naming of the -interfaces in the bootloader, nor the naming of the interfaces on -labels printed on the board. - -For example, on the Armada 388 GP, the board has two ports, labelled -GE0 and GE1. One has to know that GE0 is eth1 and GE1 is eth0, which -isn't really obvious. - -In order to solve this, this patch proposes to exceptionaly violate -the rule of "order DT nodes by register address", and put the 0x70000 -node before the 0x30000 node, so that network interfaces get named in -a more natural way. - -Signed-off-by: Thomas Petazzoni - ---- -arch/arm/boot/dts/armada-38x.dtsi | 30 +++++++++++++++++++++--------- - 1 file changed, 21 insertions(+), 9 deletions(-) - -diff --git a/arch/arm/boot/dts/armada-38x.dtsi b/arch/arm/boot/dts/armada-38x.dtsi -index e8b7f67..b50784d 100644 ---- a/arch/arm/boot/dts/armada-38x.dtsi -+++ b/arch/arm/boot/dts/armada-38x.dtsi -@@ -429,6 +429,27 @@ - reg = <0x22000 0x1000>; - }; - -+ /* -+ * As a special exception to the "order by -+ * register address" rule, the eth0 node is -+ * placed here to ensure that it gets -+ * registered as the first interface, since -+ * the network subsystem doesn't allow naming -+ * interfaces using DT aliases. Without this, -+ * the ordering of interfaces is different -+ * from the one used in U-Boot and the -+ * labeling of interfaces on the boards, which -+ * is very confusing for users. -+ */ -+ eth0: ethernet@70000 { -+ compatible = "marvell,armada-370-neta"; -+ reg = <0x70000 0x4000>; -+ interrupts-extended = <&mpic 8>; -+ clocks = <&gateclk 4>; -+ tx-csum-limit = <9800>; -+ status = "disabled"; -+ }; -+ - eth1: ethernet@30000 { - compatible = "marvell,armada-370-neta"; - reg = <0x30000 0x4000>; -@@ -493,15 +514,6 @@ - }; - }; - -- eth0: ethernet@70000 { -- compatible = "marvell,armada-370-neta"; -- reg = <0x70000 0x4000>; -- interrupts-extended = <&mpic 8>; -- clocks = <&gateclk 4>; -- tx-csum-limit = <9800>; -- status = "disabled"; -- }; -- - mdio: mdio@72004 { - #address-cells = <1>; - #size-cells = <0>; diff --git a/Add-EFI-signature-data-types.patch b/Add-EFI-signature-data-types.patch index 35f170abb..4bdea30ae 100644 --- a/Add-EFI-signature-data-types.patch +++ b/Add-EFI-signature-data-types.patch @@ -1,7 +1,7 @@ -From 47f6b5c281137394d627e275cb80980492d00d84 Mon Sep 17 00:00:00 2001 +From 24ceffbbe2764a31328e1146a2cf4bdcf85664e7 Mon Sep 17 00:00:00 2001 From: Dave Howells Date: Tue, 23 Oct 2012 09:30:54 -0400 -Subject: [PATCH 15/20] Add EFI signature data types +Subject: [PATCH] Add EFI signature data types Add the data types that are used for containing hashes, keys and certificates for cryptographic verification. @@ -15,12 +15,12 @@ Signed-off-by: David Howells 1 file changed, 20 insertions(+) diff --git a/include/linux/efi.h b/include/linux/efi.h -index 4dc970e..82d6218 100644 +index 333d0ca6940f..b3efb6d06344 100644 --- a/include/linux/efi.h +++ b/include/linux/efi.h -@@ -599,6 +599,12 @@ void efi_native_runtime_setup(void); - #define EFI_PROPERTIES_TABLE_GUID \ - EFI_GUID( 0x880aaca3, 0x4adc, 0x4a04, 0x90, 0x79, 0xb7, 0x47, 0x34, 0x08, 0x25, 0xe5 ) +@@ -603,6 +603,12 @@ void efi_native_runtime_setup(void); + EFI_GUID(0x3152bca5, 0xeade, 0x433d, \ + 0x86, 0x2e, 0xc0, 0x1c, 0xdc, 0x29, 0x1f, 0x44) +#define EFI_CERT_SHA256_GUID \ + EFI_GUID( 0xc1c41626, 0x504c, 0x4092, 0xac, 0xa9, 0x41, 0xf9, 0x36, 0x93, 0x43, 0x28 ) @@ -31,7 +31,7 @@ index 4dc970e..82d6218 100644 typedef struct { efi_guid_t guid; u64 table; -@@ -823,6 +829,20 @@ typedef struct { +@@ -827,6 +833,20 @@ typedef struct { #define EFI_INVALID_TABLE_ADDR (~0UL) diff --git a/Add-an-EFI-signature-blob-parser-and-key-loader.patch b/Add-an-EFI-signature-blob-parser-and-key-loader.patch index 06ddd1596..86a285581 100644 --- a/Add-an-EFI-signature-blob-parser-and-key-loader.patch +++ b/Add-an-EFI-signature-blob-parser-and-key-loader.patch @@ -36,10 +36,9 @@ diff --git a/crypto/asymmetric_keys/Makefile b/crypto/asymmetric_keys/Makefile index cd1406f9b14a..d9db380bbe53 100644 --- a/crypto/asymmetric_keys/Makefile +++ b/crypto/asymmetric_keys/Makefile -@@ -8,6 +8,7 @@ asymmetric_keys-y := asymmetric_type.o signature.o +@@ -7,5 +7,6 @@ asymmetric_keys-y := asymmetric_type.o signature.o obj-$(CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE) += public_key.o - obj-$(CONFIG_PUBLIC_KEY_ALGO_RSA) += rsa.o +obj-$(CONFIG_EFI_SIGNATURE_LIST_PARSER) += efi_parser.o # diff --git a/HID-sony-do-not-bail-out-when-the-sixaxis-refuses-th.patch b/HID-sony-do-not-bail-out-when-the-sixaxis-refuses-th.patch deleted file mode 100644 index b1a789e84..000000000 --- a/HID-sony-do-not-bail-out-when-the-sixaxis-refuses-th.patch +++ /dev/null @@ -1,49 +0,0 @@ -From 954d6154959c8c196fa4b89fc98a4fb377c6a38d Mon Sep 17 00:00:00 2001 -From: Benjamin Tissoires -Date: Fri, 8 Jan 2016 17:58:49 +0100 -Subject: [PATCH] HID: sony: do not bail out when the sixaxis refuses the - output report - -When setting the operational mode, some third party (Speedlink Strike-FX) -gamepads refuse the output report. Failing here means we refuse to -initialize the gamepad while this should be harmless. - -The weird part is that the initial commit that added this: a7de9b8 -("HID: sony: Enable Gasia third-party PS3 controllers") mentions this -very same controller as one requiring this output report. -Anyway, it's broken for one user at least, so let's change it. -We will report an error, but at least the controller should work. - -And no, these devices present themselves as legacy Sony controllers -(VID:PID of 054C:0268, as in the official ones) so there are no ways -of discriminating them from the official ones. - -https://bugzilla.redhat.com/show_bug.cgi?id=1255325 - -Reported-and-tested-by: Max Fedotov -Signed-off-by: Benjamin Tissoires -Signed-off-by: Jiri Kosina ---- - drivers/hid/hid-sony.c | 6 ++++-- - 1 file changed, 4 insertions(+), 2 deletions(-) - -diff --git a/drivers/hid/hid-sony.c b/drivers/hid/hid-sony.c -index 661f94f8ab8b..11f91c0c2458 100644 ---- a/drivers/hid/hid-sony.c -+++ b/drivers/hid/hid-sony.c -@@ -1411,8 +1411,10 @@ static int sixaxis_set_operational_usb(struct hid_device *hdev) - } - - ret = hid_hw_output_report(hdev, buf, 1); -- if (ret < 0) -- hid_err(hdev, "can't set operational mode: step 3\n"); -+ if (ret < 0) { -+ hid_info(hdev, "can't set operational mode: step 3, ignoring\n"); -+ ret = 0; -+ } - - out: - kfree(buf); --- -2.5.0 - diff --git a/Initial-AllWinner-A64-and-PINE64-support.patch b/Initial-AllWinner-A64-and-PINE64-support.patch index d21cbc1ca..966275a8f 100644 --- a/Initial-AllWinner-A64-and-PINE64-support.patch +++ b/Initial-AllWinner-A64-and-PINE64-support.patch @@ -6,7 +6,6 @@ Subject: [PATCH] Initial AllWinner A64 and PINE64 support --- Documentation/devicetree/bindings/arm/sunxi.txt | 1 + Documentation/devicetree/bindings/clock/sunxi.txt | 7 + - .../bindings/pinctrl/allwinner,sunxi-pinctrl.txt | 1 + .../devicetree/bindings/vendor-prefixes.txt | 1 + arch/arm/boot/dts/sun8i-h3.dtsi | 18 +- arch/arm/mach-sunxi/Kconfig | 7 + @@ -23,10 +22,6 @@ Subject: [PATCH] Initial AllWinner A64 and PINE64 support drivers/clk/sunxi/clk-multi-gates.c | 105 ++++ drivers/clk/sunxi/clk-sunxi.c | 4 +- drivers/crypto/Kconfig | 2 +- - drivers/pinctrl/sunxi/Kconfig | 4 + - drivers/pinctrl/sunxi/Makefile | 1 + - drivers/pinctrl/sunxi/pinctrl-sun50i-a64.c | 602 ++++++++++++++++++++ - drivers/rtc/Kconfig | 7 +- 23 files changed, 1582 insertions(+), 16 deletions(-) create mode 100644 arch/arm64/boot/dts/allwinner/Makefile create mode 100644 arch/arm64/boot/dts/allwinner/sun50i-a64-pine64-common.dtsi @@ -41,7 +36,7 @@ index bb9b0faa..8b39d2b 100644 --- a/Documentation/devicetree/bindings/arm/sunxi.txt +++ b/Documentation/devicetree/bindings/arm/sunxi.txt @@ -13,3 +13,4 @@ using one of the following compatible strings: - allwinner,sun8i-a33 + allwinner,sun8i-a83t allwinner,sun8i-h3 allwinner,sun9i-a80 + allwinner,sun50i-a64 @@ -70,18 +65,6 @@ index e59f57b..8af12b5 100644 The "allwinner,*-mmc-clk" clocks have three different outputs: the main clock, with the ID 0, and the output and sample clocks, with the IDs 1 and 2, respectively. -diff --git a/Documentation/devicetree/bindings/pinctrl/allwinner,sunxi-pinctrl.txt b/Documentation/devicetree/bindings/pinctrl/allwinner,sunxi-pinctrl.txt -index 9213b27..08b2361 100644 ---- a/Documentation/devicetree/bindings/pinctrl/allwinner,sunxi-pinctrl.txt -+++ b/Documentation/devicetree/bindings/pinctrl/allwinner,sunxi-pinctrl.txt -@@ -21,6 +21,7 @@ Required properties: - "allwinner,sun9i-a80-r-pinctrl" - "allwinner,sun8i-a83t-pinctrl" - "allwinner,sun8i-h3-pinctrl" -+ "allwinner,sun50i-a64-pinctrl" - - - reg: Should contain the register physical address and length for the - pin controller. diff --git a/Documentation/devicetree/bindings/vendor-prefixes.txt b/Documentation/devicetree/bindings/vendor-prefixes.txt index 72e2c5a..0c22fa9 100644 --- a/Documentation/devicetree/bindings/vendor-prefixes.txt @@ -181,11 +164,11 @@ diff --git a/arch/arm64/boot/dts/Makefile b/arch/arm64/boot/dts/Makefile index f832b8a..3b7428a 100644 --- a/arch/arm64/boot/dts/Makefile +++ b/arch/arm64/boot/dts/Makefile -@@ -1,3 +1,4 @@ +@@ -2,3 +2,4 @@ + dts-dirs += al +dts-dirs += allwinner dts-dirs += altera dts-dirs += amd - dts-dirs += apm diff --git a/arch/arm64/boot/dts/allwinner/Makefile b/arch/arm64/boot/dts/allwinner/Makefile new file mode 100644 index 0000000..1e29a5a @@ -1073,8 +1056,8 @@ index 171085a..cc89d1f 100644 --- a/drivers/clk/sunxi/clk-factors.h +++ b/drivers/clk/sunxi/clk-factors.h @@ -26,6 +26,7 @@ struct factors_data { - struct clk_factors_config *table; - void (*getter) (u32 *rate, u32 parent_rate, u8 *n, u8 *k, u8 *m, u8 *p); + void (*getter)(struct factors_request *req); + void (*recalc)(struct factors_request *req); const char *name; + int name_idx; }; @@ -1212,671 +1195,6 @@ index 5ba2188..ca59458 100644 }; static const struct factors_data sun5i_a13_ahb_data __initconst = { -diff --git a/drivers/crypto/Kconfig b/drivers/crypto/Kconfig -index 07d4942..737200f 100644 ---- a/drivers/crypto/Kconfig -+++ b/drivers/crypto/Kconfig -@@ -487,7 +487,7 @@ config CRYPTO_DEV_IMGTEC_HASH - - config CRYPTO_DEV_SUN4I_SS - tristate "Support for Allwinner Security System cryptographic accelerator" -- depends on ARCH_SUNXI -+ depends on ARCH_SUNXI && !64BIT - select CRYPTO_MD5 - select CRYPTO_SHA1 - select CRYPTO_AES -diff --git a/drivers/pinctrl/sunxi/Kconfig b/drivers/pinctrl/sunxi/Kconfig -index f8dbc8b..c1f970f 100644 ---- a/drivers/pinctrl/sunxi/Kconfig -+++ b/drivers/pinctrl/sunxi/Kconfig -@@ -64,4 +64,8 @@ config PINCTRL_SUN9I_A80_R - depends on RESET_CONTROLLER - select PINCTRL_SUNXI_COMMON - -+config PINCTRL_SUN50I_A64 -+ bool -+ select PINCTRL_SUNXI_COMMON -+ - endif -diff --git a/drivers/pinctrl/sunxi/Makefile b/drivers/pinctrl/sunxi/Makefile -index ef82f22..0ca7681 100644 ---- a/drivers/pinctrl/sunxi/Makefile -+++ b/drivers/pinctrl/sunxi/Makefile -@@ -12,6 +12,7 @@ obj-$(CONFIG_PINCTRL_SUN7I_A20) += pinctrl-sun7i-a20.o - obj-$(CONFIG_PINCTRL_SUN8I_A23) += pinctrl-sun8i-a23.o - obj-$(CONFIG_PINCTRL_SUN8I_A23_R) += pinctrl-sun8i-a23-r.o - obj-$(CONFIG_PINCTRL_SUN8I_A33) += pinctrl-sun8i-a33.o -+obj-$(CONFIG_PINCTRL_SUN50I_A64) += pinctrl-sun50i-a64.o - obj-$(CONFIG_PINCTRL_SUN8I_A83T) += pinctrl-sun8i-a83t.o - obj-$(CONFIG_PINCTRL_SUN8I_H3) += pinctrl-sun8i-h3.o - obj-$(CONFIG_PINCTRL_SUN9I_A80) += pinctrl-sun9i-a80.o -diff --git a/drivers/pinctrl/sunxi/pinctrl-sun50i-a64.c b/drivers/pinctrl/sunxi/pinctrl-sun50i-a64.c -new file mode 100644 -index 0000000..a53cc23 ---- /dev/null -+++ b/drivers/pinctrl/sunxi/pinctrl-sun50i-a64.c -@@ -0,0 +1,602 @@ -+/* -+ * Allwinner A64 SoCs pinctrl driver. -+ * -+ * Copyright (C) 2016 - ARM Ltd. -+ * Author: Andre Przywara -+ * -+ * Based on pinctrl-sun7i-a20.c, which is: -+ * Copyright (C) 2014 Maxime Ripard -+ * -+ * This file is licensed under the terms of the GNU General Public -+ * License version 2. This program is licensed "as is" without any -+ * warranty of any kind, whether express or implied. -+ */ -+ -+#include -+#include -+#include -+#include -+#include -+ -+#include "pinctrl-sunxi.h" -+ -+static const struct sunxi_desc_pin a64_pins[] = { -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 0), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "uart2"), /* TX */ -+ SUNXI_FUNCTION(0x4, "jtag"), /* MS0 */ -+ SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 0)), /* EINT0 */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 1), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "uart2"), /* RX */ -+ SUNXI_FUNCTION(0x4, "jtag"), /* CK0 */ -+ SUNXI_FUNCTION(0x5, "sim"), /* VCCEN */ -+ SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 1)), /* EINT1 */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 2), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "uart2"), /* RTS */ -+ SUNXI_FUNCTION(0x4, "jtag"), /* DO0 */ -+ SUNXI_FUNCTION(0x5, "sim"), /* VPPEN */ -+ SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 2)), /* EINT2 */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 3), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "uart2"), /* CTS */ -+ SUNXI_FUNCTION(0x3, "i2s0"), /* MCLK */ -+ SUNXI_FUNCTION(0x4, "jtag"), /* DI0 */ -+ SUNXI_FUNCTION(0x5, "sim"), /* VPPPP */ -+ SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 3)), /* EINT3 */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 4), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "aif2"), /* SYNC */ -+ SUNXI_FUNCTION(0x3, "i2s0"), /* SYNC */ -+ SUNXI_FUNCTION(0x5, "sim"), /* CLK */ -+ SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 4)), /* EINT4 */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 5), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "aif2"), /* BCLK */ -+ SUNXI_FUNCTION(0x3, "i2s0"), /* BCLK */ -+ SUNXI_FUNCTION(0x5, "sim"), /* DATA */ -+ SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 5)), /* EINT5 */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 6), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "aif2"), /* DOUT */ -+ SUNXI_FUNCTION(0x3, "i2s0"), /* DOUT */ -+ SUNXI_FUNCTION(0x5, "sim"), /* RST */ -+ SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 6)), /* EINT6 */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 7), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "aif2"), /* DIN */ -+ SUNXI_FUNCTION(0x3, "i2s0"), /* DIN */ -+ SUNXI_FUNCTION(0x5, "sim"), /* DET */ -+ SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 7)), /* EINT7 */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 8), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x4, "uart0"), /* TX */ -+ SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 8)), /* EINT8 */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 9), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x4, "uart0"), /* RX */ -+ SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 9)), /* EINT9 */ -+ /* Hole */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 0), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "nand0"), /* NWE */ -+ SUNXI_FUNCTION(0x4, "spi0")), /* MOSI */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 1), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "nand0"), /* NALE */ -+ SUNXI_FUNCTION(0x3, "mmc2"), /* DS */ -+ SUNXI_FUNCTION(0x4, "spi0")), /* MISO */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 2), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "nand0"), /* NCLE */ -+ SUNXI_FUNCTION(0x4, "spi0")), /* SCK */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 3), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "nand0"), /* NCE1 */ -+ SUNXI_FUNCTION(0x4, "spi0")), /* CS */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 4), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "nand0")), /* NCE0 */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 5), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "nand0"), /* NRE# */ -+ SUNXI_FUNCTION(0x3, "mmc2")), /* CLK */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 6), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "nand0"), /* NRB0 */ -+ SUNXI_FUNCTION(0x3, "mmc2")), /* CMD */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 7), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "nand0")), /* NRB1 */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 8), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "nand0"), /* NDQ0 */ -+ SUNXI_FUNCTION(0x3, "mmc2")), /* D0 */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 9), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "nand0"), /* NDQ1 */ -+ SUNXI_FUNCTION(0x3, "mmc2")), /* D1 */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 10), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "nand0"), /* NDQ2 */ -+ SUNXI_FUNCTION(0x3, "mmc2")), /* D2 */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 11), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "nand0"), /* NDQ3 */ -+ SUNXI_FUNCTION(0x3, "mmc2")), /* D3 */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 12), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "nand0"), /* NDQ4 */ -+ SUNXI_FUNCTION(0x3, "mmc2")), /* D4 */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 13), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "nand0"), /* NDQ5 */ -+ SUNXI_FUNCTION(0x3, "mmc2")), /* D5 */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 14), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "nand0"), /* NDQ6 */ -+ SUNXI_FUNCTION(0x3, "mmc2")), /* D6 */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 15), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "nand0"), /* NDQ7 */ -+ SUNXI_FUNCTION(0x3, "mmc2")), /* D7 */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 16), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "nand0"), /* NDQS */ -+ SUNXI_FUNCTION(0x3, "mmc2")), /* RST */ -+ /* Hole */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 0), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "lcd0"), /* D2 */ -+ SUNXI_FUNCTION(0x3, "uart3"), /* TX */ -+ SUNXI_FUNCTION(0x4, "spi1"), /* CS */ -+ SUNXI_FUNCTION(0x5, "ccir")), /* CLK */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 1), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "lcd0"), /* D3 */ -+ SUNXI_FUNCTION(0x3, "uart3"), /* RX */ -+ SUNXI_FUNCTION(0x4, "spi1"), /* CLK */ -+ SUNXI_FUNCTION(0x5, "ccir")), /* DE */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 2), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "lcd0"), /* D4 */ -+ SUNXI_FUNCTION(0x3, "uart4"), /* TX */ -+ SUNXI_FUNCTION(0x4, "spi1"), /* MOSI */ -+ SUNXI_FUNCTION(0x5, "ccir")), /* HSYNC */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 3), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "lcd0"), /* D5 */ -+ SUNXI_FUNCTION(0x3, "uart4"), /* RX */ -+ SUNXI_FUNCTION(0x4, "spi1"), /* MISO */ -+ SUNXI_FUNCTION(0x5, "ccir")), /* VSYNC */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 4), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "lcd0"), /* D6 */ -+ SUNXI_FUNCTION(0x3, "uart4"), /* RTS */ -+ SUNXI_FUNCTION(0x5, "ccir")), /* D0 */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 5), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "lcd0"), /* D7 */ -+ SUNXI_FUNCTION(0x3, "uart4"), /* CTS */ -+ SUNXI_FUNCTION(0x5, "ccir")), /* D1 */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 6), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "lcd0"), /* D10 */ -+ SUNXI_FUNCTION(0x5, "ccir")), /* D2 */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 7), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "lcd0"), /* D11 */ -+ SUNXI_FUNCTION(0x5, "ccir")), /* D3 */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 8), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "lcd0"), /* D12 */ -+ SUNXI_FUNCTION(0x4, "emac"), /* ERXD3 */ -+ SUNXI_FUNCTION(0x5, "ccir")), /* D4 */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 9), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "lcd0"), /* D13 */ -+ SUNXI_FUNCTION(0x4, "emac"), /* ERXD2 */ -+ SUNXI_FUNCTION(0x5, "ccir")), /* D5 */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 10), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "lcd0"), /* D14 */ -+ SUNXI_FUNCTION(0x4, "emac")), /* ERXD1 */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 11), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "lcd0"), /* D15 */ -+ SUNXI_FUNCTION(0x4, "emac")), /* ERXD0 */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 12), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "lcd0"), /* D18 */ -+ SUNXI_FUNCTION(0x3, "lvds0"), /* VP0 */ -+ SUNXI_FUNCTION(0x4, "emac")), /* ERXCK */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 13), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "lcd0"), /* D19 */ -+ SUNXI_FUNCTION(0x3, "lvds0"), /* VN0 */ -+ SUNXI_FUNCTION(0x4, "emac")), /* ERXCTL */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 14), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "lcd0"), /* D20 */ -+ SUNXI_FUNCTION(0x3, "lvds0"), /* VP1 */ -+ SUNXI_FUNCTION(0x4, "emac")), /* ENULL */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 15), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "lcd0"), /* D21 */ -+ SUNXI_FUNCTION(0x3, "lvds0"), /* VN1 */ -+ SUNXI_FUNCTION(0x4, "emac"), /* ETXD3 */ -+ SUNXI_FUNCTION(0x5, "ccir")), /* D6 */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 16), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "lcd0"), /* D22 */ -+ SUNXI_FUNCTION(0x3, "lvds0"), /* VP2 */ -+ SUNXI_FUNCTION(0x4, "emac"), /* ETXD2 */ -+ SUNXI_FUNCTION(0x5, "ccir")), /* D7 */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 17), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "lcd0"), /* D23 */ -+ SUNXI_FUNCTION(0x3, "lvds0"), /* VN2 */ -+ SUNXI_FUNCTION(0x4, "emac")), /* ETXD1 */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 18), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "lcd0"), /* CLK */ -+ SUNXI_FUNCTION(0x3, "lvds0"), /* VPC */ -+ SUNXI_FUNCTION(0x4, "emac")), /* ETXD0 */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 19), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "lcd0"), /* DE */ -+ SUNXI_FUNCTION(0x3, "lvds0"), /* VNC */ -+ SUNXI_FUNCTION(0x4, "emac")), /* ETXCK */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 20), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "lcd0"), /* HSYNC */ -+ SUNXI_FUNCTION(0x3, "lvds0"), /* VP3 */ -+ SUNXI_FUNCTION(0x4, "emac")), /* ETXCTL */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 21), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "lcd0"), /* VSYNC */ -+ SUNXI_FUNCTION(0x3, "lvds0"), /* VN3 */ -+ SUNXI_FUNCTION(0x4, "emac")), /* ECLKIN */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 22), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "pwm"), /* PWM0 */ -+ SUNXI_FUNCTION(0x4, "emac")), /* EMDC */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 23), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x4, "emac")), /* EMDIO */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 24), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out")), -+ /* Hole */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 0), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "csi0"), /* PCK */ -+ SUNXI_FUNCTION(0x4, "ts0")), /* CLK */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 1), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "csi0"), /* CK */ -+ SUNXI_FUNCTION(0x4, "ts0")), /* ERR */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 2), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "csi0"), /* HSYNC */ -+ SUNXI_FUNCTION(0x4, "ts0")), /* SYNC */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 3), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "csi0"), /* VSYNC */ -+ SUNXI_FUNCTION(0x4, "ts0")), /* DVLD */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 4), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "csi0"), /* D0 */ -+ SUNXI_FUNCTION(0x4, "ts0")), /* D0 */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 5), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "csi0"), /* D1 */ -+ SUNXI_FUNCTION(0x4, "ts0")), /* D1 */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 6), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "csi0"), /* D2 */ -+ SUNXI_FUNCTION(0x4, "ts0")), /* D2 */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 7), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "csi0"), /* D3 */ -+ SUNXI_FUNCTION(0x4, "ts0")), /* D3 */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 8), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "csi0"), /* D4 */ -+ SUNXI_FUNCTION(0x4, "ts0")), /* D4 */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 9), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "csi0"), /* D5 */ -+ SUNXI_FUNCTION(0x4, "ts0")), /* D5 */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 10), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "csi0"), /* D6 */ -+ SUNXI_FUNCTION(0x4, "ts0")), /* D6 */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 11), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "csi0"), /* D7 */ -+ SUNXI_FUNCTION(0x4, "ts0")), /* D7 */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 12), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "csi0")), /* SCK */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 13), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "csi0")), /* SDA */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 14), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "pll"), /* LOCK_DBG */ -+ SUNXI_FUNCTION(0x3, "i2c2")), /* SCK */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 15), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x3, "i2c2")), /* SDA */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 16), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out")), -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 17), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out")), -+ /* Hole */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 0), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "mmc0"), /* D1 */ -+ SUNXI_FUNCTION(0x3, "jtag")), /* MSI */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 1), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "mmc0"), /* D0 */ -+ SUNXI_FUNCTION(0x3, "jtag")), /* DI1 */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 2), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "mmc0"), /* CLK */ -+ SUNXI_FUNCTION(0x3, "uart0")), /* TX */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 3), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "mmc0"), /* CMD */ -+ SUNXI_FUNCTION(0x3, "jtag")), /* DO1 */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 4), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "mmc0"), /* D3 */ -+ SUNXI_FUNCTION(0x4, "uart0")), /* RX */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 5), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "mmc0"), /* D2 */ -+ SUNXI_FUNCTION(0x3, "jtag")), /* CK1 */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 6), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out")), -+ /* Hole */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 0), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "mmc1"), /* CLK */ -+ SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 0)), /* EINT0 */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 1), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "mmc1"), /* CMD */ -+ SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 1)), /* EINT1 */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 2), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "mmc1"), /* D0 */ -+ SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 2)), /* EINT2 */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 3), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "mmc1"), /* D1 */ -+ SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 3)), /* EINT3 */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 4), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "mmc1"), /* D2 */ -+ SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 4)), /* EINT4 */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 5), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "mmc1"), /* D3 */ -+ SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 5)), /* EINT5 */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 6), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "uart1"), /* TX */ -+ SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 6)), /* EINT6 */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 7), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "uart1"), /* RX */ -+ SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 7)), /* EINT7 */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 8), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "uart1"), /* RTS */ -+ SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 8)), /* EINT8 */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 9), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "uart1"), /* CTS */ -+ SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 9)), /* EINT9 */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 10), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "aif3"), /* SYNC */ -+ SUNXI_FUNCTION(0x3, "i2s1"), /* SYNC */ -+ SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 10)), /* EINT10 */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 11), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "aif3"), /* BCLK */ -+ SUNXI_FUNCTION(0x3, "i2s1"), /* BCLK */ -+ SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 11)), /* EINT11 */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 12), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "aif3"), /* DOUT */ -+ SUNXI_FUNCTION(0x3, "i2s1"), /* DOUT */ -+ SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 12)), /* EINT12 */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 13), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "aif3"), /* DIN */ -+ SUNXI_FUNCTION(0x3, "i2s1"), /* DIN */ -+ SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 13)), /* EINT13 */ -+ /* Hole */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 0), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "i2c0"), /* SCK */ -+ SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 0)), /* EINT0 */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 1), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "i2c0"), /* SDA */ -+ SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 1)), /* EINT1 */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 2), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "i2c1"), /* SCK */ -+ SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 2)), /* EINT2 */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 3), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "i2c1"), /* SDA */ -+ SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 3)), /* EINT3 */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 4), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "uart3"), /* TX */ -+ SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 4)), /* EINT4 */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 5), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "uart3"), /* RX */ -+ SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 5)), /* EINT5 */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 6), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "uart3"), /* RTS */ -+ SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 6)), /* EINT6 */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 7), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "uart3"), /* CTS */ -+ SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 7)), /* EINT7 */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 8), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "spdif"), /* OUT */ -+ SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 8)), /* EINT8 */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 9), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 9)), /* EINT9 */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 10), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "mic"), /* CLK */ -+ SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 10)), /* EINT10 */ -+ SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 11), -+ SUNXI_FUNCTION(0x0, "gpio_in"), -+ SUNXI_FUNCTION(0x1, "gpio_out"), -+ SUNXI_FUNCTION(0x2, "mic"), /* DATA */ -+ SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 11)), /* EINT11 */ -+}; -+ -+static const struct sunxi_pinctrl_desc a64_pinctrl_data = { -+ .pins = a64_pins, -+ .npins = ARRAY_SIZE(a64_pins), -+ .irq_banks = 3, -+}; -+ -+static int a64_pinctrl_probe(struct platform_device *pdev) -+{ -+ return sunxi_pinctrl_init(pdev, -+ &a64_pinctrl_data); -+} -+ -+static const struct of_device_id a64_pinctrl_match[] = { -+ { .compatible = "allwinner,sun50i-a64-pinctrl", }, -+ {} -+}; -+MODULE_DEVICE_TABLE(of, a64_pinctrl_match); -+ -+static struct platform_driver a64_pinctrl_driver = { -+ .probe = a64_pinctrl_probe, -+ .driver = { -+ .name = "sun50i-a64-pinctrl", -+ .of_match_table = a64_pinctrl_match, -+ }, -+}; -+builtin_platform_driver(a64_pinctrl_driver); -diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig -index 376322f..526eaf4 100644 ---- a/drivers/rtc/Kconfig -+++ b/drivers/rtc/Kconfig -@@ -1360,10 +1360,11 @@ config RTC_DRV_SUN4V - - config RTC_DRV_SUN6I - tristate "Allwinner A31 RTC" -- depends on MACH_SUN6I || MACH_SUN8I -+ default MACH_SUN6I || MACH_SUN8I -+ depends on ARCH_SUNXI - help -- If you say Y here you will get support for the RTC found on -- Allwinner A31. -+ If you say Y here you will get support for the RTC found in -+ some Allwinner SoCs like the A31 or the A64. - - config RTC_DRV_SUNXI - tristate "Allwinner sun4i/sun7i RTC" -- 2.5.0 diff --git a/KEYS-Fix-ASN.1-indefinite-length-object-parsing.patch b/KEYS-Fix-ASN.1-indefinite-length-object-parsing.patch deleted file mode 100644 index 957de0977..000000000 --- a/KEYS-Fix-ASN.1-indefinite-length-object-parsing.patch +++ /dev/null @@ -1,91 +0,0 @@ -From 23c8a812dc3c621009e4f0e5342aa4e2ede1ceaa Mon Sep 17 00:00:00 2001 -From: David Howells -Date: Tue, 23 Feb 2016 11:03:12 +0000 -Subject: [PATCH] KEYS: Fix ASN.1 indefinite length object parsing - -This fixes CVE-2016-0758. - -In the ASN.1 decoder, when the length field of an ASN.1 value is extracted, -it isn't validated against the remaining amount of data before being added -to the cursor. With a sufficiently large size indicated, the check: - - datalen - dp < 2 - -may then fail due to integer overflow. - -Fix this by checking the length indicated against the amount of remaining -data in both places a definite length is determined. - -Whilst we're at it, make the following changes: - - (1) Check the maximum size of extended length does not exceed the capacity - of the variable it's being stored in (len) rather than the type that - variable is assumed to be (size_t). - - (2) Compare the EOC tag to the symbolic constant ASN1_EOC rather than the - integer 0. - - (3) To reduce confusion, move the initialisation of len outside of: - - for (len = 0; n > 0; n--) { - - since it doesn't have anything to do with the loop counter n. - -Signed-off-by: David Howells -Reviewed-by: Mimi Zohar -Acked-by: David Woodhouse -Acked-by: Peter Jones ---- - lib/asn1_decoder.c | 16 +++++++++------- - 1 file changed, 9 insertions(+), 7 deletions(-) - -diff --git a/lib/asn1_decoder.c b/lib/asn1_decoder.c -index 2b3f46c049d4..554522934c44 100644 ---- a/lib/asn1_decoder.c -+++ b/lib/asn1_decoder.c -@@ -74,7 +74,7 @@ next_tag: - - /* Extract a tag from the data */ - tag = data[dp++]; -- if (tag == 0) { -+ if (tag == ASN1_EOC) { - /* It appears to be an EOC. */ - if (data[dp++] != 0) - goto invalid_eoc; -@@ -96,10 +96,8 @@ next_tag: - - /* Extract the length */ - len = data[dp++]; -- if (len <= 0x7f) { -- dp += len; -- goto next_tag; -- } -+ if (len <= 0x7f) -+ goto check_length; - - if (unlikely(len == ASN1_INDEFINITE_LENGTH)) { - /* Indefinite length */ -@@ -110,14 +108,18 @@ next_tag: - } - - n = len - 0x80; -- if (unlikely(n > sizeof(size_t) - 1)) -+ if (unlikely(n > sizeof(len) - 1)) - goto length_too_long; - if (unlikely(n > datalen - dp)) - goto data_overrun_error; -- for (len = 0; n > 0; n--) { -+ len = 0; -+ for (; n > 0; n--) { - len <<= 8; - len |= data[dp++]; - } -+check_length: -+ if (len > datalen - dp) -+ goto data_overrun_error; - dp += len; - goto next_tag; - --- -2.5.5 - diff --git a/arm-i.MX6-Utilite-device-dtb.patch b/arm-i.MX6-Utilite-device-dtb.patch index 1b98493b2..2476e17cc 100644 --- a/arm-i.MX6-Utilite-device-dtb.patch +++ b/arm-i.MX6-Utilite-device-dtb.patch @@ -1,6 +1,6 @@ -From 6809645a740693c8c7fe1f86e396ae4c0cdac9ff Mon Sep 17 00:00:00 2001 +From f7393b8c390f3a082224d1d73395c3536ef9f6a0 Mon Sep 17 00:00:00 2001 From: Peter Robinson -Date: Sun, 29 May 2016 11:34:51 +0100 +Date: Mon, 30 May 2016 16:41:37 +0100 Subject: [PATCH] arm: i.MX6 Utilite device dtb --- @@ -11,17 +11,17 @@ Subject: [PATCH] arm: i.MX6 Utilite device dtb create mode 100644 arch/arm/boot/dts/imx6q-utilite-pro.dts diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile -index a4a6d70..90a85a2 100644 +index 95c1923..e6738f8 100644 --- a/arch/arm/boot/dts/Makefile +++ b/arch/arm/boot/dts/Makefile -@@ -348,6 +348,7 @@ dtb-$(CONFIG_SOC_IMX6Q) += \ +@@ -362,6 +362,7 @@ dtb-$(CONFIG_SOC_IMX6Q) += \ imx6q-tx6q-1020-comtft.dtb \ imx6q-tx6q-1110.dtb \ imx6q-udoo.dtb \ + imx6q-utilite-pro.dtb \ imx6q-wandboard.dtb \ - imx6q-wandboard-revb1.dtb - dtb-$(CONFIG_SOC_IMX6SL) += \ + imx6q-wandboard-revb1.dtb \ + imx6qp-sabreauto.dtb \ diff --git a/arch/arm/boot/dts/imx6q-cm-fx6.dts b/arch/arm/boot/dts/imx6q-cm-fx6.dts index 99b46f8..f4fc22e 100644 --- a/arch/arm/boot/dts/imx6q-cm-fx6.dts diff --git a/arm64-avoid-needing-console-to-enable-serial-console.patch b/arm64-avoid-needing-console-to-enable-serial-console.patch index e8cc7bbe0..3c639a0a3 100644 --- a/arm64-avoid-needing-console-to-enable-serial-console.patch +++ b/arm64-avoid-needing-console-to-enable-serial-console.patch @@ -1,4 +1,4 @@ -From ede02df9a481ba07348e6fd4393ba2e273ef16d8 Mon Sep 17 00:00:00 2001 +From ce7a9e482dcf66d155e74b39ada1708cf6d9cb25 Mon Sep 17 00:00:00 2001 From: Mark Salter Date: Wed, 25 Mar 2015 14:17:50 -0400 Subject: [PATCH] arm64: avoid needing console= to enable serial console @@ -11,17 +11,17 @@ firmware. Signed-off-by: Mark Salter --- - arch/arm64/kernel/setup.c | 19 +++++++++++++++++++ - 1 file changed, 19 insertions(+) + arch/arm64/kernel/setup.c | 20 ++++++++++++++++++++ + 1 file changed, 20 insertions(+) diff --git a/arch/arm64/kernel/setup.c b/arch/arm64/kernel/setup.c -index 8119479..ea9ff80 100644 +index 9dc67769b6a4..dfac33b47423 100644 --- a/arch/arm64/kernel/setup.c +++ b/arch/arm64/kernel/setup.c -@@ -381,3 +381,22 @@ static int __init topology_init(void) +@@ -417,3 +417,22 @@ static int __init register_kernel_offset_dumper(void) return 0; } - subsys_initcall(topology_init); + __initcall(register_kernel_offset_dumper); + +/* + * Temporary hack to avoid need for console= on command line diff --git a/bcm283x-Pull-upstream-fixes-plus-iproc-mmc-driver.patch b/bcm283x-Pull-upstream-fixes-plus-iproc-mmc-driver.patch deleted file mode 100644 index 092e7206a..000000000 --- a/bcm283x-Pull-upstream-fixes-plus-iproc-mmc-driver.patch +++ /dev/null @@ -1,3526 +0,0 @@ -From 735f01326873349426f041a4fa2f5703a1ed43a4 Mon Sep 17 00:00:00 2001 -From: Eric Anholt -Date: Fri, 5 Feb 2016 15:06:15 -0800 -Subject: [PATCH 01/36] drm/vc4: Fix a framebuffer reference leak on async flip - interrupt. - -We'd need X to queue up an async pageflip while another is -outstanding, and then take a SIGIO. I think X actually avoids sending -out the next pageflip while one's already queued, but I'm not sure. - -Signed-off-by: Eric Anholt ---- - drivers/gpu/drm/vc4/vc4_crtc.c | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/drivers/gpu/drm/vc4/vc4_crtc.c b/drivers/gpu/drm/vc4/vc4_crtc.c -index 018145e..989ee72 100644 ---- a/drivers/gpu/drm/vc4/vc4_crtc.c -+++ b/drivers/gpu/drm/vc4/vc4_crtc.c -@@ -544,6 +544,7 @@ static int vc4_async_page_flip(struct drm_crtc *crtc, - /* Make sure all other async modesetes have landed. */ - ret = down_interruptible(&vc4->async_modeset); - if (ret) { -+ drm_framebuffer_unreference(fb); - kfree(flip_state); - return ret; - } --- -2.7.3 - -From e1ceac2cefbda12d1d9d9ee547fc0cc8bfeebde6 Mon Sep 17 00:00:00 2001 -From: Eric Anholt -Date: Fri, 12 Feb 2016 14:15:14 -0800 -Subject: [PATCH 02/36] drm/vc4: Bring HDMI up from power off if necessary. - -If the firmware hadn't brought up HDMI for us, we need to do its -power-on reset sequence (reset HD and and clear its STANDBY bits, -reset HDMI, and leave the PHY disabled). - -Signed-off-by: Eric Anholt ---- - drivers/gpu/drm/vc4/vc4_hdmi.c | 29 ++++++++++++++++++++++++++++- - drivers/gpu/drm/vc4/vc4_regs.h | 2 ++ - 2 files changed, 30 insertions(+), 1 deletion(-) - -diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c -index c69c046..6e55760 100644 ---- a/drivers/gpu/drm/vc4/vc4_hdmi.c -+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c -@@ -495,6 +495,16 @@ static int vc4_hdmi_bind(struct device *dev, struct device *master, void *data) - goto err_put_i2c; - } - -+ /* This is the rate that is set by the firmware. The number -+ * needs to be a bit higher than the pixel clock rate -+ * (generally 148.5Mhz). -+ */ -+ ret = clk_set_rate(hdmi->hsm_clock, 163682864); -+ if (ret) { -+ DRM_ERROR("Failed to set HSM clock rate: %d\n", ret); -+ goto err_unprepare_pix; -+ } -+ - ret = clk_prepare_enable(hdmi->hsm_clock); - if (ret) { - DRM_ERROR("Failed to turn on HDMI state machine clock: %d\n", -@@ -516,7 +526,24 @@ static int vc4_hdmi_bind(struct device *dev, struct device *master, void *data) - vc4->hdmi = hdmi; - - /* HDMI core must be enabled. */ -- WARN_ON_ONCE((HD_READ(VC4_HD_M_CTL) & VC4_HD_M_ENABLE) == 0); -+ if (!(HD_READ(VC4_HD_M_CTL) & VC4_HD_M_ENABLE)) { -+ HD_WRITE(VC4_HD_M_CTL, VC4_HD_M_SW_RST); -+ udelay(1); -+ HD_WRITE(VC4_HD_M_CTL, 0); -+ -+ HD_WRITE(VC4_HD_M_CTL, VC4_HD_M_ENABLE); -+ -+ HDMI_WRITE(VC4_HDMI_SW_RESET_CONTROL, -+ VC4_HDMI_SW_RESET_HDMI | -+ VC4_HDMI_SW_RESET_FORMAT_DETECT); -+ -+ HDMI_WRITE(VC4_HDMI_SW_RESET_CONTROL, 0); -+ -+ /* PHY should be in reset, like -+ * vc4_hdmi_encoder_disable() does. -+ */ -+ HDMI_WRITE(VC4_HDMI_TX_PHY_RESET_CTL, 0xf << 16); -+ } - - drm_encoder_init(drm, hdmi->encoder, &vc4_hdmi_encoder_funcs, - DRM_MODE_ENCODER_TMDS, NULL); -diff --git a/drivers/gpu/drm/vc4/vc4_regs.h b/drivers/gpu/drm/vc4/vc4_regs.h -index 4e52a0a..85c36d2 100644 ---- a/drivers/gpu/drm/vc4/vc4_regs.h -+++ b/drivers/gpu/drm/vc4/vc4_regs.h -@@ -456,6 +456,8 @@ - #define VC4_HDMI_TX_PHY_RESET_CTL 0x2c0 - - #define VC4_HD_M_CTL 0x00c -+# define VC4_HD_M_REGISTER_FILE_STANDBY (3 << 6) -+# define VC4_HD_M_RAM_STANDBY (3 << 4) - # define VC4_HD_M_SW_RST BIT(2) - # define VC4_HD_M_ENABLE BIT(0) - --- -2.7.3 - -From 63d38d99739736480b24c9f9bd7880ce4e49eb0c Mon Sep 17 00:00:00 2001 -From: Eric Anholt -Date: Fri, 12 Feb 2016 15:16:56 -0800 -Subject: [PATCH 03/36] drm/vc4: Add another reg to HDMI debug dumping. - -This is also involved in the HDMI setup sequence so it's nice to see -it. - -Signed-off-by: Eric Anholt ---- - drivers/gpu/drm/vc4/vc4_hdmi.c | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c -index 6e55760..56272ca 100644 ---- a/drivers/gpu/drm/vc4/vc4_hdmi.c -+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c -@@ -95,6 +95,7 @@ static const struct { - HDMI_REG(VC4_HDMI_SW_RESET_CONTROL), - HDMI_REG(VC4_HDMI_HOTPLUG_INT), - HDMI_REG(VC4_HDMI_HOTPLUG), -+ HDMI_REG(VC4_HDMI_RAM_PACKET_CONFIG), - HDMI_REG(VC4_HDMI_HORZA), - HDMI_REG(VC4_HDMI_HORZB), - HDMI_REG(VC4_HDMI_FIFO_CTL), --- -2.7.3 - -From 46e96facb9b67486285c26f88ee747b8d9f4abc9 Mon Sep 17 00:00:00 2001 -From: Eric Anholt -Date: Mon, 15 Feb 2016 17:06:02 -0800 -Subject: [PATCH 04/36] drm/vc4: Fix the name of the VSYNCD_EVEN register. - -It's used for delaying vsync in interlaced mode. - -Signed-off-by: Eric Anholt ---- - drivers/gpu/drm/vc4/vc4_crtc.c | 2 +- - drivers/gpu/drm/vc4/vc4_regs.h | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -diff --git a/drivers/gpu/drm/vc4/vc4_crtc.c b/drivers/gpu/drm/vc4/vc4_crtc.c -index 989ee72..5e84be2 100644 ---- a/drivers/gpu/drm/vc4/vc4_crtc.c -+++ b/drivers/gpu/drm/vc4/vc4_crtc.c -@@ -83,7 +83,7 @@ static const struct { - } crtc_regs[] = { - CRTC_REG(PV_CONTROL), - CRTC_REG(PV_V_CONTROL), -- CRTC_REG(PV_VSYNCD), -+ CRTC_REG(PV_VSYNCD_EVEN), - CRTC_REG(PV_HORZA), - CRTC_REG(PV_HORZB), - CRTC_REG(PV_VERTA), -diff --git a/drivers/gpu/drm/vc4/vc4_regs.h b/drivers/gpu/drm/vc4/vc4_regs.h -index 85c36d2..d529665 100644 ---- a/drivers/gpu/drm/vc4/vc4_regs.h -+++ b/drivers/gpu/drm/vc4/vc4_regs.h -@@ -187,7 +187,7 @@ - # define PV_VCONTROL_CONTINUOUS BIT(1) - # define PV_VCONTROL_VIDEN BIT(0) - --#define PV_VSYNCD 0x08 -+#define PV_VSYNCD_EVEN 0x08 - - #define PV_HORZA 0x0c - # define PV_HORZA_HBP_MASK VC4_MASK(31, 16) --- -2.7.3 - -From baff41935a7b4c1b6015a99a0ca222fd0a5552b9 Mon Sep 17 00:00:00 2001 -From: Eric Anholt -Date: Mon, 15 Feb 2016 17:31:41 -0800 -Subject: [PATCH 05/36] drm/vc4: Fix setting of vertical timings in the CRTC. - -It looks like when I went to add the interlaced bits, I just took the -existing PV_VERT* block and indented it, instead of copy and pasting -it first. Without this, changing resolution never worked. - -Signed-off-by: Eric Anholt ---- - drivers/gpu/drm/vc4/vc4_crtc.c | 10 ++++++++++ - 1 file changed, 10 insertions(+) - -diff --git a/drivers/gpu/drm/vc4/vc4_crtc.c b/drivers/gpu/drm/vc4/vc4_crtc.c -index 5e84be2..93d53c2 100644 ---- a/drivers/gpu/drm/vc4/vc4_crtc.c -+++ b/drivers/gpu/drm/vc4/vc4_crtc.c -@@ -212,6 +212,16 @@ static void vc4_crtc_mode_set_nofb(struct drm_crtc *crtc) - PV_HORZB_HFP) | - VC4_SET_FIELD(mode->hdisplay, PV_HORZB_HACTIVE)); - -+ CRTC_WRITE(PV_VERTA, -+ VC4_SET_FIELD(mode->vtotal - mode->vsync_end, -+ PV_VERTA_VBP) | -+ VC4_SET_FIELD(mode->vsync_end - mode->vsync_start, -+ PV_VERTA_VSYNC)); -+ CRTC_WRITE(PV_VERTB, -+ VC4_SET_FIELD(mode->vsync_start - mode->vdisplay, -+ PV_VERTB_VFP) | -+ VC4_SET_FIELD(vactive, PV_VERTB_VACTIVE)); -+ - if (interlace) { - CRTC_WRITE(PV_VERTA_EVEN, - VC4_SET_FIELD(mode->vtotal - mode->vsync_end - 1, --- -2.7.3 - -From 6f7cde6ad6e866660b8e5607a213872e5f34e8fd Mon Sep 17 00:00:00 2001 -From: Eric Anholt -Date: Tue, 16 Feb 2016 10:24:08 -0800 -Subject: [PATCH 06/36] drm/vc4: Initialize scaler DISPBKGND on modeset. - -We weren't updating the interlaced bit, so we'd scan out incorrectly -if the firmware had brought up the TV encoder and we were switching to -HDMI. - -Signed-off-by: Eric Anholt ---- - drivers/gpu/drm/vc4/vc4_crtc.c | 6 ++++++ - drivers/gpu/drm/vc4/vc4_regs.h | 14 ++++++++++++++ - 2 files changed, 20 insertions(+) - -diff --git a/drivers/gpu/drm/vc4/vc4_crtc.c b/drivers/gpu/drm/vc4/vc4_crtc.c -index 93d53c2..6ae5abc 100644 ---- a/drivers/gpu/drm/vc4/vc4_crtc.c -+++ b/drivers/gpu/drm/vc4/vc4_crtc.c -@@ -183,6 +183,8 @@ static int vc4_get_clock_select(struct drm_crtc *crtc) - - static void vc4_crtc_mode_set_nofb(struct drm_crtc *crtc) - { -+ struct drm_device *dev = crtc->dev; -+ struct vc4_dev *vc4 = to_vc4_dev(dev); - struct vc4_crtc *vc4_crtc = to_vc4_crtc(crtc); - struct drm_crtc_state *state = crtc->state; - struct drm_display_mode *mode = &state->adjusted_mode; -@@ -251,6 +253,10 @@ static void vc4_crtc_mode_set_nofb(struct drm_crtc *crtc) - PV_CONTROL_FIFO_CLR | - PV_CONTROL_EN); - -+ HVS_WRITE(SCALER_DISPBKGNDX(vc4_crtc->channel), -+ SCALER_DISPBKGND_AUTOHS | -+ (interlace ? SCALER_DISPBKGND_INTERLACE : 0)); -+ - if (debug_dump_regs) { - DRM_INFO("CRTC %d regs after:\n", drm_crtc_index(crtc)); - vc4_crtc_dump_regs(vc4_crtc); -diff --git a/drivers/gpu/drm/vc4/vc4_regs.h b/drivers/gpu/drm/vc4/vc4_regs.h -index d529665..7c29993 100644 ---- a/drivers/gpu/drm/vc4/vc4_regs.h -+++ b/drivers/gpu/drm/vc4/vc4_regs.h -@@ -350,6 +350,17 @@ - # define SCALER_DISPCTRLX_HEIGHT_SHIFT 0 - - #define SCALER_DISPBKGND0 0x00000044 -+# define SCALER_DISPBKGND_AUTOHS BIT(31) -+# define SCALER_DISPBKGND_INTERLACE BIT(30) -+# define SCALER_DISPBKGND_GAMMA BIT(29) -+# define SCALER_DISPBKGND_TESTMODE_MASK VC4_MASK(28, 25) -+# define SCALER_DISPBKGND_TESTMODE_SHIFT 25 -+/* Enables filling the scaler line with the RGB value in the low 24 -+ * bits before compositing. Costs cycles, so should be skipped if -+ * opaque display planes will cover everything. -+ */ -+# define SCALER_DISPBKGND_FILL BIT(24) -+ - #define SCALER_DISPSTAT0 0x00000048 - #define SCALER_DISPBASE0 0x0000004c - # define SCALER_DISPSTATX_MODE_MASK VC4_MASK(31, 30) -@@ -362,6 +373,9 @@ - # define SCALER_DISPSTATX_EMPTY BIT(28) - #define SCALER_DISPCTRL1 0x00000050 - #define SCALER_DISPBKGND1 0x00000054 -+#define SCALER_DISPBKGNDX(x) (SCALER_DISPBKGND0 + \ -+ (x) * (SCALER_DISPBKGND1 - \ -+ SCALER_DISPBKGND0)) - #define SCALER_DISPSTAT1 0x00000058 - #define SCALER_DISPSTATX(x) (SCALER_DISPSTAT0 + \ - (x) * (SCALER_DISPSTAT1 - \ --- -2.7.3 - -From 449c91f1f06a573ad4a3edd18d7b493bf44478f6 Mon Sep 17 00:00:00 2001 -From: Eric Anholt -Date: Mon, 28 Dec 2015 14:14:09 -0800 -Subject: [PATCH 07/36] drm/vc4: Improve comments on vc4_plane_state members. - -Signed-off-by: Eric Anholt ---- - drivers/gpu/drm/vc4/vc4_plane.c | 9 ++++++--- - 1 file changed, 6 insertions(+), 3 deletions(-) - -diff --git a/drivers/gpu/drm/vc4/vc4_plane.c b/drivers/gpu/drm/vc4/vc4_plane.c -index 0addbad..45e353d 100644 ---- a/drivers/gpu/drm/vc4/vc4_plane.c -+++ b/drivers/gpu/drm/vc4/vc4_plane.c -@@ -26,16 +26,19 @@ - - struct vc4_plane_state { - struct drm_plane_state base; -+ /* System memory copy of the display list for this element, computed -+ * at atomic_check time. -+ */ - u32 *dlist; -- u32 dlist_size; /* Number of dwords in allocated for the display list */ -+ u32 dlist_size; /* Number of dwords allocated for the display list */ - u32 dlist_count; /* Number of used dwords in the display list. */ - - /* Offset in the dlist to pointer word 0. */ - u32 pw0_offset; - - /* Offset where the plane's dlist was last stored in the -- hardware at vc4_crtc_atomic_flush() time. -- */ -+ * hardware at vc4_crtc_atomic_flush() time. -+ */ - u32 *hw_dlist; - }; - --- -2.7.3 - -From 4c8b2ce80659e1c7a75b7b54430dab320aeb440b Mon Sep 17 00:00:00 2001 -From: Eric Anholt -Date: Mon, 28 Dec 2015 14:14:57 -0800 -Subject: [PATCH 08/36] drm/vc4: Add missing __iomem annotation to hw_dlist. - -This is the pointer to the HVS device's memory where we stored the -contents of *dlist. - -Signed-off-by: Eric Anholt ---- - drivers/gpu/drm/vc4/vc4_plane.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/drivers/gpu/drm/vc4/vc4_plane.c b/drivers/gpu/drm/vc4/vc4_plane.c -index 45e353d..ed07ee5 100644 ---- a/drivers/gpu/drm/vc4/vc4_plane.c -+++ b/drivers/gpu/drm/vc4/vc4_plane.c -@@ -39,7 +39,7 @@ struct vc4_plane_state { - /* Offset where the plane's dlist was last stored in the - * hardware at vc4_crtc_atomic_flush() time. - */ -- u32 *hw_dlist; -+ u32 __iomem *hw_dlist; - }; - - static inline struct vc4_plane_state * --- -2.7.3 - -From f792f380190638916b495f3051547a849fc97fd2 Mon Sep 17 00:00:00 2001 -From: Eric Anholt -Date: Mon, 28 Dec 2015 14:34:44 -0800 -Subject: [PATCH 09/36] drm/vc4: Move the plane clipping/scaling setup to a - separate function. - -As we add actual scaling, this is going to get way more complicated. - -Signed-off-by: Eric Anholt ---- - drivers/gpu/drm/vc4/vc4_plane.c | 78 +++++++++++++++++++++++++++-------------- - 1 file changed, 52 insertions(+), 26 deletions(-) - -diff --git a/drivers/gpu/drm/vc4/vc4_plane.c b/drivers/gpu/drm/vc4/vc4_plane.c -index ed07ee5..554ed54 100644 ---- a/drivers/gpu/drm/vc4/vc4_plane.c -+++ b/drivers/gpu/drm/vc4/vc4_plane.c -@@ -40,6 +40,14 @@ struct vc4_plane_state { - * hardware at vc4_crtc_atomic_flush() time. - */ - u32 __iomem *hw_dlist; -+ -+ /* Clipped coordinates of the plane on the display. */ -+ int crtc_x, crtc_y, crtc_w, crtc_h; -+ -+ /* Offset to start scanning out from the start of the plane's -+ * BO. -+ */ -+ u32 offset; - }; - - static inline struct vc4_plane_state * -@@ -151,22 +159,17 @@ static void vc4_dlist_write(struct vc4_plane_state *vc4_state, u32 val) - vc4_state->dlist[vc4_state->dlist_count++] = val; - } - --/* Writes out a full display list for an active plane to the plane's -- * private dlist state. -- */ --static int vc4_plane_mode_set(struct drm_plane *plane, -- struct drm_plane_state *state) -+static int vc4_plane_setup_clipping_and_scaling(struct drm_plane_state *state) - { - struct vc4_plane_state *vc4_state = to_vc4_plane_state(state); - struct drm_framebuffer *fb = state->fb; -- struct drm_gem_cma_object *bo = drm_fb_cma_get_gem_obj(fb, 0); -- u32 ctl0_offset = vc4_state->dlist_count; -- const struct hvs_format *format = vc4_get_hvs_format(fb->pixel_format); -- uint32_t offset = fb->offsets[0]; -- int crtc_x = state->crtc_x; -- int crtc_y = state->crtc_y; -- int crtc_w = state->crtc_w; -- int crtc_h = state->crtc_h; -+ -+ vc4_state->offset = fb->offsets[0]; -+ -+ vc4_state->crtc_x = state->crtc_x; -+ vc4_state->crtc_y = state->crtc_y; -+ vc4_state->crtc_w = state->crtc_w; -+ vc4_state->crtc_h = state->crtc_h; - - if (state->crtc_w << 16 != state->src_w || - state->crtc_h << 16 != state->src_h) { -@@ -178,18 +181,41 @@ static int vc4_plane_mode_set(struct drm_plane *plane, - return -EINVAL; - } - -- if (crtc_x < 0) { -- offset += drm_format_plane_cpp(fb->pixel_format, 0) * -crtc_x; -- crtc_w += crtc_x; -- crtc_x = 0; -+ if (vc4_state->crtc_x < 0) { -+ vc4_state->offset += (drm_format_plane_cpp(fb->pixel_format, -+ 0) * -+ -vc4_state->crtc_x); -+ vc4_state->crtc_w += vc4_state->crtc_x; -+ vc4_state->crtc_x = 0; - } - -- if (crtc_y < 0) { -- offset += fb->pitches[0] * -crtc_y; -- crtc_h += crtc_y; -- crtc_y = 0; -+ if (vc4_state->crtc_y < 0) { -+ vc4_state->offset += fb->pitches[0] * -vc4_state->crtc_y; -+ vc4_state->crtc_h += vc4_state->crtc_y; -+ vc4_state->crtc_y = 0; - } - -+ return 0; -+} -+ -+ -+/* Writes out a full display list for an active plane to the plane's -+ * private dlist state. -+ */ -+static int vc4_plane_mode_set(struct drm_plane *plane, -+ struct drm_plane_state *state) -+{ -+ struct vc4_plane_state *vc4_state = to_vc4_plane_state(state); -+ struct drm_framebuffer *fb = state->fb; -+ struct drm_gem_cma_object *bo = drm_fb_cma_get_gem_obj(fb, 0); -+ u32 ctl0_offset = vc4_state->dlist_count; -+ const struct hvs_format *format = vc4_get_hvs_format(fb->pixel_format); -+ int ret; -+ -+ ret = vc4_plane_setup_clipping_and_scaling(state); -+ if (ret) -+ return ret; -+ - vc4_dlist_write(vc4_state, - SCALER_CTL0_VALID | - (format->pixel_order << SCALER_CTL0_ORDER_SHIFT) | -@@ -199,8 +225,8 @@ static int vc4_plane_mode_set(struct drm_plane *plane, - /* Position Word 0: Image Positions and Alpha Value */ - vc4_dlist_write(vc4_state, - VC4_SET_FIELD(0xff, SCALER_POS0_FIXED_ALPHA) | -- VC4_SET_FIELD(crtc_x, SCALER_POS0_START_X) | -- VC4_SET_FIELD(crtc_y, SCALER_POS0_START_Y)); -+ VC4_SET_FIELD(vc4_state->crtc_x, SCALER_POS0_START_X) | -+ VC4_SET_FIELD(vc4_state->crtc_y, SCALER_POS0_START_Y)); - - /* Position Word 1: Scaled Image Dimensions. - * Skipped due to SCALER_CTL0_UNITY scaling. -@@ -212,8 +238,8 @@ static int vc4_plane_mode_set(struct drm_plane *plane, - SCALER_POS2_ALPHA_MODE_PIPELINE : - SCALER_POS2_ALPHA_MODE_FIXED, - SCALER_POS2_ALPHA_MODE) | -- VC4_SET_FIELD(crtc_w, SCALER_POS2_WIDTH) | -- VC4_SET_FIELD(crtc_h, SCALER_POS2_HEIGHT)); -+ VC4_SET_FIELD(vc4_state->crtc_w, SCALER_POS2_WIDTH) | -+ VC4_SET_FIELD(vc4_state->crtc_h, SCALER_POS2_HEIGHT)); - - /* Position Word 3: Context. Written by the HVS. */ - vc4_dlist_write(vc4_state, 0xc0c0c0c0); -@@ -221,7 +247,7 @@ static int vc4_plane_mode_set(struct drm_plane *plane, - vc4_state->pw0_offset = vc4_state->dlist_count; - - /* Pointer Word 0: RGB / Y Pointer */ -- vc4_dlist_write(vc4_state, bo->paddr + offset); -+ vc4_dlist_write(vc4_state, bo->paddr + vc4_state->offset); - - /* Pointer Context Word 0: Written by the HVS */ - vc4_dlist_write(vc4_state, 0xc0c0c0c0); --- -2.7.3 - -From 696f1db279f08e58bc94172818209d5914e0e2d8 Mon Sep 17 00:00:00 2001 -From: Eric Anholt -Date: Wed, 30 Dec 2015 11:50:22 -0800 -Subject: [PATCH 10/36] drm/vc4: Add a proper short-circut path for legacy - cursor updates. - -Previously, on every modeset we would allocate new display list -memory, recompute changed planes, write all of them to the new memory, -and pointed scanout at the new list (which will latch approximately at -the next line of scanout). We let -drm_atomic_helper_wait_for_vblanks() decide whether we needed to wait -for a vblank after a modeset before cleaning up the old state and -letting the next modeset proceed, and on legacy cursor updates we -wouldn't wait. If you moved the cursor fast enough, we could -potentially wrap around the display list memory area and overwrite the -existing display list while it was still being scanned out, resulting -in the HVS scanning out garbage or just halting. - -Instead of making cursor updates wait for scanout to move to the new -display list area (which introduces significant cursor lag in X), we -just rewrite our current display list. - -Signed-off-by: Eric Anholt ---- - drivers/gpu/drm/vc4/vc4_kms.c | 9 ++++ - drivers/gpu/drm/vc4/vc4_plane.c | 94 ++++++++++++++++++++++++++++++++++++++--- - 2 files changed, 96 insertions(+), 7 deletions(-) - -diff --git a/drivers/gpu/drm/vc4/vc4_kms.c b/drivers/gpu/drm/vc4/vc4_kms.c -index f95f2df..4718ae5 100644 ---- a/drivers/gpu/drm/vc4/vc4_kms.c -+++ b/drivers/gpu/drm/vc4/vc4_kms.c -@@ -49,6 +49,15 @@ vc4_atomic_complete_commit(struct vc4_commit *c) - - drm_atomic_helper_commit_modeset_enables(dev, state); - -+ /* Make sure that drm_atomic_helper_wait_for_vblanks() -+ * actually waits for vblank. If we're doing a full atomic -+ * modeset (as opposed to a vc4_update_plane() short circuit), -+ * then we need to wait for scanout to be done with our -+ * display lists before we free it and potentially reallocate -+ * and overwrite the dlist memory with a new modeset. -+ */ -+ state->legacy_cursor_update = false; -+ - drm_atomic_helper_wait_for_vblanks(dev, state); - - drm_atomic_helper_cleanup_planes(dev, state); -diff --git a/drivers/gpu/drm/vc4/vc4_plane.c b/drivers/gpu/drm/vc4/vc4_plane.c -index 554ed54..713ec00 100644 ---- a/drivers/gpu/drm/vc4/vc4_plane.c -+++ b/drivers/gpu/drm/vc4/vc4_plane.c -@@ -33,8 +33,12 @@ struct vc4_plane_state { - u32 dlist_size; /* Number of dwords allocated for the display list */ - u32 dlist_count; /* Number of used dwords in the display list. */ - -- /* Offset in the dlist to pointer word 0. */ -- u32 pw0_offset; -+ /* Offset in the dlist to various words, for pageflip or -+ * cursor updates. -+ */ -+ u32 pos0_offset; -+ u32 pos2_offset; -+ u32 ptr0_offset; - - /* Offset where the plane's dlist was last stored in the - * hardware at vc4_crtc_atomic_flush() time. -@@ -223,6 +227,7 @@ static int vc4_plane_mode_set(struct drm_plane *plane, - SCALER_CTL0_UNITY); - - /* Position Word 0: Image Positions and Alpha Value */ -+ vc4_state->pos0_offset = vc4_state->dlist_count; - vc4_dlist_write(vc4_state, - VC4_SET_FIELD(0xff, SCALER_POS0_FIXED_ALPHA) | - VC4_SET_FIELD(vc4_state->crtc_x, SCALER_POS0_START_X) | -@@ -233,6 +238,7 @@ static int vc4_plane_mode_set(struct drm_plane *plane, - */ - - /* Position Word 2: Source Image Size, Alpha Mode */ -+ vc4_state->pos2_offset = vc4_state->dlist_count; - vc4_dlist_write(vc4_state, - VC4_SET_FIELD(format->has_alpha ? - SCALER_POS2_ALPHA_MODE_PIPELINE : -@@ -244,9 +250,8 @@ static int vc4_plane_mode_set(struct drm_plane *plane, - /* Position Word 3: Context. Written by the HVS. */ - vc4_dlist_write(vc4_state, 0xc0c0c0c0); - -- vc4_state->pw0_offset = vc4_state->dlist_count; -- - /* Pointer Word 0: RGB / Y Pointer */ -+ vc4_state->ptr0_offset = vc4_state->dlist_count; - vc4_dlist_write(vc4_state, bo->paddr + vc4_state->offset); - - /* Pointer Context Word 0: Written by the HVS */ -@@ -332,13 +337,13 @@ void vc4_plane_async_set_fb(struct drm_plane *plane, struct drm_framebuffer *fb) - * scanout will start from this address as soon as the FIFO - * needs to refill with pixels. - */ -- writel(addr, &vc4_state->hw_dlist[vc4_state->pw0_offset]); -+ writel(addr, &vc4_state->hw_dlist[vc4_state->ptr0_offset]); - - /* Also update the CPU-side dlist copy, so that any later - * atomic updates that don't do a new modeset on our plane - * also use our updated address. - */ -- vc4_state->dlist[vc4_state->pw0_offset] = addr; -+ vc4_state->dlist[vc4_state->ptr0_offset] = addr; - } - - static const struct drm_plane_helper_funcs vc4_plane_helper_funcs = { -@@ -354,8 +359,83 @@ static void vc4_plane_destroy(struct drm_plane *plane) - drm_plane_cleanup(plane); - } - -+/* Implements immediate (non-vblank-synced) updates of the cursor -+ * position, or falls back to the atomic helper otherwise. -+ */ -+static int -+vc4_update_plane(struct drm_plane *plane, -+ struct drm_crtc *crtc, -+ struct drm_framebuffer *fb, -+ int crtc_x, int crtc_y, -+ unsigned int crtc_w, unsigned int crtc_h, -+ uint32_t src_x, uint32_t src_y, -+ uint32_t src_w, uint32_t src_h) -+{ -+ struct drm_plane_state *plane_state; -+ struct vc4_plane_state *vc4_state; -+ -+ if (plane != crtc->cursor) -+ goto out; -+ -+ plane_state = plane->state; -+ vc4_state = to_vc4_plane_state(plane_state); -+ -+ if (!plane_state) -+ goto out; -+ -+ /* If we're changing the cursor contents, do that in the -+ * normal vblank-synced atomic path. -+ */ -+ if (fb != plane_state->fb) -+ goto out; -+ -+ /* No configuring new scaling in the fast path. */ -+ if (crtc_w != plane_state->crtc_w || -+ crtc_h != plane_state->crtc_h || -+ src_w != plane_state->src_w || -+ src_h != plane_state->src_h) { -+ goto out; -+ } -+ -+ /* Set the cursor's position on the screen. This is the -+ * expected change from the drm_mode_cursor_universal() -+ * helper. -+ */ -+ plane_state->crtc_x = crtc_x; -+ plane_state->crtc_y = crtc_y; -+ -+ /* Allow changing the start position within the cursor BO, if -+ * that matters. -+ */ -+ plane_state->src_x = src_x; -+ plane_state->src_y = src_y; -+ -+ /* Update the display list based on the new crtc_x/y. */ -+ vc4_plane_atomic_check(plane, plane_state); -+ -+ /* Note that we can't just call vc4_plane_write_dlist() -+ * because that would smash the context data that the HVS is -+ * currently using. -+ */ -+ writel(vc4_state->dlist[vc4_state->pos0_offset], -+ &vc4_state->hw_dlist[vc4_state->pos0_offset]); -+ writel(vc4_state->dlist[vc4_state->pos2_offset], -+ &vc4_state->hw_dlist[vc4_state->pos2_offset]); -+ writel(vc4_state->dlist[vc4_state->ptr0_offset], -+ &vc4_state->hw_dlist[vc4_state->ptr0_offset]); -+ -+ return 0; -+ -+out: -+ return drm_atomic_helper_update_plane(plane, crtc, fb, -+ crtc_x, crtc_y, -+ crtc_w, crtc_h, -+ src_x, src_y, -+ src_w, src_h); -+} -+ - static const struct drm_plane_funcs vc4_plane_funcs = { -- .update_plane = drm_atomic_helper_update_plane, -+ .update_plane = vc4_update_plane, - .disable_plane = drm_atomic_helper_disable_plane, - .destroy = vc4_plane_destroy, - .set_property = NULL, --- -2.7.3 - -From cd30019db690e3a92fe5d7d771352f118a105f82 Mon Sep 17 00:00:00 2001 -From: Eric Anholt -Date: Mon, 28 Dec 2015 13:25:41 -0800 -Subject: [PATCH 11/36] drm/vc4: Make the CRTCs cooperate on allocating display - lists. - -So far, we've only ever lit up one CRTC, so this has been fine. To -extend to more displays or more planes, we need to make sure we don't -run our display lists into each other. - -Signed-off-by: Eric Anholt ---- - drivers/gpu/drm/vc4/vc4_crtc.c | 115 +++++++++++++++++++++++------------------ - drivers/gpu/drm/vc4/vc4_drv.h | 8 ++- - drivers/gpu/drm/vc4/vc4_hvs.c | 13 +++++ - 3 files changed, 84 insertions(+), 52 deletions(-) - -diff --git a/drivers/gpu/drm/vc4/vc4_crtc.c b/drivers/gpu/drm/vc4/vc4_crtc.c -index 6ae5abc..9032c06 100644 ---- a/drivers/gpu/drm/vc4/vc4_crtc.c -+++ b/drivers/gpu/drm/vc4/vc4_crtc.c -@@ -49,22 +49,27 @@ struct vc4_crtc { - /* Which HVS channel we're using for our CRTC. */ - int channel; - -- /* Pointer to the actual hardware display list memory for the -- * crtc. -- */ -- u32 __iomem *dlist; -- -- u32 dlist_size; /* in dwords */ -- - struct drm_pending_vblank_event *event; - }; - -+struct vc4_crtc_state { -+ struct drm_crtc_state base; -+ /* Dlist area for this CRTC configuration. */ -+ struct drm_mm_node mm; -+}; -+ - static inline struct vc4_crtc * - to_vc4_crtc(struct drm_crtc *crtc) - { - return (struct vc4_crtc *)crtc; - } - -+static inline struct vc4_crtc_state * -+to_vc4_crtc_state(struct drm_crtc_state *crtc_state) -+{ -+ return (struct vc4_crtc_state *)crtc_state; -+} -+ - struct vc4_crtc_data { - /* Which channel of the HVS this pixelvalve sources from. */ - int hvs_channel; -@@ -335,11 +340,13 @@ static void vc4_crtc_enable(struct drm_crtc *crtc) - static int vc4_crtc_atomic_check(struct drm_crtc *crtc, - struct drm_crtc_state *state) - { -+ struct vc4_crtc_state *vc4_state = to_vc4_crtc_state(state); - struct drm_device *dev = crtc->dev; - struct vc4_dev *vc4 = to_vc4_dev(dev); - struct drm_plane *plane; -- struct vc4_crtc *vc4_crtc = to_vc4_crtc(crtc); -+ unsigned long flags; - u32 dlist_count = 0; -+ int ret; - - /* The pixelvalve can only feed one encoder (and encoders are - * 1:1 with connectors.) -@@ -362,18 +369,12 @@ static int vc4_crtc_atomic_check(struct drm_crtc *crtc, - - dlist_count++; /* Account for SCALER_CTL0_END. */ - -- if (!vc4_crtc->dlist || dlist_count > vc4_crtc->dlist_size) { -- vc4_crtc->dlist = ((u32 __iomem *)vc4->hvs->dlist + -- HVS_BOOTLOADER_DLIST_END); -- vc4_crtc->dlist_size = ((SCALER_DLIST_SIZE >> 2) - -- HVS_BOOTLOADER_DLIST_END); -- -- if (dlist_count > vc4_crtc->dlist_size) { -- DRM_DEBUG_KMS("dlist too large for CRTC (%d > %d).\n", -- dlist_count, vc4_crtc->dlist_size); -- return -EINVAL; -- } -- } -+ spin_lock_irqsave(&vc4->hvs->mm_lock, flags); -+ ret = drm_mm_insert_node(&vc4->hvs->dlist_mm, &vc4_state->mm, -+ dlist_count, 1, 0); -+ spin_unlock_irqrestore(&vc4->hvs->mm_lock, flags); -+ if (ret) -+ return ret; - - return 0; - } -@@ -384,47 +385,29 @@ static void vc4_crtc_atomic_flush(struct drm_crtc *crtc, - struct drm_device *dev = crtc->dev; - struct vc4_dev *vc4 = to_vc4_dev(dev); - struct vc4_crtc *vc4_crtc = to_vc4_crtc(crtc); -+ struct vc4_crtc_state *vc4_state = to_vc4_crtc_state(crtc->state); - struct drm_plane *plane; - bool debug_dump_regs = false; -- u32 __iomem *dlist_next = vc4_crtc->dlist; -+ u32 __iomem *dlist_start = vc4->hvs->dlist + vc4_state->mm.start; -+ u32 __iomem *dlist_next = dlist_start; - - if (debug_dump_regs) { - DRM_INFO("CRTC %d HVS before:\n", drm_crtc_index(crtc)); - vc4_hvs_dump_state(dev); - } - -- /* Copy all the active planes' dlist contents to the hardware dlist. -- * -- * XXX: If the new display list was large enough that it -- * overlapped a currently-read display list, we need to do -- * something like disable scanout before putting in the new -- * list. For now, we're safe because we only have the two -- * planes. -- */ -+ /* Copy all the active planes' dlist contents to the hardware dlist. */ - drm_atomic_crtc_for_each_plane(plane, crtc) { - dlist_next += vc4_plane_write_dlist(plane, dlist_next); - } - -- if (dlist_next == vc4_crtc->dlist) { -- /* If no planes were enabled, use the SCALER_CTL0_END -- * at the start of the display list memory (in the -- * bootloader section). We'll rewrite that -- * SCALER_CTL0_END, just in case, though. -- */ -- writel(SCALER_CTL0_END, vc4->hvs->dlist); -- HVS_WRITE(SCALER_DISPLISTX(vc4_crtc->channel), 0); -- } else { -- writel(SCALER_CTL0_END, dlist_next); -- dlist_next++; -- -- HVS_WRITE(SCALER_DISPLISTX(vc4_crtc->channel), -- (u32 __iomem *)vc4_crtc->dlist - -- (u32 __iomem *)vc4->hvs->dlist); -- -- /* Make the next display list start after ours. */ -- vc4_crtc->dlist_size -= (dlist_next - vc4_crtc->dlist); -- vc4_crtc->dlist = dlist_next; -- } -+ writel(SCALER_CTL0_END, dlist_next); -+ dlist_next++; -+ -+ WARN_ON_ONCE(dlist_next - dlist_start != vc4_state->mm.size); -+ -+ HVS_WRITE(SCALER_DISPLISTX(vc4_crtc->channel), -+ vc4_state->mm.start); - - if (debug_dump_regs) { - DRM_INFO("CRTC %d HVS after:\n", drm_crtc_index(crtc)); -@@ -590,6 +573,36 @@ static int vc4_page_flip(struct drm_crtc *crtc, - return drm_atomic_helper_page_flip(crtc, fb, event, flags); - } - -+static struct drm_crtc_state *vc4_crtc_duplicate_state(struct drm_crtc *crtc) -+{ -+ struct vc4_crtc_state *vc4_state; -+ -+ vc4_state = kzalloc(sizeof(*vc4_state), GFP_KERNEL); -+ if (!vc4_state) -+ return NULL; -+ -+ __drm_atomic_helper_crtc_duplicate_state(crtc, &vc4_state->base); -+ return &vc4_state->base; -+} -+ -+static void vc4_crtc_destroy_state(struct drm_crtc *crtc, -+ struct drm_crtc_state *state) -+{ -+ struct vc4_dev *vc4 = to_vc4_dev(crtc->dev); -+ struct vc4_crtc_state *vc4_state = to_vc4_crtc_state(state); -+ -+ if (vc4_state->mm.allocated) { -+ unsigned long flags; -+ -+ spin_lock_irqsave(&vc4->hvs->mm_lock, flags); -+ drm_mm_remove_node(&vc4_state->mm); -+ spin_unlock_irqrestore(&vc4->hvs->mm_lock, flags); -+ -+ } -+ -+ __drm_atomic_helper_crtc_destroy_state(crtc, state); -+} -+ - static const struct drm_crtc_funcs vc4_crtc_funcs = { - .set_config = drm_atomic_helper_set_config, - .destroy = vc4_crtc_destroy, -@@ -598,8 +611,8 @@ static const struct drm_crtc_funcs vc4_crtc_funcs = { - .cursor_set = NULL, /* handled by drm_mode_cursor_universal */ - .cursor_move = NULL, /* handled by drm_mode_cursor_universal */ - .reset = drm_atomic_helper_crtc_reset, -- .atomic_duplicate_state = drm_atomic_helper_crtc_duplicate_state, -- .atomic_destroy_state = drm_atomic_helper_crtc_destroy_state, -+ .atomic_duplicate_state = vc4_crtc_duplicate_state, -+ .atomic_destroy_state = vc4_crtc_destroy_state, - }; - - static const struct drm_crtc_helper_funcs vc4_crtc_helper_funcs = { -diff --git a/drivers/gpu/drm/vc4/vc4_drv.h b/drivers/gpu/drm/vc4/vc4_drv.h -index 51a6333..38a31c7 100644 ---- a/drivers/gpu/drm/vc4/vc4_drv.h -+++ b/drivers/gpu/drm/vc4/vc4_drv.h -@@ -154,7 +154,13 @@ struct vc4_v3d { - struct vc4_hvs { - struct platform_device *pdev; - void __iomem *regs; -- void __iomem *dlist; -+ u32 __iomem *dlist; -+ -+ /* Memory manager for CRTCs to allocate space in the display -+ * list. Units are dwords. -+ */ -+ struct drm_mm dlist_mm; -+ spinlock_t mm_lock; - }; - - struct vc4_plane { -diff --git a/drivers/gpu/drm/vc4/vc4_hvs.c b/drivers/gpu/drm/vc4/vc4_hvs.c -index 8098c5b..9e43554 100644 ---- a/drivers/gpu/drm/vc4/vc4_hvs.c -+++ b/drivers/gpu/drm/vc4/vc4_hvs.c -@@ -119,6 +119,17 @@ static int vc4_hvs_bind(struct device *dev, struct device *master, void *data) - - hvs->dlist = hvs->regs + SCALER_DLIST_START; - -+ spin_lock_init(&hvs->mm_lock); -+ -+ /* Set up the HVS display list memory manager. We never -+ * overwrite the setup from the bootloader (just 128b out of -+ * our 16K), since we don't want to scramble the screen when -+ * transitioning from the firmware's boot setup to runtime. -+ */ -+ drm_mm_init(&hvs->dlist_mm, -+ HVS_BOOTLOADER_DLIST_END, -+ (SCALER_DLIST_SIZE >> 2) - HVS_BOOTLOADER_DLIST_END); -+ - vc4->hvs = hvs; - return 0; - } -@@ -129,6 +140,8 @@ static void vc4_hvs_unbind(struct device *dev, struct device *master, - struct drm_device *drm = dev_get_drvdata(master); - struct vc4_dev *vc4 = drm->dev_private; - -+ drm_mm_takedown(&vc4->hvs->dlist_mm); -+ - vc4->hvs = NULL; - } - --- -2.7.3 - -From 7934fe9bdbbe2ffb4bcfe656a22a8f9f4e3d266a Mon Sep 17 00:00:00 2001 -From: Eric Anholt -Date: Mon, 28 Dec 2015 14:45:25 -0800 -Subject: [PATCH 12/36] drm/vc4: Fix which value is being used for source image - size. - -This doesn't matter yet since we only allow 1:1 scaling, but the -comment clearly says we should be using the source size. - -Signed-off-by: Eric Anholt ---- - drivers/gpu/drm/vc4/vc4_plane.c | 23 ++++++++++++++--------- - 1 file changed, 14 insertions(+), 9 deletions(-) - -diff --git a/drivers/gpu/drm/vc4/vc4_plane.c b/drivers/gpu/drm/vc4/vc4_plane.c -index 713ec00..d9c9290 100644 ---- a/drivers/gpu/drm/vc4/vc4_plane.c -+++ b/drivers/gpu/drm/vc4/vc4_plane.c -@@ -47,6 +47,8 @@ struct vc4_plane_state { - - /* Clipped coordinates of the plane on the display. */ - int crtc_x, crtc_y, crtc_w, crtc_h; -+ /* Clipped size of the area scanned from in the FB. */ -+ u32 src_w, src_h; - - /* Offset to start scanning out from the start of the plane's - * BO. -@@ -170,11 +172,6 @@ static int vc4_plane_setup_clipping_and_scaling(struct drm_plane_state *state) - - vc4_state->offset = fb->offsets[0]; - -- vc4_state->crtc_x = state->crtc_x; -- vc4_state->crtc_y = state->crtc_y; -- vc4_state->crtc_w = state->crtc_w; -- vc4_state->crtc_h = state->crtc_h; -- - if (state->crtc_w << 16 != state->src_w || - state->crtc_h << 16 != state->src_h) { - /* We don't support scaling yet, which involves -@@ -185,17 +182,25 @@ static int vc4_plane_setup_clipping_and_scaling(struct drm_plane_state *state) - return -EINVAL; - } - -+ vc4_state->src_w = state->src_w >> 16; -+ vc4_state->src_h = state->src_h >> 16; -+ -+ vc4_state->crtc_x = state->crtc_x; -+ vc4_state->crtc_y = state->crtc_y; -+ vc4_state->crtc_w = state->crtc_w; -+ vc4_state->crtc_h = state->crtc_h; -+ - if (vc4_state->crtc_x < 0) { - vc4_state->offset += (drm_format_plane_cpp(fb->pixel_format, - 0) * - -vc4_state->crtc_x); -- vc4_state->crtc_w += vc4_state->crtc_x; -+ vc4_state->src_w += vc4_state->crtc_x; - vc4_state->crtc_x = 0; - } - - if (vc4_state->crtc_y < 0) { - vc4_state->offset += fb->pitches[0] * -vc4_state->crtc_y; -- vc4_state->crtc_h += vc4_state->crtc_y; -+ vc4_state->src_h += vc4_state->crtc_y; - vc4_state->crtc_y = 0; - } - -@@ -244,8 +249,8 @@ static int vc4_plane_mode_set(struct drm_plane *plane, - SCALER_POS2_ALPHA_MODE_PIPELINE : - SCALER_POS2_ALPHA_MODE_FIXED, - SCALER_POS2_ALPHA_MODE) | -- VC4_SET_FIELD(vc4_state->crtc_w, SCALER_POS2_WIDTH) | -- VC4_SET_FIELD(vc4_state->crtc_h, SCALER_POS2_HEIGHT)); -+ VC4_SET_FIELD(vc4_state->src_w, SCALER_POS2_WIDTH) | -+ VC4_SET_FIELD(vc4_state->src_h, SCALER_POS2_HEIGHT)); - - /* Position Word 3: Context. Written by the HVS. */ - vc4_dlist_write(vc4_state, 0xc0c0c0c0); --- -2.7.3 - -From e710e8e1d13c85a635c09168df6d008955ac5a4e Mon Sep 17 00:00:00 2001 -From: Eric Anholt -Date: Tue, 20 Oct 2015 16:06:57 +0100 -Subject: [PATCH 13/36] drm/vc4: Add support for scaling of display planes. - -This implements a simple policy for choosing scaling modes -(trapezoidal for decimation, PPF for magnification), and a single PPF -filter (Mitchell/Netravali's recommendation). - -Signed-off-by: Eric Anholt ---- - drivers/gpu/drm/vc4/vc4_drv.h | 4 + - drivers/gpu/drm/vc4/vc4_hvs.c | 84 +++++++++++++ - drivers/gpu/drm/vc4/vc4_plane.c | 253 +++++++++++++++++++++++++++++++++++++--- - drivers/gpu/drm/vc4/vc4_regs.h | 46 ++++++++ - 4 files changed, 374 insertions(+), 13 deletions(-) - -diff --git a/drivers/gpu/drm/vc4/vc4_drv.h b/drivers/gpu/drm/vc4/vc4_drv.h -index 38a31c7..83db0b7 100644 ---- a/drivers/gpu/drm/vc4/vc4_drv.h -+++ b/drivers/gpu/drm/vc4/vc4_drv.h -@@ -160,7 +160,11 @@ struct vc4_hvs { - * list. Units are dwords. - */ - struct drm_mm dlist_mm; -+ /* Memory manager for the LBM memory used by HVS scaling. */ -+ struct drm_mm lbm_mm; - spinlock_t mm_lock; -+ -+ struct drm_mm_node mitchell_netravali_filter; - }; - - struct vc4_plane { -diff --git a/drivers/gpu/drm/vc4/vc4_hvs.c b/drivers/gpu/drm/vc4/vc4_hvs.c -index 9e43554..6fbab1c 100644 ---- a/drivers/gpu/drm/vc4/vc4_hvs.c -+++ b/drivers/gpu/drm/vc4/vc4_hvs.c -@@ -100,12 +100,76 @@ int vc4_hvs_debugfs_regs(struct seq_file *m, void *unused) - } - #endif - -+/* The filter kernel is composed of dwords each containing 3 9-bit -+ * signed integers packed next to each other. -+ */ -+#define VC4_INT_TO_COEFF(coeff) (coeff & 0x1ff) -+#define VC4_PPF_FILTER_WORD(c0, c1, c2) \ -+ ((((c0) & 0x1ff) << 0) | \ -+ (((c1) & 0x1ff) << 9) | \ -+ (((c2) & 0x1ff) << 18)) -+ -+/* The whole filter kernel is arranged as the coefficients 0-16 going -+ * up, then a pad, then 17-31 going down and reversed within the -+ * dwords. This means that a linear phase kernel (where it's -+ * symmetrical at the boundary between 15 and 16) has the last 5 -+ * dwords matching the first 5, but reversed. -+ */ -+#define VC4_LINEAR_PHASE_KERNEL(c0, c1, c2, c3, c4, c5, c6, c7, c8, \ -+ c9, c10, c11, c12, c13, c14, c15) \ -+ {VC4_PPF_FILTER_WORD(c0, c1, c2), \ -+ VC4_PPF_FILTER_WORD(c3, c4, c5), \ -+ VC4_PPF_FILTER_WORD(c6, c7, c8), \ -+ VC4_PPF_FILTER_WORD(c9, c10, c11), \ -+ VC4_PPF_FILTER_WORD(c12, c13, c14), \ -+ VC4_PPF_FILTER_WORD(c15, c15, 0)} -+ -+#define VC4_LINEAR_PHASE_KERNEL_DWORDS 6 -+#define VC4_KERNEL_DWORDS (VC4_LINEAR_PHASE_KERNEL_DWORDS * 2 - 1) -+ -+/* Recommended B=1/3, C=1/3 filter choice from Mitchell/Netravali. -+ * http://www.cs.utexas.edu/~fussell/courses/cs384g/lectures/mitchell/Mitchell.pdf -+ */ -+static const u32 mitchell_netravali_1_3_1_3_kernel[] = -+ VC4_LINEAR_PHASE_KERNEL(0, -2, -6, -8, -10, -8, -3, 2, 18, -+ 50, 82, 119, 155, 187, 213, 227); -+ -+static int vc4_hvs_upload_linear_kernel(struct vc4_hvs *hvs, -+ struct drm_mm_node *space, -+ const u32 *kernel) -+{ -+ int ret, i; -+ u32 __iomem *dst_kernel; -+ -+ ret = drm_mm_insert_node(&hvs->dlist_mm, space, VC4_KERNEL_DWORDS, 1, -+ 0); -+ if (ret) { -+ DRM_ERROR("Failed to allocate space for filter kernel: %d\n", -+ ret); -+ return ret; -+ } -+ -+ dst_kernel = hvs->dlist + space->start; -+ -+ for (i = 0; i < VC4_KERNEL_DWORDS; i++) { -+ if (i < VC4_LINEAR_PHASE_KERNEL_DWORDS) -+ writel(kernel[i], &dst_kernel[i]); -+ else { -+ writel(kernel[VC4_KERNEL_DWORDS - i - 1], -+ &dst_kernel[i]); -+ } -+ } -+ -+ return 0; -+} -+ - static int vc4_hvs_bind(struct device *dev, struct device *master, void *data) - { - struct platform_device *pdev = to_platform_device(dev); - struct drm_device *drm = dev_get_drvdata(master); - struct vc4_dev *vc4 = drm->dev_private; - struct vc4_hvs *hvs = NULL; -+ int ret; - - hvs = devm_kzalloc(&pdev->dev, sizeof(*hvs), GFP_KERNEL); - if (!hvs) -@@ -130,6 +194,22 @@ static int vc4_hvs_bind(struct device *dev, struct device *master, void *data) - HVS_BOOTLOADER_DLIST_END, - (SCALER_DLIST_SIZE >> 2) - HVS_BOOTLOADER_DLIST_END); - -+ /* Set up the HVS LBM memory manager. We could have some more -+ * complicated data structure that allowed reuse of LBM areas -+ * between planes when they don't overlap on the screen, but -+ * for now we just allocate globally. -+ */ -+ drm_mm_init(&hvs->lbm_mm, 0, 96 * 1024); -+ -+ /* Upload filter kernels. We only have the one for now, so we -+ * keep it around for the lifetime of the driver. -+ */ -+ ret = vc4_hvs_upload_linear_kernel(hvs, -+ &hvs->mitchell_netravali_filter, -+ mitchell_netravali_1_3_1_3_kernel); -+ if (ret) -+ return ret; -+ - vc4->hvs = hvs; - return 0; - } -@@ -140,7 +220,11 @@ static void vc4_hvs_unbind(struct device *dev, struct device *master, - struct drm_device *drm = dev_get_drvdata(master); - struct vc4_dev *vc4 = drm->dev_private; - -+ if (vc4->hvs->mitchell_netravali_filter.allocated) -+ drm_mm_remove_node(&vc4->hvs->mitchell_netravali_filter); -+ - drm_mm_takedown(&vc4->hvs->dlist_mm); -+ drm_mm_takedown(&vc4->hvs->lbm_mm); - - vc4->hvs = NULL; - } -diff --git a/drivers/gpu/drm/vc4/vc4_plane.c b/drivers/gpu/drm/vc4/vc4_plane.c -index d9c9290..7c2d697 100644 ---- a/drivers/gpu/drm/vc4/vc4_plane.c -+++ b/drivers/gpu/drm/vc4/vc4_plane.c -@@ -24,6 +24,12 @@ - #include "drm_fb_cma_helper.h" - #include "drm_plane_helper.h" - -+enum vc4_scaling_mode { -+ VC4_SCALING_NONE, -+ VC4_SCALING_TPZ, -+ VC4_SCALING_PPF, -+}; -+ - struct vc4_plane_state { - struct drm_plane_state base; - /* System memory copy of the display list for this element, computed -@@ -47,13 +53,19 @@ struct vc4_plane_state { - - /* Clipped coordinates of the plane on the display. */ - int crtc_x, crtc_y, crtc_w, crtc_h; -- /* Clipped size of the area scanned from in the FB. */ -- u32 src_w, src_h; -+ /* Clipped area being scanned from in the FB. */ -+ u32 src_x, src_y, src_w, src_h; -+ -+ enum vc4_scaling_mode x_scaling, y_scaling; -+ bool is_unity; - - /* Offset to start scanning out from the start of the plane's - * BO. - */ - u32 offset; -+ -+ /* Our allocation in LBM for temporary storage during scaling. */ -+ struct drm_mm_node lbm; - }; - - static inline struct vc4_plane_state * -@@ -90,6 +102,16 @@ static const struct hvs_format *vc4_get_hvs_format(u32 drm_format) - return NULL; - } - -+static enum vc4_scaling_mode vc4_get_scaling_mode(u32 src, u32 dst) -+{ -+ if (dst > src) -+ return VC4_SCALING_PPF; -+ else if (dst < src) -+ return VC4_SCALING_TPZ; -+ else -+ return VC4_SCALING_NONE; -+} -+ - static bool plane_enabled(struct drm_plane_state *state) - { - return state->fb && state->crtc; -@@ -106,6 +128,8 @@ static struct drm_plane_state *vc4_plane_duplicate_state(struct drm_plane *plane - if (!vc4_state) - return NULL; - -+ memset(&vc4_state->lbm, 0, sizeof(vc4_state->lbm)); -+ - __drm_atomic_helper_plane_duplicate_state(plane, &vc4_state->base); - - if (vc4_state->dlist) { -@@ -125,8 +149,17 @@ static struct drm_plane_state *vc4_plane_duplicate_state(struct drm_plane *plane - static void vc4_plane_destroy_state(struct drm_plane *plane, - struct drm_plane_state *state) - { -+ struct vc4_dev *vc4 = to_vc4_dev(plane->dev); - struct vc4_plane_state *vc4_state = to_vc4_plane_state(state); - -+ if (vc4_state->lbm.allocated) { -+ unsigned long irqflags; -+ -+ spin_lock_irqsave(&vc4->hvs->mm_lock, irqflags); -+ drm_mm_remove_node(&vc4_state->lbm); -+ spin_unlock_irqrestore(&vc4->hvs->mm_lock, irqflags); -+ } -+ - kfree(vc4_state->dlist); - __drm_atomic_helper_plane_destroy_state(plane, &vc4_state->base); - kfree(state); -@@ -165,23 +198,60 @@ static void vc4_dlist_write(struct vc4_plane_state *vc4_state, u32 val) - vc4_state->dlist[vc4_state->dlist_count++] = val; - } - -+/* Returns the scl0/scl1 field based on whether the dimensions need to -+ * be up/down/non-scaled. -+ * -+ * This is a replication of a table from the spec. -+ */ -+static u32 vc4_get_scl_field(struct drm_plane_state *state) -+{ -+ struct vc4_plane_state *vc4_state = to_vc4_plane_state(state); -+ -+ switch (vc4_state->x_scaling << 2 | vc4_state->y_scaling) { -+ case VC4_SCALING_PPF << 2 | VC4_SCALING_PPF: -+ return SCALER_CTL0_SCL_H_PPF_V_PPF; -+ case VC4_SCALING_TPZ << 2 | VC4_SCALING_PPF: -+ return SCALER_CTL0_SCL_H_TPZ_V_PPF; -+ case VC4_SCALING_PPF << 2 | VC4_SCALING_TPZ: -+ return SCALER_CTL0_SCL_H_PPF_V_TPZ; -+ case VC4_SCALING_TPZ << 2 | VC4_SCALING_TPZ: -+ return SCALER_CTL0_SCL_H_TPZ_V_TPZ; -+ case VC4_SCALING_PPF << 2 | VC4_SCALING_NONE: -+ return SCALER_CTL0_SCL_H_PPF_V_NONE; -+ case VC4_SCALING_NONE << 2 | VC4_SCALING_PPF: -+ return SCALER_CTL0_SCL_H_NONE_V_PPF; -+ case VC4_SCALING_NONE << 2 | VC4_SCALING_TPZ: -+ return SCALER_CTL0_SCL_H_NONE_V_TPZ; -+ case VC4_SCALING_TPZ << 2 | VC4_SCALING_NONE: -+ return SCALER_CTL0_SCL_H_TPZ_V_NONE; -+ default: -+ case VC4_SCALING_NONE << 2 | VC4_SCALING_NONE: -+ /* The unity case is independently handled by -+ * SCALER_CTL0_UNITY. -+ */ -+ return 0; -+ } -+} -+ - static int vc4_plane_setup_clipping_and_scaling(struct drm_plane_state *state) - { -+ struct drm_plane *plane = state->plane; - struct vc4_plane_state *vc4_state = to_vc4_plane_state(state); - struct drm_framebuffer *fb = state->fb; -+ u32 subpixel_src_mask = (1 << 16) - 1; - - vc4_state->offset = fb->offsets[0]; - -- if (state->crtc_w << 16 != state->src_w || -- state->crtc_h << 16 != state->src_h) { -- /* We don't support scaling yet, which involves -- * allocating the LBM memory for scaling temporary -- * storage, and putting filter kernels in the HVS -- * context. -- */ -+ /* We don't support subpixel source positioning for scaling. */ -+ if ((state->src_x & subpixel_src_mask) || -+ (state->src_y & subpixel_src_mask) || -+ (state->src_w & subpixel_src_mask) || -+ (state->src_h & subpixel_src_mask)) { - return -EINVAL; - } - -+ vc4_state->src_x = state->src_x >> 16; -+ vc4_state->src_y = state->src_y >> 16; - vc4_state->src_w = state->src_w >> 16; - vc4_state->src_h = state->src_h >> 16; - -@@ -190,6 +260,23 @@ static int vc4_plane_setup_clipping_and_scaling(struct drm_plane_state *state) - vc4_state->crtc_w = state->crtc_w; - vc4_state->crtc_h = state->crtc_h; - -+ vc4_state->x_scaling = vc4_get_scaling_mode(vc4_state->src_w, -+ vc4_state->crtc_w); -+ vc4_state->y_scaling = vc4_get_scaling_mode(vc4_state->src_h, -+ vc4_state->crtc_h); -+ vc4_state->is_unity = (vc4_state->x_scaling == VC4_SCALING_NONE && -+ vc4_state->y_scaling == VC4_SCALING_NONE); -+ -+ /* No configuring scaling on the cursor plane, since it gets -+ non-vblank-synced updates, and scaling requires requires -+ LBM changes which have to be vblank-synced. -+ */ -+ if (plane->type == DRM_PLANE_TYPE_CURSOR && !vc4_state->is_unity) -+ return -EINVAL; -+ -+ /* Clamp the on-screen start x/y to 0. The hardware doesn't -+ * support negative y, and negative x wastes bandwidth. -+ */ - if (vc4_state->crtc_x < 0) { - vc4_state->offset += (drm_format_plane_cpp(fb->pixel_format, - 0) * -@@ -207,6 +294,87 @@ static int vc4_plane_setup_clipping_and_scaling(struct drm_plane_state *state) - return 0; - } - -+static void vc4_write_tpz(struct vc4_plane_state *vc4_state, u32 src, u32 dst) -+{ -+ u32 scale, recip; -+ -+ scale = (1 << 16) * src / dst; -+ -+ /* The specs note that while the reciprocal would be defined -+ * as (1<<32)/scale, ~0 is close enough. -+ */ -+ recip = ~0 / scale; -+ -+ vc4_dlist_write(vc4_state, -+ VC4_SET_FIELD(scale, SCALER_TPZ0_SCALE) | -+ VC4_SET_FIELD(0, SCALER_TPZ0_IPHASE)); -+ vc4_dlist_write(vc4_state, -+ VC4_SET_FIELD(recip, SCALER_TPZ1_RECIP)); -+} -+ -+static void vc4_write_ppf(struct vc4_plane_state *vc4_state, u32 src, u32 dst) -+{ -+ u32 scale = (1 << 16) * src / dst; -+ -+ vc4_dlist_write(vc4_state, -+ SCALER_PPF_AGC | -+ VC4_SET_FIELD(scale, SCALER_PPF_SCALE) | -+ VC4_SET_FIELD(0, SCALER_PPF_IPHASE)); -+} -+ -+static u32 vc4_lbm_size(struct drm_plane_state *state) -+{ -+ struct vc4_plane_state *vc4_state = to_vc4_plane_state(state); -+ /* This is the worst case number. One of the two sizes will -+ * be used depending on the scaling configuration. -+ */ -+ u32 pix_per_line = max(vc4_state->src_w, (u32)vc4_state->crtc_w); -+ u32 lbm; -+ -+ if (vc4_state->is_unity) -+ return 0; -+ else if (vc4_state->y_scaling == VC4_SCALING_TPZ) -+ lbm = pix_per_line * 8; -+ else { -+ /* In special cases, this multiplier might be 12. */ -+ lbm = pix_per_line * 16; -+ } -+ -+ lbm = roundup(lbm, 32); -+ -+ return lbm; -+} -+ -+static void vc4_write_scaling_parameters(struct drm_plane_state *state) -+{ -+ struct vc4_plane_state *vc4_state = to_vc4_plane_state(state); -+ -+ /* Ch0 H-PPF Word 0: Scaling Parameters */ -+ if (vc4_state->x_scaling == VC4_SCALING_PPF) { -+ vc4_write_ppf(vc4_state, -+ vc4_state->src_w, vc4_state->crtc_w); -+ } -+ -+ /* Ch0 V-PPF Words 0-1: Scaling Parameters, Context */ -+ if (vc4_state->y_scaling == VC4_SCALING_PPF) { -+ vc4_write_ppf(vc4_state, -+ vc4_state->src_h, vc4_state->crtc_h); -+ vc4_dlist_write(vc4_state, 0xc0c0c0c0); -+ } -+ -+ /* Ch0 H-TPZ Words 0-1: Scaling Parameters, Recip */ -+ if (vc4_state->x_scaling == VC4_SCALING_TPZ) { -+ vc4_write_tpz(vc4_state, -+ vc4_state->src_w, vc4_state->crtc_w); -+ } -+ -+ /* Ch0 V-TPZ Words 0-2: Scaling Parameters, Recip, Context */ -+ if (vc4_state->y_scaling == VC4_SCALING_TPZ) { -+ vc4_write_tpz(vc4_state, -+ vc4_state->src_h, vc4_state->crtc_h); -+ vc4_dlist_write(vc4_state, 0xc0c0c0c0); -+ } -+} - - /* Writes out a full display list for an active plane to the plane's - * private dlist state. -@@ -214,22 +382,50 @@ static int vc4_plane_setup_clipping_and_scaling(struct drm_plane_state *state) - static int vc4_plane_mode_set(struct drm_plane *plane, - struct drm_plane_state *state) - { -+ struct vc4_dev *vc4 = to_vc4_dev(plane->dev); - struct vc4_plane_state *vc4_state = to_vc4_plane_state(state); - struct drm_framebuffer *fb = state->fb; - struct drm_gem_cma_object *bo = drm_fb_cma_get_gem_obj(fb, 0); - u32 ctl0_offset = vc4_state->dlist_count; - const struct hvs_format *format = vc4_get_hvs_format(fb->pixel_format); -+ u32 scl; -+ u32 lbm_size; -+ unsigned long irqflags; - int ret; - - ret = vc4_plane_setup_clipping_and_scaling(state); - if (ret) - return ret; - -+ /* Allocate the LBM memory that the HVS will use for temporary -+ * storage due to our scaling/format conversion. -+ */ -+ lbm_size = vc4_lbm_size(state); -+ if (lbm_size) { -+ if (!vc4_state->lbm.allocated) { -+ spin_lock_irqsave(&vc4->hvs->mm_lock, irqflags); -+ ret = drm_mm_insert_node(&vc4->hvs->lbm_mm, -+ &vc4_state->lbm, -+ lbm_size, 32, 0); -+ spin_unlock_irqrestore(&vc4->hvs->mm_lock, irqflags); -+ } else { -+ WARN_ON_ONCE(lbm_size != vc4_state->lbm.size); -+ } -+ } -+ -+ if (ret) -+ return ret; -+ -+ scl = vc4_get_scl_field(state); -+ -+ /* Control word */ - vc4_dlist_write(vc4_state, - SCALER_CTL0_VALID | - (format->pixel_order << SCALER_CTL0_ORDER_SHIFT) | - (format->hvs << SCALER_CTL0_PIXEL_FORMAT_SHIFT) | -- SCALER_CTL0_UNITY); -+ (vc4_state->is_unity ? SCALER_CTL0_UNITY : 0) | -+ VC4_SET_FIELD(scl, SCALER_CTL0_SCL0) | -+ VC4_SET_FIELD(scl, SCALER_CTL0_SCL1)); - - /* Position Word 0: Image Positions and Alpha Value */ - vc4_state->pos0_offset = vc4_state->dlist_count; -@@ -238,9 +434,14 @@ static int vc4_plane_mode_set(struct drm_plane *plane, - VC4_SET_FIELD(vc4_state->crtc_x, SCALER_POS0_START_X) | - VC4_SET_FIELD(vc4_state->crtc_y, SCALER_POS0_START_Y)); - -- /* Position Word 1: Scaled Image Dimensions. -- * Skipped due to SCALER_CTL0_UNITY scaling. -- */ -+ /* Position Word 1: Scaled Image Dimensions. */ -+ if (!vc4_state->is_unity) { -+ vc4_dlist_write(vc4_state, -+ VC4_SET_FIELD(vc4_state->crtc_w, -+ SCALER_POS1_SCL_WIDTH) | -+ VC4_SET_FIELD(vc4_state->crtc_h, -+ SCALER_POS1_SCL_HEIGHT)); -+ } - - /* Position Word 2: Source Image Size, Alpha Mode */ - vc4_state->pos2_offset = vc4_state->dlist_count; -@@ -266,6 +467,32 @@ static int vc4_plane_mode_set(struct drm_plane *plane, - vc4_dlist_write(vc4_state, - VC4_SET_FIELD(fb->pitches[0], SCALER_SRC_PITCH)); - -+ if (!vc4_state->is_unity) { -+ /* LBM Base Address. */ -+ if (vc4_state->y_scaling != VC4_SCALING_NONE) -+ vc4_dlist_write(vc4_state, vc4_state->lbm.start); -+ -+ vc4_write_scaling_parameters(state); -+ -+ /* If any PPF setup was done, then all the kernel -+ * pointers get uploaded. -+ */ -+ if (vc4_state->x_scaling == VC4_SCALING_PPF || -+ vc4_state->y_scaling == VC4_SCALING_PPF) { -+ u32 kernel = VC4_SET_FIELD(vc4->hvs->mitchell_netravali_filter.start, -+ SCALER_PPF_KERNEL_OFFSET); -+ -+ /* HPPF plane 0 */ -+ vc4_dlist_write(vc4_state, kernel); -+ /* VPPF plane 0 */ -+ vc4_dlist_write(vc4_state, kernel); -+ /* HPPF plane 1 */ -+ vc4_dlist_write(vc4_state, kernel); -+ /* VPPF plane 1 */ -+ vc4_dlist_write(vc4_state, kernel); -+ } -+ } -+ - vc4_state->dlist[ctl0_offset] |= - VC4_SET_FIELD(vc4_state->dlist_count, SCALER_CTL0_SIZE); - -diff --git a/drivers/gpu/drm/vc4/vc4_regs.h b/drivers/gpu/drm/vc4/vc4_regs.h -index 7c29993..a5b544d 100644 ---- a/drivers/gpu/drm/vc4/vc4_regs.h -+++ b/drivers/gpu/drm/vc4/vc4_regs.h -@@ -552,6 +552,21 @@ enum hvs_pixel_format { - #define SCALER_CTL0_ORDER_MASK VC4_MASK(14, 13) - #define SCALER_CTL0_ORDER_SHIFT 13 - -+#define SCALER_CTL0_SCL1_MASK VC4_MASK(10, 8) -+#define SCALER_CTL0_SCL1_SHIFT 8 -+ -+#define SCALER_CTL0_SCL0_MASK VC4_MASK(7, 5) -+#define SCALER_CTL0_SCL0_SHIFT 5 -+ -+#define SCALER_CTL0_SCL_H_PPF_V_PPF 0 -+#define SCALER_CTL0_SCL_H_TPZ_V_PPF 1 -+#define SCALER_CTL0_SCL_H_PPF_V_TPZ 2 -+#define SCALER_CTL0_SCL_H_TPZ_V_TPZ 3 -+#define SCALER_CTL0_SCL_H_PPF_V_NONE 4 -+#define SCALER_CTL0_SCL_H_NONE_V_PPF 5 -+#define SCALER_CTL0_SCL_H_NONE_V_TPZ 6 -+#define SCALER_CTL0_SCL_H_TPZ_V_NONE 7 -+ - /* Set to indicate no scaling. */ - #define SCALER_CTL0_UNITY BIT(4) - -@@ -567,6 +582,12 @@ enum hvs_pixel_format { - #define SCALER_POS0_START_X_MASK VC4_MASK(11, 0) - #define SCALER_POS0_START_X_SHIFT 0 - -+#define SCALER_POS1_SCL_HEIGHT_MASK VC4_MASK(27, 16) -+#define SCALER_POS1_SCL_HEIGHT_SHIFT 16 -+ -+#define SCALER_POS1_SCL_WIDTH_MASK VC4_MASK(11, 0) -+#define SCALER_POS1_SCL_WIDTH_SHIFT 0 -+ - #define SCALER_POS2_ALPHA_MODE_MASK VC4_MASK(31, 30) - #define SCALER_POS2_ALPHA_MODE_SHIFT 30 - #define SCALER_POS2_ALPHA_MODE_PIPELINE 0 -@@ -580,6 +601,31 @@ enum hvs_pixel_format { - #define SCALER_POS2_WIDTH_MASK VC4_MASK(11, 0) - #define SCALER_POS2_WIDTH_SHIFT 0 - -+#define SCALER_TPZ0_VERT_RECALC BIT(31) -+#define SCALER_TPZ0_SCALE_MASK VC4_MASK(28, 8) -+#define SCALER_TPZ0_SCALE_SHIFT 8 -+#define SCALER_TPZ0_IPHASE_MASK VC4_MASK(7, 0) -+#define SCALER_TPZ0_IPHASE_SHIFT 0 -+#define SCALER_TPZ1_RECIP_MASK VC4_MASK(15, 0) -+#define SCALER_TPZ1_RECIP_SHIFT 0 -+ -+/* Skips interpolating coefficients to 64 phases, so just 8 are used. -+ * Required for nearest neighbor. -+ */ -+#define SCALER_PPF_NOINTERP BIT(31) -+/* Replaes the highest valued coefficient with one that makes all 4 -+ * sum to unity. -+ */ -+#define SCALER_PPF_AGC BIT(30) -+#define SCALER_PPF_SCALE_MASK VC4_MASK(24, 8) -+#define SCALER_PPF_SCALE_SHIFT 8 -+#define SCALER_PPF_IPHASE_MASK VC4_MASK(6, 0) -+#define SCALER_PPF_IPHASE_SHIFT 0 -+ -+#define SCALER_PPF_KERNEL_OFFSET_MASK VC4_MASK(13, 0) -+#define SCALER_PPF_KERNEL_OFFSET_SHIFT 0 -+#define SCALER_PPF_KERNEL_UNCACHED BIT(31) -+ - #define SCALER_SRC_PITCH_MASK VC4_MASK(15, 0) - #define SCALER_SRC_PITCH_SHIFT 0 - --- -2.7.3 - -From c1f11c3b1a4379841341911c379237d3a3870607 Mon Sep 17 00:00:00 2001 -From: Eric Anholt -Date: Tue, 20 Oct 2015 13:59:15 +0100 -Subject: [PATCH 14/36] drm/vc4: Add support a few more RGB display plane - formats. - -These were all touch-tested with modetest. - -Signed-off-by: Eric Anholt ---- - drivers/gpu/drm/vc4/vc4_plane.c | 16 ++++++++++++++++ - 1 file changed, 16 insertions(+) - -diff --git a/drivers/gpu/drm/vc4/vc4_plane.c b/drivers/gpu/drm/vc4/vc4_plane.c -index 7c2d697..013ebff 100644 ---- a/drivers/gpu/drm/vc4/vc4_plane.c -+++ b/drivers/gpu/drm/vc4/vc4_plane.c -@@ -88,6 +88,22 @@ static const struct hvs_format { - .drm = DRM_FORMAT_ARGB8888, .hvs = HVS_PIXEL_FORMAT_RGBA8888, - .pixel_order = HVS_PIXEL_ORDER_ABGR, .has_alpha = true, - }, -+ { -+ .drm = DRM_FORMAT_RGB565, .hvs = HVS_PIXEL_FORMAT_RGB565, -+ .pixel_order = HVS_PIXEL_ORDER_XRGB, .has_alpha = false, -+ }, -+ { -+ .drm = DRM_FORMAT_BGR565, .hvs = HVS_PIXEL_FORMAT_RGB565, -+ .pixel_order = HVS_PIXEL_ORDER_XBGR, .has_alpha = false, -+ }, -+ { -+ .drm = DRM_FORMAT_ARGB1555, .hvs = HVS_PIXEL_FORMAT_RGBA5551, -+ .pixel_order = HVS_PIXEL_ORDER_ABGR, .has_alpha = true, -+ }, -+ { -+ .drm = DRM_FORMAT_XRGB1555, .hvs = HVS_PIXEL_FORMAT_RGBA5551, -+ .pixel_order = HVS_PIXEL_ORDER_ABGR, .has_alpha = false, -+ }, - }; - - static const struct hvs_format *vc4_get_hvs_format(u32 drm_format) --- -2.7.3 - -From 149a88adaedd0bea6c6f2f12dcf893d740be2ebb Mon Sep 17 00:00:00 2001 -From: Eric Anholt -Date: Wed, 30 Dec 2015 12:25:44 -0800 -Subject: [PATCH 15/36] drm/vc4: Add support for YUV planes. - -This supports 420 and 422 subsampling with 2 or 3 planes, tested with -modetest. It doesn't set up chroma subsampling position (which it -appears KMS doesn't deal with yet). - -The LBM memory is overallocated in many cases, but apparently the docs -aren't quite correct and I'll probably need to look at the hardware -source to really figure it out. - -Signed-off-by: Eric Anholt ---- - drivers/gpu/drm/vc4/vc4_plane.c | 256 +++++++++++++++++++++++++++++++--------- - drivers/gpu/drm/vc4/vc4_regs.h | 56 ++++++++- - 2 files changed, 253 insertions(+), 59 deletions(-) - -diff --git a/drivers/gpu/drm/vc4/vc4_plane.c b/drivers/gpu/drm/vc4/vc4_plane.c -index 013ebff..7b0c72a 100644 ---- a/drivers/gpu/drm/vc4/vc4_plane.c -+++ b/drivers/gpu/drm/vc4/vc4_plane.c -@@ -54,15 +54,19 @@ struct vc4_plane_state { - /* Clipped coordinates of the plane on the display. */ - int crtc_x, crtc_y, crtc_w, crtc_h; - /* Clipped area being scanned from in the FB. */ -- u32 src_x, src_y, src_w, src_h; -+ u32 src_x, src_y; - -- enum vc4_scaling_mode x_scaling, y_scaling; -+ u32 src_w[2], src_h[2]; -+ -+ /* Scaling selection for the RGB/Y plane and the Cb/Cr planes. */ -+ enum vc4_scaling_mode x_scaling[2], y_scaling[2]; - bool is_unity; -+ bool is_yuv; - - /* Offset to start scanning out from the start of the plane's - * BO. - */ -- u32 offset; -+ u32 offsets[3]; - - /* Our allocation in LBM for temporary storage during scaling. */ - struct drm_mm_node lbm; -@@ -79,6 +83,7 @@ static const struct hvs_format { - u32 hvs; /* HVS_FORMAT_* */ - u32 pixel_order; - bool has_alpha; -+ bool flip_cbcr; - } hvs_formats[] = { - { - .drm = DRM_FORMAT_XRGB8888, .hvs = HVS_PIXEL_FORMAT_RGBA8888, -@@ -104,6 +109,32 @@ static const struct hvs_format { - .drm = DRM_FORMAT_XRGB1555, .hvs = HVS_PIXEL_FORMAT_RGBA5551, - .pixel_order = HVS_PIXEL_ORDER_ABGR, .has_alpha = false, - }, -+ { -+ .drm = DRM_FORMAT_YUV422, -+ .hvs = HVS_PIXEL_FORMAT_YCBCR_YUV422_3PLANE, -+ }, -+ { -+ .drm = DRM_FORMAT_YVU422, -+ .hvs = HVS_PIXEL_FORMAT_YCBCR_YUV422_3PLANE, -+ .flip_cbcr = true, -+ }, -+ { -+ .drm = DRM_FORMAT_YUV420, -+ .hvs = HVS_PIXEL_FORMAT_YCBCR_YUV420_3PLANE, -+ }, -+ { -+ .drm = DRM_FORMAT_YVU420, -+ .hvs = HVS_PIXEL_FORMAT_YCBCR_YUV420_3PLANE, -+ .flip_cbcr = true, -+ }, -+ { -+ .drm = DRM_FORMAT_NV12, -+ .hvs = HVS_PIXEL_FORMAT_YCBCR_YUV420_2PLANE, -+ }, -+ { -+ .drm = DRM_FORMAT_NV16, -+ .hvs = HVS_PIXEL_FORMAT_YCBCR_YUV422_2PLANE, -+ }, - }; - - static const struct hvs_format *vc4_get_hvs_format(u32 drm_format) -@@ -219,11 +250,11 @@ static void vc4_dlist_write(struct vc4_plane_state *vc4_state, u32 val) - * - * This is a replication of a table from the spec. - */ --static u32 vc4_get_scl_field(struct drm_plane_state *state) -+static u32 vc4_get_scl_field(struct drm_plane_state *state, int plane) - { - struct vc4_plane_state *vc4_state = to_vc4_plane_state(state); - -- switch (vc4_state->x_scaling << 2 | vc4_state->y_scaling) { -+ switch (vc4_state->x_scaling[plane] << 2 | vc4_state->y_scaling[plane]) { - case VC4_SCALING_PPF << 2 | VC4_SCALING_PPF: - return SCALER_CTL0_SCL_H_PPF_V_PPF; - case VC4_SCALING_TPZ << 2 | VC4_SCALING_PPF: -@@ -254,9 +285,16 @@ static int vc4_plane_setup_clipping_and_scaling(struct drm_plane_state *state) - struct drm_plane *plane = state->plane; - struct vc4_plane_state *vc4_state = to_vc4_plane_state(state); - struct drm_framebuffer *fb = state->fb; -+ struct drm_gem_cma_object *bo = drm_fb_cma_get_gem_obj(fb, 0); - u32 subpixel_src_mask = (1 << 16) - 1; -+ u32 format = fb->pixel_format; -+ int num_planes = drm_format_num_planes(format); -+ u32 h_subsample = 1; -+ u32 v_subsample = 1; -+ int i; - -- vc4_state->offset = fb->offsets[0]; -+ for (i = 0; i < num_planes; i++) -+ vc4_state->offsets[i] = bo->paddr + fb->offsets[i]; - - /* We don't support subpixel source positioning for scaling. */ - if ((state->src_x & subpixel_src_mask) || -@@ -268,20 +306,48 @@ static int vc4_plane_setup_clipping_and_scaling(struct drm_plane_state *state) - - vc4_state->src_x = state->src_x >> 16; - vc4_state->src_y = state->src_y >> 16; -- vc4_state->src_w = state->src_w >> 16; -- vc4_state->src_h = state->src_h >> 16; -+ vc4_state->src_w[0] = state->src_w >> 16; -+ vc4_state->src_h[0] = state->src_h >> 16; - - vc4_state->crtc_x = state->crtc_x; - vc4_state->crtc_y = state->crtc_y; - vc4_state->crtc_w = state->crtc_w; - vc4_state->crtc_h = state->crtc_h; - -- vc4_state->x_scaling = vc4_get_scaling_mode(vc4_state->src_w, -- vc4_state->crtc_w); -- vc4_state->y_scaling = vc4_get_scaling_mode(vc4_state->src_h, -- vc4_state->crtc_h); -- vc4_state->is_unity = (vc4_state->x_scaling == VC4_SCALING_NONE && -- vc4_state->y_scaling == VC4_SCALING_NONE); -+ vc4_state->x_scaling[0] = vc4_get_scaling_mode(vc4_state->src_w[0], -+ vc4_state->crtc_w); -+ vc4_state->y_scaling[0] = vc4_get_scaling_mode(vc4_state->src_h[0], -+ vc4_state->crtc_h); -+ -+ if (num_planes > 1) { -+ vc4_state->is_yuv = true; -+ -+ h_subsample = drm_format_horz_chroma_subsampling(format); -+ v_subsample = drm_format_vert_chroma_subsampling(format); -+ vc4_state->src_w[1] = vc4_state->src_w[0] / h_subsample; -+ vc4_state->src_h[1] = vc4_state->src_h[0] / v_subsample; -+ -+ vc4_state->x_scaling[1] = -+ vc4_get_scaling_mode(vc4_state->src_w[1], -+ vc4_state->crtc_w); -+ vc4_state->y_scaling[1] = -+ vc4_get_scaling_mode(vc4_state->src_h[1], -+ vc4_state->crtc_h); -+ -+ /* YUV conversion requires that scaling be enabled, -+ * even on a plane that's otherwise 1:1. Choose TPZ -+ * for simplicity. -+ */ -+ if (vc4_state->x_scaling[0] == VC4_SCALING_NONE) -+ vc4_state->x_scaling[0] = VC4_SCALING_TPZ; -+ if (vc4_state->y_scaling[0] == VC4_SCALING_NONE) -+ vc4_state->y_scaling[0] = VC4_SCALING_TPZ; -+ } -+ -+ vc4_state->is_unity = (vc4_state->x_scaling[0] == VC4_SCALING_NONE && -+ vc4_state->y_scaling[0] == VC4_SCALING_NONE && -+ vc4_state->x_scaling[1] == VC4_SCALING_NONE && -+ vc4_state->y_scaling[1] == VC4_SCALING_NONE); - - /* No configuring scaling on the cursor plane, since it gets - non-vblank-synced updates, and scaling requires requires -@@ -294,16 +360,27 @@ static int vc4_plane_setup_clipping_and_scaling(struct drm_plane_state *state) - * support negative y, and negative x wastes bandwidth. - */ - if (vc4_state->crtc_x < 0) { -- vc4_state->offset += (drm_format_plane_cpp(fb->pixel_format, -- 0) * -- -vc4_state->crtc_x); -- vc4_state->src_w += vc4_state->crtc_x; -+ for (i = 0; i < num_planes; i++) { -+ u32 cpp = drm_format_plane_cpp(fb->pixel_format, i); -+ u32 subs = ((i == 0) ? 1 : h_subsample); -+ -+ vc4_state->offsets[i] += (cpp * -+ (-vc4_state->crtc_x) / subs); -+ } -+ vc4_state->src_w[0] += vc4_state->crtc_x; -+ vc4_state->src_w[1] += vc4_state->crtc_x / h_subsample; - vc4_state->crtc_x = 0; - } - - if (vc4_state->crtc_y < 0) { -- vc4_state->offset += fb->pitches[0] * -vc4_state->crtc_y; -- vc4_state->src_h += vc4_state->crtc_y; -+ for (i = 0; i < num_planes; i++) { -+ u32 subs = ((i == 0) ? 1 : v_subsample); -+ -+ vc4_state->offsets[i] += (fb->pitches[i] * -+ (-vc4_state->crtc_y) / subs); -+ } -+ vc4_state->src_h[0] += vc4_state->crtc_y; -+ vc4_state->src_h[1] += vc4_state->crtc_y / v_subsample; - vc4_state->crtc_y = 0; - } - -@@ -344,15 +421,23 @@ static u32 vc4_lbm_size(struct drm_plane_state *state) - /* This is the worst case number. One of the two sizes will - * be used depending on the scaling configuration. - */ -- u32 pix_per_line = max(vc4_state->src_w, (u32)vc4_state->crtc_w); -+ u32 pix_per_line = max(vc4_state->src_w[0], (u32)vc4_state->crtc_w); - u32 lbm; - -- if (vc4_state->is_unity) -- return 0; -- else if (vc4_state->y_scaling == VC4_SCALING_TPZ) -- lbm = pix_per_line * 8; -- else { -- /* In special cases, this multiplier might be 12. */ -+ if (!vc4_state->is_yuv) { -+ if (vc4_state->is_unity) -+ return 0; -+ else if (vc4_state->y_scaling[0] == VC4_SCALING_TPZ) -+ lbm = pix_per_line * 8; -+ else { -+ /* In special cases, this multiplier might be 12. */ -+ lbm = pix_per_line * 16; -+ } -+ } else { -+ /* There are cases for this going down to a multiplier -+ * of 2, but according to the firmware source, the -+ * table in the docs is somewhat wrong. -+ */ - lbm = pix_per_line * 16; - } - -@@ -361,33 +446,34 @@ static u32 vc4_lbm_size(struct drm_plane_state *state) - return lbm; - } - --static void vc4_write_scaling_parameters(struct drm_plane_state *state) -+static void vc4_write_scaling_parameters(struct drm_plane_state *state, -+ int channel) - { - struct vc4_plane_state *vc4_state = to_vc4_plane_state(state); - - /* Ch0 H-PPF Word 0: Scaling Parameters */ -- if (vc4_state->x_scaling == VC4_SCALING_PPF) { -+ if (vc4_state->x_scaling[channel] == VC4_SCALING_PPF) { - vc4_write_ppf(vc4_state, -- vc4_state->src_w, vc4_state->crtc_w); -+ vc4_state->src_w[channel], vc4_state->crtc_w); - } - - /* Ch0 V-PPF Words 0-1: Scaling Parameters, Context */ -- if (vc4_state->y_scaling == VC4_SCALING_PPF) { -+ if (vc4_state->y_scaling[channel] == VC4_SCALING_PPF) { - vc4_write_ppf(vc4_state, -- vc4_state->src_h, vc4_state->crtc_h); -+ vc4_state->src_h[channel], vc4_state->crtc_h); - vc4_dlist_write(vc4_state, 0xc0c0c0c0); - } - - /* Ch0 H-TPZ Words 0-1: Scaling Parameters, Recip */ -- if (vc4_state->x_scaling == VC4_SCALING_TPZ) { -+ if (vc4_state->x_scaling[channel] == VC4_SCALING_TPZ) { - vc4_write_tpz(vc4_state, -- vc4_state->src_w, vc4_state->crtc_w); -+ vc4_state->src_w[channel], vc4_state->crtc_w); - } - - /* Ch0 V-TPZ Words 0-2: Scaling Parameters, Recip, Context */ -- if (vc4_state->y_scaling == VC4_SCALING_TPZ) { -+ if (vc4_state->y_scaling[channel] == VC4_SCALING_TPZ) { - vc4_write_tpz(vc4_state, -- vc4_state->src_h, vc4_state->crtc_h); -+ vc4_state->src_h[channel], vc4_state->crtc_h); - vc4_dlist_write(vc4_state, 0xc0c0c0c0); - } - } -@@ -401,13 +487,13 @@ static int vc4_plane_mode_set(struct drm_plane *plane, - struct vc4_dev *vc4 = to_vc4_dev(plane->dev); - struct vc4_plane_state *vc4_state = to_vc4_plane_state(state); - struct drm_framebuffer *fb = state->fb; -- struct drm_gem_cma_object *bo = drm_fb_cma_get_gem_obj(fb, 0); - u32 ctl0_offset = vc4_state->dlist_count; - const struct hvs_format *format = vc4_get_hvs_format(fb->pixel_format); -- u32 scl; -+ int num_planes = drm_format_num_planes(format->drm); -+ u32 scl0, scl1; - u32 lbm_size; - unsigned long irqflags; -- int ret; -+ int ret, i; - - ret = vc4_plane_setup_clipping_and_scaling(state); - if (ret) -@@ -432,7 +518,19 @@ static int vc4_plane_mode_set(struct drm_plane *plane, - if (ret) - return ret; - -- scl = vc4_get_scl_field(state); -+ /* SCL1 is used for Cb/Cr scaling of planar formats. For RGB -+ * and 4:4:4, scl1 should be set to scl0 so both channels of -+ * the scaler do the same thing. For YUV, the Y plane needs -+ * to be put in channel 1 and Cb/Cr in channel 0, so we swap -+ * the scl fields here. -+ */ -+ if (num_planes == 1) { -+ scl0 = vc4_get_scl_field(state, 1); -+ scl1 = scl0; -+ } else { -+ scl0 = vc4_get_scl_field(state, 1); -+ scl1 = vc4_get_scl_field(state, 0); -+ } - - /* Control word */ - vc4_dlist_write(vc4_state, -@@ -440,8 +538,8 @@ static int vc4_plane_mode_set(struct drm_plane *plane, - (format->pixel_order << SCALER_CTL0_ORDER_SHIFT) | - (format->hvs << SCALER_CTL0_PIXEL_FORMAT_SHIFT) | - (vc4_state->is_unity ? SCALER_CTL0_UNITY : 0) | -- VC4_SET_FIELD(scl, SCALER_CTL0_SCL0) | -- VC4_SET_FIELD(scl, SCALER_CTL0_SCL1)); -+ VC4_SET_FIELD(scl0, SCALER_CTL0_SCL0) | -+ VC4_SET_FIELD(scl1, SCALER_CTL0_SCL1)); - - /* Position Word 0: Image Positions and Alpha Value */ - vc4_state->pos0_offset = vc4_state->dlist_count; -@@ -466,35 +564,68 @@ static int vc4_plane_mode_set(struct drm_plane *plane, - SCALER_POS2_ALPHA_MODE_PIPELINE : - SCALER_POS2_ALPHA_MODE_FIXED, - SCALER_POS2_ALPHA_MODE) | -- VC4_SET_FIELD(vc4_state->src_w, SCALER_POS2_WIDTH) | -- VC4_SET_FIELD(vc4_state->src_h, SCALER_POS2_HEIGHT)); -+ VC4_SET_FIELD(vc4_state->src_w[0], SCALER_POS2_WIDTH) | -+ VC4_SET_FIELD(vc4_state->src_h[0], SCALER_POS2_HEIGHT)); - - /* Position Word 3: Context. Written by the HVS. */ - vc4_dlist_write(vc4_state, 0xc0c0c0c0); - -- /* Pointer Word 0: RGB / Y Pointer */ -+ -+ /* Pointer Word 0/1/2: RGB / Y / Cb / Cr Pointers -+ * -+ * The pointers may be any byte address. -+ */ - vc4_state->ptr0_offset = vc4_state->dlist_count; -- vc4_dlist_write(vc4_state, bo->paddr + vc4_state->offset); -+ if (!format->flip_cbcr) { -+ for (i = 0; i < num_planes; i++) -+ vc4_dlist_write(vc4_state, vc4_state->offsets[i]); -+ } else { -+ WARN_ON_ONCE(num_planes != 3); -+ vc4_dlist_write(vc4_state, vc4_state->offsets[0]); -+ vc4_dlist_write(vc4_state, vc4_state->offsets[2]); -+ vc4_dlist_write(vc4_state, vc4_state->offsets[1]); -+ } - -- /* Pointer Context Word 0: Written by the HVS */ -- vc4_dlist_write(vc4_state, 0xc0c0c0c0); -+ /* Pointer Context Word 0/1/2: Written by the HVS */ -+ for (i = 0; i < num_planes; i++) -+ vc4_dlist_write(vc4_state, 0xc0c0c0c0); - -- /* Pitch word 0: Pointer 0 Pitch */ -- vc4_dlist_write(vc4_state, -- VC4_SET_FIELD(fb->pitches[0], SCALER_SRC_PITCH)); -+ /* Pitch word 0/1/2 */ -+ for (i = 0; i < num_planes; i++) { -+ vc4_dlist_write(vc4_state, -+ VC4_SET_FIELD(fb->pitches[i], SCALER_SRC_PITCH)); -+ } -+ -+ /* Colorspace conversion words */ -+ if (vc4_state->is_yuv) { -+ vc4_dlist_write(vc4_state, SCALER_CSC0_ITR_R_601_5); -+ vc4_dlist_write(vc4_state, SCALER_CSC1_ITR_R_601_5); -+ vc4_dlist_write(vc4_state, SCALER_CSC2_ITR_R_601_5); -+ } - - if (!vc4_state->is_unity) { - /* LBM Base Address. */ -- if (vc4_state->y_scaling != VC4_SCALING_NONE) -+ if (vc4_state->y_scaling[0] != VC4_SCALING_NONE || -+ vc4_state->y_scaling[1] != VC4_SCALING_NONE) { - vc4_dlist_write(vc4_state, vc4_state->lbm.start); -+ } - -- vc4_write_scaling_parameters(state); -+ if (num_planes > 1) { -+ /* Emit Cb/Cr as channel 0 and Y as channel -+ * 1. This matches how we set up scl0/scl1 -+ * above. -+ */ -+ vc4_write_scaling_parameters(state, 1); -+ } -+ vc4_write_scaling_parameters(state, 0); - - /* If any PPF setup was done, then all the kernel - * pointers get uploaded. - */ -- if (vc4_state->x_scaling == VC4_SCALING_PPF || -- vc4_state->y_scaling == VC4_SCALING_PPF) { -+ if (vc4_state->x_scaling[0] == VC4_SCALING_PPF || -+ vc4_state->y_scaling[0] == VC4_SCALING_PPF || -+ vc4_state->x_scaling[1] == VC4_SCALING_PPF || -+ vc4_state->y_scaling[1] == VC4_SCALING_PPF) { - u32 kernel = VC4_SET_FIELD(vc4->hvs->mitchell_netravali_filter.start, - SCALER_PPF_KERNEL_OFFSET); - -@@ -698,6 +829,7 @@ struct drm_plane *vc4_plane_init(struct drm_device *dev, - struct drm_plane *plane = NULL; - struct vc4_plane *vc4_plane; - u32 formats[ARRAY_SIZE(hvs_formats)]; -+ u32 num_formats = 0; - int ret = 0; - unsigned i; - -@@ -708,12 +840,20 @@ struct drm_plane *vc4_plane_init(struct drm_device *dev, - goto fail; - } - -- for (i = 0; i < ARRAY_SIZE(hvs_formats); i++) -- formats[i] = hvs_formats[i].drm; -+ for (i = 0; i < ARRAY_SIZE(hvs_formats); i++) { -+ /* Don't allow YUV in cursor planes, since that means -+ * tuning on the scaler, which we don't allow for the -+ * cursor. -+ */ -+ if (type != DRM_PLANE_TYPE_CURSOR || -+ hvs_formats[i].hvs < HVS_PIXEL_FORMAT_YCBCR_YUV420_3PLANE) { -+ formats[num_formats++] = hvs_formats[i].drm; -+ } -+ } - plane = &vc4_plane->base; - ret = drm_universal_plane_init(dev, plane, 0xff, - &vc4_plane_funcs, -- formats, ARRAY_SIZE(formats), -+ formats, num_formats, - type, NULL); - - drm_plane_helper_add(plane, &vc4_plane_helper_funcs); -diff --git a/drivers/gpu/drm/vc4/vc4_regs.h b/drivers/gpu/drm/vc4/vc4_regs.h -index a5b544d..bf42a8e 100644 ---- a/drivers/gpu/drm/vc4/vc4_regs.h -+++ b/drivers/gpu/drm/vc4/vc4_regs.h -@@ -519,7 +519,12 @@ enum hvs_pixel_format { - HVS_PIXEL_FORMAT_RGB888 = 5, - HVS_PIXEL_FORMAT_RGBA6666 = 6, - /* 32bpp */ -- HVS_PIXEL_FORMAT_RGBA8888 = 7 -+ HVS_PIXEL_FORMAT_RGBA8888 = 7, -+ -+ HVS_PIXEL_FORMAT_YCBCR_YUV420_3PLANE = 8, -+ HVS_PIXEL_FORMAT_YCBCR_YUV420_2PLANE = 9, -+ HVS_PIXEL_FORMAT_YCBCR_YUV422_3PLANE = 10, -+ HVS_PIXEL_FORMAT_YCBCR_YUV422_2PLANE = 11, - }; - - /* Note: the LSB is the rightmost character shown. Only valid for -@@ -601,6 +606,55 @@ enum hvs_pixel_format { - #define SCALER_POS2_WIDTH_MASK VC4_MASK(11, 0) - #define SCALER_POS2_WIDTH_SHIFT 0 - -+/* Color Space Conversion words. Some values are S2.8 signed -+ * integers, except that the 2 integer bits map as {0x0: 0, 0x1: 1, -+ * 0x2: 2, 0x3: -1} -+ */ -+/* bottom 8 bits of S2.8 contribution of Cr to Blue */ -+#define SCALER_CSC0_COEF_CR_BLU_MASK VC4_MASK(31, 24) -+#define SCALER_CSC0_COEF_CR_BLU_SHIFT 24 -+/* Signed offset to apply to Y before CSC. (Y' = Y + YY_OFS) */ -+#define SCALER_CSC0_COEF_YY_OFS_MASK VC4_MASK(23, 16) -+#define SCALER_CSC0_COEF_YY_OFS_SHIFT 16 -+/* Signed offset to apply to CB before CSC (Cb' = Cb - 128 + CB_OFS). */ -+#define SCALER_CSC0_COEF_CB_OFS_MASK VC4_MASK(15, 8) -+#define SCALER_CSC0_COEF_CB_OFS_SHIFT 8 -+/* Signed offset to apply to CB before CSC (Cr' = Cr - 128 + CR_OFS). */ -+#define SCALER_CSC0_COEF_CR_OFS_MASK VC4_MASK(7, 0) -+#define SCALER_CSC0_COEF_CR_OFS_SHIFT 0 -+#define SCALER_CSC0_ITR_R_601_5 0x00f00000 -+#define SCALER_CSC0_ITR_R_709_3 0x00f00000 -+#define SCALER_CSC0_JPEG_JFIF 0x00000000 -+ -+/* S2.8 contribution of Cb to Green */ -+#define SCALER_CSC1_COEF_CB_GRN_MASK VC4_MASK(31, 22) -+#define SCALER_CSC1_COEF_CB_GRN_SHIFT 22 -+/* S2.8 contribution of Cr to Green */ -+#define SCALER_CSC1_COEF_CR_GRN_MASK VC4_MASK(21, 12) -+#define SCALER_CSC1_COEF_CR_GRN_SHIFT 12 -+/* S2.8 contribution of Y to all of RGB */ -+#define SCALER_CSC1_COEF_YY_ALL_MASK VC4_MASK(11, 2) -+#define SCALER_CSC1_COEF_YY_ALL_SHIFT 2 -+/* top 2 bits of S2.8 contribution of Cr to Blue */ -+#define SCALER_CSC1_COEF_CR_BLU_MASK VC4_MASK(1, 0) -+#define SCALER_CSC1_COEF_CR_BLU_SHIFT 0 -+#define SCALER_CSC1_ITR_R_601_5 0xe73304a8 -+#define SCALER_CSC1_ITR_R_709_3 0xf2b784a8 -+#define SCALER_CSC1_JPEG_JFIF 0xea34a400 -+ -+/* S2.8 contribution of Cb to Red */ -+#define SCALER_CSC2_COEF_CB_RED_MASK VC4_MASK(29, 20) -+#define SCALER_CSC2_COEF_CB_RED_SHIFT 20 -+/* S2.8 contribution of Cr to Red */ -+#define SCALER_CSC2_COEF_CR_RED_MASK VC4_MASK(19, 10) -+#define SCALER_CSC2_COEF_CR_RED_SHIFT 10 -+/* S2.8 contribution of Cb to Blue */ -+#define SCALER_CSC2_COEF_CB_BLU_MASK VC4_MASK(19, 10) -+#define SCALER_CSC2_COEF_CB_BLU_SHIFT 10 -+#define SCALER_CSC2_ITR_R_601_5 0x00066204 -+#define SCALER_CSC2_ITR_R_709_3 0x00072a1c -+#define SCALER_CSC2_JPEG_JFIF 0x000599c5 -+ - #define SCALER_TPZ0_VERT_RECALC BIT(31) - #define SCALER_TPZ0_SCALE_MASK VC4_MASK(28, 8) - #define SCALER_TPZ0_SCALE_SHIFT 8 --- -2.7.3 - -From 47ed1ee3dbfde89297b81bc09f1b483f4da1b06d Mon Sep 17 00:00:00 2001 -From: Eric Anholt -Date: Mon, 29 Feb 2016 17:53:00 -0800 -Subject: [PATCH 16/36] drm/vc4: Let gpiolib know that we're OK with sleeping - for HPD. - -Fixes an error thrown every few seconds when we poll HPD when it's on -a I2C to GPIO expander. - -Signed-off-by: Eric Anholt -Tested-by: Daniel Stone ---- - drivers/gpu/drm/vc4/vc4_hdmi.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c -index 56272ca..6bcf51d 100644 ---- a/drivers/gpu/drm/vc4/vc4_hdmi.c -+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c -@@ -166,7 +166,7 @@ vc4_hdmi_connector_detect(struct drm_connector *connector, bool force) - struct vc4_dev *vc4 = to_vc4_dev(dev); - - if (vc4->hdmi->hpd_gpio) { -- if (gpio_get_value(vc4->hdmi->hpd_gpio)) -+ if (gpio_get_value_cansleep(vc4->hdmi->hpd_gpio)) - return connector_status_connected; - else - return connector_status_disconnected; --- -2.7.3 - -From 24b28acef42486c282bc58e977cbfc66191a8f38 Mon Sep 17 00:00:00 2001 -From: Eric Anholt -Date: Mon, 29 Feb 2016 17:53:01 -0800 -Subject: [PATCH 17/36] drm/vc4: Respect GPIO_ACTIVE_LOW on HDMI HPD if set in - the devicetree. - -The original Raspberry Pi had the GPIO active high, but the later -models are active low. The DT GPIO bindings allow specifying the -active flag, except that it doesn't get propagated to the gpiodesc, so -you have to handle it yourself. - -Signed-off-by: Eric Anholt -Tested-by: Daniel Stone ---- - drivers/gpu/drm/vc4/vc4_hdmi.c | 12 ++++++++++-- - 1 file changed, 10 insertions(+), 2 deletions(-) - -diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c -index 6bcf51d..d8b8649 100644 ---- a/drivers/gpu/drm/vc4/vc4_hdmi.c -+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c -@@ -47,6 +47,7 @@ struct vc4_hdmi { - void __iomem *hdmicore_regs; - void __iomem *hd_regs; - int hpd_gpio; -+ bool hpd_active_low; - - struct clk *pixel_clock; - struct clk *hsm_clock; -@@ -166,7 +167,8 @@ vc4_hdmi_connector_detect(struct drm_connector *connector, bool force) - struct vc4_dev *vc4 = to_vc4_dev(dev); - - if (vc4->hdmi->hpd_gpio) { -- if (gpio_get_value_cansleep(vc4->hdmi->hpd_gpio)) -+ if (gpio_get_value_cansleep(vc4->hdmi->hpd_gpio) ^ -+ vc4->hdmi->hpd_active_low) - return connector_status_connected; - else - return connector_status_disconnected; -@@ -517,11 +519,17 @@ static int vc4_hdmi_bind(struct device *dev, struct device *master, void *data) - * we'll use the HDMI core's register. - */ - if (of_find_property(dev->of_node, "hpd-gpios", &value)) { -- hdmi->hpd_gpio = of_get_named_gpio(dev->of_node, "hpd-gpios", 0); -+ enum of_gpio_flags hpd_gpio_flags; -+ -+ hdmi->hpd_gpio = of_get_named_gpio_flags(dev->of_node, -+ "hpd-gpios", 0, -+ &hpd_gpio_flags); - if (hdmi->hpd_gpio < 0) { - ret = hdmi->hpd_gpio; - goto err_unprepare_hsm; - } -+ -+ hdmi->hpd_active_low = hpd_gpio_flags & OF_GPIO_ACTIVE_LOW; - } - - vc4->hdmi = hdmi; --- -2.7.3 - -From ed6836e411dd559a811dd063509a01772f4fe00f Mon Sep 17 00:00:00 2001 -From: Eric Anholt -Date: Fri, 4 Mar 2016 12:32:07 -0800 -Subject: [PATCH 19/36] drm/vc4: Recognize a more specific compatible string - for V3D. - -The Raspberry Pi Foundation's firmware updates are shipping device -trees using the old string, so we'll keep recognizing that as this rev -of V3D. Still, we should use a more specific name in the upstream DT -to clarify which board is being supported, in case we do other revs of -V3D in the future. - -Signed-off-by: Eric Anholt -Acked-by: Stephen Warren ---- - drivers/gpu/drm/vc4/vc4_v3d.c | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/drivers/gpu/drm/vc4/vc4_v3d.c b/drivers/gpu/drm/vc4/vc4_v3d.c -index 31de5d1..e6d3c60 100644 ---- a/drivers/gpu/drm/vc4/vc4_v3d.c -+++ b/drivers/gpu/drm/vc4/vc4_v3d.c -@@ -268,6 +268,7 @@ static int vc4_v3d_dev_remove(struct platform_device *pdev) - } - - static const struct of_device_id vc4_v3d_dt_match[] = { -+ { .compatible = "brcm,bcm2835-v3d" }, - { .compatible = "brcm,vc4-v3d" }, - {} - }; --- -2.7.3 - -From 55acd7db60c8247d926969b705373765c26c1f44 Mon Sep 17 00:00:00 2001 -From: Martin Sperl -Date: Fri, 11 Sep 2015 11:22:05 +0000 -Subject: [PATCH 21/36] ARM: bcm2835: add the auxiliary spi1 and spi2 to the - device tree - -This enables the use of the auxiliary spi1 and spi2 devices -on the bcm2835 SOC. - -Note that this requires the use of the new clk-bcm2835-aux to work. - -Signed-off-by: Martin Sperl -Acked-by: Stephen Warren -[anholt: Rebased on 2835.dtsi -> 283x.dtsi change] -Signed-off-by: Eric Anholt ---- - arch/arm/boot/dts/bcm283x.dtsi | 21 +++++++++++++++++++++ - 1 file changed, 21 insertions(+) - -diff --git a/arch/arm/boot/dts/bcm283x.dtsi b/arch/arm/boot/dts/bcm283x.dtsi -index 971e741..f0d4573 100644 ---- a/arch/arm/boot/dts/bcm283x.dtsi -+++ b/arch/arm/boot/dts/bcm283x.dtsi -@@ -1,5 +1,6 @@ - #include - #include -+#include - #include "skeleton.dtsi" - - /* This include file covers the common peripherals and configuration between -@@ -159,6 +160,26 @@ - clocks = <&clocks BCM2835_CLOCK_VPU>; - }; - -+ spi1: spi@7e215080 { -+ compatible = "brcm,bcm2835-aux-spi"; -+ reg = <0x7e215080 0x40>; -+ interrupts = <1 29>; -+ clocks = <&aux BCM2835_AUX_CLOCK_SPI1>; -+ #address-cells = <1>; -+ #size-cells = <0>; -+ status = "disabled"; -+ }; -+ -+ spi2: spi@7e2150c0 { -+ compatible = "brcm,bcm2835-aux-spi"; -+ reg = <0x7e2150c0 0x40>; -+ interrupts = <1 29>; -+ clocks = <&aux BCM2835_AUX_CLOCK_SPI2>; -+ #address-cells = <1>; -+ #size-cells = <0>; -+ status = "disabled"; -+ }; -+ - sdhci: sdhci@7e300000 { - compatible = "brcm,bcm2835-sdhci"; - reg = <0x7e300000 0x100>; --- -2.7.3 - -From 3e0a385cebe3b0d9338cab356c6a11daaa64f808 Mon Sep 17 00:00:00 2001 -From: Remi Pommarel -Date: Mon, 21 Dec 2015 21:12:59 +0100 -Subject: [PATCH 22/36] ARM: bcm2835: Add PWM clock support to the device tree - -Signed-off-by: Remi Pommarel -[anholt: Rebased on 2835.dtsi -> 283x.dtsi change] -Signed-off-by: Eric Anholt ---- - arch/arm/boot/dts/bcm2835-rpi.dtsi | 4 ++++ - arch/arm/boot/dts/bcm283x.dtsi | 10 ++++++++++ - 2 files changed, 14 insertions(+) - -diff --git a/arch/arm/boot/dts/bcm2835-rpi.dtsi b/arch/arm/boot/dts/bcm2835-rpi.dtsi -index 3afb9fe..a584a93 100644 ---- a/arch/arm/boot/dts/bcm2835-rpi.dtsi -+++ b/arch/arm/boot/dts/bcm2835-rpi.dtsi -@@ -58,3 +58,7 @@ - status = "okay"; - bus-width = <4>; - }; -+ -+&pwm { -+ status = "okay"; -+}; -diff --git a/arch/arm/boot/dts/bcm283x.dtsi b/arch/arm/boot/dts/bcm283x.dtsi -index f0d4573..e4a2792 100644 ---- a/arch/arm/boot/dts/bcm283x.dtsi -+++ b/arch/arm/boot/dts/bcm283x.dtsi -@@ -180,6 +180,16 @@ - status = "disabled"; - }; - -+ pwm: pwm@7e20c000 { -+ compatible = "brcm,bcm2835-pwm"; -+ reg = <0x7e20c000 0x28>; -+ clocks = <&clocks BCM2835_CLOCK_PWM>; -+ assigned-clocks = <&clocks BCM2835_CLOCK_PWM>; -+ assigned-clock-rates = <10000000>; -+ #pwm-cells = <2>; -+ status = "disabled"; -+ }; -+ - sdhci: sdhci@7e300000 { - compatible = "brcm,bcm2835-sdhci"; - reg = <0x7e300000 0x100>; --- -2.7.3 - -From 84416a8360e7c31e6ba9f7775c077bd5f3fe32de Mon Sep 17 00:00:00 2001 -From: Lubomir Rintel -Date: Mon, 25 Jan 2016 21:40:06 +0100 -Subject: [PATCH 23/36] ARM: bcm2835: dt: Add Raspberry Pi Model A - -This one is essentially the same as revision 2 B board (with the I2S on -P5 header). - -Signed-off-by: Lubomir Rintel -Acked-by: Stephen Warren -[anholt: Rebased on bcm2835.dtsi -> bcm283x.dtsi change] -Signed-off-by: Eric Anholt ---- - arch/arm/boot/dts/Makefile | 1 + - arch/arm/boot/dts/bcm2835-rpi-a.dts | 24 ++++++++++++++++++++++++ - 2 files changed, 25 insertions(+) - create mode 100644 arch/arm/boot/dts/bcm2835-rpi-a.dts - -diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile -index a4a6d70..d000814 100644 ---- a/arch/arm/boot/dts/Makefile -+++ b/arch/arm/boot/dts/Makefile -@@ -60,6 +60,7 @@ dtb-$(CONFIG_ARCH_AXXIA) += \ - axm5516-amarillo.dtb - dtb-$(CONFIG_ARCH_BCM2835) += \ - bcm2835-rpi-b.dtb \ -+ bcm2835-rpi-a.dtb \ - bcm2835-rpi-b-rev2.dtb \ - bcm2835-rpi-b-plus.dtb \ - bcm2835-rpi-a-plus.dtb \ -diff --git a/arch/arm/boot/dts/bcm2835-rpi-a.dts b/arch/arm/boot/dts/bcm2835-rpi-a.dts -new file mode 100644 -index 0000000..ddbbbbd ---- /dev/null -+++ b/arch/arm/boot/dts/bcm2835-rpi-a.dts -@@ -0,0 +1,24 @@ -+/dts-v1/; -+#include "bcm2835.dtsi" -+#include "bcm2835-rpi.dtsi" -+ -+/ { -+ compatible = "raspberrypi,model-a", "brcm,bcm2835"; -+ model = "Raspberry Pi Model A"; -+ -+ leds { -+ act { -+ gpios = <&gpio 16 1>; -+ }; -+ }; -+}; -+ -+&gpio { -+ pinctrl-0 = <&gpioout &alt0 &i2s_alt2 &alt3>; -+ -+ /* I2S interface */ -+ i2s_alt2: i2s_alt2 { -+ brcm,pins = <28 29 30 31>; -+ brcm,function = ; -+ }; -+}; --- -2.7.3 - -From f6fd06c97f0d6d8398b8caba1b6879fa7e0284ba Mon Sep 17 00:00:00 2001 -From: Alexander Aring -Date: Wed, 16 Dec 2015 16:26:49 -0800 -Subject: [PATCH 24/36] ARM: bcm2835: Add the Raspberry Pi power domain driver - to the DT. - -This connects the USB driver to the USB power domain, so that USB can -actually be turned on at boot if the bootloader didn't do it for us. - -Signed-off-by: Alexander Aring -Signed-off-by: Eric Anholt -Reviewed-by: Kevin Hilman ---- - arch/arm/boot/dts/bcm2835-rpi.dtsi | 12 ++++++++++++ - arch/arm/boot/dts/bcm283x.dtsi | 2 +- - 2 files changed, 13 insertions(+), 1 deletion(-) - -diff --git a/arch/arm/boot/dts/bcm2835-rpi.dtsi b/arch/arm/boot/dts/bcm2835-rpi.dtsi -index a584a93..76bdbca 100644 ---- a/arch/arm/boot/dts/bcm2835-rpi.dtsi -+++ b/arch/arm/boot/dts/bcm2835-rpi.dtsi -@@ -1,3 +1,5 @@ -+#include -+ - / { - memory { - reg = <0 0x10000000>; -@@ -18,6 +20,12 @@ - compatible = "raspberrypi,bcm2835-firmware"; - mboxes = <&mailbox>; - }; -+ -+ power: power { -+ compatible = "raspberrypi,bcm2835-power"; -+ firmware = <&firmware>; -+ #power-domain-cells = <1>; -+ }; - }; - }; - -@@ -62,3 +70,7 @@ - &pwm { - status = "okay"; - }; -+ -+&usb { -+ power-domains = <&power RPI_POWER_DOMAIN_USB>; -+}; -diff --git a/arch/arm/boot/dts/bcm283x.dtsi b/arch/arm/boot/dts/bcm283x.dtsi -index e4a2792..e69a6cf 100644 ---- a/arch/arm/boot/dts/bcm283x.dtsi -+++ b/arch/arm/boot/dts/bcm283x.dtsi -@@ -218,7 +218,7 @@ - status = "disabled"; - }; - -- usb@7e980000 { -+ usb: usb@7e980000 { - compatible = "brcm,bcm2835-usb"; - reg = <0x7e980000 0x10000>; - interrupts = <1 9>; --- -2.7.3 - -From 580146c680ac7b706ac54d7d7db8204bee3d2e93 Mon Sep 17 00:00:00 2001 -From: Martin Sperl -Date: Fri, 12 Feb 2016 11:14:25 +0000 -Subject: [PATCH 25/36] ARM: bcm2835: add bcm2835-aux-uart support to DT - -Add bcm2835-aux-uart support to the device tree. - -Signed-off-by: Martin Sperl -Signed-off-by: Eric Anholt ---- - arch/arm/boot/dts/bcm283x.dtsi | 8 ++++++++ - 1 file changed, 8 insertions(+) - -diff --git a/arch/arm/boot/dts/bcm283x.dtsi b/arch/arm/boot/dts/bcm283x.dtsi -index e69a6cf..fc67964 100644 ---- a/arch/arm/boot/dts/bcm283x.dtsi -+++ b/arch/arm/boot/dts/bcm283x.dtsi -@@ -160,6 +160,14 @@ - clocks = <&clocks BCM2835_CLOCK_VPU>; - }; - -+ uart1: serial@7e215040 { -+ compatible = "brcm,bcm2835-aux-uart"; -+ reg = <0x7e215040 0x40>; -+ interrupts = <1 29>; -+ clocks = <&aux BCM2835_AUX_CLOCK_UART>; -+ status = "disabled"; -+ }; -+ - spi1: spi@7e215080 { - compatible = "brcm,bcm2835-aux-spi"; - reg = <0x7e215080 0x40>; --- -2.7.3 - -From 41135d2ce60509e53306e5b76afab98ddc15951b Mon Sep 17 00:00:00 2001 -From: Eric Anholt -Date: Mon, 2 Mar 2015 14:36:16 -0800 -Subject: [PATCH 26/36] ARM: bcm2835: Add VC4 to the device tree. - -VC4 is the GPU (display and 3D) present on the 283x. - -v2: Sort by register address, mark HDMI as disabled by default in the - SoC file and enable it from -rpi. -v3: Add references to the pixel/HSM clocks for HDMI. Rename - compatibility strings and clean up node names. -v4: Fix comment marking pv0's interrupt as pwa2 instead of pwa0. - Rename hpd-gpio to hpd-gpios. -v5: Rebase on bcm283x.dtsi change, add v3d. -v6: Make HDMI reference the power domain. -v7: Fix the HDMI HPD gpios active value and HDMI enable for each RPI - board. Change V3D compatible string to 2835. - -Signed-off-by: Eric Anholt ---- - arch/arm/boot/dts/bcm2835-rpi-a-plus.dts | 4 +++ - arch/arm/boot/dts/bcm2835-rpi-a.dts | 4 +++ - arch/arm/boot/dts/bcm2835-rpi-b-plus.dts | 4 +++ - arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts | 4 +++ - arch/arm/boot/dts/bcm2835-rpi-b.dts | 4 +++ - arch/arm/boot/dts/bcm2835-rpi.dtsi | 9 ++++++ - arch/arm/boot/dts/bcm2836-rpi-2-b.dts | 4 +++ - arch/arm/boot/dts/bcm283x.dtsi | 47 ++++++++++++++++++++++++++++++++ - 8 files changed, 80 insertions(+) - -diff --git a/arch/arm/boot/dts/bcm2835-rpi-a-plus.dts b/arch/arm/boot/dts/bcm2835-rpi-a-plus.dts -index 228614f..35ff4e7a 100644 ---- a/arch/arm/boot/dts/bcm2835-rpi-a-plus.dts -+++ b/arch/arm/boot/dts/bcm2835-rpi-a-plus.dts -@@ -29,3 +29,7 @@ - brcm,function = ; - }; - }; -+ -+&hdmi { -+ hpd-gpios = <&gpio 46 GPIO_ACTIVE_LOW>; -+}; -diff --git a/arch/arm/boot/dts/bcm2835-rpi-a.dts b/arch/arm/boot/dts/bcm2835-rpi-a.dts -index ddbbbbd..306a84e 100644 ---- a/arch/arm/boot/dts/bcm2835-rpi-a.dts -+++ b/arch/arm/boot/dts/bcm2835-rpi-a.dts -@@ -22,3 +22,7 @@ - brcm,function = ; - }; - }; -+ -+&hdmi { -+ hpd-gpios = <&gpio 46 GPIO_ACTIVE_HIGH>; -+}; -diff --git a/arch/arm/boot/dts/bcm2835-rpi-b-plus.dts b/arch/arm/boot/dts/bcm2835-rpi-b-plus.dts -index ef54050..57d313b 100644 ---- a/arch/arm/boot/dts/bcm2835-rpi-b-plus.dts -+++ b/arch/arm/boot/dts/bcm2835-rpi-b-plus.dts -@@ -29,3 +29,7 @@ - brcm,function = ; - }; - }; -+ -+&hdmi { -+ hpd-gpios = <&gpio 46 GPIO_ACTIVE_LOW>; -+}; -diff --git a/arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts b/arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts -index 86f1f2f..cf2774e 100644 ---- a/arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts -+++ b/arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts -@@ -22,3 +22,7 @@ - brcm,function = ; - }; - }; -+ -+&hdmi { -+ hpd-gpios = <&gpio 46 GPIO_ACTIVE_LOW>; -+}; -diff --git a/arch/arm/boot/dts/bcm2835-rpi-b.dts b/arch/arm/boot/dts/bcm2835-rpi-b.dts -index 4859e9d..8b15f9c 100644 ---- a/arch/arm/boot/dts/bcm2835-rpi-b.dts -+++ b/arch/arm/boot/dts/bcm2835-rpi-b.dts -@@ -16,3 +16,7 @@ - &gpio { - pinctrl-0 = <&gpioout &alt0 &alt3>; - }; -+ -+&hdmi { -+ hpd-gpios = <&gpio 46 GPIO_ACTIVE_HIGH>; -+}; -diff --git a/arch/arm/boot/dts/bcm2835-rpi.dtsi b/arch/arm/boot/dts/bcm2835-rpi.dtsi -index 76bdbca..caf2707 100644 ---- a/arch/arm/boot/dts/bcm2835-rpi.dtsi -+++ b/arch/arm/boot/dts/bcm2835-rpi.dtsi -@@ -74,3 +74,12 @@ - &usb { - power-domains = <&power RPI_POWER_DOMAIN_USB>; - }; -+ -+&v3d { -+ power-domains = <&power RPI_POWER_DOMAIN_V3D>; -+}; -+ -+&hdmi { -+ power-domains = <&power RPI_POWER_DOMAIN_HDMI>; -+ status = "okay"; -+}; -diff --git a/arch/arm/boot/dts/bcm2836-rpi-2-b.dts b/arch/arm/boot/dts/bcm2836-rpi-2-b.dts -index ff94666..c4743f4 100644 ---- a/arch/arm/boot/dts/bcm2836-rpi-2-b.dts -+++ b/arch/arm/boot/dts/bcm2836-rpi-2-b.dts -@@ -33,3 +33,7 @@ - brcm,function = ; - }; - }; -+ -+&hdmi { -+ hpd-gpios = <&gpio 46 GPIO_ACTIVE_LOW>; -+}; -diff --git a/arch/arm/boot/dts/bcm283x.dtsi b/arch/arm/boot/dts/bcm283x.dtsi -index fc67964..bbe4eab 100644 ---- a/arch/arm/boot/dts/bcm283x.dtsi -+++ b/arch/arm/boot/dts/bcm283x.dtsi -@@ -1,6 +1,7 @@ - #include - #include - #include -+#include - #include "skeleton.dtsi" - - /* This include file covers the common peripherals and configuration between -@@ -153,6 +154,18 @@ - status = "disabled"; - }; - -+ pixelvalve@7e206000 { -+ compatible = "brcm,bcm2835-pixelvalve0"; -+ reg = <0x7e206000 0x100>; -+ interrupts = <2 13>; /* pwa0 */ -+ }; -+ -+ pixelvalve@7e207000 { -+ compatible = "brcm,bcm2835-pixelvalve1"; -+ reg = <0x7e207000 0x100>; -+ interrupts = <2 14>; /* pwa1 */ -+ }; -+ - aux: aux@0x7e215000 { - compatible = "brcm,bcm2835-aux"; - #clock-cells = <1>; -@@ -206,6 +219,12 @@ - status = "disabled"; - }; - -+ hvs@7e400000 { -+ compatible = "brcm,bcm2835-hvs"; -+ reg = <0x7e400000 0x6000>; -+ interrupts = <2 1>; -+ }; -+ - i2c1: i2c@7e804000 { - compatible = "brcm,bcm2835-i2c"; - reg = <0x7e804000 0x1000>; -@@ -226,11 +245,39 @@ - status = "disabled"; - }; - -+ pixelvalve@7e807000 { -+ compatible = "brcm,bcm2835-pixelvalve2"; -+ reg = <0x7e807000 0x100>; -+ interrupts = <2 10>; /* pixelvalve */ -+ }; -+ -+ hdmi: hdmi@7e902000 { -+ compatible = "brcm,bcm2835-hdmi"; -+ reg = <0x7e902000 0x600>, -+ <0x7e808000 0x100>; -+ interrupts = <2 8>, <2 9>; -+ ddc = <&i2c2>; -+ clocks = <&clocks BCM2835_PLLH_PIX>, -+ <&clocks BCM2835_CLOCK_HSM>; -+ clock-names = "pixel", "hdmi"; -+ status = "disabled"; -+ }; -+ - usb: usb@7e980000 { - compatible = "brcm,bcm2835-usb"; - reg = <0x7e980000 0x10000>; - interrupts = <1 9>; - }; -+ -+ v3d: v3d@7ec00000 { -+ compatible = "brcm,bcm2835-v3d"; -+ reg = <0x7ec00000 0x1000>; -+ interrupts = <1 10>; -+ }; -+ -+ vc4: gpu { -+ compatible = "brcm,bcm2835-vc4"; -+ }; - }; - - clocks { --- -2.7.3 - -From da77f737f9f5a487f3a1f80f8546585ee18cd7b9 Mon Sep 17 00:00:00 2001 -From: Eric Anholt -Date: Fri, 4 Mar 2016 10:39:28 -0800 -Subject: [PATCH 27/36] dt-bindings: Add root properties for Raspberry Pi 3 - -Signed-off-by: Eric Anholt -Acked-by: Rob Herring ---- - Documentation/devicetree/bindings/arm/bcm/brcm,bcm2835.txt | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/Documentation/devicetree/bindings/arm/bcm/brcm,bcm2835.txt b/Documentation/devicetree/bindings/arm/bcm/brcm,bcm2835.txt -index 11d3056..6ffe087 100644 ---- a/Documentation/devicetree/bindings/arm/bcm/brcm,bcm2835.txt -+++ b/Documentation/devicetree/bindings/arm/bcm/brcm,bcm2835.txt -@@ -30,6 +30,10 @@ Raspberry Pi 2 Model B - Required root node properties: - compatible = "raspberrypi,2-model-b", "brcm,bcm2836"; - -+Raspberry Pi 3 Model B -+Required root node properties: -+compatible = "raspberrypi,3-model-b", "brcm,bcm2837"; -+ - Raspberry Pi Compute Module - Required root node properties: - compatible = "raspberrypi,compute-module", "brcm,bcm2835"; --- -2.7.3 - -From b76b1cdf2e569cceab41dcf3b3f6a90965d0a02c Mon Sep 17 00:00:00 2001 -From: Eric Anholt -Date: Fri, 4 Mar 2016 10:39:29 -0800 -Subject: [PATCH 28/36] ARM: bcm2835: Add devicetree for the Raspberry Pi 3. - -For now this doesn't support the new hardware present on the Pi 3 (BT, -wifi, GPIO expander). Since the GPIO expander isn't supported, we -also don't have the LEDs like the other board files do. - -Signed-off-by: Eric Anholt -Acked-by: Stephen Warren ---- - arch/arm/boot/dts/Makefile | 3 +- - arch/arm/boot/dts/bcm2837-rpi-3-b.dts | 22 ++++++++++++ - arch/arm/boot/dts/bcm2837.dtsi | 68 +++++++++++++++++++++++++++++++++++ - 3 files changed, 92 insertions(+), 1 deletion(-) - create mode 100644 arch/arm/boot/dts/bcm2837-rpi-3-b.dts - create mode 100644 arch/arm/boot/dts/bcm2837.dtsi - -diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile -index d000814..a8a0767 100644 ---- a/arch/arm/boot/dts/Makefile -+++ b/arch/arm/boot/dts/Makefile -@@ -64,7 +64,8 @@ dtb-$(CONFIG_ARCH_BCM2835) += \ - bcm2835-rpi-b-rev2.dtb \ - bcm2835-rpi-b-plus.dtb \ - bcm2835-rpi-a-plus.dtb \ -- bcm2836-rpi-2-b.dtb -+ bcm2836-rpi-2-b.dtb \ -+ bcm2837-rpi-3-b.dtb - dtb-$(CONFIG_ARCH_BCM_5301X) += \ - bcm4708-asus-rt-ac56u.dtb \ - bcm4708-asus-rt-ac68u.dtb \ -diff --git a/arch/arm/boot/dts/bcm2837-rpi-3-b.dts b/arch/arm/boot/dts/bcm2837-rpi-3-b.dts -new file mode 100644 -index 0000000..5e8eafd ---- /dev/null -+++ b/arch/arm/boot/dts/bcm2837-rpi-3-b.dts -@@ -0,0 +1,22 @@ -+/dts-v1/; -+#include "bcm2837.dtsi" -+#include "bcm2835-rpi.dtsi" -+ -+/ { -+ compatible = "raspberrypi,3-model-b", "brcm,bcm2837"; -+ model = "Raspberry Pi 3 Model B"; -+ -+ memory { -+ reg = <0 0x40000000>; -+ }; -+}; -+ -+&gpio { -+ pinctrl-0 = <&gpioout &alt0 &i2s_alt0 &alt3>; -+ -+ /* I2S interface */ -+ i2s_alt0: i2s_alt0 { -+ brcm,pins = <28 29 30 31>; -+ brcm,function = ; -+ }; -+}; -diff --git a/arch/arm/boot/dts/bcm2837.dtsi b/arch/arm/boot/dts/bcm2837.dtsi -new file mode 100644 -index 0000000..2f36722 ---- /dev/null -+++ b/arch/arm/boot/dts/bcm2837.dtsi -@@ -0,0 +1,68 @@ -+#include "bcm283x.dtsi" -+ -+/ { -+ compatible = "brcm,bcm2836"; -+ -+ soc { -+ ranges = <0x7e000000 0x3f000000 0x1000000>, -+ <0x40000000 0x40000000 0x00001000>; -+ dma-ranges = <0xc0000000 0x00000000 0x3f000000>; -+ -+ local_intc: local_intc { -+ compatible = "brcm,bcm2836-l1-intc"; -+ reg = <0x40000000 0x100>; -+ interrupt-controller; -+ #interrupt-cells = <1>; -+ interrupt-parent = <&local_intc>; -+ }; -+ }; -+ -+ timer { -+ compatible = "arm,armv7-timer"; -+ interrupt-parent = <&local_intc>; -+ interrupts = <0>, // PHYS_SECURE_PPI -+ <1>, // PHYS_NONSECURE_PPI -+ <3>, // VIRT_PPI -+ <2>; // HYP_PPI -+ always-on; -+ }; -+ -+ cpus: cpus { -+ #address-cells = <1>; -+ #size-cells = <0>; -+ -+ cpu0: cpu@0 { -+ device_type = "cpu"; -+ compatible = "arm,cortex-a53"; -+ reg = <0>; -+ }; -+ -+ cpu1: cpu@1 { -+ device_type = "cpu"; -+ compatible = "arm,cortex-a53"; -+ reg = <1>; -+ }; -+ -+ cpu2: cpu@2 { -+ device_type = "cpu"; -+ compatible = "arm,cortex-a53"; -+ reg = <2>; -+ }; -+ -+ cpu3: cpu@3 { -+ device_type = "cpu"; -+ compatible = "arm,cortex-a53"; -+ reg = <3>; -+ }; -+ }; -+}; -+ -+/* Make the BCM2835-style global interrupt controller be a child of the -+ * CPU-local interrupt controller. -+ */ -+&intc { -+ compatible = "brcm,bcm2836-armctrl-ic"; -+ reg = <0x7e00b200 0x200>; -+ interrupt-parent = <&local_intc>; -+ interrupts = <8>; -+}; --- -2.7.3 - -From 43aa67b7bccfb189a3e57832f08710c98fe707c6 Mon Sep 17 00:00:00 2001 -From: Martin Sperl -Date: Sun, 17 Jan 2016 12:15:28 +0000 -Subject: [PATCH 29/36] ARM: bcm2835: follow dt uart node-naming convention - -This patch fixes the naming of the device tree node: uart@7e201000 -to conform to the standard of: serial@7e201000 - -Signed-off-by: Martin Sperl ---- - arch/arm/boot/dts/bcm283x.dtsi | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/arch/arm/boot/dts/bcm283x.dtsi b/arch/arm/boot/dts/bcm283x.dtsi -index bbe4eab..31cc2f2 100644 ---- a/arch/arm/boot/dts/bcm283x.dtsi -+++ b/arch/arm/boot/dts/bcm283x.dtsi -@@ -113,7 +113,7 @@ - #interrupt-cells = <2>; - }; - -- uart0: uart@7e201000 { -+ uart0: serial@7e201000 { - compatible = "brcm,bcm2835-pl011", "arm,pl011", "arm,primecell"; - reg = <0x7e201000 0x1000>; - interrupts = <2 25>; --- -2.7.3 - -From 72b53a14be5ff0bda535faefa09bc9726acbe1ff Mon Sep 17 00:00:00 2001 -From: Martin Sperl -Date: Sun, 17 Jan 2016 12:15:29 +0000 -Subject: [PATCH 30/36] dt/bindings: serial: bcm2835: add binding documentation - for bcm2835-aux-uart - -Add binding documentation for the bcm2835-aux-uart driver. - -Signed-off-by: Martin Sperl - -Changelog: - V2->V3: fixed naming convention for node -Acked-by: Rob Herring -Acked-by: Eric Anholt ---- - .../bindings/serial/brcm,bcm2835-aux-uart.txt | 18 ++++++++++++++++++ - 1 file changed, 18 insertions(+) - create mode 100644 Documentation/devicetree/bindings/serial/brcm,bcm2835-aux-uart.txt - -diff --git a/Documentation/devicetree/bindings/serial/brcm,bcm2835-aux-uart.txt b/Documentation/devicetree/bindings/serial/brcm,bcm2835-aux-uart.txt -new file mode 100644 -index 0000000..b5cc629 ---- /dev/null -+++ b/Documentation/devicetree/bindings/serial/brcm,bcm2835-aux-uart.txt -@@ -0,0 +1,18 @@ -+* BCM2835 AUXILIAR UART -+ -+Required properties: -+ -+- compatible: "brcm,bcm2835-aux-uart" -+- reg: The base address of the UART register bank. -+- interrupts: A single interrupt specifier. -+- clocks: Clock driving the hardware; used to figure out the baud rate -+ divisor. -+ -+Example: -+ -+ uart1: serial@7e215040 { -+ compatible = "brcm,bcm2835-aux-uart"; -+ reg = <0x7e215040 0x40>; -+ interrupts = <1 29>; -+ clocks = <&aux BCM2835_AUX_CLOCK_UART>; -+ }; --- -2.7.3 - -From 285a4ac466d3712b50f5c0d29bf5874476f00c30 Mon Sep 17 00:00:00 2001 -From: Martin Sperl -Date: Sun, 17 Jan 2016 12:15:30 +0000 -Subject: [PATCH 31/36] serial: bcm2835: add driver for bcm2835-aux-uart - -The bcm2835 SOC contains an auxiliary uart, which is very close -to the ns16550 with some differences. - -The big difference is that the uart HW is not using an internal divider -of 16 but 8, which results in an effictive baud-rate being twice -the requested baud-rate. - -This driver handles this device correctly and handles the difference in -the HW divider by scaling up the clock by a factor of 2. - -The approach to write a separate (wrapper) driver instead of using a -multiplying clock and "ns16550" as compatibility in the device-tree -has been recommended by Stephen Warren. - -Signed-off-by: Martin Sperl - -Changelog: - V1->V2: made an explicit bcm2835-aux-uart driver - not conrolling the settings via DT only - V2->V3: added comments on UART capabilities - applied recommendations by Stefan Wahren - keep registered line-id in bcm2835aux_data -Acked-by: Eric Anholt ---- - drivers/tty/serial/8250/8250_bcm2835aux.c | 146 ++++++++++++++++++++++++++++++ - drivers/tty/serial/8250/Kconfig | 24 +++++ - drivers/tty/serial/8250/Makefile | 1 + - 3 files changed, 171 insertions(+) - create mode 100644 drivers/tty/serial/8250/8250_bcm2835aux.c - -diff --git a/drivers/tty/serial/8250/8250_bcm2835aux.c b/drivers/tty/serial/8250/8250_bcm2835aux.c -new file mode 100644 -index 0000000..ecf89f1 ---- /dev/null -+++ b/drivers/tty/serial/8250/8250_bcm2835aux.c -@@ -0,0 +1,146 @@ -+/* -+ * Serial port driver for BCM2835AUX UART -+ * -+ * Copyright (C) 2016 Martin Sperl -+ * -+ * Based on 8250_lpc18xx.c: -+ * Copyright (C) 2015 Joachim Eastwood -+ * -+ * 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 -+#include -+#include -+#include -+#include -+ -+#include "8250.h" -+ -+struct bcm2835aux_data { -+ struct uart_8250_port uart; -+ struct clk *clk; -+ int line; -+}; -+ -+static int bcm2835aux_serial_probe(struct platform_device *pdev) -+{ -+ struct bcm2835aux_data *data; -+ struct resource *res; -+ int ret; -+ -+ /* allocate the custom structure */ -+ data = devm_kzalloc(&pdev->dev, sizeof(*data), GFP_KERNEL); -+ if (!data) -+ return -ENOMEM; -+ -+ /* initialize data */ -+ spin_lock_init(&data->uart.port.lock); -+ data->uart.capabilities = UART_CAP_FIFO; -+ data->uart.port.dev = &pdev->dev; -+ data->uart.port.regshift = 2; -+ data->uart.port.type = PORT_16550; -+ data->uart.port.iotype = UPIO_MEM; -+ data->uart.port.fifosize = 8; -+ data->uart.port.flags = UPF_SHARE_IRQ | -+ UPF_FIXED_PORT | -+ UPF_FIXED_TYPE | -+ UPF_SKIP_TEST; -+ -+ /* get the clock - this also enables the HW */ -+ data->clk = devm_clk_get(&pdev->dev, NULL); -+ ret = PTR_ERR_OR_ZERO(data->clk); -+ if (ret) { -+ dev_err(&pdev->dev, "could not get clk: %d\n", ret); -+ return ret; -+ } -+ -+ /* get the interrupt */ -+ data->uart.port.irq = platform_get_irq(pdev, 0); -+ if (data->uart.port.irq < 0) { -+ dev_err(&pdev->dev, "irq not found - %i", -+ data->uart.port.irq); -+ return data->uart.port.irq; -+ } -+ -+ /* map the main registers */ -+ res = platform_get_resource(pdev, IORESOURCE_MEM, 0); -+ if (!res) { -+ dev_err(&pdev->dev, "memory resource not found"); -+ return -EINVAL; -+ } -+ data->uart.port.membase = devm_ioremap_resource(&pdev->dev, res); -+ ret = PTR_ERR_OR_ZERO(data->uart.port.membase); -+ if (ret) -+ return ret; -+ -+ /* Check for a fixed line number */ -+ ret = of_alias_get_id(pdev->dev.of_node, "serial"); -+ if (ret >= 0) -+ data->uart.port.line = ret; -+ -+ /* enable the clock as a last step */ -+ ret = clk_prepare_enable(data->clk); -+ if (ret) { -+ dev_err(&pdev->dev, "unable to enable uart clock - %d\n", -+ ret); -+ return ret; -+ } -+ -+ /* the HW-clock divider for bcm2835aux is 8, -+ * but 8250 expects a divider of 16, -+ * so we have to multiply the actual clock by 2 -+ * to get identical baudrates. -+ */ -+ data->uart.port.uartclk = clk_get_rate(data->clk) * 2; -+ -+ /* register the port */ -+ ret = serial8250_register_8250_port(&data->uart); -+ if (ret < 0) { -+ dev_err(&pdev->dev, "unable to register 8250 port - %d\n", -+ ret); -+ goto dis_clk; -+ } -+ data->line = ret; -+ -+ platform_set_drvdata(pdev, data); -+ -+ return 0; -+ -+dis_clk: -+ clk_disable_unprepare(data->clk); -+ return ret; -+} -+ -+static int bcm2835aux_serial_remove(struct platform_device *pdev) -+{ -+ struct bcm2835aux_data *data = platform_get_drvdata(pdev); -+ -+ serial8250_unregister_port(data->uart.port.line); -+ clk_disable_unprepare(data->clk); -+ -+ return 0; -+} -+ -+static const struct of_device_id bcm2835aux_serial_match[] = { -+ { .compatible = "brcm,bcm2835-aux-uart" }, -+ { }, -+}; -+MODULE_DEVICE_TABLE(of, bcm2835aux_serial_match); -+ -+static struct platform_driver bcm2835aux_serial_driver = { -+ .driver = { -+ .name = "bcm2835-aux-uart", -+ .of_match_table = bcm2835aux_serial_match, -+ }, -+ .probe = bcm2835aux_serial_probe, -+ .remove = bcm2835aux_serial_remove, -+}; -+module_platform_driver(bcm2835aux_serial_driver); -+ -+MODULE_DESCRIPTION("BCM2835 auxiliar UART driver"); -+MODULE_AUTHOR("Martin Sperl "); -+MODULE_LICENSE("GPL v2"); -diff --git a/drivers/tty/serial/8250/Kconfig b/drivers/tty/serial/8250/Kconfig -index b03cb517..67ad6b0 100644 ---- a/drivers/tty/serial/8250/Kconfig -+++ b/drivers/tty/serial/8250/Kconfig -@@ -272,6 +272,30 @@ config SERIAL_8250_ACORN - system, say Y to this option. The driver can handle 1, 2, or 3 port - cards. If unsure, say N. - -+config SERIAL_8250_BCM2835AUX -+ tristate "BCM2835 auxiliar mini UART support" -+ depends on ARCH_BCM2835 || COMPILE_TEST -+ depends on SERIAL_8250 && SERIAL_8250_SHARE_IRQ -+ help -+ Support for the BCM2835 auxiliar mini UART. -+ -+ Features and limitations of the UART are -+ Registers are similar to 16650 registers, -+ set bits in the control registers that are unsupported -+ are ignored and read back as 0 -+ 7/8 bit operation with 1 start and 1 stop bit -+ 8 symbols deep fifo for rx and tx -+ SW controlled RTS and SW readable CTS -+ Clock rate derived from system clock -+ Uses 8 times oversampling (compared to 16 times for 16650) -+ Missing break detection (but break generation) -+ Missing framing error detection -+ Missing parity bit -+ Missing receive time-out interrupt -+ Missing DCD, DSR, DTR and RI signals -+ -+ If unsure, say N. -+ - config SERIAL_8250_FSL - bool - depends on SERIAL_8250_CONSOLE -diff --git a/drivers/tty/serial/8250/Makefile b/drivers/tty/serial/8250/Makefile -index b9b9bca..5c1869f 100644 ---- a/drivers/tty/serial/8250/Makefile -+++ b/drivers/tty/serial/8250/Makefile -@@ -12,6 +12,7 @@ obj-$(CONFIG_SERIAL_8250_PCI) += 8250_pci.o - obj-$(CONFIG_SERIAL_8250_HP300) += 8250_hp300.o - obj-$(CONFIG_SERIAL_8250_CS) += serial_cs.o - obj-$(CONFIG_SERIAL_8250_ACORN) += 8250_acorn.o -+obj-$(CONFIG_SERIAL_8250_BCM2835AUX) += 8250_bcm2835aux.o - obj-$(CONFIG_SERIAL_8250_CONSOLE) += 8250_early.o - obj-$(CONFIG_SERIAL_8250_FOURPORT) += 8250_fourport.o - obj-$(CONFIG_SERIAL_8250_ACCENT) += 8250_accent.o --- -2.7.3 - -From 528285e99c25249456023d28f521689bf9e9eb8b Mon Sep 17 00:00:00 2001 -From: Peter Robinson -Date: Wed, 30 Mar 2016 09:35:13 +0100 -Subject: [PATCH 32/36] drop usb power domain support for the moment, kills usb - ---- - arch/arm/boot/dts/bcm2835-rpi.dtsi | 4 ---- - 1 file changed, 4 deletions(-) - -diff --git a/arch/arm/boot/dts/bcm2835-rpi.dtsi b/arch/arm/boot/dts/bcm2835-rpi.dtsi -index caf2707..b1e8145 100644 ---- a/arch/arm/boot/dts/bcm2835-rpi.dtsi -+++ b/arch/arm/boot/dts/bcm2835-rpi.dtsi -@@ -71,10 +71,6 @@ - status = "okay"; - }; - --&usb { -- power-domains = <&power RPI_POWER_DOMAIN_USB>; --}; -- - &v3d { - power-domains = <&power RPI_POWER_DOMAIN_V3D>; - }; --- -2.7.3 - -From 6af83c5ff7f5514f32b1b3fa6d8d7dfe77e3acce Mon Sep 17 00:00:00 2001 -From: Stefan Wahren -Date: Sun, 17 Jan 2016 14:59:00 +0000 -Subject: [PATCH 33/36] mmc: sdhci-iproc: Clean up platform allocations if - shdci init fails - -This patch adopts the changes from 475c9e43bfa7 ("mmc: sdhci-bcm2835: -Clean up platform allocations if sdhci init fails") to sdhci-iproc. - -Signed-off-by: Stefan Wahren -Acked-by: Scott Branden -Signed-off-by: Ulf Hansson ---- - drivers/mmc/host/sdhci-iproc.c | 6 +++++- - 1 file changed, 5 insertions(+), 1 deletion(-) - -diff --git a/drivers/mmc/host/sdhci-iproc.c b/drivers/mmc/host/sdhci-iproc.c -index 3b423b0..e22060a 100644 ---- a/drivers/mmc/host/sdhci-iproc.c -+++ b/drivers/mmc/host/sdhci-iproc.c -@@ -213,7 +213,11 @@ static int sdhci_iproc_probe(struct platform_device *pdev) - host->caps1 = iproc_host->data->caps1; - } - -- return sdhci_add_host(host); -+ ret = sdhci_add_host(host); -+ if (ret) -+ goto err; -+ -+ return 0; - - err: - sdhci_pltfm_free(pdev); --- -2.7.3 - -From 1565145761d5d94991e4763001c9e60c655818f1 Mon Sep 17 00:00:00 2001 -From: Stefan Wahren -Date: Sun, 17 Jan 2016 14:59:01 +0000 -Subject: [PATCH 34/36] mmc: sdhci-iproc: Actually enable the clock - -The RPi firmware-based clocks driver can actually disable -unused clocks, so when switching to use it we ended up losing -our MMC clock once all devices were probed. - -This patch adopts the changes from 1e5a0a9a58e2 ("mmc: sdhci-bcm2835: -Actually enable the clock") to sdhci-iproc. - -Signed-off-by: Stefan Wahren -Acked-by: Scott Branden -Signed-off-by: Ulf Hansson ---- - drivers/mmc/host/sdhci-iproc.c | 9 ++++++++- - 1 file changed, 8 insertions(+), 1 deletion(-) - -diff --git a/drivers/mmc/host/sdhci-iproc.c b/drivers/mmc/host/sdhci-iproc.c -index e22060a..55bc348 100644 ---- a/drivers/mmc/host/sdhci-iproc.c -+++ b/drivers/mmc/host/sdhci-iproc.c -@@ -207,6 +207,11 @@ static int sdhci_iproc_probe(struct platform_device *pdev) - ret = PTR_ERR(pltfm_host->clk); - goto err; - } -+ ret = clk_prepare_enable(pltfm_host->clk); -+ if (ret) { -+ dev_err(&pdev->dev, "failed to enable host clk\n"); -+ goto err; -+ } - - if (iproc_host->data->pdata->quirks & SDHCI_QUIRK_MISSING_CAPS) { - host->caps = iproc_host->data->caps; -@@ -215,10 +220,12 @@ static int sdhci_iproc_probe(struct platform_device *pdev) - - ret = sdhci_add_host(host); - if (ret) -- goto err; -+ goto err_clk; - - return 0; - -+err_clk: -+ clk_disable_unprepare(pltfm_host->clk); - err: - sdhci_pltfm_free(pdev); - return ret; --- -2.7.3 - -From 49ebf153a97a0840c1e54f934411aceb93bbdee4 Mon Sep 17 00:00:00 2001 -From: Stefan Wahren -Date: Wed, 27 Jan 2016 22:25:40 +0000 -Subject: [PATCH 35/36] mmc: sdhci-iproc: define MMC caps in platform data - -This patch moves the definition of the MMC capabilities -from the probe function into iproc platform data. After -that we are able to add support for another platform more -easily. - -Signed-off-by: Stefan Wahren -Suggested-by: Stephen Warren -Acked-by: Scott Branden -Acked-by: Stephen Warren -Signed-off-by: Ulf Hansson ---- - drivers/mmc/host/sdhci-iproc.c | 5 +++-- - 1 file changed, 3 insertions(+), 2 deletions(-) - -diff --git a/drivers/mmc/host/sdhci-iproc.c b/drivers/mmc/host/sdhci-iproc.c -index 55bc348..cdc6c4a 100644 ---- a/drivers/mmc/host/sdhci-iproc.c -+++ b/drivers/mmc/host/sdhci-iproc.c -@@ -26,6 +26,7 @@ struct sdhci_iproc_data { - const struct sdhci_pltfm_data *pdata; - u32 caps; - u32 caps1; -+ u32 mmc_caps; - }; - - struct sdhci_iproc_host { -@@ -165,6 +166,7 @@ static const struct sdhci_iproc_data iproc_data = { - .pdata = &sdhci_iproc_pltfm_data, - .caps = 0x05E90000, - .caps1 = 0x00000064, -+ .mmc_caps = MMC_CAP_1_8V_DDR, - }; - - static const struct of_device_id sdhci_iproc_of_match[] = { -@@ -199,8 +201,7 @@ static int sdhci_iproc_probe(struct platform_device *pdev) - mmc_of_parse(host->mmc); - sdhci_get_of_property(pdev); - -- /* Enable EMMC 1/8V DDR capable */ -- host->mmc->caps |= MMC_CAP_1_8V_DDR; -+ host->mmc->caps |= iproc_host->data->mmc_caps; - - pltfm_host->clk = devm_clk_get(&pdev->dev, NULL); - if (IS_ERR(pltfm_host->clk)) { --- -2.7.3 - -From 208897fb02fa78d06f960916bc3781c8a060ab72 Mon Sep 17 00:00:00 2001 -From: Stefan Wahren -Date: Wed, 27 Jan 2016 22:25:41 +0000 -Subject: [PATCH 36/36] mmc: sdhci-iproc: add bcm2835 support - -Scott Branden from Broadcom said that the BCM2835 eMMC IP core is -very similar to IPROC and share most of the quirks. So use this driver -instead of separate one. - -The sdhci-iproc contains a better workaround for the clock domain -crossing problem which doesn't need any delays. This results in a -better write performance. - -Btw we get the rid of the SDHCI_CAPABILITIES hack in the sdhci_readl -function. - -Suggested-by: Scott Branden -Signed-off-by: Stefan Wahren -Acked-by: Eric Anholt -Acked-by: Scott Branden -Acked-by: Stephen Warren -Signed-off-by: Ulf Hansson ---- - drivers/mmc/host/Kconfig | 6 +++--- - drivers/mmc/host/sdhci-iproc.c | 15 +++++++++++++++ - 2 files changed, 18 insertions(+), 3 deletions(-) - -diff --git a/drivers/mmc/host/Kconfig b/drivers/mmc/host/Kconfig -index 1526b8a..60de1e4 100644 ---- a/drivers/mmc/host/Kconfig -+++ b/drivers/mmc/host/Kconfig -@@ -318,15 +318,15 @@ config MMC_SDHCI_F_SDH30 - If unsure, say N. - - config MMC_SDHCI_IPROC -- tristate "SDHCI platform support for the iProc SD/MMC Controller" -- depends on ARCH_BCM_IPROC || COMPILE_TEST -+ tristate "SDHCI support for the BCM2835 & iProc SD/MMC Controller" -+ depends on ARCH_BCM2835 || ARCH_BCM_IPROC || COMPILE_TEST - depends on MMC_SDHCI_PLTFM - default ARCH_BCM_IPROC - select MMC_SDHCI_IO_ACCESSORS - help - This selects the iProc SD/MMC controller. - -- If you have an IPROC platform with SD or MMC devices, -+ If you have a BCM2835 or IPROC platform with SD or MMC devices, - say Y or M here. - - If unsure, say N. -diff --git a/drivers/mmc/host/sdhci-iproc.c b/drivers/mmc/host/sdhci-iproc.c -index cdc6c4a..871c92c 100644 ---- a/drivers/mmc/host/sdhci-iproc.c -+++ b/drivers/mmc/host/sdhci-iproc.c -@@ -169,7 +169,22 @@ static const struct sdhci_iproc_data iproc_data = { - .mmc_caps = MMC_CAP_1_8V_DDR, - }; - -+static const struct sdhci_pltfm_data sdhci_bcm2835_pltfm_data = { -+ .quirks = SDHCI_QUIRK_BROKEN_CARD_DETECTION | -+ SDHCI_QUIRK_DATA_TIMEOUT_USES_SDCLK | -+ SDHCI_QUIRK_MISSING_CAPS, -+ .ops = &sdhci_iproc_ops, -+}; -+ -+static const struct sdhci_iproc_data bcm2835_data = { -+ .pdata = &sdhci_bcm2835_pltfm_data, -+ .caps = SDHCI_CAN_VDD_330, -+ .caps1 = 0x00000000, -+ .mmc_caps = 0x00000000, -+}; -+ - static const struct of_device_id sdhci_iproc_of_match[] = { -+ { .compatible = "brcm,bcm2835-sdhci", .data = &bcm2835_data }, - { .compatible = "brcm,sdhci-iproc-cygnus", .data = &iproc_data }, - { } - }; --- -2.7.3 - diff --git a/bcm283x-upstream-fixes.patch b/bcm283x-upstream-fixes.patch new file mode 100644 index 000000000..d8bb87ca0 --- /dev/null +++ b/bcm283x-upstream-fixes.patch @@ -0,0 +1,400 @@ +From 41135d2ce60509e53306e5b76afab98ddc15951b Mon Sep 17 00:00:00 2001 +From: Eric Anholt +Date: Mon, 2 Mar 2015 14:36:16 -0800 +Subject: [PATCH 26/36] ARM: bcm2835: Add VC4 to the device tree. + +VC4 is the GPU (display and 3D) present on the 283x. + +v2: Sort by register address, mark HDMI as disabled by default in the + SoC file and enable it from -rpi. +v3: Add references to the pixel/HSM clocks for HDMI. Rename + compatibility strings and clean up node names. +v4: Fix comment marking pv0's interrupt as pwa2 instead of pwa0. + Rename hpd-gpio to hpd-gpios. +v5: Rebase on bcm283x.dtsi change, add v3d. +v6: Make HDMI reference the power domain. +v7: Fix the HDMI HPD gpios active value and HDMI enable for each RPI + board. Change V3D compatible string to 2835. + +Signed-off-by: Eric Anholt +--- + arch/arm/boot/dts/bcm2835-rpi-a-plus.dts | 4 +++ + arch/arm/boot/dts/bcm2835-rpi-a.dts | 4 +++ + arch/arm/boot/dts/bcm2835-rpi-b-plus.dts | 4 +++ + arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts | 4 +++ + arch/arm/boot/dts/bcm2835-rpi-b.dts | 4 +++ + arch/arm/boot/dts/bcm2835-rpi.dtsi | 9 ++++++ + arch/arm/boot/dts/bcm2836-rpi-2-b.dts | 4 +++ + arch/arm/boot/dts/bcm283x.dtsi | 47 ++++++++++++++++++++++++++++++++ + 8 files changed, 80 insertions(+) + +diff --git a/arch/arm/boot/dts/bcm2835-rpi-a-plus.dts b/arch/arm/boot/dts/bcm2835-rpi-a-plus.dts +index 228614f..35ff4e7a 100644 +--- a/arch/arm/boot/dts/bcm2835-rpi-a-plus.dts ++++ b/arch/arm/boot/dts/bcm2835-rpi-a-plus.dts +@@ -29,3 +29,7 @@ + brcm,function = ; + }; + }; ++ ++&hdmi { ++ hpd-gpios = <&gpio 46 GPIO_ACTIVE_LOW>; ++}; +diff --git a/arch/arm/boot/dts/bcm2835-rpi-a.dts b/arch/arm/boot/dts/bcm2835-rpi-a.dts +index ddbbbbd..306a84e 100644 +--- a/arch/arm/boot/dts/bcm2835-rpi-a.dts ++++ b/arch/arm/boot/dts/bcm2835-rpi-a.dts +@@ -22,3 +22,7 @@ + brcm,function = ; + }; + }; ++ ++&hdmi { ++ hpd-gpios = <&gpio 46 GPIO_ACTIVE_HIGH>; ++}; +diff --git a/arch/arm/boot/dts/bcm2835-rpi-b-plus.dts b/arch/arm/boot/dts/bcm2835-rpi-b-plus.dts +index ef54050..57d313b 100644 +--- a/arch/arm/boot/dts/bcm2835-rpi-b-plus.dts ++++ b/arch/arm/boot/dts/bcm2835-rpi-b-plus.dts +@@ -29,3 +29,7 @@ + brcm,function = ; + }; + }; ++ ++&hdmi { ++ hpd-gpios = <&gpio 46 GPIO_ACTIVE_LOW>; ++}; +diff --git a/arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts b/arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts +index 86f1f2f..cf2774e 100644 +--- a/arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts ++++ b/arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts +@@ -22,3 +22,7 @@ + brcm,function = ; + }; + }; ++ ++&hdmi { ++ hpd-gpios = <&gpio 46 GPIO_ACTIVE_LOW>; ++}; +diff --git a/arch/arm/boot/dts/bcm2835-rpi-b.dts b/arch/arm/boot/dts/bcm2835-rpi-b.dts +index 4859e9d..8b15f9c 100644 +--- a/arch/arm/boot/dts/bcm2835-rpi-b.dts ++++ b/arch/arm/boot/dts/bcm2835-rpi-b.dts +@@ -16,3 +16,7 @@ + &gpio { + pinctrl-0 = <&gpioout &alt0 &alt3>; + }; ++ ++&hdmi { ++ hpd-gpios = <&gpio 46 GPIO_ACTIVE_HIGH>; ++}; +diff --git a/arch/arm/boot/dts/bcm2835-rpi.dtsi b/arch/arm/boot/dts/bcm2835-rpi.dtsi +index 76bdbca..caf2707 100644 +--- a/arch/arm/boot/dts/bcm2835-rpi.dtsi ++++ b/arch/arm/boot/dts/bcm2835-rpi.dtsi +@@ -74,3 +74,12 @@ + &usb { + power-domains = <&power RPI_POWER_DOMAIN_USB>; + }; ++ ++&v3d { ++ power-domains = <&power RPI_POWER_DOMAIN_V3D>; ++}; ++ ++&hdmi { ++ power-domains = <&power RPI_POWER_DOMAIN_HDMI>; ++ status = "okay"; ++}; +diff --git a/arch/arm/boot/dts/bcm2836-rpi-2-b.dts b/arch/arm/boot/dts/bcm2836-rpi-2-b.dts +index ff94666..c4743f4 100644 +--- a/arch/arm/boot/dts/bcm2836-rpi-2-b.dts ++++ b/arch/arm/boot/dts/bcm2836-rpi-2-b.dts +@@ -33,3 +33,7 @@ + brcm,function = ; + }; + }; ++ ++&hdmi { ++ hpd-gpios = <&gpio 46 GPIO_ACTIVE_LOW>; ++}; +diff --git a/arch/arm/boot/dts/bcm283x.dtsi b/arch/arm/boot/dts/bcm283x.dtsi +index fc67964..bbe4eab 100644 +--- a/arch/arm/boot/dts/bcm283x.dtsi ++++ b/arch/arm/boot/dts/bcm283x.dtsi +@@ -1,6 +1,7 @@ + #include + #include + #include ++#include + #include "skeleton.dtsi" + + /* This include file covers the common peripherals and configuration between +@@ -153,6 +154,18 @@ + status = "disabled"; + }; + ++ pixelvalve@7e206000 { ++ compatible = "brcm,bcm2835-pixelvalve0"; ++ reg = <0x7e206000 0x100>; ++ interrupts = <2 13>; /* pwa0 */ ++ }; ++ ++ pixelvalve@7e207000 { ++ compatible = "brcm,bcm2835-pixelvalve1"; ++ reg = <0x7e207000 0x100>; ++ interrupts = <2 14>; /* pwa1 */ ++ }; ++ + aux: aux@0x7e215000 { + compatible = "brcm,bcm2835-aux"; + #clock-cells = <1>; +@@ -206,6 +219,12 @@ + status = "disabled"; + }; + ++ hvs@7e400000 { ++ compatible = "brcm,bcm2835-hvs"; ++ reg = <0x7e400000 0x6000>; ++ interrupts = <2 1>; ++ }; ++ + i2c1: i2c@7e804000 { + compatible = "brcm,bcm2835-i2c"; + reg = <0x7e804000 0x1000>; +@@ -226,11 +245,39 @@ + status = "disabled"; + }; + ++ pixelvalve@7e807000 { ++ compatible = "brcm,bcm2835-pixelvalve2"; ++ reg = <0x7e807000 0x100>; ++ interrupts = <2 10>; /* pixelvalve */ ++ }; ++ ++ hdmi: hdmi@7e902000 { ++ compatible = "brcm,bcm2835-hdmi"; ++ reg = <0x7e902000 0x600>, ++ <0x7e808000 0x100>; ++ interrupts = <2 8>, <2 9>; ++ ddc = <&i2c2>; ++ clocks = <&clocks BCM2835_PLLH_PIX>, ++ <&clocks BCM2835_CLOCK_HSM>; ++ clock-names = "pixel", "hdmi"; ++ status = "disabled"; ++ }; ++ + usb: usb@7e980000 { + compatible = "brcm,bcm2835-usb"; + reg = <0x7e980000 0x10000>; + interrupts = <1 9>; + }; ++ ++ v3d: v3d@7ec00000 { ++ compatible = "brcm,bcm2835-v3d"; ++ reg = <0x7ec00000 0x1000>; ++ interrupts = <1 10>; ++ }; ++ ++ vc4: gpu { ++ compatible = "brcm,bcm2835-vc4"; ++ }; + }; + + clocks { +-- +2.7.3 + +From da77f737f9f5a487f3a1f80f8546585ee18cd7b9 Mon Sep 17 00:00:00 2001 +From: Eric Anholt +Date: Fri, 4 Mar 2016 10:39:28 -0800 +Subject: [PATCH 27/36] dt-bindings: Add root properties for Raspberry Pi 3 + +Signed-off-by: Eric Anholt +Acked-by: Rob Herring +--- + Documentation/devicetree/bindings/arm/bcm/brcm,bcm2835.txt | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/Documentation/devicetree/bindings/arm/bcm/brcm,bcm2835.txt b/Documentation/devicetree/bindings/arm/bcm/brcm,bcm2835.txt +index 11d3056..6ffe087 100644 +--- a/Documentation/devicetree/bindings/arm/bcm/brcm,bcm2835.txt ++++ b/Documentation/devicetree/bindings/arm/bcm/brcm,bcm2835.txt +@@ -30,6 +30,10 @@ Raspberry Pi 2 Model B + Required root node properties: + compatible = "raspberrypi,2-model-b", "brcm,bcm2836"; + ++Raspberry Pi 3 Model B ++Required root node properties: ++compatible = "raspberrypi,3-model-b", "brcm,bcm2837"; ++ + Raspberry Pi Compute Module + Required root node properties: + compatible = "raspberrypi,compute-module", "brcm,bcm2835"; +-- +2.7.3 + +From b76b1cdf2e569cceab41dcf3b3f6a90965d0a02c Mon Sep 17 00:00:00 2001 +From: Eric Anholt +Date: Fri, 4 Mar 2016 10:39:29 -0800 +Subject: [PATCH 28/36] ARM: bcm2835: Add devicetree for the Raspberry Pi 3. + +For now this doesn't support the new hardware present on the Pi 3 (BT, +wifi, GPIO expander). Since the GPIO expander isn't supported, we +also don't have the LEDs like the other board files do. + +Signed-off-by: Eric Anholt +Acked-by: Stephen Warren +--- + arch/arm/boot/dts/Makefile | 3 +- + arch/arm/boot/dts/bcm2837-rpi-3-b.dts | 22 ++++++++++++ + arch/arm/boot/dts/bcm2837.dtsi | 68 +++++++++++++++++++++++++++++++++++ + 3 files changed, 92 insertions(+), 1 deletion(-) + create mode 100644 arch/arm/boot/dts/bcm2837-rpi-3-b.dts + create mode 100644 arch/arm/boot/dts/bcm2837.dtsi + +diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile +index d000814..a8a0767 100644 +--- a/arch/arm/boot/dts/Makefile ++++ b/arch/arm/boot/dts/Makefile +@@ -64,7 +64,8 @@ dtb-$(CONFIG_ARCH_BCM2835) += \ + bcm2835-rpi-b-rev2.dtb \ + bcm2835-rpi-b-plus.dtb \ + bcm2835-rpi-a-plus.dtb \ +- bcm2836-rpi-2-b.dtb ++ bcm2836-rpi-2-b.dtb \ ++ bcm2837-rpi-3-b.dtb + dtb-$(CONFIG_ARCH_BCM_5301X) += \ + bcm4708-asus-rt-ac56u.dtb \ + bcm4708-asus-rt-ac68u.dtb \ +diff --git a/arch/arm/boot/dts/bcm2837-rpi-3-b.dts b/arch/arm/boot/dts/bcm2837-rpi-3-b.dts +new file mode 100644 +index 0000000..5e8eafd +--- /dev/null ++++ b/arch/arm/boot/dts/bcm2837-rpi-3-b.dts +@@ -0,0 +1,22 @@ ++/dts-v1/; ++#include "bcm2837.dtsi" ++#include "bcm2835-rpi.dtsi" ++ ++/ { ++ compatible = "raspberrypi,3-model-b", "brcm,bcm2837"; ++ model = "Raspberry Pi 3 Model B"; ++ ++ memory { ++ reg = <0 0x40000000>; ++ }; ++}; ++ ++&gpio { ++ pinctrl-0 = <&gpioout &alt0 &i2s_alt0 &alt3>; ++ ++ /* I2S interface */ ++ i2s_alt0: i2s_alt0 { ++ brcm,pins = <28 29 30 31>; ++ brcm,function = ; ++ }; ++}; +diff --git a/arch/arm/boot/dts/bcm2837.dtsi b/arch/arm/boot/dts/bcm2837.dtsi +new file mode 100644 +index 0000000..2f36722 +--- /dev/null ++++ b/arch/arm/boot/dts/bcm2837.dtsi +@@ -0,0 +1,68 @@ ++#include "bcm283x.dtsi" ++ ++/ { ++ compatible = "brcm,bcm2836"; ++ ++ soc { ++ ranges = <0x7e000000 0x3f000000 0x1000000>, ++ <0x40000000 0x40000000 0x00001000>; ++ dma-ranges = <0xc0000000 0x00000000 0x3f000000>; ++ ++ local_intc: local_intc { ++ compatible = "brcm,bcm2836-l1-intc"; ++ reg = <0x40000000 0x100>; ++ interrupt-controller; ++ #interrupt-cells = <1>; ++ interrupt-parent = <&local_intc>; ++ }; ++ }; ++ ++ timer { ++ compatible = "arm,armv7-timer"; ++ interrupt-parent = <&local_intc>; ++ interrupts = <0>, // PHYS_SECURE_PPI ++ <1>, // PHYS_NONSECURE_PPI ++ <3>, // VIRT_PPI ++ <2>; // HYP_PPI ++ always-on; ++ }; ++ ++ cpus: cpus { ++ #address-cells = <1>; ++ #size-cells = <0>; ++ ++ cpu0: cpu@0 { ++ device_type = "cpu"; ++ compatible = "arm,cortex-a53"; ++ reg = <0>; ++ }; ++ ++ cpu1: cpu@1 { ++ device_type = "cpu"; ++ compatible = "arm,cortex-a53"; ++ reg = <1>; ++ }; ++ ++ cpu2: cpu@2 { ++ device_type = "cpu"; ++ compatible = "arm,cortex-a53"; ++ reg = <2>; ++ }; ++ ++ cpu3: cpu@3 { ++ device_type = "cpu"; ++ compatible = "arm,cortex-a53"; ++ reg = <3>; ++ }; ++ }; ++}; ++ ++/* Make the BCM2835-style global interrupt controller be a child of the ++ * CPU-local interrupt controller. ++ */ ++&intc { ++ compatible = "brcm,bcm2836-armctrl-ic"; ++ reg = <0x7e00b200 0x200>; ++ interrupt-parent = <&local_intc>; ++ interrupts = <8>; ++}; +-- +2.7.3 + +From 528285e99c25249456023d28f521689bf9e9eb8b Mon Sep 17 00:00:00 2001 +From: Peter Robinson +Date: Wed, 30 Mar 2016 09:35:13 +0100 +Subject: [PATCH 32/36] drop usb power domain support for the moment, kills usb + +--- + arch/arm/boot/dts/bcm2835-rpi.dtsi | 4 ---- + 1 file changed, 4 deletions(-) + +diff --git a/arch/arm/boot/dts/bcm2835-rpi.dtsi b/arch/arm/boot/dts/bcm2835-rpi.dtsi +index caf2707..b1e8145 100644 +--- a/arch/arm/boot/dts/bcm2835-rpi.dtsi ++++ b/arch/arm/boot/dts/bcm2835-rpi.dtsi +@@ -71,10 +71,6 @@ + status = "okay"; + }; + +-&usb { +- power-domains = <&power RPI_POWER_DOMAIN_USB>; +-}; +- + &v3d { + power-domains = <&power RPI_POWER_DOMAIN_V3D>; + }; +-- +2.7.3 + diff --git a/config-arm-generic b/config-arm-generic index 9cebbb0f6..9ea02cf1d 100644 --- a/config-arm-generic +++ b/config-arm-generic @@ -41,13 +41,15 @@ CONFIG_HAVE_PERF_USER_STACK_DUMP=y CONFIG_ARM_PMU=y +# CONFIG_IOMMU_IO_PGTABLE_ARMV7S is not set + # ARM AMBA generic HW CONFIG_ARM_AMBA=y CONFIG_KERNEL_MODE_NEON=y CONFIG_ARM_CCI=y CONFIG_ARM_CCN=y CONFIG_ARM_CCI400_PMU=y -CONFIG_ARM_CCI500_PMU=y +CONFIG_ARM_CCI5xx_PMU=y CONFIG_ARM_DMA_USE_IOMMU=y CONFIG_ARM_DMA_IOMMU_ALIGNMENT=8 CONFIG_ARM_GIC=y @@ -75,7 +77,6 @@ CONFIG_CRYPTO_AES_ARM_BS=y CONFIG_CRYPTO_SHA1_ARM=y CONFIG_CRYPTO_SHA256_ARM=y CONFIG_CRYPTO_SHA1_ARM_NEON=y -CONFIG_CRYPTO_SHA512_ARM_NEON=y CONFIG_CRYPTO_SHA512_ARM=y # EDAC @@ -128,6 +129,7 @@ CONFIG_ROCKCHIP_THERMAL=m CONFIG_DRM_ROCKCHIP=m CONFIG_ROCKCHIP_DW_HDMI=m CONFIG_ROCKCHIP_DW_MIPI_DSI=y +CONFIG_ROCKCHIP_INNO_HDMI=m CONFIG_PHY_ROCKCHIP_USB=m CONFIG_DWMAC_ROCKCHIP=m CONFIG_SND_SOC_ROCKCHIP=m @@ -139,9 +141,11 @@ CONFIG_REGULATOR_ACT8865=m CONFIG_ROCKCHIP_PM_DOMAINS=y CONFIG_CRYPTO_DEV_ROCKCHIP=m CONFIG_ROCKCHIP_EFUSE=m +CONFIG_PHY_ROCKCHIP_EMMC=m +CONFIG_PHY_ROCKCHIP_DP=m +CONFIG_ROCKCHIP_MBOX=y # Tegra -CONFIG_ARM_TEGRA_CPUFREQ=y CONFIG_TEGRA_MC=y CONFIG_TEGRA124_EMC=y CONFIG_TEGRA_IOMMU_SMMU=y @@ -166,7 +170,6 @@ CONFIG_TEGRA_SOCTHERM=m CONFIG_TEGRA_HOST1X=m CONFIG_TEGRA_HOST1X_FIREWALL=y CONFIG_DRM_TEGRA=m -CONFIG_DRM_TEGRA_FBDEV=y # CONFIG_DRM_TEGRA_DEBUG is not set CONFIG_DRM_TEGRA_STAGING=y CONFIG_NOUVEAU_PLATFORM_DRIVER=y @@ -178,7 +181,7 @@ CONFIG_SND_HDA_TEGRA=m # Qualcomm - Don't currently support IPQ router devices # CONFIG_IPQ_GCC_806X is not set # CONFIG_IPQ_LCC_806X is not set -# CONFIG_IPQ_GCC_4019 is not st +# CONFIG_IPQ_GCC_4019 is not set # CONFIG_PHY_QCOM_IPQ806X_SATA is not set # CONFIG_DWMAC_IPQ806X is not set # CONFIG_PINCTRL_IPQ8064 is not set @@ -203,6 +206,7 @@ CONFIG_ARM_PSCI=y CONFIG_THERMAL=y CONFIG_CLOCK_THERMAL=y CONFIG_CPUFREQ_DT=m +CONFIG_CPUFREQ_DT_PLATDEV=y CONFIG_DEVFREQ_THERMAL=y # CONFIG_ARM_CPUIDLE is not set # CONFIG_ARM_DT_BL_CPUFREQ is not set @@ -335,10 +339,8 @@ CONFIG_MMC_SDHCI_OF_ARASAN=m # LCD Panels CONFIG_DRM_PANEL=y CONFIG_DRM_PANEL_SIMPLE=m -CONFIG_DRM_PANEL_LD9040=m CONFIG_DRM_PANEL_LG_LG4573=m CONFIG_DRM_PANEL_PANASONIC_VVX10F034N00=m -CONFIG_DRM_PANEL_S6E8AA0=m CONFIG_DRM_PANEL_SHARP_LQ101R1SX01=m CONFIG_DRM_PANEL_SHARP_LS043T1LE01=m CONFIG_DRM_PANEL_SAMSUNG_LD9040=m @@ -347,17 +349,14 @@ CONFIG_DRM_PANEL_SAMSUNG_S6E8AA0=m # Designware (used by numerous devices) CONFIG_MMC_DW=m CONFIG_MMC_DW_PLTFM=m -CONFIG_MMC_DW_IDMAC=y CONFIG_MMC_DW_K3=m CONFIG_MMC_DW_PCI=m CONFIG_SPI_DW_MMIO=m CONFIG_SPI_DW_PCI=m # CONFIG_SPI_DW_MID_DMA is not set -# CONFIG_MMC_DW_IDMAC is not set # CONFIG_MMC_QCOM_DML is not set CONFIG_USB_DWC2=m CONFIG_USB_DWC2_DUAL_ROLE=y -CONFIG_USB_DWC2_PLATFORM=m CONFIG_USB_DWC2_PCI=m # CONFIG_USB_DWC2_DEBUG is not set # CONFIG_USB_DWC2_TRACK_MISSED_SOFS is not set @@ -365,7 +364,6 @@ CONFIG_USB_DWC3=m CONFIG_USB_DWC3_DUAL_ROLE=y CONFIG_USB_DWC3_PCI=m CONFIG_USB_DWC3_OF_SIMPLE=m -# CONFIG_USB_DWC3_DEBUG is not set CONFIG_USB_DWC3_ULPI=y CONFIG_DW_WATCHDOG=m CONFIG_PCIE_DW=y @@ -483,7 +481,6 @@ CONFIG_VFIO_AMBA=m # CONFIG_CADENCE_WATCHDOG is not set # CONFIG_DRM_ARMADA is not set -# CONFIG_SHMOBILE_IOMMU is not set # CONFIG_COMMON_CLK_SI570 is not set # CONFIG_COMMON_CLK_QCOM is not set @@ -501,7 +498,6 @@ CONFIG_COMMON_CLK_SCPI=m # core -# CONFIG_INFINIBAND is not set # CONFIG_ISDN is not set # CONFIG_PCMCIA is not set # CONFIG_PARPORT is not set @@ -536,8 +532,6 @@ CONFIG_NET_VENDOR_MELLANOX=y # CONFIG_SCSI_3W_SAS is not set # CONFIG_SCSI_PM8001 is not set # CONFIG_SCSI_IPS is not set -# CONFIG_SCSI_CXGB3_ISCSI is not set -# CONFIG_SCSI_CXGB4_ISCSI is not set # CONFIG_SCSI_BFA_FC is not set # CONFIG_FUSION is not set # CONFIG_SCSI_3W_9XXX is not set @@ -584,6 +578,7 @@ CONFIG_NET_VENDOR_MELLANOX=y # drm # CONFIG_DRM_VMWGFX is not set +# CONFIG_DRM_HDLCD is not set # CONFIG_IMX_IPUV3_CORE is not set # CONFIG_DEBUG_SET_MODULE_RONX is not set diff --git a/config-arm64 b/config-arm64 index 71ba5c8cd..3c402a87d 100644 --- a/config-arm64 +++ b/config-arm64 @@ -8,16 +8,19 @@ CONFIG_ARCH_SEATTLE=y CONFIG_ARCH_SUNXI=y CONFIG_ARCH_TEGRA=y CONFIG_ARCH_XGENE=y +# CONFIG_ARCH_ALPINE is not set # CONFIG_ARCH_BCM_IPROC is not set # CONFIG_ARCH_BERLIN is not set -# CONFIG_ARCH_EXYNOS7 is not set -# CONFIG_ARCH_FSL_LS2085A is not set +# CONFIG_ARCH_EXYNOS is not set # CONFIG_ARCH_LAYERSCAPE is not set # CONFIG_ARCH_MEDIATEK is not set +# CONFIG_ARCH_MESON is not set +# CONFIG_ARCH_MVEBU is not set # CONFIG_ARCH_RENESAS is not set # CONFIG_ARCH_SPRD is not set # CONFIG_ARCH_STRATIX10 is not set # CONFIG_ARCH_THUNDER is not set +# CONFIG_ARCH_VULCAN is not set # CONFIG_ARCH_ZYNQMP is not set # CONFIG_ARCH_UNIPHIER is not set @@ -31,6 +34,7 @@ CONFIG_ARM64_ERRATUM_843419=y CONFIG_ARM64_ERRATUM_834220=y CONFIG_CAVIUM_ERRATUM_22375=y CONFIG_CAVIUM_ERRATUM_23154=y +CONFIG_CAVIUM_ERRATUM_27456=y # AMBA / VExpress # CONFIG_RTC_DRV_PL030 is not set @@ -45,6 +49,14 @@ CONFIG_ARM64_64K_PAGES=y CONFIG_ARM64_HW_AFDBM=y CONFIG_ARM64_PAN=y CONFIG_ARM64_LSE_ATOMICS=y +CONFIG_ARM64_VHE=y +CONFIG_ARM64_UAO=y + +# Have ARM team revisit +# CONFIG_RELOCATABLE is not set +# CONFIG_RANDOMIZE_BASE is not set + +CONFIG_ARM64_ACPI_PARKING_PROTOCOL=y CONFIG_BCMA_POSSIBLE=y CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0 @@ -61,7 +73,6 @@ CONFIG_HVC_DRIVER=y CONFIG_HZ=100 CONFIG_KVM=y -CONFIG_KVM_ARM_MAX_VCPUS=16 CONFIG_RCU_FANOUT=64 CONFIG_SPARSE_IRQ=y @@ -71,6 +82,7 @@ CONFIG_SPARSEMEM_VMEMMAP=y # CONFIG_SYS_HYPERVISOR is not set +CONFIG_ARM_SBSA_WATCHDOG=m CONFIG_RTC_DRV_EFI=y CONFIG_ACPI=y @@ -120,11 +132,11 @@ CONFIG_EDAC_XGENE=m CONFIG_PCI_XGENE=y CONFIG_PCI_XGENE_MSI=y CONFIG_I2C_XGENE_SLIMPRO=m +CONFIG_XGENE_SLIMPRO_MBOX=m # AMD Seattle CONFIG_NET_SB1000=y CONFIG_AMD_XGBE=m -CONFIG_AMD_XGBE_PHY=m CONFIG_AMD_XGBE_DCB=y CONFIG_VFIO_PLATFORM_AMDXGBE_RESET=m CONFIG_PINCTRL_AMD=y @@ -136,11 +148,11 @@ CONFIG_PCI_HISI=y CONFIG_POWER_RESET_HISI=y CONFIG_HISI_THERMAL=m CONFIG_STUB_CLK_HI6220=y -CONFIG_MFD_HI655X_PMIC=m CONFIG_REGULATOR_HI655X=m CONFIG_PHY_HI6220_USB=m CONFIG_COMMON_RESET_HI6220=m # CONFIG_ARM_HISI_ACPU_CPUFREQ is not set +CONFIG_HI6220_MBOX=m # Tegra CONFIG_ARCH_TEGRA_132_SOC=y @@ -228,12 +240,16 @@ CONFIG_QCOM_COINCELL=m # ThunderX # CONFIG_MDIO_OCTEON is not set +# CONFIG_MDIO_THUNDER is not set +# CONFIG_PCI_HOST_THUNDER_PEM is not set +# CONFIG_PCI_HOST_THUNDER_ECAM is not set CONFIG_DMI=y CONFIG_DMIID=y CONFIG_DMI_SYSFS=y CONFIG_SATA_AHCI_PLATFORM=y +CONFIG_SATA_AHCI_SEATTLE=m CONFIG_LIBNVDIMM=m CONFIG_BTT=y diff --git a/config-armv7 b/config-armv7 index 955ac2fb6..7fe8444b3 100644 --- a/config-armv7 +++ b/config-armv7 @@ -64,7 +64,6 @@ CONFIG_TWL4030_WATCHDOG=m CONFIG_BATTERY_TWL4030_MADC=m CONFIG_BATTERY_BQ27XXX=m CONFIG_BATTERY_BQ27XXX_I2C=y -CONFIG_BATTERY_BQ27XXX_PLATFORM=y CONFIG_OMAP_USB2=m CONFIG_OMAP_CONTROL_PHY=m CONFIG_TI_PIPE3=m @@ -208,7 +207,6 @@ CONFIG_SND_SOC_TLV320AIC31XX=m CONFIG_SND_SOC_TPA6130A2=m CONFIG_SND_SOC_TWL4030=m CONFIG_SND_SOC_TWL6040=m -CONFIG_SND_SOC_PCM1792A=m CONFIG_RADIO_WL128X=m CONFIG_OMAP_REMOTEPROC=m @@ -238,6 +236,7 @@ CONFIG_TI_CPSW_ALE=m CONFIG_TI_CPTS=y CONFIG_TI_EMIF=m CONFIG_DRM_TILCDC=m +# CONFIG_COMMON_CLK_TI_ADPLL is not set # We only need this until the BBB dts is actually updated CONFIG_DRM_TILCDC_SLAVE_COMPAT=y CONFIG_SPI_DAVINCI=m @@ -278,7 +277,6 @@ CONFIG_SERIAL_MSM=y CONFIG_SERIAL_MSM_CONSOLE=y CONFIG_PINCTRL_APQ8064=m CONFIG_PINCTRL_APQ8084=m -CONFIG_PINCTRL_IPQ8064=m CONFIG_PINCTRL_MSM8660=m CONFIG_PINCTRL_MSM8960=m CONFIG_PINCTRL_MSM8X74=m @@ -287,7 +285,6 @@ CONFIG_PINCTRL_QCOM_SPMI_PMIC=m CONFIG_PINCTRL_QCOM_SSBI_PMIC=m CONFIG_COMMON_CLK_QCOM=m # CONFIG_MSM_GCC_8916 is not set -# CONFIG_IPQ_LCC_806X is not set # CONFIG_MSM_LCC_8960 is not set CONFIG_MFD_QCOM_RPM=m CONFIG_MFD_PM8921_CORE=m @@ -295,7 +292,6 @@ CONFIG_REGULATOR_QCOM_RPM=m CONFIG_REGULATOR_QCOM_SPMI=m CONFIG_APQ_GCC_8084=m CONFIG_APQ_MMCC_8084=m -CONFIG_IPQ_GCC_806X=m CONFIG_MSM_GCC_8660=m CONFIG_MSM_GCC_8960=m CONFIG_MSM_MMCC_8960=m @@ -306,7 +302,6 @@ CONFIG_MSM_MMCC_8996=m CONFIG_HW_RANDOM_MSM=m CONFIG_I2C_QUP=m CONFIG_SPI_QUP=m -CONFIG_GPIO_MSM_V2=m CONFIG_POWER_RESET_MSM=y CONFIG_USB_MSM_OTG=m CONFIG_MMC_SDHCI_MSM=m @@ -315,15 +310,12 @@ CONFIG_QCOM_BAM_DMA=m CONFIG_QCOM_GSBI=m CONFIG_QCOM_PM=y CONFIG_PHY_QCOM_APQ8064_SATA=m -CONFIG_PHY_QCOM_IPQ806X_SATA=m CONFIG_USB_DWC3_QCOM=m -CONFIG_DWMAC_IPQ806X=m CONFIG_CRYPTO_DEV_QCE=m CONFIG_DRM_MSM=m # CONFIG_DRM_MSM_DSI is not set CONFIG_DRM_MSM_HDMI_HDCP=y # CONFIG_DRM_MSM_REGISTER_LOGGING is not set -CONFIG_DRM_MSM_FBDEV=y CONFIG_USB_EHCI_MSM=m CONFIG_MFD_PM8XXX=m CONFIG_KEYBOARD_PMIC8XXX=m @@ -331,11 +323,11 @@ CONFIG_INPUT_PM8XXX_VIBRATOR=m CONFIG_INPUT_PMIC8XXX_PWRKEY=m CONFIG_INPUT_PM8941_PWRKEY=m CONFIG_RTC_DRV_PM8XXX=m +# CONFIG_DRM_MSM_REGISTER_LOGGING is not set CONFIG_QCOM_WDT=m CONFIG_SPMI_MSM_PMIC_ARB=m CONFIG_QCOM_SPMI_IADC=m CONFIG_QCOM_SPMI_VADC=m -CONFIG_LEDS_PM8941_WLED=m CONFIG_SND_SOC_QCOM=m CONFIG_SND_SOC_LPASS_CPU=m CONFIG_SND_SOC_LPASS_PLATFORM=m @@ -354,6 +346,7 @@ CONFIG_QCOM_WCNSS_CTRL=m CONFIG_QCOM_SMSM=y CONFIG_QCOM_SMP2P=m CONFIG_PCIE_QCOM=y +CONFIG_MTD_NAND_QCOM=m # i.MX # CONFIG_MXC_DEBUG_BOARD is not set @@ -463,7 +456,6 @@ CONFIG_RTC_DRV_MXC=m CONFIG_PWM_IMX=m CONFIG_DRM_IMX=m -CONFIG_DRM_IMX_FB_HELPER=m CONFIG_DRM_IMX_HDMI=m CONFIG_IMX_IPUV3_CORE=m CONFIG_DRM_IMX_IPUV3=m @@ -594,8 +586,6 @@ CONFIG_XILINX_VDMA=m CONFIG_SND_SOC_ADI=m CONFIG_SND_SOC_ADI_AXI_I2S=m CONFIG_SND_SOC_ADI_AXI_SPDIF=m -CONFIG_XILLYBUS=m -CONFIG_XILLYBUS_PCIE=m CONFIG_XILLYBUS_OF=m CONFIG_GS_FPGABOOT=m CONFIG_USB_GADGET_XILINX=m diff --git a/config-armv7-generic b/config-armv7-generic index 19aaa55ad..fc4bafb6a 100644 --- a/config-armv7-generic +++ b/config-armv7-generic @@ -49,6 +49,9 @@ CONFIG_ARM_CPU_SUSPEND=y # CONFIG_XIP_KERNEL is not set # CONFIG_ARM_VIRT_EXT is not set +# CONFIG_DEBUG_RODATA is not set +# CONFIG_DEBUG_ALIGN_RODATA is not set + # Platforms enabled/disabled globally on ARMv7 CONFIG_ARCH_BCM=y CONFIG_ARCH_BCM2835=y @@ -58,6 +61,15 @@ CONFIG_ARCH_SUNXI=y CONFIG_ARCH_TEGRA=y CONFIG_ARCH_VEXPRESS_CORTEX_A5_A9_ERRATA=y CONFIG_ARCH_VIRT=y +# CONFIG_ARCH_ARTPEC is not set +# CONFIG_ARCH_BCM_CYGNUS is not set +# CONFIG_ARCH_BCM_NSP is not set +# CONFIG_ARCH_BCM_5301X is not set +# CONFIG_ARCH_BCM_281XX is not set +# CONFIG_ARCH_BCM_21664 is not set +# CONFIG_ARCH_BCM_63XX is not set +# CONFIG_ARCH_BRCMSTB is not set +# CONFIG_ARCH_BERLIN is not set # CONFIG_ARCH_BCM_CYGNUS is not set # CONFIG_ARCH_BCM_NSP is not set # CONFIG_ARCH_BCM_5301X is not set @@ -188,7 +200,6 @@ CONFIG_DMA_SUN4I=m CONFIG_DMA_SUN6I=m CONFIG_SUNXI_WATCHDOG=m CONFIG_NET_VENDOR_ALLWINNER=y -CONFIG_EEPROM_SUNXI_SID=m CONFIG_RTC_DRV_SUNXI=m CONFIG_PHY_SUN4I_USB=m # CONFIG_PHY_SUN9I_USB is not set @@ -201,6 +212,8 @@ CONFIG_GPIO_PCA953X=m CONFIG_GPIO_PCF857X=m CONFIG_TOUCHSCREEN_SUN4I=m CONFIG_MFD_AXP20X=y +CONFIG_MFD_AXP20X_I2C=m +CONFIG_MFD_AXP20X_RSB=m CONFIG_AXP20X_POWER=m CONFIG_INPUT_AXP20X_PEK=m CONFIG_REGULATOR_AXP20X=m @@ -222,6 +235,7 @@ CONFIG_CAN_SUN4I=m CONFIG_USB_MUSB_SUNXI=m CONFIG_CRYPTO_DEV_SUN4I_SS=m CONFIG_SND_SUN4I_CODEC=m +CONFIG_SND_SUN4I_SPDIF=m CONFIG_SUNXI_RSB=m CONFIG_NVMEM_SUNXI_SID=m @@ -258,7 +272,6 @@ CONFIG_SOC_EXYNOS5800=y CONFIG_SERIAL_SAMSUNG=y CONFIG_SERIAL_SAMSUNG_CONSOLE=y CONFIG_ARM_EXYNOS5440_CPUFREQ=m -CONFIG_ARM_EXYNOS_CPU_FREQ_BOOST_SW=y # CONFIG_ARM_EXYNOS_CPUIDLE is not set CONFIG_ARM_EXYNOS5_BUS_DEVFREQ=m # CONFIG_EXYNOS5420_MCPM not set @@ -354,7 +367,6 @@ CONFIG_CHARGER_MAX8997=m CONFIG_LEDS_MAX8997=m CONFIG_RTC_DRV_MAX8997=m CONFIG_RTC_DRV_MAX77686=m -CONFIG_RTC_DRV_MAX77802=m CONFIG_EXTCON_MAX8997=m # Tegra @@ -411,6 +423,7 @@ CONFIG_RTC_DRV_ISL12057=m CONFIG_RTC_DRV_MV=m CONFIG_RTC_DRV_ARMADA38X=m CONFIG_MVNETA=m +CONFIG_MVNETA_BM_ENABLE=m CONFIG_GPIO_MVEBU=y CONFIG_MVEBU_CLK_CORE=y CONFIG_MVEBU_CLK_COREDIV=y @@ -436,12 +449,12 @@ CONFIG_RTC_DRV_ARMADA38X=m # CONFIG_CACHE_FEROCEON_L2 is not set # CONFIG_CACHE_FEROCEON_L2_WRITETHROUGH is not set CONFIG_LEDS_NS2=m +CONFIG_SERIAL_MVEBU_UART=y +# CONFIG_SERIAL_MVEBU_CONSOLE is not set # DRM panels CONFIG_DRM_PANEL=y CONFIG_DRM_PANEL_SIMPLE=m -CONFIG_DRM_PANEL_LD9040=m -CONFIG_DRM_PANEL_S6E8AA0=m CONFIG_DRM_PANEL_SHARP_LQ101R1SX01=m CONFIG_DRM_PANEL_SHARP_LS043T1LE01=m CONFIG_DRM_PANEL_LG_LG4573=m @@ -488,7 +501,6 @@ CONFIG_MFD_TPS65912_SPI=y # CONFIG_PINCTRL_BCM281XX is not set # CONFIG_PINCTRL_APQ8064 is not set # CONFIG_PINCTRL_APQ8084 is not set -# CONFIG_PINCTRL_IPQ8064 is not set # CONFIG_PINCTRL_MSM8960 is not set # CONFIG_PINCTRL_MSM8660 is not set # CONFIG_PINCTRL_MSM8996 is not set @@ -521,7 +533,6 @@ CONFIG_W1_MASTER_GPIO=m # CONFIG_CRYPTO_GHASH_ARM_CE is not set # DMA -CONFIG_TI_PRIV_EDMA=y CONFIG_TI_EDMA=y # MTD @@ -563,7 +574,6 @@ CONFIG_SND_SOC_AC97_CODEC=y # RTC CONFIG_RTC_DRV_DS1305=m CONFIG_RTC_DRV_DS1390=m -CONFIG_RTC_DRV_DS3234=m CONFIG_RTC_DRV_M41T93=m CONFIG_RTC_DRV_M41T94=m CONFIG_RTC_DRV_MAX6902=m @@ -637,7 +647,6 @@ CONFIG_SENSORS_ADCXX=m CONFIG_SENSORS_ADS7871=m CONFIG_SENSORS_BH1780=m CONFIG_SENSORS_GPIO_FAN=m -CONFIG_SENSORS_HTU21=m CONFIG_SENSORS_ISL29018=m CONFIG_SENSORS_ISL29028=m CONFIG_SENSORS_LIS3_SPI=m @@ -728,7 +737,6 @@ CONFIG_CROS_EC_PROTO=y # This newly introduced mess needs to be fixed upstream :-( CONFIG_STMMAC_PLATFORM=m CONFIG_DWMAC_GENERIC=m -# CONFIG_DWMAC_IPQ806X is not set # CONFIG_DWMAC_LPC18XX is not set # CONFIG_DWMAC_MESON is not set # CONFIG_DWMAC_SOCFPGA is not set @@ -819,5 +827,4 @@ CONFIG_R8188EU=m # CONFIG_OMAP2_DSS_DEBUG is not set # CONFIG_CRYPTO_DEV_UX500_DEBUG is not set # CONFIG_AB8500_DEBUG is not set -# CONFIG_ARM_KERNMEM_PERMS is not set # CONFIG_DEBUG_LL is not set diff --git a/config-armv7-lpae b/config-armv7-lpae index 2ecc010e5..96d49e88a 100644 --- a/config-armv7-lpae +++ b/config-armv7-lpae @@ -27,7 +27,6 @@ CONFIG_ARM_ERRATA_773022=y CONFIG_KVM=y CONFIG_KVM_ARM_HOST=y -CONFIG_KVM_ARM_MAX_VCPUS=8 # CONFIG_XEN is not set CONFIG_XEN_FBDEV_FRONTEND=y @@ -62,6 +61,7 @@ CONFIG_KEYSTONE_IRQ=m CONFIG_PCI_KEYSTONE=y CONFIG_MTD_NAND_DAVINCI=m CONFIG_GPIO_SYSCON=m +CONFIG_TI_MESSAGE_MANAGER=m # Tegra (non A15 device options) # CONFIG_ARCH_TEGRA_2x_SOC is not set diff --git a/config-debug b/config-debug index c0b226889..821ff17b9 100644 --- a/config-debug +++ b/config-debug @@ -127,6 +127,4 @@ CONFIG_EDAC_DEBUG=y CONFIG_SPI_DEBUG=y -CONFIG_X86_DEBUG_STATIC_CPU_HAS=y - CONFIG_DEBUG_VM_PGFLAGS=y diff --git a/config-generic b/config-generic index e6e721c32..b4f8f091f 100644 --- a/config-generic +++ b/config-generic @@ -69,7 +69,6 @@ CONFIG_NET_NS=y CONFIG_USER_NS=y CONFIG_POSIX_MQUEUE=y -CONFIG_KDBUS=m # CONFIG_PREEMPT_NONE is not set CONFIG_PREEMPT_VOLUNTARY=y # CONFIG_PREEMPT is not set @@ -109,7 +108,9 @@ CONFIG_PCIE_ECRC=y CONFIG_PCIEAER_INJECT=m CONFIG_HOTPLUG_PCI=y # CONFIG_HOTPLUG_PCI_CPCI is not set +# CONFIG_HOTPLUG_PCI_SHPC is not set CONFIG_HOTPLUG_PCI_PCIE=y +# CONFIG_PCIE_DW_PLAT is not set # CONFIG_SGI_IOC4 is not set @@ -134,7 +135,6 @@ CONFIG_SDIO_UART=m # CONFIG_MMC_TEST is not set # CONFIG_MMC_DEBUG is not set # https://lists.fedoraproject.org/pipermail/kernel/2014-February/004889.html -# CONFIG_MMC_CLKGATE is not set CONFIG_MMC_BLOCK=m CONFIG_MMC_BLOCK_MINORS=8 CONFIG_MMC_BLOCK_BOUNCE=y @@ -178,17 +178,15 @@ CONFIG_INFINIBAND_USER_MAD=m CONFIG_INFINIBAND_USER_ACCESS=m CONFIG_INFINIBAND_ON_DEMAND_PAGING=y # Deprecated and moved to staging -# CONFIG_INFINIBAND_IPATH is not set CONFIG_INFINIBAND_ISER=m CONFIG_INFINIBAND_ISERT=m # Deprecated and moved to staging -# CONFIG_INFINIBAND_AMSO1100 is not set -# CONFIG_INFINIBAND_AMSO1100_DEBUG is not set CONFIG_INFINIBAND_CXGB3=m CONFIG_INFINIBAND_CXGB4=m CONFIG_SCSI_CXGB3_ISCSI=m CONFIG_SCSI_CXGB4_ISCSI=m # CONFIG_INFINIBAND_CXGB3_DEBUG is not set +CONFIG_INFINIBAND_I40IW=m CONFIG_INFINIBAND_NES=m # CONFIG_INFINIBAND_NES_DEBUG is not set CONFIG_INFINIBAND_QIB=m @@ -196,6 +194,8 @@ CONFIG_INFINIBAND_QIB_DCA=y CONFIG_INFINIBAND_OCRDMA=m CONFIG_INFINIBAND_USNIC=m +CONFIG_INFINIBAND_RDMAVT=m + # # Executable file formats # @@ -223,6 +223,9 @@ CONFIG_FW_LOADER=y # CONFIG_TEST_FIRMWARE is not set # CONFIG_FIRMWARE_IN_KERNEL is not set CONFIG_EXTRA_FIRMWARE="" +CONFIG_FW_CFG_SYSFS=m +# CONFIG_FW_CFG_SYSFS_CMDLINE is not set + # Give this a try in rawhide for now # CONFIG_FW_LOADER_USER_HELPER is not set @@ -252,6 +255,7 @@ CONFIG_REGMAP_I2C=m # CONFIG_SPI_LOOPBACK_TEST is not set # CONFIG_SPI_TLE62X0 is not set # CONFIG_SPI_FSL_SPI is not set +# CONFIG_SPI_AXI_SPI_ENGINE is not set # CONFIG_SPMI is not set @@ -370,9 +374,7 @@ CONFIG_BLK_DEV_FD=m # CONFIG_PARIDE is not set CONFIG_ZRAM=m # CONFIG_ZRAM_LZ4_COMPRESS is not set -# CONFIG_ZRAM_DEBUG is not set -CONFIG_BLK_CPQ_DA=m CONFIG_BLK_CPQ_CISS_DA=m CONFIG_CISS_SCSI_TAPE=y CONFIG_BLK_DEV_DAC960=m @@ -512,10 +514,8 @@ CONFIG_SCSI_MVSAS=m CONFIG_SCSI_MVSAS_TASKLET=y CONFIG_SCSI_MPT2SAS=m CONFIG_SCSI_MPT2SAS_MAX_SGE=128 -CONFIG_SCSI_MPT2SAS_LOGGING=y CONFIG_SCSI_MPT3SAS=m CONFIG_SCSI_MPT3SAS_MAX_SGE=128 -CONFIG_SCSI_MPT3SAS_LOGGING=y CONFIG_SCSI_UFSHCD=m CONFIG_SCSI_UFSHCD_PCI=m @@ -703,7 +703,6 @@ CONFIG_DM_MULTIPATH=m CONFIG_DM_SNAPSHOT=y CONFIG_DM_THIN_PROVISIONING=m CONFIG_DM_CACHE=m -CONFIG_DM_CACHE_MQ=m CONFIG_DM_CACHE_SMQ=m CONFIG_DM_CACHE_CLEANER=m # CONFIG_DM_ERA is not set @@ -746,7 +745,6 @@ CONFIG_FIREWIRE_NOSY=m # I2O device support # # CONFIG_I2O is not set -# CONFIG_I2O_LCT_NOTIFY_ON_CHANGES is not set # # Virtualization support drivers @@ -757,7 +755,6 @@ CONFIG_FIREWIRE_NOSY=m # CONFIG_NET=y -CONFIG_NETLINK_MMAP=y CONFIG_NETLINK_DIAG=m CONFIG_BPF_JIT=y @@ -792,7 +789,6 @@ CONFIG_UNIX_DIAG=m CONFIG_NET_KEY=m CONFIG_NET_KEY_MIGRATE=y CONFIG_INET=y -CONFIG_INET_LRO=y CONFIG_INET_TUNNEL=m CONFIG_INET_DIAG=m CONFIG_INET_UDP_DIAG=m @@ -816,8 +812,8 @@ CONFIG_SYN_COOKIES=y CONFIG_NET_IPVTI=m CONFIG_NET_FOU=m CONFIG_NET_FOU_IP_TUNNELS=y -CONFIG_GENEVE_CORE=m CONFIG_GENEVE=m +CONFIG_MACSEC=m CONFIG_INET_AH=m CONFIG_INET_ESP=m CONFIG_INET_IPCOMP=m @@ -903,7 +899,6 @@ CONFIG_NETFILTER_INGRESS=y CONFIG_NETFILTER_NETLINK=m CONFIG_NETFILTER_NETLINK_ACCT=m CONFIG_NETFILTER_NETLINK_QUEUE=m -CONFIG_NETFILTER_NETLINK_QUEUE_CT=y CONFIG_NETFILTER_NETLINK_LOG=m # CONFIG_NETFILTER_NETLINK_GLUE_CT is not set CONFIG_NETFILTER_XTABLES=y @@ -1280,6 +1275,9 @@ CONFIG_NET_ACT_SKBEDIT=m CONFIG_NET_ACT_VLAN=m CONFIG_NET_ACT_BPF=m CONFIG_NET_ACT_CONNMARK=m +CONFIG_NET_ACT_IFE=m +CONFIG_NET_IFE_SKBMARK=m +CONFIG_NET_IFE_SKBPRIO=m CONFIG_DCB=y CONFIG_DNS_RESOLVER=m @@ -1288,10 +1286,10 @@ CONFIG_BATMAN_ADV_BLA=y CONFIG_BATMAN_ADV_DAT=y CONFIG_BATMAN_ADV_NC=y CONFIG_BATMAN_ADV_MCAST=y +CONFIG_BATMAN_ADV_BATMAN_V=y # CONFIG_BATMAN_ADV_DEBUG is not set CONFIG_OPENVSWITCH=m -CONFIG_OPENVSWITCH_CONNTRACK=y CONFIG_OPENVSWITCH_GRE=y CONFIG_OPENVSWITCH_VXLAN=y CONFIG_OPENVSWITCH_GENEVE=y @@ -1384,7 +1382,10 @@ CONFIG_L2TP_ETH=m # CONFIG_CAIF is not set +CONFIG_AF_KCM=m + CONFIG_LWTUNNEL=y +CONFIG_NET_DEVLINK=m CONFIG_RFKILL=m CONFIG_RFKILL_GPIO=m @@ -1440,6 +1441,7 @@ CONFIG_CHELSIO_T4=m CONFIG_CHELSIO_T4VF=m CONFIG_CHELSIO_T4_DCB=y # CONFIG_CHELSIO_T4_FCOE is not set +# CONFIG_CHELSIO_T4_UWIRE is not set CONFIG_NET_VENDOR_CISCO=y CONFIG_ENIC=m @@ -1646,6 +1648,7 @@ CONFIG_MICROCHIP_PHY=m CONFIG_FIXED_PHY=y CONFIG_MDIO_BITBANG=m CONFIG_MDIO_BCM_UNIMAC=m +# CONFIG_MDIO_THUNDER is not set CONFIG_NATIONAL_PHY=m CONFIG_ICPLUS_PHY=m CONFIG_BCM63XX_PHY=m @@ -1679,6 +1682,7 @@ CONFIG_BNX2=m CONFIG_BNX2X=m CONFIG_BNX2X_SRIOV=y CONFIG_BNX2X_VXLAN=y +CONFIG_BNX2X_GENEVE=y CONFIG_CNIC=m CONFIG_FEALNX=m CONFIG_ETHOC=m @@ -1694,7 +1698,6 @@ CONFIG_JME=m # CONFIG_NET_VENDOR_AURORA is not set # -# CONFIG_IP1000 is not set CONFIG_MLX4_CORE=m CONFIG_MLX4_EN=m CONFIG_MLX4_EN_DCB=y @@ -1702,6 +1705,8 @@ CONFIG_MLX4_EN_VXLAN=y CONFIG_MLX4_INFINIBAND=m CONFIG_MLX5_CORE=m CONFIG_MLX5_CORE_EN=y +CONFIG_MLX5_CORE_EN_DCB=y +CONFIG_MLX5_CORE_EN_VXLAN=y CONFIG_MLX5_INFINIBAND=m CONFIG_MLXSW_CORE=m CONFIG_MLXSW_CORE_HWMON=y @@ -1742,7 +1747,6 @@ CONFIG_WLAN=y CONFIG_WIRELESS=y CONFIG_CFG80211=m CONFIG_CFG80211_WEXT=y -# CONFIG_CFG80211_REG_DEBUG is not set CONFIG_CFG80211_DEBUGFS=y # CONFIG_CFG80211_DEVELOPER_WARNINGS is not set CONFIG_CFG80211_DEFAULT_PS=y @@ -1770,7 +1774,6 @@ CONFIG_MAC80211_DEBUGFS=y # CONFIG_ADM8211 is not set CONFIG_WLAN_VENDOR_ATH=y CONFIG_ATH_COMMON=m -CONFIG_ATH_CARDS=m CONFIG_ATH5K=m CONFIG_ATH5K_DEBUG=y # CONFIG_ATH5K_TRACER is not set @@ -1796,6 +1799,7 @@ CONFIG_ATH9K_BTCOEX_SUPPORT=y # CONFIG_ATH10K=m CONFIG_ATH10K_PCI=m +# CONFIG_ATH10K_AHB is not set # CONFIG_ATH10K_DEBUG is not set # CONFIG_ATH10K_TRACING is not set # CONFIG_ATH_TRACEPOINTS is not set @@ -1818,7 +1822,6 @@ CONFIG_WLAN_VENDOR_INTERSIL=y CONFIG_WLAN_VENDOR_BROADCOM=y CONFIG_NET_VENDOR_BROADCOM=y CONFIG_B43=m -CONFIG_B43_PCMCIA=y CONFIG_B43_SDIO=y CONFIG_B43_BCMA=y CONFIG_B43_BCMA_PIO=y @@ -1880,6 +1883,7 @@ CONFIG_IWLDVM=m CONFIG_IWLMVM=m # CONFIG_IWLWIFI_BCAST_FILTERING is not set # CONFIG_IWLWIFI_UAPSD is not set +CONFIG_IWLWIFI_PCIE_RTPM=y CONFIG_IWLWIFI_DEBUG=y CONFIG_IWLWIFI_DEBUGFS=y @@ -1907,7 +1911,6 @@ CONFIG_RSI_USB=m CONFIG_RT2X00=m CONFIG_RT2X00_LIB_DEBUGFS=y # CONFIG_RT2X00_DEBUG is not set -CONFIG_WL_MEDIATEK=y CONFIG_WLAN_VENDOR_MEDIATEK=y CONFIG_MT7601U=m CONFIG_WLAN_VENDOR_RALINK=y @@ -1938,7 +1941,6 @@ CONFIG_USB_NET_KALMIA=m CONFIG_USB_NET_QMI_WWAN=m CONFIG_USB_NET_SMSC75XX=m CONFIG_USB_NET_CH9200=m -# CONFIG_WL_TI is not set CONFIG_ZD1211RW=m # CONFIG_ZD1211RW_DEBUG is not set @@ -1967,7 +1969,7 @@ CONFIG_RTL8188EE=m CONFIG_RTL8821AE=m CONFIG_RTL8XXXU=m # NOTE! This should be disabled when branching to stable -# CONFIG_RTL8XXXU_UNTESTED is not set +CONFIG_RTL8XXXU_UNTESTED=y CONFIG_MWIFIEX=m CONFIG_MWIFIEX_SDIO=m @@ -2075,6 +2077,7 @@ CONFIG_CAN_GS_USB=m CONFIG_CAN_8DEV_USB=m CONFIG_CAN_SOFTING=m # CONFIG_CAN_SOFTING_CS is not set +CONFIG_CAN_IFI_CANFD=m CONFIG_NETROM=m CONFIG_ROSE=m @@ -2108,8 +2111,6 @@ CONFIG_NFC_MICROREAD_I2C=m CONFIG_NFC_TRF7970A=m CONFIG_NFC_ST21NFCA=m CONFIG_NFC_ST21NFCA_I2C=m -# CONFIG_NFC_ST21NFCB is not set -# CONFIG_NFC_ST21NFCB_I2C is not set # CONFIG_NFC_ST95HF is not set CONFIG_NFC_NXP_NCI=m CONFIG_NFC_NXP_NCI_I2C=m @@ -2169,6 +2170,7 @@ CONFIG_BT_BREDR=y CONFIG_BT_HS=y CONFIG_BT_LE=y CONFIG_BT_6LOWPAN=m +CONFIG_BT_LEDS=y # CONFIG_BT_SELFTEST is not set # CONFIG_BT_DEBUGFS is not set CONFIG_BT_SCO=y @@ -2196,6 +2198,7 @@ CONFIG_BT_HCIUART_3WIRE=y CONFIG_BT_HCIUART_INTEL=y CONFIG_BT_HCIUART_BCM=y CONFIG_BT_HCIUART_QCA=y +CONFIG_BT_HCIUART_AG6XX=y CONFIG_BT_HCIDTL1=m CONFIG_BT_HCIBT3C=m CONFIG_BT_HCIBLUECARD=m @@ -2536,6 +2539,7 @@ CONFIG_TOUCHSCREEN_ZFORCE=m # CONFIG_TOUCHSCREEN_FT6236 is not set # CONFIG_TOUCHSCREEN_ROHM_BU21023 is not set # CONFIG_TOUCHSCREEN_TSC2004 is not set +# CONFIG_TOUCHSCREEN_MELFAS_MIP4 is not set CONFIG_INPUT_MISC=y CONFIG_INPUT_E3X0_BUTTON=m @@ -2560,6 +2564,13 @@ CONFIG_INPUT_MPU3050=m CONFIG_INPUT_KXTJ9=m # CONFIG_INPUT_KXTJ9_POLLED_MODE is not set +CONFIG_RMI4_CORE=m +CONFIG_RMI4_I2C=m +CONFIG_RMI4_F11=y +CONFIG_RMI4_F12=y +CONFIG_RMI4_F30=y +CONFIG_RMI4_SPI=m + # # Character devices # @@ -2609,10 +2620,12 @@ CONFIG_SERIAL_8250_DW=y # CONFIG_SERIAL_8250_INGENIC is not set CONFIG_SERIAL_8250_RT288X=y CONFIG_SERIAL_8250_MID=y +CONFIG_SERIAL_8250_MOXA=m CONFIG_CYCLADES=m # CONFIG_CYZ_INTR is not set # CONFIG_MOXA_INTELLIO is not set # CONFIG_MOXA_SMARTIO is not set +# CONFIG_SERIAL_MVEBU_UART is not set # CONFIG_ISI is not set # CONFIG_RIO is not set CONFIG_SERIAL_JSM=m @@ -2662,6 +2675,7 @@ CONFIG_I2C_CHARDEV=m # CONFIG_I2C_MUX_PCA9541 is not set # CONFIG_I2C_MUX_PINCTRL is not set # CONFIG_I2C_MUX_REG is not set +# CONFIG_I2C_DEMUX_PINCTRL is not set # CONFIG_I2C_CADENCE is not set # @@ -2764,7 +2778,6 @@ CONFIG_SENSORS_GL518SM=m CONFIG_SENSORS_GL520SM=m CONFIG_SENSORS_HDAPS=m # CONFIG_SENSORS_HIH6130 is not set -# CONFIG_SENSORS_HTU21 is not set # CONFIG_SENSORS_I5K_AMB is not set # FIXME: IBMAEM x86 only? CONFIG_SENSORS_IBMAEM=m @@ -2790,6 +2803,7 @@ CONFIG_SENSORS_LM93=m CONFIG_SENSORS_LM95234=m CONFIG_SENSORS_LTC4245=m CONFIG_SENSORS_LTC2945=m +CONFIG_SENSORS_LTC2990=m CONFIG_SENSORS_LTC4222=m CONFIG_SENSORS_LTC4260=m CONFIG_SENSORS_MAX1619=m @@ -2936,10 +2950,13 @@ CONFIG_STK3310=m # CONFIG_TSL4531 is not set # CONFIG_NAU7802 is not set # CONFIG_TI_ADC081C is not set +# CONFIG_TI_ADC0832 is not set # CONFIG_TI_ADS8688 is not set +# CONFIG_TI_ADS1015 is not set # CONFIG_TI_ADC128S052 is not set # CONFIG_VIPERBOARD_ADC is not set # CONFIG_VF610_ADC is not set +# CONFIG_VF610_DAC is not set # CONFIG_CC10001_ADC is not set # CONFIG_INV_MPU6050_IIO is not set CONFIG_IIO_ST_GYRO_3AXIS=m @@ -2986,6 +3003,7 @@ CONFIG_ACPI_ALS=m # CONFIG_AD5624R_SPI is not set # CONFIG_AD5686 is not set # CONFIG_AD5755 is not set +# CONFIG_AD5761 is not set # CONFIG_AD5764 is not set # CONFIG_AD5791 is not set # CONFIG_AD7303 is not set @@ -3002,9 +3020,14 @@ CONFIG_ACPI_ALS=m # CONFIG_ADIS16400 is not set # CONFIG_ADIS16480 is not set CONFIG_DHT11=m +# CONFIG_INV_MPU6050_I2C is not set +# CONFIG_INV_MPU6050_SPI is not set # CONFIG_MPL3115 is not set # CONFIG_MS5611 is not set # CONFIG_MPL115 is not set +# CONFIG_MPL115_I2C is not set +# CONFIG_MPL115_SPI is not set +# CONFIG_TPL0102 is not set # CONFIG_SI7005 is not set # CONFIG_SI7020 is not set # CONFIG_AS3935 is not set @@ -3013,6 +3036,8 @@ CONFIG_KXCJK1013=m # CONFIG_ISL29125 is not set # CONFIG_JSA1212 is not set CONFIG_RPR0521=m +# CONFIG_AFE4403 is not set +# CONFIG_AFE4404 is not set CONFIG_MAX30100=m CONFIG_OPT3001=m CONFIG_PA12203001=m @@ -3023,6 +3048,7 @@ CONFIG_PA12203001=m # CONFIG_MAX1027 is not set # CONFIG_MXC4005 is not set # CONFIG_IAQCORE is not set +# CONFIG_ATLAS_PH_SENSOR is not set # CONFIG_INA2XX_ADC is not set # CONFIG_VZ89X is not set # CONFIG_HDC100X is not set @@ -3051,7 +3077,6 @@ CONFIG_PA12203001=m # CONFIG_SENSORS_ISL29028 is not set # CONFIG_SENSORS_HMC5843 is not set # CONFIG_SENSORS_HMC5843_SPI is not set -# CONFIG_IIO_PERIODIC_RTC_TRIGGER is not set # CONFIG_IIO_SIMPLE_DUMMY is not set # CONFIG_ADIS16201 is not set # CONFIG_ADIS16203 is not set @@ -3175,6 +3200,8 @@ CONFIG_WM831X_WATCHDOG=m # CONFIG_CADENCE_WATCHDOG is not set # CONFIG_BCM7038_WDT is not set # CONFIG_ZIIRAVE_WATCHDOG is not set +# CONFIG_EBC_C384_WDT is not set +# CONFIG_NI903X_WDT is not set CONFIG_HW_RANDOM=y CONFIG_HW_RANDOM_TIMERIOMEM=m @@ -3194,6 +3221,7 @@ CONFIG_RTC_INTF_DEV=y CONFIG_RTC_DRV_CMOS=y CONFIG_RTC_DRV_ABX80X=m CONFIG_RTC_DRV_DS1307=m +CONFIG_RTC_DRV_DS1307_HWMON=y CONFIG_RTC_DRV_DS1511=m CONFIG_RTC_DRV_DS1553=m CONFIG_RTC_DRV_DS1685_FAMILY=m @@ -3239,13 +3267,14 @@ CONFIG_RTC_DRV_MSM6242=m CONFIG_RTC_DRV_RP5C01=m CONFIG_RTC_DRV_EM3027=m CONFIG_RTC_DRV_RV3029C2=m +CONFIG_RTC_DRV_RV3029_HWMON=y CONFIG_RTC_DRV_PCF50633=m CONFIG_RTC_DRV_DS3232=m CONFIG_RTC_DRV_ISL12022=m CONFIG_RTC_DRV_MCP795=m CONFIG_RTC_DRV_RX4581=m +# CONFIG_RTC_DRV_RX6110 is not set CONFIG_RTC_DRV_PCF2123=m -CONFIG_RTC_DRV_DS3234=m CONFIG_RTC_DRV_RS5C348=m CONFIG_RTC_DRV_R9701=m CONFIG_RTC_DRV_MAX6902=m @@ -3288,6 +3317,7 @@ CONFIG_VGA_ARB_MAX_GPUS=16 CONFIG_DRM=m +CONFIG_DRM_DP_AUX_CHARDEV=y CONFIG_DRM_FBDEV_EMULATION=y CONFIG_DRM_LOAD_EDID_FIRMWARE=y CONFIG_DRM_AST=m # do not enable on f17 or older @@ -3296,8 +3326,8 @@ CONFIG_DRM_CIRRUS_QEMU=m # do not enable on f17 or older # CONFIG_DRM_R128 is not set CONFIG_DRM_RADEON=m CONFIG_DRM_RADEON_USERPTR=y -# CONFIG_DRM_RADEON_UMS is not set CONFIG_DRM_AMDGPU=m +CONFIG_DRM_AMD_ACP=y # CONFIG_DRM_AMDGPU_CIK is not set CONFIG_DRM_AMDGPU_USERPTR=y CONFIG_DRM_AMD_POWERPLAY=y @@ -3307,9 +3337,8 @@ CONFIG_DRM_MGAG200=m # do not enable on f17 or older # CONFIG_DRM_SIS is not set # CONFIG_DRM_SAVAGE is not set CONFIG_DRM_I915=m -CONFIG_DRM_I915_KMS=y -CONFIG_DRM_I915_FBDEV=y # CONFIG_DRM_I915_PRELIMINARY_HW_SUPPORT is not set +CONFIG_DRM_I915_USERPTR=y CONFIG_DRM_VIA=m CONFIG_DRM_NOUVEAU=m CONFIG_NOUVEAU_DEBUG=5 @@ -3327,11 +3356,8 @@ CONFIG_DRM_VMWGFX_FBCON=y CONFIG_DRM_QXL=m CONFIG_DRM_BOCHS=m CONFIG_DRM_VIRTIO_GPU=m -CONFIG_DRM_PTN3460=m -CONFIG_DRM_PS8622=m # CONFIG_DRM_PANEL is not set # CONFIG_DRM_PANEL_SIMPLE is not set -# CONFIG_DRM_PANEL_S6E8AA0 is not set # CONFIG_DRM_PANEL_SAMSUNG_S6E8AA0 is not set CONFIG_DRM_VGEM=m @@ -3347,6 +3373,9 @@ CONFIG_MWAVE=m CONFIG_RAW_DRIVER=y CONFIG_MAX_RAW_DEVS=8192 CONFIG_HANGCHECK_TIMER=m +CONFIG_XILLYBUS=m +CONFIG_XILLYBUS_PCIE=m +# CONFIG_XILLYBUS_OF is not set CONFIG_MEDIA_USB_SUPPORT=y CONFIG_MEDIA_PCI_SUPPORT=y @@ -3806,7 +3835,6 @@ CONFIG_SND_LX6464ES=m CONFIG_SND_HDA_INTEL=y CONFIG_SND_HDA_INPUT_BEEP=y CONFIG_SND_HDA_INPUT_BEEP_MODE=0 -CONFIG_SND_HDA_INPUT_JACK=y CONFIG_SND_HDA_PATCH_LOADER=y CONFIG_SND_HDA_HWDEP=y CONFIG_SND_HDA_CODEC_REALTEK=y @@ -3881,7 +3909,6 @@ CONFIG_SND_USB_VARIAX=m CONFIG_SND_FIREWIRE=y CONFIG_SND_ISIGHT=m -CONFIG_SND_SCS1X=m CONFIG_SND_DICE=m CONFIG_SND_OXFW=m CONFIG_SND_FIREWORKS=m @@ -4071,6 +4098,7 @@ CONFIG_HID_APPLEIR=m CONFIG_HID_LENOVO=m CONFIG_HID_CORSAIR=m CONFIG_HID_GFRM=m +CONFIG_HID_CMEDIA=m # # USB Imaging devices @@ -4242,7 +4270,6 @@ CONFIG_USB_SERIAL_KLSI=m CONFIG_USB_SERIAL_KOBIL_SCT=m CONFIG_USB_SERIAL_MCT_U232=m # CONFIG_USB_SERIAL_METRO is not set -CONFIG_USB_SERIAL_MXUPORT11=m CONFIG_USB_SERIAL_MOS7720=m CONFIG_USB_SERIAL_MOS7715_PARPORT=y # CONFIG_USB_SERIAL_WISHBONE is not set @@ -4297,7 +4324,6 @@ CONFIG_USB_ULPI_BUS=m # CONFIG_PHY_TUSB1210 is not set # CONFIG_SAMSUNG_USBPHY is not set # CONFIG_BCM_KONA_USB2_PHY is not set -# CONFIG_USB_RCAR_PHY is not set CONFIG_USB_ATM=m CONFIG_USB_CXACRU=m # CONFIG_USB_C67X00_HCD is not set @@ -4418,6 +4444,8 @@ CONFIG_MFD_VIPERBOARD=m # CONFIG_MFD_CROS_EC is not set # CONFIG_MFD_SI476X_CORE is not set # CONFIG_MFD_TPS65912 is not set +# CONFIG_MFD_TPS65912_SPI is not set +# CONFIG_MFD_TPS65912_I2C is not set # CONFIG_MFD_SYSCON is not set # CONFIG_MFD_DA9063 is not set # CONFIG_MFD_DLN2 is not set @@ -4427,7 +4455,6 @@ CONFIG_MFD_VIPERBOARD=m # CONFIG_MFD_TPS65218 is not set # CONFIG_MFD_WM831X_SPI is not set # CONFIG_MFD_ARIZONA_SPI is not set -# CONFIG_MFD_TPS65912_SPI is not set # CONFIG_MFD_MC13XXX_SPI is not set # CONFIG_MFD_DA9052_SPI is not set # CONFIG_MFD_MENF21BMC is not set @@ -4443,12 +4470,22 @@ CONFIG_MFD_VIPERBOARD=m # CONFIG_INTEL_SOC_PMIC is not set # CONFIG_MFD_ATMEL_FLEXCOM is not set # CONFIG_TS4800_IRQ is not set +# CONFIG_MFD_ACT8945A is not set +# CONFIG_MFD_AXP20X_I2C is not set +# CONFIG_MFD_AXP20X_RSB is not set +# CONFIG_MFD_88PM800 is not set +# CONFIG_MFD_88PM805 is not set +# CONFIG_MFD_MAX77686 is not set +# CONFIG_MFD_MAX8907 is not set +# CONFIG_MFD_TPS65086 is not set # # File systems # CONFIG_MISC_FILESYSTEMS=y +# CONFIG_FS_ENCRYPTION is not set + # ext4 is used for ext2 and ext3 filesystems # CONFIG_EXT2_FS is not set # CONFIG_EXT3_FS is not set @@ -4526,6 +4563,7 @@ CONFIG_MSDOS_FS=m CONFIG_VFAT_FS=m CONFIG_FAT_DEFAULT_CODEPAGE=437 CONFIG_FAT_DEFAULT_IOCHARSET="ascii" +# CONFIG_FAT_DEFAULT_UTF8 is not set # CONFIG_NTFS_FS is not set # @@ -4545,6 +4583,7 @@ CONFIG_DEBUG_FS=y # # Miscellaneous filesystems # +CONFIG_ORANGEFS_FS=m # CONFIG_ADFS_FS is not set CONFIG_AFFS_FS=m CONFIG_ECRYPT_FS=m @@ -4611,6 +4650,8 @@ CONFIG_NFSD_V3=y CONFIG_NFSD_V3_ACL=y CONFIG_NFSD_V4=y CONFIG_NFSD_PNFS=y +CONFIG_NFSD_BLOCKLAYOUT=y +CONFIG_NFSD_SCSILAYOUT=y CONFIG_NFSD_V4_SECURITY_LABEL=y CONFIG_NFS_FSCACHE=y # CONFIG_NFS_USE_LEGACY_DNS is not set @@ -4764,8 +4805,7 @@ CONFIG_NLS_ASCII=y # Profiling support # CONFIG_PROFILING=y -CONFIG_OPROFILE=m -CONFIG_OPROFILE_EVENT_MULTIPLEX=y +# CONFIG_OPROFILE is not set # # Kernel hacking @@ -4780,14 +4820,15 @@ CONFIG_DEBUG_INFO_VTA=y # CONFIG_DEBUG_INFO_SPLIT is not set # CONFIG_DEBUG_INFO_DWARF4 is not set CONFIG_FRAME_POINTER=y +CONFIG_STACK_VALIDATION=y # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set # CONFIG_DEBUG_DRIVER is not set CONFIG_HEADERS_CHECK=y # CONFIG_LKDTM is not set +# CONFIG_CPU_HOTPLUG_STATE_CONTROL is not set # CONFIG_NOTIFIER_ERROR_INJECTION is not set # CONFIG_READABLE_ASM is not set -# CONFIG_RT_MUTEX_TESTER is not set # CONFIG_DEBUG_WW_MUTEX_SLOWPATH is not set # CONFIG_DEBUG_LOCKDEP is not set # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set @@ -4804,6 +4845,8 @@ CONFIG_HEADERS_CHECK=y # This just changes a default enable with workqueue.debug_force_rr_cpu # CONFIG_DEBUG_WQ_FORCE_RR_CPU is not set # +# CONFIG_KCOV is not set +# # These debug options are deliberatly left on (even in 'make release' kernels). # They aren't that much of a performance impact, and the value # from getting useful bug-reports makes it worth leaving them on. @@ -4840,6 +4883,7 @@ CONFIG_LATENCYTOP=y # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set CONFIG_EARLY_PRINTK_DBGP=y # CONFIG_PAGE_POISONING is not set +# CONFIG_DEBUG_PAGE_REF is not set CONFIG_CRASH=m CONFIG_CRASH_DUMP=y # CONFIG_GCOV_KERNEL is not set @@ -4877,7 +4921,6 @@ CONFIG_SECURITY_SELINUX_AVC_STATS=y # CONFIG_SECURITY_TOMOYO is not set # CONFIG_SECURITY_APPARMOR is not set CONFIG_SECURITY_YAMA=y -CONFIG_SECURITY_YAMA_STACKED=y CONFIG_AUDIT=y CONFIG_AUDITSYSCALL=y # http://lists.fedoraproject.org/pipermail/kernel/2013-February/004125.html @@ -4993,7 +5036,6 @@ CONFIG_CRC8=m CONFIG_CORDIC=m # CONFIG_DDR is not set -CONFIG_CRYPTO_ZLIB=m CONFIG_ZLIB_INFLATE=y CONFIG_ZLIB_DEFLATE=m @@ -5076,7 +5118,6 @@ CONFIG_CGROUP_SCHED=y CONFIG_MEMCG=y CONFIG_MEMCG_SWAP=y CONFIG_MEMCG_SWAP_ENABLED=y -CONFIG_MEMCG_KMEM=y # CONFIG_CGROUP_HUGETLB is not set CONFIG_CGROUP_PERF=y CONFIG_CGROUP_NET_PRIO=y @@ -5184,7 +5225,6 @@ CONFIG_SND_SIMPLE_CARD=m CONFIG_SND_DESIGNWARE_I2S=m CONFIG_SND_SOC_ALL_CODECS=m CONFIG_SND_SOC_DMIC=m -CONFIG_SND_SOC_HDMI_CODEC=m CONFIG_SND_SOC_SPDIF=m CONFIG_SND_DMAENGINE_PCM=m CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM=y @@ -5200,12 +5240,13 @@ CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM=y # CONFIG_SND_SOC_CS4271 is not set # CONFIG_SND_SOC_CS42XX8_I2C is not set # CONFIG_SND_SOC_PCM1681 is not set -# CONFIG_SND_SOC_PCM1792A is not set # CONFIG_SND_SOC_PCM179X is not set # CONFIG_SND_SOC_PCM3168A_I2C is not set # CONFIG_SND_SOC_PCM3168A_SPI is not set # CONFIG_SND_SOC_PCM512x_I2C is not set # CONFIG_SND_SOC_PCM512x_SPI is not set +# CONFIG_SND_SOC_PCM179X_I2C is not set +# CONFIG_SND_SOC_PCM179X_SPI is not set # CONFIG_SND_SOC_QCOM is not set # CONFIG_SND_SOC_SGTL5000 is not set # CONFIG_SND_SOC_SIRF_AUDIO_CODEC is not set @@ -5256,6 +5297,7 @@ CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM=y # CONFIG_SND_SOC_CS42L51_I2C is not set # CONFIG_SND_SOC_CS4271_I2C is not set # CONFIG_SND_SOC_CS4271_SPI is not set +# CONFIG_SND_SOC_RT5616 is not set # CONFIG_SND_SOC_RT5631 is not set # CONFIG_SND_SOC_TFA9879 is not set # CONFIG_SND_SOC_TLV320AIC23_I2C is not set @@ -5297,7 +5339,6 @@ CONFIG_LEDS_DELL_NETBOOKS=m # CONFIG_LEDS_LP8501 is not set # CONFIG_LEDS_LP8860 is not set # CONFIG_LEDS_PCA963X is not set -# CONFIG_LEDS_PM8941_WLED is not set # CONFIG_LEDS_SYSCON is not set CONFIG_LEDS_TRIGGERS=y CONFIG_LEDS_TRIGGER_TIMER=m @@ -5313,6 +5354,7 @@ CONFIG_LEDS_CLEVO_MAIL=m CONFIG_LEDS_INTEL_SS4200=m CONFIG_LEDS_LM3530=m # CONFIG_LEDS_LM3642 is not set +# CONFIG_LEDS_IS31FL32XX is not set CONFIG_LEDS_BLINKM=m CONFIG_LEDS_LP3944=m CONFIG_LEDS_LT3593=m @@ -5343,6 +5385,8 @@ CONFIG_ASYNC_TX_DMA=y # CONFIG_HSU_DMA_PCI is not set # CONFIG_XGENE_DMA is not set # CONFIG_INTEL_IDMA64 is not set +# CONFIG_QCOM_HIDMA_MGMT is not set +# CONFIG_QCOM_HIDMA is not set CONFIG_UNUSED_SYMBOLS=y @@ -5518,7 +5562,7 @@ CONFIG_NET_DSA=m CONFIG_NET_DSA_HWMON=y CONFIG_NET_DSA_MV88E6060=m CONFIG_NET_DSA_MV88E6131=m -CONFIG_NET_DSA_MV88E6123_61_65=m +CONFIG_NET_DSA_MV88E6123=m CONFIG_NET_DSA_MV88E6171=m CONFIG_NET_DSA_MV88E6352=m CONFIG_NET_DSA_BCM_SF2=m @@ -5585,9 +5629,7 @@ CONFIG_R8723AU=m # Jes Sorensen maintains this (rhbz 1100162) # CONFIG_SOLO6X10 is not set # CONFIG_LTE_GDM724X is not set CONFIG_R8712U=m # Larry Finger maintains this (rhbz 699618) -# CONFIG_FT1000 is not set # CONFIG_SPEAKUP is not set -# CONFIG_TOUCHSCREEN_SYNAPTICS_I2C_RMI4 is not set CONFIG_ALTERA_STAPL=m # CONFIG_DVB_CXD2099 is not set # CONFIG_DVB_RTL2832_SDR is not set @@ -5598,11 +5640,8 @@ CONFIG_USBIP_HOST=m # CONFIG_USBIP_DEBUG is not set # CONFIG_INTEL_MEI is not set # CONFIG_VT6655 is not set -# CONFIG_USB_WPAN_HCD is not set -# CONFIG_WIMAX_GDM72XX is not set # CONFIG_IPACK_BUS is not set # CONFIG_LUSTRE_FS is not set -# CONFIG_XILLYBUS is not set # CONFIG_DGAP is not set # CONFIG_DGNC is not set # CONFIG_RTS5208 is not set @@ -5612,13 +5651,12 @@ CONFIG_USBIP_HOST=m # CONFIG_COMMON_CLK_XLNX_CLKWZRD is not set # CONFIG_DVB_MN88472 is not set # CONFIG_DVB_MN88473 is not set -# CONFIG_FB_SM7XX is not set # CONFIG_FB_TFT is not set # CONFIG_FB_SM750 is not set # CONFIG_STAGING_RDMA is not set -# CONFIG_WILC1000_DRIVER is not set # CONFIG_WILC1000_SDIO is not set # CONFIG_WILC1000_SPI is not set +# CONFIG_LNET is not set # END OF STAGING # @@ -5642,7 +5680,6 @@ CONFIG_LSM_MMAP_MIN_ADDR=65536 CONFIG_STRIP_ASM_SYMS=y -# CONFIG_RCU_FANOUT_EXACT is not set CONFIG_RCU_FAST_NO_HZ=y CONFIG_RCU_NOCB_CPU=y CONFIG_RCU_NOCB_CPU_ALL=y @@ -5654,9 +5691,7 @@ CONFIG_RCU_TORTURE_TEST_SLOW_INIT_DELAY=3 # CONFIG_RCU_TORTURE_TEST_SLOW_CLEANUP is not set # CONFIG_RCU_TRACE is not set # CONFIG_RCU_EQS_DEBUG is not set -# CONFIG_RCU_CPU_STALL_INFO is not set # CONFIG_TASKS_RCU is not set -# CONFIG_RCU_USER_QS is not set CONFIG_RCU_KTHREAD_PRIO=0 CONFIG_SPARSE_RCU_POINTER=y # CONFIG_RCU_EXPERT is not set @@ -5695,7 +5730,7 @@ CONFIG_ZBUD=y CONFIG_ZSMALLOC=y # CONFIG_ZSMALLOC_STAT is not set # CONFIG_PGTABLE_MAPPING is not set - +# CONFIG_DEFERRED_STRUCT_PAGE_INIT is not set # CONFIG_IDLE_PAGE_TRACKING is not set # CONFIG_MDIO_GPIO is not set @@ -5716,7 +5751,6 @@ CONFIG_GPIO_SYSFS=y # CONFIG_GPIO_CS5535 is not set # CONFIG_GPIO_ADNP is not set # CONFIG_GPIO_ADP5588 is not set -# CONFIG_GPIO_IT8761E is not set # CONFIG SB105x is not set # CONFIG_GPIO_SYSCON is not set # CONFIG_GPIO_TS5500 is not set @@ -5749,6 +5783,13 @@ CONFIG_GPIO_VIPERBOARD=m # CONFIG_GPIO_AMDPT is not set # CONFIG_GPIO_104_IDIO_16 is not set # CONFIG_GPIO_IT87 is not set +# CONFIG_GPIO_TPIC2810 is not set +# CONFIG_GPIO_MPC8XXX is not set +# CONFIG_GPIO_PISOSR is not set +# CONFIG_GPIO_TS4800 is not set +# CONFIG_GPIO_TPS65218 is not set +# CONFIG_GPIO_104_DIO_48E is not set +# CONFIG_GPIO_WS16C48 is not set # FIXME: Why? @@ -5791,12 +5832,15 @@ CONFIG_PSTORE_RAM=m # CONFIG_TEST_RHASHTABLE is not set # CONFIG_TEST_STATIC_KEYS is not set # CONFIG_TEST_PRINTF is not set +# CONFIG_TEST_BITMAP is not set # CONFIG_AVERAGE is not set # CONFIG_VMXNET3 is not set # CONFIG_SIGMA is not set +# CONFIG_GOLDFISH is not set + CONFIG_CHROME_PLATFORMS=y CONFIG_BCMA=m @@ -5857,6 +5901,7 @@ CONFIG_MODULE_SIG_SHA256=y # CONFIG_MODULE_SIG_FORCE is not set CONFIG_MODULE_SIG_KEY="certs/signing_key.pem" CONFIG_SYSTEM_TRUSTED_KEYS="" +# CONFIG_SYSTEM_EXTRA_CERTIFICATE is not set CONFIG_PKCS7_MESSAGE_PARSER=y # CONFIG_PKCS7_TEST_KEY is not set CONFIG_SIGNED_PE_FILE_VERIFICATION=y diff --git a/config-nodebug b/config-nodebug index c070f68cf..5a4319a57 100644 --- a/config-nodebug +++ b/config-nodebug @@ -127,6 +127,4 @@ CONFIG_DEBUG_KMEMLEAK_DEFAULT_OFF=y # CONFIG_SPI_DEBUG is not set -# CONFIG_X86_DEBUG_STATIC_CPU_HAS is not set - # CONFIG_DEBUG_VM_PGFLAGS is not set diff --git a/config-powerpc64-generic b/config-powerpc64-generic index ffc765a13..de387d570 100644 --- a/config-powerpc64-generic +++ b/config-powerpc64-generic @@ -7,7 +7,6 @@ CONFIG_PPC_PSERIES=y # CONFIG_PPC_83xx is not set # CONFIG_PPC_86xx is not set # CONFIG_PPC_CELL is not set -# CONFIG_PPC_CELL_QPACE is not set # CONFIG_PPC_IBM_CELL_BLADE is not set # CONFIG_PPC_MAPLE is not set # CONFIG_PPC_PASEMI is not set @@ -54,7 +53,6 @@ CONFIG_NUMA_BALANCING_DEFAULT_ENABLED=y CONFIG_PPC_64K_PAGES=y CONFIG_PPC_SUBPAGE_PROT=y CONFIG_SCHED_SMT=y -# CONFIG_TUNE_CELL is not set CONFIG_MEMORY_HOTPLUG=y CONFIG_MEMORY_HOTREMOVE=y CONFIG_PPC64_SUPPORTS_MEMORY_FAILURE=y @@ -79,7 +77,6 @@ CONFIG_CRYPTO_DEV_NX_ENCRYPT=m CONFIG_CRYPTO_DEV_NX_COMPRESS=m CONFIG_CRYPTO_DEV_NX_COMPRESS_PSERIES=m CONFIG_CRYPTO_DEV_NX_COMPRESS_POWERNV=m -CONFIG_CRYPTO_DEV_NX_COMPRESS_CRYPTO=m CONFIG_CRYPTO_DEV_VMX=y CONFIG_CRYPTO_DEV_VMX_ENCRYPT=m @@ -129,7 +126,6 @@ CONFIG_CXL=m CONFIG_CXLFLASH=m CONFIG_IBMEBUS=y CONFIG_EHEA=m -CONFIG_INFINIBAND_EHCA=m CONFIG_PPC_ICSWX=y # CONFIG_PPC_ICSWX_PID is not set # CONFIG_PPC_ICSWX_USE_SIGILL is not set @@ -200,7 +196,6 @@ CONFIG_CAPI_EICON=y # CONFIG_BLK_DEV_PLATFORM is not set # Stuff which wants bus_to_virt() or virt_to_bus() -# CONFIG_BLK_CPQ_DA is not set # CONFIG_VIDEO_ZORAN is not set # CONFIG_ATM_HORIZON is not set # CONFIG_ATM_FIRESTREAM is not set @@ -222,7 +217,6 @@ CONFIG_USB_OHCI_HCD_PPC_OF_LE=y # CONFIG_MACINTOSH_DRIVERS is not set # CONFIG_EDAC_CPC925 is not set -CONFIG_SPU_FS_64K_LS=y CONFIG_EDAC=y CONFIG_EDAC_MM_EDAC=m @@ -291,7 +285,6 @@ CONFIG_SIMPLE_GPIO=y # CONFIG_PS3_VRAM is not set CONFIG_MDIO_GPIO=m CONFIG_SERIAL_OF_PLATFORM=m -# CONFIG_SERIAL_OF_PLATFORM_NWPSERIAL is not set # CONFIG_DEBUG_GPIO is not set CONFIG_GPIO_PCA953X=m CONFIG_GPIO_PCF857X=m diff --git a/config-powerpc64le b/config-powerpc64le index 7d9f3fc3a..ec80e8bf4 100644 --- a/config-powerpc64le +++ b/config-powerpc64le @@ -2,5 +2,7 @@ CONFIG_CPU_LITTLE_ENDIAN=y CONFIG_POWER7_CPU=y +CONFIG_DISABLE_MPROFILE_KERNEL=y + # https://fedoraproject.org/wiki/Features/Checkpoint_Restore CONFIG_CHECKPOINT_RESTORE=y diff --git a/config-s390x b/config-s390x index 6188d09fb..d1ed636d9 100644 --- a/config-s390x +++ b/config-s390x @@ -62,7 +62,6 @@ CONFIG_SCLP_TTY=y CONFIG_SCLP_CONSOLE=y CONFIG_SCLP_VT220_TTY=y CONFIG_SCLP_VT220_CONSOLE=y -CONFIG_SCLP_CPI=m CONFIG_SCLP_ASYNC=m CONFIG_SCLP_ASYNC_ID="000000000" CONFIG_SCLP_OFB=y diff --git a/config-x86-32-generic b/config-x86-32-generic index 04100f267..ddc9f3047 100644 --- a/config-x86-32-generic +++ b/config-x86-32-generic @@ -82,7 +82,6 @@ CONFIG_X86_LONGRUN=y # e_powersaver is dangerous # CONFIG_X86_E_POWERSAVER is not set -CONFIG_X86_HT=y # CONFIG_4KSTACKS is not set @@ -124,7 +123,6 @@ CONFIG_CRYPTO_TWOFISH_586=m CONFIG_VIDEO_CAFE_CCIC=m -CONFIG_XEN_MAX_DOMAIN_MEMORY=8 CONFIG_MTD_NAND_CAFE=m @@ -185,13 +183,6 @@ CONFIG_MFD_CS5535=m # I2O enabled only for 32-bit x86, disabled for PAE kernel CONFIG_I2O=m -CONFIG_I2O_BLOCK=m -CONFIG_I2O_SCSI=m -CONFIG_I2O_PROC=m -CONFIG_I2O_CONFIG=y -CONFIG_I2O_EXT_ADAPTEC=y -CONFIG_I2O_CONFIG_OLD_IOCTL=y -CONFIG_I2O_BUS=m CONFIG_INPUT_PWM_BEEPER=m CONFIG_BACKLIGHT_PWM=m diff --git a/config-x86-generic b/config-x86-generic index 2ad965e6f..83d3fd57b 100644 --- a/config-x86-generic +++ b/config-x86-generic @@ -13,11 +13,10 @@ CONFIG_HPET_TIMER=y CONFIG_I8K=m CONFIG_SONYPI_COMPAT=y CONFIG_MICROCODE=y -CONFIG_MICROCODE_EARLY=y CONFIG_MICROCODE_INTEL=y -CONFIG_MICROCODE_INTEL_EARLY=y CONFIG_MICROCODE_AMD=y -CONFIG_MICROCODE_AMD_EARLY=y + +CONFIG_PERF_EVENTS_AMD_POWER=m CONFIG_X86_MSR=y CONFIG_X86_CPUID=y @@ -71,8 +70,7 @@ CONFIG_X86_MPPARSE=y CONFIG_MMIOTRACE=y # CONFIG_MMIOTRACE_TEST is not set # CONFIG_DEBUG_PER_CPU_MAPS is not set -CONFIG_DEBUG_RODATA=y -# CONFIG_DEBUG_WX is not set +CONFIG_DEBUG_WX=y CONFIG_DEBUG_STACKOVERFLOW=y CONFIG_ACPI=y @@ -207,7 +205,6 @@ CONFIG_EDAC_I7300=m CONFIG_EDAC_I7CORE=m CONFIG_EDAC_R82600=m CONFIG_EDAC_X38=m -CONFIG_EDAC_MCE_INJ=m CONFIG_EDAC_DECODE_MCE=m CONFIG_EDAC_LEGACY_SYSFS=y CONFIG_EDAC_IE31200=m @@ -229,6 +226,7 @@ CONFIG_AMILO_RFKILL=m CONFIG_ASUS_LAPTOP=m CONFIG_ASUS_WIRELESS=m CONFIG_COMPAL_LAPTOP=m +CONFIG_DELL_SMBIOS=m CONFIG_DELL_LAPTOP=m CONFIG_DELL_RBTN=m CONFIG_CHROMEOS_LAPTOP=m @@ -490,7 +488,7 @@ CONFIG_SCHED_SMT=y CONFIG_CC_STACKPROTECTOR=y CONFIG_CC_STACKPROTECTOR_STRONG=y CONFIG_RELOCATABLE=y -# CONFIG_RANDOMIZE_BASE is not set # revisit this +CONFIG_RANDOMIZE_BASE=y CONFIG_HYPERV=m CONFIG_HYPERV_UTILS=m @@ -500,6 +498,8 @@ CONFIG_HYPERV_STORAGE=m CONFIG_HYPERV_BALLOON=m CONFIG_FB_HYPERV=m CONFIG_HYPERV_KEYBOARD=m +# This is x86_64 only, but we'll lump it here anyway +CONFIG_PCI_HYPERV=m # Depends on HOTPLUG_PCI_PCIE CONFIG_BLK_DEV_PCIESSD_MTIP32XX=m @@ -513,6 +513,7 @@ CONFIG_RCU_FANOUT_LEAF=16 CONFIG_INTEL_MEI=m CONFIG_INTEL_MEI_ME=m CONFIG_INTEL_MEI_TXE=m +CONFIG_INTEL_MEI_WDT=m CONFIG_NFC_MEI_PHY=m CONFIG_NFC_PN544_MEI=m @@ -546,6 +547,9 @@ CONFIG_PINCTRL_CHERRYVIEW=y CONFIG_PINCTRL_SUNRISEPOINT=m CONFIG_PINCTRL_BROXTON=m +# I have no idea why this is x86-specific +CONFIG_E1000E_HWTS=y + #baytrail/cherrytrail stuff CONFIG_KEYBOARD_GPIO=m CONFIG_INPUT_SOC_BUTTON_ARRAY=m @@ -567,6 +571,7 @@ CONFIG_SND_SOC_INTEL_SKL_NAU88L25_MAX98357A_MACH=m CONFIG_SND_SOC_AC97_CODEC=m # CONFIG_SND_SOC_TAS571X is not set # CONFIG_SND_SUN4I_CODEC is not set +# CONFIG_SND_SUN4I_SPDIF is not set # CONFIG_INTEL_POWERCLAMP is not set CONFIG_X86_PKG_TEMP_THERMAL=m diff --git a/config-x86_64-generic b/config-x86_64-generic index 5d0f7b2b2..b6037709c 100644 --- a/config-x86_64-generic +++ b/config-x86_64-generic @@ -26,6 +26,8 @@ CONFIG_PHYSICAL_ALIGN=0x1000000 # https://lists.fedoraproject.org/pipermail/kernel/2013-December/004753.html CONFIG_DEFAULT_MMAP_MIN_ADDR=65536 +CONFIG_X86_INTEL_MEMORY_PROTECTION_KEYS=y + # enable the 32-bit entry point for Baytrail CONFIG_EFI_MIXED=y @@ -63,6 +65,9 @@ CONFIG_INTEL_MIC_BUS=m CONFIG_INTEL_MIC_X100_DMA=m CONFIG_MIC_COSM=m +CONFIG_VOP_BUS=m +CONFIG_VOP=m + # SHPC has half-arsed PCI probing, which makes it load on too many systems CONFIG_HOTPLUG_PCI_SHPC=m @@ -130,7 +135,6 @@ CONFIG_SGI_GRU=m # CONFIG_VIDEO_CAFE_CCIC is not set -CONFIG_XEN_MAX_DOMAIN_MEMORY=128 # CONFIG_XEN_BALLOON_MEMORY_HOTPLUG is not set CONFIG_XEN_DEV_EVTCHN=m CONFIG_XEN_SYS_HYPERVISOR=y @@ -156,7 +160,6 @@ CONFIG_X86_X2APIC=y CONFIG_SPARSE_IRQ=y CONFIG_RCU_FANOUT=64 -# CONFIG_RCU_USER_QS is not set CONFIG_INTEL_TXT=y @@ -185,7 +188,6 @@ CONFIG_NTB_TRANSPORT=m # 10GigE # -CONFIG_IP1000=m CONFIG_SFC=m CONFIG_SFC_MCDI_MON=y CONFIG_SFC_SRIOV=y @@ -224,13 +226,7 @@ CONFIG_ND_PFN=m # Staging CONFIG_STAGING_RDMA=y -# CONFIG_INFINIBAND_AMSO1100 is not set -# CONFIG_INFINIBAND_EHCA is not set CONFIG_INFINIBAND_HFI1=m # CONFIG_HFI1_DEBUG_SDMA_ORDER is not set CONFIG_HFI1_VERBS_31BIT_PSN=y # CONFIG_SDMA_VERBOSITY is not set -# CONFIG_PRESCAN_RXQ is not set - -# Temporary workaround until SND_SOC_INTEL_HASWELL_MACH no longer requires builtin -CONFIG_DW_DMAC=y diff --git a/disable-CONFIG_EXPERT-for-ZONE_DMA.patch b/disable-CONFIG_EXPERT-for-ZONE_DMA.patch index 9cc0525f4..784cf2035 100644 --- a/disable-CONFIG_EXPERT-for-ZONE_DMA.patch +++ b/disable-CONFIG_EXPERT-for-ZONE_DMA.patch @@ -1,4 +1,4 @@ -From 888ba9b2a02e8d144c3a9ae5e01a1a94280cd2bf Mon Sep 17 00:00:00 2001 +From 78bd7226c92c8309d1c6c1378f1224dcd591b49f Mon Sep 17 00:00:00 2001 From: Fedora Kernel Team Date: Fri, 22 Jan 2016 13:03:36 -0600 Subject: [PATCH] Make ZONE_DMA not depend on CONFIG_EXPERT @@ -13,12 +13,12 @@ Signed-off-by: Justin Forbes 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig -index a02c842..ea2eaeb 100644 +index 3c74b549ea9a..8a5b7b8cc425 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig -@@ -315,7 +315,7 @@ source "kernel/Kconfig.freezer" +@@ -318,7 +318,7 @@ source "kernel/Kconfig.freezer" menu "Processor type and features" - + config ZONE_DMA - bool "DMA memory allocation support" if EXPERT + bool "DMA memory allocation support" @@ -26,18 +26,18 @@ index a02c842..ea2eaeb 100644 help DMA memory allocation support allows devices with less than 32-bit diff --git a/mm/Kconfig b/mm/Kconfig -index 97a4e06..26bbbe0 100644 +index 05efa6a5199e..c1a01e50c293 100644 --- a/mm/Kconfig +++ b/mm/Kconfig @@ -650,7 +650,7 @@ config IDLE_PAGE_TRACKING See Documentation/vm/idle_page_tracking.txt for more details. - + config ZONE_DEVICE - bool "Device memory (pmem, etc...) hotplug support" if EXPERT + bool "Device memory (pmem, etc...) hotplug support" - default !ZONE_DMA - depends on !ZONE_DMA depends on MEMORY_HOTPLUG + depends on MEMORY_HOTREMOVE + depends on SPARSEMEM_VMEMMAP -- 2.5.0 diff --git a/dmaengine-sun4i-support-module-autoloading.patch b/dmaengine-sun4i-support-module-autoloading.patch deleted file mode 100644 index 7d7937474..000000000 --- a/dmaengine-sun4i-support-module-autoloading.patch +++ /dev/null @@ -1,35 +0,0 @@ -From 94c622b2a742c6793d74a71280df0c3a5365a156 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Emilio=20L=C3=B3pez?= -Date: Sun, 21 Feb 2016 22:26:35 -0300 -Subject: [PATCH 33831/39109] dmaengine: sun4i: support module autoloading -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -MODULE_DEVICE_TABLE() is missing, so the module isn't auto-loading on -supported systems. This commit adds the missing line so it loads -automatically when building it as a module and running on a system -with the early sunxi DMA engine. - -Signed-off-by: Emilio López -Reviewed-by: Javier Martinez Canillas -Signed-off-by: Vinod Koul ---- - drivers/dma/sun4i-dma.c | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/drivers/dma/sun4i-dma.c b/drivers/dma/sun4i-dma.c -index 1661d518..e0df233 100644 ---- a/drivers/dma/sun4i-dma.c -+++ b/drivers/dma/sun4i-dma.c -@@ -1271,6 +1271,7 @@ static const struct of_device_id sun4i_dma_match[] = { - { .compatible = "allwinner,sun4i-a10-dma" }, - { /* sentinel */ }, - }; -+MODULE_DEVICE_TABLE(of, sun4i_dma_match); - - static struct platform_driver sun4i_dma_driver = { - .probe = sun4i_dma_probe, --- -2.7.4 - diff --git a/ecryptfs-fix-handling-of-directory-opening.patch b/ecryptfs-fix-handling-of-directory-opening.patch deleted file mode 100644 index ce5f511d4..000000000 --- a/ecryptfs-fix-handling-of-directory-opening.patch +++ /dev/null @@ -1,142 +0,0 @@ -From 6a480a7842545ec520a91730209ec0bae41694c1 Mon Sep 17 00:00:00 2001 -From: Al Viro -Date: Wed, 4 May 2016 14:04:13 -0400 -Subject: [PATCH] ecryptfs: fix handling of directory opening - -First of all, trying to open them r/w is idiocy; it's guaranteed to fail. -Moreover, assigning ->f_pos and assuming that everything will work is -blatantly broken - try that with e.g. tmpfs as underlying layer and watch -the fireworks. There may be a non-trivial amount of state associated with -current IO position, well beyond the numeric offset. Using the single -struct file associated with underlying inode is really not a good idea; -we ought to open one for each ecryptfs directory struct file. - -Additionally, file_operations both for directories and non-directories are -full of pointless methods; non-directories should *not* have ->iterate(), -directories should not have ->flush(), ->fasync() and ->splice_read(). - -Signed-off-by: Al Viro ---- - fs/ecryptfs/file.c | 71 ++++++++++++++++++++++++++++++++++++++++++------------ - 1 file changed, 55 insertions(+), 16 deletions(-) - -diff --git a/fs/ecryptfs/file.c b/fs/ecryptfs/file.c -index feef8a9c4de7..f02404052b7b 100644 ---- a/fs/ecryptfs/file.c -+++ b/fs/ecryptfs/file.c -@@ -112,7 +112,6 @@ static int ecryptfs_readdir(struct file *file, struct dir_context *ctx) - .sb = inode->i_sb, - }; - lower_file = ecryptfs_file_to_lower(file); -- lower_file->f_pos = ctx->pos; - rc = iterate_dir(lower_file, &buf.ctx); - ctx->pos = buf.ctx.pos; - if (rc < 0) -@@ -223,14 +222,6 @@ static int ecryptfs_open(struct inode *inode, struct file *file) - } - ecryptfs_set_file_lower( - file, ecryptfs_inode_to_private(inode)->lower_file); -- if (d_is_dir(ecryptfs_dentry)) { -- ecryptfs_printk(KERN_DEBUG, "This is a directory\n"); -- mutex_lock(&crypt_stat->cs_mutex); -- crypt_stat->flags &= ~(ECRYPTFS_ENCRYPTED); -- mutex_unlock(&crypt_stat->cs_mutex); -- rc = 0; -- goto out; -- } - rc = read_or_initialize_metadata(ecryptfs_dentry); - if (rc) - goto out_put; -@@ -247,6 +238,45 @@ out: - return rc; - } - -+/** -+ * ecryptfs_dir_open -+ * @inode: inode speciying file to open -+ * @file: Structure to return filled in -+ * -+ * Opens the file specified by inode. -+ * -+ * Returns zero on success; non-zero otherwise -+ */ -+static int ecryptfs_dir_open(struct inode *inode, struct file *file) -+{ -+ struct dentry *ecryptfs_dentry = file->f_path.dentry; -+ /* Private value of ecryptfs_dentry allocated in -+ * ecryptfs_lookup() */ -+ struct ecryptfs_file_info *file_info; -+ struct file *lower_file; -+ -+ /* Released in ecryptfs_release or end of function if failure */ -+ file_info = kmem_cache_zalloc(ecryptfs_file_info_cache, GFP_KERNEL); -+ ecryptfs_set_file_private(file, file_info); -+ if (unlikely(!file_info)) { -+ ecryptfs_printk(KERN_ERR, -+ "Error attempting to allocate memory\n"); -+ return -ENOMEM; -+ } -+ lower_file = dentry_open(ecryptfs_dentry_to_lower_path(ecryptfs_dentry), -+ file->f_flags, current_cred()); -+ if (IS_ERR(lower_file)) { -+ printk(KERN_ERR "%s: Error attempting to initialize " -+ "the lower file for the dentry with name " -+ "[%pd]; rc = [%ld]\n", __func__, -+ ecryptfs_dentry, PTR_ERR(lower_file)); -+ kmem_cache_free(ecryptfs_file_info_cache, file_info); -+ return PTR_ERR(lower_file); -+ } -+ ecryptfs_set_file_lower(file, lower_file); -+ return 0; -+} -+ - static int ecryptfs_flush(struct file *file, fl_owner_t td) - { - struct file *lower_file = ecryptfs_file_to_lower(file); -@@ -267,6 +297,19 @@ static int ecryptfs_release(struct inode *inode, struct file *file) - return 0; - } - -+static int ecryptfs_dir_release(struct inode *inode, struct file *file) -+{ -+ fput(ecryptfs_file_to_lower(file)); -+ kmem_cache_free(ecryptfs_file_info_cache, -+ ecryptfs_file_to_private(file)); -+ return 0; -+} -+ -+static loff_t ecryptfs_dir_llseek(struct file *file, loff_t offset, int whence) -+{ -+ return vfs_llseek(ecryptfs_file_to_lower(file), offset, whence); -+} -+ - static int - ecryptfs_fsync(struct file *file, loff_t start, loff_t end, int datasync) - { -@@ -346,20 +389,16 @@ const struct file_operations ecryptfs_dir_fops = { - #ifdef CONFIG_COMPAT - .compat_ioctl = ecryptfs_compat_ioctl, - #endif -- .open = ecryptfs_open, -- .flush = ecryptfs_flush, -- .release = ecryptfs_release, -+ .open = ecryptfs_dir_open, -+ .release = ecryptfs_dir_release, - .fsync = ecryptfs_fsync, -- .fasync = ecryptfs_fasync, -- .splice_read = generic_file_splice_read, -- .llseek = default_llseek, -+ .llseek = ecryptfs_dir_llseek, - }; - - const struct file_operations ecryptfs_main_fops = { - .llseek = generic_file_llseek, - .read_iter = ecryptfs_read_update_atime, - .write_iter = generic_file_write_iter, -- .iterate = ecryptfs_readdir, - .unlocked_ioctl = ecryptfs_unlocked_ioctl, - #ifdef CONFIG_COMPAT - .compat_ioctl = ecryptfs_compat_ioctl, --- -2.5.5 - diff --git a/ecryptfs-forbid-opening-files-without-mmap-handler.patch b/ecryptfs-forbid-opening-files-without-mmap-handler.patch deleted file mode 100644 index 2d40e68ed..000000000 --- a/ecryptfs-forbid-opening-files-without-mmap-handler.patch +++ /dev/null @@ -1,59 +0,0 @@ -From 2f36db71009304b3f0b95afacd8eba1f9f046b87 Mon Sep 17 00:00:00 2001 -From: Jann Horn -Date: Wed, 1 Jun 2016 11:55:06 +0200 -Subject: [PATCH] ecryptfs: forbid opening files without mmap handler - -This prevents users from triggering a stack overflow through a recursive -invocation of pagefault handling that involves mapping procfs files into -virtual memory. - -Signed-off-by: Jann Horn -Acked-by: Tyler Hicks -Cc: stable@vger.kernel.org -Signed-off-by: Linus Torvalds ---- - fs/ecryptfs/kthread.c | 13 +++++++++++-- - 1 file changed, 11 insertions(+), 2 deletions(-) - -diff --git a/fs/ecryptfs/kthread.c b/fs/ecryptfs/kthread.c -index 866bb18efefe..e818f5ac7a26 100644 ---- a/fs/ecryptfs/kthread.c -+++ b/fs/ecryptfs/kthread.c -@@ -25,6 +25,7 @@ - #include - #include - #include -+#include - #include "ecryptfs_kernel.h" - - struct ecryptfs_open_req { -@@ -147,7 +148,7 @@ int ecryptfs_privileged_open(struct file **lower_file, - flags |= IS_RDONLY(d_inode(lower_dentry)) ? O_RDONLY : O_RDWR; - (*lower_file) = dentry_open(&req.path, flags, cred); - if (!IS_ERR(*lower_file)) -- goto out; -+ goto have_file; - if ((flags & O_ACCMODE) == O_RDONLY) { - rc = PTR_ERR((*lower_file)); - goto out; -@@ -165,8 +166,16 @@ int ecryptfs_privileged_open(struct file **lower_file, - mutex_unlock(&ecryptfs_kthread_ctl.mux); - wake_up(&ecryptfs_kthread_ctl.wait); - wait_for_completion(&req.done); -- if (IS_ERR(*lower_file)) -+ if (IS_ERR(*lower_file)) { - rc = PTR_ERR(*lower_file); -+ goto out; -+ } -+have_file: -+ if ((*lower_file)->f_op->mmap == NULL) { -+ fput(*lower_file); -+ *lower_file = NULL; -+ rc = -EMEDIUMTYPE; -+ } - out: - return rc; - } --- -2.5.5 - diff --git a/filter-aarch64.sh b/filter-aarch64.sh index 139d1791d..cc560ca97 100644 --- a/filter-aarch64.sh +++ b/filter-aarch64.sh @@ -13,4 +13,4 @@ driverdirs="atm auxdisplay bcma bluetooth firewire fmc infiniband isdn leds medi ethdrvs="3com adaptec arc alteon atheros broadcom cadence calxeda chelsio cisco dec dlink emulex icplus marvell micrel myricom neterion nvidia oki-semi packetengines qlogic rdc renesas sfc silan sis smsc stmicro sun tehuti ti via wiznet xircom" -singlemods="ntb_netdev iscsi_ibft iscsi_boot_sysfs megaraid pmcraid qla1280 9pnet_rdma rpcrdma hid-picolcd hid-prodikeys hwa-hc hwpoison-inject target_core_user sbp_target" +singlemods="ntb_netdev iscsi_ibft iscsi_boot_sysfs megaraid pmcraid qla1280 9pnet_rdma rpcrdma hid-picolcd hid-prodikeys hwa-hc hwpoison-inject target_core_user sbp_target cxgbit iw_cxgb3 iw_cxgb4 cxgb3i cxgb3i cxgb3i_ddp cxgb4i" diff --git a/filter-armv7hl.sh b/filter-armv7hl.sh index 6de77659a..0ae6d925b 100644 --- a/filter-armv7hl.sh +++ b/filter-armv7hl.sh @@ -15,4 +15,4 @@ ethdrvs="3com adaptec alteon altera amd atheros broadcom cadence chelsio cisco d drmdrvs="amd armada bridge ast exynos i2c imx mgag200 msm omapdrm panel nouveau radeon rockchip tegra tilcdc via" -singlemods="ntb_netdev iscsi_ibft iscsi_boot_sysfs megaraid pmcraid qla1280 9pnet_rdma rpcrdma hid-picolcd hid-prodikeys hwa-hc hwpoison-inject target_core_user sbp_target" +singlemods="ntb_netdev iscsi_ibft iscsi_boot_sysfs megaraid pmcraid qla1280 9pnet_rdma rpcrdma hid-picolcd hid-prodikeys hwa-hc hwpoison-inject target_core_user sbp_target cxgbit iw_cxgb3 iw_cxgb4 cxgb3i cxgb3i cxgb3i_ddp cxgb4i" diff --git a/hp-wmi-fix-wifi-cannot-be-hard-unblock.patch b/hp-wmi-fix-wifi-cannot-be-hard-unblock.patch index 51ccc8c48..27744a0c3 100644 --- a/hp-wmi-fix-wifi-cannot-be-hard-unblock.patch +++ b/hp-wmi-fix-wifi-cannot-be-hard-unblock.patch @@ -1,7 +1,14 @@ -From 97345b0e9b02d6d794fc772e366efe6e44b9340a Mon Sep 17 00:00:00 2001 +From patchwork Mon Jun 13 11:44:00 2016 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +Subject: hp-wmi: fix wifi cannot be hard-unblock From: Alex Hung +X-Patchwork-Id: 9172765 +Message-Id: <1465818240-11994-1-git-send-email-alex.hung@canonical.com> +To: dvhart@infradead.org, platform-driver-x86@vger.kernel.org, + alex.hung@canonical.com, david.ward@ll.mit.edu Date: Mon, 13 Jun 2016 19:44:00 +0800 -Subject: [PATCH] hp-wmi: fix wifi cannot be hard-unblock Several users reported wifi cannot be unblocked as discussed in [1]. This patch removes the useof 2009 flag by BIOS but uses the actual WMI @@ -15,10 +22,10 @@ Signed-off-by: Alex Hung 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/drivers/platform/x86/hp-wmi.c b/drivers/platform/x86/hp-wmi.c -index fb4dd7b..af2046c 100644 +index 6f145f2..96ffda4 100644 --- a/drivers/platform/x86/hp-wmi.c +++ b/drivers/platform/x86/hp-wmi.c -@@ -723,6 +723,11 @@ static int __init hp_wmi_rfkill_setup(struct platform_device *device) +@@ -718,6 +718,11 @@ static int __init hp_wmi_rfkill_setup(struct platform_device *device) if (err) return err; @@ -30,8 +37,8 @@ index fb4dd7b..af2046c 100644 if (wireless & 0x1) { wifi_rfkill = rfkill_alloc("hp-wifi", &device->dev, RFKILL_TYPE_WLAN, -@@ -910,7 +915,7 @@ static int __init hp_wmi_bios_setup(struct platform_device *device) - gps_rfkill = NULL; +@@ -882,7 +887,7 @@ static int __init hp_wmi_bios_setup(struct platform_device *device) + wwan_rfkill = NULL; rfkill2_count = 0; - if (hp_wmi_bios_2009_later() || hp_wmi_rfkill_setup(device)) @@ -39,6 +46,3 @@ index fb4dd7b..af2046c 100644 hp_wmi_rfkill2_setup(device); err = device_create_file(&device->dev, &dev_attr_display); --- -2.5.5 - diff --git a/kernel.spec b/kernel.spec index c5bad0d24..8decb5234 100644 --- a/kernel.spec +++ b/kernel.spec @@ -48,13 +48,13 @@ Summary: The Linux kernel # base_sublevel is the kernel version we're starting with and patching # on top of -- for example, 3.1-rc7-git1 starts with a 3.0 base, # which yields a base_sublevel of 0. -%define base_sublevel 5 +%define base_sublevel 6 ## If this is a released kernel ## %if 0%{?released_kernel} # Do we have a -stable update to apply? -%define stable_update 7 +%define stable_update 3 # Set rpm version accordingly %if 0%{?stable_update} %define stablerev %{stable_update} @@ -347,7 +347,7 @@ Summary: The Linux kernel # Packages that need to be installed before the kernel is, because the %%post # scripts use them. # -%define kernel_prereq fileutils, systemd >= 203-2, /usr/bin/kernel-install +%define kernel_prereq coreutils, systemd >= 203-2, /usr/bin/kernel-install %define initrd_prereq dracut >= 027 @@ -496,6 +496,7 @@ Source5005: kbuild-AFTER_LINK.patch # Git trees. # Standalone patches + Patch420: arm64-avoid-needing-console-to-enable-serial-console.patch Patch421: arm64-acpi-drop-expert-patch.patch @@ -506,31 +507,18 @@ Patch422: geekbox-v4-device-tree-support.patch # http://www.spinics.net/lists/arm-kernel/msg483898.html Patch423: Initial-AllWinner-A64-and-PINE64-support.patch -Patch424: dmaengine-sun4i-support-module-autoloading.patch - # http://www.spinics.net/lists/linux-tegra/msg26029.html Patch426: usb-phy-tegra-Add-38.4MHz-clock-table-entry.patch # http://patchwork.ozlabs.org/patch/587554/ Patch430: ARM-tegra-usb-no-reset.patch -Patch431: arm-i.MX6-Utilite-device-dtb.patch - # http://www.spinics.net/lists/linux-tegra/msg25152.html -Patch432: Fix-tegra-to-use-stdout-path-for-serial-console.patch +Patch431: Fix-tegra-to-use-stdout-path-for-serial-console.patch -Patch433: bcm283x-Pull-upstream-fixes-plus-iproc-mmc-driver.patch +Patch432: arm-i.MX6-Utilite-device-dtb.patch -# http://www.spinics.net/lists/netdev/msg369442.html -Patch434: revert-stmmac-Fix-eth0-No-PHY-found-regression.patch -Patch435: stmmac-fix-MDIO-settings.patch - -Patch436: ARM-mvebu-change-order-of-ethernet-DT-nodes-on-Armada-38x.patch - -# mvebu DSA switch fixes -# http://www.spinics.net/lists/netdev/msg370841.html http://www.spinics.net/lists/netdev/msg370842.html -Patch438: 0001-net-dsa-mv88e6xxx-Introduce-_mv88e6xxx_phy_page_-rea.patch -Patch439: 0002-net-dsa-mv88e6xxx-Clear-the-PDOWN-bit-on-setup.patch +Patch433: bcm283x-upstream-fixes.patch Patch460: lib-cpumask-Make-CPUMASK_OFFSTACK-usable-without-deb.patch @@ -613,30 +601,6 @@ Patch508: kexec-uefi-copy-secure_boot-flag-in-boot-params.patch #Required for some persistent memory options Patch641: disable-CONFIG_EXPERT-for-ZONE_DMA.patch -#rhbz 1255325 -Patch646: HID-sony-do-not-bail-out-when-the-sixaxis-refuses-th.patch - -#rhbz 1309658 -Patch648: 0001-mm-CONFIG_NR_ZONES_EXTENDED.patch - -#CVE-2016-3135 rhbz 1317386 1317387 -Patch664: netfilter-x_tables-check-for-size-overflow.patch - -#CVE-2016-3134 rhbz 1317383 1317384 -Patch665: netfilter-x_tables-deal-with-bogus-nextoffset-values.patch - -# CVE-2016-3672 rhbz 1324749 1324750 -Patch689: x86-mm-32-Enable-full-randomization-on-i386-and-X86_.patch - -#rhbz 1302071 -Patch702: x86-build-Build-compressed-x86-kernels-as-PIE.patch - -# Stop splashing crap about broken firmware BGRT -Patch704: x86-efi-bgrt-Switch-all-pr_err-to-pr_debug-for-inval.patch - -#rhbz 1331092 -Patch705: mm-thp-kvm-fix-memory-corruption-in-KVM-with-THP-ena.patch - #CVE-2016-4482 rhbz 1332931 1332932 Patch706: USB-usbfs-fix-potential-infoleak-in-devio.patch @@ -645,33 +609,47 @@ Patch714: ALSA-timer-Fix-leak-in-SNDRV_TIMER_IOCTL_PARAMS.patch Patch715: ALSA-timer-Fix-leak-in-events-via-snd_timer_user_cca.patch Patch716: ALSA-timer-Fix-leak-in-events-via-snd_timer_user_tin.patch -#CVE-2016-0758 rhbz 1300257 1335386 -Patch717: KEYS-Fix-ASN.1-indefinite-length-object-parsing.patch - #CVE-2016-4440 rhbz 1337806 1337807 Patch719: kvm-vmx-more-complete-state-update-on-APICv-on-off.patch -#CVE-2016-4951 rhbz 1338625 1338626 -Patch720: tipc-check-nl-sock-before-parsing-nested-attributes.patch - #CVE-2016-5243 rhbz 1343338 1343335 Patch721: tipc-fix-an-infoleak-in-tipc_nl_compat_link_dump.patch #CVE-2016-5244 rhbz 1343338 1343337 Patch722: rds-fix-an-infoleak-in-rds_inc_info_copy.txt -#CVE-2016-1583 rhbz 1344721 1344722 -Patch723: proc-prevent-stacking-filesystems-on-top.patch -Patch724: ecryptfs-fix-handling-of-directory-opening.patch -Patch725: ecryptfs-forbid-opening-files-without-mmap-handler.patch -Patch726: sched-panic-on-corrupted-stack-end.patch - #CVE-2016-4470 rhbz 1341716 1346626 Patch727: KEYS-potential-uninitialized-variable.patch #rhbz 1338025 Patch728: hp-wmi-fix-wifi-cannot-be-hard-unblock.patch +#skl_update_other_pipe_wm issue patch-series from drm-next, rhbz 1305038 +Patch801: 0001-drm-i915-Reorganize-WM-structs-unions-in-CRTC-state.patch +Patch802: 0002-drm-i915-Rename-s-skl_compute_pipe_wm-skl_build_pipe.patch +Patch803: 0003-drm-i915-gen9-Cache-plane-data-rates-in-CRTC-state.patch +Patch804: 0004-drm-i915-gen9-Allow-calculation-of-data-rate-for-in-.patch +Patch805: 0005-drm-i915-gen9-Store-plane-minimum-blocks-in-CRTC-wm-.patch +Patch806: 0006-drm-i915-Track-whether-an-atomic-transaction-changes.patch +Patch807: 0007-drm-i915-gen9-Allow-skl_allocate_pipe_ddb-to-operate.patch +Patch808: 0008-drm-i915-Add-distrust_bios_wm-flag-to-dev_priv-v2.patch +Patch809: 0009-drm-i915-gen9-Compute-DDB-allocation-at-atomic-check.patch +Patch810: 0010-drm-i915-gen9-Drop-re-allocation-of-DDB-at-atomic-co.patch +Patch811: 0011-drm-i915-gen9-Calculate-plane-WM-s-from-state.patch +Patch812: 0012-drm-i915-gen9-Allow-watermark-calculation-on-in-flig.patch +Patch813: 0013-drm-i915-gen9-Use-a-bitmask-to-track-dirty-pipe-wate.patch +Patch814: 0014-drm-i915-gen9-Propagate-watermark-calculation-failur.patch +Patch815: 0015-drm-i915-gen9-Calculate-watermarks-during-atomic-che.patch +Patch816: 0016-drm-i915-gen9-Reject-display-updates-that-exceed-wm-.patch +Patch817: 0017-drm-i915-Remove-wm_config-from-dev_priv-intel_atomic.patch + +#other drm/kms fixes (most Cc-ed stable) +Patch821: 0001-drm-mgag200-Black-screen-fix-for-G200e-rev-4.patch +Patch822: 0002-drm-nouveau-fbcon-fix-out-of-bounds-memory-accesses.patch +Patch823: 0003-drm-nouveau-disp-sor-gf119-both-links-use-the-same-t.patch +Patch824: 0004-drm-nouveau-disp-sor-gm107-training-pattern-register.patch +Patch825: 0005-i915-fbc-Disable-on-HSW-by-default-for-now.patch + # END OF PATCH DEFINITIONS %endif @@ -885,7 +863,8 @@ Provides: kernel-devel = %{version}-%{release}%{?1:+%{1}}\ Provides: kernel-devel-uname-r = %{KVERREL}%{?variant}%{?1:+%{1}}\ Provides: installonlypkg(kernel)\ AutoReqProv: no\ -Requires(pre): /usr/bin/find\ +Requires(pre): findutils\ +Requires: findutils\ Requires: perl\ %description %{?1:%{1}-}devel\ This package provides kernel headers and makefiles sufficient to build modules\ @@ -1489,6 +1468,9 @@ BuildKernel() { rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include cp .config $RPM_BUILD_ROOT/lib/modules/$KernelVer/build cp -a scripts $RPM_BUILD_ROOT/lib/modules/$KernelVer/build + if [ -f tools/objtool/objtool ]; then + cp -a tools/objtool/objtool $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools/objtool/ || : + fi if [ -d arch/$Arch/scripts ]; then cp -a arch/$Arch/scripts $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/arch/%{_arch} || : fi @@ -2193,6 +2175,9 @@ fi # # %changelog +* Fri Jun 24 2016 Josh Boyer - 4.6.3-300 +- Linux v4.6.3 + * Wed Jun 15 2016 Laura Abbott - hp-wmi: fix wifi cannot be hard-unblock (rhbz 1338025) diff --git a/mm-thp-kvm-fix-memory-corruption-in-KVM-with-THP-ena.patch b/mm-thp-kvm-fix-memory-corruption-in-KVM-with-THP-ena.patch deleted file mode 100644 index cc3e2168c..000000000 --- a/mm-thp-kvm-fix-memory-corruption-in-KVM-with-THP-ena.patch +++ /dev/null @@ -1,126 +0,0 @@ -From 94f984ff563d1777652b822d7a282cacc1e481c2 Mon Sep 17 00:00:00 2001 -From: Andrea Arcangeli -Date: Wed, 27 Apr 2016 12:04:46 -0500 -Subject: [PATCH] mm: thp: kvm: fix memory corruption in KVM with THP enabled - -After the THP refcounting change, obtaining a compound pages from -get_user_pages() no longer allows us to assume the entire compound -page is immediately mappable from a secondary MMU. - -A secondary MMU doesn't want to call get_user_pages() more than once -for each compound page, in order to know if it can map the whole -compound page. So a secondary MMU needs to know from a single -get_user_pages() invocation when it can map immediately the entire -compound page to avoid a flood of unnecessary secondary MMU faults and -spurious atomic_inc()/atomic_dec() (pages don't have to be pinned by -MMU notifier users). - -Ideally instead of the page->_mapcount < 1 check, get_user_pages() -should return the granularity of the "page" mapping in the "mm" passed -to get_user_pages(). However it's non trivial change to pass the "pmd" -status belonging to the "mm" walked by get_user_pages up the stack (up -to the caller of get_user_pages). So the fix just checks if there is -not a single pte mapping on the page returned by get_user_pages, and -in turn if the caller can assume that the whole compound page is -mapped in the current "mm" (in a pmd_trans_huge()). In such case the -entire compound page is safe to map into the secondary MMU without -additional get_user_pages() calls on the surrounding tail/head -pages. In addition of being faster, not having to run other -get_user_pages() calls also reduces the memory footprint of the -secondary MMU fault in case the pmd split happened as result of memory -pressure. - -Without this fix after a MADV_DONTNEED (like invoked by QEMU during -postcopy live migration or balloning) or after generic swapping (with -a failure in split_huge_page() that would only result in pmd splitting -and not a physical page split), KVM would map the whole compound page -into the shadow pagetables, despite regular faults or userfaults (like -UFFDIO_COPY) may map regular pages into the primary MMU as result of -the pte faults, leading to the guest mode and userland mode going out -of sync and not working on the same memory at all times. - -Signed-off-by: Andrea Arcangeli ---- - arch/arm/kvm/mmu.c | 2 +- - arch/x86/kvm/mmu.c | 4 ++-- - include/linux/page-flags.h | 22 ++++++++++++++++++++++ - 3 files changed, 25 insertions(+), 3 deletions(-) - -diff --git a/arch/arm/kvm/mmu.c b/arch/arm/kvm/mmu.c -index aba61fd..8dafe97 100644 ---- a/arch/arm/kvm/mmu.c -+++ b/arch/arm/kvm/mmu.c -@@ -997,7 +997,7 @@ static bool transparent_hugepage_adjust(kvm_pfn_t *pfnp, phys_addr_t *ipap) - kvm_pfn_t pfn = *pfnp; - gfn_t gfn = *ipap >> PAGE_SHIFT; - -- if (PageTransCompound(pfn_to_page(pfn))) { -+ if (PageTransCompoundMap(pfn_to_page(pfn))) { - unsigned long mask; - /* - * The address we faulted on is backed by a transparent huge -diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c -index 1e7a49b..3a371f7 100644 ---- a/arch/x86/kvm/mmu.c -+++ b/arch/x86/kvm/mmu.c -@@ -2767,7 +2767,7 @@ static void transparent_hugepage_adjust(struct kvm_vcpu *vcpu, - */ - if (!is_error_noslot_pfn(pfn) && !kvm_is_reserved_pfn(pfn) && - level == PT_PAGE_TABLE_LEVEL && -- PageTransCompound(pfn_to_page(pfn)) && -+ PageTransCompoundMap(pfn_to_page(pfn)) && - !has_wrprotected_page(vcpu, gfn, PT_DIRECTORY_LEVEL)) { - unsigned long mask; - /* -@@ -4621,7 +4621,7 @@ restart: - */ - if (sp->role.direct && - !kvm_is_reserved_pfn(pfn) && -- PageTransCompound(pfn_to_page(pfn))) { -+ PageTransCompoundMap(pfn_to_page(pfn))) { - drop_spte(kvm, sptep); - need_tlb_flush = 1; - goto restart; -diff --git a/include/linux/page-flags.h b/include/linux/page-flags.h -index 19724e6..522bd6d 100644 ---- a/include/linux/page-flags.h -+++ b/include/linux/page-flags.h -@@ -517,6 +517,27 @@ static inline int PageTransCompound(struct page *page) - } - - /* -+ * PageTransCompoundMap is the same as PageTransCompound, but it also -+ * guarantees the primary MMU has the entire compound page mapped -+ * through pmd_trans_huge, which in turn guarantees the secondary MMUs -+ * can also map the entire compound page. This allows the secondary -+ * MMUs to call get_user_pages() only once for each compound page and -+ * to immediately map the entire compound page with a single secondary -+ * MMU fault. If there will be a pmd split later, the secondary MMUs -+ * will get an update through the MMU notifier invalidation through -+ * split_huge_pmd(). -+ * -+ * Unlike PageTransCompound, this is safe to be called only while -+ * split_huge_pmd() cannot run from under us, like if protected by the -+ * MMU notifier, otherwise it may result in page->_mapcount < 0 false -+ * positives. -+ */ -+static inline int PageTransCompoundMap(struct page *page) -+{ -+ return PageTransCompound(page) && atomic_read(&page->_mapcount) < 0; -+} -+ -+/* - * PageTransTail returns true for both transparent huge pages - * and hugetlbfs pages, so it should only be called when it's known - * that hugetlbfs pages aren't involved. -@@ -559,6 +580,7 @@ static inline int TestClearPageDoubleMap(struct page *page) - #else - TESTPAGEFLAG_FALSE(TransHuge) - TESTPAGEFLAG_FALSE(TransCompound) -+TESTPAGEFLAG_FALSE(TransCompoundMap) - TESTPAGEFLAG_FALSE(TransTail) - TESTPAGEFLAG_FALSE(DoubleMap) - TESTSETFLAG_FALSE(DoubleMap) --- -2.7.4 - diff --git a/netfilter-x_tables-check-for-size-overflow.patch b/netfilter-x_tables-check-for-size-overflow.patch deleted file mode 100644 index 81e3d36fa..000000000 --- a/netfilter-x_tables-check-for-size-overflow.patch +++ /dev/null @@ -1,31 +0,0 @@ -Subject: [PATCH nf] netfilter: x_tables: check for size overflow -From: Florian Westphal -Date: 2016-03-10 0:56:23 - -Ben Hawkes says: - integer overflow in xt_alloc_table_info, which on 32-bit systems can - lead to small structure allocation and a copy_from_user based heap - corruption. - -Reported-by: Ben Hawkes -Signed-off-by: Florian Westphal ---- - net/netfilter/x_tables.c | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/net/netfilter/x_tables.c b/net/netfilter/x_tables.c -index c8a0b7d..17a9a9f 100644 ---- a/net/netfilter/x_tables.c -+++ b/net/netfilter/x_tables.c -@@ -659,6 +659,9 @@ struct xt_table_info *xt_alloc_table_info(unsigned int size) - struct xt_table_info *info = NULL; - size_t sz = sizeof(*info) + size; - -+ if (sz < sizeof(*info)) -+ return NULL; -+ - /* Pedantry: prevent them from hitting BUG() in vmalloc.c --RR */ - if ((SMP_ALIGN(size) >> PAGE_SHIFT) + 2 > totalram_pages) - return NULL; --- -2.4.10 diff --git a/netfilter-x_tables-deal-with-bogus-nextoffset-values.patch b/netfilter-x_tables-deal-with-bogus-nextoffset-values.patch deleted file mode 100644 index ebfe1716f..000000000 --- a/netfilter-x_tables-deal-with-bogus-nextoffset-values.patch +++ /dev/null @@ -1,150 +0,0 @@ -Subject: [PATCH nf] netfilter: x_tables: deal with bogus nextoffset values -From: Florian Westphal -Date: 2016-03-10 0:56:02 - -Ben Hawkes says: - - In the mark_source_chains function (net/ipv4/netfilter/ip_tables.c) it - is possible for a user-supplied ipt_entry structure to have a large - next_offset field. This field is not bounds checked prior to writing a - counter value at the supplied offset. - -Problem is that xt_entry_foreach() macro stops iterating once e->next_offset -is out of bounds, assuming this is the last entry. - -With malformed data thats not necessarily the case so we can -write outside of allocated area later as we might not have walked the -entire blob. - -Fix this by simplifying mark_source_chains -- it already has to check -if nextoff is in range to catch invalid jumps, so just do the check -when we move to a next entry as well. - -Signed-off-by: Florian Westphal ---- - net/ipv4/netfilter/arp_tables.c | 16 ++++++++-------- - net/ipv4/netfilter/ip_tables.c | 15 ++++++++------- - net/ipv6/netfilter/ip6_tables.c | 13 ++++++------- - 3 files changed, 22 insertions(+), 22 deletions(-) - -diff --git a/net/ipv4/netfilter/arp_tables.c b/net/ipv4/netfilter/arp_tables.c -index b488cac..5a0b591 100644 ---- a/net/ipv4/netfilter/arp_tables.c -+++ b/net/ipv4/netfilter/arp_tables.c -@@ -437,6 +437,10 @@ static int mark_source_chains(const struct xt_table_info *newinfo, - - /* Move along one */ - size = e->next_offset; -+ -+ if (pos + size > newinfo->size - sizeof(*e)) -+ return 0; -+ - e = (struct arpt_entry *) - (entry0 + pos + size); - e->counters.pcnt = pos; -@@ -447,14 +451,6 @@ static int mark_source_chains(const struct xt_table_info *newinfo, - if (strcmp(t->target.u.user.name, - XT_STANDARD_TARGET) == 0 && - newpos >= 0) { -- if (newpos > newinfo->size - -- sizeof(struct arpt_entry)) { -- duprintf("mark_source_chains: " -- "bad verdict (%i)\n", -- newpos); -- return 0; -- } -- - /* This a jump; chase it. */ - duprintf("Jump rule %u -> %u\n", - pos, newpos); -@@ -462,6 +458,10 @@ static int mark_source_chains(const struct xt_table_info *newinfo, - /* ... this is a fallthru */ - newpos = pos + e->next_offset; - } -+ -+ if (newpos > newinfo->size - sizeof(*e)) -+ return 0; -+ - e = (struct arpt_entry *) - (entry0 + newpos); - e->counters.pcnt = pos; -diff --git a/net/ipv4/netfilter/ip_tables.c b/net/ipv4/netfilter/ip_tables.c -index b99affa..ceb995f 100644 ---- a/net/ipv4/netfilter/ip_tables.c -+++ b/net/ipv4/netfilter/ip_tables.c -@@ -519,6 +519,10 @@ mark_source_chains(const struct xt_table_info *newinfo, - - /* Move along one */ - size = e->next_offset; -+ -+ if (pos + size > newinfo->size - sizeof(*e)) -+ return 0; -+ - e = (struct ipt_entry *) - (entry0 + pos + size); - e->counters.pcnt = pos; -@@ -529,13 +533,6 @@ mark_source_chains(const struct xt_table_info *newinfo, - if (strcmp(t->target.u.user.name, - XT_STANDARD_TARGET) == 0 && - newpos >= 0) { -- if (newpos > newinfo->size - -- sizeof(struct ipt_entry)) { -- duprintf("mark_source_chains: " -- "bad verdict (%i)\n", -- newpos); -- return 0; -- } - /* This a jump; chase it. */ - duprintf("Jump rule %u -> %u\n", - pos, newpos); -@@ -543,6 +540,10 @@ mark_source_chains(const struct xt_table_info *newinfo, - /* ... this is a fallthru */ - newpos = pos + e->next_offset; - } -+ -+ if (newpos > newinfo->size - sizeof(*e)) -+ return 0; -+ - e = (struct ipt_entry *) - (entry0 + newpos); - e->counters.pcnt = pos; -diff --git a/net/ipv6/netfilter/ip6_tables.c b/net/ipv6/netfilter/ip6_tables.c -index 99425cf..d88a794 100644 ---- a/net/ipv6/netfilter/ip6_tables.c -+++ b/net/ipv6/netfilter/ip6_tables.c -@@ -531,6 +531,8 @@ mark_source_chains(const struct xt_table_info *newinfo, - - /* Move along one */ - size = e->next_offset; -+ if (pos + size > newinfo->size - sizeof(*e)) -+ return 0; - e = (struct ip6t_entry *) - (entry0 + pos + size); - e->counters.pcnt = pos; -@@ -541,13 +543,6 @@ mark_source_chains(const struct xt_table_info *newinfo, - if (strcmp(t->target.u.user.name, - XT_STANDARD_TARGET) == 0 && - newpos >= 0) { -- if (newpos > newinfo->size - -- sizeof(struct ip6t_entry)) { -- duprintf("mark_source_chains: " -- "bad verdict (%i)\n", -- newpos); -- return 0; -- } - /* This a jump; chase it. */ - duprintf("Jump rule %u -> %u\n", - pos, newpos); -@@ -555,6 +550,10 @@ mark_source_chains(const struct xt_table_info *newinfo, - /* ... this is a fallthru */ - newpos = pos + e->next_offset; - } -+ -+ if (newpos > newinfo->size - sizeof(*e)) -+ return 0; -+ - e = (struct ip6t_entry *) - (entry0 + newpos); - e->counters.pcnt = pos; --- -2.4.10 diff --git a/proc-prevent-stacking-filesystems-on-top.patch b/proc-prevent-stacking-filesystems-on-top.patch deleted file mode 100644 index 178aa3ba6..000000000 --- a/proc-prevent-stacking-filesystems-on-top.patch +++ /dev/null @@ -1,41 +0,0 @@ -From e54ad7f1ee263ffa5a2de9c609d58dfa27b21cd9 Mon Sep 17 00:00:00 2001 -From: Jann Horn -Date: Wed, 1 Jun 2016 11:55:05 +0200 -Subject: [PATCH] proc: prevent stacking filesystems on top - -This prevents stacking filesystems (ecryptfs and overlayfs) from using -procfs as lower filesystem. There is too much magic going on inside -procfs, and there is no good reason to stack stuff on top of procfs. - -(For example, procfs does access checks in VFS open handlers, and -ecryptfs by design calls open handlers from a kernel thread that doesn't -drop privileges or so.) - -Signed-off-by: Jann Horn -Cc: stable@vger.kernel.org -Signed-off-by: Linus Torvalds ---- - fs/proc/root.c | 7 +++++++ - 1 file changed, 7 insertions(+) - -diff --git a/fs/proc/root.c b/fs/proc/root.c -index 361ab4ee42fc..ec649c92d270 100644 ---- a/fs/proc/root.c -+++ b/fs/proc/root.c -@@ -121,6 +121,13 @@ static struct dentry *proc_mount(struct file_system_type *fs_type, - if (IS_ERR(sb)) - return ERR_CAST(sb); - -+ /* -+ * procfs isn't actually a stacking filesystem; however, there is -+ * too much magic going on inside it to permit stacking things on -+ * top of it -+ */ -+ sb->s_stack_depth = FILESYSTEM_MAX_STACK_DEPTH; -+ - if (!proc_parse_options(options, ns)) { - deactivate_locked_super(sb); - return ERR_PTR(-EINVAL); --- -2.5.5 - diff --git a/revert-stmmac-Fix-eth0-No-PHY-found-regression.patch b/revert-stmmac-Fix-eth0-No-PHY-found-regression.patch deleted file mode 100644 index 68b9cd3ab..000000000 --- a/revert-stmmac-Fix-eth0-No-PHY-found-regression.patch +++ /dev/null @@ -1,87 +0,0 @@ -From 44f947bb8ef5f4add9f2d84e1ff53afd8f2f5537 Mon Sep 17 00:00:00 2001 -From: Peter Robinson -Date: Wed, 16 Mar 2016 15:21:44 +0000 -Subject: [PATCH 1/2] Revert "stmmac: Fix 'eth0: No PHY found' regression" - -This reverts commit 88f8b1bb41c6208f81b6a480244533ded7b59493. ---- - drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c | 11 ++++++++++- - drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c | 9 +-------- - include/linux/stmmac.h | 1 - - 3 files changed, 11 insertions(+), 10 deletions(-) - -diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c -index efb54f3..0faf163 100644 ---- a/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c -+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c -@@ -199,12 +199,21 @@ int stmmac_mdio_register(struct net_device *ndev) - struct stmmac_priv *priv = netdev_priv(ndev); - struct stmmac_mdio_bus_data *mdio_bus_data = priv->plat->mdio_bus_data; - int addr, found; -- struct device_node *mdio_node = priv->plat->mdio_node; -+ struct device_node *mdio_node = NULL; -+ struct device_node *child_node = NULL; - - if (!mdio_bus_data) - return 0; - - if (IS_ENABLED(CONFIG_OF)) { -+ for_each_child_of_node(priv->device->of_node, child_node) { -+ if (of_device_is_compatible(child_node, -+ "snps,dwmac-mdio")) { -+ mdio_node = child_node; -+ break; -+ } -+ } -+ - if (mdio_node) { - netdev_dbg(ndev, "FOUND MDIO subnode\n"); - } else { -diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c -index 4514ba7..6a52fa1 100644 ---- a/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c -+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c -@@ -110,7 +110,6 @@ stmmac_probe_config_dt(struct platform_device *pdev, const char **mac) - struct device_node *np = pdev->dev.of_node; - struct plat_stmmacenet_data *plat; - struct stmmac_dma_cfg *dma_cfg; -- struct device_node *child_node = NULL; - - plat = devm_kzalloc(&pdev->dev, sizeof(*plat), GFP_KERNEL); - if (!plat) -@@ -141,19 +140,13 @@ stmmac_probe_config_dt(struct platform_device *pdev, const char **mac) - plat->phy_node = of_node_get(np); - } - -- for_each_child_of_node(np, child_node) -- if (of_device_is_compatible(child_node, "snps,dwmac-mdio")) { -- plat->mdio_node = child_node; -- break; -- } -- - /* "snps,phy-addr" is not a standard property. Mark it as deprecated - * and warn of its use. Remove this when phy node support is added. - */ - if (of_property_read_u32(np, "snps,phy-addr", &plat->phy_addr) == 0) - dev_warn(&pdev->dev, "snps,phy-addr property is deprecated\n"); - -- if ((plat->phy_node && !of_phy_is_fixed_link(np)) || !plat->mdio_node) -+ if ((plat->phy_node && !of_phy_is_fixed_link(np)) || plat->phy_bus_name) - plat->mdio_bus_data = NULL; - else - plat->mdio_bus_data = -diff --git a/include/linux/stmmac.h b/include/linux/stmmac.h -index 881a79d..eead8ab 100644 ---- a/include/linux/stmmac.h -+++ b/include/linux/stmmac.h -@@ -100,7 +100,6 @@ struct plat_stmmacenet_data { - int interface; - struct stmmac_mdio_bus_data *mdio_bus_data; - struct device_node *phy_node; -- struct device_node *mdio_node; - struct stmmac_dma_cfg *dma_cfg; - int clk_csr; - int has_gmac; --- -2.5.0 - diff --git a/sched-panic-on-corrupted-stack-end.patch b/sched-panic-on-corrupted-stack-end.patch deleted file mode 100644 index 1d6bbaf3d..000000000 --- a/sched-panic-on-corrupted-stack-end.patch +++ /dev/null @@ -1,36 +0,0 @@ -From 29d6455178a09e1dc340380c582b13356227e8df Mon Sep 17 00:00:00 2001 -From: Jann Horn -Date: Wed, 1 Jun 2016 11:55:07 +0200 -Subject: [PATCH] sched: panic on corrupted stack end - -Until now, hitting this BUG_ON caused a recursive oops (because oops -handling involves do_exit(), which calls into the scheduler, which in -turn raises an oops), which caused stuff below the stack to be -overwritten until a panic happened (e.g. via an oops in interrupt -context, caused by the overwritten CPU index in the thread_info). - -Just panic directly. - -Signed-off-by: Jann Horn -Signed-off-by: Linus Torvalds ---- - kernel/sched/core.c | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/kernel/sched/core.c b/kernel/sched/core.c -index d1f7149f8704..11546a6ed5df 100644 ---- a/kernel/sched/core.c -+++ b/kernel/sched/core.c -@@ -3047,7 +3047,8 @@ static noinline void __schedule_bug(struct task_struct *prev) - static inline void schedule_debug(struct task_struct *prev) - { - #ifdef CONFIG_SCHED_STACK_END_CHECK -- BUG_ON(task_stack_end_corrupted(prev)); -+ if (task_stack_end_corrupted(prev)) -+ panic("corrupted stack end detected inside scheduler\n"); - #endif - - if (unlikely(in_atomic_preempt_off())) { --- -2.5.5 - diff --git a/sources b/sources index e9b1da3a8..8debc8e12 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ -a60d48eee08ec0536d5efb17ca819aef linux-4.5.tar.xz -6f557fe90b800b615c85c2ca04da6154 perf-man-4.5.tar.gz -5405f81eacd09def60777b0e0f0a1cb5 patch-4.5.7.xz +d2927020e24a76da4ab482a8bc3e9ef3 linux-4.6.tar.xz +fd23b14b9d474c3dfacb6e8ee82d3a51 perf-man-4.6.tar.gz +0d59cb81eb7c0daf0f5019deda65af90 patch-4.6.3.xz diff --git a/stmmac-fix-MDIO-settings.patch b/stmmac-fix-MDIO-settings.patch deleted file mode 100644 index 41fa928a4..000000000 --- a/stmmac-fix-MDIO-settings.patch +++ /dev/null @@ -1,235 +0,0 @@ -From d55a02f460ffd64a5ba7f331489af87edeebf8da Mon Sep 17 00:00:00 2001 -From: Giuseppe CAVALLARO -Date: Wed, 16 Mar 2016 10:38:49 +0100 -Subject: [PATCH 2/2] stmmac: fix MDIO settings -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Initially the phy_bus_name was added to manipulate the -driver name but it was recently just used to manage the -fixed-link and then to take some decision at run-time. -So the patch uses the is_pseudo_fixed_link and removes -the phy_bus_name variable not necessary anymore. - -The driver can manage the mdio registration by using phy-handle, -dwmac-mdio and own parameter e.g. snps,phy-addr. -This patch takes care about all these possible configurations -and fixes the mdio registration in case of there is a real -transceiver or a switch (that needs to be managed by using -fixed-link). - -Signed-off-by: Giuseppe Cavallaro -Reviewed-by: Andreas Färber -Tested-by: Frank Schäfer -Cc: Gabriel Fernandez -Cc: Dinh Nguyen -Cc: David S. Miller -Cc: Phil Reid ---- - drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 11 +-- - drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c | 19 +---- - .../net/ethernet/stmicro/stmmac/stmmac_platform.c | 84 +++++++++++++++++----- - include/linux/stmmac.h | 2 +- - 4 files changed, 71 insertions(+), 45 deletions(-) - -diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c -index c21015b..389d7d0 100644 ---- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c -+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c -@@ -271,7 +271,6 @@ static void stmmac_eee_ctrl_timer(unsigned long arg) - */ - bool stmmac_eee_init(struct stmmac_priv *priv) - { -- char *phy_bus_name = priv->plat->phy_bus_name; - unsigned long flags; - bool ret = false; - -@@ -283,7 +282,7 @@ bool stmmac_eee_init(struct stmmac_priv *priv) - goto out; - - /* Never init EEE in case of a switch is attached */ -- if (phy_bus_name && (!strcmp(phy_bus_name, "fixed"))) -+ if (priv->phydev->is_pseudo_fixed_link) - goto out; - - /* MAC core supports the EEE feature. */ -@@ -820,12 +819,8 @@ static int stmmac_init_phy(struct net_device *dev) - phydev = of_phy_connect(dev, priv->plat->phy_node, - &stmmac_adjust_link, 0, interface); - } else { -- if (priv->plat->phy_bus_name) -- snprintf(bus_id, MII_BUS_ID_SIZE, "%s-%x", -- priv->plat->phy_bus_name, priv->plat->bus_id); -- else -- snprintf(bus_id, MII_BUS_ID_SIZE, "stmmac-%x", -- priv->plat->bus_id); -+ snprintf(bus_id, MII_BUS_ID_SIZE, "stmmac-%x", -+ priv->plat->bus_id); - - snprintf(phy_id_fmt, MII_BUS_ID_SIZE + 3, PHY_ID_FMT, bus_id, - priv->plat->phy_addr); -diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c -index 0faf163..3f5512f 100644 ---- a/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c -+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c -@@ -198,29 +198,12 @@ int stmmac_mdio_register(struct net_device *ndev) - struct mii_bus *new_bus; - struct stmmac_priv *priv = netdev_priv(ndev); - struct stmmac_mdio_bus_data *mdio_bus_data = priv->plat->mdio_bus_data; -+ struct device_node *mdio_node = priv->plat->mdio_node; - int addr, found; -- struct device_node *mdio_node = NULL; -- struct device_node *child_node = NULL; - - if (!mdio_bus_data) - return 0; - -- if (IS_ENABLED(CONFIG_OF)) { -- for_each_child_of_node(priv->device->of_node, child_node) { -- if (of_device_is_compatible(child_node, -- "snps,dwmac-mdio")) { -- mdio_node = child_node; -- break; -- } -- } -- -- if (mdio_node) { -- netdev_dbg(ndev, "FOUND MDIO subnode\n"); -- } else { -- netdev_warn(ndev, "No MDIO subnode found\n"); -- } -- } -- - new_bus = mdiobus_alloc(); - if (new_bus == NULL) - return -ENOMEM; -diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c -index 6a52fa1..190fb6d 100644 ---- a/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c -+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c -@@ -96,6 +96,69 @@ static int dwmac1000_validate_ucast_entries(int ucast_entries) - } - - /** -+ * stmmac_dt_phy - parse device-tree driver parameters to allocate PHY resources -+ * @plat: driver data platform structure -+ * @np: device tree node -+ * @dev: device pointer -+ * Description: -+ * The mdio bus will be allocated in case of a phy transceiver is on board; -+ * it will be NULL if the fixed-link is configured. -+ * If there is the "snps,dwmac-mdio" sub-node the mdio will be allocated -+ * in any case (for DSA, mdio must be registered even if fixed-link). -+ * The table below sums the supported configurations: -+ * ------------------------------- -+ * snps,phy-addr | Y -+ * ------------------------------- -+ * phy-handle | Y -+ * ------------------------------- -+ * fixed-link | N -+ * ------------------------------- -+ * snps,dwmac-mdio | -+ * even if | Y -+ * fixed-link | -+ * ------------------------------- -+ * -+ * It returns 0 in case of success otherwise -ENODEV. -+ */ -+static int stmmac_dt_phy(struct plat_stmmacenet_data *plat, -+ struct device_node *np, struct device *dev) -+{ -+ bool mdio = true; -+ -+ /* If phy-handle property is passed from DT, use it as the PHY */ -+ plat->phy_node = of_parse_phandle(np, "phy-handle", 0); -+ if (plat->phy_node) -+ dev_dbg(dev, "Found phy-handle subnode\n"); -+ -+ /* If phy-handle is not specified, check if we have a fixed-phy */ -+ if (!plat->phy_node && of_phy_is_fixed_link(np)) { -+ if ((of_phy_register_fixed_link(np) < 0)) -+ return -ENODEV; -+ -+ dev_dbg(dev, "Found fixed-link subnode\n"); -+ plat->phy_node = of_node_get(np); -+ mdio = false; -+ } -+ -+ /* If snps,dwmac-mdio is passed from DT, always register the MDIO */ -+ for_each_child_of_node(np, plat->mdio_node) { -+ if (of_device_is_compatible(plat->mdio_node, "snps,dwmac-mdio")) -+ break; -+ } -+ -+ if (plat->mdio_node) { -+ dev_dbg(dev, "Found MDIO subnode\n"); -+ mdio = true; -+ } -+ -+ if (mdio) -+ plat->mdio_bus_data = -+ devm_kzalloc(dev, sizeof(struct stmmac_mdio_bus_data), -+ GFP_KERNEL); -+ return 0; -+} -+ -+/** - * stmmac_probe_config_dt - parse device-tree driver parameters - * @pdev: platform_device structure - * @plat: driver data platform structure -@@ -129,30 +192,15 @@ stmmac_probe_config_dt(struct platform_device *pdev, const char **mac) - /* Default to phy auto-detection */ - plat->phy_addr = -1; - -- /* If we find a phy-handle property, use it as the PHY */ -- plat->phy_node = of_parse_phandle(np, "phy-handle", 0); -- -- /* If phy-handle is not specified, check if we have a fixed-phy */ -- if (!plat->phy_node && of_phy_is_fixed_link(np)) { -- if ((of_phy_register_fixed_link(np) < 0)) -- return ERR_PTR(-ENODEV); -- -- plat->phy_node = of_node_get(np); -- } -- - /* "snps,phy-addr" is not a standard property. Mark it as deprecated - * and warn of its use. Remove this when phy node support is added. - */ - if (of_property_read_u32(np, "snps,phy-addr", &plat->phy_addr) == 0) - dev_warn(&pdev->dev, "snps,phy-addr property is deprecated\n"); - -- if ((plat->phy_node && !of_phy_is_fixed_link(np)) || plat->phy_bus_name) -- plat->mdio_bus_data = NULL; -- else -- plat->mdio_bus_data = -- devm_kzalloc(&pdev->dev, -- sizeof(struct stmmac_mdio_bus_data), -- GFP_KERNEL); -+ /* To Configure PHY by using all device-tree supported properties */ -+ if (stmmac_dt_phy(plat, np, &pdev->dev)) -+ return ERR_PTR(-ENODEV); - - of_property_read_u32(np, "tx-fifo-depth", &plat->tx_fifo_size); - -diff --git a/include/linux/stmmac.h b/include/linux/stmmac.h -index eead8ab..8b1ff2b 100644 ---- a/include/linux/stmmac.h -+++ b/include/linux/stmmac.h -@@ -94,12 +94,12 @@ struct stmmac_dma_cfg { - }; - - struct plat_stmmacenet_data { -- char *phy_bus_name; - int bus_id; - int phy_addr; - int interface; - struct stmmac_mdio_bus_data *mdio_bus_data; - struct device_node *phy_node; -+ struct device_node *mdio_node; - struct stmmac_dma_cfg *dma_cfg; - int clk_csr; - int has_gmac; --- -2.5.0 - diff --git a/tipc-check-nl-sock-before-parsing-nested-attributes.patch b/tipc-check-nl-sock-before-parsing-nested-attributes.patch deleted file mode 100644 index 09bfe1485..000000000 --- a/tipc-check-nl-sock-before-parsing-nested-attributes.patch +++ /dev/null @@ -1,36 +0,0 @@ -From 45e093ae2830cd1264677d47ff9a95a71f5d9f9c Mon Sep 17 00:00:00 2001 -From: Richard Alpe -Date: Mon, 16 May 2016 11:14:54 +0200 -Subject: [PATCH] tipc: check nl sock before parsing nested attributes - -Make sure the socket for which the user is listing publication exists -before parsing the socket netlink attributes. - -Prior to this patch a call without any socket caused a NULL pointer -dereference in tipc_nl_publ_dump(). - -Tested-and-reported-by: Baozeng Ding -Signed-off-by: Richard Alpe -Acked-by: Jon Maloy -Signed-off-by: David S. Miller ---- - net/tipc/socket.c | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/net/tipc/socket.c b/net/tipc/socket.c -index 12628890c219..3b7a79991d55 100644 ---- a/net/tipc/socket.c -+++ b/net/tipc/socket.c -@@ -2853,6 +2853,9 @@ int tipc_nl_publ_dump(struct sk_buff *skb, struct netlink_callback *cb) - if (err) - return err; - -+ if (!attrs[TIPC_NLA_SOCK]) -+ return -EINVAL; -+ - err = nla_parse_nested(sock, TIPC_NLA_SOCK_MAX, - attrs[TIPC_NLA_SOCK], - tipc_nl_sock_policy); --- -2.5.5 - diff --git a/x86-build-Build-compressed-x86-kernels-as-PIE.patch b/x86-build-Build-compressed-x86-kernels-as-PIE.patch deleted file mode 100644 index 064cb485b..000000000 --- a/x86-build-Build-compressed-x86-kernels-as-PIE.patch +++ /dev/null @@ -1,159 +0,0 @@ -From 6d92bc9d483aa1751755a66fee8fb39dffb088c0 Mon Sep 17 00:00:00 2001 -From: "H.J. Lu" -Date: Wed, 16 Mar 2016 20:04:35 -0700 -Subject: [PATCH] x86/build: Build compressed x86 kernels as PIE - -The 32-bit x86 assembler in binutils 2.26 will generate R_386_GOT32X -relocation to get the symbol address in PIC. When the compressed x86 -kernel isn't built as PIC, the linker optimizes R_386_GOT32X relocations -to their fixed symbol addresses. However, when the compressed x86 -kernel is loaded at a different address, it leads to the following -load failure: - - Failed to allocate space for phdrs - -during the decompression stage. - -If the compressed x86 kernel is relocatable at run-time, it should be -compiled with -fPIE, instead of -fPIC, if possible and should be built as -Position Independent Executable (PIE) so that linker won't optimize -R_386_GOT32X relocation to its fixed symbol address. - -Older linkers generate R_386_32 relocations against locally defined -symbols, _bss, _ebss, _got and _egot, in PIE. It isn't wrong, just less -optimal than R_386_RELATIVE. But the x86 kernel fails to properly handle -R_386_32 relocations when relocating the kernel. To generate -R_386_RELATIVE relocations, we mark _bss, _ebss, _got and _egot as -hidden in both 32-bit and 64-bit x86 kernels. - -To build a 64-bit compressed x86 kernel as PIE, we need to disable the -relocation overflow check to avoid relocation overflow errors. We do -this with a new linker command-line option, -z noreloc-overflow, which -got added recently: - - commit 4c10bbaa0912742322f10d9d5bb630ba4e15dfa7 - Author: H.J. Lu - Date: Tue Mar 15 11:07:06 2016 -0700 - - Add -z noreloc-overflow option to x86-64 ld - - Add -z noreloc-overflow command-line option to the x86-64 ELF linker to - disable relocation overflow check. This can be used to avoid relocation - overflow check if there will be no dynamic relocation overflow at - run-time. - -The 64-bit compressed x86 kernel is built as PIE only if the linker supports --z noreloc-overflow. So far 64-bit relocatable compressed x86 kernel -boots fine even when it is built as a normal executable. - -Signed-off-by: H.J. Lu -Cc: Andy Lutomirski -Cc: Borislav Petkov -Cc: Brian Gerst -Cc: Denys Vlasenko -Cc: H. Peter Anvin -Cc: Linus Torvalds -Cc: Peter Zijlstra -Cc: Thomas Gleixner -Cc: linux-kernel@vger.kernel.org -[ Edited the changelog and comments. ] -Signed-off-by: Ingo Molnar ---- - arch/x86/boot/compressed/Makefile | 14 +++++++++++++- - arch/x86/boot/compressed/head_32.S | 28 ++++++++++++++++++++++++++++ - arch/x86/boot/compressed/head_64.S | 8 ++++++++ - 3 files changed, 49 insertions(+), 1 deletion(-) - -diff --git a/arch/x86/boot/compressed/Makefile b/arch/x86/boot/compressed/Makefile -index 6915ff2..8774cb2 100644 ---- a/arch/x86/boot/compressed/Makefile -+++ b/arch/x86/boot/compressed/Makefile -@@ -26,7 +26,7 @@ targets := vmlinux vmlinux.bin vmlinux.bin.gz vmlinux.bin.bz2 vmlinux.bin.lzma \ - vmlinux.bin.xz vmlinux.bin.lzo vmlinux.bin.lz4 - - KBUILD_CFLAGS := -m$(BITS) -D__KERNEL__ $(LINUX_INCLUDE) -O2 --KBUILD_CFLAGS += -fno-strict-aliasing -fPIC -+KBUILD_CFLAGS += -fno-strict-aliasing $(call cc-option, -fPIE, -fPIC) - KBUILD_CFLAGS += -DDISABLE_BRANCH_PROFILING - cflags-$(CONFIG_X86_32) := -march=i386 - cflags-$(CONFIG_X86_64) := -mcmodel=small -@@ -40,6 +40,18 @@ GCOV_PROFILE := n - UBSAN_SANITIZE :=n - - LDFLAGS := -m elf_$(UTS_MACHINE) -+ifeq ($(CONFIG_RELOCATABLE),y) -+# If kernel is relocatable, build compressed kernel as PIE. -+ifeq ($(CONFIG_X86_32),y) -+LDFLAGS += $(call ld-option, -pie) $(call ld-option, --no-dynamic-linker) -+else -+# To build 64-bit compressed kernel as PIE, we disable relocation -+# overflow check to avoid relocation overflow error with a new linker -+# command-line option, -z noreloc-overflow. -+LDFLAGS += $(shell $(LD) --help 2>&1 | grep -q "\-z noreloc-overflow" \ -+ && echo "-z noreloc-overflow -pie --no-dynamic-linker") -+endif -+endif - LDFLAGS_vmlinux := -T - - hostprogs-y := mkpiggy -diff --git a/arch/x86/boot/compressed/head_32.S b/arch/x86/boot/compressed/head_32.S -index 8ef964d..0256064 100644 ---- a/arch/x86/boot/compressed/head_32.S -+++ b/arch/x86/boot/compressed/head_32.S -@@ -31,6 +31,34 @@ - #include - #include - -+/* -+ * The 32-bit x86 assembler in binutils 2.26 will generate R_386_GOT32X -+ * relocation to get the symbol address in PIC. When the compressed x86 -+ * kernel isn't built as PIC, the linker optimizes R_386_GOT32X -+ * relocations to their fixed symbol addresses. However, when the -+ * compressed x86 kernel is loaded at a different address, it leads -+ * to the following load failure: -+ * -+ * Failed to allocate space for phdrs -+ * -+ * during the decompression stage. -+ * -+ * If the compressed x86 kernel is relocatable at run-time, it should be -+ * compiled with -fPIE, instead of -fPIC, if possible and should be built as -+ * Position Independent Executable (PIE) so that linker won't optimize -+ * R_386_GOT32X relocation to its fixed symbol address. Older -+ * linkers generate R_386_32 relocations against locally defined symbols, -+ * _bss, _ebss, _got and _egot, in PIE. It isn't wrong, just less -+ * optimal than R_386_RELATIVE. But the x86 kernel fails to properly handle -+ * R_386_32 relocations when relocating the kernel. To generate -+ * R_386_RELATIVE relocations, we mark _bss, _ebss, _got and _egot as -+ * hidden: -+ */ -+ .hidden _bss -+ .hidden _ebss -+ .hidden _got -+ .hidden _egot -+ - __HEAD - ENTRY(startup_32) - #ifdef CONFIG_EFI_STUB -diff --git a/arch/x86/boot/compressed/head_64.S b/arch/x86/boot/compressed/head_64.S -index b0c0d16..86558a1 100644 ---- a/arch/x86/boot/compressed/head_64.S -+++ b/arch/x86/boot/compressed/head_64.S -@@ -33,6 +33,14 @@ - #include - #include - -+/* -+ * Locally defined symbols should be marked hidden: -+ */ -+ .hidden _bss -+ .hidden _ebss -+ .hidden _got -+ .hidden _egot -+ - __HEAD - .code32 - ENTRY(startup_32) --- -2.7.3 - diff --git a/x86-efi-bgrt-Switch-all-pr_err-to-pr_debug-for-inval.patch b/x86-efi-bgrt-Switch-all-pr_err-to-pr_debug-for-inval.patch deleted file mode 100644 index d3d0aa2c3..000000000 --- a/x86-efi-bgrt-Switch-all-pr_err-to-pr_debug-for-inval.patch +++ /dev/null @@ -1,94 +0,0 @@ -From 3e4f68f273ef86e6ed8be24a86f8ef514deaecc0 Mon Sep 17 00:00:00 2001 -From: Josh Boyer -Date: Wed, 27 Apr 2016 08:37:41 -0400 -Subject: [PATCH] x86/efi-bgrt: Switch all pr_err() to pr_debug() for invalid - BGRT - -The promise of pretty boot splashes from firmware via BGRT was at -best only that; a promise. The kernel diligently checks to make -sure the BGRT data firmware gives it is valid, and dutifully warns -the user when it isn't. However, it does so via the pr_err log -level which seems unnecessary. The user cannot do anything about -this and there really isn't an error on the part of Linux to -correct. - -This lowers the log level by using pr_debug instead. Users will -no longer have their boot process uglified by the kernel reminding -us that firmware can and often is broken. Ironic, considering -BGRT is supposed to make boot pretty to begin with. - -Signed-off-by: Josh Boyer ---- - arch/x86/platform/efi/efi-bgrt.c | 16 ++++++++-------- - 1 file changed, 8 insertions(+), 8 deletions(-) - -diff --git a/arch/x86/platform/efi/efi-bgrt.c b/arch/x86/platform/efi/efi-bgrt.c -index ea48449b2e63..87da4108785b 100644 ---- a/arch/x86/platform/efi/efi-bgrt.c -+++ b/arch/x86/platform/efi/efi-bgrt.c -@@ -41,17 +41,17 @@ void __init efi_bgrt_init(void) - return; - - if (bgrt_tab->header.length < sizeof(*bgrt_tab)) { -- pr_err("Ignoring BGRT: invalid length %u (expected %zu)\n", -+ pr_debug("Ignoring BGRT: invalid length %u (expected %zu)\n", - bgrt_tab->header.length, sizeof(*bgrt_tab)); - return; - } - if (bgrt_tab->version != 1) { -- pr_err("Ignoring BGRT: invalid version %u (expected 1)\n", -+ pr_debug("Ignoring BGRT: invalid version %u (expected 1)\n", - bgrt_tab->version); - return; - } - if (bgrt_tab->status & 0xfe) { -- pr_err("Ignoring BGRT: reserved status bits are non-zero %u\n", -+ pr_debug("Ignoring BGRT: reserved status bits are non-zero %u\n", - bgrt_tab->status); - return; - } -@@ -61,12 +61,12 @@ void __init efi_bgrt_init(void) - return; - } - if (bgrt_tab->image_type != 0) { -- pr_err("Ignoring BGRT: invalid image type %u (expected 0)\n", -+ pr_debug("Ignoring BGRT: invalid image type %u (expected 0)\n", - bgrt_tab->image_type); - return; - } - if (!bgrt_tab->image_address) { -- pr_err("Ignoring BGRT: null image address\n"); -+ pr_debug("Ignoring BGRT: null image address\n"); - return; - } - -@@ -76,7 +76,7 @@ void __init efi_bgrt_init(void) - sizeof(bmp_header)); - ioremapped = true; - if (!image) { -- pr_err("Ignoring BGRT: failed to map image header memory\n"); -+ pr_debug("Ignoring BGRT: failed to map image header memory\n"); - return; - } - } -@@ -88,7 +88,7 @@ void __init efi_bgrt_init(void) - - bgrt_image = kmalloc(bgrt_image_size, GFP_KERNEL | __GFP_NOWARN); - if (!bgrt_image) { -- pr_err("Ignoring BGRT: failed to allocate memory for image (wanted %zu bytes)\n", -+ pr_debug("Ignoring BGRT: failed to allocate memory for image (wanted %zu bytes)\n", - bgrt_image_size); - return; - } -@@ -97,7 +97,7 @@ void __init efi_bgrt_init(void) - image = early_ioremap(bgrt_tab->image_address, - bmp_header.size); - if (!image) { -- pr_err("Ignoring BGRT: failed to map image memory\n"); -+ pr_debug("Ignoring BGRT: failed to map image memory\n"); - kfree(bgrt_image); - bgrt_image = NULL; - return; --- -2.5.5 - diff --git a/x86-mm-32-Enable-full-randomization-on-i386-and-X86_.patch b/x86-mm-32-Enable-full-randomization-on-i386-and-X86_.patch deleted file mode 100644 index 0776982c1..000000000 --- a/x86-mm-32-Enable-full-randomization-on-i386-and-X86_.patch +++ /dev/null @@ -1,83 +0,0 @@ -From 8b8addf891de8a00e4d39fc32f93f7c5eb8feceb Mon Sep 17 00:00:00 2001 -From: Hector Marco-Gisbert -Date: Thu, 10 Mar 2016 20:51:00 +0100 -Subject: [PATCH] x86/mm/32: Enable full randomization on i386 and X86_32 - -Currently on i386 and on X86_64 when emulating X86_32 in legacy mode, only -the stack and the executable are randomized but not other mmapped files -(libraries, vDSO, etc.). This patch enables randomization for the -libraries, vDSO and mmap requests on i386 and in X86_32 in legacy mode. - -By default on i386 there are 8 bits for the randomization of the libraries, -vDSO and mmaps which only uses 1MB of VA. - -This patch preserves the original randomness, using 1MB of VA out of 3GB or -4GB. We think that 1MB out of 3GB is not a big cost for having the ASLR. - -The first obvious security benefit is that all objects are randomized (not -only the stack and the executable) in legacy mode which highly increases -the ASLR effectiveness, otherwise the attackers may use these -non-randomized areas. But also sensitive setuid/setgid applications are -more secure because currently, attackers can disable the randomization of -these applications by setting the ulimit stack to "unlimited". This is a -very old and widely known trick to disable the ASLR in i386 which has been -allowed for too long. - -Another trick used to disable the ASLR was to set the ADDR_NO_RANDOMIZE -personality flag, but fortunately this doesn't work on setuid/setgid -applications because there is security checks which clear Security-relevant -flags. - -This patch always randomizes the mmap_legacy_base address, removing the -possibility to disable the ASLR by setting the stack to "unlimited". - -Signed-off-by: Hector Marco-Gisbert -Acked-by: Ismael Ripoll Ripoll -Acked-by: Kees Cook -Acked-by: Arjan van de Ven -Cc: Linus Torvalds -Cc: Peter Zijlstra -Cc: Thomas Gleixner -Cc: akpm@linux-foundation.org -Cc: kees Cook -Link: http://lkml.kernel.org/r/1457639460-5242-1-git-send-email-hecmargi@upv.es -Signed-off-by: Ingo Molnar ---- - arch/x86/mm/mmap.c | 14 +------------- - 1 file changed, 1 insertion(+), 13 deletions(-) - -diff --git a/arch/x86/mm/mmap.c b/arch/x86/mm/mmap.c -index 96bd1e2..389939f 100644 ---- a/arch/x86/mm/mmap.c -+++ b/arch/x86/mm/mmap.c -@@ -94,18 +94,6 @@ static unsigned long mmap_base(unsigned long rnd) - } - - /* -- * Bottom-up (legacy) layout on X86_32 did not support randomization, X86_64 -- * does, but not when emulating X86_32 -- */ --static unsigned long mmap_legacy_base(unsigned long rnd) --{ -- if (mmap_is_ia32()) -- return TASK_UNMAPPED_BASE; -- else -- return TASK_UNMAPPED_BASE + rnd; --} -- --/* - * This function, called very early during the creation of a new - * process VM image, sets up which VM layout function to use: - */ -@@ -116,7 +104,7 @@ void arch_pick_mmap_layout(struct mm_struct *mm) - if (current->flags & PF_RANDOMIZE) - random_factor = arch_mmap_rnd(); - -- mm->mmap_legacy_base = mmap_legacy_base(random_factor); -+ mm->mmap_legacy_base = TASK_UNMAPPED_BASE + random_factor; - - if (mmap_is_legacy()) { - mm->mmap_base = mm->mmap_legacy_base; --- -2.7.3 - From a2e53c5e4a009a809ba6e7d3199c08957e5c88ea Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Fri, 24 Jun 2016 16:25:27 -0400 Subject: [PATCH 102/275] Disable CONFIG_DEBUG_WX again Accidentally enabled on rebase --- config-x86-generic | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config-x86-generic b/config-x86-generic index 83d3fd57b..a4b2a04a2 100644 --- a/config-x86-generic +++ b/config-x86-generic @@ -70,7 +70,7 @@ CONFIG_X86_MPPARSE=y CONFIG_MMIOTRACE=y # CONFIG_MMIOTRACE_TEST is not set # CONFIG_DEBUG_PER_CPU_MAPS is not set -CONFIG_DEBUG_WX=y +# CONFIG_DEBUG_WX is not set CONFIG_DEBUG_STACKOVERFLOW=y CONFIG_ACPI=y From 4cd01e9663362ec6e2d1523e2699b0a0b32cbb0b Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Mon, 27 Jun 2016 11:57:34 -0400 Subject: [PATCH 103/275] CVE-2016-5829 heap overflow in hiddev (rhbz 1350509 1350513) --- ...ate-num_values-for-HIDIOCGUSAGES-HID.patch | 44 +++++++++++++++++++ kernel.spec | 6 +++ 2 files changed, 50 insertions(+) create mode 100644 HID-hiddev-validate-num_values-for-HIDIOCGUSAGES-HID.patch diff --git a/HID-hiddev-validate-num_values-for-HIDIOCGUSAGES-HID.patch b/HID-hiddev-validate-num_values-for-HIDIOCGUSAGES-HID.patch new file mode 100644 index 000000000..e84272ee7 --- /dev/null +++ b/HID-hiddev-validate-num_values-for-HIDIOCGUSAGES-HID.patch @@ -0,0 +1,44 @@ +From 93a2001bdfd5376c3dc2158653034c20392d15c5 Mon Sep 17 00:00:00 2001 +From: Scott Bauer +Date: Thu, 23 Jun 2016 08:59:47 -0600 +Subject: [PATCH] HID: hiddev: validate num_values for HIDIOCGUSAGES, + HIDIOCSUSAGES commands + +This patch validates the num_values parameter from userland during the +HIDIOCGUSAGES and HIDIOCSUSAGES commands. Previously, if the report id was set +to HID_REPORT_ID_UNKNOWN, we would fail to validate the num_values parameter +leading to a heap overflow. + +Cc: stable@vger.kernel.org +Signed-off-by: Scott Bauer +Signed-off-by: Jiri Kosina +--- + drivers/hid/usbhid/hiddev.c | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +diff --git a/drivers/hid/usbhid/hiddev.c b/drivers/hid/usbhid/hiddev.c +index 2f1ddca6f2e0..700145b15088 100644 +--- a/drivers/hid/usbhid/hiddev.c ++++ b/drivers/hid/usbhid/hiddev.c +@@ -516,13 +516,13 @@ static noinline int hiddev_ioctl_usage(struct hiddev *hiddev, unsigned int cmd, + goto inval; + } else if (uref->usage_index >= field->report_count) + goto inval; +- +- else if ((cmd == HIDIOCGUSAGES || cmd == HIDIOCSUSAGES) && +- (uref_multi->num_values > HID_MAX_MULTI_USAGES || +- uref->usage_index + uref_multi->num_values > field->report_count)) +- goto inval; + } + ++ if ((cmd == HIDIOCGUSAGES || cmd == HIDIOCSUSAGES) && ++ (uref_multi->num_values > HID_MAX_MULTI_USAGES || ++ uref->usage_index + uref_multi->num_values > field->report_count)) ++ goto inval; ++ + switch (cmd) { + case HIDIOCGUSAGE: + uref->value = field->value[uref->usage_index]; +-- +2.5.5 + diff --git a/kernel.spec b/kernel.spec index 8decb5234..16f12fb0e 100644 --- a/kernel.spec +++ b/kernel.spec @@ -650,6 +650,9 @@ Patch823: 0003-drm-nouveau-disp-sor-gf119-both-links-use-the-same-t.patch Patch824: 0004-drm-nouveau-disp-sor-gm107-training-pattern-register.patch Patch825: 0005-i915-fbc-Disable-on-HSW-by-default-for-now.patch +#CVE-2016-5829 rhbz 1350509 1350513 +Patch826: HID-hiddev-validate-num_values-for-HIDIOCGUSAGES-HID.patch + # END OF PATCH DEFINITIONS %endif @@ -2175,6 +2178,9 @@ fi # # %changelog +* Mon Jun 27 2016 Josh Boyer +- CVE-2016-5829 heap overflow in hiddev (rhbz 1350509 1350513) + * Fri Jun 24 2016 Josh Boyer - 4.6.3-300 - Linux v4.6.3 From 97bff36da6c070eedcea57fcd085febeb7ce72b1 Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Tue, 28 Jun 2016 13:21:53 -0400 Subject: [PATCH 104/275] CVE-2016-1237 missing check for permissions setting ACL (rhbz 1350845 1350847) --- kernel.spec | 9 +- ...-check-permissions-when-setting-ACLs.patch | 154 ++++++++++++++++++ posix_acl-Add-set_posix_acl.patch | 55 +++++++ 3 files changed, 217 insertions(+), 1 deletion(-) create mode 100644 nfsd-check-permissions-when-setting-ACLs.patch create mode 100644 posix_acl-Add-set_posix_acl.patch diff --git a/kernel.spec b/kernel.spec index 16f12fb0e..ee49e2e4d 100644 --- a/kernel.spec +++ b/kernel.spec @@ -42,7 +42,7 @@ Summary: The Linux kernel # For non-released -rc kernels, this will be appended after the rcX and # gitX tags, so a 3 here would become part of release "0.rcX.gitX.3" # -%global baserelease 300 +%global baserelease 301 %global fedora_build %{baserelease} # base_sublevel is the kernel version we're starting with and patching @@ -653,6 +653,10 @@ Patch825: 0005-i915-fbc-Disable-on-HSW-by-default-for-now.patch #CVE-2016-5829 rhbz 1350509 1350513 Patch826: HID-hiddev-validate-num_values-for-HIDIOCGUSAGES-HID.patch +#CVE-2016-1237 rhbz 1350845 1350847 +Patch830: posix_acl-Add-set_posix_acl.patch +Patch831: nfsd-check-permissions-when-setting-ACLs.patch + # END OF PATCH DEFINITIONS %endif @@ -2178,6 +2182,9 @@ fi # # %changelog +* Tue Jun 28 2016 Josh Boyer +- CVE-2016-1237 missing check for permissions setting ACL (rhbz 1350845 1350847) + * Mon Jun 27 2016 Josh Boyer - CVE-2016-5829 heap overflow in hiddev (rhbz 1350509 1350513) diff --git a/nfsd-check-permissions-when-setting-ACLs.patch b/nfsd-check-permissions-when-setting-ACLs.patch new file mode 100644 index 000000000..37ed435e0 --- /dev/null +++ b/nfsd-check-permissions-when-setting-ACLs.patch @@ -0,0 +1,154 @@ +From 999653786df6954a31044528ac3f7a5dadca08f4 Mon Sep 17 00:00:00 2001 +From: Ben Hutchings +Date: Wed, 22 Jun 2016 19:43:35 +0100 +Subject: [PATCH] nfsd: check permissions when setting ACLs + +Use set_posix_acl, which includes proper permission checks, instead of +calling ->set_acl directly. Without this anyone may be able to grant +themselves permissions to a file by setting the ACL. + +Lock the inode to make the new checks atomic with respect to set_acl. +(Also, nfsd was the only caller of set_acl not locking the inode, so I +suspect this may fix other races.) + +This also simplifies the code, and ensures our ACLs are checked by +posix_acl_valid. + +The permission checks and the inode locking were lost with commit +4ac7249e, which changed nfsd to use the set_acl inode operation directly +instead of going through xattr handlers. + +Reported-by: David Sinquin +[agreunba@redhat.com: use set_posix_acl] +Fixes: 4ac7249e +Cc: Christoph Hellwig +Cc: Al Viro +Cc: stable@vger.kernel.org +Signed-off-by: J. Bruce Fields +--- + fs/nfsd/nfs2acl.c | 20 ++++++++++---------- + fs/nfsd/nfs3acl.c | 16 +++++++--------- + fs/nfsd/nfs4acl.c | 16 ++++++++-------- + 3 files changed, 25 insertions(+), 27 deletions(-) + +diff --git a/fs/nfsd/nfs2acl.c b/fs/nfsd/nfs2acl.c +index 1580ea6fd64d..d08cd88155c7 100644 +--- a/fs/nfsd/nfs2acl.c ++++ b/fs/nfsd/nfs2acl.c +@@ -104,22 +104,21 @@ static __be32 nfsacld_proc_setacl(struct svc_rqst * rqstp, + goto out; + + inode = d_inode(fh->fh_dentry); +- if (!IS_POSIXACL(inode) || !inode->i_op->set_acl) { +- error = -EOPNOTSUPP; +- goto out_errno; +- } + + error = fh_want_write(fh); + if (error) + goto out_errno; + +- error = inode->i_op->set_acl(inode, argp->acl_access, ACL_TYPE_ACCESS); ++ fh_lock(fh); ++ ++ error = set_posix_acl(inode, ACL_TYPE_ACCESS, argp->acl_access); + if (error) +- goto out_drop_write; +- error = inode->i_op->set_acl(inode, argp->acl_default, +- ACL_TYPE_DEFAULT); ++ goto out_drop_lock; ++ error = set_posix_acl(inode, ACL_TYPE_DEFAULT, argp->acl_default); + if (error) +- goto out_drop_write; ++ goto out_drop_lock; ++ ++ fh_unlock(fh); + + fh_drop_write(fh); + +@@ -131,7 +130,8 @@ out: + posix_acl_release(argp->acl_access); + posix_acl_release(argp->acl_default); + return nfserr; +-out_drop_write: ++out_drop_lock: ++ fh_unlock(fh); + fh_drop_write(fh); + out_errno: + nfserr = nfserrno(error); +diff --git a/fs/nfsd/nfs3acl.c b/fs/nfsd/nfs3acl.c +index 01df4cd7c753..0c890347cde3 100644 +--- a/fs/nfsd/nfs3acl.c ++++ b/fs/nfsd/nfs3acl.c +@@ -95,22 +95,20 @@ static __be32 nfsd3_proc_setacl(struct svc_rqst * rqstp, + goto out; + + inode = d_inode(fh->fh_dentry); +- if (!IS_POSIXACL(inode) || !inode->i_op->set_acl) { +- error = -EOPNOTSUPP; +- goto out_errno; +- } + + error = fh_want_write(fh); + if (error) + goto out_errno; + +- error = inode->i_op->set_acl(inode, argp->acl_access, ACL_TYPE_ACCESS); ++ fh_lock(fh); ++ ++ error = set_posix_acl(inode, ACL_TYPE_ACCESS, argp->acl_access); + if (error) +- goto out_drop_write; +- error = inode->i_op->set_acl(inode, argp->acl_default, +- ACL_TYPE_DEFAULT); ++ goto out_drop_lock; ++ error = set_posix_acl(inode, ACL_TYPE_DEFAULT, argp->acl_default); + +-out_drop_write: ++out_drop_lock: ++ fh_unlock(fh); + fh_drop_write(fh); + out_errno: + nfserr = nfserrno(error); +diff --git a/fs/nfsd/nfs4acl.c b/fs/nfsd/nfs4acl.c +index 6adabd6049b7..71292a0d6f09 100644 +--- a/fs/nfsd/nfs4acl.c ++++ b/fs/nfsd/nfs4acl.c +@@ -770,9 +770,6 @@ nfsd4_set_nfs4_acl(struct svc_rqst *rqstp, struct svc_fh *fhp, + dentry = fhp->fh_dentry; + inode = d_inode(dentry); + +- if (!inode->i_op->set_acl || !IS_POSIXACL(inode)) +- return nfserr_attrnotsupp; +- + if (S_ISDIR(inode->i_mode)) + flags = NFS4_ACL_DIR; + +@@ -782,16 +779,19 @@ nfsd4_set_nfs4_acl(struct svc_rqst *rqstp, struct svc_fh *fhp, + if (host_error < 0) + goto out_nfserr; + +- host_error = inode->i_op->set_acl(inode, pacl, ACL_TYPE_ACCESS); ++ fh_lock(fhp); ++ ++ host_error = set_posix_acl(inode, ACL_TYPE_ACCESS, pacl); + if (host_error < 0) +- goto out_release; ++ goto out_drop_lock; + + if (S_ISDIR(inode->i_mode)) { +- host_error = inode->i_op->set_acl(inode, dpacl, +- ACL_TYPE_DEFAULT); ++ host_error = set_posix_acl(inode, ACL_TYPE_DEFAULT, dpacl); + } + +-out_release: ++out_drop_lock: ++ fh_unlock(fhp); ++ + posix_acl_release(pacl); + posix_acl_release(dpacl); + out_nfserr: +-- +2.5.5 + diff --git a/posix_acl-Add-set_posix_acl.patch b/posix_acl-Add-set_posix_acl.patch new file mode 100644 index 000000000..c067f7b85 --- /dev/null +++ b/posix_acl-Add-set_posix_acl.patch @@ -0,0 +1,55 @@ +From c463b51e8ea1ae47a7bb8cc2777eb550ad3273e2 Mon Sep 17 00:00:00 2001 +From: Andreas Gruenbacher +Date: Wed, 22 Jun 2016 23:57:25 +0200 +Subject: [PATCH] posix_acl: Add set_posix_acl + +Factor out part of posix_acl_xattr_set into a common function that takes +a posix_acl, which nfsd can also call. + +The prototype already exists in include/linux/posix_acl.h. + +Signed-off-by: Andreas Gruenbacher +Cc: stable@vger.kernel.org +Cc: Christoph Hellwig +Cc: Al Viro +Signed-off-by: J. Bruce Fields +--- + fs/posix_acl.c | 22 ++++++++++++++++++++++ + 1 file changed, 22 insertions(+) + +diff --git a/fs/posix_acl.c b/fs/posix_acl.c +index 711dd5170376..f30caace5b84 100644 +--- a/fs/posix_acl.c ++++ b/fs/posix_acl.c +@@ -786,6 +786,28 @@ posix_acl_xattr_get(const struct xattr_handler *handler, + return error; + } + ++int ++set_posix_acl(struct inode *inode, int type, struct posix_acl *acl) ++{ ++ if (!IS_POSIXACL(inode)) ++ return -EOPNOTSUPP; ++ if (!inode->i_op->set_acl) ++ return -EOPNOTSUPP; ++ ++ if (type == ACL_TYPE_DEFAULT && !S_ISDIR(inode->i_mode)) ++ return acl ? -EACCES : 0; ++ if (!inode_owner_or_capable(inode)) ++ return -EPERM; ++ ++ if (acl) { ++ int ret = posix_acl_valid(acl); ++ if (ret) ++ return ret; ++ } ++ return inode->i_op->set_acl(inode, acl, type); ++} ++EXPORT_SYMBOL(set_posix_acl); ++ + static int + posix_acl_xattr_set(const struct xattr_handler *handler, + struct dentry *dentry, const char *name, +-- +2.5.5 + From 9434da4c6955ba08a779b7d37b2369dc57658b8d Mon Sep 17 00:00:00 2001 From: Peter Robinson Date: Thu, 30 Jun 2016 13:02:14 +0100 Subject: [PATCH 105/275] Pull upstream fix for smsc911x --- kernel.spec | 5 ++ ...-PHY-interrupts-are-overwritten-by-0.patch | 52 +++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 net-smsc911x-Fix-bug-where-PHY-interrupts-are-overwritten-by-0.patch diff --git a/kernel.spec b/kernel.spec index ee49e2e4d..56091d2f7 100644 --- a/kernel.spec +++ b/kernel.spec @@ -507,6 +507,8 @@ Patch422: geekbox-v4-device-tree-support.patch # http://www.spinics.net/lists/arm-kernel/msg483898.html Patch423: Initial-AllWinner-A64-and-PINE64-support.patch +Patch424: net-smsc911x-Fix-bug-where-PHY-interrupts-are-overwritten-by-0.patch + # http://www.spinics.net/lists/linux-tegra/msg26029.html Patch426: usb-phy-tegra-Add-38.4MHz-clock-table-entry.patch @@ -2182,6 +2184,9 @@ fi # # %changelog +* Thu Jun 30 2016 Peter Robinson +- Pull upstream fix for smsc911x + * Tue Jun 28 2016 Josh Boyer - CVE-2016-1237 missing check for permissions setting ACL (rhbz 1350845 1350847) diff --git a/net-smsc911x-Fix-bug-where-PHY-interrupts-are-overwritten-by-0.patch b/net-smsc911x-Fix-bug-where-PHY-interrupts-are-overwritten-by-0.patch new file mode 100644 index 000000000..24b5ac2ae --- /dev/null +++ b/net-smsc911x-Fix-bug-where-PHY-interrupts-are-overwritten-by-0.patch @@ -0,0 +1,52 @@ +From patchwork Wed Jun 22 17:40:50 2016 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +Subject: [v3] net: smsc911x: Fix bug where PHY interrupts are overwritten by 0 +From: Jeremy Linton +X-Patchwork-Id: 639331 +X-Patchwork-Delegate: davem@davemloft.net +Message-Id: <1466617250-27317-1-git-send-email-jeremy.linton@arm.com> +To: netdev@vger.kernel.org +Cc: steve.glendinning@shawell.net, andrew@lunn.ch, + sergei.shtylyov@cogentembedded.com, linux-kernel@vger.kernel.org, + stable@vger.kernel.org, pbrobinson@gmail.com, + mlangsdorf@redhat.com, steve.capper@arm.com +Date: Wed, 22 Jun 2016 12:40:50 -0500 + +By default, mdiobus_alloc() sets the PHYs to polling mode, but a +pointer size memcpy means that a couple IRQs end up being overwritten +with a value of 0. This means that PHY_POLL is disabled and results +in unpredictable behavior depending on the PHY's location on the +MDIO bus. Remove that memcpy and the now unused phy_irq member to +force the SMSC911x PHYs into polling mode 100% of the time. + +Fixes: e7f4dc3536a4 ("mdio: Move allocation of interrupts into core") + +Signed-off-by: Jeremy Linton +Reviewed-by: Andrew Lunn +Acked-by: Sergei Shtylyov +--- + drivers/net/ethernet/smsc/smsc911x.c | 2 -- + 1 file changed, 2 deletions(-) + +diff --git a/drivers/net/ethernet/smsc/smsc911x.c b/drivers/net/ethernet/smsc/smsc911x.c +index 8af2556..b5ab5e1 100644 +--- a/drivers/net/ethernet/smsc/smsc911x.c ++++ b/drivers/net/ethernet/smsc/smsc911x.c +@@ -116,7 +116,6 @@ struct smsc911x_data { + + struct phy_device *phy_dev; + struct mii_bus *mii_bus; +- int phy_irq[PHY_MAX_ADDR]; + unsigned int using_extphy; + int last_duplex; + int last_carrier; +@@ -1073,7 +1072,6 @@ static int smsc911x_mii_init(struct platform_device *pdev, + pdata->mii_bus->priv = pdata; + pdata->mii_bus->read = smsc911x_mii_read; + pdata->mii_bus->write = smsc911x_mii_write; +- memcpy(pdata->mii_bus->irq, pdata->phy_irq, sizeof(pdata->mii_bus)); + + pdata->mii_bus->parent = &pdev->dev; + From 813ae65d035c4f21542b7642bfaca88808962bbc Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Fri, 1 Jul 2016 20:48:19 -0400 Subject: [PATCH 106/275] Reenable CONFIG_DW_DMAC_CORE=y to fix sound on some Broadwell machines (rhbz 1351738 1352176) --- config-x86_64-generic | 3 +++ kernel.spec | 3 +++ 2 files changed, 6 insertions(+) diff --git a/config-x86_64-generic b/config-x86_64-generic index b6037709c..abac3ee5b 100644 --- a/config-x86_64-generic +++ b/config-x86_64-generic @@ -230,3 +230,6 @@ CONFIG_INFINIBAND_HFI1=m # CONFIG_HFI1_DEBUG_SDMA_ORDER is not set CONFIG_HFI1_VERBS_31BIT_PSN=y # CONFIG_SDMA_VERBOSITY is not set +# +# Temporary workaround until SND_SOC_INTEL_HASWELL_MACH no longer requires builtin +CONFIG_DW_DMAC=y diff --git a/kernel.spec b/kernel.spec index 56091d2f7..369a4ccb9 100644 --- a/kernel.spec +++ b/kernel.spec @@ -2184,6 +2184,9 @@ fi # # %changelog +* Fri Jul 01 2016 Josh Boyer +- Reenable CONFIG_DW_DMAC_CORE=y to fix sound on some Broadwell machines (rhbz 1351738 1352176) + * Thu Jun 30 2016 Peter Robinson - Pull upstream fix for smsc911x From 9c68304452357014ca01b20b64ded84c735f4c2f Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Thu, 7 Jul 2016 08:09:24 -0400 Subject: [PATCH 107/275] CVE-2016-6156 race condition in chrome chardev driver (rhbz 1353490 1353491) --- kernel.spec | 6 +++ ...cros_ec_dev-double-fetch-bug-in-ioct.patch | 52 +++++++++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 platform-chrome-cros_ec_dev-double-fetch-bug-in-ioct.patch diff --git a/kernel.spec b/kernel.spec index 369a4ccb9..21834c7a0 100644 --- a/kernel.spec +++ b/kernel.spec @@ -659,6 +659,9 @@ Patch826: HID-hiddev-validate-num_values-for-HIDIOCGUSAGES-HID.patch Patch830: posix_acl-Add-set_posix_acl.patch Patch831: nfsd-check-permissions-when-setting-ACLs.patch +#CVE-2016-6156 rhbz 1353490 1353491 +Patch832: platform-chrome-cros_ec_dev-double-fetch-bug-in-ioct.patch + # END OF PATCH DEFINITIONS %endif @@ -2184,6 +2187,9 @@ fi # # %changelog +* Thu Jul 07 2016 Josh Boyer +- CVE-2016-6156 race condition in chrome chardev driver (rhbz 1353490 1353491) + * Fri Jul 01 2016 Josh Boyer - Reenable CONFIG_DW_DMAC_CORE=y to fix sound on some Broadwell machines (rhbz 1351738 1352176) diff --git a/platform-chrome-cros_ec_dev-double-fetch-bug-in-ioct.patch b/platform-chrome-cros_ec_dev-double-fetch-bug-in-ioct.patch new file mode 100644 index 000000000..a685ff697 --- /dev/null +++ b/platform-chrome-cros_ec_dev-double-fetch-bug-in-ioct.patch @@ -0,0 +1,52 @@ +From 096cdc6f52225835ff503f987a0d68ef770bb78e Mon Sep 17 00:00:00 2001 +From: Dan Carpenter +Date: Tue, 21 Jun 2016 16:58:46 +0300 +Subject: [PATCH] platform/chrome: cros_ec_dev - double fetch bug in ioctl + +We verify "u_cmd.outsize" and "u_cmd.insize" but we need to make sure +that those values have not changed between the two copy_from_user() +calls. Otherwise it could lead to a buffer overflow. + +Additionally, cros_ec_cmd_xfer() can set s_cmd->insize to a lower value. +We should use the new smaller value so we don't copy too much data to +the user. + +Reported-by: Pengfei Wang +Fixes: a841178445bb ('mfd: cros_ec: Use a zero-length array for command data') +Signed-off-by: Dan Carpenter +Reviewed-by: Kees Cook +Tested-by: Gwendal Grignou +Cc: # v4.2+ +Signed-off-by: Olof Johansson +--- + drivers/platform/chrome/cros_ec_dev.c | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + +diff --git a/drivers/platform/chrome/cros_ec_dev.c b/drivers/platform/chrome/cros_ec_dev.c +index 6d8ee3b15872..8abd80dbcbed 100644 +--- a/drivers/platform/chrome/cros_ec_dev.c ++++ b/drivers/platform/chrome/cros_ec_dev.c +@@ -151,13 +151,19 @@ static long ec_device_ioctl_xcmd(struct cros_ec_dev *ec, void __user *arg) + goto exit; + } + ++ if (u_cmd.outsize != s_cmd->outsize || ++ u_cmd.insize != s_cmd->insize) { ++ ret = -EINVAL; ++ goto exit; ++ } ++ + s_cmd->command += ec->cmd_offset; + ret = cros_ec_cmd_xfer(ec->ec_dev, s_cmd); + /* Only copy data to userland if data was received. */ + if (ret < 0) + goto exit; + +- if (copy_to_user(arg, s_cmd, sizeof(*s_cmd) + u_cmd.insize)) ++ if (copy_to_user(arg, s_cmd, sizeof(*s_cmd) + s_cmd->insize)) + ret = -EFAULT; + exit: + kfree(s_cmd); +-- +2.5.5 + From d62f5f70a6295a438877d744ebf316efe6d9721b Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Thu, 7 Jul 2016 08:27:15 -0400 Subject: [PATCH 108/275] Fix blank screen on some nvidia cards (rbhz 1351205) --- ...sp-sor-gf119-select-correct-sor-when.patch | 29 +++++++++++++++++++ kernel.spec | 4 +++ 2 files changed, 33 insertions(+) create mode 100644 drm-nouveau-disp-sor-gf119-select-correct-sor-when.patch diff --git a/drm-nouveau-disp-sor-gf119-select-correct-sor-when.patch b/drm-nouveau-disp-sor-gf119-select-correct-sor-when.patch new file mode 100644 index 000000000..996b47918 --- /dev/null +++ b/drm-nouveau-disp-sor-gf119-select-correct-sor-when.patch @@ -0,0 +1,29 @@ +From 217215041b9285af2193a755b56a8f3ed408bfe2 Mon Sep 17 00:00:00 2001 +From: Ben Skeggs +Date: Wed, 6 Jul 2016 06:50:36 +1000 +Subject: [PATCH] drm/nouveau/disp/sor/gf119: select correct sor when poking + training pattern + +Fixes a regression caused by a stupid thinko from "disp/sor/gf119: both +links use the same training register". + +Signed-off-by: Ben Skeggs +Cc: stable@vger.kernel.org +--- + drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgf119.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgf119.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgf119.c +index 22706c0..49bd5da 100644 +--- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgf119.c ++++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgf119.c +@@ -40,7 +40,8 @@ static int + gf119_sor_dp_pattern(struct nvkm_output_dp *outp, int pattern) + { + struct nvkm_device *device = outp->base.disp->engine.subdev.device; +- nvkm_mask(device, 0x61c110, 0x0f0f0f0f, 0x01010101 * pattern); ++ const u32 soff = gf119_sor_soff(outp); ++ nvkm_mask(device, 0x61c110 + soff, 0x0f0f0f0f, 0x01010101 * pattern); + return 0; + } + diff --git a/kernel.spec b/kernel.spec index 21834c7a0..79b617948 100644 --- a/kernel.spec +++ b/kernel.spec @@ -662,6 +662,9 @@ Patch831: nfsd-check-permissions-when-setting-ACLs.patch #CVE-2016-6156 rhbz 1353490 1353491 Patch832: platform-chrome-cros_ec_dev-double-fetch-bug-in-ioct.patch +#rbhz 1351205 +Patch833: drm-nouveau-disp-sor-gf119-select-correct-sor-when.patch + # END OF PATCH DEFINITIONS %endif @@ -2188,6 +2191,7 @@ fi # %changelog * Thu Jul 07 2016 Josh Boyer +- Fix blank screen on some nvidia cards (rbhz 1351205) - CVE-2016-6156 race condition in chrome chardev driver (rhbz 1353490 1353491) * Fri Jul 01 2016 Josh Boyer From b8192692318c2fb17c4ccc89e83e090d90ed895a Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Thu, 7 Jul 2016 09:17:54 -0400 Subject: [PATCH 109/275] Fix oops in qla2xxx driver (rhbz 1346753) --- kernel.spec | 4 + ...-NULL-pointer-deref-in-QLA-interrupt.patch | 98 +++++++++++++++++++ 2 files changed, 102 insertions(+) create mode 100644 qla2xxx-Fix-NULL-pointer-deref-in-QLA-interrupt.patch diff --git a/kernel.spec b/kernel.spec index 79b617948..fdf157908 100644 --- a/kernel.spec +++ b/kernel.spec @@ -665,6 +665,9 @@ Patch832: platform-chrome-cros_ec_dev-double-fetch-bug-in-ioct.patch #rbhz 1351205 Patch833: drm-nouveau-disp-sor-gf119-select-correct-sor-when.patch +#rhbz 1346753 +Patch834: qla2xxx-Fix-NULL-pointer-deref-in-QLA-interrupt.patch + # END OF PATCH DEFINITIONS %endif @@ -2191,6 +2194,7 @@ fi # %changelog * Thu Jul 07 2016 Josh Boyer +- Fix oops in qla2xxx driver (rhbz 1346753) - Fix blank screen on some nvidia cards (rbhz 1351205) - CVE-2016-6156 race condition in chrome chardev driver (rhbz 1353490 1353491) diff --git a/qla2xxx-Fix-NULL-pointer-deref-in-QLA-interrupt.patch b/qla2xxx-Fix-NULL-pointer-deref-in-QLA-interrupt.patch new file mode 100644 index 000000000..4e50a65e2 --- /dev/null +++ b/qla2xxx-Fix-NULL-pointer-deref-in-QLA-interrupt.patch @@ -0,0 +1,98 @@ +From 36d17a40c174c8b77386520ab2a430fea760dcc3 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Bruno=20Pr=C3=83=C2=A9mont?= +Date: Thu, 30 Jun 2016 17:00:32 +0200 +Subject: [PATCH] qla2xxx: Fix NULL pointer deref in QLA interrupt +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +In qla24xx_process_response_queue() rsp->msix->cpuid may trigger NULL +pointer dereference when rsp->msix is NULL: + +[ 5.622457] NULL pointer dereference at 0000000000000050 +[ 5.622457] IP: [] qla24xx_process_response_queue+0x44/0x4b0 +[ 5.622457] PGD 0 +[ 5.622457] Oops: 0000 [#1] SMP +[ 5.622457] Modules linked in: +[ 5.622457] CPU: 2 PID: 0 Comm: swapper/2 Not tainted 4.6.3-x86_64 #1 +[ 5.622457] Hardware name: HP ProLiant DL360 G5, BIOS P58 05/02/2011 +[ 5.622457] task: ffff8801a88f3740 ti: ffff8801a8954000 task.ti: ffff8801a8954000 +[ 5.622457] RIP: 0010:[] [] qla24xx_process_response_queue+0x44/0x4b0 +[ 5.622457] RSP: 0000:ffff8801afb03de8 EFLAGS: 00010002 +[ 5.622457] RAX: 0000000000000000 RBX: 0000000000000032 RCX: 00000000ffffffff +[ 5.622457] RDX: 0000000000000002 RSI: ffff8801a79bf8c8 RDI: ffff8800c8f7e7c0 +[ 5.622457] RBP: ffff8801afb03e68 R08: 0000000000000000 R09: 0000000000000000 +[ 5.622457] R10: 00000000ffff8c47 R11: 0000000000000002 R12: ffff8801a79bf8c8 +[ 5.622457] R13: ffff8800c8f7e7c0 R14: ffff8800c8f60000 R15: 0000000000018013 +[ 5.622457] FS: 0000000000000000(0000) GS:ffff8801afb00000(0000) knlGS:0000000000000000 +[ 5.622457] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 +[ 5.622457] CR2: 0000000000000050 CR3: 0000000001e07000 CR4: 00000000000006e0 +[ 5.622457] Stack: +[ 5.622457] ffff8801afb03e30 ffffffff810c0f2d 0000000000000086 0000000000000002 +[ 5.622457] ffff8801afb03e28 ffffffff816570e1 ffff8800c8994628 0000000000000002 +[ 5.622457] ffff8801afb03e60 ffffffff816772d4 b47c472ad6955e68 0000000000000032 +[ 5.622457] Call Trace: +[ 5.622457] +[ 5.622457] [] ? __wake_up_common+0x4d/0x80 +[ 5.622457] [] ? usb_hcd_resume_root_hub+0x51/0x60 +[ 5.622457] [] ? uhci_hub_status_data+0x64/0x240 +[ 5.622457] [] qla24xx_intr_handler+0xf0/0x2e0 +[ 5.622457] [] ? get_next_timer_interrupt+0xce/0x200 +[ 5.622457] [] handle_irq_event_percpu+0x64/0x100 +[ 5.622457] [] handle_irq_event+0x27/0x50 +[ 5.622457] [] handle_edge_irq+0x65/0x140 +[ 5.622457] [] handle_irq+0x18/0x30 +[ 5.622457] [] do_IRQ+0x46/0xd0 +[ 5.622457] [] common_interrupt+0x7f/0x7f +[ 5.622457] +[ 5.622457] [] ? mwait_idle+0x68/0x80 +[ 5.622457] [] arch_cpu_idle+0xa/0x10 +[ 5.622457] [] default_idle_call+0x27/0x30 +[ 5.622457] [] cpu_startup_entry+0x19b/0x230 +[ 5.622457] [] start_secondary+0x136/0x140 +[ 5.622457] Code: 00 00 65 48 8b 04 25 28 00 00 00 48 89 45 d0 31 c0 48 8b 47 58 a8 02 0f 84 c5 00 00 00 48 8b 46 50 49 89 f4 65 8b 15 34 bb aa 7e <39> 50 50 74 11 89 50 50 48 8b 46 50 8b 40 50 41 89 86 60 8b 00 +[ 5.622457] RIP [] qla24xx_process_response_queue+0x44/0x4b0 +[ 5.622457] RSP +[ 5.622457] CR2: 0000000000000050 +[ 5.622457] ---[ end trace fa2b19c25106d42b ]--- +[ 5.622457] Kernel panic - not syncing: Fatal exception in interrupt + +The affected code was introduced by commit cdb898c52d1dfad4b4800b83a58b3fe5d352edde +(qla2xxx: Add irq affinity notification). + +Only dereference rsp->msix when it has been set so the machine can boot +fine. Possibly rsp->msix is unset because: +[ 3.479679] qla2xxx [0000:00:00.0]-0005: : QLogic Fibre Channel HBA Driver: 8.07.00.33-k. +[ 3.481839] qla2xxx [0000:13:00.0]-001d: : Found an ISP2432 irq 17 iobase 0xffffc90000038000. +[ 3.484081] qla2xxx [0000:13:00.0]-0035:0: MSI-X; Unsupported ISP2432 (0x2, 0x3). +[ 3.485804] qla2xxx [0000:13:00.0]-0037:0: Falling back-to MSI mode -258. +[ 3.890145] scsi host0: qla2xxx +[ 3.891956] qla2xxx [0000:13:00.0]-00fb:0: QLogic QLE2460 - PCI-Express Single Channel 4Gb Fibre Channel HBA. +[ 3.894207] qla2xxx [0000:13:00.0]-00fc:0: ISP2432: PCIe (2.5GT/s x4) @ 0000:13:00.0 hdma+ host#=0 fw=7.03.00 (9496). +[ 5.714774] qla2xxx [0000:13:00.0]-500a:0: LOOP UP detected (4 Gbps). + +Signed-off-by: Bruno Prémont +Acked-by: Quinn Tran +CC: # 4.5+ +Fixes: cdb898c52d1dfad4b4800b83a58b3fe5d352edde +Signed-off-by: James Bottomley +--- + drivers/scsi/qla2xxx/qla_isr.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c +index 5649c200d37c..a92a62dea793 100644 +--- a/drivers/scsi/qla2xxx/qla_isr.c ++++ b/drivers/scsi/qla2xxx/qla_isr.c +@@ -2548,7 +2548,7 @@ void qla24xx_process_response_queue(struct scsi_qla_host *vha, + if (!vha->flags.online) + return; + +- if (rsp->msix->cpuid != smp_processor_id()) { ++ if (rsp->msix && rsp->msix->cpuid != smp_processor_id()) { + /* if kernel does not notify qla of IRQ's CPU change, + * then set it here. + */ +-- +2.5.5 + From 1a08bebf8b72a50eb9fc6b6485c2231e4118d10b Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Mon, 11 Jul 2016 13:12:04 -0400 Subject: [PATCH 110/275] Linux v4.6.4 --- kernel.spec | 7 +++++-- sources | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/kernel.spec b/kernel.spec index fdf157908..4aa6fc30f 100644 --- a/kernel.spec +++ b/kernel.spec @@ -42,7 +42,7 @@ Summary: The Linux kernel # For non-released -rc kernels, this will be appended after the rcX and # gitX tags, so a 3 here would become part of release "0.rcX.gitX.3" # -%global baserelease 301 +%global baserelease 300 %global fedora_build %{baserelease} # base_sublevel is the kernel version we're starting with and patching @@ -54,7 +54,7 @@ Summary: The Linux kernel %if 0%{?released_kernel} # Do we have a -stable update to apply? -%define stable_update 3 +%define stable_update 4 # Set rpm version accordingly %if 0%{?stable_update} %define stablerev %{stable_update} @@ -2193,6 +2193,9 @@ fi # # %changelog +* Mon Jul 11 2016 Josh Boyer - 4.6.4-300 +- Linux v4.6.4 + * Thu Jul 07 2016 Josh Boyer - Fix oops in qla2xxx driver (rhbz 1346753) - Fix blank screen on some nvidia cards (rbhz 1351205) diff --git a/sources b/sources index 8debc8e12..56a5aeb91 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ d2927020e24a76da4ab482a8bc3e9ef3 linux-4.6.tar.xz fd23b14b9d474c3dfacb6e8ee82d3a51 perf-man-4.6.tar.gz -0d59cb81eb7c0daf0f5019deda65af90 patch-4.6.3.xz +c8ff415734155965ae7a2a85ef9c9e03 patch-4.6.4.xz From 1e59d1ef83392b861eb0b047a542d6c16a196546 Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Tue, 12 Jul 2016 07:01:11 -0400 Subject: [PATCH 111/275] CVE-2016-5389 CVE-2016-5969 tcp challenge ack info leak (rhbz 1354708 1355615) --- kernel.spec | 6 ++ ...make-challenge-acks-less-predictable.patch | 83 +++++++++++++++++++ 2 files changed, 89 insertions(+) create mode 100644 tcp-make-challenge-acks-less-predictable.patch diff --git a/kernel.spec b/kernel.spec index 4aa6fc30f..09154c03e 100644 --- a/kernel.spec +++ b/kernel.spec @@ -668,6 +668,9 @@ Patch833: drm-nouveau-disp-sor-gf119-select-correct-sor-when.patch #rhbz 1346753 Patch834: qla2xxx-Fix-NULL-pointer-deref-in-QLA-interrupt.patch +#CVE-2016-5389 CVE-2016-5969 rhbz 1354708 1355615 +Patch835: tcp-make-challenge-acks-less-predictable.patch + # END OF PATCH DEFINITIONS %endif @@ -2193,6 +2196,9 @@ fi # # %changelog +* Tue Jul 12 2016 Josh Boyer +- CVE-2016-5389 CVE-2016-5969 tcp challenge ack info leak (rhbz 1354708 1355615) + * Mon Jul 11 2016 Josh Boyer - 4.6.4-300 - Linux v4.6.4 diff --git a/tcp-make-challenge-acks-less-predictable.patch b/tcp-make-challenge-acks-less-predictable.patch new file mode 100644 index 000000000..992e4f522 --- /dev/null +++ b/tcp-make-challenge-acks-less-predictable.patch @@ -0,0 +1,83 @@ +From 771209218b9ec051a573b9fddc149682a534190e Mon Sep 17 00:00:00 2001 +From: Eric Dumazet +Date: Sun, 10 Jul 2016 10:04:02 +0200 +Subject: [PATCH] tcp: make challenge acks less predictable + +Yue Cao claims that current host rate limiting of challenge ACKS +(RFC 5961) could leak enough information to allow a patient attacker +to hijack TCP sessions. He will soon provide details in an academic +paper. + +This patch increases the default limit from 100 to 1000, and adds +some randomization so that the attacker can no longer hijack +sessions without spending a considerable amount of probes. + +Based on initial analysis and patch from Linus. + +Note that we also have per socket rate limiting, so it is tempting +to remove the host limit in the future. + +v2: randomize the count of challenge acks per second, not the period. + +Fixes: 282f23c6ee34 ("tcp: implement RFC 5961 3.2") +Reported-by: Yue Cao +Signed-off-by: Eric Dumazet +Suggested-by: Linus Torvalds +Cc: Yuchung Cheng +Cc: Neal Cardwell +Acked-by: Neal Cardwell +Acked-by: Yuchung Cheng +Signed-off-by: David S. Miller +--- + net/ipv4/tcp_input.c | 17 +++++++++++------ + 1 file changed, 11 insertions(+), 6 deletions(-) + +diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c +index c124c3c12f7c..8c011359646b 100644 +--- a/net/ipv4/tcp_input.c ++++ b/net/ipv4/tcp_input.c +@@ -87,7 +87,7 @@ int sysctl_tcp_adv_win_scale __read_mostly = 1; + EXPORT_SYMBOL(sysctl_tcp_adv_win_scale); + + /* rfc5961 challenge ack rate limiting */ +-int sysctl_tcp_challenge_ack_limit = 100; ++int sysctl_tcp_challenge_ack_limit = 1000; + + int sysctl_tcp_stdurg __read_mostly; + int sysctl_tcp_rfc1337 __read_mostly; +@@ -3460,7 +3460,7 @@ static void tcp_send_challenge_ack(struct sock *sk, const struct sk_buff *skb) + static u32 challenge_timestamp; + static unsigned int challenge_count; + struct tcp_sock *tp = tcp_sk(sk); +- u32 now; ++ u32 count, now; + + /* First check our per-socket dupack rate limit. */ + if (tcp_oow_rate_limited(sock_net(sk), skb, +@@ -3468,14 +3468,19 @@ static void tcp_send_challenge_ack(struct sock *sk, const struct sk_buff *skb) + &tp->last_oow_ack_time)) + return; + +- /* Then check the check host-wide RFC 5961 rate limit. */ ++ /* Then check host-wide RFC 5961 rate limit. */ + now = jiffies / HZ; + if (now != challenge_timestamp) { ++ u32 half = (sysctl_tcp_challenge_ack_limit + 1) >> 1; ++ + challenge_timestamp = now; +- challenge_count = 0; ++ WRITE_ONCE(challenge_count, half + ++ prandom_u32_max(sysctl_tcp_challenge_ack_limit)); + } +- if (++challenge_count <= sysctl_tcp_challenge_ack_limit) { +- NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_TCPCHALLENGEACK); ++ count = READ_ONCE(challenge_count); ++ if (count > 0) { ++ WRITE_ONCE(challenge_count, count - 1); ++ NET_INC_STATS(sock_net(sk), LINUX_MIB_TCPCHALLENGEACK); + tcp_send_ack(sk); + } + } +-- +2.5.5 + From 2d70af5aca0edec86f30154b700bd4d2b92c46fd Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Tue, 12 Jul 2016 07:16:28 -0400 Subject: [PATCH 112/275] Bump for build --- kernel.spec | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kernel.spec b/kernel.spec index 09154c03e..78bad43fd 100644 --- a/kernel.spec +++ b/kernel.spec @@ -42,7 +42,7 @@ Summary: The Linux kernel # For non-released -rc kernels, this will be appended after the rcX and # gitX tags, so a 3 here would become part of release "0.rcX.gitX.3" # -%global baserelease 300 +%global baserelease 301 %global fedora_build %{baserelease} # base_sublevel is the kernel version we're starting with and patching @@ -2196,7 +2196,7 @@ fi # # %changelog -* Tue Jul 12 2016 Josh Boyer +* Tue Jul 12 2016 Josh Boyer - 4.6.4-301 - CVE-2016-5389 CVE-2016-5969 tcp challenge ack info leak (rhbz 1354708 1355615) * Mon Jul 11 2016 Josh Boyer - 4.6.4-300 From 16c334e59594e2c09e3d81497d8304c77d20c520 Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Thu, 14 Jul 2016 09:46:51 -0400 Subject: [PATCH 113/275] Add 3 patches from Hans to fix various GPU issues --- ...remove-controller-dependency-on-i915.patch | 44 ++++ ...-Disable-RPM-helpers-while-reprobing.patch | 70 ++++++ ...port-for-the-SAGV-fix-underrun-hangs.patch | 230 ++++++++++++++++++ kernel.spec | 8 + 4 files changed, 352 insertions(+) create mode 100644 Revert-ALSA-hda-remove-controller-dependency-on-i915.patch create mode 100644 drm-amdgpu-Disable-RPM-helpers-while-reprobing.patch create mode 100644 drm-i915-skl-Add-support-for-the-SAGV-fix-underrun-hangs.patch diff --git a/Revert-ALSA-hda-remove-controller-dependency-on-i915.patch b/Revert-ALSA-hda-remove-controller-dependency-on-i915.patch new file mode 100644 index 000000000..339f84c40 --- /dev/null +++ b/Revert-ALSA-hda-remove-controller-dependency-on-i915.patch @@ -0,0 +1,44 @@ +From c0afc8df2c54301034e0ad8a537c7b817b72e06a Mon Sep 17 00:00:00 2001 +From: Hans de Goede +Date: Tue, 12 Jul 2016 22:40:01 +0200 +Subject: [PATCH] Revert "ALSA: hda - remove controller dependency on i915 + power well for SKL" + +This reverts commit 03b135cebc47d75ea2dc346770374ab741966955. +--- + sound/pci/hda/hda_intel.c | 4 +++- + sound/pci/hda/patch_hdmi.c | 3 +-- + 2 files changed, 4 insertions(+), 3 deletions(-) + +diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c +index 94089fc71884..139ab83626fd 100644 +--- a/sound/pci/hda/hda_intel.c ++++ b/sound/pci/hda/hda_intel.c +@@ -361,7 +361,9 @@ enum { + #define CONTROLLER_IN_GPU(pci) (((pci)->device == 0x0a0c) || \ + ((pci)->device == 0x0c0c) || \ + ((pci)->device == 0x0d0c) || \ +- ((pci)->device == 0x160c)) ++ ((pci)->device == 0x160c) || \ ++ ((pci)->device == 0xa170) || \ ++ ((pci)->device == 0x9d70)) + + #define IS_SKL(pci) ((pci)->vendor == 0x8086 && (pci)->device == 0xa170) + #define IS_SKL_LP(pci) ((pci)->vendor == 0x8086 && (pci)->device == 0x9d70) +diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c +index a010d704e0e2..6ee685a49a08 100644 +--- a/sound/pci/hda/patch_hdmi.c ++++ b/sound/pci/hda/patch_hdmi.c +@@ -2285,8 +2285,7 @@ static int patch_generic_hdmi(struct hda_codec *codec) + * can cover the codec power request, and so need not set this flag. + * For previous platforms, there is no such power well feature. + */ +- if (is_valleyview_plus(codec) || is_skylake(codec) || +- is_broxton(codec)) ++ if (is_valleyview_plus(codec) || is_broxton(codec)) + codec->core.link_power_control = 1; + + if (hdmi_parse_codec(codec) < 0) { +-- +2.7.4 + diff --git a/drm-amdgpu-Disable-RPM-helpers-while-reprobing.patch b/drm-amdgpu-Disable-RPM-helpers-while-reprobing.patch new file mode 100644 index 000000000..562d20eb5 --- /dev/null +++ b/drm-amdgpu-Disable-RPM-helpers-while-reprobing.patch @@ -0,0 +1,70 @@ +From patchwork Fri Jul 8 15:37:35 2016 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +Subject: drm/amdgpu: Disable RPM helpers while reprobing connectors on resume +From: cpaul@redhat.com +X-Patchwork-Id: 97837 +Message-Id: <1467992256-23832-1-git-send-email-cpaul@redhat.com> +To: amd-gfx@lists.freedesktop.org +Cc: Tom St Denis , Jammy Zhou , + open list , stable@vger.kernel.org, + "open list:RADEON and AMDGPU DRM DRIVERS" + , + Alex Deucher , Lyude , + Flora Cui , + =?UTF-8?q?Christian=20K=C3=B6nig?= , + Monk Liu +Date: Fri, 8 Jul 2016 11:37:35 -0400 + +Just about all of amdgpu's connector probing functions try to acquire +runtime PM refs. If we try to do this in the context of +amdgpu_resume_kms by calling drm_helper_hpd_irq_event(), we end up +deadlocking the system. + +Since we're guaranteed to be holding the spinlock for RPM in +amdgpu_resume_kms, and we already know the GPU is in working order, we +need to prevent the RPM helpers from trying to run during the initial +connector reprobe on resume. + +There's a couple of solutions I've explored for fixing this, but this +one by far seems to be the simplest and most reliable (plus I'm pretty +sure that's what disable_depth is there for anyway). + +Reproduction recipe: + - Get any laptop dual GPUs using PRIME + - Make sure runtime PM is enabled for amdgpu + - Boot the machine + - If the machine managed to boot without hanging, switch out of X to + another VT. This should definitely cause X to hang infinitely. + +Cc: stable@vger.kernel.org +Signed-off-by: Lyude +--- + drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 12 ++++++++++++ + 1 file changed, 12 insertions(+) + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +index 6e92008..46c1fee 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +@@ -1841,7 +1841,19 @@ int amdgpu_resume_kms(struct drm_device *dev, bool resume, bool fbcon) + } + + drm_kms_helper_poll_enable(dev); ++ ++ /* ++ * Most of the connector probing functions try to acquire runtime pm ++ * refs to ensure that the GPU is powered on when connector polling is ++ * performed. Since we're calling this from a runtime PM callback, ++ * trying to acquire rpm refs will cause us to deadlock. ++ * ++ * Since we're guaranteed to be holding the rpm lock, it's safe to ++ * temporarily disable the rpm helpers so this doesn't deadlock us. ++ */ ++ dev->dev->power.disable_depth++; + drm_helper_hpd_irq_event(dev); ++ dev->dev->power.disable_depth--; + + if (fbcon) { + amdgpu_fbdev_set_suspend(adev, 0); diff --git a/drm-i915-skl-Add-support-for-the-SAGV-fix-underrun-hangs.patch b/drm-i915-skl-Add-support-for-the-SAGV-fix-underrun-hangs.patch new file mode 100644 index 000000000..24b19522b --- /dev/null +++ b/drm-i915-skl-Add-support-for-the-SAGV-fix-underrun-hangs.patch @@ -0,0 +1,230 @@ +From bd363ae4ea5d124d5b284dd3aa7d2766ff2c19d7 Mon Sep 17 00:00:00 2001 +From: "cpaul@redhat.com" +Date: Tue, 12 Jul 2016 13:36:03 -0400 +Subject: [PATCH] drm/i915/skl: Add support for the SAGV, fix underrun hangs +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Since the watermark calculations for Skylake are still broken, we're apt +to hitting underruns very easily under multi-monitor configurations. +While it would be lovely if this was fixed, it's not. Another problem +that's been coming from this however, is the mysterious issue of +underruns causing full system hangs. An easy way to reproduce this with +a skylake system: + +- Get a laptop with a skylake GPU, and hook up two external monitors to + it +- Move the cursor from the built-in LCD to one of the external displays + as quickly as you can +- You'll get a few pipe underruns, and eventually the entire system will + just freeze. + +After doing a lot of investigation and reading through the bspec, I +found the existence of the SAGV, which is responsible for adjusting the +system agent voltage and clock frequencies depending on how much power +we need. According to the bspec: + +"The display engine access to system memory is blocked during the + adjustment time. SAGV defaults to enabled. Software must use the + GT-driver pcode mailbox to disable SAGV when the display engine is not + able to tolerate the blocking time." + +The rest of the bspec goes on to explain that software can simply leave +the SAGV enabled, and disable it when we use interlaced pipes/have more +then one pipe active. + +Sure enough, with this patchset the system hangs resulting from pipe +underruns on Skylake have completely vanished on my T460s. Additionally, +the bspec mentions turning off the SAGV with more then one pipe enabled +as a workaround for display underruns. While this patch doesn't entirely +fix that, it looks like it does improve the situation a little bit so +it's likely this is going to be required to make watermarks on Skylake +fully functional. + +Changes since v2: + - Really apply minor style nitpicks to patch this time +Changes since v1: + - Added comments about this probably being one of the requirements to + fixing Skylake's watermark issues + - Minor style nitpicks from Matt Roper + - Disable these functions on Broxton, since it doesn't have an SAGV + +Cc: Matt Roper +Cc: Daniel Vetter +Cc: Ville Syrjälä +Signed-off-by: Lyude +Reviewed-by: Matt Roper +--- + drivers/gpu/drm/i915/i915_drv.h | 2 + + drivers/gpu/drm/i915/i915_reg.h | 5 ++ + drivers/gpu/drm/i915/intel_pm.c | 110 ++++++++++++++++++++++++++++++++++++++++ + 3 files changed, 117 insertions(+) + +diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h +index 59092cbfeda1..d94e5598511f 100644 +--- a/drivers/gpu/drm/i915/i915_drv.h ++++ b/drivers/gpu/drm/i915/i915_drv.h +@@ -1954,6 +1954,8 @@ struct drm_i915_private { + struct i915_suspend_saved_registers regfile; + struct vlv_s0ix_state vlv_s0ix_state; + ++ bool skl_sagv_enabled; ++ + struct { + /* + * Raw watermark latency values: +diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h +index 363bd79dea2e..3d13d0e551be 100644 +--- a/drivers/gpu/drm/i915/i915_reg.h ++++ b/drivers/gpu/drm/i915/i915_reg.h +@@ -7029,6 +7029,11 @@ enum skl_disp_power_wells { + #define HSW_PCODE_DE_WRITE_FREQ_REQ 0x17 + #define DISPLAY_IPS_CONTROL 0x19 + #define HSW_PCODE_DYNAMIC_DUTY_CYCLE_CONTROL 0x1A ++#define GEN9_PCODE_SAGV_CONTROL 0x21 ++#define GEN9_SAGV_DISABLE 0x0 ++#define GEN9_SAGV_LOW_FREQ 0x1 ++#define GEN9_SAGV_HIGH_FREQ 0x2 ++#define GEN9_SAGV_DYNAMIC_FREQ 0x3 + #define GEN6_PCODE_DATA _MMIO(0x138128) + #define GEN6_PCODE_FREQ_IA_RATIO_SHIFT 8 + #define GEN6_PCODE_FREQ_RING_RATIO_SHIFT 16 +diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c +index 70dcd2e23cca..38e0b448f461 100644 +--- a/drivers/gpu/drm/i915/intel_pm.c ++++ b/drivers/gpu/drm/i915/intel_pm.c +@@ -2786,6 +2786,109 @@ skl_wm_plane_id(const struct intel_plane *plane) + } + + static void ++skl_sagv_get_hw_state(struct drm_i915_private *dev_priv) ++{ ++ u32 temp; ++ int ret; ++ ++ if (IS_BROXTON(dev_priv)) ++ return; ++ ++ mutex_lock(&dev_priv->rps.hw_lock); ++ ret = sandybridge_pcode_read(dev_priv, GEN9_PCODE_SAGV_CONTROL, &temp); ++ mutex_unlock(&dev_priv->rps.hw_lock); ++ ++ if (!ret) { ++ dev_priv->skl_sagv_enabled = !!(temp & GEN9_SAGV_DYNAMIC_FREQ); ++ } else { ++ /* ++ * If for some reason we can't access the SAGV state, follow ++ * the bspec and assume it's enabled ++ */ ++ DRM_ERROR("Failed to get SAGV state, assuming enabled\n"); ++ dev_priv->skl_sagv_enabled = true; ++ } ++} ++ ++/* ++ * SAGV dynamically adjusts the system agent voltage and clock frequencies ++ * depending on power and performance requirements. The display engine access ++ * to system memory is blocked during the adjustment time. Having this enabled ++ * in multi-pipe configurations can cause issues (such as underruns causing ++ * full system hangs), and the bspec also suggests that software disable it ++ * when more then one pipe is enabled. ++ */ ++static int ++skl_enable_sagv(struct drm_i915_private *dev_priv) ++{ ++ int ret; ++ ++ if (IS_BROXTON(dev_priv)) ++ return 0; ++ if (dev_priv->skl_sagv_enabled) ++ return 0; ++ ++ mutex_lock(&dev_priv->rps.hw_lock); ++ DRM_DEBUG_KMS("Enabling the SAGV\n"); ++ ++ ret = sandybridge_pcode_write(dev_priv, GEN9_PCODE_SAGV_CONTROL, ++ GEN9_SAGV_DYNAMIC_FREQ); ++ if (!ret) ++ dev_priv->skl_sagv_enabled = true; ++ else ++ DRM_ERROR("Failed to enable the SAGV\n"); ++ ++ /* We don't need to wait for SAGV when enabling */ ++ mutex_unlock(&dev_priv->rps.hw_lock); ++ return ret; ++} ++ ++static int ++skl_disable_sagv(struct drm_i915_private *dev_priv) ++{ ++ int ret = 0; ++ unsigned long timeout; ++ u32 temp; ++ ++ if (IS_BROXTON(dev_priv)) ++ return 0; ++ if (!dev_priv->skl_sagv_enabled) ++ return 0; ++ ++ mutex_lock(&dev_priv->rps.hw_lock); ++ DRM_DEBUG_KMS("Disabling the SAGV\n"); ++ ++ /* bspec says to keep retrying for at least 1 ms */ ++ timeout = jiffies + msecs_to_jiffies(1); ++ do { ++ ret = sandybridge_pcode_write(dev_priv, GEN9_PCODE_SAGV_CONTROL, ++ GEN9_SAGV_DISABLE); ++ if (ret) { ++ DRM_ERROR("Failed to disable the SAGV\n"); ++ goto out; ++ } ++ ++ ret = sandybridge_pcode_read(dev_priv, GEN9_PCODE_SAGV_CONTROL, ++ &temp); ++ if (ret) { ++ DRM_ERROR("Failed to check the status of the SAGV\n"); ++ goto out; ++ } ++ } while (!(temp & 0x1) && jiffies < timeout); ++ ++ if (temp & 0x1) { ++ dev_priv->skl_sagv_enabled = false; ++ } else { ++ ret = -1; ++ DRM_ERROR("Request to disable SAGV timed out\n"); ++ } ++ ++out: ++ mutex_unlock(&dev_priv->rps.hw_lock); ++ return ret; ++} ++ ++static void + skl_ddb_get_pipe_allocation_limits(struct drm_device *dev, + const struct intel_crtc_state *cstate, + struct skl_ddb_entry *alloc, /* out */ +@@ -3464,6 +3567,11 @@ static void skl_write_wm_values(struct drm_i915_private *dev_priv, + struct drm_device *dev = dev_priv->dev; + struct intel_crtc *crtc; + ++ if (dev_priv->active_crtcs == 1) ++ skl_enable_sagv(dev_priv); ++ else ++ skl_disable_sagv(dev_priv); ++ + for_each_intel_crtc(dev, crtc) { + int i, level, max_level = ilk_wm_max_level(dev); + enum pipe pipe = crtc->pipe; +@@ -4008,6 +4116,8 @@ void skl_wm_get_hw_state(struct drm_device *dev) + skl_plane_relative_data_rate(cstate, pstate, 1); + } + } ++ ++ skl_sagv_get_hw_state(dev_priv); + } + + static void ilk_pipe_wm_get_hw_state(struct drm_crtc *crtc) +-- +2.7.4 + diff --git a/kernel.spec b/kernel.spec index 78bad43fd..25b1196c5 100644 --- a/kernel.spec +++ b/kernel.spec @@ -671,6 +671,11 @@ Patch834: qla2xxx-Fix-NULL-pointer-deref-in-QLA-interrupt.patch #CVE-2016-5389 CVE-2016-5969 rhbz 1354708 1355615 Patch835: tcp-make-challenge-acks-less-predictable.patch +# https://lists.fedoraproject.org/archives/list/kernel@lists.fedoraproject.org/message/A4YCP7OGMX6JLFT5V44H57GOMAQLC3M4/ +Patch836: drm-amdgpu-Disable-RPM-helpers-while-reprobing.patch +Patch837: drm-i915-skl-Add-support-for-the-SAGV-fix-underrun-hangs.patch +Patch838: Revert-ALSA-hda-remove-controller-dependency-on-i915.patch + # END OF PATCH DEFINITIONS %endif @@ -2196,6 +2201,9 @@ fi # # %changelog +* Thu Jul 14 2016 Josh Boyer +- Fix various i915 uncore oopses (rhbz 1340218 1325020 1342722 1347681) + * Tue Jul 12 2016 Josh Boyer - 4.6.4-301 - CVE-2016-5389 CVE-2016-5969 tcp challenge ack info leak (rhbz 1354708 1355615) From e9ad699b524e6ab5eb6a3a465f7a45ce4933e930 Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Mon, 25 Jul 2016 09:05:30 -0400 Subject: [PATCH 114/275] Add second patch needed to fix CVE-2016-5696 --- kernel.spec | 1 + ...ocket-rate-limiting-of-all-challenge.patch | 102 ++++++++++++++++++ 2 files changed, 103 insertions(+) create mode 100644 tcp-enable-per-socket-rate-limiting-of-all-challenge.patch diff --git a/kernel.spec b/kernel.spec index 25b1196c5..012f6a133 100644 --- a/kernel.spec +++ b/kernel.spec @@ -670,6 +670,7 @@ Patch834: qla2xxx-Fix-NULL-pointer-deref-in-QLA-interrupt.patch #CVE-2016-5389 CVE-2016-5969 rhbz 1354708 1355615 Patch835: tcp-make-challenge-acks-less-predictable.patch +Patch839: tcp-enable-per-socket-rate-limiting-of-all-challenge.patch # https://lists.fedoraproject.org/archives/list/kernel@lists.fedoraproject.org/message/A4YCP7OGMX6JLFT5V44H57GOMAQLC3M4/ Patch836: drm-amdgpu-Disable-RPM-helpers-while-reprobing.patch diff --git a/tcp-enable-per-socket-rate-limiting-of-all-challenge.patch b/tcp-enable-per-socket-rate-limiting-of-all-challenge.patch new file mode 100644 index 000000000..0a5eab8aa --- /dev/null +++ b/tcp-enable-per-socket-rate-limiting-of-all-challenge.patch @@ -0,0 +1,102 @@ +From 8272c58d085e5611a7f839fa32e148ae62446375 Mon Sep 17 00:00:00 2001 +From: Jason Baron +Date: Thu, 14 Jul 2016 11:38:40 -0400 +Subject: [PATCH] tcp: enable per-socket rate limiting of all 'challenge acks' + +The per-socket rate limit for 'challenge acks' was introduced in the +context of limiting ack loops: + +commit f2b2c582e824 ("tcp: mitigate ACK loops for connections as tcp_sock") + +And I think it can be extended to rate limit all 'challenge acks' on a +per-socket basis. + +Since we have the global tcp_challenge_ack_limit, this patch allows for +tcp_challenge_ack_limit to be set to a large value and effectively rely on +the per-socket limit, or set tcp_challenge_ack_limit to a lower value and +still prevents a single connections from consuming the entire challenge ack +quota. + +It further moves in the direction of eliminating the global limit at some +point, as Eric Dumazet has suggested. This a follow-up to: +Subject: tcp: make challenge acks less predictable + +Cc: Eric Dumazet +Cc: David S. Miller +Cc: Neal Cardwell +Cc: Yuchung Cheng +Cc: Yue Cao +Signed-off-by: Jason Baron +Signed-off-by: David S. Miller +--- + net/ipv4/tcp_input.c | 39 ++++++++++++++++++++++----------------- + 1 file changed, 22 insertions(+), 17 deletions(-) + +diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c +index 8c011359646b..796315104ad7 100644 +--- a/net/ipv4/tcp_input.c ++++ b/net/ipv4/tcp_input.c +@@ -3423,6 +3423,23 @@ static int tcp_ack_update_window(struct sock *sk, const struct sk_buff *skb, u32 + return flag; + } + ++static bool __tcp_oow_rate_limited(struct net *net, int mib_idx, ++ u32 *last_oow_ack_time) ++{ ++ if (*last_oow_ack_time) { ++ s32 elapsed = (s32)(tcp_time_stamp - *last_oow_ack_time); ++ ++ if (0 <= elapsed && elapsed < sysctl_tcp_invalid_ratelimit) { ++ NET_INC_STATS(net, mib_idx); ++ return true; /* rate-limited: don't send yet! */ ++ } ++ } ++ ++ *last_oow_ack_time = tcp_time_stamp; ++ ++ return false; /* not rate-limited: go ahead, send dupack now! */ ++} ++ + /* Return true if we're currently rate-limiting out-of-window ACKs and + * thus shouldn't send a dupack right now. We rate-limit dupacks in + * response to out-of-window SYNs or ACKs to mitigate ACK loops or DoS +@@ -3436,21 +3453,9 @@ bool tcp_oow_rate_limited(struct net *net, const struct sk_buff *skb, + /* Data packets without SYNs are not likely part of an ACK loop. */ + if ((TCP_SKB_CB(skb)->seq != TCP_SKB_CB(skb)->end_seq) && + !tcp_hdr(skb)->syn) +- goto not_rate_limited; +- +- if (*last_oow_ack_time) { +- s32 elapsed = (s32)(tcp_time_stamp - *last_oow_ack_time); +- +- if (0 <= elapsed && elapsed < sysctl_tcp_invalid_ratelimit) { +- NET_INC_STATS_BH(net, mib_idx); +- return true; /* rate-limited: don't send yet! */ +- } +- } +- +- *last_oow_ack_time = tcp_time_stamp; ++ return false; + +-not_rate_limited: +- return false; /* not rate-limited: go ahead, send dupack now! */ ++ return __tcp_oow_rate_limited(net, mib_idx, last_oow_ack_time); + } + + /* RFC 5961 7 [ACK Throttling] */ +@@ -3463,9 +3468,9 @@ static void tcp_send_challenge_ack(struct sock *sk, const struct sk_buff *skb) + u32 count, now; + + /* First check our per-socket dupack rate limit. */ +- if (tcp_oow_rate_limited(sock_net(sk), skb, +- LINUX_MIB_TCPACKSKIPPEDCHALLENGE, +- &tp->last_oow_ack_time)) ++ if (__tcp_oow_rate_limited(sock_net(sk), ++ LINUX_MIB_TCPACKSKIPPEDCHALLENGE, ++ &tp->last_oow_ack_time)) + return; + + /* Then check host-wide RFC 5961 rate limit. */ +-- +2.7.4 + From 03de8d220ccfabb5af8d30e10a060e7820b57a7e Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Mon, 25 Jul 2016 12:36:15 -0500 Subject: [PATCH 115/275] CVE-2016-5400 Fix memory leak in airspy driver --- ...x-error-logic-during-device-register.patch | 40 +++++++++++++++++++ kernel.spec | 6 +++ 2 files changed, 46 insertions(+) create mode 100644 airspy-fix-error-logic-during-device-register.patch diff --git a/airspy-fix-error-logic-during-device-register.patch b/airspy-fix-error-logic-during-device-register.patch new file mode 100644 index 000000000..575090d9d --- /dev/null +++ b/airspy-fix-error-logic-during-device-register.patch @@ -0,0 +1,40 @@ +From 785ef73dba6e9fefd2e5dd24546e0efa8698e5cd Mon Sep 17 00:00:00 2001 +From: James Patrick-Evans +Date: Fri, 15 Jul 2016 12:40:45 -0300 +Subject: [media] airspy: fix error logic during device register + +This patch addresses CVE-2016-5400, a local DOS vulnerability caused by +a memory leak in the airspy usb device driver. + +The vulnerability is triggered when more than 64 usb devices register +with v4l2 of type VFL_TYPE_SDR or VFL_TYPE_SUBDEV.A badusb device can +emulate 64 of these devices then through continual emulated +connect/disconnect of the 65th device, cause the kernel to run out of +RAM and crash the kernel. + +The vulnerability exists in kernel versions from 3.17 to current 4.7. + +The memory leak is caused by the probe function of the airspy driver +mishandeling errors and not freeing the corresponding control structures +when an error occours registering the device to v4l2 core. + +Signed-off-by: James Patrick-Evans +Cc: stable@vger.kernel.org # Up to Kernel 3.17 +Signed-off-by: Mauro Carvalho Chehab + +diff --git a/drivers/media/usb/airspy/airspy.c b/drivers/media/usb/airspy/airspy.c +index d807d58..19cd64c 100644 +--- a/drivers/media/usb/airspy/airspy.c ++++ b/drivers/media/usb/airspy/airspy.c +@@ -1072,7 +1072,7 @@ static int airspy_probe(struct usb_interface *intf, + if (ret) { + dev_err(s->dev, "Failed to register as video device (%d)\n", + ret); +- goto err_unregister_v4l2_dev; ++ goto err_free_controls; + } + dev_info(s->dev, "Registered as %s\n", + video_device_node_name(&s->vdev)); +-- +cgit v0.10.2 + diff --git a/kernel.spec b/kernel.spec index 012f6a133..c94eb3229 100644 --- a/kernel.spec +++ b/kernel.spec @@ -677,6 +677,9 @@ Patch836: drm-amdgpu-Disable-RPM-helpers-while-reprobing.patch Patch837: drm-i915-skl-Add-support-for-the-SAGV-fix-underrun-hangs.patch Patch838: Revert-ALSA-hda-remove-controller-dependency-on-i915.patch +#CVE-2016-5400 rhbz 1358184 1358186 +Patch840: airspy-fix-error-logic-during-device-register.patch + # END OF PATCH DEFINITIONS %endif @@ -2202,6 +2205,9 @@ fi # # %changelog +* Mon Jul 25 2016 Justin Forbes +- CVE-2016-5400 Fix memory leak in airspy driver (rhbz 1358184 1358186) + * Thu Jul 14 2016 Josh Boyer - Fix various i915 uncore oopses (rhbz 1340218 1325020 1342722 1347681) From 02adf9a7d25ff86c9f1a818680c8c3ef98e588f9 Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Mon, 25 Jul 2016 14:41:18 -0400 Subject: [PATCH 116/275] CVE-2016-6136 race condition in auditsc.c (rhbz 1353533 1353534) --- ...fetch-in-audit_log_single_execve_arg.patch | 413 ++++++++++++++++++ kernel.spec | 6 + 2 files changed, 419 insertions(+) create mode 100644 audit-fix-a-double-fetch-in-audit_log_single_execve_arg.patch diff --git a/audit-fix-a-double-fetch-in-audit_log_single_execve_arg.patch b/audit-fix-a-double-fetch-in-audit_log_single_execve_arg.patch new file mode 100644 index 000000000..6ee750466 --- /dev/null +++ b/audit-fix-a-double-fetch-in-audit_log_single_execve_arg.patch @@ -0,0 +1,413 @@ +From 43761473c254b45883a64441dd0bc85a42f3645c Mon Sep 17 00:00:00 2001 +From: Paul Moore +Date: Tue, 19 Jul 2016 17:42:57 -0400 +Subject: [PATCH] audit: fix a double fetch in audit_log_single_execve_arg() + +There is a double fetch problem in audit_log_single_execve_arg() +where we first check the execve(2) argumnets for any "bad" characters +which would require hex encoding and then re-fetch the arguments for +logging in the audit record[1]. Of course this leaves a window of +opportunity for an unsavory application to munge with the data. + +This patch reworks things by only fetching the argument data once[2] +into a buffer where it is scanned and logged into the audit +records(s). In addition to fixing the double fetch, this patch +improves on the original code in a few other ways: better handling +of large arguments which require encoding, stricter record length +checking, and some performance improvements (completely unverified, +but we got rid of some strlen() calls, that's got to be a good +thing). + +As part of the development of this patch, I've also created a basic +regression test for the audit-testsuite, the test can be tracked on +GitHub at the following link: + + * https://github.com/linux-audit/audit-testsuite/issues/25 + +[1] If you pay careful attention, there is actually a triple fetch +problem due to a strnlen_user() call at the top of the function. + +[2] This is a tiny white lie, we do make a call to strnlen_user() +prior to fetching the argument data. I don't like it, but due to the +way the audit record is structured we really have no choice unless we +copy the entire argument at once (which would require a rather +wasteful allocation). The good news is that with this patch the +kernel no longer relies on this strnlen_user() value for anything +beyond recording it in the log, we also update it with a trustworthy +value whenever possible. + +Reported-by: Pengfei Wang +Cc: +Signed-off-by: Paul Moore +--- + kernel/auditsc.c | 332 +++++++++++++++++++++++++++---------------------------- + 1 file changed, 164 insertions(+), 168 deletions(-) + +diff --git a/kernel/auditsc.c b/kernel/auditsc.c +index aa3feec..c65af21 100644 +--- a/kernel/auditsc.c ++++ b/kernel/auditsc.c +@@ -73,6 +73,7 @@ + #include + #include + #include ++#include + #include + + #include "audit.h" +@@ -82,7 +83,8 @@ + #define AUDITSC_SUCCESS 1 + #define AUDITSC_FAILURE 2 + +-/* no execve audit message should be longer than this (userspace limits) */ ++/* no execve audit message should be longer than this (userspace limits), ++ * see the note near the top of audit_log_execve_info() about this value */ + #define MAX_EXECVE_AUDIT_LEN 7500 + + /* max length to print of cmdline/proctitle value during audit */ +@@ -992,184 +994,178 @@ static int audit_log_pid_context(struct audit_context *context, pid_t pid, + return rc; + } + +-/* +- * to_send and len_sent accounting are very loose estimates. We aren't +- * really worried about a hard cap to MAX_EXECVE_AUDIT_LEN so much as being +- * within about 500 bytes (next page boundary) +- * +- * why snprintf? an int is up to 12 digits long. if we just assumed when +- * logging that a[%d]= was going to be 16 characters long we would be wasting +- * space in every audit message. In one 7500 byte message we can log up to +- * about 1000 min size arguments. That comes down to about 50% waste of space +- * if we didn't do the snprintf to find out how long arg_num_len was. +- */ +-static int audit_log_single_execve_arg(struct audit_context *context, +- struct audit_buffer **ab, +- int arg_num, +- size_t *len_sent, +- const char __user *p, +- char *buf) ++static void audit_log_execve_info(struct audit_context *context, ++ struct audit_buffer **ab) + { +- char arg_num_len_buf[12]; +- const char __user *tmp_p = p; +- /* how many digits are in arg_num? 5 is the length of ' a=""' */ +- size_t arg_num_len = snprintf(arg_num_len_buf, 12, "%d", arg_num) + 5; +- size_t len, len_left, to_send; +- size_t max_execve_audit_len = MAX_EXECVE_AUDIT_LEN; +- unsigned int i, has_cntl = 0, too_long = 0; +- int ret; +- +- /* strnlen_user includes the null we don't want to send */ +- len_left = len = strnlen_user(p, MAX_ARG_STRLEN) - 1; +- +- /* +- * We just created this mm, if we can't find the strings +- * we just copied into it something is _very_ wrong. Similar +- * for strings that are too long, we should not have created +- * any. +- */ +- if (WARN_ON_ONCE(len < 0 || len > MAX_ARG_STRLEN - 1)) { +- send_sig(SIGKILL, current, 0); +- return -1; ++ long len_max; ++ long len_rem; ++ long len_full; ++ long len_buf; ++ long len_abuf; ++ long len_tmp; ++ bool require_data; ++ bool encode; ++ unsigned int iter; ++ unsigned int arg; ++ char *buf_head; ++ char *buf; ++ const char __user *p = (const char __user *)current->mm->arg_start; ++ ++ /* NOTE: this buffer needs to be large enough to hold all the non-arg ++ * data we put in the audit record for this argument (see the ++ * code below) ... at this point in time 96 is plenty */ ++ char abuf[96]; ++ ++ /* NOTE: we set MAX_EXECVE_AUDIT_LEN to a rather arbitrary limit, the ++ * current value of 7500 is not as important as the fact that it ++ * is less than 8k, a setting of 7500 gives us plenty of wiggle ++ * room if we go over a little bit in the logging below */ ++ WARN_ON_ONCE(MAX_EXECVE_AUDIT_LEN > 7500); ++ len_max = MAX_EXECVE_AUDIT_LEN; ++ ++ /* scratch buffer to hold the userspace args */ ++ buf_head = kmalloc(MAX_EXECVE_AUDIT_LEN + 1, GFP_KERNEL); ++ if (!buf_head) { ++ audit_panic("out of memory for argv string"); ++ return; + } ++ buf = buf_head; + +- /* walk the whole argument looking for non-ascii chars */ ++ audit_log_format(*ab, "argc=%d", context->execve.argc); ++ ++ len_rem = len_max; ++ len_buf = 0; ++ len_full = 0; ++ require_data = true; ++ encode = false; ++ iter = 0; ++ arg = 0; + do { +- if (len_left > MAX_EXECVE_AUDIT_LEN) +- to_send = MAX_EXECVE_AUDIT_LEN; +- else +- to_send = len_left; +- ret = copy_from_user(buf, tmp_p, to_send); +- /* +- * There is no reason for this copy to be short. We just +- * copied them here, and the mm hasn't been exposed to user- +- * space yet. +- */ +- if (ret) { +- WARN_ON(1); +- send_sig(SIGKILL, current, 0); +- return -1; +- } +- buf[to_send] = '\0'; +- has_cntl = audit_string_contains_control(buf, to_send); +- if (has_cntl) { +- /* +- * hex messages get logged as 2 bytes, so we can only +- * send half as much in each message +- */ +- max_execve_audit_len = MAX_EXECVE_AUDIT_LEN / 2; +- break; +- } +- len_left -= to_send; +- tmp_p += to_send; +- } while (len_left > 0); +- +- len_left = len; +- +- if (len > max_execve_audit_len) +- too_long = 1; +- +- /* rewalk the argument actually logging the message */ +- for (i = 0; len_left > 0; i++) { +- int room_left; +- +- if (len_left > max_execve_audit_len) +- to_send = max_execve_audit_len; +- else +- to_send = len_left; +- +- /* do we have space left to send this argument in this ab? */ +- room_left = MAX_EXECVE_AUDIT_LEN - arg_num_len - *len_sent; +- if (has_cntl) +- room_left -= (to_send * 2); +- else +- room_left -= to_send; +- if (room_left < 0) { +- *len_sent = 0; +- audit_log_end(*ab); +- *ab = audit_log_start(context, GFP_KERNEL, AUDIT_EXECVE); +- if (!*ab) +- return 0; +- } ++ /* NOTE: we don't ever want to trust this value for anything ++ * serious, but the audit record format insists we ++ * provide an argument length for really long arguments, ++ * e.g. > MAX_EXECVE_AUDIT_LEN, so we have no choice but ++ * to use strncpy_from_user() to obtain this value for ++ * recording in the log, although we don't use it ++ * anywhere here to avoid a double-fetch problem */ ++ if (len_full == 0) ++ len_full = strnlen_user(p, MAX_ARG_STRLEN) - 1; ++ ++ /* read more data from userspace */ ++ if (require_data) { ++ /* can we make more room in the buffer? */ ++ if (buf != buf_head) { ++ memmove(buf_head, buf, len_buf); ++ buf = buf_head; ++ } ++ ++ /* fetch as much as we can of the argument */ ++ len_tmp = strncpy_from_user(&buf_head[len_buf], p, ++ len_max - len_buf); ++ if (len_tmp == -EFAULT) { ++ /* unable to copy from userspace */ ++ send_sig(SIGKILL, current, 0); ++ goto out; ++ } else if (len_tmp == (len_max - len_buf)) { ++ /* buffer is not large enough */ ++ require_data = true; ++ /* NOTE: if we are going to span multiple ++ * buffers force the encoding so we stand ++ * a chance at a sane len_full value and ++ * consistent record encoding */ ++ encode = true; ++ len_full = len_full * 2; ++ p += len_tmp; ++ } else { ++ require_data = false; ++ if (!encode) ++ encode = audit_string_contains_control( ++ buf, len_tmp); ++ /* try to use a trusted value for len_full */ ++ if (len_full < len_max) ++ len_full = (encode ? ++ len_tmp * 2 : len_tmp); ++ p += len_tmp + 1; ++ } ++ len_buf += len_tmp; ++ buf_head[len_buf] = '\0'; + +- /* +- * first record needs to say how long the original string was +- * so we can be sure nothing was lost. +- */ +- if ((i == 0) && (too_long)) +- audit_log_format(*ab, " a%d_len=%zu", arg_num, +- has_cntl ? 2*len : len); +- +- /* +- * normally arguments are small enough to fit and we already +- * filled buf above when we checked for control characters +- * so don't bother with another copy_from_user +- */ +- if (len >= max_execve_audit_len) +- ret = copy_from_user(buf, p, to_send); +- else +- ret = 0; +- if (ret) { +- WARN_ON(1); +- send_sig(SIGKILL, current, 0); +- return -1; ++ /* length of the buffer in the audit record? */ ++ len_abuf = (encode ? len_buf * 2 : len_buf + 2); + } +- buf[to_send] = '\0'; +- +- /* actually log it */ +- audit_log_format(*ab, " a%d", arg_num); +- if (too_long) +- audit_log_format(*ab, "[%d]", i); +- audit_log_format(*ab, "="); +- if (has_cntl) +- audit_log_n_hex(*ab, buf, to_send); +- else +- audit_log_string(*ab, buf); +- +- p += to_send; +- len_left -= to_send; +- *len_sent += arg_num_len; +- if (has_cntl) +- *len_sent += to_send * 2; +- else +- *len_sent += to_send; +- } +- /* include the null we didn't log */ +- return len + 1; +-} + +-static void audit_log_execve_info(struct audit_context *context, +- struct audit_buffer **ab) +-{ +- int i, len; +- size_t len_sent = 0; +- const char __user *p; +- char *buf; ++ /* write as much as we can to the audit log */ ++ if (len_buf > 0) { ++ /* NOTE: some magic numbers here - basically if we ++ * can't fit a reasonable amount of data into the ++ * existing audit buffer, flush it and start with ++ * a new buffer */ ++ if ((sizeof(abuf) + 8) > len_rem) { ++ len_rem = len_max; ++ audit_log_end(*ab); ++ *ab = audit_log_start(context, ++ GFP_KERNEL, AUDIT_EXECVE); ++ if (!*ab) ++ goto out; ++ } + +- p = (const char __user *)current->mm->arg_start; ++ /* create the non-arg portion of the arg record */ ++ len_tmp = 0; ++ if (require_data || (iter > 0) || ++ ((len_abuf + sizeof(abuf)) > len_rem)) { ++ if (iter == 0) { ++ len_tmp += snprintf(&abuf[len_tmp], ++ sizeof(abuf) - len_tmp, ++ " a%d_len=%lu", ++ arg, len_full); ++ } ++ len_tmp += snprintf(&abuf[len_tmp], ++ sizeof(abuf) - len_tmp, ++ " a%d[%d]=", arg, iter++); ++ } else ++ len_tmp += snprintf(&abuf[len_tmp], ++ sizeof(abuf) - len_tmp, ++ " a%d=", arg); ++ WARN_ON(len_tmp >= sizeof(abuf)); ++ abuf[sizeof(abuf) - 1] = '\0'; ++ ++ /* log the arg in the audit record */ ++ audit_log_format(*ab, "%s", abuf); ++ len_rem -= len_tmp; ++ len_tmp = len_buf; ++ if (encode) { ++ if (len_abuf > len_rem) ++ len_tmp = len_rem / 2; /* encoding */ ++ audit_log_n_hex(*ab, buf, len_tmp); ++ len_rem -= len_tmp * 2; ++ len_abuf -= len_tmp * 2; ++ } else { ++ if (len_abuf > len_rem) ++ len_tmp = len_rem - 2; /* quotes */ ++ audit_log_n_string(*ab, buf, len_tmp); ++ len_rem -= len_tmp + 2; ++ /* don't subtract the "2" because we still need ++ * to add quotes to the remaining string */ ++ len_abuf -= len_tmp; ++ } ++ len_buf -= len_tmp; ++ buf += len_tmp; ++ } + +- audit_log_format(*ab, "argc=%d", context->execve.argc); ++ /* ready to move to the next argument? */ ++ if ((len_buf == 0) && !require_data) { ++ arg++; ++ iter = 0; ++ len_full = 0; ++ require_data = true; ++ encode = false; ++ } ++ } while (arg < context->execve.argc); + +- /* +- * we need some kernel buffer to hold the userspace args. Just +- * allocate one big one rather than allocating one of the right size +- * for every single argument inside audit_log_single_execve_arg() +- * should be <8k allocation so should be pretty safe. +- */ +- buf = kmalloc(MAX_EXECVE_AUDIT_LEN + 1, GFP_KERNEL); +- if (!buf) { +- audit_panic("out of memory for argv string"); +- return; +- } ++ /* NOTE: the caller handles the final audit_log_end() call */ + +- for (i = 0; i < context->execve.argc; i++) { +- len = audit_log_single_execve_arg(context, ab, i, +- &len_sent, p, buf); +- if (len <= 0) +- break; +- p += len; +- } +- kfree(buf); ++out: ++ kfree(buf_head); + } + + static void show_special(struct audit_context *context, int *call_panic) diff --git a/kernel.spec b/kernel.spec index c94eb3229..5e316be0a 100644 --- a/kernel.spec +++ b/kernel.spec @@ -680,6 +680,9 @@ Patch838: Revert-ALSA-hda-remove-controller-dependency-on-i915.patch #CVE-2016-5400 rhbz 1358184 1358186 Patch840: airspy-fix-error-logic-during-device-register.patch +#CVE-2016-6136 rhbz 1353533 1353534 +Patch841: audit-fix-a-double-fetch-in-audit_log_single_execve_arg.patch + # END OF PATCH DEFINITIONS %endif @@ -2205,6 +2208,9 @@ fi # # %changelog +* Mon Jul 25 2016 Josh Boyer +- CVE-2016-6136 race condition in auditsc.c (rhbz 1353533 1353534) + * Mon Jul 25 2016 Justin Forbes - CVE-2016-5400 Fix memory leak in airspy driver (rhbz 1358184 1358186) From 967c228a714abf9b0b953ce99d0e09baa98f05b3 Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Wed, 27 Jul 2016 14:36:39 -0400 Subject: [PATCH 117/275] Linux v4.6.5 --- ...200-Black-screen-fix-for-G200e-rev-4.patch | 58 ------ ...on-fix-out-of-bounds-memory-accesses.patch | 138 ------------- ...-sor-gf119-both-links-use-the-same-t.patch | 46 ----- ...-sor-gm107-training-pattern-register.patch | 195 ------------------ ...bc-Disable-on-HSW-by-default-for-now.patch | 55 ----- ...ate-num_values-for-HIDIOCGUSAGES-HID.patch | 44 ---- KEYS-potential-uninitialized-variable.patch | 30 --- ...sp-sor-gf119-select-correct-sor-when.patch | 29 --- kernel.spec | 27 +-- ...-check-permissions-when-setting-ACLs.patch | 154 -------------- posix_acl-Add-set_posix_acl.patch | 55 ----- sources | 2 +- 12 files changed, 6 insertions(+), 827 deletions(-) delete mode 100644 0001-drm-mgag200-Black-screen-fix-for-G200e-rev-4.patch delete mode 100644 0002-drm-nouveau-fbcon-fix-out-of-bounds-memory-accesses.patch delete mode 100644 0003-drm-nouveau-disp-sor-gf119-both-links-use-the-same-t.patch delete mode 100644 0004-drm-nouveau-disp-sor-gm107-training-pattern-register.patch delete mode 100644 0005-i915-fbc-Disable-on-HSW-by-default-for-now.patch delete mode 100644 HID-hiddev-validate-num_values-for-HIDIOCGUSAGES-HID.patch delete mode 100644 KEYS-potential-uninitialized-variable.patch delete mode 100644 drm-nouveau-disp-sor-gf119-select-correct-sor-when.patch delete mode 100644 nfsd-check-permissions-when-setting-ACLs.patch delete mode 100644 posix_acl-Add-set_posix_acl.patch diff --git a/0001-drm-mgag200-Black-screen-fix-for-G200e-rev-4.patch b/0001-drm-mgag200-Black-screen-fix-for-G200e-rev-4.patch deleted file mode 100644 index e583d09e8..000000000 --- a/0001-drm-mgag200-Black-screen-fix-for-G200e-rev-4.patch +++ /dev/null @@ -1,58 +0,0 @@ -From 1e5895f2c6068fb9ae5356e3a751a29a22af5f01 Mon Sep 17 00:00:00 2001 -From: Fedora Kernel Team -Date: Mon, 20 Jun 2016 14:53:03 +0200 -Subject: [PATCH 1/6] drm/mgag200: Black screen fix for G200e rev 4 - -Upstream: since drm-fixes-for-v4.7 -commit d3922b69617b62bb2509936b68301f837229d9f0 - -Author: Mathieu Larouche -AuthorDate: Fri May 27 15:12:50 2016 -0400 -Commit: Dave Airlie -CommitDate: Wed Jun 1 15:25:04 2016 +1000 - - drm/mgag200: Black screen fix for G200e rev 4 - - - Fixed black screen for some resolutions of G200e rev4 - - Fixed testm & testn which had predetermined value. - - Reported-by: Jan Beulich - - Signed-off-by: Mathieu Larouche - Cc: stable@vger.kernel.org - Signed-off-by: Dave Airlie ---- - drivers/gpu/drm/mgag200/mgag200_mode.c | 10 +++++++++- - 1 file changed, 9 insertions(+), 1 deletion(-) - -diff --git a/drivers/gpu/drm/mgag200/mgag200_mode.c b/drivers/gpu/drm/mgag200/mgag200_mode.c -index 14e64e0..d347dca 100644 ---- a/drivers/gpu/drm/mgag200/mgag200_mode.c -+++ b/drivers/gpu/drm/mgag200/mgag200_mode.c -@@ -182,7 +182,7 @@ static int mga_g200se_set_plls(struct mga_device *mdev, long clock) - } - } - -- fvv = pllreffreq * testn / testm; -+ fvv = pllreffreq * (n + 1) / (m + 1); - fvv = (fvv - 800000) / 50000; - - if (fvv > 15) -@@ -202,6 +202,14 @@ static int mga_g200se_set_plls(struct mga_device *mdev, long clock) - WREG_DAC(MGA1064_PIX_PLLC_M, m); - WREG_DAC(MGA1064_PIX_PLLC_N, n); - WREG_DAC(MGA1064_PIX_PLLC_P, p); -+ -+ if (mdev->unique_rev_id >= 0x04) { -+ WREG_DAC(0x1a, 0x09); -+ msleep(20); -+ WREG_DAC(0x1a, 0x01); -+ -+ } -+ - return 0; - } - --- -2.7.4 - diff --git a/0002-drm-nouveau-fbcon-fix-out-of-bounds-memory-accesses.patch b/0002-drm-nouveau-fbcon-fix-out-of-bounds-memory-accesses.patch deleted file mode 100644 index d1c32b439..000000000 --- a/0002-drm-nouveau-fbcon-fix-out-of-bounds-memory-accesses.patch +++ /dev/null @@ -1,138 +0,0 @@ -From 02510a8805db2c3f8ca2926f90c4b3793934404a Mon Sep 17 00:00:00 2001 -From: Fedora Kernel Team -Date: Mon, 20 Jun 2016 14:51:45 +0200 -Subject: [PATCH 2/6] drm/nouveau/fbcon: fix out-of-bounds memory accesses - -Upstream: drm-fixes for 4.7 (and cc'd 4.6-stable) -commit f045f459d925138fe7d6193a8c86406bda7e49da - -Author: Ben Skeggs -AuthorDate: Thu Jun 2 12:23:31 2016 +1000 -Commit: Ben Skeggs -CommitDate: Thu Jun 2 13:53:44 2016 +1000 - - drm/nouveau/fbcon: fix out-of-bounds memory accesses - - Reported by KASAN. - - Signed-off-by: Ben Skeggs - Cc: stable@vger.kernel.org ---- - drivers/gpu/drm/nouveau/nouveau_fbcon.c | 1 + - drivers/gpu/drm/nouveau/nv04_fbcon.c | 7 ++----- - drivers/gpu/drm/nouveau/nv50_fbcon.c | 6 ++---- - drivers/gpu/drm/nouveau/nvc0_fbcon.c | 6 ++---- - 4 files changed, 7 insertions(+), 13 deletions(-) - -diff --git a/drivers/gpu/drm/nouveau/nouveau_fbcon.c b/drivers/gpu/drm/nouveau/nouveau_fbcon.c -index 59f27e7..bd89c86 100644 ---- a/drivers/gpu/drm/nouveau/nouveau_fbcon.c -+++ b/drivers/gpu/drm/nouveau/nouveau_fbcon.c -@@ -557,6 +557,7 @@ nouveau_fbcon_init(struct drm_device *dev) - if (ret) - goto fini; - -+ fbcon->helper.fbdev->pixmap.buf_align = 4; - return 0; - - fini: -diff --git a/drivers/gpu/drm/nouveau/nv04_fbcon.c b/drivers/gpu/drm/nouveau/nv04_fbcon.c -index 789dc29..8f715fe 100644 ---- a/drivers/gpu/drm/nouveau/nv04_fbcon.c -+++ b/drivers/gpu/drm/nouveau/nv04_fbcon.c -@@ -82,7 +82,6 @@ nv04_fbcon_imageblit(struct fb_info *info, const struct fb_image *image) - uint32_t fg; - uint32_t bg; - uint32_t dsize; -- uint32_t width; - uint32_t *data = (uint32_t *)image->data; - int ret; - -@@ -93,9 +92,6 @@ nv04_fbcon_imageblit(struct fb_info *info, const struct fb_image *image) - if (ret) - return ret; - -- width = ALIGN(image->width, 8); -- dsize = ALIGN(width * image->height, 32) >> 5; -- - if (info->fix.visual == FB_VISUAL_TRUECOLOR || - info->fix.visual == FB_VISUAL_DIRECTCOLOR) { - fg = ((uint32_t *) info->pseudo_palette)[image->fg_color]; -@@ -111,10 +107,11 @@ nv04_fbcon_imageblit(struct fb_info *info, const struct fb_image *image) - ((image->dx + image->width) & 0xffff)); - OUT_RING(chan, bg); - OUT_RING(chan, fg); -- OUT_RING(chan, (image->height << 16) | width); -+ OUT_RING(chan, (image->height << 16) | image->width); - OUT_RING(chan, (image->height << 16) | image->width); - OUT_RING(chan, (image->dy << 16) | (image->dx & 0xffff)); - -+ dsize = ALIGN(image->width * image->height, 32) >> 5; - while (dsize) { - int iter_len = dsize > 128 ? 128 : dsize; - -diff --git a/drivers/gpu/drm/nouveau/nv50_fbcon.c b/drivers/gpu/drm/nouveau/nv50_fbcon.c -index e05499d..a4e259a 100644 ---- a/drivers/gpu/drm/nouveau/nv50_fbcon.c -+++ b/drivers/gpu/drm/nouveau/nv50_fbcon.c -@@ -95,7 +95,7 @@ nv50_fbcon_imageblit(struct fb_info *info, const struct fb_image *image) - struct nouveau_fbdev *nfbdev = info->par; - struct nouveau_drm *drm = nouveau_drm(nfbdev->dev); - struct nouveau_channel *chan = drm->channel; -- uint32_t width, dwords, *data = (uint32_t *)image->data; -+ uint32_t dwords, *data = (uint32_t *)image->data; - uint32_t mask = ~(~0 >> (32 - info->var.bits_per_pixel)); - uint32_t *palette = info->pseudo_palette; - int ret; -@@ -107,9 +107,6 @@ nv50_fbcon_imageblit(struct fb_info *info, const struct fb_image *image) - if (ret) - return ret; - -- width = ALIGN(image->width, 32); -- dwords = (width * image->height) >> 5; -- - BEGIN_NV04(chan, NvSub2D, 0x0814, 2); - if (info->fix.visual == FB_VISUAL_TRUECOLOR || - info->fix.visual == FB_VISUAL_DIRECTCOLOR) { -@@ -128,6 +125,7 @@ nv50_fbcon_imageblit(struct fb_info *info, const struct fb_image *image) - OUT_RING(chan, 0); - OUT_RING(chan, image->dy); - -+ dwords = ALIGN(image->width * image->height, 32) >> 5; - while (dwords) { - int push = dwords > 2047 ? 2047 : dwords; - -diff --git a/drivers/gpu/drm/nouveau/nvc0_fbcon.c b/drivers/gpu/drm/nouveau/nvc0_fbcon.c -index c97395b..f28315e 100644 ---- a/drivers/gpu/drm/nouveau/nvc0_fbcon.c -+++ b/drivers/gpu/drm/nouveau/nvc0_fbcon.c -@@ -95,7 +95,7 @@ nvc0_fbcon_imageblit(struct fb_info *info, const struct fb_image *image) - struct nouveau_fbdev *nfbdev = info->par; - struct nouveau_drm *drm = nouveau_drm(nfbdev->dev); - struct nouveau_channel *chan = drm->channel; -- uint32_t width, dwords, *data = (uint32_t *)image->data; -+ uint32_t dwords, *data = (uint32_t *)image->data; - uint32_t mask = ~(~0 >> (32 - info->var.bits_per_pixel)); - uint32_t *palette = info->pseudo_palette; - int ret; -@@ -107,9 +107,6 @@ nvc0_fbcon_imageblit(struct fb_info *info, const struct fb_image *image) - if (ret) - return ret; - -- width = ALIGN(image->width, 32); -- dwords = (width * image->height) >> 5; -- - BEGIN_NVC0(chan, NvSub2D, 0x0814, 2); - if (info->fix.visual == FB_VISUAL_TRUECOLOR || - info->fix.visual == FB_VISUAL_DIRECTCOLOR) { -@@ -128,6 +125,7 @@ nvc0_fbcon_imageblit(struct fb_info *info, const struct fb_image *image) - OUT_RING (chan, 0); - OUT_RING (chan, image->dy); - -+ dwords = ALIGN(image->width * image->height, 32) >> 5; - while (dwords) { - int push = dwords > 2047 ? 2047 : dwords; - --- -2.7.4 - diff --git a/0003-drm-nouveau-disp-sor-gf119-both-links-use-the-same-t.patch b/0003-drm-nouveau-disp-sor-gf119-both-links-use-the-same-t.patch deleted file mode 100644 index b93bdff17..000000000 --- a/0003-drm-nouveau-disp-sor-gf119-both-links-use-the-same-t.patch +++ /dev/null @@ -1,46 +0,0 @@ -From de35f524e89daf8862d49724b9045f9254bfdfea Mon Sep 17 00:00:00 2001 -From: Fedora Kernel Team -Date: Mon, 20 Jun 2016 14:52:01 +0200 -Subject: [PATCH 3/6] drm/nouveau/disp/sor/gf119: both links use the same - training register - -Upstream: drm-fixes for 4.7 (and cc'd 4.6-stable) -commit a8953c52b95167b5d21a66f0859751570271d834 - -Author: Ben Skeggs -AuthorDate: Fri Jun 3 14:37:40 2016 +1000 -Commit: Ben Skeggs -CommitDate: Tue Jun 7 08:11:14 2016 +1000 - - drm/nouveau/disp/sor/gf119: both links use the same training register - - It appears that, for whatever reason, both link A and B use the same - register to control the training pattern. It's a little odd, as the - GPUs before this (Tesla/Fermi1) have per-link registers, as do newer - GPUs (Maxwell). - - Fixes the third DP output on NVS 510 (GK107). - - Signed-off-by: Ben Skeggs - Cc: stable@vger.kernel.org ---- - drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgf119.c | 3 +-- - 1 file changed, 1 insertion(+), 2 deletions(-) - -diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgf119.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgf119.c -index b4b41b1..5111560 100644 ---- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgf119.c -+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgf119.c -@@ -40,8 +40,7 @@ static int - gf119_sor_dp_pattern(struct nvkm_output_dp *outp, int pattern) - { - struct nvkm_device *device = outp->base.disp->engine.subdev.device; -- const u32 loff = gf119_sor_loff(outp); -- nvkm_mask(device, 0x61c110 + loff, 0x0f0f0f0f, 0x01010101 * pattern); -+ nvkm_mask(device, 0x61c110, 0x0f0f0f0f, 0x01010101 * pattern); - return 0; - } - --- -2.7.4 - diff --git a/0004-drm-nouveau-disp-sor-gm107-training-pattern-register.patch b/0004-drm-nouveau-disp-sor-gm107-training-pattern-register.patch deleted file mode 100644 index a0b6171d8..000000000 --- a/0004-drm-nouveau-disp-sor-gm107-training-pattern-register.patch +++ /dev/null @@ -1,195 +0,0 @@ -From eb4668302adce316f53896b0fd8144ffe380a3ad Mon Sep 17 00:00:00 2001 -From: Fedora Kernel Team -Date: Mon, 20 Jun 2016 14:52:06 +0200 -Subject: [PATCH 4/6] drm/nouveau/disp/sor/gm107: training pattern registers - are like gm200 - -Upstream: drm-fixes for 4.7 (and cc'd 4.6-stable) -commit 4691409b3e2250ed66aa8dcefa23fe765daf7add - -Author: Ben Skeggs -AuthorDate: Fri Jun 3 15:05:52 2016 +1000 -Commit: Ben Skeggs -CommitDate: Tue Jun 7 08:11:25 2016 +1000 - - drm/nouveau/disp/sor/gm107: training pattern registers are like gm200 - - Signed-off-by: Ben Skeggs - Cc: stable@vger.kernel.org ---- - drivers/gpu/drm/nouveau/nvkm/engine/disp/Kbuild | 1 + - drivers/gpu/drm/nouveau/nvkm/engine/disp/gm107.c | 2 +- - drivers/gpu/drm/nouveau/nvkm/engine/disp/outpdp.h | 9 +++- - .../gpu/drm/nouveau/nvkm/engine/disp/sorgf119.c | 2 +- - .../nvkm/engine/disp/{gm107.c => sorgm107.c} | 50 +++++++++++----------- - .../gpu/drm/nouveau/nvkm/engine/disp/sorgm200.c | 15 +------ - 6 files changed, 36 insertions(+), 43 deletions(-) - copy drivers/gpu/drm/nouveau/nvkm/engine/disp/{gm107.c => sorgm107.c} (55%) - -diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/Kbuild b/drivers/gpu/drm/nouveau/nvkm/engine/disp/Kbuild -index a74c5dd..e2a64ed 100644 ---- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/Kbuild -+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/Kbuild -@@ -18,6 +18,7 @@ nvkm-y += nvkm/engine/disp/piornv50.o - nvkm-y += nvkm/engine/disp/sornv50.o - nvkm-y += nvkm/engine/disp/sorg94.o - nvkm-y += nvkm/engine/disp/sorgf119.o -+nvkm-y += nvkm/engine/disp/sorgm107.o - nvkm-y += nvkm/engine/disp/sorgm200.o - nvkm-y += nvkm/engine/disp/dport.o - -diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/gm107.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/gm107.c -index b694414..f4b9cf8 100644 ---- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/gm107.c -+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/gm107.c -@@ -36,7 +36,7 @@ gm107_disp = { - .outp.internal.crt = nv50_dac_output_new, - .outp.internal.tmds = nv50_sor_output_new, - .outp.internal.lvds = nv50_sor_output_new, -- .outp.internal.dp = gf119_sor_dp_new, -+ .outp.internal.dp = gm107_sor_dp_new, - .dac.nr = 3, - .dac.power = nv50_dac_power, - .dac.sense = nv50_dac_sense, -diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/outpdp.h b/drivers/gpu/drm/nouveau/nvkm/engine/disp/outpdp.h -index e9067ba..4e983f6 100644 ---- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/outpdp.h -+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/outpdp.h -@@ -62,7 +62,12 @@ int g94_sor_dp_lnk_pwr(struct nvkm_output_dp *, int); - int gf119_sor_dp_new(struct nvkm_disp *, int, struct dcb_output *, - struct nvkm_output **); - int gf119_sor_dp_lnk_ctl(struct nvkm_output_dp *, int, int, bool); -+int gf119_sor_dp_drv_ctl(struct nvkm_output_dp *, int, int, int, int); - --int gm200_sor_dp_new(struct nvkm_disp *, int, struct dcb_output *, -- struct nvkm_output **); -+int gm107_sor_dp_new(struct nvkm_disp *, int, struct dcb_output *, -+ struct nvkm_output **); -+int gm107_sor_dp_pattern(struct nvkm_output_dp *, int); -+ -+int gm200_sor_dp_new(struct nvkm_disp *, int, struct dcb_output *, -+ struct nvkm_output **); - #endif -diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgf119.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgf119.c -index 5111560..22706c0 100644 ---- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgf119.c -+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgf119.c -@@ -63,7 +63,7 @@ gf119_sor_dp_lnk_ctl(struct nvkm_output_dp *outp, int nr, int bw, bool ef) - return 0; - } - --static int -+int - gf119_sor_dp_drv_ctl(struct nvkm_output_dp *outp, - int ln, int vs, int pe, int pc) - { -diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/gm107.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgm107.c -similarity index 55% -copy from drivers/gpu/drm/nouveau/nvkm/engine/disp/gm107.c -copy to drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgm107.c -index b694414..37790b2 100644 ---- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/gm107.c -+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgm107.c -@@ -1,5 +1,5 @@ - /* -- * Copyright 2012 Red Hat Inc. -+ * Copyright 2016 Red Hat Inc. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), -@@ -19,35 +19,35 @@ - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - * OTHER DEALINGS IN THE SOFTWARE. - * -- * Authors: Ben Skeggs -+ * Authors: Ben Skeggs - */ - #include "nv50.h" --#include "rootnv50.h" -+#include "outpdp.h" - --static const struct nv50_disp_func --gm107_disp = { -- .intr = gf119_disp_intr, -- .uevent = &gf119_disp_chan_uevent, -- .super = gf119_disp_intr_supervisor, -- .root = &gm107_disp_root_oclass, -- .head.vblank_init = gf119_disp_vblank_init, -- .head.vblank_fini = gf119_disp_vblank_fini, -- .head.scanoutpos = gf119_disp_root_scanoutpos, -- .outp.internal.crt = nv50_dac_output_new, -- .outp.internal.tmds = nv50_sor_output_new, -- .outp.internal.lvds = nv50_sor_output_new, -- .outp.internal.dp = gf119_sor_dp_new, -- .dac.nr = 3, -- .dac.power = nv50_dac_power, -- .dac.sense = nv50_dac_sense, -- .sor.nr = 4, -- .sor.power = nv50_sor_power, -- .sor.hda_eld = gf119_hda_eld, -- .sor.hdmi = gk104_hdmi_ctrl, -+int -+gm107_sor_dp_pattern(struct nvkm_output_dp *outp, int pattern) -+{ -+ struct nvkm_device *device = outp->base.disp->engine.subdev.device; -+ const u32 soff = outp->base.or * 0x800; -+ const u32 data = 0x01010101 * pattern; -+ if (outp->base.info.sorconf.link & 1) -+ nvkm_mask(device, 0x61c110 + soff, 0x0f0f0f0f, data); -+ else -+ nvkm_mask(device, 0x61c12c + soff, 0x0f0f0f0f, data); -+ return 0; -+} -+ -+static const struct nvkm_output_dp_func -+gm107_sor_dp_func = { -+ .pattern = gm107_sor_dp_pattern, -+ .lnk_pwr = g94_sor_dp_lnk_pwr, -+ .lnk_ctl = gf119_sor_dp_lnk_ctl, -+ .drv_ctl = gf119_sor_dp_drv_ctl, - }; - - int --gm107_disp_new(struct nvkm_device *device, int index, struct nvkm_disp **pdisp) -+gm107_sor_dp_new(struct nvkm_disp *disp, int index, -+ struct dcb_output *dcbE, struct nvkm_output **poutp) - { -- return gf119_disp_new_(&gm107_disp, device, index, pdisp); -+ return nvkm_output_dp_new_(&gm107_sor_dp_func, disp, index, dcbE, poutp); - } -diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgm200.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgm200.c -index 2cfbef9..c44fa7e 100644 ---- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgm200.c -+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgm200.c -@@ -57,19 +57,6 @@ gm200_sor_dp_lane_map(struct nvkm_device *device, u8 lane) - } - - static int --gm200_sor_dp_pattern(struct nvkm_output_dp *outp, int pattern) --{ -- struct nvkm_device *device = outp->base.disp->engine.subdev.device; -- const u32 soff = gm200_sor_soff(outp); -- const u32 data = 0x01010101 * pattern; -- if (outp->base.info.sorconf.link & 1) -- nvkm_mask(device, 0x61c110 + soff, 0x0f0f0f0f, data); -- else -- nvkm_mask(device, 0x61c12c + soff, 0x0f0f0f0f, data); -- return 0; --} -- --static int - gm200_sor_dp_lnk_pwr(struct nvkm_output_dp *outp, int nr) - { - struct nvkm_device *device = outp->base.disp->engine.subdev.device; -@@ -129,7 +116,7 @@ gm200_sor_dp_drv_ctl(struct nvkm_output_dp *outp, - - static const struct nvkm_output_dp_func - gm200_sor_dp_func = { -- .pattern = gm200_sor_dp_pattern, -+ .pattern = gm107_sor_dp_pattern, - .lnk_pwr = gm200_sor_dp_lnk_pwr, - .lnk_ctl = gf119_sor_dp_lnk_ctl, - .drv_ctl = gm200_sor_dp_drv_ctl, --- -2.7.4 - diff --git a/0005-i915-fbc-Disable-on-HSW-by-default-for-now.patch b/0005-i915-fbc-Disable-on-HSW-by-default-for-now.patch deleted file mode 100644 index d95f2f4d0..000000000 --- a/0005-i915-fbc-Disable-on-HSW-by-default-for-now.patch +++ /dev/null @@ -1,55 +0,0 @@ -From 28d0147bded959b2c4d3eb1aa957452d5dbb0cc9 Mon Sep 17 00:00:00 2001 -From: Fedora Kernel Team -Date: Mon, 20 Jun 2016 14:52:10 +0200 -Subject: [PATCH 5/6] i915/fbc: Disable on HSW by default for now - -Upstream: posted on dri-devel (and r-b'd) - -Author: cpaul@redhat.com -AuthorDate: Thu Jun 9 11:58:15 2016 -0400 -Commit: Rob Clark -CommitDate: Thu Jun 9 15:43:07 2016 -0400 - - i915/fbc: Disable on HSW by default for now - - >From https://bugs.freedesktop.org/show_bug.cgi?id=96461 : - - This was kind of a difficult bug to track down. If you're using a - Haswell system running GNOME and you have fbc completely enabled and - working, playing videos can result in video artifacts. Steps to - reproduce: - - - Run GNOME - - Ensure FBC is enabled and active - - Download a movie, I used the ogg version of Big Buck Bunny for this - - Run `gst-launch-1.0 filesrc location='some_movie.ogg' ! decodebin ! - glimagesink` in a terminal - - Watch for about over a minute, you'll see small horizontal lines go - down the screen. - - For the time being, disable FBC for Haswell by default. - - Signed-off-by: Lyude - Reviewed-by: Paulo Zanoni - Cc: stable@vger.kernel.org ---- - drivers/gpu/drm/i915/intel_fbc.c | 3 +-- - 1 file changed, 1 insertion(+), 2 deletions(-) - -diff --git a/drivers/gpu/drm/i915/intel_fbc.c b/drivers/gpu/drm/i915/intel_fbc.c -index 0f0492f..28f4407 100644 ---- a/drivers/gpu/drm/i915/intel_fbc.c -+++ b/drivers/gpu/drm/i915/intel_fbc.c -@@ -823,8 +823,7 @@ static bool intel_fbc_can_choose(struct intel_crtc *crtc) - { - struct drm_i915_private *dev_priv = crtc->base.dev->dev_private; - struct intel_fbc *fbc = &dev_priv->fbc; -- bool enable_by_default = IS_HASWELL(dev_priv) || -- IS_BROADWELL(dev_priv); -+ bool enable_by_default = IS_BROADWELL(dev_priv); - - if (intel_vgpu_active(dev_priv->dev)) { - fbc->no_fbc_reason = "VGPU is active"; --- -2.7.4 - diff --git a/HID-hiddev-validate-num_values-for-HIDIOCGUSAGES-HID.patch b/HID-hiddev-validate-num_values-for-HIDIOCGUSAGES-HID.patch deleted file mode 100644 index e84272ee7..000000000 --- a/HID-hiddev-validate-num_values-for-HIDIOCGUSAGES-HID.patch +++ /dev/null @@ -1,44 +0,0 @@ -From 93a2001bdfd5376c3dc2158653034c20392d15c5 Mon Sep 17 00:00:00 2001 -From: Scott Bauer -Date: Thu, 23 Jun 2016 08:59:47 -0600 -Subject: [PATCH] HID: hiddev: validate num_values for HIDIOCGUSAGES, - HIDIOCSUSAGES commands - -This patch validates the num_values parameter from userland during the -HIDIOCGUSAGES and HIDIOCSUSAGES commands. Previously, if the report id was set -to HID_REPORT_ID_UNKNOWN, we would fail to validate the num_values parameter -leading to a heap overflow. - -Cc: stable@vger.kernel.org -Signed-off-by: Scott Bauer -Signed-off-by: Jiri Kosina ---- - drivers/hid/usbhid/hiddev.c | 10 +++++----- - 1 file changed, 5 insertions(+), 5 deletions(-) - -diff --git a/drivers/hid/usbhid/hiddev.c b/drivers/hid/usbhid/hiddev.c -index 2f1ddca6f2e0..700145b15088 100644 ---- a/drivers/hid/usbhid/hiddev.c -+++ b/drivers/hid/usbhid/hiddev.c -@@ -516,13 +516,13 @@ static noinline int hiddev_ioctl_usage(struct hiddev *hiddev, unsigned int cmd, - goto inval; - } else if (uref->usage_index >= field->report_count) - goto inval; -- -- else if ((cmd == HIDIOCGUSAGES || cmd == HIDIOCSUSAGES) && -- (uref_multi->num_values > HID_MAX_MULTI_USAGES || -- uref->usage_index + uref_multi->num_values > field->report_count)) -- goto inval; - } - -+ if ((cmd == HIDIOCGUSAGES || cmd == HIDIOCSUSAGES) && -+ (uref_multi->num_values > HID_MAX_MULTI_USAGES || -+ uref->usage_index + uref_multi->num_values > field->report_count)) -+ goto inval; -+ - switch (cmd) { - case HIDIOCGUSAGE: - uref->value = field->value[uref->usage_index]; --- -2.5.5 - diff --git a/KEYS-potential-uninitialized-variable.patch b/KEYS-potential-uninitialized-variable.patch deleted file mode 100644 index 23cabbb2e..000000000 --- a/KEYS-potential-uninitialized-variable.patch +++ /dev/null @@ -1,30 +0,0 @@ -From 82a50018782f84e733e718d4b24e1653d19333be Mon Sep 17 00:00:00 2001 -From: Dan Carpenter -Date: Wed, 15 Jun 2016 09:31:45 -0400 -Subject: [PATCH] KEYS: potential uninitialized variable - -If __key_link_begin() failed then "edit" would be uninitialized. I've -added a check to fix that. - -Fixes: f70e2e06196a ('KEYS: Do preallocation for __key_link()') -Signed-off-by: Dan Carpenter ---- - security/keys/key.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/security/keys/key.c b/security/keys/key.c -index bd5a272f28a6..346fbf201c22 100644 ---- a/security/keys/key.c -+++ b/security/keys/key.c -@@ -597,7 +597,7 @@ int key_reject_and_link(struct key *key, - - mutex_unlock(&key_construction_mutex); - -- if (keyring) -+ if (keyring && link_ret == 0) - __key_link_end(keyring, &key->index_key, edit); - - /* wake up anyone waiting for a key to be constructed */ --- -2.5.5 - diff --git a/drm-nouveau-disp-sor-gf119-select-correct-sor-when.patch b/drm-nouveau-disp-sor-gf119-select-correct-sor-when.patch deleted file mode 100644 index 996b47918..000000000 --- a/drm-nouveau-disp-sor-gf119-select-correct-sor-when.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 217215041b9285af2193a755b56a8f3ed408bfe2 Mon Sep 17 00:00:00 2001 -From: Ben Skeggs -Date: Wed, 6 Jul 2016 06:50:36 +1000 -Subject: [PATCH] drm/nouveau/disp/sor/gf119: select correct sor when poking - training pattern - -Fixes a regression caused by a stupid thinko from "disp/sor/gf119: both -links use the same training register". - -Signed-off-by: Ben Skeggs -Cc: stable@vger.kernel.org ---- - drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgf119.c | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgf119.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgf119.c -index 22706c0..49bd5da 100644 ---- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgf119.c -+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgf119.c -@@ -40,7 +40,8 @@ static int - gf119_sor_dp_pattern(struct nvkm_output_dp *outp, int pattern) - { - struct nvkm_device *device = outp->base.disp->engine.subdev.device; -- nvkm_mask(device, 0x61c110, 0x0f0f0f0f, 0x01010101 * pattern); -+ const u32 soff = gf119_sor_soff(outp); -+ nvkm_mask(device, 0x61c110 + soff, 0x0f0f0f0f, 0x01010101 * pattern); - return 0; - } - diff --git a/kernel.spec b/kernel.spec index 5e316be0a..34b474019 100644 --- a/kernel.spec +++ b/kernel.spec @@ -42,7 +42,7 @@ Summary: The Linux kernel # For non-released -rc kernels, this will be appended after the rcX and # gitX tags, so a 3 here would become part of release "0.rcX.gitX.3" # -%global baserelease 301 +%global baserelease 300 %global fedora_build %{baserelease} # base_sublevel is the kernel version we're starting with and patching @@ -54,7 +54,7 @@ Summary: The Linux kernel %if 0%{?released_kernel} # Do we have a -stable update to apply? -%define stable_update 4 +%define stable_update 5 # Set rpm version accordingly %if 0%{?stable_update} %define stablerev %{stable_update} @@ -620,9 +620,6 @@ Patch721: tipc-fix-an-infoleak-in-tipc_nl_compat_link_dump.patch #CVE-2016-5244 rhbz 1343338 1343337 Patch722: rds-fix-an-infoleak-in-rds_inc_info_copy.txt -#CVE-2016-4470 rhbz 1341716 1346626 -Patch727: KEYS-potential-uninitialized-variable.patch - #rhbz 1338025 Patch728: hp-wmi-fix-wifi-cannot-be-hard-unblock.patch @@ -645,26 +642,9 @@ Patch815: 0015-drm-i915-gen9-Calculate-watermarks-during-atomic-che.patch Patch816: 0016-drm-i915-gen9-Reject-display-updates-that-exceed-wm-.patch Patch817: 0017-drm-i915-Remove-wm_config-from-dev_priv-intel_atomic.patch -#other drm/kms fixes (most Cc-ed stable) -Patch821: 0001-drm-mgag200-Black-screen-fix-for-G200e-rev-4.patch -Patch822: 0002-drm-nouveau-fbcon-fix-out-of-bounds-memory-accesses.patch -Patch823: 0003-drm-nouveau-disp-sor-gf119-both-links-use-the-same-t.patch -Patch824: 0004-drm-nouveau-disp-sor-gm107-training-pattern-register.patch -Patch825: 0005-i915-fbc-Disable-on-HSW-by-default-for-now.patch - -#CVE-2016-5829 rhbz 1350509 1350513 -Patch826: HID-hiddev-validate-num_values-for-HIDIOCGUSAGES-HID.patch - -#CVE-2016-1237 rhbz 1350845 1350847 -Patch830: posix_acl-Add-set_posix_acl.patch -Patch831: nfsd-check-permissions-when-setting-ACLs.patch - #CVE-2016-6156 rhbz 1353490 1353491 Patch832: platform-chrome-cros_ec_dev-double-fetch-bug-in-ioct.patch -#rbhz 1351205 -Patch833: drm-nouveau-disp-sor-gf119-select-correct-sor-when.patch - #rhbz 1346753 Patch834: qla2xxx-Fix-NULL-pointer-deref-in-QLA-interrupt.patch @@ -2208,6 +2188,9 @@ fi # # %changelog +* Wed Jul 27 2016 Josh Boyer - 4.6.5-300 +- Linux v4.6.5 + * Mon Jul 25 2016 Josh Boyer - CVE-2016-6136 race condition in auditsc.c (rhbz 1353533 1353534) diff --git a/nfsd-check-permissions-when-setting-ACLs.patch b/nfsd-check-permissions-when-setting-ACLs.patch deleted file mode 100644 index 37ed435e0..000000000 --- a/nfsd-check-permissions-when-setting-ACLs.patch +++ /dev/null @@ -1,154 +0,0 @@ -From 999653786df6954a31044528ac3f7a5dadca08f4 Mon Sep 17 00:00:00 2001 -From: Ben Hutchings -Date: Wed, 22 Jun 2016 19:43:35 +0100 -Subject: [PATCH] nfsd: check permissions when setting ACLs - -Use set_posix_acl, which includes proper permission checks, instead of -calling ->set_acl directly. Without this anyone may be able to grant -themselves permissions to a file by setting the ACL. - -Lock the inode to make the new checks atomic with respect to set_acl. -(Also, nfsd was the only caller of set_acl not locking the inode, so I -suspect this may fix other races.) - -This also simplifies the code, and ensures our ACLs are checked by -posix_acl_valid. - -The permission checks and the inode locking were lost with commit -4ac7249e, which changed nfsd to use the set_acl inode operation directly -instead of going through xattr handlers. - -Reported-by: David Sinquin -[agreunba@redhat.com: use set_posix_acl] -Fixes: 4ac7249e -Cc: Christoph Hellwig -Cc: Al Viro -Cc: stable@vger.kernel.org -Signed-off-by: J. Bruce Fields ---- - fs/nfsd/nfs2acl.c | 20 ++++++++++---------- - fs/nfsd/nfs3acl.c | 16 +++++++--------- - fs/nfsd/nfs4acl.c | 16 ++++++++-------- - 3 files changed, 25 insertions(+), 27 deletions(-) - -diff --git a/fs/nfsd/nfs2acl.c b/fs/nfsd/nfs2acl.c -index 1580ea6fd64d..d08cd88155c7 100644 ---- a/fs/nfsd/nfs2acl.c -+++ b/fs/nfsd/nfs2acl.c -@@ -104,22 +104,21 @@ static __be32 nfsacld_proc_setacl(struct svc_rqst * rqstp, - goto out; - - inode = d_inode(fh->fh_dentry); -- if (!IS_POSIXACL(inode) || !inode->i_op->set_acl) { -- error = -EOPNOTSUPP; -- goto out_errno; -- } - - error = fh_want_write(fh); - if (error) - goto out_errno; - -- error = inode->i_op->set_acl(inode, argp->acl_access, ACL_TYPE_ACCESS); -+ fh_lock(fh); -+ -+ error = set_posix_acl(inode, ACL_TYPE_ACCESS, argp->acl_access); - if (error) -- goto out_drop_write; -- error = inode->i_op->set_acl(inode, argp->acl_default, -- ACL_TYPE_DEFAULT); -+ goto out_drop_lock; -+ error = set_posix_acl(inode, ACL_TYPE_DEFAULT, argp->acl_default); - if (error) -- goto out_drop_write; -+ goto out_drop_lock; -+ -+ fh_unlock(fh); - - fh_drop_write(fh); - -@@ -131,7 +130,8 @@ out: - posix_acl_release(argp->acl_access); - posix_acl_release(argp->acl_default); - return nfserr; --out_drop_write: -+out_drop_lock: -+ fh_unlock(fh); - fh_drop_write(fh); - out_errno: - nfserr = nfserrno(error); -diff --git a/fs/nfsd/nfs3acl.c b/fs/nfsd/nfs3acl.c -index 01df4cd7c753..0c890347cde3 100644 ---- a/fs/nfsd/nfs3acl.c -+++ b/fs/nfsd/nfs3acl.c -@@ -95,22 +95,20 @@ static __be32 nfsd3_proc_setacl(struct svc_rqst * rqstp, - goto out; - - inode = d_inode(fh->fh_dentry); -- if (!IS_POSIXACL(inode) || !inode->i_op->set_acl) { -- error = -EOPNOTSUPP; -- goto out_errno; -- } - - error = fh_want_write(fh); - if (error) - goto out_errno; - -- error = inode->i_op->set_acl(inode, argp->acl_access, ACL_TYPE_ACCESS); -+ fh_lock(fh); -+ -+ error = set_posix_acl(inode, ACL_TYPE_ACCESS, argp->acl_access); - if (error) -- goto out_drop_write; -- error = inode->i_op->set_acl(inode, argp->acl_default, -- ACL_TYPE_DEFAULT); -+ goto out_drop_lock; -+ error = set_posix_acl(inode, ACL_TYPE_DEFAULT, argp->acl_default); - --out_drop_write: -+out_drop_lock: -+ fh_unlock(fh); - fh_drop_write(fh); - out_errno: - nfserr = nfserrno(error); -diff --git a/fs/nfsd/nfs4acl.c b/fs/nfsd/nfs4acl.c -index 6adabd6049b7..71292a0d6f09 100644 ---- a/fs/nfsd/nfs4acl.c -+++ b/fs/nfsd/nfs4acl.c -@@ -770,9 +770,6 @@ nfsd4_set_nfs4_acl(struct svc_rqst *rqstp, struct svc_fh *fhp, - dentry = fhp->fh_dentry; - inode = d_inode(dentry); - -- if (!inode->i_op->set_acl || !IS_POSIXACL(inode)) -- return nfserr_attrnotsupp; -- - if (S_ISDIR(inode->i_mode)) - flags = NFS4_ACL_DIR; - -@@ -782,16 +779,19 @@ nfsd4_set_nfs4_acl(struct svc_rqst *rqstp, struct svc_fh *fhp, - if (host_error < 0) - goto out_nfserr; - -- host_error = inode->i_op->set_acl(inode, pacl, ACL_TYPE_ACCESS); -+ fh_lock(fhp); -+ -+ host_error = set_posix_acl(inode, ACL_TYPE_ACCESS, pacl); - if (host_error < 0) -- goto out_release; -+ goto out_drop_lock; - - if (S_ISDIR(inode->i_mode)) { -- host_error = inode->i_op->set_acl(inode, dpacl, -- ACL_TYPE_DEFAULT); -+ host_error = set_posix_acl(inode, ACL_TYPE_DEFAULT, dpacl); - } - --out_release: -+out_drop_lock: -+ fh_unlock(fhp); -+ - posix_acl_release(pacl); - posix_acl_release(dpacl); - out_nfserr: --- -2.5.5 - diff --git a/posix_acl-Add-set_posix_acl.patch b/posix_acl-Add-set_posix_acl.patch deleted file mode 100644 index c067f7b85..000000000 --- a/posix_acl-Add-set_posix_acl.patch +++ /dev/null @@ -1,55 +0,0 @@ -From c463b51e8ea1ae47a7bb8cc2777eb550ad3273e2 Mon Sep 17 00:00:00 2001 -From: Andreas Gruenbacher -Date: Wed, 22 Jun 2016 23:57:25 +0200 -Subject: [PATCH] posix_acl: Add set_posix_acl - -Factor out part of posix_acl_xattr_set into a common function that takes -a posix_acl, which nfsd can also call. - -The prototype already exists in include/linux/posix_acl.h. - -Signed-off-by: Andreas Gruenbacher -Cc: stable@vger.kernel.org -Cc: Christoph Hellwig -Cc: Al Viro -Signed-off-by: J. Bruce Fields ---- - fs/posix_acl.c | 22 ++++++++++++++++++++++ - 1 file changed, 22 insertions(+) - -diff --git a/fs/posix_acl.c b/fs/posix_acl.c -index 711dd5170376..f30caace5b84 100644 ---- a/fs/posix_acl.c -+++ b/fs/posix_acl.c -@@ -786,6 +786,28 @@ posix_acl_xattr_get(const struct xattr_handler *handler, - return error; - } - -+int -+set_posix_acl(struct inode *inode, int type, struct posix_acl *acl) -+{ -+ if (!IS_POSIXACL(inode)) -+ return -EOPNOTSUPP; -+ if (!inode->i_op->set_acl) -+ return -EOPNOTSUPP; -+ -+ if (type == ACL_TYPE_DEFAULT && !S_ISDIR(inode->i_mode)) -+ return acl ? -EACCES : 0; -+ if (!inode_owner_or_capable(inode)) -+ return -EPERM; -+ -+ if (acl) { -+ int ret = posix_acl_valid(acl); -+ if (ret) -+ return ret; -+ } -+ return inode->i_op->set_acl(inode, acl, type); -+} -+EXPORT_SYMBOL(set_posix_acl); -+ - static int - posix_acl_xattr_set(const struct xattr_handler *handler, - struct dentry *dentry, const char *name, --- -2.5.5 - diff --git a/sources b/sources index 56a5aeb91..ee5257660 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ d2927020e24a76da4ab482a8bc3e9ef3 linux-4.6.tar.xz fd23b14b9d474c3dfacb6e8ee82d3a51 perf-man-4.6.tar.gz -c8ff415734155965ae7a2a85ef9c9e03 patch-4.6.4.xz +ad32c9ec1c69a99811d160d6014f9b2d patch-4.6.5.xz From fec4950a89fd8ffebdf7787c9bcaa961fa6ca7ba Mon Sep 17 00:00:00 2001 From: Peter Robinson Date: Thu, 28 Jul 2016 08:55:50 +0100 Subject: [PATCH 118/275] Fix IP Wireless driver filtering (rhbz 1356043) thanks lkundrak --- config-generic | 3 +-- filter-aarch64.sh | 2 +- filter-armv7hl.sh | 2 +- filter-i686.sh | 2 +- filter-ppc64.sh | 2 +- filter-ppc64le.sh | 2 +- filter-ppc64p7.sh | 2 +- kernel.spec | 3 +++ 8 files changed, 10 insertions(+), 8 deletions(-) diff --git a/config-generic b/config-generic index b4f8f091f..7dee247fa 100644 --- a/config-generic +++ b/config-generic @@ -5526,8 +5526,7 @@ CONFIG_INPUT_GP2A=m # CONFIG_INTEL_MENLOW is not set CONFIG_ENCLOSURE_SERVICES=m -# Disable temporarily while I (pbr) work out why this filters properly when build with rpmbuild but not in koji -# CONFIG_IPWIRELESS is not set +CONFIG_IPWIRELESS=m CONFIG_MEMSTICK=m # CONFIG_MEMSTICK_DEBUG is not set diff --git a/filter-aarch64.sh b/filter-aarch64.sh index cc560ca97..753358630 100644 --- a/filter-aarch64.sh +++ b/filter-aarch64.sh @@ -9,7 +9,7 @@ # modifications to the overrides below. If something should be removed across # all arches, remove it in the default instead of per-arch. -driverdirs="atm auxdisplay bcma bluetooth firewire fmc infiniband isdn leds media memstick message mmc mtd mwave nfc ntb pcmcia platform power ssb staging uio uwb w1" +driverdirs="atm auxdisplay bcma bluetooth firewire fmc infiniband isdn leds media memstick message mmc mtd mwave nfc ntb pcmcia platform power ssb staging tty uio uwb w1" ethdrvs="3com adaptec arc alteon atheros broadcom cadence calxeda chelsio cisco dec dlink emulex icplus marvell micrel myricom neterion nvidia oki-semi packetengines qlogic rdc renesas sfc silan sis smsc stmicro sun tehuti ti via wiznet xircom" diff --git a/filter-armv7hl.sh b/filter-armv7hl.sh index 0ae6d925b..31c277c6d 100644 --- a/filter-armv7hl.sh +++ b/filter-armv7hl.sh @@ -9,7 +9,7 @@ # modifications to the overrides below. If something should be removed across # all arches, remove it in the default instead of per-arch. -driverdirs="atm auxdisplay bcma bluetooth firewire fmc infiniband isdn media memstick message mwave nfc ntb pcmcia platform ssb staging uio uwb w1" +driverdirs="atm auxdisplay bcma bluetooth firewire fmc infiniband isdn media memstick message mwave nfc ntb pcmcia platform ssb staging tty uio uwb w1" ethdrvs="3com adaptec alteon altera amd atheros broadcom cadence chelsio cisco dec dlink emulex icplus mellanox micrel myricom natsemi neterion nvidia oki-semi packetengines qlogic rdc renesas sfc silan sis sun tehuti via wiznet xircom" diff --git a/filter-i686.sh b/filter-i686.sh index dc6f42f5a..3a9f7b806 100644 --- a/filter-i686.sh +++ b/filter-i686.sh @@ -9,6 +9,6 @@ # modifications to the overrides below. If something should be removed across # all arches, remove it in the default instead of per-arch. -driverdirs="atm auxdisplay bcma bluetooth firewire fmc infiniband isdn leds media memstick mfd mmc mtd mwave nfc ntb pcmcia platform power ssb staging uio uwb w1" +driverdirs="atm auxdisplay bcma bluetooth firewire fmc infiniband isdn leds media memstick mfd mmc mtd mwave nfc ntb pcmcia platform power ssb staging tty uio uwb w1" singlemods="ntb_netdev iscsi_ibft iscsi_boot_sysfs megaraid pmcraid qla1280 9pnet_rdma rpcrdma hid-picolcd hid-prodikeys hwa-hc hwpoison-inject hid-sensor-hub hid-sensor-magn-3d hid-sensor-incl-3d hid-sensor-gyro-3d hid-sensor-iio-common hid-sensor-accel-3d hid-sensor-trigger hid-sensor-als hid-sensor-rotation target_core_user sbp_target" diff --git a/filter-ppc64.sh b/filter-ppc64.sh index e4990bbcb..b367bc673 100644 --- a/filter-ppc64.sh +++ b/filter-ppc64.sh @@ -9,6 +9,6 @@ # modifications to the overrides below. If something should be removed across # all arches, remove it in the default instead of per-arch. -driverdirs="atm auxdisplay bcma bluetooth firewire fmc infiniband isdn leds media memstick message mmc mtd mwave nfc ntb pcmcia platform power ssb staging uio uwb w1" +driverdirs="atm auxdisplay bcma bluetooth firewire fmc infiniband isdn leds media memstick message mmc mtd mwave nfc ntb pcmcia platform power ssb staging tty uio uwb w1" singlemods="ntb_netdev iscsi_ibft iscsi_boot_sysfs megaraid pmcraid qla1280 9pnet_rdma rpcrdma hid-picolcd hid-prodikeys hwa-hc hwpoison-inject target_core_user sbp_target" diff --git a/filter-ppc64le.sh b/filter-ppc64le.sh index e44c88ec5..9469b6636 100644 --- a/filter-ppc64le.sh +++ b/filter-ppc64le.sh @@ -9,6 +9,6 @@ # modifications to the overrides below. If something should be removed across # all arches, remove it in the default instead of per-arch. -driverdirs="atm auxdisplay bcma bluetooth firewire fmc infiniband isdn leds media memstick message mmc mtd mwave nfc ntb pcmcia platform power ssb staging uio uwb w1" +driverdirs="atm auxdisplay bcma bluetooth firewire fmc infiniband isdn leds media memstick message mmc mtd mwave nfc ntb pcmcia platform power ssb staging tty uio uwb w1" singlemods="ntb_netdev iscsi_ibft iscsi_boot_sysfs megaraid pmcraid qla1280 9pnet_rdma rpcrdma hid-picolcd hid-prodikeys hwa-hc hwpoison-inject target_core_user sbp_target" diff --git a/filter-ppc64p7.sh b/filter-ppc64p7.sh index b499f0e69..d0ad47fba 100644 --- a/filter-ppc64p7.sh +++ b/filter-ppc64p7.sh @@ -9,6 +9,6 @@ # modifications to the overrides below. If something should be removed across # all arches, remove it in the default instead of per-arch. -driverdirs="atm auxdisplay bcma bluetooth firewire fmc infiniband isdn leds media memstick message mmc mtd mwave nfc ntb pcmcia platform power ssb staging uio uwb w1" +driverdirs="atm auxdisplay bcma bluetooth firewire fmc infiniband isdn leds media memstick message mmc mtd mwave nfc ntb pcmcia platform power ssb staging tty uio uwb w1" singlemods="ntb_netdev iscsi_ibft iscsi_boot_sysfs megaraid pmcraid qla1280 9pnet_rdma rpcrdma hid-picolcd hid-prodikeys hwa-hc hwpoison-inject target_core_user sbp_target" diff --git a/kernel.spec b/kernel.spec index 34b474019..623c52816 100644 --- a/kernel.spec +++ b/kernel.spec @@ -2188,6 +2188,9 @@ fi # # %changelog +* Thu Jul 28 2016 Peter Robinson +- Fix IP Wireless driver filtering (rhbz 1356043) thanks lkundrak + * Wed Jul 27 2016 Josh Boyer - 4.6.5-300 - Linux v4.6.5 From 0d42ed5eef5557821a50ef583a781ab4842d3896 Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Thu, 28 Jul 2016 09:15:56 -0400 Subject: [PATCH 119/275] CVE-2016-5412 powerpc: kvm: Infinite loop in HV mode (rhbz 1349916 1361040) --- kernel.spec | 7 + ...ppc-Book3S-HV-Pull-out-TM-state-save.patch | 506 ++++++++++++++++++ kvm-ppc-Book3S-HV-Save-restore-TM-state.patch | 67 +++ 3 files changed, 580 insertions(+) create mode 100644 kvm-ppc-Book3S-HV-Pull-out-TM-state-save.patch create mode 100644 kvm-ppc-Book3S-HV-Save-restore-TM-state.patch diff --git a/kernel.spec b/kernel.spec index 623c52816..843ee47d5 100644 --- a/kernel.spec +++ b/kernel.spec @@ -663,6 +663,10 @@ Patch840: airspy-fix-error-logic-during-device-register.patch #CVE-2016-6136 rhbz 1353533 1353534 Patch841: audit-fix-a-double-fetch-in-audit_log_single_execve_arg.patch +#CVE-2016-5412 rhbz 1349916 1361040 +Patch842: kvm-ppc-Book3S-HV-Pull-out-TM-state-save.patch +Patch843: kvm-ppc-Book3S-HV-Save-restore-TM-state.patch + # END OF PATCH DEFINITIONS %endif @@ -2188,6 +2192,9 @@ fi # # %changelog +* Thu Jul 28 2016 Josh Boyer +- CVE-2016-5412 powerpc: kvm: Infinite loop in HV mode (rhbz 1349916 1361040) + * Thu Jul 28 2016 Peter Robinson - Fix IP Wireless driver filtering (rhbz 1356043) thanks lkundrak diff --git a/kvm-ppc-Book3S-HV-Pull-out-TM-state-save.patch b/kvm-ppc-Book3S-HV-Pull-out-TM-state-save.patch new file mode 100644 index 000000000..b4259375f --- /dev/null +++ b/kvm-ppc-Book3S-HV-Pull-out-TM-state-save.patch @@ -0,0 +1,506 @@ +Subject: [PATCH 1/2] KVM: PPC: Book3S HV: Pull out TM state save/restore into separate procedures +From: Paul Mackerras +Date: 2016-07-28 6:11:18 + +This moves the transactional memory state save and restore sequences +out of the guest entry/exit paths into separate procedures. This is +so that these sequences can be used in going into and out of nap +in a subsequent patch. + +The only code changes here are (a) saving and restore LR on the +stack, since these new procedures get called with a bl instruction, +(b) explicitly saving r1 into the PACA instead of assuming that +HSTATE_HOST_R1(r13) is already set, and (c) removing an unnecessary +and redundant setting of MSR[TM] that should have been removed by +commit 9d4d0bdd9e0a ("KVM: PPC: Book3S HV: Add transactional memory +support", 2013-09-24) but wasn't. + +Cc: stable@vger.kernel.org # v3.15+ +Signed-off-by: Paul Mackerras +--- + arch/powerpc/kvm/book3s_hv_rmhandlers.S | 449 +++++++++++++++++--------------- + 1 file changed, 237 insertions(+), 212 deletions(-) + +diff --git a/arch/powerpc/kvm/book3s_hv_rmhandlers.S b/arch/powerpc/kvm/book3s_hv_rmhandlers.S +index 0d246fc..cfa4031 100644 +--- a/arch/powerpc/kvm/book3s_hv_rmhandlers.S ++++ b/arch/powerpc/kvm/book3s_hv_rmhandlers.S +@@ -689,112 +689,8 @@ END_FTR_SECTION_IFCLR(CPU_FTR_ARCH_207S) + + #ifdef CONFIG_PPC_TRANSACTIONAL_MEM + BEGIN_FTR_SECTION +- b skip_tm +-END_FTR_SECTION_IFCLR(CPU_FTR_TM) +- +- /* Turn on TM/FP/VSX/VMX so we can restore them. */ +- mfmsr r5 +- li r6, MSR_TM >> 32 +- sldi r6, r6, 32 +- or r5, r5, r6 +- ori r5, r5, MSR_FP +- oris r5, r5, (MSR_VEC | MSR_VSX)@h +- mtmsrd r5 +- +- /* +- * The user may change these outside of a transaction, so they must +- * always be context switched. +- */ +- ld r5, VCPU_TFHAR(r4) +- ld r6, VCPU_TFIAR(r4) +- ld r7, VCPU_TEXASR(r4) +- mtspr SPRN_TFHAR, r5 +- mtspr SPRN_TFIAR, r6 +- mtspr SPRN_TEXASR, r7 +- +- ld r5, VCPU_MSR(r4) +- rldicl. r5, r5, 64 - MSR_TS_S_LG, 62 +- beq skip_tm /* TM not active in guest */ +- +- /* Make sure the failure summary is set, otherwise we'll program check +- * when we trechkpt. It's possible that this might have been not set +- * on a kvmppc_set_one_reg() call but we shouldn't let this crash the +- * host. +- */ +- oris r7, r7, (TEXASR_FS)@h +- mtspr SPRN_TEXASR, r7 +- +- /* +- * We need to load up the checkpointed state for the guest. +- * We need to do this early as it will blow away any GPRs, VSRs and +- * some SPRs. +- */ +- +- mr r31, r4 +- addi r3, r31, VCPU_FPRS_TM +- bl load_fp_state +- addi r3, r31, VCPU_VRS_TM +- bl load_vr_state +- mr r4, r31 +- lwz r7, VCPU_VRSAVE_TM(r4) +- mtspr SPRN_VRSAVE, r7 +- +- ld r5, VCPU_LR_TM(r4) +- lwz r6, VCPU_CR_TM(r4) +- ld r7, VCPU_CTR_TM(r4) +- ld r8, VCPU_AMR_TM(r4) +- ld r9, VCPU_TAR_TM(r4) +- mtlr r5 +- mtcr r6 +- mtctr r7 +- mtspr SPRN_AMR, r8 +- mtspr SPRN_TAR, r9 +- +- /* +- * Load up PPR and DSCR values but don't put them in the actual SPRs +- * till the last moment to avoid running with userspace PPR and DSCR for +- * too long. +- */ +- ld r29, VCPU_DSCR_TM(r4) +- ld r30, VCPU_PPR_TM(r4) +- +- std r2, PACATMSCRATCH(r13) /* Save TOC */ +- +- /* Clear the MSR RI since r1, r13 are all going to be foobar. */ +- li r5, 0 +- mtmsrd r5, 1 +- +- /* Load GPRs r0-r28 */ +- reg = 0 +- .rept 29 +- ld reg, VCPU_GPRS_TM(reg)(r31) +- reg = reg + 1 +- .endr +- +- mtspr SPRN_DSCR, r29 +- mtspr SPRN_PPR, r30 +- +- /* Load final GPRs */ +- ld 29, VCPU_GPRS_TM(29)(r31) +- ld 30, VCPU_GPRS_TM(30)(r31) +- ld 31, VCPU_GPRS_TM(31)(r31) +- +- /* TM checkpointed state is now setup. All GPRs are now volatile. */ +- TRECHKPT +- +- /* Now let's get back the state we need. */ +- HMT_MEDIUM +- GET_PACA(r13) +- ld r29, HSTATE_DSCR(r13) +- mtspr SPRN_DSCR, r29 +- ld r4, HSTATE_KVM_VCPU(r13) +- ld r1, HSTATE_HOST_R1(r13) +- ld r2, PACATMSCRATCH(r13) +- +- /* Set the MSR RI since we have our registers back. */ +- li r5, MSR_RI +- mtmsrd r5, 1 +-skip_tm: ++ bl kvmppc_restore_tm ++END_FTR_SECTION_IFSET(CPU_FTR_TM) + #endif + + /* Load guest PMU registers */ +@@ -875,12 +771,6 @@ BEGIN_FTR_SECTION + /* Skip next section on POWER7 */ + b 8f + END_FTR_SECTION_IFCLR(CPU_FTR_ARCH_207S) +- /* Turn on TM so we can access TFHAR/TFIAR/TEXASR */ +- mfmsr r8 +- li r0, 1 +- rldimi r8, r0, MSR_TM_LG, 63-MSR_TM_LG +- mtmsrd r8 +- + /* Load up POWER8-specific registers */ + ld r5, VCPU_IAMR(r4) + lwz r6, VCPU_PSPB(r4) +@@ -1470,106 +1360,8 @@ END_FTR_SECTION_IFCLR(CPU_FTR_ARCH_207S) + + #ifdef CONFIG_PPC_TRANSACTIONAL_MEM + BEGIN_FTR_SECTION +- b 2f +-END_FTR_SECTION_IFCLR(CPU_FTR_TM) +- /* Turn on TM. */ +- mfmsr r8 +- li r0, 1 +- rldimi r8, r0, MSR_TM_LG, 63-MSR_TM_LG +- mtmsrd r8 +- +- ld r5, VCPU_MSR(r9) +- rldicl. r5, r5, 64 - MSR_TS_S_LG, 62 +- beq 1f /* TM not active in guest. */ +- +- li r3, TM_CAUSE_KVM_RESCHED +- +- /* Clear the MSR RI since r1, r13 are all going to be foobar. */ +- li r5, 0 +- mtmsrd r5, 1 +- +- /* All GPRs are volatile at this point. */ +- TRECLAIM(R3) +- +- /* Temporarily store r13 and r9 so we have some regs to play with */ +- SET_SCRATCH0(r13) +- GET_PACA(r13) +- std r9, PACATMSCRATCH(r13) +- ld r9, HSTATE_KVM_VCPU(r13) +- +- /* Get a few more GPRs free. */ +- std r29, VCPU_GPRS_TM(29)(r9) +- std r30, VCPU_GPRS_TM(30)(r9) +- std r31, VCPU_GPRS_TM(31)(r9) +- +- /* Save away PPR and DSCR soon so don't run with user values. */ +- mfspr r31, SPRN_PPR +- HMT_MEDIUM +- mfspr r30, SPRN_DSCR +- ld r29, HSTATE_DSCR(r13) +- mtspr SPRN_DSCR, r29 +- +- /* Save all but r9, r13 & r29-r31 */ +- reg = 0 +- .rept 29 +- .if (reg != 9) && (reg != 13) +- std reg, VCPU_GPRS_TM(reg)(r9) +- .endif +- reg = reg + 1 +- .endr +- /* ... now save r13 */ +- GET_SCRATCH0(r4) +- std r4, VCPU_GPRS_TM(13)(r9) +- /* ... and save r9 */ +- ld r4, PACATMSCRATCH(r13) +- std r4, VCPU_GPRS_TM(9)(r9) +- +- /* Reload stack pointer and TOC. */ +- ld r1, HSTATE_HOST_R1(r13) +- ld r2, PACATOC(r13) +- +- /* Set MSR RI now we have r1 and r13 back. */ +- li r5, MSR_RI +- mtmsrd r5, 1 +- +- /* Save away checkpinted SPRs. */ +- std r31, VCPU_PPR_TM(r9) +- std r30, VCPU_DSCR_TM(r9) +- mflr r5 +- mfcr r6 +- mfctr r7 +- mfspr r8, SPRN_AMR +- mfspr r10, SPRN_TAR +- std r5, VCPU_LR_TM(r9) +- stw r6, VCPU_CR_TM(r9) +- std r7, VCPU_CTR_TM(r9) +- std r8, VCPU_AMR_TM(r9) +- std r10, VCPU_TAR_TM(r9) +- +- /* Restore r12 as trap number. */ +- lwz r12, VCPU_TRAP(r9) +- +- /* Save FP/VSX. */ +- addi r3, r9, VCPU_FPRS_TM +- bl store_fp_state +- addi r3, r9, VCPU_VRS_TM +- bl store_vr_state +- mfspr r6, SPRN_VRSAVE +- stw r6, VCPU_VRSAVE_TM(r9) +-1: +- /* +- * We need to save these SPRs after the treclaim so that the software +- * error code is recorded correctly in the TEXASR. Also the user may +- * change these outside of a transaction, so they must always be +- * context switched. +- */ +- mfspr r5, SPRN_TFHAR +- mfspr r6, SPRN_TFIAR +- mfspr r7, SPRN_TEXASR +- std r5, VCPU_TFHAR(r9) +- std r6, VCPU_TFIAR(r9) +- std r7, VCPU_TEXASR(r9) +-2: ++ bl kvmppc_save_tm ++END_FTR_SECTION_IFSET(CPU_FTR_TM) + #endif + + /* Increment yield count if they have a VPA */ +@@ -2694,6 +2486,239 @@ END_FTR_SECTION_IFSET(CPU_FTR_ALTIVEC) + mr r4,r31 + blr + ++#ifdef CONFIG_PPC_TRANSACTIONAL_MEM ++/* ++ * Save transactional state and TM-related registers. ++ * Called with r9 pointing to the vcpu struct. ++ * This can modify all checkpointed registers, but ++ * restores r1, r2 and r9 (vcpu pointer) before exit. ++ */ ++kvmppc_save_tm: ++ mflr r0 ++ std r0, PPC_LR_STKOFF(r1) ++ ++ /* Turn on TM. */ ++ mfmsr r8 ++ li r0, 1 ++ rldimi r8, r0, MSR_TM_LG, 63-MSR_TM_LG ++ mtmsrd r8 ++ ++ ld r5, VCPU_MSR(r9) ++ rldicl. r5, r5, 64 - MSR_TS_S_LG, 62 ++ beq 1f /* TM not active in guest. */ ++ ++ std r1, HSTATE_HOST_R1(r13) ++ li r3, TM_CAUSE_KVM_RESCHED ++ ++ /* Clear the MSR RI since r1, r13 are all going to be foobar. */ ++ li r5, 0 ++ mtmsrd r5, 1 ++ ++ /* All GPRs are volatile at this point. */ ++ TRECLAIM(R3) ++ ++ /* Temporarily store r13 and r9 so we have some regs to play with */ ++ SET_SCRATCH0(r13) ++ GET_PACA(r13) ++ std r9, PACATMSCRATCH(r13) ++ ld r9, HSTATE_KVM_VCPU(r13) ++ ++ /* Get a few more GPRs free. */ ++ std r29, VCPU_GPRS_TM(29)(r9) ++ std r30, VCPU_GPRS_TM(30)(r9) ++ std r31, VCPU_GPRS_TM(31)(r9) ++ ++ /* Save away PPR and DSCR soon so don't run with user values. */ ++ mfspr r31, SPRN_PPR ++ HMT_MEDIUM ++ mfspr r30, SPRN_DSCR ++ ld r29, HSTATE_DSCR(r13) ++ mtspr SPRN_DSCR, r29 ++ ++ /* Save all but r9, r13 & r29-r31 */ ++ reg = 0 ++ .rept 29 ++ .if (reg != 9) && (reg != 13) ++ std reg, VCPU_GPRS_TM(reg)(r9) ++ .endif ++ reg = reg + 1 ++ .endr ++ /* ... now save r13 */ ++ GET_SCRATCH0(r4) ++ std r4, VCPU_GPRS_TM(13)(r9) ++ /* ... and save r9 */ ++ ld r4, PACATMSCRATCH(r13) ++ std r4, VCPU_GPRS_TM(9)(r9) ++ ++ /* Reload stack pointer and TOC. */ ++ ld r1, HSTATE_HOST_R1(r13) ++ ld r2, PACATOC(r13) ++ ++ /* Set MSR RI now we have r1 and r13 back. */ ++ li r5, MSR_RI ++ mtmsrd r5, 1 ++ ++ /* Save away checkpinted SPRs. */ ++ std r31, VCPU_PPR_TM(r9) ++ std r30, VCPU_DSCR_TM(r9) ++ mflr r5 ++ mfcr r6 ++ mfctr r7 ++ mfspr r8, SPRN_AMR ++ mfspr r10, SPRN_TAR ++ std r5, VCPU_LR_TM(r9) ++ stw r6, VCPU_CR_TM(r9) ++ std r7, VCPU_CTR_TM(r9) ++ std r8, VCPU_AMR_TM(r9) ++ std r10, VCPU_TAR_TM(r9) ++ ++ /* Restore r12 as trap number. */ ++ lwz r12, VCPU_TRAP(r9) ++ ++ /* Save FP/VSX. */ ++ addi r3, r9, VCPU_FPRS_TM ++ bl store_fp_state ++ addi r3, r9, VCPU_VRS_TM ++ bl store_vr_state ++ mfspr r6, SPRN_VRSAVE ++ stw r6, VCPU_VRSAVE_TM(r9) ++1: ++ /* ++ * We need to save these SPRs after the treclaim so that the software ++ * error code is recorded correctly in the TEXASR. Also the user may ++ * change these outside of a transaction, so they must always be ++ * context switched. ++ */ ++ mfspr r5, SPRN_TFHAR ++ mfspr r6, SPRN_TFIAR ++ mfspr r7, SPRN_TEXASR ++ std r5, VCPU_TFHAR(r9) ++ std r6, VCPU_TFIAR(r9) ++ std r7, VCPU_TEXASR(r9) ++ ++ ld r0, PPC_LR_STKOFF(r1) ++ mtlr r0 ++ blr ++ ++/* ++ * Restore transactional state and TM-related registers. ++ * Called with r4 pointing to the vcpu struct. ++ * This potentially modifies all checkpointed registers. ++ * It restores r1, r2, r4 from the PACA. ++ */ ++kvmppc_restore_tm: ++ mflr r0 ++ std r0, PPC_LR_STKOFF(r1) ++ ++ /* Turn on TM/FP/VSX/VMX so we can restore them. */ ++ mfmsr r5 ++ li r6, MSR_TM >> 32 ++ sldi r6, r6, 32 ++ or r5, r5, r6 ++ ori r5, r5, MSR_FP ++ oris r5, r5, (MSR_VEC | MSR_VSX)@h ++ mtmsrd r5 ++ ++ /* ++ * The user may change these outside of a transaction, so they must ++ * always be context switched. ++ */ ++ ld r5, VCPU_TFHAR(r4) ++ ld r6, VCPU_TFIAR(r4) ++ ld r7, VCPU_TEXASR(r4) ++ mtspr SPRN_TFHAR, r5 ++ mtspr SPRN_TFIAR, r6 ++ mtspr SPRN_TEXASR, r7 ++ ++ ld r5, VCPU_MSR(r4) ++ rldicl. r5, r5, 64 - MSR_TS_S_LG, 62 ++ beqlr /* TM not active in guest */ ++ std r1, HSTATE_HOST_R1(r13) ++ ++ /* Make sure the failure summary is set, otherwise we'll program check ++ * when we trechkpt. It's possible that this might have been not set ++ * on a kvmppc_set_one_reg() call but we shouldn't let this crash the ++ * host. ++ */ ++ oris r7, r7, (TEXASR_FS)@h ++ mtspr SPRN_TEXASR, r7 ++ ++ /* ++ * We need to load up the checkpointed state for the guest. ++ * We need to do this early as it will blow away any GPRs, VSRs and ++ * some SPRs. ++ */ ++ ++ mr r31, r4 ++ addi r3, r31, VCPU_FPRS_TM ++ bl load_fp_state ++ addi r3, r31, VCPU_VRS_TM ++ bl load_vr_state ++ mr r4, r31 ++ lwz r7, VCPU_VRSAVE_TM(r4) ++ mtspr SPRN_VRSAVE, r7 ++ ++ ld r5, VCPU_LR_TM(r4) ++ lwz r6, VCPU_CR_TM(r4) ++ ld r7, VCPU_CTR_TM(r4) ++ ld r8, VCPU_AMR_TM(r4) ++ ld r9, VCPU_TAR_TM(r4) ++ mtlr r5 ++ mtcr r6 ++ mtctr r7 ++ mtspr SPRN_AMR, r8 ++ mtspr SPRN_TAR, r9 ++ ++ /* ++ * Load up PPR and DSCR values but don't put them in the actual SPRs ++ * till the last moment to avoid running with userspace PPR and DSCR for ++ * too long. ++ */ ++ ld r29, VCPU_DSCR_TM(r4) ++ ld r30, VCPU_PPR_TM(r4) ++ ++ std r2, PACATMSCRATCH(r13) /* Save TOC */ ++ ++ /* Clear the MSR RI since r1, r13 are all going to be foobar. */ ++ li r5, 0 ++ mtmsrd r5, 1 ++ ++ /* Load GPRs r0-r28 */ ++ reg = 0 ++ .rept 29 ++ ld reg, VCPU_GPRS_TM(reg)(r31) ++ reg = reg + 1 ++ .endr ++ ++ mtspr SPRN_DSCR, r29 ++ mtspr SPRN_PPR, r30 ++ ++ /* Load final GPRs */ ++ ld 29, VCPU_GPRS_TM(29)(r31) ++ ld 30, VCPU_GPRS_TM(30)(r31) ++ ld 31, VCPU_GPRS_TM(31)(r31) ++ ++ /* TM checkpointed state is now setup. All GPRs are now volatile. */ ++ TRECHKPT ++ ++ /* Now let's get back the state we need. */ ++ HMT_MEDIUM ++ GET_PACA(r13) ++ ld r29, HSTATE_DSCR(r13) ++ mtspr SPRN_DSCR, r29 ++ ld r4, HSTATE_KVM_VCPU(r13) ++ ld r1, HSTATE_HOST_R1(r13) ++ ld r2, PACATMSCRATCH(r13) ++ ++ /* Set the MSR RI since we have our registers back. */ ++ li r5, MSR_RI ++ mtmsrd r5, 1 ++ ++ ld r0, PPC_LR_STKOFF(r1) ++ mtlr r0 ++ blr ++#endif ++ + /* + * We come here if we get any exception or interrupt while we are + * executing host real mode code while in guest MMU context. +-- +2.8.0.rc3 diff --git a/kvm-ppc-Book3S-HV-Save-restore-TM-state.patch b/kvm-ppc-Book3S-HV-Save-restore-TM-state.patch new file mode 100644 index 000000000..f63aa795d --- /dev/null +++ b/kvm-ppc-Book3S-HV-Save-restore-TM-state.patch @@ -0,0 +1,67 @@ +Subject: [PATCH 2/2] KVM: PPC: Book3S HV: Save/restore TM state in H_CEDE +From: Paul Mackerras +Date: 2016-07-28 6:11:19 + +It turns out that if the guest does a H_CEDE while the CPU is in +a transactional state, and the H_CEDE does a nap, and the nap +loses the architected state of the CPU (which is is allowed to do), +then we lose the checkpointed state of the virtual CPU. In addition, +the transactional-memory state recorded in the MSR gets reset back +to non-transactional, and when we try to return to the guest, we take +a TM bad thing type of program interrupt because we are trying to +transition from non-transactional to transactional with a hrfid +instruction, which is not permitted. + +The result of the program interrupt occurring at that point is that +the host CPU will hang in an infinite loop with interrupts disabled. +Thus this is a denial of service vulnerability in the host which can +be triggered by any guest (and depending on the guest kernel, it can +potentially triggered by unprivileged userspace in the guest). + +This vulnerability has been assigned the ID CVE-2016-5412. + +To fix this, we save the TM state before napping and restore it +on exit from the nap, when handling a H_CEDE in real mode. The +case where H_CEDE exits to host virtual mode is already OK (as are +other hcalls which exit to host virtual mode) because the exit +path saves the TM state. + +Cc: stable@vger.kernel.org # v3.15+ +Signed-off-by: Paul Mackerras +--- + arch/powerpc/kvm/book3s_hv_rmhandlers.S | 13 +++++++++++++ + 1 file changed, 13 insertions(+) + +diff --git a/arch/powerpc/kvm/book3s_hv_rmhandlers.S b/arch/powerpc/kvm/book3s_hv_rmhandlers.S +index cfa4031..543124f 100644 +--- a/arch/powerpc/kvm/book3s_hv_rmhandlers.S ++++ b/arch/powerpc/kvm/book3s_hv_rmhandlers.S +@@ -2093,6 +2093,13 @@ _GLOBAL(kvmppc_h_cede) /* r3 = vcpu pointer, r11 = msr, r13 = paca */ + /* save FP state */ + bl kvmppc_save_fp + ++#ifdef CONFIG_PPC_TRANSACTIONAL_MEM ++BEGIN_FTR_SECTION ++ ld r9, HSTATE_KVM_VCPU(r13) ++ bl kvmppc_save_tm ++END_FTR_SECTION_IFSET(CPU_FTR_TM) ++#endif ++ + /* + * Set DEC to the smaller of DEC and HDEC, so that we wake + * no later than the end of our timeslice (HDEC interrupts +@@ -2169,6 +2176,12 @@ kvm_end_cede: + bl kvmhv_accumulate_time + #endif + ++#ifdef CONFIG_PPC_TRANSACTIONAL_MEM ++BEGIN_FTR_SECTION ++ bl kvmppc_restore_tm ++END_FTR_SECTION_IFSET(CPU_FTR_TM) ++#endif ++ + /* load up FP state */ + bl kvmppc_load_fp + +-- +2.8.0.rc3 From 80b44af41af09604f181ac7d4eeebbf476bfe05a Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Tue, 2 Aug 2016 14:07:58 +0200 Subject: [PATCH 120/275] Sync skylake hdaudio __unclaimed_reg WARN_ON fix with latest upstream version - Drop drm-i915-skl-Add-support-for-the-SAGV-fix-underrun-hangs.patch for now --- ...remove-controller-dependency-on-i915.patch | 44 ---- ...-audio-powerwell-for-HD-Audio-regist.patch | 64 +++++ ...port-for-the-SAGV-fix-underrun-hangs.patch | 230 ------------------ kernel.spec | 7 +- 4 files changed, 69 insertions(+), 276 deletions(-) delete mode 100644 Revert-ALSA-hda-remove-controller-dependency-on-i915.patch create mode 100644 drm-i915-Acquire-audio-powerwell-for-HD-Audio-regist.patch delete mode 100644 drm-i915-skl-Add-support-for-the-SAGV-fix-underrun-hangs.patch diff --git a/Revert-ALSA-hda-remove-controller-dependency-on-i915.patch b/Revert-ALSA-hda-remove-controller-dependency-on-i915.patch deleted file mode 100644 index 339f84c40..000000000 --- a/Revert-ALSA-hda-remove-controller-dependency-on-i915.patch +++ /dev/null @@ -1,44 +0,0 @@ -From c0afc8df2c54301034e0ad8a537c7b817b72e06a Mon Sep 17 00:00:00 2001 -From: Hans de Goede -Date: Tue, 12 Jul 2016 22:40:01 +0200 -Subject: [PATCH] Revert "ALSA: hda - remove controller dependency on i915 - power well for SKL" - -This reverts commit 03b135cebc47d75ea2dc346770374ab741966955. ---- - sound/pci/hda/hda_intel.c | 4 +++- - sound/pci/hda/patch_hdmi.c | 3 +-- - 2 files changed, 4 insertions(+), 3 deletions(-) - -diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c -index 94089fc71884..139ab83626fd 100644 ---- a/sound/pci/hda/hda_intel.c -+++ b/sound/pci/hda/hda_intel.c -@@ -361,7 +361,9 @@ enum { - #define CONTROLLER_IN_GPU(pci) (((pci)->device == 0x0a0c) || \ - ((pci)->device == 0x0c0c) || \ - ((pci)->device == 0x0d0c) || \ -- ((pci)->device == 0x160c)) -+ ((pci)->device == 0x160c) || \ -+ ((pci)->device == 0xa170) || \ -+ ((pci)->device == 0x9d70)) - - #define IS_SKL(pci) ((pci)->vendor == 0x8086 && (pci)->device == 0xa170) - #define IS_SKL_LP(pci) ((pci)->vendor == 0x8086 && (pci)->device == 0x9d70) -diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c -index a010d704e0e2..6ee685a49a08 100644 ---- a/sound/pci/hda/patch_hdmi.c -+++ b/sound/pci/hda/patch_hdmi.c -@@ -2285,8 +2285,7 @@ static int patch_generic_hdmi(struct hda_codec *codec) - * can cover the codec power request, and so need not set this flag. - * For previous platforms, there is no such power well feature. - */ -- if (is_valleyview_plus(codec) || is_skylake(codec) || -- is_broxton(codec)) -+ if (is_valleyview_plus(codec) || is_broxton(codec)) - codec->core.link_power_control = 1; - - if (hdmi_parse_codec(codec) < 0) { --- -2.7.4 - diff --git a/drm-i915-Acquire-audio-powerwell-for-HD-Audio-regist.patch b/drm-i915-Acquire-audio-powerwell-for-HD-Audio-regist.patch new file mode 100644 index 000000000..a5dc6f3a2 --- /dev/null +++ b/drm-i915-Acquire-audio-powerwell-for-HD-Audio-regist.patch @@ -0,0 +1,64 @@ +From 74f829a6e44fe217b6161f8935524fc807be0648 Mon Sep 17 00:00:00 2001 +From: Chris Wilson +Date: Sat, 9 Jul 2016 11:01:20 +0100 +Subject: [PATCH] drm/i915: Acquire audio powerwell for HD-Audio registers + +On Haswell/Broadwell, the HD-Audio block is inside the HDMI/display +power well and so the sna-hda audio codec acquires the display power +well while it is operational. However, Skylake separates the powerwells +again, but yet we still need the audio powerwell to setup the registers. +(But then the hardware uses those registers even while powered off???) + +v2: Grab both rpm wakelock and audio wakelock + +Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=96214 +Fixes: 03b135cebc47 "ALSA: hda - remove dependency on i915 power well for SKL") +Signed-off-by: Chris Wilson +Cc: Libin Yang +Cc: Takashi Iwai +Cc: Marius Vlad +--- + drivers/gpu/drm/i915/intel_audio.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/drivers/gpu/drm/i915/intel_audio.c b/drivers/gpu/drm/i915/intel_audio.c +index 5d5f6bc10e85..948a7a52e3f8 100644 +--- a/drivers/gpu/drm/i915/intel_audio.c ++++ b/drivers/gpu/drm/i915/intel_audio.c +@@ -600,6 +600,8 @@ static void i915_audio_component_codec_wake_override(struct device *dev, + if (!IS_SKYLAKE(dev_priv) && !IS_KABYLAKE(dev_priv)) + return; + ++ i915_audio_component_get_power(dev); ++ + /* + * Enable/disable generating the codec wake signal, overriding the + * internal logic to generate the codec wake to controller. +@@ -615,6 +617,8 @@ static void i915_audio_component_codec_wake_override(struct device *dev, + I915_WRITE(HSW_AUD_CHICKENBIT, tmp); + usleep_range(1000, 1500); + } ++ ++ i915_audio_component_put_power(dev); + } + + /* Get CDCLK in kHz */ +@@ -648,6 +652,7 @@ static int i915_audio_component_sync_audio_rate(struct device *dev, + !IS_HASWELL(dev_priv)) + return 0; + ++ i915_audio_component_get_power(dev); + mutex_lock(&dev_priv->av_mutex); + /* 1. get the pipe */ + intel_encoder = dev_priv->dig_port_map[port]; +@@ -698,6 +703,7 @@ static int i915_audio_component_sync_audio_rate(struct device *dev, + + unlock: + mutex_unlock(&dev_priv->av_mutex); ++ i915_audio_component_put_power(dev); + return err; + } + +-- +2.8.1 + diff --git a/drm-i915-skl-Add-support-for-the-SAGV-fix-underrun-hangs.patch b/drm-i915-skl-Add-support-for-the-SAGV-fix-underrun-hangs.patch deleted file mode 100644 index 24b19522b..000000000 --- a/drm-i915-skl-Add-support-for-the-SAGV-fix-underrun-hangs.patch +++ /dev/null @@ -1,230 +0,0 @@ -From bd363ae4ea5d124d5b284dd3aa7d2766ff2c19d7 Mon Sep 17 00:00:00 2001 -From: "cpaul@redhat.com" -Date: Tue, 12 Jul 2016 13:36:03 -0400 -Subject: [PATCH] drm/i915/skl: Add support for the SAGV, fix underrun hangs -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Since the watermark calculations for Skylake are still broken, we're apt -to hitting underruns very easily under multi-monitor configurations. -While it would be lovely if this was fixed, it's not. Another problem -that's been coming from this however, is the mysterious issue of -underruns causing full system hangs. An easy way to reproduce this with -a skylake system: - -- Get a laptop with a skylake GPU, and hook up two external monitors to - it -- Move the cursor from the built-in LCD to one of the external displays - as quickly as you can -- You'll get a few pipe underruns, and eventually the entire system will - just freeze. - -After doing a lot of investigation and reading through the bspec, I -found the existence of the SAGV, which is responsible for adjusting the -system agent voltage and clock frequencies depending on how much power -we need. According to the bspec: - -"The display engine access to system memory is blocked during the - adjustment time. SAGV defaults to enabled. Software must use the - GT-driver pcode mailbox to disable SAGV when the display engine is not - able to tolerate the blocking time." - -The rest of the bspec goes on to explain that software can simply leave -the SAGV enabled, and disable it when we use interlaced pipes/have more -then one pipe active. - -Sure enough, with this patchset the system hangs resulting from pipe -underruns on Skylake have completely vanished on my T460s. Additionally, -the bspec mentions turning off the SAGV with more then one pipe enabled -as a workaround for display underruns. While this patch doesn't entirely -fix that, it looks like it does improve the situation a little bit so -it's likely this is going to be required to make watermarks on Skylake -fully functional. - -Changes since v2: - - Really apply minor style nitpicks to patch this time -Changes since v1: - - Added comments about this probably being one of the requirements to - fixing Skylake's watermark issues - - Minor style nitpicks from Matt Roper - - Disable these functions on Broxton, since it doesn't have an SAGV - -Cc: Matt Roper -Cc: Daniel Vetter -Cc: Ville Syrjälä -Signed-off-by: Lyude -Reviewed-by: Matt Roper ---- - drivers/gpu/drm/i915/i915_drv.h | 2 + - drivers/gpu/drm/i915/i915_reg.h | 5 ++ - drivers/gpu/drm/i915/intel_pm.c | 110 ++++++++++++++++++++++++++++++++++++++++ - 3 files changed, 117 insertions(+) - -diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h -index 59092cbfeda1..d94e5598511f 100644 ---- a/drivers/gpu/drm/i915/i915_drv.h -+++ b/drivers/gpu/drm/i915/i915_drv.h -@@ -1954,6 +1954,8 @@ struct drm_i915_private { - struct i915_suspend_saved_registers regfile; - struct vlv_s0ix_state vlv_s0ix_state; - -+ bool skl_sagv_enabled; -+ - struct { - /* - * Raw watermark latency values: -diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h -index 363bd79dea2e..3d13d0e551be 100644 ---- a/drivers/gpu/drm/i915/i915_reg.h -+++ b/drivers/gpu/drm/i915/i915_reg.h -@@ -7029,6 +7029,11 @@ enum skl_disp_power_wells { - #define HSW_PCODE_DE_WRITE_FREQ_REQ 0x17 - #define DISPLAY_IPS_CONTROL 0x19 - #define HSW_PCODE_DYNAMIC_DUTY_CYCLE_CONTROL 0x1A -+#define GEN9_PCODE_SAGV_CONTROL 0x21 -+#define GEN9_SAGV_DISABLE 0x0 -+#define GEN9_SAGV_LOW_FREQ 0x1 -+#define GEN9_SAGV_HIGH_FREQ 0x2 -+#define GEN9_SAGV_DYNAMIC_FREQ 0x3 - #define GEN6_PCODE_DATA _MMIO(0x138128) - #define GEN6_PCODE_FREQ_IA_RATIO_SHIFT 8 - #define GEN6_PCODE_FREQ_RING_RATIO_SHIFT 16 -diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c -index 70dcd2e23cca..38e0b448f461 100644 ---- a/drivers/gpu/drm/i915/intel_pm.c -+++ b/drivers/gpu/drm/i915/intel_pm.c -@@ -2786,6 +2786,109 @@ skl_wm_plane_id(const struct intel_plane *plane) - } - - static void -+skl_sagv_get_hw_state(struct drm_i915_private *dev_priv) -+{ -+ u32 temp; -+ int ret; -+ -+ if (IS_BROXTON(dev_priv)) -+ return; -+ -+ mutex_lock(&dev_priv->rps.hw_lock); -+ ret = sandybridge_pcode_read(dev_priv, GEN9_PCODE_SAGV_CONTROL, &temp); -+ mutex_unlock(&dev_priv->rps.hw_lock); -+ -+ if (!ret) { -+ dev_priv->skl_sagv_enabled = !!(temp & GEN9_SAGV_DYNAMIC_FREQ); -+ } else { -+ /* -+ * If for some reason we can't access the SAGV state, follow -+ * the bspec and assume it's enabled -+ */ -+ DRM_ERROR("Failed to get SAGV state, assuming enabled\n"); -+ dev_priv->skl_sagv_enabled = true; -+ } -+} -+ -+/* -+ * SAGV dynamically adjusts the system agent voltage and clock frequencies -+ * depending on power and performance requirements. The display engine access -+ * to system memory is blocked during the adjustment time. Having this enabled -+ * in multi-pipe configurations can cause issues (such as underruns causing -+ * full system hangs), and the bspec also suggests that software disable it -+ * when more then one pipe is enabled. -+ */ -+static int -+skl_enable_sagv(struct drm_i915_private *dev_priv) -+{ -+ int ret; -+ -+ if (IS_BROXTON(dev_priv)) -+ return 0; -+ if (dev_priv->skl_sagv_enabled) -+ return 0; -+ -+ mutex_lock(&dev_priv->rps.hw_lock); -+ DRM_DEBUG_KMS("Enabling the SAGV\n"); -+ -+ ret = sandybridge_pcode_write(dev_priv, GEN9_PCODE_SAGV_CONTROL, -+ GEN9_SAGV_DYNAMIC_FREQ); -+ if (!ret) -+ dev_priv->skl_sagv_enabled = true; -+ else -+ DRM_ERROR("Failed to enable the SAGV\n"); -+ -+ /* We don't need to wait for SAGV when enabling */ -+ mutex_unlock(&dev_priv->rps.hw_lock); -+ return ret; -+} -+ -+static int -+skl_disable_sagv(struct drm_i915_private *dev_priv) -+{ -+ int ret = 0; -+ unsigned long timeout; -+ u32 temp; -+ -+ if (IS_BROXTON(dev_priv)) -+ return 0; -+ if (!dev_priv->skl_sagv_enabled) -+ return 0; -+ -+ mutex_lock(&dev_priv->rps.hw_lock); -+ DRM_DEBUG_KMS("Disabling the SAGV\n"); -+ -+ /* bspec says to keep retrying for at least 1 ms */ -+ timeout = jiffies + msecs_to_jiffies(1); -+ do { -+ ret = sandybridge_pcode_write(dev_priv, GEN9_PCODE_SAGV_CONTROL, -+ GEN9_SAGV_DISABLE); -+ if (ret) { -+ DRM_ERROR("Failed to disable the SAGV\n"); -+ goto out; -+ } -+ -+ ret = sandybridge_pcode_read(dev_priv, GEN9_PCODE_SAGV_CONTROL, -+ &temp); -+ if (ret) { -+ DRM_ERROR("Failed to check the status of the SAGV\n"); -+ goto out; -+ } -+ } while (!(temp & 0x1) && jiffies < timeout); -+ -+ if (temp & 0x1) { -+ dev_priv->skl_sagv_enabled = false; -+ } else { -+ ret = -1; -+ DRM_ERROR("Request to disable SAGV timed out\n"); -+ } -+ -+out: -+ mutex_unlock(&dev_priv->rps.hw_lock); -+ return ret; -+} -+ -+static void - skl_ddb_get_pipe_allocation_limits(struct drm_device *dev, - const struct intel_crtc_state *cstate, - struct skl_ddb_entry *alloc, /* out */ -@@ -3464,6 +3567,11 @@ static void skl_write_wm_values(struct drm_i915_private *dev_priv, - struct drm_device *dev = dev_priv->dev; - struct intel_crtc *crtc; - -+ if (dev_priv->active_crtcs == 1) -+ skl_enable_sagv(dev_priv); -+ else -+ skl_disable_sagv(dev_priv); -+ - for_each_intel_crtc(dev, crtc) { - int i, level, max_level = ilk_wm_max_level(dev); - enum pipe pipe = crtc->pipe; -@@ -4008,6 +4116,8 @@ void skl_wm_get_hw_state(struct drm_device *dev) - skl_plane_relative_data_rate(cstate, pstate, 1); - } - } -+ -+ skl_sagv_get_hw_state(dev_priv); - } - - static void ilk_pipe_wm_get_hw_state(struct drm_crtc *crtc) --- -2.7.4 - diff --git a/kernel.spec b/kernel.spec index 843ee47d5..e2b95339f 100644 --- a/kernel.spec +++ b/kernel.spec @@ -654,8 +654,7 @@ Patch839: tcp-enable-per-socket-rate-limiting-of-all-challenge.patch # https://lists.fedoraproject.org/archives/list/kernel@lists.fedoraproject.org/message/A4YCP7OGMX6JLFT5V44H57GOMAQLC3M4/ Patch836: drm-amdgpu-Disable-RPM-helpers-while-reprobing.patch -Patch837: drm-i915-skl-Add-support-for-the-SAGV-fix-underrun-hangs.patch -Patch838: Revert-ALSA-hda-remove-controller-dependency-on-i915.patch +Patch837: drm-i915-Acquire-audio-powerwell-for-HD-Audio-regist.patch #CVE-2016-5400 rhbz 1358184 1358186 Patch840: airspy-fix-error-logic-during-device-register.patch @@ -2192,6 +2191,10 @@ fi # # %changelog +* Tue Aug 2 2016 Hans de Goede +- Sync skylake hdaudio __unclaimed_reg WARN_ON fix with latest upstream version +- Drop drm-i915-skl-Add-support-for-the-SAGV-fix-underrun-hangs.patch for now + * Thu Jul 28 2016 Josh Boyer - CVE-2016-5412 powerpc: kvm: Infinite loop in HV mode (rhbz 1349916 1361040) From d6256ebfe74814de43bc11785465fdfe913aec6d Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Mon, 8 Aug 2016 11:12:57 -0400 Subject: [PATCH 121/275] Build CONFIG_POWERNV_CPUFREQ in on ppc64* (rhbz 1351346) --- config-powerpc64-generic | 2 +- kernel.spec | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/config-powerpc64-generic b/config-powerpc64-generic index de387d570..ca5fea962 100644 --- a/config-powerpc64-generic +++ b/config-powerpc64-generic @@ -113,7 +113,7 @@ CONFIG_I2C_OPAL=m CONFIG_RTC_DRV_OPAL=m CONFIG_SENSORS_IBMPOWERNV=y CONFIG_HW_RANDOM_POWERNV=m -CONFIG_POWERNV_CPUFREQ=m +CONFIG_POWERNV_CPUFREQ=y CONFIG_IPMI_POWERNV=m CONFIG_RTAS_FLASH=y CONFIG_OPAL_PRD=m diff --git a/kernel.spec b/kernel.spec index e2b95339f..cf3f0c56b 100644 --- a/kernel.spec +++ b/kernel.spec @@ -2191,6 +2191,9 @@ fi # # %changelog +* Mon Aug 08 2016 Josh Boyer +- Build CONFIG_POWERNV_CPUFREQ in on ppc64* (rhbz 1351346) + * Tue Aug 2 2016 Hans de Goede - Sync skylake hdaudio __unclaimed_reg WARN_ON fix with latest upstream version - Drop drm-i915-skl-Add-support-for-the-SAGV-fix-underrun-hangs.patch for now From 1d48d18f7d05c82b9b2d5cf3968947cc11a09106 Mon Sep 17 00:00:00 2001 From: Laura Abbott Date: Wed, 10 Aug 2016 13:35:15 -0700 Subject: [PATCH 122/275] Linux v4.6.6 --- ...Fix-leak-in-SNDRV_TIMER_IOCTL_PARAMS.patch | 33 ------- ...eak-in-events-via-snd_timer_user_cca.patch | 34 ------- ...eak-in-events-via-snd_timer_user_tin.patch | 34 ------- ...x-error-logic-during-device-register.patch | 40 -------- kernel.spec | 19 +--- ...cros_ec_dev-double-fetch-bug-in-ioct.patch | 52 ---------- ...-NULL-pointer-deref-in-QLA-interrupt.patch | 98 ------------------- sources | 2 +- 8 files changed, 5 insertions(+), 307 deletions(-) delete mode 100644 ALSA-timer-Fix-leak-in-SNDRV_TIMER_IOCTL_PARAMS.patch delete mode 100644 ALSA-timer-Fix-leak-in-events-via-snd_timer_user_cca.patch delete mode 100644 ALSA-timer-Fix-leak-in-events-via-snd_timer_user_tin.patch delete mode 100644 airspy-fix-error-logic-during-device-register.patch delete mode 100644 platform-chrome-cros_ec_dev-double-fetch-bug-in-ioct.patch delete mode 100644 qla2xxx-Fix-NULL-pointer-deref-in-QLA-interrupt.patch diff --git a/ALSA-timer-Fix-leak-in-SNDRV_TIMER_IOCTL_PARAMS.patch b/ALSA-timer-Fix-leak-in-SNDRV_TIMER_IOCTL_PARAMS.patch deleted file mode 100644 index 3eb8bf183..000000000 --- a/ALSA-timer-Fix-leak-in-SNDRV_TIMER_IOCTL_PARAMS.patch +++ /dev/null @@ -1,33 +0,0 @@ -From 527a5767c165abd2b4dba99da992c51ca7547562 Mon Sep 17 00:00:00 2001 -From: Kangjie Lu -Date: Tue, 3 May 2016 16:44:07 -0400 -Subject: [PATCH 1/3] ALSA: timer: Fix leak in SNDRV_TIMER_IOCTL_PARAMS -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -The stack object “tread” has a total size of 32 bytes. Its field -“event” and “val” both contain 4 bytes padding. These 8 bytes -padding bytes are sent to user without being initialized. - -Signed-off-by: Kangjie Lu -Signed-off-by: Takashi Iwai ---- - sound/core/timer.c | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/sound/core/timer.c b/sound/core/timer.c -index 6469bedda2f3..964f5ebf495e 100644 ---- a/sound/core/timer.c -+++ b/sound/core/timer.c -@@ -1739,6 +1739,7 @@ static int snd_timer_user_params(struct file *file, - if (tu->timeri->flags & SNDRV_TIMER_IFLG_EARLY_EVENT) { - if (tu->tread) { - struct snd_timer_tread tread; -+ memset(&tread, 0, sizeof(tread)); - tread.event = SNDRV_TIMER_EVENT_EARLY; - tread.tstamp.tv_sec = 0; - tread.tstamp.tv_nsec = 0; --- -2.5.5 - diff --git a/ALSA-timer-Fix-leak-in-events-via-snd_timer_user_cca.patch b/ALSA-timer-Fix-leak-in-events-via-snd_timer_user_cca.patch deleted file mode 100644 index e6f46f8a8..000000000 --- a/ALSA-timer-Fix-leak-in-events-via-snd_timer_user_cca.patch +++ /dev/null @@ -1,34 +0,0 @@ -From addd6e9f0e25efb00d813d54528607c75b77c416 Mon Sep 17 00:00:00 2001 -From: Kangjie Lu -Date: Tue, 3 May 2016 16:44:20 -0400 -Subject: [PATCH 2/3] ALSA: timer: Fix leak in events via - snd_timer_user_ccallback -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -The stack object “r1” has a total size of 32 bytes. Its field -“event” and “val” both contain 4 bytes padding. These 8 bytes -padding bytes are sent to user without being initialized. - -Signed-off-by: Kangjie Lu -Signed-off-by: Takashi Iwai ---- - sound/core/timer.c | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/sound/core/timer.c b/sound/core/timer.c -index 964f5ebf495e..e98fa5feb731 100644 ---- a/sound/core/timer.c -+++ b/sound/core/timer.c -@@ -1225,6 +1225,7 @@ static void snd_timer_user_ccallback(struct snd_timer_instance *timeri, - tu->tstamp = *tstamp; - if ((tu->filter & (1 << event)) == 0 || !tu->tread) - return; -+ memset(&r1, 0, sizeof(r1)); - r1.event = event; - r1.tstamp = *tstamp; - r1.val = resolution; --- -2.5.5 - diff --git a/ALSA-timer-Fix-leak-in-events-via-snd_timer_user_tin.patch b/ALSA-timer-Fix-leak-in-events-via-snd_timer_user_tin.patch deleted file mode 100644 index 7851c55a2..000000000 --- a/ALSA-timer-Fix-leak-in-events-via-snd_timer_user_tin.patch +++ /dev/null @@ -1,34 +0,0 @@ -From b06a443b5679e9a0298e2f206ddb60845569f62f Mon Sep 17 00:00:00 2001 -From: Kangjie Lu -Date: Tue, 3 May 2016 16:44:32 -0400 -Subject: [PATCH 3/3] ALSA: timer: Fix leak in events via - snd_timer_user_tinterrupt -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -The stack object “r1” has a total size of 32 bytes. Its field -“event” and “val” both contain 4 bytes padding. These 8 bytes -padding bytes are sent to user without being initialized. - -Signed-off-by: Kangjie Lu -Signed-off-by: Takashi Iwai ---- - sound/core/timer.c | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/sound/core/timer.c b/sound/core/timer.c -index e98fa5feb731..c69a27155433 100644 ---- a/sound/core/timer.c -+++ b/sound/core/timer.c -@@ -1268,6 +1268,7 @@ static void snd_timer_user_tinterrupt(struct snd_timer_instance *timeri, - } - if ((tu->filter & (1 << SNDRV_TIMER_EVENT_RESOLUTION)) && - tu->last_resolution != resolution) { -+ memset(&r1, 0, sizeof(r1)); - r1.event = SNDRV_TIMER_EVENT_RESOLUTION; - r1.tstamp = tstamp; - r1.val = resolution; --- -2.5.5 - diff --git a/airspy-fix-error-logic-during-device-register.patch b/airspy-fix-error-logic-during-device-register.patch deleted file mode 100644 index 575090d9d..000000000 --- a/airspy-fix-error-logic-during-device-register.patch +++ /dev/null @@ -1,40 +0,0 @@ -From 785ef73dba6e9fefd2e5dd24546e0efa8698e5cd Mon Sep 17 00:00:00 2001 -From: James Patrick-Evans -Date: Fri, 15 Jul 2016 12:40:45 -0300 -Subject: [media] airspy: fix error logic during device register - -This patch addresses CVE-2016-5400, a local DOS vulnerability caused by -a memory leak in the airspy usb device driver. - -The vulnerability is triggered when more than 64 usb devices register -with v4l2 of type VFL_TYPE_SDR or VFL_TYPE_SUBDEV.A badusb device can -emulate 64 of these devices then through continual emulated -connect/disconnect of the 65th device, cause the kernel to run out of -RAM and crash the kernel. - -The vulnerability exists in kernel versions from 3.17 to current 4.7. - -The memory leak is caused by the probe function of the airspy driver -mishandeling errors and not freeing the corresponding control structures -when an error occours registering the device to v4l2 core. - -Signed-off-by: James Patrick-Evans -Cc: stable@vger.kernel.org # Up to Kernel 3.17 -Signed-off-by: Mauro Carvalho Chehab - -diff --git a/drivers/media/usb/airspy/airspy.c b/drivers/media/usb/airspy/airspy.c -index d807d58..19cd64c 100644 ---- a/drivers/media/usb/airspy/airspy.c -+++ b/drivers/media/usb/airspy/airspy.c -@@ -1072,7 +1072,7 @@ static int airspy_probe(struct usb_interface *intf, - if (ret) { - dev_err(s->dev, "Failed to register as video device (%d)\n", - ret); -- goto err_unregister_v4l2_dev; -+ goto err_free_controls; - } - dev_info(s->dev, "Registered as %s\n", - video_device_node_name(&s->vdev)); --- -cgit v0.10.2 - diff --git a/kernel.spec b/kernel.spec index cf3f0c56b..3b905cbf9 100644 --- a/kernel.spec +++ b/kernel.spec @@ -54,7 +54,7 @@ Summary: The Linux kernel %if 0%{?released_kernel} # Do we have a -stable update to apply? -%define stable_update 5 +%define stable_update 6 # Set rpm version accordingly %if 0%{?stable_update} %define stablerev %{stable_update} @@ -606,11 +606,6 @@ Patch641: disable-CONFIG_EXPERT-for-ZONE_DMA.patch #CVE-2016-4482 rhbz 1332931 1332932 Patch706: USB-usbfs-fix-potential-infoleak-in-devio.patch -#CVE-2016-4569 rhbz 1334643 1334645 -Patch714: ALSA-timer-Fix-leak-in-SNDRV_TIMER_IOCTL_PARAMS.patch -Patch715: ALSA-timer-Fix-leak-in-events-via-snd_timer_user_cca.patch -Patch716: ALSA-timer-Fix-leak-in-events-via-snd_timer_user_tin.patch - #CVE-2016-4440 rhbz 1337806 1337807 Patch719: kvm-vmx-more-complete-state-update-on-APICv-on-off.patch @@ -642,12 +637,6 @@ Patch815: 0015-drm-i915-gen9-Calculate-watermarks-during-atomic-che.patch Patch816: 0016-drm-i915-gen9-Reject-display-updates-that-exceed-wm-.patch Patch817: 0017-drm-i915-Remove-wm_config-from-dev_priv-intel_atomic.patch -#CVE-2016-6156 rhbz 1353490 1353491 -Patch832: platform-chrome-cros_ec_dev-double-fetch-bug-in-ioct.patch - -#rhbz 1346753 -Patch834: qla2xxx-Fix-NULL-pointer-deref-in-QLA-interrupt.patch - #CVE-2016-5389 CVE-2016-5969 rhbz 1354708 1355615 Patch835: tcp-make-challenge-acks-less-predictable.patch Patch839: tcp-enable-per-socket-rate-limiting-of-all-challenge.patch @@ -656,9 +645,6 @@ Patch839: tcp-enable-per-socket-rate-limiting-of-all-challenge.patch Patch836: drm-amdgpu-Disable-RPM-helpers-while-reprobing.patch Patch837: drm-i915-Acquire-audio-powerwell-for-HD-Audio-regist.patch -#CVE-2016-5400 rhbz 1358184 1358186 -Patch840: airspy-fix-error-logic-during-device-register.patch - #CVE-2016-6136 rhbz 1353533 1353534 Patch841: audit-fix-a-double-fetch-in-audit_log_single_execve_arg.patch @@ -2191,6 +2177,9 @@ fi # # %changelog +* Wed Aug 10 2016 Laura Abbott - 4.6.6-300 +- Linux v4.6.6 + * Mon Aug 08 2016 Josh Boyer - Build CONFIG_POWERNV_CPUFREQ in on ppc64* (rhbz 1351346) diff --git a/platform-chrome-cros_ec_dev-double-fetch-bug-in-ioct.patch b/platform-chrome-cros_ec_dev-double-fetch-bug-in-ioct.patch deleted file mode 100644 index a685ff697..000000000 --- a/platform-chrome-cros_ec_dev-double-fetch-bug-in-ioct.patch +++ /dev/null @@ -1,52 +0,0 @@ -From 096cdc6f52225835ff503f987a0d68ef770bb78e Mon Sep 17 00:00:00 2001 -From: Dan Carpenter -Date: Tue, 21 Jun 2016 16:58:46 +0300 -Subject: [PATCH] platform/chrome: cros_ec_dev - double fetch bug in ioctl - -We verify "u_cmd.outsize" and "u_cmd.insize" but we need to make sure -that those values have not changed between the two copy_from_user() -calls. Otherwise it could lead to a buffer overflow. - -Additionally, cros_ec_cmd_xfer() can set s_cmd->insize to a lower value. -We should use the new smaller value so we don't copy too much data to -the user. - -Reported-by: Pengfei Wang -Fixes: a841178445bb ('mfd: cros_ec: Use a zero-length array for command data') -Signed-off-by: Dan Carpenter -Reviewed-by: Kees Cook -Tested-by: Gwendal Grignou -Cc: # v4.2+ -Signed-off-by: Olof Johansson ---- - drivers/platform/chrome/cros_ec_dev.c | 8 +++++++- - 1 file changed, 7 insertions(+), 1 deletion(-) - -diff --git a/drivers/platform/chrome/cros_ec_dev.c b/drivers/platform/chrome/cros_ec_dev.c -index 6d8ee3b15872..8abd80dbcbed 100644 ---- a/drivers/platform/chrome/cros_ec_dev.c -+++ b/drivers/platform/chrome/cros_ec_dev.c -@@ -151,13 +151,19 @@ static long ec_device_ioctl_xcmd(struct cros_ec_dev *ec, void __user *arg) - goto exit; - } - -+ if (u_cmd.outsize != s_cmd->outsize || -+ u_cmd.insize != s_cmd->insize) { -+ ret = -EINVAL; -+ goto exit; -+ } -+ - s_cmd->command += ec->cmd_offset; - ret = cros_ec_cmd_xfer(ec->ec_dev, s_cmd); - /* Only copy data to userland if data was received. */ - if (ret < 0) - goto exit; - -- if (copy_to_user(arg, s_cmd, sizeof(*s_cmd) + u_cmd.insize)) -+ if (copy_to_user(arg, s_cmd, sizeof(*s_cmd) + s_cmd->insize)) - ret = -EFAULT; - exit: - kfree(s_cmd); --- -2.5.5 - diff --git a/qla2xxx-Fix-NULL-pointer-deref-in-QLA-interrupt.patch b/qla2xxx-Fix-NULL-pointer-deref-in-QLA-interrupt.patch deleted file mode 100644 index 4e50a65e2..000000000 --- a/qla2xxx-Fix-NULL-pointer-deref-in-QLA-interrupt.patch +++ /dev/null @@ -1,98 +0,0 @@ -From 36d17a40c174c8b77386520ab2a430fea760dcc3 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Bruno=20Pr=C3=83=C2=A9mont?= -Date: Thu, 30 Jun 2016 17:00:32 +0200 -Subject: [PATCH] qla2xxx: Fix NULL pointer deref in QLA interrupt -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -In qla24xx_process_response_queue() rsp->msix->cpuid may trigger NULL -pointer dereference when rsp->msix is NULL: - -[ 5.622457] NULL pointer dereference at 0000000000000050 -[ 5.622457] IP: [] qla24xx_process_response_queue+0x44/0x4b0 -[ 5.622457] PGD 0 -[ 5.622457] Oops: 0000 [#1] SMP -[ 5.622457] Modules linked in: -[ 5.622457] CPU: 2 PID: 0 Comm: swapper/2 Not tainted 4.6.3-x86_64 #1 -[ 5.622457] Hardware name: HP ProLiant DL360 G5, BIOS P58 05/02/2011 -[ 5.622457] task: ffff8801a88f3740 ti: ffff8801a8954000 task.ti: ffff8801a8954000 -[ 5.622457] RIP: 0010:[] [] qla24xx_process_response_queue+0x44/0x4b0 -[ 5.622457] RSP: 0000:ffff8801afb03de8 EFLAGS: 00010002 -[ 5.622457] RAX: 0000000000000000 RBX: 0000000000000032 RCX: 00000000ffffffff -[ 5.622457] RDX: 0000000000000002 RSI: ffff8801a79bf8c8 RDI: ffff8800c8f7e7c0 -[ 5.622457] RBP: ffff8801afb03e68 R08: 0000000000000000 R09: 0000000000000000 -[ 5.622457] R10: 00000000ffff8c47 R11: 0000000000000002 R12: ffff8801a79bf8c8 -[ 5.622457] R13: ffff8800c8f7e7c0 R14: ffff8800c8f60000 R15: 0000000000018013 -[ 5.622457] FS: 0000000000000000(0000) GS:ffff8801afb00000(0000) knlGS:0000000000000000 -[ 5.622457] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 -[ 5.622457] CR2: 0000000000000050 CR3: 0000000001e07000 CR4: 00000000000006e0 -[ 5.622457] Stack: -[ 5.622457] ffff8801afb03e30 ffffffff810c0f2d 0000000000000086 0000000000000002 -[ 5.622457] ffff8801afb03e28 ffffffff816570e1 ffff8800c8994628 0000000000000002 -[ 5.622457] ffff8801afb03e60 ffffffff816772d4 b47c472ad6955e68 0000000000000032 -[ 5.622457] Call Trace: -[ 5.622457] -[ 5.622457] [] ? __wake_up_common+0x4d/0x80 -[ 5.622457] [] ? usb_hcd_resume_root_hub+0x51/0x60 -[ 5.622457] [] ? uhci_hub_status_data+0x64/0x240 -[ 5.622457] [] qla24xx_intr_handler+0xf0/0x2e0 -[ 5.622457] [] ? get_next_timer_interrupt+0xce/0x200 -[ 5.622457] [] handle_irq_event_percpu+0x64/0x100 -[ 5.622457] [] handle_irq_event+0x27/0x50 -[ 5.622457] [] handle_edge_irq+0x65/0x140 -[ 5.622457] [] handle_irq+0x18/0x30 -[ 5.622457] [] do_IRQ+0x46/0xd0 -[ 5.622457] [] common_interrupt+0x7f/0x7f -[ 5.622457] -[ 5.622457] [] ? mwait_idle+0x68/0x80 -[ 5.622457] [] arch_cpu_idle+0xa/0x10 -[ 5.622457] [] default_idle_call+0x27/0x30 -[ 5.622457] [] cpu_startup_entry+0x19b/0x230 -[ 5.622457] [] start_secondary+0x136/0x140 -[ 5.622457] Code: 00 00 65 48 8b 04 25 28 00 00 00 48 89 45 d0 31 c0 48 8b 47 58 a8 02 0f 84 c5 00 00 00 48 8b 46 50 49 89 f4 65 8b 15 34 bb aa 7e <39> 50 50 74 11 89 50 50 48 8b 46 50 8b 40 50 41 89 86 60 8b 00 -[ 5.622457] RIP [] qla24xx_process_response_queue+0x44/0x4b0 -[ 5.622457] RSP -[ 5.622457] CR2: 0000000000000050 -[ 5.622457] ---[ end trace fa2b19c25106d42b ]--- -[ 5.622457] Kernel panic - not syncing: Fatal exception in interrupt - -The affected code was introduced by commit cdb898c52d1dfad4b4800b83a58b3fe5d352edde -(qla2xxx: Add irq affinity notification). - -Only dereference rsp->msix when it has been set so the machine can boot -fine. Possibly rsp->msix is unset because: -[ 3.479679] qla2xxx [0000:00:00.0]-0005: : QLogic Fibre Channel HBA Driver: 8.07.00.33-k. -[ 3.481839] qla2xxx [0000:13:00.0]-001d: : Found an ISP2432 irq 17 iobase 0xffffc90000038000. -[ 3.484081] qla2xxx [0000:13:00.0]-0035:0: MSI-X; Unsupported ISP2432 (0x2, 0x3). -[ 3.485804] qla2xxx [0000:13:00.0]-0037:0: Falling back-to MSI mode -258. -[ 3.890145] scsi host0: qla2xxx -[ 3.891956] qla2xxx [0000:13:00.0]-00fb:0: QLogic QLE2460 - PCI-Express Single Channel 4Gb Fibre Channel HBA. -[ 3.894207] qla2xxx [0000:13:00.0]-00fc:0: ISP2432: PCIe (2.5GT/s x4) @ 0000:13:00.0 hdma+ host#=0 fw=7.03.00 (9496). -[ 5.714774] qla2xxx [0000:13:00.0]-500a:0: LOOP UP detected (4 Gbps). - -Signed-off-by: Bruno Prémont -Acked-by: Quinn Tran -CC: # 4.5+ -Fixes: cdb898c52d1dfad4b4800b83a58b3fe5d352edde -Signed-off-by: James Bottomley ---- - drivers/scsi/qla2xxx/qla_isr.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c -index 5649c200d37c..a92a62dea793 100644 ---- a/drivers/scsi/qla2xxx/qla_isr.c -+++ b/drivers/scsi/qla2xxx/qla_isr.c -@@ -2548,7 +2548,7 @@ void qla24xx_process_response_queue(struct scsi_qla_host *vha, - if (!vha->flags.online) - return; - -- if (rsp->msix->cpuid != smp_processor_id()) { -+ if (rsp->msix && rsp->msix->cpuid != smp_processor_id()) { - /* if kernel does not notify qla of IRQ's CPU change, - * then set it here. - */ --- -2.5.5 - diff --git a/sources b/sources index ee5257660..dbcebdf2e 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ d2927020e24a76da4ab482a8bc3e9ef3 linux-4.6.tar.xz fd23b14b9d474c3dfacb6e8ee82d3a51 perf-man-4.6.tar.gz -ad32c9ec1c69a99811d160d6014f9b2d patch-4.6.5.xz +84f23eb772635b1348d3ea7c5bd67930 patch-4.6.6.xz From c3c83b942761d78d9b362dbd3fdec4112d099b87 Mon Sep 17 00:00:00 2001 From: Laura Abbott Date: Thu, 11 Aug 2016 14:52:23 -0700 Subject: [PATCH 123/275] Fix for crash seen with Open Stack (rhbz 1361414) --- kernel.spec | 6 +++++ openstack_fix.patch | 53 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 openstack_fix.patch diff --git a/kernel.spec b/kernel.spec index 3b905cbf9..ed840006e 100644 --- a/kernel.spec +++ b/kernel.spec @@ -652,6 +652,9 @@ Patch841: audit-fix-a-double-fetch-in-audit_log_single_execve_arg.patch Patch842: kvm-ppc-Book3S-HV-Pull-out-TM-state-save.patch Patch843: kvm-ppc-Book3S-HV-Save-restore-TM-state.patch +#rhbz 1361414 +Patch844: openstack_fix.patch + # END OF PATCH DEFINITIONS %endif @@ -2177,6 +2180,9 @@ fi # # %changelog +* Thu Aug 11 2016 Laura Abbott +- Fix for crash seen with Open Stack (rhbz 1361414) + * Wed Aug 10 2016 Laura Abbott - 4.6.6-300 - Linux v4.6.6 diff --git a/openstack_fix.patch b/openstack_fix.patch new file mode 100644 index 000000000..a967c350e --- /dev/null +++ b/openstack_fix.patch @@ -0,0 +1,53 @@ +From 5ef9f289c4e698054e5687edb54f0da3cdc9173a Mon Sep 17 00:00:00 2001 +From: Ian Wienand +Date: Wed, 3 Aug 2016 15:44:57 +1000 +Subject: OVS: Ignore negative headroom value + +net_device->ndo_set_rx_headroom (introduced in +871b642adebe300be2e50aa5f65a418510f636ec) says + + "Setting a negtaive value reset the rx headroom + to the default value". + +It seems that the OVS implementation in +3a927bc7cf9d0fbe8f4a8189dd5f8440228f64e7 overlooked this and sets +dev->needed_headroom unconditionally. + +This doesn't have an immediate effect, but can mess up later +LL_RESERVED_SPACE calculations, such as done in +net/ipv6/mcast.c:mld_newpack. For reference, this issue was found +from a skb_panic raised there after the length calculations had given +the wrong result. + +Note the other current users of this interface +(drivers/net/tun.c:tun_set_headroom and +drivers/net/veth.c:veth_set_rx_headroom) are both checking this +correctly thus need no modification. + +Thanks to Ben for some pointers from the crash dumps! + +Cc: Benjamin Poirier +Cc: Paolo Abeni +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1361414 +Signed-off-by: Ian Wienand +Signed-off-by: David S. Miller +--- + net/openvswitch/vport-internal_dev.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/net/openvswitch/vport-internal_dev.c b/net/openvswitch/vport-internal_dev.c +index 434e04c..95c3614 100644 +--- a/net/openvswitch/vport-internal_dev.c ++++ b/net/openvswitch/vport-internal_dev.c +@@ -140,7 +140,7 @@ internal_get_stats(struct net_device *dev, struct rtnl_link_stats64 *stats) + + static void internal_set_rx_headroom(struct net_device *dev, int new_hr) + { +- dev->needed_headroom = new_hr; ++ dev->needed_headroom = new_hr < 0 ? 0 : new_hr; + } + + static const struct net_device_ops internal_dev_netdev_ops = { +-- +cgit v0.12 + From 389254406ec0769e72185b61e115f350165f4cb9 Mon Sep 17 00:00:00 2001 From: Laura Abbott Date: Tue, 16 Aug 2016 14:04:23 -0700 Subject: [PATCH 124/275] Linux v4.6.7 --- kernel.spec | 9 +- sources | 2 +- ...ocket-rate-limiting-of-all-challenge.patch | 102 ------------------ ...make-challenge-acks-less-predictable.patch | 83 -------------- 4 files changed, 5 insertions(+), 191 deletions(-) delete mode 100644 tcp-enable-per-socket-rate-limiting-of-all-challenge.patch delete mode 100644 tcp-make-challenge-acks-less-predictable.patch diff --git a/kernel.spec b/kernel.spec index ed840006e..ab9f5778e 100644 --- a/kernel.spec +++ b/kernel.spec @@ -54,7 +54,7 @@ Summary: The Linux kernel %if 0%{?released_kernel} # Do we have a -stable update to apply? -%define stable_update 6 +%define stable_update 7 # Set rpm version accordingly %if 0%{?stable_update} %define stablerev %{stable_update} @@ -637,10 +637,6 @@ Patch815: 0015-drm-i915-gen9-Calculate-watermarks-during-atomic-che.patch Patch816: 0016-drm-i915-gen9-Reject-display-updates-that-exceed-wm-.patch Patch817: 0017-drm-i915-Remove-wm_config-from-dev_priv-intel_atomic.patch -#CVE-2016-5389 CVE-2016-5969 rhbz 1354708 1355615 -Patch835: tcp-make-challenge-acks-less-predictable.patch -Patch839: tcp-enable-per-socket-rate-limiting-of-all-challenge.patch - # https://lists.fedoraproject.org/archives/list/kernel@lists.fedoraproject.org/message/A4YCP7OGMX6JLFT5V44H57GOMAQLC3M4/ Patch836: drm-amdgpu-Disable-RPM-helpers-while-reprobing.patch Patch837: drm-i915-Acquire-audio-powerwell-for-HD-Audio-regist.patch @@ -2180,6 +2176,9 @@ fi # # %changelog +* Thu Aug 16 2016 Laura Abbott - 4.6.7-300 +- Linux v4.6.7 + * Thu Aug 11 2016 Laura Abbott - Fix for crash seen with Open Stack (rhbz 1361414) diff --git a/sources b/sources index dbcebdf2e..378381dd9 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ d2927020e24a76da4ab482a8bc3e9ef3 linux-4.6.tar.xz fd23b14b9d474c3dfacb6e8ee82d3a51 perf-man-4.6.tar.gz -84f23eb772635b1348d3ea7c5bd67930 patch-4.6.6.xz +3fc1fcb7ef83c4ef4c05d8bd57e1b985 patch-4.6.7.xz diff --git a/tcp-enable-per-socket-rate-limiting-of-all-challenge.patch b/tcp-enable-per-socket-rate-limiting-of-all-challenge.patch deleted file mode 100644 index 0a5eab8aa..000000000 --- a/tcp-enable-per-socket-rate-limiting-of-all-challenge.patch +++ /dev/null @@ -1,102 +0,0 @@ -From 8272c58d085e5611a7f839fa32e148ae62446375 Mon Sep 17 00:00:00 2001 -From: Jason Baron -Date: Thu, 14 Jul 2016 11:38:40 -0400 -Subject: [PATCH] tcp: enable per-socket rate limiting of all 'challenge acks' - -The per-socket rate limit for 'challenge acks' was introduced in the -context of limiting ack loops: - -commit f2b2c582e824 ("tcp: mitigate ACK loops for connections as tcp_sock") - -And I think it can be extended to rate limit all 'challenge acks' on a -per-socket basis. - -Since we have the global tcp_challenge_ack_limit, this patch allows for -tcp_challenge_ack_limit to be set to a large value and effectively rely on -the per-socket limit, or set tcp_challenge_ack_limit to a lower value and -still prevents a single connections from consuming the entire challenge ack -quota. - -It further moves in the direction of eliminating the global limit at some -point, as Eric Dumazet has suggested. This a follow-up to: -Subject: tcp: make challenge acks less predictable - -Cc: Eric Dumazet -Cc: David S. Miller -Cc: Neal Cardwell -Cc: Yuchung Cheng -Cc: Yue Cao -Signed-off-by: Jason Baron -Signed-off-by: David S. Miller ---- - net/ipv4/tcp_input.c | 39 ++++++++++++++++++++++----------------- - 1 file changed, 22 insertions(+), 17 deletions(-) - -diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c -index 8c011359646b..796315104ad7 100644 ---- a/net/ipv4/tcp_input.c -+++ b/net/ipv4/tcp_input.c -@@ -3423,6 +3423,23 @@ static int tcp_ack_update_window(struct sock *sk, const struct sk_buff *skb, u32 - return flag; - } - -+static bool __tcp_oow_rate_limited(struct net *net, int mib_idx, -+ u32 *last_oow_ack_time) -+{ -+ if (*last_oow_ack_time) { -+ s32 elapsed = (s32)(tcp_time_stamp - *last_oow_ack_time); -+ -+ if (0 <= elapsed && elapsed < sysctl_tcp_invalid_ratelimit) { -+ NET_INC_STATS(net, mib_idx); -+ return true; /* rate-limited: don't send yet! */ -+ } -+ } -+ -+ *last_oow_ack_time = tcp_time_stamp; -+ -+ return false; /* not rate-limited: go ahead, send dupack now! */ -+} -+ - /* Return true if we're currently rate-limiting out-of-window ACKs and - * thus shouldn't send a dupack right now. We rate-limit dupacks in - * response to out-of-window SYNs or ACKs to mitigate ACK loops or DoS -@@ -3436,21 +3453,9 @@ bool tcp_oow_rate_limited(struct net *net, const struct sk_buff *skb, - /* Data packets without SYNs are not likely part of an ACK loop. */ - if ((TCP_SKB_CB(skb)->seq != TCP_SKB_CB(skb)->end_seq) && - !tcp_hdr(skb)->syn) -- goto not_rate_limited; -- -- if (*last_oow_ack_time) { -- s32 elapsed = (s32)(tcp_time_stamp - *last_oow_ack_time); -- -- if (0 <= elapsed && elapsed < sysctl_tcp_invalid_ratelimit) { -- NET_INC_STATS_BH(net, mib_idx); -- return true; /* rate-limited: don't send yet! */ -- } -- } -- -- *last_oow_ack_time = tcp_time_stamp; -+ return false; - --not_rate_limited: -- return false; /* not rate-limited: go ahead, send dupack now! */ -+ return __tcp_oow_rate_limited(net, mib_idx, last_oow_ack_time); - } - - /* RFC 5961 7 [ACK Throttling] */ -@@ -3463,9 +3468,9 @@ static void tcp_send_challenge_ack(struct sock *sk, const struct sk_buff *skb) - u32 count, now; - - /* First check our per-socket dupack rate limit. */ -- if (tcp_oow_rate_limited(sock_net(sk), skb, -- LINUX_MIB_TCPACKSKIPPEDCHALLENGE, -- &tp->last_oow_ack_time)) -+ if (__tcp_oow_rate_limited(sock_net(sk), -+ LINUX_MIB_TCPACKSKIPPEDCHALLENGE, -+ &tp->last_oow_ack_time)) - return; - - /* Then check host-wide RFC 5961 rate limit. */ --- -2.7.4 - diff --git a/tcp-make-challenge-acks-less-predictable.patch b/tcp-make-challenge-acks-less-predictable.patch deleted file mode 100644 index 992e4f522..000000000 --- a/tcp-make-challenge-acks-less-predictable.patch +++ /dev/null @@ -1,83 +0,0 @@ -From 771209218b9ec051a573b9fddc149682a534190e Mon Sep 17 00:00:00 2001 -From: Eric Dumazet -Date: Sun, 10 Jul 2016 10:04:02 +0200 -Subject: [PATCH] tcp: make challenge acks less predictable - -Yue Cao claims that current host rate limiting of challenge ACKS -(RFC 5961) could leak enough information to allow a patient attacker -to hijack TCP sessions. He will soon provide details in an academic -paper. - -This patch increases the default limit from 100 to 1000, and adds -some randomization so that the attacker can no longer hijack -sessions without spending a considerable amount of probes. - -Based on initial analysis and patch from Linus. - -Note that we also have per socket rate limiting, so it is tempting -to remove the host limit in the future. - -v2: randomize the count of challenge acks per second, not the period. - -Fixes: 282f23c6ee34 ("tcp: implement RFC 5961 3.2") -Reported-by: Yue Cao -Signed-off-by: Eric Dumazet -Suggested-by: Linus Torvalds -Cc: Yuchung Cheng -Cc: Neal Cardwell -Acked-by: Neal Cardwell -Acked-by: Yuchung Cheng -Signed-off-by: David S. Miller ---- - net/ipv4/tcp_input.c | 17 +++++++++++------ - 1 file changed, 11 insertions(+), 6 deletions(-) - -diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c -index c124c3c12f7c..8c011359646b 100644 ---- a/net/ipv4/tcp_input.c -+++ b/net/ipv4/tcp_input.c -@@ -87,7 +87,7 @@ int sysctl_tcp_adv_win_scale __read_mostly = 1; - EXPORT_SYMBOL(sysctl_tcp_adv_win_scale); - - /* rfc5961 challenge ack rate limiting */ --int sysctl_tcp_challenge_ack_limit = 100; -+int sysctl_tcp_challenge_ack_limit = 1000; - - int sysctl_tcp_stdurg __read_mostly; - int sysctl_tcp_rfc1337 __read_mostly; -@@ -3460,7 +3460,7 @@ static void tcp_send_challenge_ack(struct sock *sk, const struct sk_buff *skb) - static u32 challenge_timestamp; - static unsigned int challenge_count; - struct tcp_sock *tp = tcp_sk(sk); -- u32 now; -+ u32 count, now; - - /* First check our per-socket dupack rate limit. */ - if (tcp_oow_rate_limited(sock_net(sk), skb, -@@ -3468,14 +3468,19 @@ static void tcp_send_challenge_ack(struct sock *sk, const struct sk_buff *skb) - &tp->last_oow_ack_time)) - return; - -- /* Then check the check host-wide RFC 5961 rate limit. */ -+ /* Then check host-wide RFC 5961 rate limit. */ - now = jiffies / HZ; - if (now != challenge_timestamp) { -+ u32 half = (sysctl_tcp_challenge_ack_limit + 1) >> 1; -+ - challenge_timestamp = now; -- challenge_count = 0; -+ WRITE_ONCE(challenge_count, half + -+ prandom_u32_max(sysctl_tcp_challenge_ack_limit)); - } -- if (++challenge_count <= sysctl_tcp_challenge_ack_limit) { -- NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_TCPCHALLENGEACK); -+ count = READ_ONCE(challenge_count); -+ if (count > 0) { -+ WRITE_ONCE(challenge_count, count - 1); -+ NET_INC_STATS(sock_net(sk), LINUX_MIB_TCPCHALLENGEACK); - tcp_send_ack(sk); - } - } --- -2.5.5 - From 01bd738435139fec9043f43ea36a2f1f45f99b7e Mon Sep 17 00:00:00 2001 From: Laura Abbott Date: Tue, 16 Aug 2016 14:08:20 -0700 Subject: [PATCH 125/275] I only wish it was Thursday --- kernel.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kernel.spec b/kernel.spec index ab9f5778e..0c36a52a0 100644 --- a/kernel.spec +++ b/kernel.spec @@ -2176,7 +2176,7 @@ fi # # %changelog -* Thu Aug 16 2016 Laura Abbott - 4.6.7-300 +* Tue Aug 16 2016 Laura Abbott - 4.6.7-300 - Linux v4.6.7 * Thu Aug 11 2016 Laura Abbott From a06df9a188bd996ca2d55576011c5f74fec87106 Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Wed, 17 Aug 2016 08:47:44 -0500 Subject: [PATCH 126/275] cp fix use after free in tcp_xmit_retransmit_queue (rhbz 1367091 1367092) --- kernel.spec | 8 +++- ...er-free-in-tcp_xmit_retransmit_queue.patch | 46 +++++++++++++++++++ 2 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 tcp-fix-use-after-free-in-tcp_xmit_retransmit_queue.patch diff --git a/kernel.spec b/kernel.spec index 0c36a52a0..d61af5812 100644 --- a/kernel.spec +++ b/kernel.spec @@ -651,6 +651,9 @@ Patch843: kvm-ppc-Book3S-HV-Save-restore-TM-state.patch #rhbz 1361414 Patch844: openstack_fix.patch +#rhbz 1367091,1367092 +Patch855: tcp-fix-use-after-free-in-tcp_xmit_retransmit_queue.patch + # END OF PATCH DEFINITIONS %endif @@ -2176,7 +2179,10 @@ fi # # %changelog -* Tue Aug 16 2016 Laura Abbott - 4.6.7-300 +* Wed Aug 17 2016 Justin M. Forbes - 4.6.7-300 +- tcp fix use after free in tcp_xmit_retransmit_queue (rhbz 1367091 1367092) + +* Tue Aug 16 2016 Laura Abbott - Linux v4.6.7 * Thu Aug 11 2016 Laura Abbott diff --git a/tcp-fix-use-after-free-in-tcp_xmit_retransmit_queue.patch b/tcp-fix-use-after-free-in-tcp_xmit_retransmit_queue.patch new file mode 100644 index 000000000..36ada7acf --- /dev/null +++ b/tcp-fix-use-after-free-in-tcp_xmit_retransmit_queue.patch @@ -0,0 +1,46 @@ +From: Eric Dumazet +Date: 2016-08-17 12:56:26 +Subject: [PATCH net] tcp: fix use after free in tcp_xmit_retransmit_queue() + +When tcp_sendmsg() allocates a fresh and empty skb, it puts it at the +tail of the write queue using tcp_add_write_queue_tail() + +Then it attempts to copy user data into this fresh skb. + +If the copy fails, we undo the work and remove the fresh skb. + +Unfortunately, this undo lacks the change done to tp->highest_sack and +we can leave a dangling pointer (to a freed skb) + +Later, tcp_xmit_retransmit_queue() can dereference this pointer and +access freed memory. For regular kernels where memory is not unmapped, +this might cause SACK bugs because tcp_highest_sack_seq() is buggy, +returning garbage instead of tp->snd_nxt, but with various debug +features like CONFIG_DEBUG_PAGEALLOC, this can crash the kernel. + +This bug was found by Marco Grassi thanks to syzkaller. + +Fixes: 6859d49475d4 ("[TCP]: Abstract tp->highest_sack accessing & point to next skb") +Reported-by: Marco Grassi +Signed-off-by: Eric Dumazet +Cc: Ilpo Järvinen +Cc: Yuchung Cheng +Cc: Neal Cardwell +--- + include/net/tcp.h | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/include/net/tcp.h b/include/net/tcp.h +index c00e7d51bb18..7717302cab91 100644 +--- a/include/net/tcp.h ++++ b/include/net/tcp.h +@@ -1523,6 +1523,8 @@ static inline void tcp_check_send_head(struct sock *sk, struct sk_buff *skb_unli + { + if (sk->sk_send_head == skb_unlinked) + sk->sk_send_head = NULL; ++ if (tcp_sk(sk)->highest_sack == skb_unlinked) ++ tcp_sk(sk)->highest_sack = NULL; + } + + static inline void tcp_init_send_head(struct sock *sk) + From 6c78eb7591be8b217f4afaca0fb03217c926f584 Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Thu, 18 Aug 2016 09:48:19 -0400 Subject: [PATCH 127/275] Fix typo in CVE number --- kernel.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kernel.spec b/kernel.spec index d61af5812..34af9f0a9 100644 --- a/kernel.spec +++ b/kernel.spec @@ -2217,7 +2217,7 @@ fi - Fix various i915 uncore oopses (rhbz 1340218 1325020 1342722 1347681) * Tue Jul 12 2016 Josh Boyer - 4.6.4-301 -- CVE-2016-5389 CVE-2016-5969 tcp challenge ack info leak (rhbz 1354708 1355615) +- CVE-2016-5389 CVE-2016-5696 tcp challenge ack info leak (rhbz 1354708 1355615) * Mon Jul 11 2016 Josh Boyer - 4.6.4-300 - Linux v4.6.4 From 0d249158e62b170e6aa3ee9e5a0815fb2932a95e Mon Sep 17 00:00:00 2001 From: Laura Abbott Date: Mon, 25 Jul 2016 15:01:09 -0700 Subject: [PATCH 128/275] Linux v4.7.2 --- ...equest-native-thermal-interrupt-hand.patch | 169 --- ...nize-WM-structs-unions-in-CRTC-state.patch | 209 +-- ...pply-bounds-checking-to-source-types.patch | 203 +++ ...distrust_bios_wm-flag-to-dev_priv-v2.patch | 74 +- ...mpute-DDB-allocation-at-atomic-check.patch | 146 +- ...op-re-allocation-of-DDB-at-atomic-co.patch | 70 +- ...lculate-watermarks-during-atomic-che.patch | 153 +- ...wm_config-from-dev_priv-intel_atomic.patch | 54 +- Add-EFI-signature-data-types.patch | 20 +- ...signature-blob-parser-and-key-loader.patch | 31 +- ...tomatically-enforce-module-signature.patch | 85 +- Add-secure_modules-call.patch | 16 +- ...o-use-stdout-path-for-serial-console.patch | 318 ----- KEYS-Add-a-system-blacklist-keyring.patch | 77 +- ...t-certificates-from-UEFI-Secure-Boot.patch | 81 +- ...-Support-not-importing-certs-from-db.patch | 20 +- ...sbfs-fix-potential-infoleak-in-devio.patch | 41 - arm-i.MX6-Utilite-device-dtb.patch | 311 ++-- arm64-acpi-drop-expert-patch.patch | 21 - arm64-pcie-acpi.patch | 1247 +++++++++++++++++ arm64-pcie-quirks-xgene.patch | 508 +++++++ ...fetch-in-audit_log_single_execve_arg.patch | 413 ------ bcm283x-upstream-fixes.patch | 206 --- config-arm-generic | 64 +- config-arm64 | 16 +- config-armv7 | 9 +- config-armv7-generic | 41 +- config-armv7-lpae | 12 + config-debug | 1 + config-generic | 219 ++- config-nodebug | 1 + config-powerpc64-generic | 7 +- config-s390x | 1 + config-x86-generic | 26 +- config-x86_64-generic | 5 + ...-Disable-RPM-helpers-while-reprobing.patch | 70 - drm-i915-hush-check-crtc-state.patch | 24 +- ...ECURE_BOOT_SIG_ENFORCE-depend-on-EFI.patch | 30 - filter-aarch64.sh | 2 +- filter-armv7hl.sh | 2 +- filter-i686.sh | 2 +- filter-modules.sh | 2 +- filter-ppc64.sh | 2 +- filter-ppc64le.sh | 2 +- filter-ppc64p7.sh | 2 +- geekbox-v4-device-tree-support.patch | 367 +---- hp-wmi-fix-wifi-cannot-be-hard-unblock.patch | 48 - kernel.spec | 67 +- ...ppc-Book3S-HV-Pull-out-TM-state-save.patch | 506 ------- kvm-ppc-Book3S-HV-Save-restore-TM-state.patch | 67 - ...omplete-state-update-on-APICv-on-off.patch | 112 -- ...-PHY-interrupts-are-overwritten-by-0.patch | 52 - ...es-deal-with-bogus-nextoffset-values.patch | 109 ++ openstack_fix.patch | 53 - sources | 6 +- ...er-free-in-tcp_xmit_retransmit_queue.patch | 46 - ...infoleak-in-tipc_nl_compat_link_dump.patch | 32 - 57 files changed, 3107 insertions(+), 3371 deletions(-) delete mode 100644 0001-ACPI-processor-Request-native-thermal-interrupt-hand.patch create mode 100644 0001-selinux-Only-apply-bounds-checking-to-source-types.patch delete mode 100644 Fix-tegra-to-use-stdout-path-for-serial-console.patch delete mode 100644 USB-usbfs-fix-potential-infoleak-in-devio.patch delete mode 100644 arm64-acpi-drop-expert-patch.patch create mode 100644 arm64-pcie-acpi.patch create mode 100644 arm64-pcie-quirks-xgene.patch delete mode 100644 audit-fix-a-double-fetch-in-audit_log_single_execve_arg.patch delete mode 100644 drm-amdgpu-Disable-RPM-helpers-while-reprobing.patch delete mode 100644 efi-Make-EFI_SECURE_BOOT_SIG_ENFORCE-depend-on-EFI.patch delete mode 100644 hp-wmi-fix-wifi-cannot-be-hard-unblock.patch delete mode 100644 kvm-ppc-Book3S-HV-Pull-out-TM-state-save.patch delete mode 100644 kvm-ppc-Book3S-HV-Save-restore-TM-state.patch delete mode 100644 kvm-vmx-more-complete-state-update-on-APICv-on-off.patch delete mode 100644 net-smsc911x-Fix-bug-where-PHY-interrupts-are-overwritten-by-0.patch create mode 100644 netfilter-x_tables-deal-with-bogus-nextoffset-values.patch delete mode 100644 openstack_fix.patch delete mode 100644 tcp-fix-use-after-free-in-tcp_xmit_retransmit_queue.patch delete mode 100644 tipc-fix-an-infoleak-in-tipc_nl_compat_link_dump.patch diff --git a/0001-ACPI-processor-Request-native-thermal-interrupt-hand.patch b/0001-ACPI-processor-Request-native-thermal-interrupt-hand.patch deleted file mode 100644 index a76603900..000000000 --- a/0001-ACPI-processor-Request-native-thermal-interrupt-hand.patch +++ /dev/null @@ -1,169 +0,0 @@ -From a21211672c9a1d730a39aa65d4a5b3414700adfb Mon Sep 17 00:00:00 2001 -From: Srinivas Pandruvada -Date: Wed, 23 Mar 2016 21:07:39 -0700 -Subject: [PATCH] ACPI / processor: Request native thermal interrupt handling - via _OSC - -There are several reports of freeze on enabling HWP (Hardware PStates) -feature on Skylake-based systems by the Intel P-states driver. The root -cause is identified as the HWP interrupts causing BIOS code to freeze. - -HWP interrupts use the thermal LVT which can be handled by Linux -natively, but on the affected Skylake-based systems SMM will respond -to it by default. This is a problem for several reasons: - - On the affected systems the SMM thermal LVT handler is broken (it - will crash when invoked) and a BIOS update is necessary to fix it. - - With thermal interrupt handled in SMM we lose all of the reporting - features of the arch/x86/kernel/cpu/mcheck/therm_throt driver. - - Some thermal drivers like x86-package-temp depend on the thermal - threshold interrupts signaled via the thermal LVT. - - The HWP interrupts are useful for debugging and tuning - performance (if the kernel can handle them). -The native handling of thermal interrupts needs to be enabled -because of that. - -This requires some way to tell SMM that the OS can handle thermal -interrupts. That can be done by using _OSC/_PDC in processor -scope very early during ACPI initialization. - -The meaning of _OSC/_PDC bit 12 in processor scope is whether or -not the OS supports native handling of interrupts for Collaborative -Processor Performance Control (CPPC) notifications. Since on -HWP-capable systems CPPC is a firmware interface to HWP, setting -this bit effectively tells the firmware that the OS will handle -thermal interrupts natively going forward. - -For details on _OSC/_PDC refer to: -http://www.intel.com/content/www/us/en/standards/processor-vendor-specific-acpi-specification.html - -To implement the _OSC/_PDC handshake as described, introduce a new -function, acpi_early_processor_osc(), that walks the ACPI -namespace looking for ACPI processor objects and invokes _OSC for -them with bit 12 in the capabilities buffer set and terminates the -namespace walk on the first success. - -Also modify intel_thermal_interrupt() to clear HWP status bits in -the HWP_STATUS MSR to acknowledge HWP interrupts (which prevents -them from firing continuously). - -Signed-off-by: Srinivas Pandruvada -[ rjw: Subject & changelog, function rename ] -Signed-off-by: Rafael J. Wysocki ---- - arch/x86/kernel/cpu/mcheck/therm_throt.c | 3 ++ - drivers/acpi/acpi_processor.c | 52 ++++++++++++++++++++++++++++++++ - drivers/acpi/bus.c | 3 ++ - drivers/acpi/internal.h | 6 ++++ - 4 files changed, 64 insertions(+) - -diff --git a/arch/x86/kernel/cpu/mcheck/therm_throt.c b/arch/x86/kernel/cpu/mcheck/therm_throt.c -index 2c5aaf8..0553858 100644 ---- a/arch/x86/kernel/cpu/mcheck/therm_throt.c -+++ b/arch/x86/kernel/cpu/mcheck/therm_throt.c -@@ -385,6 +385,9 @@ static void intel_thermal_interrupt(void) - { - __u64 msr_val; - -+ if (static_cpu_has(X86_FEATURE_HWP)) -+ wrmsrl_safe(MSR_HWP_STATUS, 0); -+ - rdmsrl(MSR_IA32_THERM_STATUS, msr_val); - - /* Check for violation of core thermal thresholds*/ -diff --git a/drivers/acpi/acpi_processor.c b/drivers/acpi/acpi_processor.c -index b5e54f2..0d92d0f 100644 ---- a/drivers/acpi/acpi_processor.c -+++ b/drivers/acpi/acpi_processor.c -@@ -491,6 +491,58 @@ static void acpi_processor_remove(struct acpi_device *device) - } - #endif /* CONFIG_ACPI_HOTPLUG_CPU */ - -+#ifdef CONFIG_X86 -+static bool acpi_hwp_native_thermal_lvt_set; -+static acpi_status __init acpi_hwp_native_thermal_lvt_osc(acpi_handle handle, -+ u32 lvl, -+ void *context, -+ void **rv) -+{ -+ u8 sb_uuid_str[] = "4077A616-290C-47BE-9EBD-D87058713953"; -+ u32 capbuf[2]; -+ struct acpi_osc_context osc_context = { -+ .uuid_str = sb_uuid_str, -+ .rev = 1, -+ .cap.length = 8, -+ .cap.pointer = capbuf, -+ }; -+ -+ if (acpi_hwp_native_thermal_lvt_set) -+ return AE_CTRL_TERMINATE; -+ -+ capbuf[0] = 0x0000; -+ capbuf[1] = 0x1000; /* set bit 12 */ -+ -+ if (ACPI_SUCCESS(acpi_run_osc(handle, &osc_context))) { -+ if (osc_context.ret.pointer && osc_context.ret.length > 1) { -+ u32 *capbuf_ret = osc_context.ret.pointer; -+ -+ if (capbuf_ret[1] & 0x1000) { -+ acpi_handle_info(handle, -+ "_OSC native thermal LVT Acked\n"); -+ acpi_hwp_native_thermal_lvt_set = true; -+ } -+ } -+ kfree(osc_context.ret.pointer); -+ } -+ -+ return AE_OK; -+} -+ -+void __init acpi_early_processor_osc(void) -+{ -+ if (boot_cpu_has(X86_FEATURE_HWP)) { -+ acpi_walk_namespace(ACPI_TYPE_PROCESSOR, ACPI_ROOT_OBJECT, -+ ACPI_UINT32_MAX, -+ acpi_hwp_native_thermal_lvt_osc, -+ NULL, NULL, NULL); -+ acpi_get_devices(ACPI_PROCESSOR_DEVICE_HID, -+ acpi_hwp_native_thermal_lvt_osc, -+ NULL, NULL); -+ } -+} -+#endif -+ - /* - * The following ACPI IDs are known to be suitable for representing as - * processor devices. -diff --git a/drivers/acpi/bus.c b/drivers/acpi/bus.c -index 891c42d..f9081b7 100644 ---- a/drivers/acpi/bus.c -+++ b/drivers/acpi/bus.c -@@ -1005,6 +1005,9 @@ static int __init acpi_bus_init(void) - goto error1; - } - -+ /* Set capability bits for _OSC under processor scope */ -+ acpi_early_processor_osc(); -+ - /* - * _OSC method may exist in module level code, - * so it must be run after ACPI_FULL_INITIALIZATION -diff --git a/drivers/acpi/internal.h b/drivers/acpi/internal.h -index 1e6833a..6f41c73 100644 ---- a/drivers/acpi/internal.h -+++ b/drivers/acpi/internal.h -@@ -138,6 +138,12 @@ void acpi_early_processor_set_pdc(void); - static inline void acpi_early_processor_set_pdc(void) {} - #endif - -+#ifdef CONFIG_X86 -+void acpi_early_processor_osc(void); -+#else -+static inline void acpi_early_processor_osc(void) {} -+#endif -+ - /* -------------------------------------------------------------------------- - Embedded Controller - -------------------------------------------------------------------------- */ --- -2.5.5 - diff --git a/0001-drm-i915-Reorganize-WM-structs-unions-in-CRTC-state.patch b/0001-drm-i915-Reorganize-WM-structs-unions-in-CRTC-state.patch index dc6e2e086..f30e32dc4 100644 --- a/0001-drm-i915-Reorganize-WM-structs-unions-in-CRTC-state.patch +++ b/0001-drm-i915-Reorganize-WM-structs-unions-in-CRTC-state.patch @@ -1,64 +1,68 @@ -From 2a6f0971d09e2bb88d2ae40d91ceb2776090497d Mon Sep 17 00:00:00 2001 -From: Fedora Kernel Team -Date: Mon, 20 Jun 2016 11:11:50 +0200 +From 0042e1e7a03a2fb5d6c464c03ce84d55b31add11 Mon Sep 17 00:00:00 2001 +From: Matt Roper +Date: Thu, 12 May 2016 07:05:55 -0700 Subject: [PATCH 01/17] drm/i915: Reorganize WM structs/unions in CRTC state -Upstream: since drm-intel-next-2016-05-22 -commit e8f1f02e7125220b99af8047703b63c11a7081d6 +Reorganize the nested structures and unions we have for pipe watermark +data in intel_crtc_state so that platform-specific data can be added in +a more sensible manner (and save a bit of memory at the same time). -Author: Matt Roper -AuthorDate: Thu May 12 07:05:55 2016 -0700 -Commit: Matt Roper -CommitDate: Fri May 13 07:32:11 2016 -0700 +The change basically changes the organization from: - drm/i915: Reorganize WM structs/unions in CRTC state + union { + struct intel_pipe_wm ilk; + struct intel_pipe_wm skl; + } optimal; - Reorganize the nested structures and unions we have for pipe watermark - data in intel_crtc_state so that platform-specific data can be added in - a more sensible manner (and save a bit of memory at the same time). + struct intel_pipe_wm intermediate /* ILK-only */ - The change basically changes the organization from: +to - union { - struct intel_pipe_wm ilk; - struct intel_pipe_wm skl; - } optimal; + union { + struct { + struct intel_pipe_wm intermediate; + struct intel_pipe_wm optimal; + } ilk; - struct intel_pipe_wm intermediate /* ILK-only */ + struct { + struct intel_pipe_wm optimal; + } skl; + } - to +There should be no functional change here, but it will allow us to add +more platform-specific fields going forward (and more easily extend to +other platform types like VLV). - union { - struct { - struct intel_pipe_wm intermediate; - struct intel_pipe_wm optimal; - } ilk; +While we're at it, let's move the entire watermark substructure out to +its own structure definition to make the code slightly more readable. - struct { - struct intel_pipe_wm optimal; - } skl; - } - - There should be no functional change here, but it will allow us to add - more platform-specific fields going forward (and more easily extend to - other platform types like VLV). - - While we're at it, let's move the entire watermark substructure out to - its own structure definition to make the code slightly more readable. - - Signed-off-by: Matt Roper - Reviewed-by: Maarten Lankhorst - Link: http://patchwork.freedesktop.org/patch/msgid/1463061971-19638-2-git-send-email-matthew.d.roper@intel.com +Signed-off-by: Matt Roper +Reviewed-by: Maarten Lankhorst +Link: http://patchwork.freedesktop.org/patch/msgid/1463061971-19638-2-git-send-email-matthew.d.roper@intel.com --- - drivers/gpu/drm/i915/intel_drv.h | 48 +++++++++++++++++++++++++++++++--------- - drivers/gpu/drm/i915/intel_pm.c | 16 +++++++------- - 2 files changed, 46 insertions(+), 18 deletions(-) + drivers/gpu/drm/i915/intel_display.c | 2 +- + drivers/gpu/drm/i915/intel_drv.h | 61 +++++++++++++++++++++--------------- + drivers/gpu/drm/i915/intel_pm.c | 18 +++++------ + 3 files changed, 45 insertions(+), 36 deletions(-) +diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c +index d19b392..4633aec 100644 +--- a/drivers/gpu/drm/i915/intel_display.c ++++ b/drivers/gpu/drm/i915/intel_display.c +@@ -12027,7 +12027,7 @@ static int intel_crtc_atomic_check(struct drm_crtc *crtc, + } + } else if (dev_priv->display.compute_intermediate_wm) { + if (HAS_PCH_SPLIT(dev_priv) && INTEL_GEN(dev_priv) < 9) +- pipe_config->wm.intermediate = pipe_config->wm.optimal.ilk; ++ pipe_config->wm.ilk.intermediate = pipe_config->wm.ilk.optimal; + } + + if (INTEL_INFO(dev)->gen >= 9) { diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h -index 3a30b37..7d19baf 100644 +index 4a24b00..5a186bf 100644 --- a/drivers/gpu/drm/i915/intel_drv.h +++ b/drivers/gpu/drm/i915/intel_drv.h -@@ -363,6 +363,40 @@ struct skl_pipe_wm { +@@ -405,6 +405,40 @@ struct skl_pipe_wm { uint32_t linetime; }; @@ -99,65 +103,81 @@ index 3a30b37..7d19baf 100644 struct intel_crtc_state { struct drm_crtc_state base; -@@ -509,16 +543,10 @@ struct intel_crtc_state { +@@ -558,32 +592,7 @@ struct intel_crtc_state { /* IVB sprite scaling w/a (WaCxSRDisabledForSpriteScaling:ivb) */ bool disable_lp_wm; - struct { - /* -- * optimal watermarks, programmed post-vblank when this state -- * is committed +- * Optimal watermarks, programmed post-vblank when this state +- * is committed. - */ - union { - struct intel_pipe_wm ilk; - struct skl_pipe_wm skl; - } optimal; +- +- /* +- * Intermediate watermarks; these can be programmed immediately +- * since they satisfy both the current configuration we're +- * switching away from and the new configuration we're switching +- * to. +- */ +- struct intel_pipe_wm intermediate; +- +- /* +- * Platforms with two-step watermark programming will need to +- * update watermark programming post-vblank to switch from the +- * safe intermediate watermarks to the optimal final +- * watermarks. +- */ +- bool need_postvbl_update; - } wm; + struct intel_crtc_wm_state wm; -+ -+ /* Gamma mode programmed on the pipe */ -+ uint32_t gamma_mode; - }; - struct vlv_wm_state { + /* Gamma mode programmed on the pipe */ + uint32_t gamma_mode; diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c -index 54ab023..0da1d60 100644 +index a7ef45d..4353fec 100644 --- a/drivers/gpu/drm/i915/intel_pm.c +++ b/drivers/gpu/drm/i915/intel_pm.c -@@ -2302,7 +2302,7 @@ static int ilk_compute_pipe_wm(struct intel_crtc *intel_crtc, - if (IS_ERR(cstate)) - return PTR_ERR(cstate); +@@ -2309,7 +2309,7 @@ static int ilk_compute_pipe_wm(struct intel_crtc_state *cstate) + int level, max_level = ilk_wm_max_level(dev), usable_level; + struct ilk_wm_maximums max; - pipe_wm = &cstate->wm.optimal.ilk; + pipe_wm = &cstate->wm.ilk.optimal; - memset(pipe_wm, 0, sizeof(*pipe_wm)); for_each_intel_plane_on_crtc(dev, intel_crtc, intel_plane) { -@@ -2385,7 +2385,7 @@ static void ilk_merge_wm_level(struct drm_device *dev, - for_each_intel_crtc(dev, intel_crtc) { - const struct intel_crtc_state *cstate = - to_intel_crtc_state(intel_crtc->base.state); -- const struct intel_pipe_wm *active = &cstate->wm.optimal.ilk; -+ const struct intel_pipe_wm *active = &cstate->wm.ilk.optimal; - const struct intel_wm_level *wm = &active->wm[level]; + struct intel_plane_state *ps; +@@ -2391,7 +2391,7 @@ static int ilk_compute_intermediate_wm(struct drm_device *dev, + struct intel_crtc *intel_crtc, + struct intel_crtc_state *newstate) + { +- struct intel_pipe_wm *a = &newstate->wm.intermediate; ++ struct intel_pipe_wm *a = &newstate->wm.ilk.intermediate; + struct intel_pipe_wm *b = &intel_crtc->wm.active.ilk; + int level, max_level = ilk_wm_max_level(dev); - if (!active->pipe_enabled) -@@ -2536,12 +2536,12 @@ static void ilk_compute_wm_results(struct drm_device *dev, - const struct intel_crtc_state *cstate = - to_intel_crtc_state(intel_crtc->base.state); - enum pipe pipe = intel_crtc->pipe; -- const struct intel_wm_level *r = &cstate->wm.optimal.ilk.wm[0]; -+ const struct intel_wm_level *r = &cstate->wm.ilk.optimal.wm[0]; +@@ -2400,7 +2400,7 @@ static int ilk_compute_intermediate_wm(struct drm_device *dev, + * currently active watermarks to get values that are safe both before + * and after the vblank. + */ +- *a = newstate->wm.optimal.ilk; ++ *a = newstate->wm.ilk.optimal; + a->pipe_enabled |= b->pipe_enabled; + a->sprites_enabled |= b->sprites_enabled; + a->sprites_scaled |= b->sprites_scaled; +@@ -2429,7 +2429,7 @@ static int ilk_compute_intermediate_wm(struct drm_device *dev, + * If our intermediate WM are identical to the final WM, then we can + * omit the post-vblank programming; only update if it's different. + */ +- if (memcmp(a, &newstate->wm.optimal.ilk, sizeof(*a)) == 0) ++ if (memcmp(a, &newstate->wm.ilk.optimal, sizeof(*a)) == 0) + newstate->wm.need_postvbl_update = false; - if (WARN_ON(!r->enable)) - continue; - -- results->wm_linetime[pipe] = cstate->wm.optimal.ilk.linetime; -+ results->wm_linetime[pipe] = cstate->wm.ilk.optimal.linetime; - - results->wm_pipe[pipe] = - (r->pri_val << WM0_PIPE_PLANE_SHIFT) | -@@ -3617,7 +3617,7 @@ static void skl_update_wm(struct drm_crtc *crtc) + return 0; +@@ -3678,7 +3678,7 @@ static void skl_update_wm(struct drm_crtc *crtc) struct drm_i915_private *dev_priv = dev->dev_private; struct skl_wm_values *results = &dev_priv->wm.skl_results; struct intel_crtc_state *cstate = to_intel_crtc_state(crtc->state); @@ -166,16 +186,25 @@ index 54ab023..0da1d60 100644 /* Clear all dirty flags */ -@@ -3711,7 +3711,7 @@ static void ilk_update_wm(struct drm_crtc *crtc) - intel_wait_for_vblank(crtc->dev, intel_crtc->pipe); - } +@@ -3757,7 +3757,7 @@ static void ilk_initial_watermarks(struct intel_crtc_state *cstate) + struct intel_crtc *intel_crtc = to_intel_crtc(cstate->base.crtc); -- intel_crtc->wm.active.ilk = cstate->wm.optimal.ilk; -+ intel_crtc->wm.active.ilk = cstate->wm.ilk.optimal; - - ilk_program_watermarks(cstate); + mutex_lock(&dev_priv->wm.wm_mutex); +- intel_crtc->wm.active.ilk = cstate->wm.intermediate; ++ intel_crtc->wm.active.ilk = cstate->wm.ilk.intermediate; + ilk_program_watermarks(dev_priv); + mutex_unlock(&dev_priv->wm.wm_mutex); } -@@ -3767,7 +3767,7 @@ static void skl_pipe_wm_get_hw_state(struct drm_crtc *crtc) +@@ -3769,7 +3769,7 @@ static void ilk_optimize_watermarks(struct intel_crtc_state *cstate) + + mutex_lock(&dev_priv->wm.wm_mutex); + if (cstate->wm.need_postvbl_update) { +- intel_crtc->wm.active.ilk = cstate->wm.optimal.ilk; ++ intel_crtc->wm.active.ilk = cstate->wm.ilk.optimal; + ilk_program_watermarks(dev_priv); + } + mutex_unlock(&dev_priv->wm.wm_mutex); +@@ -3826,7 +3826,7 @@ static void skl_pipe_wm_get_hw_state(struct drm_crtc *crtc) struct skl_wm_values *hw = &dev_priv->wm.skl_hw; struct intel_crtc *intel_crtc = to_intel_crtc(crtc); struct intel_crtc_state *cstate = to_intel_crtc_state(crtc->state); @@ -184,7 +213,7 @@ index 54ab023..0da1d60 100644 enum pipe pipe = intel_crtc->pipe; int level, i, max_level; uint32_t temp; -@@ -3833,7 +3833,7 @@ static void ilk_pipe_wm_get_hw_state(struct drm_crtc *crtc) +@@ -3892,7 +3892,7 @@ static void ilk_pipe_wm_get_hw_state(struct drm_crtc *crtc) struct ilk_wm_values *hw = &dev_priv->wm.hw; struct intel_crtc *intel_crtc = to_intel_crtc(crtc); struct intel_crtc_state *cstate = to_intel_crtc_state(crtc->state); diff --git a/0001-selinux-Only-apply-bounds-checking-to-source-types.patch b/0001-selinux-Only-apply-bounds-checking-to-source-types.patch new file mode 100644 index 000000000..dcc9e6b2b --- /dev/null +++ b/0001-selinux-Only-apply-bounds-checking-to-source-types.patch @@ -0,0 +1,203 @@ +From 7ea59202db8d20806d9ae552acd1875c3a978bcc Mon Sep 17 00:00:00 2001 +From: Stephen Smalley +Date: Mon, 23 May 2016 10:54:11 -0400 +Subject: [PATCH] selinux: Only apply bounds checking to source types + +The current bounds checking of both source and target types +requires allowing any domain that has access to the child +domain to also have the same permissions to the parent, which +is undesirable. Drop the target bounds checking. + +KaiGai Kohei originally removed all use of target bounds in +commit 7d52a155e38d ("selinux: remove dead code in +type_attribute_bounds_av()") but this was reverted in +commit 2ae3ba39389b ("selinux: libsepol: remove dead code in +check_avtab_hierarchy_callback()") because it would have +required explicitly allowing the parent any permissions +to the child that the child is allowed to itself. + +This change in contrast retains the logic for the case where both +source and target types are bounded, thereby allowing access +if the parent of the source is allowed the corresponding +permissions to the parent of the target. Further, this change +reworks the logic such that we only perform a single computation +for each case and there is no ambiguity as to how to resolve +a bounds violation. + +Under the new logic, if the source type and target types are both +bounded, then the parent of the source type must be allowed the same +permissions to the parent of the target type. If only the source +type is bounded, then the parent of the source type must be allowed +the same permissions to the target type. + +Examples of the new logic and comparisons with the old logic: +1. If we have: + typebounds A B; +then: + allow B self:process ; +will satisfy the bounds constraint iff: + allow A self:process ; +is also allowed in policy. + +Under the old logic, the allow rule on B satisfies the +bounds constraint if any of the following three are allowed: + allow A B:process ; or + allow B A:process ; or + allow A self:process ; +However, either of the first two ultimately require the third to +satisfy the bounds constraint under the old logic, and therefore +this degenerates to the same result (but is more efficient - we only +need to perform one compute_av call). + +2. If we have: + typebounds A B; + typebounds A_exec B_exec; +then: + allow B B_exec:file ; +will satisfy the bounds constraint iff: + allow A A_exec:file ; +is also allowed in policy. + +This is essentially the same as #1; it is merely included as +an example of dealing with object types related to a bounded domain +in a manner that satisfies the bounds relationship. Note that +this approach is preferable to leaving B_exec unbounded and having: + allow A B_exec:file ; +in policy because that would allow B's entrypoints to be used to +enter A. Similarly for _tmp or other related types. + +3. If we have: + typebounds A B; +and an unbounded type T, then: + allow B T:file ; +will satisfy the bounds constraint iff: + allow A T:file ; +is allowed in policy. + +The old logic would have been identical for this example. + +4. If we have: + typebounds A B; +and an unbounded domain D, then: + allow D B:unix_stream_socket ; +is not subject to any bounds constraints under the new logic +because D is not bounded. This is desirable so that we can +allow a domain to e.g. connectto a child domain without having +to allow it to do the same to its parent. + +The old logic would have required: + allow D A:unix_stream_socket ; +to also be allowed in policy. + +Signed-off-by: Stephen Smalley +[PM: re-wrapped description to appease checkpatch.pl] +Signed-off-by: Paul Moore +--- + security/selinux/ss/services.c | 70 +++++++++++++----------------------------- + 1 file changed, 22 insertions(+), 48 deletions(-) + +diff --git a/security/selinux/ss/services.c b/security/selinux/ss/services.c +index 89df646..082b20c 100644 +--- a/security/selinux/ss/services.c ++++ b/security/selinux/ss/services.c +@@ -543,7 +543,7 @@ static void type_attribute_bounds_av(struct context *scontext, + struct av_decision *avd) + { + struct context lo_scontext; +- struct context lo_tcontext; ++ struct context lo_tcontext, *tcontextp = tcontext; + struct av_decision lo_avd; + struct type_datum *source; + struct type_datum *target; +@@ -553,67 +553,41 @@ static void type_attribute_bounds_av(struct context *scontext, + scontext->type - 1); + BUG_ON(!source); + ++ if (!source->bounds) ++ return; ++ + target = flex_array_get_ptr(policydb.type_val_to_struct_array, + tcontext->type - 1); + BUG_ON(!target); + +- if (source->bounds) { +- memset(&lo_avd, 0, sizeof(lo_avd)); +- +- memcpy(&lo_scontext, scontext, sizeof(lo_scontext)); +- lo_scontext.type = source->bounds; ++ memset(&lo_avd, 0, sizeof(lo_avd)); + +- context_struct_compute_av(&lo_scontext, +- tcontext, +- tclass, +- &lo_avd, +- NULL); +- if ((lo_avd.allowed & avd->allowed) == avd->allowed) +- return; /* no masked permission */ +- masked = ~lo_avd.allowed & avd->allowed; +- } ++ memcpy(&lo_scontext, scontext, sizeof(lo_scontext)); ++ lo_scontext.type = source->bounds; + + if (target->bounds) { +- memset(&lo_avd, 0, sizeof(lo_avd)); +- + memcpy(&lo_tcontext, tcontext, sizeof(lo_tcontext)); + lo_tcontext.type = target->bounds; +- +- context_struct_compute_av(scontext, +- &lo_tcontext, +- tclass, +- &lo_avd, +- NULL); +- if ((lo_avd.allowed & avd->allowed) == avd->allowed) +- return; /* no masked permission */ +- masked = ~lo_avd.allowed & avd->allowed; ++ tcontextp = &lo_tcontext; + } + +- if (source->bounds && target->bounds) { +- memset(&lo_avd, 0, sizeof(lo_avd)); +- /* +- * lo_scontext and lo_tcontext are already +- * set up. +- */ ++ context_struct_compute_av(&lo_scontext, ++ tcontextp, ++ tclass, ++ &lo_avd, ++ NULL); + +- context_struct_compute_av(&lo_scontext, +- &lo_tcontext, +- tclass, +- &lo_avd, +- NULL); +- if ((lo_avd.allowed & avd->allowed) == avd->allowed) +- return; /* no masked permission */ +- masked = ~lo_avd.allowed & avd->allowed; +- } ++ masked = ~lo_avd.allowed & avd->allowed; + +- if (masked) { +- /* mask violated permissions */ +- avd->allowed &= ~masked; ++ if (likely(!masked)) ++ return; /* no masked permission */ + +- /* audit masked permissions */ +- security_dump_masked_av(scontext, tcontext, +- tclass, masked, "bounds"); +- } ++ /* mask violated permissions */ ++ avd->allowed &= ~masked; ++ ++ /* audit masked permissions */ ++ security_dump_masked_av(scontext, tcontext, ++ tclass, masked, "bounds"); + } + + /* +-- +2.7.4 + diff --git a/0008-drm-i915-Add-distrust_bios_wm-flag-to-dev_priv-v2.patch b/0008-drm-i915-Add-distrust_bios_wm-flag-to-dev_priv-v2.patch index 7a45a28a4..9131a60da 100644 --- a/0008-drm-i915-Add-distrust_bios_wm-flag-to-dev_priv-v2.patch +++ b/0008-drm-i915-Add-distrust_bios_wm-flag-to-dev_priv-v2.patch @@ -1,39 +1,29 @@ -From 0126336af286ea85c1137ad13882f8c93d74c6c3 Mon Sep 17 00:00:00 2001 -From: Fedora Kernel Team -Date: Mon, 20 Jun 2016 12:40:13 +0200 +From 7207eecfcb3095442bce30227b551003edc7b908 Mon Sep 17 00:00:00 2001 +From: Matt Roper +Date: Thu, 12 May 2016 07:06:02 -0700 Subject: [PATCH 08/17] drm/i915: Add distrust_bios_wm flag to dev_priv (v2) -Upstream: since drm-intel-next-2016-05-22 -commit 279e99d76e6097ee7b531114777fa9b030496d81 +SKL-style platforms can't fully trust the watermark/DDB settings +programmed by the BIOS and need to do extra sanitization on their first +atomic update. Add a flag to dev_priv that is set during hardware +readout and cleared at the end of the first commit. -Author: Matt Roper -AuthorDate: Thu May 12 07:06:02 2016 -0700 -Commit: Matt Roper -CommitDate: Fri May 13 07:33:54 2016 -0700 +Note that for the somewhat common case where everything is turned off +when the driver starts up, we don't need to bother with a recompute...we +know exactly what the DDB should be (all zero's) so just setup the DDB +directly in that case. - drm/i915: Add distrust_bios_wm flag to dev_priv (v2) +v2: + - Move clearing of distrust_bios_wm up below the swap_state call since + it's a more natural / self-explanatory location. (Maarten) + - Use dev_priv->active_crtcs to test whether any CRTC's are turned on + during HW WM readout rather than trying to count the active CRTC's + again ourselves. (Maarten) - SKL-style platforms can't fully trust the watermark/DDB settings - programmed by the BIOS and need to do extra sanitization on their first - atomic update. Add a flag to dev_priv that is set during hardware - readout and cleared at the end of the first commit. - - Note that for the somewhat common case where everything is turned off - when the driver starts up, we don't need to bother with a recompute...we - know exactly what the DDB should be (all zero's) so just setup the DDB - directly in that case. - - v2: - - Move clearing of distrust_bios_wm up below the swap_state call since - it's a more natural / self-explanatory location. (Maarten) - - Use dev_priv->active_crtcs to test whether any CRTC's are turned on - during HW WM readout rather than trying to count the active CRTC's - again ourselves. (Maarten) - - Cc: Maarten Lankhorst - Signed-off-by: Matt Roper - Reviewed-by: Maarten Lankhorst - Link: http://patchwork.freedesktop.org/patch/msgid/1463061971-19638-9-git-send-email-matthew.d.roper@intel.com +Cc: Maarten Lankhorst +Signed-off-by: Matt Roper +Reviewed-by: Maarten Lankhorst +Link: http://patchwork.freedesktop.org/patch/msgid/1463061971-19638-9-git-send-email-matthew.d.roper@intel.com --- drivers/gpu/drm/i915/i915_drv.h | 7 +++++++ drivers/gpu/drm/i915/intel_display.c | 1 + @@ -41,13 +31,13 @@ CommitDate: Fri May 13 07:33:54 2016 -0700 3 files changed, 16 insertions(+) diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h -index 804af6f..ae7932a 100644 +index 611c128..e21960d 100644 --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h -@@ -1986,6 +1986,13 @@ struct drm_i915_private { - }; - - uint8_t max_level; +@@ -1981,6 +1981,13 @@ struct drm_i915_private { + * cstate->wm.need_postvbl_update. + */ + struct mutex wm_mutex; + + /* + * Set during HW readout of watermarks/DDB. Some platforms @@ -59,22 +49,22 @@ index 804af6f..ae7932a 100644 struct i915_runtime_pm pm; diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c -index f53df81..786f3d9 100644 +index f26d1c5..a9d2e30 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c -@@ -13516,6 +13516,7 @@ static int intel_atomic_commit(struct drm_device *dev, +@@ -13621,6 +13621,7 @@ static int intel_atomic_commit(struct drm_device *dev, drm_atomic_helper_swap_state(dev, state); - dev_priv->wm.config = to_intel_atomic_state(state)->wm_config; + dev_priv->wm.config = intel_state->wm_config; + dev_priv->wm.distrust_bios_wm = false; + intel_shared_dpll_commit(state); if (intel_state->modeset) { - memcpy(dev_priv->min_pixclk, intel_state->min_pixclk, diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c -index ee82b1f..6a09d7a 100644 +index f009d43..a49faa7 100644 --- a/drivers/gpu/drm/i915/intel_pm.c +++ b/drivers/gpu/drm/i915/intel_pm.c -@@ -3967,6 +3967,14 @@ void skl_wm_get_hw_state(struct drm_device *dev) +@@ -4026,6 +4026,14 @@ void skl_wm_get_hw_state(struct drm_device *dev) list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) skl_pipe_wm_get_hw_state(crtc); diff --git a/0009-drm-i915-gen9-Compute-DDB-allocation-at-atomic-check.patch b/0009-drm-i915-gen9-Compute-DDB-allocation-at-atomic-check.patch index 53fb0cd7a..80cdacf9a 100644 --- a/0009-drm-i915-gen9-Compute-DDB-allocation-at-atomic-check.patch +++ b/0009-drm-i915-gen9-Compute-DDB-allocation-at-atomic-check.patch @@ -1,70 +1,60 @@ -From 0e9cf00438e4df1d97af44d3c52cc1cacc4dd2c9 Mon Sep 17 00:00:00 2001 -From: Fedora Kernel Team -Date: Mon, 20 Jun 2016 12:40:26 +0200 +From fbf53d8f1b7d1bcea1411f1f2cd0df6a6cc95332 Mon Sep 17 00:00:00 2001 +From: Matt Roper +Date: Thu, 12 May 2016 07:06:03 -0700 Subject: [PATCH 09/17] drm/i915/gen9: Compute DDB allocation at atomic check time (v4) -Upstream: since drm-intel-next-2016-05-22 -commit 98d39494d3759f84ce50e505059bc80f54c1c47b +Calculate the DDB blocks needed to satisfy the current atomic +transaction at atomic check time. This is a prerequisite to calculating +SKL watermarks during the 'check' phase and rejecting any configurations +that we can't find valid watermarks for. -Author: Matt Roper -AuthorDate: Thu May 12 07:06:03 2016 -0700 -Commit: Matt Roper -CommitDate: Fri May 13 07:34:00 2016 -0700 +Due to the nature of DDB allocation, it's possible for the addition of a +new CRTC to make the watermark configuration already in use on another, +unchanged CRTC become invalid. A change in which CRTC's are active +triggers a recompute of the entire DDB, which unfortunately means we +need to disallow any other atomic commits from racing with such an +update. If the active CRTC's change, we need to grab the lock on all +CRTC's and run all CRTC's through their 'check' handler to recompute and +re-check their per-CRTC DDB allocations. - drm/i915/gen9: Compute DDB allocation at atomic check time (v4) +Note that with this patch we only compute the DDB allocation but we +don't actually use the computed values during watermark programming yet. +For ease of review/testing/bisecting, we still recompute the DDB at +watermark programming time and just WARN() if it doesn't match the +precomputed values. A future patch will switch over to using the +precomputed values once we're sure they're being properly computed. - Calculate the DDB blocks needed to satisfy the current atomic - transaction at atomic check time. This is a prerequisite to calculating - SKL watermarks during the 'check' phase and rejecting any configurations - that we can't find valid watermarks for. +Another clarifying note: DDB allocation itself shouldn't ever fail with +the algorithm we use today (i.e., we have enough DDB blocks on BXT to +support the minimum needs of the worst-case scenario of every pipe/plane +enabled at full size). However the watermarks calculations based on the +DDB may fail and we'll be moving those to the atomic check as well in +future patches. - Due to the nature of DDB allocation, it's possible for the addition of a - new CRTC to make the watermark configuration already in use on another, - unchanged CRTC become invalid. A change in which CRTC's are active - triggers a recompute of the entire DDB, which unfortunately means we - need to disallow any other atomic commits from racing with such an - update. If the active CRTC's change, we need to grab the lock on all - CRTC's and run all CRTC's through their 'check' handler to recompute and - re-check their per-CRTC DDB allocations. +v2: + - Skip DDB calculations in the rare case where our transaction doesn't + actually touch any CRTC's at all. Assuming at least one CRTC state + is present in our transaction, then it means we can't race with any + transactions that would update dev_priv->active_crtcs (which requires + _all_ CRTC locks). - Note that with this patch we only compute the DDB allocation but we - don't actually use the computed values during watermark programming yet. - For ease of review/testing/bisecting, we still recompute the DDB at - watermark programming time and just WARN() if it doesn't match the - precomputed values. A future patch will switch over to using the - precomputed values once we're sure they're being properly computed. +v3: + - Also calculate DDB during initial hw readout, to prevent using + incorrect bios values. (Maarten) - Another clarifying note: DDB allocation itself shouldn't ever fail with - the algorithm we use today (i.e., we have enough DDB blocks on BXT to - support the minimum needs of the worst-case scenario of every pipe/plane - enabled at full size). However the watermarks calculations based on the - DDB may fail and we'll be moving those to the atomic check as well in - future patches. +v4: + - Use new distrust_bios_wm flag instead of skip_initial_wm (which was + never actually set). + - Set intel_state->active_pipe_changes instead of just realloc_pipes - v2: - - Skip DDB calculations in the rare case where our transaction doesn't - actually touch any CRTC's at all. Assuming at least one CRTC state - is present in our transaction, then it means we can't race with any - transactions that would update dev_priv->active_crtcs (which requires - _all_ CRTC locks). - - v3: - - Also calculate DDB during initial hw readout, to prevent using - incorrect bios values. (Maarten) - - v4: - - Use new distrust_bios_wm flag instead of skip_initial_wm (which was - never actually set). - - Set intel_state->active_pipe_changes instead of just realloc_pipes - - Cc: Maarten Lankhorst - Cc: Lyude Paul - Cc: Radhakrishna Sripada - Signed-off-by: Matt Roper - Signed-off-by: Maarten Lankhorst - Reviewed-by: Maarten Lankhorst - Link: http://patchwork.freedesktop.org/patch/msgid/1463061971-19638-10-git-send-email-matthew.d.roper@intel.com +Cc: Maarten Lankhorst +Cc: Lyude Paul +Cc: Radhakrishna Sripada +Signed-off-by: Matt Roper +Signed-off-by: Maarten Lankhorst +Reviewed-by: Maarten Lankhorst +Link: http://patchwork.freedesktop.org/patch/msgid/1463061971-19638-10-git-send-email-matthew.d.roper@intel.com --- drivers/gpu/drm/i915/i915_drv.h | 5 +++ drivers/gpu/drm/i915/intel_display.c | 18 ++++++++ @@ -73,10 +63,10 @@ CommitDate: Fri May 13 07:34:00 2016 -0700 4 files changed, 105 insertions(+) diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h -index ae7932a..237df9f 100644 +index e21960d..b908a41 100644 --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h -@@ -296,6 +296,10 @@ struct i915_hotplug { +@@ -339,6 +339,10 @@ struct i915_hotplug { #define for_each_intel_crtc(dev, intel_crtc) \ list_for_each_entry(intel_crtc, &dev->mode_config.crtc_list, base.head) @@ -87,19 +77,19 @@ index ae7932a..237df9f 100644 #define for_each_intel_encoder(dev, intel_encoder) \ list_for_each_entry(intel_encoder, \ &(dev)->mode_config.encoder_list, \ -@@ -638,6 +642,7 @@ struct drm_i915_display_funcs { - int (*compute_pipe_wm)(struct intel_crtc *crtc, - struct drm_atomic_state *state); - void (*program_watermarks)(struct intel_crtc_state *cstate); +@@ -594,6 +598,7 @@ struct drm_i915_display_funcs { + struct intel_crtc_state *newstate); + void (*initial_watermarks)(struct intel_crtc_state *cstate); + void (*optimize_watermarks)(struct intel_crtc_state *cstate); + int (*compute_global_watermarks)(struct drm_atomic_state *state); void (*update_wm)(struct drm_crtc *crtc); int (*modeset_calc_cdclk)(struct drm_atomic_state *state); void (*modeset_commit_cdclk)(struct drm_atomic_state *state); diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c -index 786f3d9..03e2635 100644 +index a9d2e30..ecad0ef 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c -@@ -13225,6 +13225,7 @@ static int intel_modeset_checks(struct drm_atomic_state *state) +@@ -13342,6 +13342,7 @@ static int intel_modeset_checks(struct drm_atomic_state *state) static void calc_watermark_data(struct drm_atomic_state *state) { struct drm_device *dev = state->dev; @@ -107,7 +97,7 @@ index 786f3d9..03e2635 100644 struct intel_atomic_state *intel_state = to_intel_atomic_state(state); struct drm_crtc *crtc; struct drm_crtc_state *cstate; -@@ -13254,6 +13255,10 @@ static void calc_watermark_data(struct drm_atomic_state *state) +@@ -13371,6 +13372,10 @@ static void calc_watermark_data(struct drm_atomic_state *state) pstate->crtc_h != pstate->src_h >> 16) intel_state->wm_config.sprites_scaled = true; } @@ -118,8 +108,8 @@ index 786f3d9..03e2635 100644 } /** -@@ -13616,6 +13621,19 @@ static int intel_atomic_commit(struct drm_device *dev, - modeset_put_power_domains(dev_priv, put_domains[i]); +@@ -13739,6 +13744,19 @@ static int intel_atomic_commit(struct drm_device *dev, + intel_modeset_verify_crtc(crtc, old_crtc_state, crtc->state); } + /* @@ -139,13 +129,13 @@ index 786f3d9..03e2635 100644 intel_display_power_put(dev_priv, POWER_DOMAIN_MODESET); diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h -index 672ca56..4d6336a 100644 +index d19e83e..2218290 100644 --- a/drivers/gpu/drm/i915/intel_drv.h +++ b/drivers/gpu/drm/i915/intel_drv.h -@@ -271,6 +271,9 @@ struct intel_atomic_state { - - struct intel_shared_dpll_config shared_dpll[I915_NUM_PLLS]; - struct intel_wm_config wm_config; +@@ -312,6 +312,9 @@ struct intel_atomic_state { + * don't bother calculating intermediate watermarks. + */ + bool skip_intermediate_wm; + + /* Gen9+ only */ + struct skl_ddb_allocation ddb; @@ -153,10 +143,10 @@ index 672ca56..4d6336a 100644 struct intel_plane_state { diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c -index 6a09d7a..f60519d 100644 +index a49faa7..cfa4f80 100644 --- a/drivers/gpu/drm/i915/intel_pm.c +++ b/drivers/gpu/drm/i915/intel_pm.c -@@ -3751,6 +3751,84 @@ static void skl_clear_wm(struct skl_wm_values *watermarks, enum pipe pipe) +@@ -3812,6 +3812,84 @@ static void skl_clear_wm(struct skl_wm_values *watermarks, enum pipe pipe) } @@ -241,9 +231,9 @@ index 6a09d7a..f60519d 100644 static void skl_update_wm(struct drm_crtc *crtc) { struct intel_crtc *intel_crtc = to_intel_crtc(crtc); -@@ -7258,6 +7336,7 @@ void intel_init_pm(struct drm_device *dev) - dev_priv->display.init_clock_gating = - bxt_init_clock_gating; +@@ -7384,6 +7462,7 @@ void intel_init_pm(struct drm_device *dev) + if (INTEL_INFO(dev)->gen >= 9) { + skl_setup_wm_latency(dev); dev_priv->display.update_wm = skl_update_wm; + dev_priv->display.compute_global_watermarks = skl_compute_wm; } else if (HAS_PCH_SPLIT(dev)) { diff --git a/0010-drm-i915-gen9-Drop-re-allocation-of-DDB-at-atomic-co.patch b/0010-drm-i915-gen9-Drop-re-allocation-of-DDB-at-atomic-co.patch index 4d40a4e93..26f7e750c 100644 --- a/0010-drm-i915-gen9-Drop-re-allocation-of-DDB-at-atomic-co.patch +++ b/0010-drm-i915-gen9-Drop-re-allocation-of-DDB-at-atomic-co.patch @@ -1,50 +1,40 @@ -From 6a86f1d01bb25a687c59dd6b3e6deea362cf0ee1 Mon Sep 17 00:00:00 2001 -From: Fedora Kernel Team -Date: Mon, 20 Jun 2016 12:40:40 +0200 +From a9abdc6767855e1668301a1dcc4b5fa8bed1ddfa Mon Sep 17 00:00:00 2001 +From: Matt Roper +Date: Thu, 12 May 2016 07:06:04 -0700 Subject: [PATCH 10/17] drm/i915/gen9: Drop re-allocation of DDB at atomic commit (v2) -Upstream: since drm-intel-next-2016-05-22 -commit a6d3460e62d17098a815a53f23e44d814cb347e0 +Now that we're properly pre-allocating the DDB during the atomic check +phase and we trust that the allocation is appropriate, let's actually +use the allocation computed and not duplicate that work during the +commit phase. -Author: Matt Roper -AuthorDate: Thu May 12 07:06:04 2016 -0700 -Commit: Matt Roper -CommitDate: Fri May 13 07:34:06 2016 -0700 +v2: + - Significant rebasing now that we can use cached data rates and + minimum block allocations to avoid grabbing additional plane states. - drm/i915/gen9: Drop re-allocation of DDB at atomic commit (v2) - - Now that we're properly pre-allocating the DDB during the atomic check - phase and we trust that the allocation is appropriate, let's actually - use the allocation computed and not duplicate that work during the - commit phase. - - v2: - - Significant rebasing now that we can use cached data rates and - minimum block allocations to avoid grabbing additional plane states. - - Signed-off-by: Matt Roper - Reviewed-by: Maarten Lankhorst - Link: http://patchwork.freedesktop.org/patch/msgid/1463061971-19638-11-git-send-email-matthew.d.roper@intel.com +Signed-off-by: Matt Roper +Reviewed-by: Maarten Lankhorst +Link: http://patchwork.freedesktop.org/patch/msgid/1463061971-19638-11-git-send-email-matthew.d.roper@intel.com --- drivers/gpu/drm/i915/intel_display.c | 14 +-- drivers/gpu/drm/i915/intel_pm.c | 224 +++++++++++------------------------ 2 files changed, 67 insertions(+), 171 deletions(-) diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c -index 03e2635..b484fda 100644 +index ecad0ef..4db10d7 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c -@@ -13522,6 +13522,7 @@ static int intel_atomic_commit(struct drm_device *dev, +@@ -13627,6 +13627,7 @@ static int intel_atomic_commit(struct drm_device *dev, drm_atomic_helper_swap_state(dev, state); - dev_priv->wm.config = to_intel_atomic_state(state)->wm_config; + dev_priv->wm.config = intel_state->wm_config; dev_priv->wm.distrust_bios_wm = false; + dev_priv->wm.skl_results.ddb = intel_state->ddb; + intel_shared_dpll_commit(state); if (intel_state->modeset) { - memcpy(dev_priv->min_pixclk, intel_state->min_pixclk, -@@ -13621,19 +13622,6 @@ static int intel_atomic_commit(struct drm_device *dev, - modeset_put_power_domains(dev_priv, put_domains[i]); +@@ -13744,19 +13745,6 @@ static int intel_atomic_commit(struct drm_device *dev, + intel_modeset_verify_crtc(crtc, old_crtc_state, crtc->state); } - /* @@ -64,10 +54,10 @@ index 03e2635..b484fda 100644 intel_display_power_put(dev_priv, POWER_DOMAIN_MODESET); diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c -index f60519d..80f9f18 100644 +index cfa4f80..0f0d4e1 100644 --- a/drivers/gpu/drm/i915/intel_pm.c +++ b/drivers/gpu/drm/i915/intel_pm.c -@@ -2788,7 +2788,6 @@ skl_wm_plane_id(const struct intel_plane *plane) +@@ -2849,7 +2849,6 @@ skl_wm_plane_id(const struct intel_plane *plane) static void skl_ddb_get_pipe_allocation_limits(struct drm_device *dev, const struct intel_crtc_state *cstate, @@ -75,7 +65,7 @@ index f60519d..80f9f18 100644 struct skl_ddb_entry *alloc, /* out */ int *num_active /* out */) { -@@ -2796,24 +2795,22 @@ skl_ddb_get_pipe_allocation_limits(struct drm_device *dev, +@@ -2857,24 +2856,22 @@ skl_ddb_get_pipe_allocation_limits(struct drm_device *dev, struct intel_atomic_state *intel_state = to_intel_atomic_state(state); struct drm_i915_private *dev_priv = to_i915(dev); struct drm_crtc *for_crtc = cstate->base.crtc; @@ -107,7 +97,7 @@ index f60519d..80f9f18 100644 if (IS_BROXTON(dev)) ddb_size = BXT_DDB_SIZE; else -@@ -2822,50 +2819,23 @@ skl_ddb_get_pipe_allocation_limits(struct drm_device *dev, +@@ -2883,50 +2880,23 @@ skl_ddb_get_pipe_allocation_limits(struct drm_device *dev, ddb_size -= 4; /* 4 blocks for bypass path allocation */ /* @@ -173,7 +163,7 @@ index f60519d..80f9f18 100644 } static unsigned int skl_cursor_allocation(int num_active) -@@ -2964,62 +2934,33 @@ skl_get_total_relative_data_rate(struct intel_crtc_state *intel_cstate) +@@ -3025,62 +2995,33 @@ skl_get_total_relative_data_rate(struct intel_crtc_state *intel_cstate) struct drm_crtc *crtc = cstate->crtc; struct drm_device *dev = crtc->dev; struct intel_crtc *intel_crtc = to_intel_crtc(crtc); @@ -256,7 +246,7 @@ index f60519d..80f9f18 100644 } /* Calculate CRTC's total data rate from cached values */ -@@ -3043,8 +2984,6 @@ skl_allocate_pipe_ddb(struct intel_crtc_state *cstate, +@@ -3104,8 +3045,6 @@ skl_allocate_pipe_ddb(struct intel_crtc_state *cstate, struct drm_atomic_state *state = cstate->base.state; struct drm_crtc *crtc = cstate->base.crtc; struct drm_device *dev = crtc->dev; @@ -265,7 +255,7 @@ index f60519d..80f9f18 100644 struct intel_crtc *intel_crtc = to_intel_crtc(crtc); struct intel_plane *intel_plane; struct drm_plane *plane; -@@ -3058,6 +2997,9 @@ skl_allocate_pipe_ddb(struct intel_crtc_state *cstate, +@@ -3119,6 +3058,9 @@ skl_allocate_pipe_ddb(struct intel_crtc_state *cstate, int num_active; int id, i; @@ -275,7 +265,7 @@ index f60519d..80f9f18 100644 if (!cstate->base.active) { ddb->pipe[pipe].start = ddb->pipe[pipe].end = 0; memset(ddb->plane[pipe], 0, sizeof(ddb->plane[pipe])); -@@ -3065,8 +3007,7 @@ skl_allocate_pipe_ddb(struct intel_crtc_state *cstate, +@@ -3126,8 +3068,7 @@ skl_allocate_pipe_ddb(struct intel_crtc_state *cstate, return 0; } @@ -285,7 +275,7 @@ index f60519d..80f9f18 100644 alloc_size = skl_ddb_entry_size(alloc); if (alloc_size == 0) { memset(ddb->plane[pipe], 0, sizeof(ddb->plane[pipe])); -@@ -3078,53 +3019,31 @@ skl_allocate_pipe_ddb(struct intel_crtc_state *cstate, +@@ -3139,53 +3080,31 @@ skl_allocate_pipe_ddb(struct intel_crtc_state *cstate, ddb->plane[pipe][PLANE_CURSOR].end = alloc->end; alloc_size -= cursor_blocks; @@ -359,7 +349,7 @@ index f60519d..80f9f18 100644 } for (i = 0; i < PLANE_CURSOR; i++) { -@@ -3675,7 +3594,6 @@ static bool skl_update_pipe_wm(struct drm_crtc *crtc, +@@ -3736,7 +3655,6 @@ static bool skl_update_pipe_wm(struct drm_crtc *crtc, struct intel_crtc *intel_crtc = to_intel_crtc(crtc); struct intel_crtc_state *cstate = to_intel_crtc_state(crtc->state); @@ -367,7 +357,7 @@ index f60519d..80f9f18 100644 skl_build_pipe_wm(cstate, ddb, pipe_wm); if (!memcmp(&intel_crtc->wm.active.skl, pipe_wm, sizeof(*pipe_wm))) -@@ -3739,16 +3657,6 @@ static void skl_clear_wm(struct skl_wm_values *watermarks, enum pipe pipe) +@@ -3800,16 +3718,6 @@ static void skl_clear_wm(struct skl_wm_values *watermarks, enum pipe pipe) memset(watermarks->plane_trans[pipe], 0, sizeof(uint32_t) * I915_MAX_PLANES); watermarks->plane_trans[pipe][PLANE_CURSOR] = 0; diff --git a/0015-drm-i915-gen9-Calculate-watermarks-during-atomic-che.patch b/0015-drm-i915-gen9-Calculate-watermarks-during-atomic-che.patch index b8f602e0e..691b6b985 100644 --- a/0015-drm-i915-gen9-Calculate-watermarks-during-atomic-che.patch +++ b/0015-drm-i915-gen9-Calculate-watermarks-during-atomic-che.patch @@ -1,80 +1,70 @@ -From 71136125cc79dab464a0139dbf0c02891aa9ce6e Mon Sep 17 00:00:00 2001 -From: Fedora Kernel Team -Date: Mon, 20 Jun 2016 12:41:46 +0200 +From 664f87c5bfcc7798bd5b16e14792f1e9ba2956ea Mon Sep 17 00:00:00 2001 +From: Matt Roper +Date: Thu, 12 May 2016 15:11:40 -0700 Subject: [PATCH 15/17] drm/i915/gen9: Calculate watermarks during atomic 'check' (v2) -Upstream: since drm-intel-next-2016-05-22 -commit 734fa01f3a17ac80d2d53cee0b05b246c03df0e4 +Moving watermark calculation into the check phase will allow us to to +reject display configurations for which there are no valid watermark +values before we start trying to program the hardware (although those +tests will come in a subsequent patch). -Author: Matt Roper -AuthorDate: Thu May 12 15:11:40 2016 -0700 -Commit: Matt Roper -CommitDate: Fri May 13 07:35:48 2016 -0700 +Another advantage of moving this calculation to the check phase is that +we can calculate the watermarks in a single shot as part of the atomic +transaction. The watermark interfaces we inherited from our legacy +modesetting days are a bit broken in the atomic design because they use +per-crtc entry points but actually re-calculate and re-program something +that is really more of a global state. That worked okay in the legacy +modesetting world because operations only ever updated a single CRTC at +a time. However in the atomic world, a transaction can involve multiple +CRTC's, which means we wind up computing and programming the watermarks +NxN times (where N is the number of CRTC's involved). With this patch +we eliminate the redundant re-calculation of watermark data for atomic +states (which was the cause of the WARN_ON(!wm_changed) problems that +have plagued us for a while). - drm/i915/gen9: Calculate watermarks during atomic 'check' (v2) +We still need to work on the 'commit' side of watermark handling so that +we aren't doing redundant NxN programming of watermarks, but that's +content for future patches. - Moving watermark calculation into the check phase will allow us to to - reject display configurations for which there are no valid watermark - values before we start trying to program the hardware (although those - tests will come in a subsequent patch). +v2: + - Bail out of skl_write_wm_values() if the CRTC isn't active. Now that + we set dirty_pipes to ~0 if the active pipes change (because + we need to deal with DDB changes), we can now wind up here for + disabled pipes, whereas we couldn't before. - Another advantage of moving this calculation to the check phase is that - we can calculate the watermarks in a single shot as part of the atomic - transaction. The watermark interfaces we inherited from our legacy - modesetting days are a bit broken in the atomic design because they use - per-crtc entry points but actually re-calculate and re-program something - that is really more of a global state. That worked okay in the legacy - modesetting world because operations only ever updated a single CRTC at - a time. However in the atomic world, a transaction can involve multiple - CRTC's, which means we wind up computing and programming the watermarks - NxN times (where N is the number of CRTC's involved). With this patch - we eliminate the redundant re-calculation of watermark data for atomic - states (which was the cause of the WARN_ON(!wm_changed) problems that - have plagued us for a while). - - We still need to work on the 'commit' side of watermark handling so that - we aren't doing redundant NxN programming of watermarks, but that's - content for future patches. - - v2: - - Bail out of skl_write_wm_values() if the CRTC isn't active. Now that - we set dirty_pipes to ~0 if the active pipes change (because - we need to deal with DDB changes), we can now wind up here for - disabled pipes, whereas we couldn't before. - - Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=89055 - Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=92181 - Cc: Maarten Lankhorst - Signed-off-by: Matt Roper - Tested-by: Daniel Stone - Reviewed-by: Maarten Lankhorst - Link: http://patchwork.freedesktop.org/patch/msgid/1463091100-13747-1-git-send-email-matthew.d.roper@intel.com +Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=89055 +Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=92181 +Cc: Maarten Lankhorst +Signed-off-by: Matt Roper +Tested-by: Daniel Stone +Reviewed-by: Maarten Lankhorst +Link: http://patchwork.freedesktop.org/patch/msgid/1463091100-13747-1-git-send-email-matthew.d.roper@intel.com --- drivers/gpu/drm/i915/intel_display.c | 2 +- - drivers/gpu/drm/i915/intel_drv.h | 14 +++- - drivers/gpu/drm/i915/intel_pm.c | 135 ++++++++++++----------------------- - 3 files changed, 61 insertions(+), 90 deletions(-) + drivers/gpu/drm/i915/intel_drv.h | 2 +- + drivers/gpu/drm/i915/intel_pm.c | 140 +++++++++++++---------------------- + 3 files changed, 54 insertions(+), 90 deletions(-) diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c -index 9ac2346..1726ea4 100644 +index 2190bac..a75daac 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c -@@ -13522,7 +13522,7 @@ static int intel_atomic_commit(struct drm_device *dev, +@@ -13627,7 +13627,7 @@ static int intel_atomic_commit(struct drm_device *dev, drm_atomic_helper_swap_state(dev, state); - dev_priv->wm.config = to_intel_atomic_state(state)->wm_config; + dev_priv->wm.config = intel_state->wm_config; dev_priv->wm.distrust_bios_wm = false; - dev_priv->wm.skl_results.ddb = intel_state->ddb; + dev_priv->wm.skl_results = intel_state->wm_results; + intel_shared_dpll_commit(state); if (intel_state->modeset) { - memcpy(dev_priv->min_pixclk, intel_state->min_pixclk, diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h -index 4d6336a..e5543b8 100644 +index 2218290..ab0be7a 100644 --- a/drivers/gpu/drm/i915/intel_drv.h +++ b/drivers/gpu/drm/i915/intel_drv.h -@@ -273,7 +273,7 @@ struct intel_atomic_state { - struct intel_wm_config wm_config; +@@ -314,7 +314,7 @@ struct intel_atomic_state { + bool skip_intermediate_wm; /* Gen9+ only */ - struct skl_ddb_allocation ddb; @@ -82,30 +72,11 @@ index 4d6336a..e5543b8 100644 }; struct intel_plane_state { -@@ -1661,6 +1661,18 @@ intel_atomic_get_crtc_state(struct drm_atomic_state *state, - - return to_intel_crtc_state(crtc_state); - } -+ -+static inline struct intel_plane_state * -+intel_atomic_get_existing_plane_state(struct drm_atomic_state *state, -+ struct intel_plane *plane) -+{ -+ struct drm_plane_state *plane_state; -+ -+ plane_state = drm_atomic_get_existing_plane_state(state, &plane->base); -+ -+ return to_intel_plane_state(plane_state); -+} -+ - int intel_atomic_setup_scalers(struct drm_device *dev, - struct intel_crtc *intel_crtc, - struct intel_crtc_state *crtc_state); diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c -index ec22d93..73e5242 100644 +index 342aa66..b072417 100644 --- a/drivers/gpu/drm/i915/intel_pm.c +++ b/drivers/gpu/drm/i915/intel_pm.c -@@ -3160,23 +3160,6 @@ static uint32_t skl_wm_method2(uint32_t pixel_rate, uint32_t pipe_htotal, +@@ -3221,23 +3221,6 @@ static uint32_t skl_wm_method2(uint32_t pixel_rate, uint32_t pipe_htotal, return ret; } @@ -129,7 +100,7 @@ index ec22d93..73e5242 100644 static int skl_compute_plane_wm(const struct drm_i915_private *dev_priv, struct intel_crtc_state *cstate, struct intel_plane_state *intel_pstate, -@@ -3472,6 +3455,8 @@ static void skl_write_wm_values(struct drm_i915_private *dev_priv, +@@ -3533,6 +3516,8 @@ static void skl_write_wm_values(struct drm_i915_private *dev_priv, if ((new->dirty_pipes & drm_crtc_mask(&crtc->base)) == 0) continue; @@ -138,7 +109,7 @@ index ec22d93..73e5242 100644 I915_WRITE(PIPE_WM_LINETIME(pipe), new->wm_linetime[pipe]); -@@ -3655,66 +3640,9 @@ static int skl_update_pipe_wm(struct drm_crtc_state *cstate, +@@ -3716,66 +3701,9 @@ static int skl_update_pipe_wm(struct drm_crtc_state *cstate, else *changed = true; @@ -205,7 +176,7 @@ index ec22d93..73e5242 100644 static int skl_compute_ddb(struct drm_atomic_state *state) { -@@ -3722,6 +3650,7 @@ skl_compute_ddb(struct drm_atomic_state *state) +@@ -3783,6 +3711,7 @@ skl_compute_ddb(struct drm_atomic_state *state) struct drm_i915_private *dev_priv = to_i915(dev); struct intel_atomic_state *intel_state = to_intel_atomic_state(state); struct intel_crtc *intel_crtc; @@ -213,7 +184,7 @@ index ec22d93..73e5242 100644 unsigned realloc_pipes = dev_priv->active_crtcs; int ret; -@@ -3747,8 +3676,10 @@ skl_compute_ddb(struct drm_atomic_state *state) +@@ -3808,8 +3737,10 @@ skl_compute_ddb(struct drm_atomic_state *state) * any other display updates race with this transaction, so we need * to grab the lock on *all* CRTC's. */ @@ -225,7 +196,7 @@ index ec22d93..73e5242 100644 for_each_intel_crtc_mask(dev, intel_crtc, realloc_pipes) { struct intel_crtc_state *cstate; -@@ -3757,7 +3688,7 @@ skl_compute_ddb(struct drm_atomic_state *state) +@@ -3818,7 +3749,7 @@ skl_compute_ddb(struct drm_atomic_state *state) if (IS_ERR(cstate)) return PTR_ERR(cstate); @@ -234,7 +205,7 @@ index ec22d93..73e5242 100644 if (ret) return ret; } -@@ -3770,8 +3701,11 @@ skl_compute_wm(struct drm_atomic_state *state) +@@ -3831,8 +3762,11 @@ skl_compute_wm(struct drm_atomic_state *state) { struct drm_crtc *crtc; struct drm_crtc_state *cstate; @@ -247,7 +218,7 @@ index ec22d93..73e5242 100644 /* * If this transaction isn't actually touching any CRTC's, don't -@@ -3786,10 +3720,44 @@ skl_compute_wm(struct drm_atomic_state *state) +@@ -3847,10 +3781,45 @@ skl_compute_wm(struct drm_atomic_state *state) if (!changed) return 0; @@ -286,21 +257,22 @@ index ec22d93..73e5242 100644 + /* This pipe's WM's did not change */ + continue; + ++ intel_cstate->update_wm_pre = true; + skl_compute_wm_results(crtc->dev, pipe_wm, results, intel_crtc); + } + return 0; } -@@ -3801,21 +3769,12 @@ static void skl_update_wm(struct drm_crtc *crtc) +@@ -3862,26 +3831,21 @@ static void skl_update_wm(struct drm_crtc *crtc) struct skl_wm_values *results = &dev_priv->wm.skl_results; struct intel_crtc_state *cstate = to_intel_crtc_state(crtc->state); struct skl_pipe_wm *pipe_wm = &cstate->wm.skl.optimal; - bool wm_changed; - +- - /* Clear all dirty flags */ - results->dirty_pipes = 0; -- + - skl_clear_wm(results, intel_crtc->pipe); - - skl_update_pipe_wm(crtc->state, &results->ddb, pipe_wm, &wm_changed); @@ -311,11 +283,20 @@ index ec22d93..73e5242 100644 - skl_compute_wm_results(dev, pipe_wm, results, intel_crtc); - results->dirty_pipes |= drm_crtc_mask(&intel_crtc->base); + intel_crtc->wm.active.skl = *pipe_wm; ++ ++ mutex_lock(&dev_priv->wm.wm_mutex); - skl_update_other_pipe_wm(dev, crtc, results); skl_write_wm_values(dev_priv, results); skl_flush_wm_values(dev_priv, results); + /* store the new configuration */ + dev_priv->wm.skl_hw = *results; ++ ++ mutex_unlock(&dev_priv->wm.wm_mutex); + } + + static void ilk_compute_wm_config(struct drm_device *dev, -- 2.7.4 diff --git a/0017-drm-i915-Remove-wm_config-from-dev_priv-intel_atomic.patch b/0017-drm-i915-Remove-wm_config-from-dev_priv-intel_atomic.patch index e47725c25..73a6dacc6 100644 --- a/0017-drm-i915-Remove-wm_config-from-dev_priv-intel_atomic.patch +++ b/0017-drm-i915-Remove-wm_config-from-dev_priv-intel_atomic.patch @@ -1,27 +1,17 @@ -From ebe515b1696401259781bc183e211a81287242f6 Mon Sep 17 00:00:00 2001 -From: Fedora Kernel Team -Date: Mon, 20 Jun 2016 12:42:13 +0200 +From 73a35468564f4e47deade0a4a5eb7ec289611ebc Mon Sep 17 00:00:00 2001 +From: Matt Roper +Date: Thu, 12 May 2016 07:06:11 -0700 Subject: [PATCH 17/17] drm/i915: Remove wm_config from dev_priv/intel_atomic_state -Upstream: since drm-intel-next-2016-05-22 -commit 5b483747a92570176259bb896dcf2468291f3e42 +We calculate the watermark config into intel_atomic_state and then save +it into dev_priv, but never actually use it from there. This is +left-over from some early ILK-style watermark programming designs that +got changed over time. -Author: Matt Roper -AuthorDate: Thu May 12 07:06:11 2016 -0700 -Commit: Matt Roper -CommitDate: Fri May 13 07:36:05 2016 -0700 - - drm/i915: Remove wm_config from dev_priv/intel_atomic_state - - We calculate the watermark config into intel_atomic_state and then save - it into dev_priv, but never actually use it from there. This is - left-over from some early ILK-style watermark programming designs that - got changed over time. - - Signed-off-by: Matt Roper - Reviewed-by: Maarten Lankhorst - Link: http://patchwork.freedesktop.org/patch/msgid/1463061971-19638-18-git-send-email-matthew.d.roper@intel.com +Signed-off-by: Matt Roper +Reviewed-by: Maarten Lankhorst +Link: http://patchwork.freedesktop.org/patch/msgid/1463061971-19638-18-git-send-email-matthew.d.roper@intel.com --- drivers/gpu/drm/i915/i915_drv.h | 3 --- drivers/gpu/drm/i915/intel_display.c | 31 ------------------------------- @@ -29,10 +19,10 @@ CommitDate: Fri May 13 07:36:05 2016 -0700 3 files changed, 35 deletions(-) diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h -index 67c76b6..59092cb 100644 +index e7bde72..608f8e4 100644 --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h -@@ -1973,9 +1973,6 @@ struct drm_i915_private { +@@ -1961,9 +1961,6 @@ struct drm_i915_private { */ uint16_t skl_latency[8]; @@ -43,10 +33,10 @@ index 67c76b6..59092cb 100644 * The skl_wm_values structure is a bit too big for stack * allocation, so we keep the staging struct where we store diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c -index 1726ea4..f5eefb1 100644 +index a75daac..9c109c6 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c -@@ -13226,35 +13226,6 @@ static int calc_watermark_data(struct drm_atomic_state *state) +@@ -13343,35 +13343,6 @@ static int calc_watermark_data(struct drm_atomic_state *state) { struct drm_device *dev = state->dev; struct drm_i915_private *dev_priv = to_i915(dev); @@ -82,15 +72,15 @@ index 1726ea4..f5eefb1 100644 /* Is there platform-specific watermark information to calculate? */ if (dev_priv->display.compute_global_watermarks) -@@ -13520,7 +13491,6 @@ static int intel_atomic_commit(struct drm_device *dev, +@@ -13625,7 +13596,6 @@ static int intel_atomic_commit(struct drm_device *dev, } drm_atomic_helper_swap_state(dev, state); -- dev_priv->wm.config = to_intel_atomic_state(state)->wm_config; +- dev_priv->wm.config = intel_state->wm_config; dev_priv->wm.distrust_bios_wm = false; dev_priv->wm.skl_results = intel_state->wm_results; - -@@ -15334,7 +15304,6 @@ retry: + intel_shared_dpll_commit(state); +@@ -15405,7 +15375,6 @@ retry: } /* Write calculated watermark values back */ @@ -99,17 +89,17 @@ index 1726ea4..f5eefb1 100644 struct intel_crtc_state *cs = to_intel_crtc_state(cstate); diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h -index e5543b8..148f79d 100644 +index ab0be7a..8d73c20 100644 --- a/drivers/gpu/drm/i915/intel_drv.h +++ b/drivers/gpu/drm/i915/intel_drv.h -@@ -270,7 +270,6 @@ struct intel_atomic_state { +@@ -305,7 +305,6 @@ struct intel_atomic_state { unsigned int min_pixclk[I915_MAX_PIPES]; struct intel_shared_dpll_config shared_dpll[I915_NUM_PLLS]; - struct intel_wm_config wm_config; - /* Gen9+ only */ - struct skl_wm_values wm_results; + /* + * Current watermarks can't be trusted during hardware readout, so -- 2.7.4 diff --git a/Add-EFI-signature-data-types.patch b/Add-EFI-signature-data-types.patch index 4bdea30ae..094c5a34c 100644 --- a/Add-EFI-signature-data-types.patch +++ b/Add-EFI-signature-data-types.patch @@ -1,7 +1,7 @@ -From 24ceffbbe2764a31328e1146a2cf4bdcf85664e7 Mon Sep 17 00:00:00 2001 +From 5216de8394ff599e41c8540c0572368c18c51459 Mon Sep 17 00:00:00 2001 From: Dave Howells Date: Tue, 23 Oct 2012 09:30:54 -0400 -Subject: [PATCH] Add EFI signature data types +Subject: [PATCH 4/9] Add EFI signature data types Add the data types that are used for containing hashes, keys and certificates for cryptographic verification. @@ -15,12 +15,12 @@ Signed-off-by: David Howells 1 file changed, 20 insertions(+) diff --git a/include/linux/efi.h b/include/linux/efi.h -index 333d0ca6940f..b3efb6d06344 100644 +index 8cb38cfcba74..8c274b4ea8e6 100644 --- a/include/linux/efi.h +++ b/include/linux/efi.h -@@ -603,6 +603,12 @@ void efi_native_runtime_setup(void); - EFI_GUID(0x3152bca5, 0xeade, 0x433d, \ - 0x86, 0x2e, 0xc0, 0x1c, 0xdc, 0x29, 0x1f, 0x44) +@@ -647,6 +647,12 @@ void efi_native_runtime_setup(void); + EFI_GUID(0x4a67b082, 0x0a4c, 0x41cf, \ + 0xb6, 0xc7, 0x44, 0x0b, 0x29, 0xbb, 0x8c, 0x4f) +#define EFI_CERT_SHA256_GUID \ + EFI_GUID( 0xc1c41626, 0x504c, 0x4092, 0xac, 0xa9, 0x41, 0xf9, 0x36, 0x93, 0x43, 0x28 ) @@ -31,9 +31,9 @@ index 333d0ca6940f..b3efb6d06344 100644 typedef struct { efi_guid_t guid; u64 table; -@@ -827,6 +833,20 @@ typedef struct { - - #define EFI_INVALID_TABLE_ADDR (~0UL) +@@ -879,6 +885,20 @@ typedef struct { + efi_memory_desc_t entry[0]; + } efi_memory_attributes_table_t; +typedef struct { + efi_guid_t signature_owner; @@ -53,5 +53,5 @@ index 333d0ca6940f..b3efb6d06344 100644 * All runtime access to EFI goes through this structure: */ -- -2.5.0 +2.5.5 diff --git a/Add-an-EFI-signature-blob-parser-and-key-loader.patch b/Add-an-EFI-signature-blob-parser-and-key-loader.patch index 86a285581..3697a4b74 100644 --- a/Add-an-EFI-signature-blob-parser-and-key-loader.patch +++ b/Add-an-EFI-signature-blob-parser-and-key-loader.patch @@ -1,25 +1,26 @@ -From c279ba86f93cf6a75d078e2d0e3f59d4ba8a2dd0 Mon Sep 17 00:00:00 2001 +From e36a2d65e25fdf42b50aa5dc17583d7bfd09c4c4 Mon Sep 17 00:00:00 2001 From: Dave Howells Date: Tue, 23 Oct 2012 09:36:28 -0400 -Subject: [PATCH 16/20] Add an EFI signature blob parser and key loader. +Subject: [PATCH 5/9] Add an EFI signature blob parser and key loader. X.509 certificates are loaded into the specified keyring as asymmetric type keys. +[labbott@fedoraproject.org: Drop KEY_ALLOC_TRUSTED] Signed-off-by: David Howells --- crypto/asymmetric_keys/Kconfig | 8 +++ crypto/asymmetric_keys/Makefile | 1 + - crypto/asymmetric_keys/efi_parser.c | 109 ++++++++++++++++++++++++++++++++++++ + crypto/asymmetric_keys/efi_parser.c | 108 ++++++++++++++++++++++++++++++++++++ include/linux/efi.h | 4 ++ - 4 files changed, 122 insertions(+) + 4 files changed, 121 insertions(+) create mode 100644 crypto/asymmetric_keys/efi_parser.c diff --git a/crypto/asymmetric_keys/Kconfig b/crypto/asymmetric_keys/Kconfig -index 4870f28403f5..4a1b50d73b80 100644 +index e28e912000a7..94024e8aedaa 100644 --- a/crypto/asymmetric_keys/Kconfig +++ b/crypto/asymmetric_keys/Kconfig -@@ -67,4 +67,12 @@ config SIGNED_PE_FILE_VERIFICATION +@@ -60,4 +60,12 @@ config SIGNED_PE_FILE_VERIFICATION This option provides support for verifying the signature(s) on a signed PE binary. @@ -33,10 +34,11 @@ index 4870f28403f5..4a1b50d73b80 100644 + endif # ASYMMETRIC_KEY_TYPE diff --git a/crypto/asymmetric_keys/Makefile b/crypto/asymmetric_keys/Makefile -index cd1406f9b14a..d9db380bbe53 100644 +index 6516855bec18..c099fe15ed6d 100644 --- a/crypto/asymmetric_keys/Makefile +++ b/crypto/asymmetric_keys/Makefile -@@ -7,5 +7,6 @@ asymmetric_keys-y := asymmetric_type.o signature.o +@@ -10,6 +10,7 @@ asymmetric_keys-y := \ + signature.o obj-$(CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE) += public_key.o +obj-$(CONFIG_EFI_SIGNATURE_LIST_PARSER) += efi_parser.o @@ -45,10 +47,10 @@ index cd1406f9b14a..d9db380bbe53 100644 # X.509 Certificate handling diff --git a/crypto/asymmetric_keys/efi_parser.c b/crypto/asymmetric_keys/efi_parser.c new file mode 100644 -index 000000000000..424896a0b169 +index 000000000000..636feb18b733 --- /dev/null +++ b/crypto/asymmetric_keys/efi_parser.c -@@ -0,0 +1,109 @@ +@@ -0,0 +1,108 @@ +/* EFI signature/key/certificate list parser + * + * Copyright (C) 2012 Red Hat, Inc. All Rights Reserved. @@ -139,8 +141,7 @@ index 000000000000..424896a0b169 + esize - sizeof(*elem), + (KEY_POS_ALL & ~KEY_POS_SETATTR) | + KEY_USR_VIEW, -+ KEY_ALLOC_NOT_IN_QUOTA | -+ KEY_ALLOC_TRUSTED); ++ KEY_ALLOC_NOT_IN_QUOTA); + + if (IS_ERR(key)) + pr_err("Problem loading in-kernel X.509 certificate (%ld)\n", @@ -159,10 +160,10 @@ index 000000000000..424896a0b169 + return 0; +} diff --git a/include/linux/efi.h b/include/linux/efi.h -index fac43c611614..414c3c3d988d 100644 +index 8c274b4ea8e6..ff1877145aa4 100644 --- a/include/linux/efi.h +++ b/include/linux/efi.h -@@ -941,6 +941,10 @@ extern bool efi_poweroff_required(void); +@@ -1044,6 +1044,10 @@ extern int efi_memattr_apply_permissions(struct mm_struct *mm, char * __init efi_md_typeattr_format(char *buf, size_t size, const efi_memory_desc_t *md); @@ -174,5 +175,5 @@ index fac43c611614..414c3c3d988d 100644 * efi_range_is_wc - check the WC bit on an address range * @start: starting kvirt address -- -2.4.3 +2.5.5 diff --git a/Add-option-to-automatically-enforce-module-signature.patch b/Add-option-to-automatically-enforce-module-signature.patch index 015371b8b..aa1983377 100644 --- a/Add-option-to-automatically-enforce-module-signature.patch +++ b/Add-option-to-automatically-enforce-module-signature.patch @@ -1,8 +1,8 @@ -From 37431394b3eeb1ef6d38d0e6b2693210606c2c2c Mon Sep 17 00:00:00 2001 +From 0000dc9edd5997cc49b8893a9d5407f89dfa1307 Mon Sep 17 00:00:00 2001 From: Matthew Garrett Date: Fri, 9 Aug 2013 18:36:30 -0400 -Subject: [PATCH 10/20] Add option to automatically enforce module signatures - when in Secure Boot mode +Subject: [PATCH] Add option to automatically enforce module signatures when in + Secure Boot mode UEFI Secure Boot provides a mechanism for ensuring that the firmware will only load signed bootloaders and kernels. Certain use cases may also @@ -12,13 +12,13 @@ that enforces this automatically when enabled. Signed-off-by: Matthew Garrett --- Documentation/x86/zero-page.txt | 2 ++ - arch/x86/Kconfig | 10 ++++++++++ - arch/x86/boot/compressed/eboot.c | 36 +++++++++++++++++++++++++++++++++++ - arch/x86/include/uapi/asm/bootparam.h | 3 ++- - arch/x86/kernel/setup.c | 6 ++++++ - include/linux/module.h | 6 ++++++ - kernel/module.c | 7 +++++++ - 7 files changed, 69 insertions(+), 1 deletion(-) + arch/x86/Kconfig | 11 ++++++ + arch/x86/boot/compressed/eboot.c | 66 +++++++++++++++++++++++++++++++++++ + arch/x86/include/uapi/asm/bootparam.h | 3 +- + arch/x86/kernel/setup.c | 6 ++++ + include/linux/module.h | 6 ++++ + kernel/module.c | 7 ++++ + 7 files changed, 100 insertions(+), 1 deletion(-) diff --git a/Documentation/x86/zero-page.txt b/Documentation/x86/zero-page.txt index 95a4d34af3fd..b8527c6b7646 100644 @@ -34,15 +34,16 @@ index 95a4d34af3fd..b8527c6b7646 100644 290/040 ALL edd_mbr_sig_buffer EDD MBR signatures 2D0/A00 ALL e820_map E820 memory map table diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig -index cc0d73eac047..14db458f4774 100644 +index 0a7b885964ba..29b8ba9ae713 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig -@@ -1734,6 +1734,16 @@ config EFI_MIXED +@@ -1776,6 +1776,17 @@ config EFI_MIXED If unsure, say N. +config EFI_SECURE_BOOT_SIG_ENFORCE -+ def_bool n ++ def_bool n ++ depends on EFI + prompt "Force module signing when UEFI Secure Boot is enabled" + ---help--- + UEFI Secure Boot provides a mechanism for ensuring that the @@ -55,7 +56,7 @@ index cc0d73eac047..14db458f4774 100644 def_bool y prompt "Enable seccomp to safely compute untrusted bytecode" diff --git a/arch/x86/boot/compressed/eboot.c b/arch/x86/boot/compressed/eboot.c -index ee1b6d346b98..b4de3faa3f29 100644 +index 52fef606bc54..6b8b9a775b46 100644 --- a/arch/x86/boot/compressed/eboot.c +++ b/arch/x86/boot/compressed/eboot.c @@ -12,6 +12,7 @@ @@ -66,8 +67,8 @@ index ee1b6d346b98..b4de3faa3f29 100644 #include "../string.h" #include "eboot.h" -@@ -827,6 +828,37 @@ out: - return status; +@@ -571,6 +572,67 @@ free_handle: + efi_call_early(free_pool, pci_handle); } +static int get_secure_boot(void) @@ -101,10 +102,40 @@ index ee1b6d346b98..b4de3faa3f29 100644 +} + + - /* - * See if we have Graphics Output Protocol - */ -@@ -1412,6 +1444,10 @@ struct boot_params *efi_main(struct efi_config *c, ++/* ++ * See if we have Graphics Output Protocol ++ */ ++static efi_status_t setup_gop(struct screen_info *si, efi_guid_t *proto, ++ unsigned long size) ++{ ++ efi_status_t status; ++ void **gop_handle = NULL; ++ ++ status = efi_call_early(allocate_pool, EFI_LOADER_DATA, ++ size, (void **)&gop_handle); ++ if (status != EFI_SUCCESS) ++ return status; ++ ++ status = efi_call_early(locate_handle, ++ EFI_LOCATE_BY_PROTOCOL, ++ proto, NULL, &size, gop_handle); ++ if (status != EFI_SUCCESS) ++ goto free_handle; ++ ++ if (efi_early->is64) ++ status = setup_gop64(si, proto, size, gop_handle); ++ else ++ status = setup_gop32(si, proto, size, gop_handle); ++ ++free_handle: ++ efi_call_early(free_pool, gop_handle); ++ return status; ++} ++ + static efi_status_t + setup_uga32(void **uga_handle, unsigned long size, u32 *width, u32 *height) + { +@@ -1126,6 +1188,10 @@ struct boot_params *efi_main(struct efi_config *c, else setup_boot_services32(efi_early); @@ -116,7 +147,7 @@ index ee1b6d346b98..b4de3faa3f29 100644 setup_efi_pci(boot_params); diff --git a/arch/x86/include/uapi/asm/bootparam.h b/arch/x86/include/uapi/asm/bootparam.h -index 329254373479..b61f8533c0fd 100644 +index c18ce67495fa..2b3e5427097b 100644 --- a/arch/x86/include/uapi/asm/bootparam.h +++ b/arch/x86/include/uapi/asm/bootparam.h @@ -134,7 +134,8 @@ struct boot_params { @@ -130,10 +161,10 @@ index 329254373479..b61f8533c0fd 100644 * The sentinel is set to a nonzero value (0xff) in header.S. * diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c -index baadbf90a7c5..1ac118146e90 100644 +index c4e7b3991b60..bdb9881c7afd 100644 --- a/arch/x86/kernel/setup.c +++ b/arch/x86/kernel/setup.c -@@ -1135,6 +1135,12 @@ void __init setup_arch(char **cmdline_p) +@@ -1152,6 +1152,12 @@ void __init setup_arch(char **cmdline_p) io_delay_init(); @@ -147,7 +178,7 @@ index baadbf90a7c5..1ac118146e90 100644 * Parse the ACPI tables for possible boot-time SMP configuration. */ diff --git a/include/linux/module.h b/include/linux/module.h -index db386349cd01..4b8df91f03cd 100644 +index 082298a09df1..38d0597f7615 100644 --- a/include/linux/module.h +++ b/include/linux/module.h @@ -273,6 +273,12 @@ const struct exception_table_entry *search_exception_tables(unsigned long add); @@ -164,10 +195,10 @@ index db386349cd01..4b8df91f03cd 100644 extern int modules_disabled; /* for sysctl */ diff --git a/kernel/module.c b/kernel/module.c -index 7f045246e123..2b403ab0ef29 100644 +index 3c384968f553..ea484f3a35b2 100644 --- a/kernel/module.c +++ b/kernel/module.c -@@ -4088,6 +4088,13 @@ void module_layout(struct module *mod, +@@ -4200,6 +4200,13 @@ void module_layout(struct module *mod, EXPORT_SYMBOL(module_layout); #endif @@ -182,5 +213,5 @@ index 7f045246e123..2b403ab0ef29 100644 { #ifdef CONFIG_MODULE_SIG -- -2.4.3 +2.5.5 diff --git a/Add-secure_modules-call.patch b/Add-secure_modules-call.patch index b6e039ff0..5c272a983 100644 --- a/Add-secure_modules-call.patch +++ b/Add-secure_modules-call.patch @@ -1,4 +1,4 @@ -From a1aaf20cffb1a949c5d6b1198690c7c30cfda4d5 Mon Sep 17 00:00:00 2001 +From 0f6eec5ca124baf1372fb4edeacd11a002378f5e Mon Sep 17 00:00:00 2001 From: Matthew Garrett Date: Fri, 9 Aug 2013 17:58:15 -0400 Subject: [PATCH 01/20] Add secure_modules() call @@ -17,19 +17,19 @@ Signed-off-by: Matthew Garrett 2 files changed, 16 insertions(+) diff --git a/include/linux/module.h b/include/linux/module.h -index 3a19c79918e0..db386349cd01 100644 +index 3daf2b3..082298a 100644 --- a/include/linux/module.h +++ b/include/linux/module.h -@@ -635,6 +635,8 @@ static inline bool module_requested_async_probing(struct module *module) - return module && module->async_probe_requested; +@@ -655,6 +655,8 @@ static inline bool is_livepatch_module(struct module *mod) } + #endif /* CONFIG_LIVEPATCH */ +extern bool secure_modules(void); + #else /* !CONFIG_MODULES... */ /* Given an address, look for it in the exception tables. */ -@@ -751,6 +753,10 @@ static inline bool module_requested_async_probing(struct module *module) +@@ -771,6 +773,10 @@ static inline bool module_requested_async_probing(struct module *module) return false; } @@ -41,10 +41,10 @@ index 3a19c79918e0..db386349cd01 100644 #ifdef CONFIG_SYSFS diff --git a/kernel/module.c b/kernel/module.c -index b86b7bf1be38..7f045246e123 100644 +index 5f71aa6..3c38496 100644 --- a/kernel/module.c +++ b/kernel/module.c -@@ -4087,3 +4087,13 @@ void module_layout(struct module *mod, +@@ -4199,3 +4199,13 @@ void module_layout(struct module *mod, } EXPORT_SYMBOL(module_layout); #endif @@ -59,5 +59,5 @@ index b86b7bf1be38..7f045246e123 100644 +} +EXPORT_SYMBOL(secure_modules); -- -2.4.3 +2.5.5 diff --git a/Fix-tegra-to-use-stdout-path-for-serial-console.patch b/Fix-tegra-to-use-stdout-path-for-serial-console.patch deleted file mode 100644 index 80a2d1b95..000000000 --- a/Fix-tegra-to-use-stdout-path-for-serial-console.patch +++ /dev/null @@ -1,318 +0,0 @@ -From 15b8caef5f380d9465876478ff5e365bc6afa5b6 Mon Sep 17 00:00:00 2001 -From: Peter Robinson -Date: Sun, 6 Mar 2016 10:59:13 +0000 -Subject: [PATCH] Fix tegra to use stdout-path for serial console - ---- - arch/arm/boot/dts/tegra114-dalmore.dts | 4 ++++ - arch/arm/boot/dts/tegra124-jetson-tk1.dts | 4 ++++ - arch/arm/boot/dts/tegra124-nyan.dtsi | 4 ++++ - arch/arm/boot/dts/tegra124-venice2.dts | 4 ++++ - arch/arm/boot/dts/tegra20-harmony.dts | 4 ++++ - arch/arm/boot/dts/tegra20-iris-512.dts | 4 ++++ - arch/arm/boot/dts/tegra20-medcom-wide.dts | 4 ++++ - arch/arm/boot/dts/tegra20-paz00.dts | 4 ++++ - arch/arm/boot/dts/tegra20-seaboard.dts | 4 ++++ - arch/arm/boot/dts/tegra20-tamonten.dtsi | 4 ++++ - arch/arm/boot/dts/tegra20-trimslice.dts | 4 ++++ - arch/arm/boot/dts/tegra20-ventana.dts | 4 ++++ - arch/arm/boot/dts/tegra20-whistler.dts | 4 ++++ - arch/arm/boot/dts/tegra30-apalis-eval.dts | 4 ++++ - arch/arm/boot/dts/tegra30-beaver.dts | 4 ++++ - arch/arm/boot/dts/tegra30-cardhu.dtsi | 4 ++++ - arch/arm/boot/dts/tegra30-colibri-eval-v3.dts | 4 ++++ - arch/arm64/boot/dts/nvidia/tegra132-norrin.dts | 5 ++++- - arch/arm64/boot/dts/nvidia/tegra210-p2530.dtsi | 4 ++++ - 19 files changed, 76 insertions(+), 1 deletion(-) - -diff --git a/arch/arm/boot/dts/tegra114-dalmore.dts b/arch/arm/boot/dts/tegra114-dalmore.dts -index 8b7aa0d..b5748ee 100644 ---- a/arch/arm/boot/dts/tegra114-dalmore.dts -+++ b/arch/arm/boot/dts/tegra114-dalmore.dts -@@ -18,6 +18,10 @@ - serial0 = &uartd; - }; - -+ chosen { -+ stdout-path = "serial0:115200n8"; -+ }; -+ - memory { - reg = <0x80000000 0x40000000>; - }; -diff --git a/arch/arm/boot/dts/tegra124-jetson-tk1.dts b/arch/arm/boot/dts/tegra124-jetson-tk1.dts -index 66b4451..abf046a 100644 ---- a/arch/arm/boot/dts/tegra124-jetson-tk1.dts -+++ b/arch/arm/boot/dts/tegra124-jetson-tk1.dts -@@ -15,6 +15,10 @@ - serial0 = &uartd; - }; - -+ chosen { -+ stdout-path = "serial0:115200n8"; -+ }; -+ - memory { - reg = <0x0 0x80000000 0x0 0x80000000>; - }; -diff --git a/arch/arm/boot/dts/tegra124-nyan.dtsi b/arch/arm/boot/dts/tegra124-nyan.dtsi -index ec1aa64..e2cd39e 100644 ---- a/arch/arm/boot/dts/tegra124-nyan.dtsi -+++ b/arch/arm/boot/dts/tegra124-nyan.dtsi -@@ -8,6 +8,10 @@ - serial0 = &uarta; - }; - -+ chosen { -+ stdout-path = "serial0:115200n8"; -+ }; -+ - memory { - reg = <0x0 0x80000000 0x0 0x80000000>; - }; -diff --git a/arch/arm/boot/dts/tegra124-venice2.dts b/arch/arm/boot/dts/tegra124-venice2.dts -index cfbdf42..604f4b7 100644 ---- a/arch/arm/boot/dts/tegra124-venice2.dts -+++ b/arch/arm/boot/dts/tegra124-venice2.dts -@@ -13,6 +13,10 @@ - serial0 = &uarta; - }; - -+ chosen { -+ stdout-path = "serial0:115200n8"; -+ }; -+ - memory { - reg = <0x0 0x80000000 0x0 0x80000000>; - }; -diff --git a/arch/arm/boot/dts/tegra20-harmony.dts b/arch/arm/boot/dts/tegra20-harmony.dts -index b926a07..4b73c76 100644 ---- a/arch/arm/boot/dts/tegra20-harmony.dts -+++ b/arch/arm/boot/dts/tegra20-harmony.dts -@@ -13,6 +13,10 @@ - serial0 = &uartd; - }; - -+ chosen { -+ stdout-path = "serial0:115200n8"; -+ }; -+ - memory { - reg = <0x00000000 0x40000000>; - }; -diff --git a/arch/arm/boot/dts/tegra20-iris-512.dts b/arch/arm/boot/dts/tegra20-iris-512.dts -index 1dd7d7b..bb56dfe 100644 ---- a/arch/arm/boot/dts/tegra20-iris-512.dts -+++ b/arch/arm/boot/dts/tegra20-iris-512.dts -@@ -11,6 +11,10 @@ - serial1 = &uartd; - }; - -+ chosen { -+ stdout-path = "serial0:115200n8"; -+ }; -+ - host1x@50000000 { - hdmi@54280000 { - status = "okay"; -diff --git a/arch/arm/boot/dts/tegra20-medcom-wide.dts b/arch/arm/boot/dts/tegra20-medcom-wide.dts -index 9b87526..34c6588 100644 ---- a/arch/arm/boot/dts/tegra20-medcom-wide.dts -+++ b/arch/arm/boot/dts/tegra20-medcom-wide.dts -@@ -10,6 +10,10 @@ - serial0 = &uartd; - }; - -+ chosen { -+ stdout-path = "serial0:115200n8"; -+ }; -+ - pwm@7000a000 { - status = "okay"; - }; -diff --git a/arch/arm/boot/dts/tegra20-paz00.dts b/arch/arm/boot/dts/tegra20-paz00.dts -index ed7e100..81a10a9 100644 ---- a/arch/arm/boot/dts/tegra20-paz00.dts -+++ b/arch/arm/boot/dts/tegra20-paz00.dts -@@ -14,6 +14,10 @@ - serial1 = &uartc; - }; - -+ chosen { -+ stdout-path = "serial0:115200n8"; -+ }; -+ - memory { - reg = <0x00000000 0x20000000>; - }; -diff --git a/arch/arm/boot/dts/tegra20-seaboard.dts b/arch/arm/boot/dts/tegra20-seaboard.dts -index aea8994..0aed748 100644 ---- a/arch/arm/boot/dts/tegra20-seaboard.dts -+++ b/arch/arm/boot/dts/tegra20-seaboard.dts -@@ -13,6 +13,10 @@ - serial0 = &uartd; - }; - -+ chosen { -+ stdout-path = "serial0:115200n8"; -+ }; -+ - memory { - reg = <0x00000000 0x40000000>; - }; -diff --git a/arch/arm/boot/dts/tegra20-tamonten.dtsi b/arch/arm/boot/dts/tegra20-tamonten.dtsi -index 13d4e61..025e9e8 100644 ---- a/arch/arm/boot/dts/tegra20-tamonten.dtsi -+++ b/arch/arm/boot/dts/tegra20-tamonten.dtsi -@@ -10,6 +10,10 @@ - serial0 = &uartd; - }; - -+ chosen { -+ stdout-path = "serial0:115200n8"; -+ }; -+ - memory { - reg = <0x00000000 0x20000000>; - }; -diff --git a/arch/arm/boot/dts/tegra20-trimslice.dts b/arch/arm/boot/dts/tegra20-trimslice.dts -index d99af4e..69d25ca 100644 ---- a/arch/arm/boot/dts/tegra20-trimslice.dts -+++ b/arch/arm/boot/dts/tegra20-trimslice.dts -@@ -13,6 +13,10 @@ - serial0 = &uarta; - }; - -+ chosen { -+ stdout-path = "serial0:115200n8"; -+ }; -+ - memory { - reg = <0x00000000 0x40000000>; - }; -diff --git a/arch/arm/boot/dts/tegra20-ventana.dts b/arch/arm/boot/dts/tegra20-ventana.dts -index 04c58e9..c61533a 100644 ---- a/arch/arm/boot/dts/tegra20-ventana.dts -+++ b/arch/arm/boot/dts/tegra20-ventana.dts -@@ -13,6 +13,10 @@ - serial0 = &uartd; - }; - -+ chosen { -+ stdout-path = "serial0:115200n8"; -+ }; -+ - memory { - reg = <0x00000000 0x40000000>; - }; -diff --git a/arch/arm/boot/dts/tegra20-whistler.dts b/arch/arm/boot/dts/tegra20-whistler.dts -index 340d811..bd76585 100644 ---- a/arch/arm/boot/dts/tegra20-whistler.dts -+++ b/arch/arm/boot/dts/tegra20-whistler.dts -@@ -13,6 +13,10 @@ - serial0 = &uarta; - }; - -+ chosen { -+ stdout-path = "serial0:115200n8"; -+ }; -+ - memory { - reg = <0x00000000 0x20000000>; - }; -diff --git a/arch/arm/boot/dts/tegra30-apalis-eval.dts b/arch/arm/boot/dts/tegra30-apalis-eval.dts -index f2879cf..b914bcb 100644 ---- a/arch/arm/boot/dts/tegra30-apalis-eval.dts -+++ b/arch/arm/boot/dts/tegra30-apalis-eval.dts -@@ -17,6 +17,10 @@ - serial3 = &uartd; - }; - -+ chosen { -+ stdout-path = "serial0:115200n8"; -+ }; -+ - pcie-controller@00003000 { - status = "okay"; - -diff --git a/arch/arm/boot/dts/tegra30-beaver.dts b/arch/arm/boot/dts/tegra30-beaver.dts -index 3dede39..1eca3b2 100644 ---- a/arch/arm/boot/dts/tegra30-beaver.dts -+++ b/arch/arm/boot/dts/tegra30-beaver.dts -@@ -12,6 +12,10 @@ - serial0 = &uarta; - }; - -+ chosen { -+ stdout-path = "serial0:115200n8"; -+ }; -+ - memory { - reg = <0x80000000 0x7ff00000>; - }; -diff --git a/arch/arm/boot/dts/tegra30-cardhu.dtsi b/arch/arm/boot/dts/tegra30-cardhu.dtsi -index bb1ca15..de9d6cc 100644 ---- a/arch/arm/boot/dts/tegra30-cardhu.dtsi -+++ b/arch/arm/boot/dts/tegra30-cardhu.dtsi -@@ -35,6 +35,10 @@ - serial1 = &uartc; - }; - -+ chosen { -+ stdout-path = "serial0:115200n8"; -+ }; -+ - memory { - reg = <0x80000000 0x40000000>; - }; -diff --git a/arch/arm/boot/dts/tegra30-colibri-eval-v3.dts b/arch/arm/boot/dts/tegra30-colibri-eval-v3.dts -index 3ff019f..93e1ffd 100644 ---- a/arch/arm/boot/dts/tegra30-colibri-eval-v3.dts -+++ b/arch/arm/boot/dts/tegra30-colibri-eval-v3.dts -@@ -15,6 +15,10 @@ - serial2 = &uartd; - }; - -+ chosen { -+ stdout-path = "serial0:115200n8"; -+ }; -+ - host1x@50000000 { - dc@54200000 { - rgb { -diff --git a/arch/arm64/boot/dts/nvidia/tegra132-norrin.dts b/arch/arm64/boot/dts/nvidia/tegra132-norrin.dts -index 62f33fc..3c0b4d7 100644 ---- a/arch/arm64/boot/dts/nvidia/tegra132-norrin.dts -+++ b/arch/arm64/boot/dts/nvidia/tegra132-norrin.dts -@@ -10,9 +10,12 @@ - aliases { - rtc0 = "/i2c@0,7000d000/as3722@40"; - rtc1 = "/rtc@0,7000e000"; -+ serial0 = &uarta; - }; - -- chosen { }; -+ chosen { -+ stdout-path = "serial0:115200n8"; -+ }; - - memory { - device_type = "memory"; -diff --git a/arch/arm64/boot/dts/nvidia/tegra210-p2530.dtsi b/arch/arm64/boot/dts/nvidia/tegra210-p2530.dtsi -index ece0dec..73ba582 100644 ---- a/arch/arm64/boot/dts/nvidia/tegra210-p2530.dtsi -+++ b/arch/arm64/boot/dts/nvidia/tegra210-p2530.dtsi -@@ -9,6 +9,10 @@ - serial0 = &uarta; - }; - -+ chosen { -+ stdout-path = "serial0:115200n8"; -+ }; -+ - memory { - device_type = "memory"; - reg = <0x0 0x80000000 0x0 0xc0000000>; --- -2.5.0 - diff --git a/KEYS-Add-a-system-blacklist-keyring.patch b/KEYS-Add-a-system-blacklist-keyring.patch index 469ac35ab..4f5678a15 100644 --- a/KEYS-Add-a-system-blacklist-keyring.patch +++ b/KEYS-Add-a-system-blacklist-keyring.patch @@ -1,7 +1,7 @@ -From f630ce576114bfede02d8a0bafa97e4d6f978a74 Mon Sep 17 00:00:00 2001 +From 096da19de900a115ee3610b666ecb7e55926623d Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Fri, 26 Oct 2012 12:36:24 -0400 -Subject: [PATCH 17/20] KEYS: Add a system blacklist keyring +Subject: [PATCH 6/9] KEYS: Add a system blacklist keyring This adds an additional keyring that is used to store certificates that are blacklisted. This keyring is searched first when loading signed modules @@ -10,52 +10,48 @@ useful in cases where third party certificates are used for module signing. Signed-off-by: Josh Boyer --- - certs/system_keyring.c | 27 +++++++++++++++++++++++++++ + certs/system_keyring.c | 22 ++++++++++++++++++++++ include/keys/system_keyring.h | 4 ++++ init/Kconfig | 9 +++++++++ - 3 files changed, 40 insertions(+) + 3 files changed, 35 insertions(+) diff --git a/certs/system_keyring.c b/certs/system_keyring.c -index 2570598b784d..53733822993f 100644 +index 50979d6dcecd..787eeead2f57 100644 --- a/certs/system_keyring.c +++ b/certs/system_keyring.c -@@ -20,6 +20,9 @@ - - struct key *system_trusted_keyring; - EXPORT_SYMBOL_GPL(system_trusted_keyring); +@@ -22,6 +22,9 @@ static struct key *builtin_trusted_keys; + #ifdef CONFIG_SECONDARY_TRUSTED_KEYRING + static struct key *secondary_trusted_keys; + #endif +#ifdef CONFIG_SYSTEM_BLACKLIST_KEYRING +struct key *system_blacklist_keyring; +#endif extern __initconst const u8 system_certificate_list[]; extern __initconst const unsigned long system_certificate_list_size; -@@ -41,6 +44,20 @@ static __init int system_trusted_keyring_init(void) - panic("Can't allocate system trusted keyring\n"); - - set_bit(KEY_FLAG_TRUSTED_ONLY, &system_trusted_keyring->flags); -+ -+ #ifdef CONFIG_SYSTEM_BLACKLIST_KEYRING +@@ -99,6 +102,16 @@ static __init int system_trusted_keyring_init(void) + if (key_link(secondary_trusted_keys, builtin_trusted_keys) < 0) + panic("Can't link trusted keyrings\n"); + #endif ++#ifdef CONFIG_SYSTEM_BLACKLIST_KEYRING + system_blacklist_keyring = keyring_alloc(".system_blacklist_keyring", -+ KUIDT_INIT(0), KGIDT_INIT(0), -+ current_cred(), -+ (KEY_POS_ALL & ~KEY_POS_SETATTR) | -+ KEY_USR_VIEW | KEY_USR_READ, -+ KEY_ALLOC_NOT_IN_QUOTA, NULL); ++ KUIDT_INIT(0), KGIDT_INIT(0), current_cred(), ++ ((KEY_POS_ALL & ~KEY_POS_SETATTR) | ++ KEY_USR_VIEW | KEY_USR_READ | KEY_USR_SEARCH), ++ KEY_ALLOC_NOT_IN_QUOTA, ++ NULL, NULL); + if (IS_ERR(system_blacklist_keyring)) + panic("Can't allocate system blacklist keyring\n"); -+ -+ set_bit(KEY_FLAG_TRUSTED_ONLY, &system_blacklist_keyring->flags); +#endif -+ + return 0; } - -@@ -138,6 +155,16 @@ int system_verify_data(const void *data, unsigned long len, - if (ret < 0) - goto error; - +@@ -214,6 +227,15 @@ int verify_pkcs7_signature(const void *data, size_t len, + trusted_keys = builtin_trusted_keys; + #endif + } +#ifdef CONFIG_SYSTEM_BLACKLIST_KEYRING -+ ret = pkcs7_validate_trust(pkcs7, system_blacklist_keyring, &trusted); ++ ret = pkcs7_validate_trust(pkcs7, system_blacklist_keyring); + if (!ret) { + /* module is signed with a cert in the blacklist. reject */ + pr_err("Module key is in the blacklist\n"); @@ -63,30 +59,29 @@ index 2570598b784d..53733822993f 100644 + goto error; + } +#endif -+ - ret = pkcs7_validate_trust(pkcs7, system_trusted_keyring, &trusted); - if (ret < 0) - goto error; + ret = pkcs7_validate_trust(pkcs7, trusted_keys); + if (ret < 0) { + if (ret == -ENOKEY) diff --git a/include/keys/system_keyring.h b/include/keys/system_keyring.h -index b20cd885c1fd..51d8ddc60e0f 100644 +index fbd4647767e9..5bc291a3d261 100644 --- a/include/keys/system_keyring.h +++ b/include/keys/system_keyring.h -@@ -35,6 +35,10 @@ extern int system_verify_data(const void *data, unsigned long len, - enum key_being_used_for usage); +@@ -33,6 +33,10 @@ extern int restrict_link_by_builtin_and_secondary_trusted( + #define restrict_link_by_builtin_and_secondary_trusted restrict_link_by_builtin_trusted #endif +#ifdef CONFIG_SYSTEM_BLACKLIST_KEYRING +extern struct key *system_blacklist_keyring; +#endif + - #ifdef CONFIG_IMA_MOK_KEYRING - extern struct key *ima_mok_keyring; + #ifdef CONFIG_IMA_BLACKLIST_KEYRING extern struct key *ima_blacklist_keyring; + diff --git a/init/Kconfig b/init/Kconfig -index 02da9f1fd9df..782d26f02885 100644 +index a9c4aefd5436..e5449d5aeff9 100644 --- a/init/Kconfig +++ b/init/Kconfig -@@ -1783,6 +1783,15 @@ config SYSTEM_DATA_VERIFICATION +@@ -1829,6 +1829,15 @@ config SYSTEM_DATA_VERIFICATION module verification, kexec image verification and firmware blob verification. @@ -103,5 +98,5 @@ index 02da9f1fd9df..782d26f02885 100644 bool "Profiling support" help -- -2.4.3 +2.5.5 diff --git a/MODSIGN-Import-certificates-from-UEFI-Secure-Boot.patch b/MODSIGN-Import-certificates-from-UEFI-Secure-Boot.patch index 8a484b6d8..05be7a028 100644 --- a/MODSIGN-Import-certificates-from-UEFI-Secure-Boot.patch +++ b/MODSIGN-Import-certificates-from-UEFI-Secure-Boot.patch @@ -1,4 +1,4 @@ -From 2246a781c8dbb1207a0b0abbfae201f998c3954b Mon Sep 17 00:00:00 2001 +From ba2b209daf984514229626803472e0b055832345 Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Fri, 26 Oct 2012 12:42:16 -0400 Subject: [PATCH] MODSIGN: Import certificates from UEFI Secure Boot @@ -18,18 +18,56 @@ signed with those from loading. Signed-off-by: Josh Boyer --- - include/linux/efi.h | 6 ++++ - init/Kconfig | 9 +++++ - kernel/Makefile | 3 ++ - kernel/modsign_uefi.c | 92 +++++++++++++++++++++++++++++++++++++++++++++++++++ - 4 files changed, 110 insertions(+) + certs/system_keyring.c | 13 ++++++ + include/keys/system_keyring.h | 1 + + include/linux/efi.h | 6 +++ + init/Kconfig | 9 ++++ + kernel/Makefile | 3 ++ + kernel/modsign_uefi.c | 99 +++++++++++++++++++++++++++++++++++++++++++ + 6 files changed, 131 insertions(+) create mode 100644 kernel/modsign_uefi.c +diff --git a/certs/system_keyring.c b/certs/system_keyring.c +index 787eeead2f57..4d9123ed5c07 100644 +--- a/certs/system_keyring.c ++++ b/certs/system_keyring.c +@@ -30,6 +30,19 @@ extern __initconst const u8 system_certificate_list[]; + extern __initconst const unsigned long system_certificate_list_size; + + /** ++ * get_system_keyring - Return a pointer to the system keyring ++ * ++ */ ++struct key *get_system_keyring(void) ++{ ++ struct key *system_keyring = NULL; ++ ++ system_keyring = builtin_trusted_keys; ++ return system_keyring; ++} ++EXPORT_SYMBOL_GPL(get_system_keyring); ++ ++/** + * restrict_link_to_builtin_trusted - Restrict keyring addition by built in CA + * + * Restrict the addition of keys into a keyring based on the key-to-be-added +diff --git a/include/keys/system_keyring.h b/include/keys/system_keyring.h +index 5bc291a3d261..56ff5715ab67 100644 +--- a/include/keys/system_keyring.h ++++ b/include/keys/system_keyring.h +@@ -36,6 +36,7 @@ extern int restrict_link_by_builtin_and_secondary_trusted( + #ifdef CONFIG_SYSTEM_BLACKLIST_KEYRING + extern struct key *system_blacklist_keyring; + #endif ++extern struct key *get_system_keyring(void); + + #ifdef CONFIG_IMA_BLACKLIST_KEYRING + extern struct key *ima_blacklist_keyring; diff --git a/include/linux/efi.h b/include/linux/efi.h -index 85ef051ac6fb..a042b2ece788 100644 +index ff1877145aa4..2483de19c719 100644 --- a/include/linux/efi.h +++ b/include/linux/efi.h -@@ -600,6 +600,12 @@ typedef struct { +@@ -658,6 +658,12 @@ typedef struct { u64 table; } efi_config_table_64_t; @@ -43,10 +81,10 @@ index 85ef051ac6fb..a042b2ece788 100644 efi_guid_t guid; u32 table; diff --git a/init/Kconfig b/init/Kconfig -index 02da9f1fd9df..90c73a0564b1 100644 +index e5449d5aeff9..5408c96f6604 100644 --- a/init/Kconfig +++ b/init/Kconfig -@@ -1924,6 +1924,15 @@ config MODULE_SIG_ALL +@@ -1979,6 +1979,15 @@ config MODULE_SIG_ALL comment "Do not forget to sign required modules with scripts/sign-file" depends on MODULE_SIG_FORCE && !MODULE_SIG_ALL @@ -63,10 +101,10 @@ index 02da9f1fd9df..90c73a0564b1 100644 prompt "Which hash algorithm should modules be signed with?" depends on MODULE_SIG diff --git a/kernel/Makefile b/kernel/Makefile -index d4988410b410..55e886239e7e 100644 +index e2ec54e2b952..8dab549985d8 100644 --- a/kernel/Makefile +++ b/kernel/Makefile -@@ -47,6 +47,7 @@ endif +@@ -57,6 +57,7 @@ endif obj-$(CONFIG_UID16) += uid16.o obj-$(CONFIG_MODULES) += module.o obj-$(CONFIG_MODULE_SIG) += module_signing.o @@ -74,7 +112,7 @@ index d4988410b410..55e886239e7e 100644 obj-$(CONFIG_KALLSYMS) += kallsyms.o obj-$(CONFIG_BSD_PROCESS_ACCT) += acct.o obj-$(CONFIG_KEXEC_CORE) += kexec_core.o -@@ -103,6 +104,8 @@ obj-$(CONFIG_TORTURE_TEST) += torture.o +@@ -113,6 +114,8 @@ obj-$(CONFIG_MEMBARRIER) += membarrier.o obj-$(CONFIG_HAS_IOMEM) += memremap.o @@ -85,10 +123,10 @@ index d4988410b410..55e886239e7e 100644 # config_data.h contains the same information as ikconfig.h but gzipped. diff --git a/kernel/modsign_uefi.c b/kernel/modsign_uefi.c new file mode 100644 -index 000000000000..94b0eb38a284 +index 000000000000..fe4a6f2bf10a --- /dev/null +++ b/kernel/modsign_uefi.c -@@ -0,0 +1,92 @@ +@@ -0,0 +1,99 @@ +#include +#include +#include @@ -139,11 +177,18 @@ index 000000000000..94b0eb38a284 + void *db = NULL, *dbx = NULL, *mok = NULL; + unsigned long dbsize = 0, dbxsize = 0, moksize = 0; + int rc = 0; ++ struct key *keyring = NULL; + + /* Check if SB is enabled and just return if not */ + if (!efi_enabled(EFI_SECURE_BOOT)) + return 0; + ++ keyring = get_system_keyring(); ++ if (!keyring) { ++ pr_err("MODSIGN: Couldn't get system keyring\n"); ++ return -EINVAL; ++ } ++ + /* Get db, MokListRT, and dbx. They might not exist, so it isn't + * an error if we can't get them. + */ @@ -151,7 +196,7 @@ index 000000000000..94b0eb38a284 + if (!db) { + pr_err("MODSIGN: Couldn't get UEFI db list\n"); + } else { -+ rc = parse_efi_signature_list(db, dbsize, system_trusted_keyring); ++ rc = parse_efi_signature_list(db, dbsize, keyring); + if (rc) + pr_err("Couldn't parse db signatures: %d\n", rc); + kfree(db); @@ -161,7 +206,7 @@ index 000000000000..94b0eb38a284 + if (!mok) { + pr_info("MODSIGN: Couldn't get UEFI MokListRT\n"); + } else { -+ rc = parse_efi_signature_list(mok, moksize, system_trusted_keyring); ++ rc = parse_efi_signature_list(mok, moksize, keyring); + if (rc) + pr_err("Couldn't parse MokListRT signatures: %d\n", rc); + kfree(mok); @@ -182,5 +227,5 @@ index 000000000000..94b0eb38a284 +} +late_initcall(load_uefi_certs); -- -2.4.3 +2.5.5 diff --git a/MODSIGN-Support-not-importing-certs-from-db.patch b/MODSIGN-Support-not-importing-certs-from-db.patch index bb5ae2a2c..3339ce76e 100644 --- a/MODSIGN-Support-not-importing-certs-from-db.patch +++ b/MODSIGN-Support-not-importing-certs-from-db.patch @@ -1,7 +1,7 @@ -From d7c9efa4ab647d6ccb617f2504e79a398d56f7d4 Mon Sep 17 00:00:00 2001 +From 7ce860189df19a38176c1510f4e5615bf35495c1 Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Thu, 3 Oct 2013 10:14:23 -0400 -Subject: [PATCH 19/20] MODSIGN: Support not importing certs from db +Subject: [PATCH 2/2] MODSIGN: Support not importing certs from db If a user tells shim to not use the certs/hashes in the UEFI db variable for verification purposes, shim will set a UEFI variable called MokIgnoreDB. @@ -14,7 +14,7 @@ Signed-off-by: Josh Boyer 1 file changed, 31 insertions(+), 9 deletions(-) diff --git a/kernel/modsign_uefi.c b/kernel/modsign_uefi.c -index 94b0eb38a284..ae28b974d49a 100644 +index 03f601a0052c..321c79a3b282 100644 --- a/kernel/modsign_uefi.c +++ b/kernel/modsign_uefi.c @@ -8,6 +8,23 @@ @@ -41,16 +41,18 @@ index 94b0eb38a284..ae28b974d49a 100644 static __init void *get_cert_list(efi_char16_t *name, efi_guid_t *guid, unsigned long *size) { efi_status_t status; -@@ -47,23 +64,28 @@ static int __init load_uefi_certs(void) +@@ -47,7 +64,7 @@ static int __init load_uefi_certs(void) efi_guid_t mok_var = EFI_SHIM_LOCK_GUID; void *db = NULL, *dbx = NULL, *mok = NULL; unsigned long dbsize = 0, dbxsize = 0, moksize = 0; - int rc = 0; + int ignore_db, rc = 0; + struct key *keyring = NULL; /* Check if SB is enabled and just return if not */ - if (!efi_enabled(EFI_SECURE_BOOT)) - return 0; +@@ -60,17 +77,22 @@ static int __init load_uefi_certs(void) + return -EINVAL; + } + /* See if the user has setup Ignore DB mode */ + ignore_db = check_ignore_db(); @@ -62,7 +64,7 @@ index 94b0eb38a284..ae28b974d49a 100644 - if (!db) { - pr_err("MODSIGN: Couldn't get UEFI db list\n"); - } else { -- rc = parse_efi_signature_list(db, dbsize, system_trusted_keyring); +- rc = parse_efi_signature_list(db, dbsize, keyring); - if (rc) - pr_err("Couldn't parse db signatures: %d\n", rc); - kfree(db); @@ -71,7 +73,7 @@ index 94b0eb38a284..ae28b974d49a 100644 + if (!db) { + pr_err("MODSIGN: Couldn't get UEFI db list\n"); + } else { -+ rc = parse_efi_signature_list(db, dbsize, system_trusted_keyring); ++ rc = parse_efi_signature_list(db, dbsize, keyring); + if (rc) + pr_err("Couldn't parse db signatures: %d\n", rc); + kfree(db); @@ -80,5 +82,5 @@ index 94b0eb38a284..ae28b974d49a 100644 mok = get_cert_list(L"MokListRT", &mok_var, &moksize); -- -2.4.3 +2.5.5 diff --git a/USB-usbfs-fix-potential-infoleak-in-devio.patch b/USB-usbfs-fix-potential-infoleak-in-devio.patch deleted file mode 100644 index 48360c930..000000000 --- a/USB-usbfs-fix-potential-infoleak-in-devio.patch +++ /dev/null @@ -1,41 +0,0 @@ -From 7adc5cbc25dcc47dc3856108d9823d08da75da9d Mon Sep 17 00:00:00 2001 -From: Kangjie Lu -Date: Tue, 3 May 2016 16:32:16 -0400 -Subject: [PATCH] USB: usbfs: fix potential infoleak in devio -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -The stack object “ci” has a total size of 8 bytes. Its last 3 bytes -are padding bytes which are not initialized and leaked to userland -via “copy_to_user”. - -Signed-off-by: Kangjie Lu -Signed-off-by: Greg Kroah-Hartman ---- - drivers/usb/core/devio.c | 9 +++++---- - 1 file changed, 5 insertions(+), 4 deletions(-) - -diff --git a/drivers/usb/core/devio.c b/drivers/usb/core/devio.c -index 52c4461dfccd..9b7f1f75e887 100644 ---- a/drivers/usb/core/devio.c -+++ b/drivers/usb/core/devio.c -@@ -1316,10 +1316,11 @@ static int proc_getdriver(struct usb_dev_state *ps, void __user *arg) - - static int proc_connectinfo(struct usb_dev_state *ps, void __user *arg) - { -- struct usbdevfs_connectinfo ci = { -- .devnum = ps->dev->devnum, -- .slow = ps->dev->speed == USB_SPEED_LOW -- }; -+ struct usbdevfs_connectinfo ci; -+ -+ memset(&ci, 0, sizeof(ci)); -+ ci.devnum = ps->dev->devnum; -+ ci.slow = ps->dev->speed == USB_SPEED_LOW; - - if (copy_to_user(arg, &ci, sizeof(ci))) - return -EFAULT; --- -2.5.5 - diff --git a/arm-i.MX6-Utilite-device-dtb.patch b/arm-i.MX6-Utilite-device-dtb.patch index 2476e17cc..efffd77bd 100644 --- a/arm-i.MX6-Utilite-device-dtb.patch +++ b/arm-i.MX6-Utilite-device-dtb.patch @@ -1,27 +1,180 @@ -From f7393b8c390f3a082224d1d73395c3536ef9f6a0 Mon Sep 17 00:00:00 2001 -From: Peter Robinson -Date: Mon, 30 May 2016 16:41:37 +0100 -Subject: [PATCH] arm: i.MX6 Utilite device dtb +From: Christopher Spinrath +The CompuLab Utilite Pro is a miniature fanless desktop pc based on +the i.MX6 Quad powered cm-fx6 module. It features two serial ports, +USB OTG, 4x USB, analog audio and S/PDIF, 2x Gb Ethernet, HDMI and +DVI ports, an on-board 32GB SSD, a mmc slot, and on-board wifi/bt. + +Add initial support for it including USB, Ethernet (both ports), sata +and HDMI support. + +Signed-off-by: Christopher Spinrath --- arch/arm/boot/dts/Makefile | 1 + - arch/arm/boot/dts/imx6q-cm-fx6.dts | 136 ++++++++++++++++++++++++++++++++ - arch/arm/boot/dts/imx6q-utilite-pro.dts | 128 ++++++++++++++++++++++++++++++ - 3 files changed, 265 insertions(+) + arch/arm/boot/dts/imx6q-utilite-pro.dts | 128 ++++++++++++++++++++++++++++++++ + 2 files changed, 129 insertions(+) create mode 100644 arch/arm/boot/dts/imx6q-utilite-pro.dts diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile -index 95c1923..e6738f8 100644 +index 515a428..287044c 100644 --- a/arch/arm/boot/dts/Makefile +++ b/arch/arm/boot/dts/Makefile -@@ -362,6 +362,7 @@ dtb-$(CONFIG_SOC_IMX6Q) += \ - imx6q-tx6q-1020-comtft.dtb \ +@@ -369,6 +369,7 @@ dtb-$(CONFIG_SOC_IMX6Q) += \ imx6q-tx6q-1110.dtb \ + imx6q-tx6q-11x0-mb7.dtb \ imx6q-udoo.dtb \ + imx6q-utilite-pro.dtb \ imx6q-wandboard.dtb \ imx6q-wandboard-revb1.dtb \ - imx6qp-sabreauto.dtb \ + imx6qp-nitrogen6_max.dtb \ +diff --git a/arch/arm/boot/dts/imx6q-utilite-pro.dts b/arch/arm/boot/dts/imx6q-utilite-pro.dts +new file mode 100644 +index 0000000..bcd8e0d +--- /dev/null ++++ b/arch/arm/boot/dts/imx6q-utilite-pro.dts +@@ -0,0 +1,128 @@ ++/* ++ * Copyright 2016 Christopher Spinrath ++ * Copyright 2013 CompuLab Ltd. ++ * ++ * Based on the GPLv2 licensed devicetree distributed with the vendor ++ * kernel for the Utilite Pro: ++ * Copyright 2013 CompuLab Ltd. ++ * Author: Valentin Raevsky ++ * ++ * 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 "imx6q-cm-fx6.dts" ++ ++/ { ++ model = "CompuLab Utilite Pro"; ++ compatible = "compulab,utilite-pro", "compulab,cm-fx6", "fsl,imx6q"; ++ ++ aliases { ++ ethernet1 = ð1; ++ rtc0 = &em3027; ++ rtc1 = &snvs_rtc; ++ }; ++ ++ gpio-keys { ++ compatible = "gpio-keys"; ++ power { ++ label = "Power Button"; ++ gpios = <&gpio1 29 1>; ++ linux,code = <116>; /* KEY_POWER */ ++ gpio-key,wakeup; ++ }; ++ }; ++}; ++ ++&hdmi { ++ ddc-i2c-bus = <&i2c2>; ++ status = "okay"; ++}; ++ ++&i2c1 { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pinctrl_i2c1>; ++ status = "okay"; ++ ++ eeprom@50 { ++ compatible = "at24,24c02"; ++ reg = <0x50>; ++ pagesize = <16>; ++ }; ++ ++ em3027: rtc@56 { ++ compatible = "emmicro,em3027"; ++ reg = <0x56>; ++ }; ++}; ++ ++&i2c2 { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pinctrl_i2c2>; ++ status = "okay"; ++}; ++ ++&iomuxc { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pinctrl_hog>; ++ ++ hog { ++ pinctrl_hog: hoggrp { ++ fsl,pins = < ++ /* power button */ ++ MX6QDL_PAD_ENET_TXD1__GPIO1_IO29 0x80000000 ++ >; ++ }; ++ }; ++ ++ imx6q-utilite-pro { ++ pinctrl_i2c1: i2c1grp { ++ fsl,pins = < ++ MX6QDL_PAD_EIM_D21__I2C1_SCL 0x4001b8b1 ++ MX6QDL_PAD_EIM_D28__I2C1_SDA 0x4001b8b1 ++ >; ++ }; ++ ++ pinctrl_i2c2: i2c2grp { ++ fsl,pins = < ++ MX6QDL_PAD_KEY_COL3__I2C2_SCL 0x4001b8b1 ++ MX6QDL_PAD_KEY_ROW3__I2C2_SDA 0x4001b8b1 ++ >; ++ }; ++ ++ pinctrl_uart2: uart2grp { ++ fsl,pins = < ++ MX6QDL_PAD_GPIO_7__UART2_TX_DATA 0x1b0b1 ++ MX6QDL_PAD_GPIO_8__UART2_RX_DATA 0x1b0b1 ++ MX6QDL_PAD_SD4_DAT5__UART2_RTS_B 0x1b0b1 ++ MX6QDL_PAD_SD4_DAT6__UART2_CTS_B 0x1b0b1 ++ >; ++ }; ++ }; ++}; ++ ++&pcie { ++ pcie@0,0 { ++ reg = <0x000000 0 0 0 0>; ++ #address-cells = <3>; ++ #size-cells = <2>; ++ ++ /* non-removable i211 ethernet card */ ++ eth1: intel,i211@pcie0,0 { ++ reg = <0x010000 0 0 0 0>; ++ }; ++ }; ++}; ++ ++&uart2 { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pinctrl_uart2>; ++ fsl,uart-has-rtscts; ++ dma-names = "rx", "tx"; ++ dmas = <&sdma 27 4 0>, <&sdma 28 4 0>; ++ status = "okay"; ++}; +-- +2.8.2 +From: Christopher Spinrath + +The cm-fx6 module has an on-board spi-flash chip for its firmware, an +eeprom (containing e.g. the mac address of the on-board Ethernet), +a sata port, a pcie controller, an USB hub, and an USB otg port. +Enable support for them. In addition, enable syscon poweroff support. + +Signed-off-by: Christopher Spinrath +--- + arch/arm/boot/dts/imx6q-cm-fx6.dts | 136 +++++++++++++++++++++++++++++++++++++ + 1 file changed, 136 insertions(+) + diff --git a/arch/arm/boot/dts/imx6q-cm-fx6.dts b/arch/arm/boot/dts/imx6q-cm-fx6.dts index 99b46f8..f4fc22e 100644 --- a/arch/arm/boot/dts/imx6q-cm-fx6.dts @@ -196,140 +349,6 @@ index 99b46f8..f4fc22e 100644 + pinctrl-0 = <&pinctrl_usbh1>; + status = "okay"; +}; -diff --git a/arch/arm/boot/dts/imx6q-utilite-pro.dts b/arch/arm/boot/dts/imx6q-utilite-pro.dts -new file mode 100644 -index 0000000..3966595 ---- /dev/null -+++ b/arch/arm/boot/dts/imx6q-utilite-pro.dts -@@ -0,0 +1,128 @@ -+/* -+ * Copyright 2016 Christopher Spinrath -+ * Copyright 2013 CompuLab Ltd. -+ * -+ * Based on the GPLv2 licensed devicetree distributed with the vendor -+ * kernel for the Utilite Pro: -+ * Copyright 2013 CompuLab Ltd. -+ * Author: Valentin Raevsky -+ * -+ * 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 "imx6q-cm-fx6.dts" -+ -+/ { -+ model = "CompuLab Utilite Pro"; -+ compatible = "compulab,utilite-pro", "compulab,cm-fx6", "fsl,imx6q"; -+ -+ aliases { -+ ethernet1 = ð1; -+ rtc0 = &em3027; -+ rtc1 = &snvs_rtc; -+ }; -+ -+ gpio-keys { -+ compatible = "gpio-keys"; -+ power { -+ label = "Power Button"; -+ gpios = <&gpio1 29 1>; -+ linux,code = <116>; /* KEY_POWER */ -+ gpio-key,wakeup; -+ }; -+ }; -+}; -+ -+&hdmi { -+ ddc-i2c-bus = <&i2c2>; -+ status = "okay"; -+}; -+ -+&i2c1 { -+ pinctrl-names = "default"; -+ pinctrl-0 = <&pinctrl_i2c1>; -+ status = "okay"; -+ -+ eeprom@50 { -+ compatible = "at24,24c02"; -+ reg = <0x50>; -+ pagesize = <16>; -+ }; -+ -+ em3027: rtc@56 { -+ compatible = "emmicro,em3027"; -+ reg = <0x56>; -+ }; -+}; -+ -+&i2c2 { -+ pinctrl-names = "default"; -+ pinctrl-0 = <&pinctrl_i2c2>; -+ status = "okay"; -+}; -+ -+&iomuxc { -+ pinctrl-names = "default"; -+ pinctrl-0 = <&pinctrl_hog>; -+ -+ hog { -+ pinctrl_hog: hoggrp { -+ fsl,pins = < -+ /* power button */ -+ MX6QDL_PAD_ENET_TXD1__GPIO1_IO29 0x80000000 -+ >; -+ }; -+ }; -+ -+ imx6q-utilite-pro { -+ pinctrl_i2c1: i2c1grp { -+ fsl,pins = < -+ MX6QDL_PAD_EIM_D21__I2C1_SCL 0x4001b8b1 -+ MX6QDL_PAD_EIM_D28__I2C1_SDA 0x4001b8b1 -+ >; -+ }; -+ -+ pinctrl_i2c2: i2c2grp { -+ fsl,pins = < -+ MX6QDL_PAD_KEY_COL3__I2C2_SCL 0x4001b8b1 -+ MX6QDL_PAD_KEY_ROW3__I2C2_SDA 0x4001b8b1 -+ >; -+ }; -+ -+ pinctrl_uart2: uart2grp { -+ fsl,pins = < -+ MX6QDL_PAD_GPIO_7__UART2_TX_DATA 0x1b0b1 -+ MX6QDL_PAD_GPIO_8__UART2_RX_DATA 0x1b0b1 -+ MX6QDL_PAD_SD4_DAT5__UART2_RTS_B 0x1b0b1 -+ MX6QDL_PAD_SD4_DAT6__UART2_CTS_B 0x1b0b1 -+ >; -+ }; -+ }; -+}; -+ -+&pcie { -+ pcie@0,0 { -+ reg = <0x000000 0 0 0 0>; -+ #address-cells = <3>; -+ #size-cells = <2>; -+ -+ /* non-removable i211 ethernet card */ -+ eth1: intel,i211@pcie0,0 { -+ reg = <0x010000 0 0 0 0>; -+ }; -+ }; -+}; -+ -+&uart2 { -+ pinctrl-names = "default"; -+ pinctrl-0 = <&pinctrl_uart2>; -+ fsl,uart-has-rtscts; -+ dma-names = "rx", "tx"; -+ dmas = <&sdma 27 4 0>, <&sdma 28 4 0>; -+ status = "okay"; -+}; -- -2.7.4 +2.8.2 diff --git a/arm64-acpi-drop-expert-patch.patch b/arm64-acpi-drop-expert-patch.patch deleted file mode 100644 index 6122732d6..000000000 --- a/arm64-acpi-drop-expert-patch.patch +++ /dev/null @@ -1,21 +0,0 @@ -From: Peter Robinson -Date: Sun, 3 May 2015 18:35:23 +0100 -Subject: [PATCH] arm64: acpi drop expert patch - ---- - drivers/acpi/Kconfig | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/drivers/acpi/Kconfig b/drivers/acpi/Kconfig -index 114cf48085ab..70ba3ef9a37b 100644 ---- a/drivers/acpi/Kconfig -+++ b/drivers/acpi/Kconfig -@@ -5,7 +5,7 @@ - menuconfig ACPI - bool "ACPI (Advanced Configuration and Power Interface) Support" - depends on !IA64_HP_SIM -- depends on IA64 || X86 || (ARM64 && EXPERT) -+ depends on IA64 || X86 || ARM64 - depends on PCI - select PNP - default y diff --git a/arm64-pcie-acpi.patch b/arm64-pcie-acpi.patch new file mode 100644 index 000000000..e9a359db6 --- /dev/null +++ b/arm64-pcie-acpi.patch @@ -0,0 +1,1247 @@ +From 1fc02559de87cd88339a83ad05baa9c2b5bd1ac0 Mon Sep 17 00:00:00 2001 +From: Jayachandran C +Date: Fri, 10 Jun 2016 21:55:09 +0200 +Subject: [PATCH 01/11] PCI/ECAM: Move ecam.h to linux/include/pci-ecam.h + +This header will be used from arch/arm64 for ACPI PCI implementation +so it needs to be moved out of drivers/pci. + +Update users of the header file to use the new name. No functional +changes. + +Signed-off-by: Jayachandran C +Acked-by: Lorenzo Pieralisi +--- + drivers/pci/ecam.c | 3 +- + drivers/pci/ecam.h | 67 ------------------------------------- + drivers/pci/host/pci-host-common.c | 3 +- + drivers/pci/host/pci-host-generic.c | 3 +- + drivers/pci/host/pci-thunder-ecam.c | 3 +- + drivers/pci/host/pci-thunder-pem.c | 3 +- + include/linux/pci-ecam.h | 67 +++++++++++++++++++++++++++++++++++++ + 7 files changed, 72 insertions(+), 77 deletions(-) + delete mode 100644 drivers/pci/ecam.h + create mode 100644 include/linux/pci-ecam.h + +diff --git a/drivers/pci/ecam.c b/drivers/pci/ecam.c +index f9832ad..820e26b 100644 +--- a/drivers/pci/ecam.c ++++ b/drivers/pci/ecam.c +@@ -19,10 +19,9 @@ + #include + #include + #include ++#include + #include + +-#include "ecam.h" +- + /* + * On 64-bit systems, we do a single ioremap for the whole config space + * since we have enough virtual address range available. On 32-bit, we +diff --git a/drivers/pci/ecam.h b/drivers/pci/ecam.h +deleted file mode 100644 +index 9878beb..0000000 +--- a/drivers/pci/ecam.h ++++ /dev/null +@@ -1,67 +0,0 @@ +-/* +- * Copyright 2016 Broadcom +- * +- * 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 (the "GPL"). +- * +- * This program is distributed in the hope that it will be useful, but +- * WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +- * General Public License version 2 (GPLv2) for more details. +- * +- * You should have received a copy of the GNU General Public License +- * version 2 (GPLv2) along with this source code. +- */ +-#ifndef DRIVERS_PCI_ECAM_H +-#define DRIVERS_PCI_ECAM_H +- +-#include +-#include +- +-/* +- * struct to hold pci ops and bus shift of the config window +- * for a PCI controller. +- */ +-struct pci_config_window; +-struct pci_ecam_ops { +- unsigned int bus_shift; +- struct pci_ops pci_ops; +- int (*init)(struct device *, +- struct pci_config_window *); +-}; +- +-/* +- * struct to hold the mappings of a config space window. This +- * is expected to be used as sysdata for PCI controllers that +- * use ECAM. +- */ +-struct pci_config_window { +- struct resource res; +- struct resource busr; +- void *priv; +- struct pci_ecam_ops *ops; +- union { +- void __iomem *win; /* 64-bit single mapping */ +- void __iomem **winp; /* 32-bit per-bus mapping */ +- }; +-}; +- +-/* create and free pci_config_window */ +-struct pci_config_window *pci_ecam_create(struct device *dev, +- struct resource *cfgres, struct resource *busr, +- struct pci_ecam_ops *ops); +-void pci_ecam_free(struct pci_config_window *cfg); +- +-/* map_bus when ->sysdata is an instance of pci_config_window */ +-void __iomem *pci_ecam_map_bus(struct pci_bus *bus, unsigned int devfn, +- int where); +-/* default ECAM ops */ +-extern struct pci_ecam_ops pci_generic_ecam_ops; +- +-#ifdef CONFIG_PCI_HOST_GENERIC +-/* for DT-based PCI controllers that support ECAM */ +-int pci_host_common_probe(struct platform_device *pdev, +- struct pci_ecam_ops *ops); +-#endif +-#endif +diff --git a/drivers/pci/host/pci-host-common.c b/drivers/pci/host/pci-host-common.c +index 8cba7ab..c18b9e3 100644 +--- a/drivers/pci/host/pci-host-common.c ++++ b/drivers/pci/host/pci-host-common.c +@@ -20,10 +20,9 @@ + #include + #include + #include ++#include + #include + +-#include "../ecam.h" +- + static int gen_pci_parse_request_of_pci_ranges(struct device *dev, + struct list_head *resources, struct resource **bus_range) + { +diff --git a/drivers/pci/host/pci-host-generic.c b/drivers/pci/host/pci-host-generic.c +index 6eaceab..f0ca6de 100644 +--- a/drivers/pci/host/pci-host-generic.c ++++ b/drivers/pci/host/pci-host-generic.c +@@ -23,10 +23,9 @@ + #include + #include + #include ++#include + #include + +-#include "../ecam.h" +- + static struct pci_ecam_ops gen_pci_cfg_cam_bus_ops = { + .bus_shift = 16, + .pci_ops = { +diff --git a/drivers/pci/host/pci-thunder-ecam.c b/drivers/pci/host/pci-thunder-ecam.c +index 540d030..a9fc1c9 100644 +--- a/drivers/pci/host/pci-thunder-ecam.c ++++ b/drivers/pci/host/pci-thunder-ecam.c +@@ -11,10 +11,9 @@ + #include + #include + #include ++#include + #include + +-#include "../ecam.h" +- + static void set_val(u32 v, int where, int size, u32 *val) + { + int shift = (where & 3) * 8; +diff --git a/drivers/pci/host/pci-thunder-pem.c b/drivers/pci/host/pci-thunder-pem.c +index 9b8ab94..5020d3d 100644 +--- a/drivers/pci/host/pci-thunder-pem.c ++++ b/drivers/pci/host/pci-thunder-pem.c +@@ -18,10 +18,9 @@ + #include + #include + #include ++#include + #include + +-#include "../ecam.h" +- + #define PEM_CFG_WR 0x28 + #define PEM_CFG_RD 0x30 + +diff --git a/include/linux/pci-ecam.h b/include/linux/pci-ecam.h +new file mode 100644 +index 0000000..9878beb +--- /dev/null ++++ b/include/linux/pci-ecam.h +@@ -0,0 +1,67 @@ ++/* ++ * Copyright 2016 Broadcom ++ * ++ * 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 (the "GPL"). ++ * ++ * This program is distributed in the hope that it will be useful, but ++ * WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * General Public License version 2 (GPLv2) for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * version 2 (GPLv2) along with this source code. ++ */ ++#ifndef DRIVERS_PCI_ECAM_H ++#define DRIVERS_PCI_ECAM_H ++ ++#include ++#include ++ ++/* ++ * struct to hold pci ops and bus shift of the config window ++ * for a PCI controller. ++ */ ++struct pci_config_window; ++struct pci_ecam_ops { ++ unsigned int bus_shift; ++ struct pci_ops pci_ops; ++ int (*init)(struct device *, ++ struct pci_config_window *); ++}; ++ ++/* ++ * struct to hold the mappings of a config space window. This ++ * is expected to be used as sysdata for PCI controllers that ++ * use ECAM. ++ */ ++struct pci_config_window { ++ struct resource res; ++ struct resource busr; ++ void *priv; ++ struct pci_ecam_ops *ops; ++ union { ++ void __iomem *win; /* 64-bit single mapping */ ++ void __iomem **winp; /* 32-bit per-bus mapping */ ++ }; ++}; ++ ++/* create and free pci_config_window */ ++struct pci_config_window *pci_ecam_create(struct device *dev, ++ struct resource *cfgres, struct resource *busr, ++ struct pci_ecam_ops *ops); ++void pci_ecam_free(struct pci_config_window *cfg); ++ ++/* map_bus when ->sysdata is an instance of pci_config_window */ ++void __iomem *pci_ecam_map_bus(struct pci_bus *bus, unsigned int devfn, ++ int where); ++/* default ECAM ops */ ++extern struct pci_ecam_ops pci_generic_ecam_ops; ++ ++#ifdef CONFIG_PCI_HOST_GENERIC ++/* for DT-based PCI controllers that support ECAM */ ++int pci_host_common_probe(struct platform_device *pdev, ++ struct pci_ecam_ops *ops); ++#endif ++#endif +-- +2.7.4 + +From 5eb9996fc097629854f359f9ad3d959fdacb7f8f Mon Sep 17 00:00:00 2001 +From: Jayachandran C +Date: Fri, 10 Jun 2016 21:55:10 +0200 +Subject: [PATCH 02/11] PCI/ECAM: Add parent device field to pci_config_window + +Add a parent device field to struct pci_config_window. The parent +is not saved now, but will be useful to save it in some cases. +Specifically in case of ACPI for ARM64, it can be used to setup +ACPI companion and domain. + +Since the parent dev is in struct pci_config_window now, we need +not pass it to the init function as a separate argument. + +Signed-off-by: Jayachandran C +Acked-by: Lorenzo Pieralisi +--- + drivers/pci/ecam.c | 3 ++- + drivers/pci/host/pci-thunder-pem.c | 3 ++- + include/linux/pci-ecam.h | 4 ++-- + 3 files changed, 6 insertions(+), 4 deletions(-) + +diff --git a/drivers/pci/ecam.c b/drivers/pci/ecam.c +index 820e26b..66e0d71 100644 +--- a/drivers/pci/ecam.c ++++ b/drivers/pci/ecam.c +@@ -51,6 +51,7 @@ struct pci_config_window *pci_ecam_create(struct device *dev, + if (!cfg) + return ERR_PTR(-ENOMEM); + ++ cfg->parent = dev; + cfg->ops = ops; + cfg->busr.start = busr->start; + cfg->busr.end = busr->end; +@@ -94,7 +95,7 @@ struct pci_config_window *pci_ecam_create(struct device *dev, + } + + if (ops->init) { +- err = ops->init(dev, cfg); ++ err = ops->init(cfg); + if (err) + goto err_exit; + } +diff --git a/drivers/pci/host/pci-thunder-pem.c b/drivers/pci/host/pci-thunder-pem.c +index 5020d3d..91f6fc6 100644 +--- a/drivers/pci/host/pci-thunder-pem.c ++++ b/drivers/pci/host/pci-thunder-pem.c +@@ -284,8 +284,9 @@ static int thunder_pem_config_write(struct pci_bus *bus, unsigned int devfn, + return pci_generic_config_write(bus, devfn, where, size, val); + } + +-static int thunder_pem_init(struct device *dev, struct pci_config_window *cfg) ++static int thunder_pem_init(struct pci_config_window *cfg) + { ++ struct device *dev = cfg->parent; + resource_size_t bar4_start; + struct resource *res_pem; + struct thunder_pem_pci *pem_pci; +diff --git a/include/linux/pci-ecam.h b/include/linux/pci-ecam.h +index 9878beb..7adad20 100644 +--- a/include/linux/pci-ecam.h ++++ b/include/linux/pci-ecam.h +@@ -27,8 +27,7 @@ struct pci_config_window; + struct pci_ecam_ops { + unsigned int bus_shift; + struct pci_ops pci_ops; +- int (*init)(struct device *, +- struct pci_config_window *); ++ int (*init)(struct pci_config_window *); + }; + + /* +@@ -45,6 +44,7 @@ struct pci_config_window { + void __iomem *win; /* 64-bit single mapping */ + void __iomem **winp; /* 32-bit per-bus mapping */ + }; ++ struct device *parent;/* ECAM res was from this dev */ + }; + + /* create and free pci_config_window */ +-- +2.7.4 + +From 6ed6c1365df5c9201e9b275e8ed4eaa64ef2ec0d Mon Sep 17 00:00:00 2001 +From: Sinan Kaya +Date: Fri, 10 Jun 2016 21:55:11 +0200 +Subject: [PATCH 03/11] PCI: Add new function to unmap IO resources + +We need to release I/O resources so that the same I/O resources +can be allocated again in pci_remap_iospace(), like in PCI hotplug removal +scenario. Therefore implement new pci_unmap_iospace() call which +unmaps I/O space as the symmetry to pci_remap_iospace(). + +Signed-off-by: Sinan Kaya +Signed-off-by: Tomasz Nowicki +Acked-by: Lorenzo Pieralisi +--- + drivers/pci/pci.c | 18 ++++++++++++++++++ + include/linux/pci.h | 1 + + 2 files changed, 19 insertions(+) + +diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c +index c8b4dbd..eb431b5 100644 +--- a/drivers/pci/pci.c ++++ b/drivers/pci/pci.c +@@ -25,6 +25,7 @@ + #include + #include + #include ++#include + #include + #include + #include "pci.h" +@@ -3165,6 +3166,23 @@ int __weak pci_remap_iospace(const struct resource *res, phys_addr_t phys_addr) + #endif + } + ++/** ++ * pci_unmap_iospace - Unmap the memory mapped I/O space ++ * @res: resource to be unmapped ++ * ++ * Unmap the CPU virtual address @res from virtual address space. ++ * Only architectures that have memory mapped IO functions defined ++ * (and the PCI_IOBASE value defined) should call this function. ++ */ ++void pci_unmap_iospace(struct resource *res) ++{ ++#if defined(PCI_IOBASE) && defined(CONFIG_MMU) ++ unsigned long vaddr = (unsigned long)PCI_IOBASE + res->start; ++ ++ unmap_kernel_range(vaddr, resource_size(res)); ++#endif ++} ++ + static void __pci_set_master(struct pci_dev *dev, bool enable) + { + u16 old_cmd, cmd; +diff --git a/include/linux/pci.h b/include/linux/pci.h +index b67e4df..12349de 100644 +--- a/include/linux/pci.h ++++ b/include/linux/pci.h +@@ -1167,6 +1167,7 @@ int pci_register_io_range(phys_addr_t addr, resource_size_t size); + unsigned long pci_address_to_pio(phys_addr_t addr); + phys_addr_t pci_pio_to_address(unsigned long pio); + int pci_remap_iospace(const struct resource *res, phys_addr_t phys_addr); ++void pci_unmap_iospace(struct resource *res); + + static inline pci_bus_addr_t pci_bus_address(struct pci_dev *pdev, int bar) + { +-- +2.7.4 + +From 62f4d54fc2d2882b9ebaa920189574f422e12207 Mon Sep 17 00:00:00 2001 +From: Jayachandran C +Date: Fri, 10 Jun 2016 21:55:12 +0200 +Subject: [PATCH 04/11] ACPI/PCI: Support IO resources when parsing PCI host + bridge resources + +Platforms that have memory mapped IO port (such as ARM64) need special +handling for PCI I/O resources. For host bridge's resource probing case +these resources need to be fixed up with +pci_register_io_range()/pci_remap_iospace() etc. + +The same I/O resources need to be released after hotplug +removal so that it can be re-added back by the pci_remap_iospace() +function during insertion. As a consequence unmap I/O resources +with pci_unmap_iospace() when we release host bridge resources. + +Signed-off-by: Jayachandran C +Signed-off-by: Sinan Kaya +[ Tomasz: merged in Sinan's patch to unmap IO resources properly, updated changelog] +Signed-off-by: Tomasz Nowicki +Reviewed-by: Lorenzo Pieralisi +--- + drivers/acpi/pci_root.c | 39 +++++++++++++++++++++++++++++++++++++++ + 1 file changed, 39 insertions(+) + +diff --git a/drivers/acpi/pci_root.c b/drivers/acpi/pci_root.c +index ae3fe4e..9a26dd1 100644 +--- a/drivers/acpi/pci_root.c ++++ b/drivers/acpi/pci_root.c +@@ -720,6 +720,40 @@ next: + } + } + ++#ifdef PCI_IOBASE ++static void acpi_pci_root_remap_iospace(struct resource_entry *entry) ++{ ++ struct resource *res = entry->res; ++ resource_size_t cpu_addr = res->start; ++ resource_size_t pci_addr = cpu_addr - entry->offset; ++ resource_size_t length = resource_size(res); ++ unsigned long port; ++ ++ if (pci_register_io_range(cpu_addr, length)) ++ goto err; ++ ++ port = pci_address_to_pio(cpu_addr); ++ if (port == (unsigned long)-1) ++ goto err; ++ ++ res->start = port; ++ res->end = port + length - 1; ++ entry->offset = port - pci_addr; ++ ++ if (pci_remap_iospace(res, cpu_addr) < 0) ++ goto err; ++ ++ pr_info("Remapped I/O %pa to %pR\n", &cpu_addr, res); ++ return; ++err: ++ res->flags |= IORESOURCE_DISABLED; ++} ++#else ++static inline void acpi_pci_root_remap_iospace(struct resource_entry *entry) ++{ ++} ++#endif ++ + int acpi_pci_probe_root_resources(struct acpi_pci_root_info *info) + { + int ret; +@@ -740,6 +774,9 @@ int acpi_pci_probe_root_resources(struct acpi_pci_root_info *info) + "no IO and memory resources present in _CRS\n"); + else { + resource_list_for_each_entry_safe(entry, tmp, list) { ++ if (entry->res->flags & IORESOURCE_IO) ++ acpi_pci_root_remap_iospace(entry); ++ + if (entry->res->flags & IORESOURCE_DISABLED) + resource_list_destroy_entry(entry); + else +@@ -811,6 +848,8 @@ static void acpi_pci_root_release_info(struct pci_host_bridge *bridge) + + resource_list_for_each_entry(entry, &bridge->windows) { + res = entry->res; ++ if (res->flags & IORESOURCE_IO) ++ pci_unmap_iospace(res); + if (res->parent && + (res->flags & (IORESOURCE_MEM | IORESOURCE_IO))) + release_resource(res); +-- +2.7.4 + +From dd4f7822d702cca83baa1de7a5f69344ffb82af9 Mon Sep 17 00:00:00 2001 +From: Tomasz Nowicki +Date: Fri, 10 Jun 2016 21:55:13 +0200 +Subject: [PATCH 05/11] ACPI/PCI: Add generic MCFG table handling + +According to PCI firmware specifications, on systems booting with ACPI, +PCI configuration for a host bridge must be set-up through the MCFG table +regions for non-hotpluggable bridges and _CBA method for hotpluggable ones. + +Current MCFG table handling code, as implemented for x86, cannot be +easily generalized owing to x86 specific quirks handling and related +code, which makes it hard to reuse on other architectures. + +In order to implement MCFG PCI configuration handling for new platforms +booting with ACPI (eg ARM64) this patch re-implements MCFG handling from +scratch in a streamlined fashion and provides (through a generic +interface available to all arches): + +- Simplified MCFG table parsing (executed through the pci_mmcfg_late_init() + hook as in current x86) +- MCFG regions look-up interface through domain:bus_start:bus_end tuple + +The new MCFG regions handling interface is added to generic ACPI code +so that existing architectures (eg x86) can be moved over to it and +architectures relying on MCFG for ACPI PCI config space can rely on it +without having to resort to arch specific implementations. + +Signed-off-by: Tomasz Nowicki +Signed-off-by: Jayachandran C +Reviewed-by: Lorenzo Pieralisi +--- + drivers/acpi/Kconfig | 3 ++ + drivers/acpi/Makefile | 1 + + drivers/acpi/pci_mcfg.c | 92 ++++++++++++++++++++++++++++++++++++++++++++++++ + include/linux/pci-acpi.h | 2 ++ + include/linux/pci.h | 2 +- + 5 files changed, 99 insertions(+), 1 deletion(-) + create mode 100644 drivers/acpi/pci_mcfg.c + +diff --git a/drivers/acpi/Kconfig b/drivers/acpi/Kconfig +index b7e2e77..f98c328 100644 +--- a/drivers/acpi/Kconfig ++++ b/drivers/acpi/Kconfig +@@ -217,6 +217,9 @@ config ACPI_PROCESSOR_IDLE + bool + select CPU_IDLE + ++config ACPI_MCFG ++ bool ++ + config ACPI_CPPC_LIB + bool + depends on ACPI_PROCESSOR +diff --git a/drivers/acpi/Makefile b/drivers/acpi/Makefile +index 251ce85..632e81f 100644 +--- a/drivers/acpi/Makefile ++++ b/drivers/acpi/Makefile +@@ -40,6 +40,7 @@ acpi-$(CONFIG_ARCH_MIGHT_HAVE_ACPI_PDC) += processor_pdc.o + acpi-y += ec.o + acpi-$(CONFIG_ACPI_DOCK) += dock.o + acpi-y += pci_root.o pci_link.o pci_irq.o ++obj-$(CONFIG_ACPI_MCFG) += pci_mcfg.o + acpi-y += acpi_lpss.o acpi_apd.o + acpi-y += acpi_platform.o + acpi-y += acpi_pnp.o +diff --git a/drivers/acpi/pci_mcfg.c b/drivers/acpi/pci_mcfg.c +new file mode 100644 +index 0000000..d3c3e85 +--- /dev/null ++++ b/drivers/acpi/pci_mcfg.c +@@ -0,0 +1,92 @@ ++/* ++ * Copyright (C) 2016 Broadcom ++ * Author: Jayachandran C ++ * Copyright (C) 2016 Semihalf ++ * Author: Tomasz Nowicki ++ * ++ * 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 (the "GPL"). ++ * ++ * This program is distributed in the hope that it will be useful, but ++ * WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * General Public License version 2 (GPLv2) for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * version 2 (GPLv2) along with this source code. ++ */ ++ ++#define pr_fmt(fmt) "ACPI: " fmt ++ ++#include ++#include ++#include ++ ++/* Structure to hold entries from the MCFG table */ ++struct mcfg_entry { ++ struct list_head list; ++ phys_addr_t addr; ++ u16 segment; ++ u8 bus_start; ++ u8 bus_end; ++}; ++ ++/* List to save mcfg entries */ ++static LIST_HEAD(pci_mcfg_list); ++ ++phys_addr_t pci_mcfg_lookup(u16 seg, struct resource *bus_res) ++{ ++ struct mcfg_entry *e; ++ ++ /* ++ * We expect exact match, unless MCFG entry end bus covers more than ++ * specified by caller. ++ */ ++ list_for_each_entry(e, &pci_mcfg_list, list) { ++ if (e->segment == seg && e->bus_start == bus_res->start && ++ e->bus_end >= bus_res->end) ++ return e->addr; ++ } ++ ++ return 0; ++} ++ ++static __init int pci_mcfg_parse(struct acpi_table_header *header) ++{ ++ struct acpi_table_mcfg *mcfg; ++ struct acpi_mcfg_allocation *mptr; ++ struct mcfg_entry *e, *arr; ++ int i, n; ++ ++ if (header->length < sizeof(struct acpi_table_mcfg)) ++ return -EINVAL; ++ ++ n = (header->length - sizeof(struct acpi_table_mcfg)) / ++ sizeof(struct acpi_mcfg_allocation); ++ mcfg = (struct acpi_table_mcfg *)header; ++ mptr = (struct acpi_mcfg_allocation *) &mcfg[1]; ++ ++ arr = kcalloc(n, sizeof(*arr), GFP_KERNEL); ++ if (!arr) ++ return -ENOMEM; ++ ++ for (i = 0, e = arr; i < n; i++, mptr++, e++) { ++ e->segment = mptr->pci_segment; ++ e->addr = mptr->address; ++ e->bus_start = mptr->start_bus_number; ++ e->bus_end = mptr->end_bus_number; ++ list_add(&e->list, &pci_mcfg_list); ++ } ++ ++ pr_info("MCFG table detected, %d entries\n", n); ++ return 0; ++} ++ ++/* Interface called by ACPI - parse and save MCFG table */ ++void __init pci_mmcfg_late_init(void) ++{ ++ int err = acpi_table_parse(ACPI_SIG_MCFG, pci_mcfg_parse); ++ if (err) ++ pr_err("Failed to parse MCFG (%d)\n", err); ++} +diff --git a/include/linux/pci-acpi.h b/include/linux/pci-acpi.h +index 89ab057..7d63a66 100644 +--- a/include/linux/pci-acpi.h ++++ b/include/linux/pci-acpi.h +@@ -24,6 +24,8 @@ static inline acpi_status pci_acpi_remove_pm_notifier(struct acpi_device *dev) + } + extern phys_addr_t acpi_pci_root_get_mcfg_addr(acpi_handle handle); + ++extern phys_addr_t pci_mcfg_lookup(u16 domain, struct resource *bus_res); ++ + static inline acpi_handle acpi_find_root_bridge_handle(struct pci_dev *pdev) + { + struct pci_bus *pbus = pdev->bus; +diff --git a/include/linux/pci.h b/include/linux/pci.h +index 12349de..ce03d65 100644 +--- a/include/linux/pci.h ++++ b/include/linux/pci.h +@@ -1723,7 +1723,7 @@ void pcibios_free_irq(struct pci_dev *dev); + extern struct dev_pm_ops pcibios_pm_ops; + #endif + +-#ifdef CONFIG_PCI_MMCONFIG ++#if defined(CONFIG_PCI_MMCONFIG) || defined(CONFIG_ACPI_MCFG) + void __init pci_mmcfg_early_init(void); + void __init pci_mmcfg_late_init(void); + #else +-- +2.7.4 + +From fc1907f9c79f9a0a0c2f4d579896e678915fec48 Mon Sep 17 00:00:00 2001 +From: Tomasz Nowicki +Date: Fri, 10 Jun 2016 21:55:14 +0200 +Subject: [PATCH 06/11] PCI: Refactor generic bus domain assignment + +Change the way PCI bus domain number is assigned and improve function +name to reflect what function does. No functional changes. + +Instead of assigning bus domain number inside of pci_bus_assign_domain_nr() +simply return domain number and let pci_create_root_bus() do assignment. +This way pci_create_root_bus() setups bus structure data in the consistent +way. Since pci_bus_assign_domain_nr() now does not assign but retrieves +domain number instead, rename it to pci_bus_find_domain_nr(). + +Signed-off-by: Tomasz Nowicki +Reviewed-by: Lorenzo Pieralisi +--- + drivers/pci/pci.c | 4 ++-- + drivers/pci/probe.c | 4 +++- + include/linux/pci.h | 7 +------ + 3 files changed, 6 insertions(+), 9 deletions(-) + +diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c +index eb431b5..b9a7833 100644 +--- a/drivers/pci/pci.c ++++ b/drivers/pci/pci.c +@@ -4941,7 +4941,7 @@ int pci_get_new_domain_nr(void) + } + + #ifdef CONFIG_PCI_DOMAINS_GENERIC +-void pci_bus_assign_domain_nr(struct pci_bus *bus, struct device *parent) ++int pci_bus_find_domain_nr(struct pci_bus *bus, struct device *parent) + { + static int use_dt_domains = -1; + int domain = -1; +@@ -4985,7 +4985,7 @@ void pci_bus_assign_domain_nr(struct pci_bus *bus, struct device *parent) + domain = -1; + } + +- bus->domain_nr = domain; ++ return domain; + } + #endif + #endif +diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c +index 8e3ef72..380d46d 100644 +--- a/drivers/pci/probe.c ++++ b/drivers/pci/probe.c +@@ -2127,7 +2127,9 @@ struct pci_bus *pci_create_root_bus(struct device *parent, int bus, + b->sysdata = sysdata; + b->ops = ops; + b->number = b->busn_res.start = bus; +- pci_bus_assign_domain_nr(b, parent); ++#ifdef CONFIG_PCI_DOMAINS_GENERIC ++ b->domain_nr = pci_bus_find_domain_nr(b, parent); ++#endif + b2 = pci_find_bus(pci_domain_nr(b), bus); + if (b2) { + /* If we already got to this bus through a different bridge, ignore it */ +diff --git a/include/linux/pci.h b/include/linux/pci.h +index ce03d65..48839e8 100644 +--- a/include/linux/pci.h ++++ b/include/linux/pci.h +@@ -1390,12 +1390,7 @@ static inline int pci_domain_nr(struct pci_bus *bus) + { + return bus->domain_nr; + } +-void pci_bus_assign_domain_nr(struct pci_bus *bus, struct device *parent); +-#else +-static inline void pci_bus_assign_domain_nr(struct pci_bus *bus, +- struct device *parent) +-{ +-} ++int pci_bus_find_domain_nr(struct pci_bus *bus, struct device *parent); + #endif + + /* some architectures require additional setup to direct VGA traffic */ +-- +2.7.4 + +From d6d45ae1d58658111d5e838c41b9ed4729bbb81e Mon Sep 17 00:00:00 2001 +From: Tomasz Nowicki +Date: Fri, 10 Jun 2016 21:55:15 +0200 +Subject: [PATCH 07/11] PCI: Factor DT specific pci_bus_find_domain_nr() code + out + +pci_bus_find_domain_nr() retrieves the host bridge domain number in a DT +specific way. Factor our pci_bus_find_domain_nr() in a separate DT +function (ie of_pci_bus_find_domain_nr()) so that DT code is self +contained, paving the way for retrieving domain number in +pci_bus_find_domain_nr() with additional firmware methods (ie ACPI). + +Signed-off-by: Tomasz Nowicki +Reviewed-by: Lorenzo Pieralisi +--- + drivers/pci/pci.c | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c +index b9a7833..97f7cd4 100644 +--- a/drivers/pci/pci.c ++++ b/drivers/pci/pci.c +@@ -4941,7 +4941,7 @@ int pci_get_new_domain_nr(void) + } + + #ifdef CONFIG_PCI_DOMAINS_GENERIC +-int pci_bus_find_domain_nr(struct pci_bus *bus, struct device *parent) ++static int of_pci_bus_find_domain_nr(struct device *parent) + { + static int use_dt_domains = -1; + int domain = -1; +@@ -4987,6 +4987,11 @@ int pci_bus_find_domain_nr(struct pci_bus *bus, struct device *parent) + + return domain; + } ++ ++int pci_bus_find_domain_nr(struct pci_bus *bus, struct device *parent) ++{ ++ return of_pci_bus_find_domain_nr(parent); ++} + #endif + #endif + +-- +2.7.4 + +From 92d59511fd365d3c0c31d074b5e96cf48c58f68b Mon Sep 17 00:00:00 2001 +From: Peter Robinson +Date: Thu, 30 Jun 2016 16:56:24 +0100 +Subject: [PATCH 08/11] ARM64/PCI: Add ACPI hook to assign domain number + +PCI core code provides a config option (CONFIG_PCI_DOMAINS_GENERIC) +that allows assigning the PCI bus domain number generically by +relying on device tree bindings, and falling back to a simple counter +when the respective DT properties (ie "linux,pci-domain") are not +specified in the host bridge device tree node. + +In a similar way, when a system is booted through ACPI, architectures +that are selecting CONFIG_PCI_DOMAINS_GENERIC (ie ARM64) require kernel +hooks to retrieve the domain number so that the PCI bus domain number +set-up can be handled seamlessly with DT and ACPI in generic core code +when CONFIG_PCI_DOMAINS_GENERIC is selected. + +Since currently it is not possible to retrieve a pointer to the PCI +host bridge ACPI device backing the host bridge from core PCI code +(which would allow retrieving the domain number in an arch agnostic +way through the ACPI _SEG method), an arch specific ACPI hook has to +be declared and implemented by all arches that rely on +CONFIG_PCI_DOMAINS_GENERIC to retrieve the domain number and set it +up in core PCI code. + +For the aforementioned reasons, introduce acpi_pci_bus_find_domain_nr() +hook to retrieve the domain number on a per-arch basis when the system +boots through ACPI. ARM64 dummy implementation of the same is provided +in first place in preparation for ARM64 ACPI based PCI host controller +driver. + +acpi_pci_bus_find_domain_nr() is called from generic +pci_bus_find_domain_nr() as an ACPI option to DT domain assignment. + +Signed-off-by: Tomasz Nowicki +Signed-off-by: Lorenzo Pieralisi +--- + arch/arm64/kernel/pci.c | 7 +++++++ + drivers/pci/pci.c | 4 +++- + include/linux/pci.h | 7 +++++++ + 3 files changed, 17 insertions(+), 1 deletion(-) + +diff --git a/arch/arm64/kernel/pci.c b/arch/arm64/kernel/pci.c +index 3c4e308..d5d3d26 100644 +--- a/arch/arm64/kernel/pci.c ++++ b/arch/arm64/kernel/pci.c +@@ -17,6 +17,7 @@ + #include + #include + #include ++#include + #include + + /* +@@ -85,6 +86,12 @@ EXPORT_SYMBOL(pcibus_to_node); + #endif + + #ifdef CONFIG_ACPI ++ ++int acpi_pci_bus_find_domain_nr(struct pci_bus *bus) ++{ ++ return 0; ++} ++ + /* Root bridge scanning */ + struct pci_bus *pci_acpi_scan_root(struct acpi_pci_root *root) + { +diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c +index 97f7cd4..4834cee 100644 +--- a/drivers/pci/pci.c ++++ b/drivers/pci/pci.c +@@ -7,6 +7,7 @@ + * Copyright 1997 -- 2000 Martin Mares + */ + ++#include + #include + #include + #include +@@ -4990,7 +4991,8 @@ static int of_pci_bus_find_domain_nr(struct device *parent) + + int pci_bus_find_domain_nr(struct pci_bus *bus, struct device *parent) + { +- return of_pci_bus_find_domain_nr(parent); ++ return acpi_disabled ? of_pci_bus_find_domain_nr(parent) : ++ acpi_pci_bus_find_domain_nr(bus); + } + #endif + #endif +diff --git a/include/linux/pci.h b/include/linux/pci.h +index 48839e8..49ba8af 100644 +--- a/include/linux/pci.h ++++ b/include/linux/pci.h +@@ -1390,6 +1390,13 @@ static inline int pci_domain_nr(struct pci_bus *bus) + { + return bus->domain_nr; + } ++/* Arch specific ACPI hook to set-up domain number */ ++#ifdef CONFIG_ACPI ++int acpi_pci_bus_find_domain_nr(struct pci_bus *bus); ++#else ++static inline int acpi_pci_bus_find_domain_nr(struct pci_bus *bus) ++{ return 0; } ++#endif + int pci_bus_find_domain_nr(struct pci_bus *bus, struct device *parent); + #endif + +-- +2.7.4 + +From bb06753d2e163d8100a017f06a6d9dd195d68a76 Mon Sep 17 00:00:00 2001 +From: Tomasz Nowicki +Date: Fri, 10 Jun 2016 21:55:17 +0200 +Subject: [PATCH 09/11] ARM64/PCI: ACPI support for legacy IRQs parsing and + consolidation with DT code + +To enable PCI legacy IRQs on platforms booting with ACPI, arch code +should include ACPI specific callbacks that parse and set-up the +device IRQ number, equivalent to the DT boot path. Owing to the current +ACPI core scan handlers implementation, ACPI PCI legacy IRQs bindings +cannot be parsed at device add time, since that would trigger ACPI scan +handlers ordering issues depending on how the ACPI tables are defined. + +To solve this problem and consolidate FW PCI legacy IRQs parsing in +one single pcibios callback (pending final removal), this patch moves +DT PCI IRQ parsing to the pcibios_alloc_irq() callback (called by +PCI core code at device probe time) and adds ACPI PCI legacy IRQs +parsing to the same callback too, so that FW PCI legacy IRQs parsing +is confined in one single arch callback that can be easily removed +when code parsing PCI legacy IRQs is consolidated and moved to core +PCI code. + +Signed-off-by: Tomasz Nowicki +Suggested-by: Lorenzo Pieralisi +--- + arch/arm64/kernel/pci.c | 11 ++++++++--- + 1 file changed, 8 insertions(+), 3 deletions(-) + +diff --git a/arch/arm64/kernel/pci.c b/arch/arm64/kernel/pci.c +index d5d3d26..b3b8a2c 100644 +--- a/arch/arm64/kernel/pci.c ++++ b/arch/arm64/kernel/pci.c +@@ -51,11 +51,16 @@ int pcibios_enable_device(struct pci_dev *dev, int mask) + } + + /* +- * Try to assign the IRQ number from DT when adding a new device ++ * Try to assign the IRQ number when probing a new device + */ +-int pcibios_add_device(struct pci_dev *dev) ++int pcibios_alloc_irq(struct pci_dev *dev) + { +- dev->irq = of_irq_parse_and_map_pci(dev, 0, 0); ++ if (acpi_disabled) ++ dev->irq = of_irq_parse_and_map_pci(dev, 0, 0); ++#ifdef CONFIG_ACPI ++ else ++ return acpi_pci_irq_enable(dev); ++#endif + + return 0; + } +-- +2.7.4 + +From b6e298840f532192a589f8ade128dec3fef3a4c6 Mon Sep 17 00:00:00 2001 +From: Tomasz Nowicki +Date: Fri, 10 Jun 2016 21:55:18 +0200 +Subject: [PATCH 10/11] ARM64/PCI: Implement ACPI low-level calls to access + PCI_Config region from AML + +ACPI spec6.1 - chapter: 5.5.2.4 defines OperationRegion (Declare Operation +Region). Following the spec: " [...] An Operation Region is a specific +region of operation within an address space that is declared as a subset +of the entire address space using a starting address (offset) and a length. +Control methods must have exclusive access to any address accessed via +fields declared in Operation Regions. [...]". + +OperationRegion allows to declare various of operation region address space +identifiers including PCI_Config. PCI_Config is meant to access PCI +configuration space from the ASL. So every time ASL opcode operates +on PCI_Config space region, ASL interpreter dispatches accesses to OS +low-level calls - raw_pci_write() and raw_pci_read() for Linux - so-called +ACPI RAW accessors. + +In order to support PCI_Config operation region, implement mentioned +raw_pci_write() and raw_pci_read() calls so they find associated bus +and call read/write ops. + +Waiting for clarification in the ACPI specifications in relation +to PCI_Config space handling before PCI bus enumeration is completed, +current code does not support PCI_Config region accesses before PCI bus +enumeration whilst providing full AML PCI_Config access availability +when the PCI bus enumeration is completed by the kernel so that +RAW accessors can look-up PCI operations through the struct pci_bus +associated with a PCI bus. + +Signed-off-by: Tomasz Nowicki +Signed-off-by: Jayachandran C +Reviewed-by: Lorenzo Pieralisi +--- + arch/arm64/kernel/pci.c | 12 ++++++++++-- + 1 file changed, 10 insertions(+), 2 deletions(-) + +diff --git a/arch/arm64/kernel/pci.c b/arch/arm64/kernel/pci.c +index b3b8a2c..328f857 100644 +--- a/arch/arm64/kernel/pci.c ++++ b/arch/arm64/kernel/pci.c +@@ -71,13 +71,21 @@ int pcibios_alloc_irq(struct pci_dev *dev) + int raw_pci_read(unsigned int domain, unsigned int bus, + unsigned int devfn, int reg, int len, u32 *val) + { +- return -ENXIO; ++ struct pci_bus *b = pci_find_bus(domain, bus); ++ ++ if (!b) ++ return PCIBIOS_DEVICE_NOT_FOUND; ++ return b->ops->read(b, devfn, reg, len, val); + } + + int raw_pci_write(unsigned int domain, unsigned int bus, + unsigned int devfn, int reg, int len, u32 val) + { +- return -ENXIO; ++ struct pci_bus *b = pci_find_bus(domain, bus); ++ ++ if (!b) ++ return PCIBIOS_DEVICE_NOT_FOUND; ++ return b->ops->write(b, devfn, reg, len, val); + } + + #ifdef CONFIG_NUMA +-- +2.7.4 + +From 3b8cff3fa89ba3ef6f1cf09a0667aa470b7fad0b Mon Sep 17 00:00:00 2001 +From: Tomasz Nowicki +Date: Fri, 10 Jun 2016 21:55:19 +0200 +Subject: [PATCH 11/11] ARM64/PCI: Support for ACPI based PCI host controller + +Implement pci_acpi_scan_root and other arch-specific call so that ARM64 +can start using ACPI to setup and enumerate PCI buses. + +Prior to buses enumeration the pci_acpi_scan_root() implementation looks +for configuration space start address (obtained through ACPI _CBA method or +MCFG interface). If succeed, it uses ECAM library to create new mapping. +Then it attaches generic ECAM ops (pci_generic_ecam_ops) which are used +for accessing configuration space later on. + +On ARM64, we need to use generic domains (CONFIG_PCI_DOMAINS_GENERIC). +In order to achieve that for ACPI case implement +acpi_pci_bus_find_domain_nr() body so that it retrieves pci_config_window +structure from bus sysdata and eventually gets domain number from +acpi_pci_root structure. + +ACPI requires to run acpi_pci_{add|remove}_bus while new PCI bus is created. +This allows to do some ACPI-specific additional configuration, like +PCI hotplug slot enumeration. In order to fulfill these requirements, +we implement arch-specific pcibios_{add|remove}_bus calls +and call acpi_pci_{add|remove}_bus from there. + +Signed-off-by: Tomasz Nowicki +Signed-off-by: Jayachandran C +Reviewed-by: Lorenzo Pieralisi +--- + arch/arm64/Kconfig | 2 + + arch/arm64/kernel/pci.c | 116 ++++++++++++++++++++++++++++++++++++++++++++++-- + 2 files changed, 115 insertions(+), 3 deletions(-) + +diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig +index 5a0a691..4806cde 100644 +--- a/arch/arm64/Kconfig ++++ b/arch/arm64/Kconfig +@@ -3,6 +3,7 @@ config ARM64 + select ACPI_CCA_REQUIRED if ACPI + select ACPI_GENERIC_GSI if ACPI + select ACPI_REDUCED_HARDWARE_ONLY if ACPI ++ select ACPI_MCFG if ACPI + select ARCH_HAS_DEVMEM_IS_ALLOWED + select ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE + select ARCH_HAS_ELF_RANDOMIZE +@@ -96,6 +97,7 @@ config ARM64 + select OF_EARLY_FLATTREE + select OF_NUMA if NUMA && OF + select OF_RESERVED_MEM ++ select PCI_ECAM if ACPI + select PERF_USE_VMALLOC + select POWER_RESET + select POWER_SUPPLY +diff --git a/arch/arm64/kernel/pci.c b/arch/arm64/kernel/pci.c +index 328f857..94cd43c 100644 +--- a/arch/arm64/kernel/pci.c ++++ b/arch/arm64/kernel/pci.c +@@ -18,6 +18,8 @@ + #include + #include + #include ++#include ++#include + #include + + /* +@@ -100,15 +102,123 @@ EXPORT_SYMBOL(pcibus_to_node); + + #ifdef CONFIG_ACPI + ++struct acpi_pci_generic_root_info { ++ struct acpi_pci_root_info common; ++ struct pci_config_window *cfg; /* config space mapping */ ++}; ++ + int acpi_pci_bus_find_domain_nr(struct pci_bus *bus) + { ++ struct pci_config_window *cfg = bus->sysdata; ++ struct acpi_device *adev = to_acpi_device(cfg->parent); ++ struct acpi_pci_root *root = acpi_driver_data(adev); ++ ++ return root->segment; ++} ++ ++int pcibios_root_bridge_prepare(struct pci_host_bridge *bridge) ++{ ++ if (!acpi_disabled) { ++ struct pci_config_window *cfg = bridge->bus->sysdata; ++ struct acpi_device *adev = to_acpi_device(cfg->parent); ++ ACPI_COMPANION_SET(&bridge->dev, adev); ++ } ++ + return 0; + } + +-/* Root bridge scanning */ ++/* ++ * Lookup the bus range for the domain in MCFG, and set up config space ++ * mapping. ++ */ ++static struct pci_config_window * ++pci_acpi_setup_ecam_mapping(struct acpi_pci_root *root) ++{ ++ struct resource *bus_res = &root->secondary; ++ u16 seg = root->segment; ++ struct pci_config_window *cfg; ++ struct resource cfgres; ++ unsigned int bsz; ++ ++ /* Use address from _CBA if present, otherwise lookup MCFG */ ++ if (!root->mcfg_addr) ++ root->mcfg_addr = pci_mcfg_lookup(seg, bus_res); ++ ++ if (!root->mcfg_addr) { ++ dev_err(&root->device->dev, "%04x:%pR ECAM region not found\n", ++ seg, bus_res); ++ return NULL; ++ } ++ ++ bsz = 1 << pci_generic_ecam_ops.bus_shift; ++ cfgres.start = root->mcfg_addr + bus_res->start * bsz; ++ cfgres.end = cfgres.start + resource_size(bus_res) * bsz - 1; ++ cfgres.flags = IORESOURCE_MEM; ++ cfg = pci_ecam_create(&root->device->dev, &cfgres, bus_res, ++ &pci_generic_ecam_ops); ++ if (IS_ERR(cfg)) { ++ dev_err(&root->device->dev, "%04x:%pR error %ld mapping ECAM\n", ++ seg, bus_res, PTR_ERR(cfg)); ++ return NULL; ++ } ++ ++ return cfg; ++} ++ ++/* release_info: free resources allocated by init_info */ ++static void pci_acpi_generic_release_info(struct acpi_pci_root_info *ci) ++{ ++ struct acpi_pci_generic_root_info *ri; ++ ++ ri = container_of(ci, struct acpi_pci_generic_root_info, common); ++ pci_ecam_free(ri->cfg); ++ kfree(ri); ++} ++ ++static struct acpi_pci_root_ops acpi_pci_root_ops = { ++ .release_info = pci_acpi_generic_release_info, ++}; ++ ++/* Interface called from ACPI code to setup PCI host controller */ + struct pci_bus *pci_acpi_scan_root(struct acpi_pci_root *root) + { +- /* TODO: Should be revisited when implementing PCI on ACPI */ +- return NULL; ++ int node = acpi_get_node(root->device->handle); ++ struct acpi_pci_generic_root_info *ri; ++ struct pci_bus *bus, *child; ++ ++ ri = kzalloc_node(sizeof(*ri), GFP_KERNEL, node); ++ if (!ri) ++ return NULL; ++ ++ ri->cfg = pci_acpi_setup_ecam_mapping(root); ++ if (!ri->cfg) { ++ kfree(ri); ++ return NULL; ++ } ++ ++ acpi_pci_root_ops.pci_ops = &ri->cfg->ops->pci_ops; ++ bus = acpi_pci_root_create(root, &acpi_pci_root_ops, &ri->common, ++ ri->cfg); ++ if (!bus) ++ return NULL; ++ ++ pci_bus_size_bridges(bus); ++ pci_bus_assign_resources(bus); ++ ++ list_for_each_entry(child, &bus->children, node) ++ pcie_bus_configure_settings(child); ++ ++ return bus; ++} ++ ++void pcibios_add_bus(struct pci_bus *bus) ++{ ++ acpi_pci_add_bus(bus); + } ++ ++void pcibios_remove_bus(struct pci_bus *bus) ++{ ++ acpi_pci_remove_bus(bus); ++} ++ + #endif +-- +2.7.4 + diff --git a/arm64-pcie-quirks-xgene.patch b/arm64-pcie-quirks-xgene.patch new file mode 100644 index 000000000..8e6805df6 --- /dev/null +++ b/arm64-pcie-quirks-xgene.patch @@ -0,0 +1,508 @@ +From 767b70aa55d013f0c7589955f410d488fed5776a Mon Sep 17 00:00:00 2001 +From: Peter Robinson +Date: Tue, 5 Jul 2016 23:49:39 +0100 +Subject: [PATCH 1/4] Some platforms may not be fully compliant with generic + set of PCI config accessors. For these cases we implement the way to + overwrite accessors set. Algorithm traverses available quirk list, matches + against tuple and returns + corresponding PCI config ops. oem_id and oem_table_id come from MCFG table + standard header. All quirks can be defined using DECLARE_ACPI_MCFG_FIXUP() + macro and kept self contained. Example: + +/* Custom PCI config ops */ +static struct pci_generic_ecam_ops foo_pci_ops = { + .bus_shift = 24, + .pci_ops = { + .map_bus = pci_ecam_map_bus, + .read = foo_ecam_config_read, + .write = foo_ecam_config_write, + } +}; + +DECLARE_ACPI_MCFG_FIXUP(&foo_pci_ops, , , , ); + +Signed-off-by: Tomasz Nowicki +Signed-off-by: Dongdong Liu +--- + drivers/acpi/pci_mcfg.c | 41 ++++++++++++++++++++++++++++++++++++--- + include/asm-generic/vmlinux.lds.h | 7 +++++++ + include/linux/pci-acpi.h | 20 +++++++++++++++++++ + 3 files changed, 65 insertions(+), 3 deletions(-) + +diff --git a/drivers/acpi/pci_mcfg.c b/drivers/acpi/pci_mcfg.c +index d3c3e85..deb0077 100644 +--- a/drivers/acpi/pci_mcfg.c ++++ b/drivers/acpi/pci_mcfg.c +@@ -22,6 +22,10 @@ + #include + #include + #include ++#include ++ ++/* Root pointer to the mapped MCFG table */ ++static struct acpi_table_mcfg *mcfg_table; + + /* Structure to hold entries from the MCFG table */ + struct mcfg_entry { +@@ -35,6 +39,38 @@ struct mcfg_entry { + /* List to save mcfg entries */ + static LIST_HEAD(pci_mcfg_list); + ++extern struct pci_cfg_fixup __start_acpi_mcfg_fixups[]; ++extern struct pci_cfg_fixup __end_acpi_mcfg_fixups[]; ++ ++struct pci_ecam_ops *pci_mcfg_get_ops(struct acpi_pci_root *root) ++{ ++ int bus_num = root->secondary.start; ++ int domain = root->segment; ++ struct pci_cfg_fixup *f; ++ ++ if (!mcfg_table) ++ return &pci_generic_ecam_ops; ++ ++ /* ++ * Match against platform specific quirks and return corresponding ++ * CAM ops. ++ * ++ * First match against PCI topology then use OEM ID and ++ * OEM revision from MCFG table standard header. ++ */ ++ for (f = __start_acpi_mcfg_fixups; f < __end_acpi_mcfg_fixups; f++) { ++ if ((f->domain == domain || f->domain == PCI_MCFG_DOMAIN_ANY) && ++ (f->bus_num == bus_num || f->bus_num == PCI_MCFG_BUS_ANY) && ++ (!strncmp(f->oem_id, mcfg_table->header.oem_id, ++ ACPI_OEM_ID_SIZE)) && ++ (!strncmp(f->oem_table_id, mcfg_table->header.oem_table_id, ++ ACPI_OEM_TABLE_ID_SIZE))) ++ return f->ops; ++ } ++ /* No quirks, use ECAM */ ++ return &pci_generic_ecam_ops; ++} ++ + phys_addr_t pci_mcfg_lookup(u16 seg, struct resource *bus_res) + { + struct mcfg_entry *e; +@@ -54,7 +90,6 @@ phys_addr_t pci_mcfg_lookup(u16 seg, struct resource *bus_res) + + static __init int pci_mcfg_parse(struct acpi_table_header *header) + { +- struct acpi_table_mcfg *mcfg; + struct acpi_mcfg_allocation *mptr; + struct mcfg_entry *e, *arr; + int i, n; +@@ -64,8 +99,8 @@ static __init int pci_mcfg_parse(struct acpi_table_header *header) + + n = (header->length - sizeof(struct acpi_table_mcfg)) / + sizeof(struct acpi_mcfg_allocation); +- mcfg = (struct acpi_table_mcfg *)header; +- mptr = (struct acpi_mcfg_allocation *) &mcfg[1]; ++ mcfg_table = (struct acpi_table_mcfg *)header; ++ mptr = (struct acpi_mcfg_allocation *) &mcfg_table[1]; + + arr = kcalloc(n, sizeof(*arr), GFP_KERNEL); + if (!arr) +diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h +index 6a67ab9..43604fc 100644 +--- a/include/asm-generic/vmlinux.lds.h ++++ b/include/asm-generic/vmlinux.lds.h +@@ -300,6 +300,13 @@ + VMLINUX_SYMBOL(__end_pci_fixups_suspend_late) = .; \ + } \ + \ ++ /* ACPI MCFG quirks */ \ ++ .acpi_fixup : AT(ADDR(.acpi_fixup) - LOAD_OFFSET) { \ ++ VMLINUX_SYMBOL(__start_acpi_mcfg_fixups) = .; \ ++ *(.acpi_fixup_mcfg) \ ++ VMLINUX_SYMBOL(__end_acpi_mcfg_fixups) = .; \ ++ } \ ++ \ + /* Built-in firmware blobs */ \ + .builtin_fw : AT(ADDR(.builtin_fw) - LOAD_OFFSET) { \ + VMLINUX_SYMBOL(__start_builtin_fw) = .; \ +diff --git a/include/linux/pci-acpi.h b/include/linux/pci-acpi.h +index 7d63a66..c8a6559 100644 +--- a/include/linux/pci-acpi.h ++++ b/include/linux/pci-acpi.h +@@ -25,6 +25,7 @@ static inline acpi_status pci_acpi_remove_pm_notifier(struct acpi_device *dev) + extern phys_addr_t acpi_pci_root_get_mcfg_addr(acpi_handle handle); + + extern phys_addr_t pci_mcfg_lookup(u16 domain, struct resource *bus_res); ++extern struct pci_ecam_ops *pci_mcfg_get_ops(struct acpi_pci_root *root); + + static inline acpi_handle acpi_find_root_bridge_handle(struct pci_dev *pdev) + { +@@ -72,6 +73,25 @@ struct acpi_pci_root_ops { + int (*prepare_resources)(struct acpi_pci_root_info *info); + }; + ++struct pci_cfg_fixup { ++ struct pci_ecam_ops *ops; ++ char *oem_id; ++ char *oem_table_id; ++ int domain; ++ int bus_num; ++}; ++ ++#define PCI_MCFG_DOMAIN_ANY -1 ++#define PCI_MCFG_BUS_ANY -1 ++ ++/* Designate a routine to fix up buggy MCFG */ ++#define DECLARE_ACPI_MCFG_FIXUP(ops, oem_id, oem_table_id, dom, bus) \ ++ static const struct pci_cfg_fixup \ ++ __mcfg_fixup_##oem_id##oem_table_id##dom##bus \ ++ __used __attribute__((__section__(".acpi_fixup_mcfg"), \ ++ aligned((sizeof(void *))))) = \ ++ { ops, oem_id, oem_table_id, dom, bus }; ++ + extern int acpi_pci_probe_root_resources(struct acpi_pci_root_info *info); + extern struct pci_bus *acpi_pci_root_create(struct acpi_pci_root *root, + struct acpi_pci_root_ops *ops, +-- +2.7.4 + +From 4f86a9b006b25dd7336043dab26058ed6fb2802d Mon Sep 17 00:00:00 2001 +From: Peter Robinson +Date: Tue, 5 Jul 2016 23:52:46 +0100 +Subject: [PATCH 2/4] pci_generic_ecam_ops is used by default. Since there are + platforms which have non-compliant ECAM space we need to overwrite these + accessors prior to PCI buses enumeration. In order to do that we call + pci_mcfg_get_ops to retrieve pci_ecam_ops structure so that we can use proper + PCI config space accessors and bus_shift. + +pci_generic_ecam_ops is still used for platforms free from quirks. + +Signed-off-by: Tomasz Nowicki +--- + arch/arm64/kernel/pci.c | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +diff --git a/arch/arm64/kernel/pci.c b/arch/arm64/kernel/pci.c +index 94cd43c..a891bda 100644 +--- a/arch/arm64/kernel/pci.c ++++ b/arch/arm64/kernel/pci.c +@@ -139,6 +139,7 @@ pci_acpi_setup_ecam_mapping(struct acpi_pci_root *root) + struct pci_config_window *cfg; + struct resource cfgres; + unsigned int bsz; ++ struct pci_ecam_ops *ops; + + /* Use address from _CBA if present, otherwise lookup MCFG */ + if (!root->mcfg_addr) +@@ -150,12 +151,12 @@ pci_acpi_setup_ecam_mapping(struct acpi_pci_root *root) + return NULL; + } + +- bsz = 1 << pci_generic_ecam_ops.bus_shift; ++ ops = pci_mcfg_get_ops(root); ++ bsz = 1 << ops->bus_shift; + cfgres.start = root->mcfg_addr + bus_res->start * bsz; + cfgres.end = cfgres.start + resource_size(bus_res) * bsz - 1; + cfgres.flags = IORESOURCE_MEM; +- cfg = pci_ecam_create(&root->device->dev, &cfgres, bus_res, +- &pci_generic_ecam_ops); ++ cfg = pci_ecam_create(&root->device->dev, &cfgres, bus_res, ops); + if (IS_ERR(cfg)) { + dev_err(&root->device->dev, "%04x:%pR error %ld mapping ECAM\n", + seg, bus_res, PTR_ERR(cfg)); +-- +2.7.4 + +From cbdbd697bd6d716eb9d1705ee55445432e73eabb Mon Sep 17 00:00:00 2001 +From: Peter Robinson +Date: Tue, 5 Jul 2016 23:53:59 +0100 +Subject: [PATCH 3/4] The ECAM quirk matching criteria per the discussion on + https://lkml.org/lkml/2016/6/13/944 includes: OEM ID, OEM Table ID and OEM + Revision. So this patch adds OEM Table ID into the check to match platform + specific ECAM quirks as well. + +This patch also improve strncmp check using strlen and +min_t to ignore the padding spaces in OEM ID and OEM +Table ID. + +Signed-off-by: Duc Dang +--- + drivers/acpi/pci_mcfg.c | 7 +++++-- + include/linux/pci-acpi.h | 7 ++++--- + 2 files changed, 9 insertions(+), 5 deletions(-) + +diff --git a/drivers/acpi/pci_mcfg.c b/drivers/acpi/pci_mcfg.c +index deb0077..307ca9a 100644 +--- a/drivers/acpi/pci_mcfg.c ++++ b/drivers/acpi/pci_mcfg.c +@@ -62,9 +62,12 @@ struct pci_ecam_ops *pci_mcfg_get_ops(struct acpi_pci_root *root) + if ((f->domain == domain || f->domain == PCI_MCFG_DOMAIN_ANY) && + (f->bus_num == bus_num || f->bus_num == PCI_MCFG_BUS_ANY) && + (!strncmp(f->oem_id, mcfg_table->header.oem_id, +- ACPI_OEM_ID_SIZE)) && ++ min_t(size_t, strlen(f->oem_id), ++ ACPI_OEM_ID_SIZE))) && + (!strncmp(f->oem_table_id, mcfg_table->header.oem_table_id, +- ACPI_OEM_TABLE_ID_SIZE))) ++ min_t(size_t, strlen(f->oem_table_id), ++ ACPI_OEM_TABLE_ID_SIZE))) && ++ (f->oem_revision == mcfg_table->header.oem_revision)) + return f->ops; + } + /* No quirks, use ECAM */ +diff --git a/include/linux/pci-acpi.h b/include/linux/pci-acpi.h +index c8a6559..5148c8d 100644 +--- a/include/linux/pci-acpi.h ++++ b/include/linux/pci-acpi.h +@@ -77,6 +77,7 @@ struct pci_cfg_fixup { + struct pci_ecam_ops *ops; + char *oem_id; + char *oem_table_id; ++ u32 oem_revision; + int domain; + int bus_num; + }; +@@ -85,12 +86,12 @@ struct pci_cfg_fixup { + #define PCI_MCFG_BUS_ANY -1 + + /* Designate a routine to fix up buggy MCFG */ +-#define DECLARE_ACPI_MCFG_FIXUP(ops, oem_id, oem_table_id, dom, bus) \ ++#define DECLARE_ACPI_MCFG_FIXUP(ops, oem_id, oem_table_id, rev, dom, bus) \ + static const struct pci_cfg_fixup \ +- __mcfg_fixup_##oem_id##oem_table_id##dom##bus \ ++ __mcfg_fixup_##oem_id##oem_table_id##rev##dom##bus \ + __used __attribute__((__section__(".acpi_fixup_mcfg"), \ + aligned((sizeof(void *))))) = \ +- { ops, oem_id, oem_table_id, dom, bus }; ++ { ops, oem_id, oem_table_id, rev, dom, bus }; + + extern int acpi_pci_probe_root_resources(struct acpi_pci_root_info *info); + extern struct pci_bus *acpi_pci_root_create(struct acpi_pci_root *root, +-- +2.7.4 + +From 78766cf255bc6aafac2f57372a0446f78322da19 Mon Sep 17 00:00:00 2001 +From: Peter Robinson +Date: Tue, 5 Jul 2016 23:55:11 +0100 +Subject: [PATCH 4/4] X-Gene PCIe controller does not fully support ECAM. This + patch adds required ECAM fixup to allow X-Gene PCIe controller to be + functional in ACPI boot mode. + +Signed-off-by: Duc Dang +--- + drivers/pci/host/Makefile | 2 +- + drivers/pci/host/pci-xgene-ecam.c | 194 ++++++++++++++++++++++++++++++++++++++ + 2 files changed, 195 insertions(+), 1 deletion(-) + create mode 100644 drivers/pci/host/pci-xgene-ecam.c + +diff --git a/drivers/pci/host/Makefile b/drivers/pci/host/Makefile +index 9c8698e..3480696 100644 +--- a/drivers/pci/host/Makefile ++++ b/drivers/pci/host/Makefile +@@ -14,7 +14,7 @@ obj-$(CONFIG_PCIE_SPEAR13XX) += pcie-spear13xx.o + obj-$(CONFIG_PCI_KEYSTONE) += pci-keystone-dw.o pci-keystone.o + obj-$(CONFIG_PCIE_XILINX) += pcie-xilinx.o + obj-$(CONFIG_PCIE_XILINX_NWL) += pcie-xilinx-nwl.o +-obj-$(CONFIG_PCI_XGENE) += pci-xgene.o ++obj-$(CONFIG_PCI_XGENE) += pci-xgene.o pci-xgene-ecam.o + obj-$(CONFIG_PCI_XGENE_MSI) += pci-xgene-msi.o + obj-$(CONFIG_PCI_LAYERSCAPE) += pci-layerscape.o + obj-$(CONFIG_PCI_VERSATILE) += pci-versatile.o +diff --git a/drivers/pci/host/pci-xgene-ecam.c b/drivers/pci/host/pci-xgene-ecam.c +new file mode 100644 +index 0000000..1bea63f +--- /dev/null ++++ b/drivers/pci/host/pci-xgene-ecam.c +@@ -0,0 +1,194 @@ ++/* ++ * APM X-Gene PCIe ECAM fixup driver ++ * ++ * Copyright (c) 2016, Applied Micro Circuits Corporation ++ * Author: ++ * Duc Dang ++ * ++ * 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. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program. If not, see . ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#ifdef CONFIG_ACPI ++#define RTDID 0x160 ++#define ROOT_CAP_AND_CTRL 0x5C ++ ++/* PCIe IP version */ ++#define XGENE_PCIE_IP_VER_UNKN 0 ++#define XGENE_PCIE_IP_VER_1 1 ++ ++#define APM_OEM_ID "APM" ++#define APM_XGENE_OEM_TABLE_ID "XGENE" ++#define APM_XGENE_OEM_REV 0x00000002 ++ ++struct xgene_pcie_acpi_root { ++ void __iomem *csr_base; ++ u32 version; ++}; ++ ++static acpi_status xgene_pcie_find_csr_base(struct acpi_resource *acpi_res, ++ void *data) ++{ ++ struct xgene_pcie_acpi_root *root = data; ++ struct acpi_resource_fixed_memory32 *fixed32; ++ ++ if (acpi_res->type == ACPI_RESOURCE_TYPE_FIXED_MEMORY32) { ++ fixed32 = &acpi_res->data.fixed_memory32; ++ root->csr_base = ioremap(fixed32->address, ++ fixed32->address_length); ++ return AE_CTRL_TERMINATE; ++ } ++ ++ return AE_OK; ++} ++ ++static int xgene_pcie_ecam_init(struct pci_config_window *cfg) ++{ ++ struct xgene_pcie_acpi_root *xgene_root; ++ struct device *dev = cfg->parent; ++ struct acpi_device *adev = to_acpi_device(dev); ++ acpi_handle handle = acpi_device_handle(adev); ++ ++ xgene_root = devm_kzalloc(dev, sizeof(*xgene_root), GFP_KERNEL); ++ if (!xgene_root) ++ return -ENOMEM; ++ ++ acpi_walk_resources(handle, METHOD_NAME__CRS, ++ xgene_pcie_find_csr_base, xgene_root); ++ ++ if (!xgene_root->csr_base) { ++ kfree(xgene_root); ++ return -ENODEV; ++ } ++ ++ xgene_root->version = XGENE_PCIE_IP_VER_1; ++ ++ cfg->priv = xgene_root; ++ ++ return 0; ++} ++ ++/* ++ * For Configuration request, RTDID register is used as Bus Number, ++ * Device Number and Function number of the header fields. ++ */ ++static void xgene_pcie_set_rtdid_reg(struct pci_bus *bus, uint devfn) ++{ ++ struct pci_config_window *cfg = bus->sysdata; ++ struct xgene_pcie_acpi_root *port = cfg->priv; ++ unsigned int b, d, f; ++ u32 rtdid_val = 0; ++ ++ b = bus->number; ++ d = PCI_SLOT(devfn); ++ f = PCI_FUNC(devfn); ++ ++ if (!pci_is_root_bus(bus)) ++ rtdid_val = (b << 8) | (d << 3) | f; ++ ++ writel(rtdid_val, port->csr_base + RTDID); ++ /* read the register back to ensure flush */ ++ readl(port->csr_base + RTDID); ++} ++ ++/* ++ * X-Gene PCIe port uses BAR0-BAR1 of RC's configuration space as ++ * the translation from PCI bus to native BUS. Entire DDR region ++ * is mapped into PCIe space using these registers, so it can be ++ * reached by DMA from EP devices. The BAR0/1 of bridge should be ++ * hidden during enumeration to avoid the sizing and resource allocation ++ * by PCIe core. ++ */ ++static bool xgene_pcie_hide_rc_bars(struct pci_bus *bus, int offset) ++{ ++ if (pci_is_root_bus(bus) && ((offset == PCI_BASE_ADDRESS_0) || ++ (offset == PCI_BASE_ADDRESS_1))) ++ return true; ++ ++ return false; ++} ++ ++void __iomem *xgene_pcie_ecam_map_bus(struct pci_bus *bus, ++ unsigned int devfn, int where) ++{ ++ struct pci_config_window *cfg = bus->sysdata; ++ unsigned int busn = bus->number; ++ void __iomem *base; ++ ++ if (busn < cfg->busr.start || busn > cfg->busr.end) ++ return NULL; ++ ++ if ((pci_is_root_bus(bus) && devfn != 0) || ++ xgene_pcie_hide_rc_bars(bus, where)) ++ return NULL; ++ ++ xgene_pcie_set_rtdid_reg(bus, devfn); ++ ++ if (busn > cfg->busr.start) ++ base = cfg->win + (1 << cfg->ops->bus_shift); ++ else ++ base = cfg->win; ++ ++ return base + where; ++} ++ ++static int xgene_pcie_config_read32(struct pci_bus *bus, unsigned int devfn, ++ int where, int size, u32 *val) ++{ ++ struct pci_config_window *cfg = bus->sysdata; ++ struct xgene_pcie_acpi_root *port = cfg->priv; ++ ++ if (pci_generic_config_read32(bus, devfn, where & ~0x3, 4, val) != ++ PCIBIOS_SUCCESSFUL) ++ return PCIBIOS_DEVICE_NOT_FOUND; ++ ++ /* ++ * The v1 controller has a bug in its Configuration Request ++ * Retry Status (CRS) logic: when CRS is enabled and we read the ++ * Vendor and Device ID of a non-existent device, the controller ++ * fabricates return data of 0xFFFF0001 ("device exists but is not ++ * ready") instead of 0xFFFFFFFF ("device does not exist"). This ++ * causes the PCI core to retry the read until it times out. ++ * Avoid this by not claiming to support CRS. ++ */ ++ if (pci_is_root_bus(bus) && (port->version == XGENE_PCIE_IP_VER_1) && ++ ((where & ~0x3) == ROOT_CAP_AND_CTRL)) ++ *val &= ~(PCI_EXP_RTCAP_CRSVIS << 16); ++ ++ if (size <= 2) ++ *val = (*val >> (8 * (where & 3))) & ((1 << (size * 8)) - 1); ++ ++ return PCIBIOS_SUCCESSFUL; ++} ++ ++static struct pci_ecam_ops xgene_pcie_ecam_ops = { ++ .bus_shift = 16, ++ .init = xgene_pcie_ecam_init, ++ .pci_ops = { ++ .map_bus = xgene_pcie_ecam_map_bus, ++ .read = xgene_pcie_config_read32, ++ .write = pci_generic_config_write, ++ } ++}; ++ ++DECLARE_ACPI_MCFG_FIXUP(&xgene_pcie_ecam_ops, APM_OEM_ID, ++ APM_XGENE_OEM_TABLE_ID, APM_XGENE_OEM_REV, ++ PCI_MCFG_DOMAIN_ANY, PCI_MCFG_BUS_ANY); ++#endif +-- +2.7.4 + diff --git a/audit-fix-a-double-fetch-in-audit_log_single_execve_arg.patch b/audit-fix-a-double-fetch-in-audit_log_single_execve_arg.patch deleted file mode 100644 index 6ee750466..000000000 --- a/audit-fix-a-double-fetch-in-audit_log_single_execve_arg.patch +++ /dev/null @@ -1,413 +0,0 @@ -From 43761473c254b45883a64441dd0bc85a42f3645c Mon Sep 17 00:00:00 2001 -From: Paul Moore -Date: Tue, 19 Jul 2016 17:42:57 -0400 -Subject: [PATCH] audit: fix a double fetch in audit_log_single_execve_arg() - -There is a double fetch problem in audit_log_single_execve_arg() -where we first check the execve(2) argumnets for any "bad" characters -which would require hex encoding and then re-fetch the arguments for -logging in the audit record[1]. Of course this leaves a window of -opportunity for an unsavory application to munge with the data. - -This patch reworks things by only fetching the argument data once[2] -into a buffer where it is scanned and logged into the audit -records(s). In addition to fixing the double fetch, this patch -improves on the original code in a few other ways: better handling -of large arguments which require encoding, stricter record length -checking, and some performance improvements (completely unverified, -but we got rid of some strlen() calls, that's got to be a good -thing). - -As part of the development of this patch, I've also created a basic -regression test for the audit-testsuite, the test can be tracked on -GitHub at the following link: - - * https://github.com/linux-audit/audit-testsuite/issues/25 - -[1] If you pay careful attention, there is actually a triple fetch -problem due to a strnlen_user() call at the top of the function. - -[2] This is a tiny white lie, we do make a call to strnlen_user() -prior to fetching the argument data. I don't like it, but due to the -way the audit record is structured we really have no choice unless we -copy the entire argument at once (which would require a rather -wasteful allocation). The good news is that with this patch the -kernel no longer relies on this strnlen_user() value for anything -beyond recording it in the log, we also update it with a trustworthy -value whenever possible. - -Reported-by: Pengfei Wang -Cc: -Signed-off-by: Paul Moore ---- - kernel/auditsc.c | 332 +++++++++++++++++++++++++++---------------------------- - 1 file changed, 164 insertions(+), 168 deletions(-) - -diff --git a/kernel/auditsc.c b/kernel/auditsc.c -index aa3feec..c65af21 100644 ---- a/kernel/auditsc.c -+++ b/kernel/auditsc.c -@@ -73,6 +73,7 @@ - #include - #include - #include -+#include - #include - - #include "audit.h" -@@ -82,7 +83,8 @@ - #define AUDITSC_SUCCESS 1 - #define AUDITSC_FAILURE 2 - --/* no execve audit message should be longer than this (userspace limits) */ -+/* no execve audit message should be longer than this (userspace limits), -+ * see the note near the top of audit_log_execve_info() about this value */ - #define MAX_EXECVE_AUDIT_LEN 7500 - - /* max length to print of cmdline/proctitle value during audit */ -@@ -992,184 +994,178 @@ static int audit_log_pid_context(struct audit_context *context, pid_t pid, - return rc; - } - --/* -- * to_send and len_sent accounting are very loose estimates. We aren't -- * really worried about a hard cap to MAX_EXECVE_AUDIT_LEN so much as being -- * within about 500 bytes (next page boundary) -- * -- * why snprintf? an int is up to 12 digits long. if we just assumed when -- * logging that a[%d]= was going to be 16 characters long we would be wasting -- * space in every audit message. In one 7500 byte message we can log up to -- * about 1000 min size arguments. That comes down to about 50% waste of space -- * if we didn't do the snprintf to find out how long arg_num_len was. -- */ --static int audit_log_single_execve_arg(struct audit_context *context, -- struct audit_buffer **ab, -- int arg_num, -- size_t *len_sent, -- const char __user *p, -- char *buf) -+static void audit_log_execve_info(struct audit_context *context, -+ struct audit_buffer **ab) - { -- char arg_num_len_buf[12]; -- const char __user *tmp_p = p; -- /* how many digits are in arg_num? 5 is the length of ' a=""' */ -- size_t arg_num_len = snprintf(arg_num_len_buf, 12, "%d", arg_num) + 5; -- size_t len, len_left, to_send; -- size_t max_execve_audit_len = MAX_EXECVE_AUDIT_LEN; -- unsigned int i, has_cntl = 0, too_long = 0; -- int ret; -- -- /* strnlen_user includes the null we don't want to send */ -- len_left = len = strnlen_user(p, MAX_ARG_STRLEN) - 1; -- -- /* -- * We just created this mm, if we can't find the strings -- * we just copied into it something is _very_ wrong. Similar -- * for strings that are too long, we should not have created -- * any. -- */ -- if (WARN_ON_ONCE(len < 0 || len > MAX_ARG_STRLEN - 1)) { -- send_sig(SIGKILL, current, 0); -- return -1; -+ long len_max; -+ long len_rem; -+ long len_full; -+ long len_buf; -+ long len_abuf; -+ long len_tmp; -+ bool require_data; -+ bool encode; -+ unsigned int iter; -+ unsigned int arg; -+ char *buf_head; -+ char *buf; -+ const char __user *p = (const char __user *)current->mm->arg_start; -+ -+ /* NOTE: this buffer needs to be large enough to hold all the non-arg -+ * data we put in the audit record for this argument (see the -+ * code below) ... at this point in time 96 is plenty */ -+ char abuf[96]; -+ -+ /* NOTE: we set MAX_EXECVE_AUDIT_LEN to a rather arbitrary limit, the -+ * current value of 7500 is not as important as the fact that it -+ * is less than 8k, a setting of 7500 gives us plenty of wiggle -+ * room if we go over a little bit in the logging below */ -+ WARN_ON_ONCE(MAX_EXECVE_AUDIT_LEN > 7500); -+ len_max = MAX_EXECVE_AUDIT_LEN; -+ -+ /* scratch buffer to hold the userspace args */ -+ buf_head = kmalloc(MAX_EXECVE_AUDIT_LEN + 1, GFP_KERNEL); -+ if (!buf_head) { -+ audit_panic("out of memory for argv string"); -+ return; - } -+ buf = buf_head; - -- /* walk the whole argument looking for non-ascii chars */ -+ audit_log_format(*ab, "argc=%d", context->execve.argc); -+ -+ len_rem = len_max; -+ len_buf = 0; -+ len_full = 0; -+ require_data = true; -+ encode = false; -+ iter = 0; -+ arg = 0; - do { -- if (len_left > MAX_EXECVE_AUDIT_LEN) -- to_send = MAX_EXECVE_AUDIT_LEN; -- else -- to_send = len_left; -- ret = copy_from_user(buf, tmp_p, to_send); -- /* -- * There is no reason for this copy to be short. We just -- * copied them here, and the mm hasn't been exposed to user- -- * space yet. -- */ -- if (ret) { -- WARN_ON(1); -- send_sig(SIGKILL, current, 0); -- return -1; -- } -- buf[to_send] = '\0'; -- has_cntl = audit_string_contains_control(buf, to_send); -- if (has_cntl) { -- /* -- * hex messages get logged as 2 bytes, so we can only -- * send half as much in each message -- */ -- max_execve_audit_len = MAX_EXECVE_AUDIT_LEN / 2; -- break; -- } -- len_left -= to_send; -- tmp_p += to_send; -- } while (len_left > 0); -- -- len_left = len; -- -- if (len > max_execve_audit_len) -- too_long = 1; -- -- /* rewalk the argument actually logging the message */ -- for (i = 0; len_left > 0; i++) { -- int room_left; -- -- if (len_left > max_execve_audit_len) -- to_send = max_execve_audit_len; -- else -- to_send = len_left; -- -- /* do we have space left to send this argument in this ab? */ -- room_left = MAX_EXECVE_AUDIT_LEN - arg_num_len - *len_sent; -- if (has_cntl) -- room_left -= (to_send * 2); -- else -- room_left -= to_send; -- if (room_left < 0) { -- *len_sent = 0; -- audit_log_end(*ab); -- *ab = audit_log_start(context, GFP_KERNEL, AUDIT_EXECVE); -- if (!*ab) -- return 0; -- } -+ /* NOTE: we don't ever want to trust this value for anything -+ * serious, but the audit record format insists we -+ * provide an argument length for really long arguments, -+ * e.g. > MAX_EXECVE_AUDIT_LEN, so we have no choice but -+ * to use strncpy_from_user() to obtain this value for -+ * recording in the log, although we don't use it -+ * anywhere here to avoid a double-fetch problem */ -+ if (len_full == 0) -+ len_full = strnlen_user(p, MAX_ARG_STRLEN) - 1; -+ -+ /* read more data from userspace */ -+ if (require_data) { -+ /* can we make more room in the buffer? */ -+ if (buf != buf_head) { -+ memmove(buf_head, buf, len_buf); -+ buf = buf_head; -+ } -+ -+ /* fetch as much as we can of the argument */ -+ len_tmp = strncpy_from_user(&buf_head[len_buf], p, -+ len_max - len_buf); -+ if (len_tmp == -EFAULT) { -+ /* unable to copy from userspace */ -+ send_sig(SIGKILL, current, 0); -+ goto out; -+ } else if (len_tmp == (len_max - len_buf)) { -+ /* buffer is not large enough */ -+ require_data = true; -+ /* NOTE: if we are going to span multiple -+ * buffers force the encoding so we stand -+ * a chance at a sane len_full value and -+ * consistent record encoding */ -+ encode = true; -+ len_full = len_full * 2; -+ p += len_tmp; -+ } else { -+ require_data = false; -+ if (!encode) -+ encode = audit_string_contains_control( -+ buf, len_tmp); -+ /* try to use a trusted value for len_full */ -+ if (len_full < len_max) -+ len_full = (encode ? -+ len_tmp * 2 : len_tmp); -+ p += len_tmp + 1; -+ } -+ len_buf += len_tmp; -+ buf_head[len_buf] = '\0'; - -- /* -- * first record needs to say how long the original string was -- * so we can be sure nothing was lost. -- */ -- if ((i == 0) && (too_long)) -- audit_log_format(*ab, " a%d_len=%zu", arg_num, -- has_cntl ? 2*len : len); -- -- /* -- * normally arguments are small enough to fit and we already -- * filled buf above when we checked for control characters -- * so don't bother with another copy_from_user -- */ -- if (len >= max_execve_audit_len) -- ret = copy_from_user(buf, p, to_send); -- else -- ret = 0; -- if (ret) { -- WARN_ON(1); -- send_sig(SIGKILL, current, 0); -- return -1; -+ /* length of the buffer in the audit record? */ -+ len_abuf = (encode ? len_buf * 2 : len_buf + 2); - } -- buf[to_send] = '\0'; -- -- /* actually log it */ -- audit_log_format(*ab, " a%d", arg_num); -- if (too_long) -- audit_log_format(*ab, "[%d]", i); -- audit_log_format(*ab, "="); -- if (has_cntl) -- audit_log_n_hex(*ab, buf, to_send); -- else -- audit_log_string(*ab, buf); -- -- p += to_send; -- len_left -= to_send; -- *len_sent += arg_num_len; -- if (has_cntl) -- *len_sent += to_send * 2; -- else -- *len_sent += to_send; -- } -- /* include the null we didn't log */ -- return len + 1; --} - --static void audit_log_execve_info(struct audit_context *context, -- struct audit_buffer **ab) --{ -- int i, len; -- size_t len_sent = 0; -- const char __user *p; -- char *buf; -+ /* write as much as we can to the audit log */ -+ if (len_buf > 0) { -+ /* NOTE: some magic numbers here - basically if we -+ * can't fit a reasonable amount of data into the -+ * existing audit buffer, flush it and start with -+ * a new buffer */ -+ if ((sizeof(abuf) + 8) > len_rem) { -+ len_rem = len_max; -+ audit_log_end(*ab); -+ *ab = audit_log_start(context, -+ GFP_KERNEL, AUDIT_EXECVE); -+ if (!*ab) -+ goto out; -+ } - -- p = (const char __user *)current->mm->arg_start; -+ /* create the non-arg portion of the arg record */ -+ len_tmp = 0; -+ if (require_data || (iter > 0) || -+ ((len_abuf + sizeof(abuf)) > len_rem)) { -+ if (iter == 0) { -+ len_tmp += snprintf(&abuf[len_tmp], -+ sizeof(abuf) - len_tmp, -+ " a%d_len=%lu", -+ arg, len_full); -+ } -+ len_tmp += snprintf(&abuf[len_tmp], -+ sizeof(abuf) - len_tmp, -+ " a%d[%d]=", arg, iter++); -+ } else -+ len_tmp += snprintf(&abuf[len_tmp], -+ sizeof(abuf) - len_tmp, -+ " a%d=", arg); -+ WARN_ON(len_tmp >= sizeof(abuf)); -+ abuf[sizeof(abuf) - 1] = '\0'; -+ -+ /* log the arg in the audit record */ -+ audit_log_format(*ab, "%s", abuf); -+ len_rem -= len_tmp; -+ len_tmp = len_buf; -+ if (encode) { -+ if (len_abuf > len_rem) -+ len_tmp = len_rem / 2; /* encoding */ -+ audit_log_n_hex(*ab, buf, len_tmp); -+ len_rem -= len_tmp * 2; -+ len_abuf -= len_tmp * 2; -+ } else { -+ if (len_abuf > len_rem) -+ len_tmp = len_rem - 2; /* quotes */ -+ audit_log_n_string(*ab, buf, len_tmp); -+ len_rem -= len_tmp + 2; -+ /* don't subtract the "2" because we still need -+ * to add quotes to the remaining string */ -+ len_abuf -= len_tmp; -+ } -+ len_buf -= len_tmp; -+ buf += len_tmp; -+ } - -- audit_log_format(*ab, "argc=%d", context->execve.argc); -+ /* ready to move to the next argument? */ -+ if ((len_buf == 0) && !require_data) { -+ arg++; -+ iter = 0; -+ len_full = 0; -+ require_data = true; -+ encode = false; -+ } -+ } while (arg < context->execve.argc); - -- /* -- * we need some kernel buffer to hold the userspace args. Just -- * allocate one big one rather than allocating one of the right size -- * for every single argument inside audit_log_single_execve_arg() -- * should be <8k allocation so should be pretty safe. -- */ -- buf = kmalloc(MAX_EXECVE_AUDIT_LEN + 1, GFP_KERNEL); -- if (!buf) { -- audit_panic("out of memory for argv string"); -- return; -- } -+ /* NOTE: the caller handles the final audit_log_end() call */ - -- for (i = 0; i < context->execve.argc; i++) { -- len = audit_log_single_execve_arg(context, ab, i, -- &len_sent, p, buf); -- if (len <= 0) -- break; -- p += len; -- } -- kfree(buf); -+out: -+ kfree(buf_head); - } - - static void show_special(struct audit_context *context, int *call_panic) diff --git a/bcm283x-upstream-fixes.patch b/bcm283x-upstream-fixes.patch index d8bb87ca0..c5ee31784 100644 --- a/bcm283x-upstream-fixes.patch +++ b/bcm283x-upstream-fixes.patch @@ -1,209 +1,3 @@ -From 41135d2ce60509e53306e5b76afab98ddc15951b Mon Sep 17 00:00:00 2001 -From: Eric Anholt -Date: Mon, 2 Mar 2015 14:36:16 -0800 -Subject: [PATCH 26/36] ARM: bcm2835: Add VC4 to the device tree. - -VC4 is the GPU (display and 3D) present on the 283x. - -v2: Sort by register address, mark HDMI as disabled by default in the - SoC file and enable it from -rpi. -v3: Add references to the pixel/HSM clocks for HDMI. Rename - compatibility strings and clean up node names. -v4: Fix comment marking pv0's interrupt as pwa2 instead of pwa0. - Rename hpd-gpio to hpd-gpios. -v5: Rebase on bcm283x.dtsi change, add v3d. -v6: Make HDMI reference the power domain. -v7: Fix the HDMI HPD gpios active value and HDMI enable for each RPI - board. Change V3D compatible string to 2835. - -Signed-off-by: Eric Anholt ---- - arch/arm/boot/dts/bcm2835-rpi-a-plus.dts | 4 +++ - arch/arm/boot/dts/bcm2835-rpi-a.dts | 4 +++ - arch/arm/boot/dts/bcm2835-rpi-b-plus.dts | 4 +++ - arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts | 4 +++ - arch/arm/boot/dts/bcm2835-rpi-b.dts | 4 +++ - arch/arm/boot/dts/bcm2835-rpi.dtsi | 9 ++++++ - arch/arm/boot/dts/bcm2836-rpi-2-b.dts | 4 +++ - arch/arm/boot/dts/bcm283x.dtsi | 47 ++++++++++++++++++++++++++++++++ - 8 files changed, 80 insertions(+) - -diff --git a/arch/arm/boot/dts/bcm2835-rpi-a-plus.dts b/arch/arm/boot/dts/bcm2835-rpi-a-plus.dts -index 228614f..35ff4e7a 100644 ---- a/arch/arm/boot/dts/bcm2835-rpi-a-plus.dts -+++ b/arch/arm/boot/dts/bcm2835-rpi-a-plus.dts -@@ -29,3 +29,7 @@ - brcm,function = ; - }; - }; -+ -+&hdmi { -+ hpd-gpios = <&gpio 46 GPIO_ACTIVE_LOW>; -+}; -diff --git a/arch/arm/boot/dts/bcm2835-rpi-a.dts b/arch/arm/boot/dts/bcm2835-rpi-a.dts -index ddbbbbd..306a84e 100644 ---- a/arch/arm/boot/dts/bcm2835-rpi-a.dts -+++ b/arch/arm/boot/dts/bcm2835-rpi-a.dts -@@ -22,3 +22,7 @@ - brcm,function = ; - }; - }; -+ -+&hdmi { -+ hpd-gpios = <&gpio 46 GPIO_ACTIVE_HIGH>; -+}; -diff --git a/arch/arm/boot/dts/bcm2835-rpi-b-plus.dts b/arch/arm/boot/dts/bcm2835-rpi-b-plus.dts -index ef54050..57d313b 100644 ---- a/arch/arm/boot/dts/bcm2835-rpi-b-plus.dts -+++ b/arch/arm/boot/dts/bcm2835-rpi-b-plus.dts -@@ -29,3 +29,7 @@ - brcm,function = ; - }; - }; -+ -+&hdmi { -+ hpd-gpios = <&gpio 46 GPIO_ACTIVE_LOW>; -+}; -diff --git a/arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts b/arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts -index 86f1f2f..cf2774e 100644 ---- a/arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts -+++ b/arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts -@@ -22,3 +22,7 @@ - brcm,function = ; - }; - }; -+ -+&hdmi { -+ hpd-gpios = <&gpio 46 GPIO_ACTIVE_LOW>; -+}; -diff --git a/arch/arm/boot/dts/bcm2835-rpi-b.dts b/arch/arm/boot/dts/bcm2835-rpi-b.dts -index 4859e9d..8b15f9c 100644 ---- a/arch/arm/boot/dts/bcm2835-rpi-b.dts -+++ b/arch/arm/boot/dts/bcm2835-rpi-b.dts -@@ -16,3 +16,7 @@ - &gpio { - pinctrl-0 = <&gpioout &alt0 &alt3>; - }; -+ -+&hdmi { -+ hpd-gpios = <&gpio 46 GPIO_ACTIVE_HIGH>; -+}; -diff --git a/arch/arm/boot/dts/bcm2835-rpi.dtsi b/arch/arm/boot/dts/bcm2835-rpi.dtsi -index 76bdbca..caf2707 100644 ---- a/arch/arm/boot/dts/bcm2835-rpi.dtsi -+++ b/arch/arm/boot/dts/bcm2835-rpi.dtsi -@@ -74,3 +74,12 @@ - &usb { - power-domains = <&power RPI_POWER_DOMAIN_USB>; - }; -+ -+&v3d { -+ power-domains = <&power RPI_POWER_DOMAIN_V3D>; -+}; -+ -+&hdmi { -+ power-domains = <&power RPI_POWER_DOMAIN_HDMI>; -+ status = "okay"; -+}; -diff --git a/arch/arm/boot/dts/bcm2836-rpi-2-b.dts b/arch/arm/boot/dts/bcm2836-rpi-2-b.dts -index ff94666..c4743f4 100644 ---- a/arch/arm/boot/dts/bcm2836-rpi-2-b.dts -+++ b/arch/arm/boot/dts/bcm2836-rpi-2-b.dts -@@ -33,3 +33,7 @@ - brcm,function = ; - }; - }; -+ -+&hdmi { -+ hpd-gpios = <&gpio 46 GPIO_ACTIVE_LOW>; -+}; -diff --git a/arch/arm/boot/dts/bcm283x.dtsi b/arch/arm/boot/dts/bcm283x.dtsi -index fc67964..bbe4eab 100644 ---- a/arch/arm/boot/dts/bcm283x.dtsi -+++ b/arch/arm/boot/dts/bcm283x.dtsi -@@ -1,6 +1,7 @@ - #include - #include - #include -+#include - #include "skeleton.dtsi" - - /* This include file covers the common peripherals and configuration between -@@ -153,6 +154,18 @@ - status = "disabled"; - }; - -+ pixelvalve@7e206000 { -+ compatible = "brcm,bcm2835-pixelvalve0"; -+ reg = <0x7e206000 0x100>; -+ interrupts = <2 13>; /* pwa0 */ -+ }; -+ -+ pixelvalve@7e207000 { -+ compatible = "brcm,bcm2835-pixelvalve1"; -+ reg = <0x7e207000 0x100>; -+ interrupts = <2 14>; /* pwa1 */ -+ }; -+ - aux: aux@0x7e215000 { - compatible = "brcm,bcm2835-aux"; - #clock-cells = <1>; -@@ -206,6 +219,12 @@ - status = "disabled"; - }; - -+ hvs@7e400000 { -+ compatible = "brcm,bcm2835-hvs"; -+ reg = <0x7e400000 0x6000>; -+ interrupts = <2 1>; -+ }; -+ - i2c1: i2c@7e804000 { - compatible = "brcm,bcm2835-i2c"; - reg = <0x7e804000 0x1000>; -@@ -226,11 +245,39 @@ - status = "disabled"; - }; - -+ pixelvalve@7e807000 { -+ compatible = "brcm,bcm2835-pixelvalve2"; -+ reg = <0x7e807000 0x100>; -+ interrupts = <2 10>; /* pixelvalve */ -+ }; -+ -+ hdmi: hdmi@7e902000 { -+ compatible = "brcm,bcm2835-hdmi"; -+ reg = <0x7e902000 0x600>, -+ <0x7e808000 0x100>; -+ interrupts = <2 8>, <2 9>; -+ ddc = <&i2c2>; -+ clocks = <&clocks BCM2835_PLLH_PIX>, -+ <&clocks BCM2835_CLOCK_HSM>; -+ clock-names = "pixel", "hdmi"; -+ status = "disabled"; -+ }; -+ - usb: usb@7e980000 { - compatible = "brcm,bcm2835-usb"; - reg = <0x7e980000 0x10000>; - interrupts = <1 9>; - }; -+ -+ v3d: v3d@7ec00000 { -+ compatible = "brcm,bcm2835-v3d"; -+ reg = <0x7ec00000 0x1000>; -+ interrupts = <1 10>; -+ }; -+ -+ vc4: gpu { -+ compatible = "brcm,bcm2835-vc4"; -+ }; - }; - - clocks { --- -2.7.3 - From da77f737f9f5a487f3a1f80f8546585ee18cd7b9 Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Fri, 4 Mar 2016 10:39:28 -0800 diff --git a/config-arm-generic b/config-arm-generic index 9ea02cf1d..f8d6052d6 100644 --- a/config-arm-generic +++ b/config-arm-generic @@ -6,8 +6,9 @@ CONFIG_EARLY_PRINTK=y CONFIG_SERIAL_EARLYCON_ARM_SEMIHOST=y CONFIG_FB_SSD1307=m CONFIG_HW_PERF_EVENTS=y -CONFIG_NFS_FS=y CONFIG_FORCE_MAX_ZONEORDER=11 +CONFIG_XZ_DEC_ARM=y +CONFIG_XZ_DEC_ARMTHUMB=y CONFIG_SCHED_MC=y CONFIG_SCHED_SMT=y @@ -56,7 +57,6 @@ CONFIG_ARM_GIC=y CONFIG_ARM_GIC_V2M=y CONFIG_ARM_GIC_V3=y CONFIG_ARM_GIC_V3_ITS=y -# CONFIG_HISILICON_IRQ_MBIGEN is not set CONFIG_ARM_GLOBAL_TIMER=y CONFIG_ARM_SMMU=y CONFIG_MMC_ARMMMCI=y @@ -69,6 +69,8 @@ CONFIG_PL330_DMA=m CONFIG_GPIO_PL061=y CONFIG_USB_ISP1760=m CONFIG_ARM_PL172_MPMC=m +CONFIG_DRM_HDLCD=m +# CONFIG_DRM_HDLCD_SHOW_UNDERRUN is not set # HW crypto and rng CONFIG_ARM_CRYPTO=y @@ -78,6 +80,7 @@ CONFIG_CRYPTO_SHA1_ARM=y CONFIG_CRYPTO_SHA256_ARM=y CONFIG_CRYPTO_SHA1_ARM_NEON=y CONFIG_CRYPTO_SHA512_ARM=y +CONFIG_TCG_TIS_I2C_ATMEL=m # EDAC CONFIG_EDAC=y @@ -109,6 +112,41 @@ CONFIG_CLKSRC_VERSATILE=y CONFIG_POWER_RESET_VERSATILE=y # CONFIG_ARM_CHARLCD is not set +# Marvell EBU +CONFIG_ARCH_MVEBU=y +CONFIG_SERIAL_MVEBU_UART=y +CONFIG_SERIAL_MVEBU_CONSOLE=y +CONFIG_MVEBU_DEVBUS=y +CONFIG_MVEBU_MBUS=y +CONFIG_PCI_MVEBU=y +CONFIG_PCIE_ARMADA_8K=y +CONFIG_MV_XOR=y +CONFIG_CRYPTO_DEV_MV_CESA=m +CONFIG_CRYPTO_DEV_MARVELL_CESA=m +CONFIG_ARMADA_THERMAL=m +CONFIG_MMC_SDHCI_PXAV3=m +CONFIG_MV643XX_ETH=m +CONFIG_PINCTRL_MVEBU=y +CONFIG_EDAC_MV64X60=m +CONFIG_RTC_DRV_S35390A=m +CONFIG_RTC_DRV_88PM80X=m +CONFIG_RTC_DRV_ISL12057=m +CONFIG_RTC_DRV_MV=m +CONFIG_RTC_DRV_ARMADA38X=m +CONFIG_MVNETA=m +CONFIG_MVNETA_BM_ENABLE=m +CONFIG_GPIO_MVEBU=y +CONFIG_MVEBU_CLK_CORE=y +CONFIG_MVEBU_CLK_COREDIV=y +CONFIG_MMC_MVSDIO=m +CONFIG_SPI_ORION=m +CONFIG_USB_MV_UDC=m +CONFIG_USB_XHCI_MVEBU=m +CONFIG_PHY_MVEBU_SATA=y +CONFIG_AHCI_MVEBU=m +# CONFIG_CACHE_FEROCEON_L2 is not set +# CONFIG_CACHE_FEROCEON_L2_WRITETHROUGH is not set + # Rockchips CONFIG_ARCH_ROCKCHIP=y CONFIG_I2C_RK3X=m @@ -127,9 +165,11 @@ CONFIG_ROCKCHIP_SARADC=m CONFIG_ROCKCHIP_IOMMU=y CONFIG_ROCKCHIP_THERMAL=m CONFIG_DRM_ROCKCHIP=m +CONFIG_ROCKCHIP_ANALOGIX_DP=m CONFIG_ROCKCHIP_DW_HDMI=m -CONFIG_ROCKCHIP_DW_MIPI_DSI=y +CONFIG_ROCKCHIP_DW_MIPI_DSI=m CONFIG_ROCKCHIP_INNO_HDMI=m +CONFIG_DRM_ANALOGIX_DP=m CONFIG_PHY_ROCKCHIP_USB=m CONFIG_DWMAC_ROCKCHIP=m CONFIG_SND_SOC_ROCKCHIP=m @@ -166,6 +206,8 @@ CONFIG_RTC_DRV_TEGRA=m CONFIG_ARM_TEGRA_DEVFREQ=m CONFIG_ARM_TEGRA124_CPUFREQ=m CONFIG_TEGRA_SOCTHERM=m +CONFIG_PHY_TEGRA_XUSB=m +CONFIG_USB_XHCI_TEGRA=m CONFIG_TEGRA_HOST1X=m CONFIG_TEGRA_HOST1X_FIREWALL=y @@ -174,6 +216,7 @@ CONFIG_DRM_TEGRA=m CONFIG_DRM_TEGRA_STAGING=y CONFIG_NOUVEAU_PLATFORM_DRIVER=y CONFIG_SND_HDA_TEGRA=m +CONFIG_RTC_DRV_MAX77686=m # CONFIG_ARM_TEGRA20_CPUFREQ is not set # CONFIG_MFD_NVEC is not set @@ -199,6 +242,8 @@ CONFIG_EFI_VARS=y CONFIG_EFIVAR_FS=y CONFIG_EFI_VARS_PSTORE=y CONFIG_EFI_VARS_PSTORE_DEFAULT_DISABLE=y +# CONFIG_EFI_BOOTLOADER_CONTROL is not set +# CONFIG_EFI_CAPSULE_LOADER is not set # Power management / thermal / cpu scaling CONFIG_PM_OPP=y @@ -393,6 +438,7 @@ CONFIG_MTD_OF_PARTS=m # CONFIG_MTD_CFI_ADV_OPTIONS is not set CONFIG_MTD_PHYSMAP=m CONFIG_MTD_PHYSMAP_OF=m +CONFIG_MTD_PHYSMAP_OF_VERSATILE=y # CONFIG_MTD_PHYSMAP_COMPAT is not set # CONFIG_MTD_LPDDR2_NVM is not set @@ -420,6 +466,10 @@ CONFIG_PINCTRL=y CONFIG_GENERIC_PINCONF=y CONFIG_PINCTRL_SINGLE=y +# gpio +CONFIG_GPIO_PCA953X=y +CONFIG_GPIO_PCA953X_IRQ=y + #i2c CONFIG_I2C_ARB_GPIO_CHALLENGE=m CONFIG_I2C_BOARDINFO=y @@ -578,7 +628,6 @@ CONFIG_NET_VENDOR_MELLANOX=y # drm # CONFIG_DRM_VMWGFX is not set -# CONFIG_DRM_HDLCD is not set # CONFIG_IMX_IPUV3_CORE is not set # CONFIG_DEBUG_SET_MODULE_RONX is not set @@ -595,3 +644,10 @@ CONFIG_CHECKPOINT_RESTORE=y # CONFIG_PINCTRL_CHERRYVIEW is not set # CONFIG_PINCTRL_BROXTON is not set # CONFIG_PINCTRL_SUNRISEPOINT is not set + +# CONFIG_HW_RANDOM_HISI is not set +# CONFIG_HISILICON_IRQ_MBIGEN is not set +# CONFIG_QRTR is not set + +# This Xilinx option is now built for arm64 as well as ARM +CONFIG_XILINX_VDMA=m diff --git a/config-arm64 b/config-arm64 index 3c402a87d..a9a02f81f 100644 --- a/config-arm64 +++ b/config-arm64 @@ -15,7 +15,6 @@ CONFIG_ARCH_XGENE=y # CONFIG_ARCH_LAYERSCAPE is not set # CONFIG_ARCH_MEDIATEK is not set # CONFIG_ARCH_MESON is not set -# CONFIG_ARCH_MVEBU is not set # CONFIG_ARCH_RENESAS is not set # CONFIG_ARCH_SPRD is not set # CONFIG_ARCH_STRATIX10 is not set @@ -23,6 +22,7 @@ CONFIG_ARCH_XGENE=y # CONFIG_ARCH_VULCAN is not set # CONFIG_ARCH_ZYNQMP is not set # CONFIG_ARCH_UNIPHIER is not set +# CONFIG_ARCH_LG1K is not set # Erratum CONFIG_ARM64_ERRATUM_826319=y @@ -73,6 +73,7 @@ CONFIG_HVC_DRIVER=y CONFIG_HZ=100 CONFIG_KVM=y +CONFIG_KVM_NEW_VGIC=y CONFIG_RCU_FANOUT=64 CONFIG_SPARSE_IRQ=y @@ -151,12 +152,19 @@ CONFIG_STUB_CLK_HI6220=y CONFIG_REGULATOR_HI655X=m CONFIG_PHY_HI6220_USB=m CONFIG_COMMON_RESET_HI6220=m -# CONFIG_ARM_HISI_ACPU_CPUFREQ is not set CONFIG_HI6220_MBOX=m +CONFIG_RESET_HISI=y +CONFIG_MFD_HI655X_PMIC=m +CONFIG_DRM_HISI_KIRIN=m +CONFIG_HISI_KIRIN_DW_DSI=m # Tegra CONFIG_ARCH_TEGRA_132_SOC=y CONFIG_ARCH_TEGRA_210_SOC=y +CONFIG_TEGRA210_ADMA=y +CONFIG_MFD_MAX77620=y +CONFIG_REGULATOR_MAX77620=m +# CONFIG_GPIO_TEGRA is not set # AllWinner CONFIG_MACH_SUN50I=y @@ -278,3 +286,7 @@ CONFIG_DEBUG_SECTION_MISMATCH=y # CONFIG_FUJITSU_ES is not set # CONFIG_IMX_THERMAL is not set # CONFIG_PNP_DEBUG_MESSAGES is not set + +# Will probably need to be changed later +# CONFIG_NUMA is not set + diff --git a/config-armv7 b/config-armv7 index 7fe8444b3..44685c2fd 100644 --- a/config-armv7 +++ b/config-armv7 @@ -21,11 +21,12 @@ CONFIG_ARCH_OMAP2PLUS_TYPICAL=y CONFIG_SOC_OMAP5=y # CONFIG_SOC_DRA7XX is not set CONFIG_SOC_OMAP3430=y -# CONFIG_SOC_TI81XX is not set +CONFIG_SOC_TI81XX=y # CONFIG_MACH_NOKIA_RX51 is not set # CONFIG_MACH_OMAP_LDP is not set # CONFIG_MACH_OMAP3517EVM is not set # CONFIG_MACH_OMAP3_PANDORA is not set +CONFIG_OMAP5_ERRATA_801819=y CONFIG_SOC_HAS_REALTIME_COUNTER=y CONFIG_OMAP_RESET_CLOCKS=y @@ -72,6 +73,8 @@ CONFIG_TWL4030_USB=m CONFIG_TWL6030_USB=m CONFIG_TWL6040_CORE=y CONFIG_CLK_TWL6040=m +# DM814x such as hp-t410 +CONFIG_COMMON_CLK_TI_ADPLL=m CONFIG_OMAP_INTERCONNECT=m CONFIG_MFD_OMAP_USB_HOST=y CONFIG_HDQ_MASTER_OMAP=m @@ -323,7 +326,6 @@ CONFIG_INPUT_PM8XXX_VIBRATOR=m CONFIG_INPUT_PMIC8XXX_PWRKEY=m CONFIG_INPUT_PM8941_PWRKEY=m CONFIG_RTC_DRV_PM8XXX=m -# CONFIG_DRM_MSM_REGISTER_LOGGING is not set CONFIG_QCOM_WDT=m CONFIG_SPMI_MSM_PMIC_ARB=m CONFIG_QCOM_SPMI_IADC=m @@ -364,6 +366,7 @@ CONFIG_SOC_IMX7D=y CONFIG_ARM_IMX6Q_CPUFREQ=m CONFIG_POWER_RESET_IMX=y CONFIG_PCI_IMX6=y +CONFIG_IMX_GPCV2=y CONFIG_IMX_THERMAL=m CONFIG_IMX_SDMA=m CONFIG_IMX_DMA=m @@ -411,6 +414,7 @@ CONFIG_CRYPTO_DEV_FSL_CAAM_AHASH_API=m CONFIG_CRYPTO_DEV_FSL_CAAM_RNG_API=m # CONFIG_CRYPTO_DEV_FSL_CAAM_DEBUG is not set # CONFIG_CRYPTO_DEV_MXS_DCP is not set +# CONFIG_CRYPTO_DEV_MXC_SCC is not set CONFIG_RTC_DRV_SNVS=m CONFIG_FB_MXS=m # CONFIG_FB_MX3 is not set @@ -582,7 +586,6 @@ CONFIG_SPI_CADENCE=m CONFIG_I2C_CADENCE=m CONFIG_XILINX_WATCHDOG=m CONFIG_XILINX_XADC=m -CONFIG_XILINX_VDMA=m CONFIG_SND_SOC_ADI=m CONFIG_SND_SOC_ADI_AXI_I2S=m CONFIG_SND_SOC_ADI_AXI_SPDIF=m diff --git a/config-armv7-generic b/config-armv7-generic index fc4bafb6a..dbbcbc81e 100644 --- a/config-armv7-generic +++ b/config-armv7-generic @@ -30,7 +30,6 @@ CONFIG_ATAGS=y CONFIG_ATAGS_PROC=y CONFIG_ZBOOT_ROM_TEXT=0x0 CONFIG_ZBOOT_ROM_BSS=0x0 -CONFIG_XZ_DEC_ARMTHUMB=y CONFIG_ARCH_HAS_TICK_BROADCAST=y CONFIG_IRQ_CROSSBAR=y CONFIG_IOMMU_IO_PGTABLE_LPAE=y @@ -152,8 +151,6 @@ CONFIG_DEVFREQ_GOV_USERSPACE=y CONFIG_DEFAULT_MMAP_MIN_ADDR=32768 CONFIG_LSM_MMAP_MIN_ADDR=32768 -CONFIG_XZ_DEC_ARM=y - # CONFIG_PCI_LAYERSCAPE is not set # Do NOT enable this, it breaks stuff and makes things go slow @@ -198,6 +195,7 @@ CONFIG_MACH_SUN8I=y CONFIG_SUNXI_SRAM=y CONFIG_DMA_SUN4I=m CONFIG_DMA_SUN6I=m +CONFIG_DRM_SUN4I=m CONFIG_SUNXI_WATCHDOG=m CONFIG_NET_VENDOR_ALLWINNER=y CONFIG_RTC_DRV_SUNXI=m @@ -208,7 +206,6 @@ CONFIG_SPI_SUN4I=m CONFIG_SPI_SUN6I=m CONFIG_MMC_SUNXI=m CONFIG_I2C_SUN6I_P2WI=m -CONFIG_GPIO_PCA953X=m CONFIG_GPIO_PCF857X=m CONFIG_TOUCHSCREEN_SUN4I=m CONFIG_MFD_AXP20X=y @@ -274,8 +271,10 @@ CONFIG_SERIAL_SAMSUNG_CONSOLE=y CONFIG_ARM_EXYNOS5440_CPUFREQ=m # CONFIG_ARM_EXYNOS_CPUIDLE is not set CONFIG_ARM_EXYNOS5_BUS_DEVFREQ=m +# CONFIG_ARM_EXYNOS_BUS_DEVFREQ is not set # CONFIG_EXYNOS5420_MCPM not set CONFIG_DEVFREQ_EVENT_EXYNOS_PPMU=y +# CONFIG_DEVFREQ_EVENT_EXYNOS_NOCP is not set CONFIG_I2C_EXYNOS5=m CONFIG_I2C_S3C2410=m @@ -366,7 +365,6 @@ CONFIG_INPUT_MAX8997_HAPTIC=m CONFIG_CHARGER_MAX8997=m CONFIG_LEDS_MAX8997=m CONFIG_RTC_DRV_MAX8997=m -CONFIG_RTC_DRV_MAX77686=m CONFIG_EXTCON_MAX8997=m # Tegra @@ -381,6 +379,7 @@ CONFIG_SND_SOC_TEGRA_RT5677=m CONFIG_AD525X_DPOT=m CONFIG_AD525X_DPOT_I2C=m CONFIG_AD525X_DPOT_SPI=m +# CONFIG_GPIO_TEGRA is not set # Jetson TK1 CONFIG_PINCTRL_AS3722=y @@ -396,7 +395,6 @@ CONFIG_TI_THERMAL=y CONFIG_MMC_OMAP_HS=m # mvebu -CONFIG_ARCH_MVEBU=y CONFIG_MACH_ARMADA_370=y CONFIG_MACH_ARMADA_375=y CONFIG_MACH_ARMADA_38X=y @@ -404,45 +402,18 @@ CONFIG_MACH_ARMADA_39X=y CONFIG_MACH_ARMADA_XP=y CONFIG_MACH_DOVE=y -CONFIG_MVEBU_DEVBUS=y -CONFIG_PCI_MVEBU=y CONFIG_CACHE_TAUROS2=y -CONFIG_MV_XOR=y -CONFIG_CRYPTO_DEV_MV_CESA=m -CONFIG_CRYPTO_DEV_MARVELL_CESA=m -CONFIG_MV643XX_ETH=m -CONFIG_PINCTRL_MVEBU=y CONFIG_PINCTRL_ARMADA_370=y CONFIG_PINCTRL_ARMADA_XP=y # CONFIG_ARM_MVEBU_V7_CPUIDLE is not set CONFIG_PINCTRL_DOVE=y -CONFIG_EDAC_MV64X60=m -CONFIG_RTC_DRV_S35390A=m -CONFIG_RTC_DRV_88PM80X=m -CONFIG_RTC_DRV_ISL12057=m -CONFIG_RTC_DRV_MV=m -CONFIG_RTC_DRV_ARMADA38X=m -CONFIG_MVNETA=m -CONFIG_MVNETA_BM_ENABLE=m -CONFIG_GPIO_MVEBU=y -CONFIG_MVEBU_CLK_CORE=y -CONFIG_MVEBU_CLK_COREDIV=y -CONFIG_MMC_MVSDIO=m CONFIG_MMC_SDHCI_DOVE=m -CONFIG_SPI_ORION=m -CONFIG_USB_MV_UDC=m -CONFIG_MVEBU_MBUS=y -CONFIG_USB_XHCI_MVEBU=m -CONFIG_PHY_MVEBU_SATA=y -CONFIG_AHCI_MVEBU=m -CONFIG_ARMADA_THERMAL=m CONFIG_DOVE_THERMAL=m CONFIG_DRM_ARMADA=m CONFIG_ORION_WATCHDOG=m CONFIG_SND_KIRKWOOD_SOC=m CONFIG_SND_KIRKWOOD_SOC_ARMADA370_DB=m CONFIG_USB_EHCI_HCD_ORION=m -CONFIG_MMC_SDHCI_PXAV3=m CONFIG_MVPP2=m CONFIG_COMMON_CLK_SI5351=m CONFIG_RTC_DRV_ARMADA38X=m @@ -451,6 +422,7 @@ CONFIG_RTC_DRV_ARMADA38X=m CONFIG_LEDS_NS2=m CONFIG_SERIAL_MVEBU_UART=y # CONFIG_SERIAL_MVEBU_CONSOLE is not set +# CONFIG_PCIE_ARMADA_8K is not set # DRM panels CONFIG_DRM_PANEL=y @@ -577,7 +549,6 @@ CONFIG_RTC_DRV_DS1390=m CONFIG_RTC_DRV_M41T93=m CONFIG_RTC_DRV_M41T94=m CONFIG_RTC_DRV_MAX6902=m -CONFIG_RTC_DRV_PCF2123=m CONFIG_RTC_DRV_R9701=m CONFIG_RTC_DRV_RS5C348=m CONFIG_RTC_DRV_RX4581=m @@ -623,6 +594,7 @@ CONFIG_REGULATOR_DA9211=m CONFIG_REGULATOR_ISL9305=m CONFIG_REGULATOR_MAX77802=m # CONFIG_REGULATOR_MT6311 is not set +# CONFIG_REGULATOR_PV88080 is not set CONFIG_SENSORS_LTC2978_REGULATOR=y CONFIG_POWER_AVS=y @@ -782,6 +754,7 @@ CONFIG_R8188EU=m # CONFIG_SERIAL_IFX6X60 is not set # CONFIG_SERIAL_BCM63XX is not set # CONFIG_SERIAL_STM32 is not set +# CONFIG_SERIAL_MPS2_UART is not set # CONFIG_FB_XILINX is not set # CONFIG_BRCMSTB_GISB_ARB is not set # CONFIG_SUNGEM is not set diff --git a/config-armv7-lpae b/config-armv7-lpae index 96d49e88a..178d36e8f 100644 --- a/config-armv7-lpae +++ b/config-armv7-lpae @@ -25,8 +25,20 @@ CONFIG_CMA_SIZE_MBYTES=64 CONFIG_ARM_ERRATA_798181=y CONFIG_ARM_ERRATA_773022=y +# Little.BIG +CONFIG_BIG_LITTLE=y +CONFIG_BL_SWITCHER=y +CONFIG_EXYNOS5420_MCPM=y +CONFIG_ARCH_VEXPRESS_DCSCB=y +CONFIG_ARCH_VEXPRESS_TC2_PM=y +CONFIG_ARM_BIG_LITTLE_CPUFREQ=m +CONFIG_ARM_SCPI_CPUFREQ=m +CONFIG_ARM_VEXPRESS_SPC_CPUFREQ=m +# CONFIG_BL_SWITCHER_DUMMY_IF is not set + CONFIG_KVM=y CONFIG_KVM_ARM_HOST=y +CONFIG_KVM_NEW_VGIC=y # CONFIG_XEN is not set CONFIG_XEN_FBDEV_FRONTEND=y diff --git a/config-debug b/config-debug index 821ff17b9..a31d9076c 100644 --- a/config-debug +++ b/config-debug @@ -25,6 +25,7 @@ CONFIG_FAULT_INJECTION_DEBUG_FS=y CONFIG_FAULT_INJECTION_STACKTRACE_FILTER=y CONFIG_FAIL_IO_TIMEOUT=y CONFIG_FAIL_MMC_REQUEST=y +# CONFIG_F2FS_FAULT_INJECTION is not set CONFIG_LOCK_STAT=y diff --git a/config-generic b/config-generic index 7dee247fa..8c2260862 100644 --- a/config-generic +++ b/config-generic @@ -111,6 +111,7 @@ CONFIG_HOTPLUG_PCI=y # CONFIG_HOTPLUG_PCI_SHPC is not set CONFIG_HOTPLUG_PCI_PCIE=y # CONFIG_PCIE_DW_PLAT is not set +CONFIG_PCIE_DPC=m # CONFIG_SGI_IOC4 is not set @@ -214,7 +215,8 @@ CONFIG_BINFMT_MISC=m # CONFIG_COMMON_CLK_CS2000_CP is not set # CONFIG_COMMON_CLK_PWM is not set # CONFIG_COMMON_CLK_CDCE925 is not set -# +# CONFIG_COMMON_CLK_OXNAS is not set +# CONFIG_COMMON_CLK_HI3519 is not set # # Generic Driver Options @@ -237,6 +239,7 @@ CONFIG_REGMAP_I2C=m # CONFIG_CMA is not set # CONFIG_DMA_CMA is not set # CONFIG_FENCE_TRACE is not set +# CONFIG_SYNC_FILE is not set # CONFIG_SPI is not set # CONFIG_SPI_ALTERA is not set @@ -570,6 +573,7 @@ CONFIG_SCSI_WD719X=m CONFIG_SCSI_DEBUG=m CONFIG_SCSI_QLA_FC=m CONFIG_TCM_QLA2XXX=m +# CONFIG_TCM_QLA2XXX_DEBUG is not set CONFIG_SCSI_QLA_ISCSI=m CONFIG_SCSI_IPR=m CONFIG_SCSI_IPR_TRACE=y @@ -595,6 +599,7 @@ CONFIG_ATA_BMDMA=y CONFIG_ATA_VERBOSE_ERROR=y CONFIG_ATA_SFF=y CONFIG_ATA_PIIX=y +# CONFIG_SATA_DWC is not set # CONFIG_SATA_HIGHBANK is not set CONFIG_ATA_ACPI=y CONFIG_BLK_DEV_SX8=m @@ -813,6 +818,7 @@ CONFIG_NET_IPVTI=m CONFIG_NET_FOU=m CONFIG_NET_FOU_IP_TUNNELS=y CONFIG_GENEVE=m +CONFIG_GTP=m CONFIG_MACSEC=m CONFIG_INET_AH=m CONFIG_INET_ESP=m @@ -1564,6 +1570,10 @@ CONFIG_QLGE=m CONFIG_NETXEN_NIC=m CONFIG_QED=m CONFIG_QEDE=m +CONFIG_QED_SRIOV=y +# CONFIG_QEDE_VXLAN is not set +# CONFIG_QEDE_GENEVE is not set + # CONFIG_NET_VENDOR_QUALCOMM is not set @@ -1633,6 +1643,7 @@ CONFIG_VIA_VELOCITY=m CONFIG_NET_VENDOR_WIZNET=y CONFIG_WIZNET_W5100=m CONFIG_WIZNET_W5300=m +CONFIG_WIZNET_W5100_SPI=m CONFIG_NET_VENDOR_XIRCOM=y CONFIG_PCMCIA_XIRC2PS=m @@ -1713,6 +1724,7 @@ CONFIG_MLXSW_CORE_HWMON=y CONFIG_MLXSW_PCI=m CONFIG_MLXSW_SWITCHX2=m CONFIG_MLXSW_SPECTRUM=m +CONFIG_MLXSW_SPECTRUM_DCB=y # CONFIG_MLX4_DEBUG is not set # CONFIG_SFC is not set @@ -2106,6 +2118,8 @@ CONFIG_NFC_PORT100=m CONFIG_NFC_PN544=m CONFIG_NFC_PN544_I2C=m CONFIG_NFC_PN533=m +CONFIG_NFC_PN533_USB=m +CONFIG_NFC_PN533_I2C=m CONFIG_NFC_MICROREAD=m CONFIG_NFC_MICROREAD_I2C=m CONFIG_NFC_TRF7970A=m @@ -2563,6 +2577,7 @@ CONFIG_INPUT_MMA8450=m CONFIG_INPUT_MPU3050=m CONFIG_INPUT_KXTJ9=m # CONFIG_INPUT_KXTJ9_POLLED_MODE is not set +# CONFIG_INPUT_PWM_BEEPER is not set CONFIG_RMI4_CORE=m CONFIG_RMI4_I2C=m @@ -2625,7 +2640,6 @@ CONFIG_CYCLADES=m # CONFIG_CYZ_INTR is not set # CONFIG_MOXA_INTELLIO is not set # CONFIG_MOXA_SMARTIO is not set -# CONFIG_SERIAL_MVEBU_UART is not set # CONFIG_ISI is not set # CONFIG_RIO is not set CONFIG_SERIAL_JSM=m @@ -2809,6 +2823,7 @@ CONFIG_SENSORS_LTC4260=m CONFIG_SENSORS_MAX1619=m CONFIG_SENSORS_MAX6650=m CONFIG_SENSORS_MAX6697=m +CONFIG_SENSORS_MAX31722=m CONFIG_SENSORS_MCP3021=m CONFIG_SENSORS_NCT6775=m CONFIG_SENSORS_NCT6683=m @@ -3000,6 +3015,8 @@ CONFIG_ACPI_ALS=m # CONFIG_AD5421 is not set # CONFIG_AD5449 is not set # CONFIG_AD5504 is not set +# CONFIG_AD5592R is not set +# CONFIG_AD5593R is not set # CONFIG_AD5624R_SPI is not set # CONFIG_AD5686 is not set # CONFIG_AD5755 is not set @@ -3062,6 +3079,18 @@ CONFIG_PA12203001=m # CONFIG_TSYS02D is not set # CONFIG_HI8435 is not set # CONFIG_IMX7D_ADC is not set +# CONFIG_AM2315 is not set +# CONFIG_BMI160_I2C is not set +# CONFIG_BMI160_SPI is not set +# CONFIG_BH1780 is not set +# CONFIG_MAX44000 is not set +# CONFIG_VEML6070 is not set +# CONFIG_BMC150_MAGN_I2C is not set +# CONFIG_BMC150_MAGN_SPI is not set +# CONFIG_DS1803 is not set +# CONFIG_MCP4131 is not set +# CONFIG_HP03 is not set +# CONFIG_HP206C is not set # staging IIO drivers # CONFIG_AD7291 is not set @@ -3288,10 +3317,10 @@ CONFIG_RTC_DRV_PCF85063=m # CONFIG_RTC_DRV_HID_SENSOR_TIME is not set # CONFIG_RTC_DRV_MOXART is not set # CONFIG_RTC_DRV_ISL12057 is not set -# CONFIG_RTC_DRV_XGENE is not set # CONFIG_RTC_DRV_ABB5ZES3 is not set # CONFIG_RTC_DRV_ZYNQMP is not set # CONFIG_RTC_DRV_RV8803 is not set +# CONFIG_RTC_DRV_DS1302 is not set CONFIG_R3964=m # CONFIG_APPLICOM is not set @@ -3317,6 +3346,8 @@ CONFIG_VGA_ARB_MAX_GPUS=16 CONFIG_DRM=m +CONFIG_DRM_ANALOGIX_ANX78XX=m +# CONFIG_DRM_ARCPGU is not set CONFIG_DRM_DP_AUX_CHARDEV=y CONFIG_DRM_FBDEV_EMULATION=y CONFIG_DRM_LOAD_EDID_FIRMWARE=y @@ -3330,6 +3361,7 @@ CONFIG_DRM_AMDGPU=m CONFIG_DRM_AMD_ACP=y # CONFIG_DRM_AMDGPU_CIK is not set CONFIG_DRM_AMDGPU_USERPTR=y +# CONFIG_DRM_AMDGPU_GART_DEBUGFS is not set CONFIG_DRM_AMD_POWERPLAY=y # CONFIG_DRM_I810 is not set # CONFIG_DRM_MGA is not set @@ -3480,6 +3512,9 @@ CONFIG_VIDEO_TM6000_DVB=m # CONFIG_VIDEO_VIVID is not set CONFIG_VIDEO_USBTV=m # CONFIG_VIDEO_AU0828_RC is not set +CONFIG_VIDEO_TW686X=m +# Staging version? +# CONFIG_VIDEO_TW686X_KH is not set CONFIG_USB_VIDEO_CLASS=m CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y @@ -4099,6 +4134,7 @@ CONFIG_HID_LENOVO=m CONFIG_HID_CORSAIR=m CONFIG_HID_GFRM=m CONFIG_HID_CMEDIA=m +CONFIG_HID_ASUS=m # # USB Imaging devices @@ -4342,6 +4378,7 @@ CONFIG_USB_EZUSB_FX2=m CONFIG_USB_HSIC_USB3503=m # CONFIG_USB_LINK_LAYER_TEST is not set CONFIG_USB_CHAOSKEY=m +CONFIG_UCSI=m CONFIG_USB_LCD=m CONFIG_USB_LD=m CONFIG_USB_LEGOTOWER=m @@ -4404,80 +4441,90 @@ CONFIG_MFD_SM501=m CONFIG_MFD_SM501_GPIO=y CONFIG_MFD_RTSX_PCI=m CONFIG_MFD_RTSX_USB=m -# CONFIG_MFD_TI_AM335X_TSCADC is not set CONFIG_MFD_VIPERBOARD=m -# CONFIG_MFD_RETU is not set -# CONFIG_MFD_TC6393XB is not set -# CONFIG_MFD_WM8400 is not set -# CONFIG_MFD_WM8350_I2C is not set -# CONFIG_MFD_WM8350 is not set -# CONFIG_MFD_WM831X is not set # CONFIG_AB3100_OTP is not set -# CONFIG_MFD_TIMBERDALE is not set -# CONFIG_MFD_WM8994 is not set -# CONFIG_MFD_88PM860X is not set -# CONFIG_LPC_SCH is not set -# CONFIG_LPC_ICH is not set -# CONFIG_HTC_I2CPLD is not set -# CONFIG_MFD_MAX8925 is not set -# CONFIG_MFD_ASIC3 is not set -# CONFIG_MFD_AS3722 is not set -# CONFIG_HTC_EGPIO is not set -# CONFIG_TPS6507X is not set # CONFIG_ABX500_CORE is not set -# CONFIG_MFD_RDC321X is not set -# CONFIG_MFD_JANZ_CMODIO is not set -# CONFIG_MFD_KEMPLD is not set -# CONFIG_MFD_WM831X_I2C is not set -# CONFIG_MFD_CS5535 is not set -# CONFIG_MFD_STMPE is not set -# CONFIG_MFD_MAX8998 is not set -# CONFIG_MFD_MT6397 is not set -# CONFIG_MFD_TPS6586X is not set -# CONFIG_MFD_TC3589X is not set -# CONFIG_MFD_WL1273_CORE is not set -# CONFIG_MFD_TPS65217 is not set -# CONFIG_MFD_LM3533 is not set -# CONFIG_MFD_MC13XXX_I2C is not set -# CONFIG_MFD_ARIZONA is not set -# CONFIG_MFD_ARIZONA_I2C is not set -# CONFIG_MFD_CROS_EC is not set -# CONFIG_MFD_SI476X_CORE is not set -# CONFIG_MFD_TPS65912 is not set -# CONFIG_MFD_TPS65912_SPI is not set -# CONFIG_MFD_TPS65912_I2C is not set -# CONFIG_MFD_SYSCON is not set -# CONFIG_MFD_DA9063 is not set -# CONFIG_MFD_DLN2 is not set -# CONFIG_MFD_LP3943 is not set -# CONFIG_MFD_ATMEL_HLCDC is not set -# CONFIG_MFD_BCM590XX is not set -# CONFIG_MFD_TPS65218 is not set -# CONFIG_MFD_WM831X_SPI is not set -# CONFIG_MFD_ARIZONA_SPI is not set -# CONFIG_MFD_MC13XXX_SPI is not set -# CONFIG_MFD_DA9052_SPI is not set -# CONFIG_MFD_MENF21BMC is not set -# CONFIG_MFD_HI6421_PMIC is not set -# CONFIG_MFD_RK808 is not set -# CONFIG_MFD_RN5T618 is not set -# CONFIG_MFD_DA9150 is not set -# CONFIG_MFD_RT5033 is not set -# CONFIG_MFD_SKY81452 is not set -# CONFIG_MFD_MAX77843 is not set -# CONFIG_MFD_DA9062 is not set # CONFIG_EZX_PCAP is not set +# CONFIG_HTC_EGPIO is not set +# CONFIG_HTC_I2CPLD is not set # CONFIG_INTEL_SOC_PMIC is not set -# CONFIG_MFD_ATMEL_FLEXCOM is not set -# CONFIG_TS4800_IRQ is not set -# CONFIG_MFD_ACT8945A is not set -# CONFIG_MFD_AXP20X_I2C is not set -# CONFIG_MFD_AXP20X_RSB is not set +# CONFIG_LPC_ICH is not set +# CONFIG_LPC_SCH is not set # CONFIG_MFD_88PM800 is not set # CONFIG_MFD_88PM805 is not set +# CONFIG_MFD_88PM860X is not set +# CONFIG_MFD_ACT8945A is not set +# CONFIG_MFD_ARIZONA_I2C is not set +# CONFIG_MFD_ARIZONA is not set +# CONFIG_MFD_ARIZONA_SPI is not set +# CONFIG_MFD_AS3722 is not set +# CONFIG_MFD_ASIC3 is not set +# CONFIG_MFD_ATMEL_FLEXCOM is not set +# CONFIG_MFD_ATMEL_HLCDC is not set +# CONFIG_MFD_AXP20X_I2C is not set +# CONFIG_MFD_AXP20X_RSB is not set +# CONFIG_MFD_BCM590XX is not set +# CONFIG_MFD_CROS_EC is not set +# CONFIG_MFD_CS5535 is not set +# CONFIG_MFD_DA9052_SPI is not set +# CONFIG_MFD_DA9062 is not set +# CONFIG_MFD_DA9063 is not set +# CONFIG_MFD_DA9150 is not set +# CONFIG_MFD_DLN2 is not set +# CONFIG_MFD_HI6421_PMIC is not set +# CONFIG_MFD_JANZ_CMODIO is not set +# CONFIG_MFD_KEMPLD is not set +# CONFIG_MFD_LM3533 is not set +# CONFIG_MFD_LP3943 is not set +# CONFIG_MFD_MAX14577 is not set +# CONFIG_MFD_MAX77620 is not set # CONFIG_MFD_MAX77686 is not set +# CONFIG_MFD_MAX77693 is not set +# CONFIG_MFD_MAX77843 is not set # CONFIG_MFD_MAX8907 is not set +# CONFIG_MFD_MAX8925 is not set +# CONFIG_MFD_MAX8997 is not set +# CONFIG_MFD_MAX8998 is not set +# CONFIG_MFD_MC13XXX_I2C is not set +# CONFIG_MFD_MC13XXX_SPI is not set +# CONFIG_MFD_MENF21BMC is not set +# CONFIG_MFD_MT6397 is not set +# CONFIG_MFD_PALMAS is not set +# CONFIG_MFD_RDC321X is not set +# CONFIG_MFD_RETU is not set +# CONFIG_MFD_RK808 is not set +# CONFIG_MFD_RN5T618 is not set +# CONFIG_MFD_RT5033 is not set +# CONFIG_MFD_SI476X_CORE is not set +# CONFIG_MFD_SKY81452 is not set +# CONFIG_MFD_STMPE is not set +# CONFIG_MFD_SYSCON is not set +# CONFIG_MFD_TC3589X is not set +# CONFIG_MFD_TC6393XB is not set +# CONFIG_MFD_TI_AM335X_TSCADC is not set +# CONFIG_MFD_TIMBERDALE is not set # CONFIG_MFD_TPS65086 is not set +# CONFIG_MFD_TPS65090 is not set +# CONFIG_MFD_TPS65217 is not set +# CONFIG_MFD_TPS65218 is not set +# CONFIG_MFD_TPS6586X is not set +# CONFIG_MFD_TPS65910 is not set +# CONFIG_MFD_TPS65912 is not set +# CONFIG_MFD_TPS65912_I2C is not set +# CONFIG_MFD_TPS65912_SPI is not set +# CONFIG_MFD_TPS80031 is not set +# CONFIG_MFD_WL1273_CORE is not set +# CONFIG_MFD_WM831X_I2C is not set +# CONFIG_MFD_WM831X is not set +# CONFIG_MFD_WM831X_SPI is not set +# CONFIG_MFD_WM8350_I2C is not set +# CONFIG_MFD_WM8350 is not set +# CONFIG_MFD_WM8400 is not set +# CONFIG_MFD_WM8994 is not set +# CONFIG_TPS6507X is not set +# CONFIG_TS4800_IRQ is not set +# CONFIG_TWL4030_CORE is not set +# CONFIG_TWL6040_CORE is not set # # File systems @@ -4920,6 +4967,7 @@ CONFIG_SECURITY_SELINUX_AVC_STATS=y # CONFIG_SECURITY_SMACK is not set # CONFIG_SECURITY_TOMOYO is not set # CONFIG_SECURITY_APPARMOR is not set +# CONFIG_SECURITY_LOADPIN is not set CONFIG_SECURITY_YAMA=y CONFIG_AUDIT=y CONFIG_AUDITSYSCALL=y @@ -5056,6 +5104,7 @@ CONFIG_PERSISTENT_KEYRINGS=y CONFIG_BIG_KEYS=y CONFIG_TRUSTED_KEYS=m CONFIG_ENCRYPTED_KEYS=m +CONFIG_KEY_DH_OPERATIONS=y CONFIG_CDROM_PKTCDVD=m CONFIG_CDROM_PKTCDVD_BUFFERS=8 # CONFIG_CDROM_PKTCDVD_WCACHE is not set @@ -5080,6 +5129,7 @@ CONFIG_BACKLIGHT_LP855X=m # CONFIG_BACKLIGHT_LV5207LP is not set # CONFIG_BACKLIGHT_BD6107 is not set # CONFIG_BACKLIGHT_PM8941_WLED is not set +# CONFIG_BACKLIGHT_PWM is not set CONFIG_LCD_CLASS_DEVICE=m CONFIG_LCD_PLATFORM=m @@ -5182,6 +5232,7 @@ CONFIG_CPU_FREQ_GOV_POWERSAVE=y CONFIG_CPU_FREQ_GOV_USERSPACE=y CONFIG_CPU_FREQ_GOV_ONDEMAND=y CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y +CONFIG_CPU_FREQ_GOV_SCHEDUTIL=y CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y CONFIG_CPU_FREQ_STAT=m CONFIG_CPU_FREQ_STAT_DETAILS=y @@ -5311,6 +5362,9 @@ CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM=y # CONFIG_SND_SOC_INNO_RK3036 is not set # CONFIG_SND_SOC_IMG is not set CONFIG_SND_SOC_AMD_ACP=m +# CONFIG_SND_SOC_TAS5720 is not set +# CONFIG_SND_SOC_WM8960 is not set + CONFIG_BALLOON_COMPACTION=y CONFIG_COMPACTION=y @@ -5350,6 +5404,8 @@ CONFIG_LEDS_TRIGGER_BACKLIGHT=m CONFIG_LEDS_TRIGGER_DEFAULT_ON=m CONFIG_LEDS_TRIGGER_TRANSIENT=m CONFIG_LEDS_TRIGGER_CAMERA=m +CONFIG_LEDS_TRIGGER_MTD=y +CONFIG_LEDS_TRIGGER_PANIC=y CONFIG_LEDS_CLEVO_MAIL=m CONFIG_LEDS_INTEL_SS4200=m CONFIG_LEDS_LM3530=m @@ -5414,6 +5470,7 @@ CONFIG_RING_BUFFER_BENCHMARK=m CONFIG_FUNCTION_TRACER=y CONFIG_STACK_TRACER=y # CONFIG_FUNCTION_GRAPH_TRACER is not set +# CONFIG_HIST_TRIGGERS is not set CONFIG_KPROBES=y CONFIG_KPROBE_EVENT=y @@ -5445,6 +5502,7 @@ CONFIG_POWER_SUPPLY=y # CONFIG_TEST_POWER is not set CONFIG_APM_POWER=m # CONFIG_GENERIC_ADC_BATTERY is not set +# CONFIG_GENERIC_ADC_THERMAL is not set # CONFIG_WM831X_POWER is not set # CONFIG_BATTERY_DS2760 is not set @@ -5560,10 +5618,7 @@ CONFIG_GPIOLIB=y CONFIG_NET_DSA=m CONFIG_NET_DSA_HWMON=y CONFIG_NET_DSA_MV88E6060=m -CONFIG_NET_DSA_MV88E6131=m -CONFIG_NET_DSA_MV88E6123=m -CONFIG_NET_DSA_MV88E6171=m -CONFIG_NET_DSA_MV88E6352=m +CONFIG_NET_DSA_MV88E6XXX=m CONFIG_NET_DSA_BCM_SF2=m # Used by Maemo, we don't care. @@ -5636,6 +5691,7 @@ CONFIG_ALTERA_STAPL=m CONFIG_USBIP_CORE=m CONFIG_USBIP_VHCI_HCD=m CONFIG_USBIP_HOST=m +CONFIG_USBIP_VUDC=m # CONFIG_USBIP_DEBUG is not set # CONFIG_INTEL_MEI is not set # CONFIG_VT6655 is not set @@ -5672,7 +5728,7 @@ CONFIG_IMA_MEASURE_PCR_IDX=10 CONFIG_IMA_LSM_RULES=y # CONFIG_EVM is not set -# CONFIG_PWM is not set +CONFIG_PWM=y # CONFIG_PWM_PCA9685 is not set CONFIG_LSM_MMAP_MIN_ADDR=65536 @@ -5694,6 +5750,7 @@ CONFIG_RCU_TORTURE_TEST_SLOW_INIT_DELAY=3 CONFIG_RCU_KTHREAD_PRIO=0 CONFIG_SPARSE_RCU_POINTER=y # CONFIG_RCU_EXPERT is not set +# CONFIG_RCU_PERF_TEST is not set # CONFIG_LIVEPATCH is not set @@ -5726,6 +5783,7 @@ CONFIG_CLEANCACHE=y CONFIG_FRONTSWAP=y CONFIG_ZSWAP=y CONFIG_ZBUD=y +CONFIG_Z3FOLD=y CONFIG_ZSMALLOC=y # CONFIG_ZSMALLOC_STAT is not set # CONFIG_PGTABLE_MAPPING is not set @@ -5806,6 +5864,7 @@ CONFIG_XZ_DEC_ARM=y CONFIG_TARGET_CORE=m CONFIG_ISCSI_TARGET=m +CONFIG_ISCSI_TARGET_CXGB4=m CONFIG_LOOPBACK_TARGET=m CONFIG_SBP_TARGET=m CONFIG_TCM_IBLOCK=m @@ -5832,6 +5891,8 @@ CONFIG_PSTORE_RAM=m # CONFIG_TEST_STATIC_KEYS is not set # CONFIG_TEST_PRINTF is not set # CONFIG_TEST_BITMAP is not set +# CONFIG_TEST_UUID is not set +# CONFIG_TEST_HASH is not set # CONFIG_AVERAGE is not set # CONFIG_VMXNET3 is not set @@ -5841,6 +5902,7 @@ CONFIG_PSTORE_RAM=m # CONFIG_GOLDFISH is not set CONFIG_CHROME_PLATFORMS=y +# CONFIG_CROS_KBD_LED_BACKLIGHT is not set CONFIG_BCMA=m CONFIG_BCMA_BLOCKIO=y @@ -5890,6 +5952,7 @@ CONFIG_POWERCAP=y # CONFIG_DEVFREQ_GOV_PERFORMANCE is not set # CONFIG_DEVFREQ_GOV_POWERSAVE is not set # CONFIG_DEVFREQ_GOV_USERSPACE is not set +# CONFIG_DEVFREQ_GOV_PASSIVE is not set # CONFIG_CPUFREQ_DT is not set @@ -5901,6 +5964,7 @@ CONFIG_MODULE_SIG_SHA256=y CONFIG_MODULE_SIG_KEY="certs/signing_key.pem" CONFIG_SYSTEM_TRUSTED_KEYS="" # CONFIG_SYSTEM_EXTRA_CERTIFICATE is not set +CONFIG_SECONDARY_TRUSTED_KEYRING=y CONFIG_PKCS7_MESSAGE_PARSER=y # CONFIG_PKCS7_TEST_KEY is not set CONFIG_SIGNED_PE_FILE_VERIFICATION=y @@ -5929,3 +5993,14 @@ CONFIG_SYSTEM_BLACKLIST_KEYRING=y # CONFIG_AHCI_QORIQ is not set # CONFIG_COMMON_CLK_SI514 is not set # CONFIG_CLK_QORIQ is not set + +# CONFIG_PWRSEQ_EMMC is not set +# CONFIG_PWRSEQ_SIMPLE is not set + +# The kernel code has a nice comment +# WARNING: Do not even assume this interface is staying stable! +# CONFIG_MCE_AMD_INJ is not set + +# CONFIG_EZNPS_GIC is not set + +CONFIG_NMI_LOG_BUF_SHIFT=13 diff --git a/config-nodebug b/config-nodebug index 5a4319a57..4bd461d8f 100644 --- a/config-nodebug +++ b/config-nodebug @@ -25,6 +25,7 @@ CONFIG_CPUMASK_OFFSTACK=y # CONFIG_FAULT_INJECTION_STACKTRACE_FILTER is not set # CONFIG_FAIL_IO_TIMEOUT is not set # CONFIG_FAIL_MMC_REQUEST is not set +# CONFIG_F2FS_FAULT_INJECTION is not set # CONFIG_LOCK_STAT is not set diff --git a/config-powerpc64-generic b/config-powerpc64-generic index ca5fea962..ba71ccec1 100644 --- a/config-powerpc64-generic +++ b/config-powerpc64-generic @@ -14,6 +14,8 @@ CONFIG_PPC_PSERIES=y # CONFIG_PPC_PMAC64 is not set # CONFIG_PPC_PS3 is not set CONFIG_HIBERNATION=n +CONFIG_PPC_RADIX_MMU=y +# CONFIG_FSL_LBC is not set CONFIG_EXTRA_TARGETS="" @@ -54,6 +56,7 @@ CONFIG_PPC_64K_PAGES=y CONFIG_PPC_SUBPAGE_PROT=y CONFIG_SCHED_SMT=y CONFIG_MEMORY_HOTPLUG=y +CONFIG_MEMORY_HOTPLUG_DEFAULT_ONLINE=y CONFIG_MEMORY_HOTREMOVE=y CONFIG_PPC64_SUPPORTS_MEMORY_FAILURE=y @@ -318,10 +321,6 @@ CONFIG_GPIO_WM831X=m # CONFIG_CAN_MSCAN is not set # CONFIG_CAN_MPC5XXX is not set # CONFIG_PMIC_ADP5520 is not set -# CONFIG_MFD_MAX8997 is not set -# CONFIG_MFD_TPS65910 is not set -# CONFIG_MFD_TPS65912_I2C is not set -# CONFIG_MFD_WL1273_CORE is not set # CONFIG_XPS_USB_HCD_XILINX is not set # CONFIG_MMC_SDHCI_OF_HLWD is not set diff --git a/config-s390x b/config-s390x index d1ed636d9..d559c6570 100644 --- a/config-s390x +++ b/config-s390x @@ -183,6 +183,7 @@ CONFIG_VIRTIO_CONSOLE=y CONFIG_MEMORY_HOTPLUG=y CONFIG_MEMORY_HOTREMOVE=y +CONFIG_MEMORY_HOTPLUG_DEFAULT_ONLINE=y CONFIG_CHSC_SCH=m # drivers/isdn/hardware/mISDN/hfcmulti.c:5255:2: error: #error "not running on big endian machines now" diff --git a/config-x86-generic b/config-x86-generic index a4b2a04a2..bbbd71da1 100644 --- a/config-x86-generic +++ b/config-x86-generic @@ -17,6 +17,10 @@ CONFIG_MICROCODE_INTEL=y CONFIG_MICROCODE_AMD=y CONFIG_PERF_EVENTS_AMD_POWER=m +CONFIG_PERF_EVENTS_INTEL_UNCORE=m +CONFIG_PERF_EVENTS_INTEL_RAPL=m +CONFIG_PERF_EVENTS_CSTATE=m +CONFIG_PERF_EVENTS_INTEL_CSTATE=m CONFIG_X86_MSR=y CONFIG_X86_CPUID=y @@ -48,6 +52,8 @@ CONFIG_FB_EFI=y CONFIG_EARLY_PRINTK_EFI=y CONFIG_EFI_RUNTIME_MAP=y # CONFIG_EFI_FAKE_MEMMAP is not set +# CONFIG_EFI_BOOTLOADER_CONTROL is not set +# CONFIG_EFI_CAPSULE_LOADER is not set # needs FB_SIMPLE to work correctly # CONFIG_X86_SYSFB is not set @@ -104,6 +110,7 @@ CONFIG_ACPI_CUSTOM_METHOD=m CONFIG_ACPI_BGRT=y # CONFIG_ACPI_EXTLOG is not set # CONFIG_ACPI_REV_OVERRIDE_POSSIBLE is not set +CONFIG_ACPI_TABLE_UPGRADE=y CONFIG_INTEL_SOC_PMIC=y CONFIG_PMIC_OPREGION=y @@ -326,6 +333,7 @@ CONFIG_SPI_MASTER=y CONFIG_SPI_PXA2XX=m # CONFIG_SPI_CADENCE is not set # CONFIG_SPI_ZYNQMP_GQSPI is not set +# CONFIG_SPI_ROCKCHIP is not set # CONFIG_DRM_PANEL_SAMSUNG_LD9040 is not set # CONFIG_DRM_PANEL_LG_LG4573 is not set # CONFIG_DRM_PANEL_PANASONIC_VVX10F034N00 is not set @@ -354,7 +362,6 @@ CONFIG_DMI_SYSFS=y CONFIG_ISCSI_IBFT_FIND=y CONFIG_ISCSI_IBFT=m -CONFIG_DMADEVICES=y CONFIG_INTEL_IOATDMA=m CONFIG_INTEL_IDMA64=m @@ -430,22 +437,10 @@ CONFIG_GPIO_ICH=m # CONFIG_MFD_DA9055 is not set # CONFIG_MFD_88PM800 is not set # CONFIG_MFD_88PM805 is not set -# CONFIG_MFD_MAX14577 is not set -# CONFIG_MFD_MAX77686 is not set -# CONFIG_MFD_MAX77693 is not set -# CONFIG_MFD_MAX8907 is not set -# CONFIG_MFD_MAX8997 is not set # CONFIG_MFD_RC5T583 is not set # CONFIG_MFD_SEC_CORE is not set # CONFIG_MFD_SMSC is not set # CONFIG_MFD_LP8788 is not set -# CONFIG_MFD_PALMAS is not set -# CONFIG_MFD_TPS65090 is not set -# CONFIG_MFD_TPS65910 is not set -# CONFIG_MFD_TPS65912_I2C is not set -# CONFIG_MFD_TPS80031 is not set -# CONFIG_TWL4030_CORE is not set -# CONFIG_TWL6040_CORE is not set CONFIG_PCI_CNB20LE_QUIRK=y @@ -461,6 +456,7 @@ CONFIG_HPWDT_NMI_DECODING=y # CONFIG_GPIO_INTEL_MID is not set CONFIG_PCH_DMA=m CONFIG_INTEL_IPS=m +CONFIG_INTEL_PMC_CORE=y # CONFIG_IBM_RTL is not set CONFIG_VIDEO_VIA_CAMERA=m @@ -568,17 +564,19 @@ CONFIG_SND_SOC_INTEL_CHT_BSW_MAX98090_TI_MACH=m CONFIG_SND_SOC_INTEL_SKL_RT286_MACH=m CONFIG_SND_SOC_INTEL_SKL_NAU88L25_SSM4567_MACH=m CONFIG_SND_SOC_INTEL_SKL_NAU88L25_MAX98357A_MACH=m +CONFIG_SND_SOC_INTEL_BXT_RT298_MACH=m CONFIG_SND_SOC_AC97_CODEC=m # CONFIG_SND_SOC_TAS571X is not set # CONFIG_SND_SUN4I_CODEC is not set # CONFIG_SND_SUN4I_SPDIF is not set -# CONFIG_INTEL_POWERCLAMP is not set +CONFIG_INTEL_POWERCLAMP=m CONFIG_X86_PKG_TEMP_THERMAL=m CONFIG_INTEL_SOC_DTS_THERMAL=m CONFIG_INT340X_THERMAL=m CONFIG_INTEL_RAPL=m CONFIG_INTEL_PCH_THERMAL=m +CONFIG_INT3406_THERMAL=m CONFIG_VMWARE_VMCI=m CONFIG_VMWARE_VMCI_VSOCKETS=m diff --git a/config-x86_64-generic b/config-x86_64-generic index abac3ee5b..d1e9105c5 100644 --- a/config-x86_64-generic +++ b/config-x86_64-generic @@ -117,6 +117,7 @@ CONFIG_SPARSEMEM_EXTREME=y CONFIG_SPARSEMEM_VMEMMAP=y # CONFIG_MOVABLE_NODE is not set CONFIG_MEMORY_HOTPLUG=y +CONFIG_MEMORY_HOTPLUG_DEFAULT_ONLINE=y # CONFIG_ARCH_MEMORY_PROBE is not set CONFIG_MEMORY_HOTREMOVE=y # CONFIG_DEFERRED_STRUCT_PAGE_INIT is not set @@ -222,8 +223,12 @@ CONFIG_CMA_AREAS=7 CONFIG_ZONE_DMA=y CONFIG_ZONE_DEVICE=y CONFIG_NVDIMM_PFN=y +CONFIG_NVDIMM_DAX=y CONFIG_ND_PFN=m +CONFIG_DEV_DAX=m +CONFIG_DEV_DAX_PMEM=m + # Staging CONFIG_STAGING_RDMA=y CONFIG_INFINIBAND_HFI1=m diff --git a/drm-amdgpu-Disable-RPM-helpers-while-reprobing.patch b/drm-amdgpu-Disable-RPM-helpers-while-reprobing.patch deleted file mode 100644 index 562d20eb5..000000000 --- a/drm-amdgpu-Disable-RPM-helpers-while-reprobing.patch +++ /dev/null @@ -1,70 +0,0 @@ -From patchwork Fri Jul 8 15:37:35 2016 -Content-Type: text/plain; charset="utf-8" -MIME-Version: 1.0 -Content-Transfer-Encoding: 7bit -Subject: drm/amdgpu: Disable RPM helpers while reprobing connectors on resume -From: cpaul@redhat.com -X-Patchwork-Id: 97837 -Message-Id: <1467992256-23832-1-git-send-email-cpaul@redhat.com> -To: amd-gfx@lists.freedesktop.org -Cc: Tom St Denis , Jammy Zhou , - open list , stable@vger.kernel.org, - "open list:RADEON and AMDGPU DRM DRIVERS" - , - Alex Deucher , Lyude , - Flora Cui , - =?UTF-8?q?Christian=20K=C3=B6nig?= , - Monk Liu -Date: Fri, 8 Jul 2016 11:37:35 -0400 - -Just about all of amdgpu's connector probing functions try to acquire -runtime PM refs. If we try to do this in the context of -amdgpu_resume_kms by calling drm_helper_hpd_irq_event(), we end up -deadlocking the system. - -Since we're guaranteed to be holding the spinlock for RPM in -amdgpu_resume_kms, and we already know the GPU is in working order, we -need to prevent the RPM helpers from trying to run during the initial -connector reprobe on resume. - -There's a couple of solutions I've explored for fixing this, but this -one by far seems to be the simplest and most reliable (plus I'm pretty -sure that's what disable_depth is there for anyway). - -Reproduction recipe: - - Get any laptop dual GPUs using PRIME - - Make sure runtime PM is enabled for amdgpu - - Boot the machine - - If the machine managed to boot without hanging, switch out of X to - another VT. This should definitely cause X to hang infinitely. - -Cc: stable@vger.kernel.org -Signed-off-by: Lyude ---- - drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 12 ++++++++++++ - 1 file changed, 12 insertions(+) - -diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c -index 6e92008..46c1fee 100644 ---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c -+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c -@@ -1841,7 +1841,19 @@ int amdgpu_resume_kms(struct drm_device *dev, bool resume, bool fbcon) - } - - drm_kms_helper_poll_enable(dev); -+ -+ /* -+ * Most of the connector probing functions try to acquire runtime pm -+ * refs to ensure that the GPU is powered on when connector polling is -+ * performed. Since we're calling this from a runtime PM callback, -+ * trying to acquire rpm refs will cause us to deadlock. -+ * -+ * Since we're guaranteed to be holding the rpm lock, it's safe to -+ * temporarily disable the rpm helpers so this doesn't deadlock us. -+ */ -+ dev->dev->power.disable_depth++; - drm_helper_hpd_irq_event(dev); -+ dev->dev->power.disable_depth--; - - if (fbcon) { - amdgpu_fbdev_set_suspend(adev, 0); diff --git a/drm-i915-hush-check-crtc-state.patch b/drm-i915-hush-check-crtc-state.patch index fa4baffbf..acf05056c 100644 --- a/drm-i915-hush-check-crtc-state.patch +++ b/drm-i915-hush-check-crtc-state.patch @@ -1,4 +1,4 @@ -From 02f47b49ab1cdbe62ceb71b658e2c469799ae368 Mon Sep 17 00:00:00 2001 +From 5550f20b5f9becb485fb3a67bf0193025d40bc6f Mon Sep 17 00:00:00 2001 From: Adam Jackson Date: Wed, 13 Nov 2013 10:17:24 -0500 Subject: [PATCH] drm/i915: hush check crtc state @@ -15,18 +15,18 @@ Upstream-status: http://lists.freedesktop.org/archives/intel-gfx/2013-November/0 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c -index ca9278be49f7..308ac0539a87 100644 +index 46f9be3ad5a2..ad2e62e4cdba 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c -@@ -12688,7 +12688,7 @@ check_crtc_state(struct drm_device *dev, struct drm_atomic_state *old_state) - sw_config = to_intel_crtc_state(crtc->state); - if (!intel_pipe_config_compare(dev, sw_config, - pipe_config, false)) { -- I915_STATE_WARN(1, "pipe state doesn't match!\n"); -+ DRM_DEBUG_KMS("pipe state doesn't match!\n"); - intel_dump_pipe_config(intel_crtc, pipe_config, - "[hw state]"); - intel_dump_pipe_config(intel_crtc, sw_config, +@@ -12970,7 +12970,7 @@ verify_crtc_state(struct drm_crtc *crtc, + sw_config = to_intel_crtc_state(crtc->state); + if (!intel_pipe_config_compare(dev, sw_config, + pipe_config, false)) { +- I915_STATE_WARN(1, "pipe state doesn't match!\n"); ++ DRM_DEBUG_KMS("pipe state doesn't match!\n"); + intel_dump_pipe_config(intel_crtc, pipe_config, + "[hw state]"); + intel_dump_pipe_config(intel_crtc, sw_config, -- -2.4.3 +2.5.5 diff --git a/efi-Make-EFI_SECURE_BOOT_SIG_ENFORCE-depend-on-EFI.patch b/efi-Make-EFI_SECURE_BOOT_SIG_ENFORCE-depend-on-EFI.patch deleted file mode 100644 index 095bea782..000000000 --- a/efi-Make-EFI_SECURE_BOOT_SIG_ENFORCE-depend-on-EFI.patch +++ /dev/null @@ -1,30 +0,0 @@ -From 0081083434db41c15b72eced975da0bd9b80566b Mon Sep 17 00:00:00 2001 -From: Josh Boyer -Date: Tue, 27 Aug 2013 13:28:43 -0400 -Subject: [PATCH 12/20] efi: Make EFI_SECURE_BOOT_SIG_ENFORCE depend on EFI - -The functionality of the config option is dependent upon the platform being -UEFI based. Reflect this in the config deps. - -Signed-off-by: Josh Boyer ---- - arch/x86/Kconfig | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig -index 14db458f4774..f6ff0a86d841 100644 ---- a/arch/x86/Kconfig -+++ b/arch/x86/Kconfig -@@ -1735,7 +1735,8 @@ config EFI_MIXED - If unsure, say N. - - config EFI_SECURE_BOOT_SIG_ENFORCE -- def_bool n -+ def_bool n -+ depends on EFI - prompt "Force module signing when UEFI Secure Boot is enabled" - ---help--- - UEFI Secure Boot provides a mechanism for ensuring that the --- -2.4.3 - diff --git a/filter-aarch64.sh b/filter-aarch64.sh index 753358630..012d39724 100644 --- a/filter-aarch64.sh +++ b/filter-aarch64.sh @@ -13,4 +13,4 @@ driverdirs="atm auxdisplay bcma bluetooth firewire fmc infiniband isdn leds medi ethdrvs="3com adaptec arc alteon atheros broadcom cadence calxeda chelsio cisco dec dlink emulex icplus marvell micrel myricom neterion nvidia oki-semi packetengines qlogic rdc renesas sfc silan sis smsc stmicro sun tehuti ti via wiznet xircom" -singlemods="ntb_netdev iscsi_ibft iscsi_boot_sysfs megaraid pmcraid qla1280 9pnet_rdma rpcrdma hid-picolcd hid-prodikeys hwa-hc hwpoison-inject target_core_user sbp_target cxgbit iw_cxgb3 iw_cxgb4 cxgb3i cxgb3i cxgb3i_ddp cxgb4i" +singlemods="ntb_netdev iscsi_ibft iscsi_boot_sysfs megaraid pmcraid qla1280 9pnet_rdma rpcrdma nvmet-rdma nvme-rdma hid-picolcd hid-prodikeys hwa-hc hwpoison-inject target_core_user sbp_target cxgbit iw_cxgb3 iw_cxgb4 cxgb3i cxgb3i cxgb3i_ddp cxgb4i" diff --git a/filter-armv7hl.sh b/filter-armv7hl.sh index 31c277c6d..6dc3efdfa 100644 --- a/filter-armv7hl.sh +++ b/filter-armv7hl.sh @@ -15,4 +15,4 @@ ethdrvs="3com adaptec alteon altera amd atheros broadcom cadence chelsio cisco d drmdrvs="amd armada bridge ast exynos i2c imx mgag200 msm omapdrm panel nouveau radeon rockchip tegra tilcdc via" -singlemods="ntb_netdev iscsi_ibft iscsi_boot_sysfs megaraid pmcraid qla1280 9pnet_rdma rpcrdma hid-picolcd hid-prodikeys hwa-hc hwpoison-inject target_core_user sbp_target cxgbit iw_cxgb3 iw_cxgb4 cxgb3i cxgb3i cxgb3i_ddp cxgb4i" +singlemods="ntb_netdev iscsi_ibft iscsi_boot_sysfs megaraid pmcraid qla1280 9pnet_rdma rpcrdma nvmet-rdma nvme-rdma hid-picolcd hid-prodikeys hwa-hc hwpoison-inject target_core_user sbp_target cxgbit iw_cxgb3 iw_cxgb4 cxgb3i cxgb3i cxgb3i_ddp cxgb4i" diff --git a/filter-i686.sh b/filter-i686.sh index 3a9f7b806..628e17c60 100644 --- a/filter-i686.sh +++ b/filter-i686.sh @@ -11,4 +11,4 @@ driverdirs="atm auxdisplay bcma bluetooth firewire fmc infiniband isdn leds media memstick mfd mmc mtd mwave nfc ntb pcmcia platform power ssb staging tty uio uwb w1" -singlemods="ntb_netdev iscsi_ibft iscsi_boot_sysfs megaraid pmcraid qla1280 9pnet_rdma rpcrdma hid-picolcd hid-prodikeys hwa-hc hwpoison-inject hid-sensor-hub hid-sensor-magn-3d hid-sensor-incl-3d hid-sensor-gyro-3d hid-sensor-iio-common hid-sensor-accel-3d hid-sensor-trigger hid-sensor-als hid-sensor-rotation target_core_user sbp_target" +singlemods="ntb_netdev iscsi_ibft iscsi_boot_sysfs megaraid pmcraid qla1280 9pnet_rdma rpcrdma nvmet-rdma nvme-rdma hid-picolcd hid-prodikeys hwa-hc hwpoison-inject hid-sensor-hub hid-sensor-magn-3d hid-sensor-incl-3d hid-sensor-gyro-3d hid-sensor-iio-common hid-sensor-accel-3d hid-sensor-trigger hid-sensor-als hid-sensor-rotation target_core_user sbp_target cxgbit iw_cxgb3 iw_cxgb4 cxgb3i cxgb3i cxgb3i_ddp cxgb4i" diff --git a/filter-modules.sh b/filter-modules.sh index ef86416d1..f9bfa100c 100755 --- a/filter-modules.sh +++ b/filter-modules.sh @@ -34,7 +34,7 @@ netprots="6lowpan appletalk atm ax25 batman-adv bluetooth can dccp dsa ieee80215 drmdrvs="amd ast gma500 i2c i915 mgag200 nouveau radeon via " -singlemods="ntb_netdev iscsi_ibft iscsi_boot_sysfs megaraid pmcraid qla1280 9pnet_rdma rpcrdma hid-picolcd hid-prodikeys hwa-hc hwpoison-inject hid-sensor-hub target_core_user sbp_target" +singlemods="ntb_netdev iscsi_ibft iscsi_boot_sysfs megaraid pmcraid qla1280 9pnet_rdma rpcrdma nvmet-rdma nvme-rdma hid-picolcd hid-prodikeys hwa-hc hwpoison-inject hid-sensor-hub target_core_user sbp_target cxgbit iw_cxgb3 iw_cxgb4 cxgb3i cxgb3i cxgb3i_ddp cxgb4i" # Grab the arch-specific filter list overrides source ./filter-$2.sh diff --git a/filter-ppc64.sh b/filter-ppc64.sh index b367bc673..0df93835c 100644 --- a/filter-ppc64.sh +++ b/filter-ppc64.sh @@ -11,4 +11,4 @@ driverdirs="atm auxdisplay bcma bluetooth firewire fmc infiniband isdn leds media memstick message mmc mtd mwave nfc ntb pcmcia platform power ssb staging tty uio uwb w1" -singlemods="ntb_netdev iscsi_ibft iscsi_boot_sysfs megaraid pmcraid qla1280 9pnet_rdma rpcrdma hid-picolcd hid-prodikeys hwa-hc hwpoison-inject target_core_user sbp_target" +singlemods="ntb_netdev iscsi_ibft iscsi_boot_sysfs megaraid pmcraid qla1280 9pnet_rdma rpcrdma nvmet-rdma nvme-rdma hid-picolcd hid-prodikeys hwa-hc hwpoison-inject target_core_user sbp_target cxgbit iw_cxgb3 iw_cxgb4 cxgb3i cxgb3i cxgb3i_ddp cxgb4i" diff --git a/filter-ppc64le.sh b/filter-ppc64le.sh index 9469b6636..c14e5cc8c 100644 --- a/filter-ppc64le.sh +++ b/filter-ppc64le.sh @@ -11,4 +11,4 @@ driverdirs="atm auxdisplay bcma bluetooth firewire fmc infiniband isdn leds media memstick message mmc mtd mwave nfc ntb pcmcia platform power ssb staging tty uio uwb w1" -singlemods="ntb_netdev iscsi_ibft iscsi_boot_sysfs megaraid pmcraid qla1280 9pnet_rdma rpcrdma hid-picolcd hid-prodikeys hwa-hc hwpoison-inject target_core_user sbp_target" +singlemods="ntb_netdev iscsi_ibft iscsi_boot_sysfs megaraid pmcraid qla1280 9pnet_rdma rpcrdma nvmet-rdma nvme-rdma hid-picolcd hid-prodikeys hwa-hc hwpoison-inject target_core_user sbp_target cxgbit iw_cxgb3 iw_cxgb4 cxgb3i cxgb3i cxgb3i_ddp cxgb4i" diff --git a/filter-ppc64p7.sh b/filter-ppc64p7.sh index d0ad47fba..6c9383ac0 100644 --- a/filter-ppc64p7.sh +++ b/filter-ppc64p7.sh @@ -11,4 +11,4 @@ driverdirs="atm auxdisplay bcma bluetooth firewire fmc infiniband isdn leds media memstick message mmc mtd mwave nfc ntb pcmcia platform power ssb staging tty uio uwb w1" -singlemods="ntb_netdev iscsi_ibft iscsi_boot_sysfs megaraid pmcraid qla1280 9pnet_rdma rpcrdma hid-picolcd hid-prodikeys hwa-hc hwpoison-inject target_core_user sbp_target" +singlemods="ntb_netdev iscsi_ibft iscsi_boot_sysfs megaraid pmcraid qla1280 9pnet_rdma rpcrdma nvmet-rdma nvme-rdma hid-picolcd hid-prodikeys hwa-hc hwpoison-inject target_core_user sbp_target cxgbit iw_cxgb3 iw_cxgb4 cxgb3i cxgb3i cxgb3i_ddp cxgb4i" diff --git a/geekbox-v4-device-tree-support.patch b/geekbox-v4-device-tree-support.patch index 77c1e5c28..11f30e7b2 100644 --- a/geekbox-v4-device-tree-support.patch +++ b/geekbox-v4-device-tree-support.patch @@ -1,26 +1,24 @@ -From 4d321bf15d2d5e5b1b674f2a26a1c5202090a800 Mon Sep 17 00:00:00 2001 +From 277aa4c25655e8f746f02879d26298772244958a Mon Sep 17 00:00:00 2001 From: Peter Robinson Date: Thu, 17 Mar 2016 15:19:04 +0000 Subject: [PATCH] geekbox v4 patchset --- - Documentation/devicetree/bindings/arm/rockchip.txt | 9 + - arch/arm64/boot/dts/rockchip/Makefile | 2 + - arch/arm64/boot/dts/rockchip/rk3368-evb.dtsi | 2 +- - .../dts/rockchip/rk3368-geekbox-landingship.dts | 57 ++++ - arch/arm64/boot/dts/rockchip/rk3368-geekbox.dts | 319 +++++++++++++++++++++ - arch/arm64/boot/dts/rockchip/rk3368-r88.dts | 2 +- - 6 files changed, 389 insertions(+), 2 deletions(-) + Documentation/devicetree/bindings/arm/rockchip.txt | 9 ++++ + arch/arm64/boot/dts/rockchip/Makefile | 1 + + arch/arm64/boot/dts/rockchip/rk3368-evb.dtsi | 2 +- + .../dts/rockchip/rk3368-geekbox-landingship.dts | 57 ++++++++++++++++++++++ + arch/arm64/boot/dts/rockchip/rk3368-r88.dts | 2 +- + 5 files changed, 69 insertions(+), 2 deletions(-) create mode 100644 arch/arm64/boot/dts/rockchip/rk3368-geekbox-landingship.dts - create mode 100644 arch/arm64/boot/dts/rockchip/rk3368-geekbox.dts diff --git a/Documentation/devicetree/bindings/arm/rockchip.txt b/Documentation/devicetree/bindings/arm/rockchip.txt -index 078c14f..ae84f4e 100644 +index 715d960..7cfadac 100644 --- a/Documentation/devicetree/bindings/arm/rockchip.txt +++ b/Documentation/devicetree/bindings/arm/rockchip.txt -@@ -87,6 +87,15 @@ Rockchip platforms device tree bindings - "google,veyron-speedy-rev3", "google,veyron-speedy-rev2", - "google,veyron-speedy", "google,veyron", "rockchip,rk3288"; +@@ -95,6 +95,15 @@ Rockchip platforms device tree bindings + Required root node properties: + - compatible = "mqmaker,miqi", "rockchip,rk3288"; +- GeekBuying GeekBox: + Required root node properties: @@ -35,21 +33,21 @@ index 078c14f..ae84f4e 100644 Required root node properties: - compatible = "rockchip,rk3368-evb-act8846", "rockchip,rk3368"; diff --git a/arch/arm64/boot/dts/rockchip/Makefile b/arch/arm64/boot/dts/rockchip/Makefile -index e3f0b5f..201bcd9 100644 +index 7037a16..e002ebe 100644 --- a/arch/arm64/boot/dts/rockchip/Makefile +++ b/arch/arm64/boot/dts/rockchip/Makefile -@@ -1,4 +1,6 @@ +@@ -1,5 +1,6 @@ dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3368-evb-act8846.dtb -+dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3368-geekbox.dtb + dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3368-geekbox.dtb +dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3368-geekbox-landingship.dtb dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3368-r88.dtb + dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3399-evb.dtb - always := $(dtb-y) diff --git a/arch/arm64/boot/dts/rockchip/rk3368-evb.dtsi b/arch/arm64/boot/dts/rockchip/rk3368-evb.dtsi -index 8c219cc..e4ceb53 100644 +index fff8b19..bd4f2cf 100644 --- a/arch/arm64/boot/dts/rockchip/rk3368-evb.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3368-evb.dtsi -@@ -48,7 +48,7 @@ +@@ -49,7 +49,7 @@ stdout-path = "serial2:115200n8"; }; @@ -121,336 +119,11 @@ index 0000000..a28ace9 +&i2c2 { + status = "okay"; +}; -diff --git a/arch/arm64/boot/dts/rockchip/rk3368-geekbox.dts b/arch/arm64/boot/dts/rockchip/rk3368-geekbox.dts -new file mode 100644 -index 0000000..46cdddf ---- /dev/null -+++ b/arch/arm64/boot/dts/rockchip/rk3368-geekbox.dts -@@ -0,0 +1,319 @@ -+/* -+ * Copyright (c) 2016 Andreas Färber -+ * -+ * This file is dual-licensed: you can use it either under the terms -+ * of the GPL or the X11 license, at your option. Note that this dual -+ * licensing only applies to this file, and not this project as a -+ * whole. -+ * -+ * a) This file 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. -+ * -+ * This file 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. -+ * -+ * Or, alternatively, -+ * -+ * b) Permission is hereby granted, free of charge, to any person -+ * obtaining a copy of this software and associated documentation -+ * files (the "Software"), to deal in the Software without -+ * restriction, including without limitation the rights to use, -+ * copy, modify, merge, publish, distribute, sublicense, and/or -+ * sell copies of the Software, and to permit persons to whom the -+ * Software is furnished to do so, subject to the following -+ * conditions: -+ * -+ * The above copyright notice and this permission notice shall be -+ * included in all copies or substantial portions of the Software. -+ * -+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -+ * OTHER DEALINGS IN THE SOFTWARE. -+ */ -+ -+/dts-v1/; -+#include "rk3368.dtsi" -+#include -+ -+/ { -+ model = "GeekBox"; -+ compatible = "geekbuying,geekbox", "rockchip,rk3368"; -+ -+ chosen { -+ stdout-path = "serial2:115200n8"; -+ }; -+ -+ memory@0 { -+ device_type = "memory"; -+ reg = <0x0 0x0 0x0 0x80000000>; -+ }; -+ -+ ext_gmac: gmac-clk { -+ compatible = "fixed-clock"; -+ clock-frequency = <125000000>; -+ clock-output-names = "ext_gmac"; -+ #clock-cells = <0>; -+ }; -+ -+ ir: ir-receiver { -+ compatible = "gpio-ir-receiver"; -+ gpios = <&gpio3 30 GPIO_ACTIVE_LOW>; -+ pinctrl-names = "default"; -+ pinctrl-0 = <&ir_int>; -+ }; -+ -+ keys: gpio-keys { -+ compatible = "gpio-keys"; -+ pinctrl-names = "default"; -+ pinctrl-0 = <&pwr_key>; -+ -+ power { -+ gpios = <&gpio0 2 GPIO_ACTIVE_LOW>; -+ label = "GPIO Power"; -+ linux,code = ; -+ wakeup-source; -+ }; -+ }; -+ -+ leds: gpio-leds { -+ compatible = "gpio-leds"; -+ -+ blue { -+ gpios = <&gpio2 2 GPIO_ACTIVE_HIGH>; -+ label = "geekbox:blue:led"; -+ default-state = "on"; -+ }; -+ -+ red { -+ gpios = <&gpio2 3 GPIO_ACTIVE_HIGH>; -+ label = "geekbox:red:led"; -+ default-state = "off"; -+ }; -+ }; -+ -+ vcc_sys: vcc-sys-regulator { -+ compatible = "regulator-fixed"; -+ regulator-name = "vcc_sys"; -+ regulator-min-microvolt = <5000000>; -+ regulator-max-microvolt = <5000000>; -+ regulator-always-on; -+ regulator-boot-on; -+ }; -+}; -+ -+&emmc { -+ status = "okay"; -+ bus-width = <8>; -+ cap-mmc-highspeed; -+ clock-frequency = <150000000>; -+ disable-wp; -+ keep-power-in-suspend; -+ non-removable; -+ num-slots = <1>; -+ vmmc-supply = <&vcc_io>; -+ vqmmc-supply = <&vcc18_flash>; -+ pinctrl-names = "default"; -+ pinctrl-0 = <&emmc_clk>, <&emmc_cmd>, <&emmc_bus8>; -+}; -+ -+&gmac { -+ status = "okay"; -+ phy-supply = <&vcc_lan>; -+ phy-mode = "rgmii"; -+ clock_in_out = "input"; -+ assigned-clocks = <&cru SCLK_MAC>; -+ assigned-clock-parents = <&ext_gmac>; -+ pinctrl-names = "default"; -+ pinctrl-0 = <&rgmii_pins>; -+ tx_delay = <0x30>; -+ rx_delay = <0x10>; -+}; -+ -+&i2c0 { -+ status = "okay"; -+ -+ rk808: pmic@1b { -+ compatible = "rockchip,rk808"; -+ reg = <0x1b>; -+ pinctrl-names = "default"; -+ pinctrl-0 = <&pmic_int>, <&pmic_sleep>; -+ interrupt-parent = <&gpio0>; -+ interrupts = <5 IRQ_TYPE_LEVEL_LOW>; -+ rockchip,system-power-controller; -+ vcc1-supply = <&vcc_sys>; -+ vcc2-supply = <&vcc_sys>; -+ vcc3-supply = <&vcc_sys>; -+ vcc4-supply = <&vcc_sys>; -+ vcc6-supply = <&vcc_sys>; -+ vcc7-supply = <&vcc_sys>; -+ vcc8-supply = <&vcc_io>; -+ vcc9-supply = <&vcc_sys>; -+ vcc10-supply = <&vcc_sys>; -+ vcc11-supply = <&vcc_sys>; -+ vcc12-supply = <&vcc_io>; -+ clock-output-names = "xin32k", "rk808-clkout2"; -+ #clock-cells = <1>; -+ -+ regulators { -+ vdd_cpu: DCDC_REG1 { -+ regulator-always-on; -+ regulator-boot-on; -+ regulator-min-microvolt = <700000>; -+ regulator-max-microvolt = <1500000>; -+ regulator-name = "vdd_cpu"; -+ }; -+ -+ vdd_log: DCDC_REG2 { -+ regulator-always-on; -+ regulator-boot-on; -+ regulator-min-microvolt = <700000>; -+ regulator-max-microvolt = <1500000>; -+ regulator-name = "vdd_log"; -+ }; -+ -+ vcc_ddr: DCDC_REG3 { -+ regulator-always-on; -+ regulator-boot-on; -+ regulator-name = "vcc_ddr"; -+ }; -+ -+ vcc_io: DCDC_REG4 { -+ regulator-always-on; -+ regulator-boot-on; -+ regulator-min-microvolt = <3300000>; -+ regulator-max-microvolt = <3300000>; -+ regulator-name = "vcc_io"; -+ }; -+ -+ vcc18_flash: LDO_REG1 { -+ regulator-always-on; -+ regulator-boot-on; -+ regulator-min-microvolt = <1800000>; -+ regulator-max-microvolt = <1800000>; -+ regulator-name = "vcc18_flash"; -+ }; -+ -+ vcc33_lcd: LDO_REG2 { -+ regulator-always-on; -+ regulator-boot-on; -+ regulator-min-microvolt = <3300000>; -+ regulator-max-microvolt = <3300000>; -+ regulator-name = "vcc33_lcd"; -+ }; -+ -+ vdd_10: LDO_REG3 { -+ regulator-always-on; -+ regulator-boot-on; -+ regulator-min-microvolt = <1000000>; -+ regulator-max-microvolt = <1000000>; -+ regulator-name = "vdd_10"; -+ }; -+ -+ vcca_18: LDO_REG4 { -+ regulator-boot-on; -+ regulator-min-microvolt = <1800000>; -+ regulator-max-microvolt = <1800000>; -+ regulator-name = "vcca_18"; -+ }; -+ -+ vccio_sd: LDO_REG5 { -+ regulator-always-on; -+ regulator-boot-on; -+ regulator-min-microvolt = <1800000>; -+ regulator-max-microvolt = <3300000>; -+ regulator-name = "vccio_sd"; -+ }; -+ -+ vdd10_lcd: LDO_REG6 { -+ regulator-always-on; -+ regulator-boot-on; -+ regulator-min-microvolt = <1000000>; -+ regulator-max-microvolt = <1000000>; -+ regulator-name = "vdd10_lcd"; -+ }; -+ -+ vcc_18: LDO_REG7 { -+ regulator-always-on; -+ regulator-boot-on; -+ regulator-min-microvolt = <1800000>; -+ regulator-max-microvolt = <1800000>; -+ regulator-name = "vcc_18"; -+ }; -+ -+ vcc18_lcd: LDO_REG8 { -+ regulator-always-on; -+ regulator-boot-on; -+ regulator-min-microvolt = <1800000>; -+ regulator-max-microvolt = <1800000>; -+ regulator-name = "vcc18_lcd"; -+ }; -+ -+ vcc_sd: SWITCH_REG1 { -+ regulator-always-on; -+ regulator-boot-on; -+ regulator-name = "vcc_sd"; -+ }; -+ -+ vcc_lan: SWITCH_REG2 { -+ regulator-always-on; -+ regulator-boot-on; -+ regulator-name = "vcc_lan"; -+ }; -+ }; -+ }; -+}; -+ -+&pinctrl { -+ ir { -+ ir_int: ir-int { -+ rockchip,pins = <3 30 RK_FUNC_GPIO &pcfg_pull_none>; -+ }; -+ }; -+ -+ keys { -+ pwr_key: pwr-key { -+ rockchip,pins = <0 2 RK_FUNC_GPIO &pcfg_pull_none>; -+ }; -+ }; -+ -+ pmic { -+ pmic_sleep: pmic-sleep { -+ rockchip,pins = <0 0 RK_FUNC_2 &pcfg_pull_none>; -+ }; -+ -+ pmic_int: pmic-int { -+ rockchip,pins = <0 5 RK_FUNC_GPIO &pcfg_pull_up>; -+ }; -+ }; -+}; -+ -+&tsadc { -+ status = "okay"; -+ rockchip,hw-tshut-mode = <0>; /* CRU */ -+ rockchip,hw-tshut-polarity = <1>; /* high */ -+}; -+ -+&uart2 { -+ status = "okay"; -+}; -+ -+&usb_host0_ehci { -+ status = "okay"; -+}; -+ -+&usb_otg { -+ status = "okay"; -+}; -+ -+&wdt { -+ status = "okay"; -+}; diff --git a/arch/arm64/boot/dts/rockchip/rk3368-r88.dts b/arch/arm64/boot/dts/rockchip/rk3368-r88.dts -index 104cbee..9548129 100644 +index b56b720..5ea68c4 100644 --- a/arch/arm64/boot/dts/rockchip/rk3368-r88.dts +++ b/arch/arm64/boot/dts/rockchip/rk3368-r88.dts -@@ -51,7 +51,7 @@ +@@ -52,7 +52,7 @@ stdout-path = "serial2:115200n8"; }; @@ -460,5 +133,5 @@ index 104cbee..9548129 100644 reg = <0x0 0x0 0x0 0x40000000>; }; -- -2.5.0 +2.5.5 diff --git a/hp-wmi-fix-wifi-cannot-be-hard-unblock.patch b/hp-wmi-fix-wifi-cannot-be-hard-unblock.patch deleted file mode 100644 index 27744a0c3..000000000 --- a/hp-wmi-fix-wifi-cannot-be-hard-unblock.patch +++ /dev/null @@ -1,48 +0,0 @@ -From patchwork Mon Jun 13 11:44:00 2016 -Content-Type: text/plain; charset="utf-8" -MIME-Version: 1.0 -Content-Transfer-Encoding: 7bit -Subject: hp-wmi: fix wifi cannot be hard-unblock -From: Alex Hung -X-Patchwork-Id: 9172765 -Message-Id: <1465818240-11994-1-git-send-email-alex.hung@canonical.com> -To: dvhart@infradead.org, platform-driver-x86@vger.kernel.org, - alex.hung@canonical.com, david.ward@ll.mit.edu -Date: Mon, 13 Jun 2016 19:44:00 +0800 - -Several users reported wifi cannot be unblocked as discussed in [1]. -This patch removes the useof 2009 flag by BIOS but uses the actual WMI -function calls - it will be skipped if WMI reports unsupported - -[1] https://bugzilla.kernel.org/show_bug.cgi?id=69131 - -Signed-off-by: Alex Hung ---- - drivers/platform/x86/hp-wmi.c | 7 ++++++- - 1 file changed, 6 insertions(+), 1 deletion(-) - -diff --git a/drivers/platform/x86/hp-wmi.c b/drivers/platform/x86/hp-wmi.c -index 6f145f2..96ffda4 100644 ---- a/drivers/platform/x86/hp-wmi.c -+++ b/drivers/platform/x86/hp-wmi.c -@@ -718,6 +718,11 @@ static int __init hp_wmi_rfkill_setup(struct platform_device *device) - if (err) - return err; - -+ err = hp_wmi_perform_query(HPWMI_WIRELESS_QUERY, 1, &wireless, -+ sizeof(wireless), 0); -+ if (err) -+ return err; -+ - if (wireless & 0x1) { - wifi_rfkill = rfkill_alloc("hp-wifi", &device->dev, - RFKILL_TYPE_WLAN, -@@ -882,7 +887,7 @@ static int __init hp_wmi_bios_setup(struct platform_device *device) - wwan_rfkill = NULL; - rfkill2_count = 0; - -- if (hp_wmi_bios_2009_later() || hp_wmi_rfkill_setup(device)) -+ if (hp_wmi_rfkill_setup(device)) - hp_wmi_rfkill2_setup(device); - - err = device_create_file(&device->dev, &dev_attr_display); diff --git a/kernel.spec b/kernel.spec index 34af9f0a9..9788f61d9 100644 --- a/kernel.spec +++ b/kernel.spec @@ -42,19 +42,19 @@ Summary: The Linux kernel # For non-released -rc kernels, this will be appended after the rcX and # gitX tags, so a 3 here would become part of release "0.rcX.gitX.3" # -%global baserelease 300 +%global baserelease 200 %global fedora_build %{baserelease} # base_sublevel is the kernel version we're starting with and patching # on top of -- for example, 3.1-rc7-git1 starts with a 3.0 base, # which yields a base_sublevel of 0. -%define base_sublevel 6 +%define base_sublevel 7 ## If this is a released kernel ## %if 0%{?released_kernel} # Do we have a -stable update to apply? -%define stable_update 7 +%define stable_update 2 # Set rpm version accordingly %if 0%{?stable_update} %define stablerev %{stable_update} @@ -371,7 +371,7 @@ Requires: kernel-modules-uname-r = %{KVERREL}%{?variant} # List the packages used during the kernel build # BuildRequires: kmod, patch, bash, sh-utils, tar, git -BuildRequires: bzip2, xz, findutils, gzip, m4, perl, perl-Carp, make, diffutils, gawk +BuildRequires: bzip2, xz, findutils, gzip, m4, perl, perl-Carp, perl-devel, perl-generators, make, diffutils, gawk BuildRequires: gcc, binutils, redhat-rpm-config, hmaccalc BuildRequires: net-tools, hostname, bc %if %{with_sparse} @@ -499,15 +499,15 @@ Source5005: kbuild-AFTER_LINK.patch Patch420: arm64-avoid-needing-console-to-enable-serial-console.patch -Patch421: arm64-acpi-drop-expert-patch.patch - # http://www.spinics.net/lists/arm-kernel/msg490981.html Patch422: geekbox-v4-device-tree-support.patch # http://www.spinics.net/lists/arm-kernel/msg483898.html -Patch423: Initial-AllWinner-A64-and-PINE64-support.patch +# This has major conflicts and needs to be rebased +# Patch423: Initial-AllWinner-A64-and-PINE64-support.patch -Patch424: net-smsc911x-Fix-bug-where-PHY-interrupts-are-overwritten-by-0.patch +Patch424: arm64-pcie-acpi.patch +Patch425: arm64-pcie-quirks-xgene.patch # http://www.spinics.net/lists/linux-tegra/msg26029.html Patch426: usb-phy-tegra-Add-38.4MHz-clock-table-entry.patch @@ -515,13 +515,10 @@ Patch426: usb-phy-tegra-Add-38.4MHz-clock-table-entry.patch # http://patchwork.ozlabs.org/patch/587554/ Patch430: ARM-tegra-usb-no-reset.patch -# http://www.spinics.net/lists/linux-tegra/msg25152.html -Patch431: Fix-tegra-to-use-stdout-path-for-serial-console.patch +Patch431: bcm283x-upstream-fixes.patch Patch432: arm-i.MX6-Utilite-device-dtb.patch -Patch433: bcm283x-upstream-fixes.patch - Patch460: lib-cpumask-Make-CPUMASK_OFFSTACK-usable-without-deb.patch Patch466: input-kill-stupid-messages.patch @@ -558,8 +555,6 @@ Patch482: Add-option-to-automatically-enforce-module-signature.patch Patch483: efi-Disable-secure-boot-if-shim-is-in-insecure-mode.patch -Patch484: efi-Make-EFI_SECURE_BOOT_SIG_ENFORCE-depend-on-EFI.patch - Patch485: efi-Add-EFI_SECURE_BOOT-bit.patch Patch486: hibernate-Disable-in-a-signed-modules-environment.patch @@ -568,6 +563,9 @@ Patch487: Add-EFI-signature-data-types.patch Patch488: Add-an-EFI-signature-blob-parser-and-key-loader.patch +# This doesn't apply. It seems like it could be replaced by +# https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=5ac7eace2d00eab5ae0e9fdee63e38aee6001f7c +# which has an explicit line about blacklisting Patch489: KEYS-Add-a-system-blacklist-keyring.patch Patch490: MODSIGN-Import-certificates-from-UEFI-Secure-Boot.patch @@ -603,20 +601,8 @@ Patch508: kexec-uefi-copy-secure_boot-flag-in-boot-params.patch #Required for some persistent memory options Patch641: disable-CONFIG_EXPERT-for-ZONE_DMA.patch -#CVE-2016-4482 rhbz 1332931 1332932 -Patch706: USB-usbfs-fix-potential-infoleak-in-devio.patch - -#CVE-2016-4440 rhbz 1337806 1337807 -Patch719: kvm-vmx-more-complete-state-update-on-APICv-on-off.patch - -#CVE-2016-5243 rhbz 1343338 1343335 -Patch721: tipc-fix-an-infoleak-in-tipc_nl_compat_link_dump.patch - -#CVE-2016-5244 rhbz 1343338 1343337 -Patch722: rds-fix-an-infoleak-in-rds_inc_info_copy.txt - -#rhbz 1338025 -Patch728: hp-wmi-fix-wifi-cannot-be-hard-unblock.patch +#CVE-2016-3134 rhbz 1317383 1317384 +Patch665: netfilter-x_tables-deal-with-bogus-nextoffset-values.patch #skl_update_other_pipe_wm issue patch-series from drm-next, rhbz 1305038 Patch801: 0001-drm-i915-Reorganize-WM-structs-unions-in-CRTC-state.patch @@ -638,21 +624,10 @@ Patch816: 0016-drm-i915-gen9-Reject-display-updates-that-exceed-wm-.patch Patch817: 0017-drm-i915-Remove-wm_config-from-dev_priv-intel_atomic.patch # https://lists.fedoraproject.org/archives/list/kernel@lists.fedoraproject.org/message/A4YCP7OGMX6JLFT5V44H57GOMAQLC3M4/ -Patch836: drm-amdgpu-Disable-RPM-helpers-while-reprobing.patch -Patch837: drm-i915-Acquire-audio-powerwell-for-HD-Audio-regist.patch +Patch838: drm-i915-Acquire-audio-powerwell-for-HD-Audio-regist.patch -#CVE-2016-6136 rhbz 1353533 1353534 -Patch841: audit-fix-a-double-fetch-in-audit_log_single_execve_arg.patch - -#CVE-2016-5412 rhbz 1349916 1361040 -Patch842: kvm-ppc-Book3S-HV-Pull-out-TM-state-save.patch -Patch843: kvm-ppc-Book3S-HV-Save-restore-TM-state.patch - -#rhbz 1361414 -Patch844: openstack_fix.patch - -#rhbz 1367091,1367092 -Patch855: tcp-fix-use-after-free-in-tcp_xmit_retransmit_queue.patch +#rhbz 1353558 +Patch844: 0001-selinux-Only-apply-bounds-checking-to-source-types.patch # END OF PATCH DEFINITIONS @@ -2095,7 +2070,7 @@ fi %ifarch %{cpupowerarchs} %files -n kernel-tools-libs %{_libdir}/libcpupower.so.0 -%{_libdir}/libcpupower.so.0.0.0 +%{_libdir}/libcpupower.so.0.0.1 %files -n kernel-tools-libs-devel %{_libdir}/libcpupower.so @@ -2179,6 +2154,12 @@ fi # # %changelog +* Mon Aug 22 2016 Laura Abbott - 4.7.2-200 +- Linux v4.7.2 + +* Wed Aug 17 2016 Laura Abbott - 4.7.1-200 +- Linux v4.7.1 + * Wed Aug 17 2016 Justin M. Forbes - 4.6.7-300 - tcp fix use after free in tcp_xmit_retransmit_queue (rhbz 1367091 1367092) diff --git a/kvm-ppc-Book3S-HV-Pull-out-TM-state-save.patch b/kvm-ppc-Book3S-HV-Pull-out-TM-state-save.patch deleted file mode 100644 index b4259375f..000000000 --- a/kvm-ppc-Book3S-HV-Pull-out-TM-state-save.patch +++ /dev/null @@ -1,506 +0,0 @@ -Subject: [PATCH 1/2] KVM: PPC: Book3S HV: Pull out TM state save/restore into separate procedures -From: Paul Mackerras -Date: 2016-07-28 6:11:18 - -This moves the transactional memory state save and restore sequences -out of the guest entry/exit paths into separate procedures. This is -so that these sequences can be used in going into and out of nap -in a subsequent patch. - -The only code changes here are (a) saving and restore LR on the -stack, since these new procedures get called with a bl instruction, -(b) explicitly saving r1 into the PACA instead of assuming that -HSTATE_HOST_R1(r13) is already set, and (c) removing an unnecessary -and redundant setting of MSR[TM] that should have been removed by -commit 9d4d0bdd9e0a ("KVM: PPC: Book3S HV: Add transactional memory -support", 2013-09-24) but wasn't. - -Cc: stable@vger.kernel.org # v3.15+ -Signed-off-by: Paul Mackerras ---- - arch/powerpc/kvm/book3s_hv_rmhandlers.S | 449 +++++++++++++++++--------------- - 1 file changed, 237 insertions(+), 212 deletions(-) - -diff --git a/arch/powerpc/kvm/book3s_hv_rmhandlers.S b/arch/powerpc/kvm/book3s_hv_rmhandlers.S -index 0d246fc..cfa4031 100644 ---- a/arch/powerpc/kvm/book3s_hv_rmhandlers.S -+++ b/arch/powerpc/kvm/book3s_hv_rmhandlers.S -@@ -689,112 +689,8 @@ END_FTR_SECTION_IFCLR(CPU_FTR_ARCH_207S) - - #ifdef CONFIG_PPC_TRANSACTIONAL_MEM - BEGIN_FTR_SECTION -- b skip_tm --END_FTR_SECTION_IFCLR(CPU_FTR_TM) -- -- /* Turn on TM/FP/VSX/VMX so we can restore them. */ -- mfmsr r5 -- li r6, MSR_TM >> 32 -- sldi r6, r6, 32 -- or r5, r5, r6 -- ori r5, r5, MSR_FP -- oris r5, r5, (MSR_VEC | MSR_VSX)@h -- mtmsrd r5 -- -- /* -- * The user may change these outside of a transaction, so they must -- * always be context switched. -- */ -- ld r5, VCPU_TFHAR(r4) -- ld r6, VCPU_TFIAR(r4) -- ld r7, VCPU_TEXASR(r4) -- mtspr SPRN_TFHAR, r5 -- mtspr SPRN_TFIAR, r6 -- mtspr SPRN_TEXASR, r7 -- -- ld r5, VCPU_MSR(r4) -- rldicl. r5, r5, 64 - MSR_TS_S_LG, 62 -- beq skip_tm /* TM not active in guest */ -- -- /* Make sure the failure summary is set, otherwise we'll program check -- * when we trechkpt. It's possible that this might have been not set -- * on a kvmppc_set_one_reg() call but we shouldn't let this crash the -- * host. -- */ -- oris r7, r7, (TEXASR_FS)@h -- mtspr SPRN_TEXASR, r7 -- -- /* -- * We need to load up the checkpointed state for the guest. -- * We need to do this early as it will blow away any GPRs, VSRs and -- * some SPRs. -- */ -- -- mr r31, r4 -- addi r3, r31, VCPU_FPRS_TM -- bl load_fp_state -- addi r3, r31, VCPU_VRS_TM -- bl load_vr_state -- mr r4, r31 -- lwz r7, VCPU_VRSAVE_TM(r4) -- mtspr SPRN_VRSAVE, r7 -- -- ld r5, VCPU_LR_TM(r4) -- lwz r6, VCPU_CR_TM(r4) -- ld r7, VCPU_CTR_TM(r4) -- ld r8, VCPU_AMR_TM(r4) -- ld r9, VCPU_TAR_TM(r4) -- mtlr r5 -- mtcr r6 -- mtctr r7 -- mtspr SPRN_AMR, r8 -- mtspr SPRN_TAR, r9 -- -- /* -- * Load up PPR and DSCR values but don't put them in the actual SPRs -- * till the last moment to avoid running with userspace PPR and DSCR for -- * too long. -- */ -- ld r29, VCPU_DSCR_TM(r4) -- ld r30, VCPU_PPR_TM(r4) -- -- std r2, PACATMSCRATCH(r13) /* Save TOC */ -- -- /* Clear the MSR RI since r1, r13 are all going to be foobar. */ -- li r5, 0 -- mtmsrd r5, 1 -- -- /* Load GPRs r0-r28 */ -- reg = 0 -- .rept 29 -- ld reg, VCPU_GPRS_TM(reg)(r31) -- reg = reg + 1 -- .endr -- -- mtspr SPRN_DSCR, r29 -- mtspr SPRN_PPR, r30 -- -- /* Load final GPRs */ -- ld 29, VCPU_GPRS_TM(29)(r31) -- ld 30, VCPU_GPRS_TM(30)(r31) -- ld 31, VCPU_GPRS_TM(31)(r31) -- -- /* TM checkpointed state is now setup. All GPRs are now volatile. */ -- TRECHKPT -- -- /* Now let's get back the state we need. */ -- HMT_MEDIUM -- GET_PACA(r13) -- ld r29, HSTATE_DSCR(r13) -- mtspr SPRN_DSCR, r29 -- ld r4, HSTATE_KVM_VCPU(r13) -- ld r1, HSTATE_HOST_R1(r13) -- ld r2, PACATMSCRATCH(r13) -- -- /* Set the MSR RI since we have our registers back. */ -- li r5, MSR_RI -- mtmsrd r5, 1 --skip_tm: -+ bl kvmppc_restore_tm -+END_FTR_SECTION_IFSET(CPU_FTR_TM) - #endif - - /* Load guest PMU registers */ -@@ -875,12 +771,6 @@ BEGIN_FTR_SECTION - /* Skip next section on POWER7 */ - b 8f - END_FTR_SECTION_IFCLR(CPU_FTR_ARCH_207S) -- /* Turn on TM so we can access TFHAR/TFIAR/TEXASR */ -- mfmsr r8 -- li r0, 1 -- rldimi r8, r0, MSR_TM_LG, 63-MSR_TM_LG -- mtmsrd r8 -- - /* Load up POWER8-specific registers */ - ld r5, VCPU_IAMR(r4) - lwz r6, VCPU_PSPB(r4) -@@ -1470,106 +1360,8 @@ END_FTR_SECTION_IFCLR(CPU_FTR_ARCH_207S) - - #ifdef CONFIG_PPC_TRANSACTIONAL_MEM - BEGIN_FTR_SECTION -- b 2f --END_FTR_SECTION_IFCLR(CPU_FTR_TM) -- /* Turn on TM. */ -- mfmsr r8 -- li r0, 1 -- rldimi r8, r0, MSR_TM_LG, 63-MSR_TM_LG -- mtmsrd r8 -- -- ld r5, VCPU_MSR(r9) -- rldicl. r5, r5, 64 - MSR_TS_S_LG, 62 -- beq 1f /* TM not active in guest. */ -- -- li r3, TM_CAUSE_KVM_RESCHED -- -- /* Clear the MSR RI since r1, r13 are all going to be foobar. */ -- li r5, 0 -- mtmsrd r5, 1 -- -- /* All GPRs are volatile at this point. */ -- TRECLAIM(R3) -- -- /* Temporarily store r13 and r9 so we have some regs to play with */ -- SET_SCRATCH0(r13) -- GET_PACA(r13) -- std r9, PACATMSCRATCH(r13) -- ld r9, HSTATE_KVM_VCPU(r13) -- -- /* Get a few more GPRs free. */ -- std r29, VCPU_GPRS_TM(29)(r9) -- std r30, VCPU_GPRS_TM(30)(r9) -- std r31, VCPU_GPRS_TM(31)(r9) -- -- /* Save away PPR and DSCR soon so don't run with user values. */ -- mfspr r31, SPRN_PPR -- HMT_MEDIUM -- mfspr r30, SPRN_DSCR -- ld r29, HSTATE_DSCR(r13) -- mtspr SPRN_DSCR, r29 -- -- /* Save all but r9, r13 & r29-r31 */ -- reg = 0 -- .rept 29 -- .if (reg != 9) && (reg != 13) -- std reg, VCPU_GPRS_TM(reg)(r9) -- .endif -- reg = reg + 1 -- .endr -- /* ... now save r13 */ -- GET_SCRATCH0(r4) -- std r4, VCPU_GPRS_TM(13)(r9) -- /* ... and save r9 */ -- ld r4, PACATMSCRATCH(r13) -- std r4, VCPU_GPRS_TM(9)(r9) -- -- /* Reload stack pointer and TOC. */ -- ld r1, HSTATE_HOST_R1(r13) -- ld r2, PACATOC(r13) -- -- /* Set MSR RI now we have r1 and r13 back. */ -- li r5, MSR_RI -- mtmsrd r5, 1 -- -- /* Save away checkpinted SPRs. */ -- std r31, VCPU_PPR_TM(r9) -- std r30, VCPU_DSCR_TM(r9) -- mflr r5 -- mfcr r6 -- mfctr r7 -- mfspr r8, SPRN_AMR -- mfspr r10, SPRN_TAR -- std r5, VCPU_LR_TM(r9) -- stw r6, VCPU_CR_TM(r9) -- std r7, VCPU_CTR_TM(r9) -- std r8, VCPU_AMR_TM(r9) -- std r10, VCPU_TAR_TM(r9) -- -- /* Restore r12 as trap number. */ -- lwz r12, VCPU_TRAP(r9) -- -- /* Save FP/VSX. */ -- addi r3, r9, VCPU_FPRS_TM -- bl store_fp_state -- addi r3, r9, VCPU_VRS_TM -- bl store_vr_state -- mfspr r6, SPRN_VRSAVE -- stw r6, VCPU_VRSAVE_TM(r9) --1: -- /* -- * We need to save these SPRs after the treclaim so that the software -- * error code is recorded correctly in the TEXASR. Also the user may -- * change these outside of a transaction, so they must always be -- * context switched. -- */ -- mfspr r5, SPRN_TFHAR -- mfspr r6, SPRN_TFIAR -- mfspr r7, SPRN_TEXASR -- std r5, VCPU_TFHAR(r9) -- std r6, VCPU_TFIAR(r9) -- std r7, VCPU_TEXASR(r9) --2: -+ bl kvmppc_save_tm -+END_FTR_SECTION_IFSET(CPU_FTR_TM) - #endif - - /* Increment yield count if they have a VPA */ -@@ -2694,6 +2486,239 @@ END_FTR_SECTION_IFSET(CPU_FTR_ALTIVEC) - mr r4,r31 - blr - -+#ifdef CONFIG_PPC_TRANSACTIONAL_MEM -+/* -+ * Save transactional state and TM-related registers. -+ * Called with r9 pointing to the vcpu struct. -+ * This can modify all checkpointed registers, but -+ * restores r1, r2 and r9 (vcpu pointer) before exit. -+ */ -+kvmppc_save_tm: -+ mflr r0 -+ std r0, PPC_LR_STKOFF(r1) -+ -+ /* Turn on TM. */ -+ mfmsr r8 -+ li r0, 1 -+ rldimi r8, r0, MSR_TM_LG, 63-MSR_TM_LG -+ mtmsrd r8 -+ -+ ld r5, VCPU_MSR(r9) -+ rldicl. r5, r5, 64 - MSR_TS_S_LG, 62 -+ beq 1f /* TM not active in guest. */ -+ -+ std r1, HSTATE_HOST_R1(r13) -+ li r3, TM_CAUSE_KVM_RESCHED -+ -+ /* Clear the MSR RI since r1, r13 are all going to be foobar. */ -+ li r5, 0 -+ mtmsrd r5, 1 -+ -+ /* All GPRs are volatile at this point. */ -+ TRECLAIM(R3) -+ -+ /* Temporarily store r13 and r9 so we have some regs to play with */ -+ SET_SCRATCH0(r13) -+ GET_PACA(r13) -+ std r9, PACATMSCRATCH(r13) -+ ld r9, HSTATE_KVM_VCPU(r13) -+ -+ /* Get a few more GPRs free. */ -+ std r29, VCPU_GPRS_TM(29)(r9) -+ std r30, VCPU_GPRS_TM(30)(r9) -+ std r31, VCPU_GPRS_TM(31)(r9) -+ -+ /* Save away PPR and DSCR soon so don't run with user values. */ -+ mfspr r31, SPRN_PPR -+ HMT_MEDIUM -+ mfspr r30, SPRN_DSCR -+ ld r29, HSTATE_DSCR(r13) -+ mtspr SPRN_DSCR, r29 -+ -+ /* Save all but r9, r13 & r29-r31 */ -+ reg = 0 -+ .rept 29 -+ .if (reg != 9) && (reg != 13) -+ std reg, VCPU_GPRS_TM(reg)(r9) -+ .endif -+ reg = reg + 1 -+ .endr -+ /* ... now save r13 */ -+ GET_SCRATCH0(r4) -+ std r4, VCPU_GPRS_TM(13)(r9) -+ /* ... and save r9 */ -+ ld r4, PACATMSCRATCH(r13) -+ std r4, VCPU_GPRS_TM(9)(r9) -+ -+ /* Reload stack pointer and TOC. */ -+ ld r1, HSTATE_HOST_R1(r13) -+ ld r2, PACATOC(r13) -+ -+ /* Set MSR RI now we have r1 and r13 back. */ -+ li r5, MSR_RI -+ mtmsrd r5, 1 -+ -+ /* Save away checkpinted SPRs. */ -+ std r31, VCPU_PPR_TM(r9) -+ std r30, VCPU_DSCR_TM(r9) -+ mflr r5 -+ mfcr r6 -+ mfctr r7 -+ mfspr r8, SPRN_AMR -+ mfspr r10, SPRN_TAR -+ std r5, VCPU_LR_TM(r9) -+ stw r6, VCPU_CR_TM(r9) -+ std r7, VCPU_CTR_TM(r9) -+ std r8, VCPU_AMR_TM(r9) -+ std r10, VCPU_TAR_TM(r9) -+ -+ /* Restore r12 as trap number. */ -+ lwz r12, VCPU_TRAP(r9) -+ -+ /* Save FP/VSX. */ -+ addi r3, r9, VCPU_FPRS_TM -+ bl store_fp_state -+ addi r3, r9, VCPU_VRS_TM -+ bl store_vr_state -+ mfspr r6, SPRN_VRSAVE -+ stw r6, VCPU_VRSAVE_TM(r9) -+1: -+ /* -+ * We need to save these SPRs after the treclaim so that the software -+ * error code is recorded correctly in the TEXASR. Also the user may -+ * change these outside of a transaction, so they must always be -+ * context switched. -+ */ -+ mfspr r5, SPRN_TFHAR -+ mfspr r6, SPRN_TFIAR -+ mfspr r7, SPRN_TEXASR -+ std r5, VCPU_TFHAR(r9) -+ std r6, VCPU_TFIAR(r9) -+ std r7, VCPU_TEXASR(r9) -+ -+ ld r0, PPC_LR_STKOFF(r1) -+ mtlr r0 -+ blr -+ -+/* -+ * Restore transactional state and TM-related registers. -+ * Called with r4 pointing to the vcpu struct. -+ * This potentially modifies all checkpointed registers. -+ * It restores r1, r2, r4 from the PACA. -+ */ -+kvmppc_restore_tm: -+ mflr r0 -+ std r0, PPC_LR_STKOFF(r1) -+ -+ /* Turn on TM/FP/VSX/VMX so we can restore them. */ -+ mfmsr r5 -+ li r6, MSR_TM >> 32 -+ sldi r6, r6, 32 -+ or r5, r5, r6 -+ ori r5, r5, MSR_FP -+ oris r5, r5, (MSR_VEC | MSR_VSX)@h -+ mtmsrd r5 -+ -+ /* -+ * The user may change these outside of a transaction, so they must -+ * always be context switched. -+ */ -+ ld r5, VCPU_TFHAR(r4) -+ ld r6, VCPU_TFIAR(r4) -+ ld r7, VCPU_TEXASR(r4) -+ mtspr SPRN_TFHAR, r5 -+ mtspr SPRN_TFIAR, r6 -+ mtspr SPRN_TEXASR, r7 -+ -+ ld r5, VCPU_MSR(r4) -+ rldicl. r5, r5, 64 - MSR_TS_S_LG, 62 -+ beqlr /* TM not active in guest */ -+ std r1, HSTATE_HOST_R1(r13) -+ -+ /* Make sure the failure summary is set, otherwise we'll program check -+ * when we trechkpt. It's possible that this might have been not set -+ * on a kvmppc_set_one_reg() call but we shouldn't let this crash the -+ * host. -+ */ -+ oris r7, r7, (TEXASR_FS)@h -+ mtspr SPRN_TEXASR, r7 -+ -+ /* -+ * We need to load up the checkpointed state for the guest. -+ * We need to do this early as it will blow away any GPRs, VSRs and -+ * some SPRs. -+ */ -+ -+ mr r31, r4 -+ addi r3, r31, VCPU_FPRS_TM -+ bl load_fp_state -+ addi r3, r31, VCPU_VRS_TM -+ bl load_vr_state -+ mr r4, r31 -+ lwz r7, VCPU_VRSAVE_TM(r4) -+ mtspr SPRN_VRSAVE, r7 -+ -+ ld r5, VCPU_LR_TM(r4) -+ lwz r6, VCPU_CR_TM(r4) -+ ld r7, VCPU_CTR_TM(r4) -+ ld r8, VCPU_AMR_TM(r4) -+ ld r9, VCPU_TAR_TM(r4) -+ mtlr r5 -+ mtcr r6 -+ mtctr r7 -+ mtspr SPRN_AMR, r8 -+ mtspr SPRN_TAR, r9 -+ -+ /* -+ * Load up PPR and DSCR values but don't put them in the actual SPRs -+ * till the last moment to avoid running with userspace PPR and DSCR for -+ * too long. -+ */ -+ ld r29, VCPU_DSCR_TM(r4) -+ ld r30, VCPU_PPR_TM(r4) -+ -+ std r2, PACATMSCRATCH(r13) /* Save TOC */ -+ -+ /* Clear the MSR RI since r1, r13 are all going to be foobar. */ -+ li r5, 0 -+ mtmsrd r5, 1 -+ -+ /* Load GPRs r0-r28 */ -+ reg = 0 -+ .rept 29 -+ ld reg, VCPU_GPRS_TM(reg)(r31) -+ reg = reg + 1 -+ .endr -+ -+ mtspr SPRN_DSCR, r29 -+ mtspr SPRN_PPR, r30 -+ -+ /* Load final GPRs */ -+ ld 29, VCPU_GPRS_TM(29)(r31) -+ ld 30, VCPU_GPRS_TM(30)(r31) -+ ld 31, VCPU_GPRS_TM(31)(r31) -+ -+ /* TM checkpointed state is now setup. All GPRs are now volatile. */ -+ TRECHKPT -+ -+ /* Now let's get back the state we need. */ -+ HMT_MEDIUM -+ GET_PACA(r13) -+ ld r29, HSTATE_DSCR(r13) -+ mtspr SPRN_DSCR, r29 -+ ld r4, HSTATE_KVM_VCPU(r13) -+ ld r1, HSTATE_HOST_R1(r13) -+ ld r2, PACATMSCRATCH(r13) -+ -+ /* Set the MSR RI since we have our registers back. */ -+ li r5, MSR_RI -+ mtmsrd r5, 1 -+ -+ ld r0, PPC_LR_STKOFF(r1) -+ mtlr r0 -+ blr -+#endif -+ - /* - * We come here if we get any exception or interrupt while we are - * executing host real mode code while in guest MMU context. --- -2.8.0.rc3 diff --git a/kvm-ppc-Book3S-HV-Save-restore-TM-state.patch b/kvm-ppc-Book3S-HV-Save-restore-TM-state.patch deleted file mode 100644 index f63aa795d..000000000 --- a/kvm-ppc-Book3S-HV-Save-restore-TM-state.patch +++ /dev/null @@ -1,67 +0,0 @@ -Subject: [PATCH 2/2] KVM: PPC: Book3S HV: Save/restore TM state in H_CEDE -From: Paul Mackerras -Date: 2016-07-28 6:11:19 - -It turns out that if the guest does a H_CEDE while the CPU is in -a transactional state, and the H_CEDE does a nap, and the nap -loses the architected state of the CPU (which is is allowed to do), -then we lose the checkpointed state of the virtual CPU. In addition, -the transactional-memory state recorded in the MSR gets reset back -to non-transactional, and when we try to return to the guest, we take -a TM bad thing type of program interrupt because we are trying to -transition from non-transactional to transactional with a hrfid -instruction, which is not permitted. - -The result of the program interrupt occurring at that point is that -the host CPU will hang in an infinite loop with interrupts disabled. -Thus this is a denial of service vulnerability in the host which can -be triggered by any guest (and depending on the guest kernel, it can -potentially triggered by unprivileged userspace in the guest). - -This vulnerability has been assigned the ID CVE-2016-5412. - -To fix this, we save the TM state before napping and restore it -on exit from the nap, when handling a H_CEDE in real mode. The -case where H_CEDE exits to host virtual mode is already OK (as are -other hcalls which exit to host virtual mode) because the exit -path saves the TM state. - -Cc: stable@vger.kernel.org # v3.15+ -Signed-off-by: Paul Mackerras ---- - arch/powerpc/kvm/book3s_hv_rmhandlers.S | 13 +++++++++++++ - 1 file changed, 13 insertions(+) - -diff --git a/arch/powerpc/kvm/book3s_hv_rmhandlers.S b/arch/powerpc/kvm/book3s_hv_rmhandlers.S -index cfa4031..543124f 100644 ---- a/arch/powerpc/kvm/book3s_hv_rmhandlers.S -+++ b/arch/powerpc/kvm/book3s_hv_rmhandlers.S -@@ -2093,6 +2093,13 @@ _GLOBAL(kvmppc_h_cede) /* r3 = vcpu pointer, r11 = msr, r13 = paca */ - /* save FP state */ - bl kvmppc_save_fp - -+#ifdef CONFIG_PPC_TRANSACTIONAL_MEM -+BEGIN_FTR_SECTION -+ ld r9, HSTATE_KVM_VCPU(r13) -+ bl kvmppc_save_tm -+END_FTR_SECTION_IFSET(CPU_FTR_TM) -+#endif -+ - /* - * Set DEC to the smaller of DEC and HDEC, so that we wake - * no later than the end of our timeslice (HDEC interrupts -@@ -2169,6 +2176,12 @@ kvm_end_cede: - bl kvmhv_accumulate_time - #endif - -+#ifdef CONFIG_PPC_TRANSACTIONAL_MEM -+BEGIN_FTR_SECTION -+ bl kvmppc_restore_tm -+END_FTR_SECTION_IFSET(CPU_FTR_TM) -+#endif -+ - /* load up FP state */ - bl kvmppc_load_fp - --- -2.8.0.rc3 diff --git a/kvm-vmx-more-complete-state-update-on-APICv-on-off.patch b/kvm-vmx-more-complete-state-update-on-APICv-on-off.patch deleted file mode 100644 index 67043300c..000000000 --- a/kvm-vmx-more-complete-state-update-on-APICv-on-off.patch +++ /dev/null @@ -1,112 +0,0 @@ -From: Roman Kagan -Subject: [PATCH v3] kvm:vmx: more complete state update on APICv on/off -Date: 2016-05-18 14:48:20 GMT (1 day, 21 hours and 23 minutes ago) - -The function to update APICv on/off state (in particular, to deactivate -it when enabling Hyper-V SynIC), used to be incomplete: it didn't adjust -APICv-related fields among secondary processor-based VM-execution -controls. - -As a result, Windows 2012 guests would get stuck when SynIC-based -auto-EOI interrupt intersected with e.g. an IPI in the guest. - -In addition, the MSR intercept bitmap wasn't updated to correspond to -whether "virtualize x2APIC mode" was enabled. This path used not to be -triggered, since Windows didn't use x2APIC but rather their own -synthetic APIC access MSRs; however it represented a security risk -because the guest running in a SynIC-enabled VM could switch to x2APIC -and thus obtain direct access to host APIC MSRs (thanks to Yang Zhang - for spotting this). - -The patch fixes those omissions. - -Signed-off-by: Roman Kagan -Cc: Steve Rutherford -Cc: Yang Zhang ---- -v2 -> v3: - - only switch to x2apic msr bitmap if virtualize x2apic mode is on in vmcs - -v1 -> v2: - - only update relevant bits in the secondary exec control - - update msr intercept bitmap (also make x2apic msr bitmap always - correspond to APICv) - - arch/x86/kvm/vmx.c | 48 ++++++++++++++++++++++++++++++------------------ - 1 file changed, 30 insertions(+), 18 deletions(-) - -diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c -index ee1c8a9..cef741a 100644 ---- a/arch/x86/kvm/vmx.c -+++ b/arch/x86/kvm/vmx.c -@@ -2418,7 +2418,9 @@ static void vmx_set_msr_bitmap(struct kvm_vcpu *vcpu) - - if (is_guest_mode(vcpu)) - msr_bitmap = vmx_msr_bitmap_nested; -- else if (vcpu->arch.apic_base & X2APIC_ENABLE) { -+ else if (cpu_has_secondary_exec_ctrls() && -+ (vmcs_read32(SECONDARY_VM_EXEC_CONTROL) & -+ SECONDARY_EXEC_VIRTUALIZE_X2APIC_MODE)) { - if (is_long_mode(vcpu)) - msr_bitmap = vmx_msr_bitmap_longmode_x2apic; - else -@@ -4783,6 +4785,19 @@ static void vmx_refresh_apicv_exec_ctrl(struct kvm_vcpu *vcpu) - struct vcpu_vmx *vmx = to_vmx(vcpu); - - vmcs_write32(PIN_BASED_VM_EXEC_CONTROL, vmx_pin_based_exec_ctrl(vmx)); -+ if (cpu_has_secondary_exec_ctrls()) { -+ if (kvm_vcpu_apicv_active(vcpu)) -+ vmcs_set_bits(SECONDARY_VM_EXEC_CONTROL, -+ SECONDARY_EXEC_APIC_REGISTER_VIRT | -+ SECONDARY_EXEC_VIRTUAL_INTR_DELIVERY); -+ else -+ vmcs_clear_bits(SECONDARY_VM_EXEC_CONTROL, -+ SECONDARY_EXEC_APIC_REGISTER_VIRT | -+ SECONDARY_EXEC_VIRTUAL_INTR_DELIVERY); -+ } -+ -+ if (cpu_has_vmx_msr_bitmap()) -+ vmx_set_msr_bitmap(vcpu); - } - - static u32 vmx_exec_control(struct vcpu_vmx *vmx) -@@ -6329,23 +6344,20 @@ static __init int hardware_setup(void) - - set_bit(0, vmx_vpid_bitmap); /* 0 is reserved for host */ - -- if (enable_apicv) { -- for (msr = 0x800; msr <= 0x8ff; msr++) -- vmx_disable_intercept_msr_read_x2apic(msr); -- -- /* According SDM, in x2apic mode, the whole id reg is used. -- * But in KVM, it only use the highest eight bits. Need to -- * intercept it */ -- vmx_enable_intercept_msr_read_x2apic(0x802); -- /* TMCCT */ -- vmx_enable_intercept_msr_read_x2apic(0x839); -- /* TPR */ -- vmx_disable_intercept_msr_write_x2apic(0x808); -- /* EOI */ -- vmx_disable_intercept_msr_write_x2apic(0x80b); -- /* SELF-IPI */ -- vmx_disable_intercept_msr_write_x2apic(0x83f); -- } -+ for (msr = 0x800; msr <= 0x8ff; msr++) -+ vmx_disable_intercept_msr_read_x2apic(msr); -+ -+ /* According SDM, in x2apic mode, the whole id reg is used. But in -+ * KVM, it only use the highest eight bits. Need to intercept it */ -+ vmx_enable_intercept_msr_read_x2apic(0x802); -+ /* TMCCT */ -+ vmx_enable_intercept_msr_read_x2apic(0x839); -+ /* TPR */ -+ vmx_disable_intercept_msr_write_x2apic(0x808); -+ /* EOI */ -+ vmx_disable_intercept_msr_write_x2apic(0x80b); -+ /* SELF-IPI */ -+ vmx_disable_intercept_msr_write_x2apic(0x83f); - - if (enable_ept) { - kvm_mmu_set_mask_ptes(0ull, --- -2.5.5 diff --git a/net-smsc911x-Fix-bug-where-PHY-interrupts-are-overwritten-by-0.patch b/net-smsc911x-Fix-bug-where-PHY-interrupts-are-overwritten-by-0.patch deleted file mode 100644 index 24b5ac2ae..000000000 --- a/net-smsc911x-Fix-bug-where-PHY-interrupts-are-overwritten-by-0.patch +++ /dev/null @@ -1,52 +0,0 @@ -From patchwork Wed Jun 22 17:40:50 2016 -Content-Type: text/plain; charset="utf-8" -MIME-Version: 1.0 -Content-Transfer-Encoding: 7bit -Subject: [v3] net: smsc911x: Fix bug where PHY interrupts are overwritten by 0 -From: Jeremy Linton -X-Patchwork-Id: 639331 -X-Patchwork-Delegate: davem@davemloft.net -Message-Id: <1466617250-27317-1-git-send-email-jeremy.linton@arm.com> -To: netdev@vger.kernel.org -Cc: steve.glendinning@shawell.net, andrew@lunn.ch, - sergei.shtylyov@cogentembedded.com, linux-kernel@vger.kernel.org, - stable@vger.kernel.org, pbrobinson@gmail.com, - mlangsdorf@redhat.com, steve.capper@arm.com -Date: Wed, 22 Jun 2016 12:40:50 -0500 - -By default, mdiobus_alloc() sets the PHYs to polling mode, but a -pointer size memcpy means that a couple IRQs end up being overwritten -with a value of 0. This means that PHY_POLL is disabled and results -in unpredictable behavior depending on the PHY's location on the -MDIO bus. Remove that memcpy and the now unused phy_irq member to -force the SMSC911x PHYs into polling mode 100% of the time. - -Fixes: e7f4dc3536a4 ("mdio: Move allocation of interrupts into core") - -Signed-off-by: Jeremy Linton -Reviewed-by: Andrew Lunn -Acked-by: Sergei Shtylyov ---- - drivers/net/ethernet/smsc/smsc911x.c | 2 -- - 1 file changed, 2 deletions(-) - -diff --git a/drivers/net/ethernet/smsc/smsc911x.c b/drivers/net/ethernet/smsc/smsc911x.c -index 8af2556..b5ab5e1 100644 ---- a/drivers/net/ethernet/smsc/smsc911x.c -+++ b/drivers/net/ethernet/smsc/smsc911x.c -@@ -116,7 +116,6 @@ struct smsc911x_data { - - struct phy_device *phy_dev; - struct mii_bus *mii_bus; -- int phy_irq[PHY_MAX_ADDR]; - unsigned int using_extphy; - int last_duplex; - int last_carrier; -@@ -1073,7 +1072,6 @@ static int smsc911x_mii_init(struct platform_device *pdev, - pdata->mii_bus->priv = pdata; - pdata->mii_bus->read = smsc911x_mii_read; - pdata->mii_bus->write = smsc911x_mii_write; -- memcpy(pdata->mii_bus->irq, pdata->phy_irq, sizeof(pdata->mii_bus)); - - pdata->mii_bus->parent = &pdev->dev; - diff --git a/netfilter-x_tables-deal-with-bogus-nextoffset-values.patch b/netfilter-x_tables-deal-with-bogus-nextoffset-values.patch new file mode 100644 index 000000000..e6f5fa6f5 --- /dev/null +++ b/netfilter-x_tables-deal-with-bogus-nextoffset-values.patch @@ -0,0 +1,109 @@ +From 2b32a7d82223d76ace432305b18c5816cadff878 Mon Sep 17 00:00:00 2001 +From: Florian Westphal +Date: Thu, 10 Mar 2016 00:56:02 -0800 +Subject: [PATCH] netfilter: x_tables: deal with bogus nextoffset values + +Ben Hawkes says: + + In the mark_source_chains function (net/ipv4/netfilter/ip_tables.c) it + is possible for a user-supplied ipt_entry structure to have a large + next_offset field. This field is not bounds checked prior to writing a + counter value at the supplied offset. + +Problem is that xt_entry_foreach() macro stops iterating once e->next_offset +is out of bounds, assuming this is the last entry. + +With malformed data thats not necessarily the case so we can +write outside of allocated area later as we might not have walked the +entire blob. + +Fix this by simplifying mark_source_chains -- it already has to check +if nextoff is in range to catch invalid jumps, so just do the check +when we move to a next entry as well. + +Signed-off-by: Florian Westphal +--- + net/ipv4/netfilter/arp_tables.c | 8 ++++++++ + net/ipv4/netfilter/ip_tables.c | 8 ++++++++ + net/ipv6/netfilter/ip6_tables.c | 6 ++++++ + 3 files changed, 22 insertions(+) + +diff --git a/net/ipv4/netfilter/arp_tables.c b/net/ipv4/netfilter/arp_tables.c +index 2033f92..a9b6c76 100644 +--- a/net/ipv4/netfilter/arp_tables.c ++++ b/net/ipv4/netfilter/arp_tables.c +@@ -376,6 +376,10 @@ static int mark_source_chains(const struct xt_table_info *newinfo, + + /* Move along one */ + size = e->next_offset; ++ ++ if (pos + size > newinfo->size - sizeof(*e)) ++ return 0; ++ + e = (struct arpt_entry *) + (entry0 + pos + size); + if (pos + size >= newinfo->size) +@@ -399,6 +403,10 @@ static int mark_source_chains(const struct xt_table_info *newinfo, + if (newpos >= newinfo->size) + return 0; + } ++ ++ if (newpos > newinfo->size - sizeof(*e)) ++ return 0; ++ + e = (struct arpt_entry *) + (entry0 + newpos); + e->counters.pcnt = pos; +diff --git a/net/ipv4/netfilter/ip_tables.c b/net/ipv4/netfilter/ip_tables.c +index 54906e0..7530ecd 100644 +--- a/net/ipv4/netfilter/ip_tables.c ++++ b/net/ipv4/netfilter/ip_tables.c +@@ -447,6 +447,10 @@ mark_source_chains(const struct xt_table_info *newinfo, + + /* Move along one */ + size = e->next_offset; ++ ++ if (pos + size > newinfo->size - sizeof(*e)) ++ return 0; ++ + e = (struct ipt_entry *) + (entry0 + pos + size); + if (pos + size >= newinfo->size) +@@ -470,6 +474,10 @@ mark_source_chains(const struct xt_table_info *newinfo, + if (newpos >= newinfo->size) + return 0; + } ++ ++ if (newpos > newinfo->size - sizeof(*e)) ++ return 0; ++ + e = (struct ipt_entry *) + (entry0 + newpos); + e->counters.pcnt = pos; +diff --git a/net/ipv6/netfilter/ip6_tables.c b/net/ipv6/netfilter/ip6_tables.c +index 63e06c3..894da69 100644 +--- a/net/ipv6/netfilter/ip6_tables.c ++++ b/net/ipv6/netfilter/ip6_tables.c +@@ -474,6 +474,8 @@ mark_source_chains(const struct xt_table_info *newinfo, + + /* Move along one */ + size = e->next_offset; ++ if (pos + size > newinfo->size - sizeof(*e)) ++ return 0; + e = (struct ip6t_entry *) + (entry0 + pos + size); + if (pos + size >= newinfo->size) +@@ -497,6 +499,10 @@ mark_source_chains(const struct xt_table_info *newinfo, + if (newpos >= newinfo->size) + return 0; + } ++ ++ if (newpos > newinfo->size - sizeof(*e)) ++ return 0; ++ + e = (struct ip6t_entry *) + (entry0 + newpos); + e->counters.pcnt = pos; +-- +2.5.5 + diff --git a/openstack_fix.patch b/openstack_fix.patch deleted file mode 100644 index a967c350e..000000000 --- a/openstack_fix.patch +++ /dev/null @@ -1,53 +0,0 @@ -From 5ef9f289c4e698054e5687edb54f0da3cdc9173a Mon Sep 17 00:00:00 2001 -From: Ian Wienand -Date: Wed, 3 Aug 2016 15:44:57 +1000 -Subject: OVS: Ignore negative headroom value - -net_device->ndo_set_rx_headroom (introduced in -871b642adebe300be2e50aa5f65a418510f636ec) says - - "Setting a negtaive value reset the rx headroom - to the default value". - -It seems that the OVS implementation in -3a927bc7cf9d0fbe8f4a8189dd5f8440228f64e7 overlooked this and sets -dev->needed_headroom unconditionally. - -This doesn't have an immediate effect, but can mess up later -LL_RESERVED_SPACE calculations, such as done in -net/ipv6/mcast.c:mld_newpack. For reference, this issue was found -from a skb_panic raised there after the length calculations had given -the wrong result. - -Note the other current users of this interface -(drivers/net/tun.c:tun_set_headroom and -drivers/net/veth.c:veth_set_rx_headroom) are both checking this -correctly thus need no modification. - -Thanks to Ben for some pointers from the crash dumps! - -Cc: Benjamin Poirier -Cc: Paolo Abeni -Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1361414 -Signed-off-by: Ian Wienand -Signed-off-by: David S. Miller ---- - net/openvswitch/vport-internal_dev.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/net/openvswitch/vport-internal_dev.c b/net/openvswitch/vport-internal_dev.c -index 434e04c..95c3614 100644 ---- a/net/openvswitch/vport-internal_dev.c -+++ b/net/openvswitch/vport-internal_dev.c -@@ -140,7 +140,7 @@ internal_get_stats(struct net_device *dev, struct rtnl_link_stats64 *stats) - - static void internal_set_rx_headroom(struct net_device *dev, int new_hr) - { -- dev->needed_headroom = new_hr; -+ dev->needed_headroom = new_hr < 0 ? 0 : new_hr; - } - - static const struct net_device_ops internal_dev_netdev_ops = { --- -cgit v0.12 - diff --git a/sources b/sources index 378381dd9..cec90d779 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ -d2927020e24a76da4ab482a8bc3e9ef3 linux-4.6.tar.xz -fd23b14b9d474c3dfacb6e8ee82d3a51 perf-man-4.6.tar.gz -3fc1fcb7ef83c4ef4c05d8bd57e1b985 patch-4.6.7.xz +5276563eb1f39a048e4a8a887408c031 linux-4.7.tar.xz +fe259c02c75eec61d1aa4b1211f3c853 perf-man-4.7.tar.gz +64e8a8969536c5d700c9e6a591d28dad patch-4.7.2.xz diff --git a/tcp-fix-use-after-free-in-tcp_xmit_retransmit_queue.patch b/tcp-fix-use-after-free-in-tcp_xmit_retransmit_queue.patch deleted file mode 100644 index 36ada7acf..000000000 --- a/tcp-fix-use-after-free-in-tcp_xmit_retransmit_queue.patch +++ /dev/null @@ -1,46 +0,0 @@ -From: Eric Dumazet -Date: 2016-08-17 12:56:26 -Subject: [PATCH net] tcp: fix use after free in tcp_xmit_retransmit_queue() - -When tcp_sendmsg() allocates a fresh and empty skb, it puts it at the -tail of the write queue using tcp_add_write_queue_tail() - -Then it attempts to copy user data into this fresh skb. - -If the copy fails, we undo the work and remove the fresh skb. - -Unfortunately, this undo lacks the change done to tp->highest_sack and -we can leave a dangling pointer (to a freed skb) - -Later, tcp_xmit_retransmit_queue() can dereference this pointer and -access freed memory. For regular kernels where memory is not unmapped, -this might cause SACK bugs because tcp_highest_sack_seq() is buggy, -returning garbage instead of tp->snd_nxt, but with various debug -features like CONFIG_DEBUG_PAGEALLOC, this can crash the kernel. - -This bug was found by Marco Grassi thanks to syzkaller. - -Fixes: 6859d49475d4 ("[TCP]: Abstract tp->highest_sack accessing & point to next skb") -Reported-by: Marco Grassi -Signed-off-by: Eric Dumazet -Cc: Ilpo Järvinen -Cc: Yuchung Cheng -Cc: Neal Cardwell ---- - include/net/tcp.h | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/include/net/tcp.h b/include/net/tcp.h -index c00e7d51bb18..7717302cab91 100644 ---- a/include/net/tcp.h -+++ b/include/net/tcp.h -@@ -1523,6 +1523,8 @@ static inline void tcp_check_send_head(struct sock *sk, struct sk_buff *skb_unli - { - if (sk->sk_send_head == skb_unlinked) - sk->sk_send_head = NULL; -+ if (tcp_sk(sk)->highest_sack == skb_unlinked) -+ tcp_sk(sk)->highest_sack = NULL; - } - - static inline void tcp_init_send_head(struct sock *sk) - diff --git a/tipc-fix-an-infoleak-in-tipc_nl_compat_link_dump.patch b/tipc-fix-an-infoleak-in-tipc_nl_compat_link_dump.patch deleted file mode 100644 index 9cd7c09a3..000000000 --- a/tipc-fix-an-infoleak-in-tipc_nl_compat_link_dump.patch +++ /dev/null @@ -1,32 +0,0 @@ -From 5d2be1422e02ccd697ccfcd45c85b4a26e6178e2 Mon Sep 17 00:00:00 2001 -From: Kangjie Lu -Date: Thu, 2 Jun 2016 04:04:56 -0400 -Subject: tipc: fix an infoleak in tipc_nl_compat_link_dump - -link_info.str is a char array of size 60. Memory after the NULL -byte is not initialized. Sending the whole object out can cause -a leak. - -Signed-off-by: Kangjie Lu -Signed-off-by: David S. Miller ---- - net/tipc/netlink_compat.c | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/net/tipc/netlink_compat.c b/net/tipc/netlink_compat.c -index f795b1d..3ad9fab 100644 ---- a/net/tipc/netlink_compat.c -+++ b/net/tipc/netlink_compat.c -@@ -604,7 +604,8 @@ static int tipc_nl_compat_link_dump(struct tipc_nl_compat_msg *msg, - - link_info.dest = nla_get_flag(link[TIPC_NLA_LINK_DEST]); - link_info.up = htonl(nla_get_flag(link[TIPC_NLA_LINK_UP])); -- strcpy(link_info.str, nla_data(link[TIPC_NLA_LINK_NAME])); -+ nla_strlcpy(link_info.str, nla_data(link[TIPC_NLA_LINK_NAME]), -+ TIPC_MAX_LINK_NAME); - - return tipc_add_tlv(msg->rep, TIPC_TLV_LINK_INFO, - &link_info, sizeof(link_info)); --- -cgit v0.12 - From 593f0eedef3c15016e4c926b1d253d9c05f16bd3 Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Tue, 23 Aug 2016 08:57:16 -0500 Subject: [PATCH 129/275] CVE-2016-6480 aacraid: Check size values after double-fetch from user --- ...ze-values-after-double-fetch-from-us.patch | 65 +++++++++++++++++++ kernel.spec | 6 ++ 2 files changed, 71 insertions(+) create mode 100644 aacraid-Check-size-values-after-double-fetch-from-us.patch diff --git a/aacraid-Check-size-values-after-double-fetch-from-us.patch b/aacraid-Check-size-values-after-double-fetch-from-us.patch new file mode 100644 index 000000000..6ff771160 --- /dev/null +++ b/aacraid-Check-size-values-after-double-fetch-from-us.patch @@ -0,0 +1,65 @@ +From fa00c437eef8dc2e7b25f8cd868cfa405fcc2bb3 Mon Sep 17 00:00:00 2001 +From: Dave Carroll +Date: Fri, 5 Aug 2016 13:44:10 -0600 +Subject: [PATCH] aacraid: Check size values after double-fetch from user + +In aacraid's ioctl_send_fib() we do two fetches from userspace, one the +get the fib header's size and one for the fib itself. Later we use the +size field from the second fetch to further process the fib. If for some +reason the size from the second fetch is different than from the first +fix, we may encounter an out-of- bounds access in aac_fib_send(). We +also check the sender size to insure it is not out of bounds. This was +reported in https://bugzilla.kernel.org/show_bug.cgi?id=116751 and was +assigned CVE-2016-6480. + +Reported-by: Pengfei Wang +Fixes: 7c00ffa31 '[SCSI] 2.6 aacraid: Variable FIB size (updated patch)' +Cc: stable@vger.kernel.org +Signed-off-by: Dave Carroll +Reviewed-by: Johannes Thumshirn +Signed-off-by: Martin K. Petersen +--- + drivers/scsi/aacraid/commctrl.c | 13 +++++++++++-- + 1 file changed, 11 insertions(+), 2 deletions(-) + +diff --git a/drivers/scsi/aacraid/commctrl.c b/drivers/scsi/aacraid/commctrl.c +index b381b37..5648b71 100644 +--- a/drivers/scsi/aacraid/commctrl.c ++++ b/drivers/scsi/aacraid/commctrl.c +@@ -63,7 +63,7 @@ static int ioctl_send_fib(struct aac_dev * dev, void __user *arg) + struct fib *fibptr; + struct hw_fib * hw_fib = (struct hw_fib *)0; + dma_addr_t hw_fib_pa = (dma_addr_t)0LL; +- unsigned size; ++ unsigned int size, osize; + int retval; + + if (dev->in_reset) { +@@ -87,7 +87,8 @@ static int ioctl_send_fib(struct aac_dev * dev, void __user *arg) + * will not overrun the buffer when we copy the memory. Return + * an error if we would. + */ +- size = le16_to_cpu(kfib->header.Size) + sizeof(struct aac_fibhdr); ++ osize = size = le16_to_cpu(kfib->header.Size) + ++ sizeof(struct aac_fibhdr); + if (size < le16_to_cpu(kfib->header.SenderSize)) + size = le16_to_cpu(kfib->header.SenderSize); + if (size > dev->max_fib_size) { +@@ -118,6 +119,14 @@ static int ioctl_send_fib(struct aac_dev * dev, void __user *arg) + goto cleanup; + } + ++ /* Sanity check the second copy */ ++ if ((osize != le16_to_cpu(kfib->header.Size) + ++ sizeof(struct aac_fibhdr)) ++ || (size < le16_to_cpu(kfib->header.SenderSize))) { ++ retval = -EINVAL; ++ goto cleanup; ++ } ++ + if (kfib->header.Command == cpu_to_le16(TakeABreakPt)) { + aac_adapter_interrupt(dev); + /* +-- +2.7.4 + diff --git a/kernel.spec b/kernel.spec index 9788f61d9..350bbdef2 100644 --- a/kernel.spec +++ b/kernel.spec @@ -629,6 +629,9 @@ Patch838: drm-i915-Acquire-audio-powerwell-for-HD-Audio-regist.patch #rhbz 1353558 Patch844: 0001-selinux-Only-apply-bounds-checking-to-source-types.patch +#CVE-2016-6480 rhbz 1362466 1362467 +Patch855: aacraid-Check-size-values-after-double-fetch-from-us.patch + # END OF PATCH DEFINITIONS %endif @@ -2154,6 +2157,9 @@ fi # # %changelog +* Tue Aug 23 2016 Justin M. Forbes +- CVE-2016-6480 aacraid: Check size values after double-fetch from user (rhbz 1362466 1362467) + * Mon Aug 22 2016 Laura Abbott - 4.7.2-200 - Linux v4.7.2 From 92dea29ae51f7f46fc1bb3380b256dda70d35fac Mon Sep 17 00:00:00 2001 From: Laura Abbott Date: Tue, 23 Aug 2016 16:57:09 -0700 Subject: [PATCH 130/275] Fix for inabiltiy to send zero sized UDP packets (rhbz 1365940) --- ...x-poll-issue-with-zero-sized-packets.patch | 73 +++++++++++++++++++ kernel.spec | 6 ++ 2 files changed, 79 insertions(+) create mode 100644 0001-udp-fix-poll-issue-with-zero-sized-packets.patch diff --git a/0001-udp-fix-poll-issue-with-zero-sized-packets.patch b/0001-udp-fix-poll-issue-with-zero-sized-packets.patch new file mode 100644 index 000000000..f5edf2340 --- /dev/null +++ b/0001-udp-fix-poll-issue-with-zero-sized-packets.patch @@ -0,0 +1,73 @@ +From 9f30f83eb6347afa6b1d1df1065608c2b4485e2b Mon Sep 17 00:00:00 2001 +From: Eric Dumazet +Date: Tue, 23 Aug 2016 13:59:33 -0700 +Subject: [PATCH] udp: fix poll() issue with zero sized packets + +Laura tracked poll() [and friends] regression caused by commit +e6afc8ace6dd ("udp: remove headers from UDP packets before queueing") + +udp_poll() needs to know if there is a valid packet in receive queue, +even if its payload length is 0. + +Change first_packet_length() to return an signed int, and use -1 +as the indication of an empty queue. + +Fixes: e6afc8ace6dd ("udp: remove headers from UDP packets before queueing") +Reported-by: Laura Abbott +Signed-off-by: Eric Dumazet +Tested-by: Laura Abbott +--- + net/ipv4/udp.c | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c +index e61f7cd..00d18c5 100644 +--- a/net/ipv4/udp.c ++++ b/net/ipv4/udp.c +@@ -1182,13 +1182,13 @@ out: + * @sk: socket + * + * Drops all bad checksum frames, until a valid one is found. +- * Returns the length of found skb, or 0 if none is found. ++ * Returns the length of found skb, or -1 if none is found. + */ +-static unsigned int first_packet_length(struct sock *sk) ++static int first_packet_length(struct sock *sk) + { + struct sk_buff_head list_kill, *rcvq = &sk->sk_receive_queue; + struct sk_buff *skb; +- unsigned int res; ++ int res; + + __skb_queue_head_init(&list_kill); + +@@ -1203,7 +1203,7 @@ static unsigned int first_packet_length(struct sock *sk) + __skb_unlink(skb, rcvq); + __skb_queue_tail(&list_kill, skb); + } +- res = skb ? skb->len : 0; ++ res = skb ? skb->len : -1; + spin_unlock_bh(&rcvq->lock); + + if (!skb_queue_empty(&list_kill)) { +@@ -1232,7 +1232,7 @@ int udp_ioctl(struct sock *sk, int cmd, unsigned long arg) + + case SIOCINQ: + { +- unsigned int amount = first_packet_length(sk); ++ int amount = max_t(int, 0, first_packet_length(sk)); + + return put_user(amount, (int __user *)arg); + } +@@ -2184,7 +2184,7 @@ unsigned int udp_poll(struct file *file, struct socket *sock, poll_table *wait) + + /* Check for false positives due to checksum errors */ + if ((mask & POLLRDNORM) && !(file->f_flags & O_NONBLOCK) && +- !(sk->sk_shutdown & RCV_SHUTDOWN) && !first_packet_length(sk)) ++ !(sk->sk_shutdown & RCV_SHUTDOWN) && first_packet_length(sk) == -1) + mask &= ~(POLLIN | POLLRDNORM); + + return mask; +-- +2.7.4 + diff --git a/kernel.spec b/kernel.spec index 350bbdef2..4805bcdd4 100644 --- a/kernel.spec +++ b/kernel.spec @@ -632,6 +632,9 @@ Patch844: 0001-selinux-Only-apply-bounds-checking-to-source-types.patch #CVE-2016-6480 rhbz 1362466 1362467 Patch855: aacraid-Check-size-values-after-double-fetch-from-us.patch +#rhbz 1365940 +Patch856: 0001-udp-fix-poll-issue-with-zero-sized-packets.patch + # END OF PATCH DEFINITIONS %endif @@ -2157,6 +2160,9 @@ fi # # %changelog +* Tue Aug 23 2016 Laura Abbott +- Fix for inabiltiy to send zero sized UDP packets (rhbz 1365940) + * Tue Aug 23 2016 Justin M. Forbes - CVE-2016-6480 aacraid: Check size values after double-fetch from user (rhbz 1362466 1362467) From 49699bdee7246acf6d24858d4f8ac9a5fea3f0ff Mon Sep 17 00:00:00 2001 From: Jeffrey Bastian Date: Tue, 15 Dec 2015 13:07:02 -0600 Subject: [PATCH 131/275] add 32-bit ARM opcodes.h to kernel-devel rpm 64-bit ARM opcodes.h references the 32-bit version: $ cat arch/arm64/include/asm/opcodes.h #include <../../arm/include/asm/opcodes.h> Include the 32-bit ARM opcodes.h in kernel-devel so tools like SystemTap can use it (see RHBZ 1291868). Signed-off-by: Jeff Bastian --- kernel.spec | 2 ++ 1 file changed, 2 insertions(+) diff --git a/kernel.spec b/kernel.spec index 4805bcdd4..352d747fb 100644 --- a/kernel.spec +++ b/kernel.spec @@ -1473,6 +1473,8 @@ BuildKernel() { %ifarch aarch64 # arch/arm64/include/asm/xen references arch/arm cp -a --parents arch/arm/include/asm/xen $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ + # arch/arm64/include/asm/opcodes.h references arch/arm + cp -a --parents arch/arm/include/asm/opcodes.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ %endif # include the machine specific headers for ARM variants, if available. %ifarch %{arm} From 4e55c736133f4545a4f1b8b3cbcdbc0fa6787b25 Mon Sep 17 00:00:00 2001 From: Laura Abbott Date: Thu, 25 Aug 2016 07:31:24 -0700 Subject: [PATCH 132/275] Fix for TPROXY panic (rhbz 1370061) Fix for known oom regression --- ...-OOM-detection-regressions-since-4.7.patch | 121 ++++++++++++++++++ kernel-panic-TPROXY-vanilla-4.7.1.patch | 85 ++++++++++++ kernel.spec | 10 ++ 3 files changed, 216 insertions(+) create mode 100644 0001-OOM-detection-regressions-since-4.7.patch create mode 100644 kernel-panic-TPROXY-vanilla-4.7.1.patch diff --git a/0001-OOM-detection-regressions-since-4.7.patch b/0001-OOM-detection-regressions-since-4.7.patch new file mode 100644 index 000000000..4616c7f87 --- /dev/null +++ b/0001-OOM-detection-regressions-since-4.7.patch @@ -0,0 +1,121 @@ +From a7f80308bac4013728e33e2bcb9b60eee78f60fb Mon Sep 17 00:00:00 2001 +From: Michal Hocko +Date: Mon, 22 Aug 2016 11:32:49 +0200 +Subject: [PATCH] OOM detection regressions since 4.7 + +Hi, +there have been multiple reports [1][2][3][4][5] about pre-mature OOM +killer invocations since 4.7 which contains oom detection rework. All of +them were for order-2 (kernel stack) alloaction requests failing because +of a high fragmentation and compaction failing to make any forward +progress. While investigating this we have found out that the compaction +just gives up too early. Vlastimil has been working on compaction +improvement for quite some time and his series [6] is already sitting +in mmotm tree. This already helps a lot because it drops some heuristics +which are more aimed at lower latencies for high orders rather than +reliability. Joonsoo has then identified further problem with too many +blocks being marked as unmovable [7] and Vlastimil has prepared a patch +on top of his series [8] which is also in the mmotm tree now. + +That being said, the regression is real and should be fixed for 4.7 +stable users. [6][8] was reported to help and ooms are no longer +reproducible. I know we are quite late (rc3) in 4.8 but I would vote +for mergeing those patches and have them in 4.8. For 4.7 I would go +with a partial revert of the detection rework for high order requests +(see patch below). This patch is really trivial. If those compaction +improvements are just too large for 4.8 then we can use the same patch +as for 4.7 stable for now and revert it in 4.9 after compaction changes +are merged. + +Thoughts? + +[1] http://lkml.kernel.org/r/20160731051121.GB307@x4 +[2] http://lkml.kernel.org/r/201608120901.41463.a.miskiewicz@gmail.com +[3] http://lkml.kernel.org/r/20160801192620.GD31957@dhcp22.suse.cz +[4] https://lists.opensuse.org/opensuse-kernel/2016-08/msg00021.html +[5] https://bugzilla.opensuse.org/show_bug.cgi?id=994066 +[6] http://lkml.kernel.org/r/20160810091226.6709-1-vbabka@suse.cz +[7] http://lkml.kernel.org/r/20160816031222.GC16913@js1304-P5Q-DELUXE +[8] http://lkml.kernel.org/r/f7a9ea9d-bb88-bfd6-e340-3a933559305a@suse.cz +--- + mm/page_alloc.c | 50 ++------------------------------------------------ + 1 file changed, 2 insertions(+), 48 deletions(-) + +diff --git a/mm/page_alloc.c b/mm/page_alloc.c +index 8b3e134..6e35419 100644 +--- a/mm/page_alloc.c ++++ b/mm/page_alloc.c +@@ -3254,53 +3254,6 @@ __alloc_pages_direct_compact(gfp_t gfp_mask, unsigned int order, + return NULL; + } + +-static inline bool +-should_compact_retry(struct alloc_context *ac, int order, int alloc_flags, +- enum compact_result compact_result, enum migrate_mode *migrate_mode, +- int compaction_retries) +-{ +- int max_retries = MAX_COMPACT_RETRIES; +- +- if (!order) +- return false; +- +- /* +- * compaction considers all the zone as desperately out of memory +- * so it doesn't really make much sense to retry except when the +- * failure could be caused by weak migration mode. +- */ +- if (compaction_failed(compact_result)) { +- if (*migrate_mode == MIGRATE_ASYNC) { +- *migrate_mode = MIGRATE_SYNC_LIGHT; +- return true; +- } +- return false; +- } +- +- /* +- * make sure the compaction wasn't deferred or didn't bail out early +- * due to locks contention before we declare that we should give up. +- * But do not retry if the given zonelist is not suitable for +- * compaction. +- */ +- if (compaction_withdrawn(compact_result)) +- return compaction_zonelist_suitable(ac, order, alloc_flags); +- +- /* +- * !costly requests are much more important than __GFP_REPEAT +- * costly ones because they are de facto nofail and invoke OOM +- * killer to move on while costly can fail and users are ready +- * to cope with that. 1/4 retries is rather arbitrary but we +- * would need much more detailed feedback from compaction to +- * make a better decision. +- */ +- if (order > PAGE_ALLOC_COSTLY_ORDER) +- max_retries /= 4; +- if (compaction_retries <= max_retries) +- return true; +- +- return false; +-} + #else + static inline struct page * + __alloc_pages_direct_compact(gfp_t gfp_mask, unsigned int order, +@@ -3311,6 +3264,8 @@ __alloc_pages_direct_compact(gfp_t gfp_mask, unsigned int order, + return NULL; + } + ++#endif /* CONFIG_COMPACTION */ ++ + static inline bool + should_compact_retry(struct alloc_context *ac, unsigned int order, int alloc_flags, + enum compact_result compact_result, +@@ -3337,7 +3292,6 @@ should_compact_retry(struct alloc_context *ac, unsigned int order, int alloc_fla + } + return false; + } +-#endif /* CONFIG_COMPACTION */ + + /* Perform direct synchronous page reclaim */ + static int +-- +2.7.4 + diff --git a/kernel-panic-TPROXY-vanilla-4.7.1.patch b/kernel-panic-TPROXY-vanilla-4.7.1.patch new file mode 100644 index 000000000..9d045cabe --- /dev/null +++ b/kernel-panic-TPROXY-vanilla-4.7.1.patch @@ -0,0 +1,85 @@ +From patchwork Wed Aug 17 16:04:31 2016 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +Subject: kernel panic TPROXY , vanilla 4.7.1 +From: Eric Dumazet +X-Patchwork-Id: 660174 +X-Patchwork-Delegate: davem@davemloft.net +Message-Id: <1471449871.29842.3.camel@edumazet-glaptop3.roam.corp.google.com> +To: Denys Fedoryshchenko +Cc: Linux Kernel Network Developers , + netfilter-devel@vger.kernel.org +Date: Wed, 17 Aug 2016 09:04:31 -0700 + +On Wed, 2016-08-17 at 08:42 -0700, Eric Dumazet wrote: +> On Wed, 2016-08-17 at 17:31 +0300, Denys Fedoryshchenko wrote: +> > Hi! +> > +> > Tried to run squid on latest kernel, and hit a panic +> > Sometimes it just shows warning in dmesg (but doesnt work properly) +> > [ 75.701666] IPv4: Attempt to release TCP socket in state 10 +> > ffff88102d430780 +> > [ 83.866974] squid (2700) used greatest stack depth: 12912 bytes left +> > [ 87.506644] IPv4: Attempt to release TCP socket in state 10 +> > ffff880078a48780 +> > [ 114.704295] IPv4: Attempt to release TCP socket in state 10 +> > ffff881029f8ad00 +> > +> > I cannot catch yet oops/panic message, netconsole not working. +> > +> > After triggering warning message 3 times, i am unable to run squid +> > anymore (without reboot), and in netstat it doesnt show port running. +> > +> > firewall is: +> > *mangle +> > -A PREROUTING -p tcp -m socket -j DIVERT +> > -A PREROUTING -p tcp -m tcp --dport 80 -i eno1 -j TPROXY --on-port 3129 +> > --on-ip 0.0.0.0 --tproxy-mark 0x1/0x1 +> > -A DIVERT -j MARK --set-xmark 0x1/0xffffffff +> > -A DIVERT -j ACCEPT +> > +> > routing +> > ip rule add fwmark 1 lookup 100 +> > ip route add local default dev eno1 table 100 +> > +> > +> > squid config is default with tproxy option +> > http_port 3129 tproxy +> > +> +> Hmppff... sorry for this, I will send a fix. +> +> Thanks for the report ! +> + + +Could you try the following ? + +Thanks ! + + net/netfilter/xt_TPROXY.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/net/netfilter/xt_TPROXY.c b/net/netfilter/xt_TPROXY.c +index 7f4414d26a66..663c4c3c9072 100644 +--- a/net/netfilter/xt_TPROXY.c ++++ b/net/netfilter/xt_TPROXY.c +@@ -127,6 +127,8 @@ nf_tproxy_get_sock_v4(struct net *net, struct sk_buff *skb, void *hp, + daddr, dport, + in->ifindex); + ++ if (sk && !atomic_inc_not_zero(&sk->sk_refcnt)) ++ sk = NULL; + /* NOTE: we return listeners even if bound to + * 0.0.0.0, those are filtered out in + * xt_socket, since xt_TPROXY needs 0 bound +@@ -195,6 +197,8 @@ nf_tproxy_get_sock_v6(struct net *net, struct sk_buff *skb, int thoff, void *hp, + daddr, ntohs(dport), + in->ifindex); + ++ if (sk && !atomic_inc_not_zero(&sk->sk_refcnt)) ++ sk = NULL; + /* NOTE: we return listeners even if bound to + * 0.0.0.0, those are filtered out in + * xt_socket, since xt_TPROXY needs 0 bound diff --git a/kernel.spec b/kernel.spec index 352d747fb..90fbc8543 100644 --- a/kernel.spec +++ b/kernel.spec @@ -635,6 +635,12 @@ Patch855: aacraid-Check-size-values-after-double-fetch-from-us.patch #rhbz 1365940 Patch856: 0001-udp-fix-poll-issue-with-zero-sized-packets.patch +#rhbz 13700161 +Patch857: kernel-panic-TPROXY-vanilla-4.7.1.patch + +# lkml.kernel.org/r/<20160822093249.GA14916@dhcp22.suse.cz> +Patch858: 0001-OOM-detection-regressions-since-4.7.patch + # END OF PATCH DEFINITIONS %endif @@ -2162,6 +2168,10 @@ fi # # %changelog +* Thu Aug 25 2016 Laura Abbott +- Fix for TPROXY panic (rhbz 1370061) +- Fix for known OOM regression + * Tue Aug 23 2016 Laura Abbott - Fix for inabiltiy to send zero sized UDP packets (rhbz 1365940) From 9ff3c92f08fa8d453a7589537ecb487472dfaf0f Mon Sep 17 00:00:00 2001 From: Laura Abbott Date: Fri, 26 Aug 2016 08:27:49 -0700 Subject: [PATCH 133/275] Bump and build --- kernel.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/kernel.spec b/kernel.spec index 90fbc8543..21a92c39b 100644 --- a/kernel.spec +++ b/kernel.spec @@ -42,7 +42,7 @@ Summary: The Linux kernel # For non-released -rc kernels, this will be appended after the rcX and # gitX tags, so a 3 here would become part of release "0.rcX.gitX.3" # -%global baserelease 200 +%global baserelease 201 %global fedora_build %{baserelease} # base_sublevel is the kernel version we're starting with and patching @@ -2168,6 +2168,9 @@ fi # # %changelog +* Fri Aug 26 2016 Laura Abbott - 4.7.2-201 +- Bump and build + * Thu Aug 25 2016 Laura Abbott - Fix for TPROXY panic (rhbz 1370061) - Fix for known OOM regression From 506f0e7f2be9816922a502015710510ed790285d Mon Sep 17 00:00:00 2001 From: Peter Robinson Date: Sun, 28 Aug 2016 23:43:13 +0100 Subject: [PATCH 134/275] Minor ARM updates --- ...ial-AllWinner-A64-and-PINE64-support.patch | 1200 ----------------- bcm283x-upstream-fixes.patch | 28 - config-armv7-generic | 3 +- kernel.spec | 7 +- 4 files changed, 4 insertions(+), 1234 deletions(-) delete mode 100644 Initial-AllWinner-A64-and-PINE64-support.patch diff --git a/Initial-AllWinner-A64-and-PINE64-support.patch b/Initial-AllWinner-A64-and-PINE64-support.patch deleted file mode 100644 index 966275a8f..000000000 --- a/Initial-AllWinner-A64-and-PINE64-support.patch +++ /dev/null @@ -1,1200 +0,0 @@ -From 97f002d28e975991226ab70599731bd2ccc8c060 Mon Sep 17 00:00:00 2001 -From: Peter Robinson -Date: Sun, 6 Mar 2016 12:06:41 +0000 -Subject: [PATCH] Initial AllWinner A64 and PINE64 support - ---- - Documentation/devicetree/bindings/arm/sunxi.txt | 1 + - Documentation/devicetree/bindings/clock/sunxi.txt | 7 + - .../devicetree/bindings/vendor-prefixes.txt | 1 + - arch/arm/boot/dts/sun8i-h3.dtsi | 18 +- - arch/arm/mach-sunxi/Kconfig | 7 + - arch/arm64/Kconfig.platforms | 6 + - arch/arm64/boot/dts/Makefile | 1 + - arch/arm64/boot/dts/allwinner/Makefile | 5 + - .../dts/allwinner/sun50i-a64-pine64-common.dtsi | 80 +++ - .../boot/dts/allwinner/sun50i-a64-pine64-plus.dts | 59 ++ - .../arm64/boot/dts/allwinner/sun50i-a64-pine64.dts | 58 ++ - arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi | 624 +++++++++++++++++++++ - drivers/clk/sunxi/Makefile | 1 + - drivers/clk/sunxi/clk-factors.c | 3 +- - drivers/clk/sunxi/clk-factors.h | 1 + - drivers/clk/sunxi/clk-multi-gates.c | 105 ++++ - drivers/clk/sunxi/clk-sunxi.c | 4 +- - drivers/crypto/Kconfig | 2 +- - 23 files changed, 1582 insertions(+), 16 deletions(-) - create mode 100644 arch/arm64/boot/dts/allwinner/Makefile - create mode 100644 arch/arm64/boot/dts/allwinner/sun50i-a64-pine64-common.dtsi - create mode 100644 arch/arm64/boot/dts/allwinner/sun50i-a64-pine64-plus.dts - create mode 100644 arch/arm64/boot/dts/allwinner/sun50i-a64-pine64.dts - create mode 100644 arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi - create mode 100644 drivers/clk/sunxi/clk-multi-gates.c - create mode 100644 drivers/pinctrl/sunxi/pinctrl-sun50i-a64.c - -diff --git a/Documentation/devicetree/bindings/arm/sunxi.txt b/Documentation/devicetree/bindings/arm/sunxi.txt -index bb9b0faa..8b39d2b 100644 ---- a/Documentation/devicetree/bindings/arm/sunxi.txt -+++ b/Documentation/devicetree/bindings/arm/sunxi.txt -@@ -13,3 +13,4 @@ using one of the following compatible strings: - allwinner,sun8i-a83t - allwinner,sun8i-h3 - allwinner,sun9i-a80 -+ allwinner,sun50i-a64 -diff --git a/Documentation/devicetree/bindings/clock/sunxi.txt b/Documentation/devicetree/bindings/clock/sunxi.txt -index e59f57b..8af12b5 100644 ---- a/Documentation/devicetree/bindings/clock/sunxi.txt -+++ b/Documentation/devicetree/bindings/clock/sunxi.txt -@@ -77,6 +77,8 @@ Required properties: - "allwinner,sun9i-a80-usb-mod-clk" - for usb gates + resets on A80 - "allwinner,sun9i-a80-usb-phy-clk" - for usb phy gates + resets on A80 - "allwinner,sun4i-a10-ve-clk" - for the Video Engine clock -+ "allwinner,sunxi-multi-bus-gates-clk" - for the multi-parent bus gates -+ "allwinner,sun50i-a64-bus-gates-clk" - for the bus gates on A64 - - Required properties for all clocks: - - reg : shall be the control register address for the clock. -@@ -117,6 +119,11 @@ For "allwinner,sun6i-a31-pll6-clk", there are 2 outputs. The first output - is the normal PLL6 output, or "pll6". The second output is rate doubled - PLL6, or "pll6x2". - -+The "allwinner,sunxi-multi-bus-gates-clk" holds the actual clocks in -+child nodes, where each one specifies the parent clock that the particular -+gates are depending from. The child nodes each follow the common clock -+binding as described in this document. -+ - The "allwinner,*-mmc-clk" clocks have three different outputs: the - main clock, with the ID 0, and the output and sample clocks, with the - IDs 1 and 2, respectively. -diff --git a/Documentation/devicetree/bindings/vendor-prefixes.txt b/Documentation/devicetree/bindings/vendor-prefixes.txt -index 72e2c5a..0c22fa9 100644 ---- a/Documentation/devicetree/bindings/vendor-prefixes.txt -+++ b/Documentation/devicetree/bindings/vendor-prefixes.txt -@@ -175,6 +175,7 @@ parade Parade Technologies Inc. - pericom Pericom Technology Inc. - phytec PHYTEC Messtechnik GmbH - picochip Picochip Ltd -+pine64 Pine64 - plathome Plat'Home Co., Ltd. - plda PLDA - pixcir PIXCIR MICROELECTRONICS Co., Ltd -diff --git a/arch/arm/boot/dts/sun8i-h3.dtsi b/arch/arm/boot/dts/sun8i-h3.dtsi -index 1524130e..7c50fa0 100644 ---- a/arch/arm/boot/dts/sun8i-h3.dtsi -+++ b/arch/arm/boot/dts/sun8i-h3.dtsi -@@ -137,12 +137,12 @@ - clock-output-names = "pll6d2"; - }; - -- /* dummy clock until pll6 can be reused */ -- pll8: pll8_clk { -- #clock-cells = <0>; -- compatible = "fixed-clock"; -- clock-frequency = <1>; -- clock-output-names = "pll8"; -+ pll8: clk@c01c20044 { -+ #clock-cells = <1>; -+ compatible = "allwinner,sun6i-a31-pll6-clk"; -+ reg = <0x01c20044 0x4>; -+ clocks = <&osc24M>; -+ clock-output-names = "pll8", "pll8x2"; - }; - - cpu: cpu_clk@01c20050 { -@@ -243,7 +243,7 @@ - #clock-cells = <1>; - compatible = "allwinner,sun4i-a10-mmc-clk"; - reg = <0x01c20088 0x4>; -- clocks = <&osc24M>, <&pll6 0>, <&pll8>; -+ clocks = <&osc24M>, <&pll6 0>, <&pll8 0>; - clock-output-names = "mmc0", - "mmc0_output", - "mmc0_sample"; -@@ -253,7 +253,7 @@ - #clock-cells = <1>; - compatible = "allwinner,sun4i-a10-mmc-clk"; - reg = <0x01c2008c 0x4>; -- clocks = <&osc24M>, <&pll6 0>, <&pll8>; -+ clocks = <&osc24M>, <&pll6 0>, <&pll8 0>; - clock-output-names = "mmc1", - "mmc1_output", - "mmc1_sample"; -@@ -263,7 +263,7 @@ - #clock-cells = <1>; - compatible = "allwinner,sun4i-a10-mmc-clk"; - reg = <0x01c20090 0x4>; -- clocks = <&osc24M>, <&pll6 0>, <&pll8>; -+ clocks = <&osc24M>, <&pll6 0>, <&pll8 0>; - clock-output-names = "mmc2", - "mmc2_output", - "mmc2_sample"; -diff --git a/arch/arm/mach-sunxi/Kconfig b/arch/arm/mach-sunxi/Kconfig -index c124d65..b305f5b 100644 ---- a/arch/arm/mach-sunxi/Kconfig -+++ b/arch/arm/mach-sunxi/Kconfig -@@ -46,4 +46,11 @@ config MACH_SUN9I - default ARCH_SUNXI - select ARM_GIC - -+config MACH_SUN50I -+ bool "Allwinner A64 (sun50i) SoCs support" -+ default ARCH_SUNXI -+ select ARM_GIC -+ select HAVE_ARM_ARCH_TIMER -+ select PINCTRL_SUN50I_A64 -+ - endif -diff --git a/arch/arm64/Kconfig.platforms b/arch/arm64/Kconfig.platforms -index 21074f6..63a690d 100644 ---- a/arch/arm64/Kconfig.platforms -+++ b/arch/arm64/Kconfig.platforms -@@ -72,6 +72,12 @@ config ARCH_SEATTLE - config ARCH_SHMOBILE - bool - -+config ARCH_SUNXI -+ bool "Allwinner sunxi 64-bit SoC Family" -+ select PINCTRL_SUN50I_A64 -+ help -+ This enables support for Allwinner sunxi based SoCs like the A64. -+ - config ARCH_RENESAS - bool "Renesas SoC Platforms" - select ARCH_SHMOBILE -diff --git a/arch/arm64/boot/dts/Makefile b/arch/arm64/boot/dts/Makefile -index f832b8a..3b7428a 100644 ---- a/arch/arm64/boot/dts/Makefile -+++ b/arch/arm64/boot/dts/Makefile -@@ -2,3 +2,4 @@ - dts-dirs += al -+dts-dirs += allwinner - dts-dirs += altera - dts-dirs += amd -diff --git a/arch/arm64/boot/dts/allwinner/Makefile b/arch/arm64/boot/dts/allwinner/Makefile -new file mode 100644 -index 0000000..1e29a5a ---- /dev/null -+++ b/arch/arm64/boot/dts/allwinner/Makefile -@@ -0,0 +1,5 @@ -+dtb-$(CONFIG_ARCH_SUNXI) += sun50i-a64-pine64-plus.dtb sun50i-a64-pine64.dtb -+ -+always := $(dtb-y) -+subdir-y := $(dts-dirs) -+clean-files := *.dtb -diff --git a/arch/arm64/boot/dts/allwinner/sun50i-a64-pine64-common.dtsi b/arch/arm64/boot/dts/allwinner/sun50i-a64-pine64-common.dtsi -new file mode 100644 -index 0000000..d5a7249 ---- /dev/null -+++ b/arch/arm64/boot/dts/allwinner/sun50i-a64-pine64-common.dtsi -@@ -0,0 +1,80 @@ -+/* -+ * Copyright (c) 2016 ARM Ltd. -+ * -+ * This file is dual-licensed: you can use it either under the terms -+ * of the GPL or the X11 license, at your option. Note that this dual -+ * licensing only applies to this file, and not this project as a -+ * whole. -+ * -+ * a) This library 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. -+ * -+ * This library 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. -+ * -+ * Or, alternatively, -+ * -+ * b) Permission is hereby granted, free of charge, to any person -+ * obtaining a copy of this software and associated documentation -+ * files (the "Software"), to deal in the Software without -+ * restriction, including without limitation the rights to use, -+ * copy, modify, merge, publish, distribute, sublicense, and/or -+ * sell copies of the Software, and to permit persons to whom the -+ * Software is furnished to do so, subject to the following -+ * conditions: -+ * -+ * The above copyright notice and this permission notice shall be -+ * included in all copies or substantial portions of the Software. -+ * -+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -+ * OTHER DEALINGS IN THE SOFTWARE. -+ */ -+ -+#include "sun50i-a64.dtsi" -+ -+/ { -+ -+ aliases { -+ serial0 = &uart0; -+ }; -+ -+ soc { -+ reg_vcc3v3: vcc3v3 { -+ compatible = "regulator-fixed"; -+ regulator-name = "vcc3v3"; -+ regulator-min-microvolt = <3300000>; -+ regulator-max-microvolt = <3300000>; -+ }; -+ }; -+}; -+ -+&mmc0 { -+ pinctrl-names = "default"; -+ pinctrl-0 = <&mmc0_pins>, <&mmc0_default_cd_pin>; -+ vmmc-supply = <®_vcc3v3>; -+ cd-gpios = <&pio 5 6 0>; -+ cd-inverted; -+ status = "okay"; -+}; -+ -+&uart0 { -+ pinctrl-names = "default"; -+ pinctrl-0 = <&uart0_pins_a>; -+ status = "okay"; -+}; -+ -+&i2c1 { -+ pinctrl-names = "default"; -+ pinctrl-0 = <&i2c1_pins>; -+ status = "okay"; -+}; -diff --git a/arch/arm64/boot/dts/allwinner/sun50i-a64-pine64-plus.dts b/arch/arm64/boot/dts/allwinner/sun50i-a64-pine64-plus.dts -new file mode 100644 -index 0000000..549dc15 ---- /dev/null -+++ b/arch/arm64/boot/dts/allwinner/sun50i-a64-pine64-plus.dts -@@ -0,0 +1,59 @@ -+/* -+ * Copyright (c) 2016 ARM Ltd. -+ * -+ * This file is dual-licensed: you can use it either under the terms -+ * of the GPL or the X11 license, at your option. Note that this dual -+ * licensing only applies to this file, and not this project as a -+ * whole. -+ * -+ * a) This library 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. -+ * -+ * This library 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. -+ * -+ * Or, alternatively, -+ * -+ * b) Permission is hereby granted, free of charge, to any person -+ * obtaining a copy of this software and associated documentation -+ * files (the "Software"), to deal in the Software without -+ * restriction, including without limitation the rights to use, -+ * copy, modify, merge, publish, distribute, sublicense, and/or -+ * sell copies of the Software, and to permit persons to whom the -+ * Software is furnished to do so, subject to the following -+ * conditions: -+ * -+ * The above copyright notice and this permission notice shall be -+ * included in all copies or substantial portions of the Software. -+ * -+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -+ * OTHER DEALINGS IN THE SOFTWARE. -+ */ -+ -+/dts-v1/; -+ -+#include "sun50i-a64-pine64-common.dtsi" -+ -+/ { -+ model = "Pine64+"; -+ compatible = "pine64,pine64-plus", "allwinner,sun50i-a64"; -+ -+ chosen { -+ stdout-path = "serial0:115200n8"; -+ }; -+ -+ /* There is a model with 2GB of DRAM, but U-Boot fixes this for us. */ -+ memory { -+ reg = <0x40000000 0x40000000>; -+ }; -+}; -diff --git a/arch/arm64/boot/dts/allwinner/sun50i-a64-pine64.dts b/arch/arm64/boot/dts/allwinner/sun50i-a64-pine64.dts -new file mode 100644 -index 0000000..ebe029e ---- /dev/null -+++ b/arch/arm64/boot/dts/allwinner/sun50i-a64-pine64.dts -@@ -0,0 +1,58 @@ -+/* -+ * Copyright (c) 2016 ARM Ltd. -+ * -+ * This file is dual-licensed: you can use it either under the terms -+ * of the GPL or the X11 license, at your option. Note that this dual -+ * licensing only applies to this file, and not this project as a -+ * whole. -+ * -+ * a) This library 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. -+ * -+ * This library 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. -+ * -+ * Or, alternatively, -+ * -+ * b) Permission is hereby granted, free of charge, to any person -+ * obtaining a copy of this software and associated documentation -+ * files (the "Software"), to deal in the Software without -+ * restriction, including without limitation the rights to use, -+ * copy, modify, merge, publish, distribute, sublicense, and/or -+ * sell copies of the Software, and to permit persons to whom the -+ * Software is furnished to do so, subject to the following -+ * conditions: -+ * -+ * The above copyright notice and this permission notice shall be -+ * included in all copies or substantial portions of the Software. -+ * -+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -+ * OTHER DEALINGS IN THE SOFTWARE. -+ */ -+ -+/dts-v1/; -+ -+#include "sun50i-a64-pine64-common.dtsi" -+ -+/ { -+ model = "Pine64"; -+ compatible = "pine64,pine64", "allwinner,sun50i-a64"; -+ -+ chosen { -+ stdout-path = "serial0:115200n8"; -+ }; -+ -+ memory { -+ reg = <0x40000000 0x20000000>; -+ }; -+}; -diff --git a/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi b/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi -new file mode 100644 -index 0000000..1bd436f ---- /dev/null -+++ b/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi -@@ -0,0 +1,624 @@ -+/* -+ * Copyright (C) 2016 ARM Ltd. -+ * based on the Allwinner H3 dtsi: -+ * Copyright (C) 2015 Jens Kuske -+ * -+ * This file is dual-licensed: you can use it either under the terms -+ * of the GPL or the X11 license, at your option. Note that this dual -+ * licensing only applies to this file, and not this project as a -+ * whole. -+ * -+ * a) This file 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. -+ * -+ * This file 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. -+ * -+ * Or, alternatively, -+ * -+ * b) Permission is hereby granted, free of charge, to any person -+ * obtaining a copy of this software and associated documentation -+ * files (the "Software"), to deal in the Software without -+ * restriction, including without limitation the rights to use, -+ * copy, modify, merge, publish, distribute, sublicense, and/or -+ * sell copies of the Software, and to permit persons to whom the -+ * Software is furnished to do so, subject to the following -+ * conditions: -+ * -+ * The above copyright notice and this permission notice shall be -+ * included in all copies or substantial portions of the Software. -+ * -+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -+ * OTHER DEALINGS IN THE SOFTWARE. -+ */ -+ -+#include -+#include -+ -+/ { -+ interrupt-parent = <&gic>; -+ #address-cells = <1>; -+ #size-cells = <1>; -+ -+ cpus { -+ #address-cells = <1>; -+ #size-cells = <0>; -+ -+ cpu@0 { -+ compatible = "arm,cortex-a53", "arm,armv8"; -+ device_type = "cpu"; -+ reg = <0>; -+ enable-method = "psci"; -+ }; -+ -+ cpu@1 { -+ compatible = "arm,cortex-a53", "arm,armv8"; -+ device_type = "cpu"; -+ reg = <1>; -+ enable-method = "psci"; -+ }; -+ -+ cpu@2 { -+ compatible = "arm,cortex-a53", "arm,armv8"; -+ device_type = "cpu"; -+ reg = <2>; -+ enable-method = "psci"; -+ }; -+ -+ cpu@3 { -+ compatible = "arm,cortex-a53", "arm,armv8"; -+ device_type = "cpu"; -+ reg = <3>; -+ enable-method = "psci"; -+ }; -+ }; -+ -+ psci { -+ compatible = "arm,psci-0.2"; -+ method = "smc"; -+ }; -+ -+ memory { -+ device_type = "memory"; -+ reg = <0x40000000 0>; -+ }; -+ -+ gic: interrupt-controller@1c81000 { -+ compatible = "arm,gic-400"; -+ interrupt-controller; -+ #interrupt-cells = <3>; -+ #address-cells = <0>; -+ -+ reg = <0x01c81000 0x1000>, -+ <0x01c82000 0x2000>, -+ <0x01c84000 0x2000>, -+ <0x01c86000 0x2000>; -+ interrupts = ; -+ }; -+ -+ timer { -+ compatible = "arm,armv8-timer"; -+ interrupts = , -+ , -+ , -+ ; -+ }; -+ -+ clocks { -+ #address-cells = <1>; -+ #size-cells = <1>; -+ ranges; -+ -+ osc24M: osc24M_clk { -+ #clock-cells = <0>; -+ compatible = "fixed-clock"; -+ clock-frequency = <24000000>; -+ clock-output-names = "osc24M"; -+ }; -+ -+ osc32k: osc32k_clk { -+ #clock-cells = <0>; -+ compatible = "fixed-clock"; -+ clock-frequency = <32768>; -+ clock-output-names = "osc32k"; -+ }; -+ -+ pll1: pll1_clk@1c20000 { -+ #clock-cells = <0>; -+ compatible = "allwinner,sun8i-a23-pll1-clk"; -+ reg = <0x01c20000 0x4>; -+ clocks = <&osc24M>; -+ clock-output-names = "pll1"; -+ }; -+ -+ pll6: pll6_clk@1c20028 { -+ #clock-cells = <1>; -+ compatible = "allwinner,sun6i-a31-pll6-clk"; -+ reg = <0x01c20028 0x4>; -+ clocks = <&osc24M>; -+ clock-output-names = "pll6", "pll6x2"; -+ }; -+ -+ pll6d2: pll6d2_clk { -+ #clock-cells = <0>; -+ compatible = "fixed-factor-clock"; -+ clock-div = <2>; -+ clock-mult = <1>; -+ clocks = <&pll6 0>; -+ clock-output-names = "pll6d2"; -+ }; -+ -+ pll7: pll7_clk@1c2002c { -+ #clock-cells = <1>; -+ compatible = "allwinner,sun6i-a31-pll6-clk"; -+ reg = <0x01c2002c 0x4>; -+ clocks = <&osc24M>; -+ clock-output-names = "pll7", "pll7x2"; -+ }; -+ -+ cpu: cpu_clk@1c20050 { -+ #clock-cells = <0>; -+ compatible = "allwinner,sun4i-a10-cpu-clk"; -+ reg = <0x01c20050 0x4>; -+ clocks = <&osc32k>, <&osc24M>, <&pll1>, <&pll1>; -+ clock-output-names = "cpu"; -+ critical-clocks = <0>; -+ }; -+ -+ axi: axi_clk@1c20050 { -+ #clock-cells = <0>; -+ compatible = "allwinner,sun4i-a10-axi-clk"; -+ reg = <0x01c20050 0x4>; -+ clocks = <&cpu>; -+ clock-output-names = "axi"; -+ }; -+ -+ ahb1: ahb1_clk@1c20054 { -+ #clock-cells = <0>; -+ compatible = "allwinner,sun6i-a31-ahb1-clk"; -+ reg = <0x01c20054 0x4>; -+ clocks = <&osc32k>, <&osc24M>, <&axi>, <&pll6 0>; -+ clock-output-names = "ahb1"; -+ }; -+ -+ ahb2: ahb2_clk@1c2005c { -+ #clock-cells = <0>; -+ compatible = "allwinner,sun8i-h3-ahb2-clk"; -+ reg = <0x01c2005c 0x4>; -+ clocks = <&ahb1>, <&pll6d2>; -+ clock-output-names = "ahb2"; -+ }; -+ -+ apb1: apb1_clk@1c20054 { -+ #clock-cells = <0>; -+ compatible = "allwinner,sun4i-a10-apb0-clk"; -+ reg = <0x01c20054 0x4>; -+ clocks = <&ahb1>; -+ clock-output-names = "apb1"; -+ }; -+ -+ apb2: apb2_clk@1c20058 { -+ #clock-cells = <0>; -+ compatible = "allwinner,sun4i-a10-apb1-clk"; -+ reg = <0x01c20058 0x4>; -+ clocks = <&osc32k>, <&osc24M>, <&pll6 1>, <&pll6 1>; -+ clock-output-names = "apb2"; -+ }; -+ -+ bus_gates: bus_gates_clk@1c20060 { -+ #clock-cells = <1>; -+ compatible = "allwinner,sun50i-a64-bus-gates-clk", -+ "allwinner,sunxi-multi-bus-gates-clk"; -+ reg = <0x01c20060 0x14>; -+ ahb1_parent { -+ clocks = <&ahb1>; -+ clock-indices = <1>, <5>, -+ <6>, <8>, -+ <9>, <10>, -+ <13>, <14>, -+ <18>, <19>, -+ <20>, <21>, -+ <23>, <24>, -+ <25>, <28>, -+ <32>, <35>, -+ <36>, <37>, -+ <40>, <43>, -+ <44>, <52>, -+ <53>, <54>, -+ <135>; -+ clock-output-names = "bus_mipidsi", "bus_ce", -+ "bus_dma", "bus_mmc0", -+ "bus_mmc1", "bus_mmc2", -+ "bus_nand", "bus_sdram", -+ "bus_ts", "bus_hstimer", -+ "bus_spi0", "bus_spi1", -+ "bus_otg", "bus_otg_ehci0", -+ "bus_ehci0", "bus_otg_ohci0", -+ "bus_ve", "bus_lcd0", -+ "bus_lcd1", "bus_deint", -+ "bus_csi", "bus_hdmi", -+ "bus_de", "bus_gpu", -+ "bus_msgbox", "bus_spinlock", -+ "bus_dbg"; -+ }; -+ ahb2_parent { -+ clocks = <&ahb2>; -+ clock-indices = <17>, <29>; -+ clock-output-names = "bus_gmac", "bus_ohci0"; -+ }; -+ apb1_parent { -+ clocks = <&apb1>; -+ clock-indices = <64>, <65>, -+ <69>, <72>, -+ <76>, <77>, -+ <78>; -+ clock-output-names = "bus_codec", "bus_spdif", -+ "bus_pio", "bus_ths", -+ "bus_i2s0", "bus_i2s1", -+ "bus_i2s2"; -+ }; -+ abp2_parent { -+ clocks = <&apb2>; -+ clock-indices = <96>, <97>, -+ <98>, <101>, -+ <112>, <113>, -+ <114>, <115>, -+ <116>; -+ clock-output-names = "bus_i2c0", "bus_i2c1", -+ "bus_i2c2", "bus_scr", -+ "bus_uart0", "bus_uart1", -+ "bus_uart2", "bus_uart3", -+ "bus_uart4"; -+ }; -+ }; -+ -+ mmc0_clk: mmc0_clk@1c20088 { -+ #clock-cells = <0>; -+ compatible = "allwinner,sun4i-a10-mod0-clk"; -+ reg = <0x01c20088 0x4>; -+ clocks = <&osc24M>, <&pll6 1>, <&pll7 1>; -+ clock-output-names = "mmc0"; -+ }; -+ -+ mmc1_clk: mmc1_clk@1c2008c { -+ #clock-cells = <0>; -+ compatible = "allwinner,sun4i-a10-mod0-clk"; -+ reg = <0x01c2008c 0x4>; -+ clocks = <&osc24M>, <&pll6 1>, <&pll7 1>; -+ clock-output-names = "mmc1"; -+ }; -+ -+ mmc2_clk: mmc2_clk@1c20090 { -+ #clock-cells = <0>; -+ compatible = "allwinner,sun4i-a10-mod0-clk"; -+ reg = <0x01c20090 0x4>; -+ clocks = <&osc24M>, <&pll6 1>, <&pll7 1>; -+ clock-output-names = "mmc2"; -+ }; -+ }; -+ -+ soc { -+ compatible = "simple-bus"; -+ #address-cells = <1>; -+ #size-cells = <1>; -+ ranges; -+ -+ mmc0: mmc@1c0f000 { -+ compatible = "allwinner,sun50i-a64-mmc", -+ "allwinner,sun5i-a13-mmc"; -+ reg = <0x01c0f000 0x1000>; -+ clocks = <&bus_gates 8>, <&mmc0_clk>, -+ <&mmc0_clk>, <&mmc0_clk>; -+ clock-names = "ahb", "mmc", -+ "output", "sample"; -+ resets = <&ahb_rst 8>; -+ reset-names = "ahb"; -+ interrupts = ; -+ status = "disabled"; -+ #address-cells = <1>; -+ #size-cells = <0>; -+ }; -+ -+ mmc1: mmc@1c10000 { -+ compatible = "allwinner,sun50i-a64-mmc", -+ "allwinner,sun5i-a13-mmc"; -+ reg = <0x01c10000 0x1000>; -+ clocks = <&bus_gates 9>, <&mmc1_clk>, -+ <&mmc1_clk>, <&mmc1_clk>; -+ clock-names = "ahb", "mmc", -+ "output", "sample"; -+ resets = <&ahb_rst 9>; -+ reset-names = "ahb"; -+ interrupts = ; -+ status = "disabled"; -+ #address-cells = <1>; -+ #size-cells = <0>; -+ }; -+ -+ mmc2: mmc@1c11000 { -+ compatible = "allwinner,sun50i-a64-mmc", -+ "allwinner,sun5i-a13-mmc"; -+ reg = <0x01c11000 0x1000>; -+ clocks = <&bus_gates 10>, <&mmc2_clk>, -+ <&mmc2_clk>, <&mmc2_clk>; -+ clock-names = "ahb", "mmc", -+ "output", "sample"; -+ resets = <&ahb_rst 10>; -+ reset-names = "ahb"; -+ interrupts = ; -+ status = "disabled"; -+ #address-cells = <1>; -+ #size-cells = <0>; -+ }; -+ -+ pio: pinctrl@1c20800 { -+ compatible = "allwinner,sun50i-a64-pinctrl"; -+ reg = <0x01c20800 0x400>; -+ interrupts = , -+ , -+ ; -+ clocks = <&bus_gates 69>; -+ gpio-controller; -+ #gpio-cells = <3>; -+ interrupt-controller; -+ #interrupt-cells = <2>; -+ -+ uart0_pins_a: uart0@0 { -+ allwinner,pins = "PB8", "PB9"; -+ allwinner,function = "uart0"; -+ allwinner,drive = ; -+ allwinner,pull = ; -+ }; -+ -+ uart0_pins_b: uart0@1 { -+ allwinner,pins = "PF2", "PF3"; -+ allwinner,function = "uart0"; -+ allwinner,drive = ; -+ allwinner,pull = ; -+ }; -+ -+ uart1_2pins: uart1_2@0 { -+ allwinner,pins = "PG6", "PG7"; -+ allwinner,function = "uart1"; -+ allwinner,drive = ; -+ allwinner,pull = ; -+ }; -+ -+ uart1_4pins: uart1_4@0 { -+ allwinner,pins = "PG6", "PG7", "PG8", "PG9"; -+ allwinner,function = "uart1"; -+ allwinner,drive = ; -+ allwinner,pull = ; -+ }; -+ -+ uart2_2pins: uart2_2@0 { -+ allwinner,pins = "PB0", "PB1"; -+ allwinner,function = "uart2"; -+ allwinner,drive = ; -+ allwinner,pull = ; -+ }; -+ -+ uart2_4pins: uart2_4@0 { -+ allwinner,pins = "PB0", "PB1", "PB2", "PB3"; -+ allwinner,function = "uart2"; -+ allwinner,drive = ; -+ allwinner,pull = ; -+ }; -+ -+ uart3_pins_a: uart3@0 { -+ allwinner,pins = "PD0", "PD1"; -+ allwinner,function = "uart3"; -+ allwinner,drive = ; -+ allwinner,pull = ; -+ }; -+ -+ uart3_2pins_b: uart3_2@1 { -+ allwinner,pins = "PH4", "PH5"; -+ allwinner,function = "uart3"; -+ allwinner,drive = ; -+ allwinner,pull = ; -+ }; -+ -+ uart3_4pins_b: uart3_4@1 { -+ allwinner,pins = "PH4", "PH5", "PH6", "PH7"; -+ allwinner,function = "uart3"; -+ allwinner,drive = ; -+ allwinner,pull = ; -+ }; -+ -+ uart4_2pins: uart4_2@0 { -+ allwinner,pins = "PD2", "PD3"; -+ allwinner,function = "uart4"; -+ allwinner,drive = ; -+ allwinner,pull = ; -+ }; -+ -+ uart4_4pins: uart4_4@0 { -+ allwinner,pins = "PD2", "PD3", "PD4", "PD5"; -+ allwinner,function = "uart4"; -+ allwinner,drive = ; -+ allwinner,pull = ; -+ }; -+ -+ mmc0_pins: mmc0@0 { -+ allwinner,pins = "PF0", "PF1", "PF2", "PF3", -+ "PF4", "PF5"; -+ allwinner,function = "mmc0"; -+ allwinner,drive = ; -+ allwinner,pull = ; -+ }; -+ -+ mmc0_default_cd_pin: mmc0_cd_pin@0 { -+ allwinner,pins = "PF6"; -+ allwinner,function = "gpio_in"; -+ allwinner,drive = ; -+ allwinner,pull = ; -+ }; -+ -+ mmc1_pins: mmc1@0 { -+ allwinner,pins = "PG0", "PG1", "PG2", "PG3", -+ "PG4", "PG5"; -+ allwinner,function = "mmc1"; -+ allwinner,drive = ; -+ allwinner,pull = ; -+ }; -+ -+ mmc2_pins: mmc2@0 { -+ allwinner,pins = "PC1", "PC5", "PC6", "PC8", -+ "PC9", "PC10"; -+ allwinner,function = "mmc2"; -+ allwinner,drive = ; -+ allwinner,pull = ; -+ }; -+ -+ i2c0_pins: i2c0_pins { -+ allwinner,pins = "PH0", "PH1"; -+ allwinner,function = "i2c0"; -+ allwinner,drive = ; -+ allwinner,pull = ; -+ }; -+ -+ i2c1_pins: i2c1_pins { -+ allwinner,pins = "PH2", "PH3"; -+ allwinner,function = "i2c1"; -+ allwinner,drive = ; -+ allwinner,pull = ; -+ }; -+ -+ i2c2_pins: i2c2_pins { -+ allwinner,pins = "PE14", "PE15"; -+ allwinner,function = "i2c2"; -+ allwinner,drive = ; -+ allwinner,pull = ; -+ }; -+ }; -+ -+ ahb_rst: reset@1c202c0 { -+ #reset-cells = <1>; -+ compatible = "allwinner,sun6i-a31-clock-reset"; -+ reg = <0x01c202c0 0xc>; -+ }; -+ -+ apb1_rst: reset@1c202d0 { -+ #reset-cells = <1>; -+ compatible = "allwinner,sun6i-a31-clock-reset"; -+ reg = <0x01c202d0 0x4>; -+ }; -+ -+ apb2_rst: reset@1c202d8 { -+ #reset-cells = <1>; -+ compatible = "allwinner,sun6i-a31-clock-reset"; -+ reg = <0x01c202d8 0x4>; -+ }; -+ -+ uart0: serial@1c28000 { -+ compatible = "snps,dw-apb-uart"; -+ reg = <0x01c28000 0x400>; -+ interrupts = ; -+ reg-shift = <2>; -+ reg-io-width = <4>; -+ clocks = <&bus_gates 112>; -+ resets = <&apb2_rst 16>; -+ status = "disabled"; -+ }; -+ -+ uart1: serial@1c28400 { -+ compatible = "snps,dw-apb-uart"; -+ reg = <0x01c28400 0x400>; -+ interrupts = ; -+ reg-shift = <2>; -+ reg-io-width = <4>; -+ clocks = <&bus_gates 113>; -+ resets = <&apb2_rst 17>; -+ status = "disabled"; -+ }; -+ -+ uart2: serial@1c28800 { -+ compatible = "snps,dw-apb-uart"; -+ reg = <0x01c28800 0x400>; -+ interrupts = ; -+ reg-shift = <2>; -+ reg-io-width = <4>; -+ clocks = <&bus_gates 114>; -+ resets = <&apb2_rst 18>; -+ status = "disabled"; -+ }; -+ -+ uart3: serial@1c28c00 { -+ compatible = "snps,dw-apb-uart"; -+ reg = <0x01c28c00 0x400>; -+ interrupts = ; -+ reg-shift = <2>; -+ reg-io-width = <4>; -+ clocks = <&bus_gates 115>; -+ resets = <&apb2_rst 19>; -+ status = "disabled"; -+ }; -+ -+ uart4: serial@1c29000 { -+ compatible = "snps,dw-apb-uart"; -+ reg = <0x01c29000 0x400>; -+ interrupts = ; -+ reg-shift = <2>; -+ reg-io-width = <4>; -+ clocks = <&bus_gates 116>; -+ resets = <&apb2_rst 20>; -+ status = "disabled"; -+ }; -+ -+ rtc: rtc@1f00000 { -+ compatible = "allwinner,sun6i-a31-rtc"; -+ reg = <0x01f00000 0x54>; -+ interrupts = , -+ ; -+ }; -+ -+ i2c0: i2c@1c2ac00 { -+ compatible = "allwinner,sun6i-a31-i2c"; -+ reg = <0x01c2ac00 0x400>; -+ interrupts = ; -+ clocks = <&bus_gates 96>; -+ resets = <&apb2_rst 0>; -+ status = "disabled"; -+ #address-cells = <1>; -+ #size-cells = <0>; -+ }; -+ -+ i2c1: i2c@1c2b000 { -+ compatible = "allwinner,sun6i-a31-i2c"; -+ reg = <0x01c2b000 0x400>; -+ interrupts = ; -+ clocks = <&bus_gates 97>; -+ resets = <&apb2_rst 1>; -+ status = "disabled"; -+ #address-cells = <1>; -+ #size-cells = <0>; -+ }; -+ -+ i2c2: i2c@1c2b400 { -+ compatible = "allwinner,sun6i-a31-i2c"; -+ reg = <0x01c2b400 0x400>; -+ interrupts = ; -+ clocks = <&bus_gates 98>; -+ resets = <&apb2_rst 2>; -+ status = "disabled"; -+ #address-cells = <1>; -+ #size-cells = <0>; -+ }; -+ }; -+}; -diff --git a/drivers/clk/sunxi/Makefile b/drivers/clk/sunxi/Makefile -index 3fd7901..3a9dc31 100644 ---- a/drivers/clk/sunxi/Makefile -+++ b/drivers/clk/sunxi/Makefile -@@ -11,6 +11,7 @@ obj-y += clk-a10-ve.o - obj-y += clk-a20-gmac.o - obj-y += clk-mod0.o - obj-y += clk-simple-gates.o -+obj-y += clk-multi-gates.o - obj-y += clk-sun8i-bus-gates.o - obj-y += clk-sun8i-mbus.o - obj-y += clk-sun9i-core.o -diff --git a/drivers/clk/sunxi/clk-factors.c b/drivers/clk/sunxi/clk-factors.c -index 59428db..607ba53 100644 ---- a/drivers/clk/sunxi/clk-factors.c -+++ b/drivers/clk/sunxi/clk-factors.c -@@ -184,7 +184,8 @@ struct clk *sunxi_factors_register(struct device_node *node, - if (data->name) - clk_name = data->name; - else -- of_property_read_string(node, "clock-output-names", &clk_name); -+ of_property_read_string_index(node, "clock-output-names", -+ data->name_idx, &clk_name); - - factors = kzalloc(sizeof(struct clk_factors), GFP_KERNEL); - if (!factors) -diff --git a/drivers/clk/sunxi/clk-factors.h b/drivers/clk/sunxi/clk-factors.h -index 171085a..cc89d1f 100644 ---- a/drivers/clk/sunxi/clk-factors.h -+++ b/drivers/clk/sunxi/clk-factors.h -@@ -26,6 +26,7 @@ struct factors_data { - void (*getter)(struct factors_request *req); - void (*recalc)(struct factors_request *req); - const char *name; -+ int name_idx; - }; - - struct clk_factors { -diff --git a/drivers/clk/sunxi/clk-multi-gates.c b/drivers/clk/sunxi/clk-multi-gates.c -new file mode 100644 -index 0000000..76e715a ---- /dev/null -+++ b/drivers/clk/sunxi/clk-multi-gates.c -@@ -0,0 +1,105 @@ -+/* -+ * Copyright (C) 2016 ARM Ltd. -+ * -+ * Based on clk-sun8i-bus-gates.c, which is: -+ * Copyright (C) 2015 Jens Kuske -+ * Based on clk-simple-gates.c, which is: -+ * Copyright 2015 Maxime Ripard -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ */ -+ -+#include -+#include -+#include -+#include -+#include -+ -+static DEFINE_SPINLOCK(gates_lock); -+ -+static void __init sunxi_parse_parent(struct device_node *node, -+ struct clk_onecell_data *clk_data, -+ void __iomem *reg) -+{ -+ const char *parent = of_clk_get_parent_name(node, 0); -+ const char *clk_name; -+ struct property *prop; -+ struct clk *clk; -+ const __be32 *p; -+ int index, i = 0; -+ -+ of_property_for_each_u32(node, "clock-indices", prop, p, index) { -+ of_property_read_string_index(node, "clock-output-names", -+ i, &clk_name); -+ -+ clk = clk_register_gate(NULL, clk_name, parent, 0, -+ reg + 4 * (index / 32), index % 32, -+ 0, &gates_lock); -+ i++; -+ if (IS_ERR(clk)) { -+ pr_warn("could not register gate clock \"%s\"\n", -+ clk_name); -+ continue; -+ } -+ if (clk_data->clks[index]) -+ pr_warn("bus-gate clock %s: index #%d already registered as %s\n", -+ clk_name, index, "?"); -+ else -+ clk_data->clks[index] = clk; -+ } -+} -+ -+static void __init sunxi_multi_bus_gates_init(struct device_node *node) -+{ -+ struct clk_onecell_data *clk_data; -+ struct device_node *child; -+ struct property *prop; -+ struct resource res; -+ void __iomem *reg; -+ const __be32 *p; -+ int number = 0; -+ int index; -+ -+ reg = of_io_request_and_map(node, 0, of_node_full_name(node)); -+ if (IS_ERR(reg)) -+ return; -+ -+ clk_data = kmalloc(sizeof(struct clk_onecell_data), GFP_KERNEL); -+ if (!clk_data) -+ goto err_unmap; -+ -+ for_each_child_of_node(node, child) -+ of_property_for_each_u32(child, "clock-indices", prop, p, index) -+ number = max(number, index); -+ -+ clk_data->clks = kcalloc(number + 1, sizeof(struct clk *), GFP_KERNEL); -+ if (!clk_data->clks) -+ goto err_free_data; -+ -+ for_each_child_of_node(node, child) -+ sunxi_parse_parent(child, clk_data, reg); -+ -+ clk_data->clk_num = number + 1; -+ if (of_clk_add_provider(node, of_clk_src_onecell_get, clk_data)) -+ pr_err("registering bus-gate clock %s failed\n", node->name); -+ -+ return; -+ -+err_free_data: -+ kfree(clk_data); -+err_unmap: -+ iounmap(reg); -+ of_address_to_resource(node, 0, &res); -+ release_mem_region(res.start, resource_size(&res)); -+} -+ -+CLK_OF_DECLARE(sunxi_multi_bus_gates, "allwinner,sunxi-multi-bus-gates-clk", -+ sunxi_multi_bus_gates_init); -diff --git a/drivers/clk/sunxi/clk-sunxi.c b/drivers/clk/sunxi/clk-sunxi.c -index 5ba2188..ca59458 100644 ---- a/drivers/clk/sunxi/clk-sunxi.c -+++ b/drivers/clk/sunxi/clk-sunxi.c -@@ -711,14 +711,14 @@ static const struct factors_data sun4i_pll6_data __initconst = { - .enable = 31, - .table = &sun4i_pll5_config, - .getter = sun4i_get_pll5_factors, -- .name = "pll6", -+ .name_idx = 2, - }; - - static const struct factors_data sun6i_a31_pll6_data __initconst = { - .enable = 31, - .table = &sun6i_a31_pll6_config, - .getter = sun6i_a31_get_pll6_factors, -- .name = "pll6x2", -+ .name_idx = 1, - }; - - static const struct factors_data sun5i_a13_ahb_data __initconst = { --- -2.5.0 - diff --git a/bcm283x-upstream-fixes.patch b/bcm283x-upstream-fixes.patch index c5ee31784..82abd874b 100644 --- a/bcm283x-upstream-fixes.patch +++ b/bcm283x-upstream-fixes.patch @@ -164,31 +164,3 @@ index 0000000..2f36722 +}; -- 2.7.3 - -From 528285e99c25249456023d28f521689bf9e9eb8b Mon Sep 17 00:00:00 2001 -From: Peter Robinson -Date: Wed, 30 Mar 2016 09:35:13 +0100 -Subject: [PATCH 32/36] drop usb power domain support for the moment, kills usb - ---- - arch/arm/boot/dts/bcm2835-rpi.dtsi | 4 ---- - 1 file changed, 4 deletions(-) - -diff --git a/arch/arm/boot/dts/bcm2835-rpi.dtsi b/arch/arm/boot/dts/bcm2835-rpi.dtsi -index caf2707..b1e8145 100644 ---- a/arch/arm/boot/dts/bcm2835-rpi.dtsi -+++ b/arch/arm/boot/dts/bcm2835-rpi.dtsi -@@ -71,10 +71,6 @@ - status = "okay"; - }; - --&usb { -- power-domains = <&power RPI_POWER_DOMAIN_USB>; --}; -- - &v3d { - power-domains = <&power RPI_POWER_DOMAIN_V3D>; - }; --- -2.7.3 - diff --git a/config-armv7-generic b/config-armv7-generic index dbbcbc81e..e619963bb 100644 --- a/config-armv7-generic +++ b/config-armv7-generic @@ -243,7 +243,7 @@ CONFIG_SERIAL_8250_BCM2835AUX=y CONFIG_DMA_BCM2835=m # CONFIG_MMC_SDHCI_BCM2835 is not set CONFIG_MMC_SDHCI_IPROC=m -CONFIG_BCM2835_MBOX=m +CONFIG_BCM2835_MBOX=y CONFIG_PWM_BCM2835=m CONFIG_HW_RANDOM_BCM2835=m CONFIG_I2C_BCM2835=m @@ -557,7 +557,6 @@ CONFIG_RTC_DRV_TPS80031=m # CONFIG_RTC_DRV_DS1347 is not set # CONFIG_RTC_DRV_DS1343 is not set # CONFIG_RTC_DRV_MCP795 is not set -# CONFIG_RTC_DRV_XGENE is not set # Regulators # CONFIG_REGULATOR_ACT8865 is not set diff --git a/kernel.spec b/kernel.spec index 21a92c39b..44c579643 100644 --- a/kernel.spec +++ b/kernel.spec @@ -502,10 +502,6 @@ Patch420: arm64-avoid-needing-console-to-enable-serial-console.patch # http://www.spinics.net/lists/arm-kernel/msg490981.html Patch422: geekbox-v4-device-tree-support.patch -# http://www.spinics.net/lists/arm-kernel/msg483898.html -# This has major conflicts and needs to be rebased -# Patch423: Initial-AllWinner-A64-and-PINE64-support.patch - Patch424: arm64-pcie-acpi.patch Patch425: arm64-pcie-quirks-xgene.patch @@ -2168,6 +2164,9 @@ fi # # %changelog +* Sun Aug 28 2016 Peter Robinson +- Minor ARM updates + * Fri Aug 26 2016 Laura Abbott - 4.7.2-201 - Bump and build From 6b4a3f52ad4cd423490f04c27ec21f97666bb84f Mon Sep 17 00:00:00 2001 From: Peter Robinson Date: Mon, 29 Aug 2016 09:49:31 +0100 Subject: [PATCH 135/275] sync bcm2837 patch --- ...xes.patch => bcm2837-initial-support.patch | 69 ++++++++++++------- kernel.spec | 2 +- 2 files changed, 44 insertions(+), 27 deletions(-) rename bcm283x-upstream-fixes.patch => bcm2837-initial-support.patch (74%) diff --git a/bcm283x-upstream-fixes.patch b/bcm2837-initial-support.patch similarity index 74% rename from bcm283x-upstream-fixes.patch rename to bcm2837-initial-support.patch index 82abd874b..99769dc22 100644 --- a/bcm283x-upstream-fixes.patch +++ b/bcm2837-initial-support.patch @@ -27,30 +27,30 @@ index 11d3056..6ffe087 100644 -- 2.7.3 -From b76b1cdf2e569cceab41dcf3b3f6a90965d0a02c Mon Sep 17 00:00:00 2001 -From: Eric Anholt -Date: Fri, 4 Mar 2016 10:39:29 -0800 -Subject: [PATCH 28/36] ARM: bcm2835: Add devicetree for the Raspberry Pi 3. +From a2858804c7f5f4585b718543236b7ba3b3ec813a Mon Sep 17 00:00:00 2001 +From: Peter Robinson +Date: Mon, 29 Aug 2016 09:14:15 +0100 +Subject: [PATCH] ARM: bcm283x: Add devicetree for the Raspberry Pi 3. For now this doesn't support the new hardware present on the Pi 3 (BT, -wifi, GPIO expander). Since the GPIO expander isn't supported, we -also don't have the LEDs like the other board files do. +wifi, GPIO expander). -Signed-off-by: Eric Anholt -Acked-by: Stephen Warren +Rebased to the patch that went upstream for ARM64 + +Signed-off-by: Peter Robinson --- arch/arm/boot/dts/Makefile | 3 +- - arch/arm/boot/dts/bcm2837-rpi-3-b.dts | 22 ++++++++++++ - arch/arm/boot/dts/bcm2837.dtsi | 68 +++++++++++++++++++++++++++++++++++ - 3 files changed, 92 insertions(+), 1 deletion(-) + arch/arm/boot/dts/bcm2837-rpi-3-b.dts | 30 ++++++++++++++ + arch/arm/boot/dts/bcm2837.dtsi | 76 +++++++++++++++++++++++++++++++++++ + 3 files changed, 108 insertions(+), 1 deletion(-) create mode 100644 arch/arm/boot/dts/bcm2837-rpi-3-b.dts create mode 100644 arch/arm/boot/dts/bcm2837.dtsi diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile -index d000814..a8a0767 100644 +index faacd52..ec41888 100644 --- a/arch/arm/boot/dts/Makefile +++ b/arch/arm/boot/dts/Makefile -@@ -64,7 +64,8 @@ dtb-$(CONFIG_ARCH_BCM2835) += \ +@@ -69,7 +69,8 @@ dtb-$(CONFIG_ARCH_BCM2835) += \ bcm2835-rpi-b-rev2.dtb \ bcm2835-rpi-b-plus.dtb \ bcm2835-rpi-a-plus.dtb \ @@ -62,13 +62,14 @@ index d000814..a8a0767 100644 bcm4708-asus-rt-ac68u.dtb \ diff --git a/arch/arm/boot/dts/bcm2837-rpi-3-b.dts b/arch/arm/boot/dts/bcm2837-rpi-3-b.dts new file mode 100644 -index 0000000..5e8eafd +index 0000000..7841b72 --- /dev/null +++ b/arch/arm/boot/dts/bcm2837-rpi-3-b.dts -@@ -0,0 +1,22 @@ +@@ -0,0 +1,30 @@ +/dts-v1/; +#include "bcm2837.dtsi" +#include "bcm2835-rpi.dtsi" ++#include "bcm283x-rpi-smsc9514.dtsi" + +/ { + compatible = "raspberrypi,3-model-b", "brcm,bcm2837"; @@ -77,23 +78,30 @@ index 0000000..5e8eafd + memory { + reg = <0 0x40000000>; + }; ++ ++ leds { ++ act { ++ gpios = <&gpio 47 0>; ++ }; ++ ++ pwr { ++ label = "PWR"; ++ gpios = <&gpio 35 0>; ++ default-state = "keep"; ++ linux,default-trigger = "default-on"; ++ }; ++ }; +}; + -+&gpio { -+ pinctrl-0 = <&gpioout &alt0 &i2s_alt0 &alt3>; -+ -+ /* I2S interface */ -+ i2s_alt0: i2s_alt0 { -+ brcm,pins = <28 29 30 31>; -+ brcm,function = ; -+ }; ++&uart1 { ++ status = "okay"; +}; diff --git a/arch/arm/boot/dts/bcm2837.dtsi b/arch/arm/boot/dts/bcm2837.dtsi new file mode 100644 -index 0000000..2f36722 +index 0000000..8216bbb --- /dev/null +++ b/arch/arm/boot/dts/bcm2837.dtsi -@@ -0,0 +1,68 @@ +@@ -0,0 +1,76 @@ +#include "bcm283x.dtsi" + +/ { @@ -131,24 +139,32 @@ index 0000000..2f36722 + device_type = "cpu"; + compatible = "arm,cortex-a53"; + reg = <0>; ++ enable-method = "spin-table"; ++ cpu-release-addr = <0x0 0x000000d8>; + }; + + cpu1: cpu@1 { + device_type = "cpu"; + compatible = "arm,cortex-a53"; + reg = <1>; ++ enable-method = "spin-table"; ++ cpu-release-addr = <0x0 0x000000e0>; + }; + + cpu2: cpu@2 { + device_type = "cpu"; + compatible = "arm,cortex-a53"; + reg = <2>; ++ enable-method = "spin-table"; ++ cpu-release-addr = <0x0 0x000000e8>; + }; + + cpu3: cpu@3 { + device_type = "cpu"; + compatible = "arm,cortex-a53"; + reg = <3>; ++ enable-method = "spin-table"; ++ cpu-release-addr = <0x0 0x000000f0>; + }; + }; +}; @@ -163,4 +179,5 @@ index 0000000..2f36722 + interrupts = <8>; +}; -- -2.7.3 +2.9.3 + diff --git a/kernel.spec b/kernel.spec index 44c579643..ff60881cd 100644 --- a/kernel.spec +++ b/kernel.spec @@ -511,7 +511,7 @@ Patch426: usb-phy-tegra-Add-38.4MHz-clock-table-entry.patch # http://patchwork.ozlabs.org/patch/587554/ Patch430: ARM-tegra-usb-no-reset.patch -Patch431: bcm283x-upstream-fixes.patch +Patch431: bcm2837-initial-support.patch Patch432: arm-i.MX6-Utilite-device-dtb.patch From 35b97b74a502bf9b59f3fcf808824db4bbd6b1b8 Mon Sep 17 00:00:00 2001 From: Alec Leamas Date: Thu, 25 Aug 2016 13:50:07 +0200 Subject: [PATCH 136/275] Add event decoding fix (rhbz 1360688) [labbott@redhat.com: Add change log and tweak commit message] --- kernel.spec | 6 +++++ rc-core-fix-repeat-events.patch | 46 +++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 rc-core-fix-repeat-events.patch diff --git a/kernel.spec b/kernel.spec index ff60881cd..1458e5422 100644 --- a/kernel.spec +++ b/kernel.spec @@ -637,6 +637,9 @@ Patch857: kernel-panic-TPROXY-vanilla-4.7.1.patch # lkml.kernel.org/r/<20160822093249.GA14916@dhcp22.suse.cz> Patch858: 0001-OOM-detection-regressions-since-4.7.patch +#rhbz 1360688 +Patch859: rc-core-fix-repeat-events.patch + # END OF PATCH DEFINITIONS %endif @@ -2164,6 +2167,9 @@ fi # # %changelog +* Mon Aug 29 2016 Laura Abbott +- Add event decoding fix (rhbz 1360688) + * Sun Aug 28 2016 Peter Robinson - Minor ARM updates diff --git a/rc-core-fix-repeat-events.patch b/rc-core-fix-repeat-events.patch new file mode 100644 index 000000000..c7bfce282 --- /dev/null +++ b/rc-core-fix-repeat-events.patch @@ -0,0 +1,46 @@ +From: "Ole Ernst " +Date: Sat, 30 Jul 2016 15:19:27 +0200 +Subject: Partly revert "[media] rc-core: allow calling rc_open with device not initialized" + +This partly reverts commit 078600f514a12fd763ac84c86af68ef5b5267563. + +Due to the relocation of input_register_device() call, holding down a +button on an IR remote no longer resulted in repeated key down events. + +See: http://www.spinics.net/lists/linux-media/msg103384.html + +Signed-off-by: Ole Ernst +--- + drivers/media/rc/rc-main.c | 9 ++++----- + 1 file changed, 4 insertions(+), 5 deletions(-) + +diff --git a/drivers/media/rc/rc-main.c b/drivers/media/rc/rc-main.c +index 8e7f292..26fd63b 100644 +--- a/drivers/media/rc/rc-main.c ++++ b/drivers/media/rc/rc-main.c +@@ -1460,6 +1460,10 @@ int rc_register_device(struct rc_dev *dev) + dev->input_dev->phys = dev->input_phys; + dev->input_dev->name = dev->input_name; + ++ rc = input_register_device(dev->input_dev); ++ if (rc) ++ goto out_table; ++ + /* + * Default delay of 250ms is too short for some protocols, especially + * since the timeout is currently set to 250ms. Increase it to 500ms, +@@ -1475,11 +1479,6 @@ int rc_register_device(struct rc_dev *dev) + */ + dev->input_dev->rep[REP_PERIOD] = 125; + +- /* rc_open will be called here */ +- rc = input_register_device(dev->input_dev); +- if (rc) +- goto out_table; +- + path = kobject_get_path(&dev->dev.kobj, GFP_KERNEL); + dev_info(&dev->dev, "%s as %s\n", + dev->input_name ?: "Unspecified device", path ?: "N/A"); +-- +2.9.0 + From d984db4763783313e87597f8ddc12761f7492559 Mon Sep 17 00:00:00 2001 From: Laura Abbott Date: Mon, 29 Aug 2016 14:35:11 -0700 Subject: [PATCH 137/275] Add fix for NFS client issue (rhbz 1371237) --- ...ite-looping-in-rpc_clnt_iterate_for_.patch | 46 +++++++++++++++++++ kernel.spec | 4 ++ 2 files changed, 50 insertions(+) create mode 100644 0001-SUNRPC-Fix-infinite-looping-in-rpc_clnt_iterate_for_.patch diff --git a/0001-SUNRPC-Fix-infinite-looping-in-rpc_clnt_iterate_for_.patch b/0001-SUNRPC-Fix-infinite-looping-in-rpc_clnt_iterate_for_.patch new file mode 100644 index 000000000..0373d3a2a --- /dev/null +++ b/0001-SUNRPC-Fix-infinite-looping-in-rpc_clnt_iterate_for_.patch @@ -0,0 +1,46 @@ +From bdc54d8e3cb4a41dddcabfd86d9eb3aa5f622b75 Mon Sep 17 00:00:00 2001 +From: Trond Myklebust +Date: Sat, 16 Jul 2016 11:47:00 -0400 +Subject: [PATCH] SUNRPC: Fix infinite looping in + rpc_clnt_iterate_for_each_xprt + +If there were less than 2 entries in the multipath list, then +xprt_iter_next_entry_multiple() would never advance beyond the +first entry, which is correct for round robin behaviour, but not +for the list iteration. + +The end result would be infinite looping in rpc_clnt_iterate_for_each_xprt() +as we would never see the xprt == NULL condition fulfilled. + +Reported-by: Oleg Drokin +Fixes: 80b14d5e61ca ("SUNRPC: Add a structure to track multiple transports") +Signed-off-by: Trond Myklebust +--- + net/sunrpc/xprtmultipath.c | 8 +++----- + 1 file changed, 3 insertions(+), 5 deletions(-) + +diff --git a/net/sunrpc/xprtmultipath.c b/net/sunrpc/xprtmultipath.c +index e7fd769..66c9d63 100644 +--- a/net/sunrpc/xprtmultipath.c ++++ b/net/sunrpc/xprtmultipath.c +@@ -271,14 +271,12 @@ struct rpc_xprt *xprt_iter_next_entry_multiple(struct rpc_xprt_iter *xpi, + xprt_switch_find_xprt_t find_next) + { + struct rpc_xprt_switch *xps = rcu_dereference(xpi->xpi_xpswitch); +- struct list_head *head; + + if (xps == NULL) + return NULL; +- head = &xps->xps_xprt_list; +- if (xps->xps_nxprts < 2) +- return xprt_switch_find_first_entry(head); +- return xprt_switch_set_next_cursor(head, &xpi->xpi_cursor, find_next); ++ return xprt_switch_set_next_cursor(&xps->xps_xprt_list, ++ &xpi->xpi_cursor, ++ find_next); + } + + static +-- +2.7.4 + diff --git a/kernel.spec b/kernel.spec index 1458e5422..0775128d2 100644 --- a/kernel.spec +++ b/kernel.spec @@ -640,6 +640,9 @@ Patch858: 0001-OOM-detection-regressions-since-4.7.patch #rhbz 1360688 Patch859: rc-core-fix-repeat-events.patch +#rhbz 1371237 +Patch860: 0001-SUNRPC-Fix-infinite-looping-in-rpc_clnt_iterate_for_.patch + # END OF PATCH DEFINITIONS %endif @@ -2169,6 +2172,7 @@ fi %changelog * Mon Aug 29 2016 Laura Abbott - Add event decoding fix (rhbz 1360688) +- Add fix for NFS client issue (rhbz 1371237) * Sun Aug 28 2016 Peter Robinson - Minor ARM updates From ab89142d257bfdb713e41b9cce02e695bfaa2955 Mon Sep 17 00:00:00 2001 From: Peter Robinson Date: Thu, 1 Sep 2016 09:29:57 +0100 Subject: [PATCH 138/275] add missing patch for bcm2837 support (clearly looking at too many branches when I missed this :-/ ) --- bcm2837-initial-support.patch | 149 ++++++++++++++++++++++++++++++++++ 1 file changed, 149 insertions(+) diff --git a/bcm2837-initial-support.patch b/bcm2837-initial-support.patch index 99769dc22..ba3902c4b 100644 --- a/bcm2837-initial-support.patch +++ b/bcm2837-initial-support.patch @@ -181,3 +181,152 @@ index 0000000..8216bbb -- 2.9.3 +From fc07a6d394f41a98f839507580082184ac684912 Mon Sep 17 00:00:00 2001 +From: Lubomir Rintel +Date: Mon, 2 May 2016 09:06:51 +0200 +Subject: [PATCH 1/2] ARM: bcm2835: dt: Add the ethernet to the device trees + +The hub and the ethernet in its port 1 are hardwired on the board. + +Compared to the adapters that can be plugged into the USB ports, this +one has no serial EEPROM to store its MAC. Nevertheless, the Raspberry Pi +has the MAC address for this adapter in its ROM, accessible from its +firmware. + +U-Boot can read out the address and set the local-mac-address property of the +node with "ethernet" alias. Let's add the node so that U-Boot can do its +business. + +Model B rev2 and Model B+ entries were verified by me, the hierarchy and +pid/vid pair for the Version 2 was provided by Peter Chen. Original +Model B is a blind shot, though very likely correct. + +Signed-off-by: Lubomir Rintel +Acked-by: Stephen Warren +Signed-off-by: Eric Anholt +--- + arch/arm/boot/dts/bcm2835-rpi-b-plus.dts | 1 + + arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts | 1 + + arch/arm/boot/dts/bcm2835-rpi-b.dts | 1 + + arch/arm/boot/dts/bcm2836-rpi-2-b.dts | 1 + + arch/arm/boot/dts/bcm283x-rpi-smsc9512.dtsi | 19 +++++++++++++++++++ + arch/arm/boot/dts/bcm283x-rpi-smsc9514.dtsi | 19 +++++++++++++++++++ + arch/arm/boot/dts/bcm283x.dtsi | 2 ++ + 7 files changed, 44 insertions(+) + create mode 100644 arch/arm/boot/dts/bcm283x-rpi-smsc9512.dtsi + create mode 100644 arch/arm/boot/dts/bcm283x-rpi-smsc9514.dtsi + +diff --git a/arch/arm/boot/dts/bcm2835-rpi-b-plus.dts b/arch/arm/boot/dts/bcm2835-rpi-b-plus.dts +index 57d313b..d5fdb8e 100644 +--- a/arch/arm/boot/dts/bcm2835-rpi-b-plus.dts ++++ b/arch/arm/boot/dts/bcm2835-rpi-b-plus.dts +@@ -1,6 +1,7 @@ + /dts-v1/; + #include "bcm2835.dtsi" + #include "bcm2835-rpi.dtsi" ++#include "bcm283x-rpi-smsc9514.dtsi" + + / { + compatible = "raspberrypi,model-b-plus", "brcm,bcm2835"; +diff --git a/arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts b/arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts +index cf2774e..bfc4bd9 100644 +--- a/arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts ++++ b/arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts +@@ -1,6 +1,7 @@ + /dts-v1/; + #include "bcm2835.dtsi" + #include "bcm2835-rpi.dtsi" ++#include "bcm283x-rpi-smsc9512.dtsi" + + / { + compatible = "raspberrypi,model-b-rev2", "brcm,bcm2835"; +diff --git a/arch/arm/boot/dts/bcm2835-rpi-b.dts b/arch/arm/boot/dts/bcm2835-rpi-b.dts +index 8b15f9c..0371bb7 100644 +--- a/arch/arm/boot/dts/bcm2835-rpi-b.dts ++++ b/arch/arm/boot/dts/bcm2835-rpi-b.dts +@@ -1,6 +1,7 @@ + /dts-v1/; + #include "bcm2835.dtsi" + #include "bcm2835-rpi.dtsi" ++#include "bcm283x-rpi-smsc9512.dtsi" + + / { + compatible = "raspberrypi,model-b", "brcm,bcm2835"; +diff --git a/arch/arm/boot/dts/bcm2836-rpi-2-b.dts b/arch/arm/boot/dts/bcm2836-rpi-2-b.dts +index c4743f4..29e1cfe 100644 +--- a/arch/arm/boot/dts/bcm2836-rpi-2-b.dts ++++ b/arch/arm/boot/dts/bcm2836-rpi-2-b.dts +@@ -1,6 +1,7 @@ + /dts-v1/; + #include "bcm2836.dtsi" + #include "bcm2835-rpi.dtsi" ++#include "bcm283x-rpi-smsc9514.dtsi" + + / { + compatible = "raspberrypi,2-model-b", "brcm,bcm2836"; +diff --git a/arch/arm/boot/dts/bcm283x-rpi-smsc9512.dtsi b/arch/arm/boot/dts/bcm283x-rpi-smsc9512.dtsi +new file mode 100644 +index 0000000..12c981e +--- /dev/null ++++ b/arch/arm/boot/dts/bcm283x-rpi-smsc9512.dtsi +@@ -0,0 +1,19 @@ ++/ { ++ aliases { ++ ethernet = ðernet; ++ }; ++}; ++ ++&usb { ++ usb1@1 { ++ compatible = "usb424,9512"; ++ reg = <1>; ++ #address-cells = <1>; ++ #size-cells = <0>; ++ ++ ethernet: usbether@1 { ++ compatible = "usb424,ec00"; ++ reg = <1>; ++ }; ++ }; ++}; +diff --git a/arch/arm/boot/dts/bcm283x-rpi-smsc9514.dtsi b/arch/arm/boot/dts/bcm283x-rpi-smsc9514.dtsi +new file mode 100644 +index 0000000..3f0a56e +--- /dev/null ++++ b/arch/arm/boot/dts/bcm283x-rpi-smsc9514.dtsi +@@ -0,0 +1,19 @@ ++/ { ++ aliases { ++ ethernet = ðernet; ++ }; ++}; ++ ++&usb { ++ usb1@1 { ++ compatible = "usb424,9514"; ++ reg = <1>; ++ #address-cells = <1>; ++ #size-cells = <0>; ++ ++ ethernet: usbether@1 { ++ compatible = "usb424,ec00"; ++ reg = <1>; ++ }; ++ }; ++}; +diff --git a/arch/arm/boot/dts/bcm283x.dtsi b/arch/arm/boot/dts/bcm283x.dtsi +index 10b27b9..b982522 100644 +--- a/arch/arm/boot/dts/bcm283x.dtsi ++++ b/arch/arm/boot/dts/bcm283x.dtsi +@@ -287,6 +287,8 @@ + compatible = "brcm,bcm2835-usb"; + reg = <0x7e980000 0x10000>; + interrupts = <1 9>; ++ #address-cells = <1>; ++ #size-cells = <0>; + }; + + v3d: v3d@7ec00000 { +-- +2.9.3 + From 4b8d25bc3d43e4eff06c268281857e654ef6189c Mon Sep 17 00:00:00 2001 From: Laura Abbott Date: Fri, 2 Sep 2016 10:46:32 -0700 Subject: [PATCH 139/275] Add fix for known cgroup deadlock --- ...ad-locked-section-of-cgroup_threadgr.patch | 112 ++++++++++++++++++ kernel.spec | 6 + 2 files changed, 118 insertions(+) create mode 100644 0001-cgroup-reduce-read-locked-section-of-cgroup_threadgr.patch diff --git a/0001-cgroup-reduce-read-locked-section-of-cgroup_threadgr.patch b/0001-cgroup-reduce-read-locked-section-of-cgroup_threadgr.patch new file mode 100644 index 000000000..daad25310 --- /dev/null +++ b/0001-cgroup-reduce-read-locked-section-of-cgroup_threadgr.patch @@ -0,0 +1,112 @@ +From 568ac888215c7fb2fabe8ea739b00ec3c1f5d440 Mon Sep 17 00:00:00 2001 +From: Balbir Singh +Date: Wed, 10 Aug 2016 15:43:06 -0400 +Subject: [PATCH] cgroup: reduce read locked section of + cgroup_threadgroup_rwsem during fork + +cgroup_threadgroup_rwsem is acquired in read mode during process exit +and fork. It is also grabbed in write mode during +__cgroups_proc_write(). I've recently run into a scenario with lots +of memory pressure and OOM and I am beginning to see + +systemd + + __switch_to+0x1f8/0x350 + __schedule+0x30c/0x990 + schedule+0x48/0xc0 + percpu_down_write+0x114/0x170 + __cgroup_procs_write.isra.12+0xb8/0x3c0 + cgroup_file_write+0x74/0x1a0 + kernfs_fop_write+0x188/0x200 + __vfs_write+0x6c/0xe0 + vfs_write+0xc0/0x230 + SyS_write+0x6c/0x110 + system_call+0x38/0xb4 + +This thread is waiting on the reader of cgroup_threadgroup_rwsem to +exit. The reader itself is under memory pressure and has gone into +reclaim after fork. There are times the reader also ends up waiting on +oom_lock as well. + + __switch_to+0x1f8/0x350 + __schedule+0x30c/0x990 + schedule+0x48/0xc0 + jbd2_log_wait_commit+0xd4/0x180 + ext4_evict_inode+0x88/0x5c0 + evict+0xf8/0x2a0 + dispose_list+0x50/0x80 + prune_icache_sb+0x6c/0x90 + super_cache_scan+0x190/0x210 + shrink_slab.part.15+0x22c/0x4c0 + shrink_zone+0x288/0x3c0 + do_try_to_free_pages+0x1dc/0x590 + try_to_free_pages+0xdc/0x260 + __alloc_pages_nodemask+0x72c/0xc90 + alloc_pages_current+0xb4/0x1a0 + page_table_alloc+0xc0/0x170 + __pte_alloc+0x58/0x1f0 + copy_page_range+0x4ec/0x950 + copy_process.isra.5+0x15a0/0x1870 + _do_fork+0xa8/0x4b0 + ppc_clone+0x8/0xc + +In the meanwhile, all processes exiting/forking are blocked almost +stalling the system. + +This patch moves the threadgroup_change_begin from before +cgroup_fork() to just before cgroup_canfork(). There is no nee to +worry about threadgroup changes till the task is actually added to the +threadgroup. This avoids having to call reclaim with +cgroup_threadgroup_rwsem held. + +tj: Subject and description edits. + +Signed-off-by: Balbir Singh +Acked-by: Zefan Li +Cc: Oleg Nesterov +Cc: Andrew Morton +Cc: stable@vger.kernel.org # v4.2+ +Signed-off-by: Tejun Heo +--- + kernel/fork.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/kernel/fork.c b/kernel/fork.c +index 52e725d..aaf7823 100644 +--- a/kernel/fork.c ++++ b/kernel/fork.c +@@ -1404,7 +1404,6 @@ static struct task_struct *copy_process(unsigned long clone_flags, + p->real_start_time = ktime_get_boot_ns(); + p->io_context = NULL; + p->audit_context = NULL; +- threadgroup_change_begin(current); + cgroup_fork(p); + #ifdef CONFIG_NUMA + p->mempolicy = mpol_dup(p->mempolicy); +@@ -1556,6 +1555,7 @@ static struct task_struct *copy_process(unsigned long clone_flags, + INIT_LIST_HEAD(&p->thread_group); + p->task_works = NULL; + ++ threadgroup_change_begin(current); + /* + * Ensure that the cgroup subsystem policies allow the new process to be + * forked. It should be noted the the new process's css_set can be changed +@@ -1656,6 +1656,7 @@ static struct task_struct *copy_process(unsigned long clone_flags, + bad_fork_cancel_cgroup: + cgroup_cancel_fork(p); + bad_fork_free_pid: ++ threadgroup_change_end(current); + if (pid != &init_struct_pid) + free_pid(pid); + bad_fork_cleanup_thread: +@@ -1688,7 +1689,6 @@ bad_fork_cleanup_policy: + mpol_put(p->mempolicy); + bad_fork_cleanup_threadgroup_lock: + #endif +- threadgroup_change_end(current); + delayacct_tsk_free(p); + bad_fork_cleanup_count: + atomic_dec(&p->cred->user->processes); +-- +2.7.4 + diff --git a/kernel.spec b/kernel.spec index 0775128d2..0e114f5d6 100644 --- a/kernel.spec +++ b/kernel.spec @@ -643,6 +643,9 @@ Patch859: rc-core-fix-repeat-events.patch #rhbz 1371237 Patch860: 0001-SUNRPC-Fix-infinite-looping-in-rpc_clnt_iterate_for_.patch +# https://lkml.org/lkml/2016/8/30/566 +Patch861: 0001-cgroup-reduce-read-locked-section-of-cgroup_threadgr.patch + # END OF PATCH DEFINITIONS %endif @@ -2170,6 +2173,9 @@ fi # # %changelog +* Fri Sep 02 2016 +- Add fix for known cgroup deadlock + * Mon Aug 29 2016 Laura Abbott - Add event decoding fix (rhbz 1360688) - Add fix for NFS client issue (rhbz 1371237) From 4a78ca839f105452c67e27fddc2e6b75291bd51d Mon Sep 17 00:00:00 2001 From: Laura Abbott Date: Wed, 7 Sep 2016 09:23:35 -0700 Subject: [PATCH 140/275] Linux v4.7.3 - Silence KASLR warning (rhbz 1350174) --- ...ite-looping-in-rpc_clnt_iterate_for_.patch | 46 ------ ...ze-values-after-double-fetch-from-us.patch | 65 --------- ...-audio-powerwell-for-HD-Audio-regist.patch | 64 --------- kernel.spec | 20 ++- sources | 2 +- ...-Remove-x86-hibernation-restrictions.patch | 131 ++++++++++++++++++ 6 files changed, 141 insertions(+), 187 deletions(-) delete mode 100644 0001-SUNRPC-Fix-infinite-looping-in-rpc_clnt_iterate_for_.patch delete mode 100644 aacraid-Check-size-values-after-double-fetch-from-us.patch delete mode 100644 drm-i915-Acquire-audio-powerwell-for-HD-Audio-regist.patch create mode 100644 tip-x86-boot-x86-KASLR-x86-power-Remove-x86-hibernation-restrictions.patch diff --git a/0001-SUNRPC-Fix-infinite-looping-in-rpc_clnt_iterate_for_.patch b/0001-SUNRPC-Fix-infinite-looping-in-rpc_clnt_iterate_for_.patch deleted file mode 100644 index 0373d3a2a..000000000 --- a/0001-SUNRPC-Fix-infinite-looping-in-rpc_clnt_iterate_for_.patch +++ /dev/null @@ -1,46 +0,0 @@ -From bdc54d8e3cb4a41dddcabfd86d9eb3aa5f622b75 Mon Sep 17 00:00:00 2001 -From: Trond Myklebust -Date: Sat, 16 Jul 2016 11:47:00 -0400 -Subject: [PATCH] SUNRPC: Fix infinite looping in - rpc_clnt_iterate_for_each_xprt - -If there were less than 2 entries in the multipath list, then -xprt_iter_next_entry_multiple() would never advance beyond the -first entry, which is correct for round robin behaviour, but not -for the list iteration. - -The end result would be infinite looping in rpc_clnt_iterate_for_each_xprt() -as we would never see the xprt == NULL condition fulfilled. - -Reported-by: Oleg Drokin -Fixes: 80b14d5e61ca ("SUNRPC: Add a structure to track multiple transports") -Signed-off-by: Trond Myklebust ---- - net/sunrpc/xprtmultipath.c | 8 +++----- - 1 file changed, 3 insertions(+), 5 deletions(-) - -diff --git a/net/sunrpc/xprtmultipath.c b/net/sunrpc/xprtmultipath.c -index e7fd769..66c9d63 100644 ---- a/net/sunrpc/xprtmultipath.c -+++ b/net/sunrpc/xprtmultipath.c -@@ -271,14 +271,12 @@ struct rpc_xprt *xprt_iter_next_entry_multiple(struct rpc_xprt_iter *xpi, - xprt_switch_find_xprt_t find_next) - { - struct rpc_xprt_switch *xps = rcu_dereference(xpi->xpi_xpswitch); -- struct list_head *head; - - if (xps == NULL) - return NULL; -- head = &xps->xps_xprt_list; -- if (xps->xps_nxprts < 2) -- return xprt_switch_find_first_entry(head); -- return xprt_switch_set_next_cursor(head, &xpi->xpi_cursor, find_next); -+ return xprt_switch_set_next_cursor(&xps->xps_xprt_list, -+ &xpi->xpi_cursor, -+ find_next); - } - - static --- -2.7.4 - diff --git a/aacraid-Check-size-values-after-double-fetch-from-us.patch b/aacraid-Check-size-values-after-double-fetch-from-us.patch deleted file mode 100644 index 6ff771160..000000000 --- a/aacraid-Check-size-values-after-double-fetch-from-us.patch +++ /dev/null @@ -1,65 +0,0 @@ -From fa00c437eef8dc2e7b25f8cd868cfa405fcc2bb3 Mon Sep 17 00:00:00 2001 -From: Dave Carroll -Date: Fri, 5 Aug 2016 13:44:10 -0600 -Subject: [PATCH] aacraid: Check size values after double-fetch from user - -In aacraid's ioctl_send_fib() we do two fetches from userspace, one the -get the fib header's size and one for the fib itself. Later we use the -size field from the second fetch to further process the fib. If for some -reason the size from the second fetch is different than from the first -fix, we may encounter an out-of- bounds access in aac_fib_send(). We -also check the sender size to insure it is not out of bounds. This was -reported in https://bugzilla.kernel.org/show_bug.cgi?id=116751 and was -assigned CVE-2016-6480. - -Reported-by: Pengfei Wang -Fixes: 7c00ffa31 '[SCSI] 2.6 aacraid: Variable FIB size (updated patch)' -Cc: stable@vger.kernel.org -Signed-off-by: Dave Carroll -Reviewed-by: Johannes Thumshirn -Signed-off-by: Martin K. Petersen ---- - drivers/scsi/aacraid/commctrl.c | 13 +++++++++++-- - 1 file changed, 11 insertions(+), 2 deletions(-) - -diff --git a/drivers/scsi/aacraid/commctrl.c b/drivers/scsi/aacraid/commctrl.c -index b381b37..5648b71 100644 ---- a/drivers/scsi/aacraid/commctrl.c -+++ b/drivers/scsi/aacraid/commctrl.c -@@ -63,7 +63,7 @@ static int ioctl_send_fib(struct aac_dev * dev, void __user *arg) - struct fib *fibptr; - struct hw_fib * hw_fib = (struct hw_fib *)0; - dma_addr_t hw_fib_pa = (dma_addr_t)0LL; -- unsigned size; -+ unsigned int size, osize; - int retval; - - if (dev->in_reset) { -@@ -87,7 +87,8 @@ static int ioctl_send_fib(struct aac_dev * dev, void __user *arg) - * will not overrun the buffer when we copy the memory. Return - * an error if we would. - */ -- size = le16_to_cpu(kfib->header.Size) + sizeof(struct aac_fibhdr); -+ osize = size = le16_to_cpu(kfib->header.Size) + -+ sizeof(struct aac_fibhdr); - if (size < le16_to_cpu(kfib->header.SenderSize)) - size = le16_to_cpu(kfib->header.SenderSize); - if (size > dev->max_fib_size) { -@@ -118,6 +119,14 @@ static int ioctl_send_fib(struct aac_dev * dev, void __user *arg) - goto cleanup; - } - -+ /* Sanity check the second copy */ -+ if ((osize != le16_to_cpu(kfib->header.Size) + -+ sizeof(struct aac_fibhdr)) -+ || (size < le16_to_cpu(kfib->header.SenderSize))) { -+ retval = -EINVAL; -+ goto cleanup; -+ } -+ - if (kfib->header.Command == cpu_to_le16(TakeABreakPt)) { - aac_adapter_interrupt(dev); - /* --- -2.7.4 - diff --git a/drm-i915-Acquire-audio-powerwell-for-HD-Audio-regist.patch b/drm-i915-Acquire-audio-powerwell-for-HD-Audio-regist.patch deleted file mode 100644 index a5dc6f3a2..000000000 --- a/drm-i915-Acquire-audio-powerwell-for-HD-Audio-regist.patch +++ /dev/null @@ -1,64 +0,0 @@ -From 74f829a6e44fe217b6161f8935524fc807be0648 Mon Sep 17 00:00:00 2001 -From: Chris Wilson -Date: Sat, 9 Jul 2016 11:01:20 +0100 -Subject: [PATCH] drm/i915: Acquire audio powerwell for HD-Audio registers - -On Haswell/Broadwell, the HD-Audio block is inside the HDMI/display -power well and so the sna-hda audio codec acquires the display power -well while it is operational. However, Skylake separates the powerwells -again, but yet we still need the audio powerwell to setup the registers. -(But then the hardware uses those registers even while powered off???) - -v2: Grab both rpm wakelock and audio wakelock - -Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=96214 -Fixes: 03b135cebc47 "ALSA: hda - remove dependency on i915 power well for SKL") -Signed-off-by: Chris Wilson -Cc: Libin Yang -Cc: Takashi Iwai -Cc: Marius Vlad ---- - drivers/gpu/drm/i915/intel_audio.c | 6 ++++++ - 1 file changed, 6 insertions(+) - -diff --git a/drivers/gpu/drm/i915/intel_audio.c b/drivers/gpu/drm/i915/intel_audio.c -index 5d5f6bc10e85..948a7a52e3f8 100644 ---- a/drivers/gpu/drm/i915/intel_audio.c -+++ b/drivers/gpu/drm/i915/intel_audio.c -@@ -600,6 +600,8 @@ static void i915_audio_component_codec_wake_override(struct device *dev, - if (!IS_SKYLAKE(dev_priv) && !IS_KABYLAKE(dev_priv)) - return; - -+ i915_audio_component_get_power(dev); -+ - /* - * Enable/disable generating the codec wake signal, overriding the - * internal logic to generate the codec wake to controller. -@@ -615,6 +617,8 @@ static void i915_audio_component_codec_wake_override(struct device *dev, - I915_WRITE(HSW_AUD_CHICKENBIT, tmp); - usleep_range(1000, 1500); - } -+ -+ i915_audio_component_put_power(dev); - } - - /* Get CDCLK in kHz */ -@@ -648,6 +652,7 @@ static int i915_audio_component_sync_audio_rate(struct device *dev, - !IS_HASWELL(dev_priv)) - return 0; - -+ i915_audio_component_get_power(dev); - mutex_lock(&dev_priv->av_mutex); - /* 1. get the pipe */ - intel_encoder = dev_priv->dig_port_map[port]; -@@ -698,6 +703,7 @@ static int i915_audio_component_sync_audio_rate(struct device *dev, - - unlock: - mutex_unlock(&dev_priv->av_mutex); -+ i915_audio_component_put_power(dev); - return err; - } - --- -2.8.1 - diff --git a/kernel.spec b/kernel.spec index 0e114f5d6..8c7816bb8 100644 --- a/kernel.spec +++ b/kernel.spec @@ -42,7 +42,7 @@ Summary: The Linux kernel # For non-released -rc kernels, this will be appended after the rcX and # gitX tags, so a 3 here would become part of release "0.rcX.gitX.3" # -%global baserelease 201 +%global baserelease 200 %global fedora_build %{baserelease} # base_sublevel is the kernel version we're starting with and patching @@ -54,7 +54,7 @@ Summary: The Linux kernel %if 0%{?released_kernel} # Do we have a -stable update to apply? -%define stable_update 2 +%define stable_update 3 # Set rpm version accordingly %if 0%{?stable_update} %define stablerev %{stable_update} @@ -619,15 +619,9 @@ Patch815: 0015-drm-i915-gen9-Calculate-watermarks-during-atomic-che.patch Patch816: 0016-drm-i915-gen9-Reject-display-updates-that-exceed-wm-.patch Patch817: 0017-drm-i915-Remove-wm_config-from-dev_priv-intel_atomic.patch -# https://lists.fedoraproject.org/archives/list/kernel@lists.fedoraproject.org/message/A4YCP7OGMX6JLFT5V44H57GOMAQLC3M4/ -Patch838: drm-i915-Acquire-audio-powerwell-for-HD-Audio-regist.patch - #rhbz 1353558 Patch844: 0001-selinux-Only-apply-bounds-checking-to-source-types.patch -#CVE-2016-6480 rhbz 1362466 1362467 -Patch855: aacraid-Check-size-values-after-double-fetch-from-us.patch - #rhbz 1365940 Patch856: 0001-udp-fix-poll-issue-with-zero-sized-packets.patch @@ -640,12 +634,12 @@ Patch858: 0001-OOM-detection-regressions-since-4.7.patch #rhbz 1360688 Patch859: rc-core-fix-repeat-events.patch -#rhbz 1371237 -Patch860: 0001-SUNRPC-Fix-infinite-looping-in-rpc_clnt_iterate_for_.patch - # https://lkml.org/lkml/2016/8/30/566 Patch861: 0001-cgroup-reduce-read-locked-section-of-cgroup_threadgr.patch +#rhbz 1350174 +Patch862: tip-x86-boot-x86-KASLR-x86-power-Remove-x86-hibernation-restrictions.patch + # END OF PATCH DEFINITIONS %endif @@ -2173,6 +2167,10 @@ fi # # %changelog +* Wed Sep 07 2017 - 4.7.3-200 +- Linux v4.7.3 +- Silence KASLR warning (rhbz 1350174) + * Fri Sep 02 2016 - Add fix for known cgroup deadlock diff --git a/sources b/sources index cec90d779..c33fe9c55 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ 5276563eb1f39a048e4a8a887408c031 linux-4.7.tar.xz fe259c02c75eec61d1aa4b1211f3c853 perf-man-4.7.tar.gz -64e8a8969536c5d700c9e6a591d28dad patch-4.7.2.xz +803bdedd9b9cd4ef43d9d5d41801f234 patch-4.7.3.xz diff --git a/tip-x86-boot-x86-KASLR-x86-power-Remove-x86-hibernation-restrictions.patch b/tip-x86-boot-x86-KASLR-x86-power-Remove-x86-hibernation-restrictions.patch new file mode 100644 index 000000000..7d79fbcef --- /dev/null +++ b/tip-x86-boot-x86-KASLR-x86-power-Remove-x86-hibernation-restrictions.patch @@ -0,0 +1,131 @@ +From patchwork Sun Jun 26 11:01:18 2016 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +Subject: [tip:x86/boot] x86/KASLR, + x86/power: Remove x86 hibernation restrictions +From: tip-bot for Jacob Shin +X-Patchwork-Id: 9199367 +Message-Id: +To: linux-tip-commits@vger.kernel.org +Cc: pavel@ucw.cz, linux-pm@vger.kernel.org, yinghai@kernel.org, + mingo@kernel.org, linux-kernel@vger.kernel.org, tglx@linutronix.de, + corbet@lwn.net, dvlasenk@redhat.com, sds@tycho.nsa.gov, + peterz@infradead.org, logang@deltatee.com, bhe@redhat.com, + torvalds@linux-foundation.org, bp@alien8.de, luto@kernel.org, + keescook@chromium.org, hpa@zytor.com, brgerst@gmail.com, + len.brown@intel.com +Date: Sun, 26 Jun 2016 04:01:18 -0700 + +Commit-ID: 65fe935dd2387a4faf15314c73f5e6d31ef0217e +Gitweb: http://git.kernel.org/tip/65fe935dd2387a4faf15314c73f5e6d31ef0217e +Author: Kees Cook +AuthorDate: Mon, 13 Jun 2016 15:10:02 -0700 +Committer: Ingo Molnar +CommitDate: Sun, 26 Jun 2016 12:32:03 +0200 + +x86/KASLR, x86/power: Remove x86 hibernation restrictions + +With the following fix: + + 70595b479ce1 ("x86/power/64: Fix crash whan the hibernation code passes control to the image kernel") + +... there is no longer a problem with hibernation resuming a +KASLR-booted kernel image, so remove the restriction. + +Signed-off-by: Kees Cook +Cc: Andy Lutomirski +Cc: Baoquan He +Cc: Borislav Petkov +Cc: Brian Gerst +Cc: Denys Vlasenko +Cc: H. Peter Anvin +Cc: Jonathan Corbet +Cc: Len Brown +Cc: Linus Torvalds +Cc: Linux PM list +Cc: Logan Gunthorpe +Cc: Pavel Machek +Cc: Peter Zijlstra +Cc: Stephen Smalley +Cc: Thomas Gleixner +Cc: Yinghai Lu +Cc: linux-doc@vger.kernel.org +Link: http://lkml.kernel.org/r/20160613221002.GA29719@www.outflux.net +Signed-off-by: Ingo Molnar +--- + Documentation/kernel-parameters.txt | 10 ++++------ + arch/x86/boot/compressed/kaslr.c | 7 ------- + kernel/power/hibernate.c | 6 ------ + 3 files changed, 4 insertions(+), 19 deletions(-) + +-- +To unsubscribe from this list: send the line "unsubscribe linux-pm" in +the body of a message to majordomo@vger.kernel.org +More majordomo info at http://vger.kernel.org/majordomo-info.html + +diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt +index 82b42c9..fa8c6d4 100644 +--- a/Documentation/kernel-parameters.txt ++++ b/Documentation/kernel-parameters.txt +@@ -1803,12 +1803,10 @@ bytes respectively. Such letter suffixes can also be entirely omitted. + js= [HW,JOY] Analog joystick + See Documentation/input/joystick.txt. + +- kaslr/nokaslr [X86] +- Enable/disable kernel and module base offset ASLR +- (Address Space Layout Randomization) if built into +- the kernel. When CONFIG_HIBERNATION is selected, +- kASLR is disabled by default. When kASLR is enabled, +- hibernation will be disabled. ++ nokaslr [KNL] ++ When CONFIG_RANDOMIZE_BASE is set, this disables ++ kernel and module base offset ASLR (Address Space ++ Layout Randomization). + + keepinitrd [HW,ARM] + +diff --git a/arch/x86/boot/compressed/kaslr.c b/arch/x86/boot/compressed/kaslr.c +index cfeb025..dff4217 100644 +--- a/arch/x86/boot/compressed/kaslr.c ++++ b/arch/x86/boot/compressed/kaslr.c +@@ -471,17 +471,10 @@ unsigned char *choose_random_location(unsigned long input, + unsigned long choice = output; + unsigned long random_addr; + +-#ifdef CONFIG_HIBERNATION +- if (!cmdline_find_option_bool("kaslr")) { +- warn("KASLR disabled: 'kaslr' not on cmdline (hibernation selected)."); +- goto out; +- } +-#else + if (cmdline_find_option_bool("nokaslr")) { + warn("KASLR disabled: 'nokaslr' on cmdline."); + goto out; + } +-#endif + + boot_params->hdr.loadflags |= KASLR_FLAG; + +diff --git a/kernel/power/hibernate.c b/kernel/power/hibernate.c +index fca9254..9021387 100644 +--- a/kernel/power/hibernate.c ++++ b/kernel/power/hibernate.c +@@ -1154,11 +1154,6 @@ static int __init nohibernate_setup(char *str) + return 1; + } + +-static int __init kaslr_nohibernate_setup(char *str) +-{ +- return nohibernate_setup(str); +-} +- + static int __init page_poison_nohibernate_setup(char *str) + { + #ifdef CONFIG_PAGE_POISONING_ZERO +@@ -1182,5 +1177,4 @@ __setup("hibernate=", hibernate_setup); + __setup("resumewait", resumewait_setup); + __setup("resumedelay=", resumedelay_setup); + __setup("nohibernate", nohibernate_setup); +-__setup("kaslr", kaslr_nohibernate_setup); + __setup("page_poison=", page_poison_nohibernate_setup); From 9471d32264a4b9493e88c660695b05f174d41e6a Mon Sep 17 00:00:00 2001 From: Laura Abbott Date: Wed, 7 Sep 2016 09:53:08 -0700 Subject: [PATCH 141/275] back from time travel (WHAT YEAR IS IT) --- kernel.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kernel.spec b/kernel.spec index 8c7816bb8..eadec0e22 100644 --- a/kernel.spec +++ b/kernel.spec @@ -2167,7 +2167,7 @@ fi # # %changelog -* Wed Sep 07 2017 - 4.7.3-200 +* Wed Sep 07 2016 - 4.7.3-200 - Linux v4.7.3 - Silence KASLR warning (rhbz 1350174) From 1eab470c4d79406a89fb73344bbef90c47497824 Mon Sep 17 00:00:00 2001 From: Laura Abbott Date: Wed, 14 Sep 2016 09:42:37 -0700 Subject: [PATCH 142/275] Fix for incorrect return checking in cpupower (rhbz 1374212) - Let iio tools build on older kernels --- ...-return-type-of-cpu_power_is_cpu_onl.patch | 49 ++++++++++++++ ...io-Use-event-header-from-kernel-tree.patch | 64 +++++++++++++++++++ kernel.spec | 10 +++ 3 files changed, 123 insertions(+) create mode 100644 0001-cpupower-Correct-return-type-of-cpu_power_is_cpu_onl.patch create mode 100644 0001-iio-Use-event-header-from-kernel-tree.patch diff --git a/0001-cpupower-Correct-return-type-of-cpu_power_is_cpu_onl.patch b/0001-cpupower-Correct-return-type-of-cpu_power_is_cpu_onl.patch new file mode 100644 index 000000000..05b8cf999 --- /dev/null +++ b/0001-cpupower-Correct-return-type-of-cpu_power_is_cpu_onl.patch @@ -0,0 +1,49 @@ +From 9f692cbe4a01dd9e3c3e954ec6b59662b68f9ce4 Mon Sep 17 00:00:00 2001 +From: Laura Abbott +Date: Fri, 9 Sep 2016 10:19:02 -0700 +Subject: [PATCH] cpupower: Correct return type of cpu_power_is_cpu_online in + cpufreq +To: Thomas Renninger +Cc: linux-pm@vger.kernel.org +Cc: linux-kernel@vger.kernel.org + +When converting to a shared library in ac5a181d065d ("cpupower: Add +cpuidle parts into library"), cpu_freq_cpu_exists was converted to +cpupower_is_cpu_online. cpu_req_cpu_exists returned 0 on success and +-ENOSYS on failure whereas cpupower_is_cpu_online returns 1 on success. +Check for the correct return value in cpufreq-set. + +See https://bugzilla.redhat.com/show_bug.cgi?id=1374212 + +Fixes: ac5a181d065d ("cpupower: Add cpuidle parts into library") +Reported-by: Julian Seward +Signed-off-by: Laura Abbott +--- + tools/power/cpupower/utils/cpufreq-set.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/tools/power/cpupower/utils/cpufreq-set.c b/tools/power/cpupower/utils/cpufreq-set.c +index b4bf769..8971d71 100644 +--- a/tools/power/cpupower/utils/cpufreq-set.c ++++ b/tools/power/cpupower/utils/cpufreq-set.c +@@ -296,7 +296,7 @@ int cmd_freq_set(int argc, char **argv) + struct cpufreq_affected_cpus *cpus; + + if (!bitmask_isbitset(cpus_chosen, cpu) || +- cpupower_is_cpu_online(cpu)) ++ cpupower_is_cpu_online(cpu) != 1) + continue; + + cpus = cpufreq_get_related_cpus(cpu); +@@ -316,7 +316,7 @@ int cmd_freq_set(int argc, char **argv) + cpu <= bitmask_last(cpus_chosen); cpu++) { + + if (!bitmask_isbitset(cpus_chosen, cpu) || +- cpupower_is_cpu_online(cpu)) ++ cpupower_is_cpu_online(cpu) != 1) + continue; + + if (cpupower_is_cpu_online(cpu) != 1) +-- +2.10.0 + diff --git a/0001-iio-Use-event-header-from-kernel-tree.patch b/0001-iio-Use-event-header-from-kernel-tree.patch new file mode 100644 index 000000000..1724db3fd --- /dev/null +++ b/0001-iio-Use-event-header-from-kernel-tree.patch @@ -0,0 +1,64 @@ +From 0eadbb65c0026fb4eec89c54f6b48a0febd87f92 Mon Sep 17 00:00:00 2001 +From: Laura Abbott +Date: Fri, 9 Sep 2016 08:19:17 -0700 +Subject: [PATCH] iio: Use type header from kernel tree +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +To: Jonathan Cameron +To: Hartmut Knaack +To: Lars-Peter Clausen +To: Peter Meerwald-Stadler +Cc: linux-iio@vger.kernel.org +Cc: linux-kernel@vger.kernel.org + + +The iio tools have been updated as new event types have been added to +the kernel. The tools currently use the standard system headers which +means that the system may not have the newest defintitions. This leads +to build failures when building newer tools on older hosts: + +gcc -Wall -g -D_GNU_SOURCE -c -o iio_event_monitor.o +iio_event_monitor.c +iio_event_monitor.c:59:3: error: ‘IIO_UVINDEX’ undeclared here (not in a +function) + [IIO_UVINDEX] = "uvindex", + ^~~~~~~~~~~ +iio_event_monitor.c:59:3: error: array index in initializer not of +integer type +iio_event_monitor.c:59:3: note: (near initialization for +‘iio_chan_type_name_spec’) +iio_event_monitor.c:97:3: error: ‘IIO_MOD_LIGHT_UV’ undeclared here (not +in a function) + [IIO_MOD_LIGHT_UV] = "uv", + ^~~~~~~~~~~~~~~~ +iio_event_monitor.c:97:3: error: array index in initializer not of +integer type +iio_event_monitor.c:97:3: note: (near initialization for +‘iio_modifier_names’) +: recipe for target 'iio_event_monitor.o' failed + +Switch to using the header from the kernel tree to ensure the newest +defintions are always picked up. + +Signed-off-by: Laura Abbott +--- + tools/iio/iio_event_monitor.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/tools/iio/iio_event_monitor.c b/tools/iio/iio_event_monitor.c +index d9b7e0f..f02523d 100644 +--- a/tools/iio/iio_event_monitor.c ++++ b/tools/iio/iio_event_monitor.c +@@ -26,7 +26,7 @@ + #include + #include "iio_utils.h" + #include +-#include ++#include "../../include/uapi/linux/iio/types.h" + + static const char * const iio_chan_type_name_spec[] = { + [IIO_VOLTAGE] = "voltage", +-- +2.7.4 + diff --git a/kernel.spec b/kernel.spec index eadec0e22..94a008dd4 100644 --- a/kernel.spec +++ b/kernel.spec @@ -640,6 +640,12 @@ Patch861: 0001-cgroup-reduce-read-locked-section-of-cgroup_threadgr.patch #rhbz 1350174 Patch862: tip-x86-boot-x86-KASLR-x86-power-Remove-x86-hibernation-restrictions.patch +#rhbz 1374212 +Patch863: 0001-cpupower-Correct-return-type-of-cpu_power_is_cpu_onl.patch + +#ongoing complaint, full discussion delayed until ksummit/plumbers +Patch864: 0001-iio-Use-event-header-from-kernel-tree.patch + # END OF PATCH DEFINITIONS %endif @@ -2167,6 +2173,10 @@ fi # # %changelog +* Wed Sep 14 2016 Laura Abbott +- Fix for incorrect return checking in cpupower (rhbz 1374212) +- Let iio tools build on older kernels + * Wed Sep 07 2016 - 4.7.3-200 - Linux v4.7.3 - Silence KASLR warning (rhbz 1350174) From f9f2d4777c0125c02e2bafa7175767278a129446 Mon Sep 17 00:00:00 2001 From: Laura Abbott Date: Thu, 15 Sep 2016 09:50:04 -0700 Subject: [PATCH 143/275] Linux v4.7.4 --- ...ad-locked-section-of-cgroup_threadgr.patch | 112 ------------------ kernel.spec | 8 +- sources | 2 +- 3 files changed, 5 insertions(+), 117 deletions(-) delete mode 100644 0001-cgroup-reduce-read-locked-section-of-cgroup_threadgr.patch diff --git a/0001-cgroup-reduce-read-locked-section-of-cgroup_threadgr.patch b/0001-cgroup-reduce-read-locked-section-of-cgroup_threadgr.patch deleted file mode 100644 index daad25310..000000000 --- a/0001-cgroup-reduce-read-locked-section-of-cgroup_threadgr.patch +++ /dev/null @@ -1,112 +0,0 @@ -From 568ac888215c7fb2fabe8ea739b00ec3c1f5d440 Mon Sep 17 00:00:00 2001 -From: Balbir Singh -Date: Wed, 10 Aug 2016 15:43:06 -0400 -Subject: [PATCH] cgroup: reduce read locked section of - cgroup_threadgroup_rwsem during fork - -cgroup_threadgroup_rwsem is acquired in read mode during process exit -and fork. It is also grabbed in write mode during -__cgroups_proc_write(). I've recently run into a scenario with lots -of memory pressure and OOM and I am beginning to see - -systemd - - __switch_to+0x1f8/0x350 - __schedule+0x30c/0x990 - schedule+0x48/0xc0 - percpu_down_write+0x114/0x170 - __cgroup_procs_write.isra.12+0xb8/0x3c0 - cgroup_file_write+0x74/0x1a0 - kernfs_fop_write+0x188/0x200 - __vfs_write+0x6c/0xe0 - vfs_write+0xc0/0x230 - SyS_write+0x6c/0x110 - system_call+0x38/0xb4 - -This thread is waiting on the reader of cgroup_threadgroup_rwsem to -exit. The reader itself is under memory pressure and has gone into -reclaim after fork. There are times the reader also ends up waiting on -oom_lock as well. - - __switch_to+0x1f8/0x350 - __schedule+0x30c/0x990 - schedule+0x48/0xc0 - jbd2_log_wait_commit+0xd4/0x180 - ext4_evict_inode+0x88/0x5c0 - evict+0xf8/0x2a0 - dispose_list+0x50/0x80 - prune_icache_sb+0x6c/0x90 - super_cache_scan+0x190/0x210 - shrink_slab.part.15+0x22c/0x4c0 - shrink_zone+0x288/0x3c0 - do_try_to_free_pages+0x1dc/0x590 - try_to_free_pages+0xdc/0x260 - __alloc_pages_nodemask+0x72c/0xc90 - alloc_pages_current+0xb4/0x1a0 - page_table_alloc+0xc0/0x170 - __pte_alloc+0x58/0x1f0 - copy_page_range+0x4ec/0x950 - copy_process.isra.5+0x15a0/0x1870 - _do_fork+0xa8/0x4b0 - ppc_clone+0x8/0xc - -In the meanwhile, all processes exiting/forking are blocked almost -stalling the system. - -This patch moves the threadgroup_change_begin from before -cgroup_fork() to just before cgroup_canfork(). There is no nee to -worry about threadgroup changes till the task is actually added to the -threadgroup. This avoids having to call reclaim with -cgroup_threadgroup_rwsem held. - -tj: Subject and description edits. - -Signed-off-by: Balbir Singh -Acked-by: Zefan Li -Cc: Oleg Nesterov -Cc: Andrew Morton -Cc: stable@vger.kernel.org # v4.2+ -Signed-off-by: Tejun Heo ---- - kernel/fork.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/kernel/fork.c b/kernel/fork.c -index 52e725d..aaf7823 100644 ---- a/kernel/fork.c -+++ b/kernel/fork.c -@@ -1404,7 +1404,6 @@ static struct task_struct *copy_process(unsigned long clone_flags, - p->real_start_time = ktime_get_boot_ns(); - p->io_context = NULL; - p->audit_context = NULL; -- threadgroup_change_begin(current); - cgroup_fork(p); - #ifdef CONFIG_NUMA - p->mempolicy = mpol_dup(p->mempolicy); -@@ -1556,6 +1555,7 @@ static struct task_struct *copy_process(unsigned long clone_flags, - INIT_LIST_HEAD(&p->thread_group); - p->task_works = NULL; - -+ threadgroup_change_begin(current); - /* - * Ensure that the cgroup subsystem policies allow the new process to be - * forked. It should be noted the the new process's css_set can be changed -@@ -1656,6 +1656,7 @@ static struct task_struct *copy_process(unsigned long clone_flags, - bad_fork_cancel_cgroup: - cgroup_cancel_fork(p); - bad_fork_free_pid: -+ threadgroup_change_end(current); - if (pid != &init_struct_pid) - free_pid(pid); - bad_fork_cleanup_thread: -@@ -1688,7 +1689,6 @@ bad_fork_cleanup_policy: - mpol_put(p->mempolicy); - bad_fork_cleanup_threadgroup_lock: - #endif -- threadgroup_change_end(current); - delayacct_tsk_free(p); - bad_fork_cleanup_count: - atomic_dec(&p->cred->user->processes); --- -2.7.4 - diff --git a/kernel.spec b/kernel.spec index 94a008dd4..268e381db 100644 --- a/kernel.spec +++ b/kernel.spec @@ -54,7 +54,7 @@ Summary: The Linux kernel %if 0%{?released_kernel} # Do we have a -stable update to apply? -%define stable_update 3 +%define stable_update 4 # Set rpm version accordingly %if 0%{?stable_update} %define stablerev %{stable_update} @@ -634,9 +634,6 @@ Patch858: 0001-OOM-detection-regressions-since-4.7.patch #rhbz 1360688 Patch859: rc-core-fix-repeat-events.patch -# https://lkml.org/lkml/2016/8/30/566 -Patch861: 0001-cgroup-reduce-read-locked-section-of-cgroup_threadgr.patch - #rhbz 1350174 Patch862: tip-x86-boot-x86-KASLR-x86-power-Remove-x86-hibernation-restrictions.patch @@ -2173,6 +2170,9 @@ fi # # %changelog +* Thu Sep 15 2016 Laura Abbott - 4.7.4-200 +- Linux v4.7.4 + * Wed Sep 14 2016 Laura Abbott - Fix for incorrect return checking in cpupower (rhbz 1374212) - Let iio tools build on older kernels diff --git a/sources b/sources index c33fe9c55..9c36889c8 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ 5276563eb1f39a048e4a8a887408c031 linux-4.7.tar.xz fe259c02c75eec61d1aa4b1211f3c853 perf-man-4.7.tar.gz -803bdedd9b9cd4ef43d9d5d41801f234 patch-4.7.3.xz +150cff5d90bd90217848974269a770ee patch-4.7.4.xz From cfbcfd241e72408a294c88c57a489379fcc205ca Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Mon, 19 Sep 2016 09:36:29 -0500 Subject: [PATCH 144/275] CVE-2016-7425 SCSI arcmsr buffer overflow (rhbz 1377330 1377331) --- ...overflow-in-archmsr_iop_message_xfer.patch | 41 +++++++++++++++++++ kernel.spec | 6 +++ 2 files changed, 47 insertions(+) create mode 100644 arcmsr-buffer-overflow-in-archmsr_iop_message_xfer.patch diff --git a/arcmsr-buffer-overflow-in-archmsr_iop_message_xfer.patch b/arcmsr-buffer-overflow-in-archmsr_iop_message_xfer.patch new file mode 100644 index 000000000..81ed8814d --- /dev/null +++ b/arcmsr-buffer-overflow-in-archmsr_iop_message_xfer.patch @@ -0,0 +1,41 @@ +From: Dan Carpenter +Date: 2016-09-15 13:44:56 +Subject: [patch v2] arcmsr: buffer overflow in arcmsr_iop_message_xfer() + +We need to put an upper bound on "user_len" so the memcpy() doesn't +overflow. + +Reported-by: Marco Grassi +Signed-off-by: Dan Carpenter +Reviewed-by: Tomas Henzl + +diff --git a/drivers/scsi/arcmsr/arcmsr_hba.c b/drivers/scsi/arcmsr/arcmsr_hba.c +index 7640498..110eca9 100644 +--- a/drivers/scsi/arcmsr/arcmsr_hba.c ++++ b/drivers/scsi/arcmsr/arcmsr_hba.c +@@ -2388,7 +2388,8 @@ static int arcmsr_iop_message_xfer(struct AdapterControlBlock *acb, + } + case ARCMSR_MESSAGE_WRITE_WQBUFFER: { + unsigned char *ver_addr; +- int32_t user_len, cnt2end; ++ uint32_t user_len; ++ int32_t cnt2end; + uint8_t *pQbuffer, *ptmpuserbuffer; + ver_addr = kmalloc(ARCMSR_API_DATA_BUFLEN, GFP_ATOMIC); + if (!ver_addr) { +@@ -2397,6 +2398,11 @@ static int arcmsr_iop_message_xfer(struct AdapterControlBlock *acb, + } + ptmpuserbuffer = ver_addr; + user_len = pcmdmessagefld->cmdmessage.Length; ++ if (user_len > ARCMSR_API_DATA_BUFLEN) { ++ retvalue = ARCMSR_MESSAGE_FAIL; ++ kfree(ver_addr); ++ goto message_out; ++ } + memcpy(ptmpuserbuffer, + pcmdmessagefld->messagedatabuffer, user_len); + spin_lock_irqsave(&acb->wqbuffer_lock, flags); +-- +To unsubscribe from this list: send the line "unsubscribe linux-scsi" in +the body of a message to majordomo@vger.kernel.org +More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/kernel.spec b/kernel.spec index 268e381db..c061f6fce 100644 --- a/kernel.spec +++ b/kernel.spec @@ -643,6 +643,9 @@ Patch863: 0001-cpupower-Correct-return-type-of-cpu_power_is_cpu_onl.patch #ongoing complaint, full discussion delayed until ksummit/plumbers Patch864: 0001-iio-Use-event-header-from-kernel-tree.patch +#CVE-2016-7425 rhbz 1377330 1377331 +Patch865: arcmsr-buffer-overflow-in-archmsr_iop_message_xfer.patch + # END OF PATCH DEFINITIONS %endif @@ -2170,6 +2173,9 @@ fi # # %changelog +* Mon Sep 19 2016 Justin M. Forbes +- CVE-2016-7425 SCSI arcmsr buffer overflow (rhbz 1377330 1377331) + * Thu Sep 15 2016 Laura Abbott - 4.7.4-200 - Linux v4.7.4 From c61f01531d7caf57d4c581d62280bee9fe567270 Mon Sep 17 00:00:00 2001 From: Laura Abbott Date: Mon, 26 Sep 2016 08:11:36 -0700 Subject: [PATCH 145/275] Linux v4.7.5 --- ...-OOM-detection-regressions-since-4.7.patch | 121 ------------------ ...x-poll-issue-with-zero-sized-packets.patch | 73 ----------- kernel.spec | 11 +- sources | 2 +- 4 files changed, 5 insertions(+), 202 deletions(-) delete mode 100644 0001-OOM-detection-regressions-since-4.7.patch delete mode 100644 0001-udp-fix-poll-issue-with-zero-sized-packets.patch diff --git a/0001-OOM-detection-regressions-since-4.7.patch b/0001-OOM-detection-regressions-since-4.7.patch deleted file mode 100644 index 4616c7f87..000000000 --- a/0001-OOM-detection-regressions-since-4.7.patch +++ /dev/null @@ -1,121 +0,0 @@ -From a7f80308bac4013728e33e2bcb9b60eee78f60fb Mon Sep 17 00:00:00 2001 -From: Michal Hocko -Date: Mon, 22 Aug 2016 11:32:49 +0200 -Subject: [PATCH] OOM detection regressions since 4.7 - -Hi, -there have been multiple reports [1][2][3][4][5] about pre-mature OOM -killer invocations since 4.7 which contains oom detection rework. All of -them were for order-2 (kernel stack) alloaction requests failing because -of a high fragmentation and compaction failing to make any forward -progress. While investigating this we have found out that the compaction -just gives up too early. Vlastimil has been working on compaction -improvement for quite some time and his series [6] is already sitting -in mmotm tree. This already helps a lot because it drops some heuristics -which are more aimed at lower latencies for high orders rather than -reliability. Joonsoo has then identified further problem with too many -blocks being marked as unmovable [7] and Vlastimil has prepared a patch -on top of his series [8] which is also in the mmotm tree now. - -That being said, the regression is real and should be fixed for 4.7 -stable users. [6][8] was reported to help and ooms are no longer -reproducible. I know we are quite late (rc3) in 4.8 but I would vote -for mergeing those patches and have them in 4.8. For 4.7 I would go -with a partial revert of the detection rework for high order requests -(see patch below). This patch is really trivial. If those compaction -improvements are just too large for 4.8 then we can use the same patch -as for 4.7 stable for now and revert it in 4.9 after compaction changes -are merged. - -Thoughts? - -[1] http://lkml.kernel.org/r/20160731051121.GB307@x4 -[2] http://lkml.kernel.org/r/201608120901.41463.a.miskiewicz@gmail.com -[3] http://lkml.kernel.org/r/20160801192620.GD31957@dhcp22.suse.cz -[4] https://lists.opensuse.org/opensuse-kernel/2016-08/msg00021.html -[5] https://bugzilla.opensuse.org/show_bug.cgi?id=994066 -[6] http://lkml.kernel.org/r/20160810091226.6709-1-vbabka@suse.cz -[7] http://lkml.kernel.org/r/20160816031222.GC16913@js1304-P5Q-DELUXE -[8] http://lkml.kernel.org/r/f7a9ea9d-bb88-bfd6-e340-3a933559305a@suse.cz ---- - mm/page_alloc.c | 50 ++------------------------------------------------ - 1 file changed, 2 insertions(+), 48 deletions(-) - -diff --git a/mm/page_alloc.c b/mm/page_alloc.c -index 8b3e134..6e35419 100644 ---- a/mm/page_alloc.c -+++ b/mm/page_alloc.c -@@ -3254,53 +3254,6 @@ __alloc_pages_direct_compact(gfp_t gfp_mask, unsigned int order, - return NULL; - } - --static inline bool --should_compact_retry(struct alloc_context *ac, int order, int alloc_flags, -- enum compact_result compact_result, enum migrate_mode *migrate_mode, -- int compaction_retries) --{ -- int max_retries = MAX_COMPACT_RETRIES; -- -- if (!order) -- return false; -- -- /* -- * compaction considers all the zone as desperately out of memory -- * so it doesn't really make much sense to retry except when the -- * failure could be caused by weak migration mode. -- */ -- if (compaction_failed(compact_result)) { -- if (*migrate_mode == MIGRATE_ASYNC) { -- *migrate_mode = MIGRATE_SYNC_LIGHT; -- return true; -- } -- return false; -- } -- -- /* -- * make sure the compaction wasn't deferred or didn't bail out early -- * due to locks contention before we declare that we should give up. -- * But do not retry if the given zonelist is not suitable for -- * compaction. -- */ -- if (compaction_withdrawn(compact_result)) -- return compaction_zonelist_suitable(ac, order, alloc_flags); -- -- /* -- * !costly requests are much more important than __GFP_REPEAT -- * costly ones because they are de facto nofail and invoke OOM -- * killer to move on while costly can fail and users are ready -- * to cope with that. 1/4 retries is rather arbitrary but we -- * would need much more detailed feedback from compaction to -- * make a better decision. -- */ -- if (order > PAGE_ALLOC_COSTLY_ORDER) -- max_retries /= 4; -- if (compaction_retries <= max_retries) -- return true; -- -- return false; --} - #else - static inline struct page * - __alloc_pages_direct_compact(gfp_t gfp_mask, unsigned int order, -@@ -3311,6 +3264,8 @@ __alloc_pages_direct_compact(gfp_t gfp_mask, unsigned int order, - return NULL; - } - -+#endif /* CONFIG_COMPACTION */ -+ - static inline bool - should_compact_retry(struct alloc_context *ac, unsigned int order, int alloc_flags, - enum compact_result compact_result, -@@ -3337,7 +3292,6 @@ should_compact_retry(struct alloc_context *ac, unsigned int order, int alloc_fla - } - return false; - } --#endif /* CONFIG_COMPACTION */ - - /* Perform direct synchronous page reclaim */ - static int --- -2.7.4 - diff --git a/0001-udp-fix-poll-issue-with-zero-sized-packets.patch b/0001-udp-fix-poll-issue-with-zero-sized-packets.patch deleted file mode 100644 index f5edf2340..000000000 --- a/0001-udp-fix-poll-issue-with-zero-sized-packets.patch +++ /dev/null @@ -1,73 +0,0 @@ -From 9f30f83eb6347afa6b1d1df1065608c2b4485e2b Mon Sep 17 00:00:00 2001 -From: Eric Dumazet -Date: Tue, 23 Aug 2016 13:59:33 -0700 -Subject: [PATCH] udp: fix poll() issue with zero sized packets - -Laura tracked poll() [and friends] regression caused by commit -e6afc8ace6dd ("udp: remove headers from UDP packets before queueing") - -udp_poll() needs to know if there is a valid packet in receive queue, -even if its payload length is 0. - -Change first_packet_length() to return an signed int, and use -1 -as the indication of an empty queue. - -Fixes: e6afc8ace6dd ("udp: remove headers from UDP packets before queueing") -Reported-by: Laura Abbott -Signed-off-by: Eric Dumazet -Tested-by: Laura Abbott ---- - net/ipv4/udp.c | 12 ++++++------ - 1 file changed, 6 insertions(+), 6 deletions(-) - -diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c -index e61f7cd..00d18c5 100644 ---- a/net/ipv4/udp.c -+++ b/net/ipv4/udp.c -@@ -1182,13 +1182,13 @@ out: - * @sk: socket - * - * Drops all bad checksum frames, until a valid one is found. -- * Returns the length of found skb, or 0 if none is found. -+ * Returns the length of found skb, or -1 if none is found. - */ --static unsigned int first_packet_length(struct sock *sk) -+static int first_packet_length(struct sock *sk) - { - struct sk_buff_head list_kill, *rcvq = &sk->sk_receive_queue; - struct sk_buff *skb; -- unsigned int res; -+ int res; - - __skb_queue_head_init(&list_kill); - -@@ -1203,7 +1203,7 @@ static unsigned int first_packet_length(struct sock *sk) - __skb_unlink(skb, rcvq); - __skb_queue_tail(&list_kill, skb); - } -- res = skb ? skb->len : 0; -+ res = skb ? skb->len : -1; - spin_unlock_bh(&rcvq->lock); - - if (!skb_queue_empty(&list_kill)) { -@@ -1232,7 +1232,7 @@ int udp_ioctl(struct sock *sk, int cmd, unsigned long arg) - - case SIOCINQ: - { -- unsigned int amount = first_packet_length(sk); -+ int amount = max_t(int, 0, first_packet_length(sk)); - - return put_user(amount, (int __user *)arg); - } -@@ -2184,7 +2184,7 @@ unsigned int udp_poll(struct file *file, struct socket *sock, poll_table *wait) - - /* Check for false positives due to checksum errors */ - if ((mask & POLLRDNORM) && !(file->f_flags & O_NONBLOCK) && -- !(sk->sk_shutdown & RCV_SHUTDOWN) && !first_packet_length(sk)) -+ !(sk->sk_shutdown & RCV_SHUTDOWN) && first_packet_length(sk) == -1) - mask &= ~(POLLIN | POLLRDNORM); - - return mask; --- -2.7.4 - diff --git a/kernel.spec b/kernel.spec index c061f6fce..3b6ab8c8b 100644 --- a/kernel.spec +++ b/kernel.spec @@ -54,7 +54,7 @@ Summary: The Linux kernel %if 0%{?released_kernel} # Do we have a -stable update to apply? -%define stable_update 4 +%define stable_update 5 # Set rpm version accordingly %if 0%{?stable_update} %define stablerev %{stable_update} @@ -622,15 +622,9 @@ Patch817: 0017-drm-i915-Remove-wm_config-from-dev_priv-intel_atomic.patch #rhbz 1353558 Patch844: 0001-selinux-Only-apply-bounds-checking-to-source-types.patch -#rhbz 1365940 -Patch856: 0001-udp-fix-poll-issue-with-zero-sized-packets.patch - #rhbz 13700161 Patch857: kernel-panic-TPROXY-vanilla-4.7.1.patch -# lkml.kernel.org/r/<20160822093249.GA14916@dhcp22.suse.cz> -Patch858: 0001-OOM-detection-regressions-since-4.7.patch - #rhbz 1360688 Patch859: rc-core-fix-repeat-events.patch @@ -2173,6 +2167,9 @@ fi # # %changelog +* Mon Sep 26 2016 Laura Abbott - 4.7.5-200 +- Linux v4.7.5 + * Mon Sep 19 2016 Justin M. Forbes - CVE-2016-7425 SCSI arcmsr buffer overflow (rhbz 1377330 1377331) diff --git a/sources b/sources index 9c36889c8..ef9fc81bd 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ 5276563eb1f39a048e4a8a887408c031 linux-4.7.tar.xz fe259c02c75eec61d1aa4b1211f3c853 perf-man-4.7.tar.gz -150cff5d90bd90217848974269a770ee patch-4.7.4.xz +c5f3473be15411f7b02f36b7f52cc9d1 patch-4.7.5.xz From 32b983f44f22b97bad1aea2a6491192621e74a32 Mon Sep 17 00:00:00 2001 From: Laura Abbott Date: Mon, 3 Oct 2016 09:58:06 -0700 Subject: [PATCH 146/275] Linux v4.7.6 --- kernel.spec | 5 ++++- sources | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/kernel.spec b/kernel.spec index 3b6ab8c8b..7a3eca9b6 100644 --- a/kernel.spec +++ b/kernel.spec @@ -54,7 +54,7 @@ Summary: The Linux kernel %if 0%{?released_kernel} # Do we have a -stable update to apply? -%define stable_update 5 +%define stable_update 6 # Set rpm version accordingly %if 0%{?stable_update} %define stablerev %{stable_update} @@ -2167,6 +2167,9 @@ fi # # %changelog +* Mon Oct 03 2016 Laura Abbott - 4.7.6-200 +- Linux v4.7.6 + * Mon Sep 26 2016 Laura Abbott - 4.7.5-200 - Linux v4.7.5 diff --git a/sources b/sources index ef9fc81bd..88883e293 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ 5276563eb1f39a048e4a8a887408c031 linux-4.7.tar.xz fe259c02c75eec61d1aa4b1211f3c853 perf-man-4.7.tar.gz -c5f3473be15411f7b02f36b7f52cc9d1 patch-4.7.5.xz +e0d02f6c4d6b600b91c3492c5cc825a3 patch-4.7.6.xz From 10b2dc81a7ffd3e693aaa627bd28dfe3afada7b1 Mon Sep 17 00:00:00 2001 From: Laura Abbott Date: Fri, 7 Oct 2016 11:50:43 -0700 Subject: [PATCH 147/275] Linux v4.7.7 --- kernel.spec | 5 ++++- sources | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/kernel.spec b/kernel.spec index 7a3eca9b6..9b8a7377e 100644 --- a/kernel.spec +++ b/kernel.spec @@ -54,7 +54,7 @@ Summary: The Linux kernel %if 0%{?released_kernel} # Do we have a -stable update to apply? -%define stable_update 6 +%define stable_update 7 # Set rpm version accordingly %if 0%{?stable_update} %define stablerev %{stable_update} @@ -2167,6 +2167,9 @@ fi # # %changelog +* Fri Oct 07 2016 Laura Abbott - 4.7.7 +- Linux v4.7.7 + * Mon Oct 03 2016 Laura Abbott - 4.7.6-200 - Linux v4.7.6 diff --git a/sources b/sources index 88883e293..99cb3ce48 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ 5276563eb1f39a048e4a8a887408c031 linux-4.7.tar.xz fe259c02c75eec61d1aa4b1211f3c853 perf-man-4.7.tar.gz -e0d02f6c4d6b600b91c3492c5cc825a3 patch-4.7.6.xz +2c3eab4fc065ca288934e44ceddb409f patch-4.7.7.xz From f75753c4678eafa47737a6ce384a258d2cd17196 Mon Sep 17 00:00:00 2001 From: Laura Abbott Date: Fri, 7 Oct 2016 14:46:58 -0700 Subject: [PATCH 148/275] Missing release tag in changelog (scripting is a WIP) --- kernel.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kernel.spec b/kernel.spec index 9b8a7377e..a175dc499 100644 --- a/kernel.spec +++ b/kernel.spec @@ -2167,7 +2167,7 @@ fi # # %changelog -* Fri Oct 07 2016 Laura Abbott - 4.7.7 +* Fri Oct 07 2016 Laura Abbott - 4.7.7-200 - Linux v4.7.7 * Mon Oct 03 2016 Laura Abbott - 4.7.6-200 From 7d0fca764fbab1fe3896d2c741370b0a9a91fc45 Mon Sep 17 00:00:00 2001 From: Laura Abbott Date: Mon, 17 Oct 2016 11:05:43 -0700 Subject: [PATCH 149/275] Linux v4.7.8 --- kernel.spec | 5 ++++- sources | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/kernel.spec b/kernel.spec index a175dc499..030baa1de 100644 --- a/kernel.spec +++ b/kernel.spec @@ -54,7 +54,7 @@ Summary: The Linux kernel %if 0%{?released_kernel} # Do we have a -stable update to apply? -%define stable_update 7 +%define stable_update 8 # Set rpm version accordingly %if 0%{?stable_update} %define stablerev %{stable_update} @@ -2167,6 +2167,9 @@ fi # # %changelog +* Mon Oct 17 2016 Laura Abbott - 4.7.8-200 +- Linux v4.7.8 + * Fri Oct 07 2016 Laura Abbott - 4.7.7-200 - Linux v4.7.7 diff --git a/sources b/sources index 99cb3ce48..a9d57d182 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ 5276563eb1f39a048e4a8a887408c031 linux-4.7.tar.xz fe259c02c75eec61d1aa4b1211f3c853 perf-man-4.7.tar.gz -2c3eab4fc065ca288934e44ceddb409f patch-4.7.7.xz +106560e20e26ef3225dac71539fe3531 patch-4.7.8.xz From b6e2c59ab9954ea23b319a7687ac3c575e799c4b Mon Sep 17 00:00:00 2001 From: Peter Robinson Date: Tue, 18 Oct 2016 15:29:35 +0100 Subject: [PATCH 150/275] Build in AXP20X_I2C (should fix rhbz 1352140) --- config-armv7-generic | 2 +- kernel.spec | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/config-armv7-generic b/config-armv7-generic index e619963bb..ef8337abc 100644 --- a/config-armv7-generic +++ b/config-armv7-generic @@ -209,7 +209,7 @@ CONFIG_I2C_SUN6I_P2WI=m CONFIG_GPIO_PCF857X=m CONFIG_TOUCHSCREEN_SUN4I=m CONFIG_MFD_AXP20X=y -CONFIG_MFD_AXP20X_I2C=m +CONFIG_MFD_AXP20X_I2C=y CONFIG_MFD_AXP20X_RSB=m CONFIG_AXP20X_POWER=m CONFIG_INPUT_AXP20X_PEK=m diff --git a/kernel.spec b/kernel.spec index 030baa1de..22bdf4645 100644 --- a/kernel.spec +++ b/kernel.spec @@ -2167,6 +2167,9 @@ fi # # %changelog +* Tue Oct 18 2016 Peter Robinson +- Build in AXP20X_I2C (should fix rhbz 1352140) + * Mon Oct 17 2016 Laura Abbott - 4.7.8-200 - Linux v4.7.8 From 2ade70cc51ecbb35697bede755a4ae1486a59681 Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Thu, 20 Oct 2016 08:51:12 -0500 Subject: [PATCH 151/275] Linux v4.7.9 fixes CVE-2016-5195 --- kernel.spec | 6 +- scripts/add-changelog.sh | 12 ++++ scripts/check-patchlist.sh | 113 +++++++++++++++++++++++++++++++ scripts/fast-build.sh | 13 ++++ scripts/fixup-bumpspec.sh | 10 +++ scripts/generate-git-snapshot.sh | 18 ++++- scripts/generate-perf-man.sh | 54 +++++++++++++++ scripts/grab-logs.sh | 31 +++++++-- scripts/kernel-version.sh | 8 +++ scripts/newpatch.sh | 55 ++++++++++----- scripts/rawhide-rc.sh | 36 ++++++++++ scripts/rawhide-snapshot.sh | 59 ++++++++++++++++ scripts/stable-update.sh | 67 ++++++++++++++++++ sources | 2 +- 14 files changed, 456 insertions(+), 28 deletions(-) create mode 100755 scripts/add-changelog.sh create mode 100755 scripts/check-patchlist.sh create mode 100755 scripts/fast-build.sh create mode 100755 scripts/fixup-bumpspec.sh create mode 100755 scripts/generate-perf-man.sh create mode 100644 scripts/kernel-version.sh create mode 100755 scripts/rawhide-rc.sh create mode 100755 scripts/rawhide-snapshot.sh create mode 100755 scripts/stable-update.sh diff --git a/kernel.spec b/kernel.spec index 22bdf4645..c40dfd248 100644 --- a/kernel.spec +++ b/kernel.spec @@ -54,7 +54,7 @@ Summary: The Linux kernel %if 0%{?released_kernel} # Do we have a -stable update to apply? -%define stable_update 8 +%define stable_update 9 # Set rpm version accordingly %if 0%{?stable_update} %define stablerev %{stable_update} @@ -2167,6 +2167,10 @@ fi # # %changelog +* Thu Oct 20 2016 Justin M. Forbes - 4.7.9-200 +- Linux v4.7.9 +- CVE-2016-5195 (rhbz 1384344 1387080) + * Tue Oct 18 2016 Peter Robinson - Build in AXP20X_I2C (should fix rhbz 1352140) diff --git a/scripts/add-changelog.sh b/scripts/add-changelog.sh new file mode 100755 index 000000000..fa0157afb --- /dev/null +++ b/scripts/add-changelog.sh @@ -0,0 +1,12 @@ +#!/bin/sh +# Emulate the changelog part of rpmdev-bumpspec without the bumping of the +# rev. Because Laura keeps typoing her name and the date. + +CURDATE=`date +"%a %b %d %Y"` +PACKAGER=`rpmdev-packager` +CHANGELOG="%changelog\n* $CURDATE $PACKAGER\n- $1\n" + +awk -v CHANGE="$CHANGELOG" '/%changelog/ {print CHANGE} \ + !/%changelog/ { print $0 }' \ + < kernel.spec > kernel.spec.tmp +mv kernel.spec.tmp kernel.spec diff --git a/scripts/check-patchlist.sh b/scripts/check-patchlist.sh new file mode 100755 index 000000000..134e41e97 --- /dev/null +++ b/scripts/check-patchlist.sh @@ -0,0 +1,113 @@ +#! /bin/sh +# This script was created in a effort to make patch management a bit easier. +# It list all the patches in the current tree and identifies if they are +# present in the kernel.spec, PatchList.txt, both files or neither. +# +# eg. ./check-patchlist.sh [optional flag] + +function usage(){ + echo "List all the patches currently in the tree. It also helps identify" + echo "if the patch is present in kernel.spec or PatchList.txt. " + echo "-h, --help " + echo "-t, --tracked patches in both kernel.spec and PatchList.txt " + echo "-p, --patchlist patches added to PatchList.txt. " + echo "-s, --specfile patches added to kernel.spec. " + echo "-n, --not-tracked patches in the tree but not in PatchList.txt " + echo " or kernel.spec " +} + +BASEDIR=$(dirname "$( cd $(dirname $BASH_SOURCE[0]) && pwd)") +pushd $BASEDIR > /dev/null + +function list_all(){ + echo "===========Legend===========================" + echo ". In kernel.spec " + echo "* In PatchList.txt " + echo "+ In PatchList.txt & Kernel.spec " + echo "- Neither in PatchList.txt nor kernel.spec" + echo "============================================" + for patch in $(ls *.patch); do + if [ ! -z "$(grep $patch PatchList.txt)" ] && [ ! -z "$(grep $patch kernel.spec)" ] + then + echo "+ ${patch}" # Patches in kernel.spec and PatchList.txt + + elif [ ! -z "$(grep $patch PatchList.txt)" ] && [ -z "$(grep $patch kernel.spec)" ] + then + echo "* ${patch}" # Patches in PatchList.txt but not in kernel.spec + + elif [ -z "$(grep $patch PatchList.txt)" ] && [ ! -z "$(grep $patch kernel.spec)" ] + then + echo ". ${patch}" # Patches in kernel.spec but not in PatchList.txt + + else + echo "- ${patch}" # Neither in PatchList.txt nor kernel.spec + + fi + done +} + +function list_present_not_added(){ + for patch in $(ls *.patch); do + if [ -z "$(grep $patch PatchList.txt)" ] && [ -z "$(grep $patch kernel.spec)" ] + then + echo $patch + fi + done +} + +function list_present_added(){ + for patch in $(ls *.patch); do + if [ ! -z "$(grep $patch PatchList.txt)" ] && [ ! -z "$(grep $patch kernel.spec)" ] + then + echo $patch + fi + done +} + +function list_patchList(){ + for patch in $(ls *.patch); do + if [ ! -z "$(grep $patch PatchList.txt)" ] && [ -z "$(grep $patch kernel.spec)" ] + then + echo $patch + fi + done + +} +function list_specfile(){ + for patch in $(ls *.patch); do + if [ -z "$(grep $patch PatchList.txt)" ] && [ ! -z "$(grep $patch kernel.spec)" ] + then + echo $patch + fi + done +} + +if [ -z "$@" ]; then + list_all +else + + for opt in "$@"; do + case $opt in + -t|--tracked) + list_present_added + ;; + -s|--specfile) + list_specfile + ;; + -h|--help) + usage + ;; + -n|--not-added) + list_present_not_added + ;; + -p|--patchlist) + list_patchList + ;; + *) + usage + ;; + esac + done +fi + +popd > /dev/null diff --git a/scripts/fast-build.sh b/scripts/fast-build.sh new file mode 100755 index 000000000..8286a110f --- /dev/null +++ b/scripts/fast-build.sh @@ -0,0 +1,13 @@ +#! /bin/sh +# Description: +# rpmbuild combo to build the given architecture without +# debugging information, perf or tools. +# +# Sample usage: +# ./fast-build.sh x86_64 kernel-4.7.0-0.rc1.git1.2.fc25.src.rpm + +if [ -z "$1" ] || [ -z "$2" ]; then + echo "usage: $0 [ arch ] [ kernel-x.x.x.fcxx.src.rpm ] " +fi + +rpmbuild --target $1 --without debug --without debuginfo --without perf --without tools --rebuild $2 diff --git a/scripts/fixup-bumpspec.sh b/scripts/fixup-bumpspec.sh new file mode 100755 index 000000000..1a38de222 --- /dev/null +++ b/scripts/fixup-bumpspec.sh @@ -0,0 +1,10 @@ +#!/bin/sh +# rpmdev-bumpspec 'helpfully' bumps the release which we don't always want. +# This script fixes it up. + +RELEASE=`grep "%global baserelease" kernel.spec | cut -d ' ' -f 3` +export RELEASE=$(($RELEASE-1)) +perl -p -i -e 's|%global baserelease.*|%global baserelease $ENV{'RELEASE'}|' kernel.spec +TODAY=`date +"%a %b %d %Y"` +awk -v DATE="$TODAY" 'START { marked = 0; } $0 ~ DATE { if (marked == 1) { print $0 } else {out=$1; for(i = 2; i <= NF - 2; i++) { out=out" "$i } print out; marked = 1; } } $0 !~ DATE { print $0; }' < kernel.spec > kernel.spec.tmp +mv kernel.spec.tmp kernel.spec diff --git a/scripts/generate-git-snapshot.sh b/scripts/generate-git-snapshot.sh index 3da20a1b1..972fd2148 100755 --- a/scripts/generate-git-snapshot.sh +++ b/scripts/generate-git-snapshot.sh @@ -1,14 +1,26 @@ #!/bin/sh +# This script allows for the generation of a git snapshot between the upstream +# git tree and the current tree. # -# Set LINUX_GIT to point to an upstream Linux git tree in your .bashrc or wherever. +# Prerequisites: +# Set LINUX_GIT to point to an upstream Linux git tree in your .bashrc +# or wherever. -[ ! -d "$LINUX_GIT" ] && echo "error: set \$LINUX_GIT to point at upstream git tree" && exit 1 +# Look to see if LINUX_GIT is set in local .bashrc +if [ -f ~/.bashrc ]; then + source ~/.bashrc +fi + +if [ ! -d "$LINUX_GIT" ]; then + echo "error: set \$LINUX_GIT to point at upstream git tree" + exit 1 +fi VER=$(grep patch sources | head -n1 | awk '{ print $2 }' | sed s/patch-// | sed s/-git.*// | sed s/.xz//) if [ -z "$VER" ] ; then - VER=$(grep linux sources | head -1 | awk '{ print $2 }' | sed s/linux-// | sed s/.tar.xz//) + VER=$(grep linux sources | head -1 | awk '{ print $2 }' | sed s/linux-// | sed s/.tar.xz//) fi OLDGIT=$(grep gitrev kernel.spec | head -n1 | sed s/%define\ gitrev\ //) diff --git a/scripts/generate-perf-man.sh b/scripts/generate-perf-man.sh new file mode 100755 index 000000000..27691fafd --- /dev/null +++ b/scripts/generate-perf-man.sh @@ -0,0 +1,54 @@ +#!/bin/sh +# Small script to generate the perf-man tarball. The script relies on having +# LINUX_GIT set in your local .bashrc. By default the script will use the +# the kernel version of the upstream tree set in LINUX_GIT. Use --version=x.y +# to set a specific version. + +# [Default] eg. ./scritps/generate-perf-man +# eg. ./scripts/generate-perf-man --version=4.8 +function usage(){ + echo + echo "Helps generate the perf-man tarball " + echo "-h, --help " + echo + echo "./generate-perf-man.sh #Generates using upstream kernel version" + echo + echo "./generate-perf-man.sh --version=x.y #Generate using x.y version" +} + +if [ -f ~/.bashrc ]; then + source ~/.bashrc +fi + +if [ ! -d "$LINUX_GIT" ]; then + echo "Error: \$LINUX_GIT is not set to the upstream git tree." + exit 1 +fi + +BASEDIR=$(dirname "$(cd $(dirname $BASH_SOURCE[0]) && pwd)") +pushd "$LINUX_GIT" > /dev/null +KERNEL_VERSION=$( awk '/^VERSION =/ {print $3}' Makefile ) +KERNEL_PATCHLEVEL=$( awk '/^PATCHLEVEL =/ {print $3}' Makefile ) + +if [ ! -z "$@" ]; then + for opt in "$@"; do + case $opt in + --version=*.*) + version="${opt#*=}" + KERNEL_VERSION=$( awk -F. '{print $1}' <<< $version ) + KERNEL_PATCHLEVEL=$( awk -F. '{print $2}' <<< $version ) + ;; + -h | --help) + usage + exit 0 + ;; + *) + ;; + esac + done +fi +cd tools/perf/Documentation/ +make +tar -czvf $BASEDIR/perf-man-${KERNEL_VERSION}.${KERNEL_PATCHLEVEL}.tar.gz *.1 +make clean +popd diff --git a/scripts/grab-logs.sh b/scripts/grab-logs.sh index 5df573571..571b503bb 100755 --- a/scripts/grab-logs.sh +++ b/scripts/grab-logs.sh @@ -1,16 +1,35 @@ #!/bin/sh +# Script helps download the build logs for the current tree. +# The downloaded logs will be saved in a logs/ within the +# tree. + +BASEDIR="$(dirname "$(cd $(dirname $BASH_SOURCE[0]) && pwd)")" +pushd $BASEDIR > /dev/null VER=$(fedpkg verrel) ver=$(echo $VER | sed -e 's/-/ /g' | awk '{print $2}') rev=$(echo $VER | sed -e 's/-/ /g' | awk '{print $3}') -if [ -d logs ]; then - DIR=logs/ +# keep logs in one place. If logs directory does not exist, make it. +if [ -d "$BASEDIR/logs" ]; then + DIR="$BASEDIR/logs" else - DIR=./ + mkdir "$BASEDIR/logs" + DIR="$BASEDIR/logs" fi -wget -O $DIR/build-$VER-i686.log http://kojipkgs.fedoraproject.org/packages/kernel/$ver/$rev/data/logs/i686/build.log -wget -O $DIR/build-$VER-x86-64.log http://kojipkgs.fedoraproject.org/packages/kernel/$ver/$rev/data/logs/x86_64/build.log -wget -O $DIR/build-$VER-noarch.log http://kojipkgs.fedoraproject.org/packages/kernel/$ver/$rev/data/logs/noarch/build.log +# Common architectures that have build logs. +ARCHS[0]=i686 +ARCHS[1]=x86_64 +ARCHS[2]=noarch +ARCHS[3]=armv7hl +for arch in ${ARCHS[@]}; do + URL=http://kojipkgs.fedoraproject.org/packages/kernel/$ver/$rev/data/logs/$arch/build.log + # Only download logs if exist + wget --spider -q $URL + if [ $? -eq 0 ]; then + wget -O $DIR/build-$VER-$arch.log $URL + fi +done +popd > /dev/null diff --git a/scripts/kernel-version.sh b/scripts/kernel-version.sh new file mode 100644 index 000000000..36e00194b --- /dev/null +++ b/scripts/kernel-version.sh @@ -0,0 +1,8 @@ +VER=$(grep patch sources | head -n1 | awk '{ print $2 }' | sed s/patch-// | sed s/-git.*// | sed s/.xz//) + +if [ -z "$VER" ] ; +then + VER=$(grep linux sources | head -1 | awk '{ print $2 }' | sed s/linux-// | sed s/.tar.xz//) +fi + + diff --git a/scripts/newpatch.sh b/scripts/newpatch.sh index 0dc2e837c..2d7498655 100755 --- a/scripts/newpatch.sh +++ b/scripts/newpatch.sh @@ -1,21 +1,42 @@ #!/bin/sh -# Easy application of new patches. -# Always adds to the very end. (Bumps last patch nr by 100) -# Parameters: -# $1 - patch filename -# $2 - description -OLD=$(grep ^Patch kernel.spec | tail -n1 | awk '{ print $1 }' | sed s/Patch// | sed s/://) -NEW=$(($OLD/100*100+100)) +# Facilitates the addition of a new patch to the source tree. +# -- Moves patch to tree +# -- Adds patch to kernel.spec list of patches +# -- Adds patch to git +# -- change buildid macro to the name of the patch being added -sed -i "/^Patch$OLD:\ /a#\ $2\nPatch$NEW:\ $1" kernel.spec - -LAST=$(grep ^ApplyPatch kernel.spec | tail -n1 | awk '{ print $2 }') - -sed -i "/^ApplyPatch $LAST/aApplyPatch $1" kernel.spec - -cvs add $1 - -scripts/bumpspecfile.py kernel.spec "- $2" -make clog +# Base directory is relative to where the script is. +BASEDIR="$(dirname "$(cd $(dirname $BASH_SOURCE[0]) && pwd)")" +pushd $BASEDIR > /dev/null +# Check for at least patch +if [ "$#" -lt 1 ]; then + echo "usage: $0 [ /path/to/patch/ ] [ description ]" + exit 1 +fi +PATCHDIR=$1 +DESC=$2 +PATCH="$(basename "$PATCHDIR")" +# Kernel.spec file in the current tree +SPECFILE="$BASEDIR/kernel.spec" +# If adding patch from outside the source tree move it to the source tree +if [ -z "$(ls | grep $PATCH)" ]; then + cp $PATCHDIR $BASEDIR/ +fi +if [ ! -z "$(grep $PATCH $SPECFILE)" ] +then + echo "$PATCH already in kernel.spec" + exit 1 +fi +# ID number of the last patch in kernel.spec +LPATCH_ID=$(grep ^Patch $SPECFILE | tail -n1 | awk '{ print $1 }' | sed s/Patch// | sed s/://) +# ID of the next patch to be added to kernel.spec +NPATCH_ID=$(($LPATCH_ID + 1 )) +# Add patch with new id at the end of the list of patches +sed -i "/^Patch$LPATCH_ID:\ /a#\ $DESC\nPatch$NPATCH_ID:\ $PATCH" $SPECFILE +# Add it to git +git add $PATCH +BUILDID_PATCH="$(echo $PATCH | sed 's/\-/\_/g' )" +sed -i "s/^.*define buildid .*$/%define buildid .$BUILDID_PATCH/" $SPECFILE +popd > /dev/null diff --git a/scripts/rawhide-rc.sh b/scripts/rawhide-rc.sh new file mode 100755 index 000000000..2e871ee8e --- /dev/null +++ b/scripts/rawhide-rc.sh @@ -0,0 +1,36 @@ +#!/bin/sh +# Generate a commit for a rawhide RC release + +source scripts/kernel-version.sh + +make release +# fixup the release because rpmdev-bumpspec *sigh* +scripts/fixup-bumpspec.sh +fedpkg commit -c + +# Figure out what is our RC +RC=`grep "%define rcrev" kernel.spec| cut -d ' ' -f 3` +RC=$(($RC+1)) +BASE=`grep "%define base_sublevel" kernel.spec| cut -d ' ' -f 3` + +# Kill all patches +awk '!/patch/ { print $0 }' < sources > sources.tmp +mv sources.tmp sources + +# Grab the tarball +if [ ! -f patch-4.$BASE-rc$RC.xz ]; then + wget https://cdn.kernel.org/pub/linux/kernel/v4.x/testing/patch-4.$BASE-rc$RC.xz + if [ ! $? -eq 0 ]; then + exit 1 + fi + fedpkg upload patch-4.$BASE-rc$RC.xz +fi + +# bump rcrev in the spec and set git snapshot to 0 +RC=$RC perl -p -i -e 's|%define rcrev.*|%global rcrev $ENV{'RC'}|' kernel.spec + +perl -p -i -e 's|%define gitrev.*|%define gitrev 0|' kernel.spec + +perl -p -i -e 's|%global baserelease.*|%global baserelease 0|' kernel.spec + +rpmdev-bumpspec -c "Linux v4.$BASE-rc$RC" kernel.spec diff --git a/scripts/rawhide-snapshot.sh b/scripts/rawhide-snapshot.sh new file mode 100755 index 000000000..b96bd38d9 --- /dev/null +++ b/scripts/rawhide-snapshot.sh @@ -0,0 +1,59 @@ +#!/bin/sh +# A coffeeproof rawhide script. You should be able to run this before the +# coffee has kicked in and generate a good rawhide commit. +# +# - Updates the local Fedora tree to master and verifies that you are working +# off of the correct master +# - Updates the upstream tree to the latest master. +# - Generates a git snapshot via generate-git-snapshot.sh +# - Clears out old git snapshots from the sources +# - Uploads the new snapshot + +source scripts/kernel-version.sh + +git fetch origin +if [ "$(git rev-parse origin/master)" != "$(git rev-parse HEAD)" ]; then + echo "I just did a git fetch and this branch does not match master" + echo "Re-check out this branch to work off of the latest master" + exit 1 +fi + +if [ ! -d "$LINUX_GIT" ]; then + echo "error: set \$LINUX_GIT to point at an upstream git tree" + exit 1 +fi + +git -C $LINUX_GIT pull +if [ ! $? -eq 0 ]; then + echo "Git pull failed. Is your tree clean/correct?" + exit 1 +fi + +git -C $LINUX_GIT describe --tags HEAD | grep -q "\-g" +if [ ! $? -eq 0 ]; then + echo "Trying to snapshot off of a tagged git." + echo "I don't think this is what you want" + exit 1 +fi + +if [ "$(git -C $LINUX_GIT rev-parse origin/master)" == `cat gitrev` ]; then + echo "Last snapshot commit matches current master. Nothing to do" + echo "\o/" + exit 0 +fi + +GIT=`grep "%define gitrev" kernel.spec | cut -d ' ' -f 3` +if [ "$GIT" -eq 0 ]; then + make debug + ./scripts/fixup-bumpspec.sh + fedpkg commit -c +fi + +./scripts/generate-git-snapshot.sh + +#Nuke the old patch from the source +awk '!/git/ { print $0 }' < sources > sources.tmp +mv sources.tmp sources + +GIT=`grep "%define gitrev" kernel.spec | cut -d ' ' -f 3` +fedpkg upload patch-$VER-git$GIT.xz diff --git a/scripts/stable-update.sh b/scripts/stable-update.sh new file mode 100755 index 000000000..eefd9a96d --- /dev/null +++ b/scripts/stable-update.sh @@ -0,0 +1,67 @@ +#!/bin/sh +# +# Author: Laura Abbott +# +# Apply a stable patch update to the Fedora tree. This takes care of +# - Downloading the patch from kernel.org +# - Uploading the source file +# - Removing old patch files +# - Updating the spec file stable version +# - Adding a proper changelog entry +# +# Based on steps from https://fedoraproject.org/wiki/Kernel/DayToDay#Stable_kernel_update +# +# Args: Stable version to update (e.g. 4.7.7, 4.8.1) + +if [ $# -lt 1 ]; then + echo "Need a version" + exit 1 +fi + +VERSION=`echo $1 | cut -d . -f 1` +if [ -z $VERSION ]; then + echo "Malformed version $1" + exit 1 +fi +PATCHLEVEL=`echo $1 | cut -d . -f 2` +if [ -z $VERSION ]; then + echo "Malformed version $1" + exit 1 +fi +SUBLEVEL=`echo $1 | cut -d . -f 3` +if [ -z $VERSION ]; then + echo "Malformed version $1" + exit 1 +fi + +if [ ! -f patch-$1.xz ]; then + wget https://cdn.kernel.org/pub/linux/kernel/v4.x/patch-$1.xz + if [ ! $? -eq 0 ]; then + echo "Download fail" + exit 1 + fi +fi + +grep $1 sources &> /dev/null +if [ ! $? -eq 0 ]; then + fedpkg upload patch-$1.xz + + # Cryptic awk: search for the previous patch level (if one exists) and + # remove it from the source file + awk -v VER=$VERSION.$PATCHLEVEL.$((SUBLEVEL-1)) '$0 !~ VER { print $0; }' < sources > sources.tmp + mv sources.tmp sources +fi + +# Update the stable level +awk -v STABLE=$SUBLEVEL '/%define stable_update/ \ + { print "%define stable_update " STABLE } \ + !/%define stable_update/ { print $0 }' \ + < kernel.spec > kernel.spec.tmp +mv kernel.spec.tmp kernel.spec + +# Reset the base release for use with rpmdev-bumpspec +BASERELEASE=`cat kernel.spec | grep "%global baserelease" | cut -d ' ' -f 3 | head -c 1`00 +BASERELEASE=$(($BASERELEASE-1)) +BASERELEASE=$BASERELEASE perl -p -i -e 's|%global baserelease.*|%global baserelease $ENV{'BASERELEASE'}|' kernel.spec + +rpmdev-bumpspec -c "Linux v$1" kernel.spec diff --git a/sources b/sources index a9d57d182..fb1dc8e0a 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ 5276563eb1f39a048e4a8a887408c031 linux-4.7.tar.xz fe259c02c75eec61d1aa4b1211f3c853 perf-man-4.7.tar.gz -106560e20e26ef3225dac71539fe3531 patch-4.7.8.xz +28f6b3a4bf77710cbffbee17afcf7ae2 patch-4.7.9.xz From e4b3d2ead04685e1f0f39096a2322c9e4ee56db9 Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Mon, 24 Oct 2016 16:20:05 -0500 Subject: [PATCH 152/275] Linux v4.8.4 rebase --- ...nize-WM-structs-unions-in-CRTC-state.patch | 227 -- ...pply-bounds-checking-to-source-types.patch | 203 -- ...s-skl_compute_pipe_wm-skl_build_pipe.patch | 60 - ...Cache-plane-data-rates-in-CRTC-state.patch | 214 -- ...low-calculation-of-data-rate-for-in-.patch | 141 - ...ore-plane-minimum-blocks-in-CRTC-wm-.patch | 67 - ...hether-an-atomic-transaction-changes.patch | 68 - ...low-skl_allocate_pipe_ddb-to-operate.patch | 352 --- ...distrust_bios_wm-flag-to-dev_priv-v2.patch | 84 - ...mpute-DDB-allocation-at-atomic-check.patch | 244 -- ...op-re-allocation-of-DDB-at-atomic-co.patch | 379 --- ...gen9-Calculate-plane-WM-s-from-state.patch | 91 - ...low-watermark-calculation-on-in-flig.patch | 156 - ...e-a-bitmask-to-track-dirty-pipe-wate.patch | 91 - ...opagate-watermark-calculation-failur.patch | 254 -- ...lculate-watermarks-during-atomic-che.patch | 302 -- ...ject-display-updates-that-exceed-wm-.patch | 63 - ...wm_config-from-dev_priv-intel_atomic.patch | 105 - Add-EFI-signature-data-types.patch | 13 +- Add-secure_modules-call.patch | 18 +- AllWinner-net-emac.patch | 2700 +++++++++++++++++ ...ft-Add-Surface-4-type-cover-pro-4-JP.patch | 76 + ...R-access-when-module-security-is-ena.patch | 21 +- ...overflow-in-archmsr_iop_message_xfer.patch | 41 - arm-i.MX6-Utilite-device-dtb.patch | 354 --- arm64-ACPI-parse-SPCR-table.patch | 596 ++++ ...ing-console-to-enable-serial-console.patch | 46 - arm64-pcie-acpi.patch | 1247 -------- arm64-pcie-quirks-xgene.patch | 508 ---- arm64-pcie-quirks.patch | 977 ++++++ bcm2837-initial-support.patch | 179 -- bcm283x-vc4-fixes.patch | 636 ++++ config-arm-generic | 82 +- config-arm64 | 54 +- config-armv7 | 43 +- config-armv7-generic | 90 +- config-armv7-lpae | 18 - config-generic | 107 +- config-powerpc64-generic | 11 +- config-s390x | 3 + config-x86-generic | 18 +- config-x86_64-generic | 10 +- crash-driver.patch | 131 +- disable-CONFIG_EXPERT-for-ZONE_DMA.patch | 43 - i8042-skip-selftest-asus-laptops.patch | 373 +++ kbuild-AFTER_LINK.patch | 8 +- kernel-panic-TPROXY-vanilla-4.7.1.patch | 85 - kernel.spec | 70 +- qcom-QDF2432-tmp-errata.patch | 59 + qxl-reapply-cursor-after-SetCrtc-calls.patch | 439 +++ security-selinux-overlayfs-support.patch | 931 ++++++ sources | 6 +- ...-Remove-x86-hibernation-restrictions.patch | 131 - ...Disable-watchdog-on-virtual-machines.patch | 79 - 54 files changed, 7246 insertions(+), 6058 deletions(-) delete mode 100644 0001-drm-i915-Reorganize-WM-structs-unions-in-CRTC-state.patch delete mode 100644 0001-selinux-Only-apply-bounds-checking-to-source-types.patch delete mode 100644 0002-drm-i915-Rename-s-skl_compute_pipe_wm-skl_build_pipe.patch delete mode 100644 0003-drm-i915-gen9-Cache-plane-data-rates-in-CRTC-state.patch delete mode 100644 0004-drm-i915-gen9-Allow-calculation-of-data-rate-for-in-.patch delete mode 100644 0005-drm-i915-gen9-Store-plane-minimum-blocks-in-CRTC-wm-.patch delete mode 100644 0006-drm-i915-Track-whether-an-atomic-transaction-changes.patch delete mode 100644 0007-drm-i915-gen9-Allow-skl_allocate_pipe_ddb-to-operate.patch delete mode 100644 0008-drm-i915-Add-distrust_bios_wm-flag-to-dev_priv-v2.patch delete mode 100644 0009-drm-i915-gen9-Compute-DDB-allocation-at-atomic-check.patch delete mode 100644 0010-drm-i915-gen9-Drop-re-allocation-of-DDB-at-atomic-co.patch delete mode 100644 0011-drm-i915-gen9-Calculate-plane-WM-s-from-state.patch delete mode 100644 0012-drm-i915-gen9-Allow-watermark-calculation-on-in-flig.patch delete mode 100644 0013-drm-i915-gen9-Use-a-bitmask-to-track-dirty-pipe-wate.patch delete mode 100644 0014-drm-i915-gen9-Propagate-watermark-calculation-failur.patch delete mode 100644 0015-drm-i915-gen9-Calculate-watermarks-during-atomic-che.patch delete mode 100644 0016-drm-i915-gen9-Reject-display-updates-that-exceed-wm-.patch delete mode 100644 0017-drm-i915-Remove-wm_config-from-dev_priv-intel_atomic.patch create mode 100644 AllWinner-net-emac.patch create mode 100644 HID-microsoft-Add-Surface-4-type-cover-pro-4-JP.patch delete mode 100644 arcmsr-buffer-overflow-in-archmsr_iop_message_xfer.patch delete mode 100644 arm-i.MX6-Utilite-device-dtb.patch create mode 100644 arm64-ACPI-parse-SPCR-table.patch delete mode 100644 arm64-avoid-needing-console-to-enable-serial-console.patch delete mode 100644 arm64-pcie-acpi.patch delete mode 100644 arm64-pcie-quirks-xgene.patch create mode 100644 arm64-pcie-quirks.patch create mode 100644 bcm283x-vc4-fixes.patch delete mode 100644 disable-CONFIG_EXPERT-for-ZONE_DMA.patch create mode 100644 i8042-skip-selftest-asus-laptops.patch delete mode 100644 kernel-panic-TPROXY-vanilla-4.7.1.patch create mode 100644 qcom-QDF2432-tmp-errata.patch create mode 100644 qxl-reapply-cursor-after-SetCrtc-calls.patch create mode 100644 security-selinux-overlayfs-support.patch delete mode 100644 tip-x86-boot-x86-KASLR-x86-power-Remove-x86-hibernation-restrictions.patch delete mode 100644 watchdog-Disable-watchdog-on-virtual-machines.patch diff --git a/0001-drm-i915-Reorganize-WM-structs-unions-in-CRTC-state.patch b/0001-drm-i915-Reorganize-WM-structs-unions-in-CRTC-state.patch deleted file mode 100644 index f30e32dc4..000000000 --- a/0001-drm-i915-Reorganize-WM-structs-unions-in-CRTC-state.patch +++ /dev/null @@ -1,227 +0,0 @@ -From 0042e1e7a03a2fb5d6c464c03ce84d55b31add11 Mon Sep 17 00:00:00 2001 -From: Matt Roper -Date: Thu, 12 May 2016 07:05:55 -0700 -Subject: [PATCH 01/17] drm/i915: Reorganize WM structs/unions in CRTC state - -Reorganize the nested structures and unions we have for pipe watermark -data in intel_crtc_state so that platform-specific data can be added in -a more sensible manner (and save a bit of memory at the same time). - -The change basically changes the organization from: - - union { - struct intel_pipe_wm ilk; - struct intel_pipe_wm skl; - } optimal; - - struct intel_pipe_wm intermediate /* ILK-only */ - -to - - union { - struct { - struct intel_pipe_wm intermediate; - struct intel_pipe_wm optimal; - } ilk; - - struct { - struct intel_pipe_wm optimal; - } skl; - } - -There should be no functional change here, but it will allow us to add -more platform-specific fields going forward (and more easily extend to -other platform types like VLV). - -While we're at it, let's move the entire watermark substructure out to -its own structure definition to make the code slightly more readable. - -Signed-off-by: Matt Roper -Reviewed-by: Maarten Lankhorst -Link: http://patchwork.freedesktop.org/patch/msgid/1463061971-19638-2-git-send-email-matthew.d.roper@intel.com ---- - drivers/gpu/drm/i915/intel_display.c | 2 +- - drivers/gpu/drm/i915/intel_drv.h | 61 +++++++++++++++++++++--------------- - drivers/gpu/drm/i915/intel_pm.c | 18 +++++------ - 3 files changed, 45 insertions(+), 36 deletions(-) - -diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c -index d19b392..4633aec 100644 ---- a/drivers/gpu/drm/i915/intel_display.c -+++ b/drivers/gpu/drm/i915/intel_display.c -@@ -12027,7 +12027,7 @@ static int intel_crtc_atomic_check(struct drm_crtc *crtc, - } - } else if (dev_priv->display.compute_intermediate_wm) { - if (HAS_PCH_SPLIT(dev_priv) && INTEL_GEN(dev_priv) < 9) -- pipe_config->wm.intermediate = pipe_config->wm.optimal.ilk; -+ pipe_config->wm.ilk.intermediate = pipe_config->wm.ilk.optimal; - } - - if (INTEL_INFO(dev)->gen >= 9) { -diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h -index 4a24b00..5a186bf 100644 ---- a/drivers/gpu/drm/i915/intel_drv.h -+++ b/drivers/gpu/drm/i915/intel_drv.h -@@ -405,6 +405,40 @@ struct skl_pipe_wm { - uint32_t linetime; - }; - -+struct intel_crtc_wm_state { -+ union { -+ struct { -+ /* -+ * Intermediate watermarks; these can be -+ * programmed immediately since they satisfy -+ * both the current configuration we're -+ * switching away from and the new -+ * configuration we're switching to. -+ */ -+ struct intel_pipe_wm intermediate; -+ -+ /* -+ * Optimal watermarks, programmed post-vblank -+ * when this state is committed. -+ */ -+ struct intel_pipe_wm optimal; -+ } ilk; -+ -+ struct { -+ /* gen9+ only needs 1-step wm programming */ -+ struct skl_pipe_wm optimal; -+ } skl; -+ }; -+ -+ /* -+ * Platforms with two-step watermark programming will need to -+ * update watermark programming post-vblank to switch from the -+ * safe intermediate watermarks to the optimal final -+ * watermarks. -+ */ -+ bool need_postvbl_update; -+}; -+ - struct intel_crtc_state { - struct drm_crtc_state base; - -@@ -558,32 +592,7 @@ struct intel_crtc_state { - /* IVB sprite scaling w/a (WaCxSRDisabledForSpriteScaling:ivb) */ - bool disable_lp_wm; - -- struct { -- /* -- * Optimal watermarks, programmed post-vblank when this state -- * is committed. -- */ -- union { -- struct intel_pipe_wm ilk; -- struct skl_pipe_wm skl; -- } optimal; -- -- /* -- * Intermediate watermarks; these can be programmed immediately -- * since they satisfy both the current configuration we're -- * switching away from and the new configuration we're switching -- * to. -- */ -- struct intel_pipe_wm intermediate; -- -- /* -- * Platforms with two-step watermark programming will need to -- * update watermark programming post-vblank to switch from the -- * safe intermediate watermarks to the optimal final -- * watermarks. -- */ -- bool need_postvbl_update; -- } wm; -+ struct intel_crtc_wm_state wm; - - /* Gamma mode programmed on the pipe */ - uint32_t gamma_mode; -diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c -index a7ef45d..4353fec 100644 ---- a/drivers/gpu/drm/i915/intel_pm.c -+++ b/drivers/gpu/drm/i915/intel_pm.c -@@ -2309,7 +2309,7 @@ static int ilk_compute_pipe_wm(struct intel_crtc_state *cstate) - int level, max_level = ilk_wm_max_level(dev), usable_level; - struct ilk_wm_maximums max; - -- pipe_wm = &cstate->wm.optimal.ilk; -+ pipe_wm = &cstate->wm.ilk.optimal; - - for_each_intel_plane_on_crtc(dev, intel_crtc, intel_plane) { - struct intel_plane_state *ps; -@@ -2391,7 +2391,7 @@ static int ilk_compute_intermediate_wm(struct drm_device *dev, - struct intel_crtc *intel_crtc, - struct intel_crtc_state *newstate) - { -- struct intel_pipe_wm *a = &newstate->wm.intermediate; -+ struct intel_pipe_wm *a = &newstate->wm.ilk.intermediate; - struct intel_pipe_wm *b = &intel_crtc->wm.active.ilk; - int level, max_level = ilk_wm_max_level(dev); - -@@ -2400,7 +2400,7 @@ static int ilk_compute_intermediate_wm(struct drm_device *dev, - * currently active watermarks to get values that are safe both before - * and after the vblank. - */ -- *a = newstate->wm.optimal.ilk; -+ *a = newstate->wm.ilk.optimal; - a->pipe_enabled |= b->pipe_enabled; - a->sprites_enabled |= b->sprites_enabled; - a->sprites_scaled |= b->sprites_scaled; -@@ -2429,7 +2429,7 @@ static int ilk_compute_intermediate_wm(struct drm_device *dev, - * If our intermediate WM are identical to the final WM, then we can - * omit the post-vblank programming; only update if it's different. - */ -- if (memcmp(a, &newstate->wm.optimal.ilk, sizeof(*a)) == 0) -+ if (memcmp(a, &newstate->wm.ilk.optimal, sizeof(*a)) == 0) - newstate->wm.need_postvbl_update = false; - - return 0; -@@ -3678,7 +3678,7 @@ static void skl_update_wm(struct drm_crtc *crtc) - struct drm_i915_private *dev_priv = dev->dev_private; - struct skl_wm_values *results = &dev_priv->wm.skl_results; - struct intel_crtc_state *cstate = to_intel_crtc_state(crtc->state); -- struct skl_pipe_wm *pipe_wm = &cstate->wm.optimal.skl; -+ struct skl_pipe_wm *pipe_wm = &cstate->wm.skl.optimal; - - - /* Clear all dirty flags */ -@@ -3757,7 +3757,7 @@ static void ilk_initial_watermarks(struct intel_crtc_state *cstate) - struct intel_crtc *intel_crtc = to_intel_crtc(cstate->base.crtc); - - mutex_lock(&dev_priv->wm.wm_mutex); -- intel_crtc->wm.active.ilk = cstate->wm.intermediate; -+ intel_crtc->wm.active.ilk = cstate->wm.ilk.intermediate; - ilk_program_watermarks(dev_priv); - mutex_unlock(&dev_priv->wm.wm_mutex); - } -@@ -3769,7 +3769,7 @@ static void ilk_optimize_watermarks(struct intel_crtc_state *cstate) - - mutex_lock(&dev_priv->wm.wm_mutex); - if (cstate->wm.need_postvbl_update) { -- intel_crtc->wm.active.ilk = cstate->wm.optimal.ilk; -+ intel_crtc->wm.active.ilk = cstate->wm.ilk.optimal; - ilk_program_watermarks(dev_priv); - } - mutex_unlock(&dev_priv->wm.wm_mutex); -@@ -3826,7 +3826,7 @@ static void skl_pipe_wm_get_hw_state(struct drm_crtc *crtc) - struct skl_wm_values *hw = &dev_priv->wm.skl_hw; - struct intel_crtc *intel_crtc = to_intel_crtc(crtc); - struct intel_crtc_state *cstate = to_intel_crtc_state(crtc->state); -- struct skl_pipe_wm *active = &cstate->wm.optimal.skl; -+ struct skl_pipe_wm *active = &cstate->wm.skl.optimal; - enum pipe pipe = intel_crtc->pipe; - int level, i, max_level; - uint32_t temp; -@@ -3892,7 +3892,7 @@ static void ilk_pipe_wm_get_hw_state(struct drm_crtc *crtc) - struct ilk_wm_values *hw = &dev_priv->wm.hw; - struct intel_crtc *intel_crtc = to_intel_crtc(crtc); - struct intel_crtc_state *cstate = to_intel_crtc_state(crtc->state); -- struct intel_pipe_wm *active = &cstate->wm.optimal.ilk; -+ struct intel_pipe_wm *active = &cstate->wm.ilk.optimal; - enum pipe pipe = intel_crtc->pipe; - static const i915_reg_t wm0_pipe_reg[] = { - [PIPE_A] = WM0_PIPEA_ILK, --- -2.7.4 - diff --git a/0001-selinux-Only-apply-bounds-checking-to-source-types.patch b/0001-selinux-Only-apply-bounds-checking-to-source-types.patch deleted file mode 100644 index dcc9e6b2b..000000000 --- a/0001-selinux-Only-apply-bounds-checking-to-source-types.patch +++ /dev/null @@ -1,203 +0,0 @@ -From 7ea59202db8d20806d9ae552acd1875c3a978bcc Mon Sep 17 00:00:00 2001 -From: Stephen Smalley -Date: Mon, 23 May 2016 10:54:11 -0400 -Subject: [PATCH] selinux: Only apply bounds checking to source types - -The current bounds checking of both source and target types -requires allowing any domain that has access to the child -domain to also have the same permissions to the parent, which -is undesirable. Drop the target bounds checking. - -KaiGai Kohei originally removed all use of target bounds in -commit 7d52a155e38d ("selinux: remove dead code in -type_attribute_bounds_av()") but this was reverted in -commit 2ae3ba39389b ("selinux: libsepol: remove dead code in -check_avtab_hierarchy_callback()") because it would have -required explicitly allowing the parent any permissions -to the child that the child is allowed to itself. - -This change in contrast retains the logic for the case where both -source and target types are bounded, thereby allowing access -if the parent of the source is allowed the corresponding -permissions to the parent of the target. Further, this change -reworks the logic such that we only perform a single computation -for each case and there is no ambiguity as to how to resolve -a bounds violation. - -Under the new logic, if the source type and target types are both -bounded, then the parent of the source type must be allowed the same -permissions to the parent of the target type. If only the source -type is bounded, then the parent of the source type must be allowed -the same permissions to the target type. - -Examples of the new logic and comparisons with the old logic: -1. If we have: - typebounds A B; -then: - allow B self:process ; -will satisfy the bounds constraint iff: - allow A self:process ; -is also allowed in policy. - -Under the old logic, the allow rule on B satisfies the -bounds constraint if any of the following three are allowed: - allow A B:process ; or - allow B A:process ; or - allow A self:process ; -However, either of the first two ultimately require the third to -satisfy the bounds constraint under the old logic, and therefore -this degenerates to the same result (but is more efficient - we only -need to perform one compute_av call). - -2. If we have: - typebounds A B; - typebounds A_exec B_exec; -then: - allow B B_exec:file ; -will satisfy the bounds constraint iff: - allow A A_exec:file ; -is also allowed in policy. - -This is essentially the same as #1; it is merely included as -an example of dealing with object types related to a bounded domain -in a manner that satisfies the bounds relationship. Note that -this approach is preferable to leaving B_exec unbounded and having: - allow A B_exec:file ; -in policy because that would allow B's entrypoints to be used to -enter A. Similarly for _tmp or other related types. - -3. If we have: - typebounds A B; -and an unbounded type T, then: - allow B T:file ; -will satisfy the bounds constraint iff: - allow A T:file ; -is allowed in policy. - -The old logic would have been identical for this example. - -4. If we have: - typebounds A B; -and an unbounded domain D, then: - allow D B:unix_stream_socket ; -is not subject to any bounds constraints under the new logic -because D is not bounded. This is desirable so that we can -allow a domain to e.g. connectto a child domain without having -to allow it to do the same to its parent. - -The old logic would have required: - allow D A:unix_stream_socket ; -to also be allowed in policy. - -Signed-off-by: Stephen Smalley -[PM: re-wrapped description to appease checkpatch.pl] -Signed-off-by: Paul Moore ---- - security/selinux/ss/services.c | 70 +++++++++++++----------------------------- - 1 file changed, 22 insertions(+), 48 deletions(-) - -diff --git a/security/selinux/ss/services.c b/security/selinux/ss/services.c -index 89df646..082b20c 100644 ---- a/security/selinux/ss/services.c -+++ b/security/selinux/ss/services.c -@@ -543,7 +543,7 @@ static void type_attribute_bounds_av(struct context *scontext, - struct av_decision *avd) - { - struct context lo_scontext; -- struct context lo_tcontext; -+ struct context lo_tcontext, *tcontextp = tcontext; - struct av_decision lo_avd; - struct type_datum *source; - struct type_datum *target; -@@ -553,67 +553,41 @@ static void type_attribute_bounds_av(struct context *scontext, - scontext->type - 1); - BUG_ON(!source); - -+ if (!source->bounds) -+ return; -+ - target = flex_array_get_ptr(policydb.type_val_to_struct_array, - tcontext->type - 1); - BUG_ON(!target); - -- if (source->bounds) { -- memset(&lo_avd, 0, sizeof(lo_avd)); -- -- memcpy(&lo_scontext, scontext, sizeof(lo_scontext)); -- lo_scontext.type = source->bounds; -+ memset(&lo_avd, 0, sizeof(lo_avd)); - -- context_struct_compute_av(&lo_scontext, -- tcontext, -- tclass, -- &lo_avd, -- NULL); -- if ((lo_avd.allowed & avd->allowed) == avd->allowed) -- return; /* no masked permission */ -- masked = ~lo_avd.allowed & avd->allowed; -- } -+ memcpy(&lo_scontext, scontext, sizeof(lo_scontext)); -+ lo_scontext.type = source->bounds; - - if (target->bounds) { -- memset(&lo_avd, 0, sizeof(lo_avd)); -- - memcpy(&lo_tcontext, tcontext, sizeof(lo_tcontext)); - lo_tcontext.type = target->bounds; -- -- context_struct_compute_av(scontext, -- &lo_tcontext, -- tclass, -- &lo_avd, -- NULL); -- if ((lo_avd.allowed & avd->allowed) == avd->allowed) -- return; /* no masked permission */ -- masked = ~lo_avd.allowed & avd->allowed; -+ tcontextp = &lo_tcontext; - } - -- if (source->bounds && target->bounds) { -- memset(&lo_avd, 0, sizeof(lo_avd)); -- /* -- * lo_scontext and lo_tcontext are already -- * set up. -- */ -+ context_struct_compute_av(&lo_scontext, -+ tcontextp, -+ tclass, -+ &lo_avd, -+ NULL); - -- context_struct_compute_av(&lo_scontext, -- &lo_tcontext, -- tclass, -- &lo_avd, -- NULL); -- if ((lo_avd.allowed & avd->allowed) == avd->allowed) -- return; /* no masked permission */ -- masked = ~lo_avd.allowed & avd->allowed; -- } -+ masked = ~lo_avd.allowed & avd->allowed; - -- if (masked) { -- /* mask violated permissions */ -- avd->allowed &= ~masked; -+ if (likely(!masked)) -+ return; /* no masked permission */ - -- /* audit masked permissions */ -- security_dump_masked_av(scontext, tcontext, -- tclass, masked, "bounds"); -- } -+ /* mask violated permissions */ -+ avd->allowed &= ~masked; -+ -+ /* audit masked permissions */ -+ security_dump_masked_av(scontext, tcontext, -+ tclass, masked, "bounds"); - } - - /* --- -2.7.4 - diff --git a/0002-drm-i915-Rename-s-skl_compute_pipe_wm-skl_build_pipe.patch b/0002-drm-i915-Rename-s-skl_compute_pipe_wm-skl_build_pipe.patch deleted file mode 100644 index f9eecb97a..000000000 --- a/0002-drm-i915-Rename-s-skl_compute_pipe_wm-skl_build_pipe.patch +++ /dev/null @@ -1,60 +0,0 @@ -From 4d428f0fd6aaaa75382885d897900f619b2dad35 Mon Sep 17 00:00:00 2001 -From: Fedora Kernel Team -Date: Mon, 20 Jun 2016 11:12:56 +0200 -Subject: [PATCH 02/17] drm/i915: Rename - s/skl_compute_pipe_wm/skl_build_pipe_wm/ - -Upstream: since drm-intel-next-2016-05-22 -commit e7649b54777ba6491204acbe1f1a34fce78637d5 - -Author: Matt Roper -AuthorDate: Thu May 12 07:05:56 2016 -0700 -Commit: Matt Roper -CommitDate: Fri May 13 07:32:27 2016 -0700 - - drm/i915: Rename s/skl_compute_pipe_wm/skl_build_pipe_wm/ - - When we added atomic watermarks, we added a new display vfunc - 'compute_pipe_wm' that is used to compute any pipe-specific watermark - information that we can at atomic check time. This was a somewhat poor - naming choice since we already had a 'skl_compute_pipe_wm' function that - doesn't quite fit this model --- the existing SKL function is something - that gets used at atomic commit time, after the DDB allocation has been - determined. Let's rename the existing SKL function to avoid confusion. - - Signed-off-by: Matt Roper - Reviewed-by: Maarten Lankhorst - Link: http://patchwork.freedesktop.org/patch/msgid/1463061971-19638-3-git-send-email-matthew.d.roper@intel.com ---- - drivers/gpu/drm/i915/intel_pm.c | 8 ++++---- - 1 file changed, 4 insertions(+), 4 deletions(-) - -diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c -index 0da1d60..8f081b2 100644 ---- a/drivers/gpu/drm/i915/intel_pm.c -+++ b/drivers/gpu/drm/i915/intel_pm.c -@@ -3266,9 +3266,9 @@ static void skl_compute_transition_wm(struct intel_crtc_state *cstate, - } - } - --static void skl_compute_pipe_wm(struct intel_crtc_state *cstate, -- struct skl_ddb_allocation *ddb, -- struct skl_pipe_wm *pipe_wm) -+static void skl_build_pipe_wm(struct intel_crtc_state *cstate, -+ struct skl_ddb_allocation *ddb, -+ struct skl_pipe_wm *pipe_wm) - { - struct drm_device *dev = cstate->base.crtc->dev; - const struct drm_i915_private *dev_priv = dev->dev_private; -@@ -3535,7 +3535,7 @@ static bool skl_update_pipe_wm(struct drm_crtc *crtc, - struct intel_crtc_state *cstate = to_intel_crtc_state(crtc->state); - - skl_allocate_pipe_ddb(cstate, ddb); -- skl_compute_pipe_wm(cstate, ddb, pipe_wm); -+ skl_build_pipe_wm(cstate, ddb, pipe_wm); - - if (!memcmp(&intel_crtc->wm.active.skl, pipe_wm, sizeof(*pipe_wm))) - return false; --- -2.7.4 - diff --git a/0003-drm-i915-gen9-Cache-plane-data-rates-in-CRTC-state.patch b/0003-drm-i915-gen9-Cache-plane-data-rates-in-CRTC-state.patch deleted file mode 100644 index 9a9366c1c..000000000 --- a/0003-drm-i915-gen9-Cache-plane-data-rates-in-CRTC-state.patch +++ /dev/null @@ -1,214 +0,0 @@ -From 0206aec944641c69815562407b73b6f9df22f041 Mon Sep 17 00:00:00 2001 -From: Fedora Kernel Team -Date: Mon, 20 Jun 2016 11:13:09 +0200 -Subject: [PATCH 03/17] drm/i915/gen9: Cache plane data rates in CRTC state - -Upstream: since drm-intel-next-2016-05-22 -commit a1de91e5f3039dfc32ac2b77ffb280a68646cbc7 - -Author: Matt Roper -AuthorDate: Thu May 12 07:05:57 2016 -0700 -Commit: Matt Roper -CommitDate: Fri May 13 07:32:35 2016 -0700 - - drm/i915/gen9: Cache plane data rates in CRTC state - - This will be important when we start calculating CRTC data rates for - in-flight CRTC states since it will allow us to calculate the total data - rate without needing to grab the plane state for any planes that aren't - updated by the transaction. - - Signed-off-by: Matt Roper - Reviewed-by: Maarten Lankhorst - Link: http://patchwork.freedesktop.org/patch/msgid/1463061971-19638-4-git-send-email-matthew.d.roper@intel.com ---- - drivers/gpu/drm/i915/intel_drv.h | 4 ++ - drivers/gpu/drm/i915/intel_pm.c | 92 ++++++++++++++++++++++++++-------------- - 2 files changed, 63 insertions(+), 33 deletions(-) - -diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h -index 7d19baf..7c00ab6 100644 ---- a/drivers/gpu/drm/i915/intel_drv.h -+++ b/drivers/gpu/drm/i915/intel_drv.h -@@ -385,6 +385,10 @@ struct intel_crtc_wm_state { - struct { - /* gen9+ only needs 1-step wm programming */ - struct skl_pipe_wm optimal; -+ -+ /* cached plane data rate */ -+ unsigned plane_data_rate[I915_MAX_PLANES]; -+ unsigned plane_y_data_rate[I915_MAX_PLANES]; - } skl; - }; - -diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c -index 8f081b2..854f0a4 100644 ---- a/drivers/gpu/drm/i915/intel_pm.c -+++ b/drivers/gpu/drm/i915/intel_pm.c -@@ -2879,6 +2879,14 @@ skl_plane_relative_data_rate(const struct intel_crtc_state *cstate, - struct intel_plane_state *intel_pstate = to_intel_plane_state(pstate); - struct drm_framebuffer *fb = pstate->fb; - uint32_t width = 0, height = 0; -+ unsigned format = fb ? fb->pixel_format : DRM_FORMAT_XRGB8888; -+ -+ if (!intel_pstate->visible) -+ return 0; -+ if (pstate->plane->type == DRM_PLANE_TYPE_CURSOR) -+ return 0; -+ if (y && format != DRM_FORMAT_NV12) -+ return 0; - - width = drm_rect_width(&intel_pstate->src) >> 16; - height = drm_rect_height(&intel_pstate->src) >> 16; -@@ -2887,17 +2895,17 @@ skl_plane_relative_data_rate(const struct intel_crtc_state *cstate, - swap(width, height); - - /* for planar format */ -- if (fb->pixel_format == DRM_FORMAT_NV12) { -+ if (format == DRM_FORMAT_NV12) { - if (y) /* y-plane data rate */ - return width * height * -- drm_format_plane_cpp(fb->pixel_format, 0); -+ drm_format_plane_cpp(format, 0); - else /* uv-plane data rate */ - return (width / 2) * (height / 2) * -- drm_format_plane_cpp(fb->pixel_format, 1); -+ drm_format_plane_cpp(format, 1); - } - - /* for packed formats */ -- return width * height * drm_format_plane_cpp(fb->pixel_format, 0); -+ return width * height * drm_format_plane_cpp(format, 0); - } - - /* -@@ -2906,32 +2914,34 @@ skl_plane_relative_data_rate(const struct intel_crtc_state *cstate, - * 3 * 4096 * 8192 * 4 < 2^32 - */ - static unsigned int --skl_get_total_relative_data_rate(const struct intel_crtc_state *cstate) -+skl_get_total_relative_data_rate(struct intel_crtc_state *cstate) - { - struct intel_crtc *intel_crtc = to_intel_crtc(cstate->base.crtc); - struct drm_device *dev = intel_crtc->base.dev; - const struct intel_plane *intel_plane; -- unsigned int total_data_rate = 0; -+ unsigned int rate, total_data_rate = 0; - -+ /* Calculate and cache data rate for each plane */ - for_each_intel_plane_on_crtc(dev, intel_crtc, intel_plane) { - const struct drm_plane_state *pstate = intel_plane->base.state; -+ int id = skl_wm_plane_id(intel_plane); - -- if (pstate->fb == NULL) -- continue; -+ /* packed/uv */ -+ rate = skl_plane_relative_data_rate(cstate, pstate, 0); -+ cstate->wm.skl.plane_data_rate[id] = rate; - -- if (intel_plane->base.type == DRM_PLANE_TYPE_CURSOR) -- continue; -+ /* y-plane */ -+ rate = skl_plane_relative_data_rate(cstate, pstate, 1); -+ cstate->wm.skl.plane_y_data_rate[id] = rate; -+ } - -- /* packed/uv */ -- total_data_rate += skl_plane_relative_data_rate(cstate, -- pstate, -- 0); -+ /* Calculate CRTC's total data rate from cached values */ -+ for_each_intel_plane_on_crtc(dev, intel_crtc, intel_plane) { -+ int id = skl_wm_plane_id(intel_plane); - -- if (pstate->fb->pixel_format == DRM_FORMAT_NV12) -- /* y-plane */ -- total_data_rate += skl_plane_relative_data_rate(cstate, -- pstate, -- 1); -+ /* packed/uv */ -+ total_data_rate += cstate->wm.skl.plane_data_rate[id]; -+ total_data_rate += cstate->wm.skl.plane_y_data_rate[id]; - } - - return total_data_rate; -@@ -2995,6 +3005,8 @@ skl_allocate_pipe_ddb(struct intel_crtc_state *cstate, - * FIXME: we may not allocate every single block here. - */ - total_data_rate = skl_get_total_relative_data_rate(cstate); -+ if (total_data_rate == 0) -+ return; - - start = alloc->start; - for_each_intel_plane_on_crtc(dev, intel_crtc, intel_plane) { -@@ -3009,7 +3021,7 @@ skl_allocate_pipe_ddb(struct intel_crtc_state *cstate, - if (plane->type == DRM_PLANE_TYPE_CURSOR) - continue; - -- data_rate = skl_plane_relative_data_rate(cstate, pstate, 0); -+ data_rate = cstate->wm.skl.plane_data_rate[id]; - - /* - * allocation for (packed formats) or (uv-plane part of planar format): -@@ -3028,20 +3040,16 @@ skl_allocate_pipe_ddb(struct intel_crtc_state *cstate, - /* - * allocation for y_plane part of planar format: - */ -- if (pstate->fb->pixel_format == DRM_FORMAT_NV12) { -- y_data_rate = skl_plane_relative_data_rate(cstate, -- pstate, -- 1); -- y_plane_blocks = y_minimum[id]; -- y_plane_blocks += div_u64((uint64_t)alloc_size * y_data_rate, -- total_data_rate); -- -- ddb->y_plane[pipe][id].start = start; -- ddb->y_plane[pipe][id].end = start + y_plane_blocks; -- -- start += y_plane_blocks; -- } -+ y_data_rate = cstate->wm.skl.plane_y_data_rate[id]; -+ -+ y_plane_blocks = y_minimum[id]; -+ y_plane_blocks += div_u64((uint64_t)alloc_size * y_data_rate, -+ total_data_rate); - -+ ddb->y_plane[pipe][id].start = start; -+ ddb->y_plane[pipe][id].end = start + y_plane_blocks; -+ -+ start += y_plane_blocks; - } - - } -@@ -3820,10 +3828,28 @@ void skl_wm_get_hw_state(struct drm_device *dev) - struct drm_i915_private *dev_priv = dev->dev_private; - struct skl_ddb_allocation *ddb = &dev_priv->wm.skl_hw.ddb; - struct drm_crtc *crtc; -+ struct intel_crtc *intel_crtc; - - skl_ddb_get_hw_state(dev_priv, ddb); - list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) - skl_pipe_wm_get_hw_state(crtc); -+ -+ /* Calculate plane data rates */ -+ for_each_intel_crtc(dev, intel_crtc) { -+ struct intel_crtc_state *cstate = intel_crtc->config; -+ struct intel_plane *intel_plane; -+ -+ for_each_intel_plane_on_crtc(dev, intel_crtc, intel_plane) { -+ const struct drm_plane_state *pstate = -+ intel_plane->base.state; -+ int id = skl_wm_plane_id(intel_plane); -+ -+ cstate->wm.skl.plane_data_rate[id] = -+ skl_plane_relative_data_rate(cstate, pstate, 0); -+ cstate->wm.skl.plane_y_data_rate[id] = -+ skl_plane_relative_data_rate(cstate, pstate, 1); -+ } -+ } - } - - static void ilk_pipe_wm_get_hw_state(struct drm_crtc *crtc) --- -2.7.4 - diff --git a/0004-drm-i915-gen9-Allow-calculation-of-data-rate-for-in-.patch b/0004-drm-i915-gen9-Allow-calculation-of-data-rate-for-in-.patch deleted file mode 100644 index 3a2b0aa1c..000000000 --- a/0004-drm-i915-gen9-Allow-calculation-of-data-rate-for-in-.patch +++ /dev/null @@ -1,141 +0,0 @@ -From a75a3c793e2cd3e7648597f2c77d87453f520f31 Mon Sep 17 00:00:00 2001 -From: Fedora Kernel Team -Date: Mon, 20 Jun 2016 11:13:23 +0200 -Subject: [PATCH 04/17] drm/i915/gen9: Allow calculation of data rate for - in-flight state (v2) - -Upstream: since drm-intel-next-2016-05-22 -commit 9c74d82621c553f0da1f41bd5d90f5eab5659fdb - -Author: Matt Roper -AuthorDate: Thu May 12 07:05:58 2016 -0700 -Commit: Matt Roper -CommitDate: Fri May 13 07:32:49 2016 -0700 - - drm/i915/gen9: Allow calculation of data rate for in-flight state (v2) - - Our skl_get_total_relative_data_rate() function gets passed a crtc state - object to calculate the data rate for, but it currently always looks - up the committed plane states that correspond to that CRTC. Let's - check whether the CRTC state is an in-flight state (meaning - cstate->state is non-NULL) and if so, use the corresponding in-flight - plane states. - - We'll soon be using this function exclusively for in-flight states; at - that time we'll be able to simplify the function a bit, but for now we - allow it to be used in either mode. - - v2: - - Rebase on top of changes to cache plane data rates. - - Signed-off-by: Matt Roper - Reviewed-by: Maarten Lankhorst - Link: http://patchwork.freedesktop.org/patch/msgid/1463061971-19638-5-git-send-email-matthew.d.roper@intel.com ---- - drivers/gpu/drm/i915/intel_pm.c | 74 +++++++++++++++++++++++++++++++++-------- - 1 file changed, 60 insertions(+), 14 deletions(-) - -diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c -index 854f0a4..b863bfc 100644 ---- a/drivers/gpu/drm/i915/intel_pm.c -+++ b/drivers/gpu/drm/i915/intel_pm.c -@@ -2914,25 +2914,69 @@ skl_plane_relative_data_rate(const struct intel_crtc_state *cstate, - * 3 * 4096 * 8192 * 4 < 2^32 - */ - static unsigned int --skl_get_total_relative_data_rate(struct intel_crtc_state *cstate) -+skl_get_total_relative_data_rate(struct intel_crtc_state *intel_cstate) - { -- struct intel_crtc *intel_crtc = to_intel_crtc(cstate->base.crtc); -- struct drm_device *dev = intel_crtc->base.dev; -+ struct drm_crtc_state *cstate = &intel_cstate->base; -+ struct drm_atomic_state *state = cstate->state; -+ struct drm_crtc *crtc = cstate->crtc; -+ struct drm_device *dev = crtc->dev; -+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc); - const struct intel_plane *intel_plane; - unsigned int rate, total_data_rate = 0; -+ int id; - - /* Calculate and cache data rate for each plane */ -- for_each_intel_plane_on_crtc(dev, intel_crtc, intel_plane) { -- const struct drm_plane_state *pstate = intel_plane->base.state; -- int id = skl_wm_plane_id(intel_plane); -+ /* -+ * FIXME: At the moment this function can be called on either an -+ * in-flight or a committed state object. If it's in-flight then we -+ * only want to re-calculate the plane data rate for planes that are -+ * part of the transaction (i.e., we don't want to grab any additional -+ * plane states if we don't have to). If we're operating on committed -+ * state, we'll just go ahead and recalculate the plane data rate for -+ * all planes. -+ * -+ * Once we finish moving our DDB allocation to the atomic check phase, -+ * we'll only be calling this function on in-flight state objects, so -+ * the 'else' branch here will go away. -+ */ -+ if (state) { -+ struct drm_plane *plane; -+ struct drm_plane_state *pstate; -+ int i; -+ -+ for_each_plane_in_state(state, plane, pstate, i) { -+ intel_plane = to_intel_plane(plane); -+ id = skl_wm_plane_id(intel_plane); -+ -+ if (intel_plane->pipe != intel_crtc->pipe) -+ continue; -+ -+ /* packed/uv */ -+ rate = skl_plane_relative_data_rate(intel_cstate, -+ pstate, 0); -+ intel_cstate->wm.skl.plane_data_rate[id] = rate; -+ -+ /* y-plane */ -+ rate = skl_plane_relative_data_rate(intel_cstate, -+ pstate, 1); -+ intel_cstate->wm.skl.plane_y_data_rate[id] = rate; -+ } -+ } else { -+ for_each_intel_plane_on_crtc(dev, intel_crtc, intel_plane) { -+ const struct drm_plane_state *pstate = -+ intel_plane->base.state; -+ int id = skl_wm_plane_id(intel_plane); - -- /* packed/uv */ -- rate = skl_plane_relative_data_rate(cstate, pstate, 0); -- cstate->wm.skl.plane_data_rate[id] = rate; -+ /* packed/uv */ -+ rate = skl_plane_relative_data_rate(intel_cstate, -+ pstate, 0); -+ intel_cstate->wm.skl.plane_data_rate[id] = rate; - -- /* y-plane */ -- rate = skl_plane_relative_data_rate(cstate, pstate, 1); -- cstate->wm.skl.plane_y_data_rate[id] = rate; -+ /* y-plane */ -+ rate = skl_plane_relative_data_rate(intel_cstate, -+ pstate, 1); -+ intel_cstate->wm.skl.plane_y_data_rate[id] = rate; -+ } - } - - /* Calculate CRTC's total data rate from cached values */ -@@ -2940,10 +2984,12 @@ skl_get_total_relative_data_rate(struct intel_crtc_state *cstate) - int id = skl_wm_plane_id(intel_plane); - - /* packed/uv */ -- total_data_rate += cstate->wm.skl.plane_data_rate[id]; -- total_data_rate += cstate->wm.skl.plane_y_data_rate[id]; -+ total_data_rate += intel_cstate->wm.skl.plane_data_rate[id]; -+ total_data_rate += intel_cstate->wm.skl.plane_y_data_rate[id]; - } - -+ WARN_ON(cstate->plane_mask && total_data_rate == 0); -+ - return total_data_rate; - } - --- -2.7.4 - diff --git a/0005-drm-i915-gen9-Store-plane-minimum-blocks-in-CRTC-wm-.patch b/0005-drm-i915-gen9-Store-plane-minimum-blocks-in-CRTC-wm-.patch deleted file mode 100644 index 7b1fcb144..000000000 --- a/0005-drm-i915-gen9-Store-plane-minimum-blocks-in-CRTC-wm-.patch +++ /dev/null @@ -1,67 +0,0 @@ -From cd21ce996b94fd149b3487398e5250e9f0cc8811 Mon Sep 17 00:00:00 2001 -From: Fedora Kernel Team -Date: Mon, 20 Jun 2016 12:39:24 +0200 -Subject: [PATCH 05/17] drm/i915/gen9: Store plane minimum blocks in CRTC wm - state (v2) - -Upstream: since drm-intel-next-2016-05-22 -commit 86a2100a8b96594902bb59b90614377df4f64ce0 - -Author: Matt Roper -AuthorDate: Thu May 12 07:05:59 2016 -0700 -Commit: Matt Roper -CommitDate: Fri May 13 07:32:56 2016 -0700 - - drm/i915/gen9: Store plane minimum blocks in CRTC wm state (v2) - - This will eventually allow us to re-use old values without - re-calculating them for unchanged planes (which also helps us avoid - re-grabbing extra plane states). - - v2: - - Drop unnecessary memset's; they were meant for a later patch (which - got reworked anyway to not need them, but were mis-rebased into this - one. (Maarten) - - Cc: Maarten Lankhorst - Signed-off-by: Matt Roper - Reviewed-by: Maarten Lankhorst - Link: http://patchwork.freedesktop.org/patch/msgid/1463061971-19638-6-git-send-email-matthew.d.roper@intel.com ---- - drivers/gpu/drm/i915/intel_drv.h | 4 ++++ - drivers/gpu/drm/i915/intel_pm.c | 4 ++-- - 2 files changed, 6 insertions(+), 2 deletions(-) - -diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h -index 7c00ab6..d246308 100644 ---- a/drivers/gpu/drm/i915/intel_drv.h -+++ b/drivers/gpu/drm/i915/intel_drv.h -@@ -389,6 +389,10 @@ struct intel_crtc_wm_state { - /* cached plane data rate */ - unsigned plane_data_rate[I915_MAX_PLANES]; - unsigned plane_y_data_rate[I915_MAX_PLANES]; -+ -+ /* minimum block allocation */ -+ uint16_t minimum_blocks[I915_MAX_PLANES]; -+ uint16_t minimum_y_blocks[I915_MAX_PLANES]; - } skl; - }; - -diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c -index b863bfc..00db6e9 100644 ---- a/drivers/gpu/drm/i915/intel_pm.c -+++ b/drivers/gpu/drm/i915/intel_pm.c -@@ -3006,8 +3006,8 @@ skl_allocate_pipe_ddb(struct intel_crtc_state *cstate, - enum pipe pipe = intel_crtc->pipe; - struct skl_ddb_entry *alloc = &ddb->pipe[pipe]; - uint16_t alloc_size, start, cursor_blocks; -- uint16_t minimum[I915_MAX_PLANES]; -- uint16_t y_minimum[I915_MAX_PLANES]; -+ uint16_t *minimum = cstate->wm.skl.minimum_blocks; -+ uint16_t *y_minimum = cstate->wm.skl.minimum_y_blocks; - unsigned int total_data_rate; - - skl_ddb_get_pipe_allocation_limits(dev, cstate, config, alloc); --- -2.7.4 - diff --git a/0006-drm-i915-Track-whether-an-atomic-transaction-changes.patch b/0006-drm-i915-Track-whether-an-atomic-transaction-changes.patch deleted file mode 100644 index 7320abf6d..000000000 --- a/0006-drm-i915-Track-whether-an-atomic-transaction-changes.patch +++ /dev/null @@ -1,68 +0,0 @@ -From 00edb23bcefa3ad6931f2a2855fe0801a55523f7 Mon Sep 17 00:00:00 2001 -From: Fedora Kernel Team -Date: Mon, 20 Jun 2016 12:39:40 +0200 -Subject: [PATCH 06/17] drm/i915: Track whether an atomic transaction changes - the active CRTC's - -Upstream: since drm-intel-next-2016-05-22 -commit 8b4a7d0597cd9910d7127ffae6ae91d21853a8a2 - -Author: Matt Roper -AuthorDate: Thu May 12 07:06:00 2016 -0700 -Commit: Matt Roper -CommitDate: Fri May 13 07:33:10 2016 -0700 - - drm/i915: Track whether an atomic transaction changes the active CRTC's - - For the purposes of DDB re-allocation we need to know whether a - transaction changes the list of CRTC's that are active. While - state->modeset could be used for this purpose, that would be slightly - too aggressive since it would lead us to re-allocate the DDB when a - CRTC's mode changes, but not its final active state. - - Signed-off-by: Matt Roper - Reviewed-by: Maarten Lankhorst - Link: http://patchwork.freedesktop.org/patch/msgid/1463061971-19638-7-git-send-email-matthew.d.roper@intel.com ---- - drivers/gpu/drm/i915/intel_display.c | 3 +++ - drivers/gpu/drm/i915/intel_drv.h | 10 ++++++++++ - 2 files changed, 13 insertions(+) - -diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c -index 7d855ba..f53df81 100644 ---- a/drivers/gpu/drm/i915/intel_display.c -+++ b/drivers/gpu/drm/i915/intel_display.c -@@ -13183,6 +13183,9 @@ static int intel_modeset_checks(struct drm_atomic_state *state) - intel_state->active_crtcs |= 1 << i; - else - intel_state->active_crtcs &= ~(1 << i); -+ -+ if (crtc_state->active != crtc->state->active) -+ intel_state->active_pipe_changes |= drm_crtc_mask(crtc); - } - - /* -diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h -index d246308..672ca56 100644 ---- a/drivers/gpu/drm/i915/intel_drv.h -+++ b/drivers/gpu/drm/i915/intel_drv.h -@@ -256,6 +256,16 @@ struct intel_atomic_state { - - bool dpll_set, modeset; - -+ /* -+ * Does this transaction change the pipes that are active? This mask -+ * tracks which CRTC's have changed their active state at the end of -+ * the transaction (not counting the temporary disable during modesets). -+ * This mask should only be non-zero when intel_state->modeset is true, -+ * but the converse is not necessarily true; simply changing a mode may -+ * not flip the final active status of any CRTC's -+ */ -+ unsigned int active_pipe_changes; -+ - unsigned int active_crtcs; - unsigned int min_pixclk[I915_MAX_PIPES]; - --- -2.7.4 - diff --git a/0007-drm-i915-gen9-Allow-skl_allocate_pipe_ddb-to-operate.patch b/0007-drm-i915-gen9-Allow-skl_allocate_pipe_ddb-to-operate.patch deleted file mode 100644 index deb90fb01..000000000 --- a/0007-drm-i915-gen9-Allow-skl_allocate_pipe_ddb-to-operate.patch +++ /dev/null @@ -1,352 +0,0 @@ -From 99dd9c3733696d4a2536b21988c9b1b8f5195c5b Mon Sep 17 00:00:00 2001 -From: Fedora Kernel Team -Date: Mon, 20 Jun 2016 12:40:00 +0200 -Subject: [PATCH 07/17] drm/i915/gen9: Allow skl_allocate_pipe_ddb() to operate - on in-flight state (v3) - -Upstream: since drm-intel-next-2016-05-22 -commit c107acfeb03187873657ccc8af4fc5c704b3626b - -Author: Matt Roper -AuthorDate: Thu May 12 07:06:01 2016 -0700 -Commit: Matt Roper -CommitDate: Fri May 13 07:33:16 2016 -0700 - - drm/i915/gen9: Allow skl_allocate_pipe_ddb() to operate on in-flight state (v3) - - We eventually want to calculate watermark values at atomic 'check' time - instead of atomic 'commit' time so that any requested configurations - that result in impossible watermark requirements are properly rejected. - The first step along this path is to allocate the DDB at atomic 'check' - time. As we perform this transition, allow the main allocation function - to operate successfully on either an in-flight state or an - already-commited state. Once we complete the transition in a future - patch, we'll come back and remove the unnecessary logic for the - already-committed case. - - v2: Rebase/refactor; we should no longer need to grab extra plane states - while allocating the DDB since we can pull cached data rates and - minimum block counts from the CRTC state for any planes that aren't - being modified by this transaction. - - v3: - - Simplify memsets to clear DDB plane entries. (Maarten) - - Drop a redundant memset of plane[pipe][PLANE_CURSOR] that was added - by an earlier Coccinelle patch. (Maarten) - - Assign *num_active at the top of skl_ddb_get_pipe_allocation_limits() - so that no code paths return without setting it. (kbuild robot) - - Cc: Maarten Lankhorst - Signed-off-by: Matt Roper - Reviewed-by: Maarten Lankhorst - Link: http://patchwork.freedesktop.org/patch/msgid/1463061971-19638-8-git-send-email-matthew.d.roper@intel.com ---- - drivers/gpu/drm/i915/i915_drv.h | 6 ++ - drivers/gpu/drm/i915/intel_pm.c | 179 +++++++++++++++++++++++++++++----------- - 2 files changed, 139 insertions(+), 46 deletions(-) - -diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h -index daba7eb..804af6f 100644 ---- a/drivers/gpu/drm/i915/i915_drv.h -+++ b/drivers/gpu/drm/i915/i915_drv.h -@@ -281,6 +281,12 @@ struct i915_hotplug { - &dev->mode_config.plane_list, \ - base.head) - -+#define for_each_intel_plane_mask(dev, intel_plane, plane_mask) \ -+ list_for_each_entry(intel_plane, &dev->mode_config.plane_list, \ -+ base.head) \ -+ for_each_if ((plane_mask) & \ -+ (1 << drm_plane_index(&intel_plane->base))) -+ - #define for_each_intel_plane_on_crtc(dev, intel_crtc, intel_plane) \ - list_for_each_entry(intel_plane, \ - &(dev)->mode_config.plane_list, \ -diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c -index 00db6e9..ee82b1f 100644 ---- a/drivers/gpu/drm/i915/intel_pm.c -+++ b/drivers/gpu/drm/i915/intel_pm.c -@@ -2788,13 +2788,25 @@ skl_wm_plane_id(const struct intel_plane *plane) - static void - skl_ddb_get_pipe_allocation_limits(struct drm_device *dev, - const struct intel_crtc_state *cstate, -- const struct intel_wm_config *config, -- struct skl_ddb_entry *alloc /* out */) -+ struct intel_wm_config *config, -+ struct skl_ddb_entry *alloc, /* out */ -+ int *num_active /* out */) - { -+ struct drm_atomic_state *state = cstate->base.state; -+ struct intel_atomic_state *intel_state = to_intel_atomic_state(state); -+ struct drm_i915_private *dev_priv = to_i915(dev); - struct drm_crtc *for_crtc = cstate->base.crtc; - struct drm_crtc *crtc; - unsigned int pipe_size, ddb_size; - int nth_active_pipe; -+ int pipe = to_intel_crtc(for_crtc)->pipe; -+ -+ if (intel_state && intel_state->active_pipe_changes) -+ *num_active = hweight32(intel_state->active_crtcs); -+ else if (intel_state) -+ *num_active = hweight32(dev_priv->active_crtcs); -+ else -+ *num_active = config->num_pipes_active; - - if (!cstate->base.active) { - alloc->start = 0; -@@ -2809,25 +2821,56 @@ skl_ddb_get_pipe_allocation_limits(struct drm_device *dev, - - ddb_size -= 4; /* 4 blocks for bypass path allocation */ - -- nth_active_pipe = 0; -- for_each_crtc(dev, crtc) { -- if (!to_intel_crtc(crtc)->active) -- continue; -+ /* -+ * FIXME: At the moment we may be called on either in-flight or fully -+ * committed cstate's. Once we fully move DDB allocation in the check -+ * phase, we'll only be called on in-flight states and the 'else' -+ * branch here will go away. -+ * -+ * The 'else' branch is slightly racy here, but it was racy to begin -+ * with; since it's going away soon, no effort is made to address that. -+ */ -+ if (state) { -+ /* -+ * If the state doesn't change the active CRTC's, then there's -+ * no need to recalculate; the existing pipe allocation limits -+ * should remain unchanged. Note that we're safe from racing -+ * commits since any racing commit that changes the active CRTC -+ * list would need to grab _all_ crtc locks, including the one -+ * we currently hold. -+ */ -+ if (!intel_state->active_pipe_changes) { -+ *alloc = dev_priv->wm.skl_hw.ddb.pipe[pipe]; -+ return; -+ } - -- if (crtc == for_crtc) -- break; -+ nth_active_pipe = hweight32(intel_state->active_crtcs & -+ (drm_crtc_mask(for_crtc) - 1)); -+ pipe_size = ddb_size / hweight32(intel_state->active_crtcs); -+ alloc->start = nth_active_pipe * ddb_size / *num_active; -+ alloc->end = alloc->start + pipe_size; -+ } else { -+ nth_active_pipe = 0; -+ for_each_crtc(dev, crtc) { -+ if (!to_intel_crtc(crtc)->active) -+ continue; - -- nth_active_pipe++; -- } -+ if (crtc == for_crtc) -+ break; -+ -+ nth_active_pipe++; -+ } - -- pipe_size = ddb_size / config->num_pipes_active; -- alloc->start = nth_active_pipe * ddb_size / config->num_pipes_active; -- alloc->end = alloc->start + pipe_size; -+ pipe_size = ddb_size / config->num_pipes_active; -+ alloc->start = nth_active_pipe * ddb_size / -+ config->num_pipes_active; -+ alloc->end = alloc->start + pipe_size; -+ } - } - --static unsigned int skl_cursor_allocation(const struct intel_wm_config *config) -+static unsigned int skl_cursor_allocation(int num_active) - { -- if (config->num_pipes_active == 1) -+ if (num_active == 1) - return 32; - - return 8; -@@ -2993,33 +3036,44 @@ skl_get_total_relative_data_rate(struct intel_crtc_state *intel_cstate) - return total_data_rate; - } - --static void -+static int - skl_allocate_pipe_ddb(struct intel_crtc_state *cstate, - struct skl_ddb_allocation *ddb /* out */) - { -+ struct drm_atomic_state *state = cstate->base.state; - struct drm_crtc *crtc = cstate->base.crtc; - struct drm_device *dev = crtc->dev; - struct drm_i915_private *dev_priv = to_i915(dev); - struct intel_wm_config *config = &dev_priv->wm.config; - struct intel_crtc *intel_crtc = to_intel_crtc(crtc); - struct intel_plane *intel_plane; -+ struct drm_plane *plane; -+ struct drm_plane_state *pstate; - enum pipe pipe = intel_crtc->pipe; - struct skl_ddb_entry *alloc = &ddb->pipe[pipe]; - uint16_t alloc_size, start, cursor_blocks; - uint16_t *minimum = cstate->wm.skl.minimum_blocks; - uint16_t *y_minimum = cstate->wm.skl.minimum_y_blocks; - unsigned int total_data_rate; -+ int num_active; -+ int id, i; -+ -+ if (!cstate->base.active) { -+ ddb->pipe[pipe].start = ddb->pipe[pipe].end = 0; -+ memset(ddb->plane[pipe], 0, sizeof(ddb->plane[pipe])); -+ memset(ddb->y_plane[pipe], 0, sizeof(ddb->y_plane[pipe])); -+ return 0; -+ } - -- skl_ddb_get_pipe_allocation_limits(dev, cstate, config, alloc); -+ skl_ddb_get_pipe_allocation_limits(dev, cstate, config, alloc, -+ &num_active); - alloc_size = skl_ddb_entry_size(alloc); - if (alloc_size == 0) { - memset(ddb->plane[pipe], 0, sizeof(ddb->plane[pipe])); -- memset(&ddb->plane[pipe][PLANE_CURSOR], 0, -- sizeof(ddb->plane[pipe][PLANE_CURSOR])); -- return; -+ return 0; - } - -- cursor_blocks = skl_cursor_allocation(config); -+ cursor_blocks = skl_cursor_allocation(num_active); - ddb->plane[pipe][PLANE_CURSOR].start = alloc->end - cursor_blocks; - ddb->plane[pipe][PLANE_CURSOR].end = alloc->end; - -@@ -3027,21 +3081,55 @@ skl_allocate_pipe_ddb(struct intel_crtc_state *cstate, - alloc->end -= cursor_blocks; - - /* 1. Allocate the mininum required blocks for each active plane */ -- for_each_intel_plane_on_crtc(dev, intel_crtc, intel_plane) { -- struct drm_plane *plane = &intel_plane->base; -- struct drm_framebuffer *fb = plane->state->fb; -- int id = skl_wm_plane_id(intel_plane); -+ /* -+ * TODO: Remove support for already-committed state once we -+ * only allocate DDB on in-flight states. -+ */ -+ if (state) { -+ for_each_plane_in_state(state, plane, pstate, i) { -+ intel_plane = to_intel_plane(plane); -+ id = skl_wm_plane_id(intel_plane); - -- if (!to_intel_plane_state(plane->state)->visible) -- continue; -+ if (intel_plane->pipe != pipe) -+ continue; - -- if (plane->type == DRM_PLANE_TYPE_CURSOR) -- continue; -+ if (!to_intel_plane_state(pstate)->visible) { -+ minimum[id] = 0; -+ y_minimum[id] = 0; -+ continue; -+ } -+ if (plane->type == DRM_PLANE_TYPE_CURSOR) { -+ minimum[id] = 0; -+ y_minimum[id] = 0; -+ continue; -+ } - -- minimum[id] = 8; -- alloc_size -= minimum[id]; -- y_minimum[id] = (fb->pixel_format == DRM_FORMAT_NV12) ? 8 : 0; -- alloc_size -= y_minimum[id]; -+ minimum[id] = 8; -+ if (pstate->fb->pixel_format == DRM_FORMAT_NV12) -+ y_minimum[id] = 8; -+ else -+ y_minimum[id] = 0; -+ } -+ } else { -+ for_each_intel_plane_on_crtc(dev, intel_crtc, intel_plane) { -+ struct drm_plane *plane = &intel_plane->base; -+ struct drm_framebuffer *fb = plane->state->fb; -+ int id = skl_wm_plane_id(intel_plane); -+ -+ if (!to_intel_plane_state(plane->state)->visible) -+ continue; -+ -+ if (plane->type == DRM_PLANE_TYPE_CURSOR) -+ continue; -+ -+ minimum[id] = 8; -+ y_minimum[id] = (fb->pixel_format == DRM_FORMAT_NV12) ? 8 : 0; -+ } -+ } -+ -+ for (i = 0; i < PLANE_CURSOR; i++) { -+ alloc_size -= minimum[i]; -+ alloc_size -= y_minimum[i]; - } - - /* -@@ -3052,21 +3140,14 @@ skl_allocate_pipe_ddb(struct intel_crtc_state *cstate, - */ - total_data_rate = skl_get_total_relative_data_rate(cstate); - if (total_data_rate == 0) -- return; -+ return 0; - - start = alloc->start; - for_each_intel_plane_on_crtc(dev, intel_crtc, intel_plane) { -- struct drm_plane *plane = &intel_plane->base; -- struct drm_plane_state *pstate = intel_plane->base.state; - unsigned int data_rate, y_data_rate; - uint16_t plane_blocks, y_plane_blocks = 0; - int id = skl_wm_plane_id(intel_plane); - -- if (!to_intel_plane_state(pstate)->visible) -- continue; -- if (plane->type == DRM_PLANE_TYPE_CURSOR) -- continue; -- - data_rate = cstate->wm.skl.plane_data_rate[id]; - - /* -@@ -3078,8 +3159,11 @@ skl_allocate_pipe_ddb(struct intel_crtc_state *cstate, - plane_blocks += div_u64((uint64_t)alloc_size * data_rate, - total_data_rate); - -- ddb->plane[pipe][id].start = start; -- ddb->plane[pipe][id].end = start + plane_blocks; -+ /* Leave disabled planes at (0,0) */ -+ if (data_rate) { -+ ddb->plane[pipe][id].start = start; -+ ddb->plane[pipe][id].end = start + plane_blocks; -+ } - - start += plane_blocks; - -@@ -3092,12 +3176,15 @@ skl_allocate_pipe_ddb(struct intel_crtc_state *cstate, - y_plane_blocks += div_u64((uint64_t)alloc_size * y_data_rate, - total_data_rate); - -- ddb->y_plane[pipe][id].start = start; -- ddb->y_plane[pipe][id].end = start + y_plane_blocks; -+ if (y_data_rate) { -+ ddb->y_plane[pipe][id].start = start; -+ ddb->y_plane[pipe][id].end = start + y_plane_blocks; -+ } - - start += y_plane_blocks; - } - -+ return 0; - } - - static uint32_t skl_pipe_pixel_rate(const struct intel_crtc_state *config) -@@ -3588,7 +3675,7 @@ static bool skl_update_pipe_wm(struct drm_crtc *crtc, - struct intel_crtc *intel_crtc = to_intel_crtc(crtc); - struct intel_crtc_state *cstate = to_intel_crtc_state(crtc->state); - -- skl_allocate_pipe_ddb(cstate, ddb); -+ WARN_ON(skl_allocate_pipe_ddb(cstate, ddb) != 0); - skl_build_pipe_wm(cstate, ddb, pipe_wm); - - if (!memcmp(&intel_crtc->wm.active.skl, pipe_wm, sizeof(*pipe_wm))) --- -2.7.4 - diff --git a/0008-drm-i915-Add-distrust_bios_wm-flag-to-dev_priv-v2.patch b/0008-drm-i915-Add-distrust_bios_wm-flag-to-dev_priv-v2.patch deleted file mode 100644 index 9131a60da..000000000 --- a/0008-drm-i915-Add-distrust_bios_wm-flag-to-dev_priv-v2.patch +++ /dev/null @@ -1,84 +0,0 @@ -From 7207eecfcb3095442bce30227b551003edc7b908 Mon Sep 17 00:00:00 2001 -From: Matt Roper -Date: Thu, 12 May 2016 07:06:02 -0700 -Subject: [PATCH 08/17] drm/i915: Add distrust_bios_wm flag to dev_priv (v2) - -SKL-style platforms can't fully trust the watermark/DDB settings -programmed by the BIOS and need to do extra sanitization on their first -atomic update. Add a flag to dev_priv that is set during hardware -readout and cleared at the end of the first commit. - -Note that for the somewhat common case where everything is turned off -when the driver starts up, we don't need to bother with a recompute...we -know exactly what the DDB should be (all zero's) so just setup the DDB -directly in that case. - -v2: - - Move clearing of distrust_bios_wm up below the swap_state call since - it's a more natural / self-explanatory location. (Maarten) - - Use dev_priv->active_crtcs to test whether any CRTC's are turned on - during HW WM readout rather than trying to count the active CRTC's - again ourselves. (Maarten) - -Cc: Maarten Lankhorst -Signed-off-by: Matt Roper -Reviewed-by: Maarten Lankhorst -Link: http://patchwork.freedesktop.org/patch/msgid/1463061971-19638-9-git-send-email-matthew.d.roper@intel.com ---- - drivers/gpu/drm/i915/i915_drv.h | 7 +++++++ - drivers/gpu/drm/i915/intel_display.c | 1 + - drivers/gpu/drm/i915/intel_pm.c | 8 ++++++++ - 3 files changed, 16 insertions(+) - -diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h -index 611c128..e21960d 100644 ---- a/drivers/gpu/drm/i915/i915_drv.h -+++ b/drivers/gpu/drm/i915/i915_drv.h -@@ -1981,6 +1981,13 @@ struct drm_i915_private { - * cstate->wm.need_postvbl_update. - */ - struct mutex wm_mutex; -+ -+ /* -+ * Set during HW readout of watermarks/DDB. Some platforms -+ * need to know when we're still using BIOS-provided values -+ * (which we don't fully trust). -+ */ -+ bool distrust_bios_wm; - } wm; - - struct i915_runtime_pm pm; -diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c -index f26d1c5..a9d2e30 100644 ---- a/drivers/gpu/drm/i915/intel_display.c -+++ b/drivers/gpu/drm/i915/intel_display.c -@@ -13621,6 +13621,7 @@ static int intel_atomic_commit(struct drm_device *dev, - - drm_atomic_helper_swap_state(dev, state); - dev_priv->wm.config = intel_state->wm_config; -+ dev_priv->wm.distrust_bios_wm = false; - intel_shared_dpll_commit(state); - - if (intel_state->modeset) { -diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c -index f009d43..a49faa7 100644 ---- a/drivers/gpu/drm/i915/intel_pm.c -+++ b/drivers/gpu/drm/i915/intel_pm.c -@@ -4026,6 +4026,14 @@ void skl_wm_get_hw_state(struct drm_device *dev) - list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) - skl_pipe_wm_get_hw_state(crtc); - -+ if (dev_priv->active_crtcs) { -+ /* Fully recompute DDB on first atomic commit */ -+ dev_priv->wm.distrust_bios_wm = true; -+ } else { -+ /* Easy/common case; just sanitize DDB now if everything off */ -+ memset(ddb, 0, sizeof(*ddb)); -+ } -+ - /* Calculate plane data rates */ - for_each_intel_crtc(dev, intel_crtc) { - struct intel_crtc_state *cstate = intel_crtc->config; --- -2.7.4 - diff --git a/0009-drm-i915-gen9-Compute-DDB-allocation-at-atomic-check.patch b/0009-drm-i915-gen9-Compute-DDB-allocation-at-atomic-check.patch deleted file mode 100644 index 80cdacf9a..000000000 --- a/0009-drm-i915-gen9-Compute-DDB-allocation-at-atomic-check.patch +++ /dev/null @@ -1,244 +0,0 @@ -From fbf53d8f1b7d1bcea1411f1f2cd0df6a6cc95332 Mon Sep 17 00:00:00 2001 -From: Matt Roper -Date: Thu, 12 May 2016 07:06:03 -0700 -Subject: [PATCH 09/17] drm/i915/gen9: Compute DDB allocation at atomic check - time (v4) - -Calculate the DDB blocks needed to satisfy the current atomic -transaction at atomic check time. This is a prerequisite to calculating -SKL watermarks during the 'check' phase and rejecting any configurations -that we can't find valid watermarks for. - -Due to the nature of DDB allocation, it's possible for the addition of a -new CRTC to make the watermark configuration already in use on another, -unchanged CRTC become invalid. A change in which CRTC's are active -triggers a recompute of the entire DDB, which unfortunately means we -need to disallow any other atomic commits from racing with such an -update. If the active CRTC's change, we need to grab the lock on all -CRTC's and run all CRTC's through their 'check' handler to recompute and -re-check their per-CRTC DDB allocations. - -Note that with this patch we only compute the DDB allocation but we -don't actually use the computed values during watermark programming yet. -For ease of review/testing/bisecting, we still recompute the DDB at -watermark programming time and just WARN() if it doesn't match the -precomputed values. A future patch will switch over to using the -precomputed values once we're sure they're being properly computed. - -Another clarifying note: DDB allocation itself shouldn't ever fail with -the algorithm we use today (i.e., we have enough DDB blocks on BXT to -support the minimum needs of the worst-case scenario of every pipe/plane -enabled at full size). However the watermarks calculations based on the -DDB may fail and we'll be moving those to the atomic check as well in -future patches. - -v2: - - Skip DDB calculations in the rare case where our transaction doesn't - actually touch any CRTC's at all. Assuming at least one CRTC state - is present in our transaction, then it means we can't race with any - transactions that would update dev_priv->active_crtcs (which requires - _all_ CRTC locks). - -v3: - - Also calculate DDB during initial hw readout, to prevent using - incorrect bios values. (Maarten) - -v4: - - Use new distrust_bios_wm flag instead of skip_initial_wm (which was - never actually set). - - Set intel_state->active_pipe_changes instead of just realloc_pipes - -Cc: Maarten Lankhorst -Cc: Lyude Paul -Cc: Radhakrishna Sripada -Signed-off-by: Matt Roper -Signed-off-by: Maarten Lankhorst -Reviewed-by: Maarten Lankhorst -Link: http://patchwork.freedesktop.org/patch/msgid/1463061971-19638-10-git-send-email-matthew.d.roper@intel.com ---- - drivers/gpu/drm/i915/i915_drv.h | 5 +++ - drivers/gpu/drm/i915/intel_display.c | 18 ++++++++ - drivers/gpu/drm/i915/intel_drv.h | 3 ++ - drivers/gpu/drm/i915/intel_pm.c | 79 ++++++++++++++++++++++++++++++++++++ - 4 files changed, 105 insertions(+) - -diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h -index e21960d..b908a41 100644 ---- a/drivers/gpu/drm/i915/i915_drv.h -+++ b/drivers/gpu/drm/i915/i915_drv.h -@@ -339,6 +339,10 @@ struct i915_hotplug { - #define for_each_intel_crtc(dev, intel_crtc) \ - list_for_each_entry(intel_crtc, &dev->mode_config.crtc_list, base.head) - -+#define for_each_intel_crtc_mask(dev, intel_crtc, crtc_mask) \ -+ list_for_each_entry(intel_crtc, &dev->mode_config.crtc_list, base.head) \ -+ for_each_if ((crtc_mask) & (1 << drm_crtc_index(&intel_crtc->base))) -+ - #define for_each_intel_encoder(dev, intel_encoder) \ - list_for_each_entry(intel_encoder, \ - &(dev)->mode_config.encoder_list, \ -@@ -594,6 +598,7 @@ struct drm_i915_display_funcs { - struct intel_crtc_state *newstate); - void (*initial_watermarks)(struct intel_crtc_state *cstate); - void (*optimize_watermarks)(struct intel_crtc_state *cstate); -+ int (*compute_global_watermarks)(struct drm_atomic_state *state); - void (*update_wm)(struct drm_crtc *crtc); - int (*modeset_calc_cdclk)(struct drm_atomic_state *state); - void (*modeset_commit_cdclk)(struct drm_atomic_state *state); -diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c -index a9d2e30..ecad0ef 100644 ---- a/drivers/gpu/drm/i915/intel_display.c -+++ b/drivers/gpu/drm/i915/intel_display.c -@@ -13342,6 +13342,7 @@ static int intel_modeset_checks(struct drm_atomic_state *state) - static void calc_watermark_data(struct drm_atomic_state *state) - { - struct drm_device *dev = state->dev; -+ struct drm_i915_private *dev_priv = to_i915(dev); - struct intel_atomic_state *intel_state = to_intel_atomic_state(state); - struct drm_crtc *crtc; - struct drm_crtc_state *cstate; -@@ -13371,6 +13372,10 @@ static void calc_watermark_data(struct drm_atomic_state *state) - pstate->crtc_h != pstate->src_h >> 16) - intel_state->wm_config.sprites_scaled = true; - } -+ -+ /* Is there platform-specific watermark information to calculate? */ -+ if (dev_priv->display.compute_global_watermarks) -+ dev_priv->display.compute_global_watermarks(state); - } - - /** -@@ -13739,6 +13744,19 @@ static int intel_atomic_commit(struct drm_device *dev, - intel_modeset_verify_crtc(crtc, old_crtc_state, crtc->state); - } - -+ /* -+ * Temporary sanity check: make sure our pre-computed DDB matches the -+ * one we actually wind up programming. -+ * -+ * Not a great place to put this, but the easiest place we have access -+ * to both the pre-computed and final DDB's; we'll be removing this -+ * check in the next patch anyway. -+ */ -+ WARN(IS_GEN9(dev) && -+ memcmp(&intel_state->ddb, &dev_priv->wm.skl_results.ddb, -+ sizeof(intel_state->ddb)), -+ "Pre-computed DDB does not match final DDB!\n"); -+ - if (intel_state->modeset) - intel_display_power_put(dev_priv, POWER_DOMAIN_MODESET); - -diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h -index d19e83e..2218290 100644 ---- a/drivers/gpu/drm/i915/intel_drv.h -+++ b/drivers/gpu/drm/i915/intel_drv.h -@@ -312,6 +312,9 @@ struct intel_atomic_state { - * don't bother calculating intermediate watermarks. - */ - bool skip_intermediate_wm; -+ -+ /* Gen9+ only */ -+ struct skl_ddb_allocation ddb; - }; - - struct intel_plane_state { -diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c -index a49faa7..cfa4f80 100644 ---- a/drivers/gpu/drm/i915/intel_pm.c -+++ b/drivers/gpu/drm/i915/intel_pm.c -@@ -3812,6 +3812,84 @@ static void skl_clear_wm(struct skl_wm_values *watermarks, enum pipe pipe) - - } - -+static int -+skl_compute_ddb(struct drm_atomic_state *state) -+{ -+ struct drm_device *dev = state->dev; -+ struct drm_i915_private *dev_priv = to_i915(dev); -+ struct intel_atomic_state *intel_state = to_intel_atomic_state(state); -+ struct intel_crtc *intel_crtc; -+ unsigned realloc_pipes = dev_priv->active_crtcs; -+ int ret; -+ -+ /* -+ * If this is our first atomic update following hardware readout, -+ * we can't trust the DDB that the BIOS programmed for us. Let's -+ * pretend that all pipes switched active status so that we'll -+ * ensure a full DDB recompute. -+ */ -+ if (dev_priv->wm.distrust_bios_wm) -+ intel_state->active_pipe_changes = ~0; -+ -+ /* -+ * If the modeset changes which CRTC's are active, we need to -+ * recompute the DDB allocation for *all* active pipes, even -+ * those that weren't otherwise being modified in any way by this -+ * atomic commit. Due to the shrinking of the per-pipe allocations -+ * when new active CRTC's are added, it's possible for a pipe that -+ * we were already using and aren't changing at all here to suddenly -+ * become invalid if its DDB needs exceeds its new allocation. -+ * -+ * Note that if we wind up doing a full DDB recompute, we can't let -+ * any other display updates race with this transaction, so we need -+ * to grab the lock on *all* CRTC's. -+ */ -+ if (intel_state->active_pipe_changes) -+ realloc_pipes = ~0; -+ -+ for_each_intel_crtc_mask(dev, intel_crtc, realloc_pipes) { -+ struct intel_crtc_state *cstate; -+ -+ cstate = intel_atomic_get_crtc_state(state, intel_crtc); -+ if (IS_ERR(cstate)) -+ return PTR_ERR(cstate); -+ -+ ret = skl_allocate_pipe_ddb(cstate, &intel_state->ddb); -+ if (ret) -+ return ret; -+ } -+ -+ return 0; -+} -+ -+static int -+skl_compute_wm(struct drm_atomic_state *state) -+{ -+ struct drm_crtc *crtc; -+ struct drm_crtc_state *cstate; -+ int ret, i; -+ bool changed = false; -+ -+ /* -+ * If this transaction isn't actually touching any CRTC's, don't -+ * bother with watermark calculation. Note that if we pass this -+ * test, we're guaranteed to hold at least one CRTC state mutex, -+ * which means we can safely use values like dev_priv->active_crtcs -+ * since any racing commits that want to update them would need to -+ * hold _all_ CRTC state mutexes. -+ */ -+ for_each_crtc_in_state(state, crtc, cstate, i) -+ changed = true; -+ if (!changed) -+ return 0; -+ -+ ret = skl_compute_ddb(state); -+ if (ret) -+ return ret; -+ -+ return 0; -+} -+ - static void skl_update_wm(struct drm_crtc *crtc) - { - struct intel_crtc *intel_crtc = to_intel_crtc(crtc); -@@ -7384,6 +7462,7 @@ void intel_init_pm(struct drm_device *dev) - if (INTEL_INFO(dev)->gen >= 9) { - skl_setup_wm_latency(dev); - dev_priv->display.update_wm = skl_update_wm; -+ dev_priv->display.compute_global_watermarks = skl_compute_wm; - } else if (HAS_PCH_SPLIT(dev)) { - ilk_setup_wm_latency(dev); - --- -2.7.4 - diff --git a/0010-drm-i915-gen9-Drop-re-allocation-of-DDB-at-atomic-co.patch b/0010-drm-i915-gen9-Drop-re-allocation-of-DDB-at-atomic-co.patch deleted file mode 100644 index 26f7e750c..000000000 --- a/0010-drm-i915-gen9-Drop-re-allocation-of-DDB-at-atomic-co.patch +++ /dev/null @@ -1,379 +0,0 @@ -From a9abdc6767855e1668301a1dcc4b5fa8bed1ddfa Mon Sep 17 00:00:00 2001 -From: Matt Roper -Date: Thu, 12 May 2016 07:06:04 -0700 -Subject: [PATCH 10/17] drm/i915/gen9: Drop re-allocation of DDB at atomic - commit (v2) - -Now that we're properly pre-allocating the DDB during the atomic check -phase and we trust that the allocation is appropriate, let's actually -use the allocation computed and not duplicate that work during the -commit phase. - -v2: - - Significant rebasing now that we can use cached data rates and - minimum block allocations to avoid grabbing additional plane states. - -Signed-off-by: Matt Roper -Reviewed-by: Maarten Lankhorst -Link: http://patchwork.freedesktop.org/patch/msgid/1463061971-19638-11-git-send-email-matthew.d.roper@intel.com ---- - drivers/gpu/drm/i915/intel_display.c | 14 +-- - drivers/gpu/drm/i915/intel_pm.c | 224 +++++++++++------------------------ - 2 files changed, 67 insertions(+), 171 deletions(-) - -diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c -index ecad0ef..4db10d7 100644 ---- a/drivers/gpu/drm/i915/intel_display.c -+++ b/drivers/gpu/drm/i915/intel_display.c -@@ -13627,6 +13627,7 @@ static int intel_atomic_commit(struct drm_device *dev, - drm_atomic_helper_swap_state(dev, state); - dev_priv->wm.config = intel_state->wm_config; - dev_priv->wm.distrust_bios_wm = false; -+ dev_priv->wm.skl_results.ddb = intel_state->ddb; - intel_shared_dpll_commit(state); - - if (intel_state->modeset) { -@@ -13744,19 +13745,6 @@ static int intel_atomic_commit(struct drm_device *dev, - intel_modeset_verify_crtc(crtc, old_crtc_state, crtc->state); - } - -- /* -- * Temporary sanity check: make sure our pre-computed DDB matches the -- * one we actually wind up programming. -- * -- * Not a great place to put this, but the easiest place we have access -- * to both the pre-computed and final DDB's; we'll be removing this -- * check in the next patch anyway. -- */ -- WARN(IS_GEN9(dev) && -- memcmp(&intel_state->ddb, &dev_priv->wm.skl_results.ddb, -- sizeof(intel_state->ddb)), -- "Pre-computed DDB does not match final DDB!\n"); -- - if (intel_state->modeset) - intel_display_power_put(dev_priv, POWER_DOMAIN_MODESET); - -diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c -index cfa4f80..0f0d4e1 100644 ---- a/drivers/gpu/drm/i915/intel_pm.c -+++ b/drivers/gpu/drm/i915/intel_pm.c -@@ -2849,7 +2849,6 @@ skl_wm_plane_id(const struct intel_plane *plane) - static void - skl_ddb_get_pipe_allocation_limits(struct drm_device *dev, - const struct intel_crtc_state *cstate, -- struct intel_wm_config *config, - struct skl_ddb_entry *alloc, /* out */ - int *num_active /* out */) - { -@@ -2857,24 +2856,22 @@ skl_ddb_get_pipe_allocation_limits(struct drm_device *dev, - struct intel_atomic_state *intel_state = to_intel_atomic_state(state); - struct drm_i915_private *dev_priv = to_i915(dev); - struct drm_crtc *for_crtc = cstate->base.crtc; -- struct drm_crtc *crtc; - unsigned int pipe_size, ddb_size; - int nth_active_pipe; - int pipe = to_intel_crtc(for_crtc)->pipe; - -- if (intel_state && intel_state->active_pipe_changes) -- *num_active = hweight32(intel_state->active_crtcs); -- else if (intel_state) -- *num_active = hweight32(dev_priv->active_crtcs); -- else -- *num_active = config->num_pipes_active; -- -- if (!cstate->base.active) { -+ if (WARN_ON(!state) || !cstate->base.active) { - alloc->start = 0; - alloc->end = 0; -+ *num_active = hweight32(dev_priv->active_crtcs); - return; - } - -+ if (intel_state->active_pipe_changes) -+ *num_active = hweight32(intel_state->active_crtcs); -+ else -+ *num_active = hweight32(dev_priv->active_crtcs); -+ - if (IS_BROXTON(dev)) - ddb_size = BXT_DDB_SIZE; - else -@@ -2883,50 +2880,23 @@ skl_ddb_get_pipe_allocation_limits(struct drm_device *dev, - ddb_size -= 4; /* 4 blocks for bypass path allocation */ - - /* -- * FIXME: At the moment we may be called on either in-flight or fully -- * committed cstate's. Once we fully move DDB allocation in the check -- * phase, we'll only be called on in-flight states and the 'else' -- * branch here will go away. -- * -- * The 'else' branch is slightly racy here, but it was racy to begin -- * with; since it's going away soon, no effort is made to address that. -+ * If the state doesn't change the active CRTC's, then there's -+ * no need to recalculate; the existing pipe allocation limits -+ * should remain unchanged. Note that we're safe from racing -+ * commits since any racing commit that changes the active CRTC -+ * list would need to grab _all_ crtc locks, including the one -+ * we currently hold. - */ -- if (state) { -- /* -- * If the state doesn't change the active CRTC's, then there's -- * no need to recalculate; the existing pipe allocation limits -- * should remain unchanged. Note that we're safe from racing -- * commits since any racing commit that changes the active CRTC -- * list would need to grab _all_ crtc locks, including the one -- * we currently hold. -- */ -- if (!intel_state->active_pipe_changes) { -- *alloc = dev_priv->wm.skl_hw.ddb.pipe[pipe]; -- return; -- } -- -- nth_active_pipe = hweight32(intel_state->active_crtcs & -- (drm_crtc_mask(for_crtc) - 1)); -- pipe_size = ddb_size / hweight32(intel_state->active_crtcs); -- alloc->start = nth_active_pipe * ddb_size / *num_active; -- alloc->end = alloc->start + pipe_size; -- } else { -- nth_active_pipe = 0; -- for_each_crtc(dev, crtc) { -- if (!to_intel_crtc(crtc)->active) -- continue; -- -- if (crtc == for_crtc) -- break; -- -- nth_active_pipe++; -- } -- -- pipe_size = ddb_size / config->num_pipes_active; -- alloc->start = nth_active_pipe * ddb_size / -- config->num_pipes_active; -- alloc->end = alloc->start + pipe_size; -+ if (!intel_state->active_pipe_changes) { -+ *alloc = dev_priv->wm.skl_hw.ddb.pipe[pipe]; -+ return; - } -+ -+ nth_active_pipe = hweight32(intel_state->active_crtcs & -+ (drm_crtc_mask(for_crtc) - 1)); -+ pipe_size = ddb_size / hweight32(intel_state->active_crtcs); -+ alloc->start = nth_active_pipe * ddb_size / *num_active; -+ alloc->end = alloc->start + pipe_size; - } - - static unsigned int skl_cursor_allocation(int num_active) -@@ -3025,62 +2995,33 @@ skl_get_total_relative_data_rate(struct intel_crtc_state *intel_cstate) - struct drm_crtc *crtc = cstate->crtc; - struct drm_device *dev = crtc->dev; - struct intel_crtc *intel_crtc = to_intel_crtc(crtc); -+ const struct drm_plane *plane; - const struct intel_plane *intel_plane; -+ struct drm_plane_state *pstate; - unsigned int rate, total_data_rate = 0; - int id; -+ int i; -+ -+ if (WARN_ON(!state)) -+ return 0; - - /* Calculate and cache data rate for each plane */ -- /* -- * FIXME: At the moment this function can be called on either an -- * in-flight or a committed state object. If it's in-flight then we -- * only want to re-calculate the plane data rate for planes that are -- * part of the transaction (i.e., we don't want to grab any additional -- * plane states if we don't have to). If we're operating on committed -- * state, we'll just go ahead and recalculate the plane data rate for -- * all planes. -- * -- * Once we finish moving our DDB allocation to the atomic check phase, -- * we'll only be calling this function on in-flight state objects, so -- * the 'else' branch here will go away. -- */ -- if (state) { -- struct drm_plane *plane; -- struct drm_plane_state *pstate; -- int i; -- -- for_each_plane_in_state(state, plane, pstate, i) { -- intel_plane = to_intel_plane(plane); -- id = skl_wm_plane_id(intel_plane); -- -- if (intel_plane->pipe != intel_crtc->pipe) -- continue; -- -- /* packed/uv */ -- rate = skl_plane_relative_data_rate(intel_cstate, -- pstate, 0); -- intel_cstate->wm.skl.plane_data_rate[id] = rate; -- -- /* y-plane */ -- rate = skl_plane_relative_data_rate(intel_cstate, -- pstate, 1); -- intel_cstate->wm.skl.plane_y_data_rate[id] = rate; -- } -- } else { -- for_each_intel_plane_on_crtc(dev, intel_crtc, intel_plane) { -- const struct drm_plane_state *pstate = -- intel_plane->base.state; -- int id = skl_wm_plane_id(intel_plane); -+ for_each_plane_in_state(state, plane, pstate, i) { -+ id = skl_wm_plane_id(to_intel_plane(plane)); -+ intel_plane = to_intel_plane(plane); - -- /* packed/uv */ -- rate = skl_plane_relative_data_rate(intel_cstate, -- pstate, 0); -- intel_cstate->wm.skl.plane_data_rate[id] = rate; -+ if (intel_plane->pipe != intel_crtc->pipe) -+ continue; - -- /* y-plane */ -- rate = skl_plane_relative_data_rate(intel_cstate, -- pstate, 1); -- intel_cstate->wm.skl.plane_y_data_rate[id] = rate; -- } -+ /* packed/uv */ -+ rate = skl_plane_relative_data_rate(intel_cstate, -+ pstate, 0); -+ intel_cstate->wm.skl.plane_data_rate[id] = rate; -+ -+ /* y-plane */ -+ rate = skl_plane_relative_data_rate(intel_cstate, -+ pstate, 1); -+ intel_cstate->wm.skl.plane_y_data_rate[id] = rate; - } - - /* Calculate CRTC's total data rate from cached values */ -@@ -3104,8 +3045,6 @@ skl_allocate_pipe_ddb(struct intel_crtc_state *cstate, - struct drm_atomic_state *state = cstate->base.state; - struct drm_crtc *crtc = cstate->base.crtc; - struct drm_device *dev = crtc->dev; -- struct drm_i915_private *dev_priv = to_i915(dev); -- struct intel_wm_config *config = &dev_priv->wm.config; - struct intel_crtc *intel_crtc = to_intel_crtc(crtc); - struct intel_plane *intel_plane; - struct drm_plane *plane; -@@ -3119,6 +3058,9 @@ skl_allocate_pipe_ddb(struct intel_crtc_state *cstate, - int num_active; - int id, i; - -+ if (WARN_ON(!state)) -+ return 0; -+ - if (!cstate->base.active) { - ddb->pipe[pipe].start = ddb->pipe[pipe].end = 0; - memset(ddb->plane[pipe], 0, sizeof(ddb->plane[pipe])); -@@ -3126,8 +3068,7 @@ skl_allocate_pipe_ddb(struct intel_crtc_state *cstate, - return 0; - } - -- skl_ddb_get_pipe_allocation_limits(dev, cstate, config, alloc, -- &num_active); -+ skl_ddb_get_pipe_allocation_limits(dev, cstate, alloc, &num_active); - alloc_size = skl_ddb_entry_size(alloc); - if (alloc_size == 0) { - memset(ddb->plane[pipe], 0, sizeof(ddb->plane[pipe])); -@@ -3139,53 +3080,31 @@ skl_allocate_pipe_ddb(struct intel_crtc_state *cstate, - ddb->plane[pipe][PLANE_CURSOR].end = alloc->end; - - alloc_size -= cursor_blocks; -- alloc->end -= cursor_blocks; - - /* 1. Allocate the mininum required blocks for each active plane */ -- /* -- * TODO: Remove support for already-committed state once we -- * only allocate DDB on in-flight states. -- */ -- if (state) { -- for_each_plane_in_state(state, plane, pstate, i) { -- intel_plane = to_intel_plane(plane); -- id = skl_wm_plane_id(intel_plane); -- -- if (intel_plane->pipe != pipe) -- continue; -- -- if (!to_intel_plane_state(pstate)->visible) { -- minimum[id] = 0; -- y_minimum[id] = 0; -- continue; -- } -- if (plane->type == DRM_PLANE_TYPE_CURSOR) { -- minimum[id] = 0; -- y_minimum[id] = 0; -- continue; -- } -- -- minimum[id] = 8; -- if (pstate->fb->pixel_format == DRM_FORMAT_NV12) -- y_minimum[id] = 8; -- else -- y_minimum[id] = 0; -- } -- } else { -- for_each_intel_plane_on_crtc(dev, intel_crtc, intel_plane) { -- struct drm_plane *plane = &intel_plane->base; -- struct drm_framebuffer *fb = plane->state->fb; -- int id = skl_wm_plane_id(intel_plane); -- -- if (!to_intel_plane_state(plane->state)->visible) -- continue; -+ for_each_plane_in_state(state, plane, pstate, i) { -+ intel_plane = to_intel_plane(plane); -+ id = skl_wm_plane_id(intel_plane); - -- if (plane->type == DRM_PLANE_TYPE_CURSOR) -- continue; -+ if (intel_plane->pipe != pipe) -+ continue; - -- minimum[id] = 8; -- y_minimum[id] = (fb->pixel_format == DRM_FORMAT_NV12) ? 8 : 0; -+ if (!to_intel_plane_state(pstate)->visible) { -+ minimum[id] = 0; -+ y_minimum[id] = 0; -+ continue; -+ } -+ if (plane->type == DRM_PLANE_TYPE_CURSOR) { -+ minimum[id] = 0; -+ y_minimum[id] = 0; -+ continue; - } -+ -+ minimum[id] = 8; -+ if (pstate->fb->pixel_format == DRM_FORMAT_NV12) -+ y_minimum[id] = 8; -+ else -+ y_minimum[id] = 0; - } - - for (i = 0; i < PLANE_CURSOR; i++) { -@@ -3736,7 +3655,6 @@ static bool skl_update_pipe_wm(struct drm_crtc *crtc, - struct intel_crtc *intel_crtc = to_intel_crtc(crtc); - struct intel_crtc_state *cstate = to_intel_crtc_state(crtc->state); - -- WARN_ON(skl_allocate_pipe_ddb(cstate, ddb) != 0); - skl_build_pipe_wm(cstate, ddb, pipe_wm); - - if (!memcmp(&intel_crtc->wm.active.skl, pipe_wm, sizeof(*pipe_wm))) -@@ -3800,16 +3718,6 @@ static void skl_clear_wm(struct skl_wm_values *watermarks, enum pipe pipe) - memset(watermarks->plane_trans[pipe], - 0, sizeof(uint32_t) * I915_MAX_PLANES); - watermarks->plane_trans[pipe][PLANE_CURSOR] = 0; -- -- /* Clear ddb entries for pipe */ -- memset(&watermarks->ddb.pipe[pipe], 0, sizeof(struct skl_ddb_entry)); -- memset(&watermarks->ddb.plane[pipe], 0, -- sizeof(struct skl_ddb_entry) * I915_MAX_PLANES); -- memset(&watermarks->ddb.y_plane[pipe], 0, -- sizeof(struct skl_ddb_entry) * I915_MAX_PLANES); -- memset(&watermarks->ddb.plane[pipe][PLANE_CURSOR], 0, -- sizeof(struct skl_ddb_entry)); -- - } - - static int --- -2.7.4 - diff --git a/0011-drm-i915-gen9-Calculate-plane-WM-s-from-state.patch b/0011-drm-i915-gen9-Calculate-plane-WM-s-from-state.patch deleted file mode 100644 index 9f839dfa2..000000000 --- a/0011-drm-i915-gen9-Calculate-plane-WM-s-from-state.patch +++ /dev/null @@ -1,91 +0,0 @@ -From eacd0ecb98a93e3ff83a4479eadeb9cda05d3579 Mon Sep 17 00:00:00 2001 -From: Fedora Kernel Team -Date: Mon, 20 Jun 2016 12:41:01 +0200 -Subject: [PATCH 11/17] drm/i915/gen9: Calculate plane WM's from state - -Upstream: since drm-intel-next-2016-05-22 -commit 33815fa55b31a5de4b197c09926ecab3dfb79732 - -Author: Matt Roper -AuthorDate: Thu May 12 07:06:05 2016 -0700 -Commit: Matt Roper -CommitDate: Fri May 13 07:34:12 2016 -0700 - - drm/i915/gen9: Calculate plane WM's from state - - In a future patch we'll want to calculate plane watermarks for in-flight - atomic state rather than the already-committed state. - - Signed-off-by: Matt Roper - Reviewed-by: Maarten Lankhorst - Link: http://patchwork.freedesktop.org/patch/msgid/1463061971-19638-12-git-send-email-matthew.d.roper@intel.com ---- - drivers/gpu/drm/i915/intel_pm.c | 16 ++++++++-------- - 1 file changed, 8 insertions(+), 8 deletions(-) - -diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c -index 80f9f18..3164f30 100644 ---- a/drivers/gpu/drm/i915/intel_pm.c -+++ b/drivers/gpu/drm/i915/intel_pm.c -@@ -3179,16 +3179,14 @@ static bool skl_ddb_allocation_changed(const struct skl_ddb_allocation *new_ddb, - - static bool skl_compute_plane_wm(const struct drm_i915_private *dev_priv, - struct intel_crtc_state *cstate, -- struct intel_plane *intel_plane, -+ struct intel_plane_state *intel_pstate, - uint16_t ddb_allocation, - int level, - uint16_t *out_blocks, /* out */ - uint8_t *out_lines /* out */) - { -- struct drm_plane *plane = &intel_plane->base; -- struct drm_framebuffer *fb = plane->state->fb; -- struct intel_plane_state *intel_pstate = -- to_intel_plane_state(plane->state); -+ struct drm_plane_state *pstate = &intel_pstate->base; -+ struct drm_framebuffer *fb = pstate->fb; - uint32_t latency = dev_priv->wm.skl_latency[level]; - uint32_t method1, method2; - uint32_t plane_bytes_per_line, plane_blocks_per_line; -@@ -3203,7 +3201,7 @@ static bool skl_compute_plane_wm(const struct drm_i915_private *dev_priv, - width = drm_rect_width(&intel_pstate->src) >> 16; - height = drm_rect_height(&intel_pstate->src) >> 16; - -- if (intel_rotation_90_or_270(plane->state->rotation)) -+ if (intel_rotation_90_or_270(pstate->rotation)) - swap(width, height); - - cpp = drm_format_plane_cpp(fb->pixel_format, 0); -@@ -3223,7 +3221,7 @@ static bool skl_compute_plane_wm(const struct drm_i915_private *dev_priv, - fb->modifier[0] == I915_FORMAT_MOD_Yf_TILED) { - uint32_t min_scanlines = 4; - uint32_t y_tile_minimum; -- if (intel_rotation_90_or_270(plane->state->rotation)) { -+ if (intel_rotation_90_or_270(pstate->rotation)) { - int cpp = (fb->pixel_format == DRM_FORMAT_NV12) ? - drm_format_plane_cpp(fb->pixel_format, 1) : - drm_format_plane_cpp(fb->pixel_format, 0); -@@ -3277,17 +3275,19 @@ static void skl_compute_wm_level(const struct drm_i915_private *dev_priv, - struct drm_device *dev = dev_priv->dev; - struct intel_crtc *intel_crtc = to_intel_crtc(cstate->base.crtc); - struct intel_plane *intel_plane; -+ struct intel_plane_state *intel_pstate; - uint16_t ddb_blocks; - enum pipe pipe = intel_crtc->pipe; - - for_each_intel_plane_on_crtc(dev, intel_crtc, intel_plane) { - int i = skl_wm_plane_id(intel_plane); - -+ intel_pstate = to_intel_plane_state(intel_plane->base.state); - ddb_blocks = skl_ddb_entry_size(&ddb->plane[pipe][i]); - - result->plane_en[i] = skl_compute_plane_wm(dev_priv, - cstate, -- intel_plane, -+ intel_pstate, - ddb_blocks, - level, - &result->plane_res_b[i], --- -2.7.4 - diff --git a/0012-drm-i915-gen9-Allow-watermark-calculation-on-in-flig.patch b/0012-drm-i915-gen9-Allow-watermark-calculation-on-in-flig.patch deleted file mode 100644 index d0cb50bac..000000000 --- a/0012-drm-i915-gen9-Allow-watermark-calculation-on-in-flig.patch +++ /dev/null @@ -1,156 +0,0 @@ -From c3d2591095045a8230361d55fadf15ce5dc9127d Mon Sep 17 00:00:00 2001 -From: Fedora Kernel Team -Date: Mon, 20 Jun 2016 12:41:12 +0200 -Subject: [PATCH 12/17] drm/i915/gen9: Allow watermark calculation on in-flight - atomic state (v3) - -Upstream: since drm-intel-next-2016-05-22 -commit f4a967523ec7215a3ec867b7ed2e916bd34840e1 - -Author: Matt Roper -AuthorDate: Thu May 12 07:06:06 2016 -0700 -Commit: Matt Roper -CommitDate: Fri May 13 07:34:23 2016 -0700 - - drm/i915/gen9: Allow watermark calculation on in-flight atomic state (v3) - - In an upcoming patch we'll move this calculation to the atomic 'check' - phase so that the display update can be rejected early if no valid - watermark programming is possible. - - v2: - - Drop intel_pstate_for_cstate_plane() helper and add note about how - the code needs to evolve in the future if we start allowing more than - one pending commit against a CRTC. (Maarten) - - v3: - - Only have skl_compute_wm_level calculate watermarks for enabled - planes; we can just set the other planes on a CRTC to disabled - without having to look at the plane state. This is important because - despite our CRTC lock we can still have racing commits that modify - a disabled plane's property without turning it on. (Maarten) - - Signed-off-by: Matt Roper - Reviewed-by: Maarten Lankhorst - Link: http://patchwork.freedesktop.org/patch/msgid/1463061971-19638-13-git-send-email-matthew.d.roper@intel.com ---- - drivers/gpu/drm/i915/intel_pm.c | 61 ++++++++++++++++++++++++++++++++--------- - 1 file changed, 48 insertions(+), 13 deletions(-) - -diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c -index 3164f30..cd29ab6 100644 ---- a/drivers/gpu/drm/i915/intel_pm.c -+++ b/drivers/gpu/drm/i915/intel_pm.c -@@ -3266,23 +3266,56 @@ static bool skl_compute_plane_wm(const struct drm_i915_private *dev_priv, - return true; - } - --static void skl_compute_wm_level(const struct drm_i915_private *dev_priv, -- struct skl_ddb_allocation *ddb, -- struct intel_crtc_state *cstate, -- int level, -- struct skl_wm_level *result) -+static int -+skl_compute_wm_level(const struct drm_i915_private *dev_priv, -+ struct skl_ddb_allocation *ddb, -+ struct intel_crtc_state *cstate, -+ int level, -+ struct skl_wm_level *result) - { - struct drm_device *dev = dev_priv->dev; -+ struct drm_atomic_state *state = cstate->base.state; - struct intel_crtc *intel_crtc = to_intel_crtc(cstate->base.crtc); -+ struct drm_plane *plane; - struct intel_plane *intel_plane; - struct intel_plane_state *intel_pstate; - uint16_t ddb_blocks; - enum pipe pipe = intel_crtc->pipe; - -- for_each_intel_plane_on_crtc(dev, intel_crtc, intel_plane) { -+ /* -+ * We'll only calculate watermarks for planes that are actually -+ * enabled, so make sure all other planes are set as disabled. -+ */ -+ memset(result, 0, sizeof(*result)); -+ -+ for_each_intel_plane_mask(dev, intel_plane, cstate->base.plane_mask) { - int i = skl_wm_plane_id(intel_plane); - -- intel_pstate = to_intel_plane_state(intel_plane->base.state); -+ plane = &intel_plane->base; -+ intel_pstate = NULL; -+ if (state) -+ intel_pstate = -+ intel_atomic_get_existing_plane_state(state, -+ intel_plane); -+ -+ /* -+ * Note: If we start supporting multiple pending atomic commits -+ * against the same planes/CRTC's in the future, plane->state -+ * will no longer be the correct pre-state to use for the -+ * calculations here and we'll need to change where we get the -+ * 'unchanged' plane data from. -+ * -+ * For now this is fine because we only allow one queued commit -+ * against a CRTC. Even if the plane isn't modified by this -+ * transaction and we don't have a plane lock, we still have -+ * the CRTC's lock, so we know that no other transactions are -+ * racing with us to update it. -+ */ -+ if (!intel_pstate) -+ intel_pstate = to_intel_plane_state(plane->state); -+ -+ WARN_ON(!intel_pstate->base.fb); -+ - ddb_blocks = skl_ddb_entry_size(&ddb->plane[pipe][i]); - - result->plane_en[i] = skl_compute_plane_wm(dev_priv, -@@ -3293,6 +3326,8 @@ static void skl_compute_wm_level(const struct drm_i915_private *dev_priv, - &result->plane_res_b[i], - &result->plane_res_l[i]); - } -+ -+ return 0; - } - - static uint32_t -@@ -3587,14 +3622,14 @@ static void skl_flush_wm_values(struct drm_i915_private *dev_priv, - } - } - --static bool skl_update_pipe_wm(struct drm_crtc *crtc, -+static bool skl_update_pipe_wm(struct drm_crtc_state *cstate, - struct skl_ddb_allocation *ddb, /* out */ - struct skl_pipe_wm *pipe_wm /* out */) - { -- struct intel_crtc *intel_crtc = to_intel_crtc(crtc); -- struct intel_crtc_state *cstate = to_intel_crtc_state(crtc->state); -+ struct intel_crtc *intel_crtc = to_intel_crtc(cstate->crtc); -+ struct intel_crtc_state *intel_cstate = to_intel_crtc_state(cstate); - -- skl_build_pipe_wm(cstate, ddb, pipe_wm); -+ skl_build_pipe_wm(intel_cstate, ddb, pipe_wm); - - if (!memcmp(&intel_crtc->wm.active.skl, pipe_wm, sizeof(*pipe_wm))) - return false; -@@ -3634,7 +3669,7 @@ static void skl_update_other_pipe_wm(struct drm_device *dev, - if (!intel_crtc->active) - continue; - -- wm_changed = skl_update_pipe_wm(&intel_crtc->base, -+ wm_changed = skl_update_pipe_wm(intel_crtc->base.state, - &r->ddb, &pipe_wm); - - /* -@@ -3752,7 +3787,7 @@ static void skl_update_wm(struct drm_crtc *crtc) - - skl_clear_wm(results, intel_crtc->pipe); - -- if (!skl_update_pipe_wm(crtc, &results->ddb, pipe_wm)) -+ if (!skl_update_pipe_wm(crtc->state, &results->ddb, pipe_wm)) - return; - - skl_compute_wm_results(dev, pipe_wm, results, intel_crtc); --- -2.7.4 - diff --git a/0013-drm-i915-gen9-Use-a-bitmask-to-track-dirty-pipe-wate.patch b/0013-drm-i915-gen9-Use-a-bitmask-to-track-dirty-pipe-wate.patch deleted file mode 100644 index 959860f95..000000000 --- a/0013-drm-i915-gen9-Use-a-bitmask-to-track-dirty-pipe-wate.patch +++ /dev/null @@ -1,91 +0,0 @@ -From b43247a865f73fa3b73a878236b5055bfb864169 Mon Sep 17 00:00:00 2001 -From: Fedora Kernel Team -Date: Mon, 20 Jun 2016 12:41:23 +0200 -Subject: [PATCH 13/17] drm/i915/gen9: Use a bitmask to track dirty pipe - watermarks - -Upstream: since drm-intel-next-2016-05-22 -commit 2b4b9f35d94b1b533bc23110b040b04316480b28 - -Author: Matt Roper -AuthorDate: Thu May 12 07:06:07 2016 -0700 -Commit: Matt Roper -CommitDate: Fri May 13 07:34:40 2016 -0700 - - drm/i915/gen9: Use a bitmask to track dirty pipe watermarks - - Slightly easier to work with than an array of bools. - - Signed-off-by: Matt Roper - Reviewed-by: Maarten Lankhorst - Link: http://patchwork.freedesktop.org/patch/msgid/1463061971-19638-14-git-send-email-matthew.d.roper@intel.com ---- - drivers/gpu/drm/i915/i915_drv.h | 2 +- - drivers/gpu/drm/i915/intel_pm.c | 10 +++++----- - 2 files changed, 6 insertions(+), 6 deletions(-) - -diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h -index 237df9f..67c76b6 100644 ---- a/drivers/gpu/drm/i915/i915_drv.h -+++ b/drivers/gpu/drm/i915/i915_drv.h -@@ -1615,7 +1615,7 @@ struct skl_ddb_allocation { - }; - - struct skl_wm_values { -- bool dirty[I915_MAX_PIPES]; -+ unsigned dirty_pipes; - struct skl_ddb_allocation ddb; - uint32_t wm_linetime[I915_MAX_PIPES]; - uint32_t plane[I915_MAX_PIPES][I915_MAX_PLANES][8]; -diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c -index cd29ab6..611c5a1 100644 ---- a/drivers/gpu/drm/i915/intel_pm.c -+++ b/drivers/gpu/drm/i915/intel_pm.c -@@ -3455,7 +3455,7 @@ static void skl_write_wm_values(struct drm_i915_private *dev_priv, - int i, level, max_level = ilk_wm_max_level(dev); - enum pipe pipe = crtc->pipe; - -- if (!new->dirty[pipe]) -+ if ((new->dirty_pipes & drm_crtc_mask(&crtc->base)) == 0) - continue; - - I915_WRITE(PIPE_WM_LINETIME(pipe), new->wm_linetime[pipe]); -@@ -3680,7 +3680,7 @@ static void skl_update_other_pipe_wm(struct drm_device *dev, - WARN_ON(!wm_changed); - - skl_compute_wm_results(dev, &pipe_wm, r, intel_crtc); -- r->dirty[intel_crtc->pipe] = true; -+ r->dirty_pipes |= drm_crtc_mask(&intel_crtc->base); - } - } - -@@ -3783,7 +3783,7 @@ static void skl_update_wm(struct drm_crtc *crtc) - - - /* Clear all dirty flags */ -- memset(results->dirty, 0, sizeof(bool) * I915_MAX_PIPES); -+ results->dirty_pipes = 0; - - skl_clear_wm(results, intel_crtc->pipe); - -@@ -3791,7 +3791,7 @@ static void skl_update_wm(struct drm_crtc *crtc) - return; - - skl_compute_wm_results(dev, pipe_wm, results, intel_crtc); -- results->dirty[intel_crtc->pipe] = true; -+ results->dirty_pipes |= drm_crtc_mask(&intel_crtc->base); - - skl_update_other_pipe_wm(dev, crtc, results); - skl_write_wm_values(dev_priv, results); -@@ -3952,7 +3952,7 @@ static void skl_pipe_wm_get_hw_state(struct drm_crtc *crtc) - if (!intel_crtc->active) - return; - -- hw->dirty[pipe] = true; -+ hw->dirty_pipes |= drm_crtc_mask(crtc); - - active->linetime = hw->wm_linetime[pipe]; - --- -2.7.4 - diff --git a/0014-drm-i915-gen9-Propagate-watermark-calculation-failur.patch b/0014-drm-i915-gen9-Propagate-watermark-calculation-failur.patch deleted file mode 100644 index a868ebd1f..000000000 --- a/0014-drm-i915-gen9-Propagate-watermark-calculation-failur.patch +++ /dev/null @@ -1,254 +0,0 @@ -From 2dda82bdd570042820241e71c02ea36081835f67 Mon Sep 17 00:00:00 2001 -From: Fedora Kernel Team -Date: Mon, 20 Jun 2016 12:41:35 +0200 -Subject: [PATCH 14/17] drm/i915/gen9: Propagate watermark calculation failures - up the call chain - -Upstream: since drm-intel-next-2016-05-22 -commit 55994c2c38a1101f84cdf277b228f830af8a9c1b - -Author: Matt Roper -AuthorDate: Thu May 12 07:06:08 2016 -0700 -Commit: Matt Roper -CommitDate: Fri May 13 07:34:48 2016 -0700 - - drm/i915/gen9: Propagate watermark calculation failures up the call chain - - Once we move watermark calculation to the atomic check phase, we'll want - to start rejecting display configurations that exceed out watermark - limits. At the moment we just assume that there's always a valid set of - watermarks, even though this may not actually be true. Let's prepare by - passing return codes up through the call stack in preparation. - - Signed-off-by: Matt Roper - Reviewed-by: Maarten Lankhorst - Link: http://patchwork.freedesktop.org/patch/msgid/1463061971-19638-15-git-send-email-matthew.d.roper@intel.com ---- - drivers/gpu/drm/i915/intel_display.c | 10 ++-- - drivers/gpu/drm/i915/intel_pm.c | 90 ++++++++++++++++++++++-------------- - 2 files changed, 61 insertions(+), 39 deletions(-) - -diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c -index b484fda..9ac2346 100644 ---- a/drivers/gpu/drm/i915/intel_display.c -+++ b/drivers/gpu/drm/i915/intel_display.c -@@ -13222,7 +13222,7 @@ static int intel_modeset_checks(struct drm_atomic_state *state) - * phase. The code here should be run after the per-crtc and per-plane 'check' - * handlers to ensure that all derived state has been updated. - */ --static void calc_watermark_data(struct drm_atomic_state *state) -+static int calc_watermark_data(struct drm_atomic_state *state) - { - struct drm_device *dev = state->dev; - struct drm_i915_private *dev_priv = to_i915(dev); -@@ -13258,7 +13258,9 @@ static void calc_watermark_data(struct drm_atomic_state *state) - - /* Is there platform-specific watermark information to calculate? */ - if (dev_priv->display.compute_global_watermarks) -- dev_priv->display.compute_global_watermarks(state); -+ return dev_priv->display.compute_global_watermarks(state); -+ -+ return 0; - } - - /** -@@ -13345,9 +13347,7 @@ static int intel_atomic_check(struct drm_device *dev, - return ret; - - intel_fbc_choose_crtc(dev_priv, state); -- calc_watermark_data(state); -- -- return 0; -+ return calc_watermark_data(state); - } - - static int intel_atomic_prepare_commit(struct drm_device *dev, -diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c -index 611c5a1..ec22d93 100644 ---- a/drivers/gpu/drm/i915/intel_pm.c -+++ b/drivers/gpu/drm/i915/intel_pm.c -@@ -3177,13 +3177,14 @@ static bool skl_ddb_allocation_changed(const struct skl_ddb_allocation *new_ddb, - return false; - } - --static bool skl_compute_plane_wm(const struct drm_i915_private *dev_priv, -- struct intel_crtc_state *cstate, -- struct intel_plane_state *intel_pstate, -- uint16_t ddb_allocation, -- int level, -- uint16_t *out_blocks, /* out */ -- uint8_t *out_lines /* out */) -+static int skl_compute_plane_wm(const struct drm_i915_private *dev_priv, -+ struct intel_crtc_state *cstate, -+ struct intel_plane_state *intel_pstate, -+ uint16_t ddb_allocation, -+ int level, -+ uint16_t *out_blocks, /* out */ -+ uint8_t *out_lines, /* out */ -+ bool *enabled /* out */) - { - struct drm_plane_state *pstate = &intel_pstate->base; - struct drm_framebuffer *fb = pstate->fb; -@@ -3195,8 +3196,10 @@ static bool skl_compute_plane_wm(const struct drm_i915_private *dev_priv, - uint8_t cpp; - uint32_t width = 0, height = 0; - -- if (latency == 0 || !cstate->base.active || !intel_pstate->visible) -- return false; -+ if (latency == 0 || !cstate->base.active || !intel_pstate->visible) { -+ *enabled = false; -+ return 0; -+ } - - width = drm_rect_width(&intel_pstate->src) >> 16; - height = drm_rect_height(&intel_pstate->src) >> 16; -@@ -3257,13 +3260,16 @@ static bool skl_compute_plane_wm(const struct drm_i915_private *dev_priv, - res_blocks++; - } - -- if (res_blocks >= ddb_allocation || res_lines > 31) -- return false; -+ if (res_blocks >= ddb_allocation || res_lines > 31) { -+ *enabled = false; -+ return 0; -+ } - - *out_blocks = res_blocks; - *out_lines = res_lines; -+ *enabled = true; - -- return true; -+ return 0; - } - - static int -@@ -3281,6 +3287,7 @@ skl_compute_wm_level(const struct drm_i915_private *dev_priv, - struct intel_plane_state *intel_pstate; - uint16_t ddb_blocks; - enum pipe pipe = intel_crtc->pipe; -+ int ret; - - /* - * We'll only calculate watermarks for planes that are actually -@@ -3318,13 +3325,16 @@ skl_compute_wm_level(const struct drm_i915_private *dev_priv, - - ddb_blocks = skl_ddb_entry_size(&ddb->plane[pipe][i]); - -- result->plane_en[i] = skl_compute_plane_wm(dev_priv, -- cstate, -- intel_pstate, -- ddb_blocks, -- level, -- &result->plane_res_b[i], -- &result->plane_res_l[i]); -+ ret = skl_compute_plane_wm(dev_priv, -+ cstate, -+ intel_pstate, -+ ddb_blocks, -+ level, -+ &result->plane_res_b[i], -+ &result->plane_res_l[i], -+ &result->plane_en[i]); -+ if (ret) -+ return ret; - } - - return 0; -@@ -3361,21 +3371,26 @@ static void skl_compute_transition_wm(struct intel_crtc_state *cstate, - } - } - --static void skl_build_pipe_wm(struct intel_crtc_state *cstate, -- struct skl_ddb_allocation *ddb, -- struct skl_pipe_wm *pipe_wm) -+static int skl_build_pipe_wm(struct intel_crtc_state *cstate, -+ struct skl_ddb_allocation *ddb, -+ struct skl_pipe_wm *pipe_wm) - { - struct drm_device *dev = cstate->base.crtc->dev; - const struct drm_i915_private *dev_priv = dev->dev_private; - int level, max_level = ilk_wm_max_level(dev); -+ int ret; - - for (level = 0; level <= max_level; level++) { -- skl_compute_wm_level(dev_priv, ddb, cstate, -- level, &pipe_wm->wm[level]); -+ ret = skl_compute_wm_level(dev_priv, ddb, cstate, -+ level, &pipe_wm->wm[level]); -+ if (ret) -+ return ret; - } - pipe_wm->linetime = skl_compute_linetime_wm(cstate); - - skl_compute_transition_wm(cstate, &pipe_wm->trans_wm); -+ -+ return 0; - } - - static void skl_compute_wm_results(struct drm_device *dev, -@@ -3622,21 +3637,27 @@ static void skl_flush_wm_values(struct drm_i915_private *dev_priv, - } - } - --static bool skl_update_pipe_wm(struct drm_crtc_state *cstate, -- struct skl_ddb_allocation *ddb, /* out */ -- struct skl_pipe_wm *pipe_wm /* out */) -+static int skl_update_pipe_wm(struct drm_crtc_state *cstate, -+ struct skl_ddb_allocation *ddb, /* out */ -+ struct skl_pipe_wm *pipe_wm, /* out */ -+ bool *changed /* out */) - { - struct intel_crtc *intel_crtc = to_intel_crtc(cstate->crtc); - struct intel_crtc_state *intel_cstate = to_intel_crtc_state(cstate); -+ int ret; - -- skl_build_pipe_wm(intel_cstate, ddb, pipe_wm); -+ ret = skl_build_pipe_wm(intel_cstate, ddb, pipe_wm); -+ if (ret) -+ return ret; - - if (!memcmp(&intel_crtc->wm.active.skl, pipe_wm, sizeof(*pipe_wm))) -- return false; -+ *changed = false; -+ else -+ *changed = true; - - intel_crtc->wm.active.skl = *pipe_wm; - -- return true; -+ return 0; - } - - static void skl_update_other_pipe_wm(struct drm_device *dev, -@@ -3669,8 +3690,8 @@ static void skl_update_other_pipe_wm(struct drm_device *dev, - if (!intel_crtc->active) - continue; - -- wm_changed = skl_update_pipe_wm(intel_crtc->base.state, -- &r->ddb, &pipe_wm); -+ skl_update_pipe_wm(intel_crtc->base.state, -+ &r->ddb, &pipe_wm, &wm_changed); - - /* - * If we end up re-computing the other pipe WM values, it's -@@ -3780,14 +3801,15 @@ static void skl_update_wm(struct drm_crtc *crtc) - struct skl_wm_values *results = &dev_priv->wm.skl_results; - struct intel_crtc_state *cstate = to_intel_crtc_state(crtc->state); - struct skl_pipe_wm *pipe_wm = &cstate->wm.skl.optimal; -- -+ bool wm_changed; - - /* Clear all dirty flags */ - results->dirty_pipes = 0; - - skl_clear_wm(results, intel_crtc->pipe); - -- if (!skl_update_pipe_wm(crtc->state, &results->ddb, pipe_wm)) -+ skl_update_pipe_wm(crtc->state, &results->ddb, pipe_wm, &wm_changed); -+ if (!wm_changed) - return; - - skl_compute_wm_results(dev, pipe_wm, results, intel_crtc); --- -2.7.4 - diff --git a/0015-drm-i915-gen9-Calculate-watermarks-during-atomic-che.patch b/0015-drm-i915-gen9-Calculate-watermarks-during-atomic-che.patch deleted file mode 100644 index 691b6b985..000000000 --- a/0015-drm-i915-gen9-Calculate-watermarks-during-atomic-che.patch +++ /dev/null @@ -1,302 +0,0 @@ -From 664f87c5bfcc7798bd5b16e14792f1e9ba2956ea Mon Sep 17 00:00:00 2001 -From: Matt Roper -Date: Thu, 12 May 2016 15:11:40 -0700 -Subject: [PATCH 15/17] drm/i915/gen9: Calculate watermarks during atomic - 'check' (v2) - -Moving watermark calculation into the check phase will allow us to to -reject display configurations for which there are no valid watermark -values before we start trying to program the hardware (although those -tests will come in a subsequent patch). - -Another advantage of moving this calculation to the check phase is that -we can calculate the watermarks in a single shot as part of the atomic -transaction. The watermark interfaces we inherited from our legacy -modesetting days are a bit broken in the atomic design because they use -per-crtc entry points but actually re-calculate and re-program something -that is really more of a global state. That worked okay in the legacy -modesetting world because operations only ever updated a single CRTC at -a time. However in the atomic world, a transaction can involve multiple -CRTC's, which means we wind up computing and programming the watermarks -NxN times (where N is the number of CRTC's involved). With this patch -we eliminate the redundant re-calculation of watermark data for atomic -states (which was the cause of the WARN_ON(!wm_changed) problems that -have plagued us for a while). - -We still need to work on the 'commit' side of watermark handling so that -we aren't doing redundant NxN programming of watermarks, but that's -content for future patches. - -v2: - - Bail out of skl_write_wm_values() if the CRTC isn't active. Now that - we set dirty_pipes to ~0 if the active pipes change (because - we need to deal with DDB changes), we can now wind up here for - disabled pipes, whereas we couldn't before. - -Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=89055 -Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=92181 -Cc: Maarten Lankhorst -Signed-off-by: Matt Roper -Tested-by: Daniel Stone -Reviewed-by: Maarten Lankhorst -Link: http://patchwork.freedesktop.org/patch/msgid/1463091100-13747-1-git-send-email-matthew.d.roper@intel.com ---- - drivers/gpu/drm/i915/intel_display.c | 2 +- - drivers/gpu/drm/i915/intel_drv.h | 2 +- - drivers/gpu/drm/i915/intel_pm.c | 140 +++++++++++++---------------------- - 3 files changed, 54 insertions(+), 90 deletions(-) - -diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c -index 2190bac..a75daac 100644 ---- a/drivers/gpu/drm/i915/intel_display.c -+++ b/drivers/gpu/drm/i915/intel_display.c -@@ -13627,7 +13627,7 @@ static int intel_atomic_commit(struct drm_device *dev, - drm_atomic_helper_swap_state(dev, state); - dev_priv->wm.config = intel_state->wm_config; - dev_priv->wm.distrust_bios_wm = false; -- dev_priv->wm.skl_results.ddb = intel_state->ddb; -+ dev_priv->wm.skl_results = intel_state->wm_results; - intel_shared_dpll_commit(state); - - if (intel_state->modeset) { -diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h -index 2218290..ab0be7a 100644 ---- a/drivers/gpu/drm/i915/intel_drv.h -+++ b/drivers/gpu/drm/i915/intel_drv.h -@@ -314,7 +314,7 @@ struct intel_atomic_state { - bool skip_intermediate_wm; - - /* Gen9+ only */ -- struct skl_ddb_allocation ddb; -+ struct skl_wm_values wm_results; - }; - - struct intel_plane_state { -diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c -index 342aa66..b072417 100644 ---- a/drivers/gpu/drm/i915/intel_pm.c -+++ b/drivers/gpu/drm/i915/intel_pm.c -@@ -3221,23 +3221,6 @@ static uint32_t skl_wm_method2(uint32_t pixel_rate, uint32_t pipe_htotal, - return ret; - } - --static bool skl_ddb_allocation_changed(const struct skl_ddb_allocation *new_ddb, -- const struct intel_crtc *intel_crtc) --{ -- struct drm_device *dev = intel_crtc->base.dev; -- struct drm_i915_private *dev_priv = dev->dev_private; -- const struct skl_ddb_allocation *cur_ddb = &dev_priv->wm.skl_hw.ddb; -- -- /* -- * If ddb allocation of pipes changed, it may require recalculation of -- * watermarks -- */ -- if (memcmp(new_ddb->pipe, cur_ddb->pipe, sizeof(new_ddb->pipe))) -- return true; -- -- return false; --} -- - static int skl_compute_plane_wm(const struct drm_i915_private *dev_priv, - struct intel_crtc_state *cstate, - struct intel_plane_state *intel_pstate, -@@ -3533,6 +3516,8 @@ static void skl_write_wm_values(struct drm_i915_private *dev_priv, - - if ((new->dirty_pipes & drm_crtc_mask(&crtc->base)) == 0) - continue; -+ if (!crtc->active) -+ continue; - - I915_WRITE(PIPE_WM_LINETIME(pipe), new->wm_linetime[pipe]); - -@@ -3716,66 +3701,9 @@ static int skl_update_pipe_wm(struct drm_crtc_state *cstate, - else - *changed = true; - -- intel_crtc->wm.active.skl = *pipe_wm; -- - return 0; - } - --static void skl_update_other_pipe_wm(struct drm_device *dev, -- struct drm_crtc *crtc, -- struct skl_wm_values *r) --{ -- struct intel_crtc *intel_crtc; -- struct intel_crtc *this_crtc = to_intel_crtc(crtc); -- -- /* -- * If the WM update hasn't changed the allocation for this_crtc (the -- * crtc we are currently computing the new WM values for), other -- * enabled crtcs will keep the same allocation and we don't need to -- * recompute anything for them. -- */ -- if (!skl_ddb_allocation_changed(&r->ddb, this_crtc)) -- return; -- -- /* -- * Otherwise, because of this_crtc being freshly enabled/disabled, the -- * other active pipes need new DDB allocation and WM values. -- */ -- for_each_intel_crtc(dev, intel_crtc) { -- struct skl_pipe_wm pipe_wm = {}; -- bool wm_changed; -- -- if (this_crtc->pipe == intel_crtc->pipe) -- continue; -- -- if (!intel_crtc->active) -- continue; -- -- skl_update_pipe_wm(intel_crtc->base.state, -- &r->ddb, &pipe_wm, &wm_changed); -- -- /* -- * If we end up re-computing the other pipe WM values, it's -- * because it was really needed, so we expect the WM values to -- * be different. -- */ -- WARN_ON(!wm_changed); -- -- skl_compute_wm_results(dev, &pipe_wm, r, intel_crtc); -- r->dirty_pipes |= drm_crtc_mask(&intel_crtc->base); -- } --} -- --static void skl_clear_wm(struct skl_wm_values *watermarks, enum pipe pipe) --{ -- watermarks->wm_linetime[pipe] = 0; -- memset(watermarks->plane[pipe], 0, -- sizeof(uint32_t) * 8 * I915_MAX_PLANES); -- memset(watermarks->plane_trans[pipe], -- 0, sizeof(uint32_t) * I915_MAX_PLANES); -- watermarks->plane_trans[pipe][PLANE_CURSOR] = 0; --} -- - static int - skl_compute_ddb(struct drm_atomic_state *state) - { -@@ -3783,6 +3711,7 @@ skl_compute_ddb(struct drm_atomic_state *state) - struct drm_i915_private *dev_priv = to_i915(dev); - struct intel_atomic_state *intel_state = to_intel_atomic_state(state); - struct intel_crtc *intel_crtc; -+ struct skl_ddb_allocation *ddb = &intel_state->wm_results.ddb; - unsigned realloc_pipes = dev_priv->active_crtcs; - int ret; - -@@ -3808,8 +3737,10 @@ skl_compute_ddb(struct drm_atomic_state *state) - * any other display updates race with this transaction, so we need - * to grab the lock on *all* CRTC's. - */ -- if (intel_state->active_pipe_changes) -+ if (intel_state->active_pipe_changes) { - realloc_pipes = ~0; -+ intel_state->wm_results.dirty_pipes = ~0; -+ } - - for_each_intel_crtc_mask(dev, intel_crtc, realloc_pipes) { - struct intel_crtc_state *cstate; -@@ -3818,7 +3749,7 @@ skl_compute_ddb(struct drm_atomic_state *state) - if (IS_ERR(cstate)) - return PTR_ERR(cstate); - -- ret = skl_allocate_pipe_ddb(cstate, &intel_state->ddb); -+ ret = skl_allocate_pipe_ddb(cstate, ddb); - if (ret) - return ret; - } -@@ -3831,8 +3762,11 @@ skl_compute_wm(struct drm_atomic_state *state) - { - struct drm_crtc *crtc; - struct drm_crtc_state *cstate; -- int ret, i; -+ struct intel_atomic_state *intel_state = to_intel_atomic_state(state); -+ struct skl_wm_values *results = &intel_state->wm_results; -+ struct skl_pipe_wm *pipe_wm; - bool changed = false; -+ int ret, i; - - /* - * If this transaction isn't actually touching any CRTC's, don't -@@ -3847,10 +3781,45 @@ skl_compute_wm(struct drm_atomic_state *state) - if (!changed) - return 0; - -+ /* Clear all dirty flags */ -+ results->dirty_pipes = 0; -+ - ret = skl_compute_ddb(state); - if (ret) - return ret; - -+ /* -+ * Calculate WM's for all pipes that are part of this transaction. -+ * Note that the DDB allocation above may have added more CRTC's that -+ * weren't otherwise being modified (and set bits in dirty_pipes) if -+ * pipe allocations had to change. -+ * -+ * FIXME: Now that we're doing this in the atomic check phase, we -+ * should allow skl_update_pipe_wm() to return failure in cases where -+ * no suitable watermark values can be found. -+ */ -+ for_each_crtc_in_state(state, crtc, cstate, i) { -+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc); -+ struct intel_crtc_state *intel_cstate = -+ to_intel_crtc_state(cstate); -+ -+ pipe_wm = &intel_cstate->wm.skl.optimal; -+ ret = skl_update_pipe_wm(cstate, &results->ddb, pipe_wm, -+ &changed); -+ if (ret) -+ return ret; -+ -+ if (changed) -+ results->dirty_pipes |= drm_crtc_mask(crtc); -+ -+ if ((results->dirty_pipes & drm_crtc_mask(crtc)) == 0) -+ /* This pipe's WM's did not change */ -+ continue; -+ -+ intel_cstate->update_wm_pre = true; -+ skl_compute_wm_results(crtc->dev, pipe_wm, results, intel_crtc); -+ } -+ - return 0; - } - -@@ -3862,26 +3831,21 @@ static void skl_update_wm(struct drm_crtc *crtc) - struct skl_wm_values *results = &dev_priv->wm.skl_results; - struct intel_crtc_state *cstate = to_intel_crtc_state(crtc->state); - struct skl_pipe_wm *pipe_wm = &cstate->wm.skl.optimal; -- bool wm_changed; -- -- /* Clear all dirty flags */ -- results->dirty_pipes = 0; - -- skl_clear_wm(results, intel_crtc->pipe); -- -- skl_update_pipe_wm(crtc->state, &results->ddb, pipe_wm, &wm_changed); -- if (!wm_changed) -+ if ((results->dirty_pipes & drm_crtc_mask(crtc)) == 0) - return; - -- skl_compute_wm_results(dev, pipe_wm, results, intel_crtc); -- results->dirty_pipes |= drm_crtc_mask(&intel_crtc->base); -+ intel_crtc->wm.active.skl = *pipe_wm; -+ -+ mutex_lock(&dev_priv->wm.wm_mutex); - -- skl_update_other_pipe_wm(dev, crtc, results); - skl_write_wm_values(dev_priv, results); - skl_flush_wm_values(dev_priv, results); - - /* store the new configuration */ - dev_priv->wm.skl_hw = *results; -+ -+ mutex_unlock(&dev_priv->wm.wm_mutex); - } - - static void ilk_compute_wm_config(struct drm_device *dev, --- -2.7.4 - diff --git a/0016-drm-i915-gen9-Reject-display-updates-that-exceed-wm-.patch b/0016-drm-i915-gen9-Reject-display-updates-that-exceed-wm-.patch deleted file mode 100644 index fb59572bd..000000000 --- a/0016-drm-i915-gen9-Reject-display-updates-that-exceed-wm-.patch +++ /dev/null @@ -1,63 +0,0 @@ -From 7731c187f1f77501b7dddf419a06c1b42b0f1388 Mon Sep 17 00:00:00 2001 -From: Fedora Kernel Team -Date: Mon, 20 Jun 2016 12:42:00 +0200 -Subject: [PATCH 16/17] drm/i915/gen9: Reject display updates that exceed wm - limitations (v2) - -Upstream: since drm-intel-next-2016-05-22 -commit 6b6bada7d476b586d85b1f9df43125804877e09f - -Author: Matt Roper -AuthorDate: Thu May 12 07:06:10 2016 -0700 -Commit: Matt Roper -CommitDate: Fri May 13 07:36:04 2016 -0700 - - drm/i915/gen9: Reject display updates that exceed wm limitations (v2) - - If we can't find any valid level 0 watermark values for the requested - atomic transaction, reject the configuration before we try to start - programming the hardware. - - v2: - - Add extra debugging output when we reject level 0 watermarks so that - we can more easily debug how/why they were rejected. - - Cc: Lyude Paul - Signed-off-by: Matt Roper - Reviewed-by: Maarten Lankhorst - Link: http://patchwork.freedesktop.org/patch/msgid/1463061971-19638-17-git-send-email-matthew.d.roper@intel.com ---- - drivers/gpu/drm/i915/intel_pm.c | 17 ++++++++++++++++- - 1 file changed, 16 insertions(+), 1 deletion(-) - -diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c -index 73e5242..70dcd2e 100644 ---- a/drivers/gpu/drm/i915/intel_pm.c -+++ b/drivers/gpu/drm/i915/intel_pm.c -@@ -3245,7 +3245,22 @@ static int skl_compute_plane_wm(const struct drm_i915_private *dev_priv, - - if (res_blocks >= ddb_allocation || res_lines > 31) { - *enabled = false; -- return 0; -+ -+ /* -+ * If there are no valid level 0 watermarks, then we can't -+ * support this display configuration. -+ */ -+ if (level) { -+ return 0; -+ } else { -+ DRM_DEBUG_KMS("Requested display configuration exceeds system watermark limitations\n"); -+ DRM_DEBUG_KMS("Plane %d.%d: blocks required = %u/%u, lines required = %u/31\n", -+ to_intel_crtc(cstate->base.crtc)->pipe, -+ skl_wm_plane_id(to_intel_plane(pstate->plane)), -+ res_blocks, ddb_allocation, res_lines); -+ -+ return -EINVAL; -+ } - } - - *out_blocks = res_blocks; --- -2.7.4 - diff --git a/0017-drm-i915-Remove-wm_config-from-dev_priv-intel_atomic.patch b/0017-drm-i915-Remove-wm_config-from-dev_priv-intel_atomic.patch deleted file mode 100644 index 73a6dacc6..000000000 --- a/0017-drm-i915-Remove-wm_config-from-dev_priv-intel_atomic.patch +++ /dev/null @@ -1,105 +0,0 @@ -From 73a35468564f4e47deade0a4a5eb7ec289611ebc Mon Sep 17 00:00:00 2001 -From: Matt Roper -Date: Thu, 12 May 2016 07:06:11 -0700 -Subject: [PATCH 17/17] drm/i915: Remove wm_config from - dev_priv/intel_atomic_state - -We calculate the watermark config into intel_atomic_state and then save -it into dev_priv, but never actually use it from there. This is -left-over from some early ILK-style watermark programming designs that -got changed over time. - -Signed-off-by: Matt Roper -Reviewed-by: Maarten Lankhorst -Link: http://patchwork.freedesktop.org/patch/msgid/1463061971-19638-18-git-send-email-matthew.d.roper@intel.com ---- - drivers/gpu/drm/i915/i915_drv.h | 3 --- - drivers/gpu/drm/i915/intel_display.c | 31 ------------------------------- - drivers/gpu/drm/i915/intel_drv.h | 1 - - 3 files changed, 35 deletions(-) - -diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h -index e7bde72..608f8e4 100644 ---- a/drivers/gpu/drm/i915/i915_drv.h -+++ b/drivers/gpu/drm/i915/i915_drv.h -@@ -1961,9 +1961,6 @@ struct drm_i915_private { - */ - uint16_t skl_latency[8]; - -- /* Committed wm config */ -- struct intel_wm_config config; -- - /* - * The skl_wm_values structure is a bit too big for stack - * allocation, so we keep the staging struct where we store -diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c -index a75daac..9c109c6 100644 ---- a/drivers/gpu/drm/i915/intel_display.c -+++ b/drivers/gpu/drm/i915/intel_display.c -@@ -13343,35 +13343,6 @@ static int calc_watermark_data(struct drm_atomic_state *state) - { - struct drm_device *dev = state->dev; - struct drm_i915_private *dev_priv = to_i915(dev); -- struct intel_atomic_state *intel_state = to_intel_atomic_state(state); -- struct drm_crtc *crtc; -- struct drm_crtc_state *cstate; -- struct drm_plane *plane; -- struct drm_plane_state *pstate; -- -- /* -- * Calculate watermark configuration details now that derived -- * plane/crtc state is all properly updated. -- */ -- drm_for_each_crtc(crtc, dev) { -- cstate = drm_atomic_get_existing_crtc_state(state, crtc) ?: -- crtc->state; -- -- if (cstate->active) -- intel_state->wm_config.num_pipes_active++; -- } -- drm_for_each_legacy_plane(plane, dev) { -- pstate = drm_atomic_get_existing_plane_state(state, plane) ?: -- plane->state; -- -- if (!to_intel_plane_state(pstate)->visible) -- continue; -- -- intel_state->wm_config.sprites_enabled = true; -- if (pstate->crtc_w != pstate->src_w >> 16 || -- pstate->crtc_h != pstate->src_h >> 16) -- intel_state->wm_config.sprites_scaled = true; -- } - - /* Is there platform-specific watermark information to calculate? */ - if (dev_priv->display.compute_global_watermarks) -@@ -13625,7 +13596,6 @@ static int intel_atomic_commit(struct drm_device *dev, - } - - drm_atomic_helper_swap_state(dev, state); -- dev_priv->wm.config = intel_state->wm_config; - dev_priv->wm.distrust_bios_wm = false; - dev_priv->wm.skl_results = intel_state->wm_results; - intel_shared_dpll_commit(state); -@@ -15405,7 +15375,6 @@ retry: - } - - /* Write calculated watermark values back */ -- to_i915(dev)->wm.config = to_intel_atomic_state(state)->wm_config; - for_each_crtc_in_state(state, crtc, cstate, i) { - struct intel_crtc_state *cs = to_intel_crtc_state(cstate); - -diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h -index ab0be7a..8d73c20 100644 ---- a/drivers/gpu/drm/i915/intel_drv.h -+++ b/drivers/gpu/drm/i915/intel_drv.h -@@ -305,7 +305,6 @@ struct intel_atomic_state { - unsigned int min_pixclk[I915_MAX_PIPES]; - - struct intel_shared_dpll_config shared_dpll[I915_NUM_PLLS]; -- struct intel_wm_config wm_config; - - /* - * Current watermarks can't be trusted during hardware readout, so --- -2.7.4 - diff --git a/Add-EFI-signature-data-types.patch b/Add-EFI-signature-data-types.patch index 094c5a34c..23402354e 100644 --- a/Add-EFI-signature-data-types.patch +++ b/Add-EFI-signature-data-types.patch @@ -18,15 +18,12 @@ diff --git a/include/linux/efi.h b/include/linux/efi.h index 8cb38cfcba74..8c274b4ea8e6 100644 --- a/include/linux/efi.h +++ b/include/linux/efi.h -@@ -647,6 +647,12 @@ void efi_native_runtime_setup(void); - EFI_GUID(0x4a67b082, 0x0a4c, 0x41cf, \ - 0xb6, 0xc7, 0x44, 0x0b, 0x29, 0xbb, 0x8c, 0x4f) +@@ -647,6 +647,9 @@ void efi_native_runtime_setup(void); + #define LINUX_EFI_ARM_SCREEN_INFO_TABLE_GUID EFI_GUID(0xe03fc20a, 0x85dc, 0x406e, 0xb9, 0x0e, 0x4a, 0xb5, 0x02, 0x37, 0x1d, 0x95) + #define LINUX_EFI_LOADER_ENTRY_GUID EFI_GUID(0x4a67b082, 0x0a4c, 0x41cf, 0xb6, 0xc7, 0x44, 0x0b, 0x29, 0xbb, 0x8c, 0x4f) -+#define EFI_CERT_SHA256_GUID \ -+ EFI_GUID( 0xc1c41626, 0x504c, 0x4092, 0xac, 0xa9, 0x41, 0xf9, 0x36, 0x93, 0x43, 0x28 ) -+ -+#define EFI_CERT_X509_GUID \ -+ EFI_GUID( 0xa5c059a1, 0x94e4, 0x4aa7, 0x87, 0xb5, 0xab, 0x15, 0x5c, 0x2b, 0xf0, 0x72 ) ++#define EFI_CERT_SHA256_GUID EFI_GUID(0xc1c41626, 0x504c, 0x4092, 0xac, 0xa9, 0x41, 0xf9, 0x36, 0x93, 0x43, 0x28) ++#define EFI_CERT_X509_GUID EFI_GUID(0xa5c059a1, 0x94e4, 0x4aa7, 0x87, 0xb5, 0xab, 0x15, 0x5c, 0x2b, 0xf0, 0x72) + typedef struct { efi_guid_t guid; diff --git a/Add-secure_modules-call.patch b/Add-secure_modules-call.patch index 5c272a983..1cbf3afd9 100644 --- a/Add-secure_modules-call.patch +++ b/Add-secure_modules-call.patch @@ -1,7 +1,7 @@ -From 0f6eec5ca124baf1372fb4edeacd11a002378f5e Mon Sep 17 00:00:00 2001 +From 3213f1513a744fb21b6b9e4d4f2650a204855b3e Mon Sep 17 00:00:00 2001 From: Matthew Garrett Date: Fri, 9 Aug 2013 17:58:15 -0400 -Subject: [PATCH 01/20] Add secure_modules() call +Subject: [PATCH] Add secure_modules() call Provide a single call to allow kernel code to determine whether the system has been configured to either disable module loading entirely or to load @@ -17,10 +17,10 @@ Signed-off-by: Matthew Garrett 2 files changed, 16 insertions(+) diff --git a/include/linux/module.h b/include/linux/module.h -index 3daf2b3..082298a 100644 +index 0c3207d..05bd6c9 100644 --- a/include/linux/module.h +++ b/include/linux/module.h -@@ -655,6 +655,8 @@ static inline bool is_livepatch_module(struct module *mod) +@@ -641,6 +641,8 @@ static inline bool is_livepatch_module(struct module *mod) } #endif /* CONFIG_LIVEPATCH */ @@ -28,8 +28,8 @@ index 3daf2b3..082298a 100644 + #else /* !CONFIG_MODULES... */ - /* Given an address, look for it in the exception tables. */ -@@ -771,6 +773,10 @@ static inline bool module_requested_async_probing(struct module *module) + static inline struct module *__module_address(unsigned long addr) +@@ -750,6 +752,10 @@ static inline bool module_requested_async_probing(struct module *module) return false; } @@ -41,10 +41,10 @@ index 3daf2b3..082298a 100644 #ifdef CONFIG_SYSFS diff --git a/kernel/module.c b/kernel/module.c -index 5f71aa6..3c38496 100644 +index 529efae..0332fdd 100644 --- a/kernel/module.c +++ b/kernel/module.c -@@ -4199,3 +4199,13 @@ void module_layout(struct module *mod, +@@ -4279,3 +4279,13 @@ void module_layout(struct module *mod, } EXPORT_SYMBOL(module_layout); #endif @@ -59,5 +59,5 @@ index 5f71aa6..3c38496 100644 +} +EXPORT_SYMBOL(secure_modules); -- -2.5.5 +2.9.2 diff --git a/AllWinner-net-emac.patch b/AllWinner-net-emac.patch new file mode 100644 index 000000000..7bcaecf4a --- /dev/null +++ b/AllWinner-net-emac.patch @@ -0,0 +1,2700 @@ +From e90ba04ee5efbed6fc17dfa7f62702f268fc1bc4 Mon Sep 17 00:00:00 2001 +From: Corentin LABBE +Date: Fri, 7 Oct 2016 10:25:48 +0200 +Subject: [PATCH 1/9] ethernet: add sun8i-emac driver + +This patch add support for sun8i-emac ethernet MAC hardware. +It could be found in Allwinner H3/A83T/A64 SoCs. + +It supports 10/100/1000 Mbit/s speed with half/full duplex. +It can use an internal PHY (MII 10/100) or an external PHY +via RGMII/RMII. + +Signed-off-by: Corentin Labbe +--- + drivers/net/ethernet/allwinner/Kconfig | 13 + + drivers/net/ethernet/allwinner/Makefile | 1 + + drivers/net/ethernet/allwinner/sun8i-emac.c | 2266 +++++++++++++++++++++++++++ + 3 files changed, 2280 insertions(+) + create mode 100644 drivers/net/ethernet/allwinner/sun8i-emac.c + +diff --git a/drivers/net/ethernet/allwinner/Kconfig b/drivers/net/ethernet/allwinner/Kconfig +index 47da7e7..060569c 100644 +--- a/drivers/net/ethernet/allwinner/Kconfig ++++ b/drivers/net/ethernet/allwinner/Kconfig +@@ -33,4 +33,17 @@ config SUN4I_EMAC + To compile this driver as a module, choose M here. The module + will be called sun4i-emac. + ++config SUN8I_EMAC ++ tristate "Allwinner sun8i EMAC support" ++ depends on ARCH_SUNXI || COMPILE_TEST ++ depends on OF ++ select MII ++ select PHYLIB ++ ---help--- ++ This driver support the sun8i EMAC ethernet driver present on ++ H3/A83T/A64 Allwinner SoCs. ++ ++ To compile this driver as a module, choose M here. The module ++ will be called sun8i-emac. ++ + endif # NET_VENDOR_ALLWINNER +diff --git a/drivers/net/ethernet/allwinner/Makefile b/drivers/net/ethernet/allwinner/Makefile +index 03129f7..8bd1693c 100644 +--- a/drivers/net/ethernet/allwinner/Makefile ++++ b/drivers/net/ethernet/allwinner/Makefile +@@ -3,3 +3,4 @@ + # + + obj-$(CONFIG_SUN4I_EMAC) += sun4i-emac.o ++obj-$(CONFIG_SUN8I_EMAC) += sun8i-emac.o +diff --git a/drivers/net/ethernet/allwinner/sun8i-emac.c b/drivers/net/ethernet/allwinner/sun8i-emac.c +new file mode 100644 +index 0000000..bc74467 +--- /dev/null ++++ b/drivers/net/ethernet/allwinner/sun8i-emac.c +@@ -0,0 +1,2266 @@ ++/* ++ * sun8i-emac driver ++ * ++ * Copyright (C) 2015-2016 Corentin LABBE ++ * ++ * This is the driver for Allwinner Ethernet MAC found in H3/A83T/A64 SoC ++ * ++ * TODO: ++ * - MAC filtering ++ * - Jumbo frame ++ * - features rx-all (NETIF_F_RXALL_BIT) ++ * - PM runtime ++ */ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#define EMAC_BASIC_CTL0 0x00 ++#define EMAC_BASIC_CTL1 0x04 ++#define EMAC_INT_STA 0x08 ++#define EMAC_INT_EN 0x0C ++#define EMAC_TX_CTL0 0x10 ++#define EMAC_TX_CTL1 0x14 ++#define EMAC_TX_FLOW_CTL 0x1C ++#define EMAC_RX_CTL0 0x24 ++#define EMAC_RX_CTL1 0x28 ++#define EMAC_RX_FRM_FLT 0x38 ++#define EMAC_MDIO_CMD 0x48 ++#define EMAC_MDIO_DATA 0x4C ++#define EMAC_TX_DMA_STA 0xB0 ++#define EMAC_TX_CUR_DESC 0xB4 ++#define EMAC_TX_CUR_BUF 0xB8 ++#define EMAC_RX_DMA_STA 0xC0 ++ ++#define MDIO_CMD_MII_BUSY BIT(0) ++#define MDIO_CMD_MII_WRITE BIT(1) ++#define MDIO_CMD_MII_PHY_REG_ADDR_MASK GENMASK(8, 4) ++#define MDIO_CMD_MII_PHY_REG_ADDR_SHIFT 4 ++#define MDIO_CMD_MII_PHY_ADDR_MASK GENMASK(16, 12) ++#define MDIO_CMD_MII_PHY_ADDR_SHIFT 12 ++ ++#define EMAC_MACADDR_HI 0x50 ++#define EMAC_MACADDR_LO 0x54 ++ ++#define EMAC_RX_DESC_LIST 0x34 ++#define EMAC_TX_DESC_LIST 0x20 ++ ++#define EMAC_RX_DO_CRC BIT(27) ++#define EMAC_RX_STRIP_FCS BIT(28) ++ ++#define LE32_BIT(x) (cpu_to_le32(BIT(x))) ++ ++#define EMAC_COULD_BE_USED_BY_DMA LE32_BIT(31) ++ ++/* Used in RX_CTL1*/ ++#define EMAC_RX_DMA_EN BIT(30) ++#define EMAC_RX_DMA_START BIT(31) ++/* Used in TX_CTL1*/ ++#define EMAC_TX_DMA_EN BIT(30) ++#define EMAC_TX_DMA_START BIT(31) ++ ++/* Used in RX_CTL0 */ ++#define EMAC_RX_RECEIVER_EN BIT(31) ++/* Used in TX_CTL0 */ ++#define EMAC_TX_TRANSMITTER_EN BIT(31) ++ ++/* Basic CTL0 */ ++#define EMAC_BCTL0_FD BIT(0) ++#define EMAC_BCTL0_SPEED_10 2 ++#define EMAC_BCTL0_SPEED_100 3 ++#define EMAC_BCTL0_SPEED_MASK GENMASK(3, 2) ++#define EMAC_BCTL0_SPEED_SHIFT 2 ++ ++#define EMAC_FLOW_RX 1 ++#define EMAC_FLOW_TX 2 ++ ++#define EMAC_TX_INT BIT(0) ++#define EMAC_TX_DMA_STOP_INT BIT(1) ++#define EMAC_TX_BUF_UA_INT BIT(2) ++#define EMAC_TX_TIMEOUT_INT BIT(3) ++#define EMAC_TX_UNDERFLOW_INT BIT(4) ++#define EMAC_TX_EARLY_INT BIT(5) ++#define EMAC_RX_INT BIT(8) ++#define EMAC_RX_BUF_UA_INT BIT(9) ++#define EMAC_RX_DMA_STOP_INT BIT(10) ++#define EMAC_RX_TIMEOUT_INT BIT(11) ++#define EMAC_RX_OVERFLOW_INT BIT(12) ++#define EMAC_RX_EARLY_INT BIT(13) ++#define EMAC_RGMII_STA_INT BIT(16) ++ ++/* Bits used in frame RX status */ ++#define EMAC_DSC_RX_FIRST BIT(9) ++#define EMAC_DSC_RX_LAST BIT(8) ++ ++/* Bits used in frame TX ctl */ ++#define EMAC_MAGIC_TX_BIT LE32_BIT(24) ++#define EMAC_TX_DO_CRC (LE32_BIT(27) | LE32_BIT(28)) ++#define EMAC_DSC_TX_FIRST LE32_BIT(29) ++#define EMAC_DSC_TX_LAST LE32_BIT(30) ++#define EMAC_WANT_INT LE32_BIT(31) ++ ++/* struct emac_variant - Describe an emac variant of sun8i-emac ++ * @default_syscon_value: Default value of the syscon EMAC register ++ * The default_syscon_value is also used for powering down the PHY ++ * @internal_phy: which PHY type is internal ++ * @support_mii: Does the SoC support MII ++ * @support_rmii: Does the SoC support RMII ++ * @support_rgmii: Does the SoC support RGMII ++ */ ++struct emac_variant { ++ u32 default_syscon_value; ++ int internal_phy; ++ bool support_mii; ++ bool support_rmii; ++ bool support_rgmii; ++}; ++ ++static const struct emac_variant emac_variant_h3 = { ++ .default_syscon_value = 0x58000, ++ .internal_phy = PHY_INTERFACE_MODE_MII, ++ .support_mii = true, ++ .support_rmii = true, ++ .support_rgmii = true ++}; ++ ++static const struct emac_variant emac_variant_a83t = { ++ .default_syscon_value = 0, ++ .internal_phy = 0, ++ .support_mii = true, ++ .support_rgmii = true ++}; ++ ++static const struct emac_variant emac_variant_a64 = { ++ .default_syscon_value = 0, ++ .internal_phy = 0, ++ .support_mii = true, ++ .support_rmii = true, ++ .support_rgmii = true ++}; ++ ++static const char const estats_str[][ETH_GSTRING_LEN] = { ++ /* errors */ ++ "rx_payload_error", ++ "rx_CRC_error", ++ "rx_phy_error", ++ "rx_length_error", ++ "rx_col_error", ++ "rx_header_error", ++ "rx_overflow_error", ++ "rx_saf_error", ++ "rx_daf_error", ++ "rx_buf_error", ++ "rx_invalid_error", ++ "tx_timeout", ++ /* misc infos */ ++ "tx_stop_queue", ++ "rx_dma_ua", ++ "rx_dma_stop", ++ "tx_dma_ua", ++ "tx_dma_stop", ++ "rx_hw_csum", ++ "tx_hw_csum", ++ /* interrupts */ ++ "rx_int", ++ "tx_int", ++ "tx_early_int", ++ "tx_underflow_int", ++ "tx_timeout_int", ++ "rx_early_int", ++ "rx_overflow_int", ++ "rx_timeout_int", ++ "rgmii_state_int", ++ /* debug */ ++ "tx_used_desc", ++ "napi_schedule", ++ "napi_underflow", ++}; ++ ++struct sun8i_emac_stats { ++ u64 rx_payload_error; ++ u64 rx_crc_error; ++ u64 rx_phy_error; ++ u64 rx_length_error; ++ u64 rx_col_error; ++ u64 rx_header_error; ++ u64 rx_overflow_error; ++ u64 rx_saf_fail; ++ u64 rx_daf_fail; ++ u64 rx_buf_error; ++ u64 rx_invalid_error; ++ u64 tx_timeout; ++ ++ u64 tx_stop_queue; ++ u64 rx_dma_ua; ++ u64 rx_dma_stop; ++ u64 tx_dma_ua; ++ u64 tx_dma_stop; ++ u64 rx_hw_csum; ++ u64 tx_hw_csum; ++ ++ u64 rx_int; ++ u64 tx_int; ++ u64 tx_early_int; ++ u64 tx_underflow_int; ++ u64 tx_timeout_int; ++ u64 rx_early_int; ++ u64 rx_overflow_int; ++ u64 rx_timeout_int; ++ u64 rgmii_state_int; ++ ++ u64 tx_used_desc; ++ u64 napi_schedule; ++ u64 napi_underflow; ++}; ++ ++/* The datasheet said that each descriptor can transfers up to 4096bytes ++ * But latter, a register documentation reduce that value to 2048 ++ * Anyway using 2048 cause strange behaviours and even BSP driver use 2047 ++ */ ++#define DESC_BUF_MAX 2044 ++ ++/* MAGIC value for knowing if a descriptor is available or not */ ++#define DCLEAN cpu_to_le32(BIT(16) | BIT(14) | BIT(12) | BIT(10) | BIT(9)) ++ ++/* struct dma_desc - Structure of DMA descriptor used by the hardware ++ * @status: Status of the frame written by HW, so RO for the ++ * driver (except for BIT(31) which is R/W) ++ * @ctl: Information on the frame written by the driver (INT, len,...) ++ * @buf_addr: physical address of the frame data ++ * @next: physical address of next dma_desc ++ */ ++struct dma_desc { ++ __le32 status; ++ __le32 ctl; ++ __le32 buf_addr; ++ __le32 next; ++}; ++ ++/* Describe how data from skb are DMA mapped (used in txinfo map member) */ ++#define MAP_SINGLE 1 ++#define MAP_PAGE 2 ++ ++/* Structure for storing information about data in TX ring buffer */ ++struct txinfo { ++ struct sk_buff *skb; ++ int map; ++}; ++ ++struct sun8i_emac_priv { ++ void __iomem *base; ++ struct regmap *regmap; ++ int irq; ++ struct device *dev; ++ struct net_device *ndev; ++ struct mii_bus *mdio; ++ struct napi_struct napi; ++ spinlock_t tx_lock;/* control the access of transmit descriptors */ ++ int duplex; ++ int speed; ++ int link; ++ int phy_interface; ++ const struct emac_variant *variant; ++ struct device_node *phy_node; ++ struct device_node *mdio_node; ++ struct clk *ahb_clk; ++ struct clk *ephy_clk; ++ bool use_internal_phy; ++ ++ struct reset_control *rst_mac; ++ struct reset_control *rst_ephy; ++ ++ struct dma_desc *dd_rx; ++ dma_addr_t dd_rx_phy; ++ struct dma_desc *dd_tx; ++ dma_addr_t dd_tx_phy; ++ struct sk_buff **rx_skb; ++ struct txinfo *txl; ++ ++ int nbdesc_tx; ++ int nbdesc_rx; ++ int tx_slot; ++ int tx_dirty; ++ int rx_dirty; ++ struct sun8i_emac_stats estats; ++ u32 msg_enable; ++ int flow_ctrl; ++ int pause; ++}; ++ ++static irqreturn_t sun8i_emac_dma_interrupt(int irq, void *dev_id); ++ ++static void rb_inc(int *p, const int max) ++{ ++ (*p)++; ++ (*p) %= max; ++} ++ ++/* Locking strategy: ++ * RX queue does not need any lock since only sun8i_emac_poll() access it. ++ * (All other RX modifiers (ringparam/ndo_stop) disable NAPI and so ++ * sun8i_emac_poll()) ++ * TX queue is handled by sun8i_emac_xmit(), sun8i_emac_complete_xmit() and ++ * sun8i_emac_tx_timeout() ++ * (All other RX modifiers (ringparam/ndo_stop) disable NAPI and stop queue) ++ * ++ * sun8i_emac_xmit() could fire only once (netif_tx_lock) ++ * sun8i_emac_complete_xmit() could fire only once (called from NAPI) ++ * sun8i_emac_tx_timeout() could fire only once (netif_tx_lock) and could not ++ * race with sun8i_emac_xmit (due to netif_tx_lock) and with ++ * sun8i_emac_complete_xmit which disable NAPI. ++ * ++ * So only sun8i_emac_xmit and sun8i_emac_complete_xmit could fire at the same ++ * time. ++ * But they never could modify the same descriptors: ++ * - sun8i_emac_complete_xmit() will modify only descriptors with empty status ++ * - sun8i_emac_xmit() will modify only descriptors set to DCLEAN ++ * Proper memory barriers ensure that descriptor set to DCLEAN could not be ++ * modified latter by sun8i_emac_complete_xmit(). ++ */ ++ ++/* Return the number of contiguous free descriptors ++ * starting from tx_slot ++ */ ++static int rb_tx_numfreedesc(struct net_device *ndev) ++{ ++ struct sun8i_emac_priv *priv = netdev_priv(ndev); ++ ++ if (priv->tx_slot < priv->tx_dirty) ++ return priv->tx_dirty - priv->tx_slot; ++ ++ return (priv->nbdesc_tx - priv->tx_slot) + priv->tx_dirty; ++} ++ ++/* sun8i_emac_rx_skb - Allocate a skb in a DMA descriptor ++ * ++ * @ndev: The net_device for this interface ++ * @i: index of slot to fill ++ * ++ * Refill a DMA descriptor with a fresh skb and map it for DMA. ++*/ ++static int sun8i_emac_rx_skb(struct net_device *ndev, int i) ++{ ++ struct sun8i_emac_priv *priv = netdev_priv(ndev); ++ struct dma_desc *ddesc; ++ struct sk_buff *skb; ++ ++ ddesc = priv->dd_rx + i; ++ ++ ddesc->ctl = 0; ++ ++ skb = netdev_alloc_skb_ip_align(ndev, DESC_BUF_MAX); ++ if (!skb) ++ return -ENOMEM; ++ ++ /* should not happen */ ++ if (unlikely(priv->rx_skb[i])) ++ dev_warn(priv->dev, "BUG: Leaking a skbuff\n"); ++ ++ priv->rx_skb[i] = skb; ++ ++ ddesc->buf_addr = dma_map_single(priv->dev, skb->data, ++ DESC_BUF_MAX, DMA_FROM_DEVICE); ++ if (dma_mapping_error(priv->dev, ddesc->buf_addr)) { ++ dev_err(priv->dev, "ERROR: Cannot map RX buffer for DMA\n"); ++ dev_kfree_skb(skb); ++ return -EFAULT; ++ } ++ /* We cannot direcly use cpu_to_le32() after dma_map_single ++ * since dma_mapping_error use it ++ */ ++ ddesc->buf_addr = cpu_to_le32(ddesc->buf_addr); ++ ddesc->ctl |= cpu_to_le32(DESC_BUF_MAX); ++ /* EMAC_COULD_BE_USED_BY_DMA must be the last value written */ ++ wmb(); ++ ddesc->status = EMAC_COULD_BE_USED_BY_DMA; ++ ++ return 0; ++} ++ ++static void sun8i_emac_stop_tx(struct net_device *ndev) ++{ ++ struct sun8i_emac_priv *priv = netdev_priv(ndev); ++ u32 v; ++ ++ netif_stop_queue(ndev); ++ ++ v = readl(priv->base + EMAC_TX_CTL0); ++ /* Disable transmitter after current reception */ ++ v &= ~EMAC_TX_TRANSMITTER_EN; ++ writel(v, priv->base + EMAC_TX_CTL0); ++ ++ v = readl(priv->base + EMAC_TX_CTL1); ++ /* Stop TX DMA */ ++ v &= ~EMAC_TX_DMA_EN; ++ writel(v, priv->base + EMAC_TX_CTL1); ++ ++ /* We must be sure that all is stopped before leaving this function */ ++ wmb(); ++} ++ ++static void sun8i_emac_stop_rx(struct net_device *ndev) ++{ ++ struct sun8i_emac_priv *priv = netdev_priv(ndev); ++ u32 v; ++ ++ v = readl(priv->base + EMAC_RX_CTL0); ++ /* Disable receiver after current reception */ ++ v &= ~EMAC_RX_RECEIVER_EN; ++ writel(v, priv->base + EMAC_RX_CTL0); ++ ++ v = readl(priv->base + EMAC_RX_CTL1); ++ /* Stop RX DMA */ ++ v &= ~EMAC_RX_DMA_EN; ++ writel(v, priv->base + EMAC_RX_CTL1); ++ ++ /* We must be sure that all is stopped before leaving this function */ ++ wmb(); ++} ++ ++static void sun8i_emac_start_rx(struct net_device *ndev) ++{ ++ struct sun8i_emac_priv *priv = netdev_priv(ndev); ++ u32 v; ++ ++ v = readl(priv->base + EMAC_RX_CTL0); ++ /* Enable receiver */ ++ v |= EMAC_RX_RECEIVER_EN; ++ writel(v, priv->base + EMAC_RX_CTL0); ++ ++ v = readl(priv->base + EMAC_RX_CTL1); ++ v |= EMAC_RX_DMA_START; ++ v |= EMAC_RX_DMA_EN; ++ writel(v, priv->base + EMAC_RX_CTL1); ++} ++ ++static void sun8i_emac_start_tx(struct net_device *ndev) ++{ ++ struct sun8i_emac_priv *priv = netdev_priv(ndev); ++ u32 v; ++ ++ v = readl(priv->base + EMAC_TX_CTL0); ++ v |= EMAC_TX_TRANSMITTER_EN; ++ writel(v, priv->base + EMAC_TX_CTL0); ++ ++ v = readl(priv->base + EMAC_TX_CTL1); ++ v |= EMAC_TX_DMA_START; ++ v |= EMAC_TX_DMA_EN; ++ writel(v, priv->base + EMAC_TX_CTL1); ++} ++ ++/* sun8i_emac_set_macaddr - Set MAC address for slot index ++ * ++ * @addr: the MAC address to set ++ * @index: The index of slot where to set address. ++ * ++ * The slot 0 is the main MAC address ++ */ ++static void sun8i_emac_set_macaddr(struct sun8i_emac_priv *priv, ++ const u8 *addr, int index) ++{ ++ u32 v; ++ ++ dev_info(priv->dev, "device MAC address slot %d %pM", index, addr); ++ ++ v = (addr[5] << 8) | addr[4]; ++ writel(v, priv->base + EMAC_MACADDR_HI + index * 8); ++ ++ v = (addr[3] << 24) | (addr[2] << 16) | (addr[1] << 8) | addr[0]; ++ writel(v, priv->base + EMAC_MACADDR_LO + index * 8); ++} ++ ++static void sun8i_emac_set_link_mode(struct sun8i_emac_priv *priv) ++{ ++ u32 v; ++ ++ v = readl(priv->base + EMAC_BASIC_CTL0); ++ ++ if (priv->duplex) ++ v |= EMAC_BCTL0_FD; ++ else ++ v &= ~EMAC_BCTL0_FD; ++ ++ v &= ~EMAC_BCTL0_SPEED_MASK; ++ ++ switch (priv->speed) { ++ case 1000: ++ break; ++ case 100: ++ v |= EMAC_BCTL0_SPEED_100 << EMAC_BCTL0_SPEED_SHIFT; ++ break; ++ case 10: ++ v |= EMAC_BCTL0_SPEED_10 << EMAC_BCTL0_SPEED_SHIFT; ++ break; ++ default: ++ dev_err(priv->dev, "Unsupported speed %d\n", priv->speed); ++ return; ++ } ++ ++ writel(v, priv->base + EMAC_BASIC_CTL0); ++} ++ ++static void sun8i_emac_flow_ctrl(struct sun8i_emac_priv *priv, int duplex, ++ int fc) ++{ ++ u32 flow = 0; ++ ++ flow = readl(priv->base + EMAC_RX_CTL0); ++ if (fc & EMAC_FLOW_RX) ++ flow |= BIT(16); ++ else ++ flow &= ~BIT(16); ++ writel(flow, priv->base + EMAC_RX_CTL0); ++ ++ flow = readl(priv->base + EMAC_TX_FLOW_CTL); ++ if (fc & EMAC_FLOW_TX) ++ flow |= BIT(0); ++ else ++ flow &= ~BIT(0); ++ writel(flow, priv->base + EMAC_TX_FLOW_CTL); ++} ++ ++/* Grab a frame into a skb from descriptor number i */ ++static int sun8i_emac_rx_from_ddesc(struct net_device *ndev, int i) ++{ ++ struct sk_buff *skb; ++ struct sun8i_emac_priv *priv = netdev_priv(ndev); ++ struct dma_desc *ddesc = priv->dd_rx + i; ++ int frame_len; ++ int rxcsum_done = 0; ++ u32 dstatus = le32_to_cpu(ddesc->status); ++ ++ if (ndev->features & NETIF_F_RXCSUM) ++ rxcsum_done = 1; ++ ++ /* bit0/bit7 work only on IPv4/IPv6 TCP traffic, ++ * (not on ARP for example) so we do not raise rx_errors/discard frame ++ */ ++ /* the checksum or length of received frame's payload is wrong*/ ++ if (dstatus & BIT(0)) { ++ priv->estats.rx_payload_error++; ++ rxcsum_done = 0; ++ } ++ ++ /* RX_CRC_ERR */ ++ if (dstatus & BIT(1)) { ++ priv->ndev->stats.rx_errors++; ++ priv->ndev->stats.rx_crc_errors++; ++ priv->estats.rx_crc_error++; ++ goto discard_frame; ++ } ++ ++ /* RX_PHY_ERR */ ++ if ((dstatus & BIT(3))) { ++ priv->ndev->stats.rx_errors++; ++ priv->estats.rx_phy_error++; ++ goto discard_frame; ++ } ++ ++ /* RX_LENGTH_ERR */ ++ if ((dstatus & BIT(4))) { ++ priv->ndev->stats.rx_errors++; ++ priv->ndev->stats.rx_length_errors++; ++ priv->estats.rx_length_error++; ++ goto discard_frame; ++ } ++ ++ /* RX_COL_ERR */ ++ if ((dstatus & BIT(6))) { ++ priv->ndev->stats.rx_errors++; ++ priv->estats.rx_col_error++; ++ goto discard_frame; ++ } ++ ++ /* RX_HEADER_ERR */ ++ if ((dstatus & BIT(7))) { ++ priv->estats.rx_header_error++; ++ rxcsum_done = 0; ++ } ++ ++ /* RX_OVERFLOW_ERR */ ++ if ((dstatus & BIT(11))) { ++ priv->ndev->stats.rx_over_errors++; ++ priv->estats.rx_overflow_error++; ++ goto discard_frame; ++ } ++ ++ /* RX_NO_ENOUGTH_BUF_ERR */ ++ if ((dstatus & BIT(14))) { ++ priv->ndev->stats.rx_errors++; ++ priv->estats.rx_buf_error++; ++ goto discard_frame; ++ } ++ ++ /* BIT(9) is for the first frame, not having it is bad since we do not ++ * handle Jumbo frame ++ */ ++ if ((dstatus & EMAC_DSC_RX_FIRST) == 0) { ++ priv->ndev->stats.rx_errors++; ++ priv->estats.rx_invalid_error++; ++ goto discard_frame; ++ } ++ ++ /* this frame is not the last */ ++ if ((dstatus & EMAC_DSC_RX_LAST) == 0) { ++ priv->ndev->stats.rx_errors++; ++ priv->estats.rx_invalid_error++; ++ goto discard_frame; ++ } ++ ++ frame_len = (dstatus >> 16) & 0x3FFF; ++ if (!(ndev->features & NETIF_F_RXFCS)) ++ frame_len -= ETH_FCS_LEN; ++ ++ skb = priv->rx_skb[i]; ++ ++ netif_dbg(priv, rx_status, priv->ndev, ++ "%s from %02d %pad len=%d status=%x st=%x\n", ++ __func__, i, &ddesc, frame_len, dstatus, ++ cpu_to_le32(ddesc->ctl)); ++ ++ skb_put(skb, frame_len); ++ ++ dma_unmap_single(priv->dev, le32_to_cpu(ddesc->buf_addr), DESC_BUF_MAX, ++ DMA_FROM_DEVICE); ++ skb->protocol = eth_type_trans(skb, priv->ndev); ++ if (rxcsum_done) { ++ skb->ip_summed = CHECKSUM_UNNECESSARY; ++ priv->estats.rx_hw_csum++; ++ } else { ++ skb->ip_summed = CHECKSUM_PARTIAL; ++ } ++ ++ priv->ndev->stats.rx_packets++; ++ priv->ndev->stats.rx_bytes += frame_len; ++ priv->rx_skb[i] = NULL; ++ ++ sun8i_emac_rx_skb(ndev, i); ++ napi_gro_receive(&priv->napi, skb); ++ ++ return 0; ++ /* If the frame need to be dropped, we simply reuse the buffer */ ++discard_frame: ++ ddesc->ctl = cpu_to_le32(DESC_BUF_MAX); ++ /* EMAC_COULD_BE_USED_BY_DMA must be the last value written */ ++ wmb(); ++ ddesc->status = EMAC_COULD_BE_USED_BY_DMA; ++ return 0; ++} ++ ++/* Iterate over dma_desc for finding completed xmit. ++ * ++ * The problem is: how to know that a descriptor is sent and not just in ++ * preparation. ++ * Need to have status=0 and st set but this is the state of first frame just ++ * before setting the own-by-DMA bit. ++ * The solution is to used the artificial value DCLEAN. ++ */ ++static int sun8i_emac_complete_xmit(struct net_device *ndev, int budget) ++{ ++ struct sun8i_emac_priv *priv = netdev_priv(ndev); ++ struct dma_desc *ddesc; ++ int frame_len; ++ int work = 0; ++ unsigned int bytes_compl = 0, pkts_compl = 0; ++ u32 dstatus; ++ ++ do { ++ ddesc = priv->dd_tx + priv->tx_dirty; ++ ++ if (ddesc->status & EMAC_COULD_BE_USED_BY_DMA) ++ goto xmit_end; ++ ++ if (ddesc->status == DCLEAN) ++ goto xmit_end; ++ ++ dstatus = cpu_to_le32(ddesc->status); ++ ++ if (ddesc->status == 0 && !ddesc->ctl) { ++ dev_err(priv->dev, "BUG: reached the void %d %d\n", ++ priv->tx_dirty, priv->tx_slot); ++ goto xmit_end; ++ } ++ ++ /* TX_UNDERFLOW_ERR */ ++ if (dstatus & BIT(1)) ++ priv->ndev->stats.tx_errors++; ++ /* TX_DEFER_ERR */ ++ if (dstatus & BIT(2)) ++ priv->ndev->stats.tx_errors++; ++ /* BIT 6:3 numbers of collisions */ ++ if (dstatus & 0x78) ++ priv->ndev->stats.collisions += ++ (dstatus & 0x78) >> 3; ++ /* TX_COL_ERR_1 */ ++ if (dstatus & BIT(8)) ++ priv->ndev->stats.tx_errors++; ++ /* TX_COL_ERR_0 */ ++ if (dstatus & BIT(9)) ++ priv->ndev->stats.tx_errors++; ++ /* TX_CRS_ERR */ ++ if (dstatus & BIT(10)) ++ priv->ndev->stats.tx_carrier_errors++; ++ /* TX_PAYLOAD_ERR */ ++ if (dstatus & BIT(12)) ++ priv->ndev->stats.tx_errors++; ++ /* TX_LENGTH_ERR */ ++ if (dstatus & BIT(14)) ++ priv->ndev->stats.tx_errors++; ++ /* TX_HEADER_ERR */ ++ if (dstatus & BIT(16)) ++ priv->ndev->stats.tx_errors++; ++ ++ frame_len = le32_to_cpu(ddesc->ctl) & 0x3FFF; ++ bytes_compl += frame_len; ++ ++ if (priv->txl[priv->tx_dirty].map == MAP_SINGLE) ++ dma_unmap_single(priv->dev, ++ le32_to_cpu(ddesc->buf_addr), ++ frame_len, DMA_TO_DEVICE); ++ else ++ dma_unmap_page(priv->dev, ++ le32_to_cpu(ddesc->buf_addr), ++ frame_len, DMA_TO_DEVICE); ++ /* we can free skb only on last frame */ ++ if (priv->txl[priv->tx_dirty].skb && ++ (ddesc->ctl & EMAC_DSC_TX_LAST)) { ++ dev_kfree_skb_irq(priv->txl[priv->tx_dirty].skb); ++ pkts_compl++; ++ } ++ ++ priv->txl[priv->tx_dirty].skb = NULL; ++ priv->txl[priv->tx_dirty].map = 0; ++ ddesc->ctl = 0; ++ /* setting status to DCLEAN is the last value to be set */ ++ wmb(); ++ ddesc->status = DCLEAN; ++ work++; ++ ++ rb_inc(&priv->tx_dirty, priv->nbdesc_tx); ++ ddesc = priv->dd_tx + priv->tx_dirty; ++ } while (ddesc->ctl && ++ !(ddesc->status & EMAC_COULD_BE_USED_BY_DMA) && ++ work < budget); ++ ++xmit_end: ++ netdev_completed_queue(ndev, pkts_compl, bytes_compl); ++ ++ /* if we don't have handled all packets */ ++ if (work < budget) ++ work = 0; ++ ++ if (netif_queue_stopped(ndev) && ++ rb_tx_numfreedesc(ndev) > MAX_SKB_FRAGS + 1) ++ netif_wake_queue(ndev); ++ return work; ++} ++ ++static int sun8i_emac_poll(struct napi_struct *napi, int budget) ++{ ++ struct sun8i_emac_priv *priv = ++ container_of(napi, struct sun8i_emac_priv, napi); ++ struct net_device *ndev = priv->ndev; ++ int worked; ++ struct dma_desc *ddesc; ++ ++ priv->estats.napi_schedule++; ++ worked = sun8i_emac_complete_xmit(ndev, budget); ++ ++ ddesc = priv->dd_rx + priv->rx_dirty; ++ while (!(ddesc->status & EMAC_COULD_BE_USED_BY_DMA) && ++ worked < budget) { ++ sun8i_emac_rx_from_ddesc(ndev, priv->rx_dirty); ++ worked++; ++ rb_inc(&priv->rx_dirty, priv->nbdesc_rx); ++ ddesc = priv->dd_rx + priv->rx_dirty; ++ }; ++ if (worked < budget) { ++ priv->estats.napi_underflow++; ++ napi_complete(&priv->napi); ++ writel(EMAC_RX_INT | EMAC_TX_INT, priv->base + EMAC_INT_EN); ++ } ++ return worked; ++} ++ ++static int sun8i_mdio_read(struct mii_bus *bus, int phy_addr, int phy_reg) ++{ ++ struct net_device *ndev = bus->priv; ++ struct sun8i_emac_priv *priv = netdev_priv(ndev); ++ int err; ++ u32 reg; ++ ++ err = readl_poll_timeout(priv->base + EMAC_MDIO_CMD, reg, ++ !(reg & MDIO_CMD_MII_BUSY), 100, 10000); ++ if (err) { ++ dev_err(priv->dev, "%s timeout %x\n", __func__, reg); ++ return err; ++ } ++ ++ reg &= ~MDIO_CMD_MII_WRITE; ++ reg &= ~MDIO_CMD_MII_PHY_REG_ADDR_MASK; ++ reg |= (phy_reg << MDIO_CMD_MII_PHY_REG_ADDR_SHIFT) & ++ MDIO_CMD_MII_PHY_REG_ADDR_MASK; ++ ++ reg &= ~MDIO_CMD_MII_PHY_ADDR_MASK; ++ ++ reg |= (phy_addr << MDIO_CMD_MII_PHY_ADDR_SHIFT) & ++ MDIO_CMD_MII_PHY_ADDR_MASK; ++ ++ reg |= MDIO_CMD_MII_BUSY; ++ ++ writel(reg, priv->base + EMAC_MDIO_CMD); ++ ++ err = readl_poll_timeout(priv->base + EMAC_MDIO_CMD, reg, ++ !(reg & MDIO_CMD_MII_BUSY), 100, 10000); ++ ++ if (err) { ++ dev_err(priv->dev, "%s timeout %x\n", __func__, reg); ++ return err; ++ } ++ ++ return readl(priv->base + EMAC_MDIO_DATA); ++} ++ ++static int sun8i_mdio_write(struct mii_bus *bus, int phy_addr, int phy_reg, ++ u16 data) ++{ ++ struct net_device *ndev = bus->priv; ++ struct sun8i_emac_priv *priv = netdev_priv(ndev); ++ u32 reg; ++ int err; ++ ++ err = readl_poll_timeout(priv->base + EMAC_MDIO_CMD, reg, ++ !(reg & MDIO_CMD_MII_BUSY), 100, 10000); ++ if (err) { ++ dev_err(priv->dev, "%s timeout %x\n", __func__, reg); ++ return err; ++ } ++ ++ reg &= ~MDIO_CMD_MII_PHY_REG_ADDR_MASK; ++ reg |= (phy_reg << MDIO_CMD_MII_PHY_REG_ADDR_SHIFT) & ++ MDIO_CMD_MII_PHY_REG_ADDR_MASK; ++ ++ reg &= ~MDIO_CMD_MII_PHY_ADDR_MASK; ++ reg |= (phy_addr << MDIO_CMD_MII_PHY_ADDR_SHIFT) & ++ MDIO_CMD_MII_PHY_ADDR_MASK; ++ ++ reg |= MDIO_CMD_MII_WRITE; ++ reg |= MDIO_CMD_MII_BUSY; ++ ++ writel(reg, priv->base + EMAC_MDIO_CMD); ++ writel(data, priv->base + EMAC_MDIO_DATA); ++ ++ err = readl_poll_timeout(priv->base + EMAC_MDIO_CMD, reg, ++ !(reg & MDIO_CMD_MII_BUSY), 100, 10000); ++ if (err) { ++ dev_err(priv->dev, "%s timeout %x\n", __func__, reg); ++ return err; ++ } ++ ++ return 0; ++} ++ ++static int sun8i_emac_mdio_register(struct net_device *ndev) ++{ ++ struct sun8i_emac_priv *priv = netdev_priv(ndev); ++ struct mii_bus *bus; ++ int ret; ++ ++ bus = mdiobus_alloc(); ++ if (!bus) { ++ netdev_err(ndev, "Failed to allocate a new mdio bus\n"); ++ return -ENOMEM; ++ } ++ ++ bus->name = dev_name(priv->dev); ++ bus->read = &sun8i_mdio_read; ++ bus->write = &sun8i_mdio_write; ++ snprintf(bus->id, MII_BUS_ID_SIZE, "%s-%x", bus->name, priv->dev->id); ++ ++ bus->parent = priv->dev; ++ bus->priv = ndev; ++ ++ ret = of_mdiobus_register(bus, priv->mdio_node); ++ if (ret) { ++ netdev_err(ndev, "Could not register a MDIO bus: %d\n", ret); ++ mdiobus_free(bus); ++ return ret; ++ } ++ ++ priv->mdio = bus; ++ ++ return 0; ++} ++ ++static void sun8i_emac_mdio_unregister(struct net_device *ndev) ++{ ++ struct sun8i_emac_priv *priv = netdev_priv(ndev); ++ ++ mdiobus_unregister(priv->mdio); ++ mdiobus_free(priv->mdio); ++} ++ ++/* Run within phydev->lock */ ++static void sun8i_emac_adjust_link(struct net_device *ndev) ++{ ++ struct sun8i_emac_priv *priv = netdev_priv(ndev); ++ struct phy_device *phydev = ndev->phydev; ++ int new_state = 0; ++ ++ netif_dbg(priv, link, priv->ndev, ++ "%s link=%x duplex=%x speed=%x\n", __func__, ++ phydev->link, phydev->duplex, phydev->speed); ++ if (!phydev) ++ return; ++ ++ if (phydev->link) { ++ if (phydev->duplex != priv->duplex) { ++ new_state = 1; ++ priv->duplex = phydev->duplex; ++ } ++ if (phydev->pause) ++ sun8i_emac_flow_ctrl(priv, phydev->duplex, ++ priv->flow_ctrl); ++ ++ if (phydev->speed != priv->speed) { ++ new_state = 1; ++ priv->speed = phydev->speed; ++ } ++ ++ if (priv->link == 0) { ++ new_state = 1; ++ priv->link = phydev->link; ++ } ++ ++ netif_dbg(priv, link, priv->ndev, ++ "%s new=%d link=%d pause=%d\n", ++ __func__, new_state, priv->link, phydev->pause); ++ if (new_state) ++ sun8i_emac_set_link_mode(priv); ++ } else if (priv->link != phydev->link) { ++ new_state = 1; ++ priv->link = 0; ++ priv->speed = 0; ++ priv->duplex = -1; ++ } ++ ++ if (new_state) ++ phy_print_status(phydev); ++} ++ ++/* H3 specific bits for EPHY */ ++#define H3_EPHY_ADDR_SHIFT 20 ++#define H3_EPHY_LED_POL BIT(17) /* 1: active low, 0: active high */ ++#define H3_EPHY_SHUTDOWN BIT(16) /* 1: shutdown, 0: power up */ ++#define H3_EPHY_SELECT BIT(15) /* 1: internal PHY, 0: external PHY */ ++ ++/* H3/A64 specific bits */ ++#define SYSCON_RMII_EN BIT(13) /* 1: enable RMII (overrides EPIT) */ ++ ++/* Generic system control EMAC_CLK bits */ ++#define SYSCON_ETXDC_MASK GENMASK(2, 0) ++#define SYSCON_ETXDC_SHIFT 10 ++#define SYSCON_ERXDC_MASK GENMASK(4, 0) ++#define SYSCON_ERXDC_SHIFT 5 ++/* EMAC PHY Interface Type */ ++#define SYSCON_EPIT BIT(2) /* 1: RGMII, 0: MII */ ++#define SYSCON_ETCS_MASK GENMASK(1, 0) ++#define SYSCON_ETCS_MII 0x0 ++#define SYSCON_ETCS_EXT_GMII 0x1 ++#define SYSCON_ETCS_INT_GMII 0x2 ++#define SYSCON_EMAC_REG 0x30 ++ ++static int sun8i_emac_set_syscon(struct net_device *ndev) ++{ ++ struct sun8i_emac_priv *priv = netdev_priv(ndev); ++ struct device_node *node = priv->dev->of_node; ++ int ret; ++ u32 reg, val; ++ ++ reg = priv->variant->default_syscon_value; ++ ++ if (priv->variant->internal_phy) { ++ if (!priv->use_internal_phy) { ++ /* switch to external PHY interface */ ++ reg &= ~H3_EPHY_SELECT; ++ } else { ++ reg |= H3_EPHY_SELECT; ++ reg &= ~H3_EPHY_SHUTDOWN; ++ ++ if (of_property_read_bool(priv->phy_node, ++ "allwinner,leds-active-low")) ++ reg |= H3_EPHY_LED_POL; ++ ++ ret = of_mdio_parse_addr(priv->dev, priv->phy_node); ++ if (ret < 0) { ++ netdev_err(ndev, "Could not parse MDIO addr\n"); ++ return ret; ++ } ++ /* of_mdio_parse_addr returns a valid (0 ~ 31) PHY ++ * address. No need to mask it again. ++ */ ++ reg |= ret << H3_EPHY_ADDR_SHIFT; ++ } ++ } ++ ++ if (!of_property_read_u32(node, "allwinner,tx-delay", &val)) { ++ if (val <= SYSCON_ETXDC_MASK) { ++ reg &= ~(SYSCON_ETXDC_MASK << SYSCON_ETXDC_SHIFT); ++ reg |= (val << SYSCON_ETXDC_SHIFT); ++ } else { ++ netdev_warn(ndev, "Invalid TX clock delay: %d\n", val); ++ } ++ } ++ ++ if (!of_property_read_u32(node, "allwinner,rx-delay", &val)) { ++ if (val <= SYSCON_ERXDC_MASK) { ++ reg &= ~(SYSCON_ERXDC_MASK << SYSCON_ERXDC_SHIFT); ++ reg |= (val << SYSCON_ERXDC_SHIFT); ++ } else { ++ netdev_warn(ndev, "Invalid RX clock delay: %d\n", val); ++ } ++ } ++ ++ /* Clear interface mode bits */ ++ reg &= ~(SYSCON_ETCS_MASK | SYSCON_EPIT); ++ if (priv->variant->support_rmii) ++ reg &= ~SYSCON_RMII_EN; ++ ++ switch (priv->phy_interface) { ++ case PHY_INTERFACE_MODE_MII: ++ /* default */ ++ break; ++ case PHY_INTERFACE_MODE_RGMII: ++ reg |= SYSCON_EPIT | SYSCON_ETCS_INT_GMII; ++ break; ++ case PHY_INTERFACE_MODE_RMII: ++ reg |= SYSCON_RMII_EN | SYSCON_ETCS_EXT_GMII; ++ break; ++ default: ++ netdev_err(ndev, "Unsupported interface mode: %s", ++ phy_modes(priv->phy_interface)); ++ return -EINVAL; ++ } ++ ++ regmap_write(priv->regmap, SYSCON_EMAC_REG, reg); ++ ++ return 0; ++} ++ ++static void sun8i_emac_unset_syscon(struct net_device *ndev) ++{ ++ struct sun8i_emac_priv *priv = netdev_priv(ndev); ++ u32 reg = priv->variant->default_syscon_value; ++ ++ regmap_write(priv->regmap, SYSCON_EMAC_REG, reg); ++} ++ ++/* Set Management Data Clock, must be call after device reset */ ++static void sun8i_emac_set_mdc(struct net_device *ndev) ++{ ++ struct sun8i_emac_priv *priv = netdev_priv(ndev); ++ unsigned long rate; ++ u32 reg; ++ ++ rate = clk_get_rate(priv->ahb_clk); ++ if (rate > 160000000) ++ reg = 0x3 << 20; /* AHB / 128 */ ++ else if (rate > 80000000) ++ reg = 0x2 << 20; /* AHB / 64 */ ++ else if (rate > 40000000) ++ reg = 0x1 << 20; /* AHB / 32 */ ++ else ++ reg = 0x0 << 20; /* AHB / 16 */ ++ netif_dbg(priv, link, ndev, "MDC auto : %x\n", reg); ++ writel(reg, priv->base + EMAC_MDIO_CMD); ++} ++ ++/* "power" the device, by enabling clk/reset/regulators */ ++static int sun8i_emac_power(struct net_device *ndev) ++{ ++ struct sun8i_emac_priv *priv = netdev_priv(ndev); ++ int ret; ++ ++ ret = clk_prepare_enable(priv->ahb_clk); ++ if (ret) { ++ netdev_err(ndev, "Could not enable AHB clock\n"); ++ return ret; ++ } ++ ++ if (priv->rst_mac) { ++ ret = reset_control_deassert(priv->rst_mac); ++ if (ret) { ++ netdev_err(ndev, "Could not deassert reset\n"); ++ goto err_reset; ++ } ++ } ++ ++ if (priv->ephy_clk) { ++ ret = clk_prepare_enable(priv->ephy_clk); ++ if (ret) { ++ netdev_err(ndev, "Could not enable EPHY clock\n"); ++ goto err_ephy_clk; ++ } ++ } ++ ++ if (priv->rst_ephy) { ++ ret = reset_control_deassert(priv->rst_ephy); ++ if (ret) { ++ netdev_err(ndev, "Could not deassert EPHY reset\n"); ++ goto err_ephy_reset; ++ } ++ } ++ ++ return 0; ++ ++err_ephy_reset: ++ if (priv->ephy_clk) ++ clk_disable_unprepare(priv->ephy_clk); ++err_ephy_clk: ++ if (priv->rst_mac) ++ reset_control_assert(priv->rst_mac); ++err_reset: ++ clk_disable_unprepare(priv->ahb_clk); ++ return ret; ++} ++ ++/* "Unpower" the device, disabling clocks and regulators, asserting reset */ ++static void sun8i_emac_unpower(struct net_device *ndev) ++{ ++ struct sun8i_emac_priv *priv = netdev_priv(ndev); ++ ++ if (priv->rst_ephy) ++ reset_control_assert(priv->rst_ephy); ++ ++ if (priv->ephy_clk) ++ clk_disable_unprepare(priv->ephy_clk); ++ ++ if (priv->rst_mac) ++ reset_control_assert(priv->rst_mac); ++ ++ clk_disable_unprepare(priv->ahb_clk); ++} ++ ++static int sun8i_emac_init(struct net_device *ndev) ++{ ++ struct sun8i_emac_priv *priv = netdev_priv(ndev); ++ struct device_node *node = priv->dev->of_node; ++ const u8 *addr; ++ ++ /* Try to get MAC address from DT, or assign a random one */ ++ addr = of_get_mac_address(node); ++ if (addr) ++ ether_addr_copy(ndev->dev_addr, addr); ++ else ++ eth_hw_addr_random(ndev); ++ ++ return 0; ++} ++ ++static int sun8i_emac_mdio_probe(struct net_device *ndev) ++{ ++ struct sun8i_emac_priv *priv = netdev_priv(ndev); ++ struct phy_device *phydev = NULL; ++ ++ phydev = of_phy_connect(ndev, priv->phy_node, &sun8i_emac_adjust_link, ++ 0, priv->phy_interface); ++ ++ if (!phydev) { ++ netdev_err(ndev, "Could not attach to PHY\n"); ++ return -ENODEV; ++ } ++ ++ phy_attached_info(phydev); ++ ++ /* mask with MAC supported features */ ++ phydev->supported &= PHY_GBIT_FEATURES; ++ phydev->advertising = phydev->supported; ++ ++ priv->link = 0; ++ priv->speed = 0; ++ priv->duplex = -1; ++ ++ return 0; ++} ++ ++/* Allocate both RX and TX ring buffer and init them ++ * This function also write the startbase of thoses ring in the device. ++ * All structures that help managing thoses rings are also handled ++ * by this functions (rx_skb/txl) ++ */ ++static int sun8i_emac_alloc_rings(struct net_device *ndev) ++{ ++ struct sun8i_emac_priv *priv = netdev_priv(ndev); ++ struct dma_desc *ddesc; ++ int err, i; ++ ++ priv->rx_skb = kcalloc(priv->nbdesc_rx, sizeof(struct sk_buff *), ++ GFP_KERNEL); ++ if (!priv->rx_skb) { ++ err = -ENOMEM; ++ goto rx_skb_error; ++ } ++ priv->txl = kcalloc(priv->nbdesc_tx, sizeof(struct txinfo), GFP_KERNEL); ++ if (!priv->txl) { ++ err = -ENOMEM; ++ goto tx_error; ++ } ++ ++ /* allocate/init RX ring */ ++ priv->dd_rx = dma_zalloc_coherent(priv->dev, ++ priv->nbdesc_rx * sizeof(struct dma_desc), ++ &priv->dd_rx_phy, GFP_KERNEL); ++ if (!priv->dd_rx) { ++ dev_err(priv->dev, "ERROR: cannot allocate DMA RX buffer"); ++ err = -ENOMEM; ++ goto dma_rx_error; ++ } ++ ddesc = priv->dd_rx; ++ for (i = 0; i < priv->nbdesc_rx; i++) { ++ sun8i_emac_rx_skb(ndev, i); ++ ddesc->next = cpu_to_le32(priv->dd_rx_phy + (i + 1) ++ * sizeof(struct dma_desc)); ++ ddesc++; ++ } ++ /* last descriptor point back to first one */ ++ ddesc--; ++ ddesc->next = cpu_to_le32(priv->dd_rx_phy); ++ ++ /* allocate/init TX ring */ ++ priv->dd_tx = dma_zalloc_coherent(priv->dev, ++ priv->nbdesc_tx * sizeof(struct dma_desc), ++ &priv->dd_tx_phy, GFP_KERNEL); ++ if (!priv->dd_tx) { ++ dev_err(priv->dev, "ERROR: cannot allocate DMA TX buffer"); ++ err = -ENOMEM; ++ goto dma_tx_error; ++ } ++ ddesc = priv->dd_tx; ++ for (i = 0; i < priv->nbdesc_tx; i++) { ++ ddesc->status = DCLEAN; ++ ddesc->ctl = 0; ++ ddesc->next = cpu_to_le32(priv->dd_tx_phy + (i + 1) ++ * sizeof(struct dma_desc)); ++ ddesc++; ++ } ++ /* last descriptor point back to first one */ ++ ddesc--; ++ ddesc->next = cpu_to_le32(priv->dd_tx_phy); ++ i--; ++ ++ priv->tx_slot = 0; ++ priv->tx_dirty = 0; ++ priv->rx_dirty = 0; ++ ++ /* write start of RX ring descriptor */ ++ writel(priv->dd_rx_phy, priv->base + EMAC_RX_DESC_LIST); ++ /* write start of TX ring descriptor */ ++ writel(priv->dd_tx_phy, priv->base + EMAC_TX_DESC_LIST); ++ ++ return 0; ++dma_tx_error: ++ dma_free_coherent(priv->dev, priv->nbdesc_rx * sizeof(struct dma_desc), ++ priv->dd_rx, priv->dd_rx_phy); ++dma_rx_error: ++ kfree(priv->txl); ++tx_error: ++ kfree(priv->rx_skb); ++rx_skb_error: ++ return err; ++} ++ ++static int sun8i_emac_open(struct net_device *ndev) ++{ ++ struct sun8i_emac_priv *priv = netdev_priv(ndev); ++ int err; ++ u32 v; ++ ++ err = sun8i_emac_power(ndev); ++ if (err) ++ return err; ++ ++ err = request_irq(priv->irq, sun8i_emac_dma_interrupt, 0, ++ dev_name(priv->dev), ndev); ++ if (err) { ++ dev_err(priv->dev, "Cannot request IRQ: %d\n", err); ++ goto err_power; ++ } ++ ++ /* Set interface mode (and configure internal PHY on H3) */ ++ err = sun8i_emac_set_syscon(ndev); ++ if (err) ++ goto err_irq; ++ ++ /* Do SOFT RST */ ++ v = readl(priv->base + EMAC_BASIC_CTL1); ++ writel(v | 0x01, priv->base + EMAC_BASIC_CTL1); ++ ++ err = readl_poll_timeout(priv->base + EMAC_BASIC_CTL1, v, ++ !(v & 0x01), 100, 10000); ++ if (err) { ++ dev_err(priv->dev, "EMAC reset timeout\n"); ++ err = -EFAULT; ++ goto err_syscon; ++ } ++ ++ sun8i_emac_set_mdc(ndev); ++ ++ err = sun8i_emac_mdio_register(ndev); ++ if (err) ++ goto err_syscon; ++ ++ err = sun8i_emac_mdio_probe(ndev); ++ if (err) ++ goto err_syscon; ++ ++ /* DMA */ ++ v = (8 << 24);/* burst len */ ++ writel(v, priv->base + EMAC_BASIC_CTL1); ++ ++ writel(EMAC_RX_INT | EMAC_TX_INT, priv->base + EMAC_INT_EN); ++ ++ v = readl(priv->base + EMAC_RX_CTL0); ++ /* CHECK_CRC */ ++ if (ndev->features & NETIF_F_RXCSUM) ++ v |= EMAC_RX_DO_CRC; ++ else ++ v &= ~EMAC_RX_DO_CRC; ++ /* STRIP_FCS */ ++ if (ndev->features & NETIF_F_RXFCS) ++ v &= ~EMAC_RX_STRIP_FCS; ++ else ++ v |= EMAC_RX_STRIP_FCS; ++ writel(v, priv->base + EMAC_RX_CTL0); ++ ++ v = readl(priv->base + EMAC_TX_CTL1); ++ /* TX_MD Transmission starts after a full frame located in TX DMA FIFO*/ ++ v |= BIT(1); ++ /* Undocumented bit (called TX_NEXT_FRM in BSP), the original comment is ++ * "Operating on second frame increase the performance ++ * especially when transmit store-and-forward is used." ++ */ ++ v |= BIT(2); ++ writel(v, priv->base + EMAC_TX_CTL1); ++ ++ v = readl(priv->base + EMAC_RX_CTL1); ++ /* RX_MD RX DMA reads data from RX DMA FIFO to host memory after a ++ * complete frame has been written to RX DMA FIFO ++ */ ++ v |= BIT(1); ++ writel(v, priv->base + EMAC_RX_CTL1); ++ ++ sun8i_emac_set_macaddr(priv, ndev->dev_addr, 0); ++ ++ err = sun8i_emac_alloc_rings(ndev); ++ if (err) { ++ netdev_err(ndev, "Fail to allocate rings\n"); ++ goto err_mdio; ++ } ++ ++ phy_start(ndev->phydev); ++ ++ sun8i_emac_start_rx(ndev); ++ sun8i_emac_start_tx(ndev); ++ ++ netif_napi_add(ndev, &priv->napi, sun8i_emac_poll, 64); ++ napi_enable(&priv->napi); ++ netif_start_queue(ndev); ++ ++ return 0; ++err_mdio: ++ phy_disconnect(ndev->phydev); ++err_syscon: ++ sun8i_emac_unset_syscon(ndev); ++err_irq: ++ free_irq(priv->irq, ndev); ++err_power: ++ sun8i_emac_unpower(ndev); ++ return err; ++} ++ ++/* Clean the TX ring of any accepted skb for xmit */ ++static void sun8i_emac_tx_clean(struct net_device *ndev) ++{ ++ struct sun8i_emac_priv *priv = netdev_priv(ndev); ++ int i; ++ struct dma_desc *ddesc; ++ int frame_len; ++ ++ for (i = 0; i < priv->nbdesc_tx; i++) { ++ if (priv->txl[i].skb) { ++ ddesc = priv->dd_tx + i; ++ frame_len = le32_to_cpu(ddesc->ctl) & 0x3FFF; ++ switch (priv->txl[i].map) { ++ case MAP_SINGLE: ++ dma_unmap_single(priv->dev, ++ le32_to_cpu(ddesc->buf_addr), ++ frame_len, DMA_TO_DEVICE); ++ break; ++ case MAP_PAGE: ++ dma_unmap_page(priv->dev, ++ le32_to_cpu(ddesc->buf_addr), ++ frame_len, DMA_TO_DEVICE); ++ break; ++ default: ++ dev_err(priv->dev, "Trying to free an empty slot\n"); ++ continue; ++ } ++ dev_kfree_skb_any(priv->txl[i].skb); ++ priv->txl[i].skb = NULL; ++ ddesc->ctl = 0; ++ ddesc->status = DCLEAN; ++ } ++ } ++ priv->tx_slot = 0; ++ priv->tx_dirty = 0; ++} ++ ++/* Clean the RX ring */ ++static void sun8i_emac_rx_clean(struct net_device *ndev) ++{ ++ struct sun8i_emac_priv *priv = netdev_priv(ndev); ++ int i; ++ struct dma_desc *ddesc; ++ ++ /* clean RX ring */ ++ for (i = 0; i < priv->nbdesc_rx; i++) ++ if (priv->rx_skb[i]) { ++ ddesc = priv->dd_rx + i; ++ dma_unmap_single(priv->dev, ++ le32_to_cpu(ddesc->buf_addr), ++ DESC_BUF_MAX, DMA_FROM_DEVICE); ++ dev_kfree_skb_any(priv->rx_skb[i]); ++ priv->rx_skb[i] = NULL; ++ } ++} ++ ++static int sun8i_emac_stop(struct net_device *ndev) ++{ ++ struct sun8i_emac_priv *priv = netdev_priv(ndev); ++ ++ napi_disable(&priv->napi); ++ ++ sun8i_emac_stop_tx(ndev); ++ sun8i_emac_stop_rx(ndev); ++ ++ phy_stop(ndev->phydev); ++ phy_disconnect(ndev->phydev); ++ ++ sun8i_emac_mdio_unregister(ndev); ++ ++ sun8i_emac_unset_syscon(ndev); ++ ++ free_irq(priv->irq, ndev); ++ ++ sun8i_emac_rx_clean(ndev); ++ sun8i_emac_tx_clean(ndev); ++ ++ kfree(priv->rx_skb); ++ kfree(priv->txl); ++ ++ dma_free_coherent(priv->dev, priv->nbdesc_rx * sizeof(struct dma_desc), ++ priv->dd_rx, priv->dd_rx_phy); ++ dma_free_coherent(priv->dev, priv->nbdesc_tx * sizeof(struct dma_desc), ++ priv->dd_tx, priv->dd_tx_phy); ++ ++ sun8i_emac_unpower(ndev); ++ ++ return 0; ++} ++ ++static netdev_tx_t sun8i_emac_xmit(struct sk_buff *skb, struct net_device *ndev) ++{ ++ struct sun8i_emac_priv *priv = netdev_priv(ndev); ++ struct dma_desc *ddesc; ++ struct dma_desc *first; ++ int i = 0, rbd_first; ++ unsigned int len, fraglen, tlen; ++ u32 v; ++ int n; ++ int nf; ++ const skb_frag_t *frag; ++ int do_csum = 0; ++ ++ if (skb_put_padto(skb, ETH_ZLEN)) ++ return NETDEV_TX_OK; ++ len = skb_headlen(skb); ++ ++ n = skb_shinfo(skb)->nr_frags; ++ ++ if (skb->ip_summed == CHECKSUM_PARTIAL) { ++ do_csum = 1; ++ priv->estats.tx_hw_csum++; ++ } ++ netif_dbg(priv, tx_queued, ndev, "%s len=%u skblen=%u %x\n", __func__, ++ len, skb->len, ++ (skb->ip_summed == CHECKSUM_PARTIAL)); ++ ++ /* check for contigous space ++ * We need at least 1(skb->data) + n(numfrags) + 1(one clean slot) ++ */ ++ if (rb_tx_numfreedesc(ndev) < n + 2) { ++ dev_err_ratelimited(priv->dev, "BUG!: TX is full %d %d\n", ++ priv->tx_dirty, priv->tx_slot); ++ netif_stop_queue(ndev); ++ return NETDEV_TX_BUSY; ++ } ++ i = priv->tx_slot; ++ ++ ddesc = priv->dd_tx + i; ++ first = priv->dd_tx + i; ++ rbd_first = i; ++ ++ ddesc->buf_addr = dma_map_single(priv->dev, skb->data, len, ++ DMA_TO_DEVICE); ++ if (dma_mapping_error(priv->dev, ddesc->buf_addr)) { ++ dev_err(priv->dev, "ERROR: Cannot map buffer for DMA\n"); ++ goto xmit_error; ++ } ++ /* We cannot direcly use cpu_to_le32() after dma_map_single ++ * since dma_mapping_error use it ++ */ ++ ddesc->buf_addr = cpu_to_le32(ddesc->buf_addr); ++ priv->txl[i].map = MAP_SINGLE; ++ priv->txl[i].skb = skb; ++ ++ tlen = len; ++ ddesc->ctl = le32_to_cpu(len); ++ /* Undocumented bit that make it works ++ * Without it, packets never be sent on H3 SoC ++ */ ++ ddesc->ctl |= EMAC_MAGIC_TX_BIT; ++ if (do_csum) ++ ddesc->ctl |= EMAC_TX_DO_CRC; ++ ++ /* handle fragmented skb, one descriptor per fragment */ ++ for (nf = 0; nf < n; nf++) { ++ frag = &skb_shinfo(skb)->frags[nf]; ++ rb_inc(&i, priv->nbdesc_tx); ++ priv->txl[i].skb = skb; ++ ddesc = priv->dd_tx + i; ++ fraglen = skb_frag_size(frag); ++ ddesc->ctl = le32_to_cpu(fraglen); ++ tlen += fraglen, ++ ddesc->ctl |= EMAC_MAGIC_TX_BIT; ++ if (do_csum) ++ ddesc->ctl |= EMAC_TX_DO_CRC; ++ ++ ddesc->buf_addr = skb_frag_dma_map(priv->dev, frag, 0, ++ fraglen, DMA_TO_DEVICE); ++ if (dma_mapping_error(priv->dev, ddesc->buf_addr)) { ++ dev_err(priv->dev, "Cannot map buffer for DMA\n"); ++ goto xmit_error; ++ } ++ /* Cannot directly use cpu_to_le32() after skb_frag_dma_map ++ * since dma_mapping_error use it ++ */ ++ ddesc->buf_addr = cpu_to_le32(ddesc->buf_addr); ++ priv->txl[i].map = MAP_PAGE; ++ ddesc->status = EMAC_COULD_BE_USED_BY_DMA; ++ } ++ ++ /* frame end */ ++ ddesc->ctl |= EMAC_DSC_TX_LAST; ++ /* We want an interrupt after transmission */ ++ ddesc->ctl |= EMAC_WANT_INT; ++ ++ rb_inc(&i, priv->nbdesc_tx); ++ ++ /* This line was previously after DMA start, but with that we hit a ++ * small race with complete_xmit() where we complete more data than ++ * sent. ++ * The packet is sent just after EMAC_COULD_BE_USED_BY_DMA flag set and ++ * complete_xmit fire just after before netdev_sent_queue(). ++ * This race could be observed only when overflowing a gigabit line. ++ */ ++ netdev_sent_queue(ndev, skb->len); ++ ++ /* frame begin */ ++ first->ctl |= EMAC_DSC_TX_FIRST; ++ wmb();/* EMAC_COULD_BE_USED_BY_DMA must be the last value written */ ++ first->status = EMAC_COULD_BE_USED_BY_DMA; ++ priv->tx_slot = i; ++ ++ /* Trying to optimize this (recording DMA start/stop) seems ++ * to lead to errors. So we always start DMA. ++ */ ++ v = readl(priv->base + EMAC_TX_CTL1); ++ v |= EMAC_TX_DMA_START; ++ v |= EMAC_TX_DMA_EN; ++ writel_relaxed(v, priv->base + EMAC_TX_CTL1); ++ ++ if (rb_tx_numfreedesc(ndev) < MAX_SKB_FRAGS + 1) { ++ netif_stop_queue(ndev); ++ priv->estats.tx_stop_queue++; ++ } ++ priv->estats.tx_used_desc = rb_tx_numfreedesc(ndev); ++ priv->ndev->stats.tx_packets++; ++ priv->ndev->stats.tx_bytes += tlen; ++ ++ return NETDEV_TX_OK; ++ ++xmit_error: ++ /* destroy skb and return TX OK Documentation/DMA-API-HOWTO.txt */ ++ /* clean descritors from rbd_first to i */ ++ ddesc->ctl = 0; ++ /* setting status to DCLEAN is the last value to be set */ ++ wmb(); ++ ddesc->status = DCLEAN; ++ do { ++ ddesc = priv->dd_tx + rbd_first; ++ ddesc->ctl = 0; ++ /* setting status to DCLEAN is the last value to be set */ ++ wmb(); ++ ddesc->status = DCLEAN; ++ rb_inc(&rbd_first, priv->nbdesc_tx); ++ } while (rbd_first != i); ++ dev_kfree_skb_any(skb); ++ return NETDEV_TX_OK; ++} ++ ++static int sun8i_emac_change_mtu(struct net_device *ndev, int new_mtu) ++{ ++ struct sun8i_emac_priv *priv = netdev_priv(ndev); ++ int max_mtu; ++ ++ dev_info(priv->dev, "%s set MTU to %d\n", __func__, new_mtu); ++ ++ if (netif_running(ndev)) { ++ dev_err(priv->dev, "%s: must be stopped to change its MTU\n", ++ ndev->name); ++ return -EBUSY; ++ } ++ ++ max_mtu = SKB_MAX_HEAD(NET_SKB_PAD + NET_IP_ALIGN); ++ ++ if ((new_mtu < 68) || (new_mtu > max_mtu)) { ++ dev_err(priv->dev, "%s: invalid MTU, max MTU is: %d\n", ++ ndev->name, max_mtu); ++ return -EINVAL; ++ } ++ ++ ndev->mtu = new_mtu; ++ netdev_update_features(ndev); ++ return 0; ++} ++ ++static int sun8i_emac_set_features(struct net_device *ndev, ++ netdev_features_t features) ++{ ++ struct sun8i_emac_priv *priv = netdev_priv(ndev); ++ u32 v; ++ ++ v = readl(priv->base + EMAC_BASIC_CTL0); ++ if (features & NETIF_F_LOOPBACK && netif_running(ndev)) { ++ netif_info(priv, hw, ndev, "Set loopback features"); ++ v |= BIT(1); ++ } else { ++ netif_info(priv, hw, ndev, "Unset loopback features"); ++ v &= ~BIT(1); ++ } ++ writel(v, priv->base + EMAC_BASIC_CTL0); ++ ++ v = readl(priv->base + EMAC_RX_CTL0); ++ if (features & NETIF_F_RXCSUM) { ++ v |= EMAC_RX_DO_CRC; ++ netif_info(priv, hw, ndev, "Doing RX CRC check by hardware"); ++ } else { ++ v &= ~EMAC_RX_DO_CRC; ++ netif_info(priv, hw, ndev, "No RX CRC check by hardware"); ++ } ++ if (features & NETIF_F_RXFCS) { ++ v &= ~EMAC_RX_STRIP_FCS; ++ netif_info(priv, hw, ndev, "Keep FCS"); ++ } else { ++ v |= EMAC_RX_STRIP_FCS; ++ netif_info(priv, hw, ndev, "Strip FCS"); ++ } ++ writel(v, priv->base + EMAC_RX_CTL0); ++ ++ netif_dbg(priv, drv, ndev, "%s %llx %x\n", __func__, features, v); ++ ++ return 0; ++} ++ ++static void sun8i_emac_set_rx_mode(struct net_device *ndev) ++{ ++ struct sun8i_emac_priv *priv = netdev_priv(ndev); ++ u32 v = 0; ++ int i = 0; ++ struct netdev_hw_addr *ha; ++ ++ /* Receive all multicast frames */ ++ v |= BIT(16); ++ /* Receive all control frames */ ++ v |= BIT(13); ++ if (ndev->flags & IFF_PROMISC) ++ v |= BIT(1); ++ if (netdev_uc_count(ndev) > 7) { ++ v |= BIT(1); ++ } else { ++ netdev_for_each_uc_addr(ha, ndev) { ++ i++; ++ sun8i_emac_set_macaddr(priv, ha->addr, i); ++ } ++ } ++ writel(v, priv->base + EMAC_RX_FRM_FLT); ++} ++ ++static void sun8i_emac_tx_timeout(struct net_device *ndev) ++{ ++ struct sun8i_emac_priv *priv = netdev_priv(ndev); ++ ++ netdev_err(ndev, "%s\n", __func__); ++ ++ sun8i_emac_stop_tx(ndev); ++ ++ sun8i_emac_tx_clean(ndev); ++ ++ /* write start of the new TX ring descriptor */ ++ writel(priv->dd_tx_phy, priv->base + EMAC_TX_DESC_LIST); ++ ++ sun8i_emac_start_tx(ndev); ++ ++ netdev_reset_queue(ndev); ++ ++ priv->estats.tx_timeout++; ++ ndev->stats.tx_errors++; ++ netif_wake_queue(ndev); ++} ++ ++static int sun8i_emac_ioctl(struct net_device *ndev, struct ifreq *rq, int cmd) ++{ ++ struct phy_device *phydev = ndev->phydev; ++ ++ if (!netif_running(ndev)) ++ return -EINVAL; ++ ++ if (!phydev) ++ return -ENODEV; ++ ++ return phy_mii_ioctl(phydev, rq, cmd); ++} ++ ++static int sun8i_emac_check_if_running(struct net_device *ndev) ++{ ++ if (!netif_running(ndev)) ++ return -EINVAL; ++ return 0; ++} ++ ++static int sun8i_emac_get_sset_count(struct net_device *ndev, int sset) ++{ ++ switch (sset) { ++ case ETH_SS_STATS: ++ return ARRAY_SIZE(estats_str); ++ } ++ return -EOPNOTSUPP; ++} ++ ++static int sun8i_emac_ethtool_get_settings(struct net_device *ndev, ++ struct ethtool_cmd *cmd) ++{ ++ struct phy_device *phy = ndev->phydev; ++ struct sun8i_emac_priv *priv = netdev_priv(ndev); ++ ++ if (!phy) { ++ netdev_err(ndev, "%s: %s: PHY is not registered\n", ++ __func__, ndev->name); ++ return -ENODEV; ++ } ++ ++ if (!netif_running(ndev)) { ++ dev_err(priv->dev, "interface disabled: we cannot track link speed / duplex setting\n"); ++ return -EBUSY; ++ } ++ ++ return phy_ethtool_gset(phy, cmd); ++} ++ ++static int sun8i_emac_ethtool_set_settings(struct net_device *ndev, ++ struct ethtool_cmd *cmd) ++{ ++ struct phy_device *phy = ndev->phydev; ++ ++ return phy_ethtool_sset(phy, cmd); ++} ++ ++static void sun8i_emac_ethtool_getdrvinfo(struct net_device *ndev, ++ struct ethtool_drvinfo *info) ++{ ++ strlcpy(info->driver, "sun8i_emac", sizeof(info->driver)); ++ strcpy(info->version, "00"); ++ info->fw_version[0] = '\0'; ++} ++ ++static void sun8i_emac_ethtool_stats(struct net_device *ndev, ++ struct ethtool_stats *dummy, u64 *data) ++{ ++ struct sun8i_emac_priv *priv = netdev_priv(ndev); ++ ++ memcpy(data, &priv->estats, ++ sun8i_emac_get_sset_count(ndev, ETH_SS_STATS) * sizeof(u64)); ++} ++ ++static void sun8i_emac_ethtool_strings(struct net_device *dev, u32 stringset, ++ u8 *buffer) ++{ ++ switch (stringset) { ++ case ETH_SS_STATS: ++ memcpy(buffer, &estats_str, sizeof(estats_str)); ++ break; ++ } ++} ++ ++static u32 sun8i_emac_ethtool_getmsglevel(struct net_device *ndev) ++{ ++ struct sun8i_emac_priv *priv = netdev_priv(ndev); ++ ++ return priv->msg_enable; ++} ++ ++static void sun8i_emac_ethtool_setmsglevel(struct net_device *ndev, u32 level) ++{ ++ struct sun8i_emac_priv *priv = netdev_priv(ndev); ++ ++ priv->msg_enable = level; ++} ++ ++static void sun8i_emac_get_pauseparam(struct net_device *ndev, ++ struct ethtool_pauseparam *pause) ++{ ++ struct sun8i_emac_priv *priv = netdev_priv(ndev); ++ ++ pause->rx_pause = 0; ++ pause->tx_pause = 0; ++ pause->autoneg = ndev->phydev->autoneg; ++ ++ if (priv->flow_ctrl & EMAC_FLOW_RX) ++ pause->rx_pause = 1; ++ if (priv->flow_ctrl & EMAC_FLOW_TX) ++ pause->tx_pause = 1; ++} ++ ++static int sun8i_emac_set_pauseparam(struct net_device *ndev, ++ struct ethtool_pauseparam *pause) ++{ ++ struct sun8i_emac_priv *priv = netdev_priv(ndev); ++ struct phy_device *phy = ndev->phydev; ++ int new_pause = 0; ++ int ret = 0; ++ ++ if (pause->rx_pause) ++ new_pause |= EMAC_FLOW_RX; ++ if (pause->tx_pause) ++ new_pause |= EMAC_FLOW_TX; ++ ++ priv->flow_ctrl = new_pause; ++ phy->autoneg = pause->autoneg; ++ ++ if (phy->autoneg) { ++ if (netif_running(ndev)) ++ ret = phy_start_aneg(phy); ++ } else { ++ sun8i_emac_flow_ctrl(priv, phy->duplex, priv->flow_ctrl); ++ } ++ return ret; ++} ++ ++static void sun8i_emac_ethtool_get_ringparam(struct net_device *ndev, ++ struct ethtool_ringparam *ring) ++{ ++ struct sun8i_emac_priv *priv = netdev_priv(ndev); ++ ++ ring->rx_pending = priv->nbdesc_rx; ++ ring->tx_pending = priv->nbdesc_tx; ++} ++ ++static int sun8i_emac_ethtool_set_ringparam(struct net_device *ndev, ++ struct ethtool_ringparam *ring) ++{ ++ struct sun8i_emac_priv *priv = netdev_priv(ndev); ++ int err; ++ ++ if (ring->rx_max_pending || ring->rx_mini_max_pending || ++ ring->rx_jumbo_max_pending || ring->rx_mini_pending || ++ ring->rx_jumbo_pending || ring->tx_max_pending) ++ return -EINVAL; ++ ++ if (ring->tx_pending < MAX_SKB_FRAGS + 1) { ++ netdev_err(ndev, "The number of TX descriptors is too low"); ++ return -EINVAL; ++ } ++ ++ sun8i_emac_stop_tx(ndev); ++ sun8i_emac_stop_rx(ndev); ++ ++ sun8i_emac_rx_clean(ndev); ++ sun8i_emac_tx_clean(ndev); ++ ++ kfree(priv->rx_skb); ++ kfree(priv->txl); ++ ++ dma_free_coherent(priv->dev, priv->nbdesc_rx * sizeof(struct dma_desc), ++ priv->dd_rx, priv->dd_rx_phy); ++ dma_free_coherent(priv->dev, priv->nbdesc_tx * sizeof(struct dma_desc), ++ priv->dd_tx, priv->dd_tx_phy); ++ ++ priv->nbdesc_rx = ring->rx_pending; ++ priv->nbdesc_tx = ring->tx_pending; ++ err = sun8i_emac_alloc_rings(ndev); ++ if (err) { ++ /* Fatal error, we cannot re start */ ++ netdev_err(ndev, "Fail to allocate rings\n"); ++ return -EFAULT; ++ } ++ ++ sun8i_emac_start_rx(ndev); ++ sun8i_emac_start_tx(ndev); ++ ++ netif_start_queue(ndev); ++ ++ netdev_info(ndev, "Ring Param settings: rx: %d, tx %d\n", ++ ring->rx_pending, ring->tx_pending); ++ return 0; ++} ++ ++static const struct ethtool_ops sun8i_emac_ethtool_ops = { ++ .begin = sun8i_emac_check_if_running, ++ .get_settings = sun8i_emac_ethtool_get_settings, ++ .set_settings = sun8i_emac_ethtool_set_settings, ++ .get_link = ethtool_op_get_link, ++ .get_pauseparam = sun8i_emac_get_pauseparam, ++ .set_pauseparam = sun8i_emac_set_pauseparam, ++ .get_ethtool_stats = sun8i_emac_ethtool_stats, ++ .get_strings = sun8i_emac_ethtool_strings, ++ .get_sset_count = sun8i_emac_get_sset_count, ++ .get_drvinfo = sun8i_emac_ethtool_getdrvinfo, ++ .get_msglevel = sun8i_emac_ethtool_getmsglevel, ++ .set_msglevel = sun8i_emac_ethtool_setmsglevel, ++ .get_ringparam = sun8i_emac_ethtool_get_ringparam, ++ .set_ringparam = sun8i_emac_ethtool_set_ringparam, ++}; ++ ++static const struct net_device_ops sun8i_emac_netdev_ops = { ++ .ndo_init = sun8i_emac_init, ++ .ndo_open = sun8i_emac_open, ++ .ndo_start_xmit = sun8i_emac_xmit, ++ .ndo_stop = sun8i_emac_stop, ++ .ndo_change_mtu = sun8i_emac_change_mtu, ++ .ndo_set_features = sun8i_emac_set_features, ++ .ndo_set_rx_mode = sun8i_emac_set_rx_mode, ++ .ndo_tx_timeout = sun8i_emac_tx_timeout, ++ .ndo_do_ioctl = sun8i_emac_ioctl, ++ .ndo_set_mac_address = eth_mac_addr, ++}; ++ ++/* No locking in this function since it is guaranteed to be run once and ++ * do actions only done here: ++ * - Scheduling NAPI ++ * - Stopping interrupts ++ * - Updating stats ++ * ++ * Even when not enabled via EMAC_INT_EN, some interrupt could fire, so we need ++ * to handle all of them. ++ * Interrupts know to fire when not enabled are: ++ * - EMAC_TX_DMA_STOP_INT ++ * - EMAC_TX_BUF_UA_INT ++ * - EMAC_TX_EARLY_INT ++ * - EMAC_RX_BUF_UA_INT ++ * - EMAC_RX_EARLY_INT ++ */ ++static irqreturn_t sun8i_emac_dma_interrupt(int irq, void *dev_id) ++{ ++ struct net_device *ndev = dev_id; ++ struct sun8i_emac_priv *priv = netdev_priv(ndev); ++ u32 v, u; ++ ++ v = readl(priv->base + EMAC_INT_STA); ++ ++ /* When this bit is asserted, a frame transmission is completed. */ ++ if (v & EMAC_TX_INT) { ++ priv->estats.tx_int++; ++ writel(0, priv->base + EMAC_INT_EN); ++ napi_schedule(&priv->napi); ++ } ++ ++ /* When this bit is asserted, the TX DMA FSM is stopped. ++ * For the moment only a call to tx_timeout cause this interrupt ++ * to fire. ++ */ ++ if (v & EMAC_TX_DMA_STOP_INT) ++ priv->estats.tx_dma_stop++; ++ ++ /* When this asserted, the TX DMA can not acquire next TX descriptor ++ * and TX DMA FSM is suspended. ++ */ ++ if (v & EMAC_TX_BUF_UA_INT) { ++ priv->estats.tx_dma_ua++; ++ writel(0, priv->base + EMAC_INT_EN); ++ napi_schedule(&priv->napi); ++ } ++ ++ if (v & EMAC_TX_TIMEOUT_INT) ++ priv->estats.tx_timeout_int++; ++ ++ if (v & EMAC_TX_UNDERFLOW_INT) ++ priv->estats.tx_underflow_int++; ++ ++ /* When this bit asserted , the frame is transmitted to FIFO totally. */ ++ if (v & EMAC_TX_EARLY_INT) ++ priv->estats.tx_early_int++; ++ ++ /* When this bit is asserted, a frame reception is completed */ ++ if (v & EMAC_RX_INT) { ++ priv->estats.rx_int++; ++ writel(0, priv->base + EMAC_INT_EN); ++ napi_schedule(&priv->napi); ++ } ++ ++ /* When this asserted, the RX DMA can not acquire next RX descriptor ++ * and RX DMA FSM is suspended. ++ */ ++ if (v & EMAC_RX_BUF_UA_INT) { ++ u = readl(priv->base + EMAC_RX_CTL1); ++ writel(u | EMAC_RX_DMA_START, priv->base + EMAC_RX_CTL1); ++ priv->estats.rx_dma_ua++; ++ } ++ ++ /* Same as TX DMA STOP, but never hit it */ ++ if (v & EMAC_RX_DMA_STOP_INT) ++ priv->estats.rx_dma_stop++; ++ ++ if (v & EMAC_RX_TIMEOUT_INT) ++ priv->estats.rx_timeout_int++; ++ ++ if (v & EMAC_RX_OVERFLOW_INT) ++ priv->estats.rx_overflow_int++; ++ ++ if (v & EMAC_RX_EARLY_INT) ++ priv->estats.rx_early_int++; ++ ++ if (v & EMAC_RGMII_STA_INT) ++ priv->estats.rgmii_state_int++; ++ ++ /* the datasheet state those register as read-only ++ * but nothing work(freeze) without writing to it ++ */ ++ writel(v, priv->base + EMAC_INT_STA); ++ ++ return IRQ_HANDLED; ++} ++ ++static int sun8i_emac_probe(struct platform_device *pdev) ++{ ++ struct device_node *node = pdev->dev.of_node; ++ struct sun8i_emac_priv *priv; ++ struct net_device *ndev; ++ struct resource *res; ++ int ret; ++ ++ ndev = alloc_etherdev(sizeof(*priv)); ++ if (!ndev) ++ return -ENOMEM; ++ ++ SET_NETDEV_DEV(ndev, &pdev->dev); ++ priv = netdev_priv(ndev); ++ platform_set_drvdata(pdev, ndev); ++ ++ priv->variant = of_device_get_match_data(&pdev->dev); ++ if (!priv->variant) { ++ dev_err(&pdev->dev, "Missing sun8i-emac variant\n"); ++ return -EINVAL; ++ } ++ ++ priv->mdio_node = of_get_child_by_name(node, "mdio"); ++ if (!priv->mdio_node) { ++ netdev_err(ndev, "Could not find a MDIO node\n"); ++ return -EINVAL; ++ } ++ ++ priv->phy_node = of_parse_phandle(node, "phy-handle", 0); ++ if (!priv->phy_node) { ++ netdev_err(ndev, "No associated PHY\n"); ++ return -EINVAL; ++ } ++ ++ priv->regmap = syscon_regmap_lookup_by_phandle(pdev->dev.of_node, ++ "syscon"); ++ if (IS_ERR(priv->regmap)) { ++ ret = PTR_ERR(priv->regmap); ++ dev_err(&pdev->dev, "unable to map SYSCON:%d\n", ret); ++ return ret; ++ } ++ ++ res = platform_get_resource(pdev, IORESOURCE_MEM, 0); ++ priv->base = devm_ioremap_resource(&pdev->dev, res); ++ if (IS_ERR(priv->base)) { ++ ret = PTR_ERR(priv->base); ++ dev_err(&pdev->dev, "Cannot request MMIO: %d\n", ret); ++ return ret; ++ } ++ ++ priv->ahb_clk = devm_clk_get(&pdev->dev, "ahb"); ++ if (IS_ERR(priv->ahb_clk)) { ++ ret = PTR_ERR(priv->ahb_clk); ++ dev_err(&pdev->dev, "Cannot get AHB clock err=%d\n", ret); ++ goto probe_err; ++ } ++ ++ priv->rst_mac = devm_reset_control_get_optional(&pdev->dev, "ahb"); ++ if (IS_ERR(priv->rst_mac)) { ++ ret = PTR_ERR(priv->rst_mac); ++ if (ret == -EPROBE_DEFER) ++ return -EPROBE_DEFER; ++ dev_info(&pdev->dev, "No MAC reset control found %d\n", ret); ++ priv->rst_mac = NULL; ++ } ++ ++ priv->phy_interface = of_get_phy_mode(node); ++ if (priv->phy_interface < 0) { ++ netdev_err(ndev, "PHY interface mode node unspecified\n"); ++ return priv->phy_interface; ++ } ++ ++ switch (priv->phy_interface) { ++ case PHY_INTERFACE_MODE_MII: ++ if (!priv->variant->support_mii) ++ return -EINVAL; ++ break; ++ case PHY_INTERFACE_MODE_RMII: ++ if (!priv->variant->support_rmii) ++ return -EINVAL; ++ break; ++ case PHY_INTERFACE_MODE_RGMII: ++ if (!priv->variant->support_rgmii) ++ return -EINVAL; ++ break; ++ default: ++ netdev_err(ndev, "Unsupported interface mode: %s", ++ phy_modes(priv->phy_interface)); ++ return -EINVAL; ++ } ++ ++ if (priv->phy_interface == priv->variant->internal_phy) ++ priv->use_internal_phy = true; ++ ++ if (priv->use_internal_phy) { ++ priv->ephy_clk = of_clk_get(priv->phy_node, 0); ++ if (IS_ERR(priv->ephy_clk)) { ++ ret = PTR_ERR(priv->ephy_clk); ++ dev_err(&pdev->dev, "Cannot get EPHY clock err=%d\n", ++ ret); ++ goto probe_err; ++ } ++ ++ priv->rst_ephy = of_reset_control_get(priv->phy_node, 0); ++ if (IS_ERR(priv->rst_ephy)) { ++ ret = PTR_ERR(priv->rst_ephy); ++ if (ret == -EPROBE_DEFER) ++ goto probe_err; ++ dev_info(&pdev->dev, ++ "No EPHY reset control found %d\n", ret); ++ priv->rst_ephy = NULL; ++ } ++ } ++ ++ priv->irq = platform_get_irq(pdev, 0); ++ if (priv->irq < 0) { ++ ret = priv->irq; ++ dev_err(&pdev->dev, "Cannot claim IRQ: %d\n", ret); ++ goto probe_err; ++ } ++ ++ spin_lock_init(&priv->tx_lock); ++ ++ ndev->netdev_ops = &sun8i_emac_netdev_ops; ++ ndev->ethtool_ops = &sun8i_emac_ethtool_ops; ++ ++ priv->ndev = ndev; ++ priv->dev = &pdev->dev; ++ ++ ndev->hw_features = NETIF_F_SG | NETIF_F_HIGHDMA; ++ ndev->hw_features |= NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM | ++ NETIF_F_RXCSUM; ++ ndev->features |= ndev->hw_features; ++ ndev->hw_features |= NETIF_F_RXFCS; ++ ndev->hw_features |= NETIF_F_RXALL; ++ ndev->hw_features |= NETIF_F_LOOPBACK; ++ ndev->priv_flags |= IFF_UNICAST_FLT; ++ ++ ndev->watchdog_timeo = msecs_to_jiffies(5000); ++ netif_carrier_off(ndev); ++ ++ /* Benched on OPIPC with 100M, setting more than 256 does not give any ++ * perf boost ++ */ ++ priv->nbdesc_rx = 128; ++ priv->nbdesc_tx = 256; ++ ++ ret = register_netdev(ndev); ++ if (ret) { ++ dev_err(&pdev->dev, "ERROR: Register %s failed\n", ndev->name); ++ goto probe_err; ++ } ++ ++ return 0; ++ ++probe_err: ++ free_netdev(ndev); ++ return ret; ++} ++ ++static int sun8i_emac_remove(struct platform_device *pdev) ++{ ++ struct net_device *ndev = platform_get_drvdata(pdev); ++ ++ unregister_netdev(ndev); ++ platform_set_drvdata(pdev, NULL); ++ free_netdev(ndev); ++ ++ return 0; ++} ++ ++static const struct of_device_id sun8i_emac_of_match_table[] = { ++ { .compatible = "allwinner,sun8i-a83t-emac", ++ .data = &emac_variant_a83t }, ++ { .compatible = "allwinner,sun8i-h3-emac", ++ .data = &emac_variant_h3 }, ++ { .compatible = "allwinner,sun50i-a64-emac", ++ .data = &emac_variant_a64 }, ++ {} ++}; ++MODULE_DEVICE_TABLE(of, sun8i_emac_of_match_table); ++ ++static struct platform_driver sun8i_emac_driver = { ++ .probe = sun8i_emac_probe, ++ .remove = sun8i_emac_remove, ++ .driver = { ++ .name = "sun8i-emac", ++ .of_match_table = sun8i_emac_of_match_table, ++ }, ++}; ++ ++module_platform_driver(sun8i_emac_driver); ++ ++MODULE_DESCRIPTION("sun8i Ethernet driver"); ++MODULE_LICENSE("GPL"); ++MODULE_AUTHOR("Corentin Labbe +Date: Fri, 7 Oct 2016 10:25:49 +0200 +Subject: [PATCH 2/9] MAINTAINERS: Add myself as maintainer of sun8i-emac + +This patch add myself as maintainer of the sun8i-emac driver. + +Signed-off-by: Corentin Labbe +--- + MAINTAINERS | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/MAINTAINERS b/MAINTAINERS +index f593300..94dac86 100644 +--- a/MAINTAINERS ++++ b/MAINTAINERS +@@ -582,6 +582,12 @@ S: Maintained + F: Documentation/i2c/busses/i2c-ali1563 + F: drivers/i2c/busses/i2c-ali1563.c + ++ALLWINNER SUN8I-EMAC ETHERNET DRIVER ++M: Corentin Labbe ++L: netdev@vger.kernel.org ++S: Maintained ++F: drivers/net/ethernet/allwinner/sun8i-emac.c ++ + ALLWINNER SECURITY SYSTEM + M: Corentin Labbe + L: linux-crypto@vger.kernel.org +-- +2.9.3 + +From 0c21240a091e9553751845f2aa3be0b5a88d9ac7 Mon Sep 17 00:00:00 2001 +From: Corentin LABBE +Date: Fri, 7 Oct 2016 10:25:50 +0200 +Subject: [PATCH 3/9] ARM: sun8i: dt: Add DT bindings documentation for + Allwinner sun8i-emac + +This patch adds documentation for Device-Tree bindings for the +Allwinner sun8i-emac driver. + +Signed-off-by: Corentin Labbe +--- + .../bindings/net/allwinner,sun8i-emac.txt | 70 ++++++++++++++++++++++ + 1 file changed, 70 insertions(+) + create mode 100644 Documentation/devicetree/bindings/net/allwinner,sun8i-emac.txt + +diff --git a/Documentation/devicetree/bindings/net/allwinner,sun8i-emac.txt b/Documentation/devicetree/bindings/net/allwinner,sun8i-emac.txt +new file mode 100644 +index 0000000..92e4ef3b +--- /dev/null ++++ b/Documentation/devicetree/bindings/net/allwinner,sun8i-emac.txt +@@ -0,0 +1,70 @@ ++* Allwinner sun8i EMAC ethernet controller ++ ++Required properties: ++- compatible: should be one of the following string: ++ "allwinner,sun8i-a83t-emac" ++ "allwinner,sun8i-h3-emac" ++ "allwinner,sun50i-a64-emac" ++- reg: address and length of the register for the device. ++- syscon: A phandle to the syscon of the SoC ++- interrupts: interrupt for the device ++- clocks: A phandle to the reference clock for this device ++- clock-names: should be "ahb" ++- resets: A phandle to the reset control for this device ++- reset-names: should be "ahb" ++- phy-mode: See ethernet.txt ++- phy-handle: See ethernet.txt ++- #address-cells: shall be 1 ++- #size-cells: shall be 0 ++ ++Optional properties: ++- allwinner,tx-delay: TX clock delay chain value. Range value is 0-0x07. Default is 0) ++- allwinner,rx-delay: RX clock delay chain value. Range value is 0-0x1F. Default is 0) ++Both delay properties does not have units, there are arbitrary value. ++The TX/RX clock delay chain settings are board specific and could be found ++in vendor FEX files. ++ ++Optional properties for "allwinner,sun8i-h3-emac": ++- allwinner,leds-active-low: EPHY LEDs are active low ++ ++Required child node of emac: ++- mdio bus node: should be named mdio ++ ++Required properties of the mdio node: ++- #address-cells: shall be 1 ++- #size-cells: shall be 0 ++ ++The device node referenced by "phy" or "phy-handle" should be a child node ++of the mdio node. See phy.txt for the generic PHY bindings. ++ ++Required properties of the phy node with "allwinner,sun8i-h3-emac": ++- clocks: an extra phandle to the reference clock for the EPHY ++- resets: an extra phandle to the reset control for the EPHY ++ ++Example: ++ ++emac: ethernet@01c0b000 { ++ compatible = "allwinner,sun8i-h3-emac"; ++ syscon = <&syscon>; ++ reg = <0x01c0b000 0x104>; ++ interrupts = ; ++ resets = <&ccu RST_BUS_EMAC>; ++ reset-names = "ahb"; ++ clocks = <&ccu CLK_BUS_EMAC>; ++ clock-names = "ahb"; ++ #address-cells = <1>; ++ #size-cells = <0>; ++ ++ phy = <&int_mii_phy>; ++ phy-mode = "mii"; ++ allwinner,leds-active-low; ++ mdio: mdio { ++ #address-cells = <1>; ++ #size-cells = <0>; ++ int_mii_phy: ethernet-phy@1 { ++ reg = <1>; ++ clocks = <&ccu CLK_BUS_EPHY>; ++ resets = <&ccu RST_BUS_EPHY>; ++ }; ++ }; ++}; +-- +2.9.3 + +From 95d456fcdd33eb7c1512956050faba648550e06f Mon Sep 17 00:00:00 2001 +From: Corentin LABBE +Date: Fri, 7 Oct 2016 10:25:51 +0200 +Subject: [PATCH 4/9] ARM: dts: sun8i-h3: Add dt node for the syscon control + module + +This patch add the dt node for the syscon register present on the +Allwinner H3. + +Only two register are present in this syscon and the only one useful is +the one dedicated to EMAC clock. + +Signed-off-by: Corentin Labbe +--- + arch/arm/boot/dts/sun8i-h3.dtsi | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/arch/arm/boot/dts/sun8i-h3.dtsi b/arch/arm/boot/dts/sun8i-h3.dtsi +index fdf9fdb..d658a596 100644 +--- a/arch/arm/boot/dts/sun8i-h3.dtsi ++++ b/arch/arm/boot/dts/sun8i-h3.dtsi +@@ -140,6 +140,11 @@ + #size-cells = <1>; + ranges; + ++ syscon: syscon@01c00000 { ++ compatible = "syscon"; ++ reg = <0x01c00000 0x1000>; ++ }; ++ + dma: dma-controller@01c02000 { + compatible = "allwinner,sun8i-h3-dma"; + reg = <0x01c02000 0x1000>; +-- +2.9.3 + +From 7837b66f2bce01da31ec4c005023c729ba3f17a7 Mon Sep 17 00:00:00 2001 +From: Corentin LABBE +Date: Fri, 7 Oct 2016 10:25:52 +0200 +Subject: [PATCH 5/9] ARM: dts: sun8i-h3: add sun8i-emac ethernet driver + +The sun8i-emac is an ethernet MAC hardware that support 10/100/1000 +speed. + +This patch enable the sun8i-emac on the Allwinner H3 SoC Device-tree. +The SoC H3 have an internal PHY, so optionals syscon and ephy are set. + +Signed-off-by: Corentin Labbe +--- + arch/arm/boot/dts/sun8i-h3.dtsi | 24 ++++++++++++++++++++++++ + 1 file changed, 24 insertions(+) + +diff --git a/arch/arm/boot/dts/sun8i-h3.dtsi b/arch/arm/boot/dts/sun8i-h3.dtsi +index d658a596..54174cf 100644 +--- a/arch/arm/boot/dts/sun8i-h3.dtsi ++++ b/arch/arm/boot/dts/sun8i-h3.dtsi +@@ -446,6 +446,30 @@ + status = "disabled"; + }; + ++ emac: ethernet@1c30000 { ++ compatible = "allwinner,sun8i-h3-emac"; ++ syscon = <&syscon>; ++ reg = <0x01c30000 0x104>; ++ interrupts = ; ++ resets = <&ccu RST_BUS_EMAC>; ++ reset-names = "ahb"; ++ clocks = <&ccu CLK_BUS_EMAC>; ++ clock-names = "ahb"; ++ #address-cells = <1>; ++ #size-cells = <0>; ++ status = "disabled"; ++ ++ mdio: mdio { ++ #address-cells = <1>; ++ #size-cells = <0>; ++ int_mii_phy: ethernet-phy@1 { ++ reg = <1>; ++ clocks = <&ccu CLK_BUS_EPHY>; ++ resets = <&ccu RST_BUS_EPHY>; ++ }; ++ }; ++ }; ++ + gic: interrupt-controller@01c81000 { + compatible = "arm,cortex-a7-gic", "arm,cortex-a15-gic"; + reg = <0x01c81000 0x1000>, +-- +2.9.3 + +From e9687b752a1551ae420a94ff44254831ef464557 Mon Sep 17 00:00:00 2001 +From: Corentin LABBE +Date: Fri, 7 Oct 2016 10:25:53 +0200 +Subject: [PATCH 6/9] ARM: dts: sun8i: Enable sun8i-emac on the Orange PI PC + +The sun8i-emac hardware is present on the Orange PI PC. +It uses the internal PHY. + +This patch create the needed emac node. + +Signed-off-by: Corentin Labbe +--- + arch/arm/boot/dts/sun8i-h3-orangepi-pc.dts | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/arch/arm/boot/dts/sun8i-h3-orangepi-pc.dts b/arch/arm/boot/dts/sun8i-h3-orangepi-pc.dts +index daf50b9a6..71717cc 100644 +--- a/arch/arm/boot/dts/sun8i-h3-orangepi-pc.dts ++++ b/arch/arm/boot/dts/sun8i-h3-orangepi-pc.dts +@@ -54,6 +54,7 @@ + + aliases { + serial0 = &uart0; ++ ethernet0 = &emac; + }; + + chosen { +@@ -165,3 +166,10 @@ + /* USB VBUS is always on */ + status = "okay"; + }; ++ ++&emac { ++ phy-handle = <&int_mii_phy>; ++ phy-mode = "mii"; ++ allwinner,leds-active-low; ++ status = "okay"; ++}; +-- +2.9.3 + +From 7df9f84ca65a398b1bb692344fa26c67235f19d3 Mon Sep 17 00:00:00 2001 +From: Hans de Goede +Date: Fri, 7 Oct 2016 10:25:54 +0200 +Subject: [PATCH 7/9] ARM: dts: sun8i: Enable sun8i-emac on the Orange PI One + +The sun8i-emac hardware is present on the Orange PI One. +It uses the internal PHY. + +This patch create the needed emac node. + +Signed-off-by: Hans de Goede +Signed-off-by: Corentin Labbe +--- + arch/arm/boot/dts/sun8i-h3-orangepi-one.dts | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/arch/arm/boot/dts/sun8i-h3-orangepi-one.dts b/arch/arm/boot/dts/sun8i-h3-orangepi-one.dts +index 0adf932..25f2455 100644 +--- a/arch/arm/boot/dts/sun8i-h3-orangepi-one.dts ++++ b/arch/arm/boot/dts/sun8i-h3-orangepi-one.dts +@@ -54,6 +54,7 @@ + + aliases { + serial0 = &uart0; ++ ethernet0 = &emac; + }; + + chosen { +@@ -94,6 +95,13 @@ + status = "okay"; + }; + ++&emac { ++ phy-handle = <&int_mii_phy>; ++ phy-mode = "mii"; ++ allwinner,leds-active-low; ++ status = "okay"; ++}; ++ + &mmc0 { + pinctrl-names = "default"; + pinctrl-0 = <&mmc0_pins_a>, <&mmc0_cd_pin>; +-- +2.9.3 + +From dd8a48a9d7250d4bfc501dd5a4e8179ffac27d11 Mon Sep 17 00:00:00 2001 +From: Corentin LABBE +Date: Fri, 7 Oct 2016 10:25:55 +0200 +Subject: [PATCH 8/9] ARM: dts: sun8i: Enable sun8i-emac on the Orange Pi 2 + +The sun8i-emac hardware is present on the Orange PI 2. +It uses the internal PHY. + +This patch create the needed emac node. + +Signed-off-by: Corentin Labbe +--- + arch/arm/boot/dts/sun8i-h3-orangepi-2.dts | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/arch/arm/boot/dts/sun8i-h3-orangepi-2.dts b/arch/arm/boot/dts/sun8i-h3-orangepi-2.dts +index f93f5d1..5608eb4 100644 +--- a/arch/arm/boot/dts/sun8i-h3-orangepi-2.dts ++++ b/arch/arm/boot/dts/sun8i-h3-orangepi-2.dts +@@ -54,6 +54,7 @@ + + aliases { + serial0 = &uart0; ++ ethernet0 = &emac; + }; + + chosen { +@@ -184,3 +185,10 @@ + usb1_vbus-supply = <®_usb1_vbus>; + status = "okay"; + }; ++ ++&emac { ++ phy-handle = <&int_mii_phy>; ++ phy-mode = "mii"; ++ allwinner,leds-active-low; ++ status = "okay"; ++}; +-- +2.9.3 + +From cc1f0d509ecebebe8b50c97b71c84fb082ce0e56 Mon Sep 17 00:00:00 2001 +From: Corentin LABBE +Date: Wed, 5 Oct 2016 11:48:24 +0200 +Subject: [PATCH 9/9] ARM: dt: sun8i-h3: Add sunxi-sid to dts for sun8i-h3 + +This patch add support for the sunxi-sid driver to the device tree for sun8i-h3. + +Signed-off-by: Corentin Labbe +--- + arch/arm/boot/dts/sun8i-h3.dtsi | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/arch/arm/boot/dts/sun8i-h3.dtsi b/arch/arm/boot/dts/sun8i-h3.dtsi +index 54174cf..8628b38 100644 +--- a/arch/arm/boot/dts/sun8i-h3.dtsi ++++ b/arch/arm/boot/dts/sun8i-h3.dtsi +@@ -211,6 +211,11 @@ + #size-cells = <0>; + }; + ++ sid: eeprom@01c14200 { ++ compatible = "allwinner,sun7i-a20-sid"; ++ reg = <0x01c14200 0x200>; ++ }; ++ + usbphy: phy@01c19400 { + compatible = "allwinner,sun8i-h3-usb-phy"; + reg = <0x01c19400 0x2c>, +-- +2.9.3 + diff --git a/HID-microsoft-Add-Surface-4-type-cover-pro-4-JP.patch b/HID-microsoft-Add-Surface-4-type-cover-pro-4-JP.patch new file mode 100644 index 000000000..f231aa10a --- /dev/null +++ b/HID-microsoft-Add-Surface-4-type-cover-pro-4-JP.patch @@ -0,0 +1,76 @@ +From b490a8537df60d449199e162417da74ee9262515 Mon Sep 17 00:00:00 2001 +From: Yuta Kobayashi +Date: Fri, 12 Aug 2016 07:49:17 +0000 +Subject: [PATCH] HID: microsoft: Add Surface 4 type cover pro 4 (JP) + +Adding support for the Microsoft Surface 4 Type Cover Pro (JP). + +Signed-off-by: Yuta Kobayashi +Signed-off-by: Jiri Kosina +--- + drivers/hid/hid-core.c | 2 ++ + drivers/hid/hid-ids.h | 1 + + drivers/hid/hid-microsoft.c | 2 ++ + drivers/hid/usbhid/hid-quirks.c | 1 + + 4 files changed, 6 insertions(+) + +diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c +index ed10d4f..45400de 100644 +--- a/drivers/hid/hid-core.c ++++ b/drivers/hid/hid-core.c +@@ -727,6 +727,7 @@ static void hid_scan_collection(struct hid_parser *parser, unsigned type) + (hid->product == USB_DEVICE_ID_MS_TYPE_COVER_PRO_3 || + hid->product == USB_DEVICE_ID_MS_TYPE_COVER_PRO_3_2 || + hid->product == USB_DEVICE_ID_MS_TYPE_COVER_PRO_3_JP || ++ hid->product == USB_DEVICE_ID_MS_TYPE_COVER_PRO_4_JP || + hid->product == USB_DEVICE_ID_MS_TYPE_COVER_3 || + hid->product == USB_DEVICE_ID_MS_POWER_COVER) && + hid->group == HID_GROUP_MULTITOUCH) +@@ -1982,6 +1983,7 @@ static const struct hid_device_id hid_have_special_driver[] = { + { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_TYPE_COVER_PRO_3) }, + { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_TYPE_COVER_PRO_3_2) }, + { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_TYPE_COVER_PRO_3_JP) }, ++ { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_TYPE_COVER_PRO_4_JP) }, + { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_TYPE_COVER_3) }, + { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_DIGITAL_MEDIA_7K) }, + { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_DIGITAL_MEDIA_600) }, +diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h +index da1c58e..3466f0d 100644 +--- a/drivers/hid/hid-ids.h ++++ b/drivers/hid/hid-ids.h +@@ -713,6 +713,7 @@ + #define USB_DEVICE_ID_MS_TYPE_COVER_PRO_3 0x07dc + #define USB_DEVICE_ID_MS_TYPE_COVER_PRO_3_2 0x07e2 + #define USB_DEVICE_ID_MS_TYPE_COVER_PRO_3_JP 0x07dd ++#define USB_DEVICE_ID_MS_TYPE_COVER_PRO_4_JP 0x07e9 + #define USB_DEVICE_ID_MS_TYPE_COVER_3 0x07de + #define USB_DEVICE_ID_MS_POWER_COVER 0x07da + +diff --git a/drivers/hid/hid-microsoft.c b/drivers/hid/hid-microsoft.c +index e924d55..56c586f 100644 +--- a/drivers/hid/hid-microsoft.c ++++ b/drivers/hid/hid-microsoft.c +@@ -288,6 +288,8 @@ static const struct hid_device_id ms_devices[] = { + .driver_data = MS_HIDINPUT }, + { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_TYPE_COVER_PRO_3_JP), + .driver_data = MS_HIDINPUT }, ++ { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_TYPE_COVER_PRO_4_JP), ++ .driver_data = MS_HIDINPUT }, + { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_TYPE_COVER_3), + .driver_data = MS_HIDINPUT }, + { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_POWER_COVER), +diff --git a/drivers/hid/usbhid/hid-quirks.c b/drivers/hid/usbhid/hid-quirks.c +index b4b8c6a..1fccffd 100644 +--- a/drivers/hid/usbhid/hid-quirks.c ++++ b/drivers/hid/usbhid/hid-quirks.c +@@ -98,6 +98,7 @@ static const struct hid_blacklist { + { USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_TYPE_COVER_PRO_3, HID_QUIRK_NO_INIT_REPORTS }, + { USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_TYPE_COVER_PRO_3_2, HID_QUIRK_NO_INIT_REPORTS }, + { USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_TYPE_COVER_PRO_3_JP, HID_QUIRK_NO_INIT_REPORTS }, ++ { USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_TYPE_COVER_PRO_4_JP, HID_QUIRK_NO_INIT_REPORTS }, + { USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_TYPE_COVER_3, HID_QUIRK_NO_INIT_REPORTS }, + { USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_POWER_COVER, HID_QUIRK_NO_INIT_REPORTS }, + { USB_VENDOR_ID_MSI, USB_DEVICE_ID_MSI_GT683R_LED_PANEL, HID_QUIRK_NO_INIT_REPORTS }, +-- +2.7.4 + diff --git a/PCI-Lock-down-BAR-access-when-module-security-is-ena.patch b/PCI-Lock-down-BAR-access-when-module-security-is-ena.patch index 23a514f3b..9500b96d2 100644 --- a/PCI-Lock-down-BAR-access-when-module-security-is-ena.patch +++ b/PCI-Lock-down-BAR-access-when-module-security-is-ena.patch @@ -1,8 +1,7 @@ -From 655fbf360e1481db4f06001f893d388c15ac307f Mon Sep 17 00:00:00 2001 +From 6f756b32a45b022428e33ce20181e874c73ca82e Mon Sep 17 00:00:00 2001 From: Matthew Garrett Date: Thu, 8 Mar 2012 10:10:38 -0500 -Subject: [PATCH 02/20] PCI: Lock down BAR access when module security is - enabled +Subject: [PATCH] PCI: Lock down BAR access when module security is enabled Any hardware that can potentially generate DMA has to be locked down from userspace in order to avoid it being possible for an attacker to modify @@ -18,7 +17,7 @@ Signed-off-by: Matthew Garrett 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c -index 312f23a8429c..93e6ac103dd0 100644 +index bcd10c7..a950301 100644 --- a/drivers/pci/pci-sysfs.c +++ b/drivers/pci/pci-sysfs.c @@ -30,6 +30,7 @@ @@ -29,7 +28,7 @@ index 312f23a8429c..93e6ac103dd0 100644 #include "pci.h" static int sysfs_initialized; /* = 0 */ -@@ -710,6 +711,9 @@ static ssize_t pci_write_config(struct file *filp, struct kobject *kobj, +@@ -716,6 +717,9 @@ static ssize_t pci_write_config(struct file *filp, struct kobject *kobj, loff_t init_off = off; u8 *data = (u8 *) buf; @@ -39,7 +38,7 @@ index 312f23a8429c..93e6ac103dd0 100644 if (off > dev->cfg_size) return 0; if (off + count > dev->cfg_size) { -@@ -1004,6 +1008,9 @@ static int pci_mmap_resource(struct kobject *kobj, struct bin_attribute *attr, +@@ -1007,6 +1011,9 @@ static int pci_mmap_resource(struct kobject *kobj, struct bin_attribute *attr, resource_size_t start, end; int i; @@ -49,7 +48,7 @@ index 312f23a8429c..93e6ac103dd0 100644 for (i = 0; i < PCI_ROM_RESOURCE; i++) if (res == &pdev->resource[i]) break; -@@ -1105,6 +1112,9 @@ static ssize_t pci_write_resource_io(struct file *filp, struct kobject *kobj, +@@ -1106,6 +1113,9 @@ static ssize_t pci_write_resource_io(struct file *filp, struct kobject *kobj, struct bin_attribute *attr, char *buf, loff_t off, size_t count) { @@ -60,7 +59,7 @@ index 312f23a8429c..93e6ac103dd0 100644 } diff --git a/drivers/pci/proc.c b/drivers/pci/proc.c -index 3f155e78513f..4265ea07e3b0 100644 +index 2408abe..59f321c 100644 --- a/drivers/pci/proc.c +++ b/drivers/pci/proc.c @@ -116,6 +116,9 @@ static ssize_t proc_bus_pci_write(struct file *file, const char __user *buf, @@ -85,7 +84,7 @@ index 3f155e78513f..4265ea07e3b0 100644 ret = pci_domain_nr(dev->bus); @@ -233,7 +239,7 @@ static int proc_bus_pci_mmap(struct file *file, struct vm_area_struct *vma) struct pci_filp_private *fpriv = file->private_data; - int i, ret; + int i, ret, write_combine; - if (!capable(CAP_SYS_RAWIO)) + if (!capable(CAP_SYS_RAWIO) || secure_modules()) @@ -93,7 +92,7 @@ index 3f155e78513f..4265ea07e3b0 100644 /* Make sure the caller is mapping a real resource for this device */ diff --git a/drivers/pci/syscall.c b/drivers/pci/syscall.c -index b91c4da68365..98f5637304d1 100644 +index b91c4da..98f5637 100644 --- a/drivers/pci/syscall.c +++ b/drivers/pci/syscall.c @@ -10,6 +10,7 @@ @@ -114,5 +113,5 @@ index b91c4da68365..98f5637304d1 100644 dev = pci_get_bus_and_slot(bus, dfn); -- -2.4.3 +2.9.2 diff --git a/arcmsr-buffer-overflow-in-archmsr_iop_message_xfer.patch b/arcmsr-buffer-overflow-in-archmsr_iop_message_xfer.patch deleted file mode 100644 index 81ed8814d..000000000 --- a/arcmsr-buffer-overflow-in-archmsr_iop_message_xfer.patch +++ /dev/null @@ -1,41 +0,0 @@ -From: Dan Carpenter -Date: 2016-09-15 13:44:56 -Subject: [patch v2] arcmsr: buffer overflow in arcmsr_iop_message_xfer() - -We need to put an upper bound on "user_len" so the memcpy() doesn't -overflow. - -Reported-by: Marco Grassi -Signed-off-by: Dan Carpenter -Reviewed-by: Tomas Henzl - -diff --git a/drivers/scsi/arcmsr/arcmsr_hba.c b/drivers/scsi/arcmsr/arcmsr_hba.c -index 7640498..110eca9 100644 ---- a/drivers/scsi/arcmsr/arcmsr_hba.c -+++ b/drivers/scsi/arcmsr/arcmsr_hba.c -@@ -2388,7 +2388,8 @@ static int arcmsr_iop_message_xfer(struct AdapterControlBlock *acb, - } - case ARCMSR_MESSAGE_WRITE_WQBUFFER: { - unsigned char *ver_addr; -- int32_t user_len, cnt2end; -+ uint32_t user_len; -+ int32_t cnt2end; - uint8_t *pQbuffer, *ptmpuserbuffer; - ver_addr = kmalloc(ARCMSR_API_DATA_BUFLEN, GFP_ATOMIC); - if (!ver_addr) { -@@ -2397,6 +2398,11 @@ static int arcmsr_iop_message_xfer(struct AdapterControlBlock *acb, - } - ptmpuserbuffer = ver_addr; - user_len = pcmdmessagefld->cmdmessage.Length; -+ if (user_len > ARCMSR_API_DATA_BUFLEN) { -+ retvalue = ARCMSR_MESSAGE_FAIL; -+ kfree(ver_addr); -+ goto message_out; -+ } - memcpy(ptmpuserbuffer, - pcmdmessagefld->messagedatabuffer, user_len); - spin_lock_irqsave(&acb->wqbuffer_lock, flags); --- -To unsubscribe from this list: send the line "unsubscribe linux-scsi" in -the body of a message to majordomo@vger.kernel.org -More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/arm-i.MX6-Utilite-device-dtb.patch b/arm-i.MX6-Utilite-device-dtb.patch deleted file mode 100644 index efffd77bd..000000000 --- a/arm-i.MX6-Utilite-device-dtb.patch +++ /dev/null @@ -1,354 +0,0 @@ -From: Christopher Spinrath - -The CompuLab Utilite Pro is a miniature fanless desktop pc based on -the i.MX6 Quad powered cm-fx6 module. It features two serial ports, -USB OTG, 4x USB, analog audio and S/PDIF, 2x Gb Ethernet, HDMI and -DVI ports, an on-board 32GB SSD, a mmc slot, and on-board wifi/bt. - -Add initial support for it including USB, Ethernet (both ports), sata -and HDMI support. - -Signed-off-by: Christopher Spinrath ---- - arch/arm/boot/dts/Makefile | 1 + - arch/arm/boot/dts/imx6q-utilite-pro.dts | 128 ++++++++++++++++++++++++++++++++ - 2 files changed, 129 insertions(+) - create mode 100644 arch/arm/boot/dts/imx6q-utilite-pro.dts - -diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile -index 515a428..287044c 100644 ---- a/arch/arm/boot/dts/Makefile -+++ b/arch/arm/boot/dts/Makefile -@@ -369,6 +369,7 @@ dtb-$(CONFIG_SOC_IMX6Q) += \ - imx6q-tx6q-1110.dtb \ - imx6q-tx6q-11x0-mb7.dtb \ - imx6q-udoo.dtb \ -+ imx6q-utilite-pro.dtb \ - imx6q-wandboard.dtb \ - imx6q-wandboard-revb1.dtb \ - imx6qp-nitrogen6_max.dtb \ -diff --git a/arch/arm/boot/dts/imx6q-utilite-pro.dts b/arch/arm/boot/dts/imx6q-utilite-pro.dts -new file mode 100644 -index 0000000..bcd8e0d ---- /dev/null -+++ b/arch/arm/boot/dts/imx6q-utilite-pro.dts -@@ -0,0 +1,128 @@ -+/* -+ * Copyright 2016 Christopher Spinrath -+ * Copyright 2013 CompuLab Ltd. -+ * -+ * Based on the GPLv2 licensed devicetree distributed with the vendor -+ * kernel for the Utilite Pro: -+ * Copyright 2013 CompuLab Ltd. -+ * Author: Valentin Raevsky -+ * -+ * 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 "imx6q-cm-fx6.dts" -+ -+/ { -+ model = "CompuLab Utilite Pro"; -+ compatible = "compulab,utilite-pro", "compulab,cm-fx6", "fsl,imx6q"; -+ -+ aliases { -+ ethernet1 = ð1; -+ rtc0 = &em3027; -+ rtc1 = &snvs_rtc; -+ }; -+ -+ gpio-keys { -+ compatible = "gpio-keys"; -+ power { -+ label = "Power Button"; -+ gpios = <&gpio1 29 1>; -+ linux,code = <116>; /* KEY_POWER */ -+ gpio-key,wakeup; -+ }; -+ }; -+}; -+ -+&hdmi { -+ ddc-i2c-bus = <&i2c2>; -+ status = "okay"; -+}; -+ -+&i2c1 { -+ pinctrl-names = "default"; -+ pinctrl-0 = <&pinctrl_i2c1>; -+ status = "okay"; -+ -+ eeprom@50 { -+ compatible = "at24,24c02"; -+ reg = <0x50>; -+ pagesize = <16>; -+ }; -+ -+ em3027: rtc@56 { -+ compatible = "emmicro,em3027"; -+ reg = <0x56>; -+ }; -+}; -+ -+&i2c2 { -+ pinctrl-names = "default"; -+ pinctrl-0 = <&pinctrl_i2c2>; -+ status = "okay"; -+}; -+ -+&iomuxc { -+ pinctrl-names = "default"; -+ pinctrl-0 = <&pinctrl_hog>; -+ -+ hog { -+ pinctrl_hog: hoggrp { -+ fsl,pins = < -+ /* power button */ -+ MX6QDL_PAD_ENET_TXD1__GPIO1_IO29 0x80000000 -+ >; -+ }; -+ }; -+ -+ imx6q-utilite-pro { -+ pinctrl_i2c1: i2c1grp { -+ fsl,pins = < -+ MX6QDL_PAD_EIM_D21__I2C1_SCL 0x4001b8b1 -+ MX6QDL_PAD_EIM_D28__I2C1_SDA 0x4001b8b1 -+ >; -+ }; -+ -+ pinctrl_i2c2: i2c2grp { -+ fsl,pins = < -+ MX6QDL_PAD_KEY_COL3__I2C2_SCL 0x4001b8b1 -+ MX6QDL_PAD_KEY_ROW3__I2C2_SDA 0x4001b8b1 -+ >; -+ }; -+ -+ pinctrl_uart2: uart2grp { -+ fsl,pins = < -+ MX6QDL_PAD_GPIO_7__UART2_TX_DATA 0x1b0b1 -+ MX6QDL_PAD_GPIO_8__UART2_RX_DATA 0x1b0b1 -+ MX6QDL_PAD_SD4_DAT5__UART2_RTS_B 0x1b0b1 -+ MX6QDL_PAD_SD4_DAT6__UART2_CTS_B 0x1b0b1 -+ >; -+ }; -+ }; -+}; -+ -+&pcie { -+ pcie@0,0 { -+ reg = <0x000000 0 0 0 0>; -+ #address-cells = <3>; -+ #size-cells = <2>; -+ -+ /* non-removable i211 ethernet card */ -+ eth1: intel,i211@pcie0,0 { -+ reg = <0x010000 0 0 0 0>; -+ }; -+ }; -+}; -+ -+&uart2 { -+ pinctrl-names = "default"; -+ pinctrl-0 = <&pinctrl_uart2>; -+ fsl,uart-has-rtscts; -+ dma-names = "rx", "tx"; -+ dmas = <&sdma 27 4 0>, <&sdma 28 4 0>; -+ status = "okay"; -+}; --- -2.8.2 -From: Christopher Spinrath - -The cm-fx6 module has an on-board spi-flash chip for its firmware, an -eeprom (containing e.g. the mac address of the on-board Ethernet), -a sata port, a pcie controller, an USB hub, and an USB otg port. -Enable support for them. In addition, enable syscon poweroff support. - -Signed-off-by: Christopher Spinrath ---- - arch/arm/boot/dts/imx6q-cm-fx6.dts | 136 +++++++++++++++++++++++++++++++++++++ - 1 file changed, 136 insertions(+) - -diff --git a/arch/arm/boot/dts/imx6q-cm-fx6.dts b/arch/arm/boot/dts/imx6q-cm-fx6.dts -index 99b46f8..f4fc22e 100644 ---- a/arch/arm/boot/dts/imx6q-cm-fx6.dts -+++ b/arch/arm/boot/dts/imx6q-cm-fx6.dts -@@ -31,6 +31,61 @@ - linux,default-trigger = "heartbeat"; - }; - }; -+ -+ regulators { -+ compatible = "simple-bus"; -+ #address-cells = <1>; -+ #size-cells = <0>; -+ -+ reg_usb_otg_vbus: usb_otg_vbus { -+ compatible = "regulator-fixed"; -+ regulator-name = "usb_otg_vbus"; -+ regulator-min-microvolt = <5000000>; -+ regulator-max-microvolt = <5000000>; -+ gpio = <&gpio3 22 0>; -+ 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>; -+ gpio = <&gpio7 8 0>; -+ enable-active-high; -+ }; -+ }; -+}; -+ -+&ecspi1 { -+ fsl,spi-num-chipselects = <2>; -+ cs-gpios = <&gpio2 30 0>, <&gpio3 19 0>; -+ pinctrl-names = "default"; -+ pinctrl-0 = <&pinctrl_ecspi1>; -+ status = "okay"; -+ -+ flash: m25p80@0 { -+ #address-cells = <1>; -+ #size-cells = <1>; -+ compatible = "st,m25p", "jedec,spi-nor"; -+ spi-max-frequency = <20000000>; -+ reg = <0>; -+ -+ partition@0 { -+ label = "uboot"; -+ reg = <0x0 0xc0000>; -+ }; -+ -+ partition@c0000 { -+ label = "uboot environment"; -+ reg = <0xc0000 0x40000>; -+ }; -+ -+ partition@100000 { -+ label = "reserved"; -+ reg = <0x100000 0x100000>; -+ }; -+ }; - }; - - &fec { -@@ -46,8 +101,31 @@ - status = "okay"; - }; - -+&i2c3 { -+ pinctrl-names = "default"; -+ pinctrl-0 = <&pinctrl_i2c3>; -+ status = "okay"; -+ clock-frequency = <100000>; -+ -+ eeprom@50 { -+ compatible = "at24,24c02"; -+ reg = <0x50>; -+ pagesize = <16>; -+ }; -+}; -+ - &iomuxc { - imx6q-cm-fx6 { -+ pinctrl_ecspi1: ecspi1grp { -+ fsl,pins = < -+ MX6QDL_PAD_EIM_D16__ECSPI1_SCLK 0x100b1 -+ MX6QDL_PAD_EIM_D17__ECSPI1_MISO 0x100b1 -+ MX6QDL_PAD_EIM_D18__ECSPI1_MOSI 0x100b1 -+ MX6QDL_PAD_EIM_EB2__GPIO2_IO30 0x100b1 -+ MX6QDL_PAD_EIM_D19__GPIO3_IO19 0x100b1 -+ >; -+ }; -+ - pinctrl_enet: enetgrp { - fsl,pins = < - MX6QDL_PAD_RGMII_RXC__RGMII_RXC 0x1b0b0 -@@ -91,17 +169,75 @@ - >; - }; - -+ pinctrl_i2c3: i2c3grp { -+ fsl,pins = < -+ MX6QDL_PAD_GPIO_3__I2C3_SCL 0x4001b8b1 -+ MX6QDL_PAD_GPIO_6__I2C3_SDA 0x4001b8b1 -+ >; -+ }; -+ -+ pinctrl_pcie: pciegrp { -+ fsl,pins = < -+ MX6QDL_PAD_ENET_RXD1__GPIO1_IO26 0x80000000 -+ MX6QDL_PAD_EIM_CS1__GPIO2_IO24 0x80000000 -+ >; -+ }; -+ - pinctrl_uart4: uart4grp { - fsl,pins = < - MX6QDL_PAD_KEY_COL0__UART4_TX_DATA 0x1b0b1 - MX6QDL_PAD_KEY_ROW0__UART4_RX_DATA 0x1b0b1 - >; - }; -+ -+ pinctrl_usbh1: usbh1grp { -+ fsl,pins = < -+ MX6QDL_PAD_SD3_RST__GPIO7_IO08 0x80000000 -+ >; -+ }; -+ -+ pinctrl_usbotg: usbotggrp { -+ fsl,pins = < -+ MX6QDL_PAD_ENET_RX_ER__USB_OTG_ID 0x17059 -+ MX6QDL_PAD_EIM_D22__GPIO3_IO22 0x80000000 -+ >; -+ }; - }; - }; - -+&pcie { -+ pinctrl-names = "default"; -+ pinctrl-0 = <&pinctrl_pcie>; -+ reset-gpio = <&gpio1 26 0>; -+ power-on-gpio = <&gpio2 24 0>; -+ status = "okay"; -+}; -+ -+&sata { -+ status = "okay"; -+}; -+ -+&snvs_poweroff { -+ status = "okay"; -+}; -+ - &uart4 { - pinctrl-names = "default"; - pinctrl-0 = <&pinctrl_uart4>; - status = "okay"; - }; -+ -+&usbotg { -+ vbus-supply = <®_usb_otg_vbus>; -+ pinctrl-names = "default"; -+ pinctrl-0 = <&pinctrl_usbotg>; -+ dr_mode = "otg"; -+ status = "okay"; -+}; -+ -+&usbh1 { -+ vbus-supply = <®_usb_h1_vbus>; -+ pinctrl-names = "default"; -+ pinctrl-0 = <&pinctrl_usbh1>; -+ status = "okay"; -+}; --- -2.8.2 - diff --git a/arm64-ACPI-parse-SPCR-table.patch b/arm64-ACPI-parse-SPCR-table.patch new file mode 100644 index 000000000..ba8a70679 --- /dev/null +++ b/arm64-ACPI-parse-SPCR-table.patch @@ -0,0 +1,596 @@ +From patchwork Fri Aug 12 11:07:14 2016 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +Subject: [v9,1/4] of/serial: move earlycon early_param handling to serial +From: Aleksey Makarov +X-Patchwork-Id: 9276727 +Message-Id: <20160812110717.12351-1-aleksey.makarov@linaro.org> +To: "Rafael J . Wysocki" , + Greg Kroah-Hartman +Cc: linux-serial@vger.kernel.org, linux-acpi@vger.kernel.org, + linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, + Aleksey Makarov , + Russell King , Len Brown , + Leif Lindholm , + Graeme Gregory , Al Stone , + Christopher Covington , + Yury Norov , + Peter Hurley , + Andy Shevchenko , + "Zheng, Lv" , Mark Salter , + Kefeng Wang , + Rob Herring , Frank Rowand , + Jiri Slaby , devicetree@vger.kernel.org +Date: Fri, 12 Aug 2016 14:07:14 +0300 + +From: Leif Lindholm + +We have multiple "earlycon" early_param handlers - merge the DT one into +the main earlycon one. It's a cleanup that also will be useful +to defer setting up DT console until ACPI/DT decision is made. + +Rename the exported function to avoid clashing with the function from +arch/microblaze/kernel/prom.c + +Signed-off-by: Leif Lindholm +Signed-off-by: Aleksey Makarov +Acked-by: Rob Herring +Acked-by: Greg Kroah-Hartman +Reviewed-by: Peter Hurley +Tested-by: Kefeng Wang +--- + drivers/of/fdt.c | 11 +---------- + drivers/tty/serial/earlycon.c | 2 +- + include/linux/of_fdt.h | 3 +++ + 3 files changed, 5 insertions(+), 11 deletions(-) + +diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c +index 55f1b83..741cac53 100644 +--- a/drivers/of/fdt.c ++++ b/drivers/of/fdt.c +@@ -924,7 +924,7 @@ static inline void early_init_dt_check_for_initrd(unsigned long node) + + #ifdef CONFIG_SERIAL_EARLYCON + +-static int __init early_init_dt_scan_chosen_serial(void) ++int __init early_init_dt_scan_chosen_stdout(void) + { + int offset; + const char *p, *q, *options = NULL; +@@ -968,15 +968,6 @@ static int __init early_init_dt_scan_chosen_serial(void) + } + return -ENODEV; + } +- +-static int __init setup_of_earlycon(char *buf) +-{ +- if (buf) +- return 0; +- +- return early_init_dt_scan_chosen_serial(); +-} +-early_param("earlycon", setup_of_earlycon); + #endif + + /** +diff --git a/drivers/tty/serial/earlycon.c b/drivers/tty/serial/earlycon.c +index 067783f..7aae655 100644 +--- a/drivers/tty/serial/earlycon.c ++++ b/drivers/tty/serial/earlycon.c +@@ -209,7 +209,7 @@ static int __init param_setup_earlycon(char *buf) + * don't generate a warning from parse_early_params() in that case + */ + if (!buf || !buf[0]) +- return 0; ++ return early_init_dt_scan_chosen_stdout(); + + err = setup_earlycon(buf); + if (err == -ENOENT || err == -EALREADY) +diff --git a/include/linux/of_fdt.h b/include/linux/of_fdt.h +index 26c3302..4341f32 100644 +--- a/include/linux/of_fdt.h ++++ b/include/linux/of_fdt.h +@@ -14,6 +14,7 @@ + + #include + #include ++#include + + /* Definitions used by the flattened device tree */ + #define OF_DT_HEADER 0xd00dfeed /* marker */ +@@ -66,6 +67,7 @@ extern int early_init_dt_scan_chosen(unsigned long node, const char *uname, + int depth, void *data); + extern int early_init_dt_scan_memory(unsigned long node, const char *uname, + int depth, void *data); ++extern int early_init_dt_scan_chosen_stdout(void); + extern void early_init_fdt_scan_reserved_mem(void); + extern void early_init_fdt_reserve_self(void); + extern void early_init_dt_add_memory_arch(u64 base, u64 size); +@@ -94,6 +96,7 @@ extern void early_get_first_memblock_info(void *, phys_addr_t *); + extern u64 of_flat_dt_translate_address(unsigned long node); + extern void of_fdt_limit_memory(int limit); + #else /* CONFIG_OF_FLATTREE */ ++static inline int early_init_dt_scan_chosen_stdout(void) { return -ENODEV; } + static inline void early_init_fdt_scan_reserved_mem(void) {} + static inline void early_init_fdt_reserve_self(void) {} + static inline const char *of_flat_dt_get_machine_name(void) { return NULL; } +From patchwork Thu Aug 11 15:31:39 2016 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +Subject: [v9,2/4] ACPI: parse SPCR and enable matching console +From: Aleksey Makarov +X-Patchwork-Id: 9275443 +Message-Id: <20160811153152.755-3-aleksey.makarov@linaro.org> +To: "Rafael J . Wysocki" , + Greg Kroah-Hartman +Cc: linux-serial@vger.kernel.org, linux-acpi@vger.kernel.org, + linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, + Aleksey Makarov , + Russell King , Len Brown , + Leif Lindholm , + Graeme Gregory , Al Stone , + Christopher Covington , + Yury Norov , + Peter Hurley , + Andy Shevchenko , + "Zheng, Lv" , Mark Salter , + Kefeng Wang , Jiri Slaby +Date: Thu, 11 Aug 2016 18:31:39 +0300 + +'ARM Server Base Boot Requiremets' [1] mentions SPCR (Serial Port +Console Redirection Table) [2] as a mandatory ACPI table that +specifies the configuration of serial console. + +Defer initialization of DT earlycon until ACPI/DT decision is made. + +Parse the ACPI SPCR table, setup earlycon if required, +enable specified console. + +Thanks to Peter Hurley for explaining how this should work. + +[1] http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.den0044a/index.html +[2] https://msdn.microsoft.com/en-us/library/windows/hardware/dn639132(v=vs.85).aspx + +Signed-off-by: Aleksey Makarov +Reviewed-by: Peter Hurley +Tested-by: Kefeng Wang +Acked-by: Rafael J. Wysocki +--- + drivers/acpi/Kconfig | 3 ++ + drivers/acpi/Makefile | 1 + + drivers/acpi/spcr.c | 111 ++++++++++++++++++++++++++++++++++++++++++ + drivers/tty/serial/earlycon.c | 19 +++++++- + include/linux/acpi.h | 6 +++ + include/linux/serial_core.h | 9 +++- + 6 files changed, 146 insertions(+), 3 deletions(-) + create mode 100644 drivers/acpi/spcr.c + +diff --git a/drivers/acpi/Kconfig b/drivers/acpi/Kconfig +index 6cef2d1..4a269f9 100644 +--- a/drivers/acpi/Kconfig ++++ b/drivers/acpi/Kconfig +@@ -77,6 +77,9 @@ config ACPI_DEBUGGER_USER + + endif + ++config ACPI_SPCR_TABLE ++ bool ++ + config ACPI_SLEEP + bool + depends on SUSPEND || HIBERNATION +diff --git a/drivers/acpi/Makefile b/drivers/acpi/Makefile +index e5ada78..d799593 100644 +--- a/drivers/acpi/Makefile ++++ b/drivers/acpi/Makefile +@@ -81,6 +81,7 @@ obj-$(CONFIG_ACPI_EC_DEBUGFS) += ec_sys.o + obj-$(CONFIG_ACPI_CUSTOM_METHOD)+= custom_method.o + obj-$(CONFIG_ACPI_BGRT) += bgrt.o + obj-$(CONFIG_ACPI_CPPC_LIB) += cppc_acpi.o ++obj-$(CONFIG_ACPI_SPCR_TABLE) += spcr.o + obj-$(CONFIG_ACPI_DEBUGGER_USER) += acpi_dbg.o + + # processor has its own "processor." module_param namespace +diff --git a/drivers/acpi/spcr.c b/drivers/acpi/spcr.c +new file mode 100644 +index 0000000..e8d7bc7 +--- /dev/null ++++ b/drivers/acpi/spcr.c +@@ -0,0 +1,111 @@ ++/* ++ * Copyright (c) 2012, Intel Corporation ++ * Copyright (c) 2015, Red Hat, Inc. ++ * Copyright (c) 2015, 2016 Linaro Ltd. ++ * ++ * 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. ++ * ++ */ ++ ++#define pr_fmt(fmt) "ACPI: SPCR: " fmt ++ ++#include ++#include ++#include ++#include ++ ++/** ++ * parse_spcr() - parse ACPI SPCR table and add preferred console ++ * ++ * @earlycon: set up earlycon for the console specified by the table ++ * ++ * For the architectures with support for ACPI, CONFIG_ACPI_SPCR_TABLE may be ++ * defined to parse ACPI SPCR table. As a result of the parsing preferred ++ * console is registered and if @earlycon is true, earlycon is set up. ++ * ++ * When CONFIG_ACPI_SPCR_TABLE is defined, this function should be called ++ * from arch inintialization code as soon as the DT/ACPI decision is made. ++ * ++ */ ++int __init parse_spcr(bool earlycon) ++{ ++ static char opts[64]; ++ struct acpi_table_spcr *table; ++ acpi_size table_size; ++ acpi_status status; ++ char *uart; ++ char *iotype; ++ int baud_rate; ++ int err; ++ ++ if (acpi_disabled) ++ return -ENODEV; ++ ++ status = acpi_get_table_with_size(ACPI_SIG_SPCR, 0, ++ (struct acpi_table_header **)&table, ++ &table_size); ++ ++ if (ACPI_FAILURE(status)) ++ return -ENOENT; ++ ++ if (table->header.revision < 2) { ++ err = -ENOENT; ++ pr_err("wrong table version\n"); ++ goto done; ++ } ++ ++ iotype = table->serial_port.space_id == ACPI_ADR_SPACE_SYSTEM_MEMORY ? ++ "mmio" : "io"; ++ ++ switch (table->interface_type) { ++ case ACPI_DBG2_ARM_SBSA_32BIT: ++ iotype = "mmio32"; ++ /* fall through */ ++ case ACPI_DBG2_ARM_PL011: ++ case ACPI_DBG2_ARM_SBSA_GENERIC: ++ case ACPI_DBG2_BCM2835: ++ uart = "pl011"; ++ break; ++ case ACPI_DBG2_16550_COMPATIBLE: ++ case ACPI_DBG2_16550_SUBSET: ++ uart = "uart"; ++ break; ++ default: ++ err = -ENOENT; ++ goto done; ++ } ++ ++ switch (table->baud_rate) { ++ case 3: ++ baud_rate = 9600; ++ break; ++ case 4: ++ baud_rate = 19200; ++ break; ++ case 6: ++ baud_rate = 57600; ++ break; ++ case 7: ++ baud_rate = 115200; ++ break; ++ default: ++ err = -ENOENT; ++ goto done; ++ } ++ ++ snprintf(opts, sizeof(opts), "%s,%s,0x%llx,%d", uart, iotype, ++ table->serial_port.address, baud_rate); ++ ++ pr_info("console: %s\n", opts); ++ ++ if (earlycon) ++ setup_earlycon(opts); ++ ++ err = add_preferred_console(uart, 0, opts + strlen(uart) + 1); ++ ++done: ++ early_acpi_os_unmap_memory((void __iomem *)table, table_size); ++ return err; ++} +diff --git a/drivers/tty/serial/earlycon.c b/drivers/tty/serial/earlycon.c +index 7aae655..ea00b9f 100644 +--- a/drivers/tty/serial/earlycon.c ++++ b/drivers/tty/serial/earlycon.c +@@ -21,6 +21,7 @@ + #include + #include + #include ++#include + + #ifdef CONFIG_FIX_EARLYCON_MEM + #include +@@ -199,6 +200,14 @@ int __init setup_earlycon(char *buf) + return -ENOENT; + } + ++/* ++ * When CONFIG_ACPI_SPCR_TABLE is defined, "earlycon" without parameters in ++ * command line does not start DT earlycon immediately, instead it defers ++ * starting it until DT/ACPI decision is made. At that time if ACPI is enabled ++ * call parse_spcr(), else call early_init_dt_scan_chosen_stdout() ++ */ ++bool earlycon_init_is_deferred __initdata; ++ + /* early_param wrapper for setup_earlycon() */ + static int __init param_setup_earlycon(char *buf) + { +@@ -208,8 +217,14 @@ static int __init param_setup_earlycon(char *buf) + * Just 'earlycon' is a valid param for devicetree earlycons; + * don't generate a warning from parse_early_params() in that case + */ +- if (!buf || !buf[0]) +- return early_init_dt_scan_chosen_stdout(); ++ if (!buf || !buf[0]) { ++ if (IS_ENABLED(CONFIG_ACPI_SPCR_TABLE)) { ++ earlycon_init_is_deferred = true; ++ return 0; ++ } else { ++ return early_init_dt_scan_chosen_stdout(); ++ } ++ } + + err = setup_earlycon(buf); + if (err == -ENOENT || err == -EALREADY) +diff --git a/include/linux/acpi.h b/include/linux/acpi.h +index 4d8452c..32407e4 100644 +--- a/include/linux/acpi.h ++++ b/include/linux/acpi.h +@@ -1074,4 +1074,10 @@ void acpi_table_upgrade(void); + static inline void acpi_table_upgrade(void) { } + #endif + ++#ifdef CONFIG_ACPI_SPCR_TABLE ++int parse_spcr(bool earlycon); ++#else ++static inline int parse_spcr(bool earlycon) { return 0; } ++#endif ++ + #endif /*_LINUX_ACPI_H*/ +diff --git a/include/linux/serial_core.h b/include/linux/serial_core.h +index 2f44e20..04b8cfb 100644 +--- a/include/linux/serial_core.h ++++ b/include/linux/serial_core.h +@@ -367,11 +367,18 @@ extern const struct earlycon_id __earlycon_table_end[]; + + #define EARLYCON_DECLARE(_name, fn) OF_EARLYCON_DECLARE(_name, "", fn) + +-extern int setup_earlycon(char *buf); + extern int of_setup_earlycon(const struct earlycon_id *match, + unsigned long node, + const char *options); + ++#ifdef CONFIG_SERIAL_EARLYCON ++extern bool earlycon_init_is_deferred __initdata; ++extern int setup_earlycon(char *buf); ++#else ++static const bool earlycon_init_is_deferred; ++static inline int setup_earlycon(char *buf) { return 0; } ++#endif ++ + struct uart_port *uart_get_console(struct uart_port *ports, int nr, + struct console *c); + int uart_parse_earlycon(char *p, unsigned char *iotype, unsigned long *addr, +From patchwork Thu Aug 11 15:31:40 2016 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +Subject: [v9,3/4] ARM64: ACPI: enable ACPI_SPCR_TABLE +From: Aleksey Makarov +X-Patchwork-Id: 9275457 +Message-Id: <20160811153152.755-4-aleksey.makarov@linaro.org> +To: "Rafael J . Wysocki" , + Greg Kroah-Hartman +Cc: linux-serial@vger.kernel.org, linux-acpi@vger.kernel.org, + linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, + Aleksey Makarov , + Russell King , Len Brown , + Leif Lindholm , + Graeme Gregory , Al Stone , + Christopher Covington , + Yury Norov , + Peter Hurley , + Andy Shevchenko , + "Zheng, Lv" , Mark Salter , + Kefeng Wang , + Catalin Marinas , + Will Deacon +Date: Thu, 11 Aug 2016 18:31:40 +0300 + +SBBR mentions SPCR as a mandatory ACPI table. So enable it for ARM64 + +Earlycon should be set up as early as possible. ACPI boot tables are +mapped in arch/arm64/kernel/acpi.c:acpi_boot_table_init() that +is called from setup_arch() and that's where we parse SPCR. +So it has to be opted-in per-arch. + +When ACPI_SPCR_TABLE is defined initialization of DT earlycon is +deferred until the DT/ACPI decision is done. Initialize DT earlycon +if ACPI is disabled. + +Signed-off-by: Aleksey Makarov +Tested-by: Kefeng Wang +--- + arch/arm64/Kconfig | 1 + + arch/arm64/kernel/acpi.c | 11 ++++++++++- + 2 files changed, 11 insertions(+), 1 deletion(-) + +diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig +index 69c8787..a54dfc0 100644 +--- a/arch/arm64/Kconfig ++++ b/arch/arm64/Kconfig +@@ -4,6 +4,7 @@ config ARM64 + select ACPI_GENERIC_GSI if ACPI + select ACPI_REDUCED_HARDWARE_ONLY if ACPI + select ACPI_MCFG if ACPI ++ select ACPI_SPCR_TABLE if ACPI + select ARCH_HAS_DEVMEM_IS_ALLOWED + select ARCH_HAS_ACPI_TABLE_UPGRADE if ACPI + select ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE +diff --git a/arch/arm64/kernel/acpi.c b/arch/arm64/kernel/acpi.c +index 3e4f1a4..252a6d9 100644 +--- a/arch/arm64/kernel/acpi.c ++++ b/arch/arm64/kernel/acpi.c +@@ -24,6 +24,7 @@ + #include + #include + #include ++#include + + #include + #include +@@ -206,7 +207,7 @@ void __init acpi_boot_table_init(void) + if (param_acpi_off || + (!param_acpi_on && !param_acpi_force && + of_scan_flat_dt(dt_scan_depth1_nodes, NULL))) +- return; ++ goto done; + + /* + * ACPI is disabled at this point. Enable it in order to parse +@@ -226,6 +227,14 @@ void __init acpi_boot_table_init(void) + if (!param_acpi_force) + disable_acpi(); + } ++ ++done: ++ if (acpi_disabled) { ++ if (earlycon_init_is_deferred) ++ early_init_dt_scan_chosen_stdout(); ++ } else { ++ parse_spcr(earlycon_init_is_deferred); ++ } + } + + #ifdef CONFIG_ACPI_APEI +From patchwork Mon Aug 15 13:35:03 2016 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +Subject: [v9,4/4] serial: pl011: add console matching function +From: Aleksey Makarov +X-Patchwork-Id: 9280971 +Message-Id: <20160815133505.15294-1-aleksey.makarov@linaro.org> +To: "Rafael J . Wysocki" , + Greg Kroah-Hartman +Cc: linux-serial@vger.kernel.org, linux-acpi@vger.kernel.org, + linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, + Aleksey Makarov , + Russell King , Len Brown , + Leif Lindholm , + Graeme Gregory , Al Stone , + Christopher Covington , + Yury Norov , + Peter Hurley , + Andy Shevchenko , + "Zheng, Lv" , Mark Salter , + Kefeng Wang , + Russell King , Jiri Slaby +Date: Mon, 15 Aug 2016 16:35:03 +0300 + +This patch adds function pl011_console_match() that implements +method match of struct console. It allows to match consoles against +data specified in a string, for example taken from command line or +compiled by ACPI SPCR table handler. + +Signed-off-by: Aleksey Makarov +Reviewed-by: Peter Hurley +Acked-by: Russell King +--- + drivers/tty/serial/amba-pl011.c | 55 +++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 55 insertions(+) + +diff --git a/drivers/tty/serial/amba-pl011.c b/drivers/tty/serial/amba-pl011.c +index 8a9e213..2f9af8a 100644 +--- a/drivers/tty/serial/amba-pl011.c ++++ b/drivers/tty/serial/amba-pl011.c +@@ -2288,12 +2288,67 @@ static int __init pl011_console_setup(struct console *co, char *options) + return uart_set_options(&uap->port, co, baud, parity, bits, flow); + } + ++/** ++ * pl011_console_match - non-standard console matching ++ * @co: registering console ++ * @name: name from console command line ++ * @idx: index from console command line ++ * @options: ptr to option string from console command line ++ * ++ * Only attempts to match console command lines of the form: ++ * console=pl011,mmio|mmio32,[,] ++ * console=pl011,0x[,] ++ * This form is used to register an initial earlycon boot console and ++ * replace it with the amba_console at pl011 driver init. ++ * ++ * Performs console setup for a match (as required by interface) ++ * If no are specified, then assume the h/w is already setup. ++ * ++ * Returns 0 if console matches; otherwise non-zero to use default matching ++ */ ++static int __init pl011_console_match(struct console *co, char *name, int idx, ++ char *options) ++{ ++ unsigned char iotype; ++ unsigned long addr; ++ int i; ++ ++ if (strcmp(name, "pl011") != 0) ++ return -ENODEV; ++ ++ if (uart_parse_earlycon(options, &iotype, &addr, &options)) ++ return -ENODEV; ++ ++ if (iotype != UPIO_MEM && iotype != UPIO_MEM32) ++ return -ENODEV; ++ ++ /* try to match the port specified on the command line */ ++ for (i = 0; i < ARRAY_SIZE(amba_ports); i++) { ++ struct uart_port *port; ++ ++ if (!amba_ports[i]) ++ continue; ++ ++ port = &amba_ports[i]->port; ++ ++ if (port->mapbase != addr) ++ continue; ++ ++ co->index = i; ++ port->cons = co; ++ return pl011_console_setup(co, options); ++ } ++ ++ return -ENODEV; ++} ++ + static struct uart_driver amba_reg; + static struct console amba_console = { + .name = "ttyAMA", + .write = pl011_console_write, + .device = uart_console_device, + .setup = pl011_console_setup, ++ .match = pl011_console_match, + .flags = CON_PRINTBUFFER, + .index = -1, + .data = &amba_reg, diff --git a/arm64-avoid-needing-console-to-enable-serial-console.patch b/arm64-avoid-needing-console-to-enable-serial-console.patch deleted file mode 100644 index 3c639a0a3..000000000 --- a/arm64-avoid-needing-console-to-enable-serial-console.patch +++ /dev/null @@ -1,46 +0,0 @@ -From ce7a9e482dcf66d155e74b39ada1708cf6d9cb25 Mon Sep 17 00:00:00 2001 -From: Mark Salter -Date: Wed, 25 Mar 2015 14:17:50 -0400 -Subject: [PATCH] arm64: avoid needing console= to enable serial console - -Tell kernel to prefer one of the serial ports for console on -platforms currently supported (pl011 or 8250). console= on -command line will override these assumed preferences. This is -just a hack to get the behavior we want from DT provided by -firmware. - -Signed-off-by: Mark Salter ---- - arch/arm64/kernel/setup.c | 20 ++++++++++++++++++++ - 1 file changed, 20 insertions(+) - -diff --git a/arch/arm64/kernel/setup.c b/arch/arm64/kernel/setup.c -index 9dc67769b6a4..dfac33b47423 100644 ---- a/arch/arm64/kernel/setup.c -+++ b/arch/arm64/kernel/setup.c -@@ -417,3 +417,22 @@ static int __init register_kernel_offset_dumper(void) - return 0; - } - __initcall(register_kernel_offset_dumper); -+ -+/* -+ * Temporary hack to avoid need for console= on command line -+ */ -+static int __init arm64_console_setup(void) -+{ -+ /* Allow cmdline to override our assumed preferences */ -+ if (console_set_on_cmdline) -+ return 0; -+ -+ if (IS_ENABLED(CONFIG_SERIAL_AMBA_PL011)) -+ add_preferred_console("ttyAMA", 0, "115200"); -+ -+ if (IS_ENABLED(CONFIG_SERIAL_8250)) -+ add_preferred_console("ttyS", 0, "115200"); -+ -+ return 0; -+} -+early_initcall(arm64_console_setup); --- -2.5.0 - diff --git a/arm64-pcie-acpi.patch b/arm64-pcie-acpi.patch deleted file mode 100644 index e9a359db6..000000000 --- a/arm64-pcie-acpi.patch +++ /dev/null @@ -1,1247 +0,0 @@ -From 1fc02559de87cd88339a83ad05baa9c2b5bd1ac0 Mon Sep 17 00:00:00 2001 -From: Jayachandran C -Date: Fri, 10 Jun 2016 21:55:09 +0200 -Subject: [PATCH 01/11] PCI/ECAM: Move ecam.h to linux/include/pci-ecam.h - -This header will be used from arch/arm64 for ACPI PCI implementation -so it needs to be moved out of drivers/pci. - -Update users of the header file to use the new name. No functional -changes. - -Signed-off-by: Jayachandran C -Acked-by: Lorenzo Pieralisi ---- - drivers/pci/ecam.c | 3 +- - drivers/pci/ecam.h | 67 ------------------------------------- - drivers/pci/host/pci-host-common.c | 3 +- - drivers/pci/host/pci-host-generic.c | 3 +- - drivers/pci/host/pci-thunder-ecam.c | 3 +- - drivers/pci/host/pci-thunder-pem.c | 3 +- - include/linux/pci-ecam.h | 67 +++++++++++++++++++++++++++++++++++++ - 7 files changed, 72 insertions(+), 77 deletions(-) - delete mode 100644 drivers/pci/ecam.h - create mode 100644 include/linux/pci-ecam.h - -diff --git a/drivers/pci/ecam.c b/drivers/pci/ecam.c -index f9832ad..820e26b 100644 ---- a/drivers/pci/ecam.c -+++ b/drivers/pci/ecam.c -@@ -19,10 +19,9 @@ - #include - #include - #include -+#include - #include - --#include "ecam.h" -- - /* - * On 64-bit systems, we do a single ioremap for the whole config space - * since we have enough virtual address range available. On 32-bit, we -diff --git a/drivers/pci/ecam.h b/drivers/pci/ecam.h -deleted file mode 100644 -index 9878beb..0000000 ---- a/drivers/pci/ecam.h -+++ /dev/null -@@ -1,67 +0,0 @@ --/* -- * Copyright 2016 Broadcom -- * -- * 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 (the "GPL"). -- * -- * This program is distributed in the hope that it will be useful, but -- * WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -- * General Public License version 2 (GPLv2) for more details. -- * -- * You should have received a copy of the GNU General Public License -- * version 2 (GPLv2) along with this source code. -- */ --#ifndef DRIVERS_PCI_ECAM_H --#define DRIVERS_PCI_ECAM_H -- --#include --#include -- --/* -- * struct to hold pci ops and bus shift of the config window -- * for a PCI controller. -- */ --struct pci_config_window; --struct pci_ecam_ops { -- unsigned int bus_shift; -- struct pci_ops pci_ops; -- int (*init)(struct device *, -- struct pci_config_window *); --}; -- --/* -- * struct to hold the mappings of a config space window. This -- * is expected to be used as sysdata for PCI controllers that -- * use ECAM. -- */ --struct pci_config_window { -- struct resource res; -- struct resource busr; -- void *priv; -- struct pci_ecam_ops *ops; -- union { -- void __iomem *win; /* 64-bit single mapping */ -- void __iomem **winp; /* 32-bit per-bus mapping */ -- }; --}; -- --/* create and free pci_config_window */ --struct pci_config_window *pci_ecam_create(struct device *dev, -- struct resource *cfgres, struct resource *busr, -- struct pci_ecam_ops *ops); --void pci_ecam_free(struct pci_config_window *cfg); -- --/* map_bus when ->sysdata is an instance of pci_config_window */ --void __iomem *pci_ecam_map_bus(struct pci_bus *bus, unsigned int devfn, -- int where); --/* default ECAM ops */ --extern struct pci_ecam_ops pci_generic_ecam_ops; -- --#ifdef CONFIG_PCI_HOST_GENERIC --/* for DT-based PCI controllers that support ECAM */ --int pci_host_common_probe(struct platform_device *pdev, -- struct pci_ecam_ops *ops); --#endif --#endif -diff --git a/drivers/pci/host/pci-host-common.c b/drivers/pci/host/pci-host-common.c -index 8cba7ab..c18b9e3 100644 ---- a/drivers/pci/host/pci-host-common.c -+++ b/drivers/pci/host/pci-host-common.c -@@ -20,10 +20,9 @@ - #include - #include - #include -+#include - #include - --#include "../ecam.h" -- - static int gen_pci_parse_request_of_pci_ranges(struct device *dev, - struct list_head *resources, struct resource **bus_range) - { -diff --git a/drivers/pci/host/pci-host-generic.c b/drivers/pci/host/pci-host-generic.c -index 6eaceab..f0ca6de 100644 ---- a/drivers/pci/host/pci-host-generic.c -+++ b/drivers/pci/host/pci-host-generic.c -@@ -23,10 +23,9 @@ - #include - #include - #include -+#include - #include - --#include "../ecam.h" -- - static struct pci_ecam_ops gen_pci_cfg_cam_bus_ops = { - .bus_shift = 16, - .pci_ops = { -diff --git a/drivers/pci/host/pci-thunder-ecam.c b/drivers/pci/host/pci-thunder-ecam.c -index 540d030..a9fc1c9 100644 ---- a/drivers/pci/host/pci-thunder-ecam.c -+++ b/drivers/pci/host/pci-thunder-ecam.c -@@ -11,10 +11,9 @@ - #include - #include - #include -+#include - #include - --#include "../ecam.h" -- - static void set_val(u32 v, int where, int size, u32 *val) - { - int shift = (where & 3) * 8; -diff --git a/drivers/pci/host/pci-thunder-pem.c b/drivers/pci/host/pci-thunder-pem.c -index 9b8ab94..5020d3d 100644 ---- a/drivers/pci/host/pci-thunder-pem.c -+++ b/drivers/pci/host/pci-thunder-pem.c -@@ -18,10 +18,9 @@ - #include - #include - #include -+#include - #include - --#include "../ecam.h" -- - #define PEM_CFG_WR 0x28 - #define PEM_CFG_RD 0x30 - -diff --git a/include/linux/pci-ecam.h b/include/linux/pci-ecam.h -new file mode 100644 -index 0000000..9878beb ---- /dev/null -+++ b/include/linux/pci-ecam.h -@@ -0,0 +1,67 @@ -+/* -+ * Copyright 2016 Broadcom -+ * -+ * 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 (the "GPL"). -+ * -+ * This program is distributed in the hope that it will be useful, but -+ * WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ * General Public License version 2 (GPLv2) for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * version 2 (GPLv2) along with this source code. -+ */ -+#ifndef DRIVERS_PCI_ECAM_H -+#define DRIVERS_PCI_ECAM_H -+ -+#include -+#include -+ -+/* -+ * struct to hold pci ops and bus shift of the config window -+ * for a PCI controller. -+ */ -+struct pci_config_window; -+struct pci_ecam_ops { -+ unsigned int bus_shift; -+ struct pci_ops pci_ops; -+ int (*init)(struct device *, -+ struct pci_config_window *); -+}; -+ -+/* -+ * struct to hold the mappings of a config space window. This -+ * is expected to be used as sysdata for PCI controllers that -+ * use ECAM. -+ */ -+struct pci_config_window { -+ struct resource res; -+ struct resource busr; -+ void *priv; -+ struct pci_ecam_ops *ops; -+ union { -+ void __iomem *win; /* 64-bit single mapping */ -+ void __iomem **winp; /* 32-bit per-bus mapping */ -+ }; -+}; -+ -+/* create and free pci_config_window */ -+struct pci_config_window *pci_ecam_create(struct device *dev, -+ struct resource *cfgres, struct resource *busr, -+ struct pci_ecam_ops *ops); -+void pci_ecam_free(struct pci_config_window *cfg); -+ -+/* map_bus when ->sysdata is an instance of pci_config_window */ -+void __iomem *pci_ecam_map_bus(struct pci_bus *bus, unsigned int devfn, -+ int where); -+/* default ECAM ops */ -+extern struct pci_ecam_ops pci_generic_ecam_ops; -+ -+#ifdef CONFIG_PCI_HOST_GENERIC -+/* for DT-based PCI controllers that support ECAM */ -+int pci_host_common_probe(struct platform_device *pdev, -+ struct pci_ecam_ops *ops); -+#endif -+#endif --- -2.7.4 - -From 5eb9996fc097629854f359f9ad3d959fdacb7f8f Mon Sep 17 00:00:00 2001 -From: Jayachandran C -Date: Fri, 10 Jun 2016 21:55:10 +0200 -Subject: [PATCH 02/11] PCI/ECAM: Add parent device field to pci_config_window - -Add a parent device field to struct pci_config_window. The parent -is not saved now, but will be useful to save it in some cases. -Specifically in case of ACPI for ARM64, it can be used to setup -ACPI companion and domain. - -Since the parent dev is in struct pci_config_window now, we need -not pass it to the init function as a separate argument. - -Signed-off-by: Jayachandran C -Acked-by: Lorenzo Pieralisi ---- - drivers/pci/ecam.c | 3 ++- - drivers/pci/host/pci-thunder-pem.c | 3 ++- - include/linux/pci-ecam.h | 4 ++-- - 3 files changed, 6 insertions(+), 4 deletions(-) - -diff --git a/drivers/pci/ecam.c b/drivers/pci/ecam.c -index 820e26b..66e0d71 100644 ---- a/drivers/pci/ecam.c -+++ b/drivers/pci/ecam.c -@@ -51,6 +51,7 @@ struct pci_config_window *pci_ecam_create(struct device *dev, - if (!cfg) - return ERR_PTR(-ENOMEM); - -+ cfg->parent = dev; - cfg->ops = ops; - cfg->busr.start = busr->start; - cfg->busr.end = busr->end; -@@ -94,7 +95,7 @@ struct pci_config_window *pci_ecam_create(struct device *dev, - } - - if (ops->init) { -- err = ops->init(dev, cfg); -+ err = ops->init(cfg); - if (err) - goto err_exit; - } -diff --git a/drivers/pci/host/pci-thunder-pem.c b/drivers/pci/host/pci-thunder-pem.c -index 5020d3d..91f6fc6 100644 ---- a/drivers/pci/host/pci-thunder-pem.c -+++ b/drivers/pci/host/pci-thunder-pem.c -@@ -284,8 +284,9 @@ static int thunder_pem_config_write(struct pci_bus *bus, unsigned int devfn, - return pci_generic_config_write(bus, devfn, where, size, val); - } - --static int thunder_pem_init(struct device *dev, struct pci_config_window *cfg) -+static int thunder_pem_init(struct pci_config_window *cfg) - { -+ struct device *dev = cfg->parent; - resource_size_t bar4_start; - struct resource *res_pem; - struct thunder_pem_pci *pem_pci; -diff --git a/include/linux/pci-ecam.h b/include/linux/pci-ecam.h -index 9878beb..7adad20 100644 ---- a/include/linux/pci-ecam.h -+++ b/include/linux/pci-ecam.h -@@ -27,8 +27,7 @@ struct pci_config_window; - struct pci_ecam_ops { - unsigned int bus_shift; - struct pci_ops pci_ops; -- int (*init)(struct device *, -- struct pci_config_window *); -+ int (*init)(struct pci_config_window *); - }; - - /* -@@ -45,6 +44,7 @@ struct pci_config_window { - void __iomem *win; /* 64-bit single mapping */ - void __iomem **winp; /* 32-bit per-bus mapping */ - }; -+ struct device *parent;/* ECAM res was from this dev */ - }; - - /* create and free pci_config_window */ --- -2.7.4 - -From 6ed6c1365df5c9201e9b275e8ed4eaa64ef2ec0d Mon Sep 17 00:00:00 2001 -From: Sinan Kaya -Date: Fri, 10 Jun 2016 21:55:11 +0200 -Subject: [PATCH 03/11] PCI: Add new function to unmap IO resources - -We need to release I/O resources so that the same I/O resources -can be allocated again in pci_remap_iospace(), like in PCI hotplug removal -scenario. Therefore implement new pci_unmap_iospace() call which -unmaps I/O space as the symmetry to pci_remap_iospace(). - -Signed-off-by: Sinan Kaya -Signed-off-by: Tomasz Nowicki -Acked-by: Lorenzo Pieralisi ---- - drivers/pci/pci.c | 18 ++++++++++++++++++ - include/linux/pci.h | 1 + - 2 files changed, 19 insertions(+) - -diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c -index c8b4dbd..eb431b5 100644 ---- a/drivers/pci/pci.c -+++ b/drivers/pci/pci.c -@@ -25,6 +25,7 @@ - #include - #include - #include -+#include - #include - #include - #include "pci.h" -@@ -3165,6 +3166,23 @@ int __weak pci_remap_iospace(const struct resource *res, phys_addr_t phys_addr) - #endif - } - -+/** -+ * pci_unmap_iospace - Unmap the memory mapped I/O space -+ * @res: resource to be unmapped -+ * -+ * Unmap the CPU virtual address @res from virtual address space. -+ * Only architectures that have memory mapped IO functions defined -+ * (and the PCI_IOBASE value defined) should call this function. -+ */ -+void pci_unmap_iospace(struct resource *res) -+{ -+#if defined(PCI_IOBASE) && defined(CONFIG_MMU) -+ unsigned long vaddr = (unsigned long)PCI_IOBASE + res->start; -+ -+ unmap_kernel_range(vaddr, resource_size(res)); -+#endif -+} -+ - static void __pci_set_master(struct pci_dev *dev, bool enable) - { - u16 old_cmd, cmd; -diff --git a/include/linux/pci.h b/include/linux/pci.h -index b67e4df..12349de 100644 ---- a/include/linux/pci.h -+++ b/include/linux/pci.h -@@ -1167,6 +1167,7 @@ int pci_register_io_range(phys_addr_t addr, resource_size_t size); - unsigned long pci_address_to_pio(phys_addr_t addr); - phys_addr_t pci_pio_to_address(unsigned long pio); - int pci_remap_iospace(const struct resource *res, phys_addr_t phys_addr); -+void pci_unmap_iospace(struct resource *res); - - static inline pci_bus_addr_t pci_bus_address(struct pci_dev *pdev, int bar) - { --- -2.7.4 - -From 62f4d54fc2d2882b9ebaa920189574f422e12207 Mon Sep 17 00:00:00 2001 -From: Jayachandran C -Date: Fri, 10 Jun 2016 21:55:12 +0200 -Subject: [PATCH 04/11] ACPI/PCI: Support IO resources when parsing PCI host - bridge resources - -Platforms that have memory mapped IO port (such as ARM64) need special -handling for PCI I/O resources. For host bridge's resource probing case -these resources need to be fixed up with -pci_register_io_range()/pci_remap_iospace() etc. - -The same I/O resources need to be released after hotplug -removal so that it can be re-added back by the pci_remap_iospace() -function during insertion. As a consequence unmap I/O resources -with pci_unmap_iospace() when we release host bridge resources. - -Signed-off-by: Jayachandran C -Signed-off-by: Sinan Kaya -[ Tomasz: merged in Sinan's patch to unmap IO resources properly, updated changelog] -Signed-off-by: Tomasz Nowicki -Reviewed-by: Lorenzo Pieralisi ---- - drivers/acpi/pci_root.c | 39 +++++++++++++++++++++++++++++++++++++++ - 1 file changed, 39 insertions(+) - -diff --git a/drivers/acpi/pci_root.c b/drivers/acpi/pci_root.c -index ae3fe4e..9a26dd1 100644 ---- a/drivers/acpi/pci_root.c -+++ b/drivers/acpi/pci_root.c -@@ -720,6 +720,40 @@ next: - } - } - -+#ifdef PCI_IOBASE -+static void acpi_pci_root_remap_iospace(struct resource_entry *entry) -+{ -+ struct resource *res = entry->res; -+ resource_size_t cpu_addr = res->start; -+ resource_size_t pci_addr = cpu_addr - entry->offset; -+ resource_size_t length = resource_size(res); -+ unsigned long port; -+ -+ if (pci_register_io_range(cpu_addr, length)) -+ goto err; -+ -+ port = pci_address_to_pio(cpu_addr); -+ if (port == (unsigned long)-1) -+ goto err; -+ -+ res->start = port; -+ res->end = port + length - 1; -+ entry->offset = port - pci_addr; -+ -+ if (pci_remap_iospace(res, cpu_addr) < 0) -+ goto err; -+ -+ pr_info("Remapped I/O %pa to %pR\n", &cpu_addr, res); -+ return; -+err: -+ res->flags |= IORESOURCE_DISABLED; -+} -+#else -+static inline void acpi_pci_root_remap_iospace(struct resource_entry *entry) -+{ -+} -+#endif -+ - int acpi_pci_probe_root_resources(struct acpi_pci_root_info *info) - { - int ret; -@@ -740,6 +774,9 @@ int acpi_pci_probe_root_resources(struct acpi_pci_root_info *info) - "no IO and memory resources present in _CRS\n"); - else { - resource_list_for_each_entry_safe(entry, tmp, list) { -+ if (entry->res->flags & IORESOURCE_IO) -+ acpi_pci_root_remap_iospace(entry); -+ - if (entry->res->flags & IORESOURCE_DISABLED) - resource_list_destroy_entry(entry); - else -@@ -811,6 +848,8 @@ static void acpi_pci_root_release_info(struct pci_host_bridge *bridge) - - resource_list_for_each_entry(entry, &bridge->windows) { - res = entry->res; -+ if (res->flags & IORESOURCE_IO) -+ pci_unmap_iospace(res); - if (res->parent && - (res->flags & (IORESOURCE_MEM | IORESOURCE_IO))) - release_resource(res); --- -2.7.4 - -From dd4f7822d702cca83baa1de7a5f69344ffb82af9 Mon Sep 17 00:00:00 2001 -From: Tomasz Nowicki -Date: Fri, 10 Jun 2016 21:55:13 +0200 -Subject: [PATCH 05/11] ACPI/PCI: Add generic MCFG table handling - -According to PCI firmware specifications, on systems booting with ACPI, -PCI configuration for a host bridge must be set-up through the MCFG table -regions for non-hotpluggable bridges and _CBA method for hotpluggable ones. - -Current MCFG table handling code, as implemented for x86, cannot be -easily generalized owing to x86 specific quirks handling and related -code, which makes it hard to reuse on other architectures. - -In order to implement MCFG PCI configuration handling for new platforms -booting with ACPI (eg ARM64) this patch re-implements MCFG handling from -scratch in a streamlined fashion and provides (through a generic -interface available to all arches): - -- Simplified MCFG table parsing (executed through the pci_mmcfg_late_init() - hook as in current x86) -- MCFG regions look-up interface through domain:bus_start:bus_end tuple - -The new MCFG regions handling interface is added to generic ACPI code -so that existing architectures (eg x86) can be moved over to it and -architectures relying on MCFG for ACPI PCI config space can rely on it -without having to resort to arch specific implementations. - -Signed-off-by: Tomasz Nowicki -Signed-off-by: Jayachandran C -Reviewed-by: Lorenzo Pieralisi ---- - drivers/acpi/Kconfig | 3 ++ - drivers/acpi/Makefile | 1 + - drivers/acpi/pci_mcfg.c | 92 ++++++++++++++++++++++++++++++++++++++++++++++++ - include/linux/pci-acpi.h | 2 ++ - include/linux/pci.h | 2 +- - 5 files changed, 99 insertions(+), 1 deletion(-) - create mode 100644 drivers/acpi/pci_mcfg.c - -diff --git a/drivers/acpi/Kconfig b/drivers/acpi/Kconfig -index b7e2e77..f98c328 100644 ---- a/drivers/acpi/Kconfig -+++ b/drivers/acpi/Kconfig -@@ -217,6 +217,9 @@ config ACPI_PROCESSOR_IDLE - bool - select CPU_IDLE - -+config ACPI_MCFG -+ bool -+ - config ACPI_CPPC_LIB - bool - depends on ACPI_PROCESSOR -diff --git a/drivers/acpi/Makefile b/drivers/acpi/Makefile -index 251ce85..632e81f 100644 ---- a/drivers/acpi/Makefile -+++ b/drivers/acpi/Makefile -@@ -40,6 +40,7 @@ acpi-$(CONFIG_ARCH_MIGHT_HAVE_ACPI_PDC) += processor_pdc.o - acpi-y += ec.o - acpi-$(CONFIG_ACPI_DOCK) += dock.o - acpi-y += pci_root.o pci_link.o pci_irq.o -+obj-$(CONFIG_ACPI_MCFG) += pci_mcfg.o - acpi-y += acpi_lpss.o acpi_apd.o - acpi-y += acpi_platform.o - acpi-y += acpi_pnp.o -diff --git a/drivers/acpi/pci_mcfg.c b/drivers/acpi/pci_mcfg.c -new file mode 100644 -index 0000000..d3c3e85 ---- /dev/null -+++ b/drivers/acpi/pci_mcfg.c -@@ -0,0 +1,92 @@ -+/* -+ * Copyright (C) 2016 Broadcom -+ * Author: Jayachandran C -+ * Copyright (C) 2016 Semihalf -+ * Author: Tomasz Nowicki -+ * -+ * 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 (the "GPL"). -+ * -+ * This program is distributed in the hope that it will be useful, but -+ * WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ * General Public License version 2 (GPLv2) for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * version 2 (GPLv2) along with this source code. -+ */ -+ -+#define pr_fmt(fmt) "ACPI: " fmt -+ -+#include -+#include -+#include -+ -+/* Structure to hold entries from the MCFG table */ -+struct mcfg_entry { -+ struct list_head list; -+ phys_addr_t addr; -+ u16 segment; -+ u8 bus_start; -+ u8 bus_end; -+}; -+ -+/* List to save mcfg entries */ -+static LIST_HEAD(pci_mcfg_list); -+ -+phys_addr_t pci_mcfg_lookup(u16 seg, struct resource *bus_res) -+{ -+ struct mcfg_entry *e; -+ -+ /* -+ * We expect exact match, unless MCFG entry end bus covers more than -+ * specified by caller. -+ */ -+ list_for_each_entry(e, &pci_mcfg_list, list) { -+ if (e->segment == seg && e->bus_start == bus_res->start && -+ e->bus_end >= bus_res->end) -+ return e->addr; -+ } -+ -+ return 0; -+} -+ -+static __init int pci_mcfg_parse(struct acpi_table_header *header) -+{ -+ struct acpi_table_mcfg *mcfg; -+ struct acpi_mcfg_allocation *mptr; -+ struct mcfg_entry *e, *arr; -+ int i, n; -+ -+ if (header->length < sizeof(struct acpi_table_mcfg)) -+ return -EINVAL; -+ -+ n = (header->length - sizeof(struct acpi_table_mcfg)) / -+ sizeof(struct acpi_mcfg_allocation); -+ mcfg = (struct acpi_table_mcfg *)header; -+ mptr = (struct acpi_mcfg_allocation *) &mcfg[1]; -+ -+ arr = kcalloc(n, sizeof(*arr), GFP_KERNEL); -+ if (!arr) -+ return -ENOMEM; -+ -+ for (i = 0, e = arr; i < n; i++, mptr++, e++) { -+ e->segment = mptr->pci_segment; -+ e->addr = mptr->address; -+ e->bus_start = mptr->start_bus_number; -+ e->bus_end = mptr->end_bus_number; -+ list_add(&e->list, &pci_mcfg_list); -+ } -+ -+ pr_info("MCFG table detected, %d entries\n", n); -+ return 0; -+} -+ -+/* Interface called by ACPI - parse and save MCFG table */ -+void __init pci_mmcfg_late_init(void) -+{ -+ int err = acpi_table_parse(ACPI_SIG_MCFG, pci_mcfg_parse); -+ if (err) -+ pr_err("Failed to parse MCFG (%d)\n", err); -+} -diff --git a/include/linux/pci-acpi.h b/include/linux/pci-acpi.h -index 89ab057..7d63a66 100644 ---- a/include/linux/pci-acpi.h -+++ b/include/linux/pci-acpi.h -@@ -24,6 +24,8 @@ static inline acpi_status pci_acpi_remove_pm_notifier(struct acpi_device *dev) - } - extern phys_addr_t acpi_pci_root_get_mcfg_addr(acpi_handle handle); - -+extern phys_addr_t pci_mcfg_lookup(u16 domain, struct resource *bus_res); -+ - static inline acpi_handle acpi_find_root_bridge_handle(struct pci_dev *pdev) - { - struct pci_bus *pbus = pdev->bus; -diff --git a/include/linux/pci.h b/include/linux/pci.h -index 12349de..ce03d65 100644 ---- a/include/linux/pci.h -+++ b/include/linux/pci.h -@@ -1723,7 +1723,7 @@ void pcibios_free_irq(struct pci_dev *dev); - extern struct dev_pm_ops pcibios_pm_ops; - #endif - --#ifdef CONFIG_PCI_MMCONFIG -+#if defined(CONFIG_PCI_MMCONFIG) || defined(CONFIG_ACPI_MCFG) - void __init pci_mmcfg_early_init(void); - void __init pci_mmcfg_late_init(void); - #else --- -2.7.4 - -From fc1907f9c79f9a0a0c2f4d579896e678915fec48 Mon Sep 17 00:00:00 2001 -From: Tomasz Nowicki -Date: Fri, 10 Jun 2016 21:55:14 +0200 -Subject: [PATCH 06/11] PCI: Refactor generic bus domain assignment - -Change the way PCI bus domain number is assigned and improve function -name to reflect what function does. No functional changes. - -Instead of assigning bus domain number inside of pci_bus_assign_domain_nr() -simply return domain number and let pci_create_root_bus() do assignment. -This way pci_create_root_bus() setups bus structure data in the consistent -way. Since pci_bus_assign_domain_nr() now does not assign but retrieves -domain number instead, rename it to pci_bus_find_domain_nr(). - -Signed-off-by: Tomasz Nowicki -Reviewed-by: Lorenzo Pieralisi ---- - drivers/pci/pci.c | 4 ++-- - drivers/pci/probe.c | 4 +++- - include/linux/pci.h | 7 +------ - 3 files changed, 6 insertions(+), 9 deletions(-) - -diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c -index eb431b5..b9a7833 100644 ---- a/drivers/pci/pci.c -+++ b/drivers/pci/pci.c -@@ -4941,7 +4941,7 @@ int pci_get_new_domain_nr(void) - } - - #ifdef CONFIG_PCI_DOMAINS_GENERIC --void pci_bus_assign_domain_nr(struct pci_bus *bus, struct device *parent) -+int pci_bus_find_domain_nr(struct pci_bus *bus, struct device *parent) - { - static int use_dt_domains = -1; - int domain = -1; -@@ -4985,7 +4985,7 @@ void pci_bus_assign_domain_nr(struct pci_bus *bus, struct device *parent) - domain = -1; - } - -- bus->domain_nr = domain; -+ return domain; - } - #endif - #endif -diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c -index 8e3ef72..380d46d 100644 ---- a/drivers/pci/probe.c -+++ b/drivers/pci/probe.c -@@ -2127,7 +2127,9 @@ struct pci_bus *pci_create_root_bus(struct device *parent, int bus, - b->sysdata = sysdata; - b->ops = ops; - b->number = b->busn_res.start = bus; -- pci_bus_assign_domain_nr(b, parent); -+#ifdef CONFIG_PCI_DOMAINS_GENERIC -+ b->domain_nr = pci_bus_find_domain_nr(b, parent); -+#endif - b2 = pci_find_bus(pci_domain_nr(b), bus); - if (b2) { - /* If we already got to this bus through a different bridge, ignore it */ -diff --git a/include/linux/pci.h b/include/linux/pci.h -index ce03d65..48839e8 100644 ---- a/include/linux/pci.h -+++ b/include/linux/pci.h -@@ -1390,12 +1390,7 @@ static inline int pci_domain_nr(struct pci_bus *bus) - { - return bus->domain_nr; - } --void pci_bus_assign_domain_nr(struct pci_bus *bus, struct device *parent); --#else --static inline void pci_bus_assign_domain_nr(struct pci_bus *bus, -- struct device *parent) --{ --} -+int pci_bus_find_domain_nr(struct pci_bus *bus, struct device *parent); - #endif - - /* some architectures require additional setup to direct VGA traffic */ --- -2.7.4 - -From d6d45ae1d58658111d5e838c41b9ed4729bbb81e Mon Sep 17 00:00:00 2001 -From: Tomasz Nowicki -Date: Fri, 10 Jun 2016 21:55:15 +0200 -Subject: [PATCH 07/11] PCI: Factor DT specific pci_bus_find_domain_nr() code - out - -pci_bus_find_domain_nr() retrieves the host bridge domain number in a DT -specific way. Factor our pci_bus_find_domain_nr() in a separate DT -function (ie of_pci_bus_find_domain_nr()) so that DT code is self -contained, paving the way for retrieving domain number in -pci_bus_find_domain_nr() with additional firmware methods (ie ACPI). - -Signed-off-by: Tomasz Nowicki -Reviewed-by: Lorenzo Pieralisi ---- - drivers/pci/pci.c | 7 ++++++- - 1 file changed, 6 insertions(+), 1 deletion(-) - -diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c -index b9a7833..97f7cd4 100644 ---- a/drivers/pci/pci.c -+++ b/drivers/pci/pci.c -@@ -4941,7 +4941,7 @@ int pci_get_new_domain_nr(void) - } - - #ifdef CONFIG_PCI_DOMAINS_GENERIC --int pci_bus_find_domain_nr(struct pci_bus *bus, struct device *parent) -+static int of_pci_bus_find_domain_nr(struct device *parent) - { - static int use_dt_domains = -1; - int domain = -1; -@@ -4987,6 +4987,11 @@ int pci_bus_find_domain_nr(struct pci_bus *bus, struct device *parent) - - return domain; - } -+ -+int pci_bus_find_domain_nr(struct pci_bus *bus, struct device *parent) -+{ -+ return of_pci_bus_find_domain_nr(parent); -+} - #endif - #endif - --- -2.7.4 - -From 92d59511fd365d3c0c31d074b5e96cf48c58f68b Mon Sep 17 00:00:00 2001 -From: Peter Robinson -Date: Thu, 30 Jun 2016 16:56:24 +0100 -Subject: [PATCH 08/11] ARM64/PCI: Add ACPI hook to assign domain number - -PCI core code provides a config option (CONFIG_PCI_DOMAINS_GENERIC) -that allows assigning the PCI bus domain number generically by -relying on device tree bindings, and falling back to a simple counter -when the respective DT properties (ie "linux,pci-domain") are not -specified in the host bridge device tree node. - -In a similar way, when a system is booted through ACPI, architectures -that are selecting CONFIG_PCI_DOMAINS_GENERIC (ie ARM64) require kernel -hooks to retrieve the domain number so that the PCI bus domain number -set-up can be handled seamlessly with DT and ACPI in generic core code -when CONFIG_PCI_DOMAINS_GENERIC is selected. - -Since currently it is not possible to retrieve a pointer to the PCI -host bridge ACPI device backing the host bridge from core PCI code -(which would allow retrieving the domain number in an arch agnostic -way through the ACPI _SEG method), an arch specific ACPI hook has to -be declared and implemented by all arches that rely on -CONFIG_PCI_DOMAINS_GENERIC to retrieve the domain number and set it -up in core PCI code. - -For the aforementioned reasons, introduce acpi_pci_bus_find_domain_nr() -hook to retrieve the domain number on a per-arch basis when the system -boots through ACPI. ARM64 dummy implementation of the same is provided -in first place in preparation for ARM64 ACPI based PCI host controller -driver. - -acpi_pci_bus_find_domain_nr() is called from generic -pci_bus_find_domain_nr() as an ACPI option to DT domain assignment. - -Signed-off-by: Tomasz Nowicki -Signed-off-by: Lorenzo Pieralisi ---- - arch/arm64/kernel/pci.c | 7 +++++++ - drivers/pci/pci.c | 4 +++- - include/linux/pci.h | 7 +++++++ - 3 files changed, 17 insertions(+), 1 deletion(-) - -diff --git a/arch/arm64/kernel/pci.c b/arch/arm64/kernel/pci.c -index 3c4e308..d5d3d26 100644 ---- a/arch/arm64/kernel/pci.c -+++ b/arch/arm64/kernel/pci.c -@@ -17,6 +17,7 @@ - #include - #include - #include -+#include - #include - - /* -@@ -85,6 +86,12 @@ EXPORT_SYMBOL(pcibus_to_node); - #endif - - #ifdef CONFIG_ACPI -+ -+int acpi_pci_bus_find_domain_nr(struct pci_bus *bus) -+{ -+ return 0; -+} -+ - /* Root bridge scanning */ - struct pci_bus *pci_acpi_scan_root(struct acpi_pci_root *root) - { -diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c -index 97f7cd4..4834cee 100644 ---- a/drivers/pci/pci.c -+++ b/drivers/pci/pci.c -@@ -7,6 +7,7 @@ - * Copyright 1997 -- 2000 Martin Mares - */ - -+#include - #include - #include - #include -@@ -4990,7 +4991,8 @@ static int of_pci_bus_find_domain_nr(struct device *parent) - - int pci_bus_find_domain_nr(struct pci_bus *bus, struct device *parent) - { -- return of_pci_bus_find_domain_nr(parent); -+ return acpi_disabled ? of_pci_bus_find_domain_nr(parent) : -+ acpi_pci_bus_find_domain_nr(bus); - } - #endif - #endif -diff --git a/include/linux/pci.h b/include/linux/pci.h -index 48839e8..49ba8af 100644 ---- a/include/linux/pci.h -+++ b/include/linux/pci.h -@@ -1390,6 +1390,13 @@ static inline int pci_domain_nr(struct pci_bus *bus) - { - return bus->domain_nr; - } -+/* Arch specific ACPI hook to set-up domain number */ -+#ifdef CONFIG_ACPI -+int acpi_pci_bus_find_domain_nr(struct pci_bus *bus); -+#else -+static inline int acpi_pci_bus_find_domain_nr(struct pci_bus *bus) -+{ return 0; } -+#endif - int pci_bus_find_domain_nr(struct pci_bus *bus, struct device *parent); - #endif - --- -2.7.4 - -From bb06753d2e163d8100a017f06a6d9dd195d68a76 Mon Sep 17 00:00:00 2001 -From: Tomasz Nowicki -Date: Fri, 10 Jun 2016 21:55:17 +0200 -Subject: [PATCH 09/11] ARM64/PCI: ACPI support for legacy IRQs parsing and - consolidation with DT code - -To enable PCI legacy IRQs on platforms booting with ACPI, arch code -should include ACPI specific callbacks that parse and set-up the -device IRQ number, equivalent to the DT boot path. Owing to the current -ACPI core scan handlers implementation, ACPI PCI legacy IRQs bindings -cannot be parsed at device add time, since that would trigger ACPI scan -handlers ordering issues depending on how the ACPI tables are defined. - -To solve this problem and consolidate FW PCI legacy IRQs parsing in -one single pcibios callback (pending final removal), this patch moves -DT PCI IRQ parsing to the pcibios_alloc_irq() callback (called by -PCI core code at device probe time) and adds ACPI PCI legacy IRQs -parsing to the same callback too, so that FW PCI legacy IRQs parsing -is confined in one single arch callback that can be easily removed -when code parsing PCI legacy IRQs is consolidated and moved to core -PCI code. - -Signed-off-by: Tomasz Nowicki -Suggested-by: Lorenzo Pieralisi ---- - arch/arm64/kernel/pci.c | 11 ++++++++--- - 1 file changed, 8 insertions(+), 3 deletions(-) - -diff --git a/arch/arm64/kernel/pci.c b/arch/arm64/kernel/pci.c -index d5d3d26..b3b8a2c 100644 ---- a/arch/arm64/kernel/pci.c -+++ b/arch/arm64/kernel/pci.c -@@ -51,11 +51,16 @@ int pcibios_enable_device(struct pci_dev *dev, int mask) - } - - /* -- * Try to assign the IRQ number from DT when adding a new device -+ * Try to assign the IRQ number when probing a new device - */ --int pcibios_add_device(struct pci_dev *dev) -+int pcibios_alloc_irq(struct pci_dev *dev) - { -- dev->irq = of_irq_parse_and_map_pci(dev, 0, 0); -+ if (acpi_disabled) -+ dev->irq = of_irq_parse_and_map_pci(dev, 0, 0); -+#ifdef CONFIG_ACPI -+ else -+ return acpi_pci_irq_enable(dev); -+#endif - - return 0; - } --- -2.7.4 - -From b6e298840f532192a589f8ade128dec3fef3a4c6 Mon Sep 17 00:00:00 2001 -From: Tomasz Nowicki -Date: Fri, 10 Jun 2016 21:55:18 +0200 -Subject: [PATCH 10/11] ARM64/PCI: Implement ACPI low-level calls to access - PCI_Config region from AML - -ACPI spec6.1 - chapter: 5.5.2.4 defines OperationRegion (Declare Operation -Region). Following the spec: " [...] An Operation Region is a specific -region of operation within an address space that is declared as a subset -of the entire address space using a starting address (offset) and a length. -Control methods must have exclusive access to any address accessed via -fields declared in Operation Regions. [...]". - -OperationRegion allows to declare various of operation region address space -identifiers including PCI_Config. PCI_Config is meant to access PCI -configuration space from the ASL. So every time ASL opcode operates -on PCI_Config space region, ASL interpreter dispatches accesses to OS -low-level calls - raw_pci_write() and raw_pci_read() for Linux - so-called -ACPI RAW accessors. - -In order to support PCI_Config operation region, implement mentioned -raw_pci_write() and raw_pci_read() calls so they find associated bus -and call read/write ops. - -Waiting for clarification in the ACPI specifications in relation -to PCI_Config space handling before PCI bus enumeration is completed, -current code does not support PCI_Config region accesses before PCI bus -enumeration whilst providing full AML PCI_Config access availability -when the PCI bus enumeration is completed by the kernel so that -RAW accessors can look-up PCI operations through the struct pci_bus -associated with a PCI bus. - -Signed-off-by: Tomasz Nowicki -Signed-off-by: Jayachandran C -Reviewed-by: Lorenzo Pieralisi ---- - arch/arm64/kernel/pci.c | 12 ++++++++++-- - 1 file changed, 10 insertions(+), 2 deletions(-) - -diff --git a/arch/arm64/kernel/pci.c b/arch/arm64/kernel/pci.c -index b3b8a2c..328f857 100644 ---- a/arch/arm64/kernel/pci.c -+++ b/arch/arm64/kernel/pci.c -@@ -71,13 +71,21 @@ int pcibios_alloc_irq(struct pci_dev *dev) - int raw_pci_read(unsigned int domain, unsigned int bus, - unsigned int devfn, int reg, int len, u32 *val) - { -- return -ENXIO; -+ struct pci_bus *b = pci_find_bus(domain, bus); -+ -+ if (!b) -+ return PCIBIOS_DEVICE_NOT_FOUND; -+ return b->ops->read(b, devfn, reg, len, val); - } - - int raw_pci_write(unsigned int domain, unsigned int bus, - unsigned int devfn, int reg, int len, u32 val) - { -- return -ENXIO; -+ struct pci_bus *b = pci_find_bus(domain, bus); -+ -+ if (!b) -+ return PCIBIOS_DEVICE_NOT_FOUND; -+ return b->ops->write(b, devfn, reg, len, val); - } - - #ifdef CONFIG_NUMA --- -2.7.4 - -From 3b8cff3fa89ba3ef6f1cf09a0667aa470b7fad0b Mon Sep 17 00:00:00 2001 -From: Tomasz Nowicki -Date: Fri, 10 Jun 2016 21:55:19 +0200 -Subject: [PATCH 11/11] ARM64/PCI: Support for ACPI based PCI host controller - -Implement pci_acpi_scan_root and other arch-specific call so that ARM64 -can start using ACPI to setup and enumerate PCI buses. - -Prior to buses enumeration the pci_acpi_scan_root() implementation looks -for configuration space start address (obtained through ACPI _CBA method or -MCFG interface). If succeed, it uses ECAM library to create new mapping. -Then it attaches generic ECAM ops (pci_generic_ecam_ops) which are used -for accessing configuration space later on. - -On ARM64, we need to use generic domains (CONFIG_PCI_DOMAINS_GENERIC). -In order to achieve that for ACPI case implement -acpi_pci_bus_find_domain_nr() body so that it retrieves pci_config_window -structure from bus sysdata and eventually gets domain number from -acpi_pci_root structure. - -ACPI requires to run acpi_pci_{add|remove}_bus while new PCI bus is created. -This allows to do some ACPI-specific additional configuration, like -PCI hotplug slot enumeration. In order to fulfill these requirements, -we implement arch-specific pcibios_{add|remove}_bus calls -and call acpi_pci_{add|remove}_bus from there. - -Signed-off-by: Tomasz Nowicki -Signed-off-by: Jayachandran C -Reviewed-by: Lorenzo Pieralisi ---- - arch/arm64/Kconfig | 2 + - arch/arm64/kernel/pci.c | 116 ++++++++++++++++++++++++++++++++++++++++++++++-- - 2 files changed, 115 insertions(+), 3 deletions(-) - -diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig -index 5a0a691..4806cde 100644 ---- a/arch/arm64/Kconfig -+++ b/arch/arm64/Kconfig -@@ -3,6 +3,7 @@ config ARM64 - select ACPI_CCA_REQUIRED if ACPI - select ACPI_GENERIC_GSI if ACPI - select ACPI_REDUCED_HARDWARE_ONLY if ACPI -+ select ACPI_MCFG if ACPI - select ARCH_HAS_DEVMEM_IS_ALLOWED - select ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE - select ARCH_HAS_ELF_RANDOMIZE -@@ -96,6 +97,7 @@ config ARM64 - select OF_EARLY_FLATTREE - select OF_NUMA if NUMA && OF - select OF_RESERVED_MEM -+ select PCI_ECAM if ACPI - select PERF_USE_VMALLOC - select POWER_RESET - select POWER_SUPPLY -diff --git a/arch/arm64/kernel/pci.c b/arch/arm64/kernel/pci.c -index 328f857..94cd43c 100644 ---- a/arch/arm64/kernel/pci.c -+++ b/arch/arm64/kernel/pci.c -@@ -18,6 +18,8 @@ - #include - #include - #include -+#include -+#include - #include - - /* -@@ -100,15 +102,123 @@ EXPORT_SYMBOL(pcibus_to_node); - - #ifdef CONFIG_ACPI - -+struct acpi_pci_generic_root_info { -+ struct acpi_pci_root_info common; -+ struct pci_config_window *cfg; /* config space mapping */ -+}; -+ - int acpi_pci_bus_find_domain_nr(struct pci_bus *bus) - { -+ struct pci_config_window *cfg = bus->sysdata; -+ struct acpi_device *adev = to_acpi_device(cfg->parent); -+ struct acpi_pci_root *root = acpi_driver_data(adev); -+ -+ return root->segment; -+} -+ -+int pcibios_root_bridge_prepare(struct pci_host_bridge *bridge) -+{ -+ if (!acpi_disabled) { -+ struct pci_config_window *cfg = bridge->bus->sysdata; -+ struct acpi_device *adev = to_acpi_device(cfg->parent); -+ ACPI_COMPANION_SET(&bridge->dev, adev); -+ } -+ - return 0; - } - --/* Root bridge scanning */ -+/* -+ * Lookup the bus range for the domain in MCFG, and set up config space -+ * mapping. -+ */ -+static struct pci_config_window * -+pci_acpi_setup_ecam_mapping(struct acpi_pci_root *root) -+{ -+ struct resource *bus_res = &root->secondary; -+ u16 seg = root->segment; -+ struct pci_config_window *cfg; -+ struct resource cfgres; -+ unsigned int bsz; -+ -+ /* Use address from _CBA if present, otherwise lookup MCFG */ -+ if (!root->mcfg_addr) -+ root->mcfg_addr = pci_mcfg_lookup(seg, bus_res); -+ -+ if (!root->mcfg_addr) { -+ dev_err(&root->device->dev, "%04x:%pR ECAM region not found\n", -+ seg, bus_res); -+ return NULL; -+ } -+ -+ bsz = 1 << pci_generic_ecam_ops.bus_shift; -+ cfgres.start = root->mcfg_addr + bus_res->start * bsz; -+ cfgres.end = cfgres.start + resource_size(bus_res) * bsz - 1; -+ cfgres.flags = IORESOURCE_MEM; -+ cfg = pci_ecam_create(&root->device->dev, &cfgres, bus_res, -+ &pci_generic_ecam_ops); -+ if (IS_ERR(cfg)) { -+ dev_err(&root->device->dev, "%04x:%pR error %ld mapping ECAM\n", -+ seg, bus_res, PTR_ERR(cfg)); -+ return NULL; -+ } -+ -+ return cfg; -+} -+ -+/* release_info: free resources allocated by init_info */ -+static void pci_acpi_generic_release_info(struct acpi_pci_root_info *ci) -+{ -+ struct acpi_pci_generic_root_info *ri; -+ -+ ri = container_of(ci, struct acpi_pci_generic_root_info, common); -+ pci_ecam_free(ri->cfg); -+ kfree(ri); -+} -+ -+static struct acpi_pci_root_ops acpi_pci_root_ops = { -+ .release_info = pci_acpi_generic_release_info, -+}; -+ -+/* Interface called from ACPI code to setup PCI host controller */ - struct pci_bus *pci_acpi_scan_root(struct acpi_pci_root *root) - { -- /* TODO: Should be revisited when implementing PCI on ACPI */ -- return NULL; -+ int node = acpi_get_node(root->device->handle); -+ struct acpi_pci_generic_root_info *ri; -+ struct pci_bus *bus, *child; -+ -+ ri = kzalloc_node(sizeof(*ri), GFP_KERNEL, node); -+ if (!ri) -+ return NULL; -+ -+ ri->cfg = pci_acpi_setup_ecam_mapping(root); -+ if (!ri->cfg) { -+ kfree(ri); -+ return NULL; -+ } -+ -+ acpi_pci_root_ops.pci_ops = &ri->cfg->ops->pci_ops; -+ bus = acpi_pci_root_create(root, &acpi_pci_root_ops, &ri->common, -+ ri->cfg); -+ if (!bus) -+ return NULL; -+ -+ pci_bus_size_bridges(bus); -+ pci_bus_assign_resources(bus); -+ -+ list_for_each_entry(child, &bus->children, node) -+ pcie_bus_configure_settings(child); -+ -+ return bus; -+} -+ -+void pcibios_add_bus(struct pci_bus *bus) -+{ -+ acpi_pci_add_bus(bus); - } -+ -+void pcibios_remove_bus(struct pci_bus *bus) -+{ -+ acpi_pci_remove_bus(bus); -+} -+ - #endif --- -2.7.4 - diff --git a/arm64-pcie-quirks-xgene.patch b/arm64-pcie-quirks-xgene.patch deleted file mode 100644 index 8e6805df6..000000000 --- a/arm64-pcie-quirks-xgene.patch +++ /dev/null @@ -1,508 +0,0 @@ -From 767b70aa55d013f0c7589955f410d488fed5776a Mon Sep 17 00:00:00 2001 -From: Peter Robinson -Date: Tue, 5 Jul 2016 23:49:39 +0100 -Subject: [PATCH 1/4] Some platforms may not be fully compliant with generic - set of PCI config accessors. For these cases we implement the way to - overwrite accessors set. Algorithm traverses available quirk list, matches - against tuple and returns - corresponding PCI config ops. oem_id and oem_table_id come from MCFG table - standard header. All quirks can be defined using DECLARE_ACPI_MCFG_FIXUP() - macro and kept self contained. Example: - -/* Custom PCI config ops */ -static struct pci_generic_ecam_ops foo_pci_ops = { - .bus_shift = 24, - .pci_ops = { - .map_bus = pci_ecam_map_bus, - .read = foo_ecam_config_read, - .write = foo_ecam_config_write, - } -}; - -DECLARE_ACPI_MCFG_FIXUP(&foo_pci_ops, , , , ); - -Signed-off-by: Tomasz Nowicki -Signed-off-by: Dongdong Liu ---- - drivers/acpi/pci_mcfg.c | 41 ++++++++++++++++++++++++++++++++++++--- - include/asm-generic/vmlinux.lds.h | 7 +++++++ - include/linux/pci-acpi.h | 20 +++++++++++++++++++ - 3 files changed, 65 insertions(+), 3 deletions(-) - -diff --git a/drivers/acpi/pci_mcfg.c b/drivers/acpi/pci_mcfg.c -index d3c3e85..deb0077 100644 ---- a/drivers/acpi/pci_mcfg.c -+++ b/drivers/acpi/pci_mcfg.c -@@ -22,6 +22,10 @@ - #include - #include - #include -+#include -+ -+/* Root pointer to the mapped MCFG table */ -+static struct acpi_table_mcfg *mcfg_table; - - /* Structure to hold entries from the MCFG table */ - struct mcfg_entry { -@@ -35,6 +39,38 @@ struct mcfg_entry { - /* List to save mcfg entries */ - static LIST_HEAD(pci_mcfg_list); - -+extern struct pci_cfg_fixup __start_acpi_mcfg_fixups[]; -+extern struct pci_cfg_fixup __end_acpi_mcfg_fixups[]; -+ -+struct pci_ecam_ops *pci_mcfg_get_ops(struct acpi_pci_root *root) -+{ -+ int bus_num = root->secondary.start; -+ int domain = root->segment; -+ struct pci_cfg_fixup *f; -+ -+ if (!mcfg_table) -+ return &pci_generic_ecam_ops; -+ -+ /* -+ * Match against platform specific quirks and return corresponding -+ * CAM ops. -+ * -+ * First match against PCI topology then use OEM ID and -+ * OEM revision from MCFG table standard header. -+ */ -+ for (f = __start_acpi_mcfg_fixups; f < __end_acpi_mcfg_fixups; f++) { -+ if ((f->domain == domain || f->domain == PCI_MCFG_DOMAIN_ANY) && -+ (f->bus_num == bus_num || f->bus_num == PCI_MCFG_BUS_ANY) && -+ (!strncmp(f->oem_id, mcfg_table->header.oem_id, -+ ACPI_OEM_ID_SIZE)) && -+ (!strncmp(f->oem_table_id, mcfg_table->header.oem_table_id, -+ ACPI_OEM_TABLE_ID_SIZE))) -+ return f->ops; -+ } -+ /* No quirks, use ECAM */ -+ return &pci_generic_ecam_ops; -+} -+ - phys_addr_t pci_mcfg_lookup(u16 seg, struct resource *bus_res) - { - struct mcfg_entry *e; -@@ -54,7 +90,6 @@ phys_addr_t pci_mcfg_lookup(u16 seg, struct resource *bus_res) - - static __init int pci_mcfg_parse(struct acpi_table_header *header) - { -- struct acpi_table_mcfg *mcfg; - struct acpi_mcfg_allocation *mptr; - struct mcfg_entry *e, *arr; - int i, n; -@@ -64,8 +99,8 @@ static __init int pci_mcfg_parse(struct acpi_table_header *header) - - n = (header->length - sizeof(struct acpi_table_mcfg)) / - sizeof(struct acpi_mcfg_allocation); -- mcfg = (struct acpi_table_mcfg *)header; -- mptr = (struct acpi_mcfg_allocation *) &mcfg[1]; -+ mcfg_table = (struct acpi_table_mcfg *)header; -+ mptr = (struct acpi_mcfg_allocation *) &mcfg_table[1]; - - arr = kcalloc(n, sizeof(*arr), GFP_KERNEL); - if (!arr) -diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h -index 6a67ab9..43604fc 100644 ---- a/include/asm-generic/vmlinux.lds.h -+++ b/include/asm-generic/vmlinux.lds.h -@@ -300,6 +300,13 @@ - VMLINUX_SYMBOL(__end_pci_fixups_suspend_late) = .; \ - } \ - \ -+ /* ACPI MCFG quirks */ \ -+ .acpi_fixup : AT(ADDR(.acpi_fixup) - LOAD_OFFSET) { \ -+ VMLINUX_SYMBOL(__start_acpi_mcfg_fixups) = .; \ -+ *(.acpi_fixup_mcfg) \ -+ VMLINUX_SYMBOL(__end_acpi_mcfg_fixups) = .; \ -+ } \ -+ \ - /* Built-in firmware blobs */ \ - .builtin_fw : AT(ADDR(.builtin_fw) - LOAD_OFFSET) { \ - VMLINUX_SYMBOL(__start_builtin_fw) = .; \ -diff --git a/include/linux/pci-acpi.h b/include/linux/pci-acpi.h -index 7d63a66..c8a6559 100644 ---- a/include/linux/pci-acpi.h -+++ b/include/linux/pci-acpi.h -@@ -25,6 +25,7 @@ static inline acpi_status pci_acpi_remove_pm_notifier(struct acpi_device *dev) - extern phys_addr_t acpi_pci_root_get_mcfg_addr(acpi_handle handle); - - extern phys_addr_t pci_mcfg_lookup(u16 domain, struct resource *bus_res); -+extern struct pci_ecam_ops *pci_mcfg_get_ops(struct acpi_pci_root *root); - - static inline acpi_handle acpi_find_root_bridge_handle(struct pci_dev *pdev) - { -@@ -72,6 +73,25 @@ struct acpi_pci_root_ops { - int (*prepare_resources)(struct acpi_pci_root_info *info); - }; - -+struct pci_cfg_fixup { -+ struct pci_ecam_ops *ops; -+ char *oem_id; -+ char *oem_table_id; -+ int domain; -+ int bus_num; -+}; -+ -+#define PCI_MCFG_DOMAIN_ANY -1 -+#define PCI_MCFG_BUS_ANY -1 -+ -+/* Designate a routine to fix up buggy MCFG */ -+#define DECLARE_ACPI_MCFG_FIXUP(ops, oem_id, oem_table_id, dom, bus) \ -+ static const struct pci_cfg_fixup \ -+ __mcfg_fixup_##oem_id##oem_table_id##dom##bus \ -+ __used __attribute__((__section__(".acpi_fixup_mcfg"), \ -+ aligned((sizeof(void *))))) = \ -+ { ops, oem_id, oem_table_id, dom, bus }; -+ - extern int acpi_pci_probe_root_resources(struct acpi_pci_root_info *info); - extern struct pci_bus *acpi_pci_root_create(struct acpi_pci_root *root, - struct acpi_pci_root_ops *ops, --- -2.7.4 - -From 4f86a9b006b25dd7336043dab26058ed6fb2802d Mon Sep 17 00:00:00 2001 -From: Peter Robinson -Date: Tue, 5 Jul 2016 23:52:46 +0100 -Subject: [PATCH 2/4] pci_generic_ecam_ops is used by default. Since there are - platforms which have non-compliant ECAM space we need to overwrite these - accessors prior to PCI buses enumeration. In order to do that we call - pci_mcfg_get_ops to retrieve pci_ecam_ops structure so that we can use proper - PCI config space accessors and bus_shift. - -pci_generic_ecam_ops is still used for platforms free from quirks. - -Signed-off-by: Tomasz Nowicki ---- - arch/arm64/kernel/pci.c | 7 ++++--- - 1 file changed, 4 insertions(+), 3 deletions(-) - -diff --git a/arch/arm64/kernel/pci.c b/arch/arm64/kernel/pci.c -index 94cd43c..a891bda 100644 ---- a/arch/arm64/kernel/pci.c -+++ b/arch/arm64/kernel/pci.c -@@ -139,6 +139,7 @@ pci_acpi_setup_ecam_mapping(struct acpi_pci_root *root) - struct pci_config_window *cfg; - struct resource cfgres; - unsigned int bsz; -+ struct pci_ecam_ops *ops; - - /* Use address from _CBA if present, otherwise lookup MCFG */ - if (!root->mcfg_addr) -@@ -150,12 +151,12 @@ pci_acpi_setup_ecam_mapping(struct acpi_pci_root *root) - return NULL; - } - -- bsz = 1 << pci_generic_ecam_ops.bus_shift; -+ ops = pci_mcfg_get_ops(root); -+ bsz = 1 << ops->bus_shift; - cfgres.start = root->mcfg_addr + bus_res->start * bsz; - cfgres.end = cfgres.start + resource_size(bus_res) * bsz - 1; - cfgres.flags = IORESOURCE_MEM; -- cfg = pci_ecam_create(&root->device->dev, &cfgres, bus_res, -- &pci_generic_ecam_ops); -+ cfg = pci_ecam_create(&root->device->dev, &cfgres, bus_res, ops); - if (IS_ERR(cfg)) { - dev_err(&root->device->dev, "%04x:%pR error %ld mapping ECAM\n", - seg, bus_res, PTR_ERR(cfg)); --- -2.7.4 - -From cbdbd697bd6d716eb9d1705ee55445432e73eabb Mon Sep 17 00:00:00 2001 -From: Peter Robinson -Date: Tue, 5 Jul 2016 23:53:59 +0100 -Subject: [PATCH 3/4] The ECAM quirk matching criteria per the discussion on - https://lkml.org/lkml/2016/6/13/944 includes: OEM ID, OEM Table ID and OEM - Revision. So this patch adds OEM Table ID into the check to match platform - specific ECAM quirks as well. - -This patch also improve strncmp check using strlen and -min_t to ignore the padding spaces in OEM ID and OEM -Table ID. - -Signed-off-by: Duc Dang ---- - drivers/acpi/pci_mcfg.c | 7 +++++-- - include/linux/pci-acpi.h | 7 ++++--- - 2 files changed, 9 insertions(+), 5 deletions(-) - -diff --git a/drivers/acpi/pci_mcfg.c b/drivers/acpi/pci_mcfg.c -index deb0077..307ca9a 100644 ---- a/drivers/acpi/pci_mcfg.c -+++ b/drivers/acpi/pci_mcfg.c -@@ -62,9 +62,12 @@ struct pci_ecam_ops *pci_mcfg_get_ops(struct acpi_pci_root *root) - if ((f->domain == domain || f->domain == PCI_MCFG_DOMAIN_ANY) && - (f->bus_num == bus_num || f->bus_num == PCI_MCFG_BUS_ANY) && - (!strncmp(f->oem_id, mcfg_table->header.oem_id, -- ACPI_OEM_ID_SIZE)) && -+ min_t(size_t, strlen(f->oem_id), -+ ACPI_OEM_ID_SIZE))) && - (!strncmp(f->oem_table_id, mcfg_table->header.oem_table_id, -- ACPI_OEM_TABLE_ID_SIZE))) -+ min_t(size_t, strlen(f->oem_table_id), -+ ACPI_OEM_TABLE_ID_SIZE))) && -+ (f->oem_revision == mcfg_table->header.oem_revision)) - return f->ops; - } - /* No quirks, use ECAM */ -diff --git a/include/linux/pci-acpi.h b/include/linux/pci-acpi.h -index c8a6559..5148c8d 100644 ---- a/include/linux/pci-acpi.h -+++ b/include/linux/pci-acpi.h -@@ -77,6 +77,7 @@ struct pci_cfg_fixup { - struct pci_ecam_ops *ops; - char *oem_id; - char *oem_table_id; -+ u32 oem_revision; - int domain; - int bus_num; - }; -@@ -85,12 +86,12 @@ struct pci_cfg_fixup { - #define PCI_MCFG_BUS_ANY -1 - - /* Designate a routine to fix up buggy MCFG */ --#define DECLARE_ACPI_MCFG_FIXUP(ops, oem_id, oem_table_id, dom, bus) \ -+#define DECLARE_ACPI_MCFG_FIXUP(ops, oem_id, oem_table_id, rev, dom, bus) \ - static const struct pci_cfg_fixup \ -- __mcfg_fixup_##oem_id##oem_table_id##dom##bus \ -+ __mcfg_fixup_##oem_id##oem_table_id##rev##dom##bus \ - __used __attribute__((__section__(".acpi_fixup_mcfg"), \ - aligned((sizeof(void *))))) = \ -- { ops, oem_id, oem_table_id, dom, bus }; -+ { ops, oem_id, oem_table_id, rev, dom, bus }; - - extern int acpi_pci_probe_root_resources(struct acpi_pci_root_info *info); - extern struct pci_bus *acpi_pci_root_create(struct acpi_pci_root *root, --- -2.7.4 - -From 78766cf255bc6aafac2f57372a0446f78322da19 Mon Sep 17 00:00:00 2001 -From: Peter Robinson -Date: Tue, 5 Jul 2016 23:55:11 +0100 -Subject: [PATCH 4/4] X-Gene PCIe controller does not fully support ECAM. This - patch adds required ECAM fixup to allow X-Gene PCIe controller to be - functional in ACPI boot mode. - -Signed-off-by: Duc Dang ---- - drivers/pci/host/Makefile | 2 +- - drivers/pci/host/pci-xgene-ecam.c | 194 ++++++++++++++++++++++++++++++++++++++ - 2 files changed, 195 insertions(+), 1 deletion(-) - create mode 100644 drivers/pci/host/pci-xgene-ecam.c - -diff --git a/drivers/pci/host/Makefile b/drivers/pci/host/Makefile -index 9c8698e..3480696 100644 ---- a/drivers/pci/host/Makefile -+++ b/drivers/pci/host/Makefile -@@ -14,7 +14,7 @@ obj-$(CONFIG_PCIE_SPEAR13XX) += pcie-spear13xx.o - obj-$(CONFIG_PCI_KEYSTONE) += pci-keystone-dw.o pci-keystone.o - obj-$(CONFIG_PCIE_XILINX) += pcie-xilinx.o - obj-$(CONFIG_PCIE_XILINX_NWL) += pcie-xilinx-nwl.o --obj-$(CONFIG_PCI_XGENE) += pci-xgene.o -+obj-$(CONFIG_PCI_XGENE) += pci-xgene.o pci-xgene-ecam.o - obj-$(CONFIG_PCI_XGENE_MSI) += pci-xgene-msi.o - obj-$(CONFIG_PCI_LAYERSCAPE) += pci-layerscape.o - obj-$(CONFIG_PCI_VERSATILE) += pci-versatile.o -diff --git a/drivers/pci/host/pci-xgene-ecam.c b/drivers/pci/host/pci-xgene-ecam.c -new file mode 100644 -index 0000000..1bea63f ---- /dev/null -+++ b/drivers/pci/host/pci-xgene-ecam.c -@@ -0,0 +1,194 @@ -+/* -+ * APM X-Gene PCIe ECAM fixup driver -+ * -+ * Copyright (c) 2016, Applied Micro Circuits Corporation -+ * Author: -+ * Duc Dang -+ * -+ * 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. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program. If not, see . -+ */ -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#ifdef CONFIG_ACPI -+#define RTDID 0x160 -+#define ROOT_CAP_AND_CTRL 0x5C -+ -+/* PCIe IP version */ -+#define XGENE_PCIE_IP_VER_UNKN 0 -+#define XGENE_PCIE_IP_VER_1 1 -+ -+#define APM_OEM_ID "APM" -+#define APM_XGENE_OEM_TABLE_ID "XGENE" -+#define APM_XGENE_OEM_REV 0x00000002 -+ -+struct xgene_pcie_acpi_root { -+ void __iomem *csr_base; -+ u32 version; -+}; -+ -+static acpi_status xgene_pcie_find_csr_base(struct acpi_resource *acpi_res, -+ void *data) -+{ -+ struct xgene_pcie_acpi_root *root = data; -+ struct acpi_resource_fixed_memory32 *fixed32; -+ -+ if (acpi_res->type == ACPI_RESOURCE_TYPE_FIXED_MEMORY32) { -+ fixed32 = &acpi_res->data.fixed_memory32; -+ root->csr_base = ioremap(fixed32->address, -+ fixed32->address_length); -+ return AE_CTRL_TERMINATE; -+ } -+ -+ return AE_OK; -+} -+ -+static int xgene_pcie_ecam_init(struct pci_config_window *cfg) -+{ -+ struct xgene_pcie_acpi_root *xgene_root; -+ struct device *dev = cfg->parent; -+ struct acpi_device *adev = to_acpi_device(dev); -+ acpi_handle handle = acpi_device_handle(adev); -+ -+ xgene_root = devm_kzalloc(dev, sizeof(*xgene_root), GFP_KERNEL); -+ if (!xgene_root) -+ return -ENOMEM; -+ -+ acpi_walk_resources(handle, METHOD_NAME__CRS, -+ xgene_pcie_find_csr_base, xgene_root); -+ -+ if (!xgene_root->csr_base) { -+ kfree(xgene_root); -+ return -ENODEV; -+ } -+ -+ xgene_root->version = XGENE_PCIE_IP_VER_1; -+ -+ cfg->priv = xgene_root; -+ -+ return 0; -+} -+ -+/* -+ * For Configuration request, RTDID register is used as Bus Number, -+ * Device Number and Function number of the header fields. -+ */ -+static void xgene_pcie_set_rtdid_reg(struct pci_bus *bus, uint devfn) -+{ -+ struct pci_config_window *cfg = bus->sysdata; -+ struct xgene_pcie_acpi_root *port = cfg->priv; -+ unsigned int b, d, f; -+ u32 rtdid_val = 0; -+ -+ b = bus->number; -+ d = PCI_SLOT(devfn); -+ f = PCI_FUNC(devfn); -+ -+ if (!pci_is_root_bus(bus)) -+ rtdid_val = (b << 8) | (d << 3) | f; -+ -+ writel(rtdid_val, port->csr_base + RTDID); -+ /* read the register back to ensure flush */ -+ readl(port->csr_base + RTDID); -+} -+ -+/* -+ * X-Gene PCIe port uses BAR0-BAR1 of RC's configuration space as -+ * the translation from PCI bus to native BUS. Entire DDR region -+ * is mapped into PCIe space using these registers, so it can be -+ * reached by DMA from EP devices. The BAR0/1 of bridge should be -+ * hidden during enumeration to avoid the sizing and resource allocation -+ * by PCIe core. -+ */ -+static bool xgene_pcie_hide_rc_bars(struct pci_bus *bus, int offset) -+{ -+ if (pci_is_root_bus(bus) && ((offset == PCI_BASE_ADDRESS_0) || -+ (offset == PCI_BASE_ADDRESS_1))) -+ return true; -+ -+ return false; -+} -+ -+void __iomem *xgene_pcie_ecam_map_bus(struct pci_bus *bus, -+ unsigned int devfn, int where) -+{ -+ struct pci_config_window *cfg = bus->sysdata; -+ unsigned int busn = bus->number; -+ void __iomem *base; -+ -+ if (busn < cfg->busr.start || busn > cfg->busr.end) -+ return NULL; -+ -+ if ((pci_is_root_bus(bus) && devfn != 0) || -+ xgene_pcie_hide_rc_bars(bus, where)) -+ return NULL; -+ -+ xgene_pcie_set_rtdid_reg(bus, devfn); -+ -+ if (busn > cfg->busr.start) -+ base = cfg->win + (1 << cfg->ops->bus_shift); -+ else -+ base = cfg->win; -+ -+ return base + where; -+} -+ -+static int xgene_pcie_config_read32(struct pci_bus *bus, unsigned int devfn, -+ int where, int size, u32 *val) -+{ -+ struct pci_config_window *cfg = bus->sysdata; -+ struct xgene_pcie_acpi_root *port = cfg->priv; -+ -+ if (pci_generic_config_read32(bus, devfn, where & ~0x3, 4, val) != -+ PCIBIOS_SUCCESSFUL) -+ return PCIBIOS_DEVICE_NOT_FOUND; -+ -+ /* -+ * The v1 controller has a bug in its Configuration Request -+ * Retry Status (CRS) logic: when CRS is enabled and we read the -+ * Vendor and Device ID of a non-existent device, the controller -+ * fabricates return data of 0xFFFF0001 ("device exists but is not -+ * ready") instead of 0xFFFFFFFF ("device does not exist"). This -+ * causes the PCI core to retry the read until it times out. -+ * Avoid this by not claiming to support CRS. -+ */ -+ if (pci_is_root_bus(bus) && (port->version == XGENE_PCIE_IP_VER_1) && -+ ((where & ~0x3) == ROOT_CAP_AND_CTRL)) -+ *val &= ~(PCI_EXP_RTCAP_CRSVIS << 16); -+ -+ if (size <= 2) -+ *val = (*val >> (8 * (where & 3))) & ((1 << (size * 8)) - 1); -+ -+ return PCIBIOS_SUCCESSFUL; -+} -+ -+static struct pci_ecam_ops xgene_pcie_ecam_ops = { -+ .bus_shift = 16, -+ .init = xgene_pcie_ecam_init, -+ .pci_ops = { -+ .map_bus = xgene_pcie_ecam_map_bus, -+ .read = xgene_pcie_config_read32, -+ .write = pci_generic_config_write, -+ } -+}; -+ -+DECLARE_ACPI_MCFG_FIXUP(&xgene_pcie_ecam_ops, APM_OEM_ID, -+ APM_XGENE_OEM_TABLE_ID, APM_XGENE_OEM_REV, -+ PCI_MCFG_DOMAIN_ANY, PCI_MCFG_BUS_ANY); -+#endif --- -2.7.4 - diff --git a/arm64-pcie-quirks.patch b/arm64-pcie-quirks.patch new file mode 100644 index 000000000..36e8d3724 --- /dev/null +++ b/arm64-pcie-quirks.patch @@ -0,0 +1,977 @@ +From 5c4f8b5b68451e5d208a5aefb195fdd108629da4 Mon Sep 17 00:00:00 2001 +From: Tomasz Nowicki +Date: Fri, 9 Sep 2016 21:24:03 +0200 +Subject: [PATCH 1/6] PCI/ACPI: Extend pci_mcfg_lookup() responsibilities + +In preparation for adding MCFG platform specific quirk handling move +CFG resource calculation and ECAM ops assignment to pci_mcfg_lookup(). +It becomes the gate for further ops and CFG resource manipulation +in arch-agnostic code (drivers/acpi/pci_mcfg.c). + +No functionality changes in this patch. + +Signed-off-by: Tomasz Nowicki +--- + arch/arm64/kernel/pci.c | 17 +++++------------ + drivers/acpi/pci_mcfg.c | 28 +++++++++++++++++++++++++--- + include/linux/pci-acpi.h | 4 +++- + 3 files changed, 33 insertions(+), 16 deletions(-) + +diff --git a/arch/arm64/kernel/pci.c b/arch/arm64/kernel/pci.c +index acf3872..fb439c7 100644 +--- a/arch/arm64/kernel/pci.c ++++ b/arch/arm64/kernel/pci.c +@@ -125,24 +125,17 @@ pci_acpi_setup_ecam_mapping(struct acpi_pci_root *root) + u16 seg = root->segment; + struct pci_config_window *cfg; + struct resource cfgres; +- unsigned int bsz; ++ struct pci_ecam_ops *ecam_ops; ++ int ret; + +- /* Use address from _CBA if present, otherwise lookup MCFG */ +- if (!root->mcfg_addr) +- root->mcfg_addr = pci_mcfg_lookup(seg, bus_res); +- +- if (!root->mcfg_addr) { ++ ret = pci_mcfg_lookup(root, &cfgres, &ecam_ops); ++ if (ret) { + dev_err(&root->device->dev, "%04x:%pR ECAM region not found\n", + seg, bus_res); + return NULL; + } + +- bsz = 1 << pci_generic_ecam_ops.bus_shift; +- cfgres.start = root->mcfg_addr + bus_res->start * bsz; +- cfgres.end = cfgres.start + resource_size(bus_res) * bsz - 1; +- cfgres.flags = IORESOURCE_MEM; +- cfg = pci_ecam_create(&root->device->dev, &cfgres, bus_res, +- &pci_generic_ecam_ops); ++ cfg = pci_ecam_create(&root->device->dev, &cfgres, bus_res, ecam_ops); + if (IS_ERR(cfg)) { + dev_err(&root->device->dev, "%04x:%pR error %ld mapping ECAM\n", + seg, bus_res, PTR_ERR(cfg)); +diff --git a/drivers/acpi/pci_mcfg.c b/drivers/acpi/pci_mcfg.c +index b5b376e..ffcc651 100644 +--- a/drivers/acpi/pci_mcfg.c ++++ b/drivers/acpi/pci_mcfg.c +@@ -22,6 +22,7 @@ + #include + #include + #include ++#include + + /* Structure to hold entries from the MCFG table */ + struct mcfg_entry { +@@ -35,9 +36,18 @@ struct mcfg_entry { + /* List to save MCFG entries */ + static LIST_HEAD(pci_mcfg_list); + +-phys_addr_t pci_mcfg_lookup(u16 seg, struct resource *bus_res) ++int pci_mcfg_lookup(struct acpi_pci_root *root, struct resource *cfgres, ++ struct pci_ecam_ops **ecam_ops) + { ++ struct pci_ecam_ops *ops = &pci_generic_ecam_ops; ++ struct resource *bus_res = &root->secondary; ++ u16 seg = root->segment; + struct mcfg_entry *e; ++ struct resource res; ++ ++ /* Use address from _CBA if present, otherwise lookup MCFG */ ++ if (root->mcfg_addr) ++ goto skip_lookup; + + /* + * We expect exact match, unless MCFG entry end bus covers more than +@@ -45,10 +55,22 @@ phys_addr_t pci_mcfg_lookup(u16 seg, struct resource *bus_res) + */ + list_for_each_entry(e, &pci_mcfg_list, list) { + if (e->segment == seg && e->bus_start == bus_res->start && +- e->bus_end >= bus_res->end) +- return e->addr; ++ e->bus_end >= bus_res->end) { ++ root->mcfg_addr = e->addr; ++ } ++ + } + ++ if (!root->mcfg_addr) ++ return -ENXIO; ++ ++skip_lookup: ++ memset(&res, 0, sizeof(res)); ++ res.start = root->mcfg_addr + (bus_res->start << 20); ++ res.end = res.start + (resource_size(bus_res) << 20) - 1; ++ res.flags = IORESOURCE_MEM; ++ *cfgres = res; ++ *ecam_ops = ops; + return 0; + } + +diff --git a/include/linux/pci-acpi.h b/include/linux/pci-acpi.h +index 7d63a66..7a4e83a 100644 +--- a/include/linux/pci-acpi.h ++++ b/include/linux/pci-acpi.h +@@ -24,7 +24,9 @@ static inline acpi_status pci_acpi_remove_pm_notifier(struct acpi_device *dev) + } + extern phys_addr_t acpi_pci_root_get_mcfg_addr(acpi_handle handle); + +-extern phys_addr_t pci_mcfg_lookup(u16 domain, struct resource *bus_res); ++struct pci_ecam_ops; ++extern int pci_mcfg_lookup(struct acpi_pci_root *root, struct resource *cfgres, ++ struct pci_ecam_ops **ecam_ops); + + static inline acpi_handle acpi_find_root_bridge_handle(struct pci_dev *pdev) + { +-- +2.9.3 + +From 16c02d9cc0e67b48c343aecc4b5566e729a97683 Mon Sep 17 00:00:00 2001 +From: Tomasz Nowicki +Date: Fri, 9 Sep 2016 21:24:04 +0200 +Subject: [PATCH 2/6] PCI/ACPI: Check platform specific ECAM quirks + +Some platforms may not be fully compliant with generic set of PCI config +accessors. For these cases we implement the way to overwrite CFG accessors +set and configuration space range. + +In first place pci_mcfg_parse() saves machine's IDs and revision number +(these come from MCFG header) in order to match against known quirk entries. +Then the algorithm traverses available quirk list (static array), +matches against and +returns custom PCI config ops and/or CFG resource structure. + +When adding new quirk there are two possibilities: +1. Override default pci_generic_ecam_ops ops but CFG resource comes from MCFG +{ "OEM_ID", "OEM_TABLE_ID", , , , &foo_ops, MCFG_RES_EMPTY }, +2. Override default pci_generic_ecam_ops ops and CFG resource. For this case +it is also allowed get CFG resource from quirk entry w/o having it in MCFG. +{ "OEM_ID", "OEM_TABLE_ID", , , , &boo_ops, + DEFINE_RES_MEM(START, SIZE) }, + +pci_generic_ecam_ops and MCFG entries will be used for platforms +free from quirks. + +Signed-off-by: Tomasz Nowicki +Signed-off-by: Dongdong Liu +Signed-off-by: Christopher Covington +--- + drivers/acpi/pci_mcfg.c | 80 +++++++++++++++++++++++++++++++++++++++++++++---- + 1 file changed, 74 insertions(+), 6 deletions(-) + +diff --git a/drivers/acpi/pci_mcfg.c b/drivers/acpi/pci_mcfg.c +index ffcc651..2b8acc7 100644 +--- a/drivers/acpi/pci_mcfg.c ++++ b/drivers/acpi/pci_mcfg.c +@@ -32,6 +32,59 @@ struct mcfg_entry { + u8 bus_start; + u8 bus_end; + }; ++struct mcfg_fixup { ++ char oem_id[ACPI_OEM_ID_SIZE + 1]; ++ char oem_table_id[ACPI_OEM_TABLE_ID_SIZE + 1]; ++ u32 oem_revision; ++ u16 seg; ++ struct resource bus_range; ++ struct pci_ecam_ops *ops; ++ struct resource cfgres; ++}; ++ ++#define MCFG_DOM_ANY (-1) ++#define MCFG_BUS_RANGE(start, end) DEFINE_RES_NAMED((start), \ ++ ((end) - (start) + 1), \ ++ NULL, IORESOURCE_BUS) ++#define MCFG_BUS_ANY MCFG_BUS_RANGE(0x0, 0xff) ++#define MCFG_RES_EMPTY DEFINE_RES_NAMED(0, 0, NULL, 0) ++ ++static struct mcfg_fixup mcfg_quirks[] = { ++/* { OEM_ID, OEM_TABLE_ID, REV, DOMAIN, BUS_RANGE, cfgres, ops }, */ ++}; ++ ++static char mcfg_oem_id[ACPI_OEM_ID_SIZE]; ++static char mcfg_oem_table_id[ACPI_OEM_TABLE_ID_SIZE]; ++static u32 mcfg_oem_revision; ++ ++static void pci_mcfg_match_quirks(struct acpi_pci_root *root, ++ struct resource *cfgres, ++ struct pci_ecam_ops **ecam_ops) ++{ ++ struct mcfg_fixup *f; ++ int i; ++ ++ /* ++ * First match against PCI topology then use OEM ID, OEM ++ * table ID, and OEM revision from MCFG table standard header. ++ */ ++ for (i = 0, f = mcfg_quirks; i < ARRAY_SIZE(mcfg_quirks); i++, f++) { ++ if (f->seg == root->segment && ++ resource_contains(&f->bus_range, &root->secondary) && ++ !memcmp(f->oem_id, mcfg_oem_id, ACPI_OEM_ID_SIZE) && ++ !memcmp(f->oem_table_id, mcfg_oem_table_id, ++ ACPI_OEM_TABLE_ID_SIZE) && ++ f->oem_revision == mcfg_oem_revision) { ++ if (f->cfgres.start) ++ *cfgres = f->cfgres; ++ if (f->ops) ++ *ecam_ops = f->ops; ++ dev_info(&root->device->dev, "Applying PCI MCFG quirks for %s %s rev: %d\n", ++ f->oem_id, f->oem_table_id, f->oem_revision); ++ return; ++ } ++ } ++} + + /* List to save MCFG entries */ + static LIST_HEAD(pci_mcfg_list); +@@ -61,14 +114,24 @@ int pci_mcfg_lookup(struct acpi_pci_root *root, struct resource *cfgres, + + } + +- if (!root->mcfg_addr) +- return -ENXIO; +- + skip_lookup: + memset(&res, 0, sizeof(res)); +- res.start = root->mcfg_addr + (bus_res->start << 20); +- res.end = res.start + (resource_size(bus_res) << 20) - 1; +- res.flags = IORESOURCE_MEM; ++ if (root->mcfg_addr) { ++ res.start = root->mcfg_addr + (bus_res->start << 20); ++ res.end = res.start + (resource_size(bus_res) << 20) - 1; ++ res.flags = IORESOURCE_MEM; ++ } ++ ++ /* ++ * Let to override default ECAM ops and CFG resource range. ++ * Also, this might even retrieve CFG resource range in case MCFG ++ * does not have it. Invalid CFG start address means MCFG firmware bug ++ * or we need another quirk in array. ++ */ ++ pci_mcfg_match_quirks(root, &res, &ops); ++ if (!res.start) ++ return -ENXIO; ++ + *cfgres = res; + *ecam_ops = ops; + return 0; +@@ -101,6 +164,11 @@ static __init int pci_mcfg_parse(struct acpi_table_header *header) + list_add(&e->list, &pci_mcfg_list); + } + ++ /* Save MCFG IDs and revision for quirks matching */ ++ memcpy(mcfg_oem_id, header->oem_id, ACPI_OEM_ID_SIZE); ++ memcpy(mcfg_oem_table_id, header->oem_table_id, ACPI_OEM_TABLE_ID_SIZE); ++ mcfg_oem_revision = header->revision; ++ + pr_info("MCFG table detected, %d entries\n", n); + return 0; + } +-- +2.9.3 + +From 2243ab64c12a873e47b72c8e636b40ed09c5f0d4 Mon Sep 17 00:00:00 2001 +From: Tomasz Nowicki +Date: Fri, 9 Sep 2016 21:24:05 +0200 +Subject: [PATCH 3/6] PCI: thunder-pem: Allow to probe PEM-specific register + range for ACPI case + +thunder-pem driver stands for being ACPI based PCI host controller. +However, there is no standard way to describe its PEM-specific register +ranges in ACPI tables. Thus we add thunder_pem_init() ACPI extension +to obtain hardcoded addresses from static resource array. +Although it is not pretty, it prevents from creating standard mechanism to +handle similar cases in future. + +Signed-off-by: Tomasz Nowicki +--- + drivers/pci/host/pci-thunder-pem.c | 61 ++++++++++++++++++++++++++++++-------- + 1 file changed, 48 insertions(+), 13 deletions(-) + +diff --git a/drivers/pci/host/pci-thunder-pem.c b/drivers/pci/host/pci-thunder-pem.c +index 6abaf80..b048761 100644 +--- a/drivers/pci/host/pci-thunder-pem.c ++++ b/drivers/pci/host/pci-thunder-pem.c +@@ -18,6 +18,7 @@ + #include + #include + #include ++#include + #include + #include + +@@ -284,6 +285,40 @@ static int thunder_pem_config_write(struct pci_bus *bus, unsigned int devfn, + return pci_generic_config_write(bus, devfn, where, size, val); + } + ++#ifdef CONFIG_ACPI ++static struct resource thunder_pem_reg_res[] = { ++ [4] = DEFINE_RES_MEM(0x87e0c0000000UL, SZ_16M), ++ [5] = DEFINE_RES_MEM(0x87e0c1000000UL, SZ_16M), ++ [6] = DEFINE_RES_MEM(0x87e0c2000000UL, SZ_16M), ++ [7] = DEFINE_RES_MEM(0x87e0c3000000UL, SZ_16M), ++ [8] = DEFINE_RES_MEM(0x87e0c4000000UL, SZ_16M), ++ [9] = DEFINE_RES_MEM(0x87e0c5000000UL, SZ_16M), ++ [14] = DEFINE_RES_MEM(0x97e0c0000000UL, SZ_16M), ++ [15] = DEFINE_RES_MEM(0x97e0c1000000UL, SZ_16M), ++ [16] = DEFINE_RES_MEM(0x97e0c2000000UL, SZ_16M), ++ [17] = DEFINE_RES_MEM(0x97e0c3000000UL, SZ_16M), ++ [18] = DEFINE_RES_MEM(0x97e0c4000000UL, SZ_16M), ++ [19] = DEFINE_RES_MEM(0x97e0c5000000UL, SZ_16M), ++}; ++ ++static struct resource *thunder_pem_acpi_res(struct pci_config_window *cfg) ++{ ++ struct acpi_device *adev = to_acpi_device(cfg->parent); ++ struct acpi_pci_root *root = acpi_driver_data(adev); ++ ++ if ((root->segment >= 4 && root->segment <= 9) || ++ (root->segment >= 14 && root->segment <= 19)) ++ return &thunder_pem_reg_res[root->segment]; ++ ++ return NULL; ++} ++#else ++static struct resource *thunder_pem_acpi_res(struct pci_config_window *cfg) ++{ ++ return NULL; ++} ++#endif ++ + static int thunder_pem_init(struct pci_config_window *cfg) + { + struct device *dev = cfg->parent; +@@ -292,24 +327,24 @@ static int thunder_pem_init(struct pci_config_window *cfg) + struct thunder_pem_pci *pem_pci; + struct platform_device *pdev; + +- /* Only OF support for now */ +- if (!dev->of_node) +- return -EINVAL; +- + pem_pci = devm_kzalloc(dev, sizeof(*pem_pci), GFP_KERNEL); + if (!pem_pci) + return -ENOMEM; + +- pdev = to_platform_device(dev); +- +- /* +- * The second register range is the PEM bridge to the PCIe +- * bus. It has a different config access method than those +- * devices behind the bridge. +- */ +- res_pem = platform_get_resource(pdev, IORESOURCE_MEM, 1); ++ if (acpi_disabled) { ++ pdev = to_platform_device(dev); ++ ++ /* ++ * The second register range is the PEM bridge to the PCIe ++ * bus. It has a different config access method than those ++ * devices behind the bridge. ++ */ ++ res_pem = platform_get_resource(pdev, IORESOURCE_MEM, 1); ++ } else { ++ res_pem = thunder_pem_acpi_res(cfg); ++ } + if (!res_pem) { +- dev_err(dev, "missing \"reg[1]\"property\n"); ++ dev_err(dev, "missing configuration region\n"); + return -EINVAL; + } + +-- +2.9.3 + +From 443d85d47ee00b3f0b6f39d470a11e7eb116817d Mon Sep 17 00:00:00 2001 +From: Tomasz Nowicki +Date: Fri, 9 Sep 2016 21:24:06 +0200 +Subject: [PATCH 4/6] PCI: thunder: Enable ACPI PCI controller for ThunderX + pass2.x silicon version + +ThunderX PCIe controller to off-chip devices (so-called PEM) is not fully +compliant with ECAM standard. It uses non-standard configuration space +accessors (see pci_thunder_pem_ops) and custom configuration space granulation +(see bus_shift = 24). In order to access configuration space and +probe PEM as ACPI based PCI host controller we need to add MCFG quirk +infrastructure. This involves: +1. Export PEM pci_thunder_pem_ops structure so it is visible to MCFG quirk + code. +2. New quirk entries for each PEM segment. Each contains platform IDs, + mentioned pci_thunder_pem_ops and CFG resources. + +Quirk is considered for ThunderX silicon pass2.x only which is identified +via MCFG revision 1. + +Signed-off-by: Tomasz Nowicki +--- + drivers/acpi/pci_mcfg.c | 27 +++++++++++++++++++++++++++ + drivers/pci/host/pci-thunder-pem.c | 2 +- + include/linux/pci-ecam.h | 4 ++++ + 3 files changed, 32 insertions(+), 1 deletion(-) + +diff --git a/drivers/acpi/pci_mcfg.c b/drivers/acpi/pci_mcfg.c +index 2b8acc7..1f73d7b 100644 +--- a/drivers/acpi/pci_mcfg.c ++++ b/drivers/acpi/pci_mcfg.c +@@ -51,6 +51,33 @@ struct mcfg_fixup { + + static struct mcfg_fixup mcfg_quirks[] = { + /* { OEM_ID, OEM_TABLE_ID, REV, DOMAIN, BUS_RANGE, cfgres, ops }, */ ++#ifdef CONFIG_PCI_HOST_THUNDER_PEM ++ /* SoC pass2.x */ ++ { "CAVIUM", "THUNDERX", 1, 4, MCFG_BUS_ANY, &pci_thunder_pem_ops, ++ DEFINE_RES_MEM(0x88001f000000UL, 0x39 * SZ_16M) }, ++ { "CAVIUM", "THUNDERX", 1, 5, MCFG_BUS_ANY, &pci_thunder_pem_ops, ++ DEFINE_RES_MEM(0x884057000000UL, 0x39 * SZ_16M) }, ++ { "CAVIUM", "THUNDERX", 1, 6, MCFG_BUS_ANY, &pci_thunder_pem_ops, ++ DEFINE_RES_MEM(0x88808f000000UL, 0x39 * SZ_16M) }, ++ { "CAVIUM", "THUNDERX", 1, 7, MCFG_BUS_ANY, &pci_thunder_pem_ops, ++ DEFINE_RES_MEM(0x89001f000000UL, 0x39 * SZ_16M) }, ++ { "CAVIUM", "THUNDERX", 1, 8, MCFG_BUS_ANY, &pci_thunder_pem_ops, ++ DEFINE_RES_MEM(0x894057000000UL, 0x39 * SZ_16M) }, ++ { "CAVIUM", "THUNDERX", 1, 9, MCFG_BUS_ANY, &pci_thunder_pem_ops, ++ DEFINE_RES_MEM(0x89808f000000UL, 0x39 * SZ_16M) }, ++ { "CAVIUM", "THUNDERX", 1, 14, MCFG_BUS_ANY, &pci_thunder_pem_ops, ++ DEFINE_RES_MEM(0x98001f000000UL, 0x39 * SZ_16M) }, ++ { "CAVIUM", "THUNDERX", 1, 15, MCFG_BUS_ANY, &pci_thunder_pem_ops, ++ DEFINE_RES_MEM(0x984057000000UL, 0x39 * SZ_16M) }, ++ { "CAVIUM", "THUNDERX", 1, 16, MCFG_BUS_ANY, &pci_thunder_pem_ops, ++ DEFINE_RES_MEM(0x98808f000000UL, 0x39 * SZ_16M) }, ++ { "CAVIUM", "THUNDERX", 1, 17, MCFG_BUS_ANY, &pci_thunder_pem_ops, ++ DEFINE_RES_MEM(0x99001f000000UL, 0x39 * SZ_16M) }, ++ { "CAVIUM", "THUNDERX", 1, 18, MCFG_BUS_ANY, &pci_thunder_pem_ops, ++ DEFINE_RES_MEM(0x994057000000UL, 0x39 * SZ_16M) }, ++ { "CAVIUM", "THUNDERX", 1, 19, MCFG_BUS_ANY, &pci_thunder_pem_ops, ++ DEFINE_RES_MEM(0x99808f000000UL, 0x39 * SZ_16M) }, ++#endif + }; + + static char mcfg_oem_id[ACPI_OEM_ID_SIZE]; +diff --git a/drivers/pci/host/pci-thunder-pem.c b/drivers/pci/host/pci-thunder-pem.c +index b048761..d7c10cc 100644 +--- a/drivers/pci/host/pci-thunder-pem.c ++++ b/drivers/pci/host/pci-thunder-pem.c +@@ -367,7 +367,7 @@ static int thunder_pem_init(struct pci_config_window *cfg) + return 0; + } + +-static struct pci_ecam_ops pci_thunder_pem_ops = { ++struct pci_ecam_ops pci_thunder_pem_ops = { + .bus_shift = 24, + .init = thunder_pem_init, + .pci_ops = { +diff --git a/include/linux/pci-ecam.h b/include/linux/pci-ecam.h +index 7adad20..65505ea 100644 +--- a/include/linux/pci-ecam.h ++++ b/include/linux/pci-ecam.h +@@ -58,6 +58,10 @@ void __iomem *pci_ecam_map_bus(struct pci_bus *bus, unsigned int devfn, + int where); + /* default ECAM ops */ + extern struct pci_ecam_ops pci_generic_ecam_ops; ++/* ECAM ops for known quirks */ ++#ifdef CONFIG_PCI_HOST_THUNDER_PEM ++extern struct pci_ecam_ops pci_thunder_pem_ops; ++#endif + + #ifdef CONFIG_PCI_HOST_GENERIC + /* for DT-based PCI controllers that support ECAM */ +-- +2.9.3 + +From 6eca99cc392a11bb07b9ef88bca71a85f8bbe273 Mon Sep 17 00:00:00 2001 +From: Tomasz Nowicki +Date: Fri, 9 Sep 2016 21:24:07 +0200 +Subject: [PATCH 5/6] PCI: thunder: Enable ACPI PCI controller for ThunderX + pass1.x silicon version + +ThunderX pass1.x requires to emulate the EA headers for on-chip devices +hence it has to use custom pci_thunder_ecam_ops for accessing PCI config +space (pci-thuner-ecam.c). Add new entries to MCFG quirk array where they +can be applied while probing ACPI based PCI host controller. + +ThunderX pass1.x is using the same way for accessing off-chip devices +(so-called PEM) as silicon pass-2.x so we need to add PEM quirk +entries too. + +Quirk is considered for ThunderX silicon pass1.x only which is identified +via MCFG revision 2. + +Signed-off-by: Tomasz Nowicki +--- + drivers/acpi/pci_mcfg.c | 45 +++++++++++++++++++++++++++++++++++++ + drivers/pci/host/pci-thunder-ecam.c | 2 +- + include/linux/pci-ecam.h | 3 +++ + 3 files changed, 49 insertions(+), 1 deletion(-) + +diff --git a/drivers/acpi/pci_mcfg.c b/drivers/acpi/pci_mcfg.c +index 1f73d7b..eb14f74 100644 +--- a/drivers/acpi/pci_mcfg.c ++++ b/drivers/acpi/pci_mcfg.c +@@ -77,6 +77,51 @@ static struct mcfg_fixup mcfg_quirks[] = { + DEFINE_RES_MEM(0x994057000000UL, 0x39 * SZ_16M) }, + { "CAVIUM", "THUNDERX", 1, 19, MCFG_BUS_ANY, &pci_thunder_pem_ops, + DEFINE_RES_MEM(0x99808f000000UL, 0x39 * SZ_16M) }, ++ ++ /* SoC pass1.x */ ++ { "CAVIUM", "THUNDERX", 2, 4, MCFG_BUS_ANY, &pci_thunder_pem_ops, ++ DEFINE_RES_MEM(0x88001f000000UL, 0x39 * SZ_16M) }, ++ { "CAVIUM", "THUNDERX", 2, 5, MCFG_BUS_ANY, &pci_thunder_pem_ops, ++ DEFINE_RES_MEM(0x884057000000UL, 0x39 * SZ_16M) }, ++ { "CAVIUM", "THUNDERX", 2, 6, MCFG_BUS_ANY, &pci_thunder_pem_ops, ++ DEFINE_RES_MEM(0x88808f000000UL, 0x39 * SZ_16M) }, ++ { "CAVIUM", "THUNDERX", 2, 7, MCFG_BUS_ANY, &pci_thunder_pem_ops, ++ DEFINE_RES_MEM(0x89001f000000UL, 0x39 * SZ_16M) }, ++ { "CAVIUM", "THUNDERX", 2, 8, MCFG_BUS_ANY, &pci_thunder_pem_ops, ++ DEFINE_RES_MEM(0x894057000000UL, 0x39 * SZ_16M) }, ++ { "CAVIUM", "THUNDERX", 2, 9, MCFG_BUS_ANY, &pci_thunder_pem_ops, ++ DEFINE_RES_MEM(0x89808f000000UL, 0x39 * SZ_16M) }, ++ { "CAVIUM", "THUNDERX", 2, 14, MCFG_BUS_ANY, &pci_thunder_pem_ops, ++ DEFINE_RES_MEM(0x98001f000000UL, 0x39 * SZ_16M) }, ++ { "CAVIUM", "THUNDERX", 2, 15, MCFG_BUS_ANY, &pci_thunder_pem_ops, ++ DEFINE_RES_MEM(0x984057000000UL, 0x39 * SZ_16M) }, ++ { "CAVIUM", "THUNDERX", 2, 16, MCFG_BUS_ANY, &pci_thunder_pem_ops, ++ DEFINE_RES_MEM(0x98808f000000UL, 0x39 * SZ_16M) }, ++ { "CAVIUM", "THUNDERX", 2, 17, MCFG_BUS_ANY, &pci_thunder_pem_ops, ++ DEFINE_RES_MEM(0x99001f000000UL, 0x39 * SZ_16M) }, ++ { "CAVIUM", "THUNDERX", 2, 18, MCFG_BUS_ANY, &pci_thunder_pem_ops, ++ DEFINE_RES_MEM(0x994057000000UL, 0x39 * SZ_16M) }, ++ { "CAVIUM", "THUNDERX", 2, 19, MCFG_BUS_ANY, &pci_thunder_pem_ops, ++ DEFINE_RES_MEM(0x99808f000000UL, 0x39 * SZ_16M) }, ++#endif ++#ifdef CONFIG_PCI_HOST_THUNDER_ECAM ++ /* SoC pass1.x */ ++ { "CAVIUM", "THUNDERX", 2, 0, MCFG_BUS_ANY, &pci_thunder_ecam_ops, ++ MCFG_RES_EMPTY}, ++ { "CAVIUM", "THUNDERX", 2, 1, MCFG_BUS_ANY, &pci_thunder_ecam_ops, ++ MCFG_RES_EMPTY}, ++ { "CAVIUM", "THUNDERX", 2, 2, MCFG_BUS_ANY, &pci_thunder_ecam_ops, ++ MCFG_RES_EMPTY}, ++ { "CAVIUM", "THUNDERX", 2, 3, MCFG_BUS_ANY, &pci_thunder_ecam_ops, ++ MCFG_RES_EMPTY}, ++ { "CAVIUM", "THUNDERX", 2, 10, MCFG_BUS_ANY, &pci_thunder_ecam_ops, ++ MCFG_RES_EMPTY}, ++ { "CAVIUM", "THUNDERX", 2, 11, MCFG_BUS_ANY, &pci_thunder_ecam_ops, ++ MCFG_RES_EMPTY}, ++ { "CAVIUM", "THUNDERX", 2, 12, MCFG_BUS_ANY, &pci_thunder_ecam_ops, ++ MCFG_RES_EMPTY}, ++ { "CAVIUM", "THUNDERX", 2, 13, MCFG_BUS_ANY, &pci_thunder_ecam_ops, ++ MCFG_RES_EMPTY}, + #endif + }; + +diff --git a/drivers/pci/host/pci-thunder-ecam.c b/drivers/pci/host/pci-thunder-ecam.c +index d50a3dc..b6c17e2 100644 +--- a/drivers/pci/host/pci-thunder-ecam.c ++++ b/drivers/pci/host/pci-thunder-ecam.c +@@ -346,7 +346,7 @@ static int thunder_ecam_config_write(struct pci_bus *bus, unsigned int devfn, + return pci_generic_config_write(bus, devfn, where, size, val); + } + +-static struct pci_ecam_ops pci_thunder_ecam_ops = { ++struct pci_ecam_ops pci_thunder_ecam_ops = { + .bus_shift = 20, + .pci_ops = { + .map_bus = pci_ecam_map_bus, +diff --git a/include/linux/pci-ecam.h b/include/linux/pci-ecam.h +index 65505ea..35f0e81 100644 +--- a/include/linux/pci-ecam.h ++++ b/include/linux/pci-ecam.h +@@ -62,6 +62,9 @@ extern struct pci_ecam_ops pci_generic_ecam_ops; + #ifdef CONFIG_PCI_HOST_THUNDER_PEM + extern struct pci_ecam_ops pci_thunder_pem_ops; + #endif ++#ifdef CONFIG_PCI_HOST_THUNDER_ECAM ++extern struct pci_ecam_ops pci_thunder_ecam_ops; ++#endif + + #ifdef CONFIG_PCI_HOST_GENERIC + /* for DT-based PCI controllers that support ECAM */ +-- +2.9.3 + +From 3080ac5bb527155ccdf8490ce221b1c6ad01f502 Mon Sep 17 00:00:00 2001 +From: Duc Dang +Date: Sat, 17 Sep 2016 07:24:38 -0700 +Subject: [PATCH 6/6] PCI/ACPI: xgene: Add ECAM quirk for X-Gene PCIe + controller + +PCIe controller in X-Gene SoCs is not ECAM compliant: software +needs to configure additional concontroller register to address +device at bus:dev:function. + +This patch depends on "ECAM quirks handling for ARM64 platforms" +series (http://www.spinics.net/lists/arm-kernel/msg530692.html) +to address the limitation above for X-Gene PCIe controller. + +The quirk will only be applied for X-Gene PCIe MCFG table with +OEM revison 1, 2, 3 or 4 (PCIe controller v1 and v2 on X-Gene SoCs). + +Signed-off-by: Duc Dang +--- + drivers/acpi/pci_mcfg.c | 32 +++++ + drivers/pci/host/Makefile | 2 +- + drivers/pci/host/pci-xgene-ecam.c | 280 ++++++++++++++++++++++++++++++++++++++ + include/linux/pci-ecam.h | 5 + + 4 files changed, 318 insertions(+), 1 deletion(-) + create mode 100644 drivers/pci/host/pci-xgene-ecam.c + +diff --git a/drivers/acpi/pci_mcfg.c b/drivers/acpi/pci_mcfg.c +index eb14f74..635ab24 100644 +--- a/drivers/acpi/pci_mcfg.c ++++ b/drivers/acpi/pci_mcfg.c +@@ -123,6 +123,38 @@ static struct mcfg_fixup mcfg_quirks[] = { + { "CAVIUM", "THUNDERX", 2, 13, MCFG_BUS_ANY, &pci_thunder_ecam_ops, + MCFG_RES_EMPTY}, + #endif ++#ifdef CONFIG_PCI_XGENE ++ {"APM ", "XGENE ", 1, 0, MCFG_BUS_ANY, ++ &xgene_v1_pcie_ecam_ops, MCFG_RES_EMPTY}, ++ {"APM ", "XGENE ", 1, 1, MCFG_BUS_ANY, ++ &xgene_v1_pcie_ecam_ops, MCFG_RES_EMPTY}, ++ {"APM ", "XGENE ", 1, 2, MCFG_BUS_ANY, ++ &xgene_v1_pcie_ecam_ops, MCFG_RES_EMPTY}, ++ {"APM ", "XGENE ", 1, 3, MCFG_BUS_ANY, ++ &xgene_v1_pcie_ecam_ops, MCFG_RES_EMPTY}, ++ {"APM ", "XGENE ", 1, 4, MCFG_BUS_ANY, ++ &xgene_v1_pcie_ecam_ops, MCFG_RES_EMPTY}, ++ {"APM ", "XGENE ", 2, 0, MCFG_BUS_ANY, ++ &xgene_v1_pcie_ecam_ops, MCFG_RES_EMPTY}, ++ {"APM ", "XGENE ", 2, 1, MCFG_BUS_ANY, ++ &xgene_v1_pcie_ecam_ops, MCFG_RES_EMPTY}, ++ {"APM ", "XGENE ", 2, 2, MCFG_BUS_ANY, ++ &xgene_v1_pcie_ecam_ops, MCFG_RES_EMPTY}, ++ {"APM ", "XGENE ", 2, 3, MCFG_BUS_ANY, ++ &xgene_v1_pcie_ecam_ops, MCFG_RES_EMPTY}, ++ {"APM ", "XGENE ", 2, 4, MCFG_BUS_ANY, ++ &xgene_v1_pcie_ecam_ops, MCFG_RES_EMPTY}, ++ {"APM ", "XGENE ", 3, 0, MCFG_BUS_ANY, ++ &xgene_v2_1_pcie_ecam_ops, MCFG_RES_EMPTY}, ++ {"APM ", "XGENE ", 3, 1, MCFG_BUS_ANY, ++ &xgene_v2_1_pcie_ecam_ops, MCFG_RES_EMPTY}, ++ {"APM ", "XGENE ", 4, 0, MCFG_BUS_ANY, ++ &xgene_v2_2_pcie_ecam_ops, MCFG_RES_EMPTY}, ++ {"APM ", "XGENE ", 4, 1, MCFG_BUS_ANY, ++ &xgene_v2_2_pcie_ecam_ops, MCFG_RES_EMPTY}, ++ {"APM ", "XGENE ", 4, 2, MCFG_BUS_ANY, ++ &xgene_v2_2_pcie_ecam_ops, MCFG_RES_EMPTY}, ++#endif + }; + + static char mcfg_oem_id[ACPI_OEM_ID_SIZE]; +diff --git a/drivers/pci/host/Makefile b/drivers/pci/host/Makefile +index 8843410..af4f505 100644 +--- a/drivers/pci/host/Makefile ++++ b/drivers/pci/host/Makefile +@@ -15,7 +15,7 @@ obj-$(CONFIG_PCIE_SPEAR13XX) += pcie-spear13xx.o + obj-$(CONFIG_PCI_KEYSTONE) += pci-keystone-dw.o pci-keystone.o + obj-$(CONFIG_PCIE_XILINX) += pcie-xilinx.o + obj-$(CONFIG_PCIE_XILINX_NWL) += pcie-xilinx-nwl.o +-obj-$(CONFIG_PCI_XGENE) += pci-xgene.o ++obj-$(CONFIG_PCI_XGENE) += pci-xgene.o pci-xgene-ecam.o + obj-$(CONFIG_PCI_XGENE_MSI) += pci-xgene-msi.o + obj-$(CONFIG_PCI_LAYERSCAPE) += pci-layerscape.o + obj-$(CONFIG_PCI_VERSATILE) += pci-versatile.o +diff --git a/drivers/pci/host/pci-xgene-ecam.c b/drivers/pci/host/pci-xgene-ecam.c +new file mode 100644 +index 0000000..b66a04f +--- /dev/null ++++ b/drivers/pci/host/pci-xgene-ecam.c +@@ -0,0 +1,280 @@ ++/* ++ * APM X-Gene PCIe ECAM fixup driver ++ * ++ * Copyright (c) 2016, Applied Micro Circuits Corporation ++ * Author: ++ * Duc Dang ++ * ++ * 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. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program. If not, see . ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#ifdef CONFIG_ACPI ++#define RTDID 0x160 ++#define ROOT_CAP_AND_CTRL 0x5C ++ ++/* PCIe IP version */ ++#define XGENE_PCIE_IP_VER_UNKN 0 ++#define XGENE_PCIE_IP_VER_1 1 ++#define XGENE_PCIE_IP_VER_2 2 ++ ++#define XGENE_CSR_LENGTH 0x10000 ++ ++struct xgene_pcie_acpi_root { ++ void __iomem *csr_base; ++ u32 version; ++}; ++ ++static int xgene_v1_pcie_ecam_init(struct pci_config_window *cfg) ++{ ++ struct xgene_pcie_acpi_root *xgene_root; ++ struct device *dev = cfg->parent; ++ u32 csr_base; ++ ++ xgene_root = devm_kzalloc(dev, sizeof(*xgene_root), GFP_KERNEL); ++ if (!xgene_root) ++ return -ENOMEM; ++ ++ switch (cfg->res.start) { ++ case 0xE0D0000000ULL: ++ csr_base = 0x1F2B0000; ++ break; ++ case 0xD0D0000000ULL: ++ csr_base = 0x1F2C0000; ++ break; ++ case 0x90D0000000ULL: ++ csr_base = 0x1F2D0000; ++ break; ++ case 0xA0D0000000ULL: ++ csr_base = 0x1F500000; ++ break; ++ case 0xC0D0000000ULL: ++ csr_base = 0x1F510000; ++ break; ++ default: ++ return -ENODEV; ++ } ++ ++ xgene_root->csr_base = ioremap(csr_base, XGENE_CSR_LENGTH); ++ if (!xgene_root->csr_base) { ++ kfree(xgene_root); ++ return -ENODEV; ++ } ++ ++ xgene_root->version = XGENE_PCIE_IP_VER_1; ++ ++ cfg->priv = xgene_root; ++ ++ return 0; ++} ++ ++static int xgene_v2_1_pcie_ecam_init(struct pci_config_window *cfg) ++{ ++ struct xgene_pcie_acpi_root *xgene_root; ++ struct device *dev = cfg->parent; ++ resource_size_t csr_base; ++ ++ xgene_root = devm_kzalloc(dev, sizeof(*xgene_root), GFP_KERNEL); ++ if (!xgene_root) ++ return -ENOMEM; ++ ++ switch (cfg->res.start) { ++ case 0xC0D0000000ULL: ++ csr_base = 0x1F2B0000; ++ break; ++ case 0xA0D0000000ULL: ++ csr_base = 0x1F2C0000; ++ break; ++ default: ++ return -ENODEV; ++ } ++ ++ xgene_root->csr_base = ioremap(csr_base, XGENE_CSR_LENGTH); ++ if (!xgene_root->csr_base) { ++ kfree(xgene_root); ++ return -ENODEV; ++ } ++ ++ xgene_root->version = XGENE_PCIE_IP_VER_2; ++ ++ cfg->priv = xgene_root; ++ ++ return 0; ++} ++ ++static int xgene_v2_2_pcie_ecam_init(struct pci_config_window *cfg) ++{ ++ struct xgene_pcie_acpi_root *xgene_root; ++ struct device *dev = cfg->parent; ++ resource_size_t csr_base; ++ ++ xgene_root = devm_kzalloc(dev, sizeof(*xgene_root), GFP_KERNEL); ++ if (!xgene_root) ++ return -ENOMEM; ++ ++ switch (cfg->res.start) { ++ case 0xE0D0000000ULL: ++ csr_base = 0x1F2B0000; ++ break; ++ case 0xA0D0000000ULL: ++ csr_base = 0x1F500000; ++ break; ++ case 0x90D0000000ULL: ++ csr_base = 0x1F2D0000; ++ break; ++ default: ++ return -ENODEV; ++ } ++ ++ xgene_root->csr_base = ioremap(csr_base, XGENE_CSR_LENGTH); ++ if (!xgene_root->csr_base) { ++ kfree(xgene_root); ++ return -ENODEV; ++ } ++ ++ xgene_root->version = XGENE_PCIE_IP_VER_2; ++ ++ cfg->priv = xgene_root; ++ ++ return 0; ++} ++/* ++ * For Configuration request, RTDID register is used as Bus Number, ++ * Device Number and Function number of the header fields. ++ */ ++static void xgene_pcie_set_rtdid_reg(struct pci_bus *bus, uint devfn) ++{ ++ struct pci_config_window *cfg = bus->sysdata; ++ struct xgene_pcie_acpi_root *port = cfg->priv; ++ unsigned int b, d, f; ++ u32 rtdid_val = 0; ++ ++ b = bus->number; ++ d = PCI_SLOT(devfn); ++ f = PCI_FUNC(devfn); ++ ++ if (!pci_is_root_bus(bus)) ++ rtdid_val = (b << 8) | (d << 3) | f; ++ ++ writel(rtdid_val, port->csr_base + RTDID); ++ /* read the register back to ensure flush */ ++ readl(port->csr_base + RTDID); ++} ++ ++/* ++ * X-Gene PCIe port uses BAR0-BAR1 of RC's configuration space as ++ * the translation from PCI bus to native BUS. Entire DDR region ++ * is mapped into PCIe space using these registers, so it can be ++ * reached by DMA from EP devices. The BAR0/1 of bridge should be ++ * hidden during enumeration to avoid the sizing and resource allocation ++ * by PCIe core. ++ */ ++static bool xgene_pcie_hide_rc_bars(struct pci_bus *bus, int offset) ++{ ++ if (pci_is_root_bus(bus) && ((offset == PCI_BASE_ADDRESS_0) || ++ (offset == PCI_BASE_ADDRESS_1))) ++ return true; ++ ++ return false; ++} ++ ++void __iomem *xgene_pcie_ecam_map_bus(struct pci_bus *bus, ++ unsigned int devfn, int where) ++{ ++ struct pci_config_window *cfg = bus->sysdata; ++ unsigned int busn = bus->number; ++ void __iomem *base; ++ ++ if (busn < cfg->busr.start || busn > cfg->busr.end) ++ return NULL; ++ ++ if ((pci_is_root_bus(bus) && devfn != 0) || ++ xgene_pcie_hide_rc_bars(bus, where)) ++ return NULL; ++ ++ xgene_pcie_set_rtdid_reg(bus, devfn); ++ ++ if (busn > cfg->busr.start) ++ base = cfg->win + (1 << cfg->ops->bus_shift); ++ else ++ base = cfg->win; ++ ++ return base + where; ++} ++ ++static int xgene_pcie_config_read32(struct pci_bus *bus, unsigned int devfn, ++ int where, int size, u32 *val) ++{ ++ struct pci_config_window *cfg = bus->sysdata; ++ struct xgene_pcie_acpi_root *port = cfg->priv; ++ ++ if (pci_generic_config_read32(bus, devfn, where & ~0x3, 4, val) != ++ PCIBIOS_SUCCESSFUL) ++ return PCIBIOS_DEVICE_NOT_FOUND; ++ ++ /* ++ * The v1 controller has a bug in its Configuration Request ++ * Retry Status (CRS) logic: when CRS is enabled and we read the ++ * Vendor and Device ID of a non-existent device, the controller ++ * fabricates return data of 0xFFFF0001 ("device exists but is not ++ * ready") instead of 0xFFFFFFFF ("device does not exist"). This ++ * causes the PCI core to retry the read until it times out. ++ * Avoid this by not claiming to support CRS. ++ */ ++ if (pci_is_root_bus(bus) && (port->version == XGENE_PCIE_IP_VER_1) && ++ ((where & ~0x3) == ROOT_CAP_AND_CTRL)) ++ *val &= ~(PCI_EXP_RTCAP_CRSVIS << 16); ++ ++ if (size <= 2) ++ *val = (*val >> (8 * (where & 3))) & ((1 << (size * 8)) - 1); ++ ++ return PCIBIOS_SUCCESSFUL; ++} ++ ++struct pci_ecam_ops xgene_v1_pcie_ecam_ops = { ++ .bus_shift = 16, ++ .init = xgene_v1_pcie_ecam_init, ++ .pci_ops = { ++ .map_bus = xgene_pcie_ecam_map_bus, ++ .read = xgene_pcie_config_read32, ++ .write = pci_generic_config_write, ++ } ++}; ++ ++struct pci_ecam_ops xgene_v2_1_pcie_ecam_ops = { ++ .bus_shift = 16, ++ .init = xgene_v2_1_pcie_ecam_init, ++ .pci_ops = { ++ .map_bus = xgene_pcie_ecam_map_bus, ++ .read = xgene_pcie_config_read32, ++ .write = pci_generic_config_write, ++ } ++}; ++ ++struct pci_ecam_ops xgene_v2_2_pcie_ecam_ops = { ++ .bus_shift = 16, ++ .init = xgene_v2_2_pcie_ecam_init, ++ .pci_ops = { ++ .map_bus = xgene_pcie_ecam_map_bus, ++ .read = xgene_pcie_config_read32, ++ .write = pci_generic_config_write, ++ } ++}; ++#endif +diff --git a/include/linux/pci-ecam.h b/include/linux/pci-ecam.h +index 35f0e81..40da3e7 100644 +--- a/include/linux/pci-ecam.h ++++ b/include/linux/pci-ecam.h +@@ -65,6 +65,11 @@ extern struct pci_ecam_ops pci_thunder_pem_ops; + #ifdef CONFIG_PCI_HOST_THUNDER_ECAM + extern struct pci_ecam_ops pci_thunder_ecam_ops; + #endif ++#ifdef CONFIG_PCI_XGENE ++extern struct pci_ecam_ops xgene_v1_pcie_ecam_ops; ++extern struct pci_ecam_ops xgene_v2_1_pcie_ecam_ops; ++extern struct pci_ecam_ops xgene_v2_2_pcie_ecam_ops; ++#endif + + #ifdef CONFIG_PCI_HOST_GENERIC + /* for DT-based PCI controllers that support ECAM */ +-- +2.9.3 + diff --git a/bcm2837-initial-support.patch b/bcm2837-initial-support.patch index ba3902c4b..0e641d693 100644 --- a/bcm2837-initial-support.patch +++ b/bcm2837-initial-support.patch @@ -1,32 +1,3 @@ -From da77f737f9f5a487f3a1f80f8546585ee18cd7b9 Mon Sep 17 00:00:00 2001 -From: Eric Anholt -Date: Fri, 4 Mar 2016 10:39:28 -0800 -Subject: [PATCH 27/36] dt-bindings: Add root properties for Raspberry Pi 3 - -Signed-off-by: Eric Anholt -Acked-by: Rob Herring ---- - Documentation/devicetree/bindings/arm/bcm/brcm,bcm2835.txt | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/Documentation/devicetree/bindings/arm/bcm/brcm,bcm2835.txt b/Documentation/devicetree/bindings/arm/bcm/brcm,bcm2835.txt -index 11d3056..6ffe087 100644 ---- a/Documentation/devicetree/bindings/arm/bcm/brcm,bcm2835.txt -+++ b/Documentation/devicetree/bindings/arm/bcm/brcm,bcm2835.txt -@@ -30,6 +30,10 @@ Raspberry Pi 2 Model B - Required root node properties: - compatible = "raspberrypi,2-model-b", "brcm,bcm2836"; - -+Raspberry Pi 3 Model B -+Required root node properties: -+compatible = "raspberrypi,3-model-b", "brcm,bcm2837"; -+ - Raspberry Pi Compute Module - Required root node properties: - compatible = "raspberrypi,compute-module", "brcm,bcm2835"; --- -2.7.3 - From a2858804c7f5f4585b718543236b7ba3b3ec813a Mon Sep 17 00:00:00 2001 From: Peter Robinson Date: Mon, 29 Aug 2016 09:14:15 +0100 @@ -180,153 +151,3 @@ index 0000000..8216bbb +}; -- 2.9.3 - -From fc07a6d394f41a98f839507580082184ac684912 Mon Sep 17 00:00:00 2001 -From: Lubomir Rintel -Date: Mon, 2 May 2016 09:06:51 +0200 -Subject: [PATCH 1/2] ARM: bcm2835: dt: Add the ethernet to the device trees - -The hub and the ethernet in its port 1 are hardwired on the board. - -Compared to the adapters that can be plugged into the USB ports, this -one has no serial EEPROM to store its MAC. Nevertheless, the Raspberry Pi -has the MAC address for this adapter in its ROM, accessible from its -firmware. - -U-Boot can read out the address and set the local-mac-address property of the -node with "ethernet" alias. Let's add the node so that U-Boot can do its -business. - -Model B rev2 and Model B+ entries were verified by me, the hierarchy and -pid/vid pair for the Version 2 was provided by Peter Chen. Original -Model B is a blind shot, though very likely correct. - -Signed-off-by: Lubomir Rintel -Acked-by: Stephen Warren -Signed-off-by: Eric Anholt ---- - arch/arm/boot/dts/bcm2835-rpi-b-plus.dts | 1 + - arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts | 1 + - arch/arm/boot/dts/bcm2835-rpi-b.dts | 1 + - arch/arm/boot/dts/bcm2836-rpi-2-b.dts | 1 + - arch/arm/boot/dts/bcm283x-rpi-smsc9512.dtsi | 19 +++++++++++++++++++ - arch/arm/boot/dts/bcm283x-rpi-smsc9514.dtsi | 19 +++++++++++++++++++ - arch/arm/boot/dts/bcm283x.dtsi | 2 ++ - 7 files changed, 44 insertions(+) - create mode 100644 arch/arm/boot/dts/bcm283x-rpi-smsc9512.dtsi - create mode 100644 arch/arm/boot/dts/bcm283x-rpi-smsc9514.dtsi - -diff --git a/arch/arm/boot/dts/bcm2835-rpi-b-plus.dts b/arch/arm/boot/dts/bcm2835-rpi-b-plus.dts -index 57d313b..d5fdb8e 100644 ---- a/arch/arm/boot/dts/bcm2835-rpi-b-plus.dts -+++ b/arch/arm/boot/dts/bcm2835-rpi-b-plus.dts -@@ -1,6 +1,7 @@ - /dts-v1/; - #include "bcm2835.dtsi" - #include "bcm2835-rpi.dtsi" -+#include "bcm283x-rpi-smsc9514.dtsi" - - / { - compatible = "raspberrypi,model-b-plus", "brcm,bcm2835"; -diff --git a/arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts b/arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts -index cf2774e..bfc4bd9 100644 ---- a/arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts -+++ b/arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts -@@ -1,6 +1,7 @@ - /dts-v1/; - #include "bcm2835.dtsi" - #include "bcm2835-rpi.dtsi" -+#include "bcm283x-rpi-smsc9512.dtsi" - - / { - compatible = "raspberrypi,model-b-rev2", "brcm,bcm2835"; -diff --git a/arch/arm/boot/dts/bcm2835-rpi-b.dts b/arch/arm/boot/dts/bcm2835-rpi-b.dts -index 8b15f9c..0371bb7 100644 ---- a/arch/arm/boot/dts/bcm2835-rpi-b.dts -+++ b/arch/arm/boot/dts/bcm2835-rpi-b.dts -@@ -1,6 +1,7 @@ - /dts-v1/; - #include "bcm2835.dtsi" - #include "bcm2835-rpi.dtsi" -+#include "bcm283x-rpi-smsc9512.dtsi" - - / { - compatible = "raspberrypi,model-b", "brcm,bcm2835"; -diff --git a/arch/arm/boot/dts/bcm2836-rpi-2-b.dts b/arch/arm/boot/dts/bcm2836-rpi-2-b.dts -index c4743f4..29e1cfe 100644 ---- a/arch/arm/boot/dts/bcm2836-rpi-2-b.dts -+++ b/arch/arm/boot/dts/bcm2836-rpi-2-b.dts -@@ -1,6 +1,7 @@ - /dts-v1/; - #include "bcm2836.dtsi" - #include "bcm2835-rpi.dtsi" -+#include "bcm283x-rpi-smsc9514.dtsi" - - / { - compatible = "raspberrypi,2-model-b", "brcm,bcm2836"; -diff --git a/arch/arm/boot/dts/bcm283x-rpi-smsc9512.dtsi b/arch/arm/boot/dts/bcm283x-rpi-smsc9512.dtsi -new file mode 100644 -index 0000000..12c981e ---- /dev/null -+++ b/arch/arm/boot/dts/bcm283x-rpi-smsc9512.dtsi -@@ -0,0 +1,19 @@ -+/ { -+ aliases { -+ ethernet = ðernet; -+ }; -+}; -+ -+&usb { -+ usb1@1 { -+ compatible = "usb424,9512"; -+ reg = <1>; -+ #address-cells = <1>; -+ #size-cells = <0>; -+ -+ ethernet: usbether@1 { -+ compatible = "usb424,ec00"; -+ reg = <1>; -+ }; -+ }; -+}; -diff --git a/arch/arm/boot/dts/bcm283x-rpi-smsc9514.dtsi b/arch/arm/boot/dts/bcm283x-rpi-smsc9514.dtsi -new file mode 100644 -index 0000000..3f0a56e ---- /dev/null -+++ b/arch/arm/boot/dts/bcm283x-rpi-smsc9514.dtsi -@@ -0,0 +1,19 @@ -+/ { -+ aliases { -+ ethernet = ðernet; -+ }; -+}; -+ -+&usb { -+ usb1@1 { -+ compatible = "usb424,9514"; -+ reg = <1>; -+ #address-cells = <1>; -+ #size-cells = <0>; -+ -+ ethernet: usbether@1 { -+ compatible = "usb424,ec00"; -+ reg = <1>; -+ }; -+ }; -+}; -diff --git a/arch/arm/boot/dts/bcm283x.dtsi b/arch/arm/boot/dts/bcm283x.dtsi -index 10b27b9..b982522 100644 ---- a/arch/arm/boot/dts/bcm283x.dtsi -+++ b/arch/arm/boot/dts/bcm283x.dtsi -@@ -287,6 +287,8 @@ - compatible = "brcm,bcm2835-usb"; - reg = <0x7e980000 0x10000>; - interrupts = <1 9>; -+ #address-cells = <1>; -+ #size-cells = <0>; - }; - - v3d: v3d@7ec00000 { --- -2.9.3 - diff --git a/bcm283x-vc4-fixes.patch b/bcm283x-vc4-fixes.patch new file mode 100644 index 000000000..89793b62b --- /dev/null +++ b/bcm283x-vc4-fixes.patch @@ -0,0 +1,636 @@ +From 9db79f3a51c97e0cfcde1b25299e8db9ee3d64ab Mon Sep 17 00:00:00 2001 +From: Eric Anholt +Date: Wed, 14 Sep 2016 19:21:29 +0100 +Subject: [PATCH 1/4] drm/vc4: Fall back to using an EDID probe in the absence + of a GPIO. + +On Pi0/1/2, we use an external GPIO line for hotplug detection, since +the HDMI_HOTPLUG register isn't connected to anything. However, with +the Pi3 the HPD GPIO line has moved off to a GPIO expander that will +be tricky to get to (the firmware is constantly polling the expander +using i2c0, so we'll need to coordinate with it). + +As a stop-gap, if we don't have a GPIO line, use an EDID probe to +detect connection. Fixes HDMI display on the pi3. + +Signed-off-by: Eric Anholt +--- + drivers/gpu/drm/vc4/vc4_hdmi.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c +index 4452f36..5adc0c7 100644 +--- a/drivers/gpu/drm/vc4/vc4_hdmi.c ++++ b/drivers/gpu/drm/vc4/vc4_hdmi.c +@@ -174,6 +174,9 @@ vc4_hdmi_connector_detect(struct drm_connector *connector, bool force) + return connector_status_disconnected; + } + ++ if (drm_probe_ddc(vc4->hdmi->ddc)) ++ return connector_status_connected; ++ + if (HDMI_READ(VC4_HDMI_HOTPLUG) & VC4_HDMI_HOTPLUG_CONNECTED) + return connector_status_connected; + else +-- +2.9.3 + +From 7b4c39f34fbbdfe0cd0e626686ee01ab96601598 Mon Sep 17 00:00:00 2001 +From: Eric Anholt +Date: Fri, 16 Sep 2016 10:59:45 +0100 +Subject: [PATCH 2/4] drm/vc4: Enable limited range RGB output on HDMI with CEA + modes. + +Fixes broken grayscale ramps on many HDMI monitors, where large areas +at the ends of the ramp would all appear as black or white. + +Signed-off-by: Eric Anholt +--- + drivers/gpu/drm/vc4/vc4_hdmi.c | 31 +++++++++++++++++++++++++++++-- + drivers/gpu/drm/vc4/vc4_regs.h | 9 ++++++++- + 2 files changed, 37 insertions(+), 3 deletions(-) + +diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c +index 5adc0c7..5df4e74 100644 +--- a/drivers/gpu/drm/vc4/vc4_hdmi.c ++++ b/drivers/gpu/drm/vc4/vc4_hdmi.c +@@ -276,6 +276,7 @@ static void vc4_hdmi_encoder_mode_set(struct drm_encoder *encoder, + struct drm_display_mode *unadjusted_mode, + struct drm_display_mode *mode) + { ++ struct vc4_hdmi_encoder *vc4_encoder = to_vc4_hdmi_encoder(encoder); + struct drm_device *dev = encoder->dev; + struct vc4_dev *vc4 = to_vc4_dev(dev); + bool debug_dump_regs = false; +@@ -291,6 +292,7 @@ static void vc4_hdmi_encoder_mode_set(struct drm_encoder *encoder, + u32 vertb = (VC4_SET_FIELD(0, VC4_HDMI_VERTB_VSPO) | + VC4_SET_FIELD(mode->vtotal - mode->vsync_end, + VC4_HDMI_VERTB_VBP)); ++ u32 csc_ctl; + + if (debug_dump_regs) { + DRM_INFO("HDMI regs before:\n"); +@@ -329,9 +331,34 @@ static void vc4_hdmi_encoder_mode_set(struct drm_encoder *encoder, + (vsync_pos ? 0 : VC4_HD_VID_CTL_VSYNC_LOW) | + (hsync_pos ? 0 : VC4_HD_VID_CTL_HSYNC_LOW)); + ++ csc_ctl = VC4_SET_FIELD(VC4_HD_CSC_CTL_ORDER_BGR, ++ VC4_HD_CSC_CTL_ORDER); ++ ++ if (vc4_encoder->hdmi_monitor && drm_match_cea_mode(mode) > 1) { ++ /* CEA VICs other than #1 requre limited range RGB ++ * output. Apply a colorspace conversion to squash ++ * 0-255 down to 16-235. The matrix here is: ++ * ++ * [ 0 0 0.8594 16] ++ * [ 0 0.8594 0 16] ++ * [ 0.8594 0 0 16] ++ * [ 0 0 0 1] ++ */ ++ csc_ctl |= VC4_HD_CSC_CTL_ENABLE; ++ csc_ctl |= VC4_HD_CSC_CTL_RGB2YCC; ++ csc_ctl |= VC4_SET_FIELD(VC4_HD_CSC_CTL_MODE_CUSTOM, ++ VC4_HD_CSC_CTL_MODE); ++ ++ HD_WRITE(VC4_HD_CSC_12_11, (0x000 << 16) | 0x000); ++ HD_WRITE(VC4_HD_CSC_14_13, (0x100 << 16) | 0x6e0); ++ HD_WRITE(VC4_HD_CSC_22_21, (0x6e0 << 16) | 0x000); ++ HD_WRITE(VC4_HD_CSC_24_23, (0x100 << 16) | 0x000); ++ HD_WRITE(VC4_HD_CSC_32_31, (0x000 << 16) | 0x6e0); ++ HD_WRITE(VC4_HD_CSC_34_33, (0x100 << 16) | 0x000); ++ } ++ + /* The RGB order applies even when CSC is disabled. */ +- HD_WRITE(VC4_HD_CSC_CTL, VC4_SET_FIELD(VC4_HD_CSC_CTL_ORDER_BGR, +- VC4_HD_CSC_CTL_ORDER)); ++ HD_WRITE(VC4_HD_CSC_CTL, csc_ctl); + + HDMI_WRITE(VC4_HDMI_FIFO_CTL, VC4_HDMI_FIFO_CTL_MASTER_SLAVE_N); + +diff --git a/drivers/gpu/drm/vc4/vc4_regs.h b/drivers/gpu/drm/vc4/vc4_regs.h +index 160942a..9ecd6ff 100644 +--- a/drivers/gpu/drm/vc4/vc4_regs.h ++++ b/drivers/gpu/drm/vc4/vc4_regs.h +@@ -528,10 +528,17 @@ + # define VC4_HD_CSC_CTL_MODE_SHIFT 2 + # define VC4_HD_CSC_CTL_MODE_RGB_TO_SD_YPRPB 0 + # define VC4_HD_CSC_CTL_MODE_RGB_TO_HD_YPRPB 1 +-# define VC4_HD_CSC_CTL_MODE_CUSTOM 2 ++# define VC4_HD_CSC_CTL_MODE_CUSTOM 3 + # define VC4_HD_CSC_CTL_RGB2YCC BIT(1) + # define VC4_HD_CSC_CTL_ENABLE BIT(0) + ++#define VC4_HD_CSC_12_11 0x044 ++#define VC4_HD_CSC_14_13 0x048 ++#define VC4_HD_CSC_22_21 0x04c ++#define VC4_HD_CSC_24_23 0x050 ++#define VC4_HD_CSC_32_31 0x054 ++#define VC4_HD_CSC_34_33 0x058 ++ + #define VC4_HD_FRAME_COUNT 0x068 + + /* HVS display list information. */ +-- +2.9.3 + +From 107d3188b3723840deddaa5efeffcaf167e462f2 Mon Sep 17 00:00:00 2001 +From: Eric Anholt +Date: Wed, 28 Sep 2016 08:42:42 -0700 +Subject: [PATCH 3/4] drm/vc4: Fix races when the CS reads from render targets. + +With the introduction of bin/render pipelining, the previous job may +not be completed when we start binning the next one. If the previous +job wrote our VBO, IB, or CS textures, then the binning stage might +get stale or uninitialized results. + +Fixes the major rendering failure in glmark2 -b terrain. + +Signed-off-by: Eric Anholt +Fixes: ca26d28bbaa3 ("drm/vc4: improve throughput by pipelining binning and rendering jobs") +Cc: stable@vger.kernel.org +--- + drivers/gpu/drm/vc4/vc4_drv.h | 19 ++++++++++++++++++- + drivers/gpu/drm/vc4/vc4_gem.c | 13 +++++++++++++ + drivers/gpu/drm/vc4/vc4_render_cl.c | 21 +++++++++++++++++---- + drivers/gpu/drm/vc4/vc4_validate.c | 17 ++++++++++++++--- + 4 files changed, 62 insertions(+), 8 deletions(-) + +diff --git a/drivers/gpu/drm/vc4/vc4_drv.h b/drivers/gpu/drm/vc4/vc4_drv.h +index 428e249..f696b75 100644 +--- a/drivers/gpu/drm/vc4/vc4_drv.h ++++ b/drivers/gpu/drm/vc4/vc4_drv.h +@@ -122,9 +122,16 @@ to_vc4_dev(struct drm_device *dev) + struct vc4_bo { + struct drm_gem_cma_object base; + +- /* seqno of the last job to render to this BO. */ ++ /* seqno of the last job to render using this BO. */ + uint64_t seqno; + ++ /* seqno of the last job to use the RCL to write to this BO. ++ * ++ * Note that this doesn't include binner overflow memory ++ * writes. ++ */ ++ uint64_t write_seqno; ++ + /* List entry for the BO's position in either + * vc4_exec_info->unref_list or vc4_dev->bo_cache.time_list + */ +@@ -216,6 +223,9 @@ struct vc4_exec_info { + /* Sequence number for this bin/render job. */ + uint64_t seqno; + ++ /* Latest write_seqno of any BO that binning depends on. */ ++ uint64_t bin_dep_seqno; ++ + /* Last current addresses the hardware was processing when the + * hangcheck timer checked on us. + */ +@@ -230,6 +240,13 @@ struct vc4_exec_info { + struct drm_gem_cma_object **bo; + uint32_t bo_count; + ++ /* List of BOs that are being written by the RCL. Other than ++ * the binner temporary storage, this is all the BOs written ++ * by the job. ++ */ ++ struct drm_gem_cma_object *rcl_write_bo[4]; ++ uint32_t rcl_write_bo_count; ++ + /* Pointers for our position in vc4->job_list */ + struct list_head head; + +diff --git a/drivers/gpu/drm/vc4/vc4_gem.c b/drivers/gpu/drm/vc4/vc4_gem.c +index b262c5c..ae1609e 100644 +--- a/drivers/gpu/drm/vc4/vc4_gem.c ++++ b/drivers/gpu/drm/vc4/vc4_gem.c +@@ -471,6 +471,11 @@ vc4_update_bo_seqnos(struct vc4_exec_info *exec, uint64_t seqno) + list_for_each_entry(bo, &exec->unref_list, unref_head) { + bo->seqno = seqno; + } ++ ++ for (i = 0; i < exec->rcl_write_bo_count; i++) { ++ bo = to_vc4_bo(&exec->rcl_write_bo[i]->base); ++ bo->write_seqno = seqno; ++ } + } + + /* Queues a struct vc4_exec_info for execution. If no job is +@@ -673,6 +678,14 @@ vc4_get_bcl(struct drm_device *dev, struct vc4_exec_info *exec) + goto fail; + + ret = vc4_validate_shader_recs(dev, exec); ++ if (ret) ++ goto fail; ++ ++ /* Block waiting on any previous rendering into the CS's VBO, ++ * IB, or textures, so that pixels are actually written by the ++ * time we try to read them. ++ */ ++ ret = vc4_wait_for_seqno(dev, exec->bin_dep_seqno, ~0ull, true); + + fail: + drm_free_large(temp); +diff --git a/drivers/gpu/drm/vc4/vc4_render_cl.c b/drivers/gpu/drm/vc4/vc4_render_cl.c +index 0f12418..08886a3 100644 +--- a/drivers/gpu/drm/vc4/vc4_render_cl.c ++++ b/drivers/gpu/drm/vc4/vc4_render_cl.c +@@ -45,6 +45,8 @@ struct vc4_rcl_setup { + + struct drm_gem_cma_object *rcl; + u32 next_offset; ++ ++ u32 next_write_bo_index; + }; + + static inline void rcl_u8(struct vc4_rcl_setup *setup, u8 val) +@@ -407,6 +409,8 @@ static int vc4_rcl_msaa_surface_setup(struct vc4_exec_info *exec, + if (!*obj) + return -EINVAL; + ++ exec->rcl_write_bo[exec->rcl_write_bo_count++] = *obj; ++ + if (surf->offset & 0xf) { + DRM_ERROR("MSAA write must be 16b aligned.\n"); + return -EINVAL; +@@ -417,7 +421,8 @@ static int vc4_rcl_msaa_surface_setup(struct vc4_exec_info *exec, + + static int vc4_rcl_surface_setup(struct vc4_exec_info *exec, + struct drm_gem_cma_object **obj, +- struct drm_vc4_submit_rcl_surface *surf) ++ struct drm_vc4_submit_rcl_surface *surf, ++ bool is_write) + { + uint8_t tiling = VC4_GET_FIELD(surf->bits, + VC4_LOADSTORE_TILE_BUFFER_TILING); +@@ -440,6 +445,9 @@ static int vc4_rcl_surface_setup(struct vc4_exec_info *exec, + if (!*obj) + return -EINVAL; + ++ if (is_write) ++ exec->rcl_write_bo[exec->rcl_write_bo_count++] = *obj; ++ + if (surf->flags & VC4_SUBMIT_RCL_SURFACE_READ_IS_FULL_RES) { + if (surf == &exec->args->zs_write) { + DRM_ERROR("general zs write may not be a full-res.\n"); +@@ -542,6 +550,8 @@ vc4_rcl_render_config_surface_setup(struct vc4_exec_info *exec, + if (!*obj) + return -EINVAL; + ++ exec->rcl_write_bo[exec->rcl_write_bo_count++] = *obj; ++ + if (tiling > VC4_TILING_FORMAT_LT) { + DRM_ERROR("Bad tiling format\n"); + return -EINVAL; +@@ -599,15 +609,18 @@ int vc4_get_rcl(struct drm_device *dev, struct vc4_exec_info *exec) + if (ret) + return ret; + +- ret = vc4_rcl_surface_setup(exec, &setup.color_read, &args->color_read); ++ ret = vc4_rcl_surface_setup(exec, &setup.color_read, &args->color_read, ++ false); + if (ret) + return ret; + +- ret = vc4_rcl_surface_setup(exec, &setup.zs_read, &args->zs_read); ++ ret = vc4_rcl_surface_setup(exec, &setup.zs_read, &args->zs_read, ++ false); + if (ret) + return ret; + +- ret = vc4_rcl_surface_setup(exec, &setup.zs_write, &args->zs_write); ++ ret = vc4_rcl_surface_setup(exec, &setup.zs_write, &args->zs_write, ++ true); + if (ret) + return ret; + +diff --git a/drivers/gpu/drm/vc4/vc4_validate.c b/drivers/gpu/drm/vc4/vc4_validate.c +index 9ce1d0a..26503e3 100644 +--- a/drivers/gpu/drm/vc4/vc4_validate.c ++++ b/drivers/gpu/drm/vc4/vc4_validate.c +@@ -267,6 +267,9 @@ validate_indexed_prim_list(VALIDATE_ARGS) + if (!ib) + return -EINVAL; + ++ exec->bin_dep_seqno = max(exec->bin_dep_seqno, ++ to_vc4_bo(&ib->base)->write_seqno); ++ + if (offset > ib->base.size || + (ib->base.size - offset) / index_size < length) { + DRM_ERROR("IB access overflow (%d + %d*%d > %zd)\n", +@@ -555,8 +558,7 @@ static bool + reloc_tex(struct vc4_exec_info *exec, + void *uniform_data_u, + struct vc4_texture_sample_info *sample, +- uint32_t texture_handle_index) +- ++ uint32_t texture_handle_index, bool is_cs) + { + struct drm_gem_cma_object *tex; + uint32_t p0 = *(uint32_t *)(uniform_data_u + sample->p_offset[0]); +@@ -714,6 +716,11 @@ reloc_tex(struct vc4_exec_info *exec, + + *validated_p0 = tex->paddr + p0; + ++ if (is_cs) { ++ exec->bin_dep_seqno = max(exec->bin_dep_seqno, ++ to_vc4_bo(&tex->base)->write_seqno); ++ } ++ + return true; + fail: + DRM_INFO("Texture p0 at %d: 0x%08x\n", sample->p_offset[0], p0); +@@ -835,7 +842,8 @@ validate_gl_shader_rec(struct drm_device *dev, + if (!reloc_tex(exec, + uniform_data_u, + &validated_shader->texture_samples[tex], +- texture_handles_u[tex])) { ++ texture_handles_u[tex], ++ i == 2)) { + return -EINVAL; + } + } +@@ -867,6 +875,9 @@ validate_gl_shader_rec(struct drm_device *dev, + uint32_t stride = *(uint8_t *)(pkt_u + o + 5); + uint32_t max_index; + ++ exec->bin_dep_seqno = max(exec->bin_dep_seqno, ++ to_vc4_bo(&vbo->base)->write_seqno); ++ + if (state->addr & 0x8) + stride |= (*(uint32_t *)(pkt_u + 100 + i * 4)) & ~0xff; + +-- +2.9.3 + +From f379f5432e4b74e3d1d894ce2fefbe1b8a3c24fd Mon Sep 17 00:00:00 2001 +From: Eric Anholt +Date: Wed, 28 Sep 2016 19:20:44 -0700 +Subject: [PATCH 4/4] drm/vc4: Increase timeout for HDMI_SCHEDULER_CONTROL + changes. + +Fixes occasional debug spew at boot when connected directly through +HDMI, and probably confusing the HDMI state machine when we go trying +to poke registers for the enable sequence too soon. + +Signed-off-by: Eric Anholt +--- + drivers/gpu/drm/vc4/vc4_hdmi.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c +index 5df4e74..9a6883d 100644 +--- a/drivers/gpu/drm/vc4/vc4_hdmi.c ++++ b/drivers/gpu/drm/vc4/vc4_hdmi.c +@@ -399,7 +399,7 @@ static void vc4_hdmi_encoder_enable(struct drm_encoder *encoder) + VC4_HDMI_SCHEDULER_CONTROL_MODE_HDMI); + + ret = wait_for(HDMI_READ(VC4_HDMI_SCHEDULER_CONTROL) & +- VC4_HDMI_SCHEDULER_CONTROL_HDMI_ACTIVE, 1); ++ VC4_HDMI_SCHEDULER_CONTROL_HDMI_ACTIVE, 1000); + WARN_ONCE(ret, "Timeout waiting for " + "VC4_HDMI_SCHEDULER_CONTROL_HDMI_ACTIVE\n"); + } else { +@@ -411,7 +411,7 @@ static void vc4_hdmi_encoder_enable(struct drm_encoder *encoder) + ~VC4_HDMI_SCHEDULER_CONTROL_MODE_HDMI); + + ret = wait_for(!(HDMI_READ(VC4_HDMI_SCHEDULER_CONTROL) & +- VC4_HDMI_SCHEDULER_CONTROL_HDMI_ACTIVE), 1); ++ VC4_HDMI_SCHEDULER_CONTROL_HDMI_ACTIVE), 1000); + WARN_ONCE(ret, "Timeout waiting for " + "!VC4_HDMI_SCHEDULER_CONTROL_HDMI_ACTIVE\n"); + } +-- +2.9.3 + +From bd712d14886c37eb804036b2ac3036df79d33476 Mon Sep 17 00:00:00 2001 +From: Eric Anholt +Date: Thu, 29 Sep 2016 15:34:43 -0700 +Subject: [PATCH] drm/vc4: Set up the AVI and SPD infoframes. + +Fixes a purple bar on the left side of the screen with my Dell +2408WFP. It will also be required for supporting the double-clocked +video modes. + +Signed-off-by: Eric Anholt +--- + drivers/gpu/drm/vc4/vc4_hdmi.c | 136 +++++++++++++++++++++++++++++++++++++++-- + drivers/gpu/drm/vc4/vc4_regs.h | 5 ++ + 2 files changed, 136 insertions(+), 5 deletions(-) + +diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c +index 9a6883d..f722334 100644 +--- a/drivers/gpu/drm/vc4/vc4_hdmi.c ++++ b/drivers/gpu/drm/vc4/vc4_hdmi.c +@@ -62,6 +62,8 @@ struct vc4_hdmi { + struct vc4_hdmi_encoder { + struct vc4_encoder base; + bool hdmi_monitor; ++ bool limited_rgb_range; ++ bool rgb_range_selectable; + }; + + static inline struct vc4_hdmi_encoder * +@@ -205,6 +207,12 @@ static int vc4_hdmi_connector_get_modes(struct drm_connector *connector) + return -ENODEV; + + vc4_encoder->hdmi_monitor = drm_detect_hdmi_monitor(edid); ++ ++ if (edid && edid->input & DRM_EDID_INPUT_DIGITAL) { ++ vc4_encoder->rgb_range_selectable = ++ drm_rgb_quant_range_selectable(edid); ++ } ++ + drm_mode_connector_update_edid_property(connector, edid); + ret = drm_add_edid_modes(connector, edid); + +@@ -272,6 +280,117 @@ static const struct drm_encoder_funcs vc4_hdmi_encoder_funcs = { + .destroy = vc4_hdmi_encoder_destroy, + }; + ++static int vc4_hdmi_stop_packet(struct drm_encoder *encoder, ++ enum hdmi_infoframe_type type) ++{ ++ struct drm_device *dev = encoder->dev; ++ struct vc4_dev *vc4 = to_vc4_dev(dev); ++ u32 packet_id = type - 0x80; ++ ++ HDMI_WRITE(VC4_HDMI_RAM_PACKET_CONFIG, ++ HDMI_READ(VC4_HDMI_RAM_PACKET_CONFIG) & ~BIT(packet_id)); ++ ++ return wait_for(!(HDMI_READ(VC4_HDMI_RAM_PACKET_STATUS) & ++ BIT(packet_id)), 100); ++} ++ ++static void vc4_hdmi_write_infoframe(struct drm_encoder *encoder, ++ union hdmi_infoframe *frame) ++{ ++ struct drm_device *dev = encoder->dev; ++ struct vc4_dev *vc4 = to_vc4_dev(dev); ++ u32 packet_id = frame->any.type - 0x80; ++ u32 packet_reg = VC4_HDMI_GCP_0 + VC4_HDMI_PACKET_STRIDE * packet_id; ++ uint8_t buffer[VC4_HDMI_PACKET_STRIDE]; ++ ssize_t len, i; ++ int ret; ++ ++ WARN_ONCE(!(HDMI_READ(VC4_HDMI_RAM_PACKET_CONFIG) & ++ VC4_HDMI_RAM_PACKET_ENABLE), ++ "Packet RAM has to be on to store the packet."); ++ ++ len = hdmi_infoframe_pack(frame, buffer, sizeof(buffer)); ++ if (len < 0) ++ return; ++ ++ ret = vc4_hdmi_stop_packet(encoder, frame->any.type); ++ if (ret) { ++ DRM_ERROR("Failed to wait for infoframe to go idle: %d\n", ret); ++ return; ++ } ++ ++ for (i = 0; i < len; i += 7) { ++ HDMI_WRITE(packet_reg, ++ buffer[i + 0] << 0 | ++ buffer[i + 1] << 8 | ++ buffer[i + 2] << 16); ++ packet_reg += 4; ++ ++ HDMI_WRITE(packet_reg, ++ buffer[i + 3] << 0 | ++ buffer[i + 4] << 8 | ++ buffer[i + 5] << 16 | ++ buffer[i + 6] << 24); ++ packet_reg += 4; ++ } ++ ++ HDMI_WRITE(VC4_HDMI_RAM_PACKET_CONFIG, ++ HDMI_READ(VC4_HDMI_RAM_PACKET_CONFIG) | BIT(packet_id)); ++ ret = wait_for((HDMI_READ(VC4_HDMI_RAM_PACKET_STATUS) & ++ BIT(packet_id)), 100); ++ if (ret) ++ DRM_ERROR("Failed to wait for infoframe to start: %d\n", ret); ++} ++ ++static void vc4_hdmi_set_avi_infoframe(struct drm_encoder *encoder) ++{ ++ struct vc4_hdmi_encoder *vc4_encoder = to_vc4_hdmi_encoder(encoder); ++ struct drm_crtc *crtc = encoder->crtc; ++ const struct drm_display_mode *mode = &crtc->state->adjusted_mode; ++ union hdmi_infoframe frame; ++ int ret; ++ ++ ret = drm_hdmi_avi_infoframe_from_display_mode(&frame.avi, mode); ++ if (ret < 0) { ++ DRM_ERROR("couldn't fill AVI infoframe\n"); ++ return; ++ } ++ ++ if (vc4_encoder->rgb_range_selectable) { ++ if (vc4_encoder->limited_rgb_range) { ++ frame.avi.quantization_range = ++ HDMI_QUANTIZATION_RANGE_LIMITED; ++ } else { ++ frame.avi.quantization_range = ++ HDMI_QUANTIZATION_RANGE_FULL; ++ } ++ } ++ ++ vc4_hdmi_write_infoframe(encoder, &frame); ++} ++ ++static void vc4_hdmi_set_spd_infoframe(struct drm_encoder *encoder) ++{ ++ union hdmi_infoframe frame; ++ int ret; ++ ++ ret = hdmi_spd_infoframe_init(&frame.spd, "Broadcom", "Videocore"); ++ if (ret < 0) { ++ DRM_ERROR("couldn't fill SPD infoframe\n"); ++ return; ++ } ++ ++ frame.spd.sdi = HDMI_SPD_SDI_PC; ++ ++ vc4_hdmi_write_infoframe(encoder, &frame); ++} ++ ++static void vc4_hdmi_set_infoframes(struct drm_encoder *encoder) ++{ ++ vc4_hdmi_set_avi_infoframe(encoder); ++ vc4_hdmi_set_spd_infoframe(encoder); ++} ++ + static void vc4_hdmi_encoder_mode_set(struct drm_encoder *encoder, + struct drm_display_mode *unadjusted_mode, + struct drm_display_mode *mode) +@@ -336,8 +455,9 @@ static void vc4_hdmi_encoder_mode_set(struct drm_encoder *encoder, + + if (vc4_encoder->hdmi_monitor && drm_match_cea_mode(mode) > 1) { + /* CEA VICs other than #1 requre limited range RGB +- * output. Apply a colorspace conversion to squash +- * 0-255 down to 16-235. The matrix here is: ++ * output unless overridden by an AVI infoframe. ++ * Apply a colorspace conversion to squash 0-255 down ++ * to 16-235. The matrix here is: + * + * [ 0 0 0.8594 16] + * [ 0 0.8594 0 16] +@@ -355,6 +475,9 @@ static void vc4_hdmi_encoder_mode_set(struct drm_encoder *encoder, + HD_WRITE(VC4_HD_CSC_24_23, (0x100 << 16) | 0x000); + HD_WRITE(VC4_HD_CSC_32_31, (0x000 << 16) | 0x6e0); + HD_WRITE(VC4_HD_CSC_34_33, (0x100 << 16) | 0x000); ++ vc4_encoder->limited_rgb_range = true; ++ } else { ++ vc4_encoder->limited_rgb_range = false; + } + + /* The RGB order applies even when CSC is disabled. */ +@@ -373,6 +496,8 @@ static void vc4_hdmi_encoder_disable(struct drm_encoder *encoder) + struct drm_device *dev = encoder->dev; + struct vc4_dev *vc4 = to_vc4_dev(dev); + ++ HDMI_WRITE(VC4_HDMI_RAM_PACKET_CONFIG, 0); ++ + HDMI_WRITE(VC4_HDMI_TX_PHY_RESET_CTL, 0xf << 16); + HD_WRITE(VC4_HD_VID_CTL, + HD_READ(VC4_HD_VID_CTL) & ~VC4_HD_VID_CTL_ENABLE); +@@ -425,9 +550,10 @@ static void vc4_hdmi_encoder_enable(struct drm_encoder *encoder) + HDMI_READ(VC4_HDMI_SCHEDULER_CONTROL) | + VC4_HDMI_SCHEDULER_CONTROL_VERT_ALWAYS_KEEPOUT); + +- /* XXX: Set HDMI_RAM_PACKET_CONFIG (1 << 16) and set +- * up the infoframe. +- */ ++ HDMI_WRITE(VC4_HDMI_RAM_PACKET_CONFIG, ++ VC4_HDMI_RAM_PACKET_ENABLE); ++ ++ vc4_hdmi_set_infoframes(encoder); + + drift = HDMI_READ(VC4_HDMI_FIFO_CTL); + drift &= VC4_HDMI_FIFO_VALID_WRITE_MASK; +diff --git a/drivers/gpu/drm/vc4/vc4_regs.h b/drivers/gpu/drm/vc4/vc4_regs.h +index 9ecd6ff..a4b5370 100644 +--- a/drivers/gpu/drm/vc4/vc4_regs.h ++++ b/drivers/gpu/drm/vc4/vc4_regs.h +@@ -438,6 +438,8 @@ + #define VC4_HDMI_RAM_PACKET_CONFIG 0x0a0 + # define VC4_HDMI_RAM_PACKET_ENABLE BIT(16) + ++#define VC4_HDMI_RAM_PACKET_STATUS 0x0a4 ++ + #define VC4_HDMI_HORZA 0x0c4 + # define VC4_HDMI_HORZA_VPOS BIT(14) + # define VC4_HDMI_HORZA_HPOS BIT(13) +@@ -499,6 +501,9 @@ + + #define VC4_HDMI_TX_PHY_RESET_CTL 0x2c0 + ++#define VC4_HDMI_GCP_0 0x400 ++#define VC4_HDMI_PACKET_STRIDE 0x24 ++ + #define VC4_HD_M_CTL 0x00c + # define VC4_HD_M_REGISTER_FILE_STANDBY (3 << 6) + # define VC4_HD_M_RAM_STANDBY (3 << 4) +-- +2.9.3 + diff --git a/config-arm-generic b/config-arm-generic index f8d6052d6..7a88c2d02 100644 --- a/config-arm-generic +++ b/config-arm-generic @@ -19,8 +19,14 @@ CONFIG_CC_STACKPROTECTOR=y # CONFIG_CPU_BIG_ENDIAN is not set # CONFIG_BIG_LITTLE is not set +# CONFIG_ARM_BIG_LITTLE_CPUIDLE is not set # CONFIG_IWMMXT is not set +# https://fedoraproject.org/wiki/Features/Checkpoint_Restore +CONFIG_CHECKPOINT_RESTORE=y + +CONFIG_ARM_CPUIDLE=y + CONFIG_RESET_CONTROLLER=y CONFIG_RESET_GPIO=y @@ -31,7 +37,6 @@ CONFIG_INPUT_PWM_BEEPER=m CONFIG_ARM_SP805_WATCHDOG=m CONFIG_ARM_ARCH_TIMER=y CONFIG_ARM_ARCH_TIMER_EVTSTREAM=y -CONFIG_NR_CPUS=8 CONFIG_SWIOTLB=y CONFIG_DMA_VIRTUAL_CHANNELS=y @@ -70,6 +75,7 @@ CONFIG_GPIO_PL061=y CONFIG_USB_ISP1760=m CONFIG_ARM_PL172_MPMC=m CONFIG_DRM_HDLCD=m +CONFIG_DRM_MALI_DISPLAY=m # CONFIG_DRM_HDLCD_SHOW_UNDERRUN is not set # HW crypto and rng @@ -112,6 +118,51 @@ CONFIG_CLKSRC_VERSATILE=y CONFIG_POWER_RESET_VERSATILE=y # CONFIG_ARM_CHARLCD is not set +# Broadcom +CONFIG_ARCH_BCM=y +CONFIG_ARCH_BCM2835=y +# CONFIG_ARCH_BCM_CYGNUS is not set +# CONFIG_ARCH_BCM_NSP is not set +# CONFIG_ARCH_BCM_5301X is not set +# CONFIG_ARCH_BCM_281XX is not set +# CONFIG_ARCH_BCM_21664 is not set +# CONFIG_ARCH_BCM_63XX is not set +# CONFIG_ARCH_BRCMSTB is not set +# CONFIG_ARCH_BERLIN is not set +# CONFIG_ARCH_BCM_CYGNUS is not set +# CONFIG_ARCH_BCM_NSP is not set +# CONFIG_ARCH_BCM_5301X is not set +# CONFIG_ARCH_BCM_281XX is not set +# CONFIG_ARCH_BCM_21664 is not set +# CONFIG_ARCH_BCM_63XX is not set +# CONFIG_ARCH_BCM_23550 is not set +# CONFIG_ARCH_BRCMSTB is not set +# CONFIG_ARCH_BERLIN is not set +# BCM 283x +CONFIG_SERIAL_8250_BCM2835AUX=y +CONFIG_DMA_BCM2835=m +CONFIG_MMC_SDHCI_IPROC=m +CONFIG_MMC_BCM2835_SDHOST=m +CONFIG_BCM2835_MBOX=y +CONFIG_PWM_BCM2835=m +CONFIG_HW_RANDOM_BCM2835=m +CONFIG_I2C_BCM2835=m +CONFIG_SPI_BCM2835=m +CONFIG_SPI_BCM2835AUX=m +CONFIG_BCM2835_WDT=m +CONFIG_SND_BCM2835_SOC_I2S=m +CONFIG_DRM_VC4=m +CONFIG_RASPBERRYPI_FIRMWARE=y +CONFIG_RASPBERRYPI_POWER=y +# popular digital audio HATs +CONFIG_SND_SOC_PCM512x=m +CONFIG_SND_SOC_PCM512x_I2C=m +CONFIG_SND_SOC_PCM512x_SPI=m +CONFIG_SND_SOC_TPA6130A2=m +CONFIG_SND_SOC_WM8804=m +CONFIG_SND_SOC_WM8804_I2C=m +CONFIG_SND_SOC_WM8804_SPI=m + # Marvell EBU CONFIG_ARCH_MVEBU=y CONFIG_SERIAL_MVEBU_UART=y @@ -146,6 +197,7 @@ CONFIG_PHY_MVEBU_SATA=y CONFIG_AHCI_MVEBU=m # CONFIG_CACHE_FEROCEON_L2 is not set # CONFIG_CACHE_FEROCEON_L2_WRITETHROUGH is not set +# CONFIG_PCI_AARDVARK is not set # Rockchips CONFIG_ARCH_ROCKCHIP=y @@ -154,7 +206,7 @@ CONFIG_SPI_ROCKCHIP=m CONFIG_PWM_ROCKCHIP=m CONFIG_ROCKCHIP_SARADC=m CONFIG_ROCKCHIP_IODOMAIN=m -CONFIG_MMC_DW_ROCKCHIP=m +CONFIG_MMC_DW_ROCKCHIP=y CONFIG_EMAC_ROCKCHIP=m CONFIG_MFD_RK808=m CONFIG_COMMON_CLK_RK808=m @@ -197,6 +249,7 @@ CONFIG_PCI_TEGRA=y CONFIG_AHCI_TEGRA=m CONFIG_MMC_SDHCI_TEGRA=m CONFIG_TEGRA_WATCHDOG=m +CONFIG_GPIO_TEGRA=y CONFIG_I2C_TEGRA=m CONFIG_SPI_TEGRA114=m CONFIG_PWM_TEGRA=m @@ -253,7 +306,6 @@ CONFIG_CLOCK_THERMAL=y CONFIG_CPUFREQ_DT=m CONFIG_CPUFREQ_DT_PLATDEV=y CONFIG_DEVFREQ_THERMAL=y -# CONFIG_ARM_CPUIDLE is not set # CONFIG_ARM_DT_BL_CPUFREQ is not set # CONFIG_ARM_BIG_LITTLE_CPUFREQ is not set CONFIG_SPMI=m @@ -278,7 +330,6 @@ CONFIG_OF_OVERLAY=y CONFIG_OF_PCI_IRQ=m CONFIG_OF_PCI=m CONFIG_PCI_HOST_GENERIC=y -# CONFIG_PCIE_IPROC is not set CONFIG_OF_RESERVED_MEM=y CONFIG_OF_RESOLVE=y CONFIG_PM_GENERIC_DOMAINS_OF=y @@ -295,6 +346,7 @@ CONFIG_MAILBOX=y CONFIG_ARM_MHU=m # CONFIG_PL320_MBOX is not set CONFIG_ARM_SCPI_PROTOCOL=m +CONFIG_ARM_SCPI_POWER_DOMAIN=m # NVMem CONFIG_NVMEM=m @@ -393,9 +445,9 @@ CONFIG_DRM_PANEL_SAMSUNG_S6E8AA0=m # Designware (used by numerous devices) CONFIG_MMC_DW=m -CONFIG_MMC_DW_PLTFM=m -CONFIG_MMC_DW_K3=m -CONFIG_MMC_DW_PCI=m +CONFIG_MMC_DW_PLTFM=y +CONFIG_MMC_DW_K3=y +CONFIG_MMC_DW_PCI=y CONFIG_SPI_DW_MMIO=m CONFIG_SPI_DW_PCI=m # CONFIG_SPI_DW_MID_DMA is not set @@ -489,6 +541,12 @@ CONFIG_SPI_PL022=m CONFIG_SENSORS_IIO_HWMON=m CONFIG_IIO_SYSFS_TRIGGER=m CONFIG_SENSORS_ARM_SCPI=m +CONFIG_IIO_ST_PRESS=m +CONFIG_IIO_ST_PRESS_I2C=m +CONFIG_IIO_ST_PRESS_SPI=m +CONFIG_TMP006=m +CONFIG_BMP280=m +CONFIG_TCS3472=m # PHY framework CONFIG_GENERIC_PHY=y @@ -504,7 +562,7 @@ CONFIG_CMA=y CONFIG_DMA_CMA=y # CONFIG_CMA_DEBUG is not set CONFIG_CMA_DEBUGFS=y -CONFIG_CMA_SIZE_MBYTES=16 +CONFIG_CMA_SIZE_MBYTES=64 CONFIG_CMA_SIZE_SEL_MBYTES=y # CONFIG_CMA_SIZE_SEL_PERCENTAGE is not set # CONFIG_CMA_SIZE_SEL_MIN is not set @@ -629,23 +687,19 @@ CONFIG_NET_VENDOR_MELLANOX=y # drm # CONFIG_DRM_VMWGFX is not set # CONFIG_IMX_IPUV3_CORE is not set +# CONFIG_FB_DA8XX is not set -# CONFIG_DEBUG_SET_MODULE_RONX is not set # CONFIG_CORESIGHT is not set # CONFIG_LATTICE_ECP3_CONFIG is not set -# CONFIG_BMP085_SPI is not set # CONFIG_TI_DAC7512 is not set -# https://fedoraproject.org/wiki/Features/Checkpoint_Restore -CONFIG_CHECKPOINT_RESTORE=y - # Bad Intel shit we don't care about # CONFIG_PINCTRL_BAYTRAIL is not set # CONFIG_PINCTRL_CHERRYVIEW is not set # CONFIG_PINCTRL_BROXTON is not set # CONFIG_PINCTRL_SUNRISEPOINT is not set +# CONFIG_XILINX_ZYNQMP_DMA is not set -# CONFIG_HW_RANDOM_HISI is not set # CONFIG_HISILICON_IRQ_MBIGEN is not set # CONFIG_QRTR is not set diff --git a/config-arm64 b/config-arm64 index a9a02f81f..0bc9b30bd 100644 --- a/config-arm64 +++ b/config-arm64 @@ -8,6 +8,7 @@ CONFIG_ARCH_SEATTLE=y CONFIG_ARCH_SUNXI=y CONFIG_ARCH_TEGRA=y CONFIG_ARCH_XGENE=y +CONFIG_ARCH_THUNDER=y # CONFIG_ARCH_ALPINE is not set # CONFIG_ARCH_BCM_IPROC is not set # CONFIG_ARCH_BERLIN is not set @@ -18,7 +19,6 @@ CONFIG_ARCH_XGENE=y # CONFIG_ARCH_RENESAS is not set # CONFIG_ARCH_SPRD is not set # CONFIG_ARCH_STRATIX10 is not set -# CONFIG_ARCH_THUNDER is not set # CONFIG_ARCH_VULCAN is not set # CONFIG_ARCH_ZYNQMP is not set # CONFIG_ARCH_UNIPHIER is not set @@ -33,6 +33,7 @@ CONFIG_ARM64_ERRATUM_832075=y CONFIG_ARM64_ERRATUM_843419=y CONFIG_ARM64_ERRATUM_834220=y CONFIG_CAVIUM_ERRATUM_22375=y +CONFIG_CAVIUM_ERRATUM_23144=y CONFIG_CAVIUM_ERRATUM_23154=y CONFIG_CAVIUM_ERRATUM_27456=y @@ -41,6 +42,7 @@ CONFIG_CAVIUM_ERRATUM_27456=y # CONFIG_SERIAL_AMBA_PL010 is not set # CONFIG_AMBA_PL08X is not set CONFIG_ARM_SMMU_V3=y +CONFIG_NR_CPUS=256 CONFIG_ARCH_HAS_HOLES_MEMORYMODEL=y CONFIG_ARCH_REQUIRE_GPIOLIB=y @@ -99,11 +101,23 @@ CONFIG_ACPI_CUSTOM_METHOD=m CONFIG_ACPI_NFIT=m # CONFIG_ACPI_NFIT_DEBUG is not set CONFIG_PCC=y -CONFIG_ACPI_CPPC_CPUFREQ=y +# CONFIG_ACPI_CPPC_CPUFREQ is not set CONFIG_ACPI_PROCESSOR=y CONFIG_ACPI_THERMAL=y CONFIG_I2C_SCMI=m CONFIG_SENSORS_ACPI_POWER=m +CONFIG_ACPI_TABLE_UPGRADE=y +CONFIG_ACPI_CONFIGFS=m + +CONFIG_NUMA=y +CONFIG_ACPI_NUMA=y +CONFIG_NUMA_BALANCING=y +CONFIG_NUMA_BALANCING_DEFAULT_ENABLED=y +CONFIG_NODES_SHIFT=9 + +CONFIG_DMI=y +CONFIG_DMIID=y +CONFIG_DMI_SYSFS=y CONFIG_ARM64_CRYPTO=y CONFIG_CRYPTO_SHA1_ARM64_CE=y @@ -134,6 +148,7 @@ CONFIG_PCI_XGENE=y CONFIG_PCI_XGENE_MSI=y CONFIG_I2C_XGENE_SLIMPRO=m CONFIG_XGENE_SLIMPRO_MBOX=m +CONFIG_MDIO_XGENE=m # AMD Seattle CONFIG_NET_SB1000=y @@ -148,6 +163,7 @@ CONFIG_COMMON_CLK_HI6220=y CONFIG_PCI_HISI=y CONFIG_POWER_RESET_HISI=y CONFIG_HISI_THERMAL=m +CONFIG_HW_RANDOM_HISI=m CONFIG_STUB_CLK_HI6220=y CONFIG_REGULATOR_HI655X=m CONFIG_PHY_HI6220_USB=m @@ -157,14 +173,18 @@ CONFIG_RESET_HISI=y CONFIG_MFD_HI655X_PMIC=m CONFIG_DRM_HISI_KIRIN=m CONFIG_HISI_KIRIN_DW_DSI=m +CONFIG_MDIO_HISI_FEMAC=m +CONFIG_INPUT_HISI_POWERKEY=m # Tegra CONFIG_ARCH_TEGRA_132_SOC=y CONFIG_ARCH_TEGRA_210_SOC=y CONFIG_TEGRA210_ADMA=y CONFIG_MFD_MAX77620=y +CONFIG_PINCTRL_MAX77620=m CONFIG_REGULATOR_MAX77620=m -# CONFIG_GPIO_TEGRA is not set +CONFIG_GPIO_MAX77620=m +CONFIG_TEGRA_ACONNECT=y # AllWinner CONFIG_MACH_SUN50I=y @@ -172,6 +192,7 @@ CONFIG_SUNXI_RSB=m CONFIG_AHCI_SUNXI=m CONFIG_NET_VENDOR_ALLWINNER=y # CONFIG_SUN4I_EMAC is not set +CONFIG_SUN8I_EMAC=m # CONFIG_MDIO_SUN4I is not set # CONFIG_KEYBOARD_SUN4I_LRADC is not set # CONFIG_TOUCHSCREEN_SUN4I is not set @@ -185,6 +206,8 @@ CONFIG_PWM_SUN4I=m # CONFIG_PHY_SUN4I_USB is not set # CONFIG_PHY_SUN9I_USB is not set CONFIG_NVMEM_SUNXI_SID=m +CONFIG_SUNXI_CCU=y +# CONFIG_SUN8I_H3_CCU is not set # qcom # MSM8996 = SD-820, MSM8916 = SD-410 @@ -239,22 +262,28 @@ CONFIG_QCOM_COINCELL=m # CONFIG_PINCTRL_APQ8084 is not set # CONFIG_PINCTRL_MSM8660 is not set # CONFIG_PINCTRL_MSM8960 is not set +# CONFIG_PINCTRL_MDM9615 is not set # CONFIG_PINCTRL_MSM8X74 is not set # CONFIG_PINCTRL_QDF2XXX is not set # CONFIG_INPUT_PM8941_PWRKEY is not set # CONFIG_INPUT_REGULATOR_HAPTIC is not set # CONFIG_CHARGER_MANAGER is not set # CONFIG_SENSORS_LTC2978_REGULATOR is not set +# CONFIG_QCOM_Q6V5_PIL is not set + +# mvebu +# CONFIG_MV_XOR_V2 is not set # ThunderX # CONFIG_MDIO_OCTEON is not set -# CONFIG_MDIO_THUNDER is not set -# CONFIG_PCI_HOST_THUNDER_PEM is not set -# CONFIG_PCI_HOST_THUNDER_ECAM is not set - -CONFIG_DMI=y -CONFIG_DMIID=y -CONFIG_DMI_SYSFS=y +CONFIG_MDIO_THUNDER=m +CONFIG_PCI_HOST_THUNDER_PEM=y +CONFIG_PCI_HOST_THUNDER_ECAM=y +CONFIG_NET_VENDOR_CAVIUM=y +CONFIG_THUNDER_NIC_PF=m +CONFIG_THUNDER_NIC_VF=m +CONFIG_THUNDER_NIC_BGX=m +# CONFIG_LIQUIDIO is not set CONFIG_SATA_AHCI_PLATFORM=y CONFIG_SATA_AHCI_SEATTLE=m @@ -286,7 +315,4 @@ CONFIG_DEBUG_SECTION_MISMATCH=y # CONFIG_FUJITSU_ES is not set # CONFIG_IMX_THERMAL is not set # CONFIG_PNP_DEBUG_MESSAGES is not set - -# Will probably need to be changed later -# CONFIG_NUMA is not set - +# CONFIG_BCM_PDC_MBOX is not set diff --git a/config-armv7 b/config-armv7 index 44685c2fd..0207f9ab9 100644 --- a/config-armv7 +++ b/config-armv7 @@ -9,6 +9,7 @@ CONFIG_ARCH_OMAP4=y CONFIG_ARCH_QCOM=y CONFIG_ARCH_TEGRA=y CONFIG_ARCH_ZYNQ=y +# CONFIG_ARCH_MDM9615 is not set # These are supported in the LPAE kernel # CONFIG_ARM_LPAE is not set @@ -142,9 +143,11 @@ CONFIG_PWM_TIEHRPWM=m CONFIG_PWM_TWL=m CONFIG_PWM_TWL_LED=m CONFIG_PWM_OMAP_DMTIMER=m +# CONFIG_PWM_STMPE is not set CONFIG_CRYPTO_DEV_OMAP_SHAM=m -CONFIG_CRYPTO_DEV_OMAP_AES=m +# Disable for the moment, terribly broken upstream +# CONFIG_CRYPTO_DEV_OMAP_AES is not set CONFIG_CRYPTO_DEV_OMAP_DES=m CONFIG_HW_RANDOM_OMAP=m CONFIG_HW_RANDOM_OMAP3_ROM=m @@ -152,8 +155,20 @@ CONFIG_HW_RANDOM_OMAP3_ROM=m CONFIG_DRM_OMAP=m CONFIG_DRM_OMAP_NUM_CRTCS=2 CONFIG_OMAP2_VRFB=y -# CONFIG_FB_OMAP2 is not set -# CONFIG_FB_DA8XX is not set +CONFIG_DRM_OMAP_ENCODER_OPA362=m +CONFIG_DRM_OMAP_ENCODER_TFP410=m +CONFIG_DRM_OMAP_ENCODER_TPD12S015=m +CONFIG_DRM_OMAP_CONNECTOR_DVI=m +CONFIG_DRM_OMAP_CONNECTOR_HDMI=m +CONFIG_DRM_OMAP_CONNECTOR_ANALOG_TV=m +CONFIG_DRM_OMAP_PANEL_DPI=m +CONFIG_DRM_OMAP_PANEL_DSI_CM=m +CONFIG_DRM_OMAP_PANEL_SONY_ACX565AKM=m +CONFIG_DRM_OMAP_PANEL_LGPHILIPS_LB035Q02=m +CONFIG_DRM_OMAP_PANEL_SHARP_LS037V7DW01=m +CONFIG_DRM_OMAP_PANEL_TPO_TD028TTEC1=m +CONFIG_DRM_OMAP_PANEL_TPO_TD043MTEA1=m +CONFIG_DRM_OMAP_PANEL_NEC_NL8048HL11=m CONFIG_OMAP2_DSS=m # CONFIG_OMAP2_DSS_COLLECT_IRQ_STATS is not set @@ -166,21 +181,6 @@ CONFIG_OMAP2_DSS_DSI=y CONFIG_OMAP2_DSS_MIN_FCK_PER_PCK=0 CONFIG_OMAP2_DSS_SLEEP_AFTER_VENC_RESET=y -CONFIG_DISPLAY_ENCODER_OPA362=m -CONFIG_DISPLAY_ENCODER_TFP410=m -CONFIG_DISPLAY_ENCODER_TPD12S015=m -CONFIG_DISPLAY_CONNECTOR_DVI=m -CONFIG_DISPLAY_CONNECTOR_HDMI=m -CONFIG_DISPLAY_CONNECTOR_ANALOG_TV=m -CONFIG_DISPLAY_PANEL_DPI=m -CONFIG_DISPLAY_PANEL_DSI_CM=m -CONFIG_DISPLAY_PANEL_SONY_ACX565AKM=m -CONFIG_DISPLAY_PANEL_LGPHILIPS_LB035Q02=m -CONFIG_DISPLAY_PANEL_SHARP_LS037V7DW01=m -CONFIG_DISPLAY_PANEL_TPO_TD043MTEA1=m -CONFIG_DISPLAY_PANEL_NEC_NL8048HL11=m -CONFIG_DISPLAY_PANEL_TPO_TD028TTEC1=m - # Enable V4L2 drivers for OMAP2+ CONFIG_V4L_PLATFORM_DRIVERS=y # CONFIG_VIDEO_OMAP2_VOUT is not set @@ -207,12 +207,12 @@ CONFIG_SND_SOC_TLV320AIC23_I2C=m CONFIG_SND_SOC_TLV320AIC23_SPI=m CONFIG_SND_SOC_TLV320AIC3X=m CONFIG_SND_SOC_TLV320AIC31XX=m -CONFIG_SND_SOC_TPA6130A2=m CONFIG_SND_SOC_TWL4030=m CONFIG_SND_SOC_TWL6040=m CONFIG_RADIO_WL128X=m CONFIG_OMAP_REMOTEPROC=m +CONFIG_TI_SYSCON_RESET=m # CONFIG_OMAP2_DSS_DEBUGFS is not set # CONFIG_OMAP_IOMMU_DEBUG is not set @@ -349,6 +349,8 @@ CONFIG_QCOM_SMSM=y CONFIG_QCOM_SMP2P=m CONFIG_PCIE_QCOM=y CONFIG_MTD_NAND_QCOM=m +# CONFIG_QCOM_Q6V5_PIL is not set +# CONFIG_MSM_IOMMU is not set # i.MX # CONFIG_MXC_DEBUG_BOARD is not set @@ -412,6 +414,7 @@ CONFIG_CRYPTO_DEV_FSL_CAAM_INTC_TIME_THLD=8192 CONFIG_CRYPTO_DEV_FSL_CAAM_CRYPTO_API=m CONFIG_CRYPTO_DEV_FSL_CAAM_AHASH_API=m CONFIG_CRYPTO_DEV_FSL_CAAM_RNG_API=m +CONFIG_CRYPTO_DEV_FSL_CAAM_PKC_API=m # CONFIG_CRYPTO_DEV_FSL_CAAM_DEBUG is not set # CONFIG_CRYPTO_DEV_MXS_DCP is not set # CONFIG_CRYPTO_DEV_MXC_SCC is not set @@ -574,7 +577,7 @@ CONFIG_SERIAL_XILINX_PS_UART_CONSOLE=y CONFIG_COMMON_CLK_AXI_CLKGEN=m CONFIG_COMMON_CLK_SI570=m CONFIG_COMMON_CLK_XLNX_CLKWZRD=m -# CONFIG_ARM_ZYNQ_CPUIDLE is not set +CONFIG_ARM_ZYNQ_CPUIDLE=y CONFIG_LATTICE_ECP3_CONFIG=m CONFIG_NET_VENDOR_XILINX=y CONFIG_XILINX_EMACLITE=m diff --git a/config-armv7-generic b/config-armv7-generic index ef8337abc..f36ed38b0 100644 --- a/config-armv7-generic +++ b/config-armv7-generic @@ -35,6 +35,7 @@ CONFIG_IRQ_CROSSBAR=y CONFIG_IOMMU_IO_PGTABLE_LPAE=y CONFIG_CPU_SW_DOMAIN_PAN=y CONFIG_ARM_CPU_SUSPEND=y +CONFIG_NR_CPUS=32 # CONFIG_MCPM is not set # CONFIG_OABI_COMPAT is not set @@ -52,8 +53,6 @@ CONFIG_ARM_CPU_SUSPEND=y # CONFIG_DEBUG_ALIGN_RODATA is not set # Platforms enabled/disabled globally on ARMv7 -CONFIG_ARCH_BCM=y -CONFIG_ARCH_BCM2835=y CONFIG_ARCH_EXYNOS=y CONFIG_ARCH_HIGHBANK=y CONFIG_ARCH_SUNXI=y @@ -61,22 +60,6 @@ CONFIG_ARCH_TEGRA=y CONFIG_ARCH_VEXPRESS_CORTEX_A5_A9_ERRATA=y CONFIG_ARCH_VIRT=y # CONFIG_ARCH_ARTPEC is not set -# CONFIG_ARCH_BCM_CYGNUS is not set -# CONFIG_ARCH_BCM_NSP is not set -# CONFIG_ARCH_BCM_5301X is not set -# CONFIG_ARCH_BCM_281XX is not set -# CONFIG_ARCH_BCM_21664 is not set -# CONFIG_ARCH_BCM_63XX is not set -# CONFIG_ARCH_BRCMSTB is not set -# CONFIG_ARCH_BERLIN is not set -# CONFIG_ARCH_BCM_CYGNUS is not set -# CONFIG_ARCH_BCM_NSP is not set -# CONFIG_ARCH_BCM_5301X is not set -# CONFIG_ARCH_BCM_281XX is not set -# CONFIG_ARCH_BCM_21664 is not set -# CONFIG_ARCH_BCM_63XX is not set -# CONFIG_ARCH_BRCMSTB is not set -# CONFIG_ARCH_BERLIN is not set # CONFIG_ARCH_HI3xxx is not set # CONFIG_ARCH_HISI is not set # CONFIG_ARCH_MEDIATEK is not set @@ -128,9 +111,14 @@ CONFIG_ARM_ERRATA_775420=y CONFIG_PL310_ERRATA_753970=y CONFIG_PL310_ERRATA_769419=y CONFIG_PJ4B_ERRATA_4742=y -# Cortex-A15 -# CONFIG_ARM_ERRATA_798181 is not set -# CONFIG_ARM_ERRATA_773022 is not set +# Cortex-A12/15/17 +CONFIG_ARM_ERRATA_798181=y +CONFIG_ARM_ERRATA_773022=y +CONFIG_ARM_ERRATA_818325_852422=y +CONFIG_ARM_ERRATA_821420=y +CONFIG_ARM_ERRATA_825619=y +CONFIG_ARM_ERRATA_852421=y +CONFIG_ARM_ERRATA_852423=y # generic that deviates from or should be merged into config-generic CONFIG_SMP_ON_UP=y @@ -158,6 +146,17 @@ CONFIG_LSM_MMAP_MIN_ADDR=32768 CONFIG_LBDAF=y +# Little.BIG +CONFIG_BIG_LITTLE=y +CONFIG_BL_SWITCHER=y +CONFIG_ARM_BIG_LITTLE_CPUFREQ=m +CONFIG_ARM_SCPI_CPUFREQ=m +CONFIG_ARCH_VEXPRESS_DCSCB=y +CONFIG_ARCH_VEXPRESS_TC2_PM=y +CONFIG_ARM_VEXPRESS_SPC_CPUFREQ=m +CONFIG_ARM_BIG_LITTLE_CPUIDLE=y +# CONFIG_BL_SWITCHER_DUMMY_IF is not set + # GRR, needed for MFD_AS3722 CONFIG_I2C=y @@ -190,8 +189,9 @@ CONFIG_VFIO_PLATFORM_CALXEDAXGMAC_RESET=m CONFIG_MACH_SUN6I=y CONFIG_MACH_SUN7I=y CONFIG_MACH_SUN8I=y -# CONFIG_MACH_SUN9I is not set -# CONFIG_MACH_SUN50I is not set +CONFIG_MACH_SUN9I=y +CONFIG_SUNXI_CCU=y +CONFIG_SUN8I_H3_CCU=y CONFIG_SUNXI_SRAM=y CONFIG_DMA_SUN4I=m CONFIG_DMA_SUN6I=m @@ -200,7 +200,7 @@ CONFIG_SUNXI_WATCHDOG=m CONFIG_NET_VENDOR_ALLWINNER=y CONFIG_RTC_DRV_SUNXI=m CONFIG_PHY_SUN4I_USB=m -# CONFIG_PHY_SUN9I_USB is not set +CONFIG_PHY_SUN9I_USB=m CONFIG_AHCI_SUNXI=m CONFIG_SPI_SUN4I=m CONFIG_SPI_SUN6I=m @@ -223,6 +223,7 @@ CONFIG_IR_SUNXI=m CONFIG_MDIO_SUN4I=m CONFIG_DWMAC_SUNXI=m CONFIG_SUN4I_EMAC=m +CONFIG_SUN8I_EMAC=m CONFIG_RTC_DRV_SUN6I=m CONFIG_MTD_NAND_SUNXI=m CONFIG_SERIO_SUN4I_PS2=m @@ -233,28 +234,10 @@ CONFIG_USB_MUSB_SUNXI=m CONFIG_CRYPTO_DEV_SUN4I_SS=m CONFIG_SND_SUN4I_CODEC=m CONFIG_SND_SUN4I_SPDIF=m +CONFIG_SND_SUN4I_I2S=m CONFIG_SUNXI_RSB=m CONFIG_NVMEM_SUNXI_SID=m -# BCM 283x -CONFIG_SERIAL_AMBA_PL011=y -CONFIG_SERIAL_AMBA_PL011_CONSOLE=y -CONFIG_SERIAL_8250_BCM2835AUX=y -CONFIG_DMA_BCM2835=m -# CONFIG_MMC_SDHCI_BCM2835 is not set -CONFIG_MMC_SDHCI_IPROC=m -CONFIG_BCM2835_MBOX=y -CONFIG_PWM_BCM2835=m -CONFIG_HW_RANDOM_BCM2835=m -CONFIG_I2C_BCM2835=m -CONFIG_SPI_BCM2835=m -CONFIG_SPI_BCM2835AUX=m -CONFIG_BCM2835_WDT=m -CONFIG_SND_BCM2835_SOC_I2S=m -CONFIG_DRM_VC4=m -CONFIG_RASPBERRYPI_FIRMWARE=y -CONFIG_RASPBERRYPI_POWER=y - # Exynos CONFIG_ARCH_EXYNOS3=y # CONFIG_ARCH_EXYNOS4 is not set @@ -269,7 +252,8 @@ CONFIG_SOC_EXYNOS5800=y CONFIG_SERIAL_SAMSUNG=y CONFIG_SERIAL_SAMSUNG_CONSOLE=y CONFIG_ARM_EXYNOS5440_CPUFREQ=m -# CONFIG_ARM_EXYNOS_CPUIDLE is not set +CONFIG_ARM_EXYNOS_CPUIDLE=y +CONFIG_EXYNOS5420_MCPM=y CONFIG_ARM_EXYNOS5_BUS_DEVFREQ=m # CONFIG_ARM_EXYNOS_BUS_DEVFREQ is not set # CONFIG_EXYNOS5420_MCPM not set @@ -283,7 +267,7 @@ CONFIG_EXYNOS_THERMAL=m CONFIG_EXYNOS_ADC=m CONFIG_MMC_SDHCI_S3C=m CONFIG_MMC_SDHCI_S3C_DMA=y -CONFIG_MMC_DW_EXYNOS=m +CONFIG_MMC_DW_EXYNOS=y # CONFIG_EXYNOS_IOMMU is not set CONFIG_PCI_EXYNOS=y CONFIG_PHY_EXYNOS5_USBDRD=m @@ -347,6 +331,7 @@ CONFIG_SND_SOC_SAMSUNG_SMDK_WM8994=m CONFIG_SND_SOC_SMDK_WM8994_PCM=m CONFIG_SND_SOC_SNOW=m CONFIG_SND_SOC_ODROIDX2=m +CONFIG_EXYNOS_AUDSS_CLK_CON=m # CONFIG_EXYNOS_IOMMU_DEBUG is not set # CONFIG_SAMSUNG_PM_DEBUG is not set # CONFIG_SAMSUNG_PM_CHECK is not set @@ -379,7 +364,6 @@ CONFIG_SND_SOC_TEGRA_RT5677=m CONFIG_AD525X_DPOT=m CONFIG_AD525X_DPOT_I2C=m CONFIG_AD525X_DPOT_SPI=m -# CONFIG_GPIO_TEGRA is not set # Jetson TK1 CONFIG_PINCTRL_AS3722=y @@ -405,7 +389,7 @@ CONFIG_MACH_DOVE=y CONFIG_CACHE_TAUROS2=y CONFIG_PINCTRL_ARMADA_370=y CONFIG_PINCTRL_ARMADA_XP=y -# CONFIG_ARM_MVEBU_V7_CPUIDLE is not set +CONFIG_ARM_MVEBU_V7_CPUIDLE=y CONFIG_PINCTRL_DOVE=y CONFIG_MMC_SDHCI_DOVE=m CONFIG_DOVE_THERMAL=m @@ -420,8 +404,6 @@ CONFIG_RTC_DRV_ARMADA38X=m # CONFIG_CACHE_FEROCEON_L2 is not set # CONFIG_CACHE_FEROCEON_L2_WRITETHROUGH is not set CONFIG_LEDS_NS2=m -CONFIG_SERIAL_MVEBU_UART=y -# CONFIG_SERIAL_MVEBU_CONSOLE is not set # CONFIG_PCIE_ARMADA_8K is not set # DRM panels @@ -475,6 +457,7 @@ CONFIG_MFD_TPS65912_SPI=y # CONFIG_PINCTRL_APQ8084 is not set # CONFIG_PINCTRL_MSM8960 is not set # CONFIG_PINCTRL_MSM8660 is not set +# CONFIG_PINCTRL_MDM9615 is not set # CONFIG_PINCTRL_MSM8996 is not set # GPIO @@ -528,6 +511,7 @@ CONFIG_MTD_NAND_PXA3xx=m CONFIG_MTD_NAND_RICOH=m CONFIG_MTD_NAND_TMIO=m # CONFIG_MTD_NAND_BRCMNAND is not set +# CONFIG_MTD_NAND_MTK is not set # CONFIG_MTD_MT81xx_NOR is not set CONFIG_MTD_SPI_NOR=m # CONFIG_MTD_SPI_NOR_USE_4K_SECTORS is not set @@ -608,11 +592,6 @@ CONFIG_GENERIC_ADC_BATTERY=m CONFIG_BATTERY_SBS=m # Sensors -CONFIG_TMP006=m -CONFIG_BMP085=y -CONFIG_BMP085_I2C=m -CONFIG_BMP085_SPI=m -CONFIG_BMP280=m CONFIG_SENSORS_AD7314=m CONFIG_SENSORS_ADCXX=m CONFIG_SENSORS_ADS7871=m @@ -704,6 +683,7 @@ CONFIG_I2C_CROS_EC_TUNNEL=m CONFIG_SND_SOC_TS3A227E=m CONFIG_CROS_EC_CHARDEV=m CONFIG_CROS_EC_PROTO=y +CONFIG_PWM_CROS_EC=m # This newly introduced mess needs to be fixed upstream :-( CONFIG_STMMAC_PLATFORM=m @@ -721,6 +701,7 @@ CONFIG_R8188EU=m # CONFIG_CAN_TI_HECC is not set # CONFIG_CAN_FLEXCAN is not set # CONFIG_CAN_RCAR is not set +# CONFIG_CAN_RCAR_CANFD is not set # Needs work/investigation # CONFIG_ARM_KPROBES_TEST is not set @@ -745,6 +726,7 @@ CONFIG_R8188EU=m # CONFIG_DM9000 is not set # CONFIG_MTD_AFS_PARTS is not set # CONFIG_SPI_PXA2XX is not set +# CONFIG_SPI_CADENCE_QUADSPI is not set # CONFIG_DEPRECATED_PARAM_STRUCT is not set # CONFIG_LATTICE_ECP3_CONFIG is not set # CONFIG_SERIAL_8250_EM is not set diff --git a/config-armv7-lpae b/config-armv7-lpae index 178d36e8f..fb7177b85 100644 --- a/config-armv7-lpae +++ b/config-armv7-lpae @@ -18,24 +18,6 @@ CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE=y CONFIG_ARM_VIRT_EXT=y CONFIG_ARM_DMA_IOMMU_ALIGNMENT=8 -CONFIG_CMA_SIZE_SEL_MBYTES=y -CONFIG_CMA_SIZE_MBYTES=64 - -# Cortex-A15 -CONFIG_ARM_ERRATA_798181=y -CONFIG_ARM_ERRATA_773022=y - -# Little.BIG -CONFIG_BIG_LITTLE=y -CONFIG_BL_SWITCHER=y -CONFIG_EXYNOS5420_MCPM=y -CONFIG_ARCH_VEXPRESS_DCSCB=y -CONFIG_ARCH_VEXPRESS_TC2_PM=y -CONFIG_ARM_BIG_LITTLE_CPUFREQ=m -CONFIG_ARM_SCPI_CPUFREQ=m -CONFIG_ARM_VEXPRESS_SPC_CPUFREQ=m -# CONFIG_BL_SWITCHER_DUMMY_IF is not set - CONFIG_KVM=y CONFIG_KVM_ARM_HOST=y CONFIG_KVM_NEW_VGIC=y diff --git a/config-generic b/config-generic index 8c2260862..744489577 100644 --- a/config-generic +++ b/config-generic @@ -9,6 +9,7 @@ CONFIG_HOTPLUG_CPU=y CONFIG_LOCALVERSION="" CONFIG_CROSS_COMPILE="" CONFIG_DEFAULT_HOSTNAME="(none)" +# CONFIG_GCC_PLUGINS is not set # # Code maturity level options @@ -33,6 +34,7 @@ CONFIG_KERNEL_GZIP=y # CONFIG_KERNEL_LZMA is not set CONFIG_SWAP=y CONFIG_SYSVIPC=y +CONFIG_IRQ_TIME_ACCOUNTING=y CONFIG_BSD_PROCESS_ACCT=y CONFIG_BSD_PROCESS_ACCT_V3=y # CONFIG_COMPILE_TEST is not set @@ -74,6 +76,7 @@ CONFIG_PREEMPT_VOLUNTARY=y # CONFIG_PREEMPT is not set CONFIG_SLUB=y +CONFIG_SLAB_FREELIST_RANDOM=y CONFIG_SLUB_CPU_PARTIAL=y # CONFIG_SLUB_STATS is not set # CONFIG_SLUB_DEBUG_ON is not set @@ -111,7 +114,7 @@ CONFIG_HOTPLUG_PCI=y # CONFIG_HOTPLUG_PCI_SHPC is not set CONFIG_HOTPLUG_PCI_PCIE=y # CONFIG_PCIE_DW_PLAT is not set -CONFIG_PCIE_DPC=m +CONFIG_PCIE_DPC=y # CONFIG_SGI_IOC4 is not set @@ -196,6 +199,7 @@ CONFIG_INFINIBAND_OCRDMA=m CONFIG_INFINIBAND_USNIC=m CONFIG_INFINIBAND_RDMAVT=m +CONFIG_RDMA_RXE=m # # Executable file formats @@ -217,6 +221,7 @@ CONFIG_BINFMT_MISC=m # CONFIG_COMMON_CLK_CDCE925 is not set # CONFIG_COMMON_CLK_OXNAS is not set # CONFIG_COMMON_CLK_HI3519 is not set +# CONFIG_SUNXI_CCU is not set # # Generic Driver Options @@ -228,7 +233,6 @@ CONFIG_EXTRA_FIRMWARE="" CONFIG_FW_CFG_SYSFS=m # CONFIG_FW_CFG_SYSFS_CMDLINE is not set - # Give this a try in rawhide for now # CONFIG_FW_LOADER_USER_HELPER is not set # CONFIG_FW_LOADER_USER_HELPER_FALLBACK is not set @@ -426,11 +430,13 @@ CONFIG_VIRTIO_INPUT=m CONFIG_VIRTIO_MMIO=m # CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES is not set CONFIG_VIRTIO_NET=m +CONFIG_VIRTIO_VSOCKETS=m CONFIG_HW_RANDOM_VIRTIO=m CONFIG_VIRTIO_CONSOLE=m CONFIG_VHOST_NET=m CONFIG_VHOST_SCSI=m # CONFIG_VHOST_CROSS_ENDIAN_LEGACY is not set +CONFIG_VHOST_VSOCK=m # # SCSI device support @@ -524,6 +530,8 @@ CONFIG_SCSI_UFSHCD=m CONFIG_SCSI_UFSHCD_PCI=m # CONFIG_SCSI_UFSHCD_PLATFORM is not set +# CONFIG_SCSI_UFS_DWC_TC_PCI is not set + CONFIG_SCSI_MVUMI=m CONFIG_SCSI_OSD_INITIATOR=m @@ -736,6 +744,14 @@ CONFIG_FUSION_LAN=m CONFIG_FUSION_SAS=m CONFIG_FUSION_LOGGING=y +# +# NVME support +# +CONFIG_NVME_RDMA=m +CONFIG_NVME_TARGET=m +CONFIG_NVME_TARGET_LOOP=m +CONFIG_NVME_TARGET_RDMA=m + # # IEEE 1394 (FireWire) support (JUJU alternative stack) # @@ -778,6 +794,7 @@ CONFIG_TCP_CONG_CDG=m CONFIG_TCP_CONG_LP=m CONFIG_TCP_CONG_SCALABLE=m CONFIG_TCP_CONG_VEGAS=m +CONFIG_TCP_CONG_NV=m CONFIG_TCP_CONG_VENO=m CONFIG_TCP_CONG_WESTWOOD=m CONFIG_TCP_CONG_YEAH=m @@ -1250,6 +1267,7 @@ CONFIG_NET_CLS_FLOWER=m CONFIG_NET_CLS_FLOW=m CONFIG_NET_CLS_FW=m CONFIG_NET_CLS_IND=y +CONFIG_NET_CLS_MATCHALL=m CONFIG_NET_CLS_ROUTE4=m CONFIG_NET_CLS_ROUTE=y CONFIG_NET_CLS_RSVP=m @@ -1607,7 +1625,6 @@ CONFIG_NET_VENDOR_SIS=y CONFIG_SIS900=m CONFIG_SIS190=m - CONFIG_NET_VENDOR_SMSC=y CONFIG_PCMCIA_SMC91C92=m CONFIG_EPIC100=m @@ -1664,6 +1681,8 @@ CONFIG_NATIONAL_PHY=m CONFIG_ICPLUS_PHY=m CONFIG_BCM63XX_PHY=m CONFIG_BCM7XXX_PHY=m +CONFIG_INTEL_XWAY_PHY=m +# CONFIG_MDIO_HISI_FEMAC is not set CONFIG_LSI_ET1011C_PHY=m CONFIG_LXT_PHY=m CONFIG_MARVELL_PHY=m @@ -1708,7 +1727,6 @@ CONFIG_JME=m # Ethernet (10000 Mbit) # CONFIG_NET_VENDOR_AURORA is not set -# CONFIG_MLX4_CORE=m CONFIG_MLX4_EN=m CONFIG_MLX4_EN_DCB=y @@ -1751,7 +1769,6 @@ CONFIG_SLIP_SMART=y # # Wireless LAN # -# CONFIG_WLAN=y # CONFIG_STRIP is not set # CONFIG_PCMCIA_RAYCS is not set @@ -2007,6 +2024,7 @@ CONFIG_MPLS_ROUTING=m CONFIG_MPLS_IPTUNNEL=m CONFIG_NET_SWITCHDEV=y +CONFIG_NET_NCSI=y CONFIG_6LOWPAN=m CONFIG_6LOWPAN_NHC=m @@ -2200,8 +2218,6 @@ CONFIG_BT_HIDP=m # Bluetooth device drivers # CONFIG_BT_HCIBTUSB=m -# Disable the BT_HCIUSB driver. -# It sucks more power than BT_HCIBTUSB which has the same functionality. CONFIG_BT_HCIBTUSB_BCM=y CONFIG_BT_HCIBTUSB_RTL=y CONFIG_BT_HCIUART=m @@ -2241,20 +2257,19 @@ CONFIG_MISDN_SPEEDFAX=m CONFIG_MISDN_INFINEON=m CONFIG_MISDN_W6692=m CONFIG_MISDN_NETJET=m +CONFIG_MISDN_HFCUSB=m +CONFIG_MISDN_HFCPCI=m +CONFIG_MISDN_HFCMULTI=m # # mISDN hardware drivers # -CONFIG_MISDN_HFCPCI=m -CONFIG_MISDN_HFCMULTI=m CONFIG_ISDN_I4L=m CONFIG_ISDN_DRV_AVMB1_B1PCI=m CONFIG_ISDN_DRV_AVMB1_B1PCMCIA=m CONFIG_ISDN_DRV_AVMB1_T1PCI=m CONFIG_ISDN_DRV_AVMB1_C4=m -CONFIG_MISDN_HFCUSB=m - CONFIG_ISDN_PPP=y CONFIG_ISDN_PPP_VJ=y CONFIG_ISDN_MPP=y @@ -2379,6 +2394,7 @@ CONFIG_TABLET_USB_AIPTEK=m CONFIG_TABLET_USB_GTCO=m CONFIG_TABLET_USB_HANWANG=m CONFIG_TABLET_USB_KBTAB=m +CONFIG_TABLET_USB_PEGASUS=m CONFIG_TABLET_SERIAL_WACOM4=m CONFIG_INPUT_POWERMATE=m @@ -2387,6 +2403,7 @@ CONFIG_INPUT_CM109=m CONFIG_INPUT_POLLDEV=m CONFIG_INPUT_SPARSEKMAP=m # CONFIG_INPUT_ADXL34X is not set +# CONFIG_INPUT_ATMEL_CAPTOUCH is not set # CONFIG_INPUT_BMA150 is not set # CONFIG_INPUT_IMS_PCU is not set CONFIG_INPUT_CMA3000=m @@ -2536,7 +2553,11 @@ CONFIG_TOUCHSCREEN_USB_COMPOSITE=m # CONFIG_TOUCHSCREEN_WM97XX is not set CONFIG_TOUCHSCREEN_W90X900=m # CONFIG_TOUCHSCREEN_BU21013 is not set +CONFIG_TOUCHSCREEN_RM_TS=m +CONFIG_TOUCHSCREEN_SILEAD=m +CONFIG_TOUCHSCREEN_SIS_I2C=m CONFIG_TOUCHSCREEN_ST1232=m +# CONFIG_TOUCHSCREEN_SURFACE3_SPI is not set CONFIG_TOUCHSCREEN_ATMEL_MXT=m # CONFIG_TOUCHSCREEN_MAX11801 is not set CONFIG_TOUCHSCREEN_AUO_PIXCIR=m @@ -2615,6 +2636,11 @@ CONFIG_TCG_ATMEL=m # CONFIG_TCG_INFINEON is not set # CONFIG_TCG_TIS_ST33ZP24 is not set # CONFIG_TCG_XEN is not set +# CONFIG_TCG_TIS_SPI is not set +# CONFIG_TCG_VTPM_PROXY is not set +# CONFIG_TCG_TIS_ST33ZP24_I2C is not set +# CONFIG_TCG_TIS_ST33ZP24_SPI is not set + CONFIG_TELCLOCK=m # @@ -2786,6 +2812,7 @@ CONFIG_SENSORS_F71805F=m CONFIG_SENSORS_F71882FG=m CONFIG_SENSORS_F75375S=m CONFIG_SENSORS_FSCHMD=m +CONFIG_SENSORS_FTSTEUTATES=m CONFIG_SENSORS_G760A=m CONFIG_SENSORS_G762=m CONFIG_SENSORS_GL518SM=m @@ -2834,6 +2861,7 @@ CONFIG_SENSORS_PC87360=m CONFIG_SENSORS_PC87427=m CONFIG_SENSORS_PCF8591=m CONFIG_SENSORS_SHT15=m +CONFIG_SENSORS_SHT3x=m CONFIG_SENSORS_SHTC1=m CONFIG_SENSORS_SIS5595=m CONFIG_CHARGER_SMB347=m @@ -2871,6 +2899,7 @@ CONFIG_SENSORS_LM73=m CONFIG_SENSORS_AMC6821=m CONFIG_SENSORS_INA2XX=m CONFIG_SENSORS_INA209=m +CONFIG_SENSORS_INA3221=m CONFIG_SENSORS_ADT7411=m CONFIG_SENSORS_ASC7621=m CONFIG_SENSORS_EMC1403=m @@ -2932,8 +2961,10 @@ CONFIG_IIO_BUFFER_CB=y CONFIG_IIO_TRIGGERED_BUFFER=m CONFIG_IIO_TRIGGER=y CONFIG_IIO_SW_TRIGGER=y +CONFIG_IIO_SW_DEVICE=m CONFIG_IIO_CONSUMERS_PER_TRIGGER=2 CONFIG_IIO_INTERRUPT_TRIGGER=m +CONFIG_IIO_TIGHTLOOP_TRIGGER=m CONFIG_HID_SENSOR_IIO_COMMON=m CONFIG_HID_SENSOR_IIO_TRIGGER=m CONFIG_IIO_CONFIGFS=m @@ -2944,6 +2975,7 @@ CONFIG_IIO_CONFIGFS=m # CONFIG_AD5380 is not set # CONFIG_AD5064 is not set # CONFIG_BMA180 is not set +# CONFIG_BMA220 is not set CONFIG_BMC150_ACCEL=m # CONFIG_MAX1363 is not set # CONFIG_MAX517 is not set @@ -2975,9 +3007,14 @@ CONFIG_STK3310=m # CONFIG_CC10001_ADC is not set # CONFIG_INV_MPU6050_IIO is not set CONFIG_IIO_ST_GYRO_3AXIS=m +CONFIG_IIO_ST_GYRO_I2C_3AXIS=m +CONFIG_IIO_ST_GYRO_SPI_3AXIS=m CONFIG_IIO_ST_MAGN_3AXIS=m # CONFIG_BMC150_MAGN is not set +CONFIG_MMA7660=m CONFIG_IIO_ST_ACCEL_3AXIS=m +CONFIG_IIO_ST_ACCEL_I2C_3AXIS=m +CONFIG_IIO_ST_ACCEL_SPI_3AXIS=m CONFIG_HID_SENSOR_INCLINOMETER_3D=m CONFIG_HID_SENSOR_DEVICE_ROTATION=m CONFIG_ACPI_ALS=m @@ -3088,6 +3125,7 @@ CONFIG_PA12203001=m # CONFIG_BMC150_MAGN_I2C is not set # CONFIG_BMC150_MAGN_SPI is not set # CONFIG_DS1803 is not set +# CONFIG_MAX5487 is not set # CONFIG_MCP4131 is not set # CONFIG_HP03 is not set # CONFIG_HP206C is not set @@ -3268,6 +3306,7 @@ CONFIG_RTC_DRV_M41T80=m CONFIG_RTC_DRV_M41T80_WDT=y CONFIG_RTC_DRV_M48T59=m CONFIG_RTC_DRV_MAX6900=m +CONFIG_RTC_DRV_MAX6916=m # CONFIG_RTC_DRV_M48T86 is not set CONFIG_RTC_DRV_PCF2127=m CONFIG_RTC_DRV_PCF8563=m @@ -3371,6 +3410,7 @@ CONFIG_DRM_MGAG200=m # do not enable on f17 or older CONFIG_DRM_I915=m # CONFIG_DRM_I915_PRELIMINARY_HW_SUPPORT is not set CONFIG_DRM_I915_USERPTR=y +CONFIG_DRM_I915_GVT=y CONFIG_DRM_VIA=m CONFIG_DRM_NOUVEAU=m CONFIG_NOUVEAU_DEBUG=5 @@ -3392,6 +3432,11 @@ CONFIG_DRM_VIRTIO_GPU=m # CONFIG_DRM_PANEL_SIMPLE is not set # CONFIG_DRM_PANEL_SAMSUNG_S6E8AA0 is not set CONFIG_DRM_VGEM=m +# CONFIG_DRM_MALI_DISPLAY is not set +# CONFIG_DRM_SII902X is not set +# CONFIG_DRM_TOSHIBA_TC358767 is not set +# CONFIG_DRM_I2C_ADV7533 is not set + # # PCMCIA character devices @@ -4092,6 +4137,7 @@ CONFIG_HID_GREENASIA=m CONFIG_HID_SMARTJOYPLUS=m CONFIG_HID_TOPSEED=m CONFIG_HID_THINGM=m +CONFIG_HID_LED=m CONFIG_HID_THRUSTMASTER=m CONFIG_HID_XINMO=m CONFIG_HID_ZEROPLUS=m @@ -4104,6 +4150,7 @@ CONFIG_HID_SENSOR_ALS=m # CONFIG_HID_SENSOR_PROX is not set CONFIG_HID_SENSOR_ACCEL_3D=m # CONFIG_HID_SENSOR_CUSTOM_SENSOR is not set +CONFIG_HID_ALPS=m CONFIG_HID_EMS_FF=m CONFIG_HID_ELECOM=m CONFIG_HID_ELO=m @@ -4700,6 +4747,8 @@ CONFIG_NFSD_PNFS=y CONFIG_NFSD_BLOCKLAYOUT=y CONFIG_NFSD_SCSILAYOUT=y CONFIG_NFSD_V4_SECURITY_LABEL=y +# This is labeled as 'bare minimum' and 'not for production' +# CONFIG_NFSD_FLEXFILELAYOUT is not set CONFIG_NFS_FSCACHE=y # CONFIG_NFS_USE_LEGACY_DNS is not set CONFIG_PNFS_OBJLAYOUT=m @@ -5036,6 +5085,7 @@ CONFIG_CRYPTO_SEED=m CONFIG_CRYPTO_SEQIV=m CONFIG_CRYPTO_SERPENT=m CONFIG_CRYPTO_SHA1=y +CONFIG_CRYPTO_SHA3=m CONFIG_CRYPTO_SHA256=y CONFIG_CRYPTO_SHA512=m CONFIG_CRYPTO_TEA=m @@ -5056,6 +5106,8 @@ CONFIG_CRYPTO_DEV_HIFN_795X_RNG=y CONFIG_CRYPTO_PCRYPT=m CONFIG_CRYPTO_USER=m CONFIG_CRYPTO_RSA=m +CONFIG_CRYPTO_DH=m +CONFIG_CRYPTO_ECDH=m CONFIG_CRYPTO_CHACHA20POLY1305=m CONFIG_CRYPTO_ECHAINIV=m CONFIG_CRYPTO_POLY1305=m @@ -5234,7 +5286,7 @@ CONFIG_CPU_FREQ_GOV_ONDEMAND=y CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y CONFIG_CPU_FREQ_GOV_SCHEDUTIL=y CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y -CONFIG_CPU_FREQ_STAT=m +CONFIG_CPU_FREQ_STAT=y CONFIG_CPU_FREQ_STAT_DETAILS=y @@ -5274,22 +5326,27 @@ CONFIG_SND_INDIGODJX=m CONFIG_SND_SOC=m CONFIG_SND_SIMPLE_CARD=m CONFIG_SND_DESIGNWARE_I2S=m +CONFIG_SND_DESIGNWARE_PCM=m CONFIG_SND_SOC_ALL_CODECS=m CONFIG_SND_SOC_DMIC=m CONFIG_SND_SOC_SPDIF=m CONFIG_SND_DMAENGINE_PCM=m CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM=y # CONFIG_SND_SOC_ADAU1701 is not set +# CONFIG_SND_SOC_ADAU7002 is not set # CONFIG_SND_SOC_AK4104 is not set # CONFIG_SND_SOC_AK4554 is not set # CONFIG_SND_SOC_AK4642 is not set # CONFIG_SND_SOC_AK5386 is not set # CONFIG_SND_SOC_AK4613 is not set +# CONFIG_SND_SOC_BT_SCO is not set +# CONFIG_SND_SOC_CS35L33 is not set # CONFIG_SND_SOC_CS42L52 is not set # CONFIG_SND_SOC_CS42L73 is not set # CONFIG_SND_SOC_CS4270 is not set # CONFIG_SND_SOC_CS4271 is not set # CONFIG_SND_SOC_CS42XX8_I2C is not set +# CONFIG_SND_SOC_CS53L30 is not set # CONFIG_SND_SOC_PCM1681 is not set # CONFIG_SND_SOC_PCM179X is not set # CONFIG_SND_SOC_PCM3168A_I2C is not set @@ -5364,6 +5421,9 @@ CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM=y CONFIG_SND_SOC_AMD_ACP=m # CONFIG_SND_SOC_TAS5720 is not set # CONFIG_SND_SOC_WM8960 is not set +# CONFIG_SND_SOC_MAX98504 is not set +# CONFIG_SND_SOC_MAX9860 is not set +# CONFIG_SND_SOC_WM8985 is not set CONFIG_BALLOON_COMPACTION=y @@ -5413,9 +5473,11 @@ CONFIG_LEDS_LM3530=m # CONFIG_LEDS_IS31FL32XX is not set CONFIG_LEDS_BLINKM=m CONFIG_LEDS_LP3944=m +CONFIG_LEDS_LP3952=m CONFIG_LEDS_LT3593=m CONFIG_LEDS_REGULATOR=m CONFIG_LEDS_TRIGGER_GPIO=m +CONFIG_LEDS_TRIGGER_DISK=y CONFIG_LEDS_WM8350=m CONFIG_LEDS_WM831X_STATUS=m # CONFIG_LEDS_DAC124S085 is not set @@ -5427,8 +5489,8 @@ CONFIG_LEDS_WM831X_STATUS=m CONFIG_DMADEVICES=y CONFIG_DMA_ENGINE=y -CONFIG_DW_DMAC_CORE=m CONFIG_DW_DMAC=m +CONFIG_DW_DMAC_CORE=m CONFIG_DW_DMAC_PCI=m # CONFIG_IDMA64 is not set # CONFIG_DW_DMAC_BIG_ENDIAN_IO is not set @@ -5439,7 +5501,7 @@ CONFIG_DW_DMAC_PCI=m CONFIG_ASYNC_TX_DMA=y # CONFIG_HSU_DMA is not set # CONFIG_HSU_DMA_PCI is not set -# CONFIG_XGENE_DMA is not set +# CONFIG_XILINX_DMA is not set # CONFIG_INTEL_IDMA64 is not set # CONFIG_QCOM_HIDMA_MGMT is not set # CONFIG_QCOM_HIDMA is not set @@ -5536,6 +5598,8 @@ CONFIG_POWER_RESET=y # CONFIG_POWER_RESET_SYSCON_POWEROFF is not set # CONFIG_BATTERY_GAUGE_LTC2941 is not set # CONFIG_POWER_RESET_RESTART is not set +# CONFIG_SYSCON_REBOOT_MODE is not set +# CONFIG_POWER_RESET_BRCMKONA is not set # CONFIG_PDA_POWER is not set @@ -5621,6 +5685,12 @@ CONFIG_NET_DSA_MV88E6060=m CONFIG_NET_DSA_MV88E6XXX=m CONFIG_NET_DSA_BCM_SF2=m +CONFIG_B53=m +CONFIG_B53_SPI_DRIVER=m +CONFIG_B53_MDIO_DRIVER=m +CONFIG_B53_MMAP_DRIVER=m +CONFIG_B53_SRAB_DRIVER=m + # Used by Maemo, we don't care. # CONFIG_PHONET is not set @@ -5653,6 +5723,7 @@ CONFIG_STAGING=y # CONFIG_ANDROID is not set # CONFIG_STAGING_BOARD is not set CONFIG_STAGING_MEDIA=y +# CONFIG_MEDIA_CEC is not set # CONFIG_DVB_AS102 is not set # CONFIG_SLICOSS is not set # CONFIG_VIDEO_DT3155 is not set @@ -5712,6 +5783,7 @@ CONFIG_USBIP_VUDC=m # CONFIG_WILC1000_SDIO is not set # CONFIG_WILC1000_SPI is not set # CONFIG_LNET is not set +# CONFIG_KS7010 is not set # END OF STAGING # @@ -5732,6 +5804,7 @@ CONFIG_PWM=y # CONFIG_PWM_PCA9685 is not set CONFIG_LSM_MMAP_MIN_ADDR=65536 +CONFIG_HARDENED_USERCOPY=y CONFIG_STRIP_ASM_SYMS=y @@ -5924,7 +5997,7 @@ CONFIG_IOMMU_SUPPORT=y # CONFIG_MAILBOX_TEST is not set # CONFIG_RESET_CONTROLLER is not set - +# CONFIG_TI_SYSCON_RESET is not set CONFIG_FMC=m CONFIG_FMC_FAKEDEV=m CONFIG_FMC_TRIVIAL=m @@ -5939,7 +6012,8 @@ CONFIG_POWERCAP=y # CONFIG_HSI is not set -# CONFIG_CPU_IDLE is not set +CONFIG_CPU_IDLE=y +# CONFIG_CPU_IDLE_GOV_LADDER is not set # CONFIG_ARM_ARCH_TIMER_EVTSTREAM is not set # CONFIG_ASM9260_TIMER is not set @@ -5976,7 +6050,6 @@ CONFIG_SYSTEM_BLACKLIST_KEYRING=y # CONFIG_MODULE_COMPRESS is not set # CONFIG_RTC_DRV_EFI is not set -# CONFIG_NET_XGENE is not set # CONFIG_GLOB_SELFTEST is not set diff --git a/config-powerpc64-generic b/config-powerpc64-generic index ba71ccec1..fcd3a49a4 100644 --- a/config-powerpc64-generic +++ b/config-powerpc64-generic @@ -69,8 +69,6 @@ CONFIG_RCU_FANOUT_LEAF=16 CONFIG_FA_DUMP=y CONFIG_RELOCATABLE=y -CONFIG_CPU_IDLE=y -# CONFIG_CPU_IDLE_GOV_LADDER is not set CONFIG_POWERNV_CPUIDLE=y CONFIG_PSERIES_CPUIDLE=y @@ -121,6 +119,8 @@ CONFIG_IPMI_POWERNV=m CONFIG_RTAS_FLASH=y CONFIG_OPAL_PRD=m CONFIG_MTD_POWERNV_FLASH=m +# CONFIG_HOTPLUG_PCI_POWERNV is not set +# CONFIG_POWERNV_OP_PANEL is not set # Power 7 and later CONFIG_PPC_TRANSACTIONAL_MEM=y @@ -161,6 +161,7 @@ CONFIG_SCSI_IBMVSCSI=m CONFIG_SCSI_IPR=m CONFIG_SCSI_IPR_TRACE=y CONFIG_SCSI_IPR_DUMP=y +CONFIG_SCSI_IBMVSCSIS=m CONFIG_SERIAL_ICOM=m # CONFIG_SERIAL_8250 is not set @@ -209,6 +210,7 @@ CONFIG_LEDS_TRIGGER_TIMER=m CONFIG_LEDS_TRIGGER_HEARTBEAT=m CONFIG_LEDS_TRIGGER_GPIO=m CONFIG_LEDS_POWERNV=m +CONFIG_ADB_PMU_LED_DISK=y CONFIG_USB_EHCI_HCD_PPC_OF=y CONFIG_USB_OHCI_HCD_PCI=y @@ -374,3 +376,8 @@ CONFIG_POWER_RESET_GPIO_RESTART=y CONFIG_FB_SSD1307=m CONFIG_INPUT_PWM_BEEPER=m CONFIG_BACKLIGHT_PWM=m + +CONFIG_CRYPT_CRC32C_VPMSUM=m + +# CONFIG_JUMP_LABEL_FEATURE_CHECKS is not set +# CONFIG_JUMP_LABEL_FEATURE_CHECK_DEBUG is not set diff --git a/config-s390x b/config-s390x index d559c6570..e235e9e01 100644 --- a/config-s390x +++ b/config-s390x @@ -135,6 +135,7 @@ CONFIG_CRYPTO_GHASH_S390=m CONFIG_CRYPTO_SHA1_S390=m CONFIG_CRYPTO_SHA256_S390=m CONFIG_CRYPTO_SHA512_S390=m +CONFIG_CRYPTO_CRC32_S390=m # # Kernel hacking @@ -158,6 +159,7 @@ CONFIG_MONREADER=m CONFIG_STACK_GUARD=256 CONFIG_CMM_IUCV=y +# CONFIG_CPU_IDLE is not set CONFIG_S390_HYPFS_FS=y @@ -178,6 +180,7 @@ CONFIG_QETH_L3=m CONFIG_KVM=m # CONFIG_KVM_S390_UCONTROL is not set CONFIG_S390_GUEST=y +CONFIG_S390_GUEST_OLD_TRANSPORT=y CONFIG_VIRTIO_CONSOLE=y diff --git a/config-x86-generic b/config-x86-generic index bbbd71da1..a44190bd7 100644 --- a/config-x86-generic +++ b/config-x86-generic @@ -76,7 +76,7 @@ CONFIG_X86_MPPARSE=y CONFIG_MMIOTRACE=y # CONFIG_MMIOTRACE_TEST is not set # CONFIG_DEBUG_PER_CPU_MAPS is not set -# CONFIG_DEBUG_WX is not set +CONFIG_DEBUG_WX=y CONFIG_DEBUG_STACKOVERFLOW=y CONFIG_ACPI=y @@ -86,7 +86,6 @@ CONFIG_ACPI_BUTTON=y CONFIG_ACPI_CONTAINER=y CONFIG_ACPI_DOCK=y CONFIG_ACPI_FAN=y -CONFIG_ACPI_NUMA=y CONFIG_ACPI_PROCESSOR=y CONFIG_ACPI_PROCFS=y CONFIG_ACPI_SBS=m @@ -95,6 +94,7 @@ CONFIG_ACPI_THERMAL=y CONFIG_ACPI_TOSHIBA=m CONFIG_ACPI_VIDEO=m CONFIG_ACPI_INITRD_TABLE_OVERRIDE=y +CONFIG_ACPI_CONFIGFS=m # FIXME: Next two are deprecated. Remove them when they disappear upstream # CONFIG_ACPI_PROCFS_POWER is not set CONFIG_PNPACPI=y @@ -105,6 +105,7 @@ CONFIG_ACPI_APEI_PCIEAER=y CONFIG_ACPI_APEI_GHES=y CONFIG_ACPI_APEI_MEMORY_FAILURE=y # CONFIG_ACPI_APEI_EINJ is not set +CONFIG_DPTF_POWER=m CONFIG_ACPI_IPMI=m CONFIG_ACPI_CUSTOM_METHOD=m CONFIG_ACPI_BGRT=y @@ -116,10 +117,11 @@ CONFIG_INTEL_SOC_PMIC=y CONFIG_PMIC_OPREGION=y CONFIG_CRC_PMIC_OPREGION=y CONFIG_XPOWER_PMIC_OPREGION=y +CONFIG_BXT_WC_PMIC_OPREGION=y CONFIG_GPIO_CRYSTAL_COVE=y CONFIG_AXP288_ADC=y CONFIG_AXP288_FUEL_GAUGE=y -# CONFIG_PWM_CRC is not set +CONFIG_PWM_CRC=y CONFIG_X86_INTEL_PSTATE=y @@ -243,6 +245,7 @@ CONFIG_FUJITSU_TABLET=m CONFIG_FUJITSU_LAPTOP=m # CONFIG_FUJITSU_LAPTOP_DEBUG is not set CONFIG_IDEAPAD_LAPTOP=m +CONFIG_INTEL_VBTN=m CONFIG_INTEL_HID_EVENT=m CONFIG_MSI_LAPTOP=m CONFIG_PANASONIC_LAPTOP=m @@ -274,6 +277,7 @@ CONFIG_PVPANIC=m # CONFIG_TOUCHSCREEN_INTEL_MID is not set CONFIG_TOUCHSCREEN_GOODIX=m +CONFIG_TOUCHSCREEN_SURFACE3_SPI=m # CONFIG_SMSC37B787_WDT is not set CONFIG_VIA_WDT=m @@ -341,11 +345,6 @@ CONFIG_SPI_PXA2XX=m CONFIG_MTD_ESB2ROM=m CONFIG_MTD_CK804XROM=m -CONFIG_CPU_IDLE=y -# CONFIG_CPU_IDLE_MULTIPLE_DRIVERS is not set -# CONFIG_CPU_IDLE_GOV_LADDER is not set -CONFIG_CPU_IDLE_GOV_MENU=y - CONFIG_THINKPAD_ACPI=m # CONFIG_THINKPAD_ACPI_DEBUG is not set # CONFIG_THINKPAD_ACPI_DEBUGFACILITIES is not set @@ -461,7 +460,6 @@ CONFIG_INTEL_PMC_CORE=y CONFIG_VIDEO_VIA_CAMERA=m -CONFIG_IRQ_TIME_ACCOUNTING=y CONFIG_X86_RESERVE_LOW=64 # CONFIG_IRQ_DOMAIN_DEBUG is not set @@ -565,10 +563,12 @@ CONFIG_SND_SOC_INTEL_SKL_RT286_MACH=m CONFIG_SND_SOC_INTEL_SKL_NAU88L25_SSM4567_MACH=m CONFIG_SND_SOC_INTEL_SKL_NAU88L25_MAX98357A_MACH=m CONFIG_SND_SOC_INTEL_BXT_RT298_MACH=m +CONFIG_SND_SOC_INTEL_BXT_DA7219_MAX98357A_MACH=m CONFIG_SND_SOC_AC97_CODEC=m # CONFIG_SND_SOC_TAS571X is not set # CONFIG_SND_SUN4I_CODEC is not set # CONFIG_SND_SUN4I_SPDIF is not set +# CONFIG_SND_SUN4I_I2S is not set CONFIG_INTEL_POWERCLAMP=m CONFIG_X86_PKG_TEMP_THERMAL=m diff --git a/config-x86_64-generic b/config-x86_64-generic index d1e9105c5..704dc30bd 100644 --- a/config-x86_64-generic +++ b/config-x86_64-generic @@ -9,14 +9,15 @@ CONFIG_GENERIC_CPU=y CONFIG_X86_UV=y CONFIG_UV_MMTIMER=m CONFIG_NUMA=y +CONFIG_ACPI_NUMA=y CONFIG_AMD_NUMA=y CONFIG_X86_64_ACPI_NUMA=y CONFIG_ACPI_NFIT=m # CONFIG_ACPI_NFIT_DEBUG is not set # CONFIG_NUMA_EMU is not set CONFIG_X86_NUMACHIP=y -CONFIG_NUMA_BALANCING_DEFAULT_ENABLED=y CONFIG_NUMA_BALANCING=y +CONFIG_NUMA_BALANCING_DEFAULT_ENABLED=y # https://lists.fedoraproject.org/pipermail/kernel/2013-November/004601.html CONFIG_NR_CPUS=1024 @@ -28,6 +29,7 @@ CONFIG_DEFAULT_MMAP_MIN_ADDR=65536 CONFIG_X86_INTEL_MEMORY_PROTECTION_KEYS=y +CONFIG_RANDOMIZE_MEMORY=y # enable the 32-bit entry point for Baytrail CONFIG_EFI_MIXED=y @@ -80,6 +82,8 @@ CONFIG_CRYPTO_GHASH_CLMUL_NI_INTEL=m CONFIG_CRYPTO_SHA1_SSSE3=m CONFIG_CRYPTO_SHA256_SSSE3=m CONFIG_CRYPTO_SHA512_SSSE3=m +CONFIG_CRYPTO_SHA256_MB=m +CONFIG_CRYPTO_SHA512_MB=m CONFIG_CRYPTO_BLOWFISH_X86_64=m CONFIG_CRYPTO_TWOFISH_X86_64_3WAY=m CONFIG_CRYPTO_CAMELLIA_X86_64=m @@ -106,6 +110,7 @@ CONFIG_CRYPTO_CHACHA20_X86_64=m CONFIG_EDAC_AMD64=m # CONFIG_EDAC_AMD64_ERROR_INJECTION is not set CONFIG_EDAC_SBRIDGE=m +CONFIG_EDAC_SKX=m # CONFIG_PC8736x_GPIO is not set @@ -235,6 +240,3 @@ CONFIG_INFINIBAND_HFI1=m # CONFIG_HFI1_DEBUG_SDMA_ORDER is not set CONFIG_HFI1_VERBS_31BIT_PSN=y # CONFIG_SDMA_VERBOSITY is not set -# -# Temporary workaround until SND_SOC_INTEL_HASWELL_MACH no longer requires builtin -CONFIG_DW_DMAC=y diff --git a/crash-driver.patch b/crash-driver.patch index d88138440..2b05554b7 100644 --- a/crash-driver.patch +++ b/crash-driver.patch @@ -1,3 +1,4 @@ +From 3fbd61fbbbfa7ae15cd3f3e2ff7a97e106be2b43 Mon Sep 17 00:00:00 2001 From: Dave Anderson Date: Tue, 26 Nov 2013 12:42:46 -0500 Subject: [PATCH] crash-driver @@ -29,7 +30,7 @@ Upstream-status: Fedora mustard diff --git a/arch/arm/include/asm/crash-driver.h b/arch/arm/include/asm/crash-driver.h new file mode 100644 -index 000000000000..06e7ae916601 +index 0000000..06e7ae9 --- /dev/null +++ b/arch/arm/include/asm/crash-driver.h @@ -0,0 +1,6 @@ @@ -41,7 +42,7 @@ index 000000000000..06e7ae916601 +#endif /* _ARM_CRASH_H */ diff --git a/arch/arm64/include/asm/crash-driver.h b/arch/arm64/include/asm/crash-driver.h new file mode 100644 -index 000000000000..43b26da0c5d6 +index 0000000..43b26da --- /dev/null +++ b/arch/arm64/include/asm/crash-driver.h @@ -0,0 +1,6 @@ @@ -53,7 +54,7 @@ index 000000000000..43b26da0c5d6 +#endif /* _ARM64_CRASH_H */ diff --git a/arch/ia64/include/asm/crash-driver.h b/arch/ia64/include/asm/crash-driver.h new file mode 100644 -index 000000000000..404bcb93c112 +index 0000000..404bcb9 --- /dev/null +++ b/arch/ia64/include/asm/crash-driver.h @@ -0,0 +1,90 @@ @@ -148,7 +149,7 @@ index 000000000000..404bcb93c112 + +#endif /* _ASM_IA64_CRASH_H */ diff --git a/arch/ia64/kernel/ia64_ksyms.c b/arch/ia64/kernel/ia64_ksyms.c -index 096731049538..e88887827906 100644 +index 0967310..e888878 100644 --- a/arch/ia64/kernel/ia64_ksyms.c +++ b/arch/ia64/kernel/ia64_ksyms.c @@ -84,6 +84,9 @@ EXPORT_SYMBOL(ia64_save_scratch_fpregs); @@ -163,7 +164,7 @@ index 096731049538..e88887827906 100644 EXPORT_SYMBOL_GPL(esi_call_phys); diff --git a/arch/powerpc/include/asm/crash-driver.h b/arch/powerpc/include/asm/crash-driver.h new file mode 100644 -index 000000000000..50092d965dc5 +index 0000000..50092d9 --- /dev/null +++ b/arch/powerpc/include/asm/crash-driver.h @@ -0,0 +1,6 @@ @@ -175,7 +176,7 @@ index 000000000000..50092d965dc5 +#endif /* _PPC64_CRASH_H */ diff --git a/arch/s390/include/asm/crash-driver.h b/arch/s390/include/asm/crash-driver.h new file mode 100644 -index 000000000000..552be5e2c571 +index 0000000..552be5e --- /dev/null +++ b/arch/s390/include/asm/crash-driver.h @@ -0,0 +1,60 @@ @@ -240,10 +241,10 @@ index 000000000000..552be5e2c571 + +#endif /* _S390_CRASH_H */ diff --git a/arch/s390/mm/maccess.c b/arch/s390/mm/maccess.c -index 8a993a53fcd6..8f511795b52e 100644 +index 792f9c6..3197995 100644 --- a/arch/s390/mm/maccess.c +++ b/arch/s390/mm/maccess.c -@@ -197,6 +197,7 @@ void *xlate_dev_mem_ptr(phys_addr_t addr) +@@ -201,6 +201,7 @@ void *xlate_dev_mem_ptr(phys_addr_t addr) put_online_cpus(); return bounce; } @@ -251,14 +252,14 @@ index 8a993a53fcd6..8f511795b52e 100644 /* * Free converted buffer for /dev/mem access (if necessary) -@@ -206,3 +207,4 @@ void unxlate_dev_mem_ptr(phys_addr_t addr, void *buf) +@@ -210,3 +211,4 @@ void unxlate_dev_mem_ptr(phys_addr_t addr, void *buf) if ((void *) addr != buf) free_page((unsigned long) buf); } +EXPORT_SYMBOL_GPL(unxlate_dev_mem_ptr); diff --git a/arch/x86/include/asm/crash-driver.h b/arch/x86/include/asm/crash-driver.h new file mode 100644 -index 000000000000..fd4736ec99f5 +index 0000000..fd4736e --- /dev/null +++ b/arch/x86/include/asm/crash-driver.h @@ -0,0 +1,6 @@ @@ -269,7 +270,7 @@ index 000000000000..fd4736ec99f5 + +#endif /* _X86_CRASH_H */ diff --git a/drivers/char/Kconfig b/drivers/char/Kconfig -index a043107da2af..b272397f306a 100644 +index fdb8f3e..7dd3a49 100644 --- a/drivers/char/Kconfig +++ b/drivers/char/Kconfig @@ -4,6 +4,9 @@ @@ -283,18 +284,18 @@ index a043107da2af..b272397f306a 100644 config DEVMEM diff --git a/drivers/char/Makefile b/drivers/char/Makefile -index d8a7579300d2..31c83630f593 100644 +index 55d16bf..a40ace9 100644 --- a/drivers/char/Makefile +++ b/drivers/char/Makefile -@@ -60,3 +60,5 @@ js-rtc-y = rtc.o - +@@ -61,3 +61,5 @@ js-rtc-y = rtc.o obj-$(CONFIG_TILE_SROM) += tile-srom.o obj-$(CONFIG_XILLYBUS) += xillybus/ + obj-$(CONFIG_POWERNV_OP_PANEL) += powernv-op-panel.o + +obj-$(CONFIG_CRASH) += crash.o diff --git a/drivers/char/crash.c b/drivers/char/crash.c new file mode 100644 -index 000000000000..085378a1d539 +index 0000000..085378a --- /dev/null +++ b/drivers/char/crash.c @@ -0,0 +1,128 @@ @@ -428,7 +429,7 @@ index 000000000000..085378a1d539 +MODULE_LICENSE("GPL"); diff --git a/include/asm-generic/crash-driver.h b/include/asm-generic/crash-driver.h new file mode 100644 -index 000000000000..25ab9869d566 +index 0000000..25ab986 --- /dev/null +++ b/include/asm-generic/crash-driver.h @@ -0,0 +1,72 @@ @@ -504,3 +505,101 @@ index 000000000000..25ab9869d566 +#endif /* __KERNEL__ */ + +#endif /* __CRASH_H__ */ +-- +2.9.2 + +From 7523c19e1d22fbabeaeae9520c16a78202c0eefe Mon Sep 17 00:00:00 2001 +From: Fedora Kernel Team +Date: Tue, 20 Sep 2016 19:39:46 +0200 +Subject: [PATCH] Update of crash driver to handle CONFIG_HARDENED_USERCOPY and + to restrict the supported architectures. + +--- + drivers/char/Kconfig | 1 + + drivers/char/crash.c | 33 ++++++++++++++++++++++++++++++--- + 2 files changed, 31 insertions(+), 3 deletions(-) + +diff --git a/drivers/char/Kconfig b/drivers/char/Kconfig +index 99b99d5..be6a3ae 100644 +--- a/drivers/char/Kconfig ++++ b/drivers/char/Kconfig +@@ -6,6 +6,7 @@ menu "Character devices" + + config CRASH + tristate "Crash Utility memory driver" ++ depends on X86_32 || X86_64 || ARM || ARM64 || PPC64 || S390 + + source "drivers/tty/Kconfig" + +diff --git a/drivers/char/crash.c b/drivers/char/crash.c +index 085378a..0258bf8 100644 +--- a/drivers/char/crash.c ++++ b/drivers/char/crash.c +@@ -32,7 +32,7 @@ + #include + #include + +-#define CRASH_VERSION "1.0" ++#define CRASH_VERSION "1.2" + + /* + * These are the file operation functions that allow crash utility +@@ -66,6 +66,7 @@ crash_read(struct file *file, char *buf, size_t count, loff_t *poff) + struct page *page; + u64 offset; + ssize_t read; ++ char *buffer = file->private_data; + + offset = *poff; + if (offset >> PAGE_SHIFT != (offset+count-1) >> PAGE_SHIFT) +@@ -74,8 +75,12 @@ crash_read(struct file *file, char *buf, size_t count, loff_t *poff) + vaddr = map_virtual(offset, &page); + if (!vaddr) + return -EFAULT; +- +- if (copy_to_user(buf, vaddr, count)) { ++ /* ++ * Use bounce buffer to bypass the CONFIG_HARDENED_USERCOPY ++ * kernel text restriction. ++ */ ++ memcpy(buffer, (char *)vaddr, count); ++ if (copy_to_user(buf, buffer, count)) { + unmap_virtual(page); + return -EFAULT; + } +@@ -86,10 +91,32 @@ crash_read(struct file *file, char *buf, size_t count, loff_t *poff) + return read; + } + ++static int ++crash_open(struct inode * inode, struct file * filp) ++{ ++ if (!capable(CAP_SYS_RAWIO)) ++ return -EPERM; ++ ++ filp->private_data = (void *)__get_free_page(GFP_KERNEL); ++ if (!filp->private_data) ++ return -ENOMEM; ++ ++ return 0; ++} ++ ++static int ++crash_release(struct inode *inode, struct file *filp) ++{ ++ free_pages((unsigned long)filp->private_data, 0); ++ return 0; ++} ++ + static struct file_operations crash_fops = { + .owner = THIS_MODULE, + .llseek = crash_llseek, + .read = crash_read, ++ .open = crash_open, ++ .release = crash_release, + }; + + static struct miscdevice crash_dev = { +-- +2.9.3 + diff --git a/disable-CONFIG_EXPERT-for-ZONE_DMA.patch b/disable-CONFIG_EXPERT-for-ZONE_DMA.patch deleted file mode 100644 index 784cf2035..000000000 --- a/disable-CONFIG_EXPERT-for-ZONE_DMA.patch +++ /dev/null @@ -1,43 +0,0 @@ -From 78bd7226c92c8309d1c6c1378f1224dcd591b49f Mon Sep 17 00:00:00 2001 -From: Fedora Kernel Team -Date: Fri, 22 Jan 2016 13:03:36 -0600 -Subject: [PATCH] Make ZONE_DMA not depend on CONFIG_EXPERT - -Disable the requirement on CONFIG_EXPERT for ZONE_DMA and ZONE_DEVICE so -that we can enable NVDIMM_PFN and ND_PFN - -Signed-off-by: Justin Forbes ---- - arch/x86/Kconfig | 2 +- - mm/Kconfig | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig -index 3c74b549ea9a..8a5b7b8cc425 100644 ---- a/arch/x86/Kconfig -+++ b/arch/x86/Kconfig -@@ -318,7 +318,7 @@ source "kernel/Kconfig.freezer" - menu "Processor type and features" - - config ZONE_DMA -- bool "DMA memory allocation support" if EXPERT -+ bool "DMA memory allocation support" - default y - help - DMA memory allocation support allows devices with less than 32-bit -diff --git a/mm/Kconfig b/mm/Kconfig -index 05efa6a5199e..c1a01e50c293 100644 ---- a/mm/Kconfig -+++ b/mm/Kconfig -@@ -650,7 +650,7 @@ config IDLE_PAGE_TRACKING - See Documentation/vm/idle_page_tracking.txt for more details. - - config ZONE_DEVICE -- bool "Device memory (pmem, etc...) hotplug support" if EXPERT -+ bool "Device memory (pmem, etc...) hotplug support" - depends on MEMORY_HOTPLUG - depends on MEMORY_HOTREMOVE - depends on SPARSEMEM_VMEMMAP --- -2.5.0 - diff --git a/i8042-skip-selftest-asus-laptops.patch b/i8042-skip-selftest-asus-laptops.patch new file mode 100644 index 000000000..351556e04 --- /dev/null +++ b/i8042-skip-selftest-asus-laptops.patch @@ -0,0 +1,373 @@ +From 930e19248e9b61da36c967687ca79c4d5f977919 Mon Sep 17 00:00:00 2001 +From: Marcos Paulo de Souza +Date: Sat, 1 Oct 2016 12:07:35 -0700 +Subject: Input: i8042 - skip selftest on ASUS laptops + +On suspend/resume cycle, selftest is executed to reset i8042 controller. +But when this is done in Asus devices, subsequent calls to detect/init +functions to elantech driver fails. Skipping selftest fixes this problem. + +An easier step to reproduce this problem is adding i8042.reset=1 as a +kernel parameter. On Asus laptops, it'll make the system to start with the +touchpad already stuck, since psmouse_probe forcibly calls the selftest +function. + +This patch was inspired by John Hiesey's change[1], but, since this problem +affects a lot of models of Asus, let's avoid running selftests on them. + +All models affected by this problem: +A455LD +K401LB +K501LB +K501LX +R409L +V502LX +X302LA +X450LCP +X450LD +X455LAB +X455LDB +X455LF +Z450LA + +[1]: https://marc.info/?l=linux-input&m=144312209020616&w=2 + +Fixes: "ETPS/2 Elantech Touchpad dies after resume from suspend" +(https://bugzilla.kernel.org/show_bug.cgi?id=107971) + +Signed-off-by: Marcos Paulo de Souza +Cc: stable@vger.kernel.org +Signed-off-by: Dmitry Torokhov +--- + Documentation/kernel-parameters.txt | 9 +++- + drivers/input/serio/i8042-io.h | 2 +- + drivers/input/serio/i8042-ip22io.h | 2 +- + drivers/input/serio/i8042-ppcio.h | 2 +- + drivers/input/serio/i8042-sparcio.h | 2 +- + drivers/input/serio/i8042-unicore32io.h | 2 +- + drivers/input/serio/i8042-x86ia64io.h | 96 +++++++++++++++++++++++++++++++-- + drivers/input/serio/i8042.c | 55 +++++++++++++++---- + 8 files changed, 150 insertions(+), 20 deletions(-) + +diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt +index 0b3de80..3475b32 100644 +--- a/Documentation/kernel-parameters.txt ++++ b/Documentation/kernel-parameters.txt +@@ -1409,7 +1409,14 @@ bytes respectively. Such letter suffixes can also be entirely omitted. + i8042.nopnp [HW] Don't use ACPIPnP / PnPBIOS to discover KBD/AUX + controllers + i8042.notimeout [HW] Ignore timeout condition signalled by controller +- i8042.reset [HW] Reset the controller during init and cleanup ++ i8042.reset [HW] Reset the controller during init, cleanup and ++ suspend-to-ram transitions, only during s2r ++ transitions, or never reset ++ Format: { 1 | Y | y | 0 | N | n } ++ 1, Y, y: always reset controller ++ 0, N, n: don't ever reset controller ++ Default: only on s2r transitions on x86; most other ++ architectures force reset to be always executed + i8042.unlock [HW] Unlock (ignore) the keylock + i8042.kbdreset [HW] Reset device connected to KBD port + +diff --git a/drivers/input/serio/i8042-io.h b/drivers/input/serio/i8042-io.h +index a5eed2a..34da81c 100644 +--- a/drivers/input/serio/i8042-io.h ++++ b/drivers/input/serio/i8042-io.h +@@ -81,7 +81,7 @@ static inline int i8042_platform_init(void) + return -EBUSY; + #endif + +- i8042_reset = 1; ++ i8042_reset = I8042_RESET_ALWAYS; + return 0; + } + +diff --git a/drivers/input/serio/i8042-ip22io.h b/drivers/input/serio/i8042-ip22io.h +index ee1ad27..08a1c10 100644 +--- a/drivers/input/serio/i8042-ip22io.h ++++ b/drivers/input/serio/i8042-ip22io.h +@@ -61,7 +61,7 @@ static inline int i8042_platform_init(void) + return -EBUSY; + #endif + +- i8042_reset = 1; ++ i8042_reset = I8042_RESET_ALWAYS; + + return 0; + } +diff --git a/drivers/input/serio/i8042-ppcio.h b/drivers/input/serio/i8042-ppcio.h +index f708c75..1aabea4 100644 +--- a/drivers/input/serio/i8042-ppcio.h ++++ b/drivers/input/serio/i8042-ppcio.h +@@ -44,7 +44,7 @@ static inline void i8042_write_command(int val) + + static inline int i8042_platform_init(void) + { +- i8042_reset = 1; ++ i8042_reset = I8042_RESET_ALWAYS; + return 0; + } + +diff --git a/drivers/input/serio/i8042-sparcio.h b/drivers/input/serio/i8042-sparcio.h +index afcd1c1..6231d63 100644 +--- a/drivers/input/serio/i8042-sparcio.h ++++ b/drivers/input/serio/i8042-sparcio.h +@@ -130,7 +130,7 @@ static int __init i8042_platform_init(void) + } + } + +- i8042_reset = 1; ++ i8042_reset = I8042_RESET_ALWAYS; + + return 0; + } +diff --git a/drivers/input/serio/i8042-unicore32io.h b/drivers/input/serio/i8042-unicore32io.h +index 73f5cc1..4557475 100644 +--- a/drivers/input/serio/i8042-unicore32io.h ++++ b/drivers/input/serio/i8042-unicore32io.h +@@ -61,7 +61,7 @@ static inline int i8042_platform_init(void) + if (!request_mem_region(I8042_REGION_START, I8042_REGION_SIZE, "i8042")) + return -EBUSY; + +- i8042_reset = 1; ++ i8042_reset = I8042_RESET_ALWAYS; + return 0; + } + +diff --git a/drivers/input/serio/i8042-x86ia64io.h b/drivers/input/serio/i8042-x86ia64io.h +index 68f5f4a..f4bfb4b 100644 +--- a/drivers/input/serio/i8042-x86ia64io.h ++++ b/drivers/input/serio/i8042-x86ia64io.h +@@ -510,6 +510,90 @@ static const struct dmi_system_id __initconst i8042_dmi_nomux_table[] = { + { } + }; + ++/* ++ * On some Asus laptops, just running self tests cause problems. ++ */ ++static const struct dmi_system_id i8042_dmi_noselftest_table[] = { ++ { ++ .matches = { ++ DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), ++ DMI_MATCH(DMI_PRODUCT_NAME, "A455LD"), ++ }, ++ }, ++ { ++ .matches = { ++ DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), ++ DMI_MATCH(DMI_PRODUCT_NAME, "K401LB"), ++ }, ++ }, ++ { ++ .matches = { ++ DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), ++ DMI_MATCH(DMI_PRODUCT_NAME, "K501LB"), ++ }, ++ }, ++ { ++ .matches = { ++ DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), ++ DMI_MATCH(DMI_PRODUCT_NAME, "K501LX"), ++ }, ++ }, ++ { ++ .matches = { ++ DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), ++ DMI_MATCH(DMI_PRODUCT_NAME, "R409L"), ++ }, ++ }, ++ { ++ .matches = { ++ DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), ++ DMI_MATCH(DMI_PRODUCT_NAME, "V502LX"), ++ }, ++ }, ++ { ++ .matches = { ++ DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), ++ DMI_MATCH(DMI_PRODUCT_NAME, "X302LA"), ++ }, ++ }, ++ { ++ .matches = { ++ DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), ++ DMI_MATCH(DMI_PRODUCT_NAME, "X450LCP"), ++ }, ++ }, ++ { ++ .matches = { ++ DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), ++ DMI_MATCH(DMI_PRODUCT_NAME, "X450LD"), ++ }, ++ }, ++ { ++ .matches = { ++ DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), ++ DMI_MATCH(DMI_PRODUCT_NAME, "X455LAB"), ++ }, ++ }, ++ { ++ .matches = { ++ DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), ++ DMI_MATCH(DMI_PRODUCT_NAME, "X455LDB"), ++ }, ++ }, ++ { ++ .matches = { ++ DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), ++ DMI_MATCH(DMI_PRODUCT_NAME, "X455LF"), ++ }, ++ }, ++ { ++ .matches = { ++ DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), ++ DMI_MATCH(DMI_PRODUCT_NAME, "Z450LA"), ++ }, ++ }, ++ { } ++}; + static const struct dmi_system_id __initconst i8042_dmi_reset_table[] = { + { + /* MSI Wind U-100 */ +@@ -1072,12 +1156,18 @@ static int __init i8042_platform_init(void) + return retval; + + #if defined(__ia64__) +- i8042_reset = true; ++ i8042_reset = I8042_RESET_ALWAYS; + #endif + + #ifdef CONFIG_X86 +- if (dmi_check_system(i8042_dmi_reset_table)) +- i8042_reset = true; ++ /* Honor module parameter when value is not default */ ++ if (i8042_reset == I8042_RESET_DEFAULT) { ++ if (dmi_check_system(i8042_dmi_reset_table)) ++ i8042_reset = I8042_RESET_ALWAYS; ++ ++ if (dmi_check_system(i8042_dmi_noselftest_table)) ++ i8042_reset = I8042_RESET_NEVER; ++ } + + if (dmi_check_system(i8042_dmi_noloop_table)) + i8042_noloop = true; +diff --git a/drivers/input/serio/i8042.c b/drivers/input/serio/i8042.c +index b4d3408..674a760 100644 +--- a/drivers/input/serio/i8042.c ++++ b/drivers/input/serio/i8042.c +@@ -48,9 +48,39 @@ static bool i8042_unlock; + module_param_named(unlock, i8042_unlock, bool, 0); + MODULE_PARM_DESC(unlock, "Ignore keyboard lock."); + +-static bool i8042_reset; +-module_param_named(reset, i8042_reset, bool, 0); +-MODULE_PARM_DESC(reset, "Reset controller during init and cleanup."); ++enum i8042_controller_reset_mode { ++ I8042_RESET_NEVER, ++ I8042_RESET_ALWAYS, ++ I8042_RESET_ON_S2RAM, ++#define I8042_RESET_DEFAULT I8042_RESET_ON_S2RAM ++}; ++static enum i8042_controller_reset_mode i8042_reset = I8042_RESET_DEFAULT; ++static int i8042_set_reset(const char *val, const struct kernel_param *kp) ++{ ++ enum i8042_controller_reset_mode *arg = kp->arg; ++ int error; ++ bool reset; ++ ++ if (val) { ++ error = kstrtobool(val, &reset); ++ if (error) ++ return error; ++ } else { ++ reset = true; ++ } ++ ++ *arg = reset ? I8042_RESET_ALWAYS : I8042_RESET_NEVER; ++ return 0; ++} ++ ++static const struct kernel_param_ops param_ops_reset_param = { ++ .flags = KERNEL_PARAM_OPS_FL_NOARG, ++ .set = i8042_set_reset, ++}; ++#define param_check_reset_param(name, p) \ ++ __param_check(name, p, enum i8042_controller_reset_mode) ++module_param_named(reset, i8042_reset, reset_param, 0); ++MODULE_PARM_DESC(reset, "Reset controller on resume, cleanup or both"); + + static bool i8042_direct; + module_param_named(direct, i8042_direct, bool, 0); +@@ -1019,7 +1049,7 @@ static int i8042_controller_init(void) + * Reset the controller and reset CRT to the original value set by BIOS. + */ + +-static void i8042_controller_reset(bool force_reset) ++static void i8042_controller_reset(bool s2r_wants_reset) + { + i8042_flush(); + +@@ -1044,8 +1074,10 @@ static void i8042_controller_reset(bool force_reset) + * Reset the controller if requested. + */ + +- if (i8042_reset || force_reset) ++ if (i8042_reset == I8042_RESET_ALWAYS || ++ (i8042_reset == I8042_RESET_ON_S2RAM && s2r_wants_reset)) { + i8042_controller_selftest(); ++ } + + /* + * Restore the original control register setting. +@@ -1110,7 +1142,7 @@ static void i8042_dritek_enable(void) + * before suspending. + */ + +-static int i8042_controller_resume(bool force_reset) ++static int i8042_controller_resume(bool s2r_wants_reset) + { + int error; + +@@ -1118,7 +1150,8 @@ static int i8042_controller_resume(bool force_reset) + if (error) + return error; + +- if (i8042_reset || force_reset) { ++ if (i8042_reset == I8042_RESET_ALWAYS || ++ (i8042_reset == I8042_RESET_ON_S2RAM && s2r_wants_reset)) { + error = i8042_controller_selftest(); + if (error) + return error; +@@ -1195,7 +1228,7 @@ static int i8042_pm_resume_noirq(struct device *dev) + + static int i8042_pm_resume(struct device *dev) + { +- bool force_reset; ++ bool want_reset; + int i; + + for (i = 0; i < I8042_NUM_PORTS; i++) { +@@ -1218,9 +1251,9 @@ static int i8042_pm_resume(struct device *dev) + * off control to the platform firmware, otherwise we can simply restore + * the mode. + */ +- force_reset = pm_resume_via_firmware(); ++ want_reset = pm_resume_via_firmware(); + +- return i8042_controller_resume(force_reset); ++ return i8042_controller_resume(want_reset); + } + + static int i8042_pm_thaw(struct device *dev) +@@ -1481,7 +1514,7 @@ static int __init i8042_probe(struct platform_device *dev) + + i8042_platform_device = dev; + +- if (i8042_reset) { ++ if (i8042_reset == I8042_RESET_ALWAYS) { + error = i8042_controller_selftest(); + if (error) + return error; +-- +cgit v0.12 + diff --git a/kbuild-AFTER_LINK.patch b/kbuild-AFTER_LINK.patch index 7e8cba5b9..d79a6186b 100644 --- a/kbuild-AFTER_LINK.patch +++ b/kbuild-AFTER_LINK.patch @@ -42,8 +42,8 @@ index 6abffb7..7b103bb 100644 # actual build commands quiet_cmd_vdso32ld = VDSO32L $@ -- cmd_vdso32ld = $(CROSS32CC) $(c_flags) -Wl,-T $^ -o $@ -+ cmd_vdso32ld = $(CROSS32CC) $(c_flags) -Wl,-T $^ -o $@ \ +- cmd_vdso32ld = $(CROSS32CC) $(c_flags) -o $@ -Wl,-T$(filter %.lds,$^) $(filter %.o,$^) ++ cmd_vdso32ld = $(CROSS32CC) $(c_flags) -o $@ -Wl,-T$(filter %.lds,$^) $(filter %.o,$^) \ + $(if $(AFTER_LINK),; $(AFTER_LINK)) quiet_cmd_vdso32as = VDSO32A $@ cmd_vdso32as = $(CROSS32CC) $(a_flags) -c -o $@ $< @@ -56,8 +56,8 @@ index 8c8f2ae..a743ebe 100644 # actual build commands quiet_cmd_vdso64ld = VDSO64L $@ -- cmd_vdso64ld = $(CC) $(c_flags) -Wl,-T $^ -o $@ -+ cmd_vdso64ld = $(CC) $(c_flags) -Wl,-T $^ -o $@ \ +- cmd_vdso64ld = $(CC) $(c_flags) -o $@ -Wl,-T$(filter %.lds,$^) $(filter %.o,$^) ++ cmd_vdso64ld = $(CC) $(c_flags) -o $@ -Wl,-T$(filter %.lds,$^) $(filter %.o,$^) \ + $(if $(AFTER_LINK),; $(AFTER_LINK)) quiet_cmd_vdso64as = VDSO64A $@ cmd_vdso64as = $(CC) $(a_flags) -c -o $@ $< diff --git a/kernel-panic-TPROXY-vanilla-4.7.1.patch b/kernel-panic-TPROXY-vanilla-4.7.1.patch deleted file mode 100644 index 9d045cabe..000000000 --- a/kernel-panic-TPROXY-vanilla-4.7.1.patch +++ /dev/null @@ -1,85 +0,0 @@ -From patchwork Wed Aug 17 16:04:31 2016 -Content-Type: text/plain; charset="utf-8" -MIME-Version: 1.0 -Content-Transfer-Encoding: 7bit -Subject: kernel panic TPROXY , vanilla 4.7.1 -From: Eric Dumazet -X-Patchwork-Id: 660174 -X-Patchwork-Delegate: davem@davemloft.net -Message-Id: <1471449871.29842.3.camel@edumazet-glaptop3.roam.corp.google.com> -To: Denys Fedoryshchenko -Cc: Linux Kernel Network Developers , - netfilter-devel@vger.kernel.org -Date: Wed, 17 Aug 2016 09:04:31 -0700 - -On Wed, 2016-08-17 at 08:42 -0700, Eric Dumazet wrote: -> On Wed, 2016-08-17 at 17:31 +0300, Denys Fedoryshchenko wrote: -> > Hi! -> > -> > Tried to run squid on latest kernel, and hit a panic -> > Sometimes it just shows warning in dmesg (but doesnt work properly) -> > [ 75.701666] IPv4: Attempt to release TCP socket in state 10 -> > ffff88102d430780 -> > [ 83.866974] squid (2700) used greatest stack depth: 12912 bytes left -> > [ 87.506644] IPv4: Attempt to release TCP socket in state 10 -> > ffff880078a48780 -> > [ 114.704295] IPv4: Attempt to release TCP socket in state 10 -> > ffff881029f8ad00 -> > -> > I cannot catch yet oops/panic message, netconsole not working. -> > -> > After triggering warning message 3 times, i am unable to run squid -> > anymore (without reboot), and in netstat it doesnt show port running. -> > -> > firewall is: -> > *mangle -> > -A PREROUTING -p tcp -m socket -j DIVERT -> > -A PREROUTING -p tcp -m tcp --dport 80 -i eno1 -j TPROXY --on-port 3129 -> > --on-ip 0.0.0.0 --tproxy-mark 0x1/0x1 -> > -A DIVERT -j MARK --set-xmark 0x1/0xffffffff -> > -A DIVERT -j ACCEPT -> > -> > routing -> > ip rule add fwmark 1 lookup 100 -> > ip route add local default dev eno1 table 100 -> > -> > -> > squid config is default with tproxy option -> > http_port 3129 tproxy -> > -> -> Hmppff... sorry for this, I will send a fix. -> -> Thanks for the report ! -> - - -Could you try the following ? - -Thanks ! - - net/netfilter/xt_TPROXY.c | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/net/netfilter/xt_TPROXY.c b/net/netfilter/xt_TPROXY.c -index 7f4414d26a66..663c4c3c9072 100644 ---- a/net/netfilter/xt_TPROXY.c -+++ b/net/netfilter/xt_TPROXY.c -@@ -127,6 +127,8 @@ nf_tproxy_get_sock_v4(struct net *net, struct sk_buff *skb, void *hp, - daddr, dport, - in->ifindex); - -+ if (sk && !atomic_inc_not_zero(&sk->sk_refcnt)) -+ sk = NULL; - /* NOTE: we return listeners even if bound to - * 0.0.0.0, those are filtered out in - * xt_socket, since xt_TPROXY needs 0 bound -@@ -195,6 +197,8 @@ nf_tproxy_get_sock_v6(struct net *net, struct sk_buff *skb, int thoff, void *hp, - daddr, ntohs(dport), - in->ifindex); - -+ if (sk && !atomic_inc_not_zero(&sk->sk_refcnt)) -+ sk = NULL; - /* NOTE: we return listeners even if bound to - * 0.0.0.0, those are filtered out in - * xt_socket, since xt_TPROXY needs 0 bound diff --git a/kernel.spec b/kernel.spec index c40dfd248..f93df36dd 100644 --- a/kernel.spec +++ b/kernel.spec @@ -48,13 +48,13 @@ Summary: The Linux kernel # base_sublevel is the kernel version we're starting with and patching # on top of -- for example, 3.1-rc7-git1 starts with a 3.0 base, # which yields a base_sublevel of 0. -%define base_sublevel 7 +%define base_sublevel 8 ## If this is a released kernel ## %if 0%{?released_kernel} # Do we have a -stable update to apply? -%define stable_update 9 +%define stable_update 4 # Set rpm version accordingly %if 0%{?stable_update} %define stablerev %{stable_update} @@ -497,13 +497,18 @@ Source5005: kbuild-AFTER_LINK.patch # Standalone patches -Patch420: arm64-avoid-needing-console-to-enable-serial-console.patch +# http://www.spinics.net/lists/arm-kernel/msg523359.html +Patch420: arm64-ACPI-parse-SPCR-table.patch + +# a tempory patch for QCOM hardware enablement. Will be gone by end of 2016/F-26 GA +Patch421: qcom-QDF2432-tmp-errata.patch # http://www.spinics.net/lists/arm-kernel/msg490981.html Patch422: geekbox-v4-device-tree-support.patch -Patch424: arm64-pcie-acpi.patch -Patch425: arm64-pcie-quirks-xgene.patch +# http://www.spinics.net/lists/linux-pci/msg53991.html +# https://patchwork.kernel.org/patch/9337113/ +Patch425: arm64-pcie-quirks.patch # http://www.spinics.net/lists/linux-tegra/msg26029.html Patch426: usb-phy-tegra-Add-38.4MHz-clock-table-entry.patch @@ -513,7 +518,9 @@ Patch430: ARM-tegra-usb-no-reset.patch Patch431: bcm2837-initial-support.patch -Patch432: arm-i.MX6-Utilite-device-dtb.patch +Patch432: bcm283x-vc4-fixes.patch + +Patch433: AllWinner-net-emac.patch Patch460: lib-cpumask-Make-CPUMASK_OFFSTACK-usable-without-deb.patch @@ -576,7 +583,8 @@ Patch494: disable-i8042-check-on-apple-mac.patch Patch495: lis3-improve-handling-of-null-rate.patch -Patch496: watchdog-Disable-watchdog-on-virtual-machines.patch +# In theory this has been fixed so should no longer be needed, it also causes problems with aarch64 DMI, so disable to see for sure if it's fixed +# Patch496: watchdog-Disable-watchdog-on-virtual-machines.patch Patch497: scsi-sd_revalidate_disk-prevent-NULL-ptr-deref.patch @@ -592,53 +600,30 @@ Patch502: firmware-Drop-WARN-from-usermodehelper_read_trylock-.patch # Patch503: drm-i915-turn-off-wc-mmaps.patch -Patch508: kexec-uefi-copy-secure_boot-flag-in-boot-params.patch +Patch504: i8042-skip-selftest-asus-laptops.patch -#Required for some persistent memory options -Patch641: disable-CONFIG_EXPERT-for-ZONE_DMA.patch +Patch508: kexec-uefi-copy-secure_boot-flag-in-boot-params.patch #CVE-2016-3134 rhbz 1317383 1317384 Patch665: netfilter-x_tables-deal-with-bogus-nextoffset-values.patch -#skl_update_other_pipe_wm issue patch-series from drm-next, rhbz 1305038 -Patch801: 0001-drm-i915-Reorganize-WM-structs-unions-in-CRTC-state.patch -Patch802: 0002-drm-i915-Rename-s-skl_compute_pipe_wm-skl_build_pipe.patch -Patch803: 0003-drm-i915-gen9-Cache-plane-data-rates-in-CRTC-state.patch -Patch804: 0004-drm-i915-gen9-Allow-calculation-of-data-rate-for-in-.patch -Patch805: 0005-drm-i915-gen9-Store-plane-minimum-blocks-in-CRTC-wm-.patch -Patch806: 0006-drm-i915-Track-whether-an-atomic-transaction-changes.patch -Patch807: 0007-drm-i915-gen9-Allow-skl_allocate_pipe_ddb-to-operate.patch -Patch808: 0008-drm-i915-Add-distrust_bios_wm-flag-to-dev_priv-v2.patch -Patch809: 0009-drm-i915-gen9-Compute-DDB-allocation-at-atomic-check.patch -Patch810: 0010-drm-i915-gen9-Drop-re-allocation-of-DDB-at-atomic-co.patch -Patch811: 0011-drm-i915-gen9-Calculate-plane-WM-s-from-state.patch -Patch812: 0012-drm-i915-gen9-Allow-watermark-calculation-on-in-flig.patch -Patch813: 0013-drm-i915-gen9-Use-a-bitmask-to-track-dirty-pipe-wate.patch -Patch814: 0014-drm-i915-gen9-Propagate-watermark-calculation-failur.patch -Patch815: 0015-drm-i915-gen9-Calculate-watermarks-during-atomic-che.patch -Patch816: 0016-drm-i915-gen9-Reject-display-updates-that-exceed-wm-.patch -Patch817: 0017-drm-i915-Remove-wm_config-from-dev_priv-intel_atomic.patch +#rhbz 1200901 (There should be something better upstream at some point) +Patch842: qxl-reapply-cursor-after-SetCrtc-calls.patch -#rhbz 1353558 -Patch844: 0001-selinux-Only-apply-bounds-checking-to-source-types.patch +# From kernel list, currently in linux-next +Patch845: HID-microsoft-Add-Surface-4-type-cover-pro-4-JP.patch -#rhbz 13700161 -Patch857: kernel-panic-TPROXY-vanilla-4.7.1.patch +# SELinux OverlayFS support (queued for 4.9) +Patch846: security-selinux-overlayfs-support.patch #rhbz 1360688 -Patch859: rc-core-fix-repeat-events.patch - -#rhbz 1350174 -Patch862: tip-x86-boot-x86-KASLR-x86-power-Remove-x86-hibernation-restrictions.patch +Patch847: rc-core-fix-repeat-events.patch #rhbz 1374212 -Patch863: 0001-cpupower-Correct-return-type-of-cpu_power_is_cpu_onl.patch +Patch848: 0001-cpupower-Correct-return-type-of-cpu_power_is_cpu_onl.patch #ongoing complaint, full discussion delayed until ksummit/plumbers -Patch864: 0001-iio-Use-event-header-from-kernel-tree.patch - -#CVE-2016-7425 rhbz 1377330 1377331 -Patch865: arcmsr-buffer-overflow-in-archmsr_iop_message_xfer.patch +Patch849: 0001-iio-Use-event-header-from-kernel-tree.patch # END OF PATCH DEFINITIONS @@ -2167,6 +2152,9 @@ fi # # %changelog +* Mon Oct 24 2016 Justin M. Forbes - 4.8.4-200 +- Linux v4.8.4 rebase + * Thu Oct 20 2016 Justin M. Forbes - 4.7.9-200 - Linux v4.7.9 - CVE-2016-5195 (rhbz 1384344 1387080) diff --git a/qcom-QDF2432-tmp-errata.patch b/qcom-QDF2432-tmp-errata.patch new file mode 100644 index 000000000..f7ace4787 --- /dev/null +++ b/qcom-QDF2432-tmp-errata.patch @@ -0,0 +1,59 @@ +From edc7986d4d405daebaf2f66269b353da579fce5f Mon Sep 17 00:00:00 2001 +From: Christopher Covington +Date: Tue, 31 May 2016 16:19:02 -0400 +Subject: arm64: Workaround for QDF2432 ID_AA64 SR accesses + +The ARMv8.0 architecture reserves several system register encodings for +future use. These encodings should behave as read-only and always return +zero on a read. As described in Errata 94, the CPU cores in the QDF2432 +errantly cause an instruction abort if an AArch64 MRS instruction attempts +to read any of the following system register encodings: + + Op0, Op1, CRn, CRm, Op2 + 3, 0, C0, [C4-C7], [2-3, 6-7] + 3, 0, C0, C3, [3-7] + 3, 0, C0, [C4,C6,C7], [4-5] + 3, 0, C0, C2, [6-7] + +Naively projecting ARMv8.0 names, this space includes: + + ID_AA64PFR[2-7]_EL1 + ID_AA64DFR[2-3]_EL1 + ID_AA64AFR[2-3]_EL1 + ID_AA64ISAR[2-7]_EL1 + ID_AA64MMFR[2-7]_EL1 + +As of v4.8-rc2, Linux only attempts to query one register in this space, +ID_AA64MMFR2_EL1. As simple workaround, skip that access when the affected +MIDR is detected. + +Signed-off-by: Christopher Covington +--- + arch/arm64/kernel/cpuinfo.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/arch/arm64/kernel/cpuinfo.c b/arch/arm64/kernel/cpuinfo.c +index ed1b84f..790de6b 100644 +--- a/arch/arm64/kernel/cpuinfo.c ++++ b/arch/arm64/kernel/cpuinfo.c +@@ -325,6 +325,8 @@ static void cpuinfo_detect_icache_policy(struct cpuinfo_arm64 *info) + + static void __cpuinfo_store_cpu(struct cpuinfo_arm64 *info) + { ++ bool qdf2432_cpu = read_cpuid_id() == 0x510f2811; ++ + info->reg_cntfrq = arch_timer_get_cntfrq(); + info->reg_ctr = read_cpuid_cachetype(); + info->reg_dczid = read_cpuid(DCZID_EL0); +@@ -337,7 +339,7 @@ static void __cpuinfo_store_cpu(struct cpuinfo_arm64 *info) + info->reg_id_aa64isar1 = read_cpuid(ID_AA64ISAR1_EL1); + info->reg_id_aa64mmfr0 = read_cpuid(ID_AA64MMFR0_EL1); + info->reg_id_aa64mmfr1 = read_cpuid(ID_AA64MMFR1_EL1); +- info->reg_id_aa64mmfr2 = read_cpuid(ID_AA64MMFR2_EL1); ++ info->reg_id_aa64mmfr2 = qdf2432_cpu ? 0 : read_cpuid(ID_AA64MMFR2_EL1); + info->reg_id_aa64pfr0 = read_cpuid(ID_AA64PFR0_EL1); + info->reg_id_aa64pfr1 = read_cpuid(ID_AA64PFR1_EL1); + +-- +cgit v0.12 + diff --git a/qxl-reapply-cursor-after-SetCrtc-calls.patch b/qxl-reapply-cursor-after-SetCrtc-calls.patch new file mode 100644 index 000000000..d70acc4eb --- /dev/null +++ b/qxl-reapply-cursor-after-SetCrtc-calls.patch @@ -0,0 +1,439 @@ +From 92777b4dfc3920edb449d0be6ead65d8460653cc Mon Sep 17 00:00:00 2001 +From: Ray Strode +Date: Tue, 12 May 2015 12:51:18 -0400 +Subject: [PATCH] drm/qxl: reapply cursor after SetCrtc calls + +The qxl driver currently destroys and recreates the +qxl "primary" any time the first crtc is set. + +A side-effect of destroying the primary is mouse state +associated with the crtc is lost, which leads to +disappearing mouse cursors on wayland sessions. + +This commit changes the driver to reapply the cursor +any time SetCrtc is called. It achieves this by keeping +a copy of the cursor data on the qxl_crtc struct. + +Signed-off-by: Ray Strode + +https://bugzilla.redhat.com/show_bug.cgi?id=1200901 +--- + drivers/gpu/drm/qxl/qxl_display.c | 98 +++++++++++++++++++++++++++++++++++++++ + drivers/gpu/drm/qxl/qxl_drv.h | 1 + + 2 files changed, 99 insertions(+) + +diff --git a/drivers/gpu/drm/qxl/qxl_display.c b/drivers/gpu/drm/qxl/qxl_display.c +index 3aef127..34ab444 100644 +--- a/drivers/gpu/drm/qxl/qxl_display.c ++++ b/drivers/gpu/drm/qxl/qxl_display.c +@@ -184,60 +184,61 @@ static struct mode_size { + {1440, 900}, + {1400, 1050}, + {1680, 1050}, + {1600, 1200}, + {1920, 1080}, + {1920, 1200} + }; + + static int qxl_add_common_modes(struct drm_connector *connector, + unsigned pwidth, + unsigned pheight) + { + struct drm_device *dev = connector->dev; + struct drm_display_mode *mode = NULL; + int i; + for (i = 0; i < ARRAY_SIZE(common_modes); i++) { + mode = drm_cvt_mode(dev, common_modes[i].w, common_modes[i].h, + 60, false, false, false); + if (common_modes[i].w == pwidth && common_modes[i].h == pheight) + mode->type |= DRM_MODE_TYPE_PREFERRED; + drm_mode_probed_add(connector, mode); + } + return i - 1; + } + + static void qxl_crtc_destroy(struct drm_crtc *crtc) + { + struct qxl_crtc *qxl_crtc = to_qxl_crtc(crtc); + + drm_crtc_cleanup(crtc); ++ kfree(qxl_crtc->cursor); + kfree(qxl_crtc); + } + + static int qxl_crtc_page_flip(struct drm_crtc *crtc, + struct drm_framebuffer *fb, + struct drm_pending_vblank_event *event, + uint32_t page_flip_flags) + { + struct drm_device *dev = crtc->dev; + struct qxl_device *qdev = dev->dev_private; + struct qxl_framebuffer *qfb_src = to_qxl_framebuffer(fb); + struct qxl_framebuffer *qfb_old = to_qxl_framebuffer(crtc->primary->fb); + struct qxl_bo *bo_old = gem_to_qxl_bo(qfb_old->obj); + struct qxl_bo *bo = gem_to_qxl_bo(qfb_src->obj); + unsigned long flags; + struct drm_clip_rect norect = { + .x1 = 0, + .y1 = 0, + .x2 = fb->width, + .y2 = fb->height + }; + int inc = 1; + int one_clip_rect = 1; + int ret = 0; + + crtc->primary->fb = fb; + bo_old->is_primary = false; + bo->is_primary = true; + + ret = qxl_bo_reserve(bo, false); +@@ -269,60 +270,145 @@ static int qxl_crtc_page_flip(struct drm_crtc *crtc, + return 0; + } + + static int + qxl_hide_cursor(struct qxl_device *qdev) + { + struct qxl_release *release; + struct qxl_cursor_cmd *cmd; + int ret; + + ret = qxl_alloc_release_reserved(qdev, sizeof(*cmd), QXL_RELEASE_CURSOR_CMD, + &release, NULL); + if (ret) + return ret; + + ret = qxl_release_reserve_list(release, true); + if (ret) { + qxl_release_free(qdev, release); + return ret; + } + + cmd = (struct qxl_cursor_cmd *)qxl_release_map(qdev, release); + cmd->type = QXL_CURSOR_HIDE; + qxl_release_unmap(qdev, release, &cmd->release_info); + + qxl_push_cursor_ring_release(qdev, release, QXL_CMD_CURSOR, false); + qxl_release_fence_buffer_objects(release); + return 0; + } + ++static int qxl_crtc_stash_cursor(struct drm_crtc *crtc, ++ struct qxl_cursor *cursor) ++{ ++ struct qxl_crtc *qcrtc = to_qxl_crtc(crtc); ++ size_t cursor_size; ++ ++ cursor_size = sizeof(struct qxl_cursor) + cursor->data_size; ++ ++ if (!qcrtc->cursor || qcrtc->cursor->data_size != cursor->data_size) { ++ kfree(qcrtc->cursor); ++ qcrtc->cursor = kmalloc(cursor_size, GFP_KERNEL); ++ ++ if (!qcrtc->cursor) ++ return -ENOMEM; ++ } ++ ++ memcpy(qcrtc->cursor, cursor, cursor_size); ++ ++ return 0; ++} ++ ++static int qxl_crtc_apply_cursor(struct drm_crtc *crtc) ++{ ++ struct qxl_crtc *qcrtc = to_qxl_crtc(crtc); ++ struct drm_device *dev = crtc->dev; ++ struct qxl_device *qdev = dev->dev_private; ++ struct qxl_cursor *cursor; ++ struct qxl_cursor_cmd *cmd; ++ struct qxl_bo *cursor_bo; ++ struct qxl_release *release; ++ size_t cursor_size; ++ int ret = 0; ++ ++ if (!qcrtc->cursor) ++ return 0; ++ ++ cursor_size = sizeof(*qcrtc->cursor) + qcrtc->cursor->data_size; ++ ++ ret = qxl_alloc_release_reserved(qdev, sizeof(*cmd), ++ QXL_RELEASE_CURSOR_CMD, ++ &release, NULL); ++ if (ret) ++ return ret; ++ ++ ret = qxl_alloc_bo_reserved(qdev, release, cursor_size, &cursor_bo); ++ if (ret) ++ goto out_free_release; ++ ++ ret = qxl_release_reserve_list(release, false); ++ if (ret) ++ goto out_free_bo; ++ ++ ret = qxl_bo_kmap(cursor_bo, (void **)&cursor); ++ if (ret) ++ goto out_backoff; ++ ++ memcpy(cursor, qcrtc->cursor, cursor_size); ++ ++ qxl_bo_kunmap(cursor_bo); ++ ++ cmd = (struct qxl_cursor_cmd *)qxl_release_map(qdev, release); ++ cmd->type = QXL_CURSOR_SET; ++ cmd->u.set.position.x = qcrtc->cur_x + qcrtc->hot_spot_x; ++ cmd->u.set.position.y = qcrtc->cur_y + qcrtc->hot_spot_y; ++ ++ cmd->u.set.shape = qxl_bo_physical_address(qdev, cursor_bo, 0); ++ ++ cmd->u.set.visible = 1; ++ qxl_release_unmap(qdev, release, &cmd->release_info); ++ ++ qxl_push_cursor_ring_release(qdev, release, QXL_CMD_CURSOR, false); ++ qxl_release_fence_buffer_objects(release); ++ qxl_bo_unref(&cursor_bo); ++ ++ return ret; ++ ++out_backoff: ++ qxl_release_backoff_reserve_list(release); ++out_free_bo: ++ qxl_bo_unref(&cursor_bo); ++out_free_release: ++ qxl_release_free(qdev, release); ++ return ret; ++} ++ + static int qxl_crtc_cursor_set2(struct drm_crtc *crtc, + struct drm_file *file_priv, + uint32_t handle, + uint32_t width, + uint32_t height, int32_t hot_x, int32_t hot_y) + { + struct drm_device *dev = crtc->dev; + struct qxl_device *qdev = dev->dev_private; + struct qxl_crtc *qcrtc = to_qxl_crtc(crtc); + struct drm_gem_object *obj; + struct qxl_cursor *cursor; + struct qxl_cursor_cmd *cmd; + struct qxl_bo *cursor_bo, *user_bo; + struct qxl_release *release; + void *user_ptr; + + int size = 64*64*4; + int ret = 0; + if (!handle) + return qxl_hide_cursor(qdev); + + obj = drm_gem_object_lookup(file_priv, handle); + if (!obj) { + DRM_ERROR("cannot find cursor object\n"); + return -ENOENT; + } + + user_bo = gem_to_qxl_bo(obj); + + ret = qxl_bo_reserve(user_bo, false); +@@ -343,60 +429,66 @@ static int qxl_crtc_cursor_set2(struct drm_crtc *crtc, + &release, NULL); + if (ret) + goto out_kunmap; + + ret = qxl_alloc_bo_reserved(qdev, release, sizeof(struct qxl_cursor) + size, + &cursor_bo); + if (ret) + goto out_free_release; + + ret = qxl_release_reserve_list(release, false); + if (ret) + goto out_free_bo; + + ret = qxl_bo_kmap(cursor_bo, (void **)&cursor); + if (ret) + goto out_backoff; + + cursor->header.unique = 0; + cursor->header.type = SPICE_CURSOR_TYPE_ALPHA; + cursor->header.width = 64; + cursor->header.height = 64; + cursor->header.hot_spot_x = hot_x; + cursor->header.hot_spot_y = hot_y; + cursor->data_size = size; + cursor->chunk.next_chunk = 0; + cursor->chunk.prev_chunk = 0; + cursor->chunk.data_size = size; + + memcpy(cursor->chunk.data, user_ptr, size); + ++ ret = qxl_crtc_stash_cursor(crtc, cursor); ++ if (ret) { ++ DRM_ERROR("cannot save cursor, may be lost on next mode set\n"); ++ ret = 0; ++ } ++ + qxl_bo_kunmap(cursor_bo); + + qxl_bo_kunmap(user_bo); + + qcrtc->cur_x += qcrtc->hot_spot_x - hot_x; + qcrtc->cur_y += qcrtc->hot_spot_y - hot_y; + qcrtc->hot_spot_x = hot_x; + qcrtc->hot_spot_y = hot_y; + + cmd = (struct qxl_cursor_cmd *)qxl_release_map(qdev, release); + cmd->type = QXL_CURSOR_SET; + cmd->u.set.position.x = qcrtc->cur_x + qcrtc->hot_spot_x; + cmd->u.set.position.y = qcrtc->cur_y + qcrtc->hot_spot_y; + + cmd->u.set.shape = qxl_bo_physical_address(qdev, cursor_bo, 0); + + cmd->u.set.visible = 1; + qxl_release_unmap(qdev, release, &cmd->release_info); + + qxl_push_cursor_ring_release(qdev, release, QXL_CMD_CURSOR, false); + qxl_release_fence_buffer_objects(release); + + /* finish with the userspace bo */ + ret = qxl_bo_reserve(user_bo, false); + if (!ret) { + qxl_bo_unpin(user_bo); + qxl_bo_unreserve(user_bo); + } + drm_gem_object_unreference_unlocked(obj); + +@@ -628,60 +720,66 @@ static int qxl_crtc_mode_set(struct drm_crtc *crtc, + x, y, + mode->hdisplay, mode->vdisplay, + adjusted_mode->hdisplay, + adjusted_mode->vdisplay); + + if (bo->is_primary == false) + recreate_primary = true; + + if (bo->surf.stride * bo->surf.height > qdev->vram_size) { + DRM_ERROR("Mode doesn't fit in vram size (vgamem)"); + return -EINVAL; + } + + ret = qxl_bo_reserve(bo, false); + if (ret != 0) + return ret; + ret = qxl_bo_pin(bo, bo->type, NULL); + if (ret != 0) { + qxl_bo_unreserve(bo); + return -EINVAL; + } + qxl_bo_unreserve(bo); + if (recreate_primary) { + qxl_io_destroy_primary(qdev); + qxl_io_log(qdev, + "recreate primary: %dx%d,%d,%d\n", + bo->surf.width, bo->surf.height, + bo->surf.stride, bo->surf.format); + qxl_io_create_primary(qdev, 0, bo); + bo->is_primary = true; ++ ++ ret = qxl_crtc_apply_cursor(crtc); ++ if (ret) { ++ DRM_ERROR("could not set cursor after modeset"); ++ ret = 0; ++ } + } + + if (bo->is_primary) { + DRM_DEBUG_KMS("setting surface_id to 0 for primary surface %d on crtc %d\n", bo->surface_id, qcrtc->index); + surf_id = 0; + } else { + surf_id = bo->surface_id; + } + + if (old_bo && old_bo != bo) { + old_bo->is_primary = false; + ret = qxl_bo_reserve(old_bo, false); + qxl_bo_unpin(old_bo); + qxl_bo_unreserve(old_bo); + } + + qxl_monitors_config_set(qdev, qcrtc->index, x, y, + mode->hdisplay, + mode->vdisplay, surf_id); + return 0; + } + + static void qxl_crtc_prepare(struct drm_crtc *crtc) + { + DRM_DEBUG("current: %dx%d+%d+%d (%d).\n", + crtc->mode.hdisplay, crtc->mode.vdisplay, + crtc->x, crtc->y, crtc->enabled); + } + + static void qxl_crtc_commit(struct drm_crtc *crtc) +diff --git a/drivers/gpu/drm/qxl/qxl_drv.h b/drivers/gpu/drm/qxl/qxl_drv.h +index 8e633ca..6b63c54 100644 +--- a/drivers/gpu/drm/qxl/qxl_drv.h ++++ b/drivers/gpu/drm/qxl/qxl_drv.h +@@ -110,60 +110,61 @@ struct qxl_bo { + void *kptr; + int type; + + /* Constant after initialization */ + struct drm_gem_object gem_base; + bool is_primary; /* is this now a primary surface */ + bool hw_surf_alloc; + struct qxl_surface surf; + uint32_t surface_id; + struct qxl_release *surf_create; + }; + #define gem_to_qxl_bo(gobj) container_of((gobj), struct qxl_bo, gem_base) + #define to_qxl_bo(tobj) container_of((tobj), struct qxl_bo, tbo) + + struct qxl_gem { + struct mutex mutex; + struct list_head objects; + }; + + struct qxl_bo_list { + struct ttm_validate_buffer tv; + }; + + struct qxl_crtc { + struct drm_crtc base; + int index; + int cur_x; + int cur_y; + int hot_spot_x; + int hot_spot_y; ++ struct qxl_cursor *cursor; + }; + + struct qxl_output { + int index; + struct drm_connector base; + struct drm_encoder enc; + }; + + struct qxl_framebuffer { + struct drm_framebuffer base; + struct drm_gem_object *obj; + }; + + #define to_qxl_crtc(x) container_of(x, struct qxl_crtc, base) + #define drm_connector_to_qxl_output(x) container_of(x, struct qxl_output, base) + #define drm_encoder_to_qxl_output(x) container_of(x, struct qxl_output, enc) + #define to_qxl_framebuffer(x) container_of(x, struct qxl_framebuffer, base) + + struct qxl_mman { + struct ttm_bo_global_ref bo_global_ref; + struct drm_global_reference mem_global_ref; + bool mem_global_referenced; + struct ttm_bo_device bdev; + }; + + struct qxl_mode_info { + int num_modes; + struct qxl_mode *modes; + bool mode_config_initialized; + +-- +2.7.4 + diff --git a/security-selinux-overlayfs-support.patch b/security-selinux-overlayfs-support.patch new file mode 100644 index 000000000..7149e4566 --- /dev/null +++ b/security-selinux-overlayfs-support.patch @@ -0,0 +1,931 @@ +From 1a93a6eac32a2853177f10e274b9b761b42356eb Mon Sep 17 00:00:00 2001 +From: Javier Martinez Canillas +Date: Mon, 8 Aug 2016 13:08:25 -0400 +Subject: [PATCH 01/10] security: Use IS_ENABLED() instead of checking for + built-in or module + +The IS_ENABLED() macro checks if a Kconfig symbol has been enabled +either built-in or as a module, use that macro instead of open coding +the same. + +Signed-off-by: Javier Martinez Canillas +Acked-by: Casey Schaufler +Signed-off-by: Paul Moore +--- + security/lsm_audit.c | 2 +- + security/selinux/hooks.c | 12 ++++++------ + security/smack/smack_netfilter.c | 4 ++-- + 3 files changed, 9 insertions(+), 9 deletions(-) + +diff --git a/security/lsm_audit.c b/security/lsm_audit.c +index cccbf30..5369036 100644 +--- a/security/lsm_audit.c ++++ b/security/lsm_audit.c +@@ -99,7 +99,7 @@ int ipv4_skb_to_auditdata(struct sk_buff *skb, + } + return ret; + } +-#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) ++#if IS_ENABLED(CONFIG_IPV6) + /** + * ipv6_skb_to_auditdata : fill auditdata from skb + * @skb : the skb +diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c +index 13185a6..880f953 100644 +--- a/security/selinux/hooks.c ++++ b/security/selinux/hooks.c +@@ -3984,7 +3984,7 @@ out: + return ret; + } + +-#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) ++#if IS_ENABLED(CONFIG_IPV6) + + /* Returns error only if unable to parse addresses */ + static int selinux_parse_skb_ipv6(struct sk_buff *skb, +@@ -4075,7 +4075,7 @@ static int selinux_parse_skb(struct sk_buff *skb, struct common_audit_data *ad, + &ad->u.net->v4info.daddr); + goto okay; + +-#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) ++#if IS_ENABLED(CONFIG_IPV6) + case PF_INET6: + ret = selinux_parse_skb_ipv6(skb, ad, proto); + if (ret) +@@ -5029,7 +5029,7 @@ static unsigned int selinux_ipv4_forward(void *priv, + return selinux_ip_forward(skb, state->in, PF_INET); + } + +-#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) ++#if IS_ENABLED(CONFIG_IPV6) + static unsigned int selinux_ipv6_forward(void *priv, + struct sk_buff *skb, + const struct nf_hook_state *state) +@@ -5087,7 +5087,7 @@ static unsigned int selinux_ipv4_output(void *priv, + return selinux_ip_output(skb, PF_INET); + } + +-#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) ++#if IS_ENABLED(CONFIG_IPV6) + static unsigned int selinux_ipv6_output(void *priv, + struct sk_buff *skb, + const struct nf_hook_state *state) +@@ -5273,7 +5273,7 @@ static unsigned int selinux_ipv4_postroute(void *priv, + return selinux_ip_postroute(skb, state->out, PF_INET); + } + +-#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) ++#if IS_ENABLED(CONFIG_IPV6) + static unsigned int selinux_ipv6_postroute(void *priv, + struct sk_buff *skb, + const struct nf_hook_state *state) +@@ -6317,7 +6317,7 @@ static struct nf_hook_ops selinux_nf_ops[] = { + .hooknum = NF_INET_LOCAL_OUT, + .priority = NF_IP_PRI_SELINUX_FIRST, + }, +-#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) ++#if IS_ENABLED(CONFIG_IPV6) + { + .hook = selinux_ipv6_postroute, + .pf = NFPROTO_IPV6, +diff --git a/security/smack/smack_netfilter.c b/security/smack/smack_netfilter.c +index aa6bf1b..205b785 100644 +--- a/security/smack/smack_netfilter.c ++++ b/security/smack/smack_netfilter.c +@@ -20,7 +20,7 @@ + #include + #include "smack.h" + +-#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) ++#if IS_ENABLED(CONFIG_IPV6) + + static unsigned int smack_ipv6_output(void *priv, + struct sk_buff *skb, +@@ -64,7 +64,7 @@ static struct nf_hook_ops smack_nf_ops[] = { + .hooknum = NF_INET_LOCAL_OUT, + .priority = NF_IP_PRI_SELINUX_FIRST, + }, +-#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) ++#if IS_ENABLED(CONFIG_IPV6) + { + .hook = smack_ipv6_output, + .pf = NFPROTO_IPV6, +-- +2.7.4 + +From 8b31f456c72e53ee97474a538bcd91bfb1b93fb7 Mon Sep 17 00:00:00 2001 +From: William Roberts +Date: Mon, 8 Aug 2016 13:08:34 -0400 +Subject: [PATCH 02/10] selinux: print leading 0x on ioctlcmd audits + +ioctlcmd is currently printing hex numbers, but their is no leading +0x. Thus things like ioctlcmd=1234 are misleading, as the base is +not evident. + +Correct this by adding 0x as a prefix, so ioctlcmd=1234 becomes +ioctlcmd=0x1234. + +Signed-off-by: William Roberts +Signed-off-by: Paul Moore +--- + security/lsm_audit.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/security/lsm_audit.c b/security/lsm_audit.c +index 5369036..9bf8518 100644 +--- a/security/lsm_audit.c ++++ b/security/lsm_audit.c +@@ -257,7 +257,7 @@ static void dump_common_audit_data(struct audit_buffer *ab, + audit_log_format(ab, " ino=%lu", inode->i_ino); + } + +- audit_log_format(ab, " ioctlcmd=%hx", a->u.op->cmd); ++ audit_log_format(ab, " ioctlcmd=0x%hx", a->u.op->cmd); + break; + } + case LSM_AUDIT_DATA_DENTRY: { +-- +2.7.4 + +From d8ad8b49618410ddeafd78465b63a6cedd6c9484 Mon Sep 17 00:00:00 2001 +From: Vivek Goyal +Date: Wed, 13 Jul 2016 11:13:56 -0400 +Subject: [PATCH 03/10] security, overlayfs: provide copy up security hook for + unioned files + +Provide a security hook to label new file correctly when a file is copied +up from lower layer to upper layer of a overlay/union mount. + +This hook can prepare a new set of creds which are suitable for new file +creation during copy up. Caller will use new creds to create file and then +revert back to old creds and release new creds. + +Signed-off-by: Vivek Goyal +Acked-by: Stephen Smalley +[PM: whitespace cleanup to appease checkpatch.pl] +Signed-off-by: Paul Moore +--- + fs/overlayfs/copy_up.c | 15 +++++++++++++++ + include/linux/lsm_hooks.h | 11 +++++++++++ + include/linux/security.h | 6 ++++++ + security/security.c | 8 ++++++++ + 4 files changed, 40 insertions(+) + +diff --git a/fs/overlayfs/copy_up.c b/fs/overlayfs/copy_up.c +index 54e5d66..c297b1f 100644 +--- a/fs/overlayfs/copy_up.c ++++ b/fs/overlayfs/copy_up.c +@@ -246,6 +246,8 @@ static int ovl_copy_up_locked(struct dentry *workdir, struct dentry *upperdir, + struct dentry *upper = NULL; + umode_t mode = stat->mode; + int err; ++ const struct cred *old_creds = NULL; ++ struct cred *new_creds = NULL; + + newdentry = ovl_lookup_temp(workdir, dentry); + err = PTR_ERR(newdentry); +@@ -258,10 +260,23 @@ static int ovl_copy_up_locked(struct dentry *workdir, struct dentry *upperdir, + if (IS_ERR(upper)) + goto out1; + ++ err = security_inode_copy_up(dentry, &new_creds); ++ if (err < 0) ++ goto out2; ++ ++ if (new_creds) ++ old_creds = override_creds(new_creds); ++ + /* Can't properly set mode on creation because of the umask */ + stat->mode &= S_IFMT; + err = ovl_create_real(wdir, newdentry, stat, link, NULL, true); + stat->mode = mode; ++ ++ if (new_creds) { ++ revert_creds(old_creds); ++ put_cred(new_creds); ++ } ++ + if (err) + goto out2; + +diff --git a/include/linux/lsm_hooks.h b/include/linux/lsm_hooks.h +index 101bf19..cb69fc8 100644 +--- a/include/linux/lsm_hooks.h ++++ b/include/linux/lsm_hooks.h +@@ -401,6 +401,15 @@ + * @inode contains a pointer to the inode. + * @secid contains a pointer to the location where result will be saved. + * In case of failure, @secid will be set to zero. ++ * @inode_copy_up: ++ * A file is about to be copied up from lower layer to upper layer of ++ * overlay filesystem. Security module can prepare a set of new creds ++ * and modify as need be and return new creds. Caller will switch to ++ * new creds temporarily to create new file and release newly allocated ++ * creds. ++ * @src indicates the union dentry of file that is being copied up. ++ * @new pointer to pointer to return newly allocated creds. ++ * Returns 0 on success or a negative error code on error. + * + * Security hooks for file operations + * +@@ -1425,6 +1434,7 @@ union security_list_options { + int (*inode_listsecurity)(struct inode *inode, char *buffer, + size_t buffer_size); + void (*inode_getsecid)(struct inode *inode, u32 *secid); ++ int (*inode_copy_up)(struct dentry *src, struct cred **new); + + int (*file_permission)(struct file *file, int mask); + int (*file_alloc_security)(struct file *file); +@@ -1696,6 +1706,7 @@ struct security_hook_heads { + struct list_head inode_setsecurity; + struct list_head inode_listsecurity; + struct list_head inode_getsecid; ++ struct list_head inode_copy_up; + struct list_head file_permission; + struct list_head file_alloc_security; + struct list_head file_free_security; +diff --git a/include/linux/security.h b/include/linux/security.h +index 7831cd5..c5b0ccd 100644 +--- a/include/linux/security.h ++++ b/include/linux/security.h +@@ -282,6 +282,7 @@ int security_inode_getsecurity(struct inode *inode, const char *name, void **buf + int security_inode_setsecurity(struct inode *inode, const char *name, const void *value, size_t size, int flags); + int security_inode_listsecurity(struct inode *inode, char *buffer, size_t buffer_size); + void security_inode_getsecid(struct inode *inode, u32 *secid); ++int security_inode_copy_up(struct dentry *src, struct cred **new); + int security_file_permission(struct file *file, int mask); + int security_file_alloc(struct file *file); + void security_file_free(struct file *file); +@@ -758,6 +759,11 @@ static inline void security_inode_getsecid(struct inode *inode, u32 *secid) + *secid = 0; + } + ++static inline int security_inode_copy_up(struct dentry *src, struct cred **new) ++{ ++ return 0; ++} ++ + static inline int security_file_permission(struct file *file, int mask) + { + return 0; +diff --git a/security/security.c b/security/security.c +index 4838e7f..f2a7f27 100644 +--- a/security/security.c ++++ b/security/security.c +@@ -748,6 +748,12 @@ void security_inode_getsecid(struct inode *inode, u32 *secid) + call_void_hook(inode_getsecid, inode, secid); + } + ++int security_inode_copy_up(struct dentry *src, struct cred **new) ++{ ++ return call_int_hook(inode_copy_up, 0, src, new); ++} ++EXPORT_SYMBOL(security_inode_copy_up); ++ + int security_file_permission(struct file *file, int mask) + { + int ret; +@@ -1684,6 +1690,8 @@ struct security_hook_heads security_hook_heads = { + LIST_HEAD_INIT(security_hook_heads.inode_listsecurity), + .inode_getsecid = + LIST_HEAD_INIT(security_hook_heads.inode_getsecid), ++ .inode_copy_up = ++ LIST_HEAD_INIT(security_hook_heads.inode_copy_up), + .file_permission = + LIST_HEAD_INIT(security_hook_heads.file_permission), + .file_alloc_security = +-- +2.7.4 + +From 56909eb3f559103196ecbf2c08c923e0804980fb Mon Sep 17 00:00:00 2001 +From: Vivek Goyal +Date: Wed, 13 Jul 2016 10:44:48 -0400 +Subject: [PATCH 04/10] selinux: Implementation for inode_copy_up() hook + +A file is being copied up for overlay file system. Prepare a new set of +creds and set create_sid appropriately so that new file is created with +appropriate label. + +Overlay inode has right label for both context and non-context mount +cases. In case of non-context mount, overlay inode will have the label +of lower file and in case of context mount, overlay inode will have +the label from context= mount option. + +Signed-off-by: Vivek Goyal +Acked-by: Stephen Smalley +Signed-off-by: Paul Moore +--- + security/selinux/hooks.c | 21 +++++++++++++++++++++ + 1 file changed, 21 insertions(+) + +diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c +index 880f953..40597ed 100644 +--- a/security/selinux/hooks.c ++++ b/security/selinux/hooks.c +@@ -3293,6 +3293,26 @@ static void selinux_inode_getsecid(struct inode *inode, u32 *secid) + *secid = isec->sid; + } + ++static int selinux_inode_copy_up(struct dentry *src, struct cred **new) ++{ ++ u32 sid; ++ struct task_security_struct *tsec; ++ struct cred *new_creds = *new; ++ ++ if (new_creds == NULL) { ++ new_creds = prepare_creds(); ++ if (!new_creds) ++ return -ENOMEM; ++ } ++ ++ tsec = new_creds->security; ++ /* Get label from overlay inode and set it in create_sid */ ++ selinux_inode_getsecid(d_inode(src), &sid); ++ tsec->create_sid = sid; ++ *new = new_creds; ++ return 0; ++} ++ + /* file security operations */ + + static int selinux_revalidate_file_permission(struct file *file, int mask) +@@ -6088,6 +6108,7 @@ static struct security_hook_list selinux_hooks[] = { + LSM_HOOK_INIT(inode_setsecurity, selinux_inode_setsecurity), + LSM_HOOK_INIT(inode_listsecurity, selinux_inode_listsecurity), + LSM_HOOK_INIT(inode_getsecid, selinux_inode_getsecid), ++ LSM_HOOK_INIT(inode_copy_up, selinux_inode_copy_up), + + LSM_HOOK_INIT(file_permission, selinux_file_permission), + LSM_HOOK_INIT(file_alloc_security, selinux_file_alloc_security), +-- +2.7.4 + +From 121ab822ef21914adac2fa3730efeeb8fd762473 Mon Sep 17 00:00:00 2001 +From: Vivek Goyal +Date: Wed, 13 Jul 2016 10:44:49 -0400 +Subject: [PATCH 05/10] security,overlayfs: Provide security hook for copy up + of xattrs for overlay file + +Provide a security hook which is called when xattrs of a file are being +copied up. This hook is called once for each xattr and LSM can return +0 if the security module wants the xattr to be copied up, 1 if the +security module wants the xattr to be discarded on the copy, -EOPNOTSUPP +if the security module does not handle/manage the xattr, or a -errno +upon an error. + +Signed-off-by: David Howells +Signed-off-by: Vivek Goyal +Acked-by: Stephen Smalley +[PM: whitespace cleanup for checkpatch.pl] +Signed-off-by: Paul Moore +--- + fs/overlayfs/copy_up.c | 7 +++++++ + include/linux/lsm_hooks.h | 10 ++++++++++ + include/linux/security.h | 6 ++++++ + security/security.c | 8 ++++++++ + 4 files changed, 31 insertions(+) + +diff --git a/fs/overlayfs/copy_up.c b/fs/overlayfs/copy_up.c +index c297b1f..cd65f12 100644 +--- a/fs/overlayfs/copy_up.c ++++ b/fs/overlayfs/copy_up.c +@@ -103,6 +103,13 @@ retry: + goto retry; + } + ++ error = security_inode_copy_up_xattr(name); ++ if (error < 0 && error != -EOPNOTSUPP) ++ break; ++ if (error == 1) { ++ error = 0; ++ continue; /* Discard */ ++ } + error = vfs_setxattr(new, name, value, size, 0); + if (error) + break; +diff --git a/include/linux/lsm_hooks.h b/include/linux/lsm_hooks.h +index cb69fc8..5797122 100644 +--- a/include/linux/lsm_hooks.h ++++ b/include/linux/lsm_hooks.h +@@ -410,6 +410,14 @@ + * @src indicates the union dentry of file that is being copied up. + * @new pointer to pointer to return newly allocated creds. + * Returns 0 on success or a negative error code on error. ++ * @inode_copy_up_xattr: ++ * Filter the xattrs being copied up when a unioned file is copied ++ * up from a lower layer to the union/overlay layer. ++ * @name indicates the name of the xattr. ++ * Returns 0 to accept the xattr, 1 to discard the xattr, -EOPNOTSUPP if ++ * security module does not know about attribute or a negative error code ++ * to abort the copy up. Note that the caller is responsible for reading ++ * and writing the xattrs as this hook is merely a filter. + * + * Security hooks for file operations + * +@@ -1435,6 +1443,7 @@ union security_list_options { + size_t buffer_size); + void (*inode_getsecid)(struct inode *inode, u32 *secid); + int (*inode_copy_up)(struct dentry *src, struct cred **new); ++ int (*inode_copy_up_xattr)(const char *name); + + int (*file_permission)(struct file *file, int mask); + int (*file_alloc_security)(struct file *file); +@@ -1707,6 +1716,7 @@ struct security_hook_heads { + struct list_head inode_listsecurity; + struct list_head inode_getsecid; + struct list_head inode_copy_up; ++ struct list_head inode_copy_up_xattr; + struct list_head file_permission; + struct list_head file_alloc_security; + struct list_head file_free_security; +diff --git a/include/linux/security.h b/include/linux/security.h +index c5b0ccd..536fafd 100644 +--- a/include/linux/security.h ++++ b/include/linux/security.h +@@ -283,6 +283,7 @@ int security_inode_setsecurity(struct inode *inode, const char *name, const void + int security_inode_listsecurity(struct inode *inode, char *buffer, size_t buffer_size); + void security_inode_getsecid(struct inode *inode, u32 *secid); + int security_inode_copy_up(struct dentry *src, struct cred **new); ++int security_inode_copy_up_xattr(const char *name); + int security_file_permission(struct file *file, int mask); + int security_file_alloc(struct file *file); + void security_file_free(struct file *file); +@@ -764,6 +765,11 @@ static inline int security_inode_copy_up(struct dentry *src, struct cred **new) + return 0; + } + ++static inline int security_inode_copy_up_xattr(const char *name) ++{ ++ return -EOPNOTSUPP; ++} ++ + static inline int security_file_permission(struct file *file, int mask) + { + return 0; +diff --git a/security/security.c b/security/security.c +index f2a7f27..a9e2bb9 100644 +--- a/security/security.c ++++ b/security/security.c +@@ -754,6 +754,12 @@ int security_inode_copy_up(struct dentry *src, struct cred **new) + } + EXPORT_SYMBOL(security_inode_copy_up); + ++int security_inode_copy_up_xattr(const char *name) ++{ ++ return call_int_hook(inode_copy_up_xattr, -EOPNOTSUPP, name); ++} ++EXPORT_SYMBOL(security_inode_copy_up_xattr); ++ + int security_file_permission(struct file *file, int mask) + { + int ret; +@@ -1692,6 +1698,8 @@ struct security_hook_heads security_hook_heads = { + LIST_HEAD_INIT(security_hook_heads.inode_getsecid), + .inode_copy_up = + LIST_HEAD_INIT(security_hook_heads.inode_copy_up), ++ .inode_copy_up_xattr = ++ LIST_HEAD_INIT(security_hook_heads.inode_copy_up_xattr), + .file_permission = + LIST_HEAD_INIT(security_hook_heads.file_permission), + .file_alloc_security = +-- +2.7.4 + +From 19472b69d639d58415866bf127d5f9005038c105 Mon Sep 17 00:00:00 2001 +From: Vivek Goyal +Date: Wed, 13 Jul 2016 10:44:50 -0400 +Subject: [PATCH 06/10] selinux: Implementation for inode_copy_up_xattr() hook + +When a file is copied up in overlay, we have already created file on +upper/ with right label and there is no need to copy up selinux +label/xattr from lower file to upper file. In fact in case of context +mount, we don't want to copy up label as newly created file got its label +from context= option. + +Signed-off-by: Vivek Goyal +Acked-by: Stephen Smalley +Signed-off-by: Paul Moore +--- + security/selinux/hooks.c | 16 ++++++++++++++++ + 1 file changed, 16 insertions(+) + +diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c +index 40597ed..a2d5108 100644 +--- a/security/selinux/hooks.c ++++ b/security/selinux/hooks.c +@@ -3313,6 +3313,21 @@ static int selinux_inode_copy_up(struct dentry *src, struct cred **new) + return 0; + } + ++static int selinux_inode_copy_up_xattr(const char *name) ++{ ++ /* The copy_up hook above sets the initial context on an inode, but we ++ * don't then want to overwrite it by blindly copying all the lower ++ * xattrs up. Instead, we have to filter out SELinux-related xattrs. ++ */ ++ if (strcmp(name, XATTR_NAME_SELINUX) == 0) ++ return 1; /* Discard */ ++ /* ++ * Any other attribute apart from SELINUX is not claimed, supported ++ * by selinux. ++ */ ++ return -EOPNOTSUPP; ++} ++ + /* file security operations */ + + static int selinux_revalidate_file_permission(struct file *file, int mask) +@@ -6109,6 +6124,7 @@ static struct security_hook_list selinux_hooks[] = { + LSM_HOOK_INIT(inode_listsecurity, selinux_inode_listsecurity), + LSM_HOOK_INIT(inode_getsecid, selinux_inode_getsecid), + LSM_HOOK_INIT(inode_copy_up, selinux_inode_copy_up), ++ LSM_HOOK_INIT(inode_copy_up_xattr, selinux_inode_copy_up_xattr), + + LSM_HOOK_INIT(file_permission, selinux_file_permission), + LSM_HOOK_INIT(file_alloc_security, selinux_file_alloc_security), +-- +2.7.4 + +From c957f6df52c509ccfbb96659fd1a0f7812de333f Mon Sep 17 00:00:00 2001 +From: Vivek Goyal +Date: Wed, 13 Jul 2016 10:44:51 -0400 +Subject: [PATCH 07/10] selinux: Pass security pointer to + determine_inode_label() + +Right now selinux_determine_inode_label() works on security pointer of +current task. Soon I need this to work on a security pointer retrieved +from a set of creds. So start passing in a pointer and caller can +decide where to fetch security pointer from. + +Signed-off-by: Vivek Goyal +Acked-by: Stephen Smalley +Signed-off-by: Paul Moore +--- + security/selinux/hooks.c | 19 ++++++++++--------- + 1 file changed, 10 insertions(+), 9 deletions(-) + +diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c +index a2d5108..f9d398b 100644 +--- a/security/selinux/hooks.c ++++ b/security/selinux/hooks.c +@@ -1808,13 +1808,13 @@ out: + /* + * Determine the label for an inode that might be unioned. + */ +-static int selinux_determine_inode_label(struct inode *dir, +- const struct qstr *name, +- u16 tclass, +- u32 *_new_isid) ++static int ++selinux_determine_inode_label(const struct task_security_struct *tsec, ++ struct inode *dir, ++ const struct qstr *name, u16 tclass, ++ u32 *_new_isid) + { + const struct superblock_security_struct *sbsec = dir->i_sb->s_security; +- const struct task_security_struct *tsec = current_security(); + + if ((sbsec->flags & SE_SBINITIALIZED) && + (sbsec->behavior == SECURITY_FS_USE_MNTPOINT)) { +@@ -1857,8 +1857,8 @@ static int may_create(struct inode *dir, + if (rc) + return rc; + +- rc = selinux_determine_inode_label(dir, &dentry->d_name, tclass, +- &newsid); ++ rc = selinux_determine_inode_label(current_security(), dir, ++ &dentry->d_name, tclass, &newsid); + if (rc) + return rc; + +@@ -2838,7 +2838,8 @@ static int selinux_dentry_init_security(struct dentry *dentry, int mode, + u32 newsid; + int rc; + +- rc = selinux_determine_inode_label(d_inode(dentry->d_parent), name, ++ rc = selinux_determine_inode_label(current_security(), ++ d_inode(dentry->d_parent), name, + inode_mode_to_security_class(mode), + &newsid); + if (rc) +@@ -2863,7 +2864,7 @@ static int selinux_inode_init_security(struct inode *inode, struct inode *dir, + sid = tsec->sid; + newsid = tsec->create_sid; + +- rc = selinux_determine_inode_label( ++ rc = selinux_determine_inode_label(current_security(), + dir, qstr, + inode_mode_to_security_class(inode->i_mode), + &newsid); +-- +2.7.4 + +From 2602625b7e46576b00db619ac788c508ba3bcb2c Mon Sep 17 00:00:00 2001 +From: Vivek Goyal +Date: Wed, 13 Jul 2016 10:44:52 -0400 +Subject: [PATCH 08/10] security, overlayfs: Provide hook to correctly label + newly created files + +During a new file creation we need to make sure new file is created with the +right label. New file is created in upper/ so effectively file should get +label as if task had created file in upper/. + +We switched to mounter's creds for actual file creation. Also if there is a +whiteout present, then file will be created in work/ dir first and then +renamed in upper. In none of the cases file will be labeled as we want it to +be. + +This patch introduces a new hook dentry_create_files_as(), which determines +the label/context dentry will get if it had been created by task in upper +and modify passed set of creds appropriately. Caller makes use of these new +creds for file creation. + +Signed-off-by: Vivek Goyal +Acked-by: Stephen Smalley +[PM: fix whitespace issues found with checkpatch.pl] +[PM: changes to use stat->mode in ovl_create_or_link()] +Signed-off-by: Paul Moore +--- + fs/overlayfs/dir.c | 10 ++++++++++ + include/linux/lsm_hooks.h | 15 +++++++++++++++ + include/linux/security.h | 12 ++++++++++++ + security/security.c | 11 +++++++++++ + 4 files changed, 48 insertions(+) + +diff --git a/fs/overlayfs/dir.c b/fs/overlayfs/dir.c +index 12bcd07..a155e52 100644 +--- a/fs/overlayfs/dir.c ++++ b/fs/overlayfs/dir.c +@@ -435,6 +435,15 @@ static int ovl_create_or_link(struct dentry *dentry, struct inode *inode, + if (override_cred) { + override_cred->fsuid = inode->i_uid; + override_cred->fsgid = inode->i_gid; ++ if (!hardlink) { ++ err = security_dentry_create_files_as(dentry, ++ stat->mode, &dentry->d_name, old_cred, ++ override_cred); ++ if (err) { ++ put_cred(override_cred); ++ goto out_revert_creds; ++ } ++ } + put_cred(override_creds(override_cred)); + put_cred(override_cred); + +@@ -445,6 +454,7 @@ static int ovl_create_or_link(struct dentry *dentry, struct inode *inode, + err = ovl_create_over_whiteout(dentry, inode, stat, + link, hardlink); + } ++out_revert_creds: + revert_creds(old_cred); + if (!err) { + struct inode *realinode = d_inode(ovl_dentry_upper(dentry)); +diff --git a/include/linux/lsm_hooks.h b/include/linux/lsm_hooks.h +index 5797122..f2af2af 100644 +--- a/include/linux/lsm_hooks.h ++++ b/include/linux/lsm_hooks.h +@@ -151,6 +151,16 @@ + * @name name of the last path component used to create file + * @ctx pointer to place the pointer to the resulting context in. + * @ctxlen point to place the length of the resulting context. ++ * @dentry_create_files_as: ++ * Compute a context for a dentry as the inode is not yet available ++ * and set that context in passed in creds so that new files are ++ * created using that context. Context is calculated using the ++ * passed in creds and not the creds of the caller. ++ * @dentry dentry to use in calculating the context. ++ * @mode mode used to determine resource type. ++ * @name name of the last path component used to create file ++ * @old creds which should be used for context calculation ++ * @new creds to modify + * + * + * Security hooks for inode operations. +@@ -1375,6 +1385,10 @@ union security_list_options { + int (*dentry_init_security)(struct dentry *dentry, int mode, + const struct qstr *name, void **ctx, + u32 *ctxlen); ++ int (*dentry_create_files_as)(struct dentry *dentry, int mode, ++ struct qstr *name, ++ const struct cred *old, ++ struct cred *new); + + + #ifdef CONFIG_SECURITY_PATH +@@ -1675,6 +1689,7 @@ struct security_hook_heads { + struct list_head sb_clone_mnt_opts; + struct list_head sb_parse_opts_str; + struct list_head dentry_init_security; ++ struct list_head dentry_create_files_as; + #ifdef CONFIG_SECURITY_PATH + struct list_head path_unlink; + struct list_head path_mkdir; +diff --git a/include/linux/security.h b/include/linux/security.h +index 536fafd..a6c6d5d 100644 +--- a/include/linux/security.h ++++ b/include/linux/security.h +@@ -242,6 +242,10 @@ int security_sb_parse_opts_str(char *options, struct security_mnt_opts *opts); + int security_dentry_init_security(struct dentry *dentry, int mode, + const struct qstr *name, void **ctx, + u32 *ctxlen); ++int security_dentry_create_files_as(struct dentry *dentry, int mode, ++ struct qstr *name, ++ const struct cred *old, ++ struct cred *new); + + int security_inode_alloc(struct inode *inode); + void security_inode_free(struct inode *inode); +@@ -600,6 +604,14 @@ static inline int security_dentry_init_security(struct dentry *dentry, + return -EOPNOTSUPP; + } + ++static inline int security_dentry_create_files_as(struct dentry *dentry, ++ int mode, struct qstr *name, ++ const struct cred *old, ++ struct cred *new) ++{ ++ return 0; ++} ++ + + static inline int security_inode_init_security(struct inode *inode, + struct inode *dir, +diff --git a/security/security.c b/security/security.c +index a9e2bb9..f825304 100644 +--- a/security/security.c ++++ b/security/security.c +@@ -364,6 +364,15 @@ int security_dentry_init_security(struct dentry *dentry, int mode, + } + EXPORT_SYMBOL(security_dentry_init_security); + ++int security_dentry_create_files_as(struct dentry *dentry, int mode, ++ struct qstr *name, ++ const struct cred *old, struct cred *new) ++{ ++ return call_int_hook(dentry_create_files_as, 0, dentry, mode, ++ name, old, new); ++} ++EXPORT_SYMBOL(security_dentry_create_files_as); ++ + int security_inode_init_security(struct inode *inode, struct inode *dir, + const struct qstr *qstr, + const initxattrs initxattrs, void *fs_data) +@@ -1635,6 +1644,8 @@ struct security_hook_heads security_hook_heads = { + LIST_HEAD_INIT(security_hook_heads.sb_parse_opts_str), + .dentry_init_security = + LIST_HEAD_INIT(security_hook_heads.dentry_init_security), ++ .dentry_create_files_as = ++ LIST_HEAD_INIT(security_hook_heads.dentry_create_files_as), + #ifdef CONFIG_SECURITY_PATH + .path_unlink = LIST_HEAD_INIT(security_hook_heads.path_unlink), + .path_mkdir = LIST_HEAD_INIT(security_hook_heads.path_mkdir), +-- +2.7.4 + +From a518b0a5b0d7f3397e065acb956bca9635aa892d Mon Sep 17 00:00:00 2001 +From: Vivek Goyal +Date: Wed, 13 Jul 2016 10:44:53 -0400 +Subject: [PATCH 09/10] selinux: Implement dentry_create_files_as() hook + +Calculate what would be the label of newly created file and set that +secid in the passed creds. + +Context of the task which is actually creating file is retrieved from +set of creds passed in. (old->security). + +Signed-off-by: Vivek Goyal +Acked-by: Stephen Smalley +Signed-off-by: Paul Moore +--- + security/selinux/hooks.c | 22 ++++++++++++++++++++++ + 1 file changed, 22 insertions(+) + +diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c +index f9d398b..e15e560 100644 +--- a/security/selinux/hooks.c ++++ b/security/selinux/hooks.c +@@ -2848,6 +2848,27 @@ static int selinux_dentry_init_security(struct dentry *dentry, int mode, + return security_sid_to_context(newsid, (char **)ctx, ctxlen); + } + ++static int selinux_dentry_create_files_as(struct dentry *dentry, int mode, ++ struct qstr *name, ++ const struct cred *old, ++ struct cred *new) ++{ ++ u32 newsid; ++ int rc; ++ struct task_security_struct *tsec; ++ ++ rc = selinux_determine_inode_label(old->security, ++ d_inode(dentry->d_parent), name, ++ inode_mode_to_security_class(mode), ++ &newsid); ++ if (rc) ++ return rc; ++ ++ tsec = new->security; ++ tsec->create_sid = newsid; ++ return 0; ++} ++ + static int selinux_inode_init_security(struct inode *inode, struct inode *dir, + const struct qstr *qstr, + const char **name, +@@ -6098,6 +6119,7 @@ static struct security_hook_list selinux_hooks[] = { + LSM_HOOK_INIT(sb_parse_opts_str, selinux_parse_opts_str), + + LSM_HOOK_INIT(dentry_init_security, selinux_dentry_init_security), ++ LSM_HOOK_INIT(dentry_create_files_as, selinux_dentry_create_files_as), + + LSM_HOOK_INIT(inode_alloc_security, selinux_inode_alloc_security), + LSM_HOOK_INIT(inode_free_security, selinux_inode_free_security), +-- +2.7.4 + +From 348a0db9e69e4c214bf5d7677f17cb99cdc47db0 Mon Sep 17 00:00:00 2001 +From: William Roberts +Date: Mon, 15 Aug 2016 12:42:12 -0700 +Subject: [PATCH 10/10] selinux: drop SECURITY_SELINUX_POLICYDB_VERSION_MAX + +Remove the SECURITY_SELINUX_POLICYDB_VERSION_MAX Kconfig option + +Per: https://github.com/SELinuxProject/selinux/wiki/Kernel-Todo + +This was only needed on Fedora 3 and 4 and just causes issues now, +so drop it. + +The MAX and MIN should just be whatever the kernel can support. + +Signed-off-by: William Roberts +Signed-off-by: Paul Moore +--- + security/selinux/Kconfig | 38 ------------------------------------- + security/selinux/include/security.h | 4 ---- + 2 files changed, 42 deletions(-) + +diff --git a/security/selinux/Kconfig b/security/selinux/Kconfig +index 8691e92..ea7e3ef 100644 +--- a/security/selinux/Kconfig ++++ b/security/selinux/Kconfig +@@ -93,41 +93,3 @@ config SECURITY_SELINUX_CHECKREQPROT_VALUE + via /selinux/checkreqprot if authorized by policy. + + If you are unsure how to answer this question, answer 0. +- +-config SECURITY_SELINUX_POLICYDB_VERSION_MAX +- bool "NSA SELinux maximum supported policy format version" +- depends on SECURITY_SELINUX +- default n +- help +- This option enables the maximum policy format version supported +- by SELinux to be set to a particular value. This value is reported +- to userspace via /selinux/policyvers and used at policy load time. +- It can be adjusted downward to support legacy userland (init) that +- does not correctly handle kernels that support newer policy versions. +- +- Examples: +- For the Fedora Core 3 or 4 Linux distributions, enable this option +- and set the value via the next option. For Fedora Core 5 and later, +- do not enable this option. +- +- If you are unsure how to answer this question, answer N. +- +-config SECURITY_SELINUX_POLICYDB_VERSION_MAX_VALUE +- int "NSA SELinux maximum supported policy format version value" +- depends on SECURITY_SELINUX_POLICYDB_VERSION_MAX +- range 15 23 +- default 19 +- help +- This option sets the value for the maximum policy format version +- supported by SELinux. +- +- Examples: +- For Fedora Core 3, use 18. +- For Fedora Core 4, use 19. +- +- If you are unsure how to answer this question, look for the +- policy format version supported by your policy toolchain, by +- running 'checkpolicy -V'. Or look at what policy you have +- installed under /etc/selinux/$SELINUXTYPE/policy, where +- SELINUXTYPE is defined in your /etc/selinux/config. +- +diff --git a/security/selinux/include/security.h b/security/selinux/include/security.h +index 38feb55..308a286 100644 +--- a/security/selinux/include/security.h ++++ b/security/selinux/include/security.h +@@ -39,11 +39,7 @@ + + /* Range of policy versions we understand*/ + #define POLICYDB_VERSION_MIN POLICYDB_VERSION_BASE +-#ifdef CONFIG_SECURITY_SELINUX_POLICYDB_VERSION_MAX +-#define POLICYDB_VERSION_MAX CONFIG_SECURITY_SELINUX_POLICYDB_VERSION_MAX_VALUE +-#else + #define POLICYDB_VERSION_MAX POLICYDB_VERSION_XPERMS_IOCTL +-#endif + + /* Mask for just the mount related flags */ + #define SE_MNTMASK 0x0f +-- +2.7.4 + diff --git a/sources b/sources index fb1dc8e0a..1c4346db9 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ -5276563eb1f39a048e4a8a887408c031 linux-4.7.tar.xz -fe259c02c75eec61d1aa4b1211f3c853 perf-man-4.7.tar.gz -28f6b3a4bf77710cbffbee17afcf7ae2 patch-4.7.9.xz +c1af0afbd3df35c1ccdc7a5118cd2d07 linux-4.8.tar.xz +0dad03f586e835d538d3e0d2cbdb9a28 perf-man-4.8.tar.gz +4d85e2c59ec33dd7766e18d079e75114 patch-4.8.4.xz diff --git a/tip-x86-boot-x86-KASLR-x86-power-Remove-x86-hibernation-restrictions.patch b/tip-x86-boot-x86-KASLR-x86-power-Remove-x86-hibernation-restrictions.patch deleted file mode 100644 index 7d79fbcef..000000000 --- a/tip-x86-boot-x86-KASLR-x86-power-Remove-x86-hibernation-restrictions.patch +++ /dev/null @@ -1,131 +0,0 @@ -From patchwork Sun Jun 26 11:01:18 2016 -Content-Type: text/plain; charset="utf-8" -MIME-Version: 1.0 -Content-Transfer-Encoding: 7bit -Subject: [tip:x86/boot] x86/KASLR, - x86/power: Remove x86 hibernation restrictions -From: tip-bot for Jacob Shin -X-Patchwork-Id: 9199367 -Message-Id: -To: linux-tip-commits@vger.kernel.org -Cc: pavel@ucw.cz, linux-pm@vger.kernel.org, yinghai@kernel.org, - mingo@kernel.org, linux-kernel@vger.kernel.org, tglx@linutronix.de, - corbet@lwn.net, dvlasenk@redhat.com, sds@tycho.nsa.gov, - peterz@infradead.org, logang@deltatee.com, bhe@redhat.com, - torvalds@linux-foundation.org, bp@alien8.de, luto@kernel.org, - keescook@chromium.org, hpa@zytor.com, brgerst@gmail.com, - len.brown@intel.com -Date: Sun, 26 Jun 2016 04:01:18 -0700 - -Commit-ID: 65fe935dd2387a4faf15314c73f5e6d31ef0217e -Gitweb: http://git.kernel.org/tip/65fe935dd2387a4faf15314c73f5e6d31ef0217e -Author: Kees Cook -AuthorDate: Mon, 13 Jun 2016 15:10:02 -0700 -Committer: Ingo Molnar -CommitDate: Sun, 26 Jun 2016 12:32:03 +0200 - -x86/KASLR, x86/power: Remove x86 hibernation restrictions - -With the following fix: - - 70595b479ce1 ("x86/power/64: Fix crash whan the hibernation code passes control to the image kernel") - -... there is no longer a problem with hibernation resuming a -KASLR-booted kernel image, so remove the restriction. - -Signed-off-by: Kees Cook -Cc: Andy Lutomirski -Cc: Baoquan He -Cc: Borislav Petkov -Cc: Brian Gerst -Cc: Denys Vlasenko -Cc: H. Peter Anvin -Cc: Jonathan Corbet -Cc: Len Brown -Cc: Linus Torvalds -Cc: Linux PM list -Cc: Logan Gunthorpe -Cc: Pavel Machek -Cc: Peter Zijlstra -Cc: Stephen Smalley -Cc: Thomas Gleixner -Cc: Yinghai Lu -Cc: linux-doc@vger.kernel.org -Link: http://lkml.kernel.org/r/20160613221002.GA29719@www.outflux.net -Signed-off-by: Ingo Molnar ---- - Documentation/kernel-parameters.txt | 10 ++++------ - arch/x86/boot/compressed/kaslr.c | 7 ------- - kernel/power/hibernate.c | 6 ------ - 3 files changed, 4 insertions(+), 19 deletions(-) - --- -To unsubscribe from this list: send the line "unsubscribe linux-pm" in -the body of a message to majordomo@vger.kernel.org -More majordomo info at http://vger.kernel.org/majordomo-info.html - -diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt -index 82b42c9..fa8c6d4 100644 ---- a/Documentation/kernel-parameters.txt -+++ b/Documentation/kernel-parameters.txt -@@ -1803,12 +1803,10 @@ bytes respectively. Such letter suffixes can also be entirely omitted. - js= [HW,JOY] Analog joystick - See Documentation/input/joystick.txt. - -- kaslr/nokaslr [X86] -- Enable/disable kernel and module base offset ASLR -- (Address Space Layout Randomization) if built into -- the kernel. When CONFIG_HIBERNATION is selected, -- kASLR is disabled by default. When kASLR is enabled, -- hibernation will be disabled. -+ nokaslr [KNL] -+ When CONFIG_RANDOMIZE_BASE is set, this disables -+ kernel and module base offset ASLR (Address Space -+ Layout Randomization). - - keepinitrd [HW,ARM] - -diff --git a/arch/x86/boot/compressed/kaslr.c b/arch/x86/boot/compressed/kaslr.c -index cfeb025..dff4217 100644 ---- a/arch/x86/boot/compressed/kaslr.c -+++ b/arch/x86/boot/compressed/kaslr.c -@@ -471,17 +471,10 @@ unsigned char *choose_random_location(unsigned long input, - unsigned long choice = output; - unsigned long random_addr; - --#ifdef CONFIG_HIBERNATION -- if (!cmdline_find_option_bool("kaslr")) { -- warn("KASLR disabled: 'kaslr' not on cmdline (hibernation selected)."); -- goto out; -- } --#else - if (cmdline_find_option_bool("nokaslr")) { - warn("KASLR disabled: 'nokaslr' on cmdline."); - goto out; - } --#endif - - boot_params->hdr.loadflags |= KASLR_FLAG; - -diff --git a/kernel/power/hibernate.c b/kernel/power/hibernate.c -index fca9254..9021387 100644 ---- a/kernel/power/hibernate.c -+++ b/kernel/power/hibernate.c -@@ -1154,11 +1154,6 @@ static int __init nohibernate_setup(char *str) - return 1; - } - --static int __init kaslr_nohibernate_setup(char *str) --{ -- return nohibernate_setup(str); --} -- - static int __init page_poison_nohibernate_setup(char *str) - { - #ifdef CONFIG_PAGE_POISONING_ZERO -@@ -1182,5 +1177,4 @@ __setup("hibernate=", hibernate_setup); - __setup("resumewait", resumewait_setup); - __setup("resumedelay=", resumedelay_setup); - __setup("nohibernate", nohibernate_setup); --__setup("kaslr", kaslr_nohibernate_setup); - __setup("page_poison=", page_poison_nohibernate_setup); diff --git a/watchdog-Disable-watchdog-on-virtual-machines.patch b/watchdog-Disable-watchdog-on-virtual-machines.patch deleted file mode 100644 index 0a988c189..000000000 --- a/watchdog-Disable-watchdog-on-virtual-machines.patch +++ /dev/null @@ -1,79 +0,0 @@ -From f1293c68aff98cd913a59b151aac938ec4ce4857 Mon Sep 17 00:00:00 2001 -From: Dave Jones -Date: Tue, 24 Jun 2014 08:43:34 -0400 -Subject: [PATCH] watchdog: Disable watchdog on virtual machines. - -For various reasons, VMs seem to trigger the soft lockup detector a lot, -in cases where it's just not possible for a lockup to occur. -(Example: https://bugzilla.redhat.com/show_bug.cgi?id=971139) - -In some cases it seems that the host just never scheduled the app running -the VM for a very long time (Could be the host was under heavy load). - -Just disable the detector on VMs. - -Bugzilla: 971139 -Upstream-status: Fedora mustard for now - -Signed-off-by: Dave Jones ---- - kernel/watchdog.c | 29 +++++++++++++++++++++++++++++ - 1 file changed, 29 insertions(+) - -diff --git a/kernel/watchdog.c b/kernel/watchdog.c -index 18f34cf..6aadffe 100644 ---- a/kernel/watchdog.c -+++ b/kernel/watchdog.c -@@ -20,6 +20,7 @@ - #include - #include - #include -+#include - - #include - #include -@@ -185,6 +186,32 @@ static int __init hardlockup_all_cpu_backtrace_setup(char *str) - __setup("hardlockup_all_cpu_backtrace=", hardlockup_all_cpu_backtrace_setup); - #endif - -+static int disable_watchdog(const struct dmi_system_id *d) -+{ -+ printk(KERN_INFO "watchdog: disabled (inside virtual machine)\n"); -+ watchdog_user_enabled = 0; -+ return 0; -+} -+ -+static const struct dmi_system_id watchdog_virt_dmi_table[] = { -+ { -+ .callback = disable_watchdog, -+ .ident = "VMware", -+ .matches = { -+ DMI_MATCH(DMI_SYS_VENDOR, "VMware, Inc."), -+ }, -+ }, -+ { -+ .callback = disable_watchdog, -+ .ident = "Bochs", -+ .matches = { -+ DMI_MATCH(DMI_SYS_VENDOR, "Bochs"), -+ }, -+ }, -+ {} -+}; -+ -+ - /* - * Hard-lockup warnings should be triggered after just a few seconds. Soft- - * lockups can have false positives under extreme conditions. So we generally -@@ -1030,6 +1057,8 @@ out: - - void __init lockup_detector_init(void) - { -+ dmi_check_system(watchdog_virt_dmi_table); -+ - set_sample_period(); - - #ifdef CONFIG_NO_HZ_FULL --- -2.5.0 - From d3e1de200c66cd2d2de363d359ea45cb207de835 Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Mon, 24 Oct 2016 16:22:14 -0500 Subject: [PATCH 153/275] A collection of other clock fixes in -next for the RPi --- bcm283x-vc4-fixes.patch | 311 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 311 insertions(+) diff --git a/bcm283x-vc4-fixes.patch b/bcm283x-vc4-fixes.patch index 89793b62b..afde6e2f2 100644 --- a/bcm283x-vc4-fixes.patch +++ b/bcm283x-vc4-fixes.patch @@ -634,3 +634,314 @@ index 9ecd6ff..a4b5370 100644 -- 2.9.3 +From c4e634ce412d97f0e61223b2a5b3f8f9600cd4dc Mon Sep 17 00:00:00 2001 +From: Eric Anholt +Date: Fri, 30 Sep 2016 10:07:27 -0700 +Subject: clk: bcm2835: Clamp the PLL's requested rate to the hardware limits. + +Fixes setting low-resolution video modes on HDMI. Now the PLLH_PIX +divider adjusts itself until the PLLH is within bounds. + +Signed-off-by: Eric Anholt +Signed-off-by: Stephen Boyd +--- + drivers/clk/bcm/clk-bcm2835.c | 11 ++++------- + 1 file changed, 4 insertions(+), 7 deletions(-) + +diff --git a/drivers/clk/bcm/clk-bcm2835.c b/drivers/clk/bcm/clk-bcm2835.c +index b68bf57..8c7763f 100644 +--- a/drivers/clk/bcm/clk-bcm2835.c ++++ b/drivers/clk/bcm/clk-bcm2835.c +@@ -502,8 +502,12 @@ static long bcm2835_pll_rate_from_divisors(unsigned long parent_rate, + static long bcm2835_pll_round_rate(struct clk_hw *hw, unsigned long rate, + unsigned long *parent_rate) + { ++ struct bcm2835_pll *pll = container_of(hw, struct bcm2835_pll, hw); ++ const struct bcm2835_pll_data *data = pll->data; + u32 ndiv, fdiv; + ++ rate = clamp(rate, data->min_rate, data->max_rate); ++ + bcm2835_pll_choose_ndiv_and_fdiv(rate, *parent_rate, &ndiv, &fdiv); + + return bcm2835_pll_rate_from_divisors(*parent_rate, ndiv, fdiv, 1); +@@ -608,13 +612,6 @@ static int bcm2835_pll_set_rate(struct clk_hw *hw, + u32 ana[4]; + int i; + +- if (rate < data->min_rate || rate > data->max_rate) { +- dev_err(cprman->dev, "%s: rate out of spec: %lu vs (%lu, %lu)\n", +- clk_hw_get_name(hw), rate, +- data->min_rate, data->max_rate); +- return -EINVAL; +- } +- + if (rate > data->max_fb_rate) { + use_fb_prediv = true; + rate /= 2; +-- +cgit v0.12 + +From e69fdcca836f0b81a2260b69429c8622a80ea891 Mon Sep 17 00:00:00 2001 +From: Eric Anholt +Date: Wed, 1 Jun 2016 12:05:33 -0700 +Subject: clk: bcm2835: Mark the VPU clock as critical + +The VPU clock is also the clock for our AXI bus, so we really can't +disable it. This might have happened during boot if, for example, +uart1 (aux_uart clock) probed and was then disabled before the other +consumers of the VPU clock had probed. + +Signed-off-by: Eric Anholt +Acked-by: Martin Sperl +Signed-off-by: Stephen Boyd +--- + drivers/clk/bcm/clk-bcm2835.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/drivers/clk/bcm/clk-bcm2835.c b/drivers/clk/bcm/clk-bcm2835.c +index 7a79708..d9db03c 100644 +--- a/drivers/clk/bcm/clk-bcm2835.c ++++ b/drivers/clk/bcm/clk-bcm2835.c +@@ -443,6 +443,8 @@ struct bcm2835_clock_data { + /* Number of fractional bits in the divider */ + u32 frac_bits; + ++ u32 flags; ++ + bool is_vpu_clock; + bool is_mash_clock; + }; +@@ -1230,7 +1232,7 @@ static struct clk *bcm2835_register_clock(struct bcm2835_cprman *cprman, + init.parent_names = parents; + init.num_parents = data->num_mux_parents; + init.name = data->name; +- init.flags = CLK_IGNORE_UNUSED; ++ init.flags = data->flags | CLK_IGNORE_UNUSED; + + if (data->is_vpu_clock) { + init.ops = &bcm2835_vpu_clock_clk_ops; +@@ -1649,6 +1651,7 @@ static const struct bcm2835_clk_desc clk_desc_array[] = { + .div_reg = CM_VPUDIV, + .int_bits = 12, + .frac_bits = 8, ++ .flags = CLK_IS_CRITICAL, + .is_vpu_clock = true), + + /* clocks with per parent mux */ +-- +cgit v0.12 + +From eddcbe8398fc7103fccd22aa6df6917caf0123bf Mon Sep 17 00:00:00 2001 +From: Eric Anholt +Date: Wed, 1 Jun 2016 12:05:34 -0700 +Subject: clk: bcm2835: Mark GPIO clocks enabled at boot as critical + +These divide off of PLLD_PER and are used for the ethernet and wifi +PHYs source PLLs. Neither of them is currently represented by a phy +device that would grab the clock for us. + +This keeps other drivers from killing the networking PHYs when they +disable their own clocks and trigger PLLD_PER's refcount going to 0. + +Signed-off-by: Eric Anholt +Acked-by: Martin Sperl +Signed-off-by: Stephen Boyd +--- + drivers/clk/bcm/clk-bcm2835.c | 10 +++++++++- + 1 file changed, 9 insertions(+), 1 deletion(-) + +diff --git a/drivers/clk/bcm/clk-bcm2835.c b/drivers/clk/bcm/clk-bcm2835.c +index d9db03c..400615b 100644 +--- a/drivers/clk/bcm/clk-bcm2835.c ++++ b/drivers/clk/bcm/clk-bcm2835.c +@@ -1239,6 +1239,12 @@ static struct clk *bcm2835_register_clock(struct bcm2835_cprman *cprman, + } else { + init.ops = &bcm2835_clock_clk_ops; + init.flags |= CLK_SET_RATE_GATE | CLK_SET_PARENT_GATE; ++ ++ /* If the clock wasn't actually enabled at boot, it's not ++ * critical. ++ */ ++ if (!(cprman_read(cprman, data->ctl_reg) & CM_ENABLE)) ++ init.flags &= ~CLK_IS_CRITICAL; + } + + clock = devm_kzalloc(cprman->dev, sizeof(*clock), GFP_KERNEL); +@@ -1708,13 +1714,15 @@ static const struct bcm2835_clk_desc clk_desc_array[] = { + .div_reg = CM_GP1DIV, + .int_bits = 12, + .frac_bits = 12, ++ .flags = CLK_IS_CRITICAL, + .is_mash_clock = true), + [BCM2835_CLOCK_GP2] = REGISTER_PER_CLK( + .name = "gp2", + .ctl_reg = CM_GP2CTL, + .div_reg = CM_GP2DIV, + .int_bits = 12, +- .frac_bits = 12), ++ .frac_bits = 12, ++ .flags = CLK_IS_CRITICAL), + + /* HDMI state machine */ + [BCM2835_CLOCK_HSM] = REGISTER_PER_CLK( +-- +cgit v0.12 + +From 9e400c5cc5c105e35216ac59a346f20cdd7613be Mon Sep 17 00:00:00 2001 +From: Eric Anholt +Date: Wed, 1 Jun 2016 12:05:35 -0700 +Subject: clk: bcm2835: Mark the CM SDRAM clock's parent as critical + +While the SDRAM is being driven by its dedicated PLL most of the time, +there is a little loop running in the firmware that periodically turns +on the CM SDRAM clock (using its pre-initialized parent) and switches +SDRAM to using the CM clock to do PVT recalibration. + +This avoids system hangs if we choose SDRAM's parent for some other +clock, then disable that clock. + +Signed-off-by: Eric Anholt +Acked-by: Martin Sperl +Signed-off-by: Stephen Boyd +--- + drivers/clk/bcm/clk-bcm2835.c | 25 +++++++++++++++++++++++++ + 1 file changed, 25 insertions(+) + +diff --git a/drivers/clk/bcm/clk-bcm2835.c b/drivers/clk/bcm/clk-bcm2835.c +index 400615b..c6420b3 100644 +--- a/drivers/clk/bcm/clk-bcm2835.c ++++ b/drivers/clk/bcm/clk-bcm2835.c +@@ -36,6 +36,7 @@ + + #include + #include ++#include + #include + #include + #include +@@ -1801,6 +1802,25 @@ static const struct bcm2835_clk_desc clk_desc_array[] = { + .ctl_reg = CM_PERIICTL), + }; + ++/* ++ * Permanently take a reference on the parent of the SDRAM clock. ++ * ++ * While the SDRAM is being driven by its dedicated PLL most of the ++ * time, there is a little loop running in the firmware that ++ * periodically switches the SDRAM to using our CM clock to do PVT ++ * recalibration, with the assumption that the previously configured ++ * SDRAM parent is still enabled and running. ++ */ ++static int bcm2835_mark_sdc_parent_critical(struct clk *sdc) ++{ ++ struct clk *parent = clk_get_parent(sdc); ++ ++ if (IS_ERR(parent)) ++ return PTR_ERR(parent); ++ ++ return clk_prepare_enable(parent); ++} ++ + static int bcm2835_clk_probe(struct platform_device *pdev) + { + struct device *dev = &pdev->dev; +@@ -1810,6 +1830,7 @@ static int bcm2835_clk_probe(struct platform_device *pdev) + const struct bcm2835_clk_desc *desc; + const size_t asize = ARRAY_SIZE(clk_desc_array); + size_t i; ++ int ret; + + cprman = devm_kzalloc(dev, + sizeof(*cprman) + asize * sizeof(*clks), +@@ -1840,6 +1861,10 @@ static int bcm2835_clk_probe(struct platform_device *pdev) + clks[i] = desc->clk_register(cprman, desc->data); + } + ++ ret = bcm2835_mark_sdc_parent_critical(clks[BCM2835_CLOCK_SDRAM]); ++ if (ret) ++ return ret; ++ + return of_clk_add_provider(dev->of_node, of_clk_src_onecell_get, + &cprman->onecell); + } +-- +cgit v0.12 + +From 67615c588a059b731df9d019edc3c561d8006ec9 Mon Sep 17 00:00:00 2001 +From: Eric Anholt +Date: Wed, 1 Jun 2016 12:05:36 -0700 +Subject: clk: bcm2835: Skip PLLC clocks when deciding on a new clock parent + +If the firmware had set up a clock to source from PLLC, go along with +it. But if we're looking for a new parent, we don't want to switch it +to PLLC because the firmware will force PLLC (and thus the AXI bus +clock) to different frequencies during over-temp/under-voltage, +without notification to Linux. + +On my system, this moves the Linux-enabled HDMI state machine and DSI1 +escape clock over to plld_per from pllc_per. EMMC still ends up on +pllc_per, because the firmware had set it up to use that. + +Signed-off-by: Eric Anholt +Fixes: 41691b8862e2 ("clk: bcm2835: Add support for programming the audio domain clocks") +Acked-by: Martin Sperl +Signed-off-by: Stephen Boyd +--- + drivers/clk/bcm/clk-bcm2835.c | 23 +++++++++++++++++++++++ + 1 file changed, 23 insertions(+) + +diff --git a/drivers/clk/bcm/clk-bcm2835.c b/drivers/clk/bcm/clk-bcm2835.c +index c6420b3..e8a9646a 100644 +--- a/drivers/clk/bcm/clk-bcm2835.c ++++ b/drivers/clk/bcm/clk-bcm2835.c +@@ -1009,16 +1009,28 @@ static int bcm2835_clock_set_rate(struct clk_hw *hw, + return 0; + } + ++static bool ++bcm2835_clk_is_pllc(struct clk_hw *hw) ++{ ++ if (!hw) ++ return false; ++ ++ return strncmp(clk_hw_get_name(hw), "pllc", 4) == 0; ++} ++ + static int bcm2835_clock_determine_rate(struct clk_hw *hw, + struct clk_rate_request *req) + { + struct bcm2835_clock *clock = bcm2835_clock_from_hw(hw); + struct clk_hw *parent, *best_parent = NULL; ++ bool current_parent_is_pllc; + unsigned long rate, best_rate = 0; + unsigned long prate, best_prate = 0; + size_t i; + u32 div; + ++ current_parent_is_pllc = bcm2835_clk_is_pllc(clk_hw_get_parent(hw)); ++ + /* + * Select parent clock that results in the closest but lower rate + */ +@@ -1026,6 +1038,17 @@ static int bcm2835_clock_determine_rate(struct clk_hw *hw, + parent = clk_hw_get_parent_by_index(hw, i); + if (!parent) + continue; ++ ++ /* ++ * Don't choose a PLLC-derived clock as our parent ++ * unless it had been manually set that way. PLLC's ++ * frequency gets adjusted by the firmware due to ++ * over-temp or under-voltage conditions, without ++ * prior notification to our clock consumer. ++ */ ++ if (bcm2835_clk_is_pllc(parent) && !current_parent_is_pllc) ++ continue; ++ + prate = clk_hw_get_rate(parent); + div = bcm2835_clock_choose_div(hw, req->rate, prate, true); + rate = bcm2835_clock_rate_from_divisor(clock, prate, div); +-- +cgit v0.12 + From f3c3071de7a2955e4efa4870598fe39575d39d32 Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Thu, 27 Oct 2016 09:24:14 -0500 Subject: [PATCH 154/275] CVE-2016-9083 CVE-2016-9084 vfio multiple flaws --- kernel.spec | 6 ++ ...-Fix-integer-overflows-bitmask-check.patch | 102 ++++++++++++++++++ 2 files changed, 108 insertions(+) create mode 100644 v3-vfio-pci-Fix-integer-overflows-bitmask-check.patch diff --git a/kernel.spec b/kernel.spec index f93df36dd..f7e608d7f 100644 --- a/kernel.spec +++ b/kernel.spec @@ -625,6 +625,9 @@ Patch848: 0001-cpupower-Correct-return-type-of-cpu_power_is_cpu_onl.patch #ongoing complaint, full discussion delayed until ksummit/plumbers Patch849: 0001-iio-Use-event-header-from-kernel-tree.patch +# CVE-2016-9083 CVE-2016-9084 rhbz 1389258 1389259 1389285 +Patch850: v3-vfio-pci-Fix-integer-overflows-bitmask-check.patch + # END OF PATCH DEFINITIONS %endif @@ -2152,6 +2155,9 @@ fi # # %changelog +* Thu Oct 27 2016 Justin M. Forbes +- CVE-2016-9083 CVE-2016-9084 vfio multiple flaws (rhbz 1389258 1389259 1389285) + * Mon Oct 24 2016 Justin M. Forbes - 4.8.4-200 - Linux v4.8.4 rebase diff --git a/v3-vfio-pci-Fix-integer-overflows-bitmask-check.patch b/v3-vfio-pci-Fix-integer-overflows-bitmask-check.patch new file mode 100644 index 000000000..5278d4486 --- /dev/null +++ b/v3-vfio-pci-Fix-integer-overflows-bitmask-check.patch @@ -0,0 +1,102 @@ +From patchwork Wed Oct 12 16:51:24 2016 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +Subject: [v3] vfio/pci: Fix integer overflows, bitmask check +From: Vlad Tsyrklevich +X-Patchwork-Id: 9373631 +Message-Id: <1476291084-50737-1-git-send-email-vlad@tsyrklevich.net> +To: kvm@vger.kernel.org +Cc: alex.williamson@redhat.com, Vlad Tsyrklevich +Date: Wed, 12 Oct 2016 18:51:24 +0200 + +The VFIO_DEVICE_SET_IRQS ioctl did not sufficiently sanitize +user-supplied integers, potentially allowing memory corruption. This +patch adds appropriate integer overflow checks, checks the range bounds +for VFIO_IRQ_SET_DATA_NONE, and also verifies that only single element +in the VFIO_IRQ_SET_DATA_TYPE_MASK bitmask is set. +VFIO_IRQ_SET_ACTION_TYPE_MASK is already correctly checked later in +vfio_pci_set_irqs_ioctl(). + +Furthermore, a kzalloc is changed to a kcalloc because the use of a +kzalloc with an integer multiplication allowed an integer overflow +condition to be reached without this patch. kcalloc checks for overflow +and should prevent a similar occurrence. + +Signed-off-by: Vlad Tsyrklevich +--- + drivers/vfio/pci/vfio_pci.c | 33 +++++++++++++++++++++------------ + drivers/vfio/pci/vfio_pci_intrs.c | 2 +- + 2 files changed, 22 insertions(+), 13 deletions(-) + +diff --git a/drivers/vfio/pci/vfio_pci.c b/drivers/vfio/pci/vfio_pci.c +index d624a52..031bc08 100644 +--- a/drivers/vfio/pci/vfio_pci.c ++++ b/drivers/vfio/pci/vfio_pci.c +@@ -829,8 +829,9 @@ static long vfio_pci_ioctl(void *device_data, + + } else if (cmd == VFIO_DEVICE_SET_IRQS) { + struct vfio_irq_set hdr; ++ size_t size; + u8 *data = NULL; +- int ret = 0; ++ int max, ret = 0; + + minsz = offsetofend(struct vfio_irq_set, count); + +@@ -838,23 +839,31 @@ static long vfio_pci_ioctl(void *device_data, + return -EFAULT; + + if (hdr.argsz < minsz || hdr.index >= VFIO_PCI_NUM_IRQS || ++ hdr.count >= (U32_MAX - hdr.start) || + hdr.flags & ~(VFIO_IRQ_SET_DATA_TYPE_MASK | + VFIO_IRQ_SET_ACTION_TYPE_MASK)) + return -EINVAL; + +- if (!(hdr.flags & VFIO_IRQ_SET_DATA_NONE)) { +- size_t size; +- int max = vfio_pci_get_irq_count(vdev, hdr.index); ++ max = vfio_pci_get_irq_count(vdev, hdr.index); ++ if (hdr.start >= max || hdr.start + hdr.count > max) ++ return -EINVAL; + +- if (hdr.flags & VFIO_IRQ_SET_DATA_BOOL) +- size = sizeof(uint8_t); +- else if (hdr.flags & VFIO_IRQ_SET_DATA_EVENTFD) +- size = sizeof(int32_t); +- else +- return -EINVAL; ++ switch (hdr.flags & VFIO_IRQ_SET_DATA_TYPE_MASK) { ++ case VFIO_IRQ_SET_DATA_NONE: ++ size = 0; ++ break; ++ case VFIO_IRQ_SET_DATA_BOOL: ++ size = sizeof(uint8_t); ++ break; ++ case VFIO_IRQ_SET_DATA_EVENTFD: ++ size = sizeof(int32_t); ++ break; ++ default: ++ return -EINVAL; ++ } + +- if (hdr.argsz - minsz < hdr.count * size || +- hdr.start >= max || hdr.start + hdr.count > max) ++ if (size) { ++ if (hdr.argsz - minsz < hdr.count * size) + return -EINVAL; + + data = memdup_user((void __user *)(arg + minsz), +diff --git a/drivers/vfio/pci/vfio_pci_intrs.c b/drivers/vfio/pci/vfio_pci_intrs.c +index c2e6089..1c46045 100644 +--- a/drivers/vfio/pci/vfio_pci_intrs.c ++++ b/drivers/vfio/pci/vfio_pci_intrs.c +@@ -256,7 +256,7 @@ static int vfio_msi_enable(struct vfio_pci_device *vdev, int nvec, bool msix) + if (!is_irq_none(vdev)) + return -EINVAL; + +- vdev->ctx = kzalloc(nvec * sizeof(struct vfio_pci_irq_ctx), GFP_KERNEL); ++ vdev->ctx = kcalloc(nvec, sizeof(struct vfio_pci_irq_ctx), GFP_KERNEL); + if (!vdev->ctx) + return -ENOMEM; + From c0213042abbbd5d64ddb94454964f9f1750308c5 Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Thu, 27 Oct 2016 11:08:21 -0500 Subject: [PATCH 155/275] Skylake i915 fixes from 4.9 --- ...l_Backport_watermark_fixes_for_4.8.y.patch | 1247 +++++++++++++++++ kernel.spec | 4 + 2 files changed, 1251 insertions(+) create mode 100644 drm_i915_skl_Backport_watermark_fixes_for_4.8.y.patch diff --git a/drm_i915_skl_Backport_watermark_fixes_for_4.8.y.patch b/drm_i915_skl_Backport_watermark_fixes_for_4.8.y.patch new file mode 100644 index 000000000..cf2a7dfef --- /dev/null +++ b/drm_i915_skl_Backport_watermark_fixes_for_4.8.y.patch @@ -0,0 +1,1247 @@ +From: Lyude +To: kernel@lists.fedoraproject.org +Subject: [PATCH 0/5] drm/i915/skl: Backport watermark fixes for 4.8.y +Date: Thu, 27 Oct 2016 10:49:34 -0400 + +Hey! Hans de Geode requested that I also send this patch series to you guys. +These are the fixes for most (maybe even all) of the issues with display +flickering that users have been seeing on Skylake systems. They've already been +submitted for inclusion in 4.8.y. + + Original message + +Now that these have finally made it into 4.9, it's time to finally backport +these fixes. Skylake has been a mess in multi-monitor setups for a while now +because up until recently we've been updating the watermarks on Skylake just +like we would for previous generations of Intel GPUs. This means updating +attributes for each plane, and then only after they've been updated writing +their new watermark values. + +The problem with this approach is Skylake has double buffered watermark +registers that are flipped at the same time as the rest of the plane registers. +This means that the original approach will leave planes active with new +attributes but without the required watermark programming that would ensure the +display pipe reads enough data from each plane. As a result, pipes start to +underrun and the user's displays starts to flicker heavily. Usually in response +to plugging in new monitors, or moving cursors from one screen to another +(which triggers a plane and watermark update). + +Additionally, issues were found with the original code for configuring ddb, +display data buffer, allocations between display planes on Skylake. On Skylake +all planes have space allocated to them in the ddb, and the hardware requires +that these allocations never overlap at any point in time. Because ddb +allocations were not updated alongside plane attributes despite also being +double buffered registers armed by plane updates, planes were likely to get +stuck momentarily with ddb allocations that overlapped one another. This would +also lead to pipe underruns and display flickering. + +The new approach fixes this problem by making sure that on Skylake, attributes +for display planes are always updated at the same time as the watermarks, and +pipes are updated in an order that ensures their ddb allocations don't +overlap at any point between plane updates. This ensures the display pipes are +always programmed correctly, and dramatically reduces the chance of display +flickering. + +(note: my e-mail has changed since these patches were upstreamed, and I updated +the e-mails in these patches to reflect this. if this is wrong I will be happy +to update and resend the patches). + +Lyude (4): + drm/i915/skl: Update plane watermarks atomically during plane updates + drm/i915: Move CRTC updating in atomic_commit into it's own hook + drm/i915/skl: Update DDB values atomically with wms/plane attrs + drm/i915/skl: Don't try to update plane watermarks if they haven't + changed + +Paulo Zanoni (1): + drm/i915/gen9: only add the planes actually affected by ddb changes + + drivers/gpu/drm/i915/i915_drv.h | 2 + + drivers/gpu/drm/i915/intel_display.c | 189 +++++++++++++++++++----- + drivers/gpu/drm/i915/intel_drv.h | 12 ++ + drivers/gpu/drm/i915/intel_pm.c | 271 ++++++++++++++--------------------- + drivers/gpu/drm/i915/intel_sprite.c | 14 ++ + 5 files changed, 289 insertions(+), 199 deletions(-) + +-- +2.7.4 +_______________________________________________ +kernel mailing list -- kernel@lists.fedoraproject.org +To unsubscribe send an email to kernel-leave@lists.fedoraproject.org + +From: Lyude +To: kernel@lists.fedoraproject.org +Subject: [PATCH 1/5] drm/i915/skl: Update plane watermarks atomically + during plane updates +Date: Thu, 27 Oct 2016 10:49:35 -0400 + +commit c145d3be1c313184be71d2629fd575561b7e38d4 upstream + +Thanks to Ville for suggesting this as a potential solution to pipe +underruns on Skylake. + +On Skylake all of the registers for configuring planes, including the +registers for configuring their watermarks, are double buffered. New +values written to them won't take effect until said registers are +"armed", which is done by writing to the PLANE_SURF (or in the case of +cursor planes, the CURBASE register) register. + +With this in mind, up until now we've been updating watermarks on skl +like this: + + non-modeset { + - calculate (during atomic check phase) + - finish_atomic_commit: + - intel_pre_plane_update: + - intel_update_watermarks() + - {vblank happens; new watermarks + old plane values => underrun } + - drm_atomic_helper_commit_planes_on_crtc: + - start vblank evasion + - write new plane registers + - end vblank evasion + } + + or + + modeset { + - calculate (during atomic check phase) + - finish_atomic_commit: + - crtc_enable: + - intel_update_watermarks() + - {vblank happens; new watermarks + old plane values => underrun } + - drm_atomic_helper_commit_planes_on_crtc: + - start vblank evasion + - write new plane registers + - end vblank evasion + } + +Now we update watermarks atomically like this: + + non-modeset { + - calculate (during atomic check phase) + - finish_atomic_commit: + - intel_pre_plane_update: + - intel_update_watermarks() (wm values aren't written yet) + - drm_atomic_helper_commit_planes_on_crtc: + - start vblank evasion + - write new plane registers + - write new wm values + - end vblank evasion + } + + modeset { + - calculate (during atomic check phase) + - finish_atomic_commit: + - crtc_enable: + - intel_update_watermarks() (actual wm values aren't written + yet) + - drm_atomic_helper_commit_planes_on_crtc: + - start vblank evasion + - write new plane registers + - write new wm values + - end vblank evasion + } + +So this patch moves all of the watermark writes into the right place; +inside of the vblank evasion where we update all of the registers for +each plane. While this patch doesn't fix everything, it does allow us to +update the watermark values in the way the hardware expects us to. + +Changes since original patch series: + - Remove mutex_lock/mutex_unlock since they don't do anything and we're + not touching global state + - Move skl_write_cursor_wm/skl_write_plane_wm functions into + intel_pm.c, make externally visible + - Add skl_write_plane_wm calls to skl_update_plane + - Fix conditional for for loop in skl_write_plane_wm (level < max_level + should be level <= max_level) + - Make diagram in commit more accurate to what's actually happening + - Add Fixes: + +Changes since v1: + - Use IS_GEN9() instead of IS_SKYLAKE() since these fixes apply to more + then just Skylake + - Update description to make it clear this patch doesn't fix everything + - Check if pipes were actually changed before writing watermarks + +Changes since v2: + - Write PIPE_WM_LINETIME during vblank evasion + +Changes since v3: + - Rebase against new SAGV patch changes + +Changes since v4: + - Add a parameter to choose what skl_wm_values struct to use when + writing new plane watermarks + +Changes since v5: + - Remove cursor ddb entry write in skl_write_cursor_wm(), defer until + patch 6 + - Write WM_LINETIME in intel_begin_crtc_commit() + +Changes since v6: + - Remove redundant dirty_pipes check in skl_write_plane_wm (we check + this in all places where we call this function, and it was supposed + to have been removed earlier anyway) + - In i9xx_update_cursor(), use dev_priv->info.gen >= 9 instead of + IS_GEN9(dev_priv). We do this everywhere else and I'd imagine this + needs to be done for gen10 as well + +Changes since v7: + - Fix rebase fail (unused variable obj) + - Make struct skl_wm_values *wm const + - Fix indenting + - Use INTEL_GEN() instead of dev_priv->info.gen + +Changes since v8: + - Don't forget calls to skl_write_plane_wm() when disabling planes + - Use INTEL_GEN(), not INTEL_INFO()->gen in intel_begin_crtc_commit() + +Fixes: 2d41c0b59afc ("drm/i915/skl: SKL Watermark Computation") +Signed-off-by: Lyude +Reviewed-by: Matt Roper +Cc: stable@vger.kernel.org +Cc: Ville Syrjälä +Cc: Daniel Vetter +Cc: Radhakrishna Sripada +Cc: Hans de Goede +Signed-off-by: Maarten Lankhorst +Link: http://patchwork.freedesktop.org/patch/msgid/1471884608-10671-1-git-send-email-cpaul@redhat.com +Link: http://patchwork.freedesktop.org/patch/msgid/1471884608-10671-1-git-send-email-cpaul@redhat.com +--- + drivers/gpu/drm/i915/intel_display.c | 21 +++++++++++++-- + drivers/gpu/drm/i915/intel_drv.h | 5 ++++ + drivers/gpu/drm/i915/intel_pm.c | 50 ++++++++++++++++++++++++------------ + drivers/gpu/drm/i915/intel_sprite.c | 6 +++++ + 4 files changed, 64 insertions(+), 18 deletions(-) + +diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c +index 175595f..1ae587f 100644 +--- a/drivers/gpu/drm/i915/intel_display.c ++++ b/drivers/gpu/drm/i915/intel_display.c +@@ -2980,6 +2980,7 @@ static void skylake_update_primary_plane(struct drm_plane *plane, + struct intel_crtc *intel_crtc = to_intel_crtc(crtc_state->base.crtc); + struct drm_framebuffer *fb = plane_state->base.fb; + struct drm_i915_gem_object *obj = intel_fb_obj(fb); ++ const struct skl_wm_values *wm = &dev_priv->wm.skl_results; + int pipe = intel_crtc->pipe; + u32 plane_ctl, stride_div, stride; + u32 tile_height, plane_offset, plane_size; +@@ -3031,6 +3032,9 @@ static void skylake_update_primary_plane(struct drm_plane *plane, + intel_crtc->adjusted_x = x_offset; + intel_crtc->adjusted_y = y_offset; + ++ if (wm->dirty_pipes & drm_crtc_mask(&intel_crtc->base)) ++ skl_write_plane_wm(intel_crtc, wm, 0); ++ + I915_WRITE(PLANE_CTL(pipe, 0), plane_ctl); + I915_WRITE(PLANE_OFFSET(pipe, 0), plane_offset); + I915_WRITE(PLANE_SIZE(pipe, 0), plane_size); +@@ -3061,7 +3065,10 @@ static void skylake_disable_primary_plane(struct drm_plane *primary, + { + struct drm_device *dev = crtc->dev; + struct drm_i915_private *dev_priv = to_i915(dev); +- int pipe = to_intel_crtc(crtc)->pipe; ++ struct intel_crtc *intel_crtc = to_intel_crtc(crtc); ++ int pipe = intel_crtc->pipe; ++ ++ skl_write_plane_wm(intel_crtc, &dev_priv->wm.skl_results, 0); + + I915_WRITE(PLANE_CTL(pipe, 0), 0); + I915_WRITE(PLANE_SURF(pipe, 0), 0); +@@ -10306,9 +10313,13 @@ static void i9xx_update_cursor(struct drm_crtc *crtc, u32 base, + struct drm_device *dev = crtc->dev; + struct drm_i915_private *dev_priv = to_i915(dev); + struct intel_crtc *intel_crtc = to_intel_crtc(crtc); ++ const struct skl_wm_values *wm = &dev_priv->wm.skl_results; + int pipe = intel_crtc->pipe; + uint32_t cntl = 0; + ++ if (INTEL_GEN(dev_priv) >= 9 && wm->dirty_pipes & drm_crtc_mask(crtc)) ++ skl_write_cursor_wm(intel_crtc, wm); ++ + if (plane_state && plane_state->visible) { + cntl = MCURSOR_GAMMA_ENABLE; + switch (plane_state->base.crtc_w) { +@@ -14221,10 +14232,12 @@ static void intel_begin_crtc_commit(struct drm_crtc *crtc, + struct drm_crtc_state *old_crtc_state) + { + struct drm_device *dev = crtc->dev; ++ struct drm_i915_private *dev_priv = to_i915(dev); + struct intel_crtc *intel_crtc = to_intel_crtc(crtc); + struct intel_crtc_state *old_intel_state = + to_intel_crtc_state(old_crtc_state); + bool modeset = needs_modeset(crtc->state); ++ enum pipe pipe = intel_crtc->pipe; + + /* Perform vblank evasion around commit operation */ + intel_pipe_update_start(intel_crtc); +@@ -14239,8 +14252,12 @@ static void intel_begin_crtc_commit(struct drm_crtc *crtc, + + if (to_intel_crtc_state(crtc->state)->update_pipe) + intel_update_pipe_config(intel_crtc, old_intel_state); +- else if (INTEL_INFO(dev)->gen >= 9) ++ else if (INTEL_GEN(dev_priv) >= 9) { + skl_detach_scalers(intel_crtc); ++ ++ I915_WRITE(PIPE_WM_LINETIME(pipe), ++ dev_priv->wm.skl_hw.wm_linetime[pipe]); ++ } + } + + static void intel_finish_crtc_commit(struct drm_crtc *crtc, +diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h +index ff399b9..58a8152 100644 +--- a/drivers/gpu/drm/i915/intel_drv.h ++++ b/drivers/gpu/drm/i915/intel_drv.h +@@ -1719,6 +1719,11 @@ void skl_ddb_get_hw_state(struct drm_i915_private *dev_priv, + bool skl_can_enable_sagv(struct drm_atomic_state *state); + int skl_enable_sagv(struct drm_i915_private *dev_priv); + int skl_disable_sagv(struct drm_i915_private *dev_priv); ++void skl_write_cursor_wm(struct intel_crtc *intel_crtc, ++ const struct skl_wm_values *wm); ++void skl_write_plane_wm(struct intel_crtc *intel_crtc, ++ const struct skl_wm_values *wm, ++ int plane); + uint32_t ilk_pipe_pixel_rate(const struct intel_crtc_state *pipe_config); + bool ilk_disable_lp_wm(struct drm_device *dev); + int sanitize_rc6_option(struct drm_i915_private *dev_priv, int enable_rc6); +diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c +index 2d24813..29bed77 100644 +--- a/drivers/gpu/drm/i915/intel_pm.c ++++ b/drivers/gpu/drm/i915/intel_pm.c +@@ -3828,6 +3828,39 @@ static void skl_ddb_entry_write(struct drm_i915_private *dev_priv, + I915_WRITE(reg, 0); + } + ++void skl_write_plane_wm(struct intel_crtc *intel_crtc, ++ const struct skl_wm_values *wm, ++ int plane) ++{ ++ struct drm_crtc *crtc = &intel_crtc->base; ++ struct drm_device *dev = crtc->dev; ++ struct drm_i915_private *dev_priv = to_i915(dev); ++ int level, max_level = ilk_wm_max_level(dev); ++ enum pipe pipe = intel_crtc->pipe; ++ ++ for (level = 0; level <= max_level; level++) { ++ I915_WRITE(PLANE_WM(pipe, plane, level), ++ wm->plane[pipe][plane][level]); ++ } ++ I915_WRITE(PLANE_WM_TRANS(pipe, plane), wm->plane_trans[pipe][plane]); ++} ++ ++void skl_write_cursor_wm(struct intel_crtc *intel_crtc, ++ const struct skl_wm_values *wm) ++{ ++ struct drm_crtc *crtc = &intel_crtc->base; ++ struct drm_device *dev = crtc->dev; ++ struct drm_i915_private *dev_priv = to_i915(dev); ++ int level, max_level = ilk_wm_max_level(dev); ++ enum pipe pipe = intel_crtc->pipe; ++ ++ for (level = 0; level <= max_level; level++) { ++ I915_WRITE(CUR_WM(pipe, level), ++ wm->plane[pipe][PLANE_CURSOR][level]); ++ } ++ I915_WRITE(CUR_WM_TRANS(pipe), wm->plane_trans[pipe][PLANE_CURSOR]); ++} ++ + static void skl_write_wm_values(struct drm_i915_private *dev_priv, + const struct skl_wm_values *new) + { +@@ -3835,7 +3868,7 @@ static void skl_write_wm_values(struct drm_i915_private *dev_priv, + struct intel_crtc *crtc; + + for_each_intel_crtc(dev, crtc) { +- int i, level, max_level = ilk_wm_max_level(dev); ++ int i; + enum pipe pipe = crtc->pipe; + + if ((new->dirty_pipes & drm_crtc_mask(&crtc->base)) == 0) +@@ -3843,21 +3876,6 @@ static void skl_write_wm_values(struct drm_i915_private *dev_priv, + if (!crtc->active) + continue; + +- I915_WRITE(PIPE_WM_LINETIME(pipe), new->wm_linetime[pipe]); +- +- for (level = 0; level <= max_level; level++) { +- for (i = 0; i < intel_num_planes(crtc); i++) +- I915_WRITE(PLANE_WM(pipe, i, level), +- new->plane[pipe][i][level]); +- I915_WRITE(CUR_WM(pipe, level), +- new->plane[pipe][PLANE_CURSOR][level]); +- } +- for (i = 0; i < intel_num_planes(crtc); i++) +- I915_WRITE(PLANE_WM_TRANS(pipe, i), +- new->plane_trans[pipe][i]); +- I915_WRITE(CUR_WM_TRANS(pipe), +- new->plane_trans[pipe][PLANE_CURSOR]); +- + for (i = 0; i < intel_num_planes(crtc); i++) { + skl_ddb_entry_write(dev_priv, + PLANE_BUF_CFG(pipe, i), +diff --git a/drivers/gpu/drm/i915/intel_sprite.c b/drivers/gpu/drm/i915/intel_sprite.c +index 7c08e4f..d8bfff1 100644 +--- a/drivers/gpu/drm/i915/intel_sprite.c ++++ b/drivers/gpu/drm/i915/intel_sprite.c +@@ -203,6 +203,9 @@ skl_update_plane(struct drm_plane *drm_plane, + struct intel_plane *intel_plane = to_intel_plane(drm_plane); + struct drm_framebuffer *fb = plane_state->base.fb; + struct drm_i915_gem_object *obj = intel_fb_obj(fb); ++ const struct skl_wm_values *wm = &dev_priv->wm.skl_results; ++ struct drm_crtc *crtc = crtc_state->base.crtc; ++ struct intel_crtc *intel_crtc = to_intel_crtc(crtc); + const int pipe = intel_plane->pipe; + const int plane = intel_plane->plane + 1; + u32 plane_ctl, stride_div, stride; +@@ -238,6 +241,9 @@ skl_update_plane(struct drm_plane *drm_plane, + crtc_w--; + crtc_h--; + ++ if (wm->dirty_pipes & drm_crtc_mask(crtc)) ++ skl_write_plane_wm(intel_crtc, wm, plane); ++ + if (key->flags) { + I915_WRITE(PLANE_KEYVAL(pipe, plane), key->min_value); + I915_WRITE(PLANE_KEYMAX(pipe, plane), key->max_value); +-- +2.7.4 +_______________________________________________ +kernel mailing list -- kernel@lists.fedoraproject.org +To unsubscribe send an email to kernel-leave@lists.fedoraproject.org + +From: Lyude +To: kernel@lists.fedoraproject.org +Subject: [PATCH 2/5] drm/i915: Move CRTC updating in atomic_commit into + it's own hook +Date: Thu, 27 Oct 2016 10:49:36 -0400 + +commit 896e5bb022bce64e29ce2e1b2fc2a7476d311a15 upstream + +Since we have to write ddb allocations at the same time as we do other +plane updates, we're going to need to be able to control the order in +which we execute modesets on each pipe. The easiest way to do this is to +just factor this section of intel_atomic_commit_tail() +(intel_atomic_commit() for stable branches) into it's own function, and +add an appropriate display function hook for it. + +Based off of Matt Rope's suggestions + +Changes since v1: + - Drop pipe_config->base.active check in intel_update_crtcs() since we + check that before calling the function + +Signed-off-by: Lyude +Reviewed-by: Matt Roper +Cc: Ville Syrjälä +Cc: Daniel Vetter +Cc: Radhakrishna Sripada +Cc: Hans de Goede + +Signed-off-by: Lyude +Signed-off-by: Maarten Lankhorst +Link: http://patchwork.freedesktop.org/patch/msgid/1471961565-28540-1-git-send-email-cpaul@redhat.com +--- + drivers/gpu/drm/i915/i915_drv.h | 2 + + drivers/gpu/drm/i915/intel_display.c | 74 +++++++++++++++++++++++++----------- + 2 files changed, 54 insertions(+), 22 deletions(-) + +diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h +index f68c789..ad75dbd 100644 +--- a/drivers/gpu/drm/i915/i915_drv.h ++++ b/drivers/gpu/drm/i915/i915_drv.h +@@ -631,6 +631,8 @@ struct drm_i915_display_funcs { + struct intel_crtc_state *crtc_state); + void (*crtc_enable)(struct drm_crtc *crtc); + void (*crtc_disable)(struct drm_crtc *crtc); ++ void (*update_crtcs)(struct drm_atomic_state *state, ++ unsigned int *crtc_vblank_mask); + void (*audio_codec_enable)(struct drm_connector *connector, + struct intel_encoder *encoder, + const struct drm_display_mode *adjusted_mode); +diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c +index 1ae587f..e2c46eb 100644 +--- a/drivers/gpu/drm/i915/intel_display.c ++++ b/drivers/gpu/drm/i915/intel_display.c +@@ -13682,6 +13682,52 @@ static bool needs_vblank_wait(struct intel_crtc_state *crtc_state) + return false; + } + ++static void intel_update_crtc(struct drm_crtc *crtc, ++ struct drm_atomic_state *state, ++ struct drm_crtc_state *old_crtc_state, ++ unsigned int *crtc_vblank_mask) ++{ ++ struct drm_device *dev = crtc->dev; ++ struct drm_i915_private *dev_priv = to_i915(dev); ++ struct intel_crtc *intel_crtc = to_intel_crtc(crtc); ++ struct intel_crtc_state *pipe_config = to_intel_crtc_state(crtc->state); ++ bool modeset = needs_modeset(crtc->state); ++ ++ if (modeset) { ++ update_scanline_offset(intel_crtc); ++ dev_priv->display.crtc_enable(crtc); ++ } else { ++ intel_pre_plane_update(to_intel_crtc_state(old_crtc_state)); ++ } ++ ++ if (drm_atomic_get_existing_plane_state(state, crtc->primary)) { ++ intel_fbc_enable( ++ intel_crtc, pipe_config, ++ to_intel_plane_state(crtc->primary->state)); ++ } ++ ++ drm_atomic_helper_commit_planes_on_crtc(old_crtc_state); ++ ++ if (needs_vblank_wait(pipe_config)) ++ *crtc_vblank_mask |= drm_crtc_mask(crtc); ++} ++ ++static void intel_update_crtcs(struct drm_atomic_state *state, ++ unsigned int *crtc_vblank_mask) ++{ ++ struct drm_crtc *crtc; ++ struct drm_crtc_state *old_crtc_state; ++ int i; ++ ++ for_each_crtc_in_state(state, crtc, old_crtc_state, i) { ++ if (!crtc->state->active) ++ continue; ++ ++ intel_update_crtc(crtc, state, old_crtc_state, ++ crtc_vblank_mask); ++ } ++} ++ + static void intel_atomic_commit_tail(struct drm_atomic_state *state) + { + struct drm_device *dev = state->dev; +@@ -13780,17 +13826,9 @@ static void intel_atomic_commit_tail(struct drm_atomic_state *state) + intel_modeset_verify_disabled(dev); + } + +- /* Now enable the clocks, plane, pipe, and connectors that we set up. */ ++ /* Complete the events for pipes that have now been disabled */ + for_each_crtc_in_state(state, crtc, old_crtc_state, i) { +- struct intel_crtc *intel_crtc = to_intel_crtc(crtc); + bool modeset = needs_modeset(crtc->state); +- struct intel_crtc_state *pipe_config = +- to_intel_crtc_state(crtc->state); +- +- if (modeset && crtc->state->active) { +- update_scanline_offset(to_intel_crtc(crtc)); +- dev_priv->display.crtc_enable(crtc); +- } + + /* Complete events for now disable pipes here. */ + if (modeset && !crtc->state->active && crtc->state->event) { +@@ -13800,21 +13838,11 @@ static void intel_atomic_commit_tail(struct drm_atomic_state *state) + + crtc->state->event = NULL; + } +- +- if (!modeset) +- intel_pre_plane_update(to_intel_crtc_state(old_crtc_state)); +- +- if (crtc->state->active && +- drm_atomic_get_existing_plane_state(state, crtc->primary)) +- intel_fbc_enable(intel_crtc, pipe_config, to_intel_plane_state(crtc->primary->state)); +- +- if (crtc->state->active) +- drm_atomic_helper_commit_planes_on_crtc(old_crtc_state); +- +- if (pipe_config->base.active && needs_vblank_wait(pipe_config)) +- crtc_vblank_mask |= 1 << i; + } + ++ /* Now enable the clocks, plane, pipe, and connectors that we set up. */ ++ dev_priv->display.update_crtcs(state, &crtc_vblank_mask); ++ + /* FIXME: We should call drm_atomic_helper_commit_hw_done() here + * already, but still need the state for the delayed optimization. To + * fix this: +@@ -15275,6 +15303,8 @@ void intel_init_display_hooks(struct drm_i915_private *dev_priv) + dev_priv->display.crtc_disable = i9xx_crtc_disable; + } + ++ dev_priv->display.update_crtcs = intel_update_crtcs; ++ + /* Returns the core display clock speed */ + if (IS_SKYLAKE(dev_priv) || IS_KABYLAKE(dev_priv)) + dev_priv->display.get_display_clock_speed = +-- +2.7.4 +_______________________________________________ +kernel mailing list -- kernel@lists.fedoraproject.org +To unsubscribe send an email to kernel-leave@lists.fedoraproject.org + +From: Lyude +To: kernel@lists.fedoraproject.org +Subject: [PATCH 3/5] drm/i915/skl: Update DDB values atomically with + wms/plane attrs +Date: Thu, 27 Oct 2016 10:49:37 -0400 + +commit 27082493e9c6371b05370a619ab9d2877c5f4726 upstream + +Now that we can hook into update_crtcs and control the order in which we +update CRTCs at each modeset, we can finish the final step of fixing +Skylake's watermark handling by performing DDB updates at the same time +as plane updates and watermark updates. + +The first major change in this patch is skl_update_crtcs(), which +handles ensuring that we order each CRTC update in our atomic commits +properly so that they honor the DDB flush order. + +The second major change in this patch is the order in which we flush the +pipes. While the previous order may have worked, it can't be used in +this approach since it no longer will do the right thing. For example, +using the old ddb flush order: + +We have pipes A, B, and C enabled, and we're disabling C. Initial ddb +allocation looks like this: + +| A | B |xxxxxxx| + +Since we're performing the ddb updates after performing any CRTC +disablements in intel_atomic_commit_tail(), the space to the right of +pipe B is unallocated. + +1. Flush pipes with new allocation contained into old space. None + apply, so we skip this +2. Flush pipes having their allocation reduced, but overlapping with a + previous allocation. None apply, so we also skip this +3. Flush pipes that got more space allocated. This applies to A and B, + giving us the following update order: A, B + +This is wrong, since updating pipe A first will cause it to overlap with +B and potentially burst into flames. Our new order (see the code +comments for details) would update the pipes in the proper order: B, A. + +As well, we calculate the order for each DDB update during the check +phase, and reference it later in the commit phase when we hit +skl_update_crtcs(). + +This long overdue patch fixes the rest of the underruns on Skylake. + +Changes since v1: + - Add skl_ddb_entry_write() for cursor into skl_write_cursor_wm() +Changes since v2: + - Use the method for updating CRTCs that Ville suggested + - In skl_update_wm(), only copy the watermarks for the crtc that was + passed to us +Changes since v3: + - Small comment fix in skl_ddb_allocation_overlaps() +Changes since v4: + - Remove the second loop in intel_update_crtcs() and use Ville's + suggestion for updating the ddb allocations in the right order + - Get rid of the second loop and just use the ddb state as it updates + to determine what order to update everything in (thanks for the + suggestion Ville) + - Simplify skl_ddb_allocation_overlaps() + - Split actual overlap checking into it's own helper + +Fixes: 0e8fb7ba7ca5 ("drm/i915/skl: Flush the WM configuration") +Fixes: 8211bd5bdf5e ("drm/i915/skl: Program the DDB allocation") +[omitting CC for stable, since this patch will need to be changed for +such backports first] + +Testcase: kms_cursor_legacy +Testcase: plane-all-modeset-transition +Signed-off-by: Lyude +Cc: Ville Syrjälä +Cc: Daniel Vetter +Cc: Radhakrishna Sripada +Cc: Hans de Goede +Cc: Matt Roper +Signed-off-by: Maarten Lankhorst +Link: http://patchwork.freedesktop.org/patch/msgid/1471961565-28540-2-git-send-email-cpaul@redhat.com +--- + drivers/gpu/drm/i915/intel_display.c | 93 +++++++++++++--- + drivers/gpu/drm/i915/intel_drv.h | 7 ++ + drivers/gpu/drm/i915/intel_pm.c | 200 ++++++++--------------------------- + 3 files changed, 132 insertions(+), 168 deletions(-) + +diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c +index e2c46eb..8086e62 100644 +--- a/drivers/gpu/drm/i915/intel_display.c ++++ b/drivers/gpu/drm/i915/intel_display.c +@@ -12967,16 +12967,23 @@ static void verify_wm_state(struct drm_crtc *crtc, + hw_entry->start, hw_entry->end); + } + +- /* cursor */ +- hw_entry = &hw_ddb.plane[pipe][PLANE_CURSOR]; +- sw_entry = &sw_ddb->plane[pipe][PLANE_CURSOR]; +- +- if (!skl_ddb_entry_equal(hw_entry, sw_entry)) { +- DRM_ERROR("mismatch in DDB state pipe %c cursor " +- "(expected (%u,%u), found (%u,%u))\n", +- pipe_name(pipe), +- sw_entry->start, sw_entry->end, +- hw_entry->start, hw_entry->end); ++ /* ++ * cursor ++ * If the cursor plane isn't active, we may not have updated it's ddb ++ * allocation. In that case since the ddb allocation will be updated ++ * once the plane becomes visible, we can skip this check ++ */ ++ if (intel_crtc->cursor_addr) { ++ hw_entry = &hw_ddb.plane[pipe][PLANE_CURSOR]; ++ sw_entry = &sw_ddb->plane[pipe][PLANE_CURSOR]; ++ ++ if (!skl_ddb_entry_equal(hw_entry, sw_entry)) { ++ DRM_ERROR("mismatch in DDB state pipe %c cursor " ++ "(expected (%u,%u), found (%u,%u))\n", ++ pipe_name(pipe), ++ sw_entry->start, sw_entry->end, ++ hw_entry->start, hw_entry->end); ++ } + } + } + +@@ -13728,6 +13735,65 @@ static void intel_update_crtcs(struct drm_atomic_state *state, + } + } + ++static void skl_update_crtcs(struct drm_atomic_state *state, ++ unsigned int *crtc_vblank_mask) ++{ ++ struct drm_device *dev = state->dev; ++ struct drm_i915_private *dev_priv = to_i915(dev); ++ struct intel_atomic_state *intel_state = to_intel_atomic_state(state); ++ struct drm_crtc *crtc; ++ struct drm_crtc_state *old_crtc_state; ++ struct skl_ddb_allocation *new_ddb = &intel_state->wm_results.ddb; ++ struct skl_ddb_allocation *cur_ddb = &dev_priv->wm.skl_hw.ddb; ++ unsigned int updated = 0; ++ bool progress; ++ enum pipe pipe; ++ ++ /* ++ * Whenever the number of active pipes changes, we need to make sure we ++ * update the pipes in the right order so that their ddb allocations ++ * never overlap with eachother inbetween CRTC updates. Otherwise we'll ++ * cause pipe underruns and other bad stuff. ++ */ ++ do { ++ int i; ++ progress = false; ++ ++ for_each_crtc_in_state(state, crtc, old_crtc_state, i) { ++ bool vbl_wait = false; ++ unsigned int cmask = drm_crtc_mask(crtc); ++ pipe = to_intel_crtc(crtc)->pipe; ++ ++ if (updated & cmask || !crtc->state->active) ++ continue; ++ if (skl_ddb_allocation_overlaps(state, cur_ddb, new_ddb, ++ pipe)) ++ continue; ++ ++ updated |= cmask; ++ ++ /* ++ * If this is an already active pipe, it's DDB changed, ++ * and this isn't the last pipe that needs updating ++ * then we need to wait for a vblank to pass for the ++ * new ddb allocation to take effect. ++ */ ++ if (!skl_ddb_allocation_equals(cur_ddb, new_ddb, pipe) && ++ !crtc->state->active_changed && ++ intel_state->wm_results.dirty_pipes != updated) ++ vbl_wait = true; ++ ++ intel_update_crtc(crtc, state, old_crtc_state, ++ crtc_vblank_mask); ++ ++ if (vbl_wait) ++ intel_wait_for_vblank(dev, pipe); ++ ++ progress = true; ++ } ++ } while (progress); ++} ++ + static void intel_atomic_commit_tail(struct drm_atomic_state *state) + { + struct drm_device *dev = state->dev; +@@ -15303,8 +15369,6 @@ void intel_init_display_hooks(struct drm_i915_private *dev_priv) + dev_priv->display.crtc_disable = i9xx_crtc_disable; + } + +- dev_priv->display.update_crtcs = intel_update_crtcs; +- + /* Returns the core display clock speed */ + if (IS_SKYLAKE(dev_priv) || IS_KABYLAKE(dev_priv)) + dev_priv->display.get_display_clock_speed = +@@ -15394,6 +15458,11 @@ void intel_init_display_hooks(struct drm_i915_private *dev_priv) + skl_modeset_calc_cdclk; + } + ++ if (dev_priv->info.gen >= 9) ++ dev_priv->display.update_crtcs = skl_update_crtcs; ++ else ++ dev_priv->display.update_crtcs = intel_update_crtcs; ++ + switch (INTEL_INFO(dev_priv)->gen) { + case 2: + dev_priv->display.queue_flip = intel_gen2_queue_flip; +diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h +index 58a8152..83674c6 100644 +--- a/drivers/gpu/drm/i915/intel_drv.h ++++ b/drivers/gpu/drm/i915/intel_drv.h +@@ -1719,6 +1719,13 @@ void skl_ddb_get_hw_state(struct drm_i915_private *dev_priv, + bool skl_can_enable_sagv(struct drm_atomic_state *state); + int skl_enable_sagv(struct drm_i915_private *dev_priv); + int skl_disable_sagv(struct drm_i915_private *dev_priv); ++bool skl_ddb_allocation_equals(const struct skl_ddb_allocation *old, ++ const struct skl_ddb_allocation *new, ++ enum pipe pipe); ++bool skl_ddb_allocation_overlaps(struct drm_atomic_state *state, ++ const struct skl_ddb_allocation *old, ++ const struct skl_ddb_allocation *new, ++ enum pipe pipe); + void skl_write_cursor_wm(struct intel_crtc *intel_crtc, + const struct skl_wm_values *wm); + void skl_write_plane_wm(struct intel_crtc *intel_crtc, +diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c +index 29bed77..a0c5c4e 100644 +--- a/drivers/gpu/drm/i915/intel_pm.c ++++ b/drivers/gpu/drm/i915/intel_pm.c +@@ -3843,6 +3843,11 @@ void skl_write_plane_wm(struct intel_crtc *intel_crtc, + wm->plane[pipe][plane][level]); + } + I915_WRITE(PLANE_WM_TRANS(pipe, plane), wm->plane_trans[pipe][plane]); ++ ++ skl_ddb_entry_write(dev_priv, PLANE_BUF_CFG(pipe, plane), ++ &wm->ddb.plane[pipe][plane]); ++ skl_ddb_entry_write(dev_priv, PLANE_NV12_BUF_CFG(pipe, plane), ++ &wm->ddb.y_plane[pipe][plane]); + } + + void skl_write_cursor_wm(struct intel_crtc *intel_crtc, +@@ -3859,170 +3864,46 @@ void skl_write_cursor_wm(struct intel_crtc *intel_crtc, + wm->plane[pipe][PLANE_CURSOR][level]); + } + I915_WRITE(CUR_WM_TRANS(pipe), wm->plane_trans[pipe][PLANE_CURSOR]); +-} +- +-static void skl_write_wm_values(struct drm_i915_private *dev_priv, +- const struct skl_wm_values *new) +-{ +- struct drm_device *dev = &dev_priv->drm; +- struct intel_crtc *crtc; +- +- for_each_intel_crtc(dev, crtc) { +- int i; +- enum pipe pipe = crtc->pipe; +- +- if ((new->dirty_pipes & drm_crtc_mask(&crtc->base)) == 0) +- continue; +- if (!crtc->active) +- continue; +- +- for (i = 0; i < intel_num_planes(crtc); i++) { +- skl_ddb_entry_write(dev_priv, +- PLANE_BUF_CFG(pipe, i), +- &new->ddb.plane[pipe][i]); +- skl_ddb_entry_write(dev_priv, +- PLANE_NV12_BUF_CFG(pipe, i), +- &new->ddb.y_plane[pipe][i]); +- } + +- skl_ddb_entry_write(dev_priv, CUR_BUF_CFG(pipe), +- &new->ddb.plane[pipe][PLANE_CURSOR]); +- } ++ skl_ddb_entry_write(dev_priv, CUR_BUF_CFG(pipe), ++ &wm->ddb.plane[pipe][PLANE_CURSOR]); + } + +-/* +- * When setting up a new DDB allocation arrangement, we need to correctly +- * sequence the times at which the new allocations for the pipes are taken into +- * account or we'll have pipes fetching from space previously allocated to +- * another pipe. +- * +- * Roughly the sequence looks like: +- * 1. re-allocate the pipe(s) with the allocation being reduced and not +- * overlapping with a previous light-up pipe (another way to put it is: +- * pipes with their new allocation strickly included into their old ones). +- * 2. re-allocate the other pipes that get their allocation reduced +- * 3. allocate the pipes having their allocation increased +- * +- * Steps 1. and 2. are here to take care of the following case: +- * - Initially DDB looks like this: +- * | B | C | +- * - enable pipe A. +- * - pipe B has a reduced DDB allocation that overlaps with the old pipe C +- * allocation +- * | A | B | C | +- * +- * We need to sequence the re-allocation: C, B, A (and not B, C, A). +- */ +- +-static void +-skl_wm_flush_pipe(struct drm_i915_private *dev_priv, enum pipe pipe, int pass) ++bool skl_ddb_allocation_equals(const struct skl_ddb_allocation *old, ++ const struct skl_ddb_allocation *new, ++ enum pipe pipe) + { +- int plane; +- +- DRM_DEBUG_KMS("flush pipe %c (pass %d)\n", pipe_name(pipe), pass); +- +- for_each_plane(dev_priv, pipe, plane) { +- I915_WRITE(PLANE_SURF(pipe, plane), +- I915_READ(PLANE_SURF(pipe, plane))); +- } +- I915_WRITE(CURBASE(pipe), I915_READ(CURBASE(pipe))); ++ return new->pipe[pipe].start == old->pipe[pipe].start && ++ new->pipe[pipe].end == old->pipe[pipe].end; + } + +-static bool +-skl_ddb_allocation_included(const struct skl_ddb_allocation *old, +- const struct skl_ddb_allocation *new, +- enum pipe pipe) ++static inline bool skl_ddb_entries_overlap(const struct skl_ddb_entry *a, ++ const struct skl_ddb_entry *b) + { +- uint16_t old_size, new_size; +- +- old_size = skl_ddb_entry_size(&old->pipe[pipe]); +- new_size = skl_ddb_entry_size(&new->pipe[pipe]); +- +- return old_size != new_size && +- new->pipe[pipe].start >= old->pipe[pipe].start && +- new->pipe[pipe].end <= old->pipe[pipe].end; ++ return a->start < b->end && b->start < a->end; + } + +-static void skl_flush_wm_values(struct drm_i915_private *dev_priv, +- struct skl_wm_values *new_values) ++bool skl_ddb_allocation_overlaps(struct drm_atomic_state *state, ++ const struct skl_ddb_allocation *old, ++ const struct skl_ddb_allocation *new, ++ enum pipe pipe) + { +- struct drm_device *dev = &dev_priv->drm; +- struct skl_ddb_allocation *cur_ddb, *new_ddb; +- bool reallocated[I915_MAX_PIPES] = {}; +- struct intel_crtc *crtc; +- enum pipe pipe; +- +- new_ddb = &new_values->ddb; +- cur_ddb = &dev_priv->wm.skl_hw.ddb; +- +- /* +- * First pass: flush the pipes with the new allocation contained into +- * the old space. +- * +- * We'll wait for the vblank on those pipes to ensure we can safely +- * re-allocate the freed space without this pipe fetching from it. +- */ +- for_each_intel_crtc(dev, crtc) { +- if (!crtc->active) +- continue; +- +- pipe = crtc->pipe; +- +- if (!skl_ddb_allocation_included(cur_ddb, new_ddb, pipe)) +- continue; +- +- skl_wm_flush_pipe(dev_priv, pipe, 1); +- intel_wait_for_vblank(dev, pipe); +- +- reallocated[pipe] = true; +- } +- +- +- /* +- * Second pass: flush the pipes that are having their allocation +- * reduced, but overlapping with a previous allocation. +- * +- * Here as well we need to wait for the vblank to make sure the freed +- * space is not used anymore. +- */ +- for_each_intel_crtc(dev, crtc) { +- if (!crtc->active) +- continue; ++ struct drm_device *dev = state->dev; ++ struct intel_crtc *intel_crtc; ++ enum pipe otherp; + +- pipe = crtc->pipe; ++ for_each_intel_crtc(dev, intel_crtc) { ++ otherp = intel_crtc->pipe; + +- if (reallocated[pipe]) ++ if (otherp == pipe) + continue; + +- if (skl_ddb_entry_size(&new_ddb->pipe[pipe]) < +- skl_ddb_entry_size(&cur_ddb->pipe[pipe])) { +- skl_wm_flush_pipe(dev_priv, pipe, 2); +- intel_wait_for_vblank(dev, pipe); +- reallocated[pipe] = true; +- } ++ if (skl_ddb_entries_overlap(&new->pipe[pipe], ++ &old->pipe[otherp])) ++ return true; + } + +- /* +- * Third pass: flush the pipes that got more space allocated. +- * +- * We don't need to actively wait for the update here, next vblank +- * will just get more DDB space with the correct WM values. +- */ +- for_each_intel_crtc(dev, crtc) { +- if (!crtc->active) +- continue; +- +- pipe = crtc->pipe; +- +- /* +- * At this point, only the pipes more space than before are +- * left to re-allocate. +- */ +- if (reallocated[pipe]) +- continue; +- +- skl_wm_flush_pipe(dev_priv, pipe, 3); +- } ++ return false; + } + + static int skl_update_pipe_wm(struct drm_crtc_state *cstate, +@@ -4224,7 +4105,7 @@ static void skl_update_wm(struct drm_crtc *crtc) + struct skl_wm_values *hw_vals = &dev_priv->wm.skl_hw; + struct intel_crtc_state *cstate = to_intel_crtc_state(crtc->state); + struct skl_pipe_wm *pipe_wm = &cstate->wm.skl.optimal; +- int pipe; ++ enum pipe pipe = intel_crtc->pipe; + + if ((results->dirty_pipes & drm_crtc_mask(crtc)) == 0) + return; +@@ -4233,15 +4114,22 @@ static void skl_update_wm(struct drm_crtc *crtc) + + mutex_lock(&dev_priv->wm.wm_mutex); + +- skl_write_wm_values(dev_priv, results); +- skl_flush_wm_values(dev_priv, results); +- + /* +- * Store the new configuration (but only for the pipes that have +- * changed; the other values weren't recomputed). ++ * If this pipe isn't active already, we're going to be enabling it ++ * very soon. Since it's safe to update a pipe's ddb allocation while ++ * the pipe's shut off, just do so here. Already active pipes will have ++ * their watermarks updated once we update their planes. + */ +- for_each_pipe_masked(dev_priv, pipe, results->dirty_pipes) +- skl_copy_wm_for_pipe(hw_vals, results, pipe); ++ if (crtc->state->active_changed) { ++ int plane; ++ ++ for (plane = 0; plane < intel_num_planes(intel_crtc); plane++) ++ skl_write_plane_wm(intel_crtc, results, plane); ++ ++ skl_write_cursor_wm(intel_crtc, results); ++ } ++ ++ skl_copy_wm_for_pipe(hw_vals, results, pipe); + + mutex_unlock(&dev_priv->wm.wm_mutex); + } +-- +2.7.4 +_______________________________________________ +kernel mailing list -- kernel@lists.fedoraproject.org +To unsubscribe send an email to kernel-leave@lists.fedoraproject.org + +From: Lyude +To: kernel@lists.fedoraproject.org +Subject: [PATCH 4/5] drm/i915/skl: Don't try to update plane watermarks if + they haven't changed +Date: Thu, 27 Oct 2016 10:49:38 -0400 + +commit ccebc23b57c313229526dc76383ce82f5e0b9001 upstream + +i915 sometimes needs to disable planes in the middle of an atomic +commit, and then reenable them later in the same commit. Because of +this, we can't make the assumption that the state of the plane actually +changed. Since the state of the plane hasn't actually changed, neither +have it's watermarks. And if the watermarks hasn't changed then we +haven't populated skl_results with anything, which means we'll end up +zeroing out a plane's watermarks in the middle of the atomic commit +without restoring them later. + +Simple reproduction recipe: + - Get a SKL laptop, launch any kind of X session + - Get two extra monitors + - Keep hotplugging both displays (so that the display configuration + jumps from 1 active pipe to 3 active pipes and back) + - Eventually underrun + +Changes since v1: + - Fix incorrect use of "it's" +Changes since v2: + - Add reproduction recipe + +Signed-off-by: Lyude +Cc: Maarten Lankhorst +Fixes: 62e0fb880123 ("drm/i915/skl: Update plane watermarks atomically during plane updates") +Testcase: kms_plane +Signed-off-by: Maarten Lankhorst +Link: http://patchwork.freedesktop.org/patch/msgid/1472488288-27280-1-git-send-email-cpaul@redhat.com +Cc: drm-intel-fixes@lists.freedesktop.org +--- + drivers/gpu/drm/i915/intel_display.c | 7 ++++++- + drivers/gpu/drm/i915/intel_sprite.c | 8 ++++++++ + 2 files changed, 14 insertions(+), 1 deletion(-) + +diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c +index 8086e62..85d161a 100644 +--- a/drivers/gpu/drm/i915/intel_display.c ++++ b/drivers/gpu/drm/i915/intel_display.c +@@ -3068,7 +3068,12 @@ static void skylake_disable_primary_plane(struct drm_plane *primary, + struct intel_crtc *intel_crtc = to_intel_crtc(crtc); + int pipe = intel_crtc->pipe; + +- skl_write_plane_wm(intel_crtc, &dev_priv->wm.skl_results, 0); ++ /* ++ * We only populate skl_results on watermark updates, and if the ++ * plane's visiblity isn't actually changing neither is its watermarks. ++ */ ++ if (!to_intel_plane_state(crtc->primary->state)->visible) ++ skl_write_plane_wm(intel_crtc, &dev_priv->wm.skl_results, 0); + + I915_WRITE(PLANE_CTL(pipe, 0), 0); + I915_WRITE(PLANE_SURF(pipe, 0), 0); +diff --git a/drivers/gpu/drm/i915/intel_sprite.c b/drivers/gpu/drm/i915/intel_sprite.c +index d8bfff1..4178849 100644 +--- a/drivers/gpu/drm/i915/intel_sprite.c ++++ b/drivers/gpu/drm/i915/intel_sprite.c +@@ -314,6 +314,14 @@ skl_disable_plane(struct drm_plane *dplane, struct drm_crtc *crtc) + const int pipe = intel_plane->pipe; + const int plane = intel_plane->plane + 1; + ++ /* ++ * We only populate skl_results on watermark updates, and if the ++ * plane's visiblity isn't actually changing neither is its watermarks. ++ */ ++ if (!to_intel_plane_state(dplane->state)->visible) ++ skl_write_plane_wm(to_intel_crtc(crtc), ++ &dev_priv->wm.skl_results, plane); ++ + I915_WRITE(PLANE_CTL(pipe, plane), 0); + + I915_WRITE(PLANE_SURF(pipe, plane), 0); +-- +2.7.4 +_______________________________________________ +kernel mailing list -- kernel@lists.fedoraproject.org +To unsubscribe send an email to kernel-leave@lists.fedoraproject.org + +From: Lyude +To: kernel@lists.fedoraproject.org +Subject: [PATCH 5/5] drm/i915/gen9: only add the planes actually affected + by ddb changes +Date: Thu, 27 Oct 2016 10:49:39 -0400 + +From: Paulo Zanoni + +commit be5c571b2ff3a164d2e14ccc100cb5b2b3d3fb7c upstream + +We were previously adding all the planes owned by the CRTC even when +the ddb partitioning didn't change for them. As a consequence, a lot +of functions were being called when we were just moving the cursor +around the screen, such as skylake_update_primary_plane(). + +This was causing flickering on the primary plane when moving the +cursor. I'm not 100% sure which operation caused the flickering, but +we were writing to a lot of registers, so it could be any of these +writes. With this patch, just moving the mouse won't add the primary +plane to the commit since it won't trigger a change in DDB +partitioning. + +v2: Use skl_ddb_entry_equal() (Lyude). +v3: Change Reported-and-bisected-by: to Reported-by: for checkpatch + +Fixes: 05a76d3d6ad1 ("drm/i915/skl: Ensure pipes with changed wms get added to the state") +Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=97888 +Cc: Mike Lothian +Cc: stable@vger.kernel.org +Reported-by: Mike Lothian +Signed-off-by: Paulo Zanoni +Signed-off-by: Lyude +Link: http://patchwork.freedesktop.org/patch/msgid/1475177808-29955-1-git-send-email-paulo.r.zanoni@intel.com +(cherry picked from commit 7f60e200e254cd53ad1bd74a56bdd23e813ac4b7) +Signed-off-by: Jani Nikula +--- + drivers/gpu/drm/i915/intel_pm.c | 37 ++++++++++++++++++++++++++++++++++++- + 1 file changed, 36 insertions(+), 1 deletion(-) + +diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c +index a0c5c4e..5f763f4 100644 +--- a/drivers/gpu/drm/i915/intel_pm.c ++++ b/drivers/gpu/drm/i915/intel_pm.c +@@ -3940,6 +3940,41 @@ pipes_modified(struct drm_atomic_state *state) + return ret; + } + ++int ++skl_ddb_add_affected_planes(struct intel_crtc_state *cstate) ++{ ++ struct drm_atomic_state *state = cstate->base.state; ++ struct drm_device *dev = state->dev; ++ struct drm_crtc *crtc = cstate->base.crtc; ++ struct intel_crtc *intel_crtc = to_intel_crtc(crtc); ++ struct drm_i915_private *dev_priv = to_i915(dev); ++ struct intel_atomic_state *intel_state = to_intel_atomic_state(state); ++ struct skl_ddb_allocation *new_ddb = &intel_state->wm_results.ddb; ++ struct skl_ddb_allocation *cur_ddb = &dev_priv->wm.skl_hw.ddb; ++ struct drm_plane_state *plane_state; ++ struct drm_plane *plane; ++ enum pipe pipe = intel_crtc->pipe; ++ int id; ++ ++ WARN_ON(!drm_atomic_get_existing_crtc_state(state, crtc)); ++ ++ drm_for_each_plane_mask(plane, dev, crtc->state->plane_mask) { ++ id = skl_wm_plane_id(to_intel_plane(plane)); ++ ++ if (skl_ddb_entry_equal(&cur_ddb->plane[pipe][id], ++ &new_ddb->plane[pipe][id]) && ++ skl_ddb_entry_equal(&cur_ddb->y_plane[pipe][id], ++ &new_ddb->y_plane[pipe][id])) ++ continue; ++ ++ plane_state = drm_atomic_get_plane_state(state, plane); ++ if (IS_ERR(plane_state)) ++ return PTR_ERR(plane_state); ++ } ++ ++ return 0; ++} ++ + static int + skl_compute_ddb(struct drm_atomic_state *state) + { +@@ -4004,7 +4039,7 @@ skl_compute_ddb(struct drm_atomic_state *state) + if (ret) + return ret; + +- ret = drm_atomic_add_affected_planes(state, &intel_crtc->base); ++ ret = skl_ddb_add_affected_planes(cstate); + if (ret) + return ret; + } +-- +2.7.4 +_______________________________________________ +kernel mailing list -- kernel@lists.fedoraproject.org +To unsubscribe send an email to kernel-leave@lists.fedoraproject.org + diff --git a/kernel.spec b/kernel.spec index f7e608d7f..dedb11c96 100644 --- a/kernel.spec +++ b/kernel.spec @@ -628,6 +628,9 @@ Patch849: 0001-iio-Use-event-header-from-kernel-tree.patch # CVE-2016-9083 CVE-2016-9084 rhbz 1389258 1389259 1389285 Patch850: v3-vfio-pci-Fix-integer-overflows-bitmask-check.patch +# Skylake i915 fixes from 4.9 +Patch851: drm_i915_skl_Backport_watermark_fixes_for_4.8.y.patch + # END OF PATCH DEFINITIONS %endif @@ -2157,6 +2160,7 @@ fi %changelog * Thu Oct 27 2016 Justin M. Forbes - CVE-2016-9083 CVE-2016-9084 vfio multiple flaws (rhbz 1389258 1389259 1389285) +- Skylake i915 fixes from 4.9 * Mon Oct 24 2016 Justin M. Forbes - 4.8.4-200 - Linux v4.8.4 rebase From 0564641f5a9dee26d71d57c5f3ba850e10ffadf2 Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Thu, 27 Oct 2016 13:18:46 -0500 Subject: [PATCH 156/275] Fix MS input devices identified as joysticks (rhbz 1325354) --- ...-System-Control-application-usages-i.patch | 75 +++++++++++++++++++ kernel.spec | 4 + 2 files changed, 79 insertions(+) create mode 100644 0001-HID-input-ignore-System-Control-application-usages-i.patch diff --git a/0001-HID-input-ignore-System-Control-application-usages-i.patch b/0001-HID-input-ignore-System-Control-application-usages-i.patch new file mode 100644 index 000000000..9920598c2 --- /dev/null +++ b/0001-HID-input-ignore-System-Control-application-usages-i.patch @@ -0,0 +1,75 @@ +From 1989dada7ce07848196991c9ebf25ff9c5f14d4e Mon Sep 17 00:00:00 2001 +From: Benjamin Tissoires +Date: Tue, 13 Sep 2016 11:52:37 +0200 +Subject: [PATCH] HID: input: ignore System Control application usages if not + System Controls + +Microsoft is reusing its report descriptor again and again, and part of it +looks like this: + +0x05, 0x01, // Usage Page (Generic Desktop) 299 +0x09, 0x80, // Usage (System Control) 301 +0xa1, 0x01, // Collection (Application) 303 +0x85, 0x03, // Report ID (3) 305 +0x19, 0x00, // Usage Minimum (0) 307 +0x29, 0xff, // Usage Maximum (255) 309 +0x15, 0x00, // Logical Minimum (0) 311 +0x26, 0xff, 0x00, // Logical Maximum (255) 313 +0x81, 0x00, // Input (Data,Arr,Abs) 316 +0xc0, // End Collection 318 + +While there is nothing wrong in term of processing, we do however blindly +map the full usage range (it's an array) from 0x00 to 0xff, which creates +some interesting axis, like ABS_X|Y, and a bunch of ABS_MISC + n. + +While libinput and other stacks don't care that much (we can detect them), +joydev is very happy and attaches itself to the mouse or keyboard. + +The problem is that joydev now handles the device as a joystick, but given +that we have a HID array, it sets all the ABS_* values to 0. And in its +world, 0 means -32767 (minimum value), which sends spurious events to games +(think Steam). + +It looks like hid-microsoft tries to tackle the very same problem with its +.report_fixup callback. But fixing the report descriptor is an endless task +and is quite obfuscated. + +So take the hammer, and decide that if the application is meant to be +System Control, any other usage not in the System Control range should +be ignored. + +Link: https://bugzilla.redhat.com/show_bug.cgi?id=1325354 +Link: https://bugzilla.kernel.org/show_bug.cgi?id=28912 +Link: https://github.com/ValveSoftware/steam-for-linux/issues/3384 +Link: https://bugzilla.redhat.com/show_bug.cgi?id=1325354 +Link: https://bugzilla.kernel.org/show_bug.cgi?id=37982 + +Signed-off-by: Benjamin Tissoires +Signed-off-by: Jiri Kosina +--- + drivers/hid/hid-input.c | 9 +++++++++ + 1 file changed, 9 insertions(+) + +diff --git a/drivers/hid/hid-input.c b/drivers/hid/hid-input.c +index bcfaf32..058919d 100644 +--- a/drivers/hid/hid-input.c ++++ b/drivers/hid/hid-input.c +@@ -604,6 +604,15 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel + break; + } + ++ /* ++ * Some lazy vendors declare 255 usages for System Control, ++ * leading to the creation of ABS_X|Y axis and too many others. ++ * It wouldn't be a problem if joydev doesn't consider the ++ * device as a joystick then. ++ */ ++ if (field->application == HID_GD_SYSTEM_CONTROL) ++ goto ignore; ++ + if ((usage->hid & 0xf0) == 0x90) { /* D-pad */ + switch (usage->hid) { + case HID_GD_UP: usage->hat_dir = 1; break; +-- +2.7.4 + diff --git a/kernel.spec b/kernel.spec index dedb11c96..7868c0671 100644 --- a/kernel.spec +++ b/kernel.spec @@ -631,6 +631,9 @@ Patch850: v3-vfio-pci-Fix-integer-overflows-bitmask-check.patch # Skylake i915 fixes from 4.9 Patch851: drm_i915_skl_Backport_watermark_fixes_for_4.8.y.patch +#rhbz 1325354 +Patch852: 0001-HID-input-ignore-System-Control-application-usages-i.patch + # END OF PATCH DEFINITIONS %endif @@ -2161,6 +2164,7 @@ fi * Thu Oct 27 2016 Justin M. Forbes - CVE-2016-9083 CVE-2016-9084 vfio multiple flaws (rhbz 1389258 1389259 1389285) - Skylake i915 fixes from 4.9 +- Fix MS input devices identified as joysticks (rhbz 1325354) * Mon Oct 24 2016 Justin M. Forbes - 4.8.4-200 - Linux v4.8.4 rebase From 45e0139f36e81c51ba46675acbba47c962a5571f Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Fri, 28 Oct 2016 14:04:53 -0500 Subject: [PATCH 157/275] Linux v4.8.5 --- i8042-skip-selftest-asus-laptops.patch | 373 ------------------------- kernel.spec | 7 +- sources | 2 +- 3 files changed, 5 insertions(+), 377 deletions(-) delete mode 100644 i8042-skip-selftest-asus-laptops.patch diff --git a/i8042-skip-selftest-asus-laptops.patch b/i8042-skip-selftest-asus-laptops.patch deleted file mode 100644 index 351556e04..000000000 --- a/i8042-skip-selftest-asus-laptops.patch +++ /dev/null @@ -1,373 +0,0 @@ -From 930e19248e9b61da36c967687ca79c4d5f977919 Mon Sep 17 00:00:00 2001 -From: Marcos Paulo de Souza -Date: Sat, 1 Oct 2016 12:07:35 -0700 -Subject: Input: i8042 - skip selftest on ASUS laptops - -On suspend/resume cycle, selftest is executed to reset i8042 controller. -But when this is done in Asus devices, subsequent calls to detect/init -functions to elantech driver fails. Skipping selftest fixes this problem. - -An easier step to reproduce this problem is adding i8042.reset=1 as a -kernel parameter. On Asus laptops, it'll make the system to start with the -touchpad already stuck, since psmouse_probe forcibly calls the selftest -function. - -This patch was inspired by John Hiesey's change[1], but, since this problem -affects a lot of models of Asus, let's avoid running selftests on them. - -All models affected by this problem: -A455LD -K401LB -K501LB -K501LX -R409L -V502LX -X302LA -X450LCP -X450LD -X455LAB -X455LDB -X455LF -Z450LA - -[1]: https://marc.info/?l=linux-input&m=144312209020616&w=2 - -Fixes: "ETPS/2 Elantech Touchpad dies after resume from suspend" -(https://bugzilla.kernel.org/show_bug.cgi?id=107971) - -Signed-off-by: Marcos Paulo de Souza -Cc: stable@vger.kernel.org -Signed-off-by: Dmitry Torokhov ---- - Documentation/kernel-parameters.txt | 9 +++- - drivers/input/serio/i8042-io.h | 2 +- - drivers/input/serio/i8042-ip22io.h | 2 +- - drivers/input/serio/i8042-ppcio.h | 2 +- - drivers/input/serio/i8042-sparcio.h | 2 +- - drivers/input/serio/i8042-unicore32io.h | 2 +- - drivers/input/serio/i8042-x86ia64io.h | 96 +++++++++++++++++++++++++++++++-- - drivers/input/serio/i8042.c | 55 +++++++++++++++---- - 8 files changed, 150 insertions(+), 20 deletions(-) - -diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt -index 0b3de80..3475b32 100644 ---- a/Documentation/kernel-parameters.txt -+++ b/Documentation/kernel-parameters.txt -@@ -1409,7 +1409,14 @@ bytes respectively. Such letter suffixes can also be entirely omitted. - i8042.nopnp [HW] Don't use ACPIPnP / PnPBIOS to discover KBD/AUX - controllers - i8042.notimeout [HW] Ignore timeout condition signalled by controller -- i8042.reset [HW] Reset the controller during init and cleanup -+ i8042.reset [HW] Reset the controller during init, cleanup and -+ suspend-to-ram transitions, only during s2r -+ transitions, or never reset -+ Format: { 1 | Y | y | 0 | N | n } -+ 1, Y, y: always reset controller -+ 0, N, n: don't ever reset controller -+ Default: only on s2r transitions on x86; most other -+ architectures force reset to be always executed - i8042.unlock [HW] Unlock (ignore) the keylock - i8042.kbdreset [HW] Reset device connected to KBD port - -diff --git a/drivers/input/serio/i8042-io.h b/drivers/input/serio/i8042-io.h -index a5eed2a..34da81c 100644 ---- a/drivers/input/serio/i8042-io.h -+++ b/drivers/input/serio/i8042-io.h -@@ -81,7 +81,7 @@ static inline int i8042_platform_init(void) - return -EBUSY; - #endif - -- i8042_reset = 1; -+ i8042_reset = I8042_RESET_ALWAYS; - return 0; - } - -diff --git a/drivers/input/serio/i8042-ip22io.h b/drivers/input/serio/i8042-ip22io.h -index ee1ad27..08a1c10 100644 ---- a/drivers/input/serio/i8042-ip22io.h -+++ b/drivers/input/serio/i8042-ip22io.h -@@ -61,7 +61,7 @@ static inline int i8042_platform_init(void) - return -EBUSY; - #endif - -- i8042_reset = 1; -+ i8042_reset = I8042_RESET_ALWAYS; - - return 0; - } -diff --git a/drivers/input/serio/i8042-ppcio.h b/drivers/input/serio/i8042-ppcio.h -index f708c75..1aabea4 100644 ---- a/drivers/input/serio/i8042-ppcio.h -+++ b/drivers/input/serio/i8042-ppcio.h -@@ -44,7 +44,7 @@ static inline void i8042_write_command(int val) - - static inline int i8042_platform_init(void) - { -- i8042_reset = 1; -+ i8042_reset = I8042_RESET_ALWAYS; - return 0; - } - -diff --git a/drivers/input/serio/i8042-sparcio.h b/drivers/input/serio/i8042-sparcio.h -index afcd1c1..6231d63 100644 ---- a/drivers/input/serio/i8042-sparcio.h -+++ b/drivers/input/serio/i8042-sparcio.h -@@ -130,7 +130,7 @@ static int __init i8042_platform_init(void) - } - } - -- i8042_reset = 1; -+ i8042_reset = I8042_RESET_ALWAYS; - - return 0; - } -diff --git a/drivers/input/serio/i8042-unicore32io.h b/drivers/input/serio/i8042-unicore32io.h -index 73f5cc1..4557475 100644 ---- a/drivers/input/serio/i8042-unicore32io.h -+++ b/drivers/input/serio/i8042-unicore32io.h -@@ -61,7 +61,7 @@ static inline int i8042_platform_init(void) - if (!request_mem_region(I8042_REGION_START, I8042_REGION_SIZE, "i8042")) - return -EBUSY; - -- i8042_reset = 1; -+ i8042_reset = I8042_RESET_ALWAYS; - return 0; - } - -diff --git a/drivers/input/serio/i8042-x86ia64io.h b/drivers/input/serio/i8042-x86ia64io.h -index 68f5f4a..f4bfb4b 100644 ---- a/drivers/input/serio/i8042-x86ia64io.h -+++ b/drivers/input/serio/i8042-x86ia64io.h -@@ -510,6 +510,90 @@ static const struct dmi_system_id __initconst i8042_dmi_nomux_table[] = { - { } - }; - -+/* -+ * On some Asus laptops, just running self tests cause problems. -+ */ -+static const struct dmi_system_id i8042_dmi_noselftest_table[] = { -+ { -+ .matches = { -+ DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), -+ DMI_MATCH(DMI_PRODUCT_NAME, "A455LD"), -+ }, -+ }, -+ { -+ .matches = { -+ DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), -+ DMI_MATCH(DMI_PRODUCT_NAME, "K401LB"), -+ }, -+ }, -+ { -+ .matches = { -+ DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), -+ DMI_MATCH(DMI_PRODUCT_NAME, "K501LB"), -+ }, -+ }, -+ { -+ .matches = { -+ DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), -+ DMI_MATCH(DMI_PRODUCT_NAME, "K501LX"), -+ }, -+ }, -+ { -+ .matches = { -+ DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), -+ DMI_MATCH(DMI_PRODUCT_NAME, "R409L"), -+ }, -+ }, -+ { -+ .matches = { -+ DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), -+ DMI_MATCH(DMI_PRODUCT_NAME, "V502LX"), -+ }, -+ }, -+ { -+ .matches = { -+ DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), -+ DMI_MATCH(DMI_PRODUCT_NAME, "X302LA"), -+ }, -+ }, -+ { -+ .matches = { -+ DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), -+ DMI_MATCH(DMI_PRODUCT_NAME, "X450LCP"), -+ }, -+ }, -+ { -+ .matches = { -+ DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), -+ DMI_MATCH(DMI_PRODUCT_NAME, "X450LD"), -+ }, -+ }, -+ { -+ .matches = { -+ DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), -+ DMI_MATCH(DMI_PRODUCT_NAME, "X455LAB"), -+ }, -+ }, -+ { -+ .matches = { -+ DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), -+ DMI_MATCH(DMI_PRODUCT_NAME, "X455LDB"), -+ }, -+ }, -+ { -+ .matches = { -+ DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), -+ DMI_MATCH(DMI_PRODUCT_NAME, "X455LF"), -+ }, -+ }, -+ { -+ .matches = { -+ DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), -+ DMI_MATCH(DMI_PRODUCT_NAME, "Z450LA"), -+ }, -+ }, -+ { } -+}; - static const struct dmi_system_id __initconst i8042_dmi_reset_table[] = { - { - /* MSI Wind U-100 */ -@@ -1072,12 +1156,18 @@ static int __init i8042_platform_init(void) - return retval; - - #if defined(__ia64__) -- i8042_reset = true; -+ i8042_reset = I8042_RESET_ALWAYS; - #endif - - #ifdef CONFIG_X86 -- if (dmi_check_system(i8042_dmi_reset_table)) -- i8042_reset = true; -+ /* Honor module parameter when value is not default */ -+ if (i8042_reset == I8042_RESET_DEFAULT) { -+ if (dmi_check_system(i8042_dmi_reset_table)) -+ i8042_reset = I8042_RESET_ALWAYS; -+ -+ if (dmi_check_system(i8042_dmi_noselftest_table)) -+ i8042_reset = I8042_RESET_NEVER; -+ } - - if (dmi_check_system(i8042_dmi_noloop_table)) - i8042_noloop = true; -diff --git a/drivers/input/serio/i8042.c b/drivers/input/serio/i8042.c -index b4d3408..674a760 100644 ---- a/drivers/input/serio/i8042.c -+++ b/drivers/input/serio/i8042.c -@@ -48,9 +48,39 @@ static bool i8042_unlock; - module_param_named(unlock, i8042_unlock, bool, 0); - MODULE_PARM_DESC(unlock, "Ignore keyboard lock."); - --static bool i8042_reset; --module_param_named(reset, i8042_reset, bool, 0); --MODULE_PARM_DESC(reset, "Reset controller during init and cleanup."); -+enum i8042_controller_reset_mode { -+ I8042_RESET_NEVER, -+ I8042_RESET_ALWAYS, -+ I8042_RESET_ON_S2RAM, -+#define I8042_RESET_DEFAULT I8042_RESET_ON_S2RAM -+}; -+static enum i8042_controller_reset_mode i8042_reset = I8042_RESET_DEFAULT; -+static int i8042_set_reset(const char *val, const struct kernel_param *kp) -+{ -+ enum i8042_controller_reset_mode *arg = kp->arg; -+ int error; -+ bool reset; -+ -+ if (val) { -+ error = kstrtobool(val, &reset); -+ if (error) -+ return error; -+ } else { -+ reset = true; -+ } -+ -+ *arg = reset ? I8042_RESET_ALWAYS : I8042_RESET_NEVER; -+ return 0; -+} -+ -+static const struct kernel_param_ops param_ops_reset_param = { -+ .flags = KERNEL_PARAM_OPS_FL_NOARG, -+ .set = i8042_set_reset, -+}; -+#define param_check_reset_param(name, p) \ -+ __param_check(name, p, enum i8042_controller_reset_mode) -+module_param_named(reset, i8042_reset, reset_param, 0); -+MODULE_PARM_DESC(reset, "Reset controller on resume, cleanup or both"); - - static bool i8042_direct; - module_param_named(direct, i8042_direct, bool, 0); -@@ -1019,7 +1049,7 @@ static int i8042_controller_init(void) - * Reset the controller and reset CRT to the original value set by BIOS. - */ - --static void i8042_controller_reset(bool force_reset) -+static void i8042_controller_reset(bool s2r_wants_reset) - { - i8042_flush(); - -@@ -1044,8 +1074,10 @@ static void i8042_controller_reset(bool force_reset) - * Reset the controller if requested. - */ - -- if (i8042_reset || force_reset) -+ if (i8042_reset == I8042_RESET_ALWAYS || -+ (i8042_reset == I8042_RESET_ON_S2RAM && s2r_wants_reset)) { - i8042_controller_selftest(); -+ } - - /* - * Restore the original control register setting. -@@ -1110,7 +1142,7 @@ static void i8042_dritek_enable(void) - * before suspending. - */ - --static int i8042_controller_resume(bool force_reset) -+static int i8042_controller_resume(bool s2r_wants_reset) - { - int error; - -@@ -1118,7 +1150,8 @@ static int i8042_controller_resume(bool force_reset) - if (error) - return error; - -- if (i8042_reset || force_reset) { -+ if (i8042_reset == I8042_RESET_ALWAYS || -+ (i8042_reset == I8042_RESET_ON_S2RAM && s2r_wants_reset)) { - error = i8042_controller_selftest(); - if (error) - return error; -@@ -1195,7 +1228,7 @@ static int i8042_pm_resume_noirq(struct device *dev) - - static int i8042_pm_resume(struct device *dev) - { -- bool force_reset; -+ bool want_reset; - int i; - - for (i = 0; i < I8042_NUM_PORTS; i++) { -@@ -1218,9 +1251,9 @@ static int i8042_pm_resume(struct device *dev) - * off control to the platform firmware, otherwise we can simply restore - * the mode. - */ -- force_reset = pm_resume_via_firmware(); -+ want_reset = pm_resume_via_firmware(); - -- return i8042_controller_resume(force_reset); -+ return i8042_controller_resume(want_reset); - } - - static int i8042_pm_thaw(struct device *dev) -@@ -1481,7 +1514,7 @@ static int __init i8042_probe(struct platform_device *dev) - - i8042_platform_device = dev; - -- if (i8042_reset) { -+ if (i8042_reset == I8042_RESET_ALWAYS) { - error = i8042_controller_selftest(); - if (error) - return error; --- -cgit v0.12 - diff --git a/kernel.spec b/kernel.spec index 7868c0671..b5bcfefc9 100644 --- a/kernel.spec +++ b/kernel.spec @@ -54,7 +54,7 @@ Summary: The Linux kernel %if 0%{?released_kernel} # Do we have a -stable update to apply? -%define stable_update 4 +%define stable_update 5 # Set rpm version accordingly %if 0%{?stable_update} %define stablerev %{stable_update} @@ -600,8 +600,6 @@ Patch502: firmware-Drop-WARN-from-usermodehelper_read_trylock-.patch # Patch503: drm-i915-turn-off-wc-mmaps.patch -Patch504: i8042-skip-selftest-asus-laptops.patch - Patch508: kexec-uefi-copy-secure_boot-flag-in-boot-params.patch #CVE-2016-3134 rhbz 1317383 1317384 @@ -2161,6 +2159,9 @@ fi # # %changelog +* Fri Oct 28 2016 Justin M. Forbes - 4.8.5-200 +- Linux v4.8.5 + * Thu Oct 27 2016 Justin M. Forbes - CVE-2016-9083 CVE-2016-9084 vfio multiple flaws (rhbz 1389258 1389259 1389285) - Skylake i915 fixes from 4.9 diff --git a/sources b/sources index 1c4346db9..bfe1e002b 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ c1af0afbd3df35c1ccdc7a5118cd2d07 linux-4.8.tar.xz 0dad03f586e835d538d3e0d2cbdb9a28 perf-man-4.8.tar.gz -4d85e2c59ec33dd7766e18d079e75114 patch-4.8.4.xz +3b00c3fcfbe05e3cb7702e8db6fee28b patch-4.8.5.xz From 42d48f176610c4cd963807f92a6004dec584a1bd Mon Sep 17 00:00:00 2001 From: Peter Robinson Date: Tue, 1 Nov 2016 17:13:42 +0000 Subject: [PATCH 158/275] inital 4.8.6 rebase, pull in some ARM fixes --- ARM-OMAP4-Fix-crashes.patch | 97 +++++ ...hsmmc-Use-dma_request_chan-for-reque.patch | 100 ++++++ bcm283x-vc4-fixes.patch | 335 ++---------------- kernel.spec | 12 +- sources | 2 +- 5 files changed, 241 insertions(+), 305 deletions(-) create mode 100644 ARM-OMAP4-Fix-crashes.patch create mode 100644 arm-revert-mmc-omap_hsmmc-Use-dma_request_chan-for-reque.patch diff --git a/ARM-OMAP4-Fix-crashes.patch b/ARM-OMAP4-Fix-crashes.patch new file mode 100644 index 000000000..57e56e507 --- /dev/null +++ b/ARM-OMAP4-Fix-crashes.patch @@ -0,0 +1,97 @@ +From patchwork Wed Oct 26 15:17:01 2016 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +Subject: [3/5] ARM: OMAP4+: Fix bad fallthrough for cpuidle +From: Tony Lindgren +X-Patchwork-Id: 9397501 +Message-Id: <20161026151703.24730-4-tony@atomide.com> +To: linux-omap@vger.kernel.org +Cc: Nishanth Menon , Dmitry Lifshitz , + Dave Gerlach , + Enric Balletbo Serra , + "Dr . H . Nikolaus Schaller" , + Pau Pajuel , Grazvydas Ignotas , + Benoit Cousson , + Santosh Shilimkar , + Javier Martinez Canillas , + Robert Nelson , + Marek Belisko , linux-arm-kernel@lists.infradead.org +Date: Wed, 26 Oct 2016 08:17:01 -0700 + +We don't want to fall through to a bunch of errors for retention +if PM_OMAP4_CPU_OSWR_DISABLE is not configured for a SoC. + +Fixes: 6099dd37c669 ("ARM: OMAP5 / DRA7: Enable CPU RET on suspend") +Signed-off-by: Tony Lindgren +--- + arch/arm/mach-omap2/omap-mpuss-lowpower.c | 5 ++--- + 1 file changed, 2 insertions(+), 3 deletions(-) + +diff --git a/arch/arm/mach-omap2/omap-mpuss-lowpower.c b/arch/arm/mach-omap2/omap-mpuss-lowpower.c +--- a/arch/arm/mach-omap2/omap-mpuss-lowpower.c ++++ b/arch/arm/mach-omap2/omap-mpuss-lowpower.c +@@ -244,10 +244,9 @@ int omap4_enter_lowpower(unsigned int cpu, unsigned int power_state) + save_state = 1; + break; + case PWRDM_POWER_RET: +- if (IS_PM44XX_ERRATUM(PM_OMAP4_CPU_OSWR_DISABLE)) { ++ if (IS_PM44XX_ERRATUM(PM_OMAP4_CPU_OSWR_DISABLE)) + save_state = 0; +- break; +- } ++ break; + default: + /* + * CPUx CSWR is invalid hardware state. Also CPUx OSWR +From 5a78ff7bf7e25191144b550961001bbf6c734da4 Mon Sep 17 00:00:00 2001 +From: Peter Chen +Date: Thu, 11 Aug 2016 17:44:54 +0800 +Subject: [PATCH 04152/16809] Revert "gpu: drm: omapdrm: dss-of: add missing + of_node_put after calling of_parse_phandle" + +This reverts +commit 2ab9f5879162499e1c4e48613287e3f59e593c4f +Author: Peter Chen +Date: Fri Jul 15 11:17:03 2016 +0800 + gpu: drm: omapdrm: dss-of: add missing of_node_put after calling of_parse_phandle + +The of_get_next_parent will drop refcount on the passed node, so the reverted +patch is wrong, thanks for Tomi Valkeinen points it. + +Cc: Tomi Valkeinen +Signed-off-by: Peter Chen +Acked-by: Tomi Valkeinen +Signed-off-by: Sean Paul +Link: http://patchwork.freedesktop.org/patch/msgid/1470908694-16362-1-git-send-email-peter.chen@nxp.com +--- + drivers/gpu/drm/omapdrm/dss/dss-of.c | 7 +++---- + 1 file changed, 3 insertions(+), 4 deletions(-) + +diff --git a/drivers/gpu/drm/omapdrm/dss/dss-of.c b/drivers/gpu/drm/omapdrm/dss/dss-of.c +index e256d87..dfd4e96 100644 +--- a/drivers/gpu/drm/omapdrm/dss/dss-of.c ++++ b/drivers/gpu/drm/omapdrm/dss/dss-of.c +@@ -125,16 +125,15 @@ u32 dss_of_port_get_port_number(struct device_node *port) + + static struct device_node *omapdss_of_get_remote_port(const struct device_node *node) + { +- struct device_node *np, *np_parent; ++ struct device_node *np; + + np = of_parse_phandle(node, "remote-endpoint", 0); + if (!np) + return NULL; + +- np_parent = of_get_next_parent(np); +- of_node_put(np); ++ np = of_get_next_parent(np); + +- return np_parent; ++ return np; + } + + struct device_node * +-- +2.9.3 + diff --git a/arm-revert-mmc-omap_hsmmc-Use-dma_request_chan-for-reque.patch b/arm-revert-mmc-omap_hsmmc-Use-dma_request_chan-for-reque.patch new file mode 100644 index 000000000..b55dec0cb --- /dev/null +++ b/arm-revert-mmc-omap_hsmmc-Use-dma_request_chan-for-reque.patch @@ -0,0 +1,100 @@ +From bb3e08008c0e48fd4f51a0f0957eecae61a24d69 Mon Sep 17 00:00:00 2001 +From: Peter Robinson +Date: Tue, 1 Nov 2016 09:35:30 +0000 +Subject: [PATCH] Revert "mmc: omap_hsmmc: Use dma_request_chan() for + requesting DMA channel" + +This reverts commit 81eef6ca92014845d40e3f1310e42b7010303acc. +--- + drivers/mmc/host/omap_hsmmc.c | 50 ++++++++++++++++++++++++++++++++++--------- + 1 file changed, 40 insertions(+), 10 deletions(-) + +diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c +index 24ebc9a..3563321 100644 +--- a/drivers/mmc/host/omap_hsmmc.c ++++ b/drivers/mmc/host/omap_hsmmc.c +@@ -32,6 +32,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -1992,6 +1993,8 @@ static int omap_hsmmc_probe(struct platform_device *pdev) + struct resource *res; + int ret, irq; + const struct of_device_id *match; ++ dma_cap_mask_t mask; ++ unsigned tx_req, rx_req; + const struct omap_mmc_of_data *data; + void __iomem *base; + +@@ -2121,17 +2124,44 @@ static int omap_hsmmc_probe(struct platform_device *pdev) + + omap_hsmmc_conf_bus_power(host); + +- host->rx_chan = dma_request_chan(&pdev->dev, "rx"); +- if (IS_ERR(host->rx_chan)) { +- dev_err(mmc_dev(host->mmc), "RX DMA channel request failed\n"); +- ret = PTR_ERR(host->rx_chan); ++ if (!pdev->dev.of_node) { ++ res = platform_get_resource_byname(pdev, IORESOURCE_DMA, "tx"); ++ if (!res) { ++ dev_err(mmc_dev(host->mmc), "cannot get DMA TX channel\n"); ++ ret = -ENXIO; ++ goto err_irq; ++ } ++ tx_req = res->start; ++ ++ res = platform_get_resource_byname(pdev, IORESOURCE_DMA, "rx"); ++ if (!res) { ++ dev_err(mmc_dev(host->mmc), "cannot get DMA RX channel\n"); ++ ret = -ENXIO; ++ goto err_irq; ++ } ++ rx_req = res->start; ++ } ++ ++ dma_cap_zero(mask); ++ dma_cap_set(DMA_SLAVE, mask); ++ ++ host->rx_chan = ++ dma_request_slave_channel_compat(mask, omap_dma_filter_fn, ++ &rx_req, &pdev->dev, "rx"); ++ ++ if (!host->rx_chan) { ++ dev_err(mmc_dev(host->mmc), "unable to obtain RX DMA engine channel\n"); ++ ret = -ENXIO; + goto err_irq; + } + +- host->tx_chan = dma_request_chan(&pdev->dev, "tx"); +- if (IS_ERR(host->tx_chan)) { +- dev_err(mmc_dev(host->mmc), "TX DMA channel request failed\n"); +- ret = PTR_ERR(host->tx_chan); ++ host->tx_chan = ++ dma_request_slave_channel_compat(mask, omap_dma_filter_fn, ++ &tx_req, &pdev->dev, "tx"); ++ ++ if (!host->tx_chan) { ++ dev_err(mmc_dev(host->mmc), "unable to obtain TX DMA engine channel\n"); ++ ret = -ENXIO; + goto err_irq; + } + +@@ -2189,9 +2219,9 @@ err_slot_name: + mmc_remove_host(mmc); + err_irq: + device_init_wakeup(&pdev->dev, false); +- if (!IS_ERR_OR_NULL(host->tx_chan)) ++ if (host->tx_chan) + dma_release_channel(host->tx_chan); +- if (!IS_ERR_OR_NULL(host->rx_chan)) ++ if (host->rx_chan) + dma_release_channel(host->rx_chan); + pm_runtime_dont_use_autosuspend(host->dev); + pm_runtime_put_sync(host->dev); +-- +2.9.3 + diff --git a/bcm283x-vc4-fixes.patch b/bcm283x-vc4-fixes.patch index afde6e2f2..3f77b7485 100644 --- a/bcm283x-vc4-fixes.patch +++ b/bcm283x-vc4-fixes.patch @@ -133,237 +133,6 @@ index 160942a..9ecd6ff 100644 -- 2.9.3 -From 107d3188b3723840deddaa5efeffcaf167e462f2 Mon Sep 17 00:00:00 2001 -From: Eric Anholt -Date: Wed, 28 Sep 2016 08:42:42 -0700 -Subject: [PATCH 3/4] drm/vc4: Fix races when the CS reads from render targets. - -With the introduction of bin/render pipelining, the previous job may -not be completed when we start binning the next one. If the previous -job wrote our VBO, IB, or CS textures, then the binning stage might -get stale or uninitialized results. - -Fixes the major rendering failure in glmark2 -b terrain. - -Signed-off-by: Eric Anholt -Fixes: ca26d28bbaa3 ("drm/vc4: improve throughput by pipelining binning and rendering jobs") -Cc: stable@vger.kernel.org ---- - drivers/gpu/drm/vc4/vc4_drv.h | 19 ++++++++++++++++++- - drivers/gpu/drm/vc4/vc4_gem.c | 13 +++++++++++++ - drivers/gpu/drm/vc4/vc4_render_cl.c | 21 +++++++++++++++++---- - drivers/gpu/drm/vc4/vc4_validate.c | 17 ++++++++++++++--- - 4 files changed, 62 insertions(+), 8 deletions(-) - -diff --git a/drivers/gpu/drm/vc4/vc4_drv.h b/drivers/gpu/drm/vc4/vc4_drv.h -index 428e249..f696b75 100644 ---- a/drivers/gpu/drm/vc4/vc4_drv.h -+++ b/drivers/gpu/drm/vc4/vc4_drv.h -@@ -122,9 +122,16 @@ to_vc4_dev(struct drm_device *dev) - struct vc4_bo { - struct drm_gem_cma_object base; - -- /* seqno of the last job to render to this BO. */ -+ /* seqno of the last job to render using this BO. */ - uint64_t seqno; - -+ /* seqno of the last job to use the RCL to write to this BO. -+ * -+ * Note that this doesn't include binner overflow memory -+ * writes. -+ */ -+ uint64_t write_seqno; -+ - /* List entry for the BO's position in either - * vc4_exec_info->unref_list or vc4_dev->bo_cache.time_list - */ -@@ -216,6 +223,9 @@ struct vc4_exec_info { - /* Sequence number for this bin/render job. */ - uint64_t seqno; - -+ /* Latest write_seqno of any BO that binning depends on. */ -+ uint64_t bin_dep_seqno; -+ - /* Last current addresses the hardware was processing when the - * hangcheck timer checked on us. - */ -@@ -230,6 +240,13 @@ struct vc4_exec_info { - struct drm_gem_cma_object **bo; - uint32_t bo_count; - -+ /* List of BOs that are being written by the RCL. Other than -+ * the binner temporary storage, this is all the BOs written -+ * by the job. -+ */ -+ struct drm_gem_cma_object *rcl_write_bo[4]; -+ uint32_t rcl_write_bo_count; -+ - /* Pointers for our position in vc4->job_list */ - struct list_head head; - -diff --git a/drivers/gpu/drm/vc4/vc4_gem.c b/drivers/gpu/drm/vc4/vc4_gem.c -index b262c5c..ae1609e 100644 ---- a/drivers/gpu/drm/vc4/vc4_gem.c -+++ b/drivers/gpu/drm/vc4/vc4_gem.c -@@ -471,6 +471,11 @@ vc4_update_bo_seqnos(struct vc4_exec_info *exec, uint64_t seqno) - list_for_each_entry(bo, &exec->unref_list, unref_head) { - bo->seqno = seqno; - } -+ -+ for (i = 0; i < exec->rcl_write_bo_count; i++) { -+ bo = to_vc4_bo(&exec->rcl_write_bo[i]->base); -+ bo->write_seqno = seqno; -+ } - } - - /* Queues a struct vc4_exec_info for execution. If no job is -@@ -673,6 +678,14 @@ vc4_get_bcl(struct drm_device *dev, struct vc4_exec_info *exec) - goto fail; - - ret = vc4_validate_shader_recs(dev, exec); -+ if (ret) -+ goto fail; -+ -+ /* Block waiting on any previous rendering into the CS's VBO, -+ * IB, or textures, so that pixels are actually written by the -+ * time we try to read them. -+ */ -+ ret = vc4_wait_for_seqno(dev, exec->bin_dep_seqno, ~0ull, true); - - fail: - drm_free_large(temp); -diff --git a/drivers/gpu/drm/vc4/vc4_render_cl.c b/drivers/gpu/drm/vc4/vc4_render_cl.c -index 0f12418..08886a3 100644 ---- a/drivers/gpu/drm/vc4/vc4_render_cl.c -+++ b/drivers/gpu/drm/vc4/vc4_render_cl.c -@@ -45,6 +45,8 @@ struct vc4_rcl_setup { - - struct drm_gem_cma_object *rcl; - u32 next_offset; -+ -+ u32 next_write_bo_index; - }; - - static inline void rcl_u8(struct vc4_rcl_setup *setup, u8 val) -@@ -407,6 +409,8 @@ static int vc4_rcl_msaa_surface_setup(struct vc4_exec_info *exec, - if (!*obj) - return -EINVAL; - -+ exec->rcl_write_bo[exec->rcl_write_bo_count++] = *obj; -+ - if (surf->offset & 0xf) { - DRM_ERROR("MSAA write must be 16b aligned.\n"); - return -EINVAL; -@@ -417,7 +421,8 @@ static int vc4_rcl_msaa_surface_setup(struct vc4_exec_info *exec, - - static int vc4_rcl_surface_setup(struct vc4_exec_info *exec, - struct drm_gem_cma_object **obj, -- struct drm_vc4_submit_rcl_surface *surf) -+ struct drm_vc4_submit_rcl_surface *surf, -+ bool is_write) - { - uint8_t tiling = VC4_GET_FIELD(surf->bits, - VC4_LOADSTORE_TILE_BUFFER_TILING); -@@ -440,6 +445,9 @@ static int vc4_rcl_surface_setup(struct vc4_exec_info *exec, - if (!*obj) - return -EINVAL; - -+ if (is_write) -+ exec->rcl_write_bo[exec->rcl_write_bo_count++] = *obj; -+ - if (surf->flags & VC4_SUBMIT_RCL_SURFACE_READ_IS_FULL_RES) { - if (surf == &exec->args->zs_write) { - DRM_ERROR("general zs write may not be a full-res.\n"); -@@ -542,6 +550,8 @@ vc4_rcl_render_config_surface_setup(struct vc4_exec_info *exec, - if (!*obj) - return -EINVAL; - -+ exec->rcl_write_bo[exec->rcl_write_bo_count++] = *obj; -+ - if (tiling > VC4_TILING_FORMAT_LT) { - DRM_ERROR("Bad tiling format\n"); - return -EINVAL; -@@ -599,15 +609,18 @@ int vc4_get_rcl(struct drm_device *dev, struct vc4_exec_info *exec) - if (ret) - return ret; - -- ret = vc4_rcl_surface_setup(exec, &setup.color_read, &args->color_read); -+ ret = vc4_rcl_surface_setup(exec, &setup.color_read, &args->color_read, -+ false); - if (ret) - return ret; - -- ret = vc4_rcl_surface_setup(exec, &setup.zs_read, &args->zs_read); -+ ret = vc4_rcl_surface_setup(exec, &setup.zs_read, &args->zs_read, -+ false); - if (ret) - return ret; - -- ret = vc4_rcl_surface_setup(exec, &setup.zs_write, &args->zs_write); -+ ret = vc4_rcl_surface_setup(exec, &setup.zs_write, &args->zs_write, -+ true); - if (ret) - return ret; - -diff --git a/drivers/gpu/drm/vc4/vc4_validate.c b/drivers/gpu/drm/vc4/vc4_validate.c -index 9ce1d0a..26503e3 100644 ---- a/drivers/gpu/drm/vc4/vc4_validate.c -+++ b/drivers/gpu/drm/vc4/vc4_validate.c -@@ -267,6 +267,9 @@ validate_indexed_prim_list(VALIDATE_ARGS) - if (!ib) - return -EINVAL; - -+ exec->bin_dep_seqno = max(exec->bin_dep_seqno, -+ to_vc4_bo(&ib->base)->write_seqno); -+ - if (offset > ib->base.size || - (ib->base.size - offset) / index_size < length) { - DRM_ERROR("IB access overflow (%d + %d*%d > %zd)\n", -@@ -555,8 +558,7 @@ static bool - reloc_tex(struct vc4_exec_info *exec, - void *uniform_data_u, - struct vc4_texture_sample_info *sample, -- uint32_t texture_handle_index) -- -+ uint32_t texture_handle_index, bool is_cs) - { - struct drm_gem_cma_object *tex; - uint32_t p0 = *(uint32_t *)(uniform_data_u + sample->p_offset[0]); -@@ -714,6 +716,11 @@ reloc_tex(struct vc4_exec_info *exec, - - *validated_p0 = tex->paddr + p0; - -+ if (is_cs) { -+ exec->bin_dep_seqno = max(exec->bin_dep_seqno, -+ to_vc4_bo(&tex->base)->write_seqno); -+ } -+ - return true; - fail: - DRM_INFO("Texture p0 at %d: 0x%08x\n", sample->p_offset[0], p0); -@@ -835,7 +842,8 @@ validate_gl_shader_rec(struct drm_device *dev, - if (!reloc_tex(exec, - uniform_data_u, - &validated_shader->texture_samples[tex], -- texture_handles_u[tex])) { -+ texture_handles_u[tex], -+ i == 2)) { - return -EINVAL; - } - } -@@ -867,6 +875,9 @@ validate_gl_shader_rec(struct drm_device *dev, - uint32_t stride = *(uint8_t *)(pkt_u + o + 5); - uint32_t max_index; - -+ exec->bin_dep_seqno = max(exec->bin_dep_seqno, -+ to_vc4_bo(&vbo->base)->write_seqno); -+ - if (state->addr & 0x8) - stride |= (*(uint32_t *)(pkt_u + 100 + i * 4)) & ~0xff; - --- -2.9.3 - From f379f5432e4b74e3d1d894ce2fefbe1b8a3c24fd Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Wed, 28 Sep 2016 19:20:44 -0700 @@ -868,80 +637,46 @@ index 400615b..c6420b3 100644 -- cgit v0.12 -From 67615c588a059b731df9d019edc3c561d8006ec9 Mon Sep 17 00:00:00 2001 -From: Eric Anholt -Date: Wed, 1 Jun 2016 12:05:36 -0700 -Subject: clk: bcm2835: Skip PLLC clocks when deciding on a new clock parent +From 30772942cc1095c3129eecfa182e2c568e566b9d Mon Sep 17 00:00:00 2001 +From: Dan Carpenter +Date: Thu, 13 Oct 2016 11:54:31 +0300 +Subject: [PATCH] drm/vc4: Fix a couple error codes in vc4_cl_lookup_bos() -If the firmware had set up a clock to source from PLLC, go along with -it. But if we're looking for a new parent, we don't want to switch it -to PLLC because the firmware will force PLLC (and thus the AXI bus -clock) to different frequencies during over-temp/under-voltage, -without notification to Linux. +If the allocation fails the current code returns success. If +copy_from_user() fails it returns the number of bytes remaining instead +of -EFAULT. -On my system, this moves the Linux-enabled HDMI state machine and DSI1 -escape clock over to plld_per from pllc_per. EMMC still ends up on -pllc_per, because the firmware had set it up to use that. - -Signed-off-by: Eric Anholt -Fixes: 41691b8862e2 ("clk: bcm2835: Add support for programming the audio domain clocks") -Acked-by: Martin Sperl -Signed-off-by: Stephen Boyd +Fixes: d5b1a78a772f ("drm/vc4: Add support for drawing 3D frames.") +Signed-off-by: Dan Carpenter +Reviewed-by: Eric Anholt --- - drivers/clk/bcm/clk-bcm2835.c | 23 +++++++++++++++++++++++ - 1 file changed, 23 insertions(+) + drivers/gpu/drm/vc4/vc4_gem.c | 9 +++++---- + 1 file changed, 5 insertions(+), 4 deletions(-) -diff --git a/drivers/clk/bcm/clk-bcm2835.c b/drivers/clk/bcm/clk-bcm2835.c -index c6420b3..e8a9646a 100644 ---- a/drivers/clk/bcm/clk-bcm2835.c -+++ b/drivers/clk/bcm/clk-bcm2835.c -@@ -1009,16 +1009,28 @@ static int bcm2835_clock_set_rate(struct clk_hw *hw, - return 0; - } +diff --git a/drivers/gpu/drm/vc4/vc4_gem.c b/drivers/gpu/drm/vc4/vc4_gem.c +index ae1609e..4050540 100644 +--- a/drivers/gpu/drm/vc4/vc4_gem.c ++++ b/drivers/gpu/drm/vc4/vc4_gem.c +@@ -548,14 +548,15 @@ vc4_cl_lookup_bos(struct drm_device *dev, -+static bool -+bcm2835_clk_is_pllc(struct clk_hw *hw) -+{ -+ if (!hw) -+ return false; -+ -+ return strncmp(clk_hw_get_name(hw), "pllc", 4) == 0; -+} -+ - static int bcm2835_clock_determine_rate(struct clk_hw *hw, - struct clk_rate_request *req) - { - struct bcm2835_clock *clock = bcm2835_clock_from_hw(hw); - struct clk_hw *parent, *best_parent = NULL; -+ bool current_parent_is_pllc; - unsigned long rate, best_rate = 0; - unsigned long prate, best_prate = 0; - size_t i; - u32 div; + handles = drm_malloc_ab(exec->bo_count, sizeof(uint32_t)); + if (!handles) { ++ ret = -ENOMEM; + DRM_ERROR("Failed to allocate incoming GEM handles\n"); + goto fail; + } -+ current_parent_is_pllc = bcm2835_clk_is_pllc(clk_hw_get_parent(hw)); -+ - /* - * Select parent clock that results in the closest but lower rate - */ -@@ -1026,6 +1038,17 @@ static int bcm2835_clock_determine_rate(struct clk_hw *hw, - parent = clk_hw_get_parent_by_index(hw, i); - if (!parent) - continue; -+ -+ /* -+ * Don't choose a PLLC-derived clock as our parent -+ * unless it had been manually set that way. PLLC's -+ * frequency gets adjusted by the firmware due to -+ * over-temp or under-voltage conditions, without -+ * prior notification to our clock consumer. -+ */ -+ if (bcm2835_clk_is_pllc(parent) && !current_parent_is_pllc) -+ continue; -+ - prate = clk_hw_get_rate(parent); - div = bcm2835_clock_choose_div(hw, req->rate, prate, true); - rate = bcm2835_clock_rate_from_divisor(clock, prate, div); +- ret = copy_from_user(handles, +- (void __user *)(uintptr_t)args->bo_handles, +- exec->bo_count * sizeof(uint32_t)); +- if (ret) { ++ if (copy_from_user(handles, ++ (void __user *)(uintptr_t)args->bo_handles, ++ exec->bo_count * sizeof(uint32_t))) { ++ ret = -EFAULT; + DRM_ERROR("Failed to copy in GEM handles\n"); + goto fail; + } -- -cgit v0.12 +2.9.3 diff --git a/kernel.spec b/kernel.spec index b5bcfefc9..2ef4ec217 100644 --- a/kernel.spec +++ b/kernel.spec @@ -54,7 +54,7 @@ Summary: The Linux kernel %if 0%{?released_kernel} # Do we have a -stable update to apply? -%define stable_update 5 +%define stable_update 6 # Set rpm version accordingly %if 0%{?stable_update} %define stablerev %{stable_update} @@ -513,6 +513,9 @@ Patch425: arm64-pcie-quirks.patch # http://www.spinics.net/lists/linux-tegra/msg26029.html Patch426: usb-phy-tegra-Add-38.4MHz-clock-table-entry.patch +Patch427: ARM-OMAP4-Fix-crashes.patch +Patch428: arm-revert-mmc-omap_hsmmc-Use-dma_request_chan-for-reque.patch + # http://patchwork.ozlabs.org/patch/587554/ Patch430: ARM-tegra-usb-no-reset.patch @@ -626,9 +629,6 @@ Patch849: 0001-iio-Use-event-header-from-kernel-tree.patch # CVE-2016-9083 CVE-2016-9084 rhbz 1389258 1389259 1389285 Patch850: v3-vfio-pci-Fix-integer-overflows-bitmask-check.patch -# Skylake i915 fixes from 4.9 -Patch851: drm_i915_skl_Backport_watermark_fixes_for_4.8.y.patch - #rhbz 1325354 Patch852: 0001-HID-input-ignore-System-Control-application-usages-i.patch @@ -2159,6 +2159,10 @@ fi # # %changelog +* Tue Nov 1 2016 Peter Robinson +- Linux v4.8.6 +- Fixes for omap4 (panda board) + * Fri Oct 28 2016 Justin M. Forbes - 4.8.5-200 - Linux v4.8.5 diff --git a/sources b/sources index bfe1e002b..07d525ab6 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ c1af0afbd3df35c1ccdc7a5118cd2d07 linux-4.8.tar.xz 0dad03f586e835d538d3e0d2cbdb9a28 perf-man-4.8.tar.gz -3b00c3fcfbe05e3cb7702e8db6fee28b patch-4.8.5.xz +666753363fd69ac2c1a94f4349a7197e patch-4.8.6.xz From 342125282e9bb1b6e773249b1e619cb48f1dde3d Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Thu, 3 Nov 2016 09:15:33 -0500 Subject: [PATCH 159/275] dm raid: fix compat_features validation (rhbz 1391279) --- ...-raid-fix-compat_features-validation.patch | 39 +++++++++++++++++++ kernel.spec | 8 +++- 2 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 0001-dm-raid-fix-compat_features-validation.patch diff --git a/0001-dm-raid-fix-compat_features-validation.patch b/0001-dm-raid-fix-compat_features-validation.patch new file mode 100644 index 000000000..c418f2632 --- /dev/null +++ b/0001-dm-raid-fix-compat_features-validation.patch @@ -0,0 +1,39 @@ +From 5c33677c87cbe44ae04df69c4a29c1750a9ec4e5 Mon Sep 17 00:00:00 2001 +From: Andy Whitcroft +Date: Tue, 11 Oct 2016 15:16:57 +0100 +Subject: [PATCH] dm raid: fix compat_features validation + +In ecbfb9f118bce4 ("dm raid: add raid level takeover support") a new +compatible feature flag was added. Validation for these compat_features +was added but this only passes for new raid mappings with this feature +flag. This causes previously created raid mappings to be failed at +import. + +Check compat_features for the only valid combination. + +Fixes: ecbfb9f118bce4 ("dm raid: add raid level takeover support") +Cc: stable@vger.kernel.org # v4.8 +Signed-off-by: Andy Whitcroft +Signed-off-by: Heinz Mauelshagen +Signed-off-by: Mike Snitzer +--- + drivers/md/dm-raid.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/drivers/md/dm-raid.c b/drivers/md/dm-raid.c +index 8abde6b..2a39700 100644 +--- a/drivers/md/dm-raid.c ++++ b/drivers/md/dm-raid.c +@@ -2258,7 +2258,8 @@ static int super_validate(struct raid_set *rs, struct md_rdev *rdev) + if (!mddev->events && super_init_validation(rs, rdev)) + return -EINVAL; + +- if (le32_to_cpu(sb->compat_features) != FEATURE_FLAG_SUPPORTS_V190) { ++ if (le32_to_cpu(sb->compat_features) && ++ le32_to_cpu(sb->compat_features) != FEATURE_FLAG_SUPPORTS_V190) { + rs->ti->error = "Unable to assemble array: Unknown flag(s) in compatible feature flags"; + return -EINVAL; + } +-- +2.7.4 + diff --git a/kernel.spec b/kernel.spec index 2ef4ec217..7e572d887 100644 --- a/kernel.spec +++ b/kernel.spec @@ -42,7 +42,7 @@ Summary: The Linux kernel # For non-released -rc kernels, this will be appended after the rcX and # gitX tags, so a 3 here would become part of release "0.rcX.gitX.3" # -%global baserelease 200 +%global baserelease 201 %global fedora_build %{baserelease} # base_sublevel is the kernel version we're starting with and patching @@ -632,6 +632,9 @@ Patch850: v3-vfio-pci-Fix-integer-overflows-bitmask-check.patch #rhbz 1325354 Patch852: 0001-HID-input-ignore-System-Control-application-usages-i.patch +#rhbz 1391279 +Patch853: 0001-dm-raid-fix-compat_features-validation.patch + # END OF PATCH DEFINITIONS %endif @@ -2159,6 +2162,9 @@ fi # # %changelog +* Wed Nov 2 2016 Justin M. Forbes - 4.8.6-201 +- dm raid: fix compat_features validation (rhbz 1391279) + * Tue Nov 1 2016 Peter Robinson - Linux v4.8.6 - Fixes for omap4 (panda board) From 281c0c0f2d55898d01fad55a47a8d408e2c4e62f Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Thu, 10 Nov 2016 11:11:15 -0600 Subject: [PATCH 160/275] Linux v4.8.7 --- ...-raid-fix-compat_features-validation.patch | 39 ------------------- kernel.spec | 11 +++--- sources | 2 +- 3 files changed, 7 insertions(+), 45 deletions(-) delete mode 100644 0001-dm-raid-fix-compat_features-validation.patch diff --git a/0001-dm-raid-fix-compat_features-validation.patch b/0001-dm-raid-fix-compat_features-validation.patch deleted file mode 100644 index c418f2632..000000000 --- a/0001-dm-raid-fix-compat_features-validation.patch +++ /dev/null @@ -1,39 +0,0 @@ -From 5c33677c87cbe44ae04df69c4a29c1750a9ec4e5 Mon Sep 17 00:00:00 2001 -From: Andy Whitcroft -Date: Tue, 11 Oct 2016 15:16:57 +0100 -Subject: [PATCH] dm raid: fix compat_features validation - -In ecbfb9f118bce4 ("dm raid: add raid level takeover support") a new -compatible feature flag was added. Validation for these compat_features -was added but this only passes for new raid mappings with this feature -flag. This causes previously created raid mappings to be failed at -import. - -Check compat_features for the only valid combination. - -Fixes: ecbfb9f118bce4 ("dm raid: add raid level takeover support") -Cc: stable@vger.kernel.org # v4.8 -Signed-off-by: Andy Whitcroft -Signed-off-by: Heinz Mauelshagen -Signed-off-by: Mike Snitzer ---- - drivers/md/dm-raid.c | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/drivers/md/dm-raid.c b/drivers/md/dm-raid.c -index 8abde6b..2a39700 100644 ---- a/drivers/md/dm-raid.c -+++ b/drivers/md/dm-raid.c -@@ -2258,7 +2258,8 @@ static int super_validate(struct raid_set *rs, struct md_rdev *rdev) - if (!mddev->events && super_init_validation(rs, rdev)) - return -EINVAL; - -- if (le32_to_cpu(sb->compat_features) != FEATURE_FLAG_SUPPORTS_V190) { -+ if (le32_to_cpu(sb->compat_features) && -+ le32_to_cpu(sb->compat_features) != FEATURE_FLAG_SUPPORTS_V190) { - rs->ti->error = "Unable to assemble array: Unknown flag(s) in compatible feature flags"; - return -EINVAL; - } --- -2.7.4 - diff --git a/kernel.spec b/kernel.spec index 7e572d887..b3171736d 100644 --- a/kernel.spec +++ b/kernel.spec @@ -42,7 +42,7 @@ Summary: The Linux kernel # For non-released -rc kernels, this will be appended after the rcX and # gitX tags, so a 3 here would become part of release "0.rcX.gitX.3" # -%global baserelease 201 +%global baserelease 200 %global fedora_build %{baserelease} # base_sublevel is the kernel version we're starting with and patching @@ -54,7 +54,7 @@ Summary: The Linux kernel %if 0%{?released_kernel} # Do we have a -stable update to apply? -%define stable_update 6 +%define stable_update 7 # Set rpm version accordingly %if 0%{?stable_update} %define stablerev %{stable_update} @@ -632,9 +632,6 @@ Patch850: v3-vfio-pci-Fix-integer-overflows-bitmask-check.patch #rhbz 1325354 Patch852: 0001-HID-input-ignore-System-Control-application-usages-i.patch -#rhbz 1391279 -Patch853: 0001-dm-raid-fix-compat_features-validation.patch - # END OF PATCH DEFINITIONS %endif @@ -2162,6 +2159,10 @@ fi # # %changelog +* Thu Nov 10 2016 Justin M. Forbes - 4.8.7-200 +- Linux v4.8.7 +- Fixes CVE-2016-8630 (rhbz 1393350 1393358) + * Wed Nov 2 2016 Justin M. Forbes - 4.8.6-201 - dm raid: fix compat_features validation (rhbz 1391279) diff --git a/sources b/sources index 07d525ab6..a8bdd281b 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ c1af0afbd3df35c1ccdc7a5118cd2d07 linux-4.8.tar.xz 0dad03f586e835d538d3e0d2cbdb9a28 perf-man-4.8.tar.gz -666753363fd69ac2c1a94f4349a7197e patch-4.8.6.xz +ad7cdae5329497d07582b31858516686 patch-4.8.7.xz From 8d108f7682c5ea8f3e1febf3eb640ed691798381 Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Fri, 11 Nov 2016 07:46:27 -0600 Subject: [PATCH 161/275] Refresh status of MST capable connectors (rhbz 1392885) --- ...-that-status-of-MST-capable-connecto.patch | 61 +++++++++++++++++++ kernel.spec | 8 ++- 2 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 0001-drm-i915-Refresh-that-status-of-MST-capable-connecto.patch diff --git a/0001-drm-i915-Refresh-that-status-of-MST-capable-connecto.patch b/0001-drm-i915-Refresh-that-status-of-MST-capable-connecto.patch new file mode 100644 index 000000000..6e38648ac --- /dev/null +++ b/0001-drm-i915-Refresh-that-status-of-MST-capable-connecto.patch @@ -0,0 +1,61 @@ +From 1aab956c7b8872fb6976328316bfad62c6e67cf8 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ville=20Syrj=C3=A4l=C3=A4?= +Date: Fri, 21 Oct 2016 16:44:38 +0300 +Subject: [PATCH] drm/i915: Refresh that status of MST capable connectors in + ->detect() +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Once we've determined that the sink is MST capable we never end up +running through the full detect cycle again, despite getting HPDs. +Fix tht by ripping out the incorrect piece of code responsible. + +This got broken when I moved the long HPD handling to the ->detect() +hook, but failed to remove the leftover code. + +Cc: Ander Conselvan de Oliveira +Cc: drm-intel-fixes@lists.freedesktop.org +Cc: Rui Tiago Matos +Tested-by: Rui Tiago Matos +Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=98323 +Cc: Kirill A. Shutemov +Tested-by: Kirill A. Shutemov +References: https://bugs.freedesktop.org/show_bug.cgi?id=98306 +Fixes: 27d4efc5591a ("drm/i915: Move long hpd handling into the hotplug work") +Signed-off-by: Ville Syrjälä +Link: http://patchwork.freedesktop.org/patch/msgid/1477057478-29328-1-git-send-email-ville.syrjala@linux.intel.com +Reviewed-by: Chris Wilson +--- + drivers/gpu/drm/i915/intel_dp.c | 10 ---------- + 1 file changed, 10 deletions(-) + +diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c +index f30db8f..80db8a3 100644 +--- a/drivers/gpu/drm/i915/intel_dp.c ++++ b/drivers/gpu/drm/i915/intel_dp.c +@@ -4492,21 +4492,11 @@ static enum drm_connector_status + intel_dp_detect(struct drm_connector *connector, bool force) + { + struct intel_dp *intel_dp = intel_attached_dp(connector); +- struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp); +- struct intel_encoder *intel_encoder = &intel_dig_port->base; + enum drm_connector_status status = connector->status; + + DRM_DEBUG_KMS("[CONNECTOR:%d:%s]\n", + connector->base.id, connector->name); + +- if (intel_dp->is_mst) { +- /* MST devices are disconnected from a monitor POV */ +- intel_dp_unset_edid(intel_dp); +- if (intel_encoder->type != INTEL_OUTPUT_EDP) +- intel_encoder->type = INTEL_OUTPUT_DP; +- return connector_status_disconnected; +- } +- + /* If full detect is not performed yet, do a full detect */ + if (!intel_dp->detect_done) + status = intel_dp_long_pulse(intel_dp->attached_connector); +-- +2.7.4 + diff --git a/kernel.spec b/kernel.spec index b3171736d..be9abc30b 100644 --- a/kernel.spec +++ b/kernel.spec @@ -632,6 +632,9 @@ Patch850: v3-vfio-pci-Fix-integer-overflows-bitmask-check.patch #rhbz 1325354 Patch852: 0001-HID-input-ignore-System-Control-application-usages-i.patch +#rhbz 1392885 +Patch853: 0001-drm-i915-Refresh-that-status-of-MST-capable-connecto.patch + # END OF PATCH DEFINITIONS %endif @@ -2159,7 +2162,10 @@ fi # # %changelog -* Thu Nov 10 2016 Justin M. Forbes - 4.8.7-200 +* Fri Nov 11 2016 Justin M. Forbes - 4.8.7-200 +- Refresh status of MST capable connectors (rhbz 1392885) + +* Thu Nov 10 2016 Justin M. Forbes - Linux v4.8.7 - Fixes CVE-2016-8630 (rhbz 1393350 1393358) From ea5d8affbfc7e429838eac4523f6950f7a28d06b Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Fri, 11 Nov 2016 15:19:28 -0600 Subject: [PATCH 162/275] Add maxwell to backlight init (rhbz 1390308) --- kernel.spec | 6 ++++++ nouveau-add-maxwell-to-backlight-init.patch | 24 +++++++++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 nouveau-add-maxwell-to-backlight-init.patch diff --git a/kernel.spec b/kernel.spec index be9abc30b..13bbd8591 100644 --- a/kernel.spec +++ b/kernel.spec @@ -635,6 +635,9 @@ Patch852: 0001-HID-input-ignore-System-Control-application-usages-i.patch #rhbz 1392885 Patch853: 0001-drm-i915-Refresh-that-status-of-MST-capable-connecto.patch +#rhbz 1390308 +Patch854: nouveau-add-maxwell-to-backlight-init.patch + # END OF PATCH DEFINITIONS %endif @@ -2162,6 +2165,9 @@ fi # # %changelog +* Fri Nov 11 2016 Justin M. Forbes +- Nouveau: Add Maxwell to backlight initialization (rhbz 1390308) + * Fri Nov 11 2016 Justin M. Forbes - 4.8.7-200 - Refresh status of MST capable connectors (rhbz 1392885) diff --git a/nouveau-add-maxwell-to-backlight-init.patch b/nouveau-add-maxwell-to-backlight-init.patch new file mode 100644 index 000000000..9d89069c1 --- /dev/null +++ b/nouveau-add-maxwell-to-backlight-init.patch @@ -0,0 +1,24 @@ +From bbe1f94a8b3f2e8622dd400a6827d3242005d951 Mon Sep 17 00:00:00 2001 +From: Faris Alsalama +Date: Sat, 21 May 2016 14:41:43 -0400 +Subject: drm/nouveau/kms: add Maxwell to backlight initialization + +Signed-off-by: Faris Alsalama +Acked-by: Acked-by: Pierre Moreau +Signed-off-by: Ben Skeggs + +diff --git a/drivers/gpu/drm/nouveau/nouveau_backlight.c b/drivers/gpu/drm/nouveau/nouveau_backlight.c +index f5101be..5e2c568 100644 +--- a/drivers/gpu/drm/nouveau/nouveau_backlight.c ++++ b/drivers/gpu/drm/nouveau/nouveau_backlight.c +@@ -232,6 +232,7 @@ nouveau_backlight_init(struct drm_device *dev) + case NV_DEVICE_INFO_V0_TESLA: + case NV_DEVICE_INFO_V0_FERMI: + case NV_DEVICE_INFO_V0_KEPLER: ++ case NV_DEVICE_INFO_V0_MAXWELL: + return nv50_backlight_init(connector); + default: + break; +-- +cgit v0.10.2 + From c3626d1bf69a0e047cdaee13d1d90265f4d86507 Mon Sep 17 00:00:00 2001 From: Laura Abbott Date: Mon, 14 Nov 2016 14:53:27 -0800 Subject: [PATCH 163/275] Fix for some Yoga laptop WIFI (rhbz 1385823) --- ...apad-laptop-Add-Lenovo-Yoga-910-13IK.patch | 40 +++++++++++++++++++ kernel.spec | 6 +++ 2 files changed, 46 insertions(+) create mode 100644 0001-platform-x86-ideapad-laptop-Add-Lenovo-Yoga-910-13IK.patch diff --git a/0001-platform-x86-ideapad-laptop-Add-Lenovo-Yoga-910-13IK.patch b/0001-platform-x86-ideapad-laptop-Add-Lenovo-Yoga-910-13IK.patch new file mode 100644 index 000000000..42e935206 --- /dev/null +++ b/0001-platform-x86-ideapad-laptop-Add-Lenovo-Yoga-910-13IK.patch @@ -0,0 +1,40 @@ +From 40c30bbf3377babc4d6bb16b699184236a8bfa27 Mon Sep 17 00:00:00 2001 +From: Brian Masney +Date: Tue, 11 Oct 2016 19:28:02 -0400 +Subject: [PATCH] platform/x86: ideapad-laptop: Add Lenovo Yoga 910-13IKB to + no_hw_rfkill dmi list + +The Lenovo Yoga 910-13IKB does not have a hw rfkill switch, and trying +to read the hw rfkill switch through the ideapad module causes it to +always report as blocked. + +This commit adds the Lenovo Yoga 910-13IKB to the no_hw_rfkill dmi list, +fixing the WiFI breakage. + +Signed-off-by: Brian Masney +Signed-off-by: Darren Hart +--- + drivers/platform/x86/ideapad-laptop.c | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/drivers/platform/x86/ideapad-laptop.c b/drivers/platform/x86/ideapad-laptop.c +index d1a091b..a232394 100644 +--- a/drivers/platform/x86/ideapad-laptop.c ++++ b/drivers/platform/x86/ideapad-laptop.c +@@ -933,6 +933,13 @@ static const struct dmi_system_id no_hw_rfkill_list[] = { + DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo YOGA 900"), + }, + }, ++ { ++ .ident = "Lenovo YOGA 910-13IKB", ++ .matches = { ++ DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), ++ DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo YOGA 910-13IKB"), ++ }, ++ }, + {} + }; + +-- +2.7.4 + diff --git a/kernel.spec b/kernel.spec index 13bbd8591..22d34de3e 100644 --- a/kernel.spec +++ b/kernel.spec @@ -638,6 +638,9 @@ Patch853: 0001-drm-i915-Refresh-that-status-of-MST-capable-connecto.patch #rhbz 1390308 Patch854: nouveau-add-maxwell-to-backlight-init.patch +#rhbz 1385823 +Patch855: 0001-platform-x86-ideapad-laptop-Add-Lenovo-Yoga-910-13IK.patch + # END OF PATCH DEFINITIONS %endif @@ -2165,6 +2168,9 @@ fi # # %changelog +* Mon Nov 14 2016 Laura Abbott +- Fix for some Yoga laptop WIFI (rhbz 1385823) + * Fri Nov 11 2016 Justin M. Forbes - Nouveau: Add Maxwell to backlight initialization (rhbz 1390308) From 65ef66a1469550aaacf5c86e4dbb35412b812cce Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Tue, 15 Nov 2016 11:37:39 -0600 Subject: [PATCH 164/275] Linux v4.8.8 --- ...are-of-truncations-done-by-sk_filter.patch | 105 ++++++++++++++++++ kernel.spec | 9 +- sources | 2 +- 3 files changed, 114 insertions(+), 2 deletions(-) create mode 100644 0001-tcp-take-care-of-truncations-done-by-sk_filter.patch diff --git a/0001-tcp-take-care-of-truncations-done-by-sk_filter.patch b/0001-tcp-take-care-of-truncations-done-by-sk_filter.patch new file mode 100644 index 000000000..1c9b2f022 --- /dev/null +++ b/0001-tcp-take-care-of-truncations-done-by-sk_filter.patch @@ -0,0 +1,105 @@ +From ac6e780070e30e4c35bd395acfe9191e6268bdd3 Mon Sep 17 00:00:00 2001 +From: Eric Dumazet +Date: Thu, 10 Nov 2016 13:12:35 -0800 +Subject: [PATCH] tcp: take care of truncations done by sk_filter() + +With syzkaller help, Marco Grassi found a bug in TCP stack, +crashing in tcp_collapse() + +Root cause is that sk_filter() can truncate the incoming skb, +but TCP stack was not really expecting this to happen. +It probably was expecting a simple DROP or ACCEPT behavior. + +We first need to make sure no part of TCP header could be removed. +Then we need to adjust TCP_SKB_CB(skb)->end_seq + +Many thanks to syzkaller team and Marco for giving us a reproducer. + +Signed-off-by: Eric Dumazet +Reported-by: Marco Grassi +Reported-by: Vladis Dronov +Signed-off-by: David S. Miller +--- + include/net/tcp.h | 1 + + net/ipv4/tcp_ipv4.c | 19 ++++++++++++++++++- + net/ipv6/tcp_ipv6.c | 6 ++++-- + 3 files changed, 23 insertions(+), 3 deletions(-) + +diff --git a/include/net/tcp.h b/include/net/tcp.h +index 304a8e1..123979f 100644 +--- a/include/net/tcp.h ++++ b/include/net/tcp.h +@@ -1220,6 +1220,7 @@ static inline void tcp_prequeue_init(struct tcp_sock *tp) + } + + bool tcp_prequeue(struct sock *sk, struct sk_buff *skb); ++int tcp_filter(struct sock *sk, struct sk_buff *skb); + + #undef STATE_TRACE + +diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c +index 61b7be3..2259114 100644 +--- a/net/ipv4/tcp_ipv4.c ++++ b/net/ipv4/tcp_ipv4.c +@@ -1564,6 +1564,21 @@ bool tcp_add_backlog(struct sock *sk, struct sk_buff *skb) + } + EXPORT_SYMBOL(tcp_prequeue); + ++int tcp_filter(struct sock *sk, struct sk_buff *skb) ++{ ++ struct tcphdr *th = (struct tcphdr *)skb->data; ++ unsigned int eaten = skb->len; ++ int err; ++ ++ err = sk_filter_trim_cap(sk, skb, th->doff * 4); ++ if (!err) { ++ eaten -= skb->len; ++ TCP_SKB_CB(skb)->end_seq -= eaten; ++ } ++ return err; ++} ++EXPORT_SYMBOL(tcp_filter); ++ + /* + * From tcp_input.c + */ +@@ -1676,8 +1691,10 @@ int tcp_v4_rcv(struct sk_buff *skb) + + nf_reset(skb); + +- if (sk_filter(sk, skb)) ++ if (tcp_filter(sk, skb)) + goto discard_and_relse; ++ th = (const struct tcphdr *)skb->data; ++ iph = ip_hdr(skb); + + skb->dev = NULL; + +diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c +index 6ca23c2..b9f1fee 100644 +--- a/net/ipv6/tcp_ipv6.c ++++ b/net/ipv6/tcp_ipv6.c +@@ -1229,7 +1229,7 @@ static int tcp_v6_do_rcv(struct sock *sk, struct sk_buff *skb) + if (skb->protocol == htons(ETH_P_IP)) + return tcp_v4_do_rcv(sk, skb); + +- if (sk_filter(sk, skb)) ++ if (tcp_filter(sk, skb)) + goto discard; + + /* +@@ -1457,8 +1457,10 @@ static int tcp_v6_rcv(struct sk_buff *skb) + if (tcp_v6_inbound_md5_hash(sk, skb)) + goto discard_and_relse; + +- if (sk_filter(sk, skb)) ++ if (tcp_filter(sk, skb)) + goto discard_and_relse; ++ th = (const struct tcphdr *)skb->data; ++ hdr = ipv6_hdr(skb); + + skb->dev = NULL; + +-- +2.7.4 + diff --git a/kernel.spec b/kernel.spec index 22d34de3e..be678b61b 100644 --- a/kernel.spec +++ b/kernel.spec @@ -54,7 +54,7 @@ Summary: The Linux kernel %if 0%{?released_kernel} # Do we have a -stable update to apply? -%define stable_update 7 +%define stable_update 8 # Set rpm version accordingly %if 0%{?stable_update} %define stablerev %{stable_update} @@ -641,6 +641,9 @@ Patch854: nouveau-add-maxwell-to-backlight-init.patch #rhbz 1385823 Patch855: 0001-platform-x86-ideapad-laptop-Add-Lenovo-Yoga-910-13IK.patch +#CVE-2016-8645 rhbz 1393904 1393908 +Patch856: 0001-tcp-take-care-of-truncations-done-by-sk_filter.patch + # END OF PATCH DEFINITIONS %endif @@ -2168,6 +2171,10 @@ fi # # %changelog +* Tue Nov 15 2016 Justin M. Forbes - 4.8.8-200 +- Linux v4.8.8 +- Fix crash in tcp_collapse CVE-2016-8645 (rhbz 1393904 1393908) + * Mon Nov 14 2016 Laura Abbott - Fix for some Yoga laptop WIFI (rhbz 1385823) diff --git a/sources b/sources index a8bdd281b..0da55e4e1 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ c1af0afbd3df35c1ccdc7a5118cd2d07 linux-4.8.tar.xz 0dad03f586e835d538d3e0d2cbdb9a28 perf-man-4.8.tar.gz -ad7cdae5329497d07582b31858516686 patch-4.8.7.xz +38e85040e09193251766975d6fd30d08 patch-4.8.8.xz From a6b7927cc3de55d346e7d193dde1b00db775a0fa Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Mon, 21 Nov 2016 11:26:19 -0600 Subject: [PATCH 165/275] Linux v4.8.10 --- ...-return-type-of-cpu_power_is_cpu_onl.patch | 49 -------- ...are-of-truncations-done-by-sk_filter.patch | 105 ------------------ kernel.spec | 11 +- sources | 2 +- 4 files changed, 5 insertions(+), 162 deletions(-) delete mode 100644 0001-cpupower-Correct-return-type-of-cpu_power_is_cpu_onl.patch delete mode 100644 0001-tcp-take-care-of-truncations-done-by-sk_filter.patch diff --git a/0001-cpupower-Correct-return-type-of-cpu_power_is_cpu_onl.patch b/0001-cpupower-Correct-return-type-of-cpu_power_is_cpu_onl.patch deleted file mode 100644 index 05b8cf999..000000000 --- a/0001-cpupower-Correct-return-type-of-cpu_power_is_cpu_onl.patch +++ /dev/null @@ -1,49 +0,0 @@ -From 9f692cbe4a01dd9e3c3e954ec6b59662b68f9ce4 Mon Sep 17 00:00:00 2001 -From: Laura Abbott -Date: Fri, 9 Sep 2016 10:19:02 -0700 -Subject: [PATCH] cpupower: Correct return type of cpu_power_is_cpu_online in - cpufreq -To: Thomas Renninger -Cc: linux-pm@vger.kernel.org -Cc: linux-kernel@vger.kernel.org - -When converting to a shared library in ac5a181d065d ("cpupower: Add -cpuidle parts into library"), cpu_freq_cpu_exists was converted to -cpupower_is_cpu_online. cpu_req_cpu_exists returned 0 on success and --ENOSYS on failure whereas cpupower_is_cpu_online returns 1 on success. -Check for the correct return value in cpufreq-set. - -See https://bugzilla.redhat.com/show_bug.cgi?id=1374212 - -Fixes: ac5a181d065d ("cpupower: Add cpuidle parts into library") -Reported-by: Julian Seward -Signed-off-by: Laura Abbott ---- - tools/power/cpupower/utils/cpufreq-set.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/tools/power/cpupower/utils/cpufreq-set.c b/tools/power/cpupower/utils/cpufreq-set.c -index b4bf769..8971d71 100644 ---- a/tools/power/cpupower/utils/cpufreq-set.c -+++ b/tools/power/cpupower/utils/cpufreq-set.c -@@ -296,7 +296,7 @@ int cmd_freq_set(int argc, char **argv) - struct cpufreq_affected_cpus *cpus; - - if (!bitmask_isbitset(cpus_chosen, cpu) || -- cpupower_is_cpu_online(cpu)) -+ cpupower_is_cpu_online(cpu) != 1) - continue; - - cpus = cpufreq_get_related_cpus(cpu); -@@ -316,7 +316,7 @@ int cmd_freq_set(int argc, char **argv) - cpu <= bitmask_last(cpus_chosen); cpu++) { - - if (!bitmask_isbitset(cpus_chosen, cpu) || -- cpupower_is_cpu_online(cpu)) -+ cpupower_is_cpu_online(cpu) != 1) - continue; - - if (cpupower_is_cpu_online(cpu) != 1) --- -2.10.0 - diff --git a/0001-tcp-take-care-of-truncations-done-by-sk_filter.patch b/0001-tcp-take-care-of-truncations-done-by-sk_filter.patch deleted file mode 100644 index 1c9b2f022..000000000 --- a/0001-tcp-take-care-of-truncations-done-by-sk_filter.patch +++ /dev/null @@ -1,105 +0,0 @@ -From ac6e780070e30e4c35bd395acfe9191e6268bdd3 Mon Sep 17 00:00:00 2001 -From: Eric Dumazet -Date: Thu, 10 Nov 2016 13:12:35 -0800 -Subject: [PATCH] tcp: take care of truncations done by sk_filter() - -With syzkaller help, Marco Grassi found a bug in TCP stack, -crashing in tcp_collapse() - -Root cause is that sk_filter() can truncate the incoming skb, -but TCP stack was not really expecting this to happen. -It probably was expecting a simple DROP or ACCEPT behavior. - -We first need to make sure no part of TCP header could be removed. -Then we need to adjust TCP_SKB_CB(skb)->end_seq - -Many thanks to syzkaller team and Marco for giving us a reproducer. - -Signed-off-by: Eric Dumazet -Reported-by: Marco Grassi -Reported-by: Vladis Dronov -Signed-off-by: David S. Miller ---- - include/net/tcp.h | 1 + - net/ipv4/tcp_ipv4.c | 19 ++++++++++++++++++- - net/ipv6/tcp_ipv6.c | 6 ++++-- - 3 files changed, 23 insertions(+), 3 deletions(-) - -diff --git a/include/net/tcp.h b/include/net/tcp.h -index 304a8e1..123979f 100644 ---- a/include/net/tcp.h -+++ b/include/net/tcp.h -@@ -1220,6 +1220,7 @@ static inline void tcp_prequeue_init(struct tcp_sock *tp) - } - - bool tcp_prequeue(struct sock *sk, struct sk_buff *skb); -+int tcp_filter(struct sock *sk, struct sk_buff *skb); - - #undef STATE_TRACE - -diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c -index 61b7be3..2259114 100644 ---- a/net/ipv4/tcp_ipv4.c -+++ b/net/ipv4/tcp_ipv4.c -@@ -1564,6 +1564,21 @@ bool tcp_add_backlog(struct sock *sk, struct sk_buff *skb) - } - EXPORT_SYMBOL(tcp_prequeue); - -+int tcp_filter(struct sock *sk, struct sk_buff *skb) -+{ -+ struct tcphdr *th = (struct tcphdr *)skb->data; -+ unsigned int eaten = skb->len; -+ int err; -+ -+ err = sk_filter_trim_cap(sk, skb, th->doff * 4); -+ if (!err) { -+ eaten -= skb->len; -+ TCP_SKB_CB(skb)->end_seq -= eaten; -+ } -+ return err; -+} -+EXPORT_SYMBOL(tcp_filter); -+ - /* - * From tcp_input.c - */ -@@ -1676,8 +1691,10 @@ int tcp_v4_rcv(struct sk_buff *skb) - - nf_reset(skb); - -- if (sk_filter(sk, skb)) -+ if (tcp_filter(sk, skb)) - goto discard_and_relse; -+ th = (const struct tcphdr *)skb->data; -+ iph = ip_hdr(skb); - - skb->dev = NULL; - -diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c -index 6ca23c2..b9f1fee 100644 ---- a/net/ipv6/tcp_ipv6.c -+++ b/net/ipv6/tcp_ipv6.c -@@ -1229,7 +1229,7 @@ static int tcp_v6_do_rcv(struct sock *sk, struct sk_buff *skb) - if (skb->protocol == htons(ETH_P_IP)) - return tcp_v4_do_rcv(sk, skb); - -- if (sk_filter(sk, skb)) -+ if (tcp_filter(sk, skb)) - goto discard; - - /* -@@ -1457,8 +1457,10 @@ static int tcp_v6_rcv(struct sk_buff *skb) - if (tcp_v6_inbound_md5_hash(sk, skb)) - goto discard_and_relse; - -- if (sk_filter(sk, skb)) -+ if (tcp_filter(sk, skb)) - goto discard_and_relse; -+ th = (const struct tcphdr *)skb->data; -+ hdr = ipv6_hdr(skb); - - skb->dev = NULL; - --- -2.7.4 - diff --git a/kernel.spec b/kernel.spec index be678b61b..8f1f60d0c 100644 --- a/kernel.spec +++ b/kernel.spec @@ -54,7 +54,7 @@ Summary: The Linux kernel %if 0%{?released_kernel} # Do we have a -stable update to apply? -%define stable_update 8 +%define stable_update 10 # Set rpm version accordingly %if 0%{?stable_update} %define stablerev %{stable_update} @@ -620,9 +620,6 @@ Patch846: security-selinux-overlayfs-support.patch #rhbz 1360688 Patch847: rc-core-fix-repeat-events.patch -#rhbz 1374212 -Patch848: 0001-cpupower-Correct-return-type-of-cpu_power_is_cpu_onl.patch - #ongoing complaint, full discussion delayed until ksummit/plumbers Patch849: 0001-iio-Use-event-header-from-kernel-tree.patch @@ -641,9 +638,6 @@ Patch854: nouveau-add-maxwell-to-backlight-init.patch #rhbz 1385823 Patch855: 0001-platform-x86-ideapad-laptop-Add-Lenovo-Yoga-910-13IK.patch -#CVE-2016-8645 rhbz 1393904 1393908 -Patch856: 0001-tcp-take-care-of-truncations-done-by-sk_filter.patch - # END OF PATCH DEFINITIONS %endif @@ -2171,6 +2165,9 @@ fi # # %changelog +* Mon Nov 21 2016 Justin M. Forbes - 4.8.10-200 +- Linux v4.8.10 + * Tue Nov 15 2016 Justin M. Forbes - 4.8.8-200 - Linux v4.8.8 - Fix crash in tcp_collapse CVE-2016-8645 (rhbz 1393904 1393908) diff --git a/sources b/sources index 0da55e4e1..7e081ec62 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ c1af0afbd3df35c1ccdc7a5118cd2d07 linux-4.8.tar.xz 0dad03f586e835d538d3e0d2cbdb9a28 perf-man-4.8.tar.gz -38e85040e09193251766975d6fd30d08 patch-4.8.8.xz +37eadcdaefae51ced736747cb817aa58 patch-4.8.10.xz From 6791f9743594d6a59c42d0d86cf29efff5173c21 Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Tue, 22 Nov 2016 08:35:07 -0500 Subject: [PATCH 166/275] Add patch from Dave Anderson to fix live system crash analysis on Aarch64 --- crash-driver.patch | 120 +++++++++++++++++++++++++++++++++++++++++++++ kernel.spec | 3 ++ 2 files changed, 123 insertions(+) diff --git a/crash-driver.patch b/crash-driver.patch index 2b05554b7..97ec4c4ec 100644 --- a/crash-driver.patch +++ b/crash-driver.patch @@ -603,3 +603,123 @@ index 085378a..0258bf8 100644 -- 2.9.3 +From: Dave Anderson +Date: Fri, 18 Nov 2016 11:52:35 -0500 +Cc: onestero@redhat.com +Subject: [PATCH v2] Restore live system crash analysis for ARM64 + +This v2 version simplifies the copy out of the kimage_voffset value +to user-space per Oleg's suggestion. + +Upstream status: N/A + +Test: v2 version tested successfully with a modified crash utility + +The following Linux 4.6 commit breaks support for live system +crash analysis on ARM64: + + commit a7f8de168ace487fa7b88cb154e413cf40e87fc6 + Author: Ard Biesheuvel + arm64: allow kernel Image to be loaded anywhere in physical memory + +The patchset drastically modified the kernel's virtual memory layout, +where notably the static kernel text and data image was moved from the +unity mapped region into the vmalloc region. Prior to Linux 4.6, +the kernel's __virt_to_phys() function was this: + + #define __virt_to_phys(x) (((phys_addr_t)(x) - PAGE_OFFSET + PHYS_OFFSET)) + +When running on a live system, the crash utility could determine PAGE_OFFSET +by looking at the virtual addresses compiled into the vmlinux file, and +PHYS_OFFSET can be determined by looking at /proc/iomem. + +As of Linux 4.6, it is done differently: + + #define __virt_to_phys(x) ({ \ + phys_addr_t __x = (phys_addr_t)(x); \ + __x & BIT(VA_BITS - 1) ? (__x & ~PAGE_OFFSET) + PHYS_OFFSET : \ + (__x - kimage_voffset); }) + +The PAGE_OFFSET/PHYS_OFFSET section of the conditional expression is for +traditional unity-mapped virtual addresses, but kernel text and static +data requires the new "kimage_voffset" variable. Unfortunately, the +contents of the new "kimage_voffset" variable is not available or +calculatable from a user-space perspective, even with root privileges. + +At least the ARM64 developers made its contents available to modules +with an EXPORT_SYMBOL(kimage_voffset) declaration. Accordingly, with +a modification to the /dev/crash driver to return its contents, the +crash utility can run on a live system. + +The patch allows for architecture-specific DEV_CRASH_ARCH_DATA ioctls +to be created, where this is the first instance of one. + + +--- + arch/arm64/include/asm/crash-driver.h | 16 ++++++++++++++++ + drivers/char/crash.c | 13 ++++++++++++- + 2 files changed, 28 insertions(+), 1 deletion(-) + +diff --git a/arch/arm64/include/asm/crash-driver.h b/arch/arm64/include/asm/crash-driver.h +index 43b26da..fe68e7c 100644 +--- a/arch/arm64/include/asm/crash-driver.h ++++ b/arch/arm64/include/asm/crash-driver.h +@@ -3,4 +3,20 @@ + + #include + ++#define DEV_CRASH_ARCH_DATA _IOR('c', 1, long) ++ ++static long ++crash_arch_ioctl(struct file *file, unsigned int cmd, unsigned long arg) ++{ ++ extern u64 kimage_voffset; ++ ++ switch (cmd) ++ { ++ case DEV_CRASH_ARCH_DATA: ++ return put_user(kimage_voffset, (unsigned long __user *)arg); ++ default: ++ return -EINVAL; ++ } ++} ++ + #endif /* _ARM64_CRASH_H */ +diff --git a/drivers/char/crash.c b/drivers/char/crash.c +index 0258bf8..dfb767c 100644 +--- a/drivers/char/crash.c ++++ b/drivers/char/crash.c +@@ -32,7 +32,7 @@ + #include + #include + +-#define CRASH_VERSION "1.2" ++#define CRASH_VERSION "1.3" + + /* + * These are the file operation functions that allow crash utility +@@ -111,10 +111,21 @@ crash_release(struct inode *inode, struct file *filp) + return 0; + } + ++static long ++crash_ioctl(struct file *file, unsigned int cmd, unsigned long arg) ++{ ++#ifdef DEV_CRASH_ARCH_DATA ++ return crash_arch_ioctl(file, cmd, arg); ++#else ++ return -EINVAL; ++#endif ++} ++ + static struct file_operations crash_fops = { + .owner = THIS_MODULE, + .llseek = crash_llseek, + .read = crash_read, ++ .unlocked_ioctl = crash_ioctl, + .open = crash_open, + .release = crash_release, + }; +-- +1.8.3.1 + diff --git a/kernel.spec b/kernel.spec index 8f1f60d0c..38b537251 100644 --- a/kernel.spec +++ b/kernel.spec @@ -2165,6 +2165,9 @@ fi # # %changelog +* Tue Nov 22 2016 Josh Boyer +- Add patch from Dave Anderson to fix live system crash analysis on Aarch64 + * Mon Nov 21 2016 Justin M. Forbes - 4.8.10-200 - Linux v4.8.10 From c8564d4747f762ccdfe849a8417350cd5b8058ae Mon Sep 17 00:00:00 2001 From: Peter Robinson Date: Mon, 28 Nov 2016 07:52:03 +0000 Subject: [PATCH 167/275] Add upstream patch to fix all ARMv7 devices set to initial 200Mhz --- ...r-requirement-from-Samsung-platforms.patch | 88 +++++++++++++++++++ kernel.spec | 5 ++ 2 files changed, 93 insertions(+) create mode 100644 ARM-Drop-fixed-200-Hz-timer-requirement-from-Samsung-platforms.patch diff --git a/ARM-Drop-fixed-200-Hz-timer-requirement-from-Samsung-platforms.patch b/ARM-Drop-fixed-200-Hz-timer-requirement-from-Samsung-platforms.patch new file mode 100644 index 000000000..bf389545b --- /dev/null +++ b/ARM-Drop-fixed-200-Hz-timer-requirement-from-Samsung-platforms.patch @@ -0,0 +1,88 @@ +From patchwork Fri Nov 18 11:15:12 2016 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +Subject: [v3] ARM: Drop fixed 200 Hz timer requirement from Samsung platforms +From: Krzysztof Kozlowski +X-Patchwork-Id: 9436225 +Message-Id: <1479467712-5218-1-git-send-email-krzk@kernel.org> +To: Russell King , Kukjin Kim , + Krzysztof Kozlowski , + Javier Martinez Canillas , + linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, + linux-kernel@vger.kernel.org +Cc: Arnd Bergmann , + Bartlomiej Zolnierkiewicz , + Tomasz Figa , + Ben Dooks , + Sylwester Nawrocki , + Lee Jones , + Marek Szyprowski +Date: Fri, 18 Nov 2016 13:15:12 +0200 + +All Samsung platforms, including the Exynos, are selecting HZ_FIXED with +200 Hz. Unfortunately in case of multiplatform image this affects also +other platforms when Exynos is enabled. + +This looks like an very old legacy code, dating back to initial +upstreaming of S3C24xx. Probably it was required for s3c24xx timer +driver, which was removed in commit ad38bdd15d5b ("ARM: SAMSUNG: Remove +unused plat-samsung/time.c"). + +Since then, this fixed 200 Hz spread everywhere, including out-of-tree +Samsung kernels (SoC vendor's and Tizen's). I believe this choice +was rather an effect of coincidence instead of conscious choice. + +On S3C24xx, the PWM counter is only 16 bit wide, and with the +typical 12MHz input clock that overflows every 5.5ms. This works +with HZ=200 or higher but not with HZ=100 which needs a 10ms +interval between ticks. On Later chips (S3C64xx, S5P and EXYNOS), +the counter is 32 bits and does not have this problem. + +The new samsung_pwm_timer driver solves the problem by scaling the input +clock by a factor of 50 on S3C24xx, which makes it less accurate but +allows HZ=100 as well as CONFIG_NO_HZ with fewer wakeups. + +Few perf mem and sched tests on Odroid XU3 board (Exynos5422, 4x Cortex +A7, 4x Cortex A15) show no regressions when switching from 200 Hz to +other values. + +Reported-by: Lee Jones +[Dropping of 200_HZ from S3C/S5P was suggested by Arnd] +Reported-by: Arnd Bergmann +Signed-off-by: Krzysztof Kozlowski +Cc: Kukjin Kim +[Tested on Exynos5800] +Tested-by: Javier Martinez Canillas +Acked-by: Kukjin Kim +[Tested on S3C2440] +Tested-by: Sylwester Nawrocki +--- + +Changes since v2: +1. Extend message. +2. Add Kukjin's ack. +3. Add Sylwester's tested-by. + +Changes since v1: +1. Add Javier's tested-by. +2. Drop HZ_FIXED also from ARCH_S5PV210 and ARCH_S3C24XX after Arnd + suggestions and analysis. +--- + arch/arm/Kconfig | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig +index b5d529fdffab..ced2e08a9d08 100644 +--- a/arch/arm/Kconfig ++++ b/arch/arm/Kconfig +@@ -1496,8 +1496,7 @@ source kernel/Kconfig.preempt + + config HZ_FIXED + int +- default 200 if ARCH_EBSA110 || ARCH_S3C24XX || \ +- ARCH_S5PV210 || ARCH_EXYNOS4 ++ default 200 if ARCH_EBSA110 + default 128 if SOC_AT91RM9200 + default 0 + diff --git a/kernel.spec b/kernel.spec index 38b537251..3f04ce19a 100644 --- a/kernel.spec +++ b/kernel.spec @@ -525,6 +525,8 @@ Patch432: bcm283x-vc4-fixes.patch Patch433: AllWinner-net-emac.patch +Patch434: ARM-Drop-fixed-200-Hz-timer-requirement-from-Samsung-platforms.patch + Patch460: lib-cpumask-Make-CPUMASK_OFFSTACK-usable-without-deb.patch Patch466: input-kill-stupid-messages.patch @@ -2165,6 +2167,9 @@ fi # # %changelog +* Mon Nov 28 2016 Peter Robinson +- Add upstream patch to fix all ARMv7 devices set to initial 200Mhz + * Tue Nov 22 2016 Josh Boyer - Add patch from Dave Anderson to fix live system crash analysis on Aarch64 From db161bf785001577dc4b61857f7eeb6b33c055cd Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Mon, 28 Nov 2016 09:31:42 -0600 Subject: [PATCH 168/275] Linux v4.8.11 --- ...-that-status-of-MST-capable-connecto.patch | 61 ----------- ...LL-ptr-dereference-in-mpi_powm-ver-3.patch | 100 ++++++++++++++++++ kernel.spec | 12 ++- sources | 2 +- 4 files changed, 109 insertions(+), 66 deletions(-) delete mode 100644 0001-drm-i915-Refresh-that-status-of-MST-capable-connecto.patch create mode 100644 0001-mpi-Fix-NULL-ptr-dereference-in-mpi_powm-ver-3.patch diff --git a/0001-drm-i915-Refresh-that-status-of-MST-capable-connecto.patch b/0001-drm-i915-Refresh-that-status-of-MST-capable-connecto.patch deleted file mode 100644 index 6e38648ac..000000000 --- a/0001-drm-i915-Refresh-that-status-of-MST-capable-connecto.patch +++ /dev/null @@ -1,61 +0,0 @@ -From 1aab956c7b8872fb6976328316bfad62c6e67cf8 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Ville=20Syrj=C3=A4l=C3=A4?= -Date: Fri, 21 Oct 2016 16:44:38 +0300 -Subject: [PATCH] drm/i915: Refresh that status of MST capable connectors in - ->detect() -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Once we've determined that the sink is MST capable we never end up -running through the full detect cycle again, despite getting HPDs. -Fix tht by ripping out the incorrect piece of code responsible. - -This got broken when I moved the long HPD handling to the ->detect() -hook, but failed to remove the leftover code. - -Cc: Ander Conselvan de Oliveira -Cc: drm-intel-fixes@lists.freedesktop.org -Cc: Rui Tiago Matos -Tested-by: Rui Tiago Matos -Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=98323 -Cc: Kirill A. Shutemov -Tested-by: Kirill A. Shutemov -References: https://bugs.freedesktop.org/show_bug.cgi?id=98306 -Fixes: 27d4efc5591a ("drm/i915: Move long hpd handling into the hotplug work") -Signed-off-by: Ville Syrjälä -Link: http://patchwork.freedesktop.org/patch/msgid/1477057478-29328-1-git-send-email-ville.syrjala@linux.intel.com -Reviewed-by: Chris Wilson ---- - drivers/gpu/drm/i915/intel_dp.c | 10 ---------- - 1 file changed, 10 deletions(-) - -diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c -index f30db8f..80db8a3 100644 ---- a/drivers/gpu/drm/i915/intel_dp.c -+++ b/drivers/gpu/drm/i915/intel_dp.c -@@ -4492,21 +4492,11 @@ static enum drm_connector_status - intel_dp_detect(struct drm_connector *connector, bool force) - { - struct intel_dp *intel_dp = intel_attached_dp(connector); -- struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp); -- struct intel_encoder *intel_encoder = &intel_dig_port->base; - enum drm_connector_status status = connector->status; - - DRM_DEBUG_KMS("[CONNECTOR:%d:%s]\n", - connector->base.id, connector->name); - -- if (intel_dp->is_mst) { -- /* MST devices are disconnected from a monitor POV */ -- intel_dp_unset_edid(intel_dp); -- if (intel_encoder->type != INTEL_OUTPUT_EDP) -- intel_encoder->type = INTEL_OUTPUT_DP; -- return connector_status_disconnected; -- } -- - /* If full detect is not performed yet, do a full detect */ - if (!intel_dp->detect_done) - status = intel_dp_long_pulse(intel_dp->attached_connector); --- -2.7.4 - diff --git a/0001-mpi-Fix-NULL-ptr-dereference-in-mpi_powm-ver-3.patch b/0001-mpi-Fix-NULL-ptr-dereference-in-mpi_powm-ver-3.patch new file mode 100644 index 000000000..f5cc8a6b5 --- /dev/null +++ b/0001-mpi-Fix-NULL-ptr-dereference-in-mpi_powm-ver-3.patch @@ -0,0 +1,100 @@ +From f5527fffff3f002b0a6b376163613b82f69de073 Mon Sep 17 00:00:00 2001 +From: Andrey Ryabinin +Date: Thu, 24 Nov 2016 13:23:10 +0000 +Subject: [PATCH] mpi: Fix NULL ptr dereference in mpi_powm() [ver #3] + +This fixes CVE-2016-8650. + +If mpi_powm() is given a zero exponent, it wants to immediately return +either 1 or 0, depending on the modulus. However, if the result was +initalised with zero limb space, no limbs space is allocated and a +NULL-pointer exception ensues. + +Fix this by allocating a minimal amount of limb space for the result when +the 0-exponent case when the result is 1 and not touching the limb space +when the result is 0. + +This affects the use of RSA keys and X.509 certificates that carry them. + +BUG: unable to handle kernel NULL pointer dereference at (null) +IP: [] mpi_powm+0x32/0x7e6 +PGD 0 +Oops: 0002 [#1] SMP +Modules linked in: +CPU: 3 PID: 3014 Comm: keyctl Not tainted 4.9.0-rc6-fscache+ #278 +Hardware name: ASUS All Series/H97-PLUS, BIOS 2306 10/09/2014 +task: ffff8804011944c0 task.stack: ffff880401294000 +RIP: 0010:[] [] mpi_powm+0x32/0x7e6 +RSP: 0018:ffff880401297ad8 EFLAGS: 00010212 +RAX: 0000000000000000 RBX: ffff88040868bec0 RCX: ffff88040868bba0 +RDX: ffff88040868b260 RSI: ffff88040868bec0 RDI: ffff88040868bee0 +RBP: ffff880401297ba8 R08: 0000000000000000 R09: 0000000000000000 +R10: 0000000000000047 R11: ffffffff8183b210 R12: 0000000000000000 +R13: ffff8804087c7600 R14: 000000000000001f R15: ffff880401297c50 +FS: 00007f7a7918c700(0000) GS:ffff88041fb80000(0000) knlGS:0000000000000000 +CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 +CR2: 0000000000000000 CR3: 0000000401250000 CR4: 00000000001406e0 +Stack: + ffff88040868bec0 0000000000000020 ffff880401297b00 ffffffff81376cd4 + 0000000000000100 ffff880401297b10 ffffffff81376d12 ffff880401297b30 + ffffffff81376f37 0000000000000100 0000000000000000 ffff880401297ba8 +Call Trace: + [] ? __sg_page_iter_next+0x43/0x66 + [] ? sg_miter_get_next_page+0x1b/0x5d + [] ? sg_miter_next+0x17/0xbd + [] ? mpi_read_raw_from_sgl+0xf2/0x146 + [] rsa_verify+0x9d/0xee + [] ? pkcs1pad_sg_set_buf+0x2e/0xbb + [] pkcs1pad_verify+0xc0/0xe1 + [] public_key_verify_signature+0x1b0/0x228 + [] x509_check_for_self_signed+0xa1/0xc4 + [] x509_cert_parse+0x167/0x1a1 + [] x509_key_preparse+0x21/0x1a1 + [] asymmetric_key_preparse+0x34/0x61 + [] key_create_or_update+0x145/0x399 + [] SyS_add_key+0x154/0x19e + [] do_syscall_64+0x80/0x191 + [] entry_SYSCALL64_slow_path+0x25/0x25 +Code: 56 41 55 41 54 53 48 81 ec a8 00 00 00 44 8b 71 04 8b 42 04 4c 8b 67 18 45 85 f6 89 45 80 0f 84 b4 06 00 00 85 c0 75 2f 41 ff ce <49> c7 04 24 01 00 00 00 b0 01 75 0b 48 8b 41 18 48 83 38 01 0f +RIP [] mpi_powm+0x32/0x7e6 + RSP +CR2: 0000000000000000 +---[ end trace d82015255d4a5d8d ]--- + +Basically, this is a backport of a libgcrypt patch: + + http://git.gnupg.org/cgi-bin/gitweb.cgi?p=libgcrypt.git;a=patch;h=6e1adb05d290aeeb1c230c763970695f4a538526 + +Fixes: cdec9cb5167a ("crypto: GnuPG based MPI lib - source files (part 1)") +Signed-off-by: Andrey Ryabinin +Signed-off-by: David Howells +cc: Dmitry Kasatkin +cc: linux-ima-devel@lists.sourceforge.net +cc: stable@vger.kernel.org +Signed-off-by: James Morris +--- + lib/mpi/mpi-pow.c | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +diff --git a/lib/mpi/mpi-pow.c b/lib/mpi/mpi-pow.c +index 5464c87..e24388a 100644 +--- a/lib/mpi/mpi-pow.c ++++ b/lib/mpi/mpi-pow.c +@@ -64,8 +64,13 @@ int mpi_powm(MPI res, MPI base, MPI exp, MPI mod) + if (!esize) { + /* Exponent is zero, result is 1 mod MOD, i.e., 1 or 0 + * depending on if MOD equals 1. */ +- rp[0] = 1; + res->nlimbs = (msize == 1 && mod->d[0] == 1) ? 0 : 1; ++ if (res->nlimbs) { ++ if (mpi_resize(res, 1) < 0) ++ goto enomem; ++ rp = res->d; ++ rp[0] = 1; ++ } + res->sign = 0; + goto leave; + } +-- +2.9.3 + diff --git a/kernel.spec b/kernel.spec index 3f04ce19a..2edf85198 100644 --- a/kernel.spec +++ b/kernel.spec @@ -54,7 +54,7 @@ Summary: The Linux kernel %if 0%{?released_kernel} # Do we have a -stable update to apply? -%define stable_update 10 +%define stable_update 11 # Set rpm version accordingly %if 0%{?stable_update} %define stablerev %{stable_update} @@ -631,15 +631,15 @@ Patch850: v3-vfio-pci-Fix-integer-overflows-bitmask-check.patch #rhbz 1325354 Patch852: 0001-HID-input-ignore-System-Control-application-usages-i.patch -#rhbz 1392885 -Patch853: 0001-drm-i915-Refresh-that-status-of-MST-capable-connecto.patch - #rhbz 1390308 Patch854: nouveau-add-maxwell-to-backlight-init.patch #rhbz 1385823 Patch855: 0001-platform-x86-ideapad-laptop-Add-Lenovo-Yoga-910-13IK.patch +# CVE-2016-8650 rhbz 1395187 1398463 +Patch856: 0001-mpi-Fix-NULL-ptr-dereference-in-mpi_powm-ver-3.patch + # END OF PATCH DEFINITIONS %endif @@ -2167,6 +2167,10 @@ fi # # %changelog +* Mon Nov 28 2016 Justin M. Forbes - 4.8.11-200 +- Linux v4.8.11 +- CVE-2016-8650 Fix NULL ptr dereference in mpi_powm() (rhbz 1395187 1398463) + * Mon Nov 28 2016 Peter Robinson - Add upstream patch to fix all ARMv7 devices set to initial 200Mhz diff --git a/sources b/sources index 7e081ec62..cf73e8544 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ c1af0afbd3df35c1ccdc7a5118cd2d07 linux-4.8.tar.xz 0dad03f586e835d538d3e0d2cbdb9a28 perf-man-4.8.tar.gz -37eadcdaefae51ced736747cb817aa58 patch-4.8.10.xz +d999d6d294818491221f6d9789a667e8 patch-4.8.11.xz From a1465c1b935e034acc2c13d1ef719db2316b2822 Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Fri, 2 Dec 2016 10:57:43 -0600 Subject: [PATCH 169/275] Linux v4.8.12 --- ...LL-ptr-dereference-in-mpi_powm-ver-3.patch | 100 ------------------ ...f_defrag-drop-mangled-skb-on-ream-er.patch | 69 ++++++++++++ kernel.spec | 12 ++- sources | 2 +- 4 files changed, 79 insertions(+), 104 deletions(-) delete mode 100644 0001-mpi-Fix-NULL-ptr-dereference-in-mpi_powm-ver-3.patch create mode 100644 0001-netfilter-ipv6-nf_defrag-drop-mangled-skb-on-ream-er.patch diff --git a/0001-mpi-Fix-NULL-ptr-dereference-in-mpi_powm-ver-3.patch b/0001-mpi-Fix-NULL-ptr-dereference-in-mpi_powm-ver-3.patch deleted file mode 100644 index f5cc8a6b5..000000000 --- a/0001-mpi-Fix-NULL-ptr-dereference-in-mpi_powm-ver-3.patch +++ /dev/null @@ -1,100 +0,0 @@ -From f5527fffff3f002b0a6b376163613b82f69de073 Mon Sep 17 00:00:00 2001 -From: Andrey Ryabinin -Date: Thu, 24 Nov 2016 13:23:10 +0000 -Subject: [PATCH] mpi: Fix NULL ptr dereference in mpi_powm() [ver #3] - -This fixes CVE-2016-8650. - -If mpi_powm() is given a zero exponent, it wants to immediately return -either 1 or 0, depending on the modulus. However, if the result was -initalised with zero limb space, no limbs space is allocated and a -NULL-pointer exception ensues. - -Fix this by allocating a minimal amount of limb space for the result when -the 0-exponent case when the result is 1 and not touching the limb space -when the result is 0. - -This affects the use of RSA keys and X.509 certificates that carry them. - -BUG: unable to handle kernel NULL pointer dereference at (null) -IP: [] mpi_powm+0x32/0x7e6 -PGD 0 -Oops: 0002 [#1] SMP -Modules linked in: -CPU: 3 PID: 3014 Comm: keyctl Not tainted 4.9.0-rc6-fscache+ #278 -Hardware name: ASUS All Series/H97-PLUS, BIOS 2306 10/09/2014 -task: ffff8804011944c0 task.stack: ffff880401294000 -RIP: 0010:[] [] mpi_powm+0x32/0x7e6 -RSP: 0018:ffff880401297ad8 EFLAGS: 00010212 -RAX: 0000000000000000 RBX: ffff88040868bec0 RCX: ffff88040868bba0 -RDX: ffff88040868b260 RSI: ffff88040868bec0 RDI: ffff88040868bee0 -RBP: ffff880401297ba8 R08: 0000000000000000 R09: 0000000000000000 -R10: 0000000000000047 R11: ffffffff8183b210 R12: 0000000000000000 -R13: ffff8804087c7600 R14: 000000000000001f R15: ffff880401297c50 -FS: 00007f7a7918c700(0000) GS:ffff88041fb80000(0000) knlGS:0000000000000000 -CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 -CR2: 0000000000000000 CR3: 0000000401250000 CR4: 00000000001406e0 -Stack: - ffff88040868bec0 0000000000000020 ffff880401297b00 ffffffff81376cd4 - 0000000000000100 ffff880401297b10 ffffffff81376d12 ffff880401297b30 - ffffffff81376f37 0000000000000100 0000000000000000 ffff880401297ba8 -Call Trace: - [] ? __sg_page_iter_next+0x43/0x66 - [] ? sg_miter_get_next_page+0x1b/0x5d - [] ? sg_miter_next+0x17/0xbd - [] ? mpi_read_raw_from_sgl+0xf2/0x146 - [] rsa_verify+0x9d/0xee - [] ? pkcs1pad_sg_set_buf+0x2e/0xbb - [] pkcs1pad_verify+0xc0/0xe1 - [] public_key_verify_signature+0x1b0/0x228 - [] x509_check_for_self_signed+0xa1/0xc4 - [] x509_cert_parse+0x167/0x1a1 - [] x509_key_preparse+0x21/0x1a1 - [] asymmetric_key_preparse+0x34/0x61 - [] key_create_or_update+0x145/0x399 - [] SyS_add_key+0x154/0x19e - [] do_syscall_64+0x80/0x191 - [] entry_SYSCALL64_slow_path+0x25/0x25 -Code: 56 41 55 41 54 53 48 81 ec a8 00 00 00 44 8b 71 04 8b 42 04 4c 8b 67 18 45 85 f6 89 45 80 0f 84 b4 06 00 00 85 c0 75 2f 41 ff ce <49> c7 04 24 01 00 00 00 b0 01 75 0b 48 8b 41 18 48 83 38 01 0f -RIP [] mpi_powm+0x32/0x7e6 - RSP -CR2: 0000000000000000 ----[ end trace d82015255d4a5d8d ]--- - -Basically, this is a backport of a libgcrypt patch: - - http://git.gnupg.org/cgi-bin/gitweb.cgi?p=libgcrypt.git;a=patch;h=6e1adb05d290aeeb1c230c763970695f4a538526 - -Fixes: cdec9cb5167a ("crypto: GnuPG based MPI lib - source files (part 1)") -Signed-off-by: Andrey Ryabinin -Signed-off-by: David Howells -cc: Dmitry Kasatkin -cc: linux-ima-devel@lists.sourceforge.net -cc: stable@vger.kernel.org -Signed-off-by: James Morris ---- - lib/mpi/mpi-pow.c | 7 ++++++- - 1 file changed, 6 insertions(+), 1 deletion(-) - -diff --git a/lib/mpi/mpi-pow.c b/lib/mpi/mpi-pow.c -index 5464c87..e24388a 100644 ---- a/lib/mpi/mpi-pow.c -+++ b/lib/mpi/mpi-pow.c -@@ -64,8 +64,13 @@ int mpi_powm(MPI res, MPI base, MPI exp, MPI mod) - if (!esize) { - /* Exponent is zero, result is 1 mod MOD, i.e., 1 or 0 - * depending on if MOD equals 1. */ -- rp[0] = 1; - res->nlimbs = (msize == 1 && mod->d[0] == 1) ? 0 : 1; -+ if (res->nlimbs) { -+ if (mpi_resize(res, 1) < 0) -+ goto enomem; -+ rp = res->d; -+ rp[0] = 1; -+ } - res->sign = 0; - goto leave; - } --- -2.9.3 - diff --git a/0001-netfilter-ipv6-nf_defrag-drop-mangled-skb-on-ream-er.patch b/0001-netfilter-ipv6-nf_defrag-drop-mangled-skb-on-ream-er.patch new file mode 100644 index 000000000..a5af1a3e9 --- /dev/null +++ b/0001-netfilter-ipv6-nf_defrag-drop-mangled-skb-on-ream-er.patch @@ -0,0 +1,69 @@ +From 9b57da0630c9fd36ed7a20fc0f98dc82cc0777fa Mon Sep 17 00:00:00 2001 +From: Florian Westphal +Date: Tue, 29 Nov 2016 02:17:34 +0100 +Subject: [PATCH] netfilter: ipv6: nf_defrag: drop mangled skb on ream error + +Dmitry Vyukov reported GPF in network stack that Andrey traced down to +negative nh offset in nf_ct_frag6_queue(). + +Problem is that all network headers before fragment header are pulled. +Normal ipv6 reassembly will drop the skb when errors occur further down +the line. + +netfilter doesn't do this, and instead passed the original fragment +along. That was also fine back when netfilter ipv6 defrag worked with +cloned fragments, as the original, pristine fragment was passed on. + +So we either have to undo the pull op, or discard such fragments. +Since they're malformed after all (e.g. overlapping fragment) it seems +preferrable to just drop them. + +Same for temporary errors -- it doesn't make sense to accept (and +perhaps forward!) only some fragments of same datagram. + +Fixes: 029f7f3b8701cc7ac ("netfilter: ipv6: nf_defrag: avoid/free clone operations") +Reported-by: Dmitry Vyukov +Debugged-by: Andrey Konovalov +Diagnosed-by: Eric Dumazet +Signed-off-by: Florian Westphal +Acked-by: Eric Dumazet +Signed-off-by: Pablo Neira Ayuso +--- + net/ipv6/netfilter/nf_conntrack_reasm.c | 4 ++-- + net/ipv6/netfilter/nf_defrag_ipv6_hooks.c | 2 +- + 2 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/net/ipv6/netfilter/nf_conntrack_reasm.c b/net/ipv6/netfilter/nf_conntrack_reasm.c +index e4347ae..9948b5c 100644 +--- a/net/ipv6/netfilter/nf_conntrack_reasm.c ++++ b/net/ipv6/netfilter/nf_conntrack_reasm.c +@@ -576,11 +576,11 @@ int nf_ct_frag6_gather(struct net *net, struct sk_buff *skb, u32 user) + /* Jumbo payload inhibits frag. header */ + if (ipv6_hdr(skb)->payload_len == 0) { + pr_debug("payload len = 0\n"); +- return -EINVAL; ++ return 0; + } + + if (find_prev_fhdr(skb, &prevhdr, &nhoff, &fhoff) < 0) +- return -EINVAL; ++ return 0; + + if (!pskb_may_pull(skb, fhoff + sizeof(*fhdr))) + return -ENOMEM; +diff --git a/net/ipv6/netfilter/nf_defrag_ipv6_hooks.c b/net/ipv6/netfilter/nf_defrag_ipv6_hooks.c +index f7aab5a..f06b047 100644 +--- a/net/ipv6/netfilter/nf_defrag_ipv6_hooks.c ++++ b/net/ipv6/netfilter/nf_defrag_ipv6_hooks.c +@@ -69,7 +69,7 @@ static unsigned int ipv6_defrag(void *priv, + if (err == -EINPROGRESS) + return NF_STOLEN; + +- return NF_ACCEPT; ++ return err == 0 ? NF_ACCEPT : NF_DROP; + } + + static struct nf_hook_ops ipv6_defrag_ops[] = { +-- +2.9.3 + diff --git a/kernel.spec b/kernel.spec index 2edf85198..2fc9f090a 100644 --- a/kernel.spec +++ b/kernel.spec @@ -54,7 +54,7 @@ Summary: The Linux kernel %if 0%{?released_kernel} # Do we have a -stable update to apply? -%define stable_update 11 +%define stable_update 12 # Set rpm version accordingly %if 0%{?stable_update} %define stablerev %{stable_update} @@ -637,8 +637,8 @@ Patch854: nouveau-add-maxwell-to-backlight-init.patch #rhbz 1385823 Patch855: 0001-platform-x86-ideapad-laptop-Add-Lenovo-Yoga-910-13IK.patch -# CVE-2016-8650 rhbz 1395187 1398463 -Patch856: 0001-mpi-Fix-NULL-ptr-dereference-in-mpi_powm-ver-3.patch +# CVE-2016-9755 rhbz 1400904 1400905 +Patch856: 0001-netfilter-ipv6-nf_defrag-drop-mangled-skb-on-ream-er.patch # END OF PATCH DEFINITIONS @@ -2167,6 +2167,12 @@ fi # # %changelog +* Fri Dec 02 2016 Justin M. Forbes - 4.8.12-200 +- Linux v4.8.12 +- CVE-2016-9755 Fix Out-of-bounds write issue when defragmenting ipv6 packets (rhbz 1400904 1400905) +- CVE-2016-9756 Fix kvm: stack memory information leakage (rhbz 1400468 1400469) +- Fix kvm: out of bounds memory access via vcpu_id (rhbz 1400804 1400805) + * Mon Nov 28 2016 Justin M. Forbes - 4.8.11-200 - Linux v4.8.11 - CVE-2016-8650 Fix NULL ptr dereference in mpi_powm() (rhbz 1395187 1398463) diff --git a/sources b/sources index cf73e8544..f4f05afae 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ c1af0afbd3df35c1ccdc7a5118cd2d07 linux-4.8.tar.xz 0dad03f586e835d538d3e0d2cbdb9a28 perf-man-4.8.tar.gz -d999d6d294818491221f6d9789a667e8 patch-4.8.11.xz +9a938fd7a82d8b390f957657947fe673 patch-4.8.12.xz From 7651ce2e2020fb3209686eff03ff092508ea7159 Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Tue, 6 Dec 2016 20:27:42 -0600 Subject: [PATCH 170/275] CVE-2016-8655 fix race condition in packet_set_ring (rhbz 1400019 1401820) --- ...ix-race-condition-in-packet_set_ring.patch | 92 +++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 0001-packet-fix-race-condition-in-packet_set_ring.patch diff --git a/0001-packet-fix-race-condition-in-packet_set_ring.patch b/0001-packet-fix-race-condition-in-packet_set_ring.patch new file mode 100644 index 000000000..ba7da62e7 --- /dev/null +++ b/0001-packet-fix-race-condition-in-packet_set_ring.patch @@ -0,0 +1,92 @@ +From 84ac7260236a49c79eede91617700174c2c19b0c Mon Sep 17 00:00:00 2001 +From: Philip Pettersson +Date: Wed, 30 Nov 2016 14:55:36 -0800 +Subject: [PATCH] packet: fix race condition in packet_set_ring + +When packet_set_ring creates a ring buffer it will initialize a +struct timer_list if the packet version is TPACKET_V3. This value +can then be raced by a different thread calling setsockopt to +set the version to TPACKET_V1 before packet_set_ring has finished. + +This leads to a use-after-free on a function pointer in the +struct timer_list when the socket is closed as the previously +initialized timer will not be deleted. + +The bug is fixed by taking lock_sock(sk) in packet_setsockopt when +changing the packet version while also taking the lock at the start +of packet_set_ring. + +Fixes: f6fb8f100b80 ("af-packet: TPACKET_V3 flexible buffer implementation.") +Signed-off-by: Philip Pettersson +Signed-off-by: Eric Dumazet +Signed-off-by: David S. Miller +--- + net/packet/af_packet.c | 18 ++++++++++++------ + 1 file changed, 12 insertions(+), 6 deletions(-) + +diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c +index d2238b2..dd23323 100644 +--- a/net/packet/af_packet.c ++++ b/net/packet/af_packet.c +@@ -3648,19 +3648,25 @@ packet_setsockopt(struct socket *sock, int level, int optname, char __user *optv + + if (optlen != sizeof(val)) + return -EINVAL; +- if (po->rx_ring.pg_vec || po->tx_ring.pg_vec) +- return -EBUSY; + if (copy_from_user(&val, optval, sizeof(val))) + return -EFAULT; + switch (val) { + case TPACKET_V1: + case TPACKET_V2: + case TPACKET_V3: +- po->tp_version = val; +- return 0; ++ break; + default: + return -EINVAL; + } ++ lock_sock(sk); ++ if (po->rx_ring.pg_vec || po->tx_ring.pg_vec) { ++ ret = -EBUSY; ++ } else { ++ po->tp_version = val; ++ ret = 0; ++ } ++ release_sock(sk); ++ return ret; + } + case PACKET_RESERVE: + { +@@ -4164,6 +4170,7 @@ static int packet_set_ring(struct sock *sk, union tpacket_req_u *req_u, + /* Added to avoid minimal code churn */ + struct tpacket_req *req = &req_u->req; + ++ lock_sock(sk); + /* Opening a Tx-ring is NOT supported in TPACKET_V3 */ + if (!closing && tx_ring && (po->tp_version > TPACKET_V2)) { + net_warn_ratelimited("Tx-ring is not supported.\n"); +@@ -4245,7 +4252,6 @@ static int packet_set_ring(struct sock *sk, union tpacket_req_u *req_u, + goto out; + } + +- lock_sock(sk); + + /* Detach socket from network */ + spin_lock(&po->bind_lock); +@@ -4294,11 +4300,11 @@ static int packet_set_ring(struct sock *sk, union tpacket_req_u *req_u, + if (!tx_ring) + prb_shutdown_retire_blk_timer(po, rb_queue); + } +- release_sock(sk); + + if (pg_vec) + free_pg_vec(pg_vec, order, req->tp_block_nr); + out: ++ release_sock(sk); + return err; + } + +-- +2.9.3 + From 2e7e9b87c63267117368a181a604c047a8531f41 Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Tue, 6 Dec 2016 20:29:22 -0600 Subject: [PATCH 171/275] CVE-2016-8655 fix race condition in packet_set_ring (rhbz 1400019 1401820) now with more spec --- kernel.spec | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/kernel.spec b/kernel.spec index 2fc9f090a..1c09959d6 100644 --- a/kernel.spec +++ b/kernel.spec @@ -640,6 +640,9 @@ Patch855: 0001-platform-x86-ideapad-laptop-Add-Lenovo-Yoga-910-13IK.patch # CVE-2016-9755 rhbz 1400904 1400905 Patch856: 0001-netfilter-ipv6-nf_defrag-drop-mangled-skb-on-ream-er.patch +# CVE-2016-8655 rhbz 1400019 1401820 +Patch857: 0001-packet-fix-race-condition-in-packet_set_ring.patch + # END OF PATCH DEFINITIONS %endif @@ -2167,6 +2170,9 @@ fi # # %changelog +* Tue Dec 06 2016 Justin M. Forbes +- CVE-2016-8655 fix race condition in packet_set_ring (rhbz 1400019 1401820) + * Fri Dec 02 2016 Justin M. Forbes - 4.8.12-200 - Linux v4.8.12 - CVE-2016-9755 Fix Out-of-bounds write issue when defragmenting ipv6 packets (rhbz 1400904 1400905) From 79b7777c40e7f2a86ce0d4f7c818fd68de5bd0b7 Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Wed, 7 Dec 2016 11:26:20 -0600 Subject: [PATCH 172/275] CVE-2016-9793 avoid signed overflows for SO_{SND|RCV}BUFFORCE (rhbz 1402013 1402014) --- ...d-overflows-for-SO_-SND-RCV-BUFFORCE.patch | 49 +++++++++++++++++++ kernel.spec | 6 +++ 2 files changed, 55 insertions(+) create mode 100644 0001-net-avoid-signed-overflows-for-SO_-SND-RCV-BUFFORCE.patch diff --git a/0001-net-avoid-signed-overflows-for-SO_-SND-RCV-BUFFORCE.patch b/0001-net-avoid-signed-overflows-for-SO_-SND-RCV-BUFFORCE.patch new file mode 100644 index 000000000..6d5771ccd --- /dev/null +++ b/0001-net-avoid-signed-overflows-for-SO_-SND-RCV-BUFFORCE.patch @@ -0,0 +1,49 @@ +From b98b0bc8c431e3ceb4b26b0dfc8db509518fb290 Mon Sep 17 00:00:00 2001 +From: Eric Dumazet +Date: Fri, 2 Dec 2016 09:44:53 -0800 +Subject: [PATCH] net: avoid signed overflows for SO_{SND|RCV}BUFFORCE + +CAP_NET_ADMIN users should not be allowed to set negative +sk_sndbuf or sk_rcvbuf values, as it can lead to various memory +corruptions, crashes, OOM... + +Note that before commit 82981930125a ("net: cleanups in +sock_setsockopt()"), the bug was even more serious, since SO_SNDBUF +and SO_RCVBUF were vulnerable. + +This needs to be backported to all known linux kernels. + +Again, many thanks to syzkaller team for discovering this gem. + +Signed-off-by: Eric Dumazet +Reported-by: Andrey Konovalov +Signed-off-by: David S. Miller +--- + net/core/sock.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/net/core/sock.c b/net/core/sock.c +index 5e3ca41..00a074d 100644 +--- a/net/core/sock.c ++++ b/net/core/sock.c +@@ -715,7 +715,7 @@ int sock_setsockopt(struct socket *sock, int level, int optname, + val = min_t(u32, val, sysctl_wmem_max); + set_sndbuf: + sk->sk_userlocks |= SOCK_SNDBUF_LOCK; +- sk->sk_sndbuf = max_t(u32, val * 2, SOCK_MIN_SNDBUF); ++ sk->sk_sndbuf = max_t(int, val * 2, SOCK_MIN_SNDBUF); + /* Wake up sending tasks if we upped the value. */ + sk->sk_write_space(sk); + break; +@@ -751,7 +751,7 @@ int sock_setsockopt(struct socket *sock, int level, int optname, + * returning the value we actually used in getsockopt + * is the most desirable behavior. + */ +- sk->sk_rcvbuf = max_t(u32, val * 2, SOCK_MIN_RCVBUF); ++ sk->sk_rcvbuf = max_t(int, val * 2, SOCK_MIN_RCVBUF); + break; + + case SO_RCVBUFFORCE: +-- +2.9.3 + diff --git a/kernel.spec b/kernel.spec index 1c09959d6..6a6d727dd 100644 --- a/kernel.spec +++ b/kernel.spec @@ -643,6 +643,9 @@ Patch856: 0001-netfilter-ipv6-nf_defrag-drop-mangled-skb-on-ream-er.patch # CVE-2016-8655 rhbz 1400019 1401820 Patch857: 0001-packet-fix-race-condition-in-packet_set_ring.patch +# CVE-2016-9793 rhbz 1402013 1402014 +Patch858: 0001-net-avoid-signed-overflows-for-SO_-SND-RCV-BUFFORCE.patch + # END OF PATCH DEFINITIONS %endif @@ -2170,6 +2173,9 @@ fi # # %changelog +* Wed Dec 07 2016 Justin M. Forbes +- CVE-2016-9793 avoid signed overflows for SO_{SND|RCV}BUFFORCE (rhbz 1402013 1402014) + * Tue Dec 06 2016 Justin M. Forbes - CVE-2016-8655 fix race condition in packet_set_ring (rhbz 1400019 1401820) From 7bf7274dee458e23a09f70a3e9368c7426861b40 Mon Sep 17 00:00:00 2001 From: Laura Abbott Date: Wed, 7 Dec 2016 09:49:55 -0800 Subject: [PATCH 173/275] Disable CONFIG_AF_KCM (rhbz 1402489) --- config-generic | 2 +- kernel.spec | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/config-generic b/config-generic index 744489577..5b15dc4d1 100644 --- a/config-generic +++ b/config-generic @@ -1406,7 +1406,7 @@ CONFIG_L2TP_ETH=m # CONFIG_CAIF is not set -CONFIG_AF_KCM=m +# CONFIG_AF_KCM is not set CONFIG_LWTUNNEL=y CONFIG_NET_DEVLINK=m diff --git a/kernel.spec b/kernel.spec index 6a6d727dd..f5a46e59d 100644 --- a/kernel.spec +++ b/kernel.spec @@ -2173,6 +2173,9 @@ fi # # %changelog +* Wed Dec 07 2016 Laura Abbott +- Disable CONFIG_AF_KCM (rhbz 1402489) + * Wed Dec 07 2016 Justin M. Forbes - CVE-2016-9793 avoid signed overflows for SO_{SND|RCV}BUFFORCE (rhbz 1402013 1402014) From 045c9968a718cd6d05136b0eaab1955e8b1ea18a Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Fri, 9 Dec 2016 08:08:55 -0600 Subject: [PATCH 174/275] Linux v4.8.13 --- ...ing-but-regular-iovec-s-to-blk_rq_ma.patch | 42 +++++++++++++++++++ kernel.spec | 9 +++- sources | 2 +- 3 files changed, 51 insertions(+), 2 deletions(-) create mode 100644 0001-Don-t-feed-anything-but-regular-iovec-s-to-blk_rq_ma.patch diff --git a/0001-Don-t-feed-anything-but-regular-iovec-s-to-blk_rq_ma.patch b/0001-Don-t-feed-anything-but-regular-iovec-s-to-blk_rq_ma.patch new file mode 100644 index 000000000..8c3795439 --- /dev/null +++ b/0001-Don-t-feed-anything-but-regular-iovec-s-to-blk_rq_ma.patch @@ -0,0 +1,42 @@ +From a0ac402cfcdc904f9772e1762b3fda112dcc56a0 Mon Sep 17 00:00:00 2001 +From: Linus Torvalds +Date: Tue, 6 Dec 2016 16:18:14 -0800 +Subject: [PATCH] Don't feed anything but regular iovec's to + blk_rq_map_user_iov + +In theory we could map other things, but there's a reason that function +is called "user_iov". Using anything else (like splice can do) just +confuses it. + +Reported-and-tested-by: Johannes Thumshirn +Cc: Al Viro +Signed-off-by: Linus Torvalds +--- + block/blk-map.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/block/blk-map.c b/block/blk-map.c +index b8657fa..27fd8d92 100644 +--- a/block/blk-map.c ++++ b/block/blk-map.c +@@ -118,6 +118,9 @@ int blk_rq_map_user_iov(struct request_queue *q, struct request *rq, + struct iov_iter i; + int ret; + ++ if (!iter_is_iovec(iter)) ++ goto fail; ++ + if (map_data) + copy = true; + else if (iov_iter_alignment(iter) & align) +@@ -140,6 +143,7 @@ int blk_rq_map_user_iov(struct request_queue *q, struct request *rq, + + unmap_rq: + __blk_rq_unmap_user(bio); ++fail: + rq->bio = NULL; + return -EINVAL; + } +-- +2.9.3 + diff --git a/kernel.spec b/kernel.spec index f5a46e59d..fa826bac8 100644 --- a/kernel.spec +++ b/kernel.spec @@ -54,7 +54,7 @@ Summary: The Linux kernel %if 0%{?released_kernel} # Do we have a -stable update to apply? -%define stable_update 12 +%define stable_update 13 # Set rpm version accordingly %if 0%{?stable_update} %define stablerev %{stable_update} @@ -646,6 +646,9 @@ Patch857: 0001-packet-fix-race-condition-in-packet_set_ring.patch # CVE-2016-9793 rhbz 1402013 1402014 Patch858: 0001-net-avoid-signed-overflows-for-SO_-SND-RCV-BUFFORCE.patch +# CVE-2016-9576 rhbz 1403145 1403146 +Patch859: 0001-Don-t-feed-anything-but-regular-iovec-s-to-blk_rq_ma.patch + # END OF PATCH DEFINITIONS %endif @@ -2173,6 +2176,10 @@ fi # # %changelog +* Fri Dec 09 2016 Justin M. Forbes - 4.8.13-200 +- Linux v4.8.13 +- CVE-2016-9576 fix use after free in SCSI generic device interface (rhbz 1403145 1403146) + * Wed Dec 07 2016 Laura Abbott - Disable CONFIG_AF_KCM (rhbz 1402489) diff --git a/sources b/sources index f4f05afae..b175e7f81 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ c1af0afbd3df35c1ccdc7a5118cd2d07 linux-4.8.tar.xz 0dad03f586e835d538d3e0d2cbdb9a28 perf-man-4.8.tar.gz -9a938fd7a82d8b390f957657947fe673 patch-4.8.12.xz +bc208ac66340464839ee61a4621d9384 patch-4.8.13.xz From 719deefc781c9d6c578c562996e7afe54705aba3 Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Mon, 12 Dec 2016 08:37:50 -0600 Subject: [PATCH 175/275] Linux v4.8.14 --- ...ing-but-regular-iovec-s-to-blk_rq_ma.patch | 42 --------- ...d-overflows-for-SO_-SND-RCV-BUFFORCE.patch | 49 ---------- ...ix-race-condition-in-packet_set_ring.patch | 92 ------------------- kernel.spec | 15 +-- sources | 6 +- 5 files changed, 8 insertions(+), 196 deletions(-) delete mode 100644 0001-Don-t-feed-anything-but-regular-iovec-s-to-blk_rq_ma.patch delete mode 100644 0001-net-avoid-signed-overflows-for-SO_-SND-RCV-BUFFORCE.patch delete mode 100644 0001-packet-fix-race-condition-in-packet_set_ring.patch diff --git a/0001-Don-t-feed-anything-but-regular-iovec-s-to-blk_rq_ma.patch b/0001-Don-t-feed-anything-but-regular-iovec-s-to-blk_rq_ma.patch deleted file mode 100644 index 8c3795439..000000000 --- a/0001-Don-t-feed-anything-but-regular-iovec-s-to-blk_rq_ma.patch +++ /dev/null @@ -1,42 +0,0 @@ -From a0ac402cfcdc904f9772e1762b3fda112dcc56a0 Mon Sep 17 00:00:00 2001 -From: Linus Torvalds -Date: Tue, 6 Dec 2016 16:18:14 -0800 -Subject: [PATCH] Don't feed anything but regular iovec's to - blk_rq_map_user_iov - -In theory we could map other things, but there's a reason that function -is called "user_iov". Using anything else (like splice can do) just -confuses it. - -Reported-and-tested-by: Johannes Thumshirn -Cc: Al Viro -Signed-off-by: Linus Torvalds ---- - block/blk-map.c | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/block/blk-map.c b/block/blk-map.c -index b8657fa..27fd8d92 100644 ---- a/block/blk-map.c -+++ b/block/blk-map.c -@@ -118,6 +118,9 @@ int blk_rq_map_user_iov(struct request_queue *q, struct request *rq, - struct iov_iter i; - int ret; - -+ if (!iter_is_iovec(iter)) -+ goto fail; -+ - if (map_data) - copy = true; - else if (iov_iter_alignment(iter) & align) -@@ -140,6 +143,7 @@ int blk_rq_map_user_iov(struct request_queue *q, struct request *rq, - - unmap_rq: - __blk_rq_unmap_user(bio); -+fail: - rq->bio = NULL; - return -EINVAL; - } --- -2.9.3 - diff --git a/0001-net-avoid-signed-overflows-for-SO_-SND-RCV-BUFFORCE.patch b/0001-net-avoid-signed-overflows-for-SO_-SND-RCV-BUFFORCE.patch deleted file mode 100644 index 6d5771ccd..000000000 --- a/0001-net-avoid-signed-overflows-for-SO_-SND-RCV-BUFFORCE.patch +++ /dev/null @@ -1,49 +0,0 @@ -From b98b0bc8c431e3ceb4b26b0dfc8db509518fb290 Mon Sep 17 00:00:00 2001 -From: Eric Dumazet -Date: Fri, 2 Dec 2016 09:44:53 -0800 -Subject: [PATCH] net: avoid signed overflows for SO_{SND|RCV}BUFFORCE - -CAP_NET_ADMIN users should not be allowed to set negative -sk_sndbuf or sk_rcvbuf values, as it can lead to various memory -corruptions, crashes, OOM... - -Note that before commit 82981930125a ("net: cleanups in -sock_setsockopt()"), the bug was even more serious, since SO_SNDBUF -and SO_RCVBUF were vulnerable. - -This needs to be backported to all known linux kernels. - -Again, many thanks to syzkaller team for discovering this gem. - -Signed-off-by: Eric Dumazet -Reported-by: Andrey Konovalov -Signed-off-by: David S. Miller ---- - net/core/sock.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/net/core/sock.c b/net/core/sock.c -index 5e3ca41..00a074d 100644 ---- a/net/core/sock.c -+++ b/net/core/sock.c -@@ -715,7 +715,7 @@ int sock_setsockopt(struct socket *sock, int level, int optname, - val = min_t(u32, val, sysctl_wmem_max); - set_sndbuf: - sk->sk_userlocks |= SOCK_SNDBUF_LOCK; -- sk->sk_sndbuf = max_t(u32, val * 2, SOCK_MIN_SNDBUF); -+ sk->sk_sndbuf = max_t(int, val * 2, SOCK_MIN_SNDBUF); - /* Wake up sending tasks if we upped the value. */ - sk->sk_write_space(sk); - break; -@@ -751,7 +751,7 @@ int sock_setsockopt(struct socket *sock, int level, int optname, - * returning the value we actually used in getsockopt - * is the most desirable behavior. - */ -- sk->sk_rcvbuf = max_t(u32, val * 2, SOCK_MIN_RCVBUF); -+ sk->sk_rcvbuf = max_t(int, val * 2, SOCK_MIN_RCVBUF); - break; - - case SO_RCVBUFFORCE: --- -2.9.3 - diff --git a/0001-packet-fix-race-condition-in-packet_set_ring.patch b/0001-packet-fix-race-condition-in-packet_set_ring.patch deleted file mode 100644 index ba7da62e7..000000000 --- a/0001-packet-fix-race-condition-in-packet_set_ring.patch +++ /dev/null @@ -1,92 +0,0 @@ -From 84ac7260236a49c79eede91617700174c2c19b0c Mon Sep 17 00:00:00 2001 -From: Philip Pettersson -Date: Wed, 30 Nov 2016 14:55:36 -0800 -Subject: [PATCH] packet: fix race condition in packet_set_ring - -When packet_set_ring creates a ring buffer it will initialize a -struct timer_list if the packet version is TPACKET_V3. This value -can then be raced by a different thread calling setsockopt to -set the version to TPACKET_V1 before packet_set_ring has finished. - -This leads to a use-after-free on a function pointer in the -struct timer_list when the socket is closed as the previously -initialized timer will not be deleted. - -The bug is fixed by taking lock_sock(sk) in packet_setsockopt when -changing the packet version while also taking the lock at the start -of packet_set_ring. - -Fixes: f6fb8f100b80 ("af-packet: TPACKET_V3 flexible buffer implementation.") -Signed-off-by: Philip Pettersson -Signed-off-by: Eric Dumazet -Signed-off-by: David S. Miller ---- - net/packet/af_packet.c | 18 ++++++++++++------ - 1 file changed, 12 insertions(+), 6 deletions(-) - -diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c -index d2238b2..dd23323 100644 ---- a/net/packet/af_packet.c -+++ b/net/packet/af_packet.c -@@ -3648,19 +3648,25 @@ packet_setsockopt(struct socket *sock, int level, int optname, char __user *optv - - if (optlen != sizeof(val)) - return -EINVAL; -- if (po->rx_ring.pg_vec || po->tx_ring.pg_vec) -- return -EBUSY; - if (copy_from_user(&val, optval, sizeof(val))) - return -EFAULT; - switch (val) { - case TPACKET_V1: - case TPACKET_V2: - case TPACKET_V3: -- po->tp_version = val; -- return 0; -+ break; - default: - return -EINVAL; - } -+ lock_sock(sk); -+ if (po->rx_ring.pg_vec || po->tx_ring.pg_vec) { -+ ret = -EBUSY; -+ } else { -+ po->tp_version = val; -+ ret = 0; -+ } -+ release_sock(sk); -+ return ret; - } - case PACKET_RESERVE: - { -@@ -4164,6 +4170,7 @@ static int packet_set_ring(struct sock *sk, union tpacket_req_u *req_u, - /* Added to avoid minimal code churn */ - struct tpacket_req *req = &req_u->req; - -+ lock_sock(sk); - /* Opening a Tx-ring is NOT supported in TPACKET_V3 */ - if (!closing && tx_ring && (po->tp_version > TPACKET_V2)) { - net_warn_ratelimited("Tx-ring is not supported.\n"); -@@ -4245,7 +4252,6 @@ static int packet_set_ring(struct sock *sk, union tpacket_req_u *req_u, - goto out; - } - -- lock_sock(sk); - - /* Detach socket from network */ - spin_lock(&po->bind_lock); -@@ -4294,11 +4300,11 @@ static int packet_set_ring(struct sock *sk, union tpacket_req_u *req_u, - if (!tx_ring) - prb_shutdown_retire_blk_timer(po, rb_queue); - } -- release_sock(sk); - - if (pg_vec) - free_pg_vec(pg_vec, order, req->tp_block_nr); - out: -+ release_sock(sk); - return err; - } - --- -2.9.3 - diff --git a/kernel.spec b/kernel.spec index fa826bac8..7a752630f 100644 --- a/kernel.spec +++ b/kernel.spec @@ -54,7 +54,7 @@ Summary: The Linux kernel %if 0%{?released_kernel} # Do we have a -stable update to apply? -%define stable_update 13 +%define stable_update 14 # Set rpm version accordingly %if 0%{?stable_update} %define stablerev %{stable_update} @@ -640,15 +640,6 @@ Patch855: 0001-platform-x86-ideapad-laptop-Add-Lenovo-Yoga-910-13IK.patch # CVE-2016-9755 rhbz 1400904 1400905 Patch856: 0001-netfilter-ipv6-nf_defrag-drop-mangled-skb-on-ream-er.patch -# CVE-2016-8655 rhbz 1400019 1401820 -Patch857: 0001-packet-fix-race-condition-in-packet_set_ring.patch - -# CVE-2016-9793 rhbz 1402013 1402014 -Patch858: 0001-net-avoid-signed-overflows-for-SO_-SND-RCV-BUFFORCE.patch - -# CVE-2016-9576 rhbz 1403145 1403146 -Patch859: 0001-Don-t-feed-anything-but-regular-iovec-s-to-blk_rq_ma.patch - # END OF PATCH DEFINITIONS %endif @@ -2176,6 +2167,10 @@ fi # # %changelog +* Mon Dec 12 2016 Justin M. Forbes - 4.8.14-200 +- Linux v4.8.14 +- CVE-2016-8399 Fix out OOB stack read in memcpy_fromiovec (rhbz 1403833 1403834) + * Fri Dec 09 2016 Justin M. Forbes - 4.8.13-200 - Linux v4.8.13 - CVE-2016-9576 fix use after free in SCSI generic device interface (rhbz 1403145 1403146) diff --git a/sources b/sources index b175e7f81..d4c3127d3 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ -c1af0afbd3df35c1ccdc7a5118cd2d07 linux-4.8.tar.xz -0dad03f586e835d538d3e0d2cbdb9a28 perf-man-4.8.tar.gz -bc208ac66340464839ee61a4621d9384 patch-4.8.13.xz +SHA512 (linux-4.8.tar.xz) = a48a065f21e1c7c4de4cf8ca47b8b8d9a70f86b64e7cfa6e01be490f78895745b9c8790734b1d22182cf1f930fb87eaaa84e62ec8cc1f64ac4be9b949e7c0358 +SHA512 (perf-man-4.8.tar.gz) = 1e9707f1e11808178c1953d4f46e1789a138e9aca7bec89af7a6e209cd91e5301bc582db72cf889baa31dcba8cd3d3b1ceb4e8999ac1544ef17d513e861f2b59 +SHA512 (patch-4.8.14.xz) = 374b849aac6736f3a8d7afd224d51a5f4bab5c0fefaa8738982bae7188687149b7775e53878efe25466b4c0d40769b284e8af55c1d3bae500bccdbf565c0453a From 7fb86ae95f9711b9fe57f3e4f95259d6cbec7120 Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Thu, 15 Dec 2016 07:59:09 -0600 Subject: [PATCH 176/275] disable CONFIG_IWLWIFI_PCIE_RTPM it can cause wifi disconnects --- config-generic | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config-generic b/config-generic index 5b15dc4d1..1dcb2d71f 100644 --- a/config-generic +++ b/config-generic @@ -1912,7 +1912,7 @@ CONFIG_IWLDVM=m CONFIG_IWLMVM=m # CONFIG_IWLWIFI_BCAST_FILTERING is not set # CONFIG_IWLWIFI_UAPSD is not set -CONFIG_IWLWIFI_PCIE_RTPM=y +# CONFIG_IWLWIFI_PCIE_RTPM is not set CONFIG_IWLWIFI_DEBUG=y CONFIG_IWLWIFI_DEBUGFS=y From e4e004a33cab3efd2bee68dccd3aa8a37e7ac741 Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Thu, 15 Dec 2016 08:40:46 -0600 Subject: [PATCH 177/275] CVE-2016-9588 fix possible DoS in nVMX (rhbz 1404924 1404925) --- kernel.spec | 7 ++ ...-L1-to-intercept-software-exceptions.patch | 68 +++++++++++++++++++ 2 files changed, 75 insertions(+) create mode 100644 kvm-nVMX-allow-L1-to-intercept-software-exceptions.patch diff --git a/kernel.spec b/kernel.spec index 7a752630f..bc53c52ff 100644 --- a/kernel.spec +++ b/kernel.spec @@ -640,6 +640,9 @@ Patch855: 0001-platform-x86-ideapad-laptop-Add-Lenovo-Yoga-910-13IK.patch # CVE-2016-9755 rhbz 1400904 1400905 Patch856: 0001-netfilter-ipv6-nf_defrag-drop-mangled-skb-on-ream-er.patch +# CVE-2016-9588 rhbz 1404924 1404925 +Patch857: kvm-nVMX-allow-L1-to-intercept-software-exceptions.patch + # END OF PATCH DEFINITIONS %endif @@ -2167,6 +2170,10 @@ fi # # %changelog +* Thu Dec 15 2016 Justin M. Forbes +- CVE-2016-9588 fix possible DoS in nVMX (rhbz 1404924 1404925) +- Turn off CONFIG_IWLWIFI_PCIE_RTPM as it can cause wifi disconnects + * Mon Dec 12 2016 Justin M. Forbes - 4.8.14-200 - Linux v4.8.14 - CVE-2016-8399 Fix out OOB stack read in memcpy_fromiovec (rhbz 1403833 1403834) diff --git a/kvm-nVMX-allow-L1-to-intercept-software-exceptions.patch b/kvm-nVMX-allow-L1-to-intercept-software-exceptions.patch new file mode 100644 index 000000000..b408fc604 --- /dev/null +++ b/kvm-nVMX-allow-L1-to-intercept-software-exceptions.patch @@ -0,0 +1,68 @@ +From: Jim Mattson +To: kvm@vger.kernel.org +Cc: Jim Mattson +Subject: [PATCH] kvm: nVMX: Allow L1 to intercept software exceptions (#BP and #OF) +Date: Wed, 14 Dec 2016 11:41:59 -0800 + +When L2 exits to L0 due to "exception or NMI", software exceptions +(#BP and #OF) for which L1 has requested an intercept should be +handled by L1 rather than L0. Previously, only hardware exceptions +were forwarded to L1. + +Signed-off-by: Jim Mattson +--- + arch/x86/kvm/vmx.c | 11 +++++------ + 1 file changed, 5 insertions(+), 6 deletions(-) + +diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c +index 5382b82..64774f4 100644 +--- a/arch/x86/kvm/vmx.c ++++ b/arch/x86/kvm/vmx.c +@@ -1343,10 +1343,10 @@ static inline bool nested_cpu_has_posted_intr(struct vmcs12 *vmcs12) + return vmcs12->pin_based_vm_exec_control & PIN_BASED_POSTED_INTR; + } + +-static inline bool is_exception(u32 intr_info) ++static inline bool is_nmi(u32 intr_info) + { + return (intr_info & (INTR_INFO_INTR_TYPE_MASK | INTR_INFO_VALID_MASK)) +- == (INTR_TYPE_HARD_EXCEPTION | INTR_INFO_VALID_MASK); ++ == (INTR_TYPE_NMI_INTR | INTR_INFO_VALID_MASK); + } + + static void nested_vmx_vmexit(struct kvm_vcpu *vcpu, u32 exit_reason, +@@ -5476,7 +5476,7 @@ static int handle_exception(struct kvm_vcpu *vcpu) + if (is_machine_check(intr_info)) + return handle_machine_check(vcpu); + +- if ((intr_info & INTR_INFO_INTR_TYPE_MASK) == INTR_TYPE_NMI_INTR) ++ if (is_nmi(intr_info)) + return 1; /* already handled by vmx_vcpu_run() */ + + if (is_no_device(intr_info)) { +@@ -8018,7 +8018,7 @@ static bool nested_vmx_exit_handled(struct kvm_vcpu *vcpu) + + switch (exit_reason) { + case EXIT_REASON_EXCEPTION_NMI: +- if (!is_exception(intr_info)) ++ if (is_nmi(intr_info)) + return false; + else if (is_page_fault(intr_info)) + return enable_ept; +@@ -8611,8 +8611,7 @@ static void vmx_complete_atomic_exit(struct vcpu_vmx *vmx) + kvm_machine_check(); + + /* We need to handle NMIs before interrupts are enabled */ +- if ((exit_intr_info & INTR_INFO_INTR_TYPE_MASK) == INTR_TYPE_NMI_INTR && +- (exit_intr_info & INTR_INFO_VALID_MASK)) { ++ if (is_nmi(exit_intr_info)) { + kvm_before_handle_nmi(&vmx->vcpu); + asm("int $2"); + kvm_after_handle_nmi(&vmx->vcpu); +-- +2.8.0.rc3.226.g39d4020 + +-- +To unsubscribe from this list: send the line "unsubscribe kvm" in +the body of a message to majordomo@vger.kernel.org +More majordomo info at http://vger.kernel.org/majordomo-info.html From a49e9eabf20409ad9ad0f6a6c9cc50f75b4228f3 Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Thu, 15 Dec 2016 12:59:39 -0600 Subject: [PATCH 178/275] Linux v4.8.15 --- kernel.spec | 5 +++-- sources | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/kernel.spec b/kernel.spec index bc53c52ff..3f0d1d5e4 100644 --- a/kernel.spec +++ b/kernel.spec @@ -54,7 +54,7 @@ Summary: The Linux kernel %if 0%{?released_kernel} # Do we have a -stable update to apply? -%define stable_update 14 +%define stable_update 15 # Set rpm version accordingly %if 0%{?stable_update} %define stablerev %{stable_update} @@ -2170,7 +2170,8 @@ fi # # %changelog -* Thu Dec 15 2016 Justin M. Forbes +* Thu Dec 15 2016 Justin M. Forbes - 4.8.15-200 +- Linux v4.8.15 - CVE-2016-9588 fix possible DoS in nVMX (rhbz 1404924 1404925) - Turn off CONFIG_IWLWIFI_PCIE_RTPM as it can cause wifi disconnects diff --git a/sources b/sources index d4c3127d3..640793e57 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ SHA512 (linux-4.8.tar.xz) = a48a065f21e1c7c4de4cf8ca47b8b8d9a70f86b64e7cfa6e01be490f78895745b9c8790734b1d22182cf1f930fb87eaaa84e62ec8cc1f64ac4be9b949e7c0358 SHA512 (perf-man-4.8.tar.gz) = 1e9707f1e11808178c1953d4f46e1789a138e9aca7bec89af7a6e209cd91e5301bc582db72cf889baa31dcba8cd3d3b1ceb4e8999ac1544ef17d513e861f2b59 -SHA512 (patch-4.8.14.xz) = 374b849aac6736f3a8d7afd224d51a5f4bab5c0fefaa8738982bae7188687149b7775e53878efe25466b4c0d40769b284e8af55c1d3bae500bccdbf565c0453a +SHA512 (patch-4.8.15.xz) = d819c86f3fe93ee1d083fdce954ae06a683a22e8b0864da170714c5230c4c2fdecc29270194b1ad8a715b836b493141c8ff2c09e76a84426b7a89ebc31fb9e01 From ad280e9459f9f06bbf6c62df477c0b6bf0de70de Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Fri, 6 Jan 2017 09:39:01 -0600 Subject: [PATCH 179/275] Linux v4.8.16 --- kernel.spec | 5 ++++- sources | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/kernel.spec b/kernel.spec index 3f0d1d5e4..dfdb4afe3 100644 --- a/kernel.spec +++ b/kernel.spec @@ -54,7 +54,7 @@ Summary: The Linux kernel %if 0%{?released_kernel} # Do we have a -stable update to apply? -%define stable_update 15 +%define stable_update 16 # Set rpm version accordingly %if 0%{?stable_update} %define stablerev %{stable_update} @@ -2170,6 +2170,9 @@ fi # # %changelog +* Fri Jan 06 2017 Justin M. Forbes - 4.8.16-200 +- Linux v4.8.16 + * Thu Dec 15 2016 Justin M. Forbes - 4.8.15-200 - Linux v4.8.15 - CVE-2016-9588 fix possible DoS in nVMX (rhbz 1404924 1404925) diff --git a/sources b/sources index 640793e57..19ed3980c 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ SHA512 (linux-4.8.tar.xz) = a48a065f21e1c7c4de4cf8ca47b8b8d9a70f86b64e7cfa6e01be490f78895745b9c8790734b1d22182cf1f930fb87eaaa84e62ec8cc1f64ac4be9b949e7c0358 SHA512 (perf-man-4.8.tar.gz) = 1e9707f1e11808178c1953d4f46e1789a138e9aca7bec89af7a6e209cd91e5301bc582db72cf889baa31dcba8cd3d3b1ceb4e8999ac1544ef17d513e861f2b59 -SHA512 (patch-4.8.15.xz) = d819c86f3fe93ee1d083fdce954ae06a683a22e8b0864da170714c5230c4c2fdecc29270194b1ad8a715b836b493141c8ff2c09e76a84426b7a89ebc31fb9e01 +SHA512 (patch-4.8.16.xz) = b59ce2e0bade676845da2d29eabbf0a596fa4ebfb3b0459fea94d5443b9a0edc4cacc3868dbde1c16787a9097a53822d01f80dd9610a0194d734a4812a66acb1 From 91d2d320abe5ae8f93639484b2c8fde804775adc Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Mon, 9 Jan 2017 12:05:58 -0600 Subject: [PATCH 180/275] Linux v4.8.17 --- kernel.spec | 8 +-- ...-L1-to-intercept-software-exceptions.patch | 68 ------------------- sources | 2 +- 3 files changed, 5 insertions(+), 73 deletions(-) delete mode 100644 kvm-nVMX-allow-L1-to-intercept-software-exceptions.patch diff --git a/kernel.spec b/kernel.spec index dfdb4afe3..9397081a4 100644 --- a/kernel.spec +++ b/kernel.spec @@ -54,7 +54,7 @@ Summary: The Linux kernel %if 0%{?released_kernel} # Do we have a -stable update to apply? -%define stable_update 16 +%define stable_update 17 # Set rpm version accordingly %if 0%{?stable_update} %define stablerev %{stable_update} @@ -640,9 +640,6 @@ Patch855: 0001-platform-x86-ideapad-laptop-Add-Lenovo-Yoga-910-13IK.patch # CVE-2016-9755 rhbz 1400904 1400905 Patch856: 0001-netfilter-ipv6-nf_defrag-drop-mangled-skb-on-ream-er.patch -# CVE-2016-9588 rhbz 1404924 1404925 -Patch857: kvm-nVMX-allow-L1-to-intercept-software-exceptions.patch - # END OF PATCH DEFINITIONS %endif @@ -2170,6 +2167,9 @@ fi # # %changelog +* Mon Jan 09 2017 Justin M. Forbes - 4.8.17-200 +- Linux v4.8.17 + * Fri Jan 06 2017 Justin M. Forbes - 4.8.16-200 - Linux v4.8.16 diff --git a/kvm-nVMX-allow-L1-to-intercept-software-exceptions.patch b/kvm-nVMX-allow-L1-to-intercept-software-exceptions.patch deleted file mode 100644 index b408fc604..000000000 --- a/kvm-nVMX-allow-L1-to-intercept-software-exceptions.patch +++ /dev/null @@ -1,68 +0,0 @@ -From: Jim Mattson -To: kvm@vger.kernel.org -Cc: Jim Mattson -Subject: [PATCH] kvm: nVMX: Allow L1 to intercept software exceptions (#BP and #OF) -Date: Wed, 14 Dec 2016 11:41:59 -0800 - -When L2 exits to L0 due to "exception or NMI", software exceptions -(#BP and #OF) for which L1 has requested an intercept should be -handled by L1 rather than L0. Previously, only hardware exceptions -were forwarded to L1. - -Signed-off-by: Jim Mattson ---- - arch/x86/kvm/vmx.c | 11 +++++------ - 1 file changed, 5 insertions(+), 6 deletions(-) - -diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c -index 5382b82..64774f4 100644 ---- a/arch/x86/kvm/vmx.c -+++ b/arch/x86/kvm/vmx.c -@@ -1343,10 +1343,10 @@ static inline bool nested_cpu_has_posted_intr(struct vmcs12 *vmcs12) - return vmcs12->pin_based_vm_exec_control & PIN_BASED_POSTED_INTR; - } - --static inline bool is_exception(u32 intr_info) -+static inline bool is_nmi(u32 intr_info) - { - return (intr_info & (INTR_INFO_INTR_TYPE_MASK | INTR_INFO_VALID_MASK)) -- == (INTR_TYPE_HARD_EXCEPTION | INTR_INFO_VALID_MASK); -+ == (INTR_TYPE_NMI_INTR | INTR_INFO_VALID_MASK); - } - - static void nested_vmx_vmexit(struct kvm_vcpu *vcpu, u32 exit_reason, -@@ -5476,7 +5476,7 @@ static int handle_exception(struct kvm_vcpu *vcpu) - if (is_machine_check(intr_info)) - return handle_machine_check(vcpu); - -- if ((intr_info & INTR_INFO_INTR_TYPE_MASK) == INTR_TYPE_NMI_INTR) -+ if (is_nmi(intr_info)) - return 1; /* already handled by vmx_vcpu_run() */ - - if (is_no_device(intr_info)) { -@@ -8018,7 +8018,7 @@ static bool nested_vmx_exit_handled(struct kvm_vcpu *vcpu) - - switch (exit_reason) { - case EXIT_REASON_EXCEPTION_NMI: -- if (!is_exception(intr_info)) -+ if (is_nmi(intr_info)) - return false; - else if (is_page_fault(intr_info)) - return enable_ept; -@@ -8611,8 +8611,7 @@ static void vmx_complete_atomic_exit(struct vcpu_vmx *vmx) - kvm_machine_check(); - - /* We need to handle NMIs before interrupts are enabled */ -- if ((exit_intr_info & INTR_INFO_INTR_TYPE_MASK) == INTR_TYPE_NMI_INTR && -- (exit_intr_info & INTR_INFO_VALID_MASK)) { -+ if (is_nmi(exit_intr_info)) { - kvm_before_handle_nmi(&vmx->vcpu); - asm("int $2"); - kvm_after_handle_nmi(&vmx->vcpu); --- -2.8.0.rc3.226.g39d4020 - --- -To unsubscribe from this list: send the line "unsubscribe kvm" in -the body of a message to majordomo@vger.kernel.org -More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/sources b/sources index 19ed3980c..abfb30321 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ SHA512 (linux-4.8.tar.xz) = a48a065f21e1c7c4de4cf8ca47b8b8d9a70f86b64e7cfa6e01be490f78895745b9c8790734b1d22182cf1f930fb87eaaa84e62ec8cc1f64ac4be9b949e7c0358 SHA512 (perf-man-4.8.tar.gz) = 1e9707f1e11808178c1953d4f46e1789a138e9aca7bec89af7a6e209cd91e5301bc582db72cf889baa31dcba8cd3d3b1ceb4e8999ac1544ef17d513e861f2b59 -SHA512 (patch-4.8.16.xz) = b59ce2e0bade676845da2d29eabbf0a596fa4ebfb3b0459fea94d5443b9a0edc4cacc3868dbde1c16787a9097a53822d01f80dd9610a0194d734a4812a66acb1 +SHA512 (patch-4.8.17.xz) = df239d990077cdf697fd487b4b8abb97fe442ac9fac4ed2e90c626560fc15058363310cf40580fd000d4ad55198486594a608544ce9c2bcaf03704415aa45441 From 6f694dee179a7fb29f4fa2f9d47edd3a2ba9a73d Mon Sep 17 00:00:00 2001 From: Laura Abbott Date: Mon, 9 Jan 2017 10:08:47 -0800 Subject: [PATCH 181/275] Linux v4.9.4 rebase --- ...-System-Control-application-usages-i.patch | 75 -- ...efi-prune-invalid-memory-map-entries.patch | 141 +++ ...f_defrag-drop-mangled-skb-on-ream-er.patch | 69 -- ...apad-laptop-Add-Lenovo-Yoga-910-13IK.patch | 40 - ARM-OMAP4-Fix-crashes.patch | 97 -- AllWinner-net-emac.patch | 97 +- ...y-secure-boot-if-EFI-runtime-is-disa.patch | 32 + ...t-certificates-from-UEFI-Secure-Boot.patch | 32 +- ...-and-dev-kmem-when-module-loading-is.patch | 14 +- bcm2837-initial-support.patch | 66 +- bcm283x-fixes.patch | 964 ++++++++++++++++++ bcm283x-mmc-imp-speed.patch | 176 ++++ bcm283x-vc4-fixes.patch | 639 ------------ config-arm-generic | 36 +- config-arm64 | 50 +- config-armv7 | 12 +- config-armv7-generic | 52 +- config-armv7-lpae | 4 +- config-debug | 1 + config-generic | 240 +++-- config-nodebug | 1 + config-powerpc64 | 2 +- config-powerpc64-generic | 8 +- config-s390x | 8 +- config-x86-32-generic | 21 +- config-x86-generic | 51 +- config-x86_64-generic | 9 +- crash-driver.patch | 29 +- ...-image-security-database-GUID-defini.patch | 31 + filter-aarch64.sh | 2 +- filter-armv7hl.sh | 2 +- filter-i686.sh | 2 +- filter-modules.sh | 2 +- filter-ppc64.sh | 2 +- filter-ppc64le.sh | 2 +- filter-ppc64p7.sh | 2 +- geekbox-v4-device-tree-support.patch | 15 +- imx6sx-Add-UDOO-Neo-support.patch | 619 +++++++++++ kbuild-AFTER_LINK.patch | 40 +- kernel.spec | 78 +- remove-binary-diff.pl | 34 + selinux-namespace-fix.patch | 57 ++ sources | 6 +- ...-Fix-integer-overflows-bitmask-check.patch | 102 -- 44 files changed, 2506 insertions(+), 1456 deletions(-) delete mode 100644 0001-HID-input-ignore-System-Control-application-usages-i.patch create mode 100644 0001-efi-prune-invalid-memory-map-entries.patch delete mode 100644 0001-netfilter-ipv6-nf_defrag-drop-mangled-skb-on-ream-er.patch delete mode 100644 0001-platform-x86-ideapad-laptop-Add-Lenovo-Yoga-910-13IK.patch delete mode 100644 ARM-OMAP4-Fix-crashes.patch create mode 100644 MODSIGN-Don-t-try-secure-boot-if-EFI-runtime-is-disa.patch create mode 100644 bcm283x-fixes.patch create mode 100644 bcm283x-mmc-imp-speed.patch create mode 100644 efi-Add-SHIM-and-image-security-database-GUID-defini.patch create mode 100644 imx6sx-Add-UDOO-Neo-support.patch create mode 100755 remove-binary-diff.pl create mode 100644 selinux-namespace-fix.patch delete mode 100644 v3-vfio-pci-Fix-integer-overflows-bitmask-check.patch diff --git a/0001-HID-input-ignore-System-Control-application-usages-i.patch b/0001-HID-input-ignore-System-Control-application-usages-i.patch deleted file mode 100644 index 9920598c2..000000000 --- a/0001-HID-input-ignore-System-Control-application-usages-i.patch +++ /dev/null @@ -1,75 +0,0 @@ -From 1989dada7ce07848196991c9ebf25ff9c5f14d4e Mon Sep 17 00:00:00 2001 -From: Benjamin Tissoires -Date: Tue, 13 Sep 2016 11:52:37 +0200 -Subject: [PATCH] HID: input: ignore System Control application usages if not - System Controls - -Microsoft is reusing its report descriptor again and again, and part of it -looks like this: - -0x05, 0x01, // Usage Page (Generic Desktop) 299 -0x09, 0x80, // Usage (System Control) 301 -0xa1, 0x01, // Collection (Application) 303 -0x85, 0x03, // Report ID (3) 305 -0x19, 0x00, // Usage Minimum (0) 307 -0x29, 0xff, // Usage Maximum (255) 309 -0x15, 0x00, // Logical Minimum (0) 311 -0x26, 0xff, 0x00, // Logical Maximum (255) 313 -0x81, 0x00, // Input (Data,Arr,Abs) 316 -0xc0, // End Collection 318 - -While there is nothing wrong in term of processing, we do however blindly -map the full usage range (it's an array) from 0x00 to 0xff, which creates -some interesting axis, like ABS_X|Y, and a bunch of ABS_MISC + n. - -While libinput and other stacks don't care that much (we can detect them), -joydev is very happy and attaches itself to the mouse or keyboard. - -The problem is that joydev now handles the device as a joystick, but given -that we have a HID array, it sets all the ABS_* values to 0. And in its -world, 0 means -32767 (minimum value), which sends spurious events to games -(think Steam). - -It looks like hid-microsoft tries to tackle the very same problem with its -.report_fixup callback. But fixing the report descriptor is an endless task -and is quite obfuscated. - -So take the hammer, and decide that if the application is meant to be -System Control, any other usage not in the System Control range should -be ignored. - -Link: https://bugzilla.redhat.com/show_bug.cgi?id=1325354 -Link: https://bugzilla.kernel.org/show_bug.cgi?id=28912 -Link: https://github.com/ValveSoftware/steam-for-linux/issues/3384 -Link: https://bugzilla.redhat.com/show_bug.cgi?id=1325354 -Link: https://bugzilla.kernel.org/show_bug.cgi?id=37982 - -Signed-off-by: Benjamin Tissoires -Signed-off-by: Jiri Kosina ---- - drivers/hid/hid-input.c | 9 +++++++++ - 1 file changed, 9 insertions(+) - -diff --git a/drivers/hid/hid-input.c b/drivers/hid/hid-input.c -index bcfaf32..058919d 100644 ---- a/drivers/hid/hid-input.c -+++ b/drivers/hid/hid-input.c -@@ -604,6 +604,15 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel - break; - } - -+ /* -+ * Some lazy vendors declare 255 usages for System Control, -+ * leading to the creation of ABS_X|Y axis and too many others. -+ * It wouldn't be a problem if joydev doesn't consider the -+ * device as a joystick then. -+ */ -+ if (field->application == HID_GD_SYSTEM_CONTROL) -+ goto ignore; -+ - if ((usage->hid & 0xf0) == 0x90) { /* D-pad */ - switch (usage->hid) { - case HID_GD_UP: usage->hat_dir = 1; break; --- -2.7.4 - diff --git a/0001-efi-prune-invalid-memory-map-entries.patch b/0001-efi-prune-invalid-memory-map-entries.patch new file mode 100644 index 000000000..4b65ef504 --- /dev/null +++ b/0001-efi-prune-invalid-memory-map-entries.patch @@ -0,0 +1,141 @@ +From c7c7030a020405d5826c03839e38986e0f78f2ea Mon Sep 17 00:00:00 2001 +From: Peter Jones +Date: Tue, 13 Dec 2016 10:25:10 +0000 +Subject: [PATCH] efi: prune invalid memory map entries + +Some machines, such as the Lenovo ThinkPad W541 with firmware GNET80WW +(2.28), include memory map entries with phys_addr=0x0 and num_pages=0. + +Currently the log output for this case (with efi=debug) looks like: + +[ 0.000000] efi: mem45: [Reserved | | | | | | | | | | | | ] range=[0x0000000000000000-0xffffffffffffffff] (0MB) + +This is clearly wrong, and also not as informative as it could be. This +patch changes it so that if we find obviously invalid memory map +entries, we print an error and those entries. It also detects the +display of the address range calculation overflow, so the new output is: + +[ 0.000000] efi: [Firmware Bug]: Invalid EFI memory map entries: +[ 0.000000] efi: mem45: [Reserved | | | | | | | | | | | | ] range=[0x0000000000000000-0x0000000000000000] (invalid) + +It also detects memory map sizes that would overflow the physical +address, for example phys_addr=0xfffffffffffff000 and +num_pages=0x0200000000000001, and prints: + +[ 0.000000] efi: [Firmware Bug]: Invalid EFI memory map entries: +[ 0.000000] efi: mem45: [Reserved | | | | | | | | | | | | ] range=[phys_addr=0xfffffffffffff000-0x20ffffffffffffffff] (invalid) + +It then removes these entries from the memory map. + +Cc: Matt Fleming +Signed-off-by: Peter Jones +[ardb: refactor for clarity with no functional changes, avoid PAGE_SHIFT] +Signed-off-by: Ard Biesheuvel +--- + arch/x86/platform/efi/efi.c | 70 +++++++++++++++++++++++++++++++++++++++++++++ + include/linux/efi.h | 1 + + 2 files changed, 71 insertions(+) + +diff --git a/arch/x86/platform/efi/efi.c b/arch/x86/platform/efi/efi.c +index bf99aa7..0a1550b 100644 +--- a/arch/x86/platform/efi/efi.c ++++ b/arch/x86/platform/efi/efi.c +@@ -210,6 +210,74 @@ int __init efi_memblock_x86_reserve_range(void) + return 0; + } + ++#define OVERFLOW_ADDR_SHIFT (64 - EFI_PAGE_SHIFT) ++#define OVERFLOW_ADDR_MASK (U64_MAX << OVERFLOW_ADDR_SHIFT) ++#define U64_HIGH_BIT (~(U64_MAX >> 1)) ++ ++static bool __init efi_memmap_entry_valid(const efi_memory_desc_t *md, int i) ++{ ++ static __initdata bool once = true; ++ u64 end = (md->num_pages << EFI_PAGE_SHIFT) + md->phys_addr - 1; ++ u64 end_hi = 0; ++ char buf[64]; ++ ++ if (md->num_pages == 0) { ++ end = 0; ++ } else if (md->num_pages > EFI_PAGES_MAX || ++ EFI_PAGES_MAX - md->num_pages < ++ (md->phys_addr >> EFI_PAGE_SHIFT)) { ++ end_hi = (md->num_pages & OVERFLOW_ADDR_MASK) ++ >> OVERFLOW_ADDR_SHIFT; ++ ++ if ((md->phys_addr & U64_HIGH_BIT) && !(end & U64_HIGH_BIT)) ++ end_hi += 1; ++ } else { ++ return true; ++ } ++ ++ if (once) { ++ pr_warn(FW_BUG "Invalid EFI memory map entries:\n"); ++ once = false; ++ } ++ ++ if (end_hi) { ++ pr_warn("mem%02u: %s range=[0x%016llx-0x%llx%016llx] (invalid)\n", ++ i, efi_md_typeattr_format(buf, sizeof(buf), md), ++ md->phys_addr, end_hi, end); ++ } else { ++ pr_warn("mem%02u: %s range=[0x%016llx-0x%016llx] (invalid)\n", ++ i, efi_md_typeattr_format(buf, sizeof(buf), md), ++ md->phys_addr, end); ++ } ++ return false; ++} ++ ++static void __init efi_clean_memmap(void) ++{ ++ efi_memory_desc_t *out = efi.memmap.map; ++ const efi_memory_desc_t *in = out; ++ const efi_memory_desc_t *end = efi.memmap.map_end; ++ int i, n_removal; ++ ++ for (i = n_removal = 0; in < end; i++) { ++ if (efi_memmap_entry_valid(in, i)) { ++ if (out != in) ++ memcpy(out, in, efi.memmap.desc_size); ++ out = (void *)out + efi.memmap.desc_size; ++ } else { ++ n_removal++; ++ } ++ in = (void *)in + efi.memmap.desc_size; ++ } ++ ++ if (n_removal > 0) { ++ u64 size = efi.memmap.nr_map - n_removal; ++ ++ pr_warn("Removing %d invalid memory map entries.\n", n_removal); ++ efi_memmap_install(efi.memmap.phys_map, size); ++ } ++} ++ + void __init efi_print_memmap(void) + { + efi_memory_desc_t *md; +@@ -472,6 +540,8 @@ void __init efi_init(void) + } + } + ++ efi_clean_memmap(); ++ + if (efi_enabled(EFI_DBG)) + efi_print_memmap(); + } +diff --git a/include/linux/efi.h b/include/linux/efi.h +index 4c1b3ea..712a3aa 100644 +--- a/include/linux/efi.h ++++ b/include/linux/efi.h +@@ -103,6 +103,7 @@ typedef struct { + + #define EFI_PAGE_SHIFT 12 + #define EFI_PAGE_SIZE (1UL << EFI_PAGE_SHIFT) ++#define EFI_PAGES_MAX (U64_MAX >> EFI_PAGE_SHIFT) + + typedef struct { + u32 type; +-- +2.9.3 + diff --git a/0001-netfilter-ipv6-nf_defrag-drop-mangled-skb-on-ream-er.patch b/0001-netfilter-ipv6-nf_defrag-drop-mangled-skb-on-ream-er.patch deleted file mode 100644 index a5af1a3e9..000000000 --- a/0001-netfilter-ipv6-nf_defrag-drop-mangled-skb-on-ream-er.patch +++ /dev/null @@ -1,69 +0,0 @@ -From 9b57da0630c9fd36ed7a20fc0f98dc82cc0777fa Mon Sep 17 00:00:00 2001 -From: Florian Westphal -Date: Tue, 29 Nov 2016 02:17:34 +0100 -Subject: [PATCH] netfilter: ipv6: nf_defrag: drop mangled skb on ream error - -Dmitry Vyukov reported GPF in network stack that Andrey traced down to -negative nh offset in nf_ct_frag6_queue(). - -Problem is that all network headers before fragment header are pulled. -Normal ipv6 reassembly will drop the skb when errors occur further down -the line. - -netfilter doesn't do this, and instead passed the original fragment -along. That was also fine back when netfilter ipv6 defrag worked with -cloned fragments, as the original, pristine fragment was passed on. - -So we either have to undo the pull op, or discard such fragments. -Since they're malformed after all (e.g. overlapping fragment) it seems -preferrable to just drop them. - -Same for temporary errors -- it doesn't make sense to accept (and -perhaps forward!) only some fragments of same datagram. - -Fixes: 029f7f3b8701cc7ac ("netfilter: ipv6: nf_defrag: avoid/free clone operations") -Reported-by: Dmitry Vyukov -Debugged-by: Andrey Konovalov -Diagnosed-by: Eric Dumazet -Signed-off-by: Florian Westphal -Acked-by: Eric Dumazet -Signed-off-by: Pablo Neira Ayuso ---- - net/ipv6/netfilter/nf_conntrack_reasm.c | 4 ++-- - net/ipv6/netfilter/nf_defrag_ipv6_hooks.c | 2 +- - 2 files changed, 3 insertions(+), 3 deletions(-) - -diff --git a/net/ipv6/netfilter/nf_conntrack_reasm.c b/net/ipv6/netfilter/nf_conntrack_reasm.c -index e4347ae..9948b5c 100644 ---- a/net/ipv6/netfilter/nf_conntrack_reasm.c -+++ b/net/ipv6/netfilter/nf_conntrack_reasm.c -@@ -576,11 +576,11 @@ int nf_ct_frag6_gather(struct net *net, struct sk_buff *skb, u32 user) - /* Jumbo payload inhibits frag. header */ - if (ipv6_hdr(skb)->payload_len == 0) { - pr_debug("payload len = 0\n"); -- return -EINVAL; -+ return 0; - } - - if (find_prev_fhdr(skb, &prevhdr, &nhoff, &fhoff) < 0) -- return -EINVAL; -+ return 0; - - if (!pskb_may_pull(skb, fhoff + sizeof(*fhdr))) - return -ENOMEM; -diff --git a/net/ipv6/netfilter/nf_defrag_ipv6_hooks.c b/net/ipv6/netfilter/nf_defrag_ipv6_hooks.c -index f7aab5a..f06b047 100644 ---- a/net/ipv6/netfilter/nf_defrag_ipv6_hooks.c -+++ b/net/ipv6/netfilter/nf_defrag_ipv6_hooks.c -@@ -69,7 +69,7 @@ static unsigned int ipv6_defrag(void *priv, - if (err == -EINPROGRESS) - return NF_STOLEN; - -- return NF_ACCEPT; -+ return err == 0 ? NF_ACCEPT : NF_DROP; - } - - static struct nf_hook_ops ipv6_defrag_ops[] = { --- -2.9.3 - diff --git a/0001-platform-x86-ideapad-laptop-Add-Lenovo-Yoga-910-13IK.patch b/0001-platform-x86-ideapad-laptop-Add-Lenovo-Yoga-910-13IK.patch deleted file mode 100644 index 42e935206..000000000 --- a/0001-platform-x86-ideapad-laptop-Add-Lenovo-Yoga-910-13IK.patch +++ /dev/null @@ -1,40 +0,0 @@ -From 40c30bbf3377babc4d6bb16b699184236a8bfa27 Mon Sep 17 00:00:00 2001 -From: Brian Masney -Date: Tue, 11 Oct 2016 19:28:02 -0400 -Subject: [PATCH] platform/x86: ideapad-laptop: Add Lenovo Yoga 910-13IKB to - no_hw_rfkill dmi list - -The Lenovo Yoga 910-13IKB does not have a hw rfkill switch, and trying -to read the hw rfkill switch through the ideapad module causes it to -always report as blocked. - -This commit adds the Lenovo Yoga 910-13IKB to the no_hw_rfkill dmi list, -fixing the WiFI breakage. - -Signed-off-by: Brian Masney -Signed-off-by: Darren Hart ---- - drivers/platform/x86/ideapad-laptop.c | 7 +++++++ - 1 file changed, 7 insertions(+) - -diff --git a/drivers/platform/x86/ideapad-laptop.c b/drivers/platform/x86/ideapad-laptop.c -index d1a091b..a232394 100644 ---- a/drivers/platform/x86/ideapad-laptop.c -+++ b/drivers/platform/x86/ideapad-laptop.c -@@ -933,6 +933,13 @@ static const struct dmi_system_id no_hw_rfkill_list[] = { - DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo YOGA 900"), - }, - }, -+ { -+ .ident = "Lenovo YOGA 910-13IKB", -+ .matches = { -+ DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), -+ DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo YOGA 910-13IKB"), -+ }, -+ }, - {} - }; - --- -2.7.4 - diff --git a/ARM-OMAP4-Fix-crashes.patch b/ARM-OMAP4-Fix-crashes.patch deleted file mode 100644 index 57e56e507..000000000 --- a/ARM-OMAP4-Fix-crashes.patch +++ /dev/null @@ -1,97 +0,0 @@ -From patchwork Wed Oct 26 15:17:01 2016 -Content-Type: text/plain; charset="utf-8" -MIME-Version: 1.0 -Content-Transfer-Encoding: 7bit -Subject: [3/5] ARM: OMAP4+: Fix bad fallthrough for cpuidle -From: Tony Lindgren -X-Patchwork-Id: 9397501 -Message-Id: <20161026151703.24730-4-tony@atomide.com> -To: linux-omap@vger.kernel.org -Cc: Nishanth Menon , Dmitry Lifshitz , - Dave Gerlach , - Enric Balletbo Serra , - "Dr . H . Nikolaus Schaller" , - Pau Pajuel , Grazvydas Ignotas , - Benoit Cousson , - Santosh Shilimkar , - Javier Martinez Canillas , - Robert Nelson , - Marek Belisko , linux-arm-kernel@lists.infradead.org -Date: Wed, 26 Oct 2016 08:17:01 -0700 - -We don't want to fall through to a bunch of errors for retention -if PM_OMAP4_CPU_OSWR_DISABLE is not configured for a SoC. - -Fixes: 6099dd37c669 ("ARM: OMAP5 / DRA7: Enable CPU RET on suspend") -Signed-off-by: Tony Lindgren ---- - arch/arm/mach-omap2/omap-mpuss-lowpower.c | 5 ++--- - 1 file changed, 2 insertions(+), 3 deletions(-) - -diff --git a/arch/arm/mach-omap2/omap-mpuss-lowpower.c b/arch/arm/mach-omap2/omap-mpuss-lowpower.c ---- a/arch/arm/mach-omap2/omap-mpuss-lowpower.c -+++ b/arch/arm/mach-omap2/omap-mpuss-lowpower.c -@@ -244,10 +244,9 @@ int omap4_enter_lowpower(unsigned int cpu, unsigned int power_state) - save_state = 1; - break; - case PWRDM_POWER_RET: -- if (IS_PM44XX_ERRATUM(PM_OMAP4_CPU_OSWR_DISABLE)) { -+ if (IS_PM44XX_ERRATUM(PM_OMAP4_CPU_OSWR_DISABLE)) - save_state = 0; -- break; -- } -+ break; - default: - /* - * CPUx CSWR is invalid hardware state. Also CPUx OSWR -From 5a78ff7bf7e25191144b550961001bbf6c734da4 Mon Sep 17 00:00:00 2001 -From: Peter Chen -Date: Thu, 11 Aug 2016 17:44:54 +0800 -Subject: [PATCH 04152/16809] Revert "gpu: drm: omapdrm: dss-of: add missing - of_node_put after calling of_parse_phandle" - -This reverts -commit 2ab9f5879162499e1c4e48613287e3f59e593c4f -Author: Peter Chen -Date: Fri Jul 15 11:17:03 2016 +0800 - gpu: drm: omapdrm: dss-of: add missing of_node_put after calling of_parse_phandle - -The of_get_next_parent will drop refcount on the passed node, so the reverted -patch is wrong, thanks for Tomi Valkeinen points it. - -Cc: Tomi Valkeinen -Signed-off-by: Peter Chen -Acked-by: Tomi Valkeinen -Signed-off-by: Sean Paul -Link: http://patchwork.freedesktop.org/patch/msgid/1470908694-16362-1-git-send-email-peter.chen@nxp.com ---- - drivers/gpu/drm/omapdrm/dss/dss-of.c | 7 +++---- - 1 file changed, 3 insertions(+), 4 deletions(-) - -diff --git a/drivers/gpu/drm/omapdrm/dss/dss-of.c b/drivers/gpu/drm/omapdrm/dss/dss-of.c -index e256d87..dfd4e96 100644 ---- a/drivers/gpu/drm/omapdrm/dss/dss-of.c -+++ b/drivers/gpu/drm/omapdrm/dss/dss-of.c -@@ -125,16 +125,15 @@ u32 dss_of_port_get_port_number(struct device_node *port) - - static struct device_node *omapdss_of_get_remote_port(const struct device_node *node) - { -- struct device_node *np, *np_parent; -+ struct device_node *np; - - np = of_parse_phandle(node, "remote-endpoint", 0); - if (!np) - return NULL; - -- np_parent = of_get_next_parent(np); -- of_node_put(np); -+ np = of_get_next_parent(np); - -- return np_parent; -+ return np; - } - - struct device_node * --- -2.9.3 - diff --git a/AllWinner-net-emac.patch b/AllWinner-net-emac.patch index 7bcaecf4a..42dadabab 100644 --- a/AllWinner-net-emac.patch +++ b/AllWinner-net-emac.patch @@ -1,7 +1,7 @@ -From e90ba04ee5efbed6fc17dfa7f62702f268fc1bc4 Mon Sep 17 00:00:00 2001 +From fb909e29d6c073f4c5777a0db75df72b726e4314 Mon Sep 17 00:00:00 2001 From: Corentin LABBE Date: Fri, 7 Oct 2016 10:25:48 +0200 -Subject: [PATCH 1/9] ethernet: add sun8i-emac driver +Subject: [PATCH 1/8] ethernet: add sun8i-emac driver This patch add support for sun8i-emac ethernet MAC hardware. It could be found in Allwinner H3/A83T/A64 SoCs. @@ -2324,10 +2324,10 @@ index 0000000..bc74467 -- 2.9.3 -From 7171a3584b7eb728d263f72876836dda933aa6a6 Mon Sep 17 00:00:00 2001 +From 1d9ea1f4df27f3a2e2ed7094852a23a4dd45e2be Mon Sep 17 00:00:00 2001 From: Corentin LABBE Date: Fri, 7 Oct 2016 10:25:49 +0200 -Subject: [PATCH 2/9] MAINTAINERS: Add myself as maintainer of sun8i-emac +Subject: [PATCH 2/8] MAINTAINERS: Add myself as maintainer of sun8i-emac This patch add myself as maintainer of the sun8i-emac driver. @@ -2337,10 +2337,10 @@ Signed-off-by: Corentin Labbe 1 file changed, 6 insertions(+) diff --git a/MAINTAINERS b/MAINTAINERS -index f593300..94dac86 100644 +index 411e3b8..e99a087 100644 --- a/MAINTAINERS +++ b/MAINTAINERS -@@ -582,6 +582,12 @@ S: Maintained +@@ -590,6 +590,12 @@ S: Maintained F: Documentation/i2c/busses/i2c-ali1563 F: drivers/i2c/busses/i2c-ali1563.c @@ -2356,10 +2356,10 @@ index f593300..94dac86 100644 -- 2.9.3 -From 0c21240a091e9553751845f2aa3be0b5a88d9ac7 Mon Sep 17 00:00:00 2001 +From 6b3093e31b877f39475454b5af3b820dbb3a4f73 Mon Sep 17 00:00:00 2001 From: Corentin LABBE Date: Fri, 7 Oct 2016 10:25:50 +0200 -Subject: [PATCH 3/9] ARM: sun8i: dt: Add DT bindings documentation for +Subject: [PATCH 3/8] ARM: sun8i: dt: Add DT bindings documentation for Allwinner sun8i-emac This patch adds documentation for Device-Tree bindings for the @@ -2450,10 +2450,10 @@ index 0000000..92e4ef3b -- 2.9.3 -From 95d456fcdd33eb7c1512956050faba648550e06f Mon Sep 17 00:00:00 2001 +From aa634aa1b0454befe54a14d03b9a3ba6f750dcfd Mon Sep 17 00:00:00 2001 From: Corentin LABBE Date: Fri, 7 Oct 2016 10:25:51 +0200 -Subject: [PATCH 4/9] ARM: dts: sun8i-h3: Add dt node for the syscon control +Subject: [PATCH 4/8] ARM: dts: sun8i-h3: Add dt node for the syscon control module This patch add the dt node for the syscon register present on the @@ -2468,7 +2468,7 @@ Signed-off-by: Corentin Labbe 1 file changed, 5 insertions(+) diff --git a/arch/arm/boot/dts/sun8i-h3.dtsi b/arch/arm/boot/dts/sun8i-h3.dtsi -index fdf9fdb..d658a596 100644 +index 75a8654..eac7d00 100644 --- a/arch/arm/boot/dts/sun8i-h3.dtsi +++ b/arch/arm/boot/dts/sun8i-h3.dtsi @@ -140,6 +140,11 @@ @@ -2486,10 +2486,10 @@ index fdf9fdb..d658a596 100644 -- 2.9.3 -From 7837b66f2bce01da31ec4c005023c729ba3f17a7 Mon Sep 17 00:00:00 2001 -From: Corentin LABBE -Date: Fri, 7 Oct 2016 10:25:52 +0200 -Subject: [PATCH 5/9] ARM: dts: sun8i-h3: add sun8i-emac ethernet driver +From 976cca2d4eb5bf85c26dfaad03ea70bff88981fd Mon Sep 17 00:00:00 2001 +From: Peter Robinson +Date: Tue, 8 Nov 2016 10:23:08 +0000 +Subject: [PATCH 5/8] ARM: dts: sun8i-h3: add sun8i-emac ethernet driver The sun8i-emac is an ethernet MAC hardware that support 10/100/1000 speed. @@ -2503,11 +2503,11 @@ Signed-off-by: Corentin Labbe 1 file changed, 24 insertions(+) diff --git a/arch/arm/boot/dts/sun8i-h3.dtsi b/arch/arm/boot/dts/sun8i-h3.dtsi -index d658a596..54174cf 100644 +index eac7d00..86a8665 100644 --- a/arch/arm/boot/dts/sun8i-h3.dtsi +++ b/arch/arm/boot/dts/sun8i-h3.dtsi -@@ -446,6 +446,30 @@ - status = "disabled"; +@@ -535,6 +535,30 @@ + #size-cells = <0>; }; + emac: ethernet@1c30000 { @@ -2540,10 +2540,10 @@ index d658a596..54174cf 100644 -- 2.9.3 -From e9687b752a1551ae420a94ff44254831ef464557 Mon Sep 17 00:00:00 2001 +From 6e483713dda9e0d5e8e5f37d8b0367ff216c53db Mon Sep 17 00:00:00 2001 From: Corentin LABBE Date: Fri, 7 Oct 2016 10:25:53 +0200 -Subject: [PATCH 6/9] ARM: dts: sun8i: Enable sun8i-emac on the Orange PI PC +Subject: [PATCH 6/8] ARM: dts: sun8i: Enable sun8i-emac on the Orange PI PC The sun8i-emac hardware is present on the Orange PI PC. It uses the internal PHY. @@ -2556,7 +2556,7 @@ Signed-off-by: Corentin Labbe 1 file changed, 8 insertions(+) diff --git a/arch/arm/boot/dts/sun8i-h3-orangepi-pc.dts b/arch/arm/boot/dts/sun8i-h3-orangepi-pc.dts -index daf50b9a6..71717cc 100644 +index 3ec9712..1b8dbc0 100644 --- a/arch/arm/boot/dts/sun8i-h3-orangepi-pc.dts +++ b/arch/arm/boot/dts/sun8i-h3-orangepi-pc.dts @@ -54,6 +54,7 @@ @@ -2567,7 +2567,7 @@ index daf50b9a6..71717cc 100644 }; chosen { -@@ -165,3 +166,10 @@ +@@ -183,3 +184,10 @@ /* USB VBUS is always on */ status = "okay"; }; @@ -2581,10 +2581,10 @@ index daf50b9a6..71717cc 100644 -- 2.9.3 -From 7df9f84ca65a398b1bb692344fa26c67235f19d3 Mon Sep 17 00:00:00 2001 +From 05cf4e2c77424ad5c9dc8495a65d6695d2831b0a Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Fri, 7 Oct 2016 10:25:54 +0200 -Subject: [PATCH 7/9] ARM: dts: sun8i: Enable sun8i-emac on the Orange PI One +Subject: [PATCH 7/8] ARM: dts: sun8i: Enable sun8i-emac on the Orange PI One The sun8i-emac hardware is present on the Orange PI One. It uses the internal PHY. @@ -2598,7 +2598,7 @@ Signed-off-by: Corentin Labbe 1 file changed, 8 insertions(+) diff --git a/arch/arm/boot/dts/sun8i-h3-orangepi-one.dts b/arch/arm/boot/dts/sun8i-h3-orangepi-one.dts -index 0adf932..25f2455 100644 +index 5c9b5bf..fa398cc 100644 --- a/arch/arm/boot/dts/sun8i-h3-orangepi-one.dts +++ b/arch/arm/boot/dts/sun8i-h3-orangepi-one.dts @@ -54,6 +54,7 @@ @@ -2626,10 +2626,10 @@ index 0adf932..25f2455 100644 -- 2.9.3 -From dd8a48a9d7250d4bfc501dd5a4e8179ffac27d11 Mon Sep 17 00:00:00 2001 -From: Corentin LABBE -Date: Fri, 7 Oct 2016 10:25:55 +0200 -Subject: [PATCH 8/9] ARM: dts: sun8i: Enable sun8i-emac on the Orange Pi 2 +From 52c300b614fcb29e81067aa7ed8aafa489b590b7 Mon Sep 17 00:00:00 2001 +From: Peter Robinson +Date: Tue, 8 Nov 2016 10:24:42 +0000 +Subject: [PATCH 8/8] ARM: dts: sun8i: Enable sun8i-emac on the Orange Pi 2 The sun8i-emac hardware is present on the Orange PI 2. It uses the internal PHY. @@ -2642,7 +2642,7 @@ Signed-off-by: Corentin Labbe 1 file changed, 8 insertions(+) diff --git a/arch/arm/boot/dts/sun8i-h3-orangepi-2.dts b/arch/arm/boot/dts/sun8i-h3-orangepi-2.dts -index f93f5d1..5608eb4 100644 +index e5bcaba..ad66b61 100644 --- a/arch/arm/boot/dts/sun8i-h3-orangepi-2.dts +++ b/arch/arm/boot/dts/sun8i-h3-orangepi-2.dts @@ -54,6 +54,7 @@ @@ -2650,10 +2650,10 @@ index f93f5d1..5608eb4 100644 aliases { serial0 = &uart0; + ethernet0 = &emac; + /* ethernet0 is the H3 emac, defined in sun8i-h3.dtsi */ + ethernet1 = &rtl8189; }; - - chosen { -@@ -184,3 +185,10 @@ +@@ -212,3 +213,10 @@ usb1_vbus-supply = <®_usb1_vbus>; status = "okay"; }; @@ -2667,34 +2667,3 @@ index f93f5d1..5608eb4 100644 -- 2.9.3 -From cc1f0d509ecebebe8b50c97b71c84fb082ce0e56 Mon Sep 17 00:00:00 2001 -From: Corentin LABBE -Date: Wed, 5 Oct 2016 11:48:24 +0200 -Subject: [PATCH 9/9] ARM: dt: sun8i-h3: Add sunxi-sid to dts for sun8i-h3 - -This patch add support for the sunxi-sid driver to the device tree for sun8i-h3. - -Signed-off-by: Corentin Labbe ---- - arch/arm/boot/dts/sun8i-h3.dtsi | 5 +++++ - 1 file changed, 5 insertions(+) - -diff --git a/arch/arm/boot/dts/sun8i-h3.dtsi b/arch/arm/boot/dts/sun8i-h3.dtsi -index 54174cf..8628b38 100644 ---- a/arch/arm/boot/dts/sun8i-h3.dtsi -+++ b/arch/arm/boot/dts/sun8i-h3.dtsi -@@ -211,6 +211,11 @@ - #size-cells = <0>; - }; - -+ sid: eeprom@01c14200 { -+ compatible = "allwinner,sun7i-a20-sid"; -+ reg = <0x01c14200 0x200>; -+ }; -+ - usbphy: phy@01c19400 { - compatible = "allwinner,sun8i-h3-usb-phy"; - reg = <0x01c19400 0x2c>, --- -2.9.3 - diff --git a/MODSIGN-Don-t-try-secure-boot-if-EFI-runtime-is-disa.patch b/MODSIGN-Don-t-try-secure-boot-if-EFI-runtime-is-disa.patch new file mode 100644 index 000000000..6f5d8b6ab --- /dev/null +++ b/MODSIGN-Don-t-try-secure-boot-if-EFI-runtime-is-disa.patch @@ -0,0 +1,32 @@ +From 71db1b222ecdf6cb4356f6f1e2bd45cd2f0e85e1 Mon Sep 17 00:00:00 2001 +From: Laura Abbott +Date: Tue, 18 Oct 2016 13:58:44 -0700 +Subject: [PATCH] MODSIGN: Don't try secure boot if EFI runtime is disabled + +Secure boot depends on having EFI runtime variable access. The code +does not handle a lack of runtime variables gracefully. Add a check +to just bail out of EFI runtime is disabled. + +Signed-off-by: Laura Abbott +--- + kernel/modsign_uefi.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/kernel/modsign_uefi.c b/kernel/modsign_uefi.c +index a41da14..2bdaf76 100644 +--- a/kernel/modsign_uefi.c ++++ b/kernel/modsign_uefi.c +@@ -71,6 +71,10 @@ static int __init load_uefi_certs(void) + if (!efi_enabled(EFI_SECURE_BOOT)) + return 0; + ++ /* Things blow up if efi runtime is disabled */ ++ if (efi_runtime_disabled()) ++ return 0; ++ + keyring = get_system_keyring(); + if (!keyring) { + pr_err("MODSIGN: Couldn't get system keyring\n"); +-- +2.7.4 + diff --git a/MODSIGN-Import-certificates-from-UEFI-Secure-Boot.patch b/MODSIGN-Import-certificates-from-UEFI-Secure-Boot.patch index 05be7a028..752ba4631 100644 --- a/MODSIGN-Import-certificates-from-UEFI-Secure-Boot.patch +++ b/MODSIGN-Import-certificates-from-UEFI-Secure-Boot.patch @@ -1,7 +1,7 @@ -From ba2b209daf984514229626803472e0b055832345 Mon Sep 17 00:00:00 2001 +From 8a4535bcfe24d317be675e53cdc8c61d22fdc7f3 Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Fri, 26 Oct 2012 12:42:16 -0400 -Subject: [PATCH] MODSIGN: Import certificates from UEFI Secure Boot +Subject: [PATCH 18/20] MODSIGN: Import certificates from UEFI Secure Boot Secure Boot stores a list of allowed certificates in the 'db' variable. This imports those certificates into the system trusted keyring. This @@ -20,11 +20,10 @@ Signed-off-by: Josh Boyer --- certs/system_keyring.c | 13 ++++++ include/keys/system_keyring.h | 1 + - include/linux/efi.h | 6 +++ init/Kconfig | 9 ++++ kernel/Makefile | 3 ++ kernel/modsign_uefi.c | 99 +++++++++++++++++++++++++++++++++++++++++++ - 6 files changed, 131 insertions(+) + 5 files changed, 125 insertions(+) create mode 100644 kernel/modsign_uefi.c diff --git a/certs/system_keyring.c b/certs/system_keyring.c @@ -63,28 +62,11 @@ index 5bc291a3d261..56ff5715ab67 100644 #ifdef CONFIG_IMA_BLACKLIST_KEYRING extern struct key *ima_blacklist_keyring; -diff --git a/include/linux/efi.h b/include/linux/efi.h -index ff1877145aa4..2483de19c719 100644 ---- a/include/linux/efi.h -+++ b/include/linux/efi.h -@@ -658,6 +658,12 @@ typedef struct { - u64 table; - } efi_config_table_64_t; - -+#define EFI_IMAGE_SECURITY_DATABASE_GUID \ -+ EFI_GUID( 0xd719b2cb, 0x3d3a, 0x4596, 0xa3, 0xbc, 0xda, 0xd0, 0x0e, 0x67, 0x65, 0x6f ) -+ -+#define EFI_SHIM_LOCK_GUID \ -+ EFI_GUID( 0x605dab50, 0xe046, 0x4300, 0xab, 0xb6, 0x3d, 0xd8, 0x10, 0xdd, 0x8b, 0x23 ) -+ - typedef struct { - efi_guid_t guid; - u32 table; diff --git a/init/Kconfig b/init/Kconfig -index e5449d5aeff9..5408c96f6604 100644 +index 461ad575a608..93646fd7b1c8 100644 --- a/init/Kconfig +++ b/init/Kconfig -@@ -1979,6 +1979,15 @@ config MODULE_SIG_ALL +@@ -2009,6 +2009,15 @@ config MODULE_SIG_ALL comment "Do not forget to sign required modules with scripts/sign-file" depends on MODULE_SIG_FORCE && !MODULE_SIG_ALL @@ -101,7 +83,7 @@ index e5449d5aeff9..5408c96f6604 100644 prompt "Which hash algorithm should modules be signed with?" depends on MODULE_SIG diff --git a/kernel/Makefile b/kernel/Makefile -index e2ec54e2b952..8dab549985d8 100644 +index eb26e12c6c2a..e0c2268cb97e 100644 --- a/kernel/Makefile +++ b/kernel/Makefile @@ -57,6 +57,7 @@ endif @@ -227,5 +209,5 @@ index 000000000000..fe4a6f2bf10a +} +late_initcall(load_uefi_certs); -- -2.5.5 +2.9.3 diff --git a/Restrict-dev-mem-and-dev-kmem-when-module-loading-is.patch b/Restrict-dev-mem-and-dev-kmem-when-module-loading-is.patch index acf28cf88..24f1d5b5d 100644 --- a/Restrict-dev-mem-and-dev-kmem-when-module-loading-is.patch +++ b/Restrict-dev-mem-and-dev-kmem-when-module-loading-is.patch @@ -1,4 +1,4 @@ -From d4ae417828427de74e9f857f9caa49580aecf1fe Mon Sep 17 00:00:00 2001 +From 9f31204f829da97f99f7aacf30f0ddc26e456df7 Mon Sep 17 00:00:00 2001 From: Matthew Garrett Date: Fri, 9 Mar 2012 09:28:15 -0500 Subject: [PATCH 06/20] Restrict /dev/mem and /dev/kmem when module loading is @@ -14,10 +14,10 @@ Signed-off-by: Matthew Garrett 1 file changed, 6 insertions(+) diff --git a/drivers/char/mem.c b/drivers/char/mem.c -index 53fe675f9bd7..b52c88860532 100644 +index 7f1a7ab5850d..d6a6f05fbc1c 100644 --- a/drivers/char/mem.c +++ b/drivers/char/mem.c -@@ -167,6 +167,9 @@ static ssize_t write_mem(struct file *file, const char __user *buf, +@@ -164,6 +164,9 @@ static ssize_t write_mem(struct file *file, const char __user *buf, if (p != *ppos) return -EFBIG; @@ -27,9 +27,9 @@ index 53fe675f9bd7..b52c88860532 100644 if (!valid_phys_addr_range(p, count)) return -EFAULT; -@@ -513,6 +516,9 @@ static ssize_t write_kmem(struct file *file, const char __user *buf, - char *kbuf; /* k-addr because vwrite() takes vmlist_lock rwlock */ - int err = 0; +@@ -516,6 +519,9 @@ static ssize_t write_kmem(struct file *file, const char __user *buf, + if (!pfn_valid(PFN_DOWN(p))) + return -EIO; + if (secure_modules()) + return -EPERM; @@ -38,5 +38,5 @@ index 53fe675f9bd7..b52c88860532 100644 unsigned long to_write = min_t(unsigned long, count, (unsigned long)high_memory - p); -- -2.4.3 +2.9.3 diff --git a/bcm2837-initial-support.patch b/bcm2837-initial-support.patch index 0e641d693..dd64598aa 100644 --- a/bcm2837-initial-support.patch +++ b/bcm2837-initial-support.patch @@ -1,4 +1,4 @@ -From a2858804c7f5f4585b718543236b7ba3b3ec813a Mon Sep 17 00:00:00 2001 +From cdb86691df26e0962f081981f4bfa97ee43bd391 Mon Sep 17 00:00:00 2001 From: Peter Robinson Date: Mon, 29 Aug 2016 09:14:15 +0100 Subject: [PATCH] ARM: bcm283x: Add devicetree for the Raspberry Pi 3. @@ -18,15 +18,15 @@ Signed-off-by: Peter Robinson create mode 100644 arch/arm/boot/dts/bcm2837.dtsi diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile -index faacd52..ec41888 100644 +index befcd26..c96fb38 100644 --- a/arch/arm/boot/dts/Makefile +++ b/arch/arm/boot/dts/Makefile -@@ -69,7 +69,8 @@ dtb-$(CONFIG_ARCH_BCM2835) += \ - bcm2835-rpi-b-rev2.dtb \ +@@ -70,7 +70,8 @@ dtb-$(CONFIG_ARCH_BCM2835) += \ bcm2835-rpi-b-plus.dtb \ bcm2835-rpi-a-plus.dtb \ -- bcm2836-rpi-2-b.dtb -+ bcm2836-rpi-2-b.dtb \ + bcm2836-rpi-2-b.dtb \ +- bcm2835-rpi-zero.dtb ++ bcm2835-rpi-zero.dtb \ + bcm2837-rpi-3-b.dtb dtb-$(CONFIG_ARCH_BCM_5301X) += \ bcm4708-asus-rt-ac56u.dtb \ @@ -150,4 +150,58 @@ index 0000000..8216bbb + interrupts = <8>; +}; -- +2.7.4 + +From 345863374ebec9aa11ea97b99f5adbf97f99bbdf Mon Sep 17 00:00:00 2001 +From: Peter Robinson +Date: Mon, 16 Jan 2017 06:38:08 +0000 +Subject: [PATCH] add upstream RPi3 fixes from arm64 DT + +Signed-off-by: Peter Robinson +--- + arch/arm/boot/dts/bcm2837-rpi-3-b.dts | 8 +------- + arch/arm/boot/dts/bcm2837.dtsi | 8 +++++++- + 2 files changed, 8 insertions(+), 8 deletions(-) + +diff --git a/arch/arm/boot/dts/bcm2837-rpi-3-b.dts b/arch/arm/boot/dts/bcm2837-rpi-3-b.dts +index 7841b72..c309633 100644 +--- a/arch/arm/boot/dts/bcm2837-rpi-3-b.dts ++++ b/arch/arm/boot/dts/bcm2837-rpi-3-b.dts +@@ -2,6 +2,7 @@ + #include "bcm2837.dtsi" + #include "bcm2835-rpi.dtsi" + #include "bcm283x-rpi-smsc9514.dtsi" ++#include "bcm283x-rpi-usb-host.dtsi" + + / { + compatible = "raspberrypi,3-model-b", "brcm,bcm2837"; +@@ -15,13 +16,6 @@ + act { + gpios = <&gpio 47 0>; + }; +- +- pwr { +- label = "PWR"; +- gpios = <&gpio 35 0>; +- default-state = "keep"; +- linux,default-trigger = "default-on"; +- }; + }; + }; + +diff --git a/arch/arm/boot/dts/bcm2837.dtsi b/arch/arm/boot/dts/bcm2837.dtsi +index 8216bbb..19f2fe6 100644 +--- a/arch/arm/boot/dts/bcm2837.dtsi ++++ b/arch/arm/boot/dts/bcm2837.dtsi +@@ -1,7 +1,7 @@ + #include "bcm283x.dtsi" + + / { +- compatible = "brcm,bcm2836"; ++ compatible = "brcm,bcm2837"; + + soc { + ranges = <0x7e000000 0x3f000000 0x1000000>, +-- 2.9.3 + diff --git a/bcm283x-fixes.patch b/bcm283x-fixes.patch new file mode 100644 index 000000000..07abd3aa4 --- /dev/null +++ b/bcm283x-fixes.patch @@ -0,0 +1,964 @@ +From e2474541032db65d02bf88b6a8c2f954654b443f Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= +Date: Mon, 3 Oct 2016 22:06:08 +0200 +Subject: [PATCH 31155/39886] i2c: bcm2835: Fix hang for writing messages + larger than 16 bytes +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Writing messages larger than the FIFO size results in a hang, rendering +the machine unusable. This is because the RXD status flag is set on the +first interrupt which results in bcm2835_drain_rxfifo() stealing bytes +from the buffer. The controller continues to trigger interrupts waiting +for the missing bytes, but bcm2835_fill_txfifo() has none to give. +In this situation wait_for_completion_timeout() apparently is unable to +stop the madness. + +The BCM2835 ARM Peripherals datasheet has this to say about the flags: + TXD: is set when the FIFO has space for at least one byte of data. + RXD: is set when the FIFO contains at least one byte of data. + TXW: is set during a write transfer and the FIFO is less than full. + RXR: is set during a read transfer and the FIFO is or more full. + +Implementing the logic from the downstream i2c-bcm2708 driver solved +the hang problem. + +Signed-off-by: Noralf Trønnes +Reviewed-by: Eric Anholt +Reviewed-by: Martin Sperl +Signed-off-by: Wolfram Sang +--- + drivers/i2c/busses/i2c-bcm2835.c | 22 ++++++++++++++-------- + 1 file changed, 14 insertions(+), 8 deletions(-) + +diff --git a/drivers/i2c/busses/i2c-bcm2835.c b/drivers/i2c/busses/i2c-bcm2835.c +index d4f3239..f283b71 100644 +--- a/drivers/i2c/busses/i2c-bcm2835.c ++++ b/drivers/i2c/busses/i2c-bcm2835.c +@@ -64,6 +64,7 @@ struct bcm2835_i2c_dev { + int irq; + struct i2c_adapter adapter; + struct completion completion; ++ struct i2c_msg *curr_msg; + u32 msg_err; + u8 *msg_buf; + size_t msg_buf_remaining; +@@ -126,14 +127,13 @@ static irqreturn_t bcm2835_i2c_isr(int this_irq, void *data) + return IRQ_HANDLED; + } + +- if (val & BCM2835_I2C_S_RXD) { +- bcm2835_drain_rxfifo(i2c_dev); +- if (!(val & BCM2835_I2C_S_DONE)) +- return IRQ_HANDLED; +- } +- + if (val & BCM2835_I2C_S_DONE) { +- if (i2c_dev->msg_buf_remaining) ++ if (i2c_dev->curr_msg->flags & I2C_M_RD) { ++ bcm2835_drain_rxfifo(i2c_dev); ++ val = bcm2835_i2c_readl(i2c_dev, BCM2835_I2C_S); ++ } ++ ++ if ((val & BCM2835_I2C_S_RXD) || i2c_dev->msg_buf_remaining) + i2c_dev->msg_err = BCM2835_I2C_S_LEN; + else + i2c_dev->msg_err = 0; +@@ -141,11 +141,16 @@ static irqreturn_t bcm2835_i2c_isr(int this_irq, void *data) + return IRQ_HANDLED; + } + +- if (val & BCM2835_I2C_S_TXD) { ++ if (val & BCM2835_I2C_S_TXW) { + bcm2835_fill_txfifo(i2c_dev); + return IRQ_HANDLED; + } + ++ if (val & BCM2835_I2C_S_RXR) { ++ bcm2835_drain_rxfifo(i2c_dev); ++ return IRQ_HANDLED; ++ } ++ + return IRQ_NONE; + } + +@@ -155,6 +160,7 @@ static int bcm2835_i2c_xfer_msg(struct bcm2835_i2c_dev *i2c_dev, + u32 c; + unsigned long time_left; + ++ i2c_dev->curr_msg = msg; + i2c_dev->msg_buf = msg->buf; + i2c_dev->msg_buf_remaining = msg->len; + reinit_completion(&i2c_dev->completion); +-- +2.9.3 + +From d4030d75c7cbb434b2a3e5f6af5065879d2615a5 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= +Date: Mon, 3 Oct 2016 22:06:09 +0200 +Subject: [PATCH 31156/39886] i2c: bcm2835: Protect against unexpected TXW/RXR + interrupts +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +If an unexpected TXW or RXR interrupt occurs (msg_buf_remaining == 0), +the driver has no way to fill/drain the FIFO to stop the interrupts. +In this case the controller has to be disabled and the transfer +completed to avoid hang. + +(CLKT | ERR) and DONE interrupts are completed in their own paths, and +the controller is disabled in the transfer function after completion. +Unite the code paths and do disabling inside the interrupt routine. + +Clear interrupt status bits in the united completion path instead of +trying to do it on every interrupt which isn't necessary. +Only CLKT, ERR and DONE can be cleared that way. + +Add the status value to the error value in case of TXW/RXR errors to +distinguish them from the other S_LEN error. + +Signed-off-by: Noralf Trønnes +Reviewed-by: Eric Anholt +Signed-off-by: Wolfram Sang +--- + drivers/i2c/busses/i2c-bcm2835.c | 40 +++++++++++++++++++++++++++++++--------- + 1 file changed, 31 insertions(+), 9 deletions(-) + +diff --git a/drivers/i2c/busses/i2c-bcm2835.c b/drivers/i2c/busses/i2c-bcm2835.c +index f283b71..d2ba1a4 100644 +--- a/drivers/i2c/busses/i2c-bcm2835.c ++++ b/drivers/i2c/busses/i2c-bcm2835.c +@@ -50,8 +50,6 @@ + #define BCM2835_I2C_S_CLKT BIT(9) + #define BCM2835_I2C_S_LEN BIT(10) /* Fake bit for SW error reporting */ + +-#define BCM2835_I2C_BITMSK_S 0x03FF +- + #define BCM2835_I2C_CDIV_MIN 0x0002 + #define BCM2835_I2C_CDIV_MAX 0xFFFE + +@@ -111,20 +109,26 @@ static void bcm2835_drain_rxfifo(struct bcm2835_i2c_dev *i2c_dev) + } + } + ++/* ++ * Note about I2C_C_CLEAR on error: ++ * The I2C_C_CLEAR on errors will take some time to resolve -- if you were in ++ * non-idle state and I2C_C_READ, it sets an abort_rx flag and runs through ++ * the state machine to send a NACK and a STOP. Since we're setting CLEAR ++ * without I2CEN, that NACK will be hanging around queued up for next time ++ * we start the engine. ++ */ ++ + static irqreturn_t bcm2835_i2c_isr(int this_irq, void *data) + { + struct bcm2835_i2c_dev *i2c_dev = data; + u32 val, err; + + val = bcm2835_i2c_readl(i2c_dev, BCM2835_I2C_S); +- val &= BCM2835_I2C_BITMSK_S; +- bcm2835_i2c_writel(i2c_dev, BCM2835_I2C_S, val); + + err = val & (BCM2835_I2C_S_CLKT | BCM2835_I2C_S_ERR); + if (err) { + i2c_dev->msg_err = err; +- complete(&i2c_dev->completion); +- return IRQ_HANDLED; ++ goto complete; + } + + if (val & BCM2835_I2C_S_DONE) { +@@ -137,21 +141,38 @@ static irqreturn_t bcm2835_i2c_isr(int this_irq, void *data) + i2c_dev->msg_err = BCM2835_I2C_S_LEN; + else + i2c_dev->msg_err = 0; +- complete(&i2c_dev->completion); +- return IRQ_HANDLED; ++ goto complete; + } + + if (val & BCM2835_I2C_S_TXW) { ++ if (!i2c_dev->msg_buf_remaining) { ++ i2c_dev->msg_err = val | BCM2835_I2C_S_LEN; ++ goto complete; ++ } ++ + bcm2835_fill_txfifo(i2c_dev); + return IRQ_HANDLED; + } + + if (val & BCM2835_I2C_S_RXR) { ++ if (!i2c_dev->msg_buf_remaining) { ++ i2c_dev->msg_err = val | BCM2835_I2C_S_LEN; ++ goto complete; ++ } ++ + bcm2835_drain_rxfifo(i2c_dev); + return IRQ_HANDLED; + } + + return IRQ_NONE; ++ ++complete: ++ bcm2835_i2c_writel(i2c_dev, BCM2835_I2C_C, BCM2835_I2C_C_CLEAR); ++ bcm2835_i2c_writel(i2c_dev, BCM2835_I2C_S, BCM2835_I2C_S_CLKT | ++ BCM2835_I2C_S_ERR | BCM2835_I2C_S_DONE); ++ complete(&i2c_dev->completion); ++ ++ return IRQ_HANDLED; + } + + static int bcm2835_i2c_xfer_msg(struct bcm2835_i2c_dev *i2c_dev, +@@ -181,8 +202,9 @@ static int bcm2835_i2c_xfer_msg(struct bcm2835_i2c_dev *i2c_dev, + + time_left = wait_for_completion_timeout(&i2c_dev->completion, + BCM2835_I2C_TIMEOUT); +- bcm2835_i2c_writel(i2c_dev, BCM2835_I2C_C, BCM2835_I2C_C_CLEAR); + if (!time_left) { ++ bcm2835_i2c_writel(i2c_dev, BCM2835_I2C_C, ++ BCM2835_I2C_C_CLEAR); + dev_err(i2c_dev->dev, "i2c transfer timed out\n"); + return -ETIMEDOUT; + } +-- +2.9.3 + +From 23c9540b3ad1d7473fe40df80074d0fb0bf04869 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= +Date: Mon, 3 Oct 2016 22:06:10 +0200 +Subject: [PATCH 31157/39886] i2c: bcm2835: Use dev_dbg logging on transfer + errors +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Writing to an AT24C32 generates on average 2x i2c transfer errors per +32-byte page write. Which amounts to a lot for a 4k write. This is due +to the fact that the chip doesn't respond during it's internal write +cycle when the at24 driver tries and retries the next write. +Only a handful drivers use dev_err() on transfer error, so switch to +dev_dbg() instead. + +Signed-off-by: Noralf Trønnes +Reviewed-by: Eric Anholt +Signed-off-by: Wolfram Sang +--- + drivers/i2c/busses/i2c-bcm2835.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/i2c/busses/i2c-bcm2835.c b/drivers/i2c/busses/i2c-bcm2835.c +index d2ba1a4..54d510a 100644 +--- a/drivers/i2c/busses/i2c-bcm2835.c ++++ b/drivers/i2c/busses/i2c-bcm2835.c +@@ -216,7 +216,7 @@ static int bcm2835_i2c_xfer_msg(struct bcm2835_i2c_dev *i2c_dev, + (msg->flags & I2C_M_IGNORE_NAK)) + return 0; + +- dev_err(i2c_dev->dev, "i2c transfer failed: %x\n", i2c_dev->msg_err); ++ dev_dbg(i2c_dev->dev, "i2c transfer failed: %x\n", i2c_dev->msg_err); + + if (i2c_dev->msg_err & BCM2835_I2C_S_ERR) + return -EREMOTEIO; +-- +2.9.3 + +From 8d2cc5cc6ee5c0fc48a96bb29af55fc700f66fdf Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= +Date: Mon, 3 Oct 2016 22:06:11 +0200 +Subject: [PATCH 31158/39886] i2c: bcm2835: Can't support I2C_M_IGNORE_NAK +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The controller can't support this flag, so remove it. + +Documentation/i2c/i2c-protocol states that all of the message is sent: + +I2C_M_IGNORE_NAK: + Normally message is interrupted immediately if there is [NA] from the + client. Setting this flag treats any [NA] as [A], and all of + message is sent. + +>From the BCM2835 ARM Peripherals datasheet: + + The ERR field is set when the slave fails to acknowledge either + its address or a data byte written to it. + +So when the controller doesn't receive an ack, it sets ERR and raises +an interrupt. In other words, the whole message is not sent. + +Signed-off-by: Noralf Trønnes +Reviewed-by: Eric Anholt +Signed-off-by: Wolfram Sang +--- + drivers/i2c/busses/i2c-bcm2835.c | 4 ---- + 1 file changed, 4 deletions(-) + +diff --git a/drivers/i2c/busses/i2c-bcm2835.c b/drivers/i2c/busses/i2c-bcm2835.c +index 54d510a..565ef69 100644 +--- a/drivers/i2c/busses/i2c-bcm2835.c ++++ b/drivers/i2c/busses/i2c-bcm2835.c +@@ -212,10 +212,6 @@ static int bcm2835_i2c_xfer_msg(struct bcm2835_i2c_dev *i2c_dev, + if (likely(!i2c_dev->msg_err)) + return 0; + +- if ((i2c_dev->msg_err & BCM2835_I2C_S_ERR) && +- (msg->flags & I2C_M_IGNORE_NAK)) +- return 0; +- + dev_dbg(i2c_dev->dev, "i2c transfer failed: %x\n", i2c_dev->msg_err); + + if (i2c_dev->msg_err & BCM2835_I2C_S_ERR) +-- +2.9.3 + +From ee05fea21b017b81a9477569b6a0c2d8e2946ac9 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= +Date: Mon, 3 Oct 2016 22:06:12 +0200 +Subject: [PATCH 31159/39886] i2c: bcm2835: Add support for Repeated Start + Condition +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Documentation/i2c/i2c-protocol states that Combined transactions should +separate messages with a Start bit and end the whole transaction with a +Stop bit. This patch adds support for issuing only a Start between +messages instead of a Stop followed by a Start. + +This implementation differs from downstream i2c-bcm2708 in 2 respects: +- it uses an interrupt to detect that the transfer is active instead + of using polling. There is no interrupt for Transfer Active, but by + not prefilling the FIFO it's possible to use the TXW interrupt. +- when resetting/disabling the controller between transfers it writes + CLEAR to the control register instead of just zero. + Using just zero gave many errors. This might be the reason why + downstream had to disable this feature and make it available with a + module parameter. + +I have run thousands of transfers to a DS1307 (rtc), MMA8451 (accel) +and AT24C32 (eeprom) in parallel without problems. + +Signed-off-by: Noralf Trønnes +Acked-by: Eric Anholt +Signed-off-by: Wolfram Sang +--- + drivers/i2c/busses/i2c-bcm2835.c | 101 ++++++++++++++++++++++++--------------- + 1 file changed, 63 insertions(+), 38 deletions(-) + +diff --git a/drivers/i2c/busses/i2c-bcm2835.c b/drivers/i2c/busses/i2c-bcm2835.c +index 565ef69..241e08a 100644 +--- a/drivers/i2c/busses/i2c-bcm2835.c ++++ b/drivers/i2c/busses/i2c-bcm2835.c +@@ -63,6 +63,7 @@ struct bcm2835_i2c_dev { + struct i2c_adapter adapter; + struct completion completion; + struct i2c_msg *curr_msg; ++ int num_msgs; + u32 msg_err; + u8 *msg_buf; + size_t msg_buf_remaining; +@@ -110,6 +111,45 @@ static void bcm2835_drain_rxfifo(struct bcm2835_i2c_dev *i2c_dev) + } + + /* ++ * Repeated Start Condition (Sr) ++ * The BCM2835 ARM Peripherals datasheet mentions a way to trigger a Sr when it ++ * talks about reading from a slave with 10 bit address. This is achieved by ++ * issuing a write, poll the I2CS.TA flag and wait for it to be set, and then ++ * issue a read. ++ * A comment in https://github.com/raspberrypi/linux/issues/254 shows how the ++ * firmware actually does it using polling and says that it's a workaround for ++ * a problem in the state machine. ++ * It turns out that it is possible to use the TXW interrupt to know when the ++ * transfer is active, provided the FIFO has not been prefilled. ++ */ ++ ++static void bcm2835_i2c_start_transfer(struct bcm2835_i2c_dev *i2c_dev) ++{ ++ u32 c = BCM2835_I2C_C_ST | BCM2835_I2C_C_I2CEN; ++ struct i2c_msg *msg = i2c_dev->curr_msg; ++ bool last_msg = (i2c_dev->num_msgs == 1); ++ ++ if (!i2c_dev->num_msgs) ++ return; ++ ++ i2c_dev->num_msgs--; ++ i2c_dev->msg_buf = msg->buf; ++ i2c_dev->msg_buf_remaining = msg->len; ++ ++ if (msg->flags & I2C_M_RD) ++ c |= BCM2835_I2C_C_READ | BCM2835_I2C_C_INTR; ++ else ++ c |= BCM2835_I2C_C_INTT; ++ ++ if (last_msg) ++ c |= BCM2835_I2C_C_INTD; ++ ++ bcm2835_i2c_writel(i2c_dev, BCM2835_I2C_A, msg->addr); ++ bcm2835_i2c_writel(i2c_dev, BCM2835_I2C_DLEN, msg->len); ++ bcm2835_i2c_writel(i2c_dev, BCM2835_I2C_C, c); ++} ++ ++/* + * Note about I2C_C_CLEAR on error: + * The I2C_C_CLEAR on errors will take some time to resolve -- if you were in + * non-idle state and I2C_C_READ, it sets an abort_rx flag and runs through +@@ -151,6 +191,12 @@ static irqreturn_t bcm2835_i2c_isr(int this_irq, void *data) + } + + bcm2835_fill_txfifo(i2c_dev); ++ ++ if (i2c_dev->num_msgs && !i2c_dev->msg_buf_remaining) { ++ i2c_dev->curr_msg++; ++ bcm2835_i2c_start_transfer(i2c_dev); ++ } ++ + return IRQ_HANDLED; + } + +@@ -175,30 +221,25 @@ static irqreturn_t bcm2835_i2c_isr(int this_irq, void *data) + return IRQ_HANDLED; + } + +-static int bcm2835_i2c_xfer_msg(struct bcm2835_i2c_dev *i2c_dev, +- struct i2c_msg *msg) ++static int bcm2835_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[], ++ int num) + { +- u32 c; ++ struct bcm2835_i2c_dev *i2c_dev = i2c_get_adapdata(adap); + unsigned long time_left; ++ int i; + +- i2c_dev->curr_msg = msg; +- i2c_dev->msg_buf = msg->buf; +- i2c_dev->msg_buf_remaining = msg->len; +- reinit_completion(&i2c_dev->completion); +- +- bcm2835_i2c_writel(i2c_dev, BCM2835_I2C_C, BCM2835_I2C_C_CLEAR); ++ for (i = 0; i < (num - 1); i++) ++ if (msgs[i].flags & I2C_M_RD) { ++ dev_warn_once(i2c_dev->dev, ++ "only one read message supported, has to be last\n"); ++ return -EOPNOTSUPP; ++ } + +- if (msg->flags & I2C_M_RD) { +- c = BCM2835_I2C_C_READ | BCM2835_I2C_C_INTR; +- } else { +- c = BCM2835_I2C_C_INTT; +- bcm2835_fill_txfifo(i2c_dev); +- } +- c |= BCM2835_I2C_C_ST | BCM2835_I2C_C_INTD | BCM2835_I2C_C_I2CEN; ++ i2c_dev->curr_msg = msgs; ++ i2c_dev->num_msgs = num; ++ reinit_completion(&i2c_dev->completion); + +- bcm2835_i2c_writel(i2c_dev, BCM2835_I2C_A, msg->addr); +- bcm2835_i2c_writel(i2c_dev, BCM2835_I2C_DLEN, msg->len); +- bcm2835_i2c_writel(i2c_dev, BCM2835_I2C_C, c); ++ bcm2835_i2c_start_transfer(i2c_dev); + + time_left = wait_for_completion_timeout(&i2c_dev->completion, + BCM2835_I2C_TIMEOUT); +@@ -209,31 +250,15 @@ static int bcm2835_i2c_xfer_msg(struct bcm2835_i2c_dev *i2c_dev, + return -ETIMEDOUT; + } + +- if (likely(!i2c_dev->msg_err)) +- return 0; ++ if (!i2c_dev->msg_err) ++ return num; + + dev_dbg(i2c_dev->dev, "i2c transfer failed: %x\n", i2c_dev->msg_err); + + if (i2c_dev->msg_err & BCM2835_I2C_S_ERR) + return -EREMOTEIO; +- else +- return -EIO; +-} +- +-static int bcm2835_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[], +- int num) +-{ +- struct bcm2835_i2c_dev *i2c_dev = i2c_get_adapdata(adap); +- int i; +- int ret = 0; +- +- for (i = 0; i < num; i++) { +- ret = bcm2835_i2c_xfer_msg(i2c_dev, &msgs[i]); +- if (ret) +- break; +- } + +- return ret ?: i; ++ return -EIO; + } + + static u32 bcm2835_i2c_func(struct i2c_adapter *adap) +-- +2.9.3 + +From e13e19e12f66401ce1e21ab491715835852babe7 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= +Date: Mon, 3 Oct 2016 22:06:13 +0200 +Subject: [PATCH 31160/39886] i2c: bcm2835: Support i2c-dev ioctl I2C_TIMEOUT +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Use i2c_adapter->timeout for the completion timeout value. The core +default is 1 second. + +Signed-off-by: Noralf Trønnes +Reviewed-by: Eric Anholt +Signed-off-by: Wolfram Sang +--- + drivers/i2c/busses/i2c-bcm2835.c | 4 +--- + 1 file changed, 1 insertion(+), 3 deletions(-) + +diff --git a/drivers/i2c/busses/i2c-bcm2835.c b/drivers/i2c/busses/i2c-bcm2835.c +index 241e08a..d2085dd 100644 +--- a/drivers/i2c/busses/i2c-bcm2835.c ++++ b/drivers/i2c/busses/i2c-bcm2835.c +@@ -53,8 +53,6 @@ + #define BCM2835_I2C_CDIV_MIN 0x0002 + #define BCM2835_I2C_CDIV_MAX 0xFFFE + +-#define BCM2835_I2C_TIMEOUT (msecs_to_jiffies(1000)) +- + struct bcm2835_i2c_dev { + struct device *dev; + void __iomem *regs; +@@ -242,7 +240,7 @@ static int bcm2835_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[], + bcm2835_i2c_start_transfer(i2c_dev); + + time_left = wait_for_completion_timeout(&i2c_dev->completion, +- BCM2835_I2C_TIMEOUT); ++ adap->timeout); + if (!time_left) { + bcm2835_i2c_writel(i2c_dev, BCM2835_I2C_C, + BCM2835_I2C_C_CLEAR); +-- +2.9.3 + +From 9446f62e8e18057fceb179d947508df2f7253b26 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= +Date: Mon, 3 Oct 2016 22:06:14 +0200 +Subject: [PATCH 31161/39886] i2c: bcm2835: Add support for dynamic clock +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Support a dynamic clock by reading the frequency and setting the +divisor in the transfer function instead of during probe. + +Signed-off-by: Noralf Trønnes +Reviewed-by: Martin Sperl +Signed-off-by: Wolfram Sang +--- + drivers/i2c/busses/i2c-bcm2835.c | 51 +++++++++++++++++++++++++--------------- + 1 file changed, 32 insertions(+), 19 deletions(-) + +diff --git a/drivers/i2c/busses/i2c-bcm2835.c b/drivers/i2c/busses/i2c-bcm2835.c +index d2085dd..c3436f6 100644 +--- a/drivers/i2c/busses/i2c-bcm2835.c ++++ b/drivers/i2c/busses/i2c-bcm2835.c +@@ -58,6 +58,7 @@ struct bcm2835_i2c_dev { + void __iomem *regs; + struct clk *clk; + int irq; ++ u32 bus_clk_rate; + struct i2c_adapter adapter; + struct completion completion; + struct i2c_msg *curr_msg; +@@ -78,6 +79,30 @@ static inline u32 bcm2835_i2c_readl(struct bcm2835_i2c_dev *i2c_dev, u32 reg) + return readl(i2c_dev->regs + reg); + } + ++static int bcm2835_i2c_set_divider(struct bcm2835_i2c_dev *i2c_dev) ++{ ++ u32 divider; ++ ++ divider = DIV_ROUND_UP(clk_get_rate(i2c_dev->clk), ++ i2c_dev->bus_clk_rate); ++ /* ++ * Per the datasheet, the register is always interpreted as an even ++ * number, by rounding down. In other words, the LSB is ignored. So, ++ * if the LSB is set, increment the divider to avoid any issue. ++ */ ++ if (divider & 1) ++ divider++; ++ if ((divider < BCM2835_I2C_CDIV_MIN) || ++ (divider > BCM2835_I2C_CDIV_MAX)) { ++ dev_err_ratelimited(i2c_dev->dev, "Invalid clock-frequency\n"); ++ return -EINVAL; ++ } ++ ++ bcm2835_i2c_writel(i2c_dev, BCM2835_I2C_DIV, divider); ++ ++ return 0; ++} ++ + static void bcm2835_fill_txfifo(struct bcm2835_i2c_dev *i2c_dev) + { + u32 val; +@@ -224,7 +249,7 @@ static int bcm2835_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[], + { + struct bcm2835_i2c_dev *i2c_dev = i2c_get_adapdata(adap); + unsigned long time_left; +- int i; ++ int i, ret; + + for (i = 0; i < (num - 1); i++) + if (msgs[i].flags & I2C_M_RD) { +@@ -233,6 +258,10 @@ static int bcm2835_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[], + return -EOPNOTSUPP; + } + ++ ret = bcm2835_i2c_set_divider(i2c_dev); ++ if (ret) ++ return ret; ++ + i2c_dev->curr_msg = msgs; + i2c_dev->num_msgs = num; + reinit_completion(&i2c_dev->completion); +@@ -282,7 +311,6 @@ static int bcm2835_i2c_probe(struct platform_device *pdev) + { + struct bcm2835_i2c_dev *i2c_dev; + struct resource *mem, *irq; +- u32 bus_clk_rate, divider; + int ret; + struct i2c_adapter *adap; + +@@ -306,27 +334,12 @@ static int bcm2835_i2c_probe(struct platform_device *pdev) + } + + ret = of_property_read_u32(pdev->dev.of_node, "clock-frequency", +- &bus_clk_rate); ++ &i2c_dev->bus_clk_rate); + if (ret < 0) { + dev_warn(&pdev->dev, + "Could not read clock-frequency property\n"); +- bus_clk_rate = 100000; +- } +- +- divider = DIV_ROUND_UP(clk_get_rate(i2c_dev->clk), bus_clk_rate); +- /* +- * Per the datasheet, the register is always interpreted as an even +- * number, by rounding down. In other words, the LSB is ignored. So, +- * if the LSB is set, increment the divider to avoid any issue. +- */ +- if (divider & 1) +- divider++; +- if ((divider < BCM2835_I2C_CDIV_MIN) || +- (divider > BCM2835_I2C_CDIV_MAX)) { +- dev_err(&pdev->dev, "Invalid clock-frequency\n"); +- return -ENODEV; ++ i2c_dev->bus_clk_rate = 100000; + } +- bcm2835_i2c_writel(i2c_dev, BCM2835_I2C_DIV, divider); + + irq = platform_get_resource(pdev, IORESOURCE_IRQ, 0); + if (!irq) { +-- +2.9.3 + +From f2a46926aba1f0c33944901d2420a6a887455ddc Mon Sep 17 00:00:00 2001 +From: Boris Brezillon +Date: Tue, 22 Nov 2016 12:45:28 -0800 +Subject: [PATCH 08819/13183] clk: bcm2835: Fix ->fixed_divider of pllh_aux + +There is no fixed divider on pllh_aux. + +Signed-off-by: Boris Brezillon +Signed-off-by: Eric Anholt +Reviewed-by: Eric Anholt +Signed-off-by: Stephen Boyd +--- + drivers/clk/bcm/clk-bcm2835.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/clk/bcm/clk-bcm2835.c b/drivers/clk/bcm/clk-bcm2835.c +index 8c7763f..836d075 100644 +--- a/drivers/clk/bcm/clk-bcm2835.c ++++ b/drivers/clk/bcm/clk-bcm2835.c +@@ -1596,7 +1596,7 @@ static const struct bcm2835_clk_desc clk_desc_array[] = { + .a2w_reg = A2W_PLLH_AUX, + .load_mask = CM_PLLH_LOADAUX, + .hold_mask = 0, +- .fixed_divider = 10), ++ .fixed_divider = 1), + [BCM2835_PLLH_PIX] = REGISTER_PLL_DIV( + .name = "pllh_pix", + .source_pll = "pllh", +-- +2.9.3 + +commit 84c39b8b7d46883f7a7514c7d55909831aa846fd +Author: Arvind Yadav +Date: Wed Sep 21 23:03:57 2016 +0530 + + clocksource/drivers/bcm2835_timer: Unmap region obtained by of_iomap + + Free memory mapping, if bcm2835_timer_init is not successful. + + Signed-off-by: Arvind Yadav + Reviewed-by: Eric Anholt + Signed-off-by: Daniel Lezcano + +diff --git a/drivers/clocksource/bcm2835_timer.c b/drivers/clocksource/bcm2835_timer.c +index e71acf2..f2f29d2 100644 +--- a/drivers/clocksource/bcm2835_timer.c ++++ b/drivers/clocksource/bcm2835_timer.c +@@ -96,7 +96,7 @@ static int __init bcm2835_timer_init(struct device_node *node) + ret = of_property_read_u32(node, "clock-frequency", &freq); + if (ret) { + pr_err("Can't read clock-frequency"); +- return ret; ++ goto err_iounmap; + } + + system_clock = base + REG_COUNTER_LO; +@@ -108,13 +108,15 @@ static int __init bcm2835_timer_init(struct device_node *node) + irq = irq_of_parse_and_map(node, DEFAULT_TIMER); + if (irq <= 0) { + pr_err("Can't parse IRQ"); +- return -EINVAL; ++ ret = -EINVAL; ++ goto err_iounmap; + } + + timer = kzalloc(sizeof(*timer), GFP_KERNEL); + if (!timer) { + pr_err("Can't allocate timer struct\n"); +- return -ENOMEM; ++ ret = -ENOMEM; ++ goto err_iounmap; + } + + timer->control = base + REG_CONTROL; +@@ -133,7 +135,7 @@ static int __init bcm2835_timer_init(struct device_node *node) + ret = setup_irq(irq, &timer->act); + if (ret) { + pr_err("Can't set up timer IRQ\n"); +- return ret; ++ goto err_iounmap; + } + + clockevents_config_and_register(&timer->evt, freq, 0xf, 0xffffffff); +@@ -141,6 +143,10 @@ static int __init bcm2835_timer_init(struct device_node *node) + pr_info("bcm2835: system timer (irq = %d)\n", irq); + + return 0; ++ ++err_iounmap: ++ iounmap(base); ++ return ret; + } + CLOCKSOURCE_OF_DECLARE(bcm2835, "brcm,bcm2835-system-timer", + bcm2835_timer_init); +From 155e8b3b0ee320ae866b97dd31eba8a1f080a772 Mon Sep 17 00:00:00 2001 +From: Boris Brezillon +Date: Thu, 1 Dec 2016 22:00:19 +0100 +Subject: [PATCH 11733/13183] clk: bcm: Support rate change propagation on + bcm2835 clocks + +Some peripheral clocks, like the VEC (Video EnCoder) clock need to be set +to a precise rate (in our case 108MHz). With the current implementation, +where peripheral clocks are not allowed to forward rate change requests +to their parents, it is impossible to match this requirement unless the +bootloader has configured things correctly, or a specific rate has been +assigned through the DT (with the assigned-clk-rates property). + +Add a new field to struct bcm2835_clock_data to specify which parent +clocks accept rate change propagation, and support set rate propagation +in bcm2835_clock_determine_rate(). + +Signed-off-by: Boris Brezillon +Reviewed-by: Eric Anholt +Signed-off-by: Stephen Boyd +--- + drivers/clk/bcm/clk-bcm2835.c | 67 ++++++++++++++++++++++++++++++++++++++++--- + 1 file changed, 63 insertions(+), 4 deletions(-) + +diff --git a/drivers/clk/bcm/clk-bcm2835.c b/drivers/clk/bcm/clk-bcm2835.c +index 2acaa77..df96fe6 100644 +--- a/drivers/clk/bcm/clk-bcm2835.c ++++ b/drivers/clk/bcm/clk-bcm2835.c +@@ -436,6 +436,9 @@ struct bcm2835_clock_data { + const char *const *parents; + int num_mux_parents; + ++ /* Bitmap encoding which parents accept rate change propagation. */ ++ unsigned int set_rate_parent; ++ + u32 ctl_reg; + u32 div_reg; + +@@ -1017,10 +1020,60 @@ bcm2835_clk_is_pllc(struct clk_hw *hw) + return strncmp(clk_hw_get_name(hw), "pllc", 4) == 0; + } + ++static unsigned long bcm2835_clock_choose_div_and_prate(struct clk_hw *hw, ++ int parent_idx, ++ unsigned long rate, ++ u32 *div, ++ unsigned long *prate) ++{ ++ struct bcm2835_clock *clock = bcm2835_clock_from_hw(hw); ++ struct bcm2835_cprman *cprman = clock->cprman; ++ const struct bcm2835_clock_data *data = clock->data; ++ unsigned long best_rate; ++ u32 curdiv, mindiv, maxdiv; ++ struct clk_hw *parent; ++ ++ parent = clk_hw_get_parent_by_index(hw, parent_idx); ++ ++ if (!(BIT(parent_idx) & data->set_rate_parent)) { ++ *prate = clk_hw_get_rate(parent); ++ *div = bcm2835_clock_choose_div(hw, rate, *prate, true); ++ ++ return bcm2835_clock_rate_from_divisor(clock, *prate, ++ *div); ++ } ++ ++ if (data->frac_bits) ++ dev_warn(cprman->dev, ++ "frac bits are not used when propagating rate change"); ++ ++ /* clamp to min divider of 2 if we're dealing with a mash clock */ ++ mindiv = data->is_mash_clock ? 2 : 1; ++ maxdiv = BIT(data->int_bits) - 1; ++ ++ /* TODO: Be smart, and only test a subset of the available divisors. */ ++ for (curdiv = mindiv; curdiv <= maxdiv; curdiv++) { ++ unsigned long tmp_rate; ++ ++ tmp_rate = clk_hw_round_rate(parent, rate * curdiv); ++ tmp_rate /= curdiv; ++ if (curdiv == mindiv || ++ (tmp_rate > best_rate && tmp_rate <= rate)) ++ best_rate = tmp_rate; ++ ++ if (best_rate == rate) ++ break; ++ } ++ ++ *div = curdiv << CM_DIV_FRAC_BITS; ++ *prate = curdiv * best_rate; ++ ++ return best_rate; ++} ++ + static int bcm2835_clock_determine_rate(struct clk_hw *hw, + struct clk_rate_request *req) + { +- struct bcm2835_clock *clock = bcm2835_clock_from_hw(hw); + struct clk_hw *parent, *best_parent = NULL; + bool current_parent_is_pllc; + unsigned long rate, best_rate = 0; +@@ -1048,9 +1101,8 @@ static int bcm2835_clock_determine_rate(struct clk_hw *hw, + if (bcm2835_clk_is_pllc(parent) && !current_parent_is_pllc) + continue; + +- prate = clk_hw_get_rate(parent); +- div = bcm2835_clock_choose_div(hw, req->rate, prate, true); +- rate = bcm2835_clock_rate_from_divisor(clock, prate, div); ++ rate = bcm2835_clock_choose_div_and_prate(hw, i, req->rate, ++ &div, &prate); + if (rate > best_rate && rate <= req->rate) { + best_parent = parent; + best_prate = prate; +@@ -1262,6 +1314,13 @@ static struct clk_hw *bcm2835_register_clock(struct bcm2835_cprman *cprman, + init.name = data->name; + init.flags = data->flags | CLK_IGNORE_UNUSED; + ++ /* ++ * Pass the CLK_SET_RATE_PARENT flag if we are allowed to propagate ++ * rate changes on at least of the parents. ++ */ ++ if (data->set_rate_parent) ++ init.flags |= CLK_SET_RATE_PARENT; ++ + if (data->is_vpu_clock) { + init.ops = &bcm2835_vpu_clock_clk_ops; + } else { +-- +2.9.3 + +From d86d46af84855403c00018be1c3e7bc190f2a6cd Mon Sep 17 00:00:00 2001 +From: Boris Brezillon +Date: Thu, 1 Dec 2016 22:00:20 +0100 +Subject: [PATCH 11734/13183] clk: bcm: Allow rate change propagation to + PLLH_AUX on VEC clock + +The VEC clock requires needs to be set at exactly 108MHz. Allow rate +change propagation on PLLH_AUX to match this requirement wihtout +impacting other IPs (PLLH is currently only used by the HDMI encoder, +which cannot be enabled when the VEC encoder is enabled). + +Signed-off-by: Boris Brezillon +Reviewed-by: Eric Anholt +Signed-off-by: Stephen Boyd +--- + drivers/clk/bcm/clk-bcm2835.c | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +diff --git a/drivers/clk/bcm/clk-bcm2835.c b/drivers/clk/bcm/clk-bcm2835.c +index df96fe6..eaf82f4 100644 +--- a/drivers/clk/bcm/clk-bcm2835.c ++++ b/drivers/clk/bcm/clk-bcm2835.c +@@ -1861,7 +1861,12 @@ static const struct bcm2835_clk_desc clk_desc_array[] = { + .ctl_reg = CM_VECCTL, + .div_reg = CM_VECDIV, + .int_bits = 4, +- .frac_bits = 0), ++ .frac_bits = 0, ++ /* ++ * Allow rate change propagation only on PLLH_AUX which is ++ * assigned index 7 in the parent array. ++ */ ++ .set_rate_parent = BIT(7)), + + /* dsi clocks */ + [BCM2835_CLOCK_DSI0E] = REGISTER_PER_CLK( +-- +2.9.3 + +From 2aab7a2055a1705c9e30920d95a596226999eb21 Mon Sep 17 00:00:00 2001 +From: Boris Brezillon +Date: Mon, 12 Dec 2016 09:00:53 +0100 +Subject: [PATCH 12092/13183] clk: bcm: Fix 'maybe-uninitialized' warning in + bcm2835_clock_choose_div_and_prate() + +best_rate is reported as potentially uninitialized by gcc. + +Signed-off-by: Boris Brezillon +Fixes: 155e8b3b0ee3 ("clk: bcm: Support rate change propagation on bcm2835 clocks") +Reported-by: Stephen Rothwell +Reviewed-by: Eric Anholt +Signed-off-by: Stephen Boyd +--- + drivers/clk/bcm/clk-bcm2835.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/clk/bcm/clk-bcm2835.c b/drivers/clk/bcm/clk-bcm2835.c +index eaf82f4..0d14409 100644 +--- a/drivers/clk/bcm/clk-bcm2835.c ++++ b/drivers/clk/bcm/clk-bcm2835.c +@@ -1029,7 +1029,7 @@ static unsigned long bcm2835_clock_choose_div_and_prate(struct clk_hw *hw, + struct bcm2835_clock *clock = bcm2835_clock_from_hw(hw); + struct bcm2835_cprman *cprman = clock->cprman; + const struct bcm2835_clock_data *data = clock->data; +- unsigned long best_rate; ++ unsigned long best_rate = 0; + u32 curdiv, mindiv, maxdiv; + struct clk_hw *parent; + +-- +2.9.3 + diff --git a/bcm283x-mmc-imp-speed.patch b/bcm283x-mmc-imp-speed.patch new file mode 100644 index 000000000..d50f0a33c --- /dev/null +++ b/bcm283x-mmc-imp-speed.patch @@ -0,0 +1,176 @@ +From d11469e272ed1c28030d2f36ad6ac5a364a633d8 Mon Sep 17 00:00:00 2001 +From: Scott Branden +Date: Tue, 1 Nov 2016 09:37:57 -0700 +Subject: [PATCH 1/3] mmc: sdhci-iproc: support standard byte register accesses + +Add bytewise register accesses support for newer versions of IPROC +SDHCI controllers. +Previous sdhci-iproc versions of SDIO controllers +(such as Raspberry Pi and Cygnus) only allowed for 32-bit register +accesses. + +Signed-off-by: Srinath Mannam +Signed-off-by: Scott Branden +Acked-by: Adrian Hunter +Signed-off-by: Ulf Hansson +--- + drivers/mmc/host/sdhci-iproc.c | 35 +++++++++++++++++++++++++++++++++-- + 1 file changed, 33 insertions(+), 2 deletions(-) + +diff --git a/drivers/mmc/host/sdhci-iproc.c b/drivers/mmc/host/sdhci-iproc.c +index 7262466..d7046d6 100644 +--- a/drivers/mmc/host/sdhci-iproc.c ++++ b/drivers/mmc/host/sdhci-iproc.c +@@ -143,6 +143,14 @@ static void sdhci_iproc_writeb(struct sdhci_host *host, u8 val, int reg) + } + + static const struct sdhci_ops sdhci_iproc_ops = { ++ .set_clock = sdhci_set_clock, ++ .get_max_clock = sdhci_pltfm_clk_get_max_clock, ++ .set_bus_width = sdhci_set_bus_width, ++ .reset = sdhci_reset, ++ .set_uhs_signaling = sdhci_set_uhs_signaling, ++}; ++ ++static const struct sdhci_ops sdhci_iproc_32only_ops = { + .read_l = sdhci_iproc_readl, + .read_w = sdhci_iproc_readw, + .read_b = sdhci_iproc_readb, +@@ -156,6 +164,28 @@ static const struct sdhci_ops sdhci_iproc_ops = { + .set_uhs_signaling = sdhci_set_uhs_signaling, + }; + ++static const struct sdhci_pltfm_data sdhci_iproc_cygnus_pltfm_data = { ++ .quirks = SDHCI_QUIRK_DATA_TIMEOUT_USES_SDCLK, ++ .quirks2 = SDHCI_QUIRK2_ACMD23_BROKEN, ++ .ops = &sdhci_iproc_32only_ops, ++}; ++ ++static const struct sdhci_iproc_data iproc_cygnus_data = { ++ .pdata = &sdhci_iproc_cygnus_pltfm_data, ++ .caps = ((0x1 << SDHCI_MAX_BLOCK_SHIFT) ++ & SDHCI_MAX_BLOCK_MASK) | ++ SDHCI_CAN_VDD_330 | ++ SDHCI_CAN_VDD_180 | ++ SDHCI_CAN_DO_SUSPEND | ++ SDHCI_CAN_DO_HISPD | ++ SDHCI_CAN_DO_ADMA2 | ++ SDHCI_CAN_DO_SDMA, ++ .caps1 = SDHCI_DRIVER_TYPE_C | ++ SDHCI_DRIVER_TYPE_D | ++ SDHCI_SUPPORT_DDR50, ++ .mmc_caps = MMC_CAP_1_8V_DDR, ++}; ++ + static const struct sdhci_pltfm_data sdhci_iproc_pltfm_data = { + .quirks = SDHCI_QUIRK_DATA_TIMEOUT_USES_SDCLK, + .quirks2 = SDHCI_QUIRK2_ACMD23_BROKEN, +@@ -182,7 +212,7 @@ static const struct sdhci_pltfm_data sdhci_bcm2835_pltfm_data = { + .quirks = SDHCI_QUIRK_BROKEN_CARD_DETECTION | + SDHCI_QUIRK_DATA_TIMEOUT_USES_SDCLK | + SDHCI_QUIRK_MISSING_CAPS, +- .ops = &sdhci_iproc_ops, ++ .ops = &sdhci_iproc_32only_ops, + }; + + static const struct sdhci_iproc_data bcm2835_data = { +@@ -194,7 +224,8 @@ static const struct sdhci_iproc_data bcm2835_data = { + + static const struct of_device_id sdhci_iproc_of_match[] = { + { .compatible = "brcm,bcm2835-sdhci", .data = &bcm2835_data }, +- { .compatible = "brcm,sdhci-iproc-cygnus", .data = &iproc_data }, ++ { .compatible = "brcm,sdhci-iproc-cygnus", .data = &iproc_cygnus_data}, ++ { .compatible = "brcm,sdhci-iproc", .data = &iproc_data }, + { } + }; + MODULE_DEVICE_TABLE(of, sdhci_iproc_of_match); +-- +2.9.3 + +From 3dcb11900d7cde1fd378f154137272f99253a60c Mon Sep 17 00:00:00 2001 +From: Stefan Wahren +Date: Fri, 30 Dec 2016 15:24:32 +0000 +Subject: [PATCH 2/3] mmc: sdhci-iproc: Apply caps from bcm2835-mmc driver + +Since the mmc module on bcm2835 neither provide a capabilities register nor +free documentation we must rely on the downstream implementation [1]. + +So enable the following capabilities for bcm2835: + +MMC_CAP_MMC_HIGHSPEED +MMC_CAP_SD_HIGHSPEED +MMC_CAP_DRIVER_TYPE_A +MMC_CAP_DRIVER_TYPE_C + +[1] - https://github.com/raspberrypi/linux/blob/rpi-4.4.y/drivers/mmc/host/bcm2835-mmc.c + +Signed-off-by: Stefan Wahren +Reviewed-by: Eric Anholt +Acked-by: Adrian Hunter +--- + drivers/mmc/host/sdhci-iproc.c | 9 ++++++--- + 1 file changed, 6 insertions(+), 3 deletions(-) + +diff --git a/drivers/mmc/host/sdhci-iproc.c b/drivers/mmc/host/sdhci-iproc.c +index d7046d6..30b3fdf 100644 +--- a/drivers/mmc/host/sdhci-iproc.c ++++ b/drivers/mmc/host/sdhci-iproc.c +@@ -211,14 +211,17 @@ static const struct sdhci_iproc_data iproc_data = { + static const struct sdhci_pltfm_data sdhci_bcm2835_pltfm_data = { + .quirks = SDHCI_QUIRK_BROKEN_CARD_DETECTION | + SDHCI_QUIRK_DATA_TIMEOUT_USES_SDCLK | +- SDHCI_QUIRK_MISSING_CAPS, ++ SDHCI_QUIRK_MISSING_CAPS | ++ SDHCI_QUIRK_NO_HISPD_BIT, + .ops = &sdhci_iproc_32only_ops, + }; + + static const struct sdhci_iproc_data bcm2835_data = { + .pdata = &sdhci_bcm2835_pltfm_data, +- .caps = SDHCI_CAN_VDD_330, +- .caps1 = 0x00000000, ++ .caps = SDHCI_CAN_VDD_330 | ++ SDHCI_CAN_DO_HISPD, ++ .caps1 = SDHCI_DRIVER_TYPE_A | ++ SDHCI_DRIVER_TYPE_C, + .mmc_caps = 0x00000000, + }; + +-- +2.9.3 + +From c43d8ee65e20df0672bd27238b11475dc3e8d447 Mon Sep 17 00:00:00 2001 +From: Stefan Wahren +Date: Fri, 30 Dec 2016 15:24:33 +0000 +Subject: [PATCH 3/3] mmc: sdhci-iproc: Increase max_blk_size for bcm2835 + +According to the BCM2835 datasheet the maximum block size for the +eMMC module is restricted to the internal data FIFO which is 1024 byte. +But this is still an improvement to the default of 512 byte. + +Signed-off-by: Stefan Wahren +Reviewed-by: Eric Anholt +Acked-by: Scott Branden +Acked-by: Adrian Hunter +--- + drivers/mmc/host/sdhci-iproc.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/drivers/mmc/host/sdhci-iproc.c b/drivers/mmc/host/sdhci-iproc.c +index 30b3fdf..3275d49 100644 +--- a/drivers/mmc/host/sdhci-iproc.c ++++ b/drivers/mmc/host/sdhci-iproc.c +@@ -218,7 +218,9 @@ static const struct sdhci_pltfm_data sdhci_bcm2835_pltfm_data = { + + static const struct sdhci_iproc_data bcm2835_data = { + .pdata = &sdhci_bcm2835_pltfm_data, +- .caps = SDHCI_CAN_VDD_330 | ++ .caps = ((0x1 << SDHCI_MAX_BLOCK_SHIFT) ++ & SDHCI_MAX_BLOCK_MASK) | ++ SDHCI_CAN_VDD_330 | + SDHCI_CAN_DO_HISPD, + .caps1 = SDHCI_DRIVER_TYPE_A | + SDHCI_DRIVER_TYPE_C, +-- +2.9.3 + diff --git a/bcm283x-vc4-fixes.patch b/bcm283x-vc4-fixes.patch index 3f77b7485..d42ceb62a 100644 --- a/bcm283x-vc4-fixes.patch +++ b/bcm283x-vc4-fixes.patch @@ -1,642 +1,3 @@ -From 9db79f3a51c97e0cfcde1b25299e8db9ee3d64ab Mon Sep 17 00:00:00 2001 -From: Eric Anholt -Date: Wed, 14 Sep 2016 19:21:29 +0100 -Subject: [PATCH 1/4] drm/vc4: Fall back to using an EDID probe in the absence - of a GPIO. - -On Pi0/1/2, we use an external GPIO line for hotplug detection, since -the HDMI_HOTPLUG register isn't connected to anything. However, with -the Pi3 the HPD GPIO line has moved off to a GPIO expander that will -be tricky to get to (the firmware is constantly polling the expander -using i2c0, so we'll need to coordinate with it). - -As a stop-gap, if we don't have a GPIO line, use an EDID probe to -detect connection. Fixes HDMI display on the pi3. - -Signed-off-by: Eric Anholt ---- - drivers/gpu/drm/vc4/vc4_hdmi.c | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c -index 4452f36..5adc0c7 100644 ---- a/drivers/gpu/drm/vc4/vc4_hdmi.c -+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c -@@ -174,6 +174,9 @@ vc4_hdmi_connector_detect(struct drm_connector *connector, bool force) - return connector_status_disconnected; - } - -+ if (drm_probe_ddc(vc4->hdmi->ddc)) -+ return connector_status_connected; -+ - if (HDMI_READ(VC4_HDMI_HOTPLUG) & VC4_HDMI_HOTPLUG_CONNECTED) - return connector_status_connected; - else --- -2.9.3 - -From 7b4c39f34fbbdfe0cd0e626686ee01ab96601598 Mon Sep 17 00:00:00 2001 -From: Eric Anholt -Date: Fri, 16 Sep 2016 10:59:45 +0100 -Subject: [PATCH 2/4] drm/vc4: Enable limited range RGB output on HDMI with CEA - modes. - -Fixes broken grayscale ramps on many HDMI monitors, where large areas -at the ends of the ramp would all appear as black or white. - -Signed-off-by: Eric Anholt ---- - drivers/gpu/drm/vc4/vc4_hdmi.c | 31 +++++++++++++++++++++++++++++-- - drivers/gpu/drm/vc4/vc4_regs.h | 9 ++++++++- - 2 files changed, 37 insertions(+), 3 deletions(-) - -diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c -index 5adc0c7..5df4e74 100644 ---- a/drivers/gpu/drm/vc4/vc4_hdmi.c -+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c -@@ -276,6 +276,7 @@ static void vc4_hdmi_encoder_mode_set(struct drm_encoder *encoder, - struct drm_display_mode *unadjusted_mode, - struct drm_display_mode *mode) - { -+ struct vc4_hdmi_encoder *vc4_encoder = to_vc4_hdmi_encoder(encoder); - struct drm_device *dev = encoder->dev; - struct vc4_dev *vc4 = to_vc4_dev(dev); - bool debug_dump_regs = false; -@@ -291,6 +292,7 @@ static void vc4_hdmi_encoder_mode_set(struct drm_encoder *encoder, - u32 vertb = (VC4_SET_FIELD(0, VC4_HDMI_VERTB_VSPO) | - VC4_SET_FIELD(mode->vtotal - mode->vsync_end, - VC4_HDMI_VERTB_VBP)); -+ u32 csc_ctl; - - if (debug_dump_regs) { - DRM_INFO("HDMI regs before:\n"); -@@ -329,9 +331,34 @@ static void vc4_hdmi_encoder_mode_set(struct drm_encoder *encoder, - (vsync_pos ? 0 : VC4_HD_VID_CTL_VSYNC_LOW) | - (hsync_pos ? 0 : VC4_HD_VID_CTL_HSYNC_LOW)); - -+ csc_ctl = VC4_SET_FIELD(VC4_HD_CSC_CTL_ORDER_BGR, -+ VC4_HD_CSC_CTL_ORDER); -+ -+ if (vc4_encoder->hdmi_monitor && drm_match_cea_mode(mode) > 1) { -+ /* CEA VICs other than #1 requre limited range RGB -+ * output. Apply a colorspace conversion to squash -+ * 0-255 down to 16-235. The matrix here is: -+ * -+ * [ 0 0 0.8594 16] -+ * [ 0 0.8594 0 16] -+ * [ 0.8594 0 0 16] -+ * [ 0 0 0 1] -+ */ -+ csc_ctl |= VC4_HD_CSC_CTL_ENABLE; -+ csc_ctl |= VC4_HD_CSC_CTL_RGB2YCC; -+ csc_ctl |= VC4_SET_FIELD(VC4_HD_CSC_CTL_MODE_CUSTOM, -+ VC4_HD_CSC_CTL_MODE); -+ -+ HD_WRITE(VC4_HD_CSC_12_11, (0x000 << 16) | 0x000); -+ HD_WRITE(VC4_HD_CSC_14_13, (0x100 << 16) | 0x6e0); -+ HD_WRITE(VC4_HD_CSC_22_21, (0x6e0 << 16) | 0x000); -+ HD_WRITE(VC4_HD_CSC_24_23, (0x100 << 16) | 0x000); -+ HD_WRITE(VC4_HD_CSC_32_31, (0x000 << 16) | 0x6e0); -+ HD_WRITE(VC4_HD_CSC_34_33, (0x100 << 16) | 0x000); -+ } -+ - /* The RGB order applies even when CSC is disabled. */ -- HD_WRITE(VC4_HD_CSC_CTL, VC4_SET_FIELD(VC4_HD_CSC_CTL_ORDER_BGR, -- VC4_HD_CSC_CTL_ORDER)); -+ HD_WRITE(VC4_HD_CSC_CTL, csc_ctl); - - HDMI_WRITE(VC4_HDMI_FIFO_CTL, VC4_HDMI_FIFO_CTL_MASTER_SLAVE_N); - -diff --git a/drivers/gpu/drm/vc4/vc4_regs.h b/drivers/gpu/drm/vc4/vc4_regs.h -index 160942a..9ecd6ff 100644 ---- a/drivers/gpu/drm/vc4/vc4_regs.h -+++ b/drivers/gpu/drm/vc4/vc4_regs.h -@@ -528,10 +528,17 @@ - # define VC4_HD_CSC_CTL_MODE_SHIFT 2 - # define VC4_HD_CSC_CTL_MODE_RGB_TO_SD_YPRPB 0 - # define VC4_HD_CSC_CTL_MODE_RGB_TO_HD_YPRPB 1 --# define VC4_HD_CSC_CTL_MODE_CUSTOM 2 -+# define VC4_HD_CSC_CTL_MODE_CUSTOM 3 - # define VC4_HD_CSC_CTL_RGB2YCC BIT(1) - # define VC4_HD_CSC_CTL_ENABLE BIT(0) - -+#define VC4_HD_CSC_12_11 0x044 -+#define VC4_HD_CSC_14_13 0x048 -+#define VC4_HD_CSC_22_21 0x04c -+#define VC4_HD_CSC_24_23 0x050 -+#define VC4_HD_CSC_32_31 0x054 -+#define VC4_HD_CSC_34_33 0x058 -+ - #define VC4_HD_FRAME_COUNT 0x068 - - /* HVS display list information. */ --- -2.9.3 - -From f379f5432e4b74e3d1d894ce2fefbe1b8a3c24fd Mon Sep 17 00:00:00 2001 -From: Eric Anholt -Date: Wed, 28 Sep 2016 19:20:44 -0700 -Subject: [PATCH 4/4] drm/vc4: Increase timeout for HDMI_SCHEDULER_CONTROL - changes. - -Fixes occasional debug spew at boot when connected directly through -HDMI, and probably confusing the HDMI state machine when we go trying -to poke registers for the enable sequence too soon. - -Signed-off-by: Eric Anholt ---- - drivers/gpu/drm/vc4/vc4_hdmi.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c -index 5df4e74..9a6883d 100644 ---- a/drivers/gpu/drm/vc4/vc4_hdmi.c -+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c -@@ -399,7 +399,7 @@ static void vc4_hdmi_encoder_enable(struct drm_encoder *encoder) - VC4_HDMI_SCHEDULER_CONTROL_MODE_HDMI); - - ret = wait_for(HDMI_READ(VC4_HDMI_SCHEDULER_CONTROL) & -- VC4_HDMI_SCHEDULER_CONTROL_HDMI_ACTIVE, 1); -+ VC4_HDMI_SCHEDULER_CONTROL_HDMI_ACTIVE, 1000); - WARN_ONCE(ret, "Timeout waiting for " - "VC4_HDMI_SCHEDULER_CONTROL_HDMI_ACTIVE\n"); - } else { -@@ -411,7 +411,7 @@ static void vc4_hdmi_encoder_enable(struct drm_encoder *encoder) - ~VC4_HDMI_SCHEDULER_CONTROL_MODE_HDMI); - - ret = wait_for(!(HDMI_READ(VC4_HDMI_SCHEDULER_CONTROL) & -- VC4_HDMI_SCHEDULER_CONTROL_HDMI_ACTIVE), 1); -+ VC4_HDMI_SCHEDULER_CONTROL_HDMI_ACTIVE), 1000); - WARN_ONCE(ret, "Timeout waiting for " - "!VC4_HDMI_SCHEDULER_CONTROL_HDMI_ACTIVE\n"); - } --- -2.9.3 - -From bd712d14886c37eb804036b2ac3036df79d33476 Mon Sep 17 00:00:00 2001 -From: Eric Anholt -Date: Thu, 29 Sep 2016 15:34:43 -0700 -Subject: [PATCH] drm/vc4: Set up the AVI and SPD infoframes. - -Fixes a purple bar on the left side of the screen with my Dell -2408WFP. It will also be required for supporting the double-clocked -video modes. - -Signed-off-by: Eric Anholt ---- - drivers/gpu/drm/vc4/vc4_hdmi.c | 136 +++++++++++++++++++++++++++++++++++++++-- - drivers/gpu/drm/vc4/vc4_regs.h | 5 ++ - 2 files changed, 136 insertions(+), 5 deletions(-) - -diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c -index 9a6883d..f722334 100644 ---- a/drivers/gpu/drm/vc4/vc4_hdmi.c -+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c -@@ -62,6 +62,8 @@ struct vc4_hdmi { - struct vc4_hdmi_encoder { - struct vc4_encoder base; - bool hdmi_monitor; -+ bool limited_rgb_range; -+ bool rgb_range_selectable; - }; - - static inline struct vc4_hdmi_encoder * -@@ -205,6 +207,12 @@ static int vc4_hdmi_connector_get_modes(struct drm_connector *connector) - return -ENODEV; - - vc4_encoder->hdmi_monitor = drm_detect_hdmi_monitor(edid); -+ -+ if (edid && edid->input & DRM_EDID_INPUT_DIGITAL) { -+ vc4_encoder->rgb_range_selectable = -+ drm_rgb_quant_range_selectable(edid); -+ } -+ - drm_mode_connector_update_edid_property(connector, edid); - ret = drm_add_edid_modes(connector, edid); - -@@ -272,6 +280,117 @@ static const struct drm_encoder_funcs vc4_hdmi_encoder_funcs = { - .destroy = vc4_hdmi_encoder_destroy, - }; - -+static int vc4_hdmi_stop_packet(struct drm_encoder *encoder, -+ enum hdmi_infoframe_type type) -+{ -+ struct drm_device *dev = encoder->dev; -+ struct vc4_dev *vc4 = to_vc4_dev(dev); -+ u32 packet_id = type - 0x80; -+ -+ HDMI_WRITE(VC4_HDMI_RAM_PACKET_CONFIG, -+ HDMI_READ(VC4_HDMI_RAM_PACKET_CONFIG) & ~BIT(packet_id)); -+ -+ return wait_for(!(HDMI_READ(VC4_HDMI_RAM_PACKET_STATUS) & -+ BIT(packet_id)), 100); -+} -+ -+static void vc4_hdmi_write_infoframe(struct drm_encoder *encoder, -+ union hdmi_infoframe *frame) -+{ -+ struct drm_device *dev = encoder->dev; -+ struct vc4_dev *vc4 = to_vc4_dev(dev); -+ u32 packet_id = frame->any.type - 0x80; -+ u32 packet_reg = VC4_HDMI_GCP_0 + VC4_HDMI_PACKET_STRIDE * packet_id; -+ uint8_t buffer[VC4_HDMI_PACKET_STRIDE]; -+ ssize_t len, i; -+ int ret; -+ -+ WARN_ONCE(!(HDMI_READ(VC4_HDMI_RAM_PACKET_CONFIG) & -+ VC4_HDMI_RAM_PACKET_ENABLE), -+ "Packet RAM has to be on to store the packet."); -+ -+ len = hdmi_infoframe_pack(frame, buffer, sizeof(buffer)); -+ if (len < 0) -+ return; -+ -+ ret = vc4_hdmi_stop_packet(encoder, frame->any.type); -+ if (ret) { -+ DRM_ERROR("Failed to wait for infoframe to go idle: %d\n", ret); -+ return; -+ } -+ -+ for (i = 0; i < len; i += 7) { -+ HDMI_WRITE(packet_reg, -+ buffer[i + 0] << 0 | -+ buffer[i + 1] << 8 | -+ buffer[i + 2] << 16); -+ packet_reg += 4; -+ -+ HDMI_WRITE(packet_reg, -+ buffer[i + 3] << 0 | -+ buffer[i + 4] << 8 | -+ buffer[i + 5] << 16 | -+ buffer[i + 6] << 24); -+ packet_reg += 4; -+ } -+ -+ HDMI_WRITE(VC4_HDMI_RAM_PACKET_CONFIG, -+ HDMI_READ(VC4_HDMI_RAM_PACKET_CONFIG) | BIT(packet_id)); -+ ret = wait_for((HDMI_READ(VC4_HDMI_RAM_PACKET_STATUS) & -+ BIT(packet_id)), 100); -+ if (ret) -+ DRM_ERROR("Failed to wait for infoframe to start: %d\n", ret); -+} -+ -+static void vc4_hdmi_set_avi_infoframe(struct drm_encoder *encoder) -+{ -+ struct vc4_hdmi_encoder *vc4_encoder = to_vc4_hdmi_encoder(encoder); -+ struct drm_crtc *crtc = encoder->crtc; -+ const struct drm_display_mode *mode = &crtc->state->adjusted_mode; -+ union hdmi_infoframe frame; -+ int ret; -+ -+ ret = drm_hdmi_avi_infoframe_from_display_mode(&frame.avi, mode); -+ if (ret < 0) { -+ DRM_ERROR("couldn't fill AVI infoframe\n"); -+ return; -+ } -+ -+ if (vc4_encoder->rgb_range_selectable) { -+ if (vc4_encoder->limited_rgb_range) { -+ frame.avi.quantization_range = -+ HDMI_QUANTIZATION_RANGE_LIMITED; -+ } else { -+ frame.avi.quantization_range = -+ HDMI_QUANTIZATION_RANGE_FULL; -+ } -+ } -+ -+ vc4_hdmi_write_infoframe(encoder, &frame); -+} -+ -+static void vc4_hdmi_set_spd_infoframe(struct drm_encoder *encoder) -+{ -+ union hdmi_infoframe frame; -+ int ret; -+ -+ ret = hdmi_spd_infoframe_init(&frame.spd, "Broadcom", "Videocore"); -+ if (ret < 0) { -+ DRM_ERROR("couldn't fill SPD infoframe\n"); -+ return; -+ } -+ -+ frame.spd.sdi = HDMI_SPD_SDI_PC; -+ -+ vc4_hdmi_write_infoframe(encoder, &frame); -+} -+ -+static void vc4_hdmi_set_infoframes(struct drm_encoder *encoder) -+{ -+ vc4_hdmi_set_avi_infoframe(encoder); -+ vc4_hdmi_set_spd_infoframe(encoder); -+} -+ - static void vc4_hdmi_encoder_mode_set(struct drm_encoder *encoder, - struct drm_display_mode *unadjusted_mode, - struct drm_display_mode *mode) -@@ -336,8 +455,9 @@ static void vc4_hdmi_encoder_mode_set(struct drm_encoder *encoder, - - if (vc4_encoder->hdmi_monitor && drm_match_cea_mode(mode) > 1) { - /* CEA VICs other than #1 requre limited range RGB -- * output. Apply a colorspace conversion to squash -- * 0-255 down to 16-235. The matrix here is: -+ * output unless overridden by an AVI infoframe. -+ * Apply a colorspace conversion to squash 0-255 down -+ * to 16-235. The matrix here is: - * - * [ 0 0 0.8594 16] - * [ 0 0.8594 0 16] -@@ -355,6 +475,9 @@ static void vc4_hdmi_encoder_mode_set(struct drm_encoder *encoder, - HD_WRITE(VC4_HD_CSC_24_23, (0x100 << 16) | 0x000); - HD_WRITE(VC4_HD_CSC_32_31, (0x000 << 16) | 0x6e0); - HD_WRITE(VC4_HD_CSC_34_33, (0x100 << 16) | 0x000); -+ vc4_encoder->limited_rgb_range = true; -+ } else { -+ vc4_encoder->limited_rgb_range = false; - } - - /* The RGB order applies even when CSC is disabled. */ -@@ -373,6 +496,8 @@ static void vc4_hdmi_encoder_disable(struct drm_encoder *encoder) - struct drm_device *dev = encoder->dev; - struct vc4_dev *vc4 = to_vc4_dev(dev); - -+ HDMI_WRITE(VC4_HDMI_RAM_PACKET_CONFIG, 0); -+ - HDMI_WRITE(VC4_HDMI_TX_PHY_RESET_CTL, 0xf << 16); - HD_WRITE(VC4_HD_VID_CTL, - HD_READ(VC4_HD_VID_CTL) & ~VC4_HD_VID_CTL_ENABLE); -@@ -425,9 +550,10 @@ static void vc4_hdmi_encoder_enable(struct drm_encoder *encoder) - HDMI_READ(VC4_HDMI_SCHEDULER_CONTROL) | - VC4_HDMI_SCHEDULER_CONTROL_VERT_ALWAYS_KEEPOUT); - -- /* XXX: Set HDMI_RAM_PACKET_CONFIG (1 << 16) and set -- * up the infoframe. -- */ -+ HDMI_WRITE(VC4_HDMI_RAM_PACKET_CONFIG, -+ VC4_HDMI_RAM_PACKET_ENABLE); -+ -+ vc4_hdmi_set_infoframes(encoder); - - drift = HDMI_READ(VC4_HDMI_FIFO_CTL); - drift &= VC4_HDMI_FIFO_VALID_WRITE_MASK; -diff --git a/drivers/gpu/drm/vc4/vc4_regs.h b/drivers/gpu/drm/vc4/vc4_regs.h -index 9ecd6ff..a4b5370 100644 ---- a/drivers/gpu/drm/vc4/vc4_regs.h -+++ b/drivers/gpu/drm/vc4/vc4_regs.h -@@ -438,6 +438,8 @@ - #define VC4_HDMI_RAM_PACKET_CONFIG 0x0a0 - # define VC4_HDMI_RAM_PACKET_ENABLE BIT(16) - -+#define VC4_HDMI_RAM_PACKET_STATUS 0x0a4 -+ - #define VC4_HDMI_HORZA 0x0c4 - # define VC4_HDMI_HORZA_VPOS BIT(14) - # define VC4_HDMI_HORZA_HPOS BIT(13) -@@ -499,6 +501,9 @@ - - #define VC4_HDMI_TX_PHY_RESET_CTL 0x2c0 - -+#define VC4_HDMI_GCP_0 0x400 -+#define VC4_HDMI_PACKET_STRIDE 0x24 -+ - #define VC4_HD_M_CTL 0x00c - # define VC4_HD_M_REGISTER_FILE_STANDBY (3 << 6) - # define VC4_HD_M_RAM_STANDBY (3 << 4) --- -2.9.3 - -From c4e634ce412d97f0e61223b2a5b3f8f9600cd4dc Mon Sep 17 00:00:00 2001 -From: Eric Anholt -Date: Fri, 30 Sep 2016 10:07:27 -0700 -Subject: clk: bcm2835: Clamp the PLL's requested rate to the hardware limits. - -Fixes setting low-resolution video modes on HDMI. Now the PLLH_PIX -divider adjusts itself until the PLLH is within bounds. - -Signed-off-by: Eric Anholt -Signed-off-by: Stephen Boyd ---- - drivers/clk/bcm/clk-bcm2835.c | 11 ++++------- - 1 file changed, 4 insertions(+), 7 deletions(-) - -diff --git a/drivers/clk/bcm/clk-bcm2835.c b/drivers/clk/bcm/clk-bcm2835.c -index b68bf57..8c7763f 100644 ---- a/drivers/clk/bcm/clk-bcm2835.c -+++ b/drivers/clk/bcm/clk-bcm2835.c -@@ -502,8 +502,12 @@ static long bcm2835_pll_rate_from_divisors(unsigned long parent_rate, - static long bcm2835_pll_round_rate(struct clk_hw *hw, unsigned long rate, - unsigned long *parent_rate) - { -+ struct bcm2835_pll *pll = container_of(hw, struct bcm2835_pll, hw); -+ const struct bcm2835_pll_data *data = pll->data; - u32 ndiv, fdiv; - -+ rate = clamp(rate, data->min_rate, data->max_rate); -+ - bcm2835_pll_choose_ndiv_and_fdiv(rate, *parent_rate, &ndiv, &fdiv); - - return bcm2835_pll_rate_from_divisors(*parent_rate, ndiv, fdiv, 1); -@@ -608,13 +612,6 @@ static int bcm2835_pll_set_rate(struct clk_hw *hw, - u32 ana[4]; - int i; - -- if (rate < data->min_rate || rate > data->max_rate) { -- dev_err(cprman->dev, "%s: rate out of spec: %lu vs (%lu, %lu)\n", -- clk_hw_get_name(hw), rate, -- data->min_rate, data->max_rate); -- return -EINVAL; -- } -- - if (rate > data->max_fb_rate) { - use_fb_prediv = true; - rate /= 2; --- -cgit v0.12 - -From e69fdcca836f0b81a2260b69429c8622a80ea891 Mon Sep 17 00:00:00 2001 -From: Eric Anholt -Date: Wed, 1 Jun 2016 12:05:33 -0700 -Subject: clk: bcm2835: Mark the VPU clock as critical - -The VPU clock is also the clock for our AXI bus, so we really can't -disable it. This might have happened during boot if, for example, -uart1 (aux_uart clock) probed and was then disabled before the other -consumers of the VPU clock had probed. - -Signed-off-by: Eric Anholt -Acked-by: Martin Sperl -Signed-off-by: Stephen Boyd ---- - drivers/clk/bcm/clk-bcm2835.c | 5 ++++- - 1 file changed, 4 insertions(+), 1 deletion(-) - -diff --git a/drivers/clk/bcm/clk-bcm2835.c b/drivers/clk/bcm/clk-bcm2835.c -index 7a79708..d9db03c 100644 ---- a/drivers/clk/bcm/clk-bcm2835.c -+++ b/drivers/clk/bcm/clk-bcm2835.c -@@ -443,6 +443,8 @@ struct bcm2835_clock_data { - /* Number of fractional bits in the divider */ - u32 frac_bits; - -+ u32 flags; -+ - bool is_vpu_clock; - bool is_mash_clock; - }; -@@ -1230,7 +1232,7 @@ static struct clk *bcm2835_register_clock(struct bcm2835_cprman *cprman, - init.parent_names = parents; - init.num_parents = data->num_mux_parents; - init.name = data->name; -- init.flags = CLK_IGNORE_UNUSED; -+ init.flags = data->flags | CLK_IGNORE_UNUSED; - - if (data->is_vpu_clock) { - init.ops = &bcm2835_vpu_clock_clk_ops; -@@ -1649,6 +1651,7 @@ static const struct bcm2835_clk_desc clk_desc_array[] = { - .div_reg = CM_VPUDIV, - .int_bits = 12, - .frac_bits = 8, -+ .flags = CLK_IS_CRITICAL, - .is_vpu_clock = true), - - /* clocks with per parent mux */ --- -cgit v0.12 - -From eddcbe8398fc7103fccd22aa6df6917caf0123bf Mon Sep 17 00:00:00 2001 -From: Eric Anholt -Date: Wed, 1 Jun 2016 12:05:34 -0700 -Subject: clk: bcm2835: Mark GPIO clocks enabled at boot as critical - -These divide off of PLLD_PER and are used for the ethernet and wifi -PHYs source PLLs. Neither of them is currently represented by a phy -device that would grab the clock for us. - -This keeps other drivers from killing the networking PHYs when they -disable their own clocks and trigger PLLD_PER's refcount going to 0. - -Signed-off-by: Eric Anholt -Acked-by: Martin Sperl -Signed-off-by: Stephen Boyd ---- - drivers/clk/bcm/clk-bcm2835.c | 10 +++++++++- - 1 file changed, 9 insertions(+), 1 deletion(-) - -diff --git a/drivers/clk/bcm/clk-bcm2835.c b/drivers/clk/bcm/clk-bcm2835.c -index d9db03c..400615b 100644 ---- a/drivers/clk/bcm/clk-bcm2835.c -+++ b/drivers/clk/bcm/clk-bcm2835.c -@@ -1239,6 +1239,12 @@ static struct clk *bcm2835_register_clock(struct bcm2835_cprman *cprman, - } else { - init.ops = &bcm2835_clock_clk_ops; - init.flags |= CLK_SET_RATE_GATE | CLK_SET_PARENT_GATE; -+ -+ /* If the clock wasn't actually enabled at boot, it's not -+ * critical. -+ */ -+ if (!(cprman_read(cprman, data->ctl_reg) & CM_ENABLE)) -+ init.flags &= ~CLK_IS_CRITICAL; - } - - clock = devm_kzalloc(cprman->dev, sizeof(*clock), GFP_KERNEL); -@@ -1708,13 +1714,15 @@ static const struct bcm2835_clk_desc clk_desc_array[] = { - .div_reg = CM_GP1DIV, - .int_bits = 12, - .frac_bits = 12, -+ .flags = CLK_IS_CRITICAL, - .is_mash_clock = true), - [BCM2835_CLOCK_GP2] = REGISTER_PER_CLK( - .name = "gp2", - .ctl_reg = CM_GP2CTL, - .div_reg = CM_GP2DIV, - .int_bits = 12, -- .frac_bits = 12), -+ .frac_bits = 12, -+ .flags = CLK_IS_CRITICAL), - - /* HDMI state machine */ - [BCM2835_CLOCK_HSM] = REGISTER_PER_CLK( --- -cgit v0.12 - -From 9e400c5cc5c105e35216ac59a346f20cdd7613be Mon Sep 17 00:00:00 2001 -From: Eric Anholt -Date: Wed, 1 Jun 2016 12:05:35 -0700 -Subject: clk: bcm2835: Mark the CM SDRAM clock's parent as critical - -While the SDRAM is being driven by its dedicated PLL most of the time, -there is a little loop running in the firmware that periodically turns -on the CM SDRAM clock (using its pre-initialized parent) and switches -SDRAM to using the CM clock to do PVT recalibration. - -This avoids system hangs if we choose SDRAM's parent for some other -clock, then disable that clock. - -Signed-off-by: Eric Anholt -Acked-by: Martin Sperl -Signed-off-by: Stephen Boyd ---- - drivers/clk/bcm/clk-bcm2835.c | 25 +++++++++++++++++++++++++ - 1 file changed, 25 insertions(+) - -diff --git a/drivers/clk/bcm/clk-bcm2835.c b/drivers/clk/bcm/clk-bcm2835.c -index 400615b..c6420b3 100644 ---- a/drivers/clk/bcm/clk-bcm2835.c -+++ b/drivers/clk/bcm/clk-bcm2835.c -@@ -36,6 +36,7 @@ - - #include - #include -+#include - #include - #include - #include -@@ -1801,6 +1802,25 @@ static const struct bcm2835_clk_desc clk_desc_array[] = { - .ctl_reg = CM_PERIICTL), - }; - -+/* -+ * Permanently take a reference on the parent of the SDRAM clock. -+ * -+ * While the SDRAM is being driven by its dedicated PLL most of the -+ * time, there is a little loop running in the firmware that -+ * periodically switches the SDRAM to using our CM clock to do PVT -+ * recalibration, with the assumption that the previously configured -+ * SDRAM parent is still enabled and running. -+ */ -+static int bcm2835_mark_sdc_parent_critical(struct clk *sdc) -+{ -+ struct clk *parent = clk_get_parent(sdc); -+ -+ if (IS_ERR(parent)) -+ return PTR_ERR(parent); -+ -+ return clk_prepare_enable(parent); -+} -+ - static int bcm2835_clk_probe(struct platform_device *pdev) - { - struct device *dev = &pdev->dev; -@@ -1810,6 +1830,7 @@ static int bcm2835_clk_probe(struct platform_device *pdev) - const struct bcm2835_clk_desc *desc; - const size_t asize = ARRAY_SIZE(clk_desc_array); - size_t i; -+ int ret; - - cprman = devm_kzalloc(dev, - sizeof(*cprman) + asize * sizeof(*clks), -@@ -1840,6 +1861,10 @@ static int bcm2835_clk_probe(struct platform_device *pdev) - clks[i] = desc->clk_register(cprman, desc->data); - } - -+ ret = bcm2835_mark_sdc_parent_critical(clks[BCM2835_CLOCK_SDRAM]); -+ if (ret) -+ return ret; -+ - return of_clk_add_provider(dev->of_node, of_clk_src_onecell_get, - &cprman->onecell); - } --- -cgit v0.12 - From 30772942cc1095c3129eecfa182e2c568e566b9d Mon Sep 17 00:00:00 2001 From: Dan Carpenter Date: Thu, 13 Oct 2016 11:54:31 +0300 diff --git a/config-arm-generic b/config-arm-generic index 7a88c2d02..b14907566 100644 --- a/config-arm-generic +++ b/config-arm-generic @@ -21,6 +21,7 @@ CONFIG_CC_STACKPROTECTOR=y # CONFIG_BIG_LITTLE is not set # CONFIG_ARM_BIG_LITTLE_CPUIDLE is not set # CONFIG_IWMMXT is not set +# CONFIG_IOMMU_IO_PGTABLE_LPAE_SELFTEST is not set # https://fedoraproject.org/wiki/Features/Checkpoint_Restore CONFIG_CHECKPOINT_RESTORE=y @@ -65,9 +66,10 @@ CONFIG_ARM_GIC_V3_ITS=y CONFIG_ARM_GLOBAL_TIMER=y CONFIG_ARM_SMMU=y CONFIG_MMC_ARMMMCI=y +CONFIG_COMMON_CLK_SCPI=m CONFIG_SERIAL_AMBA_PL011=y CONFIG_SERIAL_AMBA_PL011_CONSOLE=y -CONFIG_SERIO_AMBAKMI=y +CONFIG_SERIO_AMBAKMI=m CONFIG_FB_ARMCLCD=y CONFIG_RTC_DRV_PL031=y CONFIG_PL330_DMA=m @@ -88,11 +90,6 @@ CONFIG_CRYPTO_SHA1_ARM_NEON=y CONFIG_CRYPTO_SHA512_ARM=y CONFIG_TCG_TIS_I2C_ATMEL=m -# EDAC -CONFIG_EDAC=y -CONFIG_EDAC_MM_EDAC=m -CONFIG_EDAC_LEGACY_SYSFS=y - # Regulators CONFIG_REGULATOR=y CONFIG_RFKILL_REGULATOR=m @@ -136,19 +133,20 @@ CONFIG_ARCH_BCM2835=y # CONFIG_ARCH_BCM_21664 is not set # CONFIG_ARCH_BCM_63XX is not set # CONFIG_ARCH_BCM_23550 is not set +# CONFIG_ARCH_BCM_53573 is not set # CONFIG_ARCH_BRCMSTB is not set # CONFIG_ARCH_BERLIN is not set # BCM 283x CONFIG_SERIAL_8250_BCM2835AUX=y CONFIG_DMA_BCM2835=m CONFIG_MMC_SDHCI_IPROC=m -CONFIG_MMC_BCM2835_SDHOST=m CONFIG_BCM2835_MBOX=y CONFIG_PWM_BCM2835=m CONFIG_HW_RANDOM_BCM2835=m CONFIG_I2C_BCM2835=m CONFIG_SPI_BCM2835=m CONFIG_SPI_BCM2835AUX=m +# CONFIG_SPI_BCM_QSPI is not set CONFIG_BCM2835_WDT=m CONFIG_SND_BCM2835_SOC_I2S=m CONFIG_DRM_VC4=m @@ -236,6 +234,11 @@ CONFIG_ROCKCHIP_EFUSE=m CONFIG_PHY_ROCKCHIP_EMMC=m CONFIG_PHY_ROCKCHIP_DP=m CONFIG_ROCKCHIP_MBOX=y +# CONFIG_ARM_RK3399_DMC_DEVFREQ is not set +CONFIG_PHY_ROCKCHIP_INNO_USB2=m +CONFIG_PHY_ROCKCHIP_PCIE=m +CONFIG_PHY_ROCKCHIP_TYPEC=m +CONFIG_PCIE_ROCKCHIP=y # Tegra CONFIG_TEGRA_MC=y @@ -311,6 +314,7 @@ CONFIG_DEVFREQ_THERMAL=y CONFIG_SPMI=m CONFIG_MFD_SPMI_PMIC=m CONFIG_REGMAP_SPMI=m +# CONFIG_QORIQ_THERMAL is not set # Device tree CONFIG_DTC=y @@ -324,7 +328,6 @@ CONFIG_OF_FLATTREE=y CONFIG_OF_GPIO=y CONFIG_OF_IOMMU=y CONFIG_OF_IRQ=y -CONFIG_OF_MTD=y CONFIG_OF_NET=y CONFIG_OF_OVERLAY=y CONFIG_OF_PCI_IRQ=m @@ -344,6 +347,7 @@ CONFIG_THERMAL_OF=y # Mailbox CONFIG_MAILBOX=y CONFIG_ARM_MHU=m +# CONFIG_PLATFORM_MHU is not set # CONFIG_PL320_MBOX is not set CONFIG_ARM_SCPI_PROTOCOL=m CONFIG_ARM_SCPI_POWER_DOMAIN=m @@ -387,7 +391,6 @@ CONFIG_USB_MUSB_DUAL_ROLE=y CONFIG_USB_MUSB_DSPS=m # CONFIG_MUSB_PIO_ONLY is not set # CONFIG_USB_MUSB_TUSB6010 is not set -# CONFIG_USB_MUSB_UX500 is not set CONFIG_USB_GPIO_VBUS=m CONFIG_USB_CONFIGFS=m CONFIG_USB_CONFIGFS_ACM=y @@ -499,9 +502,6 @@ CONFIG_GPIO_DEVRES=y CONFIG_GPIO_GENERIC=m CONFIG_GPIO_GENERIC_PLATFORM=m CONFIG_GPIO_WATCHDOG=m -CONFIG_GPIOLIB=y -CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y -CONFIG_ARCH_REQUIRE_GPIOLIB=y CONFIG_BACKLIGHT_GPIO=m CONFIG_KEYBOARD_GPIO=m CONFIG_KEYBOARD_GPIO_POLLED=m @@ -575,13 +575,8 @@ CONFIG_VFIO_PLATFORM=m CONFIG_VFIO_AMBA=m # CONFIG_VFIO_PLATFORM_CALXEDAXGMAC_RESET is not set -# CONFIG_CRYPTO_TEST is not set # CONFIG_TRANSPARENT_HUGEPAGE is not set # CONFIG_XEN is not set -# CONFIG_DRM_RCAR_DU is not set -# CONFIG_I2C_RCAR is not set -# CONFIG_DRM_SHMOBILE is not set -# CONFIG_I2C_SH_MOBILE is not set # CONFIG_I2C_NOMADIK is not set # CONFIG_IRQ_DOMAIN_DEBUG is not set # CONFIG_LOCK_STAT is not set @@ -591,13 +586,10 @@ CONFIG_VFIO_AMBA=m # CONFIG_DRM_ARMADA is not set # CONFIG_COMMON_CLK_SI570 is not set -# CONFIG_COMMON_CLK_QCOM is not set -CONFIG_COMMON_CLK_SCPI=m # CONFIG_ARM_PTDUMP is not set # CONFIG_PATA_PLATFORM is not set -# CONFIG_KEYBOARD_OMAP4 is not set # CONFIG_KEYBOARD_BCM is not set # CONFIG_PHY_SAMSUNG_USB2 is not set # CONFIG_OMAP_GPMC_DEBUG is not set @@ -683,6 +675,7 @@ CONFIG_NET_VENDOR_MELLANOX=y # CONFIG_REGULATOR_TPS65023 is not set # CONFIG_REGULATOR_TPS6507X is not set # CONFIG_REGULATOR_TPS6524X is not set +# CONFIG_REGULATOR_LTC3676 is not set # drm # CONFIG_DRM_VMWGFX is not set @@ -702,6 +695,3 @@ CONFIG_NET_VENDOR_MELLANOX=y # CONFIG_HISILICON_IRQ_MBIGEN is not set # CONFIG_QRTR is not set - -# This Xilinx option is now built for arm64 as well as ARM -CONFIG_XILINX_VDMA=m diff --git a/config-arm64 b/config-arm64 index 0bc9b30bd..8cca6201c 100644 --- a/config-arm64 +++ b/config-arm64 @@ -23,6 +23,7 @@ CONFIG_ARCH_THUNDER=y # CONFIG_ARCH_ZYNQMP is not set # CONFIG_ARCH_UNIPHIER is not set # CONFIG_ARCH_LG1K is not set +# CONFIG_ARCH_ZX is not set # Erratum CONFIG_ARM64_ERRATUM_826319=y @@ -36,6 +37,7 @@ CONFIG_CAVIUM_ERRATUM_22375=y CONFIG_CAVIUM_ERRATUM_23144=y CONFIG_CAVIUM_ERRATUM_23154=y CONFIG_CAVIUM_ERRATUM_27456=y +CONFIG_FSL_ERRATUM_A008585=y # AMBA / VExpress # CONFIG_RTC_DRV_PL030 is not set @@ -45,9 +47,11 @@ CONFIG_ARM_SMMU_V3=y CONFIG_NR_CPUS=256 CONFIG_ARCH_HAS_HOLES_MEMORYMODEL=y -CONFIG_ARCH_REQUIRE_GPIOLIB=y CONFIG_ARM64_64K_PAGES=y +CONFIG_ARM64_VA_BITS_48=y +CONFIG_ARM64_VA_BITS=48 + CONFIG_ARM64_HW_AFDBM=y CONFIG_ARM64_PAN=y CONFIG_ARM64_LSE_ATOMICS=y @@ -59,6 +63,7 @@ CONFIG_ARM64_UAO=y # CONFIG_RANDOMIZE_BASE is not set CONFIG_ARM64_ACPI_PARKING_PROTOCOL=y +CONFIG_ACPI_WATCHDOG=y CONFIG_BCMA_POSSIBLE=y CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0 @@ -75,7 +80,6 @@ CONFIG_HVC_DRIVER=y CONFIG_HZ=100 CONFIG_KVM=y -CONFIG_KVM_NEW_VGIC=y CONFIG_RCU_FANOUT=64 CONFIG_SPARSE_IRQ=y @@ -135,6 +139,7 @@ CONFIG_CRYPTO_DEV_CCP_CRYPTO=m # APM Xgene CONFIG_POWER_RESET_XGENE=y CONFIG_COMMON_CLK_XGENE=y +CONFIG_XGENE_PMU=y CONFIG_AHCI_XGENE=y CONFIG_PHY_XGENE=y CONFIG_NET_XGENE=m @@ -149,6 +154,7 @@ CONFIG_PCI_XGENE_MSI=y CONFIG_I2C_XGENE_SLIMPRO=m CONFIG_XGENE_SLIMPRO_MBOX=m CONFIG_MDIO_XGENE=m +CONFIG_SENSORS_XGENE=m # AMD Seattle CONFIG_NET_SB1000=y @@ -175,6 +181,8 @@ CONFIG_DRM_HISI_KIRIN=m CONFIG_HISI_KIRIN_DW_DSI=m CONFIG_MDIO_HISI_FEMAC=m CONFIG_INPUT_HISI_POWERKEY=m +# CONFIG_K3_DMA is not set +# CONFIG_I2C_HIX5HD2 is not set # Tegra CONFIG_ARCH_TEGRA_132_SOC=y @@ -184,19 +192,20 @@ CONFIG_MFD_MAX77620=y CONFIG_PINCTRL_MAX77620=m CONFIG_REGULATOR_MAX77620=m CONFIG_GPIO_MAX77620=m -CONFIG_TEGRA_ACONNECT=y +CONFIG_TEGRA_ACONNECT=m # AllWinner -CONFIG_MACH_SUN50I=y -CONFIG_SUNXI_RSB=m CONFIG_AHCI_SUNXI=m CONFIG_NET_VENDOR_ALLWINNER=y -# CONFIG_SUN4I_EMAC is not set CONFIG_SUN8I_EMAC=m +# CONFIG_SUN4I_EMAC is not set # CONFIG_MDIO_SUN4I is not set # CONFIG_KEYBOARD_SUN4I_LRADC is not set # CONFIG_TOUCHSCREEN_SUN4I is not set # CONFIG_SERIO_SUN4I_PS2 is not set +CONFIG_SUNXI_RSB=y +CONFIG_MFD_AC100=m +CONFIG_RTC_DRV_AC100=m CONFIG_SUNXI_WATCHDOG=m CONFIG_MFD_SUN6I_PRCM=y CONFIG_IR_SUNXI=m @@ -224,9 +233,26 @@ CONFIG_MFD_QCOM_RPM=m CONFIG_PINCTRL_MSM=y CONFIG_PINCTRL_MSM8916=y CONFIG_PINCTRL_MSM8996=y +CONFIG_PINCTRL_QDF2XXX=y +CONFIG_COMMON_CLK_QCOM=m +# CONFIG_MSM_GCC_8916 is not set +# CONFIG_MSM_LCC_8960 is not set +CONFIG_APQ_GCC_8084=m +CONFIG_APQ_MMCC_8084=m +CONFIG_MSM_GCC_8660=m +CONFIG_MSM_GCC_8960=m +CONFIG_MSM_MMCC_8960=m +CONFIG_MSM_GCC_8974=m +CONFIG_MSM_MMCC_8974=m +CONFIG_MSM_GCC_8996=m +CONFIG_MSM_MMCC_8996=m +# CONFIG_MDM_GCC_9615 is not set +# CONFIG_MDM_LCC_9615 is not set CONFIG_REGULATOR_QCOM_RPM=m CONFIG_REGULATOR_QCOM_SMD_RPM=m CONFIG_QCOM_BAM_DMA=y +CONFIG_QCOM_HIDMA=m +CONFIG_QCOM_HIDMA_MGMT=m CONFIG_HWSPINLOCK_QCOM=m CONFIG_HW_RANDOM_MSM=m CONFIG_CRYPTO_DEV_QCE=m @@ -264,12 +290,14 @@ CONFIG_QCOM_COINCELL=m # CONFIG_PINCTRL_MSM8960 is not set # CONFIG_PINCTRL_MDM9615 is not set # CONFIG_PINCTRL_MSM8X74 is not set -# CONFIG_PINCTRL_QDF2XXX is not set # CONFIG_INPUT_PM8941_PWRKEY is not set # CONFIG_INPUT_REGULATOR_HAPTIC is not set # CONFIG_CHARGER_MANAGER is not set # CONFIG_SENSORS_LTC2978_REGULATOR is not set # CONFIG_QCOM_Q6V5_PIL is not set +# CONFIG_QCOM_WCNSS_PIL is not set +# CONFIG_QCOM_EBI2 is not set +# CONFIG_QCOM_TSENS is not set # mvebu # CONFIG_MV_XOR_V2 is not set @@ -283,7 +311,11 @@ CONFIG_NET_VENDOR_CAVIUM=y CONFIG_THUNDER_NIC_PF=m CONFIG_THUNDER_NIC_VF=m CONFIG_THUNDER_NIC_BGX=m +CONFIG_THUNDER_NIC_RGX=m # CONFIG_LIQUIDIO is not set +CONFIG_SPI_THUNDERX=m +CONFIG_I2C_THUNDERX=m +CONFIG_HW_RANDOM_CAVIUM=m CONFIG_SATA_AHCI_PLATFORM=y CONFIG_SATA_AHCI_SEATTLE=m @@ -294,7 +326,7 @@ CONFIG_ND_BTT=m CONFIG_ND_BLK=m # CONFIG_PMIC_OPREGION is not set -# CONFIG_DEBUG_RODATA is not set +# CONFIG_DEBUG_ALIGN_RODATA is not set CONFIG_DEBUG_SECTION_MISMATCH=y @@ -310,9 +342,7 @@ CONFIG_DEBUG_SECTION_MISMATCH=y # CONFIG_VGA_CONSOLE is not set # CONFIG_HOTPLUG_PCI_SHPC is not set - # CONFIG_FSL_MC_BUS is not set # CONFIG_FUJITSU_ES is not set -# CONFIG_IMX_THERMAL is not set # CONFIG_PNP_DEBUG_MESSAGES is not set # CONFIG_BCM_PDC_MBOX is not set diff --git a/config-armv7 b/config-armv7 index 0207f9ab9..ca762de9b 100644 --- a/config-armv7 +++ b/config-armv7 @@ -23,8 +23,6 @@ CONFIG_SOC_OMAP5=y # CONFIG_SOC_DRA7XX is not set CONFIG_SOC_OMAP3430=y CONFIG_SOC_TI81XX=y -# CONFIG_MACH_NOKIA_RX51 is not set -# CONFIG_MACH_OMAP_LDP is not set # CONFIG_MACH_OMAP3517EVM is not set # CONFIG_MACH_OMAP3_PANDORA is not set CONFIG_OMAP5_ERRATA_801819=y @@ -146,8 +144,7 @@ CONFIG_PWM_OMAP_DMTIMER=m # CONFIG_PWM_STMPE is not set CONFIG_CRYPTO_DEV_OMAP_SHAM=m -# Disable for the moment, terribly broken upstream -# CONFIG_CRYPTO_DEV_OMAP_AES is not set +CONFIG_CRYPTO_DEV_OMAP_AES=m CONFIG_CRYPTO_DEV_OMAP_DES=m CONFIG_HW_RANDOM_OMAP=m CONFIG_HW_RANDOM_OMAP3_ROM=m @@ -239,7 +236,6 @@ CONFIG_TI_CPSW_ALE=m CONFIG_TI_CPTS=y CONFIG_TI_EMIF=m CONFIG_DRM_TILCDC=m -# CONFIG_COMMON_CLK_TI_ADPLL is not set # We only need this until the BBB dts is actually updated CONFIG_DRM_TILCDC_SLAVE_COMPAT=y CONFIG_SPI_DAVINCI=m @@ -302,6 +298,8 @@ CONFIG_MSM_GCC_8974=m CONFIG_MSM_MMCC_8974=m CONFIG_MSM_GCC_8996=m CONFIG_MSM_MMCC_8996=m +# CONFIG_MDM_GCC_9615 is not set +# CONFIG_MDM_LCC_9615 is not set CONFIG_HW_RANDOM_MSM=m CONFIG_I2C_QUP=m CONFIG_SPI_QUP=m @@ -313,7 +311,6 @@ CONFIG_QCOM_BAM_DMA=m CONFIG_QCOM_GSBI=m CONFIG_QCOM_PM=y CONFIG_PHY_QCOM_APQ8064_SATA=m -CONFIG_USB_DWC3_QCOM=m CONFIG_CRYPTO_DEV_QCE=m CONFIG_DRM_MSM=m # CONFIG_DRM_MSM_DSI is not set @@ -351,6 +348,8 @@ CONFIG_PCIE_QCOM=y CONFIG_MTD_NAND_QCOM=m # CONFIG_QCOM_Q6V5_PIL is not set # CONFIG_MSM_IOMMU is not set +# CONFIG_QCOM_WCNSS_PIL is not set +# CONFIG_QCOM_TSENS is not set # i.MX # CONFIG_MXC_DEBUG_BOARD is not set @@ -397,6 +396,7 @@ CONFIG_STMPE_I2C=y CONFIG_SPI_IMX=m CONFIG_SPI_FSL_QUADSPI=m CONFIG_STMPE_SPI=y +CONFIG_GPIO_TS4800=m CONFIG_MFD_MC13XXX_SPI=m CONFIG_MFD_STMPE=y CONFIG_MTD_NAND_GPMI_NAND=m diff --git a/config-armv7-generic b/config-armv7-generic index f36ed38b0..ffc6b526a 100644 --- a/config-armv7-generic +++ b/config-armv7-generic @@ -21,9 +21,9 @@ CONFIG_ARM_THUMBEE=y CONFIG_ARM_ASM_UNIFIED=y CONFIG_ARM_PATCH_IDIV=y CONFIG_ARM_CPU_TOPOLOGY=y -CONFIG_ARM_DMA_MEM_BUFFERABLE=y CONFIG_SWP_EMULATE=y CONFIG_CACHE_L2X0=y +CONFIG_CACHE_L2X0_PMU=y CONFIG_HIGHPTE=y CONFIG_AUTO_ZRELADDR=y CONFIG_ATAGS=y @@ -135,6 +135,7 @@ CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND=y CONFIG_DEVFREQ_GOV_PERFORMANCE=y CONFIG_DEVFREQ_GOV_POWERSAVE=y CONFIG_DEVFREQ_GOV_USERSPACE=y +# CONFIG_DEVFREQ_EVENT_ROCKCHIP_DFI is not set CONFIG_DEFAULT_MMAP_MIN_ADDR=32768 CONFIG_LSM_MMAP_MIN_ADDR=32768 @@ -166,10 +167,8 @@ CONFIG_ARM_ATAG_DTB_COMPAT=y CONFIG_ARM_APPENDED_DTB=y # General vexpress ARM drivers -CONFIG_SERIO_AMBAKMI=m CONFIG_SERIAL_AMBA_PL010=y CONFIG_SERIAL_AMBA_PL010_CONSOLE=y - CONFIG_RTC_DRV_PL030=y CONFIG_AMBA_PL08X=y CONFIG_SND_ARMAACI=m @@ -191,6 +190,9 @@ CONFIG_MACH_SUN7I=y CONFIG_MACH_SUN8I=y CONFIG_MACH_SUN9I=y CONFIG_SUNXI_CCU=y +CONFIG_SUN6I_A31_CCU=y +CONFIG_SUN8I_A23_CCU=y +CONFIG_SUN8I_A33_CCU=y CONFIG_SUN8I_H3_CCU=y CONFIG_SUNXI_SRAM=y CONFIG_DMA_SUN4I=m @@ -235,7 +237,10 @@ CONFIG_CRYPTO_DEV_SUN4I_SS=m CONFIG_SND_SUN4I_CODEC=m CONFIG_SND_SUN4I_SPDIF=m CONFIG_SND_SUN4I_I2S=m -CONFIG_SUNXI_RSB=m +CONFIG_SND_SOC_WM8978=m +CONFIG_SUNXI_RSB=y +CONFIG_MFD_AC100=m +CONFIG_RTC_DRV_AC100=m CONFIG_NVMEM_SUNXI_SID=m # Exynos @@ -254,7 +259,6 @@ CONFIG_SERIAL_SAMSUNG_CONSOLE=y CONFIG_ARM_EXYNOS5440_CPUFREQ=m CONFIG_ARM_EXYNOS_CPUIDLE=y CONFIG_EXYNOS5420_MCPM=y -CONFIG_ARM_EXYNOS5_BUS_DEVFREQ=m # CONFIG_ARM_EXYNOS_BUS_DEVFREQ is not set # CONFIG_EXYNOS5420_MCPM not set CONFIG_DEVFREQ_EVENT_EXYNOS_PPMU=y @@ -319,19 +323,27 @@ CONFIG_VIDEO_EXYNOS4_FIMC_IS=m CONFIG_VIDEO_EXYNOS4_ISP_DMA_CAPTURE=y CONFIG_VIDEO_S5P_FIMC=m CONFIG_VIDEO_S5P_MIPI_CSIS=m +CONFIG_VIDEO_SAMSUNG_S5P_CEC=m CONFIG_VIDEO_SAMSUNG_S5P_G2D=m CONFIG_VIDEO_SAMSUNG_S5P_JPEG=m CONFIG_VIDEO_SAMSUNG_S5P_MFC=m # CONFIG_VIDEO_SAMSUNG_S5P_TV is not set CONFIG_VIDEO_SAMSUNG_EXYNOS_GSC=m +CONFIG_MFD_EXYNOS_LPASS=m CONFIG_SND_SOC_SAMSUNG=m CONFIG_SND_SOC_SAMSUNG_SMDK_SPDIF=m CONFIG_SND_SOC_SAMSUNG_SMDK_WM8994=m CONFIG_SND_SOC_SMDK_WM8994_PCM=m CONFIG_SND_SOC_SNOW=m CONFIG_SND_SOC_ODROIDX2=m +CONFIG_SND_SOC_MAX98090=m +CONFIG_SND_SOC_MAX98095=m +CONFIG_SND_SAMSUNG_I2S=m +CONFIG_SND_SAMSUNG_PCM=m +CONFIG_SND_SAMSUNG_SPDIF=m CONFIG_EXYNOS_AUDSS_CLK_CON=m +CONFIG_MFD_EXYNOS_LPASS=m # CONFIG_EXYNOS_IOMMU_DEBUG is not set # CONFIG_SAMSUNG_PM_DEBUG is not set # CONFIG_SAMSUNG_PM_CHECK is not set @@ -446,17 +458,11 @@ CONFIG_MFD_TPS65912_SPI=y # CONFIG_MFD_TPS80031 is not set # CONFIG_TWL4030_CORE is not set # CONFIG_TWL6040_CORE is not set -# # Pin stuff # CONFIG_PINCTRL_AMD is not set # CONFIG_PINCTRL_SAMSUNG is not set -# CONFIG_PINCTRL_MSM8X74 is not set # CONFIG_PINCTRL_BCM281XX is not set -# CONFIG_PINCTRL_APQ8064 is not set -# CONFIG_PINCTRL_APQ8084 is not set -# CONFIG_PINCTRL_MSM8960 is not set -# CONFIG_PINCTRL_MSM8660 is not set # CONFIG_PINCTRL_MDM9615 is not set # CONFIG_PINCTRL_MSM8996 is not set @@ -468,6 +474,7 @@ CONFIG_GPIO_MC33880=m CONFIG_GPIO_TPS65910=y CONFIG_GPIO_TPS65912=m # CONFIG_GPIO_ZEVIO is not set +CONFIG_GPIO_AXP209=m CONFIG_LEDS_GPIO=m CONFIG_LEDS_GPIO_REGISTER=y CONFIG_MDIO_BUS_MUX=m @@ -478,7 +485,6 @@ CONFIG_INPUT_GPIO_BEEPER=m CONFIG_INPUT_GPIO_TILT_POLLED=m CONFIG_INPUT_MATRIXKMAP=m CONFIG_KEYBOARD_MATRIX=m -# CONFIG_GPIO_RCAR is not set CONFIG_W1_MASTER_GPIO=m # HW crypto and rng @@ -526,6 +532,8 @@ CONFIG_EEPROM_93XX46=m CONFIG_SND_ARM=y CONFIG_SND_SOC_AC97_BUS=y CONFIG_SND_SOC_AC97_CODEC=y +# CONFIG_SND_SOC_RK3399_GRU_SOUND is not set +# CONFIG_SND_SOC_TEGRA_SGTL5000 is not set # RTC CONFIG_RTC_DRV_DS1305=m @@ -592,16 +600,15 @@ CONFIG_GENERIC_ADC_BATTERY=m CONFIG_BATTERY_SBS=m # Sensors +# non iio CONFIG_SENSORS_AD7314=m -CONFIG_SENSORS_ADCXX=m CONFIG_SENSORS_ADS7871=m -CONFIG_SENSORS_BH1780=m CONFIG_SENSORS_GPIO_FAN=m -CONFIG_SENSORS_ISL29018=m -CONFIG_SENSORS_ISL29028=m -CONFIG_SENSORS_LIS3_SPI=m CONFIG_SENSORS_LM70=m CONFIG_SENSORS_MAX1111=m +# iio +CONFIG_SENSORS_ISL29018=m +CONFIG_SENSORS_ISL29028=m CONFIG_MPL115=m CONFIG_MPL3115=m CONFIG_SI7005=m @@ -634,7 +641,6 @@ CONFIG_LEDS_TRIGGER_CPU=y CONFIG_LEDS_DAC124S085=m CONFIG_LEDS_PWM=m CONFIG_LEDS_SYSCON=y -CONFIG_BMP085_SPI=m CONFIG_MFD_SYSCON=y CONFIG_GPIO_SYSCON=m @@ -685,13 +691,8 @@ CONFIG_CROS_EC_CHARDEV=m CONFIG_CROS_EC_PROTO=y CONFIG_PWM_CROS_EC=m -# This newly introduced mess needs to be fixed upstream :-( CONFIG_STMMAC_PLATFORM=m CONFIG_DWMAC_GENERIC=m -# CONFIG_DWMAC_LPC18XX is not set -# CONFIG_DWMAC_MESON is not set -# CONFIG_DWMAC_SOCFPGA is not set -# CONFIG_DWMAC_STI is not set CONFIG_R8188EU=m @@ -711,8 +712,6 @@ CONFIG_R8188EU=m # CONFIG_DRM_IMX is not set # CONFIG_DRM_STI is not set # CONFIG_DRM_FSL_DCU is not set -# CONFIG_AHCI_IMX is not set -# CONFIG_IMX_THERMAL is not set # CONFIG_TI_DAC7512 is not set # Not needed on ARMv7 @@ -767,6 +766,7 @@ CONFIG_R8188EU=m # CONFIG_QCOM_SPMI_TEMP_ALARM is not set # CONFIG_SND_SOC_APQ8016_SBC is not set # CONFIG_SND_SOC_TAS571X is not set +# CONFIG_QCOM_EBI2 is not set # CONFIG_VFIO_PLATFORM_AMDXGBE_RESET is not set @@ -779,6 +779,4 @@ CONFIG_R8188EU=m # CONFIG_DMADEVICES_DEBUG is not set # CONFIG_SERIAL_SAMSUNG_DEBUG is not set # CONFIG_OMAP2_DSS_DEBUG is not set -# CONFIG_CRYPTO_DEV_UX500_DEBUG is not set -# CONFIG_AB8500_DEBUG is not set # CONFIG_DEBUG_LL is not set diff --git a/config-armv7-lpae b/config-armv7-lpae index fb7177b85..891087c3c 100644 --- a/config-armv7-lpae +++ b/config-armv7-lpae @@ -16,11 +16,9 @@ CONFIG_ARM_LPAE=y CONFIG_SYS_SUPPORTS_HUGETLBFS=y CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE=y CONFIG_ARM_VIRT_EXT=y -CONFIG_ARM_DMA_IOMMU_ALIGNMENT=8 CONFIG_KVM=y CONFIG_KVM_ARM_HOST=y -CONFIG_KVM_NEW_VGIC=y # CONFIG_XEN is not set CONFIG_XEN_FBDEV_FRONTEND=y @@ -43,9 +41,11 @@ CONFIG_XEN_WDT=m # TI Keystone CONFIG_KEYSTONE_USB_PHY=m +CONFIG_TI_SYSCON_RESET=m CONFIG_USB_DWC3_KEYSTONE=m CONFIG_GPIO_DAVINCI=y # CONFIG_I2C_DAVINCI is not set +# CONFIG_MTD_NAND_OMAP2 is not set CONFIG_TI_AEMIF=m CONFIG_POWER_RESET_KEYSTONE=y CONFIG_DAVINCI_WATCHDOG=m diff --git a/config-debug b/config-debug index a31d9076c..12abb86ab 100644 --- a/config-debug +++ b/config-debug @@ -50,6 +50,7 @@ CONFIG_DEBUG_OBJECTS_ENABLE_DEFAULT=1 CONFIG_X86_PTDUMP=y CONFIG_ARM64_PTDUMP=y CONFIG_EFI_PGT_DUMP=y +CONFIG_EFI_TEST=y CONFIG_CAN_DEBUG_DEVICES=y diff --git a/config-generic b/config-generic index 1dcb2d71f..61e52e627 100644 --- a/config-generic +++ b/config-generic @@ -82,8 +82,6 @@ CONFIG_SLUB_CPU_PARTIAL=y # CONFIG_SLUB_DEBUG_ON is not set # CONFIG_KASAN is not set -# CONFIG_AD525X_DPOT is not set - # # Loadable module support # @@ -115,11 +113,12 @@ CONFIG_HOTPLUG_PCI=y CONFIG_HOTPLUG_PCI_PCIE=y # CONFIG_PCIE_DW_PLAT is not set CONFIG_PCIE_DPC=y +CONFIG_PCIE_PTM=y +# CONFIG_NTB is not set # CONFIG_SGI_IOC4 is not set # CONFIG_ISA is not set -# CONFIG_SCx200 is not set # # PCMCIA/CardBus support @@ -200,6 +199,7 @@ CONFIG_INFINIBAND_USNIC=m CONFIG_INFINIBAND_RDMAVT=m CONFIG_RDMA_RXE=m +# CONFIG_INFINIBAND_QEDR is not set # # Executable file formats @@ -209,6 +209,7 @@ CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=y # CONFIG_BINFMT_AOUT is not set CONFIG_BINFMT_SCRIPT=y CONFIG_BINFMT_MISC=m +# CONFIG_BINFMT_FLAT is not set # # Device Drivers @@ -216,12 +217,13 @@ CONFIG_BINFMT_MISC=m # CONFIG_COMMON_CLK_SI5351 is not set # CONFIG_COMMON_CLK_CDCE706 is not set +# CONFIG_COMMON_CLK_CDCE925 is not set # CONFIG_COMMON_CLK_CS2000_CP is not set # CONFIG_COMMON_CLK_PWM is not set -# CONFIG_COMMON_CLK_CDCE925 is not set -# CONFIG_COMMON_CLK_OXNAS is not set # CONFIG_COMMON_CLK_HI3519 is not set -# CONFIG_SUNXI_CCU is not set +# CONFIG_SUN6I_A31_CCU is not set +# CONFIG_SUN8I_A23_CCU is not set +# CONFIG_SUN8I_A33_CCU is not set # # Generic Driver Options @@ -240,6 +242,11 @@ CONFIG_FW_CFG_SYSFS=m CONFIG_REGMAP=y CONFIG_REGMAP_I2C=m +# EDAC +CONFIG_EDAC=y +CONFIG_EDAC_MM_EDAC=m +CONFIG_EDAC_LEGACY_SYSFS=y + # CONFIG_CMA is not set # CONFIG_DMA_CMA is not set # CONFIG_FENCE_TRACE is not set @@ -380,7 +387,6 @@ CONFIG_BLK_DEV_NULL_BLK=m CONFIG_BLK_DEV_FD=m # CONFIG_PARIDE is not set CONFIG_ZRAM=m -# CONFIG_ZRAM_LZ4_COMPRESS is not set CONFIG_BLK_CPQ_CISS_DA=m CONFIG_CISS_SCSI_TAPE=y @@ -457,6 +463,7 @@ CONFIG_SCSI_DH_RDAC=m CONFIG_SCSI_DH_HP_SW=m CONFIG_SCSI_DH_EMC=m CONFIG_SCSI_DH_ALUA=m +CONFIG_SCSI_SMARTPQI=m # # SCSI support type (disk, tape, CD-ROM) @@ -604,11 +611,11 @@ CONFIG_SCSI_SNIC=m CONFIG_ATA=y CONFIG_ATA_BMDMA=y +CONFIG_ATA_GENERIC=m CONFIG_ATA_VERBOSE_ERROR=y CONFIG_ATA_SFF=y CONFIG_ATA_PIIX=y # CONFIG_SATA_DWC is not set -# CONFIG_SATA_HIGHBANK is not set CONFIG_ATA_ACPI=y CONFIG_BLK_DEV_SX8=m CONFIG_PDC_ADMA=m @@ -647,7 +654,6 @@ CONFIG_PATA_CS5535=m CONFIG_PATA_CS5536=m CONFIG_PATA_CYPRESS=m CONFIG_PATA_EFAR=m -CONFIG_ATA_GENERIC=m CONFIG_PATA_HPT366=m CONFIG_PATA_HPT37X=m CONFIG_PATA_HPT3X2N=m @@ -798,6 +804,7 @@ CONFIG_TCP_CONG_NV=m CONFIG_TCP_CONG_VENO=m CONFIG_TCP_CONG_WESTWOOD=m CONFIG_TCP_CONG_YEAH=m +CONFIG_TCP_CONG_BBR=m CONFIG_TCP_MD5SIG=y @@ -1114,6 +1121,7 @@ CONFIG_NFT_COMPAT=m CONFIG_NF_DUP_NETDEV=m CONFIG_NFT_DUP_NETDEV=m CONFIG_NFT_FWD_NETDEV=m +CONFIG_NFT_NUMGEN=m CONFIG_NF_TABLES_IPV4=m CONFIG_NF_DUP_IPV4=m @@ -1129,6 +1137,10 @@ CONFIG_NF_TABLES_ARP=m CONFIG_NF_TABLES_IPV6=m CONFIG_NFT_CHAIN_ROUTE_IPV6=m CONFIG_NFT_CHAIN_NAT_IPV6=m +CONFIG_NFT_SET_RBTREE=m +CONFIG_NFT_SET_HASH=m +CONFIG_NFT_QUOTA=m + CONFIG_NF_TABLES_BRIDGE=m # @@ -1300,8 +1312,11 @@ CONFIG_NET_ACT_VLAN=m CONFIG_NET_ACT_BPF=m CONFIG_NET_ACT_CONNMARK=m CONFIG_NET_ACT_IFE=m +CONFIG_NET_ACT_SKBMOD=m +CONFIG_NET_ACT_TUNNEL_KEY=m CONFIG_NET_IFE_SKBMARK=m CONFIG_NET_IFE_SKBPRIO=m +CONFIG_NET_IFE_SKBTCINDEX=m CONFIG_DCB=y CONFIG_DNS_RESOLVER=m @@ -1313,6 +1328,7 @@ CONFIG_BATMAN_ADV_MCAST=y CONFIG_BATMAN_ADV_BATMAN_V=y # CONFIG_BATMAN_ADV_DEBUG is not set +# CONFIG_BATMAN_ADV_DEBUGFS is not set CONFIG_OPENVSWITCH=m CONFIG_OPENVSWITCH_GRE=y CONFIG_OPENVSWITCH_VXLAN=y @@ -1406,7 +1422,7 @@ CONFIG_L2TP_ETH=m # CONFIG_CAIF is not set -# CONFIG_AF_KCM is not set +CONFIG_AF_KCM=m CONFIG_LWTUNNEL=y CONFIG_NET_DEVLINK=m @@ -1433,6 +1449,8 @@ CONFIG_ACENIC=m CONFIG_ALTERA_TSE=m +# CONFIG_NET_VENDOR_AMAZON is not set + CONFIG_NET_VENDOR_AMD=y CONFIG_PCNET32=m CONFIG_AMD8111_ETH=m @@ -1465,7 +1483,6 @@ CONFIG_CHELSIO_T4=m CONFIG_CHELSIO_T4VF=m CONFIG_CHELSIO_T4_DCB=y # CONFIG_CHELSIO_T4_FCOE is not set -# CONFIG_CHELSIO_T4_UWIRE is not set CONFIG_NET_VENDOR_CISCO=y CONFIG_ENIC=m @@ -1496,7 +1513,6 @@ CONFIG_SUNDANCE=m CONFIG_NET_VENDOR_EMULEX=y CONFIG_BE2NET=m -CONFIG_BE2NET_VXLAN=y # CONFIG_BE2NET_HWMON is not set CONFIG_NET_VENDOR_EXAR=y @@ -1522,16 +1538,12 @@ CONFIG_IXGBEVF=m CONFIG_IXGBE=m CONFIG_IXGBE_DCA=y CONFIG_IXGBE_DCB=y -CONFIG_IXGBE_VXLAN=y CONFIG_IXGBE_HWMON=y CONFIG_I40E=m -CONFIG_I40E_VXLAN=y # CONFIG_I40E_DCB is not set # CONFIG_I40E_FCOE is not set -CONFIG_I40E_GENEVE=y CONFIG_I40EVF=m CONFIG_FM10K=m -# CONFIG_FM10K_VXLAN is not set # CONFIG_NET_VENDOR_I825XX is not set CONFIG_NET_VENDOR_MARVELL=y @@ -1582,15 +1594,12 @@ CONFIG_QLA3XXX=m CONFIG_QLCNIC=m CONFIG_QLCNIC_SRIOV=y CONFIG_QLCNIC_DCB=y -CONFIG_QLCNIC_VXLAN=y CONFIG_QLCNIC_HWMON=y CONFIG_QLGE=m CONFIG_NETXEN_NIC=m CONFIG_QED=m CONFIG_QEDE=m CONFIG_QED_SRIOV=y -# CONFIG_QEDE_VXLAN is not set -# CONFIG_QEDE_GENEVE is not set # CONFIG_NET_VENDOR_QUALCOMM is not set @@ -1673,6 +1682,7 @@ CONFIG_CICADA_PHY=m CONFIG_DAVICOM_PHY=m CONFIG_DP83640_PHY=m CONFIG_MICROCHIP_PHY=m +CONFIG_MICROSEMI_PHY=m CONFIG_FIXED_PHY=y CONFIG_MDIO_BITBANG=m CONFIG_MDIO_BCM_UNIMAC=m @@ -1691,6 +1701,7 @@ CONFIG_REALTEK_PHY=m CONFIG_SMSC_PHY=m CONFIG_STE10XP=m CONFIG_VITESSE_PHY=m +CONFIG_XILINX_GMII2RGMII=m CONFIG_MICREL_PHY=m CONFIG_DP83867_PHY=m CONFIG_DP83848_PHY=m @@ -1711,8 +1722,6 @@ CONFIG_BCMGENET=m CONFIG_BNX2=m CONFIG_BNX2X=m CONFIG_BNX2X_SRIOV=y -CONFIG_BNX2X_VXLAN=y -CONFIG_BNX2X_GENEVE=y CONFIG_CNIC=m CONFIG_FEALNX=m CONFIG_ETHOC=m @@ -1730,12 +1739,10 @@ CONFIG_JME=m CONFIG_MLX4_CORE=m CONFIG_MLX4_EN=m CONFIG_MLX4_EN_DCB=y -CONFIG_MLX4_EN_VXLAN=y CONFIG_MLX4_INFINIBAND=m CONFIG_MLX5_CORE=m CONFIG_MLX5_CORE_EN=y CONFIG_MLX5_CORE_EN_DCB=y -CONFIG_MLX5_CORE_EN_VXLAN=y CONFIG_MLX5_INFINIBAND=m CONFIG_MLXSW_CORE=m CONFIG_MLXSW_CORE_HWMON=y @@ -1911,8 +1918,7 @@ CONFIG_IWLWIFI=m CONFIG_IWLDVM=m CONFIG_IWLMVM=m # CONFIG_IWLWIFI_BCAST_FILTERING is not set -# CONFIG_IWLWIFI_UAPSD is not set -# CONFIG_IWLWIFI_PCIE_RTPM is not set +CONFIG_IWLWIFI_PCIE_RTPM=y CONFIG_IWLWIFI_DEBUG=y CONFIG_IWLWIFI_DEBUGFS=y @@ -1922,7 +1928,6 @@ CONFIG_IWLEGACY_DEBUGFS=y CONFIG_IWL4965=y CONFIG_IWL3945=m # CONFIG_IWM is not set -# CONFIG_IWLWIFI_DEBUG_EXPERIMENTAL_UCODE is not set CONFIG_MAC80211_HWSIM=m CONFIG_P54_COMMON=m @@ -2005,6 +2010,7 @@ CONFIG_MWIFIEX_SDIO=m CONFIG_MWIFIEX_PCIE=m CONFIG_MWIFIEX_USB=m +CONFIG_MAC802154=m CONFIG_IEEE802154=m CONFIG_IEEE802154_SOCKET=m CONFIG_IEEE802154_6LOWPAN=m @@ -2014,11 +2020,10 @@ CONFIG_IEEE802154_ATUSB=m CONFIG_IEEE802154_CC2520=m CONFIG_IEEE802154_AT86RF230=m # CONFIG_IEEE802154_AT86RF230_DEBUGFS is not set -# CONFIG_IEEE802154_ADF7242 is not set -# CONFIG_IEEE802154_MRF24J40 is not set +CONFIG_IEEE802154_ADF7242=m +CONFIG_IEEE802154_MRF24J40=m # CONFIG_IEEE802154_NL802154_EXPERIMENTAL is not set -CONFIG_MAC802154=m CONFIG_NET_MPLS_GSO=m CONFIG_MPLS_ROUTING=m CONFIG_MPLS_IPTUNNEL=m @@ -2069,6 +2074,9 @@ CONFIG_HAMRADIO=y CONFIG_AX25=m CONFIG_AX25_DAMA_SLAVE=y +# +# Controller Area Network support +# CONFIG_CAN=m CONFIG_CAN_RAW=m CONFIG_CAN_BCM=m @@ -2229,6 +2237,7 @@ CONFIG_BT_HCIUART_INTEL=y CONFIG_BT_HCIUART_BCM=y CONFIG_BT_HCIUART_QCA=y CONFIG_BT_HCIUART_AG6XX=y +CONFIG_BT_HCIUART_MRVL=y CONFIG_BT_HCIDTL1=m CONFIG_BT_HCIBT3C=m CONFIG_BT_HCIBLUECARD=m @@ -2244,6 +2253,7 @@ CONFIG_BT_MRVL_SDIO=m CONFIG_BT_ATH3K=m CONFIG_BT_QCA=m CONFIG_BT_WILINK=m +# CONFIG_BT_QCOMSMD is not set # # ISDN subsystem @@ -2464,6 +2474,7 @@ CONFIG_KEYBOARD_ATKBD=y # CONFIG_KEYBOARD_TCA8418 is not set # CONFIG_KEYBOARD_OMAP4 is not set # CONFIG_KEYBOARD_CAP11XX is not set +# CONFIG_KEYBOARD_ADC is not set CONFIG_INPUT_MOUSE=y CONFIG_MOUSE_PS2=y # CONFIG_MOUSE_PS2_TOUCHKIT is not set @@ -2575,6 +2586,8 @@ CONFIG_TOUCHSCREEN_ZFORCE=m # CONFIG_TOUCHSCREEN_ROHM_BU21023 is not set # CONFIG_TOUCHSCREEN_TSC2004 is not set # CONFIG_TOUCHSCREEN_MELFAS_MIP4 is not set +# CONFIG_TOUCHSCREEN_EKTF2127 is not set +# CONFIG_TOUCHSCREEN_ATMEL_MXT_T37 is not set CONFIG_INPUT_MISC=y CONFIG_INPUT_E3X0_BUTTON=m @@ -2599,6 +2612,7 @@ CONFIG_INPUT_MPU3050=m CONFIG_INPUT_KXTJ9=m # CONFIG_INPUT_KXTJ9_POLLED_MODE is not set # CONFIG_INPUT_PWM_BEEPER is not set +# CONFIG_INPUT_GPIO_DECODER is not set CONFIG_RMI4_CORE=m CONFIG_RMI4_I2C=m @@ -2606,6 +2620,10 @@ CONFIG_RMI4_F11=y CONFIG_RMI4_F12=y CONFIG_RMI4_F30=y CONFIG_RMI4_SPI=m +# This throws off module filtering because it depends on V4L2 which is filtered +# Leave this off until someone explicitly requests it and figure out what to +# do then. +# CONFIG_RMI4_F54 is not set # # Character devices @@ -2623,7 +2641,6 @@ CONFIG_N_HDLC=m CONFIG_N_GSM=m # CONFIG_TRACE_SINK is not set # CONFIG_DUMMY_IRQ is not set -# CONFIG_IBM_ASM is not set CONFIG_TIFM_CORE=m CONFIG_TIFM_7XX1=m CONFIG_TCG_TPM=m @@ -2660,7 +2677,7 @@ CONFIG_SERIAL_8250_RSA=y CONFIG_SERIAL_8250_DW=y # CONFIG_SERIAL_8250_INGENIC is not set CONFIG_SERIAL_8250_RT288X=y -CONFIG_SERIAL_8250_MID=y +# CONFIG_SERIAL_8250_MID is not set CONFIG_SERIAL_8250_MOXA=m CONFIG_CYCLADES=m # CONFIG_CYZ_INTR is not set @@ -2696,7 +2713,6 @@ CONFIG_SERIAL_ARC_NR_PORTS=1 # CONFIG_SERIAL_IFX6X60 is not set CONFIG_UNIX98_PTYS=y -CONFIG_DEVPTS_MULTIPLE_INSTANCES=y # CONFIG_LEGACY_PTYS is not set CONFIG_PRINTER=m CONFIG_LP_CONSOLE=y @@ -2759,10 +2775,8 @@ CONFIG_I2C_NFORCE2=m CONFIG_I2C_PARPORT=m CONFIG_I2C_PARPORT_LIGHT=m # CONFIG_I2C_ROBOTFUZZ_OSIF is not set -CONFIG_I2C_PASEMI=m CONFIG_I2C_PCA_PLATFORM=m # CONFIG_I2C_PIIX4 is not set -# CONFIG_SCx200_ACB is not set # CONFIG_I2C_SIS5595 is not set # CONFIG_I2C_SIS630 is not set # CONFIG_I2C_SIS96X is not set @@ -2783,9 +2797,6 @@ CONFIG_I2C_DIOLAN_U2C=m # # I2C Hardware Sensors Chip support # -CONFIG_SENSORS_ATK0110=m -CONFIG_SENSORS_ABITUGURU=m -CONFIG_SENSORS_ABITUGURU3=m CONFIG_SENSORS_AD7414=m CONFIG_SENSORS_AD7418=m CONFIG_SENSORS_ADC128D818=m @@ -2801,17 +2812,12 @@ CONFIG_SENSORS_ADS7828=m CONFIG_SENSORS_ADT7462=m CONFIG_SENSORS_ADT7470=m CONFIG_SENSORS_ADT7475=m -CONFIG_SENSORS_APPLESMC=m -CONFIG_SENSORS_ASB100=m CONFIG_SENSORS_ATXP1=m -CONFIG_SENSORS_CORETEMP=m CONFIG_SENSORS_DME1737=m CONFIG_SENSORS_DS1621=m -# CONFIG_DS1682 is not set CONFIG_SENSORS_F71805F=m CONFIG_SENSORS_F71882FG=m CONFIG_SENSORS_F75375S=m -CONFIG_SENSORS_FSCHMD=m CONFIG_SENSORS_FTSTEUTATES=m CONFIG_SENSORS_G760A=m CONFIG_SENSORS_G762=m @@ -2825,9 +2831,6 @@ CONFIG_SENSORS_IBMAEM=m CONFIG_SENSORS_IBMPEX=m # CONFIG_SENSORS_IIO_HWMON is not set CONFIG_SENSORS_IT87=m -CONFIG_SENSORS_K8TEMP=m -CONFIG_SENSORS_K10TEMP=m -CONFIG_SENSORS_LIS3LV02D=m CONFIG_SENSORS_LIS3_I2C=m # CONFIG_SENSORS_LIS3_SPI is not set CONFIG_SENSORS_LM63=m @@ -2871,14 +2874,7 @@ CONFIG_SENSORS_SMSC47B397=m CONFIG_SENSORS_TC74=m CONFIG_SENSORS_THMC50=m CONFIG_SENSORS_TMP401=m -CONFIG_APDS9802ALS=m -CONFIG_ISL29020=m -CONFIG_ISL29003=m -CONFIG_SENSORS_BH1770=m -CONFIG_SENSORS_APDS990X=m -CONFIG_SENSORS_TSL2550=m CONFIG_SENSORS_VIA686A=m -CONFIG_SENSORS_VIA_CPUTEMP=m CONFIG_SENSORS_VT1211=m CONFIG_SENSORS_VT8231=m CONFIG_SENSORS_W83627HF=m @@ -2905,7 +2901,6 @@ CONFIG_SENSORS_ASC7621=m CONFIG_SENSORS_EMC1403=m CONFIG_SENSORS_TMP102=m CONFIG_SENSORS_LTC4261=m -# CONFIG_SENSORS_BH1780 is not set # CONFIG_SENSORS_JC42 is not set # CONFIG_SENSORS_SMM665 is not set # CONFIG_SENSORS_EMC2103 is not set @@ -2937,6 +2932,7 @@ CONFIG_SENSORS_MAX1111=m CONFIG_SENSORS_POWR1220=m CONFIG_SENSORS_AD7314=m +# PMbus sensors CONFIG_PMBUS=m CONFIG_SENSORS_PMBUS=m CONFIG_SENSORS_MAX16064=m @@ -2951,7 +2947,18 @@ CONFIG_SENSORS_MAX197=m CONFIG_SENSORS_MAX31790=m CONFIG_SENSORS_TPS40422=m -# CONFIG_NTB is not set +# Misc Sensors +# CONFIG_AD525X_DPOT is not set +CONFIG_APDS9802ALS=m +CONFIG_ISL29003=m +CONFIG_ISL29020=m +CONFIG_SENSORS_BH1770=m +CONFIG_SENSORS_APDS990X=m +CONFIG_SENSORS_LIS3LV02D=m +CONFIG_SENSORS_TSL2550=m +# CONFIG_HMC6352 is not set +# CONFIG_DS1682 is not set +# CONFIG_TI_DAC7512 is not set # Industrial I/O subsystem configuration CONFIG_IIO=m @@ -3115,7 +3122,6 @@ CONFIG_PA12203001=m # CONFIG_TSYS01 is not set # CONFIG_TSYS02D is not set # CONFIG_HI8435 is not set -# CONFIG_IMX7D_ADC is not set # CONFIG_AM2315 is not set # CONFIG_BMI160_I2C is not set # CONFIG_BMI160_SPI is not set @@ -3129,6 +3135,17 @@ CONFIG_PA12203001=m # CONFIG_MCP4131 is not set # CONFIG_HP03 is not set # CONFIG_HP206C is not set +# CONFIG_DMARD06 is not set +# CONFIG_DMARD09 is not set +# CONFIG_MC3230 is not set +# CONFIG_TI_ADC12138 is not set +# CONFIG_TI_ADC161S626 is not set +# CONFIG_AD8801 is not set +# CONFIG_SI1145 is not set +# CONFIG_AK8974 is not set +# CONFIG_ZPA2326 is not set +# CONFIG_MAXIM_THERMOCOUPLE is not set +# CONFIG_LTC2485 is not set # staging IIO drivers # CONFIG_AD7291 is not set @@ -3147,11 +3164,8 @@ CONFIG_PA12203001=m # CONFIG_IIO_SIMPLE_DUMMY is not set # CONFIG_ADIS16201 is not set # CONFIG_ADIS16203 is not set -# CONFIG_ADIS16204 is not set # CONFIG_ADIS16209 is not set -# CONFIG_ADIS16220 is not set # CONFIG_ADIS16240 is not set -# CONFIG_LIS3L02DQ is not set # CONFIG_SCA3000 is not set # CONFIG_AD7780 is not set # CONFIG_AD7816 is not set @@ -3168,16 +3182,10 @@ CONFIG_PA12203001=m # CONFIG_AD2S1200 is not set # CONFIG_AD2S1210 is not set +# End sensors - -# CONFIG_HMC6352 is not set -# CONFIG_BMP085 is not set -# CONFIG_BMP085_I2C is not set -# CONFIG_PCH_PHUB is not set # CONFIG_USB_SWITCH_FSA9480 is not set # CONFIG_SRAM is not set -# CONFIG_TI_DAC7512 is not set -# CONFIG_BMP085_SPI is not set # CONFIG_MMA7455_SPI is not set # CONFIG_LATTICE_ECP3_CONFIG is not set @@ -3215,7 +3223,6 @@ CONFIG_IPMI_HANDLER=m CONFIG_IPMI_DEVICE_INTERFACE=m CONFIG_IPMI_WATCHDOG=m CONFIG_IPMI_SI=m -# CONFIG_IPMI_SI_PROBE_DEFAULTS is not set CONFIG_IPMI_SSIF=m CONFIG_IPMI_POWEROFF=m @@ -3226,13 +3233,14 @@ CONFIG_WATCHDOG=y CONFIG_WATCHDOG_CORE=y CONFIG_WATCHDOG_SYSFS=y # CONFIG_WATCHDOG_NOWAYOUT is not set +# CONFIG_WATCHDOG_PRETIMEOUT_GOV is not set CONFIG_SOFT_WATCHDOG=m +CONFIG_WDAT_WDT=m CONFIG_WDTPCI=m # CONFIG_ACQUIRE_WDT is not set # CONFIG_ADVANTECH_WDT is not set # CONFIG_EUROTECH_WDT is not set CONFIG_IB700_WDT=m -# CONFIG_SCx200_WDT is not set # CONFIG_60XX_WDT is not set CONFIG_W83877F_WDT=m CONFIG_W83627HF_WDT=m @@ -3289,6 +3297,7 @@ CONFIG_RTC_DRV_CMOS=y CONFIG_RTC_DRV_ABX80X=m CONFIG_RTC_DRV_DS1307=m CONFIG_RTC_DRV_DS1307_HWMON=y +# CONFIG_RTC_DRV_DS1307_CENTURY is not set CONFIG_RTC_DRV_DS1511=m CONFIG_RTC_DRV_DS1553=m CONFIG_RTC_DRV_DS1685_FAMILY=m @@ -3365,25 +3374,9 @@ CONFIG_R3964=m # CONFIG_APPLICOM is not set # CONFIG_SONYPI is not set -# -# AGP Support -# -CONFIG_AGP=y -CONFIG_AGP_ALI=y -CONFIG_AGP_ATI=y -CONFIG_AGP_AMD=y -CONFIG_AGP_AMD64=y -CONFIG_AGP_INTEL=y -CONFIG_AGP_NVIDIA=y -CONFIG_AGP_SIS=y -CONFIG_AGP_SWORKS=y -CONFIG_AGP_VIA=y -CONFIG_AGP_EFFICEON=y - CONFIG_VGA_ARB=y CONFIG_VGA_ARB_MAX_GPUS=16 - CONFIG_DRM=m CONFIG_DRM_ANALOGIX_ANX78XX=m # CONFIG_DRM_ARCPGU is not set @@ -3399,6 +3392,7 @@ CONFIG_DRM_RADEON_USERPTR=y CONFIG_DRM_AMDGPU=m CONFIG_DRM_AMD_ACP=y # CONFIG_DRM_AMDGPU_CIK is not set +# CONFIG_DRM_AMDGPU_SI is not set CONFIG_DRM_AMDGPU_USERPTR=y # CONFIG_DRM_AMDGPU_GART_DEBUGFS is not set CONFIG_DRM_AMD_POWERPLAY=y @@ -3431,12 +3425,15 @@ CONFIG_DRM_VIRTIO_GPU=m # CONFIG_DRM_PANEL is not set # CONFIG_DRM_PANEL_SIMPLE is not set # CONFIG_DRM_PANEL_SAMSUNG_S6E8AA0 is not set +# CONFIG_DRM_PANEL_JDI_LT070ME05000 is not set CONFIG_DRM_VGEM=m -# CONFIG_DRM_MALI_DISPLAY is not set # CONFIG_DRM_SII902X is not set # CONFIG_DRM_TOSHIBA_TC358767 is not set # CONFIG_DRM_I2C_ADV7533 is not set +# CONFIG_DRM_DUMB_VGA_DAC is not set +# CONFIG_DRM_LEGACY is not set +# CONFIG_SW_SYNC is not set # # PCMCIA character devices @@ -3551,7 +3548,6 @@ CONFIG_VIDEO_SAA7164=m CONFIG_VIDEO_TM6000=m CONFIG_VIDEO_TM6000_ALSA=m CONFIG_VIDEO_TM6000_DVB=m -# CONFIG_VIDEO_TIMBERDALE is not set # CONFIG_VIDEO_M5MOLS is not set # CONFIG_VIDEO_TW68 is not set # CONFIG_VIDEO_VIVID is not set @@ -3560,6 +3556,7 @@ CONFIG_VIDEO_USBTV=m CONFIG_VIDEO_TW686X=m # Staging version? # CONFIG_VIDEO_TW686X_KH is not set +# CONFIG_VIDEO_TW5864 is not set CONFIG_USB_VIDEO_CLASS=m CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y @@ -3849,12 +3846,10 @@ CONFIG_SND_SEQ_HRTIMER_DEFAULT=y CONFIG_SND_SEQ_DUMMY=m CONFIG_SND_SEQUENCER=y CONFIG_SND_SEQUENCER_OSS=y -CONFIG_SND_SEQ_RTCTIMER_DEFAULT=y CONFIG_SND_OSSEMUL=y CONFIG_SND_MIXER_OSS=y CONFIG_SND_PCM_OSS=y CONFIG_SND_PCM_OSS_PLUGINS=y -CONFIG_SND_RTCTIMER=y CONFIG_SND_DYNAMIC_MINORS=y CONFIG_SND_MAX_CARDS=32 # CONFIG_SND_SUPPORT_OLD_API is not set @@ -4078,10 +4073,9 @@ CONFIG_USB_UAS=m # # USB Human Interface Devices (HID) # -CONFIG_USB_HID=y - CONFIG_HID=y +CONFIG_USB_HID=y CONFIG_I2C_HID=m CONFIG_HID_BATTERY_STRENGTH=y # debugging default is y upstream now @@ -4423,6 +4417,7 @@ CONFIG_USB_ISIGHTFW=m CONFIG_USB_YUREX=m CONFIG_USB_EZUSB_FX2=m CONFIG_USB_HSIC_USB3503=m +CONFIG_USB_HSIC_USB4604=m # CONFIG_USB_LINK_LAYER_TEST is not set CONFIG_USB_CHAOSKEY=m CONFIG_UCSI=m @@ -4457,6 +4452,7 @@ CONFIG_USB_XUSBATM=m # CONFIG_USB_OTG is not set # CONFIG_USB_OTG_WHITELIST is not set CONFIG_USB_LED_TRIG=y +CONFIG_USB_LEDS_TRIGGER_USBPORT=m CONFIG_USB_ANNOUNCE_NEW_DEVICES=y @@ -4549,6 +4545,7 @@ CONFIG_MFD_VIPERBOARD=m # CONFIG_MFD_TC3589X is not set # CONFIG_MFD_TC6393XB is not set # CONFIG_MFD_TI_AM335X_TSCADC is not set +# CONFIG_MFD_TI_LP873X is not set # CONFIG_MFD_TIMBERDALE is not set # CONFIG_MFD_TPS65086 is not set # CONFIG_MFD_TPS65090 is not set @@ -4568,10 +4565,12 @@ CONFIG_MFD_VIPERBOARD=m # CONFIG_MFD_WM8350 is not set # CONFIG_MFD_WM8400 is not set # CONFIG_MFD_WM8994 is not set +# CONFIG_MFD_EXYNOS_LPASS is not set # CONFIG_TPS6507X is not set # CONFIG_TS4800_IRQ is not set # CONFIG_TWL4030_CORE is not set # CONFIG_TWL6040_CORE is not set +# CONFIG_QCOM_EBI2 is not set # # File systems @@ -4587,7 +4586,7 @@ CONFIG_EXT4_FS=y CONFIG_EXT4_USE_FOR_EXT2=y CONFIG_EXT4_FS_POSIX_ACL=y CONFIG_EXT4_FS_SECURITY=y -# CONFIG_EXT4_ENCRYPTION is not set +CONFIG_EXT4_ENCRYPTION=y CONFIG_JBD2=y CONFIG_FS_MBCACHE=y CONFIG_REISERFS_FS=m @@ -4747,8 +4746,7 @@ CONFIG_NFSD_PNFS=y CONFIG_NFSD_BLOCKLAYOUT=y CONFIG_NFSD_SCSILAYOUT=y CONFIG_NFSD_V4_SECURITY_LABEL=y -# This is labeled as 'bare minimum' and 'not for production' -# CONFIG_NFSD_FLEXFILELAYOUT is not set +CONFIG_NFSD_FLEXFILELAYOUT=y CONFIG_NFS_FSCACHE=y # CONFIG_NFS_USE_LEGACY_DNS is not set CONFIG_PNFS_OBJLAYOUT=m @@ -4841,11 +4839,10 @@ CONFIG_UNIXWARE_DISKLABEL=y # CONFIG_ULTRIX_PARTITION is not set # CONFIG_CMDLINE_PARTITION is not set -CONFIG_NLS=y - # # Native Language Support # +CONFIG_NLS=y CONFIG_NLS_DEFAULT="utf8" CONFIG_NLS_CODEPAGE_437=y CONFIG_NLS_CODEPAGE_737=m @@ -4952,6 +4949,8 @@ CONFIG_BOOT_PRINTK_DELAY=y CONFIG_DEBUG_LIST=y CONFIG_DEBUG_SHIRQ=y CONFIG_DEBUG_DEVRES=y +# This breaks so many things right now :( +# CONFIG_DEBUG_TEST_DRIVER_REMOVE is not set CONFIG_DEBUG_RODATA_TEST=y CONFIG_DEBUG_NX_TEST=m CONFIG_DEBUG_SET_MODULE_RONX=y @@ -4959,7 +4958,6 @@ CONFIG_DEBUG_BOOT_PARAMS=y CONFIG_DEBUG_VM=y # CONFIG_DEBUG_VM_VMACACHE is not set # CONFIG_DEBUG_VM_RB is not set # revisit this if performance isn't horrible -# CONFIG_DEBUG_STRICT_USER_COPY_CHECKS is not set CONFIG_LOCKUP_DETECTOR=y # CONFIG_DEBUG_INFO_REDUCED is not set # CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set @@ -5026,7 +5024,6 @@ CONFIG_SECCOMP=y CONFIG_STRICT_DEVMEM=y CONFIG_IO_STRICT_DEVMEM=y - # # Cryptographic options # @@ -5103,6 +5100,7 @@ CONFIG_CRYPTO_ANSI_CPRNG=m # CONFIG_CRYPTO_DRBG_MENU is not set CONFIG_CRYPTO_DEV_HIFN_795X=m CONFIG_CRYPTO_DEV_HIFN_795X_RNG=y +CONFIG_CRYPTO_DEV_CHELSIO=m CONFIG_CRYPTO_PCRYPT=m CONFIG_CRYPTO_USER=m CONFIG_CRYPTO_RSA=m @@ -5117,10 +5115,6 @@ CONFIG_CRYPTO_DRBG_HASH=y CONFIG_CRYPTO_DRBG_CTR=y CONFIG_CRYPTO_KEYWRAP=m - - -# Random number generation - # # Library routines # @@ -5289,8 +5283,6 @@ CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y CONFIG_CPU_FREQ_STAT=y CONFIG_CPU_FREQ_STAT_DETAILS=y - - # CONFIG_MOUSE_ATIXL is not set CONFIG_RADIO_ADAPTERS=y @@ -5355,7 +5347,6 @@ CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM=y # CONFIG_SND_SOC_PCM512x_SPI is not set # CONFIG_SND_SOC_PCM179X_I2C is not set # CONFIG_SND_SOC_PCM179X_SPI is not set -# CONFIG_SND_SOC_QCOM is not set # CONFIG_SND_SOC_SGTL5000 is not set # CONFIG_SND_SOC_SIRF_AUDIO_CODEC is not set # CONFIG_SND_SOC_TAS5086 is not set @@ -5398,7 +5389,6 @@ CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM=y # CONFIG_SND_SOC_TLV320AIC31XX is not set # CONFIG_SND_SOC_TAS2552 is not set # CONFIG_SND_SOC_CS4265 is not set -# CONFIG_SND_SOC_IMX_ES8328 is not set # CONFIG_SND_SOC_FSL_ASOC_CARD is not set # CONFIG_SND_EDMA_SOC is not set # CONFIG_SND_SOC_ARNDALE_RT5631_ALC5631 is not set @@ -5424,7 +5414,8 @@ CONFIG_SND_SOC_AMD_ACP=m # CONFIG_SND_SOC_MAX98504 is not set # CONFIG_SND_SOC_MAX9860 is not set # CONFIG_SND_SOC_WM8985 is not set - +# CONFIG_SND_SOC_NAU8810 is not set +# CONFIG_SND_SIMPLE_SCU_CARD is not set CONFIG_BALLOON_COMPACTION=y CONFIG_COMPACTION=y @@ -5444,8 +5435,6 @@ CONFIG_LEDS_CLASS_FLASH=m # CONFIG_LEDS_TLC591XX is not set # CONFIG_LEDS_KTD2692 is not set # CONFIG_LEDS_AAT1290 is not set -# -CONFIG_LEDS_DELL_NETBOOKS=m # CONFIG_LEDS_TCA6507 is not set # CONFIG_LEDS_LM355x is not set # CONFIG_LEDS_OT200 is not set @@ -5457,7 +5446,6 @@ CONFIG_LEDS_DELL_NETBOOKS=m CONFIG_LEDS_TRIGGERS=y CONFIG_LEDS_TRIGGER_TIMER=m CONFIG_LEDS_TRIGGER_ONESHOT=m -CONFIG_LEDS_TRIGGER_IDE_DISK=y CONFIG_LEDS_TRIGGER_HEARTBEAT=m CONFIG_LEDS_TRIGGER_BACKLIGHT=m # CONFIG_LEDS_TRIGGER_CPU is not set @@ -5481,11 +5469,14 @@ CONFIG_LEDS_TRIGGER_DISK=y CONFIG_LEDS_WM8350=m CONFIG_LEDS_WM831X_STATUS=m # CONFIG_LEDS_DAC124S085 is not set +# CONFIG_LEDS_IS31FL319X is not set # Do not enable the below. They selects the fw user helper, which we don't want # CONFIG_LEDS_LP5521 is not set # CONFIG_LEDS_LP5523 is not set # CONFIG_LEDS_LP5562 is not set # CONFIG_LEDS_LP55XX_COMMON is not set +# CONFIG_LEDS_PM8058 is not set +CONFIG_LEDS_MLXCPLD=m CONFIG_DMADEVICES=y CONFIG_DMA_ENGINE=y @@ -5514,6 +5505,7 @@ CONFIG_FTRACE=y CONFIG_DYNAMIC_FTRACE=y # CONFIG_IRQSOFF_TRACER is not set CONFIG_SCHED_TRACER=y +CONFIG_HWLAT_TRACER=y CONFIG_CONTEXT_SWITCH_TRACER=y CONFIG_TRACER_SNAPSHOT=y # CONFIG_TRACER_SNAPSHOT_PER_CPU_SWAP is not set @@ -5532,7 +5524,7 @@ CONFIG_RING_BUFFER_BENCHMARK=m CONFIG_FUNCTION_TRACER=y CONFIG_STACK_TRACER=y # CONFIG_FUNCTION_GRAPH_TRACER is not set -# CONFIG_HIST_TRIGGERS is not set +CONFIG_HIST_TRIGGERS=y CONFIG_KPROBES=y CONFIG_KPROBE_EVENT=y @@ -5555,6 +5547,7 @@ CONFIG_KS0108_PORT=0x378 CONFIG_KS0108_DELAY=2 CONFIG_CFAG12864B=y CONFIG_CFAG12864B_RATE=20 +# CONFIG_IMG_ASCII_LCD is not set # CONFIG_PHANTOM is not set @@ -5684,6 +5677,8 @@ CONFIG_NET_DSA_HWMON=y CONFIG_NET_DSA_MV88E6060=m CONFIG_NET_DSA_MV88E6XXX=m CONFIG_NET_DSA_BCM_SF2=m +CONFIG_NET_DSA_MV88E6XXX_GLOBAL2=y +CONFIG_NET_DSA_QCA8K=m CONFIG_B53=m CONFIG_B53_SPI_DRIVER=m @@ -5721,9 +5716,12 @@ CONFIG_UWB_I1480U=m CONFIG_STAGING=y # CONFIG_ANDROID is not set +# CONFIG_GREYBUS is not set # CONFIG_STAGING_BOARD is not set CONFIG_STAGING_MEDIA=y -# CONFIG_MEDIA_CEC is not set +CONFIG_MEDIA_CEC=y +# CONFIG_MEDIA_CEC_DEBUG is not set +CONFIG_USB_PULSE8_CEC=m # CONFIG_DVB_AS102 is not set # CONFIG_SLICOSS is not set # CONFIG_VIDEO_DT3155 is not set @@ -5763,8 +5761,9 @@ CONFIG_USBIP_CORE=m CONFIG_USBIP_VHCI_HCD=m CONFIG_USBIP_HOST=m CONFIG_USBIP_VUDC=m +CONFIG_USBIP_VHCI_HC_PORTS=8 +CONFIG_USBIP_VHCI_NR_HCS=1 # CONFIG_USBIP_DEBUG is not set -# CONFIG_INTEL_MEI is not set # CONFIG_VT6655 is not set # CONFIG_IPACK_BUS is not set # CONFIG_LUSTRE_FS is not set @@ -5779,7 +5778,6 @@ CONFIG_USBIP_VUDC=m # CONFIG_DVB_MN88473 is not set # CONFIG_FB_TFT is not set # CONFIG_FB_SM750 is not set -# CONFIG_STAGING_RDMA is not set # CONFIG_WILC1000_SDIO is not set # CONFIG_WILC1000_SPI is not set # CONFIG_LNET is not set @@ -5838,6 +5836,7 @@ CONFIG_FANOTIFY_ACCESS_PERMISSIONS=y # CONFIG_EXTCON is not set # CONFIG_EXTCON_ADC_JACK is not set +# CONFIG_EXTCON_QCOM_SPMI_MISC is not set # CONFIG_MEMORY is not set CONFIG_PPS=m @@ -5874,6 +5873,7 @@ CONFIG_I2C_DESIGNWARE_PCI=m # CONFIG_W1_MASTER_GPIO is not set # CONFIG_LEDS_GPIO is not set CONFIG_GPIO_SYSFS=y +# CONFIG_GPIO_MOCKUP is not set # CONFIG_GPIO_GENERIC_PLATFORM is not set # CONFIG_GPIO_MAX732X is not set # CONFIG_GPIO_PCA953X is not set @@ -5899,8 +5899,6 @@ CONFIG_GPIO_VIPERBOARD=m # CONFIG_GPIO_BT8XX is not set # CONFIG_GPIO_SX150X is not set # CONFIG_GPIO_GRGPIO is not set -# CONFIG_GPIO_PL061 is not set -# CONFIG_GPIO_BCM_KONA is not set # CONFIG_GPIO_SCH311X is not set # CONFIG_GPIO_DWAPB is not set # CONFIG_GPIO_74X164 is not set @@ -5916,12 +5914,10 @@ CONFIG_GPIO_VIPERBOARD=m # CONFIG_GPIO_TPIC2810 is not set # CONFIG_GPIO_MPC8XXX is not set # CONFIG_GPIO_PISOSR is not set -# CONFIG_GPIO_TS4800 is not set # CONFIG_GPIO_TPS65218 is not set # CONFIG_GPIO_104_DIO_48E is not set # CONFIG_GPIO_WS16C48 is not set - -# FIXME: Why? +# CONFIG_GPIO_TS4900 is not set CONFIG_TEST_KSTRTOX=y CONFIG_XZ_DEC=y @@ -5976,6 +5972,7 @@ CONFIG_PSTORE_RAM=m CONFIG_CHROME_PLATFORMS=y # CONFIG_CROS_KBD_LED_BACKLIGHT is not set +# CONFIG_GOOGLE_FIRMWARE is not set CONFIG_BCMA=m CONFIG_BCMA_BLOCKIO=y @@ -5986,18 +5983,14 @@ CONFIG_BCMA_DRIVER_GMAC_CMN=y CONFIG_BCMA_DRIVER_GPIO=y # CONFIG_BCMA_DEBUG is not set -# CONFIG_GOOGLE_FIRMWARE is not set -# CONFIG_INTEL_MID_PTI is not set CONFIG_IOMMU_SUPPORT=y -# CONFIG_IOMMU_IO_PGTABLE_LPAE is not set -# CONFIG_IOMMU_IO_PGTABLE_LPAE_SELFTEST is not set # CONFIG_MAILBOX is not set # CONFIG_ALTERA_MBOX is not set # CONFIG_MAILBOX_TEST is not set -# CONFIG_RESET_CONTROLLER is not set # CONFIG_TI_SYSCON_RESET is not set + CONFIG_FMC=m CONFIG_FMC_FAKEDEV=m CONFIG_FMC_TRIVIAL=m @@ -6015,9 +6008,6 @@ CONFIG_POWERCAP=y CONFIG_CPU_IDLE=y # CONFIG_CPU_IDLE_GOV_LADDER is not set -# CONFIG_ARM_ARCH_TIMER_EVTSTREAM is not set -# CONFIG_ASM9260_TIMER is not set - # CONFIG_HMC_DRV is not set # CONFIG_PM_DEVFREQ is not set diff --git a/config-nodebug b/config-nodebug index 4bd461d8f..0adda7aa3 100644 --- a/config-nodebug +++ b/config-nodebug @@ -51,6 +51,7 @@ CONFIG_DEBUG_OBJECTS_ENABLE_DEFAULT=1 CONFIG_X86_PTDUMP=y # CONFIG_ARM64_PTDUMP is not set # CONFIG_EFI_PGT_DUMP is not set +# CONFIG_EFI_TEST is not set # CONFIG_CAN_DEBUG_DEVICES is not set diff --git a/config-powerpc64 b/config-powerpc64 index 0edf37b51..5729ee5d0 100644 --- a/config-powerpc64 +++ b/config-powerpc64 @@ -76,7 +76,6 @@ CONFIG_MACINTOSH_DRIVERS=y CONFIG_ADB=y CONFIG_ADB_PMU=y CONFIG_ADB_PMU_LED=y -CONFIG_ADB_PMU_LED_IDE=y CONFIG_I2C_POWERMAC=y CONFIG_PMAC_RACKMETER=m CONFIG_PMAC_APM_EMU=m @@ -97,6 +96,7 @@ CONFIG_WINDFARM_PM121=y CONFIG_CPU_FREQ_PMAC64=y CONFIG_SERIAL_PMACZILOG=m # CONFIG_SERIAL_PMACZILOG_TTYS is not set +CONFIG_AGP=y CONFIG_AGP_UNINORTH=y # CONFIG_PMAC_BACKLIGHT_LEGACY is not set diff --git a/config-powerpc64-generic b/config-powerpc64-generic index fcd3a49a4..d67acd95a 100644 --- a/config-powerpc64-generic +++ b/config-powerpc64-generic @@ -148,7 +148,6 @@ CONFIG_IO_EVENT_IRQ=y # CONFIG_RTC is not set # CONFIG_GEN_RTC is not set -# CONFIG_GEN_RTC_X is not set CONFIG_RTC_DRV_GENERIC=y # CONFIG_CMDLINE_BOOL is not set @@ -184,6 +183,7 @@ CONFIG_FB_MATROX_G=y # CONFIG_FB_VGA16 is not set # CONFIG_FB_ATY128 is not set # CONFIG_FB_ATY is not set +# CONFIG_AGP is not set # CONFIG_SND_SOC is not set # CONFIG_INPUT_PCSPKR is not set @@ -222,11 +222,6 @@ CONFIG_USB_OHCI_HCD_PPC_OF_LE=y # CONFIG_MACINTOSH_DRIVERS is not set # CONFIG_EDAC_CPC925 is not set - -CONFIG_EDAC=y -CONFIG_EDAC_MM_EDAC=m -CONFIG_EDAC_LEGACY_SYSFS=y - # CONFIG_AXON_RAM is not set CONFIG_SUSPEND_FREEZER=y @@ -310,7 +305,6 @@ CONFIG_PPC_EMULATED_STATS=y CONFIG_SWIOTLB=y CONFIG_PPC_DISABLE_WERROR=y -# CONFIG_STRICT_MM_TYPECHECKS is not set # CONFIG_XILINX_LL_TEMAC is not set # CONFIG_XILINX_EMACLITE is not set diff --git a/config-s390x b/config-s390x index e235e9e01..8ead330ec 100644 --- a/config-s390x +++ b/config-s390x @@ -1,7 +1,5 @@ CONFIG_64BIT=y -# CONFIG_MARCH_Z900 is not set -CONFIG_MARCH_Z9_109=y -# CONFIG_MARCH_Z990 is not set +CONFIG_MARCH_Z10=y CONFIG_NR_CPUS=64 CONFIG_COMPAT=y @@ -223,7 +221,6 @@ CONFIG_SCM_BLOCK_CLUSTER_WRITE=y CONFIG_PCI=y CONFIG_PCI_NR_FUNCTIONS=64 -CONFIG_PCI_NR_MSI=256 CONFIG_HOTPLUG_PCI_CPCI=y CONFIG_HOTPLUG_PCI_SHPC=y CONFIG_HOTPLUG_PCI_S390=y @@ -253,8 +250,7 @@ CONFIG_HOTPLUG_PCI_S390=y # CONFIG_INPUT_TABLET is not set # CONFIG_INPUT_TOUCHSCREEN is not set # CONFIG_INPUT_MISC is not set -# CONFIG_GAMEPORT_EMU10K1 is not set -# CONFIG_GAMEPORT_FM801 is not set +# CONFIG_GAMEPORT is not set # CONFIG_SERIO is not set # CONFIG_ACCESSIBILITY is not set diff --git a/config-x86-32-generic b/config-x86-32-generic index ddc9f3047..7cf7362e5 100644 --- a/config-x86-32-generic +++ b/config-x86-32-generic @@ -22,6 +22,7 @@ CONFIG_M686=y # CONFIG_MWINCHIP3D is not set # CONFIG_MCYRIXIII is not set # CONFIG_MVIAC3_2 is not set +# CONFIG_SCx200 is not set # CONFIG_STA2X11 is not set CONFIG_NR_CPUS=32 @@ -56,8 +57,6 @@ CONFIG_FB_SSD1307=m # CONFIG_PCI_GOMMCONFIG is not set CONFIG_PCI_GOANY=y -CONFIG_IBM_ASM=m - # # APM (Advanced Power Management) BIOS Support # @@ -68,7 +67,6 @@ CONFIG_APM_CPU_IDLE=y # CONFIG_APM_DISPLAY_BLANK is not set # CONFIG_APM_ALLOW_INTS is not set - # CONFIG_X86_POWERNOW_K6 is not set CONFIG_X86_POWERNOW_K7=y # CONFIG_X86_GX_SUSPMOD is not set @@ -82,7 +80,6 @@ CONFIG_X86_LONGRUN=y # e_powersaver is dangerous # CONFIG_X86_E_POWERSAVER is not set - # CONFIG_4KSTACKS is not set CONFIG_PCI_DIRECT=y @@ -98,7 +95,7 @@ CONFIG_I2C_ALI1563=m CONFIG_I2C_SIS5595=m CONFIG_I2C_SIS630=m -CONFIG_SCx200_ACB=m +# CONFIG_SCx200_ACB is not set # CONFIG_X86_REBOOTFIXUPS is not set @@ -118,19 +115,16 @@ CONFIG_PHYSICAL_START=0x400000 # CONFIG_KEXEC_JUMP is not set CONFIG_CRYPTO_AES_586=y -CONFIG_CRYPTO_DEV_GEODE=m CONFIG_CRYPTO_TWOFISH_586=m CONFIG_VIDEO_CAFE_CCIC=m - CONFIG_MTD_NAND_CAFE=m CONFIG_LBDAF=y # CONFIG_PROVIDE_OHCI1394_DMA_INIT is not set - CONFIG_OLPC=y CONFIG_BATTERY_OLPC=y CONFIG_MOUSE_PS2_OLPC=y @@ -138,17 +132,17 @@ CONFIG_OLPC_XO1_PM=y CONFIG_OLPC_XO15_SCI=y CONFIG_OLPC_XO1_RTC=y CONFIG_OLPC_XO1_SCI=y -# CONFIG_ALIX is not set -# staging +CONFIG_CRYPTO_DEV_GEODE=m # CONFIG_FB_OLPC_DCON is not set +# CONFIG_ALIX is not set + # CONFIG_SPARSE_IRQ is not set CONFIG_RCU_FANOUT=32 # CONFIG_X86_ANCIENT_MCE is not set - CONFIG_I2C_PXA=m # CONFIG_INTEL_TXT is not set @@ -167,8 +161,6 @@ CONFIG_X86_32_IRIS=m CONFIG_POWER_RESET_GPIO=y # CONFIG_POWER_RESET_GPIO_RESTART is not set - - CONFIG_MTD_OF_PARTS=y CONFIG_MTD_PHYSMAP_OF=m CONFIG_SERIAL_OF_PLATFORM=m @@ -206,10 +198,7 @@ CONFIG_OF=y # CONFIG_MLX5_INFINIBAND is not set # CONFIG_PINCTRL_SINGLE is not set # CONFIG_PINCTRL_BCM281XX is not set -# CONFIG_PINCTRL_APQ8064 is not set -# CONFIG_PINCTRL_IPQ8064 is not set # CONFIG_COMMON_CLK_SI570 is not set -# CONFIG_COMMON_CLK_QCOM is not set # CONFIG_DRM_PANEL_SHARP_LQ101R1SX01 is not set # CONFIG_DRM_PANEL_SHARP_LS043T1LE01 is not set # CONFIG_KEYBOARD_BCM is not set diff --git a/config-x86-generic b/config-x86-generic index a44190bd7..8620085d3 100644 --- a/config-x86-generic +++ b/config-x86-generic @@ -19,7 +19,6 @@ CONFIG_MICROCODE_AMD=y CONFIG_PERF_EVENTS_AMD_POWER=m CONFIG_PERF_EVENTS_INTEL_UNCORE=m CONFIG_PERF_EVENTS_INTEL_RAPL=m -CONFIG_PERF_EVENTS_CSTATE=m CONFIG_PERF_EVENTS_INTEL_CSTATE=m CONFIG_X86_MSR=y @@ -93,7 +92,6 @@ CONFIG_ACPI_SLEEP=y CONFIG_ACPI_THERMAL=y CONFIG_ACPI_TOSHIBA=m CONFIG_ACPI_VIDEO=m -CONFIG_ACPI_INITRD_TABLE_OVERRIDE=y CONFIG_ACPI_CONFIGFS=m # FIXME: Next two are deprecated. Remove them when they disappear upstream # CONFIG_ACPI_PROCFS_POWER is not set @@ -122,7 +120,7 @@ CONFIG_GPIO_CRYSTAL_COVE=y CONFIG_AXP288_ADC=y CONFIG_AXP288_FUEL_GAUGE=y CONFIG_PWM_CRC=y - +CONFIG_GPIO_WHISKEY_COVE=y CONFIG_X86_INTEL_PSTATE=y CONFIG_X86_ACPI_CPUFREQ=m @@ -156,9 +154,12 @@ CONFIG_PCI_MMCONFIG=y CONFIG_PCI_BIOS=y CONFIG_VMD=m +CONFIG_INTEL_BXT_PMIC_THERMAL=m + CONFIG_HOTPLUG_PCI_COMPAQ=m # CONFIG_HOTPLUG_PCI_COMPAQ_NVRAM is not set CONFIG_HOTPLUG_PCI_IBM=m +CONFIG_IBM_ASM=m CONFIG_IPW2100=m CONFIG_IPW2100_MONITOR=y @@ -193,10 +194,7 @@ CONFIG_I2C_DESIGNWARE_BAYTRAIL=y # CONFIG_DELL_RBU is not set CONFIG_DCDBAS=m -CONFIG_EDAC=y -CONFIG_EDAC_MM_EDAC=m -# CONFIG_EDAC_AMD64_ERROR_INJECTION is not set -CONFIG_EDAC_AMD64=m +# CONFIG_EDAC_AMD64 is not set CONFIG_EDAC_AMD76X=m CONFIG_EDAC_AMD8111=m CONFIG_EDAC_AMD8131=m @@ -215,7 +213,6 @@ CONFIG_EDAC_I7CORE=m CONFIG_EDAC_R82600=m CONFIG_EDAC_X38=m CONFIG_EDAC_DECODE_MCE=m -CONFIG_EDAC_LEGACY_SYSFS=y CONFIG_EDAC_IE31200=m CONFIG_SCHED_MC=y @@ -279,6 +276,21 @@ CONFIG_PVPANIC=m CONFIG_TOUCHSCREEN_GOODIX=m CONFIG_TOUCHSCREEN_SURFACE3_SPI=m +# +# AGP Support +# +CONFIG_AGP=y +CONFIG_AGP_ALI=y +CONFIG_AGP_ATI=y +CONFIG_AGP_AMD=y +CONFIG_AGP_AMD64=y +CONFIG_AGP_INTEL=y +CONFIG_AGP_NVIDIA=y +CONFIG_AGP_SIS=y +CONFIG_AGP_SWORKS=y +CONFIG_AGP_VIA=y +CONFIG_AGP_EFFICEON=y + # CONFIG_SMSC37B787_WDT is not set CONFIG_VIA_WDT=m CONFIG_IE6XX_WDT=m @@ -353,6 +365,8 @@ CONFIG_THINKPAD_ACPI_VIDEO=y CONFIG_THINKPAD_ACPI_ALSA_SUPPORT=y # CONFIG_THINKPAD_ACPI_UNSAFE_LEDS is not set +CONFIG_LEDS_DELL_NETBOOKS=m + CONFIG_MACINTOSH_DRIVERS=y CONFIG_DMIID=y @@ -364,11 +378,21 @@ CONFIG_ISCSI_IBFT=m CONFIG_INTEL_IOATDMA=m CONFIG_INTEL_IDMA64=m -CONFIG_SENSORS_I5K_AMB=m -CONFIG_SENSORS_FAM15H_POWER=m +CONFIG_SENSORS_ABITUGURU=m +CONFIG_SENSORS_ABITUGURU3=m CONFIG_SENSORS_ACPI_POWER=m -CONFIG_SENSORS_I5500=m +CONFIG_SENSORS_APPLESMC=m +CONFIG_SENSORS_ASB100=m +CONFIG_SENSORS_ATK0110=m +CONFIG_SENSORS_CORETEMP=m CONFIG_SENSORS_DELL_SMM=m +CONFIG_SENSORS_FAM15H_POWER=m +CONFIG_SENSORS_FSCHMD=m +CONFIG_SENSORS_I5K_AMB=m +CONFIG_SENSORS_I5500=m +CONFIG_SENSORS_K8TEMP=m +CONFIG_SENSORS_K10TEMP=m +CONFIG_SENSORS_VIA_CPUTEMP=m # CONFIG_CPA_DEBUG is not set @@ -564,11 +588,9 @@ CONFIG_SND_SOC_INTEL_SKL_NAU88L25_SSM4567_MACH=m CONFIG_SND_SOC_INTEL_SKL_NAU88L25_MAX98357A_MACH=m CONFIG_SND_SOC_INTEL_BXT_RT298_MACH=m CONFIG_SND_SOC_INTEL_BXT_DA7219_MAX98357A_MACH=m +CONFIG_SND_SOC_INTEL_BDW_RT5677_MACH=m CONFIG_SND_SOC_AC97_CODEC=m # CONFIG_SND_SOC_TAS571X is not set -# CONFIG_SND_SUN4I_CODEC is not set -# CONFIG_SND_SUN4I_SPDIF is not set -# CONFIG_SND_SUN4I_I2S is not set CONFIG_INTEL_POWERCLAMP=m CONFIG_X86_PKG_TEMP_THERMAL=m @@ -602,4 +624,3 @@ CONFIG_PCH_CAN=m # CONFIG_X86_DEBUG_FPU is not set # CONFIG_PUNIT_ATOM_DEBUG is not set -# CONFIG_AMD_MCE_INJ is not set diff --git a/config-x86_64-generic b/config-x86_64-generic index 704dc30bd..2496f8539 100644 --- a/config-x86_64-generic +++ b/config-x86_64-generic @@ -4,6 +4,8 @@ CONFIG_64BIT=y # CONFIG_MK8 is not set # CONFIG_MPSC is not set CONFIG_GENERIC_CPU=y +# Turn this on to see what exciting things we find +CONFIG_VMAP_STACK=y # CONFIG_X86_VSMP is not set CONFIG_X86_UV=y @@ -19,6 +21,10 @@ CONFIG_X86_NUMACHIP=y CONFIG_NUMA_BALANCING=y CONFIG_NUMA_BALANCING_DEFAULT_ENABLED=y +CONFIG_MLX_PLATFORM=m + +CONFIG_INTEL_ISH_HID=m + # https://lists.fedoraproject.org/pipermail/kernel/2013-November/004601.html CONFIG_NR_CPUS=1024 CONFIG_PHYSICAL_START=0x1000000 @@ -37,7 +43,6 @@ CONFIG_IA32_EMULATION=y # CONFIG_IA32_AOUT is not set CONFIG_AMD_IOMMU=y -CONFIG_AMD_IOMMU_STATS=y CONFIG_AMD_IOMMU_V2=m # CONFIG_IOMMU_DEBUG is not set CONFIG_SWIOTLB=y @@ -233,9 +238,9 @@ CONFIG_ND_PFN=m CONFIG_DEV_DAX=m CONFIG_DEV_DAX_PMEM=m +CONFIG_NR_DEV_DAX=32768 # Staging -CONFIG_STAGING_RDMA=y CONFIG_INFINIBAND_HFI1=m # CONFIG_HFI1_DEBUG_SDMA_ORDER is not set CONFIG_HFI1_VERBS_31BIT_PSN=y diff --git a/crash-driver.patch b/crash-driver.patch index 97ec4c4ec..715ec54e8 100644 --- a/crash-driver.patch +++ b/crash-driver.patch @@ -1,4 +1,4 @@ -From 3fbd61fbbbfa7ae15cd3f3e2ff7a97e106be2b43 Mon Sep 17 00:00:00 2001 +From 973e23bf27b0b2e5021321357fc570cccea3104c Mon Sep 17 00:00:00 2001 From: Dave Anderson Date: Tue, 26 Nov 2013 12:42:46 -0500 Subject: [PATCH] crash-driver @@ -149,19 +149,16 @@ index 0000000..404bcb9 + +#endif /* _ASM_IA64_CRASH_H */ diff --git a/arch/ia64/kernel/ia64_ksyms.c b/arch/ia64/kernel/ia64_ksyms.c -index 0967310..e888878 100644 +index d111248..b14b4c6 100644 --- a/arch/ia64/kernel/ia64_ksyms.c +++ b/arch/ia64/kernel/ia64_ksyms.c -@@ -84,6 +84,9 @@ EXPORT_SYMBOL(ia64_save_scratch_fpregs); - #include - EXPORT_SYMBOL(unw_init_running); - +@@ -9,3 +9,6 @@ + EXPORT_SYMBOL(min_low_pfn); /* defined by bootmem.c, but not exported by generic code */ + EXPORT_SYMBOL(max_low_pfn); /* defined by bootmem.c, but not exported by generic code */ + #endif ++ +#include +EXPORT_SYMBOL_GPL(efi_mem_type); -+ - #if defined(CONFIG_IA64_ESI) || defined(CONFIG_IA64_ESI_MODULE) - extern void esi_call_phys (void); - EXPORT_SYMBOL_GPL(esi_call_phys); diff --git a/arch/powerpc/include/asm/crash-driver.h b/arch/powerpc/include/asm/crash-driver.h new file mode 100644 index 0000000..50092d9 @@ -270,7 +267,7 @@ index 0000000..fd4736e + +#endif /* _X86_CRASH_H */ diff --git a/drivers/char/Kconfig b/drivers/char/Kconfig -index fdb8f3e..7dd3a49 100644 +index dcc0973..99b99d5 100644 --- a/drivers/char/Kconfig +++ b/drivers/char/Kconfig @@ -4,6 +4,9 @@ @@ -284,10 +281,10 @@ index fdb8f3e..7dd3a49 100644 config DEVMEM diff --git a/drivers/char/Makefile b/drivers/char/Makefile -index 55d16bf..a40ace9 100644 +index 6e6c244..29cc9c8 100644 --- a/drivers/char/Makefile +++ b/drivers/char/Makefile -@@ -61,3 +61,5 @@ js-rtc-y = rtc.o +@@ -60,3 +60,5 @@ js-rtc-y = rtc.o obj-$(CONFIG_TILE_SROM) += tile-srom.o obj-$(CONFIG_XILLYBUS) += xillybus/ obj-$(CONFIG_POWERNV_OP_PANEL) += powernv-op-panel.o @@ -506,9 +503,9 @@ index 0000000..25ab986 + +#endif /* __CRASH_H__ */ -- -2.9.2 +2.7.4 -From 7523c19e1d22fbabeaeae9520c16a78202c0eefe Mon Sep 17 00:00:00 2001 +From 23d8bd48303acda2d3a95a3e1a662784a4fa9fcd Mon Sep 17 00:00:00 2001 From: Fedora Kernel Team Date: Tue, 20 Sep 2016 19:39:46 +0200 Subject: [PATCH] Update of crash driver to handle CONFIG_HARDENED_USERCOPY and @@ -601,7 +598,7 @@ index 085378a..0258bf8 100644 static struct miscdevice crash_dev = { -- -2.9.3 +2.7.4 From: Dave Anderson Date: Fri, 18 Nov 2016 11:52:35 -0500 diff --git a/efi-Add-SHIM-and-image-security-database-GUID-defini.patch b/efi-Add-SHIM-and-image-security-database-GUID-defini.patch new file mode 100644 index 000000000..4d380ea76 --- /dev/null +++ b/efi-Add-SHIM-and-image-security-database-GUID-defini.patch @@ -0,0 +1,31 @@ +From 3a9fe1504e08824d894bb3a804c6a313f5d1be8a Mon Sep 17 00:00:00 2001 +From: Josh Boyer +Date: Tue, 25 Oct 2016 12:54:11 -0400 +Subject: [PATCH 11/20] efi: Add SHIM and image security database GUID + definitions + +Add the definitions for shim and image security database, both of which +are used widely in various Linux distros. + +Signed-off-by: Josh Boyer +--- + include/linux/efi.h | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/include/linux/efi.h b/include/linux/efi.h +index 2d089487d2da..ce943d5accfd 100644 +--- a/include/linux/efi.h ++++ b/include/linux/efi.h +@@ -592,6 +592,9 @@ void efi_native_runtime_setup(void); + #define EFI_MEMORY_ATTRIBUTES_TABLE_GUID EFI_GUID(0xdcfa911d, 0x26eb, 0x469f, 0xa2, 0x20, 0x38, 0xb7, 0xdc, 0x46, 0x12, 0x20) + #define EFI_CONSOLE_OUT_DEVICE_GUID EFI_GUID(0xd3b36f2c, 0xd551, 0x11d4, 0x9a, 0x46, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d) + ++#define EFI_IMAGE_SECURITY_DATABASE_GUID EFI_GUID(0xd719b2cb, 0x3d3a, 0x4596, 0xa3, 0xbc, 0xda, 0xd0, 0x0e, 0x67, 0x65, 0x6f) ++#define EFI_SHIM_LOCK_GUID EFI_GUID(0x605dab50, 0xe046, 0x4300, 0xab, 0xb6, 0x3d, 0xd8, 0x10, 0xdd, 0x8b, 0x23) ++ + /* + * This GUID is used to pass to the kernel proper the struct screen_info + * structure that was populated by the stub based on the GOP protocol instance +-- +2.9.3 + diff --git a/filter-aarch64.sh b/filter-aarch64.sh index 012d39724..ed0bb61a1 100644 --- a/filter-aarch64.sh +++ b/filter-aarch64.sh @@ -13,4 +13,4 @@ driverdirs="atm auxdisplay bcma bluetooth firewire fmc infiniband isdn leds medi ethdrvs="3com adaptec arc alteon atheros broadcom cadence calxeda chelsio cisco dec dlink emulex icplus marvell micrel myricom neterion nvidia oki-semi packetengines qlogic rdc renesas sfc silan sis smsc stmicro sun tehuti ti via wiznet xircom" -singlemods="ntb_netdev iscsi_ibft iscsi_boot_sysfs megaraid pmcraid qla1280 9pnet_rdma rpcrdma nvmet-rdma nvme-rdma hid-picolcd hid-prodikeys hwa-hc hwpoison-inject target_core_user sbp_target cxgbit iw_cxgb3 iw_cxgb4 cxgb3i cxgb3i cxgb3i_ddp cxgb4i" +singlemods="ntb_netdev iscsi_ibft iscsi_boot_sysfs megaraid pmcraid qla1280 9pnet_rdma rpcrdma nvmet-rdma nvme-rdma hid-picolcd hid-prodikeys hwa-hc hwpoison-inject target_core_user sbp_target cxgbit iw_cxgb3 iw_cxgb4 cxgb3i cxgb3i cxgb3i_ddp cxgb4i chcr" diff --git a/filter-armv7hl.sh b/filter-armv7hl.sh index 6dc3efdfa..be07bd91c 100644 --- a/filter-armv7hl.sh +++ b/filter-armv7hl.sh @@ -15,4 +15,4 @@ ethdrvs="3com adaptec alteon altera amd atheros broadcom cadence chelsio cisco d drmdrvs="amd armada bridge ast exynos i2c imx mgag200 msm omapdrm panel nouveau radeon rockchip tegra tilcdc via" -singlemods="ntb_netdev iscsi_ibft iscsi_boot_sysfs megaraid pmcraid qla1280 9pnet_rdma rpcrdma nvmet-rdma nvme-rdma hid-picolcd hid-prodikeys hwa-hc hwpoison-inject target_core_user sbp_target cxgbit iw_cxgb3 iw_cxgb4 cxgb3i cxgb3i cxgb3i_ddp cxgb4i" +singlemods="ntb_netdev iscsi_ibft iscsi_boot_sysfs megaraid pmcraid qla1280 9pnet_rdma rpcrdma nvmet-rdma nvme-rdma hid-picolcd hid-prodikeys hwa-hc hwpoison-inject target_core_user sbp_target cxgbit iw_cxgb3 iw_cxgb4 cxgb3i cxgb3i cxgb3i_ddp cxgb4i chcr" diff --git a/filter-i686.sh b/filter-i686.sh index 628e17c60..01b5bfcb6 100644 --- a/filter-i686.sh +++ b/filter-i686.sh @@ -11,4 +11,4 @@ driverdirs="atm auxdisplay bcma bluetooth firewire fmc infiniband isdn leds media memstick mfd mmc mtd mwave nfc ntb pcmcia platform power ssb staging tty uio uwb w1" -singlemods="ntb_netdev iscsi_ibft iscsi_boot_sysfs megaraid pmcraid qla1280 9pnet_rdma rpcrdma nvmet-rdma nvme-rdma hid-picolcd hid-prodikeys hwa-hc hwpoison-inject hid-sensor-hub hid-sensor-magn-3d hid-sensor-incl-3d hid-sensor-gyro-3d hid-sensor-iio-common hid-sensor-accel-3d hid-sensor-trigger hid-sensor-als hid-sensor-rotation target_core_user sbp_target cxgbit iw_cxgb3 iw_cxgb4 cxgb3i cxgb3i cxgb3i_ddp cxgb4i" +singlemods="ntb_netdev iscsi_ibft iscsi_boot_sysfs megaraid pmcraid qla1280 9pnet_rdma rpcrdma nvmet-rdma nvme-rdma hid-picolcd hid-prodikeys hwa-hc hwpoison-inject hid-sensor-hub hid-sensor-magn-3d hid-sensor-incl-3d hid-sensor-gyro-3d hid-sensor-iio-common hid-sensor-accel-3d hid-sensor-trigger hid-sensor-als hid-sensor-rotation target_core_user sbp_target cxgbit iw_cxgb3 iw_cxgb4 cxgb3i cxgb3i cxgb3i_ddp cxgb4i chcr" diff --git a/filter-modules.sh b/filter-modules.sh index f9bfa100c..9db3f9d19 100755 --- a/filter-modules.sh +++ b/filter-modules.sh @@ -34,7 +34,7 @@ netprots="6lowpan appletalk atm ax25 batman-adv bluetooth can dccp dsa ieee80215 drmdrvs="amd ast gma500 i2c i915 mgag200 nouveau radeon via " -singlemods="ntb_netdev iscsi_ibft iscsi_boot_sysfs megaraid pmcraid qla1280 9pnet_rdma rpcrdma nvmet-rdma nvme-rdma hid-picolcd hid-prodikeys hwa-hc hwpoison-inject hid-sensor-hub target_core_user sbp_target cxgbit iw_cxgb3 iw_cxgb4 cxgb3i cxgb3i cxgb3i_ddp cxgb4i" +singlemods="ntb_netdev iscsi_ibft iscsi_boot_sysfs megaraid pmcraid qla1280 9pnet_rdma rpcrdma nvmet-rdma nvme-rdma hid-picolcd hid-prodikeys hwa-hc hwpoison-inject hid-sensor-hub target_core_user sbp_target cxgbit iw_cxgb3 iw_cxgb4 cxgb3i cxgb3i cxgb3i_ddp cxgb4i chcr" # Grab the arch-specific filter list overrides source ./filter-$2.sh diff --git a/filter-ppc64.sh b/filter-ppc64.sh index 0df93835c..81397fbcf 100644 --- a/filter-ppc64.sh +++ b/filter-ppc64.sh @@ -11,4 +11,4 @@ driverdirs="atm auxdisplay bcma bluetooth firewire fmc infiniband isdn leds media memstick message mmc mtd mwave nfc ntb pcmcia platform power ssb staging tty uio uwb w1" -singlemods="ntb_netdev iscsi_ibft iscsi_boot_sysfs megaraid pmcraid qla1280 9pnet_rdma rpcrdma nvmet-rdma nvme-rdma hid-picolcd hid-prodikeys hwa-hc hwpoison-inject target_core_user sbp_target cxgbit iw_cxgb3 iw_cxgb4 cxgb3i cxgb3i cxgb3i_ddp cxgb4i" +singlemods="ntb_netdev iscsi_ibft iscsi_boot_sysfs megaraid pmcraid qla1280 9pnet_rdma rpcrdma nvmet-rdma nvme-rdma hid-picolcd hid-prodikeys hwa-hc hwpoison-inject target_core_user sbp_target cxgbit iw_cxgb3 iw_cxgb4 cxgb3i cxgb3i cxgb3i_ddp cxgb4i chcr" diff --git a/filter-ppc64le.sh b/filter-ppc64le.sh index c14e5cc8c..f53af8e5c 100644 --- a/filter-ppc64le.sh +++ b/filter-ppc64le.sh @@ -11,4 +11,4 @@ driverdirs="atm auxdisplay bcma bluetooth firewire fmc infiniband isdn leds media memstick message mmc mtd mwave nfc ntb pcmcia platform power ssb staging tty uio uwb w1" -singlemods="ntb_netdev iscsi_ibft iscsi_boot_sysfs megaraid pmcraid qla1280 9pnet_rdma rpcrdma nvmet-rdma nvme-rdma hid-picolcd hid-prodikeys hwa-hc hwpoison-inject target_core_user sbp_target cxgbit iw_cxgb3 iw_cxgb4 cxgb3i cxgb3i cxgb3i_ddp cxgb4i" +singlemods="ntb_netdev iscsi_ibft iscsi_boot_sysfs megaraid pmcraid qla1280 9pnet_rdma rpcrdma nvmet-rdma nvme-rdma hid-picolcd hid-prodikeys hwa-hc hwpoison-inject target_core_user sbp_target cxgbit iw_cxgb3 iw_cxgb4 cxgb3i cxgb3i cxgb3i_ddp cxgb4i chcr" diff --git a/filter-ppc64p7.sh b/filter-ppc64p7.sh index 6c9383ac0..c868ddafb 100644 --- a/filter-ppc64p7.sh +++ b/filter-ppc64p7.sh @@ -11,4 +11,4 @@ driverdirs="atm auxdisplay bcma bluetooth firewire fmc infiniband isdn leds media memstick message mmc mtd mwave nfc ntb pcmcia platform power ssb staging tty uio uwb w1" -singlemods="ntb_netdev iscsi_ibft iscsi_boot_sysfs megaraid pmcraid qla1280 9pnet_rdma rpcrdma nvmet-rdma nvme-rdma hid-picolcd hid-prodikeys hwa-hc hwpoison-inject target_core_user sbp_target cxgbit iw_cxgb3 iw_cxgb4 cxgb3i cxgb3i cxgb3i_ddp cxgb4i" +singlemods="ntb_netdev iscsi_ibft iscsi_boot_sysfs megaraid pmcraid qla1280 9pnet_rdma rpcrdma nvmet-rdma nvme-rdma hid-picolcd hid-prodikeys hwa-hc hwpoison-inject target_core_user sbp_target cxgbit iw_cxgb3 iw_cxgb4 cxgb3i cxgb3i cxgb3i_ddp cxgb4i chcr" diff --git a/geekbox-v4-device-tree-support.patch b/geekbox-v4-device-tree-support.patch index 11f30e7b2..8408531bd 100644 --- a/geekbox-v4-device-tree-support.patch +++ b/geekbox-v4-device-tree-support.patch @@ -1,4 +1,4 @@ -From 277aa4c25655e8f746f02879d26298772244958a Mon Sep 17 00:00:00 2001 +From 11aa129d33635fb33304b6e9b945e502f5ba707a Mon Sep 17 00:00:00 2001 From: Peter Robinson Date: Thu, 17 Mar 2016 15:19:04 +0000 Subject: [PATCH] geekbox v4 patchset @@ -13,10 +13,10 @@ Subject: [PATCH] geekbox v4 patchset create mode 100644 arch/arm64/boot/dts/rockchip/rk3368-geekbox-landingship.dts diff --git a/Documentation/devicetree/bindings/arm/rockchip.txt b/Documentation/devicetree/bindings/arm/rockchip.txt -index 715d960..7cfadac 100644 +index 55f388f..989a039 100644 --- a/Documentation/devicetree/bindings/arm/rockchip.txt +++ b/Documentation/devicetree/bindings/arm/rockchip.txt -@@ -95,6 +95,15 @@ Rockchip platforms device tree bindings +@@ -99,6 +99,15 @@ Rockchip platforms device tree bindings Required root node properties: - compatible = "mqmaker,miqi", "rockchip,rk3288"; @@ -33,12 +33,13 @@ index 715d960..7cfadac 100644 Required root node properties: - compatible = "rockchip,rk3368-evb-act8846", "rockchip,rk3368"; diff --git a/arch/arm64/boot/dts/rockchip/Makefile b/arch/arm64/boot/dts/rockchip/Makefile -index 7037a16..e002ebe 100644 +index 87669f6..9aec54e 100644 --- a/arch/arm64/boot/dts/rockchip/Makefile +++ b/arch/arm64/boot/dts/rockchip/Makefile -@@ -1,5 +1,6 @@ +@@ -1,6 +1,7 @@ dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3368-evb-act8846.dtb dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3368-geekbox.dtb + dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3368-orion-r68-meta.dtb +dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3368-geekbox-landingship.dtb dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3368-r88.dtb dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3399-evb.dtb @@ -120,7 +121,7 @@ index 0000000..a28ace9 + status = "okay"; +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3368-r88.dts b/arch/arm64/boot/dts/rockchip/rk3368-r88.dts -index b56b720..5ea68c4 100644 +index eed1ef6..18e2b77 100644 --- a/arch/arm64/boot/dts/rockchip/rk3368-r88.dts +++ b/arch/arm64/boot/dts/rockchip/rk3368-r88.dts @@ -52,7 +52,7 @@ @@ -133,5 +134,5 @@ index b56b720..5ea68c4 100644 reg = <0x0 0x0 0x0 0x40000000>; }; -- -2.5.5 +2.7.4 diff --git a/imx6sx-Add-UDOO-Neo-support.patch b/imx6sx-Add-UDOO-Neo-support.patch new file mode 100644 index 000000000..6d9fd99d4 --- /dev/null +++ b/imx6sx-Add-UDOO-Neo-support.patch @@ -0,0 +1,619 @@ +From 76e691fc7653b85d390e58710e5c7db73ca49367 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Andreas=20F=C3=A4rber?= +Date: Sun, 16 Oct 2016 16:44:23 +0200 +Subject: [PATCH 0732/2073] ARM: dts: imx6sx: Add UDOO Neo support +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Add initial device trees for UDOO Neo Basic, Extended and Full boards: +* Serial console is enabled, other serial ports are prepared. +* I2C based PMIC is enabled. +* Ethernet is enabled for Basic and Full. +* SDHC is enabled, with the SDIO_PWR GPIO modeled as a regulator. +* Both user LEDs are enabled, with the orange one reserved for the M4 + and with the SD card as default trigger for the red LED. + +The decision on a board compatible string is deferred to later. + +Cc: Ettore Chimenti +Signed-off-by: Andreas Färber +Signed-off-by: Shawn Guo +--- + arch/arm/boot/dts/Makefile | 5 +- + arch/arm/boot/dts/imx6sx-udoo-neo-basic.dts | 69 ++++++ + arch/arm/boot/dts/imx6sx-udoo-neo-extended.dts | 54 +++++ + arch/arm/boot/dts/imx6sx-udoo-neo-full.dts | 69 ++++++ + arch/arm/boot/dts/imx6sx-udoo-neo.dtsi | 293 +++++++++++++++++++++++++ + 5 files changed, 489 insertions(+), 1 deletion(-) + create mode 100644 arch/arm/boot/dts/imx6sx-udoo-neo-basic.dts + create mode 100644 arch/arm/boot/dts/imx6sx-udoo-neo-extended.dts + create mode 100644 arch/arm/boot/dts/imx6sx-udoo-neo-full.dts + create mode 100644 arch/arm/boot/dts/imx6sx-udoo-neo.dtsi + +diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile +index 019976b..da0197d 100644 +--- a/arch/arm/boot/dts/Makefile ++++ b/arch/arm/boot/dts/Makefile +@@ -417,7 +417,10 @@ dtb-$(CONFIG_SOC_IMX6SX) += \ + imx6sx-sabreauto.dtb \ + imx6sx-sdb-reva.dtb \ + imx6sx-sdb-sai.dtb \ +- imx6sx-sdb.dtb ++ imx6sx-sdb.dtb \ ++ imx6sx-udoo-neo-basic.dtb \ ++ imx6sx-udoo-neo-extended.dtb \ ++ imx6sx-udoo-neo-full.dtb + dtb-$(CONFIG_SOC_IMX6UL) += \ + imx6ul-14x14-evk.dtb \ + imx6ul-geam-kit.dtb \ +diff --git a/arch/arm/boot/dts/imx6sx-udoo-neo-basic.dts b/arch/arm/boot/dts/imx6sx-udoo-neo-basic.dts +new file mode 100644 +index 0000000..0b88878 +--- /dev/null ++++ b/arch/arm/boot/dts/imx6sx-udoo-neo-basic.dts +@@ -0,0 +1,69 @@ ++/* ++ * Copyright (c) 2016 Andreas Färber ++ * ++ * This file is dual-licensed: you can use it either under the terms ++ * of the GPL or the X11 license, at your option. Note that this dual ++ * licensing only applies to this file, and not this project as a ++ * whole. ++ * ++ * a) This library 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. ++ * ++ * This library 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. ++ * ++ * Or, alternatively, ++ * ++ * b) Permission is hereby granted, free of charge, to any person ++ * obtaining a copy of this software and associated documentation ++ * files (the "Software"), to deal in the Software without ++ * restriction, including without limitation the rights to use, ++ * copy, modify, merge, publish, distribute, sublicense, and/or ++ * sell copies of the Software, and to permit persons to whom the ++ * Software is furnished to do so, subject to the following ++ * conditions: ++ * ++ * The above copyright notice and this permission notice shall be ++ * included in all copies or substantial portions of the Software. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ++ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES ++ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND ++ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT ++ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, ++ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING ++ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR ++ * OTHER DEALINGS IN THE SOFTWARE. ++ */ ++ ++/dts-v1/; ++ ++#include "imx6sx-udoo-neo.dtsi" ++ ++/ { ++ model = "UDOO Neo Basic"; ++ compatible = "fsl,imx6sx"; ++ ++ memory { ++ reg = <0x80000000 0x20000000>; ++ }; ++}; ++ ++&fec1 { ++ phy-handle = <ðphy1>; ++ status = "okay"; ++ ++ mdio { ++ #address-cells = <1>; ++ #size-cells = <0>; ++ ++ ethphy1: ethernet-phy@0 { ++ compatible = "ethernet-phy-ieee802.3-c22"; ++ reg = <0>; ++ }; ++ }; ++}; +diff --git a/arch/arm/boot/dts/imx6sx-udoo-neo-extended.dts b/arch/arm/boot/dts/imx6sx-udoo-neo-extended.dts +new file mode 100644 +index 0000000..d6fdd17 +--- /dev/null ++++ b/arch/arm/boot/dts/imx6sx-udoo-neo-extended.dts +@@ -0,0 +1,54 @@ ++/* ++ * Copyright (c) 2016 Andreas Färber ++ * ++ * This file is dual-licensed: you can use it either under the terms ++ * of the GPL or the X11 license, at your option. Note that this dual ++ * licensing only applies to this file, and not this project as a ++ * whole. ++ * ++ * a) This library 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. ++ * ++ * This library 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. ++ * ++ * Or, alternatively, ++ * ++ * b) Permission is hereby granted, free of charge, to any person ++ * obtaining a copy of this software and associated documentation ++ * files (the "Software"), to deal in the Software without ++ * restriction, including without limitation the rights to use, ++ * copy, modify, merge, publish, distribute, sublicense, and/or ++ * sell copies of the Software, and to permit persons to whom the ++ * Software is furnished to do so, subject to the following ++ * conditions: ++ * ++ * The above copyright notice and this permission notice shall be ++ * included in all copies or substantial portions of the Software. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ++ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES ++ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND ++ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT ++ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, ++ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING ++ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR ++ * OTHER DEALINGS IN THE SOFTWARE. ++ */ ++ ++/dts-v1/; ++ ++#include "imx6sx-udoo-neo.dtsi" ++ ++/ { ++ model = "UDOO Neo Extended"; ++ compatible = "fsl,imx6sx"; ++ ++ memory { ++ reg = <0x80000000 0x40000000>; ++ }; ++}; +diff --git a/arch/arm/boot/dts/imx6sx-udoo-neo-full.dts b/arch/arm/boot/dts/imx6sx-udoo-neo-full.dts +new file mode 100644 +index 0000000..d8c3577 +--- /dev/null ++++ b/arch/arm/boot/dts/imx6sx-udoo-neo-full.dts +@@ -0,0 +1,69 @@ ++/* ++ * Copyright (c) 2016 Andreas Färber ++ * ++ * This file is dual-licensed: you can use it either under the terms ++ * of the GPL or the X11 license, at your option. Note that this dual ++ * licensing only applies to this file, and not this project as a ++ * whole. ++ * ++ * a) This library 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. ++ * ++ * This library 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. ++ * ++ * Or, alternatively, ++ * ++ * b) Permission is hereby granted, free of charge, to any person ++ * obtaining a copy of this software and associated documentation ++ * files (the "Software"), to deal in the Software without ++ * restriction, including without limitation the rights to use, ++ * copy, modify, merge, publish, distribute, sublicense, and/or ++ * sell copies of the Software, and to permit persons to whom the ++ * Software is furnished to do so, subject to the following ++ * conditions: ++ * ++ * The above copyright notice and this permission notice shall be ++ * included in all copies or substantial portions of the Software. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ++ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES ++ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND ++ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT ++ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, ++ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING ++ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR ++ * OTHER DEALINGS IN THE SOFTWARE. ++ */ ++ ++/dts-v1/; ++ ++#include "imx6sx-udoo-neo.dtsi" ++ ++/ { ++ model = "UDOO Neo Full"; ++ compatible = "fsl,imx6sx"; ++ ++ memory { ++ reg = <0x80000000 0x40000000>; ++ }; ++}; ++ ++&fec1 { ++ phy-handle = <ðphy1>; ++ status = "okay"; ++ ++ mdio { ++ #address-cells = <1>; ++ #size-cells = <0>; ++ ++ ethphy1: ethernet-phy@0 { ++ compatible = "ethernet-phy-ieee802.3-c22"; ++ reg = <0>; ++ }; ++ }; ++}; +diff --git a/arch/arm/boot/dts/imx6sx-udoo-neo.dtsi b/arch/arm/boot/dts/imx6sx-udoo-neo.dtsi +new file mode 100644 +index 0000000..2b65d26 +--- /dev/null ++++ b/arch/arm/boot/dts/imx6sx-udoo-neo.dtsi +@@ -0,0 +1,293 @@ ++/* ++ * Copyright (c) 2016 Andreas Färber ++ * ++ * This file is dual-licensed: you can use it either under the terms ++ * of the GPL or the X11 license, at your option. Note that this dual ++ * licensing only applies to this file, and not this project as a ++ * whole. ++ * ++ * a) This library 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. ++ * ++ * This library 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. ++ * ++ * Or, alternatively, ++ * ++ * b) Permission is hereby granted, free of charge, to any person ++ * obtaining a copy of this software and associated documentation ++ * files (the "Software"), to deal in the Software without ++ * restriction, including without limitation the rights to use, ++ * copy, modify, merge, publish, distribute, sublicense, and/or ++ * sell copies of the Software, and to permit persons to whom the ++ * Software is furnished to do so, subject to the following ++ * conditions: ++ * ++ * The above copyright notice and this permission notice shall be ++ * included in all copies or substantial portions of the Software. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ++ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES ++ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND ++ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT ++ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, ++ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING ++ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR ++ * OTHER DEALINGS IN THE SOFTWARE. ++ */ ++ ++#include "imx6sx.dtsi" ++ ++/ { ++ compatible = "fsl,imx6sx"; ++ ++ chosen { ++ stdout-path = "serial0:115200n8"; ++ }; ++ ++ leds { ++ compatible = "gpio-leds"; ++ ++ red { ++ label = "udoo-neo:red:mmc"; ++ gpios = <&gpio6 0 GPIO_ACTIVE_HIGH>; ++ default-state = "off"; ++ linux,default-trigger = "mmc0"; ++ }; ++ ++ orange { ++ label = "udoo-neo:orange:user"; ++ gpios = <&gpio4 6 GPIO_ACTIVE_HIGH>; ++ default-state = "keep"; ++ }; ++ }; ++ ++ reg_sdio_pwr: regulator-sdio-pwr { ++ compatible = "regulator-fixed"; ++ gpio = <&gpio6 1 GPIO_ACTIVE_HIGH>; ++ enable-active-high; ++ regulator-name = "SDIO_PWR"; ++ regulator-min-microvolt = <3300000>; ++ regulator-max-microvolt = <3300000>; ++ regulator-boot-on; ++ }; ++}; ++ ++&cpu0 { ++ arm-supply = <&sw1a_reg>; ++ soc-supply = <&sw1c_reg>; ++}; ++ ++&fec1 { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pinctrl_enet1>; ++ phy-mode = "rmii"; ++ phy-reset-gpios = <&gpio2 1 GPIO_ACTIVE_LOW>; ++}; ++ ++&i2c1 { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pinctrl_i2c1>; ++ clock-frequency = <100000>; ++ status = "okay"; ++ ++ pmic: pmic@08 { ++ compatible = "fsl,pfuze3000"; ++ reg = <0x08>; ++ ++ regulators { ++ sw1a_reg: sw1a { ++ regulator-min-microvolt = <700000>; ++ regulator-max-microvolt = <1475000>; ++ regulator-boot-on; ++ regulator-always-on; ++ regulator-ramp-delay = <6250>; ++ }; ++ ++ sw1c_reg: sw1b { ++ regulator-min-microvolt = <700000>; ++ regulator-max-microvolt = <1475000>; ++ regulator-boot-on; ++ regulator-always-on; ++ regulator-ramp-delay = <6250>; ++ }; ++ ++ sw2_reg: sw2 { ++ regulator-min-microvolt = <1500000>; ++ regulator-max-microvolt = <1850000>; ++ regulator-boot-on; ++ regulator-always-on; ++ }; ++ ++ sw3a_reg: sw3 { ++ regulator-min-microvolt = <900000>; ++ regulator-max-microvolt = <1650000>; ++ regulator-boot-on; ++ regulator-always-on; ++ }; ++ ++ 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: vldo1 { ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <3300000>; ++ regulator-always-on; ++ }; ++ ++ vgen2_reg: vldo2 { ++ regulator-min-microvolt = <800000>; ++ regulator-max-microvolt = <1550000>; ++ }; ++ ++ vgen3_reg: vccsd { ++ regulator-min-microvolt = <2850000>; ++ regulator-max-microvolt = <3300000>; ++ regulator-always-on; ++ }; ++ ++ vgen4_reg: v33 { ++ regulator-min-microvolt = <2850000>; ++ regulator-max-microvolt = <3300000>; ++ regulator-always-on; ++ }; ++ ++ vgen5_reg: vldo3 { ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <3300000>; ++ regulator-always-on; ++ }; ++ ++ vgen6_reg: vldo4 { ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <3300000>; ++ regulator-always-on; ++ }; ++ }; ++ }; ++}; ++ ++&iomuxc { ++ pinctrl_enet1: enet1grp { ++ fsl,pins = ++ , ++ , ++ , ++ , ++ , ++ , ++ ++ , ++ , ++ , ++ , ++ , ++ , ++ ++ ; ++ }; ++ ++ pinctrl_i2c1: i2c1grp { ++ fsl,pins = ++ , ++ ; ++ }; ++ ++ pinctrl_uart1: uart1grp { ++ fsl,pins = ++ , ++ ; ++ }; ++ ++ pinctrl_uart2: uart2grp { ++ fsl,pins = ++ , ++ ; ++ }; ++ ++ pinctrl_uart5: uart5grp { ++ fsl,pins = ++ , ++ ; ++ }; ++ ++ pinctrl_uart6: uart6grp { ++ fsl,pins = ++ , ++ , ++ , ++ , ++ , ++ , ++ , ++ ; ++ }; ++ ++ pinctrl_usdhc2: usdhc2grp { ++ fsl,pins = ++ , ++ , ++ , ++ , ++ , ++ , ++ ; /* CD */ ++ }; ++}; ++ ++&uart1 { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pinctrl_uart1>; ++ status = "okay"; ++}; ++ ++/* Cortex-M4 serial */ ++&uart2 { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pinctrl_uart2>; ++ status = "disabled"; ++}; ++ ++/* Arduino serial */ ++&uart5 { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pinctrl_uart5>; ++ status = "disabled"; ++}; ++ ++&uart6 { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pinctrl_uart6>; ++ uart-has-rtscts; ++ status = "disabled"; ++}; ++ ++&usdhc2 { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pinctrl_usdhc2>; ++ vmmc-supply = <®_sdio_pwr>; ++ bus-width = <4>; ++ cd-gpios = <&gpio6 2 GPIO_ACTIVE_LOW>; ++ no-1-8-v; ++ keep-power-in-suspend; ++ wakeup-source; ++ status = "okay"; ++}; +-- +2.9.3 + +From 841310d00a76800a8407ee214eb7242541aac178 Mon Sep 17 00:00:00 2001 +From: Fabio Estevam +Date: Tue, 1 Nov 2016 15:38:12 -0200 +Subject: [PATCH 1789/2073] ARM: dts: imx6sx-udoo: Add board specific + compatible strings + +Add a compatible entry for the specific board versions. + +Signed-off-by: Fabio Estevam +Signed-off-by: Shawn Guo +--- + arch/arm/boot/dts/imx6sx-udoo-neo-basic.dts | 2 +- + arch/arm/boot/dts/imx6sx-udoo-neo-extended.dts | 2 +- + arch/arm/boot/dts/imx6sx-udoo-neo-full.dts | 2 +- + 3 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/arch/arm/boot/dts/imx6sx-udoo-neo-basic.dts b/arch/arm/boot/dts/imx6sx-udoo-neo-basic.dts +index 0b88878..0c1fc1a 100644 +--- a/arch/arm/boot/dts/imx6sx-udoo-neo-basic.dts ++++ b/arch/arm/boot/dts/imx6sx-udoo-neo-basic.dts +@@ -46,7 +46,7 @@ + + / { + model = "UDOO Neo Basic"; +- compatible = "fsl,imx6sx"; ++ compatible = "udoo,neobasic", "fsl,imx6sx"; + + memory { + reg = <0x80000000 0x20000000>; +diff --git a/arch/arm/boot/dts/imx6sx-udoo-neo-extended.dts b/arch/arm/boot/dts/imx6sx-udoo-neo-extended.dts +index d6fdd17..5d6c227 100644 +--- a/arch/arm/boot/dts/imx6sx-udoo-neo-extended.dts ++++ b/arch/arm/boot/dts/imx6sx-udoo-neo-extended.dts +@@ -46,7 +46,7 @@ + + / { + model = "UDOO Neo Extended"; +- compatible = "fsl,imx6sx"; ++ compatible = "udoo,neoextended", "fsl,imx6sx"; + + memory { + reg = <0x80000000 0x40000000>; +diff --git a/arch/arm/boot/dts/imx6sx-udoo-neo-full.dts b/arch/arm/boot/dts/imx6sx-udoo-neo-full.dts +index d8c3577..653ceb2 100644 +--- a/arch/arm/boot/dts/imx6sx-udoo-neo-full.dts ++++ b/arch/arm/boot/dts/imx6sx-udoo-neo-full.dts +@@ -46,7 +46,7 @@ + + / { + model = "UDOO Neo Full"; +- compatible = "fsl,imx6sx"; ++ compatible = "udoo,neofull", "fsl,imx6sx"; + + memory { + reg = <0x80000000 0x40000000>; +-- +2.9.3 + diff --git a/kbuild-AFTER_LINK.patch b/kbuild-AFTER_LINK.patch index d79a6186b..ab738c62b 100644 --- a/kbuild-AFTER_LINK.patch +++ b/kbuild-AFTER_LINK.patch @@ -1,4 +1,4 @@ -From a9488dbeccf188f0bd83b9d5704892f2c0f97fdc Mon Sep 17 00:00:00 2001 +From 649d991ca7737dd227f2a1ca4f30247daf6a7b4b Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Mon, 6 Oct 2008 23:03:03 -0700 Subject: [PATCH] kbuild: AFTER_LINK @@ -21,10 +21,10 @@ Signed-off-by: Roland McGrath 7 files changed, 17 insertions(+), 7 deletions(-) diff --git a/arch/arm64/kernel/vdso/Makefile b/arch/arm64/kernel/vdso/Makefile -index b467fd0..feeff5e 100644 +index 62c84f7..f44236a 100644 --- a/arch/arm64/kernel/vdso/Makefile +++ b/arch/arm64/kernel/vdso/Makefile -@@ -55,7 +55,8 @@ $(obj-vdso): %.o: %.S FORCE +@@ -54,7 +54,8 @@ $(obj-vdso): %.o: %.S FORCE # Actual build commands quiet_cmd_vdsold = VDSOL $@ @@ -35,10 +35,10 @@ index b467fd0..feeff5e 100644 cmd_vdsoas = $(CC) $(a_flags) -c -o $@ $< diff --git a/arch/powerpc/kernel/vdso32/Makefile b/arch/powerpc/kernel/vdso32/Makefile -index 6abffb7..7b103bb 100644 +index 78a7449..c9592c0 100644 --- a/arch/powerpc/kernel/vdso32/Makefile +++ b/arch/powerpc/kernel/vdso32/Makefile -@@ -43,7 +43,8 @@ $(obj-vdso32): %.o: %.S +@@ -44,7 +44,8 @@ $(obj-vdso32): %.o: %.S FORCE # actual build commands quiet_cmd_vdso32ld = VDSO32L $@ @@ -49,24 +49,24 @@ index 6abffb7..7b103bb 100644 cmd_vdso32as = $(CROSS32CC) $(a_flags) -c -o $@ $< diff --git a/arch/powerpc/kernel/vdso64/Makefile b/arch/powerpc/kernel/vdso64/Makefile -index 8c8f2ae..a743ebe 100644 +index 31107bf..96aded3 100644 --- a/arch/powerpc/kernel/vdso64/Makefile +++ b/arch/powerpc/kernel/vdso64/Makefile -@@ -36,7 +36,8 @@ $(obj-vdso64): %.o: %.S +@@ -33,7 +33,8 @@ $(obj)/%.so: $(obj)/%.so.dbg FORCE # actual build commands quiet_cmd_vdso64ld = VDSO64L $@ - cmd_vdso64ld = $(CC) $(c_flags) -o $@ -Wl,-T$(filter %.lds,$^) $(filter %.o,$^) + cmd_vdso64ld = $(CC) $(c_flags) -o $@ -Wl,-T$(filter %.lds,$^) $(filter %.o,$^) \ -+ $(if $(AFTER_LINK),; $(AFTER_LINK)) - quiet_cmd_vdso64as = VDSO64A $@ - cmd_vdso64as = $(CC) $(a_flags) -c -o $@ $< ++ $(if $(AFTER_LINK),; $(AFTER_LINK)) + # install commands for the unstripped file + quiet_cmd_vdso_install = INSTALL $@ diff --git a/arch/s390/kernel/vdso32/Makefile b/arch/s390/kernel/vdso32/Makefile -index ee8a18e..63e33fa 100644 +index 6cc9478..94fb536 100644 --- a/arch/s390/kernel/vdso32/Makefile +++ b/arch/s390/kernel/vdso32/Makefile -@@ -43,7 +43,8 @@ $(obj-vdso32): %.o: %.S +@@ -46,7 +46,8 @@ $(obj-vdso32): %.o: %.S # actual build commands quiet_cmd_vdso32ld = VDSO32L $@ @@ -77,10 +77,10 @@ index ee8a18e..63e33fa 100644 cmd_vdso32as = $(CC) $(a_flags) -c -o $@ $< diff --git a/arch/s390/kernel/vdso64/Makefile b/arch/s390/kernel/vdso64/Makefile -index c4b03f9..550450f 100644 +index 2d54c18..a0e3e9d 100644 --- a/arch/s390/kernel/vdso64/Makefile +++ b/arch/s390/kernel/vdso64/Makefile -@@ -43,7 +43,8 @@ $(obj-vdso64): %.o: %.S +@@ -46,7 +46,8 @@ $(obj-vdso64): %.o: %.S # actual build commands quiet_cmd_vdso64ld = VDSO64L $@ @@ -91,10 +91,10 @@ index c4b03f9..550450f 100644 cmd_vdso64as = $(CC) $(a_flags) -c -o $@ $< diff --git a/arch/x86/entry/vdso/Makefile b/arch/x86/entry/vdso/Makefile -index 265c0ed..fd90c7d 100644 +index d540966..eeb47b6 100644 --- a/arch/x86/entry/vdso/Makefile +++ b/arch/x86/entry/vdso/Makefile -@@ -159,8 +159,9 @@ $(obj)/vdso32.so.dbg: FORCE \ +@@ -167,8 +167,9 @@ $(obj)/vdso32.so.dbg: FORCE \ quiet_cmd_vdso = VDSO $@ cmd_vdso = $(CC) -nostdlib -o $@ \ $(VDSO_LDFLAGS) $(VDSO_LDFLAGS_$(filter %.lds,$(^F))) \ @@ -107,11 +107,11 @@ index 265c0ed..fd90c7d 100644 VDSO_LDFLAGS = -fPIC -shared $(call cc-ldoption, -Wl$(comma)--hash-style=both) \ $(call cc-ldoption, -Wl$(comma)--build-id) -Wl,-Bsymbolic $(LTO_CFLAGS) diff --git a/scripts/link-vmlinux.sh b/scripts/link-vmlinux.sh -index dacf71a..72cbefd 100755 +index f742c65..526eee4 100755 --- a/scripts/link-vmlinux.sh +++ b/scripts/link-vmlinux.sh -@@ -65,6 +65,10 @@ vmlinux_link() - -lutil -lrt -lpthread ${1} +@@ -111,6 +111,10 @@ vmlinux_link() + -lutil -lrt -lpthread rm -f linux fi + if [ -n "${AFTER_LINK}" ]; then @@ -122,5 +122,5 @@ index dacf71a..72cbefd 100755 -- -2.5.0 +2.7.4 diff --git a/kernel.spec b/kernel.spec index 9397081a4..d5ae1ade1 100644 --- a/kernel.spec +++ b/kernel.spec @@ -42,19 +42,19 @@ Summary: The Linux kernel # For non-released -rc kernels, this will be appended after the rcX and # gitX tags, so a 3 here would become part of release "0.rcX.gitX.3" # -%global baserelease 200 +%global baserelease 100 %global fedora_build %{baserelease} # base_sublevel is the kernel version we're starting with and patching # on top of -- for example, 3.1-rc7-git1 starts with a 3.0 base, # which yields a base_sublevel of 0. -%define base_sublevel 8 +%define base_sublevel 9 ## If this is a released kernel ## %if 0%{?released_kernel} # Do we have a -stable update to apply? -%define stable_update 17 +%define stable_update 4 # Set rpm version accordingly %if 0%{?stable_update} %define stablerev %{stable_update} @@ -409,7 +409,7 @@ Source0: ftp://ftp.kernel.org/pub/linux/kernel/v4.x/linux-%{kversion}.tar.xz Source10: perf-man-%{kversion}.tar.gz Source11: x509.genkey - +Source12: remove-binary-diff.pl Source15: merge.pl Source16: mod-extra.list Source17: mod-extra.sh @@ -497,9 +497,6 @@ Source5005: kbuild-AFTER_LINK.patch # Standalone patches -# http://www.spinics.net/lists/arm-kernel/msg523359.html -Patch420: arm64-ACPI-parse-SPCR-table.patch - # a tempory patch for QCOM hardware enablement. Will be gone by end of 2016/F-26 GA Patch421: qcom-QDF2432-tmp-errata.patch @@ -513,8 +510,12 @@ Patch425: arm64-pcie-quirks.patch # http://www.spinics.net/lists/linux-tegra/msg26029.html Patch426: usb-phy-tegra-Add-38.4MHz-clock-table-entry.patch -Patch427: ARM-OMAP4-Fix-crashes.patch -Patch428: arm-revert-mmc-omap_hsmmc-Use-dma_request_chan-for-reque.patch +# Fix OMAP4 (pandaboard) +Patch427: arm-revert-mmc-omap_hsmmc-Use-dma_request_chan-for-reque.patch + +# Not particularly happy we don't yet have a proper upstream resolution this is the right direction +# https://www.spinics.net/lists/arm-kernel/msg535191.html +Patch429: arm64-mm-Fix-memmap-to-be-initialized-for-the-entire-section.patch # http://patchwork.ozlabs.org/patch/587554/ Patch430: ARM-tegra-usb-no-reset.patch @@ -523,9 +524,16 @@ Patch431: bcm2837-initial-support.patch Patch432: bcm283x-vc4-fixes.patch -Patch433: AllWinner-net-emac.patch +Patch433: bcm283x-fixes.patch -Patch434: ARM-Drop-fixed-200-Hz-timer-requirement-from-Samsung-platforms.patch +# http://www.spinics.net/lists/linux-mmc/msg41151.html +Patch434: bcm283x-mmc-imp-speed.patch + +Patch440: AllWinner-net-emac.patch + +Patch442: ARM-Drop-fixed-200-Hz-timer-requirement-from-Samsung-platforms.patch + +Patch443: imx6sx-Add-UDOO-Neo-support.patch Patch460: lib-cpumask-Make-CPUMASK_OFFSTACK-usable-without-deb.patch @@ -561,7 +569,9 @@ Patch481: x86-Restrict-MSR-access-when-module-loading-is-restr.patch Patch482: Add-option-to-automatically-enforce-module-signature.patch -Patch483: efi-Disable-secure-boot-if-shim-is-in-insecure-mode.patch +Patch483: efi-Add-SHIM-and-image-security-database-GUID-defini.patch + +Patch484: efi-Disable-secure-boot-if-shim-is-in-insecure-mode.patch Patch485: efi-Add-EFI_SECURE_BOOT-bit.patch @@ -607,38 +617,22 @@ Patch502: firmware-Drop-WARN-from-usermodehelper_read_trylock-.patch Patch508: kexec-uefi-copy-secure_boot-flag-in-boot-params.patch +Patch509: MODSIGN-Don-t-try-secure-boot-if-EFI-runtime-is-disa.patch + #CVE-2016-3134 rhbz 1317383 1317384 Patch665: netfilter-x_tables-deal-with-bogus-nextoffset-values.patch -#rhbz 1200901 (There should be something better upstream at some point) -Patch842: qxl-reapply-cursor-after-SetCrtc-calls.patch - -# From kernel list, currently in linux-next -Patch845: HID-microsoft-Add-Surface-4-type-cover-pro-4-JP.patch - -# SELinux OverlayFS support (queued for 4.9) -Patch846: security-selinux-overlayfs-support.patch - -#rhbz 1360688 -Patch847: rc-core-fix-repeat-events.patch - #ongoing complaint, full discussion delayed until ksummit/plumbers Patch849: 0001-iio-Use-event-header-from-kernel-tree.patch -# CVE-2016-9083 CVE-2016-9084 rhbz 1389258 1389259 1389285 -Patch850: v3-vfio-pci-Fix-integer-overflows-bitmask-check.patch +# Work around thinkpad firmware memory layout issues and efi_mem_reserve() +Patch850: 0001-efi-prune-invalid-memory-map-entries.patch -#rhbz 1325354 -Patch852: 0001-HID-input-ignore-System-Control-application-usages-i.patch +# Request from dwalsh +Patch851: selinux-namespace-fix.patch #rhbz 1390308 -Patch854: nouveau-add-maxwell-to-backlight-init.patch - -#rhbz 1385823 -Patch855: 0001-platform-x86-ideapad-laptop-Add-Lenovo-Yoga-910-13IK.patch - -# CVE-2016-9755 rhbz 1400904 1400905 -Patch856: 0001-netfilter-ipv6-nf_defrag-drop-mangled-skb-on-ream-er.patch +Patch852: nouveau-add-maxwell-to-backlight-init.patch # END OF PATCH DEFINITIONS @@ -1154,17 +1148,19 @@ if [ ! -d kernel-%{kversion}%{?dist}/vanilla-%{vanillaversion} ]; then cp -al vanilla-%{kversion} vanilla-%{vanillaversion} cd vanilla-%{vanillaversion} +cp %{SOURCE12} . + # Update vanilla to the latest upstream. # (non-released_kernel case only) %if 0%{?rcrev} - xzcat %{SOURCE5000} | patch -p1 -F1 -s + xzcat %{SOURCE5000} | ./remove-binary-diff.pl | patch -p1 -F1 -s %if 0%{?gitrev} - xzcat %{SOURCE5001} | patch -p1 -F1 -s + xzcat %{SOURCE5001} | ./remove-binary-diff.pl | patch -p1 -F1 -s %endif %else # pre-{base_sublevel+1}-rc1 case %if 0%{?gitrev} - xzcat %{SOURCE5000} | patch -p1 -F1 -s + xzcat %{SOURCE5000} | ./remove-binary-diff.pl | patch -p1 -F1 -s %endif %endif git init @@ -1681,7 +1677,7 @@ BuildKernel %make_target %kernel_image %endif %global perf_make \ - make -s EXTRA_CFLAGS="${RPM_OPT_FLAGS}" LDFLAGS="%{__global_ldflags}" %{?cross_opts} %{?_smp_mflags} -C tools/perf V=1 NO_PERF_READ_VDSO32=1 NO_PERF_READ_VDSOX32=1 WERROR=0 NO_LIBUNWIND=1 HAVE_CPLUS_DEMANGLE=1 NO_GTK2=1 NO_STRLCPY=1 NO_BIONIC=1 prefix=%{_prefix} + make -s EXTRA_CFLAGS="${RPM_OPT_FLAGS}" LDFLAGS="%{__global_ldflags}" %{?cross_opts} -C tools/perf V=1 NO_PERF_READ_VDSO32=1 NO_PERF_READ_VDSOX32=1 WERROR=0 NO_LIBUNWIND=1 HAVE_CPLUS_DEMANGLE=1 NO_GTK2=1 NO_STRLCPY=1 NO_BIONIC=1 prefix=%{_prefix} %if %{with_perf} # perf %{perf_make} DESTDIR=$RPM_BUILD_ROOT all @@ -2167,6 +2163,10 @@ fi # # %changelog +* Thu Jan 12 2017 Laura Abbott - 4.9.4-100 +- Linux v4.9.4 rebase +- Minor updates for Raspberry Pi 3 support (thanks pbrobinson) + * Mon Jan 09 2017 Justin M. Forbes - 4.8.17-200 - Linux v4.8.17 diff --git a/remove-binary-diff.pl b/remove-binary-diff.pl new file mode 100755 index 000000000..9048490ca --- /dev/null +++ b/remove-binary-diff.pl @@ -0,0 +1,34 @@ +#!/usr/bin/perl -w +# A script to remove those terrible binary diffs from the patches which +# screw up everything and rain on my parade. + +use strict; + +my @args=@ARGV; +my @current_patch; +my $is_binary = 0; +my $cnt = 0; + +while(my $row = <>) { + # diff marks the start of a new file to check + if ($row =~ /^diff --git.*?(\S+)$/) { + if (!$is_binary) { + foreach my $line (@current_patch) { + print $line; + } + } + $is_binary = 0; + @current_patch = (); + } elsif ($row =~ /Binary files (.)* differ$/) { + $is_binary = 1; + } elsif ($row =~ /GIT binary patch/) { + $is_binary = 1; + } + push (@current_patch, $row); +} + +if (!$is_binary) { + foreach my $line (@current_patch) { + print $line; + } +} diff --git a/selinux-namespace-fix.patch b/selinux-namespace-fix.patch new file mode 100644 index 000000000..f94ec15d8 --- /dev/null +++ b/selinux-namespace-fix.patch @@ -0,0 +1,57 @@ +From 4a49d45dd58994f4fc9b40c502252403caadee88 Mon Sep 17 00:00:00 2001 +From: Stephen Smalley +Date: Thu, 8 Dec 2016 09:14:47 -0500 +Subject: [PATCH] selinux: allow context mounts on tmpfs, ramfs, devpts within + user namespaces + +commit aad82892af261b9903cc11c55be3ecf5f0b0b4f8 ("selinux: Add support for +unprivileged mounts from user namespaces") prohibited any use of context +mount options within non-init user namespaces. However, this breaks +use of context mount options for tmpfs mounts within user namespaces, +which are being used by Docker/runc. There is no reason to block such +usage for tmpfs, ramfs or devpts. Exempt these filesystem types +from this restriction. + +Before: +sh$ userns_child_exec -p -m -U -M '0 1000 1' -G '0 1000 1' bash +sh# mount -t tmpfs -o context=system_u:object_r:user_tmp_t:s0:c13 none /tmp +mount: tmpfs is write-protected, mounting read-only +mount: cannot mount tmpfs read-only + +After: +sh$ userns_child_exec -p -m -U -M '0 1000 1' -G '0 1000 1' bash +sh# mount -t tmpfs -o context=system_u:object_r:user_tmp_t:s0:c13 none /tmp +sh# ls -Zd /tmp +unconfined_u:object_r:user_tmp_t:s0:c13 /tmp + +Signed-off-by: Stephen Smalley +Signed-off-by: Paul Moore +--- + security/selinux/hooks.c | 10 +++++++--- + 1 file changed, 7 insertions(+), 3 deletions(-) + +diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c +index b508a5a..e7c5481 100644 +--- a/security/selinux/hooks.c ++++ b/security/selinux/hooks.c +@@ -834,10 +834,14 @@ static int selinux_set_mnt_opts(struct super_block *sb, + } + + /* +- * If this is a user namespace mount, no contexts are allowed +- * on the command line and security labels must be ignored. ++ * If this is a user namespace mount and the filesystem type is not ++ * explicitly whitelisted, then no contexts are allowed on the command ++ * line and security labels must be ignored. + */ +- if (sb->s_user_ns != &init_user_ns) { ++ if (sb->s_user_ns != &init_user_ns && ++ strcmp(sb->s_type->name, "tmpfs") && ++ strcmp(sb->s_type->name, "ramfs") && ++ strcmp(sb->s_type->name, "devpts")) { + if (context_sid || fscontext_sid || rootcontext_sid || + defcontext_sid) { + rc = -EACCES; +-- +2.4.11 + diff --git a/sources b/sources index abfb30321..a60ea42a6 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ -SHA512 (linux-4.8.tar.xz) = a48a065f21e1c7c4de4cf8ca47b8b8d9a70f86b64e7cfa6e01be490f78895745b9c8790734b1d22182cf1f930fb87eaaa84e62ec8cc1f64ac4be9b949e7c0358 -SHA512 (perf-man-4.8.tar.gz) = 1e9707f1e11808178c1953d4f46e1789a138e9aca7bec89af7a6e209cd91e5301bc582db72cf889baa31dcba8cd3d3b1ceb4e8999ac1544ef17d513e861f2b59 -SHA512 (patch-4.8.17.xz) = df239d990077cdf697fd487b4b8abb97fe442ac9fac4ed2e90c626560fc15058363310cf40580fd000d4ad55198486594a608544ce9c2bcaf03704415aa45441 +SHA512 (linux-4.9.tar.xz) = bf67ff812cc3cb7e5059e82cc5db0d9a7c5637f7ed9a42e4730c715bf7047c81ed3a571225f92a33ef0b6d65f35595bc32d773356646df2627da55e9bc7f1f1a +SHA512 (perf-man-4.9.tar.gz) = d23bb3da1eadd6623fddbf4696948de7675f3dcf57c711a7427dd7ae111394f58d8f42752938bbea7cd219f1e7f6f116fc67a1c74f769711063940a065f37b99 +SHA512 (patch-4.9.4.xz) = d6a81ef416068a92bfa5a6a6156cfc50e9c4c44ac6343c076551376f0ce5be486147abf7aa1eed48c3f10ef5d97d3880924c56b70ff4b92faae106d994a25e48 diff --git a/v3-vfio-pci-Fix-integer-overflows-bitmask-check.patch b/v3-vfio-pci-Fix-integer-overflows-bitmask-check.patch deleted file mode 100644 index 5278d4486..000000000 --- a/v3-vfio-pci-Fix-integer-overflows-bitmask-check.patch +++ /dev/null @@ -1,102 +0,0 @@ -From patchwork Wed Oct 12 16:51:24 2016 -Content-Type: text/plain; charset="utf-8" -MIME-Version: 1.0 -Content-Transfer-Encoding: 7bit -Subject: [v3] vfio/pci: Fix integer overflows, bitmask check -From: Vlad Tsyrklevich -X-Patchwork-Id: 9373631 -Message-Id: <1476291084-50737-1-git-send-email-vlad@tsyrklevich.net> -To: kvm@vger.kernel.org -Cc: alex.williamson@redhat.com, Vlad Tsyrklevich -Date: Wed, 12 Oct 2016 18:51:24 +0200 - -The VFIO_DEVICE_SET_IRQS ioctl did not sufficiently sanitize -user-supplied integers, potentially allowing memory corruption. This -patch adds appropriate integer overflow checks, checks the range bounds -for VFIO_IRQ_SET_DATA_NONE, and also verifies that only single element -in the VFIO_IRQ_SET_DATA_TYPE_MASK bitmask is set. -VFIO_IRQ_SET_ACTION_TYPE_MASK is already correctly checked later in -vfio_pci_set_irqs_ioctl(). - -Furthermore, a kzalloc is changed to a kcalloc because the use of a -kzalloc with an integer multiplication allowed an integer overflow -condition to be reached without this patch. kcalloc checks for overflow -and should prevent a similar occurrence. - -Signed-off-by: Vlad Tsyrklevich ---- - drivers/vfio/pci/vfio_pci.c | 33 +++++++++++++++++++++------------ - drivers/vfio/pci/vfio_pci_intrs.c | 2 +- - 2 files changed, 22 insertions(+), 13 deletions(-) - -diff --git a/drivers/vfio/pci/vfio_pci.c b/drivers/vfio/pci/vfio_pci.c -index d624a52..031bc08 100644 ---- a/drivers/vfio/pci/vfio_pci.c -+++ b/drivers/vfio/pci/vfio_pci.c -@@ -829,8 +829,9 @@ static long vfio_pci_ioctl(void *device_data, - - } else if (cmd == VFIO_DEVICE_SET_IRQS) { - struct vfio_irq_set hdr; -+ size_t size; - u8 *data = NULL; -- int ret = 0; -+ int max, ret = 0; - - minsz = offsetofend(struct vfio_irq_set, count); - -@@ -838,23 +839,31 @@ static long vfio_pci_ioctl(void *device_data, - return -EFAULT; - - if (hdr.argsz < minsz || hdr.index >= VFIO_PCI_NUM_IRQS || -+ hdr.count >= (U32_MAX - hdr.start) || - hdr.flags & ~(VFIO_IRQ_SET_DATA_TYPE_MASK | - VFIO_IRQ_SET_ACTION_TYPE_MASK)) - return -EINVAL; - -- if (!(hdr.flags & VFIO_IRQ_SET_DATA_NONE)) { -- size_t size; -- int max = vfio_pci_get_irq_count(vdev, hdr.index); -+ max = vfio_pci_get_irq_count(vdev, hdr.index); -+ if (hdr.start >= max || hdr.start + hdr.count > max) -+ return -EINVAL; - -- if (hdr.flags & VFIO_IRQ_SET_DATA_BOOL) -- size = sizeof(uint8_t); -- else if (hdr.flags & VFIO_IRQ_SET_DATA_EVENTFD) -- size = sizeof(int32_t); -- else -- return -EINVAL; -+ switch (hdr.flags & VFIO_IRQ_SET_DATA_TYPE_MASK) { -+ case VFIO_IRQ_SET_DATA_NONE: -+ size = 0; -+ break; -+ case VFIO_IRQ_SET_DATA_BOOL: -+ size = sizeof(uint8_t); -+ break; -+ case VFIO_IRQ_SET_DATA_EVENTFD: -+ size = sizeof(int32_t); -+ break; -+ default: -+ return -EINVAL; -+ } - -- if (hdr.argsz - minsz < hdr.count * size || -- hdr.start >= max || hdr.start + hdr.count > max) -+ if (size) { -+ if (hdr.argsz - minsz < hdr.count * size) - return -EINVAL; - - data = memdup_user((void __user *)(arg + minsz), -diff --git a/drivers/vfio/pci/vfio_pci_intrs.c b/drivers/vfio/pci/vfio_pci_intrs.c -index c2e6089..1c46045 100644 ---- a/drivers/vfio/pci/vfio_pci_intrs.c -+++ b/drivers/vfio/pci/vfio_pci_intrs.c -@@ -256,7 +256,7 @@ static int vfio_msi_enable(struct vfio_pci_device *vdev, int nvec, bool msix) - if (!is_irq_none(vdev)) - return -EINVAL; - -- vdev->ctx = kzalloc(nvec * sizeof(struct vfio_pci_irq_ctx), GFP_KERNEL); -+ vdev->ctx = kcalloc(nvec, sizeof(struct vfio_pci_irq_ctx), GFP_KERNEL); - if (!vdev->ctx) - return -ENOMEM; - From 9496110f0135411b80dd21f7fb9a7da6810f30f4 Mon Sep 17 00:00:00 2001 From: Laura Abbott Date: Mon, 16 Jan 2017 13:51:01 -0800 Subject: [PATCH 182/275] Missed that patch --- ...e-initialized-for-the-entire-section.patch | 93 +++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 arm64-mm-Fix-memmap-to-be-initialized-for-the-entire-section.patch diff --git a/arm64-mm-Fix-memmap-to-be-initialized-for-the-entire-section.patch b/arm64-mm-Fix-memmap-to-be-initialized-for-the-entire-section.patch new file mode 100644 index 000000000..eaf809d53 --- /dev/null +++ b/arm64-mm-Fix-memmap-to-be-initialized-for-the-entire-section.patch @@ -0,0 +1,93 @@ +From patchwork Thu Oct 6 09:52:07 2016 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +Subject: arm64: mm: Fix memmap to be initialized for the entire section +From: Robert Richter +X-Patchwork-Id: 9364537 +Message-Id: <1475747527-32387-1-git-send-email-rrichter@cavium.com> +To: Catalin Marinas , Will Deacon + +Cc: Mark Rutland , linux-efi@vger.kernel.org, + David Daney , + Ard Biesheuvel , + linux-kernel@vger.kernel.org, Robert Richter , + Hanjun Guo , linux-arm-kernel@lists.infradead.org +Date: Thu, 6 Oct 2016 11:52:07 +0200 + +There is a memory setup problem on ThunderX systems with certain +memory configurations. The symptom is + + kernel BUG at mm/page_alloc.c:1848! + +This happens for some configs with 64k page size enabled. The bug +triggers for page zones with some pages in the zone not assigned to +this particular zone. In my case some pages that are marked as nomap +were not reassigned to the new zone of node 1, so those are still +assigned to node 0. + +The reason for the mis-configuration is a change in pfn_valid() which +reports pages marked nomap as invalid: + + 68709f45385a arm64: only consider memblocks with NOMAP cleared for linear mapping + +This causes pages marked as nomap being no long reassigned to the new +zone in memmap_init_zone() by calling __init_single_pfn(). + +Fixing this by restoring the old behavior of pfn_valid() to use +memblock_is_memory(). Also changing users of pfn_valid() in arm64 code +to use memblock_is_map_memory() where necessary. This only affects +code in ioremap.c. The code in mmu.c still can use the new version of +pfn_valid(). + +Should be marked stable v4.5.. + +Signed-off-by: Robert Richter +--- + arch/arm64/mm/init.c | 2 +- + arch/arm64/mm/ioremap.c | 5 +++-- + 2 files changed, 4 insertions(+), 3 deletions(-) + +diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c +index bbb7ee76e319..25b8659c2a9f 100644 +--- a/arch/arm64/mm/init.c ++++ b/arch/arm64/mm/init.c +@@ -147,7 +147,7 @@ static void __init zone_sizes_init(unsigned long min, unsigned long max) + #ifdef CONFIG_HAVE_ARCH_PFN_VALID + int pfn_valid(unsigned long pfn) + { +- return memblock_is_map_memory(pfn << PAGE_SHIFT); ++ return memblock_is_memory(pfn << PAGE_SHIFT); + } + EXPORT_SYMBOL(pfn_valid); + #endif +diff --git a/arch/arm64/mm/ioremap.c b/arch/arm64/mm/ioremap.c +index 01e88c8bcab0..c17c220b0c48 100644 +--- a/arch/arm64/mm/ioremap.c ++++ b/arch/arm64/mm/ioremap.c +@@ -21,6 +21,7 @@ + */ + + #include ++#include + #include + #include + #include +@@ -55,7 +56,7 @@ static void __iomem *__ioremap_caller(phys_addr_t phys_addr, size_t size, + /* + * Don't allow RAM to be mapped. + */ +- if (WARN_ON(pfn_valid(__phys_to_pfn(phys_addr)))) ++ if (WARN_ON(memblock_is_map_memory(phys_addr))) + return NULL; + + area = get_vm_area_caller(size, VM_IOREMAP, caller); +@@ -96,7 +97,7 @@ EXPORT_SYMBOL(__iounmap); + void __iomem *ioremap_cache(phys_addr_t phys_addr, size_t size) + { + /* For normal memory we already have a cacheable mapping. */ +- if (pfn_valid(__phys_to_pfn(phys_addr))) ++ if (memblock_is_map_memory(phys_addr)) + return (void __iomem *)__phys_to_virt(phys_addr); + + return __ioremap_caller(phys_addr, size, __pgprot(PROT_NORMAL), From 629c146990e59fb5bf75cab66805171a894b4f1f Mon Sep 17 00:00:00 2001 From: Laura Abbott Date: Tue, 17 Jan 2017 10:17:09 -0800 Subject: [PATCH 183/275] Add possible ATI fixes --- drm-amdgpu-drop-verde-dpm-quirks.patch | 41 ++++++ ...amdgpu-update-si-kicker-smc-firmware.patch | 110 ++++++++++++++++ drm-radeon-drop-verde-dpm-quirks.patch | 44 +++++++ ...update-smc-firmware-selection-for-si.patch | 124 ++++++++++++++++++ kernel.spec | 11 +- 5 files changed, 329 insertions(+), 1 deletion(-) create mode 100644 drm-amdgpu-drop-verde-dpm-quirks.patch create mode 100644 drm-amdgpu-update-si-kicker-smc-firmware.patch create mode 100644 drm-radeon-drop-verde-dpm-quirks.patch create mode 100644 drm-radeon-update-smc-firmware-selection-for-si.patch diff --git a/drm-amdgpu-drop-verde-dpm-quirks.patch b/drm-amdgpu-drop-verde-dpm-quirks.patch new file mode 100644 index 000000000..92df978cf --- /dev/null +++ b/drm-amdgpu-drop-verde-dpm-quirks.patch @@ -0,0 +1,41 @@ +From 7192c54a68013f6058b1bb505645fcd07015191c Mon Sep 17 00:00:00 2001 +From: Alex Deucher +Date: Thu, 5 Jan 2017 13:02:37 -0500 +Subject: drm/amdgpu: drop verde dpm quirks + +From: Alex Deucher + +commit 7192c54a68013f6058b1bb505645fcd07015191c upstream. + +Port of radeon change to amdgpu. + +Acked-by: Edward O'Callaghan +Signed-off-by: Alex Deucher +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/amd/amdgpu/si_dpm.c | 13 ------------- + 1 file changed, 13 deletions(-) + +--- a/drivers/gpu/drm/amd/amdgpu/si_dpm.c ++++ b/drivers/gpu/drm/amd/amdgpu/si_dpm.c +@@ -3485,19 +3485,6 @@ static void si_apply_state_adjust_rules( + (adev->pdev->device == 0x6817) || + (adev->pdev->device == 0x6806)) + max_mclk = 120000; +- } else if (adev->asic_type == CHIP_VERDE) { +- if ((adev->pdev->revision == 0x81) || +- (adev->pdev->revision == 0x83) || +- (adev->pdev->revision == 0x87) || +- (adev->pdev->device == 0x6820) || +- (adev->pdev->device == 0x6821) || +- (adev->pdev->device == 0x6822) || +- (adev->pdev->device == 0x6823) || +- (adev->pdev->device == 0x682A) || +- (adev->pdev->device == 0x682B)) { +- max_sclk = 75000; +- max_mclk = 80000; +- } + } else if (adev->asic_type == CHIP_OLAND) { + if ((adev->pdev->revision == 0xC7) || + (adev->pdev->revision == 0x80) || diff --git a/drm-amdgpu-update-si-kicker-smc-firmware.patch b/drm-amdgpu-update-si-kicker-smc-firmware.patch new file mode 100644 index 000000000..1c0805f4e --- /dev/null +++ b/drm-amdgpu-update-si-kicker-smc-firmware.patch @@ -0,0 +1,110 @@ +From 5165484b02f2cbedb5bf3a41ff5e8ae16069016c Mon Sep 17 00:00:00 2001 +From: Flora Cui +Date: Thu, 15 Dec 2016 13:43:59 +0800 +Subject: drm/amdgpu: update si kicker smc firmware + +From: Flora Cui + +commit 5165484b02f2cbedb5bf3a41ff5e8ae16069016c upstream. + +Use the appropriate smc firmware for each chip revision. +Using the wrong one can cause stability issues. + +Acked-by: Edward O'Callaghan +Signed-off-by: Flora Cui +Reviewed-by: Junwei Zhang +Signed-off-by: Alex Deucher +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/amd/amdgpu/si_dpm.c | 57 +++++++++++++++++------------------- + 1 file changed, 28 insertions(+), 29 deletions(-) + +--- a/drivers/gpu/drm/amd/amdgpu/si_dpm.c ++++ b/drivers/gpu/drm/amd/amdgpu/si_dpm.c +@@ -56,7 +56,6 @@ + #define BIOS_SCRATCH_4 0x5cd + + MODULE_FIRMWARE("radeon/tahiti_smc.bin"); +-MODULE_FIRMWARE("radeon/tahiti_k_smc.bin"); + MODULE_FIRMWARE("radeon/pitcairn_smc.bin"); + MODULE_FIRMWARE("radeon/pitcairn_k_smc.bin"); + MODULE_FIRMWARE("radeon/verde_smc.bin"); +@@ -7685,49 +7684,49 @@ static int si_dpm_init_microcode(struct + chip_name = "tahiti"; + break; + case CHIP_PITCAIRN: +- if ((adev->pdev->revision == 0x81) || +- (adev->pdev->device == 0x6810) || +- (adev->pdev->device == 0x6811) || +- (adev->pdev->device == 0x6816) || +- (adev->pdev->device == 0x6817) || +- (adev->pdev->device == 0x6806)) ++ if ((adev->pdev->revision == 0x81) && ++ ((adev->pdev->device == 0x6810) || ++ (adev->pdev->device == 0x6811))) + chip_name = "pitcairn_k"; + else + chip_name = "pitcairn"; + break; + case CHIP_VERDE: +- if ((adev->pdev->revision == 0x81) || +- (adev->pdev->revision == 0x83) || +- (adev->pdev->revision == 0x87) || +- (adev->pdev->device == 0x6820) || +- (adev->pdev->device == 0x6821) || +- (adev->pdev->device == 0x6822) || +- (adev->pdev->device == 0x6823) || +- (adev->pdev->device == 0x682A) || +- (adev->pdev->device == 0x682B)) ++ if (((adev->pdev->device == 0x6820) && ++ ((adev->pdev->revision == 0x81) || ++ (adev->pdev->revision == 0x83))) || ++ ((adev->pdev->device == 0x6821) && ++ ((adev->pdev->revision == 0x83) || ++ (adev->pdev->revision == 0x87))) || ++ ((adev->pdev->revision == 0x87) && ++ ((adev->pdev->device == 0x6823) || ++ (adev->pdev->device == 0x682b)))) + chip_name = "verde_k"; + else + chip_name = "verde"; + break; + case CHIP_OLAND: +- if ((adev->pdev->revision == 0xC7) || +- (adev->pdev->revision == 0x80) || +- (adev->pdev->revision == 0x81) || +- (adev->pdev->revision == 0x83) || +- (adev->pdev->revision == 0x87) || +- (adev->pdev->device == 0x6604) || +- (adev->pdev->device == 0x6605)) ++ if (((adev->pdev->revision == 0x81) && ++ ((adev->pdev->device == 0x6600) || ++ (adev->pdev->device == 0x6604) || ++ (adev->pdev->device == 0x6605) || ++ (adev->pdev->device == 0x6610))) || ++ ((adev->pdev->revision == 0x83) && ++ (adev->pdev->device == 0x6610))) + chip_name = "oland_k"; + else + chip_name = "oland"; + break; + case CHIP_HAINAN: +- if ((adev->pdev->revision == 0x81) || +- (adev->pdev->revision == 0x83) || +- (adev->pdev->revision == 0xC3) || +- (adev->pdev->device == 0x6664) || +- (adev->pdev->device == 0x6665) || +- (adev->pdev->device == 0x6667)) ++ if (((adev->pdev->revision == 0x81) && ++ (adev->pdev->device == 0x6660)) || ++ ((adev->pdev->revision == 0x83) && ++ ((adev->pdev->device == 0x6660) || ++ (adev->pdev->device == 0x6663) || ++ (adev->pdev->device == 0x6665) || ++ (adev->pdev->device == 0x6667))) || ++ ((adev->pdev->revision == 0xc3) && ++ (adev->pdev->device == 0x6665))) + chip_name = "hainan_k"; + else + chip_name = "hainan"; diff --git a/drm-radeon-drop-verde-dpm-quirks.patch b/drm-radeon-drop-verde-dpm-quirks.patch new file mode 100644 index 000000000..ea736b2a1 --- /dev/null +++ b/drm-radeon-drop-verde-dpm-quirks.patch @@ -0,0 +1,44 @@ +From 8a08403bcb39f5d0e733bcf59a8a74f16b538f6e Mon Sep 17 00:00:00 2001 +From: Alex Deucher +Date: Thu, 5 Jan 2017 12:39:01 -0500 +Subject: drm/radeon: drop verde dpm quirks + +From: Alex Deucher + +commit 8a08403bcb39f5d0e733bcf59a8a74f16b538f6e upstream. + +fixes: +https://bugs.freedesktop.org/show_bug.cgi?id=98897 +https://bugs.launchpad.net/bugs/1651981 + +Acked-by: Edward O'Callaghan +Signed-off-by: Alex Deucher +Cc: Adrian Fiergolski +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/radeon/si_dpm.c | 13 ------------- + 1 file changed, 13 deletions(-) + +--- a/drivers/gpu/drm/radeon/si_dpm.c ++++ b/drivers/gpu/drm/radeon/si_dpm.c +@@ -3008,19 +3008,6 @@ static void si_apply_state_adjust_rules( + (rdev->pdev->device == 0x6817) || + (rdev->pdev->device == 0x6806)) + max_mclk = 120000; +- } else if (rdev->family == CHIP_VERDE) { +- if ((rdev->pdev->revision == 0x81) || +- (rdev->pdev->revision == 0x83) || +- (rdev->pdev->revision == 0x87) || +- (rdev->pdev->device == 0x6820) || +- (rdev->pdev->device == 0x6821) || +- (rdev->pdev->device == 0x6822) || +- (rdev->pdev->device == 0x6823) || +- (rdev->pdev->device == 0x682A) || +- (rdev->pdev->device == 0x682B)) { +- max_sclk = 75000; +- max_mclk = 80000; +- } + } else if (rdev->family == CHIP_OLAND) { + if ((rdev->pdev->revision == 0xC7) || + (rdev->pdev->revision == 0x80) || diff --git a/drm-radeon-update-smc-firmware-selection-for-si.patch b/drm-radeon-update-smc-firmware-selection-for-si.patch new file mode 100644 index 000000000..ad115ef05 --- /dev/null +++ b/drm-radeon-update-smc-firmware-selection-for-si.patch @@ -0,0 +1,124 @@ +From 6458bd4dfd9414cba5804eb9907fe2a824278c34 Mon Sep 17 00:00:00 2001 +From: Alex Deucher +Date: Thu, 5 Jan 2017 12:15:52 -0500 +Subject: drm/radeon: update smc firmware selection for SI + +From: Alex Deucher + +commit 6458bd4dfd9414cba5804eb9907fe2a824278c34 upstream. + +Use the appropriate smc firmware for each chip revision. +Using the wrong one can cause stability issues. + +Acked-by: Edward O'Callaghan +Signed-off-by: Alex Deucher +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/radeon/si.c | 60 ++++++++++++++++++++------------------------ + 1 file changed, 28 insertions(+), 32 deletions(-) + +--- a/drivers/gpu/drm/radeon/si.c ++++ b/drivers/gpu/drm/radeon/si.c +@@ -50,7 +50,6 @@ MODULE_FIRMWARE("radeon/tahiti_ce.bin"); + MODULE_FIRMWARE("radeon/tahiti_mc.bin"); + MODULE_FIRMWARE("radeon/tahiti_rlc.bin"); + MODULE_FIRMWARE("radeon/tahiti_smc.bin"); +-MODULE_FIRMWARE("radeon/tahiti_k_smc.bin"); + + MODULE_FIRMWARE("radeon/PITCAIRN_pfp.bin"); + MODULE_FIRMWARE("radeon/PITCAIRN_me.bin"); +@@ -1657,9 +1656,6 @@ static int si_init_microcode(struct rade + switch (rdev->family) { + case CHIP_TAHITI: + chip_name = "TAHITI"; +- /* XXX: figure out which Tahitis need the new ucode */ +- if (0) +- new_smc = true; + new_chip_name = "tahiti"; + pfp_req_size = SI_PFP_UCODE_SIZE * 4; + me_req_size = SI_PM4_UCODE_SIZE * 4; +@@ -1671,12 +1667,9 @@ static int si_init_microcode(struct rade + break; + case CHIP_PITCAIRN: + chip_name = "PITCAIRN"; +- if ((rdev->pdev->revision == 0x81) || +- (rdev->pdev->device == 0x6810) || +- (rdev->pdev->device == 0x6811) || +- (rdev->pdev->device == 0x6816) || +- (rdev->pdev->device == 0x6817) || +- (rdev->pdev->device == 0x6806)) ++ if ((rdev->pdev->revision == 0x81) && ++ ((rdev->pdev->device == 0x6810) || ++ (rdev->pdev->device == 0x6811))) + new_smc = true; + new_chip_name = "pitcairn"; + pfp_req_size = SI_PFP_UCODE_SIZE * 4; +@@ -1689,15 +1682,15 @@ static int si_init_microcode(struct rade + break; + case CHIP_VERDE: + chip_name = "VERDE"; +- if ((rdev->pdev->revision == 0x81) || +- (rdev->pdev->revision == 0x83) || +- (rdev->pdev->revision == 0x87) || +- (rdev->pdev->device == 0x6820) || +- (rdev->pdev->device == 0x6821) || +- (rdev->pdev->device == 0x6822) || +- (rdev->pdev->device == 0x6823) || +- (rdev->pdev->device == 0x682A) || +- (rdev->pdev->device == 0x682B)) ++ if (((rdev->pdev->device == 0x6820) && ++ ((rdev->pdev->revision == 0x81) || ++ (rdev->pdev->revision == 0x83))) || ++ ((rdev->pdev->device == 0x6821) && ++ ((rdev->pdev->revision == 0x83) || ++ (rdev->pdev->revision == 0x87))) || ++ ((rdev->pdev->revision == 0x87) && ++ ((rdev->pdev->device == 0x6823) || ++ (rdev->pdev->device == 0x682b)))) + new_smc = true; + new_chip_name = "verde"; + pfp_req_size = SI_PFP_UCODE_SIZE * 4; +@@ -1710,13 +1703,13 @@ static int si_init_microcode(struct rade + break; + case CHIP_OLAND: + chip_name = "OLAND"; +- if ((rdev->pdev->revision == 0xC7) || +- (rdev->pdev->revision == 0x80) || +- (rdev->pdev->revision == 0x81) || +- (rdev->pdev->revision == 0x83) || +- (rdev->pdev->revision == 0x87) || +- (rdev->pdev->device == 0x6604) || +- (rdev->pdev->device == 0x6605)) ++ if (((rdev->pdev->revision == 0x81) && ++ ((rdev->pdev->device == 0x6600) || ++ (rdev->pdev->device == 0x6604) || ++ (rdev->pdev->device == 0x6605) || ++ (rdev->pdev->device == 0x6610))) || ++ ((rdev->pdev->revision == 0x83) && ++ (rdev->pdev->device == 0x6610))) + new_smc = true; + new_chip_name = "oland"; + pfp_req_size = SI_PFP_UCODE_SIZE * 4; +@@ -1728,12 +1721,15 @@ static int si_init_microcode(struct rade + break; + case CHIP_HAINAN: + chip_name = "HAINAN"; +- if ((rdev->pdev->revision == 0x81) || +- (rdev->pdev->revision == 0x83) || +- (rdev->pdev->revision == 0xC3) || +- (rdev->pdev->device == 0x6664) || +- (rdev->pdev->device == 0x6665) || +- (rdev->pdev->device == 0x6667)) ++ if (((rdev->pdev->revision == 0x81) && ++ (rdev->pdev->device == 0x6660)) || ++ ((rdev->pdev->revision == 0x83) && ++ ((rdev->pdev->device == 0x6660) || ++ (rdev->pdev->device == 0x6663) || ++ (rdev->pdev->device == 0x6665) || ++ (rdev->pdev->device == 0x6667))) || ++ ((rdev->pdev->revision == 0xc3) && ++ (rdev->pdev->device == 0x6665))) + new_smc = true; + new_chip_name = "hainan"; + pfp_req_size = SI_PFP_UCODE_SIZE * 4; diff --git a/kernel.spec b/kernel.spec index d5ae1ade1..bbc03cbd2 100644 --- a/kernel.spec +++ b/kernel.spec @@ -634,6 +634,12 @@ Patch851: selinux-namespace-fix.patch #rhbz 1390308 Patch852: nouveau-add-maxwell-to-backlight-init.patch +# Possible ATI fixes? +Patch853: drm-amdgpu-drop-verde-dpm-quirks.patch +Patch854: drm-amdgpu-update-si-kicker-smc-firmware.patch +Patch855: drm-radeon-drop-verde-dpm-quirks.patch +Patch856: drm-radeon-update-smc-firmware-selection-for-si.patch + # END OF PATCH DEFINITIONS %endif @@ -2163,7 +2169,10 @@ fi # # %changelog -* Thu Jan 12 2017 Laura Abbott - 4.9.4-100 +* Tue Jan 17 2017 Laura Abbott - 4.9.4-100 +- Add possible ATI fixes + +* Thu Jan 12 2017 Laura Abbott - Linux v4.9.4 rebase - Minor updates for Raspberry Pi 3 support (thanks pbrobinson) From ef19140401190e7a11b5b933ffa7aee1f8b5caed Mon Sep 17 00:00:00 2001 From: Laura Abbott Date: Tue, 17 Jan 2017 13:37:23 -0800 Subject: [PATCH 184/275] Fix kubernetes networking issue (rhbz 1414068) --- k8s-fix.patch | 39 +++++++++++++++++++++++++++++++++++++++ kernel.spec | 6 ++++++ 2 files changed, 45 insertions(+) create mode 100644 k8s-fix.patch diff --git a/k8s-fix.patch b/k8s-fix.patch new file mode 100644 index 000000000..6a7aa52ef --- /dev/null +++ b/k8s-fix.patch @@ -0,0 +1,39 @@ +From 14221cc45caad2fcab3a8543234bb7eda9b540d5 Mon Sep 17 00:00:00 2001 +From: Artur Molchanov +Date: Fri, 30 Dec 2016 19:46:36 +0300 +Subject: bridge: netfilter: Fix dropping packets that moving through bridge + interface + +Problem: +br_nf_pre_routing_finish() calls itself instead of +br_nf_pre_routing_finish_bridge(). Due to this bug reverse path filter drops +packets that go through bridge interface. + +User impact: +Local docker containers with bridge network can not communicate with each +other. + +Fixes: c5136b15ea36 ("netfilter: bridge: add and use br_nf_hook_thresh") +Signed-off-by: Artur Molchanov +Acked-by: Florian Westphal +Signed-off-by: Pablo Neira Ayuso +--- + net/bridge/br_netfilter_hooks.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/net/bridge/br_netfilter_hooks.c b/net/bridge/br_netfilter_hooks.c +index b12501a..135cc8a 100644 +--- a/net/bridge/br_netfilter_hooks.c ++++ b/net/bridge/br_netfilter_hooks.c +@@ -399,7 +399,7 @@ bridged_dnat: + br_nf_hook_thresh(NF_BR_PRE_ROUTING, + net, sk, skb, skb->dev, + NULL, +- br_nf_pre_routing_finish); ++ br_nf_pre_routing_finish_bridge); + return 0; + } + ether_addr_copy(eth_hdr(skb)->h_dest, dev->dev_addr); +-- +cgit v0.12 + diff --git a/kernel.spec b/kernel.spec index bbc03cbd2..abb014013 100644 --- a/kernel.spec +++ b/kernel.spec @@ -640,6 +640,9 @@ Patch854: drm-amdgpu-update-si-kicker-smc-firmware.patch Patch855: drm-radeon-drop-verde-dpm-quirks.patch Patch856: drm-radeon-update-smc-firmware-selection-for-si.patch +#rhbz 1414068 +Patch857: k8s-fix.patch + # END OF PATCH DEFINITIONS %endif @@ -2169,6 +2172,9 @@ fi # # %changelog +* Tue Jan 17 2017 Laura Abbott +- Fix kubernetes networking issue (rhbz 1414068) + * Tue Jan 17 2017 Laura Abbott - 4.9.4-100 - Add possible ATI fixes From 9714fae044109d1464a308a4cad17e2aa6377e72 Mon Sep 17 00:00:00 2001 From: Laura Abbott Date: Fri, 20 Jan 2017 03:50:17 -0800 Subject: [PATCH 185/275] Linux v4.9.5 --- ...efi-prune-invalid-memory-map-entries.patch | 141 ------------------ ...-and-dev-kmem-when-module-loading-is.patch | 15 +- bcm283x-vc4-fixes.patch | 43 ------ drm-amdgpu-drop-verde-dpm-quirks.patch | 41 ----- ...amdgpu-update-si-kicker-smc-firmware.patch | 110 -------------- drm-radeon-drop-verde-dpm-quirks.patch | 44 ------ ...update-smc-firmware-selection-for-si.patch | 124 --------------- k8s-fix.patch | 39 ----- kernel.spec | 19 +-- sources | 2 +- 10 files changed, 13 insertions(+), 565 deletions(-) delete mode 100644 0001-efi-prune-invalid-memory-map-entries.patch delete mode 100644 bcm283x-vc4-fixes.patch delete mode 100644 drm-amdgpu-drop-verde-dpm-quirks.patch delete mode 100644 drm-amdgpu-update-si-kicker-smc-firmware.patch delete mode 100644 drm-radeon-drop-verde-dpm-quirks.patch delete mode 100644 drm-radeon-update-smc-firmware-selection-for-si.patch delete mode 100644 k8s-fix.patch diff --git a/0001-efi-prune-invalid-memory-map-entries.patch b/0001-efi-prune-invalid-memory-map-entries.patch deleted file mode 100644 index 4b65ef504..000000000 --- a/0001-efi-prune-invalid-memory-map-entries.patch +++ /dev/null @@ -1,141 +0,0 @@ -From c7c7030a020405d5826c03839e38986e0f78f2ea Mon Sep 17 00:00:00 2001 -From: Peter Jones -Date: Tue, 13 Dec 2016 10:25:10 +0000 -Subject: [PATCH] efi: prune invalid memory map entries - -Some machines, such as the Lenovo ThinkPad W541 with firmware GNET80WW -(2.28), include memory map entries with phys_addr=0x0 and num_pages=0. - -Currently the log output for this case (with efi=debug) looks like: - -[ 0.000000] efi: mem45: [Reserved | | | | | | | | | | | | ] range=[0x0000000000000000-0xffffffffffffffff] (0MB) - -This is clearly wrong, and also not as informative as it could be. This -patch changes it so that if we find obviously invalid memory map -entries, we print an error and those entries. It also detects the -display of the address range calculation overflow, so the new output is: - -[ 0.000000] efi: [Firmware Bug]: Invalid EFI memory map entries: -[ 0.000000] efi: mem45: [Reserved | | | | | | | | | | | | ] range=[0x0000000000000000-0x0000000000000000] (invalid) - -It also detects memory map sizes that would overflow the physical -address, for example phys_addr=0xfffffffffffff000 and -num_pages=0x0200000000000001, and prints: - -[ 0.000000] efi: [Firmware Bug]: Invalid EFI memory map entries: -[ 0.000000] efi: mem45: [Reserved | | | | | | | | | | | | ] range=[phys_addr=0xfffffffffffff000-0x20ffffffffffffffff] (invalid) - -It then removes these entries from the memory map. - -Cc: Matt Fleming -Signed-off-by: Peter Jones -[ardb: refactor for clarity with no functional changes, avoid PAGE_SHIFT] -Signed-off-by: Ard Biesheuvel ---- - arch/x86/platform/efi/efi.c | 70 +++++++++++++++++++++++++++++++++++++++++++++ - include/linux/efi.h | 1 + - 2 files changed, 71 insertions(+) - -diff --git a/arch/x86/platform/efi/efi.c b/arch/x86/platform/efi/efi.c -index bf99aa7..0a1550b 100644 ---- a/arch/x86/platform/efi/efi.c -+++ b/arch/x86/platform/efi/efi.c -@@ -210,6 +210,74 @@ int __init efi_memblock_x86_reserve_range(void) - return 0; - } - -+#define OVERFLOW_ADDR_SHIFT (64 - EFI_PAGE_SHIFT) -+#define OVERFLOW_ADDR_MASK (U64_MAX << OVERFLOW_ADDR_SHIFT) -+#define U64_HIGH_BIT (~(U64_MAX >> 1)) -+ -+static bool __init efi_memmap_entry_valid(const efi_memory_desc_t *md, int i) -+{ -+ static __initdata bool once = true; -+ u64 end = (md->num_pages << EFI_PAGE_SHIFT) + md->phys_addr - 1; -+ u64 end_hi = 0; -+ char buf[64]; -+ -+ if (md->num_pages == 0) { -+ end = 0; -+ } else if (md->num_pages > EFI_PAGES_MAX || -+ EFI_PAGES_MAX - md->num_pages < -+ (md->phys_addr >> EFI_PAGE_SHIFT)) { -+ end_hi = (md->num_pages & OVERFLOW_ADDR_MASK) -+ >> OVERFLOW_ADDR_SHIFT; -+ -+ if ((md->phys_addr & U64_HIGH_BIT) && !(end & U64_HIGH_BIT)) -+ end_hi += 1; -+ } else { -+ return true; -+ } -+ -+ if (once) { -+ pr_warn(FW_BUG "Invalid EFI memory map entries:\n"); -+ once = false; -+ } -+ -+ if (end_hi) { -+ pr_warn("mem%02u: %s range=[0x%016llx-0x%llx%016llx] (invalid)\n", -+ i, efi_md_typeattr_format(buf, sizeof(buf), md), -+ md->phys_addr, end_hi, end); -+ } else { -+ pr_warn("mem%02u: %s range=[0x%016llx-0x%016llx] (invalid)\n", -+ i, efi_md_typeattr_format(buf, sizeof(buf), md), -+ md->phys_addr, end); -+ } -+ return false; -+} -+ -+static void __init efi_clean_memmap(void) -+{ -+ efi_memory_desc_t *out = efi.memmap.map; -+ const efi_memory_desc_t *in = out; -+ const efi_memory_desc_t *end = efi.memmap.map_end; -+ int i, n_removal; -+ -+ for (i = n_removal = 0; in < end; i++) { -+ if (efi_memmap_entry_valid(in, i)) { -+ if (out != in) -+ memcpy(out, in, efi.memmap.desc_size); -+ out = (void *)out + efi.memmap.desc_size; -+ } else { -+ n_removal++; -+ } -+ in = (void *)in + efi.memmap.desc_size; -+ } -+ -+ if (n_removal > 0) { -+ u64 size = efi.memmap.nr_map - n_removal; -+ -+ pr_warn("Removing %d invalid memory map entries.\n", n_removal); -+ efi_memmap_install(efi.memmap.phys_map, size); -+ } -+} -+ - void __init efi_print_memmap(void) - { - efi_memory_desc_t *md; -@@ -472,6 +540,8 @@ void __init efi_init(void) - } - } - -+ efi_clean_memmap(); -+ - if (efi_enabled(EFI_DBG)) - efi_print_memmap(); - } -diff --git a/include/linux/efi.h b/include/linux/efi.h -index 4c1b3ea..712a3aa 100644 ---- a/include/linux/efi.h -+++ b/include/linux/efi.h -@@ -103,6 +103,7 @@ typedef struct { - - #define EFI_PAGE_SHIFT 12 - #define EFI_PAGE_SIZE (1UL << EFI_PAGE_SHIFT) -+#define EFI_PAGES_MAX (U64_MAX >> EFI_PAGE_SHIFT) - - typedef struct { - u32 type; --- -2.9.3 - diff --git a/Restrict-dev-mem-and-dev-kmem-when-module-loading-is.patch b/Restrict-dev-mem-and-dev-kmem-when-module-loading-is.patch index 24f1d5b5d..48e88a767 100644 --- a/Restrict-dev-mem-and-dev-kmem-when-module-loading-is.patch +++ b/Restrict-dev-mem-and-dev-kmem-when-module-loading-is.patch @@ -1,4 +1,4 @@ -From 9f31204f829da97f99f7aacf30f0ddc26e456df7 Mon Sep 17 00:00:00 2001 +From 12e2c6926a6b03e070fc58271cf41a482de06467 Mon Sep 17 00:00:00 2001 From: Matthew Garrett Date: Fri, 9 Mar 2012 09:28:15 -0500 Subject: [PATCH 06/20] Restrict /dev/mem and /dev/kmem when module loading is @@ -8,16 +8,17 @@ Allowing users to write to address space makes it possible for the kernel to be subverted, avoiding module loading restrictions. Prevent this when any restrictions have been imposed on loading modules. +[labbott: Rebased again] Signed-off-by: Matthew Garrett --- drivers/char/mem.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/char/mem.c b/drivers/char/mem.c -index 7f1a7ab5850d..d6a6f05fbc1c 100644 +index 6d9cc2d39d22..bda271d022a0 100644 --- a/drivers/char/mem.c +++ b/drivers/char/mem.c -@@ -164,6 +164,9 @@ static ssize_t write_mem(struct file *file, const char __user *buf, +@@ -163,6 +163,9 @@ static ssize_t write_mem(struct file *file, const char __user *buf, if (p != *ppos) return -EFBIG; @@ -27,9 +28,9 @@ index 7f1a7ab5850d..d6a6f05fbc1c 100644 if (!valid_phys_addr_range(p, count)) return -EFAULT; -@@ -516,6 +519,9 @@ static ssize_t write_kmem(struct file *file, const char __user *buf, - if (!pfn_valid(PFN_DOWN(p))) - return -EIO; +@@ -513,6 +516,9 @@ static ssize_t write_kmem(struct file *file, const char __user *buf, + char *kbuf; /* k-addr because vwrite() takes vmlist_lock rwlock */ + int err = 0; + if (secure_modules()) + return -EPERM; @@ -38,5 +39,5 @@ index 7f1a7ab5850d..d6a6f05fbc1c 100644 unsigned long to_write = min_t(unsigned long, count, (unsigned long)high_memory - p); -- -2.9.3 +2.11.0 diff --git a/bcm283x-vc4-fixes.patch b/bcm283x-vc4-fixes.patch deleted file mode 100644 index d42ceb62a..000000000 --- a/bcm283x-vc4-fixes.patch +++ /dev/null @@ -1,43 +0,0 @@ -From 30772942cc1095c3129eecfa182e2c568e566b9d Mon Sep 17 00:00:00 2001 -From: Dan Carpenter -Date: Thu, 13 Oct 2016 11:54:31 +0300 -Subject: [PATCH] drm/vc4: Fix a couple error codes in vc4_cl_lookup_bos() - -If the allocation fails the current code returns success. If -copy_from_user() fails it returns the number of bytes remaining instead -of -EFAULT. - -Fixes: d5b1a78a772f ("drm/vc4: Add support for drawing 3D frames.") -Signed-off-by: Dan Carpenter -Reviewed-by: Eric Anholt ---- - drivers/gpu/drm/vc4/vc4_gem.c | 9 +++++---- - 1 file changed, 5 insertions(+), 4 deletions(-) - -diff --git a/drivers/gpu/drm/vc4/vc4_gem.c b/drivers/gpu/drm/vc4/vc4_gem.c -index ae1609e..4050540 100644 ---- a/drivers/gpu/drm/vc4/vc4_gem.c -+++ b/drivers/gpu/drm/vc4/vc4_gem.c -@@ -548,14 +548,15 @@ vc4_cl_lookup_bos(struct drm_device *dev, - - handles = drm_malloc_ab(exec->bo_count, sizeof(uint32_t)); - if (!handles) { -+ ret = -ENOMEM; - DRM_ERROR("Failed to allocate incoming GEM handles\n"); - goto fail; - } - -- ret = copy_from_user(handles, -- (void __user *)(uintptr_t)args->bo_handles, -- exec->bo_count * sizeof(uint32_t)); -- if (ret) { -+ if (copy_from_user(handles, -+ (void __user *)(uintptr_t)args->bo_handles, -+ exec->bo_count * sizeof(uint32_t))) { -+ ret = -EFAULT; - DRM_ERROR("Failed to copy in GEM handles\n"); - goto fail; - } --- -2.9.3 - diff --git a/drm-amdgpu-drop-verde-dpm-quirks.patch b/drm-amdgpu-drop-verde-dpm-quirks.patch deleted file mode 100644 index 92df978cf..000000000 --- a/drm-amdgpu-drop-verde-dpm-quirks.patch +++ /dev/null @@ -1,41 +0,0 @@ -From 7192c54a68013f6058b1bb505645fcd07015191c Mon Sep 17 00:00:00 2001 -From: Alex Deucher -Date: Thu, 5 Jan 2017 13:02:37 -0500 -Subject: drm/amdgpu: drop verde dpm quirks - -From: Alex Deucher - -commit 7192c54a68013f6058b1bb505645fcd07015191c upstream. - -Port of radeon change to amdgpu. - -Acked-by: Edward O'Callaghan -Signed-off-by: Alex Deucher -Signed-off-by: Greg Kroah-Hartman - ---- - drivers/gpu/drm/amd/amdgpu/si_dpm.c | 13 ------------- - 1 file changed, 13 deletions(-) - ---- a/drivers/gpu/drm/amd/amdgpu/si_dpm.c -+++ b/drivers/gpu/drm/amd/amdgpu/si_dpm.c -@@ -3485,19 +3485,6 @@ static void si_apply_state_adjust_rules( - (adev->pdev->device == 0x6817) || - (adev->pdev->device == 0x6806)) - max_mclk = 120000; -- } else if (adev->asic_type == CHIP_VERDE) { -- if ((adev->pdev->revision == 0x81) || -- (adev->pdev->revision == 0x83) || -- (adev->pdev->revision == 0x87) || -- (adev->pdev->device == 0x6820) || -- (adev->pdev->device == 0x6821) || -- (adev->pdev->device == 0x6822) || -- (adev->pdev->device == 0x6823) || -- (adev->pdev->device == 0x682A) || -- (adev->pdev->device == 0x682B)) { -- max_sclk = 75000; -- max_mclk = 80000; -- } - } else if (adev->asic_type == CHIP_OLAND) { - if ((adev->pdev->revision == 0xC7) || - (adev->pdev->revision == 0x80) || diff --git a/drm-amdgpu-update-si-kicker-smc-firmware.patch b/drm-amdgpu-update-si-kicker-smc-firmware.patch deleted file mode 100644 index 1c0805f4e..000000000 --- a/drm-amdgpu-update-si-kicker-smc-firmware.patch +++ /dev/null @@ -1,110 +0,0 @@ -From 5165484b02f2cbedb5bf3a41ff5e8ae16069016c Mon Sep 17 00:00:00 2001 -From: Flora Cui -Date: Thu, 15 Dec 2016 13:43:59 +0800 -Subject: drm/amdgpu: update si kicker smc firmware - -From: Flora Cui - -commit 5165484b02f2cbedb5bf3a41ff5e8ae16069016c upstream. - -Use the appropriate smc firmware for each chip revision. -Using the wrong one can cause stability issues. - -Acked-by: Edward O'Callaghan -Signed-off-by: Flora Cui -Reviewed-by: Junwei Zhang -Signed-off-by: Alex Deucher -Signed-off-by: Greg Kroah-Hartman - ---- - drivers/gpu/drm/amd/amdgpu/si_dpm.c | 57 +++++++++++++++++------------------- - 1 file changed, 28 insertions(+), 29 deletions(-) - ---- a/drivers/gpu/drm/amd/amdgpu/si_dpm.c -+++ b/drivers/gpu/drm/amd/amdgpu/si_dpm.c -@@ -56,7 +56,6 @@ - #define BIOS_SCRATCH_4 0x5cd - - MODULE_FIRMWARE("radeon/tahiti_smc.bin"); --MODULE_FIRMWARE("radeon/tahiti_k_smc.bin"); - MODULE_FIRMWARE("radeon/pitcairn_smc.bin"); - MODULE_FIRMWARE("radeon/pitcairn_k_smc.bin"); - MODULE_FIRMWARE("radeon/verde_smc.bin"); -@@ -7685,49 +7684,49 @@ static int si_dpm_init_microcode(struct - chip_name = "tahiti"; - break; - case CHIP_PITCAIRN: -- if ((adev->pdev->revision == 0x81) || -- (adev->pdev->device == 0x6810) || -- (adev->pdev->device == 0x6811) || -- (adev->pdev->device == 0x6816) || -- (adev->pdev->device == 0x6817) || -- (adev->pdev->device == 0x6806)) -+ if ((adev->pdev->revision == 0x81) && -+ ((adev->pdev->device == 0x6810) || -+ (adev->pdev->device == 0x6811))) - chip_name = "pitcairn_k"; - else - chip_name = "pitcairn"; - break; - case CHIP_VERDE: -- if ((adev->pdev->revision == 0x81) || -- (adev->pdev->revision == 0x83) || -- (adev->pdev->revision == 0x87) || -- (adev->pdev->device == 0x6820) || -- (adev->pdev->device == 0x6821) || -- (adev->pdev->device == 0x6822) || -- (adev->pdev->device == 0x6823) || -- (adev->pdev->device == 0x682A) || -- (adev->pdev->device == 0x682B)) -+ if (((adev->pdev->device == 0x6820) && -+ ((adev->pdev->revision == 0x81) || -+ (adev->pdev->revision == 0x83))) || -+ ((adev->pdev->device == 0x6821) && -+ ((adev->pdev->revision == 0x83) || -+ (adev->pdev->revision == 0x87))) || -+ ((adev->pdev->revision == 0x87) && -+ ((adev->pdev->device == 0x6823) || -+ (adev->pdev->device == 0x682b)))) - chip_name = "verde_k"; - else - chip_name = "verde"; - break; - case CHIP_OLAND: -- if ((adev->pdev->revision == 0xC7) || -- (adev->pdev->revision == 0x80) || -- (adev->pdev->revision == 0x81) || -- (adev->pdev->revision == 0x83) || -- (adev->pdev->revision == 0x87) || -- (adev->pdev->device == 0x6604) || -- (adev->pdev->device == 0x6605)) -+ if (((adev->pdev->revision == 0x81) && -+ ((adev->pdev->device == 0x6600) || -+ (adev->pdev->device == 0x6604) || -+ (adev->pdev->device == 0x6605) || -+ (adev->pdev->device == 0x6610))) || -+ ((adev->pdev->revision == 0x83) && -+ (adev->pdev->device == 0x6610))) - chip_name = "oland_k"; - else - chip_name = "oland"; - break; - case CHIP_HAINAN: -- if ((adev->pdev->revision == 0x81) || -- (adev->pdev->revision == 0x83) || -- (adev->pdev->revision == 0xC3) || -- (adev->pdev->device == 0x6664) || -- (adev->pdev->device == 0x6665) || -- (adev->pdev->device == 0x6667)) -+ if (((adev->pdev->revision == 0x81) && -+ (adev->pdev->device == 0x6660)) || -+ ((adev->pdev->revision == 0x83) && -+ ((adev->pdev->device == 0x6660) || -+ (adev->pdev->device == 0x6663) || -+ (adev->pdev->device == 0x6665) || -+ (adev->pdev->device == 0x6667))) || -+ ((adev->pdev->revision == 0xc3) && -+ (adev->pdev->device == 0x6665))) - chip_name = "hainan_k"; - else - chip_name = "hainan"; diff --git a/drm-radeon-drop-verde-dpm-quirks.patch b/drm-radeon-drop-verde-dpm-quirks.patch deleted file mode 100644 index ea736b2a1..000000000 --- a/drm-radeon-drop-verde-dpm-quirks.patch +++ /dev/null @@ -1,44 +0,0 @@ -From 8a08403bcb39f5d0e733bcf59a8a74f16b538f6e Mon Sep 17 00:00:00 2001 -From: Alex Deucher -Date: Thu, 5 Jan 2017 12:39:01 -0500 -Subject: drm/radeon: drop verde dpm quirks - -From: Alex Deucher - -commit 8a08403bcb39f5d0e733bcf59a8a74f16b538f6e upstream. - -fixes: -https://bugs.freedesktop.org/show_bug.cgi?id=98897 -https://bugs.launchpad.net/bugs/1651981 - -Acked-by: Edward O'Callaghan -Signed-off-by: Alex Deucher -Cc: Adrian Fiergolski -Signed-off-by: Greg Kroah-Hartman - ---- - drivers/gpu/drm/radeon/si_dpm.c | 13 ------------- - 1 file changed, 13 deletions(-) - ---- a/drivers/gpu/drm/radeon/si_dpm.c -+++ b/drivers/gpu/drm/radeon/si_dpm.c -@@ -3008,19 +3008,6 @@ static void si_apply_state_adjust_rules( - (rdev->pdev->device == 0x6817) || - (rdev->pdev->device == 0x6806)) - max_mclk = 120000; -- } else if (rdev->family == CHIP_VERDE) { -- if ((rdev->pdev->revision == 0x81) || -- (rdev->pdev->revision == 0x83) || -- (rdev->pdev->revision == 0x87) || -- (rdev->pdev->device == 0x6820) || -- (rdev->pdev->device == 0x6821) || -- (rdev->pdev->device == 0x6822) || -- (rdev->pdev->device == 0x6823) || -- (rdev->pdev->device == 0x682A) || -- (rdev->pdev->device == 0x682B)) { -- max_sclk = 75000; -- max_mclk = 80000; -- } - } else if (rdev->family == CHIP_OLAND) { - if ((rdev->pdev->revision == 0xC7) || - (rdev->pdev->revision == 0x80) || diff --git a/drm-radeon-update-smc-firmware-selection-for-si.patch b/drm-radeon-update-smc-firmware-selection-for-si.patch deleted file mode 100644 index ad115ef05..000000000 --- a/drm-radeon-update-smc-firmware-selection-for-si.patch +++ /dev/null @@ -1,124 +0,0 @@ -From 6458bd4dfd9414cba5804eb9907fe2a824278c34 Mon Sep 17 00:00:00 2001 -From: Alex Deucher -Date: Thu, 5 Jan 2017 12:15:52 -0500 -Subject: drm/radeon: update smc firmware selection for SI - -From: Alex Deucher - -commit 6458bd4dfd9414cba5804eb9907fe2a824278c34 upstream. - -Use the appropriate smc firmware for each chip revision. -Using the wrong one can cause stability issues. - -Acked-by: Edward O'Callaghan -Signed-off-by: Alex Deucher -Signed-off-by: Greg Kroah-Hartman - ---- - drivers/gpu/drm/radeon/si.c | 60 ++++++++++++++++++++------------------------ - 1 file changed, 28 insertions(+), 32 deletions(-) - ---- a/drivers/gpu/drm/radeon/si.c -+++ b/drivers/gpu/drm/radeon/si.c -@@ -50,7 +50,6 @@ MODULE_FIRMWARE("radeon/tahiti_ce.bin"); - MODULE_FIRMWARE("radeon/tahiti_mc.bin"); - MODULE_FIRMWARE("radeon/tahiti_rlc.bin"); - MODULE_FIRMWARE("radeon/tahiti_smc.bin"); --MODULE_FIRMWARE("radeon/tahiti_k_smc.bin"); - - MODULE_FIRMWARE("radeon/PITCAIRN_pfp.bin"); - MODULE_FIRMWARE("radeon/PITCAIRN_me.bin"); -@@ -1657,9 +1656,6 @@ static int si_init_microcode(struct rade - switch (rdev->family) { - case CHIP_TAHITI: - chip_name = "TAHITI"; -- /* XXX: figure out which Tahitis need the new ucode */ -- if (0) -- new_smc = true; - new_chip_name = "tahiti"; - pfp_req_size = SI_PFP_UCODE_SIZE * 4; - me_req_size = SI_PM4_UCODE_SIZE * 4; -@@ -1671,12 +1667,9 @@ static int si_init_microcode(struct rade - break; - case CHIP_PITCAIRN: - chip_name = "PITCAIRN"; -- if ((rdev->pdev->revision == 0x81) || -- (rdev->pdev->device == 0x6810) || -- (rdev->pdev->device == 0x6811) || -- (rdev->pdev->device == 0x6816) || -- (rdev->pdev->device == 0x6817) || -- (rdev->pdev->device == 0x6806)) -+ if ((rdev->pdev->revision == 0x81) && -+ ((rdev->pdev->device == 0x6810) || -+ (rdev->pdev->device == 0x6811))) - new_smc = true; - new_chip_name = "pitcairn"; - pfp_req_size = SI_PFP_UCODE_SIZE * 4; -@@ -1689,15 +1682,15 @@ static int si_init_microcode(struct rade - break; - case CHIP_VERDE: - chip_name = "VERDE"; -- if ((rdev->pdev->revision == 0x81) || -- (rdev->pdev->revision == 0x83) || -- (rdev->pdev->revision == 0x87) || -- (rdev->pdev->device == 0x6820) || -- (rdev->pdev->device == 0x6821) || -- (rdev->pdev->device == 0x6822) || -- (rdev->pdev->device == 0x6823) || -- (rdev->pdev->device == 0x682A) || -- (rdev->pdev->device == 0x682B)) -+ if (((rdev->pdev->device == 0x6820) && -+ ((rdev->pdev->revision == 0x81) || -+ (rdev->pdev->revision == 0x83))) || -+ ((rdev->pdev->device == 0x6821) && -+ ((rdev->pdev->revision == 0x83) || -+ (rdev->pdev->revision == 0x87))) || -+ ((rdev->pdev->revision == 0x87) && -+ ((rdev->pdev->device == 0x6823) || -+ (rdev->pdev->device == 0x682b)))) - new_smc = true; - new_chip_name = "verde"; - pfp_req_size = SI_PFP_UCODE_SIZE * 4; -@@ -1710,13 +1703,13 @@ static int si_init_microcode(struct rade - break; - case CHIP_OLAND: - chip_name = "OLAND"; -- if ((rdev->pdev->revision == 0xC7) || -- (rdev->pdev->revision == 0x80) || -- (rdev->pdev->revision == 0x81) || -- (rdev->pdev->revision == 0x83) || -- (rdev->pdev->revision == 0x87) || -- (rdev->pdev->device == 0x6604) || -- (rdev->pdev->device == 0x6605)) -+ if (((rdev->pdev->revision == 0x81) && -+ ((rdev->pdev->device == 0x6600) || -+ (rdev->pdev->device == 0x6604) || -+ (rdev->pdev->device == 0x6605) || -+ (rdev->pdev->device == 0x6610))) || -+ ((rdev->pdev->revision == 0x83) && -+ (rdev->pdev->device == 0x6610))) - new_smc = true; - new_chip_name = "oland"; - pfp_req_size = SI_PFP_UCODE_SIZE * 4; -@@ -1728,12 +1721,15 @@ static int si_init_microcode(struct rade - break; - case CHIP_HAINAN: - chip_name = "HAINAN"; -- if ((rdev->pdev->revision == 0x81) || -- (rdev->pdev->revision == 0x83) || -- (rdev->pdev->revision == 0xC3) || -- (rdev->pdev->device == 0x6664) || -- (rdev->pdev->device == 0x6665) || -- (rdev->pdev->device == 0x6667)) -+ if (((rdev->pdev->revision == 0x81) && -+ (rdev->pdev->device == 0x6660)) || -+ ((rdev->pdev->revision == 0x83) && -+ ((rdev->pdev->device == 0x6660) || -+ (rdev->pdev->device == 0x6663) || -+ (rdev->pdev->device == 0x6665) || -+ (rdev->pdev->device == 0x6667))) || -+ ((rdev->pdev->revision == 0xc3) && -+ (rdev->pdev->device == 0x6665))) - new_smc = true; - new_chip_name = "hainan"; - pfp_req_size = SI_PFP_UCODE_SIZE * 4; diff --git a/k8s-fix.patch b/k8s-fix.patch deleted file mode 100644 index 6a7aa52ef..000000000 --- a/k8s-fix.patch +++ /dev/null @@ -1,39 +0,0 @@ -From 14221cc45caad2fcab3a8543234bb7eda9b540d5 Mon Sep 17 00:00:00 2001 -From: Artur Molchanov -Date: Fri, 30 Dec 2016 19:46:36 +0300 -Subject: bridge: netfilter: Fix dropping packets that moving through bridge - interface - -Problem: -br_nf_pre_routing_finish() calls itself instead of -br_nf_pre_routing_finish_bridge(). Due to this bug reverse path filter drops -packets that go through bridge interface. - -User impact: -Local docker containers with bridge network can not communicate with each -other. - -Fixes: c5136b15ea36 ("netfilter: bridge: add and use br_nf_hook_thresh") -Signed-off-by: Artur Molchanov -Acked-by: Florian Westphal -Signed-off-by: Pablo Neira Ayuso ---- - net/bridge/br_netfilter_hooks.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/net/bridge/br_netfilter_hooks.c b/net/bridge/br_netfilter_hooks.c -index b12501a..135cc8a 100644 ---- a/net/bridge/br_netfilter_hooks.c -+++ b/net/bridge/br_netfilter_hooks.c -@@ -399,7 +399,7 @@ bridged_dnat: - br_nf_hook_thresh(NF_BR_PRE_ROUTING, - net, sk, skb, skb->dev, - NULL, -- br_nf_pre_routing_finish); -+ br_nf_pre_routing_finish_bridge); - return 0; - } - ether_addr_copy(eth_hdr(skb)->h_dest, dev->dev_addr); --- -cgit v0.12 - diff --git a/kernel.spec b/kernel.spec index abb014013..38413e562 100644 --- a/kernel.spec +++ b/kernel.spec @@ -54,7 +54,7 @@ Summary: The Linux kernel %if 0%{?released_kernel} # Do we have a -stable update to apply? -%define stable_update 4 +%define stable_update 5 # Set rpm version accordingly %if 0%{?stable_update} %define stablerev %{stable_update} @@ -522,8 +522,6 @@ Patch430: ARM-tegra-usb-no-reset.patch Patch431: bcm2837-initial-support.patch -Patch432: bcm283x-vc4-fixes.patch - Patch433: bcm283x-fixes.patch # http://www.spinics.net/lists/linux-mmc/msg41151.html @@ -625,24 +623,12 @@ Patch665: netfilter-x_tables-deal-with-bogus-nextoffset-values.patch #ongoing complaint, full discussion delayed until ksummit/plumbers Patch849: 0001-iio-Use-event-header-from-kernel-tree.patch -# Work around thinkpad firmware memory layout issues and efi_mem_reserve() -Patch850: 0001-efi-prune-invalid-memory-map-entries.patch - # Request from dwalsh Patch851: selinux-namespace-fix.patch #rhbz 1390308 Patch852: nouveau-add-maxwell-to-backlight-init.patch -# Possible ATI fixes? -Patch853: drm-amdgpu-drop-verde-dpm-quirks.patch -Patch854: drm-amdgpu-update-si-kicker-smc-firmware.patch -Patch855: drm-radeon-drop-verde-dpm-quirks.patch -Patch856: drm-radeon-update-smc-firmware-selection-for-si.patch - -#rhbz 1414068 -Patch857: k8s-fix.patch - # END OF PATCH DEFINITIONS %endif @@ -2172,6 +2158,9 @@ fi # # %changelog +* Fri Jan 20 2017 Laura Abbott - 4.9.5-100 +- Linux v4.9.5 + * Tue Jan 17 2017 Laura Abbott - Fix kubernetes networking issue (rhbz 1414068) diff --git a/sources b/sources index a60ea42a6..d6f35536e 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ SHA512 (linux-4.9.tar.xz) = bf67ff812cc3cb7e5059e82cc5db0d9a7c5637f7ed9a42e4730c715bf7047c81ed3a571225f92a33ef0b6d65f35595bc32d773356646df2627da55e9bc7f1f1a SHA512 (perf-man-4.9.tar.gz) = d23bb3da1eadd6623fddbf4696948de7675f3dcf57c711a7427dd7ae111394f58d8f42752938bbea7cd219f1e7f6f116fc67a1c74f769711063940a065f37b99 -SHA512 (patch-4.9.4.xz) = d6a81ef416068a92bfa5a6a6156cfc50e9c4c44ac6343c076551376f0ce5be486147abf7aa1eed48c3f10ef5d97d3880924c56b70ff4b92faae106d994a25e48 +SHA512 (patch-4.9.5.xz) = 1da3b136478103eeabcdc02fae60ba75f3ff0a07835e47a5fbf033761fcaab2400e85184083f883b3c652f031e6834533c63c9c2b46bbe09a81ed0baa1369765 From 907a8720e9c0c50a18beb7b5bb2de71f9f45dc5b Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Mon, 23 Jan 2017 08:03:35 -0600 Subject: [PATCH 186/275] Enable CONFIG_IPV6_GRE (rhbz 1405398) --- config-generic | 2 +- kernel.spec | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/config-generic b/config-generic index 61e52e627..23bfffa1f 100644 --- a/config-generic +++ b/config-generic @@ -897,7 +897,7 @@ CONFIG_IPV6_VTI=m CONFIG_IPV6_SIT=m CONFIG_IPV6_SIT_6RD=y CONFIG_IPV6_TUNNEL=m -# CONFIG_IPV6_GRE is not set +CONFIG_IPV6_GRE=m CONFIG_IPV6_SUBTREES=y CONFIG_IPV6_MULTIPLE_TABLES=y CONFIG_IPV6_MROUTE=y diff --git a/kernel.spec b/kernel.spec index 38413e562..0fc9086f2 100644 --- a/kernel.spec +++ b/kernel.spec @@ -2158,6 +2158,9 @@ fi # # %changelog +* Mon Jan 23 2017 Justin M. Forbes +- Enable CONFIG_IPV6_GRE (rhbz 1405398) + * Fri Jan 20 2017 Laura Abbott - 4.9.5-100 - Linux v4.9.5 From 4b716b2ebf9e93eee97b35c2dd437ad87f8fc8b3 Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Wed, 25 Jan 2017 11:17:03 -0600 Subject: [PATCH 187/275] CVE-2017-5576 CVE-2017-5577 vc4 overflows (rhbz 1416436 1416437 1416439) --- ...rflow_in_temporary_allocation_layout.patch | 82 +++++++++++++++++++ kernel.spec | 6 ++ 2 files changed, 88 insertions(+) create mode 100644 drm_vc4_Fix_an_integer_overflow_in_temporary_allocation_layout.patch diff --git a/drm_vc4_Fix_an_integer_overflow_in_temporary_allocation_layout.patch b/drm_vc4_Fix_an_integer_overflow_in_temporary_allocation_layout.patch new file mode 100644 index 000000000..37f012073 --- /dev/null +++ b/drm_vc4_Fix_an_integer_overflow_in_temporary_allocation_layout.patch @@ -0,0 +1,82 @@ +From: Eric Anholt +To: dri-devel@lists.freedesktop.org +Subject: [PATCH 1/2] drm/vc4: Fix an integer overflow in temporary + allocation layout. +Date: Wed, 18 Jan 2017 07:20:49 +1100 + +We copy the unvalidated ioctl arguments from the user into kernel +temporary memory to run the validation from, to avoid a race where the +user updates the unvalidate contents in between validating them and +copying them into the validated BO. + +However, in setting up the layout of the kernel side, we failed to +check one of the additions (the roundup() for shader_rec_offset) +against integer overflow, allowing a nearly MAX_UINT value of +bin_cl_size to cause us to under-allocate the temporary space that we +then copy_from_user into. + +Reported-by: Murray McAllister +Signed-off-by: Eric Anholt +Fixes: d5b1a78a772f ("drm/vc4: Add support for drawing 3D frames.") +--- + drivers/gpu/drm/vc4/vc4_gem.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/drivers/gpu/drm/vc4/vc4_gem.c b/drivers/gpu/drm/vc4/vc4_gem.c +index db920771bfb5..c5fe3554858e 100644 +--- a/drivers/gpu/drm/vc4/vc4_gem.c ++++ b/drivers/gpu/drm/vc4/vc4_gem.c +@@ -594,7 +594,8 @@ vc4_get_bcl(struct drm_device *dev, struct vc4_exec_info *exec) + args->shader_rec_count); + struct vc4_bo *bo; + +- if (uniforms_offset < shader_rec_offset || ++ if (shader_rec_offset < args->bin_cl_size || ++ uniforms_offset < shader_rec_offset || + exec_size < uniforms_offset || + args->shader_rec_count >= (UINT_MAX / + sizeof(struct vc4_shader_state)) || +-- +2.11.0 + +_______________________________________________ +dri-devel mailing list +dri-devel@lists.freedesktop.org +https://lists.freedesktop.org/mailman/listinfo/dri-devel + +From: Eric Anholt +To: dri-devel@lists.freedesktop.org +Subject: [PATCH 2/2] drm/vc4: Return -EINVAL on the overflow checks failing. +Date: Wed, 18 Jan 2017 07:20:50 +1100 + +By failing to set the errno, we'd continue on to trying to set up the +RCL, and then oops on trying to dereference the tile_bo that binning +validation should have set up. + +Reported-by: Ingo Molnar +Signed-off-by: Eric Anholt +Fixes: d5b1a78a772f ("drm/vc4: Add support for drawing 3D frames.") +--- + drivers/gpu/drm/vc4/vc4_gem.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/drivers/gpu/drm/vc4/vc4_gem.c b/drivers/gpu/drm/vc4/vc4_gem.c +index c5fe3554858e..ab3016982466 100644 +--- a/drivers/gpu/drm/vc4/vc4_gem.c ++++ b/drivers/gpu/drm/vc4/vc4_gem.c +@@ -601,6 +601,7 @@ vc4_get_bcl(struct drm_device *dev, struct vc4_exec_info *exec) + sizeof(struct vc4_shader_state)) || + temp_size < exec_size) { + DRM_ERROR("overflow in exec arguments\n"); ++ ret = -EINVAL; + goto fail; + } + +-- +2.11.0 + +_______________________________________________ +dri-devel mailing list +dri-devel@lists.freedesktop.org +https://lists.freedesktop.org/mailman/listinfo/dri-devel + diff --git a/kernel.spec b/kernel.spec index 0fc9086f2..88d7e4356 100644 --- a/kernel.spec +++ b/kernel.spec @@ -629,6 +629,9 @@ Patch851: selinux-namespace-fix.patch #rhbz 1390308 Patch852: nouveau-add-maxwell-to-backlight-init.patch +#CVE-2017-5576 CVE-2017-5577 rhbz 1416436 1416437 1416439 +Patch853: drm_vc4_Fix_an_integer_overflow_in_temporary_allocation_layout.patch + # END OF PATCH DEFINITIONS %endif @@ -2158,6 +2161,9 @@ fi # # %changelog +* Wed Jan 25 2017 Justin M. Forbes +- CVE-2017-5576 CVE-2017-5577 vc4 overflows (rhbz 1416436 1416437 1416439) + * Mon Jan 23 2017 Justin M. Forbes - Enable CONFIG_IPV6_GRE (rhbz 1405398) From ff7f9556e2db01b96b1fdc8653d8bbb4ae4b72d8 Mon Sep 17 00:00:00 2001 From: Laura Abbott Date: Thu, 26 Jan 2017 10:23:34 +0100 Subject: [PATCH 188/275] Linux v4.9.6 --- kernel.spec | 5 ++++- sources | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/kernel.spec b/kernel.spec index 88d7e4356..a18eee3ff 100644 --- a/kernel.spec +++ b/kernel.spec @@ -54,7 +54,7 @@ Summary: The Linux kernel %if 0%{?released_kernel} # Do we have a -stable update to apply? -%define stable_update 5 +%define stable_update 6 # Set rpm version accordingly %if 0%{?stable_update} %define stablerev %{stable_update} @@ -2161,6 +2161,9 @@ fi # # %changelog +* Thu Jan 26 2017 Laura Abbott - 4.9.6-100 +- Linux v4.9.6 + * Wed Jan 25 2017 Justin M. Forbes - CVE-2017-5576 CVE-2017-5577 vc4 overflows (rhbz 1416436 1416437 1416439) diff --git a/sources b/sources index d6f35536e..578616825 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ SHA512 (linux-4.9.tar.xz) = bf67ff812cc3cb7e5059e82cc5db0d9a7c5637f7ed9a42e4730c715bf7047c81ed3a571225f92a33ef0b6d65f35595bc32d773356646df2627da55e9bc7f1f1a SHA512 (perf-man-4.9.tar.gz) = d23bb3da1eadd6623fddbf4696948de7675f3dcf57c711a7427dd7ae111394f58d8f42752938bbea7cd219f1e7f6f116fc67a1c74f769711063940a065f37b99 -SHA512 (patch-4.9.5.xz) = 1da3b136478103eeabcdc02fae60ba75f3ff0a07835e47a5fbf033761fcaab2400e85184083f883b3c652f031e6834533c63c9c2b46bbe09a81ed0baa1369765 +SHA512 (patch-4.9.6.xz) = 230ab118639d19b7a473e75f5463ea9add3db8cb70fe3ba546e053fc1bd32b1d353eb1c107f5467e5f24a26c43c623cf79cf8d5a5cef85613e4da989a6c0326a From 78ff8fa07f6b227ff9a98df7aa572521d808db52 Mon Sep 17 00:00:00 2001 From: Laura Abbott Date: Thu, 26 Jan 2017 10:46:06 +0100 Subject: [PATCH 189/275] Bring in fix for very incorrect EFI firmware --- ...ap-first-physical-page-into-EFI-page.patch | 64 +++++++++++++++++++ kernel.spec | 4 ++ 2 files changed, 68 insertions(+) create mode 100644 0001-x86-efi-always-map-first-physical-page-into-EFI-page.patch diff --git a/0001-x86-efi-always-map-first-physical-page-into-EFI-page.patch b/0001-x86-efi-always-map-first-physical-page-into-EFI-page.patch new file mode 100644 index 000000000..55baf9b52 --- /dev/null +++ b/0001-x86-efi-always-map-first-physical-page-into-EFI-page.patch @@ -0,0 +1,64 @@ +From fb1d9d3f95654f00c4156129f3cd90d3efe32d26 Mon Sep 17 00:00:00 2001 +From: Jiri Kosina +Date: Wed, 25 Jan 2017 20:52:33 +0100 +Subject: [PATCH] x86/efi: always map first physical page into EFI pagetables + +Commit 129766708 ("x86/efi: Only map RAM into EFI page tables if in +mixed-mode") stopped creating 1:1 mapping for all RAM in case of running +in native 64bit mode. + +It turns out though that there are 64bit EFI implementations in the wild +(this particular problem has been reported on Lenovo Yoga 710-11IKB) which +still make use of first physical page for their own private use (which is +what legacy BIOS used to do, but EFI specification doesn't grant any such +right to EFI BIOS ... oh well). + +In case there is no mapping for this particular frame in EFI pagetables, +as soon as firmware tries to make use of it, triple fault occurs and the +system reboots (in case of Yoga 710-11IKB this is very early during boot). + +Fix that by always mapping the first page of physical memory into EFI +pagetables. + +Note: just reverting 129766708 is not enough on v4.9-rc1+ to fix the +regression on affected hardware, as commit ab72a27da ("x86/efi: +Consolidate region mapping logic") later made the first physical frame not +to be mapped anyway. + +Fixes: 129766708 ("x86/efi: Only map RAM into EFI page tables if in mixed-mode") +Cc: stable@kernel.org # v4.8+ +Cc: Waiman Long +Cc: Borislav Petkov +Cc: Laura Abbott +Cc: Vojtech Pavlik +Reported-by: Hanka Pavlikova +Signed-off-by: Jiri Kosina +--- + arch/x86/platform/efi/efi_64.c | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +diff --git a/arch/x86/platform/efi/efi_64.c b/arch/x86/platform/efi/efi_64.c +index 319148bd4b05..02ae2abe8b8e 100644 +--- a/arch/x86/platform/efi/efi_64.c ++++ b/arch/x86/platform/efi/efi_64.c +@@ -269,6 +269,17 @@ int __init efi_setup_page_tables(unsigned long pa_memmap, unsigned num_pages) + efi_scratch.use_pgd = true; + + /* ++ * Certain firmware versions are way too sentimental and still believe ++ * they are exclusive and unquestionable owners of first physical page. ++ * Create 1:1 mapping for this page to avoid triple faults during early ++ * boot with such firmware. ++ */ ++ if (kernel_map_pages_in_pgd(pgd, 0x0, 0x0, 1, _PAGE_RW)) { ++ pr_err("Failed to create 1:1 mapping of first page\n"); ++ return 1; ++ } ++ ++ /* + * When making calls to the firmware everything needs to be 1:1 + * mapped and addressable with 32-bit pointers. Map the kernel + * text and allocate a new stack because we can't rely on the +-- +2.11.0 + diff --git a/kernel.spec b/kernel.spec index a18eee3ff..7688cba9f 100644 --- a/kernel.spec +++ b/kernel.spec @@ -632,6 +632,9 @@ Patch852: nouveau-add-maxwell-to-backlight-init.patch #CVE-2017-5576 CVE-2017-5577 rhbz 1416436 1416437 1416439 Patch853: drm_vc4_Fix_an_integer_overflow_in_temporary_allocation_layout.patch +#The saddest EFI firmware bug +Patch854: 0001-x86-efi-always-map-first-physical-page-into-EFI-page.patch + # END OF PATCH DEFINITIONS %endif @@ -2163,6 +2166,7 @@ fi %changelog * Thu Jan 26 2017 Laura Abbott - 4.9.6-100 - Linux v4.9.6 +- Bring in fix for bogus EFI firmware * Wed Jan 25 2017 Justin M. Forbes - CVE-2017-5576 CVE-2017-5577 vc4 overflows (rhbz 1416436 1416437 1416439) From bc239caff76fb98c9d52160d31a170599b20c63c Mon Sep 17 00:00:00 2001 From: Peter Robinson Date: Thu, 26 Jan 2017 13:41:51 +0000 Subject: [PATCH 190/275] arm64: dma-mapping: Fix dma_mapping_error() when bypassing SWIOTLB --- ...mapping_error-when-bypassing-SWIOTLB.patch | 66 +++++++++++++++++++ kernel.spec | 9 ++- 2 files changed, 73 insertions(+), 2 deletions(-) create mode 100644 arm64-dma-mapping-Fix-dma_mapping_error-when-bypassing-SWIOTLB.patch diff --git a/arm64-dma-mapping-Fix-dma_mapping_error-when-bypassing-SWIOTLB.patch b/arm64-dma-mapping-Fix-dma_mapping_error-when-bypassing-SWIOTLB.patch new file mode 100644 index 000000000..2e7f51ec6 --- /dev/null +++ b/arm64-dma-mapping-Fix-dma_mapping_error-when-bypassing-SWIOTLB.patch @@ -0,0 +1,66 @@ +From patchwork Wed Jan 25 18:31:31 2017 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +Subject: [v2] arm64: dma-mapping: Fix dma_mapping_error() when bypassing + SWIOTLB +From: Robin Murphy +X-Patchwork-Id: 9537723 +Message-Id: <840027acb4750542003dff17b4a8902ba8972754.1485368348.git.robin.murphy@arm.com> +To: will.deacon@arm.com, + catalin.marinas@arm.com +Cc: Jisheng Zhang , arnd@arndb.de, + konrad.wilk@oracle.com, aaro.koskinen@iki.fi, stable@vger.kernel.org, + linux-rpi-kernel@lists.infradead.org, linux-arm-kernel@lists.infradead.org +Date: Wed, 25 Jan 2017 18:31:31 +0000 + +When bypassing SWIOTLB on small-memory systems, we need to avoid calling +into swiotlb_dma_mapping_error() in exactly the same way as we avoid +swiotlb_dma_supported(), because the former also relies on SWIOTLB state +being initialised. + +Under the assumptions for which we skip SWIOTLB, dma_map_{single,page}() +will only ever return the DMA-offset-adjusted physical address of the +page passed in, thus we can report success unconditionally. + +Fixes: b67a8b29df7e ("arm64: mm: only initialize swiotlb when necessary") +CC: stable@vger.kernel.org +CC: Jisheng Zhang +Reported-by: Aaro Koskinen +Signed-off-by: Robin Murphy +Tested-by: Aaro Koskinen +--- + +v2: Get the return value the right way round this time... After some + careful reasoning it really is that simple. + + arch/arm64/mm/dma-mapping.c | 9 ++++++++- + 1 file changed, 8 insertions(+), 1 deletion(-) + +diff --git a/arch/arm64/mm/dma-mapping.c b/arch/arm64/mm/dma-mapping.c +index e04082700bb1..1ffb7d5d299a 100644 +--- a/arch/arm64/mm/dma-mapping.c ++++ b/arch/arm64/mm/dma-mapping.c +@@ -352,6 +352,13 @@ static int __swiotlb_dma_supported(struct device *hwdev, u64 mask) + return 1; + } + ++static int __swiotlb_dma_mapping_error(struct device *hwdev, dma_addr_t addr) ++{ ++ if (swiotlb) ++ return swiotlb_dma_mapping_error(hwdev, addr); ++ return 0; ++} ++ + static struct dma_map_ops swiotlb_dma_ops = { + .alloc = __dma_alloc, + .free = __dma_free, +@@ -366,7 +373,7 @@ static struct dma_map_ops swiotlb_dma_ops = { + .sync_sg_for_cpu = __swiotlb_sync_sg_for_cpu, + .sync_sg_for_device = __swiotlb_sync_sg_for_device, + .dma_supported = __swiotlb_dma_supported, +- .mapping_error = swiotlb_dma_mapping_error, ++ .mapping_error = __swiotlb_dma_mapping_error, + }; + + static int __init atomic_pool_init(void) diff --git a/kernel.spec b/kernel.spec index 7688cba9f..ebc3541c2 100644 --- a/kernel.spec +++ b/kernel.spec @@ -513,6 +513,8 @@ Patch426: usb-phy-tegra-Add-38.4MHz-clock-table-entry.patch # Fix OMAP4 (pandaboard) Patch427: arm-revert-mmc-omap_hsmmc-Use-dma_request_chan-for-reque.patch +Patch428: arm64-dma-mapping-Fix-dma_mapping_error-when-bypassing-SWIOTLB.patch + # Not particularly happy we don't yet have a proper upstream resolution this is the right direction # https://www.spinics.net/lists/arm-kernel/msg535191.html Patch429: arm64-mm-Fix-memmap-to-be-initialized-for-the-entire-section.patch @@ -522,10 +524,10 @@ Patch430: ARM-tegra-usb-no-reset.patch Patch431: bcm2837-initial-support.patch -Patch433: bcm283x-fixes.patch +Patch432: bcm283x-fixes.patch # http://www.spinics.net/lists/linux-mmc/msg41151.html -Patch434: bcm283x-mmc-imp-speed.patch +Patch433: bcm283x-mmc-imp-speed.patch Patch440: AllWinner-net-emac.patch @@ -2164,6 +2166,9 @@ fi # # %changelog +* Thu Jan 26 2017 Peter Robinson +- arm64: dma-mapping: Fix dma_mapping_error() when bypassing SWIOTLB + * Thu Jan 26 2017 Laura Abbott - 4.9.6-100 - Linux v4.9.6 - Bring in fix for bogus EFI firmware From 36888985327cc4d9987a3915d19f85b059567568 Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Thu, 26 Jan 2017 11:24:43 -0600 Subject: [PATCH 191/275] Notate CVEs fixed by 4.9.6 --- kernel.spec | 2 ++ 1 file changed, 2 insertions(+) diff --git a/kernel.spec b/kernel.spec index ebc3541c2..87f1daa0a 100644 --- a/kernel.spec +++ b/kernel.spec @@ -2172,6 +2172,8 @@ fi * Thu Jan 26 2017 Laura Abbott - 4.9.6-100 - Linux v4.9.6 - Bring in fix for bogus EFI firmware +- Fixes CVE-2017-5547, CVE-2016-10153, CVE-2017-5548, CVE-2017-5551 + (rhbz 1416096 1416101 1416110 1416126 1416128) * Wed Jan 25 2017 Justin M. Forbes - CVE-2017-5576 CVE-2017-5577 vc4 overflows (rhbz 1416436 1416437 1416439) From f8b849e899220edadb32736bef3fe3a2ff0b89b5 Mon Sep 17 00:00:00 2001 From: Peter Robinson Date: Tue, 31 Jan 2017 16:40:57 +0000 Subject: [PATCH 192/275] Fix CMA compaction regression (Raspberry Pi and others) --- kernel.spec | 5 +++ ...tig-re-allow-CMA-to-compact-FS-pages.patch | 42 +++++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 mm-alloc_contig-re-allow-CMA-to-compact-FS-pages.patch diff --git a/kernel.spec b/kernel.spec index 87f1daa0a..6b2a96efc 100644 --- a/kernel.spec +++ b/kernel.spec @@ -529,6 +529,8 @@ Patch432: bcm283x-fixes.patch # http://www.spinics.net/lists/linux-mmc/msg41151.html Patch433: bcm283x-mmc-imp-speed.patch +Patch434: mm-alloc_contig-re-allow-CMA-to-compact-FS-pages.patch + Patch440: AllWinner-net-emac.patch Patch442: ARM-Drop-fixed-200-Hz-timer-requirement-from-Samsung-platforms.patch @@ -2166,6 +2168,9 @@ fi # # %changelog +* Tue Jan 31 2017 Peter Robinson +- Fix CMA compaction regression (Raspberry Pi and others) + * Thu Jan 26 2017 Peter Robinson - arm64: dma-mapping: Fix dma_mapping_error() when bypassing SWIOTLB diff --git a/mm-alloc_contig-re-allow-CMA-to-compact-FS-pages.patch b/mm-alloc_contig-re-allow-CMA-to-compact-FS-pages.patch new file mode 100644 index 000000000..0e542dc4f --- /dev/null +++ b/mm-alloc_contig-re-allow-CMA-to-compact-FS-pages.patch @@ -0,0 +1,42 @@ +From 424f6c4818bbf1b8ccf58aa012ecc19c0bb9b446 Mon Sep 17 00:00:00 2001 +From: Lucas Stach +Date: Tue, 24 Jan 2017 15:18:05 -0800 +Subject: [PATCH 179/273] mm: alloc_contig: re-allow CMA to compact FS pages + +Commit 73e64c51afc5 ("mm, compaction: allow compaction for GFP_NOFS +requests") changed compation to skip FS pages if not explicitly allowed +to touch them, but missed to update the CMA compact_control. + +This leads to a very high isolation failure rate, crippling performance +of CMA even on a lightly loaded system. Re-allow CMA to compact FS +pages by setting the correct GFP flags, restoring CMA behavior and +performance to the kernel 4.9 level. + +Fixes: 73e64c51afc5 (mm, compaction: allow compaction for GFP_NOFS requests) +Link: http://lkml.kernel.org/r/20170113115155.24335-1-l.stach@pengutronix.de +Signed-off-by: Lucas Stach +Acked-by: Michal Hocko +Acked-by: Vlastimil Babka +Cc: Joonsoo Kim +Cc: Mel Gorman +Signed-off-by: Andrew Morton +Signed-off-by: Linus Torvalds +--- + mm/page_alloc.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/mm/page_alloc.c b/mm/page_alloc.c +index d604d25..41d5e2e 100644 +--- a/mm/page_alloc.c ++++ b/mm/page_alloc.c +@@ -7248,6 +7248,7 @@ int alloc_contig_range(unsigned long start, unsigned long end, + .zone = page_zone(pfn_to_page(start)), + .mode = MIGRATE_SYNC, + .ignore_skip_hint = true, ++ .gfp_mask = GFP_KERNEL, + }; + INIT_LIST_HEAD(&cc.migratepages); + +-- +2.9.3 + From 26c466e1b9e8a29d9696862b3c75ac1f4bee85b7 Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Tue, 31 Jan 2017 15:15:47 -0600 Subject: [PATCH 193/275] Fix kvm nested virt CVE-2017-2596 (rhbz 1417812 1417813) --- kernel.spec | 6 +++ kvm-fix-page-struct-leak-in-handle_vmon.patch | 50 +++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 kvm-fix-page-struct-leak-in-handle_vmon.patch diff --git a/kernel.spec b/kernel.spec index 6b2a96efc..37595b63b 100644 --- a/kernel.spec +++ b/kernel.spec @@ -639,6 +639,9 @@ Patch853: drm_vc4_Fix_an_integer_overflow_in_temporary_allocation_layout.patch #The saddest EFI firmware bug Patch854: 0001-x86-efi-always-map-first-physical-page-into-EFI-page.patch +#CVE-2017-2596 rhbz 1417812 1417813 +Patch855: kvm-fix-page-struct-leak-in-handle_vmon.patch + # END OF PATCH DEFINITIONS %endif @@ -2168,6 +2171,9 @@ fi # # %changelog +* Tue Jan 31 2017 Justin M. Forbes +- Fix kvm nested virt CVE-2017-2596 (rhbz 1417812 1417813) + * Tue Jan 31 2017 Peter Robinson - Fix CMA compaction regression (Raspberry Pi and others) diff --git a/kvm-fix-page-struct-leak-in-handle_vmon.patch b/kvm-fix-page-struct-leak-in-handle_vmon.patch new file mode 100644 index 000000000..d2b4af92e --- /dev/null +++ b/kvm-fix-page-struct-leak-in-handle_vmon.patch @@ -0,0 +1,50 @@ +From patchwork Tue Jan 24 10:56:21 2017 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +Subject: kvm: fix page struct leak in handle_vmon +From: Paolo Bonzini +X-Patchwork-Id: 9534885 +Message-Id: <1485255381-18069-1-git-send-email-pbonzini@redhat.com> +To: linux-kernel@vger.kernel.org, kvm@vger.kernel.org +Cc: dvyukov@google.com +Date: Tue, 24 Jan 2017 11:56:21 +0100 + +handle_vmon gets a reference on VMXON region page, +but does not release it. Release the reference. + +Found by syzkaller; based on a patch by Dmitry. + +Reported-by: Dmitry Vyukov +Signed-off-by: Paolo Bonzini +Reviewed-by: David Hildenbrand +--- + arch/x86/kvm/vmx.c | 9 +++++++-- + 1 file changed, 7 insertions(+), 2 deletions(-) + +diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c +index 42cc3d6f4d20..0f7345035210 100644 +--- a/arch/x86/kvm/vmx.c ++++ b/arch/x86/kvm/vmx.c +@@ -7085,13 +7085,18 @@ static int nested_vmx_check_vmptr(struct kvm_vcpu *vcpu, int exit_reason, + } + + page = nested_get_page(vcpu, vmptr); +- if (page == NULL || +- *(u32 *)kmap(page) != VMCS12_REVISION) { ++ if (page == NULL) { + nested_vmx_failInvalid(vcpu); ++ return kvm_skip_emulated_instruction(vcpu); ++ } ++ if (*(u32 *)kmap(page) != VMCS12_REVISION) { + kunmap(page); ++ nested_release_page_clean(page); ++ nested_vmx_failInvalid(vcpu); + skip_emulated_instruction(vcpu); + return 1; + } + kunmap(page); ++ nested_release_page_clean(page); + vmx->nested.vmxon_ptr = vmptr; + break; + case EXIT_REASON_VMCLEAR: From 0116ad7a69305c95e8f19f508b044b225b66c0af Mon Sep 17 00:00:00 2001 From: Laura Abbott Date: Thu, 2 Feb 2017 08:56:26 -0800 Subject: [PATCH 194/275] Linux v4.9.7 --- ...rflow_in_temporary_allocation_layout.patch | 82 ------------------- kernel.spec | 8 +- sources | 2 +- 3 files changed, 5 insertions(+), 87 deletions(-) delete mode 100644 drm_vc4_Fix_an_integer_overflow_in_temporary_allocation_layout.patch diff --git a/drm_vc4_Fix_an_integer_overflow_in_temporary_allocation_layout.patch b/drm_vc4_Fix_an_integer_overflow_in_temporary_allocation_layout.patch deleted file mode 100644 index 37f012073..000000000 --- a/drm_vc4_Fix_an_integer_overflow_in_temporary_allocation_layout.patch +++ /dev/null @@ -1,82 +0,0 @@ -From: Eric Anholt -To: dri-devel@lists.freedesktop.org -Subject: [PATCH 1/2] drm/vc4: Fix an integer overflow in temporary - allocation layout. -Date: Wed, 18 Jan 2017 07:20:49 +1100 - -We copy the unvalidated ioctl arguments from the user into kernel -temporary memory to run the validation from, to avoid a race where the -user updates the unvalidate contents in between validating them and -copying them into the validated BO. - -However, in setting up the layout of the kernel side, we failed to -check one of the additions (the roundup() for shader_rec_offset) -against integer overflow, allowing a nearly MAX_UINT value of -bin_cl_size to cause us to under-allocate the temporary space that we -then copy_from_user into. - -Reported-by: Murray McAllister -Signed-off-by: Eric Anholt -Fixes: d5b1a78a772f ("drm/vc4: Add support for drawing 3D frames.") ---- - drivers/gpu/drm/vc4/vc4_gem.c | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/drivers/gpu/drm/vc4/vc4_gem.c b/drivers/gpu/drm/vc4/vc4_gem.c -index db920771bfb5..c5fe3554858e 100644 ---- a/drivers/gpu/drm/vc4/vc4_gem.c -+++ b/drivers/gpu/drm/vc4/vc4_gem.c -@@ -594,7 +594,8 @@ vc4_get_bcl(struct drm_device *dev, struct vc4_exec_info *exec) - args->shader_rec_count); - struct vc4_bo *bo; - -- if (uniforms_offset < shader_rec_offset || -+ if (shader_rec_offset < args->bin_cl_size || -+ uniforms_offset < shader_rec_offset || - exec_size < uniforms_offset || - args->shader_rec_count >= (UINT_MAX / - sizeof(struct vc4_shader_state)) || --- -2.11.0 - -_______________________________________________ -dri-devel mailing list -dri-devel@lists.freedesktop.org -https://lists.freedesktop.org/mailman/listinfo/dri-devel - -From: Eric Anholt -To: dri-devel@lists.freedesktop.org -Subject: [PATCH 2/2] drm/vc4: Return -EINVAL on the overflow checks failing. -Date: Wed, 18 Jan 2017 07:20:50 +1100 - -By failing to set the errno, we'd continue on to trying to set up the -RCL, and then oops on trying to dereference the tile_bo that binning -validation should have set up. - -Reported-by: Ingo Molnar -Signed-off-by: Eric Anholt -Fixes: d5b1a78a772f ("drm/vc4: Add support for drawing 3D frames.") ---- - drivers/gpu/drm/vc4/vc4_gem.c | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/drivers/gpu/drm/vc4/vc4_gem.c b/drivers/gpu/drm/vc4/vc4_gem.c -index c5fe3554858e..ab3016982466 100644 ---- a/drivers/gpu/drm/vc4/vc4_gem.c -+++ b/drivers/gpu/drm/vc4/vc4_gem.c -@@ -601,6 +601,7 @@ vc4_get_bcl(struct drm_device *dev, struct vc4_exec_info *exec) - sizeof(struct vc4_shader_state)) || - temp_size < exec_size) { - DRM_ERROR("overflow in exec arguments\n"); -+ ret = -EINVAL; - goto fail; - } - --- -2.11.0 - -_______________________________________________ -dri-devel mailing list -dri-devel@lists.freedesktop.org -https://lists.freedesktop.org/mailman/listinfo/dri-devel - diff --git a/kernel.spec b/kernel.spec index 37595b63b..2dffe2e10 100644 --- a/kernel.spec +++ b/kernel.spec @@ -54,7 +54,7 @@ Summary: The Linux kernel %if 0%{?released_kernel} # Do we have a -stable update to apply? -%define stable_update 6 +%define stable_update 7 # Set rpm version accordingly %if 0%{?stable_update} %define stablerev %{stable_update} @@ -633,9 +633,6 @@ Patch851: selinux-namespace-fix.patch #rhbz 1390308 Patch852: nouveau-add-maxwell-to-backlight-init.patch -#CVE-2017-5576 CVE-2017-5577 rhbz 1416436 1416437 1416439 -Patch853: drm_vc4_Fix_an_integer_overflow_in_temporary_allocation_layout.patch - #The saddest EFI firmware bug Patch854: 0001-x86-efi-always-map-first-physical-page-into-EFI-page.patch @@ -2171,6 +2168,9 @@ fi # # %changelog +* Thu Feb 02 2017 Laura Abbott - 4.9.7-100 +- Linux v4.9.7 + * Tue Jan 31 2017 Justin M. Forbes - Fix kvm nested virt CVE-2017-2596 (rhbz 1417812 1417813) diff --git a/sources b/sources index 578616825..be324d25e 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ SHA512 (linux-4.9.tar.xz) = bf67ff812cc3cb7e5059e82cc5db0d9a7c5637f7ed9a42e4730c715bf7047c81ed3a571225f92a33ef0b6d65f35595bc32d773356646df2627da55e9bc7f1f1a SHA512 (perf-man-4.9.tar.gz) = d23bb3da1eadd6623fddbf4696948de7675f3dcf57c711a7427dd7ae111394f58d8f42752938bbea7cd219f1e7f6f116fc67a1c74f769711063940a065f37b99 -SHA512 (patch-4.9.6.xz) = 230ab118639d19b7a473e75f5463ea9add3db8cb70fe3ba546e053fc1bd32b1d353eb1c107f5467e5f24a26c43c623cf79cf8d5a5cef85613e4da989a6c0326a +SHA512 (patch-4.9.7.xz) = 48592d15efd6111eaacfa47a6def496bcc120f39bd93afccf4f23c7b93cc320638349890c67ba14792b5330a9a4c7e7fa74db6f84f4df92d20a2bf5a3eb3dcc6 From f97e1a8fef3e66216868391e7043d44c780b5f07 Mon Sep 17 00:00:00 2001 From: Laura Abbott Date: Thu, 2 Feb 2017 11:09:10 -0800 Subject: [PATCH 195/275] Correct the patch for CVE-2017-2596 to apply to 4.9.x --- kvm-fix-page-struct-leak-in-handle_vmon.patch | 26 +++++++++---------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/kvm-fix-page-struct-leak-in-handle_vmon.patch b/kvm-fix-page-struct-leak-in-handle_vmon.patch index d2b4af92e..38443abcb 100644 --- a/kvm-fix-page-struct-leak-in-handle_vmon.patch +++ b/kvm-fix-page-struct-leak-in-handle_vmon.patch @@ -1,32 +1,26 @@ -From patchwork Tue Jan 24 10:56:21 2017 -Content-Type: text/plain; charset="utf-8" -MIME-Version: 1.0 -Content-Transfer-Encoding: 7bit -Subject: kvm: fix page struct leak in handle_vmon +From fc66c84bfca091a28d01ba4a2d18b6cfd72ce270 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini -X-Patchwork-Id: 9534885 -Message-Id: <1485255381-18069-1-git-send-email-pbonzini@redhat.com> -To: linux-kernel@vger.kernel.org, kvm@vger.kernel.org -Cc: dvyukov@google.com Date: Tue, 24 Jan 2017 11:56:21 +0100 +Subject: [PATCH] kvm: fix page struct leak in handle_vmon handle_vmon gets a reference on VMXON region page, but does not release it. Release the reference. Found by syzkaller; based on a patch by Dmitry. +[labbott@redhat.com: Fixed kvm_skip_emulated_instruction for 4.9.x] Reported-by: Dmitry Vyukov Signed-off-by: Paolo Bonzini Reviewed-by: David Hildenbrand --- - arch/x86/kvm/vmx.c | 9 +++++++-- - 1 file changed, 7 insertions(+), 2 deletions(-) + arch/x86/kvm/vmx.c | 10 ++++++++-- + 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c -index 42cc3d6f4d20..0f7345035210 100644 +index 64774f4..7fef0a9 100644 --- a/arch/x86/kvm/vmx.c +++ b/arch/x86/kvm/vmx.c -@@ -7085,13 +7085,18 @@ static int nested_vmx_check_vmptr(struct kvm_vcpu *vcpu, int exit_reason, +@@ -6925,14 +6925,20 @@ static int nested_vmx_check_vmptr(struct kvm_vcpu *vcpu, int exit_reason, } page = nested_get_page(vcpu, vmptr); @@ -34,7 +28,8 @@ index 42cc3d6f4d20..0f7345035210 100644 - *(u32 *)kmap(page) != VMCS12_REVISION) { + if (page == NULL) { nested_vmx_failInvalid(vcpu); -+ return kvm_skip_emulated_instruction(vcpu); ++ skip_emulated_instruction(vcpu); ++ return 1; + } + if (*(u32 *)kmap(page) != VMCS12_REVISION) { kunmap(page); @@ -48,3 +43,6 @@ index 42cc3d6f4d20..0f7345035210 100644 vmx->nested.vmxon_ptr = vmptr; break; case EXIT_REASON_VMCLEAR: +-- +2.7.4 + From 67ef7dc4c20fb5f3e4bef69de5643d693018143d Mon Sep 17 00:00:00 2001 From: Laura Abbott Date: Thu, 2 Feb 2017 14:56:44 -0800 Subject: [PATCH 196/275] Fix for pcie_aspm_init_link_state crash (rhbz 1418858) --- ...bridges-as-roots-of-PCIe-hierarchies.patch | 90 +++++++++++++++++++ kernel.spec | 8 +- 2 files changed, 97 insertions(+), 1 deletion(-) create mode 100644 PCI-ASPM-Handle-PCI-to-PCIe-bridges-as-roots-of-PCIe-hierarchies.patch diff --git a/PCI-ASPM-Handle-PCI-to-PCIe-bridges-as-roots-of-PCIe-hierarchies.patch b/PCI-ASPM-Handle-PCI-to-PCIe-bridges-as-roots-of-PCIe-hierarchies.patch new file mode 100644 index 000000000..a76639e6a --- /dev/null +++ b/PCI-ASPM-Handle-PCI-to-PCIe-bridges-as-roots-of-PCIe-hierarchies.patch @@ -0,0 +1,90 @@ +From patchwork Mon Jan 30 15:23:24 2017 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +Subject: PCI/ASPM: Handle PCI-to-PCIe bridges as roots of PCIe hierarchies +From: Bjorn Helgaas +X-Patchwork-Id: 9545603 +Message-Id: <20170130152324.32437.37400.stgit@bhelgaas-glaptop.roam.corp.google.com> +To: linux-pci@vger.kernel.org +Cc: Jao Ching Chen , lists@ssl-mail.com, + linux-kernel@vger.kernel.org, Blake Moore , + Takashi Iwai +Date: Mon, 30 Jan 2017 09:23:24 -0600 + +In a struct pcie_link_state, link->root points to the pcie_link_state of +the root of the PCIe hierarchy. For the topmost link, this points to +itself (link->root = link). For others, we copy the pointer from the +parent (link->root = link->parent->root). + +Previously we recognized that Root Ports originated PCIe hierarchies, but +we treated PCI/PCI-X to PCIe Bridges as being in the middle of the +hierarchy, and when we tried to copy the pointer from link->parent->root, +there was no parent, and we dereferenced a NULL pointer: + + BUG: unable to handle kernel NULL pointer dereference at 0000000000000090 + IP: [] pcie_aspm_init_link_state+0x170/0x820 + +Recognize that PCI/PCI-X to PCIe Bridges originate PCIe hierarchies just +like Root Ports do, so link->root for these devices should also point to +itself. + +Fixes: 51ebfc92b72b ("PCI: Enumerate switches below PCI-to-PCIe bridges") +Link: https://bugzilla.kernel.org/show_bug.cgi?id=193411 +Link: https://bugzilla.opensuse.org/show_bug.cgi?id=1022181 +Tested-by: lists@ssl-mail.com +Signed-off-by: Bjorn Helgaas +CC: stable@vger.kernel.org # v4.2+ +--- + drivers/pci/pcie/aspm.c | 19 +++++++++++++------ + 1 file changed, 13 insertions(+), 6 deletions(-) + + +-- +To unsubscribe from this list: send the line "unsubscribe linux-pci" in +the body of a message to majordomo@vger.kernel.org +More majordomo info at http://vger.kernel.org/majordomo-info.html + +diff --git a/drivers/pci/pcie/aspm.c b/drivers/pci/pcie/aspm.c +index 17ac1dce3286..3dd8bcbb3011 100644 +--- a/drivers/pci/pcie/aspm.c ++++ b/drivers/pci/pcie/aspm.c +@@ -532,25 +532,32 @@ static struct pcie_link_state *alloc_pcie_link_state(struct pci_dev *pdev) + link = kzalloc(sizeof(*link), GFP_KERNEL); + if (!link) + return NULL; ++ + INIT_LIST_HEAD(&link->sibling); + INIT_LIST_HEAD(&link->children); + INIT_LIST_HEAD(&link->link); + link->pdev = pdev; +- if (pci_pcie_type(pdev) != PCI_EXP_TYPE_ROOT_PORT) { ++ ++ /* ++ * Root Ports and PCI/PCI-X to PCIe Bridges are roots of PCIe ++ * hierarchies. ++ */ ++ if (pci_pcie_type(pdev) == PCI_EXP_TYPE_ROOT_PORT || ++ pci_pcie_type(pdev) == PCI_EXP_TYPE_PCIE_BRIDGE) { ++ link->root = link; ++ } else { + struct pcie_link_state *parent; ++ + parent = pdev->bus->parent->self->link_state; + if (!parent) { + kfree(link); + return NULL; + } ++ + link->parent = parent; ++ link->root = link->parent->root; + list_add(&link->link, &parent->children); + } +- /* Setup a pointer to the root port link */ +- if (!link->parent) +- link->root = link; +- else +- link->root = link->parent->root; + + list_add(&link->sibling, &link_list); + pdev->link_state = link; diff --git a/kernel.spec b/kernel.spec index 2dffe2e10..14e395768 100644 --- a/kernel.spec +++ b/kernel.spec @@ -42,7 +42,7 @@ Summary: The Linux kernel # For non-released -rc kernels, this will be appended after the rcX and # gitX tags, so a 3 here would become part of release "0.rcX.gitX.3" # -%global baserelease 100 +%global baserelease 101 %global fedora_build %{baserelease} # base_sublevel is the kernel version we're starting with and patching @@ -639,6 +639,9 @@ Patch854: 0001-x86-efi-always-map-first-physical-page-into-EFI-page.patch #CVE-2017-2596 rhbz 1417812 1417813 Patch855: kvm-fix-page-struct-leak-in-handle_vmon.patch +# rhbz 1418858 +Patch856: PCI-ASPM-Handle-PCI-to-PCIe-bridges-as-roots-of-PCIe-hierarchies.patch + # END OF PATCH DEFINITIONS %endif @@ -2168,6 +2171,9 @@ fi # # %changelog +* Thu Feb 02 2017 Laura Abbott - 4.9.7-101 +- Fix for pcie_aspm_init_link_state crash (rhbz 1418858) + * Thu Feb 02 2017 Laura Abbott - 4.9.7-100 - Linux v4.9.7 From 6109af96fd888b9092c2edb5b31e0588ba125dce Mon Sep 17 00:00:00 2001 From: Laura Abbott Date: Mon, 6 Feb 2017 07:55:25 -0800 Subject: [PATCH 197/275] Linux v4.9.8 --- kernel.spec | 7 +++++-- sources | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/kernel.spec b/kernel.spec index 14e395768..9ad7b600d 100644 --- a/kernel.spec +++ b/kernel.spec @@ -42,7 +42,7 @@ Summary: The Linux kernel # For non-released -rc kernels, this will be appended after the rcX and # gitX tags, so a 3 here would become part of release "0.rcX.gitX.3" # -%global baserelease 101 +%global baserelease 100 %global fedora_build %{baserelease} # base_sublevel is the kernel version we're starting with and patching @@ -54,7 +54,7 @@ Summary: The Linux kernel %if 0%{?released_kernel} # Do we have a -stable update to apply? -%define stable_update 7 +%define stable_update 8 # Set rpm version accordingly %if 0%{?stable_update} %define stablerev %{stable_update} @@ -2171,6 +2171,9 @@ fi # # %changelog +* Mon Feb 06 2017 Laura Abbott - 4.9.8-100 +- Linux v4.9.8 + * Thu Feb 02 2017 Laura Abbott - 4.9.7-101 - Fix for pcie_aspm_init_link_state crash (rhbz 1418858) diff --git a/sources b/sources index be324d25e..725490d51 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ SHA512 (linux-4.9.tar.xz) = bf67ff812cc3cb7e5059e82cc5db0d9a7c5637f7ed9a42e4730c715bf7047c81ed3a571225f92a33ef0b6d65f35595bc32d773356646df2627da55e9bc7f1f1a SHA512 (perf-man-4.9.tar.gz) = d23bb3da1eadd6623fddbf4696948de7675f3dcf57c711a7427dd7ae111394f58d8f42752938bbea7cd219f1e7f6f116fc67a1c74f769711063940a065f37b99 -SHA512 (patch-4.9.7.xz) = 48592d15efd6111eaacfa47a6def496bcc120f39bd93afccf4f23c7b93cc320638349890c67ba14792b5330a9a4c7e7fa74db6f84f4df92d20a2bf5a3eb3dcc6 +SHA512 (patch-4.9.8.xz) = 98400f66cdb4536dfefc8e88a60d9c84dd60e999e1f8547dd25c1e1476099fa76c4f6a0b6b45f91ddc6003ec6233a3e1b6e44b8172c8e89b3e9aca7ffde7b15e From 18006e9d5f24392f83a191d8b190666676ea47ce Mon Sep 17 00:00:00 2001 From: Peter Robinson Date: Tue, 7 Feb 2017 11:11:31 +0000 Subject: [PATCH 198/275] Drop the 'fixes' for the Raspberry Pi that we pulled back from 4.10, they fix a few issues but regress the RPi3 terribly so aren't worth the other fixes :(. I'll need to bisect this in 4.10 as the issues are seen there but dropping this gives a some breathing room --- bcm283x-fixes.patch | 964 -------------------------------------------- kernel.spec | 7 +- 2 files changed, 4 insertions(+), 967 deletions(-) delete mode 100644 bcm283x-fixes.patch diff --git a/bcm283x-fixes.patch b/bcm283x-fixes.patch deleted file mode 100644 index 07abd3aa4..000000000 --- a/bcm283x-fixes.patch +++ /dev/null @@ -1,964 +0,0 @@ -From e2474541032db65d02bf88b6a8c2f954654b443f Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= -Date: Mon, 3 Oct 2016 22:06:08 +0200 -Subject: [PATCH 31155/39886] i2c: bcm2835: Fix hang for writing messages - larger than 16 bytes -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Writing messages larger than the FIFO size results in a hang, rendering -the machine unusable. This is because the RXD status flag is set on the -first interrupt which results in bcm2835_drain_rxfifo() stealing bytes -from the buffer. The controller continues to trigger interrupts waiting -for the missing bytes, but bcm2835_fill_txfifo() has none to give. -In this situation wait_for_completion_timeout() apparently is unable to -stop the madness. - -The BCM2835 ARM Peripherals datasheet has this to say about the flags: - TXD: is set when the FIFO has space for at least one byte of data. - RXD: is set when the FIFO contains at least one byte of data. - TXW: is set during a write transfer and the FIFO is less than full. - RXR: is set during a read transfer and the FIFO is or more full. - -Implementing the logic from the downstream i2c-bcm2708 driver solved -the hang problem. - -Signed-off-by: Noralf Trønnes -Reviewed-by: Eric Anholt -Reviewed-by: Martin Sperl -Signed-off-by: Wolfram Sang ---- - drivers/i2c/busses/i2c-bcm2835.c | 22 ++++++++++++++-------- - 1 file changed, 14 insertions(+), 8 deletions(-) - -diff --git a/drivers/i2c/busses/i2c-bcm2835.c b/drivers/i2c/busses/i2c-bcm2835.c -index d4f3239..f283b71 100644 ---- a/drivers/i2c/busses/i2c-bcm2835.c -+++ b/drivers/i2c/busses/i2c-bcm2835.c -@@ -64,6 +64,7 @@ struct bcm2835_i2c_dev { - int irq; - struct i2c_adapter adapter; - struct completion completion; -+ struct i2c_msg *curr_msg; - u32 msg_err; - u8 *msg_buf; - size_t msg_buf_remaining; -@@ -126,14 +127,13 @@ static irqreturn_t bcm2835_i2c_isr(int this_irq, void *data) - return IRQ_HANDLED; - } - -- if (val & BCM2835_I2C_S_RXD) { -- bcm2835_drain_rxfifo(i2c_dev); -- if (!(val & BCM2835_I2C_S_DONE)) -- return IRQ_HANDLED; -- } -- - if (val & BCM2835_I2C_S_DONE) { -- if (i2c_dev->msg_buf_remaining) -+ if (i2c_dev->curr_msg->flags & I2C_M_RD) { -+ bcm2835_drain_rxfifo(i2c_dev); -+ val = bcm2835_i2c_readl(i2c_dev, BCM2835_I2C_S); -+ } -+ -+ if ((val & BCM2835_I2C_S_RXD) || i2c_dev->msg_buf_remaining) - i2c_dev->msg_err = BCM2835_I2C_S_LEN; - else - i2c_dev->msg_err = 0; -@@ -141,11 +141,16 @@ static irqreturn_t bcm2835_i2c_isr(int this_irq, void *data) - return IRQ_HANDLED; - } - -- if (val & BCM2835_I2C_S_TXD) { -+ if (val & BCM2835_I2C_S_TXW) { - bcm2835_fill_txfifo(i2c_dev); - return IRQ_HANDLED; - } - -+ if (val & BCM2835_I2C_S_RXR) { -+ bcm2835_drain_rxfifo(i2c_dev); -+ return IRQ_HANDLED; -+ } -+ - return IRQ_NONE; - } - -@@ -155,6 +160,7 @@ static int bcm2835_i2c_xfer_msg(struct bcm2835_i2c_dev *i2c_dev, - u32 c; - unsigned long time_left; - -+ i2c_dev->curr_msg = msg; - i2c_dev->msg_buf = msg->buf; - i2c_dev->msg_buf_remaining = msg->len; - reinit_completion(&i2c_dev->completion); --- -2.9.3 - -From d4030d75c7cbb434b2a3e5f6af5065879d2615a5 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= -Date: Mon, 3 Oct 2016 22:06:09 +0200 -Subject: [PATCH 31156/39886] i2c: bcm2835: Protect against unexpected TXW/RXR - interrupts -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -If an unexpected TXW or RXR interrupt occurs (msg_buf_remaining == 0), -the driver has no way to fill/drain the FIFO to stop the interrupts. -In this case the controller has to be disabled and the transfer -completed to avoid hang. - -(CLKT | ERR) and DONE interrupts are completed in their own paths, and -the controller is disabled in the transfer function after completion. -Unite the code paths and do disabling inside the interrupt routine. - -Clear interrupt status bits in the united completion path instead of -trying to do it on every interrupt which isn't necessary. -Only CLKT, ERR and DONE can be cleared that way. - -Add the status value to the error value in case of TXW/RXR errors to -distinguish them from the other S_LEN error. - -Signed-off-by: Noralf Trønnes -Reviewed-by: Eric Anholt -Signed-off-by: Wolfram Sang ---- - drivers/i2c/busses/i2c-bcm2835.c | 40 +++++++++++++++++++++++++++++++--------- - 1 file changed, 31 insertions(+), 9 deletions(-) - -diff --git a/drivers/i2c/busses/i2c-bcm2835.c b/drivers/i2c/busses/i2c-bcm2835.c -index f283b71..d2ba1a4 100644 ---- a/drivers/i2c/busses/i2c-bcm2835.c -+++ b/drivers/i2c/busses/i2c-bcm2835.c -@@ -50,8 +50,6 @@ - #define BCM2835_I2C_S_CLKT BIT(9) - #define BCM2835_I2C_S_LEN BIT(10) /* Fake bit for SW error reporting */ - --#define BCM2835_I2C_BITMSK_S 0x03FF -- - #define BCM2835_I2C_CDIV_MIN 0x0002 - #define BCM2835_I2C_CDIV_MAX 0xFFFE - -@@ -111,20 +109,26 @@ static void bcm2835_drain_rxfifo(struct bcm2835_i2c_dev *i2c_dev) - } - } - -+/* -+ * Note about I2C_C_CLEAR on error: -+ * The I2C_C_CLEAR on errors will take some time to resolve -- if you were in -+ * non-idle state and I2C_C_READ, it sets an abort_rx flag and runs through -+ * the state machine to send a NACK and a STOP. Since we're setting CLEAR -+ * without I2CEN, that NACK will be hanging around queued up for next time -+ * we start the engine. -+ */ -+ - static irqreturn_t bcm2835_i2c_isr(int this_irq, void *data) - { - struct bcm2835_i2c_dev *i2c_dev = data; - u32 val, err; - - val = bcm2835_i2c_readl(i2c_dev, BCM2835_I2C_S); -- val &= BCM2835_I2C_BITMSK_S; -- bcm2835_i2c_writel(i2c_dev, BCM2835_I2C_S, val); - - err = val & (BCM2835_I2C_S_CLKT | BCM2835_I2C_S_ERR); - if (err) { - i2c_dev->msg_err = err; -- complete(&i2c_dev->completion); -- return IRQ_HANDLED; -+ goto complete; - } - - if (val & BCM2835_I2C_S_DONE) { -@@ -137,21 +141,38 @@ static irqreturn_t bcm2835_i2c_isr(int this_irq, void *data) - i2c_dev->msg_err = BCM2835_I2C_S_LEN; - else - i2c_dev->msg_err = 0; -- complete(&i2c_dev->completion); -- return IRQ_HANDLED; -+ goto complete; - } - - if (val & BCM2835_I2C_S_TXW) { -+ if (!i2c_dev->msg_buf_remaining) { -+ i2c_dev->msg_err = val | BCM2835_I2C_S_LEN; -+ goto complete; -+ } -+ - bcm2835_fill_txfifo(i2c_dev); - return IRQ_HANDLED; - } - - if (val & BCM2835_I2C_S_RXR) { -+ if (!i2c_dev->msg_buf_remaining) { -+ i2c_dev->msg_err = val | BCM2835_I2C_S_LEN; -+ goto complete; -+ } -+ - bcm2835_drain_rxfifo(i2c_dev); - return IRQ_HANDLED; - } - - return IRQ_NONE; -+ -+complete: -+ bcm2835_i2c_writel(i2c_dev, BCM2835_I2C_C, BCM2835_I2C_C_CLEAR); -+ bcm2835_i2c_writel(i2c_dev, BCM2835_I2C_S, BCM2835_I2C_S_CLKT | -+ BCM2835_I2C_S_ERR | BCM2835_I2C_S_DONE); -+ complete(&i2c_dev->completion); -+ -+ return IRQ_HANDLED; - } - - static int bcm2835_i2c_xfer_msg(struct bcm2835_i2c_dev *i2c_dev, -@@ -181,8 +202,9 @@ static int bcm2835_i2c_xfer_msg(struct bcm2835_i2c_dev *i2c_dev, - - time_left = wait_for_completion_timeout(&i2c_dev->completion, - BCM2835_I2C_TIMEOUT); -- bcm2835_i2c_writel(i2c_dev, BCM2835_I2C_C, BCM2835_I2C_C_CLEAR); - if (!time_left) { -+ bcm2835_i2c_writel(i2c_dev, BCM2835_I2C_C, -+ BCM2835_I2C_C_CLEAR); - dev_err(i2c_dev->dev, "i2c transfer timed out\n"); - return -ETIMEDOUT; - } --- -2.9.3 - -From 23c9540b3ad1d7473fe40df80074d0fb0bf04869 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= -Date: Mon, 3 Oct 2016 22:06:10 +0200 -Subject: [PATCH 31157/39886] i2c: bcm2835: Use dev_dbg logging on transfer - errors -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Writing to an AT24C32 generates on average 2x i2c transfer errors per -32-byte page write. Which amounts to a lot for a 4k write. This is due -to the fact that the chip doesn't respond during it's internal write -cycle when the at24 driver tries and retries the next write. -Only a handful drivers use dev_err() on transfer error, so switch to -dev_dbg() instead. - -Signed-off-by: Noralf Trønnes -Reviewed-by: Eric Anholt -Signed-off-by: Wolfram Sang ---- - drivers/i2c/busses/i2c-bcm2835.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/drivers/i2c/busses/i2c-bcm2835.c b/drivers/i2c/busses/i2c-bcm2835.c -index d2ba1a4..54d510a 100644 ---- a/drivers/i2c/busses/i2c-bcm2835.c -+++ b/drivers/i2c/busses/i2c-bcm2835.c -@@ -216,7 +216,7 @@ static int bcm2835_i2c_xfer_msg(struct bcm2835_i2c_dev *i2c_dev, - (msg->flags & I2C_M_IGNORE_NAK)) - return 0; - -- dev_err(i2c_dev->dev, "i2c transfer failed: %x\n", i2c_dev->msg_err); -+ dev_dbg(i2c_dev->dev, "i2c transfer failed: %x\n", i2c_dev->msg_err); - - if (i2c_dev->msg_err & BCM2835_I2C_S_ERR) - return -EREMOTEIO; --- -2.9.3 - -From 8d2cc5cc6ee5c0fc48a96bb29af55fc700f66fdf Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= -Date: Mon, 3 Oct 2016 22:06:11 +0200 -Subject: [PATCH 31158/39886] i2c: bcm2835: Can't support I2C_M_IGNORE_NAK -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -The controller can't support this flag, so remove it. - -Documentation/i2c/i2c-protocol states that all of the message is sent: - -I2C_M_IGNORE_NAK: - Normally message is interrupted immediately if there is [NA] from the - client. Setting this flag treats any [NA] as [A], and all of - message is sent. - ->From the BCM2835 ARM Peripherals datasheet: - - The ERR field is set when the slave fails to acknowledge either - its address or a data byte written to it. - -So when the controller doesn't receive an ack, it sets ERR and raises -an interrupt. In other words, the whole message is not sent. - -Signed-off-by: Noralf Trønnes -Reviewed-by: Eric Anholt -Signed-off-by: Wolfram Sang ---- - drivers/i2c/busses/i2c-bcm2835.c | 4 ---- - 1 file changed, 4 deletions(-) - -diff --git a/drivers/i2c/busses/i2c-bcm2835.c b/drivers/i2c/busses/i2c-bcm2835.c -index 54d510a..565ef69 100644 ---- a/drivers/i2c/busses/i2c-bcm2835.c -+++ b/drivers/i2c/busses/i2c-bcm2835.c -@@ -212,10 +212,6 @@ static int bcm2835_i2c_xfer_msg(struct bcm2835_i2c_dev *i2c_dev, - if (likely(!i2c_dev->msg_err)) - return 0; - -- if ((i2c_dev->msg_err & BCM2835_I2C_S_ERR) && -- (msg->flags & I2C_M_IGNORE_NAK)) -- return 0; -- - dev_dbg(i2c_dev->dev, "i2c transfer failed: %x\n", i2c_dev->msg_err); - - if (i2c_dev->msg_err & BCM2835_I2C_S_ERR) --- -2.9.3 - -From ee05fea21b017b81a9477569b6a0c2d8e2946ac9 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= -Date: Mon, 3 Oct 2016 22:06:12 +0200 -Subject: [PATCH 31159/39886] i2c: bcm2835: Add support for Repeated Start - Condition -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Documentation/i2c/i2c-protocol states that Combined transactions should -separate messages with a Start bit and end the whole transaction with a -Stop bit. This patch adds support for issuing only a Start between -messages instead of a Stop followed by a Start. - -This implementation differs from downstream i2c-bcm2708 in 2 respects: -- it uses an interrupt to detect that the transfer is active instead - of using polling. There is no interrupt for Transfer Active, but by - not prefilling the FIFO it's possible to use the TXW interrupt. -- when resetting/disabling the controller between transfers it writes - CLEAR to the control register instead of just zero. - Using just zero gave many errors. This might be the reason why - downstream had to disable this feature and make it available with a - module parameter. - -I have run thousands of transfers to a DS1307 (rtc), MMA8451 (accel) -and AT24C32 (eeprom) in parallel without problems. - -Signed-off-by: Noralf Trønnes -Acked-by: Eric Anholt -Signed-off-by: Wolfram Sang ---- - drivers/i2c/busses/i2c-bcm2835.c | 101 ++++++++++++++++++++++++--------------- - 1 file changed, 63 insertions(+), 38 deletions(-) - -diff --git a/drivers/i2c/busses/i2c-bcm2835.c b/drivers/i2c/busses/i2c-bcm2835.c -index 565ef69..241e08a 100644 ---- a/drivers/i2c/busses/i2c-bcm2835.c -+++ b/drivers/i2c/busses/i2c-bcm2835.c -@@ -63,6 +63,7 @@ struct bcm2835_i2c_dev { - struct i2c_adapter adapter; - struct completion completion; - struct i2c_msg *curr_msg; -+ int num_msgs; - u32 msg_err; - u8 *msg_buf; - size_t msg_buf_remaining; -@@ -110,6 +111,45 @@ static void bcm2835_drain_rxfifo(struct bcm2835_i2c_dev *i2c_dev) - } - - /* -+ * Repeated Start Condition (Sr) -+ * The BCM2835 ARM Peripherals datasheet mentions a way to trigger a Sr when it -+ * talks about reading from a slave with 10 bit address. This is achieved by -+ * issuing a write, poll the I2CS.TA flag and wait for it to be set, and then -+ * issue a read. -+ * A comment in https://github.com/raspberrypi/linux/issues/254 shows how the -+ * firmware actually does it using polling and says that it's a workaround for -+ * a problem in the state machine. -+ * It turns out that it is possible to use the TXW interrupt to know when the -+ * transfer is active, provided the FIFO has not been prefilled. -+ */ -+ -+static void bcm2835_i2c_start_transfer(struct bcm2835_i2c_dev *i2c_dev) -+{ -+ u32 c = BCM2835_I2C_C_ST | BCM2835_I2C_C_I2CEN; -+ struct i2c_msg *msg = i2c_dev->curr_msg; -+ bool last_msg = (i2c_dev->num_msgs == 1); -+ -+ if (!i2c_dev->num_msgs) -+ return; -+ -+ i2c_dev->num_msgs--; -+ i2c_dev->msg_buf = msg->buf; -+ i2c_dev->msg_buf_remaining = msg->len; -+ -+ if (msg->flags & I2C_M_RD) -+ c |= BCM2835_I2C_C_READ | BCM2835_I2C_C_INTR; -+ else -+ c |= BCM2835_I2C_C_INTT; -+ -+ if (last_msg) -+ c |= BCM2835_I2C_C_INTD; -+ -+ bcm2835_i2c_writel(i2c_dev, BCM2835_I2C_A, msg->addr); -+ bcm2835_i2c_writel(i2c_dev, BCM2835_I2C_DLEN, msg->len); -+ bcm2835_i2c_writel(i2c_dev, BCM2835_I2C_C, c); -+} -+ -+/* - * Note about I2C_C_CLEAR on error: - * The I2C_C_CLEAR on errors will take some time to resolve -- if you were in - * non-idle state and I2C_C_READ, it sets an abort_rx flag and runs through -@@ -151,6 +191,12 @@ static irqreturn_t bcm2835_i2c_isr(int this_irq, void *data) - } - - bcm2835_fill_txfifo(i2c_dev); -+ -+ if (i2c_dev->num_msgs && !i2c_dev->msg_buf_remaining) { -+ i2c_dev->curr_msg++; -+ bcm2835_i2c_start_transfer(i2c_dev); -+ } -+ - return IRQ_HANDLED; - } - -@@ -175,30 +221,25 @@ static irqreturn_t bcm2835_i2c_isr(int this_irq, void *data) - return IRQ_HANDLED; - } - --static int bcm2835_i2c_xfer_msg(struct bcm2835_i2c_dev *i2c_dev, -- struct i2c_msg *msg) -+static int bcm2835_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[], -+ int num) - { -- u32 c; -+ struct bcm2835_i2c_dev *i2c_dev = i2c_get_adapdata(adap); - unsigned long time_left; -+ int i; - -- i2c_dev->curr_msg = msg; -- i2c_dev->msg_buf = msg->buf; -- i2c_dev->msg_buf_remaining = msg->len; -- reinit_completion(&i2c_dev->completion); -- -- bcm2835_i2c_writel(i2c_dev, BCM2835_I2C_C, BCM2835_I2C_C_CLEAR); -+ for (i = 0; i < (num - 1); i++) -+ if (msgs[i].flags & I2C_M_RD) { -+ dev_warn_once(i2c_dev->dev, -+ "only one read message supported, has to be last\n"); -+ return -EOPNOTSUPP; -+ } - -- if (msg->flags & I2C_M_RD) { -- c = BCM2835_I2C_C_READ | BCM2835_I2C_C_INTR; -- } else { -- c = BCM2835_I2C_C_INTT; -- bcm2835_fill_txfifo(i2c_dev); -- } -- c |= BCM2835_I2C_C_ST | BCM2835_I2C_C_INTD | BCM2835_I2C_C_I2CEN; -+ i2c_dev->curr_msg = msgs; -+ i2c_dev->num_msgs = num; -+ reinit_completion(&i2c_dev->completion); - -- bcm2835_i2c_writel(i2c_dev, BCM2835_I2C_A, msg->addr); -- bcm2835_i2c_writel(i2c_dev, BCM2835_I2C_DLEN, msg->len); -- bcm2835_i2c_writel(i2c_dev, BCM2835_I2C_C, c); -+ bcm2835_i2c_start_transfer(i2c_dev); - - time_left = wait_for_completion_timeout(&i2c_dev->completion, - BCM2835_I2C_TIMEOUT); -@@ -209,31 +250,15 @@ static int bcm2835_i2c_xfer_msg(struct bcm2835_i2c_dev *i2c_dev, - return -ETIMEDOUT; - } - -- if (likely(!i2c_dev->msg_err)) -- return 0; -+ if (!i2c_dev->msg_err) -+ return num; - - dev_dbg(i2c_dev->dev, "i2c transfer failed: %x\n", i2c_dev->msg_err); - - if (i2c_dev->msg_err & BCM2835_I2C_S_ERR) - return -EREMOTEIO; -- else -- return -EIO; --} -- --static int bcm2835_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[], -- int num) --{ -- struct bcm2835_i2c_dev *i2c_dev = i2c_get_adapdata(adap); -- int i; -- int ret = 0; -- -- for (i = 0; i < num; i++) { -- ret = bcm2835_i2c_xfer_msg(i2c_dev, &msgs[i]); -- if (ret) -- break; -- } - -- return ret ?: i; -+ return -EIO; - } - - static u32 bcm2835_i2c_func(struct i2c_adapter *adap) --- -2.9.3 - -From e13e19e12f66401ce1e21ab491715835852babe7 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= -Date: Mon, 3 Oct 2016 22:06:13 +0200 -Subject: [PATCH 31160/39886] i2c: bcm2835: Support i2c-dev ioctl I2C_TIMEOUT -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Use i2c_adapter->timeout for the completion timeout value. The core -default is 1 second. - -Signed-off-by: Noralf Trønnes -Reviewed-by: Eric Anholt -Signed-off-by: Wolfram Sang ---- - drivers/i2c/busses/i2c-bcm2835.c | 4 +--- - 1 file changed, 1 insertion(+), 3 deletions(-) - -diff --git a/drivers/i2c/busses/i2c-bcm2835.c b/drivers/i2c/busses/i2c-bcm2835.c -index 241e08a..d2085dd 100644 ---- a/drivers/i2c/busses/i2c-bcm2835.c -+++ b/drivers/i2c/busses/i2c-bcm2835.c -@@ -53,8 +53,6 @@ - #define BCM2835_I2C_CDIV_MIN 0x0002 - #define BCM2835_I2C_CDIV_MAX 0xFFFE - --#define BCM2835_I2C_TIMEOUT (msecs_to_jiffies(1000)) -- - struct bcm2835_i2c_dev { - struct device *dev; - void __iomem *regs; -@@ -242,7 +240,7 @@ static int bcm2835_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[], - bcm2835_i2c_start_transfer(i2c_dev); - - time_left = wait_for_completion_timeout(&i2c_dev->completion, -- BCM2835_I2C_TIMEOUT); -+ adap->timeout); - if (!time_left) { - bcm2835_i2c_writel(i2c_dev, BCM2835_I2C_C, - BCM2835_I2C_C_CLEAR); --- -2.9.3 - -From 9446f62e8e18057fceb179d947508df2f7253b26 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= -Date: Mon, 3 Oct 2016 22:06:14 +0200 -Subject: [PATCH 31161/39886] i2c: bcm2835: Add support for dynamic clock -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Support a dynamic clock by reading the frequency and setting the -divisor in the transfer function instead of during probe. - -Signed-off-by: Noralf Trønnes -Reviewed-by: Martin Sperl -Signed-off-by: Wolfram Sang ---- - drivers/i2c/busses/i2c-bcm2835.c | 51 +++++++++++++++++++++++++--------------- - 1 file changed, 32 insertions(+), 19 deletions(-) - -diff --git a/drivers/i2c/busses/i2c-bcm2835.c b/drivers/i2c/busses/i2c-bcm2835.c -index d2085dd..c3436f6 100644 ---- a/drivers/i2c/busses/i2c-bcm2835.c -+++ b/drivers/i2c/busses/i2c-bcm2835.c -@@ -58,6 +58,7 @@ struct bcm2835_i2c_dev { - void __iomem *regs; - struct clk *clk; - int irq; -+ u32 bus_clk_rate; - struct i2c_adapter adapter; - struct completion completion; - struct i2c_msg *curr_msg; -@@ -78,6 +79,30 @@ static inline u32 bcm2835_i2c_readl(struct bcm2835_i2c_dev *i2c_dev, u32 reg) - return readl(i2c_dev->regs + reg); - } - -+static int bcm2835_i2c_set_divider(struct bcm2835_i2c_dev *i2c_dev) -+{ -+ u32 divider; -+ -+ divider = DIV_ROUND_UP(clk_get_rate(i2c_dev->clk), -+ i2c_dev->bus_clk_rate); -+ /* -+ * Per the datasheet, the register is always interpreted as an even -+ * number, by rounding down. In other words, the LSB is ignored. So, -+ * if the LSB is set, increment the divider to avoid any issue. -+ */ -+ if (divider & 1) -+ divider++; -+ if ((divider < BCM2835_I2C_CDIV_MIN) || -+ (divider > BCM2835_I2C_CDIV_MAX)) { -+ dev_err_ratelimited(i2c_dev->dev, "Invalid clock-frequency\n"); -+ return -EINVAL; -+ } -+ -+ bcm2835_i2c_writel(i2c_dev, BCM2835_I2C_DIV, divider); -+ -+ return 0; -+} -+ - static void bcm2835_fill_txfifo(struct bcm2835_i2c_dev *i2c_dev) - { - u32 val; -@@ -224,7 +249,7 @@ static int bcm2835_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[], - { - struct bcm2835_i2c_dev *i2c_dev = i2c_get_adapdata(adap); - unsigned long time_left; -- int i; -+ int i, ret; - - for (i = 0; i < (num - 1); i++) - if (msgs[i].flags & I2C_M_RD) { -@@ -233,6 +258,10 @@ static int bcm2835_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[], - return -EOPNOTSUPP; - } - -+ ret = bcm2835_i2c_set_divider(i2c_dev); -+ if (ret) -+ return ret; -+ - i2c_dev->curr_msg = msgs; - i2c_dev->num_msgs = num; - reinit_completion(&i2c_dev->completion); -@@ -282,7 +311,6 @@ static int bcm2835_i2c_probe(struct platform_device *pdev) - { - struct bcm2835_i2c_dev *i2c_dev; - struct resource *mem, *irq; -- u32 bus_clk_rate, divider; - int ret; - struct i2c_adapter *adap; - -@@ -306,27 +334,12 @@ static int bcm2835_i2c_probe(struct platform_device *pdev) - } - - ret = of_property_read_u32(pdev->dev.of_node, "clock-frequency", -- &bus_clk_rate); -+ &i2c_dev->bus_clk_rate); - if (ret < 0) { - dev_warn(&pdev->dev, - "Could not read clock-frequency property\n"); -- bus_clk_rate = 100000; -- } -- -- divider = DIV_ROUND_UP(clk_get_rate(i2c_dev->clk), bus_clk_rate); -- /* -- * Per the datasheet, the register is always interpreted as an even -- * number, by rounding down. In other words, the LSB is ignored. So, -- * if the LSB is set, increment the divider to avoid any issue. -- */ -- if (divider & 1) -- divider++; -- if ((divider < BCM2835_I2C_CDIV_MIN) || -- (divider > BCM2835_I2C_CDIV_MAX)) { -- dev_err(&pdev->dev, "Invalid clock-frequency\n"); -- return -ENODEV; -+ i2c_dev->bus_clk_rate = 100000; - } -- bcm2835_i2c_writel(i2c_dev, BCM2835_I2C_DIV, divider); - - irq = platform_get_resource(pdev, IORESOURCE_IRQ, 0); - if (!irq) { --- -2.9.3 - -From f2a46926aba1f0c33944901d2420a6a887455ddc Mon Sep 17 00:00:00 2001 -From: Boris Brezillon -Date: Tue, 22 Nov 2016 12:45:28 -0800 -Subject: [PATCH 08819/13183] clk: bcm2835: Fix ->fixed_divider of pllh_aux - -There is no fixed divider on pllh_aux. - -Signed-off-by: Boris Brezillon -Signed-off-by: Eric Anholt -Reviewed-by: Eric Anholt -Signed-off-by: Stephen Boyd ---- - drivers/clk/bcm/clk-bcm2835.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/drivers/clk/bcm/clk-bcm2835.c b/drivers/clk/bcm/clk-bcm2835.c -index 8c7763f..836d075 100644 ---- a/drivers/clk/bcm/clk-bcm2835.c -+++ b/drivers/clk/bcm/clk-bcm2835.c -@@ -1596,7 +1596,7 @@ static const struct bcm2835_clk_desc clk_desc_array[] = { - .a2w_reg = A2W_PLLH_AUX, - .load_mask = CM_PLLH_LOADAUX, - .hold_mask = 0, -- .fixed_divider = 10), -+ .fixed_divider = 1), - [BCM2835_PLLH_PIX] = REGISTER_PLL_DIV( - .name = "pllh_pix", - .source_pll = "pllh", --- -2.9.3 - -commit 84c39b8b7d46883f7a7514c7d55909831aa846fd -Author: Arvind Yadav -Date: Wed Sep 21 23:03:57 2016 +0530 - - clocksource/drivers/bcm2835_timer: Unmap region obtained by of_iomap - - Free memory mapping, if bcm2835_timer_init is not successful. - - Signed-off-by: Arvind Yadav - Reviewed-by: Eric Anholt - Signed-off-by: Daniel Lezcano - -diff --git a/drivers/clocksource/bcm2835_timer.c b/drivers/clocksource/bcm2835_timer.c -index e71acf2..f2f29d2 100644 ---- a/drivers/clocksource/bcm2835_timer.c -+++ b/drivers/clocksource/bcm2835_timer.c -@@ -96,7 +96,7 @@ static int __init bcm2835_timer_init(struct device_node *node) - ret = of_property_read_u32(node, "clock-frequency", &freq); - if (ret) { - pr_err("Can't read clock-frequency"); -- return ret; -+ goto err_iounmap; - } - - system_clock = base + REG_COUNTER_LO; -@@ -108,13 +108,15 @@ static int __init bcm2835_timer_init(struct device_node *node) - irq = irq_of_parse_and_map(node, DEFAULT_TIMER); - if (irq <= 0) { - pr_err("Can't parse IRQ"); -- return -EINVAL; -+ ret = -EINVAL; -+ goto err_iounmap; - } - - timer = kzalloc(sizeof(*timer), GFP_KERNEL); - if (!timer) { - pr_err("Can't allocate timer struct\n"); -- return -ENOMEM; -+ ret = -ENOMEM; -+ goto err_iounmap; - } - - timer->control = base + REG_CONTROL; -@@ -133,7 +135,7 @@ static int __init bcm2835_timer_init(struct device_node *node) - ret = setup_irq(irq, &timer->act); - if (ret) { - pr_err("Can't set up timer IRQ\n"); -- return ret; -+ goto err_iounmap; - } - - clockevents_config_and_register(&timer->evt, freq, 0xf, 0xffffffff); -@@ -141,6 +143,10 @@ static int __init bcm2835_timer_init(struct device_node *node) - pr_info("bcm2835: system timer (irq = %d)\n", irq); - - return 0; -+ -+err_iounmap: -+ iounmap(base); -+ return ret; - } - CLOCKSOURCE_OF_DECLARE(bcm2835, "brcm,bcm2835-system-timer", - bcm2835_timer_init); -From 155e8b3b0ee320ae866b97dd31eba8a1f080a772 Mon Sep 17 00:00:00 2001 -From: Boris Brezillon -Date: Thu, 1 Dec 2016 22:00:19 +0100 -Subject: [PATCH 11733/13183] clk: bcm: Support rate change propagation on - bcm2835 clocks - -Some peripheral clocks, like the VEC (Video EnCoder) clock need to be set -to a precise rate (in our case 108MHz). With the current implementation, -where peripheral clocks are not allowed to forward rate change requests -to their parents, it is impossible to match this requirement unless the -bootloader has configured things correctly, or a specific rate has been -assigned through the DT (with the assigned-clk-rates property). - -Add a new field to struct bcm2835_clock_data to specify which parent -clocks accept rate change propagation, and support set rate propagation -in bcm2835_clock_determine_rate(). - -Signed-off-by: Boris Brezillon -Reviewed-by: Eric Anholt -Signed-off-by: Stephen Boyd ---- - drivers/clk/bcm/clk-bcm2835.c | 67 ++++++++++++++++++++++++++++++++++++++++--- - 1 file changed, 63 insertions(+), 4 deletions(-) - -diff --git a/drivers/clk/bcm/clk-bcm2835.c b/drivers/clk/bcm/clk-bcm2835.c -index 2acaa77..df96fe6 100644 ---- a/drivers/clk/bcm/clk-bcm2835.c -+++ b/drivers/clk/bcm/clk-bcm2835.c -@@ -436,6 +436,9 @@ struct bcm2835_clock_data { - const char *const *parents; - int num_mux_parents; - -+ /* Bitmap encoding which parents accept rate change propagation. */ -+ unsigned int set_rate_parent; -+ - u32 ctl_reg; - u32 div_reg; - -@@ -1017,10 +1020,60 @@ bcm2835_clk_is_pllc(struct clk_hw *hw) - return strncmp(clk_hw_get_name(hw), "pllc", 4) == 0; - } - -+static unsigned long bcm2835_clock_choose_div_and_prate(struct clk_hw *hw, -+ int parent_idx, -+ unsigned long rate, -+ u32 *div, -+ unsigned long *prate) -+{ -+ struct bcm2835_clock *clock = bcm2835_clock_from_hw(hw); -+ struct bcm2835_cprman *cprman = clock->cprman; -+ const struct bcm2835_clock_data *data = clock->data; -+ unsigned long best_rate; -+ u32 curdiv, mindiv, maxdiv; -+ struct clk_hw *parent; -+ -+ parent = clk_hw_get_parent_by_index(hw, parent_idx); -+ -+ if (!(BIT(parent_idx) & data->set_rate_parent)) { -+ *prate = clk_hw_get_rate(parent); -+ *div = bcm2835_clock_choose_div(hw, rate, *prate, true); -+ -+ return bcm2835_clock_rate_from_divisor(clock, *prate, -+ *div); -+ } -+ -+ if (data->frac_bits) -+ dev_warn(cprman->dev, -+ "frac bits are not used when propagating rate change"); -+ -+ /* clamp to min divider of 2 if we're dealing with a mash clock */ -+ mindiv = data->is_mash_clock ? 2 : 1; -+ maxdiv = BIT(data->int_bits) - 1; -+ -+ /* TODO: Be smart, and only test a subset of the available divisors. */ -+ for (curdiv = mindiv; curdiv <= maxdiv; curdiv++) { -+ unsigned long tmp_rate; -+ -+ tmp_rate = clk_hw_round_rate(parent, rate * curdiv); -+ tmp_rate /= curdiv; -+ if (curdiv == mindiv || -+ (tmp_rate > best_rate && tmp_rate <= rate)) -+ best_rate = tmp_rate; -+ -+ if (best_rate == rate) -+ break; -+ } -+ -+ *div = curdiv << CM_DIV_FRAC_BITS; -+ *prate = curdiv * best_rate; -+ -+ return best_rate; -+} -+ - static int bcm2835_clock_determine_rate(struct clk_hw *hw, - struct clk_rate_request *req) - { -- struct bcm2835_clock *clock = bcm2835_clock_from_hw(hw); - struct clk_hw *parent, *best_parent = NULL; - bool current_parent_is_pllc; - unsigned long rate, best_rate = 0; -@@ -1048,9 +1101,8 @@ static int bcm2835_clock_determine_rate(struct clk_hw *hw, - if (bcm2835_clk_is_pllc(parent) && !current_parent_is_pllc) - continue; - -- prate = clk_hw_get_rate(parent); -- div = bcm2835_clock_choose_div(hw, req->rate, prate, true); -- rate = bcm2835_clock_rate_from_divisor(clock, prate, div); -+ rate = bcm2835_clock_choose_div_and_prate(hw, i, req->rate, -+ &div, &prate); - if (rate > best_rate && rate <= req->rate) { - best_parent = parent; - best_prate = prate; -@@ -1262,6 +1314,13 @@ static struct clk_hw *bcm2835_register_clock(struct bcm2835_cprman *cprman, - init.name = data->name; - init.flags = data->flags | CLK_IGNORE_UNUSED; - -+ /* -+ * Pass the CLK_SET_RATE_PARENT flag if we are allowed to propagate -+ * rate changes on at least of the parents. -+ */ -+ if (data->set_rate_parent) -+ init.flags |= CLK_SET_RATE_PARENT; -+ - if (data->is_vpu_clock) { - init.ops = &bcm2835_vpu_clock_clk_ops; - } else { --- -2.9.3 - -From d86d46af84855403c00018be1c3e7bc190f2a6cd Mon Sep 17 00:00:00 2001 -From: Boris Brezillon -Date: Thu, 1 Dec 2016 22:00:20 +0100 -Subject: [PATCH 11734/13183] clk: bcm: Allow rate change propagation to - PLLH_AUX on VEC clock - -The VEC clock requires needs to be set at exactly 108MHz. Allow rate -change propagation on PLLH_AUX to match this requirement wihtout -impacting other IPs (PLLH is currently only used by the HDMI encoder, -which cannot be enabled when the VEC encoder is enabled). - -Signed-off-by: Boris Brezillon -Reviewed-by: Eric Anholt -Signed-off-by: Stephen Boyd ---- - drivers/clk/bcm/clk-bcm2835.c | 7 ++++++- - 1 file changed, 6 insertions(+), 1 deletion(-) - -diff --git a/drivers/clk/bcm/clk-bcm2835.c b/drivers/clk/bcm/clk-bcm2835.c -index df96fe6..eaf82f4 100644 ---- a/drivers/clk/bcm/clk-bcm2835.c -+++ b/drivers/clk/bcm/clk-bcm2835.c -@@ -1861,7 +1861,12 @@ static const struct bcm2835_clk_desc clk_desc_array[] = { - .ctl_reg = CM_VECCTL, - .div_reg = CM_VECDIV, - .int_bits = 4, -- .frac_bits = 0), -+ .frac_bits = 0, -+ /* -+ * Allow rate change propagation only on PLLH_AUX which is -+ * assigned index 7 in the parent array. -+ */ -+ .set_rate_parent = BIT(7)), - - /* dsi clocks */ - [BCM2835_CLOCK_DSI0E] = REGISTER_PER_CLK( --- -2.9.3 - -From 2aab7a2055a1705c9e30920d95a596226999eb21 Mon Sep 17 00:00:00 2001 -From: Boris Brezillon -Date: Mon, 12 Dec 2016 09:00:53 +0100 -Subject: [PATCH 12092/13183] clk: bcm: Fix 'maybe-uninitialized' warning in - bcm2835_clock_choose_div_and_prate() - -best_rate is reported as potentially uninitialized by gcc. - -Signed-off-by: Boris Brezillon -Fixes: 155e8b3b0ee3 ("clk: bcm: Support rate change propagation on bcm2835 clocks") -Reported-by: Stephen Rothwell -Reviewed-by: Eric Anholt -Signed-off-by: Stephen Boyd ---- - drivers/clk/bcm/clk-bcm2835.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/drivers/clk/bcm/clk-bcm2835.c b/drivers/clk/bcm/clk-bcm2835.c -index eaf82f4..0d14409 100644 ---- a/drivers/clk/bcm/clk-bcm2835.c -+++ b/drivers/clk/bcm/clk-bcm2835.c -@@ -1029,7 +1029,7 @@ static unsigned long bcm2835_clock_choose_div_and_prate(struct clk_hw *hw, - struct bcm2835_clock *clock = bcm2835_clock_from_hw(hw); - struct bcm2835_cprman *cprman = clock->cprman; - const struct bcm2835_clock_data *data = clock->data; -- unsigned long best_rate; -+ unsigned long best_rate = 0; - u32 curdiv, mindiv, maxdiv; - struct clk_hw *parent; - --- -2.9.3 - diff --git a/kernel.spec b/kernel.spec index 9ad7b600d..e7aa0bbb5 100644 --- a/kernel.spec +++ b/kernel.spec @@ -42,7 +42,7 @@ Summary: The Linux kernel # For non-released -rc kernels, this will be appended after the rcX and # gitX tags, so a 3 here would become part of release "0.rcX.gitX.3" # -%global baserelease 100 +%global baserelease 101 %global fedora_build %{baserelease} # base_sublevel is the kernel version we're starting with and patching @@ -524,8 +524,6 @@ Patch430: ARM-tegra-usb-no-reset.patch Patch431: bcm2837-initial-support.patch -Patch432: bcm283x-fixes.patch - # http://www.spinics.net/lists/linux-mmc/msg41151.html Patch433: bcm283x-mmc-imp-speed.patch @@ -2171,6 +2169,9 @@ fi # # %changelog +* Tue Feb 7 2017 Peter Robinson 4.9.8-101 +- Drop "fixes" for bcm238x as they seem to break other Raspberry Pi 3 things + * Mon Feb 06 2017 Laura Abbott - 4.9.8-100 - Linux v4.9.8 From 9e68bb52f7a90c5fcdf4dcea2c96574c12ec9172 Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Tue, 7 Feb 2017 08:15:57 -0600 Subject: [PATCH 199/275] CVE-2017-5897 ip6_gre: Invalid reads in ip6gre_err (rhbz 1419848 1419851) --- ip6_gre-fix-ip6gre_err-invalid-reads.patch | 91 ++++++++++++++++++++++ kernel.spec | 6 ++ 2 files changed, 97 insertions(+) create mode 100644 ip6_gre-fix-ip6gre_err-invalid-reads.patch diff --git a/ip6_gre-fix-ip6gre_err-invalid-reads.patch b/ip6_gre-fix-ip6gre_err-invalid-reads.patch new file mode 100644 index 000000000..756663c11 --- /dev/null +++ b/ip6_gre-fix-ip6gre_err-invalid-reads.patch @@ -0,0 +1,91 @@ +From 7892032cfe67f4bde6fc2ee967e45a8fbaf33756 Mon Sep 17 00:00:00 2001 +From: Eric Dumazet +Date: Sat, 4 Feb 2017 23:18:55 -0800 +Subject: ip6_gre: fix ip6gre_err() invalid reads + +Andrey Konovalov reported out of bound accesses in ip6gre_err() + +If GRE flags contains GRE_KEY, the following expression +*(((__be32 *)p) + (grehlen / 4) - 1) + +accesses data ~40 bytes after the expected point, since +grehlen includes the size of IPv6 headers. + +Let's use a "struct gre_base_hdr *greh" pointer to make this +code more readable. + +p[1] becomes greh->protocol. +grhlen is the GRE header length. + +Fixes: c12b395a4664 ("gre: Support GRE over IPv6") +Signed-off-by: Eric Dumazet +Reported-by: Andrey Konovalov +Signed-off-by: David S. Miller +--- + net/ipv6/ip6_gre.c | 40 +++++++++++++++++++++------------------- + 1 file changed, 21 insertions(+), 19 deletions(-) + +diff --git a/net/ipv6/ip6_gre.c b/net/ipv6/ip6_gre.c +index 5586318..630b73b 100644 +--- a/net/ipv6/ip6_gre.c ++++ b/net/ipv6/ip6_gre.c +@@ -367,35 +367,37 @@ static void ip6gre_tunnel_uninit(struct net_device *dev) + + + static void ip6gre_err(struct sk_buff *skb, struct inet6_skb_parm *opt, +- u8 type, u8 code, int offset, __be32 info) ++ u8 type, u8 code, int offset, __be32 info) + { +- const struct ipv6hdr *ipv6h = (const struct ipv6hdr *)skb->data; +- __be16 *p = (__be16 *)(skb->data + offset); +- int grehlen = offset + 4; ++ const struct gre_base_hdr *greh; ++ const struct ipv6hdr *ipv6h; ++ int grehlen = sizeof(*greh); + struct ip6_tnl *t; ++ int key_off = 0; + __be16 flags; ++ __be32 key; + +- flags = p[0]; +- if (flags&(GRE_CSUM|GRE_KEY|GRE_SEQ|GRE_ROUTING|GRE_VERSION)) { +- if (flags&(GRE_VERSION|GRE_ROUTING)) +- return; +- if (flags&GRE_KEY) { +- grehlen += 4; +- if (flags&GRE_CSUM) +- grehlen += 4; +- } ++ if (!pskb_may_pull(skb, offset + grehlen)) ++ return; ++ greh = (const struct gre_base_hdr *)(skb->data + offset); ++ flags = greh->flags; ++ if (flags & (GRE_VERSION | GRE_ROUTING)) ++ return; ++ if (flags & GRE_CSUM) ++ grehlen += 4; ++ if (flags & GRE_KEY) { ++ key_off = grehlen + offset; ++ grehlen += 4; + } + +- /* If only 8 bytes returned, keyed message will be dropped here */ +- if (!pskb_may_pull(skb, grehlen)) ++ if (!pskb_may_pull(skb, offset + grehlen)) + return; + ipv6h = (const struct ipv6hdr *)skb->data; +- p = (__be16 *)(skb->data + offset); ++ greh = (const struct gre_base_hdr *)(skb->data + offset); ++ key = key_off ? *(__be32 *)(skb->data + key_off) : 0; + + t = ip6gre_tunnel_lookup(skb->dev, &ipv6h->daddr, &ipv6h->saddr, +- flags & GRE_KEY ? +- *(((__be32 *)p) + (grehlen / 4) - 1) : 0, +- p[1]); ++ key, greh->protocol); + if (!t) + return; + +-- +cgit v0.12 + diff --git a/kernel.spec b/kernel.spec index e7aa0bbb5..892054574 100644 --- a/kernel.spec +++ b/kernel.spec @@ -640,6 +640,9 @@ Patch855: kvm-fix-page-struct-leak-in-handle_vmon.patch # rhbz 1418858 Patch856: PCI-ASPM-Handle-PCI-to-PCIe-bridges-as-roots-of-PCIe-hierarchies.patch +#CVE-2017-5897 rhbz 1419848 1419851 +Patch857: ip6_gre-fix-ip6gre_err-invalid-reads.patch + # END OF PATCH DEFINITIONS %endif @@ -2169,6 +2172,9 @@ fi # # %changelog +* Tue Feb 7 2017 Justin M. Forbes +- CVE-2017-5897 ip6_gre: Invalid reads in ip6gre_err (rhbz 1419848 1419851) + * Tue Feb 7 2017 Peter Robinson 4.9.8-101 - Drop "fixes" for bcm238x as they seem to break other Raspberry Pi 3 things From 9e0078ee54c20c78e698a3357af02fffa31c044e Mon Sep 17 00:00:00 2001 From: Laura Abbott Date: Tue, 7 Feb 2017 16:17:28 -0800 Subject: [PATCH 200/275] Fix for some DMA on stack with DVB devices (rhbz 1417829) Enable CONFIG_SENSORS_JC42 (rhbz 1417454) --- ...-dma-capable-buffer-also-for-reading.patch | 63 ++++++++++++++ ...b-usb-firmware-don-t-do-DMA-on-stack.patch | 86 +++++++++++++++++++ config-generic | 2 +- kernel.spec | 8 ++ 4 files changed, 158 insertions(+), 1 deletion(-) create mode 100644 1-2-media-cxusb-Use-a-dma-capable-buffer-also-for-reading.patch create mode 100644 2-2-media-dvb-usb-firmware-don-t-do-DMA-on-stack.patch diff --git a/1-2-media-cxusb-Use-a-dma-capable-buffer-also-for-reading.patch b/1-2-media-cxusb-Use-a-dma-capable-buffer-also-for-reading.patch new file mode 100644 index 000000000..a3dec80d2 --- /dev/null +++ b/1-2-media-cxusb-Use-a-dma-capable-buffer-also-for-reading.patch @@ -0,0 +1,63 @@ +From patchwork Sun Feb 5 14:57:59 2017 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 8bit +Subject: [1/2,media] cxusb: Use a dma capable buffer also for reading +From: =?utf-8?q?Stefan_Br=C3=BCns?= +X-Patchwork-Id: 39207 +Message-Id: +To: +Cc: , Mauro Carvalho Chehab , + Michael Krufky , + =?UTF-8?q?Stefan=20Br=C3=BCns?= +Date: Sun, 5 Feb 2017 15:57:59 +0100 + +Commit 17ce039b4e54 ("[media] cxusb: don't do DMA on stack") +added a kmalloc'ed bounce buffer for writes, but missed to do the same +for reads. As the read only happens after the write is finished, we can +reuse the same buffer. + +As dvb_usb_generic_rw handles a read length of 0 by itself, avoid calling +it using the dvb_usb_generic_read wrapper function. + +Signed-off-by: Stefan Brüns +--- + drivers/media/usb/dvb-usb/cxusb.c | 15 ++++++++------- + 1 file changed, 8 insertions(+), 7 deletions(-) + +diff --git a/drivers/media/usb/dvb-usb/cxusb.c b/drivers/media/usb/dvb-usb/cxusb.c +index 9b8c82d94b3f..8f28a63597bd 100644 +--- a/drivers/media/usb/dvb-usb/cxusb.c ++++ b/drivers/media/usb/dvb-usb/cxusb.c +@@ -59,23 +59,24 @@ static int cxusb_ctrl_msg(struct dvb_usb_device *d, + u8 cmd, u8 *wbuf, int wlen, u8 *rbuf, int rlen) + { + struct cxusb_state *st = d->priv; +- int ret, wo; ++ int ret; + + if (1 + wlen > MAX_XFER_SIZE) { + warn("i2c wr: len=%d is too big!\n", wlen); + return -EOPNOTSUPP; + } + +- wo = (rbuf == NULL || rlen == 0); /* write-only */ ++ if (rlen > MAX_XFER_SIZE) { ++ warn("i2c rd: len=%d is too big!\n", rlen); ++ return -EOPNOTSUPP; ++ } + + mutex_lock(&d->data_mutex); + st->data[0] = cmd; + memcpy(&st->data[1], wbuf, wlen); +- if (wo) +- ret = dvb_usb_generic_write(d, st->data, 1 + wlen); +- else +- ret = dvb_usb_generic_rw(d, st->data, 1 + wlen, +- rbuf, rlen, 0); ++ ret = dvb_usb_generic_rw(d, st->data, 1 + wlen, st->data, rlen, 0); ++ if (!ret && rbuf && rlen) ++ memcpy(rbuf, st->data, rlen); + + mutex_unlock(&d->data_mutex); + return ret; diff --git a/2-2-media-dvb-usb-firmware-don-t-do-DMA-on-stack.patch b/2-2-media-dvb-usb-firmware-don-t-do-DMA-on-stack.patch new file mode 100644 index 000000000..7f3c1e10a --- /dev/null +++ b/2-2-media-dvb-usb-firmware-don-t-do-DMA-on-stack.patch @@ -0,0 +1,86 @@ +From patchwork Sun Feb 5 14:58:00 2017 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 8bit +Subject: [2/2,media] dvb-usb-firmware: don't do DMA on stack +From: =?utf-8?q?Stefan_Br=C3=BCns?= +X-Patchwork-Id: 39206 +Message-Id: +To: +Cc: , Mauro Carvalho Chehab , + Michael Krufky , + =?UTF-8?q?Stefan=20Br=C3=BCns?= +Date: Sun, 5 Feb 2017 15:58:00 +0100 + +The USB control messages require DMA to work. We cannot pass +a stack-allocated buffer, as it is not warranted that the +stack would be into a DMA enabled area. + +Signed-off-by: Stefan Brüns +--- + drivers/media/usb/dvb-usb/dvb-usb-firmware.c | 30 ++++++++++++++++------------ + 1 file changed, 17 insertions(+), 13 deletions(-) + +diff --git a/drivers/media/usb/dvb-usb/dvb-usb-firmware.c b/drivers/media/usb/dvb-usb/dvb-usb-firmware.c +index dd048a7c461c..189b6725edd0 100644 +--- a/drivers/media/usb/dvb-usb/dvb-usb-firmware.c ++++ b/drivers/media/usb/dvb-usb/dvb-usb-firmware.c +@@ -35,41 +35,45 @@ static int usb_cypress_writemem(struct usb_device *udev,u16 addr,u8 *data, u8 le + + int usb_cypress_load_firmware(struct usb_device *udev, const struct firmware *fw, int type) + { +- struct hexline hx; +- u8 reset; +- int ret,pos=0; ++ u8 *buf = kmalloc(sizeof(struct hexline), GFP_KERNEL); ++ struct hexline *hx = (struct hexline *)buf; ++ int ret, pos = 0; ++ u16 cpu_cs_register = cypress[type].cpu_cs_register; + + /* stop the CPU */ +- reset = 1; +- if ((ret = usb_cypress_writemem(udev,cypress[type].cpu_cs_register,&reset,1)) != 1) ++ buf[0] = 1; ++ if (usb_cypress_writemem(udev, cpu_cs_register, buf, 1) != 1) + err("could not stop the USB controller CPU."); + +- while ((ret = dvb_usb_get_hexline(fw,&hx,&pos)) > 0) { +- deb_fw("writing to address 0x%04x (buffer: 0x%02x %02x)\n",hx.addr,hx.len,hx.chk); +- ret = usb_cypress_writemem(udev,hx.addr,hx.data,hx.len); ++ while ((ret = dvb_usb_get_hexline(fw, hx, &pos)) > 0) { ++ deb_fw("writing to address 0x%04x (buffer: 0x%02x %02x)\n", ++ hx->addr, hx->len, hx->chk); ++ ret = usb_cypress_writemem(udev, hx->addr, hx->data, hx->len); + +- if (ret != hx.len) { ++ if (ret != hx->len) { + err("error while transferring firmware " + "(transferred size: %d, block size: %d)", +- ret,hx.len); ++ ret, hx->len); + ret = -EINVAL; + break; + } + } + if (ret < 0) { +- err("firmware download failed at %d with %d",pos,ret); ++ err("firmware download failed at %d with %d", pos, ret); ++ kfree(buf); + return ret; + } + + if (ret == 0) { + /* restart the CPU */ +- reset = 0; +- if (ret || usb_cypress_writemem(udev,cypress[type].cpu_cs_register,&reset,1) != 1) { ++ buf[0] = 0; ++ if (usb_cypress_writemem(udev, cpu_cs_register, buf, 1) != 1) { + err("could not restart the USB controller CPU."); + ret = -EINVAL; + } + } else + ret = -EIO; ++ kfree(buf); + + return ret; + } diff --git a/config-generic b/config-generic index 23bfffa1f..c2859f4ef 100644 --- a/config-generic +++ b/config-generic @@ -2901,7 +2901,7 @@ CONFIG_SENSORS_ASC7621=m CONFIG_SENSORS_EMC1403=m CONFIG_SENSORS_TMP102=m CONFIG_SENSORS_LTC4261=m -# CONFIG_SENSORS_JC42 is not set +CONFIG_SENSORS_JC42=m # CONFIG_SENSORS_SMM665 is not set # CONFIG_SENSORS_EMC2103 is not set # CONFIG_SENSORS_GPIO_FAN is not set diff --git a/kernel.spec b/kernel.spec index 892054574..96fab1f10 100644 --- a/kernel.spec +++ b/kernel.spec @@ -643,6 +643,10 @@ Patch856: PCI-ASPM-Handle-PCI-to-PCIe-bridges-as-roots-of-PCIe-hierarchies.patch #CVE-2017-5897 rhbz 1419848 1419851 Patch857: ip6_gre-fix-ip6gre_err-invalid-reads.patch +#rhbz 1417829 +Patch858: 1-2-media-cxusb-Use-a-dma-capable-buffer-also-for-reading.patch +Patch859: 2-2-media-dvb-usb-firmware-don-t-do-DMA-on-stack.patch + # END OF PATCH DEFINITIONS %endif @@ -2172,6 +2176,10 @@ fi # # %changelog +* Tue Feb 7 2017 Laura Abbott +- Fix for some DMA on stack with DVB devices (rhbz 1417829) +- Enable CONFIG_SENSORS_JC42 (rhbz 1417454) + * Tue Feb 7 2017 Justin M. Forbes - CVE-2017-5897 ip6_gre: Invalid reads in ip6gre_err (rhbz 1419848 1419851) From 63440a0b28e1d96d33716be2784098dd473dfb3d Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Thu, 9 Feb 2017 09:35:36 -0600 Subject: [PATCH 201/275] sctp: avoid BUG_ON on sctp_wait_for_sndbuf (rhbz 1420276) --- ...avoid-BUG_ON-on-sctp_wait_for_sndbuf.patch | 39 +++++++++++++++++++ kernel.spec | 6 +++ 2 files changed, 45 insertions(+) create mode 100644 0001-sctp-avoid-BUG_ON-on-sctp_wait_for_sndbuf.patch diff --git a/0001-sctp-avoid-BUG_ON-on-sctp_wait_for_sndbuf.patch b/0001-sctp-avoid-BUG_ON-on-sctp_wait_for_sndbuf.patch new file mode 100644 index 000000000..134e1ea39 --- /dev/null +++ b/0001-sctp-avoid-BUG_ON-on-sctp_wait_for_sndbuf.patch @@ -0,0 +1,39 @@ +From 2dcab598484185dea7ec22219c76dcdd59e3cb90 Mon Sep 17 00:00:00 2001 +From: Marcelo Ricardo Leitner +Date: Mon, 6 Feb 2017 18:10:31 -0200 +Subject: [PATCH] sctp: avoid BUG_ON on sctp_wait_for_sndbuf + +Alexander Popov reported that an application may trigger a BUG_ON in +sctp_wait_for_sndbuf if the socket tx buffer is full, a thread is +waiting on it to queue more data and meanwhile another thread peels off +the association being used by the first thread. + +This patch replaces the BUG_ON call with a proper error handling. It +will return -EPIPE to the original sendmsg call, similarly to what would +have been done if the association wasn't found in the first place. + +Acked-by: Alexander Popov +Signed-off-by: Marcelo Ricardo Leitner +Reviewed-by: Xin Long +Signed-off-by: David S. Miller +--- + net/sctp/socket.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/net/sctp/socket.c b/net/sctp/socket.c +index 37eeab7..e214d2e 100644 +--- a/net/sctp/socket.c ++++ b/net/sctp/socket.c +@@ -7426,7 +7426,8 @@ static int sctp_wait_for_sndbuf(struct sctp_association *asoc, long *timeo_p, + */ + release_sock(sk); + current_timeo = schedule_timeout(current_timeo); +- BUG_ON(sk != asoc->base.sk); ++ if (sk != asoc->base.sk) ++ goto do_error; + lock_sock(sk); + + *timeo_p = current_timeo; +-- +2.9.3 + diff --git a/kernel.spec b/kernel.spec index 96fab1f10..7722f60ca 100644 --- a/kernel.spec +++ b/kernel.spec @@ -647,6 +647,9 @@ Patch857: ip6_gre-fix-ip6gre_err-invalid-reads.patch Patch858: 1-2-media-cxusb-Use-a-dma-capable-buffer-also-for-reading.patch Patch859: 2-2-media-dvb-usb-firmware-don-t-do-DMA-on-stack.patch +#rhbz 1420276 +Patch860: 0001-sctp-avoid-BUG_ON-on-sctp_wait_for_sndbuf.patch + # END OF PATCH DEFINITIONS %endif @@ -2176,6 +2179,9 @@ fi # # %changelog +* Thu Feb 9 2017 Justin M. Forbes +- sctp: avoid BUG_ON on sctp_wait_for_sndbuf (rhbz 1420276) + * Tue Feb 7 2017 Laura Abbott - Fix for some DMA on stack with DVB devices (rhbz 1417829) - Enable CONFIG_SENSORS_JC42 (rhbz 1417454) From 1bc62ddc806f05d6ce37097ab27629489e5308a6 Mon Sep 17 00:00:00 2001 From: Laura Abbott Date: Thu, 9 Feb 2017 07:40:12 -0800 Subject: [PATCH 202/275] Linux v4.9.9 Fix DMA on stack from 1-wire driver (rhbz 1415397) --- ...ap-first-physical-page-into-EFI-page.patch | 64 ---- ...bridges-as-roots-of-PCIe-hierarchies.patch | 90 ----- kernel.spec | 17 +- sources | 2 +- ...-transfer-buffers-need-to-be-DMAable.patch | 360 ++++++++++++++++++ 5 files changed, 370 insertions(+), 163 deletions(-) delete mode 100644 0001-x86-efi-always-map-first-physical-page-into-EFI-page.patch delete mode 100644 PCI-ASPM-Handle-PCI-to-PCIe-bridges-as-roots-of-PCIe-hierarchies.patch create mode 100644 w1-ds2490-USB-transfer-buffers-need-to-be-DMAable.patch diff --git a/0001-x86-efi-always-map-first-physical-page-into-EFI-page.patch b/0001-x86-efi-always-map-first-physical-page-into-EFI-page.patch deleted file mode 100644 index 55baf9b52..000000000 --- a/0001-x86-efi-always-map-first-physical-page-into-EFI-page.patch +++ /dev/null @@ -1,64 +0,0 @@ -From fb1d9d3f95654f00c4156129f3cd90d3efe32d26 Mon Sep 17 00:00:00 2001 -From: Jiri Kosina -Date: Wed, 25 Jan 2017 20:52:33 +0100 -Subject: [PATCH] x86/efi: always map first physical page into EFI pagetables - -Commit 129766708 ("x86/efi: Only map RAM into EFI page tables if in -mixed-mode") stopped creating 1:1 mapping for all RAM in case of running -in native 64bit mode. - -It turns out though that there are 64bit EFI implementations in the wild -(this particular problem has been reported on Lenovo Yoga 710-11IKB) which -still make use of first physical page for their own private use (which is -what legacy BIOS used to do, but EFI specification doesn't grant any such -right to EFI BIOS ... oh well). - -In case there is no mapping for this particular frame in EFI pagetables, -as soon as firmware tries to make use of it, triple fault occurs and the -system reboots (in case of Yoga 710-11IKB this is very early during boot). - -Fix that by always mapping the first page of physical memory into EFI -pagetables. - -Note: just reverting 129766708 is not enough on v4.9-rc1+ to fix the -regression on affected hardware, as commit ab72a27da ("x86/efi: -Consolidate region mapping logic") later made the first physical frame not -to be mapped anyway. - -Fixes: 129766708 ("x86/efi: Only map RAM into EFI page tables if in mixed-mode") -Cc: stable@kernel.org # v4.8+ -Cc: Waiman Long -Cc: Borislav Petkov -Cc: Laura Abbott -Cc: Vojtech Pavlik -Reported-by: Hanka Pavlikova -Signed-off-by: Jiri Kosina ---- - arch/x86/platform/efi/efi_64.c | 11 +++++++++++ - 1 file changed, 11 insertions(+) - -diff --git a/arch/x86/platform/efi/efi_64.c b/arch/x86/platform/efi/efi_64.c -index 319148bd4b05..02ae2abe8b8e 100644 ---- a/arch/x86/platform/efi/efi_64.c -+++ b/arch/x86/platform/efi/efi_64.c -@@ -269,6 +269,17 @@ int __init efi_setup_page_tables(unsigned long pa_memmap, unsigned num_pages) - efi_scratch.use_pgd = true; - - /* -+ * Certain firmware versions are way too sentimental and still believe -+ * they are exclusive and unquestionable owners of first physical page. -+ * Create 1:1 mapping for this page to avoid triple faults during early -+ * boot with such firmware. -+ */ -+ if (kernel_map_pages_in_pgd(pgd, 0x0, 0x0, 1, _PAGE_RW)) { -+ pr_err("Failed to create 1:1 mapping of first page\n"); -+ return 1; -+ } -+ -+ /* - * When making calls to the firmware everything needs to be 1:1 - * mapped and addressable with 32-bit pointers. Map the kernel - * text and allocate a new stack because we can't rely on the --- -2.11.0 - diff --git a/PCI-ASPM-Handle-PCI-to-PCIe-bridges-as-roots-of-PCIe-hierarchies.patch b/PCI-ASPM-Handle-PCI-to-PCIe-bridges-as-roots-of-PCIe-hierarchies.patch deleted file mode 100644 index a76639e6a..000000000 --- a/PCI-ASPM-Handle-PCI-to-PCIe-bridges-as-roots-of-PCIe-hierarchies.patch +++ /dev/null @@ -1,90 +0,0 @@ -From patchwork Mon Jan 30 15:23:24 2017 -Content-Type: text/plain; charset="utf-8" -MIME-Version: 1.0 -Content-Transfer-Encoding: 7bit -Subject: PCI/ASPM: Handle PCI-to-PCIe bridges as roots of PCIe hierarchies -From: Bjorn Helgaas -X-Patchwork-Id: 9545603 -Message-Id: <20170130152324.32437.37400.stgit@bhelgaas-glaptop.roam.corp.google.com> -To: linux-pci@vger.kernel.org -Cc: Jao Ching Chen , lists@ssl-mail.com, - linux-kernel@vger.kernel.org, Blake Moore , - Takashi Iwai -Date: Mon, 30 Jan 2017 09:23:24 -0600 - -In a struct pcie_link_state, link->root points to the pcie_link_state of -the root of the PCIe hierarchy. For the topmost link, this points to -itself (link->root = link). For others, we copy the pointer from the -parent (link->root = link->parent->root). - -Previously we recognized that Root Ports originated PCIe hierarchies, but -we treated PCI/PCI-X to PCIe Bridges as being in the middle of the -hierarchy, and when we tried to copy the pointer from link->parent->root, -there was no parent, and we dereferenced a NULL pointer: - - BUG: unable to handle kernel NULL pointer dereference at 0000000000000090 - IP: [] pcie_aspm_init_link_state+0x170/0x820 - -Recognize that PCI/PCI-X to PCIe Bridges originate PCIe hierarchies just -like Root Ports do, so link->root for these devices should also point to -itself. - -Fixes: 51ebfc92b72b ("PCI: Enumerate switches below PCI-to-PCIe bridges") -Link: https://bugzilla.kernel.org/show_bug.cgi?id=193411 -Link: https://bugzilla.opensuse.org/show_bug.cgi?id=1022181 -Tested-by: lists@ssl-mail.com -Signed-off-by: Bjorn Helgaas -CC: stable@vger.kernel.org # v4.2+ ---- - drivers/pci/pcie/aspm.c | 19 +++++++++++++------ - 1 file changed, 13 insertions(+), 6 deletions(-) - - --- -To unsubscribe from this list: send the line "unsubscribe linux-pci" in -the body of a message to majordomo@vger.kernel.org -More majordomo info at http://vger.kernel.org/majordomo-info.html - -diff --git a/drivers/pci/pcie/aspm.c b/drivers/pci/pcie/aspm.c -index 17ac1dce3286..3dd8bcbb3011 100644 ---- a/drivers/pci/pcie/aspm.c -+++ b/drivers/pci/pcie/aspm.c -@@ -532,25 +532,32 @@ static struct pcie_link_state *alloc_pcie_link_state(struct pci_dev *pdev) - link = kzalloc(sizeof(*link), GFP_KERNEL); - if (!link) - return NULL; -+ - INIT_LIST_HEAD(&link->sibling); - INIT_LIST_HEAD(&link->children); - INIT_LIST_HEAD(&link->link); - link->pdev = pdev; -- if (pci_pcie_type(pdev) != PCI_EXP_TYPE_ROOT_PORT) { -+ -+ /* -+ * Root Ports and PCI/PCI-X to PCIe Bridges are roots of PCIe -+ * hierarchies. -+ */ -+ if (pci_pcie_type(pdev) == PCI_EXP_TYPE_ROOT_PORT || -+ pci_pcie_type(pdev) == PCI_EXP_TYPE_PCIE_BRIDGE) { -+ link->root = link; -+ } else { - struct pcie_link_state *parent; -+ - parent = pdev->bus->parent->self->link_state; - if (!parent) { - kfree(link); - return NULL; - } -+ - link->parent = parent; -+ link->root = link->parent->root; - list_add(&link->link, &parent->children); - } -- /* Setup a pointer to the root port link */ -- if (!link->parent) -- link->root = link; -- else -- link->root = link->parent->root; - - list_add(&link->sibling, &link_list); - pdev->link_state = link; diff --git a/kernel.spec b/kernel.spec index 7722f60ca..74dccdf90 100644 --- a/kernel.spec +++ b/kernel.spec @@ -42,7 +42,7 @@ Summary: The Linux kernel # For non-released -rc kernels, this will be appended after the rcX and # gitX tags, so a 3 here would become part of release "0.rcX.gitX.3" # -%global baserelease 101 +%global baserelease 100 %global fedora_build %{baserelease} # base_sublevel is the kernel version we're starting with and patching @@ -54,7 +54,7 @@ Summary: The Linux kernel %if 0%{?released_kernel} # Do we have a -stable update to apply? -%define stable_update 8 +%define stable_update 9 # Set rpm version accordingly %if 0%{?stable_update} %define stablerev %{stable_update} @@ -631,15 +631,9 @@ Patch851: selinux-namespace-fix.patch #rhbz 1390308 Patch852: nouveau-add-maxwell-to-backlight-init.patch -#The saddest EFI firmware bug -Patch854: 0001-x86-efi-always-map-first-physical-page-into-EFI-page.patch - #CVE-2017-2596 rhbz 1417812 1417813 Patch855: kvm-fix-page-struct-leak-in-handle_vmon.patch -# rhbz 1418858 -Patch856: PCI-ASPM-Handle-PCI-to-PCIe-bridges-as-roots-of-PCIe-hierarchies.patch - #CVE-2017-5897 rhbz 1419848 1419851 Patch857: ip6_gre-fix-ip6gre_err-invalid-reads.patch @@ -650,6 +644,9 @@ Patch859: 2-2-media-dvb-usb-firmware-don-t-do-DMA-on-stack.patch #rhbz 1420276 Patch860: 0001-sctp-avoid-BUG_ON-on-sctp_wait_for_sndbuf.patch +#rhbz 1415397 +Patch861: w1-ds2490-USB-transfer-buffers-need-to-be-DMAable.patch + # END OF PATCH DEFINITIONS %endif @@ -2179,6 +2176,10 @@ fi # # %changelog +* Thu Feb 09 2017 Laura Abbott - 4.9.9-100 +- Linux v4.9.9 +- Fix DMA on stack from 1-wire driver (rhbz 1415397) + * Thu Feb 9 2017 Justin M. Forbes - sctp: avoid BUG_ON on sctp_wait_for_sndbuf (rhbz 1420276) diff --git a/sources b/sources index 725490d51..77bfe1147 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ SHA512 (linux-4.9.tar.xz) = bf67ff812cc3cb7e5059e82cc5db0d9a7c5637f7ed9a42e4730c715bf7047c81ed3a571225f92a33ef0b6d65f35595bc32d773356646df2627da55e9bc7f1f1a SHA512 (perf-man-4.9.tar.gz) = d23bb3da1eadd6623fddbf4696948de7675f3dcf57c711a7427dd7ae111394f58d8f42752938bbea7cd219f1e7f6f116fc67a1c74f769711063940a065f37b99 -SHA512 (patch-4.9.8.xz) = 98400f66cdb4536dfefc8e88a60d9c84dd60e999e1f8547dd25c1e1476099fa76c4f6a0b6b45f91ddc6003ec6233a3e1b6e44b8172c8e89b3e9aca7ffde7b15e +SHA512 (patch-4.9.9.xz) = a7a2d44b83b00b20f1424d12af0f42e1c576d3053feacd13491ef185661fb1c789b9265c500b62f5ede39f57b72f358820000fa6c852a5f035e566ee1dfcd5d9 diff --git a/w1-ds2490-USB-transfer-buffers-need-to-be-DMAable.patch b/w1-ds2490-USB-transfer-buffers-need-to-be-DMAable.patch new file mode 100644 index 000000000..7e902b100 --- /dev/null +++ b/w1-ds2490-USB-transfer-buffers-need-to-be-DMAable.patch @@ -0,0 +1,360 @@ +From patchwork Wed Jan 18 20:31:11 2017 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +Subject: w1: ds2490: USB transfer buffers need to be DMAable +From: "Maciej S. Szmigiero" +X-Patchwork-Id: 9524693 +Message-Id: <5ba98814-d0b0-fbd4-d631-eda3472f4017@maciej.szmigiero.name> +To: Evgeniy Polyakov +Cc: linux-kernel +Date: Wed, 18 Jan 2017 21:31:11 +0100 + +ds2490 driver was doing USB transfers from / to buffers on a stack. +This is not permitted and made the driver non-working with vmapped stacks. + +Since all these transfers are done under the same bus_mutex lock we can +simply use shared buffers in a device private structure for two most common +of them. + +While we are at it, let's also fix a comparison between int and size_t in +ds9490r_search() which made the driver spin in this function if state +register get requests were failing. + +Signed-off-by: Maciej S. Szmigiero +Cc: stable@vger.kernel.org +--- + drivers/w1/masters/ds2490.c | 142 ++++++++++++++++++++++++++------------------ + 1 file changed, 84 insertions(+), 58 deletions(-) + +diff --git a/drivers/w1/masters/ds2490.c b/drivers/w1/masters/ds2490.c +index 049a884a756f..59d74d1b47a8 100644 +--- a/drivers/w1/masters/ds2490.c ++++ b/drivers/w1/masters/ds2490.c +@@ -153,6 +153,9 @@ struct ds_device + */ + u16 spu_bit; + ++ u8 st_buf[ST_SIZE]; ++ u8 byte_buf; ++ + struct w1_bus_master master; + }; + +@@ -174,7 +177,6 @@ struct ds_status + u8 data_in_buffer_status; + u8 reserved1; + u8 reserved2; +- + }; + + static struct usb_device_id ds_id_table [] = { +@@ -244,28 +246,6 @@ static int ds_send_control(struct ds_device *dev, u16 value, u16 index) + return err; + } + +-static int ds_recv_status_nodump(struct ds_device *dev, struct ds_status *st, +- unsigned char *buf, int size) +-{ +- int count, err; +- +- memset(st, 0, sizeof(*st)); +- +- count = 0; +- err = usb_interrupt_msg(dev->udev, usb_rcvintpipe(dev->udev, +- dev->ep[EP_STATUS]), buf, size, &count, 1000); +- if (err < 0) { +- pr_err("Failed to read 1-wire data from 0x%x: err=%d.\n", +- dev->ep[EP_STATUS], err); +- return err; +- } +- +- if (count >= sizeof(*st)) +- memcpy(st, buf, sizeof(*st)); +- +- return count; +-} +- + static inline void ds_print_msg(unsigned char *buf, unsigned char *str, int off) + { + pr_info("%45s: %8x\n", str, buf[off]); +@@ -324,6 +304,35 @@ static void ds_dump_status(struct ds_device *dev, unsigned char *buf, int count) + } + } + ++static int ds_recv_status(struct ds_device *dev, struct ds_status *st, ++ bool dump) ++{ ++ int count, err; ++ ++ if (st) ++ memset(st, 0, sizeof(*st)); ++ ++ count = 0; ++ err = usb_interrupt_msg(dev->udev, ++ usb_rcvintpipe(dev->udev, ++ dev->ep[EP_STATUS]), ++ dev->st_buf, sizeof(dev->st_buf), ++ &count, 1000); ++ if (err < 0) { ++ pr_err("Failed to read 1-wire data from 0x%x: err=%d.\n", ++ dev->ep[EP_STATUS], err); ++ return err; ++ } ++ ++ if (dump) ++ ds_dump_status(dev, dev->st_buf, count); ++ ++ if (st && count >= sizeof(*st)) ++ memcpy(st, dev->st_buf, sizeof(*st)); ++ ++ return count; ++} ++ + static void ds_reset_device(struct ds_device *dev) + { + ds_send_control_cmd(dev, CTL_RESET_DEVICE, 0); +@@ -344,7 +353,6 @@ static void ds_reset_device(struct ds_device *dev) + static int ds_recv_data(struct ds_device *dev, unsigned char *buf, int size) + { + int count, err; +- struct ds_status st; + + /* Careful on size. If size is less than what is available in + * the input buffer, the device fails the bulk transfer and +@@ -359,14 +367,9 @@ static int ds_recv_data(struct ds_device *dev, unsigned char *buf, int size) + err = usb_bulk_msg(dev->udev, usb_rcvbulkpipe(dev->udev, dev->ep[EP_DATA_IN]), + buf, size, &count, 1000); + if (err < 0) { +- u8 buf[ST_SIZE]; +- int count; +- + pr_info("Clearing ep0x%x.\n", dev->ep[EP_DATA_IN]); + usb_clear_halt(dev->udev, usb_rcvbulkpipe(dev->udev, dev->ep[EP_DATA_IN])); +- +- count = ds_recv_status_nodump(dev, &st, buf, sizeof(buf)); +- ds_dump_status(dev, buf, count); ++ ds_recv_status(dev, NULL, true); + return err; + } + +@@ -404,7 +407,6 @@ int ds_stop_pulse(struct ds_device *dev, int limit) + { + struct ds_status st; + int count = 0, err = 0; +- u8 buf[ST_SIZE]; + + do { + err = ds_send_control(dev, CTL_HALT_EXE_IDLE, 0); +@@ -413,7 +415,7 @@ int ds_stop_pulse(struct ds_device *dev, int limit) + err = ds_send_control(dev, CTL_RESUME_EXE, 0); + if (err) + break; +- err = ds_recv_status_nodump(dev, &st, buf, sizeof(buf)); ++ err = ds_recv_status(dev, &st, false); + if (err) + break; + +@@ -456,18 +458,17 @@ int ds_detect(struct ds_device *dev, struct ds_status *st) + + static int ds_wait_status(struct ds_device *dev, struct ds_status *st) + { +- u8 buf[ST_SIZE]; + int err, count = 0; + + do { + st->status = 0; +- err = ds_recv_status_nodump(dev, st, buf, sizeof(buf)); ++ err = ds_recv_status(dev, st, false); + #if 0 + if (err >= 0) { + int i; + printk("0x%x: count=%d, status: ", dev->ep[EP_STATUS], err); + for (i=0; ist_buf[i]); + printk("\n"); + } + #endif +@@ -485,7 +486,7 @@ static int ds_wait_status(struct ds_device *dev, struct ds_status *st) + * can do something with it). + */ + if (err > 16 || count >= 100 || err < 0) +- ds_dump_status(dev, buf, err); ++ ds_dump_status(dev, dev->st_buf, err); + + /* Extended data isn't an error. Well, a short is, but the dump + * would have already told the user that and we can't do anything +@@ -608,7 +609,6 @@ static int ds_write_byte(struct ds_device *dev, u8 byte) + { + int err; + struct ds_status st; +- u8 rbyte; + + err = ds_send_control(dev, COMM_BYTE_IO | COMM_IM | dev->spu_bit, byte); + if (err) +@@ -621,11 +621,11 @@ static int ds_write_byte(struct ds_device *dev, u8 byte) + if (err) + return err; + +- err = ds_recv_data(dev, &rbyte, sizeof(rbyte)); ++ err = ds_recv_data(dev, &dev->byte_buf, 1); + if (err < 0) + return err; + +- return !(byte == rbyte); ++ return !(byte == dev->byte_buf); + } + + static int ds_read_byte(struct ds_device *dev, u8 *byte) +@@ -712,7 +712,6 @@ static void ds9490r_search(void *data, struct w1_master *master, + int err; + u16 value, index; + struct ds_status st; +- u8 st_buf[ST_SIZE]; + int search_limit; + int found = 0; + int i; +@@ -724,7 +723,12 @@ static void ds9490r_search(void *data, struct w1_master *master, + /* FIFO 128 bytes, bulk packet size 64, read a multiple of the + * packet size. + */ +- u64 buf[2*64/8]; ++ const size_t bufsize = 2 * 64; ++ u64 *buf; ++ ++ buf = kmalloc(bufsize, GFP_KERNEL); ++ if (!buf) ++ return; + + mutex_lock(&master->bus_mutex); + +@@ -745,10 +749,9 @@ static void ds9490r_search(void *data, struct w1_master *master, + do { + schedule_timeout(jtime); + +- if (ds_recv_status_nodump(dev, &st, st_buf, sizeof(st_buf)) < +- sizeof(st)) { ++ err = ds_recv_status(dev, &st, false); ++ if (err < 0 || err < sizeof(st)) + break; +- } + + if (st.data_in_buffer_status) { + /* Bulk in can receive partial ids, but when it does +@@ -758,7 +761,7 @@ static void ds9490r_search(void *data, struct w1_master *master, + * bulk without first checking if status says there + * is data to read. + */ +- err = ds_recv_data(dev, (u8 *)buf, sizeof(buf)); ++ err = ds_recv_data(dev, (u8 *)buf, bufsize); + if (err < 0) + break; + for (i = 0; i < err/8; ++i) { +@@ -794,9 +797,14 @@ static void ds9490r_search(void *data, struct w1_master *master, + } + search_out: + mutex_unlock(&master->bus_mutex); ++ kfree(buf); + } + + #if 0 ++/* ++ * FIXME: if this disabled code is ever used in the future all ds_send_data() ++ * calls must be changed to use a DMAable buffer. ++ */ + static int ds_match_access(struct ds_device *dev, u64 init) + { + int err; +@@ -845,13 +853,12 @@ static int ds_set_path(struct ds_device *dev, u64 init) + + static u8 ds9490r_touch_bit(void *data, u8 bit) + { +- u8 ret; + struct ds_device *dev = data; + +- if (ds_touch_bit(dev, bit, &ret)) ++ if (ds_touch_bit(dev, bit, &dev->byte_buf)) + return 0; + +- return ret; ++ return dev->byte_buf; + } + + #if 0 +@@ -866,13 +873,12 @@ static u8 ds9490r_read_bit(void *data) + { + struct ds_device *dev = data; + int err; +- u8 bit = 0; + +- err = ds_touch_bit(dev, 1, &bit); ++ err = ds_touch_bit(dev, 1, &dev->byte_buf); + if (err) + return 0; + +- return bit & 1; ++ return dev->byte_buf & 1; + } + #endif + +@@ -887,32 +893,52 @@ static u8 ds9490r_read_byte(void *data) + { + struct ds_device *dev = data; + int err; +- u8 byte = 0; + +- err = ds_read_byte(dev, &byte); ++ err = ds_read_byte(dev, &dev->byte_buf); + if (err) + return 0; + +- return byte; ++ return dev->byte_buf; + } + + static void ds9490r_write_block(void *data, const u8 *buf, int len) + { + struct ds_device *dev = data; ++ u8 *tbuf; ++ ++ if (len <= 0) ++ return; ++ ++ tbuf = kmalloc(len, GFP_KERNEL); ++ if (!tbuf) ++ return; + +- ds_write_block(dev, (u8 *)buf, len); ++ memcpy(tbuf, buf, len); ++ ds_write_block(dev, tbuf, len); ++ ++ kfree(tbuf); + } + + static u8 ds9490r_read_block(void *data, u8 *buf, int len) + { + struct ds_device *dev = data; + int err; ++ u8 *tbuf; + +- err = ds_read_block(dev, buf, len); +- if (err < 0) ++ if (len <= 0) ++ return 0; ++ ++ tbuf = kmalloc(len, GFP_KERNEL); ++ if (!tbuf) + return 0; + +- return len; ++ err = ds_read_block(dev, tbuf, len); ++ if (err >= 0) ++ memcpy(buf, tbuf, len); ++ ++ kfree(tbuf); ++ ++ return err >= 0 ? len : 0; + } + + static u8 ds9490r_reset(void *data) From 75d1ad4d4b73e05817151d98499af7e6e9f39183 Mon Sep 17 00:00:00 2001 From: Peter Robinson Date: Fri, 10 Feb 2017 13:26:34 +0000 Subject: [PATCH 203/275] Fix OOPSes in vc4 (Raspberry Pi) --- ...to-cache-a-partially-constructed-BO..patch | 42 +++++++++++++++++++ kernel.spec | 5 +++ 2 files changed, 47 insertions(+) create mode 100644 drm-vc4-Fix-OOPSes-from-trying-to-cache-a-partially-constructed-BO..patch diff --git a/drm-vc4-Fix-OOPSes-from-trying-to-cache-a-partially-constructed-BO..patch b/drm-vc4-Fix-OOPSes-from-trying-to-cache-a-partially-constructed-BO..patch new file mode 100644 index 000000000..70a528253 --- /dev/null +++ b/drm-vc4-Fix-OOPSes-from-trying-to-cache-a-partially-constructed-BO..patch @@ -0,0 +1,42 @@ +From patchwork Thu Feb 9 18:16:00 2017 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +Subject: drm/vc4: Fix OOPSes from trying to cache a partially constructed BO. +From: Eric Anholt +X-Patchwork-Id: 138087 +Message-Id: <20170209181600.24048-1-eric@anholt.net> +To: dri-devel@lists.freedesktop.org +Cc: linux-kernel@vger.kernel.org, pbrobinson@gmail.com +Date: Thu, 9 Feb 2017 10:16:00 -0800 + +If a CMA allocation failed, the partially constructed BO would be +unreferenced through the normal path, and we might choose to put it in +the BO cache. If we then reused it before it expired from the cache, +the kernel would OOPS. + +Signed-off-by: Eric Anholt +Fixes: c826a6e10644 ("drm/vc4: Add a BO cache.") +--- + drivers/gpu/drm/vc4/vc4_bo.c | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/drivers/gpu/drm/vc4/vc4_bo.c b/drivers/gpu/drm/vc4/vc4_bo.c +index 5ec14f25625d..fd83a2807656 100644 +--- a/drivers/gpu/drm/vc4/vc4_bo.c ++++ b/drivers/gpu/drm/vc4/vc4_bo.c +@@ -314,6 +314,14 @@ void vc4_free_object(struct drm_gem_object *gem_bo) + goto out; + } + ++ /* If this object was partially constructed but CMA allocation ++ * had failed, just free it. ++ */ ++ if (!bo->base.vaddr) { ++ vc4_bo_destroy(bo); ++ goto out; ++ } ++ + cache_list = vc4_get_cache_list_for_size(dev, gem_bo->size); + if (!cache_list) { + vc4_bo_destroy(bo); diff --git a/kernel.spec b/kernel.spec index 74dccdf90..dee7635a4 100644 --- a/kernel.spec +++ b/kernel.spec @@ -524,6 +524,8 @@ Patch430: ARM-tegra-usb-no-reset.patch Patch431: bcm2837-initial-support.patch +Patch432: drm-vc4-Fix-OOPSes-from-trying-to-cache-a-partially-constructed-BO..patch + # http://www.spinics.net/lists/linux-mmc/msg41151.html Patch433: bcm283x-mmc-imp-speed.patch @@ -2176,6 +2178,9 @@ fi # # %changelog +* Thu Feb 9 2017 Peter Robinson +- Fix OOPSes in vc4 (Raspberry Pi) + * Thu Feb 09 2017 Laura Abbott - 4.9.9-100 - Linux v4.9.9 - Fix DMA on stack from 1-wire driver (rhbz 1415397) From 587708b82a8b7dda59c0b86ae91f6618769fe4c0 Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Mon, 13 Feb 2017 08:58:32 -0600 Subject: [PATCH 204/275] CVE-2017-5970 keep skb->dst around in presence of IP options (rhbz 1421638) --- ...dst-around-in-presence-of-IP-options.patch | 47 +++++++++++++++++++ kernel.spec | 6 +++ 2 files changed, 53 insertions(+) create mode 100644 ipv4-keep-skb-dst-around-in-presence-of-IP-options.patch diff --git a/ipv4-keep-skb-dst-around-in-presence-of-IP-options.patch b/ipv4-keep-skb-dst-around-in-presence-of-IP-options.patch new file mode 100644 index 000000000..821e3fce8 --- /dev/null +++ b/ipv4-keep-skb-dst-around-in-presence-of-IP-options.patch @@ -0,0 +1,47 @@ +From 34b2cef20f19c87999fff3da4071e66937db9644 Mon Sep 17 00:00:00 2001 +From: Eric Dumazet +Date: Sat, 4 Feb 2017 11:16:52 -0800 +Subject: [PATCH] ipv4: keep skb->dst around in presence of IP options + +Andrey Konovalov got crashes in __ip_options_echo() when a NULL skb->dst +is accessed. + +ipv4_pktinfo_prepare() should not drop the dst if (evil) IP options +are present. + +We could refine the test to the presence of ts_needtime or srr, +but IP options are not often used, so let's be conservative. + +Thanks to syzkaller team for finding this bug. + +Fixes: d826eb14ecef ("ipv4: PKTINFO doesnt need dst reference") +Signed-off-by: Eric Dumazet +Reported-by: Andrey Konovalov +Signed-off-by: David S. Miller +--- + net/ipv4/ip_sockglue.c | 9 ++++++++- + 1 file changed, 8 insertions(+), 1 deletion(-) + +diff --git a/net/ipv4/ip_sockglue.c b/net/ipv4/ip_sockglue.c +index 53ae0c6..9000117 100644 +--- a/net/ipv4/ip_sockglue.c ++++ b/net/ipv4/ip_sockglue.c +@@ -1238,7 +1238,14 @@ void ipv4_pktinfo_prepare(const struct sock *sk, struct sk_buff *skb) + pktinfo->ipi_ifindex = 0; + pktinfo->ipi_spec_dst.s_addr = 0; + } +- skb_dst_drop(skb); ++ /* We need to keep the dst for __ip_options_echo() ++ * We could restrict the test to opt.ts_needtime || opt.srr, ++ * but the following is good enough as IP options are not often used. ++ */ ++ if (unlikely(IPCB(skb)->opt.optlen)) ++ skb_dst_force(skb); ++ else ++ skb_dst_drop(skb); + } + + int ip_setsockopt(struct sock *sk, int level, +-- +2.9.3 + diff --git a/kernel.spec b/kernel.spec index dee7635a4..966d0ecc9 100644 --- a/kernel.spec +++ b/kernel.spec @@ -649,6 +649,9 @@ Patch860: 0001-sctp-avoid-BUG_ON-on-sctp_wait_for_sndbuf.patch #rhbz 1415397 Patch861: w1-ds2490-USB-transfer-buffers-need-to-be-DMAable.patch +#CVE-2017-5970 rhbz 1421638 +Patch862: ipv4-keep-skb-dst-around-in-presence-of-IP-options.patch + # END OF PATCH DEFINITIONS %endif @@ -2178,6 +2181,9 @@ fi # # %changelog +* Mon Feb 13 2017 Justin M. Forbes +- CVE-2017-5970 keep skb->dst around in presence of IP options (rhbz 1421638) + * Thu Feb 9 2017 Peter Robinson - Fix OOPSes in vc4 (Raspberry Pi) From aeecde9304551350563434a23dec63ce3e500105 Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Tue, 14 Feb 2017 09:54:09 -0600 Subject: [PATCH 205/275] CVE-2017-5967 Disable CONFIG_TIMER_STATS (rhbz 1422138 1422140) --- config-generic | 2 +- kernel.spec | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/config-generic b/config-generic index c2859f4ef..1ed50d4d0 100644 --- a/config-generic +++ b/config-generic @@ -5537,7 +5537,7 @@ CONFIG_NO_HZ=y # CONFIG_SCHED_STACK_END_CHECK is not set # CONFIG_DEBUG_TIMEKEEPING is not set -CONFIG_TIMER_STATS=y +# CONFIG_TIMER_STATS is not set CONFIG_HIGH_RES_TIMERS=y CONFIG_PERF_EVENTS=y diff --git a/kernel.spec b/kernel.spec index 966d0ecc9..dce6b945c 100644 --- a/kernel.spec +++ b/kernel.spec @@ -2181,6 +2181,9 @@ fi # # %changelog +* Tue Feb 14 2017 Justin M. Forbes +- CVE-2017-5967 Disable CONFIG_TIMER_STATS (rhbz 1422138 1422140) + * Mon Feb 13 2017 Justin M. Forbes - CVE-2017-5970 keep skb->dst around in presence of IP options (rhbz 1421638) From fc2bc443fd5b14825141a3cb05bbb0e0d9866d32 Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Wed, 15 Feb 2017 12:05:43 -0600 Subject: [PATCH 206/275] Linux v4.9.10 --- kernel.spec | 5 ++++- sources | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/kernel.spec b/kernel.spec index dce6b945c..efecf43e2 100644 --- a/kernel.spec +++ b/kernel.spec @@ -54,7 +54,7 @@ Summary: The Linux kernel %if 0%{?released_kernel} # Do we have a -stable update to apply? -%define stable_update 9 +%define stable_update 10 # Set rpm version accordingly %if 0%{?stable_update} %define stablerev %{stable_update} @@ -2181,6 +2181,9 @@ fi # # %changelog +* Wed Feb 15 2017 Justin M. Forbes - 4.9.10-100 +- Linux v4.9.10 + * Tue Feb 14 2017 Justin M. Forbes - CVE-2017-5967 Disable CONFIG_TIMER_STATS (rhbz 1422138 1422140) diff --git a/sources b/sources index 77bfe1147..687327e58 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ SHA512 (linux-4.9.tar.xz) = bf67ff812cc3cb7e5059e82cc5db0d9a7c5637f7ed9a42e4730c715bf7047c81ed3a571225f92a33ef0b6d65f35595bc32d773356646df2627da55e9bc7f1f1a SHA512 (perf-man-4.9.tar.gz) = d23bb3da1eadd6623fddbf4696948de7675f3dcf57c711a7427dd7ae111394f58d8f42752938bbea7cd219f1e7f6f116fc67a1c74f769711063940a065f37b99 -SHA512 (patch-4.9.9.xz) = a7a2d44b83b00b20f1424d12af0f42e1c576d3053feacd13491ef185661fb1c789b9265c500b62f5ede39f57b72f358820000fa6c852a5f035e566ee1dfcd5d9 +SHA512 (patch-4.9.10.xz) = 93958f4b932a46bbd9a122f52bf09b8c4b864b419a0774514baeb7dc83f11f55a5ba84f2e586a904dbfeeb7d976352e40670fbe2e32e25c35085ddf87e41b58d From 716fb36dd76eef374399145580416fb5d995c138 Mon Sep 17 00:00:00 2001 From: Peter Robinson Date: Wed, 15 Feb 2017 23:13:15 +0000 Subject: [PATCH 207/275] Enable PWRSEQ_SIMPLE module (fixes rhbz 1377816) and PWRSEQ_EMMC --- config-generic | 6 +++--- kernel.spec | 3 +++ 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/config-generic b/config-generic index 1ed50d4d0..4da90f2b1 100644 --- a/config-generic +++ b/config-generic @@ -165,6 +165,9 @@ CONFIG_MMC_MTK=m # CONFIG_MMC_USDHI6ROL0 is not set # CONFIG_MMC_SDHCI_OF_ESDHC is not set +CONFIG_PWRSEQ_EMMC=m +CONFIG_PWRSEQ_SIMPLE=m + CONFIG_CB710_CORE=m # CONFIG_CB710_DEBUG is not set @@ -6057,9 +6060,6 @@ CONFIG_SYSTEM_BLACKLIST_KEYRING=y # CONFIG_COMMON_CLK_SI514 is not set # CONFIG_CLK_QORIQ is not set -# CONFIG_PWRSEQ_EMMC is not set -# CONFIG_PWRSEQ_SIMPLE is not set - # The kernel code has a nice comment # WARNING: Do not even assume this interface is staying stable! # CONFIG_MCE_AMD_INJ is not set diff --git a/kernel.spec b/kernel.spec index efecf43e2..81bb1596e 100644 --- a/kernel.spec +++ b/kernel.spec @@ -2181,6 +2181,9 @@ fi # # %changelog +* Wed Feb 15 2017 Peter Robinson +- Enable PWRSEQ_SIMPLE module (fixes rhbz 1377816) + * Wed Feb 15 2017 Justin M. Forbes - 4.9.10-100 - Linux v4.9.10 From 70963882b0662d901c07e82b3389df881ab7a924 Mon Sep 17 00:00:00 2001 From: Laura Abbott Date: Mon, 20 Feb 2017 09:48:03 -0800 Subject: [PATCH 208/275] Linux v4.9.11 Fix rt2800 warning (rhbz 1422969) --- ...avoid-BUG_ON-on-sctp_wait_for_sndbuf.patch | 39 -------- ip6_gre-fix-ip6gre_err-invalid-reads.patch | 91 ------------------- ...dst-around-in-presence-of-IP-options.patch | 47 ---------- kernel.spec | 16 ++-- rt2800-warning.patch | 34 +++++++ sources | 2 +- 6 files changed, 42 insertions(+), 187 deletions(-) delete mode 100644 0001-sctp-avoid-BUG_ON-on-sctp_wait_for_sndbuf.patch delete mode 100644 ip6_gre-fix-ip6gre_err-invalid-reads.patch delete mode 100644 ipv4-keep-skb-dst-around-in-presence-of-IP-options.patch create mode 100644 rt2800-warning.patch diff --git a/0001-sctp-avoid-BUG_ON-on-sctp_wait_for_sndbuf.patch b/0001-sctp-avoid-BUG_ON-on-sctp_wait_for_sndbuf.patch deleted file mode 100644 index 134e1ea39..000000000 --- a/0001-sctp-avoid-BUG_ON-on-sctp_wait_for_sndbuf.patch +++ /dev/null @@ -1,39 +0,0 @@ -From 2dcab598484185dea7ec22219c76dcdd59e3cb90 Mon Sep 17 00:00:00 2001 -From: Marcelo Ricardo Leitner -Date: Mon, 6 Feb 2017 18:10:31 -0200 -Subject: [PATCH] sctp: avoid BUG_ON on sctp_wait_for_sndbuf - -Alexander Popov reported that an application may trigger a BUG_ON in -sctp_wait_for_sndbuf if the socket tx buffer is full, a thread is -waiting on it to queue more data and meanwhile another thread peels off -the association being used by the first thread. - -This patch replaces the BUG_ON call with a proper error handling. It -will return -EPIPE to the original sendmsg call, similarly to what would -have been done if the association wasn't found in the first place. - -Acked-by: Alexander Popov -Signed-off-by: Marcelo Ricardo Leitner -Reviewed-by: Xin Long -Signed-off-by: David S. Miller ---- - net/sctp/socket.c | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/net/sctp/socket.c b/net/sctp/socket.c -index 37eeab7..e214d2e 100644 ---- a/net/sctp/socket.c -+++ b/net/sctp/socket.c -@@ -7426,7 +7426,8 @@ static int sctp_wait_for_sndbuf(struct sctp_association *asoc, long *timeo_p, - */ - release_sock(sk); - current_timeo = schedule_timeout(current_timeo); -- BUG_ON(sk != asoc->base.sk); -+ if (sk != asoc->base.sk) -+ goto do_error; - lock_sock(sk); - - *timeo_p = current_timeo; --- -2.9.3 - diff --git a/ip6_gre-fix-ip6gre_err-invalid-reads.patch b/ip6_gre-fix-ip6gre_err-invalid-reads.patch deleted file mode 100644 index 756663c11..000000000 --- a/ip6_gre-fix-ip6gre_err-invalid-reads.patch +++ /dev/null @@ -1,91 +0,0 @@ -From 7892032cfe67f4bde6fc2ee967e45a8fbaf33756 Mon Sep 17 00:00:00 2001 -From: Eric Dumazet -Date: Sat, 4 Feb 2017 23:18:55 -0800 -Subject: ip6_gre: fix ip6gre_err() invalid reads - -Andrey Konovalov reported out of bound accesses in ip6gre_err() - -If GRE flags contains GRE_KEY, the following expression -*(((__be32 *)p) + (grehlen / 4) - 1) - -accesses data ~40 bytes after the expected point, since -grehlen includes the size of IPv6 headers. - -Let's use a "struct gre_base_hdr *greh" pointer to make this -code more readable. - -p[1] becomes greh->protocol. -grhlen is the GRE header length. - -Fixes: c12b395a4664 ("gre: Support GRE over IPv6") -Signed-off-by: Eric Dumazet -Reported-by: Andrey Konovalov -Signed-off-by: David S. Miller ---- - net/ipv6/ip6_gre.c | 40 +++++++++++++++++++++------------------- - 1 file changed, 21 insertions(+), 19 deletions(-) - -diff --git a/net/ipv6/ip6_gre.c b/net/ipv6/ip6_gre.c -index 5586318..630b73b 100644 ---- a/net/ipv6/ip6_gre.c -+++ b/net/ipv6/ip6_gre.c -@@ -367,35 +367,37 @@ static void ip6gre_tunnel_uninit(struct net_device *dev) - - - static void ip6gre_err(struct sk_buff *skb, struct inet6_skb_parm *opt, -- u8 type, u8 code, int offset, __be32 info) -+ u8 type, u8 code, int offset, __be32 info) - { -- const struct ipv6hdr *ipv6h = (const struct ipv6hdr *)skb->data; -- __be16 *p = (__be16 *)(skb->data + offset); -- int grehlen = offset + 4; -+ const struct gre_base_hdr *greh; -+ const struct ipv6hdr *ipv6h; -+ int grehlen = sizeof(*greh); - struct ip6_tnl *t; -+ int key_off = 0; - __be16 flags; -+ __be32 key; - -- flags = p[0]; -- if (flags&(GRE_CSUM|GRE_KEY|GRE_SEQ|GRE_ROUTING|GRE_VERSION)) { -- if (flags&(GRE_VERSION|GRE_ROUTING)) -- return; -- if (flags&GRE_KEY) { -- grehlen += 4; -- if (flags&GRE_CSUM) -- grehlen += 4; -- } -+ if (!pskb_may_pull(skb, offset + grehlen)) -+ return; -+ greh = (const struct gre_base_hdr *)(skb->data + offset); -+ flags = greh->flags; -+ if (flags & (GRE_VERSION | GRE_ROUTING)) -+ return; -+ if (flags & GRE_CSUM) -+ grehlen += 4; -+ if (flags & GRE_KEY) { -+ key_off = grehlen + offset; -+ grehlen += 4; - } - -- /* If only 8 bytes returned, keyed message will be dropped here */ -- if (!pskb_may_pull(skb, grehlen)) -+ if (!pskb_may_pull(skb, offset + grehlen)) - return; - ipv6h = (const struct ipv6hdr *)skb->data; -- p = (__be16 *)(skb->data + offset); -+ greh = (const struct gre_base_hdr *)(skb->data + offset); -+ key = key_off ? *(__be32 *)(skb->data + key_off) : 0; - - t = ip6gre_tunnel_lookup(skb->dev, &ipv6h->daddr, &ipv6h->saddr, -- flags & GRE_KEY ? -- *(((__be32 *)p) + (grehlen / 4) - 1) : 0, -- p[1]); -+ key, greh->protocol); - if (!t) - return; - --- -cgit v0.12 - diff --git a/ipv4-keep-skb-dst-around-in-presence-of-IP-options.patch b/ipv4-keep-skb-dst-around-in-presence-of-IP-options.patch deleted file mode 100644 index 821e3fce8..000000000 --- a/ipv4-keep-skb-dst-around-in-presence-of-IP-options.patch +++ /dev/null @@ -1,47 +0,0 @@ -From 34b2cef20f19c87999fff3da4071e66937db9644 Mon Sep 17 00:00:00 2001 -From: Eric Dumazet -Date: Sat, 4 Feb 2017 11:16:52 -0800 -Subject: [PATCH] ipv4: keep skb->dst around in presence of IP options - -Andrey Konovalov got crashes in __ip_options_echo() when a NULL skb->dst -is accessed. - -ipv4_pktinfo_prepare() should not drop the dst if (evil) IP options -are present. - -We could refine the test to the presence of ts_needtime or srr, -but IP options are not often used, so let's be conservative. - -Thanks to syzkaller team for finding this bug. - -Fixes: d826eb14ecef ("ipv4: PKTINFO doesnt need dst reference") -Signed-off-by: Eric Dumazet -Reported-by: Andrey Konovalov -Signed-off-by: David S. Miller ---- - net/ipv4/ip_sockglue.c | 9 ++++++++- - 1 file changed, 8 insertions(+), 1 deletion(-) - -diff --git a/net/ipv4/ip_sockglue.c b/net/ipv4/ip_sockglue.c -index 53ae0c6..9000117 100644 ---- a/net/ipv4/ip_sockglue.c -+++ b/net/ipv4/ip_sockglue.c -@@ -1238,7 +1238,14 @@ void ipv4_pktinfo_prepare(const struct sock *sk, struct sk_buff *skb) - pktinfo->ipi_ifindex = 0; - pktinfo->ipi_spec_dst.s_addr = 0; - } -- skb_dst_drop(skb); -+ /* We need to keep the dst for __ip_options_echo() -+ * We could restrict the test to opt.ts_needtime || opt.srr, -+ * but the following is good enough as IP options are not often used. -+ */ -+ if (unlikely(IPCB(skb)->opt.optlen)) -+ skb_dst_force(skb); -+ else -+ skb_dst_drop(skb); - } - - int ip_setsockopt(struct sock *sk, int level, --- -2.9.3 - diff --git a/kernel.spec b/kernel.spec index 81bb1596e..707f508f0 100644 --- a/kernel.spec +++ b/kernel.spec @@ -54,7 +54,7 @@ Summary: The Linux kernel %if 0%{?released_kernel} # Do we have a -stable update to apply? -%define stable_update 10 +%define stable_update 11 # Set rpm version accordingly %if 0%{?stable_update} %define stablerev %{stable_update} @@ -636,21 +636,15 @@ Patch852: nouveau-add-maxwell-to-backlight-init.patch #CVE-2017-2596 rhbz 1417812 1417813 Patch855: kvm-fix-page-struct-leak-in-handle_vmon.patch -#CVE-2017-5897 rhbz 1419848 1419851 -Patch857: ip6_gre-fix-ip6gre_err-invalid-reads.patch - #rhbz 1417829 Patch858: 1-2-media-cxusb-Use-a-dma-capable-buffer-also-for-reading.patch Patch859: 2-2-media-dvb-usb-firmware-don-t-do-DMA-on-stack.patch -#rhbz 1420276 -Patch860: 0001-sctp-avoid-BUG_ON-on-sctp_wait_for_sndbuf.patch - #rhbz 1415397 Patch861: w1-ds2490-USB-transfer-buffers-need-to-be-DMAable.patch -#CVE-2017-5970 rhbz 1421638 -Patch862: ipv4-keep-skb-dst-around-in-presence-of-IP-options.patch +#rhbz 1422969 +Patch862: rt2800-warning.patch # END OF PATCH DEFINITIONS @@ -2181,6 +2175,10 @@ fi # # %changelog +* Mon Feb 20 2017 Laura Abbott - 4.9.11-100 +- Linux v4.9.11 +- Fix rt2800 warning (rhbz 1422969) + * Wed Feb 15 2017 Peter Robinson - Enable PWRSEQ_SIMPLE module (fixes rhbz 1377816) diff --git a/rt2800-warning.patch b/rt2800-warning.patch new file mode 100644 index 000000000..0e7a1fe0d --- /dev/null +++ b/rt2800-warning.patch @@ -0,0 +1,34 @@ +From feecb0cb466ba458f59640b4d59ecef1cd956b1f Mon Sep 17 00:00:00 2001 +From: Stanislaw Gruszka +Date: Fri, 13 Jan 2017 15:55:07 +0100 +Subject: rt2800: remove warning on bcn_num != rt2x00dev->intf_beaconing + +Since rt2800pci update beacon settings asynchronously from +tbtt tasklet, without beacon_skb_mutex protection, number of +currently active beacons entries can be different than +number pointed by rt2x00dev->intf_beaconing. Remove warning +about that inconsistency. + +Reported-by: evaxige@qq.com +Signed-off-by: Stanislaw Gruszka +Signed-off-by: Kalle Valo +--- + drivers/net/wireless/ralink/rt2x00/rt2800lib.c | 2 -- + 1 file changed, 2 deletions(-) + +diff --git a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c +index ff047dc..f36bc9b 100644 +--- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c ++++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c +@@ -967,8 +967,6 @@ static void rt2800_update_beacons_setup(struct rt2x00_dev *rt2x00dev) + bcn_num++; + } + +- WARN_ON_ONCE(bcn_num != rt2x00dev->intf_beaconing); +- + rt2800_register_write(rt2x00dev, BCN_OFFSET0, (u32) reg); + rt2800_register_write(rt2x00dev, BCN_OFFSET1, (u32) (reg >> 32)); + +-- +cgit v0.12 + diff --git a/sources b/sources index 687327e58..d34f194b7 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ SHA512 (linux-4.9.tar.xz) = bf67ff812cc3cb7e5059e82cc5db0d9a7c5637f7ed9a42e4730c715bf7047c81ed3a571225f92a33ef0b6d65f35595bc32d773356646df2627da55e9bc7f1f1a SHA512 (perf-man-4.9.tar.gz) = d23bb3da1eadd6623fddbf4696948de7675f3dcf57c711a7427dd7ae111394f58d8f42752938bbea7cd219f1e7f6f116fc67a1c74f769711063940a065f37b99 -SHA512 (patch-4.9.10.xz) = 93958f4b932a46bbd9a122f52bf09b8c4b864b419a0774514baeb7dc83f11f55a5ba84f2e586a904dbfeeb7d976352e40670fbe2e32e25c35085ddf87e41b58d +SHA512 (patch-4.9.11.xz) = 7683628b011fa1462b5838301ebabc3eebaefcd50f65600be55bcf0102578ca07589c7683ef84b8d5300bd05795655fb21e1c145f5663d30593fc1801c163bc3 From 2e0da32798a0f425a1502177bc6af222a7c0c423 Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Wed, 22 Feb 2017 10:55:07 -0600 Subject: [PATCH 209/275] fix CVE-2017-6074 DCCP double-free vulnerability --- ...g-skb-too-early-for-IPV6_RECVPKTINFO.patch | 47 +++++++++++++++++++ kernel.spec | 6 +++ 2 files changed, 53 insertions(+) create mode 100644 dccp-fix-freeing-skb-too-early-for-IPV6_RECVPKTINFO.patch diff --git a/dccp-fix-freeing-skb-too-early-for-IPV6_RECVPKTINFO.patch b/dccp-fix-freeing-skb-too-early-for-IPV6_RECVPKTINFO.patch new file mode 100644 index 000000000..433fd4b2b --- /dev/null +++ b/dccp-fix-freeing-skb-too-early-for-IPV6_RECVPKTINFO.patch @@ -0,0 +1,47 @@ +From 5edabca9d4cff7f1f2b68f0bac55ef99d9798ba4 Mon Sep 17 00:00:00 2001 +From: Andrey Konovalov +Date: Thu, 16 Feb 2017 17:22:46 +0100 +Subject: dccp: fix freeing skb too early for IPV6_RECVPKTINFO + +In the current DCCP implementation an skb for a DCCP_PKT_REQUEST packet +is forcibly freed via __kfree_skb in dccp_rcv_state_process if +dccp_v6_conn_request successfully returns. + +However, if IPV6_RECVPKTINFO is set on a socket, the address of the skb +is saved to ireq->pktopts and the ref count for skb is incremented in +dccp_v6_conn_request, so skb is still in use. Nevertheless, it gets freed +in dccp_rcv_state_process. + +Fix by calling consume_skb instead of doing goto discard and therefore +calling __kfree_skb. + +Similar fixes for TCP: + +fb7e2399ec17f1004c0e0ccfd17439f8759ede01 [TCP]: skb is unexpectedly freed. +0aea76d35c9651d55bbaf746e7914e5f9ae5a25d tcp: SYN packets are now +simply consumed + +Signed-off-by: Andrey Konovalov +Acked-by: Eric Dumazet +Signed-off-by: David S. Miller +--- + net/dccp/input.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/net/dccp/input.c b/net/dccp/input.c +index ba34718..8fedc2d 100644 +--- a/net/dccp/input.c ++++ b/net/dccp/input.c +@@ -606,7 +606,8 @@ int dccp_rcv_state_process(struct sock *sk, struct sk_buff *skb, + if (inet_csk(sk)->icsk_af_ops->conn_request(sk, + skb) < 0) + return 1; +- goto discard; ++ consume_skb(skb); ++ return 0; + } + if (dh->dccph_type == DCCP_PKT_RESET) + goto discard; +-- +cgit v0.12 + diff --git a/kernel.spec b/kernel.spec index 707f508f0..2a9279942 100644 --- a/kernel.spec +++ b/kernel.spec @@ -646,6 +646,9 @@ Patch861: w1-ds2490-USB-transfer-buffers-need-to-be-DMAable.patch #rhbz 1422969 Patch862: rt2800-warning.patch +#CVE-2017-6074 +Patch863: dccp-fix-freeing-skb-too-early-for-IPV6_RECVPKTINFO.patch + # END OF PATCH DEFINITIONS %endif @@ -2175,6 +2178,9 @@ fi # # %changelog +* Wed Feb 22 2017 Justin M. Forbes +- CVE-2017-6074 DCCP double-free vulnerability + * Mon Feb 20 2017 Laura Abbott - 4.9.11-100 - Linux v4.9.11 - Fix rt2800 warning (rhbz 1422969) From 25d7031f7fa966fbf5261c7e6a07b426881824c5 Mon Sep 17 00:00:00 2001 From: Laura Abbott Date: Thu, 23 Feb 2017 10:52:09 -0800 Subject: [PATCH 210/275] Linux v4.9.12 --- kernel.spec | 5 ++++- sources | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/kernel.spec b/kernel.spec index 2a9279942..6e6980375 100644 --- a/kernel.spec +++ b/kernel.spec @@ -54,7 +54,7 @@ Summary: The Linux kernel %if 0%{?released_kernel} # Do we have a -stable update to apply? -%define stable_update 11 +%define stable_update 12 # Set rpm version accordingly %if 0%{?stable_update} %define stablerev %{stable_update} @@ -2178,6 +2178,9 @@ fi # # %changelog +* Thu Feb 23 2017 Laura Abbott - 4.9.12-100 +- Linux v4.9.12 + * Wed Feb 22 2017 Justin M. Forbes - CVE-2017-6074 DCCP double-free vulnerability diff --git a/sources b/sources index d34f194b7..20f1904fb 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ SHA512 (linux-4.9.tar.xz) = bf67ff812cc3cb7e5059e82cc5db0d9a7c5637f7ed9a42e4730c715bf7047c81ed3a571225f92a33ef0b6d65f35595bc32d773356646df2627da55e9bc7f1f1a SHA512 (perf-man-4.9.tar.gz) = d23bb3da1eadd6623fddbf4696948de7675f3dcf57c711a7427dd7ae111394f58d8f42752938bbea7cd219f1e7f6f116fc67a1c74f769711063940a065f37b99 -SHA512 (patch-4.9.11.xz) = 7683628b011fa1462b5838301ebabc3eebaefcd50f65600be55bcf0102578ca07589c7683ef84b8d5300bd05795655fb21e1c145f5663d30593fc1801c163bc3 +SHA512 (patch-4.9.12.xz) = 52314315fe960b3b4b11021a5a8a6271bd8a7e3f9f63cd983f72cf7585ac95408872ab48074d2cd578d681a64e10607ba69157a3fed14663736f20c5c2a78b0a From 71afbdff63bda56bc543b2b521e834f0e0e97d90 Mon Sep 17 00:00:00 2001 From: Laura Abbott Date: Mon, 27 Feb 2017 08:22:41 -0800 Subject: [PATCH 211/275] Linux v4.9.13 --- ...g-skb-too-early-for-IPV6_RECVPKTINFO.patch | 47 ------------------- kernel.spec | 8 ++-- sources | 2 +- 3 files changed, 5 insertions(+), 52 deletions(-) delete mode 100644 dccp-fix-freeing-skb-too-early-for-IPV6_RECVPKTINFO.patch diff --git a/dccp-fix-freeing-skb-too-early-for-IPV6_RECVPKTINFO.patch b/dccp-fix-freeing-skb-too-early-for-IPV6_RECVPKTINFO.patch deleted file mode 100644 index 433fd4b2b..000000000 --- a/dccp-fix-freeing-skb-too-early-for-IPV6_RECVPKTINFO.patch +++ /dev/null @@ -1,47 +0,0 @@ -From 5edabca9d4cff7f1f2b68f0bac55ef99d9798ba4 Mon Sep 17 00:00:00 2001 -From: Andrey Konovalov -Date: Thu, 16 Feb 2017 17:22:46 +0100 -Subject: dccp: fix freeing skb too early for IPV6_RECVPKTINFO - -In the current DCCP implementation an skb for a DCCP_PKT_REQUEST packet -is forcibly freed via __kfree_skb in dccp_rcv_state_process if -dccp_v6_conn_request successfully returns. - -However, if IPV6_RECVPKTINFO is set on a socket, the address of the skb -is saved to ireq->pktopts and the ref count for skb is incremented in -dccp_v6_conn_request, so skb is still in use. Nevertheless, it gets freed -in dccp_rcv_state_process. - -Fix by calling consume_skb instead of doing goto discard and therefore -calling __kfree_skb. - -Similar fixes for TCP: - -fb7e2399ec17f1004c0e0ccfd17439f8759ede01 [TCP]: skb is unexpectedly freed. -0aea76d35c9651d55bbaf746e7914e5f9ae5a25d tcp: SYN packets are now -simply consumed - -Signed-off-by: Andrey Konovalov -Acked-by: Eric Dumazet -Signed-off-by: David S. Miller ---- - net/dccp/input.c | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/net/dccp/input.c b/net/dccp/input.c -index ba34718..8fedc2d 100644 ---- a/net/dccp/input.c -+++ b/net/dccp/input.c -@@ -606,7 +606,8 @@ int dccp_rcv_state_process(struct sock *sk, struct sk_buff *skb, - if (inet_csk(sk)->icsk_af_ops->conn_request(sk, - skb) < 0) - return 1; -- goto discard; -+ consume_skb(skb); -+ return 0; - } - if (dh->dccph_type == DCCP_PKT_RESET) - goto discard; --- -cgit v0.12 - diff --git a/kernel.spec b/kernel.spec index 6e6980375..22479544c 100644 --- a/kernel.spec +++ b/kernel.spec @@ -54,7 +54,7 @@ Summary: The Linux kernel %if 0%{?released_kernel} # Do we have a -stable update to apply? -%define stable_update 12 +%define stable_update 13 # Set rpm version accordingly %if 0%{?stable_update} %define stablerev %{stable_update} @@ -646,9 +646,6 @@ Patch861: w1-ds2490-USB-transfer-buffers-need-to-be-DMAable.patch #rhbz 1422969 Patch862: rt2800-warning.patch -#CVE-2017-6074 -Patch863: dccp-fix-freeing-skb-too-early-for-IPV6_RECVPKTINFO.patch - # END OF PATCH DEFINITIONS %endif @@ -2178,6 +2175,9 @@ fi # # %changelog +* Mon Feb 27 2017 Laura Abbott - 4.9.13-100 +- Linux v4.9.13 + * Thu Feb 23 2017 Laura Abbott - 4.9.12-100 - Linux v4.9.12 diff --git a/sources b/sources index 20f1904fb..91aa8d40f 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ SHA512 (linux-4.9.tar.xz) = bf67ff812cc3cb7e5059e82cc5db0d9a7c5637f7ed9a42e4730c715bf7047c81ed3a571225f92a33ef0b6d65f35595bc32d773356646df2627da55e9bc7f1f1a SHA512 (perf-man-4.9.tar.gz) = d23bb3da1eadd6623fddbf4696948de7675f3dcf57c711a7427dd7ae111394f58d8f42752938bbea7cd219f1e7f6f116fc67a1c74f769711063940a065f37b99 -SHA512 (patch-4.9.12.xz) = 52314315fe960b3b4b11021a5a8a6271bd8a7e3f9f63cd983f72cf7585ac95408872ab48074d2cd578d681a64e10607ba69157a3fed14663736f20c5c2a78b0a +SHA512 (patch-4.9.13.xz) = d7956cc8a4ab11514789af4f1f7023268e4b003216766c153f0f09aac659aabda5de634b363d53f8daeddfcf5820619c5bca31ff5f9aeb187c1df016c05f68d5 From 32c05c6ca542ed06b20297f9a31278b096236d1d Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Tue, 28 Feb 2017 08:24:47 -0600 Subject: [PATCH 212/275] CVE-2017-5669 shmat allows mmap null page protection bypass (rhbz 1427239) --- ...m-Fix-shmat-mmap-nil-page-protection.patch | 75 +++++++++++++++++++ kernel.spec | 8 +- 2 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 ipc-shm-Fix-shmat-mmap-nil-page-protection.patch diff --git a/ipc-shm-Fix-shmat-mmap-nil-page-protection.patch b/ipc-shm-Fix-shmat-mmap-nil-page-protection.patch new file mode 100644 index 000000000..ad7b45436 --- /dev/null +++ b/ipc-shm-Fix-shmat-mmap-nil-page-protection.patch @@ -0,0 +1,75 @@ +From 95e91b831f87ac8e1f8ed50c14d709089b4e01b8 Mon Sep 17 00:00:00 2001 +From: Davidlohr Bueso +Date: Mon, 27 Feb 2017 14:28:24 -0800 +Subject: [PATCH] ipc/shm: Fix shmat mmap nil-page protection + +The issue is described here, with a nice testcase: + + https://bugzilla.kernel.org/show_bug.cgi?id=192931 + +The problem is that shmat() calls do_mmap_pgoff() with MAP_FIXED, and +the address rounded down to 0. For the regular mmap case, the +protection mentioned above is that the kernel gets to generate the +address -- arch_get_unmapped_area() will always check for MAP_FIXED and +return that address. So by the time we do security_mmap_addr(0) things +get funky for shmat(). + +The testcase itself shows that while a regular user crashes, root will +not have a problem attaching a nil-page. There are two possible fixes +to this. The first, and which this patch does, is to simply allow root +to crash as well -- this is also regular mmap behavior, ie when hacking +up the testcase and adding mmap(... |MAP_FIXED). While this approach +is the safer option, the second alternative is to ignore SHM_RND if the +rounded address is 0, thus only having MAP_SHARED flags. This makes the +behavior of shmat() identical to the mmap() case. The downside of this +is obviously user visible, but does make sense in that it maintains +semantics after the round-down wrt 0 address and mmap. + +Passes shm related ltp tests. + +Link: http://lkml.kernel.org/r/1486050195-18629-1-git-send-email-dave@stgolabs.net +Signed-off-by: Davidlohr Bueso +Reported-by: Gareth Evans +Cc: Manfred Spraul +Cc: Michael Kerrisk +Cc: +Signed-off-by: Andrew Morton +Signed-off-by: Linus Torvalds +--- + ipc/shm.c | 13 +++++++++---- + 1 file changed, 9 insertions(+), 4 deletions(-) + +diff --git a/ipc/shm.c b/ipc/shm.c +index d7805ac..06ea9ef 100644 +--- a/ipc/shm.c ++++ b/ipc/shm.c +@@ -1091,8 +1091,8 @@ SYSCALL_DEFINE3(shmctl, int, shmid, int, cmd, struct shmid_ds __user *, buf) + * "raddr" thing points to kernel space, and there has to be a wrapper around + * this. + */ +-long do_shmat(int shmid, char __user *shmaddr, int shmflg, ulong *raddr, +- unsigned long shmlba) ++long do_shmat(int shmid, char __user *shmaddr, int shmflg, ++ ulong *raddr, unsigned long shmlba) + { + struct shmid_kernel *shp; + unsigned long addr; +@@ -1113,8 +1113,13 @@ long do_shmat(int shmid, char __user *shmaddr, int shmflg, ulong *raddr, + goto out; + else if ((addr = (ulong)shmaddr)) { + if (addr & (shmlba - 1)) { +- if (shmflg & SHM_RND) +- addr &= ~(shmlba - 1); /* round down */ ++ /* ++ * Round down to the nearest multiple of shmlba. ++ * For sane do_mmap_pgoff() parameters, avoid ++ * round downs that trigger nil-page and MAP_FIXED. ++ */ ++ if ((shmflg & SHM_RND) && addr >= shmlba) ++ addr &= ~(shmlba - 1); + else + #ifndef __ARCH_FORCE_SHMLBA + if (addr & ~PAGE_MASK) +-- +2.9.3 + diff --git a/kernel.spec b/kernel.spec index 22479544c..4f0acb561 100644 --- a/kernel.spec +++ b/kernel.spec @@ -646,6 +646,9 @@ Patch861: w1-ds2490-USB-transfer-buffers-need-to-be-DMAable.patch #rhbz 1422969 Patch862: rt2800-warning.patch +#CVE-2017-5669 rhbz 1427239 +Patch863: ipc-shm-Fix-shmat-mmap-nil-page-protection.patch + # END OF PATCH DEFINITIONS %endif @@ -855,7 +858,6 @@ Summary: Development package for building kernel modules to match the %{?2:%{2} Group: System Environment/Kernel\ Provides: kernel%{?1:-%{1}}-devel-%{_target_cpu} = %{version}-%{release}\ Provides: kernel-devel-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel-devel = %{version}-%{release}%{?1:+%{1}}\ Provides: kernel-devel-uname-r = %{KVERREL}%{?variant}%{?1:+%{1}}\ Provides: installonlypkg(kernel)\ AutoReqProv: no\ @@ -2175,6 +2177,10 @@ fi # # %changelog +* Tue Feb 28 2017 Justin M. Forbes +- CVE-2017-5669 shmat allows mmap null page protection bypass (rhbz 1427239) +- Fix kernel-devel virtual provide + * Mon Feb 27 2017 Laura Abbott - 4.9.13-100 - Linux v4.9.13 From 8fdb6e2d7e982bbf4ba8654dcc1127aa54f4b689 Mon Sep 17 00:00:00 2001 From: Peter Robinson Date: Wed, 1 Mar 2017 13:59:41 +0000 Subject: [PATCH 213/275] Add patch to fix desktop lockups on RPi (vc4) RHBZ# 1389163 --- kernel.spec | 5 ++ vc4-fix-vblank-cursor-update-issue.patch | 59 ++++++++++++++++++++++++ 2 files changed, 64 insertions(+) create mode 100644 vc4-fix-vblank-cursor-update-issue.patch diff --git a/kernel.spec b/kernel.spec index 4f0acb561..31bf11be6 100644 --- a/kernel.spec +++ b/kernel.spec @@ -531,6 +531,8 @@ Patch433: bcm283x-mmc-imp-speed.patch Patch434: mm-alloc_contig-re-allow-CMA-to-compact-FS-pages.patch +Patch436: vc4-fix-vblank-cursor-update-issue.patch + Patch440: AllWinner-net-emac.patch Patch442: ARM-Drop-fixed-200-Hz-timer-requirement-from-Samsung-platforms.patch @@ -2177,6 +2179,9 @@ fi # # %changelog +* Wed Mar 1 2017 Peter Robinson +- Add patch to fix desktop lockups on RPi (vc4) RHBZ# 1389163 + * Tue Feb 28 2017 Justin M. Forbes - CVE-2017-5669 shmat allows mmap null page protection bypass (rhbz 1427239) - Fix kernel-devel virtual provide diff --git a/vc4-fix-vblank-cursor-update-issue.patch b/vc4-fix-vblank-cursor-update-issue.patch new file mode 100644 index 000000000..8537d67ca --- /dev/null +++ b/vc4-fix-vblank-cursor-update-issue.patch @@ -0,0 +1,59 @@ +From 6d24c1c5918907ab78a5729b78c0d165deb3cc2b Mon Sep 17 00:00:00 2001 +From: Michael Zoran +Date: Thu, 23 Feb 2017 17:54:31 -0800 +Subject: drm/vc4: Don't wait for vblank when updating the cursor + +Commonly used desktop environments such as xfce4 and gnome +on debian sid can flood the graphics drivers with cursor +updates. Because the current implementation is waiting +for a vblank between cursor updates, this will cause the +display to hang for a long time since a typical refresh +rate is only 60Hz. + +This is unnecessary and unexpected by user mode software, +so simply swap out the cursor frame buffer without waiting. + +Signed-off-by: Michael Zoran +Reviewed-by: Eric Anholt +Link: http://patchwork.freedesktop.org/patch/msgid/20170224015431.24583-1-mzoran@crowfest.net + +diff --git a/drivers/gpu/drm/vc4/vc4_plane.c b/drivers/gpu/drm/vc4/vc4_plane.c +index f7a229d..110224c 100644 +--- a/drivers/gpu/drm/vc4/vc4_plane.c ++++ b/drivers/gpu/drm/vc4/vc4_plane.c +@@ -20,6 +20,7 @@ + + #include "vc4_drv.h" + #include "vc4_regs.h" ++#include "drm_atomic.h" + #include "drm_atomic_helper.h" + #include "drm_fb_cma_helper.h" + #include "drm_plane_helper.h" +@@ -769,12 +770,6 @@ vc4_update_plane(struct drm_plane *plane, + if (!plane_state) + goto out; + +- /* If we're changing the cursor contents, do that in the +- * normal vblank-synced atomic path. +- */ +- if (fb != plane_state->fb) +- goto out; +- + /* No configuring new scaling in the fast path. */ + if (crtc_w != plane_state->crtc_w || + crtc_h != plane_state->crtc_h || +@@ -783,6 +778,11 @@ vc4_update_plane(struct drm_plane *plane, + goto out; + } + ++ if (fb != plane_state->fb) { ++ drm_atomic_set_fb_for_plane(plane->state, fb); ++ vc4_plane_async_set_fb(plane, fb); ++ } ++ + /* Set the cursor's position on the screen. This is the + * expected change from the drm_mode_cursor_universal() + * helper. +-- +cgit v0.10.2 + From 3db590e5544e0e3e7d717ef7d67212671ebe1c1b Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Mon, 6 Mar 2017 09:49:24 -0600 Subject: [PATCH 214/275] CVE-2017-6353 Possible double free in stcp_sendmsg (rhbz 1428907 1428910) --- kernel.spec | 6 ++ ...f-operation-on-asocs-with-threads-sl.patch | 66 +++++++++++++++++++ 2 files changed, 72 insertions(+) create mode 100644 sctp-deny-peeloff-operation-on-asocs-with-threads-sl.patch diff --git a/kernel.spec b/kernel.spec index 31bf11be6..2349520f7 100644 --- a/kernel.spec +++ b/kernel.spec @@ -651,6 +651,9 @@ Patch862: rt2800-warning.patch #CVE-2017-5669 rhbz 1427239 Patch863: ipc-shm-Fix-shmat-mmap-nil-page-protection.patch +#CVE-2017-6353 rhbz 1428907 1428910 +Patch864: sctp-deny-peeloff-operation-on-asocs-with-threads-sl.patch + # END OF PATCH DEFINITIONS %endif @@ -2179,6 +2182,9 @@ fi # # %changelog +* Mon Mar 6 2017 Justin M. Forbes +- CVE-2017-6353 Possible double free in stcp_sendmsg (rhbz 1428907 1428910) + * Wed Mar 1 2017 Peter Robinson - Add patch to fix desktop lockups on RPi (vc4) RHBZ# 1389163 diff --git a/sctp-deny-peeloff-operation-on-asocs-with-threads-sl.patch b/sctp-deny-peeloff-operation-on-asocs-with-threads-sl.patch new file mode 100644 index 000000000..47f586ace --- /dev/null +++ b/sctp-deny-peeloff-operation-on-asocs-with-threads-sl.patch @@ -0,0 +1,66 @@ +From dfcb9f4f99f1e9a49e43398a7bfbf56927544af1 Mon Sep 17 00:00:00 2001 +From: Marcelo Ricardo Leitner +Date: Thu, 23 Feb 2017 09:31:18 -0300 +Subject: [PATCH] sctp: deny peeloff operation on asocs with threads sleeping + on it + +commit 2dcab5984841 ("sctp: avoid BUG_ON on sctp_wait_for_sndbuf") +attempted to avoid a BUG_ON call when the association being used for a +sendmsg() is blocked waiting for more sndbuf and another thread did a +peeloff operation on such asoc, moving it to another socket. + +As Ben Hutchings noticed, then in such case it would return without +locking back the socket and would cause two unlocks in a row. + +Further analysis also revealed that it could allow a double free if the +application managed to peeloff the asoc that is created during the +sendmsg call, because then sctp_sendmsg() would try to free the asoc +that was created only for that call. + +This patch takes another approach. It will deny the peeloff operation +if there is a thread sleeping on the asoc, so this situation doesn't +exist anymore. This avoids the issues described above and also honors +the syscalls that are already being handled (it can be multiple sendmsg +calls). + +Joint work with Xin Long. + +Fixes: 2dcab5984841 ("sctp: avoid BUG_ON on sctp_wait_for_sndbuf") +Cc: Alexander Popov +Cc: Ben Hutchings +Signed-off-by: Marcelo Ricardo Leitner +Signed-off-by: Xin Long +Signed-off-by: David S. Miller +--- + net/sctp/socket.c | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +diff --git a/net/sctp/socket.c b/net/sctp/socket.c +index b532148..465a9c8 100644 +--- a/net/sctp/socket.c ++++ b/net/sctp/socket.c +@@ -4862,6 +4862,12 @@ int sctp_do_peeloff(struct sock *sk, sctp_assoc_t id, struct socket **sockp) + if (!asoc) + return -EINVAL; + ++ /* If there is a thread waiting on more sndbuf space for ++ * sending on this asoc, it cannot be peeled. ++ */ ++ if (waitqueue_active(&asoc->wait)) ++ return -EBUSY; ++ + /* An association cannot be branched off from an already peeled-off + * socket, nor is this supported for tcp style sockets. + */ +@@ -7599,8 +7605,6 @@ static int sctp_wait_for_sndbuf(struct sctp_association *asoc, long *timeo_p, + */ + release_sock(sk); + current_timeo = schedule_timeout(current_timeo); +- if (sk != asoc->base.sk) +- goto do_error; + lock_sock(sk); + + *timeo_p = current_timeo; +-- +2.9.3 + From 9faa243ea8b3556e2ba31c82d323f68f97013e49 Mon Sep 17 00:00:00 2001 From: Laura Abbott Date: Tue, 7 Mar 2017 13:37:38 -0800 Subject: [PATCH 215/275] Disable CONFIG_IWLWIFI_PCIE_RTPM (rhbz 1429135) --- config-generic | 2 +- kernel.spec | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/config-generic b/config-generic index 4da90f2b1..11c3eeb96 100644 --- a/config-generic +++ b/config-generic @@ -1921,7 +1921,7 @@ CONFIG_IWLWIFI=m CONFIG_IWLDVM=m CONFIG_IWLMVM=m # CONFIG_IWLWIFI_BCAST_FILTERING is not set -CONFIG_IWLWIFI_PCIE_RTPM=y +# CONFIG_IWLWIFI_PCIE_RTPM is not set CONFIG_IWLWIFI_DEBUG=y CONFIG_IWLWIFI_DEBUGFS=y diff --git a/kernel.spec b/kernel.spec index 2349520f7..d2fa6684c 100644 --- a/kernel.spec +++ b/kernel.spec @@ -2182,6 +2182,9 @@ fi # # %changelog +* Tue Mar 7 2017 Laura Abbott +- Disable CONFIG_IWLWIFI_PCIE_RTPM (rhbz 1429135) + * Mon Mar 6 2017 Justin M. Forbes - CVE-2017-6353 Possible double free in stcp_sendmsg (rhbz 1428907 1428910) From bb2d360aa60cff05a37c7ef79d0b130a408e209b Mon Sep 17 00:00:00 2001 From: Laura Abbott Date: Tue, 7 Mar 2017 14:59:52 -0800 Subject: [PATCH 216/275] CVE-2017-2636 Race condition access to n_hdlc.tbuf causes double free in n_hdlc_release (rhbz 1430049) --- ...y-n_hdlc-get-rid-of-racy-n_hdlc.tbuf.patch | 311 ++++++++++++++++++ kernel.spec | 6 + 2 files changed, 317 insertions(+) create mode 100644 0001-tty-n_hdlc-get-rid-of-racy-n_hdlc.tbuf.patch diff --git a/0001-tty-n_hdlc-get-rid-of-racy-n_hdlc.tbuf.patch b/0001-tty-n_hdlc-get-rid-of-racy-n_hdlc.tbuf.patch new file mode 100644 index 000000000..b6cd8b211 --- /dev/null +++ b/0001-tty-n_hdlc-get-rid-of-racy-n_hdlc.tbuf.patch @@ -0,0 +1,311 @@ +From 1dea7a8061ad9212f4464464a80d0dcd477eceab Mon Sep 17 00:00:00 2001 +From: Alexander Popov +Date: Tue, 28 Feb 2017 19:28:54 +0300 +Subject: [PATCH 1/1] tty: n_hdlc: get rid of racy n_hdlc.tbuf + +Currently N_HDLC line discipline uses a self-made singly linked list for +data buffers and has n_hdlc.tbuf pointer for buffer retransmitting after +an error. + +The commit be10eb7589337e5defbe214dae038a53dd21add8 +("tty: n_hdlc add buffer flushing") introduced racy access to n_hdlc.tbuf. +After tx error concurrent flush_tx_queue() and n_hdlc_send_frames() can put +one data buffer to tx_free_buf_list twice. That causes double free in +n_hdlc_release(). + +Let's use standard kernel linked list and get rid of n_hdlc.tbuf: +in case of tx error put current data buffer after the head of tx_buf_list. + +Signed-off-by: Alexander Popov +--- + drivers/tty/n_hdlc.c | 132 +++++++++++++++++++++++++++------------------------ + 1 file changed, 69 insertions(+), 63 deletions(-) + +diff --git a/drivers/tty/n_hdlc.c b/drivers/tty/n_hdlc.c +index eb27883..728c824 100644 +--- a/drivers/tty/n_hdlc.c ++++ b/drivers/tty/n_hdlc.c +@@ -114,7 +114,7 @@ + #define DEFAULT_TX_BUF_COUNT 3 + + struct n_hdlc_buf { +- struct n_hdlc_buf *link; ++ struct list_head list_item; + int count; + char buf[1]; + }; +@@ -122,8 +122,7 @@ struct n_hdlc_buf { + #define N_HDLC_BUF_SIZE (sizeof(struct n_hdlc_buf) + maxframe) + + struct n_hdlc_buf_list { +- struct n_hdlc_buf *head; +- struct n_hdlc_buf *tail; ++ struct list_head list; + int count; + spinlock_t spinlock; + }; +@@ -136,7 +135,6 @@ struct n_hdlc_buf_list { + * @backup_tty - TTY to use if tty gets closed + * @tbusy - reentrancy flag for tx wakeup code + * @woke_up - FIXME: describe this field +- * @tbuf - currently transmitting tx buffer + * @tx_buf_list - list of pending transmit frame buffers + * @rx_buf_list - list of received frame buffers + * @tx_free_buf_list - list unused transmit frame buffers +@@ -149,7 +147,6 @@ struct n_hdlc { + struct tty_struct *backup_tty; + int tbusy; + int woke_up; +- struct n_hdlc_buf *tbuf; + struct n_hdlc_buf_list tx_buf_list; + struct n_hdlc_buf_list rx_buf_list; + struct n_hdlc_buf_list tx_free_buf_list; +@@ -159,6 +156,8 @@ struct n_hdlc { + /* + * HDLC buffer list manipulation functions + */ ++static void n_hdlc_buf_return(struct n_hdlc_buf_list *buf_list, ++ struct n_hdlc_buf *buf); + static void n_hdlc_buf_put(struct n_hdlc_buf_list *list, + struct n_hdlc_buf *buf); + static struct n_hdlc_buf *n_hdlc_buf_get(struct n_hdlc_buf_list *list); +@@ -208,16 +207,9 @@ static void flush_tx_queue(struct tty_struct *tty) + { + struct n_hdlc *n_hdlc = tty2n_hdlc(tty); + struct n_hdlc_buf *buf; +- unsigned long flags; + + while ((buf = n_hdlc_buf_get(&n_hdlc->tx_buf_list))) + n_hdlc_buf_put(&n_hdlc->tx_free_buf_list, buf); +- spin_lock_irqsave(&n_hdlc->tx_buf_list.spinlock, flags); +- if (n_hdlc->tbuf) { +- n_hdlc_buf_put(&n_hdlc->tx_free_buf_list, n_hdlc->tbuf); +- n_hdlc->tbuf = NULL; +- } +- spin_unlock_irqrestore(&n_hdlc->tx_buf_list.spinlock, flags); + } + + static struct tty_ldisc_ops n_hdlc_ldisc = { +@@ -283,7 +275,6 @@ static void n_hdlc_release(struct n_hdlc *n_hdlc) + } else + break; + } +- kfree(n_hdlc->tbuf); + kfree(n_hdlc); + + } /* end of n_hdlc_release() */ +@@ -402,13 +393,7 @@ static void n_hdlc_send_frames(struct n_hdlc *n_hdlc, struct tty_struct *tty) + n_hdlc->woke_up = 0; + spin_unlock_irqrestore(&n_hdlc->tx_buf_list.spinlock, flags); + +- /* get current transmit buffer or get new transmit */ +- /* buffer from list of pending transmit buffers */ +- +- tbuf = n_hdlc->tbuf; +- if (!tbuf) +- tbuf = n_hdlc_buf_get(&n_hdlc->tx_buf_list); +- ++ tbuf = n_hdlc_buf_get(&n_hdlc->tx_buf_list); + while (tbuf) { + if (debuglevel >= DEBUG_LEVEL_INFO) + printk("%s(%d)sending frame %p, count=%d\n", +@@ -420,7 +405,7 @@ static void n_hdlc_send_frames(struct n_hdlc *n_hdlc, struct tty_struct *tty) + + /* rollback was possible and has been done */ + if (actual == -ERESTARTSYS) { +- n_hdlc->tbuf = tbuf; ++ n_hdlc_buf_return(&n_hdlc->tx_buf_list, tbuf); + break; + } + /* if transmit error, throw frame away by */ +@@ -435,10 +420,7 @@ static void n_hdlc_send_frames(struct n_hdlc *n_hdlc, struct tty_struct *tty) + + /* free current transmit buffer */ + n_hdlc_buf_put(&n_hdlc->tx_free_buf_list, tbuf); +- +- /* this tx buffer is done */ +- n_hdlc->tbuf = NULL; +- ++ + /* wait up sleeping writers */ + wake_up_interruptible(&tty->write_wait); + +@@ -448,10 +430,12 @@ static void n_hdlc_send_frames(struct n_hdlc *n_hdlc, struct tty_struct *tty) + if (debuglevel >= DEBUG_LEVEL_INFO) + printk("%s(%d)frame %p pending\n", + __FILE__,__LINE__,tbuf); +- +- /* buffer not accepted by driver */ +- /* set this buffer as pending buffer */ +- n_hdlc->tbuf = tbuf; ++ ++ /* ++ * the buffer was not accepted by driver, ++ * return it back into tx queue ++ */ ++ n_hdlc_buf_return(&n_hdlc->tx_buf_list, tbuf); + break; + } + } +@@ -749,7 +733,8 @@ static int n_hdlc_tty_ioctl(struct tty_struct *tty, struct file *file, + int error = 0; + int count; + unsigned long flags; +- ++ struct n_hdlc_buf *buf = NULL; ++ + if (debuglevel >= DEBUG_LEVEL_INFO) + printk("%s(%d)n_hdlc_tty_ioctl() called %d\n", + __FILE__,__LINE__,cmd); +@@ -763,8 +748,10 @@ static int n_hdlc_tty_ioctl(struct tty_struct *tty, struct file *file, + /* report count of read data available */ + /* in next available frame (if any) */ + spin_lock_irqsave(&n_hdlc->rx_buf_list.spinlock,flags); +- if (n_hdlc->rx_buf_list.head) +- count = n_hdlc->rx_buf_list.head->count; ++ buf = list_first_entry_or_null(&n_hdlc->rx_buf_list.list, ++ struct n_hdlc_buf, list_item); ++ if (buf) ++ count = buf->count; + else + count = 0; + spin_unlock_irqrestore(&n_hdlc->rx_buf_list.spinlock,flags); +@@ -776,8 +763,10 @@ static int n_hdlc_tty_ioctl(struct tty_struct *tty, struct file *file, + count = tty_chars_in_buffer(tty); + /* add size of next output frame in queue */ + spin_lock_irqsave(&n_hdlc->tx_buf_list.spinlock,flags); +- if (n_hdlc->tx_buf_list.head) +- count += n_hdlc->tx_buf_list.head->count; ++ buf = list_first_entry_or_null(&n_hdlc->tx_buf_list.list, ++ struct n_hdlc_buf, list_item); ++ if (buf) ++ count += buf->count; + spin_unlock_irqrestore(&n_hdlc->tx_buf_list.spinlock,flags); + error = put_user(count, (int __user *)arg); + break; +@@ -825,14 +814,14 @@ static unsigned int n_hdlc_tty_poll(struct tty_struct *tty, struct file *filp, + poll_wait(filp, &tty->write_wait, wait); + + /* set bits for operations that won't block */ +- if (n_hdlc->rx_buf_list.head) ++ if (!list_empty(&n_hdlc->rx_buf_list.list)) + mask |= POLLIN | POLLRDNORM; /* readable */ + if (test_bit(TTY_OTHER_CLOSED, &tty->flags)) + mask |= POLLHUP; + if (tty_hung_up_p(filp)) + mask |= POLLHUP; + if (!tty_is_writelocked(tty) && +- n_hdlc->tx_free_buf_list.head) ++ !list_empty(&n_hdlc->tx_free_buf_list.list)) + mask |= POLLOUT | POLLWRNORM; /* writable */ + } + return mask; +@@ -856,7 +845,12 @@ static struct n_hdlc *n_hdlc_alloc(void) + spin_lock_init(&n_hdlc->tx_free_buf_list.spinlock); + spin_lock_init(&n_hdlc->rx_buf_list.spinlock); + spin_lock_init(&n_hdlc->tx_buf_list.spinlock); +- ++ ++ INIT_LIST_HEAD(&n_hdlc->rx_free_buf_list.list); ++ INIT_LIST_HEAD(&n_hdlc->tx_free_buf_list.list); ++ INIT_LIST_HEAD(&n_hdlc->rx_buf_list.list); ++ INIT_LIST_HEAD(&n_hdlc->tx_buf_list.list); ++ + /* allocate free rx buffer list */ + for(i=0;ispinlock, flags); ++ ++ list_add(&buf->list_item, &buf_list->list); ++ buf_list->count++; ++ ++ spin_unlock_irqrestore(&buf_list->spinlock, flags); ++} ++ ++/** + * n_hdlc_buf_put - add specified HDLC buffer to tail of specified list +- * @list - pointer to buffer list ++ * @buf_list - pointer to buffer list + * @buf - pointer to buffer + */ +-static void n_hdlc_buf_put(struct n_hdlc_buf_list *list, ++static void n_hdlc_buf_put(struct n_hdlc_buf_list *buf_list, + struct n_hdlc_buf *buf) + { + unsigned long flags; +- spin_lock_irqsave(&list->spinlock,flags); +- +- buf->link=NULL; +- if (list->tail) +- list->tail->link = buf; +- else +- list->head = buf; +- list->tail = buf; +- (list->count)++; +- +- spin_unlock_irqrestore(&list->spinlock,flags); +- ++ ++ spin_lock_irqsave(&buf_list->spinlock, flags); ++ ++ list_add_tail(&buf->list_item, &buf_list->list); ++ buf_list->count++; ++ ++ spin_unlock_irqrestore(&buf_list->spinlock, flags); + } /* end of n_hdlc_buf_put() */ + + /** + * n_hdlc_buf_get - remove and return an HDLC buffer from list +- * @list - pointer to HDLC buffer list ++ * @buf_list - pointer to HDLC buffer list + * + * Remove and return an HDLC buffer from the head of the specified HDLC buffer + * list. + * Returns a pointer to HDLC buffer if available, otherwise %NULL. + */ +-static struct n_hdlc_buf* n_hdlc_buf_get(struct n_hdlc_buf_list *list) ++static struct n_hdlc_buf *n_hdlc_buf_get(struct n_hdlc_buf_list *buf_list) + { + unsigned long flags; + struct n_hdlc_buf *buf; +- spin_lock_irqsave(&list->spinlock,flags); +- +- buf = list->head; ++ ++ spin_lock_irqsave(&buf_list->spinlock, flags); ++ ++ buf = list_first_entry_or_null(&buf_list->list, ++ struct n_hdlc_buf, list_item); + if (buf) { +- list->head = buf->link; +- (list->count)--; ++ list_del(&buf->list_item); ++ buf_list->count--; + } +- if (!list->head) +- list->tail = NULL; +- +- spin_unlock_irqrestore(&list->spinlock,flags); ++ ++ spin_unlock_irqrestore(&buf_list->spinlock, flags); + return buf; +- + } /* end of n_hdlc_buf_get() */ + + static char hdlc_banner[] __initdata = +-- +2.7.4 + diff --git a/kernel.spec b/kernel.spec index d2fa6684c..339f441c9 100644 --- a/kernel.spec +++ b/kernel.spec @@ -654,6 +654,9 @@ Patch863: ipc-shm-Fix-shmat-mmap-nil-page-protection.patch #CVE-2017-6353 rhbz 1428907 1428910 Patch864: sctp-deny-peeloff-operation-on-asocs-with-threads-sl.patch +# CVE-2017-2636 rhbz 1430049 +Patch668: 0001-tty-n_hdlc-get-rid-of-racy-n_hdlc.tbuf.patch + # END OF PATCH DEFINITIONS %endif @@ -2182,6 +2185,9 @@ fi # # %changelog +* Tue Mar 07 2017 Laura Abbott +- CVE-2017-2636 Race condition access to n_hdlc.tbuf causes double free in n_hdlc_release (rhbz 1430049) + * Tue Mar 7 2017 Laura Abbott - Disable CONFIG_IWLWIFI_PCIE_RTPM (rhbz 1429135) From 3431aaf079bc406ce5585e9e4dafb7fbdd7e6883 Mon Sep 17 00:00:00 2001 From: Laura Abbott Date: Tue, 7 Mar 2017 15:17:09 -0800 Subject: [PATCH 217/275] Build for some CVEs --- kernel.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/kernel.spec b/kernel.spec index 339f441c9..05b496915 100644 --- a/kernel.spec +++ b/kernel.spec @@ -42,7 +42,7 @@ Summary: The Linux kernel # For non-released -rc kernels, this will be appended after the rcX and # gitX tags, so a 3 here would become part of release "0.rcX.gitX.3" # -%global baserelease 100 +%global baserelease 101 %global fedora_build %{baserelease} # base_sublevel is the kernel version we're starting with and patching @@ -2185,6 +2185,9 @@ fi # # %changelog +* Tue Mar 07 2017 Laura Abbott - 4.9.13-101 +- Build for some CVEs + * Tue Mar 07 2017 Laura Abbott - CVE-2017-2636 Race condition access to n_hdlc.tbuf causes double free in n_hdlc_release (rhbz 1430049) From 676add0c7de3a7ef0742e5552f0719d204bce2fc Mon Sep 17 00:00:00 2001 From: Laura Abbott Date: Mon, 13 Mar 2017 10:11:13 -0700 Subject: [PATCH 218/275] Linux v4.9.14 --- ...mapping_error-when-bypassing-SWIOTLB.patch | 66 ---- config-arm64 | 2 +- config-armv7-generic | 2 +- ...m-Fix-shmat-mmap-nil-page-protection.patch | 75 ---- kernel.spec | 15 +- sources | 2 +- ...-transfer-buffers-need-to-be-DMAable.patch | 360 ------------------ 7 files changed, 8 insertions(+), 514 deletions(-) delete mode 100644 arm64-dma-mapping-Fix-dma_mapping_error-when-bypassing-SWIOTLB.patch delete mode 100644 ipc-shm-Fix-shmat-mmap-nil-page-protection.patch delete mode 100644 w1-ds2490-USB-transfer-buffers-need-to-be-DMAable.patch diff --git a/arm64-dma-mapping-Fix-dma_mapping_error-when-bypassing-SWIOTLB.patch b/arm64-dma-mapping-Fix-dma_mapping_error-when-bypassing-SWIOTLB.patch deleted file mode 100644 index 2e7f51ec6..000000000 --- a/arm64-dma-mapping-Fix-dma_mapping_error-when-bypassing-SWIOTLB.patch +++ /dev/null @@ -1,66 +0,0 @@ -From patchwork Wed Jan 25 18:31:31 2017 -Content-Type: text/plain; charset="utf-8" -MIME-Version: 1.0 -Content-Transfer-Encoding: 7bit -Subject: [v2] arm64: dma-mapping: Fix dma_mapping_error() when bypassing - SWIOTLB -From: Robin Murphy -X-Patchwork-Id: 9537723 -Message-Id: <840027acb4750542003dff17b4a8902ba8972754.1485368348.git.robin.murphy@arm.com> -To: will.deacon@arm.com, - catalin.marinas@arm.com -Cc: Jisheng Zhang , arnd@arndb.de, - konrad.wilk@oracle.com, aaro.koskinen@iki.fi, stable@vger.kernel.org, - linux-rpi-kernel@lists.infradead.org, linux-arm-kernel@lists.infradead.org -Date: Wed, 25 Jan 2017 18:31:31 +0000 - -When bypassing SWIOTLB on small-memory systems, we need to avoid calling -into swiotlb_dma_mapping_error() in exactly the same way as we avoid -swiotlb_dma_supported(), because the former also relies on SWIOTLB state -being initialised. - -Under the assumptions for which we skip SWIOTLB, dma_map_{single,page}() -will only ever return the DMA-offset-adjusted physical address of the -page passed in, thus we can report success unconditionally. - -Fixes: b67a8b29df7e ("arm64: mm: only initialize swiotlb when necessary") -CC: stable@vger.kernel.org -CC: Jisheng Zhang -Reported-by: Aaro Koskinen -Signed-off-by: Robin Murphy -Tested-by: Aaro Koskinen ---- - -v2: Get the return value the right way round this time... After some - careful reasoning it really is that simple. - - arch/arm64/mm/dma-mapping.c | 9 ++++++++- - 1 file changed, 8 insertions(+), 1 deletion(-) - -diff --git a/arch/arm64/mm/dma-mapping.c b/arch/arm64/mm/dma-mapping.c -index e04082700bb1..1ffb7d5d299a 100644 ---- a/arch/arm64/mm/dma-mapping.c -+++ b/arch/arm64/mm/dma-mapping.c -@@ -352,6 +352,13 @@ static int __swiotlb_dma_supported(struct device *hwdev, u64 mask) - return 1; - } - -+static int __swiotlb_dma_mapping_error(struct device *hwdev, dma_addr_t addr) -+{ -+ if (swiotlb) -+ return swiotlb_dma_mapping_error(hwdev, addr); -+ return 0; -+} -+ - static struct dma_map_ops swiotlb_dma_ops = { - .alloc = __dma_alloc, - .free = __dma_free, -@@ -366,7 +373,7 @@ static struct dma_map_ops swiotlb_dma_ops = { - .sync_sg_for_cpu = __swiotlb_sync_sg_for_cpu, - .sync_sg_for_device = __swiotlb_sync_sg_for_device, - .dma_supported = __swiotlb_dma_supported, -- .mapping_error = swiotlb_dma_mapping_error, -+ .mapping_error = __swiotlb_dma_mapping_error, - }; - - static int __init atomic_pool_init(void) diff --git a/config-arm64 b/config-arm64 index 8cca6201c..ee6c77087 100644 --- a/config-arm64 +++ b/config-arm64 @@ -210,7 +210,7 @@ CONFIG_SUNXI_WATCHDOG=m CONFIG_MFD_SUN6I_PRCM=y CONFIG_IR_SUNXI=m CONFIG_MMC_SUNXI=m -CONFIG_RTC_DRV_SUN6I=m +CONFIG_RTC_DRV_SUN6I=y CONFIG_PWM_SUN4I=m # CONFIG_PHY_SUN4I_USB is not set # CONFIG_PHY_SUN9I_USB is not set diff --git a/config-armv7-generic b/config-armv7-generic index ffc6b526a..96a710c4f 100644 --- a/config-armv7-generic +++ b/config-armv7-generic @@ -226,7 +226,7 @@ CONFIG_MDIO_SUN4I=m CONFIG_DWMAC_SUNXI=m CONFIG_SUN4I_EMAC=m CONFIG_SUN8I_EMAC=m -CONFIG_RTC_DRV_SUN6I=m +CONFIG_RTC_DRV_SUN6I=y CONFIG_MTD_NAND_SUNXI=m CONFIG_SERIO_SUN4I_PS2=m CONFIG_KEYBOARD_SUN4I_LRADC=m diff --git a/ipc-shm-Fix-shmat-mmap-nil-page-protection.patch b/ipc-shm-Fix-shmat-mmap-nil-page-protection.patch deleted file mode 100644 index ad7b45436..000000000 --- a/ipc-shm-Fix-shmat-mmap-nil-page-protection.patch +++ /dev/null @@ -1,75 +0,0 @@ -From 95e91b831f87ac8e1f8ed50c14d709089b4e01b8 Mon Sep 17 00:00:00 2001 -From: Davidlohr Bueso -Date: Mon, 27 Feb 2017 14:28:24 -0800 -Subject: [PATCH] ipc/shm: Fix shmat mmap nil-page protection - -The issue is described here, with a nice testcase: - - https://bugzilla.kernel.org/show_bug.cgi?id=192931 - -The problem is that shmat() calls do_mmap_pgoff() with MAP_FIXED, and -the address rounded down to 0. For the regular mmap case, the -protection mentioned above is that the kernel gets to generate the -address -- arch_get_unmapped_area() will always check for MAP_FIXED and -return that address. So by the time we do security_mmap_addr(0) things -get funky for shmat(). - -The testcase itself shows that while a regular user crashes, root will -not have a problem attaching a nil-page. There are two possible fixes -to this. The first, and which this patch does, is to simply allow root -to crash as well -- this is also regular mmap behavior, ie when hacking -up the testcase and adding mmap(... |MAP_FIXED). While this approach -is the safer option, the second alternative is to ignore SHM_RND if the -rounded address is 0, thus only having MAP_SHARED flags. This makes the -behavior of shmat() identical to the mmap() case. The downside of this -is obviously user visible, but does make sense in that it maintains -semantics after the round-down wrt 0 address and mmap. - -Passes shm related ltp tests. - -Link: http://lkml.kernel.org/r/1486050195-18629-1-git-send-email-dave@stgolabs.net -Signed-off-by: Davidlohr Bueso -Reported-by: Gareth Evans -Cc: Manfred Spraul -Cc: Michael Kerrisk -Cc: -Signed-off-by: Andrew Morton -Signed-off-by: Linus Torvalds ---- - ipc/shm.c | 13 +++++++++---- - 1 file changed, 9 insertions(+), 4 deletions(-) - -diff --git a/ipc/shm.c b/ipc/shm.c -index d7805ac..06ea9ef 100644 ---- a/ipc/shm.c -+++ b/ipc/shm.c -@@ -1091,8 +1091,8 @@ SYSCALL_DEFINE3(shmctl, int, shmid, int, cmd, struct shmid_ds __user *, buf) - * "raddr" thing points to kernel space, and there has to be a wrapper around - * this. - */ --long do_shmat(int shmid, char __user *shmaddr, int shmflg, ulong *raddr, -- unsigned long shmlba) -+long do_shmat(int shmid, char __user *shmaddr, int shmflg, -+ ulong *raddr, unsigned long shmlba) - { - struct shmid_kernel *shp; - unsigned long addr; -@@ -1113,8 +1113,13 @@ long do_shmat(int shmid, char __user *shmaddr, int shmflg, ulong *raddr, - goto out; - else if ((addr = (ulong)shmaddr)) { - if (addr & (shmlba - 1)) { -- if (shmflg & SHM_RND) -- addr &= ~(shmlba - 1); /* round down */ -+ /* -+ * Round down to the nearest multiple of shmlba. -+ * For sane do_mmap_pgoff() parameters, avoid -+ * round downs that trigger nil-page and MAP_FIXED. -+ */ -+ if ((shmflg & SHM_RND) && addr >= shmlba) -+ addr &= ~(shmlba - 1); - else - #ifndef __ARCH_FORCE_SHMLBA - if (addr & ~PAGE_MASK) --- -2.9.3 - diff --git a/kernel.spec b/kernel.spec index 05b496915..c048d26ae 100644 --- a/kernel.spec +++ b/kernel.spec @@ -42,7 +42,7 @@ Summary: The Linux kernel # For non-released -rc kernels, this will be appended after the rcX and # gitX tags, so a 3 here would become part of release "0.rcX.gitX.3" # -%global baserelease 101 +%global baserelease 100 %global fedora_build %{baserelease} # base_sublevel is the kernel version we're starting with and patching @@ -54,7 +54,7 @@ Summary: The Linux kernel %if 0%{?released_kernel} # Do we have a -stable update to apply? -%define stable_update 13 +%define stable_update 14 # Set rpm version accordingly %if 0%{?stable_update} %define stablerev %{stable_update} @@ -513,8 +513,6 @@ Patch426: usb-phy-tegra-Add-38.4MHz-clock-table-entry.patch # Fix OMAP4 (pandaboard) Patch427: arm-revert-mmc-omap_hsmmc-Use-dma_request_chan-for-reque.patch -Patch428: arm64-dma-mapping-Fix-dma_mapping_error-when-bypassing-SWIOTLB.patch - # Not particularly happy we don't yet have a proper upstream resolution this is the right direction # https://www.spinics.net/lists/arm-kernel/msg535191.html Patch429: arm64-mm-Fix-memmap-to-be-initialized-for-the-entire-section.patch @@ -642,15 +640,9 @@ Patch855: kvm-fix-page-struct-leak-in-handle_vmon.patch Patch858: 1-2-media-cxusb-Use-a-dma-capable-buffer-also-for-reading.patch Patch859: 2-2-media-dvb-usb-firmware-don-t-do-DMA-on-stack.patch -#rhbz 1415397 -Patch861: w1-ds2490-USB-transfer-buffers-need-to-be-DMAable.patch - #rhbz 1422969 Patch862: rt2800-warning.patch -#CVE-2017-5669 rhbz 1427239 -Patch863: ipc-shm-Fix-shmat-mmap-nil-page-protection.patch - #CVE-2017-6353 rhbz 1428907 1428910 Patch864: sctp-deny-peeloff-operation-on-asocs-with-threads-sl.patch @@ -2185,6 +2177,9 @@ fi # # %changelog +* Mon Mar 13 2017 Laura Abbott - 4.9.14-100 +- Linux v4.9.14 + * Tue Mar 07 2017 Laura Abbott - 4.9.13-101 - Build for some CVEs diff --git a/sources b/sources index 91aa8d40f..765bb8c40 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ SHA512 (linux-4.9.tar.xz) = bf67ff812cc3cb7e5059e82cc5db0d9a7c5637f7ed9a42e4730c715bf7047c81ed3a571225f92a33ef0b6d65f35595bc32d773356646df2627da55e9bc7f1f1a SHA512 (perf-man-4.9.tar.gz) = d23bb3da1eadd6623fddbf4696948de7675f3dcf57c711a7427dd7ae111394f58d8f42752938bbea7cd219f1e7f6f116fc67a1c74f769711063940a065f37b99 -SHA512 (patch-4.9.13.xz) = d7956cc8a4ab11514789af4f1f7023268e4b003216766c153f0f09aac659aabda5de634b363d53f8daeddfcf5820619c5bca31ff5f9aeb187c1df016c05f68d5 +SHA512 (patch-4.9.14.xz) = 0bfb0f5e27081d96760884726cc44fa0dcb1c4f3658e8131de0a4d8b90689e95e8c2f3a0c95a165ae4a2c95b227392cd9249b3018d6242af4ee81a892edfc94f diff --git a/w1-ds2490-USB-transfer-buffers-need-to-be-DMAable.patch b/w1-ds2490-USB-transfer-buffers-need-to-be-DMAable.patch deleted file mode 100644 index 7e902b100..000000000 --- a/w1-ds2490-USB-transfer-buffers-need-to-be-DMAable.patch +++ /dev/null @@ -1,360 +0,0 @@ -From patchwork Wed Jan 18 20:31:11 2017 -Content-Type: text/plain; charset="utf-8" -MIME-Version: 1.0 -Content-Transfer-Encoding: 7bit -Subject: w1: ds2490: USB transfer buffers need to be DMAable -From: "Maciej S. Szmigiero" -X-Patchwork-Id: 9524693 -Message-Id: <5ba98814-d0b0-fbd4-d631-eda3472f4017@maciej.szmigiero.name> -To: Evgeniy Polyakov -Cc: linux-kernel -Date: Wed, 18 Jan 2017 21:31:11 +0100 - -ds2490 driver was doing USB transfers from / to buffers on a stack. -This is not permitted and made the driver non-working with vmapped stacks. - -Since all these transfers are done under the same bus_mutex lock we can -simply use shared buffers in a device private structure for two most common -of them. - -While we are at it, let's also fix a comparison between int and size_t in -ds9490r_search() which made the driver spin in this function if state -register get requests were failing. - -Signed-off-by: Maciej S. Szmigiero -Cc: stable@vger.kernel.org ---- - drivers/w1/masters/ds2490.c | 142 ++++++++++++++++++++++++++------------------ - 1 file changed, 84 insertions(+), 58 deletions(-) - -diff --git a/drivers/w1/masters/ds2490.c b/drivers/w1/masters/ds2490.c -index 049a884a756f..59d74d1b47a8 100644 ---- a/drivers/w1/masters/ds2490.c -+++ b/drivers/w1/masters/ds2490.c -@@ -153,6 +153,9 @@ struct ds_device - */ - u16 spu_bit; - -+ u8 st_buf[ST_SIZE]; -+ u8 byte_buf; -+ - struct w1_bus_master master; - }; - -@@ -174,7 +177,6 @@ struct ds_status - u8 data_in_buffer_status; - u8 reserved1; - u8 reserved2; -- - }; - - static struct usb_device_id ds_id_table [] = { -@@ -244,28 +246,6 @@ static int ds_send_control(struct ds_device *dev, u16 value, u16 index) - return err; - } - --static int ds_recv_status_nodump(struct ds_device *dev, struct ds_status *st, -- unsigned char *buf, int size) --{ -- int count, err; -- -- memset(st, 0, sizeof(*st)); -- -- count = 0; -- err = usb_interrupt_msg(dev->udev, usb_rcvintpipe(dev->udev, -- dev->ep[EP_STATUS]), buf, size, &count, 1000); -- if (err < 0) { -- pr_err("Failed to read 1-wire data from 0x%x: err=%d.\n", -- dev->ep[EP_STATUS], err); -- return err; -- } -- -- if (count >= sizeof(*st)) -- memcpy(st, buf, sizeof(*st)); -- -- return count; --} -- - static inline void ds_print_msg(unsigned char *buf, unsigned char *str, int off) - { - pr_info("%45s: %8x\n", str, buf[off]); -@@ -324,6 +304,35 @@ static void ds_dump_status(struct ds_device *dev, unsigned char *buf, int count) - } - } - -+static int ds_recv_status(struct ds_device *dev, struct ds_status *st, -+ bool dump) -+{ -+ int count, err; -+ -+ if (st) -+ memset(st, 0, sizeof(*st)); -+ -+ count = 0; -+ err = usb_interrupt_msg(dev->udev, -+ usb_rcvintpipe(dev->udev, -+ dev->ep[EP_STATUS]), -+ dev->st_buf, sizeof(dev->st_buf), -+ &count, 1000); -+ if (err < 0) { -+ pr_err("Failed to read 1-wire data from 0x%x: err=%d.\n", -+ dev->ep[EP_STATUS], err); -+ return err; -+ } -+ -+ if (dump) -+ ds_dump_status(dev, dev->st_buf, count); -+ -+ if (st && count >= sizeof(*st)) -+ memcpy(st, dev->st_buf, sizeof(*st)); -+ -+ return count; -+} -+ - static void ds_reset_device(struct ds_device *dev) - { - ds_send_control_cmd(dev, CTL_RESET_DEVICE, 0); -@@ -344,7 +353,6 @@ static void ds_reset_device(struct ds_device *dev) - static int ds_recv_data(struct ds_device *dev, unsigned char *buf, int size) - { - int count, err; -- struct ds_status st; - - /* Careful on size. If size is less than what is available in - * the input buffer, the device fails the bulk transfer and -@@ -359,14 +367,9 @@ static int ds_recv_data(struct ds_device *dev, unsigned char *buf, int size) - err = usb_bulk_msg(dev->udev, usb_rcvbulkpipe(dev->udev, dev->ep[EP_DATA_IN]), - buf, size, &count, 1000); - if (err < 0) { -- u8 buf[ST_SIZE]; -- int count; -- - pr_info("Clearing ep0x%x.\n", dev->ep[EP_DATA_IN]); - usb_clear_halt(dev->udev, usb_rcvbulkpipe(dev->udev, dev->ep[EP_DATA_IN])); -- -- count = ds_recv_status_nodump(dev, &st, buf, sizeof(buf)); -- ds_dump_status(dev, buf, count); -+ ds_recv_status(dev, NULL, true); - return err; - } - -@@ -404,7 +407,6 @@ int ds_stop_pulse(struct ds_device *dev, int limit) - { - struct ds_status st; - int count = 0, err = 0; -- u8 buf[ST_SIZE]; - - do { - err = ds_send_control(dev, CTL_HALT_EXE_IDLE, 0); -@@ -413,7 +415,7 @@ int ds_stop_pulse(struct ds_device *dev, int limit) - err = ds_send_control(dev, CTL_RESUME_EXE, 0); - if (err) - break; -- err = ds_recv_status_nodump(dev, &st, buf, sizeof(buf)); -+ err = ds_recv_status(dev, &st, false); - if (err) - break; - -@@ -456,18 +458,17 @@ int ds_detect(struct ds_device *dev, struct ds_status *st) - - static int ds_wait_status(struct ds_device *dev, struct ds_status *st) - { -- u8 buf[ST_SIZE]; - int err, count = 0; - - do { - st->status = 0; -- err = ds_recv_status_nodump(dev, st, buf, sizeof(buf)); -+ err = ds_recv_status(dev, st, false); - #if 0 - if (err >= 0) { - int i; - printk("0x%x: count=%d, status: ", dev->ep[EP_STATUS], err); - for (i=0; ist_buf[i]); - printk("\n"); - } - #endif -@@ -485,7 +486,7 @@ static int ds_wait_status(struct ds_device *dev, struct ds_status *st) - * can do something with it). - */ - if (err > 16 || count >= 100 || err < 0) -- ds_dump_status(dev, buf, err); -+ ds_dump_status(dev, dev->st_buf, err); - - /* Extended data isn't an error. Well, a short is, but the dump - * would have already told the user that and we can't do anything -@@ -608,7 +609,6 @@ static int ds_write_byte(struct ds_device *dev, u8 byte) - { - int err; - struct ds_status st; -- u8 rbyte; - - err = ds_send_control(dev, COMM_BYTE_IO | COMM_IM | dev->spu_bit, byte); - if (err) -@@ -621,11 +621,11 @@ static int ds_write_byte(struct ds_device *dev, u8 byte) - if (err) - return err; - -- err = ds_recv_data(dev, &rbyte, sizeof(rbyte)); -+ err = ds_recv_data(dev, &dev->byte_buf, 1); - if (err < 0) - return err; - -- return !(byte == rbyte); -+ return !(byte == dev->byte_buf); - } - - static int ds_read_byte(struct ds_device *dev, u8 *byte) -@@ -712,7 +712,6 @@ static void ds9490r_search(void *data, struct w1_master *master, - int err; - u16 value, index; - struct ds_status st; -- u8 st_buf[ST_SIZE]; - int search_limit; - int found = 0; - int i; -@@ -724,7 +723,12 @@ static void ds9490r_search(void *data, struct w1_master *master, - /* FIFO 128 bytes, bulk packet size 64, read a multiple of the - * packet size. - */ -- u64 buf[2*64/8]; -+ const size_t bufsize = 2 * 64; -+ u64 *buf; -+ -+ buf = kmalloc(bufsize, GFP_KERNEL); -+ if (!buf) -+ return; - - mutex_lock(&master->bus_mutex); - -@@ -745,10 +749,9 @@ static void ds9490r_search(void *data, struct w1_master *master, - do { - schedule_timeout(jtime); - -- if (ds_recv_status_nodump(dev, &st, st_buf, sizeof(st_buf)) < -- sizeof(st)) { -+ err = ds_recv_status(dev, &st, false); -+ if (err < 0 || err < sizeof(st)) - break; -- } - - if (st.data_in_buffer_status) { - /* Bulk in can receive partial ids, but when it does -@@ -758,7 +761,7 @@ static void ds9490r_search(void *data, struct w1_master *master, - * bulk without first checking if status says there - * is data to read. - */ -- err = ds_recv_data(dev, (u8 *)buf, sizeof(buf)); -+ err = ds_recv_data(dev, (u8 *)buf, bufsize); - if (err < 0) - break; - for (i = 0; i < err/8; ++i) { -@@ -794,9 +797,14 @@ static void ds9490r_search(void *data, struct w1_master *master, - } - search_out: - mutex_unlock(&master->bus_mutex); -+ kfree(buf); - } - - #if 0 -+/* -+ * FIXME: if this disabled code is ever used in the future all ds_send_data() -+ * calls must be changed to use a DMAable buffer. -+ */ - static int ds_match_access(struct ds_device *dev, u64 init) - { - int err; -@@ -845,13 +853,12 @@ static int ds_set_path(struct ds_device *dev, u64 init) - - static u8 ds9490r_touch_bit(void *data, u8 bit) - { -- u8 ret; - struct ds_device *dev = data; - -- if (ds_touch_bit(dev, bit, &ret)) -+ if (ds_touch_bit(dev, bit, &dev->byte_buf)) - return 0; - -- return ret; -+ return dev->byte_buf; - } - - #if 0 -@@ -866,13 +873,12 @@ static u8 ds9490r_read_bit(void *data) - { - struct ds_device *dev = data; - int err; -- u8 bit = 0; - -- err = ds_touch_bit(dev, 1, &bit); -+ err = ds_touch_bit(dev, 1, &dev->byte_buf); - if (err) - return 0; - -- return bit & 1; -+ return dev->byte_buf & 1; - } - #endif - -@@ -887,32 +893,52 @@ static u8 ds9490r_read_byte(void *data) - { - struct ds_device *dev = data; - int err; -- u8 byte = 0; - -- err = ds_read_byte(dev, &byte); -+ err = ds_read_byte(dev, &dev->byte_buf); - if (err) - return 0; - -- return byte; -+ return dev->byte_buf; - } - - static void ds9490r_write_block(void *data, const u8 *buf, int len) - { - struct ds_device *dev = data; -+ u8 *tbuf; -+ -+ if (len <= 0) -+ return; -+ -+ tbuf = kmalloc(len, GFP_KERNEL); -+ if (!tbuf) -+ return; - -- ds_write_block(dev, (u8 *)buf, len); -+ memcpy(tbuf, buf, len); -+ ds_write_block(dev, tbuf, len); -+ -+ kfree(tbuf); - } - - static u8 ds9490r_read_block(void *data, u8 *buf, int len) - { - struct ds_device *dev = data; - int err; -+ u8 *tbuf; - -- err = ds_read_block(dev, buf, len); -- if (err < 0) -+ if (len <= 0) -+ return 0; -+ -+ tbuf = kmalloc(len, GFP_KERNEL); -+ if (!tbuf) - return 0; - -- return len; -+ err = ds_read_block(dev, tbuf, len); -+ if (err >= 0) -+ memcpy(buf, tbuf, len); -+ -+ kfree(tbuf); -+ -+ return err >= 0 ? len : 0; - } - - static u8 ds9490r_reset(void *data) From 19e2c82e50dda48617a61f61324c666a74146466 Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Wed, 15 Mar 2017 08:24:54 -0500 Subject: [PATCH 219/275] CVE-2017-6874 Fix race condition in ucount.c (rhbz 1432429 1432430) --- kernel.spec | 6 ++ ...move-the-atomicity-from-ucount-count.patch | 89 +++++++++++++++++++ 2 files changed, 95 insertions(+) create mode 100644 ucount-Remove-the-atomicity-from-ucount-count.patch diff --git a/kernel.spec b/kernel.spec index c048d26ae..ffc33f3db 100644 --- a/kernel.spec +++ b/kernel.spec @@ -649,6 +649,9 @@ Patch864: sctp-deny-peeloff-operation-on-asocs-with-threads-sl.patch # CVE-2017-2636 rhbz 1430049 Patch668: 0001-tty-n_hdlc-get-rid-of-racy-n_hdlc.tbuf.patch +#CVE-2017-6874 rhbz 1432429 1432430 +Patch865: ucount-Remove-the-atomicity-from-ucount-count.patch + # END OF PATCH DEFINITIONS %endif @@ -2177,6 +2180,9 @@ fi # # %changelog +* Wed Mar 15 2017 Justin M. Forbes +- CVE-2017-6874 Fix race condition in ucount.c (rhbz 1432429 1432430) + * Mon Mar 13 2017 Laura Abbott - 4.9.14-100 - Linux v4.9.14 diff --git a/ucount-Remove-the-atomicity-from-ucount-count.patch b/ucount-Remove-the-atomicity-from-ucount-count.patch new file mode 100644 index 000000000..1b4e3c03f --- /dev/null +++ b/ucount-Remove-the-atomicity-from-ucount-count.patch @@ -0,0 +1,89 @@ +From 040757f738e13caaa9c5078bca79aa97e11dde88 Mon Sep 17 00:00:00 2001 +From: "Eric W. Biederman" +Date: Sun, 5 Mar 2017 15:03:22 -0600 +Subject: [PATCH] ucount: Remove the atomicity from ucount->count + +Always increment/decrement ucount->count under the ucounts_lock. The +increments are there already and moving the decrements there means the +locking logic of the code is simpler. This simplification in the +locking logic fixes a race between put_ucounts and get_ucounts that +could result in a use-after-free because the count could go zero then +be found by get_ucounts and then be freed by put_ucounts. + +A bug presumably this one was found by a combination of syzkaller and +KASAN. JongWhan Kim reported the syzkaller failure and Dmitry Vyukov +spotted the race in the code. + +Cc: stable@vger.kernel.org +Fixes: f6b2db1a3e8d ("userns: Make the count of user namespaces per user") +Reported-by: JongHwan Kim +Reported-by: Dmitry Vyukov +Reviewed-by: Andrei Vagin +Signed-off-by: "Eric W. Biederman" +--- + include/linux/user_namespace.h | 2 +- + kernel/ucount.c | 18 +++++++++++------- + 2 files changed, 12 insertions(+), 8 deletions(-) + +diff --git a/include/linux/user_namespace.h b/include/linux/user_namespace.h +index be76523..32354b4 100644 +--- a/include/linux/user_namespace.h ++++ b/include/linux/user_namespace.h +@@ -72,7 +72,7 @@ struct ucounts { + struct hlist_node node; + struct user_namespace *ns; + kuid_t uid; +- atomic_t count; ++ int count; + atomic_t ucount[UCOUNT_COUNTS]; + }; + +diff --git a/kernel/ucount.c b/kernel/ucount.c +index 62630a4..b4eeee0 100644 +--- a/kernel/ucount.c ++++ b/kernel/ucount.c +@@ -144,7 +144,7 @@ static struct ucounts *get_ucounts(struct user_namespace *ns, kuid_t uid) + + new->ns = ns; + new->uid = uid; +- atomic_set(&new->count, 0); ++ new->count = 0; + + spin_lock_irq(&ucounts_lock); + ucounts = find_ucounts(ns, uid, hashent); +@@ -155,8 +155,10 @@ static struct ucounts *get_ucounts(struct user_namespace *ns, kuid_t uid) + ucounts = new; + } + } +- if (!atomic_add_unless(&ucounts->count, 1, INT_MAX)) ++ if (ucounts->count == INT_MAX) + ucounts = NULL; ++ else ++ ucounts->count += 1; + spin_unlock_irq(&ucounts_lock); + return ucounts; + } +@@ -165,13 +167,15 @@ static void put_ucounts(struct ucounts *ucounts) + { + unsigned long flags; + +- if (atomic_dec_and_test(&ucounts->count)) { +- spin_lock_irqsave(&ucounts_lock, flags); ++ spin_lock_irqsave(&ucounts_lock, flags); ++ ucounts->count -= 1; ++ if (!ucounts->count) + hlist_del_init(&ucounts->node); +- spin_unlock_irqrestore(&ucounts_lock, flags); ++ else ++ ucounts = NULL; ++ spin_unlock_irqrestore(&ucounts_lock, flags); + +- kfree(ucounts); +- } ++ kfree(ucounts); + } + + static inline bool atomic_inc_below(atomic_t *v, int u) +-- +2.9.3 + From 2a1df92dfb98348f7e401b35508ce47fa5e9c8de Mon Sep 17 00:00:00 2001 From: Laura Abbott Date: Wed, 15 Mar 2017 07:58:32 -0700 Subject: [PATCH 220/275] Linux v4.9.15 --- ...y-n_hdlc-get-rid-of-racy-n_hdlc.tbuf.patch | 311 ------------------ kernel.spec | 8 +- sources | 2 +- 3 files changed, 5 insertions(+), 316 deletions(-) delete mode 100644 0001-tty-n_hdlc-get-rid-of-racy-n_hdlc.tbuf.patch diff --git a/0001-tty-n_hdlc-get-rid-of-racy-n_hdlc.tbuf.patch b/0001-tty-n_hdlc-get-rid-of-racy-n_hdlc.tbuf.patch deleted file mode 100644 index b6cd8b211..000000000 --- a/0001-tty-n_hdlc-get-rid-of-racy-n_hdlc.tbuf.patch +++ /dev/null @@ -1,311 +0,0 @@ -From 1dea7a8061ad9212f4464464a80d0dcd477eceab Mon Sep 17 00:00:00 2001 -From: Alexander Popov -Date: Tue, 28 Feb 2017 19:28:54 +0300 -Subject: [PATCH 1/1] tty: n_hdlc: get rid of racy n_hdlc.tbuf - -Currently N_HDLC line discipline uses a self-made singly linked list for -data buffers and has n_hdlc.tbuf pointer for buffer retransmitting after -an error. - -The commit be10eb7589337e5defbe214dae038a53dd21add8 -("tty: n_hdlc add buffer flushing") introduced racy access to n_hdlc.tbuf. -After tx error concurrent flush_tx_queue() and n_hdlc_send_frames() can put -one data buffer to tx_free_buf_list twice. That causes double free in -n_hdlc_release(). - -Let's use standard kernel linked list and get rid of n_hdlc.tbuf: -in case of tx error put current data buffer after the head of tx_buf_list. - -Signed-off-by: Alexander Popov ---- - drivers/tty/n_hdlc.c | 132 +++++++++++++++++++++++++++------------------------ - 1 file changed, 69 insertions(+), 63 deletions(-) - -diff --git a/drivers/tty/n_hdlc.c b/drivers/tty/n_hdlc.c -index eb27883..728c824 100644 ---- a/drivers/tty/n_hdlc.c -+++ b/drivers/tty/n_hdlc.c -@@ -114,7 +114,7 @@ - #define DEFAULT_TX_BUF_COUNT 3 - - struct n_hdlc_buf { -- struct n_hdlc_buf *link; -+ struct list_head list_item; - int count; - char buf[1]; - }; -@@ -122,8 +122,7 @@ struct n_hdlc_buf { - #define N_HDLC_BUF_SIZE (sizeof(struct n_hdlc_buf) + maxframe) - - struct n_hdlc_buf_list { -- struct n_hdlc_buf *head; -- struct n_hdlc_buf *tail; -+ struct list_head list; - int count; - spinlock_t spinlock; - }; -@@ -136,7 +135,6 @@ struct n_hdlc_buf_list { - * @backup_tty - TTY to use if tty gets closed - * @tbusy - reentrancy flag for tx wakeup code - * @woke_up - FIXME: describe this field -- * @tbuf - currently transmitting tx buffer - * @tx_buf_list - list of pending transmit frame buffers - * @rx_buf_list - list of received frame buffers - * @tx_free_buf_list - list unused transmit frame buffers -@@ -149,7 +147,6 @@ struct n_hdlc { - struct tty_struct *backup_tty; - int tbusy; - int woke_up; -- struct n_hdlc_buf *tbuf; - struct n_hdlc_buf_list tx_buf_list; - struct n_hdlc_buf_list rx_buf_list; - struct n_hdlc_buf_list tx_free_buf_list; -@@ -159,6 +156,8 @@ struct n_hdlc { - /* - * HDLC buffer list manipulation functions - */ -+static void n_hdlc_buf_return(struct n_hdlc_buf_list *buf_list, -+ struct n_hdlc_buf *buf); - static void n_hdlc_buf_put(struct n_hdlc_buf_list *list, - struct n_hdlc_buf *buf); - static struct n_hdlc_buf *n_hdlc_buf_get(struct n_hdlc_buf_list *list); -@@ -208,16 +207,9 @@ static void flush_tx_queue(struct tty_struct *tty) - { - struct n_hdlc *n_hdlc = tty2n_hdlc(tty); - struct n_hdlc_buf *buf; -- unsigned long flags; - - while ((buf = n_hdlc_buf_get(&n_hdlc->tx_buf_list))) - n_hdlc_buf_put(&n_hdlc->tx_free_buf_list, buf); -- spin_lock_irqsave(&n_hdlc->tx_buf_list.spinlock, flags); -- if (n_hdlc->tbuf) { -- n_hdlc_buf_put(&n_hdlc->tx_free_buf_list, n_hdlc->tbuf); -- n_hdlc->tbuf = NULL; -- } -- spin_unlock_irqrestore(&n_hdlc->tx_buf_list.spinlock, flags); - } - - static struct tty_ldisc_ops n_hdlc_ldisc = { -@@ -283,7 +275,6 @@ static void n_hdlc_release(struct n_hdlc *n_hdlc) - } else - break; - } -- kfree(n_hdlc->tbuf); - kfree(n_hdlc); - - } /* end of n_hdlc_release() */ -@@ -402,13 +393,7 @@ static void n_hdlc_send_frames(struct n_hdlc *n_hdlc, struct tty_struct *tty) - n_hdlc->woke_up = 0; - spin_unlock_irqrestore(&n_hdlc->tx_buf_list.spinlock, flags); - -- /* get current transmit buffer or get new transmit */ -- /* buffer from list of pending transmit buffers */ -- -- tbuf = n_hdlc->tbuf; -- if (!tbuf) -- tbuf = n_hdlc_buf_get(&n_hdlc->tx_buf_list); -- -+ tbuf = n_hdlc_buf_get(&n_hdlc->tx_buf_list); - while (tbuf) { - if (debuglevel >= DEBUG_LEVEL_INFO) - printk("%s(%d)sending frame %p, count=%d\n", -@@ -420,7 +405,7 @@ static void n_hdlc_send_frames(struct n_hdlc *n_hdlc, struct tty_struct *tty) - - /* rollback was possible and has been done */ - if (actual == -ERESTARTSYS) { -- n_hdlc->tbuf = tbuf; -+ n_hdlc_buf_return(&n_hdlc->tx_buf_list, tbuf); - break; - } - /* if transmit error, throw frame away by */ -@@ -435,10 +420,7 @@ static void n_hdlc_send_frames(struct n_hdlc *n_hdlc, struct tty_struct *tty) - - /* free current transmit buffer */ - n_hdlc_buf_put(&n_hdlc->tx_free_buf_list, tbuf); -- -- /* this tx buffer is done */ -- n_hdlc->tbuf = NULL; -- -+ - /* wait up sleeping writers */ - wake_up_interruptible(&tty->write_wait); - -@@ -448,10 +430,12 @@ static void n_hdlc_send_frames(struct n_hdlc *n_hdlc, struct tty_struct *tty) - if (debuglevel >= DEBUG_LEVEL_INFO) - printk("%s(%d)frame %p pending\n", - __FILE__,__LINE__,tbuf); -- -- /* buffer not accepted by driver */ -- /* set this buffer as pending buffer */ -- n_hdlc->tbuf = tbuf; -+ -+ /* -+ * the buffer was not accepted by driver, -+ * return it back into tx queue -+ */ -+ n_hdlc_buf_return(&n_hdlc->tx_buf_list, tbuf); - break; - } - } -@@ -749,7 +733,8 @@ static int n_hdlc_tty_ioctl(struct tty_struct *tty, struct file *file, - int error = 0; - int count; - unsigned long flags; -- -+ struct n_hdlc_buf *buf = NULL; -+ - if (debuglevel >= DEBUG_LEVEL_INFO) - printk("%s(%d)n_hdlc_tty_ioctl() called %d\n", - __FILE__,__LINE__,cmd); -@@ -763,8 +748,10 @@ static int n_hdlc_tty_ioctl(struct tty_struct *tty, struct file *file, - /* report count of read data available */ - /* in next available frame (if any) */ - spin_lock_irqsave(&n_hdlc->rx_buf_list.spinlock,flags); -- if (n_hdlc->rx_buf_list.head) -- count = n_hdlc->rx_buf_list.head->count; -+ buf = list_first_entry_or_null(&n_hdlc->rx_buf_list.list, -+ struct n_hdlc_buf, list_item); -+ if (buf) -+ count = buf->count; - else - count = 0; - spin_unlock_irqrestore(&n_hdlc->rx_buf_list.spinlock,flags); -@@ -776,8 +763,10 @@ static int n_hdlc_tty_ioctl(struct tty_struct *tty, struct file *file, - count = tty_chars_in_buffer(tty); - /* add size of next output frame in queue */ - spin_lock_irqsave(&n_hdlc->tx_buf_list.spinlock,flags); -- if (n_hdlc->tx_buf_list.head) -- count += n_hdlc->tx_buf_list.head->count; -+ buf = list_first_entry_or_null(&n_hdlc->tx_buf_list.list, -+ struct n_hdlc_buf, list_item); -+ if (buf) -+ count += buf->count; - spin_unlock_irqrestore(&n_hdlc->tx_buf_list.spinlock,flags); - error = put_user(count, (int __user *)arg); - break; -@@ -825,14 +814,14 @@ static unsigned int n_hdlc_tty_poll(struct tty_struct *tty, struct file *filp, - poll_wait(filp, &tty->write_wait, wait); - - /* set bits for operations that won't block */ -- if (n_hdlc->rx_buf_list.head) -+ if (!list_empty(&n_hdlc->rx_buf_list.list)) - mask |= POLLIN | POLLRDNORM; /* readable */ - if (test_bit(TTY_OTHER_CLOSED, &tty->flags)) - mask |= POLLHUP; - if (tty_hung_up_p(filp)) - mask |= POLLHUP; - if (!tty_is_writelocked(tty) && -- n_hdlc->tx_free_buf_list.head) -+ !list_empty(&n_hdlc->tx_free_buf_list.list)) - mask |= POLLOUT | POLLWRNORM; /* writable */ - } - return mask; -@@ -856,7 +845,12 @@ static struct n_hdlc *n_hdlc_alloc(void) - spin_lock_init(&n_hdlc->tx_free_buf_list.spinlock); - spin_lock_init(&n_hdlc->rx_buf_list.spinlock); - spin_lock_init(&n_hdlc->tx_buf_list.spinlock); -- -+ -+ INIT_LIST_HEAD(&n_hdlc->rx_free_buf_list.list); -+ INIT_LIST_HEAD(&n_hdlc->tx_free_buf_list.list); -+ INIT_LIST_HEAD(&n_hdlc->rx_buf_list.list); -+ INIT_LIST_HEAD(&n_hdlc->tx_buf_list.list); -+ - /* allocate free rx buffer list */ - for(i=0;ispinlock, flags); -+ -+ list_add(&buf->list_item, &buf_list->list); -+ buf_list->count++; -+ -+ spin_unlock_irqrestore(&buf_list->spinlock, flags); -+} -+ -+/** - * n_hdlc_buf_put - add specified HDLC buffer to tail of specified list -- * @list - pointer to buffer list -+ * @buf_list - pointer to buffer list - * @buf - pointer to buffer - */ --static void n_hdlc_buf_put(struct n_hdlc_buf_list *list, -+static void n_hdlc_buf_put(struct n_hdlc_buf_list *buf_list, - struct n_hdlc_buf *buf) - { - unsigned long flags; -- spin_lock_irqsave(&list->spinlock,flags); -- -- buf->link=NULL; -- if (list->tail) -- list->tail->link = buf; -- else -- list->head = buf; -- list->tail = buf; -- (list->count)++; -- -- spin_unlock_irqrestore(&list->spinlock,flags); -- -+ -+ spin_lock_irqsave(&buf_list->spinlock, flags); -+ -+ list_add_tail(&buf->list_item, &buf_list->list); -+ buf_list->count++; -+ -+ spin_unlock_irqrestore(&buf_list->spinlock, flags); - } /* end of n_hdlc_buf_put() */ - - /** - * n_hdlc_buf_get - remove and return an HDLC buffer from list -- * @list - pointer to HDLC buffer list -+ * @buf_list - pointer to HDLC buffer list - * - * Remove and return an HDLC buffer from the head of the specified HDLC buffer - * list. - * Returns a pointer to HDLC buffer if available, otherwise %NULL. - */ --static struct n_hdlc_buf* n_hdlc_buf_get(struct n_hdlc_buf_list *list) -+static struct n_hdlc_buf *n_hdlc_buf_get(struct n_hdlc_buf_list *buf_list) - { - unsigned long flags; - struct n_hdlc_buf *buf; -- spin_lock_irqsave(&list->spinlock,flags); -- -- buf = list->head; -+ -+ spin_lock_irqsave(&buf_list->spinlock, flags); -+ -+ buf = list_first_entry_or_null(&buf_list->list, -+ struct n_hdlc_buf, list_item); - if (buf) { -- list->head = buf->link; -- (list->count)--; -+ list_del(&buf->list_item); -+ buf_list->count--; - } -- if (!list->head) -- list->tail = NULL; -- -- spin_unlock_irqrestore(&list->spinlock,flags); -+ -+ spin_unlock_irqrestore(&buf_list->spinlock, flags); - return buf; -- - } /* end of n_hdlc_buf_get() */ - - static char hdlc_banner[] __initdata = --- -2.7.4 - diff --git a/kernel.spec b/kernel.spec index ffc33f3db..c9dcb1b9c 100644 --- a/kernel.spec +++ b/kernel.spec @@ -54,7 +54,7 @@ Summary: The Linux kernel %if 0%{?released_kernel} # Do we have a -stable update to apply? -%define stable_update 14 +%define stable_update 15 # Set rpm version accordingly %if 0%{?stable_update} %define stablerev %{stable_update} @@ -646,9 +646,6 @@ Patch862: rt2800-warning.patch #CVE-2017-6353 rhbz 1428907 1428910 Patch864: sctp-deny-peeloff-operation-on-asocs-with-threads-sl.patch -# CVE-2017-2636 rhbz 1430049 -Patch668: 0001-tty-n_hdlc-get-rid-of-racy-n_hdlc.tbuf.patch - #CVE-2017-6874 rhbz 1432429 1432430 Patch865: ucount-Remove-the-atomicity-from-ucount-count.patch @@ -2180,6 +2177,9 @@ fi # # %changelog +* Wed Mar 15 2017 Laura Abbott - 4.9.15-100 +- Linux v4.9.15 + * Wed Mar 15 2017 Justin M. Forbes - CVE-2017-6874 Fix race condition in ucount.c (rhbz 1432429 1432430) diff --git a/sources b/sources index 765bb8c40..4bba5a88f 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ SHA512 (linux-4.9.tar.xz) = bf67ff812cc3cb7e5059e82cc5db0d9a7c5637f7ed9a42e4730c715bf7047c81ed3a571225f92a33ef0b6d65f35595bc32d773356646df2627da55e9bc7f1f1a SHA512 (perf-man-4.9.tar.gz) = d23bb3da1eadd6623fddbf4696948de7675f3dcf57c711a7427dd7ae111394f58d8f42752938bbea7cd219f1e7f6f116fc67a1c74f769711063940a065f37b99 -SHA512 (patch-4.9.14.xz) = 0bfb0f5e27081d96760884726cc44fa0dcb1c4f3658e8131de0a4d8b90689e95e8c2f3a0c95a165ae4a2c95b227392cd9249b3018d6242af4ee81a892edfc94f +SHA512 (patch-4.9.15.xz) = 95fbeff3b6cba1e273ea889b96c7cc8750f85587b7abe8f5b6fd29aca10a0105dd8ec7bae9c6a65b1aa8f37a98a67d0cecebe4bf98430d1f0576c21d687d007f From 322208103196687ec356378012aa4c698749b6dc Mon Sep 17 00:00:00 2001 From: Laura Abbott Date: Mon, 20 Mar 2017 09:01:39 -0700 Subject: [PATCH 221/275] Linux v4.9.16 --- kernel.spec | 8 +- sources | 2 +- ...move-the-atomicity-from-ucount-count.patch | 89 ------------------- 3 files changed, 5 insertions(+), 94 deletions(-) delete mode 100644 ucount-Remove-the-atomicity-from-ucount-count.patch diff --git a/kernel.spec b/kernel.spec index c9dcb1b9c..d99640a09 100644 --- a/kernel.spec +++ b/kernel.spec @@ -54,7 +54,7 @@ Summary: The Linux kernel %if 0%{?released_kernel} # Do we have a -stable update to apply? -%define stable_update 15 +%define stable_update 16 # Set rpm version accordingly %if 0%{?stable_update} %define stablerev %{stable_update} @@ -646,9 +646,6 @@ Patch862: rt2800-warning.patch #CVE-2017-6353 rhbz 1428907 1428910 Patch864: sctp-deny-peeloff-operation-on-asocs-with-threads-sl.patch -#CVE-2017-6874 rhbz 1432429 1432430 -Patch865: ucount-Remove-the-atomicity-from-ucount-count.patch - # END OF PATCH DEFINITIONS %endif @@ -2177,6 +2174,9 @@ fi # # %changelog +* Mon Mar 20 2017 Laura Abbott - 4.9.16-100 +- Linux v4.9.16 + * Wed Mar 15 2017 Laura Abbott - 4.9.15-100 - Linux v4.9.15 diff --git a/sources b/sources index 4bba5a88f..8efca1363 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ SHA512 (linux-4.9.tar.xz) = bf67ff812cc3cb7e5059e82cc5db0d9a7c5637f7ed9a42e4730c715bf7047c81ed3a571225f92a33ef0b6d65f35595bc32d773356646df2627da55e9bc7f1f1a SHA512 (perf-man-4.9.tar.gz) = d23bb3da1eadd6623fddbf4696948de7675f3dcf57c711a7427dd7ae111394f58d8f42752938bbea7cd219f1e7f6f116fc67a1c74f769711063940a065f37b99 -SHA512 (patch-4.9.15.xz) = 95fbeff3b6cba1e273ea889b96c7cc8750f85587b7abe8f5b6fd29aca10a0105dd8ec7bae9c6a65b1aa8f37a98a67d0cecebe4bf98430d1f0576c21d687d007f +SHA512 (patch-4.9.16.xz) = ccb50acfc83ece070594773f6f3c0e43c349f2dc65e889d9f03752afb2a3b5c9db7e9d2c61da2c9d774dad7556f163ea9fdf2b3690e4e74ef669259520dbd65f diff --git a/ucount-Remove-the-atomicity-from-ucount-count.patch b/ucount-Remove-the-atomicity-from-ucount-count.patch deleted file mode 100644 index 1b4e3c03f..000000000 --- a/ucount-Remove-the-atomicity-from-ucount-count.patch +++ /dev/null @@ -1,89 +0,0 @@ -From 040757f738e13caaa9c5078bca79aa97e11dde88 Mon Sep 17 00:00:00 2001 -From: "Eric W. Biederman" -Date: Sun, 5 Mar 2017 15:03:22 -0600 -Subject: [PATCH] ucount: Remove the atomicity from ucount->count - -Always increment/decrement ucount->count under the ucounts_lock. The -increments are there already and moving the decrements there means the -locking logic of the code is simpler. This simplification in the -locking logic fixes a race between put_ucounts and get_ucounts that -could result in a use-after-free because the count could go zero then -be found by get_ucounts and then be freed by put_ucounts. - -A bug presumably this one was found by a combination of syzkaller and -KASAN. JongWhan Kim reported the syzkaller failure and Dmitry Vyukov -spotted the race in the code. - -Cc: stable@vger.kernel.org -Fixes: f6b2db1a3e8d ("userns: Make the count of user namespaces per user") -Reported-by: JongHwan Kim -Reported-by: Dmitry Vyukov -Reviewed-by: Andrei Vagin -Signed-off-by: "Eric W. Biederman" ---- - include/linux/user_namespace.h | 2 +- - kernel/ucount.c | 18 +++++++++++------- - 2 files changed, 12 insertions(+), 8 deletions(-) - -diff --git a/include/linux/user_namespace.h b/include/linux/user_namespace.h -index be76523..32354b4 100644 ---- a/include/linux/user_namespace.h -+++ b/include/linux/user_namespace.h -@@ -72,7 +72,7 @@ struct ucounts { - struct hlist_node node; - struct user_namespace *ns; - kuid_t uid; -- atomic_t count; -+ int count; - atomic_t ucount[UCOUNT_COUNTS]; - }; - -diff --git a/kernel/ucount.c b/kernel/ucount.c -index 62630a4..b4eeee0 100644 ---- a/kernel/ucount.c -+++ b/kernel/ucount.c -@@ -144,7 +144,7 @@ static struct ucounts *get_ucounts(struct user_namespace *ns, kuid_t uid) - - new->ns = ns; - new->uid = uid; -- atomic_set(&new->count, 0); -+ new->count = 0; - - spin_lock_irq(&ucounts_lock); - ucounts = find_ucounts(ns, uid, hashent); -@@ -155,8 +155,10 @@ static struct ucounts *get_ucounts(struct user_namespace *ns, kuid_t uid) - ucounts = new; - } - } -- if (!atomic_add_unless(&ucounts->count, 1, INT_MAX)) -+ if (ucounts->count == INT_MAX) - ucounts = NULL; -+ else -+ ucounts->count += 1; - spin_unlock_irq(&ucounts_lock); - return ucounts; - } -@@ -165,13 +167,15 @@ static void put_ucounts(struct ucounts *ucounts) - { - unsigned long flags; - -- if (atomic_dec_and_test(&ucounts->count)) { -- spin_lock_irqsave(&ucounts_lock, flags); -+ spin_lock_irqsave(&ucounts_lock, flags); -+ ucounts->count -= 1; -+ if (!ucounts->count) - hlist_del_init(&ucounts->node); -- spin_unlock_irqrestore(&ucounts_lock, flags); -+ else -+ ucounts = NULL; -+ spin_unlock_irqrestore(&ucounts_lock, flags); - -- kfree(ucounts); -- } -+ kfree(ucounts); - } - - static inline bool atomic_inc_below(atomic_t *v, int u) --- -2.9.3 - From 2f378031b2ceccf8969f78a14957947fc4ed2c6b Mon Sep 17 00:00:00 2001 From: Laura Abbott Date: Wed, 22 Mar 2017 08:05:21 -0700 Subject: [PATCH 222/275] Linux v4.9.17 --- config-arm64 | 1 + kernel.spec | 5 ++++- sources | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/config-arm64 b/config-arm64 index ee6c77087..cac7bd121 100644 --- a/config-arm64 +++ b/config-arm64 @@ -298,6 +298,7 @@ CONFIG_QCOM_COINCELL=m # CONFIG_QCOM_WCNSS_PIL is not set # CONFIG_QCOM_EBI2 is not set # CONFIG_QCOM_TSENS is not set +# CONFIG_QCOM_QDF2400_ERRATUM_0065 is not set # mvebu # CONFIG_MV_XOR_V2 is not set diff --git a/kernel.spec b/kernel.spec index d99640a09..672c9229c 100644 --- a/kernel.spec +++ b/kernel.spec @@ -54,7 +54,7 @@ Summary: The Linux kernel %if 0%{?released_kernel} # Do we have a -stable update to apply? -%define stable_update 16 +%define stable_update 17 # Set rpm version accordingly %if 0%{?stable_update} %define stablerev %{stable_update} @@ -2174,6 +2174,9 @@ fi # # %changelog +* Wed Mar 22 2017 Laura Abbott - 4.9.17-100 +- Linux v4.9.17 + * Mon Mar 20 2017 Laura Abbott - 4.9.16-100 - Linux v4.9.16 diff --git a/sources b/sources index 8efca1363..7be91bb96 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ SHA512 (linux-4.9.tar.xz) = bf67ff812cc3cb7e5059e82cc5db0d9a7c5637f7ed9a42e4730c715bf7047c81ed3a571225f92a33ef0b6d65f35595bc32d773356646df2627da55e9bc7f1f1a SHA512 (perf-man-4.9.tar.gz) = d23bb3da1eadd6623fddbf4696948de7675f3dcf57c711a7427dd7ae111394f58d8f42752938bbea7cd219f1e7f6f116fc67a1c74f769711063940a065f37b99 -SHA512 (patch-4.9.16.xz) = ccb50acfc83ece070594773f6f3c0e43c349f2dc65e889d9f03752afb2a3b5c9db7e9d2c61da2c9d774dad7556f163ea9fdf2b3690e4e74ef669259520dbd65f +SHA512 (patch-4.9.17.xz) = 56a06c844a57539d6d719a6e99804a13e6b097b0220bd2ce2b915c1d896c6c2f0eebc14c05a5726df7ed9ee9946c6457c5a755f04f90e658b0077502f829f4ca From b915c3fde429a5dc7a99b7d05b56b8adfe2ac8f0 Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Mon, 27 Mar 2017 10:54:31 -0500 Subject: [PATCH 223/275] Linux v4.10.6 rebase --- ...-dma-capable-buffer-also-for-reading.patch | 63 - ...b-usb-firmware-don-t-do-DMA-on-stack.patch | 86 - ACPI-Limit-access-to-custom_method.patch | 31 - ...r-requirement-from-Samsung-platforms.patch | 88 - Add-EFI-signature-data-types.patch | 18 +- ...signature-blob-parser-and-key-loader.patch | 14 +- ...tomatically-enforce-module-signature.patch | 217 - Add-secure_modules-call.patch | 63 - ...q-option-to-disable-secure-boot-mode.patch | 246 - Armada-trace-build-fix.patch | 20 + ...ft-Add-Surface-4-type-cover-pro-4-JP.patch | 76 - KEYS-Add-a-system-blacklist-keyring.patch | 10 +- ...t-certificates-from-UEFI-Secure-Boot.patch | 2 +- ...-Support-not-importing-certs-from-db.patch | 8 +- Makefile | 93 +- Makefile.config | 129 - Makefile.release | 85 - ...R-access-when-module-security-is-ena.patch | 117 - ...-and-dev-kmem-when-module-loading-is.patch | 43 - ..._rsdp-kernel-parameter-when-module-l.patch | 39 - arm-imx6-hummingboard2.patch | 733 ++ arm64-ACPI-parse-SPCR-table.patch | 596 -- arm64-pcie-quirks.patch | 977 --- ...t-debugfs-interface-when-module-load.patch | 54 - baseconfig/CONFIG_60XX_WDT | 1 + baseconfig/CONFIG_6LOWPAN | 1 + baseconfig/CONFIG_6LOWPAN_DEBUGFS | 1 + baseconfig/CONFIG_6LOWPAN_GHC_EXT_HDR_DEST | 1 + baseconfig/CONFIG_6LOWPAN_GHC_EXT_HDR_FRAG | 1 + baseconfig/CONFIG_6LOWPAN_GHC_EXT_HDR_HOP | 1 + baseconfig/CONFIG_6LOWPAN_GHC_EXT_HDR_ROUTE | 1 + baseconfig/CONFIG_6LOWPAN_GHC_ICMPV6 | 1 + baseconfig/CONFIG_6LOWPAN_GHC_UDP | 1 + baseconfig/CONFIG_6LOWPAN_NHC | 1 + baseconfig/CONFIG_6LOWPAN_NHC_DEST | 1 + baseconfig/CONFIG_6LOWPAN_NHC_FRAGMENT | 1 + baseconfig/CONFIG_6LOWPAN_NHC_HOP | 1 + baseconfig/CONFIG_6LOWPAN_NHC_IPV6 | 1 + baseconfig/CONFIG_6LOWPAN_NHC_MOBILITY | 1 + baseconfig/CONFIG_6LOWPAN_NHC_ROUTING | 1 + baseconfig/CONFIG_6LOWPAN_NHC_UDP | 1 + baseconfig/CONFIG_6PACK | 1 + baseconfig/CONFIG_8139CP | 1 + baseconfig/CONFIG_8139TOO | 1 + baseconfig/CONFIG_8139TOO_8129 | 1 + baseconfig/CONFIG_8139TOO_PIO | 1 + baseconfig/CONFIG_8139TOO_TUNE_TWISTER | 1 + baseconfig/CONFIG_8139_OLD_RX_RESET | 1 + baseconfig/CONFIG_8723AU_AP_MODE | 1 + baseconfig/CONFIG_8723AU_BT_COEXIST | 1 + baseconfig/CONFIG_9P_FS | 1 + baseconfig/CONFIG_9P_FSCACHE | 1 + baseconfig/CONFIG_9P_FS_POSIX_ACL | 1 + baseconfig/CONFIG_9P_FS_SECURITY | 1 + baseconfig/CONFIG_A11Y_BRAILLE_CONSOLE | 1 + baseconfig/CONFIG_AB3100_CORE | 1 + baseconfig/CONFIG_AB3100_OTP | 1 + baseconfig/CONFIG_ABP060MG | 1 + baseconfig/CONFIG_ABX500_CORE | 1 + baseconfig/CONFIG_ACCESSIBILITY | 1 + baseconfig/CONFIG_ACENIC | 1 + baseconfig/CONFIG_ACENIC_OMIT_TIGON_I | 1 + baseconfig/CONFIG_ACORN_PARTITION | 1 + baseconfig/CONFIG_ACPI_ALS | 1 + baseconfig/CONFIG_ACPI_DEBUG | 1 + baseconfig/CONFIG_ACPI_DEBUGGER | 1 + baseconfig/CONFIG_ACPI_NFIT | 1 + baseconfig/CONFIG_ACPI_PCI_SLOT | 1 + baseconfig/CONFIG_ACQUIRE_WDT | 1 + baseconfig/CONFIG_ACT200L_DONGLE | 1 + baseconfig/CONFIG_ACTISYS_DONGLE | 1 + baseconfig/CONFIG_AD2S1200 | 1 + baseconfig/CONFIG_AD2S1210 | 1 + baseconfig/CONFIG_AD2S90 | 1 + baseconfig/CONFIG_AD5064 | 1 + baseconfig/CONFIG_AD525X_DPOT | 1 + baseconfig/CONFIG_AD5360 | 1 + baseconfig/CONFIG_AD5380 | 1 + baseconfig/CONFIG_AD5421 | 1 + baseconfig/CONFIG_AD5446 | 1 + baseconfig/CONFIG_AD5449 | 1 + baseconfig/CONFIG_AD5504 | 1 + baseconfig/CONFIG_AD5592R | 1 + baseconfig/CONFIG_AD5593R | 1 + baseconfig/CONFIG_AD5624R_SPI | 1 + baseconfig/CONFIG_AD5686 | 1 + baseconfig/CONFIG_AD5755 | 1 + baseconfig/CONFIG_AD5761 | 1 + baseconfig/CONFIG_AD5764 | 1 + baseconfig/CONFIG_AD5791 | 1 + baseconfig/CONFIG_AD5933 | 1 + baseconfig/CONFIG_AD7150 | 1 + baseconfig/CONFIG_AD7152 | 1 + baseconfig/CONFIG_AD7192 | 1 + baseconfig/CONFIG_AD7266 | 1 + baseconfig/CONFIG_AD7280 | 1 + baseconfig/CONFIG_AD7291 | 1 + baseconfig/CONFIG_AD7298 | 1 + baseconfig/CONFIG_AD7303 | 1 + baseconfig/CONFIG_AD7476 | 1 + baseconfig/CONFIG_AD7606 | 1 + baseconfig/CONFIG_AD7746 | 1 + baseconfig/CONFIG_AD7766 | 1 + baseconfig/CONFIG_AD7780 | 1 + baseconfig/CONFIG_AD7791 | 1 + baseconfig/CONFIG_AD7793 | 1 + baseconfig/CONFIG_AD7816 | 1 + baseconfig/CONFIG_AD7887 | 1 + baseconfig/CONFIG_AD7923 | 1 + baseconfig/CONFIG_AD799X | 1 + baseconfig/CONFIG_AD8366 | 1 + baseconfig/CONFIG_AD8801 | 1 + baseconfig/CONFIG_AD9523 | 1 + baseconfig/CONFIG_AD9832 | 1 + baseconfig/CONFIG_AD9834 | 1 + baseconfig/CONFIG_ADAPTEC_STARFIRE | 1 + baseconfig/CONFIG_ADE7753 | 1 + baseconfig/CONFIG_ADE7754 | 1 + baseconfig/CONFIG_ADE7758 | 1 + baseconfig/CONFIG_ADE7759 | 1 + baseconfig/CONFIG_ADE7854 | 1 + baseconfig/CONFIG_ADF4350 | 1 + baseconfig/CONFIG_ADFS_FS | 1 + baseconfig/CONFIG_ADIS16060 | 1 + baseconfig/CONFIG_ADIS16080 | 1 + baseconfig/CONFIG_ADIS16130 | 1 + baseconfig/CONFIG_ADIS16136 | 1 + baseconfig/CONFIG_ADIS16201 | 1 + baseconfig/CONFIG_ADIS16203 | 1 + baseconfig/CONFIG_ADIS16209 | 1 + baseconfig/CONFIG_ADIS16240 | 1 + baseconfig/CONFIG_ADIS16260 | 1 + baseconfig/CONFIG_ADIS16400 | 1 + baseconfig/CONFIG_ADIS16480 | 1 + baseconfig/CONFIG_ADJD_S311 | 1 + baseconfig/CONFIG_ADM8211 | 1 + baseconfig/CONFIG_ADT7316 | 1 + baseconfig/CONFIG_ADVANTECH_WDT | 1 + baseconfig/CONFIG_ADXRS450 | 1 + baseconfig/CONFIG_AFE4403 | 1 + baseconfig/CONFIG_AFE4404 | 1 + baseconfig/CONFIG_AFFS_FS | 1 + baseconfig/CONFIG_AFS_FS | 1 + baseconfig/CONFIG_AF_KCM | 1 + baseconfig/CONFIG_AF_RXRPC | 1 + baseconfig/CONFIG_AHCI_CEVA | 1 + baseconfig/CONFIG_AHCI_QORIQ | 1 + baseconfig/CONFIG_AIC79XX_BUILD_FIRMWARE | 1 + baseconfig/CONFIG_AIC79XX_CMDS_PER_DEVICE | 1 + baseconfig/CONFIG_AIC79XX_DEBUG_ENABLE | 1 + baseconfig/CONFIG_AIC79XX_DEBUG_MASK | 1 + baseconfig/CONFIG_AIC79XX_REG_PRETTY_PRINT | 1 + baseconfig/CONFIG_AIC79XX_RESET_DELAY_MS | 1 + baseconfig/CONFIG_AIC7XXX_BUILD_FIRMWARE | 1 + baseconfig/CONFIG_AIC7XXX_CMDS_PER_DEVICE | 1 + baseconfig/CONFIG_AIC7XXX_DEBUG_ENABLE | 1 + baseconfig/CONFIG_AIC7XXX_DEBUG_MASK | 1 + baseconfig/CONFIG_AIC7XXX_REG_PRETTY_PRINT | 1 + baseconfig/CONFIG_AIC7XXX_RESET_DELAY_MS | 1 + baseconfig/CONFIG_AIRO | 1 + baseconfig/CONFIG_AIRO_CS | 1 + baseconfig/CONFIG_AIX_PARTITION | 1 + baseconfig/CONFIG_AK09911 | 1 + baseconfig/CONFIG_AK8974 | 1 + baseconfig/CONFIG_AK8975 | 1 + baseconfig/CONFIG_AL3320A | 1 + baseconfig/CONFIG_ALIM1535_WDT | 1 + baseconfig/CONFIG_ALIM7101_WDT | 1 + baseconfig/CONFIG_ALI_FIR | 1 + baseconfig/CONFIG_ALTERA_MBOX | 1 + baseconfig/CONFIG_ALTERA_STAPL | 1 + baseconfig/CONFIG_ALTERA_TSE | 1 + baseconfig/CONFIG_ALX | 1 + baseconfig/CONFIG_AM2315 | 1 + baseconfig/CONFIG_AMD8111_ETH | 1 + baseconfig/CONFIG_AMD_PHY | 1 + baseconfig/CONFIG_AMD_XGBE | 1 + baseconfig/CONFIG_AMD_XGBE_DCB | 1 + baseconfig/CONFIG_AMIGA_PARTITION | 1 + baseconfig/CONFIG_ANDROID | 1 + baseconfig/CONFIG_APDS9300 | 1 + baseconfig/CONFIG_APDS9802ALS | 1 + baseconfig/CONFIG_APDS9960 | 1 + baseconfig/CONFIG_APM_POWER | 1 + baseconfig/CONFIG_APPLE_PROPERTIES | 1 + baseconfig/CONFIG_APPLICOM | 1 + baseconfig/CONFIG_AQUANTIA_PHY | 1 + baseconfig/CONFIG_AR5523 | 1 + baseconfig/CONFIG_ARCH_TEGRA_186_SOC | 1 + baseconfig/CONFIG_ARCNET | 1 + baseconfig/CONFIG_ARM64_PTDUMP | 1 + baseconfig/CONFIG_ARM_SCPI_PROTOCOL | 1 + baseconfig/CONFIG_AS3935 | 1 + baseconfig/CONFIG_ASYNC_RAID6_TEST | 1 + baseconfig/CONFIG_ASYNC_TX_DMA | 1 + baseconfig/CONFIG_AT76C50X_USB | 1 + baseconfig/CONFIG_AT803X_PHY | 1 + baseconfig/CONFIG_ATA | 1 + baseconfig/CONFIG_ATALK | 1 + baseconfig/CONFIG_ATARI_PARTITION | 1 + baseconfig/CONFIG_ATA_ACPI | 1 + baseconfig/CONFIG_ATA_BMDMA | 1 + baseconfig/CONFIG_ATA_GENERIC | 1 + baseconfig/CONFIG_ATA_OVER_ETH | 1 + baseconfig/CONFIG_ATA_PIIX | 1 + baseconfig/CONFIG_ATA_SFF | 1 + baseconfig/CONFIG_ATA_VERBOSE_ERROR | 1 + baseconfig/CONFIG_ATH10K | 1 + baseconfig/CONFIG_ATH10K_AHB | 1 + baseconfig/CONFIG_ATH10K_DEBUG | 1 + baseconfig/CONFIG_ATH10K_DEBUGFS | 1 + baseconfig/CONFIG_ATH10K_PCI | 1 + baseconfig/CONFIG_ATH10K_TRACING | 1 + baseconfig/CONFIG_ATH5K | 1 + baseconfig/CONFIG_ATH5K_DEBUG | 1 + baseconfig/CONFIG_ATH5K_TRACER | 1 + baseconfig/CONFIG_ATH6KL | 1 + baseconfig/CONFIG_ATH6KL_DEBUG | 1 + baseconfig/CONFIG_ATH6KL_SDIO | 1 + baseconfig/CONFIG_ATH6KL_TRACING | 1 + baseconfig/CONFIG_ATH6KL_USB | 1 + baseconfig/CONFIG_ATH9K | 1 + baseconfig/CONFIG_ATH9K_AHB | 1 + baseconfig/CONFIG_ATH9K_BTCOEX_SUPPORT | 1 + baseconfig/CONFIG_ATH9K_CHANNEL_CONTEXT | 1 + baseconfig/CONFIG_ATH9K_DEBUG | 1 + baseconfig/CONFIG_ATH9K_DEBUGFS | 1 + baseconfig/CONFIG_ATH9K_DYNACK | 1 + baseconfig/CONFIG_ATH9K_HTC | 1 + baseconfig/CONFIG_ATH9K_HTC_DEBUGFS | 1 + baseconfig/CONFIG_ATH9K_HWRNG | 1 + baseconfig/CONFIG_ATH9K_PCI | 1 + baseconfig/CONFIG_ATH9K_STATION_STATISTICS | 1 + baseconfig/CONFIG_ATH9K_WOW | 1 + baseconfig/CONFIG_ATH_COMMON | 1 + baseconfig/CONFIG_ATH_DEBUG | 1 + baseconfig/CONFIG_ATH_TRACEPOINTS | 1 + baseconfig/CONFIG_ATL1 | 1 + baseconfig/CONFIG_ATL1C | 1 + baseconfig/CONFIG_ATL1E | 1 + baseconfig/CONFIG_ATL2 | 1 + baseconfig/CONFIG_ATLAS_PH_SENSOR | 1 + baseconfig/CONFIG_ATM | 1 + baseconfig/CONFIG_ATMEL | 1 + baseconfig/CONFIG_ATM_AMBASSADOR | 1 + baseconfig/CONFIG_ATM_AMBASSADOR_DEBUG | 1 + baseconfig/CONFIG_ATM_BR2684 | 1 + baseconfig/CONFIG_ATM_BR2684_IPFILTER | 1 + baseconfig/CONFIG_ATM_CLIP | 1 + baseconfig/CONFIG_ATM_CLIP_NO_ICMP | 1 + baseconfig/CONFIG_ATM_DRIVERS | 1 + baseconfig/CONFIG_ATM_DUMMY | 1 + baseconfig/CONFIG_ATM_ENI | 1 + baseconfig/CONFIG_ATM_ENI_DEBUG | 1 + baseconfig/CONFIG_ATM_ENI_TUNE_BURST | 1 + baseconfig/CONFIG_ATM_FIRESTREAM | 1 + baseconfig/CONFIG_ATM_FORE200E | 1 + baseconfig/CONFIG_ATM_FORE200E_DEBUG | 1 + baseconfig/CONFIG_ATM_FORE200E_TX_RETRY | 1 + baseconfig/CONFIG_ATM_FORE200E_USE_TASKLET | 1 + baseconfig/CONFIG_ATM_HE | 1 + baseconfig/CONFIG_ATM_HE_USE_SUNI | 1 + baseconfig/CONFIG_ATM_HORIZON | 1 + baseconfig/CONFIG_ATM_HORIZON_DEBUG | 1 + baseconfig/CONFIG_ATM_IA | 1 + baseconfig/CONFIG_ATM_IA_DEBUG | 1 + baseconfig/CONFIG_ATM_IDT77252 | 1 + baseconfig/CONFIG_ATM_IDT77252_DEBUG | 1 + baseconfig/CONFIG_ATM_IDT77252_RCV_ALL | 1 + baseconfig/CONFIG_ATM_LANAI | 1 + baseconfig/CONFIG_ATM_LANE | 1 + baseconfig/CONFIG_ATM_MPOA | 1 + baseconfig/CONFIG_ATM_NICSTAR | 1 + baseconfig/CONFIG_ATM_NICSTAR_USE_IDT77105 | 1 + baseconfig/CONFIG_ATM_NICSTAR_USE_SUNI | 1 + baseconfig/CONFIG_ATM_SOLOS | 1 + baseconfig/CONFIG_ATM_TCP | 1 + baseconfig/CONFIG_ATM_ZATM | 1 + baseconfig/CONFIG_ATM_ZATM_DEBUG | 1 + baseconfig/CONFIG_ATOMIC64_SELFTEST | 1 + baseconfig/CONFIG_ATP | 1 + baseconfig/CONFIG_AUDIT | 1 + baseconfig/CONFIG_AUDITSYSCALL | 1 + baseconfig/CONFIG_AUTOFS4_FS | 1 + baseconfig/CONFIG_AUXDISPLAY | 1 + baseconfig/CONFIG_AVERAGE | 1 + baseconfig/CONFIG_AX25 | 1 + baseconfig/CONFIG_AX25_DAMA_SLAVE | 1 + baseconfig/CONFIG_B43 | 1 + baseconfig/CONFIG_B43LEGACY | 1 + baseconfig/CONFIG_B43LEGACY_DEBUG | 1 + baseconfig/CONFIG_B43LEGACY_DMA | 1 + baseconfig/CONFIG_B43LEGACY_DMA_AND_PIO_MODE | 1 + baseconfig/CONFIG_B43LEGACY_DMA_MODE | 1 + baseconfig/CONFIG_B43LEGACY_PIO | 1 + baseconfig/CONFIG_B43LEGACY_PIO_MODE | 1 + baseconfig/CONFIG_B43_BCMA | 1 + baseconfig/CONFIG_B43_BCMA_PIO | 1 + baseconfig/CONFIG_B43_DEBUG | 1 + baseconfig/CONFIG_B43_PHY_G | 1 + baseconfig/CONFIG_B43_PHY_HT | 1 + baseconfig/CONFIG_B43_PHY_LP | 1 + baseconfig/CONFIG_B43_PHY_N | 1 + baseconfig/CONFIG_B43_SDIO | 1 + baseconfig/CONFIG_B44 | 1 + baseconfig/CONFIG_B44_PCI | 1 + baseconfig/CONFIG_B53 | 1 + baseconfig/CONFIG_B53_MDIO_DRIVER | 1 + baseconfig/CONFIG_B53_MMAP_DRIVER | 1 + baseconfig/CONFIG_B53_SPI_DRIVER | 1 + baseconfig/CONFIG_B53_SRAB_DRIVER | 1 + baseconfig/CONFIG_BACKLIGHT_ADP8860 | 1 + baseconfig/CONFIG_BACKLIGHT_ADP8870 | 1 + baseconfig/CONFIG_BACKLIGHT_BD6107 | 1 + baseconfig/CONFIG_BACKLIGHT_CLASS_DEVICE | 1 + baseconfig/CONFIG_BACKLIGHT_GENERIC | 1 + baseconfig/CONFIG_BACKLIGHT_GPIO | 1 + baseconfig/CONFIG_BACKLIGHT_LCD_SUPPORT | 1 + baseconfig/CONFIG_BACKLIGHT_LM3630 | 1 + baseconfig/CONFIG_BACKLIGHT_LM3630A | 1 + baseconfig/CONFIG_BACKLIGHT_LM3639 | 1 + baseconfig/CONFIG_BACKLIGHT_LP855X | 1 + baseconfig/CONFIG_BACKLIGHT_LV5207LP | 1 + baseconfig/CONFIG_BACKLIGHT_PM8941_WLED | 1 + baseconfig/CONFIG_BACKLIGHT_PWM | 1 + baseconfig/CONFIG_BACKLIGHT_SAHARA | 1 + baseconfig/CONFIG_BACKLIGHT_WM831X | 1 + baseconfig/CONFIG_BACKTRACE_SELF_TEST | 1 + baseconfig/CONFIG_BALLOON_COMPACTION | 1 + baseconfig/CONFIG_BATMAN_ADV | 1 + baseconfig/CONFIG_BATMAN_ADV_BATMAN_V | 1 + baseconfig/CONFIG_BATMAN_ADV_BLA | 1 + baseconfig/CONFIG_BATMAN_ADV_DAT | 1 + baseconfig/CONFIG_BATMAN_ADV_DEBUG | 1 + baseconfig/CONFIG_BATMAN_ADV_DEBUGFS | 1 + baseconfig/CONFIG_BATMAN_ADV_MCAST | 1 + baseconfig/CONFIG_BATMAN_ADV_NC | 1 + baseconfig/CONFIG_BATTERY_BQ27XXX | 1 + baseconfig/CONFIG_BATTERY_DS2760 | 1 + baseconfig/CONFIG_BATTERY_DS2780 | 1 + baseconfig/CONFIG_BATTERY_DS2781 | 1 + baseconfig/CONFIG_BATTERY_DS2782 | 1 + baseconfig/CONFIG_BATTERY_GAUGE_LTC2941 | 1 + baseconfig/CONFIG_BATTERY_GOLDFISH | 1 + baseconfig/CONFIG_BATTERY_MAX17040 | 1 + baseconfig/CONFIG_BATTERY_MAX17042 | 1 + baseconfig/CONFIG_BATTERY_SBS | 1 + baseconfig/CONFIG_BAYCOM_EPP | 1 + baseconfig/CONFIG_BAYCOM_PAR | 1 + baseconfig/CONFIG_BAYCOM_SER_FDX | 1 + baseconfig/CONFIG_BAYCOM_SER_HDX | 1 + baseconfig/CONFIG_BCACHE | 1 + baseconfig/CONFIG_BCACHE_CLOSURES_DEBUG | 1 + baseconfig/CONFIG_BCACHE_DEBUG | 1 + baseconfig/CONFIG_BCM2835_VCHIQ | 1 + baseconfig/CONFIG_BCM63XX_PHY | 1 + baseconfig/CONFIG_BCM7038_WDT | 1 + baseconfig/CONFIG_BCM7XXX_PHY | 1 + baseconfig/CONFIG_BCM87XX_PHY | 1 + baseconfig/CONFIG_BCMA | 1 + baseconfig/CONFIG_BCMA_BLOCKIO | 1 + baseconfig/CONFIG_BCMA_DEBUG | 1 + baseconfig/CONFIG_BCMA_DRIVER_GMAC_CMN | 1 + baseconfig/CONFIG_BCMA_DRIVER_GPIO | 1 + baseconfig/CONFIG_BCMA_HOST_PCI | 1 + baseconfig/CONFIG_BCMA_HOST_PCI_POSSIBLE | 1 + baseconfig/CONFIG_BCMA_HOST_SOC | 1 + baseconfig/CONFIG_BCMGENET | 1 + baseconfig/CONFIG_BCM_KONA_USB2_PHY | 1 + baseconfig/CONFIG_BE2ISCSI | 1 + baseconfig/CONFIG_BE2NET | 1 + baseconfig/CONFIG_BE2NET_HWMON | 1 + baseconfig/CONFIG_BEFS_DEBUG | 1 + baseconfig/CONFIG_BEFS_FS | 1 + baseconfig/CONFIG_BFS_FS | 1 + baseconfig/CONFIG_BH1750 | 1 + baseconfig/CONFIG_BH1780 | 1 + baseconfig/CONFIG_BIG_KEYS | 1 + baseconfig/CONFIG_BINFMT_AOUT | 1 + baseconfig/CONFIG_BINFMT_ELF | 1 + baseconfig/CONFIG_BINFMT_FLAT | 1 + baseconfig/CONFIG_BINFMT_MISC | 1 + baseconfig/CONFIG_BINFMT_SCRIPT | 1 + baseconfig/CONFIG_BLK_CGROUP | 1 + baseconfig/CONFIG_BLK_CMDLINE_PARSER | 1 + baseconfig/CONFIG_BLK_CPQ_CISS_DA | 1 + baseconfig/CONFIG_BLK_DEV | 1 + baseconfig/CONFIG_BLK_DEV_3W_XXXX_RAID | 1 + baseconfig/CONFIG_BLK_DEV_BSG | 1 + baseconfig/CONFIG_BLK_DEV_BSGLIB | 1 + baseconfig/CONFIG_BLK_DEV_CRYPTOLOOP | 1 + baseconfig/CONFIG_BLK_DEV_DAC960 | 1 + baseconfig/CONFIG_BLK_DEV_DM | 1 + baseconfig/CONFIG_BLK_DEV_DRBD | 1 + baseconfig/CONFIG_BLK_DEV_FD | 1 + baseconfig/CONFIG_BLK_DEV_HD | 1 + baseconfig/CONFIG_BLK_DEV_INITRD | 1 + baseconfig/CONFIG_BLK_DEV_INTEGRITY | 1 + baseconfig/CONFIG_BLK_DEV_IO_TRACE | 1 + baseconfig/CONFIG_BLK_DEV_LOOP | 1 + baseconfig/CONFIG_BLK_DEV_LOOP_MIN_COUNT | 1 + baseconfig/CONFIG_BLK_DEV_MD | 1 + baseconfig/CONFIG_BLK_DEV_NBD | 1 + baseconfig/CONFIG_BLK_DEV_NULL_BLK | 1 + baseconfig/CONFIG_BLK_DEV_NVME | 1 + baseconfig/CONFIG_BLK_DEV_NVME_SCSI | 1 + baseconfig/CONFIG_BLK_DEV_OSD | 1 + baseconfig/CONFIG_BLK_DEV_PCIESSD_MTIP32XX | 1 + baseconfig/CONFIG_BLK_DEV_PMEM | 1 + baseconfig/CONFIG_BLK_DEV_RAM | 1 + baseconfig/CONFIG_BLK_DEV_RAM_COUNT | 1 + baseconfig/CONFIG_BLK_DEV_RAM_DAX | 1 + baseconfig/CONFIG_BLK_DEV_RAM_SIZE | 1 + baseconfig/CONFIG_BLK_DEV_RBD | 1 + baseconfig/CONFIG_BLK_DEV_RSXX | 1 + baseconfig/CONFIG_BLK_DEV_SD | 1 + baseconfig/CONFIG_BLK_DEV_SKD | 1 + baseconfig/CONFIG_BLK_DEV_SR | 1 + baseconfig/CONFIG_BLK_DEV_SR_VENDOR | 1 + baseconfig/CONFIG_BLK_DEV_SX8 | 1 + baseconfig/CONFIG_BLK_DEV_THROTTLING | 1 + baseconfig/CONFIG_BLK_DEV_UB | 1 + baseconfig/CONFIG_BLK_DEV_UMEM | 1 + baseconfig/CONFIG_BLK_DEV_ZONED | 1 + baseconfig/CONFIG_BLK_WBT | 1 + baseconfig/CONFIG_BLK_WBT_MQ | 1 + baseconfig/CONFIG_BLK_WBT_SQ | 1 + baseconfig/CONFIG_BMA180 | 1 + baseconfig/CONFIG_BMA220 | 1 + baseconfig/CONFIG_BMC150_ACCEL | 1 + baseconfig/CONFIG_BMC150_MAGN | 1 + baseconfig/CONFIG_BMC150_MAGN_I2C | 1 + baseconfig/CONFIG_BMC150_MAGN_SPI | 1 + baseconfig/CONFIG_BMG160 | 1 + baseconfig/CONFIG_BMI160_I2C | 1 + baseconfig/CONFIG_BMI160_SPI | 1 + baseconfig/CONFIG_BMP280 | 1 + baseconfig/CONFIG_BNA | 1 + baseconfig/CONFIG_BNX2 | 1 + baseconfig/CONFIG_BNX2X | 1 + baseconfig/CONFIG_BNX2X_SRIOV | 1 + baseconfig/CONFIG_BNXT | 1 + baseconfig/CONFIG_BNXT_DCB | 1 + baseconfig/CONFIG_BNXT_SRIOV | 1 + baseconfig/CONFIG_BONDING | 1 + baseconfig/CONFIG_BOOTPARAM_HARDLOCKUP_PANIC | 1 + baseconfig/CONFIG_BOOTPARAM_HOTPLUG_CPU0 | 1 + baseconfig/CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC | 1 + baseconfig/CONFIG_BOOT_PRINTK_DELAY | 1 + baseconfig/CONFIG_BOUNCE | 1 + baseconfig/CONFIG_BPF_JIT | 1 + baseconfig/CONFIG_BPF_SYSCALL | 1 + baseconfig/CONFIG_BPQETHER | 1 + baseconfig/CONFIG_BRCMDBG | 1 + baseconfig/CONFIG_BRCMFMAC | 1 + baseconfig/CONFIG_BRCMFMAC_PCIE | 1 + baseconfig/CONFIG_BRCMFMAC_SDIO | 1 + baseconfig/CONFIG_BRCMFMAC_USB | 1 + baseconfig/CONFIG_BRCMSMAC | 1 + baseconfig/CONFIG_BRCM_TRACING | 1 + baseconfig/CONFIG_BRIDGE | 1 + baseconfig/CONFIG_BRIDGE_EBT_802_3 | 1 + baseconfig/CONFIG_BRIDGE_EBT_AMONG | 1 + baseconfig/CONFIG_BRIDGE_EBT_ARP | 1 + baseconfig/CONFIG_BRIDGE_EBT_ARPREPLY | 1 + baseconfig/CONFIG_BRIDGE_EBT_BROUTE | 1 + baseconfig/CONFIG_BRIDGE_EBT_DNAT | 1 + baseconfig/CONFIG_BRIDGE_EBT_IP | 1 + baseconfig/CONFIG_BRIDGE_EBT_IP6 | 1 + baseconfig/CONFIG_BRIDGE_EBT_LIMIT | 1 + baseconfig/CONFIG_BRIDGE_EBT_LOG | 1 + baseconfig/CONFIG_BRIDGE_EBT_MARK | 1 + baseconfig/CONFIG_BRIDGE_EBT_MARK_T | 1 + baseconfig/CONFIG_BRIDGE_EBT_NFLOG | 1 + baseconfig/CONFIG_BRIDGE_EBT_PKTTYPE | 1 + baseconfig/CONFIG_BRIDGE_EBT_REDIRECT | 1 + baseconfig/CONFIG_BRIDGE_EBT_SNAT | 1 + baseconfig/CONFIG_BRIDGE_EBT_STP | 1 + baseconfig/CONFIG_BRIDGE_EBT_T_FILTER | 1 + baseconfig/CONFIG_BRIDGE_EBT_T_NAT | 1 + baseconfig/CONFIG_BRIDGE_EBT_VLAN | 1 + baseconfig/CONFIG_BRIDGE_IGMP_SNOOPING | 1 + baseconfig/CONFIG_BRIDGE_NETFILTER | 1 + baseconfig/CONFIG_BRIDGE_NF_EBTABLES | 1 + baseconfig/CONFIG_BRIDGE_VLAN_FILTERING | 1 + baseconfig/CONFIG_BROADCOM_PHY | 1 + baseconfig/CONFIG_BSD_DISKLABEL | 1 + baseconfig/CONFIG_BSD_PROCESS_ACCT | 1 + baseconfig/CONFIG_BSD_PROCESS_ACCT_V3 | 1 + baseconfig/CONFIG_BT | 1 + baseconfig/CONFIG_BTRFS_ASSERT | 1 + baseconfig/CONFIG_BTRFS_DEBUG | 1 + baseconfig/CONFIG_BTRFS_FS | 1 + baseconfig/CONFIG_BTRFS_FS_CHECK_INTEGRITY | 1 + baseconfig/CONFIG_BTRFS_FS_POSIX_ACL | 1 + baseconfig/CONFIG_BTRFS_FS_RUN_SANITY_TESTS | 1 + baseconfig/CONFIG_BTT | 1 + baseconfig/CONFIG_BT_6LOWPAN | 1 + baseconfig/CONFIG_BT_ATH3K | 1 + baseconfig/CONFIG_BT_BNEP | 1 + baseconfig/CONFIG_BT_BNEP_MC_FILTER | 1 + baseconfig/CONFIG_BT_BNEP_PROTO_FILTER | 1 + baseconfig/CONFIG_BT_BREDR | 1 + baseconfig/CONFIG_BT_CMTP | 1 + baseconfig/CONFIG_BT_DEBUGFS | 1 + baseconfig/CONFIG_BT_HCIBCM203X | 1 + baseconfig/CONFIG_BT_HCIBFUSB | 1 + baseconfig/CONFIG_BT_HCIBLUECARD | 1 + baseconfig/CONFIG_BT_HCIBPA10X | 1 + baseconfig/CONFIG_BT_HCIBT3C | 1 + baseconfig/CONFIG_BT_HCIBTSDIO | 1 + baseconfig/CONFIG_BT_HCIBTUART | 1 + baseconfig/CONFIG_BT_HCIBTUSB | 1 + baseconfig/CONFIG_BT_HCIBTUSB_BCM | 1 + baseconfig/CONFIG_BT_HCIBTUSB_RTL | 1 + baseconfig/CONFIG_BT_HCIDTL1 | 1 + baseconfig/CONFIG_BT_HCIUART | 1 + baseconfig/CONFIG_BT_HCIUART_3WIRE | 1 + baseconfig/CONFIG_BT_HCIUART_AG6XX | 1 + baseconfig/CONFIG_BT_HCIUART_ATH3K | 1 + baseconfig/CONFIG_BT_HCIUART_BCM | 1 + baseconfig/CONFIG_BT_HCIUART_BCSP | 1 + baseconfig/CONFIG_BT_HCIUART_H4 | 1 + baseconfig/CONFIG_BT_HCIUART_INTEL | 1 + baseconfig/CONFIG_BT_HCIUART_LL | 1 + baseconfig/CONFIG_BT_HCIUART_MRVL | 1 + baseconfig/CONFIG_BT_HCIUART_QCA | 1 + baseconfig/CONFIG_BT_HCIVHCI | 1 + baseconfig/CONFIG_BT_HIDP | 1 + baseconfig/CONFIG_BT_HS | 1 + baseconfig/CONFIG_BT_LE | 1 + baseconfig/CONFIG_BT_LEDS | 1 + baseconfig/CONFIG_BT_MRVL | 1 + baseconfig/CONFIG_BT_MRVL_SDIO | 1 + baseconfig/CONFIG_BT_QCA | 1 + baseconfig/CONFIG_BT_QCOMSMD | 1 + baseconfig/CONFIG_BT_RFCOMM | 1 + baseconfig/CONFIG_BT_RFCOMM_TTY | 1 + baseconfig/CONFIG_BT_SCO | 1 + baseconfig/CONFIG_BT_SELFTEST | 1 + baseconfig/CONFIG_BT_WILINK | 1 + baseconfig/CONFIG_BUG_ON_DATA_CORRUPTION | 1 + baseconfig/CONFIG_BUILD_DOCSRC | 1 + baseconfig/CONFIG_C2PORT | 1 + baseconfig/CONFIG_CACHEFILES | 1 + baseconfig/CONFIG_CACHEFILES_DEBUG | 1 + baseconfig/CONFIG_CACHEFILES_HISTOGRAM | 1 + baseconfig/CONFIG_CADENCE_WATCHDOG | 1 + baseconfig/CONFIG_CAIF | 1 + baseconfig/CONFIG_CAN | 1 + baseconfig/CONFIG_CAN_8DEV_USB | 1 + baseconfig/CONFIG_CAN_BCM | 1 + baseconfig/CONFIG_CAN_CALC_BITTIMING | 1 + baseconfig/CONFIG_CAN_CC770 | 1 + baseconfig/CONFIG_CAN_CC770_ISA | 1 + baseconfig/CONFIG_CAN_CC770_PLATFORM | 1 + baseconfig/CONFIG_CAN_C_CAN | 1 + baseconfig/CONFIG_CAN_C_CAN_PCI | 1 + baseconfig/CONFIG_CAN_C_CAN_PLATFORM | 1 + baseconfig/CONFIG_CAN_DEBUG_DEVICES | 1 + baseconfig/CONFIG_CAN_DEV | 1 + baseconfig/CONFIG_CAN_EMS_PCI | 1 + baseconfig/CONFIG_CAN_EMS_PCMCIA | 1 + baseconfig/CONFIG_CAN_EMS_USB | 1 + baseconfig/CONFIG_CAN_ESD_USB2 | 1 + baseconfig/CONFIG_CAN_GRCAN | 1 + baseconfig/CONFIG_CAN_GS_USB | 1 + baseconfig/CONFIG_CAN_GW | 1 + baseconfig/CONFIG_CAN_IFI_CANFD | 1 + baseconfig/CONFIG_CAN_KVASER_PCI | 1 + baseconfig/CONFIG_CAN_KVASER_USB | 1 + baseconfig/CONFIG_CAN_LEDS | 1 + baseconfig/CONFIG_CAN_MCP251X | 1 + baseconfig/CONFIG_CAN_M_CAN | 1 + baseconfig/CONFIG_CAN_PEAK_PCI | 1 + baseconfig/CONFIG_CAN_PEAK_PCIEC | 1 + baseconfig/CONFIG_CAN_PEAK_PCMCIA | 1 + baseconfig/CONFIG_CAN_PEAK_USB | 1 + baseconfig/CONFIG_CAN_PLX_PCI | 1 + baseconfig/CONFIG_CAN_RAW | 1 + baseconfig/CONFIG_CAN_SJA1000 | 1 + baseconfig/CONFIG_CAN_SJA1000_ISA | 1 + baseconfig/CONFIG_CAN_SJA1000_PLATFORM | 1 + baseconfig/CONFIG_CAN_SLCAN | 1 + baseconfig/CONFIG_CAN_SOFTING | 1 + baseconfig/CONFIG_CAN_SOFTING_CS | 1 + baseconfig/CONFIG_CAN_TSCAN1 | 1 + baseconfig/CONFIG_CAN_VCAN | 1 + baseconfig/CONFIG_CAN_XILINXCAN | 1 + baseconfig/CONFIG_CAPI_AVM | 1 + baseconfig/CONFIG_CAPI_EICON | 1 + baseconfig/CONFIG_CAPI_TRACE | 1 + baseconfig/CONFIG_CARDBUS | 1 + baseconfig/CONFIG_CARDMAN_4000 | 1 + baseconfig/CONFIG_CARDMAN_4040 | 1 + baseconfig/CONFIG_CARL9170 | 1 + baseconfig/CONFIG_CARL9170_DEBUGFS | 1 + baseconfig/CONFIG_CARL9170_HWRNG | 1 + baseconfig/CONFIG_CARL9170_LEDS | 1 + baseconfig/CONFIG_CASSINI | 1 + baseconfig/CONFIG_CB710_CORE | 1 + baseconfig/CONFIG_CB710_DEBUG | 1 + baseconfig/CONFIG_CC10001_ADC | 1 + baseconfig/CONFIG_CC_OPTIMIZE_FOR_SIZE | 1 + baseconfig/CONFIG_CDROM_PKTCDVD | 1 + baseconfig/CONFIG_CDROM_PKTCDVD_BUFFERS | 1 + baseconfig/CONFIG_CDROM_PKTCDVD_WCACHE | 1 + baseconfig/CONFIG_CEPH_FS | 1 + baseconfig/CONFIG_CEPH_FSCACHE | 1 + baseconfig/CONFIG_CEPH_FS_POSIX_ACL | 1 + baseconfig/CONFIG_CEPH_LIB | 1 + baseconfig/CONFIG_CEPH_LIB_PRETTYDEBUG | 1 + baseconfig/CONFIG_CEPH_LIB_USE_DNS_RESOLVER | 1 + baseconfig/CONFIG_CFAG12864B | 1 + baseconfig/CONFIG_CFAG12864B_RATE | 1 + baseconfig/CONFIG_CFG80211 | 1 + baseconfig/CONFIG_CFG80211_CRDA_SUPPORT | 1 + baseconfig/CONFIG_CFG80211_DEBUGFS | 1 + baseconfig/CONFIG_CFG80211_DEFAULT_PS | 1 + baseconfig/CONFIG_CFG80211_DEVELOPER_WARNINGS | 1 + baseconfig/CONFIG_CFG80211_WEXT | 1 + baseconfig/CONFIG_CFQ_GROUP_IOSCHED | 1 + baseconfig/CONFIG_CFS_BANDWIDTH | 1 + baseconfig/CONFIG_CGROUPS | 1 + baseconfig/CONFIG_CGROUP_BPF | 1 + baseconfig/CONFIG_CGROUP_CPUACCT | 1 + baseconfig/CONFIG_CGROUP_DEBUG | 1 + baseconfig/CONFIG_CGROUP_DEVICE | 1 + baseconfig/CONFIG_CGROUP_FREEZER | 1 + baseconfig/CONFIG_CGROUP_HUGETLB | 1 + baseconfig/CONFIG_CGROUP_NET_CLASSID | 1 + baseconfig/CONFIG_CGROUP_NET_PRIO | 1 + baseconfig/CONFIG_CGROUP_PERF | 1 + baseconfig/CONFIG_CGROUP_PIDS | 1 + baseconfig/CONFIG_CGROUP_SCHED | 1 + baseconfig/CONFIG_CHARGER_BQ2415X | 1 + baseconfig/CONFIG_CHARGER_BQ24190 | 1 + baseconfig/CONFIG_CHARGER_BQ24257 | 1 + baseconfig/CONFIG_CHARGER_BQ24735 | 1 + baseconfig/CONFIG_CHARGER_BQ25890 | 1 + baseconfig/CONFIG_CHARGER_GPIO | 1 + baseconfig/CONFIG_CHARGER_ISP1704 | 1 + baseconfig/CONFIG_CHARGER_LP8727 | 1 + baseconfig/CONFIG_CHARGER_MAX8903 | 1 + baseconfig/CONFIG_CHARGER_PCF50633 | 1 + baseconfig/CONFIG_CHARGER_QCOM_SMBB | 1 + baseconfig/CONFIG_CHARGER_RT9455 | 1 + baseconfig/CONFIG_CHARGER_SMB347 | 1 + baseconfig/CONFIG_CHECKPOINT_RESTORE | 1 + baseconfig/CONFIG_CHELSIO_T1 | 1 + baseconfig/CONFIG_CHELSIO_T1_1G | 1 + baseconfig/CONFIG_CHELSIO_T3 | 1 + baseconfig/CONFIG_CHELSIO_T4 | 1 + baseconfig/CONFIG_CHELSIO_T4VF | 1 + baseconfig/CONFIG_CHELSIO_T4_DCB | 1 + baseconfig/CONFIG_CHELSIO_T4_FCOE | 1 + baseconfig/CONFIG_CHROME_PLATFORMS | 1 + baseconfig/CONFIG_CHR_DEV_OSST | 1 + baseconfig/CONFIG_CHR_DEV_SCH | 1 + baseconfig/CONFIG_CHR_DEV_SG | 1 + baseconfig/CONFIG_CHR_DEV_ST | 1 + baseconfig/CONFIG_CICADA_PHY | 1 + baseconfig/CONFIG_CIFS | 1 + baseconfig/CONFIG_CIFS_ACL | 1 + baseconfig/CONFIG_CIFS_DEBUG | 1 + baseconfig/CONFIG_CIFS_DEBUG2 | 1 + baseconfig/CONFIG_CIFS_DFS_UPCALL | 1 + baseconfig/CONFIG_CIFS_FSCACHE | 1 + baseconfig/CONFIG_CIFS_NFSD_EXPORT | 1 + baseconfig/CONFIG_CIFS_POSIX | 1 + baseconfig/CONFIG_CIFS_SMB2 | 1 + baseconfig/CONFIG_CIFS_SMB311 | 1 + baseconfig/CONFIG_CIFS_STATS | 1 + baseconfig/CONFIG_CIFS_STATS2 | 1 + baseconfig/CONFIG_CIFS_UPCALL | 1 + baseconfig/CONFIG_CIFS_WEAK_PW_HASH | 1 + baseconfig/CONFIG_CIFS_XATTR | 1 + baseconfig/CONFIG_CISS_SCSI_TAPE | 1 + baseconfig/CONFIG_CLEANCACHE | 1 + baseconfig/CONFIG_CLK_QORIQ | 1 + baseconfig/CONFIG_CLS_U32_MARK | 1 + baseconfig/CONFIG_CLS_U32_PERF | 1 + baseconfig/CONFIG_CM32181 | 1 + baseconfig/CONFIG_CM3232 | 1 + baseconfig/CONFIG_CM3323 | 1 + baseconfig/CONFIG_CM36651 | 1 + baseconfig/CONFIG_CMA | 1 + baseconfig/CONFIG_CMDLINE_PARTITION | 1 + baseconfig/CONFIG_CNIC | 1 + baseconfig/CONFIG_CODA_FS | 1 + baseconfig/CONFIG_COMEDI | 1 + baseconfig/CONFIG_COMMON_CLK_CDCE706 | 1 + baseconfig/CONFIG_COMMON_CLK_CDCE925 | 1 + baseconfig/CONFIG_COMMON_CLK_CS2000_CP | 1 + baseconfig/CONFIG_COMMON_CLK_HI3516CV300 | 1 + baseconfig/CONFIG_COMMON_CLK_HI3519 | 1 + baseconfig/CONFIG_COMMON_CLK_HI3798CV200 | 1 + baseconfig/CONFIG_COMMON_CLK_MT2701 | 1 + baseconfig/CONFIG_COMMON_CLK_MT2701_BDPSYS | 1 + baseconfig/CONFIG_COMMON_CLK_MT2701_ETHSYS | 1 + baseconfig/CONFIG_COMMON_CLK_MT2701_HIFSYS | 1 + baseconfig/CONFIG_COMMON_CLK_MT2701_IMGSYS | 1 + baseconfig/CONFIG_COMMON_CLK_MT2701_MMSYS | 1 + baseconfig/CONFIG_COMMON_CLK_MT2701_VDECSYS | 1 + baseconfig/CONFIG_COMMON_CLK_MT8135 | 1 + baseconfig/CONFIG_COMMON_CLK_MT8173 | 1 + baseconfig/CONFIG_COMMON_CLK_OXNAS | 1 + baseconfig/CONFIG_COMMON_CLK_PWM | 1 + baseconfig/CONFIG_COMMON_CLK_SI514 | 1 + baseconfig/CONFIG_COMMON_CLK_SI5351 | 1 + baseconfig/CONFIG_COMMON_CLK_XLNX_CLKWZRD | 1 + baseconfig/CONFIG_COMPACTION | 1 + baseconfig/CONFIG_COMPAT_BRK | 1 + baseconfig/CONFIG_COMPILE_TEST | 1 + baseconfig/CONFIG_CONFIGFS_FS | 1 + baseconfig/CONFIG_CONNECTOR | 1 + baseconfig/CONFIG_CONSOLE_LOGLEVEL_DEFAULT | 1 + baseconfig/CONFIG_CONTEXT_SWITCH_TRACER | 1 + baseconfig/CONFIG_CORDIC | 1 + .../CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS | 1 + baseconfig/CONFIG_CPU5_WDT | 1 + baseconfig/CONFIG_CPUFREQ_DT | 1 + baseconfig/CONFIG_CPUMASK_OFFSTACK | 1 + baseconfig/CONFIG_CPUSETS | 1 + baseconfig/CONFIG_CPU_FREQ | 1 + .../CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND | 1 + baseconfig/CONFIG_CPU_FREQ_GOV_CONSERVATIVE | 1 + baseconfig/CONFIG_CPU_FREQ_GOV_ONDEMAND | 1 + baseconfig/CONFIG_CPU_FREQ_GOV_PERFORMANCE | 1 + baseconfig/CONFIG_CPU_FREQ_GOV_POWERSAVE | 1 + baseconfig/CONFIG_CPU_FREQ_GOV_SCHEDUTIL | 1 + baseconfig/CONFIG_CPU_FREQ_GOV_USERSPACE | 1 + baseconfig/CONFIG_CPU_FREQ_STAT | 1 + baseconfig/CONFIG_CPU_FREQ_STAT_DETAILS | 1 + baseconfig/CONFIG_CPU_HOTPLUG_STATE_CONTROL | 1 + baseconfig/CONFIG_CPU_IDLE | 1 + baseconfig/CONFIG_CPU_IDLE_GOV_LADDER | 1 + baseconfig/CONFIG_CPU_THERMAL | 1 + baseconfig/CONFIG_CRAMFS | 1 + baseconfig/CONFIG_CRASH | 1 + baseconfig/CONFIG_CRASH_DUMP | 1 + baseconfig/CONFIG_CRC16 | 1 + baseconfig/CONFIG_CRC32 | 1 + baseconfig/CONFIG_CRC32_SELFTEST | 1 + baseconfig/CONFIG_CRC7 | 1 + baseconfig/CONFIG_CRC8 | 1 + baseconfig/CONFIG_CRC_CCITT | 1 + baseconfig/CONFIG_CRC_ITU_T | 1 + baseconfig/CONFIG_CRC_T10DIF | 1 + baseconfig/CONFIG_CROSS_COMPILE | 1 + baseconfig/CONFIG_CROSS_MEMORY_ATTACH | 1 + baseconfig/CONFIG_CROS_KBD_LED_BACKLIGHT | 1 + baseconfig/CONFIG_CRYPTO | 1 + baseconfig/CONFIG_CRYPTO_842 | 1 + baseconfig/CONFIG_CRYPTO_AES | 1 + baseconfig/CONFIG_CRYPTO_ANSI_CPRNG | 1 + baseconfig/CONFIG_CRYPTO_ANUBIS | 1 + baseconfig/CONFIG_CRYPTO_ARC4 | 1 + baseconfig/CONFIG_CRYPTO_AUTHENC | 1 + baseconfig/CONFIG_CRYPTO_BLKCIPHER | 1 + baseconfig/CONFIG_CRYPTO_BLOWFISH | 1 + baseconfig/CONFIG_CRYPTO_CAMELLIA | 1 + baseconfig/CONFIG_CRYPTO_CAST5 | 1 + baseconfig/CONFIG_CRYPTO_CAST6 | 1 + baseconfig/CONFIG_CRYPTO_CBC | 1 + baseconfig/CONFIG_CRYPTO_CCM | 1 + baseconfig/CONFIG_CRYPTO_CHACHA20 | 1 + baseconfig/CONFIG_CRYPTO_CHACHA20POLY1305 | 1 + baseconfig/CONFIG_CRYPTO_CMAC | 1 + baseconfig/CONFIG_CRYPTO_CRC32 | 1 + baseconfig/CONFIG_CRYPTO_CRC32C | 1 + baseconfig/CONFIG_CRYPTO_CRC32C_INTEL | 1 + baseconfig/CONFIG_CRYPTO_CRC32C_VPMSUM | 1 + baseconfig/CONFIG_CRYPTO_CRC32_ARM_CE | 1 + baseconfig/CONFIG_CRYPTO_CRCT10DIF_ARM_CE | 1 + baseconfig/CONFIG_CRYPTO_CRYPTD | 1 + baseconfig/CONFIG_CRYPTO_CTR | 1 + baseconfig/CONFIG_CRYPTO_CTS | 1 + baseconfig/CONFIG_CRYPTO_DEFLATE | 1 + baseconfig/CONFIG_CRYPTO_DES | 1 + baseconfig/CONFIG_CRYPTO_DEV_CHELSIO | 1 + baseconfig/CONFIG_CRYPTO_DEV_HIFN_795X | 1 + baseconfig/CONFIG_CRYPTO_DEV_HIFN_795X_RNG | 1 + baseconfig/CONFIG_CRYPTO_DEV_VIRTIO | 1 + baseconfig/CONFIG_CRYPTO_DH | 1 + baseconfig/CONFIG_CRYPTO_DRBG_CTR | 1 + baseconfig/CONFIG_CRYPTO_DRBG_HASH | 1 + baseconfig/CONFIG_CRYPTO_DRBG_MENU | 1 + baseconfig/CONFIG_CRYPTO_ECB | 1 + baseconfig/CONFIG_CRYPTO_ECDH | 1 + baseconfig/CONFIG_CRYPTO_ECHAINIV | 1 + baseconfig/CONFIG_CRYPTO_FCRYPT | 1 + baseconfig/CONFIG_CRYPTO_FIPS | 1 + baseconfig/CONFIG_CRYPTO_GCM | 1 + baseconfig/CONFIG_CRYPTO_GF128MUL | 1 + baseconfig/CONFIG_CRYPTO_GHASH | 1 + baseconfig/CONFIG_CRYPTO_HMAC | 1 + baseconfig/CONFIG_CRYPTO_HW | 1 + baseconfig/CONFIG_CRYPTO_KEYWRAP | 1 + baseconfig/CONFIG_CRYPTO_KHAZAD | 1 + baseconfig/CONFIG_CRYPTO_LRW | 1 + baseconfig/CONFIG_CRYPTO_LZ4 | 1 + baseconfig/CONFIG_CRYPTO_LZ4HC | 1 + baseconfig/CONFIG_CRYPTO_LZO | 1 + baseconfig/CONFIG_CRYPTO_MANAGER | 1 + .../CONFIG_CRYPTO_MANAGER_DISABLE_TESTS | 1 + baseconfig/CONFIG_CRYPTO_MCRYPTD | 1 + baseconfig/CONFIG_CRYPTO_MD4 | 1 + baseconfig/CONFIG_CRYPTO_MD5 | 1 + baseconfig/CONFIG_CRYPTO_MICHAEL_MIC | 1 + baseconfig/CONFIG_CRYPTO_NULL | 1 + baseconfig/CONFIG_CRYPTO_PCBC | 1 + baseconfig/CONFIG_CRYPTO_PCRYPT | 1 + baseconfig/CONFIG_CRYPTO_POLY1305 | 1 + baseconfig/CONFIG_CRYPTO_RMD128 | 1 + baseconfig/CONFIG_CRYPTO_RMD160 | 1 + baseconfig/CONFIG_CRYPTO_RMD256 | 1 + baseconfig/CONFIG_CRYPTO_RMD320 | 1 + baseconfig/CONFIG_CRYPTO_RSA | 1 + baseconfig/CONFIG_CRYPTO_SALSA20 | 1 + baseconfig/CONFIG_CRYPTO_SALSA20_586 | 1 + baseconfig/CONFIG_CRYPTO_SEED | 1 + baseconfig/CONFIG_CRYPTO_SEQIV | 1 + baseconfig/CONFIG_CRYPTO_SERPENT | 1 + baseconfig/CONFIG_CRYPTO_SHA1 | 1 + baseconfig/CONFIG_CRYPTO_SHA256 | 1 + baseconfig/CONFIG_CRYPTO_SHA3 | 1 + baseconfig/CONFIG_CRYPTO_SHA512 | 1 + baseconfig/CONFIG_CRYPTO_SIMD | 1 + baseconfig/CONFIG_CRYPTO_TEA | 1 + baseconfig/CONFIG_CRYPTO_TEST | 1 + baseconfig/CONFIG_CRYPTO_TGR192 | 1 + baseconfig/CONFIG_CRYPTO_TWOFISH | 1 + baseconfig/CONFIG_CRYPTO_USER | 1 + baseconfig/CONFIG_CRYPTO_USER_API_AEAD | 1 + baseconfig/CONFIG_CRYPTO_USER_API_HASH | 1 + baseconfig/CONFIG_CRYPTO_USER_API_RNG | 1 + baseconfig/CONFIG_CRYPTO_USER_API_SKCIPHER | 1 + baseconfig/CONFIG_CRYPTO_VMAC | 1 + baseconfig/CONFIG_CRYPTO_WP512 | 1 + baseconfig/CONFIG_CRYPTO_XCBC | 1 + baseconfig/CONFIG_CRYPTO_XTS | 1 + baseconfig/CONFIG_CUSE | 1 + baseconfig/CONFIG_CW1200 | 1 + baseconfig/CONFIG_CW1200_WLAN_SDIO | 1 + baseconfig/CONFIG_CW1200_WLAN_SPI | 1 + baseconfig/CONFIG_CX_ECAT | 1 + baseconfig/CONFIG_CYCLADES | 1 + baseconfig/CONFIG_CYZ_INTR | 1 + baseconfig/CONFIG_DA280 | 1 + baseconfig/CONFIG_DA311 | 1 + baseconfig/CONFIG_DAVICOM_PHY | 1 + baseconfig/CONFIG_DCB | 1 + baseconfig/CONFIG_DDR | 1 + baseconfig/CONFIG_DE2104X | 1 + baseconfig/CONFIG_DE2104X_DSL | 1 + baseconfig/CONFIG_DE4X5 | 1 + baseconfig/CONFIG_DEBUG_ATOMIC_SLEEP | 1 + baseconfig/CONFIG_DEBUG_BLK_CGROUP | 1 + baseconfig/CONFIG_DEBUG_BLOCK_EXT_DEVT | 1 + baseconfig/CONFIG_DEBUG_BOOT_PARAMS | 1 + baseconfig/CONFIG_DEBUG_CREDENTIALS | 1 + baseconfig/CONFIG_DEBUG_DEVRES | 1 + baseconfig/CONFIG_DEBUG_DRIVER | 1 + baseconfig/CONFIG_DEBUG_FORCE_WEAK_PER_CPU | 1 + baseconfig/CONFIG_DEBUG_FS | 1 + baseconfig/CONFIG_DEBUG_GPIO | 1 + baseconfig/CONFIG_DEBUG_HIGHMEM | 1 + baseconfig/CONFIG_DEBUG_HOTPLUG_CPU0 | 1 + baseconfig/CONFIG_DEBUG_INFO | 1 + baseconfig/CONFIG_DEBUG_INFO_DWARF4 | 1 + baseconfig/CONFIG_DEBUG_INFO_REDUCED | 1 + baseconfig/CONFIG_DEBUG_INFO_SPLIT | 1 + baseconfig/CONFIG_DEBUG_INFO_VTA | 1 + baseconfig/CONFIG_DEBUG_KERNEL | 1 + baseconfig/CONFIG_DEBUG_KMEMLEAK | 1 + baseconfig/CONFIG_DEBUG_KMEMLEAK_TEST | 1 + baseconfig/CONFIG_DEBUG_KOBJECT | 1 + baseconfig/CONFIG_DEBUG_KOBJECT_RELEASE | 1 + baseconfig/CONFIG_DEBUG_LIST | 1 + baseconfig/CONFIG_DEBUG_LOCKDEP | 1 + baseconfig/CONFIG_DEBUG_LOCKING_API_SELFTESTS | 1 + baseconfig/CONFIG_DEBUG_LOCK_ALLOC | 1 + baseconfig/CONFIG_DEBUG_MUTEXES | 1 + baseconfig/CONFIG_DEBUG_NOTIFIERS | 1 + baseconfig/CONFIG_DEBUG_NX_TEST | 1 + baseconfig/CONFIG_DEBUG_OBJECTS | 1 + .../CONFIG_DEBUG_OBJECTS_ENABLE_DEFAULT | 1 + baseconfig/CONFIG_DEBUG_OBJECTS_SELFTEST | 1 + baseconfig/CONFIG_DEBUG_PAGEALLOC | 1 + baseconfig/CONFIG_DEBUG_PAGE_REF | 1 + baseconfig/CONFIG_DEBUG_PERF_USE_VMALLOC | 1 + baseconfig/CONFIG_DEBUG_PER_CPU_MAPS | 1 + baseconfig/CONFIG_DEBUG_PINCTRL | 1 + baseconfig/CONFIG_DEBUG_PI_LIST | 1 + baseconfig/CONFIG_DEBUG_RODATA_TEST | 1 + baseconfig/CONFIG_DEBUG_RT_MUTEXES | 1 + baseconfig/CONFIG_DEBUG_SECTION_MISMATCH | 1 + baseconfig/CONFIG_DEBUG_SET_MODULE_RONX | 1 + baseconfig/CONFIG_DEBUG_SG | 1 + baseconfig/CONFIG_DEBUG_SHIRQ | 1 + baseconfig/CONFIG_DEBUG_SPINLOCK | 1 + baseconfig/CONFIG_DEBUG_STACK_USAGE | 1 + baseconfig/CONFIG_DEBUG_TEST_DRIVER_REMOVE | 1 + baseconfig/CONFIG_DEBUG_TIMEKEEPING | 1 + baseconfig/CONFIG_DEBUG_VIRTUAL | 1 + baseconfig/CONFIG_DEBUG_VM | 1 + baseconfig/CONFIG_DEBUG_VM_PGFLAGS | 1 + baseconfig/CONFIG_DEBUG_VM_RB | 1 + baseconfig/CONFIG_DEBUG_VM_VMACACHE | 1 + baseconfig/CONFIG_DEBUG_WQ_FORCE_RR_CPU | 1 + baseconfig/CONFIG_DEBUG_WW_MUTEX_SLOWPATH | 1 + baseconfig/CONFIG_DECNET | 1 + .../CONFIG_DEFAULT_BOOTPARAM_HUNG_TASK_PANIC | 1 + baseconfig/CONFIG_DEFAULT_CFQ | 1 + baseconfig/CONFIG_DEFAULT_HOSTNAME | 1 + baseconfig/CONFIG_DEFAULT_HUNG_TASK_TIMEOUT | 1 + baseconfig/CONFIG_DEFAULT_MMAP_MIN_ADDR | 1 + baseconfig/CONFIG_DEFERRED_STRUCT_PAGE_INIT | 1 + baseconfig/CONFIG_DEFXX | 1 + baseconfig/CONFIG_DETECT_HUNG_TASK | 1 + baseconfig/CONFIG_DEVFREQ_GOV_PASSIVE | 1 + baseconfig/CONFIG_DEVFREQ_GOV_PERFORMANCE | 1 + baseconfig/CONFIG_DEVFREQ_GOV_POWERSAVE | 1 + baseconfig/CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND | 1 + baseconfig/CONFIG_DEVFREQ_GOV_USERSPACE | 1 + baseconfig/CONFIG_DEVKMEM | 1 + baseconfig/CONFIG_DEVMEM | 1 + baseconfig/CONFIG_DEVTMPFS | 1 + baseconfig/CONFIG_DEVTMPFS_MOUNT | 1 + baseconfig/CONFIG_DEV_APPLETALK | 1 + baseconfig/CONFIG_DE_AOC | 1 + baseconfig/CONFIG_DGAP | 1 + baseconfig/CONFIG_DGNC | 1 + baseconfig/CONFIG_DHT11 | 1 + baseconfig/CONFIG_DL2K | 1 + baseconfig/CONFIG_DLM | 1 + baseconfig/CONFIG_DLM_DEBUG | 1 + baseconfig/CONFIG_DM9102 | 1 + baseconfig/CONFIG_DMADEVICES | 1 + baseconfig/CONFIG_DMADEVICES_DEBUG | 1 + baseconfig/CONFIG_DMARD06 | 1 + baseconfig/CONFIG_DMARD09 | 1 + baseconfig/CONFIG_DMARD10 | 1 + baseconfig/CONFIG_DMATEST | 1 + baseconfig/CONFIG_DMA_API_DEBUG | 1 + baseconfig/CONFIG_DMA_CMA | 1 + baseconfig/CONFIG_DMA_ENGINE | 1 + baseconfig/CONFIG_DMA_FENCE_TRACE | 1 + baseconfig/CONFIG_DM_CACHE | 1 + baseconfig/CONFIG_DM_CACHE_CLEANER | 1 + baseconfig/CONFIG_DM_CACHE_SMQ | 1 + baseconfig/CONFIG_DM_CRYPT | 1 + baseconfig/CONFIG_DM_DEBUG | 1 + .../CONFIG_DM_DEBUG_BLOCK_MANAGER_LOCKING | 1 + .../CONFIG_DM_DEBUG_BLOCK_STACK_TRACING | 1 + baseconfig/CONFIG_DM_DELAY | 1 + baseconfig/CONFIG_DM_ERA | 1 + baseconfig/CONFIG_DM_FLAKEY | 1 + baseconfig/CONFIG_DM_LOG_USERSPACE | 1 + baseconfig/CONFIG_DM_LOG_WRITES | 1 + baseconfig/CONFIG_DM_MIRROR | 1 + baseconfig/CONFIG_DM_MQ_DEFAULT | 1 + baseconfig/CONFIG_DM_MULTIPATH | 1 + baseconfig/CONFIG_DM_MULTIPATH_QL | 1 + baseconfig/CONFIG_DM_MULTIPATH_ST | 1 + baseconfig/CONFIG_DM_RAID | 1 + baseconfig/CONFIG_DM_SNAPSHOT | 1 + baseconfig/CONFIG_DM_SWITCH | 1 + baseconfig/CONFIG_DM_THIN_PROVISIONING | 1 + baseconfig/CONFIG_DM_UEVENT | 1 + baseconfig/CONFIG_DM_VERITY | 1 + baseconfig/CONFIG_DM_VERITY_FEC | 1 + baseconfig/CONFIG_DM_ZERO | 1 + baseconfig/CONFIG_DNET | 1 + baseconfig/CONFIG_DNOTIFY | 1 + baseconfig/CONFIG_DNS_RESOLVER | 1 + baseconfig/CONFIG_DONGLE | 1 + baseconfig/CONFIG_DP83640_PHY | 1 + baseconfig/CONFIG_DP83848_PHY | 1 + baseconfig/CONFIG_DP83867_PHY | 1 + baseconfig/CONFIG_DPM_WATCHDOG | 1 + baseconfig/CONFIG_DPOT_DAC | 1 + baseconfig/CONFIG_DRAGONRISE_FF | 1 + baseconfig/CONFIG_DRBD_FAULT_INJECTION | 1 + baseconfig/CONFIG_DRM | 1 + baseconfig/CONFIG_DRM_AMDGPU | 1 + baseconfig/CONFIG_DRM_AMDGPU_CIK | 1 + baseconfig/CONFIG_DRM_AMDGPU_GART_DEBUGFS | 1 + baseconfig/CONFIG_DRM_AMDGPU_SI | 1 + baseconfig/CONFIG_DRM_AMDGPU_USERPTR | 1 + baseconfig/CONFIG_DRM_AMD_ACP | 1 + baseconfig/CONFIG_DRM_AMD_POWERPLAY | 1 + baseconfig/CONFIG_DRM_ANALOGIX_ANX78XX | 1 + baseconfig/CONFIG_DRM_ARCPGU | 1 + baseconfig/CONFIG_DRM_AST | 1 + baseconfig/CONFIG_DRM_BOCHS | 1 + baseconfig/CONFIG_DRM_CIRRUS_QEMU | 1 + baseconfig/CONFIG_DRM_DP_AUX_CHARDEV | 1 + baseconfig/CONFIG_DRM_DUMB_VGA_DAC | 1 + baseconfig/CONFIG_DRM_DW_HDMI_I2S_AUDIO | 1 + baseconfig/CONFIG_DRM_FBDEV_EMULATION | 1 + baseconfig/CONFIG_DRM_HISI_HIBMC | 1 + baseconfig/CONFIG_DRM_I2C_ADV7511 | 1 + baseconfig/CONFIG_DRM_I2C_ADV7511_AUDIO | 1 + baseconfig/CONFIG_DRM_I2C_ADV7533 | 1 + baseconfig/CONFIG_DRM_I2C_CH7006 | 1 + baseconfig/CONFIG_DRM_I2C_NXP_TDA998X | 1 + baseconfig/CONFIG_DRM_I2C_SIL164 | 1 + baseconfig/CONFIG_DRM_I810 | 1 + baseconfig/CONFIG_DRM_I915 | 1 + baseconfig/CONFIG_DRM_I915_ALPHA_SUPPORT | 1 + baseconfig/CONFIG_DRM_I915_CAPTURE_ERROR | 1 + baseconfig/CONFIG_DRM_I915_COMPRESS_ERROR | 1 + baseconfig/CONFIG_DRM_I915_GVT | 1 + baseconfig/CONFIG_DRM_I915_GVT_KVMGT | 1 + baseconfig/CONFIG_DRM_I915_USERPTR | 1 + baseconfig/CONFIG_DRM_LEGACY | 1 + baseconfig/CONFIG_DRM_LOAD_EDID_FIRMWARE | 1 + baseconfig/CONFIG_DRM_MALI_DISPLAY | 1 + baseconfig/CONFIG_DRM_MGA | 1 + baseconfig/CONFIG_DRM_MGAG200 | 1 + baseconfig/CONFIG_DRM_MXSFB | 1 + baseconfig/CONFIG_DRM_NOUVEAU | 1 + baseconfig/CONFIG_DRM_NOUVEAU_BACKLIGHT | 1 + baseconfig/CONFIG_DRM_NXP_PTN3460 | 1 + baseconfig/CONFIG_DRM_PANEL | 1 + baseconfig/CONFIG_DRM_PANEL_JDI_LT070ME05000 | 1 + baseconfig/CONFIG_DRM_PANEL_SAMSUNG_S6E8AA0 | 1 + baseconfig/CONFIG_DRM_PANEL_SIMPLE | 1 + baseconfig/CONFIG_DRM_PARADE_PS8622 | 1 + baseconfig/CONFIG_DRM_QXL | 1 + baseconfig/CONFIG_DRM_R128 | 1 + baseconfig/CONFIG_DRM_RADEON | 1 + baseconfig/CONFIG_DRM_RADEON_USERPTR | 1 + baseconfig/CONFIG_DRM_SAVAGE | 1 + baseconfig/CONFIG_DRM_SII902X | 1 + baseconfig/CONFIG_DRM_SIL_SII8620 | 1 + baseconfig/CONFIG_DRM_SIS | 1 + baseconfig/CONFIG_DRM_TDFX | 1 + baseconfig/CONFIG_DRM_TI_TFP410 | 1 + baseconfig/CONFIG_DRM_TOSHIBA_TC358767 | 1 + baseconfig/CONFIG_DRM_UDL | 1 + baseconfig/CONFIG_DRM_VGEM | 1 + baseconfig/CONFIG_DRM_VIA | 1 + baseconfig/CONFIG_DRM_VIRTIO_GPU | 1 + baseconfig/CONFIG_DRM_VMWGFX | 1 + baseconfig/CONFIG_DRM_VMWGFX_FBCON | 1 + baseconfig/CONFIG_DS1682 | 1 + baseconfig/CONFIG_DS1803 | 1 + baseconfig/CONFIG_DT3155 | 1 + baseconfig/CONFIG_DUMMY | 1 + baseconfig/CONFIG_DUMMY_CONSOLE | 1 + baseconfig/CONFIG_DUMMY_CONSOLE_COLUMNS | 1 + baseconfig/CONFIG_DUMMY_CONSOLE_ROWS | 1 + baseconfig/CONFIG_DUMMY_IRQ | 1 + baseconfig/CONFIG_DVB_AS102 | 1 + baseconfig/CONFIG_DVB_AV7110 | 1 + baseconfig/CONFIG_DVB_AV7110_OSD | 1 + baseconfig/CONFIG_DVB_B2C2_FLEXCOP | 1 + baseconfig/CONFIG_DVB_B2C2_FLEXCOP_DEBUG | 1 + baseconfig/CONFIG_DVB_B2C2_FLEXCOP_PCI | 1 + baseconfig/CONFIG_DVB_B2C2_FLEXCOP_PCI_DEBUG | 1 + baseconfig/CONFIG_DVB_B2C2_FLEXCOP_USB | 1 + baseconfig/CONFIG_DVB_B2C2_FLEXCOP_USB_DEBUG | 1 + baseconfig/CONFIG_DVB_BT8XX | 1 + baseconfig/CONFIG_DVB_BUDGET | 1 + baseconfig/CONFIG_DVB_BUDGET_AV | 1 + baseconfig/CONFIG_DVB_BUDGET_CI | 1 + baseconfig/CONFIG_DVB_BUDGET_CORE | 1 + baseconfig/CONFIG_DVB_BUDGET_PATCH | 1 + baseconfig/CONFIG_DVB_CORE | 1 + baseconfig/CONFIG_DVB_CXD2099 | 1 + baseconfig/CONFIG_DVB_DDBRIDGE | 1 + baseconfig/CONFIG_DVB_DEMUX_SECTION_LOSS_LOG | 1 + baseconfig/CONFIG_DVB_DM1105 | 1 + baseconfig/CONFIG_DVB_DYNAMIC_MINORS | 1 + baseconfig/CONFIG_DVB_FIREDTV | 1 + baseconfig/CONFIG_DVB_HOPPER | 1 + baseconfig/CONFIG_DVB_MANTIS | 1 + baseconfig/CONFIG_DVB_MAX_ADAPTERS | 1 + baseconfig/CONFIG_DVB_MN88472 | 1 + baseconfig/CONFIG_DVB_MN88473 | 1 + baseconfig/CONFIG_DVB_NET | 1 + baseconfig/CONFIG_DVB_NETUP_UNIDVB | 1 + baseconfig/CONFIG_DVB_NGENE | 1 + baseconfig/CONFIG_DVB_PLATFORM_DRIVERS | 1 + baseconfig/CONFIG_DVB_PLUTO2 | 1 + baseconfig/CONFIG_DVB_PT1 | 1 + baseconfig/CONFIG_DVB_PT3 | 1 + baseconfig/CONFIG_DVB_RTL2832_SDR | 1 + baseconfig/CONFIG_DVB_SMIPCIE | 1 + baseconfig/CONFIG_DVB_TTUSB_BUDGET | 1 + baseconfig/CONFIG_DVB_TTUSB_DEC | 1 + baseconfig/CONFIG_DVB_USB | 1 + baseconfig/CONFIG_DVB_USB_A800 | 1 + baseconfig/CONFIG_DVB_USB_AF9005 | 1 + baseconfig/CONFIG_DVB_USB_AF9005_REMOTE | 1 + baseconfig/CONFIG_DVB_USB_AF9015 | 1 + baseconfig/CONFIG_DVB_USB_AF9035 | 1 + baseconfig/CONFIG_DVB_USB_ANYSEE | 1 + baseconfig/CONFIG_DVB_USB_AU6610 | 1 + baseconfig/CONFIG_DVB_USB_AZ6007 | 1 + baseconfig/CONFIG_DVB_USB_AZ6027 | 1 + baseconfig/CONFIG_DVB_USB_CE6230 | 1 + baseconfig/CONFIG_DVB_USB_CINERGY_T2 | 1 + baseconfig/CONFIG_DVB_USB_CXUSB | 1 + baseconfig/CONFIG_DVB_USB_DEBUG | 1 + baseconfig/CONFIG_DVB_USB_DIB0700 | 1 + baseconfig/CONFIG_DVB_USB_DIBUSB_MB | 1 + baseconfig/CONFIG_DVB_USB_DIBUSB_MB_FAULTY | 1 + baseconfig/CONFIG_DVB_USB_DIBUSB_MC | 1 + baseconfig/CONFIG_DVB_USB_DIGITV | 1 + baseconfig/CONFIG_DVB_USB_DTT200U | 1 + baseconfig/CONFIG_DVB_USB_DTV5100 | 1 + baseconfig/CONFIG_DVB_USB_DVBSKY | 1 + baseconfig/CONFIG_DVB_USB_DW2102 | 1 + baseconfig/CONFIG_DVB_USB_EC168 | 1 + baseconfig/CONFIG_DVB_USB_FRIIO | 1 + baseconfig/CONFIG_DVB_USB_GL861 | 1 + baseconfig/CONFIG_DVB_USB_GP8PSK | 1 + baseconfig/CONFIG_DVB_USB_LME2510 | 1 + baseconfig/CONFIG_DVB_USB_M920X | 1 + baseconfig/CONFIG_DVB_USB_MXL111SF | 1 + baseconfig/CONFIG_DVB_USB_NOVA_T_USB2 | 1 + baseconfig/CONFIG_DVB_USB_OPERA1 | 1 + baseconfig/CONFIG_DVB_USB_PCTV452E | 1 + baseconfig/CONFIG_DVB_USB_RTL28XXU | 1 + baseconfig/CONFIG_DVB_USB_TECHNISAT_USB2 | 1 + baseconfig/CONFIG_DVB_USB_TTUSB2 | 1 + baseconfig/CONFIG_DVB_USB_UMT_010 | 1 + baseconfig/CONFIG_DVB_USB_V2 | 1 + baseconfig/CONFIG_DVB_USB_VP702X | 1 + baseconfig/CONFIG_DVB_USB_VP7045 | 1 + baseconfig/CONFIG_DW_DMAC | 1 + baseconfig/CONFIG_DW_DMAC_BIG_ENDIAN_IO | 1 + baseconfig/CONFIG_DW_DMAC_CORE | 1 + baseconfig/CONFIG_DW_DMAC_PCI | 1 + baseconfig/CONFIG_DW_WATCHDOG | 1 + baseconfig/CONFIG_DYNAMIC_DEBUG | 1 + baseconfig/CONFIG_DYNAMIC_FTRACE | 1 + baseconfig/CONFIG_E100 | 1 + baseconfig/CONFIG_E1000 | 1 + baseconfig/CONFIG_E1000E | 1 + baseconfig/CONFIG_EARLY_PRINTK_DBGP | 1 + baseconfig/CONFIG_EBC_C384_WDT | 1 + baseconfig/CONFIG_ECHO | 1 + baseconfig/CONFIG_ECRYPT_FS | 1 + baseconfig/CONFIG_ECRYPT_FS_MESSAGING | 1 + baseconfig/CONFIG_EDAC | 1 + baseconfig/CONFIG_EDAC_DEBUG | 1 + baseconfig/CONFIG_EDAC_LEGACY_SYSFS | 1 + baseconfig/CONFIG_EDAC_MM_EDAC | 1 + baseconfig/CONFIG_EEPROM_93CX6 | 1 + baseconfig/CONFIG_EEPROM_93XX46 | 1 + baseconfig/CONFIG_EEPROM_AT24 | 1 + baseconfig/CONFIG_EEPROM_AT25 | 1 + baseconfig/CONFIG_EEPROM_LEGACY | 1 + baseconfig/CONFIG_EEPROM_MAX6875 | 1 + baseconfig/CONFIG_EFI_ALLOW_SECURE_BOOT_EXIT | 1 + baseconfig/CONFIG_EFI_PARTITION | 1 + baseconfig/CONFIG_EFI_PGT_DUMP | 1 + baseconfig/CONFIG_EFI_SECURE_BOOT_LOCK_DOWN | 1 + baseconfig/CONFIG_EFI_SIGNATURE_LIST_PARSER | 1 + baseconfig/CONFIG_EFI_TEST | 1 + baseconfig/CONFIG_EFS_FS | 1 + baseconfig/CONFIG_EMAC_ROCKCHIP | 1 + baseconfig/CONFIG_EMBEDDED | 1 + baseconfig/CONFIG_ENABLE_MUST_CHECK | 1 + baseconfig/CONFIG_ENABLE_WARN_DEPRECATED | 1 + baseconfig/CONFIG_ENC28J60 | 1 + baseconfig/CONFIG_ENCLOSURE_SERVICES | 1 + baseconfig/CONFIG_ENCRYPTED_KEYS | 1 + baseconfig/CONFIG_ENIC | 1 + baseconfig/CONFIG_ENVELOPE_DETECTOR | 1 + baseconfig/CONFIG_EPIC100 | 1 + baseconfig/CONFIG_EPOLL | 1 + baseconfig/CONFIG_EQUALIZER | 1 + baseconfig/CONFIG_ESI_DONGLE | 1 + baseconfig/CONFIG_ET131X | 1 + baseconfig/CONFIG_ETHERNET | 1 + baseconfig/CONFIG_ETHOC | 1 + baseconfig/CONFIG_EUROTECH_WDT | 1 + baseconfig/CONFIG_EVM | 1 + baseconfig/CONFIG_EXOFS_DEBUG | 1 + baseconfig/CONFIG_EXOFS_FS | 1 + baseconfig/CONFIG_EXPERIMENTAL | 1 + baseconfig/CONFIG_EXPERT | 1 + baseconfig/CONFIG_EXPORTFS | 1 + baseconfig/CONFIG_EXT2_FS | 1 + baseconfig/CONFIG_EXT3_FS | 1 + baseconfig/CONFIG_EXT4_DEBUG | 1 + baseconfig/CONFIG_EXT4_ENCRYPTION | 1 + baseconfig/CONFIG_EXT4_FS | 1 + baseconfig/CONFIG_EXT4_FS_POSIX_ACL | 1 + baseconfig/CONFIG_EXT4_FS_SECURITY | 1 + baseconfig/CONFIG_EXT4_USE_FOR_EXT2 | 1 + baseconfig/CONFIG_EXTCON | 1 + baseconfig/CONFIG_EXTCON_ADC_JACK | 1 + baseconfig/CONFIG_EXTCON_QCOM_SPMI_MISC | 1 + baseconfig/CONFIG_EXTRA_FIRMWARE | 1 + baseconfig/CONFIG_EZNPS_GIC | 1 + baseconfig/CONFIG_EZX_PCAP | 1 + baseconfig/CONFIG_F2FS_CHECK_FS | 1 + baseconfig/CONFIG_F2FS_FAULT_INJECTION | 1 + baseconfig/CONFIG_F2FS_FS | 1 + baseconfig/CONFIG_F2FS_FS_ENCRYPTION | 1 + baseconfig/CONFIG_F2FS_FS_POSIX_ACL | 1 + baseconfig/CONFIG_F2FS_FS_SECURITY | 1 + baseconfig/CONFIG_F2FS_FS_XATTR | 1 + baseconfig/CONFIG_F2FS_IO_TRACE | 1 + baseconfig/CONFIG_F2FS_STAT_FS | 1 + baseconfig/CONFIG_FAIL_FUTEX | 1 + baseconfig/CONFIG_FAIR_GROUP_SCHED | 1 + baseconfig/CONFIG_FANOTIFY | 1 + baseconfig/CONFIG_FANOTIFY_ACCESS_PERMISSIONS | 1 + baseconfig/CONFIG_FAT_DEFAULT_CODEPAGE | 1 + baseconfig/CONFIG_FAT_DEFAULT_IOCHARSET | 1 + baseconfig/CONFIG_FAT_DEFAULT_UTF8 | 1 + baseconfig/CONFIG_FAT_FS | 1 + baseconfig/CONFIG_FAULT_INJECTION | 1 + baseconfig/CONFIG_FB | 1 + baseconfig/CONFIG_FB_3DFX | 1 + baseconfig/CONFIG_FB_ARC | 1 + baseconfig/CONFIG_FB_ARK | 1 + baseconfig/CONFIG_FB_ASILIANT | 1 + baseconfig/CONFIG_FB_ATY | 1 + baseconfig/CONFIG_FB_ATY128 | 1 + baseconfig/CONFIG_FB_ATY128_BACKLIGHT | 1 + baseconfig/CONFIG_FB_ATY_BACKLIGHT | 1 + baseconfig/CONFIG_FB_ATY_CT | 1 + baseconfig/CONFIG_FB_ATY_GX | 1 + baseconfig/CONFIG_FB_AUO_K190X | 1 + baseconfig/CONFIG_FB_BROADSHEET | 1 + baseconfig/CONFIG_FB_CARMINE | 1 + baseconfig/CONFIG_FB_CIRRUS | 1 + baseconfig/CONFIG_FB_CYBER2000 | 1 + baseconfig/CONFIG_FB_EFI | 1 + baseconfig/CONFIG_FB_FOREIGN_ENDIAN | 1 + baseconfig/CONFIG_FB_GEODE | 1 + baseconfig/CONFIG_FB_GOLDFISH | 1 + baseconfig/CONFIG_FB_HECUBA | 1 + baseconfig/CONFIG_FB_HGA | 1 + baseconfig/CONFIG_FB_I740 | 1 + baseconfig/CONFIG_FB_I810 | 1 + baseconfig/CONFIG_FB_I810_GTF | 1 + baseconfig/CONFIG_FB_I810_I2C | 1 + baseconfig/CONFIG_FB_IBM_GXT4500 | 1 + baseconfig/CONFIG_FB_IMSTT | 1 + baseconfig/CONFIG_FB_KYRO | 1 + baseconfig/CONFIG_FB_LE80578 | 1 + baseconfig/CONFIG_FB_MATROX | 1 + baseconfig/CONFIG_FB_MATROX_G | 1 + baseconfig/CONFIG_FB_MATROX_I2C | 1 + baseconfig/CONFIG_FB_MATROX_MILLENIUM | 1 + baseconfig/CONFIG_FB_MATROX_MYSTIQUE | 1 + baseconfig/CONFIG_FB_MB862XX | 1 + baseconfig/CONFIG_FB_METRONOME | 1 + baseconfig/CONFIG_FB_MODE_HELPERS | 1 + baseconfig/CONFIG_FB_NEOMAGIC | 1 + baseconfig/CONFIG_FB_NVIDIA | 1 + baseconfig/CONFIG_FB_NVIDIA_BACKLIGHT | 1 + baseconfig/CONFIG_FB_NVIDIA_DEBUG | 1 + baseconfig/CONFIG_FB_NVIDIA_I2C | 1 + baseconfig/CONFIG_FB_OPENCORES | 1 + baseconfig/CONFIG_FB_PM2 | 1 + baseconfig/CONFIG_FB_PM2_FIFO_DISCONNECT | 1 + baseconfig/CONFIG_FB_PM3 | 1 + baseconfig/CONFIG_FB_PRE_INIT_FB | 1 + baseconfig/CONFIG_FB_RADEON | 1 + baseconfig/CONFIG_FB_RADEON_BACKLIGHT | 1 + baseconfig/CONFIG_FB_RADEON_DEBUG | 1 + baseconfig/CONFIG_FB_RADEON_I2C | 1 + baseconfig/CONFIG_FB_RIVA | 1 + baseconfig/CONFIG_FB_RIVA_BACKLIGHT | 1 + baseconfig/CONFIG_FB_RIVA_DEBUG | 1 + baseconfig/CONFIG_FB_RIVA_I2C | 1 + baseconfig/CONFIG_FB_S1D13XXX | 1 + baseconfig/CONFIG_FB_S3 | 1 + baseconfig/CONFIG_FB_SAVAGE | 1 + baseconfig/CONFIG_FB_SIMPLE | 1 + baseconfig/CONFIG_FB_SIS | 1 + baseconfig/CONFIG_FB_SM501 | 1 + baseconfig/CONFIG_FB_SM712 | 1 + baseconfig/CONFIG_FB_SM750 | 1 + baseconfig/CONFIG_FB_SMSCUFX | 1 + baseconfig/CONFIG_FB_TFT | 1 + baseconfig/CONFIG_FB_TILEBLITTING | 1 + baseconfig/CONFIG_FB_TMIO | 1 + baseconfig/CONFIG_FB_TRIDENT | 1 + baseconfig/CONFIG_FB_UDL | 1 + baseconfig/CONFIG_FB_UVESA | 1 + baseconfig/CONFIG_FB_VESA | 1 + baseconfig/CONFIG_FB_VGA16 | 1 + baseconfig/CONFIG_FB_VIA | 1 + baseconfig/CONFIG_FB_VIA_DIRECT_PROCFS | 1 + baseconfig/CONFIG_FB_VIRTUAL | 1 + baseconfig/CONFIG_FB_VOODOO1 | 1 + baseconfig/CONFIG_FB_VT8623 | 1 + baseconfig/CONFIG_FB_XGI | 1 + baseconfig/CONFIG_FCOE | 1 + baseconfig/CONFIG_FCOE_FNIC | 1 + baseconfig/CONFIG_FDDI | 1 + baseconfig/CONFIG_FEALNX | 1 + baseconfig/CONFIG_FHANDLE | 1 + baseconfig/CONFIG_FIREWIRE | 1 + baseconfig/CONFIG_FIREWIRE_NET | 1 + baseconfig/CONFIG_FIREWIRE_NOSY | 1 + baseconfig/CONFIG_FIREWIRE_OHCI | 1 + baseconfig/CONFIG_FIREWIRE_SBP2 | 1 + baseconfig/CONFIG_FIREWIRE_SERIAL | 1 + baseconfig/CONFIG_FIRMWARE_EDID | 1 + baseconfig/CONFIG_FIRMWARE_IN_KERNEL | 1 + baseconfig/CONFIG_FIXED_PHY | 1 + baseconfig/CONFIG_FM10K | 1 + baseconfig/CONFIG_FMC | 1 + baseconfig/CONFIG_FMC_CHARDEV | 1 + baseconfig/CONFIG_FMC_FAKEDEV | 1 + baseconfig/CONFIG_FMC_TRIVIAL | 1 + baseconfig/CONFIG_FMC_WRITE_EEPROM | 1 + baseconfig/CONFIG_FONTS | 1 + baseconfig/CONFIG_FORCEDETH | 1 + baseconfig/CONFIG_FPGA | 1 + baseconfig/CONFIG_FRAMEBUFFER_CONSOLE | 1 + .../CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY | 1 + .../CONFIG_FRAMEBUFFER_CONSOLE_ROTATION | 1 + baseconfig/CONFIG_FRAME_POINTER | 1 + baseconfig/CONFIG_FRAME_WARN | 1 + baseconfig/CONFIG_FRONTSWAP | 1 + baseconfig/CONFIG_FSCACHE | 1 + baseconfig/CONFIG_FSCACHE_DEBUG | 1 + baseconfig/CONFIG_FSCACHE_HISTOGRAM | 1 + baseconfig/CONFIG_FSCACHE_OBJECT_LIST | 1 + baseconfig/CONFIG_FSCACHE_STATS | 1 + baseconfig/CONFIG_FSL_EDMA | 1 + baseconfig/CONFIG_FSL_PQ_MDIO | 1 + baseconfig/CONFIG_FSNOTIFY | 1 + baseconfig/CONFIG_FS_DAX | 1 + baseconfig/CONFIG_FS_ENCRYPTION | 1 + baseconfig/CONFIG_FS_MBCACHE | 1 + baseconfig/CONFIG_FTL | 1 + baseconfig/CONFIG_FTRACE | 1 + baseconfig/CONFIG_FTRACE_MCOUNT_RECORD | 1 + baseconfig/CONFIG_FTRACE_STARTUP_TEST | 1 + baseconfig/CONFIG_FTRACE_SYSCALLS | 1 + baseconfig/CONFIG_FUNCTION_GRAPH_TRACER | 1 + baseconfig/CONFIG_FUNCTION_PROFILER | 1 + baseconfig/CONFIG_FUNCTION_TRACER | 1 + baseconfig/CONFIG_FUSE_FS | 1 + baseconfig/CONFIG_FUSION | 1 + baseconfig/CONFIG_FUSION_CTL | 1 + baseconfig/CONFIG_FUSION_FC | 1 + baseconfig/CONFIG_FUSION_LAN | 1 + baseconfig/CONFIG_FUSION_LOGGING | 1 + baseconfig/CONFIG_FUSION_MAX_SGE | 1 + baseconfig/CONFIG_FUSION_SAS | 1 + baseconfig/CONFIG_FUSION_SPI | 1 + baseconfig/CONFIG_FUTEX | 1 + baseconfig/CONFIG_FW_CFG_SYSFS | 1 + baseconfig/CONFIG_FW_CFG_SYSFS_CMDLINE | 1 + baseconfig/CONFIG_FW_LOADER | 1 + baseconfig/CONFIG_FW_LOADER_USER_HELPER | 1 + .../CONFIG_FW_LOADER_USER_HELPER_FALLBACK | 1 + baseconfig/CONFIG_GACT_PROB | 1 + baseconfig/CONFIG_GAMEPORT | 1 + baseconfig/CONFIG_GAMEPORT_EMU10K1 | 1 + baseconfig/CONFIG_GAMEPORT_FM801 | 1 + baseconfig/CONFIG_GAMEPORT_L4 | 1 + baseconfig/CONFIG_GAMEPORT_NS558 | 1 + baseconfig/CONFIG_GCC_PLUGINS | 1 + baseconfig/CONFIG_GCOV_KERNEL | 1 + baseconfig/CONFIG_GDB_SCRIPTS | 1 + baseconfig/CONFIG_GENERIC_ADC_BATTERY | 1 + baseconfig/CONFIG_GENERIC_ADC_THERMAL | 1 + baseconfig/CONFIG_GENERIC_PHY | 1 + baseconfig/CONFIG_GENEVE | 1 + baseconfig/CONFIG_GENWQE | 1 + baseconfig/CONFIG_GEN_RTC | 1 + baseconfig/CONFIG_GFS2_FS | 1 + baseconfig/CONFIG_GFS2_FS_LOCKING_DLM | 1 + baseconfig/CONFIG_GIGASET_BASE | 1 + baseconfig/CONFIG_GIGASET_CAPI | 1 + baseconfig/CONFIG_GIGASET_DEBUG | 1 + baseconfig/CONFIG_GIGASET_M101 | 1 + baseconfig/CONFIG_GIGASET_M105 | 1 + baseconfig/CONFIG_GIRBIL_DONGLE | 1 + baseconfig/CONFIG_GLOB_SELFTEST | 1 + baseconfig/CONFIG_GOLDFISH | 1 + baseconfig/CONFIG_GOOGLE_FIRMWARE | 1 + baseconfig/CONFIG_GP2AP020A00F | 1 + baseconfig/CONFIG_GPIOLIB | 1 + baseconfig/CONFIG_GPIO_104_DIO_48E | 1 + baseconfig/CONFIG_GPIO_104_IDIO_16 | 1 + baseconfig/CONFIG_GPIO_74X164 | 1 + baseconfig/CONFIG_GPIO_ADNP | 1 + baseconfig/CONFIG_GPIO_ADP5588 | 1 + baseconfig/CONFIG_GPIO_ALTERA | 1 + baseconfig/CONFIG_GPIO_AMD8111 | 1 + baseconfig/CONFIG_GPIO_AMDPT | 1 + baseconfig/CONFIG_GPIO_BT8XX | 1 + baseconfig/CONFIG_GPIO_CS5535 | 1 + baseconfig/CONFIG_GPIO_DWAPB | 1 + baseconfig/CONFIG_GPIO_GENERIC_PLATFORM | 1 + baseconfig/CONFIG_GPIO_GRGPIO | 1 + baseconfig/CONFIG_GPIO_IT87 | 1 + baseconfig/CONFIG_GPIO_MAX7300 | 1 + baseconfig/CONFIG_GPIO_MAX7301 | 1 + baseconfig/CONFIG_GPIO_MAX732X | 1 + baseconfig/CONFIG_GPIO_MC33880 | 1 + baseconfig/CONFIG_GPIO_MCP23S08 | 1 + baseconfig/CONFIG_GPIO_ML_IOH | 1 + baseconfig/CONFIG_GPIO_MOCKUP | 1 + baseconfig/CONFIG_GPIO_MPC8XXX | 1 + baseconfig/CONFIG_GPIO_PCA953X | 1 + baseconfig/CONFIG_GPIO_PCF857X | 1 + baseconfig/CONFIG_GPIO_PCH | 1 + baseconfig/CONFIG_GPIO_PISOSR | 1 + baseconfig/CONFIG_GPIO_RDC321X | 1 + baseconfig/CONFIG_GPIO_SCH | 1 + baseconfig/CONFIG_GPIO_SCH311X | 1 + baseconfig/CONFIG_GPIO_SX150X | 1 + baseconfig/CONFIG_GPIO_SYSCON | 1 + baseconfig/CONFIG_GPIO_SYSFS | 1 + baseconfig/CONFIG_GPIO_TPIC2810 | 1 + baseconfig/CONFIG_GPIO_TS4900 | 1 + baseconfig/CONFIG_GPIO_TS5500 | 1 + baseconfig/CONFIG_GPIO_VIPERBOARD | 1 + baseconfig/CONFIG_GPIO_VX855 | 1 + baseconfig/CONFIG_GPIO_WATCHDOG | 1 + baseconfig/CONFIG_GPIO_WS16C48 | 1 + baseconfig/CONFIG_GPIO_XILINX | 1 + baseconfig/CONFIG_GPIO_ZX | 1 + baseconfig/CONFIG_GREENASIA_FF | 1 + baseconfig/CONFIG_GREYBUS | 1 + baseconfig/CONFIG_GS_FPGABOOT | 1 + baseconfig/CONFIG_GTP | 1 + baseconfig/CONFIG_HAMACHI | 1 + baseconfig/CONFIG_HAMRADIO | 1 + baseconfig/CONFIG_HANGCHECK_TIMER | 1 + baseconfig/CONFIG_HAPPYMEAL | 1 + baseconfig/CONFIG_HARDENED_USERCOPY | 1 + baseconfig/CONFIG_HDC100X | 1 + baseconfig/CONFIG_HEADERS_CHECK | 1 + baseconfig/CONFIG_HERMES | 1 + baseconfig/CONFIG_HERMES_CACHE_FW_ON_INIT | 1 + baseconfig/CONFIG_HERMES_PRISM | 1 + baseconfig/CONFIG_HFSPLUS_FS | 1 + baseconfig/CONFIG_HFSPLUS_FS_POSIX_ACL | 1 + baseconfig/CONFIG_HFS_FS | 1 + baseconfig/CONFIG_HI8435 | 1 + baseconfig/CONFIG_HIBERNATION | 1 + baseconfig/CONFIG_HID | 1 + baseconfig/CONFIG_HIDRAW | 1 + baseconfig/CONFIG_HID_A4TECH | 1 + baseconfig/CONFIG_HID_ACRUX | 1 + baseconfig/CONFIG_HID_ACRUX_FF | 1 + baseconfig/CONFIG_HID_ALPS | 1 + baseconfig/CONFIG_HID_APPLE | 1 + baseconfig/CONFIG_HID_APPLEIR | 1 + baseconfig/CONFIG_HID_ASUS | 1 + baseconfig/CONFIG_HID_AUREAL | 1 + baseconfig/CONFIG_HID_BATTERY_STRENGTH | 1 + baseconfig/CONFIG_HID_BELKIN | 1 + baseconfig/CONFIG_HID_BETOP_FF | 1 + baseconfig/CONFIG_HID_CHERRY | 1 + baseconfig/CONFIG_HID_CHICONY | 1 + baseconfig/CONFIG_HID_CMEDIA | 1 + baseconfig/CONFIG_HID_CORSAIR | 1 + baseconfig/CONFIG_HID_CP2112 | 1 + baseconfig/CONFIG_HID_CYPRESS | 1 + baseconfig/CONFIG_HID_DRAGONRISE | 1 + baseconfig/CONFIG_HID_ELECOM | 1 + baseconfig/CONFIG_HID_ELO | 1 + baseconfig/CONFIG_HID_EMS_FF | 1 + baseconfig/CONFIG_HID_EZKEY | 1 + baseconfig/CONFIG_HID_GEMBIRD | 1 + baseconfig/CONFIG_HID_GENERIC | 1 + baseconfig/CONFIG_HID_GFRM | 1 + baseconfig/CONFIG_HID_GREENASIA | 1 + baseconfig/CONFIG_HID_GT683R | 1 + baseconfig/CONFIG_HID_GYRATION | 1 + baseconfig/CONFIG_HID_HOLTEK | 1 + baseconfig/CONFIG_HID_ICADE | 1 + baseconfig/CONFIG_HID_KENSINGTON | 1 + baseconfig/CONFIG_HID_KEYTOUCH | 1 + baseconfig/CONFIG_HID_KYE | 1 + baseconfig/CONFIG_HID_LCPOWER | 1 + baseconfig/CONFIG_HID_LED | 1 + baseconfig/CONFIG_HID_LENOVO | 1 + baseconfig/CONFIG_HID_LOGITECH | 1 + baseconfig/CONFIG_HID_LOGITECH_DJ | 1 + baseconfig/CONFIG_HID_LOGITECH_HIDPP | 1 + baseconfig/CONFIG_HID_MAGICMOUSE | 1 + baseconfig/CONFIG_HID_MAYFLASH | 1 + baseconfig/CONFIG_HID_MICROSOFT | 1 + baseconfig/CONFIG_HID_MONTEREY | 1 + baseconfig/CONFIG_HID_MULTITOUCH | 1 + baseconfig/CONFIG_HID_NTRIG | 1 + baseconfig/CONFIG_HID_ORTEK | 1 + baseconfig/CONFIG_HID_PANTHERLORD | 1 + baseconfig/CONFIG_HID_PENMOUNT | 1 + baseconfig/CONFIG_HID_PETALYNX | 1 + baseconfig/CONFIG_HID_PICOLCD | 1 + baseconfig/CONFIG_HID_PID | 1 + baseconfig/CONFIG_HID_PLANTRONICS | 1 + baseconfig/CONFIG_HID_PRIMAX | 1 + baseconfig/CONFIG_HID_PRODIKEYS | 1 + baseconfig/CONFIG_HID_RMI | 1 + baseconfig/CONFIG_HID_ROCCAT | 1 + baseconfig/CONFIG_HID_SAITEK | 1 + baseconfig/CONFIG_HID_SAMSUNG | 1 + baseconfig/CONFIG_HID_SENSOR_ACCEL_3D | 1 + baseconfig/CONFIG_HID_SENSOR_ALS | 1 + baseconfig/CONFIG_HID_SENSOR_CUSTOM_SENSOR | 1 + baseconfig/CONFIG_HID_SENSOR_DEVICE_ROTATION | 1 + baseconfig/CONFIG_HID_SENSOR_GYRO_3D | 1 + baseconfig/CONFIG_HID_SENSOR_HUB | 1 + baseconfig/CONFIG_HID_SENSOR_IIO_COMMON | 1 + baseconfig/CONFIG_HID_SENSOR_IIO_TRIGGER | 1 + baseconfig/CONFIG_HID_SENSOR_INCLINOMETER_3D | 1 + baseconfig/CONFIG_HID_SENSOR_MAGNETOMETER_3D | 1 + baseconfig/CONFIG_HID_SENSOR_PRESS | 1 + baseconfig/CONFIG_HID_SENSOR_PROX | 1 + baseconfig/CONFIG_HID_SMARTJOYPLUS | 1 + baseconfig/CONFIG_HID_SONY | 1 + baseconfig/CONFIG_HID_SPEEDLINK | 1 + baseconfig/CONFIG_HID_STEELSERIES | 1 + baseconfig/CONFIG_HID_SUNPLUS | 1 + baseconfig/CONFIG_HID_THINGM | 1 + baseconfig/CONFIG_HID_THRUSTMASTER | 1 + baseconfig/CONFIG_HID_TIVO | 1 + baseconfig/CONFIG_HID_TOPSEED | 1 + baseconfig/CONFIG_HID_TWINHAN | 1 + baseconfig/CONFIG_HID_UCLOGIC | 1 + baseconfig/CONFIG_HID_UDRAW_PS3 | 1 + baseconfig/CONFIG_HID_WACOM | 1 + baseconfig/CONFIG_HID_WALTOP | 1 + baseconfig/CONFIG_HID_WIIMOTE | 1 + baseconfig/CONFIG_HID_XINMO | 1 + baseconfig/CONFIG_HID_ZEROPLUS | 1 + baseconfig/CONFIG_HID_ZYDACRON | 1 + baseconfig/CONFIG_HIGH_RES_TIMERS | 1 + baseconfig/CONFIG_HIPPI | 1 + baseconfig/CONFIG_HISAX_16_3 | 1 + baseconfig/CONFIG_HISAX_1TR6 | 1 + baseconfig/CONFIG_HISAX_AVM_A1_CS | 1 + baseconfig/CONFIG_HISAX_AVM_A1_PCMCIA | 1 + baseconfig/CONFIG_HISAX_BKM_A4T | 1 + baseconfig/CONFIG_HISAX_DEBUG | 1 + baseconfig/CONFIG_HISAX_DIEHLDIVA | 1 + baseconfig/CONFIG_HISAX_ELSA | 1 + baseconfig/CONFIG_HISAX_ELSA_CS | 1 + baseconfig/CONFIG_HISAX_ENTERNOW_PCI | 1 + baseconfig/CONFIG_HISAX_EURO | 1 + baseconfig/CONFIG_HISAX_FRITZPCI | 1 + baseconfig/CONFIG_HISAX_FRITZ_PCIPNP | 1 + baseconfig/CONFIG_HISAX_GAZEL | 1 + baseconfig/CONFIG_HISAX_HFC4S8S | 1 + baseconfig/CONFIG_HISAX_HFCUSB | 1 + baseconfig/CONFIG_HISAX_HFC_PCI | 1 + baseconfig/CONFIG_HISAX_HFC_SX | 1 + baseconfig/CONFIG_HISAX_MAX_CARDS | 1 + baseconfig/CONFIG_HISAX_NETJET | 1 + baseconfig/CONFIG_HISAX_NETJET_U | 1 + baseconfig/CONFIG_HISAX_NI1 | 1 + baseconfig/CONFIG_HISAX_NICCY | 1 + baseconfig/CONFIG_HISAX_NO_KEYPAD | 1 + baseconfig/CONFIG_HISAX_NO_LLC | 1 + baseconfig/CONFIG_HISAX_NO_SENDCOMPLETE | 1 + baseconfig/CONFIG_HISAX_S0BOX | 1 + baseconfig/CONFIG_HISAX_SCT_QUADRO | 1 + baseconfig/CONFIG_HISAX_SEDLBAUER | 1 + baseconfig/CONFIG_HISAX_SEDLBAUER_CS | 1 + baseconfig/CONFIG_HISAX_ST5481 | 1 + baseconfig/CONFIG_HISAX_TELESPCI | 1 + baseconfig/CONFIG_HISAX_TELES_CS | 1 + baseconfig/CONFIG_HISAX_W6692 | 1 + baseconfig/CONFIG_HIST_TRIGGERS | 1 + baseconfig/CONFIG_HMC6352 | 1 + baseconfig/CONFIG_HMC_DRV | 1 + baseconfig/CONFIG_HOLTEK_FF | 1 + baseconfig/CONFIG_HOSTAP | 1 + baseconfig/CONFIG_HOTPLUG | 1 + baseconfig/CONFIG_HOTPLUG_CPU | 1 + baseconfig/CONFIG_HOTPLUG_PCI | 1 + baseconfig/CONFIG_HOTPLUG_PCI_ACPI | 1 + baseconfig/CONFIG_HOTPLUG_PCI_ACPI_IBM | 1 + baseconfig/CONFIG_HOTPLUG_PCI_CPCI | 1 + baseconfig/CONFIG_HOTPLUG_PCI_PCIE | 1 + baseconfig/CONFIG_HOTPLUG_PCI_SHPC | 1 + baseconfig/CONFIG_HP03 | 1 + baseconfig/CONFIG_HP206C | 1 + baseconfig/CONFIG_HPFS_FS | 1 + baseconfig/CONFIG_HP_ILO | 1 + baseconfig/CONFIG_HSI | 1 + baseconfig/CONFIG_HSR | 1 + baseconfig/CONFIG_HSU_DMA | 1 + baseconfig/CONFIG_HSU_DMA_PCI | 1 + baseconfig/CONFIG_HT16K33 | 1 + baseconfig/CONFIG_HTC_EGPIO | 1 + baseconfig/CONFIG_HTC_I2CPLD | 1 + baseconfig/CONFIG_HTC_PASIC3 | 1 + baseconfig/CONFIG_HTS221 | 1 + baseconfig/CONFIG_HTU21 | 1 + baseconfig/CONFIG_HT_IRQ | 1 + baseconfig/CONFIG_HUGETLBFS | 1 + baseconfig/CONFIG_HUGETLB_PAGE | 1 + baseconfig/CONFIG_HWLAT_TRACER | 1 + baseconfig/CONFIG_HWMON | 1 + baseconfig/CONFIG_HWMON_DEBUG_CHIP | 1 + baseconfig/CONFIG_HWPOISON_INJECT | 1 + baseconfig/CONFIG_HWSPINLOCK | 1 + baseconfig/CONFIG_HW_CONSOLE | 1 + baseconfig/CONFIG_HW_RANDOM | 1 + baseconfig/CONFIG_HW_RANDOM_OMAP | 1 + baseconfig/CONFIG_HW_RANDOM_TIMERIOMEM | 1 + baseconfig/CONFIG_HW_RANDOM_TPM | 1 + baseconfig/CONFIG_HW_RANDOM_VIRTIO | 1 + baseconfig/CONFIG_HYSDN | 1 + baseconfig/CONFIG_HYSDN_CAPI | 1 + baseconfig/CONFIG_HZ_1000 | 1 + baseconfig/CONFIG_I2C | 1 + baseconfig/CONFIG_I2C_ALGOBIT | 1 + baseconfig/CONFIG_I2C_ALGOPCA | 1 + baseconfig/CONFIG_I2C_ALGOPCF | 1 + baseconfig/CONFIG_I2C_ALI1535 | 1 + baseconfig/CONFIG_I2C_ALI1563 | 1 + baseconfig/CONFIG_I2C_ALI15X3 | 1 + baseconfig/CONFIG_I2C_AMD756 | 1 + baseconfig/CONFIG_I2C_AMD756_S4882 | 1 + baseconfig/CONFIG_I2C_AMD8111 | 1 + baseconfig/CONFIG_I2C_ARB_GPIO_CHALLENGE | 1 + baseconfig/CONFIG_I2C_BCM2048 | 1 + baseconfig/CONFIG_I2C_CADENCE | 1 + baseconfig/CONFIG_I2C_CBUS_GPIO | 1 + baseconfig/CONFIG_I2C_CHARDEV | 1 + baseconfig/CONFIG_I2C_COMPAT | 1 + baseconfig/CONFIG_I2C_DEBUG_ALGO | 1 + baseconfig/CONFIG_I2C_DEBUG_BUS | 1 + baseconfig/CONFIG_I2C_DEBUG_CORE | 1 + baseconfig/CONFIG_I2C_DEMUX_PINCTRL | 1 + baseconfig/CONFIG_I2C_DESIGNWARE | 1 + baseconfig/CONFIG_I2C_DESIGNWARE_PCI | 1 + baseconfig/CONFIG_I2C_DESIGNWARE_PLATFORM | 1 + baseconfig/CONFIG_I2C_DIOLAN_U2C | 1 + baseconfig/CONFIG_I2C_EG20T | 1 + baseconfig/CONFIG_I2C_EMEV2 | 1 + baseconfig/CONFIG_I2C_GPIO | 1 + baseconfig/CONFIG_I2C_HELPER_AUTO | 1 + baseconfig/CONFIG_I2C_HID | 1 + baseconfig/CONFIG_I2C_I801 | 1 + baseconfig/CONFIG_I2C_IMX_LPI2C | 1 + baseconfig/CONFIG_I2C_ISCH | 1 + baseconfig/CONFIG_I2C_MLXCPLD | 1 + baseconfig/CONFIG_I2C_MUX | 1 + baseconfig/CONFIG_I2C_MUX_GPIO | 1 + baseconfig/CONFIG_I2C_MUX_MLXCPLD | 1 + baseconfig/CONFIG_I2C_MUX_PCA9541 | 1 + baseconfig/CONFIG_I2C_MUX_PCA954x | 1 + baseconfig/CONFIG_I2C_MUX_PINCTRL | 1 + baseconfig/CONFIG_I2C_MUX_REG | 1 + baseconfig/CONFIG_I2C_NFORCE2 | 1 + baseconfig/CONFIG_I2C_NFORCE2_S4985 | 1 + baseconfig/CONFIG_I2C_OCORES | 1 + baseconfig/CONFIG_I2C_PARPORT | 1 + baseconfig/CONFIG_I2C_PARPORT_LIGHT | 1 + baseconfig/CONFIG_I2C_PCA_PLATFORM | 1 + baseconfig/CONFIG_I2C_PIIX4 | 1 + baseconfig/CONFIG_I2C_PXA | 1 + baseconfig/CONFIG_I2C_PXA_SLAVE | 1 + baseconfig/CONFIG_I2C_RK3X | 1 + baseconfig/CONFIG_I2C_ROBOTFUZZ_OSIF | 1 + baseconfig/CONFIG_I2C_SI470X | 1 + baseconfig/CONFIG_I2C_SI4713 | 1 + baseconfig/CONFIG_I2C_SIMTEC | 1 + baseconfig/CONFIG_I2C_SIS5595 | 1 + baseconfig/CONFIG_I2C_SIS630 | 1 + baseconfig/CONFIG_I2C_SIS96X | 1 + baseconfig/CONFIG_I2C_SLAVE | 1 + baseconfig/CONFIG_I2C_SLAVE_EEPROM | 1 + baseconfig/CONFIG_I2C_STUB | 1 + baseconfig/CONFIG_I2C_TAOS_EVM | 1 + baseconfig/CONFIG_I2C_TINY_USB | 1 + baseconfig/CONFIG_I2C_VIA | 1 + baseconfig/CONFIG_I2C_VIAPRO | 1 + baseconfig/CONFIG_I2C_VIPERBOARD | 1 + baseconfig/CONFIG_I2C_XILINX | 1 + baseconfig/CONFIG_I2O | 1 + baseconfig/CONFIG_I40E | 1 + baseconfig/CONFIG_I40EVF | 1 + baseconfig/CONFIG_I40E_DCB | 1 + baseconfig/CONFIG_I40E_FCOE | 1 + baseconfig/CONFIG_I6300ESB_WDT | 1 + baseconfig/CONFIG_I82092 | 1 + baseconfig/CONFIG_IAQCORE | 1 + baseconfig/CONFIG_IB700_WDT | 1 + baseconfig/CONFIG_IBMASR | 1 + baseconfig/CONFIG_ICPLUS_PHY | 1 + baseconfig/CONFIG_ICS932S401 | 1 + baseconfig/CONFIG_IDE | 1 + baseconfig/CONFIG_IDLE_PAGE_TRACKING | 1 + baseconfig/CONFIG_IDMA64 | 1 + baseconfig/CONFIG_IEEE802154 | 1 + baseconfig/CONFIG_IEEE802154_6LOWPAN | 1 + baseconfig/CONFIG_IEEE802154_ADF7242 | 1 + baseconfig/CONFIG_IEEE802154_AT86RF230 | 1 + .../CONFIG_IEEE802154_AT86RF230_DEBUGFS | 1 + baseconfig/CONFIG_IEEE802154_ATUSB | 1 + baseconfig/CONFIG_IEEE802154_CC2520 | 1 + baseconfig/CONFIG_IEEE802154_DRIVERS | 1 + baseconfig/CONFIG_IEEE802154_FAKELB | 1 + baseconfig/CONFIG_IEEE802154_MRF24J40 | 1 + .../CONFIG_IEEE802154_NL802154_EXPERIMENTAL | 1 + baseconfig/CONFIG_IEEE802154_SOCKET | 1 + baseconfig/CONFIG_IFB | 1 + baseconfig/CONFIG_IGB | 1 + baseconfig/CONFIG_IGBVF | 1 + baseconfig/CONFIG_IGB_DCA | 1 + baseconfig/CONFIG_IGB_HWMON | 1 + baseconfig/CONFIG_IIO | 1 + baseconfig/CONFIG_IIO_BUFFER | 1 + baseconfig/CONFIG_IIO_BUFFER_CB | 1 + baseconfig/CONFIG_IIO_CONFIGFS | 1 + baseconfig/CONFIG_IIO_CONSUMERS_PER_TRIGGER | 1 + baseconfig/CONFIG_IIO_CROS_EC_SENSORS | 1 + baseconfig/CONFIG_IIO_CROS_EC_SENSORS_COR | 1 + baseconfig/CONFIG_IIO_CROS_EC_SENSORS_CORE | 1 + baseconfig/CONFIG_IIO_HRTIMER_TRIGGER | 1 + baseconfig/CONFIG_IIO_INTERRUPT_TRIGGER | 1 + baseconfig/CONFIG_IIO_KFIFO_BUF | 1 + baseconfig/CONFIG_IIO_SIMPLE_DUMMY | 1 + baseconfig/CONFIG_IIO_SSP_SENSORHUB | 1 + baseconfig/CONFIG_IIO_ST_ACCEL_3AXIS | 1 + baseconfig/CONFIG_IIO_ST_ACCEL_I2C_3AXIS | 1 + baseconfig/CONFIG_IIO_ST_ACCEL_SPI_3AXIS | 1 + baseconfig/CONFIG_IIO_ST_GYRO_3AXIS | 1 + baseconfig/CONFIG_IIO_ST_GYRO_I2C_3AXIS | 1 + baseconfig/CONFIG_IIO_ST_GYRO_SPI_3AXIS | 1 + baseconfig/CONFIG_IIO_ST_MAGN_3AXIS | 1 + baseconfig/CONFIG_IIO_ST_PRESS | 1 + baseconfig/CONFIG_IIO_SW_DEVICE | 1 + baseconfig/CONFIG_IIO_SW_TRIGGER | 1 + baseconfig/CONFIG_IIO_SYSFS_TRIGGER | 1 + baseconfig/CONFIG_IIO_TIGHTLOOP_TRIGGER | 1 + baseconfig/CONFIG_IIO_TRIGGER | 1 + baseconfig/CONFIG_IIO_TRIGGERED_BUFFER | 1 + baseconfig/CONFIG_IKCONFIG | 1 + baseconfig/CONFIG_IMA | 1 + baseconfig/CONFIG_IMA_LSM_RULES | 1 + baseconfig/CONFIG_IMA_MEASURE_PCR_IDX | 1 + baseconfig/CONFIG_IMG_ASCII_LCD | 1 + baseconfig/CONFIG_INA2XX_ADC | 1 + baseconfig/CONFIG_INET | 1 + baseconfig/CONFIG_INET6_AH | 1 + baseconfig/CONFIG_INET6_ESP | 1 + baseconfig/CONFIG_INET6_IPCOMP | 1 + baseconfig/CONFIG_INET6_XFRM_MODE_BEET | 1 + .../CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION | 1 + baseconfig/CONFIG_INET6_XFRM_MODE_TRANSPORT | 1 + baseconfig/CONFIG_INET6_XFRM_MODE_TUNNEL | 1 + baseconfig/CONFIG_INET_AH | 1 + baseconfig/CONFIG_INET_DIAG | 1 + baseconfig/CONFIG_INET_DIAG_DESTROY | 1 + baseconfig/CONFIG_INET_ESP | 1 + baseconfig/CONFIG_INET_IPCOMP | 1 + baseconfig/CONFIG_INET_RAW_DIAG | 1 + baseconfig/CONFIG_INET_TUNNEL | 1 + baseconfig/CONFIG_INET_UDP_DIAG | 1 + baseconfig/CONFIG_INET_XFRM_MODE_BEET | 1 + baseconfig/CONFIG_INET_XFRM_MODE_TRANSPORT | 1 + baseconfig/CONFIG_INET_XFRM_MODE_TUNNEL | 1 + baseconfig/CONFIG_INFINIBAND | 1 + baseconfig/CONFIG_INFINIBAND_CXGB3 | 1 + baseconfig/CONFIG_INFINIBAND_CXGB3_DEBUG | 1 + baseconfig/CONFIG_INFINIBAND_CXGB4 | 1 + baseconfig/CONFIG_INFINIBAND_I40IW | 1 + baseconfig/CONFIG_INFINIBAND_IPOIB | 1 + baseconfig/CONFIG_INFINIBAND_IPOIB_CM | 1 + baseconfig/CONFIG_INFINIBAND_IPOIB_DEBUG | 1 + baseconfig/CONFIG_INFINIBAND_IPOIB_DEBUG_DATA | 1 + baseconfig/CONFIG_INFINIBAND_ISER | 1 + baseconfig/CONFIG_INFINIBAND_ISERT | 1 + baseconfig/CONFIG_INFINIBAND_MTHCA | 1 + baseconfig/CONFIG_INFINIBAND_NES | 1 + baseconfig/CONFIG_INFINIBAND_NES_DEBUG | 1 + baseconfig/CONFIG_INFINIBAND_OCRDMA | 1 + baseconfig/CONFIG_INFINIBAND_ON_DEMAND_PAGING | 1 + baseconfig/CONFIG_INFINIBAND_QEDR | 1 + baseconfig/CONFIG_INFINIBAND_QIB | 1 + baseconfig/CONFIG_INFINIBAND_QIB_DCA | 1 + baseconfig/CONFIG_INFINIBAND_RDMAVT | 1 + baseconfig/CONFIG_INFINIBAND_SRP | 1 + baseconfig/CONFIG_INFINIBAND_SRPT | 1 + baseconfig/CONFIG_INFINIBAND_USER_ACCESS | 1 + baseconfig/CONFIG_INFINIBAND_USER_MAD | 1 + baseconfig/CONFIG_INFINIBAND_USNIC | 1 + baseconfig/CONFIG_INFINIBAND_VMWARE_PVRDMA | 1 + baseconfig/CONFIG_INFTL | 1 + baseconfig/CONFIG_INITRAMFS_SOURCE | 1 + baseconfig/CONFIG_INOTIFY | 1 + baseconfig/CONFIG_INOTIFY_USER | 1 + baseconfig/CONFIG_INPUT | 1 + baseconfig/CONFIG_INPUT_AD714X | 1 + baseconfig/CONFIG_INPUT_ADXL34X | 1 + baseconfig/CONFIG_INPUT_APANEL | 1 + baseconfig/CONFIG_INPUT_ATI_REMOTE2 | 1 + baseconfig/CONFIG_INPUT_ATLAS_BTNS | 1 + baseconfig/CONFIG_INPUT_ATMEL_CAPTOUCH | 1 + baseconfig/CONFIG_INPUT_BMA150 | 1 + baseconfig/CONFIG_INPUT_CM109 | 1 + baseconfig/CONFIG_INPUT_CMA3000 | 1 + baseconfig/CONFIG_INPUT_CMA3000_I2C | 1 + baseconfig/CONFIG_INPUT_DRV260X_HAPTICS | 1 + baseconfig/CONFIG_INPUT_DRV2665_HAPTICS | 1 + baseconfig/CONFIG_INPUT_DRV2667_HAPTICS | 1 + baseconfig/CONFIG_INPUT_E3X0_BUTTON | 1 + baseconfig/CONFIG_INPUT_EVBUG | 1 + baseconfig/CONFIG_INPUT_EVDEV | 1 + baseconfig/CONFIG_INPUT_FF_MEMLESS | 1 + baseconfig/CONFIG_INPUT_GP2A | 1 + baseconfig/CONFIG_INPUT_GPIO | 1 + baseconfig/CONFIG_INPUT_GPIO_BEEPER | 1 + baseconfig/CONFIG_INPUT_GPIO_DECODER | 1 + baseconfig/CONFIG_INPUT_GPIO_ROTARY_ENCODER | 1 + baseconfig/CONFIG_INPUT_GPIO_TILT_POLLED | 1 + baseconfig/CONFIG_INPUT_IDEAPAD_SLIDEBAR | 1 + baseconfig/CONFIG_INPUT_IMS_PCU | 1 + baseconfig/CONFIG_INPUT_JOYDEV | 1 + baseconfig/CONFIG_INPUT_JOYSTICK | 1 + baseconfig/CONFIG_INPUT_KEYBOARD | 1 + baseconfig/CONFIG_INPUT_KEYSPAN_REMOTE | 1 + baseconfig/CONFIG_INPUT_KXTJ9 | 1 + baseconfig/CONFIG_INPUT_KXTJ9_POLLED_MODE | 1 + baseconfig/CONFIG_INPUT_LEDS | 1 + baseconfig/CONFIG_INPUT_MATRIXKMAP | 1 + baseconfig/CONFIG_INPUT_MISC | 1 + baseconfig/CONFIG_INPUT_MMA8450 | 1 + baseconfig/CONFIG_INPUT_MOUSE | 1 + baseconfig/CONFIG_INPUT_MOUSEDEV | 1 + baseconfig/CONFIG_INPUT_MOUSEDEV_PSAUX | 1 + baseconfig/CONFIG_INPUT_MOUSEDEV_SCREEN_X | 1 + baseconfig/CONFIG_INPUT_MOUSEDEV_SCREEN_Y | 1 + baseconfig/CONFIG_INPUT_MPU3050 | 1 + baseconfig/CONFIG_INPUT_PCF50633_PMU | 1 + baseconfig/CONFIG_INPUT_PCF8574 | 1 + baseconfig/CONFIG_INPUT_PCSPKR | 1 + baseconfig/CONFIG_INPUT_PM8XXX_VIBRATOR | 1 + baseconfig/CONFIG_INPUT_PMIC8XXX_PWRKEY | 1 + baseconfig/CONFIG_INPUT_POLLDEV | 1 + baseconfig/CONFIG_INPUT_POWERMATE | 1 + baseconfig/CONFIG_INPUT_PWM_BEEPER | 1 + baseconfig/CONFIG_INPUT_RETU_PWRBUTTON | 1 + baseconfig/CONFIG_INPUT_SPARSEKMAP | 1 + baseconfig/CONFIG_INPUT_TABLET | 1 + baseconfig/CONFIG_INPUT_TOUCHSCREEN | 1 + baseconfig/CONFIG_INPUT_UINPUT | 1 + baseconfig/CONFIG_INPUT_WISTRON_BTNS | 1 + baseconfig/CONFIG_INPUT_WM831X_ON | 1 + baseconfig/CONFIG_INPUT_YEALINK | 1 + baseconfig/CONFIG_INTEGRITY | 1 + baseconfig/CONFIG_INTEL_IDMA64 | 1 + baseconfig/CONFIG_INTEL_MENLOW | 1 + baseconfig/CONFIG_INTEL_RDT_A | 1 + baseconfig/CONFIG_INTEL_SOC_PMIC | 1 + baseconfig/CONFIG_INTEL_TH | 1 + baseconfig/CONFIG_INTEL_XWAY_PHY | 1 + baseconfig/CONFIG_INTERVAL_TREE_TEST | 1 + baseconfig/CONFIG_INV_MPU6050_I2C | 1 + baseconfig/CONFIG_INV_MPU6050_IIO | 1 + baseconfig/CONFIG_INV_MPU6050_SPI | 1 + baseconfig/CONFIG_IOMMU_SUPPORT | 1 + baseconfig/CONFIG_IOSCHED_CFQ | 1 + baseconfig/CONFIG_IOSCHED_DEADLINE | 1 + baseconfig/CONFIG_IOSCHED_NOOP | 1 + baseconfig/CONFIG_IO_STRICT_DEVMEM | 1 + baseconfig/CONFIG_IP6_NF_FILTER | 1 + baseconfig/CONFIG_IP6_NF_IPTABLES | 1 + baseconfig/CONFIG_IP6_NF_MANGLE | 1 + baseconfig/CONFIG_IP6_NF_MATCH_AH | 1 + baseconfig/CONFIG_IP6_NF_MATCH_EUI64 | 1 + baseconfig/CONFIG_IP6_NF_MATCH_FRAG | 1 + baseconfig/CONFIG_IP6_NF_MATCH_HL | 1 + baseconfig/CONFIG_IP6_NF_MATCH_IPV6HEADER | 1 + baseconfig/CONFIG_IP6_NF_MATCH_MH | 1 + baseconfig/CONFIG_IP6_NF_MATCH_OPTS | 1 + baseconfig/CONFIG_IP6_NF_MATCH_RPFILTER | 1 + baseconfig/CONFIG_IP6_NF_MATCH_RT | 1 + baseconfig/CONFIG_IP6_NF_NAT | 1 + baseconfig/CONFIG_IP6_NF_RAW | 1 + baseconfig/CONFIG_IP6_NF_SECURITY | 1 + baseconfig/CONFIG_IP6_NF_TARGET_HL | 1 + baseconfig/CONFIG_IP6_NF_TARGET_MASQUERADE | 1 + baseconfig/CONFIG_IP6_NF_TARGET_NPT | 1 + baseconfig/CONFIG_IP6_NF_TARGET_REJECT | 1 + baseconfig/CONFIG_IP6_NF_TARGET_SYNPROXY | 1 + baseconfig/CONFIG_IPACK_BUS | 1 + baseconfig/CONFIG_IPC_NS | 1 + baseconfig/CONFIG_IPDDP | 1 + baseconfig/CONFIG_IPDDP_ENCAP | 1 + baseconfig/CONFIG_IPMI_DEVICE_INTERFACE | 1 + baseconfig/CONFIG_IPMI_HANDLER | 1 + baseconfig/CONFIG_IPMI_PANIC_EVENT | 1 + baseconfig/CONFIG_IPMI_POWEROFF | 1 + baseconfig/CONFIG_IPMI_SI | 1 + baseconfig/CONFIG_IPMI_SSIF | 1 + baseconfig/CONFIG_IPMI_WATCHDOG | 1 + baseconfig/CONFIG_IPPP_FILTER | 1 + baseconfig/CONFIG_IPV6 | 1 + baseconfig/CONFIG_IPV6_GRE | 1 + baseconfig/CONFIG_IPV6_ILA | 1 + baseconfig/CONFIG_IPV6_MIP6 | 1 + baseconfig/CONFIG_IPV6_MROUTE | 1 + baseconfig/CONFIG_IPV6_MROUTE_MULTIPLE_TABLES | 1 + baseconfig/CONFIG_IPV6_MULTIPLE_TABLES | 1 + baseconfig/CONFIG_IPV6_OPTIMISTIC_DAD | 1 + baseconfig/CONFIG_IPV6_PIMSM_V2 | 1 + baseconfig/CONFIG_IPV6_ROUTER_PREF | 1 + baseconfig/CONFIG_IPV6_ROUTE_INFO | 1 + baseconfig/CONFIG_IPV6_SEG6_HMAC | 1 + baseconfig/CONFIG_IPV6_SEG6_INLINE | 1 + baseconfig/CONFIG_IPV6_SEG6_LWTUNNEL | 1 + baseconfig/CONFIG_IPV6_SIT | 1 + baseconfig/CONFIG_IPV6_SIT_6RD | 1 + baseconfig/CONFIG_IPV6_SUBTREES | 1 + baseconfig/CONFIG_IPV6_TUNNEL | 1 + baseconfig/CONFIG_IPV6_VTI | 1 + baseconfig/CONFIG_IPVLAN | 1 + baseconfig/CONFIG_IPW2100 | 1 + baseconfig/CONFIG_IPW2100_DEBUG | 1 + baseconfig/CONFIG_IPW2200 | 1 + baseconfig/CONFIG_IPW2200_DEBUG | 1 + baseconfig/CONFIG_IPWIRELESS | 1 + baseconfig/CONFIG_IPX | 1 + baseconfig/CONFIG_IPX_INTERN | 1 + baseconfig/CONFIG_IP_ADVANCED_ROUTER | 1 + baseconfig/CONFIG_IP_DCCP | 1 + baseconfig/CONFIG_IP_DCCP_CCID2 | 1 + baseconfig/CONFIG_IP_DCCP_CCID2_DEBUG | 1 + baseconfig/CONFIG_IP_DCCP_CCID3 | 1 + baseconfig/CONFIG_IP_DCCP_CCID3_DEBUG | 1 + baseconfig/CONFIG_IP_DCCP_DEBUG | 1 + baseconfig/CONFIG_IP_FIB_TRIE_STATS | 1 + baseconfig/CONFIG_IP_MROUTE | 1 + baseconfig/CONFIG_IP_MROUTE_MULTIPLE_TABLES | 1 + baseconfig/CONFIG_IP_MULTICAST | 1 + baseconfig/CONFIG_IP_MULTIPLE_TABLES | 1 + baseconfig/CONFIG_IP_NF_ARPFILTER | 1 + baseconfig/CONFIG_IP_NF_ARPTABLES | 1 + baseconfig/CONFIG_IP_NF_ARP_MANGLE | 1 + baseconfig/CONFIG_IP_NF_FILTER | 1 + baseconfig/CONFIG_IP_NF_IPTABLES | 1 + baseconfig/CONFIG_IP_NF_MANGLE | 1 + baseconfig/CONFIG_IP_NF_MATCH_AH | 1 + baseconfig/CONFIG_IP_NF_MATCH_ECN | 1 + baseconfig/CONFIG_IP_NF_MATCH_RPFILTER | 1 + baseconfig/CONFIG_IP_NF_MATCH_TTL | 1 + baseconfig/CONFIG_IP_NF_NAT | 1 + baseconfig/CONFIG_IP_NF_RAW | 1 + baseconfig/CONFIG_IP_NF_SECURITY | 1 + baseconfig/CONFIG_IP_NF_TARGET_CLUSTERIP | 1 + baseconfig/CONFIG_IP_NF_TARGET_ECN | 1 + baseconfig/CONFIG_IP_NF_TARGET_MASQUERADE | 1 + baseconfig/CONFIG_IP_NF_TARGET_NETMAP | 1 + baseconfig/CONFIG_IP_NF_TARGET_REDIRECT | 1 + baseconfig/CONFIG_IP_NF_TARGET_REJECT | 1 + baseconfig/CONFIG_IP_NF_TARGET_SYNPROXY | 1 + baseconfig/CONFIG_IP_NF_TARGET_TTL | 1 + baseconfig/CONFIG_IP_PIMSM_V1 | 1 + baseconfig/CONFIG_IP_PIMSM_V2 | 1 + baseconfig/CONFIG_IP_PNP | 1 + baseconfig/CONFIG_IP_ROUTE_MULTIPATH | 1 + baseconfig/CONFIG_IP_ROUTE_VERBOSE | 1 + baseconfig/CONFIG_IP_SCTP | 1 + baseconfig/CONFIG_IP_SET | 1 + baseconfig/CONFIG_IP_SET_BITMAP_IP | 1 + baseconfig/CONFIG_IP_SET_BITMAP_IPMAC | 1 + baseconfig/CONFIG_IP_SET_BITMAP_PORT | 1 + baseconfig/CONFIG_IP_SET_HASH_IP | 1 + baseconfig/CONFIG_IP_SET_HASH_IPMAC | 1 + baseconfig/CONFIG_IP_SET_HASH_IPMARK | 1 + baseconfig/CONFIG_IP_SET_HASH_IPPORT | 1 + baseconfig/CONFIG_IP_SET_HASH_IPPORTIP | 1 + baseconfig/CONFIG_IP_SET_HASH_IPPORTNET | 1 + baseconfig/CONFIG_IP_SET_HASH_MAC | 1 + baseconfig/CONFIG_IP_SET_HASH_NET | 1 + baseconfig/CONFIG_IP_SET_HASH_NETIFACE | 1 + baseconfig/CONFIG_IP_SET_HASH_NETNET | 1 + baseconfig/CONFIG_IP_SET_HASH_NETPORT | 1 + baseconfig/CONFIG_IP_SET_HASH_NETPORTNET | 1 + baseconfig/CONFIG_IP_SET_LIST_SET | 1 + baseconfig/CONFIG_IP_SET_MAX | 1 + baseconfig/CONFIG_IP_VS | 1 + baseconfig/CONFIG_IP_VS_DEBUG | 1 + baseconfig/CONFIG_IP_VS_DH | 1 + baseconfig/CONFIG_IP_VS_FO | 1 + baseconfig/CONFIG_IP_VS_FTP | 1 + baseconfig/CONFIG_IP_VS_IPV6 | 1 + baseconfig/CONFIG_IP_VS_LBLC | 1 + baseconfig/CONFIG_IP_VS_LBLCR | 1 + baseconfig/CONFIG_IP_VS_LC | 1 + baseconfig/CONFIG_IP_VS_NQ | 1 + baseconfig/CONFIG_IP_VS_OVF | 1 + baseconfig/CONFIG_IP_VS_PE_SIP | 1 + baseconfig/CONFIG_IP_VS_PROTO_AH | 1 + baseconfig/CONFIG_IP_VS_PROTO_ESP | 1 + baseconfig/CONFIG_IP_VS_PROTO_SCTP | 1 + baseconfig/CONFIG_IP_VS_PROTO_TCP | 1 + baseconfig/CONFIG_IP_VS_PROTO_UDP | 1 + baseconfig/CONFIG_IP_VS_RR | 1 + baseconfig/CONFIG_IP_VS_SED | 1 + baseconfig/CONFIG_IP_VS_SH | 1 + baseconfig/CONFIG_IP_VS_SH_TAB_BITS | 1 + baseconfig/CONFIG_IP_VS_TAB_BITS | 1 + baseconfig/CONFIG_IP_VS_WLC | 1 + baseconfig/CONFIG_IP_VS_WRR | 1 + baseconfig/CONFIG_IRCOMM | 1 + baseconfig/CONFIG_IRDA | 1 + baseconfig/CONFIG_IRDA_CACHE_LAST_LSAP | 1 + baseconfig/CONFIG_IRDA_DEBUG | 1 + baseconfig/CONFIG_IRDA_FAST_RR | 1 + baseconfig/CONFIG_IRDA_ULTRA | 1 + baseconfig/CONFIG_IRLAN | 1 + baseconfig/CONFIG_IRNET | 1 + baseconfig/CONFIG_IRQSOFF_TRACER | 1 + baseconfig/CONFIG_IRQ_TIME_ACCOUNTING | 1 + baseconfig/CONFIG_IRTTY_SIR | 1 + baseconfig/CONFIG_IR_ENE | 1 + baseconfig/CONFIG_IR_FINTEK | 1 + baseconfig/CONFIG_IR_GPIO_CIR | 1 + baseconfig/CONFIG_IR_HIX5HD2 | 1 + baseconfig/CONFIG_IR_IGORPLUGUSB | 1 + baseconfig/CONFIG_IR_IGUANA | 1 + baseconfig/CONFIG_IR_IMG | 1 + baseconfig/CONFIG_IR_IMON | 1 + baseconfig/CONFIG_IR_ITE_CIR | 1 + baseconfig/CONFIG_IR_JVC_DECODER | 1 + baseconfig/CONFIG_IR_LIRC_CODEC | 1 + baseconfig/CONFIG_IR_MCEUSB | 1 + baseconfig/CONFIG_IR_MCE_KBD_DECODER | 1 + baseconfig/CONFIG_IR_NEC_DECODER | 1 + baseconfig/CONFIG_IR_NUVOTON | 1 + baseconfig/CONFIG_IR_RC5_DECODER | 1 + baseconfig/CONFIG_IR_RC6_DECODER | 1 + baseconfig/CONFIG_IR_REDRAT3 | 1 + baseconfig/CONFIG_IR_SANYO_DECODER | 1 + baseconfig/CONFIG_IR_SERIAL | 1 + baseconfig/CONFIG_IR_SERIAL_TRANSMITTER | 1 + baseconfig/CONFIG_IR_SHARP_DECODER | 1 + baseconfig/CONFIG_IR_SONY_DECODER | 1 + baseconfig/CONFIG_IR_STREAMZAP | 1 + baseconfig/CONFIG_IR_TTUSBIR | 1 + baseconfig/CONFIG_IR_WINBOND_CIR | 1 + baseconfig/CONFIG_IR_XMP_DECODER | 1 + baseconfig/CONFIG_ISA | 1 + baseconfig/CONFIG_ISCSI_BOOT_SYSFS | 1 + baseconfig/CONFIG_ISCSI_TARGET | 1 + baseconfig/CONFIG_ISCSI_TARGET_CXGB4 | 1 + baseconfig/CONFIG_ISCSI_TCP | 1 + baseconfig/CONFIG_ISDN | 1 + baseconfig/CONFIG_ISDN_AUDIO | 1 + baseconfig/CONFIG_ISDN_CAPI | 1 + baseconfig/CONFIG_ISDN_CAPI_CAPI20 | 1 + baseconfig/CONFIG_ISDN_CAPI_CAPIDRV | 1 + baseconfig/CONFIG_ISDN_CAPI_CAPIDRV_VERBOSE | 1 + baseconfig/CONFIG_ISDN_CAPI_MIDDLEWARE | 1 + baseconfig/CONFIG_ISDN_DIVAS | 1 + baseconfig/CONFIG_ISDN_DIVAS_BRIPCI | 1 + baseconfig/CONFIG_ISDN_DIVAS_DIVACAPI | 1 + baseconfig/CONFIG_ISDN_DIVAS_MAINT | 1 + baseconfig/CONFIG_ISDN_DIVAS_PRIPCI | 1 + baseconfig/CONFIG_ISDN_DIVAS_USERIDI | 1 + baseconfig/CONFIG_ISDN_DIVERSION | 1 + baseconfig/CONFIG_ISDN_DRV_AVMB1_AVM_CS | 1 + baseconfig/CONFIG_ISDN_DRV_AVMB1_B1PCI | 1 + baseconfig/CONFIG_ISDN_DRV_AVMB1_B1PCIV4 | 1 + baseconfig/CONFIG_ISDN_DRV_AVMB1_B1PCMCIA | 1 + baseconfig/CONFIG_ISDN_DRV_AVMB1_C4 | 1 + baseconfig/CONFIG_ISDN_DRV_AVMB1_T1PCI | 1 + baseconfig/CONFIG_ISDN_DRV_GIGASET | 1 + baseconfig/CONFIG_ISDN_DRV_HISAX | 1 + baseconfig/CONFIG_ISDN_DRV_LOOP | 1 + baseconfig/CONFIG_ISDN_I4L | 1 + baseconfig/CONFIG_ISDN_MPP | 1 + baseconfig/CONFIG_ISDN_PPP | 1 + baseconfig/CONFIG_ISDN_PPP_BSDCOMP | 1 + baseconfig/CONFIG_ISDN_PPP_VJ | 1 + baseconfig/CONFIG_ISDN_TTY_FAX | 1 + baseconfig/CONFIG_ISI | 1 + baseconfig/CONFIG_ISL29003 | 1 + baseconfig/CONFIG_ISL29020 | 1 + baseconfig/CONFIG_ISL29125 | 1 + baseconfig/CONFIG_ISO9660_FS | 1 + baseconfig/CONFIG_IT8712F_WDT | 1 + baseconfig/CONFIG_IT87_WDT | 1 + baseconfig/CONFIG_ITCO_VENDOR_SUPPORT | 1 + baseconfig/CONFIG_ITCO_WDT | 1 + baseconfig/CONFIG_ITG3200 | 1 + baseconfig/CONFIG_IWL3945 | 1 + baseconfig/CONFIG_IWL4965 | 1 + baseconfig/CONFIG_IWLDVM | 1 + baseconfig/CONFIG_IWLEGACY | 1 + baseconfig/CONFIG_IWLEGACY_DEBUG | 1 + baseconfig/CONFIG_IWLEGACY_DEBUGFS | 1 + baseconfig/CONFIG_IWLMVM | 1 + baseconfig/CONFIG_IWLWIFI | 1 + baseconfig/CONFIG_IWLWIFI_BCAST_FILTERING | 1 + baseconfig/CONFIG_IWLWIFI_DEBUG | 1 + baseconfig/CONFIG_IWLWIFI_DEBUGFS | 1 + baseconfig/CONFIG_IWLWIFI_DEVICE_TRACING | 1 + baseconfig/CONFIG_IWLWIFI_PCIE_RTPM | 1 + baseconfig/CONFIG_IWM | 1 + baseconfig/CONFIG_IXGB | 1 + baseconfig/CONFIG_IXGBE | 1 + baseconfig/CONFIG_IXGBEVF | 1 + baseconfig/CONFIG_IXGBE_DCA | 1 + baseconfig/CONFIG_IXGBE_DCB | 1 + baseconfig/CONFIG_IXGBE_HWMON | 1 + baseconfig/CONFIG_JBD2 | 1 + baseconfig/CONFIG_JBD2_DEBUG | 1 + baseconfig/CONFIG_JFFS2_FS | 1 + baseconfig/CONFIG_JFS_DEBUG | 1 + baseconfig/CONFIG_JFS_FS | 1 + baseconfig/CONFIG_JFS_POSIX_ACL | 1 + baseconfig/CONFIG_JFS_SECURITY | 1 + baseconfig/CONFIG_JFS_STATISTICS | 1 + baseconfig/CONFIG_JME | 1 + baseconfig/CONFIG_JOLIET | 1 + baseconfig/CONFIG_JOYSTICK_A3D | 1 + baseconfig/CONFIG_JOYSTICK_ADI | 1 + baseconfig/CONFIG_JOYSTICK_ANALOG | 1 + baseconfig/CONFIG_JOYSTICK_AS5011 | 1 + baseconfig/CONFIG_JOYSTICK_COBRA | 1 + baseconfig/CONFIG_JOYSTICK_DB9 | 1 + baseconfig/CONFIG_JOYSTICK_GAMECON | 1 + baseconfig/CONFIG_JOYSTICK_GF2K | 1 + baseconfig/CONFIG_JOYSTICK_GRIP | 1 + baseconfig/CONFIG_JOYSTICK_GRIP_MP | 1 + baseconfig/CONFIG_JOYSTICK_GUILLEMOT | 1 + baseconfig/CONFIG_JOYSTICK_IFORCE | 1 + baseconfig/CONFIG_JOYSTICK_IFORCE_232 | 1 + baseconfig/CONFIG_JOYSTICK_IFORCE_USB | 1 + baseconfig/CONFIG_JOYSTICK_INTERACT | 1 + baseconfig/CONFIG_JOYSTICK_JOYDUMP | 1 + baseconfig/CONFIG_JOYSTICK_MAGELLAN | 1 + baseconfig/CONFIG_JOYSTICK_SIDEWINDER | 1 + baseconfig/CONFIG_JOYSTICK_SPACEBALL | 1 + baseconfig/CONFIG_JOYSTICK_SPACEORB | 1 + baseconfig/CONFIG_JOYSTICK_STINGER | 1 + baseconfig/CONFIG_JOYSTICK_TMDC | 1 + baseconfig/CONFIG_JOYSTICK_TURBOGRAFX | 1 + baseconfig/CONFIG_JOYSTICK_TWIDJOY | 1 + baseconfig/CONFIG_JOYSTICK_WALKERA0701 | 1 + baseconfig/CONFIG_JOYSTICK_WARRIOR | 1 + baseconfig/CONFIG_JOYSTICK_XPAD | 1 + baseconfig/CONFIG_JOYSTICK_XPAD_FF | 1 + baseconfig/CONFIG_JOYSTICK_XPAD_LEDS | 1 + baseconfig/CONFIG_JOYSTICK_ZHENHUA | 1 + baseconfig/CONFIG_JSA1212 | 1 + baseconfig/CONFIG_JUMP_LABEL | 1 + baseconfig/CONFIG_KALLSYMS | 1 + baseconfig/CONFIG_KALLSYMS_ALL | 1 + baseconfig/CONFIG_KARMA_PARTITION | 1 + baseconfig/CONFIG_KASAN | 1 + baseconfig/CONFIG_KCOV | 1 + baseconfig/CONFIG_KDB_CONTINUE_CATASTROPHIC | 1 + baseconfig/CONFIG_KERNEL_BZIP2 | 1 + baseconfig/CONFIG_KERNEL_GZIP | 1 + baseconfig/CONFIG_KERNEL_LZMA | 1 + baseconfig/CONFIG_KERNEL_LZO | 1 + baseconfig/CONFIG_KEXEC | 1 + baseconfig/CONFIG_KEXEC_FILE | 1 + baseconfig/CONFIG_KEYBOARD_ADC | 1 + baseconfig/CONFIG_KEYBOARD_ADP5588 | 1 + baseconfig/CONFIG_KEYBOARD_ADP5589 | 1 + baseconfig/CONFIG_KEYBOARD_ATKBD | 1 + baseconfig/CONFIG_KEYBOARD_CAP11XX | 1 + baseconfig/CONFIG_KEYBOARD_GPIO | 1 + baseconfig/CONFIG_KEYBOARD_GPIO_POLLED | 1 + baseconfig/CONFIG_KEYBOARD_LKKBD | 1 + baseconfig/CONFIG_KEYBOARD_LM8323 | 1 + baseconfig/CONFIG_KEYBOARD_LM8333 | 1 + baseconfig/CONFIG_KEYBOARD_MATRIX | 1 + baseconfig/CONFIG_KEYBOARD_MAX7359 | 1 + baseconfig/CONFIG_KEYBOARD_MCS | 1 + baseconfig/CONFIG_KEYBOARD_MPR121 | 1 + baseconfig/CONFIG_KEYBOARD_NEWTON | 1 + baseconfig/CONFIG_KEYBOARD_OMAP4 | 1 + baseconfig/CONFIG_KEYBOARD_OPENCORES | 1 + baseconfig/CONFIG_KEYBOARD_PMIC8XXX | 1 + baseconfig/CONFIG_KEYBOARD_QT1070 | 1 + baseconfig/CONFIG_KEYBOARD_QT2160 | 1 + baseconfig/CONFIG_KEYBOARD_SAMSUNG | 1 + baseconfig/CONFIG_KEYBOARD_SH_KEYSC | 1 + baseconfig/CONFIG_KEYBOARD_STOWAWAY | 1 + baseconfig/CONFIG_KEYBOARD_SUNKBD | 1 + baseconfig/CONFIG_KEYBOARD_TCA6416 | 1 + baseconfig/CONFIG_KEYBOARD_TCA8418 | 1 + baseconfig/CONFIG_KEYBOARD_XTKBD | 1 + baseconfig/CONFIG_KEYS | 1 + baseconfig/CONFIG_KEY_DH_OPERATIONS | 1 + baseconfig/CONFIG_KGDB | 1 + baseconfig/CONFIG_KGDB_KDB | 1 + baseconfig/CONFIG_KGDB_LOW_LEVEL_TRAP | 1 + baseconfig/CONFIG_KGDB_SERIAL_CONSOLE | 1 + baseconfig/CONFIG_KGDB_TESTS | 1 + baseconfig/CONFIG_KGDB_TESTS_ON_BOOT | 1 + baseconfig/CONFIG_KINGSUN_DONGLE | 1 + baseconfig/CONFIG_KMX61 | 1 + baseconfig/CONFIG_KPROBES | 1 + baseconfig/CONFIG_KPROBES_SANITY_TEST | 1 + baseconfig/CONFIG_KPROBE_EVENT | 1 + baseconfig/CONFIG_KS0108 | 1 + baseconfig/CONFIG_KS0108_DELAY | 1 + baseconfig/CONFIG_KS0108_PORT | 1 + baseconfig/CONFIG_KS7010 | 1 + baseconfig/CONFIG_KS8842 | 1 + baseconfig/CONFIG_KS8851 | 1 + baseconfig/CONFIG_KS8851_MLL | 1 + baseconfig/CONFIG_KS959_DONGLE | 1 + baseconfig/CONFIG_KSDAZZLE_DONGLE | 1 + baseconfig/CONFIG_KSM | 1 + baseconfig/CONFIG_KSZ884X_PCI | 1 + baseconfig/CONFIG_KXCJK1013 | 1 + baseconfig/CONFIG_KXSD9 | 1 + baseconfig/CONFIG_L2TP | 1 + baseconfig/CONFIG_L2TP_DEBUGFS | 1 + baseconfig/CONFIG_L2TP_ETH | 1 + baseconfig/CONFIG_L2TP_IP | 1 + baseconfig/CONFIG_L2TP_V3 | 1 + baseconfig/CONFIG_LAPB | 1 + baseconfig/CONFIG_LATENCYTOP | 1 + baseconfig/CONFIG_LATTICE_ECP3_CONFIG | 1 + baseconfig/CONFIG_LCD_AMS369FG06 | 1 + baseconfig/CONFIG_LCD_CLASS_DEVICE | 1 + baseconfig/CONFIG_LCD_HX8357 | 1 + baseconfig/CONFIG_LCD_ILI922X | 1 + baseconfig/CONFIG_LCD_ILI9320 | 1 + baseconfig/CONFIG_LCD_L4F00242T03 | 1 + baseconfig/CONFIG_LCD_LD9040 | 1 + baseconfig/CONFIG_LCD_LMS283GF05 | 1 + baseconfig/CONFIG_LCD_LMS501KF03 | 1 + baseconfig/CONFIG_LCD_LTV350QV | 1 + baseconfig/CONFIG_LCD_PLATFORM | 1 + baseconfig/CONFIG_LCD_S6E63M0 | 1 + baseconfig/CONFIG_LCD_TDO24M | 1 + baseconfig/CONFIG_LCD_VGG2432A4 | 1 + baseconfig/CONFIG_LDM_DEBUG | 1 + baseconfig/CONFIG_LDM_PARTITION | 1 + baseconfig/CONFIG_LEDS_AAT1290 | 1 + baseconfig/CONFIG_LEDS_BCM6328 | 1 + baseconfig/CONFIG_LEDS_BCM6358 | 1 + baseconfig/CONFIG_LEDS_BD2802 | 1 + baseconfig/CONFIG_LEDS_BLINKM | 1 + baseconfig/CONFIG_LEDS_CLASS | 1 + baseconfig/CONFIG_LEDS_CLASS_FLASH | 1 + baseconfig/CONFIG_LEDS_CLEVO_MAIL | 1 + baseconfig/CONFIG_LEDS_DAC124S085 | 1 + baseconfig/CONFIG_LEDS_DELL_NETBOOKS | 1 + baseconfig/CONFIG_LEDS_GPIO | 1 + baseconfig/CONFIG_LEDS_INTEL_SS4200 | 1 + baseconfig/CONFIG_LEDS_IS31FL319X | 1 + baseconfig/CONFIG_LEDS_IS31FL32XX | 1 + baseconfig/CONFIG_LEDS_KTD2692 | 1 + baseconfig/CONFIG_LEDS_LM3530 | 1 + baseconfig/CONFIG_LEDS_LM355x | 1 + baseconfig/CONFIG_LEDS_LM3642 | 1 + baseconfig/CONFIG_LEDS_LOCOMO | 1 + baseconfig/CONFIG_LEDS_LP3944 | 1 + baseconfig/CONFIG_LEDS_LP3952 | 1 + baseconfig/CONFIG_LEDS_LP5521 | 1 + baseconfig/CONFIG_LEDS_LP5523 | 1 + baseconfig/CONFIG_LEDS_LP5562 | 1 + baseconfig/CONFIG_LEDS_LP55XX_COMMON | 1 + baseconfig/CONFIG_LEDS_LP8501 | 1 + baseconfig/CONFIG_LEDS_LP8860 | 1 + baseconfig/CONFIG_LEDS_LT3593 | 1 + baseconfig/CONFIG_LEDS_MLXCPLD | 1 + baseconfig/CONFIG_LEDS_NET48XX | 1 + baseconfig/CONFIG_LEDS_NIC78BX | 1 + baseconfig/CONFIG_LEDS_OT200 | 1 + baseconfig/CONFIG_LEDS_PCA9532 | 1 + baseconfig/CONFIG_LEDS_PCA955X | 1 + baseconfig/CONFIG_LEDS_PCA963X | 1 + baseconfig/CONFIG_LEDS_PWM | 1 + baseconfig/CONFIG_LEDS_REGULATOR | 1 + baseconfig/CONFIG_LEDS_S3C24XX | 1 + baseconfig/CONFIG_LEDS_SYSCON | 1 + baseconfig/CONFIG_LEDS_TCA6507 | 1 + baseconfig/CONFIG_LEDS_TLC591XX | 1 + baseconfig/CONFIG_LEDS_TRIGGERS | 1 + baseconfig/CONFIG_LEDS_TRIGGER_BACKLIGHT | 1 + baseconfig/CONFIG_LEDS_TRIGGER_CAMERA | 1 + baseconfig/CONFIG_LEDS_TRIGGER_CPU | 1 + baseconfig/CONFIG_LEDS_TRIGGER_DEFAULT_ON | 1 + baseconfig/CONFIG_LEDS_TRIGGER_DISK | 1 + baseconfig/CONFIG_LEDS_TRIGGER_GPIO | 1 + baseconfig/CONFIG_LEDS_TRIGGER_HEARTBEAT | 1 + baseconfig/CONFIG_LEDS_TRIGGER_MTD | 1 + baseconfig/CONFIG_LEDS_TRIGGER_ONESHOT | 1 + baseconfig/CONFIG_LEDS_TRIGGER_PANIC | 1 + baseconfig/CONFIG_LEDS_TRIGGER_TIMER | 1 + baseconfig/CONFIG_LEDS_TRIGGER_TRANSIENT | 1 + baseconfig/CONFIG_LEDS_USER | 1 + baseconfig/CONFIG_LEDS_WM831X_STATUS | 1 + baseconfig/CONFIG_LEDS_WM8350 | 1 + baseconfig/CONFIG_LED_TRIGGER_PHY | 1 + baseconfig/CONFIG_LEGACY_PTYS | 1 + baseconfig/CONFIG_LIB80211 | 1 + baseconfig/CONFIG_LIB80211_CRYPT_CCMP | 1 + baseconfig/CONFIG_LIB80211_CRYPT_TKIP | 1 + baseconfig/CONFIG_LIB80211_CRYPT_WEP | 1 + baseconfig/CONFIG_LIB80211_DEBUG | 1 + baseconfig/CONFIG_LIBCRC32C | 1 + baseconfig/CONFIG_LIBERTAS | 1 + baseconfig/CONFIG_LIBERTAS_CS | 1 + baseconfig/CONFIG_LIBERTAS_DEBUG | 1 + baseconfig/CONFIG_LIBERTAS_MESH | 1 + baseconfig/CONFIG_LIBERTAS_SDIO | 1 + baseconfig/CONFIG_LIBERTAS_SPI | 1 + baseconfig/CONFIG_LIBERTAS_THINFIRM | 1 + baseconfig/CONFIG_LIBERTAS_USB | 1 + baseconfig/CONFIG_LIBFC | 1 + baseconfig/CONFIG_LIBFCOE | 1 + baseconfig/CONFIG_LIBIPW_DEBUG | 1 + baseconfig/CONFIG_LIBNVDIMM | 1 + baseconfig/CONFIG_LIDAR_LITE_V2 | 1 + baseconfig/CONFIG_LIQUIDIO_VF | 1 + baseconfig/CONFIG_LIRC | 1 + baseconfig/CONFIG_LIRC_BT829 | 1 + baseconfig/CONFIG_LIRC_IMON | 1 + baseconfig/CONFIG_LIRC_PARALLEL | 1 + baseconfig/CONFIG_LIRC_SASEM | 1 + baseconfig/CONFIG_LIRC_SERIAL | 1 + baseconfig/CONFIG_LIRC_SERIAL_TRANSMITTER | 1 + baseconfig/CONFIG_LIRC_SIR | 1 + baseconfig/CONFIG_LIRC_STAGING | 1 + baseconfig/CONFIG_LIRC_ZILOG | 1 + baseconfig/CONFIG_LITELINK_DONGLE | 1 + baseconfig/CONFIG_LIVEPATCH | 1 + baseconfig/CONFIG_LKDTM | 1 + baseconfig/CONFIG_LLC | 1 + baseconfig/CONFIG_LLC2 | 1 + baseconfig/CONFIG_LMP91000 | 1 + baseconfig/CONFIG_LNET | 1 + baseconfig/CONFIG_LOCALVERSION | 1 + baseconfig/CONFIG_LOCALVERSION_AUTO | 1 + baseconfig/CONFIG_LOCKD | 1 + baseconfig/CONFIG_LOCKD_V4 | 1 + baseconfig/CONFIG_LOCKUP_DETECTOR | 1 + baseconfig/CONFIG_LOCK_DOWN_KERNEL | 1 + baseconfig/CONFIG_LOCK_STAT | 1 + baseconfig/CONFIG_LOCK_TORTURE_TEST | 1 + baseconfig/CONFIG_LOGFS | 1 + baseconfig/CONFIG_LOGIG940_FF | 1 + baseconfig/CONFIG_LOGIRUMBLEPAD2_FF | 1 + baseconfig/CONFIG_LOGITECH_FF | 1 + baseconfig/CONFIG_LOGIWHEELS_FF | 1 + baseconfig/CONFIG_LOGO | 1 + baseconfig/CONFIG_LOGO_LINUX_CLUT224 | 1 + baseconfig/CONFIG_LOGO_LINUX_MONO | 1 + baseconfig/CONFIG_LOGO_LINUX_VGA16 | 1 + baseconfig/CONFIG_LOG_BUF_SHIFT | 1 + baseconfig/CONFIG_LOG_CPU_MAX_BUF_SHIFT | 1 + baseconfig/CONFIG_LOOPBACK_TARGET | 1 + baseconfig/CONFIG_LPC_ICH | 1 + baseconfig/CONFIG_LPC_SCH | 1 + baseconfig/CONFIG_LP_CONSOLE | 1 + baseconfig/CONFIG_LSI_ET1011C_PHY | 1 + baseconfig/CONFIG_LSM_MMAP_MIN_ADDR | 1 + baseconfig/CONFIG_LTC2485 | 1 + baseconfig/CONFIG_LTE_GDM724X | 1 + baseconfig/CONFIG_LTR501 | 1 + baseconfig/CONFIG_LUSTRE_FS | 1 + baseconfig/CONFIG_LWTUNNEL | 1 + baseconfig/CONFIG_LWTUNNEL_BPF | 1 + baseconfig/CONFIG_LXT_PHY | 1 + baseconfig/CONFIG_M62332 | 1 + baseconfig/CONFIG_MA600_DONGLE | 1 + baseconfig/CONFIG_MAC80211 | 1 + baseconfig/CONFIG_MAC80211_DEBUGFS | 1 + baseconfig/CONFIG_MAC80211_DEBUG_MENU | 1 + baseconfig/CONFIG_MAC80211_HWSIM | 1 + baseconfig/CONFIG_MAC80211_LEDS | 1 + baseconfig/CONFIG_MAC80211_MESH | 1 + baseconfig/CONFIG_MAC80211_MESSAGE_TRACING | 1 + baseconfig/CONFIG_MAC80211_RC_DEFAULT | 1 + .../CONFIG_MAC80211_RC_DEFAULT_MINSTREL | 1 + baseconfig/CONFIG_MAC80211_RC_MINSTREL | 1 + baseconfig/CONFIG_MAC802154 | 1 + baseconfig/CONFIG_MACB | 1 + baseconfig/CONFIG_MACB_PCI | 1 + baseconfig/CONFIG_MACHZ_WDT | 1 + baseconfig/CONFIG_MACSEC | 1 + baseconfig/CONFIG_MACVLAN | 1 + baseconfig/CONFIG_MACVTAP | 1 + baseconfig/CONFIG_MAC_EMUMOUSEBTN | 1 + baseconfig/CONFIG_MAC_PARTITION | 1 + baseconfig/CONFIG_MAG3110 | 1 + baseconfig/CONFIG_MAGIC_SYSRQ | 1 + baseconfig/CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE | 1 + baseconfig/CONFIG_MAILBOX | 1 + baseconfig/CONFIG_MAILBOX_TEST | 1 + baseconfig/CONFIG_MANDATORY_FILE_LOCKING | 1 + baseconfig/CONFIG_MANTIS_CORE | 1 + baseconfig/CONFIG_MARVELL_PHY | 1 + baseconfig/CONFIG_MAX1027 | 1 + baseconfig/CONFIG_MAX1363 | 1 + baseconfig/CONFIG_MAX30100 | 1 + baseconfig/CONFIG_MAX44000 | 1 + baseconfig/CONFIG_MAX517 | 1 + baseconfig/CONFIG_MAX5487 | 1 + baseconfig/CONFIG_MAX5821 | 1 + baseconfig/CONFIG_MAX63XX_WATCHDOG | 1 + baseconfig/CONFIG_MAXIM_THERMOCOUPLE | 1 + baseconfig/CONFIG_MAX_RAW_DEVS | 1 + baseconfig/CONFIG_MC3230 | 1 + baseconfig/CONFIG_MCB | 1 + baseconfig/CONFIG_MCE_AMD_INJ | 1 + baseconfig/CONFIG_MCP2120_DONGLE | 1 + baseconfig/CONFIG_MCP320X | 1 + baseconfig/CONFIG_MCP3422 | 1 + baseconfig/CONFIG_MCP4131 | 1 + baseconfig/CONFIG_MCP4531 | 1 + baseconfig/CONFIG_MCP4725 | 1 + baseconfig/CONFIG_MCP4922 | 1 + baseconfig/CONFIG_MCS_FIR | 1 + baseconfig/CONFIG_MD | 1 + baseconfig/CONFIG_MDIO_BCM_UNIMAC | 1 + baseconfig/CONFIG_MDIO_BITBANG | 1 + baseconfig/CONFIG_MDIO_BUS_MUX | 1 + baseconfig/CONFIG_MDIO_BUS_MUX_GPIO | 1 + baseconfig/CONFIG_MDIO_BUS_MUX_MMIOREG | 1 + baseconfig/CONFIG_MDIO_GPIO | 1 + baseconfig/CONFIG_MDIO_HISI_FEMAC | 1 + baseconfig/CONFIG_MDIO_OCTEON | 1 + baseconfig/CONFIG_MDIO_THUNDER | 1 + baseconfig/CONFIG_MD_AUTODETECT | 1 + baseconfig/CONFIG_MD_CLUSTER | 1 + baseconfig/CONFIG_MD_FAULTY | 1 + baseconfig/CONFIG_MD_LINEAR | 1 + baseconfig/CONFIG_MD_MULTIPATH | 1 + baseconfig/CONFIG_MD_RAID0 | 1 + baseconfig/CONFIG_MD_RAID1 | 1 + baseconfig/CONFIG_MD_RAID10 | 1 + baseconfig/CONFIG_MD_RAID456 | 1 + baseconfig/CONFIG_MEDIA_ALTERA_CI | 1 + baseconfig/CONFIG_MEDIA_ANALOG_TV_SUPPORT | 1 + baseconfig/CONFIG_MEDIA_ATTACH | 1 + baseconfig/CONFIG_MEDIA_CAMERA_SUPPORT | 1 + baseconfig/CONFIG_MEDIA_CEC_DEBUG | 1 + baseconfig/CONFIG_MEDIA_CEC_SUPPORT | 1 + baseconfig/CONFIG_MEDIA_CONTROLLER | 1 + baseconfig/CONFIG_MEDIA_CONTROLLER_DVB | 1 + baseconfig/CONFIG_MEDIA_DIGITAL_TV_SUPPORT | 1 + baseconfig/CONFIG_MEDIA_PCI_SUPPORT | 1 + baseconfig/CONFIG_MEDIA_RADIO_SUPPORT | 1 + baseconfig/CONFIG_MEDIA_RC_SUPPORT | 1 + baseconfig/CONFIG_MEDIA_SDR_SUPPORT | 1 + baseconfig/CONFIG_MEDIA_SUBDRV_AUTOSELECT | 1 + baseconfig/CONFIG_MEDIA_SUPPORT | 1 + baseconfig/CONFIG_MEDIA_TUNER_MSI001 | 1 + baseconfig/CONFIG_MEDIA_USB_SUPPORT | 1 + baseconfig/CONFIG_MEGARAID_LEGACY | 1 + baseconfig/CONFIG_MEGARAID_MAILBOX | 1 + baseconfig/CONFIG_MEGARAID_MM | 1 + baseconfig/CONFIG_MEGARAID_NEWGEN | 1 + baseconfig/CONFIG_MEGARAID_SAS | 1 + baseconfig/CONFIG_MEMCG | 1 + baseconfig/CONFIG_MEMCG_SWAP | 1 + baseconfig/CONFIG_MEMCG_SWAP_ENABLED | 1 + baseconfig/CONFIG_MEMORY | 1 + baseconfig/CONFIG_MEMORY_FAILURE | 1 + baseconfig/CONFIG_MEMSTICK | 1 + baseconfig/CONFIG_MEMSTICK_DEBUG | 1 + baseconfig/CONFIG_MEMSTICK_JMICRON_38X | 1 + baseconfig/CONFIG_MEMSTICK_R592 | 1 + baseconfig/CONFIG_MEMSTICK_REALTEK_PCI | 1 + baseconfig/CONFIG_MEMSTICK_REALTEK_USB | 1 + baseconfig/CONFIG_MEMSTICK_TIFM_MS | 1 + baseconfig/CONFIG_MEMSTICK_UNSAFE_RESUME | 1 + baseconfig/CONFIG_MEMTEST | 1 + baseconfig/CONFIG_MEN_A21_WDT | 1 + baseconfig/CONFIG_MESON_GXL_PHY | 1 + baseconfig/CONFIG_MESSAGE_LOGLEVEL_DEFAULT | 1 + baseconfig/CONFIG_MFD_88PM800 | 1 + baseconfig/CONFIG_MFD_88PM805 | 1 + baseconfig/CONFIG_MFD_88PM860X | 1 + baseconfig/CONFIG_MFD_AAT2870_CORE | 1 + baseconfig/CONFIG_MFD_ACT8945A | 1 + baseconfig/CONFIG_MFD_ARIZONA | 1 + baseconfig/CONFIG_MFD_ARIZONA_I2C | 1 + baseconfig/CONFIG_MFD_ARIZONA_SPI | 1 + baseconfig/CONFIG_MFD_AS3711 | 1 + baseconfig/CONFIG_MFD_AS3722 | 1 + baseconfig/CONFIG_MFD_ASIC3 | 1 + baseconfig/CONFIG_MFD_ATMEL_FLEXCOM | 1 + baseconfig/CONFIG_MFD_ATMEL_HLCDC | 1 + baseconfig/CONFIG_MFD_AXP20X | 1 + baseconfig/CONFIG_MFD_AXP20X_I2C | 1 + baseconfig/CONFIG_MFD_BCM590XX | 1 + baseconfig/CONFIG_MFD_CORE | 1 + baseconfig/CONFIG_MFD_CROS_EC | 1 + baseconfig/CONFIG_MFD_CS5535 | 1 + baseconfig/CONFIG_MFD_DA9052_I2C | 1 + baseconfig/CONFIG_MFD_DA9052_SPI | 1 + baseconfig/CONFIG_MFD_DA9055 | 1 + baseconfig/CONFIG_MFD_DA9062 | 1 + baseconfig/CONFIG_MFD_DA9063 | 1 + baseconfig/CONFIG_MFD_DA9150 | 1 + baseconfig/CONFIG_MFD_DLN2 | 1 + baseconfig/CONFIG_MFD_EXYNOS_LPASS | 1 + baseconfig/CONFIG_MFD_HI6421_PMIC | 1 + baseconfig/CONFIG_MFD_JANZ_CMODIO | 1 + baseconfig/CONFIG_MFD_KEMPLD | 1 + baseconfig/CONFIG_MFD_LM3533 | 1 + baseconfig/CONFIG_MFD_LP3943 | 1 + baseconfig/CONFIG_MFD_LP8788 | 1 + baseconfig/CONFIG_MFD_MAX14577 | 1 + baseconfig/CONFIG_MFD_MAX77620 | 1 + baseconfig/CONFIG_MFD_MAX77686 | 1 + baseconfig/CONFIG_MFD_MAX77693 | 1 + baseconfig/CONFIG_MFD_MAX77843 | 1 + baseconfig/CONFIG_MFD_MAX8907 | 1 + baseconfig/CONFIG_MFD_MAX8925 | 1 + baseconfig/CONFIG_MFD_MAX8997 | 1 + baseconfig/CONFIG_MFD_MAX8998 | 1 + baseconfig/CONFIG_MFD_MC13XXX_I2C | 1 + baseconfig/CONFIG_MFD_MC13XXX_SPI | 1 + baseconfig/CONFIG_MFD_MENF21BMC | 1 + baseconfig/CONFIG_MFD_MT6397 | 1 + baseconfig/CONFIG_MFD_PALMAS | 1 + baseconfig/CONFIG_MFD_PCF50633 | 1 + baseconfig/CONFIG_MFD_RC5T583 | 1 + baseconfig/CONFIG_MFD_RDC321X | 1 + baseconfig/CONFIG_MFD_RETU | 1 + baseconfig/CONFIG_MFD_RK808 | 1 + baseconfig/CONFIG_MFD_RN5T618 | 1 + baseconfig/CONFIG_MFD_RT5033 | 1 + baseconfig/CONFIG_MFD_RTSX_PCI | 1 + baseconfig/CONFIG_MFD_RTSX_USB | 1 + baseconfig/CONFIG_MFD_SEC_CORE | 1 + baseconfig/CONFIG_MFD_SI476X_CORE | 1 + baseconfig/CONFIG_MFD_SKY81452 | 1 + baseconfig/CONFIG_MFD_SM501 | 1 + baseconfig/CONFIG_MFD_SM501_GPIO | 1 + baseconfig/CONFIG_MFD_SMSC | 1 + baseconfig/CONFIG_MFD_STMPE | 1 + baseconfig/CONFIG_MFD_SUN4I_GPADC | 1 + baseconfig/CONFIG_MFD_SYSCON | 1 + baseconfig/CONFIG_MFD_TC3589X | 1 + baseconfig/CONFIG_MFD_TC6393XB | 1 + baseconfig/CONFIG_MFD_TIMBERDALE | 1 + baseconfig/CONFIG_MFD_TI_AM335X_TSCADC | 1 + baseconfig/CONFIG_MFD_TI_LP873X | 1 + baseconfig/CONFIG_MFD_TPS65086 | 1 + baseconfig/CONFIG_MFD_TPS65090 | 1 + baseconfig/CONFIG_MFD_TPS65217 | 1 + baseconfig/CONFIG_MFD_TPS65218 | 1 + baseconfig/CONFIG_MFD_TPS6586X | 1 + baseconfig/CONFIG_MFD_TPS65910 | 1 + baseconfig/CONFIG_MFD_TPS65912 | 1 + baseconfig/CONFIG_MFD_TPS65912_I2C | 1 + baseconfig/CONFIG_MFD_TPS65912_SPI | 1 + baseconfig/CONFIG_MFD_TPS80031 | 1 + baseconfig/CONFIG_MFD_VIPERBOARD | 1 + baseconfig/CONFIG_MFD_VX855 | 1 + baseconfig/CONFIG_MFD_WL1273_CORE | 1 + baseconfig/CONFIG_MFD_WM831X | 1 + baseconfig/CONFIG_MFD_WM831X_I2C | 1 + baseconfig/CONFIG_MFD_WM831X_SPI | 1 + baseconfig/CONFIG_MFD_WM8350 | 1 + baseconfig/CONFIG_MFD_WM8350_I2C | 1 + baseconfig/CONFIG_MFD_WM8400 | 1 + baseconfig/CONFIG_MFD_WM8994 | 1 + baseconfig/CONFIG_MICREL_KS8995MA | 1 + baseconfig/CONFIG_MICREL_PHY | 1 + baseconfig/CONFIG_MICROCHIP_PHY | 1 + baseconfig/CONFIG_MICROSEMI_PHY | 1 + baseconfig/CONFIG_MIGRATION | 1 + baseconfig/CONFIG_MII | 1 + baseconfig/CONFIG_MINIX_FS | 1 + baseconfig/CONFIG_MINIX_SUBPARTITION | 1 + baseconfig/CONFIG_MISC_FILESYSTEMS | 1 + baseconfig/CONFIG_MISDN | 1 + baseconfig/CONFIG_MISDN_AVMFRITZ | 1 + baseconfig/CONFIG_MISDN_DSP | 1 + baseconfig/CONFIG_MISDN_HFCMULTI | 1 + baseconfig/CONFIG_MISDN_HFCPCI | 1 + baseconfig/CONFIG_MISDN_HFCUSB | 1 + baseconfig/CONFIG_MISDN_INFINEON | 1 + baseconfig/CONFIG_MISDN_L1OIP | 1 + baseconfig/CONFIG_MISDN_NETJET | 1 + baseconfig/CONFIG_MISDN_SPEEDFAX | 1 + baseconfig/CONFIG_MISDN_W6692 | 1 + baseconfig/CONFIG_MKISS | 1 + baseconfig/CONFIG_MLX4_CORE | 1 + baseconfig/CONFIG_MLX4_EN | 1 + baseconfig/CONFIG_MLX4_EN_DCB | 1 + baseconfig/CONFIG_MLX4_INFINIBAND | 1 + baseconfig/CONFIG_MLX5_CORE | 1 + baseconfig/CONFIG_MLX5_CORE_EN | 1 + baseconfig/CONFIG_MLX5_CORE_EN_DCB | 1 + baseconfig/CONFIG_MLX5_INFINIBAND | 1 + baseconfig/CONFIG_MLX90614 | 1 + baseconfig/CONFIG_MLXSW_CORE | 1 + baseconfig/CONFIG_MLXSW_CORE_HWMON | 1 + baseconfig/CONFIG_MLXSW_CORE_THERMAL | 1 + baseconfig/CONFIG_MLXSW_I2C | 1 + baseconfig/CONFIG_MLXSW_MINIMAL | 1 + baseconfig/CONFIG_MLXSW_PCI | 1 + baseconfig/CONFIG_MLXSW_SPECTRUM | 1 + baseconfig/CONFIG_MLXSW_SPECTRUM_DCB | 1 + baseconfig/CONFIG_MLXSW_SWITCHIB | 1 + baseconfig/CONFIG_MLXSW_SWITCHX2 | 1 + baseconfig/CONFIG_MLX_CPLD_PLATFORM | 1 + baseconfig/CONFIG_MMA7455_I2C | 1 + baseconfig/CONFIG_MMA7455_SPI | 1 + baseconfig/CONFIG_MMA7660 | 1 + baseconfig/CONFIG_MMA8452 | 1 + baseconfig/CONFIG_MMA9551 | 1 + baseconfig/CONFIG_MMA9553 | 1 + baseconfig/CONFIG_MMC | 1 + baseconfig/CONFIG_MMC35240 | 1 + baseconfig/CONFIG_MMC_BLOCK | 1 + baseconfig/CONFIG_MMC_BLOCK_BOUNCE | 1 + baseconfig/CONFIG_MMC_BLOCK_MINORS | 1 + baseconfig/CONFIG_MMC_CB710 | 1 + baseconfig/CONFIG_MMC_DEBUG | 1 + baseconfig/CONFIG_MMC_MTK | 1 + baseconfig/CONFIG_MMC_REALTEK_PCI | 1 + baseconfig/CONFIG_MMC_REALTEK_USB | 1 + baseconfig/CONFIG_MMC_RICOH_MMC | 1 + baseconfig/CONFIG_MMC_SDHCI | 1 + baseconfig/CONFIG_MMC_SDHCI_ACPI | 1 + baseconfig/CONFIG_MMC_SDHCI_CADENCE | 1 + baseconfig/CONFIG_MMC_SDHCI_F_SDH30 | 1 + baseconfig/CONFIG_MMC_SDHCI_OF | 1 + baseconfig/CONFIG_MMC_SDHCI_OF_ARASAN | 1 + baseconfig/CONFIG_MMC_SDHCI_OF_AT91 | 1 + baseconfig/CONFIG_MMC_SDHCI_OF_ESDHC | 1 + baseconfig/CONFIG_MMC_SDHCI_PCI | 1 + baseconfig/CONFIG_MMC_SDHCI_PLTFM | 1 + baseconfig/CONFIG_MMC_SDRICOH_CS | 1 + baseconfig/CONFIG_MMC_SPI | 1 + baseconfig/CONFIG_MMC_TEST | 1 + baseconfig/CONFIG_MMC_TIFM_SD | 1 + baseconfig/CONFIG_MMC_TOSHIBA_PCI | 1 + baseconfig/CONFIG_MMC_USDHI6ROL0 | 1 + baseconfig/CONFIG_MMC_USHC | 1 + baseconfig/CONFIG_MMC_VIA_SDMMC | 1 + baseconfig/CONFIG_MMC_VUB300 | 1 + baseconfig/CONFIG_MMC_WBSD | 1 + baseconfig/CONFIG_MMU | 1 + baseconfig/CONFIG_MODULES | 1 + baseconfig/CONFIG_MODULE_COMPRESS | 1 + baseconfig/CONFIG_MODULE_FORCE_LOAD | 1 + baseconfig/CONFIG_MODULE_FORCE_UNLOAD | 1 + baseconfig/CONFIG_MODULE_SIG | 1 + baseconfig/CONFIG_MODULE_SIG_ALL | 1 + baseconfig/CONFIG_MODULE_SIG_FORCE | 1 + baseconfig/CONFIG_MODULE_SIG_KEY | 1 + baseconfig/CONFIG_MODULE_SIG_SHA1 | 1 + baseconfig/CONFIG_MODULE_SIG_SHA256 | 1 + baseconfig/CONFIG_MODULE_SIG_UEFI | 1 + baseconfig/CONFIG_MODULE_SRCVERSION_ALL | 1 + baseconfig/CONFIG_MODULE_UNLOAD | 1 + baseconfig/CONFIG_MODVERSIONS | 1 + baseconfig/CONFIG_MOST | 1 + baseconfig/CONFIG_MOUSE_APPLETOUCH | 1 + baseconfig/CONFIG_MOUSE_ATIXL | 1 + baseconfig/CONFIG_MOUSE_BCM5974 | 1 + baseconfig/CONFIG_MOUSE_CYAPA | 1 + baseconfig/CONFIG_MOUSE_ELAN_I2C | 1 + baseconfig/CONFIG_MOUSE_ELAN_I2C_I2C | 1 + baseconfig/CONFIG_MOUSE_ELAN_I2C_SMBUS | 1 + baseconfig/CONFIG_MOUSE_GPIO | 1 + baseconfig/CONFIG_MOUSE_PS2 | 1 + baseconfig/CONFIG_MOUSE_PS2_ELANTECH | 1 + baseconfig/CONFIG_MOUSE_PS2_SENTELIC | 1 + baseconfig/CONFIG_MOUSE_PS2_TOUCHKIT | 1 + baseconfig/CONFIG_MOUSE_PS2_VMMOUSE | 1 + baseconfig/CONFIG_MOUSE_SERIAL | 1 + baseconfig/CONFIG_MOUSE_SYNAPTICS_I2C | 1 + baseconfig/CONFIG_MOUSE_SYNAPTICS_USB | 1 + baseconfig/CONFIG_MOUSE_VSXXXAA | 1 + baseconfig/CONFIG_MOVABLE_NODE | 1 + baseconfig/CONFIG_MOXA_INTELLIO | 1 + baseconfig/CONFIG_MOXA_SMARTIO | 1 + baseconfig/CONFIG_MPL115 | 1 + baseconfig/CONFIG_MPL115_I2C | 1 + baseconfig/CONFIG_MPL115_SPI | 1 + baseconfig/CONFIG_MPL3115 | 1 + baseconfig/CONFIG_MPLS_IPTUNNEL | 1 + baseconfig/CONFIG_MPLS_ROUTING | 1 + baseconfig/CONFIG_MPU3050_I2C | 1 + baseconfig/CONFIG_MS5611 | 1 + baseconfig/CONFIG_MS5637 | 1 + baseconfig/CONFIG_MSDOS_FS | 1 + baseconfig/CONFIG_MSDOS_PARTITION | 1 + baseconfig/CONFIG_MSM_GCC_8994 | 1 + baseconfig/CONFIG_MSPRO_BLOCK | 1 + baseconfig/CONFIG_MS_BLOCK | 1 + baseconfig/CONFIG_MT7601U | 1 + baseconfig/CONFIG_MTD | 1 + baseconfig/CONFIG_MTD_ABSENT | 1 + baseconfig/CONFIG_MTD_AR7_PARTS | 1 + baseconfig/CONFIG_MTD_BLKDEVS | 1 + baseconfig/CONFIG_MTD_BLOCK | 1 + baseconfig/CONFIG_MTD_BLOCK2MTD | 1 + baseconfig/CONFIG_MTD_BLOCK_RO | 1 + baseconfig/CONFIG_MTD_CFI | 1 + baseconfig/CONFIG_MTD_CFI_I1 | 1 + baseconfig/CONFIG_MTD_CFI_I2 | 1 + baseconfig/CONFIG_MTD_CFI_I4 | 1 + baseconfig/CONFIG_MTD_CFI_I8 | 1 + baseconfig/CONFIG_MTD_CMDLINE_PARTS | 1 + baseconfig/CONFIG_MTD_COMPLEX_MAPPINGS | 1 + baseconfig/CONFIG_MTD_DATAFLASH | 1 + baseconfig/CONFIG_MTD_DOCG3 | 1 + baseconfig/CONFIG_MTD_INTEL_VR_NOR | 1 + baseconfig/CONFIG_MTD_JEDECPROBE | 1 + baseconfig/CONFIG_MTD_LPDDR | 1 + baseconfig/CONFIG_MTD_MAP_BANK_WIDTH_1 | 1 + baseconfig/CONFIG_MTD_MAP_BANK_WIDTH_16 | 1 + baseconfig/CONFIG_MTD_MAP_BANK_WIDTH_2 | 1 + baseconfig/CONFIG_MTD_MAP_BANK_WIDTH_32 | 1 + baseconfig/CONFIG_MTD_MAP_BANK_WIDTH_4 | 1 + baseconfig/CONFIG_MTD_MAP_BANK_WIDTH_8 | 1 + baseconfig/CONFIG_MTD_MTDRAM | 1 + baseconfig/CONFIG_MTD_NAND | 1 + baseconfig/CONFIG_MTD_NAND_DENALI_DT | 1 + baseconfig/CONFIG_MTD_NAND_DENALI_PCI | 1 + baseconfig/CONFIG_MTD_NAND_DISKONCHIP | 1 + baseconfig/CONFIG_MTD_NAND_ECC_BCH | 1 + baseconfig/CONFIG_MTD_NAND_HISI504 | 1 + baseconfig/CONFIG_MTD_NAND_OMAP2 | 1 + baseconfig/CONFIG_MTD_NAND_OXNAS | 1 + baseconfig/CONFIG_MTD_ONENAND | 1 + baseconfig/CONFIG_MTD_OOPS | 1 + baseconfig/CONFIG_MTD_PARTITIONED_MASTER | 1 + baseconfig/CONFIG_MTD_PHRAM | 1 + baseconfig/CONFIG_MTD_PLATRAM | 1 + baseconfig/CONFIG_MTD_PMC551 | 1 + baseconfig/CONFIG_MTD_RAM | 1 + baseconfig/CONFIG_MTD_REDBOOT_PARTS | 1 + baseconfig/CONFIG_MTD_ROM | 1 + baseconfig/CONFIG_MTD_SLRAM | 1 + baseconfig/CONFIG_MTD_SPI_NOR | 1 + baseconfig/CONFIG_MTD_SST25L | 1 + baseconfig/CONFIG_MTD_SWAP | 1 + baseconfig/CONFIG_MTD_TESTS | 1 + baseconfig/CONFIG_MTD_TS5500 | 1 + baseconfig/CONFIG_MTD_UBI | 1 + baseconfig/CONFIG_MTD_UBI_BEB_LIMIT | 1 + baseconfig/CONFIG_MTD_UBI_BLOCK | 1 + baseconfig/CONFIG_MTD_UBI_FASTMAP | 1 + baseconfig/CONFIG_MTD_UBI_GLUEBI | 1 + baseconfig/CONFIG_MTD_UBI_WL_THRESHOLD | 1 + baseconfig/CONFIG_MVMDIO | 1 + baseconfig/CONFIG_MWAVE | 1 + baseconfig/CONFIG_MWIFIEX | 1 + baseconfig/CONFIG_MWIFIEX_PCIE | 1 + baseconfig/CONFIG_MWIFIEX_SDIO | 1 + baseconfig/CONFIG_MWIFIEX_USB | 1 + baseconfig/CONFIG_MWL8K | 1 + baseconfig/CONFIG_MXC4005 | 1 + baseconfig/CONFIG_MXC6255 | 1 + baseconfig/CONFIG_MYRI10GE | 1 + baseconfig/CONFIG_MYRI10GE_DCA | 1 + baseconfig/CONFIG_NAMESPACES | 1 + baseconfig/CONFIG_NATIONAL_PHY | 1 + baseconfig/CONFIG_NATSEMI | 1 + baseconfig/CONFIG_NAU7802 | 1 + baseconfig/CONFIG_NBPFAXI_DMA | 1 + baseconfig/CONFIG_NCPFS_EXTRAS | 1 + baseconfig/CONFIG_NCPFS_IOCTL_LOCKING | 1 + baseconfig/CONFIG_NCPFS_NFS_NS | 1 + baseconfig/CONFIG_NCPFS_NLS | 1 + baseconfig/CONFIG_NCPFS_OS2_NS | 1 + baseconfig/CONFIG_NCPFS_PACKET_SIGNING | 1 + baseconfig/CONFIG_NCPFS_SMALLDOS | 1 + baseconfig/CONFIG_NCPFS_STRONG | 1 + baseconfig/CONFIG_NCP_FS | 1 + baseconfig/CONFIG_ND_BLK | 1 + baseconfig/CONFIG_NE2K_PCI | 1 + baseconfig/CONFIG_NET | 1 + baseconfig/CONFIG_NETCONSOLE | 1 + baseconfig/CONFIG_NETCONSOLE_DYNAMIC | 1 + baseconfig/CONFIG_NETDEVICES | 1 + baseconfig/CONFIG_NETFILTER | 1 + baseconfig/CONFIG_NETFILTER_ADVANCED | 1 + baseconfig/CONFIG_NETFILTER_DEBUG | 1 + baseconfig/CONFIG_NETFILTER_INGRESS | 1 + baseconfig/CONFIG_NETFILTER_NETLINK | 1 + baseconfig/CONFIG_NETFILTER_NETLINK_ACCT | 1 + baseconfig/CONFIG_NETFILTER_NETLINK_GLUE_CT | 1 + baseconfig/CONFIG_NETFILTER_NETLINK_LOG | 1 + baseconfig/CONFIG_NETFILTER_NETLINK_QUEUE | 1 + baseconfig/CONFIG_NETFILTER_XTABLES | 1 + baseconfig/CONFIG_NETFILTER_XT_CONNMARK | 1 + baseconfig/CONFIG_NETFILTER_XT_MARK | 1 + baseconfig/CONFIG_NETFILTER_XT_MATCH_ADDRTYPE | 1 + baseconfig/CONFIG_NETFILTER_XT_MATCH_BPF | 1 + baseconfig/CONFIG_NETFILTER_XT_MATCH_CGROUP | 1 + baseconfig/CONFIG_NETFILTER_XT_MATCH_CLUSTER | 1 + baseconfig/CONFIG_NETFILTER_XT_MATCH_COMMENT | 1 + .../CONFIG_NETFILTER_XT_MATCH_CONNBYTES | 1 + .../CONFIG_NETFILTER_XT_MATCH_CONNLABEL | 1 + .../CONFIG_NETFILTER_XT_MATCH_CONNLIMIT | 1 + baseconfig/CONFIG_NETFILTER_XT_MATCH_CONNMARK | 1 + .../CONFIG_NETFILTER_XT_MATCH_CONNTRACK | 1 + baseconfig/CONFIG_NETFILTER_XT_MATCH_CPU | 1 + baseconfig/CONFIG_NETFILTER_XT_MATCH_DCCP | 1 + baseconfig/CONFIG_NETFILTER_XT_MATCH_DEVGROUP | 1 + baseconfig/CONFIG_NETFILTER_XT_MATCH_DSCP | 1 + baseconfig/CONFIG_NETFILTER_XT_MATCH_ECN | 1 + baseconfig/CONFIG_NETFILTER_XT_MATCH_ESP | 1 + .../CONFIG_NETFILTER_XT_MATCH_HASHLIMIT | 1 + baseconfig/CONFIG_NETFILTER_XT_MATCH_HELPER | 1 + baseconfig/CONFIG_NETFILTER_XT_MATCH_HL | 1 + baseconfig/CONFIG_NETFILTER_XT_MATCH_IPCOMP | 1 + baseconfig/CONFIG_NETFILTER_XT_MATCH_IPRANGE | 1 + baseconfig/CONFIG_NETFILTER_XT_MATCH_IPVS | 1 + baseconfig/CONFIG_NETFILTER_XT_MATCH_L2TP | 1 + baseconfig/CONFIG_NETFILTER_XT_MATCH_LENGTH | 1 + baseconfig/CONFIG_NETFILTER_XT_MATCH_LIMIT | 1 + baseconfig/CONFIG_NETFILTER_XT_MATCH_MAC | 1 + baseconfig/CONFIG_NETFILTER_XT_MATCH_MARK | 1 + .../CONFIG_NETFILTER_XT_MATCH_MULTIPORT | 1 + baseconfig/CONFIG_NETFILTER_XT_MATCH_NFACCT | 1 + baseconfig/CONFIG_NETFILTER_XT_MATCH_OSF | 1 + baseconfig/CONFIG_NETFILTER_XT_MATCH_OWNER | 1 + baseconfig/CONFIG_NETFILTER_XT_MATCH_PHYSDEV | 1 + baseconfig/CONFIG_NETFILTER_XT_MATCH_PKTTYPE | 1 + baseconfig/CONFIG_NETFILTER_XT_MATCH_POLICY | 1 + baseconfig/CONFIG_NETFILTER_XT_MATCH_QUOTA | 1 + baseconfig/CONFIG_NETFILTER_XT_MATCH_RATEEST | 1 + baseconfig/CONFIG_NETFILTER_XT_MATCH_REALM | 1 + baseconfig/CONFIG_NETFILTER_XT_MATCH_RECENT | 1 + baseconfig/CONFIG_NETFILTER_XT_MATCH_SCTP | 1 + baseconfig/CONFIG_NETFILTER_XT_MATCH_SOCKET | 1 + baseconfig/CONFIG_NETFILTER_XT_MATCH_STATE | 1 + .../CONFIG_NETFILTER_XT_MATCH_STATISTIC | 1 + baseconfig/CONFIG_NETFILTER_XT_MATCH_STRING | 1 + baseconfig/CONFIG_NETFILTER_XT_MATCH_TCPMSS | 1 + baseconfig/CONFIG_NETFILTER_XT_MATCH_TIME | 1 + baseconfig/CONFIG_NETFILTER_XT_MATCH_U32 | 1 + baseconfig/CONFIG_NETFILTER_XT_NAT | 1 + baseconfig/CONFIG_NETFILTER_XT_SET | 1 + baseconfig/CONFIG_NETFILTER_XT_TARGET_AUDIT | 1 + .../CONFIG_NETFILTER_XT_TARGET_CHECKSUM | 1 + .../CONFIG_NETFILTER_XT_TARGET_CLASSIFY | 1 + .../CONFIG_NETFILTER_XT_TARGET_CONNMARK | 1 + .../CONFIG_NETFILTER_XT_TARGET_CONNSECMARK | 1 + baseconfig/CONFIG_NETFILTER_XT_TARGET_CT | 1 + baseconfig/CONFIG_NETFILTER_XT_TARGET_DSCP | 1 + baseconfig/CONFIG_NETFILTER_XT_TARGET_HMARK | 1 + .../CONFIG_NETFILTER_XT_TARGET_IDLETIMER | 1 + baseconfig/CONFIG_NETFILTER_XT_TARGET_LED | 1 + baseconfig/CONFIG_NETFILTER_XT_TARGET_LOG | 1 + baseconfig/CONFIG_NETFILTER_XT_TARGET_MARK | 1 + baseconfig/CONFIG_NETFILTER_XT_TARGET_NETMAP | 1 + baseconfig/CONFIG_NETFILTER_XT_TARGET_NFLOG | 1 + baseconfig/CONFIG_NETFILTER_XT_TARGET_NFQUEUE | 1 + baseconfig/CONFIG_NETFILTER_XT_TARGET_NOTRACK | 1 + baseconfig/CONFIG_NETFILTER_XT_TARGET_RATEEST | 1 + .../CONFIG_NETFILTER_XT_TARGET_REDIRECT | 1 + baseconfig/CONFIG_NETFILTER_XT_TARGET_SECMARK | 1 + baseconfig/CONFIG_NETFILTER_XT_TARGET_TCPMSS | 1 + .../CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP | 1 + baseconfig/CONFIG_NETFILTER_XT_TARGET_TEE | 1 + baseconfig/CONFIG_NETFILTER_XT_TARGET_TPROXY | 1 + baseconfig/CONFIG_NETFILTER_XT_TARGET_TRACE | 1 + baseconfig/CONFIG_NETLABEL | 1 + baseconfig/CONFIG_NETLINK_DIAG | 1 + baseconfig/CONFIG_NETROM | 1 + baseconfig/CONFIG_NETWORK_FILESYSTEMS | 1 + baseconfig/CONFIG_NETWORK_PHY_TIMESTAMPING | 1 + baseconfig/CONFIG_NETXEN_NIC | 1 + baseconfig/CONFIG_NET_9P | 1 + baseconfig/CONFIG_NET_9P_DEBUG | 1 + baseconfig/CONFIG_NET_9P_RDMA | 1 + baseconfig/CONFIG_NET_9P_VIRTIO | 1 + baseconfig/CONFIG_NET_ACT_BPF | 1 + baseconfig/CONFIG_NET_ACT_CONNMARK | 1 + baseconfig/CONFIG_NET_ACT_CSUM | 1 + baseconfig/CONFIG_NET_ACT_GACT | 1 + baseconfig/CONFIG_NET_ACT_IFE | 1 + baseconfig/CONFIG_NET_ACT_IPT | 1 + baseconfig/CONFIG_NET_ACT_MIRRED | 1 + baseconfig/CONFIG_NET_ACT_NAT | 1 + baseconfig/CONFIG_NET_ACT_PEDIT | 1 + baseconfig/CONFIG_NET_ACT_POLICE | 1 + baseconfig/CONFIG_NET_ACT_SIMP | 1 + baseconfig/CONFIG_NET_ACT_SKBEDIT | 1 + baseconfig/CONFIG_NET_ACT_SKBMOD | 1 + baseconfig/CONFIG_NET_ACT_TUNNEL_KEY | 1 + baseconfig/CONFIG_NET_ACT_VLAN | 1 + baseconfig/CONFIG_NET_CADENCE | 1 + baseconfig/CONFIG_NET_CALXEDA_XGMAC | 1 + baseconfig/CONFIG_NET_CLS | 1 + baseconfig/CONFIG_NET_CLS_ACT | 1 + baseconfig/CONFIG_NET_CLS_BASIC | 1 + baseconfig/CONFIG_NET_CLS_BPF | 1 + baseconfig/CONFIG_NET_CLS_CGROUP | 1 + baseconfig/CONFIG_NET_CLS_FLOW | 1 + baseconfig/CONFIG_NET_CLS_FLOWER | 1 + baseconfig/CONFIG_NET_CLS_FW | 1 + baseconfig/CONFIG_NET_CLS_IND | 1 + baseconfig/CONFIG_NET_CLS_MATCHALL | 1 + baseconfig/CONFIG_NET_CLS_ROUTE | 1 + baseconfig/CONFIG_NET_CLS_ROUTE4 | 1 + baseconfig/CONFIG_NET_CLS_RSVP | 1 + baseconfig/CONFIG_NET_CLS_RSVP6 | 1 + baseconfig/CONFIG_NET_CLS_TCINDEX | 1 + baseconfig/CONFIG_NET_CLS_U32 | 1 + baseconfig/CONFIG_NET_CORE | 1 + baseconfig/CONFIG_NET_DCCPPROBE | 1 + baseconfig/CONFIG_NET_DEVLINK | 1 + baseconfig/CONFIG_NET_DROP_MONITOR | 1 + baseconfig/CONFIG_NET_DSA | 1 + baseconfig/CONFIG_NET_DSA_BCM_SF2 | 1 + baseconfig/CONFIG_NET_DSA_HWMON | 1 + baseconfig/CONFIG_NET_DSA_MV88E6060 | 1 + baseconfig/CONFIG_NET_DSA_MV88E6XXX | 1 + baseconfig/CONFIG_NET_DSA_MV88E6XXX_GLOBAL2 | 1 + baseconfig/CONFIG_NET_DSA_QCA8K | 1 + baseconfig/CONFIG_NET_EMATCH | 1 + baseconfig/CONFIG_NET_EMATCH_CANID | 1 + baseconfig/CONFIG_NET_EMATCH_CMP | 1 + baseconfig/CONFIG_NET_EMATCH_IPSET | 1 + baseconfig/CONFIG_NET_EMATCH_META | 1 + baseconfig/CONFIG_NET_EMATCH_NBYTE | 1 + baseconfig/CONFIG_NET_EMATCH_STACK | 1 + baseconfig/CONFIG_NET_EMATCH_TEXT | 1 + baseconfig/CONFIG_NET_EMATCH_U32 | 1 + baseconfig/CONFIG_NET_FC | 1 + baseconfig/CONFIG_NET_FOU | 1 + baseconfig/CONFIG_NET_FOU_IP_TUNNELS | 1 + baseconfig/CONFIG_NET_IFE_SKBMARK | 1 + baseconfig/CONFIG_NET_IFE_SKBPRIO | 1 + baseconfig/CONFIG_NET_IFE_SKBTCINDEX | 1 + baseconfig/CONFIG_NET_IPGRE | 1 + baseconfig/CONFIG_NET_IPGRE_BROADCAST | 1 + baseconfig/CONFIG_NET_IPGRE_DEMUX | 1 + baseconfig/CONFIG_NET_IPIP | 1 + baseconfig/CONFIG_NET_IPVTI | 1 + baseconfig/CONFIG_NET_KEY | 1 + baseconfig/CONFIG_NET_KEY_MIGRATE | 1 + baseconfig/CONFIG_NET_L3_MASTER_DEV | 1 + baseconfig/CONFIG_NET_MPLS_GSO | 1 + baseconfig/CONFIG_NET_NCSI | 1 + baseconfig/CONFIG_NET_NS | 1 + baseconfig/CONFIG_NET_PACKET_ENGINE | 1 + baseconfig/CONFIG_NET_PKTGEN | 1 + baseconfig/CONFIG_NET_POLL_CONTROLLER | 1 + baseconfig/CONFIG_NET_SCHED | 1 + baseconfig/CONFIG_NET_SCH_ATM | 1 + baseconfig/CONFIG_NET_SCH_CBQ | 1 + baseconfig/CONFIG_NET_SCH_CHOKE | 1 + baseconfig/CONFIG_NET_SCH_CODEL | 1 + baseconfig/CONFIG_NET_SCH_DRR | 1 + baseconfig/CONFIG_NET_SCH_DSMARK | 1 + baseconfig/CONFIG_NET_SCH_FQ | 1 + baseconfig/CONFIG_NET_SCH_FQ_CODEL | 1 + baseconfig/CONFIG_NET_SCH_GRED | 1 + baseconfig/CONFIG_NET_SCH_HFSC | 1 + baseconfig/CONFIG_NET_SCH_HHF | 1 + baseconfig/CONFIG_NET_SCH_HTB | 1 + baseconfig/CONFIG_NET_SCH_INGRESS | 1 + baseconfig/CONFIG_NET_SCH_MQPRIO | 1 + baseconfig/CONFIG_NET_SCH_MULTIQ | 1 + baseconfig/CONFIG_NET_SCH_NETEM | 1 + baseconfig/CONFIG_NET_SCH_PIE | 1 + baseconfig/CONFIG_NET_SCH_PLUG | 1 + baseconfig/CONFIG_NET_SCH_PRIO | 1 + baseconfig/CONFIG_NET_SCH_QFQ | 1 + baseconfig/CONFIG_NET_SCH_RED | 1 + baseconfig/CONFIG_NET_SCH_SFB | 1 + baseconfig/CONFIG_NET_SCH_SFQ | 1 + baseconfig/CONFIG_NET_SCH_TBF | 1 + baseconfig/CONFIG_NET_SCH_TEQL | 1 + baseconfig/CONFIG_NET_SCTPPROBE | 1 + baseconfig/CONFIG_NET_SWITCHDEV | 1 + baseconfig/CONFIG_NET_TCPPROBE | 1 + baseconfig/CONFIG_NET_TEAM | 1 + baseconfig/CONFIG_NET_TEAM_MODE_ACTIVEBACKUP | 1 + baseconfig/CONFIG_NET_TEAM_MODE_BROADCAST | 1 + baseconfig/CONFIG_NET_TEAM_MODE_LOADBALANCE | 1 + baseconfig/CONFIG_NET_TEAM_MODE_RANDOM | 1 + baseconfig/CONFIG_NET_TEAM_MODE_ROUNDROBIN | 1 + baseconfig/CONFIG_NET_TULIP | 1 + baseconfig/CONFIG_NET_VENDOR_3COM | 1 + baseconfig/CONFIG_NET_VENDOR_8390 | 1 + baseconfig/CONFIG_NET_VENDOR_ADAPTEC | 1 + baseconfig/CONFIG_NET_VENDOR_AGERE | 1 + baseconfig/CONFIG_NET_VENDOR_ALACRITECH | 1 + baseconfig/CONFIG_NET_VENDOR_ALTEON | 1 + baseconfig/CONFIG_NET_VENDOR_AMAZON | 1 + baseconfig/CONFIG_NET_VENDOR_AMD | 1 + baseconfig/CONFIG_NET_VENDOR_ARC | 1 + baseconfig/CONFIG_NET_VENDOR_ATHEROS | 1 + baseconfig/CONFIG_NET_VENDOR_AURORA | 1 + baseconfig/CONFIG_NET_VENDOR_BROADCOM | 1 + baseconfig/CONFIG_NET_VENDOR_BROCADE | 1 + baseconfig/CONFIG_NET_VENDOR_CAVIUM | 1 + baseconfig/CONFIG_NET_VENDOR_CHELSIO | 1 + baseconfig/CONFIG_NET_VENDOR_CISCO | 1 + baseconfig/CONFIG_NET_VENDOR_DEC | 1 + baseconfig/CONFIG_NET_VENDOR_DLINK | 1 + baseconfig/CONFIG_NET_VENDOR_EMULEX | 1 + baseconfig/CONFIG_NET_VENDOR_EXAR | 1 + baseconfig/CONFIG_NET_VENDOR_EZCHIP | 1 + baseconfig/CONFIG_NET_VENDOR_FARADAY | 1 + baseconfig/CONFIG_NET_VENDOR_FUJITSU | 1 + baseconfig/CONFIG_NET_VENDOR_HISILICON | 1 + baseconfig/CONFIG_NET_VENDOR_HP | 1 + baseconfig/CONFIG_NET_VENDOR_I825XX | 1 + baseconfig/CONFIG_NET_VENDOR_INTEL | 1 + baseconfig/CONFIG_NET_VENDOR_MARVELL | 1 + baseconfig/CONFIG_NET_VENDOR_MICREL | 1 + baseconfig/CONFIG_NET_VENDOR_MICROCHIP | 1 + baseconfig/CONFIG_NET_VENDOR_MYRI | 1 + baseconfig/CONFIG_NET_VENDOR_NATSEMI | 1 + baseconfig/CONFIG_NET_VENDOR_NETRONOME | 1 + baseconfig/CONFIG_NET_VENDOR_NVIDIA | 1 + baseconfig/CONFIG_NET_VENDOR_OKI | 1 + baseconfig/CONFIG_NET_VENDOR_QLOGIC | 1 + baseconfig/CONFIG_NET_VENDOR_QUALCOMM | 1 + baseconfig/CONFIG_NET_VENDOR_RDC | 1 + baseconfig/CONFIG_NET_VENDOR_REALTEK | 1 + baseconfig/CONFIG_NET_VENDOR_RENESAS | 1 + baseconfig/CONFIG_NET_VENDOR_ROCKER | 1 + baseconfig/CONFIG_NET_VENDOR_SAMSUNG | 1 + baseconfig/CONFIG_NET_VENDOR_SEEQ | 1 + baseconfig/CONFIG_NET_VENDOR_SILAN | 1 + baseconfig/CONFIG_NET_VENDOR_SIS | 1 + baseconfig/CONFIG_NET_VENDOR_SMSC | 1 + baseconfig/CONFIG_NET_VENDOR_SOLARFLARE | 1 + baseconfig/CONFIG_NET_VENDOR_STMICRO | 1 + baseconfig/CONFIG_NET_VENDOR_SUN | 1 + baseconfig/CONFIG_NET_VENDOR_SYNOPSYS | 1 + baseconfig/CONFIG_NET_VENDOR_TEHUTI | 1 + baseconfig/CONFIG_NET_VENDOR_TI | 1 + baseconfig/CONFIG_NET_VENDOR_VIA | 1 + baseconfig/CONFIG_NET_VENDOR_WIZNET | 1 + baseconfig/CONFIG_NET_VENDOR_XIRCOM | 1 + baseconfig/CONFIG_NET_VRF | 1 + baseconfig/CONFIG_NEW_LEDS | 1 + baseconfig/CONFIG_NFC | 1 + baseconfig/CONFIG_NFC_DIGITAL | 1 + baseconfig/CONFIG_NFC_FDP | 1 + baseconfig/CONFIG_NFC_HCI | 1 + baseconfig/CONFIG_NFC_MICROREAD | 1 + baseconfig/CONFIG_NFC_MICROREAD_I2C | 1 + baseconfig/CONFIG_NFC_MRVL | 1 + baseconfig/CONFIG_NFC_MRVL_I2C | 1 + baseconfig/CONFIG_NFC_MRVL_SPI | 1 + baseconfig/CONFIG_NFC_MRVL_USB | 1 + baseconfig/CONFIG_NFC_NCI | 1 + baseconfig/CONFIG_NFC_NCI_SPI | 1 + baseconfig/CONFIG_NFC_NCI_UART | 1 + baseconfig/CONFIG_NFC_NXP_NCI | 1 + baseconfig/CONFIG_NFC_NXP_NCI_I2C | 1 + baseconfig/CONFIG_NFC_PN533 | 1 + baseconfig/CONFIG_NFC_PN533_I2C | 1 + baseconfig/CONFIG_NFC_PN533_USB | 1 + baseconfig/CONFIG_NFC_PN544 | 1 + baseconfig/CONFIG_NFC_PN544_I2C | 1 + baseconfig/CONFIG_NFC_PORT100 | 1 + baseconfig/CONFIG_NFC_S3FWRN5_I2C | 1 + baseconfig/CONFIG_NFC_SHDLC | 1 + baseconfig/CONFIG_NFC_SIM | 1 + baseconfig/CONFIG_NFC_ST21NFCA | 1 + baseconfig/CONFIG_NFC_ST21NFCA_I2C | 1 + baseconfig/CONFIG_NFC_ST95HF | 1 + baseconfig/CONFIG_NFC_ST_NCI | 1 + baseconfig/CONFIG_NFC_ST_NCI_I2C | 1 + baseconfig/CONFIG_NFC_ST_NCI_SPI | 1 + baseconfig/CONFIG_NFC_TRF7970A | 1 + baseconfig/CONFIG_NFP_NETVF | 1 + baseconfig/CONFIG_NFP_NET_DEBUG | 1 + baseconfig/CONFIG_NFSD | 1 + baseconfig/CONFIG_NFSD_BLOCKLAYOUT | 1 + baseconfig/CONFIG_NFSD_FAULT_INJECTION | 1 + baseconfig/CONFIG_NFSD_FLEXFILELAYOUT | 1 + baseconfig/CONFIG_NFSD_PNFS | 1 + baseconfig/CONFIG_NFSD_SCSILAYOUT | 1 + baseconfig/CONFIG_NFSD_V3 | 1 + baseconfig/CONFIG_NFSD_V3_ACL | 1 + baseconfig/CONFIG_NFSD_V4 | 1 + baseconfig/CONFIG_NFSD_V4_SECURITY_LABEL | 1 + baseconfig/CONFIG_NFS_FS | 1 + baseconfig/CONFIG_NFS_FSCACHE | 1 + baseconfig/CONFIG_NFS_SWAP | 1 + baseconfig/CONFIG_NFS_USE_LEGACY_DNS | 1 + baseconfig/CONFIG_NFS_V2 | 1 + baseconfig/CONFIG_NFS_V3 | 1 + baseconfig/CONFIG_NFS_V3_ACL | 1 + baseconfig/CONFIG_NFS_V4 | 1 + baseconfig/CONFIG_NFS_V4_1 | 1 + .../CONFIG_NFS_V4_1_IMPLEMENTATION_ID_DOMAIN | 1 + baseconfig/CONFIG_NFS_V4_1_MIGRATION | 1 + baseconfig/CONFIG_NFS_V4_2 | 1 + baseconfig/CONFIG_NFTL | 1 + baseconfig/CONFIG_NFT_BRIDGE_META | 1 + baseconfig/CONFIG_NFT_BRIDGE_REJECT | 1 + baseconfig/CONFIG_NFT_CHAIN_NAT_IPV4 | 1 + baseconfig/CONFIG_NFT_CHAIN_NAT_IPV6 | 1 + baseconfig/CONFIG_NFT_CHAIN_ROUTE_IPV4 | 1 + baseconfig/CONFIG_NFT_CHAIN_ROUTE_IPV6 | 1 + baseconfig/CONFIG_NFT_COMPAT | 1 + baseconfig/CONFIG_NFT_COUNTER | 1 + baseconfig/CONFIG_NFT_CT | 1 + baseconfig/CONFIG_NFT_DUP_IPV4 | 1 + baseconfig/CONFIG_NFT_DUP_IPV6 | 1 + baseconfig/CONFIG_NFT_DUP_NETDEV | 1 + baseconfig/CONFIG_NFT_EXTHDR | 1 + baseconfig/CONFIG_NFT_FIB_INET | 1 + baseconfig/CONFIG_NFT_FIB_IPV4 | 1 + baseconfig/CONFIG_NFT_FIB_IPV6 | 1 + baseconfig/CONFIG_NFT_FWD_NETDEV | 1 + baseconfig/CONFIG_NFT_HASH | 1 + baseconfig/CONFIG_NFT_LIMIT | 1 + baseconfig/CONFIG_NFT_LOG | 1 + baseconfig/CONFIG_NFT_MASQ | 1 + baseconfig/CONFIG_NFT_MASQ_IPV4 | 1 + baseconfig/CONFIG_NFT_MASQ_IPV6 | 1 + baseconfig/CONFIG_NFT_META | 1 + baseconfig/CONFIG_NFT_NAT | 1 + baseconfig/CONFIG_NFT_NUMGEN | 1 + baseconfig/CONFIG_NFT_OBJREF | 1 + baseconfig/CONFIG_NFT_QUEUE | 1 + baseconfig/CONFIG_NFT_QUOTA | 1 + baseconfig/CONFIG_NFT_RBTREE | 1 + baseconfig/CONFIG_NFT_REDIR | 1 + baseconfig/CONFIG_NFT_REDIR_IPV4 | 1 + baseconfig/CONFIG_NFT_REDIR_IPV6 | 1 + baseconfig/CONFIG_NFT_REJECT | 1 + baseconfig/CONFIG_NFT_REJECT_IPV4 | 1 + baseconfig/CONFIG_NFT_RT | 1 + baseconfig/CONFIG_NFT_SET_HASH | 1 + baseconfig/CONFIG_NFT_SET_RBTREE | 1 + baseconfig/CONFIG_NF_CONNTRACK | 1 + baseconfig/CONFIG_NF_CONNTRACK_AMANDA | 1 + baseconfig/CONFIG_NF_CONNTRACK_EVENTS | 1 + baseconfig/CONFIG_NF_CONNTRACK_FTP | 1 + baseconfig/CONFIG_NF_CONNTRACK_H323 | 1 + baseconfig/CONFIG_NF_CONNTRACK_IPV4 | 1 + baseconfig/CONFIG_NF_CONNTRACK_IPV6 | 1 + baseconfig/CONFIG_NF_CONNTRACK_IRC | 1 + baseconfig/CONFIG_NF_CONNTRACK_MARK | 1 + baseconfig/CONFIG_NF_CONNTRACK_NETBIOS_NS | 1 + baseconfig/CONFIG_NF_CONNTRACK_PPTP | 1 + baseconfig/CONFIG_NF_CONNTRACK_PROCFS | 1 + baseconfig/CONFIG_NF_CONNTRACK_PROC_COMPAT | 1 + baseconfig/CONFIG_NF_CONNTRACK_SANE | 1 + baseconfig/CONFIG_NF_CONNTRACK_SECMARK | 1 + baseconfig/CONFIG_NF_CONNTRACK_SIP | 1 + baseconfig/CONFIG_NF_CONNTRACK_SNMP | 1 + baseconfig/CONFIG_NF_CONNTRACK_TFTP | 1 + baseconfig/CONFIG_NF_CONNTRACK_TIMEOUT | 1 + baseconfig/CONFIG_NF_CONNTRACK_TIMESTAMP | 1 + baseconfig/CONFIG_NF_CONNTRACK_ZONES | 1 + baseconfig/CONFIG_NF_CT_NETLINK | 1 + baseconfig/CONFIG_NF_CT_NETLINK_HELPER | 1 + baseconfig/CONFIG_NF_CT_NETLINK_TIMEOUT | 1 + baseconfig/CONFIG_NF_CT_PROTO_DCCP | 1 + baseconfig/CONFIG_NF_CT_PROTO_SCTP | 1 + baseconfig/CONFIG_NF_CT_PROTO_UDPLITE | 1 + baseconfig/CONFIG_NF_DUP_IPV4 | 1 + baseconfig/CONFIG_NF_DUP_IPV6 | 1 + baseconfig/CONFIG_NF_DUP_NETDEV | 1 + baseconfig/CONFIG_NF_LOG_ARP | 1 + baseconfig/CONFIG_NF_LOG_BRIDGE | 1 + baseconfig/CONFIG_NF_LOG_IPV4 | 1 + baseconfig/CONFIG_NF_LOG_IPV6 | 1 + baseconfig/CONFIG_NF_LOG_NETDEV | 1 + baseconfig/CONFIG_NF_NAT | 1 + baseconfig/CONFIG_NF_NAT_SNMP_BASIC | 1 + baseconfig/CONFIG_NF_REJECT_IPV6 | 1 + baseconfig/CONFIG_NF_SOCKET_IPV4 | 1 + baseconfig/CONFIG_NF_SOCKET_IPV6 | 1 + baseconfig/CONFIG_NF_TABLES | 1 + baseconfig/CONFIG_NF_TABLES_ARP | 1 + baseconfig/CONFIG_NF_TABLES_BRIDGE | 1 + baseconfig/CONFIG_NF_TABLES_INET | 1 + baseconfig/CONFIG_NF_TABLES_IPV4 | 1 + baseconfig/CONFIG_NF_TABLES_IPV6 | 1 + baseconfig/CONFIG_NF_TABLES_NETDEV | 1 + baseconfig/CONFIG_NI903X_WDT | 1 + baseconfig/CONFIG_NILFS2_FS | 1 + baseconfig/CONFIG_NIU | 1 + baseconfig/CONFIG_NL80211 | 1 + baseconfig/CONFIG_NL80211_TESTMODE | 1 + baseconfig/CONFIG_NLMON | 1 + baseconfig/CONFIG_NLS | 1 + baseconfig/CONFIG_NLS_ASCII | 1 + baseconfig/CONFIG_NLS_CODEPAGE_1250 | 1 + baseconfig/CONFIG_NLS_CODEPAGE_1251 | 1 + baseconfig/CONFIG_NLS_CODEPAGE_437 | 1 + baseconfig/CONFIG_NLS_CODEPAGE_737 | 1 + baseconfig/CONFIG_NLS_CODEPAGE_775 | 1 + baseconfig/CONFIG_NLS_CODEPAGE_850 | 1 + baseconfig/CONFIG_NLS_CODEPAGE_852 | 1 + baseconfig/CONFIG_NLS_CODEPAGE_855 | 1 + baseconfig/CONFIG_NLS_CODEPAGE_857 | 1 + baseconfig/CONFIG_NLS_CODEPAGE_860 | 1 + baseconfig/CONFIG_NLS_CODEPAGE_861 | 1 + baseconfig/CONFIG_NLS_CODEPAGE_862 | 1 + baseconfig/CONFIG_NLS_CODEPAGE_863 | 1 + baseconfig/CONFIG_NLS_CODEPAGE_864 | 1 + baseconfig/CONFIG_NLS_CODEPAGE_865 | 1 + baseconfig/CONFIG_NLS_CODEPAGE_866 | 1 + baseconfig/CONFIG_NLS_CODEPAGE_869 | 1 + baseconfig/CONFIG_NLS_CODEPAGE_874 | 1 + baseconfig/CONFIG_NLS_CODEPAGE_932 | 1 + baseconfig/CONFIG_NLS_CODEPAGE_936 | 1 + baseconfig/CONFIG_NLS_CODEPAGE_949 | 1 + baseconfig/CONFIG_NLS_CODEPAGE_950 | 1 + baseconfig/CONFIG_NLS_DEFAULT | 1 + baseconfig/CONFIG_NLS_ISO8859_1 | 1 + baseconfig/CONFIG_NLS_ISO8859_13 | 1 + baseconfig/CONFIG_NLS_ISO8859_14 | 1 + baseconfig/CONFIG_NLS_ISO8859_15 | 1 + baseconfig/CONFIG_NLS_ISO8859_2 | 1 + baseconfig/CONFIG_NLS_ISO8859_3 | 1 + baseconfig/CONFIG_NLS_ISO8859_4 | 1 + baseconfig/CONFIG_NLS_ISO8859_5 | 1 + baseconfig/CONFIG_NLS_ISO8859_6 | 1 + baseconfig/CONFIG_NLS_ISO8859_7 | 1 + baseconfig/CONFIG_NLS_ISO8859_8 | 1 + baseconfig/CONFIG_NLS_ISO8859_9 | 1 + baseconfig/CONFIG_NLS_KOI8_R | 1 + baseconfig/CONFIG_NLS_KOI8_U | 1 + baseconfig/CONFIG_NLS_MAC_CELTIC | 1 + baseconfig/CONFIG_NLS_MAC_CENTEURO | 1 + baseconfig/CONFIG_NLS_MAC_CROATIAN | 1 + baseconfig/CONFIG_NLS_MAC_CYRILLIC | 1 + baseconfig/CONFIG_NLS_MAC_GAELIC | 1 + baseconfig/CONFIG_NLS_MAC_GREEK | 1 + baseconfig/CONFIG_NLS_MAC_ICELAND | 1 + baseconfig/CONFIG_NLS_MAC_INUIT | 1 + baseconfig/CONFIG_NLS_MAC_ROMAN | 1 + baseconfig/CONFIG_NLS_MAC_ROMANIAN | 1 + baseconfig/CONFIG_NLS_MAC_TURKISH | 1 + baseconfig/CONFIG_NLS_UTF8 | 1 + baseconfig/CONFIG_NMI_LOG_BUF_SHIFT | 1 + baseconfig/CONFIG_NOP_USB_XCEIV | 1 + baseconfig/CONFIG_NORTEL_HERMES | 1 + baseconfig/CONFIG_NOTIFIER_ERROR_INJECTION | 1 + baseconfig/CONFIG_NOUVEAU_DEBUG | 1 + baseconfig/CONFIG_NOUVEAU_DEBUG_DEFAULT | 1 + baseconfig/CONFIG_NOZOMI | 1 + baseconfig/CONFIG_NO_HZ | 1 + baseconfig/CONFIG_NS83820 | 1 + baseconfig/CONFIG_NSC_FIR | 1 + baseconfig/CONFIG_NTB | 1 + baseconfig/CONFIG_NTFS_FS | 1 + baseconfig/CONFIG_NTP_PPS | 1 + baseconfig/CONFIG_NVM | 1 + baseconfig/CONFIG_NVMEM | 1 + baseconfig/CONFIG_NVME_FC | 1 + baseconfig/CONFIG_NVME_RDMA | 1 + baseconfig/CONFIG_NVME_TARGET | 1 + baseconfig/CONFIG_NVME_TARGET_FC | 1 + baseconfig/CONFIG_NVME_TARGET_FCLOOP | 1 + baseconfig/CONFIG_NVME_TARGET_LOOP | 1 + baseconfig/CONFIG_NVME_TARGET_RDMA | 1 + baseconfig/CONFIG_NVRAM | 1 + baseconfig/CONFIG_N_GSM | 1 + baseconfig/CONFIG_N_HDLC | 1 + baseconfig/CONFIG_OCFS2_DEBUG_FS | 1 + baseconfig/CONFIG_OCFS2_DEBUG_MASKLOG | 1 + baseconfig/CONFIG_OCFS2_FS | 1 + baseconfig/CONFIG_OCFS2_FS_O2CB | 1 + baseconfig/CONFIG_OCFS2_FS_STATS | 1 + baseconfig/CONFIG_OCFS2_FS_USERSPACE_CLUSTER | 1 + baseconfig/CONFIG_OLD_BELKIN_DONGLE | 1 + baseconfig/CONFIG_OMFS_FS | 1 + baseconfig/CONFIG_OPENVSWITCH | 1 + baseconfig/CONFIG_OPENVSWITCH_GENEVE | 1 + baseconfig/CONFIG_OPENVSWITCH_GRE | 1 + baseconfig/CONFIG_OPENVSWITCH_VXLAN | 1 + baseconfig/CONFIG_OPROFILE | 1 + baseconfig/CONFIG_OPT3001 | 1 + baseconfig/CONFIG_OPTIMIZE_INLINING | 1 + baseconfig/CONFIG_OPTPROBES | 1 + baseconfig/CONFIG_ORANGEFS_FS | 1 + baseconfig/CONFIG_ORINOCO_USB | 1 + baseconfig/CONFIG_OSF_PARTITION | 1 + baseconfig/CONFIG_OVERLAY_FS | 1 + baseconfig/CONFIG_OVERLAY_FS_REDIRECT_DIR | 1 + baseconfig/CONFIG_P54_COMMON | 1 + baseconfig/CONFIG_P54_PCI | 1 + baseconfig/CONFIG_P54_SPI | 1 + baseconfig/CONFIG_P54_USB | 1 + baseconfig/CONFIG_PA12203001 | 1 + baseconfig/CONFIG_PACKET | 1 + baseconfig/CONFIG_PACKET_DIAG | 1 + baseconfig/CONFIG_PAGE_EXTENSION | 1 + baseconfig/CONFIG_PAGE_OWNER | 1 + baseconfig/CONFIG_PAGE_POISONING | 1 + baseconfig/CONFIG_PANEL | 1 + baseconfig/CONFIG_PANIC_ON_OOPS | 1 + baseconfig/CONFIG_PANIC_TIMEOUT | 1 + baseconfig/CONFIG_PANTHERLORD_FF | 1 + baseconfig/CONFIG_PARIDE | 1 + baseconfig/CONFIG_PARPORT | 1 + baseconfig/CONFIG_PARPORT_1284 | 1 + baseconfig/CONFIG_PARPORT_AX88796 | 1 + baseconfig/CONFIG_PARPORT_PC | 1 + baseconfig/CONFIG_PARPORT_PC_FIFO | 1 + baseconfig/CONFIG_PARPORT_PC_PCMCIA | 1 + baseconfig/CONFIG_PARPORT_PC_SUPERIO | 1 + baseconfig/CONFIG_PARPORT_SERIAL | 1 + baseconfig/CONFIG_PARTITION_ADVANCED | 1 + baseconfig/CONFIG_PATA_ACPI | 1 + baseconfig/CONFIG_PATA_ALI | 1 + baseconfig/CONFIG_PATA_AMD | 1 + baseconfig/CONFIG_PATA_ARASAN_CF | 1 + baseconfig/CONFIG_PATA_ARTOP | 1 + baseconfig/CONFIG_PATA_ATIIXP | 1 + baseconfig/CONFIG_PATA_ATP867X | 1 + baseconfig/CONFIG_PATA_CMD640_PCI | 1 + baseconfig/CONFIG_PATA_CMD64X | 1 + baseconfig/CONFIG_PATA_CS5520 | 1 + baseconfig/CONFIG_PATA_CS5530 | 1 + baseconfig/CONFIG_PATA_CS5535 | 1 + baseconfig/CONFIG_PATA_CS5536 | 1 + baseconfig/CONFIG_PATA_CYPRESS | 1 + baseconfig/CONFIG_PATA_EFAR | 1 + baseconfig/CONFIG_PATA_HPT366 | 1 + baseconfig/CONFIG_PATA_HPT37X | 1 + baseconfig/CONFIG_PATA_HPT3X2N | 1 + baseconfig/CONFIG_PATA_HPT3X3 | 1 + baseconfig/CONFIG_PATA_HPT3X3_DMA | 1 + baseconfig/CONFIG_PATA_IT8213 | 1 + baseconfig/CONFIG_PATA_IT821X | 1 + baseconfig/CONFIG_PATA_JMICRON | 1 + baseconfig/CONFIG_PATA_LEGACY | 1 + baseconfig/CONFIG_PATA_MARVELL | 1 + baseconfig/CONFIG_PATA_MPIIX | 1 + baseconfig/CONFIG_PATA_NETCELL | 1 + baseconfig/CONFIG_PATA_NINJA32 | 1 + baseconfig/CONFIG_PATA_NS87410 | 1 + baseconfig/CONFIG_PATA_NS87415 | 1 + baseconfig/CONFIG_PATA_OLDPIIX | 1 + baseconfig/CONFIG_PATA_OPTI | 1 + baseconfig/CONFIG_PATA_OPTIDMA | 1 + baseconfig/CONFIG_PATA_PCMCIA | 1 + baseconfig/CONFIG_PATA_PDC2027X | 1 + baseconfig/CONFIG_PATA_PDC_OLD | 1 + baseconfig/CONFIG_PATA_RADISYS | 1 + baseconfig/CONFIG_PATA_RDC | 1 + baseconfig/CONFIG_PATA_RZ1000 | 1 + baseconfig/CONFIG_PATA_SC1200 | 1 + baseconfig/CONFIG_PATA_SCH | 1 + baseconfig/CONFIG_PATA_SERVERWORKS | 1 + baseconfig/CONFIG_PATA_SIL680 | 1 + baseconfig/CONFIG_PATA_SIS | 1 + baseconfig/CONFIG_PATA_TOSHIBA | 1 + baseconfig/CONFIG_PATA_TRIFLEX | 1 + baseconfig/CONFIG_PATA_VIA | 1 + baseconfig/CONFIG_PATA_WINBOND | 1 + baseconfig/CONFIG_PC87413_WDT | 1 + baseconfig/CONFIG_PCCARD | 1 + baseconfig/CONFIG_PCF50633_ADC | 1 + baseconfig/CONFIG_PCF50633_GPIO | 1 + baseconfig/CONFIG_PCH_GBE | 1 + baseconfig/CONFIG_PCI | 1 + baseconfig/CONFIG_PCIEAER | 1 + baseconfig/CONFIG_PCIEAER_INJECT | 1 + baseconfig/CONFIG_PCIEASPM | 1 + baseconfig/CONFIG_PCIEASPM_DEBUG | 1 + baseconfig/CONFIG_PCIEPORTBUS | 1 + baseconfig/CONFIG_PCIE_DPC | 1 + baseconfig/CONFIG_PCIE_DW_PLAT | 1 + baseconfig/CONFIG_PCIE_ECRC | 1 + baseconfig/CONFIG_PCIE_PTM | 1 + baseconfig/CONFIG_PCIPCWATCHDOG | 1 + baseconfig/CONFIG_PCI_DEBUG | 1 + baseconfig/CONFIG_PCI_HERMES | 1 + baseconfig/CONFIG_PCI_IOV | 1 + baseconfig/CONFIG_PCI_MSI | 1 + baseconfig/CONFIG_PCI_PASID | 1 + baseconfig/CONFIG_PCI_PRI | 1 + baseconfig/CONFIG_PCI_REALLOC_ENABLE_AUTO | 1 + baseconfig/CONFIG_PCI_STUB | 1 + baseconfig/CONFIG_PCMCIA | 1 + baseconfig/CONFIG_PCMCIA_3C574 | 1 + baseconfig/CONFIG_PCMCIA_3C589 | 1 + baseconfig/CONFIG_PCMCIA_AXNET | 1 + baseconfig/CONFIG_PCMCIA_DEBUG | 1 + baseconfig/CONFIG_PCMCIA_FMVJ18X | 1 + baseconfig/CONFIG_PCMCIA_HERMES | 1 + baseconfig/CONFIG_PCMCIA_LOAD_CIS | 1 + baseconfig/CONFIG_PCMCIA_NMCLAN | 1 + baseconfig/CONFIG_PCMCIA_PCNET | 1 + baseconfig/CONFIG_PCMCIA_RAYCS | 1 + baseconfig/CONFIG_PCMCIA_SMC91C92 | 1 + baseconfig/CONFIG_PCMCIA_SPECTRUM | 1 + baseconfig/CONFIG_PCMCIA_WL3501 | 1 + baseconfig/CONFIG_PCMCIA_XIRC2PS | 1 + baseconfig/CONFIG_PCMCIA_XIRCOM | 1 + baseconfig/CONFIG_PCNET32 | 1 + baseconfig/CONFIG_PD6729 | 1 + baseconfig/CONFIG_PDA_POWER | 1 + baseconfig/CONFIG_PDC_ADMA | 1 + baseconfig/CONFIG_PERCPU_TEST | 1 + baseconfig/CONFIG_PERF_EVENTS | 1 + baseconfig/CONFIG_PERSISTENT_KEYRINGS | 1 + baseconfig/CONFIG_PGTABLE_MAPPING | 1 + baseconfig/CONFIG_PHANTOM | 1 + baseconfig/CONFIG_PHONE | 1 + baseconfig/CONFIG_PHONET | 1 + baseconfig/CONFIG_PHYLIB | 1 + baseconfig/CONFIG_PHY_PXA_28NM_HSIC | 1 + baseconfig/CONFIG_PHY_PXA_28NM_USB2 | 1 + baseconfig/CONFIG_PHY_ST_SPEAR1310_MIPHY | 1 + baseconfig/CONFIG_PHY_ST_SPEAR1340_MIPHY | 1 + baseconfig/CONFIG_PHY_TUSB1210 | 1 + baseconfig/CONFIG_PID_NS | 1 + baseconfig/CONFIG_PINCONF | 1 + baseconfig/CONFIG_PINCTRL | 1 + baseconfig/CONFIG_PINCTRL_MSM8994 | 1 + baseconfig/CONFIG_PINCTRL_SX150X | 1 + baseconfig/CONFIG_PINMUX | 1 + baseconfig/CONFIG_PKCS7_MESSAGE_PARSER | 1 + baseconfig/CONFIG_PKCS7_TEST_KEY | 1 + baseconfig/CONFIG_PLATFORM_SI4713 | 1 + baseconfig/CONFIG_PLIP | 1 + baseconfig/CONFIG_PLX_HERMES | 1 + baseconfig/CONFIG_PM | 1 + baseconfig/CONFIG_PMBUS | 1 + baseconfig/CONFIG_PMIC_ADP5520 | 1 + baseconfig/CONFIG_PMIC_DA903X | 1 + baseconfig/CONFIG_PM_ADVANCED_DEBUG | 1 + baseconfig/CONFIG_PM_AUTOSLEEP | 1 + baseconfig/CONFIG_PM_DEBUG | 1 + baseconfig/CONFIG_PM_DEVFREQ | 1 + baseconfig/CONFIG_PM_DEVFREQ_EVENT | 1 + baseconfig/CONFIG_PM_OPP | 1 + baseconfig/CONFIG_PM_STD_PARTITION | 1 + baseconfig/CONFIG_PM_TEST_SUSPEND | 1 + baseconfig/CONFIG_PM_TRACE | 1 + baseconfig/CONFIG_PM_TRACE_RTC | 1 + baseconfig/CONFIG_PM_WAKELOCKS | 1 + baseconfig/CONFIG_PNFS_BLOCK | 1 + baseconfig/CONFIG_PNFS_OBJLAYOUT | 1 + baseconfig/CONFIG_POSIX_MQUEUE | 1 + baseconfig/CONFIG_POWERCAP | 1 + baseconfig/CONFIG_POWER_AVS | 1 + baseconfig/CONFIG_POWER_RESET | 1 + baseconfig/CONFIG_POWER_RESET_BRCMKONA | 1 + baseconfig/CONFIG_POWER_RESET_LTC2952 | 1 + baseconfig/CONFIG_POWER_RESET_RESTART | 1 + baseconfig/CONFIG_POWER_RESET_SYSCON | 1 + baseconfig/CONFIG_POWER_RESET_SYSCON_POWEROFF | 1 + baseconfig/CONFIG_POWER_SUPPLY | 1 + baseconfig/CONFIG_POWER_SUPPLY_DEBUG | 1 + baseconfig/CONFIG_PPC_PTDUMP | 1 + baseconfig/CONFIG_PPDEV | 1 + baseconfig/CONFIG_PPP | 1 + baseconfig/CONFIG_PPPOATM | 1 + baseconfig/CONFIG_PPPOE | 1 + baseconfig/CONFIG_PPPOL2TP | 1 + baseconfig/CONFIG_PPP_ASYNC | 1 + baseconfig/CONFIG_PPP_BSDCOMP | 1 + baseconfig/CONFIG_PPP_DEFLATE | 1 + baseconfig/CONFIG_PPP_FILTER | 1 + baseconfig/CONFIG_PPP_MPPE | 1 + baseconfig/CONFIG_PPP_MULTILINK | 1 + baseconfig/CONFIG_PPP_SYNC_TTY | 1 + baseconfig/CONFIG_PPS | 1 + baseconfig/CONFIG_PPS_CLIENT_GPIO | 1 + baseconfig/CONFIG_PPS_CLIENT_KTIMER | 1 + baseconfig/CONFIG_PPS_CLIENT_LDISC | 1 + baseconfig/CONFIG_PPS_CLIENT_PARPORT | 1 + baseconfig/CONFIG_PPS_DEBUG | 1 + baseconfig/CONFIG_PPS_GENERATOR_PARPORT | 1 + baseconfig/CONFIG_PPTP | 1 + baseconfig/CONFIG_PREEMPT | 1 + baseconfig/CONFIG_PREEMPT_NONE | 1 + baseconfig/CONFIG_PREEMPT_VOLUNTARY | 1 + baseconfig/CONFIG_PREVENT_FIRMWARE_BUILD | 1 + baseconfig/CONFIG_PRINTER | 1 + baseconfig/CONFIG_PRINTK_TIME | 1 + baseconfig/CONFIG_PRINT_QUOTA_WARNING | 1 + baseconfig/CONFIG_PRISM2_USB | 1 + baseconfig/CONFIG_PRISM54 | 1 + baseconfig/CONFIG_PROC_CHILDREN | 1 + baseconfig/CONFIG_PROC_EVENTS | 1 + baseconfig/CONFIG_PROC_FS | 1 + baseconfig/CONFIG_PROC_KCORE | 1 + baseconfig/CONFIG_PROC_PID_CPUSET | 1 + baseconfig/CONFIG_PROC_VMCORE | 1 + baseconfig/CONFIG_PROFILING | 1 + baseconfig/CONFIG_PROVE_LOCKING | 1 + baseconfig/CONFIG_PROVE_RCU_REPEATEDLY | 1 + baseconfig/CONFIG_PSTORE | 1 + baseconfig/CONFIG_PSTORE_CONSOLE | 1 + baseconfig/CONFIG_PSTORE_FTRACE | 1 + baseconfig/CONFIG_PSTORE_PMSG | 1 + baseconfig/CONFIG_PSTORE_RAM | 1 + baseconfig/CONFIG_PTP_1588_CLOCK | 1 + baseconfig/CONFIG_PTP_1588_CLOCK_PCH | 1 + baseconfig/CONFIG_PWM | 1 + baseconfig/CONFIG_PWM_FSL_FTM | 1 + baseconfig/CONFIG_PWM_HIBVT | 1 + baseconfig/CONFIG_PWM_PCA9685 | 1 + baseconfig/CONFIG_PWRSEQ_EMMC | 1 + baseconfig/CONFIG_PWRSEQ_SIMPLE | 1 + baseconfig/CONFIG_QCA7000 | 1 + baseconfig/CONFIG_QCOM_ADSP_PIL | 1 + baseconfig/CONFIG_QCOM_EBI2 | 1 + baseconfig/CONFIG_QCOM_EMAC | 1 + baseconfig/CONFIG_QCOM_HIDMA | 1 + baseconfig/CONFIG_QCOM_HIDMA_MGMT | 1 + baseconfig/CONFIG_QED | 1 + baseconfig/CONFIG_QEDE | 1 + baseconfig/CONFIG_QEDI | 1 + baseconfig/CONFIG_QED_SRIOV | 1 + baseconfig/CONFIG_QFMT_V1 | 1 + baseconfig/CONFIG_QFMT_V2 | 1 + baseconfig/CONFIG_QLA3XXX | 1 + baseconfig/CONFIG_QLCNIC | 1 + baseconfig/CONFIG_QLCNIC_DCB | 1 + baseconfig/CONFIG_QLCNIC_HWMON | 1 + baseconfig/CONFIG_QLCNIC_SRIOV | 1 + baseconfig/CONFIG_QLGE | 1 + baseconfig/CONFIG_QNX4FS_FS | 1 + baseconfig/CONFIG_QNX6FS_FS | 1 + baseconfig/CONFIG_QSEMI_PHY | 1 + baseconfig/CONFIG_QUOTA | 1 + baseconfig/CONFIG_QUOTACTL | 1 + baseconfig/CONFIG_QUOTA_DEBUG | 1 + baseconfig/CONFIG_QUOTA_NETLINK_INTERFACE | 1 + baseconfig/CONFIG_R3964 | 1 + baseconfig/CONFIG_R6040 | 1 + baseconfig/CONFIG_R8169 | 1 + baseconfig/CONFIG_R8188EU | 1 + baseconfig/CONFIG_R8712U | 1 + baseconfig/CONFIG_R8723AU | 1 + baseconfig/CONFIG_RADIO_ADAPTERS | 1 + baseconfig/CONFIG_RADIO_AZTECH | 1 + baseconfig/CONFIG_RADIO_CADET | 1 + baseconfig/CONFIG_RADIO_GEMTEK | 1 + baseconfig/CONFIG_RADIO_MAXIRADIO | 1 + baseconfig/CONFIG_RADIO_MIROPCM20 | 1 + baseconfig/CONFIG_RADIO_RTRACK | 1 + baseconfig/CONFIG_RADIO_RTRACK2 | 1 + baseconfig/CONFIG_RADIO_SAA7706H | 1 + baseconfig/CONFIG_RADIO_SF16FMI | 1 + baseconfig/CONFIG_RADIO_SF16FMR2 | 1 + baseconfig/CONFIG_RADIO_SHARK | 1 + baseconfig/CONFIG_RADIO_SHARK2 | 1 + baseconfig/CONFIG_RADIO_SI470X | 1 + baseconfig/CONFIG_RADIO_SI4713 | 1 + baseconfig/CONFIG_RADIO_TEA5764 | 1 + baseconfig/CONFIG_RADIO_TEF6862 | 1 + baseconfig/CONFIG_RADIO_TERRATEC | 1 + baseconfig/CONFIG_RADIO_TRUST | 1 + baseconfig/CONFIG_RADIO_TYPHOON | 1 + baseconfig/CONFIG_RADIO_WL1273 | 1 + baseconfig/CONFIG_RADIO_WL128X | 1 + baseconfig/CONFIG_RADIO_ZOLTRIX | 1 + baseconfig/CONFIG_RAID_ATTRS | 1 + baseconfig/CONFIG_RANDOM32_SELFTEST | 1 + baseconfig/CONFIG_RAW_DRIVER | 1 + baseconfig/CONFIG_RBTREE_TEST | 1 + baseconfig/CONFIG_RCU_CPU_STALL_TIMEOUT | 1 + baseconfig/CONFIG_RCU_EQS_DEBUG | 1 + baseconfig/CONFIG_RCU_EXPERT | 1 + baseconfig/CONFIG_RCU_FAST_NO_HZ | 1 + baseconfig/CONFIG_RCU_KTHREAD_PRIO | 1 + baseconfig/CONFIG_RCU_NOCB_CPU | 1 + baseconfig/CONFIG_RCU_NOCB_CPU_ALL | 1 + baseconfig/CONFIG_RCU_PERF_TEST | 1 + baseconfig/CONFIG_RCU_TORTURE_TEST | 1 + .../CONFIG_RCU_TORTURE_TEST_SLOW_CLEANUP | 1 + baseconfig/CONFIG_RCU_TORTURE_TEST_SLOW_INIT | 1 + .../CONFIG_RCU_TORTURE_TEST_SLOW_INIT_DELAY | 1 + .../CONFIG_RCU_TORTURE_TEST_SLOW_PREINIT | 1 + baseconfig/CONFIG_RCU_TRACE | 1 + baseconfig/CONFIG_RC_ATI_REMOTE | 1 + baseconfig/CONFIG_RC_CORE | 1 + baseconfig/CONFIG_RC_DECODERS | 1 + baseconfig/CONFIG_RC_DEVICES | 1 + baseconfig/CONFIG_RC_LOOPBACK | 1 + baseconfig/CONFIG_RC_MAP | 1 + baseconfig/CONFIG_RDMA_RXE | 1 + baseconfig/CONFIG_RDS | 1 + baseconfig/CONFIG_RDS_DEBUG | 1 + baseconfig/CONFIG_RDS_RDMA | 1 + baseconfig/CONFIG_RDS_TCP | 1 + baseconfig/CONFIG_RD_BZIP2 | 1 + baseconfig/CONFIG_RD_GZIP | 1 + baseconfig/CONFIG_RD_LZ4 | 1 + baseconfig/CONFIG_RD_LZMA | 1 + baseconfig/CONFIG_RD_LZO | 1 + baseconfig/CONFIG_RD_XZ | 1 + baseconfig/CONFIG_READABLE_ASM | 1 + baseconfig/CONFIG_REALTEK_AUTOPM | 1 + baseconfig/CONFIG_REALTEK_PHY | 1 + baseconfig/CONFIG_REGMAP | 1 + baseconfig/CONFIG_REGMAP_I2C | 1 + baseconfig/CONFIG_REGULATOR | 1 + baseconfig/CONFIG_REGULATOR_DEBUG | 1 + baseconfig/CONFIG_REISERFS_CHECK | 1 + baseconfig/CONFIG_REISERFS_FS | 1 + baseconfig/CONFIG_REISERFS_FS_POSIX_ACL | 1 + baseconfig/CONFIG_REISERFS_FS_SECURITY | 1 + baseconfig/CONFIG_REISERFS_FS_XATTR | 1 + baseconfig/CONFIG_REISERFS_PROC_INFO | 1 + baseconfig/CONFIG_RELAY | 1 + baseconfig/CONFIG_RELOCATABLE_TEST | 1 + baseconfig/CONFIG_REMOTEPROC | 1 + baseconfig/CONFIG_RFD_FTL | 1 + baseconfig/CONFIG_RFKILL | 1 + baseconfig/CONFIG_RFKILL_GPIO | 1 + baseconfig/CONFIG_RFKILL_INPUT | 1 + baseconfig/CONFIG_RING_BUFFER_BENCHMARK | 1 + baseconfig/CONFIG_RING_BUFFER_STARTUP_TEST | 1 + baseconfig/CONFIG_RIO | 1 + baseconfig/CONFIG_RMI4_CORE | 1 + baseconfig/CONFIG_RMI4_F03 | 1 + baseconfig/CONFIG_RMI4_F11 | 1 + baseconfig/CONFIG_RMI4_F12 | 1 + baseconfig/CONFIG_RMI4_F30 | 1 + baseconfig/CONFIG_RMI4_F34 | 1 + baseconfig/CONFIG_RMI4_F54 | 1 + baseconfig/CONFIG_RMI4_F55 | 1 + baseconfig/CONFIG_RMI4_I2C | 1 + baseconfig/CONFIG_RMI4_SMB | 1 + baseconfig/CONFIG_RMI4_SPI | 1 + baseconfig/CONFIG_ROCKER | 1 + baseconfig/CONFIG_ROCKETPORT | 1 + baseconfig/CONFIG_ROMFS_FS | 1 + baseconfig/CONFIG_ROSE | 1 + baseconfig/CONFIG_RPCSEC_GSS_KRB5 | 1 + baseconfig/CONFIG_RPR0521 | 1 + baseconfig/CONFIG_RSI_91X | 1 + baseconfig/CONFIG_RSI_DEBUGFS | 1 + baseconfig/CONFIG_RSI_SDIO | 1 + baseconfig/CONFIG_RSI_USB | 1 + baseconfig/CONFIG_RT2400PCI | 1 + baseconfig/CONFIG_RT2500PCI | 1 + baseconfig/CONFIG_RT2500USB | 1 + baseconfig/CONFIG_RT2800PCI | 1 + baseconfig/CONFIG_RT2800PCI_RT3290 | 1 + baseconfig/CONFIG_RT2800PCI_RT33XX | 1 + baseconfig/CONFIG_RT2800PCI_RT35XX | 1 + baseconfig/CONFIG_RT2800PCI_RT53XX | 1 + baseconfig/CONFIG_RT2800USB | 1 + baseconfig/CONFIG_RT2800USB_RT33XX | 1 + baseconfig/CONFIG_RT2800USB_RT3573 | 1 + baseconfig/CONFIG_RT2800USB_RT35XX | 1 + baseconfig/CONFIG_RT2800USB_RT53XX | 1 + baseconfig/CONFIG_RT2800USB_RT55XX | 1 + baseconfig/CONFIG_RT2800USB_UNKNOWN | 1 + baseconfig/CONFIG_RT2X00 | 1 + baseconfig/CONFIG_RT2X00_DEBUG | 1 + baseconfig/CONFIG_RT2X00_LIB_DEBUGFS | 1 + baseconfig/CONFIG_RT61PCI | 1 + baseconfig/CONFIG_RT73USB | 1 + baseconfig/CONFIG_RTC | 1 + baseconfig/CONFIG_RTC_CLASS | 1 + baseconfig/CONFIG_RTC_DEBUG | 1 + baseconfig/CONFIG_RTC_DRV_AB3100 | 1 + baseconfig/CONFIG_RTC_DRV_ABB5ZES3 | 1 + baseconfig/CONFIG_RTC_DRV_ABX80X | 1 + baseconfig/CONFIG_RTC_DRV_BQ32K | 1 + baseconfig/CONFIG_RTC_DRV_BQ4802 | 1 + baseconfig/CONFIG_RTC_DRV_CMOS | 1 + baseconfig/CONFIG_RTC_DRV_DS1286 | 1 + baseconfig/CONFIG_RTC_DRV_DS1302 | 1 + baseconfig/CONFIG_RTC_DRV_DS1305 | 1 + baseconfig/CONFIG_RTC_DRV_DS1307 | 1 + baseconfig/CONFIG_RTC_DRV_DS1307_CENTURY | 1 + baseconfig/CONFIG_RTC_DRV_DS1307_HWMON | 1 + baseconfig/CONFIG_RTC_DRV_DS1343 | 1 + baseconfig/CONFIG_RTC_DRV_DS1347 | 1 + baseconfig/CONFIG_RTC_DRV_DS1374 | 1 + baseconfig/CONFIG_RTC_DRV_DS1374_WDT | 1 + baseconfig/CONFIG_RTC_DRV_DS1390 | 1 + baseconfig/CONFIG_RTC_DRV_DS1511 | 1 + baseconfig/CONFIG_RTC_DRV_DS1553 | 1 + baseconfig/CONFIG_RTC_DRV_DS1672 | 1 + baseconfig/CONFIG_RTC_DRV_DS1685_FAMILY | 1 + baseconfig/CONFIG_RTC_DRV_DS1742 | 1 + baseconfig/CONFIG_RTC_DRV_DS2404 | 1 + baseconfig/CONFIG_RTC_DRV_DS3232 | 1 + baseconfig/CONFIG_RTC_DRV_EFI | 1 + baseconfig/CONFIG_RTC_DRV_EM3027 | 1 + baseconfig/CONFIG_RTC_DRV_EP93XX | 1 + baseconfig/CONFIG_RTC_DRV_FM3130 | 1 + baseconfig/CONFIG_RTC_DRV_HID_SENSOR_TIME | 1 + baseconfig/CONFIG_RTC_DRV_HYM8563 | 1 + baseconfig/CONFIG_RTC_DRV_ISL12022 | 1 + baseconfig/CONFIG_RTC_DRV_ISL12057 | 1 + baseconfig/CONFIG_RTC_DRV_ISL1208 | 1 + baseconfig/CONFIG_RTC_DRV_M41T80 | 1 + baseconfig/CONFIG_RTC_DRV_M41T80_WDT | 1 + baseconfig/CONFIG_RTC_DRV_M41T93 | 1 + baseconfig/CONFIG_RTC_DRV_M41T94 | 1 + baseconfig/CONFIG_RTC_DRV_M48T35 | 1 + baseconfig/CONFIG_RTC_DRV_M48T59 | 1 + baseconfig/CONFIG_RTC_DRV_M48T86 | 1 + baseconfig/CONFIG_RTC_DRV_MAX6900 | 1 + baseconfig/CONFIG_RTC_DRV_MAX6902 | 1 + baseconfig/CONFIG_RTC_DRV_MAX6916 | 1 + baseconfig/CONFIG_RTC_DRV_MCP795 | 1 + baseconfig/CONFIG_RTC_DRV_MOXART | 1 + baseconfig/CONFIG_RTC_DRV_MSM6242 | 1 + baseconfig/CONFIG_RTC_DRV_PCF2123 | 1 + baseconfig/CONFIG_RTC_DRV_PCF2127 | 1 + baseconfig/CONFIG_RTC_DRV_PCF50633 | 1 + baseconfig/CONFIG_RTC_DRV_PCF85063 | 1 + baseconfig/CONFIG_RTC_DRV_PCF8523 | 1 + baseconfig/CONFIG_RTC_DRV_PCF8563 | 1 + baseconfig/CONFIG_RTC_DRV_PCF8583 | 1 + baseconfig/CONFIG_RTC_DRV_PM8XXX | 1 + baseconfig/CONFIG_RTC_DRV_R7301 | 1 + baseconfig/CONFIG_RTC_DRV_R9701 | 1 + baseconfig/CONFIG_RTC_DRV_RP5C01 | 1 + baseconfig/CONFIG_RTC_DRV_RS5C348 | 1 + baseconfig/CONFIG_RTC_DRV_RS5C372 | 1 + baseconfig/CONFIG_RTC_DRV_RV3029C2 | 1 + baseconfig/CONFIG_RTC_DRV_RV3029_HWMON | 1 + baseconfig/CONFIG_RTC_DRV_RV8803 | 1 + baseconfig/CONFIG_RTC_DRV_RX4581 | 1 + baseconfig/CONFIG_RTC_DRV_RX6110 | 1 + baseconfig/CONFIG_RTC_DRV_RX8010 | 1 + baseconfig/CONFIG_RTC_DRV_RX8025 | 1 + baseconfig/CONFIG_RTC_DRV_RX8581 | 1 + baseconfig/CONFIG_RTC_DRV_S35390A | 1 + baseconfig/CONFIG_RTC_DRV_SA1100 | 1 + baseconfig/CONFIG_RTC_DRV_SNVS | 1 + baseconfig/CONFIG_RTC_DRV_STK17TA8 | 1 + baseconfig/CONFIG_RTC_DRV_TEST | 1 + baseconfig/CONFIG_RTC_DRV_V3020 | 1 + baseconfig/CONFIG_RTC_DRV_WM831X | 1 + baseconfig/CONFIG_RTC_DRV_WM8350 | 1 + baseconfig/CONFIG_RTC_DRV_X1205 | 1 + baseconfig/CONFIG_RTC_DRV_ZYNQMP | 1 + baseconfig/CONFIG_RTC_DS1685_PROC_REGS | 1 + baseconfig/CONFIG_RTC_DS1685_SYSFS_REGS | 1 + baseconfig/CONFIG_RTC_HCTOSYS | 1 + baseconfig/CONFIG_RTC_HCTOSYS_DEVICE | 1 + baseconfig/CONFIG_RTC_INTF_DEV | 1 + baseconfig/CONFIG_RTC_INTF_DEV_UIE_EMUL | 1 + baseconfig/CONFIG_RTC_INTF_PROC | 1 + baseconfig/CONFIG_RTC_INTF_SYSFS | 1 + baseconfig/CONFIG_RTC_SYSTOHC | 1 + baseconfig/CONFIG_RTL8180 | 1 + baseconfig/CONFIG_RTL8187 | 1 + baseconfig/CONFIG_RTL8188EE | 1 + baseconfig/CONFIG_RTL8192CE | 1 + baseconfig/CONFIG_RTL8192CU | 1 + baseconfig/CONFIG_RTL8192DE | 1 + baseconfig/CONFIG_RTL8192E | 1 + baseconfig/CONFIG_RTL8192EE | 1 + baseconfig/CONFIG_RTL8192SE | 1 + baseconfig/CONFIG_RTL8192U | 1 + baseconfig/CONFIG_RTL8723AE | 1 + baseconfig/CONFIG_RTL8723BE | 1 + baseconfig/CONFIG_RTL8821AE | 1 + baseconfig/CONFIG_RTL8XXXU | 1 + baseconfig/CONFIG_RTL8XXXU_UNTESTED | 1 + baseconfig/CONFIG_RTLLIB | 1 + baseconfig/CONFIG_RTLLIB_CRYPTO_CCMP | 1 + baseconfig/CONFIG_RTLLIB_CRYPTO_TKIP | 1 + baseconfig/CONFIG_RTLLIB_CRYPTO_WEP | 1 + baseconfig/CONFIG_RTLWIFI | 1 + baseconfig/CONFIG_RTLWIFI_DEBUG | 1 + baseconfig/CONFIG_RTL_CARDS | 1 + baseconfig/CONFIG_RTS5208 | 1 + baseconfig/CONFIG_RT_GROUP_SCHED | 1 + baseconfig/CONFIG_S2IO | 1 + baseconfig/CONFIG_SAMPLES | 1 + baseconfig/CONFIG_SAMSUNG_USBPHY | 1 + baseconfig/CONFIG_SATA_ACARD_AHCI | 1 + baseconfig/CONFIG_SATA_AHCI | 1 + baseconfig/CONFIG_SATA_AHCI_PLATFORM | 1 + baseconfig/CONFIG_SATA_DWC | 1 + baseconfig/CONFIG_SATA_HIGHBANK | 1 + baseconfig/CONFIG_SATA_INIC162X | 1 + baseconfig/CONFIG_SATA_MV | 1 + baseconfig/CONFIG_SATA_NV | 1 + baseconfig/CONFIG_SATA_PMP | 1 + baseconfig/CONFIG_SATA_PROMISE | 1 + baseconfig/CONFIG_SATA_QSTOR | 1 + baseconfig/CONFIG_SATA_SIL | 1 + baseconfig/CONFIG_SATA_SIL24 | 1 + baseconfig/CONFIG_SATA_SIS | 1 + baseconfig/CONFIG_SATA_SVW | 1 + baseconfig/CONFIG_SATA_SX4 | 1 + baseconfig/CONFIG_SATA_ULI | 1 + baseconfig/CONFIG_SATA_VIA | 1 + baseconfig/CONFIG_SATA_VITESSE | 1 + baseconfig/CONFIG_SATA_ZPODD | 1 + baseconfig/CONFIG_SBC7240_WDT | 1 + baseconfig/CONFIG_SBC8360_WDT | 1 + baseconfig/CONFIG_SBC_EPX_C3_WATCHDOG | 1 + baseconfig/CONFIG_SBP_TARGET | 1 + baseconfig/CONFIG_SC1200_WDT | 1 + baseconfig/CONFIG_SC520_WDT | 1 + baseconfig/CONFIG_SC92031 | 1 + baseconfig/CONFIG_SCA3000 | 1 + baseconfig/CONFIG_SCHEDSTATS | 1 + baseconfig/CONFIG_SCHED_AUTOGROUP | 1 + baseconfig/CONFIG_SCHED_DEBUG | 1 + baseconfig/CONFIG_SCHED_MC_PRIO | 1 + baseconfig/CONFIG_SCHED_OMIT_FRAME_POINTER | 1 + baseconfig/CONFIG_SCHED_STACK_END_CHECK | 1 + baseconfig/CONFIG_SCHED_TRACER | 1 + baseconfig/CONFIG_SCR24X | 1 + baseconfig/CONFIG_SCSI | 1 + baseconfig/CONFIG_SCSI_3W_9XXX | 1 + baseconfig/CONFIG_SCSI_3W_SAS | 1 + baseconfig/CONFIG_SCSI_AACRAID | 1 + baseconfig/CONFIG_SCSI_ACARD | 1 + baseconfig/CONFIG_SCSI_ADVANSYS | 1 + baseconfig/CONFIG_SCSI_AIC79XX | 1 + baseconfig/CONFIG_SCSI_AIC7XXX | 1 + baseconfig/CONFIG_SCSI_AIC94XX | 1 + baseconfig/CONFIG_SCSI_AM53C974 | 1 + baseconfig/CONFIG_SCSI_ARCMSR | 1 + baseconfig/CONFIG_SCSI_BFA_FC | 1 + baseconfig/CONFIG_SCSI_BNX2X_FCOE | 1 + baseconfig/CONFIG_SCSI_BNX2_ISCSI | 1 + baseconfig/CONFIG_SCSI_BUSLOGIC | 1 + baseconfig/CONFIG_SCSI_CHELSIO_FCOE | 1 + baseconfig/CONFIG_SCSI_CONSTANTS | 1 + baseconfig/CONFIG_SCSI_CXGB3_ISCSI | 1 + baseconfig/CONFIG_SCSI_CXGB4_ISCSI | 1 + baseconfig/CONFIG_SCSI_DC395x | 1 + baseconfig/CONFIG_SCSI_DEBUG | 1 + baseconfig/CONFIG_SCSI_DH | 1 + baseconfig/CONFIG_SCSI_DH_ALUA | 1 + baseconfig/CONFIG_SCSI_DH_EMC | 1 + baseconfig/CONFIG_SCSI_DH_HP_SW | 1 + baseconfig/CONFIG_SCSI_DH_RDAC | 1 + baseconfig/CONFIG_SCSI_DMX3191D | 1 + baseconfig/CONFIG_SCSI_DPT_I2O | 1 + baseconfig/CONFIG_SCSI_EATA | 1 + baseconfig/CONFIG_SCSI_EATA_PIO | 1 + baseconfig/CONFIG_SCSI_ENCLOSURE | 1 + baseconfig/CONFIG_SCSI_ESAS2R | 1 + baseconfig/CONFIG_SCSI_FC_ATTRS | 1 + baseconfig/CONFIG_SCSI_FLASHPOINT | 1 + baseconfig/CONFIG_SCSI_FUTURE_DOMAIN | 1 + baseconfig/CONFIG_SCSI_GDTH | 1 + baseconfig/CONFIG_SCSI_HISI_SAS | 1 + baseconfig/CONFIG_SCSI_HPSA | 1 + baseconfig/CONFIG_SCSI_HPTIOP | 1 + baseconfig/CONFIG_SCSI_IMM | 1 + baseconfig/CONFIG_SCSI_INIA100 | 1 + baseconfig/CONFIG_SCSI_INITIO | 1 + baseconfig/CONFIG_SCSI_IPR | 1 + baseconfig/CONFIG_SCSI_IPR_DUMP | 1 + baseconfig/CONFIG_SCSI_IPR_TRACE | 1 + baseconfig/CONFIG_SCSI_IPS | 1 + baseconfig/CONFIG_SCSI_ISCI | 1 + baseconfig/CONFIG_SCSI_ISCSI_ATTRS | 1 + baseconfig/CONFIG_SCSI_IZIP_EPP16 | 1 + baseconfig/CONFIG_SCSI_IZIP_SLOW_CTR | 1 + baseconfig/CONFIG_SCSI_LOGGING | 1 + baseconfig/CONFIG_SCSI_LOWLEVEL | 1 + baseconfig/CONFIG_SCSI_LOWLEVEL_PCMCIA | 1 + baseconfig/CONFIG_SCSI_LPFC | 1 + baseconfig/CONFIG_SCSI_LPFC_DEBUG_FS | 1 + baseconfig/CONFIG_SCSI_MPT2SAS | 1 + baseconfig/CONFIG_SCSI_MPT2SAS_MAX_SGE | 1 + baseconfig/CONFIG_SCSI_MPT3SAS | 1 + baseconfig/CONFIG_SCSI_MPT3SAS_MAX_SGE | 1 + baseconfig/CONFIG_SCSI_MQ_DEFAULT | 1 + baseconfig/CONFIG_SCSI_MVSAS | 1 + baseconfig/CONFIG_SCSI_MVSAS_DEBUG | 1 + baseconfig/CONFIG_SCSI_MVSAS_TASKLET | 1 + baseconfig/CONFIG_SCSI_MVUMI | 1 + baseconfig/CONFIG_SCSI_NSP32 | 1 + baseconfig/CONFIG_SCSI_OSD_DEBUG | 1 + baseconfig/CONFIG_SCSI_OSD_DPRINT_SENSE | 1 + baseconfig/CONFIG_SCSI_OSD_INITIATOR | 1 + baseconfig/CONFIG_SCSI_OSD_ULD | 1 + baseconfig/CONFIG_SCSI_PM8001 | 1 + baseconfig/CONFIG_SCSI_PMCRAID | 1 + baseconfig/CONFIG_SCSI_PPA | 1 + baseconfig/CONFIG_SCSI_PROC_FS | 1 + baseconfig/CONFIG_SCSI_QLA_FC | 1 + baseconfig/CONFIG_SCSI_QLA_ISCSI | 1 + baseconfig/CONFIG_SCSI_QLOGIC_1280 | 1 + baseconfig/CONFIG_SCSI_SAS_ATA | 1 + baseconfig/CONFIG_SCSI_SAS_ATTRS | 1 + baseconfig/CONFIG_SCSI_SAS_HOST_SMP | 1 + baseconfig/CONFIG_SCSI_SAS_LIBSAS | 1 + baseconfig/CONFIG_SCSI_SCAN_ASYNC | 1 + baseconfig/CONFIG_SCSI_SMARTPQI | 1 + baseconfig/CONFIG_SCSI_SNIC | 1 + baseconfig/CONFIG_SCSI_SNIC_DEBUG_FS | 1 + baseconfig/CONFIG_SCSI_SPI_ATTRS | 1 + baseconfig/CONFIG_SCSI_SRP | 1 + baseconfig/CONFIG_SCSI_SRP_ATTRS | 1 + baseconfig/CONFIG_SCSI_STEX | 1 + baseconfig/CONFIG_SCSI_SYM53C8XX_2 | 1 + baseconfig/CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS | 1 + .../CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE | 1 + baseconfig/CONFIG_SCSI_SYM53C8XX_MAX_TAGS | 1 + baseconfig/CONFIG_SCSI_SYM53C8XX_MMIO | 1 + baseconfig/CONFIG_SCSI_UFSHCD | 1 + baseconfig/CONFIG_SCSI_UFSHCD_PCI | 1 + baseconfig/CONFIG_SCSI_UFSHCD_PLATFORM | 1 + baseconfig/CONFIG_SCSI_UFS_DWC_TC_PCI | 1 + baseconfig/CONFIG_SCSI_VIRTIO | 1 + baseconfig/CONFIG_SCSI_WD719X | 1 + baseconfig/CONFIG_SCTP_COOKIE_HMAC_MD5 | 1 + baseconfig/CONFIG_SCTP_COOKIE_HMAC_SHA1 | 1 + baseconfig/CONFIG_SCTP_DBG_OBJCNT | 1 + .../CONFIG_SCTP_DEFAULT_COOKIE_HMAC_MD5 | 1 + .../CONFIG_SCTP_DEFAULT_COOKIE_HMAC_NONE | 1 + .../CONFIG_SCTP_DEFAULT_COOKIE_HMAC_SHA1 | 1 + baseconfig/CONFIG_SDIO_UART | 1 + baseconfig/CONFIG_SECCOMP | 1 + baseconfig/CONFIG_SECONDARY_TRUSTED_KEYRING | 1 + baseconfig/CONFIG_SECTION_MISMATCH_WARN_ONLY | 1 + baseconfig/CONFIG_SECURITY | 1 + baseconfig/CONFIG_SECURITYFS | 1 + baseconfig/CONFIG_SECURITY_APPARMOR | 1 + baseconfig/CONFIG_SECURITY_DMESG_RESTRICT | 1 + baseconfig/CONFIG_SECURITY_LOADPIN | 1 + baseconfig/CONFIG_SECURITY_NETWORK | 1 + baseconfig/CONFIG_SECURITY_NETWORK_XFRM | 1 + baseconfig/CONFIG_SECURITY_PATH | 1 + baseconfig/CONFIG_SECURITY_SELINUX | 1 + baseconfig/CONFIG_SECURITY_SELINUX_AVC_STATS | 1 + baseconfig/CONFIG_SECURITY_SELINUX_BOOTPARAM | 1 + .../CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE | 1 + ...CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE | 1 + baseconfig/CONFIG_SECURITY_SELINUX_DEVELOP | 1 + baseconfig/CONFIG_SECURITY_SELINUX_DISABLE | 1 + ...NFIG_SECURITY_SELINUX_POLICYDB_VERSION_MAX | 1 + baseconfig/CONFIG_SECURITY_SMACK | 1 + baseconfig/CONFIG_SECURITY_TOMOYO | 1 + baseconfig/CONFIG_SECURITY_YAMA | 1 + baseconfig/CONFIG_SENSORS_AD7314 | 1 + baseconfig/CONFIG_SENSORS_AD7414 | 1 + baseconfig/CONFIG_SENSORS_AD7418 | 1 + baseconfig/CONFIG_SENSORS_ADC128D818 | 1 + baseconfig/CONFIG_SENSORS_ADCXX | 1 + baseconfig/CONFIG_SENSORS_ADM1021 | 1 + baseconfig/CONFIG_SENSORS_ADM1025 | 1 + baseconfig/CONFIG_SENSORS_ADM1026 | 1 + baseconfig/CONFIG_SENSORS_ADM1029 | 1 + baseconfig/CONFIG_SENSORS_ADM1031 | 1 + baseconfig/CONFIG_SENSORS_ADM1275 | 1 + baseconfig/CONFIG_SENSORS_ADM9240 | 1 + baseconfig/CONFIG_SENSORS_ADS1015 | 1 + baseconfig/CONFIG_SENSORS_ADS7828 | 1 + baseconfig/CONFIG_SENSORS_ADS7871 | 1 + baseconfig/CONFIG_SENSORS_ADT7310 | 1 + baseconfig/CONFIG_SENSORS_ADT7410 | 1 + baseconfig/CONFIG_SENSORS_ADT7411 | 1 + baseconfig/CONFIG_SENSORS_ADT7462 | 1 + baseconfig/CONFIG_SENSORS_ADT7470 | 1 + baseconfig/CONFIG_SENSORS_ADT7475 | 1 + baseconfig/CONFIG_SENSORS_AMC6821 | 1 + baseconfig/CONFIG_SENSORS_APDS990X | 1 + baseconfig/CONFIG_SENSORS_ASC7621 | 1 + baseconfig/CONFIG_SENSORS_ATXP1 | 1 + baseconfig/CONFIG_SENSORS_BH1770 | 1 + baseconfig/CONFIG_SENSORS_DME1737 | 1 + baseconfig/CONFIG_SENSORS_DS1621 | 1 + baseconfig/CONFIG_SENSORS_DS620 | 1 + baseconfig/CONFIG_SENSORS_EMC1403 | 1 + baseconfig/CONFIG_SENSORS_EMC2103 | 1 + baseconfig/CONFIG_SENSORS_EMC6W201 | 1 + baseconfig/CONFIG_SENSORS_F71805F | 1 + baseconfig/CONFIG_SENSORS_F71882FG | 1 + baseconfig/CONFIG_SENSORS_F75375S | 1 + baseconfig/CONFIG_SENSORS_FTSTEUTATES | 1 + baseconfig/CONFIG_SENSORS_G760A | 1 + baseconfig/CONFIG_SENSORS_G762 | 1 + baseconfig/CONFIG_SENSORS_GL518SM | 1 + baseconfig/CONFIG_SENSORS_GL520SM | 1 + baseconfig/CONFIG_SENSORS_GPIO_FAN | 1 + baseconfig/CONFIG_SENSORS_HDAPS | 1 + baseconfig/CONFIG_SENSORS_HIH6130 | 1 + baseconfig/CONFIG_SENSORS_HMC5843 | 1 + baseconfig/CONFIG_SENSORS_HMC5843_I2C | 1 + baseconfig/CONFIG_SENSORS_HMC5843_SPI | 1 + baseconfig/CONFIG_SENSORS_I5K_AMB | 1 + baseconfig/CONFIG_SENSORS_IBMAEM | 1 + baseconfig/CONFIG_SENSORS_IBMPEX | 1 + baseconfig/CONFIG_SENSORS_IIO_HWMON | 1 + baseconfig/CONFIG_SENSORS_INA209 | 1 + baseconfig/CONFIG_SENSORS_INA2XX | 1 + baseconfig/CONFIG_SENSORS_INA3221 | 1 + baseconfig/CONFIG_SENSORS_ISL29018 | 1 + baseconfig/CONFIG_SENSORS_ISL29028 | 1 + baseconfig/CONFIG_SENSORS_IT87 | 1 + baseconfig/CONFIG_SENSORS_JC42 | 1 + baseconfig/CONFIG_SENSORS_LINEAGE | 1 + baseconfig/CONFIG_SENSORS_LIS3LV02D | 1 + baseconfig/CONFIG_SENSORS_LIS3_I2C | 1 + baseconfig/CONFIG_SENSORS_LIS3_SPI | 1 + baseconfig/CONFIG_SENSORS_LM25066 | 1 + baseconfig/CONFIG_SENSORS_LM63 | 1 + baseconfig/CONFIG_SENSORS_LM70 | 1 + baseconfig/CONFIG_SENSORS_LM73 | 1 + baseconfig/CONFIG_SENSORS_LM75 | 1 + baseconfig/CONFIG_SENSORS_LM77 | 1 + baseconfig/CONFIG_SENSORS_LM78 | 1 + baseconfig/CONFIG_SENSORS_LM80 | 1 + baseconfig/CONFIG_SENSORS_LM83 | 1 + baseconfig/CONFIG_SENSORS_LM85 | 1 + baseconfig/CONFIG_SENSORS_LM87 | 1 + baseconfig/CONFIG_SENSORS_LM90 | 1 + baseconfig/CONFIG_SENSORS_LM92 | 1 + baseconfig/CONFIG_SENSORS_LM93 | 1 + baseconfig/CONFIG_SENSORS_LM95234 | 1 + baseconfig/CONFIG_SENSORS_LM95241 | 1 + baseconfig/CONFIG_SENSORS_LM95245 | 1 + baseconfig/CONFIG_SENSORS_LTC2945 | 1 + baseconfig/CONFIG_SENSORS_LTC2978 | 1 + baseconfig/CONFIG_SENSORS_LTC2990 | 1 + baseconfig/CONFIG_SENSORS_LTC3815 | 1 + baseconfig/CONFIG_SENSORS_LTC4151 | 1 + baseconfig/CONFIG_SENSORS_LTC4215 | 1 + baseconfig/CONFIG_SENSORS_LTC4222 | 1 + baseconfig/CONFIG_SENSORS_LTC4245 | 1 + baseconfig/CONFIG_SENSORS_LTC4260 | 1 + baseconfig/CONFIG_SENSORS_LTC4261 | 1 + baseconfig/CONFIG_SENSORS_MAX1111 | 1 + baseconfig/CONFIG_SENSORS_MAX16064 | 1 + baseconfig/CONFIG_SENSORS_MAX16065 | 1 + baseconfig/CONFIG_SENSORS_MAX1619 | 1 + baseconfig/CONFIG_SENSORS_MAX1668 | 1 + baseconfig/CONFIG_SENSORS_MAX197 | 1 + baseconfig/CONFIG_SENSORS_MAX20751 | 1 + baseconfig/CONFIG_SENSORS_MAX31722 | 1 + baseconfig/CONFIG_SENSORS_MAX31790 | 1 + baseconfig/CONFIG_SENSORS_MAX34440 | 1 + baseconfig/CONFIG_SENSORS_MAX6639 | 1 + baseconfig/CONFIG_SENSORS_MAX6642 | 1 + baseconfig/CONFIG_SENSORS_MAX6650 | 1 + baseconfig/CONFIG_SENSORS_MAX6697 | 1 + baseconfig/CONFIG_SENSORS_MAX8688 | 1 + baseconfig/CONFIG_SENSORS_MCP3021 | 1 + baseconfig/CONFIG_SENSORS_NCT6683 | 1 + baseconfig/CONFIG_SENSORS_NCT6775 | 1 + baseconfig/CONFIG_SENSORS_NCT7802 | 1 + baseconfig/CONFIG_SENSORS_NCT7904 | 1 + baseconfig/CONFIG_SENSORS_NTC_THERMISTOR | 1 + baseconfig/CONFIG_SENSORS_PC87360 | 1 + baseconfig/CONFIG_SENSORS_PC87427 | 1 + baseconfig/CONFIG_SENSORS_PCF8591 | 1 + baseconfig/CONFIG_SENSORS_PMBUS | 1 + baseconfig/CONFIG_SENSORS_POWR1220 | 1 + baseconfig/CONFIG_SENSORS_PWM_FAN | 1 + baseconfig/CONFIG_SENSORS_SCH5627 | 1 + baseconfig/CONFIG_SENSORS_SCH5636 | 1 + baseconfig/CONFIG_SENSORS_SHT15 | 1 + baseconfig/CONFIG_SENSORS_SHT21 | 1 + baseconfig/CONFIG_SENSORS_SHT3x | 1 + baseconfig/CONFIG_SENSORS_SHTC1 | 1 + baseconfig/CONFIG_SENSORS_SIS5595 | 1 + baseconfig/CONFIG_SENSORS_SMM665 | 1 + baseconfig/CONFIG_SENSORS_SMSC47B397 | 1 + baseconfig/CONFIG_SENSORS_SMSC47M1 | 1 + baseconfig/CONFIG_SENSORS_SMSC47M192 | 1 + baseconfig/CONFIG_SENSORS_TC654 | 1 + baseconfig/CONFIG_SENSORS_TC74 | 1 + baseconfig/CONFIG_SENSORS_THMC50 | 1 + baseconfig/CONFIG_SENSORS_TMP102 | 1 + baseconfig/CONFIG_SENSORS_TMP103 | 1 + baseconfig/CONFIG_SENSORS_TMP108 | 1 + baseconfig/CONFIG_SENSORS_TMP401 | 1 + baseconfig/CONFIG_SENSORS_TMP421 | 1 + baseconfig/CONFIG_SENSORS_TPS40422 | 1 + baseconfig/CONFIG_SENSORS_TSL2550 | 1 + baseconfig/CONFIG_SENSORS_TSL2563 | 1 + baseconfig/CONFIG_SENSORS_UCD9000 | 1 + baseconfig/CONFIG_SENSORS_UCD9200 | 1 + baseconfig/CONFIG_SENSORS_VIA686A | 1 + baseconfig/CONFIG_SENSORS_VT1211 | 1 + baseconfig/CONFIG_SENSORS_VT8231 | 1 + baseconfig/CONFIG_SENSORS_W83627EHF | 1 + baseconfig/CONFIG_SENSORS_W83627HF | 1 + baseconfig/CONFIG_SENSORS_W83781D | 1 + baseconfig/CONFIG_SENSORS_W83791D | 1 + baseconfig/CONFIG_SENSORS_W83792D | 1 + baseconfig/CONFIG_SENSORS_W83793 | 1 + baseconfig/CONFIG_SENSORS_W83795 | 1 + baseconfig/CONFIG_SENSORS_W83795_FANCTRL | 1 + baseconfig/CONFIG_SENSORS_W83L785TS | 1 + baseconfig/CONFIG_SENSORS_W83L786NG | 1 + baseconfig/CONFIG_SENSORS_WM831X | 1 + baseconfig/CONFIG_SENSORS_WM8350 | 1 + baseconfig/CONFIG_SENSORS_XGENE | 1 + baseconfig/CONFIG_SENSORS_ZL6100 | 1 + baseconfig/CONFIG_SERIAL_8250 | 1 + baseconfig/CONFIG_SERIAL_8250_CONSOLE | 1 + baseconfig/CONFIG_SERIAL_8250_CS | 1 + .../CONFIG_SERIAL_8250_DEPRECATED_OPTIONS | 1 + baseconfig/CONFIG_SERIAL_8250_DETECT_IRQ | 1 + baseconfig/CONFIG_SERIAL_8250_DW | 1 + baseconfig/CONFIG_SERIAL_8250_EXTENDED | 1 + baseconfig/CONFIG_SERIAL_8250_FINTEK | 1 + baseconfig/CONFIG_SERIAL_8250_INGENIC | 1 + baseconfig/CONFIG_SERIAL_8250_MANY_PORTS | 1 + baseconfig/CONFIG_SERIAL_8250_MID | 1 + baseconfig/CONFIG_SERIAL_8250_MOXA | 1 + baseconfig/CONFIG_SERIAL_8250_NR_UARTS | 1 + baseconfig/CONFIG_SERIAL_8250_RSA | 1 + baseconfig/CONFIG_SERIAL_8250_RT288X | 1 + baseconfig/CONFIG_SERIAL_8250_RUNTIME_UARTS | 1 + baseconfig/CONFIG_SERIAL_8250_SHARE_IRQ | 1 + baseconfig/CONFIG_SERIAL_ALTERA_JTAGUART | 1 + baseconfig/CONFIG_SERIAL_ALTERA_UART | 1 + baseconfig/CONFIG_SERIAL_ARC | 1 + baseconfig/CONFIG_SERIAL_ARC_NR_PORTS | 1 + baseconfig/CONFIG_SERIAL_CONEXANT_DIGICOLOR | 1 + baseconfig/CONFIG_SERIAL_CORE | 1 + baseconfig/CONFIG_SERIAL_CORE_CONSOLE | 1 + baseconfig/CONFIG_SERIAL_FSL_LPUART | 1 + baseconfig/CONFIG_SERIAL_IFX6X60 | 1 + baseconfig/CONFIG_SERIAL_JSM | 1 + baseconfig/CONFIG_SERIAL_KGDB_NMI | 1 + baseconfig/CONFIG_SERIAL_MAX3100 | 1 + baseconfig/CONFIG_SERIAL_MAX310X | 1 + baseconfig/CONFIG_SERIAL_NONSTANDARD | 1 + baseconfig/CONFIG_SERIAL_PCH_UART | 1 + baseconfig/CONFIG_SERIAL_RP2 | 1 + baseconfig/CONFIG_SERIAL_SC16IS7XX | 1 + baseconfig/CONFIG_SERIAL_SCCNXP | 1 + baseconfig/CONFIG_SERIAL_ST_ASC | 1 + baseconfig/CONFIG_SERIAL_TIMBERDALE | 1 + baseconfig/CONFIG_SERIAL_UARTLITE | 1 + baseconfig/CONFIG_SERIAL_XILINX_PS_UART | 1 + baseconfig/CONFIG_SERIO | 1 + baseconfig/CONFIG_SERIO_ALTERA_PS2 | 1 + baseconfig/CONFIG_SERIO_APBPS2 | 1 + baseconfig/CONFIG_SERIO_ARC_PS2 | 1 + baseconfig/CONFIG_SERIO_CT82C710 | 1 + baseconfig/CONFIG_SERIO_I8042 | 1 + baseconfig/CONFIG_SERIO_LIBPS2 | 1 + baseconfig/CONFIG_SERIO_OLPC_APSP | 1 + baseconfig/CONFIG_SERIO_PARKBD | 1 + baseconfig/CONFIG_SERIO_PCIPS2 | 1 + baseconfig/CONFIG_SERIO_PS2MULT | 1 + baseconfig/CONFIG_SERIO_RAW | 1 + baseconfig/CONFIG_SERIO_SERPORT | 1 + baseconfig/CONFIG_SFC | 1 + baseconfig/CONFIG_SFC_FALCON | 1 + baseconfig/CONFIG_SFC_FALCON_MTD | 1 + baseconfig/CONFIG_SGI_IOC4 | 1 + baseconfig/CONFIG_SGI_PARTITION | 1 + baseconfig/CONFIG_SH_ETH | 1 + baseconfig/CONFIG_SI1145 | 1 + baseconfig/CONFIG_SI7005 | 1 + baseconfig/CONFIG_SI7020 | 1 + baseconfig/CONFIG_SIGMA | 1 + baseconfig/CONFIG_SIGMATEL_FIR | 1 + baseconfig/CONFIG_SIGNED_PE_FILE_VERIFICATION | 1 + baseconfig/CONFIG_SIS190 | 1 + baseconfig/CONFIG_SIS900 | 1 + baseconfig/CONFIG_SKFP | 1 + baseconfig/CONFIG_SKGE | 1 + baseconfig/CONFIG_SKGE_DEBUG | 1 + baseconfig/CONFIG_SKGE_GENESIS | 1 + baseconfig/CONFIG_SKY2 | 1 + baseconfig/CONFIG_SKY2_DEBUG | 1 + baseconfig/CONFIG_SLAB_FREELIST_RANDOM | 1 + baseconfig/CONFIG_SLICOSS | 1 + baseconfig/CONFIG_SLIP | 1 + baseconfig/CONFIG_SLIP_COMPRESSED | 1 + baseconfig/CONFIG_SLIP_MODE_SLIP6 | 1 + baseconfig/CONFIG_SLIP_SMART | 1 + baseconfig/CONFIG_SLUB | 1 + baseconfig/CONFIG_SLUB_CPU_PARTIAL | 1 + baseconfig/CONFIG_SLUB_DEBUG_ON | 1 + baseconfig/CONFIG_SLUB_STATS | 1 + baseconfig/CONFIG_SMARTJOYPLUS_FF | 1 + baseconfig/CONFIG_SMC_IRCC_FIR | 1 + baseconfig/CONFIG_SMP | 1 + baseconfig/CONFIG_SMSC911X | 1 + baseconfig/CONFIG_SMSC9420 | 1 + baseconfig/CONFIG_SMSC_PHY | 1 + baseconfig/CONFIG_SMSC_SCH311X_WDT | 1 + baseconfig/CONFIG_SMS_SDIO_DRV | 1 + baseconfig/CONFIG_SMS_SIANO_DEBUGFS | 1 + baseconfig/CONFIG_SMS_SIANO_MDTV | 1 + baseconfig/CONFIG_SMS_SIANO_RC | 1 + baseconfig/CONFIG_SMS_USB_DRV | 1 + baseconfig/CONFIG_SM_FTL | 1 + baseconfig/CONFIG_SND | 1 + baseconfig/CONFIG_SND_AC97_POWER_SAVE | 1 + baseconfig/CONFIG_SND_AC97_POWER_SAVE_DEFAULT | 1 + baseconfig/CONFIG_SND_AD1889 | 1 + baseconfig/CONFIG_SND_ALI5451 | 1 + baseconfig/CONFIG_SND_ALOOP | 1 + baseconfig/CONFIG_SND_ALS300 | 1 + baseconfig/CONFIG_SND_ALS4000 | 1 + baseconfig/CONFIG_SND_ASIHPI | 1 + baseconfig/CONFIG_SND_ATIIXP | 1 + baseconfig/CONFIG_SND_ATIIXP_MODEM | 1 + baseconfig/CONFIG_SND_ATMEL_SOC | 1 + baseconfig/CONFIG_SND_AU8810 | 1 + baseconfig/CONFIG_SND_AU8820 | 1 + baseconfig/CONFIG_SND_AU8830 | 1 + baseconfig/CONFIG_SND_AW2 | 1 + baseconfig/CONFIG_SND_AZT3328 | 1 + baseconfig/CONFIG_SND_BCD2000 | 1 + baseconfig/CONFIG_SND_BEBOB | 1 + baseconfig/CONFIG_SND_BT87X | 1 + baseconfig/CONFIG_SND_BT87X_OVERCLOCK | 1 + baseconfig/CONFIG_SND_CA0106 | 1 + baseconfig/CONFIG_SND_CMIPCI | 1 + baseconfig/CONFIG_SND_COMPRESS_OFFLOAD | 1 + baseconfig/CONFIG_SND_CS4281 | 1 + baseconfig/CONFIG_SND_CS46XX | 1 + baseconfig/CONFIG_SND_CS46XX_NEW_DSP | 1 + baseconfig/CONFIG_SND_CS5530 | 1 + baseconfig/CONFIG_SND_CS5535AUDIO | 1 + baseconfig/CONFIG_SND_CTXFI | 1 + baseconfig/CONFIG_SND_DARLA20 | 1 + baseconfig/CONFIG_SND_DARLA24 | 1 + baseconfig/CONFIG_SND_DEBUG | 1 + baseconfig/CONFIG_SND_DEBUG_VERBOSE | 1 + baseconfig/CONFIG_SND_DESIGNWARE_I2S | 1 + baseconfig/CONFIG_SND_DESIGNWARE_PCM | 1 + baseconfig/CONFIG_SND_DICE | 1 + baseconfig/CONFIG_SND_DMAENGINE_PCM | 1 + baseconfig/CONFIG_SND_DRIVERS | 1 + baseconfig/CONFIG_SND_DUMMY | 1 + baseconfig/CONFIG_SND_DYNAMIC_MINORS | 1 + baseconfig/CONFIG_SND_ECHO3G | 1 + baseconfig/CONFIG_SND_EDMA_SOC | 1 + baseconfig/CONFIG_SND_EMU10K1 | 1 + baseconfig/CONFIG_SND_EMU10K1X | 1 + baseconfig/CONFIG_SND_ENS1370 | 1 + baseconfig/CONFIG_SND_ENS1371 | 1 + baseconfig/CONFIG_SND_ES1938 | 1 + baseconfig/CONFIG_SND_ES1968 | 1 + baseconfig/CONFIG_SND_ES1968_INPUT | 1 + baseconfig/CONFIG_SND_ES1968_RADIO | 1 + baseconfig/CONFIG_SND_FIREWIRE | 1 + baseconfig/CONFIG_SND_FIREWIRE_DIGI00X | 1 + baseconfig/CONFIG_SND_FIREWIRE_TASCAM | 1 + baseconfig/CONFIG_SND_FIREWORKS | 1 + baseconfig/CONFIG_SND_FM801 | 1 + baseconfig/CONFIG_SND_FM801_TEA575X_BOOL | 1 + baseconfig/CONFIG_SND_GINA20 | 1 + baseconfig/CONFIG_SND_GINA24 | 1 + baseconfig/CONFIG_SND_HDA_CODEC_ANALOG | 1 + baseconfig/CONFIG_SND_HDA_CODEC_CA0110 | 1 + baseconfig/CONFIG_SND_HDA_CODEC_CA0132 | 1 + baseconfig/CONFIG_SND_HDA_CODEC_CA0132_DSP | 1 + baseconfig/CONFIG_SND_HDA_CODEC_CIRRUS | 1 + baseconfig/CONFIG_SND_HDA_CODEC_CMEDIA | 1 + baseconfig/CONFIG_SND_HDA_CODEC_CONEXANT | 1 + baseconfig/CONFIG_SND_HDA_CODEC_HDMI | 1 + baseconfig/CONFIG_SND_HDA_CODEC_REALTEK | 1 + baseconfig/CONFIG_SND_HDA_CODEC_SI3054 | 1 + baseconfig/CONFIG_SND_HDA_CODEC_SIGMATEL | 1 + baseconfig/CONFIG_SND_HDA_CODEC_VIA | 1 + baseconfig/CONFIG_SND_HDA_GENERIC | 1 + baseconfig/CONFIG_SND_HDA_HWDEP | 1 + baseconfig/CONFIG_SND_HDA_I915 | 1 + baseconfig/CONFIG_SND_HDA_INPUT_BEEP | 1 + baseconfig/CONFIG_SND_HDA_INPUT_BEEP_MODE | 1 + baseconfig/CONFIG_SND_HDA_INTEL | 1 + baseconfig/CONFIG_SND_HDA_PATCH_LOADER | 1 + baseconfig/CONFIG_SND_HDA_POWER_SAVE | 1 + baseconfig/CONFIG_SND_HDA_POWER_SAVE_DEFAULT | 1 + baseconfig/CONFIG_SND_HDA_PREALLOC_SIZE | 1 + baseconfig/CONFIG_SND_HDA_RECONFIG | 1 + baseconfig/CONFIG_SND_HDSP | 1 + baseconfig/CONFIG_SND_HDSPM | 1 + baseconfig/CONFIG_SND_HRTIMER | 1 + baseconfig/CONFIG_SND_ICE1712 | 1 + baseconfig/CONFIG_SND_ICE1724 | 1 + baseconfig/CONFIG_SND_INDIGO | 1 + baseconfig/CONFIG_SND_INDIGODJ | 1 + baseconfig/CONFIG_SND_INDIGODJX | 1 + baseconfig/CONFIG_SND_INDIGOIO | 1 + baseconfig/CONFIG_SND_INDIGOIOX | 1 + baseconfig/CONFIG_SND_INTEL8X0 | 1 + baseconfig/CONFIG_SND_INTEL8X0M | 1 + baseconfig/CONFIG_SND_ISIGHT | 1 + baseconfig/CONFIG_SND_JACK | 1 + baseconfig/CONFIG_SND_KORG1212 | 1 + baseconfig/CONFIG_SND_LAYLA20 | 1 + baseconfig/CONFIG_SND_LAYLA24 | 1 + baseconfig/CONFIG_SND_LOLA | 1 + baseconfig/CONFIG_SND_LX6464ES | 1 + baseconfig/CONFIG_SND_MAESTRO3 | 1 + baseconfig/CONFIG_SND_MAESTRO3_INPUT | 1 + baseconfig/CONFIG_SND_MAX_CARDS | 1 + baseconfig/CONFIG_SND_MIA | 1 + baseconfig/CONFIG_SND_MIXART | 1 + baseconfig/CONFIG_SND_MIXER_OSS | 1 + baseconfig/CONFIG_SND_MONA | 1 + baseconfig/CONFIG_SND_MPU401 | 1 + baseconfig/CONFIG_SND_MTPAV | 1 + baseconfig/CONFIG_SND_MTS64 | 1 + baseconfig/CONFIG_SND_NM256 | 1 + baseconfig/CONFIG_SND_OSSEMUL | 1 + baseconfig/CONFIG_SND_OXFW | 1 + baseconfig/CONFIG_SND_OXYGEN | 1 + baseconfig/CONFIG_SND_PCI | 1 + baseconfig/CONFIG_SND_PCMCIA | 1 + baseconfig/CONFIG_SND_PCM_OSS | 1 + baseconfig/CONFIG_SND_PCM_OSS_PLUGINS | 1 + baseconfig/CONFIG_SND_PCSP | 1 + baseconfig/CONFIG_SND_PCXHR | 1 + baseconfig/CONFIG_SND_PORTMAN2X4 | 1 + baseconfig/CONFIG_SND_RIPTIDE | 1 + baseconfig/CONFIG_SND_RME32 | 1 + baseconfig/CONFIG_SND_RME96 | 1 + baseconfig/CONFIG_SND_RME9652 | 1 + baseconfig/CONFIG_SND_SEQUENCER | 1 + baseconfig/CONFIG_SND_SEQUENCER_OSS | 1 + baseconfig/CONFIG_SND_SEQ_DUMMY | 1 + baseconfig/CONFIG_SND_SEQ_HRTIMER_DEFAULT | 1 + baseconfig/CONFIG_SND_SERIAL_U16550 | 1 + baseconfig/CONFIG_SND_SIMPLE_CARD | 1 + baseconfig/CONFIG_SND_SIMPLE_SCU_CARD | 1 + baseconfig/CONFIG_SND_SIS7019 | 1 + baseconfig/CONFIG_SND_SOC | 1 + baseconfig/CONFIG_SND_SOC_ADAU1701 | 1 + baseconfig/CONFIG_SND_SOC_ADAU7002 | 1 + baseconfig/CONFIG_SND_SOC_AK4104 | 1 + baseconfig/CONFIG_SND_SOC_AK4554 | 1 + baseconfig/CONFIG_SND_SOC_AK4613 | 1 + baseconfig/CONFIG_SND_SOC_AK4642 | 1 + baseconfig/CONFIG_SND_SOC_AK5386 | 1 + baseconfig/CONFIG_SND_SOC_ALC5623 | 1 + baseconfig/CONFIG_SND_SOC_ALL_CODECS | 1 + baseconfig/CONFIG_SND_SOC_AMD_ACP | 1 + .../CONFIG_SND_SOC_ARNDALE_RT5631_ALC5631 | 1 + baseconfig/CONFIG_SND_SOC_BT_SCO | 1 + baseconfig/CONFIG_SND_SOC_CS35L32 | 1 + baseconfig/CONFIG_SND_SOC_CS35L33 | 1 + baseconfig/CONFIG_SND_SOC_CS35L34 | 1 + baseconfig/CONFIG_SND_SOC_CS4265 | 1 + baseconfig/CONFIG_SND_SOC_CS4270 | 1 + baseconfig/CONFIG_SND_SOC_CS4271 | 1 + baseconfig/CONFIG_SND_SOC_CS4271_I2C | 1 + baseconfig/CONFIG_SND_SOC_CS4271_SPI | 1 + baseconfig/CONFIG_SND_SOC_CS42L42 | 1 + baseconfig/CONFIG_SND_SOC_CS42L51_I2C | 1 + baseconfig/CONFIG_SND_SOC_CS42L52 | 1 + baseconfig/CONFIG_SND_SOC_CS42L56 | 1 + baseconfig/CONFIG_SND_SOC_CS42L73 | 1 + baseconfig/CONFIG_SND_SOC_CS42XX8_I2C | 1 + baseconfig/CONFIG_SND_SOC_CS4349 | 1 + baseconfig/CONFIG_SND_SOC_CS53L30 | 1 + baseconfig/CONFIG_SND_SOC_DMIC | 1 + baseconfig/CONFIG_SND_SOC_ES8328 | 1 + baseconfig/CONFIG_SND_SOC_FSL_ASOC_CARD | 1 + baseconfig/CONFIG_SND_SOC_FSL_ASRC | 1 + baseconfig/CONFIG_SND_SOC_FSL_ESAI | 1 + baseconfig/CONFIG_SND_SOC_FSL_SAI | 1 + baseconfig/CONFIG_SND_SOC_FSL_SPDIF | 1 + baseconfig/CONFIG_SND_SOC_FSL_SSI | 1 + .../CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM | 1 + baseconfig/CONFIG_SND_SOC_GTM601 | 1 + baseconfig/CONFIG_SND_SOC_HDAC_HDMI | 1 + baseconfig/CONFIG_SND_SOC_HDMI_CODEC | 1 + baseconfig/CONFIG_SND_SOC_IMG | 1 + baseconfig/CONFIG_SND_SOC_IMX_AUDMUX | 1 + baseconfig/CONFIG_SND_SOC_IMX_ES8328 | 1 + baseconfig/CONFIG_SND_SOC_INNO_RK3036 | 1 + baseconfig/CONFIG_SND_SOC_MAX98504 | 1 + baseconfig/CONFIG_SND_SOC_MAX9860 | 1 + baseconfig/CONFIG_SND_SOC_MSM8916_WCD_ANALOG | 1 + baseconfig/CONFIG_SND_SOC_MSM8916_WCD_DIGITAL | 1 + baseconfig/CONFIG_SND_SOC_NAU8810 | 1 + baseconfig/CONFIG_SND_SOC_PCM1681 | 1 + baseconfig/CONFIG_SND_SOC_PCM179X | 1 + baseconfig/CONFIG_SND_SOC_PCM179X_I2C | 1 + baseconfig/CONFIG_SND_SOC_PCM179X_SPI | 1 + baseconfig/CONFIG_SND_SOC_PCM3168A_I2C | 1 + baseconfig/CONFIG_SND_SOC_PCM3168A_SPI | 1 + baseconfig/CONFIG_SND_SOC_PCM512x_I2C | 1 + baseconfig/CONFIG_SND_SOC_PCM512x_SPI | 1 + baseconfig/CONFIG_SND_SOC_RT5616 | 1 + baseconfig/CONFIG_SND_SOC_RT5631 | 1 + baseconfig/CONFIG_SND_SOC_SGTL5000 | 1 + baseconfig/CONFIG_SND_SOC_SIRF_AUDIO_CODEC | 1 + baseconfig/CONFIG_SND_SOC_SPDIF | 1 + baseconfig/CONFIG_SND_SOC_SSM2602_I2C | 1 + baseconfig/CONFIG_SND_SOC_SSM2602_SPI | 1 + baseconfig/CONFIG_SND_SOC_SSM4567 | 1 + baseconfig/CONFIG_SND_SOC_STA32X | 1 + baseconfig/CONFIG_SND_SOC_STA350 | 1 + baseconfig/CONFIG_SND_SOC_STI_SAS | 1 + baseconfig/CONFIG_SND_SOC_TAS2552 | 1 + baseconfig/CONFIG_SND_SOC_TAS5086 | 1 + baseconfig/CONFIG_SND_SOC_TAS5720 | 1 + baseconfig/CONFIG_SND_SOC_TFA9879 | 1 + baseconfig/CONFIG_SND_SOC_TLV320AIC23_I2C | 1 + baseconfig/CONFIG_SND_SOC_TLV320AIC23_SPI | 1 + baseconfig/CONFIG_SND_SOC_TLV320AIC31XX | 1 + baseconfig/CONFIG_SND_SOC_TLV320AIC3X | 1 + baseconfig/CONFIG_SND_SOC_TPA6130A2 | 1 + baseconfig/CONFIG_SND_SOC_TS3A227E | 1 + baseconfig/CONFIG_SND_SOC_WM8510 | 1 + baseconfig/CONFIG_SND_SOC_WM8523 | 1 + baseconfig/CONFIG_SND_SOC_WM8580 | 1 + baseconfig/CONFIG_SND_SOC_WM8711 | 1 + baseconfig/CONFIG_SND_SOC_WM8728 | 1 + baseconfig/CONFIG_SND_SOC_WM8731 | 1 + baseconfig/CONFIG_SND_SOC_WM8737 | 1 + baseconfig/CONFIG_SND_SOC_WM8741 | 1 + baseconfig/CONFIG_SND_SOC_WM8750 | 1 + baseconfig/CONFIG_SND_SOC_WM8753 | 1 + baseconfig/CONFIG_SND_SOC_WM8770 | 1 + baseconfig/CONFIG_SND_SOC_WM8776 | 1 + baseconfig/CONFIG_SND_SOC_WM8804 | 1 + baseconfig/CONFIG_SND_SOC_WM8804_I2C | 1 + baseconfig/CONFIG_SND_SOC_WM8804_SPI | 1 + baseconfig/CONFIG_SND_SOC_WM8903 | 1 + baseconfig/CONFIG_SND_SOC_WM8960 | 1 + baseconfig/CONFIG_SND_SOC_WM8962 | 1 + baseconfig/CONFIG_SND_SOC_WM8974 | 1 + baseconfig/CONFIG_SND_SOC_WM8978 | 1 + baseconfig/CONFIG_SND_SOC_WM8985 | 1 + baseconfig/CONFIG_SND_SOC_XTFPGA_I2S | 1 + baseconfig/CONFIG_SND_SONICVIBES | 1 + baseconfig/CONFIG_SND_SPI | 1 + baseconfig/CONFIG_SND_SUN8I_CODEC_ANALOG | 1 + baseconfig/CONFIG_SND_SUPPORT_OLD_API | 1 + baseconfig/CONFIG_SND_TRIDENT | 1 + baseconfig/CONFIG_SND_USB | 1 + baseconfig/CONFIG_SND_USB_6FIRE | 1 + baseconfig/CONFIG_SND_USB_AUDIO | 1 + baseconfig/CONFIG_SND_USB_CAIAQ | 1 + baseconfig/CONFIG_SND_USB_CAIAQ_INPUT | 1 + baseconfig/CONFIG_SND_USB_HIFACE | 1 + baseconfig/CONFIG_SND_USB_POD | 1 + baseconfig/CONFIG_SND_USB_PODHD | 1 + baseconfig/CONFIG_SND_USB_TONEPORT | 1 + baseconfig/CONFIG_SND_USB_UA101 | 1 + baseconfig/CONFIG_SND_USB_US122L | 1 + baseconfig/CONFIG_SND_USB_USX2Y | 1 + baseconfig/CONFIG_SND_USB_VARIAX | 1 + baseconfig/CONFIG_SND_VERBOSE_PRINTK | 1 + baseconfig/CONFIG_SND_VERBOSE_PROCFS | 1 + baseconfig/CONFIG_SND_VIA82XX | 1 + baseconfig/CONFIG_SND_VIA82XX_MODEM | 1 + baseconfig/CONFIG_SND_VIRMIDI | 1 + baseconfig/CONFIG_SND_VIRTUOSO | 1 + baseconfig/CONFIG_SND_VX222 | 1 + baseconfig/CONFIG_SND_YMFPCI | 1 + baseconfig/CONFIG_SOC_CAMERA | 1 + baseconfig/CONFIG_SOC_TI | 1 + baseconfig/CONFIG_SOFT_WATCHDOG | 1 + baseconfig/CONFIG_SOLARIS_X86_PARTITION | 1 + baseconfig/CONFIG_SOLO6X10 | 1 + baseconfig/CONFIG_SONYPI | 1 + baseconfig/CONFIG_SONY_FF | 1 + baseconfig/CONFIG_SOUND | 1 + baseconfig/CONFIG_SOUND_OSS_CORE_PRECLAIM | 1 + baseconfig/CONFIG_SOUND_PRIME | 1 + baseconfig/CONFIG_SPARSE_RCU_POINTER | 1 + baseconfig/CONFIG_SPEAKUP | 1 + baseconfig/CONFIG_SPI | 1 + baseconfig/CONFIG_SPI_ALTERA | 1 + baseconfig/CONFIG_SPI_AXI_SPI_ENGINE | 1 + baseconfig/CONFIG_SPI_BITBANG | 1 + baseconfig/CONFIG_SPI_BUTTERFLY | 1 + baseconfig/CONFIG_SPI_DEBUG | 1 + baseconfig/CONFIG_SPI_DESIGNWARE | 1 + baseconfig/CONFIG_SPI_FSL_LPSPI | 1 + baseconfig/CONFIG_SPI_FSL_SPI | 1 + baseconfig/CONFIG_SPI_GPIO | 1 + baseconfig/CONFIG_SPI_LM70_LLP | 1 + baseconfig/CONFIG_SPI_LOOPBACK_TEST | 1 + baseconfig/CONFIG_SPI_OC_TINY | 1 + baseconfig/CONFIG_SPI_PXA2XX | 1 + baseconfig/CONFIG_SPI_SC18IS602 | 1 + baseconfig/CONFIG_SPI_SPIDEV | 1 + baseconfig/CONFIG_SPI_TLE62X0 | 1 + baseconfig/CONFIG_SPI_TOPCLIFF_PCH | 1 + baseconfig/CONFIG_SPI_XCOMM | 1 + baseconfig/CONFIG_SPI_XILINX | 1 + baseconfig/CONFIG_SPMI | 1 + baseconfig/CONFIG_SQUASHFS | 1 + baseconfig/CONFIG_SQUASHFS_4K_DEVBLK_SIZE | 1 + baseconfig/CONFIG_SQUASHFS_EMBEDDED | 1 + baseconfig/CONFIG_SQUASHFS_LZ4 | 1 + baseconfig/CONFIG_SQUASHFS_LZO | 1 + baseconfig/CONFIG_SQUASHFS_XATTR | 1 + baseconfig/CONFIG_SQUASHFS_XZ | 1 + baseconfig/CONFIG_SQUASHFS_ZLIB | 1 + baseconfig/CONFIG_SRAM | 1 + baseconfig/CONFIG_SSB | 1 + baseconfig/CONFIG_SSB_DEBUG | 1 + baseconfig/CONFIG_SSB_DRIVER_GPIO | 1 + baseconfig/CONFIG_SSB_DRIVER_PCICORE | 1 + baseconfig/CONFIG_SSB_HOST_SOC | 1 + baseconfig/CONFIG_SSB_PCIHOST | 1 + baseconfig/CONFIG_SSB_PCMCIAHOST | 1 + baseconfig/CONFIG_SSB_SDIOHOST | 1 + baseconfig/CONFIG_SSB_SILENT | 1 + baseconfig/CONFIG_SSFDC | 1 + baseconfig/CONFIG_STACK_TRACER | 1 + baseconfig/CONFIG_STACK_VALIDATION | 1 + baseconfig/CONFIG_STAGING | 1 + baseconfig/CONFIG_STAGING_BOARD | 1 + baseconfig/CONFIG_STAGING_MEDIA | 1 + baseconfig/CONFIG_STANDALONE | 1 + baseconfig/CONFIG_STATIC_KEYS_SELFTEST | 1 + baseconfig/CONFIG_STE10XP | 1 + baseconfig/CONFIG_STE_MODEM_RPROC | 1 + baseconfig/CONFIG_STK3310 | 1 + baseconfig/CONFIG_STK8312 | 1 + baseconfig/CONFIG_STK8BA50 | 1 + baseconfig/CONFIG_STM | 1 + baseconfig/CONFIG_STMMAC_ETH | 1 + baseconfig/CONFIG_STMMAC_PCI | 1 + baseconfig/CONFIG_STMMAC_PLATFORM | 1 + baseconfig/CONFIG_STM_DUMMY | 1 + baseconfig/CONFIG_STM_SOURCE_CONSOLE | 1 + baseconfig/CONFIG_STRICT_DEVMEM | 1 + baseconfig/CONFIG_STRIP | 1 + baseconfig/CONFIG_STRIP_ASM_SYMS | 1 + baseconfig/CONFIG_SUN50I_A64_CCU | 1 + baseconfig/CONFIG_SUN6I_A31_CCU | 1 + baseconfig/CONFIG_SUN8I_A23_CCU | 1 + baseconfig/CONFIG_SUN8I_A33_CCU | 1 + baseconfig/CONFIG_SUNDANCE | 1 + baseconfig/CONFIG_SUNDANCE_MMIO | 1 + baseconfig/CONFIG_SUNGEM | 1 + baseconfig/CONFIG_SUNRPC | 1 + baseconfig/CONFIG_SUNRPC_DEBUG | 1 + baseconfig/CONFIG_SUNRPC_GSS | 1 + baseconfig/CONFIG_SUNRPC_XPRT_RDMA | 1 + baseconfig/CONFIG_SUNXI_CCU | 1 + baseconfig/CONFIG_SUN_PARTITION | 1 + baseconfig/CONFIG_SURFACE3_WMI | 1 + baseconfig/CONFIG_SURFACE_3_BUTTON | 1 + baseconfig/CONFIG_SUSPEND | 1 + baseconfig/CONFIG_SWAP | 1 + baseconfig/CONFIG_SW_SYNC | 1 + baseconfig/CONFIG_SX9500 | 1 + baseconfig/CONFIG_SYNCLINK | 1 + baseconfig/CONFIG_SYNCLINKMP | 1 + baseconfig/CONFIG_SYNCLINK_CS | 1 + baseconfig/CONFIG_SYNCLINK_GT | 1 + baseconfig/CONFIG_SYNC_FILE | 1 + baseconfig/CONFIG_SYNOPSYS_DWC_ETH_QOS | 1 + baseconfig/CONFIG_SYN_COOKIES | 1 + baseconfig/CONFIG_SYSCON_REBOOT_MODE | 1 + baseconfig/CONFIG_SYSCTL | 1 + baseconfig/CONFIG_SYSFS_DEPRECATED | 1 + baseconfig/CONFIG_SYSFS_DEPRECATED_V2 | 1 + baseconfig/CONFIG_SYSTEMPORT | 1 + baseconfig/CONFIG_SYSTEM_BLACKLIST_KEYRING | 1 + baseconfig/CONFIG_SYSTEM_EXTRA_CERTIFICATE | 1 + baseconfig/CONFIG_SYSTEM_TRUSTED_KEYRING | 1 + baseconfig/CONFIG_SYSTEM_TRUSTED_KEYS | 1 + baseconfig/CONFIG_SYSV68_PARTITION | 1 + baseconfig/CONFIG_SYSVIPC | 1 + baseconfig/CONFIG_SYSV_FS | 1 + baseconfig/CONFIG_T5403 | 1 + baseconfig/CONFIG_TABLET_SERIAL_WACOM4 | 1 + baseconfig/CONFIG_TABLET_USB_ACECAD | 1 + baseconfig/CONFIG_TABLET_USB_AIPTEK | 1 + baseconfig/CONFIG_TABLET_USB_GTCO | 1 + baseconfig/CONFIG_TABLET_USB_HANWANG | 1 + baseconfig/CONFIG_TABLET_USB_KBTAB | 1 + baseconfig/CONFIG_TABLET_USB_PEGASUS | 1 + baseconfig/CONFIG_TARGET_CORE | 1 + baseconfig/CONFIG_TASKSTATS | 1 + baseconfig/CONFIG_TASKS_RCU | 1 + baseconfig/CONFIG_TASK_DELAY_ACCT | 1 + baseconfig/CONFIG_TASK_IO_ACCOUNTING | 1 + baseconfig/CONFIG_TASK_XACCT | 1 + baseconfig/CONFIG_TCG_ATMEL | 1 + baseconfig/CONFIG_TCG_INFINEON | 1 + baseconfig/CONFIG_TCG_NSC | 1 + baseconfig/CONFIG_TCG_TIS | 1 + baseconfig/CONFIG_TCG_TIS_I2C_ATMEL | 1 + baseconfig/CONFIG_TCG_TIS_I2C_INFINEON | 1 + baseconfig/CONFIG_TCG_TIS_I2C_NUVOTON | 1 + baseconfig/CONFIG_TCG_TIS_SPI | 1 + baseconfig/CONFIG_TCG_TIS_ST33ZP24 | 1 + baseconfig/CONFIG_TCG_TIS_ST33ZP24_I2C | 1 + baseconfig/CONFIG_TCG_TIS_ST33ZP24_SPI | 1 + baseconfig/CONFIG_TCG_TPM | 1 + baseconfig/CONFIG_TCG_VTPM_PROXY | 1 + baseconfig/CONFIG_TCG_XEN | 1 + baseconfig/CONFIG_TCM_FC | 1 + baseconfig/CONFIG_TCM_FILEIO | 1 + baseconfig/CONFIG_TCM_IBLOCK | 1 + baseconfig/CONFIG_TCM_PSCSI | 1 + baseconfig/CONFIG_TCM_QLA2XXX | 1 + baseconfig/CONFIG_TCM_QLA2XXX_DEBUG | 1 + baseconfig/CONFIG_TCM_USER2 | 1 + baseconfig/CONFIG_TCP_CONG_ADVANCED | 1 + baseconfig/CONFIG_TCP_CONG_BBR | 1 + baseconfig/CONFIG_TCP_CONG_BIC | 1 + baseconfig/CONFIG_TCP_CONG_CDG | 1 + baseconfig/CONFIG_TCP_CONG_CUBIC | 1 + baseconfig/CONFIG_TCP_CONG_DCTCP | 1 + baseconfig/CONFIG_TCP_CONG_HSTCP | 1 + baseconfig/CONFIG_TCP_CONG_HTCP | 1 + baseconfig/CONFIG_TCP_CONG_HYBLA | 1 + baseconfig/CONFIG_TCP_CONG_ILLINOIS | 1 + baseconfig/CONFIG_TCP_CONG_LP | 1 + baseconfig/CONFIG_TCP_CONG_NV | 1 + baseconfig/CONFIG_TCP_CONG_SCALABLE | 1 + baseconfig/CONFIG_TCP_CONG_VEGAS | 1 + baseconfig/CONFIG_TCP_CONG_VENO | 1 + baseconfig/CONFIG_TCP_CONG_WESTWOOD | 1 + baseconfig/CONFIG_TCP_CONG_YEAH | 1 + baseconfig/CONFIG_TCP_MD5SIG | 1 + baseconfig/CONFIG_TCS3414 | 1 + baseconfig/CONFIG_TCS3472 | 1 + baseconfig/CONFIG_TEGRA_GMI | 1 + baseconfig/CONFIG_TEGRA_IVC | 1 + baseconfig/CONFIG_TEHUTI | 1 + baseconfig/CONFIG_TEKRAM_DONGLE | 1 + baseconfig/CONFIG_TELCLOCK | 1 + baseconfig/CONFIG_TERANETICS_PHY | 1 + baseconfig/CONFIG_TEST_ASYNC_DRIVER_PROBE | 1 + baseconfig/CONFIG_TEST_BITMAP | 1 + baseconfig/CONFIG_TEST_BPF | 1 + baseconfig/CONFIG_TEST_FIRMWARE | 1 + baseconfig/CONFIG_TEST_HASH | 1 + baseconfig/CONFIG_TEST_HEXDUMP | 1 + baseconfig/CONFIG_TEST_KSTRTOX | 1 + baseconfig/CONFIG_TEST_LIST_SORT | 1 + baseconfig/CONFIG_TEST_LKM | 1 + baseconfig/CONFIG_TEST_POWER | 1 + baseconfig/CONFIG_TEST_PRINTF | 1 + baseconfig/CONFIG_TEST_RHASHTABLE | 1 + baseconfig/CONFIG_TEST_STATIC_KEYS | 1 + baseconfig/CONFIG_TEST_STRING_HELPERS | 1 + baseconfig/CONFIG_TEST_UDELAY | 1 + baseconfig/CONFIG_TEST_USER_COPY | 1 + baseconfig/CONFIG_TEST_UUID | 1 + .../CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE | 1 + .../CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE | 1 + baseconfig/CONFIG_THERMAL_EMULATION | 1 + baseconfig/CONFIG_THERMAL_GOV_BANG_BANG | 1 + baseconfig/CONFIG_THERMAL_GOV_FAIR_SHARE | 1 + baseconfig/CONFIG_THERMAL_GOV_POWER_ALLOCATOR | 1 + baseconfig/CONFIG_THERMAL_GOV_STEP_WISE | 1 + baseconfig/CONFIG_THERMAL_GOV_USER_SPACE | 1 + baseconfig/CONFIG_THERMAL_HWMON | 1 + baseconfig/CONFIG_THERMAL_OF | 1 + baseconfig/CONFIG_THERMAL_WRITABLE_TRIPS | 1 + baseconfig/CONFIG_THRUSTMASTER_FF | 1 + baseconfig/CONFIG_THUNDERBOLT | 1 + baseconfig/CONFIG_TIFM_7XX1 | 1 + baseconfig/CONFIG_TIFM_CORE | 1 + baseconfig/CONFIG_TIGON3 | 1 + baseconfig/CONFIG_TIMB_DMA | 1 + baseconfig/CONFIG_TIMER_STATS | 1 + baseconfig/CONFIG_TIPC | 1 + baseconfig/CONFIG_TIPC_MEDIA_IB | 1 + baseconfig/CONFIG_TIPC_MEDIA_UDP | 1 + baseconfig/CONFIG_TI_ADC081C | 1 + baseconfig/CONFIG_TI_ADC0832 | 1 + baseconfig/CONFIG_TI_ADC12138 | 1 + baseconfig/CONFIG_TI_ADC128S052 | 1 + baseconfig/CONFIG_TI_ADC161S626 | 1 + baseconfig/CONFIG_TI_ADS1015 | 1 + baseconfig/CONFIG_TI_ADS8688 | 1 + baseconfig/CONFIG_TI_CPSW_ALE | 1 + baseconfig/CONFIG_TI_DAC7512 | 1 + baseconfig/CONFIG_TI_SCI_PROTOCOL | 1 + baseconfig/CONFIG_TI_ST | 1 + baseconfig/CONFIG_TI_SYSCON_RESET | 1 + baseconfig/CONFIG_TLAN | 1 + baseconfig/CONFIG_TMD_HERMES | 1 + baseconfig/CONFIG_TMP006 | 1 + baseconfig/CONFIG_TMPFS | 1 + baseconfig/CONFIG_TMPFS_POSIX_ACL | 1 + baseconfig/CONFIG_TMPFS_XATTR | 1 + baseconfig/CONFIG_TOIM3232_DONGLE | 1 + baseconfig/CONFIG_TOSHIBA_FIR | 1 + baseconfig/CONFIG_TOUCHSCREEN_AD7877 | 1 + baseconfig/CONFIG_TOUCHSCREEN_AD7879 | 1 + baseconfig/CONFIG_TOUCHSCREEN_AD7879_I2C | 1 + baseconfig/CONFIG_TOUCHSCREEN_ADS7846 | 1 + baseconfig/CONFIG_TOUCHSCREEN_AR1021_I2C | 1 + baseconfig/CONFIG_TOUCHSCREEN_ATMEL_MXT | 1 + baseconfig/CONFIG_TOUCHSCREEN_ATMEL_MXT_T37 | 1 + baseconfig/CONFIG_TOUCHSCREEN_AUO_PIXCIR | 1 + baseconfig/CONFIG_TOUCHSCREEN_BU21013 | 1 + baseconfig/CONFIG_TOUCHSCREEN_CHIPONE_ICN8318 | 1 + baseconfig/CONFIG_TOUCHSCREEN_CY8CTMG110 | 1 + baseconfig/CONFIG_TOUCHSCREEN_CYTTSP4_CORE | 1 + baseconfig/CONFIG_TOUCHSCREEN_CYTTSP_CORE | 1 + baseconfig/CONFIG_TOUCHSCREEN_DYNAPRO | 1 + baseconfig/CONFIG_TOUCHSCREEN_EDT_FT5X06 | 1 + baseconfig/CONFIG_TOUCHSCREEN_EETI | 1 + baseconfig/CONFIG_TOUCHSCREEN_EGALAX | 1 + baseconfig/CONFIG_TOUCHSCREEN_EGALAX_SERIAL | 1 + baseconfig/CONFIG_TOUCHSCREEN_EKTF2127 | 1 + baseconfig/CONFIG_TOUCHSCREEN_ELAN | 1 + baseconfig/CONFIG_TOUCHSCREEN_ELO | 1 + baseconfig/CONFIG_TOUCHSCREEN_FT6236 | 1 + baseconfig/CONFIG_TOUCHSCREEN_FUJITSU | 1 + baseconfig/CONFIG_TOUCHSCREEN_GOODIX | 1 + baseconfig/CONFIG_TOUCHSCREEN_GUNZE | 1 + baseconfig/CONFIG_TOUCHSCREEN_HAMPSHIRE | 1 + baseconfig/CONFIG_TOUCHSCREEN_ILI210X | 1 + baseconfig/CONFIG_TOUCHSCREEN_IMX6UL_TSC | 1 + baseconfig/CONFIG_TOUCHSCREEN_INEXIO | 1 + baseconfig/CONFIG_TOUCHSCREEN_MAX11801 | 1 + baseconfig/CONFIG_TOUCHSCREEN_MCS5000 | 1 + baseconfig/CONFIG_TOUCHSCREEN_MELFAS_MIP4 | 1 + baseconfig/CONFIG_TOUCHSCREEN_MK712 | 1 + baseconfig/CONFIG_TOUCHSCREEN_MMS114 | 1 + baseconfig/CONFIG_TOUCHSCREEN_MTOUCH | 1 + baseconfig/CONFIG_TOUCHSCREEN_PENMOUNT | 1 + baseconfig/CONFIG_TOUCHSCREEN_PIXCIR | 1 + baseconfig/CONFIG_TOUCHSCREEN_RM_TS | 1 + baseconfig/CONFIG_TOUCHSCREEN_ROHM_BU21023 | 1 + baseconfig/CONFIG_TOUCHSCREEN_SILEAD | 1 + baseconfig/CONFIG_TOUCHSCREEN_SIS_I2C | 1 + baseconfig/CONFIG_TOUCHSCREEN_ST1232 | 1 + baseconfig/CONFIG_TOUCHSCREEN_SUR40 | 1 + baseconfig/CONFIG_TOUCHSCREEN_SURFACE3_SPI | 1 + baseconfig/CONFIG_TOUCHSCREEN_SX8654 | 1 + baseconfig/CONFIG_TOUCHSCREEN_TI_AM335X_TSC | 1 + baseconfig/CONFIG_TOUCHSCREEN_TOUCHIT213 | 1 + baseconfig/CONFIG_TOUCHSCREEN_TOUCHRIGHT | 1 + baseconfig/CONFIG_TOUCHSCREEN_TOUCHWIN | 1 + baseconfig/CONFIG_TOUCHSCREEN_TPS6507X | 1 + baseconfig/CONFIG_TOUCHSCREEN_TS4800 | 1 + baseconfig/CONFIG_TOUCHSCREEN_TSC2004 | 1 + baseconfig/CONFIG_TOUCHSCREEN_TSC2005 | 1 + baseconfig/CONFIG_TOUCHSCREEN_TSC2007 | 1 + baseconfig/CONFIG_TOUCHSCREEN_TSC_SERIO | 1 + baseconfig/CONFIG_TOUCHSCREEN_UCB1400 | 1 + baseconfig/CONFIG_TOUCHSCREEN_USB_COMPOSITE | 1 + baseconfig/CONFIG_TOUCHSCREEN_USB_E2I | 1 + baseconfig/CONFIG_TOUCHSCREEN_W90X900 | 1 + baseconfig/CONFIG_TOUCHSCREEN_WACOM_I2C | 1 + baseconfig/CONFIG_TOUCHSCREEN_WACOM_W8001 | 1 + baseconfig/CONFIG_TOUCHSCREEN_WDT87XX_I2C | 1 + baseconfig/CONFIG_TOUCHSCREEN_WM97XX | 1 + baseconfig/CONFIG_TOUCHSCREEN_ZFORCE | 1 + baseconfig/CONFIG_TPL0102 | 1 + baseconfig/CONFIG_TPS6105X | 1 + baseconfig/CONFIG_TPS65010 | 1 + baseconfig/CONFIG_TPS6507X | 1 + baseconfig/CONFIG_TR | 1 + baseconfig/CONFIG_TRACEPOINT_BENCHMARK | 1 + baseconfig/CONFIG_TRACER_SNAPSHOT | 1 + .../CONFIG_TRACER_SNAPSHOT_PER_CPU_SWAP | 1 + baseconfig/CONFIG_TRACE_BRANCH_PROFILING | 1 + baseconfig/CONFIG_TRACE_ENUM_MAP_FILE | 1 + baseconfig/CONFIG_TRACE_SINK | 1 + baseconfig/CONFIG_TRACING_EVENTS_GPIO | 1 + baseconfig/CONFIG_TRUSTED_KEYS | 1 + baseconfig/CONFIG_TS4800_IRQ | 1 + baseconfig/CONFIG_TS4800_WATCHDOG | 1 + baseconfig/CONFIG_TSL2583 | 1 + baseconfig/CONFIG_TSL2x7x | 1 + baseconfig/CONFIG_TSL4531 | 1 + baseconfig/CONFIG_TSYS01 | 1 + baseconfig/CONFIG_TSYS02D | 1 + baseconfig/CONFIG_TULIP | 1 + baseconfig/CONFIG_TULIP_MMIO | 1 + baseconfig/CONFIG_TULIP_MWI | 1 + baseconfig/CONFIG_TULIP_NAPI | 1 + baseconfig/CONFIG_TUN | 1 + baseconfig/CONFIG_TUN_VNET_CROSS_LE | 1 + baseconfig/CONFIG_TWL4030_CORE | 1 + baseconfig/CONFIG_TWL6040_CORE | 1 + baseconfig/CONFIG_TYPHOON | 1 + baseconfig/CONFIG_UBIFS_ATIME_SUPPORT | 1 + baseconfig/CONFIG_UBIFS_FS | 1 + baseconfig/CONFIG_UBIFS_FS_ADVANCED_COMPR | 1 + baseconfig/CONFIG_UBIFS_FS_ENCRYPTION | 1 + baseconfig/CONFIG_UBSAN | 1 + baseconfig/CONFIG_UBSAN_ALIGNMENT | 1 + baseconfig/CONFIG_UBSAN_SANITIZE_ALL | 1 + baseconfig/CONFIG_UCB1400_CORE | 1 + baseconfig/CONFIG_UCSI | 1 + baseconfig/CONFIG_UDF_FS | 1 + baseconfig/CONFIG_UEVENT_HELPER | 1 + baseconfig/CONFIG_UFS_DEBUG | 1 + baseconfig/CONFIG_UFS_FS | 1 + baseconfig/CONFIG_UFS_FS_WRITE | 1 + baseconfig/CONFIG_UHID | 1 + baseconfig/CONFIG_UIO | 1 + baseconfig/CONFIG_UIO_AEC | 1 + baseconfig/CONFIG_UIO_CIF | 1 + baseconfig/CONFIG_UIO_DMEM_GENIRQ | 1 + baseconfig/CONFIG_UIO_HV_GENERIC | 1 + baseconfig/CONFIG_UIO_MF624 | 1 + baseconfig/CONFIG_UIO_NETX | 1 + baseconfig/CONFIG_UIO_PCI_GENERIC | 1 + baseconfig/CONFIG_UIO_PDRV | 1 + baseconfig/CONFIG_UIO_PDRV_GENIRQ | 1 + baseconfig/CONFIG_UIO_PRUSS | 1 + baseconfig/CONFIG_UIO_SERCOS3 | 1 + baseconfig/CONFIG_ULI526X | 1 + baseconfig/CONFIG_ULTRIX_PARTITION | 1 + baseconfig/CONFIG_UNISYSSPAR | 1 + baseconfig/CONFIG_UNIX | 1 + baseconfig/CONFIG_UNIX98_PTYS | 1 + baseconfig/CONFIG_UNIXWARE_DISKLABEL | 1 + baseconfig/CONFIG_UNIX_DIAG | 1 + baseconfig/CONFIG_UNUSED_SYMBOLS | 1 + baseconfig/CONFIG_UPROBE_EVENT | 1 + baseconfig/CONFIG_US5182D | 1 + baseconfig/CONFIG_USB | 1 + baseconfig/CONFIG_USBIP_CORE | 1 + baseconfig/CONFIG_USBIP_DEBUG | 1 + baseconfig/CONFIG_USBIP_HOST | 1 + baseconfig/CONFIG_USBIP_VHCI_HCD | 1 + baseconfig/CONFIG_USBIP_VHCI_HC_PORTS | 1 + baseconfig/CONFIG_USBIP_VHCI_NR_HCS | 1 + baseconfig/CONFIG_USBIP_VUDC | 1 + baseconfig/CONFIG_USBPCWATCHDOG | 1 + baseconfig/CONFIG_USB_ACM | 1 + baseconfig/CONFIG_USB_ADUTUX | 1 + baseconfig/CONFIG_USB_ALI_M5632 | 1 + baseconfig/CONFIG_USB_AN2720 | 1 + baseconfig/CONFIG_USB_ANNOUNCE_NEW_DEVICES | 1 + baseconfig/CONFIG_USB_APPLEDISPLAY | 1 + baseconfig/CONFIG_USB_ARMLINUX | 1 + baseconfig/CONFIG_USB_ATM | 1 + baseconfig/CONFIG_USB_ATMEL | 1 + baseconfig/CONFIG_USB_BELKIN | 1 + baseconfig/CONFIG_USB_C67X00_HCD | 1 + baseconfig/CONFIG_USB_CATC | 1 + baseconfig/CONFIG_USB_CDC_PHONET | 1 + baseconfig/CONFIG_USB_CHAOSKEY | 1 + baseconfig/CONFIG_USB_CHIPIDEA | 1 + baseconfig/CONFIG_USB_CXACRU | 1 + baseconfig/CONFIG_USB_CYPRESS_CY7C63 | 1 + baseconfig/CONFIG_USB_CYTHERM | 1 + baseconfig/CONFIG_USB_DEBUG | 1 + baseconfig/CONFIG_USB_DEFAULT_PERSIST | 1 + baseconfig/CONFIG_USB_DSBR | 1 + baseconfig/CONFIG_USB_DWC2 | 1 + baseconfig/CONFIG_USB_DWC3 | 1 + baseconfig/CONFIG_USB_DWC3_OF_SIMPLE | 1 + baseconfig/CONFIG_USB_DYNAMIC_MINORS | 1 + baseconfig/CONFIG_USB_EHCI_HCD | 1 + baseconfig/CONFIG_USB_EHCI_HCD_PLATFORM | 1 + baseconfig/CONFIG_USB_EHCI_MV | 1 + baseconfig/CONFIG_USB_EHCI_ROOT_HUB_TT | 1 + baseconfig/CONFIG_USB_EHCI_TT_NEWSCHED | 1 + baseconfig/CONFIG_USB_EHSET_TEST_FIXTURE | 1 + baseconfig/CONFIG_USB_EMI26 | 1 + baseconfig/CONFIG_USB_EMI62 | 1 + baseconfig/CONFIG_USB_EPSON2888 | 1 + baseconfig/CONFIG_USB_EZUSB | 1 + baseconfig/CONFIG_USB_EZUSB_FX2 | 1 + baseconfig/CONFIG_USB_FOTG210_HCD | 1 + baseconfig/CONFIG_USB_FTDI_ELAN | 1 + baseconfig/CONFIG_USB_GADGET | 1 + baseconfig/CONFIG_USB_GADGETFS | 1 + baseconfig/CONFIG_USB_GL860 | 1 + baseconfig/CONFIG_USB_GPIO_VBUS | 1 + baseconfig/CONFIG_USB_GR_UDC | 1 + baseconfig/CONFIG_USB_GSPCA | 1 + baseconfig/CONFIG_USB_GSPCA_BENQ | 1 + baseconfig/CONFIG_USB_GSPCA_CONEX | 1 + baseconfig/CONFIG_USB_GSPCA_CPIA1 | 1 + baseconfig/CONFIG_USB_GSPCA_DTCS033 | 1 + baseconfig/CONFIG_USB_GSPCA_ETOMS | 1 + baseconfig/CONFIG_USB_GSPCA_FINEPIX | 1 + baseconfig/CONFIG_USB_GSPCA_JEILINJ | 1 + baseconfig/CONFIG_USB_GSPCA_JL2005BCD | 1 + baseconfig/CONFIG_USB_GSPCA_KINECT | 1 + baseconfig/CONFIG_USB_GSPCA_KONICA | 1 + baseconfig/CONFIG_USB_GSPCA_MARS | 1 + baseconfig/CONFIG_USB_GSPCA_MR97310A | 1 + baseconfig/CONFIG_USB_GSPCA_NW80X | 1 + baseconfig/CONFIG_USB_GSPCA_OV519 | 1 + baseconfig/CONFIG_USB_GSPCA_OV534 | 1 + baseconfig/CONFIG_USB_GSPCA_OV534_9 | 1 + baseconfig/CONFIG_USB_GSPCA_PAC207 | 1 + baseconfig/CONFIG_USB_GSPCA_PAC7302 | 1 + baseconfig/CONFIG_USB_GSPCA_PAC7311 | 1 + baseconfig/CONFIG_USB_GSPCA_SE401 | 1 + baseconfig/CONFIG_USB_GSPCA_SN9C2028 | 1 + baseconfig/CONFIG_USB_GSPCA_SN9C20X | 1 + baseconfig/CONFIG_USB_GSPCA_SONIXB | 1 + baseconfig/CONFIG_USB_GSPCA_SONIXJ | 1 + baseconfig/CONFIG_USB_GSPCA_SPCA1528 | 1 + baseconfig/CONFIG_USB_GSPCA_SPCA500 | 1 + baseconfig/CONFIG_USB_GSPCA_SPCA501 | 1 + baseconfig/CONFIG_USB_GSPCA_SPCA505 | 1 + baseconfig/CONFIG_USB_GSPCA_SPCA506 | 1 + baseconfig/CONFIG_USB_GSPCA_SPCA508 | 1 + baseconfig/CONFIG_USB_GSPCA_SPCA561 | 1 + baseconfig/CONFIG_USB_GSPCA_SQ905 | 1 + baseconfig/CONFIG_USB_GSPCA_SQ905C | 1 + baseconfig/CONFIG_USB_GSPCA_SQ930X | 1 + baseconfig/CONFIG_USB_GSPCA_STK014 | 1 + baseconfig/CONFIG_USB_GSPCA_STK1135 | 1 + baseconfig/CONFIG_USB_GSPCA_STV0680 | 1 + baseconfig/CONFIG_USB_GSPCA_SUNPLUS | 1 + baseconfig/CONFIG_USB_GSPCA_T613 | 1 + baseconfig/CONFIG_USB_GSPCA_TOPRO | 1 + baseconfig/CONFIG_USB_GSPCA_TOUPTEK | 1 + baseconfig/CONFIG_USB_GSPCA_TV8532 | 1 + baseconfig/CONFIG_USB_GSPCA_VC032X | 1 + baseconfig/CONFIG_USB_GSPCA_VICAM | 1 + baseconfig/CONFIG_USB_GSPCA_XIRLINK_CIT | 1 + baseconfig/CONFIG_USB_GSPCA_ZC3XX | 1 + baseconfig/CONFIG_USB_G_SERIAL | 1 + baseconfig/CONFIG_USB_HCD_BCMA | 1 + baseconfig/CONFIG_USB_HCD_SSB | 1 + baseconfig/CONFIG_USB_HCD_TEST_MODE | 1 + baseconfig/CONFIG_USB_HID | 1 + baseconfig/CONFIG_USB_HIDDEV | 1 + baseconfig/CONFIG_USB_HSIC_USB3503 | 1 + baseconfig/CONFIG_USB_HSIC_USB4604 | 1 + baseconfig/CONFIG_USB_HSO | 1 + baseconfig/CONFIG_USB_HWA_HCD | 1 + baseconfig/CONFIG_USB_IDMOUSE | 1 + baseconfig/CONFIG_USB_IOWARRIOR | 1 + baseconfig/CONFIG_USB_IPHETH | 1 + baseconfig/CONFIG_USB_IRDA | 1 + baseconfig/CONFIG_USB_ISIGHTFW | 1 + baseconfig/CONFIG_USB_ISP116X_HCD | 1 + baseconfig/CONFIG_USB_ISP1301 | 1 + baseconfig/CONFIG_USB_ISP1362_HCD | 1 + baseconfig/CONFIG_USB_ISP1760 | 1 + baseconfig/CONFIG_USB_KAWETH | 1 + baseconfig/CONFIG_USB_KC2190 | 1 + baseconfig/CONFIG_USB_KEENE | 1 + baseconfig/CONFIG_USB_LAN78XX | 1 + baseconfig/CONFIG_USB_LCD | 1 + baseconfig/CONFIG_USB_LD | 1 + baseconfig/CONFIG_USB_LED | 1 + baseconfig/CONFIG_USB_LEDS_TRIGGER_USBPORT | 1 + baseconfig/CONFIG_USB_LED_TRIG | 1 + baseconfig/CONFIG_USB_LEGOTOWER | 1 + baseconfig/CONFIG_USB_LINK_LAYER_TEST | 1 + baseconfig/CONFIG_USB_M5602 | 1 + baseconfig/CONFIG_USB_MA901 | 1 + baseconfig/CONFIG_USB_MAX3421_HCD | 1 + baseconfig/CONFIG_USB_MDC800 | 1 + baseconfig/CONFIG_USB_MICROTEK | 1 + baseconfig/CONFIG_USB_MON | 1 + baseconfig/CONFIG_USB_MR800 | 1 + baseconfig/CONFIG_USB_MUSB_HDRC | 1 + baseconfig/CONFIG_USB_NET_AX88179_178A | 1 + baseconfig/CONFIG_USB_NET_AX8817X | 1 + baseconfig/CONFIG_USB_NET_CDC_EEM | 1 + baseconfig/CONFIG_USB_NET_CDC_MBIM | 1 + baseconfig/CONFIG_USB_NET_CDC_NCM | 1 + baseconfig/CONFIG_USB_NET_CDC_SUBSET | 1 + baseconfig/CONFIG_USB_NET_CH9200 | 1 + baseconfig/CONFIG_USB_NET_CX82310_ETH | 1 + baseconfig/CONFIG_USB_NET_DM9601 | 1 + baseconfig/CONFIG_USB_NET_DRIVERS | 1 + baseconfig/CONFIG_USB_NET_GL620A | 1 + baseconfig/CONFIG_USB_NET_HUAWEI_CDC_NCM | 1 + baseconfig/CONFIG_USB_NET_INT51X1 | 1 + baseconfig/CONFIG_USB_NET_KALMIA | 1 + baseconfig/CONFIG_USB_NET_MCS7830 | 1 + baseconfig/CONFIG_USB_NET_NET1080 | 1 + baseconfig/CONFIG_USB_NET_PLUSB | 1 + baseconfig/CONFIG_USB_NET_QMI_WWAN | 1 + baseconfig/CONFIG_USB_NET_RNDIS_HOST | 1 + baseconfig/CONFIG_USB_NET_RNDIS_WLAN | 1 + baseconfig/CONFIG_USB_NET_SMSC75XX | 1 + baseconfig/CONFIG_USB_NET_SMSC95XX | 1 + baseconfig/CONFIG_USB_NET_SR9700 | 1 + baseconfig/CONFIG_USB_NET_SR9800 | 1 + baseconfig/CONFIG_USB_NET_ZAURUS | 1 + baseconfig/CONFIG_USB_OHCI_HCD | 1 + baseconfig/CONFIG_USB_OHCI_HCD_PCI | 1 + baseconfig/CONFIG_USB_OHCI_HCD_PLATFORM | 1 + baseconfig/CONFIG_USB_OHCI_HCD_SSB | 1 + baseconfig/CONFIG_USB_OTG | 1 + baseconfig/CONFIG_USB_OTG_FSM | 1 + baseconfig/CONFIG_USB_OTG_WHITELIST | 1 + baseconfig/CONFIG_USB_OXU210HP_HCD | 1 + baseconfig/CONFIG_USB_PEGASUS | 1 + baseconfig/CONFIG_USB_PHY | 1 + baseconfig/CONFIG_USB_PRINTER | 1 + baseconfig/CONFIG_USB_PULSE8_CEC | 1 + baseconfig/CONFIG_USB_PWC | 1 + baseconfig/CONFIG_USB_PWC_DEBUG | 1 + baseconfig/CONFIG_USB_PWC_INPUT_EVDEV | 1 + baseconfig/CONFIG_USB_R8A66597_HCD | 1 + baseconfig/CONFIG_USB_RAREMONO | 1 + baseconfig/CONFIG_USB_RIO500 | 1 + baseconfig/CONFIG_USB_RTL8150 | 1 + baseconfig/CONFIG_USB_RTL8152 | 1 + baseconfig/CONFIG_USB_S2255 | 1 + baseconfig/CONFIG_USB_SERIAL | 1 + baseconfig/CONFIG_USB_SERIAL_AIRCABLE | 1 + baseconfig/CONFIG_USB_SERIAL_ARK3116 | 1 + baseconfig/CONFIG_USB_SERIAL_BELKIN | 1 + baseconfig/CONFIG_USB_SERIAL_CH341 | 1 + baseconfig/CONFIG_USB_SERIAL_CONSOLE | 1 + baseconfig/CONFIG_USB_SERIAL_CP210X | 1 + baseconfig/CONFIG_USB_SERIAL_CYBERJACK | 1 + baseconfig/CONFIG_USB_SERIAL_CYPRESS_M8 | 1 + baseconfig/CONFIG_USB_SERIAL_DEBUG | 1 + baseconfig/CONFIG_USB_SERIAL_DIGI_ACCELEPORT | 1 + baseconfig/CONFIG_USB_SERIAL_EDGEPORT | 1 + baseconfig/CONFIG_USB_SERIAL_EDGEPORT_TI | 1 + baseconfig/CONFIG_USB_SERIAL_EMPEG | 1 + baseconfig/CONFIG_USB_SERIAL_F81232 | 1 + baseconfig/CONFIG_USB_SERIAL_F8153X | 1 + baseconfig/CONFIG_USB_SERIAL_FTDI_SIO | 1 + baseconfig/CONFIG_USB_SERIAL_GARMIN | 1 + baseconfig/CONFIG_USB_SERIAL_GENERIC | 1 + baseconfig/CONFIG_USB_SERIAL_IPAQ | 1 + baseconfig/CONFIG_USB_SERIAL_IPW | 1 + baseconfig/CONFIG_USB_SERIAL_IR | 1 + baseconfig/CONFIG_USB_SERIAL_IUU | 1 + baseconfig/CONFIG_USB_SERIAL_KEYSPAN | 1 + baseconfig/CONFIG_USB_SERIAL_KEYSPAN_MPR | 1 + baseconfig/CONFIG_USB_SERIAL_KEYSPAN_PDA | 1 + baseconfig/CONFIG_USB_SERIAL_KEYSPAN_USA18X | 1 + baseconfig/CONFIG_USB_SERIAL_KEYSPAN_USA19 | 1 + baseconfig/CONFIG_USB_SERIAL_KEYSPAN_USA19QI | 1 + baseconfig/CONFIG_USB_SERIAL_KEYSPAN_USA19QW | 1 + baseconfig/CONFIG_USB_SERIAL_KEYSPAN_USA19W | 1 + baseconfig/CONFIG_USB_SERIAL_KEYSPAN_USA28 | 1 + baseconfig/CONFIG_USB_SERIAL_KEYSPAN_USA28X | 1 + baseconfig/CONFIG_USB_SERIAL_KEYSPAN_USA28XA | 1 + baseconfig/CONFIG_USB_SERIAL_KEYSPAN_USA28XB | 1 + baseconfig/CONFIG_USB_SERIAL_KEYSPAN_USA49W | 1 + baseconfig/CONFIG_USB_SERIAL_KEYSPAN_USA49WLC | 1 + baseconfig/CONFIG_USB_SERIAL_KLSI | 1 + baseconfig/CONFIG_USB_SERIAL_KOBIL_SCT | 1 + baseconfig/CONFIG_USB_SERIAL_MCT_U232 | 1 + baseconfig/CONFIG_USB_SERIAL_METRO | 1 + baseconfig/CONFIG_USB_SERIAL_MOS7715_PARPORT | 1 + baseconfig/CONFIG_USB_SERIAL_MOS7720 | 1 + baseconfig/CONFIG_USB_SERIAL_MOS7840 | 1 + baseconfig/CONFIG_USB_SERIAL_MXUPORT | 1 + baseconfig/CONFIG_USB_SERIAL_NAVMAN | 1 + baseconfig/CONFIG_USB_SERIAL_OMNINET | 1 + baseconfig/CONFIG_USB_SERIAL_OPTICON | 1 + baseconfig/CONFIG_USB_SERIAL_OPTION | 1 + baseconfig/CONFIG_USB_SERIAL_OTI6858 | 1 + baseconfig/CONFIG_USB_SERIAL_PL2303 | 1 + baseconfig/CONFIG_USB_SERIAL_QCAUX | 1 + baseconfig/CONFIG_USB_SERIAL_QT2 | 1 + baseconfig/CONFIG_USB_SERIAL_QUALCOMM | 1 + baseconfig/CONFIG_USB_SERIAL_SAFE | 1 + baseconfig/CONFIG_USB_SERIAL_SAFE_PADDED | 1 + baseconfig/CONFIG_USB_SERIAL_SIERRAWIRELESS | 1 + baseconfig/CONFIG_USB_SERIAL_SIMPLE | 1 + baseconfig/CONFIG_USB_SERIAL_SPCP8X5 | 1 + baseconfig/CONFIG_USB_SERIAL_SSU100 | 1 + baseconfig/CONFIG_USB_SERIAL_SYMBOL | 1 + baseconfig/CONFIG_USB_SERIAL_TI | 1 + baseconfig/CONFIG_USB_SERIAL_VISOR | 1 + baseconfig/CONFIG_USB_SERIAL_WHITEHEAT | 1 + baseconfig/CONFIG_USB_SERIAL_WISHBONE | 1 + baseconfig/CONFIG_USB_SERIAL_XIRCOM | 1 + baseconfig/CONFIG_USB_SERIAL_XSENS_MT | 1 + baseconfig/CONFIG_USB_SEVSEG | 1 + baseconfig/CONFIG_USB_SI470X | 1 + baseconfig/CONFIG_USB_SI4713 | 1 + baseconfig/CONFIG_USB_SIERRA_NET | 1 + baseconfig/CONFIG_USB_SISUSBVGA | 1 + baseconfig/CONFIG_USB_SISUSBVGA_CON | 1 + baseconfig/CONFIG_USB_SL811_CS | 1 + baseconfig/CONFIG_USB_SL811_HCD | 1 + baseconfig/CONFIG_USB_SL811_HCD_ISO | 1 + baseconfig/CONFIG_USB_SPEEDTOUCH | 1 + baseconfig/CONFIG_USB_STKWEBCAM | 1 + baseconfig/CONFIG_USB_STORAGE | 1 + baseconfig/CONFIG_USB_STORAGE_ALAUDA | 1 + baseconfig/CONFIG_USB_STORAGE_CYPRESS_ATACB | 1 + baseconfig/CONFIG_USB_STORAGE_DATAFAB | 1 + baseconfig/CONFIG_USB_STORAGE_DEBUG | 1 + baseconfig/CONFIG_USB_STORAGE_ENE_UB6250 | 1 + baseconfig/CONFIG_USB_STORAGE_FREECOM | 1 + baseconfig/CONFIG_USB_STORAGE_ISD200 | 1 + baseconfig/CONFIG_USB_STORAGE_JUMPSHOT | 1 + baseconfig/CONFIG_USB_STORAGE_KARMA | 1 + baseconfig/CONFIG_USB_STORAGE_ONETOUCH | 1 + baseconfig/CONFIG_USB_STORAGE_REALTEK | 1 + baseconfig/CONFIG_USB_STORAGE_SDDR09 | 1 + baseconfig/CONFIG_USB_STORAGE_SDDR55 | 1 + baseconfig/CONFIG_USB_STORAGE_USBAT | 1 + baseconfig/CONFIG_USB_STV06XX | 1 + baseconfig/CONFIG_USB_SUPPORT | 1 + baseconfig/CONFIG_USB_SWITCH_FSA9480 | 1 + baseconfig/CONFIG_USB_TEST | 1 + baseconfig/CONFIG_USB_TMC | 1 + baseconfig/CONFIG_USB_TRANCEVIBRATOR | 1 + baseconfig/CONFIG_USB_U132_HCD | 1 + baseconfig/CONFIG_USB_UAS | 1 + baseconfig/CONFIG_USB_UEAGLEATM | 1 + baseconfig/CONFIG_USB_UHCI_HCD | 1 + baseconfig/CONFIG_USB_ULPI_BUS | 1 + baseconfig/CONFIG_USB_USBNET | 1 + baseconfig/CONFIG_USB_USS720 | 1 + baseconfig/CONFIG_USB_VIDEO_CLASS | 1 + baseconfig/CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV | 1 + baseconfig/CONFIG_USB_VL600 | 1 + baseconfig/CONFIG_USB_WDM | 1 + baseconfig/CONFIG_USB_WHCI_HCD | 1 + baseconfig/CONFIG_USB_WUSB | 1 + baseconfig/CONFIG_USB_WUSB_CBAF | 1 + baseconfig/CONFIG_USB_WUSB_CBAF_DEBUG | 1 + baseconfig/CONFIG_USB_XHCI_HCD | 1 + baseconfig/CONFIG_USB_XHCI_PLATFORM | 1 + baseconfig/CONFIG_USB_XUSBATM | 1 + baseconfig/CONFIG_USB_YUREX | 1 + baseconfig/CONFIG_USB_ZD1201 | 1 + baseconfig/CONFIG_USB_ZR364XX | 1 + baseconfig/CONFIG_USELIB | 1 + baseconfig/CONFIG_USERFAULTFD | 1 + baseconfig/CONFIG_USERIO | 1 + baseconfig/CONFIG_USER_NS | 1 + baseconfig/CONFIG_USE_THIN_ARCHIVES | 1 + baseconfig/CONFIG_UTS_NS | 1 + baseconfig/CONFIG_UWB | 1 + baseconfig/CONFIG_UWB_HWA | 1 + baseconfig/CONFIG_UWB_I1480U | 1 + baseconfig/CONFIG_UWB_WHCI | 1 + baseconfig/CONFIG_V4L2_FLASH_LED_CLASS | 1 + baseconfig/CONFIG_V4L_MEM2MEM_DRIVERS | 1 + baseconfig/CONFIG_V4L_PLATFORM_DRIVERS | 1 + baseconfig/CONFIG_V4L_TEST_DRIVERS | 1 + baseconfig/CONFIG_VCNL4000 | 1 + baseconfig/CONFIG_VEML6070 | 1 + baseconfig/CONFIG_VETH | 1 + baseconfig/CONFIG_VF610_ADC | 1 + baseconfig/CONFIG_VF610_DAC | 1 + baseconfig/CONFIG_VFAT_FS | 1 + baseconfig/CONFIG_VFIO | 1 + baseconfig/CONFIG_VFIO_IOMMU_TYPE1 | 1 + baseconfig/CONFIG_VFIO_MDEV | 1 + baseconfig/CONFIG_VFIO_MDEV_DEVICE | 1 + baseconfig/CONFIG_VFIO_NOIOMMU | 1 + baseconfig/CONFIG_VFIO_PCI | 1 + baseconfig/CONFIG_VGACON_SOFT_SCROLLBACK | 1 + baseconfig/CONFIG_VGACON_SOFT_SCROLLBACK_SIZE | 1 + baseconfig/CONFIG_VGA_ARB | 1 + baseconfig/CONFIG_VGA_ARB_MAX_GPUS | 1 + baseconfig/CONFIG_VGA_CONSOLE | 1 + baseconfig/CONFIG_VHOST_CROSS_ENDIAN_LEGACY | 1 + baseconfig/CONFIG_VHOST_NET | 1 + baseconfig/CONFIG_VHOST_SCSI | 1 + baseconfig/CONFIG_VHOST_VSOCK | 1 + baseconfig/CONFIG_VIA_FIR | 1 + baseconfig/CONFIG_VIA_RHINE | 1 + baseconfig/CONFIG_VIA_RHINE_MMIO | 1 + baseconfig/CONFIG_VIA_VELOCITY | 1 + baseconfig/CONFIG_VIDEO_ADV_DEBUG | 1 + baseconfig/CONFIG_VIDEO_AU0828 | 1 + baseconfig/CONFIG_VIDEO_AU0828_RC | 1 + baseconfig/CONFIG_VIDEO_AU0828_V4L2 | 1 + baseconfig/CONFIG_VIDEO_BT848 | 1 + baseconfig/CONFIG_VIDEO_CAFE_CCIC | 1 + baseconfig/CONFIG_VIDEO_CPIA | 1 + baseconfig/CONFIG_VIDEO_CPIA2 | 1 + baseconfig/CONFIG_VIDEO_CX18 | 1 + baseconfig/CONFIG_VIDEO_CX18_ALSA | 1 + baseconfig/CONFIG_VIDEO_CX231XX | 1 + baseconfig/CONFIG_VIDEO_CX231XX_ALSA | 1 + baseconfig/CONFIG_VIDEO_CX231XX_DVB | 1 + baseconfig/CONFIG_VIDEO_CX231XX_RC | 1 + baseconfig/CONFIG_VIDEO_CX23885 | 1 + baseconfig/CONFIG_VIDEO_CX25821 | 1 + baseconfig/CONFIG_VIDEO_CX88 | 1 + baseconfig/CONFIG_VIDEO_CX88_ALSA | 1 + baseconfig/CONFIG_VIDEO_CX88_BLACKBIRD | 1 + baseconfig/CONFIG_VIDEO_CX88_DVB | 1 + baseconfig/CONFIG_VIDEO_CX88_ENABLE_VP3054 | 1 + baseconfig/CONFIG_VIDEO_CX88_VP3054 | 1 + baseconfig/CONFIG_VIDEO_DEV | 1 + baseconfig/CONFIG_VIDEO_DT3155 | 1 + baseconfig/CONFIG_VIDEO_EM28XX | 1 + baseconfig/CONFIG_VIDEO_EM28XX_ALSA | 1 + baseconfig/CONFIG_VIDEO_EM28XX_DVB | 1 + baseconfig/CONFIG_VIDEO_EM28XX_RC | 1 + baseconfig/CONFIG_VIDEO_EM28XX_V4L2 | 1 + baseconfig/CONFIG_VIDEO_FB_IVTV | 1 + baseconfig/CONFIG_VIDEO_FIXED_MINOR_RANGES | 1 + baseconfig/CONFIG_VIDEO_GO7007 | 1 + baseconfig/CONFIG_VIDEO_GO7007_LOADER | 1 + baseconfig/CONFIG_VIDEO_GO7007_USB | 1 + .../CONFIG_VIDEO_GO7007_USB_S2250_BOARD | 1 + baseconfig/CONFIG_VIDEO_HDPVR | 1 + baseconfig/CONFIG_VIDEO_HEXIUM_GEMINI | 1 + baseconfig/CONFIG_VIDEO_HEXIUM_ORION | 1 + baseconfig/CONFIG_VIDEO_IVTV | 1 + baseconfig/CONFIG_VIDEO_IVTV_ALSA | 1 + baseconfig/CONFIG_VIDEO_M5MOLS | 1 + baseconfig/CONFIG_VIDEO_MEM2MEM_DEINTERLACE | 1 + baseconfig/CONFIG_VIDEO_MEYE | 1 + baseconfig/CONFIG_VIDEO_MXB | 1 + baseconfig/CONFIG_VIDEO_NOON010PC30 | 1 + baseconfig/CONFIG_VIDEO_PCI_SKELETON | 1 + baseconfig/CONFIG_VIDEO_PVRUSB2 | 1 + baseconfig/CONFIG_VIDEO_PVRUSB2_DEBUGIFC | 1 + baseconfig/CONFIG_VIDEO_PVRUSB2_DVB | 1 + baseconfig/CONFIG_VIDEO_PVRUSB2_SYSFS | 1 + baseconfig/CONFIG_VIDEO_RENESAS_VSP1 | 1 + baseconfig/CONFIG_VIDEO_SAA6588 | 1 + baseconfig/CONFIG_VIDEO_SAA7134 | 1 + baseconfig/CONFIG_VIDEO_SAA7134_ALSA | 1 + baseconfig/CONFIG_VIDEO_SAA7134_DVB | 1 + baseconfig/CONFIG_VIDEO_SAA7134_GO7007 | 1 + baseconfig/CONFIG_VIDEO_SAA7134_RC | 1 + baseconfig/CONFIG_VIDEO_SAA7146 | 1 + baseconfig/CONFIG_VIDEO_SAA7146_VV | 1 + baseconfig/CONFIG_VIDEO_SAA7164 | 1 + baseconfig/CONFIG_VIDEO_SAMSUNG_S5P_CEC | 1 + baseconfig/CONFIG_VIDEO_SH_MOBILE_CEU | 1 + baseconfig/CONFIG_VIDEO_SH_MOBILE_CSI2 | 1 + baseconfig/CONFIG_VIDEO_SH_VEU | 1 + baseconfig/CONFIG_VIDEO_SOLO6X10 | 1 + baseconfig/CONFIG_VIDEO_SR030PC30 | 1 + baseconfig/CONFIG_VIDEO_STK1160 | 1 + baseconfig/CONFIG_VIDEO_STK1160_AC97 | 1 + baseconfig/CONFIG_VIDEO_STK1160_COMMON | 1 + baseconfig/CONFIG_VIDEO_TM6000 | 1 + baseconfig/CONFIG_VIDEO_TM6000_ALSA | 1 + baseconfig/CONFIG_VIDEO_TM6000_DVB | 1 + baseconfig/CONFIG_VIDEO_TUNER | 1 + baseconfig/CONFIG_VIDEO_TW5864 | 1 + baseconfig/CONFIG_VIDEO_TW68 | 1 + baseconfig/CONFIG_VIDEO_TW686X | 1 + baseconfig/CONFIG_VIDEO_TW686X_KH | 1 + baseconfig/CONFIG_VIDEO_USBTV | 1 + baseconfig/CONFIG_VIDEO_USBVISION | 1 + baseconfig/CONFIG_VIDEO_V4L2 | 1 + baseconfig/CONFIG_VIDEO_V4L2_SUBDEV_API | 1 + baseconfig/CONFIG_VIDEO_VIVI | 1 + baseconfig/CONFIG_VIDEO_VIVID | 1 + baseconfig/CONFIG_VIDEO_XILINX | 1 + baseconfig/CONFIG_VIDEO_ZORAN | 1 + baseconfig/CONFIG_VIDEO_ZORAN_AVS6EYES | 1 + baseconfig/CONFIG_VIDEO_ZORAN_BUZ | 1 + baseconfig/CONFIG_VIDEO_ZORAN_DC10 | 1 + baseconfig/CONFIG_VIDEO_ZORAN_DC30 | 1 + baseconfig/CONFIG_VIDEO_ZORAN_LML33 | 1 + baseconfig/CONFIG_VIDEO_ZORAN_LML33R10 | 1 + baseconfig/CONFIG_VIDEO_ZORAN_ZR36060 | 1 + baseconfig/CONFIG_VIPERBOARD_ADC | 1 + baseconfig/CONFIG_VIRTIO_BALLOON | 1 + baseconfig/CONFIG_VIRTIO_BLK | 1 + baseconfig/CONFIG_VIRTIO_CONSOLE | 1 + baseconfig/CONFIG_VIRTIO_INPUT | 1 + baseconfig/CONFIG_VIRTIO_MMIO | 1 + baseconfig/CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES | 1 + baseconfig/CONFIG_VIRTIO_NET | 1 + baseconfig/CONFIG_VIRTIO_PCI | 1 + baseconfig/CONFIG_VIRTIO_PCI_LEGACY | 1 + baseconfig/CONFIG_VIRTIO_VSOCKETS | 1 + baseconfig/CONFIG_VIRTUALIZATION | 1 + baseconfig/CONFIG_VIRT_DRIVERS | 1 + baseconfig/CONFIG_VITESSE_PHY | 1 + baseconfig/CONFIG_VLAN_8021Q | 1 + baseconfig/CONFIG_VLAN_8021Q_GVRP | 1 + baseconfig/CONFIG_VLAN_8021Q_MVRP | 1 + baseconfig/CONFIG_VLSI_FIR | 1 + baseconfig/CONFIG_VME_BUS | 1 + baseconfig/CONFIG_VMWARE_BALLOON | 1 + baseconfig/CONFIG_VMWARE_PVSCSI | 1 + baseconfig/CONFIG_VMXNET3 | 1 + baseconfig/CONFIG_VORTEX | 1 + baseconfig/CONFIG_VSOCKETS | 1 + baseconfig/CONFIG_VT | 1 + baseconfig/CONFIG_VT6655 | 1 + baseconfig/CONFIG_VT6656 | 1 + baseconfig/CONFIG_VT_CONSOLE | 1 + baseconfig/CONFIG_VT_HW_CONSOLE_BINDING | 1 + baseconfig/CONFIG_VXFS_FS | 1 + baseconfig/CONFIG_VXGE | 1 + baseconfig/CONFIG_VXGE_DEBUG_TRACE_ALL | 1 + baseconfig/CONFIG_VXLAN | 1 + baseconfig/CONFIG_VZ89X | 1 + baseconfig/CONFIG_W1 | 1 + baseconfig/CONFIG_W1_CON | 1 + baseconfig/CONFIG_W1_MASTER_DS1WM | 1 + baseconfig/CONFIG_W1_MASTER_DS2482 | 1 + baseconfig/CONFIG_W1_MASTER_DS2490 | 1 + baseconfig/CONFIG_W1_MASTER_GPIO | 1 + baseconfig/CONFIG_W1_MASTER_MATROX | 1 + baseconfig/CONFIG_W1_SLAVE_BQ27000 | 1 + baseconfig/CONFIG_W1_SLAVE_DS2406 | 1 + baseconfig/CONFIG_W1_SLAVE_DS2408 | 1 + baseconfig/CONFIG_W1_SLAVE_DS2408_READBACK | 1 + baseconfig/CONFIG_W1_SLAVE_DS2413 | 1 + baseconfig/CONFIG_W1_SLAVE_DS2423 | 1 + baseconfig/CONFIG_W1_SLAVE_DS2431 | 1 + baseconfig/CONFIG_W1_SLAVE_DS2433 | 1 + baseconfig/CONFIG_W1_SLAVE_DS2433_CRC | 1 + baseconfig/CONFIG_W1_SLAVE_DS2760 | 1 + baseconfig/CONFIG_W1_SLAVE_DS2780 | 1 + baseconfig/CONFIG_W1_SLAVE_DS2781 | 1 + baseconfig/CONFIG_W1_SLAVE_DS28E04 | 1 + baseconfig/CONFIG_W1_SLAVE_SMEM | 1 + baseconfig/CONFIG_W1_SLAVE_THERM | 1 + baseconfig/CONFIG_W83627HF_WDT | 1 + baseconfig/CONFIG_W83877F_WDT | 1 + baseconfig/CONFIG_W83977F_WDT | 1 + baseconfig/CONFIG_WAFER_WDT | 1 + baseconfig/CONFIG_WAN | 1 + baseconfig/CONFIG_WATCHDOG | 1 + baseconfig/CONFIG_WATCHDOG_CORE | 1 + baseconfig/CONFIG_WATCHDOG_NOWAYOUT | 1 + baseconfig/CONFIG_WATCHDOG_PRETIMEOUT_GOV | 1 + baseconfig/CONFIG_WATCHDOG_SYSFS | 1 + baseconfig/CONFIG_WCN36XX | 1 + baseconfig/CONFIG_WCN36XX_DEBUGFS | 1 + baseconfig/CONFIG_WDAT_WDT | 1 + baseconfig/CONFIG_WDTPCI | 1 + baseconfig/CONFIG_WIL6210 | 1 + baseconfig/CONFIG_WIL6210_ISR_COR | 1 + baseconfig/CONFIG_WIL6210_TRACING | 1 + baseconfig/CONFIG_WILC1000_SDIO | 1 + baseconfig/CONFIG_WILC1000_SPI | 1 + baseconfig/CONFIG_WILINK_PLATFORM_DATA | 1 + baseconfig/CONFIG_WIMAX | 1 + baseconfig/CONFIG_WINBOND_840 | 1 + baseconfig/CONFIG_WINBOND_FIR | 1 + baseconfig/CONFIG_WIRELESS | 1 + baseconfig/CONFIG_WIRELESS_EXT | 1 + baseconfig/CONFIG_WIZNET_W5100 | 1 + baseconfig/CONFIG_WIZNET_W5100_SPI | 1 + baseconfig/CONFIG_WIZNET_W5300 | 1 + baseconfig/CONFIG_WL1251 | 1 + baseconfig/CONFIG_WL1251_SDIO | 1 + baseconfig/CONFIG_WL1251_SPI | 1 + baseconfig/CONFIG_WL12XX | 1 + baseconfig/CONFIG_WL18XX | 1 + baseconfig/CONFIG_WLAN | 1 + baseconfig/CONFIG_WLAN_VENDOR_ADMTEK | 1 + baseconfig/CONFIG_WLAN_VENDOR_ATH | 1 + baseconfig/CONFIG_WLAN_VENDOR_ATMEL | 1 + baseconfig/CONFIG_WLAN_VENDOR_BROADCOM | 1 + baseconfig/CONFIG_WLAN_VENDOR_CISCO | 1 + baseconfig/CONFIG_WLAN_VENDOR_INTEL | 1 + baseconfig/CONFIG_WLAN_VENDOR_INTERSIL | 1 + baseconfig/CONFIG_WLAN_VENDOR_MARVELL | 1 + baseconfig/CONFIG_WLAN_VENDOR_MEDIATEK | 1 + baseconfig/CONFIG_WLAN_VENDOR_RALINK | 1 + baseconfig/CONFIG_WLAN_VENDOR_REALTEK | 1 + baseconfig/CONFIG_WLAN_VENDOR_RSI | 1 + baseconfig/CONFIG_WLAN_VENDOR_ST | 1 + baseconfig/CONFIG_WLAN_VENDOR_TI | 1 + baseconfig/CONFIG_WLAN_VENDOR_ZYDAS | 1 + baseconfig/CONFIG_WLCORE | 1 + baseconfig/CONFIG_WLCORE_SDIO | 1 + baseconfig/CONFIG_WLCORE_SPI | 1 + baseconfig/CONFIG_WM831X_POWER | 1 + baseconfig/CONFIG_WM831X_WATCHDOG | 1 + baseconfig/CONFIG_WM8350_POWER | 1 + baseconfig/CONFIG_WM8350_WATCHDOG | 1 + baseconfig/CONFIG_WQ_POWER_EFFICIENT_DEFAULT | 1 + baseconfig/CONFIG_WQ_WATCHDOG | 1 + baseconfig/CONFIG_X25 | 1 + ...NFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK | 1 + baseconfig/CONFIG_X86_PTDUMP | 1 + baseconfig/CONFIG_XFRM | 1 + baseconfig/CONFIG_XFRM_MIGRATE | 1 + baseconfig/CONFIG_XFRM_STATISTICS | 1 + baseconfig/CONFIG_XFRM_SUB_POLICY | 1 + baseconfig/CONFIG_XFRM_USER | 1 + baseconfig/CONFIG_XFS_DEBUG | 1 + baseconfig/CONFIG_XFS_FS | 1 + baseconfig/CONFIG_XFS_POSIX_ACL | 1 + baseconfig/CONFIG_XFS_QUOTA | 1 + baseconfig/CONFIG_XFS_RT | 1 + baseconfig/CONFIG_XFS_WARN | 1 + baseconfig/CONFIG_XILINX_DMA | 1 + baseconfig/CONFIG_XILINX_GMII2RGMII | 1 + baseconfig/CONFIG_XILINX_WATCHDOG | 1 + baseconfig/CONFIG_XILLYBUS | 1 + baseconfig/CONFIG_XILLYBUS_OF | 1 + baseconfig/CONFIG_XILLYBUS_PCIE | 1 + baseconfig/CONFIG_XZ_DEC | 1 + baseconfig/CONFIG_XZ_DEC_IA64 | 1 + baseconfig/CONFIG_XZ_DEC_POWERPC | 1 + baseconfig/CONFIG_XZ_DEC_SPARC | 1 + baseconfig/CONFIG_XZ_DEC_TEST | 1 + baseconfig/CONFIG_XZ_DEC_X86 | 1 + baseconfig/CONFIG_YAM | 1 + baseconfig/CONFIG_YELLOWFIN | 1 + baseconfig/CONFIG_YENTA | 1 + baseconfig/CONFIG_Z3FOLD | 1 + baseconfig/CONFIG_ZBUD | 1 + baseconfig/CONFIG_ZD1211RW | 1 + baseconfig/CONFIG_ZD1211RW_DEBUG | 1 + baseconfig/CONFIG_ZEROPLUS_FF | 1 + baseconfig/CONFIG_ZIIRAVE_WATCHDOG | 1 + baseconfig/CONFIG_ZISOFS | 1 + baseconfig/CONFIG_ZLIB_DEFLATE | 1 + baseconfig/CONFIG_ZLIB_INFLATE | 1 + baseconfig/CONFIG_ZPA2326 | 1 + baseconfig/CONFIG_ZRAM | 1 + baseconfig/CONFIG_ZSMALLOC | 1 + baseconfig/CONFIG_ZSMALLOC_STAT | 1 + baseconfig/CONFIG_ZSWAP | 1 + baseconfig/arm/CONFIG_AFFS_FS | 1 + baseconfig/arm/CONFIG_AGP | 1 + baseconfig/arm/CONFIG_AHCI_MVEBU | 1 + baseconfig/arm/CONFIG_AHCI_TEGRA | 1 + baseconfig/arm/CONFIG_ARCH_BCM | 1 + baseconfig/arm/CONFIG_ARCH_BCM2835 | 1 + baseconfig/arm/CONFIG_ARCH_BCM_21664 | 1 + baseconfig/arm/CONFIG_ARCH_BCM_23550 | 1 + baseconfig/arm/CONFIG_ARCH_BCM_281XX | 1 + baseconfig/arm/CONFIG_ARCH_BCM_5301X | 1 + baseconfig/arm/CONFIG_ARCH_BCM_53573 | 1 + baseconfig/arm/CONFIG_ARCH_BCM_63XX | 1 + baseconfig/arm/CONFIG_ARCH_BCM_CYGNUS | 1 + baseconfig/arm/CONFIG_ARCH_BCM_NSP | 1 + baseconfig/arm/CONFIG_ARCH_BERLIN | 1 + baseconfig/arm/CONFIG_ARCH_BRCMSTB | 1 + baseconfig/arm/CONFIG_ARCH_MESON | 1 + baseconfig/arm/CONFIG_ARCH_MVEBU | 1 + baseconfig/arm/CONFIG_ARCH_ROCKCHIP | 1 + baseconfig/arm/CONFIG_ARCH_VEXPRESS | 1 + baseconfig/arm/CONFIG_ARMADA_THERMAL | 1 + baseconfig/arm/CONFIG_ARM_AMBA | 1 + baseconfig/arm/CONFIG_ARM_ARCH_TIMER | 1 + .../arm/CONFIG_ARM_ARCH_TIMER_EVTSTREAM | 1 + baseconfig/arm/CONFIG_ARM_BIG_LITTLE_CPUFREQ | 1 + baseconfig/arm/CONFIG_ARM_BIG_LITTLE_CPUIDLE | 1 + baseconfig/arm/CONFIG_ARM_CCI | 1 + baseconfig/arm/CONFIG_ARM_CCI400_PMU | 1 + baseconfig/arm/CONFIG_ARM_CCI5xx_PMU | 1 + baseconfig/arm/CONFIG_ARM_CCN | 1 + baseconfig/arm/CONFIG_ARM_CHARLCD | 1 + baseconfig/arm/CONFIG_ARM_CPUIDLE | 1 + baseconfig/arm/CONFIG_ARM_CRYPTO | 1 + baseconfig/arm/CONFIG_ARM_DMA_IOMMU_ALIGNMENT | 1 + baseconfig/arm/CONFIG_ARM_DMA_USE_IOMMU | 1 + baseconfig/arm/CONFIG_ARM_DT_BL_CPUFREQ | 1 + baseconfig/arm/CONFIG_ARM_GIC | 1 + baseconfig/arm/CONFIG_ARM_GIC_V2M | 1 + baseconfig/arm/CONFIG_ARM_GIC_V3 | 1 + baseconfig/arm/CONFIG_ARM_GIC_V3_ITS | 1 + baseconfig/arm/CONFIG_ARM_GLOBAL_TIMER | 1 + baseconfig/arm/CONFIG_ARM_MHU | 1 + baseconfig/arm/CONFIG_ARM_PL172_MPMC | 1 + baseconfig/arm/CONFIG_ARM_PMU | 1 + baseconfig/arm/CONFIG_ARM_PSCI | 1 + baseconfig/arm/CONFIG_ARM_PSCI_CHECKER | 1 + baseconfig/arm/CONFIG_ARM_PTDUMP | 1 + baseconfig/arm/CONFIG_ARM_RK3399_DMC_DEVFREQ | 1 + baseconfig/arm/CONFIG_ARM_SCPI_POWER_DOMAIN | 1 + baseconfig/arm/CONFIG_ARM_SCPI_PROTOCOL | 1 + baseconfig/arm/CONFIG_ARM_SMMU | 1 + baseconfig/arm/CONFIG_ARM_SP805_WATCHDOG | 1 + baseconfig/arm/CONFIG_ARM_TEGRA124_CPUFREQ | 1 + baseconfig/arm/CONFIG_ARM_TEGRA20_CPUFREQ | 1 + baseconfig/arm/CONFIG_ARM_TEGRA_DEVFREQ | 1 + baseconfig/arm/CONFIG_ARM_TIMER_SP804 | 1 + baseconfig/arm/CONFIG_ASYMMETRIC_KEY_TYPE | 1 + baseconfig/arm/CONFIG_ATALK | 1 + baseconfig/arm/CONFIG_ATM_DRIVERS | 1 + baseconfig/arm/CONFIG_BACKLIGHT_GENERIC | 1 + baseconfig/arm/CONFIG_BACKLIGHT_GPIO | 1 + baseconfig/arm/CONFIG_BACKLIGHT_PWM | 1 + baseconfig/arm/CONFIG_BCM2835_MBOX | 1 + baseconfig/arm/CONFIG_BCM2835_WDT | 1 + baseconfig/arm/CONFIG_BEFS_FS | 1 + baseconfig/arm/CONFIG_BIG_LITTLE | 1 + baseconfig/arm/CONFIG_BLK_DEV_3W_XXXX_RAID | 1 + baseconfig/arm/CONFIG_BLK_DEV_DAC960 | 1 + baseconfig/arm/CONFIG_CACHE_FEROCEON_L2 | 1 + .../arm/CONFIG_CACHE_FEROCEON_L2_WRITETHROUGH | 1 + baseconfig/arm/CONFIG_CADENCE_WATCHDOG | 1 + baseconfig/arm/CONFIG_CC_STACKPROTECTOR | 1 + baseconfig/arm/CONFIG_CC_STACKPROTECTOR_NONE | 1 + baseconfig/arm/CONFIG_CHECKPOINT_RESTORE | 1 + baseconfig/arm/CONFIG_CLKSRC_VERSATILE | 1 + baseconfig/arm/CONFIG_CLK_SP810 | 1 + baseconfig/arm/CONFIG_CLK_VEXPRESS_OSC | 1 + baseconfig/arm/CONFIG_CLOCK_THERMAL | 1 + baseconfig/arm/CONFIG_CMA | 1 + baseconfig/arm/CONFIG_CMA_ALIGNMENT | 1 + baseconfig/arm/CONFIG_CMA_AREAS | 1 + baseconfig/arm/CONFIG_CMA_DEBUG | 1 + baseconfig/arm/CONFIG_CMA_DEBUGFS | 1 + baseconfig/arm/CONFIG_CMA_SIZE_MBYTES | 1 + baseconfig/arm/CONFIG_CMA_SIZE_SEL_MAX | 1 + baseconfig/arm/CONFIG_CMA_SIZE_SEL_MBYTES | 1 + baseconfig/arm/CONFIG_CMA_SIZE_SEL_MIN | 1 + baseconfig/arm/CONFIG_CMA_SIZE_SEL_PERCENTAGE | 1 + baseconfig/arm/CONFIG_CODA_FS | 1 + baseconfig/arm/CONFIG_COMMON_CLK | 1 + baseconfig/arm/CONFIG_COMMON_CLK_PWM | 1 + baseconfig/arm/CONFIG_COMMON_CLK_RK808 | 1 + baseconfig/arm/CONFIG_COMMON_CLK_SCPI | 1 + baseconfig/arm/CONFIG_COMMON_CLK_SI570 | 1 + baseconfig/arm/CONFIG_COMMON_CLK_VERSATILE | 1 + baseconfig/arm/CONFIG_CORESIGHT | 1 + baseconfig/arm/CONFIG_CPUFREQ_DT | 1 + baseconfig/arm/CONFIG_CPUFREQ_DT_PLATDEV | 1 + baseconfig/arm/CONFIG_CPU_BIG_ENDIAN | 1 + baseconfig/arm/CONFIG_CPU_THERMAL | 1 + baseconfig/arm/CONFIG_CRYPTO_AES_ARM | 1 + baseconfig/arm/CONFIG_CRYPTO_AES_ARM_BS | 1 + baseconfig/arm/CONFIG_CRYPTO_CRC32_ARM64_CE | 1 + baseconfig/arm/CONFIG_CRYPTO_CRC32_ARM_CE | 1 + .../arm/CONFIG_CRYPTO_CRCT10DIF_ARM64_CE | 1 + baseconfig/arm/CONFIG_CRYPTO_CRCT10DIF_ARM_CE | 1 + baseconfig/arm/CONFIG_CRYPTO_CRYPTD | 1 + baseconfig/arm/CONFIG_CRYPTO_DEV_MARVELL_CESA | 1 + baseconfig/arm/CONFIG_CRYPTO_DEV_MV_CESA | 1 + baseconfig/arm/CONFIG_CRYPTO_DEV_ROCKCHIP | 1 + baseconfig/arm/CONFIG_CRYPTO_SHA1_ARM | 1 + baseconfig/arm/CONFIG_CRYPTO_SHA1_ARM_NEON | 1 + baseconfig/arm/CONFIG_CRYPTO_SHA256_ARM | 1 + baseconfig/arm/CONFIG_CRYPTO_SHA256_ARM64 | 1 + baseconfig/arm/CONFIG_CRYPTO_SHA512_ARM | 1 + baseconfig/arm/CONFIG_CRYPTO_SHA512_ARM64 | 1 + baseconfig/arm/CONFIG_CUSE | 1 + .../arm/CONFIG_DEVFREQ_EVENT_ROCKCHIP_DFI | 1 + baseconfig/arm/CONFIG_DEVFREQ_THERMAL | 1 + baseconfig/arm/CONFIG_DEV_APPLETALK | 1 + baseconfig/arm/CONFIG_DMA_BCM2835 | 1 + baseconfig/arm/CONFIG_DMA_CMA | 1 + baseconfig/arm/CONFIG_DMA_OF | 1 + baseconfig/arm/CONFIG_DMA_VIRTUAL_CHANNELS | 1 + baseconfig/arm/CONFIG_DRM_ANALOGIX_DP | 1 + baseconfig/arm/CONFIG_DRM_ARMADA | 1 + baseconfig/arm/CONFIG_DRM_DUMB_VGA_DAC | 1 + baseconfig/arm/CONFIG_DRM_HDLCD | 1 + baseconfig/arm/CONFIG_DRM_HDLCD_SHOW_UNDERRUN | 1 + baseconfig/arm/CONFIG_DRM_MALI_DISPLAY | 1 + baseconfig/arm/CONFIG_DRM_PANEL | 1 + baseconfig/arm/CONFIG_DRM_PANEL_LG_LG4573 | 1 + .../CONFIG_DRM_PANEL_PANASONIC_VVX10F034N00 | 1 + .../arm/CONFIG_DRM_PANEL_SAMSUNG_LD9040 | 1 + .../arm/CONFIG_DRM_PANEL_SAMSUNG_S6E8AA0 | 1 + .../arm/CONFIG_DRM_PANEL_SHARP_LQ101R1SX01 | 1 + .../arm/CONFIG_DRM_PANEL_SHARP_LS043T1LE01 | 1 + baseconfig/arm/CONFIG_DRM_PANEL_SIMPLE | 1 + baseconfig/arm/CONFIG_DRM_ROCKCHIP | 1 + baseconfig/arm/CONFIG_DRM_TEGRA | 1 + baseconfig/arm/CONFIG_DRM_TEGRA_DEBUG | 1 + baseconfig/arm/CONFIG_DRM_TEGRA_STAGING | 1 + baseconfig/arm/CONFIG_DRM_VC4 | 1 + baseconfig/arm/CONFIG_DRM_VMWGFX | 1 + baseconfig/arm/CONFIG_DTC | 1 + baseconfig/arm/CONFIG_DWMAC_IPQ806X | 1 + baseconfig/arm/CONFIG_DWMAC_MESON | 1 + baseconfig/arm/CONFIG_DWMAC_ROCKCHIP | 1 + baseconfig/arm/CONFIG_DW_WATCHDOG | 1 + baseconfig/arm/CONFIG_EARLY_PRINTK | 1 + baseconfig/arm/CONFIG_EDAC_MV64X60 | 1 + baseconfig/arm/CONFIG_EEPROM_AT25 | 1 + baseconfig/arm/CONFIG_EFI | 1 + baseconfig/arm/CONFIG_EFIVAR_FS | 1 + baseconfig/arm/CONFIG_EFI_BOOTLOADER_CONTROL | 1 + baseconfig/arm/CONFIG_EFI_CAPSULE_LOADER | 1 + baseconfig/arm/CONFIG_EFI_VARS | 1 + baseconfig/arm/CONFIG_EFI_VARS_PSTORE | 1 + .../CONFIG_EFI_VARS_PSTORE_DEFAULT_DISABLE | 1 + baseconfig/arm/CONFIG_EMAC_ROCKCHIP | 1 + baseconfig/arm/CONFIG_EXTCON | 1 + baseconfig/arm/CONFIG_EXTCON_ADC_JACK | 1 + baseconfig/arm/CONFIG_EXTCON_GPIO | 1 + baseconfig/arm/CONFIG_EXTCON_MAX3355 | 1 + baseconfig/arm/CONFIG_EXTCON_RT8973A | 1 + baseconfig/arm/CONFIG_EXTCON_SM5502 | 1 + baseconfig/arm/CONFIG_EXTCON_USB_GPIO | 1 + baseconfig/arm/CONFIG_FB_ARMCLCD | 1 + baseconfig/arm/CONFIG_FB_DA8XX | 1 + baseconfig/arm/CONFIG_FB_MODE_HELPERS | 1 + baseconfig/arm/CONFIG_FB_SIMPLE | 1 + baseconfig/arm/CONFIG_FB_SSD1307 | 1 + baseconfig/arm/CONFIG_FIREWIRE | 1 + baseconfig/arm/CONFIG_FORCE_MAX_ZONEORDER | 1 + baseconfig/arm/CONFIG_FSL_XGMAC_MDIO | 1 + baseconfig/arm/CONFIG_FUSION | 1 + baseconfig/arm/CONFIG_GENERIC_PHY | 1 + baseconfig/arm/CONFIG_GENERIC_PINCONF | 1 + baseconfig/arm/CONFIG_GPIO_74XX_MMIO | 1 + baseconfig/arm/CONFIG_GPIO_DEVRES | 1 + baseconfig/arm/CONFIG_GPIO_DWAPB | 1 + baseconfig/arm/CONFIG_GPIO_GENERIC | 1 + baseconfig/arm/CONFIG_GPIO_GENERIC_PLATFORM | 1 + baseconfig/arm/CONFIG_GPIO_MVEBU | 1 + baseconfig/arm/CONFIG_GPIO_PCA953X | 1 + baseconfig/arm/CONFIG_GPIO_PCA953X_IRQ | 1 + baseconfig/arm/CONFIG_GPIO_PL061 | 1 + baseconfig/arm/CONFIG_GPIO_TEGRA | 1 + baseconfig/arm/CONFIG_GPIO_WATCHDOG | 1 + baseconfig/arm/CONFIG_HAMRADIO | 1 + baseconfig/arm/CONFIG_HAVE_PERF_REGS | 1 + .../arm/CONFIG_HAVE_PERF_USER_STACK_DUMP | 1 + baseconfig/arm/CONFIG_HERMES | 1 + baseconfig/arm/CONFIG_HISILICON_IRQ_MBIGEN | 1 + baseconfig/arm/CONFIG_HW_PERF_EVENTS | 1 + baseconfig/arm/CONFIG_HW_RANDOM_BCM2835 | 1 + baseconfig/arm/CONFIG_HW_RANDOM_MESON | 1 + baseconfig/arm/CONFIG_I2C | 1 + baseconfig/arm/CONFIG_I2C_ARB_GPIO_CHALLENGE | 1 + baseconfig/arm/CONFIG_I2C_BCM2835 | 1 + baseconfig/arm/CONFIG_I2C_BOARDINFO | 1 + baseconfig/arm/CONFIG_I2C_DESIGNWARE_CORE | 1 + baseconfig/arm/CONFIG_I2C_DESIGNWARE_PLATFORM | 1 + baseconfig/arm/CONFIG_I2C_GPIO | 1 + baseconfig/arm/CONFIG_I2C_MESON | 1 + baseconfig/arm/CONFIG_I2C_MUX | 1 + baseconfig/arm/CONFIG_I2C_MUX_GPIO | 1 + baseconfig/arm/CONFIG_I2C_MUX_PCA9541 | 1 + baseconfig/arm/CONFIG_I2C_MUX_PCA954x | 1 + baseconfig/arm/CONFIG_I2C_MUX_PINCTRL | 1 + baseconfig/arm/CONFIG_I2C_MUX_REG | 1 + baseconfig/arm/CONFIG_I2C_MV64XXX | 1 + baseconfig/arm/CONFIG_I2C_NOMADIK | 1 + baseconfig/arm/CONFIG_I2C_PXA | 1 + baseconfig/arm/CONFIG_I2C_PXA_SLAVE | 1 + baseconfig/arm/CONFIG_I2C_RK3X | 1 + baseconfig/arm/CONFIG_I2C_TEGRA | 1 + baseconfig/arm/CONFIG_I2C_VERSATILE | 1 + baseconfig/arm/CONFIG_I2O | 1 + baseconfig/arm/CONFIG_IIO_ST_PRESS | 1 + baseconfig/arm/CONFIG_IIO_ST_PRESS_I2C | 1 + baseconfig/arm/CONFIG_IIO_ST_PRESS_SPI | 1 + baseconfig/arm/CONFIG_IIO_SYSFS_TRIGGER | 1 + baseconfig/arm/CONFIG_IMX_IPUV3_CORE | 1 + baseconfig/arm/CONFIG_INPUT_MATRIXKMAP | 1 + baseconfig/arm/CONFIG_INPUT_PWM_BEEPER | 1 + baseconfig/arm/CONFIG_INPUT_SOC_BUTTON_ARRAY | 1 + baseconfig/arm/CONFIG_IOMMU_IO_PGTABLE_ARMV7S | 1 + .../arm/CONFIG_IOMMU_IO_PGTABLE_LPAE_SELFTEST | 1 + baseconfig/arm/CONFIG_IPQ_GCC_4019 | 1 + baseconfig/arm/CONFIG_IPQ_GCC_806X | 1 + baseconfig/arm/CONFIG_IPQ_LCC_806X | 1 + baseconfig/arm/CONFIG_IP_DCCP | 1 + baseconfig/arm/CONFIG_IRQ_DOMAIN_DEBUG | 1 + baseconfig/arm/CONFIG_IR_MESON | 1 + baseconfig/arm/CONFIG_ISDN | 1 + baseconfig/arm/CONFIG_IWMMXT | 1 + baseconfig/arm/CONFIG_KERNEL_MODE_NEON | 1 + baseconfig/arm/CONFIG_KEYBOARD_BCM | 1 + baseconfig/arm/CONFIG_KEYBOARD_GPIO | 1 + baseconfig/arm/CONFIG_KEYBOARD_GPIO_POLLED | 1 + baseconfig/arm/CONFIG_KEYBOARD_TEGRA | 1 + baseconfig/arm/CONFIG_KUSER_HELPERS | 1 + baseconfig/arm/CONFIG_LATTICE_ECP3_CONFIG | 1 + baseconfig/arm/CONFIG_LOCK_STAT | 1 + baseconfig/arm/CONFIG_MAILBOX | 1 + baseconfig/arm/CONFIG_MDIO_BUS_MUX | 1 + baseconfig/arm/CONFIG_MDIO_BUS_MUX_GPIO | 1 + baseconfig/arm/CONFIG_MDIO_BUS_MUX_MMIOREG | 1 + baseconfig/arm/CONFIG_MDIO_GPIO | 1 + baseconfig/arm/CONFIG_MESON_EFUSE | 1 + baseconfig/arm/CONFIG_MESON_SM | 1 + baseconfig/arm/CONFIG_MFD_AC100 | 1 + baseconfig/arm/CONFIG_MFD_NVEC | 1 + baseconfig/arm/CONFIG_MFD_PM8XXX | 1 + baseconfig/arm/CONFIG_MFD_RK808 | 1 + baseconfig/arm/CONFIG_MFD_SPMI_PMIC | 1 + baseconfig/arm/CONFIG_MFD_SUN4I_GPADC | 1 + baseconfig/arm/CONFIG_MFD_SYSCON | 1 + baseconfig/arm/CONFIG_MFD_VEXPRESS_SYSREG | 1 + baseconfig/arm/CONFIG_MFD_WL1273_CORE | 1 + baseconfig/arm/CONFIG_MMC_ARMMMCI | 1 + baseconfig/arm/CONFIG_MMC_DW | 1 + baseconfig/arm/CONFIG_MMC_DW_EXYNOS | 1 + baseconfig/arm/CONFIG_MMC_DW_K3 | 1 + baseconfig/arm/CONFIG_MMC_DW_PCI | 1 + baseconfig/arm/CONFIG_MMC_DW_PLTFM | 1 + baseconfig/arm/CONFIG_MMC_DW_ROCKCHIP | 1 + baseconfig/arm/CONFIG_MMC_MVSDIO | 1 + baseconfig/arm/CONFIG_MMC_QCOM_DML | 1 + baseconfig/arm/CONFIG_MMC_SDHCI_IPROC | 1 + baseconfig/arm/CONFIG_MMC_SDHCI_OF_ARASAN | 1 + baseconfig/arm/CONFIG_MMC_SDHCI_PXAV3 | 1 + baseconfig/arm/CONFIG_MMC_SDHCI_TEGRA | 1 + baseconfig/arm/CONFIG_MMC_SPI | 1 + baseconfig/arm/CONFIG_MTD_AFS_PARTS | 1 + baseconfig/arm/CONFIG_MTD_BLKDEVS | 1 + baseconfig/arm/CONFIG_MTD_BLOCK | 1 + baseconfig/arm/CONFIG_MTD_CFI | 1 + baseconfig/arm/CONFIG_MTD_CFI_ADV_OPTIONS | 1 + baseconfig/arm/CONFIG_MTD_CFI_AMDSTD | 1 + baseconfig/arm/CONFIG_MTD_CFI_INTELEXT | 1 + baseconfig/arm/CONFIG_MTD_CFI_STAA | 1 + baseconfig/arm/CONFIG_MTD_LPDDR2_NVM | 1 + baseconfig/arm/CONFIG_MTD_OF_PARTS | 1 + baseconfig/arm/CONFIG_MTD_PHYSMAP | 1 + baseconfig/arm/CONFIG_MTD_PHYSMAP_COMPAT | 1 + baseconfig/arm/CONFIG_MTD_PHYSMAP_OF | 1 + .../arm/CONFIG_MTD_PHYSMAP_OF_VERSATILE | 1 + baseconfig/arm/CONFIG_MUSB_PIO_ONLY | 1 + baseconfig/arm/CONFIG_MV643XX_ETH | 1 + baseconfig/arm/CONFIG_MVEBU_CLK_CORE | 1 + baseconfig/arm/CONFIG_MVEBU_CLK_COREDIV | 1 + baseconfig/arm/CONFIG_MVEBU_DEVBUS | 1 + baseconfig/arm/CONFIG_MVEBU_MBUS | 1 + baseconfig/arm/CONFIG_MVNETA | 1 + baseconfig/arm/CONFIG_MVNETA_BM_ENABLE | 1 + baseconfig/arm/CONFIG_MV_XOR | 1 + baseconfig/arm/CONFIG_NCP_FS | 1 + baseconfig/arm/CONFIG_NET_TULIP | 1 + baseconfig/arm/CONFIG_NET_VENDOR_3COM | 1 + baseconfig/arm/CONFIG_NET_VENDOR_ADAPTEC | 1 + baseconfig/arm/CONFIG_NET_VENDOR_BROCADE | 1 + baseconfig/arm/CONFIG_NET_VENDOR_CISCO | 1 + baseconfig/arm/CONFIG_NET_VENDOR_DEC | 1 + baseconfig/arm/CONFIG_NET_VENDOR_EXAR | 1 + baseconfig/arm/CONFIG_NET_VENDOR_MELLANOX | 1 + baseconfig/arm/CONFIG_NET_VENDOR_QLOGIC | 1 + baseconfig/arm/CONFIG_NET_VENDOR_SUN | 1 + baseconfig/arm/CONFIG_NET_VENDOR_WIZNET | 1 + baseconfig/arm/CONFIG_NET_VENDOR_XIRCOM | 1 + baseconfig/arm/CONFIG_NOUVEAU_PLATFORM_DRIVER | 1 + baseconfig/arm/CONFIG_OCFS2_FS | 1 + baseconfig/arm/CONFIG_OF | 1 + baseconfig/arm/CONFIG_OF_ADDRESS | 1 + baseconfig/arm/CONFIG_OF_DYNAMIC | 1 + baseconfig/arm/CONFIG_OF_EARLY_FLATTREE | 1 + baseconfig/arm/CONFIG_OF_FLATTREE | 1 + baseconfig/arm/CONFIG_OF_GPIO | 1 + baseconfig/arm/CONFIG_OF_IOMMU | 1 + baseconfig/arm/CONFIG_OF_IRQ | 1 + baseconfig/arm/CONFIG_OF_MDIO | 1 + baseconfig/arm/CONFIG_OF_NET | 1 + baseconfig/arm/CONFIG_OF_OVERLAY | 1 + baseconfig/arm/CONFIG_OF_PCI | 1 + baseconfig/arm/CONFIG_OF_PCI_IRQ | 1 + baseconfig/arm/CONFIG_OF_RESERVED_MEM | 1 + baseconfig/arm/CONFIG_OF_RESOLVE | 1 + baseconfig/arm/CONFIG_OF_UNITTEST | 1 + baseconfig/arm/CONFIG_OMAP_GPMC_DEBUG | 1 + baseconfig/arm/CONFIG_PARAVIRT | 1 + .../arm/CONFIG_PARAVIRT_TIME_ACCOUNTING | 1 + baseconfig/arm/CONFIG_PARPORT | 1 + baseconfig/arm/CONFIG_PATA_OF_PLATFORM | 1 + baseconfig/arm/CONFIG_PATA_PLATFORM | 1 + baseconfig/arm/CONFIG_PCIE_ARMADA_8K | 1 + baseconfig/arm/CONFIG_PCIE_DW | 1 + baseconfig/arm/CONFIG_PCIE_ROCKCHIP | 1 + baseconfig/arm/CONFIG_PCI_AARDVARK | 1 + baseconfig/arm/CONFIG_PCI_HOST_GENERIC | 1 + baseconfig/arm/CONFIG_PCI_MVEBU | 1 + baseconfig/arm/CONFIG_PCI_TEGRA | 1 + baseconfig/arm/CONFIG_PCMCIA | 1 + baseconfig/arm/CONFIG_PHY_MESON8B_USB2 | 1 + baseconfig/arm/CONFIG_PHY_MVEBU_SATA | 1 + baseconfig/arm/CONFIG_PHY_QCOM_IPQ806X_SATA | 1 + baseconfig/arm/CONFIG_PHY_ROCKCHIP_DP | 1 + baseconfig/arm/CONFIG_PHY_ROCKCHIP_EMMC | 1 + baseconfig/arm/CONFIG_PHY_ROCKCHIP_INNO_USB2 | 1 + baseconfig/arm/CONFIG_PHY_ROCKCHIP_PCIE | 1 + baseconfig/arm/CONFIG_PHY_ROCKCHIP_TYPEC | 1 + baseconfig/arm/CONFIG_PHY_ROCKCHIP_USB | 1 + baseconfig/arm/CONFIG_PHY_SAMSUNG_USB2 | 1 + baseconfig/arm/CONFIG_PHY_TEGRA_XUSB | 1 + baseconfig/arm/CONFIG_PID_IN_CONTEXTIDR | 1 + baseconfig/arm/CONFIG_PINCONF | 1 + baseconfig/arm/CONFIG_PINCTRL | 1 + baseconfig/arm/CONFIG_PINCTRL_BAYTRAIL | 1 + baseconfig/arm/CONFIG_PINCTRL_BROXTON | 1 + baseconfig/arm/CONFIG_PINCTRL_CHERRYVIEW | 1 + baseconfig/arm/CONFIG_PINCTRL_IPQ4019 | 1 + baseconfig/arm/CONFIG_PINCTRL_IPQ8064 | 1 + baseconfig/arm/CONFIG_PINCTRL_MVEBU | 1 + baseconfig/arm/CONFIG_PINCTRL_SINGLE | 1 + baseconfig/arm/CONFIG_PINCTRL_SUNRISEPOINT | 1 + baseconfig/arm/CONFIG_PINMUX | 1 + baseconfig/arm/CONFIG_PL320_MBOX | 1 + baseconfig/arm/CONFIG_PL330_DMA | 1 + baseconfig/arm/CONFIG_PLATFORM_MHU | 1 + baseconfig/arm/CONFIG_PM_DEVFREQ_EVENT | 1 + baseconfig/arm/CONFIG_PM_GENERIC_DOMAINS_OF | 1 + baseconfig/arm/CONFIG_PM_OPP | 1 + baseconfig/arm/CONFIG_POWER_AVS | 1 + baseconfig/arm/CONFIG_POWER_RESET_GPIO | 1 + .../arm/CONFIG_POWER_RESET_GPIO_RESTART | 1 + baseconfig/arm/CONFIG_POWER_RESET_RESTART | 1 + baseconfig/arm/CONFIG_POWER_RESET_VERSATILE | 1 + baseconfig/arm/CONFIG_POWER_RESET_VEXPRESS | 1 + baseconfig/arm/CONFIG_PWM | 1 + baseconfig/arm/CONFIG_PWM_BCM2835 | 1 + baseconfig/arm/CONFIG_PWM_FSL_FTM | 1 + baseconfig/arm/CONFIG_PWM_MESON | 1 + baseconfig/arm/CONFIG_PWM_ROCKCHIP | 1 + baseconfig/arm/CONFIG_PWM_SYSFS | 1 + baseconfig/arm/CONFIG_PWM_TEGRA | 1 + baseconfig/arm/CONFIG_QCOM_SPMI_IADC | 1 + baseconfig/arm/CONFIG_QCOM_SPMI_VADC | 1 + baseconfig/arm/CONFIG_QORIQ_THERMAL | 1 + baseconfig/arm/CONFIG_QRTR | 1 + baseconfig/arm/CONFIG_RASPBERRYPI_FIRMWARE | 1 + baseconfig/arm/CONFIG_RASPBERRYPI_POWER | 1 + baseconfig/arm/CONFIG_RCU_FANOUT_LEAF | 1 + baseconfig/arm/CONFIG_RDS | 1 + baseconfig/arm/CONFIG_REGMAP_I2C | 1 + baseconfig/arm/CONFIG_REGMAP_SPMI | 1 + baseconfig/arm/CONFIG_REGULATOR | 1 + baseconfig/arm/CONFIG_REGULATOR_ACT8865 | 1 + baseconfig/arm/CONFIG_REGULATOR_AD5398 | 1 + baseconfig/arm/CONFIG_REGULATOR_ANATOP | 1 + baseconfig/arm/CONFIG_REGULATOR_DA9210 | 1 + baseconfig/arm/CONFIG_REGULATOR_DA9211 | 1 + baseconfig/arm/CONFIG_REGULATOR_FAN53555 | 1 + baseconfig/arm/CONFIG_REGULATOR_FIXED_VOLTAGE | 1 + baseconfig/arm/CONFIG_REGULATOR_GPIO | 1 + baseconfig/arm/CONFIG_REGULATOR_ISL6271A | 1 + baseconfig/arm/CONFIG_REGULATOR_ISL9305 | 1 + baseconfig/arm/CONFIG_REGULATOR_LP3971 | 1 + baseconfig/arm/CONFIG_REGULATOR_LP3972 | 1 + baseconfig/arm/CONFIG_REGULATOR_LP872X | 1 + baseconfig/arm/CONFIG_REGULATOR_LP8755 | 1 + baseconfig/arm/CONFIG_REGULATOR_LTC3589 | 1 + baseconfig/arm/CONFIG_REGULATOR_LTC3676 | 1 + baseconfig/arm/CONFIG_REGULATOR_MAX1586 | 1 + baseconfig/arm/CONFIG_REGULATOR_MAX8649 | 1 + baseconfig/arm/CONFIG_REGULATOR_MAX8660 | 1 + baseconfig/arm/CONFIG_REGULATOR_MAX8952 | 1 + baseconfig/arm/CONFIG_REGULATOR_MAX8973 | 1 + baseconfig/arm/CONFIG_REGULATOR_MT6311 | 1 + baseconfig/arm/CONFIG_REGULATOR_PFUZE100 | 1 + baseconfig/arm/CONFIG_REGULATOR_PV88060 | 1 + baseconfig/arm/CONFIG_REGULATOR_PV88080 | 1 + baseconfig/arm/CONFIG_REGULATOR_PV88090 | 1 + baseconfig/arm/CONFIG_REGULATOR_PWM | 1 + baseconfig/arm/CONFIG_REGULATOR_QCOM_SPMI | 1 + baseconfig/arm/CONFIG_REGULATOR_RK808 | 1 + baseconfig/arm/CONFIG_REGULATOR_TPS51632 | 1 + baseconfig/arm/CONFIG_REGULATOR_TPS62360 | 1 + baseconfig/arm/CONFIG_REGULATOR_TPS65023 | 1 + baseconfig/arm/CONFIG_REGULATOR_TPS6507X | 1 + baseconfig/arm/CONFIG_REGULATOR_TPS6524X | 1 + .../arm/CONFIG_REGULATOR_USERSPACE_CONSUMER | 1 + baseconfig/arm/CONFIG_REGULATOR_VEXPRESS | 1 + .../arm/CONFIG_REGULATOR_VIRTUAL_CONSUMER | 1 + baseconfig/arm/CONFIG_RESET_CONTROLLER | 1 + baseconfig/arm/CONFIG_RESET_GPIO | 1 + baseconfig/arm/CONFIG_RFKILL_REGULATOR | 1 + baseconfig/arm/CONFIG_ROCKCHIP_ANALOGIX_DP | 1 + baseconfig/arm/CONFIG_ROCKCHIP_DW_HDMI | 1 + baseconfig/arm/CONFIG_ROCKCHIP_DW_MIPI_DSI | 1 + baseconfig/arm/CONFIG_ROCKCHIP_EFUSE | 1 + baseconfig/arm/CONFIG_ROCKCHIP_INNO_HDMI | 1 + baseconfig/arm/CONFIG_ROCKCHIP_IODOMAIN | 1 + baseconfig/arm/CONFIG_ROCKCHIP_IOMMU | 1 + baseconfig/arm/CONFIG_ROCKCHIP_MBOX | 1 + baseconfig/arm/CONFIG_ROCKCHIP_PM_DOMAINS | 1 + baseconfig/arm/CONFIG_ROCKCHIP_SARADC | 1 + baseconfig/arm/CONFIG_ROCKCHIP_THERMAL | 1 + baseconfig/arm/CONFIG_RTC_DRV_88PM80X | 1 + baseconfig/arm/CONFIG_RTC_DRV_AC100 | 1 + baseconfig/arm/CONFIG_RTC_DRV_ARMADA38X | 1 + baseconfig/arm/CONFIG_RTC_DRV_HYM8563 | 1 + baseconfig/arm/CONFIG_RTC_DRV_ISL12057 | 1 + baseconfig/arm/CONFIG_RTC_DRV_MAX77686 | 1 + baseconfig/arm/CONFIG_RTC_DRV_MV | 1 + baseconfig/arm/CONFIG_RTC_DRV_PL031 | 1 + baseconfig/arm/CONFIG_RTC_DRV_RK808 | 1 + baseconfig/arm/CONFIG_RTC_DRV_S35390A | 1 + baseconfig/arm/CONFIG_RTC_DRV_TEGRA | 1 + baseconfig/arm/CONFIG_SCHED_MC | 1 + baseconfig/arm/CONFIG_SCHED_SMT | 1 + baseconfig/arm/CONFIG_SCSI_3W_9XXX | 1 + baseconfig/arm/CONFIG_SCSI_3W_SAS | 1 + baseconfig/arm/CONFIG_SCSI_AACRAID | 1 + baseconfig/arm/CONFIG_SCSI_ACARD | 1 + baseconfig/arm/CONFIG_SCSI_AIC79XX | 1 + baseconfig/arm/CONFIG_SCSI_AIC7XXX | 1 + baseconfig/arm/CONFIG_SCSI_BFA_FC | 1 + baseconfig/arm/CONFIG_SCSI_IPS | 1 + baseconfig/arm/CONFIG_SCSI_MPT2SAS | 1 + baseconfig/arm/CONFIG_SCSI_MPT3SAS | 1 + baseconfig/arm/CONFIG_SCSI_PM8001 | 1 + baseconfig/arm/CONFIG_SENSORS_ARM_SCPI | 1 + baseconfig/arm/CONFIG_SENSORS_IIO_HWMON | 1 + baseconfig/arm/CONFIG_SENSORS_VEXPRESS | 1 + baseconfig/arm/CONFIG_SERIAL_8250_BCM2835AUX | 1 + baseconfig/arm/CONFIG_SERIAL_AMBA_PL011 | 1 + .../arm/CONFIG_SERIAL_AMBA_PL011_CONSOLE | 1 + .../arm/CONFIG_SERIAL_EARLYCON_ARM_SEMIHOST | 1 + baseconfig/arm/CONFIG_SERIAL_IFX6X60 | 1 + baseconfig/arm/CONFIG_SERIAL_MAX3100 | 1 + baseconfig/arm/CONFIG_SERIAL_MAX310X | 1 + baseconfig/arm/CONFIG_SERIAL_MESON | 1 + baseconfig/arm/CONFIG_SERIAL_MESON_CONSOLE | 1 + baseconfig/arm/CONFIG_SERIAL_MVEBU_CONSOLE | 1 + baseconfig/arm/CONFIG_SERIAL_MVEBU_UART | 1 + baseconfig/arm/CONFIG_SERIAL_OF_PLATFORM | 1 + baseconfig/arm/CONFIG_SERIAL_TEGRA | 1 + baseconfig/arm/CONFIG_SERIO_AMBAKMI | 1 + baseconfig/arm/CONFIG_SMC911X | 1 + baseconfig/arm/CONFIG_SMC91X | 1 + baseconfig/arm/CONFIG_SND_BCM2835_SOC_I2S | 1 + baseconfig/arm/CONFIG_SND_HDA_TEGRA | 1 + baseconfig/arm/CONFIG_SND_SOC_PCM512x | 1 + baseconfig/arm/CONFIG_SND_SOC_PCM512x_I2C | 1 + baseconfig/arm/CONFIG_SND_SOC_PCM512x_SPI | 1 + baseconfig/arm/CONFIG_SND_SOC_ROCKCHIP | 1 + baseconfig/arm/CONFIG_SND_SOC_ROCKCHIP_I2S | 1 + .../arm/CONFIG_SND_SOC_ROCKCHIP_MAX98090 | 1 + baseconfig/arm/CONFIG_SND_SOC_ROCKCHIP_RT5645 | 1 + baseconfig/arm/CONFIG_SND_SOC_ROCKCHIP_SPDIF | 1 + baseconfig/arm/CONFIG_SND_SOC_TPA6130A2 | 1 + baseconfig/arm/CONFIG_SND_SOC_WM8804 | 1 + baseconfig/arm/CONFIG_SND_SOC_WM8804_I2C | 1 + baseconfig/arm/CONFIG_SND_SOC_WM8804_SPI | 1 + baseconfig/arm/CONFIG_SND_SUN8I_CODEC_ANALOG | 1 + baseconfig/arm/CONFIG_SPI | 1 + baseconfig/arm/CONFIG_SPI_ARMADA_3700 | 1 + baseconfig/arm/CONFIG_SPI_BCM2835 | 1 + baseconfig/arm/CONFIG_SPI_BCM2835AUX | 1 + baseconfig/arm/CONFIG_SPI_BCM_QSPI | 1 + baseconfig/arm/CONFIG_SPI_BITBANG | 1 + baseconfig/arm/CONFIG_SPI_CADENCE | 1 + baseconfig/arm/CONFIG_SPI_DESIGNWARE | 1 + baseconfig/arm/CONFIG_SPI_DW_MID_DMA | 1 + baseconfig/arm/CONFIG_SPI_DW_MMIO | 1 + baseconfig/arm/CONFIG_SPI_DW_PCI | 1 + baseconfig/arm/CONFIG_SPI_GPIO | 1 + baseconfig/arm/CONFIG_SPI_MASTER | 1 + baseconfig/arm/CONFIG_SPI_MESON_SPIFC | 1 + baseconfig/arm/CONFIG_SPI_ORION | 1 + baseconfig/arm/CONFIG_SPI_PL022 | 1 + baseconfig/arm/CONFIG_SPI_ROCKCHIP | 1 + baseconfig/arm/CONFIG_SPI_SPIDEV | 1 + baseconfig/arm/CONFIG_SPI_SUN4I | 1 + baseconfig/arm/CONFIG_SPI_SUN6I | 1 + baseconfig/arm/CONFIG_SPI_TEGRA114 | 1 + baseconfig/arm/CONFIG_SPI_TEGRA20_SFLASH | 1 + baseconfig/arm/CONFIG_SPI_TEGRA20_SLINK | 1 + baseconfig/arm/CONFIG_SPI_ZYNQMP_GQSPI | 1 + baseconfig/arm/CONFIG_SPMI | 1 + baseconfig/arm/CONFIG_SRAM | 1 + baseconfig/arm/CONFIG_SUNXI_RSB | 1 + baseconfig/arm/CONFIG_SWIOTLB | 1 + baseconfig/arm/CONFIG_SYNC_FILE | 1 + baseconfig/arm/CONFIG_SYSV_FS | 1 + baseconfig/arm/CONFIG_TCG_TIS_I2C_ATMEL | 1 + baseconfig/arm/CONFIG_TCS3472 | 1 + baseconfig/arm/CONFIG_TEGRA124_EMC | 1 + baseconfig/arm/CONFIG_TEGRA20_APB_DMA | 1 + baseconfig/arm/CONFIG_TEGRA_AHB | 1 + baseconfig/arm/CONFIG_TEGRA_BPMP | 1 + baseconfig/arm/CONFIG_TEGRA_HOST1X | 1 + baseconfig/arm/CONFIG_TEGRA_HOST1X_FIREWALL | 1 + baseconfig/arm/CONFIG_TEGRA_HSP_MBOX | 1 + baseconfig/arm/CONFIG_TEGRA_IOMMU_SMMU | 1 + baseconfig/arm/CONFIG_TEGRA_IVC | 1 + baseconfig/arm/CONFIG_TEGRA_MC | 1 + baseconfig/arm/CONFIG_TEGRA_SOCTHERM | 1 + baseconfig/arm/CONFIG_TEGRA_WATCHDOG | 1 + baseconfig/arm/CONFIG_THERMAL | 1 + baseconfig/arm/CONFIG_THERMAL_GOV_USER_SPACE | 1 + baseconfig/arm/CONFIG_THERMAL_OF | 1 + baseconfig/arm/CONFIG_TI_DAC7512 | 1 + baseconfig/arm/CONFIG_TLAN | 1 + baseconfig/arm/CONFIG_TMP006 | 1 + baseconfig/arm/CONFIG_TRANSPARENT_HUGEPAGE | 1 + baseconfig/arm/CONFIG_TRUSTED_FOUNDATIONS | 1 + baseconfig/arm/CONFIG_UFS_FS | 1 + baseconfig/arm/CONFIG_USB_AMD5536UDC | 1 + baseconfig/arm/CONFIG_USB_BDC_UDC | 1 + baseconfig/arm/CONFIG_USB_CONFIGFS | 1 + baseconfig/arm/CONFIG_USB_CONFIGFS_ACM | 1 + baseconfig/arm/CONFIG_USB_CONFIGFS_ECM | 1 + baseconfig/arm/CONFIG_USB_CONFIGFS_ECM_SUBSET | 1 + baseconfig/arm/CONFIG_USB_CONFIGFS_EEM | 1 + baseconfig/arm/CONFIG_USB_CONFIGFS_F_FS | 1 + baseconfig/arm/CONFIG_USB_CONFIGFS_F_HID | 1 + baseconfig/arm/CONFIG_USB_CONFIGFS_F_LB_SS | 1 + baseconfig/arm/CONFIG_USB_CONFIGFS_F_MIDI | 1 + baseconfig/arm/CONFIG_USB_CONFIGFS_F_PRINTER | 1 + baseconfig/arm/CONFIG_USB_CONFIGFS_F_TCM | 1 + baseconfig/arm/CONFIG_USB_CONFIGFS_F_UAC1 | 1 + baseconfig/arm/CONFIG_USB_CONFIGFS_F_UAC2 | 1 + baseconfig/arm/CONFIG_USB_CONFIGFS_F_UVC | 1 + .../arm/CONFIG_USB_CONFIGFS_MASS_STORAGE | 1 + baseconfig/arm/CONFIG_USB_CONFIGFS_NCM | 1 + baseconfig/arm/CONFIG_USB_CONFIGFS_OBEX | 1 + baseconfig/arm/CONFIG_USB_CONFIGFS_RNDIS | 1 + baseconfig/arm/CONFIG_USB_CONFIGFS_SERIAL | 1 + baseconfig/arm/CONFIG_USB_DUMMY_HCD | 1 + baseconfig/arm/CONFIG_USB_DWC2 | 1 + baseconfig/arm/CONFIG_USB_DWC2_DEBUG | 1 + baseconfig/arm/CONFIG_USB_DWC2_DUAL_ROLE | 1 + baseconfig/arm/CONFIG_USB_DWC2_PCI | 1 + .../arm/CONFIG_USB_DWC2_TRACK_MISSED_SOFS | 1 + baseconfig/arm/CONFIG_USB_DWC3 | 1 + baseconfig/arm/CONFIG_USB_DWC3_DUAL_ROLE | 1 + baseconfig/arm/CONFIG_USB_DWC3_OF_SIMPLE | 1 + baseconfig/arm/CONFIG_USB_DWC3_PCI | 1 + baseconfig/arm/CONFIG_USB_DWC3_ULPI | 1 + baseconfig/arm/CONFIG_USB_EG20T | 1 + baseconfig/arm/CONFIG_USB_EHCI_HCD_PLATFORM | 1 + baseconfig/arm/CONFIG_USB_EHCI_TEGRA | 1 + baseconfig/arm/CONFIG_USB_FOTG210_UDC | 1 + baseconfig/arm/CONFIG_USB_FUSB300 | 1 + baseconfig/arm/CONFIG_USB_GADGET | 1 + baseconfig/arm/CONFIG_USB_GADGET_DEBUG | 1 + baseconfig/arm/CONFIG_USB_GADGET_DEBUG_FILES | 1 + baseconfig/arm/CONFIG_USB_GADGET_DEBUG_FS | 1 + .../arm/CONFIG_USB_GADGET_STORAGE_NUM_BUFFERS | 1 + baseconfig/arm/CONFIG_USB_GADGET_VBUS_DRAW | 1 + baseconfig/arm/CONFIG_USB_GADGET_XILINX | 1 + baseconfig/arm/CONFIG_USB_GOKU | 1 + baseconfig/arm/CONFIG_USB_GPIO_VBUS | 1 + baseconfig/arm/CONFIG_USB_ISP1760 | 1 + baseconfig/arm/CONFIG_USB_M66592 | 1 + baseconfig/arm/CONFIG_USB_MUSB_DSPS | 1 + baseconfig/arm/CONFIG_USB_MUSB_DUAL_ROLE | 1 + baseconfig/arm/CONFIG_USB_MUSB_HDRC | 1 + baseconfig/arm/CONFIG_USB_MUSB_TUSB6010 | 1 + baseconfig/arm/CONFIG_USB_MV_U3D | 1 + baseconfig/arm/CONFIG_USB_MV_UDC | 1 + baseconfig/arm/CONFIG_USB_NET2272 | 1 + baseconfig/arm/CONFIG_USB_NET2280 | 1 + baseconfig/arm/CONFIG_USB_OHCI_HCD_PLATFORM | 1 + baseconfig/arm/CONFIG_USB_OTG | 1 + baseconfig/arm/CONFIG_USB_OTG_BLACKLIST_HUB | 1 + baseconfig/arm/CONFIG_USB_PXA27X | 1 + baseconfig/arm/CONFIG_USB_R8A66597 | 1 + baseconfig/arm/CONFIG_USB_ULPI | 1 + baseconfig/arm/CONFIG_USB_XHCI_MVEBU | 1 + baseconfig/arm/CONFIG_USB_XHCI_PLATFORM | 1 + baseconfig/arm/CONFIG_USB_XHCI_TEGRA | 1 + baseconfig/arm/CONFIG_USB_ZERO_HNPTEST | 1 + baseconfig/arm/CONFIG_U_SERIAL_CONSOLE | 1 + baseconfig/arm/CONFIG_VDSO | 1 + baseconfig/arm/CONFIG_VEXPRESS_SYSCFG | 1 + baseconfig/arm/CONFIG_VFIO_AMBA | 1 + baseconfig/arm/CONFIG_VFIO_PLATFORM | 1 + .../CONFIG_VFIO_PLATFORM_CALXEDAXGMAC_RESET | 1 + baseconfig/arm/CONFIG_XEN | 1 + baseconfig/arm/CONFIG_XILINX_ZYNQMP_DMA | 1 + baseconfig/arm/CONFIG_XZ_DEC_ARM | 1 + baseconfig/arm/CONFIG_XZ_DEC_ARMTHUMB | 1 + baseconfig/arm/README | 2 + baseconfig/arm/arm64/CONFIG_64BIT | 1 + baseconfig/arm/arm64/CONFIG_ACPI | 1 + baseconfig/arm/arm64/CONFIG_ACPI_APEI | 1 + baseconfig/arm/arm64/CONFIG_ACPI_APEI_EINJ | 1 + .../arm/arm64/CONFIG_ACPI_APEI_ERST_DEBUG | 1 + baseconfig/arm/arm64/CONFIG_ACPI_APEI_GHES | 1 + baseconfig/arm/arm64/CONFIG_ACPI_APEI_PCIEAER | 1 + baseconfig/arm/arm64/CONFIG_ACPI_BUTTON | 1 + baseconfig/arm/arm64/CONFIG_ACPI_CONFIGFS | 1 + baseconfig/arm/arm64/CONFIG_ACPI_CONTAINER | 1 + baseconfig/arm/arm64/CONFIG_ACPI_CPPC_CPUFREQ | 1 + .../arm/arm64/CONFIG_ACPI_CUSTOM_METHOD | 1 + baseconfig/arm/arm64/CONFIG_ACPI_DOCK | 1 + baseconfig/arm/arm64/CONFIG_ACPI_EC_DEBUGFS | 1 + baseconfig/arm/arm64/CONFIG_ACPI_FAN | 1 + baseconfig/arm/arm64/CONFIG_ACPI_HED | 1 + baseconfig/arm/arm64/CONFIG_ACPI_I2C_OPREGION | 1 + baseconfig/arm/arm64/CONFIG_ACPI_IPMI | 1 + baseconfig/arm/arm64/CONFIG_ACPI_NFIT | 1 + baseconfig/arm/arm64/CONFIG_ACPI_NFIT_DEBUG | 1 + baseconfig/arm/arm64/CONFIG_ACPI_NUMA | 1 + baseconfig/arm/arm64/CONFIG_ACPI_PROCESSOR | 1 + baseconfig/arm/arm64/CONFIG_ACPI_PROCFS_POWER | 1 + .../arm/arm64/CONFIG_ACPI_TABLE_UPGRADE | 1 + baseconfig/arm/arm64/CONFIG_ACPI_THERMAL | 1 + baseconfig/arm/arm64/CONFIG_ACPI_WATCHDOG | 1 + baseconfig/arm/arm64/CONFIG_AHCI_SUNXI | 1 + baseconfig/arm/arm64/CONFIG_AHCI_XGENE | 1 + baseconfig/arm/arm64/CONFIG_AMBA_PL08X | 1 + baseconfig/arm/arm64/CONFIG_AMD_XGBE | 1 + baseconfig/arm/arm64/CONFIG_AMD_XGBE_DCB | 1 + baseconfig/arm/arm64/CONFIG_APQ_GCC_8084 | 1 + baseconfig/arm/arm64/CONFIG_APQ_MMCC_8084 | 1 + baseconfig/arm/arm64/CONFIG_ARCH_ALPINE | 1 + baseconfig/arm/arm64/CONFIG_ARCH_BCM_IPROC | 1 + baseconfig/arm/arm64/CONFIG_ARCH_BERLIN | 1 + baseconfig/arm/arm64/CONFIG_ARCH_EXYNOS | 1 + .../arm64/CONFIG_ARCH_HAS_HOLES_MEMORYMODEL | 1 + baseconfig/arm/arm64/CONFIG_ARCH_HISI | 1 + baseconfig/arm/arm64/CONFIG_ARCH_LAYERSCAPE | 1 + baseconfig/arm/arm64/CONFIG_ARCH_LG1K | 1 + baseconfig/arm/arm64/CONFIG_ARCH_MEDIATEK | 1 + baseconfig/arm/arm64/CONFIG_ARCH_MESON | 1 + baseconfig/arm/arm64/CONFIG_ARCH_QCOM | 1 + baseconfig/arm/arm64/CONFIG_ARCH_RENESAS | 1 + baseconfig/arm/arm64/CONFIG_ARCH_SEATTLE | 1 + baseconfig/arm/arm64/CONFIG_ARCH_SPRD | 1 + baseconfig/arm/arm64/CONFIG_ARCH_STRATIX10 | 1 + baseconfig/arm/arm64/CONFIG_ARCH_SUNXI | 1 + baseconfig/arm/arm64/CONFIG_ARCH_TEGRA | 1 + .../arm/arm64/CONFIG_ARCH_TEGRA_132_SOC | 1 + .../arm/arm64/CONFIG_ARCH_TEGRA_186_SOC | 1 + .../arm/arm64/CONFIG_ARCH_TEGRA_210_SOC | 1 + baseconfig/arm/arm64/CONFIG_ARCH_THUNDER | 1 + baseconfig/arm/arm64/CONFIG_ARCH_UNIPHIER | 1 + baseconfig/arm/arm64/CONFIG_ARCH_VULCAN | 1 + baseconfig/arm/arm64/CONFIG_ARCH_XGENE | 1 + baseconfig/arm/arm64/CONFIG_ARCH_ZX | 1 + baseconfig/arm/arm64/CONFIG_ARCH_ZYNQMP | 1 + baseconfig/arm/arm64/CONFIG_ARM64 | 1 + baseconfig/arm/arm64/CONFIG_ARM64_64K_PAGES | 1 + .../arm64/CONFIG_ARM64_ACPI_PARKING_PROTOCOL | 1 + baseconfig/arm/arm64/CONFIG_ARM64_CRYPTO | 1 + .../arm/arm64/CONFIG_ARM64_ERRATUM_819472 | 1 + .../arm/arm64/CONFIG_ARM64_ERRATUM_824069 | 1 + .../arm/arm64/CONFIG_ARM64_ERRATUM_826319 | 1 + .../arm/arm64/CONFIG_ARM64_ERRATUM_827319 | 1 + .../arm/arm64/CONFIG_ARM64_ERRATUM_832075 | 1 + .../arm/arm64/CONFIG_ARM64_ERRATUM_834220 | 1 + .../arm/arm64/CONFIG_ARM64_ERRATUM_843419 | 1 + baseconfig/arm/arm64/CONFIG_ARM64_HW_AFDBM | 1 + baseconfig/arm/arm64/CONFIG_ARM64_LSE_ATOMICS | 1 + baseconfig/arm/arm64/CONFIG_ARM64_PAN | 1 + baseconfig/arm/arm64/CONFIG_ARM64_PTDUMP | 1 + .../arm/arm64/CONFIG_ARM64_PTDUMP_DEBUGFS | 1 + .../arm64/CONFIG_ARM64_RANDOMIZE_TEXT_OFFSET | 1 + .../arm/arm64/CONFIG_ARM64_SW_TTBR0_PAN | 1 + baseconfig/arm/arm64/CONFIG_ARM64_UAO | 1 + baseconfig/arm/arm64/CONFIG_ARM64_VA_BITS | 1 + baseconfig/arm/arm64/CONFIG_ARM64_VA_BITS_48 | 1 + baseconfig/arm/arm64/CONFIG_ARM64_VHE | 1 + baseconfig/arm/arm64/CONFIG_ARM_SBSA_WATCHDOG | 1 + baseconfig/arm/arm64/CONFIG_ARM_SMMU_V3 | 1 + baseconfig/arm/arm64/CONFIG_ARM_TEGRA_DEVFREQ | 1 + baseconfig/arm/arm64/CONFIG_AXP20X_POWER | 1 + baseconfig/arm/arm64/CONFIG_AXP288_ADC | 1 + baseconfig/arm/arm64/CONFIG_AXP288_CHARGER | 1 + baseconfig/arm/arm64/CONFIG_AXP288_FUEL_GAUGE | 1 + baseconfig/arm/arm64/CONFIG_BCMA_POSSIBLE | 1 + baseconfig/arm/arm64/CONFIG_BCM_PDC_MBOX | 1 + .../CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE | 1 + baseconfig/arm/arm64/CONFIG_BRCMUTIL | 1 + baseconfig/arm/arm64/CONFIG_BTT | 1 + baseconfig/arm/arm64/CONFIG_BUG | 1 + baseconfig/arm/arm64/CONFIG_CAN_SUN4I | 1 + .../arm/arm64/CONFIG_CAVIUM_ERRATUM_22375 | 1 + .../arm/arm64/CONFIG_CAVIUM_ERRATUM_23144 | 1 + .../arm/arm64/CONFIG_CAVIUM_ERRATUM_23154 | 1 + .../arm/arm64/CONFIG_CAVIUM_ERRATUM_27456 | 1 + baseconfig/arm/arm64/CONFIG_CHARGER_MANAGER | 1 + baseconfig/arm/arm64/CONFIG_CLKDEV_LOOKUP | 1 + baseconfig/arm/arm64/CONFIG_CMDLINE | 1 + baseconfig/arm/arm64/CONFIG_CMDLINE_FORCE | 1 + baseconfig/arm/arm64/CONFIG_COMMON_CLK_HI6220 | 1 + .../arm/arm64/CONFIG_COMMON_CLK_MAX77686 | 1 + baseconfig/arm/arm64/CONFIG_COMMON_CLK_QCOM | 1 + baseconfig/arm/arm64/CONFIG_COMMON_CLK_XGENE | 1 + .../arm/arm64/CONFIG_COMMON_RESET_HI6220 | 1 + .../arm/arm64/CONFIG_CONSOLE_TRANSLATIONS | 1 + .../arm/arm64/CONFIG_CRYPTO_AES_ARM64_CE | 1 + .../arm/arm64/CONFIG_CRYPTO_AES_ARM64_CE_BLK | 1 + .../arm/arm64/CONFIG_CRYPTO_AES_ARM64_CE_CCM | 1 + .../arm64/CONFIG_CRYPTO_AES_ARM64_NEON_BLK | 1 + .../arm/arm64/CONFIG_CRYPTO_CRC32_ARM64 | 1 + baseconfig/arm/arm64/CONFIG_CRYPTO_DEV_CCP | 1 + .../arm/arm64/CONFIG_CRYPTO_DEV_CCP_CRYPTO | 1 + baseconfig/arm/arm64/CONFIG_CRYPTO_DEV_CCP_DD | 1 + baseconfig/arm/arm64/CONFIG_CRYPTO_DEV_QCE | 1 + .../arm/arm64/CONFIG_CRYPTO_GHASH_ARM64_CE | 1 + .../arm/arm64/CONFIG_CRYPTO_SHA1_ARM64_CE | 1 + .../arm/arm64/CONFIG_CRYPTO_SHA2_ARM64_CE | 1 + .../arm/arm64/CONFIG_DEBUG_ALIGN_RODATA | 1 + .../arm/arm64/CONFIG_DEBUG_SECTION_MISMATCH | 1 + baseconfig/arm/arm64/CONFIG_DEBUG_WX | 1 + baseconfig/arm/arm64/CONFIG_DMI | 1 + baseconfig/arm/arm64/CONFIG_DMIID | 1 + baseconfig/arm/arm64/CONFIG_DMI_SYSFS | 1 + baseconfig/arm/arm64/CONFIG_DRM_HISI_KIRIN | 1 + baseconfig/arm/arm64/CONFIG_DRM_MESON | 1 + baseconfig/arm/arm64/CONFIG_DRM_MSM | 1 + baseconfig/arm/arm64/CONFIG_DRM_MSM_DSI | 1 + baseconfig/arm/arm64/CONFIG_DRM_MSM_HDMI_HDCP | 1 + .../arm/arm64/CONFIG_DRM_MSM_REGISTER_LOGGING | 1 + .../arm/arm64/CONFIG_DVB_B2C2_FLEXCOP_USB | 1 + baseconfig/arm/arm64/CONFIG_EDAC_XGENE | 1 + baseconfig/arm/arm64/CONFIG_EXTCON_AXP288 | 1 + baseconfig/arm/arm64/CONFIG_FB_MODE_HELPERS | 1 + .../arm/arm64/CONFIG_FSL_ERRATUM_A008585 | 1 + baseconfig/arm/arm64/CONFIG_FSL_MC_BUS | 1 + baseconfig/arm/arm64/CONFIG_FUJITSU_ES | 1 + baseconfig/arm/arm64/CONFIG_GPIO_AXP209 | 1 + baseconfig/arm/arm64/CONFIG_GPIO_MAX77620 | 1 + baseconfig/arm/arm64/CONFIG_GPIO_PCA953X | 1 + baseconfig/arm/arm64/CONFIG_GPIO_XGENE | 1 + baseconfig/arm/arm64/CONFIG_GPIO_XGENE_SB | 1 + baseconfig/arm/arm64/CONFIG_HI6220_MBOX | 1 + .../arm/arm64/CONFIG_HISILICON_IRQ_MBIGEN | 1 + baseconfig/arm/arm64/CONFIG_HISI_KIRIN_DW_DSI | 1 + baseconfig/arm/arm64/CONFIG_HISI_THERMAL | 1 + baseconfig/arm/arm64/CONFIG_HOTPLUG_PCI_SHPC | 1 + baseconfig/arm/arm64/CONFIG_HVC_DCC | 1 + baseconfig/arm/arm64/CONFIG_HVC_DRIVER | 1 + baseconfig/arm/arm64/CONFIG_HWSPINLOCK_QCOM | 1 + baseconfig/arm/arm64/CONFIG_HW_RANDOM_CAVIUM | 1 + baseconfig/arm/arm64/CONFIG_HW_RANDOM_HISI | 1 + baseconfig/arm/arm64/CONFIG_HW_RANDOM_MSM | 1 + baseconfig/arm/arm64/CONFIG_HW_RANDOM_OMAP | 1 + baseconfig/arm/arm64/CONFIG_HW_RANDOM_XGENE | 1 + baseconfig/arm/arm64/CONFIG_HZ | 1 + baseconfig/arm/arm64/CONFIG_HZ_100 | 1 + baseconfig/arm/arm64/CONFIG_HZ_1000 | 1 + baseconfig/arm/arm64/CONFIG_I2C_HIX5HD2 | 1 + baseconfig/arm/arm64/CONFIG_I2C_QUP | 1 + baseconfig/arm/arm64/CONFIG_I2C_SCMI | 1 + baseconfig/arm/arm64/CONFIG_I2C_THUNDERX | 1 + baseconfig/arm/arm64/CONFIG_I2C_XGENE_SLIMPRO | 1 + baseconfig/arm/arm64/CONFIG_INPUT_AXP20X_PEK | 1 + .../arm/arm64/CONFIG_INPUT_HISI_POWERKEY | 1 + .../arm/arm64/CONFIG_INPUT_PM8941_PWRKEY | 1 + .../arm/arm64/CONFIG_INPUT_REGULATOR_HAPTIC | 1 + baseconfig/arm/arm64/CONFIG_IR_SUNXI | 1 + baseconfig/arm/arm64/CONFIG_K3_DMA | 1 + .../arm/arm64/CONFIG_KEYBOARD_SUN4I_LRADC | 1 + baseconfig/arm/arm64/CONFIG_KVM | 1 + baseconfig/arm/arm64/CONFIG_LIBNVDIMM | 1 + baseconfig/arm/arm64/CONFIG_LIQUIDIO | 1 + baseconfig/arm/arm64/CONFIG_MAX77620_THERMAL | 1 + baseconfig/arm/arm64/CONFIG_MAX77620_WATCHDOG | 1 + baseconfig/arm/arm64/CONFIG_MDIO_HISI_FEMAC | 1 + baseconfig/arm/arm64/CONFIG_MDIO_OCTEON | 1 + baseconfig/arm/arm64/CONFIG_MDIO_SUN4I | 1 + baseconfig/arm/arm64/CONFIG_MDIO_THUNDER | 1 + baseconfig/arm/arm64/CONFIG_MDIO_XGENE | 1 + baseconfig/arm/arm64/CONFIG_MDM_GCC_9615 | 1 + baseconfig/arm/arm64/CONFIG_MDM_LCC_9615 | 1 + .../arm/arm64/CONFIG_MESON_GXBB_WATCHDOG | 1 + baseconfig/arm/arm64/CONFIG_MESON_GXL_PHY | 1 + baseconfig/arm/arm64/CONFIG_MESON_WATCHDOG | 1 + baseconfig/arm/arm64/CONFIG_MFD_AXP20X | 1 + baseconfig/arm/arm64/CONFIG_MFD_AXP20X_I2C | 1 + baseconfig/arm/arm64/CONFIG_MFD_AXP20X_RSB | 1 + baseconfig/arm/arm64/CONFIG_MFD_HI655X_PMIC | 1 + baseconfig/arm/arm64/CONFIG_MFD_MAX77620 | 1 + baseconfig/arm/arm64/CONFIG_MFD_QCOM_RPM | 1 + baseconfig/arm/arm64/CONFIG_MFD_SUN6I_PRCM | 1 + baseconfig/arm/arm64/CONFIG_MMC_MESON_GX | 1 + baseconfig/arm/arm64/CONFIG_MMC_SDHCI_MSM | 1 + baseconfig/arm/arm64/CONFIG_MMC_SUNXI | 1 + baseconfig/arm/arm64/CONFIG_MSM_GCC_8660 | 1 + baseconfig/arm/arm64/CONFIG_MSM_GCC_8916 | 1 + baseconfig/arm/arm64/CONFIG_MSM_GCC_8960 | 1 + baseconfig/arm/arm64/CONFIG_MSM_GCC_8974 | 1 + baseconfig/arm/arm64/CONFIG_MSM_GCC_8996 | 1 + baseconfig/arm/arm64/CONFIG_MSM_LCC_8960 | 1 + baseconfig/arm/arm64/CONFIG_MSM_MMCC_8960 | 1 + baseconfig/arm/arm64/CONFIG_MSM_MMCC_8974 | 1 + baseconfig/arm/arm64/CONFIG_MSM_MMCC_8996 | 1 + baseconfig/arm/arm64/CONFIG_MV_XOR_V2 | 1 + baseconfig/arm/arm64/CONFIG_ND_BLK | 1 + baseconfig/arm/arm64/CONFIG_ND_BTT | 1 + baseconfig/arm/arm64/CONFIG_NET_SB1000 | 1 + .../arm/arm64/CONFIG_NET_VENDOR_ALLWINNER | 1 + baseconfig/arm/arm64/CONFIG_NET_VENDOR_CAVIUM | 1 + .../arm/arm64/CONFIG_NET_VENDOR_QUALCOMM | 1 + baseconfig/arm/arm64/CONFIG_NET_XGENE | 1 + baseconfig/arm/arm64/CONFIG_NODES_SHIFT | 1 + baseconfig/arm/arm64/CONFIG_NR_CPUS | 1 + baseconfig/arm/arm64/CONFIG_NUMA | 1 + baseconfig/arm/arm64/CONFIG_NUMA_BALANCING | 1 + .../CONFIG_NUMA_BALANCING_DEFAULT_ENABLED | 1 + baseconfig/arm/arm64/CONFIG_NVMEM_SUNXI_SID | 1 + baseconfig/arm/arm64/CONFIG_PARPORT_PC | 1 + baseconfig/arm/arm64/CONFIG_PCC | 1 + baseconfig/arm/arm64/CONFIG_PCIE_QCOM | 1 + baseconfig/arm/arm64/CONFIG_PCI_HISI | 1 + .../arm/arm64/CONFIG_PCI_HOST_THUNDER_ECAM | 1 + .../arm/arm64/CONFIG_PCI_HOST_THUNDER_PEM | 1 + baseconfig/arm/arm64/CONFIG_PCI_XGENE | 1 + baseconfig/arm/arm64/CONFIG_PCI_XGENE_MSI | 1 + baseconfig/arm/arm64/CONFIG_PHY_HI6220_USB | 1 + .../arm/arm64/CONFIG_PHY_QCOM_APQ8064_SATA | 1 + baseconfig/arm/arm64/CONFIG_PHY_QCOM_UFS | 1 + baseconfig/arm/arm64/CONFIG_PHY_SUN4I_USB | 1 + baseconfig/arm/arm64/CONFIG_PHY_SUN9I_USB | 1 + baseconfig/arm/arm64/CONFIG_PHY_XGENE | 1 + baseconfig/arm/arm64/CONFIG_PINCTRL_AMD | 1 + baseconfig/arm/arm64/CONFIG_PINCTRL_APQ8064 | 1 + baseconfig/arm/arm64/CONFIG_PINCTRL_APQ8084 | 1 + baseconfig/arm/arm64/CONFIG_PINCTRL_MAX77620 | 1 + baseconfig/arm/arm64/CONFIG_PINCTRL_MDM9615 | 1 + baseconfig/arm/arm64/CONFIG_PINCTRL_MSM | 1 + baseconfig/arm/arm64/CONFIG_PINCTRL_MSM8660 | 1 + baseconfig/arm/arm64/CONFIG_PINCTRL_MSM8916 | 1 + baseconfig/arm/arm64/CONFIG_PINCTRL_MSM8960 | 1 + baseconfig/arm/arm64/CONFIG_PINCTRL_MSM8996 | 1 + baseconfig/arm/arm64/CONFIG_PINCTRL_MSM8X74 | 1 + .../arm/arm64/CONFIG_PINCTRL_QCOM_SPMI_PMIC | 1 + .../arm/arm64/CONFIG_PINCTRL_QCOM_SSBI_PMIC | 1 + baseconfig/arm/arm64/CONFIG_PINCTRL_QDF2XXX | 1 + baseconfig/arm/arm64/CONFIG_PMIC_OPREGION | 1 + .../arm/arm64/CONFIG_PNP_DEBUG_MESSAGES | 1 + baseconfig/arm/arm64/CONFIG_POWER_RESET_HISI | 1 + baseconfig/arm/arm64/CONFIG_POWER_RESET_MSM | 1 + baseconfig/arm/arm64/CONFIG_POWER_RESET_XGENE | 1 + baseconfig/arm/arm64/CONFIG_PWM_SUN4I | 1 + baseconfig/arm/arm64/CONFIG_QCOM_BAM_DMA | 1 + baseconfig/arm/arm64/CONFIG_QCOM_CLK_RPM | 1 + baseconfig/arm/arm64/CONFIG_QCOM_CLK_SMD_RPM | 1 + baseconfig/arm/arm64/CONFIG_QCOM_COINCELL | 1 + baseconfig/arm/arm64/CONFIG_QCOM_EBI2 | 1 + baseconfig/arm/arm64/CONFIG_QCOM_EMAC | 1 + baseconfig/arm/arm64/CONFIG_QCOM_GSBI | 1 + baseconfig/arm/arm64/CONFIG_QCOM_HIDMA | 1 + baseconfig/arm/arm64/CONFIG_QCOM_HIDMA_MGMT | 1 + baseconfig/arm/arm64/CONFIG_QCOM_Q6V5_PIL | 1 + .../arm64/CONFIG_QCOM_QDF2400_ERRATUM_0065 | 1 + baseconfig/arm/arm64/CONFIG_QCOM_QFPROM | 1 + baseconfig/arm/arm64/CONFIG_QCOM_SMD | 1 + baseconfig/arm/arm64/CONFIG_QCOM_SMD_RPM | 1 + baseconfig/arm/arm64/CONFIG_QCOM_SMEM | 1 + baseconfig/arm/arm64/CONFIG_QCOM_SMP2P | 1 + baseconfig/arm/arm64/CONFIG_QCOM_SMSM | 1 + baseconfig/arm/arm64/CONFIG_QCOM_SPMI_IADC | 1 + .../arm/arm64/CONFIG_QCOM_SPMI_TEMP_ALARM | 1 + baseconfig/arm/arm64/CONFIG_QCOM_SPMI_VADC | 1 + baseconfig/arm/arm64/CONFIG_QCOM_TSENS | 1 + baseconfig/arm/arm64/CONFIG_QCOM_WCNSS_CTRL | 1 + baseconfig/arm/arm64/CONFIG_QCOM_WCNSS_PIL | 1 + baseconfig/arm/arm64/CONFIG_QCOM_WDT | 1 + baseconfig/arm/arm64/CONFIG_RANDOMIZE_BASE | 1 + baseconfig/arm/arm64/CONFIG_RCU_FANOUT | 1 + baseconfig/arm/arm64/CONFIG_REGULATOR_AXP20X | 1 + baseconfig/arm/arm64/CONFIG_REGULATOR_HI655X | 1 + .../arm/arm64/CONFIG_REGULATOR_MAX77620 | 1 + .../arm/arm64/CONFIG_REGULATOR_QCOM_RPM | 1 + .../arm/arm64/CONFIG_REGULATOR_QCOM_SMD_RPM | 1 + .../arm/arm64/CONFIG_REGULATOR_QCOM_SPMI | 1 + baseconfig/arm/arm64/CONFIG_RELOCATABLE | 1 + baseconfig/arm/arm64/CONFIG_RESET_HISI | 1 + baseconfig/arm/arm64/CONFIG_RTC_DRV_EFI | 1 + baseconfig/arm/arm64/CONFIG_RTC_DRV_PL030 | 1 + baseconfig/arm/arm64/CONFIG_RTC_DRV_PM8XXX | 1 + baseconfig/arm/arm64/CONFIG_RTC_DRV_SUN6I | 1 + baseconfig/arm/arm64/CONFIG_RTC_DRV_XGENE | 1 + .../arm/arm64/CONFIG_SATA_AHCI_PLATFORM | 1 + baseconfig/arm/arm64/CONFIG_SATA_AHCI_SEATTLE | 1 + .../arm/arm64/CONFIG_SENSORS_ACPI_POWER | 1 + .../arm64/CONFIG_SENSORS_LTC2978_REGULATOR | 1 + baseconfig/arm/arm64/CONFIG_SENSORS_XGENE | 1 + baseconfig/arm/arm64/CONFIG_SERIAL_AMBA_PL010 | 1 + baseconfig/arm/arm64/CONFIG_SERIAL_MSM | 1 + .../arm/arm64/CONFIG_SERIAL_MSM_CONSOLE | 1 + baseconfig/arm/arm64/CONFIG_SERIO_SUN4I_PS2 | 1 + baseconfig/arm/arm64/CONFIG_SND_SOC | 1 + baseconfig/arm/arm64/CONFIG_SND_SUN4I_CODEC | 1 + baseconfig/arm/arm64/CONFIG_SPARSEMEM_VMEMMAP | 1 + baseconfig/arm/arm64/CONFIG_SPARSE_IRQ | 1 + baseconfig/arm/arm64/CONFIG_SPI_QUP | 1 + baseconfig/arm/arm64/CONFIG_SPI_SUN6I | 1 + baseconfig/arm/arm64/CONFIG_SPI_THUNDERX | 1 + baseconfig/arm/arm64/CONFIG_SPMI_MSM_PMIC_ARB | 1 + baseconfig/arm/arm64/CONFIG_STUB_CLK_HI6220 | 1 + baseconfig/arm/arm64/CONFIG_SUN4I_EMAC | 1 + baseconfig/arm/arm64/CONFIG_SUN8I_EMAC | 1 + baseconfig/arm/arm64/CONFIG_SUN8I_H3_CCU | 1 + baseconfig/arm/arm64/CONFIG_SUNXI_CCU | 1 + baseconfig/arm/arm64/CONFIG_SUNXI_WATCHDOG | 1 + baseconfig/arm/arm64/CONFIG_SYS_HYPERVISOR | 1 + baseconfig/arm/arm64/CONFIG_TEGRA210_ADMA | 1 + baseconfig/arm/arm64/CONFIG_TEGRA_ACONNECT | 1 + baseconfig/arm/arm64/CONFIG_TEGRA_GMI | 1 + baseconfig/arm/arm64/CONFIG_THUNDER_NIC_BGX | 1 + baseconfig/arm/arm64/CONFIG_THUNDER_NIC_PF | 1 + baseconfig/arm/arm64/CONFIG_THUNDER_NIC_RGX | 1 + baseconfig/arm/arm64/CONFIG_THUNDER_NIC_VF | 1 + baseconfig/arm/arm64/CONFIG_TOUCHSCREEN_SUN4I | 1 + baseconfig/arm/arm64/CONFIG_USB_CHIPIDEA | 1 + baseconfig/arm/arm64/CONFIG_USB_CHIPIDEA_HOST | 1 + baseconfig/arm/arm64/CONFIG_USB_CHIPIDEA_UDC | 1 + baseconfig/arm/arm64/CONFIG_USB_EHCI_MSM | 1 + baseconfig/arm/arm64/CONFIG_USB_MSM_OTG | 1 + baseconfig/arm/arm64/CONFIG_USB_MUSB_SUNXI | 1 + baseconfig/arm/arm64/CONFIG_USB_QCOM_8X16_PHY | 1 + baseconfig/arm/arm64/CONFIG_USB_SPEEDTOUCH | 1 + .../arm64/CONFIG_VFIO_PLATFORM_AMDXGBE_RESET | 1 + baseconfig/arm/arm64/CONFIG_VGA_CONSOLE | 1 + baseconfig/arm/arm64/CONFIG_XGENE_DMA | 1 + baseconfig/arm/arm64/CONFIG_XGENE_PMU | 1 + .../arm/arm64/CONFIG_XGENE_SLIMPRO_MBOX | 1 + baseconfig/arm/arm64/README | 1 + baseconfig/arm/armv7/CONFIG_88EU_AP_MODE | 1 + baseconfig/arm/armv7/CONFIG_AD525X_DPOT | 1 + baseconfig/arm/armv7/CONFIG_AD525X_DPOT_I2C | 1 + baseconfig/arm/armv7/CONFIG_AD525X_DPOT_SPI | 1 + baseconfig/arm/armv7/CONFIG_AEABI | 1 + baseconfig/arm/armv7/CONFIG_AHCI_SUNXI | 1 + baseconfig/arm/armv7/CONFIG_AMBA_PL08X | 1 + baseconfig/arm/armv7/CONFIG_APM_EMULATION | 1 + baseconfig/arm/armv7/CONFIG_ARCH_ALPINE | 1 + baseconfig/arm/armv7/CONFIG_ARCH_ARTPEC | 1 + baseconfig/arm/armv7/CONFIG_ARCH_AT91 | 1 + baseconfig/arm/armv7/CONFIG_ARCH_DIGICOLOR | 1 + baseconfig/arm/armv7/CONFIG_ARCH_EXYNOS | 1 + baseconfig/arm/armv7/CONFIG_ARCH_EXYNOS3 | 1 + baseconfig/arm/armv7/CONFIG_ARCH_EXYNOS4 | 1 + baseconfig/arm/armv7/CONFIG_ARCH_EXYNOS5 | 1 + .../arm/armv7/CONFIG_ARCH_HAS_TICK_BROADCAST | 1 + baseconfig/arm/armv7/CONFIG_ARCH_HI3xxx | 1 + baseconfig/arm/armv7/CONFIG_ARCH_HIGHBANK | 1 + baseconfig/arm/armv7/CONFIG_ARCH_HISI | 1 + baseconfig/arm/armv7/CONFIG_ARCH_MEDIATEK | 1 + baseconfig/arm/armv7/CONFIG_ARCH_MESON | 1 + baseconfig/arm/armv7/CONFIG_ARCH_MMP | 1 + baseconfig/arm/armv7/CONFIG_ARCH_MULTI_V6 | 1 + baseconfig/arm/armv7/CONFIG_ARCH_MULTI_V7 | 1 + baseconfig/arm/armv7/CONFIG_ARCH_QCOM | 1 + baseconfig/arm/armv7/CONFIG_ARCH_REALVIEW | 1 + baseconfig/arm/armv7/CONFIG_ARCH_RENESAS | 1 + baseconfig/arm/armv7/CONFIG_ARCH_S5PV210 | 1 + .../arm/armv7/CONFIG_ARCH_SHMOBILE_MULTI | 1 + baseconfig/arm/armv7/CONFIG_ARCH_SIRF | 1 + baseconfig/arm/armv7/CONFIG_ARCH_SOCFPGA | 1 + baseconfig/arm/armv7/CONFIG_ARCH_STI | 1 + baseconfig/arm/armv7/CONFIG_ARCH_SUNXI | 1 + baseconfig/arm/armv7/CONFIG_ARCH_TANGO | 1 + baseconfig/arm/armv7/CONFIG_ARCH_TEGRA | 1 + .../arm/armv7/CONFIG_ARCH_TEGRA_114_SOC | 1 + .../arm/armv7/CONFIG_ARCH_TEGRA_124_SOC | 1 + baseconfig/arm/armv7/CONFIG_ARCH_U8500 | 1 + baseconfig/arm/armv7/CONFIG_ARCH_UNIPHIER | 1 + .../CONFIG_ARCH_VEXPRESS_CORTEX_A5_A9_ERRATA | 1 + .../arm/armv7/CONFIG_ARCH_VEXPRESS_DCSCB | 1 + baseconfig/arm/armv7/CONFIG_ARCH_VEXPRESS_SPC | 1 + .../arm/armv7/CONFIG_ARCH_VEXPRESS_TC2_PM | 1 + baseconfig/arm/armv7/CONFIG_ARCH_VIRT | 1 + baseconfig/arm/armv7/CONFIG_ARCH_WM8850 | 1 + baseconfig/arm/armv7/CONFIG_ARCH_ZX | 1 + baseconfig/arm/armv7/CONFIG_ARM | 1 + baseconfig/arm/armv7/CONFIG_ARM_APPENDED_DTB | 1 + baseconfig/arm/armv7/CONFIG_ARM_ASM_UNIFIED | 1 + .../arm/armv7/CONFIG_ARM_ATAG_DTB_COMPAT | 1 + .../arm/armv7/CONFIG_ARM_BIG_LITTLE_CPUFREQ | 1 + .../arm/armv7/CONFIG_ARM_BIG_LITTLE_CPUIDLE | 1 + baseconfig/arm/armv7/CONFIG_ARM_CPU_SUSPEND | 1 + baseconfig/arm/armv7/CONFIG_ARM_CPU_TOPOLOGY | 1 + baseconfig/arm/armv7/CONFIG_ARM_ERRATA_326103 | 1 + baseconfig/arm/armv7/CONFIG_ARM_ERRATA_411920 | 1 + baseconfig/arm/armv7/CONFIG_ARM_ERRATA_430973 | 1 + baseconfig/arm/armv7/CONFIG_ARM_ERRATA_458693 | 1 + baseconfig/arm/armv7/CONFIG_ARM_ERRATA_460075 | 1 + baseconfig/arm/armv7/CONFIG_ARM_ERRATA_643719 | 1 + baseconfig/arm/armv7/CONFIG_ARM_ERRATA_720789 | 1 + baseconfig/arm/armv7/CONFIG_ARM_ERRATA_742230 | 1 + baseconfig/arm/armv7/CONFIG_ARM_ERRATA_742231 | 1 + baseconfig/arm/armv7/CONFIG_ARM_ERRATA_743622 | 1 + baseconfig/arm/armv7/CONFIG_ARM_ERRATA_751472 | 1 + baseconfig/arm/armv7/CONFIG_ARM_ERRATA_754322 | 1 + baseconfig/arm/armv7/CONFIG_ARM_ERRATA_754327 | 1 + baseconfig/arm/armv7/CONFIG_ARM_ERRATA_764369 | 1 + baseconfig/arm/armv7/CONFIG_ARM_ERRATA_773022 | 1 + baseconfig/arm/armv7/CONFIG_ARM_ERRATA_775420 | 1 + baseconfig/arm/armv7/CONFIG_ARM_ERRATA_798181 | 1 + .../arm/armv7/CONFIG_ARM_ERRATA_818325_852422 | 1 + baseconfig/arm/armv7/CONFIG_ARM_ERRATA_821420 | 1 + baseconfig/arm/armv7/CONFIG_ARM_ERRATA_825619 | 1 + baseconfig/arm/armv7/CONFIG_ARM_ERRATA_852421 | 1 + baseconfig/arm/armv7/CONFIG_ARM_ERRATA_852423 | 1 + .../arm/armv7/CONFIG_ARM_EXYNOS5440_CPUFREQ | 1 + .../arm/armv7/CONFIG_ARM_EXYNOS_BUS_DEVFREQ | 1 + .../arm/armv7/CONFIG_ARM_EXYNOS_CPUIDLE | 1 + .../arm/armv7/CONFIG_ARM_HIGHBANK_CPUFREQ | 1 + .../arm/armv7/CONFIG_ARM_HIGHBANK_CPUIDLE | 1 + baseconfig/arm/armv7/CONFIG_ARM_KPROBES_TEST | 1 + baseconfig/arm/armv7/CONFIG_ARM_MODULE_PLTS | 1 + .../arm/armv7/CONFIG_ARM_MVEBU_V7_CPUIDLE | 1 + baseconfig/arm/armv7/CONFIG_ARM_PATCH_IDIV | 1 + baseconfig/arm/armv7/CONFIG_ARM_SCPI_CPUFREQ | 1 + baseconfig/arm/armv7/CONFIG_ARM_TEGRA_DEVFREQ | 1 + baseconfig/arm/armv7/CONFIG_ARM_THUMB | 1 + baseconfig/arm/armv7/CONFIG_ARM_THUMBEE | 1 + baseconfig/arm/armv7/CONFIG_ARM_UNWIND | 1 + .../arm/armv7/CONFIG_ARM_VEXPRESS_SPC_CPUFREQ | 1 + baseconfig/arm/armv7/CONFIG_ARM_VIRT_EXT | 1 + baseconfig/arm/armv7/CONFIG_ATAGS | 1 + baseconfig/arm/armv7/CONFIG_ATAGS_PROC | 1 + baseconfig/arm/armv7/CONFIG_ATM_HE | 1 + baseconfig/arm/armv7/CONFIG_AUTO_ZRELADDR | 1 + baseconfig/arm/armv7/CONFIG_AX88796 | 1 + baseconfig/arm/armv7/CONFIG_AX88796_93CX6 | 1 + baseconfig/arm/armv7/CONFIG_AXP20X_POWER | 1 + baseconfig/arm/armv7/CONFIG_AXP288_ADC | 1 + baseconfig/arm/armv7/CONFIG_AXP288_CHARGER | 1 + baseconfig/arm/armv7/CONFIG_AXP288_FUEL_GAUGE | 1 + baseconfig/arm/armv7/CONFIG_BATTERY_SBS | 1 + baseconfig/arm/armv7/CONFIG_BIG_LITTLE | 1 + baseconfig/arm/armv7/CONFIG_BL_SWITCHER | 1 + .../arm/armv7/CONFIG_BL_SWITCHER_DUMMY_IF | 1 + baseconfig/arm/armv7/CONFIG_BRCMSTB_GISB_ARB | 1 + baseconfig/arm/armv7/CONFIG_CACHE_FEROCEON_L2 | 1 + .../CONFIG_CACHE_FEROCEON_L2_WRITETHROUGH | 1 + baseconfig/arm/armv7/CONFIG_CACHE_L2X0 | 1 + baseconfig/arm/armv7/CONFIG_CACHE_L2X0_PMU | 1 + baseconfig/arm/armv7/CONFIG_CACHE_TAUROS2 | 1 + baseconfig/arm/armv7/CONFIG_CAN_FLEXCAN | 1 + baseconfig/arm/armv7/CONFIG_CAN_RCAR | 1 + baseconfig/arm/armv7/CONFIG_CAN_RCAR_CANFD | 1 + baseconfig/arm/armv7/CONFIG_CAN_SUN4I | 1 + baseconfig/arm/armv7/CONFIG_CAN_TI_HECC | 1 + .../arm/armv7/CONFIG_CC_OPTIMIZE_FOR_SIZE | 1 + baseconfig/arm/armv7/CONFIG_CHARGER_BQ2415X | 1 + baseconfig/arm/armv7/CONFIG_CHARGER_BQ24190 | 1 + baseconfig/arm/armv7/CONFIG_CHARGER_BQ24735 | 1 + baseconfig/arm/armv7/CONFIG_CHARGER_GPIO | 1 + baseconfig/arm/armv7/CONFIG_CHARGER_MANAGER | 1 + baseconfig/arm/armv7/CONFIG_CHARGER_MAX8997 | 1 + baseconfig/arm/armv7/CONFIG_CHARGER_TPS65090 | 1 + baseconfig/arm/armv7/CONFIG_CLK_QORIQ | 1 + baseconfig/arm/armv7/CONFIG_CMDLINE | 1 + .../arm/armv7/CONFIG_CMDLINE_FROM_BOOTLOADER | 1 + .../arm/armv7/CONFIG_COMMON_CLK_MAX77686 | 1 + .../arm/armv7/CONFIG_COMMON_CLK_MAX77802 | 1 + .../arm/armv7/CONFIG_COMMON_CLK_S2MPS11 | 1 + baseconfig/arm/armv7/CONFIG_COMMON_CLK_SI5351 | 1 + .../arm/armv7/CONFIG_CPU_BPREDICT_DISABLE | 1 + .../arm/armv7/CONFIG_CPU_DCACHE_DISABLE | 1 + .../arm/armv7/CONFIG_CPU_ICACHE_DISABLE | 1 + baseconfig/arm/armv7/CONFIG_CPU_SW_DOMAIN_PAN | 1 + baseconfig/arm/armv7/CONFIG_CROS_EC_CHARDEV | 1 + baseconfig/arm/armv7/CONFIG_CROS_EC_PROTO | 1 + baseconfig/arm/armv7/CONFIG_CRYPTO_AES_ARM_CE | 1 + baseconfig/arm/armv7/CONFIG_CRYPTO_DEV_S5P | 1 + .../arm/armv7/CONFIG_CRYPTO_DEV_SUN4I_SS | 1 + .../arm/armv7/CONFIG_CRYPTO_GHASH_ARM_CE | 1 + .../arm/armv7/CONFIG_CRYPTO_SHA1_ARM_CE | 1 + .../arm/armv7/CONFIG_CRYPTO_SHA2_ARM_CE | 1 + baseconfig/arm/armv7/CONFIG_CS89x0 | 1 + .../arm/armv7/CONFIG_DEBUG_ALIGN_RODATA | 1 + baseconfig/arm/armv7/CONFIG_DEBUG_LL | 1 + baseconfig/arm/armv7/CONFIG_DEBUG_RODATA | 1 + baseconfig/arm/armv7/CONFIG_DEBUG_USER | 1 + .../arm/armv7/CONFIG_DEFAULT_MMAP_MIN_ADDR | 1 + .../arm/armv7/CONFIG_DEPRECATED_PARAM_STRUCT | 1 + .../armv7/CONFIG_DEVFREQ_EVENT_EXYNOS_NOCP | 1 + .../armv7/CONFIG_DEVFREQ_EVENT_EXYNOS_PPMU | 1 + .../arm/armv7/CONFIG_DEVFREQ_GOV_PASSIVE | 1 + baseconfig/arm/armv7/CONFIG_DM9000 | 1 + baseconfig/arm/armv7/CONFIG_DMADEVICES_DEBUG | 1 + baseconfig/arm/armv7/CONFIG_DMADEVICES_VDEBUG | 1 + baseconfig/arm/armv7/CONFIG_DMA_CACHE_RWFO | 1 + baseconfig/arm/armv7/CONFIG_DMA_SUN4I | 1 + baseconfig/arm/armv7/CONFIG_DMA_SUN6I | 1 + baseconfig/arm/armv7/CONFIG_DOVE_THERMAL | 1 + baseconfig/arm/armv7/CONFIG_DRM_ARMADA | 1 + baseconfig/arm/armv7/CONFIG_DRM_DW_HDMI | 1 + .../arm/armv7/CONFIG_DRM_DW_HDMI_AHB_AUDIO | 1 + baseconfig/arm/armv7/CONFIG_DRM_EXYNOS | 1 + .../arm/armv7/CONFIG_DRM_EXYNOS5433_DECON | 1 + baseconfig/arm/armv7/CONFIG_DRM_EXYNOS7_DECON | 1 + baseconfig/arm/armv7/CONFIG_DRM_EXYNOS_DP | 1 + baseconfig/arm/armv7/CONFIG_DRM_EXYNOS_DPI | 1 + baseconfig/arm/armv7/CONFIG_DRM_EXYNOS_DSI | 1 + baseconfig/arm/armv7/CONFIG_DRM_EXYNOS_FIMC | 1 + baseconfig/arm/armv7/CONFIG_DRM_EXYNOS_FIMD | 1 + baseconfig/arm/armv7/CONFIG_DRM_EXYNOS_G2D | 1 + baseconfig/arm/armv7/CONFIG_DRM_EXYNOS_GSC | 1 + baseconfig/arm/armv7/CONFIG_DRM_EXYNOS_HDMI | 1 + baseconfig/arm/armv7/CONFIG_DRM_EXYNOS_IOMMU | 1 + baseconfig/arm/armv7/CONFIG_DRM_EXYNOS_IPP | 1 + baseconfig/arm/armv7/CONFIG_DRM_EXYNOS_MIC | 1 + baseconfig/arm/armv7/CONFIG_DRM_EXYNOS_MIXER | 1 + .../arm/armv7/CONFIG_DRM_EXYNOS_ROTATOR | 1 + baseconfig/arm/armv7/CONFIG_DRM_EXYNOS_VIDI | 1 + baseconfig/arm/armv7/CONFIG_DRM_FSL_DCU | 1 + baseconfig/arm/armv7/CONFIG_DRM_IMX | 1 + baseconfig/arm/armv7/CONFIG_DRM_MESON | 1 + baseconfig/arm/armv7/CONFIG_DRM_PANEL | 1 + .../arm/armv7/CONFIG_DRM_PANEL_LG_LG4573 | 1 + .../CONFIG_DRM_PANEL_PANASONIC_VVX10F034N00 | 1 + .../arm/armv7/CONFIG_DRM_PANEL_SAMSUNG_LD9040 | 1 + .../armv7/CONFIG_DRM_PANEL_SAMSUNG_S6E8AA0 | 1 + .../armv7/CONFIG_DRM_PANEL_SHARP_LQ101R1SX01 | 1 + .../armv7/CONFIG_DRM_PANEL_SHARP_LS043T1LE01 | 1 + baseconfig/arm/armv7/CONFIG_DRM_PANEL_SIMPLE | 1 + baseconfig/arm/armv7/CONFIG_DRM_STI | 1 + baseconfig/arm/armv7/CONFIG_DRM_SUN4I | 1 + baseconfig/arm/armv7/CONFIG_DRM_TILCDC | 1 + baseconfig/arm/armv7/CONFIG_DVB_USB_PCTV452E | 1 + baseconfig/arm/armv7/CONFIG_DWMAC_GENERIC | 1 + baseconfig/arm/armv7/CONFIG_DWMAC_SUNXI | 1 + baseconfig/arm/armv7/CONFIG_EDAC_HIGHBANK_L2 | 1 + baseconfig/arm/armv7/CONFIG_EDAC_HIGHBANK_MC | 1 + baseconfig/arm/armv7/CONFIG_EEPROM_93XX46 | 1 + baseconfig/arm/armv7/CONFIG_EEPROM_AT25 | 1 + baseconfig/arm/armv7/CONFIG_ENC28J60 | 1 + baseconfig/arm/armv7/CONFIG_EXTCON_AXP288 | 1 + baseconfig/arm/armv7/CONFIG_EXTCON_MAX8997 | 1 + baseconfig/arm/armv7/CONFIG_EXYNOS5420_MCPM | 1 + .../arm/armv7/CONFIG_EXYNOS5420_MCPM not set | 1 + baseconfig/arm/armv7/CONFIG_EXYNOS_ADC | 1 + .../arm/armv7/CONFIG_EXYNOS_AUDSS_CLK_CON | 1 + baseconfig/arm/armv7/CONFIG_EXYNOS_IOMMU | 1 + .../arm/armv7/CONFIG_EXYNOS_IOMMU_DEBUG | 1 + baseconfig/arm/armv7/CONFIG_EXYNOS_THERMAL | 1 + baseconfig/arm/armv7/CONFIG_EZX_PCAP | 1 + baseconfig/arm/armv7/CONFIG_FB_RADEON | 1 + baseconfig/arm/armv7/CONFIG_FB_S3C | 1 + baseconfig/arm/armv7/CONFIG_FB_SAVAGE | 1 + baseconfig/arm/armv7/CONFIG_FB_XILINX | 1 + .../arm/armv7/CONFIG_GENERIC_ADC_BATTERY | 1 + baseconfig/arm/armv7/CONFIG_GPIO_74X164 | 1 + baseconfig/arm/armv7/CONFIG_GPIO_AXP209 | 1 + baseconfig/arm/armv7/CONFIG_GPIO_EM | 1 + baseconfig/arm/armv7/CONFIG_GPIO_MAX7301 | 1 + baseconfig/arm/armv7/CONFIG_GPIO_MC33880 | 1 + baseconfig/arm/armv7/CONFIG_GPIO_PCF857X | 1 + baseconfig/arm/armv7/CONFIG_GPIO_SYSCON | 1 + baseconfig/arm/armv7/CONFIG_GPIO_TPS65910 | 1 + baseconfig/arm/armv7/CONFIG_GPIO_TPS65912 | 1 + baseconfig/arm/armv7/CONFIG_GPIO_WM8994 | 1 + baseconfig/arm/armv7/CONFIG_GPIO_ZEVIO | 1 + .../arm/armv7/CONFIG_HAVE_ARM_ARCH_TIMER | 1 + baseconfig/arm/armv7/CONFIG_HAVE_ARM_TWD | 1 + baseconfig/arm/armv7/CONFIG_HIGHMEM | 1 + baseconfig/arm/armv7/CONFIG_HIGHPTE | 1 + baseconfig/arm/armv7/CONFIG_HVC_DCC | 1 + baseconfig/arm/armv7/CONFIG_HW_RANDOM_EXYNOS | 1 + baseconfig/arm/armv7/CONFIG_HW_RANDOM_OMAP | 1 + baseconfig/arm/armv7/CONFIG_I2C | 1 + .../arm/armv7/CONFIG_I2C_CROS_EC_TUNNEL | 1 + baseconfig/arm/armv7/CONFIG_I2C_EXYNOS5 | 1 + baseconfig/arm/armv7/CONFIG_I2C_S3C2410 | 1 + baseconfig/arm/armv7/CONFIG_I2C_SUN6I_P2WI | 1 + .../arm/armv7/CONFIG_IEEE802154_MRF24J40 | 1 + .../arm/armv7/CONFIG_INPUT_ARIZONA_HAPTICS | 1 + baseconfig/arm/armv7/CONFIG_INPUT_AXP20X_PEK | 1 + baseconfig/arm/armv7/CONFIG_INPUT_GP2A | 1 + baseconfig/arm/armv7/CONFIG_INPUT_GPIO | 1 + baseconfig/arm/armv7/CONFIG_INPUT_GPIO_BEEPER | 1 + .../arm/armv7/CONFIG_INPUT_GPIO_TILT_POLLED | 1 + .../arm/armv7/CONFIG_INPUT_MAX8997_HAPTIC | 1 + .../arm/armv7/CONFIG_INPUT_MC13783_PWRBUTTON | 1 + .../arm/armv7/CONFIG_INPUT_REGULATOR_HAPTIC | 1 + .../arm/armv7/CONFIG_IOMMU_IO_PGTABLE_LPAE | 1 + baseconfig/arm/armv7/CONFIG_IRQ_CROSSBAR | 1 + baseconfig/arm/armv7/CONFIG_IR_SUNXI | 1 + baseconfig/arm/armv7/CONFIG_IWMMXT | 1 + .../armv7/CONFIG_JFFS2_COMPRESSION_OPTIONS | 1 + baseconfig/arm/armv7/CONFIG_JFFS2_FS | 1 + baseconfig/arm/armv7/CONFIG_JFFS2_FS_DEBUG | 1 + .../arm/armv7/CONFIG_JFFS2_FS_POSIX_ACL | 1 + baseconfig/arm/armv7/CONFIG_JFFS2_FS_SECURITY | 1 + .../arm/armv7/CONFIG_JFFS2_FS_WBUF_VERIFY | 1 + .../arm/armv7/CONFIG_JFFS2_FS_WRITEBUFFER | 1 + baseconfig/arm/armv7/CONFIG_JFFS2_FS_XATTR | 1 + baseconfig/arm/armv7/CONFIG_JFFS2_LZO | 1 + baseconfig/arm/armv7/CONFIG_JFFS2_RTIME | 1 + baseconfig/arm/armv7/CONFIG_JFFS2_RUBIN | 1 + baseconfig/arm/armv7/CONFIG_JFFS2_SUMMARY | 1 + baseconfig/arm/armv7/CONFIG_JFFS2_ZLIB | 1 + baseconfig/arm/armv7/CONFIG_KEYBOARD_CROS_EC | 1 + baseconfig/arm/armv7/CONFIG_KEYBOARD_MATRIX | 1 + .../arm/armv7/CONFIG_KEYBOARD_SUN4I_LRADC | 1 + baseconfig/arm/armv7/CONFIG_KS8851 | 1 + baseconfig/arm/armv7/CONFIG_KS8851_MLL | 1 + .../arm/armv7/CONFIG_LATTICE_ECP3_CONFIG | 1 + baseconfig/arm/armv7/CONFIG_LBDAF | 1 + baseconfig/arm/armv7/CONFIG_LCD_AMS369FG06 | 1 + baseconfig/arm/armv7/CONFIG_LCD_HX8357 | 1 + baseconfig/arm/armv7/CONFIG_LCD_ILI922X | 1 + baseconfig/arm/armv7/CONFIG_LCD_ILI9320 | 1 + baseconfig/arm/armv7/CONFIG_LCD_L4F00242T03 | 1 + baseconfig/arm/armv7/CONFIG_LCD_LD9040 | 1 + baseconfig/arm/armv7/CONFIG_LCD_LMS283GF05 | 1 + baseconfig/arm/armv7/CONFIG_LCD_LMS501KF03 | 1 + baseconfig/arm/armv7/CONFIG_LCD_LTV350QV | 1 + baseconfig/arm/armv7/CONFIG_LCD_S6E63M0 | 1 + baseconfig/arm/armv7/CONFIG_LCD_TDO24M | 1 + baseconfig/arm/armv7/CONFIG_LCD_VGG2432A4 | 1 + baseconfig/arm/armv7/CONFIG_LEDS_DAC124S085 | 1 + baseconfig/arm/armv7/CONFIG_LEDS_GPIO | 1 + .../arm/armv7/CONFIG_LEDS_GPIO_REGISTER | 1 + baseconfig/arm/armv7/CONFIG_LEDS_MAX8997 | 1 + baseconfig/arm/armv7/CONFIG_LEDS_NS2 | 1 + baseconfig/arm/armv7/CONFIG_LEDS_PWM | 1 + baseconfig/arm/armv7/CONFIG_LEDS_SYSCON | 1 + baseconfig/arm/armv7/CONFIG_LEDS_TRIGGER_CPU | 1 + baseconfig/arm/armv7/CONFIG_LIBERTAS_SPI | 1 + baseconfig/arm/armv7/CONFIG_LSM_MMAP_MIN_ADDR | 1 + baseconfig/arm/armv7/CONFIG_MACH_ARMADA_370 | 1 + baseconfig/arm/armv7/CONFIG_MACH_ARMADA_375 | 1 + baseconfig/arm/armv7/CONFIG_MACH_ARMADA_38X | 1 + baseconfig/arm/armv7/CONFIG_MACH_ARMADA_39X | 1 + baseconfig/arm/armv7/CONFIG_MACH_ARMADA_XP | 1 + baseconfig/arm/armv7/CONFIG_MACH_DOVE | 1 + baseconfig/arm/armv7/CONFIG_MACH_SUN4I | 1 + baseconfig/arm/armv7/CONFIG_MACH_SUN5I | 1 + baseconfig/arm/armv7/CONFIG_MACH_SUN6I | 1 + baseconfig/arm/armv7/CONFIG_MACH_SUN7I | 1 + baseconfig/arm/armv7/CONFIG_MACH_SUN8I | 1 + baseconfig/arm/armv7/CONFIG_MACH_SUN9I | 1 + baseconfig/arm/armv7/CONFIG_MCPM | 1 + baseconfig/arm/armv7/CONFIG_MDIO_BUS_MUX | 1 + baseconfig/arm/armv7/CONFIG_MDIO_SUN4I | 1 + baseconfig/arm/armv7/CONFIG_MEMORY | 1 + .../arm/armv7/CONFIG_MESON_GXBB_WATCHDOG | 1 + baseconfig/arm/armv7/CONFIG_MESON_GXL_PHY | 1 + baseconfig/arm/armv7/CONFIG_MESON_WATCHDOG | 1 + baseconfig/arm/armv7/CONFIG_MFD_88PM800 | 1 + baseconfig/arm/armv7/CONFIG_MFD_88PM805 | 1 + baseconfig/arm/armv7/CONFIG_MFD_AAT2870_CORE | 1 + baseconfig/arm/armv7/CONFIG_MFD_ARIZONA_SPI | 1 + baseconfig/arm/armv7/CONFIG_MFD_AS3711 | 1 + baseconfig/arm/armv7/CONFIG_MFD_AS3722 | 1 + baseconfig/arm/armv7/CONFIG_MFD_AXP20X | 1 + baseconfig/arm/armv7/CONFIG_MFD_AXP20X_I2C | 1 + baseconfig/arm/armv7/CONFIG_MFD_AXP20X_RSB | 1 + baseconfig/arm/armv7/CONFIG_MFD_CROS_EC | 1 + baseconfig/arm/armv7/CONFIG_MFD_CROS_EC_I2C | 1 + baseconfig/arm/armv7/CONFIG_MFD_CROS_EC_SPI | 1 + baseconfig/arm/armv7/CONFIG_MFD_DA9052_I2C | 1 + baseconfig/arm/armv7/CONFIG_MFD_DA9052_SPI | 1 + baseconfig/arm/armv7/CONFIG_MFD_DA9055 | 1 + baseconfig/arm/armv7/CONFIG_MFD_EXYNOS_LPASS | 1 + baseconfig/arm/armv7/CONFIG_MFD_LP8788 | 1 + baseconfig/arm/armv7/CONFIG_MFD_MAX14577 | 1 + baseconfig/arm/armv7/CONFIG_MFD_MAX77686 | 1 + baseconfig/arm/armv7/CONFIG_MFD_MAX77693 | 1 + baseconfig/arm/armv7/CONFIG_MFD_MAX8997 | 1 + baseconfig/arm/armv7/CONFIG_MFD_MC13XXX_SPI | 1 + baseconfig/arm/armv7/CONFIG_MFD_PALMAS | 1 + baseconfig/arm/armv7/CONFIG_MFD_PM8921_CORE | 1 + baseconfig/arm/armv7/CONFIG_MFD_RC5T583 | 1 + baseconfig/arm/armv7/CONFIG_MFD_SEC_CORE | 1 + baseconfig/arm/armv7/CONFIG_MFD_SMSC | 1 + baseconfig/arm/armv7/CONFIG_MFD_T7L66XB | 1 + baseconfig/arm/armv7/CONFIG_MFD_TC6387XB | 1 + baseconfig/arm/armv7/CONFIG_MFD_TPS65090 | 1 + baseconfig/arm/armv7/CONFIG_MFD_TPS65910 | 1 + baseconfig/arm/armv7/CONFIG_MFD_TPS65912 | 1 + baseconfig/arm/armv7/CONFIG_MFD_TPS65912_I2C | 1 + baseconfig/arm/armv7/CONFIG_MFD_TPS65912_SPI | 1 + baseconfig/arm/armv7/CONFIG_MFD_TPS80031 | 1 + baseconfig/arm/armv7/CONFIG_MFD_WM831X_SPI | 1 + baseconfig/arm/armv7/CONFIG_MFD_WM8994 | 1 + baseconfig/arm/armv7/CONFIG_MG_DISK | 1 + baseconfig/arm/armv7/CONFIG_MICREL_KS8995MA | 1 + baseconfig/arm/armv7/CONFIG_MMC_DW_EXYNOS | 1 + baseconfig/arm/armv7/CONFIG_MMC_MESON_GX | 1 + baseconfig/arm/armv7/CONFIG_MMC_OMAP_HS | 1 + baseconfig/arm/armv7/CONFIG_MMC_SDHCI_DOVE | 1 + baseconfig/arm/armv7/CONFIG_MMC_SDHCI_S3C | 1 + baseconfig/arm/armv7/CONFIG_MMC_SDHCI_S3C_DMA | 1 + baseconfig/arm/armv7/CONFIG_MMC_SUNXI | 1 + baseconfig/arm/armv7/CONFIG_MMC_TMIO | 1 + baseconfig/arm/armv7/CONFIG_MPL115 | 1 + baseconfig/arm/armv7/CONFIG_MPL3115 | 1 + baseconfig/arm/armv7/CONFIG_MTD_AFS_PARTS | 1 + baseconfig/arm/armv7/CONFIG_MTD_DATAFLASH | 1 + baseconfig/arm/armv7/CONFIG_MTD_DATAFLASH_OTP | 1 + .../armv7/CONFIG_MTD_DATAFLASH_WRITE_VERIFY | 1 + baseconfig/arm/armv7/CONFIG_MTD_M25P80 | 1 + baseconfig/arm/armv7/CONFIG_MTD_MT81xx_NOR | 1 + baseconfig/arm/armv7/CONFIG_MTD_NAND | 1 + baseconfig/arm/armv7/CONFIG_MTD_NAND_BRCMNAND | 1 + baseconfig/arm/armv7/CONFIG_MTD_NAND_CAFE | 1 + baseconfig/arm/armv7/CONFIG_MTD_NAND_DENALI | 1 + baseconfig/arm/armv7/CONFIG_MTD_NAND_DOCG4 | 1 + baseconfig/arm/armv7/CONFIG_MTD_NAND_ECC_SMC | 1 + baseconfig/arm/armv7/CONFIG_MTD_NAND_FSMC | 1 + baseconfig/arm/armv7/CONFIG_MTD_NAND_GPIO | 1 + baseconfig/arm/armv7/CONFIG_MTD_NAND_MTK | 1 + baseconfig/arm/armv7/CONFIG_MTD_NAND_MXC | 1 + baseconfig/arm/armv7/CONFIG_MTD_NAND_NANDSIM | 1 + baseconfig/arm/armv7/CONFIG_MTD_NAND_ORION | 1 + baseconfig/arm/armv7/CONFIG_MTD_NAND_PLATFORM | 1 + baseconfig/arm/armv7/CONFIG_MTD_NAND_PXA3xx | 1 + baseconfig/arm/armv7/CONFIG_MTD_NAND_RICOH | 1 + baseconfig/arm/armv7/CONFIG_MTD_NAND_SUNXI | 1 + baseconfig/arm/armv7/CONFIG_MTD_NAND_TMIO | 1 + baseconfig/arm/armv7/CONFIG_MTD_SPINAND_MT29F | 1 + .../arm/armv7/CONFIG_MTD_SPINAND_ONDIEECC | 1 + baseconfig/arm/armv7/CONFIG_MTD_SPI_NOR | 1 + .../armv7/CONFIG_MTD_SPI_NOR_USE_4K_SECTORS | 1 + baseconfig/arm/armv7/CONFIG_MTD_SST25L | 1 + baseconfig/arm/armv7/CONFIG_MTD_ST_SPI_FSM | 1 + baseconfig/arm/armv7/CONFIG_MVPP2 | 1 + baseconfig/arm/armv7/CONFIG_NEON | 1 + .../arm/armv7/CONFIG_NET_VENDOR_ALLWINNER | 1 + baseconfig/arm/armv7/CONFIG_NET_VENDOR_CIRRUS | 1 + .../arm/armv7/CONFIG_NET_VENDOR_MICROCHIP | 1 + baseconfig/arm/armv7/CONFIG_NR_CPUS | 1 + baseconfig/arm/armv7/CONFIG_NVMEM_SUNXI_SID | 1 + baseconfig/arm/armv7/CONFIG_OABI_COMPAT | 1 + baseconfig/arm/armv7/CONFIG_OMAP2_DSS_DEBUG | 1 + baseconfig/arm/armv7/CONFIG_OMAP3_THERMAL | 1 + baseconfig/arm/armv7/CONFIG_ORION_WATCHDOG | 1 + baseconfig/arm/armv7/CONFIG_P54_SPI | 1 + .../arm/armv7/CONFIG_P54_SPI_DEFAULT_EEPROM | 1 + baseconfig/arm/armv7/CONFIG_PATA_PLATFORM | 1 + baseconfig/arm/armv7/CONFIG_PCIE_ALTERA | 1 + baseconfig/arm/armv7/CONFIG_PCIE_ARMADA_8K | 1 + baseconfig/arm/armv7/CONFIG_PCI_EXYNOS | 1 + baseconfig/arm/armv7/CONFIG_PCI_LAYERSCAPE | 1 + baseconfig/arm/armv7/CONFIG_PDA_POWER | 1 + .../arm/armv7/CONFIG_PHY_EXYNOS5250_SATA | 1 + .../arm/armv7/CONFIG_PHY_EXYNOS5_USBDRD | 1 + .../arm/armv7/CONFIG_PHY_EXYNOS_DP_VIDEO | 1 + .../arm/armv7/CONFIG_PHY_EXYNOS_MIPI_VIDEO | 1 + baseconfig/arm/armv7/CONFIG_PHY_SAMSUNG_USB2 | 1 + baseconfig/arm/armv7/CONFIG_PHY_SUN4I_USB | 1 + baseconfig/arm/armv7/CONFIG_PHY_SUN9I_USB | 1 + baseconfig/arm/armv7/CONFIG_PINCTRL_AMD | 1 + .../arm/armv7/CONFIG_PINCTRL_ARMADA_370 | 1 + baseconfig/arm/armv7/CONFIG_PINCTRL_ARMADA_XP | 1 + baseconfig/arm/armv7/CONFIG_PINCTRL_AS3722 | 1 + baseconfig/arm/armv7/CONFIG_PINCTRL_BCM281XX | 1 + baseconfig/arm/armv7/CONFIG_PINCTRL_DOVE | 1 + baseconfig/arm/armv7/CONFIG_PINCTRL_IMX35 | 1 + baseconfig/arm/armv7/CONFIG_PINCTRL_MDM9615 | 1 + baseconfig/arm/armv7/CONFIG_PINCTRL_MSM8996 | 1 + baseconfig/arm/armv7/CONFIG_PINCTRL_SAMSUNG | 1 + baseconfig/arm/armv7/CONFIG_PJ4B_ERRATA_4742 | 1 + .../arm/armv7/CONFIG_PL310_ERRATA_588369 | 1 + .../arm/armv7/CONFIG_PL310_ERRATA_727915 | 1 + .../arm/armv7/CONFIG_PL310_ERRATA_753970 | 1 + .../arm/armv7/CONFIG_PL310_ERRATA_769419 | 1 + baseconfig/arm/armv7/CONFIG_PL320_MBOX | 1 + baseconfig/arm/armv7/CONFIG_PLAT_SPEAR | 1 + baseconfig/arm/armv7/CONFIG_PMIC_ADP5520 | 1 + baseconfig/arm/armv7/CONFIG_PMIC_DA903X | 1 + baseconfig/arm/armv7/CONFIG_PM_DEVFREQ_EVENT | 1 + .../arm/armv7/CONFIG_POWER_RESET_AS3722 | 1 + .../arm/armv7/CONFIG_POWER_RESET_BRCMSTB | 1 + baseconfig/arm/armv7/CONFIG_POWER_RESET_QNAP | 1 + .../arm/armv7/CONFIG_POWER_RESET_SYSCON | 1 + .../armv7/CONFIG_POWER_RESET_SYSCON_POWEROFF | 1 + baseconfig/arm/armv7/CONFIG_PWM_CROS_EC | 1 + baseconfig/arm/armv7/CONFIG_PWM_SAMSUNG | 1 + baseconfig/arm/armv7/CONFIG_PWM_SUN4I | 1 + baseconfig/arm/armv7/CONFIG_QCOM_EBI2 | 1 + .../arm/armv7/CONFIG_QCOM_SPMI_TEMP_ALARM | 1 + baseconfig/arm/armv7/CONFIG_QORIQ_CPUFREQ | 1 + baseconfig/arm/armv7/CONFIG_R8188EU | 1 + baseconfig/arm/armv7/CONFIG_RCU_FANOUT | 1 + baseconfig/arm/armv7/CONFIG_REGMAP_I2C | 1 + baseconfig/arm/armv7/CONFIG_REGMAP_IRQ | 1 + baseconfig/arm/armv7/CONFIG_REGMAP_MMIO | 1 + baseconfig/arm/armv7/CONFIG_REGMAP_SPI | 1 + baseconfig/arm/armv7/CONFIG_REGULATOR_ACT8865 | 1 + baseconfig/arm/armv7/CONFIG_REGULATOR_AD5398 | 1 + baseconfig/arm/armv7/CONFIG_REGULATOR_AS3722 | 1 + baseconfig/arm/armv7/CONFIG_REGULATOR_AXP20X | 1 + baseconfig/arm/armv7/CONFIG_REGULATOR_DA9210 | 1 + baseconfig/arm/armv7/CONFIG_REGULATOR_DA9211 | 1 + .../arm/armv7/CONFIG_REGULATOR_FAN53555 | 1 + .../arm/armv7/CONFIG_REGULATOR_ISL6271A | 1 + baseconfig/arm/armv7/CONFIG_REGULATOR_ISL9305 | 1 + baseconfig/arm/armv7/CONFIG_REGULATOR_LP3971 | 1 + baseconfig/arm/armv7/CONFIG_REGULATOR_LP3972 | 1 + baseconfig/arm/armv7/CONFIG_REGULATOR_LP872X | 1 + baseconfig/arm/armv7/CONFIG_REGULATOR_LP8755 | 1 + baseconfig/arm/armv7/CONFIG_REGULATOR_LTC3589 | 1 + baseconfig/arm/armv7/CONFIG_REGULATOR_MAX1586 | 1 + .../arm/armv7/CONFIG_REGULATOR_MAX77686 | 1 + .../arm/armv7/CONFIG_REGULATOR_MAX77802 | 1 + baseconfig/arm/armv7/CONFIG_REGULATOR_MAX8649 | 1 + baseconfig/arm/armv7/CONFIG_REGULATOR_MAX8660 | 1 + baseconfig/arm/armv7/CONFIG_REGULATOR_MAX8952 | 1 + baseconfig/arm/armv7/CONFIG_REGULATOR_MAX8973 | 1 + baseconfig/arm/armv7/CONFIG_REGULATOR_MAX8997 | 1 + baseconfig/arm/armv7/CONFIG_REGULATOR_MT6311 | 1 + .../arm/armv7/CONFIG_REGULATOR_PFUZE100 | 1 + baseconfig/arm/armv7/CONFIG_REGULATOR_PV88060 | 1 + baseconfig/arm/armv7/CONFIG_REGULATOR_PV88080 | 1 + baseconfig/arm/armv7/CONFIG_REGULATOR_PV88090 | 1 + baseconfig/arm/armv7/CONFIG_REGULATOR_S2MPA01 | 1 + baseconfig/arm/armv7/CONFIG_REGULATOR_S2MPS11 | 1 + baseconfig/arm/armv7/CONFIG_REGULATOR_S5M8767 | 1 + .../arm/armv7/CONFIG_REGULATOR_TPS51632 | 1 + .../arm/armv7/CONFIG_REGULATOR_TPS62360 | 1 + .../arm/armv7/CONFIG_REGULATOR_TPS65023 | 1 + .../arm/armv7/CONFIG_REGULATOR_TPS6507X | 1 + .../arm/armv7/CONFIG_REGULATOR_TPS65090 | 1 + .../arm/armv7/CONFIG_REGULATOR_TPS65217 | 1 + .../arm/armv7/CONFIG_REGULATOR_TPS6524X | 1 + .../arm/armv7/CONFIG_REGULATOR_TPS6586X | 1 + .../arm/armv7/CONFIG_REGULATOR_TPS65910 | 1 + .../arm/armv7/CONFIG_REGULATOR_TPS65912 | 1 + .../arm/armv7/CONFIG_REGULATOR_TPS80031 | 1 + baseconfig/arm/armv7/CONFIG_REGULATOR_WM8994 | 1 + baseconfig/arm/armv7/CONFIG_RTC_DRV_ARMADA38X | 1 + baseconfig/arm/armv7/CONFIG_RTC_DRV_AS3722 | 1 + baseconfig/arm/armv7/CONFIG_RTC_DRV_DS1305 | 1 + baseconfig/arm/armv7/CONFIG_RTC_DRV_DS1343 | 1 + baseconfig/arm/armv7/CONFIG_RTC_DRV_DS1347 | 1 + baseconfig/arm/armv7/CONFIG_RTC_DRV_DS1390 | 1 + baseconfig/arm/armv7/CONFIG_RTC_DRV_M41T93 | 1 + baseconfig/arm/armv7/CONFIG_RTC_DRV_M41T94 | 1 + baseconfig/arm/armv7/CONFIG_RTC_DRV_MAX6902 | 1 + baseconfig/arm/armv7/CONFIG_RTC_DRV_MAX8997 | 1 + baseconfig/arm/armv7/CONFIG_RTC_DRV_MCP795 | 1 + baseconfig/arm/armv7/CONFIG_RTC_DRV_PL030 | 1 + baseconfig/arm/armv7/CONFIG_RTC_DRV_R9701 | 1 + baseconfig/arm/armv7/CONFIG_RTC_DRV_RS5C348 | 1 + baseconfig/arm/armv7/CONFIG_RTC_DRV_RX4581 | 1 + baseconfig/arm/armv7/CONFIG_RTC_DRV_S3C | 1 + baseconfig/arm/armv7/CONFIG_RTC_DRV_S5M | 1 + baseconfig/arm/armv7/CONFIG_RTC_DRV_SUN6I | 1 + baseconfig/arm/armv7/CONFIG_RTC_DRV_SUNXI | 1 + baseconfig/arm/armv7/CONFIG_RTC_DRV_TPS65910 | 1 + baseconfig/arm/armv7/CONFIG_RTC_DRV_TPS80031 | 1 + baseconfig/arm/armv7/CONFIG_S3C2410_WATCHDOG | 1 + baseconfig/arm/armv7/CONFIG_SAMSUNG_PM_CHECK | 1 + baseconfig/arm/armv7/CONFIG_SAMSUNG_PM_DEBUG | 1 + baseconfig/arm/armv7/CONFIG_SAMSUNG_USBPHY | 1 + baseconfig/arm/armv7/CONFIG_SATA_HIGHBANK | 1 + baseconfig/arm/armv7/CONFIG_SCSI_ACARD | 1 + baseconfig/arm/armv7/CONFIG_SENSORS_AD7314 | 1 + baseconfig/arm/armv7/CONFIG_SENSORS_ADS7871 | 1 + baseconfig/arm/armv7/CONFIG_SENSORS_GPIO_FAN | 1 + baseconfig/arm/armv7/CONFIG_SENSORS_ISL29018 | 1 + baseconfig/arm/armv7/CONFIG_SENSORS_ISL29028 | 1 + baseconfig/arm/armv7/CONFIG_SENSORS_LM70 | 1 + .../armv7/CONFIG_SENSORS_LTC2978_REGULATOR | 1 + baseconfig/arm/armv7/CONFIG_SENSORS_MAX1111 | 1 + baseconfig/arm/armv7/CONFIG_SERIAL_8250_EM | 1 + baseconfig/arm/armv7/CONFIG_SERIAL_AMBA_PL010 | 1 + .../armv7/CONFIG_SERIAL_AMBA_PL010_CONSOLE | 1 + baseconfig/arm/armv7/CONFIG_SERIAL_BCM63XX | 1 + baseconfig/arm/armv7/CONFIG_SERIAL_IFX6X60 | 1 + baseconfig/arm/armv7/CONFIG_SERIAL_MAX3100 | 1 + baseconfig/arm/armv7/CONFIG_SERIAL_MAX310X | 1 + baseconfig/arm/armv7/CONFIG_SERIAL_MPS2_UART | 1 + baseconfig/arm/armv7/CONFIG_SERIAL_SAMSUNG | 1 + .../arm/armv7/CONFIG_SERIAL_SAMSUNG_CONSOLE | 1 + .../arm/armv7/CONFIG_SERIAL_SAMSUNG_DEBUG | 1 + baseconfig/arm/armv7/CONFIG_SERIO_SUN4I_PS2 | 1 + baseconfig/arm/armv7/CONFIG_SFC | 1 + baseconfig/arm/armv7/CONFIG_SI7005 | 1 + baseconfig/arm/armv7/CONFIG_SI7020 | 1 + baseconfig/arm/armv7/CONFIG_SMP_ON_UP | 1 + baseconfig/arm/armv7/CONFIG_SND_ALI5451 | 1 + baseconfig/arm/armv7/CONFIG_SND_ARM | 1 + baseconfig/arm/armv7/CONFIG_SND_ARMAACI | 1 + baseconfig/arm/armv7/CONFIG_SND_KIRKWOOD_SOC | 1 + .../CONFIG_SND_KIRKWOOD_SOC_ARMADA370_DB | 1 + baseconfig/arm/armv7/CONFIG_SND_SAMSUNG_PCM | 1 + baseconfig/arm/armv7/CONFIG_SND_SAMSUNG_SPDIF | 1 + baseconfig/arm/armv7/CONFIG_SND_SOC_AC97_BUS | 1 + .../arm/armv7/CONFIG_SND_SOC_AC97_CODEC | 1 + .../arm/armv7/CONFIG_SND_SOC_APQ8016_SBC | 1 + .../CONFIG_SND_SOC_ARNDALE_RT5631_ALC5631 | 1 + .../arm/armv7/CONFIG_SND_SOC_RK3399_GRU_SOUND | 1 + baseconfig/arm/armv7/CONFIG_SND_SOC_RT5631 | 1 + baseconfig/arm/armv7/CONFIG_SND_SOC_SAMSUNG | 1 + .../armv7/CONFIG_SND_SOC_SAMSUNG_SMDK_SPDIF | 1 + .../armv7/CONFIG_SND_SOC_SAMSUNG_SMDK_WM8994 | 1 + .../arm/armv7/CONFIG_SND_SOC_SMDK_WM8994_PCM | 1 + baseconfig/arm/armv7/CONFIG_SND_SOC_SNOW | 1 + baseconfig/arm/armv7/CONFIG_SND_SOC_TAS571X | 1 + baseconfig/arm/armv7/CONFIG_SND_SOC_TEGRA | 1 + .../arm/armv7/CONFIG_SND_SOC_TEGRA30_AHUB | 1 + .../arm/armv7/CONFIG_SND_SOC_TEGRA30_I2S | 1 + .../arm/armv7/CONFIG_SND_SOC_TEGRA_MAX98090 | 1 + .../arm/armv7/CONFIG_SND_SOC_TEGRA_RT5640 | 1 + .../arm/armv7/CONFIG_SND_SOC_TEGRA_RT5677 | 1 + .../arm/armv7/CONFIG_SND_SOC_TEGRA_SGTL5000 | 1 + baseconfig/arm/armv7/CONFIG_SND_SOC_TS3A227E | 1 + baseconfig/arm/armv7/CONFIG_SND_SUN4I_CODEC | 1 + baseconfig/arm/armv7/CONFIG_SND_SUN4I_I2S | 1 + baseconfig/arm/armv7/CONFIG_SND_SUN4I_SPDIF | 1 + baseconfig/arm/armv7/CONFIG_SOC_BRCMSTB | 1 + baseconfig/arm/armv7/CONFIG_SOC_EXYNOS3250 | 1 + baseconfig/arm/armv7/CONFIG_SOC_EXYNOS5250 | 1 + baseconfig/arm/armv7/CONFIG_SOC_EXYNOS5260 | 1 + baseconfig/arm/armv7/CONFIG_SOC_EXYNOS5410 | 1 + baseconfig/arm/armv7/CONFIG_SOC_EXYNOS5420 | 1 + baseconfig/arm/armv7/CONFIG_SOC_EXYNOS5440 | 1 + baseconfig/arm/armv7/CONFIG_SOC_EXYNOS5800 | 1 + .../arm/armv7/CONFIG_SPI_CADENCE_QUADSPI | 1 + baseconfig/arm/armv7/CONFIG_SPI_PXA2XX | 1 + baseconfig/arm/armv7/CONFIG_SPI_S3C64XX | 1 + baseconfig/arm/armv7/CONFIG_SPI_SUN4I | 1 + baseconfig/arm/armv7/CONFIG_SPI_SUN6I | 1 + baseconfig/arm/armv7/CONFIG_STMMAC_PLATFORM | 1 + baseconfig/arm/armv7/CONFIG_SUN4I_EMAC | 1 + baseconfig/arm/armv7/CONFIG_SUN8I_EMAC | 1 + baseconfig/arm/armv7/CONFIG_SUN8I_H3_CCU | 1 + baseconfig/arm/armv7/CONFIG_SUNGEM | 1 + baseconfig/arm/armv7/CONFIG_SUNXI_CCU | 1 + baseconfig/arm/armv7/CONFIG_SUNXI_SRAM | 1 + baseconfig/arm/armv7/CONFIG_SUNXI_WATCHDOG | 1 + baseconfig/arm/armv7/CONFIG_SWP_EMULATE | 1 + .../arm/armv7/CONFIG_TCG_TIS_I2C_INFINEON | 1 + baseconfig/arm/armv7/CONFIG_TEGRA_GMI | 1 + baseconfig/arm/armv7/CONFIG_THUMB2_KERNEL | 1 + baseconfig/arm/armv7/CONFIG_TI_DAC7512 | 1 + baseconfig/arm/armv7/CONFIG_TI_DAVINCI_MDIO | 1 + baseconfig/arm/armv7/CONFIG_TI_EDMA | 1 + baseconfig/arm/armv7/CONFIG_TI_SOC_THERMAL | 1 + baseconfig/arm/armv7/CONFIG_TI_THERMAL | 1 + .../arm/armv7/CONFIG_TOUCHSCREEN_AD7877 | 1 + .../arm/armv7/CONFIG_TOUCHSCREEN_ADS7846 | 1 + .../armv7/CONFIG_TOUCHSCREEN_CHIPONE_ICN8318 | 1 + .../arm/armv7/CONFIG_TOUCHSCREEN_MC13783 | 1 + baseconfig/arm/armv7/CONFIG_TOUCHSCREEN_SUN4I | 1 + .../arm/armv7/CONFIG_TOUCHSCREEN_TSC2005 | 1 + baseconfig/arm/armv7/CONFIG_TWL4030_CORE | 1 + baseconfig/arm/armv7/CONFIG_TWL6040_CORE | 1 + .../arm/armv7/CONFIG_UACCESS_WITH_MEMCPY | 1 + baseconfig/arm/armv7/CONFIG_UBIFS_FS | 1 + .../arm/armv7/CONFIG_UBIFS_FS_ADVANCED_COMPR | 1 + baseconfig/arm/armv7/CONFIG_UBIFS_FS_LZO | 1 + baseconfig/arm/armv7/CONFIG_UBIFS_FS_ZLIB | 1 + baseconfig/arm/armv7/CONFIG_USB_DWC3_EXYNOS | 1 + baseconfig/arm/armv7/CONFIG_USB_EHCI_EXYNOS | 1 + .../arm/armv7/CONFIG_USB_EHCI_HCD_ORION | 1 + baseconfig/arm/armv7/CONFIG_USB_MUSB_SUNXI | 1 + baseconfig/arm/armv7/CONFIG_USB_OHCI_EXYNOS | 1 + baseconfig/arm/armv7/CONFIG_USE_OF | 1 + .../armv7/CONFIG_VFIO_PLATFORM_AMDXGBE_RESET | 1 + .../CONFIG_VFIO_PLATFORM_CALXEDAXGMAC_RESET | 1 + baseconfig/arm/armv7/CONFIG_VFP | 1 + baseconfig/arm/armv7/CONFIG_VFPv3 | 1 + .../arm/armv7/CONFIG_VIDEO_EXYNOS4_FIMC_IS | 1 + .../CONFIG_VIDEO_EXYNOS4_ISP_DMA_CAPTURE | 1 + .../arm/armv7/CONFIG_VIDEO_EXYNOS_FIMC_LITE | 1 + baseconfig/arm/armv7/CONFIG_VIDEO_S5P_FIMC | 1 + .../arm/armv7/CONFIG_VIDEO_S5P_MIPI_CSIS | 1 + .../arm/armv7/CONFIG_VIDEO_SAMSUNG_EXYNOS4_IS | 1 + .../arm/armv7/CONFIG_VIDEO_SAMSUNG_EXYNOS_GSC | 1 + .../arm/armv7/CONFIG_VIDEO_SAMSUNG_S5P_CEC | 1 + .../arm/armv7/CONFIG_VIDEO_SAMSUNG_S5P_G2D | 1 + .../arm/armv7/CONFIG_VIDEO_SAMSUNG_S5P_JPEG | 1 + .../arm/armv7/CONFIG_VIDEO_SAMSUNG_S5P_MFC | 1 + .../arm/armv7/CONFIG_VIDEO_SAMSUNG_S5P_TV | 1 + baseconfig/arm/armv7/CONFIG_W1_MASTER_GPIO | 1 + baseconfig/arm/armv7/CONFIG_XIP_KERNEL | 1 + baseconfig/arm/armv7/CONFIG_ZBOOT_ROM_BSS | 1 + baseconfig/arm/armv7/CONFIG_ZBOOT_ROM_TEXT | 1 + baseconfig/arm/armv7/README | 2 + baseconfig/arm/armv7/armv7/CONFIG_AHCI_IMX | 1 + baseconfig/arm/armv7/armv7/CONFIG_AK8975 | 1 + .../arm/armv7/armv7/CONFIG_AM335X_CONTROL_USB | 1 + .../arm/armv7/armv7/CONFIG_AM335X_PHY_USB | 1 + .../arm/armv7/armv7/CONFIG_APQ_GCC_8084 | 1 + .../arm/armv7/armv7/CONFIG_APQ_MMCC_8084 | 1 + baseconfig/arm/armv7/armv7/CONFIG_ARCH_BERLIN | 1 + .../arm/armv7/armv7/CONFIG_ARCH_EXYNOS4 | 1 + .../arm/armv7/armv7/CONFIG_ARCH_KEYSTONE | 1 + .../arm/armv7/armv7/CONFIG_ARCH_MDM9615 | 1 + baseconfig/arm/armv7/armv7/CONFIG_ARCH_MMP | 1 + .../arm/armv7/armv7/CONFIG_ARCH_MSM8960 | 1 + .../arm/armv7/armv7/CONFIG_ARCH_MSM8974 | 1 + .../arm/armv7/armv7/CONFIG_ARCH_MSM8X60 | 1 + baseconfig/arm/armv7/armv7/CONFIG_ARCH_MXC | 1 + .../armv7/armv7/CONFIG_ARCH_OMAP2PLUS_TYPICAL | 1 + baseconfig/arm/armv7/armv7/CONFIG_ARCH_OMAP3 | 1 + baseconfig/arm/armv7/armv7/CONFIG_ARCH_OMAP4 | 1 + baseconfig/arm/armv7/armv7/CONFIG_ARCH_QCOM | 1 + baseconfig/arm/armv7/armv7/CONFIG_ARCH_TEGRA | 1 + .../arm/armv7/armv7/CONFIG_ARCH_TEGRA_2x_SOC | 1 + .../arm/armv7/armv7/CONFIG_ARCH_TEGRA_3x_SOC | 1 + baseconfig/arm/armv7/armv7/CONFIG_ARCH_ZYNQ | 1 + .../arm/armv7/armv7/CONFIG_ARM_IMX6Q_CPUFREQ | 1 + baseconfig/arm/armv7/armv7/CONFIG_ARM_LPAE | 1 + .../armv7/armv7/CONFIG_ARM_OMAP2PLUS_CPUFREQ | 1 + .../arm/armv7/armv7/CONFIG_ARM_VIRT_EXT | 1 + .../arm/armv7/armv7/CONFIG_ARM_ZYNQ_CPUIDLE | 1 + baseconfig/arm/armv7/armv7/CONFIG_AXI_DMAC | 1 + .../arm/armv7/armv7/CONFIG_BACKLIGHT_DA9052 | 1 + .../arm/armv7/armv7/CONFIG_BACKLIGHT_PANDORA | 1 + .../arm/armv7/armv7/CONFIG_BACKLIGHT_TPS65217 | 1 + .../arm/armv7/armv7/CONFIG_BATTERY_BQ27XXX | 1 + .../armv7/armv7/CONFIG_BATTERY_BQ27XXX_I2C | 1 + .../arm/armv7/armv7/CONFIG_BATTERY_DA9052 | 1 + .../arm/armv7/armv7/CONFIG_BATTERY_RX51 | 1 + .../armv7/armv7/CONFIG_BATTERY_TWL4030_MADC | 1 + .../arm/armv7/armv7/CONFIG_CADENCE_WATCHDOG | 1 + baseconfig/arm/armv7/armv7/CONFIG_CAN_C_CAN | 1 + .../arm/armv7/armv7/CONFIG_CAN_C_CAN_PLATFORM | 1 + baseconfig/arm/armv7/armv7/CONFIG_CAN_FLEXCAN | 1 + .../arm/armv7/armv7/CONFIG_CHARGER_BQ2415X | 1 + .../arm/armv7/armv7/CONFIG_CHARGER_ISP1704 | 1 + .../arm/armv7/armv7/CONFIG_CHARGER_TPS65217 | 1 + .../arm/armv7/armv7/CONFIG_CHARGER_TWL4030 | 1 + baseconfig/arm/armv7/armv7/CONFIG_CLK_TWL6040 | 1 + baseconfig/arm/armv7/armv7/CONFIG_CM36651 | 1 + .../armv7/armv7/CONFIG_COMMON_CLK_AXI_CLKGEN | 1 + .../arm/armv7/armv7/CONFIG_COMMON_CLK_PALMAS | 1 + .../arm/armv7/armv7/CONFIG_COMMON_CLK_QCOM | 1 + .../arm/armv7/armv7/CONFIG_COMMON_CLK_SI570 | 1 + .../armv7/armv7/CONFIG_COMMON_CLK_TI_ADPLL | 1 + .../armv7/CONFIG_COMMON_CLK_XLNX_CLKWZRD | 1 + .../armv7/armv7/CONFIG_CRYPTO_DEV_FSL_CAAM | 1 + .../CONFIG_CRYPTO_DEV_FSL_CAAM_AHASH_API | 1 + .../CONFIG_CRYPTO_DEV_FSL_CAAM_CRYPTO_API | 1 + .../armv7/CONFIG_CRYPTO_DEV_FSL_CAAM_DEBUG | 1 + .../armv7/CONFIG_CRYPTO_DEV_FSL_CAAM_INTC | 1 + ...CONFIG_CRYPTO_DEV_FSL_CAAM_INTC_COUNT_THLD | 1 + .../CONFIG_CRYPTO_DEV_FSL_CAAM_INTC_TIME_THLD | 1 + .../armv7/armv7/CONFIG_CRYPTO_DEV_FSL_CAAM_JR | 1 + .../armv7/CONFIG_CRYPTO_DEV_FSL_CAAM_PKC_API | 1 + .../armv7/CONFIG_CRYPTO_DEV_FSL_CAAM_RINGSIZE | 1 + .../armv7/CONFIG_CRYPTO_DEV_FSL_CAAM_RNG_API | 1 + .../arm/armv7/armv7/CONFIG_CRYPTO_DEV_MXC_SCC | 1 + .../arm/armv7/armv7/CONFIG_CRYPTO_DEV_MXS_DCP | 1 + .../armv7/armv7/CONFIG_CRYPTO_DEV_OMAP_AES | 1 + .../armv7/armv7/CONFIG_CRYPTO_DEV_OMAP_DES | 1 + .../armv7/armv7/CONFIG_CRYPTO_DEV_OMAP_SHAM | 1 + .../armv7/armv7/CONFIG_CRYPTO_DEV_PICOXCELL | 1 + .../arm/armv7/armv7/CONFIG_CRYPTO_DEV_QCE | 1 + .../arm/armv7/armv7/CONFIG_CRYPTO_DEV_SAHARA | 1 + .../arm/armv7/armv7/CONFIG_DA9052_WATCHDOG | 1 + .../arm/armv7/armv7/CONFIG_DA9055_WATCHDOG | 1 + baseconfig/arm/armv7/armv7/CONFIG_DDR | 1 + baseconfig/arm/armv7/armv7/CONFIG_DMA_OMAP | 1 + baseconfig/arm/armv7/armv7/CONFIG_DRM_ETNAVIV | 1 + .../armv7/CONFIG_DRM_ETNAVIV_REGISTER_LOGGING | 1 + baseconfig/arm/armv7/armv7/CONFIG_DRM_IMX | 1 + .../arm/armv7/armv7/CONFIG_DRM_IMX_HDMI | 1 + .../arm/armv7/armv7/CONFIG_DRM_IMX_IPUV3 | 1 + baseconfig/arm/armv7/armv7/CONFIG_DRM_IMX_LDB | 1 + .../armv7/CONFIG_DRM_IMX_PARALLEL_DISPLAY | 1 + baseconfig/arm/armv7/armv7/CONFIG_DRM_IMX_TVE | 1 + baseconfig/arm/armv7/armv7/CONFIG_DRM_MSM | 1 + baseconfig/arm/armv7/armv7/CONFIG_DRM_MSM_DSI | 1 + .../arm/armv7/armv7/CONFIG_DRM_MSM_HDMI_HDCP | 1 + .../armv7/CONFIG_DRM_MSM_REGISTER_LOGGING | 1 + baseconfig/arm/armv7/armv7/CONFIG_DRM_OMAP | 1 + .../armv7/CONFIG_DRM_OMAP_CONNECTOR_ANALOG_TV | 1 + .../armv7/armv7/CONFIG_DRM_OMAP_CONNECTOR_DVI | 1 + .../armv7/CONFIG_DRM_OMAP_CONNECTOR_HDMI | 1 + .../armv7/CONFIG_DRM_OMAP_ENCODER_OPA362 | 1 + .../armv7/CONFIG_DRM_OMAP_ENCODER_TFP410 | 1 + .../armv7/CONFIG_DRM_OMAP_ENCODER_TPD12S015 | 1 + .../arm/armv7/armv7/CONFIG_DRM_OMAP_NUM_CRTCS | 1 + .../arm/armv7/armv7/CONFIG_DRM_OMAP_PANEL_DPI | 1 + .../armv7/armv7/CONFIG_DRM_OMAP_PANEL_DSI_CM | 1 + .../CONFIG_DRM_OMAP_PANEL_LGPHILIPS_LB035Q02 | 1 + .../CONFIG_DRM_OMAP_PANEL_NEC_NL8048HL11 | 1 + .../CONFIG_DRM_OMAP_PANEL_SHARP_LS037V7DW01 | 1 + .../CONFIG_DRM_OMAP_PANEL_SONY_ACX565AKM | 1 + .../CONFIG_DRM_OMAP_PANEL_TPO_TD028TTEC1 | 1 + .../CONFIG_DRM_OMAP_PANEL_TPO_TD043MTEA1 | 1 + baseconfig/arm/armv7/armv7/CONFIG_DRM_TILCDC | 1 + .../armv7/CONFIG_DRM_TILCDC_SLAVE_COMPAT | 1 + .../arm/armv7/armv7/CONFIG_EDAC_SYNOPSYS | 1 + baseconfig/arm/armv7/armv7/CONFIG_EXTCON | 1 + .../arm/armv7/armv7/CONFIG_EXTCON_PALMAS | 1 + baseconfig/arm/armv7/armv7/CONFIG_FB_IMX | 1 + baseconfig/arm/armv7/armv7/CONFIG_FB_MX3 | 1 + baseconfig/arm/armv7/armv7/CONFIG_FB_MXS | 1 + baseconfig/arm/armv7/armv7/CONFIG_FEC | 1 + baseconfig/arm/armv7/armv7/CONFIG_FSL_PQ_MDIO | 1 + .../arm/armv7/armv7/CONFIG_FSL_XGMAC_MDIO | 1 + baseconfig/arm/armv7/armv7/CONFIG_GIANFAR | 1 + baseconfig/arm/armv7/armv7/CONFIG_GPIO_DA9052 | 1 + baseconfig/arm/armv7/armv7/CONFIG_GPIO_DA9055 | 1 + baseconfig/arm/armv7/armv7/CONFIG_GPIO_OMAP | 1 + baseconfig/arm/armv7/armv7/CONFIG_GPIO_PALMAS | 1 + baseconfig/arm/armv7/armv7/CONFIG_GPIO_STMPE | 1 + .../arm/armv7/armv7/CONFIG_GPIO_TPS65218 | 1 + .../arm/armv7/armv7/CONFIG_GPIO_TPS6586X | 1 + baseconfig/arm/armv7/armv7/CONFIG_GPIO_TS4800 | 1 + baseconfig/arm/armv7/armv7/CONFIG_GPIO_TS4900 | 1 + .../arm/armv7/armv7/CONFIG_GPIO_TWL4030 | 1 + .../arm/armv7/armv7/CONFIG_GPIO_TWL6040 | 1 + baseconfig/arm/armv7/armv7/CONFIG_GPIO_XILINX | 1 + baseconfig/arm/armv7/armv7/CONFIG_GPIO_ZYNQ | 1 + baseconfig/arm/armv7/armv7/CONFIG_GS_FPGABOOT | 1 + .../arm/armv7/armv7/CONFIG_HDQ_MASTER_OMAP | 1 + .../arm/armv7/armv7/CONFIG_HUGETLB_PAGE | 1 + .../arm/armv7/armv7/CONFIG_HWSPINLOCK_OMAP | 1 + .../arm/armv7/armv7/CONFIG_HWSPINLOCK_QCOM | 1 + .../arm/armv7/armv7/CONFIG_HW_RANDOM_MSM | 1 + .../arm/armv7/armv7/CONFIG_HW_RANDOM_MXC_RNGA | 1 + .../arm/armv7/armv7/CONFIG_HW_RANDOM_OMAP | 1 + .../armv7/armv7/CONFIG_HW_RANDOM_OMAP3_ROM | 1 + baseconfig/arm/armv7/armv7/CONFIG_I2C_CADENCE | 1 + baseconfig/arm/armv7/armv7/CONFIG_I2C_IMX | 1 + baseconfig/arm/armv7/armv7/CONFIG_I2C_OMAP | 1 + baseconfig/arm/armv7/armv7/CONFIG_I2C_PXA | 1 + .../arm/armv7/armv7/CONFIG_I2C_PXA_SLAVE | 1 + baseconfig/arm/armv7/armv7/CONFIG_I2C_QUP | 1 + baseconfig/arm/armv7/armv7/CONFIG_I2C_XILINX | 1 + baseconfig/arm/armv7/armv7/CONFIG_IMX2_WDT | 1 + baseconfig/arm/armv7/armv7/CONFIG_IMX7D_ADC | 1 + baseconfig/arm/armv7/armv7/CONFIG_IMX_DMA | 1 + baseconfig/arm/armv7/armv7/CONFIG_IMX_GPCV2 | 1 + .../arm/armv7/armv7/CONFIG_IMX_IPUV3_CORE | 1 + baseconfig/arm/armv7/armv7/CONFIG_IMX_SDMA | 1 + baseconfig/arm/armv7/armv7/CONFIG_IMX_THERMAL | 1 + baseconfig/arm/armv7/armv7/CONFIG_IMX_WEIM | 1 + .../armv7/armv7/CONFIG_INPUT_88PM80X_ONKEY | 1 + .../arm/armv7/armv7/CONFIG_INPUT_DA9052_ONKEY | 1 + .../arm/armv7/armv7/CONFIG_INPUT_DA9055_ONKEY | 1 + .../arm/armv7/armv7/CONFIG_INPUT_MATRIXKMAP | 1 + .../armv7/armv7/CONFIG_INPUT_PALMAS_PWRBUTTON | 1 + .../armv7/armv7/CONFIG_INPUT_PM8941_PWRKEY | 1 + .../armv7/armv7/CONFIG_INPUT_PM8XXX_VIBRATOR | 1 + .../armv7/armv7/CONFIG_INPUT_PMIC8XXX_PWRKEY | 1 + .../arm/armv7/armv7/CONFIG_INPUT_PWM_BEEPER | 1 + .../armv7/CONFIG_INPUT_TPS65218_PWRBUTTON | 1 + .../armv7/CONFIG_INPUT_TWL4030_PWRBUTTON | 1 + .../armv7/armv7/CONFIG_INPUT_TWL4030_VIBRA | 1 + .../armv7/armv7/CONFIG_INPUT_TWL6040_VIBRA | 1 + baseconfig/arm/armv7/armv7/CONFIG_IR_RX51 | 1 + .../arm/armv7/armv7/CONFIG_KEYBOARD_IMX | 1 + .../arm/armv7/armv7/CONFIG_KEYBOARD_NVEC | 1 + .../arm/armv7/armv7/CONFIG_KEYBOARD_OMAP4 | 1 + .../arm/armv7/armv7/CONFIG_KEYBOARD_PMIC8XXX | 1 + .../arm/armv7/armv7/CONFIG_KEYBOARD_PXA27x | 1 + .../arm/armv7/armv7/CONFIG_KEYBOARD_SAMSUNG | 1 + .../armv7/armv7/CONFIG_KEYBOARD_SNVS_PWRKEY | 1 + .../arm/armv7/armv7/CONFIG_KEYBOARD_STMPE | 1 + .../arm/armv7/armv7/CONFIG_KEYBOARD_TWL4030 | 1 + .../armv7/armv7/CONFIG_LATTICE_ECP3_CONFIG | 1 + baseconfig/arm/armv7/armv7/CONFIG_LEDS_DA9052 | 1 + .../arm/armv7/armv7/CONFIG_LEDS_MC13783 | 1 + baseconfig/arm/armv7/armv7/CONFIG_LEDS_PM8058 | 1 + .../arm/armv7/armv7/CONFIG_LEDS_TCA6507 | 1 + .../arm/armv7/armv7/CONFIG_MACH_BROWNSTONE | 1 + baseconfig/arm/armv7/armv7/CONFIG_MACH_FLINT | 1 + .../armv7/armv7/CONFIG_MACH_MARVELL_JASPER | 1 + .../arm/armv7/armv7/CONFIG_MACH_MMP2_DT | 1 + .../arm/armv7/armv7/CONFIG_MACH_OMAP3517EVM | 1 + .../arm/armv7/armv7/CONFIG_MACH_OMAP3_PANDORA | 1 + .../arm/armv7/armv7/CONFIG_MACH_OMAP_LDP | 1 + baseconfig/arm/armv7/armv7/CONFIG_MACH_SUN4I | 1 + baseconfig/arm/armv7/armv7/CONFIG_MACH_SUN5I | 1 + .../arm/armv7/armv7/CONFIG_MDM_GCC_9615 | 1 + .../arm/armv7/armv7/CONFIG_MDM_LCC_9615 | 1 + baseconfig/arm/armv7/armv7/CONFIG_MFD_88PM800 | 1 + baseconfig/arm/armv7/armv7/CONFIG_MFD_88PM805 | 1 + .../arm/armv7/armv7/CONFIG_MFD_DA9052_I2C | 1 + .../arm/armv7/armv7/CONFIG_MFD_DA9052_SPI | 1 + baseconfig/arm/armv7/armv7/CONFIG_MFD_DA9055 | 1 + baseconfig/arm/armv7/armv7/CONFIG_MFD_MAX8907 | 1 + .../arm/armv7/armv7/CONFIG_MFD_MC13XXX_SPI | 1 + baseconfig/arm/armv7/armv7/CONFIG_MFD_NVEC | 1 + .../arm/armv7/armv7/CONFIG_MFD_OMAP_USB_HOST | 1 + baseconfig/arm/armv7/armv7/CONFIG_MFD_PALMAS | 1 + baseconfig/arm/armv7/armv7/CONFIG_MFD_PM8XXX | 1 + .../arm/armv7/armv7/CONFIG_MFD_QCOM_RPM | 1 + baseconfig/arm/armv7/armv7/CONFIG_MFD_STMPE | 1 + baseconfig/arm/armv7/armv7/CONFIG_MFD_T7L66XB | 1 + .../arm/armv7/armv7/CONFIG_MFD_TC6387XB | 1 + .../armv7/armv7/CONFIG_MFD_TI_AM335X_TSCADC | 1 + .../arm/armv7/armv7/CONFIG_MFD_TPS65217 | 1 + .../arm/armv7/armv7/CONFIG_MFD_TPS65218 | 1 + .../arm/armv7/armv7/CONFIG_MFD_TPS6586X | 1 + .../arm/armv7/armv7/CONFIG_MFD_TPS80031 | 1 + baseconfig/arm/armv7/armv7/CONFIG_MMC_MXC | 1 + baseconfig/arm/armv7/armv7/CONFIG_MMC_OMAP | 1 + .../arm/armv7/armv7/CONFIG_MMC_QCOM_DML | 1 + .../armv7/armv7/CONFIG_MMC_SDHCI_ESDHC_IMX | 1 + .../arm/armv7/armv7/CONFIG_MMC_SDHCI_MSM | 1 + .../arm/armv7/armv7/CONFIG_MMC_SDHCI_PXAV2 | 1 + baseconfig/arm/armv7/armv7/CONFIG_MMP_PDMA | 1 + baseconfig/arm/armv7/armv7/CONFIG_MMP_TDMA | 1 + .../arm/armv7/armv7/CONFIG_MSM_GCC_8660 | 1 + .../arm/armv7/armv7/CONFIG_MSM_GCC_8916 | 1 + .../arm/armv7/armv7/CONFIG_MSM_GCC_8960 | 1 + .../arm/armv7/armv7/CONFIG_MSM_GCC_8974 | 1 + .../arm/armv7/armv7/CONFIG_MSM_GCC_8996 | 1 + baseconfig/arm/armv7/armv7/CONFIG_MSM_IOMMU | 1 + .../arm/armv7/armv7/CONFIG_MSM_LCC_8960 | 1 + .../arm/armv7/armv7/CONFIG_MSM_MMCC_8960 | 1 + .../arm/armv7/armv7/CONFIG_MSM_MMCC_8974 | 1 + .../arm/armv7/armv7/CONFIG_MSM_MMCC_8996 | 1 + .../arm/armv7/armv7/CONFIG_MTD_NAND_GPMI_NAND | 1 + .../arm/armv7/armv7/CONFIG_MTD_NAND_OMAP2 | 1 + .../arm/armv7/armv7/CONFIG_MTD_NAND_OMAP_BCH | 1 + .../arm/armv7/armv7/CONFIG_MTD_NAND_QCOM | 1 + .../arm/armv7/armv7/CONFIG_MTD_ONENAND_OMAP2 | 1 + baseconfig/arm/armv7/armv7/CONFIG_MX3_IPU | 1 + .../arm/armv7/armv7/CONFIG_MX3_IPU_IRQS | 1 + .../arm/armv7/armv7/CONFIG_MXC_DEBUG_BOARD | 1 + baseconfig/arm/armv7/armv7/CONFIG_MXS_DMA | 1 + .../armv7/armv7/CONFIG_NET_VENDOR_FREESCALE | 1 + .../arm/armv7/armv7/CONFIG_NET_VENDOR_XILINX | 1 + baseconfig/arm/armv7/armv7/CONFIG_NFC_WILINK | 1 + baseconfig/arm/armv7/armv7/CONFIG_NVEC_PAZ00 | 1 + baseconfig/arm/armv7/armv7/CONFIG_NVEC_POWER | 1 + .../arm/armv7/armv7/CONFIG_NVMEM_IMX_OCOTP | 1 + .../arm/armv7/armv7/CONFIG_OMAP2PLUS_MBOX | 1 + baseconfig/arm/armv7/armv7/CONFIG_OMAP2_DSS | 1 + .../armv7/CONFIG_OMAP2_DSS_COLLECT_IRQ_STATS | 1 + .../arm/armv7/armv7/CONFIG_OMAP2_DSS_DEBUGFS | 1 + .../arm/armv7/armv7/CONFIG_OMAP2_DSS_DPI | 1 + .../arm/armv7/armv7/CONFIG_OMAP2_DSS_DSI | 1 + .../armv7/CONFIG_OMAP2_DSS_MIN_FCK_PER_PCK | 1 + .../arm/armv7/armv7/CONFIG_OMAP2_DSS_RFBI | 1 + .../arm/armv7/armv7/CONFIG_OMAP2_DSS_SDI | 1 + .../CONFIG_OMAP2_DSS_SLEEP_AFTER_VENC_RESET | 1 + .../arm/armv7/armv7/CONFIG_OMAP2_DSS_VENC | 1 + baseconfig/arm/armv7/armv7/CONFIG_OMAP2_VRFB | 1 + .../CONFIG_OMAP3_L2_AUX_SECURE_SAVE_RESTORE | 1 + .../armv7/armv7/CONFIG_OMAP3_SDRC_AC_TIMING | 1 + .../arm/armv7/armv7/CONFIG_OMAP4_DSS_HDMI | 1 + .../arm/armv7/armv7/CONFIG_OMAP4_THERMAL | 1 + .../arm/armv7/armv7/CONFIG_OMAP5_DSS_HDMI | 1 + .../armv7/armv7/CONFIG_OMAP5_ERRATA_801819 | 1 + .../arm/armv7/armv7/CONFIG_OMAP5_THERMAL | 1 + .../arm/armv7/armv7/CONFIG_OMAP_32K_TIMER | 1 + .../arm/armv7/armv7/CONFIG_OMAP_CONTROL_PHY | 1 + .../arm/armv7/armv7/CONFIG_OMAP_INTERCONNECT | 1 + baseconfig/arm/armv7/armv7/CONFIG_OMAP_IOMMU | 1 + .../arm/armv7/armv7/CONFIG_OMAP_IOMMU_DEBUG | 1 + .../armv7/armv7/CONFIG_OMAP_MBOX_KFIFO_SIZE | 1 + baseconfig/arm/armv7/armv7/CONFIG_OMAP_MUX | 1 + .../arm/armv7/armv7/CONFIG_OMAP_MUX_DEBUG | 1 + .../arm/armv7/armv7/CONFIG_OMAP_MUX_WARNINGS | 1 + .../arm/armv7/armv7/CONFIG_OMAP_OCP2SCP | 1 + .../arm/armv7/armv7/CONFIG_OMAP_PACKAGE_CBB | 1 + .../arm/armv7/armv7/CONFIG_OMAP_PACKAGE_CUS | 1 + .../arm/armv7/armv7/CONFIG_OMAP_REMOTEPROC | 1 + .../arm/armv7/armv7/CONFIG_OMAP_RESET_CLOCKS | 1 + baseconfig/arm/armv7/armv7/CONFIG_OMAP_USB2 | 1 + .../arm/armv7/armv7/CONFIG_OMAP_WATCHDOG | 1 + .../arm/armv7/armv7/CONFIG_PALMAS_GPADC | 1 + baseconfig/arm/armv7/armv7/CONFIG_PATA_IMX | 1 + baseconfig/arm/armv7/armv7/CONFIG_PCIE_QCOM | 1 + baseconfig/arm/armv7/armv7/CONFIG_PCIE_XILINX | 1 + baseconfig/arm/armv7/armv7/CONFIG_PCI_DRA7XX | 1 + baseconfig/arm/armv7/armv7/CONFIG_PCI_IMX6 | 1 + .../arm/armv7/armv7/CONFIG_PHY_DM816X_USB | 1 + .../armv7/armv7/CONFIG_PHY_QCOM_APQ8064_SATA | 1 + .../arm/armv7/armv7/CONFIG_PHY_QCOM_UFS | 1 + .../arm/armv7/armv7/CONFIG_PINCTRL_APQ8064 | 1 + .../arm/armv7/armv7/CONFIG_PINCTRL_APQ8084 | 1 + .../arm/armv7/armv7/CONFIG_PINCTRL_IMX6SL | 1 + .../arm/armv7/armv7/CONFIG_PINCTRL_MSM8660 | 1 + .../arm/armv7/armv7/CONFIG_PINCTRL_MSM8916 | 1 + .../arm/armv7/armv7/CONFIG_PINCTRL_MSM8960 | 1 + .../arm/armv7/armv7/CONFIG_PINCTRL_MSM8X74 | 1 + .../arm/armv7/armv7/CONFIG_PINCTRL_PALMAS | 1 + .../armv7/armv7/CONFIG_PINCTRL_QCOM_SPMI_PMIC | 1 + .../armv7/armv7/CONFIG_PINCTRL_QCOM_SSBI_PMIC | 1 + .../arm/armv7/armv7/CONFIG_PINCTRL_ZYNQ | 1 + .../armv7/armv7/CONFIG_PL310_ERRATA_588369 | 1 + .../armv7/armv7/CONFIG_PL310_ERRATA_727915 | 1 + baseconfig/arm/armv7/armv7/CONFIG_POWER_AVS | 1 + .../arm/armv7/armv7/CONFIG_POWER_AVS_OMAP | 1 + .../armv7/armv7/CONFIG_POWER_AVS_OMAP_CLASS3 | 1 + .../arm/armv7/armv7/CONFIG_POWER_RESET_IMX | 1 + .../arm/armv7/armv7/CONFIG_POWER_RESET_MSM | 1 + baseconfig/arm/armv7/armv7/CONFIG_PWM_IMX | 1 + .../arm/armv7/armv7/CONFIG_PWM_OMAP_DMTIMER | 1 + baseconfig/arm/armv7/armv7/CONFIG_PWM_STMPE | 1 + baseconfig/arm/armv7/armv7/CONFIG_PWM_TIECAP | 1 + .../arm/armv7/armv7/CONFIG_PWM_TIEHRPWM | 1 + baseconfig/arm/armv7/armv7/CONFIG_PWM_TIPWMSS | 1 + baseconfig/arm/armv7/armv7/CONFIG_PWM_TWL | 1 + baseconfig/arm/armv7/armv7/CONFIG_PWM_TWL_LED | 1 + baseconfig/arm/armv7/armv7/CONFIG_PXA_DMA | 1 + .../arm/armv7/armv7/CONFIG_QCOM_BAM_DMA | 1 + .../arm/armv7/armv7/CONFIG_QCOM_CLK_RPM | 1 + .../arm/armv7/armv7/CONFIG_QCOM_CLK_SMD_RPM | 1 + .../arm/armv7/armv7/CONFIG_QCOM_COINCELL | 1 + baseconfig/arm/armv7/armv7/CONFIG_QCOM_GSBI | 1 + baseconfig/arm/armv7/armv7/CONFIG_QCOM_PM | 1 + .../arm/armv7/armv7/CONFIG_QCOM_Q6V5_PIL | 1 + baseconfig/arm/armv7/armv7/CONFIG_QCOM_QFPROM | 1 + baseconfig/arm/armv7/armv7/CONFIG_QCOM_SMD | 1 + .../arm/armv7/armv7/CONFIG_QCOM_SMD_RPM | 1 + baseconfig/arm/armv7/armv7/CONFIG_QCOM_SMEM | 1 + baseconfig/arm/armv7/armv7/CONFIG_QCOM_SMP2P | 1 + baseconfig/arm/armv7/armv7/CONFIG_QCOM_SMSM | 1 + .../arm/armv7/armv7/CONFIG_QCOM_SPMI_IADC | 1 + .../arm/armv7/armv7/CONFIG_QCOM_SPMI_VADC | 1 + baseconfig/arm/armv7/armv7/CONFIG_QCOM_TSENS | 1 + .../arm/armv7/armv7/CONFIG_QCOM_WCNSS_CTRL | 1 + .../arm/armv7/armv7/CONFIG_QCOM_WCNSS_PIL | 1 + baseconfig/arm/armv7/armv7/CONFIG_QCOM_WDT | 1 + .../arm/armv7/armv7/CONFIG_RADIO_WL128X | 1 + .../arm/armv7/armv7/CONFIG_REGULATOR_88PM800 | 1 + .../arm/armv7/armv7/CONFIG_REGULATOR_AD5398 | 1 + .../arm/armv7/armv7/CONFIG_REGULATOR_ANATOP | 1 + .../arm/armv7/armv7/CONFIG_REGULATOR_DA9052 | 1 + .../arm/armv7/armv7/CONFIG_REGULATOR_DA9055 | 1 + .../arm/armv7/armv7/CONFIG_REGULATOR_FAN53555 | 1 + .../arm/armv7/armv7/CONFIG_REGULATOR_ISL6271A | 1 + .../arm/armv7/armv7/CONFIG_REGULATOR_ISL9305 | 1 + .../arm/armv7/armv7/CONFIG_REGULATOR_LP3971 | 1 + .../arm/armv7/armv7/CONFIG_REGULATOR_LP3972 | 1 + .../arm/armv7/armv7/CONFIG_REGULATOR_LP872X | 1 + .../arm/armv7/armv7/CONFIG_REGULATOR_LP8755 | 1 + .../arm/armv7/armv7/CONFIG_REGULATOR_MAX1586 | 1 + .../arm/armv7/armv7/CONFIG_REGULATOR_MAX8649 | 1 + .../arm/armv7/armv7/CONFIG_REGULATOR_MAX8660 | 1 + .../arm/armv7/armv7/CONFIG_REGULATOR_MAX8907 | 1 + .../arm/armv7/armv7/CONFIG_REGULATOR_MAX8952 | 1 + .../arm/armv7/armv7/CONFIG_REGULATOR_MC13783 | 1 + .../arm/armv7/armv7/CONFIG_REGULATOR_MC13892 | 1 + .../arm/armv7/armv7/CONFIG_REGULATOR_PALMAS | 1 + .../arm/armv7/armv7/CONFIG_REGULATOR_PBIAS | 1 + .../arm/armv7/armv7/CONFIG_REGULATOR_QCOM_RPM | 1 + .../armv7/armv7/CONFIG_REGULATOR_QCOM_SMD_RPM | 1 + .../armv7/armv7/CONFIG_REGULATOR_QCOM_SPMI | 1 + .../arm/armv7/armv7/CONFIG_REGULATOR_TI_ABB | 1 + .../arm/armv7/armv7/CONFIG_REGULATOR_TPS65217 | 1 + .../arm/armv7/armv7/CONFIG_REGULATOR_TPS65218 | 1 + .../arm/armv7/armv7/CONFIG_REGULATOR_TWL4030 | 1 + baseconfig/arm/armv7/armv7/CONFIG_REMOTEPROC | 1 + .../arm/armv7/armv7/CONFIG_RTC_DRV_DA9052 | 1 + .../arm/armv7/armv7/CONFIG_RTC_DRV_DA9055 | 1 + .../arm/armv7/armv7/CONFIG_RTC_DRV_IMXDI | 1 + .../arm/armv7/armv7/CONFIG_RTC_DRV_MAX8907 | 1 + .../arm/armv7/armv7/CONFIG_RTC_DRV_MC13XXX | 1 + baseconfig/arm/armv7/armv7/CONFIG_RTC_DRV_MXC | 1 + .../arm/armv7/armv7/CONFIG_RTC_DRV_OMAP | 1 + .../arm/armv7/armv7/CONFIG_RTC_DRV_PALMAS | 1 + .../arm/armv7/armv7/CONFIG_RTC_DRV_PM8XXX | 1 + .../arm/armv7/armv7/CONFIG_RTC_DRV_SNVS | 1 + .../arm/armv7/armv7/CONFIG_RTC_DRV_TPS6586X | 1 + .../arm/armv7/armv7/CONFIG_RTC_DRV_TWL4030 | 1 + .../arm/armv7/armv7/CONFIG_RTC_DRV_TWL92330 | 1 + .../arm/armv7/armv7/CONFIG_SENSORS_DA9052_ADC | 1 + .../arm/armv7/armv7/CONFIG_SENSORS_DA9055 | 1 + .../armv7/armv7/CONFIG_SENSORS_MC13783_ADC | 1 + .../armv7/armv7/CONFIG_SENSORS_TWL4030_MADC | 1 + .../arm/armv7/armv7/CONFIG_SERIAL_8250_OMAP | 1 + baseconfig/arm/armv7/armv7/CONFIG_SERIAL_IMX | 1 + .../arm/armv7/armv7/CONFIG_SERIAL_IMX_CONSOLE | 1 + baseconfig/arm/armv7/armv7/CONFIG_SERIAL_MSM | 1 + .../arm/armv7/armv7/CONFIG_SERIAL_MSM_CONSOLE | 1 + baseconfig/arm/armv7/armv7/CONFIG_SERIAL_OMAP | 1 + .../armv7/armv7/CONFIG_SERIAL_OMAP_CONSOLE | 1 + baseconfig/arm/armv7/armv7/CONFIG_SERIAL_PXA | 1 + .../arm/armv7/armv7/CONFIG_SERIAL_PXA_CONSOLE | 1 + .../arm/armv7/armv7/CONFIG_SERIAL_UARTLITE | 1 + .../armv7/CONFIG_SERIAL_UARTLITE_CONSOLE | 1 + .../armv7/armv7/CONFIG_SERIAL_XILINX_PS_UART | 1 + .../CONFIG_SERIAL_XILINX_PS_UART_CONSOLE | 1 + .../arm/armv7/armv7/CONFIG_SERIO_NVEC_PS2 | 1 + .../arm/armv7/armv7/CONFIG_SERIO_OLPC_APSP | 1 + .../arm/armv7/armv7/CONFIG_SND_AM33XX_SOC_EVM | 1 + .../arm/armv7/armv7/CONFIG_SND_DAVINCI_SOC | 1 + .../armv7/CONFIG_SND_DAVINCI_SOC_GENERIC_EVM | 1 + .../armv7/armv7/CONFIG_SND_DAVINCI_SOC_I2S | 1 + .../armv7/armv7/CONFIG_SND_DAVINCI_SOC_MCASP | 1 + .../armv7/armv7/CONFIG_SND_DAVINCI_SOC_VCIF | 1 + .../arm/armv7/armv7/CONFIG_SND_EDMA_SOC | 1 + baseconfig/arm/armv7/armv7/CONFIG_SND_IMX_SOC | 1 + baseconfig/arm/armv7/armv7/CONFIG_SND_MMP_SOC | 1 + .../arm/armv7/armv7/CONFIG_SND_OMAP_SOC | 1 + .../armv7/armv7/CONFIG_SND_OMAP_SOC_AM3517EVM | 1 + .../arm/armv7/armv7/CONFIG_SND_OMAP_SOC_DMIC | 1 + .../armv7/CONFIG_SND_OMAP_SOC_HDMI_AUDIO | 1 + .../arm/armv7/armv7/CONFIG_SND_OMAP_SOC_MCBSP | 1 + .../arm/armv7/armv7/CONFIG_SND_OMAP_SOC_MCPDM | 1 + .../armv7/CONFIG_SND_OMAP_SOC_OMAP3_PANDORA | 1 + .../CONFIG_SND_OMAP_SOC_OMAP_ABE_TWL6040 | 1 + .../armv7/CONFIG_SND_OMAP_SOC_OMAP_TWL4030 | 1 + .../arm/armv7/armv7/CONFIG_SND_OMAP_SOC_RX51 | 1 + .../arm/armv7/armv7/CONFIG_SND_PXA910_SOC | 1 + baseconfig/arm/armv7/armv7/CONFIG_SND_SOC_ADI | 1 + .../armv7/armv7/CONFIG_SND_SOC_ADI_AXI_I2S | 1 + .../armv7/armv7/CONFIG_SND_SOC_ADI_AXI_SPDIF | 1 + .../armv7/armv7/CONFIG_SND_SOC_CS42XX8_I2C | 1 + .../arm/armv7/armv7/CONFIG_SND_SOC_ES8328 | 1 + .../arm/armv7/armv7/CONFIG_SND_SOC_ES8328_I2C | 1 + .../arm/armv7/armv7/CONFIG_SND_SOC_ES8328_SPI | 1 + .../armv7/armv7/CONFIG_SND_SOC_EUKREA_TLV320 | 1 + .../armv7/armv7/CONFIG_SND_SOC_FSL_ASOC_CARD | 1 + .../arm/armv7/armv7/CONFIG_SND_SOC_FSL_ASRC | 1 + .../arm/armv7/armv7/CONFIG_SND_SOC_FSL_ESAI | 1 + .../arm/armv7/armv7/CONFIG_SND_SOC_FSL_SAI | 1 + .../arm/armv7/armv7/CONFIG_SND_SOC_FSL_SPDIF | 1 + .../arm/armv7/armv7/CONFIG_SND_SOC_FSL_SSI | 1 + .../arm/armv7/armv7/CONFIG_SND_SOC_FSL_UTILS | 1 + .../armv7/armv7/CONFIG_SND_SOC_I2C_AND_SPI | 1 + .../arm/armv7/armv7/CONFIG_SND_SOC_IMX_AUDMUX | 1 + .../arm/armv7/armv7/CONFIG_SND_SOC_IMX_ES8328 | 1 + .../armv7/armv7/CONFIG_SND_SOC_IMX_MC13783 | 1 + .../armv7/armv7/CONFIG_SND_SOC_IMX_PCM_DMA | 1 + .../armv7/armv7/CONFIG_SND_SOC_IMX_PCM_FIQ | 1 + .../armv7/armv7/CONFIG_SND_SOC_IMX_SGTL5000 | 1 + .../arm/armv7/armv7/CONFIG_SND_SOC_IMX_SPDIF | 1 + .../arm/armv7/armv7/CONFIG_SND_SOC_IMX_SSI | 1 + .../arm/armv7/armv7/CONFIG_SND_SOC_IMX_WM8962 | 1 + .../arm/armv7/armv7/CONFIG_SND_SOC_LPASS_CPU | 1 + .../armv7/armv7/CONFIG_SND_SOC_LPASS_PLATFORM | 1 + .../arm/armv7/armv7/CONFIG_SND_SOC_QCOM | 1 + .../arm/armv7/armv7/CONFIG_SND_SOC_SGTL5000 | 1 + .../arm/armv7/armv7/CONFIG_SND_SOC_STORM | 1 + .../armv7/armv7/CONFIG_SND_SOC_TEGRA20_AC97 | 1 + .../armv7/armv7/CONFIG_SND_SOC_TEGRA20_DAS | 1 + .../armv7/armv7/CONFIG_SND_SOC_TEGRA20_SPDIF | 1 + .../armv7/armv7/CONFIG_SND_SOC_TEGRA_ALC5632 | 1 + .../armv7/CONFIG_SND_SOC_TEGRA_TRIMSLICE | 1 + .../armv7/armv7/CONFIG_SND_SOC_TEGRA_WM8753 | 1 + .../armv7/armv7/CONFIG_SND_SOC_TEGRA_WM8903 | 1 + .../armv7/armv7/CONFIG_SND_SOC_TEGRA_WM9712 | 1 + .../armv7/armv7/CONFIG_SND_SOC_TLV320AIC23 | 1 + .../armv7/CONFIG_SND_SOC_TLV320AIC23_I2C | 1 + .../armv7/CONFIG_SND_SOC_TLV320AIC23_SPI | 1 + .../armv7/armv7/CONFIG_SND_SOC_TLV320AIC31XX | 1 + .../armv7/armv7/CONFIG_SND_SOC_TLV320AIC3X | 1 + .../arm/armv7/armv7/CONFIG_SND_SOC_TWL4030 | 1 + .../arm/armv7/armv7/CONFIG_SND_SOC_TWL6040 | 1 + .../arm/armv7/armv7/CONFIG_SND_SOC_WM8731 | 1 + .../arm/armv7/armv7/CONFIG_SND_SOC_WM8753 | 1 + .../arm/armv7/armv7/CONFIG_SND_SOC_WM8903 | 1 + .../arm/armv7/armv7/CONFIG_SND_SOC_WM8960 | 1 + .../arm/armv7/armv7/CONFIG_SND_SOC_WM8962 | 1 + baseconfig/arm/armv7/armv7/CONFIG_SOC_AM33XX | 1 + baseconfig/arm/armv7/armv7/CONFIG_SOC_AM43XX | 1 + baseconfig/arm/armv7/armv7/CONFIG_SOC_DRA7XX | 1 + .../arm/armv7/armv7/CONFIG_SOC_EXYNOS4212 | 1 + .../arm/armv7/armv7/CONFIG_SOC_EXYNOS4412 | 1 + .../arm/armv7/armv7/CONFIG_SOC_EXYNOS4415 | 1 + .../armv7/CONFIG_SOC_HAS_REALTIME_COUNTER | 1 + baseconfig/arm/armv7/armv7/CONFIG_SOC_IMX50 | 1 + baseconfig/arm/armv7/armv7/CONFIG_SOC_IMX51 | 1 + baseconfig/arm/armv7/armv7/CONFIG_SOC_IMX53 | 1 + baseconfig/arm/armv7/armv7/CONFIG_SOC_IMX6 | 1 + baseconfig/arm/armv7/armv7/CONFIG_SOC_IMX6Q | 1 + baseconfig/arm/armv7/armv7/CONFIG_SOC_IMX6SL | 1 + baseconfig/arm/armv7/armv7/CONFIG_SOC_IMX6SX | 1 + baseconfig/arm/armv7/armv7/CONFIG_SOC_IMX6UL | 1 + baseconfig/arm/armv7/armv7/CONFIG_SOC_IMX7D | 1 + baseconfig/arm/armv7/armv7/CONFIG_SOC_LS1021A | 1 + .../arm/armv7/armv7/CONFIG_SOC_OMAP3430 | 1 + baseconfig/arm/armv7/armv7/CONFIG_SOC_OMAP5 | 1 + baseconfig/arm/armv7/armv7/CONFIG_SOC_TI81XX | 1 + baseconfig/arm/armv7/armv7/CONFIG_SOC_VF610 | 1 + baseconfig/arm/armv7/armv7/CONFIG_SPI_CADENCE | 1 + baseconfig/arm/armv7/armv7/CONFIG_SPI_DAVINCI | 1 + .../arm/armv7/armv7/CONFIG_SPI_FSL_QUADSPI | 1 + baseconfig/arm/armv7/armv7/CONFIG_SPI_IMX | 1 + baseconfig/arm/armv7/armv7/CONFIG_SPI_MXS | 1 + .../arm/armv7/armv7/CONFIG_SPI_OMAP24XX | 1 + baseconfig/arm/armv7/armv7/CONFIG_SPI_QUP | 1 + .../arm/armv7/armv7/CONFIG_SPI_TEGRA20_SFLASH | 1 + .../arm/armv7/armv7/CONFIG_SPI_TEGRA20_SLINK | 1 + baseconfig/arm/armv7/armv7/CONFIG_SPI_TI_QSPI | 1 + baseconfig/arm/armv7/armv7/CONFIG_SPI_XILINX | 1 + .../arm/armv7/armv7/CONFIG_SPMI_MSM_PMIC_ARB | 1 + baseconfig/arm/armv7/armv7/CONFIG_STMPE_I2C | 1 + baseconfig/arm/armv7/armv7/CONFIG_STMPE_SPI | 1 + baseconfig/arm/armv7/armv7/CONFIG_TEGRA20_MC | 1 + .../arm/armv7/armv7/CONFIG_TEGRA_IOMMU_GART | 1 + baseconfig/arm/armv7/armv7/CONFIG_TI_ADC081C | 1 + .../arm/armv7/armv7/CONFIG_TI_AM335X_ADC | 1 + baseconfig/arm/armv7/armv7/CONFIG_TI_CPPI41 | 1 + baseconfig/arm/armv7/armv7/CONFIG_TI_CPSW | 1 + baseconfig/arm/armv7/armv7/CONFIG_TI_CPSW_ALE | 1 + .../arm/armv7/armv7/CONFIG_TI_CPSW_PHY_SEL | 1 + baseconfig/arm/armv7/armv7/CONFIG_TI_CPTS | 1 + baseconfig/arm/armv7/armv7/CONFIG_TI_DAC7512 | 1 + .../arm/armv7/armv7/CONFIG_TI_DAVINCI_CPDMA | 1 + .../arm/armv7/armv7/CONFIG_TI_DAVINCI_EMAC | 1 + .../arm/armv7/armv7/CONFIG_TI_DAVINCI_MDIO | 1 + baseconfig/arm/armv7/armv7/CONFIG_TI_EMIF | 1 + baseconfig/arm/armv7/armv7/CONFIG_TI_PIPE3 | 1 + baseconfig/arm/armv7/armv7/CONFIG_TI_ST | 1 + .../arm/armv7/armv7/CONFIG_TI_SYSCON_RESET | 1 + .../arm/armv7/armv7/CONFIG_TOUCHSCREEN_DA9052 | 1 + .../armv7/armv7/CONFIG_TOUCHSCREEN_IMX6UL_TSC | 1 + .../arm/armv7/armv7/CONFIG_TOUCHSCREEN_STMPE | 1 + .../arm/armv7/armv7/CONFIG_TWL4030_CORE | 1 + .../arm/armv7/armv7/CONFIG_TWL4030_MADC | 1 + .../arm/armv7/armv7/CONFIG_TWL4030_POWER | 1 + baseconfig/arm/armv7/armv7/CONFIG_TWL4030_USB | 1 + .../arm/armv7/armv7/CONFIG_TWL4030_WATCHDOG | 1 + .../arm/armv7/armv7/CONFIG_TWL6030_GPADC | 1 + baseconfig/arm/armv7/armv7/CONFIG_TWL6030_USB | 1 + .../arm/armv7/armv7/CONFIG_TWL6040_CORE | 1 + baseconfig/arm/armv7/armv7/CONFIG_UIO_PRUSS | 1 + .../arm/armv7/armv7/CONFIG_USB_CHIPIDEA | 1 + .../arm/armv7/armv7/CONFIG_USB_CHIPIDEA_HOST | 1 + .../arm/armv7/armv7/CONFIG_USB_CHIPIDEA_UDC | 1 + .../arm/armv7/armv7/CONFIG_USB_DWC3_OMAP | 1 + .../arm/armv7/armv7/CONFIG_USB_EHCI_HCD_OMAP | 1 + .../arm/armv7/armv7/CONFIG_USB_EHCI_MSM | 1 + .../arm/armv7/armv7/CONFIG_USB_EHCI_MXC | 1 + .../arm/armv7/armv7/CONFIG_USB_FSL_USB2 | 1 + .../arm/armv7/armv7/CONFIG_USB_GADGET_XILINX | 1 + .../arm/armv7/armv7/CONFIG_USB_IMX21_HCD | 1 + .../arm/armv7/armv7/CONFIG_USB_INVENTRA_DMA | 1 + baseconfig/arm/armv7/armv7/CONFIG_USB_MSM_OTG | 1 + .../armv7/armv7/CONFIG_USB_MUSB_AM335X_CHILD | 1 + .../arm/armv7/armv7/CONFIG_USB_MUSB_AM35X | 1 + .../arm/armv7/armv7/CONFIG_USB_MUSB_OMAP2PLUS | 1 + baseconfig/arm/armv7/armv7/CONFIG_USB_MXS_PHY | 1 + .../arm/armv7/armv7/CONFIG_USB_OHCI_HCD_OMAP3 | 1 + .../arm/armv7/armv7/CONFIG_USB_QCOM_8X16_PHY | 1 + .../arm/armv7/armv7/CONFIG_USB_TI_CPPI41_DMA | 1 + .../armv7/armv7/CONFIG_V4L_PLATFORM_DRIVERS | 1 + .../arm/armv7/armv7/CONFIG_VIDEO_ADP1653 | 1 + .../arm/armv7/armv7/CONFIG_VIDEO_AM437X_VPFE | 1 + baseconfig/arm/armv7/armv7/CONFIG_VIDEO_CODA | 1 + .../arm/armv7/armv7/CONFIG_VIDEO_DM355_CCDC | 1 + .../arm/armv7/armv7/CONFIG_VIDEO_DM6446_CCDC | 1 + .../arm/armv7/armv7/CONFIG_VIDEO_OMAP2_VOUT | 1 + baseconfig/arm/armv7/armv7/CONFIG_VIDEO_OMAP3 | 1 + .../arm/armv7/armv7/CONFIG_VIDEO_OMAP3_DEBUG | 1 + baseconfig/arm/armv7/armv7/CONFIG_VIDEO_OMAP4 | 1 + .../armv7/CONFIG_VIDEO_SAMSUNG_EXYNOS4_IS | 1 + .../arm/armv7/armv7/CONFIG_W1_MASTER_MXC | 1 + baseconfig/arm/armv7/armv7/CONFIG_WKUP_M3_IPC | 1 + .../arm/armv7/armv7/CONFIG_WKUP_M3_RPROC | 1 + baseconfig/arm/armv7/armv7/CONFIG_XEN | 1 + .../arm/armv7/armv7/CONFIG_XILINX_EMACLITE | 1 + .../arm/armv7/armv7/CONFIG_XILINX_WATCHDOG | 1 + baseconfig/arm/armv7/armv7/CONFIG_XILINX_XADC | 1 + baseconfig/arm/armv7/armv7/CONFIG_XILLYBUS_OF | 1 + .../arm/armv7/lpae/CONFIG_AM335X_PHY_USB | 1 + baseconfig/arm/armv7/lpae/CONFIG_ARCH_AXXIA | 1 + .../arm/armv7/lpae/CONFIG_ARCH_KEYSTONE | 1 + baseconfig/arm/armv7/lpae/CONFIG_ARCH_MXC | 1 + baseconfig/arm/armv7/lpae/CONFIG_ARCH_OMAP3 | 1 + baseconfig/arm/armv7/lpae/CONFIG_ARCH_OMAP4 | 1 + .../arm/armv7/lpae/CONFIG_ARCH_TEGRA_2x_SOC | 1 + .../arm/armv7/lpae/CONFIG_ARCH_TEGRA_3x_SOC | 1 + baseconfig/arm/armv7/lpae/CONFIG_ARCH_ZYNQ | 1 + baseconfig/arm/armv7/lpae/CONFIG_ARM_LPAE | 1 + baseconfig/arm/armv7/lpae/CONFIG_ARM_VIRT_EXT | 1 + .../arm/armv7/lpae/CONFIG_CPU_SW_DOMAIN_PAN | 1 + .../arm/armv7/lpae/CONFIG_DAVINCI_WATCHDOG | 1 + baseconfig/arm/armv7/lpae/CONFIG_DRM_OMAP | 1 + baseconfig/arm/armv7/lpae/CONFIG_EXTCON | 1 + baseconfig/arm/armv7/lpae/CONFIG_GPIO_DAVINCI | 1 + baseconfig/arm/armv7/lpae/CONFIG_GPIO_SYSCON | 1 + .../CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE | 1 + baseconfig/arm/armv7/lpae/CONFIG_HVC_XEN | 1 + .../arm/armv7/lpae/CONFIG_HVC_XEN_FRONTEND | 1 + baseconfig/arm/armv7/lpae/CONFIG_I2C_DAVINCI | 1 + .../lpae/CONFIG_INPUT_XEN_KBDDEV_FRONTEND | 1 + baseconfig/arm/armv7/lpae/CONFIG_KEYSTONE_IRQ | 1 + .../arm/armv7/lpae/CONFIG_KEYSTONE_USB_PHY | 1 + baseconfig/arm/armv7/lpae/CONFIG_KVM | 1 + baseconfig/arm/armv7/lpae/CONFIG_KVM_ARM_HOST | 1 + baseconfig/arm/armv7/lpae/CONFIG_MFD_MAX8907 | 1 + .../arm/armv7/lpae/CONFIG_MTD_NAND_DAVINCI | 1 + baseconfig/arm/armv7/lpae/CONFIG_PCI_KEYSTONE | 1 + .../armv7/lpae/CONFIG_POWER_RESET_KEYSTONE | 1 + .../armv7/lpae/CONFIG_SND_SOC_TEGRA20_AC97 | 1 + .../arm/armv7/lpae/CONFIG_SND_SOC_TEGRA20_DAS | 1 + .../armv7/lpae/CONFIG_SND_SOC_TEGRA20_SPDIF | 1 + .../armv7/lpae/CONFIG_SND_SOC_TEGRA_ALC5632 | 1 + .../armv7/lpae/CONFIG_SND_SOC_TEGRA_TRIMSLICE | 1 + .../armv7/lpae/CONFIG_SND_SOC_TEGRA_WM8753 | 1 + .../armv7/lpae/CONFIG_SND_SOC_TEGRA_WM8903 | 1 + .../armv7/lpae/CONFIG_SND_SOC_TEGRA_WM9712 | 1 + baseconfig/arm/armv7/lpae/CONFIG_SOC_AM33XX | 1 + baseconfig/arm/armv7/lpae/CONFIG_SOC_AM43XX | 1 + baseconfig/arm/armv7/lpae/CONFIG_SOC_DRA7XX | 1 + baseconfig/arm/armv7/lpae/CONFIG_SOC_OMAP5 | 1 + baseconfig/arm/armv7/lpae/CONFIG_SPI_DAVINCI | 1 + .../arm/armv7/lpae/CONFIG_SPI_TEGRA20_SFLASH | 1 + .../arm/armv7/lpae/CONFIG_SPI_TEGRA20_SLINK | 1 + baseconfig/arm/armv7/lpae/CONFIG_SYNC_FILE | 1 + .../armv7/lpae/CONFIG_SYS_SUPPORTS_HUGETLBFS | 1 + baseconfig/arm/armv7/lpae/CONFIG_TEGRA20_MC | 1 + .../arm/armv7/lpae/CONFIG_TEGRA_IOMMU_GART | 1 + baseconfig/arm/armv7/lpae/CONFIG_TI_AEMIF | 1 + .../arm/armv7/lpae/CONFIG_TI_MESSAGE_MANAGER | 1 + .../arm/armv7/lpae/CONFIG_TI_SCI_PROTOCOL | 1 + .../arm/armv7/lpae/CONFIG_TI_SYSCON_RESET | 1 + .../arm/armv7/lpae/CONFIG_USB_DWC3_KEYSTONE | 1 + baseconfig/arm/armv7/lpae/CONFIG_XEN | 1 + baseconfig/arm/armv7/lpae/CONFIG_XENFS | 1 + baseconfig/arm/armv7/lpae/CONFIG_XEN_BACKEND | 1 + baseconfig/arm/armv7/lpae/CONFIG_XEN_BALLOON | 1 + .../arm/armv7/lpae/CONFIG_XEN_BLKDEV_BACKEND | 1 + .../arm/armv7/lpae/CONFIG_XEN_BLKDEV_FRONTEND | 1 + .../arm/armv7/lpae/CONFIG_XEN_COMPAT_XENFS | 1 + .../arm/armv7/lpae/CONFIG_XEN_DEV_EVTCHN | 1 + .../arm/armv7/lpae/CONFIG_XEN_FBDEV_FRONTEND | 1 + baseconfig/arm/armv7/lpae/CONFIG_XEN_GNTDEV | 1 + .../arm/armv7/lpae/CONFIG_XEN_GRANT_DEV_ALLOC | 1 + .../arm/armv7/lpae/CONFIG_XEN_NETDEV_BACKEND | 1 + .../arm/armv7/lpae/CONFIG_XEN_NETDEV_FRONTEND | 1 + .../arm/armv7/lpae/CONFIG_XEN_SYS_HYPERVISOR | 1 + baseconfig/arm/armv7/lpae/CONFIG_XEN_WDT | 1 + baseconfig/arm/armv7/lpae/README | 1 + baseconfig/powerpc/CONFIG_3C515 | 1 + baseconfig/powerpc/CONFIG_ADB_PMU_LED_DISK | 1 + baseconfig/powerpc/CONFIG_AGP | 1 + baseconfig/powerpc/CONFIG_ALTIVEC | 1 + baseconfig/powerpc/CONFIG_AMIGAONE | 1 + baseconfig/powerpc/CONFIG_ASYMMETRIC_KEY_TYPE | 1 + baseconfig/powerpc/CONFIG_ATM_AMBASSADOR | 1 + baseconfig/powerpc/CONFIG_ATM_FIRESTREAM | 1 + baseconfig/powerpc/CONFIG_ATM_HORIZON | 1 + baseconfig/powerpc/CONFIG_AXON_RAM | 1 + baseconfig/powerpc/CONFIG_BACKLIGHT_PWM | 1 + baseconfig/powerpc/CONFIG_BLK_DEV_IT8172 | 1 + baseconfig/powerpc/CONFIG_BLK_DEV_PLATFORM | 1 + baseconfig/powerpc/CONFIG_BLK_DEV_RSXX | 1 + baseconfig/powerpc/CONFIG_BOOTX_TEXT | 1 + baseconfig/powerpc/CONFIG_CAN_FLEXCAN | 1 + baseconfig/powerpc/CONFIG_CAN_MPC5XXX | 1 + baseconfig/powerpc/CONFIG_CAN_MSCAN | 1 + baseconfig/powerpc/CONFIG_CAPI_EICON | 1 + baseconfig/powerpc/CONFIG_CGROUP_HUGETLB | 1 + baseconfig/powerpc/CONFIG_CMA | 1 + baseconfig/powerpc/CONFIG_CMA_AREAS | 1 + baseconfig/powerpc/CONFIG_CMA_DEBUG | 1 + baseconfig/powerpc/CONFIG_CMA_DEBUGFS | 1 + baseconfig/powerpc/CONFIG_CMDLINE_BOOL | 1 + baseconfig/powerpc/CONFIG_CMM | 1 + .../powerpc/CONFIG_CODE_PATCHING_SELFTEST | 1 + .../powerpc/CONFIG_CONSISTENT_SIZE_BOOL | 1 + .../powerpc/CONFIG_CRYPTO_CRC32C_VPMSUM | 1 + baseconfig/powerpc/CONFIG_CRYPTO_DEV_FSL_CAAM | 1 + baseconfig/powerpc/CONFIG_CRYPTO_DEV_NX | 1 + .../powerpc/CONFIG_CRYPTO_DEV_NX_COMPRESS | 1 + .../CONFIG_CRYPTO_DEV_NX_COMPRESS_POWERNV | 1 + .../CONFIG_CRYPTO_DEV_NX_COMPRESS_PSERIES | 1 + .../powerpc/CONFIG_CRYPTO_DEV_NX_ENCRYPT | 1 + baseconfig/powerpc/CONFIG_CRYPTO_DEV_VMX | 1 + .../powerpc/CONFIG_CRYPTO_DEV_VMX_ENCRYPT | 1 + baseconfig/powerpc/CONFIG_CRYPTO_MD5_PPC | 1 + baseconfig/powerpc/CONFIG_CRYPTO_SHA1_PPC | 1 + baseconfig/powerpc/CONFIG_CXL | 1 + baseconfig/powerpc/CONFIG_CXLFLASH | 1 + baseconfig/powerpc/CONFIG_DEBUGGER | 1 + baseconfig/powerpc/CONFIG_DEBUG_GPIO | 1 + baseconfig/powerpc/CONFIG_DEBUG_STACKOVERFLOW | 1 + baseconfig/powerpc/CONFIG_DMADEVICES | 1 + baseconfig/powerpc/CONFIG_DTL | 1 + baseconfig/powerpc/CONFIG_EDAC_CPC925 | 1 + baseconfig/powerpc/CONFIG_EDAC_MPC85XX | 1 + baseconfig/powerpc/CONFIG_EHEA | 1 + baseconfig/powerpc/CONFIG_EXTRA_TARGETS | 1 + baseconfig/powerpc/CONFIG_FAIL_IOMMU | 1 + baseconfig/powerpc/CONFIG_FA_DUMP | 1 + baseconfig/powerpc/CONFIG_FB_ATY | 1 + baseconfig/powerpc/CONFIG_FB_ATY128 | 1 + baseconfig/powerpc/CONFIG_FB_CONTROL | 1 + baseconfig/powerpc/CONFIG_FB_CT65550 | 1 + baseconfig/powerpc/CONFIG_FB_IBM_GXT4500 | 1 + baseconfig/powerpc/CONFIG_FB_MATROX | 1 + baseconfig/powerpc/CONFIG_FB_MATROX_G | 1 + baseconfig/powerpc/CONFIG_FB_MB862XX | 1 + baseconfig/powerpc/CONFIG_FB_MB862XX_I2C | 1 + baseconfig/powerpc/CONFIG_FB_MB862XX_LIME | 1 + baseconfig/powerpc/CONFIG_FB_MB862XX_PCI_GDC | 1 + baseconfig/powerpc/CONFIG_FB_OF | 1 + baseconfig/powerpc/CONFIG_FB_PLATINUM | 1 + baseconfig/powerpc/CONFIG_FB_SSD1307 | 1 + baseconfig/powerpc/CONFIG_FB_VALKYRIE | 1 + baseconfig/powerpc/CONFIG_FB_VGA16 | 1 + baseconfig/powerpc/CONFIG_FHCI_DEBUG | 1 + baseconfig/powerpc/CONFIG_FORCE_MAX_ZONEORDER | 1 + baseconfig/powerpc/CONFIG_FRAME_WARN | 1 + baseconfig/powerpc/CONFIG_FSL_DMA | 1 + baseconfig/powerpc/CONFIG_FSL_LBC | 1 + baseconfig/powerpc/CONFIG_FS_ENET | 1 + baseconfig/powerpc/CONFIG_FTR_FIXUP_SELFTEST | 1 + baseconfig/powerpc/CONFIG_GEF_PPC9A | 1 + baseconfig/powerpc/CONFIG_GEF_SBC310 | 1 + baseconfig/powerpc/CONFIG_GEF_SBC610 | 1 + baseconfig/powerpc/CONFIG_GEN_RTC | 1 + baseconfig/powerpc/CONFIG_GPIO_74XX_MMIO | 1 + baseconfig/powerpc/CONFIG_GPIO_PCA953X | 1 + baseconfig/powerpc/CONFIG_GPIO_PCF857X | 1 + baseconfig/powerpc/CONFIG_GPIO_SCH | 1 + baseconfig/powerpc/CONFIG_GPIO_UCB1400 | 1 + baseconfig/powerpc/CONFIG_GPIO_WM831X | 1 + baseconfig/powerpc/CONFIG_GPIO_XILINX | 1 + .../powerpc/CONFIG_HAVE_BOOTMEM_INFO_NODE | 1 + baseconfig/powerpc/CONFIG_HCALL_STATS | 1 + baseconfig/powerpc/CONFIG_HIBERNATION | 1 + baseconfig/powerpc/CONFIG_HOTPLUG_PCI_POWERNV | 1 + baseconfig/powerpc/CONFIG_HOTPLUG_PCI_RPA | 1 + .../powerpc/CONFIG_HOTPLUG_PCI_RPA_DLPAR | 1 + baseconfig/powerpc/CONFIG_HOTPLUG_PCI_SHPC | 1 + baseconfig/powerpc/CONFIG_HVCS | 1 + baseconfig/powerpc/CONFIG_HVC_CONSOLE | 1 + baseconfig/powerpc/CONFIG_HVC_OLD_HVSI | 1 + baseconfig/powerpc/CONFIG_HVC_OPAL | 1 + baseconfig/powerpc/CONFIG_HVC_RTAS | 1 + baseconfig/powerpc/CONFIG_HVC_UDBG | 1 + baseconfig/powerpc/CONFIG_HV_PERF_CTRS | 1 + baseconfig/powerpc/CONFIG_HW_RANDOM_POWERNV | 1 + baseconfig/powerpc/CONFIG_HW_RANDOM_PSERIES | 1 + baseconfig/powerpc/CONFIG_HZ | 1 + baseconfig/powerpc/CONFIG_HZ_100 | 1 + baseconfig/powerpc/CONFIG_HZ_1000 | 1 + baseconfig/powerpc/CONFIG_I2C_CPM | 1 + baseconfig/powerpc/CONFIG_I2C_MPC | 1 + baseconfig/powerpc/CONFIG_I2C_OPAL | 1 + baseconfig/powerpc/CONFIG_IBMEBUS | 1 + baseconfig/powerpc/CONFIG_IBMVETH | 1 + baseconfig/powerpc/CONFIG_IBMVNIC | 1 + baseconfig/powerpc/CONFIG_IBM_BSR | 1 + baseconfig/powerpc/CONFIG_IBM_EMAC | 1 + baseconfig/powerpc/CONFIG_IDEPCI_PCIBUS_ORDER | 1 + baseconfig/powerpc/CONFIG_IMA | 1 + baseconfig/powerpc/CONFIG_INPUT_GP2A | 1 + .../powerpc/CONFIG_INPUT_GPIO_TILT_POLLED | 1 + baseconfig/powerpc/CONFIG_INPUT_MATRIXKMAP | 1 + baseconfig/powerpc/CONFIG_INPUT_PCSPKR | 1 + baseconfig/powerpc/CONFIG_INPUT_PWM_BEEPER | 1 + baseconfig/powerpc/CONFIG_IO_EVENT_IRQ | 1 + baseconfig/powerpc/CONFIG_IPMI_POWERNV | 1 + baseconfig/powerpc/CONFIG_IRQSTACKS | 1 + baseconfig/powerpc/CONFIG_IRQ_ALL_CPUS | 1 + baseconfig/powerpc/CONFIG_IRQ_DOMAIN_DEBUG | 1 + .../powerpc/CONFIG_JUMP_LABEL_FEATURE_CHECKS | 1 + .../CONFIG_JUMP_LABEL_FEATURE_CHECK_DEBUG | 1 + baseconfig/powerpc/CONFIG_KEYBOARD_MATRIX | 1 + baseconfig/powerpc/CONFIG_KVM_BOOK3S_64 | 1 + baseconfig/powerpc/CONFIG_KVM_BOOK3S_64_HV | 1 + baseconfig/powerpc/CONFIG_KVM_BOOK3S_64_PR | 1 + .../powerpc/CONFIG_KVM_BOOK3S_HV_EXIT_TIMING | 1 + baseconfig/powerpc/CONFIG_KVM_EXIT_TIMING | 1 + baseconfig/powerpc/CONFIG_KVM_GUEST | 1 + baseconfig/powerpc/CONFIG_KVM_XICS | 1 + baseconfig/powerpc/CONFIG_LANCE | 1 + baseconfig/powerpc/CONFIG_LEDS_POWERNV | 1 + baseconfig/powerpc/CONFIG_LEDS_TRIGGER_GPIO | 1 + .../powerpc/CONFIG_LEDS_TRIGGER_HEARTBEAT | 1 + baseconfig/powerpc/CONFIG_LEDS_TRIGGER_TIMER | 1 + baseconfig/powerpc/CONFIG_LPARCFG | 1 + baseconfig/powerpc/CONFIG_MACINTOSH_DRIVERS | 1 + baseconfig/powerpc/CONFIG_MATH_EMULATION | 1 + baseconfig/powerpc/CONFIG_MCU_MPC8349EMITX | 1 + baseconfig/powerpc/CONFIG_MDIO_BUS_MUX_GPIO | 1 + .../powerpc/CONFIG_MDIO_BUS_MUX_MMIOREG | 1 + baseconfig/powerpc/CONFIG_MDIO_GPIO | 1 + baseconfig/powerpc/CONFIG_MEMORY_HOTPLUG | 1 + .../CONFIG_MEMORY_HOTPLUG_DEFAULT_ONLINE | 1 + baseconfig/powerpc/CONFIG_MEMORY_HOTREMOVE | 1 + baseconfig/powerpc/CONFIG_MEM_SOFT_DIRTY | 1 + baseconfig/powerpc/CONFIG_MFD_AAT2870_CORE | 1 + baseconfig/powerpc/CONFIG_MGCOGE | 1 + baseconfig/powerpc/CONFIG_MMC_SDHCI_OF | 1 + baseconfig/powerpc/CONFIG_MMC_SDHCI_OF_HLWD | 1 + baseconfig/powerpc/CONFIG_MPC5121_ADS | 1 + baseconfig/powerpc/CONFIG_MPIC_MSGR | 1 + baseconfig/powerpc/CONFIG_MSI_BITMAP_SELFTEST | 1 + baseconfig/powerpc/CONFIG_MTD_NAND_FSL_ELBC | 1 + baseconfig/powerpc/CONFIG_MTD_OF_PARTS | 1 + baseconfig/powerpc/CONFIG_MTD_POWERNV_FLASH | 1 + baseconfig/powerpc/CONFIG_NET_VENDOR_IBM | 1 + baseconfig/powerpc/CONFIG_NET_VENDOR_PASEMI | 1 + baseconfig/powerpc/CONFIG_NET_VENDOR_TOSHIBA | 1 + baseconfig/powerpc/CONFIG_NET_VENDOR_XILINX | 1 + baseconfig/powerpc/CONFIG_NI65 | 1 + baseconfig/powerpc/CONFIG_NR_CPUS | 1 + baseconfig/powerpc/CONFIG_NR_IRQS | 1 + baseconfig/powerpc/CONFIG_NUMA | 1 + baseconfig/powerpc/CONFIG_NUMA_BALANCING | 1 + .../CONFIG_NUMA_BALANCING_DEFAULT_ENABLED | 1 + baseconfig/powerpc/CONFIG_OF_OVERLAY | 1 + baseconfig/powerpc/CONFIG_OF_UNITTEST | 1 + baseconfig/powerpc/CONFIG_OPAL_PRD | 1 + baseconfig/powerpc/CONFIG_PATA_PLATFORM | 1 + baseconfig/powerpc/CONFIG_PCIEPORTBUS | 1 + baseconfig/powerpc/CONFIG_PMIC_ADP5520 | 1 + baseconfig/powerpc/CONFIG_PMIC_DA903X | 1 + baseconfig/powerpc/CONFIG_POWERNV_CPUFREQ | 1 + baseconfig/powerpc/CONFIG_POWERNV_CPUIDLE | 1 + baseconfig/powerpc/CONFIG_POWERNV_OP_PANEL | 1 + baseconfig/powerpc/CONFIG_POWER_RESET_GPIO | 1 + .../powerpc/CONFIG_POWER_RESET_GPIO_RESTART | 1 + baseconfig/powerpc/CONFIG_PPC | 1 + baseconfig/powerpc/CONFIG_PPC64 | 1 + .../CONFIG_PPC64_SUPPORTS_MEMORY_FAILURE | 1 + baseconfig/powerpc/CONFIG_PPC_64K_PAGES | 1 + baseconfig/powerpc/CONFIG_PPC_82xx | 1 + baseconfig/powerpc/CONFIG_PPC_83xx | 1 + baseconfig/powerpc/CONFIG_PPC_86xx | 1 + baseconfig/powerpc/CONFIG_PPC_CELL | 1 + baseconfig/powerpc/CONFIG_PPC_DENORMALISATION | 1 + baseconfig/powerpc/CONFIG_PPC_DISABLE_WERROR | 1 + baseconfig/powerpc/CONFIG_PPC_EARLY_DEBUG | 1 + baseconfig/powerpc/CONFIG_PPC_EMULATED_STATS | 1 + .../powerpc/CONFIG_PPC_EPAPR_HV_BYTECHAN | 1 + baseconfig/powerpc/CONFIG_PPC_IBM_CELL_BLADE | 1 + baseconfig/powerpc/CONFIG_PPC_ICSWX | 1 + baseconfig/powerpc/CONFIG_PPC_ICSWX_PID | 1 + .../powerpc/CONFIG_PPC_ICSWX_USE_SIGILL | 1 + baseconfig/powerpc/CONFIG_PPC_MAPLE | 1 + baseconfig/powerpc/CONFIG_PPC_MPC5200_LPBFIFO | 1 + .../powerpc/CONFIG_PPC_OF_BOOT_TRAMPOLINE | 1 + baseconfig/powerpc/CONFIG_PPC_PASEMI | 1 + baseconfig/powerpc/CONFIG_PPC_PMAC | 1 + baseconfig/powerpc/CONFIG_PPC_PMAC64 | 1 + baseconfig/powerpc/CONFIG_PPC_POWERNV | 1 + baseconfig/powerpc/CONFIG_PPC_PS3 | 1 + baseconfig/powerpc/CONFIG_PPC_PSERIES | 1 + baseconfig/powerpc/CONFIG_PPC_RADIX_MMU | 1 + baseconfig/powerpc/CONFIG_PPC_SMLPAR | 1 + baseconfig/powerpc/CONFIG_PPC_SPLPAR | 1 + baseconfig/powerpc/CONFIG_PPC_SUBPAGE_PROT | 1 + .../powerpc/CONFIG_PPC_TRANSACTIONAL_MEM | 1 + baseconfig/powerpc/CONFIG_PRINT_STACK_DEPTH | 1 + baseconfig/powerpc/CONFIG_PS3_VRAM | 1 + baseconfig/powerpc/CONFIG_PSERIES_CPUIDLE | 1 + baseconfig/powerpc/CONFIG_PSERIES_ENERGY | 1 + baseconfig/powerpc/CONFIG_RAPIDIO | 1 + baseconfig/powerpc/CONFIG_RCU_FANOUT | 1 + baseconfig/powerpc/CONFIG_RCU_FANOUT_LEAF | 1 + baseconfig/powerpc/CONFIG_RELOCATABLE | 1 + baseconfig/powerpc/CONFIG_RTAS_FLASH | 1 + baseconfig/powerpc/CONFIG_RTAS_PROC | 1 + baseconfig/powerpc/CONFIG_RTC | 1 + baseconfig/powerpc/CONFIG_RTC_DRV_GENERIC | 1 + baseconfig/powerpc/CONFIG_RTC_DRV_OPAL | 1 + baseconfig/powerpc/CONFIG_SCANLOG | 1 + baseconfig/powerpc/CONFIG_SCHED_SMT | 1 + baseconfig/powerpc/CONFIG_SCOM_DEBUGFS | 1 + baseconfig/powerpc/CONFIG_SCSI_AHA1542 | 1 + baseconfig/powerpc/CONFIG_SCSI_BUSLOGIC | 1 + baseconfig/powerpc/CONFIG_SCSI_IBMVFC | 1 + baseconfig/powerpc/CONFIG_SCSI_IBMVFC_TRACE | 1 + baseconfig/powerpc/CONFIG_SCSI_IBMVSCSI | 1 + baseconfig/powerpc/CONFIG_SCSI_IBMVSCSIS | 1 + baseconfig/powerpc/CONFIG_SCSI_IN2000 | 1 + baseconfig/powerpc/CONFIG_SCSI_IPR | 1 + baseconfig/powerpc/CONFIG_SCSI_IPR_DUMP | 1 + baseconfig/powerpc/CONFIG_SCSI_IPR_TRACE | 1 + baseconfig/powerpc/CONFIG_SCSI_IPS | 1 + baseconfig/powerpc/CONFIG_SENSORS_IBMPOWERNV | 1 + baseconfig/powerpc/CONFIG_SERIAL_8250 | 1 + baseconfig/powerpc/CONFIG_SERIAL_CPM | 1 + baseconfig/powerpc/CONFIG_SERIAL_ICOM | 1 + baseconfig/powerpc/CONFIG_SERIAL_OF_PLATFORM | 1 + baseconfig/powerpc/CONFIG_SERIAL_QE | 1 + .../powerpc/CONFIG_SERIO_XILINX_XPS_PS2 | 1 + baseconfig/powerpc/CONFIG_SIMPLE_GPIO | 1 + baseconfig/powerpc/CONFIG_SND_HDA_INTEL | 1 + baseconfig/powerpc/CONFIG_SND_PPC | 1 + baseconfig/powerpc/CONFIG_SND_SOC | 1 + baseconfig/powerpc/CONFIG_SPAPR_TCE_IOMMU | 1 + baseconfig/powerpc/CONFIG_SPARSEMEM_VMEMMAP | 1 + baseconfig/powerpc/CONFIG_SPARSE_IRQ | 1 + baseconfig/powerpc/CONFIG_SUSPEND_FREEZER | 1 + baseconfig/powerpc/CONFIG_SWIOTLB | 1 + baseconfig/powerpc/CONFIG_SYNC_FILE | 1 + baseconfig/powerpc/CONFIG_TCG_TPM | 1 + baseconfig/powerpc/CONFIG_THERMAL | 1 + .../powerpc/CONFIG_TOUCHSCREEN_AUO_PIXCIR | 1 + .../powerpc/CONFIG_TRANSPARENT_HUGEPAGE | 1 + baseconfig/powerpc/CONFIG_TWL4030_CORE | 1 + baseconfig/powerpc/CONFIG_UCC_GETH | 1 + baseconfig/powerpc/CONFIG_UDBG_RTAS_CONSOLE | 1 + baseconfig/powerpc/CONFIG_USB_EHCI_HCD_PPC_OF | 1 + baseconfig/powerpc/CONFIG_USB_FHCI_HCD | 1 + baseconfig/powerpc/CONFIG_USB_OHCI_HCD_PCI | 1 + baseconfig/powerpc/CONFIG_USB_OHCI_HCD_PPC_OF | 1 + .../powerpc/CONFIG_USB_OHCI_HCD_PPC_OF_BE | 1 + .../powerpc/CONFIG_USB_OHCI_HCD_PPC_OF_LE | 1 + baseconfig/powerpc/CONFIG_VIDEO_ZORAN | 1 + baseconfig/powerpc/CONFIG_VSX | 1 + baseconfig/powerpc/CONFIG_WATCHDOG_RTAS | 1 + baseconfig/powerpc/CONFIG_WINDFARM | 1 + baseconfig/powerpc/CONFIG_XILINX_EMACLITE | 1 + baseconfig/powerpc/CONFIG_XILINX_LL_TEMAC | 1 + baseconfig/powerpc/CONFIG_XMON | 1 + baseconfig/powerpc/CONFIG_XMON_DEFAULT | 1 + baseconfig/powerpc/CONFIG_XMON_DISASSEMBLY | 1 + baseconfig/powerpc/CONFIG_XPS_USB_HCD_XILINX | 1 + baseconfig/powerpc/CONFIG_XZ_DEC_POWERPC | 1 + baseconfig/powerpc/README | 2 + baseconfig/powerpc/powerpc64/CONFIG_ADB | 1 + baseconfig/powerpc/powerpc64/CONFIG_ADB_PMU | 1 + .../powerpc/powerpc64/CONFIG_ADB_PMU_LED | 1 + .../powerpc/powerpc64/CONFIG_AGP_UNINORTH | 1 + .../powerpc/powerpc64/CONFIG_APM_EMULATION | 1 + .../powerpc/powerpc64/CONFIG_APPLE_AIRPORT | 1 + .../powerpc/powerpc64/CONFIG_BLK_DEV_AEC62XX | 1 + .../powerpc/powerpc64/CONFIG_BLK_DEV_ALI15X3 | 1 + .../powerpc/powerpc64/CONFIG_BLK_DEV_AMD74XX | 1 + .../powerpc/powerpc64/CONFIG_BLK_DEV_CMD64X | 1 + .../powerpc/powerpc64/CONFIG_BLK_DEV_CS5520 | 1 + .../powerpc/powerpc64/CONFIG_BLK_DEV_CS5530 | 1 + .../powerpc/powerpc64/CONFIG_BLK_DEV_CY82C693 | 1 + .../powerpc/powerpc64/CONFIG_BLK_DEV_DELKIN | 1 + .../powerpc/powerpc64/CONFIG_BLK_DEV_GENERIC | 1 + .../powerpc/powerpc64/CONFIG_BLK_DEV_HPT366 | 1 + .../powerpc/powerpc64/CONFIG_BLK_DEV_IDE | 1 + .../powerpc/powerpc64/CONFIG_BLK_DEV_IDECD | 1 + .../powerpc/powerpc64/CONFIG_BLK_DEV_IDECS | 1 + .../powerpc/powerpc64/CONFIG_BLK_DEV_IDEDMA | 1 + .../powerpc/powerpc64/CONFIG_BLK_DEV_IDEPCI | 1 + .../powerpc/powerpc64/CONFIG_BLK_DEV_IDEPNP | 1 + .../powerpc/powerpc64/CONFIG_BLK_DEV_IDETAPE | 1 + .../powerpc/powerpc64/CONFIG_BLK_DEV_IDE_PMAC | 1 + .../powerpc/powerpc64/CONFIG_BLK_DEV_IDE_SATA | 1 + .../powerpc/powerpc64/CONFIG_BLK_DEV_IT8213 | 1 + .../powerpc/powerpc64/CONFIG_BLK_DEV_IT821X | 1 + .../powerpc/powerpc64/CONFIG_BLK_DEV_JMICRON | 1 + .../powerpc/powerpc64/CONFIG_BLK_DEV_NS87415 | 1 + .../powerpc/powerpc64/CONFIG_BLK_DEV_OFFBOARD | 1 + .../powerpc/powerpc64/CONFIG_BLK_DEV_OPTI621 | 1 + .../powerpc64/CONFIG_BLK_DEV_PDC202XX_NEW | 1 + .../powerpc64/CONFIG_BLK_DEV_PDC202XX_OLD | 1 + .../powerpc/powerpc64/CONFIG_BLK_DEV_PIIX | 1 + .../powerpc/powerpc64/CONFIG_BLK_DEV_SC1200 | 1 + .../powerpc/powerpc64/CONFIG_BLK_DEV_SIIMAGE | 1 + .../powerpc/powerpc64/CONFIG_BLK_DEV_SL82C105 | 1 + .../powerpc/powerpc64/CONFIG_BLK_DEV_SLC90E66 | 1 + .../powerpc/powerpc64/CONFIG_BLK_DEV_SVWKS | 1 + .../powerpc/powerpc64/CONFIG_BLK_DEV_TC86C001 | 1 + .../powerpc/powerpc64/CONFIG_BLK_DEV_TRIFLEX | 1 + .../powerpc/powerpc64/CONFIG_BLK_DEV_TRM290 | 1 + .../powerpc64/CONFIG_BLK_DEV_VIA82CXXX | 1 + .../powerpc/powerpc64/CONFIG_CPU_FREQ_MAPLE | 1 + .../powerpc/powerpc64/CONFIG_CPU_FREQ_PMAC64 | 1 + .../powerpc64/CONFIG_CPU_LITTLE_ENDIAN | 2 - .../powerpc/powerpc64/CONFIG_EDAC_AMD8111 | 1 + .../powerpc/powerpc64/CONFIG_EDAC_AMD8131 | 1 + .../powerpc/powerpc64/CONFIG_EDAC_CPC925 | 1 + .../powerpc/powerpc64/CONFIG_GENERIC_PHY | 1 + .../powerpc/powerpc64/CONFIG_HW_RANDOM_AMD | 1 + baseconfig/powerpc/powerpc64/CONFIG_I2C_MUX | 1 + .../powerpc/powerpc64/CONFIG_I2C_POWERMAC | 1 + baseconfig/powerpc/powerpc64/CONFIG_IDE | 1 + .../powerpc64/CONFIG_IDEPCI_PCIBUS_ORDER | 1 + baseconfig/powerpc/powerpc64/CONFIG_IDE_GD | 1 + .../powerpc/powerpc64/CONFIG_IDE_GD_ATA | 1 + .../powerpc/powerpc64/CONFIG_IDE_GD_ATAPI | 1 + .../powerpc/powerpc64/CONFIG_IDE_GENERIC | 1 + .../powerpc/powerpc64/CONFIG_IDE_PROC_FS | 1 + .../powerpc/powerpc64/CONFIG_IDE_TASK_IOCTL | 1 + .../powerpc64/CONFIG_MACINTOSH_DRIVERS | 1 + .../powerpc/powerpc64/CONFIG_MAC_EMUMOUSEBTN | 1 + baseconfig/powerpc/powerpc64/CONFIG_MFD_CORE | 1 + .../powerpc/powerpc64/CONFIG_MMIO_NVRAM | 1 + .../powerpc/powerpc64/CONFIG_PATA_MACIO | 1 + .../powerpc/powerpc64/CONFIG_PATA_OF_PLATFORM | 1 + .../powerpc/powerpc64/CONFIG_PATA_PLATFORM | 1 + .../powerpc/powerpc64/CONFIG_PMAC_APM_EMU | 1 + .../powerpc64/CONFIG_PMAC_BACKLIGHT_LEGACY | 1 + .../powerpc/powerpc64/CONFIG_PMAC_RACKMETER | 1 + baseconfig/powerpc/powerpc64/CONFIG_PMAC_SMU | 1 + baseconfig/powerpc/powerpc64/CONFIG_PPC_MAPLE | 1 + baseconfig/powerpc/powerpc64/CONFIG_PPC_PMAC | 1 + .../powerpc/powerpc64/CONFIG_PPC_PMAC64 | 1 + .../powerpc/powerpc64/CONFIG_SERIAL_CORE | 1 + .../powerpc/powerpc64/CONFIG_SERIAL_PMACZILOG | 1 + .../powerpc64/CONFIG_SERIAL_PMACZILOG_TTYS | 1 + baseconfig/powerpc/powerpc64/CONFIG_SND_AOA | 1 + .../powerpc64/CONFIG_SND_AOA_FABRIC_LAYOUT | 1 + .../powerpc/powerpc64/CONFIG_SND_AOA_ONYX | 1 + .../powerpc/powerpc64/CONFIG_SND_AOA_SOUNDBUS | 1 + .../powerpc64/CONFIG_SND_AOA_SOUNDBUS_I2S | 1 + .../powerpc/powerpc64/CONFIG_SND_AOA_TAS | 1 + .../powerpc/powerpc64/CONFIG_SND_AOA_TOONIE | 1 + .../powerpc/powerpc64/CONFIG_SND_POWERMAC | 1 + .../powerpc64/CONFIG_SND_POWERMAC_AUTO_DRC | 1 + baseconfig/powerpc/powerpc64/CONFIG_WINDFARM | 1 + .../powerpc/powerpc64/CONFIG_WINDFARM_PM112 | 1 + .../powerpc/powerpc64/CONFIG_WINDFARM_PM121 | 1 + .../powerpc/powerpc64/CONFIG_WINDFARM_PM72 | 1 + .../powerpc/powerpc64/CONFIG_WINDFARM_PM81 | 1 + .../powerpc/powerpc64/CONFIG_WINDFARM_PM91 | 1 + .../powerpc/powerpc64/CONFIG_WINDFARM_RM31 | 1 + .../powerpc64le/CONFIG_CHECKPOINT_RESTORE | 1 + .../powerpc64le/CONFIG_CPU_LITTLE_ENDIAN | 1 + .../CONFIG_DISABLE_MPROFILE_KERNEL | 1 + .../powerpc/powerpc64le/CONFIG_GENERIC_PHY | 1 + baseconfig/powerpc/powerpc64le/CONFIG_I2C_MUX | 1 + .../powerpc/powerpc64le/CONFIG_MFD_CORE | 1 + .../powerpc/powerpc64le/CONFIG_POWER7_CPU | 1 + .../powerpc/powerpc64le/CONFIG_SERIAL_CORE | 1 + .../powerpc64p7/CONFIG_CPU_LITTLE_ENDIAN | 1 + .../powerpc/powerpc64p7/CONFIG_GENERIC_PHY | 1 + baseconfig/powerpc/powerpc64p7/CONFIG_I2C_MUX | 1 + .../powerpc/powerpc64p7/CONFIG_MFD_CORE | 1 + .../powerpc/powerpc64p7/CONFIG_POWER7_CPU | 1 + .../powerpc/powerpc64p7/CONFIG_SERIAL_CORE | 1 + baseconfig/s390x/CONFIG_64BIT | 1 + baseconfig/s390x/CONFIG_ACCESSIBILITY | 1 + baseconfig/s390x/CONFIG_AFIUCV | 1 + baseconfig/s390x/CONFIG_APPLDATA_BASE | 1 + baseconfig/s390x/CONFIG_APPLDATA_MEM | 1 + baseconfig/s390x/CONFIG_APPLDATA_NET_SUM | 1 + baseconfig/s390x/CONFIG_APPLDATA_OS | 1 + baseconfig/s390x/CONFIG_ASYMMETRIC_KEY_TYPE | 1 + baseconfig/s390x/CONFIG_ATA_OVER_ETH | 1 + baseconfig/s390x/CONFIG_ATM_DRIVERS | 1 + baseconfig/s390x/CONFIG_AUXDISPLAY | 1 + baseconfig/s390x/CONFIG_B44 | 1 + .../s390x/CONFIG_BACKLIGHT_CLASS_DEVICE | 1 + baseconfig/s390x/CONFIG_BACKLIGHT_LCD_SUPPORT | 1 + baseconfig/s390x/CONFIG_BCMA | 1 + baseconfig/s390x/CONFIG_BLK_DEV_XPRAM | 1 + baseconfig/s390x/CONFIG_BT | 1 + baseconfig/s390x/CONFIG_CB710_CORE | 1 + baseconfig/s390x/CONFIG_CCW | 1 + baseconfig/s390x/CONFIG_CCWGROUP | 1 + baseconfig/s390x/CONFIG_CCW_CONSOLE | 1 + baseconfig/s390x/CONFIG_CC_OPTIMIZE_FOR_SIZE | 1 + baseconfig/s390x/CONFIG_CDROM_PKTCDVD | 1 + baseconfig/s390x/CONFIG_CHECK_STACK | 1 + baseconfig/s390x/CONFIG_CHSC_SCH | 1 + baseconfig/s390x/CONFIG_CMM | 1 + baseconfig/s390x/CONFIG_CMM_IUCV | 1 + baseconfig/s390x/CONFIG_COMPAT | 1 + baseconfig/s390x/CONFIG_CPU_IDLE | 1 + baseconfig/s390x/CONFIG_CRASH_DUMP | 1 + baseconfig/s390x/CONFIG_CRC7 | 1 + baseconfig/s390x/CONFIG_CRYPTO_AES_S390 | 1 + baseconfig/s390x/CONFIG_CRYPTO_CRC32_S390 | 1 + baseconfig/s390x/CONFIG_CRYPTO_DES_S390 | 1 + baseconfig/s390x/CONFIG_CRYPTO_GHASH_S390 | 1 + baseconfig/s390x/CONFIG_CRYPTO_SHA1_S390 | 1 + baseconfig/s390x/CONFIG_CRYPTO_SHA256_S390 | 1 + baseconfig/s390x/CONFIG_CRYPTO_SHA512_S390 | 1 + baseconfig/s390x/CONFIG_CTC | 1 + baseconfig/s390x/CONFIG_CTCM | 1 + baseconfig/s390x/CONFIG_DASD | 1 + baseconfig/s390x/CONFIG_DASD_DIAG | 1 + baseconfig/s390x/CONFIG_DASD_ECKD | 1 + baseconfig/s390x/CONFIG_DASD_EER | 1 + baseconfig/s390x/CONFIG_DASD_FBA | 1 + baseconfig/s390x/CONFIG_DASD_PROFILE | 1 + baseconfig/s390x/CONFIG_DCSSBLK | 1 + baseconfig/s390x/CONFIG_DIAG288_WATCHDOG | 1 + baseconfig/s390x/CONFIG_DRM | 1 + baseconfig/s390x/CONFIG_DW_DMAC | 1 + baseconfig/s390x/CONFIG_EADM_SCH | 1 + baseconfig/s390x/CONFIG_EMU_SIZE | 1 + baseconfig/s390x/CONFIG_FB | 1 + baseconfig/s390x/CONFIG_FCOE | 1 + baseconfig/s390x/CONFIG_FIREWIRE | 1 + baseconfig/s390x/CONFIG_FIREWIRE_NOSY | 1 + baseconfig/s390x/CONFIG_FIXED_PHY | 1 + baseconfig/s390x/CONFIG_FMC | 1 + baseconfig/s390x/CONFIG_FUSION | 1 + baseconfig/s390x/CONFIG_GAMEPORT | 1 + baseconfig/s390x/CONFIG_HID | 1 + baseconfig/s390x/CONFIG_HID_GENERIC | 1 + baseconfig/s390x/CONFIG_HID_MAGICMOUSE | 1 + baseconfig/s390x/CONFIG_HOTPLUG_PCI_CPCI | 1 + baseconfig/s390x/CONFIG_HOTPLUG_PCI_S390 | 1 + baseconfig/s390x/CONFIG_HOTPLUG_PCI_SHPC | 1 + baseconfig/s390x/CONFIG_HVC_IUCV | 1 + baseconfig/s390x/CONFIG_HWMON | 1 + baseconfig/s390x/CONFIG_HZ_100 | 1 + baseconfig/s390x/CONFIG_HZ_1000 | 1 + baseconfig/s390x/CONFIG_I2C | 1 + baseconfig/s390x/CONFIG_I2C_HELPER_AUTO | 1 + baseconfig/s390x/CONFIG_I2C_NFORCE2 | 1 + baseconfig/s390x/CONFIG_I2C_PARPORT | 1 + baseconfig/s390x/CONFIG_I2C_PARPORT_LIGHT | 1 + baseconfig/s390x/CONFIG_I2C_SMBUS | 1 + baseconfig/s390x/CONFIG_I2C_STUB | 1 + baseconfig/s390x/CONFIG_IBM_PARTITION | 1 + baseconfig/s390x/CONFIG_IEEE802154_DRIVERS | 1 + baseconfig/s390x/CONFIG_INPUT_JOYDEV | 1 + baseconfig/s390x/CONFIG_INPUT_JOYSTICK | 1 + baseconfig/s390x/CONFIG_INPUT_KEYBOARD | 1 + baseconfig/s390x/CONFIG_INPUT_MISC | 1 + baseconfig/s390x/CONFIG_INPUT_MOUSE | 1 + baseconfig/s390x/CONFIG_INPUT_TABLET | 1 + baseconfig/s390x/CONFIG_INPUT_TOUCHSCREEN | 1 + baseconfig/s390x/CONFIG_IPL | 1 + baseconfig/s390x/CONFIG_IRDA | 1 + baseconfig/s390x/CONFIG_IRQ_DOMAIN_DEBUG | 1 + baseconfig/s390x/CONFIG_IUCV | 1 + baseconfig/s390x/CONFIG_KVM | 1 + baseconfig/s390x/CONFIG_KVM_S390_UCONTROL | 1 + baseconfig/s390x/CONFIG_LCD_CLASS_DEVICE | 1 + baseconfig/s390x/CONFIG_LCD_PLATFORM | 1 + baseconfig/s390x/CONFIG_LCS | 1 + baseconfig/s390x/CONFIG_LOG_BUF_SHIFT | 1 + baseconfig/s390x/CONFIG_MAC80211 | 1 + baseconfig/s390x/CONFIG_MAC_PARTITION | 1 + baseconfig/s390x/CONFIG_MARCH_Z900 | 1 + baseconfig/s390x/CONFIG_MARCH_Z990 | 1 + baseconfig/s390x/CONFIG_MARCH_Z9_109 | 1 + baseconfig/s390x/CONFIG_MEDIA_SUPPORT | 1 + baseconfig/s390x/CONFIG_MEMORY_HOTPLUG | 1 + .../CONFIG_MEMORY_HOTPLUG_DEFAULT_ONLINE | 1 + baseconfig/s390x/CONFIG_MEMORY_HOTREMOVE | 1 + baseconfig/s390x/CONFIG_MEMSTICK | 1 + baseconfig/s390x/CONFIG_MFD_CORE | 1 + baseconfig/s390x/CONFIG_MFD_RTSX_PCI | 1 + baseconfig/s390x/CONFIG_MFD_SM501 | 1 + baseconfig/s390x/CONFIG_MFD_VX855 | 1 + baseconfig/s390x/CONFIG_MFD_WL1273_CORE | 1 + baseconfig/s390x/CONFIG_MISDN_HFCMULTI | 1 + baseconfig/s390x/CONFIG_MMC | 1 + baseconfig/s390x/CONFIG_MONREADER | 1 + baseconfig/s390x/CONFIG_MONWRITER | 1 + baseconfig/s390x/CONFIG_MSDOS_PARTITION | 1 + baseconfig/s390x/CONFIG_MTD | 1 + baseconfig/s390x/CONFIG_NETCONSOLE | 1 + baseconfig/s390x/CONFIG_NETIUCV | 1 + baseconfig/s390x/CONFIG_NET_VENDOR_ARC | 1 + baseconfig/s390x/CONFIG_NET_VENDOR_INTEL | 1 + baseconfig/s390x/CONFIG_NET_VENDOR_MARVELL | 1 + baseconfig/s390x/CONFIG_NET_VENDOR_NATSEMI | 1 + baseconfig/s390x/CONFIG_NET_VENDOR_VIA | 1 + baseconfig/s390x/CONFIG_NODES_SHIFT | 1 + baseconfig/s390x/CONFIG_NR_CPUS | 1 + baseconfig/s390x/CONFIG_NUMA | 1 + baseconfig/s390x/CONFIG_NUMA_BALANCING | 1 + .../CONFIG_NUMA_BALANCING_DEFAULT_ENABLED | 1 + baseconfig/s390x/CONFIG_NUMA_EMU | 1 + baseconfig/s390x/CONFIG_OF | 1 + baseconfig/s390x/CONFIG_OSF_PARTITION | 1 + baseconfig/s390x/CONFIG_PACK_STACK | 1 + baseconfig/s390x/CONFIG_PARPORT | 1 + baseconfig/s390x/CONFIG_PARTITION_ADVANCED | 1 + baseconfig/s390x/CONFIG_PCI | 1 + baseconfig/s390x/CONFIG_PCI_NR_FUNCTIONS | 1 + baseconfig/s390x/CONFIG_PCMCIA | 1 + baseconfig/s390x/CONFIG_PFAULT | 1 + baseconfig/s390x/CONFIG_PHYLIB | 1 + baseconfig/s390x/CONFIG_PREEMPT_TRACER | 1 + baseconfig/s390x/CONFIG_QDIO | 1 + baseconfig/s390x/CONFIG_QETH | 1 + baseconfig/s390x/CONFIG_QETH_IPV6 | 1 + baseconfig/s390x/CONFIG_QETH_L2 | 1 + baseconfig/s390x/CONFIG_QETH_L3 | 1 + baseconfig/s390x/CONFIG_RCU_FANOUT | 1 + baseconfig/s390x/CONFIG_RCU_FANOUT_LEAF | 1 + baseconfig/s390x/CONFIG_RMI4_F03 | 1 + baseconfig/s390x/CONFIG_S390_GUEST | 1 + .../s390x/CONFIG_S390_GUEST_OLD_TRANSPORT | 1 + baseconfig/s390x/CONFIG_S390_HYPFS_FS | 1 + baseconfig/s390x/CONFIG_S390_PRNG | 1 + baseconfig/s390x/CONFIG_S390_PTDUMP | 1 + baseconfig/s390x/CONFIG_S390_TAPE | 1 + baseconfig/s390x/CONFIG_S390_TAPE_34XX | 1 + baseconfig/s390x/CONFIG_S390_TAPE_3590 | 1 + baseconfig/s390x/CONFIG_S390_VMUR | 1 + baseconfig/s390x/CONFIG_SCHED_BOOK | 1 + baseconfig/s390x/CONFIG_SCHED_MC | 1 + baseconfig/s390x/CONFIG_SCHED_TOPOLOGY | 1 + baseconfig/s390x/CONFIG_SCLP_ASYNC | 1 + baseconfig/s390x/CONFIG_SCLP_ASYNC_ID | 1 + baseconfig/s390x/CONFIG_SCLP_CONSOLE | 1 + baseconfig/s390x/CONFIG_SCLP_OFB | 1 + baseconfig/s390x/CONFIG_SCLP_TTY | 1 + baseconfig/s390x/CONFIG_SCLP_VT220_CONSOLE | 1 + baseconfig/s390x/CONFIG_SCLP_VT220_TTY | 1 + baseconfig/s390x/CONFIG_SCM_BLOCK | 1 + .../s390x/CONFIG_SCM_BLOCK_CLUSTER_WRITE | 1 + baseconfig/s390x/CONFIG_SCM_BUS | 1 + baseconfig/s390x/CONFIG_SERIAL_8250 | 1 + baseconfig/s390x/CONFIG_SERIAL_CORE | 1 + baseconfig/s390x/CONFIG_SERIO | 1 + baseconfig/s390x/CONFIG_SGI_PARTITION | 1 + baseconfig/s390x/CONFIG_SHARED_KERNEL | 1 + baseconfig/s390x/CONFIG_SH_ETH | 1 + baseconfig/s390x/CONFIG_SLIP | 1 + baseconfig/s390x/CONFIG_SMSGIUCV | 1 + baseconfig/s390x/CONFIG_SMSGIUCV_EVENT | 1 + baseconfig/s390x/CONFIG_SOUND | 1 + baseconfig/s390x/CONFIG_SSB | 1 + baseconfig/s390x/CONFIG_STACK_GUARD | 1 + baseconfig/s390x/CONFIG_STAGING | 1 + baseconfig/s390x/CONFIG_SUN_PARTITION | 1 + baseconfig/s390x/CONFIG_SUSPEND | 1 + baseconfig/s390x/CONFIG_THERMAL | 1 + baseconfig/s390x/CONFIG_TIFM_CORE | 1 + baseconfig/s390x/CONFIG_TN3215 | 1 + baseconfig/s390x/CONFIG_TN3215_CONSOLE | 1 + baseconfig/s390x/CONFIG_TN3270 | 1 + baseconfig/s390x/CONFIG_TN3270_CONSOLE | 1 + baseconfig/s390x/CONFIG_TN3270_FS | 1 + baseconfig/s390x/CONFIG_TN3270_TTY | 1 + baseconfig/s390x/CONFIG_TR | 1 + baseconfig/s390x/CONFIG_TRANSPARENT_HUGEPAGE | 1 + baseconfig/s390x/CONFIG_USB_SUPPORT | 1 + baseconfig/s390x/CONFIG_UWB | 1 + baseconfig/s390x/CONFIG_VIRTIO_CONSOLE | 1 + baseconfig/s390x/CONFIG_VMCP | 1 + baseconfig/s390x/CONFIG_VMLOGRDR | 1 + baseconfig/s390x/CONFIG_W1 | 1 + baseconfig/s390x/CONFIG_WAN | 1 + baseconfig/s390x/CONFIG_WARN_DYNAMIC_STACK | 1 + baseconfig/s390x/CONFIG_WIRELESS_EXT | 1 + baseconfig/s390x/CONFIG_ZCRYPT | 1 + baseconfig/s390x/CONFIG_ZFCP | 1 + baseconfig/x86/CONFIG_ACERHDF | 1 + baseconfig/x86/CONFIG_ACER_WMI | 1 + baseconfig/x86/CONFIG_ACPI | 1 + baseconfig/x86/CONFIG_ACPI_AC | 1 + baseconfig/x86/CONFIG_ACPI_APEI | 1 + baseconfig/x86/CONFIG_ACPI_APEI_EINJ | 1 + baseconfig/x86/CONFIG_ACPI_APEI_ERST_DEBUG | 1 + baseconfig/x86/CONFIG_ACPI_APEI_GHES | 1 + .../x86/CONFIG_ACPI_APEI_MEMORY_FAILURE | 1 + baseconfig/x86/CONFIG_ACPI_APEI_PCIEAER | 1 + baseconfig/x86/CONFIG_ACPI_BATTERY | 1 + baseconfig/x86/CONFIG_ACPI_BGRT | 1 + baseconfig/x86/CONFIG_ACPI_BUTTON | 1 + baseconfig/x86/CONFIG_ACPI_CMPC | 1 + baseconfig/x86/CONFIG_ACPI_CONFIGFS | 1 + baseconfig/x86/CONFIG_ACPI_CONTAINER | 1 + baseconfig/x86/CONFIG_ACPI_CUSTOM_METHOD | 1 + baseconfig/x86/CONFIG_ACPI_DOCK | 1 + baseconfig/x86/CONFIG_ACPI_EC_DEBUGFS | 1 + baseconfig/x86/CONFIG_ACPI_EXTLOG | 1 + baseconfig/x86/CONFIG_ACPI_FAN | 1 + baseconfig/x86/CONFIG_ACPI_HED | 1 + baseconfig/x86/CONFIG_ACPI_I2C_OPREGION | 1 + baseconfig/x86/CONFIG_ACPI_IPMI | 1 + baseconfig/x86/CONFIG_ACPI_PROCESSOR | 1 + .../x86/CONFIG_ACPI_PROCESSOR_AGGREGATOR | 1 + baseconfig/x86/CONFIG_ACPI_PROCFS | 1 + baseconfig/x86/CONFIG_ACPI_PROCFS_POWER | 1 + .../x86/CONFIG_ACPI_REV_OVERRIDE_POSSIBLE | 1 + baseconfig/x86/CONFIG_ACPI_SBS | 1 + baseconfig/x86/CONFIG_ACPI_SLEEP | 1 + baseconfig/x86/CONFIG_ACPI_TABLE_UPGRADE | 1 + baseconfig/x86/CONFIG_ACPI_THERMAL | 1 + baseconfig/x86/CONFIG_ACPI_TOSHIBA | 1 + baseconfig/x86/CONFIG_ACPI_VIDEO | 1 + baseconfig/x86/CONFIG_ACPI_WMI | 1 + baseconfig/x86/CONFIG_AGP | 1 + baseconfig/x86/CONFIG_AGP_ALI | 1 + baseconfig/x86/CONFIG_AGP_AMD | 1 + baseconfig/x86/CONFIG_AGP_AMD64 | 1 + baseconfig/x86/CONFIG_AGP_ATI | 1 + baseconfig/x86/CONFIG_AGP_EFFICEON | 1 + baseconfig/x86/CONFIG_AGP_INTEL | 1 + baseconfig/x86/CONFIG_AGP_NVIDIA | 1 + baseconfig/x86/CONFIG_AGP_SIS | 1 + baseconfig/x86/CONFIG_AGP_SWORKS | 1 + baseconfig/x86/CONFIG_AGP_VIA | 1 + baseconfig/x86/CONFIG_ALIENWARE_WMI | 1 + baseconfig/x86/CONFIG_AMD_XGBE | 1 + baseconfig/x86/CONFIG_AMD_XGBE_DCB | 1 + baseconfig/x86/CONFIG_AMILO_RFKILL | 1 + baseconfig/x86/CONFIG_APPLE_GMUX | 1 + baseconfig/x86/CONFIG_APPLE_PROPERTIES | 1 + baseconfig/x86/CONFIG_ASUS_LAPTOP | 1 + baseconfig/x86/CONFIG_ASUS_NB_WMI | 1 + baseconfig/x86/CONFIG_ASUS_WIRELESS | 1 + baseconfig/x86/CONFIG_ASUS_WMI | 1 + baseconfig/x86/CONFIG_BACKLIGHT_APPLE | 1 + baseconfig/x86/CONFIG_BLK_DEV_AMD74XX | 1 + .../x86/CONFIG_BLK_DEV_PCIESSD_MTIP32XX | 1 + baseconfig/x86/CONFIG_BXT_WC_PMIC_OPREGION | 1 + baseconfig/x86/CONFIG_CAPI_EICON | 1 + baseconfig/x86/CONFIG_CC_STACKPROTECTOR | 1 + .../x86/CONFIG_CC_STACKPROTECTOR_STRONG | 1 + baseconfig/x86/CONFIG_CHROMEOS_LAPTOP | 1 + baseconfig/x86/CONFIG_CHROMEOS_PSTORE | 1 + baseconfig/x86/CONFIG_CMDLINE_BOOL | 1 + baseconfig/x86/CONFIG_COMPAL_LAPTOP | 1 + baseconfig/x86/CONFIG_COMPAT_VDSO | 1 + baseconfig/x86/CONFIG_CPA_DEBUG | 1 + baseconfig/x86/CONFIG_CRC_PMIC_OPREGION | 1 + baseconfig/x86/CONFIG_CRYPTO_AES_NI_INTEL | 1 + baseconfig/x86/CONFIG_CRYPTO_CRC32_PCLMUL | 1 + baseconfig/x86/CONFIG_CRYPTO_DEV_CCP | 1 + baseconfig/x86/CONFIG_CRYPTO_DEV_CCP_CRYPTO | 1 + baseconfig/x86/CONFIG_CRYPTO_DEV_CCP_DD | 1 + baseconfig/x86/CONFIG_CRYPTO_DEV_PADLOCK | 1 + baseconfig/x86/CONFIG_CRYPTO_DEV_PADLOCK_AES | 1 + baseconfig/x86/CONFIG_CRYPTO_DEV_PADLOCK_SHA | 1 + baseconfig/x86/CONFIG_CRYPTO_DEV_QAT_C3XXX | 1 + baseconfig/x86/CONFIG_CRYPTO_DEV_QAT_C3XXXVF | 1 + baseconfig/x86/CONFIG_CRYPTO_DEV_QAT_C62X | 1 + baseconfig/x86/CONFIG_CRYPTO_DEV_QAT_C62XVF | 1 + baseconfig/x86/CONFIG_CRYPTO_DEV_QAT_DH895xCC | 1 + .../x86/CONFIG_CRYPTO_DEV_QAT_DH895xCCVF | 1 + baseconfig/x86/CONFIG_CRYPTO_SERPENT_SSE2_586 | 1 + baseconfig/x86/CONFIG_DCDBAS | 1 + baseconfig/x86/CONFIG_DEBUG_ENTRY | 1 + baseconfig/x86/CONFIG_DEBUG_NMI_SELFTEST | 1 + baseconfig/x86/CONFIG_DEBUG_PER_CPU_MAPS | 1 + baseconfig/x86/CONFIG_DEBUG_STACKOVERFLOW | 1 + baseconfig/x86/CONFIG_DEBUG_TLBFLUSH | 1 + baseconfig/x86/CONFIG_DEBUG_WX | 1 + baseconfig/x86/CONFIG_DELL_LAPTOP | 1 + baseconfig/x86/CONFIG_DELL_RBTN | 1 + baseconfig/x86/CONFIG_DELL_RBU | 1 + baseconfig/x86/CONFIG_DELL_SMBIOS | 1 + baseconfig/x86/CONFIG_DELL_SMO8800 | 1 + baseconfig/x86/CONFIG_DELL_WMI | 1 + baseconfig/x86/CONFIG_DELL_WMI_AIO | 1 + baseconfig/x86/CONFIG_DMIID | 1 + baseconfig/x86/CONFIG_DMI_SYSFS | 1 + baseconfig/x86/CONFIG_DPTF_POWER | 1 + baseconfig/x86/CONFIG_DRM_GMA3600 | 1 + baseconfig/x86/CONFIG_DRM_GMA500 | 1 + baseconfig/x86/CONFIG_DRM_GMA600 | 1 + baseconfig/x86/CONFIG_DRM_PANEL_LG_LG4573 | 1 + .../CONFIG_DRM_PANEL_PANASONIC_VVX10F034N00 | 1 + .../x86/CONFIG_DRM_PANEL_SAMSUNG_LD9040 | 1 + baseconfig/x86/CONFIG_DW_DMAC_CORE | 1 + baseconfig/x86/CONFIG_DW_DMAC_PCI | 1 + baseconfig/x86/CONFIG_E1000E_HWTS | 1 + baseconfig/x86/CONFIG_EADC_AMD64 | 1 + baseconfig/x86/CONFIG_EARLY_PRINTK_EFI | 1 + baseconfig/x86/CONFIG_EDAC_AMD76X | 1 + baseconfig/x86/CONFIG_EDAC_AMD8111 | 1 + baseconfig/x86/CONFIG_EDAC_AMD8131 | 1 + baseconfig/x86/CONFIG_EDAC_DECODE_MCE | 1 + baseconfig/x86/CONFIG_EDAC_E752X | 1 + baseconfig/x86/CONFIG_EDAC_E7XXX | 1 + baseconfig/x86/CONFIG_EDAC_I3000 | 1 + baseconfig/x86/CONFIG_EDAC_I3200 | 1 + baseconfig/x86/CONFIG_EDAC_I5000 | 1 + baseconfig/x86/CONFIG_EDAC_I5100 | 1 + baseconfig/x86/CONFIG_EDAC_I5400 | 1 + baseconfig/x86/CONFIG_EDAC_I7300 | 1 + baseconfig/x86/CONFIG_EDAC_I7CORE | 1 + baseconfig/x86/CONFIG_EDAC_I82860 | 1 + baseconfig/x86/CONFIG_EDAC_I82875P | 1 + baseconfig/x86/CONFIG_EDAC_I82975X | 1 + baseconfig/x86/CONFIG_EDAC_IE31200 | 1 + baseconfig/x86/CONFIG_EDAC_R82600 | 1 + baseconfig/x86/CONFIG_EDAC_X38 | 1 + baseconfig/x86/CONFIG_EDD | 1 + baseconfig/x86/CONFIG_EDD_OFF | 1 + baseconfig/x86/CONFIG_EEEPC_LAPTOP | 1 + baseconfig/x86/CONFIG_EEEPC_WMI | 1 + baseconfig/x86/CONFIG_EFI | 1 + baseconfig/x86/CONFIG_EFIVAR_FS | 1 + .../x86/CONFIG_EFI_ALLOW_SECURE_BOOT_EXIT | 1 + baseconfig/x86/CONFIG_EFI_BOOTLOADER_CONTROL | 1 + baseconfig/x86/CONFIG_EFI_CAPSULE_LOADER | 1 + baseconfig/x86/CONFIG_EFI_FAKE_MEMMAP | 1 + baseconfig/x86/CONFIG_EFI_PCDP | 1 + baseconfig/x86/CONFIG_EFI_RUNTIME_MAP | 1 + .../x86/CONFIG_EFI_SECURE_BOOT_LOCK_DOWN | 1 + .../x86/CONFIG_EFI_SECURE_BOOT_SIG_ENFORCE | 1 + .../x86/CONFIG_EFI_SIGNATURE_LIST_PARSER | 1 + baseconfig/x86/CONFIG_EFI_STUB | 1 + baseconfig/x86/CONFIG_EFI_VARS | 1 + baseconfig/x86/CONFIG_EFI_VARS_PSTORE | 1 + .../CONFIG_EFI_VARS_PSTORE_DEFAULT_DISABLE | 1 + baseconfig/x86/CONFIG_F71808E_WDT | 1 + baseconfig/x86/CONFIG_FB_EFI | 1 + baseconfig/x86/CONFIG_FB_HYPERV | 1 + baseconfig/x86/CONFIG_FB_N411 | 1 + baseconfig/x86/CONFIG_FUJITSU_ES | 1 + baseconfig/x86/CONFIG_FUJITSU_LAPTOP | 1 + baseconfig/x86/CONFIG_FUJITSU_LAPTOP_DEBUG | 1 + baseconfig/x86/CONFIG_FUJITSU_TABLET | 1 + baseconfig/x86/CONFIG_GENERIC_ISA_DMA | 1 + baseconfig/x86/CONFIG_GPIO_104_IDI_48 | 1 + baseconfig/x86/CONFIG_GPIO_CRYSTAL_COVE | 1 + baseconfig/x86/CONFIG_GPIO_F7188X | 1 + baseconfig/x86/CONFIG_GPIO_ICH | 1 + baseconfig/x86/CONFIG_GPIO_INTEL_MID | 1 + baseconfig/x86/CONFIG_GPIO_LYNXPOINT | 1 + baseconfig/x86/CONFIG_GPIO_WHISKEY_COVE | 1 + baseconfig/x86/CONFIG_HID_HYPERV_MOUSE | 1 + baseconfig/x86/CONFIG_HOTPLUG_PCI_COMPAQ | 1 + .../x86/CONFIG_HOTPLUG_PCI_COMPAQ_NVRAM | 1 + baseconfig/x86/CONFIG_HOTPLUG_PCI_IBM | 1 + baseconfig/x86/CONFIG_HPET | 1 + baseconfig/x86/CONFIG_HPET_MMAP | 1 + baseconfig/x86/CONFIG_HPET_TIMER | 1 + baseconfig/x86/CONFIG_HPWDT_NMI_DECODING | 1 + baseconfig/x86/CONFIG_HP_ACCEL | 1 + baseconfig/x86/CONFIG_HP_ILO | 1 + baseconfig/x86/CONFIG_HP_WATCHDOG | 1 + baseconfig/x86/CONFIG_HP_WIRELESS | 1 + baseconfig/x86/CONFIG_HP_WMI | 1 + baseconfig/x86/CONFIG_HVC_XEN | 1 + baseconfig/x86/CONFIG_HVC_XEN_FRONTEND | 1 + baseconfig/x86/CONFIG_HW_RANDOM_AMD | 1 + baseconfig/x86/CONFIG_HW_RANDOM_INTEL | 1 + baseconfig/x86/CONFIG_HW_RANDOM_VIA | 1 + baseconfig/x86/CONFIG_HYPERV | 1 + baseconfig/x86/CONFIG_HYPERVISOR_GUEST | 1 + baseconfig/x86/CONFIG_HYPERV_BALLOON | 1 + baseconfig/x86/CONFIG_HYPERV_KEYBOARD | 1 + baseconfig/x86/CONFIG_HYPERV_NET | 1 + baseconfig/x86/CONFIG_HYPERV_STORAGE | 1 + baseconfig/x86/CONFIG_HYPERV_UTILS | 1 + baseconfig/x86/CONFIG_I2C | 1 + baseconfig/x86/CONFIG_I2C_AMD756 | 1 + baseconfig/x86/CONFIG_I2C_AMD756_S4882 | 1 + baseconfig/x86/CONFIG_I2C_AMD8111 | 1 + baseconfig/x86/CONFIG_I2C_DESIGNWARE_BAYTRAIL | 1 + baseconfig/x86/CONFIG_I2C_DESIGNWARE_CORE | 1 + baseconfig/x86/CONFIG_I2C_DESIGNWARE_PLATFORM | 1 + baseconfig/x86/CONFIG_I2C_I801 | 1 + baseconfig/x86/CONFIG_I2C_ISCH | 1 + baseconfig/x86/CONFIG_I2C_ISMT | 1 + baseconfig/x86/CONFIG_I2C_NFORCE2 | 1 + baseconfig/x86/CONFIG_I2C_NFORCE2_S4985 | 1 + baseconfig/x86/CONFIG_I2C_PIIX4 | 1 + baseconfig/x86/CONFIG_I2C_SCMI | 1 + baseconfig/x86/CONFIG_I2C_SIS96X | 1 + baseconfig/x86/CONFIG_I2C_VIA | 1 + baseconfig/x86/CONFIG_I2C_VIAPRO | 1 + baseconfig/x86/CONFIG_I8K | 1 + baseconfig/x86/CONFIG_IBM_ASM | 1 + baseconfig/x86/CONFIG_IBM_RTL | 1 + baseconfig/x86/CONFIG_IDEAPAD_LAPTOP | 1 + baseconfig/x86/CONFIG_IDMA64 | 1 + baseconfig/x86/CONFIG_IE6XX_WDT | 1 + baseconfig/x86/CONFIG_INPUT_SOC_BUTTON_ARRAY | 1 + .../x86/CONFIG_INPUT_XEN_KBDDEV_FRONTEND | 1 + baseconfig/x86/CONFIG_INT3406_THERMAL | 1 + baseconfig/x86/CONFIG_INT340X_THERMAL | 1 + baseconfig/x86/CONFIG_INTEL_BXT_PMIC_THERMAL | 1 + baseconfig/x86/CONFIG_INTEL_HID_EVENT | 1 + baseconfig/x86/CONFIG_INTEL_IDLE | 1 + baseconfig/x86/CONFIG_INTEL_IDMA64 | 1 + baseconfig/x86/CONFIG_INTEL_IOATDMA | 1 + baseconfig/x86/CONFIG_INTEL_IOMMU | 1 + baseconfig/x86/CONFIG_INTEL_IOMMU_DEFAULT_ON | 1 + baseconfig/x86/CONFIG_INTEL_IOMMU_FLOPPY_WA | 1 + baseconfig/x86/CONFIG_INTEL_IOMMU_SVM | 1 + baseconfig/x86/CONFIG_INTEL_IPS | 1 + baseconfig/x86/CONFIG_INTEL_MEI | 1 + baseconfig/x86/CONFIG_INTEL_MEI_ME | 1 + baseconfig/x86/CONFIG_INTEL_MEI_TXE | 1 + baseconfig/x86/CONFIG_INTEL_MEI_WDT | 1 + baseconfig/x86/CONFIG_INTEL_OAKTRAIL | 1 + baseconfig/x86/CONFIG_INTEL_PCH_THERMAL | 1 + baseconfig/x86/CONFIG_INTEL_PMC_CORE | 1 + baseconfig/x86/CONFIG_INTEL_PMC_IPC | 1 + baseconfig/x86/CONFIG_INTEL_POWERCLAMP | 1 + baseconfig/x86/CONFIG_INTEL_PUNIT_IPC | 1 + baseconfig/x86/CONFIG_INTEL_RAPL | 1 + baseconfig/x86/CONFIG_INTEL_RDT_A | 1 + baseconfig/x86/CONFIG_INTEL_RST | 1 + baseconfig/x86/CONFIG_INTEL_SCU_IPC | 1 + baseconfig/x86/CONFIG_INTEL_SMARTCONNECT | 1 + baseconfig/x86/CONFIG_INTEL_SOC_DTS_THERMAL | 1 + baseconfig/x86/CONFIG_INTEL_SOC_PMIC | 1 + baseconfig/x86/CONFIG_INTEL_VBTN | 1 + baseconfig/x86/CONFIG_IOMMU_STRESS | 1 + baseconfig/x86/CONFIG_IOSF_MBI | 1 + baseconfig/x86/CONFIG_IOSF_MBI_DEBUG | 1 + baseconfig/x86/CONFIG_IPW2100 | 1 + baseconfig/x86/CONFIG_IPW2100_MONITOR | 1 + baseconfig/x86/CONFIG_IPW2200 | 1 + baseconfig/x86/CONFIG_IPW2200_MONITOR | 1 + baseconfig/x86/CONFIG_IPW2200_PROMISCUOUS | 1 + baseconfig/x86/CONFIG_IPW2200_QOS | 1 + baseconfig/x86/CONFIG_IPW2200_RADIOTAP | 1 + baseconfig/x86/CONFIG_IRQ_DOMAIN_DEBUG | 1 + baseconfig/x86/CONFIG_ISCSI_IBFT | 1 + baseconfig/x86/CONFIG_ISCSI_IBFT_FIND | 1 + baseconfig/x86/CONFIG_KEXEC_VERIFY_SIG | 1 + baseconfig/x86/CONFIG_KEYBOARD_GPIO | 1 + baseconfig/x86/CONFIG_KVM | 1 + baseconfig/x86/CONFIG_KVM_AMD | 1 + baseconfig/x86/CONFIG_KVM_DEBUG_FS | 1 + baseconfig/x86/CONFIG_KVM_DEVICE_ASSIGNMENT | 1 + baseconfig/x86/CONFIG_KVM_GUEST | 1 + baseconfig/x86/CONFIG_KVM_INTEL | 1 + baseconfig/x86/CONFIG_KVM_MMU_AUDIT | 1 + baseconfig/x86/CONFIG_LGUEST | 1 + baseconfig/x86/CONFIG_LGUEST_GUEST | 1 + baseconfig/x86/CONFIG_LOCK_DOWN_KERNEL | 1 + baseconfig/x86/CONFIG_LPC_ICH | 1 + baseconfig/x86/CONFIG_LPC_SCH | 1 + baseconfig/x86/CONFIG_MACINTOSH_DRIVERS | 1 + baseconfig/x86/CONFIG_MAXSMP | 1 + baseconfig/x86/CONFIG_MEMTEST | 1 + baseconfig/x86/CONFIG_MFD_88PM800 | 1 + baseconfig/x86/CONFIG_MFD_88PM805 | 1 + baseconfig/x86/CONFIG_MFD_AAT2870_CORE | 1 + baseconfig/x86/CONFIG_MFD_AS3711 | 1 + baseconfig/x86/CONFIG_MFD_AXP20X | 1 + baseconfig/x86/CONFIG_MFD_DA9052_I2C | 1 + baseconfig/x86/CONFIG_MFD_DA9055 | 1 + baseconfig/x86/CONFIG_MFD_INTEL_LPSS_ACPI | 1 + baseconfig/x86/CONFIG_MFD_INTEL_LPSS_PCI | 1 + .../x86/CONFIG_MFD_INTEL_QUARK_I2C_GPIO | 1 + baseconfig/x86/CONFIG_MFD_LP8788 | 1 + baseconfig/x86/CONFIG_MFD_RC5T583 | 1 + baseconfig/x86/CONFIG_MFD_SEC_CORE | 1 + baseconfig/x86/CONFIG_MFD_SMSC | 1 + baseconfig/x86/CONFIG_MFD_TPS6586X | 1 + baseconfig/x86/CONFIG_MICROCODE | 1 + baseconfig/x86/CONFIG_MICROCODE_AMD | 1 + baseconfig/x86/CONFIG_MICROCODE_INTEL | 1 + baseconfig/x86/CONFIG_MMIOTRACE | 1 + baseconfig/x86/CONFIG_MMIOTRACE_TEST | 1 + baseconfig/x86/CONFIG_MODULE_SIG_UEFI | 1 + baseconfig/x86/CONFIG_MOUSE_PS2_VMMOUSE | 1 + baseconfig/x86/CONFIG_MPILIB | 1 + baseconfig/x86/CONFIG_MSI_LAPTOP | 1 + baseconfig/x86/CONFIG_MSI_WMI | 1 + baseconfig/x86/CONFIG_MTD_CK804XROM | 1 + baseconfig/x86/CONFIG_MTD_ESB2ROM | 1 + baseconfig/x86/CONFIG_MTRR | 1 + baseconfig/x86/CONFIG_MTRR_SANITIZER | 1 + .../x86/CONFIG_MTRR_SANITIZER_ENABLE_DEFAULT | 1 + ...CONFIG_MTRR_SANITIZER_SPARE_REG_NR_DEFAULT | 1 + baseconfig/x86/CONFIG_NET_SB1000 | 1 + baseconfig/x86/CONFIG_NET_VENDOR_SOLARFLARE | 1 + baseconfig/x86/CONFIG_NFC_MEI_PHY | 1 + baseconfig/x86/CONFIG_NFC_MICROREAD_MEI | 1 + baseconfig/x86/CONFIG_NFC_PN544_MEI | 1 + baseconfig/x86/CONFIG_NO_BOOTMEM | 1 + baseconfig/x86/CONFIG_NVRAM | 1 + baseconfig/x86/CONFIG_NV_TCO | 1 + baseconfig/x86/CONFIG_PANASONIC_LAPTOP | 1 + baseconfig/x86/CONFIG_PARAVIRT | 1 + baseconfig/x86/CONFIG_PARAVIRT_DEBUG | 1 + baseconfig/x86/CONFIG_PARAVIRT_SPINLOCKS | 1 + .../x86/CONFIG_PARAVIRT_TIME_ACCOUNTING | 1 + baseconfig/x86/CONFIG_PCH_CAN | 1 + baseconfig/x86/CONFIG_PCH_DMA | 1 + baseconfig/x86/CONFIG_PCH_GBE | 1 + baseconfig/x86/CONFIG_PCH_PHUB | 1 + baseconfig/x86/CONFIG_PCI_BIOS | 1 + baseconfig/x86/CONFIG_PCI_CNB20LE_QUIRK | 1 + baseconfig/x86/CONFIG_PCI_HYPERV | 1 + baseconfig/x86/CONFIG_PCI_MMCONFIG | 1 + baseconfig/x86/CONFIG_PERF_EVENTS_AMD_POWER | 1 + .../x86/CONFIG_PERF_EVENTS_INTEL_CSTATE | 1 + baseconfig/x86/CONFIG_PERF_EVENTS_INTEL_RAPL | 1 + .../x86/CONFIG_PERF_EVENTS_INTEL_UNCORE | 1 + baseconfig/x86/CONFIG_PINCTRL | 1 + baseconfig/x86/CONFIG_PINCTRL_AMD | 1 + baseconfig/x86/CONFIG_PINCTRL_BAYTRAIL | 1 + baseconfig/x86/CONFIG_PINCTRL_BROXTON | 1 + baseconfig/x86/CONFIG_PINCTRL_CHERRYVIEW | 1 + baseconfig/x86/CONFIG_PINCTRL_SUNRISEPOINT | 1 + baseconfig/x86/CONFIG_PMIC_ADP5520 | 1 + baseconfig/x86/CONFIG_PMIC_DA903X | 1 + baseconfig/x86/CONFIG_PMIC_OPREGION | 1 + baseconfig/x86/CONFIG_PNP | 1 + baseconfig/x86/CONFIG_PNPACPI | 1 + baseconfig/x86/CONFIG_PNP_DEBUG_MESSAGES | 1 + baseconfig/x86/CONFIG_PROC_VMCORE | 1 + baseconfig/x86/CONFIG_PUNIT_ATOM_DEBUG | 1 + baseconfig/x86/CONFIG_PVPANIC | 1 + baseconfig/x86/CONFIG_PWM_CRC | 1 + baseconfig/x86/CONFIG_PWM_LPSS | 1 + baseconfig/x86/CONFIG_PWM_LPSS_PCI | 1 + baseconfig/x86/CONFIG_PWM_LPSS_PLATFORM | 1 + baseconfig/x86/CONFIG_RANDOMIZE_BASE | 1 + baseconfig/x86/CONFIG_RAPIDIO | 1 + baseconfig/x86/CONFIG_RCU_FANOUT_LEAF | 1 + baseconfig/x86/CONFIG_REGMAP_I2C | 1 + baseconfig/x86/CONFIG_RELOCATABLE | 1 + baseconfig/x86/CONFIG_SAMSUNG_LAPTOP | 1 + baseconfig/x86/CONFIG_SAMSUNG_Q10 | 1 + baseconfig/x86/CONFIG_SBC_FITPC2_WATCHDOG | 1 + baseconfig/x86/CONFIG_SCHED_MC | 1 + baseconfig/x86/CONFIG_SCHED_MC_PRIO | 1 + baseconfig/x86/CONFIG_SCHED_SMT | 1 + baseconfig/x86/CONFIG_SCSI_ADVANSYS | 1 + baseconfig/x86/CONFIG_SENSORS_ABITUGURU | 1 + baseconfig/x86/CONFIG_SENSORS_ABITUGURU3 | 1 + baseconfig/x86/CONFIG_SENSORS_ACPI_POWER | 1 + baseconfig/x86/CONFIG_SENSORS_APPLESMC=m | 1 + baseconfig/x86/CONFIG_SENSORS_ASB100 | 1 + baseconfig/x86/CONFIG_SENSORS_ATK0110 | 1 + baseconfig/x86/CONFIG_SENSORS_CORETEMP | 1 + baseconfig/x86/CONFIG_SENSORS_DELL_SMM | 1 + baseconfig/x86/CONFIG_SENSORS_FAM15H_POWER | 1 + baseconfig/x86/CONFIG_SENSORS_FSCHMD | 1 + baseconfig/x86/CONFIG_SENSORS_I5500 | 1 + baseconfig/x86/CONFIG_SENSORS_I5K_AMB | 1 + baseconfig/x86/CONFIG_SENSORS_K10TEMP | 1 + baseconfig/x86/CONFIG_SENSORS_K8TEMP | 1 + baseconfig/x86/CONFIG_SENSORS_VIA_CPUTEMP | 1 + baseconfig/x86/CONFIG_SFI | 1 + baseconfig/x86/CONFIG_SMSC37B787_WDT | 1 + baseconfig/x86/CONFIG_SND_SOC_AC97_CODEC | 1 + baseconfig/x86/CONFIG_SND_SOC_INTEL_BAYTRAIL | 1 + .../x86/CONFIG_SND_SOC_INTEL_BDW_RT5677_MACH | 1 + .../x86/CONFIG_SND_SOC_INTEL_BROADWELL_MACH | 1 + ...IG_SND_SOC_INTEL_BXT_DA7219_MAX98357A_MACH | 1 + .../x86/CONFIG_SND_SOC_INTEL_BXT_RT298_MACH | 1 + .../CONFIG_SND_SOC_INTEL_BYTCR_RT5640_MACH | 1 + .../CONFIG_SND_SOC_INTEL_BYTCR_RT5651_MACH | 1 + .../CONFIG_SND_SOC_INTEL_BYT_MAX98090_MACH | 1 + .../x86/CONFIG_SND_SOC_INTEL_BYT_RT5640_MACH | 1 + ...FIG_SND_SOC_INTEL_CHT_BSW_MAX98090_TI_MACH | 1 + .../CONFIG_SND_SOC_INTEL_CHT_BSW_RT5645_MACH | 1 + .../CONFIG_SND_SOC_INTEL_CHT_BSW_RT5672_MACH | 1 + .../x86/CONFIG_SND_SOC_INTEL_HASWELL_MACH | 1 + ..._SND_SOC_INTEL_SKL_NAU88L25_MAX98357A_MACH | 1 + ...IG_SND_SOC_INTEL_SKL_NAU88L25_SSM4567_MACH | 1 + .../x86/CONFIG_SND_SOC_INTEL_SKL_RT286_MACH | 1 + baseconfig/x86/CONFIG_SND_SOC_INTEL_SST | 1 + baseconfig/x86/CONFIG_SND_SOC_INTEL_SST_ACPI | 1 + baseconfig/x86/CONFIG_SND_SOC_TAS571X | 1 + baseconfig/x86/CONFIG_SONYPI_COMPAT | 1 + baseconfig/x86/CONFIG_SONY_LAPTOP | 1 + baseconfig/x86/CONFIG_SP5100_TCO | 1 + baseconfig/x86/CONFIG_SPI | 1 + baseconfig/x86/CONFIG_SPI_CADENCE | 1 + baseconfig/x86/CONFIG_SPI_MASTER | 1 + baseconfig/x86/CONFIG_SPI_PXA2XX | 1 + baseconfig/x86/CONFIG_SPI_ROCKCHIP | 1 + baseconfig/x86/CONFIG_SPI_ZYNQMP_GQSPI | 1 + baseconfig/x86/CONFIG_SURFACE3_WMI | 1 + baseconfig/x86/CONFIG_SURFACE_3_BUTTON | 1 + baseconfig/x86/CONFIG_SURFACE_PRO3_BUTTON | 1 + baseconfig/x86/CONFIG_TCG_CRB | 1 + baseconfig/x86/CONFIG_TCG_INFINEON | 1 + baseconfig/x86/CONFIG_THERMAL_GOV_BANG_BANG | 1 + baseconfig/x86/CONFIG_THERMAL_GOV_USER_SPACE | 1 + baseconfig/x86/CONFIG_THERMAL_WRITABLE_TRIPS | 1 + baseconfig/x86/CONFIG_THINKPAD_ACPI | 1 + .../x86/CONFIG_THINKPAD_ACPI_ALSA_SUPPORT | 1 + baseconfig/x86/CONFIG_THINKPAD_ACPI_DEBUG | 1 + .../x86/CONFIG_THINKPAD_ACPI_DEBUGFACILITIES | 1 + .../x86/CONFIG_THINKPAD_ACPI_HOTKEY_POLL | 1 + .../x86/CONFIG_THINKPAD_ACPI_UNSAFE_LEDS | 1 + baseconfig/x86/CONFIG_THINKPAD_ACPI_VIDEO | 1 + baseconfig/x86/CONFIG_TOPSTAR_LAPTOP | 1 + baseconfig/x86/CONFIG_TOSHIBA_BT_RFKILL | 1 + baseconfig/x86/CONFIG_TOSHIBA_HAPS | 1 + baseconfig/x86/CONFIG_TOSHIBA_WMI | 1 + baseconfig/x86/CONFIG_TOUCHSCREEN_CY8CTMG110 | 1 + baseconfig/x86/CONFIG_TOUCHSCREEN_GOODIX | 1 + baseconfig/x86/CONFIG_TOUCHSCREEN_INTEL_MID | 1 + .../x86/CONFIG_TOUCHSCREEN_SURFACE3_SPI | 1 + baseconfig/x86/CONFIG_UID16 | 1 + baseconfig/x86/CONFIG_VFIO_PCI_VGA | 1 + baseconfig/x86/CONFIG_VGA_SWITCHEROO | 1 + baseconfig/x86/CONFIG_VIA_WDT | 1 + baseconfig/x86/CONFIG_VIDEO_VIA_CAMERA | 1 + baseconfig/x86/CONFIG_VMD | 1 + baseconfig/x86/CONFIG_VMWARE_VMCI | 1 + baseconfig/x86/CONFIG_VMWARE_VMCI_VSOCKETS | 1 + baseconfig/x86/CONFIG_VMXNET3 | 1 + baseconfig/x86/CONFIG_X86_ACPI_CPUFREQ | 1 + baseconfig/x86/CONFIG_X86_ACPI_CPUFREQ_CPB | 1 + .../x86/CONFIG_X86_AMD_FREQ_SENSITIVITY | 1 + baseconfig/x86/CONFIG_X86_AMD_PLATFORM_DEVICE | 1 + .../x86/CONFIG_X86_CHECK_BIOS_CORRUPTION | 1 + baseconfig/x86/CONFIG_X86_CPUID | 1 + baseconfig/x86/CONFIG_X86_DEBUG_FPU | 1 + baseconfig/x86/CONFIG_X86_DECODER_SELFTEST | 1 + baseconfig/x86/CONFIG_X86_EXTENDED_PLATFORM | 1 + baseconfig/x86/CONFIG_X86_GENERIC | 1 + baseconfig/x86/CONFIG_X86_GOLDFISH | 1 + baseconfig/x86/CONFIG_X86_INTEL_LPSS | 1 + baseconfig/x86/CONFIG_X86_INTEL_MID | 1 + baseconfig/x86/CONFIG_X86_INTEL_MPX | 1 + baseconfig/x86/CONFIG_X86_INTEL_PSTATE | 1 + baseconfig/x86/CONFIG_X86_LEGACY_VM86 | 1 + baseconfig/x86/CONFIG_X86_MCE | 1 + baseconfig/x86/CONFIG_X86_MCE_AMD | 1 + baseconfig/x86/CONFIG_X86_MCE_INJECT | 1 + baseconfig/x86/CONFIG_X86_MCE_INTEL | 1 + baseconfig/x86/CONFIG_X86_MPPARSE | 1 + baseconfig/x86/CONFIG_X86_MSR | 1 + baseconfig/x86/CONFIG_X86_P4_CLOCKMOD | 1 + baseconfig/x86/CONFIG_X86_PAT | 1 + baseconfig/x86/CONFIG_X86_PCC_CPUFREQ | 1 + baseconfig/x86/CONFIG_X86_PKG_TEMP_THERMAL | 1 + baseconfig/x86/CONFIG_X86_PLATFORM_DEVICES | 1 + baseconfig/x86/CONFIG_X86_PMEM_LEGACY | 1 + baseconfig/x86/CONFIG_X86_PM_TIMER | 1 + baseconfig/x86/CONFIG_X86_POWERNOW_K8 | 1 + .../CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS | 1 + baseconfig/x86/CONFIG_X86_RESERVE_LOW | 1 + baseconfig/x86/CONFIG_X86_SPEEDSTEP_CENTRINO | 1 + baseconfig/x86/CONFIG_X86_SYSFB | 1 + baseconfig/x86/CONFIG_X86_VERBOSE_BOOTUP | 1 + baseconfig/x86/CONFIG_XEN | 1 + baseconfig/x86/CONFIG_XENFS | 1 + baseconfig/x86/CONFIG_XEN_ACPI_PROCESSOR | 1 + baseconfig/x86/CONFIG_XEN_BACKEND | 1 + baseconfig/x86/CONFIG_XEN_BALLOON | 1 + baseconfig/x86/CONFIG_XEN_BLKDEV_BACKEND | 1 + baseconfig/x86/CONFIG_XEN_BLKDEV_FRONTEND | 1 + baseconfig/x86/CONFIG_XEN_COMPAT_XENFS | 1 + baseconfig/x86/CONFIG_XEN_DEBUG | 1 + baseconfig/x86/CONFIG_XEN_DEBUG_FS | 1 + baseconfig/x86/CONFIG_XEN_FBDEV_FRONTEND | 1 + baseconfig/x86/CONFIG_XEN_GNTDEV | 1 + baseconfig/x86/CONFIG_XEN_GRANT_DEV_ALLOC | 1 + baseconfig/x86/CONFIG_XEN_NETDEV_BACKEND | 1 + baseconfig/x86/CONFIG_XEN_NETDEV_FRONTEND | 1 + baseconfig/x86/CONFIG_XEN_PCIDEV_BACKEND | 1 + baseconfig/x86/CONFIG_XEN_PCIDEV_FRONTEND | 1 + baseconfig/x86/CONFIG_XEN_SAVE_RESTORE | 1 + baseconfig/x86/CONFIG_XEN_SCRUB_PAGES | 1 + baseconfig/x86/CONFIG_XEN_SCSI_BACKEND | 1 + baseconfig/x86/CONFIG_XEN_SCSI_FRONTEND | 1 + baseconfig/x86/CONFIG_XEN_SELFBALLOONING | 1 + baseconfig/x86/CONFIG_XEN_SYMS | 1 + baseconfig/x86/CONFIG_XEN_WDT | 1 + baseconfig/x86/CONFIG_XO15_EBOOK | 1 + baseconfig/x86/CONFIG_XPOWER_PMIC_OPREGION | 1 + baseconfig/x86/CONFIG_XZ_DEC_X86 | 1 + baseconfig/x86/i686/CONFIG_4KSTACKS | 1 + baseconfig/x86/i686/CONFIG_64BIT | 1 + baseconfig/x86/i686/CONFIG_ALIX | 1 + baseconfig/x86/i686/CONFIG_APM | 1 + baseconfig/x86/i686/CONFIG_APM_ALLOW_INTS | 1 + baseconfig/x86/i686/CONFIG_APM_CPU_IDLE | 1 + baseconfig/x86/i686/CONFIG_APM_DISPLAY_BLANK | 1 + baseconfig/x86/i686/CONFIG_APM_DO_ENABLE | 1 + .../x86/i686/CONFIG_APM_IGNORE_USER_SUSPEND | 1 + baseconfig/x86/i686/CONFIG_BACKLIGHT_OT200 | 1 + baseconfig/x86/i686/CONFIG_BACKLIGHT_PWM | 1 + baseconfig/x86/i686/CONFIG_BATTERY_OLPC | 1 + baseconfig/x86/i686/CONFIG_COMMON_CLK_SI570 | 1 + baseconfig/x86/i686/CONFIG_CRYPTO_AES_586 | 1 + baseconfig/x86/i686/CONFIG_CRYPTO_CRYPTD | 1 + baseconfig/x86/i686/CONFIG_CRYPTO_DEV_GEODE | 1 + baseconfig/x86/i686/CONFIG_CRYPTO_LRW | 1 + baseconfig/x86/i686/CONFIG_CRYPTO_TWOFISH_586 | 1 + .../x86/i686/CONFIG_CS5535_CLOCK_EVENT_SRC | 1 + baseconfig/x86/i686/CONFIG_CS5535_MFGPT | 1 + baseconfig/x86/i686/CONFIG_DRM_PANEL | 1 + .../i686/CONFIG_DRM_PANEL_SHARP_LQ101R1SX01 | 1 + .../i686/CONFIG_DRM_PANEL_SHARP_LS043T1LE01 | 1 + baseconfig/x86/i686/CONFIG_DW_DMAC_CORE | 1 + baseconfig/x86/i686/CONFIG_DW_DMAC_PCI | 1 + baseconfig/x86/i686/CONFIG_EDAC_SBRIDGE | 1 + baseconfig/x86/i686/CONFIG_FB_GEODE | 1 + baseconfig/x86/i686/CONFIG_FB_GEODE_GX | 1 + baseconfig/x86/i686/CONFIG_FB_GEODE_GX1 | 1 + baseconfig/x86/i686/CONFIG_FB_GEODE_LX | 1 + baseconfig/x86/i686/CONFIG_FB_MODE_HELPERS | 1 + baseconfig/x86/i686/CONFIG_FB_OLPC_DCON | 1 + baseconfig/x86/i686/CONFIG_FB_SSD1307 | 1 + baseconfig/x86/i686/CONFIG_GENERIC_PHY | 1 + baseconfig/x86/i686/CONFIG_GEODE_WDT | 1 + baseconfig/x86/i686/CONFIG_GEOS | 1 + baseconfig/x86/i686/CONFIG_GPIO_74XX_MMIO | 1 + baseconfig/x86/i686/CONFIG_GPIO_CS5535 | 1 + baseconfig/x86/i686/CONFIG_GPIO_SCH | 1 + baseconfig/x86/i686/CONFIG_GPIO_SODAVILLE | 1 + baseconfig/x86/i686/CONFIG_HIGHMEM | 1 + baseconfig/x86/i686/CONFIG_HIGHMEM4G | 1 + baseconfig/x86/i686/CONFIG_HIGHMEM64G | 1 + baseconfig/x86/i686/CONFIG_HIGHPTE | 1 + baseconfig/x86/i686/CONFIG_HOTPLUG_PCI_SHPC | 1 + baseconfig/x86/i686/CONFIG_HSU_DMA | 1 + baseconfig/x86/i686/CONFIG_HW_RANDOM_GEODE | 1 + baseconfig/x86/i686/CONFIG_I2C_ALI1535 | 1 + baseconfig/x86/i686/CONFIG_I2C_ALI1563 | 1 + baseconfig/x86/i686/CONFIG_I2C_ALI15X3 | 1 + baseconfig/x86/i686/CONFIG_I2C_MUX | 1 + baseconfig/x86/i686/CONFIG_I2C_PXA | 1 + baseconfig/x86/i686/CONFIG_I2C_SIS5595 | 1 + baseconfig/x86/i686/CONFIG_I2C_SIS630 | 1 + baseconfig/x86/i686/CONFIG_I2O | 1 + baseconfig/x86/i686/CONFIG_IB700_WDT | 1 + baseconfig/x86/i686/CONFIG_INPUT_GP2A | 1 + .../x86/i686/CONFIG_INPUT_GPIO_TILT_POLLED | 1 + baseconfig/x86/i686/CONFIG_INPUT_MATRIXKMAP | 1 + baseconfig/x86/i686/CONFIG_INPUT_PWM_BEEPER | 1 + baseconfig/x86/i686/CONFIG_INTEL_TXT | 1 + baseconfig/x86/i686/CONFIG_KEXEC_JUMP | 1 + baseconfig/x86/i686/CONFIG_KEYBOARD_BCM | 1 + baseconfig/x86/i686/CONFIG_LBDAF | 1 + baseconfig/x86/i686/CONFIG_LEDS_INTEL_SS4200 | 1 + baseconfig/x86/i686/CONFIG_M486 | 1 + baseconfig/x86/i686/CONFIG_M586 | 1 + baseconfig/x86/i686/CONFIG_M586MMX | 1 + baseconfig/x86/i686/CONFIG_M586TSC | 1 + baseconfig/x86/i686/CONFIG_M686 | 1 + baseconfig/x86/i686/CONFIG_MATH_EMULATION | 1 + baseconfig/x86/i686/CONFIG_MCRUSOE | 1 + baseconfig/x86/i686/CONFIG_MCYRIXIII | 1 + baseconfig/x86/i686/CONFIG_MDIO_BUS_MUX_GPIO | 1 + .../x86/i686/CONFIG_MDIO_BUS_MUX_MMIOREG | 1 + baseconfig/x86/i686/CONFIG_MFD_CS5535 | 1 + baseconfig/x86/i686/CONFIG_MK6 | 1 + baseconfig/x86/i686/CONFIG_MK7 | 1 + baseconfig/x86/i686/CONFIG_MK8 | 1 + baseconfig/x86/i686/CONFIG_MLX5_INFINIBAND | 1 + baseconfig/x86/i686/CONFIG_MMC_SDHCI_OF | 1 + baseconfig/x86/i686/CONFIG_MOUSE_PS2_OLPC | 1 + baseconfig/x86/i686/CONFIG_MPENTIUM4 | 1 + baseconfig/x86/i686/CONFIG_MPENTIUMII | 1 + baseconfig/x86/i686/CONFIG_MPENTIUMIII | 1 + baseconfig/x86/i686/CONFIG_MPENTIUMM | 1 + baseconfig/x86/i686/CONFIG_MTD_NAND_CAFE | 1 + baseconfig/x86/i686/CONFIG_MTD_OF_PARTS | 1 + baseconfig/x86/i686/CONFIG_MTD_PHYSMAP_OF | 1 + baseconfig/x86/i686/CONFIG_MVIAC3_2 | 1 + baseconfig/x86/i686/CONFIG_MWINCHIP3D | 1 + baseconfig/x86/i686/CONFIG_MWINCHIPC6 | 1 + baseconfig/x86/i686/CONFIG_NET5501 | 1 + baseconfig/x86/i686/CONFIG_NOHIGHMEM | 1 + baseconfig/x86/i686/CONFIG_NR_CPUS | 1 + baseconfig/x86/i686/CONFIG_NSC_GPIO | 1 + baseconfig/x86/i686/CONFIG_NUMA | 1 + baseconfig/x86/i686/CONFIG_OF | 1 + baseconfig/x86/i686/CONFIG_OF_OVERLAY | 1 + baseconfig/x86/i686/CONFIG_OF_UNITTEST | 1 + baseconfig/x86/i686/CONFIG_OLPC | 1 + baseconfig/x86/i686/CONFIG_OLPC_XO1 | 1 + baseconfig/x86/i686/CONFIG_OLPC_XO15_SCI | 1 + baseconfig/x86/i686/CONFIG_OLPC_XO1_PM | 1 + baseconfig/x86/i686/CONFIG_OLPC_XO1_RTC | 1 + baseconfig/x86/i686/CONFIG_OLPC_XO1_SCI | 1 + baseconfig/x86/i686/CONFIG_PC8736x_GPIO | 1 + baseconfig/x86/i686/CONFIG_PCI_DIRECT | 1 + baseconfig/x86/i686/CONFIG_PCI_GOANY | 1 + baseconfig/x86/i686/CONFIG_PCI_GOBIOS | 1 + baseconfig/x86/i686/CONFIG_PCI_GODIRECT | 1 + baseconfig/x86/i686/CONFIG_PCI_GOMMCONFIG | 1 + baseconfig/x86/i686/CONFIG_PHYSICAL_ALIGN | 1 + baseconfig/x86/i686/CONFIG_PHYSICAL_START | 1 + baseconfig/x86/i686/CONFIG_PINCONF | 1 + baseconfig/x86/i686/CONFIG_PINCTRL_BCM281XX | 1 + baseconfig/x86/i686/CONFIG_PINCTRL_SINGLE | 1 + baseconfig/x86/i686/CONFIG_PINMUX | 1 + baseconfig/x86/i686/CONFIG_POWER_RESET_GPIO | 1 + .../x86/i686/CONFIG_POWER_RESET_GPIO_RESTART | 1 + .../x86/i686/CONFIG_PROVIDE_OHCI1394_DMA_INIT | 1 + baseconfig/x86/i686/CONFIG_RCU_FANOUT | 1 + baseconfig/x86/i686/CONFIG_REGMAP_I2C | 1 + baseconfig/x86/i686/CONFIG_SCx200 | 1 + baseconfig/x86/i686/CONFIG_SCx200_ACB | 1 + baseconfig/x86/i686/CONFIG_SERIAL_8250_MID | 1 + .../i686/CONFIG_SERIAL_GRLIB_GAISLER_APBUART | 1 + baseconfig/x86/i686/CONFIG_SERIAL_OF_PLATFORM | 1 + baseconfig/x86/i686/CONFIG_SND_SOC_SSM4567 | 1 + baseconfig/x86/i686/CONFIG_SND_SOC_TS3A227E | 1 + baseconfig/x86/i686/CONFIG_SONYPI | 1 + baseconfig/x86/i686/CONFIG_SONYPI_COMPAT | 1 + baseconfig/x86/i686/CONFIG_SPARSE_IRQ | 1 + baseconfig/x86/i686/CONFIG_STA2X11 | 1 + baseconfig/x86/i686/CONFIG_SYNC_FILE | 1 + baseconfig/x86/i686/CONFIG_TC1100_WMI | 1 + baseconfig/x86/i686/CONFIG_TOSHIBA | 1 + .../x86/i686/CONFIG_TOUCHSCREEN_AUO_PIXCIR | 1 + .../x86/i686/CONFIG_TRANSPARENT_HUGEPAGE | 1 + baseconfig/x86/i686/CONFIG_VIDEO_CAFE_CCIC | 1 + baseconfig/x86/i686/CONFIG_X86_32_IRIS | 1 + .../x86/i686/CONFIG_X86_32_NON_STANDARD | 1 + baseconfig/x86/i686/CONFIG_X86_ANCIENT_MCE | 1 + baseconfig/x86/i686/CONFIG_X86_BIGSMP | 1 + .../x86/i686/CONFIG_X86_CPUFREQ_NFORCE2 | 1 + baseconfig/x86/i686/CONFIG_X86_E_POWERSAVER | 1 + baseconfig/x86/i686/CONFIG_X86_GENERIC | 1 + baseconfig/x86/i686/CONFIG_X86_GOLDFISH | 1 + baseconfig/x86/i686/CONFIG_X86_GX_SUSPMOD | 1 + baseconfig/x86/i686/CONFIG_X86_INTEL_MID | 1 + baseconfig/x86/i686/CONFIG_X86_INTEL_QUARK | 1 + baseconfig/x86/i686/CONFIG_X86_LONGHAUL | 1 + baseconfig/x86/i686/CONFIG_X86_LONGRUN | 1 + baseconfig/x86/i686/CONFIG_X86_POWERNOW_K6 | 1 + baseconfig/x86/i686/CONFIG_X86_POWERNOW_K7 | 1 + baseconfig/x86/i686/CONFIG_X86_PPRO_FENCE | 1 + baseconfig/x86/i686/CONFIG_X86_RDC321X | 1 + baseconfig/x86/i686/CONFIG_X86_REBOOTFIXUPS | 1 + baseconfig/x86/i686/CONFIG_X86_SPEEDSTEP_ICH | 1 + baseconfig/x86/i686/CONFIG_X86_SPEEDSTEP_LIB | 1 + .../CONFIG_X86_SPEEDSTEP_RELAXED_CAP_CHECK | 1 + baseconfig/x86/i686/CONFIG_X86_SPEEDSTEP_SMI | 1 + baseconfig/x86/i686/CONFIG_XO1_RFKILL | 1 + baseconfig/x86/i686/CONFIG_ZONE_DMA | 1 + baseconfig/x86/i686PAE/CONFIG_4KSTACKS | 1 + baseconfig/x86/i686PAE/CONFIG_64BIT | 1 + baseconfig/x86/i686PAE/CONFIG_ALIX | 1 + baseconfig/x86/i686PAE/CONFIG_APM | 1 + baseconfig/x86/i686PAE/CONFIG_APM_ALLOW_INTS | 1 + baseconfig/x86/i686PAE/CONFIG_APM_CPU_IDLE | 1 + .../x86/i686PAE/CONFIG_APM_DISPLAY_BLANK | 1 + baseconfig/x86/i686PAE/CONFIG_APM_DO_ENABLE | 1 + .../i686PAE/CONFIG_APM_IGNORE_USER_SUSPEND | 1 + baseconfig/x86/i686PAE/CONFIG_BACKLIGHT_OT200 | 1 + baseconfig/x86/i686PAE/CONFIG_BACKLIGHT_PWM | 1 + baseconfig/x86/i686PAE/CONFIG_BATTERY_OLPC | 1 + .../x86/i686PAE/CONFIG_COMMON_CLK_SI570 | 1 + baseconfig/x86/i686PAE/CONFIG_CRYPTO_AES_586 | 1 + baseconfig/x86/i686PAE/CONFIG_CRYPTO_CRYPTD | 1 + .../x86/i686PAE/CONFIG_CRYPTO_DEV_GEODE | 1 + baseconfig/x86/i686PAE/CONFIG_CRYPTO_LRW | 1 + .../x86/i686PAE/CONFIG_CRYPTO_TWOFISH_586 | 1 + .../x86/i686PAE/CONFIG_CS5535_CLOCK_EVENT_SRC | 1 + baseconfig/x86/i686PAE/CONFIG_CS5535_MFGPT | 1 + baseconfig/x86/i686PAE/CONFIG_DRM_PANEL | 1 + .../CONFIG_DRM_PANEL_SHARP_LQ101R1SX01 | 1 + .../CONFIG_DRM_PANEL_SHARP_LS043T1LE01 | 1 + baseconfig/x86/i686PAE/CONFIG_DW_DMAC_CORE | 1 + baseconfig/x86/i686PAE/CONFIG_DW_DMAC_PCI | 1 + baseconfig/x86/i686PAE/CONFIG_EDAC_SBRIDGE | 1 + baseconfig/x86/i686PAE/CONFIG_FB_GEODE | 1 + baseconfig/x86/i686PAE/CONFIG_FB_GEODE_GX | 1 + baseconfig/x86/i686PAE/CONFIG_FB_GEODE_GX1 | 1 + baseconfig/x86/i686PAE/CONFIG_FB_GEODE_LX | 1 + baseconfig/x86/i686PAE/CONFIG_FB_MODE_HELPERS | 1 + baseconfig/x86/i686PAE/CONFIG_FB_OLPC_DCON | 1 + baseconfig/x86/i686PAE/CONFIG_FB_SSD1307 | 1 + baseconfig/x86/i686PAE/CONFIG_GENERIC_PHY | 1 + baseconfig/x86/i686PAE/CONFIG_GEODE_WDT | 1 + baseconfig/x86/i686PAE/CONFIG_GEOS | 1 + baseconfig/x86/i686PAE/CONFIG_GPIO_74XX_MMIO | 1 + baseconfig/x86/i686PAE/CONFIG_GPIO_SCH | 1 + baseconfig/x86/i686PAE/CONFIG_GPIO_SODAVILLE | 1 + baseconfig/x86/i686PAE/CONFIG_HIGHMEM | 1 + baseconfig/x86/i686PAE/CONFIG_HIGHMEM4G | 1 + baseconfig/x86/i686PAE/CONFIG_HIGHMEM64G | 1 + baseconfig/x86/i686PAE/CONFIG_HIGHPTE | 1 + .../x86/i686PAE/CONFIG_HOTPLUG_PCI_SHPC | 1 + baseconfig/x86/i686PAE/CONFIG_HSU_DMA | 1 + baseconfig/x86/i686PAE/CONFIG_HW_RANDOM_GEODE | 1 + baseconfig/x86/i686PAE/CONFIG_I2C_ALI1535 | 1 + baseconfig/x86/i686PAE/CONFIG_I2C_ALI1563 | 1 + baseconfig/x86/i686PAE/CONFIG_I2C_ALI15X3 | 1 + baseconfig/x86/i686PAE/CONFIG_I2C_MUX | 1 + baseconfig/x86/i686PAE/CONFIG_I2C_PXA | 1 + baseconfig/x86/i686PAE/CONFIG_I2C_SIS5595 | 1 + baseconfig/x86/i686PAE/CONFIG_I2C_SIS630 | 1 + baseconfig/x86/i686PAE/CONFIG_I2O | 1 + baseconfig/x86/i686PAE/CONFIG_IB700_WDT | 1 + baseconfig/x86/i686PAE/CONFIG_INPUT_GP2A | 1 + .../x86/i686PAE/CONFIG_INPUT_GPIO_TILT_POLLED | 1 + .../x86/i686PAE/CONFIG_INPUT_MATRIXKMAP | 1 + .../x86/i686PAE/CONFIG_INPUT_PWM_BEEPER | 1 + baseconfig/x86/i686PAE/CONFIG_INTEL_TXT | 1 + baseconfig/x86/i686PAE/CONFIG_KEXEC_JUMP | 1 + baseconfig/x86/i686PAE/CONFIG_KEYBOARD_BCM | 1 + baseconfig/x86/i686PAE/CONFIG_LBDAF | 1 + .../x86/i686PAE/CONFIG_LEDS_INTEL_SS4200 | 1 + baseconfig/x86/i686PAE/CONFIG_LIBNVDIMM | 1 + baseconfig/x86/i686PAE/CONFIG_M486 | 1 + baseconfig/x86/i686PAE/CONFIG_M586 | 1 + baseconfig/x86/i686PAE/CONFIG_M586MMX | 1 + baseconfig/x86/i686PAE/CONFIG_M586TSC | 1 + baseconfig/x86/i686PAE/CONFIG_M686 | 1 + baseconfig/x86/i686PAE/CONFIG_MATH_EMULATION | 1 + baseconfig/x86/i686PAE/CONFIG_MCRUSOE | 1 + baseconfig/x86/i686PAE/CONFIG_MCYRIXIII | 1 + baseconfig/x86/i686PAE/CONFIG_MFD_CS5535 | 1 + baseconfig/x86/i686PAE/CONFIG_MK6 | 1 + baseconfig/x86/i686PAE/CONFIG_MK7 | 1 + baseconfig/x86/i686PAE/CONFIG_MK8 | 1 + baseconfig/x86/i686PAE/CONFIG_MLX5_INFINIBAND | 1 + baseconfig/x86/i686PAE/CONFIG_MMC_SDHCI_OF | 1 + baseconfig/x86/i686PAE/CONFIG_MOUSE_PS2_OLPC | 1 + baseconfig/x86/i686PAE/CONFIG_MPENTIUM4 | 1 + baseconfig/x86/i686PAE/CONFIG_MPENTIUMII | 1 + baseconfig/x86/i686PAE/CONFIG_MPENTIUMIII | 1 + baseconfig/x86/i686PAE/CONFIG_MPENTIUMM | 1 + baseconfig/x86/i686PAE/CONFIG_MTD_NAND_CAFE | 1 + baseconfig/x86/i686PAE/CONFIG_MTD_OF_PARTS | 1 + baseconfig/x86/i686PAE/CONFIG_MTD_PHYSMAP_OF | 1 + baseconfig/x86/i686PAE/CONFIG_MVIAC3_2 | 1 + baseconfig/x86/i686PAE/CONFIG_MWINCHIP3D | 1 + baseconfig/x86/i686PAE/CONFIG_MWINCHIPC6 | 1 + baseconfig/x86/i686PAE/CONFIG_NET5501 | 1 + baseconfig/x86/i686PAE/CONFIG_NOHIGHMEM | 1 + baseconfig/x86/i686PAE/CONFIG_NR_CPUS | 1 + baseconfig/x86/i686PAE/CONFIG_NSC_GPIO | 1 + baseconfig/x86/i686PAE/CONFIG_NUMA | 1 + baseconfig/x86/i686PAE/CONFIG_OF | 1 + baseconfig/x86/i686PAE/CONFIG_OF_OVERLAY | 1 + baseconfig/x86/i686PAE/CONFIG_OF_UNITTEST | 1 + baseconfig/x86/i686PAE/CONFIG_OLPC | 1 + baseconfig/x86/i686PAE/CONFIG_OLPC_XO1 | 1 + baseconfig/x86/i686PAE/CONFIG_OLPC_XO15_SCI | 1 + baseconfig/x86/i686PAE/CONFIG_OLPC_XO1_PM | 1 + baseconfig/x86/i686PAE/CONFIG_OLPC_XO1_RTC | 1 + baseconfig/x86/i686PAE/CONFIG_OLPC_XO1_SCI | 1 + baseconfig/x86/i686PAE/CONFIG_PC8736x_GPIO | 1 + baseconfig/x86/i686PAE/CONFIG_PCI_DIRECT | 1 + baseconfig/x86/i686PAE/CONFIG_PCI_GOANY | 1 + baseconfig/x86/i686PAE/CONFIG_PCI_GOBIOS | 1 + baseconfig/x86/i686PAE/CONFIG_PCI_GODIRECT | 1 + baseconfig/x86/i686PAE/CONFIG_PCI_GOMMCONFIG | 1 + baseconfig/x86/i686PAE/CONFIG_PHYSICAL_ALIGN | 1 + baseconfig/x86/i686PAE/CONFIG_PHYSICAL_START | 1 + baseconfig/x86/i686PAE/CONFIG_PINCONF | 1 + .../x86/i686PAE/CONFIG_PINCTRL_BCM281XX | 1 + baseconfig/x86/i686PAE/CONFIG_PINCTRL_SINGLE | 1 + baseconfig/x86/i686PAE/CONFIG_PINMUX | 1 + .../x86/i686PAE/CONFIG_POWER_RESET_GPIO | 1 + .../i686PAE/CONFIG_POWER_RESET_GPIO_RESTART | 1 + .../i686PAE/CONFIG_PROVIDE_OHCI1394_DMA_INIT | 1 + baseconfig/x86/i686PAE/CONFIG_RCU_FANOUT | 1 + baseconfig/x86/i686PAE/CONFIG_REGMAP_I2C | 1 + baseconfig/x86/i686PAE/CONFIG_SCx200 | 1 + baseconfig/x86/i686PAE/CONFIG_SCx200_ACB | 1 + baseconfig/x86/i686PAE/CONFIG_SERIAL_8250_MID | 1 + .../CONFIG_SERIAL_GRLIB_GAISLER_APBUART | 1 + .../x86/i686PAE/CONFIG_SERIAL_OF_PLATFORM | 1 + baseconfig/x86/i686PAE/CONFIG_SND_SOC_SSM4567 | 1 + .../x86/i686PAE/CONFIG_SND_SOC_TS3A227E | 1 + baseconfig/x86/i686PAE/CONFIG_SONYPI | 1 + baseconfig/x86/i686PAE/CONFIG_SONYPI_COMPAT | 1 + baseconfig/x86/i686PAE/CONFIG_SPARSE_IRQ | 1 + baseconfig/x86/i686PAE/CONFIG_STA2X11 | 1 + baseconfig/x86/i686PAE/CONFIG_SYNC_FILE | 1 + baseconfig/x86/i686PAE/CONFIG_TC1100_WMI | 1 + baseconfig/x86/i686PAE/CONFIG_TOSHIBA | 1 + .../x86/i686PAE/CONFIG_TOUCHSCREEN_AUO_PIXCIR | 1 + .../x86/i686PAE/CONFIG_TRANSPARENT_HUGEPAGE | 1 + baseconfig/x86/i686PAE/CONFIG_VIDEO_CAFE_CCIC | 1 + baseconfig/x86/i686PAE/CONFIG_X86_32_IRIS | 1 + .../x86/i686PAE/CONFIG_X86_32_NON_STANDARD | 1 + baseconfig/x86/i686PAE/CONFIG_X86_ANCIENT_MCE | 1 + baseconfig/x86/i686PAE/CONFIG_X86_BIGSMP | 1 + .../x86/i686PAE/CONFIG_X86_CPUFREQ_NFORCE2 | 1 + .../x86/i686PAE/CONFIG_X86_E_POWERSAVER | 1 + baseconfig/x86/i686PAE/CONFIG_X86_GENERIC | 1 + baseconfig/x86/i686PAE/CONFIG_X86_GOLDFISH | 1 + baseconfig/x86/i686PAE/CONFIG_X86_GX_SUSPMOD | 1 + baseconfig/x86/i686PAE/CONFIG_X86_INTEL_MID | 1 + baseconfig/x86/i686PAE/CONFIG_X86_INTEL_QUARK | 1 + baseconfig/x86/i686PAE/CONFIG_X86_LONGHAUL | 1 + baseconfig/x86/i686PAE/CONFIG_X86_LONGRUN | 1 + baseconfig/x86/i686PAE/CONFIG_X86_POWERNOW_K6 | 1 + baseconfig/x86/i686PAE/CONFIG_X86_POWERNOW_K7 | 1 + baseconfig/x86/i686PAE/CONFIG_X86_PPRO_FENCE | 1 + baseconfig/x86/i686PAE/CONFIG_X86_RDC321X | 1 + .../x86/i686PAE/CONFIG_X86_REBOOTFIXUPS | 1 + .../x86/i686PAE/CONFIG_X86_SPEEDSTEP_ICH | 1 + .../x86/i686PAE/CONFIG_X86_SPEEDSTEP_LIB | 1 + .../CONFIG_X86_SPEEDSTEP_RELAXED_CAP_CHECK | 1 + .../x86/i686PAE/CONFIG_X86_SPEEDSTEP_SMI | 1 + baseconfig/x86/i686PAE/CONFIG_XEN_DEV_EVTCHN | 1 + .../x86/i686PAE/CONFIG_XEN_SYS_HYPERVISOR | 1 + baseconfig/x86/i686PAE/CONFIG_XO1_RFKILL | 1 + baseconfig/x86/i686PAE/CONFIG_ZONE_DMA | 1 + baseconfig/x86/x86_64/CONFIG_64BIT | 1 + .../x86/x86_64/CONFIG_ACPI_HOTPLUG_MEMORY | 1 + baseconfig/x86/x86_64/CONFIG_ACPI_NFIT | 1 + baseconfig/x86/x86_64/CONFIG_ACPI_NFIT_DEBUG | 1 + baseconfig/x86/x86_64/CONFIG_ACPI_NUMA | 1 + baseconfig/x86/x86_64/CONFIG_AMD_IOMMU | 1 + baseconfig/x86/x86_64/CONFIG_AMD_IOMMU_V2 | 1 + baseconfig/x86/x86_64/CONFIG_AMD_NUMA | 1 + .../x86/x86_64/CONFIG_ARCH_MEMORY_PROBE | 1 + baseconfig/x86/x86_64/CONFIG_BLK_DEV_CMD640 | 1 + baseconfig/x86/x86_64/CONFIG_BLK_DEV_CS5520 | 1 + baseconfig/x86/x86_64/CONFIG_BLK_DEV_CS5530 | 1 + baseconfig/x86/x86_64/CONFIG_BLK_DEV_CS5535 | 1 + baseconfig/x86/x86_64/CONFIG_BLK_DEV_RZ1000 | 1 + baseconfig/x86/x86_64/CONFIG_BLK_DEV_TRIFLEX | 1 + baseconfig/x86/x86_64/CONFIG_BTT | 1 + baseconfig/x86/x86_64/CONFIG_CALGARY_IOMMU | 1 + baseconfig/x86/x86_64/CONFIG_CGROUP_HUGETLB | 1 + .../x86/x86_64/CONFIG_CHECKPOINT_RESTORE | 1 + baseconfig/x86/x86_64/CONFIG_CMA | 1 + baseconfig/x86/x86_64/CONFIG_CMA_AREAS | 1 + baseconfig/x86/x86_64/CONFIG_CMA_DEBUG | 1 + baseconfig/x86/x86_64/CONFIG_CMA_DEBUGFS | 1 + .../x86/x86_64/CONFIG_CONTEXT_TRACKING_FORCE | 1 + .../x86/x86_64/CONFIG_CRYPTO_AES_X86_64 | 1 + .../x86/x86_64/CONFIG_CRYPTO_BLOWFISH_X86_64 | 1 + .../CONFIG_CRYPTO_CAMELLIA_AESNI_AVX2_X86_64 | 1 + .../CONFIG_CRYPTO_CAMELLIA_AESNI_AVX_X86_64 | 1 + .../x86/x86_64/CONFIG_CRYPTO_CAMELLIA_X86_64 | 1 + .../x86/x86_64/CONFIG_CRYPTO_CAST5_AVX_X86_64 | 1 + .../x86/x86_64/CONFIG_CRYPTO_CAST6_AVX_X86_64 | 1 + .../x86/x86_64/CONFIG_CRYPTO_CHACHA20_X86_64 | 1 + .../x86/x86_64/CONFIG_CRYPTO_CRCT10DIF_PCLMUL | 1 + baseconfig/x86/x86_64/CONFIG_CRYPTO_CRYPTD | 1 + .../x86/x86_64/CONFIG_CRYPTO_DES3_EDE_X86_64 | 1 + .../x86_64/CONFIG_CRYPTO_GHASH_CLMUL_NI_INTEL | 1 + baseconfig/x86/x86_64/CONFIG_CRYPTO_LRW | 1 + baseconfig/x86/x86_64/CONFIG_CRYPTO_MCRYPTD | 1 + .../x86/x86_64/CONFIG_CRYPTO_POLY1305_X86_64 | 1 + .../x86/x86_64/CONFIG_CRYPTO_SALSA20_X86_64 | 1 + .../x86_64/CONFIG_CRYPTO_SERPENT_AVX2_X86_64 | 1 + .../x86_64/CONFIG_CRYPTO_SERPENT_AVX_X86_64 | 1 + .../x86_64/CONFIG_CRYPTO_SERPENT_SSE2_X86_64 | 1 + baseconfig/x86/x86_64/CONFIG_CRYPTO_SHA1_MB | 1 + .../x86/x86_64/CONFIG_CRYPTO_SHA1_SSSE3 | 1 + baseconfig/x86/x86_64/CONFIG_CRYPTO_SHA256_MB | 1 + .../x86/x86_64/CONFIG_CRYPTO_SHA256_SSSE3 | 1 + baseconfig/x86/x86_64/CONFIG_CRYPTO_SHA512_MB | 1 + .../x86/x86_64/CONFIG_CRYPTO_SHA512_SSSE3 | 1 + baseconfig/x86/x86_64/CONFIG_CRYPTO_SKEIN | 1 + .../x86_64/CONFIG_CRYPTO_TWOFISH_AVX_X86_64 | 1 + .../x86/x86_64/CONFIG_CRYPTO_TWOFISH_X86_64 | 1 + .../x86_64/CONFIG_CRYPTO_TWOFISH_X86_64_3WAY | 1 + .../x86/x86_64/CONFIG_DEFAULT_MMAP_MIN_ADDR | 1 + .../x86_64/CONFIG_DEFERRED_STRUCT_PAGE_INIT | 1 + baseconfig/x86/x86_64/CONFIG_DEV_DAX | 1 + baseconfig/x86/x86_64/CONFIG_DEV_DAX_PMEM | 1 + baseconfig/x86/x86_64/CONFIG_DIRECT_GBPAGES | 1 + .../x86/x86_64/CONFIG_DISCONTIGMEM_MANUAL | 1 + baseconfig/x86/x86_64/CONFIG_DRM_PANEL | 1 + baseconfig/x86/x86_64/CONFIG_EDAC_AMD64 | 1 + .../x86_64/CONFIG_EDAC_AMD64_ERROR_INJECTION | 1 + baseconfig/x86/x86_64/CONFIG_EDAC_SBRIDGE | 1 + baseconfig/x86/x86_64/CONFIG_EDAC_SKX | 1 + baseconfig/x86/x86_64/CONFIG_EFI_MIXED | 1 + baseconfig/x86/x86_64/CONFIG_FRAME_WARN | 1 + .../x86/x86_64/CONFIG_FUNCTION_GRAPH_TRACER | 1 + baseconfig/x86/x86_64/CONFIG_GART_IOMMU | 1 + baseconfig/x86/x86_64/CONFIG_GENERIC_CPU | 1 + baseconfig/x86/x86_64/CONFIG_GENERIC_PHY | 1 + .../x86/x86_64/CONFIG_HAVE_MEMORY_PRESENT | 1 + .../x86/x86_64/CONFIG_HFI1_DEBUG_SDMA_ORDER | 1 + .../x86/x86_64/CONFIG_HFI1_VERBS_31BIT_PSN | 1 + baseconfig/x86/x86_64/CONFIG_HOTPLUG_PCI_SHPC | 1 + baseconfig/x86/x86_64/CONFIG_HSA_AMD | 1 + baseconfig/x86/x86_64/CONFIG_HSU_DMA | 1 + baseconfig/x86/x86_64/CONFIG_I2C_ALI1535 | 1 + baseconfig/x86/x86_64/CONFIG_I2C_ALI1563 | 1 + baseconfig/x86/x86_64/CONFIG_I2C_ALI15X3 | 1 + baseconfig/x86/x86_64/CONFIG_I2C_MUX | 1 + baseconfig/x86/x86_64/CONFIG_I2C_SIS5595 | 1 + baseconfig/x86/x86_64/CONFIG_I2C_SIS630 | 1 + baseconfig/x86/x86_64/CONFIG_I7300_IDLE | 1 + baseconfig/x86/x86_64/CONFIG_IA32_AOUT | 1 + baseconfig/x86/x86_64/CONFIG_IA32_EMULATION | 1 + baseconfig/x86/x86_64/CONFIG_INFINIBAND_HFI1 | 1 + baseconfig/x86/x86_64/CONFIG_INTEL_ISH_HID | 1 + baseconfig/x86/x86_64/CONFIG_INTEL_MIC_BUS | 1 + baseconfig/x86/x86_64/CONFIG_INTEL_MIC_CARD | 1 + baseconfig/x86/x86_64/CONFIG_INTEL_MIC_HOST | 1 + .../x86/x86_64/CONFIG_INTEL_MIC_X100_DMA | 1 + baseconfig/x86/x86_64/CONFIG_INTEL_SCU_IPC | 1 + baseconfig/x86/x86_64/CONFIG_INTEL_TXT | 1 + baseconfig/x86/x86_64/CONFIG_IOMMU_DEBUG | 1 + baseconfig/x86/x86_64/CONFIG_IRQ_REMAP | 1 + .../x86_64/CONFIG_KEXEC_BZIMAGE_VERIFY_SIG | 1 + baseconfig/x86/x86_64/CONFIG_KEXEC_FILE | 1 + baseconfig/x86/x86_64/CONFIG_KEXEC_JUMP | 1 + baseconfig/x86/x86_64/CONFIG_KEXEC_VERIFY_SIG | 1 + baseconfig/x86/x86_64/CONFIG_LIBNVDIMM | 1 + baseconfig/x86/x86_64/CONFIG_MAILBOX | 1 + baseconfig/x86/x86_64/CONFIG_MEMORY_HOTPLUG | 1 + .../CONFIG_MEMORY_HOTPLUG_DEFAULT_ONLINE | 1 + baseconfig/x86/x86_64/CONFIG_MEMORY_HOTREMOVE | 1 + baseconfig/x86/x86_64/CONFIG_MEM_SOFT_DIRTY | 1 + baseconfig/x86/x86_64/CONFIG_MIC_COSM | 1 + baseconfig/x86/x86_64/CONFIG_MK8 | 1 + baseconfig/x86/x86_64/CONFIG_MLX_PLATFORM | 1 + baseconfig/x86/x86_64/CONFIG_MOVABLE_NODE | 1 + baseconfig/x86/x86_64/CONFIG_MPSC | 1 + baseconfig/x86/x86_64/CONFIG_MTD_BLKDEVS | 1 + baseconfig/x86/x86_64/CONFIG_MTD_BLOCK | 1 + baseconfig/x86/x86_64/CONFIG_ND_BLK | 1 + baseconfig/x86/x86_64/CONFIG_ND_BTT | 1 + baseconfig/x86/x86_64/CONFIG_ND_PFN | 1 + baseconfig/x86/x86_64/CONFIG_NODES_SHIFT | 1 + baseconfig/x86/x86_64/CONFIG_NO_HZ_FULL | 1 + baseconfig/x86/x86_64/CONFIG_NO_HZ_FULL_ALL | 1 + .../x86/x86_64/CONFIG_NO_HZ_FULL_SYSIDLE | 1 + baseconfig/x86/x86_64/CONFIG_NO_HZ_IDLE | 1 + baseconfig/x86/x86_64/CONFIG_NR_CPUS | 1 + baseconfig/x86/x86_64/CONFIG_NR_DEV_DAX | 1 + baseconfig/x86/x86_64/CONFIG_NTB | 1 + baseconfig/x86/x86_64/CONFIG_NTB_AMD | 1 + baseconfig/x86/x86_64/CONFIG_NTB_INTEL | 1 + baseconfig/x86/x86_64/CONFIG_NTB_NETDEV | 1 + baseconfig/x86/x86_64/CONFIG_NTB_PERF | 1 + baseconfig/x86/x86_64/CONFIG_NTB_PINGPONG | 1 + baseconfig/x86/x86_64/CONFIG_NTB_TOOL | 1 + baseconfig/x86/x86_64/CONFIG_NTB_TRANSPORT | 1 + baseconfig/x86/x86_64/CONFIG_NUMA | 1 + baseconfig/x86/x86_64/CONFIG_NUMA_BALANCING | 1 + .../CONFIG_NUMA_BALANCING_DEFAULT_ENABLED | 1 + baseconfig/x86/x86_64/CONFIG_NUMA_EMU | 1 + baseconfig/x86/x86_64/CONFIG_NVDIMM_DAX | 1 + baseconfig/x86/x86_64/CONFIG_NVDIMM_PFN | 1 + baseconfig/x86/x86_64/CONFIG_OF | 1 + baseconfig/x86/x86_64/CONFIG_PC8736x_GPIO | 1 + baseconfig/x86/x86_64/CONFIG_PHYSICAL_ALIGN | 1 + baseconfig/x86/x86_64/CONFIG_PHYSICAL_START | 1 + baseconfig/x86/x86_64/CONFIG_PINCONF | 1 + baseconfig/x86/x86_64/CONFIG_PINMUX | 1 + .../x86_64/CONFIG_PROVIDE_OHCI1394_DMA_INIT | 1 + baseconfig/x86/x86_64/CONFIG_RANDOMIZE_MEMORY | 1 + baseconfig/x86/x86_64/CONFIG_RCU_FANOUT | 1 + baseconfig/x86/x86_64/CONFIG_REGMAP_I2C | 1 + baseconfig/x86/x86_64/CONFIG_SCIF | 1 + baseconfig/x86/x86_64/CONFIG_SCIF_BUS | 1 + baseconfig/x86/x86_64/CONFIG_SDMA_VERBOSITY | 1 + baseconfig/x86/x86_64/CONFIG_SERIAL_8250_MID | 1 + baseconfig/x86/x86_64/CONFIG_SFC | 1 + baseconfig/x86/x86_64/CONFIG_SFC_MCDI_LOGGING | 1 + baseconfig/x86/x86_64/CONFIG_SFC_MCDI_MON | 1 + baseconfig/x86/x86_64/CONFIG_SFC_MTD | 1 + baseconfig/x86/x86_64/CONFIG_SFC_SRIOV | 1 + baseconfig/x86/x86_64/CONFIG_SGI_GRU | 1 + baseconfig/x86/x86_64/CONFIG_SGI_GRU_DEBUG | 1 + baseconfig/x86/x86_64/CONFIG_SGI_IOC4 | 1 + baseconfig/x86/x86_64/CONFIG_SGI_XP | 1 + baseconfig/x86/x86_64/CONFIG_SND_SOC_SSM4567 | 1 + baseconfig/x86/x86_64/CONFIG_SND_SOC_TS3A227E | 1 + baseconfig/x86/x86_64/CONFIG_SPARSEMEM | 1 + .../x86/x86_64/CONFIG_SPARSEMEM_EXTREME | 1 + baseconfig/x86/x86_64/CONFIG_SPARSEMEM_MANUAL | 1 + .../x86/x86_64/CONFIG_SPARSEMEM_VMEMMAP | 1 + baseconfig/x86/x86_64/CONFIG_SPARSE_IRQ | 1 + baseconfig/x86/x86_64/CONFIG_SWIOTLB | 1 + baseconfig/x86/x86_64/CONFIG_SYNC_FILE | 1 + baseconfig/x86/x86_64/CONFIG_THUNDERBOLT | 1 + .../x86/x86_64/CONFIG_TRANSPARENT_HUGEPAGE | 1 + .../CONFIG_TRANSPARENT_HUGEPAGE_MADVISE | 1 + baseconfig/x86/x86_64/CONFIG_UV_MMTIMER | 1 + baseconfig/x86/x86_64/CONFIG_VIDEO_CAFE_CCIC | 1 + baseconfig/x86/x86_64/CONFIG_VMAP_STACK | 1 + baseconfig/x86/x86_64/CONFIG_VOP | 1 + baseconfig/x86/x86_64/CONFIG_VOP_BUS | 1 + baseconfig/x86/x86_64/CONFIG_X86_64_ACPI_NUMA | 1 + .../CONFIG_X86_INTEL_MEMORY_PROTECTION_KEYS | 1 + baseconfig/x86/x86_64/CONFIG_X86_MPPARSE | 1 + baseconfig/x86/x86_64/CONFIG_X86_NUMACHIP | 1 + baseconfig/x86/x86_64/CONFIG_X86_UV | 1 + baseconfig/x86/x86_64/CONFIG_X86_VSMP | 1 + baseconfig/x86/x86_64/CONFIG_X86_X2APIC | 1 + baseconfig/x86/x86_64/CONFIG_X86_X32 | 1 + baseconfig/x86/x86_64/CONFIG_XEN_512GB | 1 + .../x86_64/CONFIG_XEN_BALLOON_MEMORY_HOTPLUG | 1 + baseconfig/x86/x86_64/CONFIG_XEN_DEV_EVTCHN | 1 + baseconfig/x86/x86_64/CONFIG_XEN_MCE_LOG | 1 + baseconfig/x86/x86_64/CONFIG_XEN_PVH | 1 + baseconfig/x86/x86_64/CONFIG_XEN_STUB | 1 + .../x86/x86_64/CONFIG_XEN_SYS_HYPERVISOR | 1 + baseconfig/x86/x86_64/CONFIG_XO15_EBOOK | 1 + baseconfig/x86/x86_64/CONFIG_ZONE_DEVICE | 1 + baseconfig/x86/x86_64/CONFIG_ZONE_DMA | 1 + bcm2837-initial-support.patch | 237 +- bcm283x-VEC.patch | 58 + bcm283x-fixes.patch | 218 + bcm283x-mmc-imp-speed.patch | 139 +- build_configs.sh | 91 + check_configs.awk | 22 + config-arm-generic | 697 -- config-arm64 | 349 - config-armv7 | 627 -- config-armv7-generic | 782 --- config-armv7-lpae | 77 - config-debug | 132 - config-generic | 6069 ----------------- config-i686-PAE | 8 - config-no-extra | 27 - config-nodebug | 132 - config-powerpc64 | 109 - config-powerpc64-generic | 377 - config-powerpc64le | 8 - config-s390x | 298 - config-x86-32-generic | 204 - config-x86-generic | 626 -- config-x86_64-generic | 247 - config_generation | 37 + debugconfig/CONFIG_ACPI_DEBUG | 1 + debugconfig/CONFIG_ARM64_PTDUMP | 1 + debugconfig/CONFIG_ATH_DEBUG | 1 + debugconfig/CONFIG_B43LEGACY_DEBUG | 1 + debugconfig/CONFIG_B43_DEBUG | 1 + debugconfig/CONFIG_CAN_DEBUG_DEVICES | 1 + debugconfig/CONFIG_CARL9170_DEBUGFS | 1 + debugconfig/CONFIG_CEPH_LIB_PRETTYDEBUG | 1 + debugconfig/CONFIG_CPU_NOTIFIER_ERROR_INJECT | 1 + debugconfig/CONFIG_DEBUG_ATOMIC_SLEEP | 1 + debugconfig/CONFIG_DEBUG_BLK_CGROUP | 1 + debugconfig/CONFIG_DEBUG_CREDENTIALS | 1 + debugconfig/CONFIG_DEBUG_FORCE_WEAK_PER_CPU | 1 + debugconfig/CONFIG_DEBUG_KMEMLEAK | 1 + debugconfig/CONFIG_DEBUG_KMEMLEAK_DEFAULT_OFF | 1 + debugconfig/CONFIG_DEBUG_KMEMLEAK_EARLY | 1 + debugconfig/CONFIG_DEBUG_LOCK_ALLOC | 1 + debugconfig/CONFIG_DEBUG_MUTEXES | 1 + debugconfig/CONFIG_DEBUG_NOTIFIERS | 1 + debugconfig/CONFIG_DEBUG_OBJECTS | 1 + debugconfig/CONFIG_DEBUG_OBJECTS_FREE | 1 + .../CONFIG_DEBUG_OBJECTS_PERCPU_COUNTER | 1 + debugconfig/CONFIG_DEBUG_OBJECTS_RCU_HEAD | 1 + debugconfig/CONFIG_DEBUG_OBJECTS_TIMERS | 1 + debugconfig/CONFIG_DEBUG_OBJECTS_WORK | 1 + debugconfig/CONFIG_DEBUG_PAGEALLOC | 1 + debugconfig/CONFIG_DEBUG_PERF_USE_VMALLOC | 1 + debugconfig/CONFIG_DEBUG_PER_CPU_MAPS | 1 + debugconfig/CONFIG_DEBUG_PI_LIST | 1 + debugconfig/CONFIG_DEBUG_RT_MUTEXES | 1 + debugconfig/CONFIG_DEBUG_SG | 1 + debugconfig/CONFIG_DEBUG_SLAB | 1 + debugconfig/CONFIG_DEBUG_SPINLOCK | 1 + debugconfig/CONFIG_DEBUG_STACK_USAGE | 1 + debugconfig/CONFIG_DEBUG_VM | 1 + debugconfig/CONFIG_DEBUG_VM_PGFLAGS | 1 + debugconfig/CONFIG_DETECT_HUNG_TASK | 1 + debugconfig/CONFIG_DMADEVICES_DEBUG | 1 + debugconfig/CONFIG_DMADEVICES_VDEBUG | 1 + debugconfig/CONFIG_DMA_API_DEBUG | 1 + debugconfig/CONFIG_DRBD_FAULT_INJECTION | 1 + debugconfig/CONFIG_EFI_PGT_DUMP | 1 + debugconfig/CONFIG_EXT4_DEBUG | 1 + debugconfig/CONFIG_FAILSLAB | 1 + debugconfig/CONFIG_FAIL_IO_TIMEOUT | 1 + debugconfig/CONFIG_FAIL_MAKE_REQUEST | 1 + debugconfig/CONFIG_FAIL_MMC_REQUEST | 1 + debugconfig/CONFIG_FAIL_PAGE_ALLOC | 1 + debugconfig/CONFIG_FAULT_INJECTION | 1 + debugconfig/CONFIG_FAULT_INJECTION_DEBUG_FS | 1 + .../CONFIG_FAULT_INJECTION_STACKTRACE_FILTER | 1 + debugconfig/CONFIG_IWLWIFI_DEVICE_TRACING | 1 + debugconfig/CONFIG_JBD2_DEBUG | 1 + debugconfig/CONFIG_KDB_DEFAULT_ENABLE | 1 + debugconfig/CONFIG_KDB_KEYBOARD | 1 + debugconfig/CONFIG_KGDB_GDB | 1 + debugconfig/CONFIG_LOCK_STAT | 1 + debugconfig/CONFIG_LOCK_TORTURE_TEST | 1 + debugconfig/CONFIG_MAXSMP | 1 + debugconfig/CONFIG_MMIOTRACE | 1 + debugconfig/CONFIG_MODULE_FORCE_UNLOAD | 1 + debugconfig/CONFIG_NFSD_FAULT_INJECTION | 1 + debugconfig/CONFIG_PM_ADVANCED_DEBUG | 1 + debugconfig/CONFIG_PM_TEST_SUSPEND | 1 + debugconfig/CONFIG_PROVE_LOCKING | 1 + debugconfig/CONFIG_PROVE_RCU | 1 + debugconfig/CONFIG_QUOTA_DEBUG | 1 + debugconfig/CONFIG_SND_DEBUG | 1 + debugconfig/CONFIG_SND_PCM_XRUN_DEBUG | 1 + debugconfig/CONFIG_SND_VERBOSE_PRINTK | 1 + debugconfig/CONFIG_TEST_LIST_SORT | 1 + debugconfig/CONFIG_WQ_WATCHDOG | 1 + ...NFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK | 1 + debugconfig/CONFIG_X86_PTDUMP | 1 + debugconfig/arm/CONFIG_LOCK_STAT | 1 + debugconfig/arm/armv7/CONFIG_DMADEVICES_DEBUG | 1 + debugconfig/x86/CONFIG_DEBUG_PER_CPU_MAPS | 1 + drm-i915-hush-check-crtc-state.patch | 2 +- ...l_Backport_watermark_fixes_for_4.8.y.patch | 1247 ---- efi-Add-EFI_SECURE_BOOT-bit.patch | 43 - ...-image-security-database-GUID-defini.patch | 31 - ...ure-boot-if-shim-is-in-insecure-mode.patch | 58 - efi-lockdown.patch | 2159 ++++++ filter-aarch64.sh | 2 +- filter-armv7hl.sh | 2 +- filter-i686.sh | 2 +- filter-modules.sh | 2 +- filter-ppc64.sh | 2 +- filter-ppc64le.sh | 2 +- filter-ppc64p7.sh | 2 +- geekbox-v4-device-tree-support.patch | 4 +- generate_all_configs.sh | 6 + generate_debug_configs.sh | 8 + ...unting-regression-on-ctrl_dumpfamily.patch | 55 + ...able-in-a-signed-modules-environment.patch | 39 - imx6sx-Add-UDOO-Neo-support.patch | 619 -- config-local => kernel-local | 0 kernel.spec | 246 +- ...-runtime-if-the-kernel-enforces-modu.patch | 44 - ...copy-secure_boot-flag-in-boot-params.patch | 30 - kvm-fix-page-struct-leak-in-handle_vmon.patch | 29 +- ...tig-re-allow-CMA-to-compact-FS-pages.patch | 42 - nouveau-add-maxwell-to-backlight-init.patch | 24 - qxl-reapply-cursor-after-SetCrtc-calls.patch | 439 -- rc-core-fix-repeat-events.patch | 46 - rebase-notes.txt | 20 +- rt2800-warning.patch | 34 - scripts/generate-git-snapshot.sh | 4 +- scripts/rawhide-rc.sh | 6 +- ...validate_disk-prevent-NULL-ptr-deref.patch | 2 +- ...f-operation-on-asocs-with-threads-sl.patch | 66 - security-selinux-overlayfs-support.patch | 931 --- ...ux-allow-context-mounts-on-tmpfs-etc.patch | 8 +- silence-fbcon-logo.patch | 22 +- sources | 6 +- ...-port-access-when-module-security-is.patch | 72 - ...-access-when-module-loading-is-restr.patch | 44 - xgene-Fix-crash-on-DT-systems.patch | 43 + ...et-remove-bogus-forward-declarations.patch | 197 + 9442 files changed, 13313 insertions(+), 18062 deletions(-) delete mode 100644 1-2-media-cxusb-Use-a-dma-capable-buffer-also-for-reading.patch delete mode 100644 2-2-media-dvb-usb-firmware-don-t-do-DMA-on-stack.patch delete mode 100644 ACPI-Limit-access-to-custom_method.patch delete mode 100644 ARM-Drop-fixed-200-Hz-timer-requirement-from-Samsung-platforms.patch delete mode 100644 Add-option-to-automatically-enforce-module-signature.patch delete mode 100644 Add-secure_modules-call.patch delete mode 100644 Add-sysrq-option-to-disable-secure-boot-mode.patch create mode 100644 Armada-trace-build-fix.patch delete mode 100644 HID-microsoft-Add-Surface-4-type-cover-pro-4-JP.patch delete mode 100644 Makefile.config delete mode 100644 Makefile.release delete mode 100644 PCI-Lock-down-BAR-access-when-module-security-is-ena.patch delete mode 100644 Restrict-dev-mem-and-dev-kmem-when-module-loading-is.patch delete mode 100644 acpi-Ignore-acpi_rsdp-kernel-parameter-when-module-l.patch create mode 100644 arm-imx6-hummingboard2.patch delete mode 100644 arm64-ACPI-parse-SPCR-table.patch delete mode 100644 arm64-pcie-quirks.patch delete mode 100644 asus-wmi-Restrict-debugfs-interface-when-module-load.patch create mode 100644 baseconfig/CONFIG_60XX_WDT create mode 100644 baseconfig/CONFIG_6LOWPAN create mode 100644 baseconfig/CONFIG_6LOWPAN_DEBUGFS create mode 100644 baseconfig/CONFIG_6LOWPAN_GHC_EXT_HDR_DEST create mode 100644 baseconfig/CONFIG_6LOWPAN_GHC_EXT_HDR_FRAG create mode 100644 baseconfig/CONFIG_6LOWPAN_GHC_EXT_HDR_HOP create mode 100644 baseconfig/CONFIG_6LOWPAN_GHC_EXT_HDR_ROUTE create mode 100644 baseconfig/CONFIG_6LOWPAN_GHC_ICMPV6 create mode 100644 baseconfig/CONFIG_6LOWPAN_GHC_UDP create mode 100644 baseconfig/CONFIG_6LOWPAN_NHC create mode 100644 baseconfig/CONFIG_6LOWPAN_NHC_DEST create mode 100644 baseconfig/CONFIG_6LOWPAN_NHC_FRAGMENT create mode 100644 baseconfig/CONFIG_6LOWPAN_NHC_HOP create mode 100644 baseconfig/CONFIG_6LOWPAN_NHC_IPV6 create mode 100644 baseconfig/CONFIG_6LOWPAN_NHC_MOBILITY create mode 100644 baseconfig/CONFIG_6LOWPAN_NHC_ROUTING create mode 100644 baseconfig/CONFIG_6LOWPAN_NHC_UDP create mode 100644 baseconfig/CONFIG_6PACK create mode 100644 baseconfig/CONFIG_8139CP create mode 100644 baseconfig/CONFIG_8139TOO create mode 100644 baseconfig/CONFIG_8139TOO_8129 create mode 100644 baseconfig/CONFIG_8139TOO_PIO create mode 100644 baseconfig/CONFIG_8139TOO_TUNE_TWISTER create mode 100644 baseconfig/CONFIG_8139_OLD_RX_RESET create mode 100644 baseconfig/CONFIG_8723AU_AP_MODE create mode 100644 baseconfig/CONFIG_8723AU_BT_COEXIST create mode 100644 baseconfig/CONFIG_9P_FS create mode 100644 baseconfig/CONFIG_9P_FSCACHE create mode 100644 baseconfig/CONFIG_9P_FS_POSIX_ACL create mode 100644 baseconfig/CONFIG_9P_FS_SECURITY create mode 100644 baseconfig/CONFIG_A11Y_BRAILLE_CONSOLE create mode 100644 baseconfig/CONFIG_AB3100_CORE create mode 100644 baseconfig/CONFIG_AB3100_OTP create mode 100644 baseconfig/CONFIG_ABP060MG create mode 100644 baseconfig/CONFIG_ABX500_CORE create mode 100644 baseconfig/CONFIG_ACCESSIBILITY create mode 100644 baseconfig/CONFIG_ACENIC create mode 100644 baseconfig/CONFIG_ACENIC_OMIT_TIGON_I create mode 100644 baseconfig/CONFIG_ACORN_PARTITION create mode 100644 baseconfig/CONFIG_ACPI_ALS create mode 100644 baseconfig/CONFIG_ACPI_DEBUG create mode 100644 baseconfig/CONFIG_ACPI_DEBUGGER create mode 100644 baseconfig/CONFIG_ACPI_NFIT create mode 100644 baseconfig/CONFIG_ACPI_PCI_SLOT create mode 100644 baseconfig/CONFIG_ACQUIRE_WDT create mode 100644 baseconfig/CONFIG_ACT200L_DONGLE create mode 100644 baseconfig/CONFIG_ACTISYS_DONGLE create mode 100644 baseconfig/CONFIG_AD2S1200 create mode 100644 baseconfig/CONFIG_AD2S1210 create mode 100644 baseconfig/CONFIG_AD2S90 create mode 100644 baseconfig/CONFIG_AD5064 create mode 100644 baseconfig/CONFIG_AD525X_DPOT create mode 100644 baseconfig/CONFIG_AD5360 create mode 100644 baseconfig/CONFIG_AD5380 create mode 100644 baseconfig/CONFIG_AD5421 create mode 100644 baseconfig/CONFIG_AD5446 create mode 100644 baseconfig/CONFIG_AD5449 create mode 100644 baseconfig/CONFIG_AD5504 create mode 100644 baseconfig/CONFIG_AD5592R create mode 100644 baseconfig/CONFIG_AD5593R create mode 100644 baseconfig/CONFIG_AD5624R_SPI create mode 100644 baseconfig/CONFIG_AD5686 create mode 100644 baseconfig/CONFIG_AD5755 create mode 100644 baseconfig/CONFIG_AD5761 create mode 100644 baseconfig/CONFIG_AD5764 create mode 100644 baseconfig/CONFIG_AD5791 create mode 100644 baseconfig/CONFIG_AD5933 create mode 100644 baseconfig/CONFIG_AD7150 create mode 100644 baseconfig/CONFIG_AD7152 create mode 100644 baseconfig/CONFIG_AD7192 create mode 100644 baseconfig/CONFIG_AD7266 create mode 100644 baseconfig/CONFIG_AD7280 create mode 100644 baseconfig/CONFIG_AD7291 create mode 100644 baseconfig/CONFIG_AD7298 create mode 100644 baseconfig/CONFIG_AD7303 create mode 100644 baseconfig/CONFIG_AD7476 create mode 100644 baseconfig/CONFIG_AD7606 create mode 100644 baseconfig/CONFIG_AD7746 create mode 100644 baseconfig/CONFIG_AD7766 create mode 100644 baseconfig/CONFIG_AD7780 create mode 100644 baseconfig/CONFIG_AD7791 create mode 100644 baseconfig/CONFIG_AD7793 create mode 100644 baseconfig/CONFIG_AD7816 create mode 100644 baseconfig/CONFIG_AD7887 create mode 100644 baseconfig/CONFIG_AD7923 create mode 100644 baseconfig/CONFIG_AD799X create mode 100644 baseconfig/CONFIG_AD8366 create mode 100644 baseconfig/CONFIG_AD8801 create mode 100644 baseconfig/CONFIG_AD9523 create mode 100644 baseconfig/CONFIG_AD9832 create mode 100644 baseconfig/CONFIG_AD9834 create mode 100644 baseconfig/CONFIG_ADAPTEC_STARFIRE create mode 100644 baseconfig/CONFIG_ADE7753 create mode 100644 baseconfig/CONFIG_ADE7754 create mode 100644 baseconfig/CONFIG_ADE7758 create mode 100644 baseconfig/CONFIG_ADE7759 create mode 100644 baseconfig/CONFIG_ADE7854 create mode 100644 baseconfig/CONFIG_ADF4350 create mode 100644 baseconfig/CONFIG_ADFS_FS create mode 100644 baseconfig/CONFIG_ADIS16060 create mode 100644 baseconfig/CONFIG_ADIS16080 create mode 100644 baseconfig/CONFIG_ADIS16130 create mode 100644 baseconfig/CONFIG_ADIS16136 create mode 100644 baseconfig/CONFIG_ADIS16201 create mode 100644 baseconfig/CONFIG_ADIS16203 create mode 100644 baseconfig/CONFIG_ADIS16209 create mode 100644 baseconfig/CONFIG_ADIS16240 create mode 100644 baseconfig/CONFIG_ADIS16260 create mode 100644 baseconfig/CONFIG_ADIS16400 create mode 100644 baseconfig/CONFIG_ADIS16480 create mode 100644 baseconfig/CONFIG_ADJD_S311 create mode 100644 baseconfig/CONFIG_ADM8211 create mode 100644 baseconfig/CONFIG_ADT7316 create mode 100644 baseconfig/CONFIG_ADVANTECH_WDT create mode 100644 baseconfig/CONFIG_ADXRS450 create mode 100644 baseconfig/CONFIG_AFE4403 create mode 100644 baseconfig/CONFIG_AFE4404 create mode 100644 baseconfig/CONFIG_AFFS_FS create mode 100644 baseconfig/CONFIG_AFS_FS create mode 100644 baseconfig/CONFIG_AF_KCM create mode 100644 baseconfig/CONFIG_AF_RXRPC create mode 100644 baseconfig/CONFIG_AHCI_CEVA create mode 100644 baseconfig/CONFIG_AHCI_QORIQ create mode 100644 baseconfig/CONFIG_AIC79XX_BUILD_FIRMWARE create mode 100644 baseconfig/CONFIG_AIC79XX_CMDS_PER_DEVICE create mode 100644 baseconfig/CONFIG_AIC79XX_DEBUG_ENABLE create mode 100644 baseconfig/CONFIG_AIC79XX_DEBUG_MASK create mode 100644 baseconfig/CONFIG_AIC79XX_REG_PRETTY_PRINT create mode 100644 baseconfig/CONFIG_AIC79XX_RESET_DELAY_MS create mode 100644 baseconfig/CONFIG_AIC7XXX_BUILD_FIRMWARE create mode 100644 baseconfig/CONFIG_AIC7XXX_CMDS_PER_DEVICE create mode 100644 baseconfig/CONFIG_AIC7XXX_DEBUG_ENABLE create mode 100644 baseconfig/CONFIG_AIC7XXX_DEBUG_MASK create mode 100644 baseconfig/CONFIG_AIC7XXX_REG_PRETTY_PRINT create mode 100644 baseconfig/CONFIG_AIC7XXX_RESET_DELAY_MS create mode 100644 baseconfig/CONFIG_AIRO create mode 100644 baseconfig/CONFIG_AIRO_CS create mode 100644 baseconfig/CONFIG_AIX_PARTITION create mode 100644 baseconfig/CONFIG_AK09911 create mode 100644 baseconfig/CONFIG_AK8974 create mode 100644 baseconfig/CONFIG_AK8975 create mode 100644 baseconfig/CONFIG_AL3320A create mode 100644 baseconfig/CONFIG_ALIM1535_WDT create mode 100644 baseconfig/CONFIG_ALIM7101_WDT create mode 100644 baseconfig/CONFIG_ALI_FIR create mode 100644 baseconfig/CONFIG_ALTERA_MBOX create mode 100644 baseconfig/CONFIG_ALTERA_STAPL create mode 100644 baseconfig/CONFIG_ALTERA_TSE create mode 100644 baseconfig/CONFIG_ALX create mode 100644 baseconfig/CONFIG_AM2315 create mode 100644 baseconfig/CONFIG_AMD8111_ETH create mode 100644 baseconfig/CONFIG_AMD_PHY create mode 100644 baseconfig/CONFIG_AMD_XGBE create mode 100644 baseconfig/CONFIG_AMD_XGBE_DCB create mode 100644 baseconfig/CONFIG_AMIGA_PARTITION create mode 100644 baseconfig/CONFIG_ANDROID create mode 100644 baseconfig/CONFIG_APDS9300 create mode 100644 baseconfig/CONFIG_APDS9802ALS create mode 100644 baseconfig/CONFIG_APDS9960 create mode 100644 baseconfig/CONFIG_APM_POWER create mode 100644 baseconfig/CONFIG_APPLE_PROPERTIES create mode 100644 baseconfig/CONFIG_APPLICOM create mode 100644 baseconfig/CONFIG_AQUANTIA_PHY create mode 100644 baseconfig/CONFIG_AR5523 create mode 100644 baseconfig/CONFIG_ARCH_TEGRA_186_SOC create mode 100644 baseconfig/CONFIG_ARCNET create mode 100644 baseconfig/CONFIG_ARM64_PTDUMP create mode 100644 baseconfig/CONFIG_ARM_SCPI_PROTOCOL create mode 100644 baseconfig/CONFIG_AS3935 create mode 100644 baseconfig/CONFIG_ASYNC_RAID6_TEST create mode 100644 baseconfig/CONFIG_ASYNC_TX_DMA create mode 100644 baseconfig/CONFIG_AT76C50X_USB create mode 100644 baseconfig/CONFIG_AT803X_PHY create mode 100644 baseconfig/CONFIG_ATA create mode 100644 baseconfig/CONFIG_ATALK create mode 100644 baseconfig/CONFIG_ATARI_PARTITION create mode 100644 baseconfig/CONFIG_ATA_ACPI create mode 100644 baseconfig/CONFIG_ATA_BMDMA create mode 100644 baseconfig/CONFIG_ATA_GENERIC create mode 100644 baseconfig/CONFIG_ATA_OVER_ETH create mode 100644 baseconfig/CONFIG_ATA_PIIX create mode 100644 baseconfig/CONFIG_ATA_SFF create mode 100644 baseconfig/CONFIG_ATA_VERBOSE_ERROR create mode 100644 baseconfig/CONFIG_ATH10K create mode 100644 baseconfig/CONFIG_ATH10K_AHB create mode 100644 baseconfig/CONFIG_ATH10K_DEBUG create mode 100644 baseconfig/CONFIG_ATH10K_DEBUGFS create mode 100644 baseconfig/CONFIG_ATH10K_PCI create mode 100644 baseconfig/CONFIG_ATH10K_TRACING create mode 100644 baseconfig/CONFIG_ATH5K create mode 100644 baseconfig/CONFIG_ATH5K_DEBUG create mode 100644 baseconfig/CONFIG_ATH5K_TRACER create mode 100644 baseconfig/CONFIG_ATH6KL create mode 100644 baseconfig/CONFIG_ATH6KL_DEBUG create mode 100644 baseconfig/CONFIG_ATH6KL_SDIO create mode 100644 baseconfig/CONFIG_ATH6KL_TRACING create mode 100644 baseconfig/CONFIG_ATH6KL_USB create mode 100644 baseconfig/CONFIG_ATH9K create mode 100644 baseconfig/CONFIG_ATH9K_AHB create mode 100644 baseconfig/CONFIG_ATH9K_BTCOEX_SUPPORT create mode 100644 baseconfig/CONFIG_ATH9K_CHANNEL_CONTEXT create mode 100644 baseconfig/CONFIG_ATH9K_DEBUG create mode 100644 baseconfig/CONFIG_ATH9K_DEBUGFS create mode 100644 baseconfig/CONFIG_ATH9K_DYNACK create mode 100644 baseconfig/CONFIG_ATH9K_HTC create mode 100644 baseconfig/CONFIG_ATH9K_HTC_DEBUGFS create mode 100644 baseconfig/CONFIG_ATH9K_HWRNG create mode 100644 baseconfig/CONFIG_ATH9K_PCI create mode 100644 baseconfig/CONFIG_ATH9K_STATION_STATISTICS create mode 100644 baseconfig/CONFIG_ATH9K_WOW create mode 100644 baseconfig/CONFIG_ATH_COMMON create mode 100644 baseconfig/CONFIG_ATH_DEBUG create mode 100644 baseconfig/CONFIG_ATH_TRACEPOINTS create mode 100644 baseconfig/CONFIG_ATL1 create mode 100644 baseconfig/CONFIG_ATL1C create mode 100644 baseconfig/CONFIG_ATL1E create mode 100644 baseconfig/CONFIG_ATL2 create mode 100644 baseconfig/CONFIG_ATLAS_PH_SENSOR create mode 100644 baseconfig/CONFIG_ATM create mode 100644 baseconfig/CONFIG_ATMEL create mode 100644 baseconfig/CONFIG_ATM_AMBASSADOR create mode 100644 baseconfig/CONFIG_ATM_AMBASSADOR_DEBUG create mode 100644 baseconfig/CONFIG_ATM_BR2684 create mode 100644 baseconfig/CONFIG_ATM_BR2684_IPFILTER create mode 100644 baseconfig/CONFIG_ATM_CLIP create mode 100644 baseconfig/CONFIG_ATM_CLIP_NO_ICMP create mode 100644 baseconfig/CONFIG_ATM_DRIVERS create mode 100644 baseconfig/CONFIG_ATM_DUMMY create mode 100644 baseconfig/CONFIG_ATM_ENI create mode 100644 baseconfig/CONFIG_ATM_ENI_DEBUG create mode 100644 baseconfig/CONFIG_ATM_ENI_TUNE_BURST create mode 100644 baseconfig/CONFIG_ATM_FIRESTREAM create mode 100644 baseconfig/CONFIG_ATM_FORE200E create mode 100644 baseconfig/CONFIG_ATM_FORE200E_DEBUG create mode 100644 baseconfig/CONFIG_ATM_FORE200E_TX_RETRY create mode 100644 baseconfig/CONFIG_ATM_FORE200E_USE_TASKLET create mode 100644 baseconfig/CONFIG_ATM_HE create mode 100644 baseconfig/CONFIG_ATM_HE_USE_SUNI create mode 100644 baseconfig/CONFIG_ATM_HORIZON create mode 100644 baseconfig/CONFIG_ATM_HORIZON_DEBUG create mode 100644 baseconfig/CONFIG_ATM_IA create mode 100644 baseconfig/CONFIG_ATM_IA_DEBUG create mode 100644 baseconfig/CONFIG_ATM_IDT77252 create mode 100644 baseconfig/CONFIG_ATM_IDT77252_DEBUG create mode 100644 baseconfig/CONFIG_ATM_IDT77252_RCV_ALL create mode 100644 baseconfig/CONFIG_ATM_LANAI create mode 100644 baseconfig/CONFIG_ATM_LANE create mode 100644 baseconfig/CONFIG_ATM_MPOA create mode 100644 baseconfig/CONFIG_ATM_NICSTAR create mode 100644 baseconfig/CONFIG_ATM_NICSTAR_USE_IDT77105 create mode 100644 baseconfig/CONFIG_ATM_NICSTAR_USE_SUNI create mode 100644 baseconfig/CONFIG_ATM_SOLOS create mode 100644 baseconfig/CONFIG_ATM_TCP create mode 100644 baseconfig/CONFIG_ATM_ZATM create mode 100644 baseconfig/CONFIG_ATM_ZATM_DEBUG create mode 100644 baseconfig/CONFIG_ATOMIC64_SELFTEST create mode 100644 baseconfig/CONFIG_ATP create mode 100644 baseconfig/CONFIG_AUDIT create mode 100644 baseconfig/CONFIG_AUDITSYSCALL create mode 100644 baseconfig/CONFIG_AUTOFS4_FS create mode 100644 baseconfig/CONFIG_AUXDISPLAY create mode 100644 baseconfig/CONFIG_AVERAGE create mode 100644 baseconfig/CONFIG_AX25 create mode 100644 baseconfig/CONFIG_AX25_DAMA_SLAVE create mode 100644 baseconfig/CONFIG_B43 create mode 100644 baseconfig/CONFIG_B43LEGACY create mode 100644 baseconfig/CONFIG_B43LEGACY_DEBUG create mode 100644 baseconfig/CONFIG_B43LEGACY_DMA create mode 100644 baseconfig/CONFIG_B43LEGACY_DMA_AND_PIO_MODE create mode 100644 baseconfig/CONFIG_B43LEGACY_DMA_MODE create mode 100644 baseconfig/CONFIG_B43LEGACY_PIO create mode 100644 baseconfig/CONFIG_B43LEGACY_PIO_MODE create mode 100644 baseconfig/CONFIG_B43_BCMA create mode 100644 baseconfig/CONFIG_B43_BCMA_PIO create mode 100644 baseconfig/CONFIG_B43_DEBUG create mode 100644 baseconfig/CONFIG_B43_PHY_G create mode 100644 baseconfig/CONFIG_B43_PHY_HT create mode 100644 baseconfig/CONFIG_B43_PHY_LP create mode 100644 baseconfig/CONFIG_B43_PHY_N create mode 100644 baseconfig/CONFIG_B43_SDIO create mode 100644 baseconfig/CONFIG_B44 create mode 100644 baseconfig/CONFIG_B44_PCI create mode 100644 baseconfig/CONFIG_B53 create mode 100644 baseconfig/CONFIG_B53_MDIO_DRIVER create mode 100644 baseconfig/CONFIG_B53_MMAP_DRIVER create mode 100644 baseconfig/CONFIG_B53_SPI_DRIVER create mode 100644 baseconfig/CONFIG_B53_SRAB_DRIVER create mode 100644 baseconfig/CONFIG_BACKLIGHT_ADP8860 create mode 100644 baseconfig/CONFIG_BACKLIGHT_ADP8870 create mode 100644 baseconfig/CONFIG_BACKLIGHT_BD6107 create mode 100644 baseconfig/CONFIG_BACKLIGHT_CLASS_DEVICE create mode 100644 baseconfig/CONFIG_BACKLIGHT_GENERIC create mode 100644 baseconfig/CONFIG_BACKLIGHT_GPIO create mode 100644 baseconfig/CONFIG_BACKLIGHT_LCD_SUPPORT create mode 100644 baseconfig/CONFIG_BACKLIGHT_LM3630 create mode 100644 baseconfig/CONFIG_BACKLIGHT_LM3630A create mode 100644 baseconfig/CONFIG_BACKLIGHT_LM3639 create mode 100644 baseconfig/CONFIG_BACKLIGHT_LP855X create mode 100644 baseconfig/CONFIG_BACKLIGHT_LV5207LP create mode 100644 baseconfig/CONFIG_BACKLIGHT_PM8941_WLED create mode 100644 baseconfig/CONFIG_BACKLIGHT_PWM create mode 100644 baseconfig/CONFIG_BACKLIGHT_SAHARA create mode 100644 baseconfig/CONFIG_BACKLIGHT_WM831X create mode 100644 baseconfig/CONFIG_BACKTRACE_SELF_TEST create mode 100644 baseconfig/CONFIG_BALLOON_COMPACTION create mode 100644 baseconfig/CONFIG_BATMAN_ADV create mode 100644 baseconfig/CONFIG_BATMAN_ADV_BATMAN_V create mode 100644 baseconfig/CONFIG_BATMAN_ADV_BLA create mode 100644 baseconfig/CONFIG_BATMAN_ADV_DAT create mode 100644 baseconfig/CONFIG_BATMAN_ADV_DEBUG create mode 100644 baseconfig/CONFIG_BATMAN_ADV_DEBUGFS create mode 100644 baseconfig/CONFIG_BATMAN_ADV_MCAST create mode 100644 baseconfig/CONFIG_BATMAN_ADV_NC create mode 100644 baseconfig/CONFIG_BATTERY_BQ27XXX create mode 100644 baseconfig/CONFIG_BATTERY_DS2760 create mode 100644 baseconfig/CONFIG_BATTERY_DS2780 create mode 100644 baseconfig/CONFIG_BATTERY_DS2781 create mode 100644 baseconfig/CONFIG_BATTERY_DS2782 create mode 100644 baseconfig/CONFIG_BATTERY_GAUGE_LTC2941 create mode 100644 baseconfig/CONFIG_BATTERY_GOLDFISH create mode 100644 baseconfig/CONFIG_BATTERY_MAX17040 create mode 100644 baseconfig/CONFIG_BATTERY_MAX17042 create mode 100644 baseconfig/CONFIG_BATTERY_SBS create mode 100644 baseconfig/CONFIG_BAYCOM_EPP create mode 100644 baseconfig/CONFIG_BAYCOM_PAR create mode 100644 baseconfig/CONFIG_BAYCOM_SER_FDX create mode 100644 baseconfig/CONFIG_BAYCOM_SER_HDX create mode 100644 baseconfig/CONFIG_BCACHE create mode 100644 baseconfig/CONFIG_BCACHE_CLOSURES_DEBUG create mode 100644 baseconfig/CONFIG_BCACHE_DEBUG create mode 100644 baseconfig/CONFIG_BCM2835_VCHIQ create mode 100644 baseconfig/CONFIG_BCM63XX_PHY create mode 100644 baseconfig/CONFIG_BCM7038_WDT create mode 100644 baseconfig/CONFIG_BCM7XXX_PHY create mode 100644 baseconfig/CONFIG_BCM87XX_PHY create mode 100644 baseconfig/CONFIG_BCMA create mode 100644 baseconfig/CONFIG_BCMA_BLOCKIO create mode 100644 baseconfig/CONFIG_BCMA_DEBUG create mode 100644 baseconfig/CONFIG_BCMA_DRIVER_GMAC_CMN create mode 100644 baseconfig/CONFIG_BCMA_DRIVER_GPIO create mode 100644 baseconfig/CONFIG_BCMA_HOST_PCI create mode 100644 baseconfig/CONFIG_BCMA_HOST_PCI_POSSIBLE create mode 100644 baseconfig/CONFIG_BCMA_HOST_SOC create mode 100644 baseconfig/CONFIG_BCMGENET create mode 100644 baseconfig/CONFIG_BCM_KONA_USB2_PHY create mode 100644 baseconfig/CONFIG_BE2ISCSI create mode 100644 baseconfig/CONFIG_BE2NET create mode 100644 baseconfig/CONFIG_BE2NET_HWMON create mode 100644 baseconfig/CONFIG_BEFS_DEBUG create mode 100644 baseconfig/CONFIG_BEFS_FS create mode 100644 baseconfig/CONFIG_BFS_FS create mode 100644 baseconfig/CONFIG_BH1750 create mode 100644 baseconfig/CONFIG_BH1780 create mode 100644 baseconfig/CONFIG_BIG_KEYS create mode 100644 baseconfig/CONFIG_BINFMT_AOUT create mode 100644 baseconfig/CONFIG_BINFMT_ELF create mode 100644 baseconfig/CONFIG_BINFMT_FLAT create mode 100644 baseconfig/CONFIG_BINFMT_MISC create mode 100644 baseconfig/CONFIG_BINFMT_SCRIPT create mode 100644 baseconfig/CONFIG_BLK_CGROUP create mode 100644 baseconfig/CONFIG_BLK_CMDLINE_PARSER create mode 100644 baseconfig/CONFIG_BLK_CPQ_CISS_DA create mode 100644 baseconfig/CONFIG_BLK_DEV create mode 100644 baseconfig/CONFIG_BLK_DEV_3W_XXXX_RAID create mode 100644 baseconfig/CONFIG_BLK_DEV_BSG create mode 100644 baseconfig/CONFIG_BLK_DEV_BSGLIB create mode 100644 baseconfig/CONFIG_BLK_DEV_CRYPTOLOOP create mode 100644 baseconfig/CONFIG_BLK_DEV_DAC960 create mode 100644 baseconfig/CONFIG_BLK_DEV_DM create mode 100644 baseconfig/CONFIG_BLK_DEV_DRBD create mode 100644 baseconfig/CONFIG_BLK_DEV_FD create mode 100644 baseconfig/CONFIG_BLK_DEV_HD create mode 100644 baseconfig/CONFIG_BLK_DEV_INITRD create mode 100644 baseconfig/CONFIG_BLK_DEV_INTEGRITY create mode 100644 baseconfig/CONFIG_BLK_DEV_IO_TRACE create mode 100644 baseconfig/CONFIG_BLK_DEV_LOOP create mode 100644 baseconfig/CONFIG_BLK_DEV_LOOP_MIN_COUNT create mode 100644 baseconfig/CONFIG_BLK_DEV_MD create mode 100644 baseconfig/CONFIG_BLK_DEV_NBD create mode 100644 baseconfig/CONFIG_BLK_DEV_NULL_BLK create mode 100644 baseconfig/CONFIG_BLK_DEV_NVME create mode 100644 baseconfig/CONFIG_BLK_DEV_NVME_SCSI create mode 100644 baseconfig/CONFIG_BLK_DEV_OSD create mode 100644 baseconfig/CONFIG_BLK_DEV_PCIESSD_MTIP32XX create mode 100644 baseconfig/CONFIG_BLK_DEV_PMEM create mode 100644 baseconfig/CONFIG_BLK_DEV_RAM create mode 100644 baseconfig/CONFIG_BLK_DEV_RAM_COUNT create mode 100644 baseconfig/CONFIG_BLK_DEV_RAM_DAX create mode 100644 baseconfig/CONFIG_BLK_DEV_RAM_SIZE create mode 100644 baseconfig/CONFIG_BLK_DEV_RBD create mode 100644 baseconfig/CONFIG_BLK_DEV_RSXX create mode 100644 baseconfig/CONFIG_BLK_DEV_SD create mode 100644 baseconfig/CONFIG_BLK_DEV_SKD create mode 100644 baseconfig/CONFIG_BLK_DEV_SR create mode 100644 baseconfig/CONFIG_BLK_DEV_SR_VENDOR create mode 100644 baseconfig/CONFIG_BLK_DEV_SX8 create mode 100644 baseconfig/CONFIG_BLK_DEV_THROTTLING create mode 100644 baseconfig/CONFIG_BLK_DEV_UB create mode 100644 baseconfig/CONFIG_BLK_DEV_UMEM create mode 100644 baseconfig/CONFIG_BLK_DEV_ZONED create mode 100644 baseconfig/CONFIG_BLK_WBT create mode 100644 baseconfig/CONFIG_BLK_WBT_MQ create mode 100644 baseconfig/CONFIG_BLK_WBT_SQ create mode 100644 baseconfig/CONFIG_BMA180 create mode 100644 baseconfig/CONFIG_BMA220 create mode 100644 baseconfig/CONFIG_BMC150_ACCEL create mode 100644 baseconfig/CONFIG_BMC150_MAGN create mode 100644 baseconfig/CONFIG_BMC150_MAGN_I2C create mode 100644 baseconfig/CONFIG_BMC150_MAGN_SPI create mode 100644 baseconfig/CONFIG_BMG160 create mode 100644 baseconfig/CONFIG_BMI160_I2C create mode 100644 baseconfig/CONFIG_BMI160_SPI create mode 100644 baseconfig/CONFIG_BMP280 create mode 100644 baseconfig/CONFIG_BNA create mode 100644 baseconfig/CONFIG_BNX2 create mode 100644 baseconfig/CONFIG_BNX2X create mode 100644 baseconfig/CONFIG_BNX2X_SRIOV create mode 100644 baseconfig/CONFIG_BNXT create mode 100644 baseconfig/CONFIG_BNXT_DCB create mode 100644 baseconfig/CONFIG_BNXT_SRIOV create mode 100644 baseconfig/CONFIG_BONDING create mode 100644 baseconfig/CONFIG_BOOTPARAM_HARDLOCKUP_PANIC create mode 100644 baseconfig/CONFIG_BOOTPARAM_HOTPLUG_CPU0 create mode 100644 baseconfig/CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC create mode 100644 baseconfig/CONFIG_BOOT_PRINTK_DELAY create mode 100644 baseconfig/CONFIG_BOUNCE create mode 100644 baseconfig/CONFIG_BPF_JIT create mode 100644 baseconfig/CONFIG_BPF_SYSCALL create mode 100644 baseconfig/CONFIG_BPQETHER create mode 100644 baseconfig/CONFIG_BRCMDBG create mode 100644 baseconfig/CONFIG_BRCMFMAC create mode 100644 baseconfig/CONFIG_BRCMFMAC_PCIE create mode 100644 baseconfig/CONFIG_BRCMFMAC_SDIO create mode 100644 baseconfig/CONFIG_BRCMFMAC_USB create mode 100644 baseconfig/CONFIG_BRCMSMAC create mode 100644 baseconfig/CONFIG_BRCM_TRACING create mode 100644 baseconfig/CONFIG_BRIDGE create mode 100644 baseconfig/CONFIG_BRIDGE_EBT_802_3 create mode 100644 baseconfig/CONFIG_BRIDGE_EBT_AMONG create mode 100644 baseconfig/CONFIG_BRIDGE_EBT_ARP create mode 100644 baseconfig/CONFIG_BRIDGE_EBT_ARPREPLY create mode 100644 baseconfig/CONFIG_BRIDGE_EBT_BROUTE create mode 100644 baseconfig/CONFIG_BRIDGE_EBT_DNAT create mode 100644 baseconfig/CONFIG_BRIDGE_EBT_IP create mode 100644 baseconfig/CONFIG_BRIDGE_EBT_IP6 create mode 100644 baseconfig/CONFIG_BRIDGE_EBT_LIMIT create mode 100644 baseconfig/CONFIG_BRIDGE_EBT_LOG create mode 100644 baseconfig/CONFIG_BRIDGE_EBT_MARK create mode 100644 baseconfig/CONFIG_BRIDGE_EBT_MARK_T create mode 100644 baseconfig/CONFIG_BRIDGE_EBT_NFLOG create mode 100644 baseconfig/CONFIG_BRIDGE_EBT_PKTTYPE create mode 100644 baseconfig/CONFIG_BRIDGE_EBT_REDIRECT create mode 100644 baseconfig/CONFIG_BRIDGE_EBT_SNAT create mode 100644 baseconfig/CONFIG_BRIDGE_EBT_STP create mode 100644 baseconfig/CONFIG_BRIDGE_EBT_T_FILTER create mode 100644 baseconfig/CONFIG_BRIDGE_EBT_T_NAT create mode 100644 baseconfig/CONFIG_BRIDGE_EBT_VLAN create mode 100644 baseconfig/CONFIG_BRIDGE_IGMP_SNOOPING create mode 100644 baseconfig/CONFIG_BRIDGE_NETFILTER create mode 100644 baseconfig/CONFIG_BRIDGE_NF_EBTABLES create mode 100644 baseconfig/CONFIG_BRIDGE_VLAN_FILTERING create mode 100644 baseconfig/CONFIG_BROADCOM_PHY create mode 100644 baseconfig/CONFIG_BSD_DISKLABEL create mode 100644 baseconfig/CONFIG_BSD_PROCESS_ACCT create mode 100644 baseconfig/CONFIG_BSD_PROCESS_ACCT_V3 create mode 100644 baseconfig/CONFIG_BT create mode 100644 baseconfig/CONFIG_BTRFS_ASSERT create mode 100644 baseconfig/CONFIG_BTRFS_DEBUG create mode 100644 baseconfig/CONFIG_BTRFS_FS create mode 100644 baseconfig/CONFIG_BTRFS_FS_CHECK_INTEGRITY create mode 100644 baseconfig/CONFIG_BTRFS_FS_POSIX_ACL create mode 100644 baseconfig/CONFIG_BTRFS_FS_RUN_SANITY_TESTS create mode 100644 baseconfig/CONFIG_BTT create mode 100644 baseconfig/CONFIG_BT_6LOWPAN create mode 100644 baseconfig/CONFIG_BT_ATH3K create mode 100644 baseconfig/CONFIG_BT_BNEP create mode 100644 baseconfig/CONFIG_BT_BNEP_MC_FILTER create mode 100644 baseconfig/CONFIG_BT_BNEP_PROTO_FILTER create mode 100644 baseconfig/CONFIG_BT_BREDR create mode 100644 baseconfig/CONFIG_BT_CMTP create mode 100644 baseconfig/CONFIG_BT_DEBUGFS create mode 100644 baseconfig/CONFIG_BT_HCIBCM203X create mode 100644 baseconfig/CONFIG_BT_HCIBFUSB create mode 100644 baseconfig/CONFIG_BT_HCIBLUECARD create mode 100644 baseconfig/CONFIG_BT_HCIBPA10X create mode 100644 baseconfig/CONFIG_BT_HCIBT3C create mode 100644 baseconfig/CONFIG_BT_HCIBTSDIO create mode 100644 baseconfig/CONFIG_BT_HCIBTUART create mode 100644 baseconfig/CONFIG_BT_HCIBTUSB create mode 100644 baseconfig/CONFIG_BT_HCIBTUSB_BCM create mode 100644 baseconfig/CONFIG_BT_HCIBTUSB_RTL create mode 100644 baseconfig/CONFIG_BT_HCIDTL1 create mode 100644 baseconfig/CONFIG_BT_HCIUART create mode 100644 baseconfig/CONFIG_BT_HCIUART_3WIRE create mode 100644 baseconfig/CONFIG_BT_HCIUART_AG6XX create mode 100644 baseconfig/CONFIG_BT_HCIUART_ATH3K create mode 100644 baseconfig/CONFIG_BT_HCIUART_BCM create mode 100644 baseconfig/CONFIG_BT_HCIUART_BCSP create mode 100644 baseconfig/CONFIG_BT_HCIUART_H4 create mode 100644 baseconfig/CONFIG_BT_HCIUART_INTEL create mode 100644 baseconfig/CONFIG_BT_HCIUART_LL create mode 100644 baseconfig/CONFIG_BT_HCIUART_MRVL create mode 100644 baseconfig/CONFIG_BT_HCIUART_QCA create mode 100644 baseconfig/CONFIG_BT_HCIVHCI create mode 100644 baseconfig/CONFIG_BT_HIDP create mode 100644 baseconfig/CONFIG_BT_HS create mode 100644 baseconfig/CONFIG_BT_LE create mode 100644 baseconfig/CONFIG_BT_LEDS create mode 100644 baseconfig/CONFIG_BT_MRVL create mode 100644 baseconfig/CONFIG_BT_MRVL_SDIO create mode 100644 baseconfig/CONFIG_BT_QCA create mode 100644 baseconfig/CONFIG_BT_QCOMSMD create mode 100644 baseconfig/CONFIG_BT_RFCOMM create mode 100644 baseconfig/CONFIG_BT_RFCOMM_TTY create mode 100644 baseconfig/CONFIG_BT_SCO create mode 100644 baseconfig/CONFIG_BT_SELFTEST create mode 100644 baseconfig/CONFIG_BT_WILINK create mode 100644 baseconfig/CONFIG_BUG_ON_DATA_CORRUPTION create mode 100644 baseconfig/CONFIG_BUILD_DOCSRC create mode 100644 baseconfig/CONFIG_C2PORT create mode 100644 baseconfig/CONFIG_CACHEFILES create mode 100644 baseconfig/CONFIG_CACHEFILES_DEBUG create mode 100644 baseconfig/CONFIG_CACHEFILES_HISTOGRAM create mode 100644 baseconfig/CONFIG_CADENCE_WATCHDOG create mode 100644 baseconfig/CONFIG_CAIF create mode 100644 baseconfig/CONFIG_CAN create mode 100644 baseconfig/CONFIG_CAN_8DEV_USB create mode 100644 baseconfig/CONFIG_CAN_BCM create mode 100644 baseconfig/CONFIG_CAN_CALC_BITTIMING create mode 100644 baseconfig/CONFIG_CAN_CC770 create mode 100644 baseconfig/CONFIG_CAN_CC770_ISA create mode 100644 baseconfig/CONFIG_CAN_CC770_PLATFORM create mode 100644 baseconfig/CONFIG_CAN_C_CAN create mode 100644 baseconfig/CONFIG_CAN_C_CAN_PCI create mode 100644 baseconfig/CONFIG_CAN_C_CAN_PLATFORM create mode 100644 baseconfig/CONFIG_CAN_DEBUG_DEVICES create mode 100644 baseconfig/CONFIG_CAN_DEV create mode 100644 baseconfig/CONFIG_CAN_EMS_PCI create mode 100644 baseconfig/CONFIG_CAN_EMS_PCMCIA create mode 100644 baseconfig/CONFIG_CAN_EMS_USB create mode 100644 baseconfig/CONFIG_CAN_ESD_USB2 create mode 100644 baseconfig/CONFIG_CAN_GRCAN create mode 100644 baseconfig/CONFIG_CAN_GS_USB create mode 100644 baseconfig/CONFIG_CAN_GW create mode 100644 baseconfig/CONFIG_CAN_IFI_CANFD create mode 100644 baseconfig/CONFIG_CAN_KVASER_PCI create mode 100644 baseconfig/CONFIG_CAN_KVASER_USB create mode 100644 baseconfig/CONFIG_CAN_LEDS create mode 100644 baseconfig/CONFIG_CAN_MCP251X create mode 100644 baseconfig/CONFIG_CAN_M_CAN create mode 100644 baseconfig/CONFIG_CAN_PEAK_PCI create mode 100644 baseconfig/CONFIG_CAN_PEAK_PCIEC create mode 100644 baseconfig/CONFIG_CAN_PEAK_PCMCIA create mode 100644 baseconfig/CONFIG_CAN_PEAK_USB create mode 100644 baseconfig/CONFIG_CAN_PLX_PCI create mode 100644 baseconfig/CONFIG_CAN_RAW create mode 100644 baseconfig/CONFIG_CAN_SJA1000 create mode 100644 baseconfig/CONFIG_CAN_SJA1000_ISA create mode 100644 baseconfig/CONFIG_CAN_SJA1000_PLATFORM create mode 100644 baseconfig/CONFIG_CAN_SLCAN create mode 100644 baseconfig/CONFIG_CAN_SOFTING create mode 100644 baseconfig/CONFIG_CAN_SOFTING_CS create mode 100644 baseconfig/CONFIG_CAN_TSCAN1 create mode 100644 baseconfig/CONFIG_CAN_VCAN create mode 100644 baseconfig/CONFIG_CAN_XILINXCAN create mode 100644 baseconfig/CONFIG_CAPI_AVM create mode 100644 baseconfig/CONFIG_CAPI_EICON create mode 100644 baseconfig/CONFIG_CAPI_TRACE create mode 100644 baseconfig/CONFIG_CARDBUS create mode 100644 baseconfig/CONFIG_CARDMAN_4000 create mode 100644 baseconfig/CONFIG_CARDMAN_4040 create mode 100644 baseconfig/CONFIG_CARL9170 create mode 100644 baseconfig/CONFIG_CARL9170_DEBUGFS create mode 100644 baseconfig/CONFIG_CARL9170_HWRNG create mode 100644 baseconfig/CONFIG_CARL9170_LEDS create mode 100644 baseconfig/CONFIG_CASSINI create mode 100644 baseconfig/CONFIG_CB710_CORE create mode 100644 baseconfig/CONFIG_CB710_DEBUG create mode 100644 baseconfig/CONFIG_CC10001_ADC create mode 100644 baseconfig/CONFIG_CC_OPTIMIZE_FOR_SIZE create mode 100644 baseconfig/CONFIG_CDROM_PKTCDVD create mode 100644 baseconfig/CONFIG_CDROM_PKTCDVD_BUFFERS create mode 100644 baseconfig/CONFIG_CDROM_PKTCDVD_WCACHE create mode 100644 baseconfig/CONFIG_CEPH_FS create mode 100644 baseconfig/CONFIG_CEPH_FSCACHE create mode 100644 baseconfig/CONFIG_CEPH_FS_POSIX_ACL create mode 100644 baseconfig/CONFIG_CEPH_LIB create mode 100644 baseconfig/CONFIG_CEPH_LIB_PRETTYDEBUG create mode 100644 baseconfig/CONFIG_CEPH_LIB_USE_DNS_RESOLVER create mode 100644 baseconfig/CONFIG_CFAG12864B create mode 100644 baseconfig/CONFIG_CFAG12864B_RATE create mode 100644 baseconfig/CONFIG_CFG80211 create mode 100644 baseconfig/CONFIG_CFG80211_CRDA_SUPPORT create mode 100644 baseconfig/CONFIG_CFG80211_DEBUGFS create mode 100644 baseconfig/CONFIG_CFG80211_DEFAULT_PS create mode 100644 baseconfig/CONFIG_CFG80211_DEVELOPER_WARNINGS create mode 100644 baseconfig/CONFIG_CFG80211_WEXT create mode 100644 baseconfig/CONFIG_CFQ_GROUP_IOSCHED create mode 100644 baseconfig/CONFIG_CFS_BANDWIDTH create mode 100644 baseconfig/CONFIG_CGROUPS create mode 100644 baseconfig/CONFIG_CGROUP_BPF create mode 100644 baseconfig/CONFIG_CGROUP_CPUACCT create mode 100644 baseconfig/CONFIG_CGROUP_DEBUG create mode 100644 baseconfig/CONFIG_CGROUP_DEVICE create mode 100644 baseconfig/CONFIG_CGROUP_FREEZER create mode 100644 baseconfig/CONFIG_CGROUP_HUGETLB create mode 100644 baseconfig/CONFIG_CGROUP_NET_CLASSID create mode 100644 baseconfig/CONFIG_CGROUP_NET_PRIO create mode 100644 baseconfig/CONFIG_CGROUP_PERF create mode 100644 baseconfig/CONFIG_CGROUP_PIDS create mode 100644 baseconfig/CONFIG_CGROUP_SCHED create mode 100644 baseconfig/CONFIG_CHARGER_BQ2415X create mode 100644 baseconfig/CONFIG_CHARGER_BQ24190 create mode 100644 baseconfig/CONFIG_CHARGER_BQ24257 create mode 100644 baseconfig/CONFIG_CHARGER_BQ24735 create mode 100644 baseconfig/CONFIG_CHARGER_BQ25890 create mode 100644 baseconfig/CONFIG_CHARGER_GPIO create mode 100644 baseconfig/CONFIG_CHARGER_ISP1704 create mode 100644 baseconfig/CONFIG_CHARGER_LP8727 create mode 100644 baseconfig/CONFIG_CHARGER_MAX8903 create mode 100644 baseconfig/CONFIG_CHARGER_PCF50633 create mode 100644 baseconfig/CONFIG_CHARGER_QCOM_SMBB create mode 100644 baseconfig/CONFIG_CHARGER_RT9455 create mode 100644 baseconfig/CONFIG_CHARGER_SMB347 create mode 100644 baseconfig/CONFIG_CHECKPOINT_RESTORE create mode 100644 baseconfig/CONFIG_CHELSIO_T1 create mode 100644 baseconfig/CONFIG_CHELSIO_T1_1G create mode 100644 baseconfig/CONFIG_CHELSIO_T3 create mode 100644 baseconfig/CONFIG_CHELSIO_T4 create mode 100644 baseconfig/CONFIG_CHELSIO_T4VF create mode 100644 baseconfig/CONFIG_CHELSIO_T4_DCB create mode 100644 baseconfig/CONFIG_CHELSIO_T4_FCOE create mode 100644 baseconfig/CONFIG_CHROME_PLATFORMS create mode 100644 baseconfig/CONFIG_CHR_DEV_OSST create mode 100644 baseconfig/CONFIG_CHR_DEV_SCH create mode 100644 baseconfig/CONFIG_CHR_DEV_SG create mode 100644 baseconfig/CONFIG_CHR_DEV_ST create mode 100644 baseconfig/CONFIG_CICADA_PHY create mode 100644 baseconfig/CONFIG_CIFS create mode 100644 baseconfig/CONFIG_CIFS_ACL create mode 100644 baseconfig/CONFIG_CIFS_DEBUG create mode 100644 baseconfig/CONFIG_CIFS_DEBUG2 create mode 100644 baseconfig/CONFIG_CIFS_DFS_UPCALL create mode 100644 baseconfig/CONFIG_CIFS_FSCACHE create mode 100644 baseconfig/CONFIG_CIFS_NFSD_EXPORT create mode 100644 baseconfig/CONFIG_CIFS_POSIX create mode 100644 baseconfig/CONFIG_CIFS_SMB2 create mode 100644 baseconfig/CONFIG_CIFS_SMB311 create mode 100644 baseconfig/CONFIG_CIFS_STATS create mode 100644 baseconfig/CONFIG_CIFS_STATS2 create mode 100644 baseconfig/CONFIG_CIFS_UPCALL create mode 100644 baseconfig/CONFIG_CIFS_WEAK_PW_HASH create mode 100644 baseconfig/CONFIG_CIFS_XATTR create mode 100644 baseconfig/CONFIG_CISS_SCSI_TAPE create mode 100644 baseconfig/CONFIG_CLEANCACHE create mode 100644 baseconfig/CONFIG_CLK_QORIQ create mode 100644 baseconfig/CONFIG_CLS_U32_MARK create mode 100644 baseconfig/CONFIG_CLS_U32_PERF create mode 100644 baseconfig/CONFIG_CM32181 create mode 100644 baseconfig/CONFIG_CM3232 create mode 100644 baseconfig/CONFIG_CM3323 create mode 100644 baseconfig/CONFIG_CM36651 create mode 100644 baseconfig/CONFIG_CMA create mode 100644 baseconfig/CONFIG_CMDLINE_PARTITION create mode 100644 baseconfig/CONFIG_CNIC create mode 100644 baseconfig/CONFIG_CODA_FS create mode 100644 baseconfig/CONFIG_COMEDI create mode 100644 baseconfig/CONFIG_COMMON_CLK_CDCE706 create mode 100644 baseconfig/CONFIG_COMMON_CLK_CDCE925 create mode 100644 baseconfig/CONFIG_COMMON_CLK_CS2000_CP create mode 100644 baseconfig/CONFIG_COMMON_CLK_HI3516CV300 create mode 100644 baseconfig/CONFIG_COMMON_CLK_HI3519 create mode 100644 baseconfig/CONFIG_COMMON_CLK_HI3798CV200 create mode 100644 baseconfig/CONFIG_COMMON_CLK_MT2701 create mode 100644 baseconfig/CONFIG_COMMON_CLK_MT2701_BDPSYS create mode 100644 baseconfig/CONFIG_COMMON_CLK_MT2701_ETHSYS create mode 100644 baseconfig/CONFIG_COMMON_CLK_MT2701_HIFSYS create mode 100644 baseconfig/CONFIG_COMMON_CLK_MT2701_IMGSYS create mode 100644 baseconfig/CONFIG_COMMON_CLK_MT2701_MMSYS create mode 100644 baseconfig/CONFIG_COMMON_CLK_MT2701_VDECSYS create mode 100644 baseconfig/CONFIG_COMMON_CLK_MT8135 create mode 100644 baseconfig/CONFIG_COMMON_CLK_MT8173 create mode 100644 baseconfig/CONFIG_COMMON_CLK_OXNAS create mode 100644 baseconfig/CONFIG_COMMON_CLK_PWM create mode 100644 baseconfig/CONFIG_COMMON_CLK_SI514 create mode 100644 baseconfig/CONFIG_COMMON_CLK_SI5351 create mode 100644 baseconfig/CONFIG_COMMON_CLK_XLNX_CLKWZRD create mode 100644 baseconfig/CONFIG_COMPACTION create mode 100644 baseconfig/CONFIG_COMPAT_BRK create mode 100644 baseconfig/CONFIG_COMPILE_TEST create mode 100644 baseconfig/CONFIG_CONFIGFS_FS create mode 100644 baseconfig/CONFIG_CONNECTOR create mode 100644 baseconfig/CONFIG_CONSOLE_LOGLEVEL_DEFAULT create mode 100644 baseconfig/CONFIG_CONTEXT_SWITCH_TRACER create mode 100644 baseconfig/CONFIG_CORDIC create mode 100644 baseconfig/CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS create mode 100644 baseconfig/CONFIG_CPU5_WDT create mode 100644 baseconfig/CONFIG_CPUFREQ_DT create mode 100644 baseconfig/CONFIG_CPUMASK_OFFSTACK create mode 100644 baseconfig/CONFIG_CPUSETS create mode 100644 baseconfig/CONFIG_CPU_FREQ create mode 100644 baseconfig/CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND create mode 100644 baseconfig/CONFIG_CPU_FREQ_GOV_CONSERVATIVE create mode 100644 baseconfig/CONFIG_CPU_FREQ_GOV_ONDEMAND create mode 100644 baseconfig/CONFIG_CPU_FREQ_GOV_PERFORMANCE create mode 100644 baseconfig/CONFIG_CPU_FREQ_GOV_POWERSAVE create mode 100644 baseconfig/CONFIG_CPU_FREQ_GOV_SCHEDUTIL create mode 100644 baseconfig/CONFIG_CPU_FREQ_GOV_USERSPACE create mode 100644 baseconfig/CONFIG_CPU_FREQ_STAT create mode 100644 baseconfig/CONFIG_CPU_FREQ_STAT_DETAILS create mode 100644 baseconfig/CONFIG_CPU_HOTPLUG_STATE_CONTROL create mode 100644 baseconfig/CONFIG_CPU_IDLE create mode 100644 baseconfig/CONFIG_CPU_IDLE_GOV_LADDER create mode 100644 baseconfig/CONFIG_CPU_THERMAL create mode 100644 baseconfig/CONFIG_CRAMFS create mode 100644 baseconfig/CONFIG_CRASH create mode 100644 baseconfig/CONFIG_CRASH_DUMP create mode 100644 baseconfig/CONFIG_CRC16 create mode 100644 baseconfig/CONFIG_CRC32 create mode 100644 baseconfig/CONFIG_CRC32_SELFTEST create mode 100644 baseconfig/CONFIG_CRC7 create mode 100644 baseconfig/CONFIG_CRC8 create mode 100644 baseconfig/CONFIG_CRC_CCITT create mode 100644 baseconfig/CONFIG_CRC_ITU_T create mode 100644 baseconfig/CONFIG_CRC_T10DIF create mode 100644 baseconfig/CONFIG_CROSS_COMPILE create mode 100644 baseconfig/CONFIG_CROSS_MEMORY_ATTACH create mode 100644 baseconfig/CONFIG_CROS_KBD_LED_BACKLIGHT create mode 100644 baseconfig/CONFIG_CRYPTO create mode 100644 baseconfig/CONFIG_CRYPTO_842 create mode 100644 baseconfig/CONFIG_CRYPTO_AES create mode 100644 baseconfig/CONFIG_CRYPTO_ANSI_CPRNG create mode 100644 baseconfig/CONFIG_CRYPTO_ANUBIS create mode 100644 baseconfig/CONFIG_CRYPTO_ARC4 create mode 100644 baseconfig/CONFIG_CRYPTO_AUTHENC create mode 100644 baseconfig/CONFIG_CRYPTO_BLKCIPHER create mode 100644 baseconfig/CONFIG_CRYPTO_BLOWFISH create mode 100644 baseconfig/CONFIG_CRYPTO_CAMELLIA create mode 100644 baseconfig/CONFIG_CRYPTO_CAST5 create mode 100644 baseconfig/CONFIG_CRYPTO_CAST6 create mode 100644 baseconfig/CONFIG_CRYPTO_CBC create mode 100644 baseconfig/CONFIG_CRYPTO_CCM create mode 100644 baseconfig/CONFIG_CRYPTO_CHACHA20 create mode 100644 baseconfig/CONFIG_CRYPTO_CHACHA20POLY1305 create mode 100644 baseconfig/CONFIG_CRYPTO_CMAC create mode 100644 baseconfig/CONFIG_CRYPTO_CRC32 create mode 100644 baseconfig/CONFIG_CRYPTO_CRC32C create mode 100644 baseconfig/CONFIG_CRYPTO_CRC32C_INTEL create mode 100644 baseconfig/CONFIG_CRYPTO_CRC32C_VPMSUM create mode 100644 baseconfig/CONFIG_CRYPTO_CRC32_ARM_CE create mode 100644 baseconfig/CONFIG_CRYPTO_CRCT10DIF_ARM_CE create mode 100644 baseconfig/CONFIG_CRYPTO_CRYPTD create mode 100644 baseconfig/CONFIG_CRYPTO_CTR create mode 100644 baseconfig/CONFIG_CRYPTO_CTS create mode 100644 baseconfig/CONFIG_CRYPTO_DEFLATE create mode 100644 baseconfig/CONFIG_CRYPTO_DES create mode 100644 baseconfig/CONFIG_CRYPTO_DEV_CHELSIO create mode 100644 baseconfig/CONFIG_CRYPTO_DEV_HIFN_795X create mode 100644 baseconfig/CONFIG_CRYPTO_DEV_HIFN_795X_RNG create mode 100644 baseconfig/CONFIG_CRYPTO_DEV_VIRTIO create mode 100644 baseconfig/CONFIG_CRYPTO_DH create mode 100644 baseconfig/CONFIG_CRYPTO_DRBG_CTR create mode 100644 baseconfig/CONFIG_CRYPTO_DRBG_HASH create mode 100644 baseconfig/CONFIG_CRYPTO_DRBG_MENU create mode 100644 baseconfig/CONFIG_CRYPTO_ECB create mode 100644 baseconfig/CONFIG_CRYPTO_ECDH create mode 100644 baseconfig/CONFIG_CRYPTO_ECHAINIV create mode 100644 baseconfig/CONFIG_CRYPTO_FCRYPT create mode 100644 baseconfig/CONFIG_CRYPTO_FIPS create mode 100644 baseconfig/CONFIG_CRYPTO_GCM create mode 100644 baseconfig/CONFIG_CRYPTO_GF128MUL create mode 100644 baseconfig/CONFIG_CRYPTO_GHASH create mode 100644 baseconfig/CONFIG_CRYPTO_HMAC create mode 100644 baseconfig/CONFIG_CRYPTO_HW create mode 100644 baseconfig/CONFIG_CRYPTO_KEYWRAP create mode 100644 baseconfig/CONFIG_CRYPTO_KHAZAD create mode 100644 baseconfig/CONFIG_CRYPTO_LRW create mode 100644 baseconfig/CONFIG_CRYPTO_LZ4 create mode 100644 baseconfig/CONFIG_CRYPTO_LZ4HC create mode 100644 baseconfig/CONFIG_CRYPTO_LZO create mode 100644 baseconfig/CONFIG_CRYPTO_MANAGER create mode 100644 baseconfig/CONFIG_CRYPTO_MANAGER_DISABLE_TESTS create mode 100644 baseconfig/CONFIG_CRYPTO_MCRYPTD create mode 100644 baseconfig/CONFIG_CRYPTO_MD4 create mode 100644 baseconfig/CONFIG_CRYPTO_MD5 create mode 100644 baseconfig/CONFIG_CRYPTO_MICHAEL_MIC create mode 100644 baseconfig/CONFIG_CRYPTO_NULL create mode 100644 baseconfig/CONFIG_CRYPTO_PCBC create mode 100644 baseconfig/CONFIG_CRYPTO_PCRYPT create mode 100644 baseconfig/CONFIG_CRYPTO_POLY1305 create mode 100644 baseconfig/CONFIG_CRYPTO_RMD128 create mode 100644 baseconfig/CONFIG_CRYPTO_RMD160 create mode 100644 baseconfig/CONFIG_CRYPTO_RMD256 create mode 100644 baseconfig/CONFIG_CRYPTO_RMD320 create mode 100644 baseconfig/CONFIG_CRYPTO_RSA create mode 100644 baseconfig/CONFIG_CRYPTO_SALSA20 create mode 100644 baseconfig/CONFIG_CRYPTO_SALSA20_586 create mode 100644 baseconfig/CONFIG_CRYPTO_SEED create mode 100644 baseconfig/CONFIG_CRYPTO_SEQIV create mode 100644 baseconfig/CONFIG_CRYPTO_SERPENT create mode 100644 baseconfig/CONFIG_CRYPTO_SHA1 create mode 100644 baseconfig/CONFIG_CRYPTO_SHA256 create mode 100644 baseconfig/CONFIG_CRYPTO_SHA3 create mode 100644 baseconfig/CONFIG_CRYPTO_SHA512 create mode 100644 baseconfig/CONFIG_CRYPTO_SIMD create mode 100644 baseconfig/CONFIG_CRYPTO_TEA create mode 100644 baseconfig/CONFIG_CRYPTO_TEST create mode 100644 baseconfig/CONFIG_CRYPTO_TGR192 create mode 100644 baseconfig/CONFIG_CRYPTO_TWOFISH create mode 100644 baseconfig/CONFIG_CRYPTO_USER create mode 100644 baseconfig/CONFIG_CRYPTO_USER_API_AEAD create mode 100644 baseconfig/CONFIG_CRYPTO_USER_API_HASH create mode 100644 baseconfig/CONFIG_CRYPTO_USER_API_RNG create mode 100644 baseconfig/CONFIG_CRYPTO_USER_API_SKCIPHER create mode 100644 baseconfig/CONFIG_CRYPTO_VMAC create mode 100644 baseconfig/CONFIG_CRYPTO_WP512 create mode 100644 baseconfig/CONFIG_CRYPTO_XCBC create mode 100644 baseconfig/CONFIG_CRYPTO_XTS create mode 100644 baseconfig/CONFIG_CUSE create mode 100644 baseconfig/CONFIG_CW1200 create mode 100644 baseconfig/CONFIG_CW1200_WLAN_SDIO create mode 100644 baseconfig/CONFIG_CW1200_WLAN_SPI create mode 100644 baseconfig/CONFIG_CX_ECAT create mode 100644 baseconfig/CONFIG_CYCLADES create mode 100644 baseconfig/CONFIG_CYZ_INTR create mode 100644 baseconfig/CONFIG_DA280 create mode 100644 baseconfig/CONFIG_DA311 create mode 100644 baseconfig/CONFIG_DAVICOM_PHY create mode 100644 baseconfig/CONFIG_DCB create mode 100644 baseconfig/CONFIG_DDR create mode 100644 baseconfig/CONFIG_DE2104X create mode 100644 baseconfig/CONFIG_DE2104X_DSL create mode 100644 baseconfig/CONFIG_DE4X5 create mode 100644 baseconfig/CONFIG_DEBUG_ATOMIC_SLEEP create mode 100644 baseconfig/CONFIG_DEBUG_BLK_CGROUP create mode 100644 baseconfig/CONFIG_DEBUG_BLOCK_EXT_DEVT create mode 100644 baseconfig/CONFIG_DEBUG_BOOT_PARAMS create mode 100644 baseconfig/CONFIG_DEBUG_CREDENTIALS create mode 100644 baseconfig/CONFIG_DEBUG_DEVRES create mode 100644 baseconfig/CONFIG_DEBUG_DRIVER create mode 100644 baseconfig/CONFIG_DEBUG_FORCE_WEAK_PER_CPU create mode 100644 baseconfig/CONFIG_DEBUG_FS create mode 100644 baseconfig/CONFIG_DEBUG_GPIO create mode 100644 baseconfig/CONFIG_DEBUG_HIGHMEM create mode 100644 baseconfig/CONFIG_DEBUG_HOTPLUG_CPU0 create mode 100644 baseconfig/CONFIG_DEBUG_INFO create mode 100644 baseconfig/CONFIG_DEBUG_INFO_DWARF4 create mode 100644 baseconfig/CONFIG_DEBUG_INFO_REDUCED create mode 100644 baseconfig/CONFIG_DEBUG_INFO_SPLIT create mode 100644 baseconfig/CONFIG_DEBUG_INFO_VTA create mode 100644 baseconfig/CONFIG_DEBUG_KERNEL create mode 100644 baseconfig/CONFIG_DEBUG_KMEMLEAK create mode 100644 baseconfig/CONFIG_DEBUG_KMEMLEAK_TEST create mode 100644 baseconfig/CONFIG_DEBUG_KOBJECT create mode 100644 baseconfig/CONFIG_DEBUG_KOBJECT_RELEASE create mode 100644 baseconfig/CONFIG_DEBUG_LIST create mode 100644 baseconfig/CONFIG_DEBUG_LOCKDEP create mode 100644 baseconfig/CONFIG_DEBUG_LOCKING_API_SELFTESTS create mode 100644 baseconfig/CONFIG_DEBUG_LOCK_ALLOC create mode 100644 baseconfig/CONFIG_DEBUG_MUTEXES create mode 100644 baseconfig/CONFIG_DEBUG_NOTIFIERS create mode 100644 baseconfig/CONFIG_DEBUG_NX_TEST create mode 100644 baseconfig/CONFIG_DEBUG_OBJECTS create mode 100644 baseconfig/CONFIG_DEBUG_OBJECTS_ENABLE_DEFAULT create mode 100644 baseconfig/CONFIG_DEBUG_OBJECTS_SELFTEST create mode 100644 baseconfig/CONFIG_DEBUG_PAGEALLOC create mode 100644 baseconfig/CONFIG_DEBUG_PAGE_REF create mode 100644 baseconfig/CONFIG_DEBUG_PERF_USE_VMALLOC create mode 100644 baseconfig/CONFIG_DEBUG_PER_CPU_MAPS create mode 100644 baseconfig/CONFIG_DEBUG_PINCTRL create mode 100644 baseconfig/CONFIG_DEBUG_PI_LIST create mode 100644 baseconfig/CONFIG_DEBUG_RODATA_TEST create mode 100644 baseconfig/CONFIG_DEBUG_RT_MUTEXES create mode 100644 baseconfig/CONFIG_DEBUG_SECTION_MISMATCH create mode 100644 baseconfig/CONFIG_DEBUG_SET_MODULE_RONX create mode 100644 baseconfig/CONFIG_DEBUG_SG create mode 100644 baseconfig/CONFIG_DEBUG_SHIRQ create mode 100644 baseconfig/CONFIG_DEBUG_SPINLOCK create mode 100644 baseconfig/CONFIG_DEBUG_STACK_USAGE create mode 100644 baseconfig/CONFIG_DEBUG_TEST_DRIVER_REMOVE create mode 100644 baseconfig/CONFIG_DEBUG_TIMEKEEPING create mode 100644 baseconfig/CONFIG_DEBUG_VIRTUAL create mode 100644 baseconfig/CONFIG_DEBUG_VM create mode 100644 baseconfig/CONFIG_DEBUG_VM_PGFLAGS create mode 100644 baseconfig/CONFIG_DEBUG_VM_RB create mode 100644 baseconfig/CONFIG_DEBUG_VM_VMACACHE create mode 100644 baseconfig/CONFIG_DEBUG_WQ_FORCE_RR_CPU create mode 100644 baseconfig/CONFIG_DEBUG_WW_MUTEX_SLOWPATH create mode 100644 baseconfig/CONFIG_DECNET create mode 100644 baseconfig/CONFIG_DEFAULT_BOOTPARAM_HUNG_TASK_PANIC create mode 100644 baseconfig/CONFIG_DEFAULT_CFQ create mode 100644 baseconfig/CONFIG_DEFAULT_HOSTNAME create mode 100644 baseconfig/CONFIG_DEFAULT_HUNG_TASK_TIMEOUT create mode 100644 baseconfig/CONFIG_DEFAULT_MMAP_MIN_ADDR create mode 100644 baseconfig/CONFIG_DEFERRED_STRUCT_PAGE_INIT create mode 100644 baseconfig/CONFIG_DEFXX create mode 100644 baseconfig/CONFIG_DETECT_HUNG_TASK create mode 100644 baseconfig/CONFIG_DEVFREQ_GOV_PASSIVE create mode 100644 baseconfig/CONFIG_DEVFREQ_GOV_PERFORMANCE create mode 100644 baseconfig/CONFIG_DEVFREQ_GOV_POWERSAVE create mode 100644 baseconfig/CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND create mode 100644 baseconfig/CONFIG_DEVFREQ_GOV_USERSPACE create mode 100644 baseconfig/CONFIG_DEVKMEM create mode 100644 baseconfig/CONFIG_DEVMEM create mode 100644 baseconfig/CONFIG_DEVTMPFS create mode 100644 baseconfig/CONFIG_DEVTMPFS_MOUNT create mode 100644 baseconfig/CONFIG_DEV_APPLETALK create mode 100644 baseconfig/CONFIG_DE_AOC create mode 100644 baseconfig/CONFIG_DGAP create mode 100644 baseconfig/CONFIG_DGNC create mode 100644 baseconfig/CONFIG_DHT11 create mode 100644 baseconfig/CONFIG_DL2K create mode 100644 baseconfig/CONFIG_DLM create mode 100644 baseconfig/CONFIG_DLM_DEBUG create mode 100644 baseconfig/CONFIG_DM9102 create mode 100644 baseconfig/CONFIG_DMADEVICES create mode 100644 baseconfig/CONFIG_DMADEVICES_DEBUG create mode 100644 baseconfig/CONFIG_DMARD06 create mode 100644 baseconfig/CONFIG_DMARD09 create mode 100644 baseconfig/CONFIG_DMARD10 create mode 100644 baseconfig/CONFIG_DMATEST create mode 100644 baseconfig/CONFIG_DMA_API_DEBUG create mode 100644 baseconfig/CONFIG_DMA_CMA create mode 100644 baseconfig/CONFIG_DMA_ENGINE create mode 100644 baseconfig/CONFIG_DMA_FENCE_TRACE create mode 100644 baseconfig/CONFIG_DM_CACHE create mode 100644 baseconfig/CONFIG_DM_CACHE_CLEANER create mode 100644 baseconfig/CONFIG_DM_CACHE_SMQ create mode 100644 baseconfig/CONFIG_DM_CRYPT create mode 100644 baseconfig/CONFIG_DM_DEBUG create mode 100644 baseconfig/CONFIG_DM_DEBUG_BLOCK_MANAGER_LOCKING create mode 100644 baseconfig/CONFIG_DM_DEBUG_BLOCK_STACK_TRACING create mode 100644 baseconfig/CONFIG_DM_DELAY create mode 100644 baseconfig/CONFIG_DM_ERA create mode 100644 baseconfig/CONFIG_DM_FLAKEY create mode 100644 baseconfig/CONFIG_DM_LOG_USERSPACE create mode 100644 baseconfig/CONFIG_DM_LOG_WRITES create mode 100644 baseconfig/CONFIG_DM_MIRROR create mode 100644 baseconfig/CONFIG_DM_MQ_DEFAULT create mode 100644 baseconfig/CONFIG_DM_MULTIPATH create mode 100644 baseconfig/CONFIG_DM_MULTIPATH_QL create mode 100644 baseconfig/CONFIG_DM_MULTIPATH_ST create mode 100644 baseconfig/CONFIG_DM_RAID create mode 100644 baseconfig/CONFIG_DM_SNAPSHOT create mode 100644 baseconfig/CONFIG_DM_SWITCH create mode 100644 baseconfig/CONFIG_DM_THIN_PROVISIONING create mode 100644 baseconfig/CONFIG_DM_UEVENT create mode 100644 baseconfig/CONFIG_DM_VERITY create mode 100644 baseconfig/CONFIG_DM_VERITY_FEC create mode 100644 baseconfig/CONFIG_DM_ZERO create mode 100644 baseconfig/CONFIG_DNET create mode 100644 baseconfig/CONFIG_DNOTIFY create mode 100644 baseconfig/CONFIG_DNS_RESOLVER create mode 100644 baseconfig/CONFIG_DONGLE create mode 100644 baseconfig/CONFIG_DP83640_PHY create mode 100644 baseconfig/CONFIG_DP83848_PHY create mode 100644 baseconfig/CONFIG_DP83867_PHY create mode 100644 baseconfig/CONFIG_DPM_WATCHDOG create mode 100644 baseconfig/CONFIG_DPOT_DAC create mode 100644 baseconfig/CONFIG_DRAGONRISE_FF create mode 100644 baseconfig/CONFIG_DRBD_FAULT_INJECTION create mode 100644 baseconfig/CONFIG_DRM create mode 100644 baseconfig/CONFIG_DRM_AMDGPU create mode 100644 baseconfig/CONFIG_DRM_AMDGPU_CIK create mode 100644 baseconfig/CONFIG_DRM_AMDGPU_GART_DEBUGFS create mode 100644 baseconfig/CONFIG_DRM_AMDGPU_SI create mode 100644 baseconfig/CONFIG_DRM_AMDGPU_USERPTR create mode 100644 baseconfig/CONFIG_DRM_AMD_ACP create mode 100644 baseconfig/CONFIG_DRM_AMD_POWERPLAY create mode 100644 baseconfig/CONFIG_DRM_ANALOGIX_ANX78XX create mode 100644 baseconfig/CONFIG_DRM_ARCPGU create mode 100644 baseconfig/CONFIG_DRM_AST create mode 100644 baseconfig/CONFIG_DRM_BOCHS create mode 100644 baseconfig/CONFIG_DRM_CIRRUS_QEMU create mode 100644 baseconfig/CONFIG_DRM_DP_AUX_CHARDEV create mode 100644 baseconfig/CONFIG_DRM_DUMB_VGA_DAC create mode 100644 baseconfig/CONFIG_DRM_DW_HDMI_I2S_AUDIO create mode 100644 baseconfig/CONFIG_DRM_FBDEV_EMULATION create mode 100644 baseconfig/CONFIG_DRM_HISI_HIBMC create mode 100644 baseconfig/CONFIG_DRM_I2C_ADV7511 create mode 100644 baseconfig/CONFIG_DRM_I2C_ADV7511_AUDIO create mode 100644 baseconfig/CONFIG_DRM_I2C_ADV7533 create mode 100644 baseconfig/CONFIG_DRM_I2C_CH7006 create mode 100644 baseconfig/CONFIG_DRM_I2C_NXP_TDA998X create mode 100644 baseconfig/CONFIG_DRM_I2C_SIL164 create mode 100644 baseconfig/CONFIG_DRM_I810 create mode 100644 baseconfig/CONFIG_DRM_I915 create mode 100644 baseconfig/CONFIG_DRM_I915_ALPHA_SUPPORT create mode 100644 baseconfig/CONFIG_DRM_I915_CAPTURE_ERROR create mode 100644 baseconfig/CONFIG_DRM_I915_COMPRESS_ERROR create mode 100644 baseconfig/CONFIG_DRM_I915_GVT create mode 100644 baseconfig/CONFIG_DRM_I915_GVT_KVMGT create mode 100644 baseconfig/CONFIG_DRM_I915_USERPTR create mode 100644 baseconfig/CONFIG_DRM_LEGACY create mode 100644 baseconfig/CONFIG_DRM_LOAD_EDID_FIRMWARE create mode 100644 baseconfig/CONFIG_DRM_MALI_DISPLAY create mode 100644 baseconfig/CONFIG_DRM_MGA create mode 100644 baseconfig/CONFIG_DRM_MGAG200 create mode 100644 baseconfig/CONFIG_DRM_MXSFB create mode 100644 baseconfig/CONFIG_DRM_NOUVEAU create mode 100644 baseconfig/CONFIG_DRM_NOUVEAU_BACKLIGHT create mode 100644 baseconfig/CONFIG_DRM_NXP_PTN3460 create mode 100644 baseconfig/CONFIG_DRM_PANEL create mode 100644 baseconfig/CONFIG_DRM_PANEL_JDI_LT070ME05000 create mode 100644 baseconfig/CONFIG_DRM_PANEL_SAMSUNG_S6E8AA0 create mode 100644 baseconfig/CONFIG_DRM_PANEL_SIMPLE create mode 100644 baseconfig/CONFIG_DRM_PARADE_PS8622 create mode 100644 baseconfig/CONFIG_DRM_QXL create mode 100644 baseconfig/CONFIG_DRM_R128 create mode 100644 baseconfig/CONFIG_DRM_RADEON create mode 100644 baseconfig/CONFIG_DRM_RADEON_USERPTR create mode 100644 baseconfig/CONFIG_DRM_SAVAGE create mode 100644 baseconfig/CONFIG_DRM_SII902X create mode 100644 baseconfig/CONFIG_DRM_SIL_SII8620 create mode 100644 baseconfig/CONFIG_DRM_SIS create mode 100644 baseconfig/CONFIG_DRM_TDFX create mode 100644 baseconfig/CONFIG_DRM_TI_TFP410 create mode 100644 baseconfig/CONFIG_DRM_TOSHIBA_TC358767 create mode 100644 baseconfig/CONFIG_DRM_UDL create mode 100644 baseconfig/CONFIG_DRM_VGEM create mode 100644 baseconfig/CONFIG_DRM_VIA create mode 100644 baseconfig/CONFIG_DRM_VIRTIO_GPU create mode 100644 baseconfig/CONFIG_DRM_VMWGFX create mode 100644 baseconfig/CONFIG_DRM_VMWGFX_FBCON create mode 100644 baseconfig/CONFIG_DS1682 create mode 100644 baseconfig/CONFIG_DS1803 create mode 100644 baseconfig/CONFIG_DT3155 create mode 100644 baseconfig/CONFIG_DUMMY create mode 100644 baseconfig/CONFIG_DUMMY_CONSOLE create mode 100644 baseconfig/CONFIG_DUMMY_CONSOLE_COLUMNS create mode 100644 baseconfig/CONFIG_DUMMY_CONSOLE_ROWS create mode 100644 baseconfig/CONFIG_DUMMY_IRQ create mode 100644 baseconfig/CONFIG_DVB_AS102 create mode 100644 baseconfig/CONFIG_DVB_AV7110 create mode 100644 baseconfig/CONFIG_DVB_AV7110_OSD create mode 100644 baseconfig/CONFIG_DVB_B2C2_FLEXCOP create mode 100644 baseconfig/CONFIG_DVB_B2C2_FLEXCOP_DEBUG create mode 100644 baseconfig/CONFIG_DVB_B2C2_FLEXCOP_PCI create mode 100644 baseconfig/CONFIG_DVB_B2C2_FLEXCOP_PCI_DEBUG create mode 100644 baseconfig/CONFIG_DVB_B2C2_FLEXCOP_USB create mode 100644 baseconfig/CONFIG_DVB_B2C2_FLEXCOP_USB_DEBUG create mode 100644 baseconfig/CONFIG_DVB_BT8XX create mode 100644 baseconfig/CONFIG_DVB_BUDGET create mode 100644 baseconfig/CONFIG_DVB_BUDGET_AV create mode 100644 baseconfig/CONFIG_DVB_BUDGET_CI create mode 100644 baseconfig/CONFIG_DVB_BUDGET_CORE create mode 100644 baseconfig/CONFIG_DVB_BUDGET_PATCH create mode 100644 baseconfig/CONFIG_DVB_CORE create mode 100644 baseconfig/CONFIG_DVB_CXD2099 create mode 100644 baseconfig/CONFIG_DVB_DDBRIDGE create mode 100644 baseconfig/CONFIG_DVB_DEMUX_SECTION_LOSS_LOG create mode 100644 baseconfig/CONFIG_DVB_DM1105 create mode 100644 baseconfig/CONFIG_DVB_DYNAMIC_MINORS create mode 100644 baseconfig/CONFIG_DVB_FIREDTV create mode 100644 baseconfig/CONFIG_DVB_HOPPER create mode 100644 baseconfig/CONFIG_DVB_MANTIS create mode 100644 baseconfig/CONFIG_DVB_MAX_ADAPTERS create mode 100644 baseconfig/CONFIG_DVB_MN88472 create mode 100644 baseconfig/CONFIG_DVB_MN88473 create mode 100644 baseconfig/CONFIG_DVB_NET create mode 100644 baseconfig/CONFIG_DVB_NETUP_UNIDVB create mode 100644 baseconfig/CONFIG_DVB_NGENE create mode 100644 baseconfig/CONFIG_DVB_PLATFORM_DRIVERS create mode 100644 baseconfig/CONFIG_DVB_PLUTO2 create mode 100644 baseconfig/CONFIG_DVB_PT1 create mode 100644 baseconfig/CONFIG_DVB_PT3 create mode 100644 baseconfig/CONFIG_DVB_RTL2832_SDR create mode 100644 baseconfig/CONFIG_DVB_SMIPCIE create mode 100644 baseconfig/CONFIG_DVB_TTUSB_BUDGET create mode 100644 baseconfig/CONFIG_DVB_TTUSB_DEC create mode 100644 baseconfig/CONFIG_DVB_USB create mode 100644 baseconfig/CONFIG_DVB_USB_A800 create mode 100644 baseconfig/CONFIG_DVB_USB_AF9005 create mode 100644 baseconfig/CONFIG_DVB_USB_AF9005_REMOTE create mode 100644 baseconfig/CONFIG_DVB_USB_AF9015 create mode 100644 baseconfig/CONFIG_DVB_USB_AF9035 create mode 100644 baseconfig/CONFIG_DVB_USB_ANYSEE create mode 100644 baseconfig/CONFIG_DVB_USB_AU6610 create mode 100644 baseconfig/CONFIG_DVB_USB_AZ6007 create mode 100644 baseconfig/CONFIG_DVB_USB_AZ6027 create mode 100644 baseconfig/CONFIG_DVB_USB_CE6230 create mode 100644 baseconfig/CONFIG_DVB_USB_CINERGY_T2 create mode 100644 baseconfig/CONFIG_DVB_USB_CXUSB create mode 100644 baseconfig/CONFIG_DVB_USB_DEBUG create mode 100644 baseconfig/CONFIG_DVB_USB_DIB0700 create mode 100644 baseconfig/CONFIG_DVB_USB_DIBUSB_MB create mode 100644 baseconfig/CONFIG_DVB_USB_DIBUSB_MB_FAULTY create mode 100644 baseconfig/CONFIG_DVB_USB_DIBUSB_MC create mode 100644 baseconfig/CONFIG_DVB_USB_DIGITV create mode 100644 baseconfig/CONFIG_DVB_USB_DTT200U create mode 100644 baseconfig/CONFIG_DVB_USB_DTV5100 create mode 100644 baseconfig/CONFIG_DVB_USB_DVBSKY create mode 100644 baseconfig/CONFIG_DVB_USB_DW2102 create mode 100644 baseconfig/CONFIG_DVB_USB_EC168 create mode 100644 baseconfig/CONFIG_DVB_USB_FRIIO create mode 100644 baseconfig/CONFIG_DVB_USB_GL861 create mode 100644 baseconfig/CONFIG_DVB_USB_GP8PSK create mode 100644 baseconfig/CONFIG_DVB_USB_LME2510 create mode 100644 baseconfig/CONFIG_DVB_USB_M920X create mode 100644 baseconfig/CONFIG_DVB_USB_MXL111SF create mode 100644 baseconfig/CONFIG_DVB_USB_NOVA_T_USB2 create mode 100644 baseconfig/CONFIG_DVB_USB_OPERA1 create mode 100644 baseconfig/CONFIG_DVB_USB_PCTV452E create mode 100644 baseconfig/CONFIG_DVB_USB_RTL28XXU create mode 100644 baseconfig/CONFIG_DVB_USB_TECHNISAT_USB2 create mode 100644 baseconfig/CONFIG_DVB_USB_TTUSB2 create mode 100644 baseconfig/CONFIG_DVB_USB_UMT_010 create mode 100644 baseconfig/CONFIG_DVB_USB_V2 create mode 100644 baseconfig/CONFIG_DVB_USB_VP702X create mode 100644 baseconfig/CONFIG_DVB_USB_VP7045 create mode 100644 baseconfig/CONFIG_DW_DMAC create mode 100644 baseconfig/CONFIG_DW_DMAC_BIG_ENDIAN_IO create mode 100644 baseconfig/CONFIG_DW_DMAC_CORE create mode 100644 baseconfig/CONFIG_DW_DMAC_PCI create mode 100644 baseconfig/CONFIG_DW_WATCHDOG create mode 100644 baseconfig/CONFIG_DYNAMIC_DEBUG create mode 100644 baseconfig/CONFIG_DYNAMIC_FTRACE create mode 100644 baseconfig/CONFIG_E100 create mode 100644 baseconfig/CONFIG_E1000 create mode 100644 baseconfig/CONFIG_E1000E create mode 100644 baseconfig/CONFIG_EARLY_PRINTK_DBGP create mode 100644 baseconfig/CONFIG_EBC_C384_WDT create mode 100644 baseconfig/CONFIG_ECHO create mode 100644 baseconfig/CONFIG_ECRYPT_FS create mode 100644 baseconfig/CONFIG_ECRYPT_FS_MESSAGING create mode 100644 baseconfig/CONFIG_EDAC create mode 100644 baseconfig/CONFIG_EDAC_DEBUG create mode 100644 baseconfig/CONFIG_EDAC_LEGACY_SYSFS create mode 100644 baseconfig/CONFIG_EDAC_MM_EDAC create mode 100644 baseconfig/CONFIG_EEPROM_93CX6 create mode 100644 baseconfig/CONFIG_EEPROM_93XX46 create mode 100644 baseconfig/CONFIG_EEPROM_AT24 create mode 100644 baseconfig/CONFIG_EEPROM_AT25 create mode 100644 baseconfig/CONFIG_EEPROM_LEGACY create mode 100644 baseconfig/CONFIG_EEPROM_MAX6875 create mode 100644 baseconfig/CONFIG_EFI_ALLOW_SECURE_BOOT_EXIT create mode 100644 baseconfig/CONFIG_EFI_PARTITION create mode 100644 baseconfig/CONFIG_EFI_PGT_DUMP create mode 100644 baseconfig/CONFIG_EFI_SECURE_BOOT_LOCK_DOWN create mode 100644 baseconfig/CONFIG_EFI_SIGNATURE_LIST_PARSER create mode 100644 baseconfig/CONFIG_EFI_TEST create mode 100644 baseconfig/CONFIG_EFS_FS create mode 100644 baseconfig/CONFIG_EMAC_ROCKCHIP create mode 100644 baseconfig/CONFIG_EMBEDDED create mode 100644 baseconfig/CONFIG_ENABLE_MUST_CHECK create mode 100644 baseconfig/CONFIG_ENABLE_WARN_DEPRECATED create mode 100644 baseconfig/CONFIG_ENC28J60 create mode 100644 baseconfig/CONFIG_ENCLOSURE_SERVICES create mode 100644 baseconfig/CONFIG_ENCRYPTED_KEYS create mode 100644 baseconfig/CONFIG_ENIC create mode 100644 baseconfig/CONFIG_ENVELOPE_DETECTOR create mode 100644 baseconfig/CONFIG_EPIC100 create mode 100644 baseconfig/CONFIG_EPOLL create mode 100644 baseconfig/CONFIG_EQUALIZER create mode 100644 baseconfig/CONFIG_ESI_DONGLE create mode 100644 baseconfig/CONFIG_ET131X create mode 100644 baseconfig/CONFIG_ETHERNET create mode 100644 baseconfig/CONFIG_ETHOC create mode 100644 baseconfig/CONFIG_EUROTECH_WDT create mode 100644 baseconfig/CONFIG_EVM create mode 100644 baseconfig/CONFIG_EXOFS_DEBUG create mode 100644 baseconfig/CONFIG_EXOFS_FS create mode 100644 baseconfig/CONFIG_EXPERIMENTAL create mode 100644 baseconfig/CONFIG_EXPERT create mode 100644 baseconfig/CONFIG_EXPORTFS create mode 100644 baseconfig/CONFIG_EXT2_FS create mode 100644 baseconfig/CONFIG_EXT3_FS create mode 100644 baseconfig/CONFIG_EXT4_DEBUG create mode 100644 baseconfig/CONFIG_EXT4_ENCRYPTION create mode 100644 baseconfig/CONFIG_EXT4_FS create mode 100644 baseconfig/CONFIG_EXT4_FS_POSIX_ACL create mode 100644 baseconfig/CONFIG_EXT4_FS_SECURITY create mode 100644 baseconfig/CONFIG_EXT4_USE_FOR_EXT2 create mode 100644 baseconfig/CONFIG_EXTCON create mode 100644 baseconfig/CONFIG_EXTCON_ADC_JACK create mode 100644 baseconfig/CONFIG_EXTCON_QCOM_SPMI_MISC create mode 100644 baseconfig/CONFIG_EXTRA_FIRMWARE create mode 100644 baseconfig/CONFIG_EZNPS_GIC create mode 100644 baseconfig/CONFIG_EZX_PCAP create mode 100644 baseconfig/CONFIG_F2FS_CHECK_FS create mode 100644 baseconfig/CONFIG_F2FS_FAULT_INJECTION create mode 100644 baseconfig/CONFIG_F2FS_FS create mode 100644 baseconfig/CONFIG_F2FS_FS_ENCRYPTION create mode 100644 baseconfig/CONFIG_F2FS_FS_POSIX_ACL create mode 100644 baseconfig/CONFIG_F2FS_FS_SECURITY create mode 100644 baseconfig/CONFIG_F2FS_FS_XATTR create mode 100644 baseconfig/CONFIG_F2FS_IO_TRACE create mode 100644 baseconfig/CONFIG_F2FS_STAT_FS create mode 100644 baseconfig/CONFIG_FAIL_FUTEX create mode 100644 baseconfig/CONFIG_FAIR_GROUP_SCHED create mode 100644 baseconfig/CONFIG_FANOTIFY create mode 100644 baseconfig/CONFIG_FANOTIFY_ACCESS_PERMISSIONS create mode 100644 baseconfig/CONFIG_FAT_DEFAULT_CODEPAGE create mode 100644 baseconfig/CONFIG_FAT_DEFAULT_IOCHARSET create mode 100644 baseconfig/CONFIG_FAT_DEFAULT_UTF8 create mode 100644 baseconfig/CONFIG_FAT_FS create mode 100644 baseconfig/CONFIG_FAULT_INJECTION create mode 100644 baseconfig/CONFIG_FB create mode 100644 baseconfig/CONFIG_FB_3DFX create mode 100644 baseconfig/CONFIG_FB_ARC create mode 100644 baseconfig/CONFIG_FB_ARK create mode 100644 baseconfig/CONFIG_FB_ASILIANT create mode 100644 baseconfig/CONFIG_FB_ATY create mode 100644 baseconfig/CONFIG_FB_ATY128 create mode 100644 baseconfig/CONFIG_FB_ATY128_BACKLIGHT create mode 100644 baseconfig/CONFIG_FB_ATY_BACKLIGHT create mode 100644 baseconfig/CONFIG_FB_ATY_CT create mode 100644 baseconfig/CONFIG_FB_ATY_GX create mode 100644 baseconfig/CONFIG_FB_AUO_K190X create mode 100644 baseconfig/CONFIG_FB_BROADSHEET create mode 100644 baseconfig/CONFIG_FB_CARMINE create mode 100644 baseconfig/CONFIG_FB_CIRRUS create mode 100644 baseconfig/CONFIG_FB_CYBER2000 create mode 100644 baseconfig/CONFIG_FB_EFI create mode 100644 baseconfig/CONFIG_FB_FOREIGN_ENDIAN create mode 100644 baseconfig/CONFIG_FB_GEODE create mode 100644 baseconfig/CONFIG_FB_GOLDFISH create mode 100644 baseconfig/CONFIG_FB_HECUBA create mode 100644 baseconfig/CONFIG_FB_HGA create mode 100644 baseconfig/CONFIG_FB_I740 create mode 100644 baseconfig/CONFIG_FB_I810 create mode 100644 baseconfig/CONFIG_FB_I810_GTF create mode 100644 baseconfig/CONFIG_FB_I810_I2C create mode 100644 baseconfig/CONFIG_FB_IBM_GXT4500 create mode 100644 baseconfig/CONFIG_FB_IMSTT create mode 100644 baseconfig/CONFIG_FB_KYRO create mode 100644 baseconfig/CONFIG_FB_LE80578 create mode 100644 baseconfig/CONFIG_FB_MATROX create mode 100644 baseconfig/CONFIG_FB_MATROX_G create mode 100644 baseconfig/CONFIG_FB_MATROX_I2C create mode 100644 baseconfig/CONFIG_FB_MATROX_MILLENIUM create mode 100644 baseconfig/CONFIG_FB_MATROX_MYSTIQUE create mode 100644 baseconfig/CONFIG_FB_MB862XX create mode 100644 baseconfig/CONFIG_FB_METRONOME create mode 100644 baseconfig/CONFIG_FB_MODE_HELPERS create mode 100644 baseconfig/CONFIG_FB_NEOMAGIC create mode 100644 baseconfig/CONFIG_FB_NVIDIA create mode 100644 baseconfig/CONFIG_FB_NVIDIA_BACKLIGHT create mode 100644 baseconfig/CONFIG_FB_NVIDIA_DEBUG create mode 100644 baseconfig/CONFIG_FB_NVIDIA_I2C create mode 100644 baseconfig/CONFIG_FB_OPENCORES create mode 100644 baseconfig/CONFIG_FB_PM2 create mode 100644 baseconfig/CONFIG_FB_PM2_FIFO_DISCONNECT create mode 100644 baseconfig/CONFIG_FB_PM3 create mode 100644 baseconfig/CONFIG_FB_PRE_INIT_FB create mode 100644 baseconfig/CONFIG_FB_RADEON create mode 100644 baseconfig/CONFIG_FB_RADEON_BACKLIGHT create mode 100644 baseconfig/CONFIG_FB_RADEON_DEBUG create mode 100644 baseconfig/CONFIG_FB_RADEON_I2C create mode 100644 baseconfig/CONFIG_FB_RIVA create mode 100644 baseconfig/CONFIG_FB_RIVA_BACKLIGHT create mode 100644 baseconfig/CONFIG_FB_RIVA_DEBUG create mode 100644 baseconfig/CONFIG_FB_RIVA_I2C create mode 100644 baseconfig/CONFIG_FB_S1D13XXX create mode 100644 baseconfig/CONFIG_FB_S3 create mode 100644 baseconfig/CONFIG_FB_SAVAGE create mode 100644 baseconfig/CONFIG_FB_SIMPLE create mode 100644 baseconfig/CONFIG_FB_SIS create mode 100644 baseconfig/CONFIG_FB_SM501 create mode 100644 baseconfig/CONFIG_FB_SM712 create mode 100644 baseconfig/CONFIG_FB_SM750 create mode 100644 baseconfig/CONFIG_FB_SMSCUFX create mode 100644 baseconfig/CONFIG_FB_TFT create mode 100644 baseconfig/CONFIG_FB_TILEBLITTING create mode 100644 baseconfig/CONFIG_FB_TMIO create mode 100644 baseconfig/CONFIG_FB_TRIDENT create mode 100644 baseconfig/CONFIG_FB_UDL create mode 100644 baseconfig/CONFIG_FB_UVESA create mode 100644 baseconfig/CONFIG_FB_VESA create mode 100644 baseconfig/CONFIG_FB_VGA16 create mode 100644 baseconfig/CONFIG_FB_VIA create mode 100644 baseconfig/CONFIG_FB_VIA_DIRECT_PROCFS create mode 100644 baseconfig/CONFIG_FB_VIRTUAL create mode 100644 baseconfig/CONFIG_FB_VOODOO1 create mode 100644 baseconfig/CONFIG_FB_VT8623 create mode 100644 baseconfig/CONFIG_FB_XGI create mode 100644 baseconfig/CONFIG_FCOE create mode 100644 baseconfig/CONFIG_FCOE_FNIC create mode 100644 baseconfig/CONFIG_FDDI create mode 100644 baseconfig/CONFIG_FEALNX create mode 100644 baseconfig/CONFIG_FHANDLE create mode 100644 baseconfig/CONFIG_FIREWIRE create mode 100644 baseconfig/CONFIG_FIREWIRE_NET create mode 100644 baseconfig/CONFIG_FIREWIRE_NOSY create mode 100644 baseconfig/CONFIG_FIREWIRE_OHCI create mode 100644 baseconfig/CONFIG_FIREWIRE_SBP2 create mode 100644 baseconfig/CONFIG_FIREWIRE_SERIAL create mode 100644 baseconfig/CONFIG_FIRMWARE_EDID create mode 100644 baseconfig/CONFIG_FIRMWARE_IN_KERNEL create mode 100644 baseconfig/CONFIG_FIXED_PHY create mode 100644 baseconfig/CONFIG_FM10K create mode 100644 baseconfig/CONFIG_FMC create mode 100644 baseconfig/CONFIG_FMC_CHARDEV create mode 100644 baseconfig/CONFIG_FMC_FAKEDEV create mode 100644 baseconfig/CONFIG_FMC_TRIVIAL create mode 100644 baseconfig/CONFIG_FMC_WRITE_EEPROM create mode 100644 baseconfig/CONFIG_FONTS create mode 100644 baseconfig/CONFIG_FORCEDETH create mode 100644 baseconfig/CONFIG_FPGA create mode 100644 baseconfig/CONFIG_FRAMEBUFFER_CONSOLE create mode 100644 baseconfig/CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY create mode 100644 baseconfig/CONFIG_FRAMEBUFFER_CONSOLE_ROTATION create mode 100644 baseconfig/CONFIG_FRAME_POINTER create mode 100644 baseconfig/CONFIG_FRAME_WARN create mode 100644 baseconfig/CONFIG_FRONTSWAP create mode 100644 baseconfig/CONFIG_FSCACHE create mode 100644 baseconfig/CONFIG_FSCACHE_DEBUG create mode 100644 baseconfig/CONFIG_FSCACHE_HISTOGRAM create mode 100644 baseconfig/CONFIG_FSCACHE_OBJECT_LIST create mode 100644 baseconfig/CONFIG_FSCACHE_STATS create mode 100644 baseconfig/CONFIG_FSL_EDMA create mode 100644 baseconfig/CONFIG_FSL_PQ_MDIO create mode 100644 baseconfig/CONFIG_FSNOTIFY create mode 100644 baseconfig/CONFIG_FS_DAX create mode 100644 baseconfig/CONFIG_FS_ENCRYPTION create mode 100644 baseconfig/CONFIG_FS_MBCACHE create mode 100644 baseconfig/CONFIG_FTL create mode 100644 baseconfig/CONFIG_FTRACE create mode 100644 baseconfig/CONFIG_FTRACE_MCOUNT_RECORD create mode 100644 baseconfig/CONFIG_FTRACE_STARTUP_TEST create mode 100644 baseconfig/CONFIG_FTRACE_SYSCALLS create mode 100644 baseconfig/CONFIG_FUNCTION_GRAPH_TRACER create mode 100644 baseconfig/CONFIG_FUNCTION_PROFILER create mode 100644 baseconfig/CONFIG_FUNCTION_TRACER create mode 100644 baseconfig/CONFIG_FUSE_FS create mode 100644 baseconfig/CONFIG_FUSION create mode 100644 baseconfig/CONFIG_FUSION_CTL create mode 100644 baseconfig/CONFIG_FUSION_FC create mode 100644 baseconfig/CONFIG_FUSION_LAN create mode 100644 baseconfig/CONFIG_FUSION_LOGGING create mode 100644 baseconfig/CONFIG_FUSION_MAX_SGE create mode 100644 baseconfig/CONFIG_FUSION_SAS create mode 100644 baseconfig/CONFIG_FUSION_SPI create mode 100644 baseconfig/CONFIG_FUTEX create mode 100644 baseconfig/CONFIG_FW_CFG_SYSFS create mode 100644 baseconfig/CONFIG_FW_CFG_SYSFS_CMDLINE create mode 100644 baseconfig/CONFIG_FW_LOADER create mode 100644 baseconfig/CONFIG_FW_LOADER_USER_HELPER create mode 100644 baseconfig/CONFIG_FW_LOADER_USER_HELPER_FALLBACK create mode 100644 baseconfig/CONFIG_GACT_PROB create mode 100644 baseconfig/CONFIG_GAMEPORT create mode 100644 baseconfig/CONFIG_GAMEPORT_EMU10K1 create mode 100644 baseconfig/CONFIG_GAMEPORT_FM801 create mode 100644 baseconfig/CONFIG_GAMEPORT_L4 create mode 100644 baseconfig/CONFIG_GAMEPORT_NS558 create mode 100644 baseconfig/CONFIG_GCC_PLUGINS create mode 100644 baseconfig/CONFIG_GCOV_KERNEL create mode 100644 baseconfig/CONFIG_GDB_SCRIPTS create mode 100644 baseconfig/CONFIG_GENERIC_ADC_BATTERY create mode 100644 baseconfig/CONFIG_GENERIC_ADC_THERMAL create mode 100644 baseconfig/CONFIG_GENERIC_PHY create mode 100644 baseconfig/CONFIG_GENEVE create mode 100644 baseconfig/CONFIG_GENWQE create mode 100644 baseconfig/CONFIG_GEN_RTC create mode 100644 baseconfig/CONFIG_GFS2_FS create mode 100644 baseconfig/CONFIG_GFS2_FS_LOCKING_DLM create mode 100644 baseconfig/CONFIG_GIGASET_BASE create mode 100644 baseconfig/CONFIG_GIGASET_CAPI create mode 100644 baseconfig/CONFIG_GIGASET_DEBUG create mode 100644 baseconfig/CONFIG_GIGASET_M101 create mode 100644 baseconfig/CONFIG_GIGASET_M105 create mode 100644 baseconfig/CONFIG_GIRBIL_DONGLE create mode 100644 baseconfig/CONFIG_GLOB_SELFTEST create mode 100644 baseconfig/CONFIG_GOLDFISH create mode 100644 baseconfig/CONFIG_GOOGLE_FIRMWARE create mode 100644 baseconfig/CONFIG_GP2AP020A00F create mode 100644 baseconfig/CONFIG_GPIOLIB create mode 100644 baseconfig/CONFIG_GPIO_104_DIO_48E create mode 100644 baseconfig/CONFIG_GPIO_104_IDIO_16 create mode 100644 baseconfig/CONFIG_GPIO_74X164 create mode 100644 baseconfig/CONFIG_GPIO_ADNP create mode 100644 baseconfig/CONFIG_GPIO_ADP5588 create mode 100644 baseconfig/CONFIG_GPIO_ALTERA create mode 100644 baseconfig/CONFIG_GPIO_AMD8111 create mode 100644 baseconfig/CONFIG_GPIO_AMDPT create mode 100644 baseconfig/CONFIG_GPIO_BT8XX create mode 100644 baseconfig/CONFIG_GPIO_CS5535 create mode 100644 baseconfig/CONFIG_GPIO_DWAPB create mode 100644 baseconfig/CONFIG_GPIO_GENERIC_PLATFORM create mode 100644 baseconfig/CONFIG_GPIO_GRGPIO create mode 100644 baseconfig/CONFIG_GPIO_IT87 create mode 100644 baseconfig/CONFIG_GPIO_MAX7300 create mode 100644 baseconfig/CONFIG_GPIO_MAX7301 create mode 100644 baseconfig/CONFIG_GPIO_MAX732X create mode 100644 baseconfig/CONFIG_GPIO_MC33880 create mode 100644 baseconfig/CONFIG_GPIO_MCP23S08 create mode 100644 baseconfig/CONFIG_GPIO_ML_IOH create mode 100644 baseconfig/CONFIG_GPIO_MOCKUP create mode 100644 baseconfig/CONFIG_GPIO_MPC8XXX create mode 100644 baseconfig/CONFIG_GPIO_PCA953X create mode 100644 baseconfig/CONFIG_GPIO_PCF857X create mode 100644 baseconfig/CONFIG_GPIO_PCH create mode 100644 baseconfig/CONFIG_GPIO_PISOSR create mode 100644 baseconfig/CONFIG_GPIO_RDC321X create mode 100644 baseconfig/CONFIG_GPIO_SCH create mode 100644 baseconfig/CONFIG_GPIO_SCH311X create mode 100644 baseconfig/CONFIG_GPIO_SX150X create mode 100644 baseconfig/CONFIG_GPIO_SYSCON create mode 100644 baseconfig/CONFIG_GPIO_SYSFS create mode 100644 baseconfig/CONFIG_GPIO_TPIC2810 create mode 100644 baseconfig/CONFIG_GPIO_TS4900 create mode 100644 baseconfig/CONFIG_GPIO_TS5500 create mode 100644 baseconfig/CONFIG_GPIO_VIPERBOARD create mode 100644 baseconfig/CONFIG_GPIO_VX855 create mode 100644 baseconfig/CONFIG_GPIO_WATCHDOG create mode 100644 baseconfig/CONFIG_GPIO_WS16C48 create mode 100644 baseconfig/CONFIG_GPIO_XILINX create mode 100644 baseconfig/CONFIG_GPIO_ZX create mode 100644 baseconfig/CONFIG_GREENASIA_FF create mode 100644 baseconfig/CONFIG_GREYBUS create mode 100644 baseconfig/CONFIG_GS_FPGABOOT create mode 100644 baseconfig/CONFIG_GTP create mode 100644 baseconfig/CONFIG_HAMACHI create mode 100644 baseconfig/CONFIG_HAMRADIO create mode 100644 baseconfig/CONFIG_HANGCHECK_TIMER create mode 100644 baseconfig/CONFIG_HAPPYMEAL create mode 100644 baseconfig/CONFIG_HARDENED_USERCOPY create mode 100644 baseconfig/CONFIG_HDC100X create mode 100644 baseconfig/CONFIG_HEADERS_CHECK create mode 100644 baseconfig/CONFIG_HERMES create mode 100644 baseconfig/CONFIG_HERMES_CACHE_FW_ON_INIT create mode 100644 baseconfig/CONFIG_HERMES_PRISM create mode 100644 baseconfig/CONFIG_HFSPLUS_FS create mode 100644 baseconfig/CONFIG_HFSPLUS_FS_POSIX_ACL create mode 100644 baseconfig/CONFIG_HFS_FS create mode 100644 baseconfig/CONFIG_HI8435 create mode 100644 baseconfig/CONFIG_HIBERNATION create mode 100644 baseconfig/CONFIG_HID create mode 100644 baseconfig/CONFIG_HIDRAW create mode 100644 baseconfig/CONFIG_HID_A4TECH create mode 100644 baseconfig/CONFIG_HID_ACRUX create mode 100644 baseconfig/CONFIG_HID_ACRUX_FF create mode 100644 baseconfig/CONFIG_HID_ALPS create mode 100644 baseconfig/CONFIG_HID_APPLE create mode 100644 baseconfig/CONFIG_HID_APPLEIR create mode 100644 baseconfig/CONFIG_HID_ASUS create mode 100644 baseconfig/CONFIG_HID_AUREAL create mode 100644 baseconfig/CONFIG_HID_BATTERY_STRENGTH create mode 100644 baseconfig/CONFIG_HID_BELKIN create mode 100644 baseconfig/CONFIG_HID_BETOP_FF create mode 100644 baseconfig/CONFIG_HID_CHERRY create mode 100644 baseconfig/CONFIG_HID_CHICONY create mode 100644 baseconfig/CONFIG_HID_CMEDIA create mode 100644 baseconfig/CONFIG_HID_CORSAIR create mode 100644 baseconfig/CONFIG_HID_CP2112 create mode 100644 baseconfig/CONFIG_HID_CYPRESS create mode 100644 baseconfig/CONFIG_HID_DRAGONRISE create mode 100644 baseconfig/CONFIG_HID_ELECOM create mode 100644 baseconfig/CONFIG_HID_ELO create mode 100644 baseconfig/CONFIG_HID_EMS_FF create mode 100644 baseconfig/CONFIG_HID_EZKEY create mode 100644 baseconfig/CONFIG_HID_GEMBIRD create mode 100644 baseconfig/CONFIG_HID_GENERIC create mode 100644 baseconfig/CONFIG_HID_GFRM create mode 100644 baseconfig/CONFIG_HID_GREENASIA create mode 100644 baseconfig/CONFIG_HID_GT683R create mode 100644 baseconfig/CONFIG_HID_GYRATION create mode 100644 baseconfig/CONFIG_HID_HOLTEK create mode 100644 baseconfig/CONFIG_HID_ICADE create mode 100644 baseconfig/CONFIG_HID_KENSINGTON create mode 100644 baseconfig/CONFIG_HID_KEYTOUCH create mode 100644 baseconfig/CONFIG_HID_KYE create mode 100644 baseconfig/CONFIG_HID_LCPOWER create mode 100644 baseconfig/CONFIG_HID_LED create mode 100644 baseconfig/CONFIG_HID_LENOVO create mode 100644 baseconfig/CONFIG_HID_LOGITECH create mode 100644 baseconfig/CONFIG_HID_LOGITECH_DJ create mode 100644 baseconfig/CONFIG_HID_LOGITECH_HIDPP create mode 100644 baseconfig/CONFIG_HID_MAGICMOUSE create mode 100644 baseconfig/CONFIG_HID_MAYFLASH create mode 100644 baseconfig/CONFIG_HID_MICROSOFT create mode 100644 baseconfig/CONFIG_HID_MONTEREY create mode 100644 baseconfig/CONFIG_HID_MULTITOUCH create mode 100644 baseconfig/CONFIG_HID_NTRIG create mode 100644 baseconfig/CONFIG_HID_ORTEK create mode 100644 baseconfig/CONFIG_HID_PANTHERLORD create mode 100644 baseconfig/CONFIG_HID_PENMOUNT create mode 100644 baseconfig/CONFIG_HID_PETALYNX create mode 100644 baseconfig/CONFIG_HID_PICOLCD create mode 100644 baseconfig/CONFIG_HID_PID create mode 100644 baseconfig/CONFIG_HID_PLANTRONICS create mode 100644 baseconfig/CONFIG_HID_PRIMAX create mode 100644 baseconfig/CONFIG_HID_PRODIKEYS create mode 100644 baseconfig/CONFIG_HID_RMI create mode 100644 baseconfig/CONFIG_HID_ROCCAT create mode 100644 baseconfig/CONFIG_HID_SAITEK create mode 100644 baseconfig/CONFIG_HID_SAMSUNG create mode 100644 baseconfig/CONFIG_HID_SENSOR_ACCEL_3D create mode 100644 baseconfig/CONFIG_HID_SENSOR_ALS create mode 100644 baseconfig/CONFIG_HID_SENSOR_CUSTOM_SENSOR create mode 100644 baseconfig/CONFIG_HID_SENSOR_DEVICE_ROTATION create mode 100644 baseconfig/CONFIG_HID_SENSOR_GYRO_3D create mode 100644 baseconfig/CONFIG_HID_SENSOR_HUB create mode 100644 baseconfig/CONFIG_HID_SENSOR_IIO_COMMON create mode 100644 baseconfig/CONFIG_HID_SENSOR_IIO_TRIGGER create mode 100644 baseconfig/CONFIG_HID_SENSOR_INCLINOMETER_3D create mode 100644 baseconfig/CONFIG_HID_SENSOR_MAGNETOMETER_3D create mode 100644 baseconfig/CONFIG_HID_SENSOR_PRESS create mode 100644 baseconfig/CONFIG_HID_SENSOR_PROX create mode 100644 baseconfig/CONFIG_HID_SMARTJOYPLUS create mode 100644 baseconfig/CONFIG_HID_SONY create mode 100644 baseconfig/CONFIG_HID_SPEEDLINK create mode 100644 baseconfig/CONFIG_HID_STEELSERIES create mode 100644 baseconfig/CONFIG_HID_SUNPLUS create mode 100644 baseconfig/CONFIG_HID_THINGM create mode 100644 baseconfig/CONFIG_HID_THRUSTMASTER create mode 100644 baseconfig/CONFIG_HID_TIVO create mode 100644 baseconfig/CONFIG_HID_TOPSEED create mode 100644 baseconfig/CONFIG_HID_TWINHAN create mode 100644 baseconfig/CONFIG_HID_UCLOGIC create mode 100644 baseconfig/CONFIG_HID_UDRAW_PS3 create mode 100644 baseconfig/CONFIG_HID_WACOM create mode 100644 baseconfig/CONFIG_HID_WALTOP create mode 100644 baseconfig/CONFIG_HID_WIIMOTE create mode 100644 baseconfig/CONFIG_HID_XINMO create mode 100644 baseconfig/CONFIG_HID_ZEROPLUS create mode 100644 baseconfig/CONFIG_HID_ZYDACRON create mode 100644 baseconfig/CONFIG_HIGH_RES_TIMERS create mode 100644 baseconfig/CONFIG_HIPPI create mode 100644 baseconfig/CONFIG_HISAX_16_3 create mode 100644 baseconfig/CONFIG_HISAX_1TR6 create mode 100644 baseconfig/CONFIG_HISAX_AVM_A1_CS create mode 100644 baseconfig/CONFIG_HISAX_AVM_A1_PCMCIA create mode 100644 baseconfig/CONFIG_HISAX_BKM_A4T create mode 100644 baseconfig/CONFIG_HISAX_DEBUG create mode 100644 baseconfig/CONFIG_HISAX_DIEHLDIVA create mode 100644 baseconfig/CONFIG_HISAX_ELSA create mode 100644 baseconfig/CONFIG_HISAX_ELSA_CS create mode 100644 baseconfig/CONFIG_HISAX_ENTERNOW_PCI create mode 100644 baseconfig/CONFIG_HISAX_EURO create mode 100644 baseconfig/CONFIG_HISAX_FRITZPCI create mode 100644 baseconfig/CONFIG_HISAX_FRITZ_PCIPNP create mode 100644 baseconfig/CONFIG_HISAX_GAZEL create mode 100644 baseconfig/CONFIG_HISAX_HFC4S8S create mode 100644 baseconfig/CONFIG_HISAX_HFCUSB create mode 100644 baseconfig/CONFIG_HISAX_HFC_PCI create mode 100644 baseconfig/CONFIG_HISAX_HFC_SX create mode 100644 baseconfig/CONFIG_HISAX_MAX_CARDS create mode 100644 baseconfig/CONFIG_HISAX_NETJET create mode 100644 baseconfig/CONFIG_HISAX_NETJET_U create mode 100644 baseconfig/CONFIG_HISAX_NI1 create mode 100644 baseconfig/CONFIG_HISAX_NICCY create mode 100644 baseconfig/CONFIG_HISAX_NO_KEYPAD create mode 100644 baseconfig/CONFIG_HISAX_NO_LLC create mode 100644 baseconfig/CONFIG_HISAX_NO_SENDCOMPLETE create mode 100644 baseconfig/CONFIG_HISAX_S0BOX create mode 100644 baseconfig/CONFIG_HISAX_SCT_QUADRO create mode 100644 baseconfig/CONFIG_HISAX_SEDLBAUER create mode 100644 baseconfig/CONFIG_HISAX_SEDLBAUER_CS create mode 100644 baseconfig/CONFIG_HISAX_ST5481 create mode 100644 baseconfig/CONFIG_HISAX_TELESPCI create mode 100644 baseconfig/CONFIG_HISAX_TELES_CS create mode 100644 baseconfig/CONFIG_HISAX_W6692 create mode 100644 baseconfig/CONFIG_HIST_TRIGGERS create mode 100644 baseconfig/CONFIG_HMC6352 create mode 100644 baseconfig/CONFIG_HMC_DRV create mode 100644 baseconfig/CONFIG_HOLTEK_FF create mode 100644 baseconfig/CONFIG_HOSTAP create mode 100644 baseconfig/CONFIG_HOTPLUG create mode 100644 baseconfig/CONFIG_HOTPLUG_CPU create mode 100644 baseconfig/CONFIG_HOTPLUG_PCI create mode 100644 baseconfig/CONFIG_HOTPLUG_PCI_ACPI create mode 100644 baseconfig/CONFIG_HOTPLUG_PCI_ACPI_IBM create mode 100644 baseconfig/CONFIG_HOTPLUG_PCI_CPCI create mode 100644 baseconfig/CONFIG_HOTPLUG_PCI_PCIE create mode 100644 baseconfig/CONFIG_HOTPLUG_PCI_SHPC create mode 100644 baseconfig/CONFIG_HP03 create mode 100644 baseconfig/CONFIG_HP206C create mode 100644 baseconfig/CONFIG_HPFS_FS create mode 100644 baseconfig/CONFIG_HP_ILO create mode 100644 baseconfig/CONFIG_HSI create mode 100644 baseconfig/CONFIG_HSR create mode 100644 baseconfig/CONFIG_HSU_DMA create mode 100644 baseconfig/CONFIG_HSU_DMA_PCI create mode 100644 baseconfig/CONFIG_HT16K33 create mode 100644 baseconfig/CONFIG_HTC_EGPIO create mode 100644 baseconfig/CONFIG_HTC_I2CPLD create mode 100644 baseconfig/CONFIG_HTC_PASIC3 create mode 100644 baseconfig/CONFIG_HTS221 create mode 100644 baseconfig/CONFIG_HTU21 create mode 100644 baseconfig/CONFIG_HT_IRQ create mode 100644 baseconfig/CONFIG_HUGETLBFS create mode 100644 baseconfig/CONFIG_HUGETLB_PAGE create mode 100644 baseconfig/CONFIG_HWLAT_TRACER create mode 100644 baseconfig/CONFIG_HWMON create mode 100644 baseconfig/CONFIG_HWMON_DEBUG_CHIP create mode 100644 baseconfig/CONFIG_HWPOISON_INJECT create mode 100644 baseconfig/CONFIG_HWSPINLOCK create mode 100644 baseconfig/CONFIG_HW_CONSOLE create mode 100644 baseconfig/CONFIG_HW_RANDOM create mode 100644 baseconfig/CONFIG_HW_RANDOM_OMAP create mode 100644 baseconfig/CONFIG_HW_RANDOM_TIMERIOMEM create mode 100644 baseconfig/CONFIG_HW_RANDOM_TPM create mode 100644 baseconfig/CONFIG_HW_RANDOM_VIRTIO create mode 100644 baseconfig/CONFIG_HYSDN create mode 100644 baseconfig/CONFIG_HYSDN_CAPI create mode 100644 baseconfig/CONFIG_HZ_1000 create mode 100644 baseconfig/CONFIG_I2C create mode 100644 baseconfig/CONFIG_I2C_ALGOBIT create mode 100644 baseconfig/CONFIG_I2C_ALGOPCA create mode 100644 baseconfig/CONFIG_I2C_ALGOPCF create mode 100644 baseconfig/CONFIG_I2C_ALI1535 create mode 100644 baseconfig/CONFIG_I2C_ALI1563 create mode 100644 baseconfig/CONFIG_I2C_ALI15X3 create mode 100644 baseconfig/CONFIG_I2C_AMD756 create mode 100644 baseconfig/CONFIG_I2C_AMD756_S4882 create mode 100644 baseconfig/CONFIG_I2C_AMD8111 create mode 100644 baseconfig/CONFIG_I2C_ARB_GPIO_CHALLENGE create mode 100644 baseconfig/CONFIG_I2C_BCM2048 create mode 100644 baseconfig/CONFIG_I2C_CADENCE create mode 100644 baseconfig/CONFIG_I2C_CBUS_GPIO create mode 100644 baseconfig/CONFIG_I2C_CHARDEV create mode 100644 baseconfig/CONFIG_I2C_COMPAT create mode 100644 baseconfig/CONFIG_I2C_DEBUG_ALGO create mode 100644 baseconfig/CONFIG_I2C_DEBUG_BUS create mode 100644 baseconfig/CONFIG_I2C_DEBUG_CORE create mode 100644 baseconfig/CONFIG_I2C_DEMUX_PINCTRL create mode 100644 baseconfig/CONFIG_I2C_DESIGNWARE create mode 100644 baseconfig/CONFIG_I2C_DESIGNWARE_PCI create mode 100644 baseconfig/CONFIG_I2C_DESIGNWARE_PLATFORM create mode 100644 baseconfig/CONFIG_I2C_DIOLAN_U2C create mode 100644 baseconfig/CONFIG_I2C_EG20T create mode 100644 baseconfig/CONFIG_I2C_EMEV2 create mode 100644 baseconfig/CONFIG_I2C_GPIO create mode 100644 baseconfig/CONFIG_I2C_HELPER_AUTO create mode 100644 baseconfig/CONFIG_I2C_HID create mode 100644 baseconfig/CONFIG_I2C_I801 create mode 100644 baseconfig/CONFIG_I2C_IMX_LPI2C create mode 100644 baseconfig/CONFIG_I2C_ISCH create mode 100644 baseconfig/CONFIG_I2C_MLXCPLD create mode 100644 baseconfig/CONFIG_I2C_MUX create mode 100644 baseconfig/CONFIG_I2C_MUX_GPIO create mode 100644 baseconfig/CONFIG_I2C_MUX_MLXCPLD create mode 100644 baseconfig/CONFIG_I2C_MUX_PCA9541 create mode 100644 baseconfig/CONFIG_I2C_MUX_PCA954x create mode 100644 baseconfig/CONFIG_I2C_MUX_PINCTRL create mode 100644 baseconfig/CONFIG_I2C_MUX_REG create mode 100644 baseconfig/CONFIG_I2C_NFORCE2 create mode 100644 baseconfig/CONFIG_I2C_NFORCE2_S4985 create mode 100644 baseconfig/CONFIG_I2C_OCORES create mode 100644 baseconfig/CONFIG_I2C_PARPORT create mode 100644 baseconfig/CONFIG_I2C_PARPORT_LIGHT create mode 100644 baseconfig/CONFIG_I2C_PCA_PLATFORM create mode 100644 baseconfig/CONFIG_I2C_PIIX4 create mode 100644 baseconfig/CONFIG_I2C_PXA create mode 100644 baseconfig/CONFIG_I2C_PXA_SLAVE create mode 100644 baseconfig/CONFIG_I2C_RK3X create mode 100644 baseconfig/CONFIG_I2C_ROBOTFUZZ_OSIF create mode 100644 baseconfig/CONFIG_I2C_SI470X create mode 100644 baseconfig/CONFIG_I2C_SI4713 create mode 100644 baseconfig/CONFIG_I2C_SIMTEC create mode 100644 baseconfig/CONFIG_I2C_SIS5595 create mode 100644 baseconfig/CONFIG_I2C_SIS630 create mode 100644 baseconfig/CONFIG_I2C_SIS96X create mode 100644 baseconfig/CONFIG_I2C_SLAVE create mode 100644 baseconfig/CONFIG_I2C_SLAVE_EEPROM create mode 100644 baseconfig/CONFIG_I2C_STUB create mode 100644 baseconfig/CONFIG_I2C_TAOS_EVM create mode 100644 baseconfig/CONFIG_I2C_TINY_USB create mode 100644 baseconfig/CONFIG_I2C_VIA create mode 100644 baseconfig/CONFIG_I2C_VIAPRO create mode 100644 baseconfig/CONFIG_I2C_VIPERBOARD create mode 100644 baseconfig/CONFIG_I2C_XILINX create mode 100644 baseconfig/CONFIG_I2O create mode 100644 baseconfig/CONFIG_I40E create mode 100644 baseconfig/CONFIG_I40EVF create mode 100644 baseconfig/CONFIG_I40E_DCB create mode 100644 baseconfig/CONFIG_I40E_FCOE create mode 100644 baseconfig/CONFIG_I6300ESB_WDT create mode 100644 baseconfig/CONFIG_I82092 create mode 100644 baseconfig/CONFIG_IAQCORE create mode 100644 baseconfig/CONFIG_IB700_WDT create mode 100644 baseconfig/CONFIG_IBMASR create mode 100644 baseconfig/CONFIG_ICPLUS_PHY create mode 100644 baseconfig/CONFIG_ICS932S401 create mode 100644 baseconfig/CONFIG_IDE create mode 100644 baseconfig/CONFIG_IDLE_PAGE_TRACKING create mode 100644 baseconfig/CONFIG_IDMA64 create mode 100644 baseconfig/CONFIG_IEEE802154 create mode 100644 baseconfig/CONFIG_IEEE802154_6LOWPAN create mode 100644 baseconfig/CONFIG_IEEE802154_ADF7242 create mode 100644 baseconfig/CONFIG_IEEE802154_AT86RF230 create mode 100644 baseconfig/CONFIG_IEEE802154_AT86RF230_DEBUGFS create mode 100644 baseconfig/CONFIG_IEEE802154_ATUSB create mode 100644 baseconfig/CONFIG_IEEE802154_CC2520 create mode 100644 baseconfig/CONFIG_IEEE802154_DRIVERS create mode 100644 baseconfig/CONFIG_IEEE802154_FAKELB create mode 100644 baseconfig/CONFIG_IEEE802154_MRF24J40 create mode 100644 baseconfig/CONFIG_IEEE802154_NL802154_EXPERIMENTAL create mode 100644 baseconfig/CONFIG_IEEE802154_SOCKET create mode 100644 baseconfig/CONFIG_IFB create mode 100644 baseconfig/CONFIG_IGB create mode 100644 baseconfig/CONFIG_IGBVF create mode 100644 baseconfig/CONFIG_IGB_DCA create mode 100644 baseconfig/CONFIG_IGB_HWMON create mode 100644 baseconfig/CONFIG_IIO create mode 100644 baseconfig/CONFIG_IIO_BUFFER create mode 100644 baseconfig/CONFIG_IIO_BUFFER_CB create mode 100644 baseconfig/CONFIG_IIO_CONFIGFS create mode 100644 baseconfig/CONFIG_IIO_CONSUMERS_PER_TRIGGER create mode 100644 baseconfig/CONFIG_IIO_CROS_EC_SENSORS create mode 100644 baseconfig/CONFIG_IIO_CROS_EC_SENSORS_COR create mode 100644 baseconfig/CONFIG_IIO_CROS_EC_SENSORS_CORE create mode 100644 baseconfig/CONFIG_IIO_HRTIMER_TRIGGER create mode 100644 baseconfig/CONFIG_IIO_INTERRUPT_TRIGGER create mode 100644 baseconfig/CONFIG_IIO_KFIFO_BUF create mode 100644 baseconfig/CONFIG_IIO_SIMPLE_DUMMY create mode 100644 baseconfig/CONFIG_IIO_SSP_SENSORHUB create mode 100644 baseconfig/CONFIG_IIO_ST_ACCEL_3AXIS create mode 100644 baseconfig/CONFIG_IIO_ST_ACCEL_I2C_3AXIS create mode 100644 baseconfig/CONFIG_IIO_ST_ACCEL_SPI_3AXIS create mode 100644 baseconfig/CONFIG_IIO_ST_GYRO_3AXIS create mode 100644 baseconfig/CONFIG_IIO_ST_GYRO_I2C_3AXIS create mode 100644 baseconfig/CONFIG_IIO_ST_GYRO_SPI_3AXIS create mode 100644 baseconfig/CONFIG_IIO_ST_MAGN_3AXIS create mode 100644 baseconfig/CONFIG_IIO_ST_PRESS create mode 100644 baseconfig/CONFIG_IIO_SW_DEVICE create mode 100644 baseconfig/CONFIG_IIO_SW_TRIGGER create mode 100644 baseconfig/CONFIG_IIO_SYSFS_TRIGGER create mode 100644 baseconfig/CONFIG_IIO_TIGHTLOOP_TRIGGER create mode 100644 baseconfig/CONFIG_IIO_TRIGGER create mode 100644 baseconfig/CONFIG_IIO_TRIGGERED_BUFFER create mode 100644 baseconfig/CONFIG_IKCONFIG create mode 100644 baseconfig/CONFIG_IMA create mode 100644 baseconfig/CONFIG_IMA_LSM_RULES create mode 100644 baseconfig/CONFIG_IMA_MEASURE_PCR_IDX create mode 100644 baseconfig/CONFIG_IMG_ASCII_LCD create mode 100644 baseconfig/CONFIG_INA2XX_ADC create mode 100644 baseconfig/CONFIG_INET create mode 100644 baseconfig/CONFIG_INET6_AH create mode 100644 baseconfig/CONFIG_INET6_ESP create mode 100644 baseconfig/CONFIG_INET6_IPCOMP create mode 100644 baseconfig/CONFIG_INET6_XFRM_MODE_BEET create mode 100644 baseconfig/CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION create mode 100644 baseconfig/CONFIG_INET6_XFRM_MODE_TRANSPORT create mode 100644 baseconfig/CONFIG_INET6_XFRM_MODE_TUNNEL create mode 100644 baseconfig/CONFIG_INET_AH create mode 100644 baseconfig/CONFIG_INET_DIAG create mode 100644 baseconfig/CONFIG_INET_DIAG_DESTROY create mode 100644 baseconfig/CONFIG_INET_ESP create mode 100644 baseconfig/CONFIG_INET_IPCOMP create mode 100644 baseconfig/CONFIG_INET_RAW_DIAG create mode 100644 baseconfig/CONFIG_INET_TUNNEL create mode 100644 baseconfig/CONFIG_INET_UDP_DIAG create mode 100644 baseconfig/CONFIG_INET_XFRM_MODE_BEET create mode 100644 baseconfig/CONFIG_INET_XFRM_MODE_TRANSPORT create mode 100644 baseconfig/CONFIG_INET_XFRM_MODE_TUNNEL create mode 100644 baseconfig/CONFIG_INFINIBAND create mode 100644 baseconfig/CONFIG_INFINIBAND_CXGB3 create mode 100644 baseconfig/CONFIG_INFINIBAND_CXGB3_DEBUG create mode 100644 baseconfig/CONFIG_INFINIBAND_CXGB4 create mode 100644 baseconfig/CONFIG_INFINIBAND_I40IW create mode 100644 baseconfig/CONFIG_INFINIBAND_IPOIB create mode 100644 baseconfig/CONFIG_INFINIBAND_IPOIB_CM create mode 100644 baseconfig/CONFIG_INFINIBAND_IPOIB_DEBUG create mode 100644 baseconfig/CONFIG_INFINIBAND_IPOIB_DEBUG_DATA create mode 100644 baseconfig/CONFIG_INFINIBAND_ISER create mode 100644 baseconfig/CONFIG_INFINIBAND_ISERT create mode 100644 baseconfig/CONFIG_INFINIBAND_MTHCA create mode 100644 baseconfig/CONFIG_INFINIBAND_NES create mode 100644 baseconfig/CONFIG_INFINIBAND_NES_DEBUG create mode 100644 baseconfig/CONFIG_INFINIBAND_OCRDMA create mode 100644 baseconfig/CONFIG_INFINIBAND_ON_DEMAND_PAGING create mode 100644 baseconfig/CONFIG_INFINIBAND_QEDR create mode 100644 baseconfig/CONFIG_INFINIBAND_QIB create mode 100644 baseconfig/CONFIG_INFINIBAND_QIB_DCA create mode 100644 baseconfig/CONFIG_INFINIBAND_RDMAVT create mode 100644 baseconfig/CONFIG_INFINIBAND_SRP create mode 100644 baseconfig/CONFIG_INFINIBAND_SRPT create mode 100644 baseconfig/CONFIG_INFINIBAND_USER_ACCESS create mode 100644 baseconfig/CONFIG_INFINIBAND_USER_MAD create mode 100644 baseconfig/CONFIG_INFINIBAND_USNIC create mode 100644 baseconfig/CONFIG_INFINIBAND_VMWARE_PVRDMA create mode 100644 baseconfig/CONFIG_INFTL create mode 100644 baseconfig/CONFIG_INITRAMFS_SOURCE create mode 100644 baseconfig/CONFIG_INOTIFY create mode 100644 baseconfig/CONFIG_INOTIFY_USER create mode 100644 baseconfig/CONFIG_INPUT create mode 100644 baseconfig/CONFIG_INPUT_AD714X create mode 100644 baseconfig/CONFIG_INPUT_ADXL34X create mode 100644 baseconfig/CONFIG_INPUT_APANEL create mode 100644 baseconfig/CONFIG_INPUT_ATI_REMOTE2 create mode 100644 baseconfig/CONFIG_INPUT_ATLAS_BTNS create mode 100644 baseconfig/CONFIG_INPUT_ATMEL_CAPTOUCH create mode 100644 baseconfig/CONFIG_INPUT_BMA150 create mode 100644 baseconfig/CONFIG_INPUT_CM109 create mode 100644 baseconfig/CONFIG_INPUT_CMA3000 create mode 100644 baseconfig/CONFIG_INPUT_CMA3000_I2C create mode 100644 baseconfig/CONFIG_INPUT_DRV260X_HAPTICS create mode 100644 baseconfig/CONFIG_INPUT_DRV2665_HAPTICS create mode 100644 baseconfig/CONFIG_INPUT_DRV2667_HAPTICS create mode 100644 baseconfig/CONFIG_INPUT_E3X0_BUTTON create mode 100644 baseconfig/CONFIG_INPUT_EVBUG create mode 100644 baseconfig/CONFIG_INPUT_EVDEV create mode 100644 baseconfig/CONFIG_INPUT_FF_MEMLESS create mode 100644 baseconfig/CONFIG_INPUT_GP2A create mode 100644 baseconfig/CONFIG_INPUT_GPIO create mode 100644 baseconfig/CONFIG_INPUT_GPIO_BEEPER create mode 100644 baseconfig/CONFIG_INPUT_GPIO_DECODER create mode 100644 baseconfig/CONFIG_INPUT_GPIO_ROTARY_ENCODER create mode 100644 baseconfig/CONFIG_INPUT_GPIO_TILT_POLLED create mode 100644 baseconfig/CONFIG_INPUT_IDEAPAD_SLIDEBAR create mode 100644 baseconfig/CONFIG_INPUT_IMS_PCU create mode 100644 baseconfig/CONFIG_INPUT_JOYDEV create mode 100644 baseconfig/CONFIG_INPUT_JOYSTICK create mode 100644 baseconfig/CONFIG_INPUT_KEYBOARD create mode 100644 baseconfig/CONFIG_INPUT_KEYSPAN_REMOTE create mode 100644 baseconfig/CONFIG_INPUT_KXTJ9 create mode 100644 baseconfig/CONFIG_INPUT_KXTJ9_POLLED_MODE create mode 100644 baseconfig/CONFIG_INPUT_LEDS create mode 100644 baseconfig/CONFIG_INPUT_MATRIXKMAP create mode 100644 baseconfig/CONFIG_INPUT_MISC create mode 100644 baseconfig/CONFIG_INPUT_MMA8450 create mode 100644 baseconfig/CONFIG_INPUT_MOUSE create mode 100644 baseconfig/CONFIG_INPUT_MOUSEDEV create mode 100644 baseconfig/CONFIG_INPUT_MOUSEDEV_PSAUX create mode 100644 baseconfig/CONFIG_INPUT_MOUSEDEV_SCREEN_X create mode 100644 baseconfig/CONFIG_INPUT_MOUSEDEV_SCREEN_Y create mode 100644 baseconfig/CONFIG_INPUT_MPU3050 create mode 100644 baseconfig/CONFIG_INPUT_PCF50633_PMU create mode 100644 baseconfig/CONFIG_INPUT_PCF8574 create mode 100644 baseconfig/CONFIG_INPUT_PCSPKR create mode 100644 baseconfig/CONFIG_INPUT_PM8XXX_VIBRATOR create mode 100644 baseconfig/CONFIG_INPUT_PMIC8XXX_PWRKEY create mode 100644 baseconfig/CONFIG_INPUT_POLLDEV create mode 100644 baseconfig/CONFIG_INPUT_POWERMATE create mode 100644 baseconfig/CONFIG_INPUT_PWM_BEEPER create mode 100644 baseconfig/CONFIG_INPUT_RETU_PWRBUTTON create mode 100644 baseconfig/CONFIG_INPUT_SPARSEKMAP create mode 100644 baseconfig/CONFIG_INPUT_TABLET create mode 100644 baseconfig/CONFIG_INPUT_TOUCHSCREEN create mode 100644 baseconfig/CONFIG_INPUT_UINPUT create mode 100644 baseconfig/CONFIG_INPUT_WISTRON_BTNS create mode 100644 baseconfig/CONFIG_INPUT_WM831X_ON create mode 100644 baseconfig/CONFIG_INPUT_YEALINK create mode 100644 baseconfig/CONFIG_INTEGRITY create mode 100644 baseconfig/CONFIG_INTEL_IDMA64 create mode 100644 baseconfig/CONFIG_INTEL_MENLOW create mode 100644 baseconfig/CONFIG_INTEL_RDT_A create mode 100644 baseconfig/CONFIG_INTEL_SOC_PMIC create mode 100644 baseconfig/CONFIG_INTEL_TH create mode 100644 baseconfig/CONFIG_INTEL_XWAY_PHY create mode 100644 baseconfig/CONFIG_INTERVAL_TREE_TEST create mode 100644 baseconfig/CONFIG_INV_MPU6050_I2C create mode 100644 baseconfig/CONFIG_INV_MPU6050_IIO create mode 100644 baseconfig/CONFIG_INV_MPU6050_SPI create mode 100644 baseconfig/CONFIG_IOMMU_SUPPORT create mode 100644 baseconfig/CONFIG_IOSCHED_CFQ create mode 100644 baseconfig/CONFIG_IOSCHED_DEADLINE create mode 100644 baseconfig/CONFIG_IOSCHED_NOOP create mode 100644 baseconfig/CONFIG_IO_STRICT_DEVMEM create mode 100644 baseconfig/CONFIG_IP6_NF_FILTER create mode 100644 baseconfig/CONFIG_IP6_NF_IPTABLES create mode 100644 baseconfig/CONFIG_IP6_NF_MANGLE create mode 100644 baseconfig/CONFIG_IP6_NF_MATCH_AH create mode 100644 baseconfig/CONFIG_IP6_NF_MATCH_EUI64 create mode 100644 baseconfig/CONFIG_IP6_NF_MATCH_FRAG create mode 100644 baseconfig/CONFIG_IP6_NF_MATCH_HL create mode 100644 baseconfig/CONFIG_IP6_NF_MATCH_IPV6HEADER create mode 100644 baseconfig/CONFIG_IP6_NF_MATCH_MH create mode 100644 baseconfig/CONFIG_IP6_NF_MATCH_OPTS create mode 100644 baseconfig/CONFIG_IP6_NF_MATCH_RPFILTER create mode 100644 baseconfig/CONFIG_IP6_NF_MATCH_RT create mode 100644 baseconfig/CONFIG_IP6_NF_NAT create mode 100644 baseconfig/CONFIG_IP6_NF_RAW create mode 100644 baseconfig/CONFIG_IP6_NF_SECURITY create mode 100644 baseconfig/CONFIG_IP6_NF_TARGET_HL create mode 100644 baseconfig/CONFIG_IP6_NF_TARGET_MASQUERADE create mode 100644 baseconfig/CONFIG_IP6_NF_TARGET_NPT create mode 100644 baseconfig/CONFIG_IP6_NF_TARGET_REJECT create mode 100644 baseconfig/CONFIG_IP6_NF_TARGET_SYNPROXY create mode 100644 baseconfig/CONFIG_IPACK_BUS create mode 100644 baseconfig/CONFIG_IPC_NS create mode 100644 baseconfig/CONFIG_IPDDP create mode 100644 baseconfig/CONFIG_IPDDP_ENCAP create mode 100644 baseconfig/CONFIG_IPMI_DEVICE_INTERFACE create mode 100644 baseconfig/CONFIG_IPMI_HANDLER create mode 100644 baseconfig/CONFIG_IPMI_PANIC_EVENT create mode 100644 baseconfig/CONFIG_IPMI_POWEROFF create mode 100644 baseconfig/CONFIG_IPMI_SI create mode 100644 baseconfig/CONFIG_IPMI_SSIF create mode 100644 baseconfig/CONFIG_IPMI_WATCHDOG create mode 100644 baseconfig/CONFIG_IPPP_FILTER create mode 100644 baseconfig/CONFIG_IPV6 create mode 100644 baseconfig/CONFIG_IPV6_GRE create mode 100644 baseconfig/CONFIG_IPV6_ILA create mode 100644 baseconfig/CONFIG_IPV6_MIP6 create mode 100644 baseconfig/CONFIG_IPV6_MROUTE create mode 100644 baseconfig/CONFIG_IPV6_MROUTE_MULTIPLE_TABLES create mode 100644 baseconfig/CONFIG_IPV6_MULTIPLE_TABLES create mode 100644 baseconfig/CONFIG_IPV6_OPTIMISTIC_DAD create mode 100644 baseconfig/CONFIG_IPV6_PIMSM_V2 create mode 100644 baseconfig/CONFIG_IPV6_ROUTER_PREF create mode 100644 baseconfig/CONFIG_IPV6_ROUTE_INFO create mode 100644 baseconfig/CONFIG_IPV6_SEG6_HMAC create mode 100644 baseconfig/CONFIG_IPV6_SEG6_INLINE create mode 100644 baseconfig/CONFIG_IPV6_SEG6_LWTUNNEL create mode 100644 baseconfig/CONFIG_IPV6_SIT create mode 100644 baseconfig/CONFIG_IPV6_SIT_6RD create mode 100644 baseconfig/CONFIG_IPV6_SUBTREES create mode 100644 baseconfig/CONFIG_IPV6_TUNNEL create mode 100644 baseconfig/CONFIG_IPV6_VTI create mode 100644 baseconfig/CONFIG_IPVLAN create mode 100644 baseconfig/CONFIG_IPW2100 create mode 100644 baseconfig/CONFIG_IPW2100_DEBUG create mode 100644 baseconfig/CONFIG_IPW2200 create mode 100644 baseconfig/CONFIG_IPW2200_DEBUG create mode 100644 baseconfig/CONFIG_IPWIRELESS create mode 100644 baseconfig/CONFIG_IPX create mode 100644 baseconfig/CONFIG_IPX_INTERN create mode 100644 baseconfig/CONFIG_IP_ADVANCED_ROUTER create mode 100644 baseconfig/CONFIG_IP_DCCP create mode 100644 baseconfig/CONFIG_IP_DCCP_CCID2 create mode 100644 baseconfig/CONFIG_IP_DCCP_CCID2_DEBUG create mode 100644 baseconfig/CONFIG_IP_DCCP_CCID3 create mode 100644 baseconfig/CONFIG_IP_DCCP_CCID3_DEBUG create mode 100644 baseconfig/CONFIG_IP_DCCP_DEBUG create mode 100644 baseconfig/CONFIG_IP_FIB_TRIE_STATS create mode 100644 baseconfig/CONFIG_IP_MROUTE create mode 100644 baseconfig/CONFIG_IP_MROUTE_MULTIPLE_TABLES create mode 100644 baseconfig/CONFIG_IP_MULTICAST create mode 100644 baseconfig/CONFIG_IP_MULTIPLE_TABLES create mode 100644 baseconfig/CONFIG_IP_NF_ARPFILTER create mode 100644 baseconfig/CONFIG_IP_NF_ARPTABLES create mode 100644 baseconfig/CONFIG_IP_NF_ARP_MANGLE create mode 100644 baseconfig/CONFIG_IP_NF_FILTER create mode 100644 baseconfig/CONFIG_IP_NF_IPTABLES create mode 100644 baseconfig/CONFIG_IP_NF_MANGLE create mode 100644 baseconfig/CONFIG_IP_NF_MATCH_AH create mode 100644 baseconfig/CONFIG_IP_NF_MATCH_ECN create mode 100644 baseconfig/CONFIG_IP_NF_MATCH_RPFILTER create mode 100644 baseconfig/CONFIG_IP_NF_MATCH_TTL create mode 100644 baseconfig/CONFIG_IP_NF_NAT create mode 100644 baseconfig/CONFIG_IP_NF_RAW create mode 100644 baseconfig/CONFIG_IP_NF_SECURITY create mode 100644 baseconfig/CONFIG_IP_NF_TARGET_CLUSTERIP create mode 100644 baseconfig/CONFIG_IP_NF_TARGET_ECN create mode 100644 baseconfig/CONFIG_IP_NF_TARGET_MASQUERADE create mode 100644 baseconfig/CONFIG_IP_NF_TARGET_NETMAP create mode 100644 baseconfig/CONFIG_IP_NF_TARGET_REDIRECT create mode 100644 baseconfig/CONFIG_IP_NF_TARGET_REJECT create mode 100644 baseconfig/CONFIG_IP_NF_TARGET_SYNPROXY create mode 100644 baseconfig/CONFIG_IP_NF_TARGET_TTL create mode 100644 baseconfig/CONFIG_IP_PIMSM_V1 create mode 100644 baseconfig/CONFIG_IP_PIMSM_V2 create mode 100644 baseconfig/CONFIG_IP_PNP create mode 100644 baseconfig/CONFIG_IP_ROUTE_MULTIPATH create mode 100644 baseconfig/CONFIG_IP_ROUTE_VERBOSE create mode 100644 baseconfig/CONFIG_IP_SCTP create mode 100644 baseconfig/CONFIG_IP_SET create mode 100644 baseconfig/CONFIG_IP_SET_BITMAP_IP create mode 100644 baseconfig/CONFIG_IP_SET_BITMAP_IPMAC create mode 100644 baseconfig/CONFIG_IP_SET_BITMAP_PORT create mode 100644 baseconfig/CONFIG_IP_SET_HASH_IP create mode 100644 baseconfig/CONFIG_IP_SET_HASH_IPMAC create mode 100644 baseconfig/CONFIG_IP_SET_HASH_IPMARK create mode 100644 baseconfig/CONFIG_IP_SET_HASH_IPPORT create mode 100644 baseconfig/CONFIG_IP_SET_HASH_IPPORTIP create mode 100644 baseconfig/CONFIG_IP_SET_HASH_IPPORTNET create mode 100644 baseconfig/CONFIG_IP_SET_HASH_MAC create mode 100644 baseconfig/CONFIG_IP_SET_HASH_NET create mode 100644 baseconfig/CONFIG_IP_SET_HASH_NETIFACE create mode 100644 baseconfig/CONFIG_IP_SET_HASH_NETNET create mode 100644 baseconfig/CONFIG_IP_SET_HASH_NETPORT create mode 100644 baseconfig/CONFIG_IP_SET_HASH_NETPORTNET create mode 100644 baseconfig/CONFIG_IP_SET_LIST_SET create mode 100644 baseconfig/CONFIG_IP_SET_MAX create mode 100644 baseconfig/CONFIG_IP_VS create mode 100644 baseconfig/CONFIG_IP_VS_DEBUG create mode 100644 baseconfig/CONFIG_IP_VS_DH create mode 100644 baseconfig/CONFIG_IP_VS_FO create mode 100644 baseconfig/CONFIG_IP_VS_FTP create mode 100644 baseconfig/CONFIG_IP_VS_IPV6 create mode 100644 baseconfig/CONFIG_IP_VS_LBLC create mode 100644 baseconfig/CONFIG_IP_VS_LBLCR create mode 100644 baseconfig/CONFIG_IP_VS_LC create mode 100644 baseconfig/CONFIG_IP_VS_NQ create mode 100644 baseconfig/CONFIG_IP_VS_OVF create mode 100644 baseconfig/CONFIG_IP_VS_PE_SIP create mode 100644 baseconfig/CONFIG_IP_VS_PROTO_AH create mode 100644 baseconfig/CONFIG_IP_VS_PROTO_ESP create mode 100644 baseconfig/CONFIG_IP_VS_PROTO_SCTP create mode 100644 baseconfig/CONFIG_IP_VS_PROTO_TCP create mode 100644 baseconfig/CONFIG_IP_VS_PROTO_UDP create mode 100644 baseconfig/CONFIG_IP_VS_RR create mode 100644 baseconfig/CONFIG_IP_VS_SED create mode 100644 baseconfig/CONFIG_IP_VS_SH create mode 100644 baseconfig/CONFIG_IP_VS_SH_TAB_BITS create mode 100644 baseconfig/CONFIG_IP_VS_TAB_BITS create mode 100644 baseconfig/CONFIG_IP_VS_WLC create mode 100644 baseconfig/CONFIG_IP_VS_WRR create mode 100644 baseconfig/CONFIG_IRCOMM create mode 100644 baseconfig/CONFIG_IRDA create mode 100644 baseconfig/CONFIG_IRDA_CACHE_LAST_LSAP create mode 100644 baseconfig/CONFIG_IRDA_DEBUG create mode 100644 baseconfig/CONFIG_IRDA_FAST_RR create mode 100644 baseconfig/CONFIG_IRDA_ULTRA create mode 100644 baseconfig/CONFIG_IRLAN create mode 100644 baseconfig/CONFIG_IRNET create mode 100644 baseconfig/CONFIG_IRQSOFF_TRACER create mode 100644 baseconfig/CONFIG_IRQ_TIME_ACCOUNTING create mode 100644 baseconfig/CONFIG_IRTTY_SIR create mode 100644 baseconfig/CONFIG_IR_ENE create mode 100644 baseconfig/CONFIG_IR_FINTEK create mode 100644 baseconfig/CONFIG_IR_GPIO_CIR create mode 100644 baseconfig/CONFIG_IR_HIX5HD2 create mode 100644 baseconfig/CONFIG_IR_IGORPLUGUSB create mode 100644 baseconfig/CONFIG_IR_IGUANA create mode 100644 baseconfig/CONFIG_IR_IMG create mode 100644 baseconfig/CONFIG_IR_IMON create mode 100644 baseconfig/CONFIG_IR_ITE_CIR create mode 100644 baseconfig/CONFIG_IR_JVC_DECODER create mode 100644 baseconfig/CONFIG_IR_LIRC_CODEC create mode 100644 baseconfig/CONFIG_IR_MCEUSB create mode 100644 baseconfig/CONFIG_IR_MCE_KBD_DECODER create mode 100644 baseconfig/CONFIG_IR_NEC_DECODER create mode 100644 baseconfig/CONFIG_IR_NUVOTON create mode 100644 baseconfig/CONFIG_IR_RC5_DECODER create mode 100644 baseconfig/CONFIG_IR_RC6_DECODER create mode 100644 baseconfig/CONFIG_IR_REDRAT3 create mode 100644 baseconfig/CONFIG_IR_SANYO_DECODER create mode 100644 baseconfig/CONFIG_IR_SERIAL create mode 100644 baseconfig/CONFIG_IR_SERIAL_TRANSMITTER create mode 100644 baseconfig/CONFIG_IR_SHARP_DECODER create mode 100644 baseconfig/CONFIG_IR_SONY_DECODER create mode 100644 baseconfig/CONFIG_IR_STREAMZAP create mode 100644 baseconfig/CONFIG_IR_TTUSBIR create mode 100644 baseconfig/CONFIG_IR_WINBOND_CIR create mode 100644 baseconfig/CONFIG_IR_XMP_DECODER create mode 100644 baseconfig/CONFIG_ISA create mode 100644 baseconfig/CONFIG_ISCSI_BOOT_SYSFS create mode 100644 baseconfig/CONFIG_ISCSI_TARGET create mode 100644 baseconfig/CONFIG_ISCSI_TARGET_CXGB4 create mode 100644 baseconfig/CONFIG_ISCSI_TCP create mode 100644 baseconfig/CONFIG_ISDN create mode 100644 baseconfig/CONFIG_ISDN_AUDIO create mode 100644 baseconfig/CONFIG_ISDN_CAPI create mode 100644 baseconfig/CONFIG_ISDN_CAPI_CAPI20 create mode 100644 baseconfig/CONFIG_ISDN_CAPI_CAPIDRV create mode 100644 baseconfig/CONFIG_ISDN_CAPI_CAPIDRV_VERBOSE create mode 100644 baseconfig/CONFIG_ISDN_CAPI_MIDDLEWARE create mode 100644 baseconfig/CONFIG_ISDN_DIVAS create mode 100644 baseconfig/CONFIG_ISDN_DIVAS_BRIPCI create mode 100644 baseconfig/CONFIG_ISDN_DIVAS_DIVACAPI create mode 100644 baseconfig/CONFIG_ISDN_DIVAS_MAINT create mode 100644 baseconfig/CONFIG_ISDN_DIVAS_PRIPCI create mode 100644 baseconfig/CONFIG_ISDN_DIVAS_USERIDI create mode 100644 baseconfig/CONFIG_ISDN_DIVERSION create mode 100644 baseconfig/CONFIG_ISDN_DRV_AVMB1_AVM_CS create mode 100644 baseconfig/CONFIG_ISDN_DRV_AVMB1_B1PCI create mode 100644 baseconfig/CONFIG_ISDN_DRV_AVMB1_B1PCIV4 create mode 100644 baseconfig/CONFIG_ISDN_DRV_AVMB1_B1PCMCIA create mode 100644 baseconfig/CONFIG_ISDN_DRV_AVMB1_C4 create mode 100644 baseconfig/CONFIG_ISDN_DRV_AVMB1_T1PCI create mode 100644 baseconfig/CONFIG_ISDN_DRV_GIGASET create mode 100644 baseconfig/CONFIG_ISDN_DRV_HISAX create mode 100644 baseconfig/CONFIG_ISDN_DRV_LOOP create mode 100644 baseconfig/CONFIG_ISDN_I4L create mode 100644 baseconfig/CONFIG_ISDN_MPP create mode 100644 baseconfig/CONFIG_ISDN_PPP create mode 100644 baseconfig/CONFIG_ISDN_PPP_BSDCOMP create mode 100644 baseconfig/CONFIG_ISDN_PPP_VJ create mode 100644 baseconfig/CONFIG_ISDN_TTY_FAX create mode 100644 baseconfig/CONFIG_ISI create mode 100644 baseconfig/CONFIG_ISL29003 create mode 100644 baseconfig/CONFIG_ISL29020 create mode 100644 baseconfig/CONFIG_ISL29125 create mode 100644 baseconfig/CONFIG_ISO9660_FS create mode 100644 baseconfig/CONFIG_IT8712F_WDT create mode 100644 baseconfig/CONFIG_IT87_WDT create mode 100644 baseconfig/CONFIG_ITCO_VENDOR_SUPPORT create mode 100644 baseconfig/CONFIG_ITCO_WDT create mode 100644 baseconfig/CONFIG_ITG3200 create mode 100644 baseconfig/CONFIG_IWL3945 create mode 100644 baseconfig/CONFIG_IWL4965 create mode 100644 baseconfig/CONFIG_IWLDVM create mode 100644 baseconfig/CONFIG_IWLEGACY create mode 100644 baseconfig/CONFIG_IWLEGACY_DEBUG create mode 100644 baseconfig/CONFIG_IWLEGACY_DEBUGFS create mode 100644 baseconfig/CONFIG_IWLMVM create mode 100644 baseconfig/CONFIG_IWLWIFI create mode 100644 baseconfig/CONFIG_IWLWIFI_BCAST_FILTERING create mode 100644 baseconfig/CONFIG_IWLWIFI_DEBUG create mode 100644 baseconfig/CONFIG_IWLWIFI_DEBUGFS create mode 100644 baseconfig/CONFIG_IWLWIFI_DEVICE_TRACING create mode 100644 baseconfig/CONFIG_IWLWIFI_PCIE_RTPM create mode 100644 baseconfig/CONFIG_IWM create mode 100644 baseconfig/CONFIG_IXGB create mode 100644 baseconfig/CONFIG_IXGBE create mode 100644 baseconfig/CONFIG_IXGBEVF create mode 100644 baseconfig/CONFIG_IXGBE_DCA create mode 100644 baseconfig/CONFIG_IXGBE_DCB create mode 100644 baseconfig/CONFIG_IXGBE_HWMON create mode 100644 baseconfig/CONFIG_JBD2 create mode 100644 baseconfig/CONFIG_JBD2_DEBUG create mode 100644 baseconfig/CONFIG_JFFS2_FS create mode 100644 baseconfig/CONFIG_JFS_DEBUG create mode 100644 baseconfig/CONFIG_JFS_FS create mode 100644 baseconfig/CONFIG_JFS_POSIX_ACL create mode 100644 baseconfig/CONFIG_JFS_SECURITY create mode 100644 baseconfig/CONFIG_JFS_STATISTICS create mode 100644 baseconfig/CONFIG_JME create mode 100644 baseconfig/CONFIG_JOLIET create mode 100644 baseconfig/CONFIG_JOYSTICK_A3D create mode 100644 baseconfig/CONFIG_JOYSTICK_ADI create mode 100644 baseconfig/CONFIG_JOYSTICK_ANALOG create mode 100644 baseconfig/CONFIG_JOYSTICK_AS5011 create mode 100644 baseconfig/CONFIG_JOYSTICK_COBRA create mode 100644 baseconfig/CONFIG_JOYSTICK_DB9 create mode 100644 baseconfig/CONFIG_JOYSTICK_GAMECON create mode 100644 baseconfig/CONFIG_JOYSTICK_GF2K create mode 100644 baseconfig/CONFIG_JOYSTICK_GRIP create mode 100644 baseconfig/CONFIG_JOYSTICK_GRIP_MP create mode 100644 baseconfig/CONFIG_JOYSTICK_GUILLEMOT create mode 100644 baseconfig/CONFIG_JOYSTICK_IFORCE create mode 100644 baseconfig/CONFIG_JOYSTICK_IFORCE_232 create mode 100644 baseconfig/CONFIG_JOYSTICK_IFORCE_USB create mode 100644 baseconfig/CONFIG_JOYSTICK_INTERACT create mode 100644 baseconfig/CONFIG_JOYSTICK_JOYDUMP create mode 100644 baseconfig/CONFIG_JOYSTICK_MAGELLAN create mode 100644 baseconfig/CONFIG_JOYSTICK_SIDEWINDER create mode 100644 baseconfig/CONFIG_JOYSTICK_SPACEBALL create mode 100644 baseconfig/CONFIG_JOYSTICK_SPACEORB create mode 100644 baseconfig/CONFIG_JOYSTICK_STINGER create mode 100644 baseconfig/CONFIG_JOYSTICK_TMDC create mode 100644 baseconfig/CONFIG_JOYSTICK_TURBOGRAFX create mode 100644 baseconfig/CONFIG_JOYSTICK_TWIDJOY create mode 100644 baseconfig/CONFIG_JOYSTICK_WALKERA0701 create mode 100644 baseconfig/CONFIG_JOYSTICK_WARRIOR create mode 100644 baseconfig/CONFIG_JOYSTICK_XPAD create mode 100644 baseconfig/CONFIG_JOYSTICK_XPAD_FF create mode 100644 baseconfig/CONFIG_JOYSTICK_XPAD_LEDS create mode 100644 baseconfig/CONFIG_JOYSTICK_ZHENHUA create mode 100644 baseconfig/CONFIG_JSA1212 create mode 100644 baseconfig/CONFIG_JUMP_LABEL create mode 100644 baseconfig/CONFIG_KALLSYMS create mode 100644 baseconfig/CONFIG_KALLSYMS_ALL create mode 100644 baseconfig/CONFIG_KARMA_PARTITION create mode 100644 baseconfig/CONFIG_KASAN create mode 100644 baseconfig/CONFIG_KCOV create mode 100644 baseconfig/CONFIG_KDB_CONTINUE_CATASTROPHIC create mode 100644 baseconfig/CONFIG_KERNEL_BZIP2 create mode 100644 baseconfig/CONFIG_KERNEL_GZIP create mode 100644 baseconfig/CONFIG_KERNEL_LZMA create mode 100644 baseconfig/CONFIG_KERNEL_LZO create mode 100644 baseconfig/CONFIG_KEXEC create mode 100644 baseconfig/CONFIG_KEXEC_FILE create mode 100644 baseconfig/CONFIG_KEYBOARD_ADC create mode 100644 baseconfig/CONFIG_KEYBOARD_ADP5588 create mode 100644 baseconfig/CONFIG_KEYBOARD_ADP5589 create mode 100644 baseconfig/CONFIG_KEYBOARD_ATKBD create mode 100644 baseconfig/CONFIG_KEYBOARD_CAP11XX create mode 100644 baseconfig/CONFIG_KEYBOARD_GPIO create mode 100644 baseconfig/CONFIG_KEYBOARD_GPIO_POLLED create mode 100644 baseconfig/CONFIG_KEYBOARD_LKKBD create mode 100644 baseconfig/CONFIG_KEYBOARD_LM8323 create mode 100644 baseconfig/CONFIG_KEYBOARD_LM8333 create mode 100644 baseconfig/CONFIG_KEYBOARD_MATRIX create mode 100644 baseconfig/CONFIG_KEYBOARD_MAX7359 create mode 100644 baseconfig/CONFIG_KEYBOARD_MCS create mode 100644 baseconfig/CONFIG_KEYBOARD_MPR121 create mode 100644 baseconfig/CONFIG_KEYBOARD_NEWTON create mode 100644 baseconfig/CONFIG_KEYBOARD_OMAP4 create mode 100644 baseconfig/CONFIG_KEYBOARD_OPENCORES create mode 100644 baseconfig/CONFIG_KEYBOARD_PMIC8XXX create mode 100644 baseconfig/CONFIG_KEYBOARD_QT1070 create mode 100644 baseconfig/CONFIG_KEYBOARD_QT2160 create mode 100644 baseconfig/CONFIG_KEYBOARD_SAMSUNG create mode 100644 baseconfig/CONFIG_KEYBOARD_SH_KEYSC create mode 100644 baseconfig/CONFIG_KEYBOARD_STOWAWAY create mode 100644 baseconfig/CONFIG_KEYBOARD_SUNKBD create mode 100644 baseconfig/CONFIG_KEYBOARD_TCA6416 create mode 100644 baseconfig/CONFIG_KEYBOARD_TCA8418 create mode 100644 baseconfig/CONFIG_KEYBOARD_XTKBD create mode 100644 baseconfig/CONFIG_KEYS create mode 100644 baseconfig/CONFIG_KEY_DH_OPERATIONS create mode 100644 baseconfig/CONFIG_KGDB create mode 100644 baseconfig/CONFIG_KGDB_KDB create mode 100644 baseconfig/CONFIG_KGDB_LOW_LEVEL_TRAP create mode 100644 baseconfig/CONFIG_KGDB_SERIAL_CONSOLE create mode 100644 baseconfig/CONFIG_KGDB_TESTS create mode 100644 baseconfig/CONFIG_KGDB_TESTS_ON_BOOT create mode 100644 baseconfig/CONFIG_KINGSUN_DONGLE create mode 100644 baseconfig/CONFIG_KMX61 create mode 100644 baseconfig/CONFIG_KPROBES create mode 100644 baseconfig/CONFIG_KPROBES_SANITY_TEST create mode 100644 baseconfig/CONFIG_KPROBE_EVENT create mode 100644 baseconfig/CONFIG_KS0108 create mode 100644 baseconfig/CONFIG_KS0108_DELAY create mode 100644 baseconfig/CONFIG_KS0108_PORT create mode 100644 baseconfig/CONFIG_KS7010 create mode 100644 baseconfig/CONFIG_KS8842 create mode 100644 baseconfig/CONFIG_KS8851 create mode 100644 baseconfig/CONFIG_KS8851_MLL create mode 100644 baseconfig/CONFIG_KS959_DONGLE create mode 100644 baseconfig/CONFIG_KSDAZZLE_DONGLE create mode 100644 baseconfig/CONFIG_KSM create mode 100644 baseconfig/CONFIG_KSZ884X_PCI create mode 100644 baseconfig/CONFIG_KXCJK1013 create mode 100644 baseconfig/CONFIG_KXSD9 create mode 100644 baseconfig/CONFIG_L2TP create mode 100644 baseconfig/CONFIG_L2TP_DEBUGFS create mode 100644 baseconfig/CONFIG_L2TP_ETH create mode 100644 baseconfig/CONFIG_L2TP_IP create mode 100644 baseconfig/CONFIG_L2TP_V3 create mode 100644 baseconfig/CONFIG_LAPB create mode 100644 baseconfig/CONFIG_LATENCYTOP create mode 100644 baseconfig/CONFIG_LATTICE_ECP3_CONFIG create mode 100644 baseconfig/CONFIG_LCD_AMS369FG06 create mode 100644 baseconfig/CONFIG_LCD_CLASS_DEVICE create mode 100644 baseconfig/CONFIG_LCD_HX8357 create mode 100644 baseconfig/CONFIG_LCD_ILI922X create mode 100644 baseconfig/CONFIG_LCD_ILI9320 create mode 100644 baseconfig/CONFIG_LCD_L4F00242T03 create mode 100644 baseconfig/CONFIG_LCD_LD9040 create mode 100644 baseconfig/CONFIG_LCD_LMS283GF05 create mode 100644 baseconfig/CONFIG_LCD_LMS501KF03 create mode 100644 baseconfig/CONFIG_LCD_LTV350QV create mode 100644 baseconfig/CONFIG_LCD_PLATFORM create mode 100644 baseconfig/CONFIG_LCD_S6E63M0 create mode 100644 baseconfig/CONFIG_LCD_TDO24M create mode 100644 baseconfig/CONFIG_LCD_VGG2432A4 create mode 100644 baseconfig/CONFIG_LDM_DEBUG create mode 100644 baseconfig/CONFIG_LDM_PARTITION create mode 100644 baseconfig/CONFIG_LEDS_AAT1290 create mode 100644 baseconfig/CONFIG_LEDS_BCM6328 create mode 100644 baseconfig/CONFIG_LEDS_BCM6358 create mode 100644 baseconfig/CONFIG_LEDS_BD2802 create mode 100644 baseconfig/CONFIG_LEDS_BLINKM create mode 100644 baseconfig/CONFIG_LEDS_CLASS create mode 100644 baseconfig/CONFIG_LEDS_CLASS_FLASH create mode 100644 baseconfig/CONFIG_LEDS_CLEVO_MAIL create mode 100644 baseconfig/CONFIG_LEDS_DAC124S085 create mode 100644 baseconfig/CONFIG_LEDS_DELL_NETBOOKS create mode 100644 baseconfig/CONFIG_LEDS_GPIO create mode 100644 baseconfig/CONFIG_LEDS_INTEL_SS4200 create mode 100644 baseconfig/CONFIG_LEDS_IS31FL319X create mode 100644 baseconfig/CONFIG_LEDS_IS31FL32XX create mode 100644 baseconfig/CONFIG_LEDS_KTD2692 create mode 100644 baseconfig/CONFIG_LEDS_LM3530 create mode 100644 baseconfig/CONFIG_LEDS_LM355x create mode 100644 baseconfig/CONFIG_LEDS_LM3642 create mode 100644 baseconfig/CONFIG_LEDS_LOCOMO create mode 100644 baseconfig/CONFIG_LEDS_LP3944 create mode 100644 baseconfig/CONFIG_LEDS_LP3952 create mode 100644 baseconfig/CONFIG_LEDS_LP5521 create mode 100644 baseconfig/CONFIG_LEDS_LP5523 create mode 100644 baseconfig/CONFIG_LEDS_LP5562 create mode 100644 baseconfig/CONFIG_LEDS_LP55XX_COMMON create mode 100644 baseconfig/CONFIG_LEDS_LP8501 create mode 100644 baseconfig/CONFIG_LEDS_LP8860 create mode 100644 baseconfig/CONFIG_LEDS_LT3593 create mode 100644 baseconfig/CONFIG_LEDS_MLXCPLD create mode 100644 baseconfig/CONFIG_LEDS_NET48XX create mode 100644 baseconfig/CONFIG_LEDS_NIC78BX create mode 100644 baseconfig/CONFIG_LEDS_OT200 create mode 100644 baseconfig/CONFIG_LEDS_PCA9532 create mode 100644 baseconfig/CONFIG_LEDS_PCA955X create mode 100644 baseconfig/CONFIG_LEDS_PCA963X create mode 100644 baseconfig/CONFIG_LEDS_PWM create mode 100644 baseconfig/CONFIG_LEDS_REGULATOR create mode 100644 baseconfig/CONFIG_LEDS_S3C24XX create mode 100644 baseconfig/CONFIG_LEDS_SYSCON create mode 100644 baseconfig/CONFIG_LEDS_TCA6507 create mode 100644 baseconfig/CONFIG_LEDS_TLC591XX create mode 100644 baseconfig/CONFIG_LEDS_TRIGGERS create mode 100644 baseconfig/CONFIG_LEDS_TRIGGER_BACKLIGHT create mode 100644 baseconfig/CONFIG_LEDS_TRIGGER_CAMERA create mode 100644 baseconfig/CONFIG_LEDS_TRIGGER_CPU create mode 100644 baseconfig/CONFIG_LEDS_TRIGGER_DEFAULT_ON create mode 100644 baseconfig/CONFIG_LEDS_TRIGGER_DISK create mode 100644 baseconfig/CONFIG_LEDS_TRIGGER_GPIO create mode 100644 baseconfig/CONFIG_LEDS_TRIGGER_HEARTBEAT create mode 100644 baseconfig/CONFIG_LEDS_TRIGGER_MTD create mode 100644 baseconfig/CONFIG_LEDS_TRIGGER_ONESHOT create mode 100644 baseconfig/CONFIG_LEDS_TRIGGER_PANIC create mode 100644 baseconfig/CONFIG_LEDS_TRIGGER_TIMER create mode 100644 baseconfig/CONFIG_LEDS_TRIGGER_TRANSIENT create mode 100644 baseconfig/CONFIG_LEDS_USER create mode 100644 baseconfig/CONFIG_LEDS_WM831X_STATUS create mode 100644 baseconfig/CONFIG_LEDS_WM8350 create mode 100644 baseconfig/CONFIG_LED_TRIGGER_PHY create mode 100644 baseconfig/CONFIG_LEGACY_PTYS create mode 100644 baseconfig/CONFIG_LIB80211 create mode 100644 baseconfig/CONFIG_LIB80211_CRYPT_CCMP create mode 100644 baseconfig/CONFIG_LIB80211_CRYPT_TKIP create mode 100644 baseconfig/CONFIG_LIB80211_CRYPT_WEP create mode 100644 baseconfig/CONFIG_LIB80211_DEBUG create mode 100644 baseconfig/CONFIG_LIBCRC32C create mode 100644 baseconfig/CONFIG_LIBERTAS create mode 100644 baseconfig/CONFIG_LIBERTAS_CS create mode 100644 baseconfig/CONFIG_LIBERTAS_DEBUG create mode 100644 baseconfig/CONFIG_LIBERTAS_MESH create mode 100644 baseconfig/CONFIG_LIBERTAS_SDIO create mode 100644 baseconfig/CONFIG_LIBERTAS_SPI create mode 100644 baseconfig/CONFIG_LIBERTAS_THINFIRM create mode 100644 baseconfig/CONFIG_LIBERTAS_USB create mode 100644 baseconfig/CONFIG_LIBFC create mode 100644 baseconfig/CONFIG_LIBFCOE create mode 100644 baseconfig/CONFIG_LIBIPW_DEBUG create mode 100644 baseconfig/CONFIG_LIBNVDIMM create mode 100644 baseconfig/CONFIG_LIDAR_LITE_V2 create mode 100644 baseconfig/CONFIG_LIQUIDIO_VF create mode 100644 baseconfig/CONFIG_LIRC create mode 100644 baseconfig/CONFIG_LIRC_BT829 create mode 100644 baseconfig/CONFIG_LIRC_IMON create mode 100644 baseconfig/CONFIG_LIRC_PARALLEL create mode 100644 baseconfig/CONFIG_LIRC_SASEM create mode 100644 baseconfig/CONFIG_LIRC_SERIAL create mode 100644 baseconfig/CONFIG_LIRC_SERIAL_TRANSMITTER create mode 100644 baseconfig/CONFIG_LIRC_SIR create mode 100644 baseconfig/CONFIG_LIRC_STAGING create mode 100644 baseconfig/CONFIG_LIRC_ZILOG create mode 100644 baseconfig/CONFIG_LITELINK_DONGLE create mode 100644 baseconfig/CONFIG_LIVEPATCH create mode 100644 baseconfig/CONFIG_LKDTM create mode 100644 baseconfig/CONFIG_LLC create mode 100644 baseconfig/CONFIG_LLC2 create mode 100644 baseconfig/CONFIG_LMP91000 create mode 100644 baseconfig/CONFIG_LNET create mode 100644 baseconfig/CONFIG_LOCALVERSION create mode 100644 baseconfig/CONFIG_LOCALVERSION_AUTO create mode 100644 baseconfig/CONFIG_LOCKD create mode 100644 baseconfig/CONFIG_LOCKD_V4 create mode 100644 baseconfig/CONFIG_LOCKUP_DETECTOR create mode 100644 baseconfig/CONFIG_LOCK_DOWN_KERNEL create mode 100644 baseconfig/CONFIG_LOCK_STAT create mode 100644 baseconfig/CONFIG_LOCK_TORTURE_TEST create mode 100644 baseconfig/CONFIG_LOGFS create mode 100644 baseconfig/CONFIG_LOGIG940_FF create mode 100644 baseconfig/CONFIG_LOGIRUMBLEPAD2_FF create mode 100644 baseconfig/CONFIG_LOGITECH_FF create mode 100644 baseconfig/CONFIG_LOGIWHEELS_FF create mode 100644 baseconfig/CONFIG_LOGO create mode 100644 baseconfig/CONFIG_LOGO_LINUX_CLUT224 create mode 100644 baseconfig/CONFIG_LOGO_LINUX_MONO create mode 100644 baseconfig/CONFIG_LOGO_LINUX_VGA16 create mode 100644 baseconfig/CONFIG_LOG_BUF_SHIFT create mode 100644 baseconfig/CONFIG_LOG_CPU_MAX_BUF_SHIFT create mode 100644 baseconfig/CONFIG_LOOPBACK_TARGET create mode 100644 baseconfig/CONFIG_LPC_ICH create mode 100644 baseconfig/CONFIG_LPC_SCH create mode 100644 baseconfig/CONFIG_LP_CONSOLE create mode 100644 baseconfig/CONFIG_LSI_ET1011C_PHY create mode 100644 baseconfig/CONFIG_LSM_MMAP_MIN_ADDR create mode 100644 baseconfig/CONFIG_LTC2485 create mode 100644 baseconfig/CONFIG_LTE_GDM724X create mode 100644 baseconfig/CONFIG_LTR501 create mode 100644 baseconfig/CONFIG_LUSTRE_FS create mode 100644 baseconfig/CONFIG_LWTUNNEL create mode 100644 baseconfig/CONFIG_LWTUNNEL_BPF create mode 100644 baseconfig/CONFIG_LXT_PHY create mode 100644 baseconfig/CONFIG_M62332 create mode 100644 baseconfig/CONFIG_MA600_DONGLE create mode 100644 baseconfig/CONFIG_MAC80211 create mode 100644 baseconfig/CONFIG_MAC80211_DEBUGFS create mode 100644 baseconfig/CONFIG_MAC80211_DEBUG_MENU create mode 100644 baseconfig/CONFIG_MAC80211_HWSIM create mode 100644 baseconfig/CONFIG_MAC80211_LEDS create mode 100644 baseconfig/CONFIG_MAC80211_MESH create mode 100644 baseconfig/CONFIG_MAC80211_MESSAGE_TRACING create mode 100644 baseconfig/CONFIG_MAC80211_RC_DEFAULT create mode 100644 baseconfig/CONFIG_MAC80211_RC_DEFAULT_MINSTREL create mode 100644 baseconfig/CONFIG_MAC80211_RC_MINSTREL create mode 100644 baseconfig/CONFIG_MAC802154 create mode 100644 baseconfig/CONFIG_MACB create mode 100644 baseconfig/CONFIG_MACB_PCI create mode 100644 baseconfig/CONFIG_MACHZ_WDT create mode 100644 baseconfig/CONFIG_MACSEC create mode 100644 baseconfig/CONFIG_MACVLAN create mode 100644 baseconfig/CONFIG_MACVTAP create mode 100644 baseconfig/CONFIG_MAC_EMUMOUSEBTN create mode 100644 baseconfig/CONFIG_MAC_PARTITION create mode 100644 baseconfig/CONFIG_MAG3110 create mode 100644 baseconfig/CONFIG_MAGIC_SYSRQ create mode 100644 baseconfig/CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE create mode 100644 baseconfig/CONFIG_MAILBOX create mode 100644 baseconfig/CONFIG_MAILBOX_TEST create mode 100644 baseconfig/CONFIG_MANDATORY_FILE_LOCKING create mode 100644 baseconfig/CONFIG_MANTIS_CORE create mode 100644 baseconfig/CONFIG_MARVELL_PHY create mode 100644 baseconfig/CONFIG_MAX1027 create mode 100644 baseconfig/CONFIG_MAX1363 create mode 100644 baseconfig/CONFIG_MAX30100 create mode 100644 baseconfig/CONFIG_MAX44000 create mode 100644 baseconfig/CONFIG_MAX517 create mode 100644 baseconfig/CONFIG_MAX5487 create mode 100644 baseconfig/CONFIG_MAX5821 create mode 100644 baseconfig/CONFIG_MAX63XX_WATCHDOG create mode 100644 baseconfig/CONFIG_MAXIM_THERMOCOUPLE create mode 100644 baseconfig/CONFIG_MAX_RAW_DEVS create mode 100644 baseconfig/CONFIG_MC3230 create mode 100644 baseconfig/CONFIG_MCB create mode 100644 baseconfig/CONFIG_MCE_AMD_INJ create mode 100644 baseconfig/CONFIG_MCP2120_DONGLE create mode 100644 baseconfig/CONFIG_MCP320X create mode 100644 baseconfig/CONFIG_MCP3422 create mode 100644 baseconfig/CONFIG_MCP4131 create mode 100644 baseconfig/CONFIG_MCP4531 create mode 100644 baseconfig/CONFIG_MCP4725 create mode 100644 baseconfig/CONFIG_MCP4922 create mode 100644 baseconfig/CONFIG_MCS_FIR create mode 100644 baseconfig/CONFIG_MD create mode 100644 baseconfig/CONFIG_MDIO_BCM_UNIMAC create mode 100644 baseconfig/CONFIG_MDIO_BITBANG create mode 100644 baseconfig/CONFIG_MDIO_BUS_MUX create mode 100644 baseconfig/CONFIG_MDIO_BUS_MUX_GPIO create mode 100644 baseconfig/CONFIG_MDIO_BUS_MUX_MMIOREG create mode 100644 baseconfig/CONFIG_MDIO_GPIO create mode 100644 baseconfig/CONFIG_MDIO_HISI_FEMAC create mode 100644 baseconfig/CONFIG_MDIO_OCTEON create mode 100644 baseconfig/CONFIG_MDIO_THUNDER create mode 100644 baseconfig/CONFIG_MD_AUTODETECT create mode 100644 baseconfig/CONFIG_MD_CLUSTER create mode 100644 baseconfig/CONFIG_MD_FAULTY create mode 100644 baseconfig/CONFIG_MD_LINEAR create mode 100644 baseconfig/CONFIG_MD_MULTIPATH create mode 100644 baseconfig/CONFIG_MD_RAID0 create mode 100644 baseconfig/CONFIG_MD_RAID1 create mode 100644 baseconfig/CONFIG_MD_RAID10 create mode 100644 baseconfig/CONFIG_MD_RAID456 create mode 100644 baseconfig/CONFIG_MEDIA_ALTERA_CI create mode 100644 baseconfig/CONFIG_MEDIA_ANALOG_TV_SUPPORT create mode 100644 baseconfig/CONFIG_MEDIA_ATTACH create mode 100644 baseconfig/CONFIG_MEDIA_CAMERA_SUPPORT create mode 100644 baseconfig/CONFIG_MEDIA_CEC_DEBUG create mode 100644 baseconfig/CONFIG_MEDIA_CEC_SUPPORT create mode 100644 baseconfig/CONFIG_MEDIA_CONTROLLER create mode 100644 baseconfig/CONFIG_MEDIA_CONTROLLER_DVB create mode 100644 baseconfig/CONFIG_MEDIA_DIGITAL_TV_SUPPORT create mode 100644 baseconfig/CONFIG_MEDIA_PCI_SUPPORT create mode 100644 baseconfig/CONFIG_MEDIA_RADIO_SUPPORT create mode 100644 baseconfig/CONFIG_MEDIA_RC_SUPPORT create mode 100644 baseconfig/CONFIG_MEDIA_SDR_SUPPORT create mode 100644 baseconfig/CONFIG_MEDIA_SUBDRV_AUTOSELECT create mode 100644 baseconfig/CONFIG_MEDIA_SUPPORT create mode 100644 baseconfig/CONFIG_MEDIA_TUNER_MSI001 create mode 100644 baseconfig/CONFIG_MEDIA_USB_SUPPORT create mode 100644 baseconfig/CONFIG_MEGARAID_LEGACY create mode 100644 baseconfig/CONFIG_MEGARAID_MAILBOX create mode 100644 baseconfig/CONFIG_MEGARAID_MM create mode 100644 baseconfig/CONFIG_MEGARAID_NEWGEN create mode 100644 baseconfig/CONFIG_MEGARAID_SAS create mode 100644 baseconfig/CONFIG_MEMCG create mode 100644 baseconfig/CONFIG_MEMCG_SWAP create mode 100644 baseconfig/CONFIG_MEMCG_SWAP_ENABLED create mode 100644 baseconfig/CONFIG_MEMORY create mode 100644 baseconfig/CONFIG_MEMORY_FAILURE create mode 100644 baseconfig/CONFIG_MEMSTICK create mode 100644 baseconfig/CONFIG_MEMSTICK_DEBUG create mode 100644 baseconfig/CONFIG_MEMSTICK_JMICRON_38X create mode 100644 baseconfig/CONFIG_MEMSTICK_R592 create mode 100644 baseconfig/CONFIG_MEMSTICK_REALTEK_PCI create mode 100644 baseconfig/CONFIG_MEMSTICK_REALTEK_USB create mode 100644 baseconfig/CONFIG_MEMSTICK_TIFM_MS create mode 100644 baseconfig/CONFIG_MEMSTICK_UNSAFE_RESUME create mode 100644 baseconfig/CONFIG_MEMTEST create mode 100644 baseconfig/CONFIG_MEN_A21_WDT create mode 100644 baseconfig/CONFIG_MESON_GXL_PHY create mode 100644 baseconfig/CONFIG_MESSAGE_LOGLEVEL_DEFAULT create mode 100644 baseconfig/CONFIG_MFD_88PM800 create mode 100644 baseconfig/CONFIG_MFD_88PM805 create mode 100644 baseconfig/CONFIG_MFD_88PM860X create mode 100644 baseconfig/CONFIG_MFD_AAT2870_CORE create mode 100644 baseconfig/CONFIG_MFD_ACT8945A create mode 100644 baseconfig/CONFIG_MFD_ARIZONA create mode 100644 baseconfig/CONFIG_MFD_ARIZONA_I2C create mode 100644 baseconfig/CONFIG_MFD_ARIZONA_SPI create mode 100644 baseconfig/CONFIG_MFD_AS3711 create mode 100644 baseconfig/CONFIG_MFD_AS3722 create mode 100644 baseconfig/CONFIG_MFD_ASIC3 create mode 100644 baseconfig/CONFIG_MFD_ATMEL_FLEXCOM create mode 100644 baseconfig/CONFIG_MFD_ATMEL_HLCDC create mode 100644 baseconfig/CONFIG_MFD_AXP20X create mode 100644 baseconfig/CONFIG_MFD_AXP20X_I2C create mode 100644 baseconfig/CONFIG_MFD_BCM590XX create mode 100644 baseconfig/CONFIG_MFD_CORE create mode 100644 baseconfig/CONFIG_MFD_CROS_EC create mode 100644 baseconfig/CONFIG_MFD_CS5535 create mode 100644 baseconfig/CONFIG_MFD_DA9052_I2C create mode 100644 baseconfig/CONFIG_MFD_DA9052_SPI create mode 100644 baseconfig/CONFIG_MFD_DA9055 create mode 100644 baseconfig/CONFIG_MFD_DA9062 create mode 100644 baseconfig/CONFIG_MFD_DA9063 create mode 100644 baseconfig/CONFIG_MFD_DA9150 create mode 100644 baseconfig/CONFIG_MFD_DLN2 create mode 100644 baseconfig/CONFIG_MFD_EXYNOS_LPASS create mode 100644 baseconfig/CONFIG_MFD_HI6421_PMIC create mode 100644 baseconfig/CONFIG_MFD_JANZ_CMODIO create mode 100644 baseconfig/CONFIG_MFD_KEMPLD create mode 100644 baseconfig/CONFIG_MFD_LM3533 create mode 100644 baseconfig/CONFIG_MFD_LP3943 create mode 100644 baseconfig/CONFIG_MFD_LP8788 create mode 100644 baseconfig/CONFIG_MFD_MAX14577 create mode 100644 baseconfig/CONFIG_MFD_MAX77620 create mode 100644 baseconfig/CONFIG_MFD_MAX77686 create mode 100644 baseconfig/CONFIG_MFD_MAX77693 create mode 100644 baseconfig/CONFIG_MFD_MAX77843 create mode 100644 baseconfig/CONFIG_MFD_MAX8907 create mode 100644 baseconfig/CONFIG_MFD_MAX8925 create mode 100644 baseconfig/CONFIG_MFD_MAX8997 create mode 100644 baseconfig/CONFIG_MFD_MAX8998 create mode 100644 baseconfig/CONFIG_MFD_MC13XXX_I2C create mode 100644 baseconfig/CONFIG_MFD_MC13XXX_SPI create mode 100644 baseconfig/CONFIG_MFD_MENF21BMC create mode 100644 baseconfig/CONFIG_MFD_MT6397 create mode 100644 baseconfig/CONFIG_MFD_PALMAS create mode 100644 baseconfig/CONFIG_MFD_PCF50633 create mode 100644 baseconfig/CONFIG_MFD_RC5T583 create mode 100644 baseconfig/CONFIG_MFD_RDC321X create mode 100644 baseconfig/CONFIG_MFD_RETU create mode 100644 baseconfig/CONFIG_MFD_RK808 create mode 100644 baseconfig/CONFIG_MFD_RN5T618 create mode 100644 baseconfig/CONFIG_MFD_RT5033 create mode 100644 baseconfig/CONFIG_MFD_RTSX_PCI create mode 100644 baseconfig/CONFIG_MFD_RTSX_USB create mode 100644 baseconfig/CONFIG_MFD_SEC_CORE create mode 100644 baseconfig/CONFIG_MFD_SI476X_CORE create mode 100644 baseconfig/CONFIG_MFD_SKY81452 create mode 100644 baseconfig/CONFIG_MFD_SM501 create mode 100644 baseconfig/CONFIG_MFD_SM501_GPIO create mode 100644 baseconfig/CONFIG_MFD_SMSC create mode 100644 baseconfig/CONFIG_MFD_STMPE create mode 100644 baseconfig/CONFIG_MFD_SUN4I_GPADC create mode 100644 baseconfig/CONFIG_MFD_SYSCON create mode 100644 baseconfig/CONFIG_MFD_TC3589X create mode 100644 baseconfig/CONFIG_MFD_TC6393XB create mode 100644 baseconfig/CONFIG_MFD_TIMBERDALE create mode 100644 baseconfig/CONFIG_MFD_TI_AM335X_TSCADC create mode 100644 baseconfig/CONFIG_MFD_TI_LP873X create mode 100644 baseconfig/CONFIG_MFD_TPS65086 create mode 100644 baseconfig/CONFIG_MFD_TPS65090 create mode 100644 baseconfig/CONFIG_MFD_TPS65217 create mode 100644 baseconfig/CONFIG_MFD_TPS65218 create mode 100644 baseconfig/CONFIG_MFD_TPS6586X create mode 100644 baseconfig/CONFIG_MFD_TPS65910 create mode 100644 baseconfig/CONFIG_MFD_TPS65912 create mode 100644 baseconfig/CONFIG_MFD_TPS65912_I2C create mode 100644 baseconfig/CONFIG_MFD_TPS65912_SPI create mode 100644 baseconfig/CONFIG_MFD_TPS80031 create mode 100644 baseconfig/CONFIG_MFD_VIPERBOARD create mode 100644 baseconfig/CONFIG_MFD_VX855 create mode 100644 baseconfig/CONFIG_MFD_WL1273_CORE create mode 100644 baseconfig/CONFIG_MFD_WM831X create mode 100644 baseconfig/CONFIG_MFD_WM831X_I2C create mode 100644 baseconfig/CONFIG_MFD_WM831X_SPI create mode 100644 baseconfig/CONFIG_MFD_WM8350 create mode 100644 baseconfig/CONFIG_MFD_WM8350_I2C create mode 100644 baseconfig/CONFIG_MFD_WM8400 create mode 100644 baseconfig/CONFIG_MFD_WM8994 create mode 100644 baseconfig/CONFIG_MICREL_KS8995MA create mode 100644 baseconfig/CONFIG_MICREL_PHY create mode 100644 baseconfig/CONFIG_MICROCHIP_PHY create mode 100644 baseconfig/CONFIG_MICROSEMI_PHY create mode 100644 baseconfig/CONFIG_MIGRATION create mode 100644 baseconfig/CONFIG_MII create mode 100644 baseconfig/CONFIG_MINIX_FS create mode 100644 baseconfig/CONFIG_MINIX_SUBPARTITION create mode 100644 baseconfig/CONFIG_MISC_FILESYSTEMS create mode 100644 baseconfig/CONFIG_MISDN create mode 100644 baseconfig/CONFIG_MISDN_AVMFRITZ create mode 100644 baseconfig/CONFIG_MISDN_DSP create mode 100644 baseconfig/CONFIG_MISDN_HFCMULTI create mode 100644 baseconfig/CONFIG_MISDN_HFCPCI create mode 100644 baseconfig/CONFIG_MISDN_HFCUSB create mode 100644 baseconfig/CONFIG_MISDN_INFINEON create mode 100644 baseconfig/CONFIG_MISDN_L1OIP create mode 100644 baseconfig/CONFIG_MISDN_NETJET create mode 100644 baseconfig/CONFIG_MISDN_SPEEDFAX create mode 100644 baseconfig/CONFIG_MISDN_W6692 create mode 100644 baseconfig/CONFIG_MKISS create mode 100644 baseconfig/CONFIG_MLX4_CORE create mode 100644 baseconfig/CONFIG_MLX4_EN create mode 100644 baseconfig/CONFIG_MLX4_EN_DCB create mode 100644 baseconfig/CONFIG_MLX4_INFINIBAND create mode 100644 baseconfig/CONFIG_MLX5_CORE create mode 100644 baseconfig/CONFIG_MLX5_CORE_EN create mode 100644 baseconfig/CONFIG_MLX5_CORE_EN_DCB create mode 100644 baseconfig/CONFIG_MLX5_INFINIBAND create mode 100644 baseconfig/CONFIG_MLX90614 create mode 100644 baseconfig/CONFIG_MLXSW_CORE create mode 100644 baseconfig/CONFIG_MLXSW_CORE_HWMON create mode 100644 baseconfig/CONFIG_MLXSW_CORE_THERMAL create mode 100644 baseconfig/CONFIG_MLXSW_I2C create mode 100644 baseconfig/CONFIG_MLXSW_MINIMAL create mode 100644 baseconfig/CONFIG_MLXSW_PCI create mode 100644 baseconfig/CONFIG_MLXSW_SPECTRUM create mode 100644 baseconfig/CONFIG_MLXSW_SPECTRUM_DCB create mode 100644 baseconfig/CONFIG_MLXSW_SWITCHIB create mode 100644 baseconfig/CONFIG_MLXSW_SWITCHX2 create mode 100644 baseconfig/CONFIG_MLX_CPLD_PLATFORM create mode 100644 baseconfig/CONFIG_MMA7455_I2C create mode 100644 baseconfig/CONFIG_MMA7455_SPI create mode 100644 baseconfig/CONFIG_MMA7660 create mode 100644 baseconfig/CONFIG_MMA8452 create mode 100644 baseconfig/CONFIG_MMA9551 create mode 100644 baseconfig/CONFIG_MMA9553 create mode 100644 baseconfig/CONFIG_MMC create mode 100644 baseconfig/CONFIG_MMC35240 create mode 100644 baseconfig/CONFIG_MMC_BLOCK create mode 100644 baseconfig/CONFIG_MMC_BLOCK_BOUNCE create mode 100644 baseconfig/CONFIG_MMC_BLOCK_MINORS create mode 100644 baseconfig/CONFIG_MMC_CB710 create mode 100644 baseconfig/CONFIG_MMC_DEBUG create mode 100644 baseconfig/CONFIG_MMC_MTK create mode 100644 baseconfig/CONFIG_MMC_REALTEK_PCI create mode 100644 baseconfig/CONFIG_MMC_REALTEK_USB create mode 100644 baseconfig/CONFIG_MMC_RICOH_MMC create mode 100644 baseconfig/CONFIG_MMC_SDHCI create mode 100644 baseconfig/CONFIG_MMC_SDHCI_ACPI create mode 100644 baseconfig/CONFIG_MMC_SDHCI_CADENCE create mode 100644 baseconfig/CONFIG_MMC_SDHCI_F_SDH30 create mode 100644 baseconfig/CONFIG_MMC_SDHCI_OF create mode 100644 baseconfig/CONFIG_MMC_SDHCI_OF_ARASAN create mode 100644 baseconfig/CONFIG_MMC_SDHCI_OF_AT91 create mode 100644 baseconfig/CONFIG_MMC_SDHCI_OF_ESDHC create mode 100644 baseconfig/CONFIG_MMC_SDHCI_PCI create mode 100644 baseconfig/CONFIG_MMC_SDHCI_PLTFM create mode 100644 baseconfig/CONFIG_MMC_SDRICOH_CS create mode 100644 baseconfig/CONFIG_MMC_SPI create mode 100644 baseconfig/CONFIG_MMC_TEST create mode 100644 baseconfig/CONFIG_MMC_TIFM_SD create mode 100644 baseconfig/CONFIG_MMC_TOSHIBA_PCI create mode 100644 baseconfig/CONFIG_MMC_USDHI6ROL0 create mode 100644 baseconfig/CONFIG_MMC_USHC create mode 100644 baseconfig/CONFIG_MMC_VIA_SDMMC create mode 100644 baseconfig/CONFIG_MMC_VUB300 create mode 100644 baseconfig/CONFIG_MMC_WBSD create mode 100644 baseconfig/CONFIG_MMU create mode 100644 baseconfig/CONFIG_MODULES create mode 100644 baseconfig/CONFIG_MODULE_COMPRESS create mode 100644 baseconfig/CONFIG_MODULE_FORCE_LOAD create mode 100644 baseconfig/CONFIG_MODULE_FORCE_UNLOAD create mode 100644 baseconfig/CONFIG_MODULE_SIG create mode 100644 baseconfig/CONFIG_MODULE_SIG_ALL create mode 100644 baseconfig/CONFIG_MODULE_SIG_FORCE create mode 100644 baseconfig/CONFIG_MODULE_SIG_KEY create mode 100644 baseconfig/CONFIG_MODULE_SIG_SHA1 create mode 100644 baseconfig/CONFIG_MODULE_SIG_SHA256 create mode 100644 baseconfig/CONFIG_MODULE_SIG_UEFI create mode 100644 baseconfig/CONFIG_MODULE_SRCVERSION_ALL create mode 100644 baseconfig/CONFIG_MODULE_UNLOAD create mode 100644 baseconfig/CONFIG_MODVERSIONS create mode 100644 baseconfig/CONFIG_MOST create mode 100644 baseconfig/CONFIG_MOUSE_APPLETOUCH create mode 100644 baseconfig/CONFIG_MOUSE_ATIXL create mode 100644 baseconfig/CONFIG_MOUSE_BCM5974 create mode 100644 baseconfig/CONFIG_MOUSE_CYAPA create mode 100644 baseconfig/CONFIG_MOUSE_ELAN_I2C create mode 100644 baseconfig/CONFIG_MOUSE_ELAN_I2C_I2C create mode 100644 baseconfig/CONFIG_MOUSE_ELAN_I2C_SMBUS create mode 100644 baseconfig/CONFIG_MOUSE_GPIO create mode 100644 baseconfig/CONFIG_MOUSE_PS2 create mode 100644 baseconfig/CONFIG_MOUSE_PS2_ELANTECH create mode 100644 baseconfig/CONFIG_MOUSE_PS2_SENTELIC create mode 100644 baseconfig/CONFIG_MOUSE_PS2_TOUCHKIT create mode 100644 baseconfig/CONFIG_MOUSE_PS2_VMMOUSE create mode 100644 baseconfig/CONFIG_MOUSE_SERIAL create mode 100644 baseconfig/CONFIG_MOUSE_SYNAPTICS_I2C create mode 100644 baseconfig/CONFIG_MOUSE_SYNAPTICS_USB create mode 100644 baseconfig/CONFIG_MOUSE_VSXXXAA create mode 100644 baseconfig/CONFIG_MOVABLE_NODE create mode 100644 baseconfig/CONFIG_MOXA_INTELLIO create mode 100644 baseconfig/CONFIG_MOXA_SMARTIO create mode 100644 baseconfig/CONFIG_MPL115 create mode 100644 baseconfig/CONFIG_MPL115_I2C create mode 100644 baseconfig/CONFIG_MPL115_SPI create mode 100644 baseconfig/CONFIG_MPL3115 create mode 100644 baseconfig/CONFIG_MPLS_IPTUNNEL create mode 100644 baseconfig/CONFIG_MPLS_ROUTING create mode 100644 baseconfig/CONFIG_MPU3050_I2C create mode 100644 baseconfig/CONFIG_MS5611 create mode 100644 baseconfig/CONFIG_MS5637 create mode 100644 baseconfig/CONFIG_MSDOS_FS create mode 100644 baseconfig/CONFIG_MSDOS_PARTITION create mode 100644 baseconfig/CONFIG_MSM_GCC_8994 create mode 100644 baseconfig/CONFIG_MSPRO_BLOCK create mode 100644 baseconfig/CONFIG_MS_BLOCK create mode 100644 baseconfig/CONFIG_MT7601U create mode 100644 baseconfig/CONFIG_MTD create mode 100644 baseconfig/CONFIG_MTD_ABSENT create mode 100644 baseconfig/CONFIG_MTD_AR7_PARTS create mode 100644 baseconfig/CONFIG_MTD_BLKDEVS create mode 100644 baseconfig/CONFIG_MTD_BLOCK create mode 100644 baseconfig/CONFIG_MTD_BLOCK2MTD create mode 100644 baseconfig/CONFIG_MTD_BLOCK_RO create mode 100644 baseconfig/CONFIG_MTD_CFI create mode 100644 baseconfig/CONFIG_MTD_CFI_I1 create mode 100644 baseconfig/CONFIG_MTD_CFI_I2 create mode 100644 baseconfig/CONFIG_MTD_CFI_I4 create mode 100644 baseconfig/CONFIG_MTD_CFI_I8 create mode 100644 baseconfig/CONFIG_MTD_CMDLINE_PARTS create mode 100644 baseconfig/CONFIG_MTD_COMPLEX_MAPPINGS create mode 100644 baseconfig/CONFIG_MTD_DATAFLASH create mode 100644 baseconfig/CONFIG_MTD_DOCG3 create mode 100644 baseconfig/CONFIG_MTD_INTEL_VR_NOR create mode 100644 baseconfig/CONFIG_MTD_JEDECPROBE create mode 100644 baseconfig/CONFIG_MTD_LPDDR create mode 100644 baseconfig/CONFIG_MTD_MAP_BANK_WIDTH_1 create mode 100644 baseconfig/CONFIG_MTD_MAP_BANK_WIDTH_16 create mode 100644 baseconfig/CONFIG_MTD_MAP_BANK_WIDTH_2 create mode 100644 baseconfig/CONFIG_MTD_MAP_BANK_WIDTH_32 create mode 100644 baseconfig/CONFIG_MTD_MAP_BANK_WIDTH_4 create mode 100644 baseconfig/CONFIG_MTD_MAP_BANK_WIDTH_8 create mode 100644 baseconfig/CONFIG_MTD_MTDRAM create mode 100644 baseconfig/CONFIG_MTD_NAND create mode 100644 baseconfig/CONFIG_MTD_NAND_DENALI_DT create mode 100644 baseconfig/CONFIG_MTD_NAND_DENALI_PCI create mode 100644 baseconfig/CONFIG_MTD_NAND_DISKONCHIP create mode 100644 baseconfig/CONFIG_MTD_NAND_ECC_BCH create mode 100644 baseconfig/CONFIG_MTD_NAND_HISI504 create mode 100644 baseconfig/CONFIG_MTD_NAND_OMAP2 create mode 100644 baseconfig/CONFIG_MTD_NAND_OXNAS create mode 100644 baseconfig/CONFIG_MTD_ONENAND create mode 100644 baseconfig/CONFIG_MTD_OOPS create mode 100644 baseconfig/CONFIG_MTD_PARTITIONED_MASTER create mode 100644 baseconfig/CONFIG_MTD_PHRAM create mode 100644 baseconfig/CONFIG_MTD_PLATRAM create mode 100644 baseconfig/CONFIG_MTD_PMC551 create mode 100644 baseconfig/CONFIG_MTD_RAM create mode 100644 baseconfig/CONFIG_MTD_REDBOOT_PARTS create mode 100644 baseconfig/CONFIG_MTD_ROM create mode 100644 baseconfig/CONFIG_MTD_SLRAM create mode 100644 baseconfig/CONFIG_MTD_SPI_NOR create mode 100644 baseconfig/CONFIG_MTD_SST25L create mode 100644 baseconfig/CONFIG_MTD_SWAP create mode 100644 baseconfig/CONFIG_MTD_TESTS create mode 100644 baseconfig/CONFIG_MTD_TS5500 create mode 100644 baseconfig/CONFIG_MTD_UBI create mode 100644 baseconfig/CONFIG_MTD_UBI_BEB_LIMIT create mode 100644 baseconfig/CONFIG_MTD_UBI_BLOCK create mode 100644 baseconfig/CONFIG_MTD_UBI_FASTMAP create mode 100644 baseconfig/CONFIG_MTD_UBI_GLUEBI create mode 100644 baseconfig/CONFIG_MTD_UBI_WL_THRESHOLD create mode 100644 baseconfig/CONFIG_MVMDIO create mode 100644 baseconfig/CONFIG_MWAVE create mode 100644 baseconfig/CONFIG_MWIFIEX create mode 100644 baseconfig/CONFIG_MWIFIEX_PCIE create mode 100644 baseconfig/CONFIG_MWIFIEX_SDIO create mode 100644 baseconfig/CONFIG_MWIFIEX_USB create mode 100644 baseconfig/CONFIG_MWL8K create mode 100644 baseconfig/CONFIG_MXC4005 create mode 100644 baseconfig/CONFIG_MXC6255 create mode 100644 baseconfig/CONFIG_MYRI10GE create mode 100644 baseconfig/CONFIG_MYRI10GE_DCA create mode 100644 baseconfig/CONFIG_NAMESPACES create mode 100644 baseconfig/CONFIG_NATIONAL_PHY create mode 100644 baseconfig/CONFIG_NATSEMI create mode 100644 baseconfig/CONFIG_NAU7802 create mode 100644 baseconfig/CONFIG_NBPFAXI_DMA create mode 100644 baseconfig/CONFIG_NCPFS_EXTRAS create mode 100644 baseconfig/CONFIG_NCPFS_IOCTL_LOCKING create mode 100644 baseconfig/CONFIG_NCPFS_NFS_NS create mode 100644 baseconfig/CONFIG_NCPFS_NLS create mode 100644 baseconfig/CONFIG_NCPFS_OS2_NS create mode 100644 baseconfig/CONFIG_NCPFS_PACKET_SIGNING create mode 100644 baseconfig/CONFIG_NCPFS_SMALLDOS create mode 100644 baseconfig/CONFIG_NCPFS_STRONG create mode 100644 baseconfig/CONFIG_NCP_FS create mode 100644 baseconfig/CONFIG_ND_BLK create mode 100644 baseconfig/CONFIG_NE2K_PCI create mode 100644 baseconfig/CONFIG_NET create mode 100644 baseconfig/CONFIG_NETCONSOLE create mode 100644 baseconfig/CONFIG_NETCONSOLE_DYNAMIC create mode 100644 baseconfig/CONFIG_NETDEVICES create mode 100644 baseconfig/CONFIG_NETFILTER create mode 100644 baseconfig/CONFIG_NETFILTER_ADVANCED create mode 100644 baseconfig/CONFIG_NETFILTER_DEBUG create mode 100644 baseconfig/CONFIG_NETFILTER_INGRESS create mode 100644 baseconfig/CONFIG_NETFILTER_NETLINK create mode 100644 baseconfig/CONFIG_NETFILTER_NETLINK_ACCT create mode 100644 baseconfig/CONFIG_NETFILTER_NETLINK_GLUE_CT create mode 100644 baseconfig/CONFIG_NETFILTER_NETLINK_LOG create mode 100644 baseconfig/CONFIG_NETFILTER_NETLINK_QUEUE create mode 100644 baseconfig/CONFIG_NETFILTER_XTABLES create mode 100644 baseconfig/CONFIG_NETFILTER_XT_CONNMARK create mode 100644 baseconfig/CONFIG_NETFILTER_XT_MARK create mode 100644 baseconfig/CONFIG_NETFILTER_XT_MATCH_ADDRTYPE create mode 100644 baseconfig/CONFIG_NETFILTER_XT_MATCH_BPF create mode 100644 baseconfig/CONFIG_NETFILTER_XT_MATCH_CGROUP create mode 100644 baseconfig/CONFIG_NETFILTER_XT_MATCH_CLUSTER create mode 100644 baseconfig/CONFIG_NETFILTER_XT_MATCH_COMMENT create mode 100644 baseconfig/CONFIG_NETFILTER_XT_MATCH_CONNBYTES create mode 100644 baseconfig/CONFIG_NETFILTER_XT_MATCH_CONNLABEL create mode 100644 baseconfig/CONFIG_NETFILTER_XT_MATCH_CONNLIMIT create mode 100644 baseconfig/CONFIG_NETFILTER_XT_MATCH_CONNMARK create mode 100644 baseconfig/CONFIG_NETFILTER_XT_MATCH_CONNTRACK create mode 100644 baseconfig/CONFIG_NETFILTER_XT_MATCH_CPU create mode 100644 baseconfig/CONFIG_NETFILTER_XT_MATCH_DCCP create mode 100644 baseconfig/CONFIG_NETFILTER_XT_MATCH_DEVGROUP create mode 100644 baseconfig/CONFIG_NETFILTER_XT_MATCH_DSCP create mode 100644 baseconfig/CONFIG_NETFILTER_XT_MATCH_ECN create mode 100644 baseconfig/CONFIG_NETFILTER_XT_MATCH_ESP create mode 100644 baseconfig/CONFIG_NETFILTER_XT_MATCH_HASHLIMIT create mode 100644 baseconfig/CONFIG_NETFILTER_XT_MATCH_HELPER create mode 100644 baseconfig/CONFIG_NETFILTER_XT_MATCH_HL create mode 100644 baseconfig/CONFIG_NETFILTER_XT_MATCH_IPCOMP create mode 100644 baseconfig/CONFIG_NETFILTER_XT_MATCH_IPRANGE create mode 100644 baseconfig/CONFIG_NETFILTER_XT_MATCH_IPVS create mode 100644 baseconfig/CONFIG_NETFILTER_XT_MATCH_L2TP create mode 100644 baseconfig/CONFIG_NETFILTER_XT_MATCH_LENGTH create mode 100644 baseconfig/CONFIG_NETFILTER_XT_MATCH_LIMIT create mode 100644 baseconfig/CONFIG_NETFILTER_XT_MATCH_MAC create mode 100644 baseconfig/CONFIG_NETFILTER_XT_MATCH_MARK create mode 100644 baseconfig/CONFIG_NETFILTER_XT_MATCH_MULTIPORT create mode 100644 baseconfig/CONFIG_NETFILTER_XT_MATCH_NFACCT create mode 100644 baseconfig/CONFIG_NETFILTER_XT_MATCH_OSF create mode 100644 baseconfig/CONFIG_NETFILTER_XT_MATCH_OWNER create mode 100644 baseconfig/CONFIG_NETFILTER_XT_MATCH_PHYSDEV create mode 100644 baseconfig/CONFIG_NETFILTER_XT_MATCH_PKTTYPE create mode 100644 baseconfig/CONFIG_NETFILTER_XT_MATCH_POLICY create mode 100644 baseconfig/CONFIG_NETFILTER_XT_MATCH_QUOTA create mode 100644 baseconfig/CONFIG_NETFILTER_XT_MATCH_RATEEST create mode 100644 baseconfig/CONFIG_NETFILTER_XT_MATCH_REALM create mode 100644 baseconfig/CONFIG_NETFILTER_XT_MATCH_RECENT create mode 100644 baseconfig/CONFIG_NETFILTER_XT_MATCH_SCTP create mode 100644 baseconfig/CONFIG_NETFILTER_XT_MATCH_SOCKET create mode 100644 baseconfig/CONFIG_NETFILTER_XT_MATCH_STATE create mode 100644 baseconfig/CONFIG_NETFILTER_XT_MATCH_STATISTIC create mode 100644 baseconfig/CONFIG_NETFILTER_XT_MATCH_STRING create mode 100644 baseconfig/CONFIG_NETFILTER_XT_MATCH_TCPMSS create mode 100644 baseconfig/CONFIG_NETFILTER_XT_MATCH_TIME create mode 100644 baseconfig/CONFIG_NETFILTER_XT_MATCH_U32 create mode 100644 baseconfig/CONFIG_NETFILTER_XT_NAT create mode 100644 baseconfig/CONFIG_NETFILTER_XT_SET create mode 100644 baseconfig/CONFIG_NETFILTER_XT_TARGET_AUDIT create mode 100644 baseconfig/CONFIG_NETFILTER_XT_TARGET_CHECKSUM create mode 100644 baseconfig/CONFIG_NETFILTER_XT_TARGET_CLASSIFY create mode 100644 baseconfig/CONFIG_NETFILTER_XT_TARGET_CONNMARK create mode 100644 baseconfig/CONFIG_NETFILTER_XT_TARGET_CONNSECMARK create mode 100644 baseconfig/CONFIG_NETFILTER_XT_TARGET_CT create mode 100644 baseconfig/CONFIG_NETFILTER_XT_TARGET_DSCP create mode 100644 baseconfig/CONFIG_NETFILTER_XT_TARGET_HMARK create mode 100644 baseconfig/CONFIG_NETFILTER_XT_TARGET_IDLETIMER create mode 100644 baseconfig/CONFIG_NETFILTER_XT_TARGET_LED create mode 100644 baseconfig/CONFIG_NETFILTER_XT_TARGET_LOG create mode 100644 baseconfig/CONFIG_NETFILTER_XT_TARGET_MARK create mode 100644 baseconfig/CONFIG_NETFILTER_XT_TARGET_NETMAP create mode 100644 baseconfig/CONFIG_NETFILTER_XT_TARGET_NFLOG create mode 100644 baseconfig/CONFIG_NETFILTER_XT_TARGET_NFQUEUE create mode 100644 baseconfig/CONFIG_NETFILTER_XT_TARGET_NOTRACK create mode 100644 baseconfig/CONFIG_NETFILTER_XT_TARGET_RATEEST create mode 100644 baseconfig/CONFIG_NETFILTER_XT_TARGET_REDIRECT create mode 100644 baseconfig/CONFIG_NETFILTER_XT_TARGET_SECMARK create mode 100644 baseconfig/CONFIG_NETFILTER_XT_TARGET_TCPMSS create mode 100644 baseconfig/CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP create mode 100644 baseconfig/CONFIG_NETFILTER_XT_TARGET_TEE create mode 100644 baseconfig/CONFIG_NETFILTER_XT_TARGET_TPROXY create mode 100644 baseconfig/CONFIG_NETFILTER_XT_TARGET_TRACE create mode 100644 baseconfig/CONFIG_NETLABEL create mode 100644 baseconfig/CONFIG_NETLINK_DIAG create mode 100644 baseconfig/CONFIG_NETROM create mode 100644 baseconfig/CONFIG_NETWORK_FILESYSTEMS create mode 100644 baseconfig/CONFIG_NETWORK_PHY_TIMESTAMPING create mode 100644 baseconfig/CONFIG_NETXEN_NIC create mode 100644 baseconfig/CONFIG_NET_9P create mode 100644 baseconfig/CONFIG_NET_9P_DEBUG create mode 100644 baseconfig/CONFIG_NET_9P_RDMA create mode 100644 baseconfig/CONFIG_NET_9P_VIRTIO create mode 100644 baseconfig/CONFIG_NET_ACT_BPF create mode 100644 baseconfig/CONFIG_NET_ACT_CONNMARK create mode 100644 baseconfig/CONFIG_NET_ACT_CSUM create mode 100644 baseconfig/CONFIG_NET_ACT_GACT create mode 100644 baseconfig/CONFIG_NET_ACT_IFE create mode 100644 baseconfig/CONFIG_NET_ACT_IPT create mode 100644 baseconfig/CONFIG_NET_ACT_MIRRED create mode 100644 baseconfig/CONFIG_NET_ACT_NAT create mode 100644 baseconfig/CONFIG_NET_ACT_PEDIT create mode 100644 baseconfig/CONFIG_NET_ACT_POLICE create mode 100644 baseconfig/CONFIG_NET_ACT_SIMP create mode 100644 baseconfig/CONFIG_NET_ACT_SKBEDIT create mode 100644 baseconfig/CONFIG_NET_ACT_SKBMOD create mode 100644 baseconfig/CONFIG_NET_ACT_TUNNEL_KEY create mode 100644 baseconfig/CONFIG_NET_ACT_VLAN create mode 100644 baseconfig/CONFIG_NET_CADENCE create mode 100644 baseconfig/CONFIG_NET_CALXEDA_XGMAC create mode 100644 baseconfig/CONFIG_NET_CLS create mode 100644 baseconfig/CONFIG_NET_CLS_ACT create mode 100644 baseconfig/CONFIG_NET_CLS_BASIC create mode 100644 baseconfig/CONFIG_NET_CLS_BPF create mode 100644 baseconfig/CONFIG_NET_CLS_CGROUP create mode 100644 baseconfig/CONFIG_NET_CLS_FLOW create mode 100644 baseconfig/CONFIG_NET_CLS_FLOWER create mode 100644 baseconfig/CONFIG_NET_CLS_FW create mode 100644 baseconfig/CONFIG_NET_CLS_IND create mode 100644 baseconfig/CONFIG_NET_CLS_MATCHALL create mode 100644 baseconfig/CONFIG_NET_CLS_ROUTE create mode 100644 baseconfig/CONFIG_NET_CLS_ROUTE4 create mode 100644 baseconfig/CONFIG_NET_CLS_RSVP create mode 100644 baseconfig/CONFIG_NET_CLS_RSVP6 create mode 100644 baseconfig/CONFIG_NET_CLS_TCINDEX create mode 100644 baseconfig/CONFIG_NET_CLS_U32 create mode 100644 baseconfig/CONFIG_NET_CORE create mode 100644 baseconfig/CONFIG_NET_DCCPPROBE create mode 100644 baseconfig/CONFIG_NET_DEVLINK create mode 100644 baseconfig/CONFIG_NET_DROP_MONITOR create mode 100644 baseconfig/CONFIG_NET_DSA create mode 100644 baseconfig/CONFIG_NET_DSA_BCM_SF2 create mode 100644 baseconfig/CONFIG_NET_DSA_HWMON create mode 100644 baseconfig/CONFIG_NET_DSA_MV88E6060 create mode 100644 baseconfig/CONFIG_NET_DSA_MV88E6XXX create mode 100644 baseconfig/CONFIG_NET_DSA_MV88E6XXX_GLOBAL2 create mode 100644 baseconfig/CONFIG_NET_DSA_QCA8K create mode 100644 baseconfig/CONFIG_NET_EMATCH create mode 100644 baseconfig/CONFIG_NET_EMATCH_CANID create mode 100644 baseconfig/CONFIG_NET_EMATCH_CMP create mode 100644 baseconfig/CONFIG_NET_EMATCH_IPSET create mode 100644 baseconfig/CONFIG_NET_EMATCH_META create mode 100644 baseconfig/CONFIG_NET_EMATCH_NBYTE create mode 100644 baseconfig/CONFIG_NET_EMATCH_STACK create mode 100644 baseconfig/CONFIG_NET_EMATCH_TEXT create mode 100644 baseconfig/CONFIG_NET_EMATCH_U32 create mode 100644 baseconfig/CONFIG_NET_FC create mode 100644 baseconfig/CONFIG_NET_FOU create mode 100644 baseconfig/CONFIG_NET_FOU_IP_TUNNELS create mode 100644 baseconfig/CONFIG_NET_IFE_SKBMARK create mode 100644 baseconfig/CONFIG_NET_IFE_SKBPRIO create mode 100644 baseconfig/CONFIG_NET_IFE_SKBTCINDEX create mode 100644 baseconfig/CONFIG_NET_IPGRE create mode 100644 baseconfig/CONFIG_NET_IPGRE_BROADCAST create mode 100644 baseconfig/CONFIG_NET_IPGRE_DEMUX create mode 100644 baseconfig/CONFIG_NET_IPIP create mode 100644 baseconfig/CONFIG_NET_IPVTI create mode 100644 baseconfig/CONFIG_NET_KEY create mode 100644 baseconfig/CONFIG_NET_KEY_MIGRATE create mode 100644 baseconfig/CONFIG_NET_L3_MASTER_DEV create mode 100644 baseconfig/CONFIG_NET_MPLS_GSO create mode 100644 baseconfig/CONFIG_NET_NCSI create mode 100644 baseconfig/CONFIG_NET_NS create mode 100644 baseconfig/CONFIG_NET_PACKET_ENGINE create mode 100644 baseconfig/CONFIG_NET_PKTGEN create mode 100644 baseconfig/CONFIG_NET_POLL_CONTROLLER create mode 100644 baseconfig/CONFIG_NET_SCHED create mode 100644 baseconfig/CONFIG_NET_SCH_ATM create mode 100644 baseconfig/CONFIG_NET_SCH_CBQ create mode 100644 baseconfig/CONFIG_NET_SCH_CHOKE create mode 100644 baseconfig/CONFIG_NET_SCH_CODEL create mode 100644 baseconfig/CONFIG_NET_SCH_DRR create mode 100644 baseconfig/CONFIG_NET_SCH_DSMARK create mode 100644 baseconfig/CONFIG_NET_SCH_FQ create mode 100644 baseconfig/CONFIG_NET_SCH_FQ_CODEL create mode 100644 baseconfig/CONFIG_NET_SCH_GRED create mode 100644 baseconfig/CONFIG_NET_SCH_HFSC create mode 100644 baseconfig/CONFIG_NET_SCH_HHF create mode 100644 baseconfig/CONFIG_NET_SCH_HTB create mode 100644 baseconfig/CONFIG_NET_SCH_INGRESS create mode 100644 baseconfig/CONFIG_NET_SCH_MQPRIO create mode 100644 baseconfig/CONFIG_NET_SCH_MULTIQ create mode 100644 baseconfig/CONFIG_NET_SCH_NETEM create mode 100644 baseconfig/CONFIG_NET_SCH_PIE create mode 100644 baseconfig/CONFIG_NET_SCH_PLUG create mode 100644 baseconfig/CONFIG_NET_SCH_PRIO create mode 100644 baseconfig/CONFIG_NET_SCH_QFQ create mode 100644 baseconfig/CONFIG_NET_SCH_RED create mode 100644 baseconfig/CONFIG_NET_SCH_SFB create mode 100644 baseconfig/CONFIG_NET_SCH_SFQ create mode 100644 baseconfig/CONFIG_NET_SCH_TBF create mode 100644 baseconfig/CONFIG_NET_SCH_TEQL create mode 100644 baseconfig/CONFIG_NET_SCTPPROBE create mode 100644 baseconfig/CONFIG_NET_SWITCHDEV create mode 100644 baseconfig/CONFIG_NET_TCPPROBE create mode 100644 baseconfig/CONFIG_NET_TEAM create mode 100644 baseconfig/CONFIG_NET_TEAM_MODE_ACTIVEBACKUP create mode 100644 baseconfig/CONFIG_NET_TEAM_MODE_BROADCAST create mode 100644 baseconfig/CONFIG_NET_TEAM_MODE_LOADBALANCE create mode 100644 baseconfig/CONFIG_NET_TEAM_MODE_RANDOM create mode 100644 baseconfig/CONFIG_NET_TEAM_MODE_ROUNDROBIN create mode 100644 baseconfig/CONFIG_NET_TULIP create mode 100644 baseconfig/CONFIG_NET_VENDOR_3COM create mode 100644 baseconfig/CONFIG_NET_VENDOR_8390 create mode 100644 baseconfig/CONFIG_NET_VENDOR_ADAPTEC create mode 100644 baseconfig/CONFIG_NET_VENDOR_AGERE create mode 100644 baseconfig/CONFIG_NET_VENDOR_ALACRITECH create mode 100644 baseconfig/CONFIG_NET_VENDOR_ALTEON create mode 100644 baseconfig/CONFIG_NET_VENDOR_AMAZON create mode 100644 baseconfig/CONFIG_NET_VENDOR_AMD create mode 100644 baseconfig/CONFIG_NET_VENDOR_ARC create mode 100644 baseconfig/CONFIG_NET_VENDOR_ATHEROS create mode 100644 baseconfig/CONFIG_NET_VENDOR_AURORA create mode 100644 baseconfig/CONFIG_NET_VENDOR_BROADCOM create mode 100644 baseconfig/CONFIG_NET_VENDOR_BROCADE create mode 100644 baseconfig/CONFIG_NET_VENDOR_CAVIUM create mode 100644 baseconfig/CONFIG_NET_VENDOR_CHELSIO create mode 100644 baseconfig/CONFIG_NET_VENDOR_CISCO create mode 100644 baseconfig/CONFIG_NET_VENDOR_DEC create mode 100644 baseconfig/CONFIG_NET_VENDOR_DLINK create mode 100644 baseconfig/CONFIG_NET_VENDOR_EMULEX create mode 100644 baseconfig/CONFIG_NET_VENDOR_EXAR create mode 100644 baseconfig/CONFIG_NET_VENDOR_EZCHIP create mode 100644 baseconfig/CONFIG_NET_VENDOR_FARADAY create mode 100644 baseconfig/CONFIG_NET_VENDOR_FUJITSU create mode 100644 baseconfig/CONFIG_NET_VENDOR_HISILICON create mode 100644 baseconfig/CONFIG_NET_VENDOR_HP create mode 100644 baseconfig/CONFIG_NET_VENDOR_I825XX create mode 100644 baseconfig/CONFIG_NET_VENDOR_INTEL create mode 100644 baseconfig/CONFIG_NET_VENDOR_MARVELL create mode 100644 baseconfig/CONFIG_NET_VENDOR_MICREL create mode 100644 baseconfig/CONFIG_NET_VENDOR_MICROCHIP create mode 100644 baseconfig/CONFIG_NET_VENDOR_MYRI create mode 100644 baseconfig/CONFIG_NET_VENDOR_NATSEMI create mode 100644 baseconfig/CONFIG_NET_VENDOR_NETRONOME create mode 100644 baseconfig/CONFIG_NET_VENDOR_NVIDIA create mode 100644 baseconfig/CONFIG_NET_VENDOR_OKI create mode 100644 baseconfig/CONFIG_NET_VENDOR_QLOGIC create mode 100644 baseconfig/CONFIG_NET_VENDOR_QUALCOMM create mode 100644 baseconfig/CONFIG_NET_VENDOR_RDC create mode 100644 baseconfig/CONFIG_NET_VENDOR_REALTEK create mode 100644 baseconfig/CONFIG_NET_VENDOR_RENESAS create mode 100644 baseconfig/CONFIG_NET_VENDOR_ROCKER create mode 100644 baseconfig/CONFIG_NET_VENDOR_SAMSUNG create mode 100644 baseconfig/CONFIG_NET_VENDOR_SEEQ create mode 100644 baseconfig/CONFIG_NET_VENDOR_SILAN create mode 100644 baseconfig/CONFIG_NET_VENDOR_SIS create mode 100644 baseconfig/CONFIG_NET_VENDOR_SMSC create mode 100644 baseconfig/CONFIG_NET_VENDOR_SOLARFLARE create mode 100644 baseconfig/CONFIG_NET_VENDOR_STMICRO create mode 100644 baseconfig/CONFIG_NET_VENDOR_SUN create mode 100644 baseconfig/CONFIG_NET_VENDOR_SYNOPSYS create mode 100644 baseconfig/CONFIG_NET_VENDOR_TEHUTI create mode 100644 baseconfig/CONFIG_NET_VENDOR_TI create mode 100644 baseconfig/CONFIG_NET_VENDOR_VIA create mode 100644 baseconfig/CONFIG_NET_VENDOR_WIZNET create mode 100644 baseconfig/CONFIG_NET_VENDOR_XIRCOM create mode 100644 baseconfig/CONFIG_NET_VRF create mode 100644 baseconfig/CONFIG_NEW_LEDS create mode 100644 baseconfig/CONFIG_NFC create mode 100644 baseconfig/CONFIG_NFC_DIGITAL create mode 100644 baseconfig/CONFIG_NFC_FDP create mode 100644 baseconfig/CONFIG_NFC_HCI create mode 100644 baseconfig/CONFIG_NFC_MICROREAD create mode 100644 baseconfig/CONFIG_NFC_MICROREAD_I2C create mode 100644 baseconfig/CONFIG_NFC_MRVL create mode 100644 baseconfig/CONFIG_NFC_MRVL_I2C create mode 100644 baseconfig/CONFIG_NFC_MRVL_SPI create mode 100644 baseconfig/CONFIG_NFC_MRVL_USB create mode 100644 baseconfig/CONFIG_NFC_NCI create mode 100644 baseconfig/CONFIG_NFC_NCI_SPI create mode 100644 baseconfig/CONFIG_NFC_NCI_UART create mode 100644 baseconfig/CONFIG_NFC_NXP_NCI create mode 100644 baseconfig/CONFIG_NFC_NXP_NCI_I2C create mode 100644 baseconfig/CONFIG_NFC_PN533 create mode 100644 baseconfig/CONFIG_NFC_PN533_I2C create mode 100644 baseconfig/CONFIG_NFC_PN533_USB create mode 100644 baseconfig/CONFIG_NFC_PN544 create mode 100644 baseconfig/CONFIG_NFC_PN544_I2C create mode 100644 baseconfig/CONFIG_NFC_PORT100 create mode 100644 baseconfig/CONFIG_NFC_S3FWRN5_I2C create mode 100644 baseconfig/CONFIG_NFC_SHDLC create mode 100644 baseconfig/CONFIG_NFC_SIM create mode 100644 baseconfig/CONFIG_NFC_ST21NFCA create mode 100644 baseconfig/CONFIG_NFC_ST21NFCA_I2C create mode 100644 baseconfig/CONFIG_NFC_ST95HF create mode 100644 baseconfig/CONFIG_NFC_ST_NCI create mode 100644 baseconfig/CONFIG_NFC_ST_NCI_I2C create mode 100644 baseconfig/CONFIG_NFC_ST_NCI_SPI create mode 100644 baseconfig/CONFIG_NFC_TRF7970A create mode 100644 baseconfig/CONFIG_NFP_NETVF create mode 100644 baseconfig/CONFIG_NFP_NET_DEBUG create mode 100644 baseconfig/CONFIG_NFSD create mode 100644 baseconfig/CONFIG_NFSD_BLOCKLAYOUT create mode 100644 baseconfig/CONFIG_NFSD_FAULT_INJECTION create mode 100644 baseconfig/CONFIG_NFSD_FLEXFILELAYOUT create mode 100644 baseconfig/CONFIG_NFSD_PNFS create mode 100644 baseconfig/CONFIG_NFSD_SCSILAYOUT create mode 100644 baseconfig/CONFIG_NFSD_V3 create mode 100644 baseconfig/CONFIG_NFSD_V3_ACL create mode 100644 baseconfig/CONFIG_NFSD_V4 create mode 100644 baseconfig/CONFIG_NFSD_V4_SECURITY_LABEL create mode 100644 baseconfig/CONFIG_NFS_FS create mode 100644 baseconfig/CONFIG_NFS_FSCACHE create mode 100644 baseconfig/CONFIG_NFS_SWAP create mode 100644 baseconfig/CONFIG_NFS_USE_LEGACY_DNS create mode 100644 baseconfig/CONFIG_NFS_V2 create mode 100644 baseconfig/CONFIG_NFS_V3 create mode 100644 baseconfig/CONFIG_NFS_V3_ACL create mode 100644 baseconfig/CONFIG_NFS_V4 create mode 100644 baseconfig/CONFIG_NFS_V4_1 create mode 100644 baseconfig/CONFIG_NFS_V4_1_IMPLEMENTATION_ID_DOMAIN create mode 100644 baseconfig/CONFIG_NFS_V4_1_MIGRATION create mode 100644 baseconfig/CONFIG_NFS_V4_2 create mode 100644 baseconfig/CONFIG_NFTL create mode 100644 baseconfig/CONFIG_NFT_BRIDGE_META create mode 100644 baseconfig/CONFIG_NFT_BRIDGE_REJECT create mode 100644 baseconfig/CONFIG_NFT_CHAIN_NAT_IPV4 create mode 100644 baseconfig/CONFIG_NFT_CHAIN_NAT_IPV6 create mode 100644 baseconfig/CONFIG_NFT_CHAIN_ROUTE_IPV4 create mode 100644 baseconfig/CONFIG_NFT_CHAIN_ROUTE_IPV6 create mode 100644 baseconfig/CONFIG_NFT_COMPAT create mode 100644 baseconfig/CONFIG_NFT_COUNTER create mode 100644 baseconfig/CONFIG_NFT_CT create mode 100644 baseconfig/CONFIG_NFT_DUP_IPV4 create mode 100644 baseconfig/CONFIG_NFT_DUP_IPV6 create mode 100644 baseconfig/CONFIG_NFT_DUP_NETDEV create mode 100644 baseconfig/CONFIG_NFT_EXTHDR create mode 100644 baseconfig/CONFIG_NFT_FIB_INET create mode 100644 baseconfig/CONFIG_NFT_FIB_IPV4 create mode 100644 baseconfig/CONFIG_NFT_FIB_IPV6 create mode 100644 baseconfig/CONFIG_NFT_FWD_NETDEV create mode 100644 baseconfig/CONFIG_NFT_HASH create mode 100644 baseconfig/CONFIG_NFT_LIMIT create mode 100644 baseconfig/CONFIG_NFT_LOG create mode 100644 baseconfig/CONFIG_NFT_MASQ create mode 100644 baseconfig/CONFIG_NFT_MASQ_IPV4 create mode 100644 baseconfig/CONFIG_NFT_MASQ_IPV6 create mode 100644 baseconfig/CONFIG_NFT_META create mode 100644 baseconfig/CONFIG_NFT_NAT create mode 100644 baseconfig/CONFIG_NFT_NUMGEN create mode 100644 baseconfig/CONFIG_NFT_OBJREF create mode 100644 baseconfig/CONFIG_NFT_QUEUE create mode 100644 baseconfig/CONFIG_NFT_QUOTA create mode 100644 baseconfig/CONFIG_NFT_RBTREE create mode 100644 baseconfig/CONFIG_NFT_REDIR create mode 100644 baseconfig/CONFIG_NFT_REDIR_IPV4 create mode 100644 baseconfig/CONFIG_NFT_REDIR_IPV6 create mode 100644 baseconfig/CONFIG_NFT_REJECT create mode 100644 baseconfig/CONFIG_NFT_REJECT_IPV4 create mode 100644 baseconfig/CONFIG_NFT_RT create mode 100644 baseconfig/CONFIG_NFT_SET_HASH create mode 100644 baseconfig/CONFIG_NFT_SET_RBTREE create mode 100644 baseconfig/CONFIG_NF_CONNTRACK create mode 100644 baseconfig/CONFIG_NF_CONNTRACK_AMANDA create mode 100644 baseconfig/CONFIG_NF_CONNTRACK_EVENTS create mode 100644 baseconfig/CONFIG_NF_CONNTRACK_FTP create mode 100644 baseconfig/CONFIG_NF_CONNTRACK_H323 create mode 100644 baseconfig/CONFIG_NF_CONNTRACK_IPV4 create mode 100644 baseconfig/CONFIG_NF_CONNTRACK_IPV6 create mode 100644 baseconfig/CONFIG_NF_CONNTRACK_IRC create mode 100644 baseconfig/CONFIG_NF_CONNTRACK_MARK create mode 100644 baseconfig/CONFIG_NF_CONNTRACK_NETBIOS_NS create mode 100644 baseconfig/CONFIG_NF_CONNTRACK_PPTP create mode 100644 baseconfig/CONFIG_NF_CONNTRACK_PROCFS create mode 100644 baseconfig/CONFIG_NF_CONNTRACK_PROC_COMPAT create mode 100644 baseconfig/CONFIG_NF_CONNTRACK_SANE create mode 100644 baseconfig/CONFIG_NF_CONNTRACK_SECMARK create mode 100644 baseconfig/CONFIG_NF_CONNTRACK_SIP create mode 100644 baseconfig/CONFIG_NF_CONNTRACK_SNMP create mode 100644 baseconfig/CONFIG_NF_CONNTRACK_TFTP create mode 100644 baseconfig/CONFIG_NF_CONNTRACK_TIMEOUT create mode 100644 baseconfig/CONFIG_NF_CONNTRACK_TIMESTAMP create mode 100644 baseconfig/CONFIG_NF_CONNTRACK_ZONES create mode 100644 baseconfig/CONFIG_NF_CT_NETLINK create mode 100644 baseconfig/CONFIG_NF_CT_NETLINK_HELPER create mode 100644 baseconfig/CONFIG_NF_CT_NETLINK_TIMEOUT create mode 100644 baseconfig/CONFIG_NF_CT_PROTO_DCCP create mode 100644 baseconfig/CONFIG_NF_CT_PROTO_SCTP create mode 100644 baseconfig/CONFIG_NF_CT_PROTO_UDPLITE create mode 100644 baseconfig/CONFIG_NF_DUP_IPV4 create mode 100644 baseconfig/CONFIG_NF_DUP_IPV6 create mode 100644 baseconfig/CONFIG_NF_DUP_NETDEV create mode 100644 baseconfig/CONFIG_NF_LOG_ARP create mode 100644 baseconfig/CONFIG_NF_LOG_BRIDGE create mode 100644 baseconfig/CONFIG_NF_LOG_IPV4 create mode 100644 baseconfig/CONFIG_NF_LOG_IPV6 create mode 100644 baseconfig/CONFIG_NF_LOG_NETDEV create mode 100644 baseconfig/CONFIG_NF_NAT create mode 100644 baseconfig/CONFIG_NF_NAT_SNMP_BASIC create mode 100644 baseconfig/CONFIG_NF_REJECT_IPV6 create mode 100644 baseconfig/CONFIG_NF_SOCKET_IPV4 create mode 100644 baseconfig/CONFIG_NF_SOCKET_IPV6 create mode 100644 baseconfig/CONFIG_NF_TABLES create mode 100644 baseconfig/CONFIG_NF_TABLES_ARP create mode 100644 baseconfig/CONFIG_NF_TABLES_BRIDGE create mode 100644 baseconfig/CONFIG_NF_TABLES_INET create mode 100644 baseconfig/CONFIG_NF_TABLES_IPV4 create mode 100644 baseconfig/CONFIG_NF_TABLES_IPV6 create mode 100644 baseconfig/CONFIG_NF_TABLES_NETDEV create mode 100644 baseconfig/CONFIG_NI903X_WDT create mode 100644 baseconfig/CONFIG_NILFS2_FS create mode 100644 baseconfig/CONFIG_NIU create mode 100644 baseconfig/CONFIG_NL80211 create mode 100644 baseconfig/CONFIG_NL80211_TESTMODE create mode 100644 baseconfig/CONFIG_NLMON create mode 100644 baseconfig/CONFIG_NLS create mode 100644 baseconfig/CONFIG_NLS_ASCII create mode 100644 baseconfig/CONFIG_NLS_CODEPAGE_1250 create mode 100644 baseconfig/CONFIG_NLS_CODEPAGE_1251 create mode 100644 baseconfig/CONFIG_NLS_CODEPAGE_437 create mode 100644 baseconfig/CONFIG_NLS_CODEPAGE_737 create mode 100644 baseconfig/CONFIG_NLS_CODEPAGE_775 create mode 100644 baseconfig/CONFIG_NLS_CODEPAGE_850 create mode 100644 baseconfig/CONFIG_NLS_CODEPAGE_852 create mode 100644 baseconfig/CONFIG_NLS_CODEPAGE_855 create mode 100644 baseconfig/CONFIG_NLS_CODEPAGE_857 create mode 100644 baseconfig/CONFIG_NLS_CODEPAGE_860 create mode 100644 baseconfig/CONFIG_NLS_CODEPAGE_861 create mode 100644 baseconfig/CONFIG_NLS_CODEPAGE_862 create mode 100644 baseconfig/CONFIG_NLS_CODEPAGE_863 create mode 100644 baseconfig/CONFIG_NLS_CODEPAGE_864 create mode 100644 baseconfig/CONFIG_NLS_CODEPAGE_865 create mode 100644 baseconfig/CONFIG_NLS_CODEPAGE_866 create mode 100644 baseconfig/CONFIG_NLS_CODEPAGE_869 create mode 100644 baseconfig/CONFIG_NLS_CODEPAGE_874 create mode 100644 baseconfig/CONFIG_NLS_CODEPAGE_932 create mode 100644 baseconfig/CONFIG_NLS_CODEPAGE_936 create mode 100644 baseconfig/CONFIG_NLS_CODEPAGE_949 create mode 100644 baseconfig/CONFIG_NLS_CODEPAGE_950 create mode 100644 baseconfig/CONFIG_NLS_DEFAULT create mode 100644 baseconfig/CONFIG_NLS_ISO8859_1 create mode 100644 baseconfig/CONFIG_NLS_ISO8859_13 create mode 100644 baseconfig/CONFIG_NLS_ISO8859_14 create mode 100644 baseconfig/CONFIG_NLS_ISO8859_15 create mode 100644 baseconfig/CONFIG_NLS_ISO8859_2 create mode 100644 baseconfig/CONFIG_NLS_ISO8859_3 create mode 100644 baseconfig/CONFIG_NLS_ISO8859_4 create mode 100644 baseconfig/CONFIG_NLS_ISO8859_5 create mode 100644 baseconfig/CONFIG_NLS_ISO8859_6 create mode 100644 baseconfig/CONFIG_NLS_ISO8859_7 create mode 100644 baseconfig/CONFIG_NLS_ISO8859_8 create mode 100644 baseconfig/CONFIG_NLS_ISO8859_9 create mode 100644 baseconfig/CONFIG_NLS_KOI8_R create mode 100644 baseconfig/CONFIG_NLS_KOI8_U create mode 100644 baseconfig/CONFIG_NLS_MAC_CELTIC create mode 100644 baseconfig/CONFIG_NLS_MAC_CENTEURO create mode 100644 baseconfig/CONFIG_NLS_MAC_CROATIAN create mode 100644 baseconfig/CONFIG_NLS_MAC_CYRILLIC create mode 100644 baseconfig/CONFIG_NLS_MAC_GAELIC create mode 100644 baseconfig/CONFIG_NLS_MAC_GREEK create mode 100644 baseconfig/CONFIG_NLS_MAC_ICELAND create mode 100644 baseconfig/CONFIG_NLS_MAC_INUIT create mode 100644 baseconfig/CONFIG_NLS_MAC_ROMAN create mode 100644 baseconfig/CONFIG_NLS_MAC_ROMANIAN create mode 100644 baseconfig/CONFIG_NLS_MAC_TURKISH create mode 100644 baseconfig/CONFIG_NLS_UTF8 create mode 100644 baseconfig/CONFIG_NMI_LOG_BUF_SHIFT create mode 100644 baseconfig/CONFIG_NOP_USB_XCEIV create mode 100644 baseconfig/CONFIG_NORTEL_HERMES create mode 100644 baseconfig/CONFIG_NOTIFIER_ERROR_INJECTION create mode 100644 baseconfig/CONFIG_NOUVEAU_DEBUG create mode 100644 baseconfig/CONFIG_NOUVEAU_DEBUG_DEFAULT create mode 100644 baseconfig/CONFIG_NOZOMI create mode 100644 baseconfig/CONFIG_NO_HZ create mode 100644 baseconfig/CONFIG_NS83820 create mode 100644 baseconfig/CONFIG_NSC_FIR create mode 100644 baseconfig/CONFIG_NTB create mode 100644 baseconfig/CONFIG_NTFS_FS create mode 100644 baseconfig/CONFIG_NTP_PPS create mode 100644 baseconfig/CONFIG_NVM create mode 100644 baseconfig/CONFIG_NVMEM create mode 100644 baseconfig/CONFIG_NVME_FC create mode 100644 baseconfig/CONFIG_NVME_RDMA create mode 100644 baseconfig/CONFIG_NVME_TARGET create mode 100644 baseconfig/CONFIG_NVME_TARGET_FC create mode 100644 baseconfig/CONFIG_NVME_TARGET_FCLOOP create mode 100644 baseconfig/CONFIG_NVME_TARGET_LOOP create mode 100644 baseconfig/CONFIG_NVME_TARGET_RDMA create mode 100644 baseconfig/CONFIG_NVRAM create mode 100644 baseconfig/CONFIG_N_GSM create mode 100644 baseconfig/CONFIG_N_HDLC create mode 100644 baseconfig/CONFIG_OCFS2_DEBUG_FS create mode 100644 baseconfig/CONFIG_OCFS2_DEBUG_MASKLOG create mode 100644 baseconfig/CONFIG_OCFS2_FS create mode 100644 baseconfig/CONFIG_OCFS2_FS_O2CB create mode 100644 baseconfig/CONFIG_OCFS2_FS_STATS create mode 100644 baseconfig/CONFIG_OCFS2_FS_USERSPACE_CLUSTER create mode 100644 baseconfig/CONFIG_OLD_BELKIN_DONGLE create mode 100644 baseconfig/CONFIG_OMFS_FS create mode 100644 baseconfig/CONFIG_OPENVSWITCH create mode 100644 baseconfig/CONFIG_OPENVSWITCH_GENEVE create mode 100644 baseconfig/CONFIG_OPENVSWITCH_GRE create mode 100644 baseconfig/CONFIG_OPENVSWITCH_VXLAN create mode 100644 baseconfig/CONFIG_OPROFILE create mode 100644 baseconfig/CONFIG_OPT3001 create mode 100644 baseconfig/CONFIG_OPTIMIZE_INLINING create mode 100644 baseconfig/CONFIG_OPTPROBES create mode 100644 baseconfig/CONFIG_ORANGEFS_FS create mode 100644 baseconfig/CONFIG_ORINOCO_USB create mode 100644 baseconfig/CONFIG_OSF_PARTITION create mode 100644 baseconfig/CONFIG_OVERLAY_FS create mode 100644 baseconfig/CONFIG_OVERLAY_FS_REDIRECT_DIR create mode 100644 baseconfig/CONFIG_P54_COMMON create mode 100644 baseconfig/CONFIG_P54_PCI create mode 100644 baseconfig/CONFIG_P54_SPI create mode 100644 baseconfig/CONFIG_P54_USB create mode 100644 baseconfig/CONFIG_PA12203001 create mode 100644 baseconfig/CONFIG_PACKET create mode 100644 baseconfig/CONFIG_PACKET_DIAG create mode 100644 baseconfig/CONFIG_PAGE_EXTENSION create mode 100644 baseconfig/CONFIG_PAGE_OWNER create mode 100644 baseconfig/CONFIG_PAGE_POISONING create mode 100644 baseconfig/CONFIG_PANEL create mode 100644 baseconfig/CONFIG_PANIC_ON_OOPS create mode 100644 baseconfig/CONFIG_PANIC_TIMEOUT create mode 100644 baseconfig/CONFIG_PANTHERLORD_FF create mode 100644 baseconfig/CONFIG_PARIDE create mode 100644 baseconfig/CONFIG_PARPORT create mode 100644 baseconfig/CONFIG_PARPORT_1284 create mode 100644 baseconfig/CONFIG_PARPORT_AX88796 create mode 100644 baseconfig/CONFIG_PARPORT_PC create mode 100644 baseconfig/CONFIG_PARPORT_PC_FIFO create mode 100644 baseconfig/CONFIG_PARPORT_PC_PCMCIA create mode 100644 baseconfig/CONFIG_PARPORT_PC_SUPERIO create mode 100644 baseconfig/CONFIG_PARPORT_SERIAL create mode 100644 baseconfig/CONFIG_PARTITION_ADVANCED create mode 100644 baseconfig/CONFIG_PATA_ACPI create mode 100644 baseconfig/CONFIG_PATA_ALI create mode 100644 baseconfig/CONFIG_PATA_AMD create mode 100644 baseconfig/CONFIG_PATA_ARASAN_CF create mode 100644 baseconfig/CONFIG_PATA_ARTOP create mode 100644 baseconfig/CONFIG_PATA_ATIIXP create mode 100644 baseconfig/CONFIG_PATA_ATP867X create mode 100644 baseconfig/CONFIG_PATA_CMD640_PCI create mode 100644 baseconfig/CONFIG_PATA_CMD64X create mode 100644 baseconfig/CONFIG_PATA_CS5520 create mode 100644 baseconfig/CONFIG_PATA_CS5530 create mode 100644 baseconfig/CONFIG_PATA_CS5535 create mode 100644 baseconfig/CONFIG_PATA_CS5536 create mode 100644 baseconfig/CONFIG_PATA_CYPRESS create mode 100644 baseconfig/CONFIG_PATA_EFAR create mode 100644 baseconfig/CONFIG_PATA_HPT366 create mode 100644 baseconfig/CONFIG_PATA_HPT37X create mode 100644 baseconfig/CONFIG_PATA_HPT3X2N create mode 100644 baseconfig/CONFIG_PATA_HPT3X3 create mode 100644 baseconfig/CONFIG_PATA_HPT3X3_DMA create mode 100644 baseconfig/CONFIG_PATA_IT8213 create mode 100644 baseconfig/CONFIG_PATA_IT821X create mode 100644 baseconfig/CONFIG_PATA_JMICRON create mode 100644 baseconfig/CONFIG_PATA_LEGACY create mode 100644 baseconfig/CONFIG_PATA_MARVELL create mode 100644 baseconfig/CONFIG_PATA_MPIIX create mode 100644 baseconfig/CONFIG_PATA_NETCELL create mode 100644 baseconfig/CONFIG_PATA_NINJA32 create mode 100644 baseconfig/CONFIG_PATA_NS87410 create mode 100644 baseconfig/CONFIG_PATA_NS87415 create mode 100644 baseconfig/CONFIG_PATA_OLDPIIX create mode 100644 baseconfig/CONFIG_PATA_OPTI create mode 100644 baseconfig/CONFIG_PATA_OPTIDMA create mode 100644 baseconfig/CONFIG_PATA_PCMCIA create mode 100644 baseconfig/CONFIG_PATA_PDC2027X create mode 100644 baseconfig/CONFIG_PATA_PDC_OLD create mode 100644 baseconfig/CONFIG_PATA_RADISYS create mode 100644 baseconfig/CONFIG_PATA_RDC create mode 100644 baseconfig/CONFIG_PATA_RZ1000 create mode 100644 baseconfig/CONFIG_PATA_SC1200 create mode 100644 baseconfig/CONFIG_PATA_SCH create mode 100644 baseconfig/CONFIG_PATA_SERVERWORKS create mode 100644 baseconfig/CONFIG_PATA_SIL680 create mode 100644 baseconfig/CONFIG_PATA_SIS create mode 100644 baseconfig/CONFIG_PATA_TOSHIBA create mode 100644 baseconfig/CONFIG_PATA_TRIFLEX create mode 100644 baseconfig/CONFIG_PATA_VIA create mode 100644 baseconfig/CONFIG_PATA_WINBOND create mode 100644 baseconfig/CONFIG_PC87413_WDT create mode 100644 baseconfig/CONFIG_PCCARD create mode 100644 baseconfig/CONFIG_PCF50633_ADC create mode 100644 baseconfig/CONFIG_PCF50633_GPIO create mode 100644 baseconfig/CONFIG_PCH_GBE create mode 100644 baseconfig/CONFIG_PCI create mode 100644 baseconfig/CONFIG_PCIEAER create mode 100644 baseconfig/CONFIG_PCIEAER_INJECT create mode 100644 baseconfig/CONFIG_PCIEASPM create mode 100644 baseconfig/CONFIG_PCIEASPM_DEBUG create mode 100644 baseconfig/CONFIG_PCIEPORTBUS create mode 100644 baseconfig/CONFIG_PCIE_DPC create mode 100644 baseconfig/CONFIG_PCIE_DW_PLAT create mode 100644 baseconfig/CONFIG_PCIE_ECRC create mode 100644 baseconfig/CONFIG_PCIE_PTM create mode 100644 baseconfig/CONFIG_PCIPCWATCHDOG create mode 100644 baseconfig/CONFIG_PCI_DEBUG create mode 100644 baseconfig/CONFIG_PCI_HERMES create mode 100644 baseconfig/CONFIG_PCI_IOV create mode 100644 baseconfig/CONFIG_PCI_MSI create mode 100644 baseconfig/CONFIG_PCI_PASID create mode 100644 baseconfig/CONFIG_PCI_PRI create mode 100644 baseconfig/CONFIG_PCI_REALLOC_ENABLE_AUTO create mode 100644 baseconfig/CONFIG_PCI_STUB create mode 100644 baseconfig/CONFIG_PCMCIA create mode 100644 baseconfig/CONFIG_PCMCIA_3C574 create mode 100644 baseconfig/CONFIG_PCMCIA_3C589 create mode 100644 baseconfig/CONFIG_PCMCIA_AXNET create mode 100644 baseconfig/CONFIG_PCMCIA_DEBUG create mode 100644 baseconfig/CONFIG_PCMCIA_FMVJ18X create mode 100644 baseconfig/CONFIG_PCMCIA_HERMES create mode 100644 baseconfig/CONFIG_PCMCIA_LOAD_CIS create mode 100644 baseconfig/CONFIG_PCMCIA_NMCLAN create mode 100644 baseconfig/CONFIG_PCMCIA_PCNET create mode 100644 baseconfig/CONFIG_PCMCIA_RAYCS create mode 100644 baseconfig/CONFIG_PCMCIA_SMC91C92 create mode 100644 baseconfig/CONFIG_PCMCIA_SPECTRUM create mode 100644 baseconfig/CONFIG_PCMCIA_WL3501 create mode 100644 baseconfig/CONFIG_PCMCIA_XIRC2PS create mode 100644 baseconfig/CONFIG_PCMCIA_XIRCOM create mode 100644 baseconfig/CONFIG_PCNET32 create mode 100644 baseconfig/CONFIG_PD6729 create mode 100644 baseconfig/CONFIG_PDA_POWER create mode 100644 baseconfig/CONFIG_PDC_ADMA create mode 100644 baseconfig/CONFIG_PERCPU_TEST create mode 100644 baseconfig/CONFIG_PERF_EVENTS create mode 100644 baseconfig/CONFIG_PERSISTENT_KEYRINGS create mode 100644 baseconfig/CONFIG_PGTABLE_MAPPING create mode 100644 baseconfig/CONFIG_PHANTOM create mode 100644 baseconfig/CONFIG_PHONE create mode 100644 baseconfig/CONFIG_PHONET create mode 100644 baseconfig/CONFIG_PHYLIB create mode 100644 baseconfig/CONFIG_PHY_PXA_28NM_HSIC create mode 100644 baseconfig/CONFIG_PHY_PXA_28NM_USB2 create mode 100644 baseconfig/CONFIG_PHY_ST_SPEAR1310_MIPHY create mode 100644 baseconfig/CONFIG_PHY_ST_SPEAR1340_MIPHY create mode 100644 baseconfig/CONFIG_PHY_TUSB1210 create mode 100644 baseconfig/CONFIG_PID_NS create mode 100644 baseconfig/CONFIG_PINCONF create mode 100644 baseconfig/CONFIG_PINCTRL create mode 100644 baseconfig/CONFIG_PINCTRL_MSM8994 create mode 100644 baseconfig/CONFIG_PINCTRL_SX150X create mode 100644 baseconfig/CONFIG_PINMUX create mode 100644 baseconfig/CONFIG_PKCS7_MESSAGE_PARSER create mode 100644 baseconfig/CONFIG_PKCS7_TEST_KEY create mode 100644 baseconfig/CONFIG_PLATFORM_SI4713 create mode 100644 baseconfig/CONFIG_PLIP create mode 100644 baseconfig/CONFIG_PLX_HERMES create mode 100644 baseconfig/CONFIG_PM create mode 100644 baseconfig/CONFIG_PMBUS create mode 100644 baseconfig/CONFIG_PMIC_ADP5520 create mode 100644 baseconfig/CONFIG_PMIC_DA903X create mode 100644 baseconfig/CONFIG_PM_ADVANCED_DEBUG create mode 100644 baseconfig/CONFIG_PM_AUTOSLEEP create mode 100644 baseconfig/CONFIG_PM_DEBUG create mode 100644 baseconfig/CONFIG_PM_DEVFREQ create mode 100644 baseconfig/CONFIG_PM_DEVFREQ_EVENT create mode 100644 baseconfig/CONFIG_PM_OPP create mode 100644 baseconfig/CONFIG_PM_STD_PARTITION create mode 100644 baseconfig/CONFIG_PM_TEST_SUSPEND create mode 100644 baseconfig/CONFIG_PM_TRACE create mode 100644 baseconfig/CONFIG_PM_TRACE_RTC create mode 100644 baseconfig/CONFIG_PM_WAKELOCKS create mode 100644 baseconfig/CONFIG_PNFS_BLOCK create mode 100644 baseconfig/CONFIG_PNFS_OBJLAYOUT create mode 100644 baseconfig/CONFIG_POSIX_MQUEUE create mode 100644 baseconfig/CONFIG_POWERCAP create mode 100644 baseconfig/CONFIG_POWER_AVS create mode 100644 baseconfig/CONFIG_POWER_RESET create mode 100644 baseconfig/CONFIG_POWER_RESET_BRCMKONA create mode 100644 baseconfig/CONFIG_POWER_RESET_LTC2952 create mode 100644 baseconfig/CONFIG_POWER_RESET_RESTART create mode 100644 baseconfig/CONFIG_POWER_RESET_SYSCON create mode 100644 baseconfig/CONFIG_POWER_RESET_SYSCON_POWEROFF create mode 100644 baseconfig/CONFIG_POWER_SUPPLY create mode 100644 baseconfig/CONFIG_POWER_SUPPLY_DEBUG create mode 100644 baseconfig/CONFIG_PPC_PTDUMP create mode 100644 baseconfig/CONFIG_PPDEV create mode 100644 baseconfig/CONFIG_PPP create mode 100644 baseconfig/CONFIG_PPPOATM create mode 100644 baseconfig/CONFIG_PPPOE create mode 100644 baseconfig/CONFIG_PPPOL2TP create mode 100644 baseconfig/CONFIG_PPP_ASYNC create mode 100644 baseconfig/CONFIG_PPP_BSDCOMP create mode 100644 baseconfig/CONFIG_PPP_DEFLATE create mode 100644 baseconfig/CONFIG_PPP_FILTER create mode 100644 baseconfig/CONFIG_PPP_MPPE create mode 100644 baseconfig/CONFIG_PPP_MULTILINK create mode 100644 baseconfig/CONFIG_PPP_SYNC_TTY create mode 100644 baseconfig/CONFIG_PPS create mode 100644 baseconfig/CONFIG_PPS_CLIENT_GPIO create mode 100644 baseconfig/CONFIG_PPS_CLIENT_KTIMER create mode 100644 baseconfig/CONFIG_PPS_CLIENT_LDISC create mode 100644 baseconfig/CONFIG_PPS_CLIENT_PARPORT create mode 100644 baseconfig/CONFIG_PPS_DEBUG create mode 100644 baseconfig/CONFIG_PPS_GENERATOR_PARPORT create mode 100644 baseconfig/CONFIG_PPTP create mode 100644 baseconfig/CONFIG_PREEMPT create mode 100644 baseconfig/CONFIG_PREEMPT_NONE create mode 100644 baseconfig/CONFIG_PREEMPT_VOLUNTARY create mode 100644 baseconfig/CONFIG_PREVENT_FIRMWARE_BUILD create mode 100644 baseconfig/CONFIG_PRINTER create mode 100644 baseconfig/CONFIG_PRINTK_TIME create mode 100644 baseconfig/CONFIG_PRINT_QUOTA_WARNING create mode 100644 baseconfig/CONFIG_PRISM2_USB create mode 100644 baseconfig/CONFIG_PRISM54 create mode 100644 baseconfig/CONFIG_PROC_CHILDREN create mode 100644 baseconfig/CONFIG_PROC_EVENTS create mode 100644 baseconfig/CONFIG_PROC_FS create mode 100644 baseconfig/CONFIG_PROC_KCORE create mode 100644 baseconfig/CONFIG_PROC_PID_CPUSET create mode 100644 baseconfig/CONFIG_PROC_VMCORE create mode 100644 baseconfig/CONFIG_PROFILING create mode 100644 baseconfig/CONFIG_PROVE_LOCKING create mode 100644 baseconfig/CONFIG_PROVE_RCU_REPEATEDLY create mode 100644 baseconfig/CONFIG_PSTORE create mode 100644 baseconfig/CONFIG_PSTORE_CONSOLE create mode 100644 baseconfig/CONFIG_PSTORE_FTRACE create mode 100644 baseconfig/CONFIG_PSTORE_PMSG create mode 100644 baseconfig/CONFIG_PSTORE_RAM create mode 100644 baseconfig/CONFIG_PTP_1588_CLOCK create mode 100644 baseconfig/CONFIG_PTP_1588_CLOCK_PCH create mode 100644 baseconfig/CONFIG_PWM create mode 100644 baseconfig/CONFIG_PWM_FSL_FTM create mode 100644 baseconfig/CONFIG_PWM_HIBVT create mode 100644 baseconfig/CONFIG_PWM_PCA9685 create mode 100644 baseconfig/CONFIG_PWRSEQ_EMMC create mode 100644 baseconfig/CONFIG_PWRSEQ_SIMPLE create mode 100644 baseconfig/CONFIG_QCA7000 create mode 100644 baseconfig/CONFIG_QCOM_ADSP_PIL create mode 100644 baseconfig/CONFIG_QCOM_EBI2 create mode 100644 baseconfig/CONFIG_QCOM_EMAC create mode 100644 baseconfig/CONFIG_QCOM_HIDMA create mode 100644 baseconfig/CONFIG_QCOM_HIDMA_MGMT create mode 100644 baseconfig/CONFIG_QED create mode 100644 baseconfig/CONFIG_QEDE create mode 100644 baseconfig/CONFIG_QEDI create mode 100644 baseconfig/CONFIG_QED_SRIOV create mode 100644 baseconfig/CONFIG_QFMT_V1 create mode 100644 baseconfig/CONFIG_QFMT_V2 create mode 100644 baseconfig/CONFIG_QLA3XXX create mode 100644 baseconfig/CONFIG_QLCNIC create mode 100644 baseconfig/CONFIG_QLCNIC_DCB create mode 100644 baseconfig/CONFIG_QLCNIC_HWMON create mode 100644 baseconfig/CONFIG_QLCNIC_SRIOV create mode 100644 baseconfig/CONFIG_QLGE create mode 100644 baseconfig/CONFIG_QNX4FS_FS create mode 100644 baseconfig/CONFIG_QNX6FS_FS create mode 100644 baseconfig/CONFIG_QSEMI_PHY create mode 100644 baseconfig/CONFIG_QUOTA create mode 100644 baseconfig/CONFIG_QUOTACTL create mode 100644 baseconfig/CONFIG_QUOTA_DEBUG create mode 100644 baseconfig/CONFIG_QUOTA_NETLINK_INTERFACE create mode 100644 baseconfig/CONFIG_R3964 create mode 100644 baseconfig/CONFIG_R6040 create mode 100644 baseconfig/CONFIG_R8169 create mode 100644 baseconfig/CONFIG_R8188EU create mode 100644 baseconfig/CONFIG_R8712U create mode 100644 baseconfig/CONFIG_R8723AU create mode 100644 baseconfig/CONFIG_RADIO_ADAPTERS create mode 100644 baseconfig/CONFIG_RADIO_AZTECH create mode 100644 baseconfig/CONFIG_RADIO_CADET create mode 100644 baseconfig/CONFIG_RADIO_GEMTEK create mode 100644 baseconfig/CONFIG_RADIO_MAXIRADIO create mode 100644 baseconfig/CONFIG_RADIO_MIROPCM20 create mode 100644 baseconfig/CONFIG_RADIO_RTRACK create mode 100644 baseconfig/CONFIG_RADIO_RTRACK2 create mode 100644 baseconfig/CONFIG_RADIO_SAA7706H create mode 100644 baseconfig/CONFIG_RADIO_SF16FMI create mode 100644 baseconfig/CONFIG_RADIO_SF16FMR2 create mode 100644 baseconfig/CONFIG_RADIO_SHARK create mode 100644 baseconfig/CONFIG_RADIO_SHARK2 create mode 100644 baseconfig/CONFIG_RADIO_SI470X create mode 100644 baseconfig/CONFIG_RADIO_SI4713 create mode 100644 baseconfig/CONFIG_RADIO_TEA5764 create mode 100644 baseconfig/CONFIG_RADIO_TEF6862 create mode 100644 baseconfig/CONFIG_RADIO_TERRATEC create mode 100644 baseconfig/CONFIG_RADIO_TRUST create mode 100644 baseconfig/CONFIG_RADIO_TYPHOON create mode 100644 baseconfig/CONFIG_RADIO_WL1273 create mode 100644 baseconfig/CONFIG_RADIO_WL128X create mode 100644 baseconfig/CONFIG_RADIO_ZOLTRIX create mode 100644 baseconfig/CONFIG_RAID_ATTRS create mode 100644 baseconfig/CONFIG_RANDOM32_SELFTEST create mode 100644 baseconfig/CONFIG_RAW_DRIVER create mode 100644 baseconfig/CONFIG_RBTREE_TEST create mode 100644 baseconfig/CONFIG_RCU_CPU_STALL_TIMEOUT create mode 100644 baseconfig/CONFIG_RCU_EQS_DEBUG create mode 100644 baseconfig/CONFIG_RCU_EXPERT create mode 100644 baseconfig/CONFIG_RCU_FAST_NO_HZ create mode 100644 baseconfig/CONFIG_RCU_KTHREAD_PRIO create mode 100644 baseconfig/CONFIG_RCU_NOCB_CPU create mode 100644 baseconfig/CONFIG_RCU_NOCB_CPU_ALL create mode 100644 baseconfig/CONFIG_RCU_PERF_TEST create mode 100644 baseconfig/CONFIG_RCU_TORTURE_TEST create mode 100644 baseconfig/CONFIG_RCU_TORTURE_TEST_SLOW_CLEANUP create mode 100644 baseconfig/CONFIG_RCU_TORTURE_TEST_SLOW_INIT create mode 100644 baseconfig/CONFIG_RCU_TORTURE_TEST_SLOW_INIT_DELAY create mode 100644 baseconfig/CONFIG_RCU_TORTURE_TEST_SLOW_PREINIT create mode 100644 baseconfig/CONFIG_RCU_TRACE create mode 100644 baseconfig/CONFIG_RC_ATI_REMOTE create mode 100644 baseconfig/CONFIG_RC_CORE create mode 100644 baseconfig/CONFIG_RC_DECODERS create mode 100644 baseconfig/CONFIG_RC_DEVICES create mode 100644 baseconfig/CONFIG_RC_LOOPBACK create mode 100644 baseconfig/CONFIG_RC_MAP create mode 100644 baseconfig/CONFIG_RDMA_RXE create mode 100644 baseconfig/CONFIG_RDS create mode 100644 baseconfig/CONFIG_RDS_DEBUG create mode 100644 baseconfig/CONFIG_RDS_RDMA create mode 100644 baseconfig/CONFIG_RDS_TCP create mode 100644 baseconfig/CONFIG_RD_BZIP2 create mode 100644 baseconfig/CONFIG_RD_GZIP create mode 100644 baseconfig/CONFIG_RD_LZ4 create mode 100644 baseconfig/CONFIG_RD_LZMA create mode 100644 baseconfig/CONFIG_RD_LZO create mode 100644 baseconfig/CONFIG_RD_XZ create mode 100644 baseconfig/CONFIG_READABLE_ASM create mode 100644 baseconfig/CONFIG_REALTEK_AUTOPM create mode 100644 baseconfig/CONFIG_REALTEK_PHY create mode 100644 baseconfig/CONFIG_REGMAP create mode 100644 baseconfig/CONFIG_REGMAP_I2C create mode 100644 baseconfig/CONFIG_REGULATOR create mode 100644 baseconfig/CONFIG_REGULATOR_DEBUG create mode 100644 baseconfig/CONFIG_REISERFS_CHECK create mode 100644 baseconfig/CONFIG_REISERFS_FS create mode 100644 baseconfig/CONFIG_REISERFS_FS_POSIX_ACL create mode 100644 baseconfig/CONFIG_REISERFS_FS_SECURITY create mode 100644 baseconfig/CONFIG_REISERFS_FS_XATTR create mode 100644 baseconfig/CONFIG_REISERFS_PROC_INFO create mode 100644 baseconfig/CONFIG_RELAY create mode 100644 baseconfig/CONFIG_RELOCATABLE_TEST create mode 100644 baseconfig/CONFIG_REMOTEPROC create mode 100644 baseconfig/CONFIG_RFD_FTL create mode 100644 baseconfig/CONFIG_RFKILL create mode 100644 baseconfig/CONFIG_RFKILL_GPIO create mode 100644 baseconfig/CONFIG_RFKILL_INPUT create mode 100644 baseconfig/CONFIG_RING_BUFFER_BENCHMARK create mode 100644 baseconfig/CONFIG_RING_BUFFER_STARTUP_TEST create mode 100644 baseconfig/CONFIG_RIO create mode 100644 baseconfig/CONFIG_RMI4_CORE create mode 100644 baseconfig/CONFIG_RMI4_F03 create mode 100644 baseconfig/CONFIG_RMI4_F11 create mode 100644 baseconfig/CONFIG_RMI4_F12 create mode 100644 baseconfig/CONFIG_RMI4_F30 create mode 100644 baseconfig/CONFIG_RMI4_F34 create mode 100644 baseconfig/CONFIG_RMI4_F54 create mode 100644 baseconfig/CONFIG_RMI4_F55 create mode 100644 baseconfig/CONFIG_RMI4_I2C create mode 100644 baseconfig/CONFIG_RMI4_SMB create mode 100644 baseconfig/CONFIG_RMI4_SPI create mode 100644 baseconfig/CONFIG_ROCKER create mode 100644 baseconfig/CONFIG_ROCKETPORT create mode 100644 baseconfig/CONFIG_ROMFS_FS create mode 100644 baseconfig/CONFIG_ROSE create mode 100644 baseconfig/CONFIG_RPCSEC_GSS_KRB5 create mode 100644 baseconfig/CONFIG_RPR0521 create mode 100644 baseconfig/CONFIG_RSI_91X create mode 100644 baseconfig/CONFIG_RSI_DEBUGFS create mode 100644 baseconfig/CONFIG_RSI_SDIO create mode 100644 baseconfig/CONFIG_RSI_USB create mode 100644 baseconfig/CONFIG_RT2400PCI create mode 100644 baseconfig/CONFIG_RT2500PCI create mode 100644 baseconfig/CONFIG_RT2500USB create mode 100644 baseconfig/CONFIG_RT2800PCI create mode 100644 baseconfig/CONFIG_RT2800PCI_RT3290 create mode 100644 baseconfig/CONFIG_RT2800PCI_RT33XX create mode 100644 baseconfig/CONFIG_RT2800PCI_RT35XX create mode 100644 baseconfig/CONFIG_RT2800PCI_RT53XX create mode 100644 baseconfig/CONFIG_RT2800USB create mode 100644 baseconfig/CONFIG_RT2800USB_RT33XX create mode 100644 baseconfig/CONFIG_RT2800USB_RT3573 create mode 100644 baseconfig/CONFIG_RT2800USB_RT35XX create mode 100644 baseconfig/CONFIG_RT2800USB_RT53XX create mode 100644 baseconfig/CONFIG_RT2800USB_RT55XX create mode 100644 baseconfig/CONFIG_RT2800USB_UNKNOWN create mode 100644 baseconfig/CONFIG_RT2X00 create mode 100644 baseconfig/CONFIG_RT2X00_DEBUG create mode 100644 baseconfig/CONFIG_RT2X00_LIB_DEBUGFS create mode 100644 baseconfig/CONFIG_RT61PCI create mode 100644 baseconfig/CONFIG_RT73USB create mode 100644 baseconfig/CONFIG_RTC create mode 100644 baseconfig/CONFIG_RTC_CLASS create mode 100644 baseconfig/CONFIG_RTC_DEBUG create mode 100644 baseconfig/CONFIG_RTC_DRV_AB3100 create mode 100644 baseconfig/CONFIG_RTC_DRV_ABB5ZES3 create mode 100644 baseconfig/CONFIG_RTC_DRV_ABX80X create mode 100644 baseconfig/CONFIG_RTC_DRV_BQ32K create mode 100644 baseconfig/CONFIG_RTC_DRV_BQ4802 create mode 100644 baseconfig/CONFIG_RTC_DRV_CMOS create mode 100644 baseconfig/CONFIG_RTC_DRV_DS1286 create mode 100644 baseconfig/CONFIG_RTC_DRV_DS1302 create mode 100644 baseconfig/CONFIG_RTC_DRV_DS1305 create mode 100644 baseconfig/CONFIG_RTC_DRV_DS1307 create mode 100644 baseconfig/CONFIG_RTC_DRV_DS1307_CENTURY create mode 100644 baseconfig/CONFIG_RTC_DRV_DS1307_HWMON create mode 100644 baseconfig/CONFIG_RTC_DRV_DS1343 create mode 100644 baseconfig/CONFIG_RTC_DRV_DS1347 create mode 100644 baseconfig/CONFIG_RTC_DRV_DS1374 create mode 100644 baseconfig/CONFIG_RTC_DRV_DS1374_WDT create mode 100644 baseconfig/CONFIG_RTC_DRV_DS1390 create mode 100644 baseconfig/CONFIG_RTC_DRV_DS1511 create mode 100644 baseconfig/CONFIG_RTC_DRV_DS1553 create mode 100644 baseconfig/CONFIG_RTC_DRV_DS1672 create mode 100644 baseconfig/CONFIG_RTC_DRV_DS1685_FAMILY create mode 100644 baseconfig/CONFIG_RTC_DRV_DS1742 create mode 100644 baseconfig/CONFIG_RTC_DRV_DS2404 create mode 100644 baseconfig/CONFIG_RTC_DRV_DS3232 create mode 100644 baseconfig/CONFIG_RTC_DRV_EFI create mode 100644 baseconfig/CONFIG_RTC_DRV_EM3027 create mode 100644 baseconfig/CONFIG_RTC_DRV_EP93XX create mode 100644 baseconfig/CONFIG_RTC_DRV_FM3130 create mode 100644 baseconfig/CONFIG_RTC_DRV_HID_SENSOR_TIME create mode 100644 baseconfig/CONFIG_RTC_DRV_HYM8563 create mode 100644 baseconfig/CONFIG_RTC_DRV_ISL12022 create mode 100644 baseconfig/CONFIG_RTC_DRV_ISL12057 create mode 100644 baseconfig/CONFIG_RTC_DRV_ISL1208 create mode 100644 baseconfig/CONFIG_RTC_DRV_M41T80 create mode 100644 baseconfig/CONFIG_RTC_DRV_M41T80_WDT create mode 100644 baseconfig/CONFIG_RTC_DRV_M41T93 create mode 100644 baseconfig/CONFIG_RTC_DRV_M41T94 create mode 100644 baseconfig/CONFIG_RTC_DRV_M48T35 create mode 100644 baseconfig/CONFIG_RTC_DRV_M48T59 create mode 100644 baseconfig/CONFIG_RTC_DRV_M48T86 create mode 100644 baseconfig/CONFIG_RTC_DRV_MAX6900 create mode 100644 baseconfig/CONFIG_RTC_DRV_MAX6902 create mode 100644 baseconfig/CONFIG_RTC_DRV_MAX6916 create mode 100644 baseconfig/CONFIG_RTC_DRV_MCP795 create mode 100644 baseconfig/CONFIG_RTC_DRV_MOXART create mode 100644 baseconfig/CONFIG_RTC_DRV_MSM6242 create mode 100644 baseconfig/CONFIG_RTC_DRV_PCF2123 create mode 100644 baseconfig/CONFIG_RTC_DRV_PCF2127 create mode 100644 baseconfig/CONFIG_RTC_DRV_PCF50633 create mode 100644 baseconfig/CONFIG_RTC_DRV_PCF85063 create mode 100644 baseconfig/CONFIG_RTC_DRV_PCF8523 create mode 100644 baseconfig/CONFIG_RTC_DRV_PCF8563 create mode 100644 baseconfig/CONFIG_RTC_DRV_PCF8583 create mode 100644 baseconfig/CONFIG_RTC_DRV_PM8XXX create mode 100644 baseconfig/CONFIG_RTC_DRV_R7301 create mode 100644 baseconfig/CONFIG_RTC_DRV_R9701 create mode 100644 baseconfig/CONFIG_RTC_DRV_RP5C01 create mode 100644 baseconfig/CONFIG_RTC_DRV_RS5C348 create mode 100644 baseconfig/CONFIG_RTC_DRV_RS5C372 create mode 100644 baseconfig/CONFIG_RTC_DRV_RV3029C2 create mode 100644 baseconfig/CONFIG_RTC_DRV_RV3029_HWMON create mode 100644 baseconfig/CONFIG_RTC_DRV_RV8803 create mode 100644 baseconfig/CONFIG_RTC_DRV_RX4581 create mode 100644 baseconfig/CONFIG_RTC_DRV_RX6110 create mode 100644 baseconfig/CONFIG_RTC_DRV_RX8010 create mode 100644 baseconfig/CONFIG_RTC_DRV_RX8025 create mode 100644 baseconfig/CONFIG_RTC_DRV_RX8581 create mode 100644 baseconfig/CONFIG_RTC_DRV_S35390A create mode 100644 baseconfig/CONFIG_RTC_DRV_SA1100 create mode 100644 baseconfig/CONFIG_RTC_DRV_SNVS create mode 100644 baseconfig/CONFIG_RTC_DRV_STK17TA8 create mode 100644 baseconfig/CONFIG_RTC_DRV_TEST create mode 100644 baseconfig/CONFIG_RTC_DRV_V3020 create mode 100644 baseconfig/CONFIG_RTC_DRV_WM831X create mode 100644 baseconfig/CONFIG_RTC_DRV_WM8350 create mode 100644 baseconfig/CONFIG_RTC_DRV_X1205 create mode 100644 baseconfig/CONFIG_RTC_DRV_ZYNQMP create mode 100644 baseconfig/CONFIG_RTC_DS1685_PROC_REGS create mode 100644 baseconfig/CONFIG_RTC_DS1685_SYSFS_REGS create mode 100644 baseconfig/CONFIG_RTC_HCTOSYS create mode 100644 baseconfig/CONFIG_RTC_HCTOSYS_DEVICE create mode 100644 baseconfig/CONFIG_RTC_INTF_DEV create mode 100644 baseconfig/CONFIG_RTC_INTF_DEV_UIE_EMUL create mode 100644 baseconfig/CONFIG_RTC_INTF_PROC create mode 100644 baseconfig/CONFIG_RTC_INTF_SYSFS create mode 100644 baseconfig/CONFIG_RTC_SYSTOHC create mode 100644 baseconfig/CONFIG_RTL8180 create mode 100644 baseconfig/CONFIG_RTL8187 create mode 100644 baseconfig/CONFIG_RTL8188EE create mode 100644 baseconfig/CONFIG_RTL8192CE create mode 100644 baseconfig/CONFIG_RTL8192CU create mode 100644 baseconfig/CONFIG_RTL8192DE create mode 100644 baseconfig/CONFIG_RTL8192E create mode 100644 baseconfig/CONFIG_RTL8192EE create mode 100644 baseconfig/CONFIG_RTL8192SE create mode 100644 baseconfig/CONFIG_RTL8192U create mode 100644 baseconfig/CONFIG_RTL8723AE create mode 100644 baseconfig/CONFIG_RTL8723BE create mode 100644 baseconfig/CONFIG_RTL8821AE create mode 100644 baseconfig/CONFIG_RTL8XXXU create mode 100644 baseconfig/CONFIG_RTL8XXXU_UNTESTED create mode 100644 baseconfig/CONFIG_RTLLIB create mode 100644 baseconfig/CONFIG_RTLLIB_CRYPTO_CCMP create mode 100644 baseconfig/CONFIG_RTLLIB_CRYPTO_TKIP create mode 100644 baseconfig/CONFIG_RTLLIB_CRYPTO_WEP create mode 100644 baseconfig/CONFIG_RTLWIFI create mode 100644 baseconfig/CONFIG_RTLWIFI_DEBUG create mode 100644 baseconfig/CONFIG_RTL_CARDS create mode 100644 baseconfig/CONFIG_RTS5208 create mode 100644 baseconfig/CONFIG_RT_GROUP_SCHED create mode 100644 baseconfig/CONFIG_S2IO create mode 100644 baseconfig/CONFIG_SAMPLES create mode 100644 baseconfig/CONFIG_SAMSUNG_USBPHY create mode 100644 baseconfig/CONFIG_SATA_ACARD_AHCI create mode 100644 baseconfig/CONFIG_SATA_AHCI create mode 100644 baseconfig/CONFIG_SATA_AHCI_PLATFORM create mode 100644 baseconfig/CONFIG_SATA_DWC create mode 100644 baseconfig/CONFIG_SATA_HIGHBANK create mode 100644 baseconfig/CONFIG_SATA_INIC162X create mode 100644 baseconfig/CONFIG_SATA_MV create mode 100644 baseconfig/CONFIG_SATA_NV create mode 100644 baseconfig/CONFIG_SATA_PMP create mode 100644 baseconfig/CONFIG_SATA_PROMISE create mode 100644 baseconfig/CONFIG_SATA_QSTOR create mode 100644 baseconfig/CONFIG_SATA_SIL create mode 100644 baseconfig/CONFIG_SATA_SIL24 create mode 100644 baseconfig/CONFIG_SATA_SIS create mode 100644 baseconfig/CONFIG_SATA_SVW create mode 100644 baseconfig/CONFIG_SATA_SX4 create mode 100644 baseconfig/CONFIG_SATA_ULI create mode 100644 baseconfig/CONFIG_SATA_VIA create mode 100644 baseconfig/CONFIG_SATA_VITESSE create mode 100644 baseconfig/CONFIG_SATA_ZPODD create mode 100644 baseconfig/CONFIG_SBC7240_WDT create mode 100644 baseconfig/CONFIG_SBC8360_WDT create mode 100644 baseconfig/CONFIG_SBC_EPX_C3_WATCHDOG create mode 100644 baseconfig/CONFIG_SBP_TARGET create mode 100644 baseconfig/CONFIG_SC1200_WDT create mode 100644 baseconfig/CONFIG_SC520_WDT create mode 100644 baseconfig/CONFIG_SC92031 create mode 100644 baseconfig/CONFIG_SCA3000 create mode 100644 baseconfig/CONFIG_SCHEDSTATS create mode 100644 baseconfig/CONFIG_SCHED_AUTOGROUP create mode 100644 baseconfig/CONFIG_SCHED_DEBUG create mode 100644 baseconfig/CONFIG_SCHED_MC_PRIO create mode 100644 baseconfig/CONFIG_SCHED_OMIT_FRAME_POINTER create mode 100644 baseconfig/CONFIG_SCHED_STACK_END_CHECK create mode 100644 baseconfig/CONFIG_SCHED_TRACER create mode 100644 baseconfig/CONFIG_SCR24X create mode 100644 baseconfig/CONFIG_SCSI create mode 100644 baseconfig/CONFIG_SCSI_3W_9XXX create mode 100644 baseconfig/CONFIG_SCSI_3W_SAS create mode 100644 baseconfig/CONFIG_SCSI_AACRAID create mode 100644 baseconfig/CONFIG_SCSI_ACARD create mode 100644 baseconfig/CONFIG_SCSI_ADVANSYS create mode 100644 baseconfig/CONFIG_SCSI_AIC79XX create mode 100644 baseconfig/CONFIG_SCSI_AIC7XXX create mode 100644 baseconfig/CONFIG_SCSI_AIC94XX create mode 100644 baseconfig/CONFIG_SCSI_AM53C974 create mode 100644 baseconfig/CONFIG_SCSI_ARCMSR create mode 100644 baseconfig/CONFIG_SCSI_BFA_FC create mode 100644 baseconfig/CONFIG_SCSI_BNX2X_FCOE create mode 100644 baseconfig/CONFIG_SCSI_BNX2_ISCSI create mode 100644 baseconfig/CONFIG_SCSI_BUSLOGIC create mode 100644 baseconfig/CONFIG_SCSI_CHELSIO_FCOE create mode 100644 baseconfig/CONFIG_SCSI_CONSTANTS create mode 100644 baseconfig/CONFIG_SCSI_CXGB3_ISCSI create mode 100644 baseconfig/CONFIG_SCSI_CXGB4_ISCSI create mode 100644 baseconfig/CONFIG_SCSI_DC395x create mode 100644 baseconfig/CONFIG_SCSI_DEBUG create mode 100644 baseconfig/CONFIG_SCSI_DH create mode 100644 baseconfig/CONFIG_SCSI_DH_ALUA create mode 100644 baseconfig/CONFIG_SCSI_DH_EMC create mode 100644 baseconfig/CONFIG_SCSI_DH_HP_SW create mode 100644 baseconfig/CONFIG_SCSI_DH_RDAC create mode 100644 baseconfig/CONFIG_SCSI_DMX3191D create mode 100644 baseconfig/CONFIG_SCSI_DPT_I2O create mode 100644 baseconfig/CONFIG_SCSI_EATA create mode 100644 baseconfig/CONFIG_SCSI_EATA_PIO create mode 100644 baseconfig/CONFIG_SCSI_ENCLOSURE create mode 100644 baseconfig/CONFIG_SCSI_ESAS2R create mode 100644 baseconfig/CONFIG_SCSI_FC_ATTRS create mode 100644 baseconfig/CONFIG_SCSI_FLASHPOINT create mode 100644 baseconfig/CONFIG_SCSI_FUTURE_DOMAIN create mode 100644 baseconfig/CONFIG_SCSI_GDTH create mode 100644 baseconfig/CONFIG_SCSI_HISI_SAS create mode 100644 baseconfig/CONFIG_SCSI_HPSA create mode 100644 baseconfig/CONFIG_SCSI_HPTIOP create mode 100644 baseconfig/CONFIG_SCSI_IMM create mode 100644 baseconfig/CONFIG_SCSI_INIA100 create mode 100644 baseconfig/CONFIG_SCSI_INITIO create mode 100644 baseconfig/CONFIG_SCSI_IPR create mode 100644 baseconfig/CONFIG_SCSI_IPR_DUMP create mode 100644 baseconfig/CONFIG_SCSI_IPR_TRACE create mode 100644 baseconfig/CONFIG_SCSI_IPS create mode 100644 baseconfig/CONFIG_SCSI_ISCI create mode 100644 baseconfig/CONFIG_SCSI_ISCSI_ATTRS create mode 100644 baseconfig/CONFIG_SCSI_IZIP_EPP16 create mode 100644 baseconfig/CONFIG_SCSI_IZIP_SLOW_CTR create mode 100644 baseconfig/CONFIG_SCSI_LOGGING create mode 100644 baseconfig/CONFIG_SCSI_LOWLEVEL create mode 100644 baseconfig/CONFIG_SCSI_LOWLEVEL_PCMCIA create mode 100644 baseconfig/CONFIG_SCSI_LPFC create mode 100644 baseconfig/CONFIG_SCSI_LPFC_DEBUG_FS create mode 100644 baseconfig/CONFIG_SCSI_MPT2SAS create mode 100644 baseconfig/CONFIG_SCSI_MPT2SAS_MAX_SGE create mode 100644 baseconfig/CONFIG_SCSI_MPT3SAS create mode 100644 baseconfig/CONFIG_SCSI_MPT3SAS_MAX_SGE create mode 100644 baseconfig/CONFIG_SCSI_MQ_DEFAULT create mode 100644 baseconfig/CONFIG_SCSI_MVSAS create mode 100644 baseconfig/CONFIG_SCSI_MVSAS_DEBUG create mode 100644 baseconfig/CONFIG_SCSI_MVSAS_TASKLET create mode 100644 baseconfig/CONFIG_SCSI_MVUMI create mode 100644 baseconfig/CONFIG_SCSI_NSP32 create mode 100644 baseconfig/CONFIG_SCSI_OSD_DEBUG create mode 100644 baseconfig/CONFIG_SCSI_OSD_DPRINT_SENSE create mode 100644 baseconfig/CONFIG_SCSI_OSD_INITIATOR create mode 100644 baseconfig/CONFIG_SCSI_OSD_ULD create mode 100644 baseconfig/CONFIG_SCSI_PM8001 create mode 100644 baseconfig/CONFIG_SCSI_PMCRAID create mode 100644 baseconfig/CONFIG_SCSI_PPA create mode 100644 baseconfig/CONFIG_SCSI_PROC_FS create mode 100644 baseconfig/CONFIG_SCSI_QLA_FC create mode 100644 baseconfig/CONFIG_SCSI_QLA_ISCSI create mode 100644 baseconfig/CONFIG_SCSI_QLOGIC_1280 create mode 100644 baseconfig/CONFIG_SCSI_SAS_ATA create mode 100644 baseconfig/CONFIG_SCSI_SAS_ATTRS create mode 100644 baseconfig/CONFIG_SCSI_SAS_HOST_SMP create mode 100644 baseconfig/CONFIG_SCSI_SAS_LIBSAS create mode 100644 baseconfig/CONFIG_SCSI_SCAN_ASYNC create mode 100644 baseconfig/CONFIG_SCSI_SMARTPQI create mode 100644 baseconfig/CONFIG_SCSI_SNIC create mode 100644 baseconfig/CONFIG_SCSI_SNIC_DEBUG_FS create mode 100644 baseconfig/CONFIG_SCSI_SPI_ATTRS create mode 100644 baseconfig/CONFIG_SCSI_SRP create mode 100644 baseconfig/CONFIG_SCSI_SRP_ATTRS create mode 100644 baseconfig/CONFIG_SCSI_STEX create mode 100644 baseconfig/CONFIG_SCSI_SYM53C8XX_2 create mode 100644 baseconfig/CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS create mode 100644 baseconfig/CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE create mode 100644 baseconfig/CONFIG_SCSI_SYM53C8XX_MAX_TAGS create mode 100644 baseconfig/CONFIG_SCSI_SYM53C8XX_MMIO create mode 100644 baseconfig/CONFIG_SCSI_UFSHCD create mode 100644 baseconfig/CONFIG_SCSI_UFSHCD_PCI create mode 100644 baseconfig/CONFIG_SCSI_UFSHCD_PLATFORM create mode 100644 baseconfig/CONFIG_SCSI_UFS_DWC_TC_PCI create mode 100644 baseconfig/CONFIG_SCSI_VIRTIO create mode 100644 baseconfig/CONFIG_SCSI_WD719X create mode 100644 baseconfig/CONFIG_SCTP_COOKIE_HMAC_MD5 create mode 100644 baseconfig/CONFIG_SCTP_COOKIE_HMAC_SHA1 create mode 100644 baseconfig/CONFIG_SCTP_DBG_OBJCNT create mode 100644 baseconfig/CONFIG_SCTP_DEFAULT_COOKIE_HMAC_MD5 create mode 100644 baseconfig/CONFIG_SCTP_DEFAULT_COOKIE_HMAC_NONE create mode 100644 baseconfig/CONFIG_SCTP_DEFAULT_COOKIE_HMAC_SHA1 create mode 100644 baseconfig/CONFIG_SDIO_UART create mode 100644 baseconfig/CONFIG_SECCOMP create mode 100644 baseconfig/CONFIG_SECONDARY_TRUSTED_KEYRING create mode 100644 baseconfig/CONFIG_SECTION_MISMATCH_WARN_ONLY create mode 100644 baseconfig/CONFIG_SECURITY create mode 100644 baseconfig/CONFIG_SECURITYFS create mode 100644 baseconfig/CONFIG_SECURITY_APPARMOR create mode 100644 baseconfig/CONFIG_SECURITY_DMESG_RESTRICT create mode 100644 baseconfig/CONFIG_SECURITY_LOADPIN create mode 100644 baseconfig/CONFIG_SECURITY_NETWORK create mode 100644 baseconfig/CONFIG_SECURITY_NETWORK_XFRM create mode 100644 baseconfig/CONFIG_SECURITY_PATH create mode 100644 baseconfig/CONFIG_SECURITY_SELINUX create mode 100644 baseconfig/CONFIG_SECURITY_SELINUX_AVC_STATS create mode 100644 baseconfig/CONFIG_SECURITY_SELINUX_BOOTPARAM create mode 100644 baseconfig/CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE create mode 100644 baseconfig/CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE create mode 100644 baseconfig/CONFIG_SECURITY_SELINUX_DEVELOP create mode 100644 baseconfig/CONFIG_SECURITY_SELINUX_DISABLE create mode 100644 baseconfig/CONFIG_SECURITY_SELINUX_POLICYDB_VERSION_MAX create mode 100644 baseconfig/CONFIG_SECURITY_SMACK create mode 100644 baseconfig/CONFIG_SECURITY_TOMOYO create mode 100644 baseconfig/CONFIG_SECURITY_YAMA create mode 100644 baseconfig/CONFIG_SENSORS_AD7314 create mode 100644 baseconfig/CONFIG_SENSORS_AD7414 create mode 100644 baseconfig/CONFIG_SENSORS_AD7418 create mode 100644 baseconfig/CONFIG_SENSORS_ADC128D818 create mode 100644 baseconfig/CONFIG_SENSORS_ADCXX create mode 100644 baseconfig/CONFIG_SENSORS_ADM1021 create mode 100644 baseconfig/CONFIG_SENSORS_ADM1025 create mode 100644 baseconfig/CONFIG_SENSORS_ADM1026 create mode 100644 baseconfig/CONFIG_SENSORS_ADM1029 create mode 100644 baseconfig/CONFIG_SENSORS_ADM1031 create mode 100644 baseconfig/CONFIG_SENSORS_ADM1275 create mode 100644 baseconfig/CONFIG_SENSORS_ADM9240 create mode 100644 baseconfig/CONFIG_SENSORS_ADS1015 create mode 100644 baseconfig/CONFIG_SENSORS_ADS7828 create mode 100644 baseconfig/CONFIG_SENSORS_ADS7871 create mode 100644 baseconfig/CONFIG_SENSORS_ADT7310 create mode 100644 baseconfig/CONFIG_SENSORS_ADT7410 create mode 100644 baseconfig/CONFIG_SENSORS_ADT7411 create mode 100644 baseconfig/CONFIG_SENSORS_ADT7462 create mode 100644 baseconfig/CONFIG_SENSORS_ADT7470 create mode 100644 baseconfig/CONFIG_SENSORS_ADT7475 create mode 100644 baseconfig/CONFIG_SENSORS_AMC6821 create mode 100644 baseconfig/CONFIG_SENSORS_APDS990X create mode 100644 baseconfig/CONFIG_SENSORS_ASC7621 create mode 100644 baseconfig/CONFIG_SENSORS_ATXP1 create mode 100644 baseconfig/CONFIG_SENSORS_BH1770 create mode 100644 baseconfig/CONFIG_SENSORS_DME1737 create mode 100644 baseconfig/CONFIG_SENSORS_DS1621 create mode 100644 baseconfig/CONFIG_SENSORS_DS620 create mode 100644 baseconfig/CONFIG_SENSORS_EMC1403 create mode 100644 baseconfig/CONFIG_SENSORS_EMC2103 create mode 100644 baseconfig/CONFIG_SENSORS_EMC6W201 create mode 100644 baseconfig/CONFIG_SENSORS_F71805F create mode 100644 baseconfig/CONFIG_SENSORS_F71882FG create mode 100644 baseconfig/CONFIG_SENSORS_F75375S create mode 100644 baseconfig/CONFIG_SENSORS_FTSTEUTATES create mode 100644 baseconfig/CONFIG_SENSORS_G760A create mode 100644 baseconfig/CONFIG_SENSORS_G762 create mode 100644 baseconfig/CONFIG_SENSORS_GL518SM create mode 100644 baseconfig/CONFIG_SENSORS_GL520SM create mode 100644 baseconfig/CONFIG_SENSORS_GPIO_FAN create mode 100644 baseconfig/CONFIG_SENSORS_HDAPS create mode 100644 baseconfig/CONFIG_SENSORS_HIH6130 create mode 100644 baseconfig/CONFIG_SENSORS_HMC5843 create mode 100644 baseconfig/CONFIG_SENSORS_HMC5843_I2C create mode 100644 baseconfig/CONFIG_SENSORS_HMC5843_SPI create mode 100644 baseconfig/CONFIG_SENSORS_I5K_AMB create mode 100644 baseconfig/CONFIG_SENSORS_IBMAEM create mode 100644 baseconfig/CONFIG_SENSORS_IBMPEX create mode 100644 baseconfig/CONFIG_SENSORS_IIO_HWMON create mode 100644 baseconfig/CONFIG_SENSORS_INA209 create mode 100644 baseconfig/CONFIG_SENSORS_INA2XX create mode 100644 baseconfig/CONFIG_SENSORS_INA3221 create mode 100644 baseconfig/CONFIG_SENSORS_ISL29018 create mode 100644 baseconfig/CONFIG_SENSORS_ISL29028 create mode 100644 baseconfig/CONFIG_SENSORS_IT87 create mode 100644 baseconfig/CONFIG_SENSORS_JC42 create mode 100644 baseconfig/CONFIG_SENSORS_LINEAGE create mode 100644 baseconfig/CONFIG_SENSORS_LIS3LV02D create mode 100644 baseconfig/CONFIG_SENSORS_LIS3_I2C create mode 100644 baseconfig/CONFIG_SENSORS_LIS3_SPI create mode 100644 baseconfig/CONFIG_SENSORS_LM25066 create mode 100644 baseconfig/CONFIG_SENSORS_LM63 create mode 100644 baseconfig/CONFIG_SENSORS_LM70 create mode 100644 baseconfig/CONFIG_SENSORS_LM73 create mode 100644 baseconfig/CONFIG_SENSORS_LM75 create mode 100644 baseconfig/CONFIG_SENSORS_LM77 create mode 100644 baseconfig/CONFIG_SENSORS_LM78 create mode 100644 baseconfig/CONFIG_SENSORS_LM80 create mode 100644 baseconfig/CONFIG_SENSORS_LM83 create mode 100644 baseconfig/CONFIG_SENSORS_LM85 create mode 100644 baseconfig/CONFIG_SENSORS_LM87 create mode 100644 baseconfig/CONFIG_SENSORS_LM90 create mode 100644 baseconfig/CONFIG_SENSORS_LM92 create mode 100644 baseconfig/CONFIG_SENSORS_LM93 create mode 100644 baseconfig/CONFIG_SENSORS_LM95234 create mode 100644 baseconfig/CONFIG_SENSORS_LM95241 create mode 100644 baseconfig/CONFIG_SENSORS_LM95245 create mode 100644 baseconfig/CONFIG_SENSORS_LTC2945 create mode 100644 baseconfig/CONFIG_SENSORS_LTC2978 create mode 100644 baseconfig/CONFIG_SENSORS_LTC2990 create mode 100644 baseconfig/CONFIG_SENSORS_LTC3815 create mode 100644 baseconfig/CONFIG_SENSORS_LTC4151 create mode 100644 baseconfig/CONFIG_SENSORS_LTC4215 create mode 100644 baseconfig/CONFIG_SENSORS_LTC4222 create mode 100644 baseconfig/CONFIG_SENSORS_LTC4245 create mode 100644 baseconfig/CONFIG_SENSORS_LTC4260 create mode 100644 baseconfig/CONFIG_SENSORS_LTC4261 create mode 100644 baseconfig/CONFIG_SENSORS_MAX1111 create mode 100644 baseconfig/CONFIG_SENSORS_MAX16064 create mode 100644 baseconfig/CONFIG_SENSORS_MAX16065 create mode 100644 baseconfig/CONFIG_SENSORS_MAX1619 create mode 100644 baseconfig/CONFIG_SENSORS_MAX1668 create mode 100644 baseconfig/CONFIG_SENSORS_MAX197 create mode 100644 baseconfig/CONFIG_SENSORS_MAX20751 create mode 100644 baseconfig/CONFIG_SENSORS_MAX31722 create mode 100644 baseconfig/CONFIG_SENSORS_MAX31790 create mode 100644 baseconfig/CONFIG_SENSORS_MAX34440 create mode 100644 baseconfig/CONFIG_SENSORS_MAX6639 create mode 100644 baseconfig/CONFIG_SENSORS_MAX6642 create mode 100644 baseconfig/CONFIG_SENSORS_MAX6650 create mode 100644 baseconfig/CONFIG_SENSORS_MAX6697 create mode 100644 baseconfig/CONFIG_SENSORS_MAX8688 create mode 100644 baseconfig/CONFIG_SENSORS_MCP3021 create mode 100644 baseconfig/CONFIG_SENSORS_NCT6683 create mode 100644 baseconfig/CONFIG_SENSORS_NCT6775 create mode 100644 baseconfig/CONFIG_SENSORS_NCT7802 create mode 100644 baseconfig/CONFIG_SENSORS_NCT7904 create mode 100644 baseconfig/CONFIG_SENSORS_NTC_THERMISTOR create mode 100644 baseconfig/CONFIG_SENSORS_PC87360 create mode 100644 baseconfig/CONFIG_SENSORS_PC87427 create mode 100644 baseconfig/CONFIG_SENSORS_PCF8591 create mode 100644 baseconfig/CONFIG_SENSORS_PMBUS create mode 100644 baseconfig/CONFIG_SENSORS_POWR1220 create mode 100644 baseconfig/CONFIG_SENSORS_PWM_FAN create mode 100644 baseconfig/CONFIG_SENSORS_SCH5627 create mode 100644 baseconfig/CONFIG_SENSORS_SCH5636 create mode 100644 baseconfig/CONFIG_SENSORS_SHT15 create mode 100644 baseconfig/CONFIG_SENSORS_SHT21 create mode 100644 baseconfig/CONFIG_SENSORS_SHT3x create mode 100644 baseconfig/CONFIG_SENSORS_SHTC1 create mode 100644 baseconfig/CONFIG_SENSORS_SIS5595 create mode 100644 baseconfig/CONFIG_SENSORS_SMM665 create mode 100644 baseconfig/CONFIG_SENSORS_SMSC47B397 create mode 100644 baseconfig/CONFIG_SENSORS_SMSC47M1 create mode 100644 baseconfig/CONFIG_SENSORS_SMSC47M192 create mode 100644 baseconfig/CONFIG_SENSORS_TC654 create mode 100644 baseconfig/CONFIG_SENSORS_TC74 create mode 100644 baseconfig/CONFIG_SENSORS_THMC50 create mode 100644 baseconfig/CONFIG_SENSORS_TMP102 create mode 100644 baseconfig/CONFIG_SENSORS_TMP103 create mode 100644 baseconfig/CONFIG_SENSORS_TMP108 create mode 100644 baseconfig/CONFIG_SENSORS_TMP401 create mode 100644 baseconfig/CONFIG_SENSORS_TMP421 create mode 100644 baseconfig/CONFIG_SENSORS_TPS40422 create mode 100644 baseconfig/CONFIG_SENSORS_TSL2550 create mode 100644 baseconfig/CONFIG_SENSORS_TSL2563 create mode 100644 baseconfig/CONFIG_SENSORS_UCD9000 create mode 100644 baseconfig/CONFIG_SENSORS_UCD9200 create mode 100644 baseconfig/CONFIG_SENSORS_VIA686A create mode 100644 baseconfig/CONFIG_SENSORS_VT1211 create mode 100644 baseconfig/CONFIG_SENSORS_VT8231 create mode 100644 baseconfig/CONFIG_SENSORS_W83627EHF create mode 100644 baseconfig/CONFIG_SENSORS_W83627HF create mode 100644 baseconfig/CONFIG_SENSORS_W83781D create mode 100644 baseconfig/CONFIG_SENSORS_W83791D create mode 100644 baseconfig/CONFIG_SENSORS_W83792D create mode 100644 baseconfig/CONFIG_SENSORS_W83793 create mode 100644 baseconfig/CONFIG_SENSORS_W83795 create mode 100644 baseconfig/CONFIG_SENSORS_W83795_FANCTRL create mode 100644 baseconfig/CONFIG_SENSORS_W83L785TS create mode 100644 baseconfig/CONFIG_SENSORS_W83L786NG create mode 100644 baseconfig/CONFIG_SENSORS_WM831X create mode 100644 baseconfig/CONFIG_SENSORS_WM8350 create mode 100644 baseconfig/CONFIG_SENSORS_XGENE create mode 100644 baseconfig/CONFIG_SENSORS_ZL6100 create mode 100644 baseconfig/CONFIG_SERIAL_8250 create mode 100644 baseconfig/CONFIG_SERIAL_8250_CONSOLE create mode 100644 baseconfig/CONFIG_SERIAL_8250_CS create mode 100644 baseconfig/CONFIG_SERIAL_8250_DEPRECATED_OPTIONS create mode 100644 baseconfig/CONFIG_SERIAL_8250_DETECT_IRQ create mode 100644 baseconfig/CONFIG_SERIAL_8250_DW create mode 100644 baseconfig/CONFIG_SERIAL_8250_EXTENDED create mode 100644 baseconfig/CONFIG_SERIAL_8250_FINTEK create mode 100644 baseconfig/CONFIG_SERIAL_8250_INGENIC create mode 100644 baseconfig/CONFIG_SERIAL_8250_MANY_PORTS create mode 100644 baseconfig/CONFIG_SERIAL_8250_MID create mode 100644 baseconfig/CONFIG_SERIAL_8250_MOXA create mode 100644 baseconfig/CONFIG_SERIAL_8250_NR_UARTS create mode 100644 baseconfig/CONFIG_SERIAL_8250_RSA create mode 100644 baseconfig/CONFIG_SERIAL_8250_RT288X create mode 100644 baseconfig/CONFIG_SERIAL_8250_RUNTIME_UARTS create mode 100644 baseconfig/CONFIG_SERIAL_8250_SHARE_IRQ create mode 100644 baseconfig/CONFIG_SERIAL_ALTERA_JTAGUART create mode 100644 baseconfig/CONFIG_SERIAL_ALTERA_UART create mode 100644 baseconfig/CONFIG_SERIAL_ARC create mode 100644 baseconfig/CONFIG_SERIAL_ARC_NR_PORTS create mode 100644 baseconfig/CONFIG_SERIAL_CONEXANT_DIGICOLOR create mode 100644 baseconfig/CONFIG_SERIAL_CORE create mode 100644 baseconfig/CONFIG_SERIAL_CORE_CONSOLE create mode 100644 baseconfig/CONFIG_SERIAL_FSL_LPUART create mode 100644 baseconfig/CONFIG_SERIAL_IFX6X60 create mode 100644 baseconfig/CONFIG_SERIAL_JSM create mode 100644 baseconfig/CONFIG_SERIAL_KGDB_NMI create mode 100644 baseconfig/CONFIG_SERIAL_MAX3100 create mode 100644 baseconfig/CONFIG_SERIAL_MAX310X create mode 100644 baseconfig/CONFIG_SERIAL_NONSTANDARD create mode 100644 baseconfig/CONFIG_SERIAL_PCH_UART create mode 100644 baseconfig/CONFIG_SERIAL_RP2 create mode 100644 baseconfig/CONFIG_SERIAL_SC16IS7XX create mode 100644 baseconfig/CONFIG_SERIAL_SCCNXP create mode 100644 baseconfig/CONFIG_SERIAL_ST_ASC create mode 100644 baseconfig/CONFIG_SERIAL_TIMBERDALE create mode 100644 baseconfig/CONFIG_SERIAL_UARTLITE create mode 100644 baseconfig/CONFIG_SERIAL_XILINX_PS_UART create mode 100644 baseconfig/CONFIG_SERIO create mode 100644 baseconfig/CONFIG_SERIO_ALTERA_PS2 create mode 100644 baseconfig/CONFIG_SERIO_APBPS2 create mode 100644 baseconfig/CONFIG_SERIO_ARC_PS2 create mode 100644 baseconfig/CONFIG_SERIO_CT82C710 create mode 100644 baseconfig/CONFIG_SERIO_I8042 create mode 100644 baseconfig/CONFIG_SERIO_LIBPS2 create mode 100644 baseconfig/CONFIG_SERIO_OLPC_APSP create mode 100644 baseconfig/CONFIG_SERIO_PARKBD create mode 100644 baseconfig/CONFIG_SERIO_PCIPS2 create mode 100644 baseconfig/CONFIG_SERIO_PS2MULT create mode 100644 baseconfig/CONFIG_SERIO_RAW create mode 100644 baseconfig/CONFIG_SERIO_SERPORT create mode 100644 baseconfig/CONFIG_SFC create mode 100644 baseconfig/CONFIG_SFC_FALCON create mode 100644 baseconfig/CONFIG_SFC_FALCON_MTD create mode 100644 baseconfig/CONFIG_SGI_IOC4 create mode 100644 baseconfig/CONFIG_SGI_PARTITION create mode 100644 baseconfig/CONFIG_SH_ETH create mode 100644 baseconfig/CONFIG_SI1145 create mode 100644 baseconfig/CONFIG_SI7005 create mode 100644 baseconfig/CONFIG_SI7020 create mode 100644 baseconfig/CONFIG_SIGMA create mode 100644 baseconfig/CONFIG_SIGMATEL_FIR create mode 100644 baseconfig/CONFIG_SIGNED_PE_FILE_VERIFICATION create mode 100644 baseconfig/CONFIG_SIS190 create mode 100644 baseconfig/CONFIG_SIS900 create mode 100644 baseconfig/CONFIG_SKFP create mode 100644 baseconfig/CONFIG_SKGE create mode 100644 baseconfig/CONFIG_SKGE_DEBUG create mode 100644 baseconfig/CONFIG_SKGE_GENESIS create mode 100644 baseconfig/CONFIG_SKY2 create mode 100644 baseconfig/CONFIG_SKY2_DEBUG create mode 100644 baseconfig/CONFIG_SLAB_FREELIST_RANDOM create mode 100644 baseconfig/CONFIG_SLICOSS create mode 100644 baseconfig/CONFIG_SLIP create mode 100644 baseconfig/CONFIG_SLIP_COMPRESSED create mode 100644 baseconfig/CONFIG_SLIP_MODE_SLIP6 create mode 100644 baseconfig/CONFIG_SLIP_SMART create mode 100644 baseconfig/CONFIG_SLUB create mode 100644 baseconfig/CONFIG_SLUB_CPU_PARTIAL create mode 100644 baseconfig/CONFIG_SLUB_DEBUG_ON create mode 100644 baseconfig/CONFIG_SLUB_STATS create mode 100644 baseconfig/CONFIG_SMARTJOYPLUS_FF create mode 100644 baseconfig/CONFIG_SMC_IRCC_FIR create mode 100644 baseconfig/CONFIG_SMP create mode 100644 baseconfig/CONFIG_SMSC911X create mode 100644 baseconfig/CONFIG_SMSC9420 create mode 100644 baseconfig/CONFIG_SMSC_PHY create mode 100644 baseconfig/CONFIG_SMSC_SCH311X_WDT create mode 100644 baseconfig/CONFIG_SMS_SDIO_DRV create mode 100644 baseconfig/CONFIG_SMS_SIANO_DEBUGFS create mode 100644 baseconfig/CONFIG_SMS_SIANO_MDTV create mode 100644 baseconfig/CONFIG_SMS_SIANO_RC create mode 100644 baseconfig/CONFIG_SMS_USB_DRV create mode 100644 baseconfig/CONFIG_SM_FTL create mode 100644 baseconfig/CONFIG_SND create mode 100644 baseconfig/CONFIG_SND_AC97_POWER_SAVE create mode 100644 baseconfig/CONFIG_SND_AC97_POWER_SAVE_DEFAULT create mode 100644 baseconfig/CONFIG_SND_AD1889 create mode 100644 baseconfig/CONFIG_SND_ALI5451 create mode 100644 baseconfig/CONFIG_SND_ALOOP create mode 100644 baseconfig/CONFIG_SND_ALS300 create mode 100644 baseconfig/CONFIG_SND_ALS4000 create mode 100644 baseconfig/CONFIG_SND_ASIHPI create mode 100644 baseconfig/CONFIG_SND_ATIIXP create mode 100644 baseconfig/CONFIG_SND_ATIIXP_MODEM create mode 100644 baseconfig/CONFIG_SND_ATMEL_SOC create mode 100644 baseconfig/CONFIG_SND_AU8810 create mode 100644 baseconfig/CONFIG_SND_AU8820 create mode 100644 baseconfig/CONFIG_SND_AU8830 create mode 100644 baseconfig/CONFIG_SND_AW2 create mode 100644 baseconfig/CONFIG_SND_AZT3328 create mode 100644 baseconfig/CONFIG_SND_BCD2000 create mode 100644 baseconfig/CONFIG_SND_BEBOB create mode 100644 baseconfig/CONFIG_SND_BT87X create mode 100644 baseconfig/CONFIG_SND_BT87X_OVERCLOCK create mode 100644 baseconfig/CONFIG_SND_CA0106 create mode 100644 baseconfig/CONFIG_SND_CMIPCI create mode 100644 baseconfig/CONFIG_SND_COMPRESS_OFFLOAD create mode 100644 baseconfig/CONFIG_SND_CS4281 create mode 100644 baseconfig/CONFIG_SND_CS46XX create mode 100644 baseconfig/CONFIG_SND_CS46XX_NEW_DSP create mode 100644 baseconfig/CONFIG_SND_CS5530 create mode 100644 baseconfig/CONFIG_SND_CS5535AUDIO create mode 100644 baseconfig/CONFIG_SND_CTXFI create mode 100644 baseconfig/CONFIG_SND_DARLA20 create mode 100644 baseconfig/CONFIG_SND_DARLA24 create mode 100644 baseconfig/CONFIG_SND_DEBUG create mode 100644 baseconfig/CONFIG_SND_DEBUG_VERBOSE create mode 100644 baseconfig/CONFIG_SND_DESIGNWARE_I2S create mode 100644 baseconfig/CONFIG_SND_DESIGNWARE_PCM create mode 100644 baseconfig/CONFIG_SND_DICE create mode 100644 baseconfig/CONFIG_SND_DMAENGINE_PCM create mode 100644 baseconfig/CONFIG_SND_DRIVERS create mode 100644 baseconfig/CONFIG_SND_DUMMY create mode 100644 baseconfig/CONFIG_SND_DYNAMIC_MINORS create mode 100644 baseconfig/CONFIG_SND_ECHO3G create mode 100644 baseconfig/CONFIG_SND_EDMA_SOC create mode 100644 baseconfig/CONFIG_SND_EMU10K1 create mode 100644 baseconfig/CONFIG_SND_EMU10K1X create mode 100644 baseconfig/CONFIG_SND_ENS1370 create mode 100644 baseconfig/CONFIG_SND_ENS1371 create mode 100644 baseconfig/CONFIG_SND_ES1938 create mode 100644 baseconfig/CONFIG_SND_ES1968 create mode 100644 baseconfig/CONFIG_SND_ES1968_INPUT create mode 100644 baseconfig/CONFIG_SND_ES1968_RADIO create mode 100644 baseconfig/CONFIG_SND_FIREWIRE create mode 100644 baseconfig/CONFIG_SND_FIREWIRE_DIGI00X create mode 100644 baseconfig/CONFIG_SND_FIREWIRE_TASCAM create mode 100644 baseconfig/CONFIG_SND_FIREWORKS create mode 100644 baseconfig/CONFIG_SND_FM801 create mode 100644 baseconfig/CONFIG_SND_FM801_TEA575X_BOOL create mode 100644 baseconfig/CONFIG_SND_GINA20 create mode 100644 baseconfig/CONFIG_SND_GINA24 create mode 100644 baseconfig/CONFIG_SND_HDA_CODEC_ANALOG create mode 100644 baseconfig/CONFIG_SND_HDA_CODEC_CA0110 create mode 100644 baseconfig/CONFIG_SND_HDA_CODEC_CA0132 create mode 100644 baseconfig/CONFIG_SND_HDA_CODEC_CA0132_DSP create mode 100644 baseconfig/CONFIG_SND_HDA_CODEC_CIRRUS create mode 100644 baseconfig/CONFIG_SND_HDA_CODEC_CMEDIA create mode 100644 baseconfig/CONFIG_SND_HDA_CODEC_CONEXANT create mode 100644 baseconfig/CONFIG_SND_HDA_CODEC_HDMI create mode 100644 baseconfig/CONFIG_SND_HDA_CODEC_REALTEK create mode 100644 baseconfig/CONFIG_SND_HDA_CODEC_SI3054 create mode 100644 baseconfig/CONFIG_SND_HDA_CODEC_SIGMATEL create mode 100644 baseconfig/CONFIG_SND_HDA_CODEC_VIA create mode 100644 baseconfig/CONFIG_SND_HDA_GENERIC create mode 100644 baseconfig/CONFIG_SND_HDA_HWDEP create mode 100644 baseconfig/CONFIG_SND_HDA_I915 create mode 100644 baseconfig/CONFIG_SND_HDA_INPUT_BEEP create mode 100644 baseconfig/CONFIG_SND_HDA_INPUT_BEEP_MODE create mode 100644 baseconfig/CONFIG_SND_HDA_INTEL create mode 100644 baseconfig/CONFIG_SND_HDA_PATCH_LOADER create mode 100644 baseconfig/CONFIG_SND_HDA_POWER_SAVE create mode 100644 baseconfig/CONFIG_SND_HDA_POWER_SAVE_DEFAULT create mode 100644 baseconfig/CONFIG_SND_HDA_PREALLOC_SIZE create mode 100644 baseconfig/CONFIG_SND_HDA_RECONFIG create mode 100644 baseconfig/CONFIG_SND_HDSP create mode 100644 baseconfig/CONFIG_SND_HDSPM create mode 100644 baseconfig/CONFIG_SND_HRTIMER create mode 100644 baseconfig/CONFIG_SND_ICE1712 create mode 100644 baseconfig/CONFIG_SND_ICE1724 create mode 100644 baseconfig/CONFIG_SND_INDIGO create mode 100644 baseconfig/CONFIG_SND_INDIGODJ create mode 100644 baseconfig/CONFIG_SND_INDIGODJX create mode 100644 baseconfig/CONFIG_SND_INDIGOIO create mode 100644 baseconfig/CONFIG_SND_INDIGOIOX create mode 100644 baseconfig/CONFIG_SND_INTEL8X0 create mode 100644 baseconfig/CONFIG_SND_INTEL8X0M create mode 100644 baseconfig/CONFIG_SND_ISIGHT create mode 100644 baseconfig/CONFIG_SND_JACK create mode 100644 baseconfig/CONFIG_SND_KORG1212 create mode 100644 baseconfig/CONFIG_SND_LAYLA20 create mode 100644 baseconfig/CONFIG_SND_LAYLA24 create mode 100644 baseconfig/CONFIG_SND_LOLA create mode 100644 baseconfig/CONFIG_SND_LX6464ES create mode 100644 baseconfig/CONFIG_SND_MAESTRO3 create mode 100644 baseconfig/CONFIG_SND_MAESTRO3_INPUT create mode 100644 baseconfig/CONFIG_SND_MAX_CARDS create mode 100644 baseconfig/CONFIG_SND_MIA create mode 100644 baseconfig/CONFIG_SND_MIXART create mode 100644 baseconfig/CONFIG_SND_MIXER_OSS create mode 100644 baseconfig/CONFIG_SND_MONA create mode 100644 baseconfig/CONFIG_SND_MPU401 create mode 100644 baseconfig/CONFIG_SND_MTPAV create mode 100644 baseconfig/CONFIG_SND_MTS64 create mode 100644 baseconfig/CONFIG_SND_NM256 create mode 100644 baseconfig/CONFIG_SND_OSSEMUL create mode 100644 baseconfig/CONFIG_SND_OXFW create mode 100644 baseconfig/CONFIG_SND_OXYGEN create mode 100644 baseconfig/CONFIG_SND_PCI create mode 100644 baseconfig/CONFIG_SND_PCMCIA create mode 100644 baseconfig/CONFIG_SND_PCM_OSS create mode 100644 baseconfig/CONFIG_SND_PCM_OSS_PLUGINS create mode 100644 baseconfig/CONFIG_SND_PCSP create mode 100644 baseconfig/CONFIG_SND_PCXHR create mode 100644 baseconfig/CONFIG_SND_PORTMAN2X4 create mode 100644 baseconfig/CONFIG_SND_RIPTIDE create mode 100644 baseconfig/CONFIG_SND_RME32 create mode 100644 baseconfig/CONFIG_SND_RME96 create mode 100644 baseconfig/CONFIG_SND_RME9652 create mode 100644 baseconfig/CONFIG_SND_SEQUENCER create mode 100644 baseconfig/CONFIG_SND_SEQUENCER_OSS create mode 100644 baseconfig/CONFIG_SND_SEQ_DUMMY create mode 100644 baseconfig/CONFIG_SND_SEQ_HRTIMER_DEFAULT create mode 100644 baseconfig/CONFIG_SND_SERIAL_U16550 create mode 100644 baseconfig/CONFIG_SND_SIMPLE_CARD create mode 100644 baseconfig/CONFIG_SND_SIMPLE_SCU_CARD create mode 100644 baseconfig/CONFIG_SND_SIS7019 create mode 100644 baseconfig/CONFIG_SND_SOC create mode 100644 baseconfig/CONFIG_SND_SOC_ADAU1701 create mode 100644 baseconfig/CONFIG_SND_SOC_ADAU7002 create mode 100644 baseconfig/CONFIG_SND_SOC_AK4104 create mode 100644 baseconfig/CONFIG_SND_SOC_AK4554 create mode 100644 baseconfig/CONFIG_SND_SOC_AK4613 create mode 100644 baseconfig/CONFIG_SND_SOC_AK4642 create mode 100644 baseconfig/CONFIG_SND_SOC_AK5386 create mode 100644 baseconfig/CONFIG_SND_SOC_ALC5623 create mode 100644 baseconfig/CONFIG_SND_SOC_ALL_CODECS create mode 100644 baseconfig/CONFIG_SND_SOC_AMD_ACP create mode 100644 baseconfig/CONFIG_SND_SOC_ARNDALE_RT5631_ALC5631 create mode 100644 baseconfig/CONFIG_SND_SOC_BT_SCO create mode 100644 baseconfig/CONFIG_SND_SOC_CS35L32 create mode 100644 baseconfig/CONFIG_SND_SOC_CS35L33 create mode 100644 baseconfig/CONFIG_SND_SOC_CS35L34 create mode 100644 baseconfig/CONFIG_SND_SOC_CS4265 create mode 100644 baseconfig/CONFIG_SND_SOC_CS4270 create mode 100644 baseconfig/CONFIG_SND_SOC_CS4271 create mode 100644 baseconfig/CONFIG_SND_SOC_CS4271_I2C create mode 100644 baseconfig/CONFIG_SND_SOC_CS4271_SPI create mode 100644 baseconfig/CONFIG_SND_SOC_CS42L42 create mode 100644 baseconfig/CONFIG_SND_SOC_CS42L51_I2C create mode 100644 baseconfig/CONFIG_SND_SOC_CS42L52 create mode 100644 baseconfig/CONFIG_SND_SOC_CS42L56 create mode 100644 baseconfig/CONFIG_SND_SOC_CS42L73 create mode 100644 baseconfig/CONFIG_SND_SOC_CS42XX8_I2C create mode 100644 baseconfig/CONFIG_SND_SOC_CS4349 create mode 100644 baseconfig/CONFIG_SND_SOC_CS53L30 create mode 100644 baseconfig/CONFIG_SND_SOC_DMIC create mode 100644 baseconfig/CONFIG_SND_SOC_ES8328 create mode 100644 baseconfig/CONFIG_SND_SOC_FSL_ASOC_CARD create mode 100644 baseconfig/CONFIG_SND_SOC_FSL_ASRC create mode 100644 baseconfig/CONFIG_SND_SOC_FSL_ESAI create mode 100644 baseconfig/CONFIG_SND_SOC_FSL_SAI create mode 100644 baseconfig/CONFIG_SND_SOC_FSL_SPDIF create mode 100644 baseconfig/CONFIG_SND_SOC_FSL_SSI create mode 100644 baseconfig/CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM create mode 100644 baseconfig/CONFIG_SND_SOC_GTM601 create mode 100644 baseconfig/CONFIG_SND_SOC_HDAC_HDMI create mode 100644 baseconfig/CONFIG_SND_SOC_HDMI_CODEC create mode 100644 baseconfig/CONFIG_SND_SOC_IMG create mode 100644 baseconfig/CONFIG_SND_SOC_IMX_AUDMUX create mode 100644 baseconfig/CONFIG_SND_SOC_IMX_ES8328 create mode 100644 baseconfig/CONFIG_SND_SOC_INNO_RK3036 create mode 100644 baseconfig/CONFIG_SND_SOC_MAX98504 create mode 100644 baseconfig/CONFIG_SND_SOC_MAX9860 create mode 100644 baseconfig/CONFIG_SND_SOC_MSM8916_WCD_ANALOG create mode 100644 baseconfig/CONFIG_SND_SOC_MSM8916_WCD_DIGITAL create mode 100644 baseconfig/CONFIG_SND_SOC_NAU8810 create mode 100644 baseconfig/CONFIG_SND_SOC_PCM1681 create mode 100644 baseconfig/CONFIG_SND_SOC_PCM179X create mode 100644 baseconfig/CONFIG_SND_SOC_PCM179X_I2C create mode 100644 baseconfig/CONFIG_SND_SOC_PCM179X_SPI create mode 100644 baseconfig/CONFIG_SND_SOC_PCM3168A_I2C create mode 100644 baseconfig/CONFIG_SND_SOC_PCM3168A_SPI create mode 100644 baseconfig/CONFIG_SND_SOC_PCM512x_I2C create mode 100644 baseconfig/CONFIG_SND_SOC_PCM512x_SPI create mode 100644 baseconfig/CONFIG_SND_SOC_RT5616 create mode 100644 baseconfig/CONFIG_SND_SOC_RT5631 create mode 100644 baseconfig/CONFIG_SND_SOC_SGTL5000 create mode 100644 baseconfig/CONFIG_SND_SOC_SIRF_AUDIO_CODEC create mode 100644 baseconfig/CONFIG_SND_SOC_SPDIF create mode 100644 baseconfig/CONFIG_SND_SOC_SSM2602_I2C create mode 100644 baseconfig/CONFIG_SND_SOC_SSM2602_SPI create mode 100644 baseconfig/CONFIG_SND_SOC_SSM4567 create mode 100644 baseconfig/CONFIG_SND_SOC_STA32X create mode 100644 baseconfig/CONFIG_SND_SOC_STA350 create mode 100644 baseconfig/CONFIG_SND_SOC_STI_SAS create mode 100644 baseconfig/CONFIG_SND_SOC_TAS2552 create mode 100644 baseconfig/CONFIG_SND_SOC_TAS5086 create mode 100644 baseconfig/CONFIG_SND_SOC_TAS5720 create mode 100644 baseconfig/CONFIG_SND_SOC_TFA9879 create mode 100644 baseconfig/CONFIG_SND_SOC_TLV320AIC23_I2C create mode 100644 baseconfig/CONFIG_SND_SOC_TLV320AIC23_SPI create mode 100644 baseconfig/CONFIG_SND_SOC_TLV320AIC31XX create mode 100644 baseconfig/CONFIG_SND_SOC_TLV320AIC3X create mode 100644 baseconfig/CONFIG_SND_SOC_TPA6130A2 create mode 100644 baseconfig/CONFIG_SND_SOC_TS3A227E create mode 100644 baseconfig/CONFIG_SND_SOC_WM8510 create mode 100644 baseconfig/CONFIG_SND_SOC_WM8523 create mode 100644 baseconfig/CONFIG_SND_SOC_WM8580 create mode 100644 baseconfig/CONFIG_SND_SOC_WM8711 create mode 100644 baseconfig/CONFIG_SND_SOC_WM8728 create mode 100644 baseconfig/CONFIG_SND_SOC_WM8731 create mode 100644 baseconfig/CONFIG_SND_SOC_WM8737 create mode 100644 baseconfig/CONFIG_SND_SOC_WM8741 create mode 100644 baseconfig/CONFIG_SND_SOC_WM8750 create mode 100644 baseconfig/CONFIG_SND_SOC_WM8753 create mode 100644 baseconfig/CONFIG_SND_SOC_WM8770 create mode 100644 baseconfig/CONFIG_SND_SOC_WM8776 create mode 100644 baseconfig/CONFIG_SND_SOC_WM8804 create mode 100644 baseconfig/CONFIG_SND_SOC_WM8804_I2C create mode 100644 baseconfig/CONFIG_SND_SOC_WM8804_SPI create mode 100644 baseconfig/CONFIG_SND_SOC_WM8903 create mode 100644 baseconfig/CONFIG_SND_SOC_WM8960 create mode 100644 baseconfig/CONFIG_SND_SOC_WM8962 create mode 100644 baseconfig/CONFIG_SND_SOC_WM8974 create mode 100644 baseconfig/CONFIG_SND_SOC_WM8978 create mode 100644 baseconfig/CONFIG_SND_SOC_WM8985 create mode 100644 baseconfig/CONFIG_SND_SOC_XTFPGA_I2S create mode 100644 baseconfig/CONFIG_SND_SONICVIBES create mode 100644 baseconfig/CONFIG_SND_SPI create mode 100644 baseconfig/CONFIG_SND_SUN8I_CODEC_ANALOG create mode 100644 baseconfig/CONFIG_SND_SUPPORT_OLD_API create mode 100644 baseconfig/CONFIG_SND_TRIDENT create mode 100644 baseconfig/CONFIG_SND_USB create mode 100644 baseconfig/CONFIG_SND_USB_6FIRE create mode 100644 baseconfig/CONFIG_SND_USB_AUDIO create mode 100644 baseconfig/CONFIG_SND_USB_CAIAQ create mode 100644 baseconfig/CONFIG_SND_USB_CAIAQ_INPUT create mode 100644 baseconfig/CONFIG_SND_USB_HIFACE create mode 100644 baseconfig/CONFIG_SND_USB_POD create mode 100644 baseconfig/CONFIG_SND_USB_PODHD create mode 100644 baseconfig/CONFIG_SND_USB_TONEPORT create mode 100644 baseconfig/CONFIG_SND_USB_UA101 create mode 100644 baseconfig/CONFIG_SND_USB_US122L create mode 100644 baseconfig/CONFIG_SND_USB_USX2Y create mode 100644 baseconfig/CONFIG_SND_USB_VARIAX create mode 100644 baseconfig/CONFIG_SND_VERBOSE_PRINTK create mode 100644 baseconfig/CONFIG_SND_VERBOSE_PROCFS create mode 100644 baseconfig/CONFIG_SND_VIA82XX create mode 100644 baseconfig/CONFIG_SND_VIA82XX_MODEM create mode 100644 baseconfig/CONFIG_SND_VIRMIDI create mode 100644 baseconfig/CONFIG_SND_VIRTUOSO create mode 100644 baseconfig/CONFIG_SND_VX222 create mode 100644 baseconfig/CONFIG_SND_YMFPCI create mode 100644 baseconfig/CONFIG_SOC_CAMERA create mode 100644 baseconfig/CONFIG_SOC_TI create mode 100644 baseconfig/CONFIG_SOFT_WATCHDOG create mode 100644 baseconfig/CONFIG_SOLARIS_X86_PARTITION create mode 100644 baseconfig/CONFIG_SOLO6X10 create mode 100644 baseconfig/CONFIG_SONYPI create mode 100644 baseconfig/CONFIG_SONY_FF create mode 100644 baseconfig/CONFIG_SOUND create mode 100644 baseconfig/CONFIG_SOUND_OSS_CORE_PRECLAIM create mode 100644 baseconfig/CONFIG_SOUND_PRIME create mode 100644 baseconfig/CONFIG_SPARSE_RCU_POINTER create mode 100644 baseconfig/CONFIG_SPEAKUP create mode 100644 baseconfig/CONFIG_SPI create mode 100644 baseconfig/CONFIG_SPI_ALTERA create mode 100644 baseconfig/CONFIG_SPI_AXI_SPI_ENGINE create mode 100644 baseconfig/CONFIG_SPI_BITBANG create mode 100644 baseconfig/CONFIG_SPI_BUTTERFLY create mode 100644 baseconfig/CONFIG_SPI_DEBUG create mode 100644 baseconfig/CONFIG_SPI_DESIGNWARE create mode 100644 baseconfig/CONFIG_SPI_FSL_LPSPI create mode 100644 baseconfig/CONFIG_SPI_FSL_SPI create mode 100644 baseconfig/CONFIG_SPI_GPIO create mode 100644 baseconfig/CONFIG_SPI_LM70_LLP create mode 100644 baseconfig/CONFIG_SPI_LOOPBACK_TEST create mode 100644 baseconfig/CONFIG_SPI_OC_TINY create mode 100644 baseconfig/CONFIG_SPI_PXA2XX create mode 100644 baseconfig/CONFIG_SPI_SC18IS602 create mode 100644 baseconfig/CONFIG_SPI_SPIDEV create mode 100644 baseconfig/CONFIG_SPI_TLE62X0 create mode 100644 baseconfig/CONFIG_SPI_TOPCLIFF_PCH create mode 100644 baseconfig/CONFIG_SPI_XCOMM create mode 100644 baseconfig/CONFIG_SPI_XILINX create mode 100644 baseconfig/CONFIG_SPMI create mode 100644 baseconfig/CONFIG_SQUASHFS create mode 100644 baseconfig/CONFIG_SQUASHFS_4K_DEVBLK_SIZE create mode 100644 baseconfig/CONFIG_SQUASHFS_EMBEDDED create mode 100644 baseconfig/CONFIG_SQUASHFS_LZ4 create mode 100644 baseconfig/CONFIG_SQUASHFS_LZO create mode 100644 baseconfig/CONFIG_SQUASHFS_XATTR create mode 100644 baseconfig/CONFIG_SQUASHFS_XZ create mode 100644 baseconfig/CONFIG_SQUASHFS_ZLIB create mode 100644 baseconfig/CONFIG_SRAM create mode 100644 baseconfig/CONFIG_SSB create mode 100644 baseconfig/CONFIG_SSB_DEBUG create mode 100644 baseconfig/CONFIG_SSB_DRIVER_GPIO create mode 100644 baseconfig/CONFIG_SSB_DRIVER_PCICORE create mode 100644 baseconfig/CONFIG_SSB_HOST_SOC create mode 100644 baseconfig/CONFIG_SSB_PCIHOST create mode 100644 baseconfig/CONFIG_SSB_PCMCIAHOST create mode 100644 baseconfig/CONFIG_SSB_SDIOHOST create mode 100644 baseconfig/CONFIG_SSB_SILENT create mode 100644 baseconfig/CONFIG_SSFDC create mode 100644 baseconfig/CONFIG_STACK_TRACER create mode 100644 baseconfig/CONFIG_STACK_VALIDATION create mode 100644 baseconfig/CONFIG_STAGING create mode 100644 baseconfig/CONFIG_STAGING_BOARD create mode 100644 baseconfig/CONFIG_STAGING_MEDIA create mode 100644 baseconfig/CONFIG_STANDALONE create mode 100644 baseconfig/CONFIG_STATIC_KEYS_SELFTEST create mode 100644 baseconfig/CONFIG_STE10XP create mode 100644 baseconfig/CONFIG_STE_MODEM_RPROC create mode 100644 baseconfig/CONFIG_STK3310 create mode 100644 baseconfig/CONFIG_STK8312 create mode 100644 baseconfig/CONFIG_STK8BA50 create mode 100644 baseconfig/CONFIG_STM create mode 100644 baseconfig/CONFIG_STMMAC_ETH create mode 100644 baseconfig/CONFIG_STMMAC_PCI create mode 100644 baseconfig/CONFIG_STMMAC_PLATFORM create mode 100644 baseconfig/CONFIG_STM_DUMMY create mode 100644 baseconfig/CONFIG_STM_SOURCE_CONSOLE create mode 100644 baseconfig/CONFIG_STRICT_DEVMEM create mode 100644 baseconfig/CONFIG_STRIP create mode 100644 baseconfig/CONFIG_STRIP_ASM_SYMS create mode 100644 baseconfig/CONFIG_SUN50I_A64_CCU create mode 100644 baseconfig/CONFIG_SUN6I_A31_CCU create mode 100644 baseconfig/CONFIG_SUN8I_A23_CCU create mode 100644 baseconfig/CONFIG_SUN8I_A33_CCU create mode 100644 baseconfig/CONFIG_SUNDANCE create mode 100644 baseconfig/CONFIG_SUNDANCE_MMIO create mode 100644 baseconfig/CONFIG_SUNGEM create mode 100644 baseconfig/CONFIG_SUNRPC create mode 100644 baseconfig/CONFIG_SUNRPC_DEBUG create mode 100644 baseconfig/CONFIG_SUNRPC_GSS create mode 100644 baseconfig/CONFIG_SUNRPC_XPRT_RDMA create mode 100644 baseconfig/CONFIG_SUNXI_CCU create mode 100644 baseconfig/CONFIG_SUN_PARTITION create mode 100644 baseconfig/CONFIG_SURFACE3_WMI create mode 100644 baseconfig/CONFIG_SURFACE_3_BUTTON create mode 100644 baseconfig/CONFIG_SUSPEND create mode 100644 baseconfig/CONFIG_SWAP create mode 100644 baseconfig/CONFIG_SW_SYNC create mode 100644 baseconfig/CONFIG_SX9500 create mode 100644 baseconfig/CONFIG_SYNCLINK create mode 100644 baseconfig/CONFIG_SYNCLINKMP create mode 100644 baseconfig/CONFIG_SYNCLINK_CS create mode 100644 baseconfig/CONFIG_SYNCLINK_GT create mode 100644 baseconfig/CONFIG_SYNC_FILE create mode 100644 baseconfig/CONFIG_SYNOPSYS_DWC_ETH_QOS create mode 100644 baseconfig/CONFIG_SYN_COOKIES create mode 100644 baseconfig/CONFIG_SYSCON_REBOOT_MODE create mode 100644 baseconfig/CONFIG_SYSCTL create mode 100644 baseconfig/CONFIG_SYSFS_DEPRECATED create mode 100644 baseconfig/CONFIG_SYSFS_DEPRECATED_V2 create mode 100644 baseconfig/CONFIG_SYSTEMPORT create mode 100644 baseconfig/CONFIG_SYSTEM_BLACKLIST_KEYRING create mode 100644 baseconfig/CONFIG_SYSTEM_EXTRA_CERTIFICATE create mode 100644 baseconfig/CONFIG_SYSTEM_TRUSTED_KEYRING create mode 100644 baseconfig/CONFIG_SYSTEM_TRUSTED_KEYS create mode 100644 baseconfig/CONFIG_SYSV68_PARTITION create mode 100644 baseconfig/CONFIG_SYSVIPC create mode 100644 baseconfig/CONFIG_SYSV_FS create mode 100644 baseconfig/CONFIG_T5403 create mode 100644 baseconfig/CONFIG_TABLET_SERIAL_WACOM4 create mode 100644 baseconfig/CONFIG_TABLET_USB_ACECAD create mode 100644 baseconfig/CONFIG_TABLET_USB_AIPTEK create mode 100644 baseconfig/CONFIG_TABLET_USB_GTCO create mode 100644 baseconfig/CONFIG_TABLET_USB_HANWANG create mode 100644 baseconfig/CONFIG_TABLET_USB_KBTAB create mode 100644 baseconfig/CONFIG_TABLET_USB_PEGASUS create mode 100644 baseconfig/CONFIG_TARGET_CORE create mode 100644 baseconfig/CONFIG_TASKSTATS create mode 100644 baseconfig/CONFIG_TASKS_RCU create mode 100644 baseconfig/CONFIG_TASK_DELAY_ACCT create mode 100644 baseconfig/CONFIG_TASK_IO_ACCOUNTING create mode 100644 baseconfig/CONFIG_TASK_XACCT create mode 100644 baseconfig/CONFIG_TCG_ATMEL create mode 100644 baseconfig/CONFIG_TCG_INFINEON create mode 100644 baseconfig/CONFIG_TCG_NSC create mode 100644 baseconfig/CONFIG_TCG_TIS create mode 100644 baseconfig/CONFIG_TCG_TIS_I2C_ATMEL create mode 100644 baseconfig/CONFIG_TCG_TIS_I2C_INFINEON create mode 100644 baseconfig/CONFIG_TCG_TIS_I2C_NUVOTON create mode 100644 baseconfig/CONFIG_TCG_TIS_SPI create mode 100644 baseconfig/CONFIG_TCG_TIS_ST33ZP24 create mode 100644 baseconfig/CONFIG_TCG_TIS_ST33ZP24_I2C create mode 100644 baseconfig/CONFIG_TCG_TIS_ST33ZP24_SPI create mode 100644 baseconfig/CONFIG_TCG_TPM create mode 100644 baseconfig/CONFIG_TCG_VTPM_PROXY create mode 100644 baseconfig/CONFIG_TCG_XEN create mode 100644 baseconfig/CONFIG_TCM_FC create mode 100644 baseconfig/CONFIG_TCM_FILEIO create mode 100644 baseconfig/CONFIG_TCM_IBLOCK create mode 100644 baseconfig/CONFIG_TCM_PSCSI create mode 100644 baseconfig/CONFIG_TCM_QLA2XXX create mode 100644 baseconfig/CONFIG_TCM_QLA2XXX_DEBUG create mode 100644 baseconfig/CONFIG_TCM_USER2 create mode 100644 baseconfig/CONFIG_TCP_CONG_ADVANCED create mode 100644 baseconfig/CONFIG_TCP_CONG_BBR create mode 100644 baseconfig/CONFIG_TCP_CONG_BIC create mode 100644 baseconfig/CONFIG_TCP_CONG_CDG create mode 100644 baseconfig/CONFIG_TCP_CONG_CUBIC create mode 100644 baseconfig/CONFIG_TCP_CONG_DCTCP create mode 100644 baseconfig/CONFIG_TCP_CONG_HSTCP create mode 100644 baseconfig/CONFIG_TCP_CONG_HTCP create mode 100644 baseconfig/CONFIG_TCP_CONG_HYBLA create mode 100644 baseconfig/CONFIG_TCP_CONG_ILLINOIS create mode 100644 baseconfig/CONFIG_TCP_CONG_LP create mode 100644 baseconfig/CONFIG_TCP_CONG_NV create mode 100644 baseconfig/CONFIG_TCP_CONG_SCALABLE create mode 100644 baseconfig/CONFIG_TCP_CONG_VEGAS create mode 100644 baseconfig/CONFIG_TCP_CONG_VENO create mode 100644 baseconfig/CONFIG_TCP_CONG_WESTWOOD create mode 100644 baseconfig/CONFIG_TCP_CONG_YEAH create mode 100644 baseconfig/CONFIG_TCP_MD5SIG create mode 100644 baseconfig/CONFIG_TCS3414 create mode 100644 baseconfig/CONFIG_TCS3472 create mode 100644 baseconfig/CONFIG_TEGRA_GMI create mode 100644 baseconfig/CONFIG_TEGRA_IVC create mode 100644 baseconfig/CONFIG_TEHUTI create mode 100644 baseconfig/CONFIG_TEKRAM_DONGLE create mode 100644 baseconfig/CONFIG_TELCLOCK create mode 100644 baseconfig/CONFIG_TERANETICS_PHY create mode 100644 baseconfig/CONFIG_TEST_ASYNC_DRIVER_PROBE create mode 100644 baseconfig/CONFIG_TEST_BITMAP create mode 100644 baseconfig/CONFIG_TEST_BPF create mode 100644 baseconfig/CONFIG_TEST_FIRMWARE create mode 100644 baseconfig/CONFIG_TEST_HASH create mode 100644 baseconfig/CONFIG_TEST_HEXDUMP create mode 100644 baseconfig/CONFIG_TEST_KSTRTOX create mode 100644 baseconfig/CONFIG_TEST_LIST_SORT create mode 100644 baseconfig/CONFIG_TEST_LKM create mode 100644 baseconfig/CONFIG_TEST_POWER create mode 100644 baseconfig/CONFIG_TEST_PRINTF create mode 100644 baseconfig/CONFIG_TEST_RHASHTABLE create mode 100644 baseconfig/CONFIG_TEST_STATIC_KEYS create mode 100644 baseconfig/CONFIG_TEST_STRING_HELPERS create mode 100644 baseconfig/CONFIG_TEST_UDELAY create mode 100644 baseconfig/CONFIG_TEST_USER_COPY create mode 100644 baseconfig/CONFIG_TEST_UUID create mode 100644 baseconfig/CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE create mode 100644 baseconfig/CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE create mode 100644 baseconfig/CONFIG_THERMAL_EMULATION create mode 100644 baseconfig/CONFIG_THERMAL_GOV_BANG_BANG create mode 100644 baseconfig/CONFIG_THERMAL_GOV_FAIR_SHARE create mode 100644 baseconfig/CONFIG_THERMAL_GOV_POWER_ALLOCATOR create mode 100644 baseconfig/CONFIG_THERMAL_GOV_STEP_WISE create mode 100644 baseconfig/CONFIG_THERMAL_GOV_USER_SPACE create mode 100644 baseconfig/CONFIG_THERMAL_HWMON create mode 100644 baseconfig/CONFIG_THERMAL_OF create mode 100644 baseconfig/CONFIG_THERMAL_WRITABLE_TRIPS create mode 100644 baseconfig/CONFIG_THRUSTMASTER_FF create mode 100644 baseconfig/CONFIG_THUNDERBOLT create mode 100644 baseconfig/CONFIG_TIFM_7XX1 create mode 100644 baseconfig/CONFIG_TIFM_CORE create mode 100644 baseconfig/CONFIG_TIGON3 create mode 100644 baseconfig/CONFIG_TIMB_DMA create mode 100644 baseconfig/CONFIG_TIMER_STATS create mode 100644 baseconfig/CONFIG_TIPC create mode 100644 baseconfig/CONFIG_TIPC_MEDIA_IB create mode 100644 baseconfig/CONFIG_TIPC_MEDIA_UDP create mode 100644 baseconfig/CONFIG_TI_ADC081C create mode 100644 baseconfig/CONFIG_TI_ADC0832 create mode 100644 baseconfig/CONFIG_TI_ADC12138 create mode 100644 baseconfig/CONFIG_TI_ADC128S052 create mode 100644 baseconfig/CONFIG_TI_ADC161S626 create mode 100644 baseconfig/CONFIG_TI_ADS1015 create mode 100644 baseconfig/CONFIG_TI_ADS8688 create mode 100644 baseconfig/CONFIG_TI_CPSW_ALE create mode 100644 baseconfig/CONFIG_TI_DAC7512 create mode 100644 baseconfig/CONFIG_TI_SCI_PROTOCOL create mode 100644 baseconfig/CONFIG_TI_ST create mode 100644 baseconfig/CONFIG_TI_SYSCON_RESET create mode 100644 baseconfig/CONFIG_TLAN create mode 100644 baseconfig/CONFIG_TMD_HERMES create mode 100644 baseconfig/CONFIG_TMP006 create mode 100644 baseconfig/CONFIG_TMPFS create mode 100644 baseconfig/CONFIG_TMPFS_POSIX_ACL create mode 100644 baseconfig/CONFIG_TMPFS_XATTR create mode 100644 baseconfig/CONFIG_TOIM3232_DONGLE create mode 100644 baseconfig/CONFIG_TOSHIBA_FIR create mode 100644 baseconfig/CONFIG_TOUCHSCREEN_AD7877 create mode 100644 baseconfig/CONFIG_TOUCHSCREEN_AD7879 create mode 100644 baseconfig/CONFIG_TOUCHSCREEN_AD7879_I2C create mode 100644 baseconfig/CONFIG_TOUCHSCREEN_ADS7846 create mode 100644 baseconfig/CONFIG_TOUCHSCREEN_AR1021_I2C create mode 100644 baseconfig/CONFIG_TOUCHSCREEN_ATMEL_MXT create mode 100644 baseconfig/CONFIG_TOUCHSCREEN_ATMEL_MXT_T37 create mode 100644 baseconfig/CONFIG_TOUCHSCREEN_AUO_PIXCIR create mode 100644 baseconfig/CONFIG_TOUCHSCREEN_BU21013 create mode 100644 baseconfig/CONFIG_TOUCHSCREEN_CHIPONE_ICN8318 create mode 100644 baseconfig/CONFIG_TOUCHSCREEN_CY8CTMG110 create mode 100644 baseconfig/CONFIG_TOUCHSCREEN_CYTTSP4_CORE create mode 100644 baseconfig/CONFIG_TOUCHSCREEN_CYTTSP_CORE create mode 100644 baseconfig/CONFIG_TOUCHSCREEN_DYNAPRO create mode 100644 baseconfig/CONFIG_TOUCHSCREEN_EDT_FT5X06 create mode 100644 baseconfig/CONFIG_TOUCHSCREEN_EETI create mode 100644 baseconfig/CONFIG_TOUCHSCREEN_EGALAX create mode 100644 baseconfig/CONFIG_TOUCHSCREEN_EGALAX_SERIAL create mode 100644 baseconfig/CONFIG_TOUCHSCREEN_EKTF2127 create mode 100644 baseconfig/CONFIG_TOUCHSCREEN_ELAN create mode 100644 baseconfig/CONFIG_TOUCHSCREEN_ELO create mode 100644 baseconfig/CONFIG_TOUCHSCREEN_FT6236 create mode 100644 baseconfig/CONFIG_TOUCHSCREEN_FUJITSU create mode 100644 baseconfig/CONFIG_TOUCHSCREEN_GOODIX create mode 100644 baseconfig/CONFIG_TOUCHSCREEN_GUNZE create mode 100644 baseconfig/CONFIG_TOUCHSCREEN_HAMPSHIRE create mode 100644 baseconfig/CONFIG_TOUCHSCREEN_ILI210X create mode 100644 baseconfig/CONFIG_TOUCHSCREEN_IMX6UL_TSC create mode 100644 baseconfig/CONFIG_TOUCHSCREEN_INEXIO create mode 100644 baseconfig/CONFIG_TOUCHSCREEN_MAX11801 create mode 100644 baseconfig/CONFIG_TOUCHSCREEN_MCS5000 create mode 100644 baseconfig/CONFIG_TOUCHSCREEN_MELFAS_MIP4 create mode 100644 baseconfig/CONFIG_TOUCHSCREEN_MK712 create mode 100644 baseconfig/CONFIG_TOUCHSCREEN_MMS114 create mode 100644 baseconfig/CONFIG_TOUCHSCREEN_MTOUCH create mode 100644 baseconfig/CONFIG_TOUCHSCREEN_PENMOUNT create mode 100644 baseconfig/CONFIG_TOUCHSCREEN_PIXCIR create mode 100644 baseconfig/CONFIG_TOUCHSCREEN_RM_TS create mode 100644 baseconfig/CONFIG_TOUCHSCREEN_ROHM_BU21023 create mode 100644 baseconfig/CONFIG_TOUCHSCREEN_SILEAD create mode 100644 baseconfig/CONFIG_TOUCHSCREEN_SIS_I2C create mode 100644 baseconfig/CONFIG_TOUCHSCREEN_ST1232 create mode 100644 baseconfig/CONFIG_TOUCHSCREEN_SUR40 create mode 100644 baseconfig/CONFIG_TOUCHSCREEN_SURFACE3_SPI create mode 100644 baseconfig/CONFIG_TOUCHSCREEN_SX8654 create mode 100644 baseconfig/CONFIG_TOUCHSCREEN_TI_AM335X_TSC create mode 100644 baseconfig/CONFIG_TOUCHSCREEN_TOUCHIT213 create mode 100644 baseconfig/CONFIG_TOUCHSCREEN_TOUCHRIGHT create mode 100644 baseconfig/CONFIG_TOUCHSCREEN_TOUCHWIN create mode 100644 baseconfig/CONFIG_TOUCHSCREEN_TPS6507X create mode 100644 baseconfig/CONFIG_TOUCHSCREEN_TS4800 create mode 100644 baseconfig/CONFIG_TOUCHSCREEN_TSC2004 create mode 100644 baseconfig/CONFIG_TOUCHSCREEN_TSC2005 create mode 100644 baseconfig/CONFIG_TOUCHSCREEN_TSC2007 create mode 100644 baseconfig/CONFIG_TOUCHSCREEN_TSC_SERIO create mode 100644 baseconfig/CONFIG_TOUCHSCREEN_UCB1400 create mode 100644 baseconfig/CONFIG_TOUCHSCREEN_USB_COMPOSITE create mode 100644 baseconfig/CONFIG_TOUCHSCREEN_USB_E2I create mode 100644 baseconfig/CONFIG_TOUCHSCREEN_W90X900 create mode 100644 baseconfig/CONFIG_TOUCHSCREEN_WACOM_I2C create mode 100644 baseconfig/CONFIG_TOUCHSCREEN_WACOM_W8001 create mode 100644 baseconfig/CONFIG_TOUCHSCREEN_WDT87XX_I2C create mode 100644 baseconfig/CONFIG_TOUCHSCREEN_WM97XX create mode 100644 baseconfig/CONFIG_TOUCHSCREEN_ZFORCE create mode 100644 baseconfig/CONFIG_TPL0102 create mode 100644 baseconfig/CONFIG_TPS6105X create mode 100644 baseconfig/CONFIG_TPS65010 create mode 100644 baseconfig/CONFIG_TPS6507X create mode 100644 baseconfig/CONFIG_TR create mode 100644 baseconfig/CONFIG_TRACEPOINT_BENCHMARK create mode 100644 baseconfig/CONFIG_TRACER_SNAPSHOT create mode 100644 baseconfig/CONFIG_TRACER_SNAPSHOT_PER_CPU_SWAP create mode 100644 baseconfig/CONFIG_TRACE_BRANCH_PROFILING create mode 100644 baseconfig/CONFIG_TRACE_ENUM_MAP_FILE create mode 100644 baseconfig/CONFIG_TRACE_SINK create mode 100644 baseconfig/CONFIG_TRACING_EVENTS_GPIO create mode 100644 baseconfig/CONFIG_TRUSTED_KEYS create mode 100644 baseconfig/CONFIG_TS4800_IRQ create mode 100644 baseconfig/CONFIG_TS4800_WATCHDOG create mode 100644 baseconfig/CONFIG_TSL2583 create mode 100644 baseconfig/CONFIG_TSL2x7x create mode 100644 baseconfig/CONFIG_TSL4531 create mode 100644 baseconfig/CONFIG_TSYS01 create mode 100644 baseconfig/CONFIG_TSYS02D create mode 100644 baseconfig/CONFIG_TULIP create mode 100644 baseconfig/CONFIG_TULIP_MMIO create mode 100644 baseconfig/CONFIG_TULIP_MWI create mode 100644 baseconfig/CONFIG_TULIP_NAPI create mode 100644 baseconfig/CONFIG_TUN create mode 100644 baseconfig/CONFIG_TUN_VNET_CROSS_LE create mode 100644 baseconfig/CONFIG_TWL4030_CORE create mode 100644 baseconfig/CONFIG_TWL6040_CORE create mode 100644 baseconfig/CONFIG_TYPHOON create mode 100644 baseconfig/CONFIG_UBIFS_ATIME_SUPPORT create mode 100644 baseconfig/CONFIG_UBIFS_FS create mode 100644 baseconfig/CONFIG_UBIFS_FS_ADVANCED_COMPR create mode 100644 baseconfig/CONFIG_UBIFS_FS_ENCRYPTION create mode 100644 baseconfig/CONFIG_UBSAN create mode 100644 baseconfig/CONFIG_UBSAN_ALIGNMENT create mode 100644 baseconfig/CONFIG_UBSAN_SANITIZE_ALL create mode 100644 baseconfig/CONFIG_UCB1400_CORE create mode 100644 baseconfig/CONFIG_UCSI create mode 100644 baseconfig/CONFIG_UDF_FS create mode 100644 baseconfig/CONFIG_UEVENT_HELPER create mode 100644 baseconfig/CONFIG_UFS_DEBUG create mode 100644 baseconfig/CONFIG_UFS_FS create mode 100644 baseconfig/CONFIG_UFS_FS_WRITE create mode 100644 baseconfig/CONFIG_UHID create mode 100644 baseconfig/CONFIG_UIO create mode 100644 baseconfig/CONFIG_UIO_AEC create mode 100644 baseconfig/CONFIG_UIO_CIF create mode 100644 baseconfig/CONFIG_UIO_DMEM_GENIRQ create mode 100644 baseconfig/CONFIG_UIO_HV_GENERIC create mode 100644 baseconfig/CONFIG_UIO_MF624 create mode 100644 baseconfig/CONFIG_UIO_NETX create mode 100644 baseconfig/CONFIG_UIO_PCI_GENERIC create mode 100644 baseconfig/CONFIG_UIO_PDRV create mode 100644 baseconfig/CONFIG_UIO_PDRV_GENIRQ create mode 100644 baseconfig/CONFIG_UIO_PRUSS create mode 100644 baseconfig/CONFIG_UIO_SERCOS3 create mode 100644 baseconfig/CONFIG_ULI526X create mode 100644 baseconfig/CONFIG_ULTRIX_PARTITION create mode 100644 baseconfig/CONFIG_UNISYSSPAR create mode 100644 baseconfig/CONFIG_UNIX create mode 100644 baseconfig/CONFIG_UNIX98_PTYS create mode 100644 baseconfig/CONFIG_UNIXWARE_DISKLABEL create mode 100644 baseconfig/CONFIG_UNIX_DIAG create mode 100644 baseconfig/CONFIG_UNUSED_SYMBOLS create mode 100644 baseconfig/CONFIG_UPROBE_EVENT create mode 100644 baseconfig/CONFIG_US5182D create mode 100644 baseconfig/CONFIG_USB create mode 100644 baseconfig/CONFIG_USBIP_CORE create mode 100644 baseconfig/CONFIG_USBIP_DEBUG create mode 100644 baseconfig/CONFIG_USBIP_HOST create mode 100644 baseconfig/CONFIG_USBIP_VHCI_HCD create mode 100644 baseconfig/CONFIG_USBIP_VHCI_HC_PORTS create mode 100644 baseconfig/CONFIG_USBIP_VHCI_NR_HCS create mode 100644 baseconfig/CONFIG_USBIP_VUDC create mode 100644 baseconfig/CONFIG_USBPCWATCHDOG create mode 100644 baseconfig/CONFIG_USB_ACM create mode 100644 baseconfig/CONFIG_USB_ADUTUX create mode 100644 baseconfig/CONFIG_USB_ALI_M5632 create mode 100644 baseconfig/CONFIG_USB_AN2720 create mode 100644 baseconfig/CONFIG_USB_ANNOUNCE_NEW_DEVICES create mode 100644 baseconfig/CONFIG_USB_APPLEDISPLAY create mode 100644 baseconfig/CONFIG_USB_ARMLINUX create mode 100644 baseconfig/CONFIG_USB_ATM create mode 100644 baseconfig/CONFIG_USB_ATMEL create mode 100644 baseconfig/CONFIG_USB_BELKIN create mode 100644 baseconfig/CONFIG_USB_C67X00_HCD create mode 100644 baseconfig/CONFIG_USB_CATC create mode 100644 baseconfig/CONFIG_USB_CDC_PHONET create mode 100644 baseconfig/CONFIG_USB_CHAOSKEY create mode 100644 baseconfig/CONFIG_USB_CHIPIDEA create mode 100644 baseconfig/CONFIG_USB_CXACRU create mode 100644 baseconfig/CONFIG_USB_CYPRESS_CY7C63 create mode 100644 baseconfig/CONFIG_USB_CYTHERM create mode 100644 baseconfig/CONFIG_USB_DEBUG create mode 100644 baseconfig/CONFIG_USB_DEFAULT_PERSIST create mode 100644 baseconfig/CONFIG_USB_DSBR create mode 100644 baseconfig/CONFIG_USB_DWC2 create mode 100644 baseconfig/CONFIG_USB_DWC3 create mode 100644 baseconfig/CONFIG_USB_DWC3_OF_SIMPLE create mode 100644 baseconfig/CONFIG_USB_DYNAMIC_MINORS create mode 100644 baseconfig/CONFIG_USB_EHCI_HCD create mode 100644 baseconfig/CONFIG_USB_EHCI_HCD_PLATFORM create mode 100644 baseconfig/CONFIG_USB_EHCI_MV create mode 100644 baseconfig/CONFIG_USB_EHCI_ROOT_HUB_TT create mode 100644 baseconfig/CONFIG_USB_EHCI_TT_NEWSCHED create mode 100644 baseconfig/CONFIG_USB_EHSET_TEST_FIXTURE create mode 100644 baseconfig/CONFIG_USB_EMI26 create mode 100644 baseconfig/CONFIG_USB_EMI62 create mode 100644 baseconfig/CONFIG_USB_EPSON2888 create mode 100644 baseconfig/CONFIG_USB_EZUSB create mode 100644 baseconfig/CONFIG_USB_EZUSB_FX2 create mode 100644 baseconfig/CONFIG_USB_FOTG210_HCD create mode 100644 baseconfig/CONFIG_USB_FTDI_ELAN create mode 100644 baseconfig/CONFIG_USB_GADGET create mode 100644 baseconfig/CONFIG_USB_GADGETFS create mode 100644 baseconfig/CONFIG_USB_GL860 create mode 100644 baseconfig/CONFIG_USB_GPIO_VBUS create mode 100644 baseconfig/CONFIG_USB_GR_UDC create mode 100644 baseconfig/CONFIG_USB_GSPCA create mode 100644 baseconfig/CONFIG_USB_GSPCA_BENQ create mode 100644 baseconfig/CONFIG_USB_GSPCA_CONEX create mode 100644 baseconfig/CONFIG_USB_GSPCA_CPIA1 create mode 100644 baseconfig/CONFIG_USB_GSPCA_DTCS033 create mode 100644 baseconfig/CONFIG_USB_GSPCA_ETOMS create mode 100644 baseconfig/CONFIG_USB_GSPCA_FINEPIX create mode 100644 baseconfig/CONFIG_USB_GSPCA_JEILINJ create mode 100644 baseconfig/CONFIG_USB_GSPCA_JL2005BCD create mode 100644 baseconfig/CONFIG_USB_GSPCA_KINECT create mode 100644 baseconfig/CONFIG_USB_GSPCA_KONICA create mode 100644 baseconfig/CONFIG_USB_GSPCA_MARS create mode 100644 baseconfig/CONFIG_USB_GSPCA_MR97310A create mode 100644 baseconfig/CONFIG_USB_GSPCA_NW80X create mode 100644 baseconfig/CONFIG_USB_GSPCA_OV519 create mode 100644 baseconfig/CONFIG_USB_GSPCA_OV534 create mode 100644 baseconfig/CONFIG_USB_GSPCA_OV534_9 create mode 100644 baseconfig/CONFIG_USB_GSPCA_PAC207 create mode 100644 baseconfig/CONFIG_USB_GSPCA_PAC7302 create mode 100644 baseconfig/CONFIG_USB_GSPCA_PAC7311 create mode 100644 baseconfig/CONFIG_USB_GSPCA_SE401 create mode 100644 baseconfig/CONFIG_USB_GSPCA_SN9C2028 create mode 100644 baseconfig/CONFIG_USB_GSPCA_SN9C20X create mode 100644 baseconfig/CONFIG_USB_GSPCA_SONIXB create mode 100644 baseconfig/CONFIG_USB_GSPCA_SONIXJ create mode 100644 baseconfig/CONFIG_USB_GSPCA_SPCA1528 create mode 100644 baseconfig/CONFIG_USB_GSPCA_SPCA500 create mode 100644 baseconfig/CONFIG_USB_GSPCA_SPCA501 create mode 100644 baseconfig/CONFIG_USB_GSPCA_SPCA505 create mode 100644 baseconfig/CONFIG_USB_GSPCA_SPCA506 create mode 100644 baseconfig/CONFIG_USB_GSPCA_SPCA508 create mode 100644 baseconfig/CONFIG_USB_GSPCA_SPCA561 create mode 100644 baseconfig/CONFIG_USB_GSPCA_SQ905 create mode 100644 baseconfig/CONFIG_USB_GSPCA_SQ905C create mode 100644 baseconfig/CONFIG_USB_GSPCA_SQ930X create mode 100644 baseconfig/CONFIG_USB_GSPCA_STK014 create mode 100644 baseconfig/CONFIG_USB_GSPCA_STK1135 create mode 100644 baseconfig/CONFIG_USB_GSPCA_STV0680 create mode 100644 baseconfig/CONFIG_USB_GSPCA_SUNPLUS create mode 100644 baseconfig/CONFIG_USB_GSPCA_T613 create mode 100644 baseconfig/CONFIG_USB_GSPCA_TOPRO create mode 100644 baseconfig/CONFIG_USB_GSPCA_TOUPTEK create mode 100644 baseconfig/CONFIG_USB_GSPCA_TV8532 create mode 100644 baseconfig/CONFIG_USB_GSPCA_VC032X create mode 100644 baseconfig/CONFIG_USB_GSPCA_VICAM create mode 100644 baseconfig/CONFIG_USB_GSPCA_XIRLINK_CIT create mode 100644 baseconfig/CONFIG_USB_GSPCA_ZC3XX create mode 100644 baseconfig/CONFIG_USB_G_SERIAL create mode 100644 baseconfig/CONFIG_USB_HCD_BCMA create mode 100644 baseconfig/CONFIG_USB_HCD_SSB create mode 100644 baseconfig/CONFIG_USB_HCD_TEST_MODE create mode 100644 baseconfig/CONFIG_USB_HID create mode 100644 baseconfig/CONFIG_USB_HIDDEV create mode 100644 baseconfig/CONFIG_USB_HSIC_USB3503 create mode 100644 baseconfig/CONFIG_USB_HSIC_USB4604 create mode 100644 baseconfig/CONFIG_USB_HSO create mode 100644 baseconfig/CONFIG_USB_HWA_HCD create mode 100644 baseconfig/CONFIG_USB_IDMOUSE create mode 100644 baseconfig/CONFIG_USB_IOWARRIOR create mode 100644 baseconfig/CONFIG_USB_IPHETH create mode 100644 baseconfig/CONFIG_USB_IRDA create mode 100644 baseconfig/CONFIG_USB_ISIGHTFW create mode 100644 baseconfig/CONFIG_USB_ISP116X_HCD create mode 100644 baseconfig/CONFIG_USB_ISP1301 create mode 100644 baseconfig/CONFIG_USB_ISP1362_HCD create mode 100644 baseconfig/CONFIG_USB_ISP1760 create mode 100644 baseconfig/CONFIG_USB_KAWETH create mode 100644 baseconfig/CONFIG_USB_KC2190 create mode 100644 baseconfig/CONFIG_USB_KEENE create mode 100644 baseconfig/CONFIG_USB_LAN78XX create mode 100644 baseconfig/CONFIG_USB_LCD create mode 100644 baseconfig/CONFIG_USB_LD create mode 100644 baseconfig/CONFIG_USB_LED create mode 100644 baseconfig/CONFIG_USB_LEDS_TRIGGER_USBPORT create mode 100644 baseconfig/CONFIG_USB_LED_TRIG create mode 100644 baseconfig/CONFIG_USB_LEGOTOWER create mode 100644 baseconfig/CONFIG_USB_LINK_LAYER_TEST create mode 100644 baseconfig/CONFIG_USB_M5602 create mode 100644 baseconfig/CONFIG_USB_MA901 create mode 100644 baseconfig/CONFIG_USB_MAX3421_HCD create mode 100644 baseconfig/CONFIG_USB_MDC800 create mode 100644 baseconfig/CONFIG_USB_MICROTEK create mode 100644 baseconfig/CONFIG_USB_MON create mode 100644 baseconfig/CONFIG_USB_MR800 create mode 100644 baseconfig/CONFIG_USB_MUSB_HDRC create mode 100644 baseconfig/CONFIG_USB_NET_AX88179_178A create mode 100644 baseconfig/CONFIG_USB_NET_AX8817X create mode 100644 baseconfig/CONFIG_USB_NET_CDC_EEM create mode 100644 baseconfig/CONFIG_USB_NET_CDC_MBIM create mode 100644 baseconfig/CONFIG_USB_NET_CDC_NCM create mode 100644 baseconfig/CONFIG_USB_NET_CDC_SUBSET create mode 100644 baseconfig/CONFIG_USB_NET_CH9200 create mode 100644 baseconfig/CONFIG_USB_NET_CX82310_ETH create mode 100644 baseconfig/CONFIG_USB_NET_DM9601 create mode 100644 baseconfig/CONFIG_USB_NET_DRIVERS create mode 100644 baseconfig/CONFIG_USB_NET_GL620A create mode 100644 baseconfig/CONFIG_USB_NET_HUAWEI_CDC_NCM create mode 100644 baseconfig/CONFIG_USB_NET_INT51X1 create mode 100644 baseconfig/CONFIG_USB_NET_KALMIA create mode 100644 baseconfig/CONFIG_USB_NET_MCS7830 create mode 100644 baseconfig/CONFIG_USB_NET_NET1080 create mode 100644 baseconfig/CONFIG_USB_NET_PLUSB create mode 100644 baseconfig/CONFIG_USB_NET_QMI_WWAN create mode 100644 baseconfig/CONFIG_USB_NET_RNDIS_HOST create mode 100644 baseconfig/CONFIG_USB_NET_RNDIS_WLAN create mode 100644 baseconfig/CONFIG_USB_NET_SMSC75XX create mode 100644 baseconfig/CONFIG_USB_NET_SMSC95XX create mode 100644 baseconfig/CONFIG_USB_NET_SR9700 create mode 100644 baseconfig/CONFIG_USB_NET_SR9800 create mode 100644 baseconfig/CONFIG_USB_NET_ZAURUS create mode 100644 baseconfig/CONFIG_USB_OHCI_HCD create mode 100644 baseconfig/CONFIG_USB_OHCI_HCD_PCI create mode 100644 baseconfig/CONFIG_USB_OHCI_HCD_PLATFORM create mode 100644 baseconfig/CONFIG_USB_OHCI_HCD_SSB create mode 100644 baseconfig/CONFIG_USB_OTG create mode 100644 baseconfig/CONFIG_USB_OTG_FSM create mode 100644 baseconfig/CONFIG_USB_OTG_WHITELIST create mode 100644 baseconfig/CONFIG_USB_OXU210HP_HCD create mode 100644 baseconfig/CONFIG_USB_PEGASUS create mode 100644 baseconfig/CONFIG_USB_PHY create mode 100644 baseconfig/CONFIG_USB_PRINTER create mode 100644 baseconfig/CONFIG_USB_PULSE8_CEC create mode 100644 baseconfig/CONFIG_USB_PWC create mode 100644 baseconfig/CONFIG_USB_PWC_DEBUG create mode 100644 baseconfig/CONFIG_USB_PWC_INPUT_EVDEV create mode 100644 baseconfig/CONFIG_USB_R8A66597_HCD create mode 100644 baseconfig/CONFIG_USB_RAREMONO create mode 100644 baseconfig/CONFIG_USB_RIO500 create mode 100644 baseconfig/CONFIG_USB_RTL8150 create mode 100644 baseconfig/CONFIG_USB_RTL8152 create mode 100644 baseconfig/CONFIG_USB_S2255 create mode 100644 baseconfig/CONFIG_USB_SERIAL create mode 100644 baseconfig/CONFIG_USB_SERIAL_AIRCABLE create mode 100644 baseconfig/CONFIG_USB_SERIAL_ARK3116 create mode 100644 baseconfig/CONFIG_USB_SERIAL_BELKIN create mode 100644 baseconfig/CONFIG_USB_SERIAL_CH341 create mode 100644 baseconfig/CONFIG_USB_SERIAL_CONSOLE create mode 100644 baseconfig/CONFIG_USB_SERIAL_CP210X create mode 100644 baseconfig/CONFIG_USB_SERIAL_CYBERJACK create mode 100644 baseconfig/CONFIG_USB_SERIAL_CYPRESS_M8 create mode 100644 baseconfig/CONFIG_USB_SERIAL_DEBUG create mode 100644 baseconfig/CONFIG_USB_SERIAL_DIGI_ACCELEPORT create mode 100644 baseconfig/CONFIG_USB_SERIAL_EDGEPORT create mode 100644 baseconfig/CONFIG_USB_SERIAL_EDGEPORT_TI create mode 100644 baseconfig/CONFIG_USB_SERIAL_EMPEG create mode 100644 baseconfig/CONFIG_USB_SERIAL_F81232 create mode 100644 baseconfig/CONFIG_USB_SERIAL_F8153X create mode 100644 baseconfig/CONFIG_USB_SERIAL_FTDI_SIO create mode 100644 baseconfig/CONFIG_USB_SERIAL_GARMIN create mode 100644 baseconfig/CONFIG_USB_SERIAL_GENERIC create mode 100644 baseconfig/CONFIG_USB_SERIAL_IPAQ create mode 100644 baseconfig/CONFIG_USB_SERIAL_IPW create mode 100644 baseconfig/CONFIG_USB_SERIAL_IR create mode 100644 baseconfig/CONFIG_USB_SERIAL_IUU create mode 100644 baseconfig/CONFIG_USB_SERIAL_KEYSPAN create mode 100644 baseconfig/CONFIG_USB_SERIAL_KEYSPAN_MPR create mode 100644 baseconfig/CONFIG_USB_SERIAL_KEYSPAN_PDA create mode 100644 baseconfig/CONFIG_USB_SERIAL_KEYSPAN_USA18X create mode 100644 baseconfig/CONFIG_USB_SERIAL_KEYSPAN_USA19 create mode 100644 baseconfig/CONFIG_USB_SERIAL_KEYSPAN_USA19QI create mode 100644 baseconfig/CONFIG_USB_SERIAL_KEYSPAN_USA19QW create mode 100644 baseconfig/CONFIG_USB_SERIAL_KEYSPAN_USA19W create mode 100644 baseconfig/CONFIG_USB_SERIAL_KEYSPAN_USA28 create mode 100644 baseconfig/CONFIG_USB_SERIAL_KEYSPAN_USA28X create mode 100644 baseconfig/CONFIG_USB_SERIAL_KEYSPAN_USA28XA create mode 100644 baseconfig/CONFIG_USB_SERIAL_KEYSPAN_USA28XB create mode 100644 baseconfig/CONFIG_USB_SERIAL_KEYSPAN_USA49W create mode 100644 baseconfig/CONFIG_USB_SERIAL_KEYSPAN_USA49WLC create mode 100644 baseconfig/CONFIG_USB_SERIAL_KLSI create mode 100644 baseconfig/CONFIG_USB_SERIAL_KOBIL_SCT create mode 100644 baseconfig/CONFIG_USB_SERIAL_MCT_U232 create mode 100644 baseconfig/CONFIG_USB_SERIAL_METRO create mode 100644 baseconfig/CONFIG_USB_SERIAL_MOS7715_PARPORT create mode 100644 baseconfig/CONFIG_USB_SERIAL_MOS7720 create mode 100644 baseconfig/CONFIG_USB_SERIAL_MOS7840 create mode 100644 baseconfig/CONFIG_USB_SERIAL_MXUPORT create mode 100644 baseconfig/CONFIG_USB_SERIAL_NAVMAN create mode 100644 baseconfig/CONFIG_USB_SERIAL_OMNINET create mode 100644 baseconfig/CONFIG_USB_SERIAL_OPTICON create mode 100644 baseconfig/CONFIG_USB_SERIAL_OPTION create mode 100644 baseconfig/CONFIG_USB_SERIAL_OTI6858 create mode 100644 baseconfig/CONFIG_USB_SERIAL_PL2303 create mode 100644 baseconfig/CONFIG_USB_SERIAL_QCAUX create mode 100644 baseconfig/CONFIG_USB_SERIAL_QT2 create mode 100644 baseconfig/CONFIG_USB_SERIAL_QUALCOMM create mode 100644 baseconfig/CONFIG_USB_SERIAL_SAFE create mode 100644 baseconfig/CONFIG_USB_SERIAL_SAFE_PADDED create mode 100644 baseconfig/CONFIG_USB_SERIAL_SIERRAWIRELESS create mode 100644 baseconfig/CONFIG_USB_SERIAL_SIMPLE create mode 100644 baseconfig/CONFIG_USB_SERIAL_SPCP8X5 create mode 100644 baseconfig/CONFIG_USB_SERIAL_SSU100 create mode 100644 baseconfig/CONFIG_USB_SERIAL_SYMBOL create mode 100644 baseconfig/CONFIG_USB_SERIAL_TI create mode 100644 baseconfig/CONFIG_USB_SERIAL_VISOR create mode 100644 baseconfig/CONFIG_USB_SERIAL_WHITEHEAT create mode 100644 baseconfig/CONFIG_USB_SERIAL_WISHBONE create mode 100644 baseconfig/CONFIG_USB_SERIAL_XIRCOM create mode 100644 baseconfig/CONFIG_USB_SERIAL_XSENS_MT create mode 100644 baseconfig/CONFIG_USB_SEVSEG create mode 100644 baseconfig/CONFIG_USB_SI470X create mode 100644 baseconfig/CONFIG_USB_SI4713 create mode 100644 baseconfig/CONFIG_USB_SIERRA_NET create mode 100644 baseconfig/CONFIG_USB_SISUSBVGA create mode 100644 baseconfig/CONFIG_USB_SISUSBVGA_CON create mode 100644 baseconfig/CONFIG_USB_SL811_CS create mode 100644 baseconfig/CONFIG_USB_SL811_HCD create mode 100644 baseconfig/CONFIG_USB_SL811_HCD_ISO create mode 100644 baseconfig/CONFIG_USB_SPEEDTOUCH create mode 100644 baseconfig/CONFIG_USB_STKWEBCAM create mode 100644 baseconfig/CONFIG_USB_STORAGE create mode 100644 baseconfig/CONFIG_USB_STORAGE_ALAUDA create mode 100644 baseconfig/CONFIG_USB_STORAGE_CYPRESS_ATACB create mode 100644 baseconfig/CONFIG_USB_STORAGE_DATAFAB create mode 100644 baseconfig/CONFIG_USB_STORAGE_DEBUG create mode 100644 baseconfig/CONFIG_USB_STORAGE_ENE_UB6250 create mode 100644 baseconfig/CONFIG_USB_STORAGE_FREECOM create mode 100644 baseconfig/CONFIG_USB_STORAGE_ISD200 create mode 100644 baseconfig/CONFIG_USB_STORAGE_JUMPSHOT create mode 100644 baseconfig/CONFIG_USB_STORAGE_KARMA create mode 100644 baseconfig/CONFIG_USB_STORAGE_ONETOUCH create mode 100644 baseconfig/CONFIG_USB_STORAGE_REALTEK create mode 100644 baseconfig/CONFIG_USB_STORAGE_SDDR09 create mode 100644 baseconfig/CONFIG_USB_STORAGE_SDDR55 create mode 100644 baseconfig/CONFIG_USB_STORAGE_USBAT create mode 100644 baseconfig/CONFIG_USB_STV06XX create mode 100644 baseconfig/CONFIG_USB_SUPPORT create mode 100644 baseconfig/CONFIG_USB_SWITCH_FSA9480 create mode 100644 baseconfig/CONFIG_USB_TEST create mode 100644 baseconfig/CONFIG_USB_TMC create mode 100644 baseconfig/CONFIG_USB_TRANCEVIBRATOR create mode 100644 baseconfig/CONFIG_USB_U132_HCD create mode 100644 baseconfig/CONFIG_USB_UAS create mode 100644 baseconfig/CONFIG_USB_UEAGLEATM create mode 100644 baseconfig/CONFIG_USB_UHCI_HCD create mode 100644 baseconfig/CONFIG_USB_ULPI_BUS create mode 100644 baseconfig/CONFIG_USB_USBNET create mode 100644 baseconfig/CONFIG_USB_USS720 create mode 100644 baseconfig/CONFIG_USB_VIDEO_CLASS create mode 100644 baseconfig/CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV create mode 100644 baseconfig/CONFIG_USB_VL600 create mode 100644 baseconfig/CONFIG_USB_WDM create mode 100644 baseconfig/CONFIG_USB_WHCI_HCD create mode 100644 baseconfig/CONFIG_USB_WUSB create mode 100644 baseconfig/CONFIG_USB_WUSB_CBAF create mode 100644 baseconfig/CONFIG_USB_WUSB_CBAF_DEBUG create mode 100644 baseconfig/CONFIG_USB_XHCI_HCD create mode 100644 baseconfig/CONFIG_USB_XHCI_PLATFORM create mode 100644 baseconfig/CONFIG_USB_XUSBATM create mode 100644 baseconfig/CONFIG_USB_YUREX create mode 100644 baseconfig/CONFIG_USB_ZD1201 create mode 100644 baseconfig/CONFIG_USB_ZR364XX create mode 100644 baseconfig/CONFIG_USELIB create mode 100644 baseconfig/CONFIG_USERFAULTFD create mode 100644 baseconfig/CONFIG_USERIO create mode 100644 baseconfig/CONFIG_USER_NS create mode 100644 baseconfig/CONFIG_USE_THIN_ARCHIVES create mode 100644 baseconfig/CONFIG_UTS_NS create mode 100644 baseconfig/CONFIG_UWB create mode 100644 baseconfig/CONFIG_UWB_HWA create mode 100644 baseconfig/CONFIG_UWB_I1480U create mode 100644 baseconfig/CONFIG_UWB_WHCI create mode 100644 baseconfig/CONFIG_V4L2_FLASH_LED_CLASS create mode 100644 baseconfig/CONFIG_V4L_MEM2MEM_DRIVERS create mode 100644 baseconfig/CONFIG_V4L_PLATFORM_DRIVERS create mode 100644 baseconfig/CONFIG_V4L_TEST_DRIVERS create mode 100644 baseconfig/CONFIG_VCNL4000 create mode 100644 baseconfig/CONFIG_VEML6070 create mode 100644 baseconfig/CONFIG_VETH create mode 100644 baseconfig/CONFIG_VF610_ADC create mode 100644 baseconfig/CONFIG_VF610_DAC create mode 100644 baseconfig/CONFIG_VFAT_FS create mode 100644 baseconfig/CONFIG_VFIO create mode 100644 baseconfig/CONFIG_VFIO_IOMMU_TYPE1 create mode 100644 baseconfig/CONFIG_VFIO_MDEV create mode 100644 baseconfig/CONFIG_VFIO_MDEV_DEVICE create mode 100644 baseconfig/CONFIG_VFIO_NOIOMMU create mode 100644 baseconfig/CONFIG_VFIO_PCI create mode 100644 baseconfig/CONFIG_VGACON_SOFT_SCROLLBACK create mode 100644 baseconfig/CONFIG_VGACON_SOFT_SCROLLBACK_SIZE create mode 100644 baseconfig/CONFIG_VGA_ARB create mode 100644 baseconfig/CONFIG_VGA_ARB_MAX_GPUS create mode 100644 baseconfig/CONFIG_VGA_CONSOLE create mode 100644 baseconfig/CONFIG_VHOST_CROSS_ENDIAN_LEGACY create mode 100644 baseconfig/CONFIG_VHOST_NET create mode 100644 baseconfig/CONFIG_VHOST_SCSI create mode 100644 baseconfig/CONFIG_VHOST_VSOCK create mode 100644 baseconfig/CONFIG_VIA_FIR create mode 100644 baseconfig/CONFIG_VIA_RHINE create mode 100644 baseconfig/CONFIG_VIA_RHINE_MMIO create mode 100644 baseconfig/CONFIG_VIA_VELOCITY create mode 100644 baseconfig/CONFIG_VIDEO_ADV_DEBUG create mode 100644 baseconfig/CONFIG_VIDEO_AU0828 create mode 100644 baseconfig/CONFIG_VIDEO_AU0828_RC create mode 100644 baseconfig/CONFIG_VIDEO_AU0828_V4L2 create mode 100644 baseconfig/CONFIG_VIDEO_BT848 create mode 100644 baseconfig/CONFIG_VIDEO_CAFE_CCIC create mode 100644 baseconfig/CONFIG_VIDEO_CPIA create mode 100644 baseconfig/CONFIG_VIDEO_CPIA2 create mode 100644 baseconfig/CONFIG_VIDEO_CX18 create mode 100644 baseconfig/CONFIG_VIDEO_CX18_ALSA create mode 100644 baseconfig/CONFIG_VIDEO_CX231XX create mode 100644 baseconfig/CONFIG_VIDEO_CX231XX_ALSA create mode 100644 baseconfig/CONFIG_VIDEO_CX231XX_DVB create mode 100644 baseconfig/CONFIG_VIDEO_CX231XX_RC create mode 100644 baseconfig/CONFIG_VIDEO_CX23885 create mode 100644 baseconfig/CONFIG_VIDEO_CX25821 create mode 100644 baseconfig/CONFIG_VIDEO_CX88 create mode 100644 baseconfig/CONFIG_VIDEO_CX88_ALSA create mode 100644 baseconfig/CONFIG_VIDEO_CX88_BLACKBIRD create mode 100644 baseconfig/CONFIG_VIDEO_CX88_DVB create mode 100644 baseconfig/CONFIG_VIDEO_CX88_ENABLE_VP3054 create mode 100644 baseconfig/CONFIG_VIDEO_CX88_VP3054 create mode 100644 baseconfig/CONFIG_VIDEO_DEV create mode 100644 baseconfig/CONFIG_VIDEO_DT3155 create mode 100644 baseconfig/CONFIG_VIDEO_EM28XX create mode 100644 baseconfig/CONFIG_VIDEO_EM28XX_ALSA create mode 100644 baseconfig/CONFIG_VIDEO_EM28XX_DVB create mode 100644 baseconfig/CONFIG_VIDEO_EM28XX_RC create mode 100644 baseconfig/CONFIG_VIDEO_EM28XX_V4L2 create mode 100644 baseconfig/CONFIG_VIDEO_FB_IVTV create mode 100644 baseconfig/CONFIG_VIDEO_FIXED_MINOR_RANGES create mode 100644 baseconfig/CONFIG_VIDEO_GO7007 create mode 100644 baseconfig/CONFIG_VIDEO_GO7007_LOADER create mode 100644 baseconfig/CONFIG_VIDEO_GO7007_USB create mode 100644 baseconfig/CONFIG_VIDEO_GO7007_USB_S2250_BOARD create mode 100644 baseconfig/CONFIG_VIDEO_HDPVR create mode 100644 baseconfig/CONFIG_VIDEO_HEXIUM_GEMINI create mode 100644 baseconfig/CONFIG_VIDEO_HEXIUM_ORION create mode 100644 baseconfig/CONFIG_VIDEO_IVTV create mode 100644 baseconfig/CONFIG_VIDEO_IVTV_ALSA create mode 100644 baseconfig/CONFIG_VIDEO_M5MOLS create mode 100644 baseconfig/CONFIG_VIDEO_MEM2MEM_DEINTERLACE create mode 100644 baseconfig/CONFIG_VIDEO_MEYE create mode 100644 baseconfig/CONFIG_VIDEO_MXB create mode 100644 baseconfig/CONFIG_VIDEO_NOON010PC30 create mode 100644 baseconfig/CONFIG_VIDEO_PCI_SKELETON create mode 100644 baseconfig/CONFIG_VIDEO_PVRUSB2 create mode 100644 baseconfig/CONFIG_VIDEO_PVRUSB2_DEBUGIFC create mode 100644 baseconfig/CONFIG_VIDEO_PVRUSB2_DVB create mode 100644 baseconfig/CONFIG_VIDEO_PVRUSB2_SYSFS create mode 100644 baseconfig/CONFIG_VIDEO_RENESAS_VSP1 create mode 100644 baseconfig/CONFIG_VIDEO_SAA6588 create mode 100644 baseconfig/CONFIG_VIDEO_SAA7134 create mode 100644 baseconfig/CONFIG_VIDEO_SAA7134_ALSA create mode 100644 baseconfig/CONFIG_VIDEO_SAA7134_DVB create mode 100644 baseconfig/CONFIG_VIDEO_SAA7134_GO7007 create mode 100644 baseconfig/CONFIG_VIDEO_SAA7134_RC create mode 100644 baseconfig/CONFIG_VIDEO_SAA7146 create mode 100644 baseconfig/CONFIG_VIDEO_SAA7146_VV create mode 100644 baseconfig/CONFIG_VIDEO_SAA7164 create mode 100644 baseconfig/CONFIG_VIDEO_SAMSUNG_S5P_CEC create mode 100644 baseconfig/CONFIG_VIDEO_SH_MOBILE_CEU create mode 100644 baseconfig/CONFIG_VIDEO_SH_MOBILE_CSI2 create mode 100644 baseconfig/CONFIG_VIDEO_SH_VEU create mode 100644 baseconfig/CONFIG_VIDEO_SOLO6X10 create mode 100644 baseconfig/CONFIG_VIDEO_SR030PC30 create mode 100644 baseconfig/CONFIG_VIDEO_STK1160 create mode 100644 baseconfig/CONFIG_VIDEO_STK1160_AC97 create mode 100644 baseconfig/CONFIG_VIDEO_STK1160_COMMON create mode 100644 baseconfig/CONFIG_VIDEO_TM6000 create mode 100644 baseconfig/CONFIG_VIDEO_TM6000_ALSA create mode 100644 baseconfig/CONFIG_VIDEO_TM6000_DVB create mode 100644 baseconfig/CONFIG_VIDEO_TUNER create mode 100644 baseconfig/CONFIG_VIDEO_TW5864 create mode 100644 baseconfig/CONFIG_VIDEO_TW68 create mode 100644 baseconfig/CONFIG_VIDEO_TW686X create mode 100644 baseconfig/CONFIG_VIDEO_TW686X_KH create mode 100644 baseconfig/CONFIG_VIDEO_USBTV create mode 100644 baseconfig/CONFIG_VIDEO_USBVISION create mode 100644 baseconfig/CONFIG_VIDEO_V4L2 create mode 100644 baseconfig/CONFIG_VIDEO_V4L2_SUBDEV_API create mode 100644 baseconfig/CONFIG_VIDEO_VIVI create mode 100644 baseconfig/CONFIG_VIDEO_VIVID create mode 100644 baseconfig/CONFIG_VIDEO_XILINX create mode 100644 baseconfig/CONFIG_VIDEO_ZORAN create mode 100644 baseconfig/CONFIG_VIDEO_ZORAN_AVS6EYES create mode 100644 baseconfig/CONFIG_VIDEO_ZORAN_BUZ create mode 100644 baseconfig/CONFIG_VIDEO_ZORAN_DC10 create mode 100644 baseconfig/CONFIG_VIDEO_ZORAN_DC30 create mode 100644 baseconfig/CONFIG_VIDEO_ZORAN_LML33 create mode 100644 baseconfig/CONFIG_VIDEO_ZORAN_LML33R10 create mode 100644 baseconfig/CONFIG_VIDEO_ZORAN_ZR36060 create mode 100644 baseconfig/CONFIG_VIPERBOARD_ADC create mode 100644 baseconfig/CONFIG_VIRTIO_BALLOON create mode 100644 baseconfig/CONFIG_VIRTIO_BLK create mode 100644 baseconfig/CONFIG_VIRTIO_CONSOLE create mode 100644 baseconfig/CONFIG_VIRTIO_INPUT create mode 100644 baseconfig/CONFIG_VIRTIO_MMIO create mode 100644 baseconfig/CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES create mode 100644 baseconfig/CONFIG_VIRTIO_NET create mode 100644 baseconfig/CONFIG_VIRTIO_PCI create mode 100644 baseconfig/CONFIG_VIRTIO_PCI_LEGACY create mode 100644 baseconfig/CONFIG_VIRTIO_VSOCKETS create mode 100644 baseconfig/CONFIG_VIRTUALIZATION create mode 100644 baseconfig/CONFIG_VIRT_DRIVERS create mode 100644 baseconfig/CONFIG_VITESSE_PHY create mode 100644 baseconfig/CONFIG_VLAN_8021Q create mode 100644 baseconfig/CONFIG_VLAN_8021Q_GVRP create mode 100644 baseconfig/CONFIG_VLAN_8021Q_MVRP create mode 100644 baseconfig/CONFIG_VLSI_FIR create mode 100644 baseconfig/CONFIG_VME_BUS create mode 100644 baseconfig/CONFIG_VMWARE_BALLOON create mode 100644 baseconfig/CONFIG_VMWARE_PVSCSI create mode 100644 baseconfig/CONFIG_VMXNET3 create mode 100644 baseconfig/CONFIG_VORTEX create mode 100644 baseconfig/CONFIG_VSOCKETS create mode 100644 baseconfig/CONFIG_VT create mode 100644 baseconfig/CONFIG_VT6655 create mode 100644 baseconfig/CONFIG_VT6656 create mode 100644 baseconfig/CONFIG_VT_CONSOLE create mode 100644 baseconfig/CONFIG_VT_HW_CONSOLE_BINDING create mode 100644 baseconfig/CONFIG_VXFS_FS create mode 100644 baseconfig/CONFIG_VXGE create mode 100644 baseconfig/CONFIG_VXGE_DEBUG_TRACE_ALL create mode 100644 baseconfig/CONFIG_VXLAN create mode 100644 baseconfig/CONFIG_VZ89X create mode 100644 baseconfig/CONFIG_W1 create mode 100644 baseconfig/CONFIG_W1_CON create mode 100644 baseconfig/CONFIG_W1_MASTER_DS1WM create mode 100644 baseconfig/CONFIG_W1_MASTER_DS2482 create mode 100644 baseconfig/CONFIG_W1_MASTER_DS2490 create mode 100644 baseconfig/CONFIG_W1_MASTER_GPIO create mode 100644 baseconfig/CONFIG_W1_MASTER_MATROX create mode 100644 baseconfig/CONFIG_W1_SLAVE_BQ27000 create mode 100644 baseconfig/CONFIG_W1_SLAVE_DS2406 create mode 100644 baseconfig/CONFIG_W1_SLAVE_DS2408 create mode 100644 baseconfig/CONFIG_W1_SLAVE_DS2408_READBACK create mode 100644 baseconfig/CONFIG_W1_SLAVE_DS2413 create mode 100644 baseconfig/CONFIG_W1_SLAVE_DS2423 create mode 100644 baseconfig/CONFIG_W1_SLAVE_DS2431 create mode 100644 baseconfig/CONFIG_W1_SLAVE_DS2433 create mode 100644 baseconfig/CONFIG_W1_SLAVE_DS2433_CRC create mode 100644 baseconfig/CONFIG_W1_SLAVE_DS2760 create mode 100644 baseconfig/CONFIG_W1_SLAVE_DS2780 create mode 100644 baseconfig/CONFIG_W1_SLAVE_DS2781 create mode 100644 baseconfig/CONFIG_W1_SLAVE_DS28E04 create mode 100644 baseconfig/CONFIG_W1_SLAVE_SMEM create mode 100644 baseconfig/CONFIG_W1_SLAVE_THERM create mode 100644 baseconfig/CONFIG_W83627HF_WDT create mode 100644 baseconfig/CONFIG_W83877F_WDT create mode 100644 baseconfig/CONFIG_W83977F_WDT create mode 100644 baseconfig/CONFIG_WAFER_WDT create mode 100644 baseconfig/CONFIG_WAN create mode 100644 baseconfig/CONFIG_WATCHDOG create mode 100644 baseconfig/CONFIG_WATCHDOG_CORE create mode 100644 baseconfig/CONFIG_WATCHDOG_NOWAYOUT create mode 100644 baseconfig/CONFIG_WATCHDOG_PRETIMEOUT_GOV create mode 100644 baseconfig/CONFIG_WATCHDOG_SYSFS create mode 100644 baseconfig/CONFIG_WCN36XX create mode 100644 baseconfig/CONFIG_WCN36XX_DEBUGFS create mode 100644 baseconfig/CONFIG_WDAT_WDT create mode 100644 baseconfig/CONFIG_WDTPCI create mode 100644 baseconfig/CONFIG_WIL6210 create mode 100644 baseconfig/CONFIG_WIL6210_ISR_COR create mode 100644 baseconfig/CONFIG_WIL6210_TRACING create mode 100644 baseconfig/CONFIG_WILC1000_SDIO create mode 100644 baseconfig/CONFIG_WILC1000_SPI create mode 100644 baseconfig/CONFIG_WILINK_PLATFORM_DATA create mode 100644 baseconfig/CONFIG_WIMAX create mode 100644 baseconfig/CONFIG_WINBOND_840 create mode 100644 baseconfig/CONFIG_WINBOND_FIR create mode 100644 baseconfig/CONFIG_WIRELESS create mode 100644 baseconfig/CONFIG_WIRELESS_EXT create mode 100644 baseconfig/CONFIG_WIZNET_W5100 create mode 100644 baseconfig/CONFIG_WIZNET_W5100_SPI create mode 100644 baseconfig/CONFIG_WIZNET_W5300 create mode 100644 baseconfig/CONFIG_WL1251 create mode 100644 baseconfig/CONFIG_WL1251_SDIO create mode 100644 baseconfig/CONFIG_WL1251_SPI create mode 100644 baseconfig/CONFIG_WL12XX create mode 100644 baseconfig/CONFIG_WL18XX create mode 100644 baseconfig/CONFIG_WLAN create mode 100644 baseconfig/CONFIG_WLAN_VENDOR_ADMTEK create mode 100644 baseconfig/CONFIG_WLAN_VENDOR_ATH create mode 100644 baseconfig/CONFIG_WLAN_VENDOR_ATMEL create mode 100644 baseconfig/CONFIG_WLAN_VENDOR_BROADCOM create mode 100644 baseconfig/CONFIG_WLAN_VENDOR_CISCO create mode 100644 baseconfig/CONFIG_WLAN_VENDOR_INTEL create mode 100644 baseconfig/CONFIG_WLAN_VENDOR_INTERSIL create mode 100644 baseconfig/CONFIG_WLAN_VENDOR_MARVELL create mode 100644 baseconfig/CONFIG_WLAN_VENDOR_MEDIATEK create mode 100644 baseconfig/CONFIG_WLAN_VENDOR_RALINK create mode 100644 baseconfig/CONFIG_WLAN_VENDOR_REALTEK create mode 100644 baseconfig/CONFIG_WLAN_VENDOR_RSI create mode 100644 baseconfig/CONFIG_WLAN_VENDOR_ST create mode 100644 baseconfig/CONFIG_WLAN_VENDOR_TI create mode 100644 baseconfig/CONFIG_WLAN_VENDOR_ZYDAS create mode 100644 baseconfig/CONFIG_WLCORE create mode 100644 baseconfig/CONFIG_WLCORE_SDIO create mode 100644 baseconfig/CONFIG_WLCORE_SPI create mode 100644 baseconfig/CONFIG_WM831X_POWER create mode 100644 baseconfig/CONFIG_WM831X_WATCHDOG create mode 100644 baseconfig/CONFIG_WM8350_POWER create mode 100644 baseconfig/CONFIG_WM8350_WATCHDOG create mode 100644 baseconfig/CONFIG_WQ_POWER_EFFICIENT_DEFAULT create mode 100644 baseconfig/CONFIG_WQ_WATCHDOG create mode 100644 baseconfig/CONFIG_X25 create mode 100644 baseconfig/CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK create mode 100644 baseconfig/CONFIG_X86_PTDUMP create mode 100644 baseconfig/CONFIG_XFRM create mode 100644 baseconfig/CONFIG_XFRM_MIGRATE create mode 100644 baseconfig/CONFIG_XFRM_STATISTICS create mode 100644 baseconfig/CONFIG_XFRM_SUB_POLICY create mode 100644 baseconfig/CONFIG_XFRM_USER create mode 100644 baseconfig/CONFIG_XFS_DEBUG create mode 100644 baseconfig/CONFIG_XFS_FS create mode 100644 baseconfig/CONFIG_XFS_POSIX_ACL create mode 100644 baseconfig/CONFIG_XFS_QUOTA create mode 100644 baseconfig/CONFIG_XFS_RT create mode 100644 baseconfig/CONFIG_XFS_WARN create mode 100644 baseconfig/CONFIG_XILINX_DMA create mode 100644 baseconfig/CONFIG_XILINX_GMII2RGMII create mode 100644 baseconfig/CONFIG_XILINX_WATCHDOG create mode 100644 baseconfig/CONFIG_XILLYBUS create mode 100644 baseconfig/CONFIG_XILLYBUS_OF create mode 100644 baseconfig/CONFIG_XILLYBUS_PCIE create mode 100644 baseconfig/CONFIG_XZ_DEC create mode 100644 baseconfig/CONFIG_XZ_DEC_IA64 create mode 100644 baseconfig/CONFIG_XZ_DEC_POWERPC create mode 100644 baseconfig/CONFIG_XZ_DEC_SPARC create mode 100644 baseconfig/CONFIG_XZ_DEC_TEST create mode 100644 baseconfig/CONFIG_XZ_DEC_X86 create mode 100644 baseconfig/CONFIG_YAM create mode 100644 baseconfig/CONFIG_YELLOWFIN create mode 100644 baseconfig/CONFIG_YENTA create mode 100644 baseconfig/CONFIG_Z3FOLD create mode 100644 baseconfig/CONFIG_ZBUD create mode 100644 baseconfig/CONFIG_ZD1211RW create mode 100644 baseconfig/CONFIG_ZD1211RW_DEBUG create mode 100644 baseconfig/CONFIG_ZEROPLUS_FF create mode 100644 baseconfig/CONFIG_ZIIRAVE_WATCHDOG create mode 100644 baseconfig/CONFIG_ZISOFS create mode 100644 baseconfig/CONFIG_ZLIB_DEFLATE create mode 100644 baseconfig/CONFIG_ZLIB_INFLATE create mode 100644 baseconfig/CONFIG_ZPA2326 create mode 100644 baseconfig/CONFIG_ZRAM create mode 100644 baseconfig/CONFIG_ZSMALLOC create mode 100644 baseconfig/CONFIG_ZSMALLOC_STAT create mode 100644 baseconfig/CONFIG_ZSWAP create mode 100644 baseconfig/arm/CONFIG_AFFS_FS create mode 100644 baseconfig/arm/CONFIG_AGP create mode 100644 baseconfig/arm/CONFIG_AHCI_MVEBU create mode 100644 baseconfig/arm/CONFIG_AHCI_TEGRA create mode 100644 baseconfig/arm/CONFIG_ARCH_BCM create mode 100644 baseconfig/arm/CONFIG_ARCH_BCM2835 create mode 100644 baseconfig/arm/CONFIG_ARCH_BCM_21664 create mode 100644 baseconfig/arm/CONFIG_ARCH_BCM_23550 create mode 100644 baseconfig/arm/CONFIG_ARCH_BCM_281XX create mode 100644 baseconfig/arm/CONFIG_ARCH_BCM_5301X create mode 100644 baseconfig/arm/CONFIG_ARCH_BCM_53573 create mode 100644 baseconfig/arm/CONFIG_ARCH_BCM_63XX create mode 100644 baseconfig/arm/CONFIG_ARCH_BCM_CYGNUS create mode 100644 baseconfig/arm/CONFIG_ARCH_BCM_NSP create mode 100644 baseconfig/arm/CONFIG_ARCH_BERLIN create mode 100644 baseconfig/arm/CONFIG_ARCH_BRCMSTB create mode 100644 baseconfig/arm/CONFIG_ARCH_MESON create mode 100644 baseconfig/arm/CONFIG_ARCH_MVEBU create mode 100644 baseconfig/arm/CONFIG_ARCH_ROCKCHIP create mode 100644 baseconfig/arm/CONFIG_ARCH_VEXPRESS create mode 100644 baseconfig/arm/CONFIG_ARMADA_THERMAL create mode 100644 baseconfig/arm/CONFIG_ARM_AMBA create mode 100644 baseconfig/arm/CONFIG_ARM_ARCH_TIMER create mode 100644 baseconfig/arm/CONFIG_ARM_ARCH_TIMER_EVTSTREAM create mode 100644 baseconfig/arm/CONFIG_ARM_BIG_LITTLE_CPUFREQ create mode 100644 baseconfig/arm/CONFIG_ARM_BIG_LITTLE_CPUIDLE create mode 100644 baseconfig/arm/CONFIG_ARM_CCI create mode 100644 baseconfig/arm/CONFIG_ARM_CCI400_PMU create mode 100644 baseconfig/arm/CONFIG_ARM_CCI5xx_PMU create mode 100644 baseconfig/arm/CONFIG_ARM_CCN create mode 100644 baseconfig/arm/CONFIG_ARM_CHARLCD create mode 100644 baseconfig/arm/CONFIG_ARM_CPUIDLE create mode 100644 baseconfig/arm/CONFIG_ARM_CRYPTO create mode 100644 baseconfig/arm/CONFIG_ARM_DMA_IOMMU_ALIGNMENT create mode 100644 baseconfig/arm/CONFIG_ARM_DMA_USE_IOMMU create mode 100644 baseconfig/arm/CONFIG_ARM_DT_BL_CPUFREQ create mode 100644 baseconfig/arm/CONFIG_ARM_GIC create mode 100644 baseconfig/arm/CONFIG_ARM_GIC_V2M create mode 100644 baseconfig/arm/CONFIG_ARM_GIC_V3 create mode 100644 baseconfig/arm/CONFIG_ARM_GIC_V3_ITS create mode 100644 baseconfig/arm/CONFIG_ARM_GLOBAL_TIMER create mode 100644 baseconfig/arm/CONFIG_ARM_MHU create mode 100644 baseconfig/arm/CONFIG_ARM_PL172_MPMC create mode 100644 baseconfig/arm/CONFIG_ARM_PMU create mode 100644 baseconfig/arm/CONFIG_ARM_PSCI create mode 100644 baseconfig/arm/CONFIG_ARM_PSCI_CHECKER create mode 100644 baseconfig/arm/CONFIG_ARM_PTDUMP create mode 100644 baseconfig/arm/CONFIG_ARM_RK3399_DMC_DEVFREQ create mode 100644 baseconfig/arm/CONFIG_ARM_SCPI_POWER_DOMAIN create mode 100644 baseconfig/arm/CONFIG_ARM_SCPI_PROTOCOL create mode 100644 baseconfig/arm/CONFIG_ARM_SMMU create mode 100644 baseconfig/arm/CONFIG_ARM_SP805_WATCHDOG create mode 100644 baseconfig/arm/CONFIG_ARM_TEGRA124_CPUFREQ create mode 100644 baseconfig/arm/CONFIG_ARM_TEGRA20_CPUFREQ create mode 100644 baseconfig/arm/CONFIG_ARM_TEGRA_DEVFREQ create mode 100644 baseconfig/arm/CONFIG_ARM_TIMER_SP804 create mode 100644 baseconfig/arm/CONFIG_ASYMMETRIC_KEY_TYPE create mode 100644 baseconfig/arm/CONFIG_ATALK create mode 100644 baseconfig/arm/CONFIG_ATM_DRIVERS create mode 100644 baseconfig/arm/CONFIG_BACKLIGHT_GENERIC create mode 100644 baseconfig/arm/CONFIG_BACKLIGHT_GPIO create mode 100644 baseconfig/arm/CONFIG_BACKLIGHT_PWM create mode 100644 baseconfig/arm/CONFIG_BCM2835_MBOX create mode 100644 baseconfig/arm/CONFIG_BCM2835_WDT create mode 100644 baseconfig/arm/CONFIG_BEFS_FS create mode 100644 baseconfig/arm/CONFIG_BIG_LITTLE create mode 100644 baseconfig/arm/CONFIG_BLK_DEV_3W_XXXX_RAID create mode 100644 baseconfig/arm/CONFIG_BLK_DEV_DAC960 create mode 100644 baseconfig/arm/CONFIG_CACHE_FEROCEON_L2 create mode 100644 baseconfig/arm/CONFIG_CACHE_FEROCEON_L2_WRITETHROUGH create mode 100644 baseconfig/arm/CONFIG_CADENCE_WATCHDOG create mode 100644 baseconfig/arm/CONFIG_CC_STACKPROTECTOR create mode 100644 baseconfig/arm/CONFIG_CC_STACKPROTECTOR_NONE create mode 100644 baseconfig/arm/CONFIG_CHECKPOINT_RESTORE create mode 100644 baseconfig/arm/CONFIG_CLKSRC_VERSATILE create mode 100644 baseconfig/arm/CONFIG_CLK_SP810 create mode 100644 baseconfig/arm/CONFIG_CLK_VEXPRESS_OSC create mode 100644 baseconfig/arm/CONFIG_CLOCK_THERMAL create mode 100644 baseconfig/arm/CONFIG_CMA create mode 100644 baseconfig/arm/CONFIG_CMA_ALIGNMENT create mode 100644 baseconfig/arm/CONFIG_CMA_AREAS create mode 100644 baseconfig/arm/CONFIG_CMA_DEBUG create mode 100644 baseconfig/arm/CONFIG_CMA_DEBUGFS create mode 100644 baseconfig/arm/CONFIG_CMA_SIZE_MBYTES create mode 100644 baseconfig/arm/CONFIG_CMA_SIZE_SEL_MAX create mode 100644 baseconfig/arm/CONFIG_CMA_SIZE_SEL_MBYTES create mode 100644 baseconfig/arm/CONFIG_CMA_SIZE_SEL_MIN create mode 100644 baseconfig/arm/CONFIG_CMA_SIZE_SEL_PERCENTAGE create mode 100644 baseconfig/arm/CONFIG_CODA_FS create mode 100644 baseconfig/arm/CONFIG_COMMON_CLK create mode 100644 baseconfig/arm/CONFIG_COMMON_CLK_PWM create mode 100644 baseconfig/arm/CONFIG_COMMON_CLK_RK808 create mode 100644 baseconfig/arm/CONFIG_COMMON_CLK_SCPI create mode 100644 baseconfig/arm/CONFIG_COMMON_CLK_SI570 create mode 100644 baseconfig/arm/CONFIG_COMMON_CLK_VERSATILE create mode 100644 baseconfig/arm/CONFIG_CORESIGHT create mode 100644 baseconfig/arm/CONFIG_CPUFREQ_DT create mode 100644 baseconfig/arm/CONFIG_CPUFREQ_DT_PLATDEV create mode 100644 baseconfig/arm/CONFIG_CPU_BIG_ENDIAN create mode 100644 baseconfig/arm/CONFIG_CPU_THERMAL create mode 100644 baseconfig/arm/CONFIG_CRYPTO_AES_ARM create mode 100644 baseconfig/arm/CONFIG_CRYPTO_AES_ARM_BS create mode 100644 baseconfig/arm/CONFIG_CRYPTO_CRC32_ARM64_CE create mode 100644 baseconfig/arm/CONFIG_CRYPTO_CRC32_ARM_CE create mode 100644 baseconfig/arm/CONFIG_CRYPTO_CRCT10DIF_ARM64_CE create mode 100644 baseconfig/arm/CONFIG_CRYPTO_CRCT10DIF_ARM_CE create mode 100644 baseconfig/arm/CONFIG_CRYPTO_CRYPTD create mode 100644 baseconfig/arm/CONFIG_CRYPTO_DEV_MARVELL_CESA create mode 100644 baseconfig/arm/CONFIG_CRYPTO_DEV_MV_CESA create mode 100644 baseconfig/arm/CONFIG_CRYPTO_DEV_ROCKCHIP create mode 100644 baseconfig/arm/CONFIG_CRYPTO_SHA1_ARM create mode 100644 baseconfig/arm/CONFIG_CRYPTO_SHA1_ARM_NEON create mode 100644 baseconfig/arm/CONFIG_CRYPTO_SHA256_ARM create mode 100644 baseconfig/arm/CONFIG_CRYPTO_SHA256_ARM64 create mode 100644 baseconfig/arm/CONFIG_CRYPTO_SHA512_ARM create mode 100644 baseconfig/arm/CONFIG_CRYPTO_SHA512_ARM64 create mode 100644 baseconfig/arm/CONFIG_CUSE create mode 100644 baseconfig/arm/CONFIG_DEVFREQ_EVENT_ROCKCHIP_DFI create mode 100644 baseconfig/arm/CONFIG_DEVFREQ_THERMAL create mode 100644 baseconfig/arm/CONFIG_DEV_APPLETALK create mode 100644 baseconfig/arm/CONFIG_DMA_BCM2835 create mode 100644 baseconfig/arm/CONFIG_DMA_CMA create mode 100644 baseconfig/arm/CONFIG_DMA_OF create mode 100644 baseconfig/arm/CONFIG_DMA_VIRTUAL_CHANNELS create mode 100644 baseconfig/arm/CONFIG_DRM_ANALOGIX_DP create mode 100644 baseconfig/arm/CONFIG_DRM_ARMADA create mode 100644 baseconfig/arm/CONFIG_DRM_DUMB_VGA_DAC create mode 100644 baseconfig/arm/CONFIG_DRM_HDLCD create mode 100644 baseconfig/arm/CONFIG_DRM_HDLCD_SHOW_UNDERRUN create mode 100644 baseconfig/arm/CONFIG_DRM_MALI_DISPLAY create mode 100644 baseconfig/arm/CONFIG_DRM_PANEL create mode 100644 baseconfig/arm/CONFIG_DRM_PANEL_LG_LG4573 create mode 100644 baseconfig/arm/CONFIG_DRM_PANEL_PANASONIC_VVX10F034N00 create mode 100644 baseconfig/arm/CONFIG_DRM_PANEL_SAMSUNG_LD9040 create mode 100644 baseconfig/arm/CONFIG_DRM_PANEL_SAMSUNG_S6E8AA0 create mode 100644 baseconfig/arm/CONFIG_DRM_PANEL_SHARP_LQ101R1SX01 create mode 100644 baseconfig/arm/CONFIG_DRM_PANEL_SHARP_LS043T1LE01 create mode 100644 baseconfig/arm/CONFIG_DRM_PANEL_SIMPLE create mode 100644 baseconfig/arm/CONFIG_DRM_ROCKCHIP create mode 100644 baseconfig/arm/CONFIG_DRM_TEGRA create mode 100644 baseconfig/arm/CONFIG_DRM_TEGRA_DEBUG create mode 100644 baseconfig/arm/CONFIG_DRM_TEGRA_STAGING create mode 100644 baseconfig/arm/CONFIG_DRM_VC4 create mode 100644 baseconfig/arm/CONFIG_DRM_VMWGFX create mode 100644 baseconfig/arm/CONFIG_DTC create mode 100644 baseconfig/arm/CONFIG_DWMAC_IPQ806X create mode 100644 baseconfig/arm/CONFIG_DWMAC_MESON create mode 100644 baseconfig/arm/CONFIG_DWMAC_ROCKCHIP create mode 100644 baseconfig/arm/CONFIG_DW_WATCHDOG create mode 100644 baseconfig/arm/CONFIG_EARLY_PRINTK create mode 100644 baseconfig/arm/CONFIG_EDAC_MV64X60 create mode 100644 baseconfig/arm/CONFIG_EEPROM_AT25 create mode 100644 baseconfig/arm/CONFIG_EFI create mode 100644 baseconfig/arm/CONFIG_EFIVAR_FS create mode 100644 baseconfig/arm/CONFIG_EFI_BOOTLOADER_CONTROL create mode 100644 baseconfig/arm/CONFIG_EFI_CAPSULE_LOADER create mode 100644 baseconfig/arm/CONFIG_EFI_VARS create mode 100644 baseconfig/arm/CONFIG_EFI_VARS_PSTORE create mode 100644 baseconfig/arm/CONFIG_EFI_VARS_PSTORE_DEFAULT_DISABLE create mode 100644 baseconfig/arm/CONFIG_EMAC_ROCKCHIP create mode 100644 baseconfig/arm/CONFIG_EXTCON create mode 100644 baseconfig/arm/CONFIG_EXTCON_ADC_JACK create mode 100644 baseconfig/arm/CONFIG_EXTCON_GPIO create mode 100644 baseconfig/arm/CONFIG_EXTCON_MAX3355 create mode 100644 baseconfig/arm/CONFIG_EXTCON_RT8973A create mode 100644 baseconfig/arm/CONFIG_EXTCON_SM5502 create mode 100644 baseconfig/arm/CONFIG_EXTCON_USB_GPIO create mode 100644 baseconfig/arm/CONFIG_FB_ARMCLCD create mode 100644 baseconfig/arm/CONFIG_FB_DA8XX create mode 100644 baseconfig/arm/CONFIG_FB_MODE_HELPERS create mode 100644 baseconfig/arm/CONFIG_FB_SIMPLE create mode 100644 baseconfig/arm/CONFIG_FB_SSD1307 create mode 100644 baseconfig/arm/CONFIG_FIREWIRE create mode 100644 baseconfig/arm/CONFIG_FORCE_MAX_ZONEORDER create mode 100644 baseconfig/arm/CONFIG_FSL_XGMAC_MDIO create mode 100644 baseconfig/arm/CONFIG_FUSION create mode 100644 baseconfig/arm/CONFIG_GENERIC_PHY create mode 100644 baseconfig/arm/CONFIG_GENERIC_PINCONF create mode 100644 baseconfig/arm/CONFIG_GPIO_74XX_MMIO create mode 100644 baseconfig/arm/CONFIG_GPIO_DEVRES create mode 100644 baseconfig/arm/CONFIG_GPIO_DWAPB create mode 100644 baseconfig/arm/CONFIG_GPIO_GENERIC create mode 100644 baseconfig/arm/CONFIG_GPIO_GENERIC_PLATFORM create mode 100644 baseconfig/arm/CONFIG_GPIO_MVEBU create mode 100644 baseconfig/arm/CONFIG_GPIO_PCA953X create mode 100644 baseconfig/arm/CONFIG_GPIO_PCA953X_IRQ create mode 100644 baseconfig/arm/CONFIG_GPIO_PL061 create mode 100644 baseconfig/arm/CONFIG_GPIO_TEGRA create mode 100644 baseconfig/arm/CONFIG_GPIO_WATCHDOG create mode 100644 baseconfig/arm/CONFIG_HAMRADIO create mode 100644 baseconfig/arm/CONFIG_HAVE_PERF_REGS create mode 100644 baseconfig/arm/CONFIG_HAVE_PERF_USER_STACK_DUMP create mode 100644 baseconfig/arm/CONFIG_HERMES create mode 100644 baseconfig/arm/CONFIG_HISILICON_IRQ_MBIGEN create mode 100644 baseconfig/arm/CONFIG_HW_PERF_EVENTS create mode 100644 baseconfig/arm/CONFIG_HW_RANDOM_BCM2835 create mode 100644 baseconfig/arm/CONFIG_HW_RANDOM_MESON create mode 100644 baseconfig/arm/CONFIG_I2C create mode 100644 baseconfig/arm/CONFIG_I2C_ARB_GPIO_CHALLENGE create mode 100644 baseconfig/arm/CONFIG_I2C_BCM2835 create mode 100644 baseconfig/arm/CONFIG_I2C_BOARDINFO create mode 100644 baseconfig/arm/CONFIG_I2C_DESIGNWARE_CORE create mode 100644 baseconfig/arm/CONFIG_I2C_DESIGNWARE_PLATFORM create mode 100644 baseconfig/arm/CONFIG_I2C_GPIO create mode 100644 baseconfig/arm/CONFIG_I2C_MESON create mode 100644 baseconfig/arm/CONFIG_I2C_MUX create mode 100644 baseconfig/arm/CONFIG_I2C_MUX_GPIO create mode 100644 baseconfig/arm/CONFIG_I2C_MUX_PCA9541 create mode 100644 baseconfig/arm/CONFIG_I2C_MUX_PCA954x create mode 100644 baseconfig/arm/CONFIG_I2C_MUX_PINCTRL create mode 100644 baseconfig/arm/CONFIG_I2C_MUX_REG create mode 100644 baseconfig/arm/CONFIG_I2C_MV64XXX create mode 100644 baseconfig/arm/CONFIG_I2C_NOMADIK create mode 100644 baseconfig/arm/CONFIG_I2C_PXA create mode 100644 baseconfig/arm/CONFIG_I2C_PXA_SLAVE create mode 100644 baseconfig/arm/CONFIG_I2C_RK3X create mode 100644 baseconfig/arm/CONFIG_I2C_TEGRA create mode 100644 baseconfig/arm/CONFIG_I2C_VERSATILE create mode 100644 baseconfig/arm/CONFIG_I2O create mode 100644 baseconfig/arm/CONFIG_IIO_ST_PRESS create mode 100644 baseconfig/arm/CONFIG_IIO_ST_PRESS_I2C create mode 100644 baseconfig/arm/CONFIG_IIO_ST_PRESS_SPI create mode 100644 baseconfig/arm/CONFIG_IIO_SYSFS_TRIGGER create mode 100644 baseconfig/arm/CONFIG_IMX_IPUV3_CORE create mode 100644 baseconfig/arm/CONFIG_INPUT_MATRIXKMAP create mode 100644 baseconfig/arm/CONFIG_INPUT_PWM_BEEPER create mode 100644 baseconfig/arm/CONFIG_INPUT_SOC_BUTTON_ARRAY create mode 100644 baseconfig/arm/CONFIG_IOMMU_IO_PGTABLE_ARMV7S create mode 100644 baseconfig/arm/CONFIG_IOMMU_IO_PGTABLE_LPAE_SELFTEST create mode 100644 baseconfig/arm/CONFIG_IPQ_GCC_4019 create mode 100644 baseconfig/arm/CONFIG_IPQ_GCC_806X create mode 100644 baseconfig/arm/CONFIG_IPQ_LCC_806X create mode 100644 baseconfig/arm/CONFIG_IP_DCCP create mode 100644 baseconfig/arm/CONFIG_IRQ_DOMAIN_DEBUG create mode 100644 baseconfig/arm/CONFIG_IR_MESON create mode 100644 baseconfig/arm/CONFIG_ISDN create mode 100644 baseconfig/arm/CONFIG_IWMMXT create mode 100644 baseconfig/arm/CONFIG_KERNEL_MODE_NEON create mode 100644 baseconfig/arm/CONFIG_KEYBOARD_BCM create mode 100644 baseconfig/arm/CONFIG_KEYBOARD_GPIO create mode 100644 baseconfig/arm/CONFIG_KEYBOARD_GPIO_POLLED create mode 100644 baseconfig/arm/CONFIG_KEYBOARD_TEGRA create mode 100644 baseconfig/arm/CONFIG_KUSER_HELPERS create mode 100644 baseconfig/arm/CONFIG_LATTICE_ECP3_CONFIG create mode 100644 baseconfig/arm/CONFIG_LOCK_STAT create mode 100644 baseconfig/arm/CONFIG_MAILBOX create mode 100644 baseconfig/arm/CONFIG_MDIO_BUS_MUX create mode 100644 baseconfig/arm/CONFIG_MDIO_BUS_MUX_GPIO create mode 100644 baseconfig/arm/CONFIG_MDIO_BUS_MUX_MMIOREG create mode 100644 baseconfig/arm/CONFIG_MDIO_GPIO create mode 100644 baseconfig/arm/CONFIG_MESON_EFUSE create mode 100644 baseconfig/arm/CONFIG_MESON_SM create mode 100644 baseconfig/arm/CONFIG_MFD_AC100 create mode 100644 baseconfig/arm/CONFIG_MFD_NVEC create mode 100644 baseconfig/arm/CONFIG_MFD_PM8XXX create mode 100644 baseconfig/arm/CONFIG_MFD_RK808 create mode 100644 baseconfig/arm/CONFIG_MFD_SPMI_PMIC create mode 100644 baseconfig/arm/CONFIG_MFD_SUN4I_GPADC create mode 100644 baseconfig/arm/CONFIG_MFD_SYSCON create mode 100644 baseconfig/arm/CONFIG_MFD_VEXPRESS_SYSREG create mode 100644 baseconfig/arm/CONFIG_MFD_WL1273_CORE create mode 100644 baseconfig/arm/CONFIG_MMC_ARMMMCI create mode 100644 baseconfig/arm/CONFIG_MMC_DW create mode 100644 baseconfig/arm/CONFIG_MMC_DW_EXYNOS create mode 100644 baseconfig/arm/CONFIG_MMC_DW_K3 create mode 100644 baseconfig/arm/CONFIG_MMC_DW_PCI create mode 100644 baseconfig/arm/CONFIG_MMC_DW_PLTFM create mode 100644 baseconfig/arm/CONFIG_MMC_DW_ROCKCHIP create mode 100644 baseconfig/arm/CONFIG_MMC_MVSDIO create mode 100644 baseconfig/arm/CONFIG_MMC_QCOM_DML create mode 100644 baseconfig/arm/CONFIG_MMC_SDHCI_IPROC create mode 100644 baseconfig/arm/CONFIG_MMC_SDHCI_OF_ARASAN create mode 100644 baseconfig/arm/CONFIG_MMC_SDHCI_PXAV3 create mode 100644 baseconfig/arm/CONFIG_MMC_SDHCI_TEGRA create mode 100644 baseconfig/arm/CONFIG_MMC_SPI create mode 100644 baseconfig/arm/CONFIG_MTD_AFS_PARTS create mode 100644 baseconfig/arm/CONFIG_MTD_BLKDEVS create mode 100644 baseconfig/arm/CONFIG_MTD_BLOCK create mode 100644 baseconfig/arm/CONFIG_MTD_CFI create mode 100644 baseconfig/arm/CONFIG_MTD_CFI_ADV_OPTIONS create mode 100644 baseconfig/arm/CONFIG_MTD_CFI_AMDSTD create mode 100644 baseconfig/arm/CONFIG_MTD_CFI_INTELEXT create mode 100644 baseconfig/arm/CONFIG_MTD_CFI_STAA create mode 100644 baseconfig/arm/CONFIG_MTD_LPDDR2_NVM create mode 100644 baseconfig/arm/CONFIG_MTD_OF_PARTS create mode 100644 baseconfig/arm/CONFIG_MTD_PHYSMAP create mode 100644 baseconfig/arm/CONFIG_MTD_PHYSMAP_COMPAT create mode 100644 baseconfig/arm/CONFIG_MTD_PHYSMAP_OF create mode 100644 baseconfig/arm/CONFIG_MTD_PHYSMAP_OF_VERSATILE create mode 100644 baseconfig/arm/CONFIG_MUSB_PIO_ONLY create mode 100644 baseconfig/arm/CONFIG_MV643XX_ETH create mode 100644 baseconfig/arm/CONFIG_MVEBU_CLK_CORE create mode 100644 baseconfig/arm/CONFIG_MVEBU_CLK_COREDIV create mode 100644 baseconfig/arm/CONFIG_MVEBU_DEVBUS create mode 100644 baseconfig/arm/CONFIG_MVEBU_MBUS create mode 100644 baseconfig/arm/CONFIG_MVNETA create mode 100644 baseconfig/arm/CONFIG_MVNETA_BM_ENABLE create mode 100644 baseconfig/arm/CONFIG_MV_XOR create mode 100644 baseconfig/arm/CONFIG_NCP_FS create mode 100644 baseconfig/arm/CONFIG_NET_TULIP create mode 100644 baseconfig/arm/CONFIG_NET_VENDOR_3COM create mode 100644 baseconfig/arm/CONFIG_NET_VENDOR_ADAPTEC create mode 100644 baseconfig/arm/CONFIG_NET_VENDOR_BROCADE create mode 100644 baseconfig/arm/CONFIG_NET_VENDOR_CISCO create mode 100644 baseconfig/arm/CONFIG_NET_VENDOR_DEC create mode 100644 baseconfig/arm/CONFIG_NET_VENDOR_EXAR create mode 100644 baseconfig/arm/CONFIG_NET_VENDOR_MELLANOX create mode 100644 baseconfig/arm/CONFIG_NET_VENDOR_QLOGIC create mode 100644 baseconfig/arm/CONFIG_NET_VENDOR_SUN create mode 100644 baseconfig/arm/CONFIG_NET_VENDOR_WIZNET create mode 100644 baseconfig/arm/CONFIG_NET_VENDOR_XIRCOM create mode 100644 baseconfig/arm/CONFIG_NOUVEAU_PLATFORM_DRIVER create mode 100644 baseconfig/arm/CONFIG_OCFS2_FS create mode 100644 baseconfig/arm/CONFIG_OF create mode 100644 baseconfig/arm/CONFIG_OF_ADDRESS create mode 100644 baseconfig/arm/CONFIG_OF_DYNAMIC create mode 100644 baseconfig/arm/CONFIG_OF_EARLY_FLATTREE create mode 100644 baseconfig/arm/CONFIG_OF_FLATTREE create mode 100644 baseconfig/arm/CONFIG_OF_GPIO create mode 100644 baseconfig/arm/CONFIG_OF_IOMMU create mode 100644 baseconfig/arm/CONFIG_OF_IRQ create mode 100644 baseconfig/arm/CONFIG_OF_MDIO create mode 100644 baseconfig/arm/CONFIG_OF_NET create mode 100644 baseconfig/arm/CONFIG_OF_OVERLAY create mode 100644 baseconfig/arm/CONFIG_OF_PCI create mode 100644 baseconfig/arm/CONFIG_OF_PCI_IRQ create mode 100644 baseconfig/arm/CONFIG_OF_RESERVED_MEM create mode 100644 baseconfig/arm/CONFIG_OF_RESOLVE create mode 100644 baseconfig/arm/CONFIG_OF_UNITTEST create mode 100644 baseconfig/arm/CONFIG_OMAP_GPMC_DEBUG create mode 100644 baseconfig/arm/CONFIG_PARAVIRT create mode 100644 baseconfig/arm/CONFIG_PARAVIRT_TIME_ACCOUNTING create mode 100644 baseconfig/arm/CONFIG_PARPORT create mode 100644 baseconfig/arm/CONFIG_PATA_OF_PLATFORM create mode 100644 baseconfig/arm/CONFIG_PATA_PLATFORM create mode 100644 baseconfig/arm/CONFIG_PCIE_ARMADA_8K create mode 100644 baseconfig/arm/CONFIG_PCIE_DW create mode 100644 baseconfig/arm/CONFIG_PCIE_ROCKCHIP create mode 100644 baseconfig/arm/CONFIG_PCI_AARDVARK create mode 100644 baseconfig/arm/CONFIG_PCI_HOST_GENERIC create mode 100644 baseconfig/arm/CONFIG_PCI_MVEBU create mode 100644 baseconfig/arm/CONFIG_PCI_TEGRA create mode 100644 baseconfig/arm/CONFIG_PCMCIA create mode 100644 baseconfig/arm/CONFIG_PHY_MESON8B_USB2 create mode 100644 baseconfig/arm/CONFIG_PHY_MVEBU_SATA create mode 100644 baseconfig/arm/CONFIG_PHY_QCOM_IPQ806X_SATA create mode 100644 baseconfig/arm/CONFIG_PHY_ROCKCHIP_DP create mode 100644 baseconfig/arm/CONFIG_PHY_ROCKCHIP_EMMC create mode 100644 baseconfig/arm/CONFIG_PHY_ROCKCHIP_INNO_USB2 create mode 100644 baseconfig/arm/CONFIG_PHY_ROCKCHIP_PCIE create mode 100644 baseconfig/arm/CONFIG_PHY_ROCKCHIP_TYPEC create mode 100644 baseconfig/arm/CONFIG_PHY_ROCKCHIP_USB create mode 100644 baseconfig/arm/CONFIG_PHY_SAMSUNG_USB2 create mode 100644 baseconfig/arm/CONFIG_PHY_TEGRA_XUSB create mode 100644 baseconfig/arm/CONFIG_PID_IN_CONTEXTIDR create mode 100644 baseconfig/arm/CONFIG_PINCONF create mode 100644 baseconfig/arm/CONFIG_PINCTRL create mode 100644 baseconfig/arm/CONFIG_PINCTRL_BAYTRAIL create mode 100644 baseconfig/arm/CONFIG_PINCTRL_BROXTON create mode 100644 baseconfig/arm/CONFIG_PINCTRL_CHERRYVIEW create mode 100644 baseconfig/arm/CONFIG_PINCTRL_IPQ4019 create mode 100644 baseconfig/arm/CONFIG_PINCTRL_IPQ8064 create mode 100644 baseconfig/arm/CONFIG_PINCTRL_MVEBU create mode 100644 baseconfig/arm/CONFIG_PINCTRL_SINGLE create mode 100644 baseconfig/arm/CONFIG_PINCTRL_SUNRISEPOINT create mode 100644 baseconfig/arm/CONFIG_PINMUX create mode 100644 baseconfig/arm/CONFIG_PL320_MBOX create mode 100644 baseconfig/arm/CONFIG_PL330_DMA create mode 100644 baseconfig/arm/CONFIG_PLATFORM_MHU create mode 100644 baseconfig/arm/CONFIG_PM_DEVFREQ_EVENT create mode 100644 baseconfig/arm/CONFIG_PM_GENERIC_DOMAINS_OF create mode 100644 baseconfig/arm/CONFIG_PM_OPP create mode 100644 baseconfig/arm/CONFIG_POWER_AVS create mode 100644 baseconfig/arm/CONFIG_POWER_RESET_GPIO create mode 100644 baseconfig/arm/CONFIG_POWER_RESET_GPIO_RESTART create mode 100644 baseconfig/arm/CONFIG_POWER_RESET_RESTART create mode 100644 baseconfig/arm/CONFIG_POWER_RESET_VERSATILE create mode 100644 baseconfig/arm/CONFIG_POWER_RESET_VEXPRESS create mode 100644 baseconfig/arm/CONFIG_PWM create mode 100644 baseconfig/arm/CONFIG_PWM_BCM2835 create mode 100644 baseconfig/arm/CONFIG_PWM_FSL_FTM create mode 100644 baseconfig/arm/CONFIG_PWM_MESON create mode 100644 baseconfig/arm/CONFIG_PWM_ROCKCHIP create mode 100644 baseconfig/arm/CONFIG_PWM_SYSFS create mode 100644 baseconfig/arm/CONFIG_PWM_TEGRA create mode 100644 baseconfig/arm/CONFIG_QCOM_SPMI_IADC create mode 100644 baseconfig/arm/CONFIG_QCOM_SPMI_VADC create mode 100644 baseconfig/arm/CONFIG_QORIQ_THERMAL create mode 100644 baseconfig/arm/CONFIG_QRTR create mode 100644 baseconfig/arm/CONFIG_RASPBERRYPI_FIRMWARE create mode 100644 baseconfig/arm/CONFIG_RASPBERRYPI_POWER create mode 100644 baseconfig/arm/CONFIG_RCU_FANOUT_LEAF create mode 100644 baseconfig/arm/CONFIG_RDS create mode 100644 baseconfig/arm/CONFIG_REGMAP_I2C create mode 100644 baseconfig/arm/CONFIG_REGMAP_SPMI create mode 100644 baseconfig/arm/CONFIG_REGULATOR create mode 100644 baseconfig/arm/CONFIG_REGULATOR_ACT8865 create mode 100644 baseconfig/arm/CONFIG_REGULATOR_AD5398 create mode 100644 baseconfig/arm/CONFIG_REGULATOR_ANATOP create mode 100644 baseconfig/arm/CONFIG_REGULATOR_DA9210 create mode 100644 baseconfig/arm/CONFIG_REGULATOR_DA9211 create mode 100644 baseconfig/arm/CONFIG_REGULATOR_FAN53555 create mode 100644 baseconfig/arm/CONFIG_REGULATOR_FIXED_VOLTAGE create mode 100644 baseconfig/arm/CONFIG_REGULATOR_GPIO create mode 100644 baseconfig/arm/CONFIG_REGULATOR_ISL6271A create mode 100644 baseconfig/arm/CONFIG_REGULATOR_ISL9305 create mode 100644 baseconfig/arm/CONFIG_REGULATOR_LP3971 create mode 100644 baseconfig/arm/CONFIG_REGULATOR_LP3972 create mode 100644 baseconfig/arm/CONFIG_REGULATOR_LP872X create mode 100644 baseconfig/arm/CONFIG_REGULATOR_LP8755 create mode 100644 baseconfig/arm/CONFIG_REGULATOR_LTC3589 create mode 100644 baseconfig/arm/CONFIG_REGULATOR_LTC3676 create mode 100644 baseconfig/arm/CONFIG_REGULATOR_MAX1586 create mode 100644 baseconfig/arm/CONFIG_REGULATOR_MAX8649 create mode 100644 baseconfig/arm/CONFIG_REGULATOR_MAX8660 create mode 100644 baseconfig/arm/CONFIG_REGULATOR_MAX8952 create mode 100644 baseconfig/arm/CONFIG_REGULATOR_MAX8973 create mode 100644 baseconfig/arm/CONFIG_REGULATOR_MT6311 create mode 100644 baseconfig/arm/CONFIG_REGULATOR_PFUZE100 create mode 100644 baseconfig/arm/CONFIG_REGULATOR_PV88060 create mode 100644 baseconfig/arm/CONFIG_REGULATOR_PV88080 create mode 100644 baseconfig/arm/CONFIG_REGULATOR_PV88090 create mode 100644 baseconfig/arm/CONFIG_REGULATOR_PWM create mode 100644 baseconfig/arm/CONFIG_REGULATOR_QCOM_SPMI create mode 100644 baseconfig/arm/CONFIG_REGULATOR_RK808 create mode 100644 baseconfig/arm/CONFIG_REGULATOR_TPS51632 create mode 100644 baseconfig/arm/CONFIG_REGULATOR_TPS62360 create mode 100644 baseconfig/arm/CONFIG_REGULATOR_TPS65023 create mode 100644 baseconfig/arm/CONFIG_REGULATOR_TPS6507X create mode 100644 baseconfig/arm/CONFIG_REGULATOR_TPS6524X create mode 100644 baseconfig/arm/CONFIG_REGULATOR_USERSPACE_CONSUMER create mode 100644 baseconfig/arm/CONFIG_REGULATOR_VEXPRESS create mode 100644 baseconfig/arm/CONFIG_REGULATOR_VIRTUAL_CONSUMER create mode 100644 baseconfig/arm/CONFIG_RESET_CONTROLLER create mode 100644 baseconfig/arm/CONFIG_RESET_GPIO create mode 100644 baseconfig/arm/CONFIG_RFKILL_REGULATOR create mode 100644 baseconfig/arm/CONFIG_ROCKCHIP_ANALOGIX_DP create mode 100644 baseconfig/arm/CONFIG_ROCKCHIP_DW_HDMI create mode 100644 baseconfig/arm/CONFIG_ROCKCHIP_DW_MIPI_DSI create mode 100644 baseconfig/arm/CONFIG_ROCKCHIP_EFUSE create mode 100644 baseconfig/arm/CONFIG_ROCKCHIP_INNO_HDMI create mode 100644 baseconfig/arm/CONFIG_ROCKCHIP_IODOMAIN create mode 100644 baseconfig/arm/CONFIG_ROCKCHIP_IOMMU create mode 100644 baseconfig/arm/CONFIG_ROCKCHIP_MBOX create mode 100644 baseconfig/arm/CONFIG_ROCKCHIP_PM_DOMAINS create mode 100644 baseconfig/arm/CONFIG_ROCKCHIP_SARADC create mode 100644 baseconfig/arm/CONFIG_ROCKCHIP_THERMAL create mode 100644 baseconfig/arm/CONFIG_RTC_DRV_88PM80X create mode 100644 baseconfig/arm/CONFIG_RTC_DRV_AC100 create mode 100644 baseconfig/arm/CONFIG_RTC_DRV_ARMADA38X create mode 100644 baseconfig/arm/CONFIG_RTC_DRV_HYM8563 create mode 100644 baseconfig/arm/CONFIG_RTC_DRV_ISL12057 create mode 100644 baseconfig/arm/CONFIG_RTC_DRV_MAX77686 create mode 100644 baseconfig/arm/CONFIG_RTC_DRV_MV create mode 100644 baseconfig/arm/CONFIG_RTC_DRV_PL031 create mode 100644 baseconfig/arm/CONFIG_RTC_DRV_RK808 create mode 100644 baseconfig/arm/CONFIG_RTC_DRV_S35390A create mode 100644 baseconfig/arm/CONFIG_RTC_DRV_TEGRA create mode 100644 baseconfig/arm/CONFIG_SCHED_MC create mode 100644 baseconfig/arm/CONFIG_SCHED_SMT create mode 100644 baseconfig/arm/CONFIG_SCSI_3W_9XXX create mode 100644 baseconfig/arm/CONFIG_SCSI_3W_SAS create mode 100644 baseconfig/arm/CONFIG_SCSI_AACRAID create mode 100644 baseconfig/arm/CONFIG_SCSI_ACARD create mode 100644 baseconfig/arm/CONFIG_SCSI_AIC79XX create mode 100644 baseconfig/arm/CONFIG_SCSI_AIC7XXX create mode 100644 baseconfig/arm/CONFIG_SCSI_BFA_FC create mode 100644 baseconfig/arm/CONFIG_SCSI_IPS create mode 100644 baseconfig/arm/CONFIG_SCSI_MPT2SAS create mode 100644 baseconfig/arm/CONFIG_SCSI_MPT3SAS create mode 100644 baseconfig/arm/CONFIG_SCSI_PM8001 create mode 100644 baseconfig/arm/CONFIG_SENSORS_ARM_SCPI create mode 100644 baseconfig/arm/CONFIG_SENSORS_IIO_HWMON create mode 100644 baseconfig/arm/CONFIG_SENSORS_VEXPRESS create mode 100644 baseconfig/arm/CONFIG_SERIAL_8250_BCM2835AUX create mode 100644 baseconfig/arm/CONFIG_SERIAL_AMBA_PL011 create mode 100644 baseconfig/arm/CONFIG_SERIAL_AMBA_PL011_CONSOLE create mode 100644 baseconfig/arm/CONFIG_SERIAL_EARLYCON_ARM_SEMIHOST create mode 100644 baseconfig/arm/CONFIG_SERIAL_IFX6X60 create mode 100644 baseconfig/arm/CONFIG_SERIAL_MAX3100 create mode 100644 baseconfig/arm/CONFIG_SERIAL_MAX310X create mode 100644 baseconfig/arm/CONFIG_SERIAL_MESON create mode 100644 baseconfig/arm/CONFIG_SERIAL_MESON_CONSOLE create mode 100644 baseconfig/arm/CONFIG_SERIAL_MVEBU_CONSOLE create mode 100644 baseconfig/arm/CONFIG_SERIAL_MVEBU_UART create mode 100644 baseconfig/arm/CONFIG_SERIAL_OF_PLATFORM create mode 100644 baseconfig/arm/CONFIG_SERIAL_TEGRA create mode 100644 baseconfig/arm/CONFIG_SERIO_AMBAKMI create mode 100644 baseconfig/arm/CONFIG_SMC911X create mode 100644 baseconfig/arm/CONFIG_SMC91X create mode 100644 baseconfig/arm/CONFIG_SND_BCM2835_SOC_I2S create mode 100644 baseconfig/arm/CONFIG_SND_HDA_TEGRA create mode 100644 baseconfig/arm/CONFIG_SND_SOC_PCM512x create mode 100644 baseconfig/arm/CONFIG_SND_SOC_PCM512x_I2C create mode 100644 baseconfig/arm/CONFIG_SND_SOC_PCM512x_SPI create mode 100644 baseconfig/arm/CONFIG_SND_SOC_ROCKCHIP create mode 100644 baseconfig/arm/CONFIG_SND_SOC_ROCKCHIP_I2S create mode 100644 baseconfig/arm/CONFIG_SND_SOC_ROCKCHIP_MAX98090 create mode 100644 baseconfig/arm/CONFIG_SND_SOC_ROCKCHIP_RT5645 create mode 100644 baseconfig/arm/CONFIG_SND_SOC_ROCKCHIP_SPDIF create mode 100644 baseconfig/arm/CONFIG_SND_SOC_TPA6130A2 create mode 100644 baseconfig/arm/CONFIG_SND_SOC_WM8804 create mode 100644 baseconfig/arm/CONFIG_SND_SOC_WM8804_I2C create mode 100644 baseconfig/arm/CONFIG_SND_SOC_WM8804_SPI create mode 100644 baseconfig/arm/CONFIG_SND_SUN8I_CODEC_ANALOG create mode 100644 baseconfig/arm/CONFIG_SPI create mode 100644 baseconfig/arm/CONFIG_SPI_ARMADA_3700 create mode 100644 baseconfig/arm/CONFIG_SPI_BCM2835 create mode 100644 baseconfig/arm/CONFIG_SPI_BCM2835AUX create mode 100644 baseconfig/arm/CONFIG_SPI_BCM_QSPI create mode 100644 baseconfig/arm/CONFIG_SPI_BITBANG create mode 100644 baseconfig/arm/CONFIG_SPI_CADENCE create mode 100644 baseconfig/arm/CONFIG_SPI_DESIGNWARE create mode 100644 baseconfig/arm/CONFIG_SPI_DW_MID_DMA create mode 100644 baseconfig/arm/CONFIG_SPI_DW_MMIO create mode 100644 baseconfig/arm/CONFIG_SPI_DW_PCI create mode 100644 baseconfig/arm/CONFIG_SPI_GPIO create mode 100644 baseconfig/arm/CONFIG_SPI_MASTER create mode 100644 baseconfig/arm/CONFIG_SPI_MESON_SPIFC create mode 100644 baseconfig/arm/CONFIG_SPI_ORION create mode 100644 baseconfig/arm/CONFIG_SPI_PL022 create mode 100644 baseconfig/arm/CONFIG_SPI_ROCKCHIP create mode 100644 baseconfig/arm/CONFIG_SPI_SPIDEV create mode 100644 baseconfig/arm/CONFIG_SPI_SUN4I create mode 100644 baseconfig/arm/CONFIG_SPI_SUN6I create mode 100644 baseconfig/arm/CONFIG_SPI_TEGRA114 create mode 100644 baseconfig/arm/CONFIG_SPI_TEGRA20_SFLASH create mode 100644 baseconfig/arm/CONFIG_SPI_TEGRA20_SLINK create mode 100644 baseconfig/arm/CONFIG_SPI_ZYNQMP_GQSPI create mode 100644 baseconfig/arm/CONFIG_SPMI create mode 100644 baseconfig/arm/CONFIG_SRAM create mode 100644 baseconfig/arm/CONFIG_SUNXI_RSB create mode 100644 baseconfig/arm/CONFIG_SWIOTLB create mode 100644 baseconfig/arm/CONFIG_SYNC_FILE create mode 100644 baseconfig/arm/CONFIG_SYSV_FS create mode 100644 baseconfig/arm/CONFIG_TCG_TIS_I2C_ATMEL create mode 100644 baseconfig/arm/CONFIG_TCS3472 create mode 100644 baseconfig/arm/CONFIG_TEGRA124_EMC create mode 100644 baseconfig/arm/CONFIG_TEGRA20_APB_DMA create mode 100644 baseconfig/arm/CONFIG_TEGRA_AHB create mode 100644 baseconfig/arm/CONFIG_TEGRA_BPMP create mode 100644 baseconfig/arm/CONFIG_TEGRA_HOST1X create mode 100644 baseconfig/arm/CONFIG_TEGRA_HOST1X_FIREWALL create mode 100644 baseconfig/arm/CONFIG_TEGRA_HSP_MBOX create mode 100644 baseconfig/arm/CONFIG_TEGRA_IOMMU_SMMU create mode 100644 baseconfig/arm/CONFIG_TEGRA_IVC create mode 100644 baseconfig/arm/CONFIG_TEGRA_MC create mode 100644 baseconfig/arm/CONFIG_TEGRA_SOCTHERM create mode 100644 baseconfig/arm/CONFIG_TEGRA_WATCHDOG create mode 100644 baseconfig/arm/CONFIG_THERMAL create mode 100644 baseconfig/arm/CONFIG_THERMAL_GOV_USER_SPACE create mode 100644 baseconfig/arm/CONFIG_THERMAL_OF create mode 100644 baseconfig/arm/CONFIG_TI_DAC7512 create mode 100644 baseconfig/arm/CONFIG_TLAN create mode 100644 baseconfig/arm/CONFIG_TMP006 create mode 100644 baseconfig/arm/CONFIG_TRANSPARENT_HUGEPAGE create mode 100644 baseconfig/arm/CONFIG_TRUSTED_FOUNDATIONS create mode 100644 baseconfig/arm/CONFIG_UFS_FS create mode 100644 baseconfig/arm/CONFIG_USB_AMD5536UDC create mode 100644 baseconfig/arm/CONFIG_USB_BDC_UDC create mode 100644 baseconfig/arm/CONFIG_USB_CONFIGFS create mode 100644 baseconfig/arm/CONFIG_USB_CONFIGFS_ACM create mode 100644 baseconfig/arm/CONFIG_USB_CONFIGFS_ECM create mode 100644 baseconfig/arm/CONFIG_USB_CONFIGFS_ECM_SUBSET create mode 100644 baseconfig/arm/CONFIG_USB_CONFIGFS_EEM create mode 100644 baseconfig/arm/CONFIG_USB_CONFIGFS_F_FS create mode 100644 baseconfig/arm/CONFIG_USB_CONFIGFS_F_HID create mode 100644 baseconfig/arm/CONFIG_USB_CONFIGFS_F_LB_SS create mode 100644 baseconfig/arm/CONFIG_USB_CONFIGFS_F_MIDI create mode 100644 baseconfig/arm/CONFIG_USB_CONFIGFS_F_PRINTER create mode 100644 baseconfig/arm/CONFIG_USB_CONFIGFS_F_TCM create mode 100644 baseconfig/arm/CONFIG_USB_CONFIGFS_F_UAC1 create mode 100644 baseconfig/arm/CONFIG_USB_CONFIGFS_F_UAC2 create mode 100644 baseconfig/arm/CONFIG_USB_CONFIGFS_F_UVC create mode 100644 baseconfig/arm/CONFIG_USB_CONFIGFS_MASS_STORAGE create mode 100644 baseconfig/arm/CONFIG_USB_CONFIGFS_NCM create mode 100644 baseconfig/arm/CONFIG_USB_CONFIGFS_OBEX create mode 100644 baseconfig/arm/CONFIG_USB_CONFIGFS_RNDIS create mode 100644 baseconfig/arm/CONFIG_USB_CONFIGFS_SERIAL create mode 100644 baseconfig/arm/CONFIG_USB_DUMMY_HCD create mode 100644 baseconfig/arm/CONFIG_USB_DWC2 create mode 100644 baseconfig/arm/CONFIG_USB_DWC2_DEBUG create mode 100644 baseconfig/arm/CONFIG_USB_DWC2_DUAL_ROLE create mode 100644 baseconfig/arm/CONFIG_USB_DWC2_PCI create mode 100644 baseconfig/arm/CONFIG_USB_DWC2_TRACK_MISSED_SOFS create mode 100644 baseconfig/arm/CONFIG_USB_DWC3 create mode 100644 baseconfig/arm/CONFIG_USB_DWC3_DUAL_ROLE create mode 100644 baseconfig/arm/CONFIG_USB_DWC3_OF_SIMPLE create mode 100644 baseconfig/arm/CONFIG_USB_DWC3_PCI create mode 100644 baseconfig/arm/CONFIG_USB_DWC3_ULPI create mode 100644 baseconfig/arm/CONFIG_USB_EG20T create mode 100644 baseconfig/arm/CONFIG_USB_EHCI_HCD_PLATFORM create mode 100644 baseconfig/arm/CONFIG_USB_EHCI_TEGRA create mode 100644 baseconfig/arm/CONFIG_USB_FOTG210_UDC create mode 100644 baseconfig/arm/CONFIG_USB_FUSB300 create mode 100644 baseconfig/arm/CONFIG_USB_GADGET create mode 100644 baseconfig/arm/CONFIG_USB_GADGET_DEBUG create mode 100644 baseconfig/arm/CONFIG_USB_GADGET_DEBUG_FILES create mode 100644 baseconfig/arm/CONFIG_USB_GADGET_DEBUG_FS create mode 100644 baseconfig/arm/CONFIG_USB_GADGET_STORAGE_NUM_BUFFERS create mode 100644 baseconfig/arm/CONFIG_USB_GADGET_VBUS_DRAW create mode 100644 baseconfig/arm/CONFIG_USB_GADGET_XILINX create mode 100644 baseconfig/arm/CONFIG_USB_GOKU create mode 100644 baseconfig/arm/CONFIG_USB_GPIO_VBUS create mode 100644 baseconfig/arm/CONFIG_USB_ISP1760 create mode 100644 baseconfig/arm/CONFIG_USB_M66592 create mode 100644 baseconfig/arm/CONFIG_USB_MUSB_DSPS create mode 100644 baseconfig/arm/CONFIG_USB_MUSB_DUAL_ROLE create mode 100644 baseconfig/arm/CONFIG_USB_MUSB_HDRC create mode 100644 baseconfig/arm/CONFIG_USB_MUSB_TUSB6010 create mode 100644 baseconfig/arm/CONFIG_USB_MV_U3D create mode 100644 baseconfig/arm/CONFIG_USB_MV_UDC create mode 100644 baseconfig/arm/CONFIG_USB_NET2272 create mode 100644 baseconfig/arm/CONFIG_USB_NET2280 create mode 100644 baseconfig/arm/CONFIG_USB_OHCI_HCD_PLATFORM create mode 100644 baseconfig/arm/CONFIG_USB_OTG create mode 100644 baseconfig/arm/CONFIG_USB_OTG_BLACKLIST_HUB create mode 100644 baseconfig/arm/CONFIG_USB_PXA27X create mode 100644 baseconfig/arm/CONFIG_USB_R8A66597 create mode 100644 baseconfig/arm/CONFIG_USB_ULPI create mode 100644 baseconfig/arm/CONFIG_USB_XHCI_MVEBU create mode 100644 baseconfig/arm/CONFIG_USB_XHCI_PLATFORM create mode 100644 baseconfig/arm/CONFIG_USB_XHCI_TEGRA create mode 100644 baseconfig/arm/CONFIG_USB_ZERO_HNPTEST create mode 100644 baseconfig/arm/CONFIG_U_SERIAL_CONSOLE create mode 100644 baseconfig/arm/CONFIG_VDSO create mode 100644 baseconfig/arm/CONFIG_VEXPRESS_SYSCFG create mode 100644 baseconfig/arm/CONFIG_VFIO_AMBA create mode 100644 baseconfig/arm/CONFIG_VFIO_PLATFORM create mode 100644 baseconfig/arm/CONFIG_VFIO_PLATFORM_CALXEDAXGMAC_RESET create mode 100644 baseconfig/arm/CONFIG_XEN create mode 100644 baseconfig/arm/CONFIG_XILINX_ZYNQMP_DMA create mode 100644 baseconfig/arm/CONFIG_XZ_DEC_ARM create mode 100644 baseconfig/arm/CONFIG_XZ_DEC_ARMTHUMB create mode 100644 baseconfig/arm/README create mode 100644 baseconfig/arm/arm64/CONFIG_64BIT create mode 100644 baseconfig/arm/arm64/CONFIG_ACPI create mode 100644 baseconfig/arm/arm64/CONFIG_ACPI_APEI create mode 100644 baseconfig/arm/arm64/CONFIG_ACPI_APEI_EINJ create mode 100644 baseconfig/arm/arm64/CONFIG_ACPI_APEI_ERST_DEBUG create mode 100644 baseconfig/arm/arm64/CONFIG_ACPI_APEI_GHES create mode 100644 baseconfig/arm/arm64/CONFIG_ACPI_APEI_PCIEAER create mode 100644 baseconfig/arm/arm64/CONFIG_ACPI_BUTTON create mode 100644 baseconfig/arm/arm64/CONFIG_ACPI_CONFIGFS create mode 100644 baseconfig/arm/arm64/CONFIG_ACPI_CONTAINER create mode 100644 baseconfig/arm/arm64/CONFIG_ACPI_CPPC_CPUFREQ create mode 100644 baseconfig/arm/arm64/CONFIG_ACPI_CUSTOM_METHOD create mode 100644 baseconfig/arm/arm64/CONFIG_ACPI_DOCK create mode 100644 baseconfig/arm/arm64/CONFIG_ACPI_EC_DEBUGFS create mode 100644 baseconfig/arm/arm64/CONFIG_ACPI_FAN create mode 100644 baseconfig/arm/arm64/CONFIG_ACPI_HED create mode 100644 baseconfig/arm/arm64/CONFIG_ACPI_I2C_OPREGION create mode 100644 baseconfig/arm/arm64/CONFIG_ACPI_IPMI create mode 100644 baseconfig/arm/arm64/CONFIG_ACPI_NFIT create mode 100644 baseconfig/arm/arm64/CONFIG_ACPI_NFIT_DEBUG create mode 100644 baseconfig/arm/arm64/CONFIG_ACPI_NUMA create mode 100644 baseconfig/arm/arm64/CONFIG_ACPI_PROCESSOR create mode 100644 baseconfig/arm/arm64/CONFIG_ACPI_PROCFS_POWER create mode 100644 baseconfig/arm/arm64/CONFIG_ACPI_TABLE_UPGRADE create mode 100644 baseconfig/arm/arm64/CONFIG_ACPI_THERMAL create mode 100644 baseconfig/arm/arm64/CONFIG_ACPI_WATCHDOG create mode 100644 baseconfig/arm/arm64/CONFIG_AHCI_SUNXI create mode 100644 baseconfig/arm/arm64/CONFIG_AHCI_XGENE create mode 100644 baseconfig/arm/arm64/CONFIG_AMBA_PL08X create mode 100644 baseconfig/arm/arm64/CONFIG_AMD_XGBE create mode 100644 baseconfig/arm/arm64/CONFIG_AMD_XGBE_DCB create mode 100644 baseconfig/arm/arm64/CONFIG_APQ_GCC_8084 create mode 100644 baseconfig/arm/arm64/CONFIG_APQ_MMCC_8084 create mode 100644 baseconfig/arm/arm64/CONFIG_ARCH_ALPINE create mode 100644 baseconfig/arm/arm64/CONFIG_ARCH_BCM_IPROC create mode 100644 baseconfig/arm/arm64/CONFIG_ARCH_BERLIN create mode 100644 baseconfig/arm/arm64/CONFIG_ARCH_EXYNOS create mode 100644 baseconfig/arm/arm64/CONFIG_ARCH_HAS_HOLES_MEMORYMODEL create mode 100644 baseconfig/arm/arm64/CONFIG_ARCH_HISI create mode 100644 baseconfig/arm/arm64/CONFIG_ARCH_LAYERSCAPE create mode 100644 baseconfig/arm/arm64/CONFIG_ARCH_LG1K create mode 100644 baseconfig/arm/arm64/CONFIG_ARCH_MEDIATEK create mode 100644 baseconfig/arm/arm64/CONFIG_ARCH_MESON create mode 100644 baseconfig/arm/arm64/CONFIG_ARCH_QCOM create mode 100644 baseconfig/arm/arm64/CONFIG_ARCH_RENESAS create mode 100644 baseconfig/arm/arm64/CONFIG_ARCH_SEATTLE create mode 100644 baseconfig/arm/arm64/CONFIG_ARCH_SPRD create mode 100644 baseconfig/arm/arm64/CONFIG_ARCH_STRATIX10 create mode 100644 baseconfig/arm/arm64/CONFIG_ARCH_SUNXI create mode 100644 baseconfig/arm/arm64/CONFIG_ARCH_TEGRA create mode 100644 baseconfig/arm/arm64/CONFIG_ARCH_TEGRA_132_SOC create mode 100644 baseconfig/arm/arm64/CONFIG_ARCH_TEGRA_186_SOC create mode 100644 baseconfig/arm/arm64/CONFIG_ARCH_TEGRA_210_SOC create mode 100644 baseconfig/arm/arm64/CONFIG_ARCH_THUNDER create mode 100644 baseconfig/arm/arm64/CONFIG_ARCH_UNIPHIER create mode 100644 baseconfig/arm/arm64/CONFIG_ARCH_VULCAN create mode 100644 baseconfig/arm/arm64/CONFIG_ARCH_XGENE create mode 100644 baseconfig/arm/arm64/CONFIG_ARCH_ZX create mode 100644 baseconfig/arm/arm64/CONFIG_ARCH_ZYNQMP create mode 100644 baseconfig/arm/arm64/CONFIG_ARM64 create mode 100644 baseconfig/arm/arm64/CONFIG_ARM64_64K_PAGES create mode 100644 baseconfig/arm/arm64/CONFIG_ARM64_ACPI_PARKING_PROTOCOL create mode 100644 baseconfig/arm/arm64/CONFIG_ARM64_CRYPTO create mode 100644 baseconfig/arm/arm64/CONFIG_ARM64_ERRATUM_819472 create mode 100644 baseconfig/arm/arm64/CONFIG_ARM64_ERRATUM_824069 create mode 100644 baseconfig/arm/arm64/CONFIG_ARM64_ERRATUM_826319 create mode 100644 baseconfig/arm/arm64/CONFIG_ARM64_ERRATUM_827319 create mode 100644 baseconfig/arm/arm64/CONFIG_ARM64_ERRATUM_832075 create mode 100644 baseconfig/arm/arm64/CONFIG_ARM64_ERRATUM_834220 create mode 100644 baseconfig/arm/arm64/CONFIG_ARM64_ERRATUM_843419 create mode 100644 baseconfig/arm/arm64/CONFIG_ARM64_HW_AFDBM create mode 100644 baseconfig/arm/arm64/CONFIG_ARM64_LSE_ATOMICS create mode 100644 baseconfig/arm/arm64/CONFIG_ARM64_PAN create mode 100644 baseconfig/arm/arm64/CONFIG_ARM64_PTDUMP create mode 100644 baseconfig/arm/arm64/CONFIG_ARM64_PTDUMP_DEBUGFS create mode 100644 baseconfig/arm/arm64/CONFIG_ARM64_RANDOMIZE_TEXT_OFFSET create mode 100644 baseconfig/arm/arm64/CONFIG_ARM64_SW_TTBR0_PAN create mode 100644 baseconfig/arm/arm64/CONFIG_ARM64_UAO create mode 100644 baseconfig/arm/arm64/CONFIG_ARM64_VA_BITS create mode 100644 baseconfig/arm/arm64/CONFIG_ARM64_VA_BITS_48 create mode 100644 baseconfig/arm/arm64/CONFIG_ARM64_VHE create mode 100644 baseconfig/arm/arm64/CONFIG_ARM_SBSA_WATCHDOG create mode 100644 baseconfig/arm/arm64/CONFIG_ARM_SMMU_V3 create mode 100644 baseconfig/arm/arm64/CONFIG_ARM_TEGRA_DEVFREQ create mode 100644 baseconfig/arm/arm64/CONFIG_AXP20X_POWER create mode 100644 baseconfig/arm/arm64/CONFIG_AXP288_ADC create mode 100644 baseconfig/arm/arm64/CONFIG_AXP288_CHARGER create mode 100644 baseconfig/arm/arm64/CONFIG_AXP288_FUEL_GAUGE create mode 100644 baseconfig/arm/arm64/CONFIG_BCMA_POSSIBLE create mode 100644 baseconfig/arm/arm64/CONFIG_BCM_PDC_MBOX create mode 100644 baseconfig/arm/arm64/CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE create mode 100644 baseconfig/arm/arm64/CONFIG_BRCMUTIL create mode 100644 baseconfig/arm/arm64/CONFIG_BTT create mode 100644 baseconfig/arm/arm64/CONFIG_BUG create mode 100644 baseconfig/arm/arm64/CONFIG_CAN_SUN4I create mode 100644 baseconfig/arm/arm64/CONFIG_CAVIUM_ERRATUM_22375 create mode 100644 baseconfig/arm/arm64/CONFIG_CAVIUM_ERRATUM_23144 create mode 100644 baseconfig/arm/arm64/CONFIG_CAVIUM_ERRATUM_23154 create mode 100644 baseconfig/arm/arm64/CONFIG_CAVIUM_ERRATUM_27456 create mode 100644 baseconfig/arm/arm64/CONFIG_CHARGER_MANAGER create mode 100644 baseconfig/arm/arm64/CONFIG_CLKDEV_LOOKUP create mode 100644 baseconfig/arm/arm64/CONFIG_CMDLINE create mode 100644 baseconfig/arm/arm64/CONFIG_CMDLINE_FORCE create mode 100644 baseconfig/arm/arm64/CONFIG_COMMON_CLK_HI6220 create mode 100644 baseconfig/arm/arm64/CONFIG_COMMON_CLK_MAX77686 create mode 100644 baseconfig/arm/arm64/CONFIG_COMMON_CLK_QCOM create mode 100644 baseconfig/arm/arm64/CONFIG_COMMON_CLK_XGENE create mode 100644 baseconfig/arm/arm64/CONFIG_COMMON_RESET_HI6220 create mode 100644 baseconfig/arm/arm64/CONFIG_CONSOLE_TRANSLATIONS create mode 100644 baseconfig/arm/arm64/CONFIG_CRYPTO_AES_ARM64_CE create mode 100644 baseconfig/arm/arm64/CONFIG_CRYPTO_AES_ARM64_CE_BLK create mode 100644 baseconfig/arm/arm64/CONFIG_CRYPTO_AES_ARM64_CE_CCM create mode 100644 baseconfig/arm/arm64/CONFIG_CRYPTO_AES_ARM64_NEON_BLK create mode 100644 baseconfig/arm/arm64/CONFIG_CRYPTO_CRC32_ARM64 create mode 100644 baseconfig/arm/arm64/CONFIG_CRYPTO_DEV_CCP create mode 100644 baseconfig/arm/arm64/CONFIG_CRYPTO_DEV_CCP_CRYPTO create mode 100644 baseconfig/arm/arm64/CONFIG_CRYPTO_DEV_CCP_DD create mode 100644 baseconfig/arm/arm64/CONFIG_CRYPTO_DEV_QCE create mode 100644 baseconfig/arm/arm64/CONFIG_CRYPTO_GHASH_ARM64_CE create mode 100644 baseconfig/arm/arm64/CONFIG_CRYPTO_SHA1_ARM64_CE create mode 100644 baseconfig/arm/arm64/CONFIG_CRYPTO_SHA2_ARM64_CE create mode 100644 baseconfig/arm/arm64/CONFIG_DEBUG_ALIGN_RODATA create mode 100644 baseconfig/arm/arm64/CONFIG_DEBUG_SECTION_MISMATCH create mode 100644 baseconfig/arm/arm64/CONFIG_DEBUG_WX create mode 100644 baseconfig/arm/arm64/CONFIG_DMI create mode 100644 baseconfig/arm/arm64/CONFIG_DMIID create mode 100644 baseconfig/arm/arm64/CONFIG_DMI_SYSFS create mode 100644 baseconfig/arm/arm64/CONFIG_DRM_HISI_KIRIN create mode 100644 baseconfig/arm/arm64/CONFIG_DRM_MESON create mode 100644 baseconfig/arm/arm64/CONFIG_DRM_MSM create mode 100644 baseconfig/arm/arm64/CONFIG_DRM_MSM_DSI create mode 100644 baseconfig/arm/arm64/CONFIG_DRM_MSM_HDMI_HDCP create mode 100644 baseconfig/arm/arm64/CONFIG_DRM_MSM_REGISTER_LOGGING create mode 100644 baseconfig/arm/arm64/CONFIG_DVB_B2C2_FLEXCOP_USB create mode 100644 baseconfig/arm/arm64/CONFIG_EDAC_XGENE create mode 100644 baseconfig/arm/arm64/CONFIG_EXTCON_AXP288 create mode 100644 baseconfig/arm/arm64/CONFIG_FB_MODE_HELPERS create mode 100644 baseconfig/arm/arm64/CONFIG_FSL_ERRATUM_A008585 create mode 100644 baseconfig/arm/arm64/CONFIG_FSL_MC_BUS create mode 100644 baseconfig/arm/arm64/CONFIG_FUJITSU_ES create mode 100644 baseconfig/arm/arm64/CONFIG_GPIO_AXP209 create mode 100644 baseconfig/arm/arm64/CONFIG_GPIO_MAX77620 create mode 100644 baseconfig/arm/arm64/CONFIG_GPIO_PCA953X create mode 100644 baseconfig/arm/arm64/CONFIG_GPIO_XGENE create mode 100644 baseconfig/arm/arm64/CONFIG_GPIO_XGENE_SB create mode 100644 baseconfig/arm/arm64/CONFIG_HI6220_MBOX create mode 100644 baseconfig/arm/arm64/CONFIG_HISILICON_IRQ_MBIGEN create mode 100644 baseconfig/arm/arm64/CONFIG_HISI_KIRIN_DW_DSI create mode 100644 baseconfig/arm/arm64/CONFIG_HISI_THERMAL create mode 100644 baseconfig/arm/arm64/CONFIG_HOTPLUG_PCI_SHPC create mode 100644 baseconfig/arm/arm64/CONFIG_HVC_DCC create mode 100644 baseconfig/arm/arm64/CONFIG_HVC_DRIVER create mode 100644 baseconfig/arm/arm64/CONFIG_HWSPINLOCK_QCOM create mode 100644 baseconfig/arm/arm64/CONFIG_HW_RANDOM_CAVIUM create mode 100644 baseconfig/arm/arm64/CONFIG_HW_RANDOM_HISI create mode 100644 baseconfig/arm/arm64/CONFIG_HW_RANDOM_MSM create mode 100644 baseconfig/arm/arm64/CONFIG_HW_RANDOM_OMAP create mode 100644 baseconfig/arm/arm64/CONFIG_HW_RANDOM_XGENE create mode 100644 baseconfig/arm/arm64/CONFIG_HZ create mode 100644 baseconfig/arm/arm64/CONFIG_HZ_100 create mode 100644 baseconfig/arm/arm64/CONFIG_HZ_1000 create mode 100644 baseconfig/arm/arm64/CONFIG_I2C_HIX5HD2 create mode 100644 baseconfig/arm/arm64/CONFIG_I2C_QUP create mode 100644 baseconfig/arm/arm64/CONFIG_I2C_SCMI create mode 100644 baseconfig/arm/arm64/CONFIG_I2C_THUNDERX create mode 100644 baseconfig/arm/arm64/CONFIG_I2C_XGENE_SLIMPRO create mode 100644 baseconfig/arm/arm64/CONFIG_INPUT_AXP20X_PEK create mode 100644 baseconfig/arm/arm64/CONFIG_INPUT_HISI_POWERKEY create mode 100644 baseconfig/arm/arm64/CONFIG_INPUT_PM8941_PWRKEY create mode 100644 baseconfig/arm/arm64/CONFIG_INPUT_REGULATOR_HAPTIC create mode 100644 baseconfig/arm/arm64/CONFIG_IR_SUNXI create mode 100644 baseconfig/arm/arm64/CONFIG_K3_DMA create mode 100644 baseconfig/arm/arm64/CONFIG_KEYBOARD_SUN4I_LRADC create mode 100644 baseconfig/arm/arm64/CONFIG_KVM create mode 100644 baseconfig/arm/arm64/CONFIG_LIBNVDIMM create mode 100644 baseconfig/arm/arm64/CONFIG_LIQUIDIO create mode 100644 baseconfig/arm/arm64/CONFIG_MAX77620_THERMAL create mode 100644 baseconfig/arm/arm64/CONFIG_MAX77620_WATCHDOG create mode 100644 baseconfig/arm/arm64/CONFIG_MDIO_HISI_FEMAC create mode 100644 baseconfig/arm/arm64/CONFIG_MDIO_OCTEON create mode 100644 baseconfig/arm/arm64/CONFIG_MDIO_SUN4I create mode 100644 baseconfig/arm/arm64/CONFIG_MDIO_THUNDER create mode 100644 baseconfig/arm/arm64/CONFIG_MDIO_XGENE create mode 100644 baseconfig/arm/arm64/CONFIG_MDM_GCC_9615 create mode 100644 baseconfig/arm/arm64/CONFIG_MDM_LCC_9615 create mode 100644 baseconfig/arm/arm64/CONFIG_MESON_GXBB_WATCHDOG create mode 100644 baseconfig/arm/arm64/CONFIG_MESON_GXL_PHY create mode 100644 baseconfig/arm/arm64/CONFIG_MESON_WATCHDOG create mode 100644 baseconfig/arm/arm64/CONFIG_MFD_AXP20X create mode 100644 baseconfig/arm/arm64/CONFIG_MFD_AXP20X_I2C create mode 100644 baseconfig/arm/arm64/CONFIG_MFD_AXP20X_RSB create mode 100644 baseconfig/arm/arm64/CONFIG_MFD_HI655X_PMIC create mode 100644 baseconfig/arm/arm64/CONFIG_MFD_MAX77620 create mode 100644 baseconfig/arm/arm64/CONFIG_MFD_QCOM_RPM create mode 100644 baseconfig/arm/arm64/CONFIG_MFD_SUN6I_PRCM create mode 100644 baseconfig/arm/arm64/CONFIG_MMC_MESON_GX create mode 100644 baseconfig/arm/arm64/CONFIG_MMC_SDHCI_MSM create mode 100644 baseconfig/arm/arm64/CONFIG_MMC_SUNXI create mode 100644 baseconfig/arm/arm64/CONFIG_MSM_GCC_8660 create mode 100644 baseconfig/arm/arm64/CONFIG_MSM_GCC_8916 create mode 100644 baseconfig/arm/arm64/CONFIG_MSM_GCC_8960 create mode 100644 baseconfig/arm/arm64/CONFIG_MSM_GCC_8974 create mode 100644 baseconfig/arm/arm64/CONFIG_MSM_GCC_8996 create mode 100644 baseconfig/arm/arm64/CONFIG_MSM_LCC_8960 create mode 100644 baseconfig/arm/arm64/CONFIG_MSM_MMCC_8960 create mode 100644 baseconfig/arm/arm64/CONFIG_MSM_MMCC_8974 create mode 100644 baseconfig/arm/arm64/CONFIG_MSM_MMCC_8996 create mode 100644 baseconfig/arm/arm64/CONFIG_MV_XOR_V2 create mode 100644 baseconfig/arm/arm64/CONFIG_ND_BLK create mode 100644 baseconfig/arm/arm64/CONFIG_ND_BTT create mode 100644 baseconfig/arm/arm64/CONFIG_NET_SB1000 create mode 100644 baseconfig/arm/arm64/CONFIG_NET_VENDOR_ALLWINNER create mode 100644 baseconfig/arm/arm64/CONFIG_NET_VENDOR_CAVIUM create mode 100644 baseconfig/arm/arm64/CONFIG_NET_VENDOR_QUALCOMM create mode 100644 baseconfig/arm/arm64/CONFIG_NET_XGENE create mode 100644 baseconfig/arm/arm64/CONFIG_NODES_SHIFT create mode 100644 baseconfig/arm/arm64/CONFIG_NR_CPUS create mode 100644 baseconfig/arm/arm64/CONFIG_NUMA create mode 100644 baseconfig/arm/arm64/CONFIG_NUMA_BALANCING create mode 100644 baseconfig/arm/arm64/CONFIG_NUMA_BALANCING_DEFAULT_ENABLED create mode 100644 baseconfig/arm/arm64/CONFIG_NVMEM_SUNXI_SID create mode 100644 baseconfig/arm/arm64/CONFIG_PARPORT_PC create mode 100644 baseconfig/arm/arm64/CONFIG_PCC create mode 100644 baseconfig/arm/arm64/CONFIG_PCIE_QCOM create mode 100644 baseconfig/arm/arm64/CONFIG_PCI_HISI create mode 100644 baseconfig/arm/arm64/CONFIG_PCI_HOST_THUNDER_ECAM create mode 100644 baseconfig/arm/arm64/CONFIG_PCI_HOST_THUNDER_PEM create mode 100644 baseconfig/arm/arm64/CONFIG_PCI_XGENE create mode 100644 baseconfig/arm/arm64/CONFIG_PCI_XGENE_MSI create mode 100644 baseconfig/arm/arm64/CONFIG_PHY_HI6220_USB create mode 100644 baseconfig/arm/arm64/CONFIG_PHY_QCOM_APQ8064_SATA create mode 100644 baseconfig/arm/arm64/CONFIG_PHY_QCOM_UFS create mode 100644 baseconfig/arm/arm64/CONFIG_PHY_SUN4I_USB create mode 100644 baseconfig/arm/arm64/CONFIG_PHY_SUN9I_USB create mode 100644 baseconfig/arm/arm64/CONFIG_PHY_XGENE create mode 100644 baseconfig/arm/arm64/CONFIG_PINCTRL_AMD create mode 100644 baseconfig/arm/arm64/CONFIG_PINCTRL_APQ8064 create mode 100644 baseconfig/arm/arm64/CONFIG_PINCTRL_APQ8084 create mode 100644 baseconfig/arm/arm64/CONFIG_PINCTRL_MAX77620 create mode 100644 baseconfig/arm/arm64/CONFIG_PINCTRL_MDM9615 create mode 100644 baseconfig/arm/arm64/CONFIG_PINCTRL_MSM create mode 100644 baseconfig/arm/arm64/CONFIG_PINCTRL_MSM8660 create mode 100644 baseconfig/arm/arm64/CONFIG_PINCTRL_MSM8916 create mode 100644 baseconfig/arm/arm64/CONFIG_PINCTRL_MSM8960 create mode 100644 baseconfig/arm/arm64/CONFIG_PINCTRL_MSM8996 create mode 100644 baseconfig/arm/arm64/CONFIG_PINCTRL_MSM8X74 create mode 100644 baseconfig/arm/arm64/CONFIG_PINCTRL_QCOM_SPMI_PMIC create mode 100644 baseconfig/arm/arm64/CONFIG_PINCTRL_QCOM_SSBI_PMIC create mode 100644 baseconfig/arm/arm64/CONFIG_PINCTRL_QDF2XXX create mode 100644 baseconfig/arm/arm64/CONFIG_PMIC_OPREGION create mode 100644 baseconfig/arm/arm64/CONFIG_PNP_DEBUG_MESSAGES create mode 100644 baseconfig/arm/arm64/CONFIG_POWER_RESET_HISI create mode 100644 baseconfig/arm/arm64/CONFIG_POWER_RESET_MSM create mode 100644 baseconfig/arm/arm64/CONFIG_POWER_RESET_XGENE create mode 100644 baseconfig/arm/arm64/CONFIG_PWM_SUN4I create mode 100644 baseconfig/arm/arm64/CONFIG_QCOM_BAM_DMA create mode 100644 baseconfig/arm/arm64/CONFIG_QCOM_CLK_RPM create mode 100644 baseconfig/arm/arm64/CONFIG_QCOM_CLK_SMD_RPM create mode 100644 baseconfig/arm/arm64/CONFIG_QCOM_COINCELL create mode 100644 baseconfig/arm/arm64/CONFIG_QCOM_EBI2 create mode 100644 baseconfig/arm/arm64/CONFIG_QCOM_EMAC create mode 100644 baseconfig/arm/arm64/CONFIG_QCOM_GSBI create mode 100644 baseconfig/arm/arm64/CONFIG_QCOM_HIDMA create mode 100644 baseconfig/arm/arm64/CONFIG_QCOM_HIDMA_MGMT create mode 100644 baseconfig/arm/arm64/CONFIG_QCOM_Q6V5_PIL create mode 100644 baseconfig/arm/arm64/CONFIG_QCOM_QDF2400_ERRATUM_0065 create mode 100644 baseconfig/arm/arm64/CONFIG_QCOM_QFPROM create mode 100644 baseconfig/arm/arm64/CONFIG_QCOM_SMD create mode 100644 baseconfig/arm/arm64/CONFIG_QCOM_SMD_RPM create mode 100644 baseconfig/arm/arm64/CONFIG_QCOM_SMEM create mode 100644 baseconfig/arm/arm64/CONFIG_QCOM_SMP2P create mode 100644 baseconfig/arm/arm64/CONFIG_QCOM_SMSM create mode 100644 baseconfig/arm/arm64/CONFIG_QCOM_SPMI_IADC create mode 100644 baseconfig/arm/arm64/CONFIG_QCOM_SPMI_TEMP_ALARM create mode 100644 baseconfig/arm/arm64/CONFIG_QCOM_SPMI_VADC create mode 100644 baseconfig/arm/arm64/CONFIG_QCOM_TSENS create mode 100644 baseconfig/arm/arm64/CONFIG_QCOM_WCNSS_CTRL create mode 100644 baseconfig/arm/arm64/CONFIG_QCOM_WCNSS_PIL create mode 100644 baseconfig/arm/arm64/CONFIG_QCOM_WDT create mode 100644 baseconfig/arm/arm64/CONFIG_RANDOMIZE_BASE create mode 100644 baseconfig/arm/arm64/CONFIG_RCU_FANOUT create mode 100644 baseconfig/arm/arm64/CONFIG_REGULATOR_AXP20X create mode 100644 baseconfig/arm/arm64/CONFIG_REGULATOR_HI655X create mode 100644 baseconfig/arm/arm64/CONFIG_REGULATOR_MAX77620 create mode 100644 baseconfig/arm/arm64/CONFIG_REGULATOR_QCOM_RPM create mode 100644 baseconfig/arm/arm64/CONFIG_REGULATOR_QCOM_SMD_RPM create mode 100644 baseconfig/arm/arm64/CONFIG_REGULATOR_QCOM_SPMI create mode 100644 baseconfig/arm/arm64/CONFIG_RELOCATABLE create mode 100644 baseconfig/arm/arm64/CONFIG_RESET_HISI create mode 100644 baseconfig/arm/arm64/CONFIG_RTC_DRV_EFI create mode 100644 baseconfig/arm/arm64/CONFIG_RTC_DRV_PL030 create mode 100644 baseconfig/arm/arm64/CONFIG_RTC_DRV_PM8XXX create mode 100644 baseconfig/arm/arm64/CONFIG_RTC_DRV_SUN6I create mode 100644 baseconfig/arm/arm64/CONFIG_RTC_DRV_XGENE create mode 100644 baseconfig/arm/arm64/CONFIG_SATA_AHCI_PLATFORM create mode 100644 baseconfig/arm/arm64/CONFIG_SATA_AHCI_SEATTLE create mode 100644 baseconfig/arm/arm64/CONFIG_SENSORS_ACPI_POWER create mode 100644 baseconfig/arm/arm64/CONFIG_SENSORS_LTC2978_REGULATOR create mode 100644 baseconfig/arm/arm64/CONFIG_SENSORS_XGENE create mode 100644 baseconfig/arm/arm64/CONFIG_SERIAL_AMBA_PL010 create mode 100644 baseconfig/arm/arm64/CONFIG_SERIAL_MSM create mode 100644 baseconfig/arm/arm64/CONFIG_SERIAL_MSM_CONSOLE create mode 100644 baseconfig/arm/arm64/CONFIG_SERIO_SUN4I_PS2 create mode 100644 baseconfig/arm/arm64/CONFIG_SND_SOC create mode 100644 baseconfig/arm/arm64/CONFIG_SND_SUN4I_CODEC create mode 100644 baseconfig/arm/arm64/CONFIG_SPARSEMEM_VMEMMAP create mode 100644 baseconfig/arm/arm64/CONFIG_SPARSE_IRQ create mode 100644 baseconfig/arm/arm64/CONFIG_SPI_QUP create mode 100644 baseconfig/arm/arm64/CONFIG_SPI_SUN6I create mode 100644 baseconfig/arm/arm64/CONFIG_SPI_THUNDERX create mode 100644 baseconfig/arm/arm64/CONFIG_SPMI_MSM_PMIC_ARB create mode 100644 baseconfig/arm/arm64/CONFIG_STUB_CLK_HI6220 create mode 100644 baseconfig/arm/arm64/CONFIG_SUN4I_EMAC create mode 100644 baseconfig/arm/arm64/CONFIG_SUN8I_EMAC create mode 100644 baseconfig/arm/arm64/CONFIG_SUN8I_H3_CCU create mode 100644 baseconfig/arm/arm64/CONFIG_SUNXI_CCU create mode 100644 baseconfig/arm/arm64/CONFIG_SUNXI_WATCHDOG create mode 100644 baseconfig/arm/arm64/CONFIG_SYS_HYPERVISOR create mode 100644 baseconfig/arm/arm64/CONFIG_TEGRA210_ADMA create mode 100644 baseconfig/arm/arm64/CONFIG_TEGRA_ACONNECT create mode 100644 baseconfig/arm/arm64/CONFIG_TEGRA_GMI create mode 100644 baseconfig/arm/arm64/CONFIG_THUNDER_NIC_BGX create mode 100644 baseconfig/arm/arm64/CONFIG_THUNDER_NIC_PF create mode 100644 baseconfig/arm/arm64/CONFIG_THUNDER_NIC_RGX create mode 100644 baseconfig/arm/arm64/CONFIG_THUNDER_NIC_VF create mode 100644 baseconfig/arm/arm64/CONFIG_TOUCHSCREEN_SUN4I create mode 100644 baseconfig/arm/arm64/CONFIG_USB_CHIPIDEA create mode 100644 baseconfig/arm/arm64/CONFIG_USB_CHIPIDEA_HOST create mode 100644 baseconfig/arm/arm64/CONFIG_USB_CHIPIDEA_UDC create mode 100644 baseconfig/arm/arm64/CONFIG_USB_EHCI_MSM create mode 100644 baseconfig/arm/arm64/CONFIG_USB_MSM_OTG create mode 100644 baseconfig/arm/arm64/CONFIG_USB_MUSB_SUNXI create mode 100644 baseconfig/arm/arm64/CONFIG_USB_QCOM_8X16_PHY create mode 100644 baseconfig/arm/arm64/CONFIG_USB_SPEEDTOUCH create mode 100644 baseconfig/arm/arm64/CONFIG_VFIO_PLATFORM_AMDXGBE_RESET create mode 100644 baseconfig/arm/arm64/CONFIG_VGA_CONSOLE create mode 100644 baseconfig/arm/arm64/CONFIG_XGENE_DMA create mode 100644 baseconfig/arm/arm64/CONFIG_XGENE_PMU create mode 100644 baseconfig/arm/arm64/CONFIG_XGENE_SLIMPRO_MBOX create mode 100644 baseconfig/arm/arm64/README create mode 100644 baseconfig/arm/armv7/CONFIG_88EU_AP_MODE create mode 100644 baseconfig/arm/armv7/CONFIG_AD525X_DPOT create mode 100644 baseconfig/arm/armv7/CONFIG_AD525X_DPOT_I2C create mode 100644 baseconfig/arm/armv7/CONFIG_AD525X_DPOT_SPI create mode 100644 baseconfig/arm/armv7/CONFIG_AEABI create mode 100644 baseconfig/arm/armv7/CONFIG_AHCI_SUNXI create mode 100644 baseconfig/arm/armv7/CONFIG_AMBA_PL08X create mode 100644 baseconfig/arm/armv7/CONFIG_APM_EMULATION create mode 100644 baseconfig/arm/armv7/CONFIG_ARCH_ALPINE create mode 100644 baseconfig/arm/armv7/CONFIG_ARCH_ARTPEC create mode 100644 baseconfig/arm/armv7/CONFIG_ARCH_AT91 create mode 100644 baseconfig/arm/armv7/CONFIG_ARCH_DIGICOLOR create mode 100644 baseconfig/arm/armv7/CONFIG_ARCH_EXYNOS create mode 100644 baseconfig/arm/armv7/CONFIG_ARCH_EXYNOS3 create mode 100644 baseconfig/arm/armv7/CONFIG_ARCH_EXYNOS4 create mode 100644 baseconfig/arm/armv7/CONFIG_ARCH_EXYNOS5 create mode 100644 baseconfig/arm/armv7/CONFIG_ARCH_HAS_TICK_BROADCAST create mode 100644 baseconfig/arm/armv7/CONFIG_ARCH_HI3xxx create mode 100644 baseconfig/arm/armv7/CONFIG_ARCH_HIGHBANK create mode 100644 baseconfig/arm/armv7/CONFIG_ARCH_HISI create mode 100644 baseconfig/arm/armv7/CONFIG_ARCH_MEDIATEK create mode 100644 baseconfig/arm/armv7/CONFIG_ARCH_MESON create mode 100644 baseconfig/arm/armv7/CONFIG_ARCH_MMP create mode 100644 baseconfig/arm/armv7/CONFIG_ARCH_MULTI_V6 create mode 100644 baseconfig/arm/armv7/CONFIG_ARCH_MULTI_V7 create mode 100644 baseconfig/arm/armv7/CONFIG_ARCH_QCOM create mode 100644 baseconfig/arm/armv7/CONFIG_ARCH_REALVIEW create mode 100644 baseconfig/arm/armv7/CONFIG_ARCH_RENESAS create mode 100644 baseconfig/arm/armv7/CONFIG_ARCH_S5PV210 create mode 100644 baseconfig/arm/armv7/CONFIG_ARCH_SHMOBILE_MULTI create mode 100644 baseconfig/arm/armv7/CONFIG_ARCH_SIRF create mode 100644 baseconfig/arm/armv7/CONFIG_ARCH_SOCFPGA create mode 100644 baseconfig/arm/armv7/CONFIG_ARCH_STI create mode 100644 baseconfig/arm/armv7/CONFIG_ARCH_SUNXI create mode 100644 baseconfig/arm/armv7/CONFIG_ARCH_TANGO create mode 100644 baseconfig/arm/armv7/CONFIG_ARCH_TEGRA create mode 100644 baseconfig/arm/armv7/CONFIG_ARCH_TEGRA_114_SOC create mode 100644 baseconfig/arm/armv7/CONFIG_ARCH_TEGRA_124_SOC create mode 100644 baseconfig/arm/armv7/CONFIG_ARCH_U8500 create mode 100644 baseconfig/arm/armv7/CONFIG_ARCH_UNIPHIER create mode 100644 baseconfig/arm/armv7/CONFIG_ARCH_VEXPRESS_CORTEX_A5_A9_ERRATA create mode 100644 baseconfig/arm/armv7/CONFIG_ARCH_VEXPRESS_DCSCB create mode 100644 baseconfig/arm/armv7/CONFIG_ARCH_VEXPRESS_SPC create mode 100644 baseconfig/arm/armv7/CONFIG_ARCH_VEXPRESS_TC2_PM create mode 100644 baseconfig/arm/armv7/CONFIG_ARCH_VIRT create mode 100644 baseconfig/arm/armv7/CONFIG_ARCH_WM8850 create mode 100644 baseconfig/arm/armv7/CONFIG_ARCH_ZX create mode 100644 baseconfig/arm/armv7/CONFIG_ARM create mode 100644 baseconfig/arm/armv7/CONFIG_ARM_APPENDED_DTB create mode 100644 baseconfig/arm/armv7/CONFIG_ARM_ASM_UNIFIED create mode 100644 baseconfig/arm/armv7/CONFIG_ARM_ATAG_DTB_COMPAT create mode 100644 baseconfig/arm/armv7/CONFIG_ARM_BIG_LITTLE_CPUFREQ create mode 100644 baseconfig/arm/armv7/CONFIG_ARM_BIG_LITTLE_CPUIDLE create mode 100644 baseconfig/arm/armv7/CONFIG_ARM_CPU_SUSPEND create mode 100644 baseconfig/arm/armv7/CONFIG_ARM_CPU_TOPOLOGY create mode 100644 baseconfig/arm/armv7/CONFIG_ARM_ERRATA_326103 create mode 100644 baseconfig/arm/armv7/CONFIG_ARM_ERRATA_411920 create mode 100644 baseconfig/arm/armv7/CONFIG_ARM_ERRATA_430973 create mode 100644 baseconfig/arm/armv7/CONFIG_ARM_ERRATA_458693 create mode 100644 baseconfig/arm/armv7/CONFIG_ARM_ERRATA_460075 create mode 100644 baseconfig/arm/armv7/CONFIG_ARM_ERRATA_643719 create mode 100644 baseconfig/arm/armv7/CONFIG_ARM_ERRATA_720789 create mode 100644 baseconfig/arm/armv7/CONFIG_ARM_ERRATA_742230 create mode 100644 baseconfig/arm/armv7/CONFIG_ARM_ERRATA_742231 create mode 100644 baseconfig/arm/armv7/CONFIG_ARM_ERRATA_743622 create mode 100644 baseconfig/arm/armv7/CONFIG_ARM_ERRATA_751472 create mode 100644 baseconfig/arm/armv7/CONFIG_ARM_ERRATA_754322 create mode 100644 baseconfig/arm/armv7/CONFIG_ARM_ERRATA_754327 create mode 100644 baseconfig/arm/armv7/CONFIG_ARM_ERRATA_764369 create mode 100644 baseconfig/arm/armv7/CONFIG_ARM_ERRATA_773022 create mode 100644 baseconfig/arm/armv7/CONFIG_ARM_ERRATA_775420 create mode 100644 baseconfig/arm/armv7/CONFIG_ARM_ERRATA_798181 create mode 100644 baseconfig/arm/armv7/CONFIG_ARM_ERRATA_818325_852422 create mode 100644 baseconfig/arm/armv7/CONFIG_ARM_ERRATA_821420 create mode 100644 baseconfig/arm/armv7/CONFIG_ARM_ERRATA_825619 create mode 100644 baseconfig/arm/armv7/CONFIG_ARM_ERRATA_852421 create mode 100644 baseconfig/arm/armv7/CONFIG_ARM_ERRATA_852423 create mode 100644 baseconfig/arm/armv7/CONFIG_ARM_EXYNOS5440_CPUFREQ create mode 100644 baseconfig/arm/armv7/CONFIG_ARM_EXYNOS_BUS_DEVFREQ create mode 100644 baseconfig/arm/armv7/CONFIG_ARM_EXYNOS_CPUIDLE create mode 100644 baseconfig/arm/armv7/CONFIG_ARM_HIGHBANK_CPUFREQ create mode 100644 baseconfig/arm/armv7/CONFIG_ARM_HIGHBANK_CPUIDLE create mode 100644 baseconfig/arm/armv7/CONFIG_ARM_KPROBES_TEST create mode 100644 baseconfig/arm/armv7/CONFIG_ARM_MODULE_PLTS create mode 100644 baseconfig/arm/armv7/CONFIG_ARM_MVEBU_V7_CPUIDLE create mode 100644 baseconfig/arm/armv7/CONFIG_ARM_PATCH_IDIV create mode 100644 baseconfig/arm/armv7/CONFIG_ARM_SCPI_CPUFREQ create mode 100644 baseconfig/arm/armv7/CONFIG_ARM_TEGRA_DEVFREQ create mode 100644 baseconfig/arm/armv7/CONFIG_ARM_THUMB create mode 100644 baseconfig/arm/armv7/CONFIG_ARM_THUMBEE create mode 100644 baseconfig/arm/armv7/CONFIG_ARM_UNWIND create mode 100644 baseconfig/arm/armv7/CONFIG_ARM_VEXPRESS_SPC_CPUFREQ create mode 100644 baseconfig/arm/armv7/CONFIG_ARM_VIRT_EXT create mode 100644 baseconfig/arm/armv7/CONFIG_ATAGS create mode 100644 baseconfig/arm/armv7/CONFIG_ATAGS_PROC create mode 100644 baseconfig/arm/armv7/CONFIG_ATM_HE create mode 100644 baseconfig/arm/armv7/CONFIG_AUTO_ZRELADDR create mode 100644 baseconfig/arm/armv7/CONFIG_AX88796 create mode 100644 baseconfig/arm/armv7/CONFIG_AX88796_93CX6 create mode 100644 baseconfig/arm/armv7/CONFIG_AXP20X_POWER create mode 100644 baseconfig/arm/armv7/CONFIG_AXP288_ADC create mode 100644 baseconfig/arm/armv7/CONFIG_AXP288_CHARGER create mode 100644 baseconfig/arm/armv7/CONFIG_AXP288_FUEL_GAUGE create mode 100644 baseconfig/arm/armv7/CONFIG_BATTERY_SBS create mode 100644 baseconfig/arm/armv7/CONFIG_BIG_LITTLE create mode 100644 baseconfig/arm/armv7/CONFIG_BL_SWITCHER create mode 100644 baseconfig/arm/armv7/CONFIG_BL_SWITCHER_DUMMY_IF create mode 100644 baseconfig/arm/armv7/CONFIG_BRCMSTB_GISB_ARB create mode 100644 baseconfig/arm/armv7/CONFIG_CACHE_FEROCEON_L2 create mode 100644 baseconfig/arm/armv7/CONFIG_CACHE_FEROCEON_L2_WRITETHROUGH create mode 100644 baseconfig/arm/armv7/CONFIG_CACHE_L2X0 create mode 100644 baseconfig/arm/armv7/CONFIG_CACHE_L2X0_PMU create mode 100644 baseconfig/arm/armv7/CONFIG_CACHE_TAUROS2 create mode 100644 baseconfig/arm/armv7/CONFIG_CAN_FLEXCAN create mode 100644 baseconfig/arm/armv7/CONFIG_CAN_RCAR create mode 100644 baseconfig/arm/armv7/CONFIG_CAN_RCAR_CANFD create mode 100644 baseconfig/arm/armv7/CONFIG_CAN_SUN4I create mode 100644 baseconfig/arm/armv7/CONFIG_CAN_TI_HECC create mode 100644 baseconfig/arm/armv7/CONFIG_CC_OPTIMIZE_FOR_SIZE create mode 100644 baseconfig/arm/armv7/CONFIG_CHARGER_BQ2415X create mode 100644 baseconfig/arm/armv7/CONFIG_CHARGER_BQ24190 create mode 100644 baseconfig/arm/armv7/CONFIG_CHARGER_BQ24735 create mode 100644 baseconfig/arm/armv7/CONFIG_CHARGER_GPIO create mode 100644 baseconfig/arm/armv7/CONFIG_CHARGER_MANAGER create mode 100644 baseconfig/arm/armv7/CONFIG_CHARGER_MAX8997 create mode 100644 baseconfig/arm/armv7/CONFIG_CHARGER_TPS65090 create mode 100644 baseconfig/arm/armv7/CONFIG_CLK_QORIQ create mode 100644 baseconfig/arm/armv7/CONFIG_CMDLINE create mode 100644 baseconfig/arm/armv7/CONFIG_CMDLINE_FROM_BOOTLOADER create mode 100644 baseconfig/arm/armv7/CONFIG_COMMON_CLK_MAX77686 create mode 100644 baseconfig/arm/armv7/CONFIG_COMMON_CLK_MAX77802 create mode 100644 baseconfig/arm/armv7/CONFIG_COMMON_CLK_S2MPS11 create mode 100644 baseconfig/arm/armv7/CONFIG_COMMON_CLK_SI5351 create mode 100644 baseconfig/arm/armv7/CONFIG_CPU_BPREDICT_DISABLE create mode 100644 baseconfig/arm/armv7/CONFIG_CPU_DCACHE_DISABLE create mode 100644 baseconfig/arm/armv7/CONFIG_CPU_ICACHE_DISABLE create mode 100644 baseconfig/arm/armv7/CONFIG_CPU_SW_DOMAIN_PAN create mode 100644 baseconfig/arm/armv7/CONFIG_CROS_EC_CHARDEV create mode 100644 baseconfig/arm/armv7/CONFIG_CROS_EC_PROTO create mode 100644 baseconfig/arm/armv7/CONFIG_CRYPTO_AES_ARM_CE create mode 100644 baseconfig/arm/armv7/CONFIG_CRYPTO_DEV_S5P create mode 100644 baseconfig/arm/armv7/CONFIG_CRYPTO_DEV_SUN4I_SS create mode 100644 baseconfig/arm/armv7/CONFIG_CRYPTO_GHASH_ARM_CE create mode 100644 baseconfig/arm/armv7/CONFIG_CRYPTO_SHA1_ARM_CE create mode 100644 baseconfig/arm/armv7/CONFIG_CRYPTO_SHA2_ARM_CE create mode 100644 baseconfig/arm/armv7/CONFIG_CS89x0 create mode 100644 baseconfig/arm/armv7/CONFIG_DEBUG_ALIGN_RODATA create mode 100644 baseconfig/arm/armv7/CONFIG_DEBUG_LL create mode 100644 baseconfig/arm/armv7/CONFIG_DEBUG_RODATA create mode 100644 baseconfig/arm/armv7/CONFIG_DEBUG_USER create mode 100644 baseconfig/arm/armv7/CONFIG_DEFAULT_MMAP_MIN_ADDR create mode 100644 baseconfig/arm/armv7/CONFIG_DEPRECATED_PARAM_STRUCT create mode 100644 baseconfig/arm/armv7/CONFIG_DEVFREQ_EVENT_EXYNOS_NOCP create mode 100644 baseconfig/arm/armv7/CONFIG_DEVFREQ_EVENT_EXYNOS_PPMU create mode 100644 baseconfig/arm/armv7/CONFIG_DEVFREQ_GOV_PASSIVE create mode 100644 baseconfig/arm/armv7/CONFIG_DM9000 create mode 100644 baseconfig/arm/armv7/CONFIG_DMADEVICES_DEBUG create mode 100644 baseconfig/arm/armv7/CONFIG_DMADEVICES_VDEBUG create mode 100644 baseconfig/arm/armv7/CONFIG_DMA_CACHE_RWFO create mode 100644 baseconfig/arm/armv7/CONFIG_DMA_SUN4I create mode 100644 baseconfig/arm/armv7/CONFIG_DMA_SUN6I create mode 100644 baseconfig/arm/armv7/CONFIG_DOVE_THERMAL create mode 100644 baseconfig/arm/armv7/CONFIG_DRM_ARMADA create mode 100644 baseconfig/arm/armv7/CONFIG_DRM_DW_HDMI create mode 100644 baseconfig/arm/armv7/CONFIG_DRM_DW_HDMI_AHB_AUDIO create mode 100644 baseconfig/arm/armv7/CONFIG_DRM_EXYNOS create mode 100644 baseconfig/arm/armv7/CONFIG_DRM_EXYNOS5433_DECON create mode 100644 baseconfig/arm/armv7/CONFIG_DRM_EXYNOS7_DECON create mode 100644 baseconfig/arm/armv7/CONFIG_DRM_EXYNOS_DP create mode 100644 baseconfig/arm/armv7/CONFIG_DRM_EXYNOS_DPI create mode 100644 baseconfig/arm/armv7/CONFIG_DRM_EXYNOS_DSI create mode 100644 baseconfig/arm/armv7/CONFIG_DRM_EXYNOS_FIMC create mode 100644 baseconfig/arm/armv7/CONFIG_DRM_EXYNOS_FIMD create mode 100644 baseconfig/arm/armv7/CONFIG_DRM_EXYNOS_G2D create mode 100644 baseconfig/arm/armv7/CONFIG_DRM_EXYNOS_GSC create mode 100644 baseconfig/arm/armv7/CONFIG_DRM_EXYNOS_HDMI create mode 100644 baseconfig/arm/armv7/CONFIG_DRM_EXYNOS_IOMMU create mode 100644 baseconfig/arm/armv7/CONFIG_DRM_EXYNOS_IPP create mode 100644 baseconfig/arm/armv7/CONFIG_DRM_EXYNOS_MIC create mode 100644 baseconfig/arm/armv7/CONFIG_DRM_EXYNOS_MIXER create mode 100644 baseconfig/arm/armv7/CONFIG_DRM_EXYNOS_ROTATOR create mode 100644 baseconfig/arm/armv7/CONFIG_DRM_EXYNOS_VIDI create mode 100644 baseconfig/arm/armv7/CONFIG_DRM_FSL_DCU create mode 100644 baseconfig/arm/armv7/CONFIG_DRM_IMX create mode 100644 baseconfig/arm/armv7/CONFIG_DRM_MESON create mode 100644 baseconfig/arm/armv7/CONFIG_DRM_PANEL create mode 100644 baseconfig/arm/armv7/CONFIG_DRM_PANEL_LG_LG4573 create mode 100644 baseconfig/arm/armv7/CONFIG_DRM_PANEL_PANASONIC_VVX10F034N00 create mode 100644 baseconfig/arm/armv7/CONFIG_DRM_PANEL_SAMSUNG_LD9040 create mode 100644 baseconfig/arm/armv7/CONFIG_DRM_PANEL_SAMSUNG_S6E8AA0 create mode 100644 baseconfig/arm/armv7/CONFIG_DRM_PANEL_SHARP_LQ101R1SX01 create mode 100644 baseconfig/arm/armv7/CONFIG_DRM_PANEL_SHARP_LS043T1LE01 create mode 100644 baseconfig/arm/armv7/CONFIG_DRM_PANEL_SIMPLE create mode 100644 baseconfig/arm/armv7/CONFIG_DRM_STI create mode 100644 baseconfig/arm/armv7/CONFIG_DRM_SUN4I create mode 100644 baseconfig/arm/armv7/CONFIG_DRM_TILCDC create mode 100644 baseconfig/arm/armv7/CONFIG_DVB_USB_PCTV452E create mode 100644 baseconfig/arm/armv7/CONFIG_DWMAC_GENERIC create mode 100644 baseconfig/arm/armv7/CONFIG_DWMAC_SUNXI create mode 100644 baseconfig/arm/armv7/CONFIG_EDAC_HIGHBANK_L2 create mode 100644 baseconfig/arm/armv7/CONFIG_EDAC_HIGHBANK_MC create mode 100644 baseconfig/arm/armv7/CONFIG_EEPROM_93XX46 create mode 100644 baseconfig/arm/armv7/CONFIG_EEPROM_AT25 create mode 100644 baseconfig/arm/armv7/CONFIG_ENC28J60 create mode 100644 baseconfig/arm/armv7/CONFIG_EXTCON_AXP288 create mode 100644 baseconfig/arm/armv7/CONFIG_EXTCON_MAX8997 create mode 100644 baseconfig/arm/armv7/CONFIG_EXYNOS5420_MCPM create mode 100644 baseconfig/arm/armv7/CONFIG_EXYNOS5420_MCPM not set create mode 100644 baseconfig/arm/armv7/CONFIG_EXYNOS_ADC create mode 100644 baseconfig/arm/armv7/CONFIG_EXYNOS_AUDSS_CLK_CON create mode 100644 baseconfig/arm/armv7/CONFIG_EXYNOS_IOMMU create mode 100644 baseconfig/arm/armv7/CONFIG_EXYNOS_IOMMU_DEBUG create mode 100644 baseconfig/arm/armv7/CONFIG_EXYNOS_THERMAL create mode 100644 baseconfig/arm/armv7/CONFIG_EZX_PCAP create mode 100644 baseconfig/arm/armv7/CONFIG_FB_RADEON create mode 100644 baseconfig/arm/armv7/CONFIG_FB_S3C create mode 100644 baseconfig/arm/armv7/CONFIG_FB_SAVAGE create mode 100644 baseconfig/arm/armv7/CONFIG_FB_XILINX create mode 100644 baseconfig/arm/armv7/CONFIG_GENERIC_ADC_BATTERY create mode 100644 baseconfig/arm/armv7/CONFIG_GPIO_74X164 create mode 100644 baseconfig/arm/armv7/CONFIG_GPIO_AXP209 create mode 100644 baseconfig/arm/armv7/CONFIG_GPIO_EM create mode 100644 baseconfig/arm/armv7/CONFIG_GPIO_MAX7301 create mode 100644 baseconfig/arm/armv7/CONFIG_GPIO_MC33880 create mode 100644 baseconfig/arm/armv7/CONFIG_GPIO_PCF857X create mode 100644 baseconfig/arm/armv7/CONFIG_GPIO_SYSCON create mode 100644 baseconfig/arm/armv7/CONFIG_GPIO_TPS65910 create mode 100644 baseconfig/arm/armv7/CONFIG_GPIO_TPS65912 create mode 100644 baseconfig/arm/armv7/CONFIG_GPIO_WM8994 create mode 100644 baseconfig/arm/armv7/CONFIG_GPIO_ZEVIO create mode 100644 baseconfig/arm/armv7/CONFIG_HAVE_ARM_ARCH_TIMER create mode 100644 baseconfig/arm/armv7/CONFIG_HAVE_ARM_TWD create mode 100644 baseconfig/arm/armv7/CONFIG_HIGHMEM create mode 100644 baseconfig/arm/armv7/CONFIG_HIGHPTE create mode 100644 baseconfig/arm/armv7/CONFIG_HVC_DCC create mode 100644 baseconfig/arm/armv7/CONFIG_HW_RANDOM_EXYNOS create mode 100644 baseconfig/arm/armv7/CONFIG_HW_RANDOM_OMAP create mode 100644 baseconfig/arm/armv7/CONFIG_I2C create mode 100644 baseconfig/arm/armv7/CONFIG_I2C_CROS_EC_TUNNEL create mode 100644 baseconfig/arm/armv7/CONFIG_I2C_EXYNOS5 create mode 100644 baseconfig/arm/armv7/CONFIG_I2C_S3C2410 create mode 100644 baseconfig/arm/armv7/CONFIG_I2C_SUN6I_P2WI create mode 100644 baseconfig/arm/armv7/CONFIG_IEEE802154_MRF24J40 create mode 100644 baseconfig/arm/armv7/CONFIG_INPUT_ARIZONA_HAPTICS create mode 100644 baseconfig/arm/armv7/CONFIG_INPUT_AXP20X_PEK create mode 100644 baseconfig/arm/armv7/CONFIG_INPUT_GP2A create mode 100644 baseconfig/arm/armv7/CONFIG_INPUT_GPIO create mode 100644 baseconfig/arm/armv7/CONFIG_INPUT_GPIO_BEEPER create mode 100644 baseconfig/arm/armv7/CONFIG_INPUT_GPIO_TILT_POLLED create mode 100644 baseconfig/arm/armv7/CONFIG_INPUT_MAX8997_HAPTIC create mode 100644 baseconfig/arm/armv7/CONFIG_INPUT_MC13783_PWRBUTTON create mode 100644 baseconfig/arm/armv7/CONFIG_INPUT_REGULATOR_HAPTIC create mode 100644 baseconfig/arm/armv7/CONFIG_IOMMU_IO_PGTABLE_LPAE create mode 100644 baseconfig/arm/armv7/CONFIG_IRQ_CROSSBAR create mode 100644 baseconfig/arm/armv7/CONFIG_IR_SUNXI create mode 100644 baseconfig/arm/armv7/CONFIG_IWMMXT create mode 100644 baseconfig/arm/armv7/CONFIG_JFFS2_COMPRESSION_OPTIONS create mode 100644 baseconfig/arm/armv7/CONFIG_JFFS2_FS create mode 100644 baseconfig/arm/armv7/CONFIG_JFFS2_FS_DEBUG create mode 100644 baseconfig/arm/armv7/CONFIG_JFFS2_FS_POSIX_ACL create mode 100644 baseconfig/arm/armv7/CONFIG_JFFS2_FS_SECURITY create mode 100644 baseconfig/arm/armv7/CONFIG_JFFS2_FS_WBUF_VERIFY create mode 100644 baseconfig/arm/armv7/CONFIG_JFFS2_FS_WRITEBUFFER create mode 100644 baseconfig/arm/armv7/CONFIG_JFFS2_FS_XATTR create mode 100644 baseconfig/arm/armv7/CONFIG_JFFS2_LZO create mode 100644 baseconfig/arm/armv7/CONFIG_JFFS2_RTIME create mode 100644 baseconfig/arm/armv7/CONFIG_JFFS2_RUBIN create mode 100644 baseconfig/arm/armv7/CONFIG_JFFS2_SUMMARY create mode 100644 baseconfig/arm/armv7/CONFIG_JFFS2_ZLIB create mode 100644 baseconfig/arm/armv7/CONFIG_KEYBOARD_CROS_EC create mode 100644 baseconfig/arm/armv7/CONFIG_KEYBOARD_MATRIX create mode 100644 baseconfig/arm/armv7/CONFIG_KEYBOARD_SUN4I_LRADC create mode 100644 baseconfig/arm/armv7/CONFIG_KS8851 create mode 100644 baseconfig/arm/armv7/CONFIG_KS8851_MLL create mode 100644 baseconfig/arm/armv7/CONFIG_LATTICE_ECP3_CONFIG create mode 100644 baseconfig/arm/armv7/CONFIG_LBDAF create mode 100644 baseconfig/arm/armv7/CONFIG_LCD_AMS369FG06 create mode 100644 baseconfig/arm/armv7/CONFIG_LCD_HX8357 create mode 100644 baseconfig/arm/armv7/CONFIG_LCD_ILI922X create mode 100644 baseconfig/arm/armv7/CONFIG_LCD_ILI9320 create mode 100644 baseconfig/arm/armv7/CONFIG_LCD_L4F00242T03 create mode 100644 baseconfig/arm/armv7/CONFIG_LCD_LD9040 create mode 100644 baseconfig/arm/armv7/CONFIG_LCD_LMS283GF05 create mode 100644 baseconfig/arm/armv7/CONFIG_LCD_LMS501KF03 create mode 100644 baseconfig/arm/armv7/CONFIG_LCD_LTV350QV create mode 100644 baseconfig/arm/armv7/CONFIG_LCD_S6E63M0 create mode 100644 baseconfig/arm/armv7/CONFIG_LCD_TDO24M create mode 100644 baseconfig/arm/armv7/CONFIG_LCD_VGG2432A4 create mode 100644 baseconfig/arm/armv7/CONFIG_LEDS_DAC124S085 create mode 100644 baseconfig/arm/armv7/CONFIG_LEDS_GPIO create mode 100644 baseconfig/arm/armv7/CONFIG_LEDS_GPIO_REGISTER create mode 100644 baseconfig/arm/armv7/CONFIG_LEDS_MAX8997 create mode 100644 baseconfig/arm/armv7/CONFIG_LEDS_NS2 create mode 100644 baseconfig/arm/armv7/CONFIG_LEDS_PWM create mode 100644 baseconfig/arm/armv7/CONFIG_LEDS_SYSCON create mode 100644 baseconfig/arm/armv7/CONFIG_LEDS_TRIGGER_CPU create mode 100644 baseconfig/arm/armv7/CONFIG_LIBERTAS_SPI create mode 100644 baseconfig/arm/armv7/CONFIG_LSM_MMAP_MIN_ADDR create mode 100644 baseconfig/arm/armv7/CONFIG_MACH_ARMADA_370 create mode 100644 baseconfig/arm/armv7/CONFIG_MACH_ARMADA_375 create mode 100644 baseconfig/arm/armv7/CONFIG_MACH_ARMADA_38X create mode 100644 baseconfig/arm/armv7/CONFIG_MACH_ARMADA_39X create mode 100644 baseconfig/arm/armv7/CONFIG_MACH_ARMADA_XP create mode 100644 baseconfig/arm/armv7/CONFIG_MACH_DOVE create mode 100644 baseconfig/arm/armv7/CONFIG_MACH_SUN4I create mode 100644 baseconfig/arm/armv7/CONFIG_MACH_SUN5I create mode 100644 baseconfig/arm/armv7/CONFIG_MACH_SUN6I create mode 100644 baseconfig/arm/armv7/CONFIG_MACH_SUN7I create mode 100644 baseconfig/arm/armv7/CONFIG_MACH_SUN8I create mode 100644 baseconfig/arm/armv7/CONFIG_MACH_SUN9I create mode 100644 baseconfig/arm/armv7/CONFIG_MCPM create mode 100644 baseconfig/arm/armv7/CONFIG_MDIO_BUS_MUX create mode 100644 baseconfig/arm/armv7/CONFIG_MDIO_SUN4I create mode 100644 baseconfig/arm/armv7/CONFIG_MEMORY create mode 100644 baseconfig/arm/armv7/CONFIG_MESON_GXBB_WATCHDOG create mode 100644 baseconfig/arm/armv7/CONFIG_MESON_GXL_PHY create mode 100644 baseconfig/arm/armv7/CONFIG_MESON_WATCHDOG create mode 100644 baseconfig/arm/armv7/CONFIG_MFD_88PM800 create mode 100644 baseconfig/arm/armv7/CONFIG_MFD_88PM805 create mode 100644 baseconfig/arm/armv7/CONFIG_MFD_AAT2870_CORE create mode 100644 baseconfig/arm/armv7/CONFIG_MFD_ARIZONA_SPI create mode 100644 baseconfig/arm/armv7/CONFIG_MFD_AS3711 create mode 100644 baseconfig/arm/armv7/CONFIG_MFD_AS3722 create mode 100644 baseconfig/arm/armv7/CONFIG_MFD_AXP20X create mode 100644 baseconfig/arm/armv7/CONFIG_MFD_AXP20X_I2C create mode 100644 baseconfig/arm/armv7/CONFIG_MFD_AXP20X_RSB create mode 100644 baseconfig/arm/armv7/CONFIG_MFD_CROS_EC create mode 100644 baseconfig/arm/armv7/CONFIG_MFD_CROS_EC_I2C create mode 100644 baseconfig/arm/armv7/CONFIG_MFD_CROS_EC_SPI create mode 100644 baseconfig/arm/armv7/CONFIG_MFD_DA9052_I2C create mode 100644 baseconfig/arm/armv7/CONFIG_MFD_DA9052_SPI create mode 100644 baseconfig/arm/armv7/CONFIG_MFD_DA9055 create mode 100644 baseconfig/arm/armv7/CONFIG_MFD_EXYNOS_LPASS create mode 100644 baseconfig/arm/armv7/CONFIG_MFD_LP8788 create mode 100644 baseconfig/arm/armv7/CONFIG_MFD_MAX14577 create mode 100644 baseconfig/arm/armv7/CONFIG_MFD_MAX77686 create mode 100644 baseconfig/arm/armv7/CONFIG_MFD_MAX77693 create mode 100644 baseconfig/arm/armv7/CONFIG_MFD_MAX8997 create mode 100644 baseconfig/arm/armv7/CONFIG_MFD_MC13XXX_SPI create mode 100644 baseconfig/arm/armv7/CONFIG_MFD_PALMAS create mode 100644 baseconfig/arm/armv7/CONFIG_MFD_PM8921_CORE create mode 100644 baseconfig/arm/armv7/CONFIG_MFD_RC5T583 create mode 100644 baseconfig/arm/armv7/CONFIG_MFD_SEC_CORE create mode 100644 baseconfig/arm/armv7/CONFIG_MFD_SMSC create mode 100644 baseconfig/arm/armv7/CONFIG_MFD_T7L66XB create mode 100644 baseconfig/arm/armv7/CONFIG_MFD_TC6387XB create mode 100644 baseconfig/arm/armv7/CONFIG_MFD_TPS65090 create mode 100644 baseconfig/arm/armv7/CONFIG_MFD_TPS65910 create mode 100644 baseconfig/arm/armv7/CONFIG_MFD_TPS65912 create mode 100644 baseconfig/arm/armv7/CONFIG_MFD_TPS65912_I2C create mode 100644 baseconfig/arm/armv7/CONFIG_MFD_TPS65912_SPI create mode 100644 baseconfig/arm/armv7/CONFIG_MFD_TPS80031 create mode 100644 baseconfig/arm/armv7/CONFIG_MFD_WM831X_SPI create mode 100644 baseconfig/arm/armv7/CONFIG_MFD_WM8994 create mode 100644 baseconfig/arm/armv7/CONFIG_MG_DISK create mode 100644 baseconfig/arm/armv7/CONFIG_MICREL_KS8995MA create mode 100644 baseconfig/arm/armv7/CONFIG_MMC_DW_EXYNOS create mode 100644 baseconfig/arm/armv7/CONFIG_MMC_MESON_GX create mode 100644 baseconfig/arm/armv7/CONFIG_MMC_OMAP_HS create mode 100644 baseconfig/arm/armv7/CONFIG_MMC_SDHCI_DOVE create mode 100644 baseconfig/arm/armv7/CONFIG_MMC_SDHCI_S3C create mode 100644 baseconfig/arm/armv7/CONFIG_MMC_SDHCI_S3C_DMA create mode 100644 baseconfig/arm/armv7/CONFIG_MMC_SUNXI create mode 100644 baseconfig/arm/armv7/CONFIG_MMC_TMIO create mode 100644 baseconfig/arm/armv7/CONFIG_MPL115 create mode 100644 baseconfig/arm/armv7/CONFIG_MPL3115 create mode 100644 baseconfig/arm/armv7/CONFIG_MTD_AFS_PARTS create mode 100644 baseconfig/arm/armv7/CONFIG_MTD_DATAFLASH create mode 100644 baseconfig/arm/armv7/CONFIG_MTD_DATAFLASH_OTP create mode 100644 baseconfig/arm/armv7/CONFIG_MTD_DATAFLASH_WRITE_VERIFY create mode 100644 baseconfig/arm/armv7/CONFIG_MTD_M25P80 create mode 100644 baseconfig/arm/armv7/CONFIG_MTD_MT81xx_NOR create mode 100644 baseconfig/arm/armv7/CONFIG_MTD_NAND create mode 100644 baseconfig/arm/armv7/CONFIG_MTD_NAND_BRCMNAND create mode 100644 baseconfig/arm/armv7/CONFIG_MTD_NAND_CAFE create mode 100644 baseconfig/arm/armv7/CONFIG_MTD_NAND_DENALI create mode 100644 baseconfig/arm/armv7/CONFIG_MTD_NAND_DOCG4 create mode 100644 baseconfig/arm/armv7/CONFIG_MTD_NAND_ECC_SMC create mode 100644 baseconfig/arm/armv7/CONFIG_MTD_NAND_FSMC create mode 100644 baseconfig/arm/armv7/CONFIG_MTD_NAND_GPIO create mode 100644 baseconfig/arm/armv7/CONFIG_MTD_NAND_MTK create mode 100644 baseconfig/arm/armv7/CONFIG_MTD_NAND_MXC create mode 100644 baseconfig/arm/armv7/CONFIG_MTD_NAND_NANDSIM create mode 100644 baseconfig/arm/armv7/CONFIG_MTD_NAND_ORION create mode 100644 baseconfig/arm/armv7/CONFIG_MTD_NAND_PLATFORM create mode 100644 baseconfig/arm/armv7/CONFIG_MTD_NAND_PXA3xx create mode 100644 baseconfig/arm/armv7/CONFIG_MTD_NAND_RICOH create mode 100644 baseconfig/arm/armv7/CONFIG_MTD_NAND_SUNXI create mode 100644 baseconfig/arm/armv7/CONFIG_MTD_NAND_TMIO create mode 100644 baseconfig/arm/armv7/CONFIG_MTD_SPINAND_MT29F create mode 100644 baseconfig/arm/armv7/CONFIG_MTD_SPINAND_ONDIEECC create mode 100644 baseconfig/arm/armv7/CONFIG_MTD_SPI_NOR create mode 100644 baseconfig/arm/armv7/CONFIG_MTD_SPI_NOR_USE_4K_SECTORS create mode 100644 baseconfig/arm/armv7/CONFIG_MTD_SST25L create mode 100644 baseconfig/arm/armv7/CONFIG_MTD_ST_SPI_FSM create mode 100644 baseconfig/arm/armv7/CONFIG_MVPP2 create mode 100644 baseconfig/arm/armv7/CONFIG_NEON create mode 100644 baseconfig/arm/armv7/CONFIG_NET_VENDOR_ALLWINNER create mode 100644 baseconfig/arm/armv7/CONFIG_NET_VENDOR_CIRRUS create mode 100644 baseconfig/arm/armv7/CONFIG_NET_VENDOR_MICROCHIP create mode 100644 baseconfig/arm/armv7/CONFIG_NR_CPUS create mode 100644 baseconfig/arm/armv7/CONFIG_NVMEM_SUNXI_SID create mode 100644 baseconfig/arm/armv7/CONFIG_OABI_COMPAT create mode 100644 baseconfig/arm/armv7/CONFIG_OMAP2_DSS_DEBUG create mode 100644 baseconfig/arm/armv7/CONFIG_OMAP3_THERMAL create mode 100644 baseconfig/arm/armv7/CONFIG_ORION_WATCHDOG create mode 100644 baseconfig/arm/armv7/CONFIG_P54_SPI create mode 100644 baseconfig/arm/armv7/CONFIG_P54_SPI_DEFAULT_EEPROM create mode 100644 baseconfig/arm/armv7/CONFIG_PATA_PLATFORM create mode 100644 baseconfig/arm/armv7/CONFIG_PCIE_ALTERA create mode 100644 baseconfig/arm/armv7/CONFIG_PCIE_ARMADA_8K create mode 100644 baseconfig/arm/armv7/CONFIG_PCI_EXYNOS create mode 100644 baseconfig/arm/armv7/CONFIG_PCI_LAYERSCAPE create mode 100644 baseconfig/arm/armv7/CONFIG_PDA_POWER create mode 100644 baseconfig/arm/armv7/CONFIG_PHY_EXYNOS5250_SATA create mode 100644 baseconfig/arm/armv7/CONFIG_PHY_EXYNOS5_USBDRD create mode 100644 baseconfig/arm/armv7/CONFIG_PHY_EXYNOS_DP_VIDEO create mode 100644 baseconfig/arm/armv7/CONFIG_PHY_EXYNOS_MIPI_VIDEO create mode 100644 baseconfig/arm/armv7/CONFIG_PHY_SAMSUNG_USB2 create mode 100644 baseconfig/arm/armv7/CONFIG_PHY_SUN4I_USB create mode 100644 baseconfig/arm/armv7/CONFIG_PHY_SUN9I_USB create mode 100644 baseconfig/arm/armv7/CONFIG_PINCTRL_AMD create mode 100644 baseconfig/arm/armv7/CONFIG_PINCTRL_ARMADA_370 create mode 100644 baseconfig/arm/armv7/CONFIG_PINCTRL_ARMADA_XP create mode 100644 baseconfig/arm/armv7/CONFIG_PINCTRL_AS3722 create mode 100644 baseconfig/arm/armv7/CONFIG_PINCTRL_BCM281XX create mode 100644 baseconfig/arm/armv7/CONFIG_PINCTRL_DOVE create mode 100644 baseconfig/arm/armv7/CONFIG_PINCTRL_IMX35 create mode 100644 baseconfig/arm/armv7/CONFIG_PINCTRL_MDM9615 create mode 100644 baseconfig/arm/armv7/CONFIG_PINCTRL_MSM8996 create mode 100644 baseconfig/arm/armv7/CONFIG_PINCTRL_SAMSUNG create mode 100644 baseconfig/arm/armv7/CONFIG_PJ4B_ERRATA_4742 create mode 100644 baseconfig/arm/armv7/CONFIG_PL310_ERRATA_588369 create mode 100644 baseconfig/arm/armv7/CONFIG_PL310_ERRATA_727915 create mode 100644 baseconfig/arm/armv7/CONFIG_PL310_ERRATA_753970 create mode 100644 baseconfig/arm/armv7/CONFIG_PL310_ERRATA_769419 create mode 100644 baseconfig/arm/armv7/CONFIG_PL320_MBOX create mode 100644 baseconfig/arm/armv7/CONFIG_PLAT_SPEAR create mode 100644 baseconfig/arm/armv7/CONFIG_PMIC_ADP5520 create mode 100644 baseconfig/arm/armv7/CONFIG_PMIC_DA903X create mode 100644 baseconfig/arm/armv7/CONFIG_PM_DEVFREQ_EVENT create mode 100644 baseconfig/arm/armv7/CONFIG_POWER_RESET_AS3722 create mode 100644 baseconfig/arm/armv7/CONFIG_POWER_RESET_BRCMSTB create mode 100644 baseconfig/arm/armv7/CONFIG_POWER_RESET_QNAP create mode 100644 baseconfig/arm/armv7/CONFIG_POWER_RESET_SYSCON create mode 100644 baseconfig/arm/armv7/CONFIG_POWER_RESET_SYSCON_POWEROFF create mode 100644 baseconfig/arm/armv7/CONFIG_PWM_CROS_EC create mode 100644 baseconfig/arm/armv7/CONFIG_PWM_SAMSUNG create mode 100644 baseconfig/arm/armv7/CONFIG_PWM_SUN4I create mode 100644 baseconfig/arm/armv7/CONFIG_QCOM_EBI2 create mode 100644 baseconfig/arm/armv7/CONFIG_QCOM_SPMI_TEMP_ALARM create mode 100644 baseconfig/arm/armv7/CONFIG_QORIQ_CPUFREQ create mode 100644 baseconfig/arm/armv7/CONFIG_R8188EU create mode 100644 baseconfig/arm/armv7/CONFIG_RCU_FANOUT create mode 100644 baseconfig/arm/armv7/CONFIG_REGMAP_I2C create mode 100644 baseconfig/arm/armv7/CONFIG_REGMAP_IRQ create mode 100644 baseconfig/arm/armv7/CONFIG_REGMAP_MMIO create mode 100644 baseconfig/arm/armv7/CONFIG_REGMAP_SPI create mode 100644 baseconfig/arm/armv7/CONFIG_REGULATOR_ACT8865 create mode 100644 baseconfig/arm/armv7/CONFIG_REGULATOR_AD5398 create mode 100644 baseconfig/arm/armv7/CONFIG_REGULATOR_AS3722 create mode 100644 baseconfig/arm/armv7/CONFIG_REGULATOR_AXP20X create mode 100644 baseconfig/arm/armv7/CONFIG_REGULATOR_DA9210 create mode 100644 baseconfig/arm/armv7/CONFIG_REGULATOR_DA9211 create mode 100644 baseconfig/arm/armv7/CONFIG_REGULATOR_FAN53555 create mode 100644 baseconfig/arm/armv7/CONFIG_REGULATOR_ISL6271A create mode 100644 baseconfig/arm/armv7/CONFIG_REGULATOR_ISL9305 create mode 100644 baseconfig/arm/armv7/CONFIG_REGULATOR_LP3971 create mode 100644 baseconfig/arm/armv7/CONFIG_REGULATOR_LP3972 create mode 100644 baseconfig/arm/armv7/CONFIG_REGULATOR_LP872X create mode 100644 baseconfig/arm/armv7/CONFIG_REGULATOR_LP8755 create mode 100644 baseconfig/arm/armv7/CONFIG_REGULATOR_LTC3589 create mode 100644 baseconfig/arm/armv7/CONFIG_REGULATOR_MAX1586 create mode 100644 baseconfig/arm/armv7/CONFIG_REGULATOR_MAX77686 create mode 100644 baseconfig/arm/armv7/CONFIG_REGULATOR_MAX77802 create mode 100644 baseconfig/arm/armv7/CONFIG_REGULATOR_MAX8649 create mode 100644 baseconfig/arm/armv7/CONFIG_REGULATOR_MAX8660 create mode 100644 baseconfig/arm/armv7/CONFIG_REGULATOR_MAX8952 create mode 100644 baseconfig/arm/armv7/CONFIG_REGULATOR_MAX8973 create mode 100644 baseconfig/arm/armv7/CONFIG_REGULATOR_MAX8997 create mode 100644 baseconfig/arm/armv7/CONFIG_REGULATOR_MT6311 create mode 100644 baseconfig/arm/armv7/CONFIG_REGULATOR_PFUZE100 create mode 100644 baseconfig/arm/armv7/CONFIG_REGULATOR_PV88060 create mode 100644 baseconfig/arm/armv7/CONFIG_REGULATOR_PV88080 create mode 100644 baseconfig/arm/armv7/CONFIG_REGULATOR_PV88090 create mode 100644 baseconfig/arm/armv7/CONFIG_REGULATOR_S2MPA01 create mode 100644 baseconfig/arm/armv7/CONFIG_REGULATOR_S2MPS11 create mode 100644 baseconfig/arm/armv7/CONFIG_REGULATOR_S5M8767 create mode 100644 baseconfig/arm/armv7/CONFIG_REGULATOR_TPS51632 create mode 100644 baseconfig/arm/armv7/CONFIG_REGULATOR_TPS62360 create mode 100644 baseconfig/arm/armv7/CONFIG_REGULATOR_TPS65023 create mode 100644 baseconfig/arm/armv7/CONFIG_REGULATOR_TPS6507X create mode 100644 baseconfig/arm/armv7/CONFIG_REGULATOR_TPS65090 create mode 100644 baseconfig/arm/armv7/CONFIG_REGULATOR_TPS65217 create mode 100644 baseconfig/arm/armv7/CONFIG_REGULATOR_TPS6524X create mode 100644 baseconfig/arm/armv7/CONFIG_REGULATOR_TPS6586X create mode 100644 baseconfig/arm/armv7/CONFIG_REGULATOR_TPS65910 create mode 100644 baseconfig/arm/armv7/CONFIG_REGULATOR_TPS65912 create mode 100644 baseconfig/arm/armv7/CONFIG_REGULATOR_TPS80031 create mode 100644 baseconfig/arm/armv7/CONFIG_REGULATOR_WM8994 create mode 100644 baseconfig/arm/armv7/CONFIG_RTC_DRV_ARMADA38X create mode 100644 baseconfig/arm/armv7/CONFIG_RTC_DRV_AS3722 create mode 100644 baseconfig/arm/armv7/CONFIG_RTC_DRV_DS1305 create mode 100644 baseconfig/arm/armv7/CONFIG_RTC_DRV_DS1343 create mode 100644 baseconfig/arm/armv7/CONFIG_RTC_DRV_DS1347 create mode 100644 baseconfig/arm/armv7/CONFIG_RTC_DRV_DS1390 create mode 100644 baseconfig/arm/armv7/CONFIG_RTC_DRV_M41T93 create mode 100644 baseconfig/arm/armv7/CONFIG_RTC_DRV_M41T94 create mode 100644 baseconfig/arm/armv7/CONFIG_RTC_DRV_MAX6902 create mode 100644 baseconfig/arm/armv7/CONFIG_RTC_DRV_MAX8997 create mode 100644 baseconfig/arm/armv7/CONFIG_RTC_DRV_MCP795 create mode 100644 baseconfig/arm/armv7/CONFIG_RTC_DRV_PL030 create mode 100644 baseconfig/arm/armv7/CONFIG_RTC_DRV_R9701 create mode 100644 baseconfig/arm/armv7/CONFIG_RTC_DRV_RS5C348 create mode 100644 baseconfig/arm/armv7/CONFIG_RTC_DRV_RX4581 create mode 100644 baseconfig/arm/armv7/CONFIG_RTC_DRV_S3C create mode 100644 baseconfig/arm/armv7/CONFIG_RTC_DRV_S5M create mode 100644 baseconfig/arm/armv7/CONFIG_RTC_DRV_SUN6I create mode 100644 baseconfig/arm/armv7/CONFIG_RTC_DRV_SUNXI create mode 100644 baseconfig/arm/armv7/CONFIG_RTC_DRV_TPS65910 create mode 100644 baseconfig/arm/armv7/CONFIG_RTC_DRV_TPS80031 create mode 100644 baseconfig/arm/armv7/CONFIG_S3C2410_WATCHDOG create mode 100644 baseconfig/arm/armv7/CONFIG_SAMSUNG_PM_CHECK create mode 100644 baseconfig/arm/armv7/CONFIG_SAMSUNG_PM_DEBUG create mode 100644 baseconfig/arm/armv7/CONFIG_SAMSUNG_USBPHY create mode 100644 baseconfig/arm/armv7/CONFIG_SATA_HIGHBANK create mode 100644 baseconfig/arm/armv7/CONFIG_SCSI_ACARD create mode 100644 baseconfig/arm/armv7/CONFIG_SENSORS_AD7314 create mode 100644 baseconfig/arm/armv7/CONFIG_SENSORS_ADS7871 create mode 100644 baseconfig/arm/armv7/CONFIG_SENSORS_GPIO_FAN create mode 100644 baseconfig/arm/armv7/CONFIG_SENSORS_ISL29018 create mode 100644 baseconfig/arm/armv7/CONFIG_SENSORS_ISL29028 create mode 100644 baseconfig/arm/armv7/CONFIG_SENSORS_LM70 create mode 100644 baseconfig/arm/armv7/CONFIG_SENSORS_LTC2978_REGULATOR create mode 100644 baseconfig/arm/armv7/CONFIG_SENSORS_MAX1111 create mode 100644 baseconfig/arm/armv7/CONFIG_SERIAL_8250_EM create mode 100644 baseconfig/arm/armv7/CONFIG_SERIAL_AMBA_PL010 create mode 100644 baseconfig/arm/armv7/CONFIG_SERIAL_AMBA_PL010_CONSOLE create mode 100644 baseconfig/arm/armv7/CONFIG_SERIAL_BCM63XX create mode 100644 baseconfig/arm/armv7/CONFIG_SERIAL_IFX6X60 create mode 100644 baseconfig/arm/armv7/CONFIG_SERIAL_MAX3100 create mode 100644 baseconfig/arm/armv7/CONFIG_SERIAL_MAX310X create mode 100644 baseconfig/arm/armv7/CONFIG_SERIAL_MPS2_UART create mode 100644 baseconfig/arm/armv7/CONFIG_SERIAL_SAMSUNG create mode 100644 baseconfig/arm/armv7/CONFIG_SERIAL_SAMSUNG_CONSOLE create mode 100644 baseconfig/arm/armv7/CONFIG_SERIAL_SAMSUNG_DEBUG create mode 100644 baseconfig/arm/armv7/CONFIG_SERIO_SUN4I_PS2 create mode 100644 baseconfig/arm/armv7/CONFIG_SFC create mode 100644 baseconfig/arm/armv7/CONFIG_SI7005 create mode 100644 baseconfig/arm/armv7/CONFIG_SI7020 create mode 100644 baseconfig/arm/armv7/CONFIG_SMP_ON_UP create mode 100644 baseconfig/arm/armv7/CONFIG_SND_ALI5451 create mode 100644 baseconfig/arm/armv7/CONFIG_SND_ARM create mode 100644 baseconfig/arm/armv7/CONFIG_SND_ARMAACI create mode 100644 baseconfig/arm/armv7/CONFIG_SND_KIRKWOOD_SOC create mode 100644 baseconfig/arm/armv7/CONFIG_SND_KIRKWOOD_SOC_ARMADA370_DB create mode 100644 baseconfig/arm/armv7/CONFIG_SND_SAMSUNG_PCM create mode 100644 baseconfig/arm/armv7/CONFIG_SND_SAMSUNG_SPDIF create mode 100644 baseconfig/arm/armv7/CONFIG_SND_SOC_AC97_BUS create mode 100644 baseconfig/arm/armv7/CONFIG_SND_SOC_AC97_CODEC create mode 100644 baseconfig/arm/armv7/CONFIG_SND_SOC_APQ8016_SBC create mode 100644 baseconfig/arm/armv7/CONFIG_SND_SOC_ARNDALE_RT5631_ALC5631 create mode 100644 baseconfig/arm/armv7/CONFIG_SND_SOC_RK3399_GRU_SOUND create mode 100644 baseconfig/arm/armv7/CONFIG_SND_SOC_RT5631 create mode 100644 baseconfig/arm/armv7/CONFIG_SND_SOC_SAMSUNG create mode 100644 baseconfig/arm/armv7/CONFIG_SND_SOC_SAMSUNG_SMDK_SPDIF create mode 100644 baseconfig/arm/armv7/CONFIG_SND_SOC_SAMSUNG_SMDK_WM8994 create mode 100644 baseconfig/arm/armv7/CONFIG_SND_SOC_SMDK_WM8994_PCM create mode 100644 baseconfig/arm/armv7/CONFIG_SND_SOC_SNOW create mode 100644 baseconfig/arm/armv7/CONFIG_SND_SOC_TAS571X create mode 100644 baseconfig/arm/armv7/CONFIG_SND_SOC_TEGRA create mode 100644 baseconfig/arm/armv7/CONFIG_SND_SOC_TEGRA30_AHUB create mode 100644 baseconfig/arm/armv7/CONFIG_SND_SOC_TEGRA30_I2S create mode 100644 baseconfig/arm/armv7/CONFIG_SND_SOC_TEGRA_MAX98090 create mode 100644 baseconfig/arm/armv7/CONFIG_SND_SOC_TEGRA_RT5640 create mode 100644 baseconfig/arm/armv7/CONFIG_SND_SOC_TEGRA_RT5677 create mode 100644 baseconfig/arm/armv7/CONFIG_SND_SOC_TEGRA_SGTL5000 create mode 100644 baseconfig/arm/armv7/CONFIG_SND_SOC_TS3A227E create mode 100644 baseconfig/arm/armv7/CONFIG_SND_SUN4I_CODEC create mode 100644 baseconfig/arm/armv7/CONFIG_SND_SUN4I_I2S create mode 100644 baseconfig/arm/armv7/CONFIG_SND_SUN4I_SPDIF create mode 100644 baseconfig/arm/armv7/CONFIG_SOC_BRCMSTB create mode 100644 baseconfig/arm/armv7/CONFIG_SOC_EXYNOS3250 create mode 100644 baseconfig/arm/armv7/CONFIG_SOC_EXYNOS5250 create mode 100644 baseconfig/arm/armv7/CONFIG_SOC_EXYNOS5260 create mode 100644 baseconfig/arm/armv7/CONFIG_SOC_EXYNOS5410 create mode 100644 baseconfig/arm/armv7/CONFIG_SOC_EXYNOS5420 create mode 100644 baseconfig/arm/armv7/CONFIG_SOC_EXYNOS5440 create mode 100644 baseconfig/arm/armv7/CONFIG_SOC_EXYNOS5800 create mode 100644 baseconfig/arm/armv7/CONFIG_SPI_CADENCE_QUADSPI create mode 100644 baseconfig/arm/armv7/CONFIG_SPI_PXA2XX create mode 100644 baseconfig/arm/armv7/CONFIG_SPI_S3C64XX create mode 100644 baseconfig/arm/armv7/CONFIG_SPI_SUN4I create mode 100644 baseconfig/arm/armv7/CONFIG_SPI_SUN6I create mode 100644 baseconfig/arm/armv7/CONFIG_STMMAC_PLATFORM create mode 100644 baseconfig/arm/armv7/CONFIG_SUN4I_EMAC create mode 100644 baseconfig/arm/armv7/CONFIG_SUN8I_EMAC create mode 100644 baseconfig/arm/armv7/CONFIG_SUN8I_H3_CCU create mode 100644 baseconfig/arm/armv7/CONFIG_SUNGEM create mode 100644 baseconfig/arm/armv7/CONFIG_SUNXI_CCU create mode 100644 baseconfig/arm/armv7/CONFIG_SUNXI_SRAM create mode 100644 baseconfig/arm/armv7/CONFIG_SUNXI_WATCHDOG create mode 100644 baseconfig/arm/armv7/CONFIG_SWP_EMULATE create mode 100644 baseconfig/arm/armv7/CONFIG_TCG_TIS_I2C_INFINEON create mode 100644 baseconfig/arm/armv7/CONFIG_TEGRA_GMI create mode 100644 baseconfig/arm/armv7/CONFIG_THUMB2_KERNEL create mode 100644 baseconfig/arm/armv7/CONFIG_TI_DAC7512 create mode 100644 baseconfig/arm/armv7/CONFIG_TI_DAVINCI_MDIO create mode 100644 baseconfig/arm/armv7/CONFIG_TI_EDMA create mode 100644 baseconfig/arm/armv7/CONFIG_TI_SOC_THERMAL create mode 100644 baseconfig/arm/armv7/CONFIG_TI_THERMAL create mode 100644 baseconfig/arm/armv7/CONFIG_TOUCHSCREEN_AD7877 create mode 100644 baseconfig/arm/armv7/CONFIG_TOUCHSCREEN_ADS7846 create mode 100644 baseconfig/arm/armv7/CONFIG_TOUCHSCREEN_CHIPONE_ICN8318 create mode 100644 baseconfig/arm/armv7/CONFIG_TOUCHSCREEN_MC13783 create mode 100644 baseconfig/arm/armv7/CONFIG_TOUCHSCREEN_SUN4I create mode 100644 baseconfig/arm/armv7/CONFIG_TOUCHSCREEN_TSC2005 create mode 100644 baseconfig/arm/armv7/CONFIG_TWL4030_CORE create mode 100644 baseconfig/arm/armv7/CONFIG_TWL6040_CORE create mode 100644 baseconfig/arm/armv7/CONFIG_UACCESS_WITH_MEMCPY create mode 100644 baseconfig/arm/armv7/CONFIG_UBIFS_FS create mode 100644 baseconfig/arm/armv7/CONFIG_UBIFS_FS_ADVANCED_COMPR create mode 100644 baseconfig/arm/armv7/CONFIG_UBIFS_FS_LZO create mode 100644 baseconfig/arm/armv7/CONFIG_UBIFS_FS_ZLIB create mode 100644 baseconfig/arm/armv7/CONFIG_USB_DWC3_EXYNOS create mode 100644 baseconfig/arm/armv7/CONFIG_USB_EHCI_EXYNOS create mode 100644 baseconfig/arm/armv7/CONFIG_USB_EHCI_HCD_ORION create mode 100644 baseconfig/arm/armv7/CONFIG_USB_MUSB_SUNXI create mode 100644 baseconfig/arm/armv7/CONFIG_USB_OHCI_EXYNOS create mode 100644 baseconfig/arm/armv7/CONFIG_USE_OF create mode 100644 baseconfig/arm/armv7/CONFIG_VFIO_PLATFORM_AMDXGBE_RESET create mode 100644 baseconfig/arm/armv7/CONFIG_VFIO_PLATFORM_CALXEDAXGMAC_RESET create mode 100644 baseconfig/arm/armv7/CONFIG_VFP create mode 100644 baseconfig/arm/armv7/CONFIG_VFPv3 create mode 100644 baseconfig/arm/armv7/CONFIG_VIDEO_EXYNOS4_FIMC_IS create mode 100644 baseconfig/arm/armv7/CONFIG_VIDEO_EXYNOS4_ISP_DMA_CAPTURE create mode 100644 baseconfig/arm/armv7/CONFIG_VIDEO_EXYNOS_FIMC_LITE create mode 100644 baseconfig/arm/armv7/CONFIG_VIDEO_S5P_FIMC create mode 100644 baseconfig/arm/armv7/CONFIG_VIDEO_S5P_MIPI_CSIS create mode 100644 baseconfig/arm/armv7/CONFIG_VIDEO_SAMSUNG_EXYNOS4_IS create mode 100644 baseconfig/arm/armv7/CONFIG_VIDEO_SAMSUNG_EXYNOS_GSC create mode 100644 baseconfig/arm/armv7/CONFIG_VIDEO_SAMSUNG_S5P_CEC create mode 100644 baseconfig/arm/armv7/CONFIG_VIDEO_SAMSUNG_S5P_G2D create mode 100644 baseconfig/arm/armv7/CONFIG_VIDEO_SAMSUNG_S5P_JPEG create mode 100644 baseconfig/arm/armv7/CONFIG_VIDEO_SAMSUNG_S5P_MFC create mode 100644 baseconfig/arm/armv7/CONFIG_VIDEO_SAMSUNG_S5P_TV create mode 100644 baseconfig/arm/armv7/CONFIG_W1_MASTER_GPIO create mode 100644 baseconfig/arm/armv7/CONFIG_XIP_KERNEL create mode 100644 baseconfig/arm/armv7/CONFIG_ZBOOT_ROM_BSS create mode 100644 baseconfig/arm/armv7/CONFIG_ZBOOT_ROM_TEXT create mode 100644 baseconfig/arm/armv7/README create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_AHCI_IMX create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_AK8975 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_AM335X_CONTROL_USB create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_AM335X_PHY_USB create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_APQ_GCC_8084 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_APQ_MMCC_8084 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_ARCH_BERLIN create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_ARCH_EXYNOS4 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_ARCH_KEYSTONE create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_ARCH_MDM9615 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_ARCH_MMP create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_ARCH_MSM8960 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_ARCH_MSM8974 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_ARCH_MSM8X60 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_ARCH_MXC create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_ARCH_OMAP2PLUS_TYPICAL create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_ARCH_OMAP3 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_ARCH_OMAP4 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_ARCH_QCOM create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_ARCH_TEGRA create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_ARCH_TEGRA_2x_SOC create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_ARCH_TEGRA_3x_SOC create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_ARCH_ZYNQ create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_ARM_IMX6Q_CPUFREQ create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_ARM_LPAE create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_ARM_OMAP2PLUS_CPUFREQ create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_ARM_VIRT_EXT create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_ARM_ZYNQ_CPUIDLE create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_AXI_DMAC create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_BACKLIGHT_DA9052 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_BACKLIGHT_PANDORA create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_BACKLIGHT_TPS65217 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_BATTERY_BQ27XXX create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_BATTERY_BQ27XXX_I2C create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_BATTERY_DA9052 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_BATTERY_RX51 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_BATTERY_TWL4030_MADC create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_CADENCE_WATCHDOG create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_CAN_C_CAN create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_CAN_C_CAN_PLATFORM create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_CAN_FLEXCAN create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_CHARGER_BQ2415X create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_CHARGER_ISP1704 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_CHARGER_TPS65217 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_CHARGER_TWL4030 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_CLK_TWL6040 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_CM36651 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_COMMON_CLK_AXI_CLKGEN create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_COMMON_CLK_PALMAS create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_COMMON_CLK_QCOM create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_COMMON_CLK_SI570 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_COMMON_CLK_TI_ADPLL create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_COMMON_CLK_XLNX_CLKWZRD create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_CRYPTO_DEV_FSL_CAAM create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_CRYPTO_DEV_FSL_CAAM_AHASH_API create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_CRYPTO_DEV_FSL_CAAM_CRYPTO_API create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_CRYPTO_DEV_FSL_CAAM_DEBUG create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_CRYPTO_DEV_FSL_CAAM_INTC create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_CRYPTO_DEV_FSL_CAAM_INTC_COUNT_THLD create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_CRYPTO_DEV_FSL_CAAM_INTC_TIME_THLD create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_CRYPTO_DEV_FSL_CAAM_JR create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_CRYPTO_DEV_FSL_CAAM_PKC_API create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_CRYPTO_DEV_FSL_CAAM_RINGSIZE create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_CRYPTO_DEV_FSL_CAAM_RNG_API create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_CRYPTO_DEV_MXC_SCC create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_CRYPTO_DEV_MXS_DCP create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_CRYPTO_DEV_OMAP_AES create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_CRYPTO_DEV_OMAP_DES create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_CRYPTO_DEV_OMAP_SHAM create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_CRYPTO_DEV_PICOXCELL create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_CRYPTO_DEV_QCE create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_CRYPTO_DEV_SAHARA create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_DA9052_WATCHDOG create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_DA9055_WATCHDOG create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_DDR create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_DMA_OMAP create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_DRM_ETNAVIV create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_DRM_ETNAVIV_REGISTER_LOGGING create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_DRM_IMX create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_DRM_IMX_HDMI create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_DRM_IMX_IPUV3 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_DRM_IMX_LDB create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_DRM_IMX_PARALLEL_DISPLAY create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_DRM_IMX_TVE create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_DRM_MSM create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_DRM_MSM_DSI create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_DRM_MSM_HDMI_HDCP create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_DRM_MSM_REGISTER_LOGGING create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_DRM_OMAP create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_DRM_OMAP_CONNECTOR_ANALOG_TV create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_DRM_OMAP_CONNECTOR_DVI create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_DRM_OMAP_CONNECTOR_HDMI create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_DRM_OMAP_ENCODER_OPA362 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_DRM_OMAP_ENCODER_TFP410 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_DRM_OMAP_ENCODER_TPD12S015 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_DRM_OMAP_NUM_CRTCS create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_DRM_OMAP_PANEL_DPI create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_DRM_OMAP_PANEL_DSI_CM create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_DRM_OMAP_PANEL_LGPHILIPS_LB035Q02 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_DRM_OMAP_PANEL_NEC_NL8048HL11 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_DRM_OMAP_PANEL_SHARP_LS037V7DW01 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_DRM_OMAP_PANEL_SONY_ACX565AKM create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_DRM_OMAP_PANEL_TPO_TD028TTEC1 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_DRM_OMAP_PANEL_TPO_TD043MTEA1 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_DRM_TILCDC create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_DRM_TILCDC_SLAVE_COMPAT create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_EDAC_SYNOPSYS create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_EXTCON create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_EXTCON_PALMAS create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_FB_IMX create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_FB_MX3 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_FB_MXS create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_FEC create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_FSL_PQ_MDIO create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_FSL_XGMAC_MDIO create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_GIANFAR create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_GPIO_DA9052 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_GPIO_DA9055 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_GPIO_OMAP create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_GPIO_PALMAS create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_GPIO_STMPE create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_GPIO_TPS65218 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_GPIO_TPS6586X create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_GPIO_TS4800 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_GPIO_TS4900 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_GPIO_TWL4030 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_GPIO_TWL6040 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_GPIO_XILINX create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_GPIO_ZYNQ create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_GS_FPGABOOT create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_HDQ_MASTER_OMAP create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_HUGETLB_PAGE create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_HWSPINLOCK_OMAP create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_HWSPINLOCK_QCOM create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_HW_RANDOM_MSM create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_HW_RANDOM_MXC_RNGA create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_HW_RANDOM_OMAP create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_HW_RANDOM_OMAP3_ROM create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_I2C_CADENCE create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_I2C_IMX create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_I2C_OMAP create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_I2C_PXA create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_I2C_PXA_SLAVE create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_I2C_QUP create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_I2C_XILINX create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_IMX2_WDT create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_IMX7D_ADC create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_IMX_DMA create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_IMX_GPCV2 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_IMX_IPUV3_CORE create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_IMX_SDMA create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_IMX_THERMAL create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_IMX_WEIM create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_INPUT_88PM80X_ONKEY create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_INPUT_DA9052_ONKEY create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_INPUT_DA9055_ONKEY create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_INPUT_MATRIXKMAP create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_INPUT_PALMAS_PWRBUTTON create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_INPUT_PM8941_PWRKEY create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_INPUT_PM8XXX_VIBRATOR create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_INPUT_PMIC8XXX_PWRKEY create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_INPUT_PWM_BEEPER create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_INPUT_TPS65218_PWRBUTTON create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_INPUT_TWL4030_PWRBUTTON create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_INPUT_TWL4030_VIBRA create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_INPUT_TWL6040_VIBRA create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_IR_RX51 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_KEYBOARD_IMX create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_KEYBOARD_NVEC create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_KEYBOARD_OMAP4 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_KEYBOARD_PMIC8XXX create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_KEYBOARD_PXA27x create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_KEYBOARD_SAMSUNG create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_KEYBOARD_SNVS_PWRKEY create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_KEYBOARD_STMPE create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_KEYBOARD_TWL4030 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_LATTICE_ECP3_CONFIG create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_LEDS_DA9052 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_LEDS_MC13783 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_LEDS_PM8058 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_LEDS_TCA6507 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_MACH_BROWNSTONE create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_MACH_FLINT create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_MACH_MARVELL_JASPER create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_MACH_MMP2_DT create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_MACH_OMAP3517EVM create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_MACH_OMAP3_PANDORA create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_MACH_OMAP_LDP create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_MACH_SUN4I create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_MACH_SUN5I create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_MDM_GCC_9615 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_MDM_LCC_9615 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_MFD_88PM800 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_MFD_88PM805 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_MFD_DA9052_I2C create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_MFD_DA9052_SPI create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_MFD_DA9055 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_MFD_MAX8907 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_MFD_MC13XXX_SPI create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_MFD_NVEC create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_MFD_OMAP_USB_HOST create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_MFD_PALMAS create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_MFD_PM8XXX create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_MFD_QCOM_RPM create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_MFD_STMPE create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_MFD_T7L66XB create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_MFD_TC6387XB create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_MFD_TI_AM335X_TSCADC create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_MFD_TPS65217 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_MFD_TPS65218 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_MFD_TPS6586X create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_MFD_TPS80031 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_MMC_MXC create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_MMC_OMAP create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_MMC_QCOM_DML create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_MMC_SDHCI_ESDHC_IMX create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_MMC_SDHCI_MSM create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_MMC_SDHCI_PXAV2 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_MMP_PDMA create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_MMP_TDMA create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_MSM_GCC_8660 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_MSM_GCC_8916 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_MSM_GCC_8960 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_MSM_GCC_8974 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_MSM_GCC_8996 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_MSM_IOMMU create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_MSM_LCC_8960 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_MSM_MMCC_8960 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_MSM_MMCC_8974 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_MSM_MMCC_8996 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_MTD_NAND_GPMI_NAND create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_MTD_NAND_OMAP2 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_MTD_NAND_OMAP_BCH create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_MTD_NAND_QCOM create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_MTD_ONENAND_OMAP2 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_MX3_IPU create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_MX3_IPU_IRQS create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_MXC_DEBUG_BOARD create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_MXS_DMA create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_NET_VENDOR_FREESCALE create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_NET_VENDOR_XILINX create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_NFC_WILINK create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_NVEC_PAZ00 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_NVEC_POWER create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_NVMEM_IMX_OCOTP create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_OMAP2PLUS_MBOX create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_OMAP2_DSS create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_OMAP2_DSS_COLLECT_IRQ_STATS create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_OMAP2_DSS_DEBUGFS create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_OMAP2_DSS_DPI create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_OMAP2_DSS_DSI create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_OMAP2_DSS_MIN_FCK_PER_PCK create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_OMAP2_DSS_RFBI create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_OMAP2_DSS_SDI create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_OMAP2_DSS_SLEEP_AFTER_VENC_RESET create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_OMAP2_DSS_VENC create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_OMAP2_VRFB create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_OMAP3_L2_AUX_SECURE_SAVE_RESTORE create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_OMAP3_SDRC_AC_TIMING create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_OMAP4_DSS_HDMI create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_OMAP4_THERMAL create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_OMAP5_DSS_HDMI create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_OMAP5_ERRATA_801819 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_OMAP5_THERMAL create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_OMAP_32K_TIMER create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_OMAP_CONTROL_PHY create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_OMAP_INTERCONNECT create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_OMAP_IOMMU create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_OMAP_IOMMU_DEBUG create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_OMAP_MBOX_KFIFO_SIZE create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_OMAP_MUX create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_OMAP_MUX_DEBUG create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_OMAP_MUX_WARNINGS create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_OMAP_OCP2SCP create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_OMAP_PACKAGE_CBB create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_OMAP_PACKAGE_CUS create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_OMAP_REMOTEPROC create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_OMAP_RESET_CLOCKS create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_OMAP_USB2 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_OMAP_WATCHDOG create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_PALMAS_GPADC create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_PATA_IMX create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_PCIE_QCOM create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_PCIE_XILINX create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_PCI_DRA7XX create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_PCI_IMX6 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_PHY_DM816X_USB create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_PHY_QCOM_APQ8064_SATA create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_PHY_QCOM_UFS create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_PINCTRL_APQ8064 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_PINCTRL_APQ8084 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_PINCTRL_IMX6SL create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_PINCTRL_MSM8660 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_PINCTRL_MSM8916 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_PINCTRL_MSM8960 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_PINCTRL_MSM8X74 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_PINCTRL_PALMAS create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_PINCTRL_QCOM_SPMI_PMIC create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_PINCTRL_QCOM_SSBI_PMIC create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_PINCTRL_ZYNQ create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_PL310_ERRATA_588369 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_PL310_ERRATA_727915 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_POWER_AVS create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_POWER_AVS_OMAP create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_POWER_AVS_OMAP_CLASS3 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_POWER_RESET_IMX create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_POWER_RESET_MSM create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_PWM_IMX create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_PWM_OMAP_DMTIMER create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_PWM_STMPE create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_PWM_TIECAP create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_PWM_TIEHRPWM create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_PWM_TIPWMSS create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_PWM_TWL create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_PWM_TWL_LED create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_PXA_DMA create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_QCOM_BAM_DMA create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_QCOM_CLK_RPM create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_QCOM_CLK_SMD_RPM create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_QCOM_COINCELL create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_QCOM_GSBI create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_QCOM_PM create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_QCOM_Q6V5_PIL create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_QCOM_QFPROM create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_QCOM_SMD create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_QCOM_SMD_RPM create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_QCOM_SMEM create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_QCOM_SMP2P create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_QCOM_SMSM create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_QCOM_SPMI_IADC create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_QCOM_SPMI_VADC create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_QCOM_TSENS create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_QCOM_WCNSS_CTRL create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_QCOM_WCNSS_PIL create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_QCOM_WDT create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_RADIO_WL128X create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_REGULATOR_88PM800 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_REGULATOR_AD5398 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_REGULATOR_ANATOP create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_REGULATOR_DA9052 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_REGULATOR_DA9055 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_REGULATOR_FAN53555 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_REGULATOR_ISL6271A create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_REGULATOR_ISL9305 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_REGULATOR_LP3971 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_REGULATOR_LP3972 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_REGULATOR_LP872X create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_REGULATOR_LP8755 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_REGULATOR_MAX1586 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_REGULATOR_MAX8649 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_REGULATOR_MAX8660 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_REGULATOR_MAX8907 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_REGULATOR_MAX8952 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_REGULATOR_MC13783 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_REGULATOR_MC13892 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_REGULATOR_PALMAS create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_REGULATOR_PBIAS create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_REGULATOR_QCOM_RPM create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_REGULATOR_QCOM_SMD_RPM create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_REGULATOR_QCOM_SPMI create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_REGULATOR_TI_ABB create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_REGULATOR_TPS65217 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_REGULATOR_TPS65218 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_REGULATOR_TWL4030 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_REMOTEPROC create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_RTC_DRV_DA9052 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_RTC_DRV_DA9055 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_RTC_DRV_IMXDI create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_RTC_DRV_MAX8907 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_RTC_DRV_MC13XXX create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_RTC_DRV_MXC create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_RTC_DRV_OMAP create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_RTC_DRV_PALMAS create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_RTC_DRV_PM8XXX create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_RTC_DRV_SNVS create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_RTC_DRV_TPS6586X create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_RTC_DRV_TWL4030 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_RTC_DRV_TWL92330 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SENSORS_DA9052_ADC create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SENSORS_DA9055 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SENSORS_MC13783_ADC create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SENSORS_TWL4030_MADC create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SERIAL_8250_OMAP create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SERIAL_IMX create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SERIAL_IMX_CONSOLE create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SERIAL_MSM create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SERIAL_MSM_CONSOLE create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SERIAL_OMAP create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SERIAL_OMAP_CONSOLE create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SERIAL_PXA create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SERIAL_PXA_CONSOLE create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SERIAL_UARTLITE create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SERIAL_UARTLITE_CONSOLE create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SERIAL_XILINX_PS_UART create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SERIAL_XILINX_PS_UART_CONSOLE create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SERIO_NVEC_PS2 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SERIO_OLPC_APSP create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SND_AM33XX_SOC_EVM create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SND_DAVINCI_SOC create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SND_DAVINCI_SOC_GENERIC_EVM create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SND_DAVINCI_SOC_I2S create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SND_DAVINCI_SOC_MCASP create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SND_DAVINCI_SOC_VCIF create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SND_EDMA_SOC create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SND_IMX_SOC create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SND_MMP_SOC create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SND_OMAP_SOC create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SND_OMAP_SOC_AM3517EVM create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SND_OMAP_SOC_DMIC create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SND_OMAP_SOC_HDMI_AUDIO create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SND_OMAP_SOC_MCBSP create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SND_OMAP_SOC_MCPDM create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SND_OMAP_SOC_OMAP3_PANDORA create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SND_OMAP_SOC_OMAP_ABE_TWL6040 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SND_OMAP_SOC_OMAP_TWL4030 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SND_OMAP_SOC_RX51 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SND_PXA910_SOC create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SND_SOC_ADI create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SND_SOC_ADI_AXI_I2S create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SND_SOC_ADI_AXI_SPDIF create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SND_SOC_CS42XX8_I2C create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SND_SOC_ES8328 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SND_SOC_ES8328_I2C create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SND_SOC_ES8328_SPI create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SND_SOC_EUKREA_TLV320 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SND_SOC_FSL_ASOC_CARD create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SND_SOC_FSL_ASRC create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SND_SOC_FSL_ESAI create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SND_SOC_FSL_SAI create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SND_SOC_FSL_SPDIF create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SND_SOC_FSL_SSI create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SND_SOC_FSL_UTILS create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SND_SOC_I2C_AND_SPI create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SND_SOC_IMX_AUDMUX create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SND_SOC_IMX_ES8328 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SND_SOC_IMX_MC13783 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SND_SOC_IMX_PCM_DMA create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SND_SOC_IMX_PCM_FIQ create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SND_SOC_IMX_SGTL5000 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SND_SOC_IMX_SPDIF create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SND_SOC_IMX_SSI create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SND_SOC_IMX_WM8962 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SND_SOC_LPASS_CPU create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SND_SOC_LPASS_PLATFORM create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SND_SOC_QCOM create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SND_SOC_SGTL5000 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SND_SOC_STORM create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SND_SOC_TEGRA20_AC97 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SND_SOC_TEGRA20_DAS create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SND_SOC_TEGRA20_SPDIF create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SND_SOC_TEGRA_ALC5632 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SND_SOC_TEGRA_TRIMSLICE create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SND_SOC_TEGRA_WM8753 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SND_SOC_TEGRA_WM8903 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SND_SOC_TEGRA_WM9712 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SND_SOC_TLV320AIC23 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SND_SOC_TLV320AIC23_I2C create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SND_SOC_TLV320AIC23_SPI create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SND_SOC_TLV320AIC31XX create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SND_SOC_TLV320AIC3X create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SND_SOC_TWL4030 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SND_SOC_TWL6040 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SND_SOC_WM8731 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SND_SOC_WM8753 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SND_SOC_WM8903 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SND_SOC_WM8960 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SND_SOC_WM8962 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SOC_AM33XX create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SOC_AM43XX create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SOC_DRA7XX create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SOC_EXYNOS4212 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SOC_EXYNOS4412 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SOC_EXYNOS4415 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SOC_HAS_REALTIME_COUNTER create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SOC_IMX50 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SOC_IMX51 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SOC_IMX53 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SOC_IMX6 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SOC_IMX6Q create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SOC_IMX6SL create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SOC_IMX6SX create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SOC_IMX6UL create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SOC_IMX7D create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SOC_LS1021A create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SOC_OMAP3430 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SOC_OMAP5 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SOC_TI81XX create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SOC_VF610 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SPI_CADENCE create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SPI_DAVINCI create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SPI_FSL_QUADSPI create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SPI_IMX create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SPI_MXS create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SPI_OMAP24XX create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SPI_QUP create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SPI_TEGRA20_SFLASH create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SPI_TEGRA20_SLINK create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SPI_TI_QSPI create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SPI_XILINX create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_SPMI_MSM_PMIC_ARB create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_STMPE_I2C create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_STMPE_SPI create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_TEGRA20_MC create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_TEGRA_IOMMU_GART create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_TI_ADC081C create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_TI_AM335X_ADC create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_TI_CPPI41 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_TI_CPSW create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_TI_CPSW_ALE create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_TI_CPSW_PHY_SEL create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_TI_CPTS create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_TI_DAC7512 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_TI_DAVINCI_CPDMA create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_TI_DAVINCI_EMAC create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_TI_DAVINCI_MDIO create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_TI_EMIF create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_TI_PIPE3 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_TI_ST create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_TI_SYSCON_RESET create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_TOUCHSCREEN_DA9052 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_TOUCHSCREEN_IMX6UL_TSC create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_TOUCHSCREEN_STMPE create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_TWL4030_CORE create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_TWL4030_MADC create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_TWL4030_POWER create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_TWL4030_USB create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_TWL4030_WATCHDOG create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_TWL6030_GPADC create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_TWL6030_USB create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_TWL6040_CORE create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_UIO_PRUSS create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_USB_CHIPIDEA create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_USB_CHIPIDEA_HOST create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_USB_CHIPIDEA_UDC create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_USB_DWC3_OMAP create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_USB_EHCI_HCD_OMAP create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_USB_EHCI_MSM create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_USB_EHCI_MXC create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_USB_FSL_USB2 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_USB_GADGET_XILINX create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_USB_IMX21_HCD create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_USB_INVENTRA_DMA create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_USB_MSM_OTG create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_USB_MUSB_AM335X_CHILD create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_USB_MUSB_AM35X create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_USB_MUSB_OMAP2PLUS create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_USB_MXS_PHY create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_USB_OHCI_HCD_OMAP3 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_USB_QCOM_8X16_PHY create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_USB_TI_CPPI41_DMA create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_V4L_PLATFORM_DRIVERS create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_VIDEO_ADP1653 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_VIDEO_AM437X_VPFE create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_VIDEO_CODA create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_VIDEO_DM355_CCDC create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_VIDEO_DM6446_CCDC create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_VIDEO_OMAP2_VOUT create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_VIDEO_OMAP3 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_VIDEO_OMAP3_DEBUG create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_VIDEO_OMAP4 create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_VIDEO_SAMSUNG_EXYNOS4_IS create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_W1_MASTER_MXC create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_WKUP_M3_IPC create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_WKUP_M3_RPROC create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_XEN create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_XILINX_EMACLITE create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_XILINX_WATCHDOG create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_XILINX_XADC create mode 100644 baseconfig/arm/armv7/armv7/CONFIG_XILLYBUS_OF create mode 100644 baseconfig/arm/armv7/lpae/CONFIG_AM335X_PHY_USB create mode 100644 baseconfig/arm/armv7/lpae/CONFIG_ARCH_AXXIA create mode 100644 baseconfig/arm/armv7/lpae/CONFIG_ARCH_KEYSTONE create mode 100644 baseconfig/arm/armv7/lpae/CONFIG_ARCH_MXC create mode 100644 baseconfig/arm/armv7/lpae/CONFIG_ARCH_OMAP3 create mode 100644 baseconfig/arm/armv7/lpae/CONFIG_ARCH_OMAP4 create mode 100644 baseconfig/arm/armv7/lpae/CONFIG_ARCH_TEGRA_2x_SOC create mode 100644 baseconfig/arm/armv7/lpae/CONFIG_ARCH_TEGRA_3x_SOC create mode 100644 baseconfig/arm/armv7/lpae/CONFIG_ARCH_ZYNQ create mode 100644 baseconfig/arm/armv7/lpae/CONFIG_ARM_LPAE create mode 100644 baseconfig/arm/armv7/lpae/CONFIG_ARM_VIRT_EXT create mode 100644 baseconfig/arm/armv7/lpae/CONFIG_CPU_SW_DOMAIN_PAN create mode 100644 baseconfig/arm/armv7/lpae/CONFIG_DAVINCI_WATCHDOG create mode 100644 baseconfig/arm/armv7/lpae/CONFIG_DRM_OMAP create mode 100644 baseconfig/arm/armv7/lpae/CONFIG_EXTCON create mode 100644 baseconfig/arm/armv7/lpae/CONFIG_GPIO_DAVINCI create mode 100644 baseconfig/arm/armv7/lpae/CONFIG_GPIO_SYSCON create mode 100644 baseconfig/arm/armv7/lpae/CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE create mode 100644 baseconfig/arm/armv7/lpae/CONFIG_HVC_XEN create mode 100644 baseconfig/arm/armv7/lpae/CONFIG_HVC_XEN_FRONTEND create mode 100644 baseconfig/arm/armv7/lpae/CONFIG_I2C_DAVINCI create mode 100644 baseconfig/arm/armv7/lpae/CONFIG_INPUT_XEN_KBDDEV_FRONTEND create mode 100644 baseconfig/arm/armv7/lpae/CONFIG_KEYSTONE_IRQ create mode 100644 baseconfig/arm/armv7/lpae/CONFIG_KEYSTONE_USB_PHY create mode 100644 baseconfig/arm/armv7/lpae/CONFIG_KVM create mode 100644 baseconfig/arm/armv7/lpae/CONFIG_KVM_ARM_HOST create mode 100644 baseconfig/arm/armv7/lpae/CONFIG_MFD_MAX8907 create mode 100644 baseconfig/arm/armv7/lpae/CONFIG_MTD_NAND_DAVINCI create mode 100644 baseconfig/arm/armv7/lpae/CONFIG_PCI_KEYSTONE create mode 100644 baseconfig/arm/armv7/lpae/CONFIG_POWER_RESET_KEYSTONE create mode 100644 baseconfig/arm/armv7/lpae/CONFIG_SND_SOC_TEGRA20_AC97 create mode 100644 baseconfig/arm/armv7/lpae/CONFIG_SND_SOC_TEGRA20_DAS create mode 100644 baseconfig/arm/armv7/lpae/CONFIG_SND_SOC_TEGRA20_SPDIF create mode 100644 baseconfig/arm/armv7/lpae/CONFIG_SND_SOC_TEGRA_ALC5632 create mode 100644 baseconfig/arm/armv7/lpae/CONFIG_SND_SOC_TEGRA_TRIMSLICE create mode 100644 baseconfig/arm/armv7/lpae/CONFIG_SND_SOC_TEGRA_WM8753 create mode 100644 baseconfig/arm/armv7/lpae/CONFIG_SND_SOC_TEGRA_WM8903 create mode 100644 baseconfig/arm/armv7/lpae/CONFIG_SND_SOC_TEGRA_WM9712 create mode 100644 baseconfig/arm/armv7/lpae/CONFIG_SOC_AM33XX create mode 100644 baseconfig/arm/armv7/lpae/CONFIG_SOC_AM43XX create mode 100644 baseconfig/arm/armv7/lpae/CONFIG_SOC_DRA7XX create mode 100644 baseconfig/arm/armv7/lpae/CONFIG_SOC_OMAP5 create mode 100644 baseconfig/arm/armv7/lpae/CONFIG_SPI_DAVINCI create mode 100644 baseconfig/arm/armv7/lpae/CONFIG_SPI_TEGRA20_SFLASH create mode 100644 baseconfig/arm/armv7/lpae/CONFIG_SPI_TEGRA20_SLINK create mode 100644 baseconfig/arm/armv7/lpae/CONFIG_SYNC_FILE create mode 100644 baseconfig/arm/armv7/lpae/CONFIG_SYS_SUPPORTS_HUGETLBFS create mode 100644 baseconfig/arm/armv7/lpae/CONFIG_TEGRA20_MC create mode 100644 baseconfig/arm/armv7/lpae/CONFIG_TEGRA_IOMMU_GART create mode 100644 baseconfig/arm/armv7/lpae/CONFIG_TI_AEMIF create mode 100644 baseconfig/arm/armv7/lpae/CONFIG_TI_MESSAGE_MANAGER create mode 100644 baseconfig/arm/armv7/lpae/CONFIG_TI_SCI_PROTOCOL create mode 100644 baseconfig/arm/armv7/lpae/CONFIG_TI_SYSCON_RESET create mode 100644 baseconfig/arm/armv7/lpae/CONFIG_USB_DWC3_KEYSTONE create mode 100644 baseconfig/arm/armv7/lpae/CONFIG_XEN create mode 100644 baseconfig/arm/armv7/lpae/CONFIG_XENFS create mode 100644 baseconfig/arm/armv7/lpae/CONFIG_XEN_BACKEND create mode 100644 baseconfig/arm/armv7/lpae/CONFIG_XEN_BALLOON create mode 100644 baseconfig/arm/armv7/lpae/CONFIG_XEN_BLKDEV_BACKEND create mode 100644 baseconfig/arm/armv7/lpae/CONFIG_XEN_BLKDEV_FRONTEND create mode 100644 baseconfig/arm/armv7/lpae/CONFIG_XEN_COMPAT_XENFS create mode 100644 baseconfig/arm/armv7/lpae/CONFIG_XEN_DEV_EVTCHN create mode 100644 baseconfig/arm/armv7/lpae/CONFIG_XEN_FBDEV_FRONTEND create mode 100644 baseconfig/arm/armv7/lpae/CONFIG_XEN_GNTDEV create mode 100644 baseconfig/arm/armv7/lpae/CONFIG_XEN_GRANT_DEV_ALLOC create mode 100644 baseconfig/arm/armv7/lpae/CONFIG_XEN_NETDEV_BACKEND create mode 100644 baseconfig/arm/armv7/lpae/CONFIG_XEN_NETDEV_FRONTEND create mode 100644 baseconfig/arm/armv7/lpae/CONFIG_XEN_SYS_HYPERVISOR create mode 100644 baseconfig/arm/armv7/lpae/CONFIG_XEN_WDT create mode 100644 baseconfig/arm/armv7/lpae/README create mode 100644 baseconfig/powerpc/CONFIG_3C515 create mode 100644 baseconfig/powerpc/CONFIG_ADB_PMU_LED_DISK create mode 100644 baseconfig/powerpc/CONFIG_AGP create mode 100644 baseconfig/powerpc/CONFIG_ALTIVEC create mode 100644 baseconfig/powerpc/CONFIG_AMIGAONE create mode 100644 baseconfig/powerpc/CONFIG_ASYMMETRIC_KEY_TYPE create mode 100644 baseconfig/powerpc/CONFIG_ATM_AMBASSADOR create mode 100644 baseconfig/powerpc/CONFIG_ATM_FIRESTREAM create mode 100644 baseconfig/powerpc/CONFIG_ATM_HORIZON create mode 100644 baseconfig/powerpc/CONFIG_AXON_RAM create mode 100644 baseconfig/powerpc/CONFIG_BACKLIGHT_PWM create mode 100644 baseconfig/powerpc/CONFIG_BLK_DEV_IT8172 create mode 100644 baseconfig/powerpc/CONFIG_BLK_DEV_PLATFORM create mode 100644 baseconfig/powerpc/CONFIG_BLK_DEV_RSXX create mode 100644 baseconfig/powerpc/CONFIG_BOOTX_TEXT create mode 100644 baseconfig/powerpc/CONFIG_CAN_FLEXCAN create mode 100644 baseconfig/powerpc/CONFIG_CAN_MPC5XXX create mode 100644 baseconfig/powerpc/CONFIG_CAN_MSCAN create mode 100644 baseconfig/powerpc/CONFIG_CAPI_EICON create mode 100644 baseconfig/powerpc/CONFIG_CGROUP_HUGETLB create mode 100644 baseconfig/powerpc/CONFIG_CMA create mode 100644 baseconfig/powerpc/CONFIG_CMA_AREAS create mode 100644 baseconfig/powerpc/CONFIG_CMA_DEBUG create mode 100644 baseconfig/powerpc/CONFIG_CMA_DEBUGFS create mode 100644 baseconfig/powerpc/CONFIG_CMDLINE_BOOL create mode 100644 baseconfig/powerpc/CONFIG_CMM create mode 100644 baseconfig/powerpc/CONFIG_CODE_PATCHING_SELFTEST create mode 100644 baseconfig/powerpc/CONFIG_CONSISTENT_SIZE_BOOL create mode 100644 baseconfig/powerpc/CONFIG_CRYPTO_CRC32C_VPMSUM create mode 100644 baseconfig/powerpc/CONFIG_CRYPTO_DEV_FSL_CAAM create mode 100644 baseconfig/powerpc/CONFIG_CRYPTO_DEV_NX create mode 100644 baseconfig/powerpc/CONFIG_CRYPTO_DEV_NX_COMPRESS create mode 100644 baseconfig/powerpc/CONFIG_CRYPTO_DEV_NX_COMPRESS_POWERNV create mode 100644 baseconfig/powerpc/CONFIG_CRYPTO_DEV_NX_COMPRESS_PSERIES create mode 100644 baseconfig/powerpc/CONFIG_CRYPTO_DEV_NX_ENCRYPT create mode 100644 baseconfig/powerpc/CONFIG_CRYPTO_DEV_VMX create mode 100644 baseconfig/powerpc/CONFIG_CRYPTO_DEV_VMX_ENCRYPT create mode 100644 baseconfig/powerpc/CONFIG_CRYPTO_MD5_PPC create mode 100644 baseconfig/powerpc/CONFIG_CRYPTO_SHA1_PPC create mode 100644 baseconfig/powerpc/CONFIG_CXL create mode 100644 baseconfig/powerpc/CONFIG_CXLFLASH create mode 100644 baseconfig/powerpc/CONFIG_DEBUGGER create mode 100644 baseconfig/powerpc/CONFIG_DEBUG_GPIO create mode 100644 baseconfig/powerpc/CONFIG_DEBUG_STACKOVERFLOW create mode 100644 baseconfig/powerpc/CONFIG_DMADEVICES create mode 100644 baseconfig/powerpc/CONFIG_DTL create mode 100644 baseconfig/powerpc/CONFIG_EDAC_CPC925 create mode 100644 baseconfig/powerpc/CONFIG_EDAC_MPC85XX create mode 100644 baseconfig/powerpc/CONFIG_EHEA create mode 100644 baseconfig/powerpc/CONFIG_EXTRA_TARGETS create mode 100644 baseconfig/powerpc/CONFIG_FAIL_IOMMU create mode 100644 baseconfig/powerpc/CONFIG_FA_DUMP create mode 100644 baseconfig/powerpc/CONFIG_FB_ATY create mode 100644 baseconfig/powerpc/CONFIG_FB_ATY128 create mode 100644 baseconfig/powerpc/CONFIG_FB_CONTROL create mode 100644 baseconfig/powerpc/CONFIG_FB_CT65550 create mode 100644 baseconfig/powerpc/CONFIG_FB_IBM_GXT4500 create mode 100644 baseconfig/powerpc/CONFIG_FB_MATROX create mode 100644 baseconfig/powerpc/CONFIG_FB_MATROX_G create mode 100644 baseconfig/powerpc/CONFIG_FB_MB862XX create mode 100644 baseconfig/powerpc/CONFIG_FB_MB862XX_I2C create mode 100644 baseconfig/powerpc/CONFIG_FB_MB862XX_LIME create mode 100644 baseconfig/powerpc/CONFIG_FB_MB862XX_PCI_GDC create mode 100644 baseconfig/powerpc/CONFIG_FB_OF create mode 100644 baseconfig/powerpc/CONFIG_FB_PLATINUM create mode 100644 baseconfig/powerpc/CONFIG_FB_SSD1307 create mode 100644 baseconfig/powerpc/CONFIG_FB_VALKYRIE create mode 100644 baseconfig/powerpc/CONFIG_FB_VGA16 create mode 100644 baseconfig/powerpc/CONFIG_FHCI_DEBUG create mode 100644 baseconfig/powerpc/CONFIG_FORCE_MAX_ZONEORDER create mode 100644 baseconfig/powerpc/CONFIG_FRAME_WARN create mode 100644 baseconfig/powerpc/CONFIG_FSL_DMA create mode 100644 baseconfig/powerpc/CONFIG_FSL_LBC create mode 100644 baseconfig/powerpc/CONFIG_FS_ENET create mode 100644 baseconfig/powerpc/CONFIG_FTR_FIXUP_SELFTEST create mode 100644 baseconfig/powerpc/CONFIG_GEF_PPC9A create mode 100644 baseconfig/powerpc/CONFIG_GEF_SBC310 create mode 100644 baseconfig/powerpc/CONFIG_GEF_SBC610 create mode 100644 baseconfig/powerpc/CONFIG_GEN_RTC create mode 100644 baseconfig/powerpc/CONFIG_GPIO_74XX_MMIO create mode 100644 baseconfig/powerpc/CONFIG_GPIO_PCA953X create mode 100644 baseconfig/powerpc/CONFIG_GPIO_PCF857X create mode 100644 baseconfig/powerpc/CONFIG_GPIO_SCH create mode 100644 baseconfig/powerpc/CONFIG_GPIO_UCB1400 create mode 100644 baseconfig/powerpc/CONFIG_GPIO_WM831X create mode 100644 baseconfig/powerpc/CONFIG_GPIO_XILINX create mode 100644 baseconfig/powerpc/CONFIG_HAVE_BOOTMEM_INFO_NODE create mode 100644 baseconfig/powerpc/CONFIG_HCALL_STATS create mode 100644 baseconfig/powerpc/CONFIG_HIBERNATION create mode 100644 baseconfig/powerpc/CONFIG_HOTPLUG_PCI_POWERNV create mode 100644 baseconfig/powerpc/CONFIG_HOTPLUG_PCI_RPA create mode 100644 baseconfig/powerpc/CONFIG_HOTPLUG_PCI_RPA_DLPAR create mode 100644 baseconfig/powerpc/CONFIG_HOTPLUG_PCI_SHPC create mode 100644 baseconfig/powerpc/CONFIG_HVCS create mode 100644 baseconfig/powerpc/CONFIG_HVC_CONSOLE create mode 100644 baseconfig/powerpc/CONFIG_HVC_OLD_HVSI create mode 100644 baseconfig/powerpc/CONFIG_HVC_OPAL create mode 100644 baseconfig/powerpc/CONFIG_HVC_RTAS create mode 100644 baseconfig/powerpc/CONFIG_HVC_UDBG create mode 100644 baseconfig/powerpc/CONFIG_HV_PERF_CTRS create mode 100644 baseconfig/powerpc/CONFIG_HW_RANDOM_POWERNV create mode 100644 baseconfig/powerpc/CONFIG_HW_RANDOM_PSERIES create mode 100644 baseconfig/powerpc/CONFIG_HZ create mode 100644 baseconfig/powerpc/CONFIG_HZ_100 create mode 100644 baseconfig/powerpc/CONFIG_HZ_1000 create mode 100644 baseconfig/powerpc/CONFIG_I2C_CPM create mode 100644 baseconfig/powerpc/CONFIG_I2C_MPC create mode 100644 baseconfig/powerpc/CONFIG_I2C_OPAL create mode 100644 baseconfig/powerpc/CONFIG_IBMEBUS create mode 100644 baseconfig/powerpc/CONFIG_IBMVETH create mode 100644 baseconfig/powerpc/CONFIG_IBMVNIC create mode 100644 baseconfig/powerpc/CONFIG_IBM_BSR create mode 100644 baseconfig/powerpc/CONFIG_IBM_EMAC create mode 100644 baseconfig/powerpc/CONFIG_IDEPCI_PCIBUS_ORDER create mode 100644 baseconfig/powerpc/CONFIG_IMA create mode 100644 baseconfig/powerpc/CONFIG_INPUT_GP2A create mode 100644 baseconfig/powerpc/CONFIG_INPUT_GPIO_TILT_POLLED create mode 100644 baseconfig/powerpc/CONFIG_INPUT_MATRIXKMAP create mode 100644 baseconfig/powerpc/CONFIG_INPUT_PCSPKR create mode 100644 baseconfig/powerpc/CONFIG_INPUT_PWM_BEEPER create mode 100644 baseconfig/powerpc/CONFIG_IO_EVENT_IRQ create mode 100644 baseconfig/powerpc/CONFIG_IPMI_POWERNV create mode 100644 baseconfig/powerpc/CONFIG_IRQSTACKS create mode 100644 baseconfig/powerpc/CONFIG_IRQ_ALL_CPUS create mode 100644 baseconfig/powerpc/CONFIG_IRQ_DOMAIN_DEBUG create mode 100644 baseconfig/powerpc/CONFIG_JUMP_LABEL_FEATURE_CHECKS create mode 100644 baseconfig/powerpc/CONFIG_JUMP_LABEL_FEATURE_CHECK_DEBUG create mode 100644 baseconfig/powerpc/CONFIG_KEYBOARD_MATRIX create mode 100644 baseconfig/powerpc/CONFIG_KVM_BOOK3S_64 create mode 100644 baseconfig/powerpc/CONFIG_KVM_BOOK3S_64_HV create mode 100644 baseconfig/powerpc/CONFIG_KVM_BOOK3S_64_PR create mode 100644 baseconfig/powerpc/CONFIG_KVM_BOOK3S_HV_EXIT_TIMING create mode 100644 baseconfig/powerpc/CONFIG_KVM_EXIT_TIMING create mode 100644 baseconfig/powerpc/CONFIG_KVM_GUEST create mode 100644 baseconfig/powerpc/CONFIG_KVM_XICS create mode 100644 baseconfig/powerpc/CONFIG_LANCE create mode 100644 baseconfig/powerpc/CONFIG_LEDS_POWERNV create mode 100644 baseconfig/powerpc/CONFIG_LEDS_TRIGGER_GPIO create mode 100644 baseconfig/powerpc/CONFIG_LEDS_TRIGGER_HEARTBEAT create mode 100644 baseconfig/powerpc/CONFIG_LEDS_TRIGGER_TIMER create mode 100644 baseconfig/powerpc/CONFIG_LPARCFG create mode 100644 baseconfig/powerpc/CONFIG_MACINTOSH_DRIVERS create mode 100644 baseconfig/powerpc/CONFIG_MATH_EMULATION create mode 100644 baseconfig/powerpc/CONFIG_MCU_MPC8349EMITX create mode 100644 baseconfig/powerpc/CONFIG_MDIO_BUS_MUX_GPIO create mode 100644 baseconfig/powerpc/CONFIG_MDIO_BUS_MUX_MMIOREG create mode 100644 baseconfig/powerpc/CONFIG_MDIO_GPIO create mode 100644 baseconfig/powerpc/CONFIG_MEMORY_HOTPLUG create mode 100644 baseconfig/powerpc/CONFIG_MEMORY_HOTPLUG_DEFAULT_ONLINE create mode 100644 baseconfig/powerpc/CONFIG_MEMORY_HOTREMOVE create mode 100644 baseconfig/powerpc/CONFIG_MEM_SOFT_DIRTY create mode 100644 baseconfig/powerpc/CONFIG_MFD_AAT2870_CORE create mode 100644 baseconfig/powerpc/CONFIG_MGCOGE create mode 100644 baseconfig/powerpc/CONFIG_MMC_SDHCI_OF create mode 100644 baseconfig/powerpc/CONFIG_MMC_SDHCI_OF_HLWD create mode 100644 baseconfig/powerpc/CONFIG_MPC5121_ADS create mode 100644 baseconfig/powerpc/CONFIG_MPIC_MSGR create mode 100644 baseconfig/powerpc/CONFIG_MSI_BITMAP_SELFTEST create mode 100644 baseconfig/powerpc/CONFIG_MTD_NAND_FSL_ELBC create mode 100644 baseconfig/powerpc/CONFIG_MTD_OF_PARTS create mode 100644 baseconfig/powerpc/CONFIG_MTD_POWERNV_FLASH create mode 100644 baseconfig/powerpc/CONFIG_NET_VENDOR_IBM create mode 100644 baseconfig/powerpc/CONFIG_NET_VENDOR_PASEMI create mode 100644 baseconfig/powerpc/CONFIG_NET_VENDOR_TOSHIBA create mode 100644 baseconfig/powerpc/CONFIG_NET_VENDOR_XILINX create mode 100644 baseconfig/powerpc/CONFIG_NI65 create mode 100644 baseconfig/powerpc/CONFIG_NR_CPUS create mode 100644 baseconfig/powerpc/CONFIG_NR_IRQS create mode 100644 baseconfig/powerpc/CONFIG_NUMA create mode 100644 baseconfig/powerpc/CONFIG_NUMA_BALANCING create mode 100644 baseconfig/powerpc/CONFIG_NUMA_BALANCING_DEFAULT_ENABLED create mode 100644 baseconfig/powerpc/CONFIG_OF_OVERLAY create mode 100644 baseconfig/powerpc/CONFIG_OF_UNITTEST create mode 100644 baseconfig/powerpc/CONFIG_OPAL_PRD create mode 100644 baseconfig/powerpc/CONFIG_PATA_PLATFORM create mode 100644 baseconfig/powerpc/CONFIG_PCIEPORTBUS create mode 100644 baseconfig/powerpc/CONFIG_PMIC_ADP5520 create mode 100644 baseconfig/powerpc/CONFIG_PMIC_DA903X create mode 100644 baseconfig/powerpc/CONFIG_POWERNV_CPUFREQ create mode 100644 baseconfig/powerpc/CONFIG_POWERNV_CPUIDLE create mode 100644 baseconfig/powerpc/CONFIG_POWERNV_OP_PANEL create mode 100644 baseconfig/powerpc/CONFIG_POWER_RESET_GPIO create mode 100644 baseconfig/powerpc/CONFIG_POWER_RESET_GPIO_RESTART create mode 100644 baseconfig/powerpc/CONFIG_PPC create mode 100644 baseconfig/powerpc/CONFIG_PPC64 create mode 100644 baseconfig/powerpc/CONFIG_PPC64_SUPPORTS_MEMORY_FAILURE create mode 100644 baseconfig/powerpc/CONFIG_PPC_64K_PAGES create mode 100644 baseconfig/powerpc/CONFIG_PPC_82xx create mode 100644 baseconfig/powerpc/CONFIG_PPC_83xx create mode 100644 baseconfig/powerpc/CONFIG_PPC_86xx create mode 100644 baseconfig/powerpc/CONFIG_PPC_CELL create mode 100644 baseconfig/powerpc/CONFIG_PPC_DENORMALISATION create mode 100644 baseconfig/powerpc/CONFIG_PPC_DISABLE_WERROR create mode 100644 baseconfig/powerpc/CONFIG_PPC_EARLY_DEBUG create mode 100644 baseconfig/powerpc/CONFIG_PPC_EMULATED_STATS create mode 100644 baseconfig/powerpc/CONFIG_PPC_EPAPR_HV_BYTECHAN create mode 100644 baseconfig/powerpc/CONFIG_PPC_IBM_CELL_BLADE create mode 100644 baseconfig/powerpc/CONFIG_PPC_ICSWX create mode 100644 baseconfig/powerpc/CONFIG_PPC_ICSWX_PID create mode 100644 baseconfig/powerpc/CONFIG_PPC_ICSWX_USE_SIGILL create mode 100644 baseconfig/powerpc/CONFIG_PPC_MAPLE create mode 100644 baseconfig/powerpc/CONFIG_PPC_MPC5200_LPBFIFO create mode 100644 baseconfig/powerpc/CONFIG_PPC_OF_BOOT_TRAMPOLINE create mode 100644 baseconfig/powerpc/CONFIG_PPC_PASEMI create mode 100644 baseconfig/powerpc/CONFIG_PPC_PMAC create mode 100644 baseconfig/powerpc/CONFIG_PPC_PMAC64 create mode 100644 baseconfig/powerpc/CONFIG_PPC_POWERNV create mode 100644 baseconfig/powerpc/CONFIG_PPC_PS3 create mode 100644 baseconfig/powerpc/CONFIG_PPC_PSERIES create mode 100644 baseconfig/powerpc/CONFIG_PPC_RADIX_MMU create mode 100644 baseconfig/powerpc/CONFIG_PPC_SMLPAR create mode 100644 baseconfig/powerpc/CONFIG_PPC_SPLPAR create mode 100644 baseconfig/powerpc/CONFIG_PPC_SUBPAGE_PROT create mode 100644 baseconfig/powerpc/CONFIG_PPC_TRANSACTIONAL_MEM create mode 100644 baseconfig/powerpc/CONFIG_PRINT_STACK_DEPTH create mode 100644 baseconfig/powerpc/CONFIG_PS3_VRAM create mode 100644 baseconfig/powerpc/CONFIG_PSERIES_CPUIDLE create mode 100644 baseconfig/powerpc/CONFIG_PSERIES_ENERGY create mode 100644 baseconfig/powerpc/CONFIG_RAPIDIO create mode 100644 baseconfig/powerpc/CONFIG_RCU_FANOUT create mode 100644 baseconfig/powerpc/CONFIG_RCU_FANOUT_LEAF create mode 100644 baseconfig/powerpc/CONFIG_RELOCATABLE create mode 100644 baseconfig/powerpc/CONFIG_RTAS_FLASH create mode 100644 baseconfig/powerpc/CONFIG_RTAS_PROC create mode 100644 baseconfig/powerpc/CONFIG_RTC create mode 100644 baseconfig/powerpc/CONFIG_RTC_DRV_GENERIC create mode 100644 baseconfig/powerpc/CONFIG_RTC_DRV_OPAL create mode 100644 baseconfig/powerpc/CONFIG_SCANLOG create mode 100644 baseconfig/powerpc/CONFIG_SCHED_SMT create mode 100644 baseconfig/powerpc/CONFIG_SCOM_DEBUGFS create mode 100644 baseconfig/powerpc/CONFIG_SCSI_AHA1542 create mode 100644 baseconfig/powerpc/CONFIG_SCSI_BUSLOGIC create mode 100644 baseconfig/powerpc/CONFIG_SCSI_IBMVFC create mode 100644 baseconfig/powerpc/CONFIG_SCSI_IBMVFC_TRACE create mode 100644 baseconfig/powerpc/CONFIG_SCSI_IBMVSCSI create mode 100644 baseconfig/powerpc/CONFIG_SCSI_IBMVSCSIS create mode 100644 baseconfig/powerpc/CONFIG_SCSI_IN2000 create mode 100644 baseconfig/powerpc/CONFIG_SCSI_IPR create mode 100644 baseconfig/powerpc/CONFIG_SCSI_IPR_DUMP create mode 100644 baseconfig/powerpc/CONFIG_SCSI_IPR_TRACE create mode 100644 baseconfig/powerpc/CONFIG_SCSI_IPS create mode 100644 baseconfig/powerpc/CONFIG_SENSORS_IBMPOWERNV create mode 100644 baseconfig/powerpc/CONFIG_SERIAL_8250 create mode 100644 baseconfig/powerpc/CONFIG_SERIAL_CPM create mode 100644 baseconfig/powerpc/CONFIG_SERIAL_ICOM create mode 100644 baseconfig/powerpc/CONFIG_SERIAL_OF_PLATFORM create mode 100644 baseconfig/powerpc/CONFIG_SERIAL_QE create mode 100644 baseconfig/powerpc/CONFIG_SERIO_XILINX_XPS_PS2 create mode 100644 baseconfig/powerpc/CONFIG_SIMPLE_GPIO create mode 100644 baseconfig/powerpc/CONFIG_SND_HDA_INTEL create mode 100644 baseconfig/powerpc/CONFIG_SND_PPC create mode 100644 baseconfig/powerpc/CONFIG_SND_SOC create mode 100644 baseconfig/powerpc/CONFIG_SPAPR_TCE_IOMMU create mode 100644 baseconfig/powerpc/CONFIG_SPARSEMEM_VMEMMAP create mode 100644 baseconfig/powerpc/CONFIG_SPARSE_IRQ create mode 100644 baseconfig/powerpc/CONFIG_SUSPEND_FREEZER create mode 100644 baseconfig/powerpc/CONFIG_SWIOTLB create mode 100644 baseconfig/powerpc/CONFIG_SYNC_FILE create mode 100644 baseconfig/powerpc/CONFIG_TCG_TPM create mode 100644 baseconfig/powerpc/CONFIG_THERMAL create mode 100644 baseconfig/powerpc/CONFIG_TOUCHSCREEN_AUO_PIXCIR create mode 100644 baseconfig/powerpc/CONFIG_TRANSPARENT_HUGEPAGE create mode 100644 baseconfig/powerpc/CONFIG_TWL4030_CORE create mode 100644 baseconfig/powerpc/CONFIG_UCC_GETH create mode 100644 baseconfig/powerpc/CONFIG_UDBG_RTAS_CONSOLE create mode 100644 baseconfig/powerpc/CONFIG_USB_EHCI_HCD_PPC_OF create mode 100644 baseconfig/powerpc/CONFIG_USB_FHCI_HCD create mode 100644 baseconfig/powerpc/CONFIG_USB_OHCI_HCD_PCI create mode 100644 baseconfig/powerpc/CONFIG_USB_OHCI_HCD_PPC_OF create mode 100644 baseconfig/powerpc/CONFIG_USB_OHCI_HCD_PPC_OF_BE create mode 100644 baseconfig/powerpc/CONFIG_USB_OHCI_HCD_PPC_OF_LE create mode 100644 baseconfig/powerpc/CONFIG_VIDEO_ZORAN create mode 100644 baseconfig/powerpc/CONFIG_VSX create mode 100644 baseconfig/powerpc/CONFIG_WATCHDOG_RTAS create mode 100644 baseconfig/powerpc/CONFIG_WINDFARM create mode 100644 baseconfig/powerpc/CONFIG_XILINX_EMACLITE create mode 100644 baseconfig/powerpc/CONFIG_XILINX_LL_TEMAC create mode 100644 baseconfig/powerpc/CONFIG_XMON create mode 100644 baseconfig/powerpc/CONFIG_XMON_DEFAULT create mode 100644 baseconfig/powerpc/CONFIG_XMON_DISASSEMBLY create mode 100644 baseconfig/powerpc/CONFIG_XPS_USB_HCD_XILINX create mode 100644 baseconfig/powerpc/CONFIG_XZ_DEC_POWERPC create mode 100644 baseconfig/powerpc/README create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_ADB create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_ADB_PMU create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_ADB_PMU_LED create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_AGP_UNINORTH create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_APM_EMULATION create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_APPLE_AIRPORT create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_BLK_DEV_AEC62XX create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_BLK_DEV_ALI15X3 create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_BLK_DEV_AMD74XX create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_BLK_DEV_CMD64X create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_BLK_DEV_CS5520 create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_BLK_DEV_CS5530 create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_BLK_DEV_CY82C693 create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_BLK_DEV_DELKIN create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_BLK_DEV_GENERIC create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_BLK_DEV_HPT366 create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_BLK_DEV_IDE create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_BLK_DEV_IDECD create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_BLK_DEV_IDECS create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_BLK_DEV_IDEDMA create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_BLK_DEV_IDEPCI create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_BLK_DEV_IDEPNP create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_BLK_DEV_IDETAPE create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_BLK_DEV_IDE_PMAC create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_BLK_DEV_IDE_SATA create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_BLK_DEV_IT8213 create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_BLK_DEV_IT821X create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_BLK_DEV_JMICRON create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_BLK_DEV_NS87415 create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_BLK_DEV_OFFBOARD create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_BLK_DEV_OPTI621 create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_BLK_DEV_PDC202XX_NEW create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_BLK_DEV_PDC202XX_OLD create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_BLK_DEV_PIIX create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_BLK_DEV_SC1200 create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_BLK_DEV_SIIMAGE create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_BLK_DEV_SL82C105 create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_BLK_DEV_SLC90E66 create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_BLK_DEV_SVWKS create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_BLK_DEV_TC86C001 create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_BLK_DEV_TRIFLEX create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_BLK_DEV_TRM290 create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_BLK_DEV_VIA82CXXX create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_CPU_FREQ_MAPLE create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_CPU_FREQ_PMAC64 rename config-powerpc64p7 => baseconfig/powerpc/powerpc64/CONFIG_CPU_LITTLE_ENDIAN (64%) create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_EDAC_AMD8111 create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_EDAC_AMD8131 create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_EDAC_CPC925 create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_GENERIC_PHY create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_HW_RANDOM_AMD create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_I2C_MUX create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_I2C_POWERMAC create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_IDE create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_IDEPCI_PCIBUS_ORDER create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_IDE_GD create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_IDE_GD_ATA create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_IDE_GD_ATAPI create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_IDE_GENERIC create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_IDE_PROC_FS create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_IDE_TASK_IOCTL create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_MACINTOSH_DRIVERS create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_MAC_EMUMOUSEBTN create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_MFD_CORE create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_MMIO_NVRAM create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_PATA_MACIO create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_PATA_OF_PLATFORM create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_PATA_PLATFORM create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_PMAC_APM_EMU create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_PMAC_BACKLIGHT_LEGACY create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_PMAC_RACKMETER create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_PMAC_SMU create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_PPC_MAPLE create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_PPC_PMAC create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_PPC_PMAC64 create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_SERIAL_CORE create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_SERIAL_PMACZILOG create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_SERIAL_PMACZILOG_TTYS create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_SND_AOA create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_SND_AOA_FABRIC_LAYOUT create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_SND_AOA_ONYX create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_SND_AOA_SOUNDBUS create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_SND_AOA_SOUNDBUS_I2S create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_SND_AOA_TAS create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_SND_AOA_TOONIE create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_SND_POWERMAC create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_SND_POWERMAC_AUTO_DRC create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_WINDFARM create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_WINDFARM_PM112 create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_WINDFARM_PM121 create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_WINDFARM_PM72 create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_WINDFARM_PM81 create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_WINDFARM_PM91 create mode 100644 baseconfig/powerpc/powerpc64/CONFIG_WINDFARM_RM31 create mode 100644 baseconfig/powerpc/powerpc64le/CONFIG_CHECKPOINT_RESTORE create mode 100644 baseconfig/powerpc/powerpc64le/CONFIG_CPU_LITTLE_ENDIAN create mode 100644 baseconfig/powerpc/powerpc64le/CONFIG_DISABLE_MPROFILE_KERNEL create mode 100644 baseconfig/powerpc/powerpc64le/CONFIG_GENERIC_PHY create mode 100644 baseconfig/powerpc/powerpc64le/CONFIG_I2C_MUX create mode 100644 baseconfig/powerpc/powerpc64le/CONFIG_MFD_CORE create mode 100644 baseconfig/powerpc/powerpc64le/CONFIG_POWER7_CPU create mode 100644 baseconfig/powerpc/powerpc64le/CONFIG_SERIAL_CORE create mode 100644 baseconfig/powerpc/powerpc64p7/CONFIG_CPU_LITTLE_ENDIAN create mode 100644 baseconfig/powerpc/powerpc64p7/CONFIG_GENERIC_PHY create mode 100644 baseconfig/powerpc/powerpc64p7/CONFIG_I2C_MUX create mode 100644 baseconfig/powerpc/powerpc64p7/CONFIG_MFD_CORE create mode 100644 baseconfig/powerpc/powerpc64p7/CONFIG_POWER7_CPU create mode 100644 baseconfig/powerpc/powerpc64p7/CONFIG_SERIAL_CORE create mode 100644 baseconfig/s390x/CONFIG_64BIT create mode 100644 baseconfig/s390x/CONFIG_ACCESSIBILITY create mode 100644 baseconfig/s390x/CONFIG_AFIUCV create mode 100644 baseconfig/s390x/CONFIG_APPLDATA_BASE create mode 100644 baseconfig/s390x/CONFIG_APPLDATA_MEM create mode 100644 baseconfig/s390x/CONFIG_APPLDATA_NET_SUM create mode 100644 baseconfig/s390x/CONFIG_APPLDATA_OS create mode 100644 baseconfig/s390x/CONFIG_ASYMMETRIC_KEY_TYPE create mode 100644 baseconfig/s390x/CONFIG_ATA_OVER_ETH create mode 100644 baseconfig/s390x/CONFIG_ATM_DRIVERS create mode 100644 baseconfig/s390x/CONFIG_AUXDISPLAY create mode 100644 baseconfig/s390x/CONFIG_B44 create mode 100644 baseconfig/s390x/CONFIG_BACKLIGHT_CLASS_DEVICE create mode 100644 baseconfig/s390x/CONFIG_BACKLIGHT_LCD_SUPPORT create mode 100644 baseconfig/s390x/CONFIG_BCMA create mode 100644 baseconfig/s390x/CONFIG_BLK_DEV_XPRAM create mode 100644 baseconfig/s390x/CONFIG_BT create mode 100644 baseconfig/s390x/CONFIG_CB710_CORE create mode 100644 baseconfig/s390x/CONFIG_CCW create mode 100644 baseconfig/s390x/CONFIG_CCWGROUP create mode 100644 baseconfig/s390x/CONFIG_CCW_CONSOLE create mode 100644 baseconfig/s390x/CONFIG_CC_OPTIMIZE_FOR_SIZE create mode 100644 baseconfig/s390x/CONFIG_CDROM_PKTCDVD create mode 100644 baseconfig/s390x/CONFIG_CHECK_STACK create mode 100644 baseconfig/s390x/CONFIG_CHSC_SCH create mode 100644 baseconfig/s390x/CONFIG_CMM create mode 100644 baseconfig/s390x/CONFIG_CMM_IUCV create mode 100644 baseconfig/s390x/CONFIG_COMPAT create mode 100644 baseconfig/s390x/CONFIG_CPU_IDLE create mode 100644 baseconfig/s390x/CONFIG_CRASH_DUMP create mode 100644 baseconfig/s390x/CONFIG_CRC7 create mode 100644 baseconfig/s390x/CONFIG_CRYPTO_AES_S390 create mode 100644 baseconfig/s390x/CONFIG_CRYPTO_CRC32_S390 create mode 100644 baseconfig/s390x/CONFIG_CRYPTO_DES_S390 create mode 100644 baseconfig/s390x/CONFIG_CRYPTO_GHASH_S390 create mode 100644 baseconfig/s390x/CONFIG_CRYPTO_SHA1_S390 create mode 100644 baseconfig/s390x/CONFIG_CRYPTO_SHA256_S390 create mode 100644 baseconfig/s390x/CONFIG_CRYPTO_SHA512_S390 create mode 100644 baseconfig/s390x/CONFIG_CTC create mode 100644 baseconfig/s390x/CONFIG_CTCM create mode 100644 baseconfig/s390x/CONFIG_DASD create mode 100644 baseconfig/s390x/CONFIG_DASD_DIAG create mode 100644 baseconfig/s390x/CONFIG_DASD_ECKD create mode 100644 baseconfig/s390x/CONFIG_DASD_EER create mode 100644 baseconfig/s390x/CONFIG_DASD_FBA create mode 100644 baseconfig/s390x/CONFIG_DASD_PROFILE create mode 100644 baseconfig/s390x/CONFIG_DCSSBLK create mode 100644 baseconfig/s390x/CONFIG_DIAG288_WATCHDOG create mode 100644 baseconfig/s390x/CONFIG_DRM create mode 100644 baseconfig/s390x/CONFIG_DW_DMAC create mode 100644 baseconfig/s390x/CONFIG_EADM_SCH create mode 100644 baseconfig/s390x/CONFIG_EMU_SIZE create mode 100644 baseconfig/s390x/CONFIG_FB create mode 100644 baseconfig/s390x/CONFIG_FCOE create mode 100644 baseconfig/s390x/CONFIG_FIREWIRE create mode 100644 baseconfig/s390x/CONFIG_FIREWIRE_NOSY create mode 100644 baseconfig/s390x/CONFIG_FIXED_PHY create mode 100644 baseconfig/s390x/CONFIG_FMC create mode 100644 baseconfig/s390x/CONFIG_FUSION create mode 100644 baseconfig/s390x/CONFIG_GAMEPORT create mode 100644 baseconfig/s390x/CONFIG_HID create mode 100644 baseconfig/s390x/CONFIG_HID_GENERIC create mode 100644 baseconfig/s390x/CONFIG_HID_MAGICMOUSE create mode 100644 baseconfig/s390x/CONFIG_HOTPLUG_PCI_CPCI create mode 100644 baseconfig/s390x/CONFIG_HOTPLUG_PCI_S390 create mode 100644 baseconfig/s390x/CONFIG_HOTPLUG_PCI_SHPC create mode 100644 baseconfig/s390x/CONFIG_HVC_IUCV create mode 100644 baseconfig/s390x/CONFIG_HWMON create mode 100644 baseconfig/s390x/CONFIG_HZ_100 create mode 100644 baseconfig/s390x/CONFIG_HZ_1000 create mode 100644 baseconfig/s390x/CONFIG_I2C create mode 100644 baseconfig/s390x/CONFIG_I2C_HELPER_AUTO create mode 100644 baseconfig/s390x/CONFIG_I2C_NFORCE2 create mode 100644 baseconfig/s390x/CONFIG_I2C_PARPORT create mode 100644 baseconfig/s390x/CONFIG_I2C_PARPORT_LIGHT create mode 100644 baseconfig/s390x/CONFIG_I2C_SMBUS create mode 100644 baseconfig/s390x/CONFIG_I2C_STUB create mode 100644 baseconfig/s390x/CONFIG_IBM_PARTITION create mode 100644 baseconfig/s390x/CONFIG_IEEE802154_DRIVERS create mode 100644 baseconfig/s390x/CONFIG_INPUT_JOYDEV create mode 100644 baseconfig/s390x/CONFIG_INPUT_JOYSTICK create mode 100644 baseconfig/s390x/CONFIG_INPUT_KEYBOARD create mode 100644 baseconfig/s390x/CONFIG_INPUT_MISC create mode 100644 baseconfig/s390x/CONFIG_INPUT_MOUSE create mode 100644 baseconfig/s390x/CONFIG_INPUT_TABLET create mode 100644 baseconfig/s390x/CONFIG_INPUT_TOUCHSCREEN create mode 100644 baseconfig/s390x/CONFIG_IPL create mode 100644 baseconfig/s390x/CONFIG_IRDA create mode 100644 baseconfig/s390x/CONFIG_IRQ_DOMAIN_DEBUG create mode 100644 baseconfig/s390x/CONFIG_IUCV create mode 100644 baseconfig/s390x/CONFIG_KVM create mode 100644 baseconfig/s390x/CONFIG_KVM_S390_UCONTROL create mode 100644 baseconfig/s390x/CONFIG_LCD_CLASS_DEVICE create mode 100644 baseconfig/s390x/CONFIG_LCD_PLATFORM create mode 100644 baseconfig/s390x/CONFIG_LCS create mode 100644 baseconfig/s390x/CONFIG_LOG_BUF_SHIFT create mode 100644 baseconfig/s390x/CONFIG_MAC80211 create mode 100644 baseconfig/s390x/CONFIG_MAC_PARTITION create mode 100644 baseconfig/s390x/CONFIG_MARCH_Z900 create mode 100644 baseconfig/s390x/CONFIG_MARCH_Z990 create mode 100644 baseconfig/s390x/CONFIG_MARCH_Z9_109 create mode 100644 baseconfig/s390x/CONFIG_MEDIA_SUPPORT create mode 100644 baseconfig/s390x/CONFIG_MEMORY_HOTPLUG create mode 100644 baseconfig/s390x/CONFIG_MEMORY_HOTPLUG_DEFAULT_ONLINE create mode 100644 baseconfig/s390x/CONFIG_MEMORY_HOTREMOVE create mode 100644 baseconfig/s390x/CONFIG_MEMSTICK create mode 100644 baseconfig/s390x/CONFIG_MFD_CORE create mode 100644 baseconfig/s390x/CONFIG_MFD_RTSX_PCI create mode 100644 baseconfig/s390x/CONFIG_MFD_SM501 create mode 100644 baseconfig/s390x/CONFIG_MFD_VX855 create mode 100644 baseconfig/s390x/CONFIG_MFD_WL1273_CORE create mode 100644 baseconfig/s390x/CONFIG_MISDN_HFCMULTI create mode 100644 baseconfig/s390x/CONFIG_MMC create mode 100644 baseconfig/s390x/CONFIG_MONREADER create mode 100644 baseconfig/s390x/CONFIG_MONWRITER create mode 100644 baseconfig/s390x/CONFIG_MSDOS_PARTITION create mode 100644 baseconfig/s390x/CONFIG_MTD create mode 100644 baseconfig/s390x/CONFIG_NETCONSOLE create mode 100644 baseconfig/s390x/CONFIG_NETIUCV create mode 100644 baseconfig/s390x/CONFIG_NET_VENDOR_ARC create mode 100644 baseconfig/s390x/CONFIG_NET_VENDOR_INTEL create mode 100644 baseconfig/s390x/CONFIG_NET_VENDOR_MARVELL create mode 100644 baseconfig/s390x/CONFIG_NET_VENDOR_NATSEMI create mode 100644 baseconfig/s390x/CONFIG_NET_VENDOR_VIA create mode 100644 baseconfig/s390x/CONFIG_NODES_SHIFT create mode 100644 baseconfig/s390x/CONFIG_NR_CPUS create mode 100644 baseconfig/s390x/CONFIG_NUMA create mode 100644 baseconfig/s390x/CONFIG_NUMA_BALANCING create mode 100644 baseconfig/s390x/CONFIG_NUMA_BALANCING_DEFAULT_ENABLED create mode 100644 baseconfig/s390x/CONFIG_NUMA_EMU create mode 100644 baseconfig/s390x/CONFIG_OF create mode 100644 baseconfig/s390x/CONFIG_OSF_PARTITION create mode 100644 baseconfig/s390x/CONFIG_PACK_STACK create mode 100644 baseconfig/s390x/CONFIG_PARPORT create mode 100644 baseconfig/s390x/CONFIG_PARTITION_ADVANCED create mode 100644 baseconfig/s390x/CONFIG_PCI create mode 100644 baseconfig/s390x/CONFIG_PCI_NR_FUNCTIONS create mode 100644 baseconfig/s390x/CONFIG_PCMCIA create mode 100644 baseconfig/s390x/CONFIG_PFAULT create mode 100644 baseconfig/s390x/CONFIG_PHYLIB create mode 100644 baseconfig/s390x/CONFIG_PREEMPT_TRACER create mode 100644 baseconfig/s390x/CONFIG_QDIO create mode 100644 baseconfig/s390x/CONFIG_QETH create mode 100644 baseconfig/s390x/CONFIG_QETH_IPV6 create mode 100644 baseconfig/s390x/CONFIG_QETH_L2 create mode 100644 baseconfig/s390x/CONFIG_QETH_L3 create mode 100644 baseconfig/s390x/CONFIG_RCU_FANOUT create mode 100644 baseconfig/s390x/CONFIG_RCU_FANOUT_LEAF create mode 100644 baseconfig/s390x/CONFIG_RMI4_F03 create mode 100644 baseconfig/s390x/CONFIG_S390_GUEST create mode 100644 baseconfig/s390x/CONFIG_S390_GUEST_OLD_TRANSPORT create mode 100644 baseconfig/s390x/CONFIG_S390_HYPFS_FS create mode 100644 baseconfig/s390x/CONFIG_S390_PRNG create mode 100644 baseconfig/s390x/CONFIG_S390_PTDUMP create mode 100644 baseconfig/s390x/CONFIG_S390_TAPE create mode 100644 baseconfig/s390x/CONFIG_S390_TAPE_34XX create mode 100644 baseconfig/s390x/CONFIG_S390_TAPE_3590 create mode 100644 baseconfig/s390x/CONFIG_S390_VMUR create mode 100644 baseconfig/s390x/CONFIG_SCHED_BOOK create mode 100644 baseconfig/s390x/CONFIG_SCHED_MC create mode 100644 baseconfig/s390x/CONFIG_SCHED_TOPOLOGY create mode 100644 baseconfig/s390x/CONFIG_SCLP_ASYNC create mode 100644 baseconfig/s390x/CONFIG_SCLP_ASYNC_ID create mode 100644 baseconfig/s390x/CONFIG_SCLP_CONSOLE create mode 100644 baseconfig/s390x/CONFIG_SCLP_OFB create mode 100644 baseconfig/s390x/CONFIG_SCLP_TTY create mode 100644 baseconfig/s390x/CONFIG_SCLP_VT220_CONSOLE create mode 100644 baseconfig/s390x/CONFIG_SCLP_VT220_TTY create mode 100644 baseconfig/s390x/CONFIG_SCM_BLOCK create mode 100644 baseconfig/s390x/CONFIG_SCM_BLOCK_CLUSTER_WRITE create mode 100644 baseconfig/s390x/CONFIG_SCM_BUS create mode 100644 baseconfig/s390x/CONFIG_SERIAL_8250 create mode 100644 baseconfig/s390x/CONFIG_SERIAL_CORE create mode 100644 baseconfig/s390x/CONFIG_SERIO create mode 100644 baseconfig/s390x/CONFIG_SGI_PARTITION create mode 100644 baseconfig/s390x/CONFIG_SHARED_KERNEL create mode 100644 baseconfig/s390x/CONFIG_SH_ETH create mode 100644 baseconfig/s390x/CONFIG_SLIP create mode 100644 baseconfig/s390x/CONFIG_SMSGIUCV create mode 100644 baseconfig/s390x/CONFIG_SMSGIUCV_EVENT create mode 100644 baseconfig/s390x/CONFIG_SOUND create mode 100644 baseconfig/s390x/CONFIG_SSB create mode 100644 baseconfig/s390x/CONFIG_STACK_GUARD create mode 100644 baseconfig/s390x/CONFIG_STAGING create mode 100644 baseconfig/s390x/CONFIG_SUN_PARTITION create mode 100644 baseconfig/s390x/CONFIG_SUSPEND create mode 100644 baseconfig/s390x/CONFIG_THERMAL create mode 100644 baseconfig/s390x/CONFIG_TIFM_CORE create mode 100644 baseconfig/s390x/CONFIG_TN3215 create mode 100644 baseconfig/s390x/CONFIG_TN3215_CONSOLE create mode 100644 baseconfig/s390x/CONFIG_TN3270 create mode 100644 baseconfig/s390x/CONFIG_TN3270_CONSOLE create mode 100644 baseconfig/s390x/CONFIG_TN3270_FS create mode 100644 baseconfig/s390x/CONFIG_TN3270_TTY create mode 100644 baseconfig/s390x/CONFIG_TR create mode 100644 baseconfig/s390x/CONFIG_TRANSPARENT_HUGEPAGE create mode 100644 baseconfig/s390x/CONFIG_USB_SUPPORT create mode 100644 baseconfig/s390x/CONFIG_UWB create mode 100644 baseconfig/s390x/CONFIG_VIRTIO_CONSOLE create mode 100644 baseconfig/s390x/CONFIG_VMCP create mode 100644 baseconfig/s390x/CONFIG_VMLOGRDR create mode 100644 baseconfig/s390x/CONFIG_W1 create mode 100644 baseconfig/s390x/CONFIG_WAN create mode 100644 baseconfig/s390x/CONFIG_WARN_DYNAMIC_STACK create mode 100644 baseconfig/s390x/CONFIG_WIRELESS_EXT create mode 100644 baseconfig/s390x/CONFIG_ZCRYPT create mode 100644 baseconfig/s390x/CONFIG_ZFCP create mode 100644 baseconfig/x86/CONFIG_ACERHDF create mode 100644 baseconfig/x86/CONFIG_ACER_WMI create mode 100644 baseconfig/x86/CONFIG_ACPI create mode 100644 baseconfig/x86/CONFIG_ACPI_AC create mode 100644 baseconfig/x86/CONFIG_ACPI_APEI create mode 100644 baseconfig/x86/CONFIG_ACPI_APEI_EINJ create mode 100644 baseconfig/x86/CONFIG_ACPI_APEI_ERST_DEBUG create mode 100644 baseconfig/x86/CONFIG_ACPI_APEI_GHES create mode 100644 baseconfig/x86/CONFIG_ACPI_APEI_MEMORY_FAILURE create mode 100644 baseconfig/x86/CONFIG_ACPI_APEI_PCIEAER create mode 100644 baseconfig/x86/CONFIG_ACPI_BATTERY create mode 100644 baseconfig/x86/CONFIG_ACPI_BGRT create mode 100644 baseconfig/x86/CONFIG_ACPI_BUTTON create mode 100644 baseconfig/x86/CONFIG_ACPI_CMPC create mode 100644 baseconfig/x86/CONFIG_ACPI_CONFIGFS create mode 100644 baseconfig/x86/CONFIG_ACPI_CONTAINER create mode 100644 baseconfig/x86/CONFIG_ACPI_CUSTOM_METHOD create mode 100644 baseconfig/x86/CONFIG_ACPI_DOCK create mode 100644 baseconfig/x86/CONFIG_ACPI_EC_DEBUGFS create mode 100644 baseconfig/x86/CONFIG_ACPI_EXTLOG create mode 100644 baseconfig/x86/CONFIG_ACPI_FAN create mode 100644 baseconfig/x86/CONFIG_ACPI_HED create mode 100644 baseconfig/x86/CONFIG_ACPI_I2C_OPREGION create mode 100644 baseconfig/x86/CONFIG_ACPI_IPMI create mode 100644 baseconfig/x86/CONFIG_ACPI_PROCESSOR create mode 100644 baseconfig/x86/CONFIG_ACPI_PROCESSOR_AGGREGATOR create mode 100644 baseconfig/x86/CONFIG_ACPI_PROCFS create mode 100644 baseconfig/x86/CONFIG_ACPI_PROCFS_POWER create mode 100644 baseconfig/x86/CONFIG_ACPI_REV_OVERRIDE_POSSIBLE create mode 100644 baseconfig/x86/CONFIG_ACPI_SBS create mode 100644 baseconfig/x86/CONFIG_ACPI_SLEEP create mode 100644 baseconfig/x86/CONFIG_ACPI_TABLE_UPGRADE create mode 100644 baseconfig/x86/CONFIG_ACPI_THERMAL create mode 100644 baseconfig/x86/CONFIG_ACPI_TOSHIBA create mode 100644 baseconfig/x86/CONFIG_ACPI_VIDEO create mode 100644 baseconfig/x86/CONFIG_ACPI_WMI create mode 100644 baseconfig/x86/CONFIG_AGP create mode 100644 baseconfig/x86/CONFIG_AGP_ALI create mode 100644 baseconfig/x86/CONFIG_AGP_AMD create mode 100644 baseconfig/x86/CONFIG_AGP_AMD64 create mode 100644 baseconfig/x86/CONFIG_AGP_ATI create mode 100644 baseconfig/x86/CONFIG_AGP_EFFICEON create mode 100644 baseconfig/x86/CONFIG_AGP_INTEL create mode 100644 baseconfig/x86/CONFIG_AGP_NVIDIA create mode 100644 baseconfig/x86/CONFIG_AGP_SIS create mode 100644 baseconfig/x86/CONFIG_AGP_SWORKS create mode 100644 baseconfig/x86/CONFIG_AGP_VIA create mode 100644 baseconfig/x86/CONFIG_ALIENWARE_WMI create mode 100644 baseconfig/x86/CONFIG_AMD_XGBE create mode 100644 baseconfig/x86/CONFIG_AMD_XGBE_DCB create mode 100644 baseconfig/x86/CONFIG_AMILO_RFKILL create mode 100644 baseconfig/x86/CONFIG_APPLE_GMUX create mode 100644 baseconfig/x86/CONFIG_APPLE_PROPERTIES create mode 100644 baseconfig/x86/CONFIG_ASUS_LAPTOP create mode 100644 baseconfig/x86/CONFIG_ASUS_NB_WMI create mode 100644 baseconfig/x86/CONFIG_ASUS_WIRELESS create mode 100644 baseconfig/x86/CONFIG_ASUS_WMI create mode 100644 baseconfig/x86/CONFIG_BACKLIGHT_APPLE create mode 100644 baseconfig/x86/CONFIG_BLK_DEV_AMD74XX create mode 100644 baseconfig/x86/CONFIG_BLK_DEV_PCIESSD_MTIP32XX create mode 100644 baseconfig/x86/CONFIG_BXT_WC_PMIC_OPREGION create mode 100644 baseconfig/x86/CONFIG_CAPI_EICON create mode 100644 baseconfig/x86/CONFIG_CC_STACKPROTECTOR create mode 100644 baseconfig/x86/CONFIG_CC_STACKPROTECTOR_STRONG create mode 100644 baseconfig/x86/CONFIG_CHROMEOS_LAPTOP create mode 100644 baseconfig/x86/CONFIG_CHROMEOS_PSTORE create mode 100644 baseconfig/x86/CONFIG_CMDLINE_BOOL create mode 100644 baseconfig/x86/CONFIG_COMPAL_LAPTOP create mode 100644 baseconfig/x86/CONFIG_COMPAT_VDSO create mode 100644 baseconfig/x86/CONFIG_CPA_DEBUG create mode 100644 baseconfig/x86/CONFIG_CRC_PMIC_OPREGION create mode 100644 baseconfig/x86/CONFIG_CRYPTO_AES_NI_INTEL create mode 100644 baseconfig/x86/CONFIG_CRYPTO_CRC32_PCLMUL create mode 100644 baseconfig/x86/CONFIG_CRYPTO_DEV_CCP create mode 100644 baseconfig/x86/CONFIG_CRYPTO_DEV_CCP_CRYPTO create mode 100644 baseconfig/x86/CONFIG_CRYPTO_DEV_CCP_DD create mode 100644 baseconfig/x86/CONFIG_CRYPTO_DEV_PADLOCK create mode 100644 baseconfig/x86/CONFIG_CRYPTO_DEV_PADLOCK_AES create mode 100644 baseconfig/x86/CONFIG_CRYPTO_DEV_PADLOCK_SHA create mode 100644 baseconfig/x86/CONFIG_CRYPTO_DEV_QAT_C3XXX create mode 100644 baseconfig/x86/CONFIG_CRYPTO_DEV_QAT_C3XXXVF create mode 100644 baseconfig/x86/CONFIG_CRYPTO_DEV_QAT_C62X create mode 100644 baseconfig/x86/CONFIG_CRYPTO_DEV_QAT_C62XVF create mode 100644 baseconfig/x86/CONFIG_CRYPTO_DEV_QAT_DH895xCC create mode 100644 baseconfig/x86/CONFIG_CRYPTO_DEV_QAT_DH895xCCVF create mode 100644 baseconfig/x86/CONFIG_CRYPTO_SERPENT_SSE2_586 create mode 100644 baseconfig/x86/CONFIG_DCDBAS create mode 100644 baseconfig/x86/CONFIG_DEBUG_ENTRY create mode 100644 baseconfig/x86/CONFIG_DEBUG_NMI_SELFTEST create mode 100644 baseconfig/x86/CONFIG_DEBUG_PER_CPU_MAPS create mode 100644 baseconfig/x86/CONFIG_DEBUG_STACKOVERFLOW create mode 100644 baseconfig/x86/CONFIG_DEBUG_TLBFLUSH create mode 100644 baseconfig/x86/CONFIG_DEBUG_WX create mode 100644 baseconfig/x86/CONFIG_DELL_LAPTOP create mode 100644 baseconfig/x86/CONFIG_DELL_RBTN create mode 100644 baseconfig/x86/CONFIG_DELL_RBU create mode 100644 baseconfig/x86/CONFIG_DELL_SMBIOS create mode 100644 baseconfig/x86/CONFIG_DELL_SMO8800 create mode 100644 baseconfig/x86/CONFIG_DELL_WMI create mode 100644 baseconfig/x86/CONFIG_DELL_WMI_AIO create mode 100644 baseconfig/x86/CONFIG_DMIID create mode 100644 baseconfig/x86/CONFIG_DMI_SYSFS create mode 100644 baseconfig/x86/CONFIG_DPTF_POWER create mode 100644 baseconfig/x86/CONFIG_DRM_GMA3600 create mode 100644 baseconfig/x86/CONFIG_DRM_GMA500 create mode 100644 baseconfig/x86/CONFIG_DRM_GMA600 create mode 100644 baseconfig/x86/CONFIG_DRM_PANEL_LG_LG4573 create mode 100644 baseconfig/x86/CONFIG_DRM_PANEL_PANASONIC_VVX10F034N00 create mode 100644 baseconfig/x86/CONFIG_DRM_PANEL_SAMSUNG_LD9040 create mode 100644 baseconfig/x86/CONFIG_DW_DMAC_CORE create mode 100644 baseconfig/x86/CONFIG_DW_DMAC_PCI create mode 100644 baseconfig/x86/CONFIG_E1000E_HWTS create mode 100644 baseconfig/x86/CONFIG_EADC_AMD64 create mode 100644 baseconfig/x86/CONFIG_EARLY_PRINTK_EFI create mode 100644 baseconfig/x86/CONFIG_EDAC_AMD76X create mode 100644 baseconfig/x86/CONFIG_EDAC_AMD8111 create mode 100644 baseconfig/x86/CONFIG_EDAC_AMD8131 create mode 100644 baseconfig/x86/CONFIG_EDAC_DECODE_MCE create mode 100644 baseconfig/x86/CONFIG_EDAC_E752X create mode 100644 baseconfig/x86/CONFIG_EDAC_E7XXX create mode 100644 baseconfig/x86/CONFIG_EDAC_I3000 create mode 100644 baseconfig/x86/CONFIG_EDAC_I3200 create mode 100644 baseconfig/x86/CONFIG_EDAC_I5000 create mode 100644 baseconfig/x86/CONFIG_EDAC_I5100 create mode 100644 baseconfig/x86/CONFIG_EDAC_I5400 create mode 100644 baseconfig/x86/CONFIG_EDAC_I7300 create mode 100644 baseconfig/x86/CONFIG_EDAC_I7CORE create mode 100644 baseconfig/x86/CONFIG_EDAC_I82860 create mode 100644 baseconfig/x86/CONFIG_EDAC_I82875P create mode 100644 baseconfig/x86/CONFIG_EDAC_I82975X create mode 100644 baseconfig/x86/CONFIG_EDAC_IE31200 create mode 100644 baseconfig/x86/CONFIG_EDAC_R82600 create mode 100644 baseconfig/x86/CONFIG_EDAC_X38 create mode 100644 baseconfig/x86/CONFIG_EDD create mode 100644 baseconfig/x86/CONFIG_EDD_OFF create mode 100644 baseconfig/x86/CONFIG_EEEPC_LAPTOP create mode 100644 baseconfig/x86/CONFIG_EEEPC_WMI create mode 100644 baseconfig/x86/CONFIG_EFI create mode 100644 baseconfig/x86/CONFIG_EFIVAR_FS create mode 100644 baseconfig/x86/CONFIG_EFI_ALLOW_SECURE_BOOT_EXIT create mode 100644 baseconfig/x86/CONFIG_EFI_BOOTLOADER_CONTROL create mode 100644 baseconfig/x86/CONFIG_EFI_CAPSULE_LOADER create mode 100644 baseconfig/x86/CONFIG_EFI_FAKE_MEMMAP create mode 100644 baseconfig/x86/CONFIG_EFI_PCDP create mode 100644 baseconfig/x86/CONFIG_EFI_RUNTIME_MAP create mode 100644 baseconfig/x86/CONFIG_EFI_SECURE_BOOT_LOCK_DOWN create mode 100644 baseconfig/x86/CONFIG_EFI_SECURE_BOOT_SIG_ENFORCE create mode 100644 baseconfig/x86/CONFIG_EFI_SIGNATURE_LIST_PARSER create mode 100644 baseconfig/x86/CONFIG_EFI_STUB create mode 100644 baseconfig/x86/CONFIG_EFI_VARS create mode 100644 baseconfig/x86/CONFIG_EFI_VARS_PSTORE create mode 100644 baseconfig/x86/CONFIG_EFI_VARS_PSTORE_DEFAULT_DISABLE create mode 100644 baseconfig/x86/CONFIG_F71808E_WDT create mode 100644 baseconfig/x86/CONFIG_FB_EFI create mode 100644 baseconfig/x86/CONFIG_FB_HYPERV create mode 100644 baseconfig/x86/CONFIG_FB_N411 create mode 100644 baseconfig/x86/CONFIG_FUJITSU_ES create mode 100644 baseconfig/x86/CONFIG_FUJITSU_LAPTOP create mode 100644 baseconfig/x86/CONFIG_FUJITSU_LAPTOP_DEBUG create mode 100644 baseconfig/x86/CONFIG_FUJITSU_TABLET create mode 100644 baseconfig/x86/CONFIG_GENERIC_ISA_DMA create mode 100644 baseconfig/x86/CONFIG_GPIO_104_IDI_48 create mode 100644 baseconfig/x86/CONFIG_GPIO_CRYSTAL_COVE create mode 100644 baseconfig/x86/CONFIG_GPIO_F7188X create mode 100644 baseconfig/x86/CONFIG_GPIO_ICH create mode 100644 baseconfig/x86/CONFIG_GPIO_INTEL_MID create mode 100644 baseconfig/x86/CONFIG_GPIO_LYNXPOINT create mode 100644 baseconfig/x86/CONFIG_GPIO_WHISKEY_COVE create mode 100644 baseconfig/x86/CONFIG_HID_HYPERV_MOUSE create mode 100644 baseconfig/x86/CONFIG_HOTPLUG_PCI_COMPAQ create mode 100644 baseconfig/x86/CONFIG_HOTPLUG_PCI_COMPAQ_NVRAM create mode 100644 baseconfig/x86/CONFIG_HOTPLUG_PCI_IBM create mode 100644 baseconfig/x86/CONFIG_HPET create mode 100644 baseconfig/x86/CONFIG_HPET_MMAP create mode 100644 baseconfig/x86/CONFIG_HPET_TIMER create mode 100644 baseconfig/x86/CONFIG_HPWDT_NMI_DECODING create mode 100644 baseconfig/x86/CONFIG_HP_ACCEL create mode 100644 baseconfig/x86/CONFIG_HP_ILO create mode 100644 baseconfig/x86/CONFIG_HP_WATCHDOG create mode 100644 baseconfig/x86/CONFIG_HP_WIRELESS create mode 100644 baseconfig/x86/CONFIG_HP_WMI create mode 100644 baseconfig/x86/CONFIG_HVC_XEN create mode 100644 baseconfig/x86/CONFIG_HVC_XEN_FRONTEND create mode 100644 baseconfig/x86/CONFIG_HW_RANDOM_AMD create mode 100644 baseconfig/x86/CONFIG_HW_RANDOM_INTEL create mode 100644 baseconfig/x86/CONFIG_HW_RANDOM_VIA create mode 100644 baseconfig/x86/CONFIG_HYPERV create mode 100644 baseconfig/x86/CONFIG_HYPERVISOR_GUEST create mode 100644 baseconfig/x86/CONFIG_HYPERV_BALLOON create mode 100644 baseconfig/x86/CONFIG_HYPERV_KEYBOARD create mode 100644 baseconfig/x86/CONFIG_HYPERV_NET create mode 100644 baseconfig/x86/CONFIG_HYPERV_STORAGE create mode 100644 baseconfig/x86/CONFIG_HYPERV_UTILS create mode 100644 baseconfig/x86/CONFIG_I2C create mode 100644 baseconfig/x86/CONFIG_I2C_AMD756 create mode 100644 baseconfig/x86/CONFIG_I2C_AMD756_S4882 create mode 100644 baseconfig/x86/CONFIG_I2C_AMD8111 create mode 100644 baseconfig/x86/CONFIG_I2C_DESIGNWARE_BAYTRAIL create mode 100644 baseconfig/x86/CONFIG_I2C_DESIGNWARE_CORE create mode 100644 baseconfig/x86/CONFIG_I2C_DESIGNWARE_PLATFORM create mode 100644 baseconfig/x86/CONFIG_I2C_I801 create mode 100644 baseconfig/x86/CONFIG_I2C_ISCH create mode 100644 baseconfig/x86/CONFIG_I2C_ISMT create mode 100644 baseconfig/x86/CONFIG_I2C_NFORCE2 create mode 100644 baseconfig/x86/CONFIG_I2C_NFORCE2_S4985 create mode 100644 baseconfig/x86/CONFIG_I2C_PIIX4 create mode 100644 baseconfig/x86/CONFIG_I2C_SCMI create mode 100644 baseconfig/x86/CONFIG_I2C_SIS96X create mode 100644 baseconfig/x86/CONFIG_I2C_VIA create mode 100644 baseconfig/x86/CONFIG_I2C_VIAPRO create mode 100644 baseconfig/x86/CONFIG_I8K create mode 100644 baseconfig/x86/CONFIG_IBM_ASM create mode 100644 baseconfig/x86/CONFIG_IBM_RTL create mode 100644 baseconfig/x86/CONFIG_IDEAPAD_LAPTOP create mode 100644 baseconfig/x86/CONFIG_IDMA64 create mode 100644 baseconfig/x86/CONFIG_IE6XX_WDT create mode 100644 baseconfig/x86/CONFIG_INPUT_SOC_BUTTON_ARRAY create mode 100644 baseconfig/x86/CONFIG_INPUT_XEN_KBDDEV_FRONTEND create mode 100644 baseconfig/x86/CONFIG_INT3406_THERMAL create mode 100644 baseconfig/x86/CONFIG_INT340X_THERMAL create mode 100644 baseconfig/x86/CONFIG_INTEL_BXT_PMIC_THERMAL create mode 100644 baseconfig/x86/CONFIG_INTEL_HID_EVENT create mode 100644 baseconfig/x86/CONFIG_INTEL_IDLE create mode 100644 baseconfig/x86/CONFIG_INTEL_IDMA64 create mode 100644 baseconfig/x86/CONFIG_INTEL_IOATDMA create mode 100644 baseconfig/x86/CONFIG_INTEL_IOMMU create mode 100644 baseconfig/x86/CONFIG_INTEL_IOMMU_DEFAULT_ON create mode 100644 baseconfig/x86/CONFIG_INTEL_IOMMU_FLOPPY_WA create mode 100644 baseconfig/x86/CONFIG_INTEL_IOMMU_SVM create mode 100644 baseconfig/x86/CONFIG_INTEL_IPS create mode 100644 baseconfig/x86/CONFIG_INTEL_MEI create mode 100644 baseconfig/x86/CONFIG_INTEL_MEI_ME create mode 100644 baseconfig/x86/CONFIG_INTEL_MEI_TXE create mode 100644 baseconfig/x86/CONFIG_INTEL_MEI_WDT create mode 100644 baseconfig/x86/CONFIG_INTEL_OAKTRAIL create mode 100644 baseconfig/x86/CONFIG_INTEL_PCH_THERMAL create mode 100644 baseconfig/x86/CONFIG_INTEL_PMC_CORE create mode 100644 baseconfig/x86/CONFIG_INTEL_PMC_IPC create mode 100644 baseconfig/x86/CONFIG_INTEL_POWERCLAMP create mode 100644 baseconfig/x86/CONFIG_INTEL_PUNIT_IPC create mode 100644 baseconfig/x86/CONFIG_INTEL_RAPL create mode 100644 baseconfig/x86/CONFIG_INTEL_RDT_A create mode 100644 baseconfig/x86/CONFIG_INTEL_RST create mode 100644 baseconfig/x86/CONFIG_INTEL_SCU_IPC create mode 100644 baseconfig/x86/CONFIG_INTEL_SMARTCONNECT create mode 100644 baseconfig/x86/CONFIG_INTEL_SOC_DTS_THERMAL create mode 100644 baseconfig/x86/CONFIG_INTEL_SOC_PMIC create mode 100644 baseconfig/x86/CONFIG_INTEL_VBTN create mode 100644 baseconfig/x86/CONFIG_IOMMU_STRESS create mode 100644 baseconfig/x86/CONFIG_IOSF_MBI create mode 100644 baseconfig/x86/CONFIG_IOSF_MBI_DEBUG create mode 100644 baseconfig/x86/CONFIG_IPW2100 create mode 100644 baseconfig/x86/CONFIG_IPW2100_MONITOR create mode 100644 baseconfig/x86/CONFIG_IPW2200 create mode 100644 baseconfig/x86/CONFIG_IPW2200_MONITOR create mode 100644 baseconfig/x86/CONFIG_IPW2200_PROMISCUOUS create mode 100644 baseconfig/x86/CONFIG_IPW2200_QOS create mode 100644 baseconfig/x86/CONFIG_IPW2200_RADIOTAP create mode 100644 baseconfig/x86/CONFIG_IRQ_DOMAIN_DEBUG create mode 100644 baseconfig/x86/CONFIG_ISCSI_IBFT create mode 100644 baseconfig/x86/CONFIG_ISCSI_IBFT_FIND create mode 100644 baseconfig/x86/CONFIG_KEXEC_VERIFY_SIG create mode 100644 baseconfig/x86/CONFIG_KEYBOARD_GPIO create mode 100644 baseconfig/x86/CONFIG_KVM create mode 100644 baseconfig/x86/CONFIG_KVM_AMD create mode 100644 baseconfig/x86/CONFIG_KVM_DEBUG_FS create mode 100644 baseconfig/x86/CONFIG_KVM_DEVICE_ASSIGNMENT create mode 100644 baseconfig/x86/CONFIG_KVM_GUEST create mode 100644 baseconfig/x86/CONFIG_KVM_INTEL create mode 100644 baseconfig/x86/CONFIG_KVM_MMU_AUDIT create mode 100644 baseconfig/x86/CONFIG_LGUEST create mode 100644 baseconfig/x86/CONFIG_LGUEST_GUEST create mode 100644 baseconfig/x86/CONFIG_LOCK_DOWN_KERNEL create mode 100644 baseconfig/x86/CONFIG_LPC_ICH create mode 100644 baseconfig/x86/CONFIG_LPC_SCH create mode 100644 baseconfig/x86/CONFIG_MACINTOSH_DRIVERS create mode 100644 baseconfig/x86/CONFIG_MAXSMP create mode 100644 baseconfig/x86/CONFIG_MEMTEST create mode 100644 baseconfig/x86/CONFIG_MFD_88PM800 create mode 100644 baseconfig/x86/CONFIG_MFD_88PM805 create mode 100644 baseconfig/x86/CONFIG_MFD_AAT2870_CORE create mode 100644 baseconfig/x86/CONFIG_MFD_AS3711 create mode 100644 baseconfig/x86/CONFIG_MFD_AXP20X create mode 100644 baseconfig/x86/CONFIG_MFD_DA9052_I2C create mode 100644 baseconfig/x86/CONFIG_MFD_DA9055 create mode 100644 baseconfig/x86/CONFIG_MFD_INTEL_LPSS_ACPI create mode 100644 baseconfig/x86/CONFIG_MFD_INTEL_LPSS_PCI create mode 100644 baseconfig/x86/CONFIG_MFD_INTEL_QUARK_I2C_GPIO create mode 100644 baseconfig/x86/CONFIG_MFD_LP8788 create mode 100644 baseconfig/x86/CONFIG_MFD_RC5T583 create mode 100644 baseconfig/x86/CONFIG_MFD_SEC_CORE create mode 100644 baseconfig/x86/CONFIG_MFD_SMSC create mode 100644 baseconfig/x86/CONFIG_MFD_TPS6586X create mode 100644 baseconfig/x86/CONFIG_MICROCODE create mode 100644 baseconfig/x86/CONFIG_MICROCODE_AMD create mode 100644 baseconfig/x86/CONFIG_MICROCODE_INTEL create mode 100644 baseconfig/x86/CONFIG_MMIOTRACE create mode 100644 baseconfig/x86/CONFIG_MMIOTRACE_TEST create mode 100644 baseconfig/x86/CONFIG_MODULE_SIG_UEFI create mode 100644 baseconfig/x86/CONFIG_MOUSE_PS2_VMMOUSE create mode 100644 baseconfig/x86/CONFIG_MPILIB create mode 100644 baseconfig/x86/CONFIG_MSI_LAPTOP create mode 100644 baseconfig/x86/CONFIG_MSI_WMI create mode 100644 baseconfig/x86/CONFIG_MTD_CK804XROM create mode 100644 baseconfig/x86/CONFIG_MTD_ESB2ROM create mode 100644 baseconfig/x86/CONFIG_MTRR create mode 100644 baseconfig/x86/CONFIG_MTRR_SANITIZER create mode 100644 baseconfig/x86/CONFIG_MTRR_SANITIZER_ENABLE_DEFAULT create mode 100644 baseconfig/x86/CONFIG_MTRR_SANITIZER_SPARE_REG_NR_DEFAULT create mode 100644 baseconfig/x86/CONFIG_NET_SB1000 create mode 100644 baseconfig/x86/CONFIG_NET_VENDOR_SOLARFLARE create mode 100644 baseconfig/x86/CONFIG_NFC_MEI_PHY create mode 100644 baseconfig/x86/CONFIG_NFC_MICROREAD_MEI create mode 100644 baseconfig/x86/CONFIG_NFC_PN544_MEI create mode 100644 baseconfig/x86/CONFIG_NO_BOOTMEM create mode 100644 baseconfig/x86/CONFIG_NVRAM create mode 100644 baseconfig/x86/CONFIG_NV_TCO create mode 100644 baseconfig/x86/CONFIG_PANASONIC_LAPTOP create mode 100644 baseconfig/x86/CONFIG_PARAVIRT create mode 100644 baseconfig/x86/CONFIG_PARAVIRT_DEBUG create mode 100644 baseconfig/x86/CONFIG_PARAVIRT_SPINLOCKS create mode 100644 baseconfig/x86/CONFIG_PARAVIRT_TIME_ACCOUNTING create mode 100644 baseconfig/x86/CONFIG_PCH_CAN create mode 100644 baseconfig/x86/CONFIG_PCH_DMA create mode 100644 baseconfig/x86/CONFIG_PCH_GBE create mode 100644 baseconfig/x86/CONFIG_PCH_PHUB create mode 100644 baseconfig/x86/CONFIG_PCI_BIOS create mode 100644 baseconfig/x86/CONFIG_PCI_CNB20LE_QUIRK create mode 100644 baseconfig/x86/CONFIG_PCI_HYPERV create mode 100644 baseconfig/x86/CONFIG_PCI_MMCONFIG create mode 100644 baseconfig/x86/CONFIG_PERF_EVENTS_AMD_POWER create mode 100644 baseconfig/x86/CONFIG_PERF_EVENTS_INTEL_CSTATE create mode 100644 baseconfig/x86/CONFIG_PERF_EVENTS_INTEL_RAPL create mode 100644 baseconfig/x86/CONFIG_PERF_EVENTS_INTEL_UNCORE create mode 100644 baseconfig/x86/CONFIG_PINCTRL create mode 100644 baseconfig/x86/CONFIG_PINCTRL_AMD create mode 100644 baseconfig/x86/CONFIG_PINCTRL_BAYTRAIL create mode 100644 baseconfig/x86/CONFIG_PINCTRL_BROXTON create mode 100644 baseconfig/x86/CONFIG_PINCTRL_CHERRYVIEW create mode 100644 baseconfig/x86/CONFIG_PINCTRL_SUNRISEPOINT create mode 100644 baseconfig/x86/CONFIG_PMIC_ADP5520 create mode 100644 baseconfig/x86/CONFIG_PMIC_DA903X create mode 100644 baseconfig/x86/CONFIG_PMIC_OPREGION create mode 100644 baseconfig/x86/CONFIG_PNP create mode 100644 baseconfig/x86/CONFIG_PNPACPI create mode 100644 baseconfig/x86/CONFIG_PNP_DEBUG_MESSAGES create mode 100644 baseconfig/x86/CONFIG_PROC_VMCORE create mode 100644 baseconfig/x86/CONFIG_PUNIT_ATOM_DEBUG create mode 100644 baseconfig/x86/CONFIG_PVPANIC create mode 100644 baseconfig/x86/CONFIG_PWM_CRC create mode 100644 baseconfig/x86/CONFIG_PWM_LPSS create mode 100644 baseconfig/x86/CONFIG_PWM_LPSS_PCI create mode 100644 baseconfig/x86/CONFIG_PWM_LPSS_PLATFORM create mode 100644 baseconfig/x86/CONFIG_RANDOMIZE_BASE create mode 100644 baseconfig/x86/CONFIG_RAPIDIO create mode 100644 baseconfig/x86/CONFIG_RCU_FANOUT_LEAF create mode 100644 baseconfig/x86/CONFIG_REGMAP_I2C create mode 100644 baseconfig/x86/CONFIG_RELOCATABLE create mode 100644 baseconfig/x86/CONFIG_SAMSUNG_LAPTOP create mode 100644 baseconfig/x86/CONFIG_SAMSUNG_Q10 create mode 100644 baseconfig/x86/CONFIG_SBC_FITPC2_WATCHDOG create mode 100644 baseconfig/x86/CONFIG_SCHED_MC create mode 100644 baseconfig/x86/CONFIG_SCHED_MC_PRIO create mode 100644 baseconfig/x86/CONFIG_SCHED_SMT create mode 100644 baseconfig/x86/CONFIG_SCSI_ADVANSYS create mode 100644 baseconfig/x86/CONFIG_SENSORS_ABITUGURU create mode 100644 baseconfig/x86/CONFIG_SENSORS_ABITUGURU3 create mode 100644 baseconfig/x86/CONFIG_SENSORS_ACPI_POWER create mode 100644 baseconfig/x86/CONFIG_SENSORS_APPLESMC=m create mode 100644 baseconfig/x86/CONFIG_SENSORS_ASB100 create mode 100644 baseconfig/x86/CONFIG_SENSORS_ATK0110 create mode 100644 baseconfig/x86/CONFIG_SENSORS_CORETEMP create mode 100644 baseconfig/x86/CONFIG_SENSORS_DELL_SMM create mode 100644 baseconfig/x86/CONFIG_SENSORS_FAM15H_POWER create mode 100644 baseconfig/x86/CONFIG_SENSORS_FSCHMD create mode 100644 baseconfig/x86/CONFIG_SENSORS_I5500 create mode 100644 baseconfig/x86/CONFIG_SENSORS_I5K_AMB create mode 100644 baseconfig/x86/CONFIG_SENSORS_K10TEMP create mode 100644 baseconfig/x86/CONFIG_SENSORS_K8TEMP create mode 100644 baseconfig/x86/CONFIG_SENSORS_VIA_CPUTEMP create mode 100644 baseconfig/x86/CONFIG_SFI create mode 100644 baseconfig/x86/CONFIG_SMSC37B787_WDT create mode 100644 baseconfig/x86/CONFIG_SND_SOC_AC97_CODEC create mode 100644 baseconfig/x86/CONFIG_SND_SOC_INTEL_BAYTRAIL create mode 100644 baseconfig/x86/CONFIG_SND_SOC_INTEL_BDW_RT5677_MACH create mode 100644 baseconfig/x86/CONFIG_SND_SOC_INTEL_BROADWELL_MACH create mode 100644 baseconfig/x86/CONFIG_SND_SOC_INTEL_BXT_DA7219_MAX98357A_MACH create mode 100644 baseconfig/x86/CONFIG_SND_SOC_INTEL_BXT_RT298_MACH create mode 100644 baseconfig/x86/CONFIG_SND_SOC_INTEL_BYTCR_RT5640_MACH create mode 100644 baseconfig/x86/CONFIG_SND_SOC_INTEL_BYTCR_RT5651_MACH create mode 100644 baseconfig/x86/CONFIG_SND_SOC_INTEL_BYT_MAX98090_MACH create mode 100644 baseconfig/x86/CONFIG_SND_SOC_INTEL_BYT_RT5640_MACH create mode 100644 baseconfig/x86/CONFIG_SND_SOC_INTEL_CHT_BSW_MAX98090_TI_MACH create mode 100644 baseconfig/x86/CONFIG_SND_SOC_INTEL_CHT_BSW_RT5645_MACH create mode 100644 baseconfig/x86/CONFIG_SND_SOC_INTEL_CHT_BSW_RT5672_MACH create mode 100644 baseconfig/x86/CONFIG_SND_SOC_INTEL_HASWELL_MACH create mode 100644 baseconfig/x86/CONFIG_SND_SOC_INTEL_SKL_NAU88L25_MAX98357A_MACH create mode 100644 baseconfig/x86/CONFIG_SND_SOC_INTEL_SKL_NAU88L25_SSM4567_MACH create mode 100644 baseconfig/x86/CONFIG_SND_SOC_INTEL_SKL_RT286_MACH create mode 100644 baseconfig/x86/CONFIG_SND_SOC_INTEL_SST create mode 100644 baseconfig/x86/CONFIG_SND_SOC_INTEL_SST_ACPI create mode 100644 baseconfig/x86/CONFIG_SND_SOC_TAS571X create mode 100644 baseconfig/x86/CONFIG_SONYPI_COMPAT create mode 100644 baseconfig/x86/CONFIG_SONY_LAPTOP create mode 100644 baseconfig/x86/CONFIG_SP5100_TCO create mode 100644 baseconfig/x86/CONFIG_SPI create mode 100644 baseconfig/x86/CONFIG_SPI_CADENCE create mode 100644 baseconfig/x86/CONFIG_SPI_MASTER create mode 100644 baseconfig/x86/CONFIG_SPI_PXA2XX create mode 100644 baseconfig/x86/CONFIG_SPI_ROCKCHIP create mode 100644 baseconfig/x86/CONFIG_SPI_ZYNQMP_GQSPI create mode 100644 baseconfig/x86/CONFIG_SURFACE3_WMI create mode 100644 baseconfig/x86/CONFIG_SURFACE_3_BUTTON create mode 100644 baseconfig/x86/CONFIG_SURFACE_PRO3_BUTTON create mode 100644 baseconfig/x86/CONFIG_TCG_CRB create mode 100644 baseconfig/x86/CONFIG_TCG_INFINEON create mode 100644 baseconfig/x86/CONFIG_THERMAL_GOV_BANG_BANG create mode 100644 baseconfig/x86/CONFIG_THERMAL_GOV_USER_SPACE create mode 100644 baseconfig/x86/CONFIG_THERMAL_WRITABLE_TRIPS create mode 100644 baseconfig/x86/CONFIG_THINKPAD_ACPI create mode 100644 baseconfig/x86/CONFIG_THINKPAD_ACPI_ALSA_SUPPORT create mode 100644 baseconfig/x86/CONFIG_THINKPAD_ACPI_DEBUG create mode 100644 baseconfig/x86/CONFIG_THINKPAD_ACPI_DEBUGFACILITIES create mode 100644 baseconfig/x86/CONFIG_THINKPAD_ACPI_HOTKEY_POLL create mode 100644 baseconfig/x86/CONFIG_THINKPAD_ACPI_UNSAFE_LEDS create mode 100644 baseconfig/x86/CONFIG_THINKPAD_ACPI_VIDEO create mode 100644 baseconfig/x86/CONFIG_TOPSTAR_LAPTOP create mode 100644 baseconfig/x86/CONFIG_TOSHIBA_BT_RFKILL create mode 100644 baseconfig/x86/CONFIG_TOSHIBA_HAPS create mode 100644 baseconfig/x86/CONFIG_TOSHIBA_WMI create mode 100644 baseconfig/x86/CONFIG_TOUCHSCREEN_CY8CTMG110 create mode 100644 baseconfig/x86/CONFIG_TOUCHSCREEN_GOODIX create mode 100644 baseconfig/x86/CONFIG_TOUCHSCREEN_INTEL_MID create mode 100644 baseconfig/x86/CONFIG_TOUCHSCREEN_SURFACE3_SPI create mode 100644 baseconfig/x86/CONFIG_UID16 create mode 100644 baseconfig/x86/CONFIG_VFIO_PCI_VGA create mode 100644 baseconfig/x86/CONFIG_VGA_SWITCHEROO create mode 100644 baseconfig/x86/CONFIG_VIA_WDT create mode 100644 baseconfig/x86/CONFIG_VIDEO_VIA_CAMERA create mode 100644 baseconfig/x86/CONFIG_VMD create mode 100644 baseconfig/x86/CONFIG_VMWARE_VMCI create mode 100644 baseconfig/x86/CONFIG_VMWARE_VMCI_VSOCKETS create mode 100644 baseconfig/x86/CONFIG_VMXNET3 create mode 100644 baseconfig/x86/CONFIG_X86_ACPI_CPUFREQ create mode 100644 baseconfig/x86/CONFIG_X86_ACPI_CPUFREQ_CPB create mode 100644 baseconfig/x86/CONFIG_X86_AMD_FREQ_SENSITIVITY create mode 100644 baseconfig/x86/CONFIG_X86_AMD_PLATFORM_DEVICE create mode 100644 baseconfig/x86/CONFIG_X86_CHECK_BIOS_CORRUPTION create mode 100644 baseconfig/x86/CONFIG_X86_CPUID create mode 100644 baseconfig/x86/CONFIG_X86_DEBUG_FPU create mode 100644 baseconfig/x86/CONFIG_X86_DECODER_SELFTEST create mode 100644 baseconfig/x86/CONFIG_X86_EXTENDED_PLATFORM create mode 100644 baseconfig/x86/CONFIG_X86_GENERIC create mode 100644 baseconfig/x86/CONFIG_X86_GOLDFISH create mode 100644 baseconfig/x86/CONFIG_X86_INTEL_LPSS create mode 100644 baseconfig/x86/CONFIG_X86_INTEL_MID create mode 100644 baseconfig/x86/CONFIG_X86_INTEL_MPX create mode 100644 baseconfig/x86/CONFIG_X86_INTEL_PSTATE create mode 100644 baseconfig/x86/CONFIG_X86_LEGACY_VM86 create mode 100644 baseconfig/x86/CONFIG_X86_MCE create mode 100644 baseconfig/x86/CONFIG_X86_MCE_AMD create mode 100644 baseconfig/x86/CONFIG_X86_MCE_INJECT create mode 100644 baseconfig/x86/CONFIG_X86_MCE_INTEL create mode 100644 baseconfig/x86/CONFIG_X86_MPPARSE create mode 100644 baseconfig/x86/CONFIG_X86_MSR create mode 100644 baseconfig/x86/CONFIG_X86_P4_CLOCKMOD create mode 100644 baseconfig/x86/CONFIG_X86_PAT create mode 100644 baseconfig/x86/CONFIG_X86_PCC_CPUFREQ create mode 100644 baseconfig/x86/CONFIG_X86_PKG_TEMP_THERMAL create mode 100644 baseconfig/x86/CONFIG_X86_PLATFORM_DEVICES create mode 100644 baseconfig/x86/CONFIG_X86_PMEM_LEGACY create mode 100644 baseconfig/x86/CONFIG_X86_PM_TIMER create mode 100644 baseconfig/x86/CONFIG_X86_POWERNOW_K8 create mode 100644 baseconfig/x86/CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS create mode 100644 baseconfig/x86/CONFIG_X86_RESERVE_LOW create mode 100644 baseconfig/x86/CONFIG_X86_SPEEDSTEP_CENTRINO create mode 100644 baseconfig/x86/CONFIG_X86_SYSFB create mode 100644 baseconfig/x86/CONFIG_X86_VERBOSE_BOOTUP create mode 100644 baseconfig/x86/CONFIG_XEN create mode 100644 baseconfig/x86/CONFIG_XENFS create mode 100644 baseconfig/x86/CONFIG_XEN_ACPI_PROCESSOR create mode 100644 baseconfig/x86/CONFIG_XEN_BACKEND create mode 100644 baseconfig/x86/CONFIG_XEN_BALLOON create mode 100644 baseconfig/x86/CONFIG_XEN_BLKDEV_BACKEND create mode 100644 baseconfig/x86/CONFIG_XEN_BLKDEV_FRONTEND create mode 100644 baseconfig/x86/CONFIG_XEN_COMPAT_XENFS create mode 100644 baseconfig/x86/CONFIG_XEN_DEBUG create mode 100644 baseconfig/x86/CONFIG_XEN_DEBUG_FS create mode 100644 baseconfig/x86/CONFIG_XEN_FBDEV_FRONTEND create mode 100644 baseconfig/x86/CONFIG_XEN_GNTDEV create mode 100644 baseconfig/x86/CONFIG_XEN_GRANT_DEV_ALLOC create mode 100644 baseconfig/x86/CONFIG_XEN_NETDEV_BACKEND create mode 100644 baseconfig/x86/CONFIG_XEN_NETDEV_FRONTEND create mode 100644 baseconfig/x86/CONFIG_XEN_PCIDEV_BACKEND create mode 100644 baseconfig/x86/CONFIG_XEN_PCIDEV_FRONTEND create mode 100644 baseconfig/x86/CONFIG_XEN_SAVE_RESTORE create mode 100644 baseconfig/x86/CONFIG_XEN_SCRUB_PAGES create mode 100644 baseconfig/x86/CONFIG_XEN_SCSI_BACKEND create mode 100644 baseconfig/x86/CONFIG_XEN_SCSI_FRONTEND create mode 100644 baseconfig/x86/CONFIG_XEN_SELFBALLOONING create mode 100644 baseconfig/x86/CONFIG_XEN_SYMS create mode 100644 baseconfig/x86/CONFIG_XEN_WDT create mode 100644 baseconfig/x86/CONFIG_XO15_EBOOK create mode 100644 baseconfig/x86/CONFIG_XPOWER_PMIC_OPREGION create mode 100644 baseconfig/x86/CONFIG_XZ_DEC_X86 create mode 100644 baseconfig/x86/i686/CONFIG_4KSTACKS create mode 100644 baseconfig/x86/i686/CONFIG_64BIT create mode 100644 baseconfig/x86/i686/CONFIG_ALIX create mode 100644 baseconfig/x86/i686/CONFIG_APM create mode 100644 baseconfig/x86/i686/CONFIG_APM_ALLOW_INTS create mode 100644 baseconfig/x86/i686/CONFIG_APM_CPU_IDLE create mode 100644 baseconfig/x86/i686/CONFIG_APM_DISPLAY_BLANK create mode 100644 baseconfig/x86/i686/CONFIG_APM_DO_ENABLE create mode 100644 baseconfig/x86/i686/CONFIG_APM_IGNORE_USER_SUSPEND create mode 100644 baseconfig/x86/i686/CONFIG_BACKLIGHT_OT200 create mode 100644 baseconfig/x86/i686/CONFIG_BACKLIGHT_PWM create mode 100644 baseconfig/x86/i686/CONFIG_BATTERY_OLPC create mode 100644 baseconfig/x86/i686/CONFIG_COMMON_CLK_SI570 create mode 100644 baseconfig/x86/i686/CONFIG_CRYPTO_AES_586 create mode 100644 baseconfig/x86/i686/CONFIG_CRYPTO_CRYPTD create mode 100644 baseconfig/x86/i686/CONFIG_CRYPTO_DEV_GEODE create mode 100644 baseconfig/x86/i686/CONFIG_CRYPTO_LRW create mode 100644 baseconfig/x86/i686/CONFIG_CRYPTO_TWOFISH_586 create mode 100644 baseconfig/x86/i686/CONFIG_CS5535_CLOCK_EVENT_SRC create mode 100644 baseconfig/x86/i686/CONFIG_CS5535_MFGPT create mode 100644 baseconfig/x86/i686/CONFIG_DRM_PANEL create mode 100644 baseconfig/x86/i686/CONFIG_DRM_PANEL_SHARP_LQ101R1SX01 create mode 100644 baseconfig/x86/i686/CONFIG_DRM_PANEL_SHARP_LS043T1LE01 create mode 100644 baseconfig/x86/i686/CONFIG_DW_DMAC_CORE create mode 100644 baseconfig/x86/i686/CONFIG_DW_DMAC_PCI create mode 100644 baseconfig/x86/i686/CONFIG_EDAC_SBRIDGE create mode 100644 baseconfig/x86/i686/CONFIG_FB_GEODE create mode 100644 baseconfig/x86/i686/CONFIG_FB_GEODE_GX create mode 100644 baseconfig/x86/i686/CONFIG_FB_GEODE_GX1 create mode 100644 baseconfig/x86/i686/CONFIG_FB_GEODE_LX create mode 100644 baseconfig/x86/i686/CONFIG_FB_MODE_HELPERS create mode 100644 baseconfig/x86/i686/CONFIG_FB_OLPC_DCON create mode 100644 baseconfig/x86/i686/CONFIG_FB_SSD1307 create mode 100644 baseconfig/x86/i686/CONFIG_GENERIC_PHY create mode 100644 baseconfig/x86/i686/CONFIG_GEODE_WDT create mode 100644 baseconfig/x86/i686/CONFIG_GEOS create mode 100644 baseconfig/x86/i686/CONFIG_GPIO_74XX_MMIO create mode 100644 baseconfig/x86/i686/CONFIG_GPIO_CS5535 create mode 100644 baseconfig/x86/i686/CONFIG_GPIO_SCH create mode 100644 baseconfig/x86/i686/CONFIG_GPIO_SODAVILLE create mode 100644 baseconfig/x86/i686/CONFIG_HIGHMEM create mode 100644 baseconfig/x86/i686/CONFIG_HIGHMEM4G create mode 100644 baseconfig/x86/i686/CONFIG_HIGHMEM64G create mode 100644 baseconfig/x86/i686/CONFIG_HIGHPTE create mode 100644 baseconfig/x86/i686/CONFIG_HOTPLUG_PCI_SHPC create mode 100644 baseconfig/x86/i686/CONFIG_HSU_DMA create mode 100644 baseconfig/x86/i686/CONFIG_HW_RANDOM_GEODE create mode 100644 baseconfig/x86/i686/CONFIG_I2C_ALI1535 create mode 100644 baseconfig/x86/i686/CONFIG_I2C_ALI1563 create mode 100644 baseconfig/x86/i686/CONFIG_I2C_ALI15X3 create mode 100644 baseconfig/x86/i686/CONFIG_I2C_MUX create mode 100644 baseconfig/x86/i686/CONFIG_I2C_PXA create mode 100644 baseconfig/x86/i686/CONFIG_I2C_SIS5595 create mode 100644 baseconfig/x86/i686/CONFIG_I2C_SIS630 create mode 100644 baseconfig/x86/i686/CONFIG_I2O create mode 100644 baseconfig/x86/i686/CONFIG_IB700_WDT create mode 100644 baseconfig/x86/i686/CONFIG_INPUT_GP2A create mode 100644 baseconfig/x86/i686/CONFIG_INPUT_GPIO_TILT_POLLED create mode 100644 baseconfig/x86/i686/CONFIG_INPUT_MATRIXKMAP create mode 100644 baseconfig/x86/i686/CONFIG_INPUT_PWM_BEEPER create mode 100644 baseconfig/x86/i686/CONFIG_INTEL_TXT create mode 100644 baseconfig/x86/i686/CONFIG_KEXEC_JUMP create mode 100644 baseconfig/x86/i686/CONFIG_KEYBOARD_BCM create mode 100644 baseconfig/x86/i686/CONFIG_LBDAF create mode 100644 baseconfig/x86/i686/CONFIG_LEDS_INTEL_SS4200 create mode 100644 baseconfig/x86/i686/CONFIG_M486 create mode 100644 baseconfig/x86/i686/CONFIG_M586 create mode 100644 baseconfig/x86/i686/CONFIG_M586MMX create mode 100644 baseconfig/x86/i686/CONFIG_M586TSC create mode 100644 baseconfig/x86/i686/CONFIG_M686 create mode 100644 baseconfig/x86/i686/CONFIG_MATH_EMULATION create mode 100644 baseconfig/x86/i686/CONFIG_MCRUSOE create mode 100644 baseconfig/x86/i686/CONFIG_MCYRIXIII create mode 100644 baseconfig/x86/i686/CONFIG_MDIO_BUS_MUX_GPIO create mode 100644 baseconfig/x86/i686/CONFIG_MDIO_BUS_MUX_MMIOREG create mode 100644 baseconfig/x86/i686/CONFIG_MFD_CS5535 create mode 100644 baseconfig/x86/i686/CONFIG_MK6 create mode 100644 baseconfig/x86/i686/CONFIG_MK7 create mode 100644 baseconfig/x86/i686/CONFIG_MK8 create mode 100644 baseconfig/x86/i686/CONFIG_MLX5_INFINIBAND create mode 100644 baseconfig/x86/i686/CONFIG_MMC_SDHCI_OF create mode 100644 baseconfig/x86/i686/CONFIG_MOUSE_PS2_OLPC create mode 100644 baseconfig/x86/i686/CONFIG_MPENTIUM4 create mode 100644 baseconfig/x86/i686/CONFIG_MPENTIUMII create mode 100644 baseconfig/x86/i686/CONFIG_MPENTIUMIII create mode 100644 baseconfig/x86/i686/CONFIG_MPENTIUMM create mode 100644 baseconfig/x86/i686/CONFIG_MTD_NAND_CAFE create mode 100644 baseconfig/x86/i686/CONFIG_MTD_OF_PARTS create mode 100644 baseconfig/x86/i686/CONFIG_MTD_PHYSMAP_OF create mode 100644 baseconfig/x86/i686/CONFIG_MVIAC3_2 create mode 100644 baseconfig/x86/i686/CONFIG_MWINCHIP3D create mode 100644 baseconfig/x86/i686/CONFIG_MWINCHIPC6 create mode 100644 baseconfig/x86/i686/CONFIG_NET5501 create mode 100644 baseconfig/x86/i686/CONFIG_NOHIGHMEM create mode 100644 baseconfig/x86/i686/CONFIG_NR_CPUS create mode 100644 baseconfig/x86/i686/CONFIG_NSC_GPIO create mode 100644 baseconfig/x86/i686/CONFIG_NUMA create mode 100644 baseconfig/x86/i686/CONFIG_OF create mode 100644 baseconfig/x86/i686/CONFIG_OF_OVERLAY create mode 100644 baseconfig/x86/i686/CONFIG_OF_UNITTEST create mode 100644 baseconfig/x86/i686/CONFIG_OLPC create mode 100644 baseconfig/x86/i686/CONFIG_OLPC_XO1 create mode 100644 baseconfig/x86/i686/CONFIG_OLPC_XO15_SCI create mode 100644 baseconfig/x86/i686/CONFIG_OLPC_XO1_PM create mode 100644 baseconfig/x86/i686/CONFIG_OLPC_XO1_RTC create mode 100644 baseconfig/x86/i686/CONFIG_OLPC_XO1_SCI create mode 100644 baseconfig/x86/i686/CONFIG_PC8736x_GPIO create mode 100644 baseconfig/x86/i686/CONFIG_PCI_DIRECT create mode 100644 baseconfig/x86/i686/CONFIG_PCI_GOANY create mode 100644 baseconfig/x86/i686/CONFIG_PCI_GOBIOS create mode 100644 baseconfig/x86/i686/CONFIG_PCI_GODIRECT create mode 100644 baseconfig/x86/i686/CONFIG_PCI_GOMMCONFIG create mode 100644 baseconfig/x86/i686/CONFIG_PHYSICAL_ALIGN create mode 100644 baseconfig/x86/i686/CONFIG_PHYSICAL_START create mode 100644 baseconfig/x86/i686/CONFIG_PINCONF create mode 100644 baseconfig/x86/i686/CONFIG_PINCTRL_BCM281XX create mode 100644 baseconfig/x86/i686/CONFIG_PINCTRL_SINGLE create mode 100644 baseconfig/x86/i686/CONFIG_PINMUX create mode 100644 baseconfig/x86/i686/CONFIG_POWER_RESET_GPIO create mode 100644 baseconfig/x86/i686/CONFIG_POWER_RESET_GPIO_RESTART create mode 100644 baseconfig/x86/i686/CONFIG_PROVIDE_OHCI1394_DMA_INIT create mode 100644 baseconfig/x86/i686/CONFIG_RCU_FANOUT create mode 100644 baseconfig/x86/i686/CONFIG_REGMAP_I2C create mode 100644 baseconfig/x86/i686/CONFIG_SCx200 create mode 100644 baseconfig/x86/i686/CONFIG_SCx200_ACB create mode 100644 baseconfig/x86/i686/CONFIG_SERIAL_8250_MID create mode 100644 baseconfig/x86/i686/CONFIG_SERIAL_GRLIB_GAISLER_APBUART create mode 100644 baseconfig/x86/i686/CONFIG_SERIAL_OF_PLATFORM create mode 100644 baseconfig/x86/i686/CONFIG_SND_SOC_SSM4567 create mode 100644 baseconfig/x86/i686/CONFIG_SND_SOC_TS3A227E create mode 100644 baseconfig/x86/i686/CONFIG_SONYPI create mode 100644 baseconfig/x86/i686/CONFIG_SONYPI_COMPAT create mode 100644 baseconfig/x86/i686/CONFIG_SPARSE_IRQ create mode 100644 baseconfig/x86/i686/CONFIG_STA2X11 create mode 100644 baseconfig/x86/i686/CONFIG_SYNC_FILE create mode 100644 baseconfig/x86/i686/CONFIG_TC1100_WMI create mode 100644 baseconfig/x86/i686/CONFIG_TOSHIBA create mode 100644 baseconfig/x86/i686/CONFIG_TOUCHSCREEN_AUO_PIXCIR create mode 100644 baseconfig/x86/i686/CONFIG_TRANSPARENT_HUGEPAGE create mode 100644 baseconfig/x86/i686/CONFIG_VIDEO_CAFE_CCIC create mode 100644 baseconfig/x86/i686/CONFIG_X86_32_IRIS create mode 100644 baseconfig/x86/i686/CONFIG_X86_32_NON_STANDARD create mode 100644 baseconfig/x86/i686/CONFIG_X86_ANCIENT_MCE create mode 100644 baseconfig/x86/i686/CONFIG_X86_BIGSMP create mode 100644 baseconfig/x86/i686/CONFIG_X86_CPUFREQ_NFORCE2 create mode 100644 baseconfig/x86/i686/CONFIG_X86_E_POWERSAVER create mode 100644 baseconfig/x86/i686/CONFIG_X86_GENERIC create mode 100644 baseconfig/x86/i686/CONFIG_X86_GOLDFISH create mode 100644 baseconfig/x86/i686/CONFIG_X86_GX_SUSPMOD create mode 100644 baseconfig/x86/i686/CONFIG_X86_INTEL_MID create mode 100644 baseconfig/x86/i686/CONFIG_X86_INTEL_QUARK create mode 100644 baseconfig/x86/i686/CONFIG_X86_LONGHAUL create mode 100644 baseconfig/x86/i686/CONFIG_X86_LONGRUN create mode 100644 baseconfig/x86/i686/CONFIG_X86_POWERNOW_K6 create mode 100644 baseconfig/x86/i686/CONFIG_X86_POWERNOW_K7 create mode 100644 baseconfig/x86/i686/CONFIG_X86_PPRO_FENCE create mode 100644 baseconfig/x86/i686/CONFIG_X86_RDC321X create mode 100644 baseconfig/x86/i686/CONFIG_X86_REBOOTFIXUPS create mode 100644 baseconfig/x86/i686/CONFIG_X86_SPEEDSTEP_ICH create mode 100644 baseconfig/x86/i686/CONFIG_X86_SPEEDSTEP_LIB create mode 100644 baseconfig/x86/i686/CONFIG_X86_SPEEDSTEP_RELAXED_CAP_CHECK create mode 100644 baseconfig/x86/i686/CONFIG_X86_SPEEDSTEP_SMI create mode 100644 baseconfig/x86/i686/CONFIG_XO1_RFKILL create mode 100644 baseconfig/x86/i686/CONFIG_ZONE_DMA create mode 100644 baseconfig/x86/i686PAE/CONFIG_4KSTACKS create mode 100644 baseconfig/x86/i686PAE/CONFIG_64BIT create mode 100644 baseconfig/x86/i686PAE/CONFIG_ALIX create mode 100644 baseconfig/x86/i686PAE/CONFIG_APM create mode 100644 baseconfig/x86/i686PAE/CONFIG_APM_ALLOW_INTS create mode 100644 baseconfig/x86/i686PAE/CONFIG_APM_CPU_IDLE create mode 100644 baseconfig/x86/i686PAE/CONFIG_APM_DISPLAY_BLANK create mode 100644 baseconfig/x86/i686PAE/CONFIG_APM_DO_ENABLE create mode 100644 baseconfig/x86/i686PAE/CONFIG_APM_IGNORE_USER_SUSPEND create mode 100644 baseconfig/x86/i686PAE/CONFIG_BACKLIGHT_OT200 create mode 100644 baseconfig/x86/i686PAE/CONFIG_BACKLIGHT_PWM create mode 100644 baseconfig/x86/i686PAE/CONFIG_BATTERY_OLPC create mode 100644 baseconfig/x86/i686PAE/CONFIG_COMMON_CLK_SI570 create mode 100644 baseconfig/x86/i686PAE/CONFIG_CRYPTO_AES_586 create mode 100644 baseconfig/x86/i686PAE/CONFIG_CRYPTO_CRYPTD create mode 100644 baseconfig/x86/i686PAE/CONFIG_CRYPTO_DEV_GEODE create mode 100644 baseconfig/x86/i686PAE/CONFIG_CRYPTO_LRW create mode 100644 baseconfig/x86/i686PAE/CONFIG_CRYPTO_TWOFISH_586 create mode 100644 baseconfig/x86/i686PAE/CONFIG_CS5535_CLOCK_EVENT_SRC create mode 100644 baseconfig/x86/i686PAE/CONFIG_CS5535_MFGPT create mode 100644 baseconfig/x86/i686PAE/CONFIG_DRM_PANEL create mode 100644 baseconfig/x86/i686PAE/CONFIG_DRM_PANEL_SHARP_LQ101R1SX01 create mode 100644 baseconfig/x86/i686PAE/CONFIG_DRM_PANEL_SHARP_LS043T1LE01 create mode 100644 baseconfig/x86/i686PAE/CONFIG_DW_DMAC_CORE create mode 100644 baseconfig/x86/i686PAE/CONFIG_DW_DMAC_PCI create mode 100644 baseconfig/x86/i686PAE/CONFIG_EDAC_SBRIDGE create mode 100644 baseconfig/x86/i686PAE/CONFIG_FB_GEODE create mode 100644 baseconfig/x86/i686PAE/CONFIG_FB_GEODE_GX create mode 100644 baseconfig/x86/i686PAE/CONFIG_FB_GEODE_GX1 create mode 100644 baseconfig/x86/i686PAE/CONFIG_FB_GEODE_LX create mode 100644 baseconfig/x86/i686PAE/CONFIG_FB_MODE_HELPERS create mode 100644 baseconfig/x86/i686PAE/CONFIG_FB_OLPC_DCON create mode 100644 baseconfig/x86/i686PAE/CONFIG_FB_SSD1307 create mode 100644 baseconfig/x86/i686PAE/CONFIG_GENERIC_PHY create mode 100644 baseconfig/x86/i686PAE/CONFIG_GEODE_WDT create mode 100644 baseconfig/x86/i686PAE/CONFIG_GEOS create mode 100644 baseconfig/x86/i686PAE/CONFIG_GPIO_74XX_MMIO create mode 100644 baseconfig/x86/i686PAE/CONFIG_GPIO_SCH create mode 100644 baseconfig/x86/i686PAE/CONFIG_GPIO_SODAVILLE create mode 100644 baseconfig/x86/i686PAE/CONFIG_HIGHMEM create mode 100644 baseconfig/x86/i686PAE/CONFIG_HIGHMEM4G create mode 100644 baseconfig/x86/i686PAE/CONFIG_HIGHMEM64G create mode 100644 baseconfig/x86/i686PAE/CONFIG_HIGHPTE create mode 100644 baseconfig/x86/i686PAE/CONFIG_HOTPLUG_PCI_SHPC create mode 100644 baseconfig/x86/i686PAE/CONFIG_HSU_DMA create mode 100644 baseconfig/x86/i686PAE/CONFIG_HW_RANDOM_GEODE create mode 100644 baseconfig/x86/i686PAE/CONFIG_I2C_ALI1535 create mode 100644 baseconfig/x86/i686PAE/CONFIG_I2C_ALI1563 create mode 100644 baseconfig/x86/i686PAE/CONFIG_I2C_ALI15X3 create mode 100644 baseconfig/x86/i686PAE/CONFIG_I2C_MUX create mode 100644 baseconfig/x86/i686PAE/CONFIG_I2C_PXA create mode 100644 baseconfig/x86/i686PAE/CONFIG_I2C_SIS5595 create mode 100644 baseconfig/x86/i686PAE/CONFIG_I2C_SIS630 create mode 100644 baseconfig/x86/i686PAE/CONFIG_I2O create mode 100644 baseconfig/x86/i686PAE/CONFIG_IB700_WDT create mode 100644 baseconfig/x86/i686PAE/CONFIG_INPUT_GP2A create mode 100644 baseconfig/x86/i686PAE/CONFIG_INPUT_GPIO_TILT_POLLED create mode 100644 baseconfig/x86/i686PAE/CONFIG_INPUT_MATRIXKMAP create mode 100644 baseconfig/x86/i686PAE/CONFIG_INPUT_PWM_BEEPER create mode 100644 baseconfig/x86/i686PAE/CONFIG_INTEL_TXT create mode 100644 baseconfig/x86/i686PAE/CONFIG_KEXEC_JUMP create mode 100644 baseconfig/x86/i686PAE/CONFIG_KEYBOARD_BCM create mode 100644 baseconfig/x86/i686PAE/CONFIG_LBDAF create mode 100644 baseconfig/x86/i686PAE/CONFIG_LEDS_INTEL_SS4200 create mode 100644 baseconfig/x86/i686PAE/CONFIG_LIBNVDIMM create mode 100644 baseconfig/x86/i686PAE/CONFIG_M486 create mode 100644 baseconfig/x86/i686PAE/CONFIG_M586 create mode 100644 baseconfig/x86/i686PAE/CONFIG_M586MMX create mode 100644 baseconfig/x86/i686PAE/CONFIG_M586TSC create mode 100644 baseconfig/x86/i686PAE/CONFIG_M686 create mode 100644 baseconfig/x86/i686PAE/CONFIG_MATH_EMULATION create mode 100644 baseconfig/x86/i686PAE/CONFIG_MCRUSOE create mode 100644 baseconfig/x86/i686PAE/CONFIG_MCYRIXIII create mode 100644 baseconfig/x86/i686PAE/CONFIG_MFD_CS5535 create mode 100644 baseconfig/x86/i686PAE/CONFIG_MK6 create mode 100644 baseconfig/x86/i686PAE/CONFIG_MK7 create mode 100644 baseconfig/x86/i686PAE/CONFIG_MK8 create mode 100644 baseconfig/x86/i686PAE/CONFIG_MLX5_INFINIBAND create mode 100644 baseconfig/x86/i686PAE/CONFIG_MMC_SDHCI_OF create mode 100644 baseconfig/x86/i686PAE/CONFIG_MOUSE_PS2_OLPC create mode 100644 baseconfig/x86/i686PAE/CONFIG_MPENTIUM4 create mode 100644 baseconfig/x86/i686PAE/CONFIG_MPENTIUMII create mode 100644 baseconfig/x86/i686PAE/CONFIG_MPENTIUMIII create mode 100644 baseconfig/x86/i686PAE/CONFIG_MPENTIUMM create mode 100644 baseconfig/x86/i686PAE/CONFIG_MTD_NAND_CAFE create mode 100644 baseconfig/x86/i686PAE/CONFIG_MTD_OF_PARTS create mode 100644 baseconfig/x86/i686PAE/CONFIG_MTD_PHYSMAP_OF create mode 100644 baseconfig/x86/i686PAE/CONFIG_MVIAC3_2 create mode 100644 baseconfig/x86/i686PAE/CONFIG_MWINCHIP3D create mode 100644 baseconfig/x86/i686PAE/CONFIG_MWINCHIPC6 create mode 100644 baseconfig/x86/i686PAE/CONFIG_NET5501 create mode 100644 baseconfig/x86/i686PAE/CONFIG_NOHIGHMEM create mode 100644 baseconfig/x86/i686PAE/CONFIG_NR_CPUS create mode 100644 baseconfig/x86/i686PAE/CONFIG_NSC_GPIO create mode 100644 baseconfig/x86/i686PAE/CONFIG_NUMA create mode 100644 baseconfig/x86/i686PAE/CONFIG_OF create mode 100644 baseconfig/x86/i686PAE/CONFIG_OF_OVERLAY create mode 100644 baseconfig/x86/i686PAE/CONFIG_OF_UNITTEST create mode 100644 baseconfig/x86/i686PAE/CONFIG_OLPC create mode 100644 baseconfig/x86/i686PAE/CONFIG_OLPC_XO1 create mode 100644 baseconfig/x86/i686PAE/CONFIG_OLPC_XO15_SCI create mode 100644 baseconfig/x86/i686PAE/CONFIG_OLPC_XO1_PM create mode 100644 baseconfig/x86/i686PAE/CONFIG_OLPC_XO1_RTC create mode 100644 baseconfig/x86/i686PAE/CONFIG_OLPC_XO1_SCI create mode 100644 baseconfig/x86/i686PAE/CONFIG_PC8736x_GPIO create mode 100644 baseconfig/x86/i686PAE/CONFIG_PCI_DIRECT create mode 100644 baseconfig/x86/i686PAE/CONFIG_PCI_GOANY create mode 100644 baseconfig/x86/i686PAE/CONFIG_PCI_GOBIOS create mode 100644 baseconfig/x86/i686PAE/CONFIG_PCI_GODIRECT create mode 100644 baseconfig/x86/i686PAE/CONFIG_PCI_GOMMCONFIG create mode 100644 baseconfig/x86/i686PAE/CONFIG_PHYSICAL_ALIGN create mode 100644 baseconfig/x86/i686PAE/CONFIG_PHYSICAL_START create mode 100644 baseconfig/x86/i686PAE/CONFIG_PINCONF create mode 100644 baseconfig/x86/i686PAE/CONFIG_PINCTRL_BCM281XX create mode 100644 baseconfig/x86/i686PAE/CONFIG_PINCTRL_SINGLE create mode 100644 baseconfig/x86/i686PAE/CONFIG_PINMUX create mode 100644 baseconfig/x86/i686PAE/CONFIG_POWER_RESET_GPIO create mode 100644 baseconfig/x86/i686PAE/CONFIG_POWER_RESET_GPIO_RESTART create mode 100644 baseconfig/x86/i686PAE/CONFIG_PROVIDE_OHCI1394_DMA_INIT create mode 100644 baseconfig/x86/i686PAE/CONFIG_RCU_FANOUT create mode 100644 baseconfig/x86/i686PAE/CONFIG_REGMAP_I2C create mode 100644 baseconfig/x86/i686PAE/CONFIG_SCx200 create mode 100644 baseconfig/x86/i686PAE/CONFIG_SCx200_ACB create mode 100644 baseconfig/x86/i686PAE/CONFIG_SERIAL_8250_MID create mode 100644 baseconfig/x86/i686PAE/CONFIG_SERIAL_GRLIB_GAISLER_APBUART create mode 100644 baseconfig/x86/i686PAE/CONFIG_SERIAL_OF_PLATFORM create mode 100644 baseconfig/x86/i686PAE/CONFIG_SND_SOC_SSM4567 create mode 100644 baseconfig/x86/i686PAE/CONFIG_SND_SOC_TS3A227E create mode 100644 baseconfig/x86/i686PAE/CONFIG_SONYPI create mode 100644 baseconfig/x86/i686PAE/CONFIG_SONYPI_COMPAT create mode 100644 baseconfig/x86/i686PAE/CONFIG_SPARSE_IRQ create mode 100644 baseconfig/x86/i686PAE/CONFIG_STA2X11 create mode 100644 baseconfig/x86/i686PAE/CONFIG_SYNC_FILE create mode 100644 baseconfig/x86/i686PAE/CONFIG_TC1100_WMI create mode 100644 baseconfig/x86/i686PAE/CONFIG_TOSHIBA create mode 100644 baseconfig/x86/i686PAE/CONFIG_TOUCHSCREEN_AUO_PIXCIR create mode 100644 baseconfig/x86/i686PAE/CONFIG_TRANSPARENT_HUGEPAGE create mode 100644 baseconfig/x86/i686PAE/CONFIG_VIDEO_CAFE_CCIC create mode 100644 baseconfig/x86/i686PAE/CONFIG_X86_32_IRIS create mode 100644 baseconfig/x86/i686PAE/CONFIG_X86_32_NON_STANDARD create mode 100644 baseconfig/x86/i686PAE/CONFIG_X86_ANCIENT_MCE create mode 100644 baseconfig/x86/i686PAE/CONFIG_X86_BIGSMP create mode 100644 baseconfig/x86/i686PAE/CONFIG_X86_CPUFREQ_NFORCE2 create mode 100644 baseconfig/x86/i686PAE/CONFIG_X86_E_POWERSAVER create mode 100644 baseconfig/x86/i686PAE/CONFIG_X86_GENERIC create mode 100644 baseconfig/x86/i686PAE/CONFIG_X86_GOLDFISH create mode 100644 baseconfig/x86/i686PAE/CONFIG_X86_GX_SUSPMOD create mode 100644 baseconfig/x86/i686PAE/CONFIG_X86_INTEL_MID create mode 100644 baseconfig/x86/i686PAE/CONFIG_X86_INTEL_QUARK create mode 100644 baseconfig/x86/i686PAE/CONFIG_X86_LONGHAUL create mode 100644 baseconfig/x86/i686PAE/CONFIG_X86_LONGRUN create mode 100644 baseconfig/x86/i686PAE/CONFIG_X86_POWERNOW_K6 create mode 100644 baseconfig/x86/i686PAE/CONFIG_X86_POWERNOW_K7 create mode 100644 baseconfig/x86/i686PAE/CONFIG_X86_PPRO_FENCE create mode 100644 baseconfig/x86/i686PAE/CONFIG_X86_RDC321X create mode 100644 baseconfig/x86/i686PAE/CONFIG_X86_REBOOTFIXUPS create mode 100644 baseconfig/x86/i686PAE/CONFIG_X86_SPEEDSTEP_ICH create mode 100644 baseconfig/x86/i686PAE/CONFIG_X86_SPEEDSTEP_LIB create mode 100644 baseconfig/x86/i686PAE/CONFIG_X86_SPEEDSTEP_RELAXED_CAP_CHECK create mode 100644 baseconfig/x86/i686PAE/CONFIG_X86_SPEEDSTEP_SMI create mode 100644 baseconfig/x86/i686PAE/CONFIG_XEN_DEV_EVTCHN create mode 100644 baseconfig/x86/i686PAE/CONFIG_XEN_SYS_HYPERVISOR create mode 100644 baseconfig/x86/i686PAE/CONFIG_XO1_RFKILL create mode 100644 baseconfig/x86/i686PAE/CONFIG_ZONE_DMA create mode 100644 baseconfig/x86/x86_64/CONFIG_64BIT create mode 100644 baseconfig/x86/x86_64/CONFIG_ACPI_HOTPLUG_MEMORY create mode 100644 baseconfig/x86/x86_64/CONFIG_ACPI_NFIT create mode 100644 baseconfig/x86/x86_64/CONFIG_ACPI_NFIT_DEBUG create mode 100644 baseconfig/x86/x86_64/CONFIG_ACPI_NUMA create mode 100644 baseconfig/x86/x86_64/CONFIG_AMD_IOMMU create mode 100644 baseconfig/x86/x86_64/CONFIG_AMD_IOMMU_V2 create mode 100644 baseconfig/x86/x86_64/CONFIG_AMD_NUMA create mode 100644 baseconfig/x86/x86_64/CONFIG_ARCH_MEMORY_PROBE create mode 100644 baseconfig/x86/x86_64/CONFIG_BLK_DEV_CMD640 create mode 100644 baseconfig/x86/x86_64/CONFIG_BLK_DEV_CS5520 create mode 100644 baseconfig/x86/x86_64/CONFIG_BLK_DEV_CS5530 create mode 100644 baseconfig/x86/x86_64/CONFIG_BLK_DEV_CS5535 create mode 100644 baseconfig/x86/x86_64/CONFIG_BLK_DEV_RZ1000 create mode 100644 baseconfig/x86/x86_64/CONFIG_BLK_DEV_TRIFLEX create mode 100644 baseconfig/x86/x86_64/CONFIG_BTT create mode 100644 baseconfig/x86/x86_64/CONFIG_CALGARY_IOMMU create mode 100644 baseconfig/x86/x86_64/CONFIG_CGROUP_HUGETLB create mode 100644 baseconfig/x86/x86_64/CONFIG_CHECKPOINT_RESTORE create mode 100644 baseconfig/x86/x86_64/CONFIG_CMA create mode 100644 baseconfig/x86/x86_64/CONFIG_CMA_AREAS create mode 100644 baseconfig/x86/x86_64/CONFIG_CMA_DEBUG create mode 100644 baseconfig/x86/x86_64/CONFIG_CMA_DEBUGFS create mode 100644 baseconfig/x86/x86_64/CONFIG_CONTEXT_TRACKING_FORCE create mode 100644 baseconfig/x86/x86_64/CONFIG_CRYPTO_AES_X86_64 create mode 100644 baseconfig/x86/x86_64/CONFIG_CRYPTO_BLOWFISH_X86_64 create mode 100644 baseconfig/x86/x86_64/CONFIG_CRYPTO_CAMELLIA_AESNI_AVX2_X86_64 create mode 100644 baseconfig/x86/x86_64/CONFIG_CRYPTO_CAMELLIA_AESNI_AVX_X86_64 create mode 100644 baseconfig/x86/x86_64/CONFIG_CRYPTO_CAMELLIA_X86_64 create mode 100644 baseconfig/x86/x86_64/CONFIG_CRYPTO_CAST5_AVX_X86_64 create mode 100644 baseconfig/x86/x86_64/CONFIG_CRYPTO_CAST6_AVX_X86_64 create mode 100644 baseconfig/x86/x86_64/CONFIG_CRYPTO_CHACHA20_X86_64 create mode 100644 baseconfig/x86/x86_64/CONFIG_CRYPTO_CRCT10DIF_PCLMUL create mode 100644 baseconfig/x86/x86_64/CONFIG_CRYPTO_CRYPTD create mode 100644 baseconfig/x86/x86_64/CONFIG_CRYPTO_DES3_EDE_X86_64 create mode 100644 baseconfig/x86/x86_64/CONFIG_CRYPTO_GHASH_CLMUL_NI_INTEL create mode 100644 baseconfig/x86/x86_64/CONFIG_CRYPTO_LRW create mode 100644 baseconfig/x86/x86_64/CONFIG_CRYPTO_MCRYPTD create mode 100644 baseconfig/x86/x86_64/CONFIG_CRYPTO_POLY1305_X86_64 create mode 100644 baseconfig/x86/x86_64/CONFIG_CRYPTO_SALSA20_X86_64 create mode 100644 baseconfig/x86/x86_64/CONFIG_CRYPTO_SERPENT_AVX2_X86_64 create mode 100644 baseconfig/x86/x86_64/CONFIG_CRYPTO_SERPENT_AVX_X86_64 create mode 100644 baseconfig/x86/x86_64/CONFIG_CRYPTO_SERPENT_SSE2_X86_64 create mode 100644 baseconfig/x86/x86_64/CONFIG_CRYPTO_SHA1_MB create mode 100644 baseconfig/x86/x86_64/CONFIG_CRYPTO_SHA1_SSSE3 create mode 100644 baseconfig/x86/x86_64/CONFIG_CRYPTO_SHA256_MB create mode 100644 baseconfig/x86/x86_64/CONFIG_CRYPTO_SHA256_SSSE3 create mode 100644 baseconfig/x86/x86_64/CONFIG_CRYPTO_SHA512_MB create mode 100644 baseconfig/x86/x86_64/CONFIG_CRYPTO_SHA512_SSSE3 create mode 100644 baseconfig/x86/x86_64/CONFIG_CRYPTO_SKEIN create mode 100644 baseconfig/x86/x86_64/CONFIG_CRYPTO_TWOFISH_AVX_X86_64 create mode 100644 baseconfig/x86/x86_64/CONFIG_CRYPTO_TWOFISH_X86_64 create mode 100644 baseconfig/x86/x86_64/CONFIG_CRYPTO_TWOFISH_X86_64_3WAY create mode 100644 baseconfig/x86/x86_64/CONFIG_DEFAULT_MMAP_MIN_ADDR create mode 100644 baseconfig/x86/x86_64/CONFIG_DEFERRED_STRUCT_PAGE_INIT create mode 100644 baseconfig/x86/x86_64/CONFIG_DEV_DAX create mode 100644 baseconfig/x86/x86_64/CONFIG_DEV_DAX_PMEM create mode 100644 baseconfig/x86/x86_64/CONFIG_DIRECT_GBPAGES create mode 100644 baseconfig/x86/x86_64/CONFIG_DISCONTIGMEM_MANUAL create mode 100644 baseconfig/x86/x86_64/CONFIG_DRM_PANEL create mode 100644 baseconfig/x86/x86_64/CONFIG_EDAC_AMD64 create mode 100644 baseconfig/x86/x86_64/CONFIG_EDAC_AMD64_ERROR_INJECTION create mode 100644 baseconfig/x86/x86_64/CONFIG_EDAC_SBRIDGE create mode 100644 baseconfig/x86/x86_64/CONFIG_EDAC_SKX create mode 100644 baseconfig/x86/x86_64/CONFIG_EFI_MIXED create mode 100644 baseconfig/x86/x86_64/CONFIG_FRAME_WARN create mode 100644 baseconfig/x86/x86_64/CONFIG_FUNCTION_GRAPH_TRACER create mode 100644 baseconfig/x86/x86_64/CONFIG_GART_IOMMU create mode 100644 baseconfig/x86/x86_64/CONFIG_GENERIC_CPU create mode 100644 baseconfig/x86/x86_64/CONFIG_GENERIC_PHY create mode 100644 baseconfig/x86/x86_64/CONFIG_HAVE_MEMORY_PRESENT create mode 100644 baseconfig/x86/x86_64/CONFIG_HFI1_DEBUG_SDMA_ORDER create mode 100644 baseconfig/x86/x86_64/CONFIG_HFI1_VERBS_31BIT_PSN create mode 100644 baseconfig/x86/x86_64/CONFIG_HOTPLUG_PCI_SHPC create mode 100644 baseconfig/x86/x86_64/CONFIG_HSA_AMD create mode 100644 baseconfig/x86/x86_64/CONFIG_HSU_DMA create mode 100644 baseconfig/x86/x86_64/CONFIG_I2C_ALI1535 create mode 100644 baseconfig/x86/x86_64/CONFIG_I2C_ALI1563 create mode 100644 baseconfig/x86/x86_64/CONFIG_I2C_ALI15X3 create mode 100644 baseconfig/x86/x86_64/CONFIG_I2C_MUX create mode 100644 baseconfig/x86/x86_64/CONFIG_I2C_SIS5595 create mode 100644 baseconfig/x86/x86_64/CONFIG_I2C_SIS630 create mode 100644 baseconfig/x86/x86_64/CONFIG_I7300_IDLE create mode 100644 baseconfig/x86/x86_64/CONFIG_IA32_AOUT create mode 100644 baseconfig/x86/x86_64/CONFIG_IA32_EMULATION create mode 100644 baseconfig/x86/x86_64/CONFIG_INFINIBAND_HFI1 create mode 100644 baseconfig/x86/x86_64/CONFIG_INTEL_ISH_HID create mode 100644 baseconfig/x86/x86_64/CONFIG_INTEL_MIC_BUS create mode 100644 baseconfig/x86/x86_64/CONFIG_INTEL_MIC_CARD create mode 100644 baseconfig/x86/x86_64/CONFIG_INTEL_MIC_HOST create mode 100644 baseconfig/x86/x86_64/CONFIG_INTEL_MIC_X100_DMA create mode 100644 baseconfig/x86/x86_64/CONFIG_INTEL_SCU_IPC create mode 100644 baseconfig/x86/x86_64/CONFIG_INTEL_TXT create mode 100644 baseconfig/x86/x86_64/CONFIG_IOMMU_DEBUG create mode 100644 baseconfig/x86/x86_64/CONFIG_IRQ_REMAP create mode 100644 baseconfig/x86/x86_64/CONFIG_KEXEC_BZIMAGE_VERIFY_SIG create mode 100644 baseconfig/x86/x86_64/CONFIG_KEXEC_FILE create mode 100644 baseconfig/x86/x86_64/CONFIG_KEXEC_JUMP create mode 100644 baseconfig/x86/x86_64/CONFIG_KEXEC_VERIFY_SIG create mode 100644 baseconfig/x86/x86_64/CONFIG_LIBNVDIMM create mode 100644 baseconfig/x86/x86_64/CONFIG_MAILBOX create mode 100644 baseconfig/x86/x86_64/CONFIG_MEMORY_HOTPLUG create mode 100644 baseconfig/x86/x86_64/CONFIG_MEMORY_HOTPLUG_DEFAULT_ONLINE create mode 100644 baseconfig/x86/x86_64/CONFIG_MEMORY_HOTREMOVE create mode 100644 baseconfig/x86/x86_64/CONFIG_MEM_SOFT_DIRTY create mode 100644 baseconfig/x86/x86_64/CONFIG_MIC_COSM create mode 100644 baseconfig/x86/x86_64/CONFIG_MK8 create mode 100644 baseconfig/x86/x86_64/CONFIG_MLX_PLATFORM create mode 100644 baseconfig/x86/x86_64/CONFIG_MOVABLE_NODE create mode 100644 baseconfig/x86/x86_64/CONFIG_MPSC create mode 100644 baseconfig/x86/x86_64/CONFIG_MTD_BLKDEVS create mode 100644 baseconfig/x86/x86_64/CONFIG_MTD_BLOCK create mode 100644 baseconfig/x86/x86_64/CONFIG_ND_BLK create mode 100644 baseconfig/x86/x86_64/CONFIG_ND_BTT create mode 100644 baseconfig/x86/x86_64/CONFIG_ND_PFN create mode 100644 baseconfig/x86/x86_64/CONFIG_NODES_SHIFT create mode 100644 baseconfig/x86/x86_64/CONFIG_NO_HZ_FULL create mode 100644 baseconfig/x86/x86_64/CONFIG_NO_HZ_FULL_ALL create mode 100644 baseconfig/x86/x86_64/CONFIG_NO_HZ_FULL_SYSIDLE create mode 100644 baseconfig/x86/x86_64/CONFIG_NO_HZ_IDLE create mode 100644 baseconfig/x86/x86_64/CONFIG_NR_CPUS create mode 100644 baseconfig/x86/x86_64/CONFIG_NR_DEV_DAX create mode 100644 baseconfig/x86/x86_64/CONFIG_NTB create mode 100644 baseconfig/x86/x86_64/CONFIG_NTB_AMD create mode 100644 baseconfig/x86/x86_64/CONFIG_NTB_INTEL create mode 100644 baseconfig/x86/x86_64/CONFIG_NTB_NETDEV create mode 100644 baseconfig/x86/x86_64/CONFIG_NTB_PERF create mode 100644 baseconfig/x86/x86_64/CONFIG_NTB_PINGPONG create mode 100644 baseconfig/x86/x86_64/CONFIG_NTB_TOOL create mode 100644 baseconfig/x86/x86_64/CONFIG_NTB_TRANSPORT create mode 100644 baseconfig/x86/x86_64/CONFIG_NUMA create mode 100644 baseconfig/x86/x86_64/CONFIG_NUMA_BALANCING create mode 100644 baseconfig/x86/x86_64/CONFIG_NUMA_BALANCING_DEFAULT_ENABLED create mode 100644 baseconfig/x86/x86_64/CONFIG_NUMA_EMU create mode 100644 baseconfig/x86/x86_64/CONFIG_NVDIMM_DAX create mode 100644 baseconfig/x86/x86_64/CONFIG_NVDIMM_PFN create mode 100644 baseconfig/x86/x86_64/CONFIG_OF create mode 100644 baseconfig/x86/x86_64/CONFIG_PC8736x_GPIO create mode 100644 baseconfig/x86/x86_64/CONFIG_PHYSICAL_ALIGN create mode 100644 baseconfig/x86/x86_64/CONFIG_PHYSICAL_START create mode 100644 baseconfig/x86/x86_64/CONFIG_PINCONF create mode 100644 baseconfig/x86/x86_64/CONFIG_PINMUX create mode 100644 baseconfig/x86/x86_64/CONFIG_PROVIDE_OHCI1394_DMA_INIT create mode 100644 baseconfig/x86/x86_64/CONFIG_RANDOMIZE_MEMORY create mode 100644 baseconfig/x86/x86_64/CONFIG_RCU_FANOUT create mode 100644 baseconfig/x86/x86_64/CONFIG_REGMAP_I2C create mode 100644 baseconfig/x86/x86_64/CONFIG_SCIF create mode 100644 baseconfig/x86/x86_64/CONFIG_SCIF_BUS create mode 100644 baseconfig/x86/x86_64/CONFIG_SDMA_VERBOSITY create mode 100644 baseconfig/x86/x86_64/CONFIG_SERIAL_8250_MID create mode 100644 baseconfig/x86/x86_64/CONFIG_SFC create mode 100644 baseconfig/x86/x86_64/CONFIG_SFC_MCDI_LOGGING create mode 100644 baseconfig/x86/x86_64/CONFIG_SFC_MCDI_MON create mode 100644 baseconfig/x86/x86_64/CONFIG_SFC_MTD create mode 100644 baseconfig/x86/x86_64/CONFIG_SFC_SRIOV create mode 100644 baseconfig/x86/x86_64/CONFIG_SGI_GRU create mode 100644 baseconfig/x86/x86_64/CONFIG_SGI_GRU_DEBUG create mode 100644 baseconfig/x86/x86_64/CONFIG_SGI_IOC4 create mode 100644 baseconfig/x86/x86_64/CONFIG_SGI_XP create mode 100644 baseconfig/x86/x86_64/CONFIG_SND_SOC_SSM4567 create mode 100644 baseconfig/x86/x86_64/CONFIG_SND_SOC_TS3A227E create mode 100644 baseconfig/x86/x86_64/CONFIG_SPARSEMEM create mode 100644 baseconfig/x86/x86_64/CONFIG_SPARSEMEM_EXTREME create mode 100644 baseconfig/x86/x86_64/CONFIG_SPARSEMEM_MANUAL create mode 100644 baseconfig/x86/x86_64/CONFIG_SPARSEMEM_VMEMMAP create mode 100644 baseconfig/x86/x86_64/CONFIG_SPARSE_IRQ create mode 100644 baseconfig/x86/x86_64/CONFIG_SWIOTLB create mode 100644 baseconfig/x86/x86_64/CONFIG_SYNC_FILE create mode 100644 baseconfig/x86/x86_64/CONFIG_THUNDERBOLT create mode 100644 baseconfig/x86/x86_64/CONFIG_TRANSPARENT_HUGEPAGE create mode 100644 baseconfig/x86/x86_64/CONFIG_TRANSPARENT_HUGEPAGE_MADVISE create mode 100644 baseconfig/x86/x86_64/CONFIG_UV_MMTIMER create mode 100644 baseconfig/x86/x86_64/CONFIG_VIDEO_CAFE_CCIC create mode 100644 baseconfig/x86/x86_64/CONFIG_VMAP_STACK create mode 100644 baseconfig/x86/x86_64/CONFIG_VOP create mode 100644 baseconfig/x86/x86_64/CONFIG_VOP_BUS create mode 100644 baseconfig/x86/x86_64/CONFIG_X86_64_ACPI_NUMA create mode 100644 baseconfig/x86/x86_64/CONFIG_X86_INTEL_MEMORY_PROTECTION_KEYS create mode 100644 baseconfig/x86/x86_64/CONFIG_X86_MPPARSE create mode 100644 baseconfig/x86/x86_64/CONFIG_X86_NUMACHIP create mode 100644 baseconfig/x86/x86_64/CONFIG_X86_UV create mode 100644 baseconfig/x86/x86_64/CONFIG_X86_VSMP create mode 100644 baseconfig/x86/x86_64/CONFIG_X86_X2APIC create mode 100644 baseconfig/x86/x86_64/CONFIG_X86_X32 create mode 100644 baseconfig/x86/x86_64/CONFIG_XEN_512GB create mode 100644 baseconfig/x86/x86_64/CONFIG_XEN_BALLOON_MEMORY_HOTPLUG create mode 100644 baseconfig/x86/x86_64/CONFIG_XEN_DEV_EVTCHN create mode 100644 baseconfig/x86/x86_64/CONFIG_XEN_MCE_LOG create mode 100644 baseconfig/x86/x86_64/CONFIG_XEN_PVH create mode 100644 baseconfig/x86/x86_64/CONFIG_XEN_STUB create mode 100644 baseconfig/x86/x86_64/CONFIG_XEN_SYS_HYPERVISOR create mode 100644 baseconfig/x86/x86_64/CONFIG_XO15_EBOOK create mode 100644 baseconfig/x86/x86_64/CONFIG_ZONE_DEVICE create mode 100644 baseconfig/x86/x86_64/CONFIG_ZONE_DMA create mode 100644 bcm283x-VEC.patch create mode 100644 bcm283x-fixes.patch create mode 100755 build_configs.sh create mode 100755 check_configs.awk delete mode 100644 config-arm-generic delete mode 100644 config-arm64 delete mode 100644 config-armv7 delete mode 100644 config-armv7-generic delete mode 100644 config-armv7-lpae delete mode 100644 config-debug delete mode 100644 config-generic delete mode 100644 config-i686-PAE delete mode 100644 config-no-extra delete mode 100644 config-nodebug delete mode 100644 config-powerpc64 delete mode 100644 config-powerpc64-generic delete mode 100644 config-powerpc64le delete mode 100644 config-s390x delete mode 100644 config-x86-32-generic delete mode 100644 config-x86-generic delete mode 100644 config-x86_64-generic create mode 100644 config_generation create mode 100644 debugconfig/CONFIG_ACPI_DEBUG create mode 100644 debugconfig/CONFIG_ARM64_PTDUMP create mode 100644 debugconfig/CONFIG_ATH_DEBUG create mode 100644 debugconfig/CONFIG_B43LEGACY_DEBUG create mode 100644 debugconfig/CONFIG_B43_DEBUG create mode 100644 debugconfig/CONFIG_CAN_DEBUG_DEVICES create mode 100644 debugconfig/CONFIG_CARL9170_DEBUGFS create mode 100644 debugconfig/CONFIG_CEPH_LIB_PRETTYDEBUG create mode 100644 debugconfig/CONFIG_CPU_NOTIFIER_ERROR_INJECT create mode 100644 debugconfig/CONFIG_DEBUG_ATOMIC_SLEEP create mode 100644 debugconfig/CONFIG_DEBUG_BLK_CGROUP create mode 100644 debugconfig/CONFIG_DEBUG_CREDENTIALS create mode 100644 debugconfig/CONFIG_DEBUG_FORCE_WEAK_PER_CPU create mode 100644 debugconfig/CONFIG_DEBUG_KMEMLEAK create mode 100644 debugconfig/CONFIG_DEBUG_KMEMLEAK_DEFAULT_OFF create mode 100644 debugconfig/CONFIG_DEBUG_KMEMLEAK_EARLY create mode 100644 debugconfig/CONFIG_DEBUG_LOCK_ALLOC create mode 100644 debugconfig/CONFIG_DEBUG_MUTEXES create mode 100644 debugconfig/CONFIG_DEBUG_NOTIFIERS create mode 100644 debugconfig/CONFIG_DEBUG_OBJECTS create mode 100644 debugconfig/CONFIG_DEBUG_OBJECTS_FREE create mode 100644 debugconfig/CONFIG_DEBUG_OBJECTS_PERCPU_COUNTER create mode 100644 debugconfig/CONFIG_DEBUG_OBJECTS_RCU_HEAD create mode 100644 debugconfig/CONFIG_DEBUG_OBJECTS_TIMERS create mode 100644 debugconfig/CONFIG_DEBUG_OBJECTS_WORK create mode 100644 debugconfig/CONFIG_DEBUG_PAGEALLOC create mode 100644 debugconfig/CONFIG_DEBUG_PERF_USE_VMALLOC create mode 100644 debugconfig/CONFIG_DEBUG_PER_CPU_MAPS create mode 100644 debugconfig/CONFIG_DEBUG_PI_LIST create mode 100644 debugconfig/CONFIG_DEBUG_RT_MUTEXES create mode 100644 debugconfig/CONFIG_DEBUG_SG create mode 100644 debugconfig/CONFIG_DEBUG_SLAB create mode 100644 debugconfig/CONFIG_DEBUG_SPINLOCK create mode 100644 debugconfig/CONFIG_DEBUG_STACK_USAGE create mode 100644 debugconfig/CONFIG_DEBUG_VM create mode 100644 debugconfig/CONFIG_DEBUG_VM_PGFLAGS create mode 100644 debugconfig/CONFIG_DETECT_HUNG_TASK create mode 100644 debugconfig/CONFIG_DMADEVICES_DEBUG create mode 100644 debugconfig/CONFIG_DMADEVICES_VDEBUG create mode 100644 debugconfig/CONFIG_DMA_API_DEBUG create mode 100644 debugconfig/CONFIG_DRBD_FAULT_INJECTION create mode 100644 debugconfig/CONFIG_EFI_PGT_DUMP create mode 100644 debugconfig/CONFIG_EXT4_DEBUG create mode 100644 debugconfig/CONFIG_FAILSLAB create mode 100644 debugconfig/CONFIG_FAIL_IO_TIMEOUT create mode 100644 debugconfig/CONFIG_FAIL_MAKE_REQUEST create mode 100644 debugconfig/CONFIG_FAIL_MMC_REQUEST create mode 100644 debugconfig/CONFIG_FAIL_PAGE_ALLOC create mode 100644 debugconfig/CONFIG_FAULT_INJECTION create mode 100644 debugconfig/CONFIG_FAULT_INJECTION_DEBUG_FS create mode 100644 debugconfig/CONFIG_FAULT_INJECTION_STACKTRACE_FILTER create mode 100644 debugconfig/CONFIG_IWLWIFI_DEVICE_TRACING create mode 100644 debugconfig/CONFIG_JBD2_DEBUG create mode 100644 debugconfig/CONFIG_KDB_DEFAULT_ENABLE create mode 100644 debugconfig/CONFIG_KDB_KEYBOARD create mode 100644 debugconfig/CONFIG_KGDB_GDB create mode 100644 debugconfig/CONFIG_LOCK_STAT create mode 100644 debugconfig/CONFIG_LOCK_TORTURE_TEST create mode 100644 debugconfig/CONFIG_MAXSMP create mode 100644 debugconfig/CONFIG_MMIOTRACE create mode 100644 debugconfig/CONFIG_MODULE_FORCE_UNLOAD create mode 100644 debugconfig/CONFIG_NFSD_FAULT_INJECTION create mode 100644 debugconfig/CONFIG_PM_ADVANCED_DEBUG create mode 100644 debugconfig/CONFIG_PM_TEST_SUSPEND create mode 100644 debugconfig/CONFIG_PROVE_LOCKING create mode 100644 debugconfig/CONFIG_PROVE_RCU create mode 100644 debugconfig/CONFIG_QUOTA_DEBUG create mode 100644 debugconfig/CONFIG_SND_DEBUG create mode 100644 debugconfig/CONFIG_SND_PCM_XRUN_DEBUG create mode 100644 debugconfig/CONFIG_SND_VERBOSE_PRINTK create mode 100644 debugconfig/CONFIG_TEST_LIST_SORT create mode 100644 debugconfig/CONFIG_WQ_WATCHDOG create mode 100644 debugconfig/CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK create mode 100644 debugconfig/CONFIG_X86_PTDUMP create mode 100644 debugconfig/arm/CONFIG_LOCK_STAT create mode 100644 debugconfig/arm/armv7/CONFIG_DMADEVICES_DEBUG create mode 100644 debugconfig/x86/CONFIG_DEBUG_PER_CPU_MAPS delete mode 100644 drm_i915_skl_Backport_watermark_fixes_for_4.8.y.patch delete mode 100644 efi-Add-EFI_SECURE_BOOT-bit.patch delete mode 100644 efi-Add-SHIM-and-image-security-database-GUID-defini.patch delete mode 100644 efi-Disable-secure-boot-if-shim-is-in-insecure-mode.patch create mode 100644 efi-lockdown.patch create mode 100755 generate_all_configs.sh create mode 100755 generate_debug_configs.sh create mode 100644 genetlink-fix-counting-regression-on-ctrl_dumpfamily.patch delete mode 100644 hibernate-Disable-in-a-signed-modules-environment.patch delete mode 100644 imx6sx-Add-UDOO-Neo-support.patch rename config-local => kernel-local (100%) delete mode 100644 kexec-Disable-at-runtime-if-the-kernel-enforces-modu.patch delete mode 100644 kexec-uefi-copy-secure_boot-flag-in-boot-params.patch delete mode 100644 mm-alloc_contig-re-allow-CMA-to-compact-FS-pages.patch delete mode 100644 nouveau-add-maxwell-to-backlight-init.patch delete mode 100644 qxl-reapply-cursor-after-SetCrtc-calls.patch delete mode 100644 rc-core-fix-repeat-events.patch delete mode 100644 rt2800-warning.patch delete mode 100644 sctp-deny-peeloff-operation-on-asocs-with-threads-sl.patch delete mode 100644 security-selinux-overlayfs-support.patch rename selinux-namespace-fix.patch => selinux-allow-context-mounts-on-tmpfs-etc.patch (93%) delete mode 100644 x86-Lock-down-IO-port-access-when-module-security-is.patch delete mode 100644 x86-Restrict-MSR-access-when-module-loading-is-restr.patch create mode 100644 xgene-Fix-crash-on-DT-systems.patch create mode 100644 xgene_enet-remove-bogus-forward-declarations.patch diff --git a/1-2-media-cxusb-Use-a-dma-capable-buffer-also-for-reading.patch b/1-2-media-cxusb-Use-a-dma-capable-buffer-also-for-reading.patch deleted file mode 100644 index a3dec80d2..000000000 --- a/1-2-media-cxusb-Use-a-dma-capable-buffer-also-for-reading.patch +++ /dev/null @@ -1,63 +0,0 @@ -From patchwork Sun Feb 5 14:57:59 2017 -Content-Type: text/plain; charset="utf-8" -MIME-Version: 1.0 -Content-Transfer-Encoding: 8bit -Subject: [1/2,media] cxusb: Use a dma capable buffer also for reading -From: =?utf-8?q?Stefan_Br=C3=BCns?= -X-Patchwork-Id: 39207 -Message-Id: -To: -Cc: , Mauro Carvalho Chehab , - Michael Krufky , - =?UTF-8?q?Stefan=20Br=C3=BCns?= -Date: Sun, 5 Feb 2017 15:57:59 +0100 - -Commit 17ce039b4e54 ("[media] cxusb: don't do DMA on stack") -added a kmalloc'ed bounce buffer for writes, but missed to do the same -for reads. As the read only happens after the write is finished, we can -reuse the same buffer. - -As dvb_usb_generic_rw handles a read length of 0 by itself, avoid calling -it using the dvb_usb_generic_read wrapper function. - -Signed-off-by: Stefan Brüns ---- - drivers/media/usb/dvb-usb/cxusb.c | 15 ++++++++------- - 1 file changed, 8 insertions(+), 7 deletions(-) - -diff --git a/drivers/media/usb/dvb-usb/cxusb.c b/drivers/media/usb/dvb-usb/cxusb.c -index 9b8c82d94b3f..8f28a63597bd 100644 ---- a/drivers/media/usb/dvb-usb/cxusb.c -+++ b/drivers/media/usb/dvb-usb/cxusb.c -@@ -59,23 +59,24 @@ static int cxusb_ctrl_msg(struct dvb_usb_device *d, - u8 cmd, u8 *wbuf, int wlen, u8 *rbuf, int rlen) - { - struct cxusb_state *st = d->priv; -- int ret, wo; -+ int ret; - - if (1 + wlen > MAX_XFER_SIZE) { - warn("i2c wr: len=%d is too big!\n", wlen); - return -EOPNOTSUPP; - } - -- wo = (rbuf == NULL || rlen == 0); /* write-only */ -+ if (rlen > MAX_XFER_SIZE) { -+ warn("i2c rd: len=%d is too big!\n", rlen); -+ return -EOPNOTSUPP; -+ } - - mutex_lock(&d->data_mutex); - st->data[0] = cmd; - memcpy(&st->data[1], wbuf, wlen); -- if (wo) -- ret = dvb_usb_generic_write(d, st->data, 1 + wlen); -- else -- ret = dvb_usb_generic_rw(d, st->data, 1 + wlen, -- rbuf, rlen, 0); -+ ret = dvb_usb_generic_rw(d, st->data, 1 + wlen, st->data, rlen, 0); -+ if (!ret && rbuf && rlen) -+ memcpy(rbuf, st->data, rlen); - - mutex_unlock(&d->data_mutex); - return ret; diff --git a/2-2-media-dvb-usb-firmware-don-t-do-DMA-on-stack.patch b/2-2-media-dvb-usb-firmware-don-t-do-DMA-on-stack.patch deleted file mode 100644 index 7f3c1e10a..000000000 --- a/2-2-media-dvb-usb-firmware-don-t-do-DMA-on-stack.patch +++ /dev/null @@ -1,86 +0,0 @@ -From patchwork Sun Feb 5 14:58:00 2017 -Content-Type: text/plain; charset="utf-8" -MIME-Version: 1.0 -Content-Transfer-Encoding: 8bit -Subject: [2/2,media] dvb-usb-firmware: don't do DMA on stack -From: =?utf-8?q?Stefan_Br=C3=BCns?= -X-Patchwork-Id: 39206 -Message-Id: -To: -Cc: , Mauro Carvalho Chehab , - Michael Krufky , - =?UTF-8?q?Stefan=20Br=C3=BCns?= -Date: Sun, 5 Feb 2017 15:58:00 +0100 - -The USB control messages require DMA to work. We cannot pass -a stack-allocated buffer, as it is not warranted that the -stack would be into a DMA enabled area. - -Signed-off-by: Stefan Brüns ---- - drivers/media/usb/dvb-usb/dvb-usb-firmware.c | 30 ++++++++++++++++------------ - 1 file changed, 17 insertions(+), 13 deletions(-) - -diff --git a/drivers/media/usb/dvb-usb/dvb-usb-firmware.c b/drivers/media/usb/dvb-usb/dvb-usb-firmware.c -index dd048a7c461c..189b6725edd0 100644 ---- a/drivers/media/usb/dvb-usb/dvb-usb-firmware.c -+++ b/drivers/media/usb/dvb-usb/dvb-usb-firmware.c -@@ -35,41 +35,45 @@ static int usb_cypress_writemem(struct usb_device *udev,u16 addr,u8 *data, u8 le - - int usb_cypress_load_firmware(struct usb_device *udev, const struct firmware *fw, int type) - { -- struct hexline hx; -- u8 reset; -- int ret,pos=0; -+ u8 *buf = kmalloc(sizeof(struct hexline), GFP_KERNEL); -+ struct hexline *hx = (struct hexline *)buf; -+ int ret, pos = 0; -+ u16 cpu_cs_register = cypress[type].cpu_cs_register; - - /* stop the CPU */ -- reset = 1; -- if ((ret = usb_cypress_writemem(udev,cypress[type].cpu_cs_register,&reset,1)) != 1) -+ buf[0] = 1; -+ if (usb_cypress_writemem(udev, cpu_cs_register, buf, 1) != 1) - err("could not stop the USB controller CPU."); - -- while ((ret = dvb_usb_get_hexline(fw,&hx,&pos)) > 0) { -- deb_fw("writing to address 0x%04x (buffer: 0x%02x %02x)\n",hx.addr,hx.len,hx.chk); -- ret = usb_cypress_writemem(udev,hx.addr,hx.data,hx.len); -+ while ((ret = dvb_usb_get_hexline(fw, hx, &pos)) > 0) { -+ deb_fw("writing to address 0x%04x (buffer: 0x%02x %02x)\n", -+ hx->addr, hx->len, hx->chk); -+ ret = usb_cypress_writemem(udev, hx->addr, hx->data, hx->len); - -- if (ret != hx.len) { -+ if (ret != hx->len) { - err("error while transferring firmware " - "(transferred size: %d, block size: %d)", -- ret,hx.len); -+ ret, hx->len); - ret = -EINVAL; - break; - } - } - if (ret < 0) { -- err("firmware download failed at %d with %d",pos,ret); -+ err("firmware download failed at %d with %d", pos, ret); -+ kfree(buf); - return ret; - } - - if (ret == 0) { - /* restart the CPU */ -- reset = 0; -- if (ret || usb_cypress_writemem(udev,cypress[type].cpu_cs_register,&reset,1) != 1) { -+ buf[0] = 0; -+ if (usb_cypress_writemem(udev, cpu_cs_register, buf, 1) != 1) { - err("could not restart the USB controller CPU."); - ret = -EINVAL; - } - } else - ret = -EIO; -+ kfree(buf); - - return ret; - } diff --git a/ACPI-Limit-access-to-custom_method.patch b/ACPI-Limit-access-to-custom_method.patch deleted file mode 100644 index 38236753e..000000000 --- a/ACPI-Limit-access-to-custom_method.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 4b85149b764cd024e3dd2aff9eb22a9e1aadd1fa Mon Sep 17 00:00:00 2001 -From: Matthew Garrett -Date: Fri, 9 Mar 2012 08:39:37 -0500 -Subject: [PATCH 04/20] ACPI: Limit access to custom_method - -custom_method effectively allows arbitrary access to system memory, making -it possible for an attacker to circumvent restrictions on module loading. -Disable it if any such restrictions have been enabled. - -Signed-off-by: Matthew Garrett ---- - drivers/acpi/custom_method.c | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/drivers/acpi/custom_method.c b/drivers/acpi/custom_method.c -index c68e72414a67..4277938af700 100644 ---- a/drivers/acpi/custom_method.c -+++ b/drivers/acpi/custom_method.c -@@ -29,6 +29,9 @@ static ssize_t cm_write(struct file *file, const char __user * user_buf, - struct acpi_table_header table; - acpi_status status; - -+ if (secure_modules()) -+ return -EPERM; -+ - if (!(*ppos)) { - /* parse the table header to get the table length */ - if (count <= sizeof(struct acpi_table_header)) --- -2.4.3 - diff --git a/ARM-Drop-fixed-200-Hz-timer-requirement-from-Samsung-platforms.patch b/ARM-Drop-fixed-200-Hz-timer-requirement-from-Samsung-platforms.patch deleted file mode 100644 index bf389545b..000000000 --- a/ARM-Drop-fixed-200-Hz-timer-requirement-from-Samsung-platforms.patch +++ /dev/null @@ -1,88 +0,0 @@ -From patchwork Fri Nov 18 11:15:12 2016 -Content-Type: text/plain; charset="utf-8" -MIME-Version: 1.0 -Content-Transfer-Encoding: 7bit -Subject: [v3] ARM: Drop fixed 200 Hz timer requirement from Samsung platforms -From: Krzysztof Kozlowski -X-Patchwork-Id: 9436225 -Message-Id: <1479467712-5218-1-git-send-email-krzk@kernel.org> -To: Russell King , Kukjin Kim , - Krzysztof Kozlowski , - Javier Martinez Canillas , - linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, - linux-kernel@vger.kernel.org -Cc: Arnd Bergmann , - Bartlomiej Zolnierkiewicz , - Tomasz Figa , - Ben Dooks , - Sylwester Nawrocki , - Lee Jones , - Marek Szyprowski -Date: Fri, 18 Nov 2016 13:15:12 +0200 - -All Samsung platforms, including the Exynos, are selecting HZ_FIXED with -200 Hz. Unfortunately in case of multiplatform image this affects also -other platforms when Exynos is enabled. - -This looks like an very old legacy code, dating back to initial -upstreaming of S3C24xx. Probably it was required for s3c24xx timer -driver, which was removed in commit ad38bdd15d5b ("ARM: SAMSUNG: Remove -unused plat-samsung/time.c"). - -Since then, this fixed 200 Hz spread everywhere, including out-of-tree -Samsung kernels (SoC vendor's and Tizen's). I believe this choice -was rather an effect of coincidence instead of conscious choice. - -On S3C24xx, the PWM counter is only 16 bit wide, and with the -typical 12MHz input clock that overflows every 5.5ms. This works -with HZ=200 or higher but not with HZ=100 which needs a 10ms -interval between ticks. On Later chips (S3C64xx, S5P and EXYNOS), -the counter is 32 bits and does not have this problem. - -The new samsung_pwm_timer driver solves the problem by scaling the input -clock by a factor of 50 on S3C24xx, which makes it less accurate but -allows HZ=100 as well as CONFIG_NO_HZ with fewer wakeups. - -Few perf mem and sched tests on Odroid XU3 board (Exynos5422, 4x Cortex -A7, 4x Cortex A15) show no regressions when switching from 200 Hz to -other values. - -Reported-by: Lee Jones -[Dropping of 200_HZ from S3C/S5P was suggested by Arnd] -Reported-by: Arnd Bergmann -Signed-off-by: Krzysztof Kozlowski -Cc: Kukjin Kim -[Tested on Exynos5800] -Tested-by: Javier Martinez Canillas -Acked-by: Kukjin Kim -[Tested on S3C2440] -Tested-by: Sylwester Nawrocki ---- - -Changes since v2: -1. Extend message. -2. Add Kukjin's ack. -3. Add Sylwester's tested-by. - -Changes since v1: -1. Add Javier's tested-by. -2. Drop HZ_FIXED also from ARCH_S5PV210 and ARCH_S3C24XX after Arnd - suggestions and analysis. ---- - arch/arm/Kconfig | 3 +-- - 1 file changed, 1 insertion(+), 2 deletions(-) - -diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig -index b5d529fdffab..ced2e08a9d08 100644 ---- a/arch/arm/Kconfig -+++ b/arch/arm/Kconfig -@@ -1496,8 +1496,7 @@ source kernel/Kconfig.preempt - - config HZ_FIXED - int -- default 200 if ARCH_EBSA110 || ARCH_S3C24XX || \ -- ARCH_S5PV210 || ARCH_EXYNOS4 -+ default 200 if ARCH_EBSA110 - default 128 if SOC_AT91RM9200 - default 0 - diff --git a/Add-EFI-signature-data-types.patch b/Add-EFI-signature-data-types.patch index 23402354e..40d14f949 100644 --- a/Add-EFI-signature-data-types.patch +++ b/Add-EFI-signature-data-types.patch @@ -1,7 +1,7 @@ -From 5216de8394ff599e41c8540c0572368c18c51459 Mon Sep 17 00:00:00 2001 +From ba3f737b8521314b62edaa7d4cc4bdc9aeefe394 Mon Sep 17 00:00:00 2001 From: Dave Howells Date: Tue, 23 Oct 2012 09:30:54 -0400 -Subject: [PATCH 4/9] Add EFI signature data types +Subject: [PATCH 15/20] Add EFI signature data types Add the data types that are used for containing hashes, keys and certificates for cryptographic verification. @@ -11,16 +11,16 @@ Upstream-status: Fedora mustard for now Signed-off-by: David Howells --- - include/linux/efi.h | 20 ++++++++++++++++++++ - 1 file changed, 20 insertions(+) + include/linux/efi.h | 17 +++++++++++++++++ + 1 file changed, 17 insertions(+) diff --git a/include/linux/efi.h b/include/linux/efi.h -index 8cb38cfcba74..8c274b4ea8e6 100644 +index 5af91b58afae..190858d62fe3 100644 --- a/include/linux/efi.h +++ b/include/linux/efi.h -@@ -647,6 +647,9 @@ void efi_native_runtime_setup(void); - #define LINUX_EFI_ARM_SCREEN_INFO_TABLE_GUID EFI_GUID(0xe03fc20a, 0x85dc, 0x406e, 0xb9, 0x0e, 0x4a, 0xb5, 0x02, 0x37, 0x1d, 0x95) +@@ -603,6 +603,9 @@ void efi_native_runtime_setup(void); #define LINUX_EFI_LOADER_ENTRY_GUID EFI_GUID(0x4a67b082, 0x0a4c, 0x41cf, 0xb6, 0xc7, 0x44, 0x0b, 0x29, 0xbb, 0x8c, 0x4f) + #define LINUX_EFI_RANDOM_SEED_TABLE_GUID EFI_GUID(0x1ce1e5bc, 0x7ceb, 0x42f2, 0x81, 0xe5, 0x8a, 0xad, 0xf1, 0x80, 0xf5, 0x7b) +#define EFI_CERT_SHA256_GUID EFI_GUID(0xc1c41626, 0x504c, 0x4092, 0xac, 0xa9, 0x41, 0xf9, 0x36, 0x93, 0x43, 0x28) +#define EFI_CERT_X509_GUID EFI_GUID(0xa5c059a1, 0x94e4, 0x4aa7, 0x87, 0xb5, 0xab, 0x15, 0x5c, 0x2b, 0xf0, 0x72) @@ -28,7 +28,7 @@ index 8cb38cfcba74..8c274b4ea8e6 100644 typedef struct { efi_guid_t guid; u64 table; -@@ -879,6 +885,20 @@ typedef struct { +@@ -853,6 +856,20 @@ typedef struct { efi_memory_desc_t entry[0]; } efi_memory_attributes_table_t; @@ -50,5 +50,5 @@ index 8cb38cfcba74..8c274b4ea8e6 100644 * All runtime access to EFI goes through this structure: */ -- -2.5.5 +2.9.3 diff --git a/Add-an-EFI-signature-blob-parser-and-key-loader.patch b/Add-an-EFI-signature-blob-parser-and-key-loader.patch index 3697a4b74..f57abc9f2 100644 --- a/Add-an-EFI-signature-blob-parser-and-key-loader.patch +++ b/Add-an-EFI-signature-blob-parser-and-key-loader.patch @@ -1,7 +1,7 @@ -From e36a2d65e25fdf42b50aa5dc17583d7bfd09c4c4 Mon Sep 17 00:00:00 2001 +From 822b4b3eb76ca451a416a51f0a7bfedfa5c5ea39 Mon Sep 17 00:00:00 2001 From: Dave Howells Date: Tue, 23 Oct 2012 09:36:28 -0400 -Subject: [PATCH 5/9] Add an EFI signature blob parser and key loader. +Subject: [PATCH 16/20] Add an EFI signature blob parser and key loader. X.509 certificates are loaded into the specified keyring as asymmetric type keys. @@ -17,10 +17,10 @@ Signed-off-by: David Howells create mode 100644 crypto/asymmetric_keys/efi_parser.c diff --git a/crypto/asymmetric_keys/Kconfig b/crypto/asymmetric_keys/Kconfig -index e28e912000a7..94024e8aedaa 100644 +index 331f6baf2df8..5f9002d3192e 100644 --- a/crypto/asymmetric_keys/Kconfig +++ b/crypto/asymmetric_keys/Kconfig -@@ -60,4 +60,12 @@ config SIGNED_PE_FILE_VERIFICATION +@@ -61,4 +61,12 @@ config SIGNED_PE_FILE_VERIFICATION This option provides support for verifying the signature(s) on a signed PE binary. @@ -160,10 +160,10 @@ index 000000000000..636feb18b733 + return 0; +} diff --git a/include/linux/efi.h b/include/linux/efi.h -index 8c274b4ea8e6..ff1877145aa4 100644 +index 190858d62fe3..668aa1244885 100644 --- a/include/linux/efi.h +++ b/include/linux/efi.h -@@ -1044,6 +1044,10 @@ extern int efi_memattr_apply_permissions(struct mm_struct *mm, +@@ -1025,6 +1025,10 @@ extern int efi_memattr_apply_permissions(struct mm_struct *mm, char * __init efi_md_typeattr_format(char *buf, size_t size, const efi_memory_desc_t *md); @@ -175,5 +175,5 @@ index 8c274b4ea8e6..ff1877145aa4 100644 * efi_range_is_wc - check the WC bit on an address range * @start: starting kvirt address -- -2.5.5 +2.9.3 diff --git a/Add-option-to-automatically-enforce-module-signature.patch b/Add-option-to-automatically-enforce-module-signature.patch deleted file mode 100644 index aa1983377..000000000 --- a/Add-option-to-automatically-enforce-module-signature.patch +++ /dev/null @@ -1,217 +0,0 @@ -From 0000dc9edd5997cc49b8893a9d5407f89dfa1307 Mon Sep 17 00:00:00 2001 -From: Matthew Garrett -Date: Fri, 9 Aug 2013 18:36:30 -0400 -Subject: [PATCH] Add option to automatically enforce module signatures when in - Secure Boot mode - -UEFI Secure Boot provides a mechanism for ensuring that the firmware will -only load signed bootloaders and kernels. Certain use cases may also -require that all kernel modules also be signed. Add a configuration option -that enforces this automatically when enabled. - -Signed-off-by: Matthew Garrett ---- - Documentation/x86/zero-page.txt | 2 ++ - arch/x86/Kconfig | 11 ++++++ - arch/x86/boot/compressed/eboot.c | 66 +++++++++++++++++++++++++++++++++++ - arch/x86/include/uapi/asm/bootparam.h | 3 +- - arch/x86/kernel/setup.c | 6 ++++ - include/linux/module.h | 6 ++++ - kernel/module.c | 7 ++++ - 7 files changed, 100 insertions(+), 1 deletion(-) - -diff --git a/Documentation/x86/zero-page.txt b/Documentation/x86/zero-page.txt -index 95a4d34af3fd..b8527c6b7646 100644 ---- a/Documentation/x86/zero-page.txt -+++ b/Documentation/x86/zero-page.txt -@@ -31,6 +31,8 @@ Offset Proto Name Meaning - 1E9/001 ALL eddbuf_entries Number of entries in eddbuf (below) - 1EA/001 ALL edd_mbr_sig_buf_entries Number of entries in edd_mbr_sig_buffer - (below) -+1EB/001 ALL kbd_status Numlock is enabled -+1EC/001 ALL secure_boot Secure boot is enabled in the firmware - 1EF/001 ALL sentinel Used to detect broken bootloaders - 290/040 ALL edd_mbr_sig_buffer EDD MBR signatures - 2D0/A00 ALL e820_map E820 memory map table -diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig -index 0a7b885964ba..29b8ba9ae713 100644 ---- a/arch/x86/Kconfig -+++ b/arch/x86/Kconfig -@@ -1776,6 +1776,17 @@ config EFI_MIXED - - If unsure, say N. - -+config EFI_SECURE_BOOT_SIG_ENFORCE -+ def_bool n -+ depends on EFI -+ prompt "Force module signing when UEFI Secure Boot is enabled" -+ ---help--- -+ UEFI Secure Boot provides a mechanism for ensuring that the -+ firmware will only load signed bootloaders and kernels. Certain -+ use cases may also require that all kernel modules also be signed. -+ Say Y here to automatically enable module signature enforcement -+ when a system boots with UEFI Secure Boot enabled. -+ - config SECCOMP - def_bool y - prompt "Enable seccomp to safely compute untrusted bytecode" -diff --git a/arch/x86/boot/compressed/eboot.c b/arch/x86/boot/compressed/eboot.c -index 52fef606bc54..6b8b9a775b46 100644 ---- a/arch/x86/boot/compressed/eboot.c -+++ b/arch/x86/boot/compressed/eboot.c -@@ -12,6 +12,7 @@ - #include - #include - #include -+#include - - #include "../string.h" - #include "eboot.h" -@@ -571,6 +572,67 @@ free_handle: - efi_call_early(free_pool, pci_handle); - } - -+static int get_secure_boot(void) -+{ -+ u8 sb, setup; -+ unsigned long datasize = sizeof(sb); -+ efi_guid_t var_guid = EFI_GLOBAL_VARIABLE_GUID; -+ efi_status_t status; -+ -+ status = efi_early->call((unsigned long)sys_table->runtime->get_variable, -+ L"SecureBoot", &var_guid, NULL, &datasize, &sb); -+ -+ if (status != EFI_SUCCESS) -+ return 0; -+ -+ if (sb == 0) -+ return 0; -+ -+ -+ status = efi_early->call((unsigned long)sys_table->runtime->get_variable, -+ L"SetupMode", &var_guid, NULL, &datasize, -+ &setup); -+ -+ if (status != EFI_SUCCESS) -+ return 0; -+ -+ if (setup == 1) -+ return 0; -+ -+ return 1; -+} -+ -+ -+/* -+ * See if we have Graphics Output Protocol -+ */ -+static efi_status_t setup_gop(struct screen_info *si, efi_guid_t *proto, -+ unsigned long size) -+{ -+ efi_status_t status; -+ void **gop_handle = NULL; -+ -+ status = efi_call_early(allocate_pool, EFI_LOADER_DATA, -+ size, (void **)&gop_handle); -+ if (status != EFI_SUCCESS) -+ return status; -+ -+ status = efi_call_early(locate_handle, -+ EFI_LOCATE_BY_PROTOCOL, -+ proto, NULL, &size, gop_handle); -+ if (status != EFI_SUCCESS) -+ goto free_handle; -+ -+ if (efi_early->is64) -+ status = setup_gop64(si, proto, size, gop_handle); -+ else -+ status = setup_gop32(si, proto, size, gop_handle); -+ -+free_handle: -+ efi_call_early(free_pool, gop_handle); -+ return status; -+} -+ - static efi_status_t - setup_uga32(void **uga_handle, unsigned long size, u32 *width, u32 *height) - { -@@ -1126,6 +1188,10 @@ struct boot_params *efi_main(struct efi_config *c, - else - setup_boot_services32(efi_early); - -+ sanitize_boot_params(boot_params); -+ -+ boot_params->secure_boot = get_secure_boot(); -+ - setup_graphics(boot_params); - - setup_efi_pci(boot_params); -diff --git a/arch/x86/include/uapi/asm/bootparam.h b/arch/x86/include/uapi/asm/bootparam.h -index c18ce67495fa..2b3e5427097b 100644 ---- a/arch/x86/include/uapi/asm/bootparam.h -+++ b/arch/x86/include/uapi/asm/bootparam.h -@@ -134,7 +134,8 @@ struct boot_params { - __u8 eddbuf_entries; /* 0x1e9 */ - __u8 edd_mbr_sig_buf_entries; /* 0x1ea */ - __u8 kbd_status; /* 0x1eb */ -- __u8 _pad5[3]; /* 0x1ec */ -+ __u8 secure_boot; /* 0x1ec */ -+ __u8 _pad5[2]; /* 0x1ed */ - /* - * The sentinel is set to a nonzero value (0xff) in header.S. - * -diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c -index c4e7b3991b60..bdb9881c7afd 100644 ---- a/arch/x86/kernel/setup.c -+++ b/arch/x86/kernel/setup.c -@@ -1152,6 +1152,12 @@ void __init setup_arch(char **cmdline_p) - - io_delay_init(); - -+#ifdef CONFIG_EFI_SECURE_BOOT_SIG_ENFORCE -+ if (boot_params.secure_boot) { -+ enforce_signed_modules(); -+ } -+#endif -+ - /* - * Parse the ACPI tables for possible boot-time SMP configuration. - */ -diff --git a/include/linux/module.h b/include/linux/module.h -index 082298a09df1..38d0597f7615 100644 ---- a/include/linux/module.h -+++ b/include/linux/module.h -@@ -273,6 +273,12 @@ const struct exception_table_entry *search_exception_tables(unsigned long add); - - struct notifier_block; - -+#ifdef CONFIG_MODULE_SIG -+extern void enforce_signed_modules(void); -+#else -+static inline void enforce_signed_modules(void) {}; -+#endif -+ - #ifdef CONFIG_MODULES - - extern int modules_disabled; /* for sysctl */ -diff --git a/kernel/module.c b/kernel/module.c -index 3c384968f553..ea484f3a35b2 100644 ---- a/kernel/module.c -+++ b/kernel/module.c -@@ -4200,6 +4200,13 @@ void module_layout(struct module *mod, - EXPORT_SYMBOL(module_layout); - #endif - -+#ifdef CONFIG_MODULE_SIG -+void enforce_signed_modules(void) -+{ -+ sig_enforce = true; -+} -+#endif -+ - bool secure_modules(void) - { - #ifdef CONFIG_MODULE_SIG --- -2.5.5 - diff --git a/Add-secure_modules-call.patch b/Add-secure_modules-call.patch deleted file mode 100644 index 1cbf3afd9..000000000 --- a/Add-secure_modules-call.patch +++ /dev/null @@ -1,63 +0,0 @@ -From 3213f1513a744fb21b6b9e4d4f2650a204855b3e Mon Sep 17 00:00:00 2001 -From: Matthew Garrett -Date: Fri, 9 Aug 2013 17:58:15 -0400 -Subject: [PATCH] Add secure_modules() call - -Provide a single call to allow kernel code to determine whether the system -has been configured to either disable module loading entirely or to load -only modules signed with a trusted key. - -Bugzilla: N/A -Upstream-status: Fedora mustard. Replaced by securelevels, but that was nak'd - -Signed-off-by: Matthew Garrett ---- - include/linux/module.h | 6 ++++++ - kernel/module.c | 10 ++++++++++ - 2 files changed, 16 insertions(+) - -diff --git a/include/linux/module.h b/include/linux/module.h -index 0c3207d..05bd6c9 100644 ---- a/include/linux/module.h -+++ b/include/linux/module.h -@@ -641,6 +641,8 @@ static inline bool is_livepatch_module(struct module *mod) - } - #endif /* CONFIG_LIVEPATCH */ - -+extern bool secure_modules(void); -+ - #else /* !CONFIG_MODULES... */ - - static inline struct module *__module_address(unsigned long addr) -@@ -750,6 +752,10 @@ static inline bool module_requested_async_probing(struct module *module) - return false; - } - -+static inline bool secure_modules(void) -+{ -+ return false; -+} - #endif /* CONFIG_MODULES */ - - #ifdef CONFIG_SYSFS -diff --git a/kernel/module.c b/kernel/module.c -index 529efae..0332fdd 100644 ---- a/kernel/module.c -+++ b/kernel/module.c -@@ -4279,3 +4279,13 @@ void module_layout(struct module *mod, - } - EXPORT_SYMBOL(module_layout); - #endif -+ -+bool secure_modules(void) -+{ -+#ifdef CONFIG_MODULE_SIG -+ return (sig_enforce || modules_disabled); -+#else -+ return modules_disabled; -+#endif -+} -+EXPORT_SYMBOL(secure_modules); --- -2.9.2 - diff --git a/Add-sysrq-option-to-disable-secure-boot-mode.patch b/Add-sysrq-option-to-disable-secure-boot-mode.patch deleted file mode 100644 index 4600848cf..000000000 --- a/Add-sysrq-option-to-disable-secure-boot-mode.patch +++ /dev/null @@ -1,246 +0,0 @@ -From 16d2ba5d5bc46e67e6aa7a3d113fbcc18c217388 Mon Sep 17 00:00:00 2001 -From: Kyle McMartin -Date: Fri, 30 Aug 2013 09:28:51 -0400 -Subject: [PATCH 20/20] Add sysrq option to disable secure boot mode - -Bugzilla: N/A -Upstream-status: Fedora mustard ---- - arch/x86/kernel/setup.c | 36 ++++++++++++++++++++++++++++++++++++ - drivers/input/misc/uinput.c | 1 + - drivers/tty/sysrq.c | 19 +++++++++++++------ - include/linux/input.h | 5 +++++ - include/linux/sysrq.h | 8 +++++++- - kernel/debug/kdb/kdb_main.c | 2 +- - kernel/module.c | 2 +- - 7 files changed, 64 insertions(+), 9 deletions(-) - -diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c -index f93826b8522c..41679b1aca83 100644 ---- a/arch/x86/kernel/setup.c -+++ b/arch/x86/kernel/setup.c -@@ -70,6 +70,11 @@ - #include - #include - -+#include -+#include -+#include -+#include -+ - #include