Merge tag 'mtd/for-4.18' of git://git.infradead.org/linux-mtd
authorLinus Torvalds <torvalds@linux-foundation.org>
Fri, 8 Jun 2018 17:39:20 +0000 (10:39 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 8 Jun 2018 17:39:20 +0000 (10:39 -0700)
Pull MTD updates from Boris Brezillon:
 "Core changes:
   - Add a sysfs attribute to expose available OOB size

  Driver changes:
   - Remove HAS_DMA dependency on various drivers
   - Use dev_get_drvdata() instead of platform_get_drvdata() in docg3
   - Replace msleep by usleep_range() in the dataflash driver
   - Avoid VLA usage in nftl layers
   - Remove useless .owner assignment in pismo
   - Fix various issues in the CFI driver
   - Improve TRX partition handling expose a DT compat for this part
     parser
   - Clarify OFFSET_CONTINUOUS meaning

  NAND core changes:
   - Add Miquel as a NAND maintainer
   - Add access mode to the nand_page_io_req struct
   - Fix kernel-doc in rawnand.h
   - Support bit-wise majority to recover from corrupted ONFI parameter
     pages
   - Stop checking FAIL bit after a SET_FEATURES, as documented in the
     ONFI spec

  Raw NAND Driver changes:
   - Fix and cleanup the error path of many NAND controller drivers
   - GPMI:
      + Cleanup/simplification of a few aspects in the driver
      + Take ECC setup specified in the DT into account
   - sunxi: remove support for GPIO-based R/B polling
   - MTK:
      + Use of_device_get_match_data() instead of of_match_device()
      + Add an entry in MAINTAINERS for this driver
      + Fix nand-ecc-step-size and nand-ecc-strength description in the
        DT bindings doc
   - fsl_ifc: fix ->cmdfunc() to read more than one ONFI parameter page

  OneNAND driver changes:
   - samsung: use dev_get_drvdata() instead of platform_get_drvdata()

  SPI NOR core changes:
   - Add support for a bunch of SPI NOR chips
   - Clear EAR reg when switching to 3-byte addressing mode on Winbond
     chips

  SPI NOR controller driver changes:
   - cadence: Add DMA support for direct mode reads
   - hisi: Prefix a few functions with hisi_
   - intel:
      + Mark the driver as "dangerous" in Kconfig
      + Fix atomic sequence handling
      + Pass a 40us delay (instead of 0us) to readl_poll_timeout()
   - fsl:
      + fix a typo in a function name
      + add support for IP variants embedded in the ls2080a and ls1080a
        SoCs
   - stm32: request exclusive control of the reset line"

* tag 'mtd/for-4.18' of git://git.infradead.org/linux-mtd: (66 commits)
  mtd: nand: Pass mode information to nand_page_io_req
  mtd: cfi_cmdset_0002: Change erase one block to enable XIP once
  mtd: cfi_cmdset_0002: Change erase functions to check chip good only
  mtd: cfi_cmdset_0002: Change erase functions to retry for error
  mtd: cfi_cmdset_0002: Change definition naming to retry write operation
  mtd: cfi_cmdset_0002: Change write buffer to check correct value
  mtd: cmdlinepart: Update comment for introduction of OFFSET_CONTINUOUS
  mtd: bcm47xxpart: add of_match_table with a new DT binding
  dt-bindings: mtd: document Broadcom's BCM47xx partitions
  mtd: spi-nor: Add support for EN25QH32
  mtd: spi-nor: Add support for is25wp series chips
  mtd: spi-nor: Add Winbond w25q32jv support
  mtd: spi-nor: fsl-quadspi: add support for ls2080a/ls1080a
  mtd: spi-nor: stm32-quadspi: explicitly request exclusive reset control
  mtd: spi-nor: intel: provide a range for poll_timout
  mtd: spi-nor: fsl-quadspi: fix api naming typo _init_ahb_read
  mtd: spi-nor: intel-spi: Explicitly mark the driver as dangerous in Kconfig
  mtd: spi-nor: intel-spi: Fix atomic sequence handling
  mtd: rawnand: Do not check FAIL bit when executing a SET_FEATURES op
  mtd: rawnand: use bit-wise majority to recover the ONFI param page
  ...

1  2 
Documentation/devicetree/bindings/mtd/mtk-nand.txt
MAINTAINERS
drivers/mtd/chips/cfi_cmdset_0002.c
drivers/mtd/mtdcore.c
drivers/mtd/nand/raw/diskonchip.c
drivers/mtd/nand/raw/nand_base.c
drivers/mtd/spi-nor/cadence-quadspi.c
include/linux/mtd/rawnand.h

index c5ba6a4ba1f2f013369019f652c66d0fb0ef46ad,f20ab4abd21484f085c56e4438fa14ff2dad5fdd..4d3ec5e4ff8a313d7e359e1d119e70dbf3643d8e
@@@ -20,6 -20,7 +20,6 @@@ Required NFI properties
  - interrupts:                 Interrupts of NFI.
  - clocks:                     NFI required clocks.
  - clock-names:                        NFI clocks internal name.
 -- status:                     Disabled default. Then set "okay" by platform.
  - ecc-engine:                 Required ECC Engine node.
  - #address-cells:             NAND chip index, should be 1.
  - #size-cells:                        Should be 0.
@@@ -33,6 -34,7 +33,6 @@@ Example
                clocks = <&pericfg CLK_PERI_NFI>,
                         <&pericfg CLK_PERI_NFI_PAD>;
                clock-names = "nfi_clk", "pad_clk";
 -              status = "disabled";
                ecc-engine = <&bch>;
                #address-cells = <1>;
                #size-cells = <0>;
@@@ -48,14 -50,19 +48,19 @@@ Optional
  - nand-on-flash-bbt:  Store BBT on NAND Flash.
  - nand-ecc-mode:      the NAND ecc mode (check driver for supported modes)
  - nand-ecc-step-size: Number of data bytes covered by a single ECC step.
-                       valid values: 512 and 1024.
+                       valid values:
+                       512 and 1024 on mt2701 and mt2712.
+                       512 only on mt7622.
                        1024 is recommended for large page NANDs.
  - nand-ecc-strength:  Number of bits to correct per ECC step.
-                       The valid values that the controller supports are: 4, 6,
-                       8, 10, 12, 14, 16, 18, 20, 22, 24, 28, 32, 36, 40, 44,
-                       48, 52, 56, 60.
+                       The valid values that each controller supports:
+                       mt2701: 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 28,
+                               32, 36, 40, 44, 48, 52, 56, 60.
+                       mt2712: 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 28,
+                               32, 36, 40, 44, 48, 52, 56, 60, 68, 72, 80.
+                       mt7622: 4, 6, 8, 10, 12, 14, 16.
                        The strength should be calculated as follows:
-                       E = (S - F) * 8 / 14
+                       E = (S - F) * 8 / B
                        S = O / (P / Q)
                                E :     nand-ecc-strength.
                                S :     spare size per sector.
                                O :     oob size.
                                P :     page size.
                                Q :     nand-ecc-step-size.
+                               B :     number of parity bits needed to correct
+                                       1 bitflip.
+                                       According to MTK NAND controller design,
+                                       this number depends on max ecc step size
+                                       that MTK NAND controller supports.
+                                       If max ecc step size supported is 1024,
+                                       then it should be always 14. And if max
+                                       ecc step size is 512, then it should be
+                                       always 13.
                        If the result does not match any one of the listed
                        choices above, please select the smaller valid value from
                        the list.
@@@ -150,6 -166,7 +164,6 @@@ Required BCH properties
  - interrupts: Interrupts of ECC.
  - clocks:     ECC required clocks.
  - clock-names:        ECC clocks internal name.
 -- status:     Disabled default. Then set "okay" by platform.
  
  Example:
  
                interrupts = <GIC_SPI 55 IRQ_TYPE_LEVEL_LOW>;
                clocks = <&pericfg CLK_PERI_NFI_ECC>;
                clock-names = "nfiecc_clk";
 -              status = "disabled";
        };
diff --combined MAINTAINERS
index c9ac159fb02356003fabc3c9042e2843569acce5,634abf4569c44b93361bfc0c215e20a9be6538c1..3838c94a0d47670167151c7c9389bd7a7b33c95f
@@@ -137,9 -137,9 +137,9 @@@ Maintainers List (try to look for most 
                -----------------------------------
  
  3C59X NETWORK DRIVER
 -M:    Steffen Klassert <klassert@mathematik.tu-chemnitz.de>
 +M:    Steffen Klassert <klassert@kernel.org>
  L:    netdev@vger.kernel.org
 -S:    Maintained
 +S:    Odd Fixes
  F:    Documentation/networking/vortex.txt
  F:    drivers/net/ethernet/3com/3c59x.c
  
@@@ -564,9 -564,8 +564,9 @@@ S: Maintaine
  F:    drivers/media/dvb-frontends/af9033*
  
  AFFS FILE SYSTEM
 +M:    David Sterba <dsterba@suse.com>
  L:    linux-fsdevel@vger.kernel.org
 -S:    Orphan
 +S:    Odd Fixes
  F:    Documentation/filesystems/affs.txt
  F:    fs/affs/
  
@@@ -767,14 -766,12 +767,14 @@@ F:      drivers/gpu/drm/amd/amdgpu/amdgpu_am
  F:    drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
  F:    drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c
  F:    drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c
 +F:    drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c
  F:    drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_fence.c
  F:    drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
  F:    drivers/gpu/drm/amd/amdkfd/
  F:    drivers/gpu/drm/amd/include/cik_structs.h
  F:    drivers/gpu/drm/amd/include/kgd_kfd_interface.h
  F:    drivers/gpu/drm/amd/include/vi_structs.h
 +F:    drivers/gpu/drm/amd/include/v9_structs.h
  F:    include/uapi/linux/kfd_ioctl.h
  
  AMD SEATTLE DEVICE TREE SUPPORT
@@@ -908,8 -905,6 +908,8 @@@ ANDROID ION DRIVE
  M:    Laura Abbott <labbott@redhat.com>
  M:    Sumit Semwal <sumit.semwal@linaro.org>
  L:    devel@driverdev.osuosl.org
 +L:    dri-devel@lists.freedesktop.org
 +L:    linaro-mm-sig@lists.linaro.org (moderated for non-subscribers)
  S:    Supported
  F:    drivers/staging/android/ion
  F:    drivers/staging/android/uapi/ion.h
@@@ -1135,12 -1130,10 +1135,12 @@@ F:   arch/arm/mach-actions
  F:    arch/arm/boot/dts/owl-*
  F:    arch/arm64/boot/dts/actions/
  F:    drivers/clocksource/owl-*
 +F:    drivers/pinctrl/actions/*
  F:    drivers/soc/actions/
  F:    include/dt-bindings/power/owl-*
  F:    include/linux/soc/actions/
  F:    Documentation/devicetree/bindings/arm/actions.txt
 +F:    Documentation/devicetree/bindings/pinctrl/actions,s900-pinctrl.txt
  F:    Documentation/devicetree/bindings/power/actions,owl-sps.txt
  F:    Documentation/devicetree/bindings/timer/actions,owl-timer.txt
  
@@@ -1215,6 -1208,7 +1215,6 @@@ F:      drivers/*/*alpine
  ARM/ARTPEC MACHINE SUPPORT
  M:    Jesper Nilsson <jesper.nilsson@axis.com>
  M:    Lars Persson <lars.persson@axis.com>
 -M:    Niklas Cassel <niklas.cassel@axis.com>
  S:    Maintained
  L:    linux-arm-kernel@axis.com
  F:    arch/arm/mach-artpec
@@@ -1379,8 -1373,7 +1379,8 @@@ F:      arch/arm/mach-ebsa110
  F:    drivers/net/ethernet/amd/am79c961a.*
  
  ARM/ENERGY MICRO (SILICON LABS) EFM32 SUPPORT
 -M:    Uwe Kleine-König <kernel@pengutronix.de>
 +M:    Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
 +R:    Pengutronix Kernel Team <kernel@pengutronix.de>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
  N:    efm32
@@@ -1408,8 -1401,7 +1408,8 @@@ F:      arch/arm/mach-footbridge
  
  ARM/FREESCALE IMX / MXC ARM ARCHITECTURE
  M:    Shawn Guo <shawnguo@kernel.org>
 -M:    Sascha Hauer <kernel@pengutronix.de>
 +M:    Sascha Hauer <s.hauer@pengutronix.de>
 +R:    Pengutronix Kernel Team <kernel@pengutronix.de>
  R:    Fabio Estevam <fabio.estevam@nxp.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
@@@ -1424,8 -1416,7 +1424,8 @@@ F:      include/soc/imx
  
  ARM/FREESCALE VYBRID ARM ARCHITECTURE
  M:    Shawn Guo <shawnguo@kernel.org>
 -M:    Sascha Hauer <kernel@pengutronix.de>
 +M:    Sascha Hauer <s.hauer@pengutronix.de>
 +R:    Pengutronix Kernel Team <kernel@pengutronix.de>
  R:    Stefan Agner <stefan@agner.ch>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
@@@ -2335,16 -2326,8 +2335,16 @@@ S:    Maintaine
  F:    drivers/gpio/gpio-ath79.c
  F:    Documentation/devicetree/bindings/gpio/gpio-ath79.txt
  
 +ATHEROS 71XX/9XXX USB PHY DRIVER
 +M:    Alban Bedel <albeu@free.fr>
 +W:    https://github.com/AlbanBedel/linux
 +T:    git git://github.com/AlbanBedel/linux
 +S:    Maintained
 +F:    drivers/phy/qualcomm/phy-ath79-usb.c
 +F:    Documentation/devicetree/bindings/phy/phy-ath79-usb.txt
 +
  ATHEROS ATH GENERIC UTILITIES
 -M:    "Luis R. Rodriguez" <mcgrof@do-not-panic.com>
 +M:    Kalle Valo <kvalo@codeaurora.org>
  L:    linux-wireless@vger.kernel.org
  S:    Supported
  F:    drivers/net/wireless/ath/*
@@@ -2359,7 -2342,7 +2359,7 @@@ S:      Maintaine
  F:    drivers/net/wireless/ath/ath5k/
  
  ATHEROS ATH6KL WIRELESS DRIVER
 -M:    Kalle Valo <kvalo@qca.qualcomm.com>
 +M:    Kalle Valo <kvalo@codeaurora.org>
  L:    linux-wireless@vger.kernel.org
  W:    http://wireless.kernel.org/en/users/Drivers/ath6kl
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git
@@@ -2533,6 -2516,8 +2533,6 @@@ F:      kernel/audit
  
  AUXILIARY DISPLAY DRIVERS
  M:    Miguel Ojeda Sandonis <miguel.ojeda.sandonis@gmail.com>
 -W:    http://miguelojeda.es/auxdisplay.htm
 -W:    http://jair.lab.fi.uva.es/~migojed/auxdisplay.htm
  S:    Maintained
  F:    drivers/auxdisplay/
  F:    include/linux/cfag12864b.h
@@@ -2564,6 -2549,7 +2564,6 @@@ F:      Documentation/devicetree/bindings/so
  F:    sound/soc/atmel/tse850-pcm5142.c
  
  AZ6007 DVB DRIVER
 -M:    Mauro Carvalho Chehab <mchehab@s-opensource.com>
  M:    Mauro Carvalho Chehab <mchehab@kernel.org>
  L:    linux-media@vger.kernel.org
  W:    https://linuxtv.org
@@@ -2628,7 -2614,7 +2628,7 @@@ S:      Maintaine
  F:    drivers/net/hamradio/baycom*
  
  BCACHE (BLOCK LAYER CACHE)
 -M:    Michael Lyle <mlyle@lyle.org>
 +M:    Coly Li <colyli@suse.de>
  M:    Kent Overstreet <kent.overstreet@gmail.com>
  L:    linux-bcache@vger.kernel.org
  W:    http://bcache.evilpiepirate.org
@@@ -2732,13 -2718,13 +2732,13 @@@ L:   netdev@vger.kernel.or
  L:    linux-kernel@vger.kernel.org
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf.git
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git
 +Q:    https://patchwork.ozlabs.org/project/netdev/list/?delegate=77147
  S:    Supported
  F:    arch/x86/net/bpf_jit*
  F:    Documentation/networking/filter.txt
  F:    Documentation/bpf/
  F:    include/linux/bpf*
  F:    include/linux/filter.h
 -F:    include/trace/events/bpf.h
  F:    include/trace/events/xdp.h
  F:    include/uapi/linux/bpf*
  F:    include/uapi/linux/filter.h
@@@ -2751,7 -2737,6 +2751,7 @@@ F:      net/sched/act_bpf.
  F:    net/sched/cls_bpf.c
  F:    samples/bpf/
  F:    tools/bpf/
 +F:    tools/lib/bpf/
  F:    tools/testing/selftests/bpf/
  
  BROADCOM B44 10/100 ETHERNET DRIVER
@@@ -3093,6 -3078,7 +3093,6 @@@ F:      include/linux/btrfs
  F:    include/uapi/linux/btrfs*
  
  BTTV VIDEO4LINUX DRIVER
 -M:    Mauro Carvalho Chehab <mchehab@s-opensource.com>
  M:    Mauro Carvalho Chehab <mchehab@kernel.org>
  L:    linux-media@vger.kernel.org
  W:    https://linuxtv.org
@@@ -3147,13 -3133,6 +3147,13 @@@ S:    Supporte
  F:    Documentation/filesystems/caching/cachefiles.txt
  F:    fs/cachefiles/
  
 +CADENCE MIPI-CSI2 BRIDGES
 +M:    Maxime Ripard <maxime.ripard@bootlin.com>
 +L:    linux-media@vger.kernel.org
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/media/cdns,*.txt
 +F:    drivers/media/platform/cadence/cdns-csi2*
 +
  CADET FM/AM RADIO RECEIVER DRIVER
  M:    Hans Verkuil <hverkuil@xs4all.nl>
  L:    linux-media@vger.kernel.org
@@@ -3382,12 -3361,16 +3382,12 @@@ F:   include/linux/usb/wusb
  
  CFAG12864B LCD DRIVER
  M:    Miguel Ojeda Sandonis <miguel.ojeda.sandonis@gmail.com>
 -W:    http://miguelojeda.es/auxdisplay.htm
 -W:    http://jair.lab.fi.uva.es/~migojed/auxdisplay.htm
  S:    Maintained
  F:    drivers/auxdisplay/cfag12864b.c
  F:    include/linux/cfag12864b.h
  
  CFAG12864BFB LCD FRAMEBUFFER DRIVER
  M:    Miguel Ojeda Sandonis <miguel.ojeda.sandonis@gmail.com>
 -W:    http://miguelojeda.es/auxdisplay.htm
 -W:    http://jair.lab.fi.uva.es/~migojed/auxdisplay.htm
  S:    Maintained
  F:    drivers/auxdisplay/cfag12864bfb.c
  F:    include/linux/cfag12864b.h
@@@ -3445,12 -3428,6 +3445,12 @@@ S:    Maintaine
  F:    Documentation/devicetree/bindings/input/touchscreen/chipone_icn8318.txt
  F:    drivers/input/touchscreen/chipone_icn8318.c
  
 +CHIPONE ICN8505 I2C TOUCHSCREEN DRIVER
 +M:    Hans de Goede <hdegoede@redhat.com>
 +L:    linux-input@vger.kernel.org
 +S:    Maintained
 +F:    drivers/input/touchscreen/chipone_icn8505.c
 +
  CHROME HARDWARE PLATFORM SUPPORT
  M:    Benson Leung <bleung@chromium.org>
  M:    Olof Johansson <olof@lixom.net>
@@@ -3711,6 -3688,7 +3711,6 @@@ F:      drivers/cpufreq/arm_big_little_dt.
  
  CPU POWER MONITORING SUBSYSTEM
  M:    Thomas Renninger <trenn@suse.com>
 -M:    Shuah Khan <shuahkh@osg.samsung.com>
  M:    Shuah Khan <shuah@kernel.org>
  L:    linux-pm@vger.kernel.org
  S:    Maintained
@@@ -3829,6 -3807,7 +3829,6 @@@ S:      Maintaine
  F:    drivers/media/dvb-frontends/cx24120*
  
  CX88 VIDEO4LINUX DRIVER
 -M:    Mauro Carvalho Chehab <mchehab@s-opensource.com>
  M:    Mauro Carvalho Chehab <mchehab@kernel.org>
  L:    linux-media@vger.kernel.org
  W:    https://linuxtv.org
@@@ -4266,9 -4245,6 +4266,9 @@@ F:      include/trace/events/fs_dax.
  
  DEVICE DIRECT ACCESS (DAX)
  M:    Dan Williams <dan.j.williams@intel.com>
 +M:    Dave Jiang <dave.jiang@intel.com>
 +M:    Ross Zwisler <ross.zwisler@linux.intel.com>
 +M:    Vishal Verma <vishal.l.verma@intel.com>
  L:    linux-nvdimm@lists.01.org
  S:    Supported
  F:    drivers/dax/
@@@ -4329,7 -4305,7 +4329,7 @@@ F:      Documentation/driver-api/dma-buf.rs
  T:    git git://anongit.freedesktop.org/drm/drm-misc
  
  DMA GENERIC OFFLOAD ENGINE SUBSYSTEM
 -M:    Vinod Koul <vinod.koul@intel.com>
 +M:    Vinod Koul <vkoul@kernel.org>
  L:    dmaengine@vger.kernel.org
  Q:    https://patchwork.kernel.org/project/linux-dmaengine/list/
  S:    Maintained
@@@ -4350,14 -4326,12 +4350,14 @@@ W:   http://git.infradead.org/users/hch/d
  S:    Supported
  F:    lib/dma-debug.c
  F:    lib/dma-direct.c
 +F:    lib/dma-noncoherent.c
  F:    lib/dma-virt.c
  F:    drivers/base/dma-mapping.c
  F:    drivers/base/dma-coherent.c
  F:    include/asm-generic/dma-mapping.h
  F:    include/linux/dma-direct.h
  F:    include/linux/dma-mapping.h
 +F:    include/linux/dma-noncoherent.h
  
  DME1737 HARDWARE MONITOR DRIVER
  M:    Juerg Haefliger <juergh@gmail.com>
@@@ -4691,7 -4665,7 +4691,7 @@@ F:      Documentation/devicetree/bindings/di
  
  DRM DRIVERS FOR FREESCALE DCU
  M:    Stefan Agner <stefan@agner.ch>
 -M:    Alison Wang <alison.wang@freescale.com>
 +M:    Alison Wang <alison.wang@nxp.com>
  L:    dri-devel@lists.freedesktop.org
  S:    Supported
  F:    drivers/gpu/drm/fsl-dcu/
@@@ -4802,14 -4776,6 +4802,14 @@@ S:    Maintaine
  F:    drivers/gpu/drm/omapdrm/
  F:    Documentation/devicetree/bindings/display/ti/
  
 +DRM DRIVERS FOR V3D
 +M:    Eric Anholt <eric@anholt.net>
 +S:    Supported
 +F:    drivers/gpu/drm/v3d/
 +F:    include/uapi/drm/v3d_drm.h
 +F:    Documentation/devicetree/bindings/display/brcm,bcm-v3d.txt
 +T:    git git://anongit.freedesktop.org/drm/drm-misc
 +
  DRM DRIVERS FOR VC4
  M:    Eric Anholt <eric@anholt.net>
  T:    git git://github.com/anholt/linux
@@@ -4856,15 -4822,6 +4856,15 @@@ S:    Maintaine
  F:    drivers/gpu/drm/tinydrm/
  F:    include/drm/tinydrm/
  
 +DRM DRIVERS FOR XEN
 +M:    Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>
 +T:    git git://anongit.freedesktop.org/drm/drm-misc
 +L:    dri-devel@lists.freedesktop.org
 +L:    xen-devel@lists.xen.org
 +S:    Supported
 +F:    drivers/gpu/drm/xen/
 +F:    Documentation/gpu/xen-front.rst
 +
  DRM TTM SUBSYSTEM
  M:    Christian Koenig <christian.koenig@amd.com>
  M:    Roger He <Hongbo.He@amd.com>
@@@ -5088,6 -5045,7 +5088,6 @@@ F:      drivers/edac/thunderx_edac
  
  EDAC-CORE
  M:    Borislav Petkov <bp@alien8.de>
 -M:    Mauro Carvalho Chehab <mchehab@s-opensource.com>
  M:    Mauro Carvalho Chehab <mchehab@kernel.org>
  L:    linux-edac@vger.kernel.org
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/bp/bp.git for-next
@@@ -5116,6 -5074,7 +5116,6 @@@ S:      Maintaine
  F:    drivers/edac/fsl_ddr_edac.*
  
  EDAC-GHES
 -M:    Mauro Carvalho Chehab <mchehab@s-opensource.com>
  M:    Mauro Carvalho Chehab <mchehab@kernel.org>
  L:    linux-edac@vger.kernel.org
  S:    Maintained
@@@ -5132,18 -5091,21 +5132,18 @@@ S:   Maintaine
  F:    drivers/edac/i5000_edac.c
  
  EDAC-I5400
 -M:    Mauro Carvalho Chehab <mchehab@s-opensource.com>
  M:    Mauro Carvalho Chehab <mchehab@kernel.org>
  L:    linux-edac@vger.kernel.org
  S:    Maintained
  F:    drivers/edac/i5400_edac.c
  
  EDAC-I7300
 -M:    Mauro Carvalho Chehab <mchehab@s-opensource.com>
  M:    Mauro Carvalho Chehab <mchehab@kernel.org>
  L:    linux-edac@vger.kernel.org
  S:    Maintained
  F:    drivers/edac/i7300_edac.c
  
  EDAC-I7CORE
 -M:    Mauro Carvalho Chehab <mchehab@s-opensource.com>
  M:    Mauro Carvalho Chehab <mchehab@kernel.org>
  L:    linux-edac@vger.kernel.org
  S:    Maintained
@@@ -5193,6 -5155,7 +5193,6 @@@ S:      Maintaine
  F:    drivers/edac/r82600_edac.c
  
  EDAC-SBRIDGE
 -M:    Mauro Carvalho Chehab <mchehab@s-opensource.com>
  M:    Mauro Carvalho Chehab <mchehab@kernel.org>
  L:    linux-edac@vger.kernel.org
  S:    Maintained
@@@ -5251,6 -5214,7 +5251,6 @@@ S:      Maintaine
  F:    drivers/net/ethernet/ibm/ehea/
  
  EM28XX VIDEO4LINUX DRIVER
 -M:    Mauro Carvalho Chehab <mchehab@s-opensource.com>
  M:    Mauro Carvalho Chehab <mchehab@kernel.org>
  L:    linux-media@vger.kernel.org
  W:    https://linuxtv.org
@@@ -5356,6 -5320,7 +5356,6 @@@ F:      include/linux/*mdio*.
  F:    include/linux/of_net.h
  F:    include/linux/phy.h
  F:    include/linux/phy_fixed.h
 -F:    include/linux/platform_data/mdio-gpio.h
  F:    include/linux/platform_data/mdio-bcm-unimac.h
  F:    include/trace/events/mdio.h
  F:    include/uapi/linux/mdio.h
@@@ -5426,6 -5391,7 +5426,6 @@@ S:      Maintaine
  F:    drivers/iommu/exynos-iommu.c
  
  EZchip NPS platform support
 -M:    Elad Kanfi <eladkan@mellanox.com>
  M:    Vineet Gupta <vgupta@synopsys.com>
  S:    Supported
  F:    arch/arc/plat-eznps
@@@ -5451,19 -5417,6 +5451,19 @@@ S:    Maintaine
  F:    Documentation/hwmon/f71805f
  F:    drivers/hwmon/f71805f.c
  
 +FADDR2LINE
 +M:    Josh Poimboeuf <jpoimboe@redhat.com>
 +S:    Maintained
 +F:    scripts/faddr2line
 +
 +FAILOVER MODULE
 +M:    Sridhar Samudrala <sridhar.samudrala@intel.com>
 +L:    netdev@vger.kernel.org
 +S:    Supported
 +F:    net/core/failover.c
 +F:    include/net/failover.h
 +F:    Documentation/networking/failover.rst
 +
  FANOTIFY
  M:    Jan Kara <jack@suse.cz>
  R:    Amir Goldstein <amir73il@gmail.com>
@@@ -5616,7 -5569,6 +5616,7 @@@ S:      Maintaine
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/atull/linux-fpga.git
  Q:    http://patchwork.kernel.org/project/linux-fpga/list/
  F:    Documentation/fpga/
 +F:    Documentation/driver-api/fpga/
  F:    Documentation/devicetree/bindings/fpga/
  F:    drivers/fpga/
  F:    include/linux/fpga/
@@@ -5674,6 -5626,7 +5674,6 @@@ M:      Claudiu Manoil <claudiu.manoil@nxp.c
  L:    netdev@vger.kernel.org
  S:    Maintained
  F:    drivers/net/ethernet/freescale/gianfar*
 -X:    drivers/net/ethernet/freescale/gianfar_ptp.c
  F:    Documentation/devicetree/bindings/net/fsl-tsec-phy.txt
  
  FREESCALE GPMI NAND DRIVER
@@@ -5699,8 -5652,7 +5699,8 @@@ F:      drivers/net/ethernet/freescale/fec.
  F:    Documentation/devicetree/bindings/net/fsl-fec.txt
  
  FREESCALE IMX / MXC FRAMEBUFFER DRIVER
 -M:    Sascha Hauer <kernel@pengutronix.de>
 +M:    Sascha Hauer <s.hauer@pengutronix.de>
 +R:    Pengutronix Kernel Team <kernel@pengutronix.de>
  L:    linux-fbdev@vger.kernel.org
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
@@@ -5720,14 -5672,6 +5720,14 @@@ S:    Maintaine
  F:    drivers/net/ethernet/freescale/fman
  F:    Documentation/devicetree/bindings/powerpc/fsl/fman.txt
  
 +FREESCALE QORIQ PTP CLOCK DRIVER
 +M:    Yangbo Lu <yangbo.lu@nxp.com>
 +L:    netdev@vger.kernel.org
 +S:    Maintained
 +F:    drivers/ptp/ptp_qoriq.c
 +F:    include/linux/fsl/ptp_qoriq.h
 +F:    Documentation/devicetree/bindings/ptp/ptp-qoriq.txt
 +
  FREESCALE QUAD SPI DRIVER
  M:    Han Xu <han.xu@nxp.com>
  L:    linux-mtd@lists.infradead.org
@@@ -5840,14 -5784,6 +5840,14 @@@ F:    fs/crypto
  F:    include/linux/fscrypt*.h
  F:    Documentation/filesystems/fscrypt.rst
  
 +FSNOTIFY: FILESYSTEM NOTIFICATION INFRASTRUCTURE
 +M:    Jan Kara <jack@suse.cz>
 +R:    Amir Goldstein <amir73il@gmail.com>
 +L:    linux-fsdevel@vger.kernel.org
 +S:    Maintained
 +F:    fs/notify/
 +F:    include/linux/fsnotify*.h
 +
  FUJITSU LAPTOP EXTRAS
  M:    Jonathan Woithe <jwoithe@just42.net>
  L:    platform-driver-x86@vger.kernel.org
@@@ -6007,8 -5943,8 +6007,8 @@@ S:      Maintaine
  F:    scripts/get_maintainer.pl
  
  GFS2 FILE SYSTEM
 -M:    Steven Whitehouse <swhiteho@redhat.com>
  M:    Bob Peterson <rpeterso@redhat.com>
 +M:    Andreas Gruenbacher <agruenba@redhat.com>
  L:    cluster-devel@redhat.com
  W:    http://sources.redhat.com/cluster/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/gfs2/linux-gfs2.git
@@@ -6276,7 -6212,6 +6276,7 @@@ L:      linux-hwmon@vger.kernel.or
  W:    http://hwmon.wiki.kernel.org/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging.git
  S:    Maintained
 +F:    Documentation/devicetree/bindings/hwmon/
  F:    Documentation/hwmon/
  F:    drivers/hwmon/
  F:    include/linux/hwmon*.h
@@@ -6321,7 -6256,7 +6321,7 @@@ S:      Odd Fixe
  F:    drivers/media/usb/hdpvr/
  
  HEWLETT PACKARD ENTERPRISE ILO NMI WATCHDOG DRIVER
 -M:    Jimmy Vance <jimmy.vance@hpe.com>
 +M:    Jerry Hoemann <jerry.hoemann@hpe.com>
  S:    Supported
  F:    Documentation/watchdog/hpwdt.txt
  F:    drivers/watchdog/hpwdt.c
@@@ -6563,15 -6498,9 +6563,15 @@@ F:    Documentation/networking/hinic.tx
  F:    drivers/net/ethernet/huawei/hinic/
  
  HUGETLB FILESYSTEM
 -M:    Nadia Yvette Chambers <nyc@holomorphy.com>
 +M:    Mike Kravetz <mike.kravetz@oracle.com>
 +L:    linux-mm@kvack.org
  S:    Maintained
  F:    fs/hugetlbfs/
 +F:    mm/hugetlb.c
 +F:    include/linux/hugetlb.h
 +F:    Documentation/admin-guide/mm/hugetlbpage.rst
 +F:    Documentation/vm/hugetlbfs_reserv.rst
 +F:    Documentation/ABI/testing/sysfs-kernel-mm-hugepages
  
  HVA ST MEDIA DRIVER
  M:    Jean-Christophe Trotin <jean-christophe.trotin@st.com>
@@@ -6811,12 -6740,6 +6811,12 @@@ L:    linux-scsi@vger.kernel.or
  S:    Supported
  F:    drivers/scsi/ibmvscsi/ibmvfc*
  
 +IBM Power Virtual Management Channel Driver
 +M:    Bryant G. Ly <bryantly@linux.vnet.ibm.com>
 +M:    Steven Royer <seroyer@linux.vnet.ibm.com>
 +S:    Supported
 +F:    drivers/misc/ibmvmc.*
 +
  IBM Power Virtual SCSI Device Drivers
  M:    Tyrel Datwyler <tyreld@linux.vnet.ibm.com>
  L:    linux-scsi@vger.kernel.org
@@@ -7100,13 -7023,14 +7100,13 @@@ L:   linux-fbdev@vger.kernel.or
  S:    Maintained
  F:    drivers/video/fbdev/i810/
  
 -INTEL ASoC BDW/HSW DRIVERS
 +INTEL ASoC DRIVERS
 +M:    Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
 +M:    Liam Girdwood <liam.r.girdwood@linux.intel.com>
  M:    Jie Yang <yang.jie@linux.intel.com>
  L:    alsa-devel@alsa-project.org (moderated for non-subscribers)
  S:    Supported
 -F:    sound/soc/intel/common/sst-dsp*
 -F:    sound/soc/intel/common/sst-firmware.c
 -F:    sound/soc/intel/boards/broadwell.c
 -F:    sound/soc/intel/haswell/
 +F:    sound/soc/intel/
  
  INTEL C600 SERIES SAS CONTROLLER DRIVER
  M:    Intel SCU Linux support <intel-linux-scu@intel.com>
@@@ -7141,8 -7065,8 +7141,8 @@@ Q:      http://patchwork.ozlabs.org/project/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-queue.git
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/next-queue.git
  S:    Supported
 -F:    Documentation/networking/e100.txt
 -F:    Documentation/networking/e1000.txt
 +F:    Documentation/networking/e100.rst
 +F:    Documentation/networking/e1000.rst
  F:    Documentation/networking/e1000e.txt
  F:    Documentation/networking/igb.txt
  F:    Documentation/networking/igbvf.txt
@@@ -7472,6 -7396,16 +7472,6 @@@ S:     Obsolet
  F:    include/uapi/linux/ipx.h
  F:    drivers/staging/ipx/
  
 -IRDA SUBSYSTEM
 -M:    Samuel Ortiz <samuel@sortiz.org>
 -L:    irda-users@lists.sourceforge.net (subscribers-only)
 -L:    netdev@vger.kernel.org
 -W:    http://irda.sourceforge.net/
 -S:    Obsolete
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/sameo/irda-2.6.git
 -F:    Documentation/networking/irda.txt
 -F:    drivers/staging/irda/
 -
  IRQ DOMAINS (IRQ NUMBER MAPPING LIBRARY)
  M:    Marc Zyngier <marc.zyngier@arm.com>
  S:    Maintained
@@@ -7702,9 -7636,8 +7702,9 @@@ M:      Masahiro Yamada <yamada.masahiro@soc
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild.git kconfig
  L:    linux-kbuild@vger.kernel.org
  S:    Maintained
 -F:    Documentation/kbuild/kconfig-language.txt
 +F:    Documentation/kbuild/kconfig*
  F:    scripts/kconfig/
 +F:    scripts/Kconfig.include
  
  KDUMP
  M:    Dave Young <dyoung@redhat.com>
@@@ -7723,11 -7656,11 +7723,11 @@@ W:   https://linuxtv.or
  S:    Maintained
  F:    drivers/media/radio/radio-keene*
  
 -KERNEL AUTOMOUNTER v4 (AUTOFS4)
 +KERNEL AUTOMOUNTER
  M:    Ian Kent <raven@themaw.net>
  L:    autofs@vger.kernel.org
  S:    Maintained
 -F:    fs/autofs4/
 +F:    fs/autofs/
  
  KERNEL BUILD + files below scripts/ (unless maintained elsewhere)
  M:    Masahiro Yamada <yamada.masahiro@socionext.com>
@@@ -7737,11 -7670,9 +7737,11 @@@ L:    linux-kbuild@vger.kernel.or
  S:    Maintained
  F:    Documentation/kbuild/
  F:    Makefile
 -F:    scripts/Makefile.*
 +F:    scripts/Kbuild*
 +F:    scripts/Makefile*
  F:    scripts/basic/
  F:    scripts/mk*
 +F:    scripts/mod/
  F:    scripts/package/
  
  KERNEL JANITORS
@@@ -7766,10 -7697,10 +7766,10 @@@ F:   include/linux/sunrpc
  F:    include/uapi/linux/sunrpc/
  
  KERNEL SELFTEST FRAMEWORK
 -M:    Shuah Khan <shuahkh@osg.samsung.com>
  M:    Shuah Khan <shuah@kernel.org>
  L:    linux-kselftest@vger.kernel.org
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/shuah/linux-kselftest.git
 +Q:    https://patchwork.kernel.org/project/linux-kselftest/list/
  S:    Maintained
  F:    tools/testing/selftests/
  F:    Documentation/dev-tools/kselftest*
@@@ -7807,7 -7738,7 +7807,7 @@@ F:      arch/x86/include/asm/svm.
  F:    arch/x86/kvm/svm.c
  
  KERNEL VIRTUAL MACHINE FOR ARM (KVM/arm)
 -M:    Christoffer Dall <christoffer.dall@linaro.org>
 +M:    Christoffer Dall <christoffer.dall@arm.com>
  M:    Marc Zyngier <marc.zyngier@arm.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  L:    kvmarm@lists.cs.columbia.edu
@@@ -7821,7 -7752,7 +7821,7 @@@ F:      virt/kvm/arm
  F:    include/kvm/arm_*
  
  KERNEL VIRTUAL MACHINE FOR ARM64 (KVM/arm64)
 -M:    Christoffer Dall <christoffer.dall@linaro.org>
 +M:    Christoffer Dall <christoffer.dall@arm.com>
  M:    Marc Zyngier <marc.zyngier@arm.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  L:    kvmarm@lists.cs.columbia.edu
@@@ -7971,6 -7902,8 +7971,6 @@@ F:      kernel/kprobes.
  
  KS0108 LCD CONTROLLER DRIVER
  M:    Miguel Ojeda Sandonis <miguel.ojeda.sandonis@gmail.com>
 -W:    http://miguelojeda.es/auxdisplay.htm
 -W:    http://jair.lab.fi.uva.es/~migojed/auxdisplay.htm
  S:    Maintained
  F:    Documentation/auxdisplay/ks0108
  F:    drivers/auxdisplay/ks0108.c
@@@ -8115,9 -8048,6 +8115,9 @@@ F:      tools/lib/lockdep
  
  LIBNVDIMM BLK: MMIO-APERTURE DRIVER
  M:    Ross Zwisler <ross.zwisler@linux.intel.com>
 +M:    Dan Williams <dan.j.williams@intel.com>
 +M:    Vishal Verma <vishal.l.verma@intel.com>
 +M:    Dave Jiang <dave.jiang@intel.com>
  L:    linux-nvdimm@lists.01.org
  Q:    https://patchwork.kernel.org/project/linux-nvdimm/list/
  S:    Supported
@@@ -8126,9 -8056,6 +8126,9 @@@ F:      drivers/nvdimm/region_devs.
  
  LIBNVDIMM BTT: BLOCK TRANSLATION TABLE
  M:    Vishal Verma <vishal.l.verma@intel.com>
 +M:    Dan Williams <dan.j.williams@intel.com>
 +M:    Ross Zwisler <ross.zwisler@linux.intel.com>
 +M:    Dave Jiang <dave.jiang@intel.com>
  L:    linux-nvdimm@lists.01.org
  Q:    https://patchwork.kernel.org/project/linux-nvdimm/list/
  S:    Supported
@@@ -8136,9 -8063,6 +8136,9 @@@ F:      drivers/nvdimm/btt
  
  LIBNVDIMM PMEM: PERSISTENT MEMORY DRIVER
  M:    Ross Zwisler <ross.zwisler@linux.intel.com>
 +M:    Dan Williams <dan.j.williams@intel.com>
 +M:    Vishal Verma <vishal.l.verma@intel.com>
 +M:    Dave Jiang <dave.jiang@intel.com>
  L:    linux-nvdimm@lists.01.org
  Q:    https://patchwork.kernel.org/project/linux-nvdimm/list/
  S:    Supported
@@@ -8154,9 -8078,6 +8154,9 @@@ F:      Documentation/devicetree/bindings/pm
  
  LIBNVDIMM: NON-VOLATILE MEMORY DEVICE SUBSYSTEM
  M:    Dan Williams <dan.j.williams@intel.com>
 +M:    Ross Zwisler <ross.zwisler@linux.intel.com>
 +M:    Vishal Verma <vishal.l.verma@intel.com>
 +M:    Dave Jiang <dave.jiang@intel.com>
  L:    linux-nvdimm@lists.01.org
  Q:    https://patchwork.kernel.org/project/linux-nvdimm/list/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/nvdimm/nvdimm.git
@@@ -8273,7 -8194,7 +8273,7 @@@ F:      drivers/misc/lkdtm/
  
  LINUX KERNEL MEMORY CONSISTENCY MODEL (LKMM)
  M:    Alan Stern <stern@rowland.harvard.edu>
 -M:    Andrea Parri <parri.andrea@gmail.com>
 +M:    Andrea Parri <andrea.parri@amarulasolutions.com>
  M:    Will Deacon <will.deacon@arm.com>
  M:    Peter Zijlstra <peterz@infradead.org>
  M:    Boqun Feng <boqun.feng@gmail.com>
@@@ -8380,7 -8301,6 +8380,7 @@@ F:      Documentation/admin-guide/LSM/LoadPi
  LOCKING PRIMITIVES
  M:    Peter Zijlstra <peterz@infradead.org>
  M:    Ingo Molnar <mingo@redhat.com>
 +M:    Will Deacon <will.deacon@arm.com>
  L:    linux-kernel@vger.kernel.org
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git locking/core
  S:    Maintained
@@@ -8537,7 -8457,6 +8537,7 @@@ M:      Vivien Didelot <vivien.didelot@savoi
  L:    netdev@vger.kernel.org
  S:    Maintained
  F:    drivers/net/dsa/mv88e6xxx/
 +F:    linux/platform_data/mv88e6xxx.h
  F:    Documentation/devicetree/bindings/net/dsa/marvell.txt
  
  MARVELL ARMADA DRM SUPPORT
@@@ -8895,7 -8814,6 +8895,7 @@@ L:      linux-media@vger.kernel.or
  L:    linux-renesas-soc@vger.kernel.org
  T:    git git://linuxtv.org/media_tree.git
  S:    Supported
 +F:    Documentation/devicetree/bindings/media/renesas,rcar-csi2.txt
  F:    Documentation/devicetree/bindings/media/rcar_vin.txt
  F:    drivers/media/platform/rcar-vin/
  
@@@ -8934,6 -8852,7 +8934,6 @@@ F:      Documentation/devicetree/bindings/me
  F:    drivers/staging/media/tegra-vde/
  
  MEDIA INPUT INFRASTRUCTURE (V4L/DVB)
 -M:    Mauro Carvalho Chehab <mchehab@s-opensource.com>
  M:    Mauro Carvalho Chehab <mchehab@kernel.org>
  P:    LinuxTV.org Project
  L:    linux-media@vger.kernel.org
@@@ -9022,6 -8941,13 +9022,13 @@@ L:    linux-wireless@vger.kernel.or
  S:    Maintained
  F:    drivers/net/wireless/mediatek/mt7601u/
  
+ MEDIATEK NAND CONTROLLER DRIVER
+ M:    Xiaolei Li <xiaolei.li@mediatek.com>
+ L:    linux-mtd@lists.infradead.org
+ S:    Maintained
+ F:    drivers/mtd/nand/raw/mtk_*
+ F:    Documentation/devicetree/bindings/mtd/mtk-nand.txt
  MEDIATEK RANDOM NUMBER GENERATOR SUPPORT
  M:    Sean Wang <sean.wang@mediatek.com>
  S:    Maintained
@@@ -9092,18 -9018,18 +9099,18 @@@ W:   http://www.mellanox.co
  Q:    http://patchwork.ozlabs.org/project/netdev/list/
  F:    drivers/net/ethernet/mellanox/mlx5/core/en_*
  
 -MELLANOX ETHERNET INNOVA DRIVER
 -M:    Ilan Tayari <ilant@mellanox.com>
 +MELLANOX ETHERNET INNOVA DRIVERS
  R:    Boris Pismenny <borisp@mellanox.com>
  L:    netdev@vger.kernel.org
  S:    Supported
  W:    http://www.mellanox.com
  Q:    http://patchwork.ozlabs.org/project/netdev/list/
 +F:    drivers/net/ethernet/mellanox/mlx5/core/en_accel/*
 +F:    drivers/net/ethernet/mellanox/mlx5/core/accel/*
  F:    drivers/net/ethernet/mellanox/mlx5/core/fpga/*
  F:    include/linux/mlx5/mlx5_ifc_fpga.h
  
  MELLANOX ETHERNET INNOVA IPSEC DRIVER
 -M:    Ilan Tayari <ilant@mellanox.com>
  R:    Boris Pismenny <borisp@mellanox.com>
  L:    netdev@vger.kernel.org
  S:    Supported
@@@ -9159,6 -9085,7 +9166,6 @@@ F:      include/uapi/rdma/mlx4-abi.
  
  MELLANOX MLX5 core VPI driver
  M:    Saeed Mahameed <saeedm@mellanox.com>
 -M:    Matan Barak <matanb@mellanox.com>
  M:    Leon Romanovsky <leonro@mellanox.com>
  L:    netdev@vger.kernel.org
  L:    linux-rdma@vger.kernel.org
@@@ -9169,6 -9096,7 +9176,6 @@@ F:      drivers/net/ethernet/mellanox/mlx5/c
  F:    include/linux/mlx5/
  
  MELLANOX MLX5 IB driver
 -M:    Matan Barak <matanb@mellanox.com>
  M:    Leon Romanovsky <leonro@mellanox.com>
  L:    linux-rdma@vger.kernel.org
  W:    http://www.mellanox.com
@@@ -9359,12 -9287,6 +9366,12 @@@ F:    include/linux/cciss*.
  F:    include/uapi/linux/cciss*.h
  F:    Documentation/scsi/smartpqi.txt
  
 +MICROSEMI ETHERNET SWITCH DRIVER
 +M:    Alexandre Belloni <alexandre.belloni@bootlin.com>
 +L:    netdev@vger.kernel.org
 +S:    Supported
 +F:    drivers/net/ethernet/mscc/
 +
  MICROSOFT SURFACE PRO 3 BUTTON DRIVER
  M:    Chen Yu <yu.c.chen@intel.com>
  L:    platform-driver-x86@vger.kernel.org
@@@ -9478,13 -9400,6 +9485,13 @@@ Q:    http://patchwork.linuxtv.org/project
  S:    Maintained
  F:    drivers/media/dvb-frontends/mn88473*
  
 +PCI DRIVER FOR MOBIVEIL PCIE IP
 +M:    Subrahmanya Lingappa <l.subrahmanya@mobiveil.co.in>
 +L:    linux-pci@vger.kernel.org
 +S:    Supported
 +F:    Documentation/devicetree/bindings/pci/mobiveil-pcie.txt
 +F:    drivers/pci/host/pcie-mobiveil.c
 +
  MODULE SUPPORT
  M:    Jessica Yu <jeyu@kernel.org>
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jeyu/linux.git modules-next
@@@ -9666,6 -9581,7 +9673,7 @@@ F:      drivers/net/ethernet/myricom/myri10g
  
  NAND FLASH SUBSYSTEM
  M:    Boris Brezillon <boris.brezillon@bootlin.com>
+ M:    Miquel Raynal <miquel.raynal@bootlin.com>
  R:    Richard Weinberger <richard@nod.at>
  L:    linux-mtd@lists.infradead.org
  W:    http://www.linux-mtd.infradead.org/
@@@ -9721,14 -9637,6 +9729,14 @@@ S:    Maintaine
  F:    Documentation/hwmon/nct6775
  F:    drivers/hwmon/nct6775.c
  
 +NET_FAILOVER MODULE
 +M:    Sridhar Samudrala <sridhar.samudrala@intel.com>
 +L:    netdev@vger.kernel.org
 +S:    Supported
 +F:    driver/net/net_failover.c
 +F:    include/net/net_failover.h
 +F:    Documentation/networking/net_failover.rst
 +
  NETEFFECT IWARP RNIC DRIVER (IW_NES)
  M:    Faisal Latif <faisal.latif@intel.com>
  L:    linux-rdma@vger.kernel.org
@@@ -9790,7 -9698,7 +9798,7 @@@ S:      Maintaine
  F:    drivers/net/ethernet/netronome/
  
  NETWORK BLOCK DEVICE (NBD)
 -M:    Josef Bacik <jbacik@fb.com>
 +M:    Josef Bacik <josef@toxicpanda.com>
  S:    Maintained
  L:    linux-block@vger.kernel.org
  L:    nbd@other.debian.org
@@@ -9806,7 -9714,6 +9814,7 @@@ W:      https://fedorahosted.org/dropwatch
  F:    net/core/drop_monitor.c
  
  NETWORKING DRIVERS
 +M:    "David S. Miller" <davem@davemloft.net>
  L:    netdev@vger.kernel.org
  W:    http://www.linuxfoundation.org/en/Net
  Q:    http://patchwork.ozlabs.org/project/netdev/list/
@@@ -9866,7 -9773,6 +9874,7 @@@ F:      include/uapi/linux/net_namespace.
  F:    tools/testing/selftests/net/
  F:    lib/net_utils.c
  F:    lib/random32.c
 +F:    Documentation/networking/
  
  NETWORKING [IPSEC]
  M:    Steffen Klassert <steffen.klassert@secunet.com>
@@@ -9922,21 -9828,8 +9930,21 @@@ F:    net/ipv6/calipso.
  F:    net/netfilter/xt_CONNSECMARK.c
  F:    net/netfilter/xt_SECMARK.c
  
 +NETWORKING [TCP]
 +M:    Eric Dumazet <edumazet@google.com>
 +L:    netdev@vger.kernel.org
 +S:    Maintained
 +F:    net/ipv4/tcp*.c
 +F:    net/ipv4/syncookies.c
 +F:    net/ipv6/tcp*.c
 +F:    net/ipv6/syncookies.c
 +F:    include/uapi/linux/tcp.h
 +F:    include/net/tcp.h
 +F:    include/linux/tcp.h
 +F:    include/trace/events/tcp.h
 +
  NETWORKING [TLS]
 -M:    Ilya Lesokhin <ilyal@mellanox.com>
 +M:    Boris Pismenny <borisp@mellanox.com>
  M:    Aviad Yehezkel <aviadye@mellanox.com>
  M:    Dave Watson <davejwatson@fb.com>
  L:    netdev@vger.kernel.org
@@@ -9976,7 -9869,7 +9984,7 @@@ F:      include/linux/platform_data/nxp-nci.
  F:    Documentation/devicetree/bindings/net/nfc/
  
  NFS, SUNRPC, AND LOCKD CLIENTS
 -M:    Trond Myklebust <trond.myklebust@primarydata.com>
 +M:    Trond Myklebust <trond.myklebust@hammerspace.com>
  M:    Anna Schumaker <anna.schumaker@netapp.com>
  L:    linux-nfs@vger.kernel.org
  W:    http://client.linux-nfs.org
@@@ -10459,7 -10352,6 +10467,7 @@@ T:   git git://linuxtv.org/media_tree.gi
  S:    Odd fixes
  F:    drivers/media/i2c/ov772x.c
  F:    include/media/i2c/ov772x.h
 +F:    Documentation/devicetree/bindings/media/i2c/ov772x.txt
  
  OMNIVISION OV7740 SENSOR DRIVER
  M:    Wenyou Yang <wenyou.yang@microchip.com>
@@@ -10510,14 -10402,12 +10518,14 @@@ F:        drivers/infiniband/ulp/opa_vni
  
  OPEN FIRMWARE AND DEVICE TREE OVERLAYS
  M:    Pantelis Antoniou <pantelis.antoniou@konsulko.com>
 +M:    Frank Rowand <frowand.list@gmail.com>
  L:    devicetree@vger.kernel.org
  S:    Maintained
  F:    Documentation/devicetree/dynamic-resolution-notes.txt
  F:    Documentation/devicetree/overlay-notes.txt
  F:    drivers/of/overlay.c
  F:    drivers/of/resolver.c
 +K:    of_overlay_notifier_
  
  OPEN FIRMWARE AND FLATTENED DEVICE TREE
  M:    Rob Herring <robh+dt@kernel.org>
@@@ -10829,9 -10719,9 +10837,9 @@@ F:   Documentation/devicetree/bindings/pc
  F:    drivers/pci/cadence/pcie-cadence*
  
  PCI DRIVER FOR FREESCALE LAYERSCAPE
 -M:    Minghuan Lian <minghuan.Lian@freescale.com>
 -M:    Mingkai Hu <mingkai.hu@freescale.com>
 -M:    Roy Zang <tie-fei.zang@freescale.com>
 +M:    Minghuan Lian <minghuan.Lian@nxp.com>
 +M:    Mingkai Hu <mingkai.hu@nxp.com>
 +M:    Roy Zang <roy.zang@nxp.com>
  L:    linuxppc-dev@lists.ozlabs.org
  L:    linux-pci@vger.kernel.org
  L:    linux-arm-kernel@lists.infradead.org
@@@ -10999,6 -10889,7 +11007,6 @@@ F:   drivers/pci/host
  F:    drivers/pci/dwc/
  
  PCIE DRIVER FOR AXIS ARTPEC
 -M:    Niklas Cassel <niklas.cassel@axis.com>
  M:    Jesper Nilsson <jesper.nilsson@axis.com>
  L:    linux-arm-kernel@axis.com
  L:    linux-pci@vger.kernel.org
@@@ -11057,8 -10948,8 +11065,8 @@@ M:   Shawn Lin <shawn.lin@rock-chips.com
  L:    linux-pci@vger.kernel.org
  L:    linux-rockchip@lists.infradead.org
  S:    Maintained
 -F:    Documentation/devicetree/bindings/pci/rockchip-pcie.txt
 -F:    drivers/pci/host/pcie-rockchip.c
 +F:    Documentation/devicetree/bindings/pci/rockchip-pcie*
 +F:    drivers/pci/host/pcie-rockchip*
  
  PCI DRIVER FOR V3 SEMICONDUCTOR V360EPC
  M:    Linus Walleij <linus.walleij@linaro.org>
@@@ -11221,7 -11112,6 +11229,7 @@@ L:   linux-mediatek@lists.infradead.org (
  S:    Maintained
  F:    Documentation/devicetree/bindings/pinctrl/pinctrl-mt65xx.txt
  F:    Documentation/devicetree/bindings/pinctrl/pinctrl-mt7622.txt
 +F:    drivers/pinctrl/mediatek/mtk-eint.*
  F:    drivers/pinctrl/mediatek/pinctrl-mtk-common.*
  F:    drivers/pinctrl/mediatek/pinctrl-mt2701.c
  F:    drivers/pinctrl/mediatek/pinctrl-mt7622.c
@@@ -11360,7 -11250,6 +11368,7 @@@ M:   Sebastian Reichel <sre@kernel.org
  L:    linux-pm@vger.kernel.org
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/sre/linux-power-supply.git
  S:    Maintained
 +F:    Documentation/ABI/testing/sysfs-class-power
  F:    Documentation/devicetree/bindings/power/supply/
  F:    include/linux/power_supply.h
  F:    drivers/power/supply/
@@@ -11506,6 -11395,7 +11514,6 @@@ S:   Maintaine
  W:    http://linuxptp.sourceforge.net/
  F:    Documentation/ABI/testing/sysfs-ptp
  F:    Documentation/ptp/*
 -F:    drivers/net/ethernet/freescale/gianfar_ptp.c
  F:    drivers/net/phy/dp83640*
  F:    drivers/ptp/*
  F:    include/linux/ptp_cl*
@@@ -11740,7 -11630,7 +11748,7 @@@ S:   Maintaine
  F:    drivers/media/tuners/qt1010*
  
  QUALCOMM ATHEROS ATH10K WIRELESS DRIVER
 -M:    Kalle Valo <kvalo@qca.qualcomm.com>
 +M:    Kalle Valo <kvalo@codeaurora.org>
  L:    ath10k@lists.infradead.org
  W:    http://wireless.kernel.org/en/users/Drivers/ath10k
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git
@@@ -11762,13 -11652,6 +11770,13 @@@ F: Documentation/devicetree/bindings/me
  F:    Documentation/media/v4l-drivers/qcom_camss.rst
  F:    drivers/media/platform/qcom/camss-8x16/
  
 +QUALCOMM CPUFREQ DRIVER MSM8996/APQ8096
 +M:  Ilia Lin <ilia.lin@gmail.com>
 +L:  linux-pm@vger.kernel.org
 +S:  Maintained
 +F:  Documentation/devicetree/bindings/opp/kryo-cpufreq.txt
 +F:  drivers/cpufreq/qcom-cpufreq-kryo.c
 +
  QUALCOMM EMAC GIGABIT ETHERNET DRIVER
  M:    Timur Tabi <timur@codeaurora.org>
  L:    netdev@vger.kernel.org
@@@ -11798,7 -11681,7 +11806,7 @@@ S:   Maintaine
  F:    drivers/media/platform/qcom/venus/
  
  QUALCOMM WCN36XX WIRELESS DRIVER
 -M:    Eugene Krasnikov <k.eugene.e@gmail.com>
 +M:    Kalle Valo <kvalo@codeaurora.org>
  L:    wcn36xx@lists.infradead.org
  W:    http://wireless.kernel.org/en/users/Drivers/wcn36xx
  T:    git git://github.com/KrasnikovEugene/wcn36xx.git
@@@ -11993,7 -11876,7 +12001,7 @@@ F:   include/linux/rtc.
  F:    include/uapi/linux/rtc.h
  F:    include/linux/rtc/
  F:    include/linux/platform_data/rtc-*
 -F:    tools/testing/selftests/timers/rtctest.c
 +F:    tools/testing/selftests/rtc/
  
  REALTEK AUDIO CODECS
  M:    Bard Liao <bardliao@realtek.com>
@@@ -12336,7 -12219,7 +12344,7 @@@ F:   Documentation/s390/vfio-ccw.tx
  F:    include/uapi/linux/vfio_ccw.h
  
  S390 ZCRYPT DRIVER
 -M:    Harald Freudenberger <freude@de.ibm.com>
 +M:    Harald Freudenberger <freude@linux.ibm.com>
  L:    linux-s390@vger.kernel.org
  W:    http://www.ibm.com/developerworks/linux/linux390/
  S:    Supported
@@@ -12365,6 -12248,7 +12373,6 @@@ S:   Odd Fixe
  F:    drivers/media/i2c/saa6588*
  
  SAA7134 VIDEO4LINUX DRIVER
 -M:    Mauro Carvalho Chehab <mchehab@s-opensource.com>
  M:    Mauro Carvalho Chehab <mchehab@kernel.org>
  L:    linux-media@vger.kernel.org
  W:    https://linuxtv.org
@@@ -12603,7 -12487,6 +12611,7 @@@ F:   drivers/scsi/st_*.
  SCTP PROTOCOL
  M:    Vlad Yasevich <vyasevich@gmail.com>
  M:    Neil Horman <nhorman@tuxdriver.com>
 +M:    Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>
  L:    linux-sctp@vger.kernel.org
  W:    http://lksctp.sourceforge.net
  S:    Maintained
@@@ -12869,6 -12752,7 +12877,6 @@@ S:   Maintaine
  F:    drivers/media/radio/si4713/radio-usb-si4713.c
  
  SIANO DVB DRIVER
 -M:    Mauro Carvalho Chehab <mchehab@s-opensource.com>
  M:    Mauro Carvalho Chehab <mchehab@kernel.org>
  L:    linux-media@vger.kernel.org
  W:    https://linuxtv.org
@@@ -12940,8 -12824,7 +12948,8 @@@ F:   include/linux/siphash.
  
  SIOX
  M:    Gavin Schenk <g.schenk@eckelmann.de>
 -M:    Uwe Kleine-König <kernel@pengutronix.de>
 +M:    Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
 +R:    Pengutronix Kernel Team <kernel@pengutronix.de>
  S:    Supported
  F:    drivers/siox/*
  F:    include/trace/events/siox.h
@@@ -13176,13 -13059,6 +13184,13 @@@ S: Maintaine
  F:    drivers/ssb/
  F:    include/linux/ssb/
  
 +SONY IMX258 SENSOR DRIVER
 +M:    Sakari Ailus <sakari.ailus@linux.intel.com>
 +L:    linux-media@vger.kernel.org
 +T:    git git://linuxtv.org/media_tree.git
 +S:    Maintained
 +F:    drivers/media/i2c/imx258.c
 +
  SONY IMX274 SENSOR DRIVER
  M:    Leon Luo <leonl@leopardimaging.com>
  L:    linux-media@vger.kernel.org
@@@ -13227,7 -13103,7 +13235,7 @@@ F:   include/uapi/sound
  F:    sound/
  
  SOUND - COMPRESSED AUDIO
 -M:    Vinod Koul <vinod.koul@intel.com>
 +M:    Vinod Koul <vkoul@kernel.org>
  L:    alsa-devel@alsa-project.org (moderated for non-subscribers)
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound.git
  S:    Supported
@@@ -13387,18 -13263,19 +13395,18 @@@ M:        Jan-Benedict Glaw <jbglaw@lug-owl.de
  S:    Maintained
  F:    arch/alpha/kernel/srm_env.c
  
 +ST STM32 I2C/SMBUS DRIVER
 +M:    Pierre-Yves MORDRET <pierre-yves.mordret@st.com>
 +L:    linux-i2c@vger.kernel.org
 +S:    Maintained
 +F:    drivers/i2c/busses/i2c-stm32*
 +
  STABLE BRANCH
  M:    Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  L:    stable@vger.kernel.org
  S:    Supported
  F:    Documentation/process/stable-kernel-rules.rst
  
 -STAGING - ATOMISP DRIVER
 -M:    Alan Cox <alan@linux.intel.com>
 -M:    Sakari Ailus <sakari.ailus@linux.intel.com>
 -L:    linux-media@vger.kernel.org
 -S:    Maintained
 -F:    drivers/staging/media/atomisp/
 -
  STAGING - COMEDI
  M:    Ian Abbott <abbotti@mev.co.uk>
  M:    H Hartley Sweeten <hsweeten@visionengravers.com>
@@@ -13516,7 -13393,6 +13524,7 @@@ F:   drivers/media/usb/stk1160
  STMMAC ETHERNET DRIVER
  M:    Giuseppe Cavallaro <peppe.cavallaro@st.com>
  M:    Alexandre Torgue <alexandre.torgue@st.com>
 +M:    Jose Abreu <joabreu@synopsys.com>
  L:    netdev@vger.kernel.org
  W:    http://www.stlinux.com
  S:    Supported
@@@ -13866,6 -13742,7 +13874,6 @@@ S:   Maintaine
  F:    drivers/media/i2c/tda9840*
  
  TEA5761 TUNER DRIVER
 -M:    Mauro Carvalho Chehab <mchehab@s-opensource.com>
  M:    Mauro Carvalho Chehab <mchehab@kernel.org>
  L:    linux-media@vger.kernel.org
  W:    https://linuxtv.org
@@@ -13874,6 -13751,7 +13882,6 @@@ S:   Odd fixe
  F:    drivers/media/tuners/tea5761.*
  
  TEA5767 TUNER DRIVER
 -M:    Mauro Carvalho Chehab <mchehab@s-opensource.com>
  M:    Mauro Carvalho Chehab <mchehab@kernel.org>
  L:    linux-media@vger.kernel.org
  W:    https://linuxtv.org
@@@ -13963,6 -13841,7 +13971,6 @@@ S:   Supporte
  F:    drivers/iommu/tegra*
  
  TEGRA KBC DRIVER
 -M:    Rakesh Iyer <riyer@nvidia.com>
  M:    Laxman Dewangan <ldewangan@nvidia.com>
  S:    Supported
  F:    drivers/input/keyboard/tegra-kbc.c
@@@ -14065,7 -13944,7 +14073,7 @@@ THUNDERBOLT DRIVE
  M:    Andreas Noever <andreas.noever@gmail.com>
  M:    Michael Jamet <michael.jamet@intel.com>
  M:    Mika Westerberg <mika.westerberg@linux.intel.com>
 -M:    Yehezkel Bernat <yehezkel.bernat@intel.com>
 +M:    Yehezkel Bernat <YehezkelShB@gmail.com>
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/westeri/thunderbolt.git
  S:    Maintained
  F:    Documentation/admin-guide/thunderbolt.rst
@@@ -14075,7 -13954,7 +14083,7 @@@ F:   include/linux/thunderbolt.
  THUNDERBOLT NETWORK DRIVER
  M:    Michael Jamet <michael.jamet@intel.com>
  M:    Mika Westerberg <mika.westerberg@linux.intel.com>
 -M:    Yehezkel Bernat <yehezkel.bernat@intel.com>
 +M:    Yehezkel Bernat <YehezkelShB@gmail.com>
  L:    netdev@vger.kernel.org
  S:    Maintained
  F:    drivers/net/thunderbolt.c
@@@ -14289,6 -14168,7 +14297,6 @@@ F:   Documentation/networking/tlan.tx
  F:    drivers/net/ethernet/ti/tlan.*
  
  TM6000 VIDEO4LINUX DRIVER
 -M:    Mauro Carvalho Chehab <mchehab@s-opensource.com>
  M:    Mauro Carvalho Chehab <mchehab@kernel.org>
  L:    linux-media@vger.kernel.org
  W:    https://linuxtv.org
@@@ -14487,15 -14367,6 +14495,15 @@@ S: Maintaine
  F:    drivers/tc/
  F:    include/linux/tc.h
  
 +TURBOSTAT UTILITY
 +M:    "Len Brown" <lenb@kernel.org>
 +L:    linux-pm@vger.kernel.org
 +B:    https://bugzilla.kernel.org
 +Q:    https://patchwork.kernel.org/project/linux-pm/list/
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux.git turbostat
 +S:    Supported
 +F:    tools/power/x86/turbostat/
 +
  TW5864 VIDEO4LINUX DRIVER
  M:    Bluecherry Maintainers <maintainers@bluecherrydvr.com>
  M:    Anton Sviridenko <anton@corp.bluecherry.net>
@@@ -14742,9 -14613,7 +14750,9 @@@ M:   Woojung Huh <woojung.huh@microchip.c
  M:    Microchip Linux Driver Support <UNGLinuxDriver@microchip.com>
  L:    netdev@vger.kernel.org
  S:    Maintained
 +F:    Documentation/devicetree/bindings/net/microchip,lan78xx.txt
  F:    drivers/net/usb/lan78xx.*
 +F:    include/dt-bindings/net/microchip-lan78xx.h
  
  USB MASS STORAGE DRIVER
  M:    Alan Stern <stern@rowland.harvard.edu>
@@@ -14782,13 -14651,13 +14790,13 @@@ F:        drivers/usb/common/usb-otg-fsm.
  
  USB OVER IP DRIVER
  M:    Valentina Manea <valentina.manea.m@gmail.com>
 -M:    Shuah Khan <shuahkh@osg.samsung.com>
  M:    Shuah Khan <shuah@kernel.org>
  L:    linux-usb@vger.kernel.org
  S:    Maintained
  F:    Documentation/usb/usbip_protocol.txt
  F:    drivers/usb/usbip/
  F:    tools/usb/usbip/
 +F:    tools/testing/selftests/drivers/usb/usbip/
  
  USB PEGASUS DRIVER
  M:    Petko Manolov <petkan@nucleusys.com>
@@@ -15061,12 -14930,6 +15069,12 @@@ L: linux-media@vger.kernel.or
  S:    Maintained
  F:    drivers/media/platform/video-mux.c
  
 +VIDEO I2C POLLING DRIVER
 +M:    Matt Ranostay <matt.ranostay@konsulko.com>
 +L:    linux-media@vger.kernel.org
 +S:    Maintained
 +F:    drivers/media/i2c/video-i2c.c
 +
  VIDEOBUF2 FRAMEWORK
  M:    Pawel Osciak <pawel@osciak.com>
  M:    Marek Szyprowski <m.szyprowski@samsung.com>
@@@ -15532,6 -15395,7 +15540,6 @@@ S:   Maintaine
  F:    arch/x86/entry/vdso/
  
  XC2028/3028 TUNER DRIVER
 -M:    Mauro Carvalho Chehab <mchehab@s-opensource.com>
  M:    Mauro Carvalho Chehab <mchehab@kernel.org>
  L:    linux-media@vger.kernel.org
  W:    https://linuxtv.org
@@@ -15539,14 -15403,6 +15547,14 @@@ T: git git://linuxtv.org/media_tree.gi
  S:    Maintained
  F:    drivers/media/tuners/tuner-xc2028.*
  
 +XDP SOCKETS (AF_XDP)
 +M:    Björn Töpel <bjorn.topel@intel.com>
 +M:    Magnus Karlsson <magnus.karlsson@intel.com>
 +L:    netdev@vger.kernel.org
 +S:    Maintained
 +F:    kernel/bpf/xskmap.c
 +F:    net/xdp/
 +
  XEN BLOCK SUBSYSTEM
  M:    Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
  M:    Roger Pau Monné <roger.pau@citrix.com>
@@@ -15617,13 -15473,6 +15625,13 @@@ S: Supporte
  F:    arch/x86/xen/*swiotlb*
  F:    drivers/xen/*swiotlb*
  
 +XEN SOUND FRONTEND DRIVER
 +M:    Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>
 +L:    xen-devel@lists.xenproject.org (moderated for non-subscribers)
 +L:    alsa-devel@alsa-project.org (moderated for non-subscribers)
 +S:    Supported
 +F:    sound/xen/*
 +
  XFS FILESYSTEM
  M:    Darrick J. Wong <darrick.wong@oracle.com>
  M:    linux-xfs@vger.kernel.org
@@@ -15662,14 -15511,6 +15670,14 @@@ L: linux-kernel@vger.kernel.or
  S:    Supported
  F:    drivers/char/xillybus/
  
 +XLP9XX I2C DRIVER
 +M:    George Cherian <george.cherian@cavium.com>
 +M:    Jan Glauber <jglauber@cavium.com>
 +L:    linux-i2c@vger.kernel.org
 +W:    http://www.cavium.com
 +S:    Supported
 +F:    drivers/i2c/busses/i2c-xlp9xx.c
 +
  XRA1403 GPIO EXPANDER
  M:    Nandor Han <nandor.han@ge.com>
  M:    Semi Malinen <semi.malinen@ge.com>
@@@ -15764,7 -15605,7 +15772,7 @@@ L:   linux-media@vger.kernel.or
  W:    http://mjpeg.sourceforge.net/driver-zoran/
  T:    hg https://linuxtv.org/hg/v4l-dvb
  S:    Odd Fixes
 -F:    drivers/media/pci/zoran/
 +F:    drivers/staging/media/zoran/
  
  ZRAM COMPRESSED RAM BLOCK DEVICE DRVIER
  M:    Minchan Kim <minchan@kernel.org>
@@@ -15788,7 -15629,7 +15796,7 @@@ L:   linux-mm@kvack.or
  S:    Maintained
  F:    mm/zsmalloc.c
  F:    include/linux/zsmalloc.h
 -F:    Documentation/vm/zsmalloc.txt
 +F:    Documentation/vm/zsmalloc.rst
  
  ZSWAP COMPRESSED SWAP CACHING
  M:    Seth Jennings <sjenning@redhat.com>
index 692902df259892a78e69964cf1069867d7336acc,78b69ccd0b65f49df75cc3017cad2cee6db1cd00..7c889eca9ab0b1288270e2a7efaa50e7da7138a5
  #define AMD_BOOTLOC_BUG
  #define FORCE_WORD_WRITE 0
  
- #define MAX_WORD_RETRIES 3
+ #define MAX_RETRIES 3
  
- #define SST49LF004B           0x0060
- #define SST49LF040B           0x0050
+ #define SST49LF004B           0x0060
+ #define SST49LF040B           0x0050
  #define SST49LF008A           0x005a
  #define AT49BV6416            0x00d6
  
@@@ -207,7 -207,7 +207,7 @@@ static void fixup_use_write_buffers(str
        struct map_info *map = mtd->priv;
        struct cfi_private *cfi = map->fldrv_priv;
        if (cfi->cfiq->BufWriteTimeoutTyp) {
-               pr_debug("Using buffer write method\n" );
+               pr_debug("Using buffer write method\n");
                mtd->_write = cfi_amdstd_write_buffers;
        }
  }
@@@ -816,10 -816,9 +816,10 @@@ static int get_chip(struct map_info *ma
                    (mode == FL_WRITING && (cfip->EraseSuspend & 0x2))))
                        goto sleep;
  
 -              /* We could check to see if we're trying to access the sector
 -               * that is currently being erased. However, no user will try
 -               * anything like that so we just wait for the timeout. */
 +              /* Do not allow suspend iff read/write to EB address */
 +              if ((adr & chip->in_progress_block_mask) ==
 +                  chip->in_progress_block_addr)
 +                      goto sleep;
  
                /* Erase suspend */
                /* It's harmless to issue the Erase-Suspend and Erase-Resume
@@@ -1563,7 -1562,7 +1563,7 @@@ static int __xipram do_write_oneword(st
         * depending of the conditions.  The ' + 1' is to avoid having a
         * timeout of 0 jiffies if HZ is smaller than 1000.
         */
-       unsigned long uWriteTimeout = ( HZ / 1000 ) + 1;
+       unsigned long uWriteTimeout = (HZ / 1000) + 1;
        int ret = 0;
        map_word oldd;
        int retry_cnt = 0;
        }
  
        pr_debug("MTD %s(): WRITE 0x%.8lx(0x%.8lx)\n",
-              __func__, adr, datum.x[0] );
+                __func__, adr, datum.x[0]);
  
        if (mode == FL_OTP_WRITE)
                otp_enter(map, chip, adr, map_bankwidth(map));
        /* Did we succeed? */
        if (!chip_good(map, adr, datum)) {
                /* reset on all failures. */
-               map_write( map, CMD(0xF0), chip->start );
+               map_write(map, CMD(0xF0), chip->start);
                /* FIXME - should have reset delay before continuing */
  
-               if (++retry_cnt <= MAX_WORD_RETRIES)
+               if (++retry_cnt <= MAX_RETRIES)
                        goto retry;
  
                ret = -EIO;
@@@ -1822,7 -1821,7 +1822,7 @@@ static int __xipram do_write_buffer(str
        datum = map_word_load(map, buf);
  
        pr_debug("MTD %s(): WRITE 0x%.8lx(0x%.8lx)\n",
-              __func__, adr, datum.x[0] );
+                __func__, adr, datum.x[0]);
  
        XIP_INVAL_CACHED_RANGE(map, adr, len);
        ENABLE_VPP(map);
                if (time_after(jiffies, timeo) && !chip_ready(map, adr))
                        break;
  
-               if (chip_ready(map, adr)) {
+               if (chip_good(map, adr, datum)) {
                        xip_enable(map, chip, adr);
                        goto op_done;
                }
@@@ -2106,7 -2105,7 +2106,7 @@@ retry
                map_write(map, CMD(0xF0), chip->start);
                /* FIXME - should have reset delay before continuing */
  
-               if (++retry_cnt <= MAX_WORD_RETRIES)
+               if (++retry_cnt <= MAX_RETRIES)
                        goto retry;
  
                ret = -EIO;
@@@ -2241,6 -2240,7 +2241,7 @@@ static int __xipram do_erase_chip(struc
        unsigned long int adr;
        DECLARE_WAITQUEUE(wait, current);
        int ret = 0;
+       int retry_cnt = 0;
  
        adr = cfi->addr_unlock1;
  
        }
  
        pr_debug("MTD %s(): ERASE 0x%.8lx\n",
-              __func__, chip->start );
+              __func__, chip->start);
  
        XIP_INVAL_CACHED_RANGE(map, adr, map->size);
        ENABLE_VPP(map);
        xip_disable(map, chip, adr);
  
+  retry:
        cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL);
        cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi, cfi->device_type, NULL);
        cfi_send_gen_cmd(0x80, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL);
        chip->state = FL_ERASING;
        chip->erase_suspended = 0;
        chip->in_progress_block_addr = adr;
 +      chip->in_progress_block_mask = ~(map->size - 1);
  
        INVALIDATE_CACHE_UDELAY(map, chip,
                                adr, map->size,
                        chip->erase_suspended = 0;
                }
  
-               if (chip_ready(map, adr))
+               if (chip_good(map, adr, map_word_ff(map)))
                        break;
  
                if (time_after(jiffies, timeo)) {
                        printk(KERN_WARNING "MTD %s(): software timeout\n",
-                               __func__ );
+                              __func__);
+                       ret = -EIO;
                        break;
                }
  
                UDELAY(map, chip, adr, 1000000/HZ);
        }
        /* Did we succeed? */
-       if (!chip_good(map, adr, map_word_ff(map))) {
+       if (ret) {
                /* reset on all failures. */
-               map_write( map, CMD(0xF0), chip->start );
+               map_write(map, CMD(0xF0), chip->start);
                /* FIXME - should have reset delay before continuing */
  
-               ret = -EIO;
+               if (++retry_cnt <= MAX_RETRIES) {
+                       ret = 0;
+                       goto retry;
+               }
        }
  
        chip->state = FL_READY;
@@@ -2331,6 -2335,7 +2337,7 @@@ static int __xipram do_erase_oneblock(s
        unsigned long timeo = jiffies + HZ;
        DECLARE_WAITQUEUE(wait, current);
        int ret = 0;
+       int retry_cnt = 0;
  
        adr += chip->start;
  
        }
  
        pr_debug("MTD %s(): ERASE 0x%.8lx\n",
-              __func__, adr );
+                __func__, adr);
  
        XIP_INVAL_CACHED_RANGE(map, adr, len);
        ENABLE_VPP(map);
        xip_disable(map, chip, adr);
  
+  retry:
        cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL);
        cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi, cfi->device_type, NULL);
        cfi_send_gen_cmd(0x80, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL);
        chip->state = FL_ERASING;
        chip->erase_suspended = 0;
        chip->in_progress_block_addr = adr;
 +      chip->in_progress_block_mask = ~(len - 1);
  
        INVALIDATE_CACHE_UDELAY(map, chip,
                                adr, len,
                        chip->erase_suspended = 0;
                }
  
-               if (chip_ready(map, adr)) {
-                       xip_enable(map, chip, adr);
+               if (chip_good(map, adr, map_word_ff(map)))
                        break;
-               }
  
                if (time_after(jiffies, timeo)) {
-                       xip_enable(map, chip, adr);
                        printk(KERN_WARNING "MTD %s(): software timeout\n",
-                               __func__ );
+                              __func__);
+                       ret = -EIO;
                        break;
                }
  
                UDELAY(map, chip, adr, 1000000/HZ);
        }
        /* Did we succeed? */
-       if (!chip_good(map, adr, map_word_ff(map))) {
+       if (ret) {
                /* reset on all failures. */
-               map_write( map, CMD(0xF0), chip->start );
+               map_write(map, CMD(0xF0), chip->start);
                /* FIXME - should have reset delay before continuing */
  
-               ret = -EIO;
+               if (++retry_cnt <= MAX_RETRIES) {
+                       ret = 0;
+                       goto retry;
+               }
        }
  
        chip->state = FL_READY;
+       xip_enable(map, chip, adr);
        DISABLE_VPP(map);
        put_chip(map, chip, adr);
        mutex_unlock(&chip->mutex);
diff --combined drivers/mtd/mtdcore.c
index 64a1fcaafd9a461846745674229b47b2ee3ceed2,7b0d105627b185d30a0c14ac7080b2df6f3e8b37..42395df06be9ab3f8a5fd42920e23f9307f2d0b7
@@@ -210,6 -210,15 +210,15 @@@ static ssize_t mtd_oobsize_show(struct 
  }
  static DEVICE_ATTR(oobsize, S_IRUGO, mtd_oobsize_show, NULL);
  
+ static ssize_t mtd_oobavail_show(struct device *dev,
+                                struct device_attribute *attr, char *buf)
+ {
+       struct mtd_info *mtd = dev_get_drvdata(dev);
+       return snprintf(buf, PAGE_SIZE, "%u\n", mtd->oobavail);
+ }
+ static DEVICE_ATTR(oobavail, S_IRUGO, mtd_oobavail_show, NULL);
  static ssize_t mtd_numeraseregions_show(struct device *dev,
                struct device_attribute *attr, char *buf)
  {
@@@ -327,6 -336,7 +336,7 @@@ static struct attribute *mtd_attrs[] = 
        &dev_attr_writesize.attr,
        &dev_attr_subpagesize.attr,
        &dev_attr_oobsize.attr,
+       &dev_attr_oobavail.attr,
        &dev_attr_numeraseregions.attr,
        &dev_attr_name.attr,
        &dev_attr_ecc_strength.attr,
@@@ -690,7 -700,6 +700,6 @@@ int mtd_device_parse_register(struct mt
                              const struct mtd_partition *parts,
                              int nr_parts)
  {
-       struct mtd_partitions parsed = { };
        int ret;
  
        mtd_set_dev_defaults(mtd);
        }
  
        /* Prefer parsed partitions over driver-provided fallback */
-       ret = parse_mtd_partitions(mtd, types, &parsed, parser_data);
-       if (!ret && parsed.nr_parts) {
-               parts = parsed.parts;
-               nr_parts = parsed.nr_parts;
-       }
-       if (nr_parts)
+       ret = parse_mtd_partitions(mtd, types, parser_data);
+       if (ret > 0)
+               ret = 0;
+       else if (nr_parts)
                ret = add_mtd_partitions(mtd, parts, nr_parts);
        else if (!device_is_registered(&mtd->dev))
                ret = add_mtd_device(mtd);
        }
  
  out:
-       /* Cleanup any parsed partitions */
-       mtd_part_parser_cleanup(&parsed);
        if (ret && device_is_registered(&mtd->dev))
                del_mtd_device(mtd);
  
@@@ -1829,6 -1833,18 +1833,6 @@@ static int mtd_proc_show(struct seq_fil
        mutex_unlock(&mtd_table_mutex);
        return 0;
  }
 -
 -static int mtd_proc_open(struct inode *inode, struct file *file)
 -{
 -      return single_open(file, mtd_proc_show, NULL);
 -}
 -
 -static const struct file_operations mtd_proc_ops = {
 -      .open           = mtd_proc_open,
 -      .read           = seq_read,
 -      .llseek         = seq_lseek,
 -      .release        = single_release,
 -};
  #endif /* CONFIG_PROC_FS */
  
  /*====================================================================*/
@@@ -1871,7 -1887,7 +1875,7 @@@ static int __init init_mtd(void
                goto err_bdi;
        }
  
 -      proc_mtd = proc_create("mtd", 0, NULL, &mtd_proc_ops);
 +      proc_mtd = proc_create_single("mtd", 0, NULL, mtd_proc_show);
  
        ret = init_mtdchar();
        if (ret)
index 2b7b2b982b773db58366a4e524f88bd5be3a8a17,8d0fb2daad7124ec34bb9650d0f9a83be892fbcf..8d10061abb4b27d0d30d5d479d7af27ef3e90d31
@@@ -66,7 -66,6 +66,7 @@@ struct doc_priv 
        int curchip;
        int mh0_page;
        int mh1_page;
 +      struct rs_control *rs_decoder;
        struct mtd_info *nextdoc;
  
        /* Handle the last stage of initialization (BBT scan, partitioning) */
@@@ -124,6 -123,9 +124,6 @@@ MODULE_PARM_DESC(doc_config_location, "
  /* Number of symbols */
  #define NN 1023
  
 -/* the Reed Solomon control structure */
 -static struct rs_control *rs_decoder;
 -
  /*
   * The HW decoder in the DoC ASIC's provides us a error syndrome,
   * which we must convert to a standard syndrome usable by the generic
@@@ -138,7 -140,6 +138,7 @@@ static int doc_ecc_decode(struct rs_con
        int i, j, nerr, errpos[8];
        uint8_t parity;
        uint16_t ds[4], s[5], tmp, errval[8], syn[4];
 +      struct rs_codec *cd = rs->codec;
  
        memset(syn, 0, sizeof(syn));
        /* Convert the ecc bytes into words */
        for (j = 1; j < NROOTS; j++) {
                if (ds[j] == 0)
                        continue;
 -              tmp = rs->index_of[ds[j]];
 +              tmp = cd->index_of[ds[j]];
                for (i = 0; i < NROOTS; i++)
 -                      s[i] ^= rs->alpha_to[rs_modnn(rs, tmp + (FCR + i) * j)];
 +                      s[i] ^= cd->alpha_to[rs_modnn(cd, tmp + (FCR + i) * j)];
        }
  
        /* Calc syn[i] = s[i] / alpha^(v + i) */
        for (i = 0; i < NROOTS; i++) {
                if (s[i])
 -                      syn[i] = rs_modnn(rs, rs->index_of[s[i]] + (NN - FCR - i));
 +                      syn[i] = rs_modnn(cd, cd->index_of[s[i]] + (NN - FCR - i));
        }
        /* Call the decoder library */
        nerr = decode_rs16(rs, NULL, NULL, 1019, syn, 0, errpos, 0, errval);
@@@ -929,7 -930,7 +929,7 @@@ static int doc200x_correct_data(struct 
                                calc_ecc[i] = ReadDOC_(docptr, DoC_ECCSyndrome0 + i);
                }
  
 -              ret = doc_ecc_decode(rs_decoder, dat, calc_ecc);
 +              ret = doc_ecc_decode(doc->rs_decoder, dat, calc_ecc);
                if (ret > 0)
                        pr_err("doc200x_correct_data corrected %d errors\n",
                               ret);
@@@ -1420,10 -1421,10 +1420,10 @@@ static inline int __init doc2001plus_in
  
  static int __init doc_probe(unsigned long physadr)
  {
 +      struct nand_chip *nand = NULL;
 +      struct doc_priv *doc = NULL;
        unsigned char ChipID;
        struct mtd_info *mtd;
 -      struct nand_chip *nand;
 -      struct doc_priv *doc;
        void __iomem *virtadr;
        unsigned char save_control;
        unsigned char tmp, tmpb, tmpc;
                WriteDOC(tmp, virtadr, Mplus_DOCControl);
                WriteDOC(~tmp, virtadr, Mplus_CtrlConfirm);
  
-               mdelay(1);
+               usleep_range(1000, 2000);
                /* Enable the Millennium Plus ASIC */
                tmp = DOC_MODE_NORMAL | DOC_MODE_MDWREN | DOC_MODE_RST_LAT | DOC_MODE_BDECT;
                WriteDOC(tmp, virtadr, Mplus_DOCControl);
                WriteDOC(~tmp, virtadr, Mplus_CtrlConfirm);
-               mdelay(1);
+               usleep_range(1000, 2000);
  
                ChipID = ReadDOC(virtadr, ChipID);
  
                goto fail;
        }
  
 +
 +      /*
 +       * Allocate a RS codec instance
 +       *
 +       * Symbolsize is 10 (bits)
 +       * Primitve polynomial is x^10+x^3+1
 +       * First consecutive root is 510
 +       * Primitve element to generate roots = 1
 +       * Generator polinomial degree = 4
 +       */
 +      doc = (struct doc_priv *) (nand + 1);
 +      doc->rs_decoder = init_rs(10, 0x409, FCR, 1, NROOTS);
 +      if (!doc->rs_decoder) {
 +              pr_err("DiskOnChip: Could not create a RS codec\n");
 +              ret = -ENOMEM;
 +              goto fail;
 +      }
 +
        mtd                     = nand_to_mtd(nand);
 -      doc                     = (struct doc_priv *) (nand + 1);
        nand->bbt_td            = (struct nand_bbt_descr *) (doc + 1);
        nand->bbt_md            = nand->bbt_td + 1;
  
                   haven't yet added it.  This is handled without incident by
                   mtd_device_unregister, as far as I can tell. */
                nand_release(mtd);
 -              kfree(nand);
                goto fail;
        }
  
           actually a DiskOnChip.  */
        WriteDOC(save_control, virtadr, DOCControl);
   fail:
 +      if (doc)
 +              free_rs(doc->rs_decoder);
 +      kfree(nand);
        iounmap(virtadr);
  
  error_ioremap:
@@@ -1665,7 -1647,6 +1665,7 @@@ static void release_nanddoc(void
                nand_release(mtd);
                iounmap(doc->virtadr);
                release_mem_region(doc->physadr, DOC_IOREMAP_LEN);
 +              free_rs(doc->rs_decoder);
                kfree(nand);
        }
  }
@@@ -1674,12 -1655,27 +1674,12 @@@ static int __init init_nanddoc(void
  {
        int i, ret = 0;
  
 -      /* We could create the decoder on demand, if memory is a concern.
 -       * This way we have it handy, if an error happens
 -       *
 -       * Symbolsize is 10 (bits)
 -       * Primitve polynomial is x^10+x^3+1
 -       * first consecutive root is 510
 -       * primitve element to generate roots = 1
 -       * generator polinomial degree = 4
 -       */
 -      rs_decoder = init_rs(10, 0x409, FCR, 1, NROOTS);
 -      if (!rs_decoder) {
 -              pr_err("DiskOnChip: Could not create a RS decoder\n");
 -              return -ENOMEM;
 -      }
 -
        if (doc_config_location) {
                pr_info("Using configured DiskOnChip probe address 0x%lx\n",
                        doc_config_location);
                ret = doc_probe(doc_config_location);
                if (ret < 0)
 -                      goto outerr;
 +                      return ret;
        } else {
                for (i = 0; (doc_locations[i] != 0xffffffff); i++) {
                        doc_probe(doc_locations[i]);
        if (!doclist) {
                pr_info("No valid DiskOnChip devices found\n");
                ret = -ENODEV;
 -              goto outerr;
        }
 -      return 0;
 - outerr:
 -      free_rs(rs_decoder);
        return ret;
  }
  
@@@ -1698,6 -1698,11 +1698,6 @@@ static void __exit cleanup_nanddoc(void
  {
        /* Cleanup the nand/DoC resources */
        release_nanddoc();
 -
 -      /* Free the reed solomon resources */
 -      if (rs_decoder) {
 -              free_rs(rs_decoder);
 -      }
  }
  
  module_init(init_nanddoc);
index f28c3a5558619fa22842ed2bffab7e0b4d7141a6,327c60b06f87c8f2c9292bce538bd7599ea32d6e..10c4f9919850c3e7b56ed6bdb083a0fc35a0b7f5
@@@ -706,17 -706,12 +706,17 @@@ static void nand_wait_status_ready(stru
   */
  int nand_soft_waitrdy(struct nand_chip *chip, unsigned long timeout_ms)
  {
 +      const struct nand_sdr_timings *timings;
        u8 status = 0;
        int ret;
  
        if (!chip->exec_op)
                return -ENOTSUPP;
  
 +      /* Wait tWB before polling the STATUS reg. */
 +      timings = nand_get_sdr_timings(&chip->data_interface);
 +      ndelay(PSEC_TO_NSEC(timings->tWB_max));
 +
        ret = nand_status_op(chip, NULL);
        if (ret)
                return ret;
@@@ -2174,7 -2169,6 +2174,6 @@@ static int nand_set_features_op(struct 
        struct mtd_info *mtd = nand_to_mtd(chip);
        const u8 *params = data;
        int i, ret;
-       u8 status;
  
        if (chip->exec_op) {
                const struct nand_sdr_timings *sdr =
                };
                struct nand_operation op = NAND_OPERATION(instrs);
  
-               ret = nand_exec_op(chip, &op);
-               if (ret)
-                       return ret;
-               ret = nand_status_op(chip, &status);
-               if (ret)
-                       return ret;
-       } else {
-               chip->cmdfunc(mtd, NAND_CMD_SET_FEATURES, feature, -1);
-               for (i = 0; i < ONFI_SUBFEATURE_PARAM_LEN; ++i)
-                       chip->write_byte(mtd, params[i]);
+               return nand_exec_op(chip, &op);
+       }
  
-               ret = chip->waitfunc(mtd, chip);
-               if (ret < 0)
-                       return ret;
+       chip->cmdfunc(mtd, NAND_CMD_SET_FEATURES, feature, -1);
+       for (i = 0; i < ONFI_SUBFEATURE_PARAM_LEN; ++i)
+               chip->write_byte(mtd, params[i]);
  
-               status = ret;
-       }
+       ret = chip->waitfunc(mtd, chip);
+       if (ret < 0)
+               return ret;
  
-       if (status & NAND_STATUS_FAIL)
+       if (ret & NAND_STATUS_FAIL)
                return -EIO;
  
        return 0;
@@@ -5091,6 -5077,37 +5082,37 @@@ ext_out
        return ret;
  }
  
+ /*
+  * Recover data with bit-wise majority
+  */
+ static void nand_bit_wise_majority(const void **srcbufs,
+                                  unsigned int nsrcbufs,
+                                  void *dstbuf,
+                                  unsigned int bufsize)
+ {
+       int i, j, k;
+       for (i = 0; i < bufsize; i++) {
+               u8 val = 0;
+               for (j = 0; j < 8; j++) {
+                       unsigned int cnt = 0;
+                       for (k = 0; k < nsrcbufs; k++) {
+                               const u8 *srcbuf = srcbufs[k];
+                               if (srcbuf[i] & BIT(j))
+                                       cnt++;
+                       }
+                       if (cnt > nsrcbufs / 2)
+                               val |= BIT(j);
+               }
+               ((u8 *)dstbuf)[i] = val;
+       }
+ }
  /*
   * Check if the NAND chip is ONFI compliant, returns 1 if it is, 0 otherwise.
   */
@@@ -5107,7 -5124,7 +5129,7 @@@ static int nand_flash_detect_onfi(struc
                return 0;
  
        /* ONFI chip: allocate a buffer to hold its parameter page */
-       p = kzalloc(sizeof(*p), GFP_KERNEL);
+       p = kzalloc((sizeof(*p) * 3), GFP_KERNEL);
        if (!p)
                return -ENOMEM;
  
        }
  
        for (i = 0; i < 3; i++) {
-               ret = nand_read_data_op(chip, p, sizeof(*p), true);
+               ret = nand_read_data_op(chip, &p[i], sizeof(*p), true);
                if (ret) {
                        ret = 0;
                        goto free_onfi_param_page;
                }
  
-               if (onfi_crc16(ONFI_CRC_BASE, (uint8_t *)p, 254) ==
+               if (onfi_crc16(ONFI_CRC_BASE, (u8 *)&p[i], 254) ==
                                le16_to_cpu(p->crc)) {
+                       if (i)
+                               memcpy(p, &p[i], sizeof(*p));
                        break;
                }
        }
  
        if (i == 3) {
-               pr_err("Could not find valid ONFI parameter page; aborting\n");
-               goto free_onfi_param_page;
+               const void *srcbufs[3] = {p, p + 1, p + 2};
+               pr_warn("Could not find a valid ONFI parameter page, trying bit-wise majority to recover it\n");
+               nand_bit_wise_majority(srcbufs, ARRAY_SIZE(srcbufs), p,
+                                      sizeof(*p));
+               if (onfi_crc16(ONFI_CRC_BASE, (u8 *)p, 254) !=
+                               le16_to_cpu(p->crc)) {
+                       pr_err("ONFI parameter recovery failed, aborting\n");
+                       goto free_onfi_param_page;
+               }
        }
  
        /* Check version */
@@@ -6635,24 -6663,26 +6668,26 @@@ EXPORT_SYMBOL(nand_scan_tail)
  #endif
  
  /**
-  * nand_scan - [NAND Interface] Scan for the NAND device
+  * nand_scan_with_ids - [NAND Interface] Scan for the NAND device
   * @mtd: MTD device structure
   * @maxchips: number of chips to scan for
+  * @ids: optional flash IDs table
   *
   * This fills out all the uninitialized function pointers with the defaults.
   * The flash ID is read and the mtd/chip structures are filled with the
   * appropriate values.
   */
- int nand_scan(struct mtd_info *mtd, int maxchips)
+ int nand_scan_with_ids(struct mtd_info *mtd, int maxchips,
+                      struct nand_flash_dev *ids)
  {
        int ret;
  
-       ret = nand_scan_ident(mtd, maxchips, NULL);
+       ret = nand_scan_ident(mtd, maxchips, ids);
        if (!ret)
                ret = nand_scan_tail(mtd);
        return ret;
  }
- EXPORT_SYMBOL(nand_scan);
+ EXPORT_SYMBOL(nand_scan_with_ids);
  
  /**
   * nand_cleanup - [NAND Interface] Free resources held by the NAND device
index 5872f31eaa60f91dae62bc1690e78aa97ca5c2a8,2f3a4d4232b3e275a2ad84179e8ab15cd1ed2f23..c3f7aaa5d18f7de068f797b84b05b31be4248897
@@@ -18,6 -18,8 +18,8 @@@
  #include <linux/clk.h>
  #include <linux/completion.h>
  #include <linux/delay.h>
+ #include <linux/dma-mapping.h>
+ #include <linux/dmaengine.h>
  #include <linux/err.h>
  #include <linux/errno.h>
  #include <linux/interrupt.h>
@@@ -73,6 -75,10 +75,10 @@@ struct cqspi_st 
        struct completion       transfer_complete;
        struct mutex            bus_mutex;
  
+       struct dma_chan         *rx_chan;
+       struct completion       rx_dma_complete;
+       dma_addr_t              mmap_phys_base;
        int                     current_cs;
        int                     current_page_size;
        int                     current_erase_size;
@@@ -501,9 -507,7 +507,9 @@@ static int cqspi_indirect_read_execute(
        void __iomem *reg_base = cqspi->iobase;
        void __iomem *ahb_base = cqspi->ahb_base;
        unsigned int remaining = n_rx;
 +      unsigned int mod_bytes = n_rx % 4;
        unsigned int bytes_to_read = 0;
 +      u8 *rxbuf_end = rxbuf + n_rx;
        int ret = 0;
  
        writel(from_addr, reg_base + CQSPI_REG_INDIRECTRDSTARTADDR);
                }
  
                while (bytes_to_read != 0) {
 +                      unsigned int word_remain = round_down(remaining, 4);
 +
                        bytes_to_read *= cqspi->fifo_width;
                        bytes_to_read = bytes_to_read > remaining ?
                                        remaining : bytes_to_read;
 -                      ioread32_rep(ahb_base, rxbuf,
 -                                   DIV_ROUND_UP(bytes_to_read, 4));
 +                      bytes_to_read = round_down(bytes_to_read, 4);
 +                      /* Read 4 byte word chunks then single bytes */
 +                      if (bytes_to_read) {
 +                              ioread32_rep(ahb_base, rxbuf,
 +                                           (bytes_to_read / 4));
 +                      } else if (!word_remain && mod_bytes) {
 +                              unsigned int temp = ioread32(ahb_base);
 +
 +                              bytes_to_read = mod_bytes;
 +                              memcpy(rxbuf, &temp, min((unsigned int)
 +                                                       (rxbuf_end - rxbuf),
 +                                                       bytes_to_read));
 +                      }
                        rxbuf += bytes_to_read;
                        remaining -= bytes_to_read;
                        bytes_to_read = cqspi_get_rd_sram_level(cqspi);
@@@ -930,11 -921,75 +936,75 @@@ static ssize_t cqspi_write(struct spi_n
        return len;
  }
  
+ static void cqspi_rx_dma_callback(void *param)
+ {
+       struct cqspi_st *cqspi = param;
+       complete(&cqspi->rx_dma_complete);
+ }
+ static int cqspi_direct_read_execute(struct spi_nor *nor, u_char *buf,
+                                    loff_t from, size_t len)
+ {
+       struct cqspi_flash_pdata *f_pdata = nor->priv;
+       struct cqspi_st *cqspi = f_pdata->cqspi;
+       enum dma_ctrl_flags flags = DMA_CTRL_ACK | DMA_PREP_INTERRUPT;
+       dma_addr_t dma_src = (dma_addr_t)cqspi->mmap_phys_base + from;
+       int ret = 0;
+       struct dma_async_tx_descriptor *tx;
+       dma_cookie_t cookie;
+       dma_addr_t dma_dst;
+       if (!cqspi->rx_chan || !virt_addr_valid(buf)) {
+               memcpy_fromio(buf, cqspi->ahb_base + from, len);
+               return 0;
+       }
+       dma_dst = dma_map_single(nor->dev, buf, len, DMA_DEV_TO_MEM);
+       if (dma_mapping_error(nor->dev, dma_dst)) {
+               dev_err(nor->dev, "dma mapping failed\n");
+               return -ENOMEM;
+       }
+       tx = dmaengine_prep_dma_memcpy(cqspi->rx_chan, dma_dst, dma_src,
+                                      len, flags);
+       if (!tx) {
+               dev_err(nor->dev, "device_prep_dma_memcpy error\n");
+               ret = -EIO;
+               goto err_unmap;
+       }
+       tx->callback = cqspi_rx_dma_callback;
+       tx->callback_param = cqspi;
+       cookie = tx->tx_submit(tx);
+       reinit_completion(&cqspi->rx_dma_complete);
+       ret = dma_submit_error(cookie);
+       if (ret) {
+               dev_err(nor->dev, "dma_submit_error %d\n", cookie);
+               ret = -EIO;
+               goto err_unmap;
+       }
+       dma_async_issue_pending(cqspi->rx_chan);
+       ret = wait_for_completion_timeout(&cqspi->rx_dma_complete,
+                                         msecs_to_jiffies(len));
+       if (ret <= 0) {
+               dmaengine_terminate_sync(cqspi->rx_chan);
+               dev_err(nor->dev, "DMA wait_for_completion_timeout\n");
+               ret = -ETIMEDOUT;
+               goto err_unmap;
+       }
+ err_unmap:
+       dma_unmap_single(nor->dev, dma_dst, len, DMA_DEV_TO_MEM);
+       return 0;
+ }
  static ssize_t cqspi_read(struct spi_nor *nor, loff_t from,
                          size_t len, u_char *buf)
  {
        struct cqspi_flash_pdata *f_pdata = nor->priv;
-       struct cqspi_st *cqspi = f_pdata->cqspi;
        int ret;
  
        ret = cqspi_set_protocol(nor, 1);
                return ret;
  
        if (f_pdata->use_direct_mode)
-               memcpy_fromio(buf, cqspi->ahb_base + from, len);
+               ret = cqspi_direct_read_execute(nor, buf, from, len);
        else
                ret = cqspi_indirect_read_execute(nor, buf, from, len);
        if (ret)
@@@ -1115,6 -1170,21 +1185,21 @@@ static void cqspi_controller_init(struc
        cqspi_controller_enable(cqspi, 1);
  }
  
+ static void cqspi_request_mmap_dma(struct cqspi_st *cqspi)
+ {
+       dma_cap_mask_t mask;
+       dma_cap_zero(mask);
+       dma_cap_set(DMA_MEMCPY, mask);
+       cqspi->rx_chan = dma_request_chan_by_mask(&mask);
+       if (IS_ERR(cqspi->rx_chan)) {
+               dev_err(&cqspi->pdev->dev, "No Rx DMA available\n");
+               cqspi->rx_chan = NULL;
+       }
+       init_completion(&cqspi->rx_dma_complete);
+ }
  static int cqspi_setup_flash(struct cqspi_st *cqspi, struct device_node *np)
  {
        const struct spi_nor_hwcaps hwcaps = {
                        f_pdata->use_direct_mode = true;
                        dev_dbg(nor->dev, "using direct mode for %s\n",
                                mtd->name);
+                       if (!cqspi->rx_chan)
+                               cqspi_request_mmap_dma(cqspi);
                }
        }
  
@@@ -1252,6 -1325,7 +1340,7 @@@ static int cqspi_probe(struct platform_
                dev_err(dev, "Cannot remap AHB address.\n");
                return PTR_ERR(cqspi->ahb_base);
        }
+       cqspi->mmap_phys_base = (dma_addr_t)res_ahb->start;
        cqspi->ahb_size = resource_size(res_ahb);
  
        init_completion(&cqspi->transfer_complete);
@@@ -1322,6 -1396,9 +1411,9 @@@ static int cqspi_remove(struct platform
  
        cqspi_controller_enable(cqspi, 0);
  
+       if (cqspi->rx_chan)
+               dma_release_channel(cqspi->rx_chan);
        clk_disable_unprepare(cqspi->clk);
  
        pm_runtime_put_sync(&pdev->dev);
index 17c919436f48726450069ca1e589ccd3fc48e712,a206172ec23b6f3ebc34e54e23f2cb75fcd9e241..3e8ec3b8a39c7ce39ac563ad157d3f9563c24d86
@@@ -28,7 -28,14 +28,14 @@@ struct nand_flash_dev
  struct device_node;
  
  /* Scan and identify a NAND device */
- int nand_scan(struct mtd_info *mtd, int max_chips);
+ int nand_scan_with_ids(struct mtd_info *mtd, int max_chips,
+                      struct nand_flash_dev *ids);
+ static inline int nand_scan(struct mtd_info *mtd, int max_chips)
+ {
+       return nand_scan_with_ids(mtd, max_chips, NULL);
+ }
  /*
   * Separate phases of nand_scan(), allowing board driver to intervene
   * and override command or ECC setup according to flash type.
@@@ -740,8 -747,9 +747,9 @@@ enum nand_data_interface_type 
  
  /**
   * struct nand_data_interface - NAND interface timing
-  * @type:     type of the timing
-  * @timings:  The timing, type according to @type
+  * @type:      type of the timing
+  * @timings:   The timing, type according to @type
+  * @timings.sdr: Use it when @type is %NAND_SDR_IFACE.
   */
  struct nand_data_interface {
        enum nand_data_interface_type type;
@@@ -798,8 -806,9 +806,9 @@@ struct nand_op_addr_instr 
  /**
   * struct nand_op_data_instr - Definition of a data instruction
   * @len: number of data bytes to move
-  * @in: buffer to fill when reading from the NAND chip
-  * @out: buffer to read from when writing to the NAND chip
+  * @buf: buffer to fill
+  * @buf.in: buffer to fill when reading from the NAND chip
+  * @buf.out: buffer to read from when writing to the NAND chip
   * @force_8bit: force 8-bit access
   *
   * Please note that "in" and "out" are inverted from the ONFI specification
@@@ -842,9 -851,13 +851,13 @@@ enum nand_op_instr_type 
  /**
   * struct nand_op_instr - Instruction object
   * @type: the instruction type
-  * @cmd/@addr/@data/@waitrdy: extra data associated to the instruction.
-  *                            You'll have to use the appropriate element
-  *                            depending on @type
+  * @ctx:  extra data associated to the instruction. You'll have to use the
+  *        appropriate element depending on @type
+  * @ctx.cmd: use it if @type is %NAND_OP_CMD_INSTR
+  * @ctx.addr: use it if @type is %NAND_OP_ADDR_INSTR
+  * @ctx.data: use it if @type is %NAND_OP_DATA_IN_INSTR
+  *          or %NAND_OP_DATA_OUT_INSTR
+  * @ctx.waitrdy: use it if @type is %NAND_OP_WAITRDY_INSTR
   * @delay_ns: delay the controller should apply after the instruction has been
   *          issued on the bus. Most modern controllers have internal timings
   *          control logic, and in this case, the controller driver can ignore
@@@ -867,18 -880,12 +880,18 @@@ struct nand_op_instr 
   * tBERS (during an erase) which all of them are u64 values that cannot be
   * divided by usual kernel macros and must be handled with the special
   * DIV_ROUND_UP_ULL() macro.
 - */
 -#define __DIVIDE(dividend, divisor) ({                                        \
 -      sizeof(dividend) == sizeof(u32) ?                               \
 -              DIV_ROUND_UP(dividend, divisor) :                       \
 -              DIV_ROUND_UP_ULL(dividend, divisor);                    \
 -              })
 + *
 + * Cast to type of dividend is needed here to guarantee that the result won't
 + * be an unsigned long long when the dividend is an unsigned long (or smaller),
 + * which is what the compiler does when it sees ternary operator with 2
 + * different return types (picks the largest type to make sure there's no
 + * loss).
 + */
 +#define __DIVIDE(dividend, divisor) ({                                                \
 +      (__typeof__(dividend))(sizeof(dividend) <= sizeof(unsigned long) ?      \
 +                             DIV_ROUND_UP(dividend, divisor) :                \
 +                             DIV_ROUND_UP_ULL(dividend, divisor));            \
 +      })
  #define PSEC_TO_NSEC(x) __DIVIDE(x, 1000)
  #define PSEC_TO_MSEC(x) __DIVIDE(x, 1000000000)
  
@@@ -1003,7 -1010,9 +1016,9 @@@ struct nand_op_parser_data_constraints 
   * struct nand_op_parser_pattern_elem - One element of a pattern
   * @type: the instructuction type
   * @optional: whether this element of the pattern is optional or mandatory
-  * @addr/@data: address or data constraint (number of cycles or data length)
+  * @ctx: address or data constraint
+  * @ctx.addr: address constraint (number of cycles)
+  * @ctx.data: data constraint (data length)
   */
  struct nand_op_parser_pattern_elem {
        enum nand_op_instr_type type;
@@@ -1230,6 -1239,8 +1245,8 @@@ int nand_op_parser_exec_op(struct nand_
   *                    devices.
   * @priv:             [OPTIONAL] pointer to private chip data
   * @manufacturer:     [INTERN] Contains manufacturer information
+  * @manufacturer.desc:        [INTERN] Contains manufacturer's description
+  * @manufacturer.priv:        [INTERN] Contains manufacturer private information
   */
  
  struct nand_chip {