diff -urN linux-5.15/MAINTAINERS linux-5.15-lrng/MAINTAINERS --- linux-5.15/MAINTAINERS 2021-11-01 07:53:10.000000000 +1100 +++ linux-5.15-lrng/MAINTAINERS 2021-11-29 12:36:52.113279174 +1100 @@ -10830,6 +10830,13 @@ F: Documentation/memory-barriers.txt F: tools/memory-model/ +LINUX RANDOM NUMBER GENERATOR (LRNG) DRIVER +M: Stephan Mueller +S: Maintained +W: https://www.chronox.de/lrng.html +F: drivers/char/lrng/* +F: include/linux/lrng.h + LIS3LV02D ACCELEROMETER DRIVER M: Eric Piel S: Maintained diff -urN linux-5.15/MAINTAINERS.orig linux-5.15-lrng/MAINTAINERS.orig --- linux-5.15/MAINTAINERS.orig 1970-01-01 10:00:00.000000000 +1000 +++ linux-5.15-lrng/MAINTAINERS.orig 2021-11-29 12:32:21.653280206 +1100 @@ -0,0 +1,20816 @@ +List of maintainers and how to submit kernel changes +==================================================== + +Please try to follow the guidelines below. This will make things +easier on the maintainers. Not all of these guidelines matter for every +trivial patch so apply some common sense. + +Tips for patch submitters +------------------------- + +1. Always *test* your changes, however small, on at least 4 or + 5 people, preferably many more. + +2. Try to release a few ALPHA test versions to the net. Announce + them onto the kernel channel and await results. This is especially + important for device drivers, because often that's the only way + you will find things like the fact version 3 firmware needs + a magic fix you didn't know about, or some clown changed the + chips on a board and not its name. (Don't laugh! Look at the + SMC etherpower for that.) + +3. Make sure your changes compile correctly in multiple + configurations. In particular check that changes work both as a + module and built into the kernel. + +4. When you are happy with a change make it generally available for + testing and await feedback. + +5. Make a patch available to the relevant maintainer in the list. Use + ``diff -u`` to make the patch easy to merge. Be prepared to get your + changes sent back with seemingly silly requests about formatting + and variable names. These aren't as silly as they seem. One + job the maintainers (and especially Linus) do is to keep things + looking the same. Sometimes this means that the clever hack in + your driver to get around a problem actually needs to become a + generalized kernel feature ready for next time. + + PLEASE check your patch with the automated style checker + (scripts/checkpatch.pl) to catch trivial style violations. + See Documentation/process/coding-style.rst for guidance here. + + PLEASE CC: the maintainers and mailing lists that are generated + by ``scripts/get_maintainer.pl.`` The results returned by the + script will be best if you have git installed and are making + your changes in a branch derived from Linus' latest git tree. + See Documentation/process/submitting-patches.rst for details. + + PLEASE try to include any credit lines you want added with the + patch. It avoids people being missed off by mistake and makes + it easier to know who wants adding and who doesn't. + + PLEASE document known bugs. If it doesn't work for everything + or does something very odd once a month document it. + + PLEASE remember that submissions must be made under the terms + of the Linux Foundation certificate of contribution and should + include a Signed-off-by: line. The current version of this + "Developer's Certificate of Origin" (DCO) is listed in the file + Documentation/process/submitting-patches.rst. + +6. Make sure you have the right to send any changes you make. If you + do changes at work you may find your employer owns the patch + not you. + +7. When sending security related changes or reports to a maintainer + please Cc: security@kernel.org, especially if the maintainer + does not respond. Please keep in mind that the security team is + a small set of people who can be efficient only when working on + verified bugs. Please only Cc: this list when you have identified + that the bug would present a short-term risk to other users if it + were publicly disclosed. For example, reports of address leaks do + not represent an immediate threat and are better handled publicly, + and ideally, should come with a patch proposal. Please do not send + automated reports to this list either. Such bugs will be handled + better and faster in the usual public places. See + Documentation/admin-guide/security-bugs.rst for details. + +8. Happy hacking. + +Descriptions of section entries and preferred order +--------------------------------------------------- + + M: *Mail* patches to: FullName + R: Designated *Reviewer*: FullName + These reviewers should be CCed on patches. + L: *Mailing list* that is relevant to this area + S: *Status*, one of the following: + Supported: Someone is actually paid to look after this. + Maintained: Someone actually looks after it. + Odd Fixes: It has a maintainer but they don't have time to do + much other than throw the odd patch in. See below.. + Orphan: No current maintainer [but maybe you could take the + role as you write your new code]. + Obsolete: Old code. Something tagged obsolete generally means + it has been replaced by a better system and you + should be using that. + W: *Web-page* with status/info + Q: *Patchwork* web based patch tracking system site + B: URI for where to file *bugs*. A web-page with detailed bug + filing info, a direct bug tracker link, or a mailto: URI. + C: URI for *chat* protocol, server and channel where developers + usually hang out, for example irc://server/channel. + P: Subsystem Profile document for more details submitting + patches to the given subsystem. This is either an in-tree file, + or a URI. See Documentation/maintainer/maintainer-entry-profile.rst + for details. + T: *SCM* tree type and location. + Type is one of: git, hg, quilt, stgit, topgit + F: *Files* and directories wildcard patterns. + A trailing slash includes all files and subdirectory files. + F: drivers/net/ all files in and below drivers/net + F: drivers/net/* all files in drivers/net, but not below + F: */net/* all files in "any top level directory"/net + One pattern per line. Multiple F: lines acceptable. + X: *Excluded* files and directories that are NOT maintained, same + rules as F:. Files exclusions are tested before file matches. + Can be useful for excluding a specific subdirectory, for instance: + F: net/ + X: net/ipv6/ + matches all files in and below net excluding net/ipv6/ + N: Files and directories *Regex* patterns. + N: [^a-z]tegra all files whose path contains tegra + (not including files like integrator) + One pattern per line. Multiple N: lines acceptable. + scripts/get_maintainer.pl has different behavior for files that + match F: pattern and matches of N: patterns. By default, + get_maintainer will not look at git log history when an F: pattern + match occurs. When an N: match occurs, git log history is used + to also notify the people that have git commit signatures. + K: *Content regex* (perl extended) pattern match in a patch or file. + For instance: + K: of_get_profile + matches patches or files that contain "of_get_profile" + K: \b(printk|pr_(info|err))\b + matches patches or files that contain one or more of the words + printk, pr_info or pr_err + One regex pattern per line. Multiple K: lines acceptable. + +Maintainers List +---------------- + +.. note:: When reading this list, please look for the most precise areas + first. When adding to this list, please keep the entries in + alphabetical order. + +3C59X NETWORK DRIVER +M: Steffen Klassert +L: netdev@vger.kernel.org +S: Odd Fixes +F: Documentation/networking/device_drivers/ethernet/3com/vortex.rst +F: drivers/net/ethernet/3com/3c59x.c + +3CR990 NETWORK DRIVER +M: David Dillow +L: netdev@vger.kernel.org +S: Maintained +F: drivers/net/ethernet/3com/typhoon* + +3WARE SAS/SATA-RAID SCSI DRIVERS (3W-XXXX, 3W-9XXX, 3W-SAS) +M: Adam Radford +L: linux-scsi@vger.kernel.org +S: Supported +W: http://www.lsi.com +F: drivers/scsi/3w-* + +53C700 AND 53C700-66 SCSI DRIVER +M: "James E.J. Bottomley" +L: linux-scsi@vger.kernel.org +S: Maintained +F: drivers/scsi/53c700* + +6LOWPAN GENERIC (BTLE/IEEE 802.15.4) +M: Alexander Aring +M: Jukka Rissanen +L: linux-bluetooth@vger.kernel.org +L: linux-wpan@vger.kernel.org +S: Maintained +F: Documentation/networking/6lowpan.rst +F: include/net/6lowpan.h +F: net/6lowpan/ + +6PACK NETWORK DRIVER FOR AX.25 +M: Andreas Koensgen +L: linux-hams@vger.kernel.org +S: Maintained +F: drivers/net/hamradio/6pack.c + +802.11 (including CFG80211/NL80211) +M: Johannes Berg +L: linux-wireless@vger.kernel.org +S: Maintained +W: https://wireless.wiki.kernel.org/ +T: git git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211.git +T: git git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next.git +F: Documentation/driver-api/80211/cfg80211.rst +F: Documentation/networking/regulatory.rst +F: include/linux/ieee80211.h +F: include/net/cfg80211.h +F: include/net/ieee80211_radiotap.h +F: include/net/iw_handler.h +F: include/net/wext.h +F: include/uapi/linux/nl80211.h +F: net/wireless/ + +8169 10/100/1000 GIGABIT ETHERNET DRIVER +M: Heiner Kallweit +M: nic_swsd@realtek.com +L: netdev@vger.kernel.org +S: Maintained +F: drivers/net/ethernet/realtek/r8169* + +8250/16?50 (AND CLONE UARTS) SERIAL DRIVER +M: Greg Kroah-Hartman +L: linux-serial@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty.git +F: drivers/tty/serial/8250* +F: include/linux/serial_8250.h + +8390 NETWORK DRIVERS [WD80x3/SMC-ELITE, SMC-ULTRA, NE2000, 3C503, etc.] +L: netdev@vger.kernel.org +S: Orphan / Obsolete +F: drivers/net/ethernet/8390/ + +9P FILE SYSTEM +M: Eric Van Hensbergen +M: Latchesar Ionkov +M: Dominique Martinet +L: v9fs-developer@lists.sourceforge.net +S: Maintained +W: http://swik.net/v9fs +Q: http://patchwork.kernel.org/project/v9fs-devel/list/ +T: git git://git.kernel.org/pub/scm/linux/kernel/git/ericvh/v9fs.git +T: git git://github.com/martinetd/linux.git +F: Documentation/filesystems/9p.rst +F: fs/9p/ +F: include/net/9p/ +F: include/trace/events/9p.h +F: include/uapi/linux/virtio_9p.h +F: net/9p/ + +A8293 MEDIA DRIVER +M: Antti Palosaari +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +W: http://palosaari.fi/linux/ +Q: http://patchwork.linuxtv.org/project/linux-media/list/ +T: git git://linuxtv.org/anttip/media_tree.git +F: drivers/media/dvb-frontends/a8293* + +AACRAID SCSI RAID DRIVER +M: Adaptec OEM Raid Solutions +L: linux-scsi@vger.kernel.org +S: Supported +W: http://www.adaptec.com/ +F: Documentation/scsi/aacraid.rst +F: drivers/scsi/aacraid/ + +ABI/API +L: linux-api@vger.kernel.org +F: include/linux/syscalls.h +F: kernel/sys_ni.c +X: include/uapi/ +X: arch/*/include/uapi/ + +ABIT UGURU 1,2 HARDWARE MONITOR DRIVER +M: Hans de Goede +L: linux-hwmon@vger.kernel.org +S: Maintained +F: drivers/hwmon/abituguru.c + +ABIT UGURU 3 HARDWARE MONITOR DRIVER +M: Alistair John Strachan +L: linux-hwmon@vger.kernel.org +S: Maintained +F: drivers/hwmon/abituguru3.c + +ACCES 104-DIO-48E GPIO DRIVER +M: William Breathitt Gray +L: linux-gpio@vger.kernel.org +S: Maintained +F: drivers/gpio/gpio-104-dio-48e.c + +ACCES 104-IDI-48 GPIO DRIVER +M: "William Breathitt Gray" +L: linux-gpio@vger.kernel.org +S: Maintained +F: drivers/gpio/gpio-104-idi-48.c + +ACCES 104-IDIO-16 GPIO DRIVER +M: "William Breathitt Gray" +L: linux-gpio@vger.kernel.org +S: Maintained +F: drivers/gpio/gpio-104-idio-16.c + +ACCES 104-QUAD-8 DRIVER +M: William Breathitt Gray +M: Syed Nayyar Waris +L: linux-iio@vger.kernel.org +S: Maintained +F: drivers/counter/104-quad-8.c + +ACCES PCI-IDIO-16 GPIO DRIVER +M: William Breathitt Gray +L: linux-gpio@vger.kernel.org +S: Maintained +F: drivers/gpio/gpio-pci-idio-16.c + +ACCES PCIe-IDIO-24 GPIO DRIVER +M: William Breathitt Gray +L: linux-gpio@vger.kernel.org +S: Maintained +F: drivers/gpio/gpio-pcie-idio-24.c + +ACENIC DRIVER +M: Jes Sorensen +L: linux-acenic@sunsite.dk +S: Maintained +F: drivers/net/ethernet/alteon/acenic* + +ACER ASPIRE ONE TEMPERATURE AND FAN DRIVER +M: Peter Kaestle +L: platform-driver-x86@vger.kernel.org +S: Maintained +W: http://piie.net/?section=acerhdf +F: drivers/platform/x86/acerhdf.c + +ACER WMI LAPTOP EXTRAS +M: "Lee, Chun-Yi" +L: platform-driver-x86@vger.kernel.org +S: Maintained +F: drivers/platform/x86/acer-wmi.c + +ACPI +M: "Rafael J. Wysocki" +M: Len Brown +L: linux-acpi@vger.kernel.org +S: Supported +W: https://01.org/linux-acpi +Q: https://patchwork.kernel.org/project/linux-acpi/list/ +B: https://bugzilla.kernel.org +T: git git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm +F: Documentation/ABI/testing/configfs-acpi +F: Documentation/ABI/testing/sysfs-bus-acpi +F: Documentation/firmware-guide/acpi/ +F: drivers/acpi/ +F: drivers/pci/*/*acpi* +F: drivers/pci/*acpi* +F: drivers/pnp/pnpacpi/ +F: include/acpi/ +F: include/linux/acpi.h +F: include/linux/fwnode.h +F: tools/power/acpi/ + +ACPI APEI +M: "Rafael J. Wysocki" +M: Len Brown +R: James Morse +R: Tony Luck +R: Borislav Petkov +L: linux-acpi@vger.kernel.org +F: drivers/acpi/apei/ + +ACPI COMPONENT ARCHITECTURE (ACPICA) +M: Robert Moore +M: "Rafael J. Wysocki" +L: linux-acpi@vger.kernel.org +L: devel@acpica.org +S: Supported +W: https://acpica.org/ +W: https://github.com/acpica/acpica/ +Q: https://patchwork.kernel.org/project/linux-acpi/list/ +B: https://bugzilla.kernel.org +B: https://bugs.acpica.org +T: git git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm +F: drivers/acpi/acpica/ +F: include/acpi/ +F: tools/power/acpi/ + +ACPI FAN DRIVER +M: Zhang Rui +L: linux-acpi@vger.kernel.org +S: Supported +W: https://01.org/linux-acpi +B: https://bugzilla.kernel.org +F: drivers/acpi/fan.c + +ACPI FOR ARM64 (ACPI/arm64) +M: Lorenzo Pieralisi +M: Hanjun Guo +M: Sudeep Holla +L: linux-acpi@vger.kernel.org +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +F: drivers/acpi/arm64 + +ACPI I2C MULTI INSTANTIATE DRIVER +M: Hans de Goede +L: platform-driver-x86@vger.kernel.org +S: Maintained +F: drivers/platform/x86/i2c-multi-instantiate.c + +ACPI PMIC DRIVERS +M: "Rafael J. Wysocki" +M: Len Brown +R: Andy Shevchenko +R: Mika Westerberg +L: linux-acpi@vger.kernel.org +S: Supported +Q: https://patchwork.kernel.org/project/linux-acpi/list/ +B: https://bugzilla.kernel.org +T: git git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm +F: drivers/acpi/pmic/ + +ACPI THERMAL DRIVER +M: Rafael J. Wysocki +R: Zhang Rui +L: linux-acpi@vger.kernel.org +S: Supported +W: https://01.org/linux-acpi +B: https://bugzilla.kernel.org +F: drivers/acpi/*thermal* + +ACPI VIDEO DRIVER +M: Zhang Rui +L: linux-acpi@vger.kernel.org +S: Supported +W: https://01.org/linux-acpi +B: https://bugzilla.kernel.org +F: drivers/acpi/acpi_video.c + +ACPI VIOT DRIVER +M: Jean-Philippe Brucker +L: linux-acpi@vger.kernel.org +L: iommu@lists.linux-foundation.org +S: Maintained +F: drivers/acpi/viot.c +F: include/linux/acpi_viot.h + +ACPI WMI DRIVER +L: platform-driver-x86@vger.kernel.org +S: Orphan +F: drivers/platform/x86/wmi.c +F: include/uapi/linux/wmi.h + +ACRN HYPERVISOR SERVICE MODULE +M: Fei Li +L: acrn-dev@lists.projectacrn.org (subscribers-only) +S: Supported +W: https://projectacrn.org +F: Documentation/virt/acrn/ +F: drivers/virt/acrn/ +F: include/uapi/linux/acrn.h + +AD1889 ALSA SOUND DRIVER +L: linux-parisc@vger.kernel.org +S: Maintained +W: https://parisc.wiki.kernel.org/index.php/AD1889 +F: sound/pci/ad1889.* + +AD5110 ANALOG DEVICES DIGITAL POTENTIOMETERS DRIVER +M: Mugilraj Dhavachelvan +L: linux-iio@vger.kernel.org +S: Supported +F: drivers/iio/potentiometer/ad5110.c + +AD525X ANALOG DEVICES DIGITAL POTENTIOMETERS DRIVER +M: Michael Hennerich +S: Supported +W: http://wiki.analog.com/AD5254 +W: http://ez.analog.com/community/linux-device-drivers +F: drivers/misc/ad525x_dpot.c + +AD5398 CURRENT REGULATOR DRIVER (AD5398/AD5821) +M: Michael Hennerich +S: Supported +W: http://wiki.analog.com/AD5398 +W: http://ez.analog.com/community/linux-device-drivers +F: drivers/regulator/ad5398.c + +AD714X CAPACITANCE TOUCH SENSOR DRIVER (AD7142/3/7/8/7A) +M: Michael Hennerich +S: Supported +W: http://wiki.analog.com/AD7142 +W: http://ez.analog.com/community/linux-device-drivers +F: drivers/input/misc/ad714x.c + +AD7877 TOUCHSCREEN DRIVER +M: Michael Hennerich +S: Supported +W: http://wiki.analog.com/AD7877 +W: http://ez.analog.com/community/linux-device-drivers +F: drivers/input/touchscreen/ad7877.c + +AD7879 TOUCHSCREEN DRIVER (AD7879/AD7889) +M: Michael Hennerich +S: Supported +W: http://wiki.analog.com/AD7879 +W: http://ez.analog.com/community/linux-device-drivers +F: drivers/input/touchscreen/ad7879.c + +ADDRESS SPACE LAYOUT RANDOMIZATION (ASLR) +M: Jiri Kosina +S: Maintained + +ADF7242 IEEE 802.15.4 RADIO DRIVER +M: Michael Hennerich +L: linux-wpan@vger.kernel.org +S: Supported +W: https://wiki.analog.com/ADF7242 +W: http://ez.analog.com/community/linux-device-drivers +F: Documentation/devicetree/bindings/net/ieee802154/adf7242.txt +F: drivers/net/ieee802154/adf7242.c + +ADM1025 HARDWARE MONITOR DRIVER +M: Jean Delvare +L: linux-hwmon@vger.kernel.org +S: Maintained +F: Documentation/hwmon/adm1025.rst +F: drivers/hwmon/adm1025.c + +ADM1029 HARDWARE MONITOR DRIVER +M: Corentin Labbe +L: linux-hwmon@vger.kernel.org +S: Maintained +F: drivers/hwmon/adm1029.c + +ADM8211 WIRELESS DRIVER +L: linux-wireless@vger.kernel.org +S: Orphan +W: https://wireless.wiki.kernel.org/ +F: drivers/net/wireless/admtek/adm8211.* + +ADP1653 FLASH CONTROLLER DRIVER +M: Sakari Ailus +L: linux-media@vger.kernel.org +S: Maintained +F: drivers/media/i2c/adp1653.c +F: include/media/i2c/adp1653.h + +ADP5520 BACKLIGHT DRIVER WITH IO EXPANDER (ADP5520/ADP5501) +M: Michael Hennerich +S: Supported +W: http://wiki.analog.com/ADP5520 +W: http://ez.analog.com/community/linux-device-drivers +F: drivers/gpio/gpio-adp5520.c +F: drivers/input/keyboard/adp5520-keys.c +F: drivers/leds/leds-adp5520.c +F: drivers/mfd/adp5520.c +F: drivers/video/backlight/adp5520_bl.c + +ADP5588 QWERTY KEYPAD AND IO EXPANDER DRIVER (ADP5588/ADP5587) +M: Michael Hennerich +S: Supported +W: http://wiki.analog.com/ADP5588 +W: http://ez.analog.com/community/linux-device-drivers +F: drivers/gpio/gpio-adp5588.c +F: drivers/input/keyboard/adp5588-keys.c + +ADP8860 BACKLIGHT DRIVER (ADP8860/ADP8861/ADP8863) +M: Michael Hennerich +S: Supported +W: http://wiki.analog.com/ADP8860 +W: http://ez.analog.com/community/linux-device-drivers +F: drivers/video/backlight/adp8860_bl.c + +ADT746X FAN DRIVER +M: Colin Leroy +S: Maintained +F: drivers/macintosh/therm_adt746x.c + +ADT7475 HARDWARE MONITOR DRIVER +M: Jean Delvare +L: linux-hwmon@vger.kernel.org +S: Maintained +F: Documentation/hwmon/adt7475.rst +F: drivers/hwmon/adt7475.c + +ADVANSYS SCSI DRIVER +M: Matthew Wilcox +M: Hannes Reinecke +L: linux-scsi@vger.kernel.org +S: Maintained +F: Documentation/scsi/advansys.rst +F: drivers/scsi/advansys.c + +ADVANTECH SWBTN DRIVER +M: Andrea Ho +L: platform-driver-x86@vger.kernel.org +S: Maintained +F: drivers/platform/x86/adv_swbutton.c + +ADXL34X THREE-AXIS DIGITAL ACCELEROMETER DRIVER (ADXL345/ADXL346) +M: Michael Hennerich +S: Supported +W: http://wiki.analog.com/ADXL345 +W: http://ez.analog.com/community/linux-device-drivers +F: Documentation/devicetree/bindings/iio/accel/adi,adxl345.yaml +F: drivers/input/misc/adxl34x.c + +ADXL372 THREE-AXIS DIGITAL ACCELEROMETER DRIVER +M: Michael Hennerich +S: Supported +W: http://ez.analog.com/community/linux-device-drivers +F: Documentation/devicetree/bindings/iio/accel/adi,adxl372.yaml +F: drivers/iio/accel/adxl372.c +F: drivers/iio/accel/adxl372_i2c.c +F: drivers/iio/accel/adxl372_spi.c + +AF9013 MEDIA DRIVER +M: Antti Palosaari +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +W: http://palosaari.fi/linux/ +Q: http://patchwork.linuxtv.org/project/linux-media/list/ +T: git git://linuxtv.org/anttip/media_tree.git +F: drivers/media/dvb-frontends/af9013* + +AF9033 MEDIA DRIVER +M: Antti Palosaari +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +W: http://palosaari.fi/linux/ +Q: http://patchwork.linuxtv.org/project/linux-media/list/ +T: git git://linuxtv.org/anttip/media_tree.git +F: drivers/media/dvb-frontends/af9033* + +AFFS FILE SYSTEM +M: David Sterba +L: linux-fsdevel@vger.kernel.org +S: Odd Fixes +F: Documentation/filesystems/affs.rst +F: fs/affs/ + +AFS FILESYSTEM +M: David Howells +M: Marc Dionne +L: linux-afs@lists.infradead.org +S: Supported +W: https://www.infradead.org/~dhowells/kafs/ +F: Documentation/filesystems/afs.rst +F: fs/afs/ +F: include/trace/events/afs.h + +AGPGART DRIVER +M: David Airlie +S: Maintained +T: git git://anongit.freedesktop.org/drm/drm +F: drivers/char/agp/ +F: include/linux/agp* +F: include/uapi/linux/agp* + +AHA152X SCSI DRIVER +M: "Juergen E. Fischer" +L: linux-scsi@vger.kernel.org +S: Maintained +F: drivers/scsi/aha152x* +F: drivers/scsi/pcmcia/aha152x* + +AIC7XXX / AIC79XX SCSI DRIVER +M: Hannes Reinecke +L: linux-scsi@vger.kernel.org +S: Maintained +F: drivers/scsi/aic7xxx/ + +AIMSLAB FM RADIO RECEIVER DRIVER +M: Hans Verkuil +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +T: git git://linuxtv.org/media_tree.git +F: drivers/media/radio/radio-aimslab* + +AIO +M: Benjamin LaHaise +L: linux-aio@kvack.org +S: Supported +F: fs/aio.c +F: include/linux/*aio*.h + +AIRSPY MEDIA DRIVER +M: Antti Palosaari +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +W: http://palosaari.fi/linux/ +Q: http://patchwork.linuxtv.org/project/linux-media/list/ +T: git git://linuxtv.org/anttip/media_tree.git +F: drivers/media/usb/airspy/ + +ALACRITECH GIGABIT ETHERNET DRIVER +M: Lino Sanfilippo +S: Maintained +F: drivers/net/ethernet/alacritech/* + +ALCATEL SPEEDTOUCH USB DRIVER +M: Duncan Sands +L: linux-usb@vger.kernel.org +S: Maintained +W: http://www.linux-usb.org/SpeedTouch/ +F: drivers/usb/atm/speedtch.c +F: drivers/usb/atm/usbatm.c + +ALCHEMY AU1XX0 MMC DRIVER +M: Manuel Lauss +S: Maintained +F: drivers/mmc/host/au1xmmc.c + +ALI1563 I2C DRIVER +M: Rudolf Marek +L: linux-i2c@vger.kernel.org +S: Maintained +F: Documentation/i2c/busses/i2c-ali1563.rst +F: drivers/i2c/busses/i2c-ali1563.c + +ALIENWARE WMI DRIVER +L: Dell.Client.Kernel@dell.com +S: Maintained +F: drivers/platform/x86/dell/alienware-wmi.c + +ALL SENSORS DLH SERIES PRESSURE SENSORS DRIVER +M: Tomislav Denis +L: linux-iio@vger.kernel.org +S: Maintained +W: http://www.allsensors.com/ +F: Documentation/devicetree/bindings/iio/pressure/asc,dlhl60d.yaml +F: drivers/iio/pressure/dlhl60d.c + +ALLEGRO DVT VIDEO IP CORE DRIVER +M: Michael Tretter +R: Pengutronix Kernel Team +L: linux-media@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/media/allegro,al5e.yaml +F: drivers/media/platform/allegro-dvt/ + +ALLWINNER A10 CSI DRIVER +M: Maxime Ripard +L: linux-media@vger.kernel.org +S: Maintained +T: git git://linuxtv.org/media_tree.git +F: Documentation/devicetree/bindings/media/allwinner,sun4i-a10-csi.yaml +F: drivers/media/platform/sunxi/sun4i-csi/ + +ALLWINNER CPUFREQ DRIVER +M: Yangtao Li +L: linux-pm@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/opp/allwinner,sun50i-h6-operating-points.yaml +F: drivers/cpufreq/sun50i-cpufreq-nvmem.c + +ALLWINNER CRYPTO DRIVERS +M: Corentin Labbe +L: linux-crypto@vger.kernel.org +S: Maintained +F: drivers/crypto/allwinner/ + +ALLWINNER HARDWARE SPINLOCK SUPPORT +M: Wilken Gottwalt +S: Maintained +F: Documentation/devicetree/bindings/hwlock/allwinner,sun6i-hwspinlock.yaml +F: drivers/hwspinlock/sun6i_hwspinlock.c + +ALLWINNER THERMAL DRIVER +M: Vasily Khoruzhick +M: Yangtao Li +L: linux-pm@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/thermal/allwinner,sun8i-a83t-ths.yaml +F: drivers/thermal/sun8i_thermal.c + +ALLWINNER VPU DRIVER +M: Maxime Ripard +M: Paul Kocialkowski +L: linux-media@vger.kernel.org +S: Maintained +F: drivers/staging/media/sunxi/cedrus/ + +ALPHA PORT +M: Richard Henderson +M: Ivan Kokshaysky +M: Matt Turner +L: linux-alpha@vger.kernel.org +S: Odd Fixes +F: arch/alpha/ + +ALPS PS/2 TOUCHPAD DRIVER +R: Pali Rohár +F: drivers/input/mouse/alps.* + +ALTERA I2C CONTROLLER DRIVER +M: Thor Thayer +S: Maintained +F: Documentation/devicetree/bindings/i2c/i2c-altera.txt +F: drivers/i2c/busses/i2c-altera.c + +ALTERA MAILBOX DRIVER +M: Joyce Ooi +S: Maintained +F: drivers/mailbox/mailbox-altera.c + +ALTERA MSGDMA IP CORE DRIVER +M: Olivier Dautricourt +R: Stefan Roese +L: dmaengine@vger.kernel.org +S: Odd Fixes +F: Documentation/devicetree/bindings/dma/altr,msgdma.yaml +F: drivers/dma/altera-msgdma.c + +ALTERA PIO DRIVER +M: Mun Yew Tham +L: linux-gpio@vger.kernel.org +S: Maintained +F: drivers/gpio/gpio-altera.c + +ALTERA SYSTEM MANAGER DRIVER +M: Thor Thayer +S: Maintained +F: drivers/mfd/altera-sysmgr.c +F: include/linux/mfd/altera-sysmgr.h + +ALTERA SYSTEM RESOURCE DRIVER FOR ARRIA10 DEVKIT +M: Thor Thayer +S: Maintained +F: drivers/gpio/gpio-altera-a10sr.c +F: drivers/mfd/altera-a10sr.c +F: drivers/reset/reset-a10sr.c +F: include/dt-bindings/reset/altr,rst-mgr-a10sr.h +F: include/linux/mfd/altera-a10sr.h + +ALTERA TRIPLE SPEED ETHERNET DRIVER +M: Joyce Ooi +L: netdev@vger.kernel.org +S: Maintained +F: drivers/net/ethernet/altera/ + +ALTERA UART/JTAG UART SERIAL DRIVERS +M: Tobias Klauser +L: linux-serial@vger.kernel.org +S: Maintained +F: drivers/tty/serial/altera_jtaguart.c +F: drivers/tty/serial/altera_uart.c +F: include/linux/altera_jtaguart.h +F: include/linux/altera_uart.h + +AMAZON ANNAPURNA LABS FIC DRIVER +M: Talel Shenhar +S: Maintained +F: Documentation/devicetree/bindings/interrupt-controller/amazon,al-fic.txt +F: drivers/irqchip/irq-al-fic.c + +AMAZON ANNAPURNA LABS MEMORY CONTROLLER EDAC +M: Talel Shenhar +M: Talel Shenhar +S: Maintained +F: Documentation/devicetree/bindings/edac/amazon,al-mc-edac.yaml +F: drivers/edac/al_mc_edac.c + +AMAZON ANNAPURNA LABS THERMAL MMIO DRIVER +M: Talel Shenhar +S: Maintained +F: Documentation/devicetree/bindings/thermal/amazon,al-thermal.txt +F: drivers/thermal/thermal_mmio.c + +AMAZON ETHERNET DRIVERS +M: Netanel Belgazal +M: Arthur Kiyanovski +R: Guy Tzalik +R: Saeed Bishara +L: netdev@vger.kernel.org +S: Supported +F: Documentation/networking/device_drivers/ethernet/amazon/ena.rst +F: drivers/net/ethernet/amazon/ + +AMAZON RDMA EFA DRIVER +M: Gal Pressman +R: Yossi Leybovich +L: linux-rdma@vger.kernel.org +S: Supported +Q: https://patchwork.kernel.org/project/linux-rdma/list/ +F: drivers/infiniband/hw/efa/ +F: include/uapi/rdma/efa-abi.h + +AMD CRYPTOGRAPHIC COPROCESSOR (CCP) DRIVER +M: Tom Lendacky +M: John Allen +L: linux-crypto@vger.kernel.org +S: Supported +F: drivers/crypto/ccp/ +F: include/linux/ccp.h + +AMD CRYPTOGRAPHIC COPROCESSOR (CCP) DRIVER - SEV SUPPORT +M: Brijesh Singh +M: Tom Lendacky +L: linux-crypto@vger.kernel.org +S: Supported +F: drivers/crypto/ccp/sev* +F: include/uapi/linux/psp-sev.h + +AMD DISPLAY CORE +M: Harry Wentland +M: Leo Li +L: amd-gfx@lists.freedesktop.org +S: Supported +T: git https://gitlab.freedesktop.org/agd5f/linux.git +F: drivers/gpu/drm/amd/display/ + +AMD FAM15H PROCESSOR POWER MONITORING DRIVER +M: Huang Rui +L: linux-hwmon@vger.kernel.org +S: Supported +F: Documentation/hwmon/fam15h_power.rst +F: drivers/hwmon/fam15h_power.c + +AMD FCH GPIO DRIVER +M: Enrico Weigelt, metux IT consult +L: linux-gpio@vger.kernel.org +S: Maintained +F: drivers/gpio/gpio-amd-fch.c +F: include/linux/platform_data/gpio/gpio-amd-fch.h + +AMD GEODE CS5536 USB DEVICE CONTROLLER DRIVER +L: linux-geode@lists.infradead.org (moderated for non-subscribers) +S: Orphan +F: drivers/usb/gadget/udc/amd5536udc.* + +AMD GEODE PROCESSOR/CHIPSET SUPPORT +M: Andres Salomon +L: linux-geode@lists.infradead.org (moderated for non-subscribers) +S: Supported +W: http://www.amd.com/us-en/ConnectivitySolutions/TechnicalResources/0,,50_2334_2452_11363,00.html +F: arch/x86/include/asm/geode.h +F: drivers/char/hw_random/geode-rng.c +F: drivers/crypto/geode* +F: drivers/video/fbdev/geode/ + +AMD IOMMU (AMD-VI) +M: Joerg Roedel +R: Suravee Suthikulpanit +L: iommu@lists.linux-foundation.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/joro/iommu.git +F: drivers/iommu/amd/ +F: include/linux/amd-iommu.h + +AMD KFD +M: Felix Kuehling +L: amd-gfx@lists.freedesktop.org +S: Supported +T: git https://gitlab.freedesktop.org/agd5f/linux.git +F: drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd*.[ch] +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/v9_structs.h +F: drivers/gpu/drm/amd/include/vi_structs.h +F: include/uapi/linux/kfd_ioctl.h + +AMD SPI DRIVER +M: Sanjay R Mehta +S: Maintained +F: drivers/spi/spi-amd.c + +AMD MP2 I2C DRIVER +M: Elie Morisse +M: Nehal Shah +M: Shyam Sundar S K +L: linux-i2c@vger.kernel.org +S: Maintained +F: drivers/i2c/busses/i2c-amd-mp2* + +AMD PMC DRIVER +M: Shyam Sundar S K +L: platform-driver-x86@vger.kernel.org +S: Maintained +F: drivers/platform/x86/amd-pmc.* + +AMD POWERPLAY AND SWSMU +M: Evan Quan +L: amd-gfx@lists.freedesktop.org +S: Supported +T: git https://gitlab.freedesktop.org/agd5f/linux.git +F: drivers/gpu/drm/amd/pm/ + +AMD PTDMA DRIVER +M: Sanjay R Mehta +L: dmaengine@vger.kernel.org +S: Maintained +F: drivers/dma/ptdma/ + +AMD SEATTLE DEVICE TREE SUPPORT +M: Brijesh Singh +M: Suravee Suthikulpanit +M: Tom Lendacky +S: Supported +F: arch/arm64/boot/dts/amd/ + +AMD XGBE DRIVER +M: Tom Lendacky +L: netdev@vger.kernel.org +S: Supported +F: arch/arm64/boot/dts/amd/amd-seattle-xgbe*.dtsi +F: drivers/net/ethernet/amd/xgbe/ + +AMD SENSOR FUSION HUB DRIVER +M: Nehal Shah +M: Basavaraj Natikar +L: linux-input@vger.kernel.org +S: Maintained +F: Documentation/hid/amd-sfh* +F: drivers/hid/amd-sfh-hid/ + +AMS AS73211 DRIVER +M: Christian Eggers +L: linux-iio@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/iio/light/ams,as73211.yaml +F: drivers/iio/light/as73211.c + +ANALOG DEVICES INC AD7192 DRIVER +M: Alexandru Tachici +L: linux-iio@vger.kernel.org +S: Supported +W: http://ez.analog.com/community/linux-device-drivers +F: Documentation/devicetree/bindings/iio/adc/adi,ad7192.yaml +F: drivers/iio/adc/ad7192.c + +ANALOG DEVICES INC AD7292 DRIVER +M: Marcelo Schmitt +L: linux-iio@vger.kernel.org +S: Supported +W: http://ez.analog.com/community/linux-device-drivers +F: Documentation/devicetree/bindings/iio/adc/adi,ad7292.yaml +F: drivers/iio/adc/ad7292.c + +ANALOG DEVICES INC AD7768-1 DRIVER +M: Michael Hennerich +L: linux-iio@vger.kernel.org +S: Supported +W: http://ez.analog.com/community/linux-device-drivers +F: Documentation/devicetree/bindings/iio/adc/adi,ad7768-1.yaml +F: drivers/iio/adc/ad7768-1.c + +ANALOG DEVICES INC AD7780 DRIVER +M: Michael Hennerich +M: Renato Lui Geh +L: linux-iio@vger.kernel.org +S: Supported +W: http://ez.analog.com/community/linux-device-drivers +F: Documentation/devicetree/bindings/iio/adc/adi,ad7780.yaml +F: drivers/iio/adc/ad7780.c + +ANALOG DEVICES INC AD9389B DRIVER +M: Hans Verkuil +L: linux-media@vger.kernel.org +S: Maintained +F: drivers/media/i2c/ad9389b* + +ANALOG DEVICES INC ADGS1408 DRIVER +M: Mircea Caprioru +S: Supported +F: Documentation/devicetree/bindings/mux/adi,adgs1408.txt +F: drivers/mux/adgs1408.c + +ANALOG DEVICES INC ADIN DRIVER +M: Michael Hennerich +L: netdev@vger.kernel.org +S: Supported +W: http://ez.analog.com/community/linux-device-drivers +F: Documentation/devicetree/bindings/net/adi,adin.yaml +F: drivers/net/phy/adin.c + +ANALOG DEVICES INC ADIS DRIVER LIBRARY +M: Nuno Sa +L: linux-iio@vger.kernel.org +S: Supported +F: drivers/iio/imu/adis.c +F: include/linux/iio/imu/adis.h + +ANALOG DEVICES INC ADIS16460 DRIVER +M: Dragos Bogdan +L: linux-iio@vger.kernel.org +S: Supported +W: http://ez.analog.com/community/linux-device-drivers +F: Documentation/devicetree/bindings/iio/imu/adi,adis16460.yaml +F: drivers/iio/imu/adis16460.c + +ANALOG DEVICES INC ADIS16475 DRIVER +M: Nuno Sa +L: linux-iio@vger.kernel.org +W: http://ez.analog.com/community/linux-device-drivers +S: Supported +F: drivers/iio/imu/adis16475.c +F: Documentation/devicetree/bindings/iio/imu/adi,adis16475.yaml + +ANALOG DEVICES INC ADM1177 DRIVER +M: Michael Hennerich +L: linux-hwmon@vger.kernel.org +S: Supported +W: http://ez.analog.com/community/linux-device-drivers +F: Documentation/devicetree/bindings/hwmon/adi,adm1177.yaml +F: drivers/hwmon/adm1177.c + +ANALOG DEVICES INC ADP5061 DRIVER +M: Michael Hennerich +L: linux-pm@vger.kernel.org +S: Supported +W: http://ez.analog.com/community/linux-device-drivers +F: drivers/power/supply/adp5061.c + +ANALOG DEVICES INC ADV7180 DRIVER +M: Lars-Peter Clausen +L: linux-media@vger.kernel.org +S: Supported +W: http://ez.analog.com/community/linux-device-drivers +F: drivers/media/i2c/adv7180.c +F: Documentation/devicetree/bindings/media/i2c/adv7180.yaml + +ANALOG DEVICES INC ADV748X DRIVER +M: Kieran Bingham +L: linux-media@vger.kernel.org +S: Maintained +F: drivers/media/i2c/adv748x/* + +ANALOG DEVICES INC ADV7511 DRIVER +M: Hans Verkuil +L: linux-media@vger.kernel.org +S: Maintained +F: drivers/media/i2c/adv7511* + +ANALOG DEVICES INC ADV7604 DRIVER +M: Hans Verkuil +L: linux-media@vger.kernel.org +S: Maintained +F: drivers/media/i2c/adv7604* +F: Documentation/devicetree/bindings/media/i2c/adv7604.yaml + +ANALOG DEVICES INC ADV7842 DRIVER +M: Hans Verkuil +L: linux-media@vger.kernel.org +S: Maintained +F: drivers/media/i2c/adv7842* + +ANALOG DEVICES INC ADXRS290 DRIVER +M: Nishant Malpani +L: linux-iio@vger.kernel.org +S: Supported +F: drivers/iio/gyro/adxrs290.c +F: Documentation/devicetree/bindings/iio/gyroscope/adi,adxrs290.yaml + +ANALOG DEVICES INC ASOC CODEC DRIVERS +M: Lars-Peter Clausen +M: Nuno Sá +L: alsa-devel@alsa-project.org (moderated for non-subscribers) +S: Supported +W: http://wiki.analog.com/ +W: http://ez.analog.com/community/linux-device-drivers +F: sound/soc/codecs/ad1* +F: sound/soc/codecs/ad7* +F: sound/soc/codecs/adau* +F: sound/soc/codecs/adav* +F: sound/soc/codecs/sigmadsp.* +F: sound/soc/codecs/ssm* + +ANALOG DEVICES INC DMA DRIVERS +M: Lars-Peter Clausen +S: Supported +W: http://ez.analog.com/community/linux-device-drivers +F: drivers/dma/dma-axi-dmac.c + +ANALOG DEVICES INC IIO DRIVERS +M: Lars-Peter Clausen +M: Michael Hennerich +S: Supported +W: http://wiki.analog.com/ +W: http://ez.analog.com/community/linux-device-drivers +F: Documentation/ABI/testing/sysfs-bus-iio-frequency-ad9523 +F: Documentation/ABI/testing/sysfs-bus-iio-frequency-adf4350 +F: Documentation/devicetree/bindings/iio/*/adi,* +F: Documentation/devicetree/bindings/iio/dac/adi,ad5758.yaml +F: drivers/iio/*/ad* +F: drivers/iio/adc/ltc249* +F: drivers/iio/amplifiers/hmc425a.c +F: drivers/staging/iio/*/ad* +X: drivers/iio/*/adjd* + +ANALOGBITS PLL LIBRARIES +M: Paul Walmsley +S: Supported +F: drivers/clk/analogbits/* +F: include/linux/clk/analogbits* + +ANDES ARCHITECTURE +M: Nick Hu +M: Greentime Hu +M: Vincent Chen +S: Supported +T: git https://git.kernel.org/pub/scm/linux/kernel/git/greentime/linux.git +F: Documentation/devicetree/bindings/interrupt-controller/andestech,ativic32.txt +F: Documentation/devicetree/bindings/nds32/ +F: arch/nds32/ +N: nds32 +K: nds32 + +ANDROID CONFIG FRAGMENTS +M: Rob Herring +S: Supported +F: kernel/configs/android* + +ANDROID DRIVERS +M: Greg Kroah-Hartman +M: Arve Hjønnevåg +M: Todd Kjos +M: Martijn Coenen +M: Joel Fernandes +M: Christian Brauner +M: Hridya Valsaraju +M: Suren Baghdasaryan +L: linux-kernel@vger.kernel.org +S: Supported +T: git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging.git +F: drivers/android/ +F: drivers/staging/android/ + +ANDROID GOLDFISH PIC DRIVER +M: Miodrag Dinic +S: Supported +F: Documentation/devicetree/bindings/interrupt-controller/google,goldfish-pic.txt +F: drivers/irqchip/irq-goldfish-pic.c + +ANDROID GOLDFISH RTC DRIVER +M: Jiaxun Yang +S: Supported +F: Documentation/devicetree/bindings/rtc/google,goldfish-rtc.txt +F: drivers/rtc/rtc-goldfish.c + +AOA (Apple Onboard Audio) ALSA DRIVER +M: Johannes Berg +L: linuxppc-dev@lists.ozlabs.org +L: alsa-devel@alsa-project.org (moderated for non-subscribers) +S: Maintained +F: sound/aoa/ + +APEX EMBEDDED SYSTEMS STX104 IIO DRIVER +M: William Breathitt Gray +L: linux-iio@vger.kernel.org +S: Maintained +F: drivers/iio/adc/stx104.c + +APM DRIVER +M: Jiri Kosina +S: Odd fixes +T: git git://git.kernel.org/pub/scm/linux/kernel/git/jikos/apm.git +F: arch/x86/kernel/apm_32.c +F: drivers/char/apm-emulation.c +F: include/linux/apm_bios.h +F: include/uapi/linux/apm_bios.h + +APPARMOR SECURITY MODULE +M: John Johansen +L: apparmor@lists.ubuntu.com (subscribers-only, general discussion) +S: Supported +W: wiki.apparmor.net +T: git git://git.kernel.org/pub/scm/linux/kernel/git/jj/linux-apparmor +F: Documentation/admin-guide/LSM/apparmor.rst +F: security/apparmor/ + +APPLE BCM5974 MULTITOUCH DRIVER +M: Henrik Rydberg +L: linux-input@vger.kernel.org +S: Odd fixes +F: drivers/input/mouse/bcm5974.c + +APPLE DART IOMMU DRIVER +M: Sven Peter +R: Alyssa Rosenzweig +L: iommu@lists.linux-foundation.org +S: Maintained +F: Documentation/devicetree/bindings/iommu/apple,dart.yaml +F: drivers/iommu/apple-dart.c + +APPLE SMC DRIVER +M: Henrik Rydberg +L: linux-hwmon@vger.kernel.org +S: Odd fixes +F: drivers/hwmon/applesmc.c + +APPLETALK NETWORK LAYER +L: netdev@vger.kernel.org +S: Odd fixes +F: drivers/net/appletalk/ +F: include/linux/atalk.h +F: include/uapi/linux/atalk.h +F: net/appletalk/ + +APPLIED MICRO (APM) X-GENE DEVICE TREE SUPPORT +M: Khuong Dinh +S: Supported +F: arch/arm64/boot/dts/apm/ + +APPLIED MICRO (APM) X-GENE SOC EDAC +M: Khuong Dinh +S: Supported +F: Documentation/devicetree/bindings/edac/apm-xgene-edac.txt +F: drivers/edac/xgene_edac.c + +APPLIED MICRO (APM) X-GENE SOC ETHERNET (V2) DRIVER +M: Iyappan Subramanian +M: Keyur Chudgar +S: Supported +F: drivers/net/ethernet/apm/xgene-v2/ + +APPLIED MICRO (APM) X-GENE SOC ETHERNET DRIVER +M: Iyappan Subramanian +M: Keyur Chudgar +M: Quan Nguyen +S: Supported +F: Documentation/devicetree/bindings/net/apm-xgene-enet.txt +F: Documentation/devicetree/bindings/net/apm-xgene-mdio.txt +F: drivers/net/ethernet/apm/xgene/ +F: drivers/net/mdio/mdio-xgene.c + +APPLIED MICRO (APM) X-GENE SOC PMU +M: Khuong Dinh +S: Supported +F: Documentation/admin-guide/perf/xgene-pmu.rst +F: Documentation/devicetree/bindings/perf/apm-xgene-pmu.txt +F: drivers/perf/xgene_pmu.c + +APTINA CAMERA SENSOR PLL +M: Laurent Pinchart +L: linux-media@vger.kernel.org +S: Maintained +F: drivers/media/i2c/aptina-pll.* + +AQUACOMPUTER D5 NEXT PUMP SENSOR DRIVER +M: Aleksa Savic +L: linux-hwmon@vger.kernel.org +S: Maintained +F: Documentation/hwmon/aquacomputer_d5next.rst +F: drivers/hwmon/aquacomputer_d5next.c + +AQUANTIA ETHERNET DRIVER (atlantic) +M: Igor Russkikh +L: netdev@vger.kernel.org +S: Supported +W: https://www.marvell.com/ +Q: https://patchwork.kernel.org/project/netdevbpf/list/ +F: Documentation/networking/device_drivers/ethernet/aquantia/atlantic.rst +F: drivers/net/ethernet/aquantia/atlantic/ + +AQUANTIA ETHERNET DRIVER PTP SUBSYSTEM +M: Egor Pomozov +L: netdev@vger.kernel.org +S: Supported +W: http://www.aquantia.com +F: drivers/net/ethernet/aquantia/atlantic/aq_ptp* + +ARASAN NAND CONTROLLER DRIVER +M: Miquel Raynal +M: Naga Sureshkumar Relli +L: linux-mtd@lists.infradead.org +S: Maintained +F: Documentation/devicetree/bindings/mtd/arasan,nand-controller.yaml +F: drivers/mtd/nand/raw/arasan-nand-controller.c + +ARC FRAMEBUFFER DRIVER +M: Jaya Kumar +S: Maintained +F: drivers/video/fbdev/arcfb.c +F: drivers/video/fbdev/core/fb_defio.c + +ARC PGU DRM DRIVER +M: Alexey Brodkin +S: Supported +F: Documentation/devicetree/bindings/display/snps,arcpgu.txt +F: drivers/gpu/drm/tiny/arcpgu.c + +ARCNET NETWORK LAYER +M: Michael Grzeschik +L: netdev@vger.kernel.org +S: Maintained +F: drivers/net/arcnet/ +F: include/uapi/linux/if_arcnet.h + +ARM ARCHITECTED TIMER DRIVER +M: Mark Rutland +M: Marc Zyngier +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +F: arch/arm/include/asm/arch_timer.h +F: arch/arm64/include/asm/arch_timer.h +F: drivers/clocksource/arm_arch_timer.c + +ARM HDLCD DRM DRIVER +M: Liviu Dudau +S: Supported +F: Documentation/devicetree/bindings/display/arm,hdlcd.txt +F: drivers/gpu/drm/arm/hdlcd_* + +ARM INTEGRATOR, VERSATILE AND REALVIEW SUPPORT +M: Linus Walleij +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +F: Documentation/devicetree/bindings/arm/arm,integrator.yaml +F: Documentation/devicetree/bindings/arm/arm,realview.yaml +F: Documentation/devicetree/bindings/arm/arm,versatile.yaml +F: Documentation/devicetree/bindings/arm/arm,vexpress-juno.yaml +F: Documentation/devicetree/bindings/auxdisplay/arm,versatile-lcd.yaml +F: Documentation/devicetree/bindings/clock/arm,syscon-icst.yaml +F: Documentation/devicetree/bindings/i2c/i2c-versatile.txt +F: Documentation/devicetree/bindings/interrupt-controller/arm,versatile-fpga-irq.txt +F: Documentation/devicetree/bindings/mtd/arm-versatile.txt +F: arch/arm/boot/dts/arm-realview-* +F: arch/arm/boot/dts/integrator* +F: arch/arm/boot/dts/versatile* +F: arch/arm/mach-integrator/ +F: arch/arm/mach-realview/ +F: arch/arm/mach-versatile/ +F: arch/arm/plat-versatile/ +F: drivers/bus/arm-integrator-lm.c +F: drivers/clk/versatile/ +F: drivers/i2c/busses/i2c-versatile.c +F: drivers/irqchip/irq-versatile-fpga.c +F: drivers/mtd/maps/physmap-versatile.* +F: drivers/power/reset/arm-versatile-reboot.c +F: drivers/soc/versatile/ + +ARM KOMEDA DRM-KMS DRIVER +M: James (Qian) Wang +M: Liviu Dudau +M: Mihail Atanassov +L: Mali DP Maintainers +S: Supported +T: git git://anongit.freedesktop.org/drm/drm-misc +F: Documentation/devicetree/bindings/display/arm,komeda.txt +F: Documentation/gpu/komeda-kms.rst +F: drivers/gpu/drm/arm/display/include/ +F: drivers/gpu/drm/arm/display/komeda/ + +ARM MALI PANFROST DRM DRIVER +M: Rob Herring +M: Tomeu Vizoso +R: Steven Price +R: Alyssa Rosenzweig +L: dri-devel@lists.freedesktop.org +S: Supported +T: git git://anongit.freedesktop.org/drm/drm-misc +F: drivers/gpu/drm/panfrost/ +F: include/uapi/drm/panfrost_drm.h + +ARM MALI-DP DRM DRIVER +M: Liviu Dudau +M: Brian Starkey +L: Mali DP Maintainers +S: Supported +T: git git://anongit.freedesktop.org/drm/drm-misc +F: Documentation/devicetree/bindings/display/arm,malidp.txt +F: Documentation/gpu/afbc.rst +F: drivers/gpu/drm/arm/ + +ARM MFM AND FLOPPY DRIVERS +M: Ian Molton +S: Maintained +F: arch/arm/include/asm/floppy.h +F: arch/arm/mach-rpc/floppydma.S + +ARM PMU PROFILING AND DEBUGGING +M: Will Deacon +M: Mark Rutland +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +F: Documentation/devicetree/bindings/arm/pmu.yaml +F: Documentation/devicetree/bindings/perf/ +F: arch/arm*/include/asm/hw_breakpoint.h +F: arch/arm*/include/asm/perf_event.h +F: arch/arm*/kernel/hw_breakpoint.c +F: arch/arm*/kernel/perf_* +F: drivers/perf/ +F: include/linux/perf/arm_pmu.h + +ARM PORT +M: Russell King +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Odd Fixes +W: http://www.armlinux.org.uk/ +T: git git://git.armlinux.org.uk/~rmk/linux-arm.git +F: arch/arm/ +X: arch/arm/boot/dts/ + +ARM PRIMECELL AACI PL041 DRIVER +M: Russell King +S: Odd Fixes +F: sound/arm/aaci.* + +ARM PRIMECELL BUS SUPPORT +M: Russell King +S: Odd Fixes +F: drivers/amba/ +F: include/linux/amba/bus.h + +ARM PRIMECELL PL35X NAND CONTROLLER DRIVER +M: Miquel Raynal +M: Naga Sureshkumar Relli +L: linux-mtd@lists.infradead.org +S: Maintained +F: Documentation/devicetree/bindings/mtd/arm,pl353-nand-r2p1.yaml +F: drivers/mtd/nand/raw/pl35x-nand-controller.c + +ARM PRIMECELL PL35X SMC DRIVER +M: Miquel Raynal +M: Naga Sureshkumar Relli +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +F: Documentation/devicetree/bindings/memory-controllers/arm,pl353-smc.yaml +F: drivers/memory/pl353-smc.c + +ARM PRIMECELL CLCD PL110 DRIVER +M: Russell King +S: Odd Fixes +F: drivers/video/fbdev/amba-clcd.* + +ARM PRIMECELL KMI PL050 DRIVER +M: Russell King +S: Odd Fixes +F: drivers/input/serio/ambakmi.* +F: include/linux/amba/kmi.h + +ARM PRIMECELL MMCI PL180/1 DRIVER +M: Russell King +S: Odd Fixes +F: drivers/mmc/host/mmci.* +F: include/linux/amba/mmci.h + +ARM PRIMECELL SSP PL022 SPI DRIVER +M: Linus Walleij +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +F: Documentation/devicetree/bindings/spi/spi-pl022.yaml +F: drivers/spi/spi-pl022.c + +ARM PRIMECELL UART PL010 AND PL011 DRIVERS +M: Russell King +S: Odd Fixes +F: drivers/tty/serial/amba-pl01*.c +F: include/linux/amba/serial.h + +ARM PRIMECELL VIC PL190/PL192 DRIVER +M: Linus Walleij +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +F: Documentation/devicetree/bindings/interrupt-controller/arm,vic.txt +F: drivers/irqchip/irq-vic.c + +ARM SMC WATCHDOG DRIVER +M: Julius Werner +R: Evan Benn +S: Maintained +F: Documentation/devicetree/bindings/watchdog/arm-smc-wdt.yaml +F: drivers/watchdog/arm_smc_wdt.c + +ARM SMMU DRIVERS +M: Will Deacon +R: Robin Murphy +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +F: Documentation/devicetree/bindings/iommu/arm,smmu* +F: drivers/iommu/arm/ +F: drivers/iommu/io-pgtable-arm* + +ARM AND ARM64 SoC SUB-ARCHITECTURES (COMMON PARTS) +M: Arnd Bergmann +M: Olof Johansson +M: soc@kernel.org +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc.git +F: arch/arm/boot/dts/Makefile +F: arch/arm64/boot/dts/Makefile + +ARM SUB-ARCHITECTURES +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc.git +F: arch/arm/mach-*/ +F: arch/arm/plat-*/ + +ARM/ACTIONS SEMI ARCHITECTURE +M: Andreas Färber +M: Manivannan Sadhasivam +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +L: linux-actions@lists.infradead.org (moderated for non-subscribers) +S: Maintained +F: Documentation/devicetree/bindings/arm/actions.yaml +F: Documentation/devicetree/bindings/clock/actions,owl-cmu.txt +F: Documentation/devicetree/bindings/dma/owl-dma.yaml +F: Documentation/devicetree/bindings/i2c/i2c-owl.yaml +F: Documentation/devicetree/bindings/interrupt-controller/actions,owl-sirq.yaml +F: Documentation/devicetree/bindings/mmc/owl-mmc.yaml +F: Documentation/devicetree/bindings/net/actions,owl-emac.yaml +F: Documentation/devicetree/bindings/pinctrl/actions,* +F: Documentation/devicetree/bindings/power/actions,owl-sps.txt +F: Documentation/devicetree/bindings/timer/actions,owl-timer.txt +F: arch/arm/boot/dts/owl-* +F: arch/arm/mach-actions/ +F: arch/arm64/boot/dts/actions/ +F: drivers/clk/actions/ +F: drivers/clocksource/timer-owl* +F: drivers/dma/owl-dma.c +F: drivers/i2c/busses/i2c-owl.c +F: drivers/irqchip/irq-owl-sirq.c +F: drivers/mmc/host/owl-mmc.c +F: drivers/net/ethernet/actions/ +F: drivers/pinctrl/actions/* +F: drivers/soc/actions/ +F: include/dt-bindings/power/owl-* +F: include/dt-bindings/reset/actions,* +F: include/linux/soc/actions/ +N: owl + +ARM/ADS SPHERE MACHINE SUPPORT +M: Lennert Buytenhek +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained + +ARM/AFEB9260 MACHINE SUPPORT +M: Sergey Lapin +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained + +ARM/AJECO 1ARM MACHINE SUPPORT +M: Lennert Buytenhek +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained + +ARM/Allwinner SoC Clock Support +M: Emilio López +S: Maintained +F: drivers/clk/sunxi/ + +ARM/Allwinner sunXi SoC support +M: Maxime Ripard +M: Chen-Yu Tsai +R: Jernej Skrabec +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/sunxi/linux.git +L: linux-sunxi@lists.linux.dev +F: arch/arm/mach-sunxi/ +F: arch/arm64/boot/dts/allwinner/ +F: drivers/clk/sunxi-ng/ +F: drivers/pinctrl/sunxi/ +F: drivers/soc/sunxi/ +N: allwinner +N: sun[x456789]i +N: sun50i + +ARM/Amlogic Meson SoC CLOCK FRAMEWORK +M: Neil Armstrong +M: Jerome Brunet +L: linux-amlogic@lists.infradead.org +S: Maintained +F: Documentation/devicetree/bindings/clock/amlogic* +F: drivers/clk/meson/ +F: include/dt-bindings/clock/gxbb* +F: include/dt-bindings/clock/meson* + +ARM/Amlogic Meson SoC Crypto Drivers +M: Corentin Labbe +L: linux-crypto@vger.kernel.org +L: linux-amlogic@lists.infradead.org +S: Maintained +F: Documentation/devicetree/bindings/crypto/amlogic* +F: drivers/crypto/amlogic/ + +ARM/Amlogic Meson SoC Sound Drivers +M: Jerome Brunet +L: alsa-devel@alsa-project.org (moderated for non-subscribers) +S: Maintained +F: Documentation/devicetree/bindings/sound/amlogic* +F: sound/soc/meson/ + +ARM/Amlogic Meson SoC support +M: Neil Armstrong +M: Kevin Hilman +R: Jerome Brunet +R: Martin Blumenstingl +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +L: linux-amlogic@lists.infradead.org +S: Maintained +W: http://linux-meson.com/ +F: arch/arm/boot/dts/meson* +F: arch/arm/mach-meson/ +F: arch/arm64/boot/dts/amlogic/ +F: drivers/mmc/host/meson* +F: drivers/pinctrl/meson/ +F: drivers/rtc/rtc-meson* +F: drivers/soc/amlogic/ +N: meson + +ARM/Annapurna Labs ALPINE ARCHITECTURE +M: Tsahee Zidenberg +M: Antoine Tenart +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +F: arch/arm/boot/dts/alpine* +F: arch/arm/mach-alpine/ +F: arch/arm64/boot/dts/amazon/ +F: drivers/*/*alpine* + +ARM/APPLE MACHINE SUPPORT +M: Hector Martin +M: Sven Peter +R: Alyssa Rosenzweig +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +W: https://asahilinux.org +B: https://github.com/AsahiLinux/linux/issues +C: irc://irc.oftc.net/asahi-dev +T: git https://github.com/AsahiLinux/linux.git +F: Documentation/devicetree/bindings/arm/apple.yaml +F: Documentation/devicetree/bindings/interrupt-controller/apple,aic.yaml +F: Documentation/devicetree/bindings/pinctrl/apple,pinctrl.yaml +F: arch/arm64/boot/dts/apple/ +F: drivers/irqchip/irq-apple-aic.c +F: include/dt-bindings/interrupt-controller/apple-aic.h +F: include/dt-bindings/pinctrl/apple.h + +ARM/ARTPEC MACHINE SUPPORT +M: Jesper Nilsson +M: Lars Persson +L: linux-arm-kernel@axis.com +S: Maintained +F: Documentation/devicetree/bindings/pinctrl/axis,artpec6-pinctrl.txt +F: arch/arm/boot/dts/artpec6* +F: arch/arm/mach-artpec +F: drivers/clk/axis +F: drivers/crypto/axis +F: drivers/mmc/host/usdhi6rol0.c +F: drivers/pinctrl/pinctrl-artpec* + +ARM/ASPEED I2C DRIVER +M: Brendan Higgins +R: Benjamin Herrenschmidt +R: Joel Stanley +L: linux-i2c@vger.kernel.org +L: openbmc@lists.ozlabs.org (moderated for non-subscribers) +S: Maintained +F: Documentation/devicetree/bindings/i2c/i2c-aspeed.txt +F: Documentation/devicetree/bindings/interrupt-controller/aspeed,ast2400-i2c-ic.txt +F: drivers/i2c/busses/i2c-aspeed.c +F: drivers/irqchip/irq-aspeed-i2c-ic.c + +ARM/ASPEED MACHINE SUPPORT +M: Joel Stanley +R: Andrew Jeffery +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +L: linux-aspeed@lists.ozlabs.org (moderated for non-subscribers) +S: Supported +Q: https://patchwork.ozlabs.org/project/linux-aspeed/list/ +T: git git://git.kernel.org/pub/scm/linux/kernel/git/joel/aspeed.git +F: arch/arm/boot/dts/aspeed-* +F: arch/arm/mach-aspeed/ +N: aspeed + +ARM/BITMAIN ARCHITECTURE +M: Manivannan Sadhasivam +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +F: Documentation/devicetree/bindings/arm/bitmain.yaml +F: Documentation/devicetree/bindings/clock/bitmain,bm1880-clk.yaml +F: Documentation/devicetree/bindings/pinctrl/bitmain,bm1880-pinctrl.txt +F: arch/arm64/boot/dts/bitmain/ +F: drivers/clk/clk-bm1880.c +F: drivers/pinctrl/pinctrl-bm1880.c + +ARM/CALXEDA HIGHBANK ARCHITECTURE +M: Andre Przywara +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +F: arch/arm/boot/dts/ecx-*.dts* +F: arch/arm/boot/dts/highbank.dts +F: arch/arm/mach-highbank/ + +ARM/CAVIUM NETWORKS CNS3XXX MACHINE SUPPORT +M: Krzysztof Halasa +S: Maintained +F: arch/arm/mach-cns3xxx/ + +ARM/CAVIUM THUNDER NETWORK DRIVER +M: Sunil Goutham +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Supported +F: drivers/net/ethernet/cavium/thunder/ + +ARM/CIRRUS LOGIC BK3 MACHINE SUPPORT +M: Lukasz Majewski +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +F: arch/arm/mach-ep93xx/ts72xx.c + +ARM/CIRRUS LOGIC CLPS711X ARM ARCHITECTURE +M: Alexander Shiyan +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Odd Fixes +N: clps711x + +ARM/CIRRUS LOGIC EDB9315A MACHINE SUPPORT +M: Lennert Buytenhek +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained + +ARM/CIRRUS LOGIC EP93XX ARM ARCHITECTURE +M: Hartley Sweeten +M: Alexander Sverdlin +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +F: arch/arm/mach-ep93xx/ +F: arch/arm/mach-ep93xx/include/mach/ + +ARM/CLKDEV SUPPORT +M: Russell King +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +T: git git://git.armlinux.org.uk/~rmk/linux-arm.git clkdev +F: drivers/clk/clkdev.c + +ARM/CONEXANT DIGICOLOR MACHINE SUPPORT +M: Baruch Siach +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +F: arch/arm/boot/dts/cx92755* +N: digicolor + +ARM/CONTEC MICRO9 MACHINE SUPPORT +M: Hubert Feurstein +S: Maintained +F: arch/arm/mach-ep93xx/micro9.c + +ARM/CORESIGHT FRAMEWORK AND DRIVERS +M: Mathieu Poirier +M: Suzuki K Poulose +R: Mike Leach +R: Leo Yan +L: coresight@lists.linaro.org (moderated for non-subscribers) +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/coresight/linux.git +F: Documentation/ABI/testing/sysfs-bus-coresight-devices-* +F: Documentation/devicetree/bindings/arm/coresight-cpu-debug.txt +F: Documentation/devicetree/bindings/arm/coresight-cti.yaml +F: Documentation/devicetree/bindings/arm/coresight.txt +F: Documentation/devicetree/bindings/arm/ete.yaml +F: Documentation/devicetree/bindings/arm/trbe.yaml +F: Documentation/trace/coresight/* +F: drivers/hwtracing/coresight/* +F: include/dt-bindings/arm/coresight-cti-dt.h +F: include/linux/coresight* +F: tools/perf/arch/arm/util/auxtrace.c +F: tools/perf/arch/arm/util/cs-etm.c +F: tools/perf/arch/arm/util/cs-etm.h +F: tools/perf/arch/arm/util/pmu.c +F: tools/perf/util/cs-etm-decoder/* +F: tools/perf/util/cs-etm.* + +ARM/CORGI MACHINE SUPPORT +M: Richard Purdie +S: Maintained + +ARM/CORTINA SYSTEMS GEMINI ARM ARCHITECTURE +M: Hans Ulli Kroll +M: Linus Walleij +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +T: git git://github.com/ulli-kroll/linux.git +F: Documentation/devicetree/bindings/arm/gemini.txt +F: Documentation/devicetree/bindings/net/cortina,gemini-ethernet.txt +F: Documentation/devicetree/bindings/pinctrl/cortina,gemini-pinctrl.txt +F: Documentation/devicetree/bindings/rtc/faraday,ftrtc010.txt +F: arch/arm/boot/dts/gemini* +F: arch/arm/mach-gemini/ +F: drivers/crypto/gemini/ +F: drivers/net/ethernet/cortina/ +F: drivers/pinctrl/pinctrl-gemini.c +F: drivers/rtc/rtc-ftrtc010.c + +ARM/CZ.NIC TURRIS SUPPORT +M: Marek Behún +S: Maintained +W: https://www.turris.cz/ +F: Documentation/ABI/testing/debugfs-moxtet +F: Documentation/ABI/testing/sysfs-bus-moxtet-devices +F: Documentation/ABI/testing/sysfs-firmware-turris-mox-rwtm +F: Documentation/devicetree/bindings/bus/moxtet.txt +F: Documentation/devicetree/bindings/firmware/cznic,turris-mox-rwtm.txt +F: Documentation/devicetree/bindings/gpio/gpio-moxtet.txt +F: Documentation/devicetree/bindings/leds/cznic,turris-omnia-leds.yaml +F: Documentation/devicetree/bindings/watchdog/armada-37xx-wdt.txt +F: drivers/bus/moxtet.c +F: drivers/firmware/turris-mox-rwtm.c +F: drivers/leds/leds-turris-omnia.c +F: drivers/mailbox/armada-37xx-rwtm-mailbox.c +F: drivers/gpio/gpio-moxtet.c +F: drivers/watchdog/armada_37xx_wdt.c +F: include/dt-bindings/bus/moxtet.h +F: include/linux/armada-37xx-rwtm-mailbox.h +F: include/linux/moxtet.h + +ARM/EZX SMARTPHONES (A780, A910, A1200, E680, ROKR E2 and ROKR E6) +M: Robert Jarzmik +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +F: arch/arm/mach-pxa/ezx.c + +ARM/FARADAY FA526 PORT +M: Hans Ulli Kroll +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +T: git git://git.berlios.de/gemini-board +F: arch/arm/mm/*-fa* + +ARM/FOOTBRIDGE ARCHITECTURE +M: Russell King +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +W: http://www.armlinux.org.uk/ +F: arch/arm/include/asm/hardware/dec21285.h +F: arch/arm/mach-footbridge/ + +ARM/FREESCALE IMX / MXC ARM ARCHITECTURE +M: Shawn Guo +M: Sascha Hauer +R: Pengutronix Kernel Team +R: Fabio Estevam +R: NXP Linux Team +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/shawnguo/linux.git +X: drivers/media/i2c/ +N: imx +N: mxs + +ARM/FREESCALE LAYERSCAPE ARM ARCHITECTURE +M: Shawn Guo +M: Li Yang +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/shawnguo/linux.git +F: arch/arm/boot/dts/ls1021a* +F: arch/arm64/boot/dts/freescale/fsl-* +F: arch/arm64/boot/dts/freescale/qoriq-* + +ARM/FREESCALE VYBRID ARM ARCHITECTURE +M: Shawn Guo +M: Sascha Hauer +R: Pengutronix Kernel Team +R: Stefan Agner +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/shawnguo/linux.git +F: arch/arm/boot/dts/vf* +F: arch/arm/mach-imx/*vf610* + +ARM/GLOMATION GESBC9312SX MACHINE SUPPORT +M: Lennert Buytenhek +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained + +ARM/GUMSTIX MACHINE SUPPORT +M: Steve Sakoman +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained + +ARM/H4700 (HP IPAQ HX4700) MACHINE SUPPORT +M: Philipp Zabel +M: Paul Parsons +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +F: arch/arm/mach-pxa/hx4700.c +F: arch/arm/mach-pxa/include/mach/hx4700.h +F: sound/soc/pxa/hx4700.c + +ARM/HISILICON SOC SUPPORT +M: Wei Xu +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Supported +W: http://www.hisilicon.com +T: git git://github.com/hisilicon/linux-hisi.git +F: arch/arm/boot/dts/hi3* +F: arch/arm/boot/dts/hip* +F: arch/arm/boot/dts/hisi* +F: arch/arm/mach-hisi/ +F: arch/arm64/boot/dts/hisilicon/ + +ARM/HP JORNADA 7XX MACHINE SUPPORT +M: Kristoffer Ericson +S: Maintained +W: www.jlime.com +T: git git://git.kernel.org/pub/scm/linux/kernel/git/kristoffer/linux-hpc.git +F: arch/arm/mach-sa1100/include/mach/jornada720.h +F: arch/arm/mach-sa1100/jornada720.c + +ARM/IGEP MACHINE SUPPORT +M: Enric Balletbo i Serra +M: Javier Martinez Canillas +L: linux-omap@vger.kernel.org +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +F: arch/arm/boot/dts/omap3-igep* + +ARM/INCOME PXA270 SUPPORT +M: Marek Vasut +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +F: arch/arm/mach-pxa/colibri-pxa270-income.c + +ARM/INTEL IOP32X ARM ARCHITECTURE +M: Lennert Buytenhek +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained + +ARM/INTEL IQ81342EX MACHINE SUPPORT +M: Lennert Buytenhek +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained + +ARM/INTEL IXDP2850 MACHINE SUPPORT +M: Lennert Buytenhek +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained + +ARM/INTEL IXP4XX ARM ARCHITECTURE +M: Linus Walleij +M: Imre Kaloz +M: Krzysztof Halasa +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +F: Documentation/devicetree/bindings/arm/intel-ixp4xx.yaml +F: Documentation/devicetree/bindings/bus/intel,ixp4xx-expansion-bus-controller.yaml +F: Documentation/devicetree/bindings/gpio/intel,ixp4xx-gpio.txt +F: Documentation/devicetree/bindings/interrupt-controller/intel,ixp4xx-interrupt.yaml +F: Documentation/devicetree/bindings/timer/intel,ixp4xx-timer.yaml +F: arch/arm/mach-ixp4xx/ +F: drivers/bus/intel-ixp4xx-eb.c +F: drivers/clocksource/timer-ixp4xx.c +F: drivers/crypto/ixp4xx_crypto.c +F: drivers/gpio/gpio-ixp4xx.c +F: drivers/irqchip/irq-ixp4xx.c +F: include/linux/irqchip/irq-ixp4xx.h +F: include/linux/platform_data/timer-ixp4xx.h + +ARM/INTEL KEEMBAY ARCHITECTURE +M: Paul J. Murphy +M: Daniele Alessandrelli +S: Maintained +F: Documentation/devicetree/bindings/arm/intel,keembay.yaml +F: arch/arm64/boot/dts/intel/keembay-evm.dts +F: arch/arm64/boot/dts/intel/keembay-soc.dtsi + +ARM/INTEL RESEARCH IMOTE/STARGATE 2 MACHINE SUPPORT +M: Jonathan Cameron +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +F: arch/arm/mach-pxa/stargate2.c +F: drivers/pcmcia/pxa2xx_stargate2.c + +ARM/INTEL XSC3 (MANZANO) ARM CORE +M: Lennert Buytenhek +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained + +ARM/IP FABRICS DOUBLE ESPRESSO MACHINE SUPPORT +M: Lennert Buytenhek +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained + +ARM/LG1K ARCHITECTURE +M: Chanho Min +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +F: arch/arm64/boot/dts/lg/ + +ARM/LOGICPD PXA270 MACHINE SUPPORT +M: Lennert Buytenhek +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained + +ARM/LPC18XX ARCHITECTURE +M: Vladimir Zapolskiy +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +F: Documentation/devicetree/bindings/i2c/i2c-lpc2k.txt +F: arch/arm/boot/dts/lpc43* +F: drivers/i2c/busses/i2c-lpc2k.c +F: drivers/memory/pl172.c +F: drivers/mtd/spi-nor/controllers/nxp-spifi.c +F: drivers/rtc/rtc-lpc24xx.c +N: lpc18xx + +ARM/LPC32XX SOC SUPPORT +M: Vladimir Zapolskiy +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +T: git git://github.com/vzapolskiy/linux-lpc32xx.git +F: Documentation/devicetree/bindings/i2c/i2c-pnx.txt +F: arch/arm/boot/dts/lpc32* +F: arch/arm/mach-lpc32xx/ +F: drivers/i2c/busses/i2c-pnx.c +F: drivers/net/ethernet/nxp/lpc_eth.c +F: drivers/usb/host/ohci-nxp.c +F: drivers/watchdog/pnx4008_wdt.c +N: lpc32xx + +ARM/MAGICIAN MACHINE SUPPORT +M: Philipp Zabel +S: Maintained + +ARM/Marvell Dove/MV78xx0/Orion SOC support +M: Andrew Lunn +M: Sebastian Hesselbarth +M: Gregory Clement +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/gclement/mvebu.git +F: Documentation/devicetree/bindings/soc/dove/ +F: arch/arm/boot/dts/dove* +F: arch/arm/boot/dts/orion5x* +F: arch/arm/mach-dove/ +F: arch/arm/mach-mv78xx0/ +F: arch/arm/mach-orion5x/ +F: arch/arm/plat-orion/ +F: drivers/soc/dove/ + +ARM/Marvell Kirkwood and Armada 370, 375, 38x, 39x, XP, 3700, 7K/8K, CN9130 SOC support +M: Andrew Lunn +M: Gregory Clement +M: Sebastian Hesselbarth +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/gclement/mvebu.git +F: arch/arm/boot/dts/armada* +F: arch/arm/boot/dts/kirkwood* +F: arch/arm/configs/mvebu_*_defconfig +F: arch/arm/mach-mvebu/ +F: arch/arm64/boot/dts/marvell/armada* +F: arch/arm64/boot/dts/marvell/cn913* +F: drivers/cpufreq/armada-37xx-cpufreq.c +F: drivers/cpufreq/armada-8k-cpufreq.c +F: drivers/cpufreq/mvebu-cpufreq.c +F: drivers/irqchip/irq-armada-370-xp.c +F: drivers/irqchip/irq-mvebu-* +F: drivers/pinctrl/mvebu/ +F: drivers/rtc/rtc-armada38x.c + +ARM/Mediatek RTC DRIVER +M: Eddie Huang +M: Sean Wang +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +L: linux-mediatek@lists.infradead.org (moderated for non-subscribers) +S: Maintained +F: Documentation/devicetree/bindings/rtc/rtc-mt2712.txt +F: Documentation/devicetree/bindings/rtc/rtc-mt7622.txt +F: drivers/rtc/rtc-mt2712.c +F: drivers/rtc/rtc-mt6397.c +F: drivers/rtc/rtc-mt7622.c + +ARM/Mediatek SoC support +M: Matthias Brugger +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +L: linux-mediatek@lists.infradead.org (moderated for non-subscribers) +S: Maintained +W: https://mtk.wiki.kernel.org/ +C: irc://chat.freenode.net/linux-mediatek +F: arch/arm/boot/dts/mt6* +F: arch/arm/boot/dts/mt7* +F: arch/arm/boot/dts/mt8* +F: arch/arm/mach-mediatek/ +F: arch/arm64/boot/dts/mediatek/ +F: drivers/soc/mediatek/ +N: mtk +N: mt[678] +K: mediatek + +ARM/Mediatek USB3 PHY DRIVER +M: Chunfeng Yun +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +L: linux-mediatek@lists.infradead.org (moderated for non-subscribers) +S: Maintained +F: Documentation/devicetree/bindings/phy/mediatek,* +F: drivers/phy/mediatek/ + +ARM/Microchip (AT91) SoC support +M: Nicolas Ferre +M: Alexandre Belloni +M: Ludovic Desroches +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Supported +W: http://www.linux4sam.org +T: git git://git.kernel.org/pub/scm/linux/kernel/git/at91/linux.git +F: arch/arm/boot/dts/at91*.dts +F: arch/arm/boot/dts/at91*.dtsi +F: arch/arm/boot/dts/sama*.dts +F: arch/arm/boot/dts/sama*.dtsi +F: arch/arm/include/debug/at91.S +F: arch/arm/mach-at91/ +F: drivers/memory/atmel* +F: drivers/watchdog/sama5d4_wdt.c +F: include/soc/at91/ +X: drivers/input/touchscreen/atmel_mxt_ts.c +X: drivers/net/wireless/atmel/ +N: at91 +N: atmel + +ARM/Microchip Sparx5 SoC support +M: Lars Povlsen +M: Steen Hegelund +M: UNGLinuxDriver@microchip.com +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Supported +T: git git://github.com/microchip-ung/linux-upstream.git +F: arch/arm64/boot/dts/microchip/ +F: drivers/pinctrl/pinctrl-microchip-sgpio.c +N: sparx5 + +Microchip Timer Counter Block (TCB) Capture Driver +M: Kamel Bouhara +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +L: linux-iio@vger.kernel.org +S: Maintained +F: drivers/counter/microchip-tcb-capture.c + +ARM/MIOA701 MACHINE SUPPORT +M: Robert Jarzmik +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +F: arch/arm/mach-pxa/mioa701.c + +ARM/MStar/Sigmastar Armv7 SoC support +M: Daniel Palmer +M: Romain Perier +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +W: http://linux-chenxing.org/ +T: git git://github.com/linux-chenxing/linux.git +F: Documentation/devicetree/bindings/arm/mstar/* +F: Documentation/devicetree/bindings/clock/mstar,msc313-mpll.yaml +F: Documentation/devicetree/bindings/gpio/mstar,msc313-gpio.yaml +F: arch/arm/boot/dts/mstar-* +F: arch/arm/mach-mstar/ +F: drivers/clk/mstar/ +F: drivers/gpio/gpio-msc313.c +F: drivers/watchdog/msc313e_wdt.c +F: include/dt-bindings/clock/mstar-* +F: include/dt-bindings/gpio/msc313-gpio.h + +ARM/NEC MOBILEPRO 900/c MACHINE SUPPORT +M: Michael Petchkovsky +S: Maintained + +ARM/NOMADIK/Ux500 ARCHITECTURES +M: Linus Walleij +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-nomadik.git +F: Documentation/devicetree/bindings/arm/ste-* +F: Documentation/devicetree/bindings/arm/ux500.yaml +F: Documentation/devicetree/bindings/arm/ux500/ +F: Documentation/devicetree/bindings/i2c/i2c-nomadik.txt +F: arch/arm/boot/dts/ste-* +F: arch/arm/mach-nomadik/ +F: arch/arm/mach-ux500/ +F: drivers/clk/clk-nomadik.c +F: drivers/clocksource/clksrc-dbx500-prcmu.c +F: drivers/dma/ste_dma40* +F: drivers/hwspinlock/u8500_hsem.c +F: drivers/i2c/busses/i2c-nomadik.c +F: drivers/iio/adc/ab8500-gpadc.c +F: drivers/mfd/ab8500* +F: drivers/mfd/abx500* +F: drivers/mfd/db8500* +F: drivers/pinctrl/nomadik/ +F: drivers/rtc/rtc-ab8500.c +F: drivers/rtc/rtc-pl031.c +F: drivers/soc/ux500/ + +ARM/NUVOTON NPCM ARCHITECTURE +M: Avi Fishman +M: Tomer Maimon +M: Tali Perry +R: Patrick Venture +R: Nancy Yuen +R: Benjamin Fair +L: openbmc@lists.ozlabs.org (moderated for non-subscribers) +S: Supported +F: Documentation/devicetree/bindings/*/*/*npcm* +F: Documentation/devicetree/bindings/*/*npcm* +F: arch/arm/boot/dts/nuvoton-npcm* +F: arch/arm/mach-npcm/ +F: drivers/*/*npcm* +F: drivers/*/*/*npcm* +F: include/dt-bindings/clock/nuvoton,npcm7xx-clock.h + +ARM/NUVOTON WPCM450 ARCHITECTURE +M: Jonathan Neuschäfer +L: openbmc@lists.ozlabs.org (moderated for non-subscribers) +S: Maintained +F: Documentation/devicetree/bindings/*/*wpcm* +F: arch/arm/boot/dts/nuvoton-wpcm450* +F: arch/arm/mach-npcm/wpcm450.c +F: drivers/*/*wpcm* + +ARM/OPENMOKO NEO FREERUNNER (GTA02) MACHINE SUPPORT +L: openmoko-kernel@lists.openmoko.org (subscribers-only) +S: Orphan +W: http://wiki.openmoko.org/wiki/Neo_FreeRunner +F: arch/arm/mach-s3c/gta02.h +F: arch/arm/mach-s3c/mach-gta02.c + +ARM/Orion SoC/Technologic Systems TS-78xx platform support +M: Alexander Clouter +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +W: http://www.digriz.org.uk/ts78xx/kernel +F: arch/arm/mach-orion5x/ts78xx-* + +ARM/OXNAS platform support +M: Neil Armstrong +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +L: linux-oxnas@groups.io (moderated for non-subscribers) +S: Maintained +F: arch/arm/boot/dts/ox8*.dts* +F: arch/arm/mach-oxnas/ +F: drivers/power/reset/oxnas-restart.c +N: oxnas + +ARM/PALM TREO SUPPORT +M: Tomas Cech +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +W: http://hackndev.com +F: arch/arm/mach-pxa/palmtreo.* + +ARM/PALMTX,PALMT5,PALMLD,PALMTE2,PALMTC SUPPORT +M: Marek Vasut +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +W: http://hackndev.com +F: arch/arm/mach-pxa/include/mach/palmld.h +F: arch/arm/mach-pxa/include/mach/palmtc.h +F: arch/arm/mach-pxa/include/mach/palmtx.h +F: arch/arm/mach-pxa/palmld.c +F: arch/arm/mach-pxa/palmt5.* +F: arch/arm/mach-pxa/palmtc.c +F: arch/arm/mach-pxa/palmte2.* +F: arch/arm/mach-pxa/palmtx.c + +ARM/PALMZ72 SUPPORT +M: Sergey Lapin +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +W: http://hackndev.com +F: arch/arm/mach-pxa/palmz72.* + +ARM/PLEB SUPPORT +M: Peter Chubb +S: Maintained +W: http://www.disy.cse.unsw.edu.au/Hardware/PLEB + +ARM/PT DIGITAL BOARD PORT +M: Stefan Eletzhofer +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +W: http://www.armlinux.org.uk/ + +ARM/QUALCOMM SUPPORT +M: Andy Gross +M: Bjorn Andersson +L: linux-arm-msm@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/qcom/linux.git +F: Documentation/devicetree/bindings/*/qcom* +F: Documentation/devicetree/bindings/soc/qcom/ +F: arch/arm/boot/dts/qcom-*.dts +F: arch/arm/boot/dts/qcom-*.dtsi +F: arch/arm/mach-qcom/ +F: arch/arm64/boot/dts/qcom/ +F: drivers/*/*/qcom* +F: drivers/*/*/qcom/ +F: drivers/*/pm8???-* +F: drivers/*/qcom* +F: drivers/*/qcom/ +F: drivers/bluetooth/btqcomsmd.c +F: drivers/clocksource/timer-qcom.c +F: drivers/cpuidle/cpuidle-qcom-spm.c +F: drivers/extcon/extcon-qcom* +F: drivers/i2c/busses/i2c-qcom-geni.c +F: drivers/i2c/busses/i2c-qup.c +F: drivers/iommu/msm* +F: drivers/mfd/ssbi.c +F: drivers/mmc/host/mmci_qcom* +F: drivers/mmc/host/sdhci-msm.c +F: drivers/pci/controller/dwc/pcie-qcom.c +F: drivers/phy/qualcomm/ +F: drivers/power/*/msm* +F: drivers/reset/reset-qcom-* +F: drivers/scsi/ufs/ufs-qcom* +F: drivers/spi/spi-geni-qcom.c +F: drivers/spi/spi-qcom-qspi.c +F: drivers/spi/spi-qup.c +F: drivers/tty/serial/msm_serial.c +F: drivers/usb/dwc3/dwc3-qcom.c +F: include/dt-bindings/*/qcom* +F: include/linux/*/qcom* +F: include/linux/soc/qcom/ + +ARM/RADISYS ENP2611 MACHINE SUPPORT +M: Lennert Buytenhek +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained + +ARM/RDA MICRO ARCHITECTURE +M: Manivannan Sadhasivam +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +L: linux-unisoc@lists.infradead.org (moderated for non-subscribers) +S: Maintained +F: Documentation/devicetree/bindings/arm/rda.yaml +F: Documentation/devicetree/bindings/gpio/gpio-rda.yaml +F: Documentation/devicetree/bindings/interrupt-controller/rda,8810pl-intc.txt +F: Documentation/devicetree/bindings/serial/rda,8810pl-uart.txt +F: Documentation/devicetree/bindings/timer/rda,8810pl-timer.txt +F: arch/arm/boot/dts/rda8810pl-* +F: drivers/clocksource/timer-rda.c +F: drivers/gpio/gpio-rda.c +F: drivers/irqchip/irq-rda-intc.c +F: drivers/tty/serial/rda-uart.c + +ARM/REALTEK ARCHITECTURE +M: Andreas Färber +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +L: linux-realtek-soc@lists.infradead.org (moderated for non-subscribers) +S: Maintained +F: Documentation/devicetree/bindings/arm/realtek.yaml +F: arch/arm/boot/dts/rtd* +F: arch/arm/mach-realtek/ +F: arch/arm64/boot/dts/realtek/ + +ARM/RENESAS ARM64 ARCHITECTURE +M: Geert Uytterhoeven +M: Magnus Damm +L: linux-renesas-soc@vger.kernel.org +S: Supported +Q: http://patchwork.kernel.org/project/linux-renesas-soc/list/ +T: git git://git.kernel.org/pub/scm/linux/kernel/git/geert/renesas-devel.git next +F: Documentation/devicetree/bindings/arm/renesas.yaml +F: arch/arm64/boot/dts/renesas/ +F: drivers/soc/renesas/ +F: include/linux/soc/renesas/ + +ARM/RISCPC ARCHITECTURE +M: Russell King +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +W: http://www.armlinux.org.uk/ +F: arch/arm/include/asm/hardware/entry-macro-iomd.S +F: arch/arm/include/asm/hardware/ioc.h +F: arch/arm/include/asm/hardware/iomd.h +F: arch/arm/include/asm/hardware/memc.h +F: arch/arm/mach-rpc/ +F: drivers/net/ethernet/8390/etherh.c +F: drivers/net/ethernet/i825xx/ether1* +F: drivers/net/ethernet/seeq/ether3* +F: drivers/scsi/arm/ + +ARM/Rockchip SoC support +M: Heiko Stuebner +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +L: linux-rockchip@lists.infradead.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/mmind/linux-rockchip.git +F: Documentation/devicetree/bindings/i2c/i2c-rk3x.yaml +F: Documentation/devicetree/bindings/mmc/rockchip-dw-mshc.yaml +F: Documentation/devicetree/bindings/spi/spi-rockchip.yaml +F: arch/arm/boot/dts/rk3* +F: arch/arm/boot/dts/rv1108* +F: arch/arm/mach-rockchip/ +F: drivers/*/*/*rockchip* +F: drivers/*/*rockchip* +F: drivers/clk/rockchip/ +F: drivers/i2c/busses/i2c-rk3x.c +F: sound/soc/rockchip/ +N: rockchip + +ARM/SAMSUNG S3C, S5P AND EXYNOS ARM ARCHITECTURES +M: Krzysztof Kozlowski +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +L: linux-samsung-soc@vger.kernel.org +S: Maintained +Q: https://patchwork.kernel.org/project/linux-samsung-soc/list/ +F: Documentation/arm/samsung/ +F: Documentation/devicetree/bindings/arm/samsung/ +F: Documentation/devicetree/bindings/power/pd-samsung.yaml +F: arch/arm/boot/dts/exynos* +F: arch/arm/boot/dts/s3c* +F: arch/arm/boot/dts/s5p* +F: arch/arm/mach-exynos*/ +F: arch/arm/mach-s3c/ +F: arch/arm/mach-s5p*/ +F: arch/arm64/boot/dts/exynos/ +F: drivers/*/*/*s3c24* +F: drivers/*/*s3c24* +F: drivers/*/*s3c64xx* +F: drivers/*/*s5pv210* +F: drivers/clocksource/samsung_pwm_timer.c +F: drivers/memory/samsung/ +F: drivers/pwm/pwm-samsung.c +F: drivers/soc/samsung/ +F: drivers/tty/serial/samsung* +F: include/clocksource/samsung_pwm.h +F: include/linux/platform_data/*s3c* +F: include/linux/serial_s3c.h +F: include/linux/soc/samsung/ +N: exynos +N: s3c2410 +N: s3c64xx +N: s5pv210 + +ARM/SAMSUNG S5P SERIES 2D GRAPHICS ACCELERATION (G2D) SUPPORT +M: Andrzej Hajda +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +L: linux-media@vger.kernel.org +S: Maintained +F: drivers/media/platform/s5p-g2d/ + +ARM/SAMSUNG S5P SERIES HDMI CEC SUBSYSTEM SUPPORT +M: Marek Szyprowski +L: linux-samsung-soc@vger.kernel.org +L: linux-media@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/media/s5p-cec.txt +F: drivers/media/cec/platform/s5p/ + +ARM/SAMSUNG S5P SERIES JPEG CODEC SUPPORT +M: Andrzej Pietrasiewicz +M: Jacek Anaszewski +M: Sylwester Nawrocki +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +L: linux-media@vger.kernel.org +S: Maintained +F: drivers/media/platform/s5p-jpeg/ + +ARM/SAMSUNG S5P SERIES Multi Format Codec (MFC) SUPPORT +M: Andrzej Hajda +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +L: linux-media@vger.kernel.org +S: Maintained +F: drivers/media/platform/s5p-mfc/ + +ARM/SHMOBILE ARM ARCHITECTURE +M: Geert Uytterhoeven +M: Magnus Damm +L: linux-renesas-soc@vger.kernel.org +S: Supported +Q: http://patchwork.kernel.org/project/linux-renesas-soc/list/ +T: git git://git.kernel.org/pub/scm/linux/kernel/git/geert/renesas-devel.git next +F: Documentation/devicetree/bindings/arm/renesas.yaml +F: arch/arm/boot/dts/emev2* +F: arch/arm/boot/dts/gr-peach* +F: arch/arm/boot/dts/iwg20d-q7* +F: arch/arm/boot/dts/r7s* +F: arch/arm/boot/dts/r8a* +F: arch/arm/boot/dts/r9a* +F: arch/arm/boot/dts/sh* +F: arch/arm/configs/shmobile_defconfig +F: arch/arm/include/debug/renesas-scif.S +F: arch/arm/mach-shmobile/ +F: drivers/soc/renesas/ +F: include/linux/soc/renesas/ + +ARM/SOCFPGA ARCHITECTURE +M: Dinh Nguyen +S: Maintained +W: http://www.rocketboards.org +T: git git://git.kernel.org/pub/scm/linux/kernel/git/dinguyen/linux.git +F: arch/arm/boot/dts/socfpga* +F: arch/arm/configs/socfpga_defconfig +F: arch/arm/mach-socfpga/ +F: arch/arm64/boot/dts/altera/ +F: arch/arm64/boot/dts/intel/ + +ARM/SOCFPGA CLOCK FRAMEWORK SUPPORT +M: Dinh Nguyen +S: Maintained +F: drivers/clk/socfpga/ + +ARM/SOCFPGA EDAC SUPPORT +M: Dinh Nguyen +S: Maintained +F: drivers/edac/altera_edac.[ch] + +ARM/SPREADTRUM SoC SUPPORT +M: Orson Zhai +M: Baolin Wang +M: Chunyan Zhang +S: Maintained +F: arch/arm64/boot/dts/sprd +N: sprd +N: sc27xx +N: sc2731 + +ARM/STI ARCHITECTURE +M: Patrice Chotard +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +W: http://www.stlinux.com +F: Documentation/devicetree/bindings/i2c/i2c-st.txt +F: arch/arm/boot/dts/sti* +F: arch/arm/mach-sti/ +F: drivers/ata/ahci_st.c +F: drivers/char/hw_random/st-rng.c +F: drivers/clocksource/arm_global_timer.c +F: drivers/clocksource/clksrc_st_lpc.c +F: drivers/cpufreq/sti-cpufreq.c +F: drivers/dma/st_fdma* +F: drivers/i2c/busses/i2c-st.c +F: drivers/media/platform/sti/c8sectpfe/ +F: drivers/media/rc/st_rc.c +F: drivers/mmc/host/sdhci-st.c +F: drivers/phy/st/phy-miphy28lp.c +F: drivers/phy/st/phy-stih407-usb.c +F: drivers/pinctrl/pinctrl-st.c +F: drivers/remoteproc/st_remoteproc.c +F: drivers/remoteproc/st_slim_rproc.c +F: drivers/reset/sti/ +F: drivers/rtc/rtc-st-lpc.c +F: drivers/tty/serial/st-asc.c +F: drivers/usb/dwc3/dwc3-st.c +F: drivers/usb/host/ehci-st.c +F: drivers/usb/host/ohci-st.c +F: drivers/watchdog/st_lpc_wdt.c +F: include/linux/remoteproc/st_slim_rproc.h + +ARM/STM32 ARCHITECTURE +M: Maxime Coquelin +M: Alexandre Torgue +L: linux-stm32@st-md-mailman.stormreply.com (moderated for non-subscribers) +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/atorgue/stm32.git stm32-next +F: arch/arm/boot/dts/stm32* +F: arch/arm/mach-stm32/ +F: drivers/clocksource/armv7m_systick.c +N: stm32 +N: stm + +ARM/Synaptics SoC support +M: Jisheng Zhang +M: Sebastian Hesselbarth +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +F: arch/arm/boot/dts/berlin* +F: arch/arm/mach-berlin/ +F: arch/arm64/boot/dts/synaptics/ + +ARM/TECHNOLOGIC SYSTEMS TS7250 MACHINE SUPPORT +M: Lennert Buytenhek +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained + +ARM/TEGRA HDMI CEC SUBSYSTEM SUPPORT +M: Hans Verkuil +L: linux-tegra@vger.kernel.org +L: linux-media@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/media/tegra-cec.txt +F: drivers/media/cec/platform/tegra/ + +ARM/TETON BGA MACHINE SUPPORT +M: "Mark F. Brown" +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained + +ARM/TEXAS INSTRUMENT AEMIF/EMIF DRIVERS +M: Santosh Shilimkar +L: linux-kernel@vger.kernel.org +S: Maintained +F: drivers/memory/*emif* + +ARM/TEXAS INSTRUMENT KEYSTONE ARCHITECTURE +M: Santosh Shilimkar +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/ssantosh/linux-keystone.git +F: arch/arm/boot/dts/keystone-* +F: arch/arm/mach-keystone/ + +ARM/TEXAS INSTRUMENT KEYSTONE CLOCK FRAMEWORK +M: Santosh Shilimkar +L: linux-kernel@vger.kernel.org +S: Maintained +F: drivers/clk/keystone/ + +ARM/TEXAS INSTRUMENT KEYSTONE CLOCKSOURCE +M: Santosh Shilimkar +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +L: linux-kernel@vger.kernel.org +S: Maintained +F: drivers/clocksource/timer-keystone.c + +ARM/TEXAS INSTRUMENT KEYSTONE RESET DRIVER +M: Santosh Shilimkar +L: linux-kernel@vger.kernel.org +S: Maintained +F: drivers/power/reset/keystone-reset.c + +ARM/TEXAS INSTRUMENTS K3 ARCHITECTURE +M: Nishanth Menon +M: Vignesh Raghavendra +M: Tero Kristo +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Supported +F: Documentation/devicetree/bindings/arm/ti/k3.yaml +F: arch/arm64/boot/dts/ti/Makefile +F: arch/arm64/boot/dts/ti/k3-* +F: include/dt-bindings/pinctrl/k3.h + +ARM/THECUS N2100 MACHINE SUPPORT +M: Lennert Buytenhek +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained + +ARM/TOSA MACHINE SUPPORT +M: Dmitry Eremin-Solenikov +M: Dirk Opfer +S: Maintained + +ARM/TOSHIBA VISCONTI ARCHITECTURE +M: Nobuhiro Iwamatsu +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Supported +T: git git://git.kernel.org/pub/scm/linux/kernel/git/iwamatsu/linux-visconti.git +F: Documentation/devicetree/bindings/arm/toshiba.yaml +F: Documentation/devicetree/bindings/net/toshiba,visconti-dwmac.yaml +F: Documentation/devicetree/bindings/gpio/toshiba,gpio-visconti.yaml +F: Documentation/devicetree/bindings/pci/toshiba,visconti-pcie.yaml +F: Documentation/devicetree/bindings/pinctrl/toshiba,tmpv7700-pinctrl.yaml +F: Documentation/devicetree/bindings/watchdog/toshiba,visconti-wdt.yaml +F: arch/arm64/boot/dts/toshiba/ +F: drivers/net/ethernet/stmicro/stmmac/dwmac-visconti.c +F: drivers/gpio/gpio-visconti.c +F: drivers/pci/controller/dwc/pcie-visconti.c +F: drivers/pinctrl/visconti/ +F: drivers/watchdog/visconti_wdt.c +N: visconti + +ARM/UNIPHIER ARCHITECTURE +M: Kunihiko Hayashi +M: Masami Hiramatsu +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +F: Documentation/devicetree/bindings/arm/socionext/uniphier.yaml +F: Documentation/devicetree/bindings/gpio/socionext,uniphier-gpio.yaml +F: Documentation/devicetree/bindings/pinctrl/socionext,uniphier-pinctrl.yaml +F: arch/arm/boot/dts/uniphier* +F: arch/arm/include/asm/hardware/cache-uniphier.h +F: arch/arm/mach-uniphier/ +F: arch/arm/mm/cache-uniphier.c +F: arch/arm64/boot/dts/socionext/uniphier* +F: drivers/bus/uniphier-system-bus.c +F: drivers/clk/uniphier/ +F: drivers/dma/uniphier-mdmac.c +F: drivers/gpio/gpio-uniphier.c +F: drivers/i2c/busses/i2c-uniphier* +F: drivers/irqchip/irq-uniphier-aidet.c +F: drivers/mmc/host/uniphier-sd.c +F: drivers/pinctrl/uniphier/ +F: drivers/reset/reset-uniphier.c +F: drivers/tty/serial/8250/8250_uniphier.c +N: uniphier + +ARM/VERSATILE EXPRESS PLATFORM +M: Liviu Dudau +M: Sudeep Holla +M: Lorenzo Pieralisi +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +F: */*/*/vexpress* +F: */*/vexpress* +F: arch/arm/boot/dts/vexpress* +F: arch/arm/mach-vexpress/ +F: arch/arm64/boot/dts/arm/ +F: drivers/clk/versatile/clk-vexpress-osc.c +F: drivers/clocksource/timer-versatile.c +N: mps2 + +ARM/VFP SUPPORT +M: Russell King +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +W: http://www.armlinux.org.uk/ +F: arch/arm/vfp/ + +ARM/VOIPAC PXA270 SUPPORT +M: Marek Vasut +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +F: arch/arm/mach-pxa/include/mach/vpac270.h +F: arch/arm/mach-pxa/vpac270.c + +ARM/VT8500 ARM ARCHITECTURE +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Orphan +F: Documentation/devicetree/bindings/i2c/i2c-wmt.txt +F: arch/arm/mach-vt8500/ +F: drivers/clocksource/timer-vt8500.c +F: drivers/i2c/busses/i2c-wmt.c +F: drivers/mmc/host/wmt-sdmmc.c +F: drivers/pwm/pwm-vt8500.c +F: drivers/rtc/rtc-vt8500.c +F: drivers/tty/serial/vt8500_serial.c +F: drivers/usb/host/ehci-platform.c +F: drivers/usb/host/uhci-platform.c +F: drivers/video/fbdev/vt8500lcdfb.* +F: drivers/video/fbdev/wm8505fb* +F: drivers/video/fbdev/wmt_ge_rops.* + +ARM/ZIPIT Z2 SUPPORT +M: Marek Vasut +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +F: arch/arm/mach-pxa/include/mach/z2.h +F: arch/arm/mach-pxa/z2.c + +ARM/ZYNQ ARCHITECTURE +M: Michal Simek +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Supported +W: http://wiki.xilinx.com +T: git https://github.com/Xilinx/linux-xlnx.git +F: Documentation/devicetree/bindings/i2c/cdns,i2c-r1p10.yaml +F: Documentation/devicetree/bindings/i2c/xlnx,xps-iic-2.00.a.yaml +F: Documentation/devicetree/bindings/spi/xlnx,zynq-qspi.yaml +F: arch/arm/mach-zynq/ +F: drivers/clocksource/timer-cadence-ttc.c +F: drivers/cpuidle/cpuidle-zynq.c +F: drivers/edac/synopsys_edac.c +F: drivers/i2c/busses/i2c-cadence.c +F: drivers/i2c/busses/i2c-xiic.c +F: drivers/mmc/host/sdhci-of-arasan.c +N: zynq +N: xilinx + +ARM64 PORT (AARCH64 ARCHITECTURE) +M: Catalin Marinas +M: Will Deacon +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux.git +F: Documentation/arm64/ +F: arch/arm64/ +F: tools/testing/selftests/arm64/ +X: arch/arm64/boot/dts/ + +ARROW SPEEDCHIPS XRS7000 SERIES ETHERNET SWITCH DRIVER +M: George McCollister +L: netdev@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/net/dsa/arrow,xrs700x.yaml +F: drivers/net/dsa/xrs700x/* +F: net/dsa/tag_xrs700x.c + +AS3645A LED FLASH CONTROLLER DRIVER +M: Sakari Ailus +L: linux-leds@vger.kernel.org +S: Maintained +F: drivers/leds/flash/leds-as3645a.c + +ASAHI KASEI AK7375 LENS VOICE COIL DRIVER +M: Tianshu Qiu +L: linux-media@vger.kernel.org +S: Maintained +T: git git://linuxtv.org/media_tree.git +F: Documentation/devicetree/bindings/media/i2c/ak7375.txt +F: drivers/media/i2c/ak7375.c + +ASAHI KASEI AK8974 DRIVER +M: Linus Walleij +L: linux-iio@vger.kernel.org +S: Supported +W: http://www.akm.com/ +F: drivers/iio/magnetometer/ak8974.c + +ASC7621 HARDWARE MONITOR DRIVER +M: George Joseph +L: linux-hwmon@vger.kernel.org +S: Maintained +F: Documentation/hwmon/asc7621.rst +F: drivers/hwmon/asc7621.c + +ASPEED PINCTRL DRIVERS +M: Andrew Jeffery +L: linux-aspeed@lists.ozlabs.org (moderated for non-subscribers) +L: openbmc@lists.ozlabs.org (moderated for non-subscribers) +L: linux-gpio@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/pinctrl/aspeed,* +F: drivers/pinctrl/aspeed/ + +ASPEED SCU INTERRUPT CONTROLLER DRIVER +M: Eddie James +L: linux-aspeed@lists.ozlabs.org (moderated for non-subscribers) +S: Maintained +F: Documentation/devicetree/bindings/interrupt-controller/aspeed,ast2xxx-scu-ic.txt +F: drivers/irqchip/irq-aspeed-scu-ic.c +F: include/dt-bindings/interrupt-controller/aspeed-scu-ic.h + +ASPEED SD/MMC DRIVER +M: Andrew Jeffery +L: linux-aspeed@lists.ozlabs.org (moderated for non-subscribers) +L: openbmc@lists.ozlabs.org (moderated for non-subscribers) +L: linux-mmc@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/mmc/aspeed,sdhci.yaml +F: drivers/mmc/host/sdhci-of-aspeed* + +ASPEED VIDEO ENGINE DRIVER +M: Eddie James +L: linux-media@vger.kernel.org +L: openbmc@lists.ozlabs.org (moderated for non-subscribers) +S: Maintained +F: Documentation/devicetree/bindings/media/aspeed-video.txt +F: drivers/media/platform/aspeed-video.c + +ASUS NOTEBOOKS AND EEEPC ACPI/WMI EXTRAS DRIVERS +M: Corentin Chary +L: acpi4asus-user@lists.sourceforge.net +L: platform-driver-x86@vger.kernel.org +S: Maintained +W: http://acpi4asus.sf.net +F: drivers/platform/x86/asus*.c +F: drivers/platform/x86/eeepc*.c + +ASUS WIRELESS RADIO CONTROL DRIVER +M: João Paulo Rechi Vita +L: platform-driver-x86@vger.kernel.org +S: Maintained +F: drivers/platform/x86/asus-wireless.c + +ASYMMETRIC KEYS +M: David Howells +L: keyrings@vger.kernel.org +S: Maintained +F: Documentation/crypto/asymmetric-keys.rst +F: crypto/asymmetric_keys/ +F: include/crypto/pkcs7.h +F: include/crypto/public_key.h +F: include/linux/verification.h + +ASYNCHRONOUS TRANSFERS/TRANSFORMS (IOAT) API +R: Dan Williams +S: Odd fixes +W: http://sourceforge.net/projects/xscaleiop +F: Documentation/crypto/async-tx-api.rst +F: crypto/async_tx/ +F: include/linux/async_tx.h + +AT24 EEPROM DRIVER +M: Bartosz Golaszewski +L: linux-i2c@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/brgl/linux.git +F: Documentation/devicetree/bindings/eeprom/at24.yaml +F: drivers/misc/eeprom/at24.c + +ATA OVER ETHERNET (AOE) DRIVER +M: "Justin Sanders" +S: Supported +W: http://www.openaoe.org/ +F: Documentation/admin-guide/aoe/ +F: drivers/block/aoe/ + +ATC260X PMIC MFD DRIVER +M: Manivannan Sadhasivam +M: Cristian Ciocaltea +L: linux-actions@lists.infradead.org +S: Maintained +F: Documentation/devicetree/bindings/mfd/actions,atc260x.yaml +F: drivers/input/misc/atc260x-onkey.c +F: drivers/mfd/atc260* +F: drivers/power/reset/atc260x-poweroff.c +F: drivers/regulator/atc260x-regulator.c +F: include/linux/mfd/atc260x/* + +ATHEROS 71XX/9XXX GPIO DRIVER +M: Alban Bedel +S: Maintained +W: https://github.com/AlbanBedel/linux +T: git git://github.com/AlbanBedel/linux +F: Documentation/devicetree/bindings/gpio/gpio-ath79.txt +F: drivers/gpio/gpio-ath79.c + +ATHEROS 71XX/9XXX USB PHY DRIVER +M: Alban Bedel +S: Maintained +W: https://github.com/AlbanBedel/linux +T: git git://github.com/AlbanBedel/linux +F: Documentation/devicetree/bindings/phy/phy-ath79-usb.txt +F: drivers/phy/qualcomm/phy-ath79-usb.c + +ATHEROS ATH GENERIC UTILITIES +M: Kalle Valo +L: linux-wireless@vger.kernel.org +S: Supported +F: drivers/net/wireless/ath/* + +ATHEROS ATH5K WIRELESS DRIVER +M: Jiri Slaby +M: Nick Kossifidis +M: Luis Chamberlain +L: linux-wireless@vger.kernel.org +S: Maintained +W: https://wireless.wiki.kernel.org/en/users/Drivers/ath5k +F: drivers/net/wireless/ath/ath5k/ + +ATHEROS ATH6KL WIRELESS DRIVER +M: Kalle Valo +L: linux-wireless@vger.kernel.org +S: Supported +W: https://wireless.wiki.kernel.org/en/users/Drivers/ath6kl +T: git git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git +F: drivers/net/wireless/ath/ath6kl/ + +ATI_REMOTE2 DRIVER +M: Ville Syrjala +S: Maintained +F: drivers/input/misc/ati_remote2.c + +ATK0110 HWMON DRIVER +M: Luca Tettamanti +L: linux-hwmon@vger.kernel.org +S: Maintained +F: drivers/hwmon/asus_atk0110.c + +ATLX ETHERNET DRIVERS +M: Chris Snook +L: netdev@vger.kernel.org +S: Maintained +W: http://sourceforge.net/projects/atl1 +W: http://atl1.sourceforge.net +F: drivers/net/ethernet/atheros/ + +ATM +M: Chas Williams <3chas3@gmail.com> +L: linux-atm-general@lists.sourceforge.net (moderated for non-subscribers) +L: netdev@vger.kernel.org +S: Maintained +W: http://linux-atm.sourceforge.net +F: drivers/atm/ +F: include/linux/atm* +F: include/uapi/linux/atm* + +ATMEL MACB ETHERNET DRIVER +M: Nicolas Ferre +M: Claudiu Beznea +S: Supported +F: drivers/net/ethernet/cadence/ + +ATMEL MAXTOUCH DRIVER +M: Nick Dyer +S: Maintained +T: git git://github.com/ndyer/linux.git +F: Documentation/devicetree/bindings/input/atmel,maxtouch.yaml +F: drivers/input/touchscreen/atmel_mxt_ts.c + +ATMEL WIRELESS DRIVER +M: Simon Kelley +L: linux-wireless@vger.kernel.org +S: Maintained +W: http://www.thekelleys.org.uk/atmel +W: http://atmelwlandriver.sourceforge.net/ +F: drivers/net/wireless/atmel/atmel* + +ATOMIC INFRASTRUCTURE +M: Will Deacon +M: Peter Zijlstra +R: Boqun Feng +L: linux-kernel@vger.kernel.org +S: Maintained +F: arch/*/include/asm/atomic*.h +F: include/*/atomic*.h +F: include/linux/refcount.h +F: Documentation/atomic_*.txt +F: scripts/atomic/ + +ATTO EXPRESSSAS SAS/SATA RAID SCSI DRIVER +M: Bradley Grove +L: linux-scsi@vger.kernel.org +S: Supported +W: http://www.attotech.com +F: drivers/scsi/esas2r + +ATUSB IEEE 802.15.4 RADIO DRIVER +M: Stefan Schmidt +L: linux-wpan@vger.kernel.org +S: Maintained +F: drivers/net/ieee802154/at86rf230.h +F: drivers/net/ieee802154/atusb.c +F: drivers/net/ieee802154/atusb.h + +AUDIT SUBSYSTEM +M: Paul Moore +M: Eric Paris +L: linux-audit@redhat.com (moderated for non-subscribers) +S: Supported +W: https://github.com/linux-audit +T: git git://git.kernel.org/pub/scm/linux/kernel/git/pcmoore/audit.git +F: include/asm-generic/audit_*.h +F: include/linux/audit.h +F: include/uapi/linux/audit.h +F: kernel/audit* +F: lib/*audit.c + +AUXILIARY DISPLAY DRIVERS +M: Miguel Ojeda +S: Maintained +F: drivers/auxdisplay/ +F: include/linux/cfag12864b.h + +AVIA HX711 ANALOG DIGITAL CONVERTER IIO DRIVER +M: Andreas Klinger +L: linux-iio@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/iio/adc/avia-hx711.yaml +F: drivers/iio/adc/hx711.c + +AX.25 NETWORK LAYER +M: Ralf Baechle +L: linux-hams@vger.kernel.org +S: Maintained +W: http://www.linux-ax25.org/ +F: include/net/ax25.h +F: include/uapi/linux/ax25.h +F: net/ax25/ + +AXENTIA ARM DEVICES +M: Peter Rosin +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +F: arch/arm/boot/dts/at91-linea.dtsi +F: arch/arm/boot/dts/at91-natte.dtsi +F: arch/arm/boot/dts/at91-nattis-2-natte-2.dts +F: arch/arm/boot/dts/at91-tse850-3.dts + +AXENTIA ASOC DRIVERS +M: Peter Rosin +L: alsa-devel@alsa-project.org (moderated for non-subscribers) +S: Maintained +F: Documentation/devicetree/bindings/sound/axentia,* +F: sound/soc/atmel/tse850-pcm5142.c + +AXI-FAN-CONTROL HARDWARE MONITOR DRIVER +M: Nuno Sá +L: linux-hwmon@vger.kernel.org +S: Supported +W: http://ez.analog.com/community/linux-device-drivers +F: Documentation/devicetree/bindings/hwmon/adi,axi-fan-control.yaml +F: drivers/hwmon/axi-fan-control.c + +AXXIA I2C CONTROLLER +M: Krzysztof Adamski +L: linux-i2c@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/i2c/i2c-axxia.txt +F: drivers/i2c/busses/i2c-axxia.c + +AZ6007 DVB DRIVER +M: Mauro Carvalho Chehab +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +T: git git://linuxtv.org/media_tree.git +F: drivers/media/usb/dvb-usb-v2/az6007.c + +AZTECH FM RADIO RECEIVER DRIVER +M: Hans Verkuil +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +T: git git://linuxtv.org/media_tree.git +F: drivers/media/radio/radio-aztech* + +B43 WIRELESS DRIVER +L: linux-wireless@vger.kernel.org +L: b43-dev@lists.infradead.org +S: Odd Fixes +W: https://wireless.wiki.kernel.org/en/users/Drivers/b43 +F: drivers/net/wireless/broadcom/b43/ + +B43LEGACY WIRELESS DRIVER +M: Larry Finger +L: linux-wireless@vger.kernel.org +L: b43-dev@lists.infradead.org +S: Maintained +W: https://wireless.wiki.kernel.org/en/users/Drivers/b43 +F: drivers/net/wireless/broadcom/b43legacy/ + +BACKLIGHT CLASS/SUBSYSTEM +M: Lee Jones +M: Daniel Thompson +M: Jingoo Han +L: dri-devel@lists.freedesktop.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/lee/backlight.git +F: Documentation/ABI/stable/sysfs-class-backlight +F: Documentation/ABI/testing/sysfs-class-backlight +F: Documentation/devicetree/bindings/leds/backlight +F: drivers/video/backlight/ +F: include/linux/backlight.h +F: include/linux/pwm_backlight.h + +BATMAN ADVANCED +M: Marek Lindner +M: Simon Wunderlich +M: Antonio Quartulli +M: Sven Eckelmann +L: b.a.t.m.a.n@lists.open-mesh.org (moderated for non-subscribers) +S: Maintained +W: https://www.open-mesh.org/ +Q: https://patchwork.open-mesh.org/project/batman/list/ +B: https://www.open-mesh.org/projects/batman-adv/issues +C: ircs://irc.hackint.org/batadv +T: git https://git.open-mesh.org/linux-merge.git +F: Documentation/networking/batman-adv.rst +F: include/uapi/linux/batadv_packet.h +F: include/uapi/linux/batman_adv.h +F: net/batman-adv/ + +BAYCOM/HDLCDRV DRIVERS FOR AX.25 +M: Thomas Sailer +L: linux-hams@vger.kernel.org +S: Maintained +W: http://www.baycom.org/~tom/ham/ham.html +F: drivers/net/hamradio/baycom* + +BCACHE (BLOCK LAYER CACHE) +M: Coly Li +M: Kent Overstreet +L: linux-bcache@vger.kernel.org +S: Maintained +W: http://bcache.evilpiepirate.org +C: irc://irc.oftc.net/bcache +F: drivers/md/bcache/ + +BDISP ST MEDIA DRIVER +M: Fabien Dessenne +L: linux-media@vger.kernel.org +S: Supported +W: https://linuxtv.org +T: git git://linuxtv.org/media_tree.git +F: drivers/media/platform/sti/bdisp + +BECKHOFF CX5020 ETHERCAT MASTER DRIVER +M: Dariusz Marcinkiewicz +L: netdev@vger.kernel.org +S: Maintained +F: drivers/net/ethernet/ec_bhf.c + +BEFS FILE SYSTEM +M: Luis de Bethencourt +M: Salah Triki +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/luisbg/linux-befs.git +F: Documentation/filesystems/befs.rst +F: fs/befs/ + +BFQ I/O SCHEDULER +M: Paolo Valente +M: Jens Axboe +L: linux-block@vger.kernel.org +S: Maintained +F: Documentation/block/bfq-iosched.rst +F: block/bfq-* + +BFS FILE SYSTEM +M: "Tigran A. Aivazian" +S: Maintained +F: Documentation/filesystems/bfs.rst +F: fs/bfs/ +F: include/uapi/linux/bfs_fs.h + +BITMAP API +M: Yury Norov +R: Andy Shevchenko +R: Rasmus Villemoes +S: Maintained +F: include/asm-generic/bitops/find.h +F: include/linux/bitmap.h +F: lib/bitmap.c +F: lib/find_bit.c +F: lib/find_bit_benchmark.c +F: lib/test_bitmap.c +F: tools/include/asm-generic/bitops/find.h +F: tools/include/linux/bitmap.h +F: tools/lib/bitmap.c +F: tools/lib/find_bit.c + +BLINKM RGB LED DRIVER +M: Jan-Simon Moeller +S: Maintained +F: drivers/leds/leds-blinkm.c + +BLOCK LAYER +M: Jens Axboe +L: linux-block@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-block.git +F: block/ +F: drivers/block/ +F: include/linux/blk* +F: kernel/trace/blktrace.c +F: lib/sbitmap.c + +BLOCK2MTD DRIVER +M: Joern Engel +L: linux-mtd@lists.infradead.org +S: Maintained +F: drivers/mtd/devices/block2mtd.c + +BLUETOOTH DRIVERS +M: Marcel Holtmann +M: Johan Hedberg +M: Luiz Augusto von Dentz +L: linux-bluetooth@vger.kernel.org +S: Supported +W: http://www.bluez.org/ +T: git git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth.git +T: git git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth-next.git +F: drivers/bluetooth/ + +BLUETOOTH SUBSYSTEM +M: Marcel Holtmann +M: Johan Hedberg +M: Luiz Augusto von Dentz +L: linux-bluetooth@vger.kernel.org +S: Supported +W: http://www.bluez.org/ +T: git git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth.git +T: git git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth-next.git +F: include/net/bluetooth/ +F: net/bluetooth/ + +BONDING DRIVER +M: Jay Vosburgh +M: Veaceslav Falico +M: Andy Gospodarek +L: netdev@vger.kernel.org +S: Supported +W: http://sourceforge.net/projects/bonding/ +F: drivers/net/bonding/ +F: include/net/bonding.h +F: include/uapi/linux/if_bonding.h + +BOSCH SENSORTEC BMA400 ACCELEROMETER IIO DRIVER +M: Dan Robertson +L: linux-iio@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/iio/accel/bosch,bma400.yaml +F: drivers/iio/accel/bma400* + +BPF (Safe dynamic programs and tools) +M: Alexei Starovoitov +M: Daniel Borkmann +M: Andrii Nakryiko +R: Martin KaFai Lau +R: Song Liu +R: Yonghong Song +R: John Fastabend +R: KP Singh +L: netdev@vger.kernel.org +L: bpf@vger.kernel.org +S: Supported +W: https://bpf.io/ +Q: https://patchwork.kernel.org/project/netdevbpf/list/?delegate=121173 +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 +F: Documentation/bpf/ +F: Documentation/networking/filter.rst +F: Documentation/userspace-api/ebpf/ +F: arch/*/net/* +F: include/linux/bpf* +F: include/linux/btf* +F: include/linux/filter.h +F: include/trace/events/xdp.h +F: include/uapi/linux/bpf* +F: include/uapi/linux/btf* +F: include/uapi/linux/filter.h +F: kernel/bpf/ +F: kernel/trace/bpf_trace.c +F: lib/test_bpf.c +F: net/bpf/ +F: net/core/filter.c +F: net/sched/act_bpf.c +F: net/sched/cls_bpf.c +F: samples/bpf/ +F: scripts/bpf_doc.py +F: tools/bpf/ +F: tools/lib/bpf/ +F: tools/testing/selftests/bpf/ +N: bpf +K: bpf + +BPF JIT for ARM +M: Shubham Bansal +L: netdev@vger.kernel.org +L: bpf@vger.kernel.org +S: Maintained +F: arch/arm/net/ + +BPF JIT for ARM64 +M: Daniel Borkmann +M: Alexei Starovoitov +M: Zi Shen Lim +L: netdev@vger.kernel.org +L: bpf@vger.kernel.org +S: Supported +F: arch/arm64/net/ + +BPF JIT for MIPS (32-BIT AND 64-BIT) +M: Paul Burton +L: netdev@vger.kernel.org +L: bpf@vger.kernel.org +S: Maintained +F: arch/mips/net/ + +BPF JIT for NFP NICs +M: Jakub Kicinski +L: netdev@vger.kernel.org +L: bpf@vger.kernel.org +S: Supported +F: drivers/net/ethernet/netronome/nfp/bpf/ + +BPF JIT for POWERPC (32-BIT AND 64-BIT) +M: Naveen N. Rao +L: netdev@vger.kernel.org +L: bpf@vger.kernel.org +S: Maintained +F: arch/powerpc/net/ + +BPF JIT for RISC-V (32-bit) +M: Luke Nelson +M: Xi Wang +L: netdev@vger.kernel.org +L: bpf@vger.kernel.org +S: Maintained +F: arch/riscv/net/ +X: arch/riscv/net/bpf_jit_comp64.c + +BPF JIT for RISC-V (64-bit) +M: Björn Töpel +L: netdev@vger.kernel.org +L: bpf@vger.kernel.org +S: Maintained +F: arch/riscv/net/ +X: arch/riscv/net/bpf_jit_comp32.c + +BPF JIT for S390 +M: Ilya Leoshkevich +M: Heiko Carstens +M: Vasily Gorbik +L: netdev@vger.kernel.org +L: bpf@vger.kernel.org +S: Maintained +F: arch/s390/net/ +X: arch/s390/net/pnet.c + +BPF JIT for SPARC (32-BIT AND 64-BIT) +M: David S. Miller +L: netdev@vger.kernel.org +L: bpf@vger.kernel.org +S: Maintained +F: arch/sparc/net/ + +BPF JIT for X86 32-BIT +M: Wang YanQing +L: netdev@vger.kernel.org +L: bpf@vger.kernel.org +S: Maintained +F: arch/x86/net/bpf_jit_comp32.c + +BPF JIT for X86 64-BIT +M: Alexei Starovoitov +M: Daniel Borkmann +L: netdev@vger.kernel.org +L: bpf@vger.kernel.org +S: Supported +F: arch/x86/net/ +X: arch/x86/net/bpf_jit_comp32.c + +BPF LSM (Security Audit and Enforcement using BPF) +M: KP Singh +R: Florent Revest +R: Brendan Jackman +L: bpf@vger.kernel.org +S: Maintained +F: Documentation/bpf/bpf_lsm.rst +F: include/linux/bpf_lsm.h +F: kernel/bpf/bpf_lsm.c +F: security/bpf/ + +BROADCOM B44 10/100 ETHERNET DRIVER +M: Michael Chan +L: netdev@vger.kernel.org +S: Supported +F: drivers/net/ethernet/broadcom/b44.* + +BROADCOM B53 ETHERNET SWITCH DRIVER +M: Florian Fainelli +L: netdev@vger.kernel.org +L: openwrt-devel@lists.openwrt.org (subscribers-only) +S: Supported +F: Documentation/devicetree/bindings/net/dsa/brcm,b53.yaml +F: drivers/net/dsa/b53/* +F: include/linux/dsa/brcm.h +F: include/linux/platform_data/b53.h + +BROADCOM BCM2711/BCM2835 ARM ARCHITECTURE +M: Nicolas Saenz Julienne +L: bcm-kernel-feedback-list@broadcom.com +L: linux-rpi-kernel@lists.infradead.org (moderated for non-subscribers) +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/nsaenz/linux-rpi.git +F: Documentation/devicetree/bindings/pci/brcm,stb-pcie.yaml +F: drivers/pci/controller/pcie-brcmstb.c +F: drivers/staging/vc04_services +N: bcm2711 +N: bcm283* + +BROADCOM BCM281XX/BCM11XXX/BCM216XX ARM ARCHITECTURE +M: Florian Fainelli +M: Ray Jui +M: Scott Branden +M: bcm-kernel-feedback-list@broadcom.com +S: Maintained +T: git git://github.com/broadcom/mach-bcm +F: arch/arm/mach-bcm/ +N: bcm281* +N: bcm113* +N: bcm216* +N: kona + +BROADCOM BCM47XX MIPS ARCHITECTURE +M: Hauke Mehrtens +M: Rafał Miłecki +L: linux-mips@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/mips/brcm/ +F: arch/mips/bcm47xx/* +F: arch/mips/include/asm/mach-bcm47xx/* + +BROADCOM BCM4908 ETHERNET DRIVER +M: Rafał Miłecki +M: bcm-kernel-feedback-list@broadcom.com +L: netdev@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/net/brcm,bcm4908-enet.yaml +F: drivers/net/ethernet/broadcom/bcm4908_enet.* +F: drivers/net/ethernet/broadcom/unimac.h + +BROADCOM BCM5301X ARM ARCHITECTURE +M: Hauke Mehrtens +M: Rafał Miłecki +M: bcm-kernel-feedback-list@broadcom.com +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +F: arch/arm/boot/dts/bcm470* +F: arch/arm/boot/dts/bcm5301* +F: arch/arm/boot/dts/bcm953012* +F: arch/arm/mach-bcm/bcm_5301x.c + +BROADCOM BCM53573 ARM ARCHITECTURE +M: Rafał Miłecki +L: bcm-kernel-feedback-list@broadcom.com +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +F: arch/arm/boot/dts/bcm47189* +F: arch/arm/boot/dts/bcm53573* + +BROADCOM BCM63XX ARM ARCHITECTURE +M: Florian Fainelli +M: bcm-kernel-feedback-list@broadcom.com +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +T: git git://github.com/broadcom/stblinux.git +N: bcm63xx + +BROADCOM BCM63XX/BCM33XX UDC DRIVER +M: Kevin Cernekee +L: linux-usb@vger.kernel.org +S: Maintained +F: drivers/usb/gadget/udc/bcm63xx_udc.* + +BROADCOM BCM7XXX ARM ARCHITECTURE +M: Florian Fainelli +M: bcm-kernel-feedback-list@broadcom.com +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +T: git git://github.com/broadcom/stblinux.git +F: Documentation/devicetree/bindings/pci/brcm,stb-pcie.yaml +F: arch/arm/boot/dts/bcm7*.dts* +F: arch/arm/include/asm/hardware/cache-b15-rac.h +F: arch/arm/mach-bcm/*brcmstb* +F: arch/arm/mm/cache-b15-rac.c +F: drivers/bus/brcmstb_gisb.c +F: drivers/pci/controller/pcie-brcmstb.c +N: brcmstb + +BROADCOM BDC DRIVER +M: Al Cooper +L: linux-usb@vger.kernel.org +L: bcm-kernel-feedback-list@broadcom.com +S: Maintained +F: Documentation/devicetree/bindings/usb/brcm,bdc.txt +F: drivers/usb/gadget/udc/bdc/ + +BROADCOM BMIPS CPUFREQ DRIVER +M: Markus Mayer +M: bcm-kernel-feedback-list@broadcom.com +L: linux-pm@vger.kernel.org +S: Maintained +F: drivers/cpufreq/bmips-cpufreq.c + +BROADCOM BMIPS MIPS ARCHITECTURE +M: Florian Fainelli +L: bcm-kernel-feedback-list@broadcom.com +L: linux-mips@vger.kernel.org +S: Maintained +T: git git://github.com/broadcom/stblinux.git +F: arch/mips/bmips/* +F: arch/mips/boot/dts/brcm/bcm*.dts* +F: arch/mips/include/asm/mach-bmips/* +F: arch/mips/kernel/*bmips* +F: drivers/soc/bcm/bcm63xx +F: drivers/irqchip/irq-bcm63* +F: drivers/irqchip/irq-bcm7* +F: drivers/irqchip/irq-brcmstb* +F: include/linux/bcm963xx_nvram.h +F: include/linux/bcm963xx_tag.h + +BROADCOM BNX2 GIGABIT ETHERNET DRIVER +M: Rasesh Mody +M: GR-Linux-NIC-Dev@marvell.com +L: netdev@vger.kernel.org +S: Supported +F: drivers/net/ethernet/broadcom/bnx2.* +F: drivers/net/ethernet/broadcom/bnx2_* + +BROADCOM BNX2FC 10 GIGABIT FCOE DRIVER +M: Saurav Kashyap +M: Javed Hasan +M: GR-QLogic-Storage-Upstream@marvell.com +L: linux-scsi@vger.kernel.org +S: Supported +F: drivers/scsi/bnx2fc/ + +BROADCOM BNX2I 1/10 GIGABIT iSCSI DRIVER +M: Nilesh Javali +M: Manish Rangankar +M: GR-QLogic-Storage-Upstream@marvell.com +L: linux-scsi@vger.kernel.org +S: Supported +F: drivers/scsi/bnx2i/ + +BROADCOM BNX2X 10 GIGABIT ETHERNET DRIVER +M: Ariel Elior +M: Sudarsana Kalluru +M: GR-everest-linux-l2@marvell.com +L: netdev@vger.kernel.org +S: Supported +F: drivers/net/ethernet/broadcom/bnx2x/ + +BROADCOM BNXT_EN 50 GIGABIT ETHERNET DRIVER +M: Michael Chan +L: netdev@vger.kernel.org +S: Supported +F: drivers/net/ethernet/broadcom/bnxt/ + +BROADCOM BRCM80211 IEEE802.11n WIRELESS DRIVER +M: Arend van Spriel +M: Franky Lin +M: Hante Meuleman +M: Chi-hsien Lin +M: Wright Feng +M: Chung-hsien Hsu +L: linux-wireless@vger.kernel.org +L: brcm80211-dev-list.pdl@broadcom.com +L: SHA-cyfmac-dev-list@infineon.com +S: Supported +F: drivers/net/wireless/broadcom/brcm80211/ + +BROADCOM BRCMSTB GPIO DRIVER +M: Gregory Fong +L: bcm-kernel-feedback-list@broadcom.com +S: Supported +F: Documentation/devicetree/bindings/gpio/brcm,brcmstb-gpio.txt +F: drivers/gpio/gpio-brcmstb.c + +BROADCOM BRCMSTB I2C DRIVER +M: Kamal Dasu +L: linux-i2c@vger.kernel.org +L: bcm-kernel-feedback-list@broadcom.com +S: Supported +F: Documentation/devicetree/bindings/i2c/brcm,brcmstb-i2c.yaml +F: drivers/i2c/busses/i2c-brcmstb.c + +BROADCOM BRCMSTB UART DRIVER +M: Al Cooper +L: linux-serial@vger.kernel.org +L: bcm-kernel-feedback-list@broadcom.com +S: Maintained +F: Documentation/devicetree/bindings/serial/brcm,bcm7271-uart.yaml +F: drivers/tty/serial/8250/8250_bcm7271.c + +BROADCOM BRCMSTB USB EHCI DRIVER +M: Al Cooper +L: linux-usb@vger.kernel.org +L: bcm-kernel-feedback-list@broadcom.com +S: Maintained +F: Documentation/devicetree/bindings/usb/brcm,bcm7445-ehci.yaml +F: drivers/usb/host/ehci-brcm.* + +BROADCOM BRCMSTB USB PIN MAP DRIVER +M: Al Cooper +L: linux-usb@vger.kernel.org +L: bcm-kernel-feedback-list@broadcom.com +S: Maintained +F: Documentation/devicetree/bindings/usb/brcm,usb-pinmap.yaml +F: drivers/usb/misc/brcmstb-usb-pinmap.c + +BROADCOM BRCMSTB USB2 and USB3 PHY DRIVER +M: Al Cooper +L: linux-kernel@vger.kernel.org +L: bcm-kernel-feedback-list@broadcom.com +S: Maintained +F: drivers/phy/broadcom/phy-brcm-usb* + +BROADCOM ETHERNET PHY DRIVERS +M: Florian Fainelli +L: bcm-kernel-feedback-list@broadcom.com +L: netdev@vger.kernel.org +S: Supported +F: Documentation/devicetree/bindings/net/broadcom-bcm87xx.txt +F: drivers/net/phy/bcm*.[ch] +F: drivers/net/phy/broadcom.c +F: include/linux/brcmphy.h + +BROADCOM GENET ETHERNET DRIVER +M: Doug Berger +M: Florian Fainelli +L: bcm-kernel-feedback-list@broadcom.com +L: netdev@vger.kernel.org +S: Supported +F: Documentation/devicetree/bindings/net/brcm,bcmgenet.txt +F: Documentation/devicetree/bindings/net/brcm,unimac-mdio.txt +F: drivers/net/ethernet/broadcom/genet/ +F: drivers/net/ethernet/broadcom/unimac.h +F: drivers/net/mdio/mdio-bcm-unimac.c +F: include/linux/platform_data/bcmgenet.h +F: include/linux/platform_data/mdio-bcm-unimac.h + +BROADCOM IPROC ARM ARCHITECTURE +M: Ray Jui +M: Scott Branden +M: bcm-kernel-feedback-list@broadcom.com +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +T: git git://github.com/broadcom/cygnus-linux.git +F: arch/arm64/boot/dts/broadcom/northstar2/* +F: arch/arm64/boot/dts/broadcom/stingray/* +F: drivers/clk/bcm/clk-ns* +F: drivers/clk/bcm/clk-sr* +F: drivers/pinctrl/bcm/pinctrl-ns* +F: include/dt-bindings/clock/bcm-sr* +N: iproc +N: cygnus +N: bcm[-_]nsp +N: bcm9113* +N: bcm9583* +N: bcm9585* +N: bcm9586* +N: bcm988312 +N: bcm113* +N: bcm583* +N: bcm585* +N: bcm586* +N: bcm88312 +N: hr2 +N: stingray + +BROADCOM IPROC GBIT ETHERNET DRIVER +M: Rafał Miłecki +M: bcm-kernel-feedback-list@broadcom.com +L: netdev@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/net/brcm,amac.txt +F: drivers/net/ethernet/broadcom/bgmac* +F: drivers/net/ethernet/broadcom/unimac.h + +BROADCOM KONA GPIO DRIVER +M: Ray Jui +L: bcm-kernel-feedback-list@broadcom.com +S: Supported +F: Documentation/devicetree/bindings/gpio/brcm,kona-gpio.txt +F: drivers/gpio/gpio-bcm-kona.c + +BROADCOM MPI3 STORAGE CONTROLLER DRIVER +M: Sathya Prakash Veerichetty +M: Kashyap Desai +M: Sumit Saxena +M: Sreekanth Reddy +L: mpi3mr-linuxdrv.pdl@broadcom.com +L: linux-scsi@vger.kernel.org +S: Supported +W: https://www.broadcom.com/support/storage +F: drivers/scsi/mpi3mr/ + +BROADCOM NETXTREME-E ROCE DRIVER +M: Selvin Xavier +L: linux-rdma@vger.kernel.org +S: Supported +W: http://www.broadcom.com +F: drivers/infiniband/hw/bnxt_re/ +F: include/uapi/rdma/bnxt_re-abi.h + +BROADCOM NVRAM DRIVER +M: Rafał Miłecki +L: linux-mips@vger.kernel.org +S: Maintained +F: drivers/firmware/broadcom/* + +BROADCOM PMB (POWER MANAGEMENT BUS) DRIVER +M: Rafał Miłecki +M: Florian Fainelli +M: bcm-kernel-feedback-list@broadcom.com +L: linux-pm@vger.kernel.org +S: Maintained +T: git git://github.com/broadcom/stblinux.git +F: drivers/soc/bcm/bcm63xx/bcm-pmb.c +F: include/dt-bindings/soc/bcm-pmb.h + +BROADCOM SPECIFIC AMBA DRIVER (BCMA) +M: Rafał Miłecki +L: linux-wireless@vger.kernel.org +S: Maintained +F: drivers/bcma/ +F: include/linux/bcma/ + +BROADCOM SPI DRIVER +M: Kamal Dasu +M: bcm-kernel-feedback-list@broadcom.com +S: Maintained +F: Documentation/devicetree/bindings/spi/brcm,spi-bcm-qspi.yaml +F: drivers/spi/spi-bcm-qspi.* +F: drivers/spi/spi-brcmstb-qspi.c +F: drivers/spi/spi-iproc-qspi.c + +BROADCOM STB AVS CPUFREQ DRIVER +M: Markus Mayer +M: bcm-kernel-feedback-list@broadcom.com +L: linux-pm@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/cpufreq/brcm,stb-avs-cpu-freq.txt +F: drivers/cpufreq/brcmstb* + +BROADCOM STB AVS TMON DRIVER +M: Markus Mayer +M: bcm-kernel-feedback-list@broadcom.com +L: linux-pm@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/thermal/brcm,avs-tmon.txt +F: drivers/thermal/broadcom/brcmstb* + +BROADCOM STB DPFE DRIVER +M: Markus Mayer +M: bcm-kernel-feedback-list@broadcom.com +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +F: Documentation/devicetree/bindings/memory-controllers/brcm,dpfe-cpu.yaml +F: drivers/memory/brcmstb_dpfe.c + +BROADCOM STB NAND FLASH DRIVER +M: Brian Norris +M: Kamal Dasu +L: linux-mtd@lists.infradead.org +L: bcm-kernel-feedback-list@broadcom.com +S: Maintained +F: drivers/mtd/nand/raw/brcmnand/ + +BROADCOM STB PCIE DRIVER +M: Jim Quinlan +M: Nicolas Saenz Julienne +M: Florian Fainelli +M: bcm-kernel-feedback-list@broadcom.com +L: linux-pci@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/pci/brcm,stb-pcie.yaml +F: drivers/pci/controller/pcie-brcmstb.c + +BROADCOM SYSTEMPORT ETHERNET DRIVER +M: Florian Fainelli +L: bcm-kernel-feedback-list@broadcom.com +L: netdev@vger.kernel.org +S: Supported +F: drivers/net/ethernet/broadcom/bcmsysport.* +F: drivers/net/ethernet/broadcom/unimac.h + +BROADCOM TG3 GIGABIT ETHERNET DRIVER +M: Siva Reddy Kallam +M: Prashant Sreedharan +M: Michael Chan +L: netdev@vger.kernel.org +S: Supported +F: drivers/net/ethernet/broadcom/tg3.* + +BROADCOM VK DRIVER +M: Scott Branden +L: bcm-kernel-feedback-list@broadcom.com +S: Supported +F: drivers/misc/bcm-vk/ +F: include/uapi/linux/misc/bcm_vk.h + +BROCADE BFA FC SCSI DRIVER +M: Anil Gurumurthy +M: Sudarsana Kalluru +L: linux-scsi@vger.kernel.org +S: Supported +F: drivers/scsi/bfa/ + +BROCADE BNA 10 GIGABIT ETHERNET DRIVER +M: Rasesh Mody +M: Sudarsana Kalluru +M: GR-Linux-NIC-Dev@marvell.com +L: netdev@vger.kernel.org +S: Supported +F: drivers/net/ethernet/brocade/bna/ + +BSG (block layer generic sg v4 driver) +M: FUJITA Tomonori +L: linux-scsi@vger.kernel.org +S: Supported +F: block/bsg.c +F: include/linux/bsg.h +F: include/uapi/linux/bsg.h + +BT87X AUDIO DRIVER +M: Clemens Ladisch +L: alsa-devel@alsa-project.org (moderated for non-subscribers) +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound.git +F: Documentation/sound/cards/bt87x.rst +F: sound/pci/bt87x.c + +BT8XXGPIO DRIVER +M: Michael Buesch +S: Maintained +W: http://bu3sch.de/btgpio.php +F: drivers/gpio/gpio-bt8xx.c + +BTRFS FILE SYSTEM +M: Chris Mason +M: Josef Bacik +M: David Sterba +L: linux-btrfs@vger.kernel.org +S: Maintained +W: http://btrfs.wiki.kernel.org/ +Q: http://patchwork.kernel.org/project/linux-btrfs/list/ +C: irc://irc.libera.chat/btrfs +T: git git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux.git +F: Documentation/filesystems/btrfs.rst +F: fs/btrfs/ +F: include/linux/btrfs* +F: include/uapi/linux/btrfs* + +BTTV VIDEO4LINUX DRIVER +M: Mauro Carvalho Chehab +L: linux-media@vger.kernel.org +S: Odd fixes +W: https://linuxtv.org +T: git git://linuxtv.org/media_tree.git +F: Documentation/driver-api/media/drivers/bttv* +F: drivers/media/pci/bt8xx/bttv* + +BUS FREQUENCY DRIVER FOR SAMSUNG EXYNOS +M: Chanwoo Choi +L: linux-pm@vger.kernel.org +L: linux-samsung-soc@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/chanwoo/linux.git +F: Documentation/devicetree/bindings/devfreq/exynos-bus.txt +F: drivers/devfreq/exynos-bus.c + +BUSLOGIC SCSI DRIVER +M: Khalid Aziz +L: linux-scsi@vger.kernel.org +S: Maintained +F: drivers/scsi/BusLogic.* +F: drivers/scsi/FlashPoint.* + +C-MEDIA CMI8788 DRIVER +M: Clemens Ladisch +L: alsa-devel@alsa-project.org (moderated for non-subscribers) +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound.git +F: sound/pci/oxygen/ + +C-SKY ARCHITECTURE +M: Guo Ren +L: linux-csky@vger.kernel.org +S: Supported +T: git https://github.com/c-sky/csky-linux.git +F: Documentation/devicetree/bindings/csky/ +F: Documentation/devicetree/bindings/interrupt-controller/csky,* +F: Documentation/devicetree/bindings/timer/csky,* +F: arch/csky/ +F: drivers/clocksource/timer-gx6605s.c +F: drivers/clocksource/timer-mp-csky.c +F: drivers/irqchip/irq-csky-* +N: csky +K: csky + +CA8210 IEEE-802.15.4 RADIO DRIVER +M: Harry Morris +L: linux-wpan@vger.kernel.org +S: Maintained +W: https://github.com/Cascoda/ca8210-linux.git +F: Documentation/devicetree/bindings/net/ieee802154/ca8210.txt +F: drivers/net/ieee802154/ca8210.c + +CANAAN/KENDRYTE K210 SOC FPIOA DRIVER +M: Damien Le Moal +L: linux-riscv@lists.infradead.org +L: linux-gpio@vger.kernel.org (pinctrl driver) +F: Documentation/devicetree/bindings/pinctrl/canaan,k210-fpioa.yaml +F: drivers/pinctrl/pinctrl-k210.c + +CANAAN/KENDRYTE K210 SOC RESET CONTROLLER DRIVER +M: Damien Le Moal +L: linux-kernel@vger.kernel.org +L: linux-riscv@lists.infradead.org +S: Maintained +F: Documentation/devicetree/bindings/reset/canaan,k210-rst.yaml +F: drivers/reset/reset-k210.c + +CANAAN/KENDRYTE K210 SOC SYSTEM CONTROLLER DRIVER +M: Damien Le Moal +L: linux-riscv@lists.infradead.org +S: Maintained +F: Documentation/devicetree/bindings/mfd/canaan,k210-sysctl.yaml +F: drivers/soc/canaan/ +F: include/soc/canaan/ + +CACHEFILES: FS-CACHE BACKEND FOR CACHING ON MOUNTED FILESYSTEMS +M: David Howells +L: linux-cachefs@redhat.com (moderated for non-subscribers) +S: Supported +F: Documentation/filesystems/caching/cachefiles.rst +F: fs/cachefiles/ + +CADENCE MIPI-CSI2 BRIDGES +M: Maxime Ripard +L: linux-media@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/media/cdns,*.txt +F: drivers/media/platform/cadence/cdns-csi2* + +CADENCE NAND DRIVER +L: linux-mtd@lists.infradead.org +S: Orphan +F: Documentation/devicetree/bindings/mtd/cadence-nand-controller.txt +F: drivers/mtd/nand/raw/cadence-nand-controller.c + +CADENCE USB3 DRD IP DRIVER +M: Peter Chen +M: Pawel Laszczak +R: Roger Quadros +R: Aswath Govindraju +L: linux-usb@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/peter.chen/usb.git +F: Documentation/devicetree/bindings/usb/cdns,usb3.yaml +F: drivers/usb/cdns3/ +X: drivers/usb/cdns3/cdnsp* + +CADENCE USBSSP DRD IP DRIVER +M: Pawel Laszczak +L: linux-usb@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/peter.chen/usb.git +F: drivers/usb/cdns3/ +X: drivers/usb/cdns3/cdns3* + +CADET FM/AM RADIO RECEIVER DRIVER +M: Hans Verkuil +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +T: git git://linuxtv.org/media_tree.git +F: drivers/media/radio/radio-cadet* + +CAFE CMOS INTEGRATED CAMERA CONTROLLER DRIVER +L: linux-media@vger.kernel.org +S: Orphan +T: git git://linuxtv.org/media_tree.git +F: Documentation/admin-guide/media/cafe_ccic* +F: drivers/media/platform/marvell-ccic/ + +CAIF NETWORK LAYER +L: netdev@vger.kernel.org +S: Orphan +F: Documentation/networking/caif/ +F: drivers/net/caif/ +F: include/net/caif/ +F: include/uapi/linux/caif/ +F: net/caif/ + +CAKE QDISC +M: Toke Høiland-Jørgensen +L: cake@lists.bufferbloat.net (moderated for non-subscribers) +S: Maintained +F: net/sched/sch_cake.c + +CAN NETWORK DRIVERS +M: Wolfgang Grandegger +M: Marc Kleine-Budde +L: linux-can@vger.kernel.org +S: Maintained +W: https://github.com/linux-can +T: git git://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can.git +T: git git://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can-next.git +F: Documentation/devicetree/bindings/net/can/ +F: Documentation/devicetree/bindings/phy/ti,tcan104x-can.yaml +F: drivers/net/can/ +F: drivers/phy/phy-can-transceiver.c +F: include/linux/can/bittiming.h +F: include/linux/can/dev.h +F: include/linux/can/led.h +F: include/linux/can/length.h +F: include/linux/can/platform/ +F: include/linux/can/rx-offload.h +F: include/uapi/linux/can/error.h +F: include/uapi/linux/can/netlink.h +F: include/uapi/linux/can/vxcan.h + +CAN NETWORK LAYER +M: Oliver Hartkopp +M: Marc Kleine-Budde +L: linux-can@vger.kernel.org +S: Maintained +W: https://github.com/linux-can +T: git git://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can.git +T: git git://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can-next.git +F: Documentation/networking/can.rst +F: include/linux/can/can-ml.h +F: include/linux/can/core.h +F: include/linux/can/skb.h +F: include/net/netns/can.h +F: include/uapi/linux/can.h +F: include/uapi/linux/can/bcm.h +F: include/uapi/linux/can/gw.h +F: include/uapi/linux/can/isotp.h +F: include/uapi/linux/can/raw.h +F: net/can/ + +CAN-J1939 NETWORK LAYER +M: Robin van der Gracht +M: Oleksij Rempel +R: kernel@pengutronix.de +L: linux-can@vger.kernel.org +S: Maintained +F: Documentation/networking/j1939.rst +F: include/uapi/linux/can/j1939.h +F: net/can/j1939/ + +CAPABILITIES +M: Serge Hallyn +L: linux-security-module@vger.kernel.org +S: Supported +F: include/linux/capability.h +F: include/uapi/linux/capability.h +F: kernel/capability.c +F: security/commoncap.c + +CAPELLA MICROSYSTEMS LIGHT SENSOR DRIVER +M: Kevin Tsai +S: Maintained +F: drivers/iio/light/cm* + +CARL9170 LINUX COMMUNITY WIRELESS DRIVER +M: Christian Lamparter +L: linux-wireless@vger.kernel.org +S: Maintained +W: https://wireless.wiki.kernel.org/en/users/Drivers/carl9170 +F: drivers/net/wireless/ath/carl9170/ + +CAVIUM I2C DRIVER +M: Robert Richter +S: Odd Fixes +W: http://www.marvell.com +F: drivers/i2c/busses/i2c-octeon* +F: drivers/i2c/busses/i2c-thunderx* + +CAVIUM LIQUIDIO NETWORK DRIVER +M: Derek Chickles +M: Satanand Burla +M: Felix Manlunas +L: netdev@vger.kernel.org +S: Supported +W: http://www.marvell.com +F: drivers/net/ethernet/cavium/liquidio/ + +CAVIUM MMC DRIVER +M: Robert Richter +S: Odd Fixes +W: http://www.marvell.com +F: drivers/mmc/host/cavium* + +CAVIUM OCTEON-TX CRYPTO DRIVER +M: George Cherian +L: linux-crypto@vger.kernel.org +S: Supported +W: http://www.marvell.com +F: drivers/crypto/cavium/cpt/ + +CAVIUM THUNDERX2 ARM64 SOC +M: Robert Richter +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Odd Fixes +F: Documentation/devicetree/bindings/arm/cavium-thunder2.txt +F: arch/arm64/boot/dts/cavium/thunder2-99xx* + +CBS/ETF/TAPRIO QDISCS +M: Vinicius Costa Gomes +S: Maintained +L: netdev@vger.kernel.org +F: net/sched/sch_cbs.c +F: net/sched/sch_etf.c +F: net/sched/sch_taprio.c + +CC2520 IEEE-802.15.4 RADIO DRIVER +M: Varka Bhadram +L: linux-wpan@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/net/ieee802154/cc2520.txt +F: drivers/net/ieee802154/cc2520.c +F: include/linux/spi/cc2520.h + +CCREE ARM TRUSTZONE CRYPTOCELL REE DRIVER +M: Gilad Ben-Yossef +L: linux-crypto@vger.kernel.org +S: Supported +W: https://developer.arm.com/products/system-ip/trustzone-cryptocell/cryptocell-700-family +F: drivers/crypto/ccree/ + +CCTRNG ARM TRUSTZONE CRYPTOCELL TRUE RANDOM NUMBER GENERATOR (TRNG) DRIVER +M: Hadar Gat +L: linux-crypto@vger.kernel.org +S: Supported +F: drivers/char/hw_random/cctrng.c +F: drivers/char/hw_random/cctrng.h +F: Documentation/devicetree/bindings/rng/arm-cctrng.yaml +W: https://developer.arm.com/products/system-ip/trustzone-cryptocell/cryptocell-700-family + +CEC FRAMEWORK +M: Hans Verkuil +L: linux-media@vger.kernel.org +S: Supported +W: http://linuxtv.org +T: git git://linuxtv.org/media_tree.git +F: Documentation/ABI/testing/debugfs-cec-error-inj +F: Documentation/devicetree/bindings/media/cec.txt +F: Documentation/driver-api/media/cec-core.rst +F: Documentation/userspace-api/media/cec +F: drivers/media/cec/ +F: drivers/media/rc/keymaps/rc-cec.c +F: include/media/cec-notifier.h +F: include/media/cec.h +F: include/uapi/linux/cec-funcs.h +F: include/uapi/linux/cec.h + +CEC GPIO DRIVER +M: Hans Verkuil +L: linux-media@vger.kernel.org +S: Supported +W: http://linuxtv.org +T: git git://linuxtv.org/media_tree.git +F: Documentation/devicetree/bindings/media/cec-gpio.txt +F: drivers/media/cec/platform/cec-gpio/ + +CELL BROADBAND ENGINE ARCHITECTURE +M: Arnd Bergmann +L: linuxppc-dev@lists.ozlabs.org +S: Supported +W: http://www.ibm.com/developerworks/power/cell/ +F: arch/powerpc/include/asm/cell*.h +F: arch/powerpc/include/asm/spu*.h +F: arch/powerpc/include/uapi/asm/spu*.h +F: arch/powerpc/platforms/cell/ + +CELLWISE CW2015 BATTERY DRIVER +M: Tobias Schrammm +S: Maintained +F: Documentation/devicetree/bindings/power/supply/cw2015_battery.yaml +F: drivers/power/supply/cw2015_battery.c + +CEPH COMMON CODE (LIBCEPH) +M: Ilya Dryomov +M: Jeff Layton +L: ceph-devel@vger.kernel.org +S: Supported +W: http://ceph.com/ +T: git git://github.com/ceph/ceph-client.git +F: include/linux/ceph/ +F: include/linux/crush/ +F: net/ceph/ + +CEPH DISTRIBUTED FILE SYSTEM CLIENT (CEPH) +M: Jeff Layton +M: Ilya Dryomov +L: ceph-devel@vger.kernel.org +S: Supported +W: http://ceph.com/ +T: git git://github.com/ceph/ceph-client.git +F: Documentation/filesystems/ceph.rst +F: fs/ceph/ + +CERTIFICATE HANDLING +M: David Howells +M: David Woodhouse +L: keyrings@vger.kernel.org +S: Maintained +F: Documentation/admin-guide/module-signing.rst +F: certs/ +F: scripts/extract-cert.c +F: scripts/sign-file.c + +CFAG12864B LCD DRIVER +M: Miguel Ojeda +S: Maintained +F: drivers/auxdisplay/cfag12864b.c +F: include/linux/cfag12864b.h + +CFAG12864BFB LCD FRAMEBUFFER DRIVER +M: Miguel Ojeda +S: Maintained +F: drivers/auxdisplay/cfag12864bfb.c +F: include/linux/cfag12864b.h + +CHAR and MISC DRIVERS +M: Arnd Bergmann +M: Greg Kroah-Hartman +S: Supported +T: git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc.git +F: drivers/char/ +F: drivers/misc/ +F: include/linux/miscdevice.h +X: drivers/char/agp/ +X: drivers/char/hw_random/ +X: drivers/char/ipmi/ +X: drivers/char/random.c +X: drivers/char/tpm/ + +CHECKPATCH +M: Andy Whitcroft +M: Joe Perches +R: Dwaipayan Ray +R: Lukas Bulwahn +S: Maintained +F: scripts/checkpatch.pl + +CHECKPATCH DOCUMENTATION +M: Dwaipayan Ray +M: Lukas Bulwahn +R: Joe Perches +S: Maintained +F: Documentation/dev-tools/checkpatch.rst + +CHINESE DOCUMENTATION +M: Alex Shi +S: Maintained +F: Documentation/translations/zh_CN/ + +CHIPIDEA USB HIGH SPEED DUAL ROLE CONTROLLER +M: Peter Chen +L: linux-usb@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/peter.chen/usb.git +F: drivers/usb/chipidea/ + +CHIPONE ICN8318 I2C TOUCHSCREEN DRIVER +M: Hans de Goede +L: linux-input@vger.kernel.org +S: Maintained +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 +L: linux-input@vger.kernel.org +S: Maintained +F: drivers/input/touchscreen/chipone_icn8505.c + +CHROME HARDWARE PLATFORM SUPPORT +M: Benson Leung +M: Enric Balletbo i Serra +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/chrome-platform/linux.git +F: drivers/platform/chrome/ + +CHROMEOS EC CODEC DRIVER +M: Cheng-Yi Chiang +R: Enric Balletbo i Serra +R: Guenter Roeck +S: Maintained +F: Documentation/devicetree/bindings/sound/google,cros-ec-codec.yaml +F: sound/soc/codecs/cros_ec_codec.* + +CHROMEOS EC SUBDRIVERS +M: Benson Leung +M: Enric Balletbo i Serra +R: Guenter Roeck +S: Maintained +F: drivers/power/supply/cros_usbpd-charger.c +N: cros_ec +N: cros-ec + +CHRONTEL CH7322 CEC DRIVER +M: Jeff Chase +L: linux-media@vger.kernel.org +S: Maintained +T: git git://linuxtv.org/media_tree.git +F: Documentation/devicetree/bindings/media/i2c/chrontel,ch7322.yaml +F: drivers/media/cec/i2c/ch7322.c + +CIRRUS LOGIC AUDIO CODEC DRIVERS +M: James Schulman +M: David Rhodes +L: alsa-devel@alsa-project.org (moderated for non-subscribers) +L: patches@opensource.cirrus.com +S: Maintained +F: sound/soc/codecs/cs* + +CIRRUS LOGIC EP93XX ETHERNET DRIVER +M: Hartley Sweeten +L: netdev@vger.kernel.org +S: Maintained +F: drivers/net/ethernet/cirrus/ep93xx_eth.c + +CIRRUS LOGIC LOCHNAGAR DRIVER +M: Charles Keepax +M: Richard Fitzgerald +L: patches@opensource.cirrus.com +S: Supported +F: Documentation/devicetree/bindings/clock/cirrus,lochnagar.yaml +F: Documentation/devicetree/bindings/hwmon/cirrus,lochnagar.yaml +F: Documentation/devicetree/bindings/mfd/cirrus,lochnagar.yaml +F: Documentation/devicetree/bindings/pinctrl/cirrus,lochnagar.yaml +F: Documentation/devicetree/bindings/sound/cirrus,lochnagar.yaml +F: Documentation/hwmon/lochnagar.rst +F: drivers/clk/clk-lochnagar.c +F: drivers/hwmon/lochnagar-hwmon.c +F: drivers/mfd/lochnagar-i2c.c +F: drivers/pinctrl/cirrus/pinctrl-lochnagar.c +F: drivers/regulator/lochnagar-regulator.c +F: include/dt-bindings/clk/lochnagar.h +F: include/dt-bindings/pinctrl/lochnagar.h +F: include/linux/mfd/lochnagar* +F: sound/soc/codecs/lochnagar-sc.c + +CIRRUS LOGIC MADERA CODEC DRIVERS +M: Charles Keepax +M: Richard Fitzgerald +L: alsa-devel@alsa-project.org (moderated for non-subscribers) +L: patches@opensource.cirrus.com +S: Supported +W: https://github.com/CirrusLogic/linux-drivers/wiki +T: git https://github.com/CirrusLogic/linux-drivers.git +F: Documentation/devicetree/bindings/mfd/cirrus,madera.yaml +F: Documentation/devicetree/bindings/pinctrl/cirrus,madera.yaml +F: Documentation/devicetree/bindings/sound/cirrus,madera.yaml +F: drivers/gpio/gpio-madera* +F: drivers/irqchip/irq-madera* +F: drivers/mfd/cs47l* +F: drivers/mfd/madera* +F: drivers/pinctrl/cirrus/* +F: include/dt-bindings/sound/madera* +F: include/linux/irqchip/irq-madera* +F: include/linux/mfd/madera/* +F: include/sound/madera* +F: sound/soc/codecs/cs47l* +F: sound/soc/codecs/madera* + +CISCO FCOE HBA DRIVER +M: Satish Kharat +M: Sesidhar Baddela +M: Karan Tilak Kumar +L: linux-scsi@vger.kernel.org +S: Supported +F: drivers/scsi/fnic/ + +CISCO SCSI HBA DRIVER +M: Karan Tilak Kumar +M: Sesidhar Baddela +L: linux-scsi@vger.kernel.org +S: Supported +F: drivers/scsi/snic/ + +CISCO VIC ETHERNET NIC DRIVER +M: Christian Benvenuti +M: Govindarajulu Varadarajan <_govind@gmx.com> +S: Supported +F: drivers/net/ethernet/cisco/enic/ + +CISCO VIC LOW LATENCY NIC DRIVER +M: Christian Benvenuti +M: Nelson Escobar +S: Supported +F: drivers/infiniband/hw/usnic/ + +CLANG-FORMAT FILE +M: Miguel Ojeda +S: Maintained +F: .clang-format + +CLANG/LLVM BUILD SUPPORT +M: Nathan Chancellor +M: Nick Desaulniers +L: llvm@lists.linux.dev +S: Supported +W: https://clangbuiltlinux.github.io/ +B: https://github.com/ClangBuiltLinux/linux/issues +C: irc://irc.libera.chat/clangbuiltlinux +F: Documentation/kbuild/llvm.rst +F: include/linux/compiler-clang.h +F: scripts/Makefile.clang +F: scripts/clang-tools/ +K: \b(?i:clang|llvm)\b + +CLANG CONTROL FLOW INTEGRITY SUPPORT +M: Sami Tolvanen +M: Kees Cook +R: Nathan Chancellor +R: Nick Desaulniers +L: llvm@lists.linux.dev +S: Supported +B: https://github.com/ClangBuiltLinux/linux/issues +T: git git://git.kernel.org/pub/scm/linux/kernel/git/kees/linux.git for-next/clang/features +F: include/linux/cfi.h +F: kernel/cfi.c + +CLEANCACHE API +M: Konrad Rzeszutek Wilk +L: linux-kernel@vger.kernel.org +S: Maintained +F: include/linux/cleancache.h +F: mm/cleancache.c + +CLK API +M: Russell King +L: linux-clk@vger.kernel.org +S: Maintained +F: include/linux/clk.h + +CLOCKSOURCE, CLOCKEVENT DRIVERS +M: Daniel Lezcano +M: Thomas Gleixner +L: linux-kernel@vger.kernel.org +S: Supported +T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git timers/core +F: Documentation/devicetree/bindings/timer/ +F: drivers/clocksource/ + +CMPC ACPI DRIVER +M: Thadeu Lima de Souza Cascardo +M: Daniel Oliveira Nascimento +L: platform-driver-x86@vger.kernel.org +S: Supported +F: drivers/platform/x86/classmate-laptop.c + +COBALT MEDIA DRIVER +M: Hans Verkuil +L: linux-media@vger.kernel.org +S: Supported +W: https://linuxtv.org +T: git git://linuxtv.org/media_tree.git +F: drivers/media/pci/cobalt/ + +COCCINELLE/Semantic Patches (SmPL) +M: Julia Lawall +M: Gilles Muller +M: Nicolas Palix +M: Michal Marek +L: cocci@systeme.lip6.fr (moderated for non-subscribers) +S: Supported +W: http://coccinelle.lip6.fr/ +T: git git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild.git misc +F: Documentation/dev-tools/coccinelle.rst +F: scripts/coccicheck +F: scripts/coccinelle/ + +CODA FILE SYSTEM +M: Jan Harkes +M: coda@cs.cmu.edu +L: codalist@coda.cs.cmu.edu +S: Maintained +W: http://www.coda.cs.cmu.edu/ +F: Documentation/filesystems/coda.rst +F: fs/coda/ +F: include/linux/coda*.h +F: include/uapi/linux/coda*.h + +CODA V4L2 MEM2MEM DRIVER +M: Philipp Zabel +L: linux-media@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/media/coda.yaml +F: drivers/media/platform/coda/ + +CODE OF CONDUCT +M: Greg Kroah-Hartman +S: Supported +F: Documentation/process/code-of-conduct-interpretation.rst +F: Documentation/process/code-of-conduct.rst + +COMEDI DRIVERS +M: Ian Abbott +M: H Hartley Sweeten +S: Odd Fixes +F: drivers/comedi/ + +COMMON CLK FRAMEWORK +M: Michael Turquette +M: Stephen Boyd +L: linux-clk@vger.kernel.org +S: Maintained +Q: http://patchwork.kernel.org/project/linux-clk/list/ +T: git git://git.kernel.org/pub/scm/linux/kernel/git/clk/linux.git +F: Documentation/devicetree/bindings/clock/ +F: drivers/clk/ +F: include/linux/clk-pr* +F: include/linux/clk/ +F: include/linux/of_clk.h +X: drivers/clk/clkdev.c + +COMMON INTERNET FILE SYSTEM CLIENT (CIFS) +M: Steve French +L: linux-cifs@vger.kernel.org +L: samba-technical@lists.samba.org (moderated for non-subscribers) +S: Supported +W: http://linux-cifs.samba.org/ +T: git git://git.samba.org/sfrench/cifs-2.6.git +F: Documentation/admin-guide/cifs/ +F: fs/cifs/ +F: fs/smbfs_common/ + +COMPACTPCI HOTPLUG CORE +M: Scott Murray +L: linux-pci@vger.kernel.org +S: Maintained +F: drivers/pci/hotplug/cpci_hotplug* + +COMPACTPCI HOTPLUG GENERIC DRIVER +M: Scott Murray +L: linux-pci@vger.kernel.org +S: Maintained +F: drivers/pci/hotplug/cpcihp_generic.c + +COMPACTPCI HOTPLUG ZIATECH ZT5550 DRIVER +M: Scott Murray +L: linux-pci@vger.kernel.org +S: Maintained +F: drivers/pci/hotplug/cpcihp_zt5550.* + +COMPAL LAPTOP SUPPORT +M: Cezary Jackiewicz +L: platform-driver-x86@vger.kernel.org +S: Maintained +F: drivers/platform/x86/compal-laptop.c + +COMPILER ATTRIBUTES +M: Miguel Ojeda +R: Nick Desaulniers +S: Maintained +F: include/linux/compiler_attributes.h + +COMPUTE EXPRESS LINK (CXL) +M: Alison Schofield +M: Vishal Verma +M: Ira Weiny +M: Ben Widawsky +M: Dan Williams +L: linux-cxl@vger.kernel.org +S: Maintained +F: drivers/cxl/ +F: include/uapi/linux/cxl_mem.h + +CONEXANT ACCESSRUNNER USB DRIVER +L: accessrunner-general@lists.sourceforge.net +S: Orphan +W: http://accessrunner.sourceforge.net/ +F: drivers/usb/atm/cxacru.c + +CONFIGFS +M: Joel Becker +M: Christoph Hellwig +S: Supported +T: git git://git.infradead.org/users/hch/configfs.git +F: fs/configfs/ +F: include/linux/configfs.h +F: samples/configfs/ + +CONSOLE SUBSYSTEM +M: Greg Kroah-Hartman +S: Supported +F: drivers/video/console/ +F: include/linux/console* + +CONTEXT TRACKING +M: Frederic Weisbecker +S: Maintained +F: kernel/context_tracking.c +F: include/linux/context_tracking* + +CONTROL GROUP (CGROUP) +M: Tejun Heo +M: Zefan Li +M: Johannes Weiner +L: cgroups@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup.git +F: Documentation/admin-guide/cgroup-v1/ +F: Documentation/admin-guide/cgroup-v2.rst +F: include/linux/cgroup* +F: kernel/cgroup/ + +CONTROL GROUP - BLOCK IO CONTROLLER (BLKIO) +M: Tejun Heo +M: Jens Axboe +L: cgroups@vger.kernel.org +L: linux-block@vger.kernel.org +T: git git://git.kernel.dk/linux-block +F: Documentation/admin-guide/cgroup-v1/blkio-controller.rst +F: block/bfq-cgroup.c +F: block/blk-cgroup.c +F: block/blk-iolatency.c +F: block/blk-throttle.c +F: include/linux/blk-cgroup.h + +CONTROL GROUP - CPUSET +M: Zefan Li +L: cgroups@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup.git +F: Documentation/admin-guide/cgroup-v1/cpusets.rst +F: include/linux/cpuset.h +F: kernel/cgroup/cpuset.c + +CONTROL GROUP - MEMORY RESOURCE CONTROLLER (MEMCG) +M: Johannes Weiner +M: Michal Hocko +M: Vladimir Davydov +L: cgroups@vger.kernel.org +L: linux-mm@kvack.org +S: Maintained +F: mm/memcontrol.c +F: mm/swap_cgroup.c + +CORETEMP HARDWARE MONITORING DRIVER +M: Fenghua Yu +L: linux-hwmon@vger.kernel.org +S: Maintained +F: Documentation/hwmon/coretemp.rst +F: drivers/hwmon/coretemp.c + +CORSAIR-CPRO HARDWARE MONITOR DRIVER +M: Marius Zachmann +L: linux-hwmon@vger.kernel.org +S: Maintained +F: drivers/hwmon/corsair-cpro.c + +CORSAIR-PSU HARDWARE MONITOR DRIVER +M: Wilken Gottwalt +L: linux-hwmon@vger.kernel.org +S: Maintained +F: Documentation/hwmon/corsair-psu.rst +F: drivers/hwmon/corsair-psu.c + +COSA/SRP SYNC SERIAL DRIVER +M: Jan "Yenya" Kasprzak +S: Maintained +W: http://www.fi.muni.cz/~kas/cosa/ +F: drivers/net/wan/cosa* + +COUNTER SUBSYSTEM +M: William Breathitt Gray +L: linux-iio@vger.kernel.org +S: Maintained +F: Documentation/ABI/testing/sysfs-bus-counter +F: Documentation/driver-api/generic-counter.rst +F: drivers/counter/ +F: include/linux/counter.h +F: include/linux/counter_enum.h + +CP2615 I2C DRIVER +M: Bence Csókás +S: Maintained +F: drivers/i2c/busses/i2c-cp2615.c + +CPMAC ETHERNET DRIVER +M: Florian Fainelli +L: netdev@vger.kernel.org +S: Maintained +F: drivers/net/ethernet/ti/cpmac.c + +CPU FREQUENCY DRIVERS - VEXPRESS SPC ARM BIG LITTLE +M: Viresh Kumar +M: Sudeep Holla +L: linux-pm@vger.kernel.org +S: Maintained +W: http://www.arm.com/products/processors/technologies/biglittleprocessing.php +F: drivers/cpufreq/vexpress-spc-cpufreq.c + +CPU FREQUENCY SCALING FRAMEWORK +M: "Rafael J. Wysocki" +M: Viresh Kumar +L: linux-pm@vger.kernel.org +S: Maintained +B: https://bugzilla.kernel.org +T: git git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git +T: git git://git.kernel.org/pub/scm/linux/kernel/git/vireshk/pm.git (For ARM Updates) +F: Documentation/admin-guide/pm/cpufreq.rst +F: Documentation/admin-guide/pm/intel_pstate.rst +F: Documentation/cpu-freq/ +F: Documentation/devicetree/bindings/cpufreq/ +F: drivers/cpufreq/ +F: include/linux/cpufreq.h +F: include/linux/sched/cpufreq.h +F: kernel/sched/cpufreq*.c +F: tools/testing/selftests/cpufreq/ + +CPU IDLE TIME MANAGEMENT FRAMEWORK +M: "Rafael J. Wysocki" +M: Daniel Lezcano +L: linux-pm@vger.kernel.org +S: Maintained +B: https://bugzilla.kernel.org +T: git git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git +F: Documentation/admin-guide/pm/cpuidle.rst +F: Documentation/driver-api/pm/cpuidle.rst +F: drivers/cpuidle/ +F: include/linux/cpuidle.h + +CPU POWER MONITORING SUBSYSTEM +M: Thomas Renninger +M: Shuah Khan +M: Shuah Khan +L: linux-pm@vger.kernel.org +S: Maintained +F: tools/power/cpupower/ + +CPUID/MSR DRIVER +M: "H. Peter Anvin" +S: Maintained +F: arch/x86/kernel/cpuid.c +F: arch/x86/kernel/msr.c + +CPUIDLE DRIVER - ARM BIG LITTLE +M: Lorenzo Pieralisi +M: Daniel Lezcano +L: linux-pm@vger.kernel.org +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git +F: drivers/cpuidle/cpuidle-big_little.c + +CPUIDLE DRIVER - ARM EXYNOS +M: Bartlomiej Zolnierkiewicz +M: Daniel Lezcano +M: Kukjin Kim +L: linux-pm@vger.kernel.org +L: linux-samsung-soc@vger.kernel.org +S: Supported +F: arch/arm/mach-exynos/pm.c +F: drivers/cpuidle/cpuidle-exynos.c +F: include/linux/platform_data/cpuidle-exynos.h + +CPUIDLE DRIVER - ARM PSCI +M: Lorenzo Pieralisi +M: Sudeep Holla +L: linux-pm@vger.kernel.org +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Supported +F: drivers/cpuidle/cpuidle-psci.c + +CPUIDLE DRIVER - ARM PSCI PM DOMAIN +M: Ulf Hansson +L: linux-pm@vger.kernel.org +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Supported +F: drivers/cpuidle/cpuidle-psci.h +F: drivers/cpuidle/cpuidle-psci-domain.c + +CRAMFS FILESYSTEM +M: Nicolas Pitre +S: Maintained +F: Documentation/filesystems/cramfs.rst +F: fs/cramfs/ + +CREATIVE SB0540 +M: Bastien Nocera +L: linux-input@vger.kernel.org +S: Maintained +F: drivers/hid/hid-creative-sb0540.c + +CRYPTO API +M: Herbert Xu +M: "David S. Miller" +L: linux-crypto@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git +T: git git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6.git +F: Documentation/crypto/ +F: Documentation/devicetree/bindings/crypto/ +F: arch/*/crypto/ +F: crypto/ +F: drivers/crypto/ +F: include/crypto/ +F: include/linux/crypto* +F: lib/crypto/ + +CRYPTOGRAPHIC RANDOM NUMBER GENERATOR +M: Neil Horman +L: linux-crypto@vger.kernel.org +S: Maintained +F: crypto/ansi_cprng.c +F: crypto/rng.c + +CS3308 MEDIA DRIVER +M: Hans Verkuil +L: linux-media@vger.kernel.org +S: Odd Fixes +W: http://linuxtv.org +T: git git://linuxtv.org/media_tree.git +F: drivers/media/i2c/cs3308.c + +CS5535 Audio ALSA driver +M: Jaya Kumar +S: Maintained +F: sound/pci/cs5535audio/ + +CSI DRIVERS FOR ALLWINNER V3s +M: Yong Deng +L: linux-media@vger.kernel.org +S: Maintained +T: git git://linuxtv.org/media_tree.git +F: Documentation/devicetree/bindings/media/allwinner,sun6i-a31-csi.yaml +F: drivers/media/platform/sunxi/sun6i-csi/ + +CW1200 WLAN driver +M: Solomon Peachy +S: Maintained +F: drivers/net/wireless/st/cw1200/ + +CX18 VIDEO4LINUX DRIVER +M: Andy Walls +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +T: git git://linuxtv.org/media_tree.git +F: drivers/media/pci/cx18/ +F: include/uapi/linux/ivtv* + +CX2341X MPEG ENCODER HELPER MODULE +M: Hans Verkuil +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +T: git git://linuxtv.org/media_tree.git +F: drivers/media/common/cx2341x* +F: include/media/drv-intf/cx2341x.h + +CX24120 MEDIA DRIVER +M: Jemma Denson +M: Patrick Boettcher +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +Q: http://patchwork.linuxtv.org/project/linux-media/list/ +F: drivers/media/dvb-frontends/cx24120* + +CX88 VIDEO4LINUX DRIVER +M: Mauro Carvalho Chehab +L: linux-media@vger.kernel.org +S: Odd fixes +W: https://linuxtv.org +T: git git://linuxtv.org/media_tree.git +F: Documentation/driver-api/media/drivers/cx88* +F: drivers/media/pci/cx88/ + +CXD2820R MEDIA DRIVER +M: Antti Palosaari +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +W: http://palosaari.fi/linux/ +Q: http://patchwork.linuxtv.org/project/linux-media/list/ +T: git git://linuxtv.org/anttip/media_tree.git +F: drivers/media/dvb-frontends/cxd2820r* + +CXGB3 ETHERNET DRIVER (CXGB3) +M: Raju Rangoju +L: netdev@vger.kernel.org +S: Supported +W: http://www.chelsio.com +F: drivers/net/ethernet/chelsio/cxgb3/ + +CXGB3 ISCSI DRIVER (CXGB3I) +M: Karen Xie +L: linux-scsi@vger.kernel.org +S: Supported +W: http://www.chelsio.com +F: drivers/scsi/cxgbi/cxgb3i + +CXGB4 CRYPTO DRIVER (chcr) +M: Ayush Sawal +M: Vinay Kumar Yadav +M: Rohit Maheshwari +L: linux-crypto@vger.kernel.org +S: Supported +W: http://www.chelsio.com +F: drivers/crypto/chelsio + +CXGB4 INLINE CRYPTO DRIVER +M: Ayush Sawal +M: Vinay Kumar Yadav +M: Rohit Maheshwari +L: netdev@vger.kernel.org +S: Supported +W: http://www.chelsio.com +F: drivers/net/ethernet/chelsio/inline_crypto/ + +CXGB4 ETHERNET DRIVER (CXGB4) +M: Raju Rangoju +L: netdev@vger.kernel.org +S: Supported +W: http://www.chelsio.com +F: drivers/net/ethernet/chelsio/cxgb4/ + +CXGB4 ISCSI DRIVER (CXGB4I) +M: Karen Xie +L: linux-scsi@vger.kernel.org +S: Supported +W: http://www.chelsio.com +F: drivers/scsi/cxgbi/cxgb4i + +CXGB4 IWARP RNIC DRIVER (IW_CXGB4) +M: Potnuri Bharat Teja +L: linux-rdma@vger.kernel.org +S: Supported +W: http://www.openfabrics.org +F: drivers/infiniband/hw/cxgb4/ +F: include/uapi/rdma/cxgb4-abi.h + +CXGB4VF ETHERNET DRIVER (CXGB4VF) +M: Raju Rangoju +L: netdev@vger.kernel.org +S: Supported +W: http://www.chelsio.com +F: drivers/net/ethernet/chelsio/cxgb4vf/ + +CXL (IBM Coherent Accelerator Processor Interface CAPI) DRIVER +M: Frederic Barrat +M: Andrew Donnellan +L: linuxppc-dev@lists.ozlabs.org +S: Supported +F: Documentation/ABI/testing/sysfs-class-cxl +F: Documentation/powerpc/cxl.rst +F: arch/powerpc/platforms/powernv/pci-cxl.c +F: drivers/misc/cxl/ +F: include/misc/cxl* +F: include/uapi/misc/cxl.h + +CXLFLASH (IBM Coherent Accelerator Processor Interface CAPI Flash) SCSI DRIVER +M: Manoj N. Kumar +M: Matthew R. Ochs +M: Uma Krishnan +L: linux-scsi@vger.kernel.org +S: Supported +F: Documentation/powerpc/cxlflash.rst +F: drivers/scsi/cxlflash/ +F: include/uapi/scsi/cxlflash_ioctl.h + +CYBERPRO FB DRIVER +M: Russell King +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +W: http://www.armlinux.org.uk/ +F: drivers/video/fbdev/cyber2000fb.* + +CYCLADES PC300 DRIVER +S: Orphan +F: drivers/net/wan/pc300* + +CYPRESS_FIRMWARE MEDIA DRIVER +M: Antti Palosaari +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +W: http://palosaari.fi/linux/ +Q: http://patchwork.linuxtv.org/project/linux-media/list/ +T: git git://linuxtv.org/anttip/media_tree.git +F: drivers/media/common/cypress_firmware* + +CYPRESS CY8CTMA140 TOUCHSCREEN DRIVER +M: Linus Walleij +L: linux-input@vger.kernel.org +S: Maintained +F: drivers/input/touchscreen/cy8ctma140.c + +CYTTSP TOUCHSCREEN DRIVER +M: Linus Walleij +L: linux-input@vger.kernel.org +S: Maintained +F: drivers/input/touchscreen/cyttsp* + +D-LINK DIR-685 TOUCHKEYS DRIVER +M: Linus Walleij +L: linux-input@vger.kernel.org +S: Supported +F: drivers/input/keyboard/dlink-dir685-touchkeys.c + +DALLAS/MAXIM DS1685-FAMILY REAL TIME CLOCK +M: Joshua Kinard +S: Maintained +F: drivers/rtc/rtc-ds1685.c +F: include/linux/rtc/ds1685.h + +DAMA SLAVE for AX.25 +M: Joerg Reuter +L: linux-hams@vger.kernel.org +S: Maintained +W: http://yaina.de/jreuter/ +W: http://www.qsl.net/dl1bke/ +F: net/ax25/af_ax25.c +F: net/ax25/ax25_dev.c +F: net/ax25/ax25_ds_* +F: net/ax25/ax25_in.c +F: net/ax25/ax25_out.c +F: net/ax25/ax25_timer.c +F: net/ax25/sysctl_net_ax25.c + +DATA ACCESS MONITOR +M: SeongJae Park +L: linux-mm@kvack.org +S: Maintained +F: Documentation/admin-guide/mm/damon/ +F: Documentation/vm/damon/ +F: include/linux/damon.h +F: include/trace/events/damon.h +F: mm/damon/ +F: tools/testing/selftests/damon/ + +DAVICOM FAST ETHERNET (DMFE) NETWORK DRIVER +L: netdev@vger.kernel.org +S: Orphan +F: Documentation/networking/device_drivers/ethernet/dec/dmfe.rst +F: drivers/net/ethernet/dec/tulip/dmfe.c + +DC390/AM53C974 SCSI driver +M: Hannes Reinecke +L: linux-scsi@vger.kernel.org +S: Maintained +F: drivers/scsi/am53c974.c + +DC395x SCSI driver +M: Oliver Neukum +M: Ali Akcaagac +M: Jamie Lenehan +L: dc395x@twibble.org +S: Maintained +W: http://twibble.org/dist/dc395x/ +W: http://lists.twibble.org/mailman/listinfo/dc395x/ +F: Documentation/scsi/dc395x.rst +F: drivers/scsi/dc395x.* + +DCCP PROTOCOL +L: dccp@vger.kernel.org +S: Orphan +W: http://www.linuxfoundation.org/collaborate/workgroups/networking/dccp +F: include/linux/dccp.h +F: include/linux/tfrc.h +F: include/uapi/linux/dccp.h +F: net/dccp/ + +DECnet NETWORK LAYER +L: linux-decnet-user@lists.sourceforge.net +S: Orphan +W: http://linux-decnet.sourceforge.net +F: Documentation/networking/decnet.rst +F: net/decnet/ + +DECSTATION PLATFORM SUPPORT +M: "Maciej W. Rozycki" +L: linux-mips@vger.kernel.org +S: Maintained +W: http://www.linux-mips.org/wiki/DECstation +F: arch/mips/dec/ +F: arch/mips/include/asm/dec/ +F: arch/mips/include/asm/mach-dec/ + +DEFXX FDDI NETWORK DRIVER +M: "Maciej W. Rozycki" +S: Maintained +F: drivers/net/fddi/defxx.* + +DEFZA FDDI NETWORK DRIVER +M: "Maciej W. Rozycki" +S: Maintained +F: drivers/net/fddi/defza.* + +DEINTERLACE DRIVERS FOR ALLWINNER H3 +M: Jernej Skrabec +L: linux-media@vger.kernel.org +S: Maintained +T: git git://linuxtv.org/media_tree.git +F: Documentation/devicetree/bindings/media/allwinner,sun8i-h3-deinterlace.yaml +F: drivers/media/platform/sunxi/sun8i-di/ + +DELL LAPTOP DRIVER +M: Matthew Garrett +M: Pali Rohár +L: platform-driver-x86@vger.kernel.org +S: Maintained +F: drivers/platform/x86/dell/dell-laptop.c + +DELL LAPTOP FREEFALL DRIVER +M: Pali Rohár +S: Maintained +F: drivers/platform/x86/dell/dell-smo8800.c + +DELL LAPTOP RBTN DRIVER +M: Pali Rohár +S: Maintained +F: drivers/platform/x86/dell/dell-rbtn.* + +DELL LAPTOP SMM DRIVER +M: Pali Rohár +S: Maintained +F: drivers/hwmon/dell-smm-hwmon.c +F: include/uapi/linux/i8k.h + +DELL REMOTE BIOS UPDATE DRIVER +M: Stuart Hayes +L: platform-driver-x86@vger.kernel.org +S: Maintained +F: drivers/platform/x86/dell/dell_rbu.c + +DELL SMBIOS DRIVER +M: Pali Rohár +L: Dell.Client.Kernel@dell.com +L: platform-driver-x86@vger.kernel.org +S: Maintained +F: drivers/platform/x86/dell/dell-smbios.* + +DELL SMBIOS SMM DRIVER +L: Dell.Client.Kernel@dell.com +L: platform-driver-x86@vger.kernel.org +S: Maintained +F: drivers/platform/x86/dell/dell-smbios-smm.c + +DELL SMBIOS WMI DRIVER +L: Dell.Client.Kernel@dell.com +L: platform-driver-x86@vger.kernel.org +S: Maintained +F: drivers/platform/x86/dell/dell-smbios-wmi.c +F: tools/wmi/dell-smbios-example.c + +DELL SYSTEMS MANAGEMENT BASE DRIVER (dcdbas) +M: Stuart Hayes +L: platform-driver-x86@vger.kernel.org +S: Maintained +F: Documentation/driver-api/dcdbas.rst +F: drivers/platform/x86/dell/dcdbas.* + +DELL WMI DESCRIPTOR DRIVER +L: Dell.Client.Kernel@dell.com +S: Maintained +F: drivers/platform/x86/dell/dell-wmi-descriptor.c + +DELL WMI SYSMAN DRIVER +M: Divya Bharathi +M: Prasanth Ksr +L: Dell.Client.Kernel@dell.com +L: platform-driver-x86@vger.kernel.org +S: Maintained +F: Documentation/ABI/testing/sysfs-class-firmware-attributes +F: drivers/platform/x86/dell/dell-wmi-sysman/ + +DELL WMI NOTIFICATIONS DRIVER +M: Matthew Garrett +M: Pali Rohár +S: Maintained +F: drivers/platform/x86/dell/dell-wmi-base.c + +DELL WMI HARDWARE PRIVACY SUPPORT +M: Perry Yuan +L: Dell.Client.Kernel@dell.com +L: platform-driver-x86@vger.kernel.org +S: Maintained +F: drivers/platform/x86/dell/dell-wmi-privacy.c + +DELTA ST MEDIA DRIVER +M: Hugues Fruchet +L: linux-media@vger.kernel.org +S: Supported +W: https://linuxtv.org +T: git git://linuxtv.org/media_tree.git +F: drivers/media/platform/sti/delta + +DELTA DPS920AB PSU DRIVER +M: Robert Marko +L: linux-hwmon@vger.kernel.org +S: Maintained +F: Documentation/hwmon/dps920ab.rst +F: drivers/hwmon/pmbus/dps920ab.c + +DENALI NAND DRIVER +L: linux-mtd@lists.infradead.org +S: Orphan +F: drivers/mtd/nand/raw/denali* + +DESIGNWARE EDMA CORE IP DRIVER +M: Gustavo Pimentel +L: dmaengine@vger.kernel.org +S: Maintained +F: drivers/dma/dw-edma/ +F: include/linux/dma/edma.h + +DESIGNWARE XDATA IP DRIVER +M: Gustavo Pimentel +L: linux-pci@vger.kernel.org +S: Maintained +F: Documentation/misc-devices/dw-xdata-pcie.rst +F: drivers/misc/dw-xdata-pcie.c + +DESIGNWARE USB2 DRD IP DRIVER +M: Minas Harutyunyan +L: linux-usb@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/balbi/usb.git +F: drivers/usb/dwc2/ + +DESIGNWARE USB3 DRD IP DRIVER +M: Felipe Balbi +L: linux-usb@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/balbi/usb.git +F: drivers/usb/dwc3/ + +DEVANTECH SRF ULTRASONIC RANGER IIO DRIVER +M: Andreas Klinger +L: linux-iio@vger.kernel.org +S: Maintained +F: Documentation/ABI/testing/sysfs-bus-iio-distance-srf08 +F: drivers/iio/proximity/srf*.c + +DEVICE COREDUMP (DEV_COREDUMP) +M: Johannes Berg +L: linux-kernel@vger.kernel.org +S: Maintained +F: drivers/base/devcoredump.c +F: include/linux/devcoredump.h + +DEVICE DEPENDENCY HELPER SCRIPT +M: Saravana Kannan +L: linux-kernel@vger.kernel.org +S: Maintained +F: scripts/dev-needs.sh + +DEVICE DIRECT ACCESS (DAX) +M: Dan Williams +M: Vishal Verma +M: Dave Jiang +L: nvdimm@lists.linux.dev +S: Supported +F: drivers/dax/ + +DEVICE FREQUENCY (DEVFREQ) +M: MyungJoo Ham +M: Kyungmin Park +M: Chanwoo Choi +L: linux-pm@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/chanwoo/linux.git +F: Documentation/devicetree/bindings/devfreq/ +F: drivers/devfreq/ +F: include/linux/devfreq.h +F: include/trace/events/devfreq.h + +DEVICE FREQUENCY EVENT (DEVFREQ-EVENT) +M: Chanwoo Choi +L: linux-pm@vger.kernel.org +S: Supported +T: git git://git.kernel.org/pub/scm/linux/kernel/git/chanwoo/linux.git +F: Documentation/devicetree/bindings/devfreq/event/ +F: drivers/devfreq/devfreq-event.c +F: drivers/devfreq/event/ +F: include/dt-bindings/pmu/exynos_ppmu.h +F: include/linux/devfreq-event.h + +DEVICE NUMBER REGISTRY +M: Torben Mathiasen +S: Maintained +W: http://lanana.org/docs/device-list/index.html + +DEVICE RESOURCE MANAGEMENT HELPERS +M: Hans de Goede +R: Matti Vaittinen +S: Maintained +F: include/linux/devm-helpers.h + +DEVICE-MAPPER (LVM) +M: Alasdair Kergon +M: Mike Snitzer +M: dm-devel@redhat.com +L: dm-devel@redhat.com +S: Maintained +W: http://sources.redhat.com/dm +Q: http://patchwork.kernel.org/project/dm-devel/list/ +T: git git://git.kernel.org/pub/scm/linux/kernel/git/device-mapper/linux-dm.git +T: quilt http://people.redhat.com/agk/patches/linux/editing/ +F: Documentation/admin-guide/device-mapper/ +F: drivers/md/Kconfig +F: drivers/md/Makefile +F: drivers/md/dm* +F: drivers/md/persistent-data/ +F: include/linux/device-mapper.h +F: include/linux/dm-*.h +F: include/uapi/linux/dm-*.h + +DEVLINK +M: Jiri Pirko +L: netdev@vger.kernel.org +S: Supported +F: Documentation/networking/devlink +F: include/net/devlink.h +F: include/uapi/linux/devlink.h +F: net/core/devlink.c + +DH ELECTRONICS IMX6 DHCOM BOARD SUPPORT +M: Christoph Niedermaier +L: kernel@dh-electronics.com +S: Maintained +F: arch/arm/boot/dts/imx6*-dhcom-* + +DH ELECTRONICS STM32MP1 DHCOM/DHCOR BOARD SUPPORT +M: Marek Vasut +L: kernel@dh-electronics.com +S: Maintained +F: arch/arm/boot/dts/stm32mp1*-dhcom-* +F: arch/arm/boot/dts/stm32mp1*-dhcor-* + +DIALOG SEMICONDUCTOR DRIVERS +M: Support Opensource +S: Supported +W: http://www.dialog-semiconductor.com/products +F: Documentation/devicetree/bindings/input/da90??-onkey.txt +F: Documentation/devicetree/bindings/input/dlg,da72??.txt +F: Documentation/devicetree/bindings/mfd/da90*.txt +F: Documentation/devicetree/bindings/regulator/dlg,da9*.yaml +F: Documentation/devicetree/bindings/regulator/da92*.txt +F: Documentation/devicetree/bindings/regulator/slg51000.txt +F: Documentation/devicetree/bindings/sound/da[79]*.txt +F: Documentation/devicetree/bindings/thermal/da90??-thermal.txt +F: Documentation/devicetree/bindings/watchdog/da90??-wdt.txt +F: Documentation/hwmon/da90??.rst +F: drivers/gpio/gpio-da90??.c +F: drivers/hwmon/da90??-hwmon.c +F: drivers/iio/adc/da91??-*.c +F: drivers/input/misc/da72??.[ch] +F: drivers/input/misc/da90??_onkey.c +F: drivers/input/touchscreen/da9052_tsi.c +F: drivers/leds/leds-da90??.c +F: drivers/mfd/da903x.c +F: drivers/mfd/da90??-*.c +F: drivers/mfd/da91??-*.c +F: drivers/pinctrl/pinctrl-da90??.c +F: drivers/power/supply/da9052-battery.c +F: drivers/power/supply/da91??-*.c +F: drivers/regulator/da9???-regulator.[ch] +F: drivers/regulator/slg51000-regulator.[ch] +F: drivers/rtc/rtc-da90??.c +F: drivers/thermal/da90??-thermal.c +F: drivers/video/backlight/da90??_bl.c +F: drivers/watchdog/da90??_wdt.c +F: include/dt-bindings/regulator/dlg,da9*-regulator.h +F: include/linux/mfd/da903x.h +F: include/linux/mfd/da9052/ +F: include/linux/mfd/da9055/ +F: include/linux/mfd/da9062/ +F: include/linux/mfd/da9063/ +F: include/linux/mfd/da9150/ +F: include/linux/regulator/da9211.h +F: include/sound/da[79]*.h +F: sound/soc/codecs/da[79]*.[ch] + +DIAMOND SYSTEMS GPIO-MM GPIO DRIVER +M: William Breathitt Gray +L: linux-gpio@vger.kernel.org +S: Maintained +F: drivers/gpio/gpio-gpio-mm.c + +DIOLAN U2C-12 I2C DRIVER +M: Guenter Roeck +L: linux-i2c@vger.kernel.org +S: Maintained +F: drivers/i2c/busses/i2c-diolan-u2c.c + +DIRECTORY NOTIFICATION (DNOTIFY) +M: Jan Kara +R: Amir Goldstein +L: linux-fsdevel@vger.kernel.org +S: Maintained +F: Documentation/filesystems/dnotify.rst +F: fs/notify/dnotify/ +F: include/linux/dnotify.h + +DISK GEOMETRY AND PARTITION HANDLING +M: Andries Brouwer +S: Maintained +W: http://www.win.tue.nl/~aeb/linux/Large-Disk.html +W: http://www.win.tue.nl/~aeb/linux/zip/zip-1.html +W: http://www.win.tue.nl/~aeb/partitions/partition_types-1.html + +DISKQUOTA +M: Jan Kara +S: Maintained +F: Documentation/filesystems/quota.rst +F: fs/quota/ +F: include/linux/quota*.h +F: include/uapi/linux/quota*.h + +DISPLAYLINK USB 2.0 FRAMEBUFFER DRIVER (UDLFB) +M: Bernie Thompson +L: linux-fbdev@vger.kernel.org +S: Maintained +W: http://plugable.com/category/projects/udlfb/ +F: Documentation/fb/udlfb.rst +F: drivers/video/fbdev/udlfb.c +F: include/video/udlfb.h + +DISTRIBUTED LOCK MANAGER (DLM) +M: Christine Caulfield +M: David Teigland +L: cluster-devel@redhat.com +S: Supported +W: http://sources.redhat.com/cluster/ +T: git git://git.kernel.org/pub/scm/linux/kernel/git/teigland/linux-dlm.git +F: fs/dlm/ + +DMA BUFFER SHARING FRAMEWORK +M: Sumit Semwal +M: Christian König +L: linux-media@vger.kernel.org +L: dri-devel@lists.freedesktop.org +L: linaro-mm-sig@lists.linaro.org (moderated for non-subscribers) +S: Maintained +T: git git://anongit.freedesktop.org/drm/drm-misc +F: Documentation/driver-api/dma-buf.rst +F: drivers/dma-buf/ +F: include/linux/*fence.h +F: include/linux/dma-buf* +F: include/linux/dma-resv.h +K: \bdma_(?:buf|fence|resv)\b + +DMA GENERIC OFFLOAD ENGINE SUBSYSTEM +M: Vinod Koul +L: dmaengine@vger.kernel.org +S: Maintained +Q: https://patchwork.kernel.org/project/linux-dmaengine/list/ +T: git git://git.kernel.org/pub/scm/linux/kernel/git/vkoul/dmaengine.git +F: Documentation/devicetree/bindings/dma/ +F: Documentation/driver-api/dmaengine/ +F: drivers/dma/ +F: include/linux/dma/ +F: include/linux/dmaengine.h +F: include/linux/of_dma.h + +DMA MAPPING HELPERS +M: Christoph Hellwig +M: Marek Szyprowski +R: Robin Murphy +L: iommu@lists.linux-foundation.org +S: Supported +W: http://git.infradead.org/users/hch/dma-mapping.git +T: git git://git.infradead.org/users/hch/dma-mapping.git +F: include/asm-generic/dma-mapping.h +F: include/linux/dma-direct.h +F: include/linux/dma-mapping.h +F: include/linux/dma-map-ops.h +F: kernel/dma/ + +DMA MAPPING BENCHMARK +M: Barry Song +L: iommu@lists.linux-foundation.org +F: kernel/dma/map_benchmark.c +F: tools/testing/selftests/dma/ + +DMA-BUF HEAPS FRAMEWORK +M: Sumit Semwal +R: Benjamin Gaignard +R: Liam Mark +R: Laura Abbott +R: Brian Starkey +R: John Stultz +L: linux-media@vger.kernel.org +L: dri-devel@lists.freedesktop.org +L: linaro-mm-sig@lists.linaro.org (moderated for non-subscribers) +S: Maintained +T: git git://anongit.freedesktop.org/drm/drm-misc +F: drivers/dma-buf/dma-heap.c +F: drivers/dma-buf/heaps/* +F: include/linux/dma-heap.h +F: include/uapi/linux/dma-heap.h + +DMC FREQUENCY DRIVER FOR SAMSUNG EXYNOS5422 +M: Lukasz Luba +L: linux-pm@vger.kernel.org +L: linux-samsung-soc@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/memory-controllers/samsung,exynos5422-dmc.yaml +F: drivers/memory/samsung/exynos5422-dmc.c + +DME1737 HARDWARE MONITOR DRIVER +M: Juerg Haefliger +L: linux-hwmon@vger.kernel.org +S: Maintained +F: Documentation/hwmon/dme1737.rst +F: drivers/hwmon/dme1737.c + +DMI/SMBIOS SUPPORT +M: Jean Delvare +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/jdelvare/staging.git dmi-for-next +F: Documentation/ABI/testing/sysfs-firmware-dmi-tables +F: drivers/firmware/dmi-id.c +F: drivers/firmware/dmi_scan.c +F: include/linux/dmi.h + +DOCUMENTATION +M: Jonathan Corbet +L: linux-doc@vger.kernel.org +S: Maintained +P: Documentation/doc-guide/maintainer-profile.rst +T: git git://git.lwn.net/linux.git docs-next +F: Documentation/ +F: scripts/documentation-file-ref-check +F: scripts/kernel-doc +F: scripts/sphinx-pre-install +X: Documentation/ABI/ +X: Documentation/admin-guide/media/ +X: Documentation/devicetree/ +X: Documentation/driver-api/media/ +X: Documentation/firmware-guide/acpi/ +X: Documentation/i2c/ +X: Documentation/power/ +X: Documentation/spi/ +X: Documentation/userspace-api/media/ + +DOCUMENTATION REPORTING ISSUES +M: Thorsten Leemhuis +L: linux-doc@vger.kernel.org +S: Maintained +F: Documentation/admin-guide/reporting-issues.rst + +DOCUMENTATION SCRIPTS +M: Mauro Carvalho Chehab +L: linux-doc@vger.kernel.org +S: Maintained +F: Documentation/sphinx/parse-headers.pl +F: scripts/documentation-file-ref-check +F: scripts/sphinx-pre-install + +DOCUMENTATION/ITALIAN +M: Federico Vaga +L: linux-doc@vger.kernel.org +S: Maintained +F: Documentation/translations/it_IT + +DONGWOON DW9714 LENS VOICE COIL DRIVER +M: Sakari Ailus +L: linux-media@vger.kernel.org +S: Maintained +T: git git://linuxtv.org/media_tree.git +F: Documentation/devicetree/bindings/media/i2c/dongwoon,dw9714.txt +F: drivers/media/i2c/dw9714.c + +DONGWOON DW9768 LENS VOICE COIL DRIVER +M: Dongchun Zhu +L: linux-media@vger.kernel.org +S: Maintained +T: git git://linuxtv.org/media_tree.git +F: Documentation/devicetree/bindings/media/i2c/dongwoon,dw9768.yaml +F: drivers/media/i2c/dw9768.c + +DONGWOON DW9807 LENS VOICE COIL DRIVER +M: Sakari Ailus +L: linux-media@vger.kernel.org +S: Maintained +T: git git://linuxtv.org/media_tree.git +F: Documentation/devicetree/bindings/media/i2c/dongwoon,dw9807-vcm.txt +F: drivers/media/i2c/dw9807-vcm.c + +DOUBLETALK DRIVER +M: "James R. Van Zandt" +L: blinux-list@redhat.com +S: Maintained +F: drivers/char/dtlk.c +F: include/linux/dtlk.h + +DPAA2 DATAPATH I/O (DPIO) DRIVER +M: Roy Pledge +L: linux-kernel@vger.kernel.org +S: Maintained +F: drivers/soc/fsl/dpio + +DPAA2 ETHERNET DRIVER +M: Ioana Ciornei +L: netdev@vger.kernel.org +S: Maintained +F: Documentation/networking/device_drivers/ethernet/freescale/dpaa2/ethernet-driver.rst +F: Documentation/networking/device_drivers/ethernet/freescale/dpaa2/mac-phy-support.rst +F: drivers/net/ethernet/freescale/dpaa2/Kconfig +F: drivers/net/ethernet/freescale/dpaa2/Makefile +F: drivers/net/ethernet/freescale/dpaa2/dpaa2-eth* +F: drivers/net/ethernet/freescale/dpaa2/dpaa2-mac* +F: drivers/net/ethernet/freescale/dpaa2/dpkg.h +F: drivers/net/ethernet/freescale/dpaa2/dpmac* +F: drivers/net/ethernet/freescale/dpaa2/dpni* + +DPAA2 ETHERNET SWITCH DRIVER +M: Ioana Ciornei +L: netdev@vger.kernel.org +S: Maintained +F: Documentation/networking/device_drivers/ethernet/freescale/dpaa2/switch-driver.rst +F: drivers/net/ethernet/freescale/dpaa2/dpaa2-switch* +F: drivers/net/ethernet/freescale/dpaa2/dpsw* + +DPT_I2O SCSI RAID DRIVER +M: Adaptec OEM Raid Solutions +L: linux-scsi@vger.kernel.org +S: Maintained +W: http://www.adaptec.com/ +F: drivers/scsi/dpt* +F: drivers/scsi/dpt/ + +DRBD DRIVER +M: Philipp Reisner +M: Lars Ellenberg +L: drbd-dev@lists.linbit.com +S: Supported +W: http://www.drbd.org +T: git git://git.linbit.com/linux-drbd.git +T: git git://git.linbit.com/drbd-8.4.git +F: Documentation/admin-guide/blockdev/ +F: drivers/block/drbd/ +F: lib/lru_cache.c + +DRIVER COMPONENT FRAMEWORK +L: dri-devel@lists.freedesktop.org +F: drivers/base/component.c +F: include/linux/component.h + +DRIVER CORE, KOBJECTS, DEBUGFS AND SYSFS +M: Greg Kroah-Hartman +R: "Rafael J. Wysocki" +S: Supported +T: git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core.git +F: Documentation/core-api/kobject.rst +F: drivers/base/ +F: fs/debugfs/ +F: fs/sysfs/ +F: include/linux/debugfs.h +F: include/linux/kobj* +F: lib/kobj* + +DRIVERS FOR OMAP ADAPTIVE VOLTAGE SCALING (AVS) +M: Nishanth Menon +L: linux-pm@vger.kernel.org +S: Maintained +F: drivers/soc/ti/smartreflex.c +F: include/linux/power/smartreflex.h + +DRM DRIVER FOR ALLWINNER DE2 AND DE3 ENGINE +M: Maxime Ripard +M: Chen-Yu Tsai +R: Jernej Skrabec +L: dri-devel@lists.freedesktop.org +S: Supported +T: git git://anongit.freedesktop.org/drm/drm-misc +F: drivers/gpu/drm/sun4i/sun8i* + +DRM DRIVER FOR ARM PL111 CLCD +M: Emma Anholt +S: Supported +T: git git://anongit.freedesktop.org/drm/drm-misc +F: drivers/gpu/drm/pl111/ + +DRM DRIVER FOR ARM VERSATILE TFT PANELS +M: Linus Walleij +S: Maintained +T: git git://anongit.freedesktop.org/drm/drm-misc +F: Documentation/devicetree/bindings/display/panel/arm,versatile-tft-panel.yaml +F: drivers/gpu/drm/panel/panel-arm-versatile.c + +DRM DRIVER FOR ASPEED BMC GFX +M: Joel Stanley +L: linux-aspeed@lists.ozlabs.org (moderated for non-subscribers) +S: Supported +T: git git://anongit.freedesktop.org/drm/drm-misc +F: Documentation/devicetree/bindings/gpu/aspeed-gfx.txt +F: drivers/gpu/drm/aspeed/ + +DRM DRIVER FOR AST SERVER GRAPHICS CHIPS +M: Dave Airlie +R: Thomas Zimmermann +L: dri-devel@lists.freedesktop.org +S: Supported +T: git git://anongit.freedesktop.org/drm/drm-misc +F: drivers/gpu/drm/ast/ + +DRM DRIVER FOR BOCHS VIRTUAL GPU +M: Gerd Hoffmann +L: virtualization@lists.linux-foundation.org +S: Maintained +T: git git://anongit.freedesktop.org/drm/drm-misc +F: drivers/gpu/drm/tiny/bochs.c + +DRM DRIVER FOR BOE HIMAX8279D PANELS +M: Jerry Han +S: Maintained +F: Documentation/devicetree/bindings/display/panel/boe,himax8279d.yaml +F: drivers/gpu/drm/panel/panel-boe-himax8279d.c + +DRM DRIVER FOR CHIPONE ICN6211 MIPI-DSI to RGB CONVERTER BRIDGE +M: Jagan Teki +S: Maintained +F: Documentation/devicetree/bindings/display/bridge/chipone,icn6211.yaml +F: drivers/gpu/drm/bridge/chipone-icn6211.c + +DRM DRIVER FOR FARADAY TVE200 TV ENCODER +M: Linus Walleij +S: Maintained +T: git git://anongit.freedesktop.org/drm/drm-misc +F: drivers/gpu/drm/tve200/ + +DRM DRIVER FOR FEIXIN K101 IM2BA02 MIPI-DSI LCD PANELS +M: Icenowy Zheng +S: Maintained +F: Documentation/devicetree/bindings/display/panel/feixin,k101-im2ba02.yaml +F: drivers/gpu/drm/panel/panel-feixin-k101-im2ba02.c + +DRM DRIVER FOR FEIYANG FY07024DI26A30-D MIPI-DSI LCD PANELS +M: Jagan Teki +S: Maintained +F: Documentation/devicetree/bindings/display/panel/feiyang,fy07024di26a30d.yaml +F: drivers/gpu/drm/panel/panel-feiyang-fy07024di26a30d.c + +DRM DRIVER FOR GENERIC USB DISPLAY +M: Noralf Trønnes +S: Maintained +W: https://github.com/notro/gud/wiki +T: git git://anongit.freedesktop.org/drm/drm-misc +F: drivers/gpu/drm/gud/ +F: include/drm/gud.h + +DRM DRIVER FOR GRAIN MEDIA GM12U320 PROJECTORS +M: Hans de Goede +S: Maintained +T: git git://anongit.freedesktop.org/drm/drm-misc +F: drivers/gpu/drm/tiny/gm12u320.c + +DRM DRIVER FOR HX8357D PANELS +M: Emma Anholt +S: Maintained +T: git git://anongit.freedesktop.org/drm/drm-misc +F: Documentation/devicetree/bindings/display/himax,hx8357d.txt +F: drivers/gpu/drm/tiny/hx8357d.c + +DRM DRIVER FOR ILITEK ILI9225 PANELS +M: David Lechner +S: Maintained +T: git git://anongit.freedesktop.org/drm/drm-misc +F: Documentation/devicetree/bindings/display/ilitek,ili9225.txt +F: drivers/gpu/drm/tiny/ili9225.c + +DRM DRIVER FOR ILITEK ILI9486 PANELS +M: Kamlesh Gurudasani +S: Maintained +T: git git://anongit.freedesktop.org/drm/drm-misc +F: Documentation/devicetree/bindings/display/ilitek,ili9486.yaml +F: drivers/gpu/drm/tiny/ili9486.c + +DRM DRIVER FOR INTEL I810 VIDEO CARDS +S: Orphan / Obsolete +F: drivers/gpu/drm/i810/ +F: include/uapi/drm/i810_drm.h + +DRM DRIVER FOR LVDS PANELS +M: Laurent Pinchart +L: dri-devel@lists.freedesktop.org +T: git git://anongit.freedesktop.org/drm/drm-misc +S: Maintained +F: drivers/gpu/drm/panel/panel-lvds.c +F: Documentation/devicetree/bindings/display/panel/lvds.yaml + +DRM DRIVER FOR MANTIX MLAF057WE51 PANELS +M: Guido Günther +R: Purism Kernel Team +S: Maintained +F: Documentation/devicetree/bindings/display/panel/mantix,mlaf057we51-x.yaml +F: drivers/gpu/drm/panel/panel-mantix-mlaf057we51.c + +DRM DRIVER FOR MATROX G200/G400 GRAPHICS CARDS +S: Orphan / Obsolete +F: drivers/gpu/drm/mga/ +F: include/uapi/drm/mga_drm.h + +DRM DRIVER FOR MGA G200 GRAPHICS CHIPS +M: Dave Airlie +R: Thomas Zimmermann +L: dri-devel@lists.freedesktop.org +S: Supported +T: git git://anongit.freedesktop.org/drm/drm-misc +F: drivers/gpu/drm/mgag200/ + +DRM DRIVER FOR MI0283QT +M: Noralf Trønnes +S: Maintained +T: git git://anongit.freedesktop.org/drm/drm-misc +F: Documentation/devicetree/bindings/display/multi-inno,mi0283qt.txt +F: drivers/gpu/drm/tiny/mi0283qt.c + +DRM DRIVER FOR MSM ADRENO GPU +M: Rob Clark +M: Sean Paul +L: linux-arm-msm@vger.kernel.org +L: dri-devel@lists.freedesktop.org +L: freedreno@lists.freedesktop.org +S: Maintained +T: git https://gitlab.freedesktop.org/drm/msm.git +F: Documentation/devicetree/bindings/display/msm/ +F: drivers/gpu/drm/msm/ +F: include/uapi/drm/msm_drm.h + +DRM DRIVER FOR NOVATEK NT35510 PANELS +M: Linus Walleij +S: Maintained +T: git git://anongit.freedesktop.org/drm/drm-misc +F: Documentation/devicetree/bindings/display/panel/novatek,nt35510.yaml +F: drivers/gpu/drm/panel/panel-novatek-nt35510.c + +DRM DRIVER FOR NOVATEK NT36672A PANELS +M: Sumit Semwal +S: Maintained +T: git git://anongit.freedesktop.org/drm/drm-misc +F: Documentation/devicetree/bindings/display/panel/novatek,nt36672a.yaml +F: drivers/gpu/drm/panel/panel-novatek-nt36672a.c + +DRM DRIVER FOR NVIDIA GEFORCE/QUADRO GPUS +M: Ben Skeggs +L: dri-devel@lists.freedesktop.org +L: nouveau@lists.freedesktop.org +S: Supported +T: git git://github.com/skeggsb/linux +F: drivers/gpu/drm/nouveau/ +F: include/uapi/drm/nouveau_drm.h + +DRM DRIVER FOR OLIMEX LCD-OLINUXINO PANELS +M: Stefan Mavrodiev +S: Maintained +F: Documentation/devicetree/bindings/display/panel/olimex,lcd-olinuxino.yaml +F: drivers/gpu/drm/panel/panel-olimex-lcd-olinuxino.c + +DRM DRIVER FOR PERVASIVE DISPLAYS REPAPER PANELS +M: Noralf Trønnes +S: Maintained +T: git git://anongit.freedesktop.org/drm/drm-misc +F: Documentation/devicetree/bindings/display/repaper.txt +F: drivers/gpu/drm/tiny/repaper.c + +DRM DRIVER FOR QEMU'S CIRRUS DEVICE +M: Dave Airlie +M: Gerd Hoffmann +L: virtualization@lists.linux-foundation.org +S: Obsolete +W: https://www.kraxel.org/blog/2014/10/qemu-using-cirrus-considered-harmful/ +T: git git://anongit.freedesktop.org/drm/drm-misc +F: drivers/gpu/drm/tiny/cirrus.c + +DRM DRIVER FOR QXL VIRTUAL GPU +M: Dave Airlie +M: Gerd Hoffmann +L: virtualization@lists.linux-foundation.org +L: spice-devel@lists.freedesktop.org +S: Maintained +T: git git://anongit.freedesktop.org/drm/drm-misc +F: drivers/gpu/drm/qxl/ +F: include/uapi/drm/qxl_drm.h + +DRM DRIVER FOR RAGE 128 VIDEO CARDS +S: Orphan / Obsolete +F: drivers/gpu/drm/r128/ +F: include/uapi/drm/r128_drm.h + +DRM DRIVER FOR RAYDIUM RM67191 PANELS +M: Robert Chiras +S: Maintained +F: Documentation/devicetree/bindings/display/panel/raydium,rm67191.yaml +F: drivers/gpu/drm/panel/panel-raydium-rm67191.c + +DRM DRIVER FOR SAMSUNG DB7430 PANELS +M: Linus Walleij +S: Maintained +T: git git://anongit.freedesktop.org/drm/drm-misc +F: Documentation/devicetree/bindings/display/panel/samsung,lms397kf04.yaml +F: drivers/gpu/drm/panel/panel-samsung-db7430.c + +DRM DRIVER FOR SITRONIX ST7703 PANELS +M: Guido Günther +R: Purism Kernel Team +R: Ondrej Jirman +S: Maintained +F: Documentation/devicetree/bindings/display/panel/rocktech,jh057n00900.yaml +F: drivers/gpu/drm/panel/panel-sitronix-st7703.c + +DRM DRIVER FOR SAVAGE VIDEO CARDS +S: Orphan / Obsolete +F: drivers/gpu/drm/savage/ +F: include/uapi/drm/savage_drm.h + +DRM DRIVER FOR SIMPLE FRAMEBUFFERS +M: Thomas Zimmermann +L: dri-devel@lists.freedesktop.org +S: Maintained +T: git git://anongit.freedesktop.org/drm/drm-misc +F: drivers/gpu/drm/tiny/simpledrm.c + +DRM DRIVER FOR SIS VIDEO CARDS +S: Orphan / Obsolete +F: drivers/gpu/drm/sis/ +F: include/uapi/drm/sis_drm.h + +DRM DRIVER FOR SITRONIX ST7586 PANELS +M: David Lechner +S: Maintained +T: git git://anongit.freedesktop.org/drm/drm-misc +F: Documentation/devicetree/bindings/display/sitronix,st7586.txt +F: drivers/gpu/drm/tiny/st7586.c + +DRM DRIVER FOR SITRONIX ST7701 PANELS +M: Jagan Teki +S: Maintained +F: Documentation/devicetree/bindings/display/panel/sitronix,st7701.yaml +F: drivers/gpu/drm/panel/panel-sitronix-st7701.c + +DRM DRIVER FOR SITRONIX ST7735R PANELS +M: David Lechner +S: Maintained +T: git git://anongit.freedesktop.org/drm/drm-misc +F: Documentation/devicetree/bindings/display/sitronix,st7735r.yaml +F: drivers/gpu/drm/tiny/st7735r.c + +DRM DRIVER FOR SONY ACX424AKP PANELS +M: Linus Walleij +S: Maintained +T: git git://anongit.freedesktop.org/drm/drm-misc +F: drivers/gpu/drm/panel/panel-sony-acx424akp.c + +DRM DRIVER FOR ST-ERICSSON MCDE +M: Linus Walleij +S: Maintained +T: git git://anongit.freedesktop.org/drm/drm-misc +F: Documentation/devicetree/bindings/display/ste,mcde.yaml +F: drivers/gpu/drm/mcde/ + +DRM DRIVER FOR TDFX VIDEO CARDS +S: Orphan / Obsolete +F: drivers/gpu/drm/tdfx/ + +DRM DRIVER FOR TPO TPG110 PANELS +M: Linus Walleij +S: Maintained +T: git git://anongit.freedesktop.org/drm/drm-misc +F: Documentation/devicetree/bindings/display/panel/tpo,tpg110.yaml +F: drivers/gpu/drm/panel/panel-tpo-tpg110.c + +DRM DRIVER FOR USB DISPLAYLINK VIDEO ADAPTERS +M: Dave Airlie +R: Sean Paul +R: Thomas Zimmermann +L: dri-devel@lists.freedesktop.org +S: Supported +T: git git://anongit.freedesktop.org/drm/drm-misc +F: drivers/gpu/drm/udl/ + +DRM DRIVER FOR VIRTUAL KERNEL MODESETTING (VKMS) +M: Rodrigo Siqueira +M: Melissa Wen +R: Haneen Mohammed +R: Daniel Vetter +L: dri-devel@lists.freedesktop.org +S: Maintained +T: git git://anongit.freedesktop.org/drm/drm-misc +F: Documentation/gpu/vkms.rst +F: drivers/gpu/drm/vkms/ + +DRM DRIVER FOR VIRTUALBOX VIRTUAL GPU +M: Hans de Goede +L: dri-devel@lists.freedesktop.org +S: Maintained +T: git git://anongit.freedesktop.org/drm/drm-misc +F: drivers/gpu/drm/vboxvideo/ + +DRM DRIVER FOR VMWARE VIRTUAL GPU +M: "VMware Graphics" +M: Zack Rusin +L: dri-devel@lists.freedesktop.org +S: Supported +T: git git://anongit.freedesktop.org/drm/drm-misc +F: drivers/gpu/drm/vmwgfx/ +F: include/uapi/drm/vmwgfx_drm.h + +DRM DRIVER FOR WIDECHIPS WS2401 PANELS +M: Linus Walleij +S: Maintained +T: git git://anongit.freedesktop.org/drm/drm-misc +F: Documentation/devicetree/bindings/display/panel/samsung,lms380kf01.yaml +F: drivers/gpu/drm/panel/panel-widechips-ws2401.c + +DRM DRIVERS +M: David Airlie +M: Daniel Vetter +L: dri-devel@lists.freedesktop.org +S: Maintained +B: https://gitlab.freedesktop.org/drm +C: irc://irc.oftc.net/dri-devel +T: git git://anongit.freedesktop.org/drm/drm +F: Documentation/devicetree/bindings/display/ +F: Documentation/devicetree/bindings/gpu/ +F: Documentation/gpu/ +F: drivers/gpu/ +F: include/drm/ +F: include/linux/vga* +F: include/uapi/drm/ + +DRM DRIVERS AND MISC GPU PATCHES +M: Maarten Lankhorst +M: Maxime Ripard +M: Thomas Zimmermann +S: Maintained +W: https://01.org/linuxgraphics/gfx-docs/maintainer-tools/drm-misc.html +T: git git://anongit.freedesktop.org/drm/drm-misc +F: Documentation/gpu/ +F: drivers/gpu/drm/* +F: drivers/gpu/vga/ +F: include/drm/drm* +F: include/linux/vga* +F: include/uapi/drm/drm* + +DRM DRIVERS FOR ALLWINNER A10 +M: Maxime Ripard +M: Chen-Yu Tsai +L: dri-devel@lists.freedesktop.org +S: Supported +T: git git://anongit.freedesktop.org/drm/drm-misc +F: Documentation/devicetree/bindings/display/allwinner* +F: drivers/gpu/drm/sun4i/ + +DRM DRIVERS FOR AMLOGIC SOCS +M: Neil Armstrong +L: dri-devel@lists.freedesktop.org +L: linux-amlogic@lists.infradead.org +S: Supported +W: http://linux-meson.com/ +T: git git://anongit.freedesktop.org/drm/drm-misc +F: Documentation/devicetree/bindings/display/amlogic,meson-dw-hdmi.yaml +F: Documentation/devicetree/bindings/display/amlogic,meson-vpu.yaml +F: Documentation/gpu/meson.rst +F: drivers/gpu/drm/meson/ + +DRM DRIVERS FOR ATMEL HLCDC +M: Sam Ravnborg +M: Boris Brezillon +L: dri-devel@lists.freedesktop.org +S: Supported +T: git git://anongit.freedesktop.org/drm/drm-misc +F: Documentation/devicetree/bindings/display/atmel/ +F: drivers/gpu/drm/atmel-hlcdc/ + +DRM DRIVERS FOR BRIDGE CHIPS +M: Andrzej Hajda +M: Neil Armstrong +M: Robert Foss +R: Laurent Pinchart +R: Jonas Karlman +R: Jernej Skrabec +S: Maintained +T: git git://anongit.freedesktop.org/drm/drm-misc +F: drivers/gpu/drm/bridge/ + +DRM DRIVERS FOR EXYNOS +M: Inki Dae +M: Joonyoung Shim +M: Seung-Woo Kim +M: Kyungmin Park +L: dri-devel@lists.freedesktop.org +S: Supported +T: git git://git.kernel.org/pub/scm/linux/kernel/git/daeinki/drm-exynos.git +F: Documentation/devicetree/bindings/display/exynos/ +F: drivers/gpu/drm/exynos/ +F: include/uapi/drm/exynos_drm.h + +DRM DRIVERS FOR FREESCALE DCU +M: Stefan Agner +M: Alison Wang +L: dri-devel@lists.freedesktop.org +S: Supported +T: git git://anongit.freedesktop.org/drm/drm-misc +F: Documentation/devicetree/bindings/display/fsl,dcu.txt +F: Documentation/devicetree/bindings/display/fsl,tcon.txt +F: drivers/gpu/drm/fsl-dcu/ + +DRM DRIVERS FOR FREESCALE IMX +M: Philipp Zabel +L: dri-devel@lists.freedesktop.org +S: Maintained +F: Documentation/devicetree/bindings/display/imx/ +F: drivers/gpu/drm/imx/ +F: drivers/gpu/ipu-v3/ + +DRM DRIVERS FOR GMA500 (Poulsbo, Moorestown and derivative chipsets) +M: Patrik Jakobsson +L: dri-devel@lists.freedesktop.org +S: Maintained +T: git git://github.com/patjak/drm-gma500 +F: drivers/gpu/drm/gma500/ + +DRM DRIVERS FOR HISILICON +M: Xinliang Liu +M: Tian Tao +R: John Stultz +R: Xinwei Kong +R: Chen Feng +L: dri-devel@lists.freedesktop.org +S: Maintained +T: git git://anongit.freedesktop.org/drm/drm-misc +F: Documentation/devicetree/bindings/display/hisilicon/ +F: drivers/gpu/drm/hisilicon/ + +DRM DRIVER FOR HYPERV SYNTHETIC VIDEO DEVICE +M: Deepak Rawat +L: linux-hyperv@vger.kernel.org +L: dri-devel@lists.freedesktop.org +S: Maintained +T: git git://anongit.freedesktop.org/drm/drm-misc +F: drivers/gpu/drm/hyperv + +DRM DRIVERS FOR LIMA +M: Qiang Yu +L: dri-devel@lists.freedesktop.org +L: lima@lists.freedesktop.org (moderated for non-subscribers) +S: Maintained +T: git git://anongit.freedesktop.org/drm/drm-misc +F: drivers/gpu/drm/lima/ +F: include/uapi/drm/lima_drm.h + +DRM DRIVERS FOR MEDIATEK +M: Chun-Kuang Hu +M: Philipp Zabel +L: dri-devel@lists.freedesktop.org +L: linux-mediatek@lists.infradead.org (moderated for non-subscribers) +S: Supported +F: Documentation/devicetree/bindings/display/mediatek/ +F: drivers/gpu/drm/mediatek/ +F: drivers/phy/mediatek/phy-mtk-hdmi* +F: drivers/phy/mediatek/phy-mtk-mipi* + +DRM DRIVERS FOR NVIDIA TEGRA +M: Thierry Reding +L: dri-devel@lists.freedesktop.org +L: linux-tegra@vger.kernel.org +S: Supported +T: git git://anongit.freedesktop.org/tegra/linux.git +F: Documentation/devicetree/bindings/display/tegra/nvidia,tegra20-host1x.txt +F: drivers/gpu/drm/tegra/ +F: drivers/gpu/host1x/ +F: include/linux/host1x.h +F: include/uapi/drm/tegra_drm.h + +DRM DRIVERS FOR RENESAS +M: Laurent Pinchart +M: Kieran Bingham +L: dri-devel@lists.freedesktop.org +L: linux-renesas-soc@vger.kernel.org +S: Supported +T: git git://linuxtv.org/pinchartl/media drm/du/next +F: Documentation/devicetree/bindings/display/bridge/renesas,dw-hdmi.yaml +F: Documentation/devicetree/bindings/display/bridge/renesas,lvds.yaml +F: Documentation/devicetree/bindings/display/renesas,du.yaml +F: drivers/gpu/drm/rcar-du/ +F: drivers/gpu/drm/shmobile/ +F: include/linux/platform_data/shmob_drm.h + +DRM DRIVERS FOR ROCKCHIP +M: Sandy Huang +M: Heiko Stübner +L: dri-devel@lists.freedesktop.org +S: Maintained +T: git git://anongit.freedesktop.org/drm/drm-misc +F: Documentation/devicetree/bindings/display/rockchip/ +F: drivers/gpu/drm/rockchip/ + +DRM DRIVERS FOR STI +M: Benjamin Gaignard +L: dri-devel@lists.freedesktop.org +S: Maintained +T: git git://anongit.freedesktop.org/drm/drm-misc +F: Documentation/devicetree/bindings/display/st,stih4xx.txt +F: drivers/gpu/drm/sti + +DRM DRIVERS FOR STM +M: Yannick Fertre +M: Philippe Cornu +M: Benjamin Gaignard +L: dri-devel@lists.freedesktop.org +S: Maintained +T: git git://anongit.freedesktop.org/drm/drm-misc +F: Documentation/devicetree/bindings/display/st,stm32-ltdc.yaml +F: drivers/gpu/drm/stm + +DRM DRIVERS FOR TI KEYSTONE +M: Jyri Sarha +M: Tomi Valkeinen +L: dri-devel@lists.freedesktop.org +S: Maintained +T: git git://anongit.freedesktop.org/drm/drm-misc +F: Documentation/devicetree/bindings/display/ti/ti,am65x-dss.yaml +F: Documentation/devicetree/bindings/display/ti/ti,j721e-dss.yaml +F: Documentation/devicetree/bindings/display/ti/ti,k2g-dss.yaml +F: drivers/gpu/drm/tidss/ + +DRM DRIVERS FOR TI LCDC +M: Jyri Sarha +R: Tomi Valkeinen +L: dri-devel@lists.freedesktop.org +S: Maintained +F: Documentation/devicetree/bindings/display/tilcdc/ +F: drivers/gpu/drm/tilcdc/ + +DRM DRIVERS FOR TI OMAP +M: Tomi Valkeinen +L: dri-devel@lists.freedesktop.org +S: Maintained +F: Documentation/devicetree/bindings/display/ti/ +F: drivers/gpu/drm/omapdrm/ + +DRM DRIVERS FOR V3D +M: Emma Anholt +S: Supported +T: git git://anongit.freedesktop.org/drm/drm-misc +F: Documentation/devicetree/bindings/gpu/brcm,bcm-v3d.yaml +F: drivers/gpu/drm/v3d/ +F: include/uapi/drm/v3d_drm.h + +DRM DRIVERS FOR VC4 +M: Emma Anholt +M: Maxime Ripard +S: Supported +T: git git://github.com/anholt/linux +T: git git://anongit.freedesktop.org/drm/drm-misc +F: Documentation/devicetree/bindings/display/brcm,bcm2835-*.yaml +F: drivers/gpu/drm/vc4/ +F: include/uapi/drm/vc4_drm.h + +DRM DRIVERS FOR VIVANTE GPU IP +M: Lucas Stach +R: Russell King +R: Christian Gmeiner +L: etnaviv@lists.freedesktop.org (moderated for non-subscribers) +L: dri-devel@lists.freedesktop.org +S: Maintained +F: Documentation/devicetree/bindings/gpu/vivante,gc.yaml +F: drivers/gpu/drm/etnaviv/ +F: include/uapi/drm/etnaviv_drm.h + +DRM DRIVERS FOR XEN +M: Oleksandr Andrushchenko +L: dri-devel@lists.freedesktop.org +L: xen-devel@lists.xenproject.org (moderated for non-subscribers) +S: Supported +T: git git://anongit.freedesktop.org/drm/drm-misc +F: Documentation/gpu/xen-front.rst +F: drivers/gpu/drm/xen/ + +DRM DRIVERS FOR XILINX +M: Hyun Kwon +M: Laurent Pinchart +L: dri-devel@lists.freedesktop.org +S: Maintained +T: git git://anongit.freedesktop.org/drm/drm-misc +F: Documentation/devicetree/bindings/display/xlnx/ +F: drivers/gpu/drm/xlnx/ + +DRM PANEL DRIVERS +M: Thierry Reding +R: Sam Ravnborg +L: dri-devel@lists.freedesktop.org +S: Maintained +T: git git://anongit.freedesktop.org/drm/drm-misc +F: Documentation/devicetree/bindings/display/panel/ +F: drivers/gpu/drm/drm_panel.c +F: drivers/gpu/drm/panel/ +F: include/drm/drm_panel.h + +DRM TTM SUBSYSTEM +M: Christian Koenig +M: Huang Rui +L: dri-devel@lists.freedesktop.org +S: Maintained +T: git git://anongit.freedesktop.org/drm/drm-misc +F: drivers/gpu/drm/ttm/ +F: include/drm/ttm/ + +DSBR100 USB FM RADIO DRIVER +M: Alexey Klimov +L: linux-media@vger.kernel.org +S: Maintained +T: git git://linuxtv.org/media_tree.git +F: drivers/media/radio/dsbr100.c + +DT3155 MEDIA DRIVER +M: Hans Verkuil +L: linux-media@vger.kernel.org +S: Odd Fixes +W: https://linuxtv.org +T: git git://linuxtv.org/media_tree.git +F: drivers/media/pci/dt3155/ + +DVB_USB_AF9015 MEDIA DRIVER +M: Antti Palosaari +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +W: http://palosaari.fi/linux/ +Q: http://patchwork.linuxtv.org/project/linux-media/list/ +T: git git://linuxtv.org/anttip/media_tree.git +F: drivers/media/usb/dvb-usb-v2/af9015* + +DVB_USB_AF9035 MEDIA DRIVER +M: Antti Palosaari +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +W: http://palosaari.fi/linux/ +Q: http://patchwork.linuxtv.org/project/linux-media/list/ +T: git git://linuxtv.org/anttip/media_tree.git +F: drivers/media/usb/dvb-usb-v2/af9035* + +DVB_USB_ANYSEE MEDIA DRIVER +M: Antti Palosaari +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +W: http://palosaari.fi/linux/ +Q: http://patchwork.linuxtv.org/project/linux-media/list/ +T: git git://linuxtv.org/anttip/media_tree.git +F: drivers/media/usb/dvb-usb-v2/anysee* + +DVB_USB_AU6610 MEDIA DRIVER +M: Antti Palosaari +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +W: http://palosaari.fi/linux/ +Q: http://patchwork.linuxtv.org/project/linux-media/list/ +T: git git://linuxtv.org/anttip/media_tree.git +F: drivers/media/usb/dvb-usb-v2/au6610* + +DVB_USB_CE6230 MEDIA DRIVER +M: Antti Palosaari +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +W: http://palosaari.fi/linux/ +Q: http://patchwork.linuxtv.org/project/linux-media/list/ +T: git git://linuxtv.org/anttip/media_tree.git +F: drivers/media/usb/dvb-usb-v2/ce6230* + +DVB_USB_CXUSB MEDIA DRIVER +M: Michael Krufky +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +W: http://github.com/mkrufky +Q: http://patchwork.linuxtv.org/project/linux-media/list/ +T: git git://linuxtv.org/media_tree.git +F: drivers/media/usb/dvb-usb/cxusb* + +DVB_USB_EC168 MEDIA DRIVER +M: Antti Palosaari +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +W: http://palosaari.fi/linux/ +Q: http://patchwork.linuxtv.org/project/linux-media/list/ +T: git git://linuxtv.org/anttip/media_tree.git +F: drivers/media/usb/dvb-usb-v2/ec168* + +DVB_USB_GL861 MEDIA DRIVER +M: Antti Palosaari +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +Q: http://patchwork.linuxtv.org/project/linux-media/list/ +T: git git://linuxtv.org/anttip/media_tree.git +F: drivers/media/usb/dvb-usb-v2/gl861* + +DVB_USB_MXL111SF MEDIA DRIVER +M: Michael Krufky +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +W: http://github.com/mkrufky +Q: http://patchwork.linuxtv.org/project/linux-media/list/ +T: git git://linuxtv.org/mkrufky/mxl111sf.git +F: drivers/media/usb/dvb-usb-v2/mxl111sf* + +DVB_USB_RTL28XXU MEDIA DRIVER +M: Antti Palosaari +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +W: http://palosaari.fi/linux/ +Q: http://patchwork.linuxtv.org/project/linux-media/list/ +T: git git://linuxtv.org/anttip/media_tree.git +F: drivers/media/usb/dvb-usb-v2/rtl28xxu* + +DVB_USB_V2 MEDIA DRIVER +M: Antti Palosaari +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +W: http://palosaari.fi/linux/ +Q: http://patchwork.linuxtv.org/project/linux-media/list/ +T: git git://linuxtv.org/anttip/media_tree.git +F: drivers/media/usb/dvb-usb-v2/dvb_usb* +F: drivers/media/usb/dvb-usb-v2/usb_urb.c + +DYNAMIC DEBUG +M: Jason Baron +S: Maintained +F: include/linux/dynamic_debug.h +F: lib/dynamic_debug.c + +DYNAMIC INTERRUPT MODERATION +M: Tal Gilboa +S: Maintained +F: Documentation/networking/net_dim.rst +F: include/linux/dim.h +F: lib/dim/ + +DZ DECSTATION DZ11 SERIAL DRIVER +M: "Maciej W. Rozycki" +S: Maintained +F: drivers/tty/serial/dz.* + +E3X0 POWER BUTTON DRIVER +M: Moritz Fischer +L: usrp-users@lists.ettus.com +S: Supported +W: http://www.ettus.com +F: Documentation/devicetree/bindings/input/e3x0-button.txt +F: drivers/input/misc/e3x0-button.c + +E4000 MEDIA DRIVER +M: Antti Palosaari +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +W: http://palosaari.fi/linux/ +Q: http://patchwork.linuxtv.org/project/linux-media/list/ +T: git git://linuxtv.org/anttip/media_tree.git +F: drivers/media/tuners/e4000* + +EARTH_PT1 MEDIA DRIVER +M: Akihiro Tsukada +L: linux-media@vger.kernel.org +S: Odd Fixes +F: drivers/media/pci/pt1/ + +EARTH_PT3 MEDIA DRIVER +M: Akihiro Tsukada +L: linux-media@vger.kernel.org +S: Odd Fixes +F: drivers/media/pci/pt3/ + +EC100 MEDIA DRIVER +M: Antti Palosaari +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +W: http://palosaari.fi/linux/ +Q: http://patchwork.linuxtv.org/project/linux-media/list/ +T: git git://linuxtv.org/anttip/media_tree.git +F: drivers/media/dvb-frontends/ec100* + +ECRYPT FILE SYSTEM +M: Tyler Hicks +L: ecryptfs@vger.kernel.org +S: Odd Fixes +W: http://ecryptfs.org +W: https://launchpad.net/ecryptfs +T: git git://git.kernel.org/pub/scm/linux/kernel/git/tyhicks/ecryptfs.git +F: Documentation/filesystems/ecryptfs.rst +F: fs/ecryptfs/ + +EDAC-AMD64 +M: Yazen Ghannam +L: linux-edac@vger.kernel.org +S: Supported +F: drivers/edac/amd64_edac* +F: drivers/edac/mce_amd* + +EDAC-ARMADA +M: Jan Luebbe +L: linux-edac@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/memory-controllers/marvell,mvebu-sdram-controller.yaml +F: drivers/edac/armada_xp_* + +EDAC-AST2500 +M: Stefan Schaeckeler +S: Supported +F: Documentation/devicetree/bindings/edac/aspeed-sdram-edac.txt +F: drivers/edac/aspeed_edac.c + +EDAC-BLUEFIELD +M: Shravan Kumar Ramani +S: Supported +F: drivers/edac/bluefield_edac.c + +EDAC-CALXEDA +M: Andre Przywara +L: linux-edac@vger.kernel.org +S: Maintained +F: drivers/edac/highbank* + +EDAC-CAVIUM OCTEON +M: Ralf Baechle +L: linux-edac@vger.kernel.org +L: linux-mips@vger.kernel.org +S: Supported +F: drivers/edac/octeon_edac* + +EDAC-CAVIUM THUNDERX +M: Robert Richter +L: linux-edac@vger.kernel.org +S: Odd Fixes +F: drivers/edac/thunderx_edac* + +EDAC-CORE +M: Borislav Petkov +M: Mauro Carvalho Chehab +M: Tony Luck +R: James Morse +R: Robert Richter +L: linux-edac@vger.kernel.org +S: Supported +T: git git://git.kernel.org/pub/scm/linux/kernel/git/ras/ras.git edac-for-next +F: Documentation/admin-guide/ras.rst +F: Documentation/driver-api/edac.rst +F: drivers/edac/ +F: include/linux/edac.h + +EDAC-DMC520 +M: Lei Wang +L: linux-edac@vger.kernel.org +S: Supported +F: drivers/edac/dmc520_edac.c + +EDAC-E752X +M: Mark Gross +L: linux-edac@vger.kernel.org +S: Maintained +F: drivers/edac/e752x_edac.c + +EDAC-E7XXX +L: linux-edac@vger.kernel.org +S: Maintained +F: drivers/edac/e7xxx_edac.c + +EDAC-FSL_DDR +M: York Sun +L: linux-edac@vger.kernel.org +S: Maintained +F: drivers/edac/fsl_ddr_edac.* + +EDAC-GHES +M: Mauro Carvalho Chehab +L: linux-edac@vger.kernel.org +S: Maintained +F: drivers/edac/ghes_edac.c + +EDAC-I10NM +M: Tony Luck +L: linux-edac@vger.kernel.org +S: Maintained +F: drivers/edac/i10nm_base.c + +EDAC-I3000 +L: linux-edac@vger.kernel.org +S: Orphan +F: drivers/edac/i3000_edac.c + +EDAC-I5000 +L: linux-edac@vger.kernel.org +S: Maintained +F: drivers/edac/i5000_edac.c + +EDAC-I5400 +M: Mauro Carvalho Chehab +L: linux-edac@vger.kernel.org +S: Maintained +F: drivers/edac/i5400_edac.c + +EDAC-I7300 +M: Mauro Carvalho Chehab +L: linux-edac@vger.kernel.org +S: Maintained +F: drivers/edac/i7300_edac.c + +EDAC-I7CORE +M: Mauro Carvalho Chehab +L: linux-edac@vger.kernel.org +S: Maintained +F: drivers/edac/i7core_edac.c + +EDAC-I82443BXGX +M: Tim Small +L: linux-edac@vger.kernel.org +S: Maintained +F: drivers/edac/i82443bxgx_edac.c + +EDAC-I82975X +M: "Arvind R." +L: linux-edac@vger.kernel.org +S: Maintained +F: drivers/edac/i82975x_edac.c + +EDAC-IE31200 +M: Jason Baron +L: linux-edac@vger.kernel.org +S: Maintained +F: drivers/edac/ie31200_edac.c + +EDAC-IGEN6 +M: Tony Luck +R: Qiuxu Zhuo +L: linux-edac@vger.kernel.org +S: Maintained +F: drivers/edac/igen6_edac.c + +EDAC-MPC85XX +M: Johannes Thumshirn +L: linux-edac@vger.kernel.org +S: Maintained +F: drivers/edac/mpc85xx_edac.[ch] + +EDAC-PASEMI +M: Egor Martovetsky +L: linux-edac@vger.kernel.org +S: Maintained +F: drivers/edac/pasemi_edac.c + +EDAC-PND2 +M: Tony Luck +L: linux-edac@vger.kernel.org +S: Maintained +F: drivers/edac/pnd2_edac.[ch] + +EDAC-QCOM +M: Channagoud Kadabi +M: Venkata Narendra Kumar Gutta +L: linux-arm-msm@vger.kernel.org +L: linux-edac@vger.kernel.org +S: Maintained +F: drivers/edac/qcom_edac.c + +EDAC-R82600 +M: Tim Small +L: linux-edac@vger.kernel.org +S: Maintained +F: drivers/edac/r82600_edac.c + +EDAC-SBRIDGE +M: Tony Luck +R: Qiuxu Zhuo +L: linux-edac@vger.kernel.org +S: Maintained +F: drivers/edac/sb_edac.c + +EDAC-SIFIVE +M: Yash Shah +L: linux-edac@vger.kernel.org +S: Supported +F: drivers/edac/sifive_edac.c + +EDAC-SKYLAKE +M: Tony Luck +L: linux-edac@vger.kernel.org +S: Maintained +F: drivers/edac/skx_*.[ch] + +EDAC-TI +M: Tero Kristo +L: linux-edac@vger.kernel.org +S: Odd Fixes +F: drivers/edac/ti_edac.c + +EDIROL UA-101/UA-1000 DRIVER +M: Clemens Ladisch +L: alsa-devel@alsa-project.org (moderated for non-subscribers) +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound.git +F: sound/usb/misc/ua101.c + +EFI TEST DRIVER +M: Ivan Hu +M: Ard Biesheuvel +L: linux-efi@vger.kernel.org +S: Maintained +F: drivers/firmware/efi/test/ + +EFI VARIABLE FILESYSTEM +M: Matthew Garrett +M: Jeremy Kerr +M: Ard Biesheuvel +L: linux-efi@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/efi/efi.git +F: fs/efivarfs/ + +EFIFB FRAMEBUFFER DRIVER +M: Peter Jones +L: linux-fbdev@vger.kernel.org +S: Maintained +F: drivers/video/fbdev/efifb.c + +EFS FILESYSTEM +S: Orphan +W: http://aeschi.ch.eu.org/efs/ +F: fs/efs/ + +EHEA (IBM pSeries eHEA 10Gb ethernet adapter) DRIVER +M: Douglas Miller +L: netdev@vger.kernel.org +S: Maintained +F: drivers/net/ethernet/ibm/ehea/ + +EM28XX VIDEO4LINUX DRIVER +M: Mauro Carvalho Chehab +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +T: git git://linuxtv.org/media_tree.git +F: Documentation/admin-guide/media/em28xx* +F: drivers/media/usb/em28xx/ + +EMBEDDED LINUX +M: Matt Mackall +M: David Woodhouse +L: linux-embedded@vger.kernel.org +S: Maintained + +EMMC CMDQ HOST CONTROLLER INTERFACE (CQHCI) DRIVER +M: Adrian Hunter +M: Ritesh Harjani +M: Asutosh Das +L: linux-mmc@vger.kernel.org +S: Maintained +F: drivers/mmc/host/cqhci* + +EMULEX 10Gbps iSCSI - OneConnect DRIVER +M: Subbu Seetharaman +M: Ketan Mukadam +M: Jitendra Bhivare +L: linux-scsi@vger.kernel.org +S: Supported +W: http://www.broadcom.com +F: drivers/scsi/be2iscsi/ + +EMULEX 10Gbps NIC BE2, BE3-R, Lancer, Skyhawk-R DRIVER (be2net) +M: Ajit Khaparde +M: Sriharsha Basavapatna +M: Somnath Kotur +L: netdev@vger.kernel.org +S: Supported +W: http://www.emulex.com +F: drivers/net/ethernet/emulex/benet/ + +EMULEX ONECONNECT ROCE DRIVER +M: Selvin Xavier +L: linux-rdma@vger.kernel.org +S: Odd Fixes +W: http://www.broadcom.com +F: drivers/infiniband/hw/ocrdma/ +F: include/uapi/rdma/ocrdma-abi.h + +EMULEX/BROADCOM LPFC FC/FCOE SCSI DRIVER +M: James Smart +M: Dick Kennedy +L: linux-scsi@vger.kernel.org +S: Supported +W: http://www.broadcom.com +F: drivers/scsi/lpfc/ + +EMULEX/BROADCOM EFCT FC/FCOE SCSI TARGET DRIVER +M: James Smart +M: Ram Vegesna +L: linux-scsi@vger.kernel.org +L: target-devel@vger.kernel.org +S: Supported +W: http://www.broadcom.com +F: drivers/scsi/elx/ + +ENE CB710 FLASH CARD READER DRIVER +M: Michał Mirosław +S: Maintained +F: drivers/misc/cb710/ +F: drivers/mmc/host/cb710-mmc.* +F: include/linux/cb710.h + +ENE KB2426 (ENE0100/ENE020XX) INFRARED RECEIVER +M: Maxim Levitsky +S: Maintained +F: drivers/media/rc/ene_ir.* + +EPAPR HYPERVISOR BYTE CHANNEL DEVICE DRIVER +M: Laurentiu Tudor +L: linuxppc-dev@lists.ozlabs.org +S: Maintained +F: drivers/tty/ehv_bytechan.c + +EPSON S1D13XXX FRAMEBUFFER DRIVER +M: Kristoffer Ericson +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/kristoffer/linux-hpc.git +F: drivers/video/fbdev/s1d13xxxfb.c +F: include/video/s1d13xxxfb.h + +EROFS FILE SYSTEM +M: Gao Xiang +M: Chao Yu +L: linux-erofs@lists.ozlabs.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/xiang/erofs.git +F: Documentation/filesystems/erofs.rst +F: fs/erofs/ +F: include/trace/events/erofs.h + +ERRSEQ ERROR TRACKING INFRASTRUCTURE +M: Jeff Layton +S: Maintained +F: include/linux/errseq.h +F: lib/errseq.c + +ET131X NETWORK DRIVER +M: Mark Einon +S: Odd Fixes +F: drivers/net/ethernet/agere/ + +ETAS ES58X CAN/USB DRIVER +M: Vincent Mailhol +L: linux-can@vger.kernel.org +S: Maintained +F: drivers/net/can/usb/etas_es58x/ + +ETHERNET BRIDGE +M: Roopa Prabhu +M: Nikolay Aleksandrov +L: bridge@lists.linux-foundation.org (moderated for non-subscribers) +L: netdev@vger.kernel.org +S: Maintained +W: http://www.linuxfoundation.org/en/Net:Bridge +F: include/linux/netfilter_bridge/ +F: net/bridge/ + +ETHERNET PHY LIBRARY +M: Andrew Lunn +M: Heiner Kallweit +R: Russell King +L: netdev@vger.kernel.org +S: Maintained +F: Documentation/ABI/testing/sysfs-class-net-phydev +F: Documentation/devicetree/bindings/net/ethernet-phy.yaml +F: Documentation/devicetree/bindings/net/mdio* +F: Documentation/devicetree/bindings/net/qca,ar803x.yaml +F: Documentation/networking/phy.rst +F: drivers/net/mdio/ +F: drivers/net/mdio/acpi_mdio.c +F: drivers/net/mdio/fwnode_mdio.c +F: drivers/net/mdio/of_mdio.c +F: drivers/net/pcs/ +F: drivers/net/phy/ +F: drivers/of/of_net.c +F: include/dt-bindings/net/qca-ar803x.h +F: include/linux/*mdio*.h +F: include/linux/mdio/*.h +F: include/linux/of_net.h +F: include/linux/phy.h +F: include/linux/phy_fixed.h +F: include/linux/platform_data/mdio-bcm-unimac.h +F: include/linux/platform_data/mdio-gpio.h +F: include/trace/events/mdio.h +F: include/uapi/linux/mdio.h +F: include/uapi/linux/mii.h + +EXFAT FILE SYSTEM +M: Namjae Jeon +M: Sungjong Seo +L: linux-fsdevel@vger.kernel.org +S: Maintained +F: fs/exfat/ + +EXT2 FILE SYSTEM +M: Jan Kara +L: linux-ext4@vger.kernel.org +S: Maintained +F: Documentation/filesystems/ext2.rst +F: fs/ext2/ +F: include/linux/ext2* + +EXT4 FILE SYSTEM +M: "Theodore Ts'o" +M: Andreas Dilger +L: linux-ext4@vger.kernel.org +S: Maintained +W: http://ext4.wiki.kernel.org +Q: http://patchwork.ozlabs.org/project/linux-ext4/list/ +T: git git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4.git +F: Documentation/filesystems/ext4/ +F: fs/ext4/ +F: include/trace/events/ext4.h + +Extended Verification Module (EVM) +M: Mimi Zohar +L: linux-integrity@vger.kernel.org +S: Supported +F: security/integrity/evm/ + +EXTENSIBLE FIRMWARE INTERFACE (EFI) +M: Ard Biesheuvel +L: linux-efi@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/efi/efi.git +F: Documentation/admin-guide/efi-stub.rst +F: arch/*/include/asm/efi.h +F: arch/*/kernel/efi.c +F: arch/arm/boot/compressed/efi-header.S +F: arch/arm64/kernel/efi-entry.S +F: arch/x86/platform/efi/ +F: drivers/firmware/efi/ +F: include/linux/efi*.h + +EXTERNAL CONNECTOR SUBSYSTEM (EXTCON) +M: MyungJoo Ham +M: Chanwoo Choi +L: linux-kernel@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/chanwoo/extcon.git +F: Documentation/devicetree/bindings/extcon/ +F: Documentation/firmware-guide/acpi/extcon-intel-int3496.rst +F: drivers/extcon/ +F: include/linux/extcon.h +F: include/linux/extcon/ + +EXTRA BOOT CONFIG +M: Masami Hiramatsu +S: Maintained +F: Documentation/admin-guide/bootconfig.rst +F: fs/proc/bootconfig.c +F: include/linux/bootconfig.h +F: lib/bootconfig.c +F: tools/bootconfig/* +F: tools/bootconfig/scripts/* + +EXYNOS DP DRIVER +M: Jingoo Han +L: dri-devel@lists.freedesktop.org +S: Maintained +F: drivers/gpu/drm/exynos/exynos_dp* + +EXYNOS SYSMMU (IOMMU) driver +M: Marek Szyprowski +L: iommu@lists.linux-foundation.org +S: Maintained +F: drivers/iommu/exynos-iommu.c + +F2FS FILE SYSTEM +M: Jaegeuk Kim +M: Chao Yu +L: linux-f2fs-devel@lists.sourceforge.net +S: Maintained +W: https://f2fs.wiki.kernel.org/ +T: git git://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs.git +F: Documentation/ABI/testing/sysfs-fs-f2fs +F: Documentation/filesystems/f2fs.rst +F: fs/f2fs/ +F: include/linux/f2fs_fs.h +F: include/trace/events/f2fs.h +F: include/uapi/linux/f2fs.h + +F71805F HARDWARE MONITORING DRIVER +M: Jean Delvare +L: linux-hwmon@vger.kernel.org +S: Maintained +F: Documentation/hwmon/f71805f.rst +F: drivers/hwmon/f71805f.c + +FADDR2LINE +M: Josh Poimboeuf +S: Maintained +F: scripts/faddr2line + +FAILOVER MODULE +M: Sridhar Samudrala +L: netdev@vger.kernel.org +S: Supported +F: Documentation/networking/failover.rst +F: include/net/failover.h +F: net/core/failover.c + +FANOTIFY +M: Jan Kara +R: Amir Goldstein +R: Matthew Bobrowski +L: linux-fsdevel@vger.kernel.org +S: Maintained +F: fs/notify/fanotify/ +F: include/linux/fanotify.h +F: include/uapi/linux/fanotify.h + +FARSYNC SYNCHRONOUS DRIVER +M: Kevin Curtis +S: Supported +W: http://www.farsite.co.uk/ +F: drivers/net/wan/farsync.* + +FAULT INJECTION SUPPORT +M: Akinobu Mita +S: Supported +F: Documentation/fault-injection/ +F: lib/fault-inject.c + +FBTFT Framebuffer drivers +L: dri-devel@lists.freedesktop.org +L: linux-fbdev@vger.kernel.org +S: Orphan +F: drivers/staging/fbtft/ + +FC0011 TUNER DRIVER +M: Michael Buesch +L: linux-media@vger.kernel.org +S: Maintained +F: drivers/media/tuners/fc0011.c +F: drivers/media/tuners/fc0011.h + +FC2580 MEDIA DRIVER +M: Antti Palosaari +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +W: http://palosaari.fi/linux/ +Q: http://patchwork.linuxtv.org/project/linux-media/list/ +T: git git://linuxtv.org/anttip/media_tree.git +F: drivers/media/tuners/fc2580* + +FCOE SUBSYSTEM (libfc, libfcoe, fcoe) +M: Hannes Reinecke +L: linux-scsi@vger.kernel.org +S: Supported +W: www.Open-FCoE.org +F: drivers/scsi/fcoe/ +F: drivers/scsi/libfc/ +F: include/scsi/fc/ +F: include/scsi/libfc.h +F: include/scsi/libfcoe.h +F: include/uapi/scsi/fc/ + +FILE LOCKING (flock() and fcntl()/lockf()) +M: Jeff Layton +M: "J. Bruce Fields" +L: linux-fsdevel@vger.kernel.org +S: Maintained +F: fs/fcntl.c +F: fs/locks.c +F: include/linux/fcntl.h +F: include/uapi/linux/fcntl.h + +FILESYSTEM DIRECT ACCESS (DAX) +M: Dan Williams +R: Matthew Wilcox +R: Jan Kara +L: linux-fsdevel@vger.kernel.org +L: nvdimm@lists.linux.dev +S: Supported +F: fs/dax.c +F: include/linux/dax.h +F: include/trace/events/fs_dax.h + +FILESYSTEMS (VFS and infrastructure) +M: Alexander Viro +L: linux-fsdevel@vger.kernel.org +S: Maintained +F: fs/* +F: include/linux/fs.h +F: include/linux/fs_types.h +F: include/uapi/linux/fs.h +F: include/uapi/linux/openat2.h +X: fs/io-wq.c +X: fs/io-wq.h +X: fs/io_uring.c + +FINTEK F75375S HARDWARE MONITOR AND FAN CONTROLLER DRIVER +M: Riku Voipio +L: linux-hwmon@vger.kernel.org +S: Maintained +F: drivers/hwmon/f75375s.c +F: include/linux/f75375s.h + +FIREWIRE AUDIO DRIVERS and IEC 61883-1/6 PACKET STREAMING ENGINE +M: Clemens Ladisch +M: Takashi Sakamoto +L: alsa-devel@alsa-project.org (moderated for non-subscribers) +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound.git +F: include/uapi/sound/firewire.h +F: sound/firewire/ + +FIREWIRE MEDIA DRIVERS (firedtv) +M: Stefan Richter +L: linux-media@vger.kernel.org +L: linux1394-devel@lists.sourceforge.net +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media.git +F: drivers/media/firewire/ + +FIREWIRE SBP-2 TARGET +M: Chris Boot +L: linux-scsi@vger.kernel.org +L: target-devel@vger.kernel.org +L: linux1394-devel@lists.sourceforge.net +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/nab/lio-core-2.6.git master +F: drivers/target/sbp/ + +FIREWIRE SUBSYSTEM +M: Stefan Richter +L: linux1394-devel@lists.sourceforge.net +S: Maintained +W: http://ieee1394.wiki.kernel.org/ +T: git git://git.kernel.org/pub/scm/linux/kernel/git/ieee1394/linux1394.git +F: drivers/firewire/ +F: include/linux/firewire.h +F: include/uapi/linux/firewire*.h +F: tools/firewire/ + +FIRMWARE FRAMEWORK FOR ARMV8-A +M: Sudeep Holla +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +F: drivers/firmware/arm_ffa/ +F: include/linux/arm_ffa.h + +FIRMWARE LOADER (request_firmware) +M: Luis Chamberlain +L: linux-kernel@vger.kernel.org +S: Maintained +F: Documentation/firmware_class/ +F: drivers/base/firmware_loader/ +F: include/linux/firmware.h + +FLASH ADAPTER DRIVER (IBM Flash Adapter 900GB Full Height PCI Flash Card) +M: Joshua Morris +M: Philip Kelleher +S: Maintained +F: drivers/block/rsxx/ + +FLEXTIMER FTM-QUADDEC DRIVER +M: Patrick Havelange +L: linux-iio@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/counter/ftm-quaddec.txt +F: drivers/counter/ftm-quaddec.c + +FLOPPY DRIVER +M: Denis Efremov +L: linux-block@vger.kernel.org +S: Odd Fixes +F: drivers/block/floppy.c + +FLYSKY FSIA6B RC RECEIVER +M: Markus Koch +L: linux-input@vger.kernel.org +S: Maintained +F: drivers/input/joystick/fsia6b.c + +FOCUSRITE SCARLETT GEN 2/3 MIXER DRIVER +M: Geoffrey D. Bennett +L: alsa-devel@alsa-project.org (moderated for non-subscribers) +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound.git +F: sound/usb/mixer_scarlett_gen2.c + +FORCEDETH GIGABIT ETHERNET DRIVER +M: Rain River +M: Zhu Yanjun +L: netdev@vger.kernel.org +S: Maintained +F: drivers/net/ethernet/nvidia/* + +FPGA DFL DRIVERS +M: Wu Hao +R: Tom Rix +L: linux-fpga@vger.kernel.org +S: Maintained +F: Documentation/ABI/testing/sysfs-bus-dfl* +F: Documentation/fpga/dfl.rst +F: drivers/fpga/dfl* +F: drivers/uio/uio_dfl.c +F: include/linux/dfl.h +F: include/uapi/linux/fpga-dfl.h + +FPGA MANAGER FRAMEWORK +M: Moritz Fischer +M: Wu Hao +M: Xu Yilun +R: Tom Rix +L: linux-fpga@vger.kernel.org +S: Maintained +Q: http://patchwork.kernel.org/project/linux-fpga/list/ +T: git git://git.kernel.org/pub/scm/linux/kernel/git/mdf/linux-fpga.git +F: Documentation/devicetree/bindings/fpga/ +F: Documentation/driver-api/fpga/ +F: Documentation/fpga/ +F: drivers/fpga/ +F: include/linux/fpga/ + +FPU EMULATOR +M: Bill Metzenthen +S: Maintained +W: http://floatingpoint.sourceforge.net/emulator/index.html +F: arch/x86/math-emu/ + +FRAMEBUFFER LAYER +L: dri-devel@lists.freedesktop.org +L: linux-fbdev@vger.kernel.org +S: Orphan +Q: http://patchwork.kernel.org/project/linux-fbdev/list/ +T: git git://anongit.freedesktop.org/drm/drm-misc +F: Documentation/fb/ +F: drivers/video/ +F: include/linux/fb.h +F: include/uapi/linux/fb.h +F: include/uapi/video/ +F: include/video/ + +FREESCALE CAAM (Cryptographic Acceleration and Assurance Module) DRIVER +M: Horia Geantă +M: Pankaj Gupta +L: linux-crypto@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/crypto/fsl-sec4.txt +F: drivers/crypto/caam/ + +FREESCALE COLDFIRE M5441X MMC DRIVER +M: Angelo Dureghello +L: linux-mmc@vger.kernel.org +S: Maintained +F: drivers/mmc/host/sdhci-esdhc-mcf.c +F: include/linux/platform_data/mmc-esdhc-mcf.h + +FREESCALE DIU FRAMEBUFFER DRIVER +M: Timur Tabi +L: linux-fbdev@vger.kernel.org +S: Maintained +F: drivers/video/fbdev/fsl-diu-fb.* + +FREESCALE DMA DRIVER +M: Li Yang +M: Zhang Wei +L: linuxppc-dev@lists.ozlabs.org +S: Maintained +F: drivers/dma/fsldma.* + +FREESCALE DSPI DRIVER +M: Vladimir Oltean +L: linux-spi@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/spi/spi-fsl-dspi.txt +F: drivers/spi/spi-fsl-dspi.c +F: include/linux/spi/spi-fsl-dspi.h + +FREESCALE ENETC ETHERNET DRIVERS +M: Claudiu Manoil +L: netdev@vger.kernel.org +S: Maintained +F: drivers/net/ethernet/freescale/enetc/ + +FREESCALE eTSEC ETHERNET DRIVER (GIANFAR) +M: Claudiu Manoil +L: netdev@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/net/fsl-tsec-phy.txt +F: drivers/net/ethernet/freescale/gianfar* + +FREESCALE GPMI NAND DRIVER +M: Han Xu +L: linux-mtd@lists.infradead.org +S: Maintained +F: drivers/mtd/nand/raw/gpmi-nand/* + +FREESCALE I2C CPM DRIVER +M: Jochen Friedrich +L: linuxppc-dev@lists.ozlabs.org +L: linux-i2c@vger.kernel.org +S: Maintained +F: drivers/i2c/busses/i2c-cpm.c + +FREESCALE IMX / MXC FEC DRIVER +M: Joakim Zhang +L: netdev@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/net/fsl,fec.yaml +F: drivers/net/ethernet/freescale/fec.h +F: drivers/net/ethernet/freescale/fec_main.c +F: drivers/net/ethernet/freescale/fec_ptp.c + +FREESCALE IMX / MXC FRAMEBUFFER DRIVER +M: Sascha Hauer +R: Pengutronix Kernel Team +L: linux-fbdev@vger.kernel.org +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +F: drivers/video/fbdev/imxfb.c +F: include/linux/platform_data/video-imxfb.h + +FREESCALE IMX DDR PMU DRIVER +M: Frank Li +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +F: Documentation/admin-guide/perf/imx-ddr.rst +F: Documentation/devicetree/bindings/perf/fsl-imx-ddr.yaml +F: drivers/perf/fsl_imx8_ddr_perf.c + +FREESCALE IMX I2C DRIVER +M: Oleksij Rempel +R: Pengutronix Kernel Team +L: linux-i2c@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/i2c/i2c-imx.yaml +F: drivers/i2c/busses/i2c-imx.c + +FREESCALE IMX LPI2C DRIVER +M: Dong Aisheng +L: linux-i2c@vger.kernel.org +L: linux-imx@nxp.com +S: Maintained +F: Documentation/devicetree/bindings/i2c/i2c-imx-lpi2c.yaml +F: drivers/i2c/busses/i2c-imx-lpi2c.c + +FREESCALE MPC I2C DRIVER +M: Chris Packham +L: linux-i2c@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/i2c/i2c-mpc.yaml +F: drivers/i2c/busses/i2c-mpc.c + +FREESCALE QORIQ DPAA ETHERNET DRIVER +M: Madalin Bucur +L: netdev@vger.kernel.org +S: Maintained +F: drivers/net/ethernet/freescale/dpaa + +FREESCALE QORIQ DPAA FMAN DRIVER +M: Madalin Bucur +L: netdev@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/net/fsl-fman.txt +F: drivers/net/ethernet/freescale/fman + +FREESCALE QORIQ PTP CLOCK DRIVER +M: Yangbo Lu +L: netdev@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/ptp/ptp-qoriq.txt +F: drivers/net/ethernet/freescale/dpaa2/dpaa2-ptp* +F: drivers/net/ethernet/freescale/dpaa2/dprtc* +F: drivers/net/ethernet/freescale/enetc/enetc_ptp.c +F: drivers/ptp/ptp_qoriq.c +F: drivers/ptp/ptp_qoriq_debugfs.c +F: include/linux/fsl/ptp_qoriq.h + +FREESCALE QUAD SPI DRIVER +M: Han Xu +L: linux-spi@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/spi/fsl,spi-fsl-qspi.yaml +F: drivers/spi/spi-fsl-qspi.c + +FREESCALE QUICC ENGINE LIBRARY +M: Qiang Zhao +L: linuxppc-dev@lists.ozlabs.org +S: Maintained +F: drivers/soc/fsl/qe/ +F: include/soc/fsl/*qe*.h +F: include/soc/fsl/*ucc*.h + +FREESCALE QUICC ENGINE UCC ETHERNET DRIVER +M: Li Yang +L: netdev@vger.kernel.org +L: linuxppc-dev@lists.ozlabs.org +S: Maintained +F: drivers/net/ethernet/freescale/ucc_geth* + +FREESCALE QUICC ENGINE UCC HDLC DRIVER +M: Zhao Qiang +L: netdev@vger.kernel.org +L: linuxppc-dev@lists.ozlabs.org +S: Maintained +F: drivers/net/wan/fsl_ucc_hdlc* + +FREESCALE QUICC ENGINE UCC UART DRIVER +M: Timur Tabi +L: linuxppc-dev@lists.ozlabs.org +S: Maintained +F: drivers/tty/serial/ucc_uart.c + +FREESCALE SOC DRIVERS +M: Li Yang +L: linuxppc-dev@lists.ozlabs.org +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +F: Documentation/devicetree/bindings/misc/fsl,dpaa2-console.yaml +F: Documentation/devicetree/bindings/soc/fsl/ +F: drivers/soc/fsl/ +F: include/linux/fsl/ + +FREESCALE SOC FS_ENET DRIVER +M: Pantelis Antoniou +L: linuxppc-dev@lists.ozlabs.org +L: netdev@vger.kernel.org +S: Maintained +F: drivers/net/ethernet/freescale/fs_enet/ +F: include/linux/fs_enet_pd.h + +FREESCALE SOC SOUND DRIVERS +M: Nicolin Chen +M: Xiubo Li +R: Fabio Estevam +R: Shengjiu Wang +L: alsa-devel@alsa-project.org (moderated for non-subscribers) +L: linuxppc-dev@lists.ozlabs.org +S: Maintained +F: sound/soc/fsl/fsl* +F: sound/soc/fsl/imx* +F: sound/soc/fsl/mpc8610_hpcd.c + +FREESCALE USB PERIPHERAL DRIVERS +M: Li Yang +L: linux-usb@vger.kernel.org +L: linuxppc-dev@lists.ozlabs.org +S: Maintained +F: drivers/usb/gadget/udc/fsl* + +FREESCALE USB PHY DRIVER +M: Ran Wang +L: linux-usb@vger.kernel.org +L: linuxppc-dev@lists.ozlabs.org +S: Maintained +F: drivers/usb/phy/phy-fsl-usb* + +FREEVXFS FILESYSTEM +M: Christoph Hellwig +S: Maintained +W: ftp://ftp.openlinux.org/pub/people/hch/vxfs +F: fs/freevxfs/ + +FREEZER +M: "Rafael J. Wysocki" +M: Pavel Machek +L: linux-pm@vger.kernel.org +S: Supported +F: Documentation/power/freezing-of-tasks.rst +F: include/linux/freezer.h +F: kernel/freezer.c + +FRONTSWAP API +M: Konrad Rzeszutek Wilk +L: linux-kernel@vger.kernel.org +S: Maintained +F: include/linux/frontswap.h +F: mm/frontswap.c + +FS-CACHE: LOCAL CACHING FOR NETWORK FILESYSTEMS +M: David Howells +L: linux-cachefs@redhat.com (moderated for non-subscribers) +S: Supported +F: Documentation/filesystems/caching/ +F: fs/fscache/ +F: include/linux/fscache*.h + +FSCRYPT: FILE SYSTEM LEVEL ENCRYPTION SUPPORT +M: Theodore Y. Ts'o +M: Jaegeuk Kim +M: Eric Biggers +L: linux-fscrypt@vger.kernel.org +S: Supported +Q: https://patchwork.kernel.org/project/linux-fscrypt/list/ +T: git git://git.kernel.org/pub/scm/fs/fscrypt/fscrypt.git +F: Documentation/filesystems/fscrypt.rst +F: fs/crypto/ +F: include/linux/fscrypt*.h +F: include/uapi/linux/fscrypt.h + +FSI SUBSYSTEM +M: Jeremy Kerr +M: Joel Stanley +R: Alistar Popple +R: Eddie James +L: linux-fsi@lists.ozlabs.org +S: Supported +Q: http://patchwork.ozlabs.org/project/linux-fsi/list/ +T: git git://git.kernel.org/pub/scm/linux/kernel/git/joel/fsi.git +F: drivers/fsi/ +F: include/linux/fsi*.h +F: include/trace/events/fsi*.h + +FSI-ATTACHED I2C DRIVER +M: Eddie James +L: linux-i2c@vger.kernel.org +L: openbmc@lists.ozlabs.org (moderated for non-subscribers) +S: Maintained +F: Documentation/devicetree/bindings/i2c/i2c-fsi.txt +F: drivers/i2c/busses/i2c-fsi.c + +FSI-ATTACHED SPI DRIVER +M: Eddie James +L: linux-spi@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/fsi/ibm,fsi2spi.yaml +F: drivers/spi/spi-fsi.c + +FSNOTIFY: FILESYSTEM NOTIFICATION INFRASTRUCTURE +M: Jan Kara +R: Amir Goldstein +L: linux-fsdevel@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs.git fsnotify +F: fs/notify/ +F: include/linux/fsnotify*.h + +FSVERITY: READ-ONLY FILE-BASED AUTHENTICITY PROTECTION +M: Eric Biggers +M: Theodore Y. Ts'o +L: linux-fscrypt@vger.kernel.org +S: Supported +Q: https://patchwork.kernel.org/project/linux-fscrypt/list/ +T: git git://git.kernel.org/pub/scm/fs/fscrypt/fscrypt.git fsverity +F: Documentation/filesystems/fsverity.rst +F: fs/verity/ +F: include/linux/fsverity.h +F: include/uapi/linux/fsverity.h + +FT260 FTDI USB-HID TO I2C BRIDGE DRIVER +M: Michael Zaidman +L: linux-i2c@vger.kernel.org +L: linux-input@vger.kernel.org +S: Maintained +F: drivers/hid/hid-ft260.c + +FUJITSU LAPTOP EXTRAS +M: Jonathan Woithe +L: platform-driver-x86@vger.kernel.org +S: Maintained +F: drivers/platform/x86/fujitsu-laptop.c + +FUJITSU M-5MO LS CAMERA ISP DRIVER +M: Kyungmin Park +M: Heungjun Kim +L: linux-media@vger.kernel.org +S: Maintained +F: drivers/media/i2c/m5mols/ +F: include/media/i2c/m5mols.h + +FUJITSU TABLET EXTRAS +M: Robert Gerlach +L: platform-driver-x86@vger.kernel.org +S: Maintained +F: drivers/platform/x86/fujitsu-tablet.c + +FUSE: FILESYSTEM IN USERSPACE +M: Miklos Szeredi +L: linux-fsdevel@vger.kernel.org +S: Maintained +W: https://github.com/libfuse/ +T: git git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/fuse.git +F: Documentation/filesystems/fuse.rst +F: fs/fuse/ +F: include/uapi/linux/fuse.h + +FUTEX SUBSYSTEM +M: Thomas Gleixner +M: Ingo Molnar +R: Peter Zijlstra +R: Darren Hart +R: Davidlohr Bueso +L: linux-kernel@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git locking/core +F: Documentation/locking/*futex* +F: include/asm-generic/futex.h +F: include/linux/futex.h +F: include/uapi/linux/futex.h +F: kernel/futex.c +F: tools/perf/bench/futex* +F: tools/testing/selftests/futex/ + +GATEWORKS SYSTEM CONTROLLER (GSC) DRIVER +M: Tim Harvey +M: Robert Jones +S: Maintained +F: Documentation/devicetree/bindings/mfd/gateworks-gsc.yaml +F: drivers/mfd/gateworks-gsc.c +F: include/linux/mfd/gsc.h +F: Documentation/hwmon/gsc-hwmon.rst +F: drivers/hwmon/gsc-hwmon.c +F: include/linux/platform_data/gsc_hwmon.h + +GCC PLUGINS +M: Kees Cook +L: linux-hardening@vger.kernel.org +S: Maintained +F: Documentation/kbuild/gcc-plugins.rst +F: scripts/Makefile.gcc-plugins +F: scripts/gcc-plugins/ + +GCOV BASED KERNEL PROFILING +M: Peter Oberparleiter +S: Maintained +F: Documentation/dev-tools/gcov.rst +F: kernel/gcov/ + +GDB KERNEL DEBUGGING HELPER SCRIPTS +M: Jan Kiszka +M: Kieran Bingham +S: Supported +F: scripts/gdb/ + +GEMINI CRYPTO DRIVER +M: Corentin Labbe +L: linux-crypto@vger.kernel.org +S: Maintained +F: drivers/crypto/gemini/ + +GEMTEK FM RADIO RECEIVER DRIVER +M: Hans Verkuil +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +T: git git://linuxtv.org/media_tree.git +F: drivers/media/radio/radio-gemtek* + +GENERIC ARCHITECTURE TOPOLOGY +M: Sudeep Holla +L: linux-kernel@vger.kernel.org +S: Maintained +F: drivers/base/arch_topology.c +F: include/linux/arch_topology.h + +GENERIC ENTRY CODE +M: Thomas Gleixner +M: Peter Zijlstra +M: Andy Lutomirski +L: linux-kernel@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git core/entry +F: include/linux/entry-common.h +F: include/linux/entry-kvm.h +F: kernel/entry/ + +GENERIC GPIO I2C DRIVER +M: Wolfram Sang +S: Supported +F: drivers/i2c/busses/i2c-gpio.c +F: include/linux/platform_data/i2c-gpio.h + +GENERIC GPIO I2C MULTIPLEXER DRIVER +M: Peter Korsgaard +L: linux-i2c@vger.kernel.org +S: Supported +F: Documentation/i2c/muxes/i2c-mux-gpio.rst +F: drivers/i2c/muxes/i2c-mux-gpio.c +F: include/linux/platform_data/i2c-mux-gpio.h + +GENERIC HDLC (WAN) DRIVERS +M: Krzysztof Halasa +S: Maintained +W: http://www.kernel.org/pub/linux/utils/net/hdlc/ +F: drivers/net/wan/c101.c +F: drivers/net/wan/hd6457* +F: drivers/net/wan/hdlc* +F: drivers/net/wan/n2.c +F: drivers/net/wan/pc300too.c +F: drivers/net/wan/pci200syn.c +F: drivers/net/wan/wanxl* + +GENERIC INCLUDE/ASM HEADER FILES +M: Arnd Bergmann +L: linux-arch@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/arnd/asm-generic.git +F: include/asm-generic/ +F: include/uapi/asm-generic/ + +GENERIC PHY FRAMEWORK +M: Kishon Vijay Abraham I +M: Vinod Koul +L: linux-phy@lists.infradead.org +S: Supported +Q: https://patchwork.kernel.org/project/linux-phy/list/ +T: git git://git.kernel.org/pub/scm/linux/kernel/git/phy/linux-phy.git +F: Documentation/devicetree/bindings/phy/ +F: drivers/phy/ +F: include/linux/phy/ + +GENERIC PINCTRL I2C DEMULTIPLEXER DRIVER +M: Wolfram Sang +S: Supported +F: drivers/i2c/muxes/i2c-demux-pinctrl.c + +GENERIC PM DOMAINS +M: "Rafael J. Wysocki" +M: Kevin Hilman +M: Ulf Hansson +L: linux-pm@vger.kernel.org +S: Supported +F: Documentation/devicetree/bindings/power/power?domain* +F: drivers/base/power/domain*.c +F: include/linux/pm_domain.h + +GENERIC RESISTIVE TOUCHSCREEN ADC DRIVER +M: Eugen Hristev +L: linux-input@vger.kernel.org +S: Maintained +F: drivers/input/touchscreen/resistive-adc-touch.c + +GENERIC STRING LIBRARY +R: Andy Shevchenko +S: Maintained +F: lib/string.c +F: lib/string_helpers.c +F: lib/test_string.c +F: lib/test-string_helpers.c + +GENERIC UIO DRIVER FOR PCI DEVICES +M: "Michael S. Tsirkin" +L: kvm@vger.kernel.org +S: Supported +F: drivers/uio/uio_pci_generic.c + +GENERIC VDSO LIBRARY +M: Andy Lutomirski +M: Thomas Gleixner +M: Vincenzo Frascino +L: linux-kernel@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git timers/vdso +F: include/asm-generic/vdso/vsyscall.h +F: include/vdso/ +F: kernel/time/vsyscall.c +F: lib/vdso/ + +GENWQE (IBM Generic Workqueue Card) +M: Frank Haverkamp +S: Supported +F: drivers/misc/genwqe/ + +GET_MAINTAINER SCRIPT +M: Joe Perches +S: Maintained +F: scripts/get_maintainer.pl + +GFS2 FILE SYSTEM +M: Bob Peterson +M: Andreas Gruenbacher +L: cluster-devel@redhat.com +S: Supported +B: https://bugzilla.kernel.org/enter_bug.cgi?product=File%20System&component=gfs2 +T: git git://git.kernel.org/pub/scm/linux/kernel/git/gfs2/linux-gfs2.git +F: Documentation/filesystems/gfs2* +F: fs/gfs2/ +F: include/uapi/linux/gfs2_ondisk.h + +GIGABYTE WMI DRIVER +M: Thomas Weißschuh +L: platform-driver-x86@vger.kernel.org +S: Maintained +F: drivers/platform/x86/gigabyte-wmi.c + +GNSS SUBSYSTEM +M: Johan Hovold +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/johan/gnss.git +F: Documentation/ABI/testing/sysfs-class-gnss +F: Documentation/devicetree/bindings/gnss/ +F: drivers/gnss/ +F: include/linux/gnss.h + +GO7007 MPEG CODEC +M: Hans Verkuil +L: linux-media@vger.kernel.org +S: Maintained +F: drivers/media/usb/go7007/ + +GOODIX TOUCHSCREEN +M: Bastien Nocera +L: linux-input@vger.kernel.org +S: Maintained +F: drivers/input/touchscreen/goodix.c + +GOOGLE ETHERNET DRIVERS +M: Jeroen de Borst +R: Catherine Sullivan +R: David Awogbemila +L: netdev@vger.kernel.org +S: Supported +F: Documentation/networking/device_drivers/ethernet/google/gve.rst +F: drivers/net/ethernet/google + +GPD POCKET FAN DRIVER +M: Hans de Goede +L: platform-driver-x86@vger.kernel.org +S: Maintained +F: drivers/platform/x86/gpd-pocket-fan.c + +GPIO ACPI SUPPORT +M: Mika Westerberg +M: Andy Shevchenko +L: linux-gpio@vger.kernel.org +L: linux-acpi@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/andy/linux-gpio-intel.git +F: Documentation/firmware-guide/acpi/gpio-properties.rst +F: drivers/gpio/gpiolib-acpi.c +F: drivers/gpio/gpiolib-acpi.h + +GPIO AGGREGATOR +M: Geert Uytterhoeven +L: linux-gpio@vger.kernel.org +S: Supported +F: Documentation/admin-guide/gpio/gpio-aggregator.rst +F: drivers/gpio/gpio-aggregator.c + +GPIO IR Transmitter +M: Sean Young +L: linux-media@vger.kernel.org +S: Maintained +F: drivers/media/rc/gpio-ir-tx.c + +GPIO MOCKUP DRIVER +M: Bamvor Jian Zhang +L: linux-gpio@vger.kernel.org +S: Maintained +F: drivers/gpio/gpio-mockup.c +F: tools/testing/selftests/gpio/ + +GPIO REGMAP +R: Michael Walle +S: Maintained +F: drivers/gpio/gpio-regmap.c +F: include/linux/gpio/regmap.h + +GPIO SUBSYSTEM +M: Linus Walleij +M: Bartosz Golaszewski +L: linux-gpio@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-gpio.git +F: Documentation/ABI/obsolete/sysfs-gpio +F: Documentation/ABI/testing/gpio-cdev +F: Documentation/admin-guide/gpio/ +F: Documentation/devicetree/bindings/gpio/ +F: Documentation/driver-api/gpio/ +F: drivers/gpio/ +F: include/asm-generic/gpio.h +F: include/linux/gpio.h +F: include/linux/gpio/ +F: include/linux/of_gpio.h +F: include/uapi/linux/gpio.h +F: tools/gpio/ + +GRE DEMULTIPLEXER DRIVER +M: Dmitry Kozlov +L: netdev@vger.kernel.org +S: Maintained +F: include/net/gre.h +F: net/ipv4/gre_demux.c +F: net/ipv4/gre_offload.c + +GRETH 10/100/1G Ethernet MAC device driver +M: Andreas Larsson +L: netdev@vger.kernel.org +S: Maintained +F: drivers/net/ethernet/aeroflex/ + +GREYBUS AUDIO PROTOCOLS DRIVERS +M: Vaibhav Agarwal +M: Mark Greer +S: Maintained +F: drivers/staging/greybus/audio_apbridgea.c +F: drivers/staging/greybus/audio_apbridgea.h +F: drivers/staging/greybus/audio_codec.c +F: drivers/staging/greybus/audio_codec.h +F: drivers/staging/greybus/audio_gb.c +F: drivers/staging/greybus/audio_manager.c +F: drivers/staging/greybus/audio_manager.h +F: drivers/staging/greybus/audio_manager_module.c +F: drivers/staging/greybus/audio_manager_private.h +F: drivers/staging/greybus/audio_manager_sysfs.c +F: drivers/staging/greybus/audio_module.c +F: drivers/staging/greybus/audio_topology.c + +GREYBUS FW/HID/SPI PROTOCOLS DRIVERS +M: Viresh Kumar +S: Maintained +F: drivers/staging/greybus/authentication.c +F: drivers/staging/greybus/bootrom.c +F: drivers/staging/greybus/firmware.h +F: drivers/staging/greybus/fw-core.c +F: drivers/staging/greybus/fw-download.c +F: drivers/staging/greybus/fw-management.c +F: drivers/staging/greybus/greybus_authentication.h +F: drivers/staging/greybus/greybus_firmware.h +F: drivers/staging/greybus/hid.c +F: drivers/staging/greybus/i2c.c +F: drivers/staging/greybus/spi.c +F: drivers/staging/greybus/spilib.c +F: drivers/staging/greybus/spilib.h + +GREYBUS LOOPBACK DRIVER +M: Bryan O'Donoghue +S: Maintained +F: drivers/staging/greybus/loopback.c + +GREYBUS PLATFORM DRIVERS +M: Vaibhav Hiremath +S: Maintained +F: drivers/staging/greybus/arche-apb-ctrl.c +F: drivers/staging/greybus/arche-platform.c +F: drivers/staging/greybus/arche_platform.h + +GREYBUS SDIO/GPIO/SPI PROTOCOLS DRIVERS +M: Rui Miguel Silva +S: Maintained +F: drivers/staging/greybus/gpio.c +F: drivers/staging/greybus/light.c +F: drivers/staging/greybus/power_supply.c +F: drivers/staging/greybus/sdio.c +F: drivers/staging/greybus/spi.c +F: drivers/staging/greybus/spilib.c + +GREYBUS SUBSYSTEM +M: Johan Hovold +M: Alex Elder +M: Greg Kroah-Hartman +L: greybus-dev@lists.linaro.org (moderated for non-subscribers) +S: Maintained +F: drivers/greybus/ +F: drivers/staging/greybus/ +F: include/linux/greybus.h +F: include/linux/greybus/ + +GREYBUS UART PROTOCOLS DRIVERS +M: David Lin +S: Maintained +F: drivers/staging/greybus/log.c +F: drivers/staging/greybus/uart.c + +GS1662 VIDEO SERIALIZER +M: Charles-Antoine Couret +L: linux-media@vger.kernel.org +S: Maintained +T: git git://linuxtv.org/media_tree.git +F: drivers/media/spi/gs1662.c + +GSPCA FINEPIX SUBDRIVER +M: Frank Zago +L: linux-media@vger.kernel.org +S: Maintained +T: git git://linuxtv.org/media_tree.git +F: drivers/media/usb/gspca/finepix.c + +GSPCA GL860 SUBDRIVER +M: Olivier Lorin +L: linux-media@vger.kernel.org +S: Maintained +T: git git://linuxtv.org/media_tree.git +F: drivers/media/usb/gspca/gl860/ + +GSPCA M5602 SUBDRIVER +M: Erik Andren +L: linux-media@vger.kernel.org +S: Maintained +T: git git://linuxtv.org/media_tree.git +F: drivers/media/usb/gspca/m5602/ + +GSPCA PAC207 SONIXB SUBDRIVER +M: Hans Verkuil +L: linux-media@vger.kernel.org +S: Odd Fixes +T: git git://linuxtv.org/media_tree.git +F: drivers/media/usb/gspca/pac207.c + +GSPCA SN9C20X SUBDRIVER +M: Brian Johnson +L: linux-media@vger.kernel.org +S: Maintained +T: git git://linuxtv.org/media_tree.git +F: drivers/media/usb/gspca/sn9c20x.c + +GSPCA T613 SUBDRIVER +M: Leandro Costantino +L: linux-media@vger.kernel.org +S: Maintained +T: git git://linuxtv.org/media_tree.git +F: drivers/media/usb/gspca/t613.c + +GSPCA USB WEBCAM DRIVER +M: Hans Verkuil +L: linux-media@vger.kernel.org +S: Odd Fixes +T: git git://linuxtv.org/media_tree.git +F: drivers/media/usb/gspca/ + +GTP (GPRS Tunneling Protocol) +M: Pablo Neira Ayuso +M: Harald Welte +L: osmocom-net-gprs@lists.osmocom.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/pablo/gtp.git +F: drivers/net/gtp.c + +GUID PARTITION TABLE (GPT) +M: Davidlohr Bueso +L: linux-efi@vger.kernel.org +S: Maintained +F: block/partitions/efi.* + +H8/300 ARCHITECTURE +M: Yoshinori Sato +L: uclinux-h8-devel@lists.sourceforge.jp (moderated for non-subscribers) +S: Maintained +W: http://uclinux-h8.sourceforge.jp +T: git git://git.sourceforge.jp/gitroot/uclinux-h8/linux.git +F: arch/h8300/ +F: drivers/clk/h8300/ +F: drivers/clocksource/h8300_*.c +F: drivers/irqchip/irq-renesas-h8*.c + +HABANALABS PCI DRIVER +M: Oded Gabbay +S: Supported +T: git https://git.kernel.org/pub/scm/linux/kernel/git/ogabbay/linux.git +F: Documentation/ABI/testing/debugfs-driver-habanalabs +F: Documentation/ABI/testing/sysfs-driver-habanalabs +F: drivers/misc/habanalabs/ +F: include/uapi/misc/habanalabs.h + +HACKRF MEDIA DRIVER +M: Antti Palosaari +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +W: http://palosaari.fi/linux/ +Q: http://patchwork.linuxtv.org/project/linux-media/list/ +T: git git://linuxtv.org/anttip/media_tree.git +F: drivers/media/usb/hackrf/ + +HANTRO VPU CODEC DRIVER +M: Ezequiel Garcia +M: Philipp Zabel +L: linux-media@vger.kernel.org +L: linux-rockchip@lists.infradead.org +S: Maintained +F: Documentation/devicetree/bindings/media/nxp,imx8mq-vpu.yaml +F: Documentation/devicetree/bindings/media/rockchip-vpu.yaml +F: drivers/staging/media/hantro/ + +HARD DRIVE ACTIVE PROTECTION SYSTEM (HDAPS) DRIVER +M: Frank Seidel +L: platform-driver-x86@vger.kernel.org +S: Maintained +W: http://www.kernel.org/pub/linux/kernel/people/fseidel/hdaps/ +F: drivers/platform/x86/hdaps.c + +HARDWARE MONITORING +M: Jean Delvare +M: Guenter Roeck +L: linux-hwmon@vger.kernel.org +S: Maintained +W: http://hwmon.wiki.kernel.org/ +T: git git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging.git +F: Documentation/devicetree/bindings/hwmon/ +F: Documentation/hwmon/ +F: drivers/hwmon/ +F: include/linux/hwmon*.h +F: include/trace/events/hwmon*.h +K: (devm_)?hwmon_device_(un)?register(|_with_groups|_with_info) + +HARDWARE RANDOM NUMBER GENERATOR CORE +M: Matt Mackall +M: Herbert Xu +L: linux-crypto@vger.kernel.org +S: Odd fixes +F: Documentation/admin-guide/hw_random.rst +F: Documentation/devicetree/bindings/rng/ +F: drivers/char/hw_random/ +F: include/linux/hw_random.h + +HARDWARE SPINLOCK CORE +M: Ohad Ben-Cohen +M: Bjorn Andersson +R: Baolin Wang +L: linux-remoteproc@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/andersson/remoteproc.git hwspinlock-next +F: Documentation/devicetree/bindings/hwlock/ +F: Documentation/locking/hwspinlock.rst +F: drivers/hwspinlock/ +F: include/linux/hwspinlock.h + +HARDWARE TRACING FACILITIES +M: Alexander Shishkin +S: Maintained +F: drivers/hwtracing/ + +HARMONY SOUND DRIVER +L: linux-parisc@vger.kernel.org +S: Maintained +F: sound/parisc/harmony.* + +HDPVR USB VIDEO ENCODER DRIVER +M: Hans Verkuil +L: linux-media@vger.kernel.org +S: Odd Fixes +W: https://linuxtv.org +T: git git://linuxtv.org/media_tree.git +F: drivers/media/usb/hdpvr/ + +HEWLETT PACKARD ENTERPRISE ILO CHIF DRIVER +M: Matt Hsiao +S: Supported +F: drivers/misc/hpilo.[ch] + +HEWLETT PACKARD ENTERPRISE ILO NMI WATCHDOG DRIVER +M: Jerry Hoemann +S: Supported +F: Documentation/watchdog/hpwdt.rst +F: drivers/watchdog/hpwdt.c + +HEWLETT-PACKARD SMART ARRAY RAID DRIVER (hpsa) +M: Don Brace +L: storagedev@microchip.com +L: linux-scsi@vger.kernel.org +S: Supported +F: Documentation/scsi/hpsa.rst +F: drivers/scsi/hpsa*.[ch] +F: include/linux/cciss*.h +F: include/uapi/linux/cciss*.h + +HFI1 DRIVER +M: Mike Marciniszyn +M: Dennis Dalessandro +L: linux-rdma@vger.kernel.org +S: Supported +F: drivers/infiniband/hw/hfi1 + +HFS FILESYSTEM +L: linux-fsdevel@vger.kernel.org +S: Orphan +F: Documentation/filesystems/hfs.rst +F: fs/hfs/ + +HFSPLUS FILESYSTEM +L: linux-fsdevel@vger.kernel.org +S: Orphan +F: Documentation/filesystems/hfsplus.rst +F: fs/hfsplus/ + +HGA FRAMEBUFFER DRIVER +M: Ferenc Bakonyi +L: linux-nvidia@lists.surfsouth.com +S: Maintained +W: http://drama.obuda.kando.hu/~fero/cgi-bin/hgafb.shtml +F: drivers/video/fbdev/hgafb.c + +HIBERNATION (aka Software Suspend, aka swsusp) +M: "Rafael J. Wysocki" +M: Pavel Machek +L: linux-pm@vger.kernel.org +S: Supported +B: https://bugzilla.kernel.org +F: arch/*/include/asm/suspend*.h +F: arch/x86/power/ +F: drivers/base/power/ +F: include/linux/freezer.h +F: include/linux/pm.h +F: include/linux/suspend.h +F: kernel/power/ + +HID CORE LAYER +M: Jiri Kosina +M: Benjamin Tissoires +L: linux-input@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/hid/hid.git +F: drivers/hid/ +F: include/linux/hid* +F: include/uapi/linux/hid* + +HID PLAYSTATION DRIVER +M: Roderick Colenbrander +L: linux-input@vger.kernel.org +S: Supported +F: drivers/hid/hid-playstation.c + +HID SENSOR HUB DRIVERS +M: Jiri Kosina +M: Jonathan Cameron +M: Srinivas Pandruvada +L: linux-input@vger.kernel.org +L: linux-iio@vger.kernel.org +S: Maintained +F: Documentation/hid/hid-sensor* +F: drivers/hid/hid-sensor-* +F: drivers/iio/*/hid-* +F: include/linux/hid-sensor-* + +HIGH-RESOLUTION TIMERS, CLOCKEVENTS +M: Thomas Gleixner +L: linux-kernel@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git timers/core +F: Documentation/timers/ +F: include/linux/clockchips.h +F: include/linux/hrtimer.h +F: kernel/time/clockevents.c +F: kernel/time/hrtimer.c +F: kernel/time/timer_*.c + +HIGH-SPEED SCC DRIVER FOR AX.25 +L: linux-hams@vger.kernel.org +S: Orphan +F: drivers/net/hamradio/dmascc.c +F: drivers/net/hamradio/scc.c + +HIGHPOINT ROCKETRAID 3xxx RAID DRIVER +M: HighPoint Linux Team +S: Supported +W: http://www.highpoint-tech.com +F: Documentation/scsi/hptiop.rst +F: drivers/scsi/hptiop.c + +HIPPI +M: Jes Sorensen +L: linux-hippi@sunsite.dk +S: Maintained +F: drivers/net/hippi/ +F: include/linux/hippidevice.h +F: include/uapi/linux/if_hippi.h +F: net/802/hippi.c + +HIRSCHMANN HELLCREEK ETHERNET SWITCH DRIVER +M: Kurt Kanzenbach +L: netdev@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/net/dsa/hirschmann,hellcreek.yaml +F: drivers/net/dsa/hirschmann/* +F: include/linux/platform_data/hirschmann-hellcreek.h +F: net/dsa/tag_hellcreek.c + +HISILICON DMA DRIVER +M: Zhou Wang +L: dmaengine@vger.kernel.org +S: Maintained +F: drivers/dma/hisi_dma.c + +HISILICON GPIO DRIVER +M: Luo Jiaxing +L: linux-gpio@vger.kernel.org +S: Maintained +F: drivers/gpio/gpio-hisi.c + +HISILICON HIGH PERFORMANCE RSA ENGINE DRIVER (HPRE) +M: Zaibo Xu +L: linux-crypto@vger.kernel.org +S: Maintained +F: Documentation/ABI/testing/debugfs-hisi-hpre +F: drivers/crypto/hisilicon/hpre/hpre.h +F: drivers/crypto/hisilicon/hpre/hpre_crypto.c +F: drivers/crypto/hisilicon/hpre/hpre_main.c + +HISILICON I2C CONTROLLER DRIVER +M: Yicong Yang +L: linux-i2c@vger.kernel.org +S: Maintained +W: https://www.hisilicon.com +F: drivers/i2c/busses/i2c-hisi.c + +HISILICON LPC BUS DRIVER +M: john.garry@huawei.com +S: Maintained +W: http://www.hisilicon.com +F: Documentation/devicetree/bindings/arm/hisilicon/low-pin-count.yaml +F: drivers/bus/hisi_lpc.c + +HISILICON NETWORK SUBSYSTEM 3 DRIVER (HNS3) +M: Yisen Zhuang +M: Salil Mehta +L: netdev@vger.kernel.org +S: Maintained +W: http://www.hisilicon.com +F: drivers/net/ethernet/hisilicon/hns3/ + +HISILICON NETWORK SUBSYSTEM DRIVER +M: Yisen Zhuang +M: Salil Mehta +L: netdev@vger.kernel.org +S: Maintained +W: http://www.hisilicon.com +F: Documentation/devicetree/bindings/net/hisilicon*.txt +F: drivers/net/ethernet/hisilicon/ + +HIKEY960 ONBOARD USB GPIO HUB DRIVER +M: John Stultz +L: linux-kernel@vger.kernel.org +S: Maintained +F: drivers/misc/hisi_hikey_usb.c +F: Documentation/devicetree/bindings/misc/hisilicon-hikey-usb.yaml + +HISILICON PMU DRIVER +M: Shaokun Zhang +S: Supported +W: http://www.hisilicon.com +F: Documentation/admin-guide/perf/hisi-pmu.rst +F: drivers/perf/hisilicon + +HISILICON QM AND ZIP Controller DRIVER +M: Zhou Wang +L: linux-crypto@vger.kernel.org +S: Maintained +F: Documentation/ABI/testing/debugfs-hisi-zip +F: drivers/crypto/hisilicon/qm.c +F: drivers/crypto/hisilicon/qm.h +F: drivers/crypto/hisilicon/sgl.c +F: drivers/crypto/hisilicon/zip/ + +HISILICON ROCE DRIVER +M: Wenpeng Liang +M: Weihang Li +L: linux-rdma@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/infiniband/hisilicon-hns-roce.txt +F: drivers/infiniband/hw/hns/ + +HISILICON SAS Controller +M: John Garry +S: Supported +W: http://www.hisilicon.com +F: Documentation/devicetree/bindings/scsi/hisilicon-sas.txt +F: drivers/scsi/hisi_sas/ + +HISILICON SECURITY ENGINE V2 DRIVER (SEC2) +M: Zaibo Xu +L: linux-crypto@vger.kernel.org +S: Maintained +F: Documentation/ABI/testing/debugfs-hisi-sec +F: drivers/crypto/hisilicon/sec2/sec.h +F: drivers/crypto/hisilicon/sec2/sec_crypto.c +F: drivers/crypto/hisilicon/sec2/sec_crypto.h +F: drivers/crypto/hisilicon/sec2/sec_main.c + +HISILICON SPI Controller DRIVER FOR KUNPENG SOCS +M: Jay Fang +L: linux-spi@vger.kernel.org +S: Maintained +W: http://www.hisilicon.com +F: drivers/spi/spi-hisi-kunpeng.c + +HISILICON SPMI CONTROLLER DRIVER FOR HIKEY 970 +M: Mauro Carvalho Chehab +L: linux-kernel@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/spmi/hisilicon,hisi-spmi-controller.yaml +F: drivers/spmi/hisi-spmi-controller.c + +HISILICON SPMI PMIC DRIVER FOR HIKEY 6421v600 +M: Mauro Carvalho Chehab +L: linux-kernel@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/mfd/hisilicon,hi6421-spmi-pmic.yaml +F: drivers/mfd/hi6421-spmi-pmic.c + +HISILICON TRUE RANDOM NUMBER GENERATOR V2 SUPPORT +M: Zaibo Xu +S: Maintained +F: drivers/crypto/hisilicon/trng/trng.c + +HISILICON V3XX SPI NOR FLASH Controller Driver +M: John Garry +S: Maintained +W: http://www.hisilicon.com +F: drivers/spi/spi-hisi-sfc-v3xx.c + +HMM - Heterogeneous Memory Management +M: Jérôme Glisse +L: linux-mm@kvack.org +S: Maintained +F: Documentation/vm/hmm.rst +F: include/linux/hmm* +F: lib/test_hmm* +F: mm/hmm* +F: tools/testing/selftests/vm/*hmm* + +HOST AP DRIVER +M: Jouni Malinen +L: linux-wireless@vger.kernel.org +S: Obsolete +W: http://w1.fi/hostap-driver.html +F: drivers/net/wireless/intersil/hostap/ + +HP COMPAQ TC1100 TABLET WMI EXTRAS DRIVER +L: platform-driver-x86@vger.kernel.org +S: Orphan +F: drivers/platform/x86/tc1100-wmi.c + +HPET: High Precision Event Timers driver +M: Clemens Ladisch +S: Maintained +F: Documentation/timers/hpet.rst +F: drivers/char/hpet.c +F: include/linux/hpet.h +F: include/uapi/linux/hpet.h + +HPET: x86 +S: Orphan +F: arch/x86/include/asm/hpet.h +F: arch/x86/kernel/hpet.c + +HPFS FILESYSTEM +M: Mikulas Patocka +S: Maintained +W: http://artax.karlin.mff.cuni.cz/~mikulas/vyplody/hpfs/index-e.cgi +F: fs/hpfs/ + +HSI SUBSYSTEM +M: Sebastian Reichel +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/sre/linux-hsi.git +F: Documentation/ABI/testing/sysfs-bus-hsi +F: Documentation/driver-api/hsi.rst +F: drivers/hsi/ +F: include/linux/hsi/ +F: include/uapi/linux/hsi/ + +HSO 3G MODEM DRIVER +L: linux-usb@vger.kernel.org +S: Orphan +F: drivers/net/usb/hso.c + +HSR NETWORK PROTOCOL +L: netdev@vger.kernel.org +S: Orphan +F: net/hsr/ + +HT16K33 LED CONTROLLER DRIVER +M: Robin van der Gracht +S: Maintained +F: Documentation/devicetree/bindings/auxdisplay/holtek,ht16k33.yaml +F: drivers/auxdisplay/ht16k33.c + +HTCPEN TOUCHSCREEN DRIVER +M: Pau Oliva Fora +L: linux-input@vger.kernel.org +S: Maintained +F: drivers/input/touchscreen/htcpen.c + +HTS221 TEMPERATURE-HUMIDITY IIO DRIVER +M: Lorenzo Bianconi +L: linux-iio@vger.kernel.org +S: Maintained +W: http://www.st.com/ +F: Documentation/devicetree/bindings/iio/humidity/st,hts221.yaml +F: drivers/iio/humidity/hts221* + +HUAWEI ETHERNET DRIVER +L: netdev@vger.kernel.org +S: Orphan +F: Documentation/networking/device_drivers/ethernet/huawei/hinic.rst +F: drivers/net/ethernet/huawei/hinic/ + +HUGETLB FILESYSTEM +M: Mike Kravetz +L: linux-mm@kvack.org +S: Maintained +F: Documentation/ABI/testing/sysfs-kernel-mm-hugepages +F: Documentation/admin-guide/mm/hugetlbpage.rst +F: Documentation/vm/hugetlbfs_reserv.rst +F: fs/hugetlbfs/ +F: include/linux/hugetlb.h +F: mm/hugetlb.c + +HVA ST MEDIA DRIVER +M: Jean-Christophe Trotin +L: linux-media@vger.kernel.org +S: Supported +W: https://linuxtv.org +T: git git://linuxtv.org/media_tree.git +F: drivers/media/platform/sti/hva + +HWPOISON MEMORY FAILURE HANDLING +M: Naoya Horiguchi +L: linux-mm@kvack.org +S: Maintained +F: mm/hwpoison-inject.c +F: mm/memory-failure.c + +HYCON HY46XX TOUCHSCREEN SUPPORT +M: Giulio Benetti +L: linux-input@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/input/touchscreen/hycon,hy46xx.yaml +F: drivers/input/touchscreen/hycon-hy46xx.c + +HYGON PROCESSOR SUPPORT +M: Pu Wen +L: linux-kernel@vger.kernel.org +S: Maintained +F: arch/x86/kernel/cpu/hygon.c + +HYNIX HI556 SENSOR DRIVER +M: Shawn Tu +L: linux-media@vger.kernel.org +S: Maintained +T: git git://linuxtv.org/media_tree.git +F: drivers/media/i2c/hi556.c + +Hyper-V/Azure CORE AND DRIVERS +M: "K. Y. Srinivasan" +M: Haiyang Zhang +M: Stephen Hemminger +M: Wei Liu +M: Dexuan Cui +L: linux-hyperv@vger.kernel.org +S: Supported +T: git git://git.kernel.org/pub/scm/linux/kernel/git/hyperv/linux.git +F: Documentation/ABI/stable/sysfs-bus-vmbus +F: Documentation/ABI/testing/debugfs-hyperv +F: Documentation/networking/device_drivers/ethernet/microsoft/netvsc.rst +F: arch/arm64/hyperv +F: arch/arm64/include/asm/hyperv-tlfs.h +F: arch/arm64/include/asm/mshyperv.h +F: arch/x86/hyperv +F: arch/x86/include/asm/hyperv-tlfs.h +F: arch/x86/include/asm/mshyperv.h +F: arch/x86/include/asm/trace/hyperv.h +F: arch/x86/kernel/cpu/mshyperv.c +F: drivers/clocksource/hyperv_timer.c +F: drivers/hid/hid-hyperv.c +F: drivers/hv/ +F: drivers/input/serio/hyperv-keyboard.c +F: drivers/iommu/hyperv-iommu.c +F: drivers/net/ethernet/microsoft/ +F: drivers/net/hyperv/ +F: drivers/pci/controller/pci-hyperv-intf.c +F: drivers/pci/controller/pci-hyperv.c +F: drivers/scsi/storvsc_drv.c +F: drivers/uio/uio_hv_generic.c +F: drivers/video/fbdev/hyperv_fb.c +F: include/asm-generic/hyperv-tlfs.h +F: include/asm-generic/mshyperv.h +F: include/clocksource/hyperv_timer.h +F: include/linux/hyperv.h +F: include/uapi/linux/hyperv.h +F: net/vmw_vsock/hyperv_transport.c +F: tools/hv/ + +HYPERBUS SUPPORT +M: Vignesh Raghavendra +L: linux-mtd@lists.infradead.org +S: Supported +Q: http://patchwork.ozlabs.org/project/linux-mtd/list/ +C: irc://irc.oftc.net/mtd +T: git git://git.kernel.org/pub/scm/linux/kernel/git/mtd/linux.git cfi/next +F: Documentation/devicetree/bindings/mtd/cypress,hyperflash.txt +F: Documentation/devicetree/bindings/mtd/ti,am654-hbmc.txt +F: drivers/mtd/hyperbus/ +F: include/linux/mtd/hyperbus.h + +HYPERVISOR VIRTUAL CONSOLE DRIVER +L: linuxppc-dev@lists.ozlabs.org +S: Odd Fixes +F: drivers/tty/hvc/ + +I2C ACPI SUPPORT +M: Mika Westerberg +L: linux-i2c@vger.kernel.org +L: linux-acpi@vger.kernel.org +S: Maintained +F: drivers/i2c/i2c-core-acpi.c + +I2C CONTROLLER DRIVER FOR NVIDIA GPU +M: Ajay Gupta +L: linux-i2c@vger.kernel.org +S: Maintained +F: Documentation/i2c/busses/i2c-nvidia-gpu.rst +F: drivers/i2c/busses/i2c-nvidia-gpu.c + +I2C MUXES +M: Peter Rosin +L: linux-i2c@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/i2c/i2c-arb* +F: Documentation/devicetree/bindings/i2c/i2c-gate* +F: Documentation/devicetree/bindings/i2c/i2c-mux* +F: Documentation/i2c/i2c-topology.rst +F: Documentation/i2c/muxes/ +F: drivers/i2c/i2c-mux.c +F: drivers/i2c/muxes/ +F: include/linux/i2c-mux.h + +I2C MV64XXX MARVELL AND ALLWINNER DRIVER +M: Gregory CLEMENT +L: linux-i2c@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/i2c/marvell,mv64xxx-i2c.yaml +F: drivers/i2c/busses/i2c-mv64xxx.c + +I2C OVER PARALLEL PORT +M: Jean Delvare +L: linux-i2c@vger.kernel.org +S: Maintained +F: Documentation/i2c/busses/i2c-parport.rst +F: drivers/i2c/busses/i2c-parport.c + +I2C SUBSYSTEM +M: Wolfram Sang +L: linux-i2c@vger.kernel.org +S: Maintained +W: https://i2c.wiki.kernel.org/ +Q: https://patchwork.ozlabs.org/project/linux-i2c/list/ +T: git git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux.git +F: Documentation/devicetree/bindings/i2c/i2c.txt +F: Documentation/i2c/ +F: drivers/i2c/* +F: include/linux/i2c-dev.h +F: include/linux/i2c-smbus.h +F: include/linux/i2c.h +F: include/uapi/linux/i2c-*.h +F: include/uapi/linux/i2c.h + +I2C SUBSYSTEM HOST DRIVERS +L: linux-i2c@vger.kernel.org +S: Odd Fixes +W: https://i2c.wiki.kernel.org/ +Q: https://patchwork.ozlabs.org/project/linux-i2c/list/ +T: git git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux.git +F: Documentation/devicetree/bindings/i2c/ +F: drivers/i2c/algos/ +F: drivers/i2c/busses/ + +I2C-TAOS-EVM DRIVER +M: Jean Delvare +L: linux-i2c@vger.kernel.org +S: Maintained +F: Documentation/i2c/busses/i2c-taos-evm.rst +F: drivers/i2c/busses/i2c-taos-evm.c + +I2C-TINY-USB DRIVER +M: Till Harbaum +L: linux-i2c@vger.kernel.org +S: Maintained +W: http://www.harbaum.org/till/i2c_tiny_usb +F: drivers/i2c/busses/i2c-tiny-usb.c + +I2C/SMBUS CONTROLLER DRIVERS FOR PC +M: Jean Delvare +L: linux-i2c@vger.kernel.org +S: Maintained +F: Documentation/i2c/busses/i2c-ali1535.rst +F: Documentation/i2c/busses/i2c-ali1563.rst +F: Documentation/i2c/busses/i2c-ali15x3.rst +F: Documentation/i2c/busses/i2c-amd756.rst +F: Documentation/i2c/busses/i2c-amd8111.rst +F: Documentation/i2c/busses/i2c-i801.rst +F: Documentation/i2c/busses/i2c-nforce2.rst +F: Documentation/i2c/busses/i2c-piix4.rst +F: Documentation/i2c/busses/i2c-sis5595.rst +F: Documentation/i2c/busses/i2c-sis630.rst +F: Documentation/i2c/busses/i2c-sis96x.rst +F: Documentation/i2c/busses/i2c-via.rst +F: Documentation/i2c/busses/i2c-viapro.rst +F: drivers/i2c/busses/i2c-ali1535.c +F: drivers/i2c/busses/i2c-ali1563.c +F: drivers/i2c/busses/i2c-ali15x3.c +F: drivers/i2c/busses/i2c-amd756-s4882.c +F: drivers/i2c/busses/i2c-amd756.c +F: drivers/i2c/busses/i2c-amd8111.c +F: drivers/i2c/busses/i2c-i801.c +F: drivers/i2c/busses/i2c-isch.c +F: drivers/i2c/busses/i2c-nforce2-s4985.c +F: drivers/i2c/busses/i2c-nforce2.c +F: drivers/i2c/busses/i2c-piix4.c +F: drivers/i2c/busses/i2c-sis5595.c +F: drivers/i2c/busses/i2c-sis630.c +F: drivers/i2c/busses/i2c-sis96x.c +F: drivers/i2c/busses/i2c-via.c +F: drivers/i2c/busses/i2c-viapro.c + +I2C/SMBUS INTEL CHT WHISKEY COVE PMIC DRIVER +M: Hans de Goede +L: linux-i2c@vger.kernel.org +S: Maintained +F: drivers/i2c/busses/i2c-cht-wc.c + +I2C/SMBUS ISMT DRIVER +M: Seth Heasley +M: Neil Horman +L: linux-i2c@vger.kernel.org +F: Documentation/i2c/busses/i2c-ismt.rst +F: drivers/i2c/busses/i2c-ismt.c + +I2C/SMBUS STUB DRIVER +M: Jean Delvare +L: linux-i2c@vger.kernel.org +S: Maintained +F: drivers/i2c/i2c-stub.c + +I3C DRIVER FOR CADENCE I3C MASTER IP +M: Przemysław Gaj +S: Maintained +F: Documentation/devicetree/bindings/i3c/cdns,i3c-master.txt +F: drivers/i3c/master/i3c-master-cdns.c + +I3C DRIVER FOR SYNOPSYS DESIGNWARE +M: Vitor Soares +S: Maintained +F: Documentation/devicetree/bindings/i3c/snps,dw-i3c-master.txt +F: drivers/i3c/master/dw* + +I3C SUBSYSTEM +M: Alexandre Belloni +L: linux-i3c@lists.infradead.org (moderated for non-subscribers) +S: Maintained +C: irc://chat.freenode.net/linux-i3c +T: git git://git.kernel.org/pub/scm/linux/kernel/git/i3c/linux.git +F: Documentation/ABI/testing/sysfs-bus-i3c +F: Documentation/devicetree/bindings/i3c/ +F: Documentation/driver-api/i3c +F: drivers/i3c/ +F: include/linux/i3c/ + +IA64 (Itanium) PLATFORM +L: linux-ia64@vger.kernel.org +S: Orphan +F: Documentation/ia64/ +F: arch/ia64/ + +IBM Power 842 compression accelerator +M: Haren Myneni +S: Supported +F: crypto/842.c +F: drivers/crypto/nx/Kconfig +F: drivers/crypto/nx/Makefile +F: drivers/crypto/nx/nx-842* +F: include/linux/sw842.h +F: lib/842/ + +IBM Power in-Nest Crypto Acceleration +M: Breno Leitão +M: Nayna Jain +M: Paulo Flabiano Smorigo +L: linux-crypto@vger.kernel.org +S: Supported +F: drivers/crypto/nx/Kconfig +F: drivers/crypto/nx/Makefile +F: drivers/crypto/nx/nx-aes* +F: drivers/crypto/nx/nx-sha* +F: drivers/crypto/nx/nx.* +F: drivers/crypto/nx/nx_csbcpb.h +F: drivers/crypto/nx/nx_debugfs.c + +IBM Power IO DLPAR Driver for RPA-compliant PPC64 platform +M: Tyrel Datwyler +L: linux-pci@vger.kernel.org +L: linuxppc-dev@lists.ozlabs.org +S: Supported +F: drivers/pci/hotplug/rpadlpar* + +IBM Power Linux RAID adapter +M: Brian King +S: Supported +F: drivers/scsi/ipr.* + +IBM Power PCI Hotplug Driver for RPA-compliant PPC64 platform +M: Tyrel Datwyler +L: linux-pci@vger.kernel.org +L: linuxppc-dev@lists.ozlabs.org +S: Supported +F: drivers/pci/hotplug/rpaphp* + +IBM Power SRIOV Virtual NIC Device Driver +M: Dany Madden +M: Sukadev Bhattiprolu +R: Thomas Falcon +L: netdev@vger.kernel.org +S: Supported +F: drivers/net/ethernet/ibm/ibmvnic.* + +IBM Power Virtual Accelerator Switchboard +M: Sukadev Bhattiprolu +L: linuxppc-dev@lists.ozlabs.org +S: Supported +F: arch/powerpc/include/asm/vas.h +F: arch/powerpc/platforms/powernv/copy-paste.h +F: arch/powerpc/platforms/powernv/vas* + +IBM Power Virtual Ethernet Device Driver +M: Cristobal Forno +L: netdev@vger.kernel.org +S: Supported +F: drivers/net/ethernet/ibm/ibmveth.* + +IBM Power Virtual FC Device Drivers +M: Tyrel Datwyler +L: linux-scsi@vger.kernel.org +S: Supported +F: drivers/scsi/ibmvscsi/ibmvfc* + +IBM Power Virtual Management Channel Driver +M: Brad Warrum +M: Ritu Agarwal +S: Supported +F: drivers/misc/ibmvmc.* + +IBM Power Virtual SCSI Device Drivers +M: Tyrel Datwyler +L: linux-scsi@vger.kernel.org +S: Supported +F: drivers/scsi/ibmvscsi/ibmvscsi* +F: include/scsi/viosrp.h + +IBM Power Virtual SCSI Device Target Driver +M: Michael Cyr +L: linux-scsi@vger.kernel.org +L: target-devel@vger.kernel.org +S: Supported +F: drivers/scsi/ibmvscsi_tgt/ + +IBM Power VMX Cryptographic instructions +M: Breno Leitão +M: Nayna Jain +M: Paulo Flabiano Smorigo +L: linux-crypto@vger.kernel.org +S: Supported +F: drivers/crypto/vmx/Kconfig +F: drivers/crypto/vmx/Makefile +F: drivers/crypto/vmx/aes* +F: drivers/crypto/vmx/ghash* +F: drivers/crypto/vmx/ppc-xlate.pl +F: drivers/crypto/vmx/vmx.c + +IBM ServeRAID RAID DRIVER +S: Orphan +F: drivers/scsi/ips.* + +ICH LPC AND GPIO DRIVER +M: Peter Tyser +S: Maintained +F: drivers/gpio/gpio-ich.c +F: drivers/mfd/lpc_ich.c + +ICY I2C DRIVER +M: Max Staudt +L: linux-i2c@vger.kernel.org +S: Maintained +F: drivers/i2c/busses/i2c-icy.c + +IDEAPAD LAPTOP EXTRAS DRIVER +M: Ike Panhc +L: platform-driver-x86@vger.kernel.org +S: Maintained +W: http://launchpad.net/ideapad-laptop +F: drivers/platform/x86/ideapad-laptop.c + +IDEAPAD LAPTOP SLIDEBAR DRIVER +M: Andrey Moiseev +L: linux-input@vger.kernel.org +S: Maintained +W: https://github.com/o2genum/ideapad-slidebar +F: drivers/input/misc/ideapad_slidebar.c + +IDT VersaClock 5 CLOCK DRIVER +M: Luca Ceresoli +S: Maintained +F: Documentation/devicetree/bindings/clock/idt,versaclock5.yaml +F: drivers/clk/clk-versaclock5.c + +IEEE 802.15.4 SUBSYSTEM +M: Alexander Aring +M: Stefan Schmidt +L: linux-wpan@vger.kernel.org +S: Maintained +W: https://linux-wpan.org/ +T: git git://git.kernel.org/pub/scm/linux/kernel/git/sschmidt/wpan.git +T: git git://git.kernel.org/pub/scm/linux/kernel/git/sschmidt/wpan-next.git +F: Documentation/networking/ieee802154.rst +F: drivers/net/ieee802154/ +F: include/linux/ieee802154.h +F: include/linux/nl802154.h +F: include/net/af_ieee802154.h +F: include/net/cfg802154.h +F: include/net/ieee802154_netdev.h +F: include/net/mac802154.h +F: include/net/nl802154.h +F: net/ieee802154/ +F: net/mac802154/ + +IFE PROTOCOL +M: Yotam Gigi +M: Jamal Hadi Salim +F: include/net/ife.h +F: include/uapi/linux/ife.h +F: net/ife + +IGORPLUG-USB IR RECEIVER +M: Sean Young +L: linux-media@vger.kernel.org +S: Maintained +F: drivers/media/rc/igorplugusb.c + +IGUANAWORKS USB IR TRANSCEIVER +M: Sean Young +L: linux-media@vger.kernel.org +S: Maintained +F: drivers/media/rc/iguanair.c + +IIO DIGITAL POTENTIOMETER DAC +M: Peter Rosin +L: linux-iio@vger.kernel.org +S: Maintained +F: Documentation/ABI/testing/sysfs-bus-iio-dac-dpot-dac +F: Documentation/devicetree/bindings/iio/dac/dpot-dac.yaml +F: drivers/iio/dac/dpot-dac.c + +IIO ENVELOPE DETECTOR +M: Peter Rosin +L: linux-iio@vger.kernel.org +S: Maintained +F: Documentation/ABI/testing/sysfs-bus-iio-adc-envelope-detector +F: Documentation/devicetree/bindings/iio/adc/envelope-detector.yaml +F: drivers/iio/adc/envelope-detector.c + +IIO MULTIPLEXER +M: Peter Rosin +L: linux-iio@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/iio/multiplexer/io-channel-mux.yaml +F: drivers/iio/multiplexer/iio-mux.c + +IIO SCMI BASED DRIVER +M: Jyoti Bhayana +L: linux-iio@vger.kernel.org +S: Maintained +F: drivers/iio/common/scmi_sensors/scmi_iio.c + +IIO SUBSYSTEM AND DRIVERS +M: Jonathan Cameron +R: Lars-Peter Clausen +L: linux-iio@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/jic23/iio.git +F: Documentation/ABI/testing/configfs-iio* +F: Documentation/ABI/testing/sysfs-bus-iio* +F: Documentation/devicetree/bindings/iio/ +F: drivers/iio/ +F: drivers/staging/iio/ +F: include/linux/iio/ +F: tools/iio/ + +IIO UNIT CONVERTER +M: Peter Rosin +L: linux-iio@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/iio/afe/current-sense-amplifier.yaml +F: Documentation/devicetree/bindings/iio/afe/current-sense-shunt.yaml +F: Documentation/devicetree/bindings/iio/afe/voltage-divider.yaml +F: drivers/iio/afe/iio-rescale.c + +IKANOS/ADI EAGLE ADSL USB DRIVER +M: Matthieu Castet +M: Stanislaw Gruszka +S: Maintained +F: drivers/usb/atm/ueagle-atm.c + +IMGTEC ASCII LCD DRIVER +M: Paul Burton +S: Maintained +F: Documentation/devicetree/bindings/auxdisplay/img,ascii-lcd.yaml +F: drivers/auxdisplay/img-ascii-lcd.c + +IMGTEC IR DECODER DRIVER +S: Orphan +F: drivers/media/rc/img-ir/ + +IMON SOUNDGRAPH USB IR RECEIVER +M: Sean Young +L: linux-media@vger.kernel.org +S: Maintained +F: drivers/media/rc/imon.c +F: drivers/media/rc/imon_raw.c + +IMS TWINTURBO FRAMEBUFFER DRIVER +L: linux-fbdev@vger.kernel.org +S: Orphan +F: drivers/video/fbdev/imsttfb.c + +INA209 HARDWARE MONITOR DRIVER +M: Guenter Roeck +L: linux-hwmon@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/hwmon/ti,ina2xx.yaml +F: Documentation/hwmon/ina209.rst +F: drivers/hwmon/ina209.c + +INA2XX HARDWARE MONITOR DRIVER +M: Guenter Roeck +L: linux-hwmon@vger.kernel.org +S: Maintained +F: Documentation/hwmon/ina2xx.rst +F: drivers/hwmon/ina2xx.c +F: include/linux/platform_data/ina2xx.h + +INDUSTRY PACK SUBSYSTEM (IPACK) +M: Samuel Iglesias Gonsalvez +M: Jens Taprogge +M: Greg Kroah-Hartman +L: industrypack-devel@lists.sourceforge.net +S: Maintained +W: http://industrypack.sourceforge.net +F: drivers/ipack/ + +INFINEON DPS310 Driver +M: Eddie James +L: linux-iio@vger.kernel.org +S: Maintained +F: drivers/iio/pressure/dps310.c + +INFINIBAND SUBSYSTEM +M: Doug Ledford +M: Jason Gunthorpe +L: linux-rdma@vger.kernel.org +S: Supported +W: https://github.com/linux-rdma/rdma-core +Q: http://patchwork.kernel.org/project/linux-rdma/list/ +T: git git://git.kernel.org/pub/scm/linux/kernel/git/rdma/rdma.git +F: Documentation/devicetree/bindings/infiniband/ +F: Documentation/infiniband/ +F: drivers/infiniband/ +F: include/rdma/ +F: include/trace/events/ib_mad.h +F: include/trace/events/ib_umad.h +F: include/uapi/linux/if_infiniband.h +F: include/uapi/rdma/ +F: samples/bpf/ibumad_kern.c +F: samples/bpf/ibumad_user.c + +INGENIC JZ4780 NAND DRIVER +M: Harvey Hunt +L: linux-mtd@lists.infradead.org +L: linux-mips@vger.kernel.org +S: Maintained +F: drivers/mtd/nand/raw/ingenic/ + +INGENIC JZ47xx SoCs +M: Paul Cercueil +L: linux-mips@vger.kernel.org +S: Maintained +F: arch/mips/boot/dts/ingenic/ +F: arch/mips/generic/board-ingenic.c +F: arch/mips/include/asm/mach-ingenic/ +F: arch/mips/ingenic/Kconfig +F: drivers/clk/ingenic/ +F: drivers/dma/dma-jz4780.c +F: drivers/gpu/drm/ingenic/ +F: drivers/i2c/busses/i2c-jz4780.c +F: drivers/iio/adc/ingenic-adc.c +F: drivers/irqchip/irq-ingenic.c +F: drivers/memory/jz4780-nemc.c +F: drivers/mmc/host/jz4740_mmc.c +F: drivers/mtd/nand/raw/ingenic/ +F: drivers/pinctrl/pinctrl-ingenic.c +F: drivers/power/supply/ingenic-battery.c +F: drivers/pwm/pwm-jz4740.c +F: drivers/remoteproc/ingenic_rproc.c +F: drivers/rtc/rtc-jz4740.c +F: drivers/tty/serial/8250/8250_ingenic.c +F: drivers/usb/musb/jz4740.c +F: drivers/watchdog/jz4740_wdt.c +F: include/dt-bindings/iio/adc/ingenic,adc.h +F: include/linux/mfd/ingenic-tcu.h +F: sound/soc/codecs/jz47* +F: sound/soc/jz4740/ + +INOTIFY +M: Jan Kara +R: Amir Goldstein +L: linux-fsdevel@vger.kernel.org +S: Maintained +F: Documentation/filesystems/inotify.rst +F: fs/notify/inotify/ +F: include/linux/inotify.h +F: include/uapi/linux/inotify.h + +INPUT (KEYBOARD, MOUSE, JOYSTICK, TOUCHSCREEN) DRIVERS +M: Dmitry Torokhov +L: linux-input@vger.kernel.org +S: Maintained +Q: http://patchwork.kernel.org/project/linux-input/list/ +T: git git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input.git +F: Documentation/devicetree/bindings/input/ +F: Documentation/devicetree/bindings/serio/ +F: Documentation/input/ +F: drivers/input/ +F: include/linux/input.h +F: include/linux/input/ +F: include/uapi/linux/input-event-codes.h +F: include/uapi/linux/input.h + +INPUT MULTITOUCH (MT) PROTOCOL +M: Henrik Rydberg +L: linux-input@vger.kernel.org +S: Odd fixes +F: Documentation/input/multi-touch-protocol.rst +F: drivers/input/input-mt.c +K: \b(ABS|SYN)_MT_ + +INSIDE SECURE CRYPTO DRIVER +M: Antoine Tenart +L: linux-crypto@vger.kernel.org +S: Maintained +F: drivers/crypto/inside-secure/ + +INTEGRITY MEASUREMENT ARCHITECTURE (IMA) +M: Mimi Zohar +M: Dmitry Kasatkin +L: linux-integrity@vger.kernel.org +S: Supported +T: git git://git.kernel.org/pub/scm/linux/kernel/git/zohar/linux-integrity.git +F: security/integrity/ima/ + +INTEL 810/815 FRAMEBUFFER DRIVER +M: Antonino Daplas +L: linux-fbdev@vger.kernel.org +S: Maintained +F: drivers/video/fbdev/i810/ + +INTEL ASoC DRIVERS +M: Cezary Rojewski +M: Pierre-Louis Bossart +M: Liam Girdwood +M: Jie Yang +L: alsa-devel@alsa-project.org (moderated for non-subscribers) +S: Supported +F: sound/soc/intel/ + +INTEL ATOMISP2 DUMMY / POWER-MANAGEMENT DRIVER +M: Hans de Goede +L: platform-driver-x86@vger.kernel.org +S: Maintained +F: drivers/platform/x86/intel/atomisp2/pm.c + +INTEL ATOMISP2 LED DRIVER +M: Hans de Goede +L: platform-driver-x86@vger.kernel.org +S: Maintained +F: drivers/platform/x86/intel/atomisp2/led.c + +INTEL BIOS SAR INT1092 DRIVER +M: Shravan Sudhakar +M: Intel Corporation +L: platform-driver-x86@vger.kernel.org +S: Maintained +F: drivers/platform/x86/intel/int1092/ + +INTEL BROXTON PMC DRIVER +M: Mika Westerberg +M: Zha Qipeng +S: Maintained +F: drivers/mfd/intel_pmc_bxt.c +F: include/linux/mfd/intel_pmc_bxt.h + +INTEL C600 SERIES SAS CONTROLLER DRIVER +M: Artur Paszkiewicz +L: linux-scsi@vger.kernel.org +S: Supported +T: git git://git.code.sf.net/p/intel-sas/isci +F: drivers/scsi/isci/ + +INTEL CPU family model numbers +M: Tony Luck +M: x86@kernel.org +L: linux-kernel@vger.kernel.org +S: Supported +F: arch/x86/include/asm/intel-family.h + +INTEL DRM DRIVERS (excluding Poulsbo, Moorestown and derivative chipsets) +M: Jani Nikula +M: Joonas Lahtinen +M: Rodrigo Vivi +L: intel-gfx@lists.freedesktop.org +S: Supported +W: https://01.org/linuxgraphics/ +Q: http://patchwork.freedesktop.org/project/intel-gfx/ +B: https://gitlab.freedesktop.org/drm/intel/-/wikis/How-to-file-i915-bugs +C: irc://irc.oftc.net/intel-gfx +T: git git://anongit.freedesktop.org/drm-intel +F: Documentation/gpu/i915.rst +F: drivers/gpu/drm/i915/ +F: include/drm/i915* +F: include/uapi/drm/i915_drm.h + +INTEL ETHERNET DRIVERS +M: Jesse Brandeburg +M: Tony Nguyen +L: intel-wired-lan@lists.osuosl.org (moderated for non-subscribers) +S: Supported +W: http://www.intel.com/support/feedback.htm +W: http://e1000.sourceforge.net/ +Q: http://patchwork.ozlabs.org/project/intel-wired-lan/list/ +T: git git://git.kernel.org/pub/scm/linux/kernel/git/tnguy/net-queue.git +T: git git://git.kernel.org/pub/scm/linux/kernel/git/tnguy/next-queue.git +F: Documentation/networking/device_drivers/ethernet/intel/ +F: drivers/net/ethernet/intel/ +F: drivers/net/ethernet/intel/*/ +F: include/linux/avf/virtchnl.h +F: include/linux/net/intel/iidc.h + +INTEL ETHERNET PROTOCOL DRIVER FOR RDMA +M: Mustafa Ismail +M: Shiraz Saleem +L: linux-rdma@vger.kernel.org +S: Supported +F: drivers/infiniband/hw/irdma/ +F: include/uapi/rdma/irdma-abi.h + +INTEL FRAMEBUFFER DRIVER (excluding 810 and 815) +M: Maik Broemme +L: linux-fbdev@vger.kernel.org +S: Maintained +F: Documentation/fb/intelfb.rst +F: drivers/video/fbdev/intelfb/ + +INTEL GPIO DRIVERS +M: Andy Shevchenko +L: linux-gpio@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/andy/linux-gpio-intel.git +F: drivers/gpio/gpio-ich.c +F: drivers/gpio/gpio-merrifield.c +F: drivers/gpio/gpio-ml-ioh.c +F: drivers/gpio/gpio-pch.c +F: drivers/gpio/gpio-sch.c +F: drivers/gpio/gpio-sodaville.c + +INTEL GVT-g DRIVERS (Intel GPU Virtualization) +M: Zhenyu Wang +M: Zhi Wang +L: intel-gvt-dev@lists.freedesktop.org +L: intel-gfx@lists.freedesktop.org +S: Supported +W: https://01.org/igvt-g +T: git https://github.com/intel/gvt-linux.git +F: drivers/gpu/drm/i915/gvt/ + +INTEL HID EVENT DRIVER +M: Alex Hung +L: platform-driver-x86@vger.kernel.org +S: Maintained +F: drivers/platform/x86/intel/hid.c + +INTEL I/OAT DMA DRIVER +M: Dave Jiang +R: Dan Williams +L: dmaengine@vger.kernel.org +S: Supported +Q: https://patchwork.kernel.org/project/linux-dmaengine/list/ +F: drivers/dma/ioat* + +INTEL IADX DRIVER +M: Dave Jiang +L: dmaengine@vger.kernel.org +S: Supported +F: drivers/dma/idxd/* +F: include/uapi/linux/idxd.h + +INTEL IDLE DRIVER +M: Jacob Pan +M: Len Brown +L: linux-pm@vger.kernel.org +S: Supported +B: https://bugzilla.kernel.org +T: git git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux.git +F: drivers/idle/intel_idle.c + +INTEL INTEGRATED SENSOR HUB DRIVER +M: Srinivas Pandruvada +M: Jiri Kosina +L: linux-input@vger.kernel.org +S: Maintained +F: drivers/hid/intel-ish-hid/ + +INTEL IOMMU (VT-d) +M: David Woodhouse +M: Lu Baolu +L: iommu@lists.linux-foundation.org +S: Supported +T: git git://git.kernel.org/pub/scm/linux/kernel/git/joro/iommu.git +F: drivers/iommu/intel/ +F: include/linux/intel-iommu.h +F: include/linux/intel-svm.h + +INTEL IOP-ADMA DMA DRIVER +R: Dan Williams +S: Odd fixes +F: drivers/dma/iop-adma.c + +INTEL IPU3 CSI-2 CIO2 DRIVER +M: Yong Zhi +M: Sakari Ailus +M: Bingbu Cao +M: Dan Scally +R: Tianshu Qiu +L: linux-media@vger.kernel.org +S: Maintained +T: git git://linuxtv.org/media_tree.git +F: Documentation/userspace-api/media/v4l/pixfmt-srggb10-ipu3.rst +F: drivers/media/pci/intel/ipu3/ + +INTEL IPU3 CSI-2 IMGU DRIVER +M: Sakari Ailus +R: Bingbu Cao +R: Tianshu Qiu +L: linux-media@vger.kernel.org +S: Maintained +F: Documentation/admin-guide/media/ipu3.rst +F: Documentation/admin-guide/media/ipu3_rcb.svg +F: Documentation/userspace-api/media/v4l/pixfmt-meta-intel-ipu3.rst +F: drivers/staging/media/ipu3/ + +INTEL IXP4XX CRYPTO SUPPORT +M: Corentin Labbe +L: linux-crypto@vger.kernel.org +S: Maintained +F: drivers/crypto/ixp4xx_crypto.c + +INTEL IXP4XX QMGR, NPE, ETHERNET and HSS SUPPORT +M: Krzysztof Halasa +S: Maintained +F: drivers/net/ethernet/xscale/ixp4xx_eth.c +F: drivers/net/wan/ixp4xx_hss.c +F: drivers/soc/ixp4xx/ixp4xx-npe.c +F: drivers/soc/ixp4xx/ixp4xx-qmgr.c +F: include/linux/soc/ixp4xx/npe.h +F: include/linux/soc/ixp4xx/qmgr.h + +INTEL IXP4XX RANDOM NUMBER GENERATOR SUPPORT +M: Deepak Saxena +S: Maintained +F: Documentation/devicetree/bindings/display/intel,ixp46x-rng.yaml +F: drivers/char/hw_random/ixp4xx-rng.c + +INTEL KEEM BAY DRM DRIVER +M: Anitha Chrisanthus +M: Edmund Dea +S: Maintained +F: Documentation/devicetree/bindings/display/intel,kmb_display.yaml +F: drivers/gpu/drm/kmb/ + +INTEL KEEM BAY OCS AES/SM4 CRYPTO DRIVER +M: Daniele Alessandrelli +S: Maintained +F: Documentation/devicetree/bindings/crypto/intel,keembay-ocs-aes.yaml +F: drivers/crypto/keembay/Kconfig +F: drivers/crypto/keembay/Makefile +F: drivers/crypto/keembay/keembay-ocs-aes-core.c +F: drivers/crypto/keembay/ocs-aes.c +F: drivers/crypto/keembay/ocs-aes.h + +INTEL KEEM BAY OCS HCU CRYPTO DRIVER +M: Daniele Alessandrelli +M: Declan Murphy +S: Maintained +F: Documentation/devicetree/bindings/crypto/intel,keembay-ocs-hcu.yaml +F: drivers/crypto/keembay/Kconfig +F: drivers/crypto/keembay/Makefile +F: drivers/crypto/keembay/keembay-ocs-hcu-core.c +F: drivers/crypto/keembay/ocs-hcu.c +F: drivers/crypto/keembay/ocs-hcu.h + +INTEL MANAGEMENT ENGINE (mei) +M: Tomas Winkler +L: linux-kernel@vger.kernel.org +S: Supported +F: Documentation/driver-api/mei/* +F: drivers/misc/mei/ +F: drivers/watchdog/mei_wdt.c +F: include/linux/mei_cl_bus.h +F: include/uapi/linux/mei.h +F: samples/mei/* + +INTEL MAX 10 BMC MFD DRIVER +M: Xu Yilun +R: Tom Rix +S: Maintained +F: Documentation/ABI/testing/sysfs-driver-intel-m10-bmc +F: Documentation/hwmon/intel-m10-bmc-hwmon.rst +F: drivers/hwmon/intel-m10-bmc-hwmon.c +F: drivers/mfd/intel-m10-bmc.c +F: include/linux/mfd/intel-m10-bmc.h + +INTEL MENLOW THERMAL DRIVER +M: Sujith Thomas +L: linux-pm@vger.kernel.org +S: Supported +W: https://01.org/linux-acpi +F: drivers/thermal/intel/intel_menlow.c + +INTEL P-Unit IPC DRIVER +M: Zha Qipeng +L: platform-driver-x86@vger.kernel.org +S: Maintained +F: arch/x86/include/asm/intel_punit_ipc.h +F: drivers/platform/x86/intel/punit_ipc.c + +INTEL PMC CORE DRIVER +M: Rajneesh Bhardwaj +M: David E Box +L: platform-driver-x86@vger.kernel.org +S: Maintained +F: Documentation/ABI/testing/sysfs-platform-intel-pmc +F: drivers/platform/x86/intel/pmc/ + +INTEL PMIC GPIO DRIVERS +M: Andy Shevchenko +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/andy/linux-gpio-intel.git +F: drivers/gpio/gpio-*cove.c + +INTEL PMIC MULTIFUNCTION DEVICE DRIVERS +M: Andy Shevchenko +S: Maintained +F: drivers/mfd/intel_soc_pmic* +F: include/linux/mfd/intel_soc_pmic* + +INTEL PMT DRIVER +M: "David E. Box" +S: Maintained +F: drivers/mfd/intel_pmt.c +F: drivers/platform/x86/intel/pmt/ + +INTEL PRO/WIRELESS 2100, 2200BG, 2915ABG NETWORK CONNECTION SUPPORT +M: Stanislav Yakovlev +L: linux-wireless@vger.kernel.org +S: Maintained +F: Documentation/networking/device_drivers/wifi/intel/ipw2100.rst +F: Documentation/networking/device_drivers/wifi/intel/ipw2200.rst +F: drivers/net/wireless/intel/ipw2x00/ + +INTEL PSTATE DRIVER +M: Srinivas Pandruvada +M: Len Brown +L: linux-pm@vger.kernel.org +S: Supported +F: drivers/cpufreq/intel_pstate.c + +INTEL QUADRATURE ENCODER PERIPHERAL DRIVER +M: Jarkko Nikula +L: linux-iio@vger.kernel.org +F: drivers/counter/intel-qep.c + +INTEL SCU DRIVERS +M: Mika Westerberg +S: Maintained +F: arch/x86/include/asm/intel_scu_ipc.h +F: drivers/platform/x86/intel_scu_* + +INTEL SKYLAKE INT3472 ACPI DEVICE DRIVER +M: Daniel Scally +S: Maintained +F: drivers/platform/x86/intel/int3472/ + +INTEL SPEED SELECT TECHNOLOGY +M: Srinivas Pandruvada +L: platform-driver-x86@vger.kernel.org +S: Maintained +F: drivers/platform/x86/intel/speed_select_if/ +F: include/uapi/linux/isst_if.h +F: tools/power/x86/intel-speed-select/ + +INTEL STRATIX10 FIRMWARE DRIVERS +M: Dinh Nguyen +L: linux-kernel@vger.kernel.org +S: Maintained +F: Documentation/ABI/testing/sysfs-devices-platform-stratix10-rsu +F: Documentation/devicetree/bindings/firmware/intel,stratix10-svc.txt +F: drivers/firmware/stratix10-rsu.c +F: drivers/firmware/stratix10-svc.c +F: include/linux/firmware/intel/stratix10-smc.h +F: include/linux/firmware/intel/stratix10-svc-client.h + +INTEL TELEMETRY DRIVER +M: Rajneesh Bhardwaj +M: "David E. Box" +L: platform-driver-x86@vger.kernel.org +S: Maintained +F: arch/x86/include/asm/intel_telemetry.h +F: drivers/platform/x86/intel/telemetry/ + +INTEL UNCORE FREQUENCY CONTROL +M: Srinivas Pandruvada +L: platform-driver-x86@vger.kernel.org +S: Maintained +F: drivers/platform/x86/intel/uncore-frequency.c + +INTEL VIRTUAL BUTTON DRIVER +M: AceLan Kao +L: platform-driver-x86@vger.kernel.org +S: Maintained +F: drivers/platform/x86/intel/vbtn.c + +INTEL WIRELESS 3945ABG/BG, 4965AGN (iwlegacy) +M: Stanislaw Gruszka +L: linux-wireless@vger.kernel.org +S: Supported +F: drivers/net/wireless/intel/iwlegacy/ + +INTEL WIRELESS WIFI LINK (iwlwifi) +M: Luca Coelho +L: linux-wireless@vger.kernel.org +S: Supported +W: https://wireless.wiki.kernel.org/en/users/drivers/iwlwifi +T: git git://git.kernel.org/pub/scm/linux/kernel/git/iwlwifi/iwlwifi.git +F: drivers/net/wireless/intel/iwlwifi/ + +INTEL WMI SLIM BOOTLOADER (SBL) FIRMWARE UPDATE DRIVER +M: Jithu Joseph +R: Maurice Ma +S: Maintained +W: https://slimbootloader.github.io/security/firmware-update.html +F: drivers/platform/x86/intel/wmi/sbl-fw-update.c + +INTEL WMI THUNDERBOLT FORCE POWER DRIVER +L: Dell.Client.Kernel@dell.com +S: Maintained +F: drivers/platform/x86/intel/wmi/thunderbolt.c + +INTEL WWAN IOSM DRIVER +M: M Chetan Kumar +M: Intel Corporation +L: netdev@vger.kernel.org +S: Maintained +F: drivers/net/wwan/iosm/ + +INTEL(R) TRACE HUB +M: Alexander Shishkin +S: Supported +F: Documentation/trace/intel_th.rst +F: drivers/hwtracing/intel_th/ +F: include/linux/intel_th.h + +INTEL(R) TRUSTED EXECUTION TECHNOLOGY (TXT) +M: Ning Sun +L: tboot-devel@lists.sourceforge.net +S: Supported +W: http://tboot.sourceforge.net +T: hg http://tboot.hg.sourceforge.net:8000/hgroot/tboot/tboot +F: Documentation/x86/intel_txt.rst +F: arch/x86/kernel/tboot.c +F: include/linux/tboot.h + +INTEL SGX +M: Jarkko Sakkinen +R: Dave Hansen +L: linux-sgx@vger.kernel.org +S: Supported +Q: https://patchwork.kernel.org/project/intel-sgx/list/ +T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git x86/sgx +F: Documentation/x86/sgx.rst +F: arch/x86/entry/vdso/vsgx.S +F: arch/x86/include/asm/sgx.h +F: arch/x86/include/uapi/asm/sgx.h +F: arch/x86/kernel/cpu/sgx/* +F: tools/testing/selftests/sgx/* +K: \bSGX_ + +INTERCONNECT API +M: Georgi Djakov +L: linux-pm@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/djakov/icc.git +F: Documentation/devicetree/bindings/interconnect/ +F: Documentation/driver-api/interconnect.rst +F: drivers/interconnect/ +F: include/dt-bindings/interconnect/ +F: include/linux/interconnect-provider.h +F: include/linux/interconnect.h + +INTERRUPT COUNTER DRIVER +M: Oleksij Rempel +R: Pengutronix Kernel Team +L: linux-iio@vger.kernel.org +F: Documentation/devicetree/bindings/counter/interrupt-counter.yaml +F: drivers/counter/interrupt-cnt.c + +INVENSENSE ICM-426xx IMU DRIVER +M: Jean-Baptiste Maneyrol +L: linux-iio@vger.kernel.org +S: Maintained +W: https://invensense.tdk.com/ +F: Documentation/devicetree/bindings/iio/imu/invensense,icm42600.yaml +F: drivers/iio/imu/inv_icm42600/ + +INVENSENSE MPU-3050 GYROSCOPE DRIVER +M: Linus Walleij +L: linux-iio@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/iio/gyroscope/invensense,mpu3050.yaml +F: drivers/iio/gyro/mpu3050* + +IOC3 ETHERNET DRIVER +M: Ralf Baechle +L: linux-mips@vger.kernel.org +S: Maintained +F: drivers/net/ethernet/sgi/ioc3-eth.c + +IOMAP FILESYSTEM LIBRARY +M: Christoph Hellwig +M: Darrick J. Wong +M: linux-xfs@vger.kernel.org +M: linux-fsdevel@vger.kernel.org +L: linux-xfs@vger.kernel.org +L: linux-fsdevel@vger.kernel.org +S: Supported +T: git git://git.kernel.org/pub/scm/fs/xfs/xfs-linux.git +F: fs/iomap/ +F: include/linux/iomap.h + +IOMMU DRIVERS +M: Joerg Roedel +M: Will Deacon +L: iommu@lists.linux-foundation.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/joro/iommu.git +F: Documentation/devicetree/bindings/iommu/ +F: Documentation/userspace-api/iommu.rst +F: drivers/iommu/ +F: include/linux/iommu.h +F: include/linux/iova.h +F: include/linux/of_iommu.h +F: include/uapi/linux/iommu.h + +IO_URING +M: Jens Axboe +R: Pavel Begunkov +L: io-uring@vger.kernel.org +S: Maintained +T: git git://git.kernel.dk/linux-block +T: git git://git.kernel.dk/liburing +F: fs/io-wq.c +F: fs/io-wq.h +F: fs/io_uring.c +F: include/linux/io_uring.h +F: include/uapi/linux/io_uring.h +F: tools/io_uring/ + +IPMI SUBSYSTEM +M: Corey Minyard +L: openipmi-developer@lists.sourceforge.net (moderated for non-subscribers) +S: Supported +W: http://openipmi.sourceforge.net/ +F: Documentation/driver-api/ipmi.rst +F: Documentation/devicetree/bindings/ipmi/ +F: drivers/char/ipmi/ +F: include/linux/ipmi* +F: include/uapi/linux/ipmi* + +IPS SCSI RAID DRIVER +M: Adaptec OEM Raid Solutions +L: linux-scsi@vger.kernel.org +S: Maintained +W: http://www.adaptec.com/ +F: drivers/scsi/ips* + +IPVS +M: Simon Horman +M: Julian Anastasov +L: netdev@vger.kernel.org +L: lvs-devel@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/horms/ipvs-next.git +T: git git://git.kernel.org/pub/scm/linux/kernel/git/horms/ipvs.git +F: Documentation/networking/ipvs-sysctl.rst +F: include/net/ip_vs.h +F: include/uapi/linux/ip_vs.h +F: net/netfilter/ipvs/ + +IPWIRELESS DRIVER +M: Jiri Kosina +M: David Sterba +S: Odd Fixes +F: drivers/tty/ipwireless/ + +IRQ DOMAINS (IRQ NUMBER MAPPING LIBRARY) +M: Marc Zyngier +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git irq/core +F: Documentation/core-api/irq/irq-domain.rst +F: include/linux/irqdomain.h +F: kernel/irq/irqdomain.c +F: kernel/irq/msi.c + +IRQ SUBSYSTEM +M: Thomas Gleixner +L: linux-kernel@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git irq/core +F: kernel/irq/ + +IRQCHIP DRIVERS +M: Thomas Gleixner +M: Marc Zyngier +L: linux-kernel@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git irq/core +F: Documentation/devicetree/bindings/interrupt-controller/ +F: drivers/irqchip/ + +ISA +M: William Breathitt Gray +S: Maintained +F: Documentation/driver-api/isa.rst +F: drivers/base/isa.c +F: include/linux/isa.h + +ISA RADIO MODULE +M: Hans Verkuil +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +T: git git://linuxtv.org/media_tree.git +F: drivers/media/radio/radio-isa* + +ISAPNP +M: Jaroslav Kysela +S: Maintained +F: Documentation/driver-api/isapnp.rst +F: drivers/pnp/isapnp/ +F: include/linux/isapnp.h + +ISCSI +M: Lee Duncan +M: Chris Leech +L: open-iscsi@googlegroups.com +L: linux-scsi@vger.kernel.org +S: Maintained +W: www.open-iscsi.com +F: drivers/scsi/*iscsi* +F: include/scsi/*iscsi* + +iSCSI BOOT FIRMWARE TABLE (iBFT) DRIVER +M: Peter Jones +M: Konrad Rzeszutek Wilk +S: Maintained +F: drivers/firmware/iscsi_ibft* + +ISCSI EXTENSIONS FOR RDMA (ISER) INITIATOR +M: Sagi Grimberg +M: Max Gurtovoy +L: linux-rdma@vger.kernel.org +S: Supported +W: http://www.openfabrics.org +W: www.open-iscsi.org +Q: http://patchwork.kernel.org/project/linux-rdma/list/ +F: drivers/infiniband/ulp/iser/ + +ISCSI EXTENSIONS FOR RDMA (ISER) TARGET +M: Sagi Grimberg +L: linux-rdma@vger.kernel.org +L: target-devel@vger.kernel.org +S: Supported +W: http://www.linux-iscsi.org +T: git git://git.kernel.org/pub/scm/linux/kernel/git/nab/target-pending.git master +F: drivers/infiniband/ulp/isert + +ISDN/CMTP OVER BLUETOOTH +M: Karsten Keil +L: isdn4linux@listserv.isdn4linux.de (subscribers-only) +L: netdev@vger.kernel.org +S: Odd Fixes +W: http://www.isdn4linux.de +F: Documentation/isdn/ +F: drivers/isdn/capi/ +F: include/linux/isdn/ +F: include/uapi/linux/isdn/ +F: net/bluetooth/cmtp/ + +ISDN/mISDN SUBSYSTEM +M: Karsten Keil +L: isdn4linux@listserv.isdn4linux.de (subscribers-only) +L: netdev@vger.kernel.org +S: Maintained +W: http://www.isdn4linux.de +F: drivers/isdn/Kconfig +F: drivers/isdn/Makefile +F: drivers/isdn/hardware/ +F: drivers/isdn/mISDN/ + +IT87 HARDWARE MONITORING DRIVER +M: Jean Delvare +L: linux-hwmon@vger.kernel.org +S: Maintained +F: Documentation/hwmon/it87.rst +F: drivers/hwmon/it87.c + +IT913X MEDIA DRIVER +M: Antti Palosaari +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +W: http://palosaari.fi/linux/ +Q: http://patchwork.linuxtv.org/project/linux-media/list/ +T: git git://linuxtv.org/anttip/media_tree.git +F: drivers/media/tuners/it913x* + +ITE IT66121 HDMI BRIDGE DRIVER +M: Phong LE +M: Neil Armstrong +S: Maintained +T: git git://anongit.freedesktop.org/drm/drm-misc +F: Documentation/devicetree/bindings/display/bridge/ite,it66121.yaml +F: drivers/gpu/drm/bridge/ite-it66121.c + +IVTV VIDEO4LINUX DRIVER +M: Andy Walls +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +T: git git://linuxtv.org/media_tree.git +F: Documentation/admin-guide/media/ivtv* +F: drivers/media/pci/ivtv/ +F: include/uapi/linux/ivtv* + +IX2505V MEDIA DRIVER +M: Malcolm Priestley +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +Q: http://patchwork.linuxtv.org/project/linux-media/list/ +F: drivers/media/dvb-frontends/ix2505v* + +JAILHOUSE HYPERVISOR INTERFACE +M: Jan Kiszka +L: jailhouse-dev@googlegroups.com +S: Maintained +F: arch/x86/include/asm/jailhouse_para.h +F: arch/x86/kernel/jailhouse.c + +JC42.4 TEMPERATURE SENSOR DRIVER +M: Guenter Roeck +L: linux-hwmon@vger.kernel.org +S: Maintained +F: Documentation/hwmon/jc42.rst +F: drivers/hwmon/jc42.c + +JFS FILESYSTEM +M: Dave Kleikamp +L: jfs-discussion@lists.sourceforge.net +S: Maintained +W: http://jfs.sourceforge.net/ +T: git git://github.com/kleikamp/linux-shaggy.git +F: Documentation/admin-guide/jfs.rst +F: fs/jfs/ + +JME NETWORK DRIVER +M: Guo-Fu Tseng +L: netdev@vger.kernel.org +S: Maintained +F: drivers/net/ethernet/jme.* + +JOURNALLING FLASH FILE SYSTEM V2 (JFFS2) +M: David Woodhouse +M: Richard Weinberger +L: linux-mtd@lists.infradead.org +S: Odd Fixes +W: http://www.linux-mtd.infradead.org/doc/jffs2.html +T: git git://git.infradead.org/ubifs-2.6.git +F: fs/jffs2/ +F: include/uapi/linux/jffs2.h + +JOURNALLING LAYER FOR BLOCK DEVICES (JBD2) +M: "Theodore Ts'o" +M: Jan Kara +L: linux-ext4@vger.kernel.org +S: Maintained +F: fs/jbd2/ +F: include/linux/jbd2.h + +JPU V4L2 MEM2MEM DRIVER FOR RENESAS +M: Mikhail Ulyanov +L: linux-media@vger.kernel.org +S: Maintained +F: drivers/media/platform/rcar_jpu.c + +JSM Neo PCI based serial card +L: linux-serial@vger.kernel.org +S: Orphan +F: drivers/tty/serial/jsm/ + +K10TEMP HARDWARE MONITORING DRIVER +M: Clemens Ladisch +L: linux-hwmon@vger.kernel.org +S: Maintained +F: Documentation/hwmon/k10temp.rst +F: drivers/hwmon/k10temp.c + +K8TEMP HARDWARE MONITORING DRIVER +M: Rudolf Marek +L: linux-hwmon@vger.kernel.org +S: Maintained +F: Documentation/hwmon/k8temp.rst +F: drivers/hwmon/k8temp.c + +KASAN +M: Andrey Ryabinin +R: Alexander Potapenko +R: Andrey Konovalov +R: Dmitry Vyukov +L: kasan-dev@googlegroups.com +S: Maintained +F: Documentation/dev-tools/kasan.rst +F: arch/*/include/asm/*kasan.h +F: arch/*/mm/kasan_init* +F: include/linux/kasan*.h +F: lib/Kconfig.kasan +F: lib/test_kasan*.c +F: mm/kasan/ +F: scripts/Makefile.kasan + +KCONFIG +M: Masahiro Yamada +L: linux-kbuild@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild.git kconfig +F: Documentation/kbuild/kconfig* +F: scripts/Kconfig.include +F: scripts/kconfig/ + +KCOV +R: Dmitry Vyukov +R: Andrey Konovalov +L: kasan-dev@googlegroups.com +S: Maintained +F: Documentation/dev-tools/kcov.rst +F: include/linux/kcov.h +F: include/uapi/linux/kcov.h +F: kernel/kcov.c +F: scripts/Makefile.kcov + +KCSAN +M: Marco Elver +R: Dmitry Vyukov +L: kasan-dev@googlegroups.com +S: Maintained +F: Documentation/dev-tools/kcsan.rst +F: include/linux/kcsan*.h +F: kernel/kcsan/ +F: lib/Kconfig.kcsan +F: scripts/Makefile.kcsan + +KDUMP +M: Dave Young +M: Baoquan He +R: Vivek Goyal +L: kexec@lists.infradead.org +S: Maintained +W: http://lse.sourceforge.net/kdump/ +F: Documentation/admin-guide/kdump/ +F: fs/proc/vmcore.c +F: include/linux/crash_core.h +F: include/linux/crash_dump.h +F: include/uapi/linux/vmcore.h +F: kernel/crash_*.c + +KEENE FM RADIO TRANSMITTER DRIVER +M: Hans Verkuil +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +T: git git://linuxtv.org/media_tree.git +F: drivers/media/radio/radio-keene* + +KERNEL AUTOMOUNTER +M: Ian Kent +L: autofs@vger.kernel.org +S: Maintained +F: fs/autofs/ + +KERNEL BUILD + files below scripts/ (unless maintained elsewhere) +M: Masahiro Yamada +M: Michal Marek +R: Nick Desaulniers +L: linux-kbuild@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild.git +F: Documentation/kbuild/ +F: Makefile +F: scripts/*vmlinux* +F: scripts/Kbuild* +F: scripts/Makefile* +F: scripts/basic/ +F: scripts/dummy-tools/ +F: scripts/mk* +F: scripts/mod/ +F: scripts/package/ + +KERNEL JANITORS +L: kernel-janitors@vger.kernel.org +S: Odd Fixes +W: http://kernelnewbies.org/KernelJanitors + +KERNEL NFSD, SUNRPC, AND LOCKD SERVERS +M: "J. Bruce Fields" +M: Chuck Lever +L: linux-nfs@vger.kernel.org +S: Supported +W: http://nfs.sourceforge.net/ +T: git git://linux-nfs.org/~bfields/linux.git +F: fs/lockd/ +F: fs/nfs_common/ +F: fs/nfsd/ +F: include/linux/lockd/ +F: include/linux/sunrpc/ +F: include/uapi/linux/nfsd/ +F: include/uapi/linux/sunrpc/ +F: net/sunrpc/ +F: Documentation/filesystems/nfs/ + +KERNEL REGRESSIONS +M: Thorsten Leemhuis +L: regressions@lists.linux.dev +S: Supported + +KERNEL SELFTEST FRAMEWORK +M: Shuah Khan +M: Shuah Khan +L: linux-kselftest@vger.kernel.org +S: Maintained +Q: https://patchwork.kernel.org/project/linux-kselftest/list/ +T: git git://git.kernel.org/pub/scm/linux/kernel/git/shuah/linux-kselftest.git +F: Documentation/dev-tools/kselftest* +F: tools/testing/selftests/ + +KERNEL SMB3 SERVER (KSMBD) +M: Namjae Jeon +M: Sergey Senozhatsky +M: Steve French +M: Hyunchul Lee +L: linux-cifs@vger.kernel.org +S: Maintained +T: git git://git.samba.org/ksmbd.git +F: fs/ksmbd/ +F: fs/smbfs_common/ + +KERNEL UNIT TESTING FRAMEWORK (KUnit) +M: Brendan Higgins +L: linux-kselftest@vger.kernel.org +L: kunit-dev@googlegroups.com +S: Maintained +W: https://google.github.io/kunit-docs/third_party/kernel/docs/ +F: Documentation/dev-tools/kunit/ +F: include/kunit/ +F: lib/kunit/ +F: tools/testing/kunit/ + +KERNEL USERMODE HELPER +M: Luis Chamberlain +L: linux-kernel@vger.kernel.org +S: Maintained +F: include/linux/umh.h +F: kernel/umh.c + +KERNEL VIRTUAL MACHINE (KVM) +M: Paolo Bonzini +L: kvm@vger.kernel.org +S: Supported +W: http://www.linux-kvm.org +T: git git://git.kernel.org/pub/scm/virt/kvm/kvm.git +F: Documentation/virt/kvm/ +F: include/asm-generic/kvm* +F: include/kvm/iodev.h +F: include/linux/kvm* +F: include/trace/events/kvm.h +F: include/uapi/asm-generic/kvm* +F: include/uapi/linux/kvm* +F: tools/kvm/ +F: tools/testing/selftests/kvm/ +F: virt/kvm/* + +KERNEL VIRTUAL MACHINE FOR ARM64 (KVM/arm64) +M: Marc Zyngier +R: James Morse +R: Alexandru Elisei +R: Suzuki K Poulose +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +L: kvmarm@lists.cs.columbia.edu (moderated for non-subscribers) +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/kvmarm/kvmarm.git +F: arch/arm64/include/asm/kvm* +F: arch/arm64/include/uapi/asm/kvm* +F: arch/arm64/kvm/ +F: include/kvm/arm_* +F: tools/testing/selftests/kvm/*/aarch64/ +F: tools/testing/selftests/kvm/aarch64/ + +KERNEL VIRTUAL MACHINE FOR MIPS (KVM/mips) +M: Huacai Chen +M: Aleksandar Markovic +L: linux-mips@vger.kernel.org +L: kvm@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/virt/kvm/kvm.git +F: arch/mips/include/asm/kvm* +F: arch/mips/include/uapi/asm/kvm* +F: arch/mips/kvm/ + +KERNEL VIRTUAL MACHINE FOR POWERPC (KVM/powerpc) +M: Paul Mackerras +L: kvm-ppc@vger.kernel.org +S: Supported +W: http://www.linux-kvm.org/ +T: git git://github.com/agraf/linux-2.6.git +F: arch/powerpc/include/asm/kvm* +F: arch/powerpc/include/uapi/asm/kvm* +F: arch/powerpc/kernel/kvm* +F: arch/powerpc/kvm/ + +KERNEL VIRTUAL MACHINE for s390 (KVM/s390) +M: Christian Borntraeger +M: Janosch Frank +R: David Hildenbrand +R: Claudio Imbrenda +L: kvm@vger.kernel.org +S: Supported +W: http://www.ibm.com/developerworks/linux/linux390/ +T: git git://git.kernel.org/pub/scm/linux/kernel/git/kvms390/linux.git +F: Documentation/virt/kvm/s390* +F: arch/s390/include/asm/gmap.h +F: arch/s390/include/asm/kvm* +F: arch/s390/include/uapi/asm/kvm* +F: arch/s390/kernel/uv.c +F: arch/s390/kvm/ +F: arch/s390/mm/gmap.c +F: tools/testing/selftests/kvm/*/s390x/ +F: tools/testing/selftests/kvm/s390x/ + +KERNEL VIRTUAL MACHINE FOR X86 (KVM/x86) +M: Paolo Bonzini +R: Sean Christopherson +R: Vitaly Kuznetsov +R: Wanpeng Li +R: Jim Mattson +R: Joerg Roedel +L: kvm@vger.kernel.org +S: Supported +W: http://www.linux-kvm.org +T: git git://git.kernel.org/pub/scm/virt/kvm/kvm.git +F: arch/x86/include/asm/kvm* +F: arch/x86/include/asm/pvclock-abi.h +F: arch/x86/include/asm/svm.h +F: arch/x86/include/asm/vmx*.h +F: arch/x86/include/uapi/asm/kvm* +F: arch/x86/include/uapi/asm/svm.h +F: arch/x86/include/uapi/asm/vmx.h +F: arch/x86/kernel/kvm.c +F: arch/x86/kernel/kvmclock.c +F: arch/x86/kvm/ +F: arch/x86/kvm/*/ + +KERNFS +M: Greg Kroah-Hartman +M: Tejun Heo +S: Supported +T: git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core.git +F: fs/kernfs/ +F: include/linux/kernfs.h + +KEXEC +M: Eric Biederman +L: kexec@lists.infradead.org +S: Maintained +W: http://kernel.org/pub/linux/utils/kernel/kexec/ +F: include/linux/kexec.h +F: include/uapi/linux/kexec.h +F: kernel/kexec* + +KEYS-ENCRYPTED +M: Mimi Zohar +L: linux-integrity@vger.kernel.org +L: keyrings@vger.kernel.org +S: Supported +F: Documentation/security/keys/trusted-encrypted.rst +F: include/keys/encrypted-type.h +F: security/keys/encrypted-keys/ + +KEYS-TRUSTED +M: James Bottomley +M: Jarkko Sakkinen +M: Mimi Zohar +L: linux-integrity@vger.kernel.org +L: keyrings@vger.kernel.org +S: Supported +F: Documentation/security/keys/trusted-encrypted.rst +F: include/keys/trusted-type.h +F: include/keys/trusted_tpm.h +F: security/keys/trusted-keys/ + +KEYS-TRUSTED-TEE +M: Sumit Garg +L: linux-integrity@vger.kernel.org +L: keyrings@vger.kernel.org +S: Supported +F: include/keys/trusted_tee.h +F: security/keys/trusted-keys/trusted_tee.c + +KEYS/KEYRINGS +M: David Howells +M: Jarkko Sakkinen +L: keyrings@vger.kernel.org +S: Maintained +F: Documentation/security/keys/core.rst +F: include/keys/ +F: include/linux/key-type.h +F: include/linux/key.h +F: include/linux/keyctl.h +F: include/uapi/linux/keyctl.h +F: security/keys/ + +KFENCE +M: Alexander Potapenko +M: Marco Elver +R: Dmitry Vyukov +L: kasan-dev@googlegroups.com +S: Maintained +F: Documentation/dev-tools/kfence.rst +F: arch/*/include/asm/kfence.h +F: include/linux/kfence.h +F: lib/Kconfig.kfence +F: mm/kfence/ + +KFIFO +M: Stefani Seibold +S: Maintained +F: include/linux/kfifo.h +F: lib/kfifo.c +F: samples/kfifo/ + +KGDB / KDB /debug_core +M: Jason Wessel +M: Daniel Thompson +R: Douglas Anderson +L: kgdb-bugreport@lists.sourceforge.net +S: Maintained +W: http://kgdb.wiki.kernel.org/ +T: git git://git.kernel.org/pub/scm/linux/kernel/git/jwessel/kgdb.git +F: Documentation/dev-tools/kgdb.rst +F: drivers/misc/kgdbts.c +F: drivers/tty/serial/kgdboc.c +F: include/linux/kdb.h +F: include/linux/kgdb.h +F: kernel/debug/ + +KHADAS MCU MFD DRIVER +M: Neil Armstrong +L: linux-amlogic@lists.infradead.org +S: Maintained +F: Documentation/devicetree/bindings/mfd/khadas,mcu.yaml +F: drivers/mfd/khadas-mcu.c +F: include/linux/mfd/khadas-mcu.h +F: drivers/thermal/khadas_mcu_fan.c + +KMEMLEAK +M: Catalin Marinas +S: Maintained +F: Documentation/dev-tools/kmemleak.rst +F: include/linux/kmemleak.h +F: mm/kmemleak.c +F: samples/kmemleak/kmemleak-test.c + +KMOD KERNEL MODULE LOADER - USERMODE HELPER +M: Luis Chamberlain +L: linux-kernel@vger.kernel.org +S: Maintained +F: include/linux/kmod.h +F: kernel/kmod.c +F: lib/test_kmod.c +F: tools/testing/selftests/kmod/ + +KPROBES +M: Naveen N. Rao +M: Anil S Keshavamurthy +M: "David S. Miller" +M: Masami Hiramatsu +S: Maintained +F: Documentation/trace/kprobes.rst +F: include/asm-generic/kprobes.h +F: include/linux/kprobes.h +F: kernel/kprobes.c + +KS0108 LCD CONTROLLER DRIVER +M: Miguel Ojeda +S: Maintained +F: Documentation/admin-guide/auxdisplay/ks0108.rst +F: drivers/auxdisplay/ks0108.c +F: include/linux/ks0108.h + +KTD253 BACKLIGHT DRIVER +M: Linus Walleij +S: Maintained +F: Documentation/devicetree/bindings/leds/backlight/kinetic,ktd253.yaml +F: drivers/video/backlight/ktd253-backlight.c + +KTEST +M: Steven Rostedt +M: John Hawley +S: Maintained +F: tools/testing/ktest + +L3MDEV +M: David Ahern +L: netdev@vger.kernel.org +S: Maintained +F: include/net/l3mdev.h +F: net/l3mdev + +L7 BPF FRAMEWORK +M: John Fastabend +M: Daniel Borkmann +M: Jakub Sitnicki +M: Lorenz Bauer +L: netdev@vger.kernel.org +L: bpf@vger.kernel.org +S: Maintained +F: include/linux/skmsg.h +F: net/core/skmsg.c +F: net/core/sock_map.c +F: net/ipv4/tcp_bpf.c +F: net/ipv4/udp_bpf.c +F: net/unix/unix_bpf.c + +LANDLOCK SECURITY MODULE +M: Mickaël Salaün +L: linux-security-module@vger.kernel.org +S: Supported +W: https://landlock.io +T: git https://github.com/landlock-lsm/linux.git +F: Documentation/security/landlock.rst +F: Documentation/userspace-api/landlock.rst +F: include/uapi/linux/landlock.h +F: samples/landlock/ +F: security/landlock/ +F: tools/testing/selftests/landlock/ +K: landlock +K: LANDLOCK + +LANTIQ / INTEL Ethernet drivers +M: Hauke Mehrtens +L: netdev@vger.kernel.org +S: Maintained +F: drivers/net/dsa/lantiq_gswip.c +F: drivers/net/dsa/lantiq_pce.h +F: drivers/net/ethernet/lantiq_xrx200.c +F: net/dsa/tag_gswip.c + +LANTIQ MIPS ARCHITECTURE +M: John Crispin +L: linux-mips@vger.kernel.org +S: Maintained +F: arch/mips/lantiq +F: drivers/soc/lantiq + +LASI 53c700 driver for PARISC +M: "James E.J. Bottomley" +L: linux-scsi@vger.kernel.org +S: Maintained +F: Documentation/scsi/53c700.rst +F: drivers/scsi/53c700* + +LEAKING_ADDRESSES +M: Tobin C. Harding +M: Tycho Andersen +L: linux-hardening@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/tobin/leaks.git +F: scripts/leaking_addresses.pl + +LED SUBSYSTEM +M: Pavel Machek +L: linux-leds@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/pavel/linux-leds.git +F: Documentation/devicetree/bindings/leds/ +F: drivers/leds/ +F: include/linux/leds.h + +LEGACY EEPROM DRIVER +M: Jean Delvare +S: Maintained +F: Documentation/misc-devices/eeprom.rst +F: drivers/misc/eeprom/eeprom.c + +LEGO MINDSTORMS EV3 +R: David Lechner +S: Maintained +F: Documentation/devicetree/bindings/power/supply/lego,ev3-battery.yaml +F: arch/arm/boot/dts/da850-lego-ev3.dts +F: drivers/power/supply/lego_ev3_battery.c + +LEGO USB Tower driver +M: Juergen Stuber +L: legousb-devel@lists.sourceforge.net +S: Maintained +W: http://legousb.sourceforge.net/ +F: drivers/usb/misc/legousbtower.c + +LG LAPTOP EXTRAS +M: Matan Ziv-Av +L: platform-driver-x86@vger.kernel.org +S: Maintained +F: Documentation/ABI/testing/sysfs-platform-lg-laptop +F: Documentation/admin-guide/laptops/lg-laptop.rst +F: drivers/platform/x86/lg-laptop.c + +LG2160 MEDIA DRIVER +M: Michael Krufky +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +W: http://github.com/mkrufky +Q: http://patchwork.linuxtv.org/project/linux-media/list/ +T: git git://linuxtv.org/mkrufky/tuners.git +F: drivers/media/dvb-frontends/lg2160.* + +LGDT3305 MEDIA DRIVER +M: Michael Krufky +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +W: http://github.com/mkrufky +Q: http://patchwork.linuxtv.org/project/linux-media/list/ +T: git git://linuxtv.org/mkrufky/tuners.git +F: drivers/media/dvb-frontends/lgdt3305.* + +LIBATA PATA ARASAN COMPACT FLASH CONTROLLER +M: Viresh Kumar +L: linux-ide@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-block.git +F: drivers/ata/pata_arasan_cf.c +F: include/linux/pata_arasan_cf_data.h + +LIBATA PATA FARADAY FTIDE010 AND GEMINI SATA BRIDGE DRIVERS +M: Linus Walleij +L: linux-ide@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-block.git +F: drivers/ata/pata_ftide010.c +F: drivers/ata/sata_gemini.c +F: drivers/ata/sata_gemini.h + +LIBATA SATA AHCI PLATFORM devices support +M: Hans de Goede +M: Jens Axboe +L: linux-ide@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-block.git +F: drivers/ata/ahci_platform.c +F: drivers/ata/libahci_platform.c +F: include/linux/ahci_platform.h + +LIBATA SATA PROMISE TX2/TX4 CONTROLLER DRIVER +M: Mikael Pettersson +L: linux-ide@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-block.git +F: drivers/ata/sata_promise.* + +LIBATA SUBSYSTEM (Serial and Parallel ATA drivers) +M: Damien Le Moal +L: linux-ide@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/dlemoal/libata.git +F: Documentation/devicetree/bindings/ata/ +F: drivers/ata/ +F: include/linux/ata.h +F: include/linux/libata.h + +LIBLOCKDEP +M: Sasha Levin +S: Maintained +F: tools/lib/lockdep/ + +LIBNVDIMM BLK: MMIO-APERTURE DRIVER +M: Dan Williams +M: Vishal Verma +M: Dave Jiang +L: nvdimm@lists.linux.dev +S: Supported +Q: https://patchwork.kernel.org/project/linux-nvdimm/list/ +P: Documentation/nvdimm/maintainer-entry-profile.rst +F: drivers/nvdimm/blk.c +F: drivers/nvdimm/region_devs.c + +LIBNVDIMM BTT: BLOCK TRANSLATION TABLE +M: Vishal Verma +M: Dan Williams +M: Dave Jiang +L: nvdimm@lists.linux.dev +S: Supported +Q: https://patchwork.kernel.org/project/linux-nvdimm/list/ +P: Documentation/nvdimm/maintainer-entry-profile.rst +F: drivers/nvdimm/btt* + +LIBNVDIMM PMEM: PERSISTENT MEMORY DRIVER +M: Dan Williams +M: Vishal Verma +M: Dave Jiang +L: nvdimm@lists.linux.dev +S: Supported +Q: https://patchwork.kernel.org/project/linux-nvdimm/list/ +P: Documentation/nvdimm/maintainer-entry-profile.rst +F: drivers/nvdimm/pmem* + +LIBNVDIMM: DEVICETREE BINDINGS +M: Oliver O'Halloran +L: nvdimm@lists.linux.dev +S: Supported +Q: https://patchwork.kernel.org/project/linux-nvdimm/list/ +F: Documentation/devicetree/bindings/pmem/pmem-region.txt +F: drivers/nvdimm/of_pmem.c + +LIBNVDIMM: NON-VOLATILE MEMORY DEVICE SUBSYSTEM +M: Dan Williams +M: Vishal Verma +M: Dave Jiang +M: Ira Weiny +L: nvdimm@lists.linux.dev +S: Supported +Q: https://patchwork.kernel.org/project/linux-nvdimm/list/ +P: Documentation/nvdimm/maintainer-entry-profile.rst +T: git git://git.kernel.org/pub/scm/linux/kernel/git/nvdimm/nvdimm.git +F: drivers/acpi/nfit/* +F: drivers/nvdimm/* +F: include/linux/libnvdimm.h +F: include/linux/nd.h +F: include/uapi/linux/ndctl.h +F: tools/testing/nvdimm/ + +LICENSES and SPDX stuff +M: Thomas Gleixner +M: Greg Kroah-Hartman +L: linux-spdx@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/spdx.git +F: COPYING +F: Documentation/process/license-rules.rst +F: LICENSES/ +F: scripts/spdxcheck-test.sh +F: scripts/spdxcheck.py + +LINEAR RANGES HELPERS +M: Mark Brown +R: Matti Vaittinen +F: lib/linear_ranges.c +F: lib/test_linear_ranges.c +F: include/linux/linear_range.h + +LINUX FOR POWER MACINTOSH +M: Benjamin Herrenschmidt +L: linuxppc-dev@lists.ozlabs.org +S: Odd Fixes +F: arch/powerpc/platforms/powermac/ +F: drivers/macintosh/ + +LINUX FOR POWERPC (32-BIT AND 64-BIT) +M: Michael Ellerman +R: Benjamin Herrenschmidt +R: Paul Mackerras +L: linuxppc-dev@lists.ozlabs.org +S: Supported +W: https://github.com/linuxppc/wiki/wiki +Q: http://patchwork.ozlabs.org/project/linuxppc-dev/list/ +T: git git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git +F: Documentation/ABI/stable/sysfs-firmware-opal-* +F: Documentation/devicetree/bindings/i2c/i2c-opal.txt +F: Documentation/devicetree/bindings/powerpc/ +F: Documentation/devicetree/bindings/rtc/rtc-opal.txt +F: Documentation/powerpc/ +F: arch/powerpc/ +F: drivers/*/*/*pasemi* +F: drivers/*/*pasemi* +F: drivers/char/tpm/tpm_ibmvtpm* +F: drivers/crypto/nx/ +F: drivers/crypto/vmx/ +F: drivers/i2c/busses/i2c-opal.c +F: drivers/net/ethernet/ibm/ibmveth.* +F: drivers/net/ethernet/ibm/ibmvnic.* +F: drivers/pci/hotplug/pnv_php.c +F: drivers/pci/hotplug/rpa* +F: drivers/rtc/rtc-opal.c +F: drivers/scsi/ibmvscsi/ +F: drivers/tty/hvc/hvc_opal.c +F: drivers/watchdog/wdrtas.c +F: tools/testing/selftests/powerpc +N: /pmac +N: powermac +N: powernv +N: [^a-z0-9]ps3 +N: pseries + +LINUX FOR POWERPC EMBEDDED MPC5XXX +M: Anatolij Gustschin +L: linuxppc-dev@lists.ozlabs.org +S: Odd Fixes +F: arch/powerpc/platforms/512x/ +F: arch/powerpc/platforms/52xx/ + +LINUX FOR POWERPC EMBEDDED PPC4XX +L: linuxppc-dev@lists.ozlabs.org +S: Orphan +F: arch/powerpc/platforms/40x/ +F: arch/powerpc/platforms/44x/ + +LINUX FOR POWERPC EMBEDDED PPC83XX AND PPC85XX +M: Scott Wood +L: linuxppc-dev@lists.ozlabs.org +S: Odd fixes +T: git git://git.kernel.org/pub/scm/linux/kernel/git/scottwood/linux.git +F: Documentation/devicetree/bindings/powerpc/fsl/ +F: arch/powerpc/platforms/83xx/ +F: arch/powerpc/platforms/85xx/ + +LINUX FOR POWERPC EMBEDDED PPC8XX +M: Christophe Leroy +L: linuxppc-dev@lists.ozlabs.org +S: Maintained +F: arch/powerpc/platforms/8xx/ + +LINUX KERNEL DUMP TEST MODULE (LKDTM) +M: Kees Cook +S: Maintained +F: drivers/misc/lkdtm/* +F: tools/testing/selftests/lkdtm/* + +LINUX KERNEL MEMORY CONSISTENCY MODEL (LKMM) +M: Alan Stern +M: Andrea Parri +M: Will Deacon +M: Peter Zijlstra +M: Boqun Feng +M: Nicholas Piggin +M: David Howells +M: Jade Alglave +M: Luc Maranget +M: "Paul E. McKenney" +R: Akira Yokosawa +R: Daniel Lustig +R: Joel Fernandes +L: linux-kernel@vger.kernel.org +L: linux-arch@vger.kernel.org +S: Supported +T: git git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git dev +F: Documentation/atomic_bitops.txt +F: Documentation/atomic_t.txt +F: Documentation/core-api/refcount-vs-atomic.rst +F: Documentation/litmus-tests/ +F: Documentation/memory-barriers.txt +F: tools/memory-model/ + +LIS3LV02D ACCELEROMETER DRIVER +M: Eric Piel +S: Maintained +F: Documentation/misc-devices/lis3lv02d.rst +F: drivers/misc/lis3lv02d/ +F: drivers/platform/x86/hp_accel.c + +LIST KUNIT TEST +M: David Gow +L: linux-kselftest@vger.kernel.org +L: kunit-dev@googlegroups.com +S: Maintained +F: lib/list-test.c + +LITEX PLATFORM +M: Karol Gugala +M: Mateusz Holenko +S: Maintained +F: Documentation/devicetree/bindings/*/litex,*.yaml +F: arch/openrisc/boot/dts/or1klitex.dts +F: drivers/soc/litex/litex_soc_ctrl.c +F: drivers/tty/serial/liteuart.c +F: include/linux/litex.h + +LIVE PATCHING +M: Josh Poimboeuf +M: Jiri Kosina +M: Miroslav Benes +M: Petr Mladek +R: Joe Lawrence +L: live-patching@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/livepatching/livepatching.git +F: Documentation/ABI/testing/sysfs-kernel-livepatch +F: Documentation/livepatch/ +F: arch/powerpc/include/asm/livepatch.h +F: arch/s390/include/asm/livepatch.h +F: arch/x86/include/asm/livepatch.h +F: include/linux/livepatch.h +F: kernel/livepatch/ +F: lib/livepatch/ +F: samples/livepatch/ +F: tools/testing/selftests/livepatch/ + +LLC (802.2) +L: netdev@vger.kernel.org +S: Odd fixes +F: include/linux/llc.h +F: include/net/llc* +F: include/uapi/linux/llc.h +F: net/llc/ + +LM73 HARDWARE MONITOR DRIVER +M: Guillaume Ligneul +L: linux-hwmon@vger.kernel.org +S: Maintained +F: drivers/hwmon/lm73.c + +LM78 HARDWARE MONITOR DRIVER +M: Jean Delvare +L: linux-hwmon@vger.kernel.org +S: Maintained +F: Documentation/hwmon/lm78.rst +F: drivers/hwmon/lm78.c + +LM83 HARDWARE MONITOR DRIVER +M: Jean Delvare +L: linux-hwmon@vger.kernel.org +S: Maintained +F: Documentation/hwmon/lm83.rst +F: drivers/hwmon/lm83.c + +LM90 HARDWARE MONITOR DRIVER +M: Jean Delvare +L: linux-hwmon@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/hwmon/lm90.txt +F: Documentation/hwmon/lm90.rst +F: drivers/hwmon/lm90.c +F: include/dt-bindings/thermal/lm90.h + +LM95234 HARDWARE MONITOR DRIVER +M: Guenter Roeck +L: linux-hwmon@vger.kernel.org +S: Maintained +F: Documentation/hwmon/lm95234.rst +F: drivers/hwmon/lm95234.c + +LME2510 MEDIA DRIVER +M: Malcolm Priestley +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +Q: http://patchwork.linuxtv.org/project/linux-media/list/ +F: drivers/media/usb/dvb-usb-v2/lmedm04* + +LOADPIN SECURITY MODULE +M: Kees Cook +S: Supported +T: git git://git.kernel.org/pub/scm/linux/kernel/git/kees/linux.git lsm/loadpin +F: Documentation/admin-guide/LSM/LoadPin.rst +F: security/loadpin/ + +LOCKING PRIMITIVES +M: Peter Zijlstra +M: Ingo Molnar +M: Will Deacon +R: Waiman Long +R: Boqun Feng (LOCKDEP) +L: linux-kernel@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git locking/core +F: Documentation/locking/ +F: arch/*/include/asm/spinlock*.h +F: include/linux/lockdep.h +F: include/linux/mutex*.h +F: include/linux/rwlock*.h +F: include/linux/rwsem*.h +F: include/linux/seqlock.h +F: include/linux/spinlock*.h +F: kernel/locking/ +F: lib/locking*.[ch] +X: kernel/locking/locktorture.c + +LOGICAL DISK MANAGER SUPPORT (LDM, Windows 2000/XP/Vista Dynamic Disks) +M: "Richard Russon (FlatCap)" +L: linux-ntfs-dev@lists.sourceforge.net +S: Maintained +W: http://www.linux-ntfs.org/content/view/19/37/ +F: Documentation/admin-guide/ldm.rst +F: block/partitions/ldm.* + +LOGITECH HID GAMING KEYBOARDS +M: Hans de Goede +L: linux-input@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/hid/hid.git +F: drivers/hid/hid-lg-g15.c + +LONTIUM LT8912B MIPI TO HDMI BRIDGE +M: Adrien Grassein +S: Maintained +F: Documentation/devicetree/bindings/display/bridge/lontium,lt8912b.yaml +F: drivers/gpu/drm/bridge/lontium-lt8912b.c + +LSILOGIC MPT FUSION DRIVERS (FC/SAS/SPI) +M: Sathya Prakash +M: Sreekanth Reddy +M: Suganath Prabu Subramani +L: MPT-FusionLinux.pdl@broadcom.com +L: linux-scsi@vger.kernel.org +S: Supported +W: http://www.avagotech.com/support/ +F: drivers/message/fusion/ +F: drivers/scsi/mpt3sas/ + +LSILOGIC/SYMBIOS/NCR 53C8XX and 53C1010 PCI-SCSI drivers +M: Matthew Wilcox +L: linux-scsi@vger.kernel.org +S: Maintained +F: drivers/scsi/sym53c8xx_2/ + +LTC1660 DAC DRIVER +M: Marcus Folkesson +L: linux-iio@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/iio/dac/lltc,ltc1660.yaml +F: drivers/iio/dac/ltc1660.c + +LTC2947 HARDWARE MONITOR DRIVER +M: Nuno Sá +L: linux-hwmon@vger.kernel.org +S: Supported +W: http://ez.analog.com/community/linux-device-drivers +F: Documentation/devicetree/bindings/hwmon/adi,ltc2947.yaml +F: drivers/hwmon/ltc2947-core.c +F: drivers/hwmon/ltc2947-i2c.c +F: drivers/hwmon/ltc2947-spi.c +F: drivers/hwmon/ltc2947.h + +LTC2983 IIO TEMPERATURE DRIVER +M: Nuno Sá +L: linux-iio@vger.kernel.org +S: Supported +W: http://ez.analog.com/community/linux-device-drivers +F: Documentation/devicetree/bindings/iio/temperature/adi,ltc2983.yaml +F: drivers/iio/temperature/ltc2983.c + +LTC4261 HARDWARE MONITOR DRIVER +M: Guenter Roeck +L: linux-hwmon@vger.kernel.org +S: Maintained +F: Documentation/hwmon/ltc4261.rst +F: drivers/hwmon/ltc4261.c + +LTC4306 I2C MULTIPLEXER DRIVER +M: Michael Hennerich +L: linux-i2c@vger.kernel.org +S: Supported +W: http://ez.analog.com/community/linux-device-drivers +F: Documentation/devicetree/bindings/i2c/i2c-mux-ltc4306.txt +F: drivers/i2c/muxes/i2c-mux-ltc4306.c + +LTP (Linux Test Project) +M: Mike Frysinger +M: Cyril Hrubis +M: Wanlong Gao +M: Jan Stancek +M: Stanislav Kholmanskikh +M: Alexey Kodanev +L: ltp@lists.linux.it (subscribers-only) +S: Maintained +W: http://linux-test-project.github.io/ +T: git git://github.com/linux-test-project/ltp.git + +LYNX PCS MODULE +M: Ioana Ciornei +L: netdev@vger.kernel.org +S: Supported +F: drivers/net/pcs/pcs-lynx.c +F: include/linux/pcs-lynx.h + +M68K ARCHITECTURE +M: Geert Uytterhoeven +L: linux-m68k@lists.linux-m68k.org +S: Maintained +W: http://www.linux-m68k.org/ +T: git git://git.kernel.org/pub/scm/linux/kernel/git/geert/linux-m68k.git +F: arch/m68k/ +F: drivers/zorro/ + +M68K ON APPLE MACINTOSH +M: Joshua Thompson +L: linux-m68k@lists.linux-m68k.org +S: Maintained +W: http://www.mac.linux-m68k.org/ +F: arch/m68k/mac/ +F: drivers/macintosh/adb-iop.c +F: drivers/macintosh/via-macii.c + +M68K ON HP9000/300 +M: Philip Blundell +S: Maintained +W: http://www.tazenda.demon.co.uk/phil/linux-hp +F: arch/m68k/hp300/ + +M88DS3103 MEDIA DRIVER +M: Antti Palosaari +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +W: http://palosaari.fi/linux/ +Q: http://patchwork.linuxtv.org/project/linux-media/list/ +T: git git://linuxtv.org/anttip/media_tree.git +F: drivers/media/dvb-frontends/m88ds3103* + +M88RS2000 MEDIA DRIVER +M: Malcolm Priestley +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +Q: http://patchwork.linuxtv.org/project/linux-media/list/ +F: drivers/media/dvb-frontends/m88rs2000* + +MA901 MASTERKIT USB FM RADIO DRIVER +M: Alexey Klimov +L: linux-media@vger.kernel.org +S: Maintained +T: git git://linuxtv.org/media_tree.git +F: drivers/media/radio/radio-ma901.c + +MAC80211 +M: Johannes Berg +L: linux-wireless@vger.kernel.org +S: Maintained +W: https://wireless.wiki.kernel.org/ +T: git git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211.git +T: git git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next.git +F: Documentation/networking/mac80211-injection.rst +F: Documentation/networking/mac80211_hwsim/mac80211_hwsim.rst +F: drivers/net/wireless/mac80211_hwsim.[ch] +F: include/net/mac80211.h +F: net/mac80211/ + +MAILBOX API +M: Jassi Brar +L: linux-kernel@vger.kernel.org +S: Maintained +F: drivers/mailbox/ +F: include/linux/mailbox_client.h +F: include/linux/mailbox_controller.h +F: include/dt-bindings/mailbox/ +F: Documentation/devicetree/bindings/mailbox/ + +MAILBOX ARM MHUv2 +M: Viresh Kumar +M: Tushar Khandelwal +L: linux-kernel@vger.kernel.org +S: Maintained +F: drivers/mailbox/arm_mhuv2.c +F: include/linux/mailbox/arm_mhuv2_message.h +F: Documentation/devicetree/bindings/mailbox/arm,mhuv2.yaml + +MANAGEMENT COMPONENT TRANSPORT PROTOCOL (MCTP) +M: Jeremy Kerr +M: Matt Johnston +L: netdev@vger.kernel.org +S: Maintained +F: Documentation/networking/mctp.rst +F: drivers/net/mctp/ +F: include/net/mctp.h +F: include/net/mctpdevice.h +F: include/net/netns/mctp.h +F: net/mctp/ + +MAN-PAGES: MANUAL PAGES FOR LINUX -- Sections 2, 3, 4, 5, and 7 +M: Michael Kerrisk +L: linux-man@vger.kernel.org +S: Maintained +W: http://www.kernel.org/doc/man-pages + +MARDUK (CREATOR CI40) DEVICE TREE SUPPORT +M: Rahul Bedarkar +L: linux-mips@vger.kernel.org +S: Maintained +F: arch/mips/boot/dts/img/pistachio* + +MARVELL 88E6XXX ETHERNET SWITCH FABRIC DRIVER +M: Andrew Lunn +M: Vivien Didelot +L: netdev@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/net/dsa/marvell.txt +F: Documentation/networking/devlink/mv88e6xxx.rst +F: drivers/net/dsa/mv88e6xxx/ +F: include/linux/dsa/mv88e6xxx.h +F: include/linux/platform_data/mv88e6xxx.h + +MARVELL ARMADA 3700 PHY DRIVERS +M: Miquel Raynal +S: Maintained +F: Documentation/devicetree/bindings/phy/phy-mvebu-comphy.txt +F: Documentation/devicetree/bindings/phy/marvell,armada-3700-utmi-phy.yaml +F: drivers/phy/marvell/phy-mvebu-a3700-comphy.c +F: drivers/phy/marvell/phy-mvebu-a3700-utmi.c + +MARVELL ARMADA DRM SUPPORT +M: Russell King +S: Maintained +T: git git://git.armlinux.org.uk/~rmk/linux-arm.git drm-armada-devel +T: git git://git.armlinux.org.uk/~rmk/linux-arm.git drm-armada-fixes +F: Documentation/devicetree/bindings/display/armada/ +F: drivers/gpu/drm/armada/ +F: include/uapi/drm/armada_drm.h + +MARVELL CRYPTO DRIVER +M: Boris Brezillon +M: Arnaud Ebalard +M: Srujana Challa +L: linux-crypto@vger.kernel.org +S: Maintained +F: drivers/crypto/marvell/ +F: include/linux/soc/marvell/octeontx2/ + +MARVELL GIGABIT ETHERNET DRIVERS (skge/sky2) +M: Mirko Lindner +M: Stephen Hemminger +L: netdev@vger.kernel.org +S: Maintained +F: drivers/net/ethernet/marvell/sk* + +MARVELL LIBERTAS WIRELESS DRIVER +L: libertas-dev@lists.infradead.org +S: Orphan +F: drivers/net/wireless/marvell/libertas/ + +MARVELL MACCHIATOBIN SUPPORT +M: Russell King +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +F: arch/arm64/boot/dts/marvell/armada-8040-mcbin.dts + +MARVELL MV643XX ETHERNET DRIVER +M: Sebastian Hesselbarth +L: netdev@vger.kernel.org +S: Maintained +F: drivers/net/ethernet/marvell/mv643xx_eth.* +F: include/linux/mv643xx.h + +MARVELL MV88X3310 PHY DRIVER +M: Russell King +M: Marek Behún +L: netdev@vger.kernel.org +S: Maintained +F: drivers/net/phy/marvell10g.c + +MARVELL MVEBU THERMAL DRIVER +M: Miquel Raynal +S: Maintained +F: drivers/thermal/armada_thermal.c + +MARVELL MVNETA ETHERNET DRIVER +M: Thomas Petazzoni +L: netdev@vger.kernel.org +S: Maintained +F: drivers/net/ethernet/marvell/mvneta.* + +MARVELL MVPP2 ETHERNET DRIVER +M: Marcin Wojtas +M: Russell King +L: netdev@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/net/marvell-pp2.txt +F: drivers/net/ethernet/marvell/mvpp2/ + +MARVELL MWIFIEX WIRELESS DRIVER +M: Amitkumar Karwar +M: Ganapathi Bhat +M: Sharvari Harisangam +M: Xinming Hu +L: linux-wireless@vger.kernel.org +S: Maintained +F: drivers/net/wireless/marvell/mwifiex/ + +MARVELL MWL8K WIRELESS DRIVER +M: Lennert Buytenhek +L: linux-wireless@vger.kernel.org +S: Odd Fixes +F: drivers/net/wireless/marvell/mwl8k.c + +MARVELL NAND CONTROLLER DRIVER +M: Miquel Raynal +L: linux-mtd@lists.infradead.org +S: Maintained +F: Documentation/devicetree/bindings/mtd/marvell-nand.txt +F: drivers/mtd/nand/raw/marvell_nand.c + +MARVELL OCTEONTX2 PHYSICAL FUNCTION DRIVER +M: Sunil Goutham +M: Geetha sowjanya +M: Subbaraya Sundeep +M: hariprasad +L: netdev@vger.kernel.org +S: Supported +F: drivers/net/ethernet/marvell/octeontx2/nic/ +F: include/linux/soc/marvell/octeontx2/ + +MARVELL OCTEONTX2 RVU ADMIN FUNCTION DRIVER +M: Sunil Goutham +M: Linu Cherian +M: Geetha sowjanya +M: Jerin Jacob +M: hariprasad +M: Subbaraya Sundeep +L: netdev@vger.kernel.org +S: Supported +F: Documentation/networking/device_drivers/ethernet/marvell/octeontx2.rst +F: drivers/net/ethernet/marvell/octeontx2/af/ + +MARVELL PRESTERA ETHERNET SWITCH DRIVER +M: Taras Chornyi +S: Supported +W: https://github.com/Marvell-switching/switchdev-prestera +F: drivers/net/ethernet/marvell/prestera/ + +MARVELL SOC MMC/SD/SDIO CONTROLLER DRIVER +M: Nicolas Pitre +S: Odd Fixes +F: drivers/mmc/host/mvsdio.* + +MARVELL USB MDIO CONTROLLER DRIVER +M: Tobias Waldekranz +L: netdev@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/net/marvell,mvusb.yaml +F: drivers/net/mdio/mdio-mvusb.c + +MARVELL XENON MMC/SD/SDIO HOST CONTROLLER DRIVER +M: Hu Ziji +L: linux-mmc@vger.kernel.org +S: Supported +F: Documentation/devicetree/bindings/mmc/marvell,xenon-sdhci.txt +F: drivers/mmc/host/sdhci-xenon* + +MATROX FRAMEBUFFER DRIVER +L: linux-fbdev@vger.kernel.org +S: Orphan +F: drivers/video/fbdev/matrox/matroxfb_* +F: include/uapi/linux/matroxfb.h + +MAX15301 DRIVER +M: Daniel Nilsson +L: linux-hwmon@vger.kernel.org +S: Maintained +F: Documentation/hwmon/max15301.rst +F: drivers/hwmon/pmbus/max15301.c + +MAX16065 HARDWARE MONITOR DRIVER +M: Guenter Roeck +L: linux-hwmon@vger.kernel.org +S: Maintained +F: Documentation/hwmon/max16065.rst +F: drivers/hwmon/max16065.c + +MAX2175 SDR TUNER DRIVER +M: Ramesh Shanmugasundaram +L: linux-media@vger.kernel.org +S: Maintained +T: git git://linuxtv.org/media_tree.git +F: Documentation/devicetree/bindings/media/i2c/max2175.txt +F: Documentation/userspace-api/media/drivers/max2175.rst +F: drivers/media/i2c/max2175* +F: include/uapi/linux/max2175.h + +MAX6650 HARDWARE MONITOR AND FAN CONTROLLER DRIVER +L: linux-hwmon@vger.kernel.org +S: Orphan +F: Documentation/hwmon/max6650.rst +F: drivers/hwmon/max6650.c + +MAX6697 HARDWARE MONITOR DRIVER +M: Guenter Roeck +L: linux-hwmon@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/hwmon/max6697.txt +F: Documentation/hwmon/max6697.rst +F: drivers/hwmon/max6697.c +F: include/linux/platform_data/max6697.h + +MAX9286 QUAD GMSL DESERIALIZER DRIVER +M: Jacopo Mondi +M: Kieran Bingham +M: Laurent Pinchart +M: Niklas Söderlund +L: linux-media@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/media/i2c/maxim,max9286.yaml +F: drivers/media/i2c/max9286.c + +MAX9860 MONO AUDIO VOICE CODEC DRIVER +M: Peter Rosin +L: alsa-devel@alsa-project.org (moderated for non-subscribers) +S: Maintained +F: Documentation/devicetree/bindings/sound/max9860.txt +F: sound/soc/codecs/max9860.* + +MAXBOTIX ULTRASONIC RANGER IIO DRIVER +M: Andreas Klinger +L: linux-iio@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/iio/proximity/maxbotix,mb1232.yaml +F: drivers/iio/proximity/mb1232.c + +MAXIM MAX77650 PMIC MFD DRIVER +M: Bartosz Golaszewski +L: linux-kernel@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/*/*max77650.yaml +F: Documentation/devicetree/bindings/*/max77650*.yaml +F: drivers/gpio/gpio-max77650.c +F: drivers/input/misc/max77650-onkey.c +F: drivers/leds/leds-max77650.c +F: drivers/mfd/max77650.c +F: drivers/power/supply/max77650-charger.c +F: drivers/regulator/max77650-regulator.c +F: include/linux/mfd/max77650.h + +MAXIM MAX77802 PMIC REGULATOR DEVICE DRIVER +M: Javier Martinez Canillas +L: linux-kernel@vger.kernel.org +S: Supported +F: Documentation/devicetree/bindings/*/*max77802.txt +F: drivers/regulator/max77802-regulator.c +F: include/dt-bindings/*/*max77802.h + +MAXIM MUIC CHARGER DRIVERS FOR EXYNOS BASED BOARDS +M: Krzysztof Kozlowski +M: Bartlomiej Zolnierkiewicz +L: linux-pm@vger.kernel.org +S: Supported +F: drivers/power/supply/max14577_charger.c +F: drivers/power/supply/max77693_charger.c + +MAXIM PMIC AND MUIC DRIVERS FOR EXYNOS BASED BOARDS +M: Chanwoo Choi +M: Krzysztof Kozlowski +M: Bartlomiej Zolnierkiewicz +L: linux-kernel@vger.kernel.org +S: Supported +F: Documentation/devicetree/bindings/*/max77686.txt +F: Documentation/devicetree/bindings/clock/maxim,max77686.txt +F: Documentation/devicetree/bindings/mfd/max14577.txt +F: Documentation/devicetree/bindings/mfd/max77693.txt +F: drivers/*/max14577*.c +F: drivers/*/max77686*.c +F: drivers/*/max77693*.c +F: drivers/clk/clk-max77686.c +F: drivers/extcon/extcon-max14577.c +F: drivers/extcon/extcon-max77693.c +F: drivers/rtc/rtc-max77686.c +F: include/linux/mfd/max14577*.h +F: include/linux/mfd/max77686*.h +F: include/linux/mfd/max77693*.h + +MAXIRADIO FM RADIO RECEIVER DRIVER +M: Hans Verkuil +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +T: git git://linuxtv.org/media_tree.git +F: drivers/media/radio/radio-maxiradio* + +MAXLINEAR ETHERNET PHY DRIVER +M: Xu Liang +L: netdev@vger.kernel.org +S: Supported +F: drivers/net/phy/mxl-gpy.c + +MCBA MICROCHIP CAN BUS ANALYZER TOOL DRIVER +R: Yasushi SHOJI +L: linux-can@vger.kernel.org +S: Maintained +F: drivers/net/can/usb/mcba_usb.c + +MCAN MMIO DEVICE DRIVER +M: Chandrasekar Ramakrishnan +L: linux-can@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/net/can/bosch,m_can.yaml +F: drivers/net/can/m_can/m_can.c +F: drivers/net/can/m_can/m_can.h +F: drivers/net/can/m_can/m_can_platform.c + +MCP2221A MICROCHIP USB-HID TO I2C BRIDGE DRIVER +M: Rishi Gupta +L: linux-i2c@vger.kernel.org +L: linux-input@vger.kernel.org +S: Maintained +F: drivers/hid/hid-mcp2221.c + +MCP251XFD SPI-CAN NETWORK DRIVER +M: Marc Kleine-Budde +M: Manivannan Sadhasivam +R: Thomas Kopp +L: linux-can@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/net/can/microchip,mcp251xfd.yaml +F: drivers/net/can/spi/mcp251xfd/ + +MCP4018 AND MCP4531 MICROCHIP DIGITAL POTENTIOMETER DRIVERS +M: Peter Rosin +L: linux-iio@vger.kernel.org +S: Maintained +F: Documentation/ABI/testing/sysfs-bus-iio-potentiometer-mcp4531 +F: drivers/iio/potentiometer/mcp4018.c +F: drivers/iio/potentiometer/mcp4531.c + +MCR20A IEEE-802.15.4 RADIO DRIVER +M: Xue Liu +L: linux-wpan@vger.kernel.org +S: Maintained +W: https://github.com/xueliu/mcr20a-linux +F: Documentation/devicetree/bindings/net/ieee802154/mcr20a.txt +F: drivers/net/ieee802154/mcr20a.c +F: drivers/net/ieee802154/mcr20a.h + +MEASUREMENT COMPUTING CIO-DAC IIO DRIVER +M: William Breathitt Gray +L: linux-iio@vger.kernel.org +S: Maintained +F: drivers/iio/dac/cio-dac.c + +MEDIA CONTROLLER FRAMEWORK +M: Sakari Ailus +M: Laurent Pinchart +L: linux-media@vger.kernel.org +S: Supported +W: https://www.linuxtv.org +T: git git://linuxtv.org/media_tree.git +F: drivers/media/mc/ +F: include/media/media-*.h +F: include/uapi/linux/media.h + +MEDIA DRIVER FOR FREESCALE IMX PXP +M: Philipp Zabel +L: linux-media@vger.kernel.org +S: Maintained +T: git git://linuxtv.org/media_tree.git +F: drivers/media/platform/imx-pxp.[ch] + +MEDIA DRIVERS FOR ASCOT2E +M: Sergey Kozlov +M: Abylay Ospan +L: linux-media@vger.kernel.org +S: Supported +W: https://linuxtv.org +W: http://netup.tv/ +T: git git://linuxtv.org/media_tree.git +F: drivers/media/dvb-frontends/ascot2e* + +MEDIA DRIVERS FOR CXD2099AR CI CONTROLLERS +M: Jasmin Jessich +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +T: git git://linuxtv.org/media_tree.git +F: drivers/media/dvb-frontends/cxd2099* + +MEDIA DRIVERS FOR CXD2841ER +M: Sergey Kozlov +M: Abylay Ospan +L: linux-media@vger.kernel.org +S: Supported +W: https://linuxtv.org +W: http://netup.tv/ +T: git git://linuxtv.org/media_tree.git +F: drivers/media/dvb-frontends/cxd2841er* + +MEDIA DRIVERS FOR CXD2880 +M: Yasunari Takiguchi +L: linux-media@vger.kernel.org +S: Supported +W: http://linuxtv.org/ +T: git git://linuxtv.org/media_tree.git +F: drivers/media/dvb-frontends/cxd2880/* +F: drivers/media/spi/cxd2880* + +MEDIA DRIVERS FOR DIGITAL DEVICES PCIE DEVICES +L: linux-media@vger.kernel.org +S: Orphan +W: https://linuxtv.org +T: git git://linuxtv.org/media_tree.git +F: drivers/media/pci/ddbridge/* + +MEDIA DRIVERS FOR FREESCALE IMX +M: Steve Longerbeam +M: Philipp Zabel +L: linux-media@vger.kernel.org +S: Maintained +T: git git://linuxtv.org/media_tree.git +F: Documentation/admin-guide/media/imx.rst +F: Documentation/devicetree/bindings/media/imx.txt +F: drivers/staging/media/imx/ +F: include/linux/imx-media.h +F: include/media/imx.h + +MEDIA DRIVERS FOR FREESCALE IMX7 +M: Rui Miguel Silva +M: Laurent Pinchart +L: linux-media@vger.kernel.org +S: Maintained +T: git git://linuxtv.org/media_tree.git +F: Documentation/admin-guide/media/imx7.rst +F: Documentation/devicetree/bindings/media/nxp,imx7-csi.yaml +F: Documentation/devicetree/bindings/media/nxp,imx7-mipi-csi2.yaml +F: drivers/staging/media/imx/imx7-media-csi.c +F: drivers/staging/media/imx/imx7-mipi-csis.c + +MEDIA DRIVERS FOR HELENE +M: Abylay Ospan +L: linux-media@vger.kernel.org +S: Supported +W: https://linuxtv.org +W: http://netup.tv/ +T: git git://linuxtv.org/media_tree.git +F: drivers/media/dvb-frontends/helene* + +MEDIA DRIVERS FOR HORUS3A +M: Sergey Kozlov +M: Abylay Ospan +L: linux-media@vger.kernel.org +S: Supported +W: https://linuxtv.org +W: http://netup.tv/ +T: git git://linuxtv.org/media_tree.git +F: drivers/media/dvb-frontends/horus3a* + +MEDIA DRIVERS FOR LNBH25 +M: Sergey Kozlov +M: Abylay Ospan +L: linux-media@vger.kernel.org +S: Supported +W: https://linuxtv.org +W: http://netup.tv/ +T: git git://linuxtv.org/media_tree.git +F: drivers/media/dvb-frontends/lnbh25* + +MEDIA DRIVERS FOR MXL5XX TUNER DEMODULATORS +L: linux-media@vger.kernel.org +S: Orphan +W: https://linuxtv.org +T: git git://linuxtv.org/media_tree.git +F: drivers/media/dvb-frontends/mxl5xx* + +MEDIA DRIVERS FOR NETUP PCI UNIVERSAL DVB devices +M: Sergey Kozlov +M: Abylay Ospan +L: linux-media@vger.kernel.org +S: Supported +W: https://linuxtv.org +W: http://netup.tv/ +T: git git://linuxtv.org/media_tree.git +F: drivers/media/pci/netup_unidvb/* + +MEDIA DRIVERS FOR NVIDIA TEGRA - VDE +M: Dmitry Osipenko +L: linux-media@vger.kernel.org +L: linux-tegra@vger.kernel.org +S: Maintained +T: git git://linuxtv.org/media_tree.git +F: Documentation/devicetree/bindings/media/nvidia,tegra-vde.txt +F: drivers/staging/media/tegra-vde/ + +MEDIA DRIVERS FOR RENESAS - CEU +M: Jacopo Mondi +L: linux-media@vger.kernel.org +L: linux-renesas-soc@vger.kernel.org +S: Supported +T: git git://linuxtv.org/media_tree.git +F: Documentation/devicetree/bindings/media/renesas,ceu.yaml +F: drivers/media/platform/renesas-ceu.c +F: include/media/drv-intf/renesas-ceu.h + +MEDIA DRIVERS FOR RENESAS - DRIF +M: Fabrizio Castro +L: linux-media@vger.kernel.org +L: linux-renesas-soc@vger.kernel.org +S: Supported +T: git git://linuxtv.org/media_tree.git +F: Documentation/devicetree/bindings/media/renesas,drif.yaml +F: drivers/media/platform/rcar_drif.c + +MEDIA DRIVERS FOR RENESAS - FCP +M: Laurent Pinchart +L: linux-media@vger.kernel.org +L: linux-renesas-soc@vger.kernel.org +S: Supported +T: git git://linuxtv.org/media_tree.git +F: Documentation/devicetree/bindings/media/renesas,fcp.yaml +F: drivers/media/platform/rcar-fcp.c +F: include/media/rcar-fcp.h + +MEDIA DRIVERS FOR RENESAS - FDP1 +M: Kieran Bingham +L: linux-media@vger.kernel.org +L: linux-renesas-soc@vger.kernel.org +S: Supported +T: git git://linuxtv.org/media_tree.git +F: Documentation/devicetree/bindings/media/renesas,fdp1.yaml +F: drivers/media/platform/rcar_fdp1.c + +MEDIA DRIVERS FOR RENESAS - VIN +M: Niklas Söderlund +L: linux-media@vger.kernel.org +L: linux-renesas-soc@vger.kernel.org +S: Supported +T: git git://linuxtv.org/media_tree.git +F: Documentation/devicetree/bindings/media/renesas,csi2.yaml +F: Documentation/devicetree/bindings/media/renesas,isp.yaml +F: Documentation/devicetree/bindings/media/renesas,vin.yaml +F: drivers/media/platform/rcar-vin/ + +MEDIA DRIVERS FOR RENESAS - VSP1 +M: Laurent Pinchart +M: Kieran Bingham +L: linux-media@vger.kernel.org +L: linux-renesas-soc@vger.kernel.org +S: Supported +T: git git://linuxtv.org/media_tree.git +F: Documentation/devicetree/bindings/media/renesas,vsp1.yaml +F: drivers/media/platform/vsp1/ + +MEDIA DRIVERS FOR ST STV0910 DEMODULATOR ICs +L: linux-media@vger.kernel.org +S: Orphan +W: https://linuxtv.org +T: git git://linuxtv.org/media_tree.git +F: drivers/media/dvb-frontends/stv0910* + +MEDIA DRIVERS FOR ST STV6111 TUNER ICs +L: linux-media@vger.kernel.org +S: Orphan +W: https://linuxtv.org +T: git git://linuxtv.org/media_tree.git +F: drivers/media/dvb-frontends/stv6111* + +MEDIA DRIVERS FOR STM32 - DCMI +M: Hugues Fruchet +L: linux-media@vger.kernel.org +S: Supported +T: git git://linuxtv.org/media_tree.git +F: Documentation/devicetree/bindings/media/st,stm32-dcmi.yaml +F: drivers/media/platform/stm32/stm32-dcmi.c + +MEDIA INPUT INFRASTRUCTURE (V4L/DVB) +M: Mauro Carvalho Chehab +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +Q: http://patchwork.kernel.org/project/linux-media/list/ +T: git git://linuxtv.org/media_tree.git +F: Documentation/admin-guide/media/ +F: Documentation/devicetree/bindings/media/ +F: Documentation/driver-api/media/ +F: Documentation/userspace-api/media/ +F: drivers/media/ +F: drivers/staging/media/ +F: include/linux/platform_data/media/ +F: include/media/ +F: include/uapi/linux/dvb/ +F: include/uapi/linux/ivtv* +F: include/uapi/linux/media.h +F: include/uapi/linux/meye.h +F: include/uapi/linux/uvcvideo.h +F: include/uapi/linux/v4l2-* +F: include/uapi/linux/videodev2.h + +MEDIATEK BLUETOOTH DRIVER +M: Sean Wang +L: linux-bluetooth@vger.kernel.org +L: linux-mediatek@lists.infradead.org (moderated for non-subscribers) +S: Maintained +F: Documentation/devicetree/bindings/net/mediatek-bluetooth.txt +F: drivers/bluetooth/btmtkuart.c + +MEDIATEK BOARD LEVEL SHUTDOWN DRIVERS +M: Sean Wang +L: linux-pm@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/power/reset/mt6323-poweroff.txt +F: drivers/power/reset/mt6323-poweroff.c + +MEDIATEK CIR DRIVER +M: Sean Wang +S: Maintained +F: drivers/media/rc/mtk-cir.c + +MEDIATEK DMA DRIVER +M: Sean Wang +L: dmaengine@vger.kernel.org +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +L: linux-mediatek@lists.infradead.org (moderated for non-subscribers) +S: Maintained +F: Documentation/devicetree/bindings/dma/mtk-* +F: drivers/dma/mediatek/ + +MEDIATEK ETHERNET DRIVER +M: Felix Fietkau +M: John Crispin +M: Sean Wang +M: Mark Lee +L: netdev@vger.kernel.org +S: Maintained +F: drivers/net/ethernet/mediatek/ + +MEDIATEK I2C CONTROLLER DRIVER +M: Qii Wang +L: linux-i2c@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/i2c/i2c-mt65xx.txt +F: drivers/i2c/busses/i2c-mt65xx.c + +MEDIATEK IOMMU DRIVER +M: Yong Wu +L: iommu@lists.linux-foundation.org +L: linux-mediatek@lists.infradead.org (moderated for non-subscribers) +S: Supported +F: Documentation/devicetree/bindings/iommu/mediatek* +F: drivers/iommu/mtk_iommu* +F: include/dt-bindings/memory/mt*-port.h + +MEDIATEK JPEG DRIVER +M: Rick Chang +M: Bin Liu +S: Supported +F: Documentation/devicetree/bindings/media/mediatek-jpeg-decoder.txt +F: drivers/media/platform/mtk-jpeg/ + +MEDIATEK MDP DRIVER +M: Minghsiu Tsai +M: Houlong Wei +M: Andrew-CT Chen +S: Supported +F: Documentation/devicetree/bindings/media/mediatek-mdp.txt +F: drivers/media/platform/mtk-mdp/ +F: drivers/media/platform/mtk-vpu/ + +MEDIATEK MEDIA DRIVER +M: Tiffany Lin +M: Andrew-CT Chen +S: Supported +F: Documentation/devicetree/bindings/media/mediatek-vcodec.txt +F: Documentation/devicetree/bindings/media/mediatek-vpu.txt +F: drivers/media/platform/mtk-vcodec/ +F: drivers/media/platform/mtk-vpu/ + +MEDIATEK MMC/SD/SDIO DRIVER +M: Chaotian Jing +S: Maintained +F: Documentation/devicetree/bindings/mmc/mtk-sd.yaml +F: drivers/mmc/host/mtk-sd.c + +MEDIATEK MT76 WIRELESS LAN DRIVER +M: Felix Fietkau +M: Lorenzo Bianconi +R: Ryder Lee +L: linux-wireless@vger.kernel.org +S: Maintained +F: drivers/net/wireless/mediatek/mt76/ + +MEDIATEK MT7601U WIRELESS LAN DRIVER +M: Jakub Kicinski +L: linux-wireless@vger.kernel.org +S: Maintained +F: drivers/net/wireless/mediatek/mt7601u/ + +MEDIATEK MT7621 CLOCK DRIVER +M: Sergio Paracuellos +S: Maintained +F: Documentation/devicetree/bindings/clock/mediatek,mt7621-sysc.yaml +F: drivers/clk/ralink/clk-mt7621.c + +MEDIATEK MT7621/28/88 I2C DRIVER +M: Stefan Roese +L: linux-i2c@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/i2c/i2c-mt7621.txt +F: drivers/i2c/busses/i2c-mt7621.c + +MEDIATEK MT7621 PHY PCI DRIVER +M: Sergio Paracuellos +S: Maintained +F: Documentation/devicetree/bindings/phy/mediatek,mt7621-pci-phy.yaml +F: drivers/phy/ralink/phy-mt7621-pci.c + +MEDIATEK NAND CONTROLLER DRIVER +L: linux-mtd@lists.infradead.org +S: Orphan +F: Documentation/devicetree/bindings/mtd/mtk-nand.txt +F: drivers/mtd/nand/raw/mtk_* + +MEDIATEK PMIC LED DRIVER +M: Sean Wang +S: Maintained +F: Documentation/devicetree/bindings/leds/leds-mt6323.txt +F: drivers/leds/leds-mt6323.c + +MEDIATEK RANDOM NUMBER GENERATOR SUPPORT +M: Sean Wang +S: Maintained +F: drivers/char/hw_random/mtk-rng.c + +MEDIATEK SWITCH DRIVER +M: Sean Wang +M: Landen Chao +M: DENG Qingfang +L: netdev@vger.kernel.org +S: Maintained +F: drivers/net/dsa/mt7530.* +F: net/dsa/tag_mtk.c + +MEDIATEK USB3 DRD IP DRIVER +M: Chunfeng Yun +L: linux-usb@vger.kernel.org +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +L: linux-mediatek@lists.infradead.org (moderated for non-subscribers) +S: Maintained +F: Documentation/devicetree/bindings/usb/mediatek,* +F: drivers/usb/host/xhci-mtk* +F: drivers/usb/mtu3/ + +MEGACHIPS STDPXXXX-GE-B850V3-FW LVDS/DP++ BRIDGES +M: Peter Senna Tschudin +M: Martin Donnelly +M: Martyn Welch +S: Maintained +F: Documentation/devicetree/bindings/display/bridge/megachips-stdpxxxx-ge-b850v3-fw.txt +F: drivers/gpu/drm/bridge/megachips-stdpxxxx-ge-b850v3-fw.c + +MEGARAID SCSI/SAS DRIVERS +M: Kashyap Desai +M: Sumit Saxena +M: Shivasharan S +L: megaraidlinux.pdl@broadcom.com +L: linux-scsi@vger.kernel.org +S: Maintained +W: http://www.avagotech.com/support/ +F: Documentation/scsi/megaraid.rst +F: drivers/scsi/megaraid.* +F: drivers/scsi/megaraid/ + +MELEXIS MLX90614 DRIVER +M: Crt Mori +L: linux-iio@vger.kernel.org +S: Supported +W: http://www.melexis.com +F: drivers/iio/temperature/mlx90614.c + +MELEXIS MLX90632 DRIVER +M: Crt Mori +L: linux-iio@vger.kernel.org +S: Supported +W: http://www.melexis.com +F: drivers/iio/temperature/mlx90632.c + +MELFAS MIP4 TOUCHSCREEN DRIVER +M: Sangwon Jee +S: Supported +W: http://www.melfas.com +F: Documentation/devicetree/bindings/input/touchscreen/melfas_mip4.txt +F: drivers/input/touchscreen/melfas_mip4.c + +MELLANOX BLUEFIELD I2C DRIVER +M: Khalil Blaiech +L: linux-i2c@vger.kernel.org +S: Supported +F: Documentation/devicetree/bindings/i2c/mellanox,i2c-mlxbf.yaml +F: drivers/i2c/busses/i2c-mlxbf.c + +MELLANOX ETHERNET DRIVER (mlx4_en) +M: Tariq Toukan +L: netdev@vger.kernel.org +S: Supported +W: http://www.mellanox.com +Q: https://patchwork.kernel.org/project/netdevbpf/list/ +F: drivers/net/ethernet/mellanox/mlx4/en_* + +MELLANOX ETHERNET DRIVER (mlx5e) +M: Saeed Mahameed +L: netdev@vger.kernel.org +S: Supported +W: http://www.mellanox.com +Q: https://patchwork.kernel.org/project/netdevbpf/list/ +F: drivers/net/ethernet/mellanox/mlx5/core/en_* + +MELLANOX ETHERNET INNOVA DRIVERS +R: Boris Pismenny +L: netdev@vger.kernel.org +S: Supported +W: http://www.mellanox.com +Q: https://patchwork.kernel.org/project/netdevbpf/list/ +F: drivers/net/ethernet/mellanox/mlx5/core/accel/* +F: drivers/net/ethernet/mellanox/mlx5/core/en_accel/* +F: drivers/net/ethernet/mellanox/mlx5/core/fpga/* +F: include/linux/mlx5/mlx5_ifc_fpga.h + +MELLANOX ETHERNET SWITCH DRIVERS +M: Jiri Pirko +M: Ido Schimmel +L: netdev@vger.kernel.org +S: Supported +W: http://www.mellanox.com +Q: https://patchwork.kernel.org/project/netdevbpf/list/ +F: drivers/net/ethernet/mellanox/mlxsw/ +F: tools/testing/selftests/drivers/net/mlxsw/ + +MELLANOX FIRMWARE FLASH LIBRARY (mlxfw) +M: mlxsw@nvidia.com +L: netdev@vger.kernel.org +S: Supported +W: http://www.mellanox.com +Q: https://patchwork.kernel.org/project/netdevbpf/list/ +F: drivers/net/ethernet/mellanox/mlxfw/ + +MELLANOX HARDWARE PLATFORM SUPPORT +M: Hans de Goede +M: Mark Gross +M: Vadim Pasternak +L: platform-driver-x86@vger.kernel.org +S: Supported +F: Documentation/ABI/testing/sysfs-platform-mellanox-bootctl +F: drivers/platform/mellanox/ +F: include/linux/platform_data/mlxreg.h + +MELLANOX MLX4 core VPI driver +M: Tariq Toukan +L: netdev@vger.kernel.org +L: linux-rdma@vger.kernel.org +S: Supported +W: http://www.mellanox.com +Q: https://patchwork.kernel.org/project/netdevbpf/list/ +F: drivers/net/ethernet/mellanox/mlx4/ +F: include/linux/mlx4/ + +MELLANOX MLX4 IB driver +M: Yishai Hadas +L: linux-rdma@vger.kernel.org +S: Supported +W: http://www.mellanox.com +Q: http://patchwork.kernel.org/project/linux-rdma/list/ +F: drivers/infiniband/hw/mlx4/ +F: include/linux/mlx4/ +F: include/uapi/rdma/mlx4-abi.h + +MELLANOX MLX5 core VPI driver +M: Saeed Mahameed +M: Leon Romanovsky +L: netdev@vger.kernel.org +L: linux-rdma@vger.kernel.org +S: Supported +W: http://www.mellanox.com +Q: https://patchwork.kernel.org/project/netdevbpf/list/ +F: Documentation/networking/device_drivers/ethernet/mellanox/ +F: drivers/net/ethernet/mellanox/mlx5/core/ +F: include/linux/mlx5/ + +MELLANOX MLX5 IB driver +M: Leon Romanovsky +L: linux-rdma@vger.kernel.org +S: Supported +W: http://www.mellanox.com +Q: http://patchwork.kernel.org/project/linux-rdma/list/ +F: drivers/infiniband/hw/mlx5/ +F: include/linux/mlx5/ +F: include/uapi/rdma/mlx5-abi.h + +MELLANOX MLXCPLD I2C AND MUX DRIVER +M: Vadim Pasternak +M: Michael Shych +L: linux-i2c@vger.kernel.org +S: Supported +F: Documentation/i2c/busses/i2c-mlxcpld.rst +F: drivers/i2c/busses/i2c-mlxcpld.c +F: drivers/i2c/muxes/i2c-mux-mlxcpld.c + +MELLANOX MLXCPLD LED DRIVER +M: Vadim Pasternak +L: linux-leds@vger.kernel.org +S: Supported +F: Documentation/leds/leds-mlxcpld.rst +F: drivers/leds/leds-mlxcpld.c +F: drivers/leds/leds-mlxreg.c + +MELLANOX PLATFORM DRIVER +M: Vadim Pasternak +L: platform-driver-x86@vger.kernel.org +S: Supported +F: drivers/platform/x86/mlx-platform.c + +MEMBARRIER SUPPORT +M: Mathieu Desnoyers +M: "Paul E. McKenney" +L: linux-kernel@vger.kernel.org +S: Supported +F: arch/powerpc/include/asm/membarrier.h +F: include/uapi/linux/membarrier.h +F: kernel/sched/membarrier.c + +MEMBLOCK +M: Mike Rapoport +L: linux-mm@kvack.org +S: Maintained +F: Documentation/core-api/boot-time-mm.rst +F: include/linux/memblock.h +F: mm/memblock.c + +MEMORY CONTROLLER DRIVERS +M: Krzysztof Kozlowski +L: linux-kernel@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/krzk/linux-mem-ctrl.git +F: Documentation/devicetree/bindings/memory-controllers/ +F: drivers/memory/ +F: include/dt-bindings/memory/ +F: include/memory/ + +MEMORY FREQUENCY SCALING DRIVERS FOR NVIDIA TEGRA +M: Dmitry Osipenko +L: linux-pm@vger.kernel.org +L: linux-tegra@vger.kernel.org +T: git git://git.kernel.org/pub/scm/linux/kernel/git/chanwoo/linux.git +S: Maintained +F: drivers/devfreq/tegra30-devfreq.c + +MEMORY MANAGEMENT +M: Andrew Morton +L: linux-mm@kvack.org +S: Maintained +W: http://www.linux-mm.org +T: quilt https://ozlabs.org/~akpm/mmotm/ +T: quilt https://ozlabs.org/~akpm/mmots/ +T: git git://github.com/hnaz/linux-mm.git +F: include/linux/gfp.h +F: include/linux/memory_hotplug.h +F: include/linux/mm.h +F: include/linux/mmzone.h +F: include/linux/pagewalk.h +F: include/linux/vmalloc.h +F: mm/ +F: tools/testing/selftests/vm/ + +MEMORY TECHNOLOGY DEVICES (MTD) +M: Miquel Raynal +M: Richard Weinberger +M: Vignesh Raghavendra +L: linux-mtd@lists.infradead.org +S: Maintained +W: http://www.linux-mtd.infradead.org/ +Q: http://patchwork.ozlabs.org/project/linux-mtd/list/ +C: irc://irc.oftc.net/mtd +T: git git://git.kernel.org/pub/scm/linux/kernel/git/mtd/linux.git mtd/fixes +T: git git://git.kernel.org/pub/scm/linux/kernel/git/mtd/linux.git mtd/next +F: Documentation/devicetree/bindings/mtd/ +F: drivers/mtd/ +F: include/linux/mtd/ +F: include/uapi/mtd/ + +MEN A21 WATCHDOG DRIVER +M: Johannes Thumshirn +L: linux-watchdog@vger.kernel.org +S: Maintained +F: drivers/watchdog/mena21_wdt.c + +MEN CHAMELEON BUS (mcb) +M: Johannes Thumshirn +S: Maintained +F: Documentation/driver-api/men-chameleon-bus.rst +F: drivers/mcb/ +F: include/linux/mcb.h + +MEN F21BMC (Board Management Controller) +M: Andreas Werner +S: Supported +F: Documentation/hwmon/menf21bmc.rst +F: drivers/hwmon/menf21bmc_hwmon.c +F: drivers/leds/leds-menf21bmc.c +F: drivers/mfd/menf21bmc.c +F: drivers/watchdog/menf21bmc_wdt.c + +MEN Z069 WATCHDOG DRIVER +M: Johannes Thumshirn +L: linux-watchdog@vger.kernel.org +S: Maintained +F: drivers/watchdog/menz69_wdt.c + +MESON AO CEC DRIVER FOR AMLOGIC SOCS +M: Neil Armstrong +L: linux-media@vger.kernel.org +L: linux-amlogic@lists.infradead.org +S: Supported +W: http://linux-meson.com/ +T: git git://linuxtv.org/media_tree.git +F: Documentation/devicetree/bindings/media/amlogic,meson-gx-ao-cec.yaml +F: drivers/media/cec/platform/meson/ao-cec-g12a.c +F: drivers/media/cec/platform/meson/ao-cec.c + +MESON GE2D DRIVER FOR AMLOGIC SOCS +M: Neil Armstrong +L: linux-media@vger.kernel.org +L: linux-amlogic@lists.infradead.org +S: Supported +T: git git://linuxtv.org/media_tree.git +F: Documentation/devicetree/bindings/media/amlogic,axg-ge2d.yaml +F: drivers/media/platform/meson/ge2d/ + +MESON NAND CONTROLLER DRIVER FOR AMLOGIC SOCS +M: Liang Yang +L: linux-mtd@lists.infradead.org +S: Maintained +F: Documentation/devicetree/bindings/mtd/amlogic,meson-nand.txt +F: drivers/mtd/nand/raw/meson_* + +MESON VIDEO DECODER DRIVER FOR AMLOGIC SOCS +M: Neil Armstrong +L: linux-media@vger.kernel.org +L: linux-amlogic@lists.infradead.org +S: Supported +T: git git://linuxtv.org/media_tree.git +F: Documentation/devicetree/bindings/media/amlogic,gx-vdec.yaml +F: drivers/staging/media/meson/vdec/ + +METHODE UDPU SUPPORT +M: Vladimir Vid +S: Maintained +F: arch/arm64/boot/dts/marvell/armada-3720-uDPU.dts + +MHI BUS +M: Manivannan Sadhasivam +M: Hemant Kumar +L: linux-arm-msm@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/mani/mhi.git +F: Documentation/ABI/stable/sysfs-bus-mhi +F: Documentation/mhi/ +F: drivers/bus/mhi/ +F: include/linux/mhi.h + +MICROBLAZE ARCHITECTURE +M: Michal Simek +S: Supported +W: http://www.monstr.eu/fdt/ +T: git git://git.monstr.eu/linux-2.6-microblaze.git +F: arch/microblaze/ + +MICROCHIP AT91 DMA DRIVERS +M: Ludovic Desroches +M: Tudor Ambarus +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +L: dmaengine@vger.kernel.org +S: Supported +F: Documentation/devicetree/bindings/dma/atmel-dma.txt +F: drivers/dma/at_hdmac.c +F: drivers/dma/at_hdmac_regs.h +F: drivers/dma/at_xdmac.c +F: include/dt-bindings/dma/at91.h + +MICROCHIP AT91 SERIAL DRIVER +M: Richard Genoud +S: Maintained +F: Documentation/devicetree/bindings/mfd/atmel-usart.txt +F: drivers/tty/serial/atmel_serial.c +F: drivers/tty/serial/atmel_serial.h + +MICROCHIP AT91 USART MFD DRIVER +M: Radu Pirea +L: linux-kernel@vger.kernel.org +S: Supported +F: Documentation/devicetree/bindings/mfd/atmel-usart.txt +F: drivers/mfd/at91-usart.c +F: include/dt-bindings/mfd/at91-usart.h + +MICROCHIP AT91 USART SPI DRIVER +M: Radu Pirea +L: linux-spi@vger.kernel.org +S: Supported +F: Documentation/devicetree/bindings/mfd/atmel-usart.txt +F: drivers/spi/spi-at91-usart.c + +MICROCHIP AUDIO ASOC DRIVERS +M: Codrin Ciubotariu +L: alsa-devel@alsa-project.org (moderated for non-subscribers) +S: Supported +F: sound/soc/atmel + +MICROCHIP ECC DRIVER +M: Tudor Ambarus +L: linux-crypto@vger.kernel.org +S: Maintained +F: drivers/crypto/atmel-ecc.* + +MICROCHIP I2C DRIVER +M: Codrin Ciubotariu +L: linux-i2c@vger.kernel.org +S: Supported +F: drivers/i2c/busses/i2c-at91-*.c +F: drivers/i2c/busses/i2c-at91.h + +MICROCHIP ISC DRIVER +M: Eugen Hristev +L: linux-media@vger.kernel.org +S: Supported +F: Documentation/devicetree/bindings/media/atmel,isc.yaml +F: Documentation/devicetree/bindings/media/microchip,xisc.yaml +F: drivers/media/platform/atmel/atmel-isc-base.c +F: drivers/media/platform/atmel/atmel-isc-regs.h +F: drivers/media/platform/atmel/atmel-isc.h +F: drivers/media/platform/atmel/atmel-sama5d2-isc.c +F: drivers/media/platform/atmel/atmel-sama7g5-isc.c +F: include/linux/atmel-isc-media.h + +MICROCHIP ISI DRIVER +M: Eugen Hristev +L: linux-media@vger.kernel.org +S: Supported +F: drivers/media/platform/atmel/atmel-isi.c +F: drivers/media/platform/atmel/atmel-isi.h + +MICROCHIP KSZ SERIES ETHERNET SWITCH DRIVER +M: Woojung Huh +M: UNGLinuxDriver@microchip.com +L: netdev@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/net/dsa/microchip,ksz.yaml +F: drivers/net/dsa/microchip/* +F: include/linux/platform_data/microchip-ksz.h +F: net/dsa/tag_ksz.c + +MICROCHIP LAN743X ETHERNET DRIVER +M: Bryan Whitehead +M: UNGLinuxDriver@microchip.com +L: netdev@vger.kernel.org +S: Maintained +F: drivers/net/ethernet/microchip/lan743x_* + +MICROCHIP LCDFB DRIVER +M: Nicolas Ferre +L: linux-fbdev@vger.kernel.org +S: Maintained +F: drivers/video/fbdev/atmel_lcdfb.c +F: include/video/atmel_lcdc.h + +MICROCHIP MCP16502 PMIC DRIVER +M: Claudiu Beznea +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Supported +F: Documentation/devicetree/bindings/regulator/mcp16502-regulator.txt +F: drivers/regulator/mcp16502.c + +MICROCHIP MCP3911 ADC DRIVER +M: Marcus Folkesson +M: Kent Gustavsson +L: linux-iio@vger.kernel.org +S: Supported +F: Documentation/devicetree/bindings/iio/adc/microchip,mcp3911.yaml +F: drivers/iio/adc/mcp3911.c + +MICROCHIP MMC/SD/SDIO MCI DRIVER +M: Ludovic Desroches +S: Maintained +F: drivers/mmc/host/atmel-mci.c + +MICROCHIP NAND DRIVER +M: Tudor Ambarus +L: linux-mtd@lists.infradead.org +S: Supported +F: Documentation/devicetree/bindings/mtd/atmel-nand.txt +F: drivers/mtd/nand/raw/atmel/* + +MICROCHIP PWM DRIVER +M: Claudiu Beznea +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +L: linux-pwm@vger.kernel.org +S: Supported +F: Documentation/devicetree/bindings/pwm/atmel-pwm.txt +F: drivers/pwm/pwm-atmel.c + +MICROCHIP SAMA5D2-COMPATIBLE ADC DRIVER +M: Eugen Hristev +L: linux-iio@vger.kernel.org +S: Supported +F: Documentation/devicetree/bindings/iio/adc/atmel,sama5d2-adc.yaml +F: drivers/iio/adc/at91-sama5d2_adc.c +F: include/dt-bindings/iio/adc/at91-sama5d2_adc.h + +MICROCHIP SAMA5D2-COMPATIBLE SHUTDOWN CONTROLLER +M: Claudiu Beznea +S: Supported +F: drivers/power/reset/at91-sama5d2_shdwc.c + +MICROCHIP SPI DRIVER +M: Tudor Ambarus +S: Supported +F: drivers/spi/spi-atmel.* + +MICROCHIP SSC DRIVER +M: Codrin Ciubotariu +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Supported +F: drivers/misc/atmel-ssc.c +F: include/linux/atmel-ssc.h + +MICROCHIP USB251XB DRIVER +M: Richard Leitner +L: linux-usb@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/usb/usb251xb.txt +F: drivers/usb/misc/usb251xb.c + +MICROCHIP USBA UDC DRIVER +M: Cristian Birsan +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Supported +F: drivers/usb/gadget/udc/atmel_usba_udc.* + +MICROCHIP WILC1000 WIFI DRIVER +M: Ajay Singh +M: Claudiu Beznea +L: linux-wireless@vger.kernel.org +S: Supported +F: drivers/net/wireless/microchip/wilc1000/ + +MICROSEMI MIPS SOCS +M: Alexandre Belloni +M: UNGLinuxDriver@microchip.com +L: linux-mips@vger.kernel.org +S: Supported +F: Documentation/devicetree/bindings/mips/mscc.txt +F: Documentation/devicetree/bindings/power/reset/ocelot-reset.txt +F: arch/mips/boot/dts/mscc/ +F: arch/mips/configs/generic/board-ocelot.config +F: arch/mips/generic/board-ocelot.c + +MICROSEMI SMART ARRAY SMARTPQI DRIVER (smartpqi) +M: Don Brace +L: storagedev@microchip.com +L: linux-scsi@vger.kernel.org +S: Supported +F: Documentation/scsi/smartpqi.rst +F: drivers/scsi/smartpqi/Kconfig +F: drivers/scsi/smartpqi/Makefile +F: drivers/scsi/smartpqi/smartpqi*.[ch] +F: include/linux/cciss*.h +F: include/uapi/linux/cciss*.h + +MICROSOFT SURFACE BATTERY AND AC DRIVERS +M: Maximilian Luz +L: linux-pm@vger.kernel.org +L: platform-driver-x86@vger.kernel.org +S: Maintained +F: drivers/power/supply/surface_battery.c +F: drivers/power/supply/surface_charger.c + +MICROSOFT SURFACE DTX DRIVER +M: Maximilian Luz +L: platform-driver-x86@vger.kernel.org +S: Maintained +F: Documentation/driver-api/surface_aggregator/clients/dtx.rst +F: drivers/platform/surface/surface_dtx.c +F: include/uapi/linux/surface_aggregator/dtx.h + +MICROSOFT SURFACE GPE LID SUPPORT DRIVER +M: Maximilian Luz +L: platform-driver-x86@vger.kernel.org +S: Maintained +F: drivers/platform/surface/surface_gpe.c + +MICROSOFT SURFACE HARDWARE PLATFORM SUPPORT +M: Hans de Goede +M: Mark Gross +M: Maximilian Luz +L: platform-driver-x86@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/pdx86/platform-drivers-x86.git +F: drivers/platform/surface/ + +MICROSOFT SURFACE HID TRANSPORT DRIVER +M: Maximilian Luz +L: linux-input@vger.kernel.org +L: platform-driver-x86@vger.kernel.org +S: Maintained +F: drivers/hid/surface-hid/ + +MICROSOFT SURFACE HOT-PLUG DRIVER +M: Maximilian Luz +L: platform-driver-x86@vger.kernel.org +S: Maintained +F: drivers/platform/surface/surface_hotplug.c + +MICROSOFT SURFACE PLATFORM PROFILE DRIVER +M: Maximilian Luz +L: platform-driver-x86@vger.kernel.org +S: Maintained +F: drivers/platform/surface/surface_platform_profile.c + +MICROSOFT SURFACE PRO 3 BUTTON DRIVER +M: Chen Yu +L: platform-driver-x86@vger.kernel.org +S: Supported +F: drivers/platform/surface/surfacepro3_button.c + +MICROSOFT SURFACE SYSTEM AGGREGATOR SUBSYSTEM +M: Maximilian Luz +L: platform-driver-x86@vger.kernel.org +S: Maintained +W: https://github.com/linux-surface/surface-aggregator-module +C: irc://irc.libera.chat/linux-surface +F: Documentation/driver-api/surface_aggregator/ +F: drivers/platform/surface/aggregator/ +F: drivers/platform/surface/surface_acpi_notify.c +F: drivers/platform/surface/surface_aggregator_cdev.c +F: drivers/platform/surface/surface_aggregator_registry.c +F: include/linux/surface_acpi_notify.h +F: include/linux/surface_aggregator/ +F: include/uapi/linux/surface_aggregator/ + +MICROTEK X6 SCANNER +M: Oliver Neukum +S: Maintained +F: drivers/usb/image/microtek.* + +MIKROTIK CRS3XX 98DX3236 BOARD SUPPORT +M: Luka Kovacic +M: Luka Perkov +S: Maintained +F: arch/arm/boot/dts/armada-xp-crs305-1g-4s-bit.dts +F: arch/arm/boot/dts/armada-xp-crs305-1g-4s.dts +F: arch/arm/boot/dts/armada-xp-crs326-24g-2s-bit.dts +F: arch/arm/boot/dts/armada-xp-crs326-24g-2s.dts +F: arch/arm/boot/dts/armada-xp-crs328-4c-20s-4s-bit.dts +F: arch/arm/boot/dts/armada-xp-crs328-4c-20s-4s.dts + +MIPI CCS, SMIA AND SMIA++ IMAGE SENSOR DRIVER +M: Sakari Ailus +L: linux-media@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/media/i2c/mipi-ccs.yaml +F: Documentation/driver-api/media/drivers/ccs/ +F: Documentation/userspace-api/media/drivers/ccs.rst +F: drivers/media/i2c/ccs-pll.c +F: drivers/media/i2c/ccs-pll.h +F: drivers/media/i2c/ccs/ +F: include/uapi/linux/ccs.h +F: include/uapi/linux/smiapp.h + +MIPS +M: Thomas Bogendoerfer +L: linux-mips@vger.kernel.org +S: Maintained +W: http://www.linux-mips.org/ +Q: https://patchwork.kernel.org/project/linux-mips/list/ +T: git git://git.kernel.org/pub/scm/linux/kernel/git/mips/linux.git +F: Documentation/devicetree/bindings/mips/ +F: Documentation/mips/ +F: arch/mips/ +F: drivers/platform/mips/ + +MIPS BOSTON DEVELOPMENT BOARD +M: Paul Burton +L: linux-mips@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/clock/img,boston-clock.txt +F: arch/mips/boot/dts/img/boston.dts +F: arch/mips/configs/generic/board-boston.config +F: drivers/clk/imgtec/clk-boston.c +F: include/dt-bindings/clock/boston-clock.h + +MIPS CORE DRIVERS +M: Thomas Bogendoerfer +M: Serge Semin +L: linux-mips@vger.kernel.org +S: Supported +F: drivers/bus/mips_cdmm.c +F: drivers/clocksource/mips-gic-timer.c +F: drivers/cpuidle/cpuidle-cps.c +F: drivers/irqchip/irq-mips-cpu.c +F: drivers/irqchip/irq-mips-gic.c + +MIPS GENERIC PLATFORM +M: Paul Burton +L: linux-mips@vger.kernel.org +S: Supported +F: Documentation/devicetree/bindings/power/mti,mips-cpc.yaml +F: arch/mips/generic/ +F: arch/mips/tools/generic-board-config.sh + +MIPS RINT INSTRUCTION EMULATION +M: Aleksandar Markovic +L: linux-mips@vger.kernel.org +S: Supported +F: arch/mips/math-emu/dp_rint.c +F: arch/mips/math-emu/sp_rint.c + +MIPS/LOONGSON1 ARCHITECTURE +M: Keguang Zhang +L: linux-mips@vger.kernel.org +S: Maintained +F: arch/mips/include/asm/mach-loongson32/ +F: arch/mips/loongson32/ +F: drivers/*/*/*loongson1* +F: drivers/*/*loongson1* + +MIPS/LOONGSON2EF ARCHITECTURE +M: Jiaxun Yang +L: linux-mips@vger.kernel.org +S: Maintained +F: arch/mips/include/asm/mach-loongson2ef/ +F: arch/mips/loongson2ef/ +F: drivers/cpufreq/loongson2_cpufreq.c + +MIPS/LOONGSON64 ARCHITECTURE +M: Huacai Chen +M: Jiaxun Yang +L: linux-mips@vger.kernel.org +S: Maintained +F: arch/mips/include/asm/mach-loongson64/ +F: arch/mips/loongson64/ +F: drivers/irqchip/irq-loongson* +F: drivers/platform/mips/cpu_hwmon.c + +MIROSOUND PCM20 FM RADIO RECEIVER DRIVER +M: Hans Verkuil +L: linux-media@vger.kernel.org +S: Odd Fixes +W: https://linuxtv.org +T: git git://linuxtv.org/media_tree.git +F: drivers/media/radio/radio-miropcm20* + +MMP SUPPORT +R: Lubomir Rintel +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Odd Fixes +T: git git://git.kernel.org/pub/scm/linux/kernel/git/lkundrak/linux-mmp.git +F: arch/arm/boot/dts/mmp* +F: arch/arm/mach-mmp/ +F: include/linux/soc/mmp/ + +MMP USB PHY DRIVERS +R: Lubomir Rintel +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +F: drivers/phy/marvell/phy-mmp3-usb.c +F: drivers/phy/marvell/phy-pxa-usb.c + +MMU GATHER AND TLB INVALIDATION +M: Will Deacon +M: "Aneesh Kumar K.V" +M: Andrew Morton +M: Nick Piggin +M: Peter Zijlstra +L: linux-arch@vger.kernel.org +L: linux-mm@kvack.org +S: Maintained +F: arch/*/include/asm/tlb.h +F: include/asm-generic/tlb.h +F: mm/mmu_gather.c + +MN88472 MEDIA DRIVER +M: Antti Palosaari +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +W: http://palosaari.fi/linux/ +Q: http://patchwork.linuxtv.org/project/linux-media/list/ +F: drivers/media/dvb-frontends/mn88472* + +MN88473 MEDIA DRIVER +M: Antti Palosaari +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +W: http://palosaari.fi/linux/ +Q: http://patchwork.linuxtv.org/project/linux-media/list/ +F: drivers/media/dvb-frontends/mn88473* + +MODULE SUPPORT +M: Luis Chamberlain +M: Jessica Yu +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/jeyu/linux.git modules-next +F: include/linux/module.h +F: kernel/module.c + +MONOLITHIC POWER SYSTEM PMIC DRIVER +M: Saravanan Sekar +S: Maintained +F: Documentation/devicetree/bindings/mfd/mps,mp2629.yaml +F: Documentation/devicetree/bindings/regulator/mps,mp*.yaml +F: drivers/iio/adc/mp2629_adc.c +F: drivers/mfd/mp2629.c +F: drivers/power/supply/mp2629_charger.c +F: drivers/regulator/mp5416.c +F: drivers/regulator/mpq7920.c +F: drivers/regulator/mpq7920.h +F: include/linux/mfd/mp2629.h + +MOTION EYE VAIO PICTUREBOOK CAMERA DRIVER +S: Orphan +W: http://popies.net/meye/ +F: Documentation/userspace-api/media/drivers/meye* +F: drivers/media/pci/meye/ +F: include/uapi/linux/meye.h + +MOTORCOMM PHY DRIVER +M: Peter Geis +L: netdev@vger.kernel.org +S: Maintained +F: drivers/net/phy/motorcomm.c + +MOXA SMARTIO/INDUSTIO/INTELLIO SERIAL CARD +M: Jiri Slaby +S: Maintained +F: Documentation/driver-api/serial/moxa-smartio.rst +F: drivers/tty/mxser.* + +MR800 AVERMEDIA USB FM RADIO DRIVER +M: Alexey Klimov +L: linux-media@vger.kernel.org +S: Maintained +T: git git://linuxtv.org/media_tree.git +F: drivers/media/radio/radio-mr800.c + +MRF24J40 IEEE 802.15.4 RADIO DRIVER +M: Alan Ott +L: linux-wpan@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/net/ieee802154/mrf24j40.txt +F: drivers/net/ieee802154/mrf24j40.c + +MSI LAPTOP SUPPORT +M: "Lee, Chun-Yi" +L: platform-driver-x86@vger.kernel.org +S: Maintained +F: drivers/platform/x86/msi-laptop.c + +MSI WMI SUPPORT +L: platform-driver-x86@vger.kernel.org +S: Orphan +F: drivers/platform/x86/msi-wmi.c + +MSI001 MEDIA DRIVER +M: Antti Palosaari +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +W: http://palosaari.fi/linux/ +Q: http://patchwork.linuxtv.org/project/linux-media/list/ +T: git git://linuxtv.org/anttip/media_tree.git +F: drivers/media/tuners/msi001* + +MSI2500 MEDIA DRIVER +M: Antti Palosaari +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +W: http://palosaari.fi/linux/ +Q: http://patchwork.linuxtv.org/project/linux-media/list/ +T: git git://linuxtv.org/anttip/media_tree.git +F: drivers/media/usb/msi2500/ + +MSTAR INTERRUPT CONTROLLER DRIVER +M: Mark-PK Tsai +M: Daniel Palmer +S: Maintained +F: Documentation/devicetree/bindings/interrupt-controller/mstar,mst-intc.yaml +F: drivers/irqchip/irq-mst-intc.c + +MSYSTEMS DISKONCHIP G3 MTD DRIVER +M: Robert Jarzmik +L: linux-mtd@lists.infradead.org +S: Maintained +F: drivers/mtd/devices/docg3* + +MT9M032 APTINA SENSOR DRIVER +M: Laurent Pinchart +L: linux-media@vger.kernel.org +S: Maintained +T: git git://linuxtv.org/media_tree.git +F: drivers/media/i2c/mt9m032.c +F: include/media/i2c/mt9m032.h + +MT9P031 APTINA CAMERA SENSOR +M: Laurent Pinchart +L: linux-media@vger.kernel.org +S: Maintained +T: git git://linuxtv.org/media_tree.git +F: drivers/media/i2c/mt9p031.c +F: include/media/i2c/mt9p031.h + +MT9T001 APTINA CAMERA SENSOR +M: Laurent Pinchart +L: linux-media@vger.kernel.org +S: Maintained +T: git git://linuxtv.org/media_tree.git +F: drivers/media/i2c/mt9t001.c +F: include/media/i2c/mt9t001.h + +MT9T112 APTINA CAMERA SENSOR +M: Jacopo Mondi +L: linux-media@vger.kernel.org +S: Odd Fixes +T: git git://linuxtv.org/media_tree.git +F: drivers/media/i2c/mt9t112.c +F: include/media/i2c/mt9t112.h + +MT9V032 APTINA CAMERA SENSOR +M: Laurent Pinchart +L: linux-media@vger.kernel.org +S: Maintained +T: git git://linuxtv.org/media_tree.git +F: Documentation/devicetree/bindings/media/i2c/mt9v032.txt +F: drivers/media/i2c/mt9v032.c +F: include/media/i2c/mt9v032.h + +MT9V111 APTINA CAMERA SENSOR +M: Jacopo Mondi +L: linux-media@vger.kernel.org +S: Maintained +T: git git://linuxtv.org/media_tree.git +F: Documentation/devicetree/bindings/media/i2c/aptina,mt9v111.yaml +F: drivers/media/i2c/mt9v111.c + +MULTIFUNCTION DEVICES (MFD) +M: Lee Jones +S: Supported +T: git git://git.kernel.org/pub/scm/linux/kernel/git/lee/mfd.git +F: Documentation/devicetree/bindings/mfd/ +F: drivers/mfd/ +F: include/dt-bindings/mfd/ +F: include/linux/mfd/ + +MULTIMEDIA CARD (MMC) ETC. OVER SPI +S: Orphan +F: drivers/mmc/host/mmc_spi.c +F: include/linux/spi/mmc_spi.h + +MULTIMEDIA CARD (MMC), SECURE DIGITAL (SD) AND SDIO SUBSYSTEM +M: Ulf Hansson +L: linux-mmc@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/ulfh/mmc.git +F: Documentation/devicetree/bindings/mmc/ +F: drivers/mmc/ +F: include/linux/mmc/ +F: include/uapi/linux/mmc/ + +MULTIPLEXER SUBSYSTEM +M: Peter Rosin +S: Maintained +F: Documentation/ABI/testing/sysfs-class-mux* +F: Documentation/devicetree/bindings/mux/ +F: drivers/mux/ +F: include/dt-bindings/mux/ +F: include/linux/mux/ + +MUSB MULTIPOINT HIGH SPEED DUAL-ROLE CONTROLLER +M: Bin Liu +L: linux-usb@vger.kernel.org +S: Maintained +F: drivers/usb/musb/ + +MXL301RF MEDIA DRIVER +M: Akihiro Tsukada +L: linux-media@vger.kernel.org +S: Odd Fixes +F: drivers/media/tuners/mxl301rf* + +MXL5007T MEDIA DRIVER +M: Michael Krufky +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +W: http://github.com/mkrufky +Q: http://patchwork.linuxtv.org/project/linux-media/list/ +T: git git://linuxtv.org/mkrufky/tuners.git +F: drivers/media/tuners/mxl5007t.* + +MXSFB DRM DRIVER +M: Marek Vasut +M: Stefan Agner +L: dri-devel@lists.freedesktop.org +S: Supported +T: git git://anongit.freedesktop.org/drm/drm-misc +F: Documentation/devicetree/bindings/display/fsl,lcdif.yaml +F: drivers/gpu/drm/mxsfb/ + +MYLEX DAC960 PCI RAID Controller +M: Hannes Reinecke +L: linux-scsi@vger.kernel.org +S: Supported +F: drivers/scsi/myrb.* +F: drivers/scsi/myrs.* + +MYRICOM MYRI-10G 10GbE DRIVER (MYRI10GE) +M: Chris Lee +L: netdev@vger.kernel.org +S: Supported +W: https://www.cspi.com/ethernet-products/support/downloads/ +F: drivers/net/ethernet/myricom/myri10ge/ + +NAND FLASH SUBSYSTEM +M: Miquel Raynal +R: Richard Weinberger +L: linux-mtd@lists.infradead.org +S: Maintained +W: http://www.linux-mtd.infradead.org/ +Q: http://patchwork.ozlabs.org/project/linux-mtd/list/ +C: irc://irc.oftc.net/mtd +T: git git://git.kernel.org/pub/scm/linux/kernel/git/mtd/linux.git nand/next +F: drivers/mtd/nand/ +F: include/linux/mtd/*nand*.h + +NATIVE INSTRUMENTS USB SOUND INTERFACE DRIVER +M: Daniel Mack +L: alsa-devel@alsa-project.org (moderated for non-subscribers) +S: Maintained +W: http://www.native-instruments.com +F: sound/usb/caiaq/ + +NATSEMI ETHERNET DRIVER (DP8381x) +S: Orphan +F: drivers/net/ethernet/natsemi/natsemi.c + +NCR 5380 SCSI DRIVERS +M: Finn Thain +M: Michael Schmitz +L: linux-scsi@vger.kernel.org +S: Maintained +F: Documentation/scsi/g_NCR5380.rst +F: drivers/scsi/NCR5380.* +F: drivers/scsi/arm/cumana_1.c +F: drivers/scsi/arm/oak.c +F: drivers/scsi/atari_scsi.* +F: drivers/scsi/dmx3191d.c +F: drivers/scsi/g_NCR5380.* +F: drivers/scsi/mac_scsi.* +F: drivers/scsi/sun3_scsi.* +F: drivers/scsi/sun3_scsi_vme.c + +NCSI LIBRARY +M: Samuel Mendoza-Jonas +S: Maintained +F: net/ncsi/ + +NCT6775 HARDWARE MONITOR DRIVER +M: Guenter Roeck +L: linux-hwmon@vger.kernel.org +S: Maintained +F: Documentation/hwmon/nct6775.rst +F: drivers/hwmon/nct6775.c + +NETDEVSIM +M: Jakub Kicinski +S: Maintained +F: drivers/net/netdevsim/* + +NETEM NETWORK EMULATOR +M: Stephen Hemminger +L: netdev@vger.kernel.org +S: Maintained +F: net/sched/sch_netem.c + +NETERION 10GbE DRIVERS (s2io/vxge) +M: Jon Mason +L: netdev@vger.kernel.org +S: Supported +F: Documentation/networking/device_drivers/ethernet/neterion/s2io.rst +F: Documentation/networking/device_drivers/ethernet/neterion/vxge.rst +F: drivers/net/ethernet/neterion/ + +NETFILTER +M: Pablo Neira Ayuso +M: Jozsef Kadlecsik +M: Florian Westphal +L: netfilter-devel@vger.kernel.org +L: coreteam@netfilter.org +S: Maintained +W: http://www.netfilter.org/ +W: http://www.iptables.org/ +W: http://www.nftables.org/ +Q: http://patchwork.ozlabs.org/project/netfilter-devel/list/ +C: irc://irc.libera.chat/netfilter +T: git git://git.kernel.org/pub/scm/linux/kernel/git/pablo/nf.git +T: git git://git.kernel.org/pub/scm/linux/kernel/git/pablo/nf-next.git +F: include/linux/netfilter* +F: include/linux/netfilter/ +F: include/net/netfilter/ +F: include/uapi/linux/netfilter* +F: include/uapi/linux/netfilter/ +F: net/*/netfilter.c +F: net/*/netfilter/ +F: net/bridge/br_netfilter*.c +F: net/netfilter/ + +NETROM NETWORK LAYER +M: Ralf Baechle +L: linux-hams@vger.kernel.org +S: Maintained +W: http://www.linux-ax25.org/ +F: include/net/netrom.h +F: include/uapi/linux/netrom.h +F: net/netrom/ + +NETRONIX EMBEDDED CONTROLLER +M: Jonathan Neuschäfer +S: Maintained +F: Documentation/devicetree/bindings/mfd/netronix,ntxec.yaml +F: drivers/mfd/ntxec.c +F: drivers/pwm/pwm-ntxec.c +F: drivers/rtc/rtc-ntxec.c +F: include/linux/mfd/ntxec.h + +NETRONOME ETHERNET DRIVERS +M: Simon Horman +R: Jakub Kicinski +L: oss-drivers@corigine.com +S: Maintained +F: drivers/net/ethernet/netronome/ + +NETWORK BLOCK DEVICE (NBD) +M: Josef Bacik +L: linux-block@vger.kernel.org +L: nbd@other.debian.org +S: Maintained +F: Documentation/admin-guide/blockdev/nbd.rst +F: drivers/block/nbd.c +F: include/trace/events/nbd.h +F: include/uapi/linux/nbd.h + +NETWORK DROP MONITOR +M: Neil Horman +L: netdev@vger.kernel.org +S: Maintained +W: https://fedorahosted.org/dropwatch/ +F: include/uapi/linux/net_dropmon.h +F: net/core/drop_monitor.c + +NETWORKING DRIVERS +M: "David S. Miller" +M: Jakub Kicinski +L: netdev@vger.kernel.org +S: Maintained +Q: https://patchwork.kernel.org/project/netdevbpf/list/ +T: git git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net.git +T: git git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next.git +F: Documentation/devicetree/bindings/net/ +F: drivers/connector/ +F: drivers/net/ +F: include/linux/etherdevice.h +F: include/linux/fcdevice.h +F: include/linux/fddidevice.h +F: include/linux/hippidevice.h +F: include/linux/if_* +F: include/linux/inetdevice.h +F: include/linux/netdevice.h +F: include/uapi/linux/if_* +F: include/uapi/linux/netdevice.h + +NETWORKING DRIVERS (WIRELESS) +M: Kalle Valo +L: linux-wireless@vger.kernel.org +S: Maintained +Q: http://patchwork.kernel.org/project/linux-wireless/list/ +T: git git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/wireless-drivers.git +T: git git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/wireless-drivers-next.git +F: Documentation/devicetree/bindings/net/wireless/ +F: drivers/net/wireless/ + +NETWORKING [DSA] +M: Andrew Lunn +M: Vivien Didelot +M: Florian Fainelli +M: Vladimir Oltean +S: Maintained +F: Documentation/devicetree/bindings/net/dsa/ +F: drivers/net/dsa/ +F: include/linux/dsa/ +F: include/linux/platform_data/dsa.h +F: include/net/dsa.h +F: net/dsa/ + +NETWORKING [GENERAL] +M: "David S. Miller" +M: Jakub Kicinski +L: netdev@vger.kernel.org +S: Maintained +Q: https://patchwork.kernel.org/project/netdevbpf/list/ +B: mailto:netdev@vger.kernel.org +T: git git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net.git +T: git git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next.git +F: Documentation/networking/ +F: include/linux/in.h +F: include/linux/net.h +F: include/linux/netdevice.h +F: include/net/ +F: include/uapi/linux/in.h +F: include/uapi/linux/net.h +F: include/uapi/linux/net_namespace.h +F: include/uapi/linux/netdevice.h +F: lib/net_utils.c +F: lib/random32.c +F: net/ +F: tools/testing/selftests/net/ + +NETWORKING [IPSEC] +M: Steffen Klassert +M: Herbert Xu +M: "David S. Miller" +L: netdev@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/klassert/ipsec.git +T: git git://git.kernel.org/pub/scm/linux/kernel/git/klassert/ipsec-next.git +F: include/net/xfrm.h +F: include/uapi/linux/xfrm.h +F: net/ipv4/ah4.c +F: net/ipv4/esp4* +F: net/ipv4/ip_vti.c +F: net/ipv4/ipcomp.c +F: net/ipv4/xfrm* +F: net/ipv6/ah6.c +F: net/ipv6/esp6* +F: net/ipv6/ip6_vti.c +F: net/ipv6/ipcomp6.c +F: net/ipv6/xfrm* +F: net/key/ +F: net/xfrm/ +F: tools/testing/selftests/net/ipsec.c + +NETWORKING [IPv4/IPv6] +M: "David S. Miller" +M: Hideaki YOSHIFUJI +M: David Ahern +L: netdev@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net.git +F: arch/x86/net/* +F: include/net/ip* +F: net/ipv4/ +F: net/ipv6/ + +NETWORKING [LABELED] (NetLabel, Labeled IPsec, SECMARK) +M: Paul Moore +L: netdev@vger.kernel.org +L: linux-security-module@vger.kernel.org +S: Maintained +W: https://github.com/netlabel +F: Documentation/netlabel/ +F: include/net/calipso.h +F: include/net/cipso_ipv4.h +F: include/net/netlabel.h +F: include/uapi/linux/netfilter/xt_CONNSECMARK.h +F: include/uapi/linux/netfilter/xt_SECMARK.h +F: net/ipv4/cipso_ipv4.c +F: net/ipv6/calipso.c +F: net/netfilter/xt_CONNSECMARK.c +F: net/netfilter/xt_SECMARK.c +F: net/netlabel/ + +NETWORKING [MPTCP] +M: Mat Martineau +M: Matthieu Baerts +L: netdev@vger.kernel.org +L: mptcp@lists.linux.dev +S: Maintained +W: https://github.com/multipath-tcp/mptcp_net-next/wiki +B: https://github.com/multipath-tcp/mptcp_net-next/issues +F: Documentation/networking/mptcp-sysctl.rst +F: include/net/mptcp.h +F: include/trace/events/mptcp.h +F: include/uapi/linux/mptcp.h +F: net/mptcp/ +F: tools/testing/selftests/net/mptcp/ + +NETWORKING [TCP] +M: Eric Dumazet +L: netdev@vger.kernel.org +S: Maintained +F: include/linux/tcp.h +F: include/net/tcp.h +F: include/trace/events/tcp.h +F: include/uapi/linux/tcp.h +F: net/ipv4/syncookies.c +F: net/ipv4/tcp*.c +F: net/ipv6/syncookies.c +F: net/ipv6/tcp*.c + +NETWORKING [TLS] +M: Boris Pismenny +M: John Fastabend +M: Daniel Borkmann +M: Jakub Kicinski +L: netdev@vger.kernel.org +S: Maintained +F: include/net/tls.h +F: include/uapi/linux/tls.h +F: net/tls/* + +NETWORKING [WIRELESS] +L: linux-wireless@vger.kernel.org +Q: http://patchwork.kernel.org/project/linux-wireless/list/ + +NETXEN (1/10) GbE SUPPORT +M: Manish Chopra +M: Rahul Verma +M: GR-Linux-NIC-Dev@marvell.com +L: netdev@vger.kernel.org +S: Supported +F: drivers/net/ethernet/qlogic/netxen/ + +NET_FAILOVER MODULE +M: Sridhar Samudrala +L: netdev@vger.kernel.org +S: Supported +F: Documentation/networking/net_failover.rst +F: drivers/net/net_failover.c +F: include/net/net_failover.h + +NEXTHOP +M: David Ahern +L: netdev@vger.kernel.org +S: Maintained +F: include/net/netns/nexthop.h +F: include/net/nexthop.h +F: include/uapi/linux/nexthop.h +F: net/ipv4/nexthop.c + +NFC SUBSYSTEM +M: Krzysztof Kozlowski +L: linux-nfc@lists.01.org (subscribers-only) +L: netdev@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/net/nfc/ +F: drivers/nfc/ +F: include/linux/platform_data/nfcmrvl.h +F: include/net/nfc/ +F: include/uapi/linux/nfc.h +F: net/nfc/ + +NFC VIRTUAL NCI DEVICE DRIVER +M: Bongsu Jeon +L: netdev@vger.kernel.org +L: linux-nfc@lists.01.org (subscribers-only) +S: Supported +F: drivers/nfc/virtual_ncidev.c +F: tools/testing/selftests/nci/ + +NFS, SUNRPC, AND LOCKD CLIENTS +M: Trond Myklebust +M: Anna Schumaker +L: linux-nfs@vger.kernel.org +S: Maintained +W: http://client.linux-nfs.org +T: git git://git.linux-nfs.org/projects/trondmy/linux-nfs.git +F: fs/lockd/ +F: fs/nfs/ +F: fs/nfs_common/ +F: include/linux/lockd/ +F: include/linux/nfs* +F: include/linux/sunrpc/ +F: include/uapi/linux/nfs* +F: include/uapi/linux/sunrpc/ +F: net/sunrpc/ +F: Documentation/filesystems/nfs/ + +NILFS2 FILESYSTEM +M: Ryusuke Konishi +L: linux-nilfs@vger.kernel.org +S: Supported +W: https://nilfs.sourceforge.io/ +W: https://nilfs.osdn.jp/ +T: git git://github.com/konis/nilfs2.git +F: Documentation/filesystems/nilfs2.rst +F: fs/nilfs2/ +F: include/trace/events/nilfs2.h +F: include/uapi/linux/nilfs2_api.h +F: include/uapi/linux/nilfs2_ondisk.h + +NINJA SCSI-3 / NINJA SCSI-32Bi (16bit/CardBus) PCMCIA SCSI HOST ADAPTER DRIVER +M: YOKOTA Hiroshi +S: Maintained +W: http://www.netlab.is.tsukuba.ac.jp/~yokota/izumi/ninja/ +F: Documentation/scsi/NinjaSCSI.rst +F: drivers/scsi/pcmcia/nsp_* + +NINJA SCSI-32Bi/UDE PCI/CARDBUS SCSI HOST ADAPTER DRIVER +M: GOTO Masanori +M: YOKOTA Hiroshi +S: Maintained +W: http://www.netlab.is.tsukuba.ac.jp/~yokota/izumi/ninja/ +F: Documentation/scsi/NinjaSCSI.rst +F: drivers/scsi/nsp32* + +NIOS2 ARCHITECTURE +M: Dinh Nguyen +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/dinguyen/linux.git +F: arch/nios2/ + +NITRO ENCLAVES (NE) +M: Andra Paraschiv +M: Alexandru Vasile +M: Alexandru Ciobotaru +L: linux-kernel@vger.kernel.org +S: Supported +W: https://aws.amazon.com/ec2/nitro/nitro-enclaves/ +F: Documentation/virt/ne_overview.rst +F: drivers/virt/nitro_enclaves/ +F: include/linux/nitro_enclaves.h +F: include/uapi/linux/nitro_enclaves.h +F: samples/nitro_enclaves/ + +NOHZ, DYNTICKS SUPPORT +M: Frederic Weisbecker +M: Thomas Gleixner +M: Ingo Molnar +L: linux-kernel@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git timers/nohz +F: include/linux/sched/nohz.h +F: include/linux/tick.h +F: kernel/time/tick*.* + +NOKIA N900 CAMERA SUPPORT (ET8EK8 SENSOR, AD5820 FOCUS) +M: Pavel Machek +M: Sakari Ailus +L: linux-media@vger.kernel.org +S: Maintained +F: drivers/media/i2c/ad5820.c +F: drivers/media/i2c/et8ek8 + +NOKIA N900 POWER SUPPLY DRIVERS +R: Pali Rohár +F: drivers/power/supply/bq2415x_charger.c +F: drivers/power/supply/bq27xxx_battery.c +F: drivers/power/supply/bq27xxx_battery_i2c.c +F: drivers/power/supply/isp1704_charger.c +F: drivers/power/supply/rx51_battery.c +F: include/linux/power/bq2415x_charger.h +F: include/linux/power/bq27xxx_battery.h + +NOLIBC HEADER FILE +M: Willy Tarreau +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/wtarreau/nolibc.git +F: tools/include/nolibc/ + +NSDEPS +M: Matthias Maennich +S: Maintained +F: Documentation/core-api/symbol-namespaces.rst +F: scripts/nsdeps + +NTB AMD DRIVER +M: Sanjay R Mehta +M: Shyam Sundar S K +L: linux-ntb@googlegroups.com +S: Supported +F: drivers/ntb/hw/amd/ + +NTB DRIVER CORE +M: Jon Mason +M: Dave Jiang +M: Allen Hubbe +L: linux-ntb@googlegroups.com +S: Supported +W: https://github.com/jonmason/ntb/wiki +T: git git://github.com/jonmason/ntb.git +F: drivers/net/ntb_netdev.c +F: drivers/ntb/ +F: include/linux/ntb.h +F: include/linux/ntb_transport.h +F: tools/testing/selftests/ntb/ + +NTB IDT DRIVER +M: Serge Semin +L: linux-ntb@googlegroups.com +S: Supported +F: drivers/ntb/hw/idt/ + +NTB INTEL DRIVER +M: Dave Jiang +L: linux-ntb@googlegroups.com +S: Supported +W: https://github.com/davejiang/linux/wiki +T: git https://github.com/davejiang/linux.git +F: drivers/ntb/hw/intel/ + +NTFS FILESYSTEM +M: Anton Altaparmakov +L: linux-ntfs-dev@lists.sourceforge.net +S: Supported +W: http://www.tuxera.com/ +T: git git://git.kernel.org/pub/scm/linux/kernel/git/aia21/ntfs.git +F: Documentation/filesystems/ntfs.rst +F: fs/ntfs/ + +NTFS3 FILESYSTEM +M: Konstantin Komarov +L: ntfs3@lists.linux.dev +S: Supported +W: http://www.paragon-software.com/ +T: git https://github.com/Paragon-Software-Group/linux-ntfs3.git +F: Documentation/filesystems/ntfs3.rst +F: fs/ntfs3/ + +NUBUS SUBSYSTEM +M: Finn Thain +L: linux-m68k@lists.linux-m68k.org +S: Maintained +F: arch/*/include/asm/nubus.h +F: drivers/nubus/ +F: include/linux/nubus.h +F: include/uapi/linux/nubus.h + +NVIDIA (rivafb and nvidiafb) FRAMEBUFFER DRIVER +M: Antonino Daplas +L: linux-fbdev@vger.kernel.org +S: Maintained +F: drivers/video/fbdev/nvidia/ +F: drivers/video/fbdev/riva/ + +NVM EXPRESS DRIVER +M: Keith Busch +M: Jens Axboe +M: Christoph Hellwig +M: Sagi Grimberg +L: linux-nvme@lists.infradead.org +S: Supported +W: http://git.infradead.org/nvme.git +T: git://git.infradead.org/nvme.git +F: drivers/nvme/host/ +F: include/linux/nvme.h +F: include/uapi/linux/nvme_ioctl.h + +NVM EXPRESS FC TRANSPORT DRIVERS +M: James Smart +L: linux-nvme@lists.infradead.org +S: Supported +F: drivers/nvme/host/fc.c +F: drivers/nvme/target/fc.c +F: drivers/nvme/target/fcloop.c +F: include/linux/nvme-fc-driver.h +F: include/linux/nvme-fc.h + +NVM EXPRESS TARGET DRIVER +M: Christoph Hellwig +M: Sagi Grimberg +M: Chaitanya Kulkarni +L: linux-nvme@lists.infradead.org +S: Supported +W: http://git.infradead.org/nvme.git +T: git://git.infradead.org/nvme.git +F: drivers/nvme/target/ + +NVMEM FRAMEWORK +M: Srinivas Kandagatla +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/srini/nvmem.git +F: Documentation/ABI/stable/sysfs-bus-nvmem +F: Documentation/devicetree/bindings/nvmem/ +F: drivers/nvmem/ +F: include/linux/nvmem-consumer.h +F: include/linux/nvmem-provider.h + +NXP C45 TJA11XX PHY DRIVER +M: Radu Pirea +L: netdev@vger.kernel.org +S: Maintained +F: drivers/net/phy/nxp-c45-tja11xx.c + +NXP FSPI DRIVER +M: Ashish Kumar +R: Yogesh Gaur +L: linux-spi@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/spi/spi-nxp-fspi.txt +F: drivers/spi/spi-nxp-fspi.c + +NXP FXAS21002C DRIVER +M: Rui Miguel Silva +L: linux-iio@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/iio/gyroscope/nxp,fxas21002c.yaml +F: drivers/iio/gyro/fxas21002c.h +F: drivers/iio/gyro/fxas21002c_core.c +F: drivers/iio/gyro/fxas21002c_i2c.c +F: drivers/iio/gyro/fxas21002c_spi.c + +NXP i.MX CLOCK DRIVERS +M: Abel Vesa +L: linux-clk@vger.kernel.org +L: linux-imx@nxp.com +S: Maintained +F: drivers/clk/imx/ + +NXP i.MX 8MQ DCSS DRIVER +M: Laurentiu Palcu +R: Lucas Stach +L: dri-devel@lists.freedesktop.org +S: Maintained +F: Documentation/devicetree/bindings/display/imx/nxp,imx8mq-dcss.yaml +F: drivers/gpu/drm/imx/dcss/ + +NXP PF8100/PF8121A/PF8200 PMIC REGULATOR DEVICE DRIVER +M: Jagan Teki +S: Maintained +F: Documentation/devicetree/bindings/regulator/nxp,pf8x00-regulator.yaml +F: drivers/regulator/pf8x00-regulator.c + +NXP PTN5150A CC LOGIC AND EXTCON DRIVER +M: Krzysztof Kozlowski +L: linux-kernel@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/extcon/extcon-ptn5150.yaml +F: drivers/extcon/extcon-ptn5150.c + +NXP SGTL5000 DRIVER +M: Fabio Estevam +L: alsa-devel@alsa-project.org (moderated for non-subscribers) +S: Maintained +F: Documentation/devicetree/bindings/sound/sgtl5000.yaml +F: sound/soc/codecs/sgtl5000* + +NXP SJA1105 ETHERNET SWITCH DRIVER +M: Vladimir Oltean +L: linux-kernel@vger.kernel.org +S: Maintained +F: drivers/net/dsa/sja1105 +F: drivers/net/pcs/pcs-xpcs-nxp.c + +NXP TDA998X DRM DRIVER +M: Russell King +S: Maintained +T: git git://git.armlinux.org.uk/~rmk/linux-arm.git drm-tda998x-devel +T: git git://git.armlinux.org.uk/~rmk/linux-arm.git drm-tda998x-fixes +F: drivers/gpu/drm/i2c/tda998x_drv.c +F: include/drm/i2c/tda998x.h +F: include/dt-bindings/display/tda998x.h +K: "nxp,tda998x" + +NXP TFA9879 DRIVER +M: Peter Rosin +L: alsa-devel@alsa-project.org (moderated for non-subscribers) +S: Maintained +F: Documentation/devicetree/bindings/sound/tfa9879.txt +F: sound/soc/codecs/tfa9879* + +NXP/Goodix TFA989X (TFA1) DRIVER +M: Stephan Gerhold +L: alsa-devel@alsa-project.org (moderated for non-subscribers) +S: Maintained +F: Documentation/devicetree/bindings/sound/nxp,tfa989x.yaml +F: sound/soc/codecs/tfa989x.c + +NXP-NCI NFC DRIVER +R: Charles Gorand +L: linux-nfc@lists.01.org (subscribers-only) +S: Supported +F: drivers/nfc/nxp-nci + +NXP i.MX 8QXP/8QM JPEG V4L2 DRIVER +M: Mirela Rabulea +R: NXP Linux Team +L: linux-media@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/media/imx8-jpeg.yaml +F: drivers/media/platform/imx-jpeg + +NZXT-KRAKEN2 HARDWARE MONITORING DRIVER +M: Jonas Malaco +L: linux-hwmon@vger.kernel.org +S: Maintained +F: Documentation/hwmon/nzxt-kraken2.rst +F: drivers/hwmon/nzxt-kraken2.c + +OBJAGG +M: Jiri Pirko +L: netdev@vger.kernel.org +S: Supported +F: include/linux/objagg.h +F: lib/objagg.c +F: lib/test_objagg.c + +OBJTOOL +M: Josh Poimboeuf +M: Peter Zijlstra +S: Supported +F: tools/objtool/ +F: include/linux/objtool.h + +OCELOT ETHERNET SWITCH DRIVER +M: Vladimir Oltean +M: Claudiu Manoil +M: Alexandre Belloni +M: UNGLinuxDriver@microchip.com +L: netdev@vger.kernel.org +S: Supported +F: drivers/net/dsa/ocelot/* +F: drivers/net/ethernet/mscc/ +F: include/soc/mscc/ocelot* +F: net/dsa/tag_ocelot.c +F: net/dsa/tag_ocelot_8021q.c +F: tools/testing/selftests/drivers/net/ocelot/* + +OCXL (Open Coherent Accelerator Processor Interface OpenCAPI) DRIVER +M: Frederic Barrat +M: Andrew Donnellan +L: linuxppc-dev@lists.ozlabs.org +S: Supported +F: Documentation/userspace-api/accelerators/ocxl.rst +F: arch/powerpc/include/asm/pnv-ocxl.h +F: arch/powerpc/platforms/powernv/ocxl.c +F: drivers/misc/ocxl/ +F: include/misc/ocxl* +F: include/uapi/misc/ocxl.h + +OMAP AUDIO SUPPORT +M: Peter Ujfalusi +M: Jarkko Nikula +L: alsa-devel@alsa-project.org (moderated for non-subscribers) +L: linux-omap@vger.kernel.org +S: Maintained +F: sound/soc/ti/n810.c +F: sound/soc/ti/omap* +F: sound/soc/ti/rx51.c +F: sound/soc/ti/sdma-pcm.* + +OMAP CLOCK FRAMEWORK SUPPORT +M: Paul Walmsley +L: linux-omap@vger.kernel.org +S: Maintained +F: arch/arm/*omap*/*clock* + +OMAP DEVICE TREE SUPPORT +M: Benoît Cousson +M: Tony Lindgren +L: linux-omap@vger.kernel.org +L: devicetree@vger.kernel.org +S: Maintained +F: arch/arm/boot/dts/*am3* +F: arch/arm/boot/dts/*am4* +F: arch/arm/boot/dts/*am5* +F: arch/arm/boot/dts/*dra7* +F: arch/arm/boot/dts/*omap* +F: arch/arm/boot/dts/logicpd-som-lv* +F: arch/arm/boot/dts/logicpd-torpedo* + +OMAP DISPLAY SUBSYSTEM and FRAMEBUFFER SUPPORT (DSS2) +L: linux-omap@vger.kernel.org +L: linux-fbdev@vger.kernel.org +S: Orphan +F: Documentation/arm/omap/dss.rst +F: drivers/video/fbdev/omap2/ + +OMAP FRAMEBUFFER SUPPORT +L: linux-fbdev@vger.kernel.org +L: linux-omap@vger.kernel.org +S: Orphan +F: drivers/video/fbdev/omap/ + +OMAP GENERAL PURPOSE MEMORY CONTROLLER SUPPORT +M: Roger Quadros +M: Tony Lindgren +L: linux-omap@vger.kernel.org +S: Maintained +F: arch/arm/mach-omap2/*gpmc* +F: drivers/memory/omap-gpmc.c + +OMAP GPIO DRIVER +M: Grygorii Strashko +M: Santosh Shilimkar +M: Kevin Hilman +L: linux-omap@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/gpio/ti,omap-gpio.yaml +F: drivers/gpio/gpio-omap.c + +OMAP HARDWARE SPINLOCK SUPPORT +M: Ohad Ben-Cohen +L: linux-omap@vger.kernel.org +S: Maintained +F: drivers/hwspinlock/omap_hwspinlock.c + +OMAP HS MMC SUPPORT +L: linux-mmc@vger.kernel.org +L: linux-omap@vger.kernel.org +S: Orphan +F: drivers/mmc/host/omap_hsmmc.c + +OMAP HWMOD DATA +M: Paul Walmsley +L: linux-omap@vger.kernel.org +S: Maintained +F: arch/arm/mach-omap2/omap_hwmod*data* + +OMAP HWMOD SUPPORT +M: Benoît Cousson +M: Paul Walmsley +L: linux-omap@vger.kernel.org +S: Maintained +F: arch/arm/mach-omap2/omap_hwmod.* + +OMAP I2C DRIVER +M: Vignesh R +L: linux-omap@vger.kernel.org +L: linux-i2c@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/i2c/ti,omap4-i2c.yaml +F: drivers/i2c/busses/i2c-omap.c + +OMAP IMAGING SUBSYSTEM (OMAP3 ISP and OMAP4 ISS) +M: Laurent Pinchart +L: linux-media@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/media/ti,omap3isp.txt +F: drivers/media/platform/omap3isp/ +F: drivers/staging/media/omap4iss/ + +OMAP MMC SUPPORT +M: Aaro Koskinen +L: linux-omap@vger.kernel.org +S: Odd Fixes +F: drivers/mmc/host/omap.c + +OMAP POWER MANAGEMENT SUPPORT +M: Kevin Hilman +L: linux-omap@vger.kernel.org +S: Maintained +F: arch/arm/*omap*/*pm* +F: drivers/cpufreq/omap-cpufreq.c + +OMAP POWERDOMAIN SOC ADAPTATION LAYER SUPPORT +M: Rajendra Nayak +M: Paul Walmsley +L: linux-omap@vger.kernel.org +S: Maintained +F: arch/arm/mach-omap2/prm* + +OMAP RANDOM NUMBER GENERATOR SUPPORT +M: Deepak Saxena +S: Maintained +F: drivers/char/hw_random/omap-rng.c + +OMAP USB SUPPORT +L: linux-usb@vger.kernel.org +L: linux-omap@vger.kernel.org +S: Orphan +F: arch/arm/*omap*/usb* +F: drivers/usb/*/*omap* + +OMAP/NEWFLOW NANOBONE MACHINE SUPPORT +M: Mark Jackson +L: linux-omap@vger.kernel.org +S: Maintained +F: arch/arm/boot/dts/am335x-nano.dts + +OMAP1 SUPPORT +M: Aaro Koskinen +M: Tony Lindgren +L: linux-omap@vger.kernel.org +S: Maintained +Q: http://patchwork.kernel.org/project/linux-omap/list/ +T: git git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap.git +F: arch/arm/configs/omap1_defconfig +F: arch/arm/mach-omap1/ +F: arch/arm/plat-omap/ +F: drivers/i2c/busses/i2c-omap.c +F: include/linux/platform_data/ams-delta-fiq.h +F: include/linux/platform_data/i2c-omap.h + +OMAP2+ SUPPORT +M: Tony Lindgren +L: linux-omap@vger.kernel.org +S: Maintained +W: http://www.muru.com/linux/omap/ +W: http://linux.omap.com/ +Q: http://patchwork.kernel.org/project/linux-omap/list/ +T: git git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap.git +F: arch/arm/configs/omap2plus_defconfig +F: arch/arm/mach-omap2/ +F: arch/arm/plat-omap/ +F: drivers/bus/ti-sysc.c +F: drivers/i2c/busses/i2c-omap.c +F: drivers/irqchip/irq-omap-intc.c +F: drivers/mfd/*omap*.c +F: drivers/mfd/menelaus.c +F: drivers/mfd/palmas.c +F: drivers/mfd/tps65217.c +F: drivers/mfd/tps65218.c +F: drivers/mfd/tps65910.c +F: drivers/mfd/twl-core.[ch] +F: drivers/mfd/twl4030*.c +F: drivers/mfd/twl6030*.c +F: drivers/mfd/twl6040*.c +F: drivers/regulator/palmas-regulator*.c +F: drivers/regulator/pbias-regulator.c +F: drivers/regulator/tps65217-regulator.c +F: drivers/regulator/tps65218-regulator.c +F: drivers/regulator/tps65910-regulator.c +F: drivers/regulator/twl-regulator.c +F: drivers/regulator/twl6030-regulator.c +F: include/linux/platform_data/i2c-omap.h +F: include/linux/platform_data/ti-sysc.h + +OMFS FILESYSTEM +M: Bob Copeland +L: linux-karma-devel@lists.sourceforge.net +S: Maintained +F: Documentation/filesystems/omfs.rst +F: fs/omfs/ + +OMNIKEY CARDMAN 4000 DRIVER +M: Harald Welte +S: Maintained +F: drivers/char/pcmcia/cm4000_cs.c +F: include/linux/cm4000_cs.h +F: include/uapi/linux/cm4000_cs.h + +OMNIKEY CARDMAN 4040 DRIVER +M: Harald Welte +S: Maintained +F: drivers/char/pcmcia/cm4040_cs.* + +OMNIVISION OV02A10 SENSOR DRIVER +M: Dongchun Zhu +L: linux-media@vger.kernel.org +S: Maintained +T: git git://linuxtv.org/media_tree.git +F: Documentation/devicetree/bindings/media/i2c/ovti,ov02a10.yaml +F: drivers/media/i2c/ov02a10.c + +OMNIVISION OV13858 SENSOR DRIVER +M: Sakari Ailus +L: linux-media@vger.kernel.org +S: Maintained +T: git git://linuxtv.org/media_tree.git +F: drivers/media/i2c/ov13858.c + +OMNIVISION OV2680 SENSOR DRIVER +M: Rui Miguel Silva +L: linux-media@vger.kernel.org +S: Maintained +T: git git://linuxtv.org/media_tree.git +F: Documentation/devicetree/bindings/media/i2c/ovti,ov2680.yaml +F: drivers/media/i2c/ov2680.c + +OMNIVISION OV2685 SENSOR DRIVER +M: Shunqian Zheng +L: linux-media@vger.kernel.org +S: Maintained +T: git git://linuxtv.org/media_tree.git +F: drivers/media/i2c/ov2685.c + +OMNIVISION OV2740 SENSOR DRIVER +M: Tianshu Qiu +R: Shawn Tu +R: Bingbu Cao +L: linux-media@vger.kernel.org +S: Maintained +T: git git://linuxtv.org/media_tree.git +F: drivers/media/i2c/ov2740.c + +OMNIVISION OV5640 SENSOR DRIVER +M: Steve Longerbeam +L: linux-media@vger.kernel.org +S: Maintained +T: git git://linuxtv.org/media_tree.git +F: drivers/media/i2c/ov5640.c + +OMNIVISION OV5647 SENSOR DRIVER +M: Dave Stevenson +M: Jacopo Mondi +L: linux-media@vger.kernel.org +S: Maintained +T: git git://linuxtv.org/media_tree.git +F: Documentation/devicetree/bindings/media/i2c/ovti,ov5647.yaml +F: drivers/media/i2c/ov5647.c + +OMNIVISION OV5670 SENSOR DRIVER +M: Chiranjeevi Rapolu +M: Hyungwoo Yang +L: linux-media@vger.kernel.org +S: Maintained +T: git git://linuxtv.org/media_tree.git +F: drivers/media/i2c/ov5670.c + +OMNIVISION OV5675 SENSOR DRIVER +M: Shawn Tu +L: linux-media@vger.kernel.org +S: Maintained +T: git git://linuxtv.org/media_tree.git +F: drivers/media/i2c/ov5675.c + +OMNIVISION OV5695 SENSOR DRIVER +M: Shunqian Zheng +L: linux-media@vger.kernel.org +S: Maintained +T: git git://linuxtv.org/media_tree.git +F: drivers/media/i2c/ov5695.c + +OMNIVISION OV7670 SENSOR DRIVER +L: linux-media@vger.kernel.org +S: Orphan +T: git git://linuxtv.org/media_tree.git +F: Documentation/devicetree/bindings/media/i2c/ov7670.txt +F: drivers/media/i2c/ov7670.c + +OMNIVISION OV772x SENSOR DRIVER +M: Jacopo Mondi +L: linux-media@vger.kernel.org +S: Odd fixes +T: git git://linuxtv.org/media_tree.git +F: Documentation/devicetree/bindings/media/i2c/ovti,ov772x.yaml +F: drivers/media/i2c/ov772x.c +F: include/media/i2c/ov772x.h + +OMNIVISION OV7740 SENSOR DRIVER +M: Wenyou Yang +L: linux-media@vger.kernel.org +S: Maintained +T: git git://linuxtv.org/media_tree.git +F: Documentation/devicetree/bindings/media/i2c/ov7740.txt +F: drivers/media/i2c/ov7740.c + +OMNIVISION OV8856 SENSOR DRIVER +M: Dongchun Zhu +L: linux-media@vger.kernel.org +S: Maintained +T: git git://linuxtv.org/media_tree.git +F: Documentation/devicetree/bindings/media/i2c/ov8856.yaml +F: drivers/media/i2c/ov8856.c + +OMNIVISION OV9282 SENSOR DRIVER +M: Paul J. Murphy +M: Daniele Alessandrelli +L: linux-media@vger.kernel.org +S: Maintained +T: git git://linuxtv.org/media_tree.git +F: Documentation/devicetree/bindings/media/i2c/ovti,ov9282.yaml +F: drivers/media/i2c/ov9282.c + +OMNIVISION OV9640 SENSOR DRIVER +M: Petr Cvek +L: linux-media@vger.kernel.org +S: Maintained +F: drivers/media/i2c/ov9640.* + +OMNIVISION OV9650 SENSOR DRIVER +M: Sakari Ailus +R: Akinobu Mita +R: Sylwester Nawrocki +L: linux-media@vger.kernel.org +S: Maintained +T: git git://linuxtv.org/media_tree.git +F: Documentation/devicetree/bindings/media/i2c/ov9650.txt +F: drivers/media/i2c/ov9650.c + +OMNIVISION OV9734 SENSOR DRIVER +M: Tianshu Qiu +R: Bingbu Cao +L: linux-media@vger.kernel.org +S: Maintained +T: git git://linuxtv.org/media_tree.git +F: drivers/media/i2c/ov9734.c + +ONENAND FLASH DRIVER +M: Kyungmin Park +L: linux-mtd@lists.infradead.org +S: Maintained +F: drivers/mtd/nand/onenand/ +F: include/linux/mtd/onenand*.h + +ONION OMEGA2+ BOARD +M: Harvey Hunt +L: linux-mips@vger.kernel.org +S: Maintained +F: arch/mips/boot/dts/ralink/omega2p.dts + +OP-TEE DRIVER +M: Jens Wiklander +L: op-tee@lists.trustedfirmware.org +S: Maintained +F: Documentation/ABI/testing/sysfs-bus-optee-devices +F: drivers/tee/optee/ + +OP-TEE RANDOM NUMBER GENERATOR (RNG) DRIVER +M: Sumit Garg +L: op-tee@lists.trustedfirmware.org +S: Maintained +F: drivers/char/hw_random/optee-rng.c + +OPA-VNIC DRIVER +M: Dennis Dalessandro +M: Mike Marciniszyn +L: linux-rdma@vger.kernel.org +S: Supported +F: drivers/infiniband/ulp/opa_vnic + +OPEN FIRMWARE AND DEVICE TREE OVERLAYS +M: Pantelis Antoniou +M: Frank Rowand +L: devicetree@vger.kernel.org +S: Maintained +F: Documentation/devicetree/dynamic-resolution-notes.rst +F: Documentation/devicetree/overlay-notes.rst +F: drivers/of/overlay.c +F: drivers/of/resolver.c +K: of_overlay_notifier_ + +OPEN FIRMWARE AND FLATTENED DEVICE TREE +M: Rob Herring +M: Frank Rowand +L: devicetree@vger.kernel.org +S: Maintained +W: http://www.devicetree.org/ +T: git git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux.git +F: Documentation/ABI/testing/sysfs-firmware-ofw +F: drivers/of/ +F: include/linux/of*.h +F: scripts/dtc/ + +OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS +M: Rob Herring +L: devicetree@vger.kernel.org +S: Maintained +Q: http://patchwork.ozlabs.org/project/devicetree-bindings/list/ +T: git git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux.git +F: Documentation/devicetree/ +F: arch/*/boot/dts/ +F: include/dt-bindings/ + +OPENCOMPUTE PTP CLOCK DRIVER +M: Jonathan Lemon +L: netdev@vger.kernel.org +S: Maintained +F: drivers/ptp/ptp_ocp.c + +OPENCORES I2C BUS DRIVER +M: Peter Korsgaard +M: Andrew Lunn +L: linux-i2c@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/i2c/i2c-ocores.txt +F: Documentation/i2c/busses/i2c-ocores.rst +F: drivers/i2c/busses/i2c-ocores.c +F: include/linux/platform_data/i2c-ocores.h + +OPENRISC ARCHITECTURE +M: Jonas Bonn +M: Stefan Kristiansson +M: Stafford Horne +L: openrisc@lists.librecores.org +S: Maintained +W: http://openrisc.io +T: git git://github.com/openrisc/linux.git +F: Documentation/devicetree/bindings/openrisc/ +F: Documentation/openrisc/ +F: arch/openrisc/ +F: drivers/irqchip/irq-ompic.c +F: drivers/irqchip/irq-or1k-* + +OPENVSWITCH +M: Pravin B Shelar +L: netdev@vger.kernel.org +L: dev@openvswitch.org +S: Maintained +W: http://openvswitch.org +F: include/uapi/linux/openvswitch.h +F: net/openvswitch/ + +OPERATING PERFORMANCE POINTS (OPP) +M: Viresh Kumar +M: Nishanth Menon +M: Stephen Boyd +L: linux-pm@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/vireshk/pm.git +F: Documentation/devicetree/bindings/opp/ +F: Documentation/power/opp.rst +F: drivers/opp/ +F: include/linux/pm_opp.h + +OPL4 DRIVER +M: Clemens Ladisch +L: alsa-devel@alsa-project.org (moderated for non-subscribers) +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound.git +F: sound/drivers/opl4/ + +ORACLE CLUSTER FILESYSTEM 2 (OCFS2) +M: Mark Fasheh +M: Joel Becker +M: Joseph Qi +L: ocfs2-devel@oss.oracle.com (moderated for non-subscribers) +S: Supported +W: http://ocfs2.wiki.kernel.org +F: Documentation/filesystems/dlmfs.rst +F: Documentation/filesystems/ocfs2.rst +F: fs/ocfs2/ + +ORANGEFS FILESYSTEM +M: Mike Marshall +R: Martin Brandenburg +L: devel@lists.orangefs.org +S: Supported +T: git git://git.kernel.org/pub/scm/linux/kernel/git/hubcap/linux.git +F: Documentation/filesystems/orangefs.rst +F: fs/orangefs/ + +ORINOCO DRIVER +L: linux-wireless@vger.kernel.org +S: Orphan +W: https://wireless.wiki.kernel.org/en/users/Drivers/orinoco +W: http://www.nongnu.org/orinoco/ +F: drivers/net/wireless/intersil/orinoco/ + +OV2659 OMNIVISION SENSOR DRIVER +M: "Lad, Prabhakar" +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +Q: http://patchwork.linuxtv.org/project/linux-media/list/ +T: git git://linuxtv.org/mhadli/v4l-dvb-davinci_devices.git +F: drivers/media/i2c/ov2659.c +F: include/media/i2c/ov2659.h + +OVERLAY FILESYSTEM +M: Miklos Szeredi +L: linux-unionfs@vger.kernel.org +S: Supported +T: git git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/vfs.git +F: Documentation/filesystems/overlayfs.rst +F: fs/overlayfs/ + +P54 WIRELESS DRIVER +M: Christian Lamparter +L: linux-wireless@vger.kernel.org +S: Maintained +W: https://wireless.wiki.kernel.org/en/users/Drivers/p54 +F: drivers/net/wireless/intersil/p54/ + +PACKING +M: Vladimir Oltean +L: netdev@vger.kernel.org +S: Supported +F: Documentation/core-api/packing.rst +F: include/linux/packing.h +F: lib/packing.c + +PADATA PARALLEL EXECUTION MECHANISM +M: Steffen Klassert +M: Daniel Jordan +L: linux-crypto@vger.kernel.org +L: linux-kernel@vger.kernel.org +S: Maintained +F: Documentation/core-api/padata.rst +F: include/linux/padata.h +F: kernel/padata.c + +PAGE POOL +M: Jesper Dangaard Brouer +M: Ilias Apalodimas +L: netdev@vger.kernel.org +S: Supported +F: Documentation/networking/page_pool.rst +F: include/net/page_pool.h +F: include/trace/events/page_pool.h +F: net/core/page_pool.c + +PANASONIC LAPTOP ACPI EXTRAS DRIVER +M: Kenneth Chan +L: platform-driver-x86@vger.kernel.org +S: Maintained +F: drivers/platform/x86/panasonic-laptop.c + +PARALLAX PING IIO SENSOR DRIVER +M: Andreas Klinger +L: linux-iio@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/iio/proximity/parallax-ping.yaml +F: drivers/iio/proximity/ping.c + +PARALLEL LCD/KEYPAD PANEL DRIVER +M: Willy Tarreau +M: Ksenija Stanojevic +S: Odd Fixes +F: Documentation/admin-guide/lcd-panel-cgram.rst +F: drivers/auxdisplay/panel.c + +PARALLEL PORT SUBSYSTEM +M: Sudip Mukherjee +M: Sudip Mukherjee +L: linux-parport@lists.infradead.org (subscribers-only) +S: Maintained +F: Documentation/driver-api/parport*.rst +F: drivers/char/ppdev.c +F: drivers/parport/ +F: include/linux/parport*.h +F: include/uapi/linux/ppdev.h + +PARAVIRT_OPS INTERFACE +M: Juergen Gross +M: Deep Shah +M: "VMware, Inc." +L: virtualization@lists.linux-foundation.org +S: Supported +F: Documentation/virt/paravirt_ops.rst +F: arch/*/include/asm/paravirt*.h +F: arch/*/kernel/paravirt* +F: include/linux/hypervisor.h + +PARIDE DRIVERS FOR PARALLEL PORT IDE DEVICES +M: Tim Waugh +L: linux-parport@lists.infradead.org (subscribers-only) +S: Maintained +F: Documentation/admin-guide/blockdev/paride.rst +F: drivers/block/paride/ + +PARISC ARCHITECTURE +M: "James E.J. Bottomley" +M: Helge Deller +L: linux-parisc@vger.kernel.org +S: Maintained +W: https://parisc.wiki.kernel.org +Q: http://patchwork.kernel.org/project/linux-parisc/list/ +T: git git://git.kernel.org/pub/scm/linux/kernel/git/jejb/parisc-2.6.git +T: git git://git.kernel.org/pub/scm/linux/kernel/git/deller/parisc-linux.git +F: Documentation/parisc/ +F: arch/parisc/ +F: drivers/char/agp/parisc-agp.c +F: drivers/input/misc/hp_sdc_rtc.c +F: drivers/input/serio/gscps2.c +F: drivers/input/serio/hp_sdc* +F: drivers/parisc/ +F: drivers/parport/parport_gsc.* +F: drivers/tty/serial/8250/8250_gsc.c +F: drivers/video/console/sti* +F: drivers/video/fbdev/sti* +F: drivers/video/logo/logo_parisc* +F: include/linux/hp_sdc.h + +PARMAN +M: Jiri Pirko +L: netdev@vger.kernel.org +S: Supported +F: include/linux/parman.h +F: lib/parman.c +F: lib/test_parman.c + +PC ENGINES APU BOARD DRIVER +M: Enrico Weigelt, metux IT consult +S: Maintained +F: drivers/platform/x86/pcengines-apuv2.c + +PC87360 HARDWARE MONITORING DRIVER +M: Jim Cromie +L: linux-hwmon@vger.kernel.org +S: Maintained +F: Documentation/hwmon/pc87360.rst +F: drivers/hwmon/pc87360.c + +PC8736x GPIO DRIVER +M: Jim Cromie +S: Maintained +F: drivers/char/pc8736x_gpio.c + +PC87427 HARDWARE MONITORING DRIVER +M: Jean Delvare +L: linux-hwmon@vger.kernel.org +S: Maintained +F: Documentation/hwmon/pc87427.rst +F: drivers/hwmon/pc87427.c + +PCA9532 LED DRIVER +M: Riku Voipio +S: Maintained +F: drivers/leds/leds-pca9532.c +F: include/linux/leds-pca9532.h + +PCA9541 I2C BUS MASTER SELECTOR DRIVER +M: Guenter Roeck +L: linux-i2c@vger.kernel.org +S: Maintained +F: drivers/i2c/muxes/i2c-mux-pca9541.c + +PCDP - PRIMARY CONSOLE AND DEBUG PORT +M: Khalid Aziz +S: Maintained +F: drivers/firmware/pcdp.* + +PCI DRIVER FOR AARDVARK (Marvell Armada 3700) +M: Thomas Petazzoni +M: Pali Rohár +L: linux-pci@vger.kernel.org +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +F: Documentation/devicetree/bindings/pci/aardvark-pci.txt +F: drivers/pci/controller/pci-aardvark.c + +PCI DRIVER FOR ALTERA PCIE IP +M: Joyce Ooi +L: linux-pci@vger.kernel.org +S: Supported +F: Documentation/devicetree/bindings/pci/altera-pcie.txt +F: drivers/pci/controller/pcie-altera.c + +PCI DRIVER FOR APPLIEDMICRO XGENE +M: Toan Le +L: linux-pci@vger.kernel.org +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +F: Documentation/devicetree/bindings/pci/xgene-pci.txt +F: drivers/pci/controller/pci-xgene.c + +PCI DRIVER FOR ARM VERSATILE PLATFORM +M: Rob Herring +L: linux-pci@vger.kernel.org +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +F: Documentation/devicetree/bindings/pci/versatile.yaml +F: drivers/pci/controller/pci-versatile.c + +PCI DRIVER FOR ARMADA 8K +M: Thomas Petazzoni +L: linux-pci@vger.kernel.org +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +F: Documentation/devicetree/bindings/pci/pci-armada8k.txt +F: drivers/pci/controller/dwc/pcie-armada8k.c + +PCI DRIVER FOR CADENCE PCIE IP +M: Tom Joseph +L: linux-pci@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/pci/cdns,* +F: drivers/pci/controller/cadence/ + +PCI DRIVER FOR FREESCALE LAYERSCAPE +M: Minghuan Lian +M: Mingkai Hu +M: Roy Zang +L: linuxppc-dev@lists.ozlabs.org +L: linux-pci@vger.kernel.org +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +F: drivers/pci/controller/dwc/*layerscape* + +PCI DRIVER FOR GENERIC OF HOSTS +M: Will Deacon +L: linux-pci@vger.kernel.org +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +F: Documentation/devicetree/bindings/pci/host-generic-pci.yaml +F: drivers/pci/controller/pci-host-common.c +F: drivers/pci/controller/pci-host-generic.c + +PCI DRIVER FOR IMX6 +M: Richard Zhu +M: Lucas Stach +L: linux-pci@vger.kernel.org +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +F: Documentation/devicetree/bindings/pci/fsl,imx6q-pcie.yaml +F: drivers/pci/controller/dwc/*imx6* + +PCI DRIVER FOR FU740 +M: Paul Walmsley +M: Greentime Hu +L: linux-pci@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/pci/sifive,fu740-pcie.yaml +F: drivers/pci/controller/dwc/pcie-fu740.c + +PCI DRIVER FOR INTEL IXP4XX +M: Linus Walleij +S: Maintained +F: Documentation/devicetree/bindings/pci/intel,ixp4xx-pci.yaml +F: drivers/pci/controller/pci-ixp4xx.c + +PCI DRIVER FOR INTEL VOLUME MANAGEMENT DEVICE (VMD) +M: Nirmal Patel +R: Jonathan Derrick +L: linux-pci@vger.kernel.org +S: Supported +F: drivers/pci/controller/vmd.c + +PCI DRIVER FOR MICROSEMI SWITCHTEC +M: Kurt Schwemmer +M: Logan Gunthorpe +L: linux-pci@vger.kernel.org +S: Maintained +F: Documentation/ABI/testing/sysfs-class-switchtec +F: Documentation/driver-api/switchtec.rst +F: drivers/ntb/hw/mscc/ +F: drivers/pci/switch/switchtec* +F: include/linux/switchtec.h +F: include/uapi/linux/switchtec_ioctl.h + +PCI DRIVER FOR MOBIVEIL PCIE IP +M: Karthikeyan Mitran +M: Hou Zhiqiang +L: linux-pci@vger.kernel.org +S: Supported +F: Documentation/devicetree/bindings/pci/mobiveil-pcie.txt +F: drivers/pci/controller/mobiveil/pcie-mobiveil* + +PCI DRIVER FOR MVEBU (Marvell Armada 370 and Armada XP SOC support) +M: Thomas Petazzoni +L: linux-pci@vger.kernel.org +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +F: drivers/pci/controller/*mvebu* + +PCI DRIVER FOR NVIDIA TEGRA +M: Thierry Reding +L: linux-tegra@vger.kernel.org +L: linux-pci@vger.kernel.org +S: Supported +F: Documentation/devicetree/bindings/pci/nvidia,tegra20-pcie.txt +F: drivers/pci/controller/pci-tegra.c + +PCI DRIVER FOR NXP LAYERSCAPE GEN4 CONTROLLER +M: Hou Zhiqiang +L: linux-pci@vger.kernel.org +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +F: Documentation/devicetree/bindings/pci/layerscape-pcie-gen4.txt +F: drivers/pci/controller/mobiveil/pcie-layerscape-gen4.c + +PCI DRIVER FOR RENESAS R-CAR +M: Marek Vasut +M: Yoshihiro Shimoda +L: linux-pci@vger.kernel.org +L: linux-renesas-soc@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/pci/*rcar* +F: drivers/pci/controller/*rcar* + +PCI DRIVER FOR SAMSUNG EXYNOS +M: Jingoo Han +L: linux-pci@vger.kernel.org +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +L: linux-samsung-soc@vger.kernel.org +S: Maintained +F: drivers/pci/controller/dwc/pci-exynos.c + +PCI DRIVER FOR SYNOPSYS DESIGNWARE +M: Jingoo Han +M: Gustavo Pimentel +L: linux-pci@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/pci/snps,dw-pcie.yaml +F: Documentation/devicetree/bindings/pci/snps,dw-pcie-ep.yaml +F: drivers/pci/controller/dwc/*designware* + +PCI DRIVER FOR TI DRA7XX/J721E +M: Kishon Vijay Abraham I +L: linux-omap@vger.kernel.org +L: linux-pci@vger.kernel.org +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Supported +F: Documentation/devicetree/bindings/pci/ti-pci.txt +F: drivers/pci/controller/cadence/pci-j721e.c +F: drivers/pci/controller/dwc/pci-dra7xx.c + +PCI DRIVER FOR V3 SEMICONDUCTOR V360EPC +M: Linus Walleij +L: linux-pci@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/pci/v3-v360epc-pci.txt +F: drivers/pci/controller/pci-v3-semi.c + +PCI ENDPOINT SUBSYSTEM +M: Kishon Vijay Abraham I +M: Lorenzo Pieralisi +R: Krzysztof Wilczyński +L: linux-pci@vger.kernel.org +S: Supported +F: Documentation/PCI/endpoint/* +F: Documentation/misc-devices/pci-endpoint-test.rst +T: git git://git.kernel.org/pub/scm/linux/kernel/git/kishon/pci-endpoint.git +F: drivers/misc/pci_endpoint_test.c +F: drivers/pci/endpoint/ +F: tools/pci/ + +PCI ENHANCED ERROR HANDLING (EEH) FOR POWERPC +M: Russell Currey +M: Oliver O'Halloran +L: linuxppc-dev@lists.ozlabs.org +S: Supported +F: Documentation/PCI/pci-error-recovery.rst +F: Documentation/powerpc/eeh-pci-error-recovery.rst +F: arch/powerpc/include/*/eeh*.h +F: arch/powerpc/kernel/eeh*.c +F: arch/powerpc/platforms/*/eeh*.c +F: drivers/pci/pcie/aer.c +F: drivers/pci/pcie/dpc.c +F: drivers/pci/pcie/err.c + +PCI ERROR RECOVERY +M: Linas Vepstas +L: linux-pci@vger.kernel.org +S: Supported +F: Documentation/PCI/pci-error-recovery.rst + +PCI MSI DRIVER FOR ALTERA MSI IP +M: Joyce Ooi +L: linux-pci@vger.kernel.org +S: Supported +F: Documentation/devicetree/bindings/pci/altera-pcie-msi.txt +F: drivers/pci/controller/pcie-altera-msi.c + +PCI MSI DRIVER FOR APPLIEDMICRO XGENE +M: Toan Le +L: linux-pci@vger.kernel.org +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +F: Documentation/devicetree/bindings/pci/xgene-pci-msi.txt +F: drivers/pci/controller/pci-xgene-msi.c + +PCI NATIVE HOST BRIDGE AND ENDPOINT DRIVERS +M: Lorenzo Pieralisi +R: Rob Herring +R: Krzysztof Wilczyński +L: linux-pci@vger.kernel.org +S: Supported +Q: http://patchwork.ozlabs.org/project/linux-pci/list/ +T: git git://git.kernel.org/pub/scm/linux/kernel/git/lpieralisi/pci.git/ +F: drivers/pci/controller/ + +PCI SUBSYSTEM +M: Bjorn Helgaas +L: linux-pci@vger.kernel.org +S: Supported +Q: http://patchwork.ozlabs.org/project/linux-pci/list/ +T: git git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci.git +F: Documentation/PCI/ +F: Documentation/devicetree/bindings/pci/ +F: arch/x86/kernel/early-quirks.c +F: arch/x86/kernel/quirks.c +F: arch/x86/pci/ +F: drivers/acpi/pci* +F: drivers/pci/ +F: include/asm-generic/pci* +F: include/linux/of_pci.h +F: include/linux/pci* +F: include/uapi/linux/pci* +F: lib/pci* + +PCIE DRIVER FOR AMAZON ANNAPURNA LABS +M: Jonathan Chocron +L: linux-pci@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/pci/pcie-al.txt +F: drivers/pci/controller/dwc/pcie-al.c + +PCIE DRIVER FOR AMLOGIC MESON +M: Yue Wang +L: linux-pci@vger.kernel.org +L: linux-amlogic@lists.infradead.org +S: Maintained +F: drivers/pci/controller/dwc/pci-meson.c + +PCIE DRIVER FOR AXIS ARTPEC +M: Jesper Nilsson +L: linux-arm-kernel@axis.com +L: linux-pci@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/pci/axis,artpec* +F: drivers/pci/controller/dwc/*artpec* + +PCIE DRIVER FOR CAVIUM THUNDERX +M: Robert Richter +L: linux-pci@vger.kernel.org +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Odd Fixes +F: drivers/pci/controller/pci-thunder-* + +PCIE DRIVER FOR HISILICON +M: Zhou Wang +L: linux-pci@vger.kernel.org +S: Maintained +F: drivers/pci/controller/dwc/pcie-hisi.c + +PCIE DRIVER FOR HISILICON KIRIN +M: Xiaowei Song +M: Binghui Wang +L: linux-pci@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/pci/hisilicon,kirin-pcie.yaml +F: drivers/pci/controller/dwc/pcie-kirin.c + +PCIE DRIVER FOR HISILICON STB +M: Shawn Guo +L: linux-pci@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/pci/hisilicon-histb-pcie.txt +F: drivers/pci/controller/dwc/pcie-histb.c + +PCIE DRIVER FOR INTEL KEEM BAY +M: Srikanth Thokala +L: linux-pci@vger.kernel.org +S: Supported +F: Documentation/devicetree/bindings/pci/intel,keembay-pcie* +F: drivers/pci/controller/dwc/pcie-keembay.c + +PCIE DRIVER FOR INTEL LGM GW SOC +M: Rahul Tanwar +L: linux-pci@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/pci/intel-gw-pcie.yaml +F: drivers/pci/controller/dwc/pcie-intel-gw.c + +PCIE DRIVER FOR MEDIATEK +M: Ryder Lee +M: Jianjun Wang +L: linux-pci@vger.kernel.org +L: linux-mediatek@lists.infradead.org +S: Supported +F: Documentation/devicetree/bindings/pci/mediatek* +F: drivers/pci/controller/*mediatek* + +PCIE DRIVER FOR MICROCHIP +M: Daire McNamara +L: linux-pci@vger.kernel.org +S: Supported +F: Documentation/devicetree/bindings/pci/microchip* +F: drivers/pci/controller/*microchip* + +PCIE DRIVER FOR QUALCOMM MSM +M: Stanimir Varbanov +L: linux-pci@vger.kernel.org +L: linux-arm-msm@vger.kernel.org +S: Maintained +F: drivers/pci/controller/dwc/*qcom* + +PCIE DRIVER FOR ROCKCHIP +M: Shawn Lin +L: linux-pci@vger.kernel.org +L: linux-rockchip@lists.infradead.org +S: Maintained +F: Documentation/devicetree/bindings/pci/rockchip-pcie* +F: drivers/pci/controller/pcie-rockchip* + +PCIE DRIVER FOR SOCIONEXT UNIPHIER +M: Kunihiko Hayashi +L: linux-pci@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/pci/uniphier-pcie* +F: drivers/pci/controller/dwc/pcie-uniphier* + +PCIE DRIVER FOR ST SPEAR13XX +M: Pratyush Anand +L: linux-pci@vger.kernel.org +S: Maintained +F: drivers/pci/controller/dwc/*spear* + +PCMCIA SUBSYSTEM +M: Dominik Brodowski +S: Odd Fixes +T: git git://git.kernel.org/pub/scm/linux/kernel/git/brodo/pcmcia.git +F: Documentation/pcmcia/ +F: drivers/pcmcia/ +F: include/pcmcia/ +F: tools/pcmcia/ + +PCNET32 NETWORK DRIVER +M: Don Fry +L: netdev@vger.kernel.org +S: Maintained +F: drivers/net/ethernet/amd/pcnet32.c + +PCRYPT PARALLEL CRYPTO ENGINE +M: Steffen Klassert +L: linux-crypto@vger.kernel.org +S: Maintained +F: crypto/pcrypt.c +F: include/crypto/pcrypt.h + +PEAQ WMI HOTKEYS DRIVER +M: Hans de Goede +L: platform-driver-x86@vger.kernel.org +S: Maintained +F: drivers/platform/x86/peaq-wmi.c + +PENSANDO ETHERNET DRIVERS +M: Shannon Nelson +M: drivers@pensando.io +L: netdev@vger.kernel.org +S: Supported +F: Documentation/networking/device_drivers/ethernet/pensando/ionic.rst +F: drivers/net/ethernet/pensando/ + +PER-CPU MEMORY ALLOCATOR +M: Dennis Zhou +M: Tejun Heo +M: Christoph Lameter +L: linux-mm@kvack.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/dennis/percpu.git +F: arch/*/include/asm/percpu.h +F: include/linux/percpu*.h +F: lib/percpu*.c +F: mm/percpu*.c + +PER-TASK DELAY ACCOUNTING +M: Balbir Singh +S: Maintained +F: include/linux/delayacct.h +F: kernel/delayacct.c + +PERFORMANCE EVENTS SUBSYSTEM +M: Peter Zijlstra +M: Ingo Molnar +M: Arnaldo Carvalho de Melo +R: Mark Rutland +R: Alexander Shishkin +R: Jiri Olsa +R: Namhyung Kim +L: linux-perf-users@vger.kernel.org +L: linux-kernel@vger.kernel.org +S: Supported +W: https://perf.wiki.kernel.org/ +T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git perf/core +F: arch/*/events/* +F: arch/*/events/*/* +F: arch/*/include/asm/perf_event.h +F: arch/*/kernel/*/*/perf_event*.c +F: arch/*/kernel/*/perf_event*.c +F: arch/*/kernel/perf_callchain.c +F: arch/*/kernel/perf_event*.c +F: include/linux/perf_event.h +F: include/uapi/linux/perf_event.h +F: kernel/events/* +F: tools/lib/perf/ +F: tools/perf/ + +PERFORMANCE EVENTS TOOLING ARM64 +R: John Garry +R: Will Deacon +R: Mathieu Poirier +R: Leo Yan +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Supported +F: tools/build/feature/test-libopencsd.c +F: tools/perf/arch/arm*/ +F: tools/perf/pmu-events/arch/arm64/ +F: tools/perf/util/arm-spe* +F: tools/perf/util/cs-etm* + +PERSONALITY HANDLING +M: Christoph Hellwig +L: linux-abi-devel@lists.sourceforge.net +S: Maintained +F: include/linux/personality.h +F: include/uapi/linux/personality.h + +PHOENIX RC FLIGHT CONTROLLER ADAPTER +M: Marcus Folkesson +L: linux-input@vger.kernel.org +S: Maintained +F: Documentation/input/devices/pxrc.rst +F: drivers/input/joystick/pxrc.c + +PHONET PROTOCOL +M: Remi Denis-Courmont +S: Supported +F: Documentation/networking/phonet.rst +F: include/linux/phonet.h +F: include/net/phonet/ +F: include/uapi/linux/phonet.h +F: net/phonet/ + +PHRAM MTD DRIVER +M: Joern Engel +L: linux-mtd@lists.infradead.org +S: Maintained +F: drivers/mtd/devices/phram.c + +PICOLCD HID DRIVER +M: Bruno Prémont +L: linux-input@vger.kernel.org +S: Maintained +F: drivers/hid/hid-picolcd* + +PIDFD API +M: Christian Brauner +L: linux-kernel@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/brauner/linux.git +F: samples/pidfd/ +F: tools/testing/selftests/clone3/ +F: tools/testing/selftests/pid_namespace/ +F: tools/testing/selftests/pidfd/ +K: (?i)pidfd +K: (?i)clone3 +K: \b(clone_args|kernel_clone_args)\b + +PIN CONTROL SUBSYSTEM +M: Linus Walleij +L: linux-gpio@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-pinctrl.git +F: Documentation/devicetree/bindings/pinctrl/ +F: Documentation/driver-api/pin-control.rst +F: drivers/pinctrl/ +F: include/linux/pinctrl/ + +PIN CONTROLLER - AMD +M: Basavaraj Natikar +M: Shyam Sundar S K +S: Maintained +F: drivers/pinctrl/pinctrl-amd.c + +PIN CONTROLLER - FREESCALE +M: Dong Aisheng +M: Fabio Estevam +M: Shawn Guo +M: Stefan Agner +R: Pengutronix Kernel Team +L: linux-gpio@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/pinctrl/fsl,* +F: drivers/pinctrl/freescale/ + +PIN CONTROLLER - INTEL +M: Mika Westerberg +M: Andy Shevchenko +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/pinctrl/intel.git +F: drivers/pinctrl/intel/ + +PIN CONTROLLER - KEEMBAY +M: Lakshmi Sowjanya D +S: Supported +F: drivers/pinctrl/pinctrl-keembay* + +PIN CONTROLLER - MEDIATEK +M: Sean Wang +L: linux-mediatek@lists.infradead.org (moderated for non-subscribers) +S: Maintained +F: Documentation/devicetree/bindings/pinctrl/mediatek,mt65xx-pinctrl.yaml +F: Documentation/devicetree/bindings/pinctrl/mediatek,mt6797-pinctrl.yaml +F: Documentation/devicetree/bindings/pinctrl/mediatek,mt7622-pinctrl.yaml +F: Documentation/devicetree/bindings/pinctrl/mediatek,mt8183-pinctrl.yaml +F: drivers/pinctrl/mediatek/ + +PIN CONTROLLER - MICROCHIP AT91 +M: Ludovic Desroches +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +L: linux-gpio@vger.kernel.org +S: Supported +F: drivers/gpio/gpio-sama5d2-piobu.c +F: drivers/pinctrl/pinctrl-at91* + +PIN CONTROLLER - QUALCOMM +M: Bjorn Andersson +L: linux-arm-msm@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/pinctrl/qcom,*.txt +F: drivers/pinctrl/qcom/ + +PIN CONTROLLER - RENESAS +M: Geert Uytterhoeven +L: linux-renesas-soc@vger.kernel.org +S: Supported +T: git git://git.kernel.org/pub/scm/linux/kernel/git/geert/renesas-drivers.git renesas-pinctrl +F: Documentation/devicetree/bindings/pinctrl/renesas,* +F: drivers/pinctrl/renesas/ + +PIN CONTROLLER - SAMSUNG +M: Tomasz Figa +M: Krzysztof Kozlowski +M: Sylwester Nawrocki +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +L: linux-samsung-soc@vger.kernel.org +S: Maintained +Q: https://patchwork.kernel.org/project/linux-samsung-soc/list/ +T: git git://git.kernel.org/pub/scm/linux/kernel/git/pinctrl/samsung.git +F: Documentation/devicetree/bindings/pinctrl/samsung-pinctrl.txt +F: drivers/pinctrl/samsung/ +F: include/dt-bindings/pinctrl/samsung.h + +PIN CONTROLLER - SINGLE +M: Tony Lindgren +M: Haojian Zhuang +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +L: linux-omap@vger.kernel.org +S: Maintained +F: drivers/pinctrl/pinctrl-single.c + +PIN CONTROLLER - ST SPEAR +M: Viresh Kumar +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +W: http://www.st.com/spear +F: drivers/pinctrl/spear/ + +PKTCDVD DRIVER +M: linux-block@vger.kernel.org +S: Orphan +F: drivers/block/pktcdvd.c +F: include/linux/pktcdvd.h +F: include/uapi/linux/pktcdvd.h + +PLANTOWER PMS7003 AIR POLLUTION SENSOR DRIVER +M: Tomasz Duszynski +S: Maintained +F: Documentation/devicetree/bindings/iio/chemical/plantower,pms7003.yaml +F: drivers/iio/chemical/pms7003.c + +PLDMFW LIBRARY +M: Jacob Keller +S: Maintained +F: Documentation/driver-api/pldmfw/ +F: include/linux/pldmfw.h +F: lib/pldmfw/ + +PLX DMA DRIVER +M: Logan Gunthorpe +S: Maintained +F: drivers/dma/plx_dma.c + +PM6764TR DRIVER +M: Charles Hsu +L: linux-hwmon@vger.kernel.org +S: Maintained +F: Documentation/hwmon/pm6764tr.rst +F: drivers/hwmon/pmbus/pm6764tr.c + +PM-GRAPH UTILITY +M: "Todd E Brandt" +L: linux-pm@vger.kernel.org +S: Supported +W: https://01.org/pm-graph +B: https://bugzilla.kernel.org/buglist.cgi?component=pm-graph&product=Tools +T: git git://github.com/intel/pm-graph +F: tools/power/pm-graph + +PMBUS HARDWARE MONITORING DRIVERS +M: Guenter Roeck +L: linux-hwmon@vger.kernel.org +S: Maintained +W: http://hwmon.wiki.kernel.org/ +W: http://www.roeck-us.net/linux/drivers/ +T: git git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging.git +F: Documentation/devicetree/bindings/hwmon/ibm,cffps1.txt +F: Documentation/devicetree/bindings/hwmon/ltc2978.txt +F: Documentation/devicetree/bindings/hwmon/max31785.txt +F: Documentation/hwmon/adm1275.rst +F: Documentation/hwmon/ibm-cffps.rst +F: Documentation/hwmon/ir35221.rst +F: Documentation/hwmon/lm25066.rst +F: Documentation/hwmon/ltc2978.rst +F: Documentation/hwmon/ltc3815.rst +F: Documentation/hwmon/max16064.rst +F: Documentation/hwmon/max20751.rst +F: Documentation/hwmon/max31785.rst +F: Documentation/hwmon/max34440.rst +F: Documentation/hwmon/max8688.rst +F: Documentation/hwmon/pmbus-core.rst +F: Documentation/hwmon/pmbus.rst +F: Documentation/hwmon/tps40422.rst +F: Documentation/hwmon/ucd9000.rst +F: Documentation/hwmon/ucd9200.rst +F: Documentation/hwmon/zl6100.rst +F: drivers/hwmon/pmbus/ +F: include/linux/pmbus.h + +PMC SIERRA MaxRAID DRIVER +L: linux-scsi@vger.kernel.org +S: Orphan +W: http://www.pmc-sierra.com/ +F: drivers/scsi/pmcraid.* + +PMC SIERRA PM8001 DRIVER +M: Jack Wang +L: linux-scsi@vger.kernel.org +S: Supported +F: drivers/scsi/pm8001/ + +PNI RM3100 IIO DRIVER +M: Song Qiang +L: linux-iio@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/iio/magnetometer/pni,rm3100.yaml +F: drivers/iio/magnetometer/rm3100* + +PNP SUPPORT +M: "Rafael J. Wysocki" +L: linux-acpi@vger.kernel.org +S: Maintained +F: drivers/pnp/ +F: include/linux/pnp.h + +POSIX CLOCKS and TIMERS +M: Thomas Gleixner +L: linux-kernel@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git timers/core +F: fs/timerfd.c +F: include/linux/time_namespace.h +F: include/linux/timer* +F: kernel/time/*timer* +F: kernel/time/namespace.c + +POWER MANAGEMENT CORE +M: "Rafael J. Wysocki" +L: linux-pm@vger.kernel.org +S: Supported +B: https://bugzilla.kernel.org +T: git git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm +F: drivers/base/power/ +F: drivers/powercap/ +F: include/linux/intel_rapl.h +F: include/linux/pm.h +F: include/linux/pm_* +F: include/linux/powercap.h +F: kernel/configs/nopm.config + +DYNAMIC THERMAL POWER MANAGEMENT (DTPM) +M: Daniel Lezcano +L: linux-pm@vger.kernel.org +S: Supported +B: https://bugzilla.kernel.org +T: git git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm +F: drivers/powercap/dtpm* +F: include/linux/dtpm.h + +POWER STATE COORDINATION INTERFACE (PSCI) +M: Mark Rutland +M: Lorenzo Pieralisi +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +F: drivers/firmware/psci/ +F: include/linux/psci.h +F: include/uapi/linux/psci.h + +POWER SUPPLY CLASS/SUBSYSTEM and DRIVERS +M: Sebastian Reichel +L: linux-pm@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/sre/linux-power-supply.git +F: Documentation/ABI/testing/sysfs-class-power +F: Documentation/devicetree/bindings/power/supply/ +F: drivers/power/supply/ +F: include/linux/power/ +F: include/linux/power_supply.h + +POWERNV OPERATOR PANEL LCD DISPLAY DRIVER +M: Suraj Jitindar Singh +L: linuxppc-dev@lists.ozlabs.org +S: Maintained +F: drivers/char/powernv-op-panel.c + +PPP OVER ATM (RFC 2364) +M: Mitchell Blank Jr +S: Maintained +F: include/uapi/linux/atmppp.h +F: net/atm/pppoatm.c + +PPP OVER ETHERNET +M: Michal Ostrowski +S: Maintained +F: drivers/net/ppp/pppoe.c +F: drivers/net/ppp/pppox.c + +PPP OVER L2TP +M: James Chapman +S: Maintained +F: include/linux/if_pppol2tp.h +F: include/uapi/linux/if_pppol2tp.h +F: net/l2tp/l2tp_ppp.c + +PPP PROTOCOL DRIVERS AND COMPRESSORS +M: Paul Mackerras +L: linux-ppp@vger.kernel.org +S: Maintained +F: drivers/net/ppp/ppp_* + +PPS SUPPORT +M: Rodolfo Giometti +L: linuxpps@ml.enneenne.com (subscribers-only) +S: Maintained +W: http://wiki.enneenne.com/index.php/LinuxPPS_support +F: Documentation/ABI/testing/sysfs-pps +F: Documentation/devicetree/bindings/pps/pps-gpio.txt +F: Documentation/driver-api/pps.rst +F: drivers/pps/ +F: include/linux/pps*.h +F: include/uapi/linux/pps.h + +PPTP DRIVER +M: Dmitry Kozlov +L: netdev@vger.kernel.org +S: Maintained +W: http://sourceforge.net/projects/accel-pptp +F: drivers/net/ppp/pptp.c + +PRESSURE STALL INFORMATION (PSI) +M: Johannes Weiner +S: Maintained +F: include/linux/psi* +F: kernel/sched/psi.c + +PRINTK +M: Petr Mladek +M: Sergey Senozhatsky +R: Steven Rostedt +R: John Ogness +S: Maintained +F: include/linux/printk.h +F: kernel/printk/ + +PRINTK INDEXING +R: Chris Down +S: Maintained +F: kernel/printk/index.c + +PROC FILESYSTEM +L: linux-kernel@vger.kernel.org +L: linux-fsdevel@vger.kernel.org +S: Maintained +F: Documentation/filesystems/proc.rst +F: fs/proc/ +F: include/linux/proc_fs.h +F: tools/testing/selftests/proc/ + +PROC SYSCTL +M: Luis Chamberlain +M: Kees Cook +M: Iurii Zaikin +L: linux-kernel@vger.kernel.org +L: linux-fsdevel@vger.kernel.org +S: Maintained +F: fs/proc/proc_sysctl.c +F: include/linux/sysctl.h +F: kernel/sysctl-test.c +F: kernel/sysctl.c +F: tools/testing/selftests/sysctl/ + +PS3 NETWORK SUPPORT +M: Geoff Levand +L: netdev@vger.kernel.org +L: linuxppc-dev@lists.ozlabs.org +S: Maintained +F: drivers/net/ethernet/toshiba/ps3_gelic_net.* + +PS3 PLATFORM SUPPORT +M: Geoff Levand +L: linuxppc-dev@lists.ozlabs.org +S: Maintained +F: arch/powerpc/boot/ps3* +F: arch/powerpc/include/asm/lv1call.h +F: arch/powerpc/include/asm/ps3*.h +F: arch/powerpc/platforms/ps3/ +F: drivers/*/ps3* +F: drivers/ps3/ +F: drivers/rtc/rtc-ps3.c +F: drivers/usb/host/*ps3.c +F: sound/ppc/snd_ps3* + +PS3VRAM DRIVER +M: Jim Paris +M: Geoff Levand +L: linuxppc-dev@lists.ozlabs.org +S: Maintained +F: drivers/block/ps3vram.c + +PSAMPLE PACKET SAMPLING SUPPORT +M: Yotam Gigi +S: Maintained +F: include/net/psample.h +F: include/uapi/linux/psample.h +F: net/psample + +PSTORE FILESYSTEM +M: Kees Cook +M: Anton Vorontsov +M: Colin Cross +M: Tony Luck +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/kees/linux.git for-next/pstore +F: Documentation/admin-guide/ramoops.rst +F: Documentation/admin-guide/pstore-blk.rst +F: Documentation/devicetree/bindings/reserved-memory/ramoops.txt +F: drivers/acpi/apei/erst.c +F: drivers/firmware/efi/efi-pstore.c +F: fs/pstore/ +F: include/linux/pstore* +K: \b(pstore|ramoops) + +PTP HARDWARE CLOCK SUPPORT +M: Richard Cochran +L: netdev@vger.kernel.org +S: Maintained +W: http://linuxptp.sourceforge.net/ +F: Documentation/ABI/testing/sysfs-ptp +F: Documentation/driver-api/ptp.rst +F: drivers/net/phy/dp83640* +F: drivers/ptp/* +F: include/linux/ptp_cl* + +PTP VIRTUAL CLOCK SUPPORT +M: Yangbo Lu +L: netdev@vger.kernel.org +S: Maintained +F: drivers/ptp/ptp_vclock.c +F: net/ethtool/phc_vclocks.c + +PTRACE SUPPORT +M: Oleg Nesterov +S: Maintained +F: arch/*/*/ptrace*.c +F: arch/*/include/asm/ptrace*.h +F: arch/*/ptrace*.c +F: include/asm-generic/syscall.h +F: include/linux/ptrace.h +F: include/linux/regset.h +F: include/linux/tracehook.h +F: include/uapi/linux/ptrace.h +F: include/uapi/linux/ptrace.h +F: kernel/ptrace.c + +PULSE8-CEC DRIVER +M: Hans Verkuil +L: linux-media@vger.kernel.org +S: Maintained +T: git git://linuxtv.org/media_tree.git +F: Documentation/admin-guide/media/pulse8-cec.rst +F: drivers/media/cec/usb/pulse8/ + +PVRUSB2 VIDEO4LINUX DRIVER +M: Mike Isely +L: pvrusb2@isely.net (subscribers-only) +L: linux-media@vger.kernel.org +S: Maintained +W: http://www.isely.net/pvrusb2/ +T: git git://linuxtv.org/media_tree.git +F: Documentation/driver-api/media/drivers/pvrusb2* +F: drivers/media/usb/pvrusb2/ + +PWC WEBCAM DRIVER +M: Hans Verkuil +L: linux-media@vger.kernel.org +S: Odd Fixes +T: git git://linuxtv.org/media_tree.git +F: drivers/media/usb/pwc/* +F: include/trace/events/pwc.h + +PWM FAN DRIVER +M: Bartlomiej Zolnierkiewicz +L: linux-hwmon@vger.kernel.org +S: Supported +F: Documentation/devicetree/bindings/hwmon/pwm-fan.txt +F: Documentation/hwmon/pwm-fan.rst +F: drivers/hwmon/pwm-fan.c + +PWM IR Transmitter +M: Sean Young +L: linux-media@vger.kernel.org +S: Maintained +F: drivers/media/rc/pwm-ir-tx.c + +PWM SUBSYSTEM +M: Thierry Reding +R: Uwe Kleine-König +M: Lee Jones +L: linux-pwm@vger.kernel.org +S: Maintained +Q: https://patchwork.ozlabs.org/project/linux-pwm/list/ +T: git git://git.kernel.org/pub/scm/linux/kernel/git/thierry.reding/linux-pwm.git +F: Documentation/devicetree/bindings/gpio/gpio-mvebu.txt +F: Documentation/devicetree/bindings/pwm/ +F: Documentation/driver-api/pwm.rst +F: drivers/gpio/gpio-mvebu.c +F: drivers/pwm/ +F: drivers/video/backlight/pwm_bl.c +F: include/linux/pwm.h +F: include/linux/pwm_backlight.h +K: pwm_(config|apply_state|ops) + +PXA GPIO DRIVER +M: Robert Jarzmik +L: linux-gpio@vger.kernel.org +S: Maintained +F: drivers/gpio/gpio-pxa.c + +PXA MMCI DRIVER +S: Orphan + +PXA RTC DRIVER +M: Robert Jarzmik +L: linux-rtc@vger.kernel.org +S: Maintained + +PXA2xx/PXA3xx SUPPORT +M: Daniel Mack +M: Haojian Zhuang +M: Robert Jarzmik +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +T: git git://github.com/hzhuang1/linux.git +T: git git://github.com/rjarzmik/linux.git +F: arch/arm/boot/dts/pxa* +F: arch/arm/mach-pxa/ +F: drivers/dma/pxa* +F: drivers/pcmcia/pxa2xx* +F: drivers/pinctrl/pxa/ +F: drivers/spi/spi-pxa2xx* +F: drivers/usb/gadget/udc/pxa2* +F: include/sound/pxa2xx-lib.h +F: sound/arm/pxa* +F: sound/soc/pxa/ + +QAT DRIVER +M: Giovanni Cabiddu +L: qat-linux@intel.com +S: Supported +F: drivers/crypto/qat/ + +QCOM AUDIO (ASoC) DRIVERS +M: Srinivas Kandagatla +M: Banajit Goswami +L: alsa-devel@alsa-project.org (moderated for non-subscribers) +S: Supported +F: sound/soc/codecs/lpass-va-macro.c +F: sound/soc/codecs/lpass-wsa-macro.* +F: sound/soc/codecs/msm8916-wcd-analog.c +F: sound/soc/codecs/msm8916-wcd-digital.c +F: sound/soc/codecs/wcd9335.* +F: sound/soc/codecs/wcd934x.c +F: sound/soc/codecs/wcd-clsh-v2.* +F: sound/soc/codecs/wsa881x.c +F: sound/soc/qcom/ + +QCOM IPA DRIVER +M: Alex Elder +L: netdev@vger.kernel.org +S: Supported +F: drivers/net/ipa/ + +QEMU MACHINE EMULATOR AND VIRTUALIZER SUPPORT +M: Gabriel Somlo +M: "Michael S. Tsirkin" +L: qemu-devel@nongnu.org +S: Maintained +F: drivers/firmware/qemu_fw_cfg.c +F: include/uapi/linux/qemu_fw_cfg.h + +QIB DRIVER +M: Dennis Dalessandro +M: Mike Marciniszyn +L: linux-rdma@vger.kernel.org +S: Supported +F: drivers/infiniband/hw/qib/ + +QLOGIC QL41xxx FCOE DRIVER +M: Saurav Kashyap +M: Javed Hasan +M: GR-QLogic-Storage-Upstream@marvell.com +L: linux-scsi@vger.kernel.org +S: Supported +F: drivers/scsi/qedf/ + +QLOGIC QL41xxx ISCSI DRIVER +M: Nilesh Javali +M: Manish Rangankar +M: GR-QLogic-Storage-Upstream@marvell.com +L: linux-scsi@vger.kernel.org +S: Supported +F: drivers/scsi/qedi/ + +QLOGIC QL4xxx ETHERNET DRIVER +M: Ariel Elior +M: GR-everest-linux-l2@marvell.com +L: netdev@vger.kernel.org +S: Supported +F: drivers/net/ethernet/qlogic/qed/ +F: drivers/net/ethernet/qlogic/qede/ +F: include/linux/qed/ + +QLOGIC QL4xxx RDMA DRIVER +M: Michal Kalderon +M: Ariel Elior +L: linux-rdma@vger.kernel.org +S: Supported +F: drivers/infiniband/hw/qedr/ +F: include/uapi/rdma/qedr-abi.h + +QLOGIC QLA1280 SCSI DRIVER +M: Michael Reed +L: linux-scsi@vger.kernel.org +S: Maintained +F: drivers/scsi/qla1280.[ch] + +QLOGIC QLA2XXX FC-SCSI DRIVER +M: Nilesh Javali +M: GR-QLogic-Storage-Upstream@marvell.com +L: linux-scsi@vger.kernel.org +S: Supported +F: drivers/scsi/qla2xxx/ + +QLOGIC QLA3XXX NETWORK DRIVER +M: GR-Linux-NIC-Dev@marvell.com +L: netdev@vger.kernel.org +S: Supported +F: drivers/net/ethernet/qlogic/qla3xxx.* + +QLOGIC QLA4XXX iSCSI DRIVER +M: Nilesh Javali +M: Manish Rangankar +M: GR-QLogic-Storage-Upstream@marvell.com +L: linux-scsi@vger.kernel.org +S: Supported +F: drivers/scsi/qla4xxx/ + +QLOGIC QLCNIC (1/10)Gb ETHERNET DRIVER +M: Shahed Shaikh +M: Manish Chopra +M: GR-Linux-NIC-Dev@marvell.com +L: netdev@vger.kernel.org +S: Supported +F: drivers/net/ethernet/qlogic/qlcnic/ + +QLOGIC QLGE 10Gb ETHERNET DRIVER +M: Manish Chopra +M: GR-Linux-NIC-Dev@marvell.com +M: Coiby Xu +L: netdev@vger.kernel.org +S: Supported +F: Documentation/networking/device_drivers/qlogic/qlge.rst +F: drivers/staging/qlge/ + +QM1D1B0004 MEDIA DRIVER +M: Akihiro Tsukada +L: linux-media@vger.kernel.org +S: Odd Fixes +F: drivers/media/tuners/qm1d1b0004* + +QM1D1C0042 MEDIA DRIVER +M: Akihiro Tsukada +L: linux-media@vger.kernel.org +S: Odd Fixes +F: drivers/media/tuners/qm1d1c0042* + +QNX4 FILESYSTEM +M: Anders Larsen +S: Maintained +W: http://www.alarsen.net/linux/qnx4fs/ +F: fs/qnx4/ +F: include/uapi/linux/qnx4_fs.h +F: include/uapi/linux/qnxtypes.h + +QORIQ DPAA2 FSL-MC BUS DRIVER +M: Stuart Yoder +M: Laurentiu Tudor +L: linux-kernel@vger.kernel.org +S: Maintained +F: Documentation/ABI/stable/sysfs-bus-fsl-mc +F: Documentation/devicetree/bindings/misc/fsl,qoriq-mc.txt +F: Documentation/networking/device_drivers/ethernet/freescale/dpaa2/overview.rst +F: drivers/bus/fsl-mc/ +F: include/uapi/linux/fsl_mc.h + +QT1010 MEDIA DRIVER +M: Antti Palosaari +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +W: http://palosaari.fi/linux/ +Q: http://patchwork.linuxtv.org/project/linux-media/list/ +T: git git://linuxtv.org/anttip/media_tree.git +F: drivers/media/tuners/qt1010* + +QUALCOMM ATHEROS ATH10K WIRELESS DRIVER +M: Kalle Valo +L: ath10k@lists.infradead.org +S: Supported +W: https://wireless.wiki.kernel.org/en/users/Drivers/ath10k +T: git git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git +F: drivers/net/wireless/ath/ath10k/ + +QUALCOMM ATHEROS ATH11K WIRELESS DRIVER +M: Kalle Valo +L: ath11k@lists.infradead.org +S: Supported +T: git git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git +F: drivers/net/wireless/ath/ath11k/ + +QUALCOMM ATHEROS ATH9K WIRELESS DRIVER +M: ath9k-devel@qca.qualcomm.com +L: linux-wireless@vger.kernel.org +S: Supported +W: https://wireless.wiki.kernel.org/en/users/Drivers/ath9k +F: drivers/net/wireless/ath/ath9k/ + +QUALCOMM CAMERA SUBSYSTEM DRIVER +M: Robert Foss +M: Todor Tomov +L: linux-media@vger.kernel.org +S: Maintained +F: Documentation/admin-guide/media/qcom_camss.rst +F: Documentation/devicetree/bindings/media/*camss* +F: drivers/media/platform/qcom/camss/ + +QUALCOMM CORE POWER REDUCTION (CPR) AVS DRIVER +M: Niklas Cassel +L: linux-pm@vger.kernel.org +L: linux-arm-msm@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/power/avs/qcom,cpr.txt +F: drivers/soc/qcom/cpr.c + +QUALCOMM CPUFREQ DRIVER MSM8996/APQ8096 +M: Ilia Lin +L: linux-pm@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/opp/qcom-nvmem-cpufreq.txt +F: drivers/cpufreq/qcom-cpufreq-nvmem.c + +QUALCOMM CRYPTO DRIVERS +M: Thara Gopinath +L: linux-crypto@vger.kernel.org +L: linux-arm-msm@vger.kernel.org +S: Maintained +F: drivers/crypto/qce/ + +QUALCOMM EMAC GIGABIT ETHERNET DRIVER +M: Timur Tabi +L: netdev@vger.kernel.org +S: Maintained +F: drivers/net/ethernet/qualcomm/emac/ + +QUALCOMM ETHQOS ETHERNET DRIVER +M: Vinod Koul +L: netdev@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/net/qcom,ethqos.txt +F: drivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c + +QUALCOMM GENERIC INTERFACE I2C DRIVER +M: Akash Asthana +M: Mukesh Savaliya +L: linux-i2c@vger.kernel.org +L: linux-arm-msm@vger.kernel.org +S: Supported +F: drivers/i2c/busses/i2c-qcom-geni.c + +QUALCOMM HEXAGON ARCHITECTURE +M: Brian Cain +L: linux-hexagon@vger.kernel.org +S: Supported +F: arch/hexagon/ + +QUALCOMM HIDMA DRIVER +M: Sinan Kaya +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +L: linux-arm-msm@vger.kernel.org +L: dmaengine@vger.kernel.org +S: Supported +F: drivers/dma/qcom/hidma* + +QUALCOMM I2C CCI DRIVER +M: Loic Poulain +M: Robert Foss +L: linux-i2c@vger.kernel.org +L: linux-arm-msm@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/i2c/i2c-qcom-cci.txt +F: drivers/i2c/busses/i2c-qcom-cci.c + +QUALCOMM IOMMU +M: Rob Clark +L: iommu@lists.linux-foundation.org +L: linux-arm-msm@vger.kernel.org +S: Maintained +F: drivers/iommu/arm/arm-smmu/qcom_iommu.c + +QUALCOMM IPC ROUTER (QRTR) DRIVER +M: Manivannan Sadhasivam +L: linux-arm-msm@vger.kernel.org +S: Maintained +F: include/trace/events/qrtr.h +F: include/uapi/linux/qrtr.h +F: net/qrtr/ + +QUALCOMM IPCC MAILBOX DRIVER +M: Manivannan Sadhasivam +L: linux-arm-msm@vger.kernel.org +S: Supported +F: Documentation/devicetree/bindings/mailbox/qcom-ipcc.yaml +F: drivers/mailbox/qcom-ipcc.c +F: include/dt-bindings/mailbox/qcom-ipcc.h + +QUALCOMM IPQ4019 USB PHY DRIVER +M: Robert Marko +M: Luka Perkov +L: linux-arm-msm@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/phy/qcom-usb-ipq4019-phy.yaml +F: drivers/phy/qualcomm/phy-qcom-ipq4019-usb.c + +QUALCOMM IPQ4019 VQMMC REGULATOR DRIVER +M: Robert Marko +M: Luka Perkov +L: linux-arm-msm@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/regulator/vqmmc-ipq4019-regulator.yaml +F: drivers/regulator/vqmmc-ipq4019-regulator.c + +QUALCOMM RMNET DRIVER +M: Subash Abhinov Kasiviswanathan +M: Sean Tranchetti +L: netdev@vger.kernel.org +S: Maintained +F: Documentation/networking/device_drivers/cellular/qualcomm/rmnet.rst +F: drivers/net/ethernet/qualcomm/rmnet/ +F: include/linux/if_rmnet.h + +QUALCOMM TSENS THERMAL DRIVER +M: Amit Kucheria +M: Thara Gopinath +L: linux-pm@vger.kernel.org +L: linux-arm-msm@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/thermal/qcom-tsens.yaml +F: drivers/thermal/qcom/ + +QUALCOMM VENUS VIDEO ACCELERATOR DRIVER +M: Stanimir Varbanov +L: linux-media@vger.kernel.org +L: linux-arm-msm@vger.kernel.org +S: Maintained +T: git git://linuxtv.org/media_tree.git +F: Documentation/devicetree/bindings/media/*venus* +F: drivers/media/platform/qcom/venus/ + +QUALCOMM WCN36XX WIRELESS DRIVER +M: Kalle Valo +L: wcn36xx@lists.infradead.org +S: Supported +W: https://wireless.wiki.kernel.org/en/users/Drivers/wcn36xx +T: git git://github.com/KrasnikovEugene/wcn36xx.git +F: drivers/net/wireless/ath/wcn36xx/ + +QUANTENNA QTNFMAC WIRELESS DRIVER +M: Igor Mitsyanko +R: Sergey Matyukevich +L: linux-wireless@vger.kernel.org +S: Maintained +F: drivers/net/wireless/quantenna + +RADEON and AMDGPU DRM DRIVERS +M: Alex Deucher +M: Christian König +M: Pan, Xinhui +L: amd-gfx@lists.freedesktop.org +S: Supported +T: git https://gitlab.freedesktop.org/agd5f/linux.git +B: https://gitlab.freedesktop.org/drm/amd/-/issues +C: irc://irc.oftc.net/radeon +F: drivers/gpu/drm/amd/ +F: drivers/gpu/drm/radeon/ +F: include/uapi/drm/amdgpu_drm.h +F: include/uapi/drm/radeon_drm.h + +RADEON FRAMEBUFFER DISPLAY DRIVER +M: Benjamin Herrenschmidt +L: linux-fbdev@vger.kernel.org +S: Maintained +F: drivers/video/fbdev/aty/radeon* +F: include/uapi/linux/radeonfb.h + +RADIOSHARK RADIO DRIVER +M: Hans Verkuil +L: linux-media@vger.kernel.org +S: Maintained +T: git git://linuxtv.org/media_tree.git +F: drivers/media/radio/radio-shark.c + +RADIOSHARK2 RADIO DRIVER +M: Hans Verkuil +L: linux-media@vger.kernel.org +S: Maintained +T: git git://linuxtv.org/media_tree.git +F: drivers/media/radio/radio-shark2.c +F: drivers/media/radio/radio-tea5777.c + +RADOS BLOCK DEVICE (RBD) +M: Ilya Dryomov +R: Dongsheng Yang +L: ceph-devel@vger.kernel.org +S: Supported +W: http://ceph.com/ +T: git git://github.com/ceph/ceph-client.git +F: Documentation/ABI/testing/sysfs-bus-rbd +F: drivers/block/rbd.c +F: drivers/block/rbd_types.h + +RAGE128 FRAMEBUFFER DISPLAY DRIVER +M: Paul Mackerras +L: linux-fbdev@vger.kernel.org +S: Maintained +F: drivers/video/fbdev/aty/aty128fb.c + +RAINSHADOW-CEC DRIVER +M: Hans Verkuil +L: linux-media@vger.kernel.org +S: Maintained +T: git git://linuxtv.org/media_tree.git +F: drivers/media/cec/usb/rainshadow/ + +RALINK MIPS ARCHITECTURE +M: John Crispin +L: linux-mips@vger.kernel.org +S: Maintained +F: arch/mips/ralink + +RALINK RT2X00 WIRELESS LAN DRIVER +M: Stanislaw Gruszka +M: Helmut Schaa +L: linux-wireless@vger.kernel.org +S: Maintained +F: drivers/net/wireless/ralink/rt2x00/ + +RAMDISK RAM BLOCK DEVICE DRIVER +M: Jens Axboe +S: Maintained +F: Documentation/admin-guide/blockdev/ramdisk.rst +F: drivers/block/brd.c + +RANCHU VIRTUAL BOARD FOR MIPS +M: Miodrag Dinic +L: linux-mips@vger.kernel.org +S: Supported +F: arch/mips/configs/generic/board-ranchu.config +F: arch/mips/generic/board-ranchu.c + +RANDOM NUMBER DRIVER +M: "Theodore Ts'o" +S: Maintained +F: drivers/char/random.c + +RAPIDIO SUBSYSTEM +M: Matt Porter +M: Alexandre Bounine +S: Maintained +F: drivers/rapidio/ + +RAS INFRASTRUCTURE +M: Tony Luck +M: Borislav Petkov +L: linux-edac@vger.kernel.org +S: Maintained +F: Documentation/admin-guide/ras.rst +F: drivers/ras/ +F: include/linux/ras.h +F: include/ras/ras_event.h + +RAYLINK/WEBGEAR 802.11 WIRELESS LAN DRIVER +L: linux-wireless@vger.kernel.org +S: Orphan +F: drivers/net/wireless/ray* + +RC-CORE / LIRC FRAMEWORK +M: Sean Young +L: linux-media@vger.kernel.org +S: Maintained +W: http://linuxtv.org +T: git git://linuxtv.org/media_tree.git +F: Documentation/driver-api/media/rc-core.rst +F: Documentation/userspace-api/media/rc/ +F: drivers/media/rc/ +F: include/media/rc-map.h +F: include/media/rc-core.h +F: include/uapi/linux/lirc.h + +RCMM REMOTE CONTROLS DECODER +M: Patrick Lerda +S: Maintained +F: drivers/media/rc/ir-rcmm-decoder.c + +RCUTORTURE TEST FRAMEWORK +M: "Paul E. McKenney" +M: Josh Triplett +R: Steven Rostedt +R: Mathieu Desnoyers +R: Lai Jiangshan +L: rcu@vger.kernel.org +S: Supported +T: git git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git dev +F: tools/testing/selftests/rcutorture + +RDACM20 Camera Sensor +M: Jacopo Mondi +M: Kieran Bingham +M: Laurent Pinchart +M: Niklas Söderlund +L: linux-media@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/media/i2c/imi,rdacm2x-gmsl.yaml +F: drivers/media/i2c/max9271.c +F: drivers/media/i2c/max9271.h +F: drivers/media/i2c/rdacm20.c + +RDACM21 Camera Sensor +M: Jacopo Mondi +M: Kieran Bingham +M: Laurent Pinchart +M: Niklas Söderlund +L: linux-media@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/media/i2c/imi,rdacm2x-gmsl.yaml +F: drivers/media/i2c/max9271.c +F: drivers/media/i2c/max9271.h +F: drivers/media/i2c/rdacm21.c + +RDC R-321X SoC +M: Florian Fainelli +S: Maintained + +RDC R6040 FAST ETHERNET DRIVER +M: Florian Fainelli +L: netdev@vger.kernel.org +S: Maintained +F: drivers/net/ethernet/rdc/r6040.c + +RDMAVT - RDMA verbs software +M: Dennis Dalessandro +M: Mike Marciniszyn +L: linux-rdma@vger.kernel.org +S: Supported +F: drivers/infiniband/sw/rdmavt + +RDS - RELIABLE DATAGRAM SOCKETS +M: Santosh Shilimkar +L: netdev@vger.kernel.org +L: linux-rdma@vger.kernel.org +L: rds-devel@oss.oracle.com (moderated for non-subscribers) +S: Supported +W: https://oss.oracle.com/projects/rds/ +F: Documentation/networking/rds.rst +F: net/rds/ + +RDT - RESOURCE ALLOCATION +M: Fenghua Yu +M: Reinette Chatre +L: linux-kernel@vger.kernel.org +S: Supported +F: Documentation/x86/resctrl* +F: arch/x86/include/asm/resctrl.h +F: arch/x86/kernel/cpu/resctrl/ +F: tools/testing/selftests/resctrl/ + +READ-COPY UPDATE (RCU) +M: "Paul E. McKenney" +M: Josh Triplett +R: Steven Rostedt +R: Mathieu Desnoyers +R: Lai Jiangshan +R: Joel Fernandes +L: rcu@vger.kernel.org +S: Supported +W: http://www.rdrop.com/users/paulmck/RCU/ +T: git git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git dev +F: Documentation/RCU/ +F: include/linux/rcu* +F: kernel/rcu/ +X: Documentation/RCU/torture.rst +X: include/linux/srcu*.h +X: kernel/rcu/srcu*.c + +REAL TIME CLOCK (RTC) SUBSYSTEM +M: Alessandro Zummo +M: Alexandre Belloni +L: linux-rtc@vger.kernel.org +S: Maintained +Q: http://patchwork.ozlabs.org/project/rtc-linux/list/ +T: git git://git.kernel.org/pub/scm/linux/kernel/git/abelloni/linux.git +F: Documentation/admin-guide/rtc.rst +F: Documentation/devicetree/bindings/rtc/ +F: drivers/rtc/ +F: include/linux/platform_data/rtc-* +F: include/linux/rtc.h +F: include/linux/rtc/ +F: include/uapi/linux/rtc.h +F: tools/testing/selftests/rtc/ + +REALTEK AUDIO CODECS +M: Oder Chiou +S: Maintained +F: include/sound/rt*.h +F: sound/soc/codecs/rt* + +REALTEK RTL83xx SMI DSA ROUTER CHIPS +M: Linus Walleij +S: Maintained +F: Documentation/devicetree/bindings/net/dsa/realtek-smi.txt +F: drivers/net/dsa/realtek-smi* +F: drivers/net/dsa/rtl83* + +REALTEK WIRELESS DRIVER (rtlwifi family) +M: Ping-Ke Shih +L: linux-wireless@vger.kernel.org +S: Maintained +W: https://wireless.wiki.kernel.org/ +T: git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git +F: drivers/net/wireless/realtek/rtlwifi/ + +REALTEK WIRELESS DRIVER (rtw88) +M: Yan-Hsuan Chuang +L: linux-wireless@vger.kernel.org +S: Maintained +F: drivers/net/wireless/realtek/rtw88/ + +REDPINE WIRELESS DRIVER +M: Amitkumar Karwar +M: Siva Rebbagondla +L: linux-wireless@vger.kernel.org +S: Maintained +F: drivers/net/wireless/rsi/ + +REGISTER MAP ABSTRACTION +M: Mark Brown +L: linux-kernel@vger.kernel.org +S: Supported +T: git git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regmap.git +F: Documentation/devicetree/bindings/regmap/ +F: drivers/base/regmap/ +F: include/linux/regmap.h + +REISERFS FILE SYSTEM +L: reiserfs-devel@vger.kernel.org +S: Supported +F: fs/reiserfs/ + +REMOTE PROCESSOR (REMOTEPROC) SUBSYSTEM +M: Ohad Ben-Cohen +M: Bjorn Andersson +M: Mathieu Poirier +L: linux-remoteproc@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/andersson/remoteproc.git rproc-next +F: Documentation/ABI/testing/sysfs-class-remoteproc +F: Documentation/devicetree/bindings/remoteproc/ +F: Documentation/staging/remoteproc.rst +F: drivers/remoteproc/ +F: include/linux/remoteproc.h +F: include/linux/remoteproc/ + +REMOTE PROCESSOR MESSAGING (RPMSG) SUBSYSTEM +M: Ohad Ben-Cohen +M: Bjorn Andersson +M: Mathieu Poirier +L: linux-remoteproc@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/andersson/remoteproc.git rpmsg-next +F: Documentation/ABI/testing/sysfs-bus-rpmsg +F: Documentation/staging/rpmsg.rst +F: drivers/rpmsg/ +F: include/linux/rpmsg.h +F: include/linux/rpmsg/ +F: include/uapi/linux/rpmsg.h +F: samples/rpmsg/ + +REMOTE PROCESSOR MESSAGING (RPMSG) WWAN CONTROL DRIVER +M: Stephan Gerhold +L: netdev@vger.kernel.org +L: linux-remoteproc@vger.kernel.org +S: Maintained +F: drivers/net/wwan/rpmsg_wwan_ctrl.c + +RENESAS CLOCK DRIVERS +M: Geert Uytterhoeven +L: linux-renesas-soc@vger.kernel.org +S: Supported +T: git git://git.kernel.org/pub/scm/linux/kernel/git/geert/renesas-drivers.git renesas-clk +F: Documentation/devicetree/bindings/clock/renesas,* +F: drivers/clk/renesas/ + +RENESAS EMEV2 I2C DRIVER +M: Wolfram Sang +L: linux-renesas-soc@vger.kernel.org +S: Supported +F: Documentation/devicetree/bindings/i2c/renesas,iic-emev2.yaml +F: drivers/i2c/busses/i2c-emev2.c + +RENESAS ETHERNET DRIVERS +R: Sergey Shtylyov +L: netdev@vger.kernel.org +L: linux-renesas-soc@vger.kernel.org +F: Documentation/devicetree/bindings/net/renesas,*.yaml +F: drivers/net/ethernet/renesas/ +F: include/linux/sh_eth.h + +RENESAS R-CAR GYROADC DRIVER +M: Marek Vasut +L: linux-iio@vger.kernel.org +S: Supported +F: Documentation/devicetree/bindings/iio/adc/renesas,rcar-gyroadc.yaml +F: drivers/iio/adc/rcar-gyroadc.c + +RENESAS R-CAR I2C DRIVERS +M: Wolfram Sang +L: linux-renesas-soc@vger.kernel.org +S: Supported +F: Documentation/devicetree/bindings/i2c/renesas,rcar-i2c.yaml +F: Documentation/devicetree/bindings/i2c/renesas,rmobile-iic.yaml +F: drivers/i2c/busses/i2c-rcar.c +F: drivers/i2c/busses/i2c-sh_mobile.c + +RENESAS R-CAR THERMAL DRIVERS +M: Niklas Söderlund +L: linux-renesas-soc@vger.kernel.org +S: Supported +F: Documentation/devicetree/bindings/thermal/rcar-gen3-thermal.yaml +F: Documentation/devicetree/bindings/thermal/rcar-thermal.yaml +F: drivers/thermal/rcar_gen3_thermal.c +F: drivers/thermal/rcar_thermal.c + +RENESAS RIIC DRIVER +M: Chris Brandt +L: linux-renesas-soc@vger.kernel.org +S: Supported +F: Documentation/devicetree/bindings/i2c/renesas,riic.yaml +F: drivers/i2c/busses/i2c-riic.c + +RENESAS USB PHY DRIVER +M: Yoshihiro Shimoda +L: linux-renesas-soc@vger.kernel.org +S: Maintained +F: drivers/phy/renesas/phy-rcar-gen3-usb*.c + +RENESAS RZ/G2L A/D DRIVER +M: Lad Prabhakar +L: linux-iio@vger.kernel.org +L: linux-renesas-soc@vger.kernel.org +S: Supported +F: Documentation/devicetree/bindings/iio/adc/renesas,rzg2l-adc.yaml +F: drivers/iio/adc/rzg2l_adc.c + +RESET CONTROLLER FRAMEWORK +M: Philipp Zabel +S: Maintained +T: git git://git.pengutronix.de/git/pza/linux +F: Documentation/devicetree/bindings/reset/ +F: Documentation/driver-api/reset.rst +F: drivers/reset/ +F: include/dt-bindings/reset/ +F: include/linux/reset-controller.h +F: include/linux/reset.h +F: include/linux/reset/ +K: \b(?:devm_|of_)?reset_control(?:ler_[a-z]+|_[a-z_]+)?\b + +RESTARTABLE SEQUENCES SUPPORT +M: Mathieu Desnoyers +M: Peter Zijlstra +M: "Paul E. McKenney" +M: Boqun Feng +L: linux-kernel@vger.kernel.org +S: Supported +F: include/trace/events/rseq.h +F: include/uapi/linux/rseq.h +F: kernel/rseq.c +F: tools/testing/selftests/rseq/ + +RFKILL +M: Johannes Berg +L: linux-wireless@vger.kernel.org +S: Maintained +W: https://wireless.wiki.kernel.org/ +T: git git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211.git +T: git git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next.git +F: Documentation/ABI/stable/sysfs-class-rfkill +F: Documentation/driver-api/rfkill.rst +F: include/linux/rfkill.h +F: include/uapi/linux/rfkill.h +F: net/rfkill/ + +RHASHTABLE +M: Thomas Graf +M: Herbert Xu +L: netdev@vger.kernel.org +S: Maintained +F: include/linux/rhashtable-types.h +F: include/linux/rhashtable.h +F: lib/rhashtable.c +F: lib/test_rhashtable.c + +RICOH R5C592 MEMORYSTICK DRIVER +M: Maxim Levitsky +S: Maintained +F: drivers/memstick/host/r592.* + +RICOH SMARTMEDIA/XD DRIVER +M: Maxim Levitsky +S: Maintained +F: drivers/mtd/nand/raw/r852.c +F: drivers/mtd/nand/raw/r852.h + +RISC-V ARCHITECTURE +M: Paul Walmsley +M: Palmer Dabbelt +M: Albert Ou +L: linux-riscv@lists.infradead.org +S: Supported +P: Documentation/riscv/patch-acceptance.rst +T: git git://git.kernel.org/pub/scm/linux/kernel/git/riscv/linux.git +F: arch/riscv/ +N: riscv +K: riscv + +RISC-V/MICROCHIP POLARFIRE SOC SUPPORT +M: Lewis Hanly +L: linux-riscv@lists.infradead.org +S: Supported +F: drivers/mailbox/mailbox-mpfs.c +F: drivers/soc/microchip/ +F: include/soc/microchip/mpfs.h + +RNBD BLOCK DRIVERS +M: Md. Haris Iqbal +M: Jack Wang +L: linux-block@vger.kernel.org +S: Maintained +F: drivers/block/rnbd/ + +ROCCAT DRIVERS +M: Stefan Achatz +S: Maintained +W: http://sourceforge.net/projects/roccat/ +F: Documentation/ABI/*/sysfs-driver-hid-roccat* +F: drivers/hid/hid-roccat* +F: include/linux/hid-roccat* + +ROCKCHIP ISP V1 DRIVER +M: Helen Koike +M: Dafna Hirschfeld +L: linux-media@vger.kernel.org +L: linux-rockchip@lists.infradead.org +S: Maintained +F: Documentation/admin-guide/media/rkisp1.rst +F: Documentation/devicetree/bindings/media/rockchip-isp1.yaml +F: Documentation/userspace-api/media/v4l/pixfmt-meta-rkisp1.rst +F: drivers/media/platform/rockchip/rkisp1 +F: include/uapi/linux/rkisp1-config.h + +ROCKCHIP RASTER 2D GRAPHIC ACCELERATION UNIT DRIVER +M: Jacob Chen +M: Ezequiel Garcia +L: linux-media@vger.kernel.org +L: linux-rockchip@lists.infradead.org +S: Maintained +F: Documentation/devicetree/bindings/media/rockchip-rga.yaml +F: drivers/media/platform/rockchip/rga/ + +ROCKCHIP VIDEO DECODER DRIVER +M: Ezequiel Garcia +L: linux-media@vger.kernel.org +L: linux-rockchip@lists.infradead.org +S: Maintained +F: Documentation/devicetree/bindings/media/rockchip,vdec.yaml +F: drivers/staging/media/rkvdec/ + +ROCKER DRIVER +M: Jiri Pirko +L: netdev@vger.kernel.org +S: Supported +F: drivers/net/ethernet/rocker/ + +ROCKETPORT EXPRESS/INFINITY DRIVER +M: Kevin Cernekee +L: linux-serial@vger.kernel.org +S: Odd Fixes +F: drivers/tty/serial/rp2.* + +ROHM BD99954 CHARGER IC +R: Matti Vaittinen +L: linux-power@fi.rohmeurope.com +S: Supported +F: drivers/power/supply/bd99954-charger.c +F: drivers/power/supply/bd99954-charger.h + +ROHM BH1750 AMBIENT LIGHT SENSOR DRIVER +M: Tomasz Duszynski +S: Maintained +F: Documentation/devicetree/bindings/iio/light/bh1750.yaml +F: drivers/iio/light/bh1750.c + +ROHM MULTIFUNCTION BD9571MWV-M PMIC DEVICE DRIVERS +M: Marek Vasut +L: linux-kernel@vger.kernel.org +L: linux-renesas-soc@vger.kernel.org +S: Supported +F: Documentation/devicetree/bindings/mfd/bd9571mwv.txt +F: drivers/gpio/gpio-bd9571mwv.c +F: drivers/mfd/bd9571mwv.c +F: drivers/regulator/bd9571mwv-regulator.c +F: include/linux/mfd/bd9571mwv.h + +ROHM POWER MANAGEMENT IC DEVICE DRIVERS +R: Matti Vaittinen +L: linux-power@fi.rohmeurope.com +S: Supported +F: Documentation/devicetree/bindings/mfd/rohm,bd70528-pmic.txt +F: Documentation/devicetree/bindings/regulator/rohm,bd70528-regulator.txt +F: drivers/clk/clk-bd718x7.c +F: drivers/gpio/gpio-bd70528.c +F: drivers/gpio/gpio-bd71815.c +F: drivers/gpio/gpio-bd71828.c +F: drivers/mfd/rohm-bd70528.c +F: drivers/mfd/rohm-bd71828.c +F: drivers/mfd/rohm-bd718x7.c +F: drivers/mfd/rohm-bd9576.c +F: drivers/power/supply/bd70528-charger.c +F: drivers/regulator/bd70528-regulator.c +F: drivers/regulator/bd71815-regulator.c +F: drivers/regulator/bd71828-regulator.c +F: drivers/regulator/bd718x7-regulator.c +F: drivers/regulator/bd9576-regulator.c +F: drivers/regulator/rohm-regulator.c +F: drivers/rtc/rtc-bd70528.c +F: drivers/watchdog/bd70528_wdt.c +F: drivers/watchdog/bd9576_wdt.c +F: include/linux/mfd/rohm-bd70528.h +F: include/linux/mfd/rohm-bd71815.h +F: include/linux/mfd/rohm-bd71828.h +F: include/linux/mfd/rohm-bd718x7.h +F: include/linux/mfd/rohm-bd957x.h +F: include/linux/mfd/rohm-generic.h +F: include/linux/mfd/rohm-shared.h + +ROSE NETWORK LAYER +M: Ralf Baechle +L: linux-hams@vger.kernel.org +S: Maintained +W: http://www.linux-ax25.org/ +F: include/net/rose.h +F: include/uapi/linux/rose.h +F: net/rose/ + +ROTATION DRIVER FOR ALLWINNER A83T +M: Jernej Skrabec +L: linux-media@vger.kernel.org +S: Maintained +T: git git://linuxtv.org/media_tree.git +F: Documentation/devicetree/bindings/media/allwinner,sun8i-a83t-de2-rotate.yaml +F: drivers/media/platform/sunxi/sun8i-rotate/ + +RTL2830 MEDIA DRIVER +M: Antti Palosaari +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +W: http://palosaari.fi/linux/ +Q: http://patchwork.linuxtv.org/project/linux-media/list/ +T: git git://linuxtv.org/anttip/media_tree.git +F: drivers/media/dvb-frontends/rtl2830* + +RTL2832 MEDIA DRIVER +M: Antti Palosaari +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +W: http://palosaari.fi/linux/ +Q: http://patchwork.linuxtv.org/project/linux-media/list/ +T: git git://linuxtv.org/anttip/media_tree.git +F: drivers/media/dvb-frontends/rtl2832* + +RTL2832_SDR MEDIA DRIVER +M: Antti Palosaari +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +W: http://palosaari.fi/linux/ +Q: http://patchwork.linuxtv.org/project/linux-media/list/ +T: git git://linuxtv.org/anttip/media_tree.git +F: drivers/media/dvb-frontends/rtl2832_sdr* + +RTL8180 WIRELESS DRIVER +L: linux-wireless@vger.kernel.org +S: Orphan +W: https://wireless.wiki.kernel.org/ +T: git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git +F: drivers/net/wireless/realtek/rtl818x/rtl8180/ + +RTL8187 WIRELESS DRIVER +M: Herton Ronaldo Krzesinski +M: Hin-Tak Leung +M: Larry Finger +L: linux-wireless@vger.kernel.org +S: Maintained +W: https://wireless.wiki.kernel.org/ +T: git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git +F: drivers/net/wireless/realtek/rtl818x/rtl8187/ + +RTL8XXXU WIRELESS DRIVER (rtl8xxxu) +M: Jes Sorensen +L: linux-wireless@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/jes/linux.git rtl8xxxu-devel +F: drivers/net/wireless/realtek/rtl8xxxu/ + +RTRS TRANSPORT DRIVERS +M: Md. Haris Iqbal +M: Jack Wang +L: linux-rdma@vger.kernel.org +S: Maintained +F: drivers/infiniband/ulp/rtrs/ + +RXRPC SOCKETS (AF_RXRPC) +M: David Howells +M: Marc Dionne +L: linux-afs@lists.infradead.org +S: Supported +W: https://www.infradead.org/~dhowells/kafs/ +F: Documentation/networking/rxrpc.rst +F: include/keys/rxrpc-type.h +F: include/net/af_rxrpc.h +F: include/trace/events/rxrpc.h +F: include/uapi/linux/rxrpc.h +F: net/rxrpc/ + +S3 SAVAGE FRAMEBUFFER DRIVER +M: Antonino Daplas +L: linux-fbdev@vger.kernel.org +S: Maintained +F: drivers/video/fbdev/savage/ + +S390 +M: Heiko Carstens +M: Vasily Gorbik +M: Christian Borntraeger +R: Alexander Gordeev +L: linux-s390@vger.kernel.org +S: Supported +W: http://www.ibm.com/developerworks/linux/linux390/ +T: git git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux.git +F: Documentation/driver-api/s390-drivers.rst +F: Documentation/s390/ +F: arch/s390/ +F: drivers/s390/ + +S390 COMMON I/O LAYER +M: Vineeth Vijayan +M: Peter Oberparleiter +L: linux-s390@vger.kernel.org +S: Supported +W: http://www.ibm.com/developerworks/linux/linux390/ +F: drivers/s390/cio/ + +S390 DASD DRIVER +M: Stefan Haberland +M: Jan Hoeppner +L: linux-s390@vger.kernel.org +S: Supported +W: http://www.ibm.com/developerworks/linux/linux390/ +F: block/partitions/ibm.c +F: drivers/s390/block/dasd* +F: include/linux/dasd_mod.h + +S390 IOMMU (PCI) +M: Matthew Rosato +M: Gerald Schaefer +L: linux-s390@vger.kernel.org +S: Supported +W: http://www.ibm.com/developerworks/linux/linux390/ +F: drivers/iommu/s390-iommu.c + +S390 IUCV NETWORK LAYER +M: Julian Wiedmann +M: Karsten Graul +L: linux-s390@vger.kernel.org +L: netdev@vger.kernel.org +S: Supported +W: http://www.ibm.com/developerworks/linux/linux390/ +F: drivers/s390/net/*iucv* +F: include/net/iucv/ +F: net/iucv/ + +S390 NETWORK DRIVERS +M: Julian Wiedmann +M: Karsten Graul +L: linux-s390@vger.kernel.org +L: netdev@vger.kernel.org +S: Supported +W: http://www.ibm.com/developerworks/linux/linux390/ +F: drivers/s390/net/ + +S390 PCI SUBSYSTEM +M: Niklas Schnelle +M: Gerald Schaefer +L: linux-s390@vger.kernel.org +S: Supported +W: http://www.ibm.com/developerworks/linux/linux390/ +F: arch/s390/pci/ +F: drivers/pci/hotplug/s390_pci_hpc.c +F: Documentation/s390/pci.rst + +S390 VFIO AP DRIVER +M: Tony Krowiak +M: Halil Pasic +M: Jason Herne +L: linux-s390@vger.kernel.org +S: Supported +W: http://www.ibm.com/developerworks/linux/linux390/ +F: Documentation/s390/vfio-ap.rst +F: drivers/s390/crypto/vfio_ap_drv.c +F: drivers/s390/crypto/vfio_ap_ops.c +F: drivers/s390/crypto/vfio_ap_private.h + +S390 VFIO-CCW DRIVER +M: Eric Farman +M: Matthew Rosato +R: Halil Pasic +L: linux-s390@vger.kernel.org +L: kvm@vger.kernel.org +S: Supported +F: Documentation/s390/vfio-ccw.rst +F: drivers/s390/cio/vfio_ccw* +F: include/uapi/linux/vfio_ccw.h + +S390 VFIO-PCI DRIVER +M: Matthew Rosato +M: Eric Farman +L: linux-s390@vger.kernel.org +L: kvm@vger.kernel.org +S: Supported +F: drivers/vfio/pci/vfio_pci_zdev.c +F: include/uapi/linux/vfio_zdev.h + +S390 ZCRYPT DRIVER +M: Harald Freudenberger +L: linux-s390@vger.kernel.org +S: Supported +W: http://www.ibm.com/developerworks/linux/linux390/ +F: drivers/s390/crypto/ + +S390 ZFCP DRIVER +M: Steffen Maier +M: Benjamin Block +L: linux-s390@vger.kernel.org +S: Supported +W: http://www.ibm.com/developerworks/linux/linux390/ +F: drivers/s390/scsi/zfcp_* + +S3C ADC BATTERY DRIVER +M: Krzysztof Kozlowski +L: linux-samsung-soc@vger.kernel.org +S: Odd Fixes +F: drivers/power/supply/s3c_adc_battery.c +F: include/linux/s3c_adc_battery.h + +S3C24XX SD/MMC Driver +M: Ben Dooks +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Supported +F: drivers/mmc/host/s3cmci.* + +SAA6588 RDS RECEIVER DRIVER +M: Hans Verkuil +L: linux-media@vger.kernel.org +S: Odd Fixes +W: https://linuxtv.org +T: git git://linuxtv.org/media_tree.git +F: drivers/media/i2c/saa6588* + +SAA7134 VIDEO4LINUX DRIVER +M: Mauro Carvalho Chehab +L: linux-media@vger.kernel.org +S: Odd fixes +W: https://linuxtv.org +T: git git://linuxtv.org/media_tree.git +F: Documentation/driver-api/media/drivers/saa7134* +F: drivers/media/pci/saa7134/ + +SAA7146 VIDEO4LINUX-2 DRIVER +M: Hans Verkuil +L: linux-media@vger.kernel.org +S: Maintained +T: git git://linuxtv.org/media_tree.git +F: drivers/media/common/saa7146/ +F: drivers/media/pci/saa7146/ +F: include/media/drv-intf/saa7146* + +SAFESETID SECURITY MODULE +M: Micah Morton +S: Supported +F: Documentation/admin-guide/LSM/SafeSetID.rst +F: security/safesetid/ + +SAMSUNG AUDIO (ASoC) DRIVERS +M: Krzysztof Kozlowski +M: Sylwester Nawrocki +L: alsa-devel@alsa-project.org (moderated for non-subscribers) +S: Supported +F: Documentation/devicetree/bindings/sound/samsung* +F: sound/soc/samsung/ + +SAMSUNG EXYNOS PSEUDO RANDOM NUMBER GENERATOR (RNG) DRIVER +M: Krzysztof Kozlowski +L: linux-crypto@vger.kernel.org +L: linux-samsung-soc@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/rng/samsung,exynos4-rng.yaml +F: drivers/crypto/exynos-rng.c + +SAMSUNG EXYNOS TRUE RANDOM NUMBER GENERATOR (TRNG) DRIVER +M: Łukasz Stelmach +L: linux-samsung-soc@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/rng/samsung,exynos5250-trng.yaml +F: drivers/char/hw_random/exynos-trng.c + +SAMSUNG FRAMEBUFFER DRIVER +M: Jingoo Han +L: linux-fbdev@vger.kernel.org +S: Maintained +F: drivers/video/fbdev/s3c-fb.c + +SAMSUNG INTERCONNECT DRIVERS +M: Sylwester Nawrocki +M: Artur Świgoń +L: linux-pm@vger.kernel.org +L: linux-samsung-soc@vger.kernel.org +S: Supported +F: drivers/interconnect/samsung/ + +SAMSUNG LAPTOP DRIVER +M: Corentin Chary +L: platform-driver-x86@vger.kernel.org +S: Maintained +F: drivers/platform/x86/samsung-laptop.c + +SAMSUNG MULTIFUNCTION PMIC DEVICE DRIVERS +M: Krzysztof Kozlowski +M: Bartlomiej Zolnierkiewicz +L: linux-kernel@vger.kernel.org +L: linux-samsung-soc@vger.kernel.org +S: Supported +F: Documentation/devicetree/bindings/clock/samsung,s2mps11.txt +F: Documentation/devicetree/bindings/mfd/samsung,sec-core.txt +F: Documentation/devicetree/bindings/regulator/samsung,s2m*.txt +F: Documentation/devicetree/bindings/regulator/samsung,s5m*.txt +F: drivers/clk/clk-s2mps11.c +F: drivers/mfd/sec*.c +F: drivers/regulator/s2m*.c +F: drivers/regulator/s5m*.c +F: drivers/rtc/rtc-s5m.c +F: include/linux/mfd/samsung/ + +SAMSUNG S3C24XX/S3C64XX SOC SERIES CAMIF DRIVER +M: Sylwester Nawrocki +L: linux-media@vger.kernel.org +L: linux-samsung-soc@vger.kernel.org +S: Maintained +F: drivers/media/platform/s3c-camif/ +F: include/media/drv-intf/s3c_camif.h + +SAMSUNG S3FWRN5 NFC DRIVER +M: Krzysztof Kozlowski +M: Krzysztof Opasiak +L: linux-nfc@lists.01.org (subscribers-only) +S: Maintained +F: Documentation/devicetree/bindings/net/nfc/samsung,s3fwrn5.yaml +F: drivers/nfc/s3fwrn5 + +SAMSUNG S5C73M3 CAMERA DRIVER +M: Andrzej Hajda +L: linux-media@vger.kernel.org +S: Supported +F: drivers/media/i2c/s5c73m3/* + +SAMSUNG S5K5BAF CAMERA DRIVER +M: Andrzej Hajda +L: linux-media@vger.kernel.org +S: Supported +F: drivers/media/i2c/s5k5baf.c + +SAMSUNG S5P Security SubSystem (SSS) DRIVER +M: Krzysztof Kozlowski +M: Vladimir Zapolskiy +L: linux-crypto@vger.kernel.org +L: linux-samsung-soc@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/crypto/samsung-slimsss.yaml +F: Documentation/devicetree/bindings/crypto/samsung-sss.yaml +F: drivers/crypto/s5p-sss.c + +SAMSUNG S5P/EXYNOS4 SOC SERIES CAMERA SUBSYSTEM DRIVERS +M: Sylwester Nawrocki +L: linux-media@vger.kernel.org +S: Supported +Q: https://patchwork.linuxtv.org/project/linux-media/list/ +F: drivers/media/platform/exynos4-is/ + +SAMSUNG SOC CLOCK DRIVERS +M: Sylwester Nawrocki +M: Tomasz Figa +M: Chanwoo Choi +L: linux-samsung-soc@vger.kernel.org +S: Supported +T: git git://git.kernel.org/pub/scm/linux/kernel/git/snawrocki/clk.git +F: Documentation/devicetree/bindings/clock/exynos*.txt +F: Documentation/devicetree/bindings/clock/samsung,*.yaml +F: Documentation/devicetree/bindings/clock/samsung,s3c* +F: Documentation/devicetree/bindings/clock/samsung,s5p* +F: drivers/clk/samsung/ +F: include/dt-bindings/clock/exynos*.h +F: include/dt-bindings/clock/s3c*.h +F: include/dt-bindings/clock/s5p*.h +F: include/dt-bindings/clock/samsung,*.h +F: include/linux/clk/samsung.h +F: include/linux/platform_data/clk-s3c2410.h + +SAMSUNG SPI DRIVERS +M: Krzysztof Kozlowski +M: Andi Shyti +L: linux-spi@vger.kernel.org +L: linux-samsung-soc@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/spi/spi-samsung.txt +F: drivers/spi/spi-s3c* +F: include/linux/platform_data/spi-s3c64xx.h +F: include/linux/spi/s3c24xx-fiq.h + +SAMSUNG SXGBE DRIVERS +M: Byungho An +L: netdev@vger.kernel.org +S: Supported +F: drivers/net/ethernet/samsung/sxgbe/ + +SAMSUNG THERMAL DRIVER +M: Bartlomiej Zolnierkiewicz +L: linux-pm@vger.kernel.org +L: linux-samsung-soc@vger.kernel.org +S: Supported +T: git https://github.com/lmajewski/linux-samsung-thermal.git +F: drivers/thermal/samsung/ + +SAMSUNG USB2 PHY DRIVER +M: Sylwester Nawrocki +L: linux-kernel@vger.kernel.org +S: Supported +F: Documentation/devicetree/bindings/phy/samsung-phy.txt +F: Documentation/driver-api/phy/samsung-usb2.rst +F: drivers/phy/samsung/phy-exynos4210-usb2.c +F: drivers/phy/samsung/phy-exynos4x12-usb2.c +F: drivers/phy/samsung/phy-exynos5250-usb2.c +F: drivers/phy/samsung/phy-s5pv210-usb2.c +F: drivers/phy/samsung/phy-samsung-usb2.c +F: drivers/phy/samsung/phy-samsung-usb2.h + +SANCLOUD BEAGLEBONE ENHANCED DEVICE TREE +M: Paul Barker +R: Marc Murphy +S: Supported +F: arch/arm/boot/dts/am335x-sancloud* + +SC1200 WDT DRIVER +M: Zwane Mwaikambo +S: Maintained +F: drivers/watchdog/sc1200wdt.c + +SCHEDULER +M: Ingo Molnar +M: Peter Zijlstra +M: Juri Lelli (SCHED_DEADLINE) +M: Vincent Guittot (SCHED_NORMAL) +R: Dietmar Eggemann (SCHED_NORMAL) +R: Steven Rostedt (SCHED_FIFO/SCHED_RR) +R: Ben Segall (CONFIG_CFS_BANDWIDTH) +R: Mel Gorman (CONFIG_NUMA_BALANCING) +R: Daniel Bristot de Oliveira (SCHED_DEADLINE) +L: linux-kernel@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git sched/core +F: include/linux/preempt.h +F: include/linux/sched.h +F: include/linux/wait.h +F: include/uapi/linux/sched.h +F: kernel/sched/ + +SCR24X CHIP CARD INTERFACE DRIVER +M: Lubomir Rintel +S: Supported +F: drivers/char/pcmcia/scr24x_cs.c + +SCSI RDMA PROTOCOL (SRP) INITIATOR +M: Bart Van Assche +L: linux-rdma@vger.kernel.org +S: Supported +Q: http://patchwork.kernel.org/project/linux-rdma/list/ +F: drivers/infiniband/ulp/srp/ +F: include/scsi/srp.h + +SCSI RDMA PROTOCOL (SRP) TARGET +M: Bart Van Assche +L: linux-rdma@vger.kernel.org +L: target-devel@vger.kernel.org +S: Supported +Q: http://patchwork.kernel.org/project/linux-rdma/list/ +F: drivers/infiniband/ulp/srpt/ + +SCSI SG DRIVER +M: Doug Gilbert +L: linux-scsi@vger.kernel.org +S: Maintained +W: http://sg.danny.cz/sg +F: Documentation/scsi/scsi-generic.rst +F: drivers/scsi/sg.c +F: include/scsi/sg.h + +SCSI SUBSYSTEM +M: "James E.J. Bottomley" +M: "Martin K. Petersen" +L: linux-scsi@vger.kernel.org +S: Maintained +Q: https://patchwork.kernel.org/project/linux-scsi/list/ +T: git git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi.git +T: git git://git.kernel.org/pub/scm/linux/kernel/git/mkp/scsi.git +F: Documentation/devicetree/bindings/scsi/ +F: drivers/scsi/ +F: include/scsi/ + +SCSI TAPE DRIVER +M: Kai Mäkisara +L: linux-scsi@vger.kernel.org +S: Maintained +F: Documentation/scsi/st.rst +F: drivers/scsi/st.* +F: drivers/scsi/st_*.h + +SCSI TARGET CORE USER DRIVER +M: Bodo Stroesser +L: linux-scsi@vger.kernel.org +L: target-devel@vger.kernel.org +S: Supported +F: Documentation/target/tcmu-design.rst +F: drivers/target/target_core_user.c +F: include/uapi/linux/target_core_user.h + +SCSI TARGET SUBSYSTEM +M: "Martin K. Petersen" +L: linux-scsi@vger.kernel.org +L: target-devel@vger.kernel.org +S: Supported +W: http://www.linux-iscsi.org +Q: https://patchwork.kernel.org/project/target-devel/list/ +T: git git://git.kernel.org/pub/scm/linux/kernel/git/mkp/scsi.git +F: Documentation/target/ +F: drivers/target/ +F: include/target/ + +SCTP PROTOCOL +M: Vlad Yasevich +M: Neil Horman +M: Marcelo Ricardo Leitner +L: linux-sctp@vger.kernel.org +S: Maintained +W: http://lksctp.sourceforge.net +F: Documentation/networking/sctp.rst +F: include/linux/sctp.h +F: include/net/sctp/ +F: include/uapi/linux/sctp.h +F: net/sctp/ + +SCx200 CPU SUPPORT +M: Jim Cromie +S: Odd Fixes +F: Documentation/i2c/busses/scx200_acb.rst +F: arch/x86/platform/scx200/ +F: drivers/i2c/busses/scx200* +F: drivers/mtd/maps/scx200_docflash.c +F: drivers/watchdog/scx200_wdt.c +F: include/linux/scx200.h + +SCx200 GPIO DRIVER +M: Jim Cromie +S: Maintained +F: drivers/char/scx200_gpio.c +F: include/linux/scx200_gpio.h + +SCx200 HRT CLOCKSOURCE DRIVER +M: Jim Cromie +S: Maintained +F: drivers/clocksource/scx200_hrt.c + +SDRICOH_CS MMC/SD HOST CONTROLLER INTERFACE DRIVER +M: Sascha Sommer +L: sdricohcs-devel@lists.sourceforge.net (subscribers-only) +S: Maintained +F: drivers/mmc/host/sdricoh_cs.c + +SECO BOARDS CEC DRIVER +M: Ettore Chimenti +S: Maintained +F: drivers/media/cec/platform/seco/seco-cec.c +F: drivers/media/cec/platform/seco/seco-cec.h + +SECURE COMPUTING +M: Kees Cook +R: Andy Lutomirski +R: Will Drewry +S: Supported +T: git git://git.kernel.org/pub/scm/linux/kernel/git/kees/linux.git seccomp +F: Documentation/userspace-api/seccomp_filter.rst +F: include/linux/seccomp.h +F: include/uapi/linux/seccomp.h +F: kernel/seccomp.c +F: tools/testing/selftests/kselftest_harness.h +F: tools/testing/selftests/seccomp/* +K: \bsecure_computing +K: \bTIF_SECCOMP\b + +SECURE DIGITAL HOST CONTROLLER INTERFACE (SDHCI) Broadcom BRCMSTB DRIVER +M: Al Cooper +L: linux-mmc@vger.kernel.org +L: bcm-kernel-feedback-list@broadcom.com +S: Maintained +F: drivers/mmc/host/sdhci-brcmstb* + +SECURE DIGITAL HOST CONTROLLER INTERFACE (SDHCI) DRIVER +M: Adrian Hunter +L: linux-mmc@vger.kernel.org +S: Maintained +F: drivers/mmc/host/sdhci* +F: include/linux/mmc/sdhci* + +SECURE DIGITAL HOST CONTROLLER INTERFACE (SDHCI) MICROCHIP DRIVER +M: Eugen Hristev +L: linux-mmc@vger.kernel.org +S: Supported +F: drivers/mmc/host/sdhci-of-at91.c + +SECURE DIGITAL HOST CONTROLLER INTERFACE (SDHCI) SAMSUNG DRIVER +M: Ben Dooks +M: Jaehoon Chung +L: linux-mmc@vger.kernel.org +S: Maintained +F: drivers/mmc/host/sdhci-s3c* + +SECURE DIGITAL HOST CONTROLLER INTERFACE (SDHCI) ST SPEAR DRIVER +M: Viresh Kumar +L: linux-mmc@vger.kernel.org +S: Maintained +F: drivers/mmc/host/sdhci-spear.c + +SECURE DIGITAL HOST CONTROLLER INTERFACE (SDHCI) TI OMAP DRIVER +M: Kishon Vijay Abraham I +L: linux-mmc@vger.kernel.org +S: Maintained +F: drivers/mmc/host/sdhci-omap.c + +SECURE ENCRYPTING DEVICE (SED) OPAL DRIVER +M: Jonathan Derrick +M: Revanth Rajashekar +L: linux-block@vger.kernel.org +S: Supported +F: block/opal_proto.h +F: block/sed* +F: include/linux/sed* +F: include/uapi/linux/sed* + +SECURITY CONTACT +M: Security Officers +S: Supported +F: Documentation/admin-guide/security-bugs.rst + +SECURITY SUBSYSTEM +M: James Morris +M: "Serge E. Hallyn" +L: linux-security-module@vger.kernel.org (suggested Cc:) +S: Supported +W: http://kernsec.org/ +T: git git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/linux-security.git +F: security/ +X: security/selinux/ + +SELINUX SECURITY MODULE +M: Paul Moore +M: Stephen Smalley +M: Eric Paris +L: selinux@vger.kernel.org +S: Supported +W: https://selinuxproject.org +W: https://github.com/SELinuxProject +T: git git://git.kernel.org/pub/scm/linux/kernel/git/pcmoore/selinux.git +F: Documentation/ABI/obsolete/sysfs-selinux-checkreqprot +F: Documentation/ABI/obsolete/sysfs-selinux-disable +F: Documentation/admin-guide/LSM/SELinux.rst +F: include/trace/events/avc.h +F: include/uapi/linux/selinux_netlink.h +F: scripts/selinux/ +F: security/selinux/ + +SENSABLE PHANTOM +M: Jiri Slaby +S: Maintained +F: drivers/misc/phantom.c +F: include/uapi/linux/phantom.h + +SENSIRION SCD30 CARBON DIOXIDE SENSOR DRIVER +M: Tomasz Duszynski +S: Maintained +F: Documentation/devicetree/bindings/iio/chemical/sensirion,scd30.yaml +F: drivers/iio/chemical/scd30.h +F: drivers/iio/chemical/scd30_core.c +F: drivers/iio/chemical/scd30_i2c.c +F: drivers/iio/chemical/scd30_serial.c + +SENSIRION SGP40 GAS SENSOR DRIVER +M: Andreas Klinger +S: Maintained +F: Documentation/ABI/testing/sysfs-bus-iio-chemical-sgp40 +F: drivers/iio/chemical/sgp40.c + +SENSIRION SPS30 AIR POLLUTION SENSOR DRIVER +M: Tomasz Duszynski +S: Maintained +F: Documentation/devicetree/bindings/iio/chemical/sensirion,sps30.yaml +F: drivers/iio/chemical/sps30.c +F: drivers/iio/chemical/sps30_i2c.c +F: drivers/iio/chemical/sps30_serial.c + +SERIAL DEVICE BUS +M: Rob Herring +L: linux-serial@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/serial/serial.yaml +F: drivers/tty/serdev/ +F: include/linux/serdev.h + +SERIAL DRIVERS +M: Greg Kroah-Hartman +L: linux-serial@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/serial/ +F: drivers/tty/serial/ + +SERIAL IR RECEIVER +M: Sean Young +L: linux-media@vger.kernel.org +S: Maintained +F: drivers/media/rc/serial_ir.c + +SERIAL LOW-POWER INTER-CHIP MEDIA BUS (SLIMbus) +M: Srinivas Kandagatla +L: alsa-devel@alsa-project.org (moderated for non-subscribers) +S: Maintained +F: Documentation/devicetree/bindings/slimbus/ +F: drivers/slimbus/ +F: include/linux/slimbus.h + +SFC NETWORK DRIVER +M: Edward Cree +M: Martin Habets +L: netdev@vger.kernel.org +S: Supported +F: drivers/net/ethernet/sfc/ + +SFF/SFP/SFP+ MODULE SUPPORT +M: Russell King +L: netdev@vger.kernel.org +S: Maintained +F: drivers/net/phy/phylink.c +F: drivers/net/phy/sfp* +F: include/linux/mdio/mdio-i2c.h +F: include/linux/phylink.h +F: include/linux/sfp.h +K: phylink\.h|struct\s+phylink|\.phylink|>phylink_|phylink_(autoneg|clear|connect|create|destroy|disconnect|ethtool|helper|mac|mii|of|set|start|stop|test|validate) + +SGI GRU DRIVER +M: Dimitri Sivanich +S: Maintained +F: drivers/misc/sgi-gru/ + +SGI XP/XPC/XPNET DRIVER +M: Robin Holt +M: Steve Wahl +R: Mike Travis +S: Maintained +F: drivers/misc/sgi-xp/ + +SHARED MEMORY COMMUNICATIONS (SMC) SOCKETS +M: Karsten Graul +L: linux-s390@vger.kernel.org +S: Supported +W: http://www.ibm.com/developerworks/linux/linux390/ +F: net/smc/ + +SHARP GP2AP002A00F/GP2AP002S00F SENSOR DRIVER +M: Linus Walleij +L: linux-iio@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/jic23/iio.git +F: Documentation/devicetree/bindings/iio/light/sharp,gp2ap002.yaml +F: drivers/iio/light/gp2ap002.c + +SHARP RJ54N1CB0C SENSOR DRIVER +M: Jacopo Mondi +L: linux-media@vger.kernel.org +S: Odd fixes +T: git git://linuxtv.org/media_tree.git +F: drivers/media/i2c/rj54n1cb0c.c +F: include/media/i2c/rj54n1cb0c.h + +SH_VOU V4L2 OUTPUT DRIVER +L: linux-media@vger.kernel.org +S: Orphan +F: drivers/media/platform/sh_vou.c +F: include/media/drv-intf/sh_vou.h + +SI2157 MEDIA DRIVER +M: Antti Palosaari +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +W: http://palosaari.fi/linux/ +Q: http://patchwork.linuxtv.org/project/linux-media/list/ +T: git git://linuxtv.org/anttip/media_tree.git +F: drivers/media/tuners/si2157* + +SI2165 MEDIA DRIVER +M: Matthias Schwarzott +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +Q: http://patchwork.linuxtv.org/project/linux-media/list/ +F: drivers/media/dvb-frontends/si2165* + +SI2168 MEDIA DRIVER +M: Antti Palosaari +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +W: http://palosaari.fi/linux/ +Q: http://patchwork.linuxtv.org/project/linux-media/list/ +T: git git://linuxtv.org/anttip/media_tree.git +F: drivers/media/dvb-frontends/si2168* + +SI470X FM RADIO RECEIVER I2C DRIVER +M: Hans Verkuil +L: linux-media@vger.kernel.org +S: Odd Fixes +W: https://linuxtv.org +T: git git://linuxtv.org/media_tree.git +F: drivers/media/radio/si470x/radio-si470x-i2c.c + +SI470X FM RADIO RECEIVER USB DRIVER +M: Hans Verkuil +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +T: git git://linuxtv.org/media_tree.git +F: drivers/media/radio/si470x/radio-si470x-common.c +F: drivers/media/radio/si470x/radio-si470x-usb.c +F: drivers/media/radio/si470x/radio-si470x.h + +SI4713 FM RADIO TRANSMITTER I2C DRIVER +M: Eduardo Valentin +L: linux-media@vger.kernel.org +S: Odd Fixes +W: https://linuxtv.org +T: git git://linuxtv.org/media_tree.git +F: drivers/media/radio/si4713/si4713.? + +SI4713 FM RADIO TRANSMITTER PLATFORM DRIVER +M: Eduardo Valentin +L: linux-media@vger.kernel.org +S: Odd Fixes +W: https://linuxtv.org +T: git git://linuxtv.org/media_tree.git +F: drivers/media/radio/si4713/radio-platform-si4713.c + +SI4713 FM RADIO TRANSMITTER USB DRIVER +M: Hans Verkuil +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +T: git git://linuxtv.org/media_tree.git +F: drivers/media/radio/si4713/radio-usb-si4713.c + +SIANO DVB DRIVER +M: Mauro Carvalho Chehab +L: linux-media@vger.kernel.org +S: Odd fixes +W: https://linuxtv.org +T: git git://linuxtv.org/media_tree.git +F: drivers/media/common/siano/ +F: drivers/media/mmc/siano/ +F: drivers/media/usb/siano/ +F: drivers/media/usb/siano/ + +SIFIVE DRIVERS +M: Palmer Dabbelt +M: Paul Walmsley +L: linux-riscv@lists.infradead.org +S: Supported +T: git git://github.com/sifive/riscv-linux.git +N: sifive +K: [^@]sifive + +SIFIVE FU540 SYSTEM-ON-CHIP +M: Paul Walmsley +M: Palmer Dabbelt +L: linux-riscv@lists.infradead.org +S: Supported +T: git git://git.kernel.org/pub/scm/linux/kernel/git/pjw/sifive.git +N: fu540 +K: fu540 + +SIFIVE PDMA DRIVER +M: Green Wan +S: Maintained +F: Documentation/devicetree/bindings/dma/sifive,fu540-c000-pdma.yaml +F: drivers/dma/sf-pdma/ + +SILEAD TOUCHSCREEN DRIVER +M: Hans de Goede +L: linux-input@vger.kernel.org +L: platform-driver-x86@vger.kernel.org +S: Maintained +F: drivers/input/touchscreen/silead.c +F: drivers/platform/x86/touchscreen_dmi.c + +SILICON LABS WIRELESS DRIVERS (for WFxxx series) +M: Jérôme Pouiller +S: Supported +F: drivers/staging/wfx/ + +SILICON MOTION SM712 FRAME BUFFER DRIVER +M: Sudip Mukherjee +M: Teddy Wang +M: Sudip Mukherjee +L: linux-fbdev@vger.kernel.org +S: Maintained +F: Documentation/fb/sm712fb.rst +F: drivers/video/fbdev/sm712* + +SILVACO I3C DUAL-ROLE MASTER +M: Miquel Raynal +M: Conor Culhane +L: linux-i3c@lists.infradead.org +S: Maintained +F: Documentation/devicetree/bindings/i3c/silvaco,i3c-master.yaml +F: drivers/i3c/master/svc-i3c-master.c + +SIMPLEFB FB DRIVER +M: Hans de Goede +L: linux-fbdev@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/display/simple-framebuffer.yaml +F: drivers/video/fbdev/simplefb.c +F: include/linux/platform_data/simplefb.h + +SIMTEC EB110ATX (Chalice CATS) +M: Simtec Linux Team +S: Supported +W: http://www.simtec.co.uk/products/EB110ATX/ + +SIMTEC EB2410ITX (BAST) +M: Simtec Linux Team +S: Supported +W: http://www.simtec.co.uk/products/EB2410ITX/ +F: arch/arm/mach-s3c/bast-ide.c +F: arch/arm/mach-s3c/bast-irq.c +F: arch/arm/mach-s3c/mach-bast.c + +SIOX +M: Thorsten Scherer +M: Uwe Kleine-König +R: Pengutronix Kernel Team +S: Supported +F: drivers/gpio/gpio-siox.c +F: drivers/siox/* +F: include/trace/events/siox.h + +SIPHASH PRF ROUTINES +M: Jason A. Donenfeld +S: Maintained +F: include/linux/siphash.h +F: lib/siphash.c +F: lib/test_siphash.c + +SIS 190 ETHERNET DRIVER +M: Francois Romieu +L: netdev@vger.kernel.org +S: Maintained +F: drivers/net/ethernet/sis/sis190.c + +SIS 900/7016 FAST ETHERNET DRIVER +M: Daniele Venzano +L: netdev@vger.kernel.org +S: Maintained +W: http://www.brownhat.org/sis900.html +F: drivers/net/ethernet/sis/sis900.* + +SIS FRAMEBUFFER DRIVER +M: Thomas Winischhofer +S: Maintained +W: http://www.winischhofer.net/linuxsisvga.shtml +F: Documentation/fb/sisfb.rst +F: drivers/video/fbdev/sis/ +F: include/video/sisfb.h + +SIS I2C TOUCHSCREEN DRIVER +M: Mika Penttilä +L: linux-input@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/input/touchscreen/sis_i2c.txt +F: drivers/input/touchscreen/sis_i2c.c + +SIS USB2VGA DRIVER +M: Thomas Winischhofer +S: Maintained +W: http://www.winischhofer.at/linuxsisusbvga.shtml +F: drivers/usb/misc/sisusbvga/ + +SLAB ALLOCATOR +M: Christoph Lameter +M: Pekka Enberg +M: David Rientjes +M: Joonsoo Kim +M: Andrew Morton +M: Vlastimil Babka +L: linux-mm@kvack.org +S: Maintained +F: include/linux/sl?b*.h +F: mm/sl?b* + +SLEEPABLE READ-COPY UPDATE (SRCU) +M: Lai Jiangshan +M: "Paul E. McKenney" +M: Josh Triplett +R: Steven Rostedt +R: Mathieu Desnoyers +L: rcu@vger.kernel.org +S: Supported +W: http://www.rdrop.com/users/paulmck/RCU/ +T: git git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git dev +F: include/linux/srcu*.h +F: kernel/rcu/srcu*.c + +SMACK SECURITY MODULE +M: Casey Schaufler +L: linux-security-module@vger.kernel.org +S: Maintained +W: http://schaufler-ca.com +T: git git://github.com/cschaufler/smack-next +F: Documentation/admin-guide/LSM/Smack.rst +F: security/smack/ + +SMC91x ETHERNET DRIVER +M: Nicolas Pitre +S: Odd Fixes +F: drivers/net/ethernet/smsc/smc91x.* + +SECURE MONITOR CALL(SMC) CALLING CONVENTION (SMCCC) +M: Mark Rutland +M: Lorenzo Pieralisi +M: Sudeep Holla +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +F: drivers/firmware/smccc/ +F: include/linux/arm-smccc.h + +SMM665 HARDWARE MONITOR DRIVER +M: Guenter Roeck +L: linux-hwmon@vger.kernel.org +S: Maintained +F: Documentation/hwmon/smm665.rst +F: drivers/hwmon/smm665.c + +SMSC EMC2103 HARDWARE MONITOR DRIVER +M: Steve Glendinning +L: linux-hwmon@vger.kernel.org +S: Maintained +F: Documentation/hwmon/emc2103.rst +F: drivers/hwmon/emc2103.c + +SMSC SCH5627 HARDWARE MONITOR DRIVER +M: Hans de Goede +L: linux-hwmon@vger.kernel.org +S: Supported +F: Documentation/hwmon/sch5627.rst +F: drivers/hwmon/sch5627.c + +SMSC UFX6000 and UFX7000 USB to VGA DRIVER +M: Steve Glendinning +L: linux-fbdev@vger.kernel.org +S: Maintained +F: drivers/video/fbdev/smscufx.c + +SMSC47B397 HARDWARE MONITOR DRIVER +M: Jean Delvare +L: linux-hwmon@vger.kernel.org +S: Maintained +F: Documentation/hwmon/smsc47b397.rst +F: drivers/hwmon/smsc47b397.c + +SMSC911x ETHERNET DRIVER +M: Steve Glendinning +L: netdev@vger.kernel.org +S: Maintained +F: drivers/net/ethernet/smsc/smsc911x.* +F: include/linux/smsc911x.h + +SMSC9420 PCI ETHERNET DRIVER +M: Steve Glendinning +L: netdev@vger.kernel.org +S: Maintained +F: drivers/net/ethernet/smsc/smsc9420.* + +SOCIONEXT (SNI) AVE NETWORK DRIVER +M: Kunihiko Hayashi +L: netdev@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/net/socionext,uniphier-ave4.yaml +F: drivers/net/ethernet/socionext/sni_ave.c + +SOCIONEXT (SNI) NETSEC NETWORK DRIVER +M: Jassi Brar +M: Ilias Apalodimas +L: netdev@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/net/socionext-netsec.txt +F: drivers/net/ethernet/socionext/netsec.c + +SOCIONEXT (SNI) Synquacer SPI DRIVER +M: Masahisa Kojima +M: Jassi Brar +L: linux-spi@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/spi/spi-synquacer.txt +F: drivers/spi/spi-synquacer.c + +SOCIONEXT SYNQUACER I2C DRIVER +M: Ard Biesheuvel +L: linux-i2c@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/i2c/i2c-synquacer.txt +F: drivers/i2c/busses/i2c-synquacer.c + +SOCIONEXT UNIPHIER SOUND DRIVER +L: alsa-devel@alsa-project.org (moderated for non-subscribers) +S: Orphan +F: sound/soc/uniphier/ + +SOEKRIS NET48XX LED SUPPORT +M: Chris Boot +S: Maintained +F: drivers/leds/leds-net48xx.c + +SOFT-IWARP DRIVER (siw) +M: Bernard Metzler +L: linux-rdma@vger.kernel.org +S: Supported +F: drivers/infiniband/sw/siw/ +F: include/uapi/rdma/siw-abi.h + +SOFT-ROCE DRIVER (rxe) +M: Zhu Yanjun +L: linux-rdma@vger.kernel.org +S: Supported +F: drivers/infiniband/sw/rxe/ +F: include/uapi/rdma/rdma_user_rxe.h + +SOFTLOGIC 6x10 MPEG CODEC +M: Bluecherry Maintainers +M: Anton Sviridenko +M: Andrey Utkin +M: Ismael Luceno +L: linux-media@vger.kernel.org +S: Supported +F: drivers/media/pci/solo6x10/ + +SOFTWARE DELEGATED EXCEPTION INTERFACE (SDEI) +M: James Morse +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +F: Documentation/devicetree/bindings/arm/firmware/sdei.txt +F: drivers/firmware/arm_sdei.c +F: include/linux/arm_sdei.h +F: include/uapi/linux/arm_sdei.h + +SOFTWARE NODES +R: Andy Shevchenko +R: Heikki Krogerus +L: linux-acpi@vger.kernel.org +S: Maintained +F: drivers/base/swnode.c + +SOFTWARE RAID (Multiple Disks) SUPPORT +M: Song Liu +L: linux-raid@vger.kernel.org +S: Supported +T: git git://git.kernel.org/pub/scm/linux/kernel/git/song/md.git +F: drivers/md/Kconfig +F: drivers/md/Makefile +F: drivers/md/md* +F: drivers/md/raid* +F: include/linux/raid/ +F: include/uapi/linux/raid/ + +SOLIDRUN CLEARFOG SUPPORT +M: Russell King +S: Maintained +F: arch/arm/boot/dts/armada-388-clearfog* +F: arch/arm/boot/dts/armada-38x-solidrun-* + +SOLIDRUN CUBOX-I/HUMMINGBOARD SUPPORT +M: Russell King +S: Maintained +F: arch/arm/boot/dts/imx6*-cubox-i* +F: arch/arm/boot/dts/imx6*-hummingboard* +F: arch/arm/boot/dts/imx6*-sr-* + +SONIC NETWORK DRIVER +M: Thomas Bogendoerfer +L: netdev@vger.kernel.org +S: Maintained +F: drivers/net/ethernet/natsemi/sonic.* + +SONICS SILICON BACKPLANE DRIVER (SSB) +M: Michael Buesch +L: linux-wireless@vger.kernel.org +S: Maintained +F: drivers/ssb/ +F: include/linux/ssb/ + +SONY IMX208 SENSOR DRIVER +M: Sakari Ailus +L: linux-media@vger.kernel.org +S: Maintained +T: git git://linuxtv.org/media_tree.git +F: drivers/media/i2c/imx208.c + +SONY IMX214 SENSOR DRIVER +M: Ricardo Ribalda +L: linux-media@vger.kernel.org +S: Maintained +T: git git://linuxtv.org/media_tree.git +F: Documentation/devicetree/bindings/media/i2c/sony,imx214.yaml +F: drivers/media/i2c/imx214.c + +SONY IMX219 SENSOR DRIVER +M: Dave Stevenson +L: linux-media@vger.kernel.org +S: Maintained +T: git git://linuxtv.org/media_tree.git +F: Documentation/devicetree/bindings/media/i2c/imx219.yaml +F: drivers/media/i2c/imx219.c + +SONY IMX258 SENSOR DRIVER +M: Sakari Ailus +L: linux-media@vger.kernel.org +S: Maintained +T: git git://linuxtv.org/media_tree.git +F: Documentation/devicetree/bindings/media/i2c/imx258.yaml +F: drivers/media/i2c/imx258.c + +SONY IMX274 SENSOR DRIVER +M: Leon Luo +L: linux-media@vger.kernel.org +S: Maintained +T: git git://linuxtv.org/media_tree.git +F: Documentation/devicetree/bindings/media/i2c/sony,imx274.yaml +F: drivers/media/i2c/imx274.c + +SONY IMX290 SENSOR DRIVER +M: Manivannan Sadhasivam +L: linux-media@vger.kernel.org +S: Maintained +T: git git://linuxtv.org/media_tree.git +F: Documentation/devicetree/bindings/media/i2c/imx290.txt +F: drivers/media/i2c/imx290.c + +SONY IMX319 SENSOR DRIVER +M: Bingbu Cao +L: linux-media@vger.kernel.org +S: Maintained +T: git git://linuxtv.org/media_tree.git +F: drivers/media/i2c/imx319.c + +SONY IMX334 SENSOR DRIVER +M: Paul J. Murphy +M: Daniele Alessandrelli +L: linux-media@vger.kernel.org +S: Maintained +T: git git://linuxtv.org/media_tree.git +F: Documentation/devicetree/bindings/media/i2c/sony,imx334.yaml +F: drivers/media/i2c/imx334.c + +SONY IMX335 SENSOR DRIVER +M: Paul J. Murphy +M: Daniele Alessandrelli +L: linux-media@vger.kernel.org +S: Maintained +T: git git://linuxtv.org/media_tree.git +F: Documentation/devicetree/bindings/media/i2c/sony,imx335.yaml +F: drivers/media/i2c/imx335.c + +SONY IMX355 SENSOR DRIVER +M: Tianshu Qiu +L: linux-media@vger.kernel.org +S: Maintained +T: git git://linuxtv.org/media_tree.git +F: drivers/media/i2c/imx355.c + +SONY IMX412 SENSOR DRIVER +M: Paul J. Murphy +M: Daniele Alessandrelli +L: linux-media@vger.kernel.org +S: Maintained +T: git git://linuxtv.org/media_tree.git +F: Documentation/devicetree/bindings/media/i2c/sony,imx412.yaml +F: drivers/media/i2c/imx412.c + +SONY MEMORYSTICK SUBSYSTEM +M: Maxim Levitsky +M: Alex Dubov +M: Ulf Hansson +L: linux-mmc@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/ulfh/mmc.git +F: drivers/memstick/ +F: include/linux/memstick.h + +SONY VAIO CONTROL DEVICE DRIVER +M: Mattia Dongili +L: platform-driver-x86@vger.kernel.org +S: Maintained +W: http://www.linux.it/~malattia/wiki/index.php/Sony_drivers +F: Documentation/admin-guide/laptops/sony-laptop.rst +F: drivers/char/sonypi.c +F: drivers/platform/x86/sony-laptop.c +F: include/linux/sony-laptop.h + +SOUND +M: Jaroslav Kysela +M: Takashi Iwai +L: alsa-devel@alsa-project.org (moderated for non-subscribers) +S: Maintained +W: http://www.alsa-project.org/ +Q: http://patchwork.kernel.org/project/alsa-devel/list/ +T: git git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound.git +F: Documentation/sound/ +F: include/sound/ +F: include/uapi/sound/ +F: sound/ + +SOUND - COMPRESSED AUDIO +M: Vinod Koul +L: alsa-devel@alsa-project.org (moderated for non-subscribers) +S: Supported +T: git git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound.git +F: Documentation/sound/designs/compress-offload.rst +F: include/sound/compress_driver.h +F: include/uapi/sound/compress_* +F: sound/core/compress_offload.c +F: sound/soc/soc-compress.c + +SOUND - DMAENGINE HELPERS +M: Lars-Peter Clausen +S: Supported +F: include/sound/dmaengine_pcm.h +F: sound/core/pcm_dmaengine.c +F: sound/soc/soc-generic-dmaengine-pcm.c + +SOUND - SOC LAYER / DYNAMIC AUDIO POWER MANAGEMENT (ASoC) +M: Liam Girdwood +M: Mark Brown +L: alsa-devel@alsa-project.org (moderated for non-subscribers) +S: Supported +W: http://alsa-project.org/main/index.php/ASoC +T: git git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git +F: Documentation/devicetree/bindings/sound/ +F: Documentation/sound/soc/ +F: include/dt-bindings/sound/ +F: include/sound/soc* +F: sound/soc/ + +SOUND - SOUND OPEN FIRMWARE (SOF) DRIVERS +M: Pierre-Louis Bossart +M: Liam Girdwood +M: Ranjani Sridharan +M: Kai Vehmanen +M: Daniel Baluta +L: sound-open-firmware@alsa-project.org (moderated for non-subscribers) +S: Supported +W: https://github.com/thesofproject/linux/ +F: sound/soc/sof/ + +SOUNDWIRE SUBSYSTEM +M: Vinod Koul +M: Bard Liao +R: Pierre-Louis Bossart +R: Sanyog Kale +L: alsa-devel@alsa-project.org (moderated for non-subscribers) +S: Supported +T: git git://git.kernel.org/pub/scm/linux/kernel/git/vkoul/soundwire.git +F: Documentation/driver-api/soundwire/ +F: drivers/soundwire/ +F: include/linux/soundwire/ + +SP2 MEDIA DRIVER +M: Olli Salonen +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +Q: http://patchwork.linuxtv.org/project/linux-media/list/ +F: drivers/media/dvb-frontends/sp2* + +SPARC + UltraSPARC (sparc/sparc64) +M: "David S. Miller" +L: sparclinux@vger.kernel.org +S: Maintained +Q: http://patchwork.ozlabs.org/project/sparclinux/list/ +T: git git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc.git +T: git git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-next.git +F: arch/sparc/ +F: drivers/sbus/ + +SPARC SERIAL DRIVERS +M: "David S. Miller" +L: sparclinux@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc.git +T: git git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-next.git +F: drivers/tty/serial/suncore.c +F: drivers/tty/serial/sunhv.c +F: drivers/tty/serial/sunsab.c +F: drivers/tty/serial/sunsab.h +F: drivers/tty/serial/sunsu.c +F: drivers/tty/serial/sunzilog.c +F: drivers/tty/serial/sunzilog.h +F: drivers/tty/vcc.c +F: include/linux/sunserialcore.h + +SPARSE CHECKER +M: "Luc Van Oostenryck" +L: linux-sparse@vger.kernel.org +S: Maintained +W: https://sparse.docs.kernel.org/ +T: git git://git.kernel.org/pub/scm/devel/sparse/sparse.git +Q: https://patchwork.kernel.org/project/linux-sparse/list/ +B: https://bugzilla.kernel.org/enter_bug.cgi?component=Sparse&product=Tools +F: include/linux/compiler.h + +SPEAKUP CONSOLE SPEECH DRIVER +M: William Hubbs +M: Chris Brannon +M: Kirk Reiser +M: Samuel Thibault +L: speakup@linux-speakup.org +S: Odd Fixes +W: http://www.linux-speakup.org/ +W: https://github.com/linux-speakup/speakup +B: https://github.com/linux-speakup/speakup/issues +F: drivers/accessibility/speakup/ + +SPEAR CLOCK FRAMEWORK SUPPORT +M: Viresh Kumar +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +W: http://www.st.com/spear +F: drivers/clk/spear/ + +SPEAR PLATFORM SUPPORT +M: Viresh Kumar +M: Shiraz Hashim +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +W: http://www.st.com/spear +F: arch/arm/boot/dts/spear* +F: arch/arm/mach-spear/ + +SPI NOR SUBSYSTEM +M: Tudor Ambarus +R: Michael Walle +R: Pratyush Yadav +L: linux-mtd@lists.infradead.org +S: Maintained +W: http://www.linux-mtd.infradead.org/ +Q: http://patchwork.ozlabs.org/project/linux-mtd/list/ +C: irc://irc.oftc.net/mtd +T: git git://git.kernel.org/pub/scm/linux/kernel/git/mtd/linux.git spi-nor/next +F: drivers/mtd/spi-nor/ +F: include/linux/mtd/spi-nor.h + +SPI SUBSYSTEM +M: Mark Brown +L: linux-spi@vger.kernel.org +S: Maintained +Q: http://patchwork.kernel.org/project/spi-devel-general/list/ +T: git git://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi.git +F: Documentation/devicetree/bindings/spi/ +F: Documentation/spi/ +F: drivers/spi/ +F: include/linux/spi/ +F: include/uapi/linux/spi/ +F: tools/spi/ + +SPIDERNET NETWORK DRIVER for CELL +M: Ishizaki Kou +M: Geoff Levand +L: netdev@vger.kernel.org +L: linuxppc-dev@lists.ozlabs.org +S: Maintained +F: Documentation/networking/device_drivers/ethernet/toshiba/spider_net.rst +F: drivers/net/ethernet/toshiba/spider_net* + +SPMI SUBSYSTEM +M: Stephen Boyd +L: linux-kernel@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/sboyd/spmi.git +F: Documentation/devicetree/bindings/spmi/ +F: drivers/spmi/ +F: include/dt-bindings/spmi/spmi.h +F: include/linux/spmi.h +F: include/trace/events/spmi.h + +SPU FILE SYSTEM +M: Jeremy Kerr +L: linuxppc-dev@lists.ozlabs.org +S: Supported +W: http://www.ibm.com/developerworks/power/cell/ +F: Documentation/filesystems/spufs/spufs.rst +F: arch/powerpc/platforms/cell/spufs/ + +SQUASHFS FILE SYSTEM +M: Phillip Lougher +L: squashfs-devel@lists.sourceforge.net (subscribers-only) +S: Maintained +W: http://squashfs.org.uk +T: git git://git.kernel.org/pub/scm/linux/kernel/git/pkl/squashfs-next.git +F: Documentation/filesystems/squashfs.rst +F: fs/squashfs/ + +SRM (Alpha) environment access +M: Jan-Benedict Glaw +S: Maintained +F: arch/alpha/kernel/srm_env.c + +ST LSM6DSx IMU IIO DRIVER +M: Lorenzo Bianconi +L: linux-iio@vger.kernel.org +S: Maintained +W: http://www.st.com/ +F: Documentation/devicetree/bindings/iio/imu/st,lsm6dsx.yaml +F: drivers/iio/imu/st_lsm6dsx/ + +ST MIPID02 CSI-2 TO PARALLEL BRIDGE DRIVER +M: Mickael Guene +L: linux-media@vger.kernel.org +S: Maintained +T: git git://linuxtv.org/media_tree.git +F: Documentation/devicetree/bindings/media/i2c/st,st-mipid02.txt +F: drivers/media/i2c/st-mipid02.c + +ST STM32 I2C/SMBUS DRIVER +M: Pierre-Yves MORDRET +M: Alain Volmat +L: linux-i2c@vger.kernel.org +S: Maintained +F: drivers/i2c/busses/i2c-stm32* + +ST STM32 SPI DRIVER +M: Alain Volmat +L: linux-spi@vger.kernel.org +S: Maintained +F: drivers/spi/spi-stm32.c + +ST STPDDC60 DRIVER +M: Daniel Nilsson +L: linux-hwmon@vger.kernel.org +S: Maintained +F: Documentation/hwmon/stpddc60.rst +F: drivers/hwmon/pmbus/stpddc60.c + +ST VL53L0X ToF RANGER(I2C) IIO DRIVER +M: Song Qiang +L: linux-iio@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/iio/proximity/st,vl53l0x.yaml +F: drivers/iio/proximity/vl53l0x-i2c.c + +STABLE BRANCH +M: Greg Kroah-Hartman +M: Sasha Levin +L: stable@vger.kernel.org +S: Supported +F: Documentation/process/stable-kernel-rules.rst + +STAGING - ATOMISP DRIVER +M: Mauro Carvalho Chehab +R: Sakari Ailus +L: linux-media@vger.kernel.org +S: Maintained +F: drivers/staging/media/atomisp/ + +STAGING - FIELDBUS SUBSYSTEM +M: Sven Van Asbroeck +S: Maintained +F: drivers/staging/fieldbus/* +F: drivers/staging/fieldbus/Documentation/ + +STAGING - HMS ANYBUS-S BUS +M: Sven Van Asbroeck +S: Maintained +F: drivers/staging/fieldbus/anybuss/ + +STAGING - INDUSTRIAL IO +M: Jonathan Cameron +L: linux-iio@vger.kernel.org +S: Odd Fixes +F: Documentation/devicetree/bindings/staging/iio/ +F: drivers/staging/iio/ + +STAGING - NVIDIA COMPLIANT EMBEDDED CONTROLLER INTERFACE (nvec) +M: Marc Dietrich +L: ac100@lists.launchpad.net (moderated for non-subscribers) +L: linux-tegra@vger.kernel.org +S: Maintained +F: drivers/staging/nvec/ + +STAGING - OLPC SECONDARY DISPLAY CONTROLLER (DCON) +M: Jens Frederich +M: Jon Nettleton +S: Maintained +W: http://wiki.laptop.org/go/DCON +F: drivers/staging/olpc_dcon/ + +STAGING - REALTEK RTL8188EU DRIVERS +M: Larry Finger +M: Phillip Potter +S: Supported +F: drivers/staging/r8188eu/ + +STAGING - REALTEK RTL8712U DRIVERS +M: Larry Finger +M: Florian Schilhabel . +S: Odd Fixes +F: drivers/staging/rtl8712/ + +STAGING - SEPS525 LCD CONTROLLER DRIVERS +M: Michael Hennerich +L: linux-fbdev@vger.kernel.org +S: Supported +F: Documentation/devicetree/bindings/iio/adc/adi,ad7606.yaml +F: drivers/staging/fbtft/fb_seps525.c + +STAGING - SILICON MOTION SM750 FRAME BUFFER DRIVER +M: Sudip Mukherjee +M: Teddy Wang +M: Sudip Mukherjee +L: linux-fbdev@vger.kernel.org +S: Maintained +F: drivers/staging/sm750fb/ + +STAGING - VIA VT665X DRIVERS +M: Forest Bond +S: Odd Fixes +F: drivers/staging/vt665?/ + +STAGING SUBSYSTEM +M: Greg Kroah-Hartman +L: linux-staging@lists.linux.dev +S: Supported +T: git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging.git +F: drivers/staging/ + +STARFIRE/DURALAN NETWORK DRIVER +M: Ion Badulescu +S: Odd Fixes +F: drivers/net/ethernet/adaptec/starfire* + +STATIC BRANCH/CALL +M: Peter Zijlstra +M: Josh Poimboeuf +M: Jason Baron +R: Steven Rostedt +R: Ard Biesheuvel +S: Supported +F: arch/*/include/asm/jump_label*.h +F: arch/*/include/asm/static_call*.h +F: arch/*/kernel/jump_label.c +F: arch/*/kernel/static_call.c +F: include/linux/jump_label*.h +F: include/linux/static_call*.h +F: kernel/jump_label.c +F: kernel/static_call.c + +STI AUDIO (ASoC) DRIVERS +M: Arnaud Pouliquen +L: alsa-devel@alsa-project.org (moderated for non-subscribers) +S: Maintained +F: Documentation/devicetree/bindings/sound/st,sti-asoc-card.txt +F: sound/soc/sti/ + +STI CEC DRIVER +M: Benjamin Gaignard +S: Maintained +F: Documentation/devicetree/bindings/media/stih-cec.txt +F: drivers/media/cec/platform/sti/ + +STK1160 USB VIDEO CAPTURE DRIVER +M: Ezequiel Garcia +L: linux-media@vger.kernel.org +S: Maintained +T: git git://linuxtv.org/media_tree.git +F: drivers/media/usb/stk1160/ + +STM32 AUDIO (ASoC) DRIVERS +M: Olivier Moysan +M: Arnaud Pouliquen +L: alsa-devel@alsa-project.org (moderated for non-subscribers) +S: Maintained +F: Documentation/devicetree/bindings/iio/adc/st,stm32-dfsdm-adc.yaml +F: Documentation/devicetree/bindings/sound/st,stm32-*.yaml +F: sound/soc/stm/ + +STM32 TIMER/LPTIMER DRIVERS +M: Fabrice Gasnier +S: Maintained +F: Documentation/ABI/testing/*timer-stm32 +F: Documentation/devicetree/bindings/*/*stm32-*timer* +F: drivers/*/stm32-*timer* +F: drivers/pwm/pwm-stm32* +F: include/linux/*/stm32-*tim* + +STMMAC ETHERNET DRIVER +M: Giuseppe Cavallaro +M: Alexandre Torgue +M: Jose Abreu +L: netdev@vger.kernel.org +S: Supported +W: http://www.stlinux.com +F: Documentation/networking/device_drivers/ethernet/stmicro/ +F: drivers/net/ethernet/stmicro/stmmac/ + +SUN3/3X +M: Sam Creasey +S: Maintained +W: http://sammy.net/sun3/ +F: arch/m68k/include/asm/sun3* +F: arch/m68k/kernel/*sun3* +F: arch/m68k/sun3*/ +F: drivers/net/ethernet/i825xx/sun3* + +SUN4I LOW RES ADC ATTACHED TABLET KEYS DRIVER +M: Hans de Goede +L: linux-input@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/input/allwinner,sun4i-a10-lradc-keys.yaml +F: drivers/input/keyboard/sun4i-lradc-keys.c + +SUNDANCE NETWORK DRIVER +M: Denis Kirjanov +L: netdev@vger.kernel.org +S: Maintained +F: drivers/net/ethernet/dlink/sundance.c + +SUPERH +M: Yoshinori Sato +M: Rich Felker +L: linux-sh@vger.kernel.org +S: Maintained +Q: http://patchwork.kernel.org/project/linux-sh/list/ +F: Documentation/sh/ +F: arch/sh/ +F: drivers/sh/ + +SUSPEND TO RAM +M: "Rafael J. Wysocki" +M: Len Brown +M: Pavel Machek +L: linux-pm@vger.kernel.org +S: Supported +B: https://bugzilla.kernel.org +F: Documentation/power/ +F: arch/x86/kernel/acpi/ +F: drivers/base/power/ +F: include/linux/freezer.h +F: include/linux/pm.h +F: include/linux/suspend.h +F: kernel/power/ + +SVGA HANDLING +M: Martin Mares +L: linux-video@atrey.karlin.mff.cuni.cz +S: Maintained +F: Documentation/admin-guide/svga.rst +F: arch/x86/boot/video* + +SWIOTLB SUBSYSTEM +M: Christoph Hellwig +L: iommu@lists.linux-foundation.org +S: Supported +W: http://git.infradead.org/users/hch/dma-mapping.git +T: git git://git.infradead.org/users/hch/dma-mapping.git +F: arch/*/kernel/pci-swiotlb.c +F: include/linux/swiotlb.h +F: kernel/dma/swiotlb.c + +SWITCHDEV +M: Jiri Pirko +M: Ivan Vecera +L: netdev@vger.kernel.org +S: Supported +F: include/net/switchdev.h +F: net/switchdev/ + +SY8106A REGULATOR DRIVER +M: Icenowy Zheng +S: Maintained +F: Documentation/devicetree/bindings/regulator/silergy,sy8106a.yaml +F: drivers/regulator/sy8106a-regulator.c + +SYNC FILE FRAMEWORK +M: Sumit Semwal +R: Gustavo Padovan +L: linux-media@vger.kernel.org +L: dri-devel@lists.freedesktop.org +S: Maintained +T: git git://anongit.freedesktop.org/drm/drm-misc +F: Documentation/driver-api/sync_file.rst +F: drivers/dma-buf/dma-fence* +F: drivers/dma-buf/sw_sync.c +F: drivers/dma-buf/sync_* +F: include/linux/sync_file.h +F: include/uapi/linux/sync_file.h + +SYNOPSYS ARC ARCHITECTURE +M: Vineet Gupta +L: linux-snps-arc@lists.infradead.org +S: Supported +T: git git://git.kernel.org/pub/scm/linux/kernel/git/vgupta/arc.git +F: Documentation/devicetree/bindings/arc/* +F: Documentation/devicetree/bindings/interrupt-controller/snps,arc* +F: arch/arc/ +F: drivers/clocksource/arc_timer.c +F: drivers/tty/serial/arc_uart.c + +SYNOPSYS ARC HSDK SDP pll clock driver +M: Eugeniy Paltsev +S: Supported +F: Documentation/devicetree/bindings/clock/snps,hsdk-pll-clock.txt +F: drivers/clk/clk-hsdk-pll.c + +SYNOPSYS ARC SDP clock driver +M: Eugeniy Paltsev +S: Supported +F: Documentation/devicetree/bindings/clock/snps,pll-clock.txt +F: drivers/clk/axs10x/* + +SYNOPSYS ARC SDP platform support +M: Alexey Brodkin +S: Supported +F: Documentation/devicetree/bindings/arc/axs10* +F: arch/arc/boot/dts/ax* +F: arch/arc/plat-axs10x + +SYNOPSYS AXS10x RESET CONTROLLER DRIVER +M: Eugeniy Paltsev +S: Supported +F: Documentation/devicetree/bindings/reset/snps,axs10x-reset.txt +F: drivers/reset/reset-axs10x.c + +SYNOPSYS CREG GPIO DRIVER +M: Eugeniy Paltsev +S: Maintained +F: Documentation/devicetree/bindings/gpio/snps,creg-gpio.txt +F: drivers/gpio/gpio-creg-snps.c + +SYNOPSYS DESIGNWARE 8250 UART DRIVER +R: Andy Shevchenko +S: Maintained +F: drivers/tty/serial/8250/8250_dw.c +F: drivers/tty/serial/8250/8250_dwlib.* +F: drivers/tty/serial/8250/8250_lpss.c + +SYNOPSYS DESIGNWARE APB GPIO DRIVER +M: Hoan Tran +M: Serge Semin +L: linux-gpio@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/gpio/snps,dw-apb-gpio.yaml +F: drivers/gpio/gpio-dwapb.c + +SYNOPSYS DESIGNWARE APB SSI DRIVER +M: Serge Semin +L: linux-spi@vger.kernel.org +S: Supported +F: Documentation/devicetree/bindings/spi/snps,dw-apb-ssi.yaml +F: drivers/spi/spi-dw* + +SYNOPSYS DESIGNWARE AXI DMAC DRIVER +M: Eugeniy Paltsev +S: Maintained +F: Documentation/devicetree/bindings/dma/snps,dw-axi-dmac.yaml +F: drivers/dma/dw-axi-dmac/ + +SYNOPSYS DESIGNWARE DMAC DRIVER +M: Viresh Kumar +R: Andy Shevchenko +S: Maintained +F: Documentation/devicetree/bindings/dma/snps,dma-spear1340.yaml +F: drivers/dma/dw/ +F: include/dt-bindings/dma/dw-dmac.h +F: include/linux/dma/dw.h +F: include/linux/platform_data/dma-dw.h + +SYNOPSYS DESIGNWARE ENTERPRISE ETHERNET DRIVER +M: Jose Abreu +L: netdev@vger.kernel.org +S: Supported +F: drivers/net/ethernet/synopsys/ + +SYNOPSYS DESIGNWARE ETHERNET XPCS DRIVER +M: Jose Abreu +L: netdev@vger.kernel.org +S: Supported +F: drivers/net/pcs/pcs-xpcs.c +F: drivers/net/pcs/pcs-xpcs.h +F: include/linux/pcs/pcs-xpcs.h + +SYNOPSYS DESIGNWARE I2C DRIVER +M: Jarkko Nikula +R: Andy Shevchenko +R: Mika Westerberg +L: linux-i2c@vger.kernel.org +S: Maintained +F: drivers/i2c/busses/i2c-designware-* + +SYNOPSYS DESIGNWARE MMC/SD/SDIO DRIVER +M: Jaehoon Chung +L: linux-mmc@vger.kernel.org +S: Maintained +F: drivers/mmc/host/dw_mmc* + +SYNOPSYS HSDK RESET CONTROLLER DRIVER +M: Eugeniy Paltsev +S: Supported +F: Documentation/devicetree/bindings/reset/snps,hsdk-reset.txt +F: drivers/reset/reset-hsdk.c +F: include/dt-bindings/reset/snps,hsdk-reset.h + +SYNOPSYS SDHCI COMPLIANT DWC MSHC DRIVER +M: Prabu Thangamuthu +M: Manjunath M B +L: linux-mmc@vger.kernel.org +S: Maintained +F: drivers/mmc/host/sdhci-pci-dwc-mshc.c + +SYSTEM CONFIGURATION (SYSCON) +M: Lee Jones +M: Arnd Bergmann +S: Supported +T: git git://git.kernel.org/pub/scm/linux/kernel/git/lee/mfd.git +F: drivers/mfd/syscon.c + +SYSTEM CONTROL & POWER/MANAGEMENT INTERFACE (SCPI/SCMI) Message Protocol drivers +M: Sudeep Holla +R: Cristian Marussi +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +F: Documentation/devicetree/bindings/firmware/arm,sc[mp]i.yaml +F: drivers/clk/clk-sc[mp]i.c +F: drivers/cpufreq/sc[mp]i-cpufreq.c +F: drivers/firmware/arm_scmi/ +F: drivers/firmware/arm_scpi.c +F: drivers/regulator/scmi-regulator.c +F: drivers/reset/reset-scmi.c +F: include/linux/sc[mp]i_protocol.h +F: include/trace/events/scmi.h +F: include/uapi/linux/virtio_scmi.h + +SYSTEM RESET/SHUTDOWN DRIVERS +M: Sebastian Reichel +L: linux-pm@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/sre/linux-power-supply.git +F: Documentation/devicetree/bindings/power/reset/ +F: drivers/power/reset/ + +SYSTEM TRACE MODULE CLASS +M: Alexander Shishkin +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/ash/stm.git +F: Documentation/trace/stm.rst +F: drivers/hwtracing/stm/ +F: include/linux/stm.h +F: include/uapi/linux/stm.h + +SYSTEM76 ACPI DRIVER +M: Jeremy Soller +M: System76 Product Development +L: platform-driver-x86@vger.kernel.org +S: Maintained +F: drivers/platform/x86/system76_acpi.c + +SYSV FILESYSTEM +M: Christoph Hellwig +S: Maintained +F: Documentation/filesystems/sysv-fs.rst +F: fs/sysv/ +F: include/linux/sysv_fs.h + +TASKSTATS STATISTICS INTERFACE +M: Balbir Singh +S: Maintained +F: Documentation/accounting/taskstats* +F: include/linux/taskstats* +F: kernel/taskstats.c + +TC subsystem +M: Jamal Hadi Salim +M: Cong Wang +M: Jiri Pirko +L: netdev@vger.kernel.org +S: Maintained +F: include/net/pkt_cls.h +F: include/net/pkt_sched.h +F: include/net/tc_act/ +F: include/uapi/linux/pkt_cls.h +F: include/uapi/linux/pkt_sched.h +F: include/uapi/linux/tc_act/ +F: include/uapi/linux/tc_ematch/ +F: net/sched/ + +TC90522 MEDIA DRIVER +M: Akihiro Tsukada +L: linux-media@vger.kernel.org +S: Odd Fixes +F: drivers/media/dvb-frontends/tc90522* + +TCP LOW PRIORITY MODULE +M: "Wong Hoi Sing, Edison" +M: "Hung Hing Lun, Mike" +S: Maintained +W: http://tcp-lp-mod.sourceforge.net/ +F: net/ipv4/tcp_lp.c + +TDA10071 MEDIA DRIVER +M: Antti Palosaari +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +W: http://palosaari.fi/linux/ +Q: http://patchwork.linuxtv.org/project/linux-media/list/ +T: git git://linuxtv.org/anttip/media_tree.git +F: drivers/media/dvb-frontends/tda10071* + +TDA18212 MEDIA DRIVER +M: Antti Palosaari +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +W: http://palosaari.fi/linux/ +Q: http://patchwork.linuxtv.org/project/linux-media/list/ +T: git git://linuxtv.org/anttip/media_tree.git +F: drivers/media/tuners/tda18212* + +TDA18218 MEDIA DRIVER +M: Antti Palosaari +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +W: http://palosaari.fi/linux/ +Q: http://patchwork.linuxtv.org/project/linux-media/list/ +T: git git://linuxtv.org/anttip/media_tree.git +F: drivers/media/tuners/tda18218* + +TDA18250 MEDIA DRIVER +M: Olli Salonen +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +Q: http://patchwork.linuxtv.org/project/linux-media/list/ +T: git git://linuxtv.org/media_tree.git +F: drivers/media/tuners/tda18250* + +TDA18271 MEDIA DRIVER +M: Michael Krufky +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +W: http://github.com/mkrufky +Q: http://patchwork.linuxtv.org/project/linux-media/list/ +T: git git://linuxtv.org/mkrufky/tuners.git +F: drivers/media/tuners/tda18271* + +TDA1997x MEDIA DRIVER +M: Tim Harvey +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +Q: http://patchwork.linuxtv.org/project/linux-media/list/ +F: drivers/media/i2c/tda1997x.* + +TDA827x MEDIA DRIVER +M: Michael Krufky +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +W: http://github.com/mkrufky +Q: http://patchwork.linuxtv.org/project/linux-media/list/ +T: git git://linuxtv.org/mkrufky/tuners.git +F: drivers/media/tuners/tda8290.* + +TDA8290 MEDIA DRIVER +M: Michael Krufky +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +W: http://github.com/mkrufky +Q: http://patchwork.linuxtv.org/project/linux-media/list/ +T: git git://linuxtv.org/mkrufky/tuners.git +F: drivers/media/tuners/tda8290.* + +TDA9840 MEDIA DRIVER +M: Hans Verkuil +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +T: git git://linuxtv.org/media_tree.git +F: drivers/media/i2c/tda9840* + +TEA5761 TUNER DRIVER +M: Mauro Carvalho Chehab +L: linux-media@vger.kernel.org +S: Odd fixes +W: https://linuxtv.org +T: git git://linuxtv.org/media_tree.git +F: drivers/media/tuners/tea5761.* + +TEA5767 TUNER DRIVER +M: Mauro Carvalho Chehab +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +T: git git://linuxtv.org/media_tree.git +F: drivers/media/tuners/tea5767.* + +TEA6415C MEDIA DRIVER +M: Hans Verkuil +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +T: git git://linuxtv.org/media_tree.git +F: drivers/media/i2c/tea6415c* + +TEA6420 MEDIA DRIVER +M: Hans Verkuil +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +T: git git://linuxtv.org/media_tree.git +F: drivers/media/i2c/tea6420* + +TEAM DRIVER +M: Jiri Pirko +L: netdev@vger.kernel.org +S: Supported +F: drivers/net/team/ +F: include/linux/if_team.h +F: include/uapi/linux/if_team.h + +TECHNOLOGIC SYSTEMS TS-5500 PLATFORM SUPPORT +M: "Savoir-faire Linux Inc." +S: Maintained +F: arch/x86/platform/ts5500/ + +TECHNOTREND USB IR RECEIVER +M: Sean Young +L: linux-media@vger.kernel.org +S: Maintained +F: drivers/media/rc/ttusbir.c + +TECHWELL TW9910 VIDEO DECODER +L: linux-media@vger.kernel.org +S: Orphan +F: drivers/media/i2c/tw9910.c +F: include/media/i2c/tw9910.h + +TEE SUBSYSTEM +M: Jens Wiklander +R: Sumit Garg +L: op-tee@lists.trustedfirmware.org +S: Maintained +F: Documentation/staging/tee.rst +F: drivers/tee/ +F: include/linux/tee_drv.h +F: include/uapi/linux/tee.h + +TEGRA ARCHITECTURE SUPPORT +M: Thierry Reding +M: Jonathan Hunter +L: linux-tegra@vger.kernel.org +S: Supported +Q: http://patchwork.ozlabs.org/project/linux-tegra/list/ +T: git git://git.kernel.org/pub/scm/linux/kernel/git/tegra/linux.git +N: [^a-z]tegra + +TEGRA CLOCK DRIVER +M: Peter De Schrijver +M: Prashant Gaikwad +S: Supported +F: drivers/clk/tegra/ + +TEGRA DMA DRIVERS +M: Laxman Dewangan +M: Jon Hunter +S: Supported +F: drivers/dma/tegra* + +TEGRA I2C DRIVER +M: Laxman Dewangan +R: Dmitry Osipenko +S: Supported +F: drivers/i2c/busses/i2c-tegra.c + +TEGRA IOMMU DRIVERS +M: Thierry Reding +R: Krishna Reddy +L: linux-tegra@vger.kernel.org +S: Supported +F: drivers/iommu/arm/arm-smmu/arm-smmu-nvidia.c +F: drivers/iommu/tegra* + +TEGRA KBC DRIVER +M: Laxman Dewangan +S: Supported +F: drivers/input/keyboard/tegra-kbc.c + +TEGRA NAND DRIVER +M: Stefan Agner +M: Lucas Stach +S: Maintained +F: Documentation/devicetree/bindings/mtd/nvidia-tegra20-nand.txt +F: drivers/mtd/nand/raw/tegra_nand.c + +TEGRA PWM DRIVER +M: Thierry Reding +S: Supported +F: drivers/pwm/pwm-tegra.c + +TEGRA SERIAL DRIVER +M: Laxman Dewangan +S: Supported +F: drivers/tty/serial/serial-tegra.c + +TEGRA SPI DRIVER +M: Laxman Dewangan +S: Supported +F: drivers/spi/spi-tegra* + +TEGRA QUAD SPI DRIVER +M: Thierry Reding +M: Jonathan Hunter +M: Sowjanya Komatineni +L: linux-tegra@vger.kernel.org +S: Maintained +F: drivers/spi/spi-tegra210-quad.c + +TEGRA VIDEO DRIVER +M: Thierry Reding +M: Jonathan Hunter +M: Sowjanya Komatineni +L: linux-media@vger.kernel.org +L: linux-tegra@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/display/tegra/nvidia,tegra20-host1x.txt +F: drivers/staging/media/tegra-video/ + +TEGRA XUSB PADCTL DRIVER +M: JC Kuo +S: Supported +F: drivers/phy/tegra/xusb* + +TEHUTI ETHERNET DRIVER +M: Andy Gospodarek +L: netdev@vger.kernel.org +S: Supported +F: drivers/net/ethernet/tehuti/* + +TELECOM CLOCK DRIVER FOR MCPL0010 +M: Mark Gross +S: Supported +F: drivers/char/tlclk.c + +TEMPO SEMICONDUCTOR DRIVERS +M: Steven Eckhoff +S: Maintained +F: Documentation/devicetree/bindings/sound/tscs*.txt +F: sound/soc/codecs/tscs*.c +F: sound/soc/codecs/tscs*.h + +TENSILICA XTENSA PORT (xtensa) +M: Chris Zankel +M: Max Filippov +L: linux-xtensa@linux-xtensa.org +S: Maintained +T: git git://github.com/czankel/xtensa-linux.git +F: arch/xtensa/ +F: drivers/irqchip/irq-xtensa-* + +TEXAS INSTRUMENTS ASoC DRIVERS +M: Peter Ujfalusi +L: alsa-devel@alsa-project.org (moderated for non-subscribers) +S: Maintained +F: sound/soc/ti/ + +TEXAS INSTRUMENTS' DAC7612 DAC DRIVER +M: Ricardo Ribalda +L: linux-iio@vger.kernel.org +S: Supported +F: Documentation/devicetree/bindings/iio/dac/ti,dac7612.yaml +F: drivers/iio/dac/ti-dac7612.c + +TEXAS INSTRUMENTS DMA DRIVERS +M: Peter Ujfalusi +L: dmaengine@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/dma/ti-dma-crossbar.txt +F: Documentation/devicetree/bindings/dma/ti-edma.txt +F: Documentation/devicetree/bindings/dma/ti/ +F: drivers/dma/ti/ +X: drivers/dma/ti/cppi41.c +F: include/linux/dma/k3-udma-glue.h +F: include/linux/dma/ti-cppi5.h +F: include/linux/dma/k3-psil.h + +TEXAS INSTRUMENTS' SYSTEM CONTROL INTERFACE (TISCI) PROTOCOL DRIVER +M: Nishanth Menon +M: Tero Kristo +M: Santosh Shilimkar +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +F: Documentation/devicetree/bindings/arm/keystone/ti,k3-sci-common.yaml +F: Documentation/devicetree/bindings/arm/keystone/ti,sci.txt +F: Documentation/devicetree/bindings/clock/ti,sci-clk.yaml +F: Documentation/devicetree/bindings/interrupt-controller/ti,sci-inta.yaml +F: Documentation/devicetree/bindings/interrupt-controller/ti,sci-intr.yaml +F: Documentation/devicetree/bindings/reset/ti,sci-reset.yaml +F: Documentation/devicetree/bindings/soc/ti/sci-pm-domain.yaml +F: drivers/clk/keystone/sci-clk.c +F: drivers/firmware/ti_sci* +F: drivers/irqchip/irq-ti-sci-inta.c +F: drivers/irqchip/irq-ti-sci-intr.c +F: drivers/reset/reset-ti-sci.c +F: drivers/soc/ti/ti_sci_inta_msi.c +F: drivers/soc/ti/ti_sci_pm_domains.c +F: include/dt-bindings/soc/ti,sci_pm_domain.h +F: include/linux/soc/ti/ti_sci_inta_msi.h +F: include/linux/soc/ti/ti_sci_protocol.h + +TEXAS INSTRUMENTS TPS23861 PoE PSE DRIVER +M: Robert Marko +M: Luka Perkov +L: linux-hwmon@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/hwmon/ti,tps23861.yaml +F: Documentation/hwmon/tps23861.rst +F: drivers/hwmon/tps23861.c + +TEXAS INSTRUMENTS' TMP117 TEMPERATURE SENSOR DRIVER +M: Puranjay Mohan +L: linux-iio@vger.kernel.org +S: Supported +F: Documentation/devicetree/bindings/iio/temperature/ti,tmp117.yaml +F: drivers/iio/temperature/tmp117.c + +THANKO'S RAREMONO AM/FM/SW RADIO RECEIVER USB DRIVER +M: Hans Verkuil +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +T: git git://linuxtv.org/media_tree.git +F: drivers/media/radio/radio-raremono.c + +THERMAL +M: Rafael J. Wysocki +M: Daniel Lezcano +R: Amit Kucheria +R: Zhang Rui +L: linux-pm@vger.kernel.org +S: Supported +Q: https://patchwork.kernel.org/project/linux-pm/list/ +T: git git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git thermal +F: Documentation/devicetree/bindings/thermal/ +F: drivers/thermal/ +F: include/linux/cpu_cooling.h +F: include/linux/thermal.h +F: include/uapi/linux/thermal.h +F: tools/thermal/ + +THERMAL DRIVER FOR AMLOGIC SOCS +M: Guillaume La Roque +L: linux-pm@vger.kernel.org +L: linux-amlogic@lists.infradead.org +S: Supported +W: http://linux-meson.com/ +F: Documentation/devicetree/bindings/thermal/amlogic,thermal.yaml +F: drivers/thermal/amlogic_thermal.c + +THERMAL/CPU_COOLING +M: Amit Daniel Kachhap +M: Daniel Lezcano +M: Viresh Kumar +R: Lukasz Luba +L: linux-pm@vger.kernel.org +S: Supported +F: Documentation/driver-api/thermal/cpu-cooling-api.rst +F: Documentation/driver-api/thermal/cpu-idle-cooling.rst +F: drivers/thermal/cpufreq_cooling.c +F: drivers/thermal/cpuidle_cooling.c +F: include/linux/cpu_cooling.h + +THERMAL/POWER_ALLOCATOR +M: Lukasz Luba +L: linux-pm@vger.kernel.org +S: Maintained +F: Documentation/driver-api/thermal/power_allocator.rst +F: drivers/thermal/gov_power_allocator.c +F: include/trace/events/thermal_power_allocator.h + +THINKPAD ACPI EXTRAS DRIVER +M: Henrique de Moraes Holschuh +L: ibm-acpi-devel@lists.sourceforge.net +L: platform-driver-x86@vger.kernel.org +S: Maintained +W: http://ibm-acpi.sourceforge.net +W: http://thinkwiki.org/wiki/Ibm-acpi +T: git git://repo.or.cz/linux-2.6/linux-acpi-2.6/ibm-acpi-2.6.git +F: drivers/platform/x86/thinkpad_acpi.c + +THINKPAD LMI DRIVER +M: Mark Pearson +L: platform-driver-x86@vger.kernel.org +S: Maintained +F: Documentation/ABI/testing/sysfs-class-firmware-attributes +F: drivers/platform/x86/think-lmi.? + +THUNDERBOLT DMA TRAFFIC TEST DRIVER +M: Isaac Hazan +L: linux-usb@vger.kernel.org +S: Maintained +F: drivers/thunderbolt/dma_test.c + +THUNDERBOLT DRIVER +M: Andreas Noever +M: Michael Jamet +M: Mika Westerberg +M: Yehezkel Bernat +L: linux-usb@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/westeri/thunderbolt.git +F: Documentation/admin-guide/thunderbolt.rst +F: drivers/thunderbolt/ +F: include/linux/thunderbolt.h + +THUNDERBOLT NETWORK DRIVER +M: Michael Jamet +M: Mika Westerberg +M: Yehezkel Bernat +L: netdev@vger.kernel.org +S: Maintained +F: drivers/net/thunderbolt.c + +THUNDERX GPIO DRIVER +M: Robert Richter +S: Odd Fixes +F: drivers/gpio/gpio-thunderx.c + +TI ADS131E0X ADC SERIES DRIVER +M: Tomislav Denis +L: linux-iio@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/iio/adc/ti,ads131e08.yaml +F: drivers/iio/adc/ti-ads131e08.c + +TI AM437X VPFE DRIVER +M: "Lad, Prabhakar" +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +Q: http://patchwork.linuxtv.org/project/linux-media/list/ +T: git git://linuxtv.org/mhadli/v4l-dvb-davinci_devices.git +F: drivers/media/platform/am437x/ + +TI BANDGAP AND THERMAL DRIVER +M: Eduardo Valentin +M: Keerthy +L: linux-pm@vger.kernel.org +L: linux-omap@vger.kernel.org +S: Maintained +F: drivers/thermal/ti-soc-thermal/ + +TI BQ27XXX POWER SUPPLY DRIVER +F: drivers/power/supply/bq27xxx_battery.c +F: drivers/power/supply/bq27xxx_battery_i2c.c +F: include/linux/power/bq27xxx_battery.h + +TI CDCE706 CLOCK DRIVER +M: Max Filippov +S: Maintained +F: drivers/clk/clk-cdce706.c + +TI CLOCK DRIVER +M: Tero Kristo +L: linux-omap@vger.kernel.org +S: Odd Fixes +F: drivers/clk/ti/ +F: include/linux/clk/ti.h + +TI DAVINCI MACHINE SUPPORT +M: Sekhar Nori +R: Bartosz Golaszewski +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Supported +T: git git://git.kernel.org/pub/scm/linux/kernel/git/nsekhar/linux-davinci.git +F: Documentation/devicetree/bindings/i2c/i2c-davinci.txt +F: arch/arm/boot/dts/da850* +F: arch/arm/mach-davinci/ +F: drivers/i2c/busses/i2c-davinci.c + +TI DAVINCI SERIES CLOCK DRIVER +M: David Lechner +R: Sekhar Nori +S: Maintained +F: Documentation/devicetree/bindings/clock/ti/davinci/ +F: drivers/clk/davinci/ + +TI DAVINCI SERIES GPIO DRIVER +M: Keerthy +L: linux-gpio@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/gpio/gpio-davinci.yaml +F: drivers/gpio/gpio-davinci.c + +TI DAVINCI SERIES MEDIA DRIVER +M: "Lad, Prabhakar" +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +Q: http://patchwork.linuxtv.org/project/linux-media/list/ +T: git git://linuxtv.org/mhadli/v4l-dvb-davinci_devices.git +F: drivers/media/platform/davinci/ +F: include/media/davinci/ + +TI ENHANCED QUADRATURE ENCODER PULSE (eQEP) DRIVER +R: David Lechner +L: linux-iio@vger.kernel.org +F: Documentation/devicetree/bindings/counter/ti-eqep.yaml +F: drivers/counter/ti-eqep.c + +TI ETHERNET SWITCH DRIVER (CPSW) +R: Grygorii Strashko +L: linux-omap@vger.kernel.org +L: netdev@vger.kernel.org +S: Maintained +F: drivers/net/ethernet/ti/cpsw* +F: drivers/net/ethernet/ti/davinci* + +TI FLASH MEDIA MEMORYSTICK/MMC DRIVERS +M: Alex Dubov +S: Maintained +W: http://tifmxx.berlios.de/ +F: drivers/memstick/host/tifm_ms.c +F: drivers/misc/tifm* +F: drivers/mmc/host/tifm_sd.c +F: include/linux/tifm.h + +TI KEYSTONE MULTICORE NAVIGATOR DRIVERS +M: Santosh Shilimkar +L: linux-kernel@vger.kernel.org +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/ssantosh/linux-keystone.git +F: drivers/soc/ti/* + +TI LM49xxx FAMILY ASoC CODEC DRIVERS +M: M R Swami Reddy +M: Vishwas A Deshpande +L: alsa-devel@alsa-project.org (moderated for non-subscribers) +S: Maintained +F: sound/soc/codecs/isabelle* +F: sound/soc/codecs/lm49453* + +TI PCM3060 ASoC CODEC DRIVER +M: Kirill Marinushkin +L: alsa-devel@alsa-project.org (moderated for non-subscribers) +S: Maintained +F: Documentation/devicetree/bindings/sound/pcm3060.txt +F: sound/soc/codecs/pcm3060* + +TI TAS571X FAMILY ASoC CODEC DRIVER +M: Kevin Cernekee +L: alsa-devel@alsa-project.org (moderated for non-subscribers) +S: Odd Fixes +F: sound/soc/codecs/tas571x* + +TI TRF7970A NFC DRIVER +M: Mark Greer +L: linux-wireless@vger.kernel.org +L: linux-nfc@lists.01.org (subscribers-only) +S: Supported +F: Documentation/devicetree/bindings/net/nfc/trf7970a.txt +F: drivers/nfc/trf7970a.c + +TI TSC2046 ADC DRIVER +M: Oleksij Rempel +R: kernel@pengutronix.de +L: linux-iio@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/iio/adc/ti,tsc2046.yaml +F: drivers/iio/adc/ti-tsc2046.c + +TI TWL4030 SERIES SOC CODEC DRIVER +M: Peter Ujfalusi +L: alsa-devel@alsa-project.org (moderated for non-subscribers) +S: Maintained +F: sound/soc/codecs/twl4030* + +TI VPE/CAL DRIVERS +M: Benoit Parrot +L: linux-media@vger.kernel.org +S: Maintained +W: http://linuxtv.org/ +Q: http://patchwork.linuxtv.org/project/linux-media/list/ +F: Documentation/devicetree/bindings/media/ti,cal.yaml +F: Documentation/devicetree/bindings/media/ti,vpe.yaml +F: drivers/media/platform/ti-vpe/ + +TI WILINK WIRELESS DRIVERS +L: linux-wireless@vger.kernel.org +S: Orphan +W: https://wireless.wiki.kernel.org/en/users/Drivers/wl12xx +W: https://wireless.wiki.kernel.org/en/users/Drivers/wl1251 +T: git git://git.kernel.org/pub/scm/linux/kernel/git/luca/wl12xx.git +F: drivers/net/wireless/ti/ +F: include/linux/wl12xx.h + +TIMEKEEPING, CLOCKSOURCE CORE, NTP, ALARMTIMER +M: John Stultz +M: Thomas Gleixner +R: Stephen Boyd +L: linux-kernel@vger.kernel.org +S: Supported +T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git timers/core +F: include/linux/clocksource.h +F: include/linux/time.h +F: include/linux/timex.h +F: include/uapi/linux/time.h +F: include/uapi/linux/timex.h +F: kernel/time/alarmtimer.c +F: kernel/time/clocksource.c +F: kernel/time/ntp.c +F: kernel/time/time*.c +F: tools/testing/selftests/timers/ + +TIPC NETWORK LAYER +M: Jon Maloy +M: Ying Xue +L: netdev@vger.kernel.org (core kernel code) +L: tipc-discussion@lists.sourceforge.net (user apps, general discussion) +S: Maintained +W: http://tipc.sourceforge.net/ +F: include/uapi/linux/tipc*.h +F: net/tipc/ + +TLAN NETWORK DRIVER +M: Samuel Chessman +L: tlan-devel@lists.sourceforge.net (subscribers-only) +S: Maintained +W: http://sourceforge.net/projects/tlan/ +F: Documentation/networking/device_drivers/ethernet/ti/tlan.rst +F: drivers/net/ethernet/ti/tlan.* + +TM6000 VIDEO4LINUX DRIVER +M: Mauro Carvalho Chehab +L: linux-media@vger.kernel.org +S: Odd fixes +W: https://linuxtv.org +T: git git://linuxtv.org/media_tree.git +F: Documentation/admin-guide/media/tm6000* +F: drivers/media/usb/tm6000/ + +TMIO/SDHI MMC DRIVER +M: Wolfram Sang +L: linux-mmc@vger.kernel.org +S: Supported +F: drivers/mmc/host/renesas_sdhi* +F: drivers/mmc/host/tmio_mmc* +F: include/linux/mfd/tmio.h + +TMP401 HARDWARE MONITOR DRIVER +M: Guenter Roeck +L: linux-hwmon@vger.kernel.org +S: Maintained +F: Documentation/hwmon/tmp401.rst +F: drivers/hwmon/tmp401.c + +TMP513 HARDWARE MONITOR DRIVER +M: Eric Tremblay +L: linux-hwmon@vger.kernel.org +S: Maintained +F: Documentation/hwmon/tmp513.rst +F: drivers/hwmon/tmp513.c + +TMPFS (SHMEM FILESYSTEM) +M: Hugh Dickins +L: linux-mm@kvack.org +S: Maintained +F: include/linux/shmem_fs.h +F: mm/shmem.c + +TOMOYO SECURITY MODULE +M: Kentaro Takeda +M: Tetsuo Handa +L: tomoyo-dev-en@lists.osdn.me (subscribers-only, for developers in English) +L: tomoyo-users-en@lists.osdn.me (subscribers-only, for users in English) +L: tomoyo-dev@lists.osdn.me (subscribers-only, for developers in Japanese) +L: tomoyo-users@lists.osdn.me (subscribers-only, for users in Japanese) +S: Maintained +W: https://tomoyo.osdn.jp/ +F: security/tomoyo/ + +TOPSTAR LAPTOP EXTRAS DRIVER +M: Herton Ronaldo Krzesinski +L: platform-driver-x86@vger.kernel.org +S: Maintained +F: drivers/platform/x86/topstar-laptop.c + +TORTURE-TEST MODULES +M: Davidlohr Bueso +M: "Paul E. McKenney" +M: Josh Triplett +L: linux-kernel@vger.kernel.org +S: Supported +T: git git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git dev +F: Documentation/RCU/torture.rst +F: kernel/locking/locktorture.c +F: kernel/rcu/rcuscale.c +F: kernel/rcu/rcutorture.c +F: kernel/rcu/refscale.c +F: kernel/torture.c + +TOSHIBA ACPI EXTRAS DRIVER +M: Azael Avalos +L: platform-driver-x86@vger.kernel.org +S: Maintained +F: drivers/platform/x86/toshiba_acpi.c + +TOSHIBA BLUETOOTH DRIVER +M: Azael Avalos +L: platform-driver-x86@vger.kernel.org +S: Maintained +F: drivers/platform/x86/toshiba_bluetooth.c + +TOSHIBA HDD ACTIVE PROTECTION SENSOR DRIVER +M: Azael Avalos +L: platform-driver-x86@vger.kernel.org +S: Maintained +F: drivers/platform/x86/toshiba_haps.c + +TOSHIBA SMM DRIVER +M: Jonathan Buzzard +S: Maintained +W: http://www.buzzard.org.uk/toshiba/ +F: drivers/char/toshiba.c +F: include/linux/toshiba.h +F: include/uapi/linux/toshiba.h + +TOSHIBA TC358743 DRIVER +M: Mats Randgaard +L: linux-media@vger.kernel.org +S: Maintained +F: drivers/media/i2c/tc358743* +F: include/media/i2c/tc358743.h + +TOSHIBA WMI HOTKEYS DRIVER +M: Azael Avalos +L: platform-driver-x86@vger.kernel.org +S: Maintained +F: drivers/platform/x86/toshiba-wmi.c + +TPM DEVICE DRIVER +M: Peter Huewe +M: Jarkko Sakkinen +R: Jason Gunthorpe +L: linux-integrity@vger.kernel.org +S: Maintained +W: https://kernsec.org/wiki/index.php/Linux_Kernel_Integrity +Q: https://patchwork.kernel.org/project/linux-integrity/list/ +T: git git://git.kernel.org/pub/scm/linux/kernel/git/jarkko/linux-tpmdd.git +F: drivers/char/tpm/ + +TRACING +M: Steven Rostedt +M: Ingo Molnar +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git perf/core +F: Documentation/trace/ftrace.rst +F: arch/*/*/*/ftrace.h +F: arch/*/kernel/ftrace.c +F: fs/tracefs/ +F: include/*/ftrace.h +F: include/linux/trace*.h +F: include/trace/ +F: kernel/trace/ +F: tools/testing/selftests/ftrace/ + +TRACING MMIO ACCESSES (MMIOTRACE) +M: Steven Rostedt +M: Ingo Molnar +R: Karol Herbst +R: Pekka Paalanen +L: linux-kernel@vger.kernel.org +L: nouveau@lists.freedesktop.org +S: Maintained +F: arch/x86/mm/kmmio.c +F: arch/x86/mm/mmio-mod.c +F: arch/x86/mm/testmmiotrace.c +F: include/linux/mmiotrace.h +F: kernel/trace/trace_mmiotrace.c + +TRACING OS NOISE / LATENCY TRACERS +M: Steven Rostedt +M: Daniel Bristot de Oliveira +S: Maintained +F: kernel/trace/trace_osnoise.c +F: include/trace/events/osnoise.h +F: kernel/trace/trace_hwlat.c +F: kernel/trace/trace_irqsoff.c +F: kernel/trace/trace_sched_wakeup.c +F: Documentation/trace/osnoise-tracer.rst +F: Documentation/trace/timerlat-tracer.rst +F: Documentation/trace/hwlat_detector.rst +F: arch/*/kernel/trace.c + +TRADITIONAL CHINESE DOCUMENTATION +M: Hu Haowen +L: linux-doc-tw-discuss@lists.sourceforge.net +S: Maintained +W: https://github.com/srcres258/linux-doc +T: git git://github.com/srcres258/linux-doc.git doc-zh-tw +F: Documentation/translations/zh_TW/ + +TRIVIAL PATCHES +M: Jiri Kosina +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial.git +K: ^Subject:.*(?i)trivial + +TTY LAYER +M: Greg Kroah-Hartman +M: Jiri Slaby +S: Supported +T: git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty.git +F: Documentation/driver-api/serial/ +F: drivers/tty/ +F: drivers/tty/serial/serial_core.c +F: include/linux/selection.h +F: include/linux/serial.h +F: include/linux/serial_core.h +F: include/linux/sysrq.h +F: include/linux/tty*.h +F: include/linux/vt.h +F: include/linux/vt_*.h +F: include/uapi/linux/serial.h +F: include/uapi/linux/serial_core.h +F: include/uapi/linux/tty.h + +TUA9001 MEDIA DRIVER +M: Antti Palosaari +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +W: http://palosaari.fi/linux/ +Q: http://patchwork.linuxtv.org/project/linux-media/list/ +T: git git://linuxtv.org/anttip/media_tree.git +F: drivers/media/tuners/tua9001* + +TULIP NETWORK DRIVERS +L: netdev@vger.kernel.org +L: linux-parisc@vger.kernel.org +S: Orphan +F: drivers/net/ethernet/dec/tulip/ + +TUN/TAP driver +M: Maxim Krasnyansky +S: Maintained +W: http://vtun.sourceforge.net/tun +F: Documentation/networking/tuntap.rst +F: arch/um/os-Linux/drivers/ + +TURBOCHANNEL SUBSYSTEM +M: "Maciej W. Rozycki" +M: Ralf Baechle +L: linux-mips@vger.kernel.org +S: Maintained +Q: http://patchwork.linux-mips.org/project/linux-mips/list/ +F: drivers/tc/ +F: include/linux/tc.h + +TURBOSTAT UTILITY +M: "Len Brown" +L: linux-pm@vger.kernel.org +S: Supported +Q: https://patchwork.kernel.org/project/linux-pm/list/ +B: https://bugzilla.kernel.org +T: git git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux.git turbostat +F: tools/power/x86/turbostat/ + +TW5864 VIDEO4LINUX DRIVER +M: Bluecherry Maintainers +M: Anton Sviridenko +M: Andrey Utkin +M: Andrey Utkin +L: linux-media@vger.kernel.org +S: Supported +F: drivers/media/pci/tw5864/ + +TW68 VIDEO4LINUX DRIVER +M: Hans Verkuil +L: linux-media@vger.kernel.org +S: Odd Fixes +W: https://linuxtv.org +T: git git://linuxtv.org/media_tree.git +F: drivers/media/pci/tw68/ + +TW686X VIDEO4LINUX DRIVER +M: Ezequiel Garcia +L: linux-media@vger.kernel.org +S: Maintained +W: http://linuxtv.org +T: git git://linuxtv.org/media_tree.git +F: drivers/media/pci/tw686x/ + +UACCE ACCELERATOR FRAMEWORK +M: Zhangfei Gao +M: Zhou Wang +L: linux-accelerators@lists.ozlabs.org +L: linux-kernel@vger.kernel.org +S: Maintained +F: Documentation/ABI/testing/sysfs-driver-uacce +F: Documentation/misc-devices/uacce.rst +F: drivers/misc/uacce/ +F: include/linux/uacce.h +F: include/uapi/misc/uacce/ + +UBI FILE SYSTEM (UBIFS) +M: Richard Weinberger +L: linux-mtd@lists.infradead.org +S: Supported +W: http://www.linux-mtd.infradead.org/doc/ubifs.html +T: git git://git.kernel.org/pub/scm/linux/kernel/git/rw/ubifs.git next +T: git git://git.kernel.org/pub/scm/linux/kernel/git/rw/ubifs.git fixes +F: Documentation/filesystems/ubifs-authentication.rst +F: Documentation/filesystems/ubifs.rst +F: fs/ubifs/ + +UCLINUX (M68KNOMMU AND COLDFIRE) +M: Greg Ungerer +L: linux-m68k@lists.linux-m68k.org +L: uclinux-dev@uclinux.org (subscribers-only) +S: Maintained +W: http://www.linux-m68k.org/ +W: http://www.uclinux.org/ +T: git git://git.kernel.org/pub/scm/linux/kernel/git/gerg/m68knommu.git +F: arch/m68k/*/*_no.* +F: arch/m68k/68*/ +F: arch/m68k/coldfire/ +F: arch/m68k/include/asm/*_no.* + +UDF FILESYSTEM +M: Jan Kara +S: Maintained +F: Documentation/filesystems/udf.rst +F: fs/udf/ + +UDRAW TABLET +M: Bastien Nocera +L: linux-input@vger.kernel.org +S: Maintained +F: drivers/hid/hid-udraw-ps3.c + +UFS FILESYSTEM +M: Evgeniy Dushistov +S: Maintained +F: Documentation/admin-guide/ufs.rst +F: fs/ufs/ + +UHID USERSPACE HID IO DRIVER +M: David Rheinsberg +L: linux-input@vger.kernel.org +S: Maintained +F: drivers/hid/uhid.c +F: include/uapi/linux/uhid.h + +ULPI BUS +M: Heikki Krogerus +L: linux-usb@vger.kernel.org +S: Maintained +F: drivers/usb/common/ulpi.c +F: include/linux/ulpi/ + +UNICODE SUBSYSTEM +M: Gabriel Krisman Bertazi +L: linux-fsdevel@vger.kernel.org +S: Supported +F: fs/unicode/ + +UNIFDEF +M: Tony Finch +S: Maintained +W: http://dotat.at/prog/unifdef +F: scripts/unifdef.c + +UNIFORM CDROM DRIVER +M: Phillip Potter +S: Maintained +F: Documentation/cdrom/ +F: drivers/cdrom/cdrom.c +F: include/linux/cdrom.h +F: include/uapi/linux/cdrom.h + +UNISYS S-PAR DRIVERS +M: David Kershner +L: sparmaintainer@unisys.com (Unisys internal) +S: Supported +F: drivers/staging/unisys/ +F: drivers/visorbus/ +F: include/linux/visorbus.h + +UNIVERSAL FLASH STORAGE HOST CONTROLLER DRIVER +R: Alim Akhtar +R: Avri Altman +L: linux-scsi@vger.kernel.org +S: Supported +F: Documentation/scsi/ufs.rst +F: drivers/scsi/ufs/ + +UNIVERSAL FLASH STORAGE HOST CONTROLLER DRIVER DWC HOOKS +M: Pedro Sousa +L: linux-scsi@vger.kernel.org +S: Supported +F: drivers/scsi/ufs/*dwc* + +UNIVERSAL FLASH STORAGE HOST CONTROLLER DRIVER MEDIATEK HOOKS +M: Stanley Chu +L: linux-scsi@vger.kernel.org +L: linux-mediatek@lists.infradead.org (moderated for non-subscribers) +S: Maintained +F: drivers/scsi/ufs/ufs-mediatek* + +UNSORTED BLOCK IMAGES (UBI) +M: Richard Weinberger +L: linux-mtd@lists.infradead.org +S: Supported +W: http://www.linux-mtd.infradead.org/ +T: git git://git.kernel.org/pub/scm/linux/kernel/git/rw/ubifs.git next +T: git git://git.kernel.org/pub/scm/linux/kernel/git/rw/ubifs.git fixes +F: drivers/mtd/ubi/ +F: include/linux/mtd/ubi.h +F: include/uapi/mtd/ubi-user.h + +USB "USBNET" DRIVER FRAMEWORK +M: Oliver Neukum +L: netdev@vger.kernel.org +S: Maintained +W: http://www.linux-usb.org/usbnet +F: drivers/net/usb/usbnet.c +F: include/linux/usb/usbnet.h + +USB ACM DRIVER +M: Oliver Neukum +L: linux-usb@vger.kernel.org +S: Maintained +F: Documentation/usb/acm.rst +F: drivers/usb/class/cdc-acm.* + +USB APPLE MFI FASTCHARGE DRIVER +M: Bastien Nocera +L: linux-usb@vger.kernel.org +S: Maintained +F: drivers/usb/misc/apple-mfi-fastcharge.c + +USB AR5523 WIRELESS DRIVER +M: Pontus Fuchs +L: linux-wireless@vger.kernel.org +S: Maintained +F: drivers/net/wireless/ath/ar5523/ + +USB ATTACHED SCSI +M: Oliver Neukum +L: linux-usb@vger.kernel.org +L: linux-scsi@vger.kernel.org +S: Maintained +F: drivers/usb/storage/uas.c + +USB CDC ETHERNET DRIVER +M: Oliver Neukum +L: linux-usb@vger.kernel.org +S: Maintained +F: drivers/net/usb/cdc_*.c +F: include/uapi/linux/usb/cdc.h + +USB CHAOSKEY DRIVER +M: Keith Packard +L: linux-usb@vger.kernel.org +S: Maintained +F: drivers/usb/misc/chaoskey.c + +USB CYPRESS C67X00 DRIVER +L: linux-usb@vger.kernel.org +S: Orphan +F: drivers/usb/c67x00/ + +USB DAVICOM DM9601 DRIVER +M: Peter Korsgaard +L: netdev@vger.kernel.org +S: Maintained +W: http://www.linux-usb.org/usbnet +F: drivers/net/usb/dm9601.c + +USB EHCI DRIVER +M: Alan Stern +L: linux-usb@vger.kernel.org +S: Maintained +F: Documentation/usb/ehci.rst +F: drivers/usb/host/ehci* + +USB GADGET/PERIPHERAL SUBSYSTEM +M: Felipe Balbi +L: linux-usb@vger.kernel.org +S: Maintained +W: http://www.linux-usb.org/gadget +T: git git://git.kernel.org/pub/scm/linux/kernel/git/balbi/usb.git +F: drivers/usb/gadget/ +F: include/linux/usb/gadget* + +USB HID/HIDBP DRIVERS (USB KEYBOARDS, MICE, REMOTE CONTROLS, ...) +M: Jiri Kosina +M: Benjamin Tissoires +L: linux-usb@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/hid/hid.git +F: Documentation/hid/hiddev.rst +F: drivers/hid/usbhid/ + +USB INTEL XHCI ROLE MUX DRIVER +M: Hans de Goede +L: linux-usb@vger.kernel.org +S: Maintained +F: drivers/usb/roles/intel-xhci-usb-role-switch.c + +USB IP DRIVER FOR HISILICON KIRIN 960 +M: Yu Chen +M: Binghui Wang +L: linux-usb@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/phy/hisilicon,hi3660-usb3.yaml +F: drivers/phy/hisilicon/phy-hi3660-usb3.c + +USB IP DRIVER FOR HISILICON KIRIN 970 +M: Mauro Carvalho Chehab +L: linux-usb@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/phy/hisilicon,hi3670-usb3.yaml +F: drivers/phy/hisilicon/phy-hi3670-usb3.c + +USB ISP116X DRIVER +M: Olav Kongas +L: linux-usb@vger.kernel.org +S: Maintained +F: drivers/usb/host/isp116x* +F: include/linux/usb/isp116x.h + +USB ISP1760 DRIVER +M: Rui Miguel Silva +L: linux-usb@vger.kernel.org +S: Maintained +F: drivers/usb/isp1760/* +F: Documentation/devicetree/bindings/usb/nxp,isp1760.yaml + +USB LAN78XX ETHERNET DRIVER +M: Woojung Huh +M: 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 +L: linux-usb@vger.kernel.org +L: usb-storage@lists.one-eyed-alien.net +S: Maintained +F: drivers/usb/storage/ + +USB MIDI DRIVER +M: Clemens Ladisch +L: alsa-devel@alsa-project.org (moderated for non-subscribers) +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound.git +F: sound/usb/midi.* + +USB NETWORKING DRIVERS +L: linux-usb@vger.kernel.org +S: Odd Fixes +F: drivers/net/usb/ + +USB OHCI DRIVER +M: Alan Stern +L: linux-usb@vger.kernel.org +S: Maintained +F: Documentation/usb/ohci.rst +F: drivers/usb/host/ohci* + +USB OTG FSM (Finite State Machine) +M: Peter Chen +L: linux-usb@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/peter.chen/usb.git +F: drivers/usb/common/usb-otg-fsm.c + +USB OVER IP DRIVER +M: Valentina Manea +M: Shuah Khan +M: Shuah Khan +L: linux-usb@vger.kernel.org +S: Maintained +F: Documentation/usb/usbip_protocol.rst +F: drivers/usb/usbip/ +F: tools/testing/selftests/drivers/usb/usbip/ +F: tools/usb/usbip/ + +USB PEGASUS DRIVER +M: Petko Manolov +L: linux-usb@vger.kernel.org +L: netdev@vger.kernel.org +S: Maintained +W: https://github.com/petkan/pegasus +T: git git://github.com/petkan/pegasus.git +F: drivers/net/usb/pegasus.* + +USB PHY LAYER +M: Felipe Balbi +L: linux-usb@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/balbi/usb.git +F: drivers/usb/phy/ + +USB PRINTER DRIVER (usblp) +M: Pete Zaitcev +L: linux-usb@vger.kernel.org +S: Supported +F: drivers/usb/class/usblp.c + +USB RAW GADGET DRIVER +R: Andrey Konovalov +L: linux-usb@vger.kernel.org +S: Maintained +F: Documentation/usb/raw-gadget.rst +F: drivers/usb/gadget/legacy/raw_gadget.c +F: include/uapi/linux/usb/raw_gadget.h + +USB QMI WWAN NETWORK DRIVER +M: Bjørn Mork +L: netdev@vger.kernel.org +S: Maintained +F: Documentation/ABI/testing/sysfs-class-net-qmi +F: drivers/net/usb/qmi_wwan.c + +USB RTL8150 DRIVER +M: Petko Manolov +L: linux-usb@vger.kernel.org +L: netdev@vger.kernel.org +S: Maintained +W: https://github.com/petkan/rtl8150 +T: git git://github.com/petkan/rtl8150.git +F: drivers/net/usb/rtl8150.c + +USB SERIAL SUBSYSTEM +M: Johan Hovold +L: linux-usb@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/johan/usb-serial.git +F: Documentation/usb/usb-serial.rst +F: drivers/usb/serial/ +F: include/linux/usb/serial.h + +USB SMSC75XX ETHERNET DRIVER +M: Steve Glendinning +L: netdev@vger.kernel.org +S: Maintained +F: drivers/net/usb/smsc75xx.* + +USB SMSC95XX ETHERNET DRIVER +M: Steve Glendinning +M: UNGLinuxDriver@microchip.com +L: netdev@vger.kernel.org +S: Maintained +F: drivers/net/usb/smsc95xx.* + +USB SUBSYSTEM +M: Greg Kroah-Hartman +L: linux-usb@vger.kernel.org +S: Supported +W: http://www.linux-usb.org +T: git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git +F: Documentation/devicetree/bindings/usb/ +F: Documentation/usb/ +F: drivers/usb/ +F: include/linux/usb.h +F: include/linux/usb/ + +USB TYPEC BUS FOR ALTERNATE MODES +M: Heikki Krogerus +L: linux-usb@vger.kernel.org +S: Maintained +F: Documentation/ABI/testing/sysfs-bus-typec +F: Documentation/driver-api/usb/typec_bus.rst +F: drivers/usb/typec/altmodes/ +F: include/linux/usb/typec_altmode.h + +USB TYPEC CLASS +M: Heikki Krogerus +L: linux-usb@vger.kernel.org +S: Maintained +F: Documentation/ABI/testing/sysfs-class-typec +F: Documentation/driver-api/usb/typec.rst +F: drivers/usb/typec/ +F: include/linux/usb/typec.h + +USB TYPEC INTEL PMC MUX DRIVER +M: Heikki Krogerus +L: linux-usb@vger.kernel.org +S: Maintained +F: Documentation/firmware-guide/acpi/intel-pmc-mux.rst +F: drivers/usb/typec/mux/intel_pmc_mux.c + +USB TYPEC PI3USB30532 MUX DRIVER +M: Hans de Goede +L: linux-usb@vger.kernel.org +S: Maintained +F: drivers/usb/typec/mux/pi3usb30532.c + +USB TYPEC PORT CONTROLLER DRIVERS +M: Guenter Roeck +L: linux-usb@vger.kernel.org +S: Maintained +F: drivers/usb/typec/tcpm/ + +USB UHCI DRIVER +M: Alan Stern +L: linux-usb@vger.kernel.org +S: Maintained +F: drivers/usb/host/uhci* + +USB VIDEO CLASS +M: Laurent Pinchart +L: linux-uvc-devel@lists.sourceforge.net (subscribers-only) +L: linux-media@vger.kernel.org +S: Maintained +W: http://www.ideasonboard.org/uvc/ +T: git git://linuxtv.org/media_tree.git +F: drivers/media/usb/uvc/ +F: include/uapi/linux/uvcvideo.h + +USB WEBCAM GADGET +M: Laurent Pinchart +L: linux-usb@vger.kernel.org +S: Maintained +F: drivers/usb/gadget/function/*uvc* +F: drivers/usb/gadget/legacy/webcam.c +F: include/uapi/linux/usb/g_uvc.h + +USB WIRELESS RNDIS DRIVER (rndis_wlan) +M: Jussi Kivilinna +L: linux-wireless@vger.kernel.org +S: Maintained +F: drivers/net/wireless/rndis_wlan.c + +USB XHCI DRIVER +M: Mathias Nyman +L: linux-usb@vger.kernel.org +S: Supported +F: drivers/usb/host/pci-quirks* +F: drivers/usb/host/xhci* + +USB ZD1201 DRIVER +L: linux-wireless@vger.kernel.org +S: Orphan +W: http://linux-lc100020.sourceforge.net +F: drivers/net/wireless/zydas/zd1201.* + +USB ZR364XX DRIVER +M: Antoine Jacquet +L: linux-usb@vger.kernel.org +L: linux-media@vger.kernel.org +S: Maintained +W: http://royale.zerezo.com/zr364xx/ +T: git git://linuxtv.org/media_tree.git +F: Documentation/admin-guide/media/zr364xx* +F: drivers/media/usb/zr364xx/ + +USER-MODE LINUX (UML) +M: Jeff Dike +M: Richard Weinberger +M: Anton Ivanov +L: linux-um@lists.infradead.org +S: Maintained +W: http://user-mode-linux.sourceforge.net +Q: https://patchwork.ozlabs.org/project/linux-um/list/ +T: git git://git.kernel.org/pub/scm/linux/kernel/git/rw/uml.git +F: Documentation/virt/uml/ +F: arch/um/ +F: arch/x86/um/ +F: fs/hostfs/ + +USERSPACE COPYIN/COPYOUT (UIOVEC) +M: Alexander Viro +S: Maintained +F: include/linux/uio.h +F: lib/iov_iter.c + +USERSPACE DMA BUFFER DRIVER +M: Gerd Hoffmann +L: dri-devel@lists.freedesktop.org +S: Maintained +T: git git://anongit.freedesktop.org/drm/drm-misc +F: drivers/dma-buf/udmabuf.c +F: include/uapi/linux/udmabuf.h + +USERSPACE I/O (UIO) +M: Greg Kroah-Hartman +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc.git +F: Documentation/driver-api/uio-howto.rst +F: drivers/uio/ +F: include/linux/uio_driver.h + +UTIL-LINUX PACKAGE +M: Karel Zak +L: util-linux@vger.kernel.org +S: Maintained +W: http://en.wikipedia.org/wiki/Util-linux +T: git git://git.kernel.org/pub/scm/utils/util-linux/util-linux.git + +UUID HELPERS +M: Christoph Hellwig +R: Andy Shevchenko +L: linux-kernel@vger.kernel.org +S: Maintained +T: git git://git.infradead.org/users/hch/uuid.git +F: include/linux/uuid.h +F: include/uapi/linux/uuid.h +F: lib/test_uuid.c +F: lib/uuid.c + +UV SYSFS DRIVER +M: Justin Ernst +L: platform-driver-x86@vger.kernel.org +S: Maintained +F: drivers/platform/x86/uv_sysfs.c + +UVESAFB DRIVER +M: Michal Januszewski +L: linux-fbdev@vger.kernel.org +S: Maintained +W: https://github.com/mjanusz/v86d +F: Documentation/fb/uvesafb.rst +F: drivers/video/fbdev/uvesafb.* + +Ux500 CLOCK DRIVERS +M: Ulf Hansson +L: linux-clk@vger.kernel.org +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +F: drivers/clk/ux500/ + +VF610 NAND DRIVER +M: Stefan Agner +L: linux-mtd@lists.infradead.org +S: Supported +F: drivers/mtd/nand/raw/vf610_nfc.c + +VFAT/FAT/MSDOS FILESYSTEM +M: OGAWA Hirofumi +S: Maintained +F: Documentation/filesystems/vfat.rst +F: fs/fat/ + +VFIO DRIVER +M: Alex Williamson +R: Cornelia Huck +L: kvm@vger.kernel.org +S: Maintained +T: git git://github.com/awilliam/linux-vfio.git +F: Documentation/driver-api/vfio.rst +F: drivers/vfio/ +F: include/linux/vfio.h +F: include/linux/vfio_pci_core.h +F: include/uapi/linux/vfio.h + +VFIO FSL-MC DRIVER +M: Diana Craciun +L: kvm@vger.kernel.org +S: Maintained +F: drivers/vfio/fsl-mc/ + +VFIO MEDIATED DEVICE DRIVERS +M: Kirti Wankhede +L: kvm@vger.kernel.org +S: Maintained +F: Documentation/driver-api/vfio-mediated-device.rst +F: drivers/vfio/mdev/ +F: include/linux/mdev.h +F: samples/vfio-mdev/ + +VFIO PLATFORM DRIVER +M: Eric Auger +L: kvm@vger.kernel.org +S: Maintained +F: drivers/vfio/platform/ + +VGA_SWITCHEROO +R: Lukas Wunner +S: Maintained +T: git git://anongit.freedesktop.org/drm/drm-misc +F: Documentation/gpu/vga-switcheroo.rst +F: drivers/gpu/vga/vga_switcheroo.c +F: include/linux/vga_switcheroo.h + +VIA RHINE NETWORK DRIVER +S: Maintained +M: Kevin Brace +F: drivers/net/ethernet/via/via-rhine.c + +VIA SD/MMC CARD CONTROLLER DRIVER +M: Bruce Chang +M: Harald Welte +S: Maintained +F: drivers/mmc/host/via-sdmmc.c + +VIA UNICHROME(PRO)/CHROME9 FRAMEBUFFER DRIVER +M: Florian Tobias Schandinat +L: linux-fbdev@vger.kernel.org +S: Maintained +F: drivers/video/fbdev/via/ +F: include/linux/via-core.h +F: include/linux/via-gpio.h +F: include/linux/via_i2c.h + +VIA VELOCITY NETWORK DRIVER +M: Francois Romieu +L: netdev@vger.kernel.org +S: Maintained +F: drivers/net/ethernet/via/via-velocity.* + +VICODEC VIRTUAL CODEC DRIVER +M: Hans Verkuil +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +T: git git://linuxtv.org/media_tree.git +F: drivers/media/test-drivers/vicodec/* + +VIDEO I2C POLLING DRIVER +M: Matt Ranostay +L: linux-media@vger.kernel.org +S: Maintained +F: drivers/media/i2c/video-i2c.c + +VIDEO MULTIPLEXER DRIVER +M: Philipp Zabel +L: linux-media@vger.kernel.org +S: Maintained +F: drivers/media/platform/video-mux.c + +VIDEOBUF2 FRAMEWORK +M: Tomasz Figa +M: Marek Szyprowski +L: linux-media@vger.kernel.org +S: Maintained +F: drivers/media/common/videobuf2/* +F: include/media/videobuf2-* + +VIMC VIRTUAL MEDIA CONTROLLER DRIVER +M: Helen Koike +R: Shuah Khan +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +T: git git://linuxtv.org/media_tree.git +F: drivers/media/test-drivers/vimc/* + +VIRT LIB +M: Alex Williamson +M: Paolo Bonzini +L: kvm@vger.kernel.org +S: Supported +F: virt/lib/ + +VIRTIO AND VHOST VSOCK DRIVER +M: Stefan Hajnoczi +M: Stefano Garzarella +L: kvm@vger.kernel.org +L: virtualization@lists.linux-foundation.org +L: netdev@vger.kernel.org +S: Maintained +F: drivers/vhost/vsock.c +F: include/linux/virtio_vsock.h +F: include/uapi/linux/virtio_vsock.h +F: net/vmw_vsock/virtio_transport.c +F: net/vmw_vsock/virtio_transport_common.c + +VIRTIO BLOCK AND SCSI DRIVERS +M: "Michael S. Tsirkin" +M: Jason Wang +R: Paolo Bonzini +R: Stefan Hajnoczi +L: virtualization@lists.linux-foundation.org +S: Maintained +F: drivers/block/virtio_blk.c +F: drivers/scsi/virtio_scsi.c +F: drivers/vhost/scsi.c +F: include/uapi/linux/virtio_blk.h +F: include/uapi/linux/virtio_scsi.h + +VIRTIO CONSOLE DRIVER +M: Amit Shah +L: virtualization@lists.linux-foundation.org +S: Maintained +F: drivers/char/virtio_console.c +F: include/linux/virtio_console.h +F: include/uapi/linux/virtio_console.h + +VIRTIO CORE AND NET DRIVERS +M: "Michael S. Tsirkin" +M: Jason Wang +L: virtualization@lists.linux-foundation.org +S: Maintained +F: Documentation/devicetree/bindings/virtio/ +F: drivers/block/virtio_blk.c +F: drivers/crypto/virtio/ +F: drivers/net/virtio_net.c +F: drivers/vdpa/ +F: drivers/virtio/ +F: include/linux/vdpa.h +F: include/linux/virtio*.h +F: include/uapi/linux/virtio_*.h +F: tools/virtio/ + +VIRTIO BALLOON +M: "Michael S. Tsirkin" +M: David Hildenbrand +L: virtualization@lists.linux-foundation.org +S: Maintained +F: drivers/virtio/virtio_balloon.c +F: include/uapi/linux/virtio_balloon.h +F: include/linux/balloon_compaction.h +F: mm/balloon_compaction.c + +VIRTIO CRYPTO DRIVER +M: Gonglei +L: virtualization@lists.linux-foundation.org +L: linux-crypto@vger.kernel.org +S: Maintained +F: drivers/crypto/virtio/ +F: include/uapi/linux/virtio_crypto.h + +VIRTIO DRIVERS FOR S390 +M: Cornelia Huck +M: Halil Pasic +L: linux-s390@vger.kernel.org +L: virtualization@lists.linux-foundation.org +L: kvm@vger.kernel.org +S: Supported +F: arch/s390/include/uapi/asm/virtio-ccw.h +F: drivers/s390/virtio/ + +VIRTIO FILE SYSTEM +M: Vivek Goyal +M: Stefan Hajnoczi +M: Miklos Szeredi +L: virtualization@lists.linux-foundation.org +L: linux-fsdevel@vger.kernel.org +S: Supported +W: https://virtio-fs.gitlab.io/ +F: Documentation/filesystems/virtiofs.rst +F: fs/fuse/virtio_fs.c +F: include/uapi/linux/virtio_fs.h + +VIRTIO GPIO DRIVER +M: Enrico Weigelt, metux IT consult +M: Viresh Kumar +L: linux-gpio@vger.kernel.org +L: virtualization@lists.linux-foundation.org +S: Maintained +F: drivers/gpio/gpio-virtio.c +F: include/uapi/linux/virtio_gpio.h + +VIRTIO GPU DRIVER +M: David Airlie +M: Gerd Hoffmann +L: dri-devel@lists.freedesktop.org +L: virtualization@lists.linux-foundation.org +S: Maintained +T: git git://anongit.freedesktop.org/drm/drm-misc +F: drivers/gpu/drm/virtio/ +F: include/uapi/linux/virtio_gpu.h + +VIRTIO HOST (VHOST) +M: "Michael S. Tsirkin" +M: Jason Wang +L: kvm@vger.kernel.org +L: virtualization@lists.linux-foundation.org +L: netdev@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/mst/vhost.git +F: drivers/vhost/ +F: include/linux/vhost_iotlb.h +F: include/uapi/linux/vhost.h + +VIRTIO INPUT DRIVER +M: Gerd Hoffmann +S: Maintained +F: drivers/virtio/virtio_input.c +F: include/uapi/linux/virtio_input.h + +VIRTIO IOMMU DRIVER +M: Jean-Philippe Brucker +L: virtualization@lists.linux-foundation.org +S: Maintained +F: drivers/iommu/virtio-iommu.c +F: include/uapi/linux/virtio_iommu.h + +VIRTIO MEM DRIVER +M: David Hildenbrand +L: virtualization@lists.linux-foundation.org +S: Maintained +W: https://virtio-mem.gitlab.io/ +F: drivers/virtio/virtio_mem.c +F: include/uapi/linux/virtio_mem.h + +VIRTIO SOUND DRIVER +M: Anton Yakovlev +M: "Michael S. Tsirkin" +L: virtualization@lists.linux-foundation.org +L: alsa-devel@alsa-project.org (moderated for non-subscribers) +S: Maintained +F: include/uapi/linux/virtio_snd.h +F: sound/virtio/* + +VIRTIO I2C DRIVER +M: Jie Deng +M: Viresh Kumar +L: linux-i2c@vger.kernel.org +L: virtualization@lists.linux-foundation.org +S: Maintained +F: drivers/i2c/busses/i2c-virtio.c +F: include/uapi/linux/virtio_i2c.h + +VIRTUAL BOX GUEST DEVICE DRIVER +M: Hans de Goede +M: Arnd Bergmann +M: Greg Kroah-Hartman +S: Maintained +F: drivers/virt/vboxguest/ +F: include/linux/vbox_utils.h +F: include/uapi/linux/vbox*.h + +VIRTUAL BOX SHARED FOLDER VFS DRIVER +M: Hans de Goede +L: linux-fsdevel@vger.kernel.org +S: Maintained +F: fs/vboxsf/* + +VIRTUAL SERIO DEVICE DRIVER +M: Stephen Chandler Paul +S: Maintained +F: drivers/input/serio/userio.c +F: include/uapi/linux/userio.h + +VIVID VIRTUAL VIDEO DRIVER +M: Hans Verkuil +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +T: git git://linuxtv.org/media_tree.git +F: drivers/media/test-drivers/vivid/* + +VIDTV VIRTUAL DIGITAL TV DRIVER +M: Daniel W. S. Almeida +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +T: git git://linuxtv.org/media_tree.git +F: drivers/media/test-drivers/vidtv/* + +VLYNQ BUS +M: Florian Fainelli +L: openwrt-devel@lists.openwrt.org (subscribers-only) +S: Maintained +F: drivers/vlynq/vlynq.c +F: include/linux/vlynq.h + +VME SUBSYSTEM +M: Martyn Welch +M: Manohar Vanga +M: Greg Kroah-Hartman +L: linux-kernel@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc.git +F: Documentation/driver-api/vme.rst +F: drivers/staging/vme/ +F: drivers/vme/ +F: include/linux/vme* + +VM SOCKETS (AF_VSOCK) +M: Stefano Garzarella +L: virtualization@lists.linux-foundation.org +L: netdev@vger.kernel.org +S: Maintained +F: drivers/net/vsockmon.c +F: include/net/af_vsock.h +F: include/uapi/linux/vm_sockets.h +F: include/uapi/linux/vm_sockets_diag.h +F: include/uapi/linux/vsockmon.h +F: net/vmw_vsock/ +F: tools/testing/vsock/ + +VMWARE BALLOON DRIVER +M: Nadav Amit +M: "VMware, Inc." +L: linux-kernel@vger.kernel.org +S: Maintained +F: drivers/misc/vmw_balloon.c + +VMWARE HYPERVISOR INTERFACE +M: Deep Shah +M: "VMware, Inc." +L: virtualization@lists.linux-foundation.org +S: Supported +F: arch/x86/include/asm/vmware.h +F: arch/x86/kernel/cpu/vmware.c + +VMWARE PVRDMA DRIVER +M: Adit Ranadive +M: VMware PV-Drivers +L: linux-rdma@vger.kernel.org +S: Maintained +F: drivers/infiniband/hw/vmw_pvrdma/ + +VMware PVSCSI driver +M: Vishal Bhakta +M: VMware PV-Drivers +L: linux-scsi@vger.kernel.org +S: Maintained +F: drivers/scsi/vmw_pvscsi.c +F: drivers/scsi/vmw_pvscsi.h + +VMWARE VIRTUAL PTP CLOCK DRIVER +M: Vivek Thampi +M: "VMware, Inc." +L: netdev@vger.kernel.org +S: Supported +F: drivers/ptp/ptp_vmw.c + +VMWARE VMCI DRIVER +M: Jorgen Hansen +M: Vishnu Dasa +L: linux-kernel@vger.kernel.org +L: pv-drivers@vmware.com (private) +S: Maintained +F: drivers/misc/vmw_vmci/ + +VMWARE VMMOUSE SUBDRIVER +M: "VMware Graphics" +M: "VMware, Inc." +L: linux-input@vger.kernel.org +S: Maintained +F: drivers/input/mouse/vmmouse.c +F: drivers/input/mouse/vmmouse.h + +VMWARE VMXNET3 ETHERNET DRIVER +M: Ronak Doshi +M: pv-drivers@vmware.com +L: netdev@vger.kernel.org +S: Maintained +F: drivers/net/vmxnet3/ + +VOCORE VOCORE2 BOARD +M: Harvey Hunt +L: linux-mips@vger.kernel.org +S: Maintained +F: arch/mips/boot/dts/ralink/vocore2.dts + +VOLTAGE AND CURRENT REGULATOR FRAMEWORK +M: Liam Girdwood +M: Mark Brown +L: linux-kernel@vger.kernel.org +S: Supported +W: http://www.slimlogic.co.uk/?p=48 +T: git git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regulator.git +F: Documentation/devicetree/bindings/regulator/ +F: Documentation/power/regulator/ +F: drivers/regulator/ +F: include/dt-bindings/regulator/ +F: include/linux/regulator/ +K: regulator_get_optional + +VOLTAGE AND CURRENT REGULATOR IRQ HELPERS +R: Matti Vaittinen +F: drivers/regulator/irq_helpers.c + +VRF +M: David Ahern +L: netdev@vger.kernel.org +S: Maintained +F: Documentation/networking/vrf.rst +F: drivers/net/vrf.c + +VSPRINTF +M: Petr Mladek +M: Steven Rostedt +M: Sergey Senozhatsky +R: Andy Shevchenko +R: Rasmus Villemoes +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/pmladek/printk.git +F: Documentation/core-api/printk-formats.rst +F: lib/test_printf.c +F: lib/test_scanf.c +F: lib/vsprintf.c + +VT1211 HARDWARE MONITOR DRIVER +M: Juerg Haefliger +L: linux-hwmon@vger.kernel.org +S: Maintained +F: Documentation/hwmon/vt1211.rst +F: drivers/hwmon/vt1211.c + +VT8231 HARDWARE MONITOR DRIVER +M: Roger Lucas +L: linux-hwmon@vger.kernel.org +S: Maintained +F: drivers/hwmon/vt8231.c + +VUB300 USB to SDIO/SD/MMC bridge chip +L: linux-mmc@vger.kernel.org +S: Orphan +F: drivers/mmc/host/vub300.c + +W1 DALLAS'S 1-WIRE BUS +M: Evgeniy Polyakov +S: Maintained +F: Documentation/devicetree/bindings/w1/ +F: Documentation/w1/ +F: drivers/w1/ +F: include/linux/w1.h + +W83791D HARDWARE MONITORING DRIVER +M: Marc Hulsman +L: linux-hwmon@vger.kernel.org +S: Maintained +F: Documentation/hwmon/w83791d.rst +F: drivers/hwmon/w83791d.c + +W83793 HARDWARE MONITORING DRIVER +M: Rudolf Marek +L: linux-hwmon@vger.kernel.org +S: Maintained +F: Documentation/hwmon/w83793.rst +F: drivers/hwmon/w83793.c + +W83795 HARDWARE MONITORING DRIVER +M: Jean Delvare +L: linux-hwmon@vger.kernel.org +S: Maintained +F: drivers/hwmon/w83795.c + +W83L51xD SD/MMC CARD INTERFACE DRIVER +M: Pierre Ossman +S: Maintained +F: drivers/mmc/host/wbsd.* + +WACOM PROTOCOL 4 SERIAL TABLETS +M: Julian Squires +M: Hans de Goede +L: linux-input@vger.kernel.org +S: Maintained +F: drivers/input/tablet/wacom_serial4.c + +WATCHDOG DEVICE DRIVERS +M: Wim Van Sebroeck +M: Guenter Roeck +L: linux-watchdog@vger.kernel.org +S: Maintained +W: http://www.linux-watchdog.org/ +T: git git://www.linux-watchdog.org/linux-watchdog.git +F: Documentation/devicetree/bindings/watchdog/ +F: Documentation/watchdog/ +F: drivers/watchdog/ +F: include/linux/watchdog.h +F: include/uapi/linux/watchdog.h + +WHISKEYCOVE PMIC GPIO DRIVER +M: Kuppuswamy Sathyanarayanan +L: linux-gpio@vger.kernel.org +S: Maintained +F: drivers/gpio/gpio-wcove.c + +WHWAVE RTC DRIVER +M: Dianlong Li +L: linux-rtc@vger.kernel.org +S: Maintained +F: drivers/rtc/rtc-sd3078.c + +WIIMOTE HID DRIVER +M: David Rheinsberg +L: linux-input@vger.kernel.org +S: Maintained +F: drivers/hid/hid-wiimote* + +WILOCITY WIL6210 WIRELESS DRIVER +M: Maya Erez +L: linux-wireless@vger.kernel.org +L: wil6210@qti.qualcomm.com +S: Supported +W: https://wireless.wiki.kernel.org/en/users/Drivers/wil6210 +F: drivers/net/wireless/ath/wil6210/ + +WINBOND CIR DRIVER +M: David Härdeman +S: Maintained +F: drivers/media/rc/winbond-cir.c + +WINSYSTEMS EBC-C384 WATCHDOG DRIVER +M: William Breathitt Gray +L: linux-watchdog@vger.kernel.org +S: Maintained +F: drivers/watchdog/ebc-c384_wdt.c + +WINSYSTEMS WS16C48 GPIO DRIVER +M: William Breathitt Gray +L: linux-gpio@vger.kernel.org +S: Maintained +F: drivers/gpio/gpio-ws16c48.c + +WIREGUARD SECURE NETWORK TUNNEL +M: Jason A. Donenfeld +L: wireguard@lists.zx2c4.com +L: netdev@vger.kernel.org +S: Maintained +F: drivers/net/wireguard/ +F: tools/testing/selftests/wireguard/ + +WISTRON LAPTOP BUTTON DRIVER +M: Miloslav Trmac +S: Maintained +F: drivers/input/misc/wistron_btns.c + +WL3501 WIRELESS PCMCIA CARD DRIVER +L: linux-wireless@vger.kernel.org +S: Odd fixes +F: drivers/net/wireless/wl3501* + +WOLFSON MICROELECTRONICS DRIVERS +L: patches@opensource.cirrus.com +S: Supported +W: https://github.com/CirrusLogic/linux-drivers/wiki +T: git https://github.com/CirrusLogic/linux-drivers.git +F: Documentation/devicetree/bindings/extcon/wlf,arizona.yaml +F: Documentation/devicetree/bindings/mfd/wlf,arizona.yaml +F: Documentation/devicetree/bindings/mfd/wm831x.txt +F: Documentation/devicetree/bindings/regulator/wlf,arizona.yaml +F: Documentation/devicetree/bindings/sound/wlf,*.yaml +F: Documentation/devicetree/bindings/sound/wm* +F: Documentation/hwmon/wm83??.rst +F: arch/arm/mach-s3c/mach-crag6410* +F: drivers/clk/clk-wm83*.c +F: drivers/gpio/gpio-*wm*.c +F: drivers/gpio/gpio-arizona.c +F: drivers/hwmon/wm83??-hwmon.c +F: drivers/input/misc/wm831x-on.c +F: drivers/input/touchscreen/wm831x-ts.c +F: drivers/input/touchscreen/wm97*.c +F: drivers/leds/leds-wm83*.c +F: drivers/mfd/arizona* +F: drivers/mfd/cs47l24* +F: drivers/mfd/wm*.c +F: drivers/power/supply/wm83*.c +F: drivers/regulator/arizona* +F: drivers/regulator/wm8*.c +F: drivers/rtc/rtc-wm83*.c +F: drivers/video/backlight/wm83*_bl.c +F: drivers/watchdog/wm83*_wdt.c +F: include/linux/mfd/arizona/ +F: include/linux/mfd/wm831x/ +F: include/linux/mfd/wm8350/ +F: include/linux/mfd/wm8400* +F: include/linux/regulator/arizona* +F: include/linux/wm97xx.h +F: include/sound/wm????.h +F: sound/soc/codecs/arizona* +F: sound/soc/codecs/cs47l24* +F: sound/soc/codecs/wm* + +WORKQUEUE +M: Tejun Heo +R: Lai Jiangshan +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq.git +F: Documentation/core-api/workqueue.rst +F: include/linux/workqueue.h +F: kernel/workqueue.c + +WWAN DRIVERS +M: Loic Poulain +M: Sergey Ryazanov +R: Johannes Berg +L: netdev@vger.kernel.org +S: Maintained +F: drivers/net/wwan/ +F: include/linux/wwan.h +F: include/uapi/linux/wwan.h + +X-POWERS AXP288 PMIC DRIVERS +M: Hans de Goede +S: Maintained +F: drivers/acpi/pmic/intel_pmic_xpower.c +N: axp288 + +X-POWERS MULTIFUNCTION PMIC DEVICE DRIVERS +M: Chen-Yu Tsai +L: linux-kernel@vger.kernel.org +S: Maintained +N: axp[128] + +X.25 STACK +M: Martin Schiller +L: linux-x25@vger.kernel.org +S: Maintained +F: Documentation/networking/lapb-module.rst +F: Documentation/networking/x25* +F: drivers/net/wan/hdlc_x25.c +F: drivers/net/wan/lapbether.c +F: include/*/lapb.h +F: include/net/x25* +F: include/uapi/linux/x25.h +F: net/lapb/ +F: net/x25/ + +X86 ARCHITECTURE (32-BIT AND 64-BIT) +M: Thomas Gleixner +M: Ingo Molnar +M: Borislav Petkov +M: Dave Hansen +M: x86@kernel.org +R: "H. Peter Anvin" +L: linux-kernel@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git x86/core +F: Documentation/devicetree/bindings/x86/ +F: Documentation/x86/ +F: arch/x86/ + +X86 ENTRY CODE +M: Andy Lutomirski +L: linux-kernel@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git x86/asm +F: arch/x86/entry/ + +X86 MCE INFRASTRUCTURE +M: Tony Luck +M: Borislav Petkov +L: linux-edac@vger.kernel.org +S: Maintained +F: arch/x86/kernel/cpu/mce/* + +X86 MICROCODE UPDATE SUPPORT +M: Borislav Petkov +S: Maintained +F: arch/x86/kernel/cpu/microcode/* + +X86 MM +M: Dave Hansen +M: Andy Lutomirski +M: Peter Zijlstra +L: linux-kernel@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git x86/mm +F: arch/x86/mm/ + +X86 PLATFORM DRIVERS +M: Hans de Goede +M: Mark Gross +L: platform-driver-x86@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/pdx86/platform-drivers-x86.git +F: drivers/platform/olpc/ +F: drivers/platform/x86/ + +X86 PLATFORM DRIVERS - ARCH +R: Darren Hart +R: Andy Shevchenko +L: platform-driver-x86@vger.kernel.org +L: x86@kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git x86/core +F: arch/x86/platform + +X86 PLATFORM UV HPE SUPERDOME FLEX +M: Steve Wahl +R: Mike Travis +R: Dimitri Sivanich +R: Russ Anderson +S: Supported +F: arch/x86/include/asm/uv/ +F: arch/x86/kernel/apic/x2apic_uv_x.c +F: arch/x86/platform/uv/ + +X86 VDSO +M: Andy Lutomirski +L: linux-kernel@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git x86/vdso +F: arch/x86/entry/vdso/ + +XARRAY +M: Matthew Wilcox +L: linux-fsdevel@vger.kernel.org +S: Supported +F: Documentation/core-api/xarray.rst +F: include/linux/idr.h +F: include/linux/xarray.h +F: lib/idr.c +F: lib/xarray.c +F: tools/testing/radix-tree + +XBOX DVD IR REMOTE +M: Benjamin Valentin +S: Maintained +F: drivers/media/rc/keymaps/rc-xbox-dvd.c +F: drivers/media/rc/xbox_remote.c + +XC2028/3028 TUNER DRIVER +M: Mauro Carvalho Chehab +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org +T: git git://linuxtv.org/media_tree.git +F: drivers/media/tuners/tuner-xc2028.* + +XDP (eXpress Data Path) +M: Alexei Starovoitov +M: Daniel Borkmann +M: David S. Miller +M: Jakub Kicinski +M: Jesper Dangaard Brouer +M: John Fastabend +L: netdev@vger.kernel.org +L: bpf@vger.kernel.org +S: Supported +F: include/net/xdp.h +F: include/net/xdp_priv.h +F: include/trace/events/xdp.h +F: kernel/bpf/cpumap.c +F: kernel/bpf/devmap.c +F: net/core/xdp.c +F: samples/bpf/xdp* +F: tools/testing/selftests/bpf/*xdp* +F: tools/testing/selftests/bpf/*/*xdp* +F: drivers/net/ethernet/*/*/*/*/*xdp* +F: drivers/net/ethernet/*/*/*xdp* +K: (?:\b|_)xdp(?:\b|_) + +XDP SOCKETS (AF_XDP) +M: Björn Töpel +M: Magnus Karlsson +R: Jonathan Lemon +L: netdev@vger.kernel.org +L: bpf@vger.kernel.org +S: Maintained +F: Documentation/networking/af_xdp.rst +F: include/net/xdp_sock* +F: include/net/xsk_buff_pool.h +F: include/uapi/linux/if_xdp.h +F: include/uapi/linux/xdp_diag.h +F: include/net/netns/xdp.h +F: net/xdp/ +F: samples/bpf/xdpsock* +F: tools/lib/bpf/xsk* + +XEN BLOCK SUBSYSTEM +M: Roger Pau Monné +L: xen-devel@lists.xenproject.org (moderated for non-subscribers) +S: Supported +F: drivers/block/xen* +F: drivers/block/xen-blkback/* + +XEN HYPERVISOR ARM +M: Stefano Stabellini +L: xen-devel@lists.xenproject.org (moderated for non-subscribers) +S: Maintained +F: arch/arm/include/asm/xen/ +F: arch/arm/xen/ + +XEN HYPERVISOR ARM64 +M: Stefano Stabellini +L: xen-devel@lists.xenproject.org (moderated for non-subscribers) +S: Maintained +F: arch/arm64/include/asm/xen/ +F: arch/arm64/xen/ + +XEN HYPERVISOR INTERFACE +M: Boris Ostrovsky +M: Juergen Gross +R: Stefano Stabellini +L: xen-devel@lists.xenproject.org (moderated for non-subscribers) +S: Supported +T: git git://git.kernel.org/pub/scm/linux/kernel/git/xen/tip.git +F: Documentation/ABI/stable/sysfs-hypervisor-xen +F: Documentation/ABI/testing/sysfs-hypervisor-xen +F: arch/x86/include/asm/pvclock-abi.h +F: arch/x86/include/asm/xen/ +F: arch/x86/platform/pvh/ +F: arch/x86/xen/ +F: drivers/*/xen-*front.c +F: drivers/xen/ +F: include/uapi/xen/ +F: include/xen/ + +XEN NETWORK BACKEND DRIVER +M: Wei Liu +M: Paul Durrant +L: xen-devel@lists.xenproject.org (moderated for non-subscribers) +L: netdev@vger.kernel.org +S: Supported +F: drivers/net/xen-netback/* + +XEN PCI SUBSYSTEM +M: Juergen Gross +L: xen-devel@lists.xenproject.org (moderated for non-subscribers) +S: Supported +F: arch/x86/pci/*xen* +F: drivers/pci/*xen* + +XEN PVSCSI DRIVERS +M: Juergen Gross +L: xen-devel@lists.xenproject.org (moderated for non-subscribers) +L: linux-scsi@vger.kernel.org +S: Supported +F: drivers/scsi/xen-scsifront.c +F: drivers/xen/xen-scsiback.c +F: include/xen/interface/io/vscsiif.h + +XEN SOUND FRONTEND DRIVER +M: Oleksandr Andrushchenko +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/* + +XEN SWIOTLB SUBSYSTEM +M: Juergen Gross +M: Stefano Stabellini +L: xen-devel@lists.xenproject.org (moderated for non-subscribers) +L: iommu@lists.linux-foundation.org +S: Supported +F: arch/x86/xen/*swiotlb* +F: drivers/xen/*swiotlb* + +XFS FILESYSTEM +C: irc://irc.oftc.net/xfs +M: Darrick J. Wong +M: linux-xfs@vger.kernel.org +L: linux-xfs@vger.kernel.org +S: Supported +W: http://xfs.org/ +T: git git://git.kernel.org/pub/scm/fs/xfs/xfs-linux.git +F: Documentation/ABI/testing/sysfs-fs-xfs +F: Documentation/admin-guide/xfs.rst +F: Documentation/filesystems/xfs-delayed-logging-design.rst +F: Documentation/filesystems/xfs-self-describing-metadata.rst +F: fs/xfs/ +F: include/uapi/linux/dqblk_xfs.h +F: include/uapi/linux/fsmap.h + +XILINX AXI ETHERNET DRIVER +M: Radhey Shyam Pandey +S: Maintained +F: drivers/net/ethernet/xilinx/xilinx_axienet* + +XILINX CAN DRIVER +M: Appana Durga Kedareswara rao +R: Naga Sureshkumar Relli +L: linux-can@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/net/can/xilinx_can.txt +F: drivers/net/can/xilinx_can.c + +XILINX GPIO DRIVER +M: Shubhrajyoti Datta +R: Srinivas Neeli +R: Michal Simek +S: Maintained +F: Documentation/devicetree/bindings/gpio/gpio-xilinx.txt +F: Documentation/devicetree/bindings/gpio/gpio-zynq.yaml +F: drivers/gpio/gpio-xilinx.c +F: drivers/gpio/gpio-zynq.c + +XILINX SD-FEC IP CORES +M: Derek Kiernan +M: Dragan Cvetic +S: Maintained +F: Documentation/devicetree/bindings/misc/xlnx,sd-fec.txt +F: Documentation/misc-devices/xilinx_sdfec.rst +F: drivers/misc/Kconfig +F: drivers/misc/Makefile +F: drivers/misc/xilinx_sdfec.c +F: include/uapi/misc/xilinx_sdfec.h + +XILINX UARTLITE SERIAL DRIVER +M: Peter Korsgaard +L: linux-serial@vger.kernel.org +S: Maintained +F: drivers/tty/serial/uartlite.c + +XILINX VIDEO IP CORES +M: Hyun Kwon +M: Laurent Pinchart +L: linux-media@vger.kernel.org +S: Supported +T: git git://linuxtv.org/media_tree.git +F: Documentation/devicetree/bindings/media/xilinx/ +F: drivers/media/platform/xilinx/ +F: include/uapi/linux/xilinx-v4l2-controls.h + +XILINX ZYNQMP DPDMA DRIVER +M: Hyun Kwon +M: Laurent Pinchart +L: dmaengine@vger.kernel.org +S: Supported +F: Documentation/devicetree/bindings/dma/xilinx/xlnx,zynqmp-dpdma.yaml +F: drivers/dma/xilinx/xilinx_dpdma.c +F: include/dt-bindings/dma/xlnx-zynqmp-dpdma.h + +XILINX ZYNQMP PSGTR PHY DRIVER +M: Anurag Kumar Vulisha +M: Laurent Pinchart +L: linux-kernel@vger.kernel.org +S: Supported +T: git https://github.com/Xilinx/linux-xlnx.git +F: Documentation/devicetree/bindings/phy/xlnx,zynqmp-psgtr.yaml +F: drivers/phy/xilinx/phy-zynqmp.c + +XILLYBUS DRIVER +M: Eli Billauer +L: linux-kernel@vger.kernel.org +S: Supported +F: drivers/char/xillybus/ + +XLP9XX I2C DRIVER +M: George Cherian +L: linux-i2c@vger.kernel.org +S: Supported +W: http://www.marvell.com +F: Documentation/devicetree/bindings/i2c/i2c-xlp9xx.txt +F: drivers/i2c/busses/i2c-xlp9xx.c + +XRA1403 GPIO EXPANDER +M: Nandor Han +M: Semi Malinen +L: linux-gpio@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/gpio/gpio-xra1403.txt +F: drivers/gpio/gpio-xra1403.c + +XTENSA XTFPGA PLATFORM SUPPORT +M: Max Filippov +L: linux-xtensa@linux-xtensa.org +S: Maintained +F: drivers/spi/spi-xtensa-xtfpga.c +F: sound/soc/xtensa/xtfpga-i2s.c + +YAM DRIVER FOR AX.25 +M: Jean-Paul Roubelat +L: linux-hams@vger.kernel.org +S: Maintained +F: drivers/net/hamradio/yam* +F: include/linux/yam.h + +YAMA SECURITY MODULE +M: Kees Cook +S: Supported +T: git git://git.kernel.org/pub/scm/linux/kernel/git/kees/linux.git yama/tip +F: Documentation/admin-guide/LSM/Yama.rst +F: security/yama/ + +YEALINK PHONE DRIVER +M: Henk Vergonet +L: usbb2k-api-dev@nongnu.org +S: Maintained +F: Documentation/input/devices/yealink.rst +F: drivers/input/misc/yealink.* + +Z8530 DRIVER FOR AX.25 +M: Joerg Reuter +L: linux-hams@vger.kernel.org +S: Maintained +W: http://yaina.de/jreuter/ +W: http://www.qsl.net/dl1bke/ +F: Documentation/networking/device_drivers/hamradio/z8530drv.rst +F: drivers/net/hamradio/*scc.c +F: drivers/net/hamradio/z8530.h + +ZBUD COMPRESSED PAGE ALLOCATOR +M: Seth Jennings +M: Dan Streetman +L: linux-mm@kvack.org +S: Maintained +F: mm/zbud.c + +ZD1211RW WIRELESS DRIVER +M: Ulrich Kunitz +L: linux-wireless@vger.kernel.org +L: zd1211-devs@lists.sourceforge.net (subscribers-only) +S: Maintained +W: http://zd1211.ath.cx/wiki/DriverRewrite +F: drivers/net/wireless/zydas/zd1211rw/ + +ZD1301 MEDIA DRIVER +M: Antti Palosaari +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org/ +W: http://palosaari.fi/linux/ +Q: https://patchwork.linuxtv.org/project/linux-media/list/ +F: drivers/media/usb/dvb-usb-v2/zd1301* + +ZD1301_DEMOD MEDIA DRIVER +M: Antti Palosaari +L: linux-media@vger.kernel.org +S: Maintained +W: https://linuxtv.org/ +W: http://palosaari.fi/linux/ +Q: https://patchwork.linuxtv.org/project/linux-media/list/ +F: drivers/media/dvb-frontends/zd1301_demod* + +ZHAOXIN PROCESSOR SUPPORT +M: Tony W Wang-oc +L: linux-kernel@vger.kernel.org +S: Maintained +F: arch/x86/kernel/cpu/zhaoxin.c + +ZONEFS FILESYSTEM +M: Damien Le Moal +M: Naohiro Aota +R: Johannes Thumshirn +L: linux-fsdevel@vger.kernel.org +S: Maintained +T: git git://git.kernel.org/pub/scm/linux/kernel/git/dlemoal/zonefs.git +F: Documentation/filesystems/zonefs.rst +F: fs/zonefs/ + +ZPOOL COMPRESSED PAGE STORAGE API +M: Dan Streetman +L: linux-mm@kvack.org +S: Maintained +F: include/linux/zpool.h +F: mm/zpool.c + +ZR36067 VIDEO FOR LINUX DRIVER +M: Corentin Labbe +L: mjpeg-users@lists.sourceforge.net +L: linux-media@vger.kernel.org +S: Maintained +W: http://mjpeg.sourceforge.net/driver-zoran/ +Q: https://patchwork.linuxtv.org/project/linux-media/list/ +F: Documentation/driver-api/media/drivers/zoran.rst +F: drivers/staging/media/zoran/ + +ZRAM COMPRESSED RAM BLOCK DEVICE DRVIER +M: Minchan Kim +M: Nitin Gupta +R: Sergey Senozhatsky +L: linux-kernel@vger.kernel.org +S: Maintained +F: Documentation/admin-guide/blockdev/zram.rst +F: drivers/block/zram/ + +ZS DECSTATION Z85C30 SERIAL DRIVER +M: "Maciej W. Rozycki" +S: Maintained +F: drivers/tty/serial/zs.* + +ZSMALLOC COMPRESSED SLAB MEMORY ALLOCATOR +M: Minchan Kim +M: Nitin Gupta +R: Sergey Senozhatsky +L: linux-mm@kvack.org +S: Maintained +F: Documentation/vm/zsmalloc.rst +F: include/linux/zsmalloc.h +F: mm/zsmalloc.c + +ZSWAP COMPRESSED SWAP CACHING +M: Seth Jennings +M: Dan Streetman +M: Vitaly Wool +L: linux-mm@kvack.org +S: Maintained +F: mm/zswap.c + +THE REST +M: Linus Torvalds +L: linux-kernel@vger.kernel.org +S: Buried alive in reporters +Q: http://patchwork.kernel.org/project/LKML/list/ +T: git git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git +F: * +F: */ diff -urN linux-5.15/crypto/drbg.c linux-5.15-lrng/crypto/drbg.c --- linux-5.15/crypto/drbg.c 2021-11-01 07:53:10.000000000 +1100 +++ linux-5.15-lrng/crypto/drbg.c 2021-11-29 12:37:31.183279025 +1100 @@ -114,7 +114,7 @@ * the SHA256 / AES 256 over other ciphers. Thus, the favored * DRBGs are the latest entries in this array. */ -static const struct drbg_core drbg_cores[] = { +const struct drbg_core drbg_cores[] = { #ifdef CONFIG_CRYPTO_DRBG_CTR { .flags = DRBG_CTR | DRBG_STRENGTH128, @@ -191,6 +191,7 @@ }, #endif /* CONFIG_CRYPTO_DRBG_HMAC */ }; +EXPORT_SYMBOL(drbg_cores); static int drbg_uninstantiate(struct drbg_state *drbg); @@ -206,7 +207,7 @@ * Return: normalized strength in *bytes* value or 32 as default * to counter programming errors */ -static inline unsigned short drbg_sec_strength(drbg_flag_t flags) +unsigned short drbg_sec_strength(drbg_flag_t flags) { switch (flags & DRBG_STRENGTH_MASK) { case DRBG_STRENGTH128: @@ -219,6 +220,7 @@ return 32; } } +EXPORT_SYMBOL(drbg_sec_strength); /* * FIPS 140-2 continuous self test for the noise source @@ -1215,7 +1217,7 @@ } /* Free all substructures in a DRBG state without the DRBG state structure */ -static inline void drbg_dealloc_state(struct drbg_state *drbg) +void drbg_dealloc_state(struct drbg_state *drbg) { if (!drbg) return; @@ -1236,12 +1238,13 @@ drbg->fips_primed = false; } } +EXPORT_SYMBOL(drbg_dealloc_state); /* * Allocate all sub-structures for a DRBG state. * The DRBG state structure must already be allocated. */ -static inline int drbg_alloc_state(struct drbg_state *drbg) +int drbg_alloc_state(struct drbg_state *drbg) { int ret = -ENOMEM; unsigned int sb_size = 0; @@ -1322,6 +1325,7 @@ drbg_dealloc_state(drbg); return ret; } +EXPORT_SYMBOL(drbg_alloc_state); /************************************************************************* * DRBG interface functions @@ -1891,8 +1895,7 @@ * * return: flags */ -static inline void drbg_convert_tfm_core(const char *cra_driver_name, - int *coreref, bool *pr) +void drbg_convert_tfm_core(const char *cra_driver_name, int *coreref, bool *pr) { int i = 0; size_t start = 0; @@ -1919,6 +1922,7 @@ } } } +EXPORT_SYMBOL(drbg_convert_tfm_core); static int drbg_kcapi_init(struct crypto_tfm *tfm) { diff -urN linux-5.15/crypto/jitterentropy-kcapi.c linux-5.15-lrng/crypto/jitterentropy-kcapi.c --- linux-5.15/crypto/jitterentropy-kcapi.c 2021-11-01 07:53:10.000000000 +1100 +++ linux-5.15-lrng/crypto/jitterentropy-kcapi.c 2021-11-29 12:37:52.903278942 +1100 @@ -43,8 +43,7 @@ #include #include #include - -#include "jitterentropy.h" +#include /*************************************************************************** * Helper function diff -urN linux-5.15/crypto/jitterentropy.c linux-5.15-lrng/crypto/jitterentropy.c --- linux-5.15/crypto/jitterentropy.c 2021-11-01 07:53:10.000000000 +1100 +++ linux-5.15-lrng/crypto/jitterentropy.c 2021-11-29 12:37:52.903278942 +1100 @@ -117,7 +117,7 @@ #define JENT_EHEALTH 9 /* Health test failed during initialization */ #define JENT_ERCT 10 /* RCT failed during initialization */ -#include "jitterentropy.h" +#include /*************************************************************************** * Adaptive Proportion Test diff -urN linux-5.15/crypto/jitterentropy.h linux-5.15-lrng/crypto/jitterentropy.h --- linux-5.15/crypto/jitterentropy.h 2021-11-01 07:53:10.000000000 +1100 +++ linux-5.15-lrng/crypto/jitterentropy.h 1970-01-01 10:00:00.000000000 +1000 @@ -1,17 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later - -extern void *jent_zalloc(unsigned int len); -extern void jent_zfree(void *ptr); -extern int jent_fips_enabled(void); -extern void jent_panic(char *s); -extern void jent_memcpy(void *dest, const void *src, unsigned int n); -extern void jent_get_nstime(__u64 *out); - -struct rand_data; -extern int jent_entropy_init(void); -extern int jent_read_entropy(struct rand_data *ec, unsigned char *data, - unsigned int len); - -extern struct rand_data *jent_entropy_collector_alloc(unsigned int osr, - unsigned int flags); -extern void jent_entropy_collector_free(struct rand_data *entropy_collector); diff -urN linux-5.15/drivers/char/Kconfig linux-5.15-lrng/drivers/char/Kconfig --- linux-5.15/drivers/char/Kconfig 2021-11-01 07:53:10.000000000 +1100 +++ linux-5.15-lrng/drivers/char/Kconfig 2021-11-29 12:36:52.113279174 +1100 @@ -451,4 +451,6 @@ pool. Otherwise, say N here so it will be regarded as device input that only mixes the entropy pool. +source "drivers/char/lrng/Kconfig" + endmenu diff -urN linux-5.15/drivers/char/Makefile linux-5.15-lrng/drivers/char/Makefile --- linux-5.15/drivers/char/Makefile 2021-11-01 07:53:10.000000000 +1100 +++ linux-5.15-lrng/drivers/char/Makefile 2021-11-29 12:36:52.113279174 +1100 @@ -3,7 +3,14 @@ # Makefile for the kernel character device drivers. # -obj-y += mem.o random.o +obj-y += mem.o + +ifeq ($(CONFIG_LRNG),y) + obj-y += lrng/ +else + obj-y += random.o +endif + obj-$(CONFIG_TTY_PRINTK) += ttyprintk.o obj-y += misc.o obj-$(CONFIG_ATARI_DSP56K) += dsp56k.o diff -urN linux-5.15/drivers/char/lrng/Kconfig linux-5.15-lrng/drivers/char/lrng/Kconfig --- linux-5.15/drivers/char/lrng/Kconfig 1970-01-01 10:00:00.000000000 +1000 +++ linux-5.15-lrng/drivers/char/lrng/Kconfig 2021-11-29 12:38:26.593278813 +1100 @@ -0,0 +1,589 @@ +# SPDX-License-Identifier: GPL-2.0 +# +# Linux Random Number Generator configuration +# + +menuconfig LRNG + bool "Linux Random Number Generator" + select CRYPTO_LIB_SHA256 if CRYPTO + help + The Linux Random Number Generator (LRNG) is the replacement + of the existing /dev/random provided with drivers/char/random.c. + It generates entropy from different noise sources and + delivers significant entropy during boot. + +if LRNG + +menu "Specific DRNG seeding strategies" + +config LRNG_OVERSAMPLE_ENTROPY_SOURCES + bool "Oversample entropy sources" + default n + help + When enabling this option, the entropy sources are + over-sampled with the following approach: First, the + the entropy sources are requested to provide 64 bits more + entropy than the size of the entropy buffer. For example, + if the entropy buffer is 256 bits, 320 bits of entropy + is requested to fill that buffer. + + Second, the seed operation of the deterministic RNG + requests 128 bits more data from each entropy source than + the security strength of the DRNG during initialization. + A prerequisite for this operation is that the digest size + of the used hash must be at least equally large to generate + that buffer. If the prerequisite is not met, this + oversampling is not applied. + + This strategy is intended to offset the asymptotic entropy + increase to reach full entropy in a buffer. + + The strategy is consistent with the requirements in + NIST SP800-90C and is only enforced with fips=1. + + If unsure, say N. + +config LRNG_OVERSAMPLE_ES_BITS + int + default 0 if !LRNG_OVERSAMPLE_ENTROPY_SOURCES + default 64 if LRNG_OVERSAMPLE_ENTROPY_SOURCES + +config LRNG_SEED_BUFFER_INIT_ADD_BITS + int + default 0 if !LRNG_OVERSAMPLE_ENTROPY_SOURCES + default 128 if LRNG_OVERSAMPLE_ENTROPY_SOURCES + +endmenu # "Specific DRNG seeding strategies" + +menu "Entropy Source Configuration" + +comment "Interrupt Entropy Source" + +config LRNG_IRQ + bool "Enable Interrupt Entropy Source as LRNG Seed Source" + default y + help + The LRNG models an entropy source based on the timing of the + occurrence of interrupts. Enable this option to enable this + IRQ entropy source. + + The IRQ entropy source is triggered every time an interrupt + arrives and thus causes the interrupt handler to execute + slightly longer. Disabling the IRQ entropy source implies + that the performance penalty on the interrupt handler added + by the LRNG is eliminated. Yet, this entropy source is + considered to be the internal entropy source of the LRNG. + Thus, only disable it if you ensured that other entropy + sources are available that supply the LRNG with entropy. + + If you disable the IRQ entropy source, you MUST ensure + one or more entropy sources collectively have the + capability to deliver sufficient entropy with one invocation + at a rate compliant to the security strength of the DRNG + (usually 256 bits of entropy). In addition, if those + entropy sources do not deliver sufficient entropy during + first request, the reseed must be triggered from user + space or kernel space when sufficient entropy is considered + to be present. + + If unsure, say Y. + +choice + prompt "Continuous entropy compression boot time setting" + default LRNG_CONTINUOUS_COMPRESSION_ENABLED + depends on LRNG_IRQ + help + Select the default behavior of the interrupt entropy source + continuous compression operation. + + The Linux RNG collects entropy data during each interrupt. + For performance reasons, a amount of entropy data defined by + the LRNG entropy collection pool size is concatenated into + an array. When that array is filled up, a hash is calculated + to compress the entropy. That hash is calculated in + interrupt context. + + In case such hash calculation in interrupt context is deemed + too time-consuming, the continuous compression operation + can be disabled. If disabled, the collection of entropy will + not trigger a hash compression operation in interrupt context. + The compression happens only when the DRNG is reseeded which is + in process context. This implies that old entropy data + collected after the last DRNG-reseed is overwritten with newer + entropy data once the collection pool is full instead of + retaining its entropy with the compression operation. + + config LRNG_CONTINUOUS_COMPRESSION_ENABLED + bool "Enable continuous compression (default)" + + config LRNG_CONTINUOUS_COMPRESSION_DISABLED + bool "Disable continuous compression" +endchoice + +config LRNG_ENABLE_CONTINUOUS_COMPRESSION + bool + default y if LRNG_CONTINUOUS_COMPRESSION_ENABLED + default n if LRNG_CONTINUOUS_COMPRESSION_DISABLED + +config LRNG_SWITCHABLE_CONTINUOUS_COMPRESSION + bool "Runtime-switchable continuous entropy compression" + depends on LRNG_IRQ + help + Per default, the interrupt entropy source continuous + compression operation behavior is hard-wired into the kernel. + Enable this option to allow it to be configurable at boot time. + + To modify the default behavior of the continuous + compression operation, use the kernel command line option + of lrng_sw_noise.lrng_pcpu_continuous_compression. + + If unsure, say N. + +choice + prompt "LRNG Entropy Collection Pool Size" + default LRNG_COLLECTION_SIZE_1024 + depends on LRNG_IRQ + help + Select the size of the LRNG entropy collection pool + storing data for the interrupt entropy source without + performing a compression operation. The larger the + collection size is, the faster the average interrupt + handling will be. The collection size represents the + number of bytes of the per-CPU memory used to batch + up entropy event data. + + The default value is good for regular operations. Choose + larger sizes for servers that have no memory limitations. + If runtime memory is precious, choose a smaller size. + + The collection size is unrelated to the entropy rate + or the amount of entropy the LRNG can process. + + config LRNG_COLLECTION_SIZE_32 + depends on LRNG_CONTINUOUS_COMPRESSION_ENABLED + depends on !LRNG_SWITCHABLE_CONTINUOUS_COMPRESSION + depends on !LRNG_OVERSAMPLE_ENTROPY_SOURCES + bool "32 interrupt events" + + config LRNG_COLLECTION_SIZE_256 + depends on !LRNG_OVERSAMPLE_ENTROPY_SOURCES + bool "256 interrupt events" + + config LRNG_COLLECTION_SIZE_512 + bool "512 interrupt events" + + config LRNG_COLLECTION_SIZE_1024 + bool "1024 interrupt events (default)" + + config LRNG_COLLECTION_SIZE_2048 + bool "2048 interrupt events" + + config LRNG_COLLECTION_SIZE_4096 + bool "4096 interrupt events" + + config LRNG_COLLECTION_SIZE_8192 + bool "8192 interrupt events" + +endchoice + +config LRNG_COLLECTION_SIZE + int + default 32 if LRNG_COLLECTION_SIZE_32 + default 256 if LRNG_COLLECTION_SIZE_256 + default 512 if LRNG_COLLECTION_SIZE_512 + default 1024 if LRNG_COLLECTION_SIZE_1024 + default 2048 if LRNG_COLLECTION_SIZE_2048 + default 4096 if LRNG_COLLECTION_SIZE_4096 + default 8192 if LRNG_COLLECTION_SIZE_8192 + +config LRNG_HEALTH_TESTS + bool "Enable interrupt entropy source online health tests" + depends on LRNG_IRQ + help + The online health tests applied to the interrupt entropy + source validate the noise source at runtime for fatal + errors. These tests include SP800-90B compliant tests + which are invoked if the system is booted with fips=1. + In case of fatal errors during active SP800-90B tests, + the issue is logged and the noise data is discarded. + These tests are required for full compliance of the + interrupt entropy source with SP800-90B. + + If unsure, say Y. + +config LRNG_RCT_BROKEN + bool "SP800-90B RCT with dangerous low cutoff value" + depends on LRNG_HEALTH_TESTS + depends on BROKEN + default n + help + This option enables a dangerously low SP800-90B repetitive + count test (RCT) cutoff value which makes it very likely + that the RCT is triggered to raise a self test failure. + + This option is ONLY intended for developers wanting to + test the effectiveness of the SP800-90B RCT health test. + + If unsure, say N. + +config LRNG_APT_BROKEN + bool "SP800-90B APT with dangerous low cutoff value" + depends on LRNG_HEALTH_TESTS + depends on BROKEN + default n + help + This option enables a dangerously low SP800-90B adaptive + proportion test (APT) cutoff value which makes it very + likely that the APT is triggered to raise a self test + failure. + + This option is ONLY intended for developers wanting to + test the effectiveness of the SP800-90B APT health test. + + If unsure, say N. + +# Default taken from SP800-90B sec 4.4.1 - significance level 2^-30 +config LRNG_RCT_CUTOFF + int + default 31 if !LRNG_RCT_BROKEN + default 1 if LRNG_RCT_BROKEN + +# Default taken from SP800-90B sec 4.4.2 - significance level 2^-30 +config LRNG_APT_CUTOFF + int + default 325 if !LRNG_APT_BROKEN + default 32 if LRNG_APT_BROKEN + +config LRNG_IRQ_ENTROPY_RATE + int "Interrupt Entropy Source Entropy Rate" + depends on LRNG_IRQ + range 256 4294967295 + default 256 + help + The LRNG will collect the configured number of interrupts to + obtain 256 bits of entropy. This value can be set to any between + 256 and 4294967295. The LRNG guarantees that this value is not + lower than 256. This lower limit implies that one interrupt event + is credited with one bit of entropy. This value is subject to the + increase by the oversampling factor, if no high-resolution timer + is found. + + In order to effectively disable the interrupt entropy source, + the option has to be set to 4294967295. In this case, the + interrupt entropy source will still deliver data but without + being credited with entropy. + +comment "Jitter RNG Entropy Source" + +config LRNG_JENT + bool "Enable Jitter RNG as LRNG Seed Source" + depends on CRYPTO + select CRYPTO_JITTERENTROPY + help + The Linux RNG may use the Jitter RNG as noise source. Enabling + this option enables the use of the Jitter RNG. Its default + entropy level is 16 bits of entropy per 256 data bits delivered + by the Jitter RNG. This entropy level can be changed at boot + time or at runtime with the lrng_base.jitterrng configuration + variable. + +config LRNG_JENT_ENTROPY_RATE + int "Jitter RNG Entropy Source Entropy Rate" + depends on LRNG_JENT + range 0 256 + default 16 + help + The option defines the amount of entropy the LRNG applies to 256 + bits of data obtained from the Jitter RNG entropy source. The + LRNG enforces the limit that this value must be in the range + between 0 and 256. + + When configuring this value to 0, the Jitter RNG entropy source + will provide 256 bits of data without being credited to contain + entropy. + +comment "CPU Entropy Source" + +config LRNG_CPU + bool "Enable CPU Entropy Source as LRNG Seed Source" + default y + help + Current CPUs commonly contain entropy sources which can be + used to seed the LRNG. For example, the Intel RDSEED + instruction, or the POWER DARN instruction will be sourced + to seed the LRNG if this option is enabled. + + Note, if this option is enabled and the underlying CPU + does not offer such entropy source, the LRNG will automatically + detect this and ignore the hardware. + +config LRNG_CPU_FULL_ENT_MULTIPLIER + int + default 1 if !LRNG_TEST_CPU_ES_COMPRESSION + default 123 if LRNG_TEST_CPU_ES_COMPRESSION + +config LRNG_CPU_ENTROPY_RATE + int "CPU Entropy Source Entropy Rate" + depends on LRNG_CPU + range 0 256 + default 8 + help + The option defines the amount of entropy the LRNG applies to 256 + bits of data obtained from the CPU entropy source. The LRNG + enforces the limit that this value must be in the range between + 0 and 256. + + When configuring this value to 0, the CPU entropy source will + provide 256 bits of data without being credited to contain + entropy. + + Note, this option is overwritten when the option + CONFIG_RANDOM_TRUST_CPU is set. + +endmenu # "Entropy Source Configuration" + +menuconfig LRNG_DRNG_SWITCH + bool "Support DRNG runtime switching" + help + The Linux RNG per default uses a ChaCha20 DRNG that is + accessible via the external interfaces. With this configuration + option other DRNGs can be selected and loaded at runtime. + +if LRNG_DRNG_SWITCH + +config LRNG_KCAPI_HASH + bool + select CRYPTO_HASH + +config LRNG_DRBG + tristate "SP800-90A support for the LRNG" + depends on CRYPTO + select CRYPTO_DRBG_MENU + select CRYPTO_SHA512 + select LRNG_KCAPI_HASH + help + Enable the SP800-90A DRBG support for the LRNG. Once the + module is loaded, output from /dev/random, /dev/urandom, + getrandom(2), or get_random_bytes_full is provided by a DRBG. + +config LRNG_KCAPI + tristate "Kernel Crypto API support for the LRNG" + depends on CRYPTO + depends on !LRNG_DRBG + select CRYPTO_RNG + select LRNG_KCAPI_HASH + help + Enable the support for generic pseudo-random number + generators offered by the kernel crypto API with the + LRNG. Once the module is loaded, output from /dev/random, + /dev/urandom, getrandom(2), or get_random_bytes is + provided by the selected kernel crypto API RNG. +endif # LRNG_DRNG_SWITCH + +menuconfig LRNG_TESTING_MENU + bool "LRNG testing interfaces" + depends on DEBUG_FS + help + Enable one or more of the following test interfaces. + + If unsure, say N. + +if LRNG_TESTING_MENU + +config LRNG_RAW_HIRES_ENTROPY + bool "Enable entropy test interface to hires timer noise source" + default y + help + The test interface allows a privileged process to capture + the raw unconditioned high resolution time stamp noise that + is collected by the LRNG for statistical analysis. Extracted + noise data is not used to seed the LRNG. + + The raw noise data can be obtained using the lrng_raw_hires + debugfs file. Using the option lrng_testing.boot_raw_hires_test=1 + the raw noise of the first 1000 entropy events since boot + can be sampled. + +config LRNG_RAW_JIFFIES_ENTROPY + bool "Enable entropy test interface to Jiffies noise source" + help + The test interface allows a privileged process to capture + the raw unconditioned Jiffies that is collected by + the LRNG for statistical analysis. This data is used for + seeding the LRNG if a high-resolution time stamp is not + available. If a high-resolution time stamp is detected, + the Jiffies value is not collected by the LRNG and no + data is provided via the test interface. Extracted noise + data is not used to seed the random number generator. + + The raw noise data can be obtained using the lrng_raw_jiffies + debugfs file. Using the option lrng_testing.boot_raw_jiffies_test=1 + the raw noise of the first 1000 entropy events since boot + can be sampled. + +config LRNG_RAW_IRQ_ENTROPY + bool "Enable entropy test interface to IRQ number noise source" + help + The test interface allows a privileged process to capture + the raw unconditioned interrupt number that is collected by + the LRNG for statistical analysis. This data is used for + seeding the random32 PRNG external to the LRNG if a + high-resolution time stamp is available or it will be used to + seed the LRNG otherwise. Extracted noise data is not used to + seed the random number generator. + + The raw noise data can be obtained using the lrng_raw_irq + debugfs file. Using the option lrng_testing.boot_raw_irq_test=1 + the raw noise of the first 1000 entropy events since boot + can be sampled. + +config LRNG_RAW_IRQFLAGS_ENTROPY + bool "Enable entropy test interface to IRQ flags noise source" + help + The test interface allows a privileged process to capture + the raw unconditioned interrupt flags that is collected by + the LRNG for statistical analysis. This data is used for + seeding the random32 PRNG external to the LRNG if a + high-resolution time stamp is available or it will be used to + seed the LRNG otherwise. Extracted noise data is not used to + seed the random number generator. + + The raw noise data can be obtained using the lrng_raw_irqflags + debugfs file. Using the option lrng_testing.boot_raw_irqflags_test=1 + the raw noise of the first 1000 entropy events since boot + can be sampled. + +config LRNG_RAW_RETIP_ENTROPY + bool "Enable entropy test interface to RETIP value noise source" + help + The test interface allows a privileged process to capture + the raw unconditioned return instruction pointer value + that is collected by the LRNG for statistical analysis. + This data is used for seeding the random32 PRNG external + to the LRNG if a high-resolution time stamp is available or + it will be used to seed the LRNG otherwise. Extracted noise + data is not used to seed the random number generator. + + The raw noise data can be obtained using the lrng_raw_retip + debugfs file. Using the option lrng_testing.boot_raw_retip_test=1 + the raw noise of the first 1000 entropy events since boot + can be sampled. + +config LRNG_RAW_REGS_ENTROPY + bool "Enable entropy test interface to IRQ register value noise source" + help + The test interface allows a privileged process to capture + the raw unconditioned interrupt register value that is + collected by the LRNG for statistical analysis. Extracted noise + data is not used to seed the random number generator. + + The raw noise data can be obtained using the lrng_raw_regs + debugfs file. Using the option lrng_testing.boot_raw_regs_test=1 + the raw noise of the first 1000 entropy events since boot + can be sampled. + +config LRNG_RAW_ARRAY + bool "Enable test interface to LRNG raw entropy storage array" + help + The test interface allows a privileged process to capture + the raw noise data that is collected by the LRNG + in the per-CPU array for statistical analysis. The purpose + of this interface is to verify that the array handling code + truly only concatenates data and provides the same entropy + rate as the raw unconditioned noise source when assessing + the collected data byte-wise. + + The data can be obtained using the lrng_raw_array debugfs + file. Using the option lrng_testing.boot_raw_array=1 + the raw noise of the first 1000 entropy events since boot + can be sampled. + +config LRNG_IRQ_PERF + bool "Enable LRNG interrupt performance monitor" + help + With this option, the performance monitor of the LRNG + interrupt handling code is enabled. The file provides + the execution time of the interrupt handler in + cycles. + + The interrupt performance data can be obtained using + the lrng_irq_perf debugfs file. Using the option + lrng_testing.boot_irq_perf=1 the performance data of + the first 1000 entropy events since boot can be sampled. + +config LRNG_ACVT_HASH + bool "Enable LRNG ACVT Hash interface" + help + With this option, the LRNG built-in hash function used for + auxiliary pool management and prior to switching the + cryptographic backends is made available for ACVT. The + interface allows writing of the data to be hashed + into the interface. The read operation triggers the hash + operation to generate message digest. + + The ACVT interface is available with the lrng_acvt_hash + debugfs file. + +config LRNG_RUNTIME_ES_CONFIG + bool "Enable runtime configuration of entropy sources" + help + When enabling this option, the LRNG provides the mechanism + allowing to alter the entropy rate of each entropy source + during boot time and runtime. + + The following interfaces are available: + lrng_archrandom.archrandom for the CPU entropy source, + lrng_jent.jitterrng for the Jitter RNG entropy source, and + lrng_sw_noise.irq_entropy for the interrupt entropy source. + +config LRNG_RUNTIME_MAX_WO_RESEED_CONFIG + bool "Enable runtime configuration of max reseed threshold" + help + When enabling this option, the LRNG provides an interface + allowing the setting of the maximum number of DRNG generate + operations without a reseed that has full entropy. The + interface is lrng_drng.max_wo_reseed. + +config LRNG_TEST_CPU_ES_COMPRESSION + bool "Force CPU ES compression operation" + help + When enabling this option, the CPU ES compression operation + is forced by setting an arbitrary value > 1 for the data + multiplier even when the CPU ES would deliver full entropy. + This allows testing of the compression operation. It + therefore forces to pull more data from the CPU ES + than what may be required. + +config LRNG_TESTING + bool + default y if (LRNG_RAW_HIRES_ENTROPY || LRNG_RAW_JIFFIES_ENTROPY ||LRNG_RAW_IRQ_ENTROPY || LRNG_RAW_IRQFLAGS_ENTROPY || LRNG_RAW_RETIP_ENTROPY || LRNG_RAW_REGS_ENTROPY || LRNG_RAW_ARRAY || LRNG_IRQ_PERF || LRNG_ACVT_HASH) + +endif #LRNG_TESTING_MENU + +config LRNG_SELFTEST + bool "Enable power-on and on-demand self-tests" + help + The power-on self-tests are executed during boot time + covering the ChaCha20 DRNG, the hash operation used for + processing the entropy pools and the auxiliary pool, and + the time stamp management of the LRNG. + + The on-demand self-tests are triggered by writing any + value into the SysFS file selftest_status. At the same + time, when reading this file, the test status is + returned. A zero indicates that all tests were executed + successfully. + + If unsure, say Y. + +if LRNG_SELFTEST + +config LRNG_SELFTEST_PANIC + bool "Panic the kernel upon self-test failure" + help + If the option is enabled, the kernel is terminated if an + LRNG power-on self-test failure is detected. + +endif # LRNG_SELFTEST + +endif # LRNG diff -urN linux-5.15/drivers/char/lrng/Makefile linux-5.15-lrng/drivers/char/lrng/Makefile --- linux-5.15/drivers/char/lrng/Makefile 1970-01-01 10:00:00.000000000 +1000 +++ linux-5.15-lrng/drivers/char/lrng/Makefile 2021-11-29 12:38:26.593278813 +1100 @@ -0,0 +1,21 @@ +# SPDX-License-Identifier: GPL-2.0 +# +# Makefile for the Linux Random Number Generator. +# + +obj-y += lrng_es_mgr.o lrng_aux.o \ + lrng_drng.o lrng_chacha20.o \ + lrng_interfaces.o lrng_es_aux.o + +obj-$(CONFIG_LRNG_IRQ) += lrng_es_irq.o +obj-$(CONFIG_SYSCTL) += lrng_proc.o +obj-$(CONFIG_NUMA) += lrng_numa.o +obj-$(CONFIG_LRNG_CPU) += lrng_es_archrandom.o +obj-$(CONFIG_LRNG_DRNG_SWITCH) += lrng_switch.o +obj-$(CONFIG_LRNG_KCAPI_HASH) += lrng_kcapi_hash.o +obj-$(CONFIG_LRNG_DRBG) += lrng_drbg.o +obj-$(CONFIG_LRNG_KCAPI) += lrng_kcapi.o +obj-$(CONFIG_LRNG_JENT) += lrng_es_jent.o +obj-$(CONFIG_LRNG_HEALTH_TESTS) += lrng_health.o +obj-$(CONFIG_LRNG_TESTING) += lrng_testing.o +obj-$(CONFIG_LRNG_SELFTEST) += lrng_selftest.o diff -urN linux-5.15/drivers/char/lrng/lrng_aux.c linux-5.15-lrng/drivers/char/lrng/lrng_aux.c --- linux-5.15/drivers/char/lrng/lrng_aux.c 1970-01-01 10:00:00.000000000 +1000 +++ linux-5.15-lrng/drivers/char/lrng/lrng_aux.c 2021-11-29 12:36:52.113279174 +1100 @@ -0,0 +1,136 @@ +// SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause +/* + * LRNG auxiliary interfaces + * + * Copyright (C) 2019 - 2021 Stephan Mueller + * Copyright (C) 2017 Jason A. Donenfeld . All + * Rights Reserved. + * Copyright (C) 2016 Jason Cooper + */ + +#include +#include + +#include "lrng_internal.h" + +struct batched_entropy { + union { + u64 entropy_u64[LRNG_DRNG_BLOCKSIZE / sizeof(u64)]; + u32 entropy_u32[LRNG_DRNG_BLOCKSIZE / sizeof(u32)]; + }; + unsigned int position; + spinlock_t batch_lock; +}; + +/* + * Get a random word for internal kernel use only. The quality of the random + * number is as good as /dev/urandom, but there is no backtrack protection, + * with the goal of being quite fast and not depleting entropy. + */ +static DEFINE_PER_CPU(struct batched_entropy, batched_entropy_u64) = { + .batch_lock = __SPIN_LOCK_UNLOCKED(batched_entropy_u64.lock), +}; + +u64 get_random_u64(void) +{ + u64 ret; + unsigned long flags; + struct batched_entropy *batch; + + lrng_debug_report_seedlevel("get_random_u64"); + + batch = raw_cpu_ptr(&batched_entropy_u64); + spin_lock_irqsave(&batch->batch_lock, flags); + if (batch->position % ARRAY_SIZE(batch->entropy_u64) == 0) { + lrng_drng_get_atomic((u8 *)batch->entropy_u64, + LRNG_DRNG_BLOCKSIZE); + batch->position = 0; + } + ret = batch->entropy_u64[batch->position++]; + spin_unlock_irqrestore(&batch->batch_lock, flags); + return ret; +} +EXPORT_SYMBOL(get_random_u64); + +static DEFINE_PER_CPU(struct batched_entropy, batched_entropy_u32) = { + .batch_lock = __SPIN_LOCK_UNLOCKED(batched_entropy_u32.lock), +}; + +u32 get_random_u32(void) +{ + u32 ret; + unsigned long flags; + struct batched_entropy *batch; + + lrng_debug_report_seedlevel("get_random_u32"); + + batch = raw_cpu_ptr(&batched_entropy_u32); + spin_lock_irqsave(&batch->batch_lock, flags); + if (batch->position % ARRAY_SIZE(batch->entropy_u32) == 0) { + lrng_drng_get_atomic((u8 *)batch->entropy_u32, + LRNG_DRNG_BLOCKSIZE); + batch->position = 0; + } + ret = batch->entropy_u32[batch->position++]; + spin_unlock_irqrestore(&batch->batch_lock, flags); + return ret; +} +EXPORT_SYMBOL(get_random_u32); + +/* + * It's important to invalidate all potential batched entropy that might + * be stored before the crng is initialized, which we can do lazily by + * simply resetting the counter to zero so that it's re-extracted on the + * next usage. + */ +void invalidate_batched_entropy(void) +{ + int cpu; + unsigned long flags; + + for_each_possible_cpu(cpu) { + struct batched_entropy *batched_entropy; + + batched_entropy = per_cpu_ptr(&batched_entropy_u32, cpu); + spin_lock_irqsave(&batched_entropy->batch_lock, flags); + batched_entropy->position = 0; + spin_unlock(&batched_entropy->batch_lock); + + batched_entropy = per_cpu_ptr(&batched_entropy_u64, cpu); + spin_lock(&batched_entropy->batch_lock); + batched_entropy->position = 0; + spin_unlock_irqrestore(&batched_entropy->batch_lock, flags); + } +} + +/* + * randomize_page - Generate a random, page aligned address + * @start: The smallest acceptable address the caller will take. + * @range: The size of the area, starting at @start, within which the + * random address must fall. + * + * If @start + @range would overflow, @range is capped. + * + * NOTE: Historical use of randomize_range, which this replaces, presumed that + * @start was already page aligned. We now align it regardless. + * + * Return: A page aligned address within [start, start + range). On error, + * @start is returned. + */ +unsigned long randomize_page(unsigned long start, unsigned long range) +{ + if (!PAGE_ALIGNED(start)) { + range -= PAGE_ALIGN(start) - start; + start = PAGE_ALIGN(start); + } + + if (start > ULONG_MAX - range) + range = ULONG_MAX - start; + + range >>= PAGE_SHIFT; + + if (range == 0) + return start; + + return start + (get_random_long() % range << PAGE_SHIFT); +} diff -urN linux-5.15/drivers/char/lrng/lrng_chacha20.c linux-5.15-lrng/drivers/char/lrng/lrng_chacha20.c --- linux-5.15/drivers/char/lrng/lrng_chacha20.c 1970-01-01 10:00:00.000000000 +1000 +++ linux-5.15-lrng/drivers/char/lrng/lrng_chacha20.c 2021-11-29 12:36:52.113279174 +1100 @@ -0,0 +1,321 @@ +// SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause +/* + * Backend for the LRNG providing the cryptographic primitives using + * ChaCha20 cipher implementations. + * + * Copyright (C) 2016 - 2021, Stephan Mueller + */ + +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt + +#include +#include +#include +#include + +#include "lrng_chacha20.h" +#include "lrng_internal.h" + +/******************************* ChaCha20 DRNG *******************************/ + +#define CHACHA_BLOCK_WORDS (CHACHA_BLOCK_SIZE / sizeof(u32)) + +struct chacha20_state { + struct chacha20_block block; +}; + +/* + * Have a static memory blocks for the ChaCha20 DRNG instance to avoid calling + * kmalloc too early in the boot cycle. For subsequent allocation requests, + * such as per-NUMA-node DRNG instances, kmalloc will be used. + */ +struct chacha20_state chacha20 __latent_entropy; + +/* + * Update of the ChaCha20 state by either using an unused buffer part or by + * generating one ChaCha20 block which is half of the state of the ChaCha20. + * The block is XORed into the key part of the state. This shall ensure + * backtracking resistance as well as a proper mix of the ChaCha20 state once + * the key is injected. + */ +static void lrng_chacha20_update(struct chacha20_state *chacha20_state, + __le32 *buf, u32 used_words) +{ + struct chacha20_block *chacha20 = &chacha20_state->block; + u32 i; + __le32 tmp[CHACHA_BLOCK_WORDS]; + + BUILD_BUG_ON(sizeof(struct chacha20_block) != CHACHA_BLOCK_SIZE); + BUILD_BUG_ON(CHACHA_BLOCK_SIZE != 2 * CHACHA_KEY_SIZE); + + if (used_words > CHACHA_KEY_SIZE_WORDS) { + chacha20_block(&chacha20->constants[0], (u8 *)tmp); + for (i = 0; i < CHACHA_KEY_SIZE_WORDS; i++) + chacha20->key.u[i] ^= le32_to_cpu(tmp[i]); + memzero_explicit(tmp, sizeof(tmp)); + } else { + for (i = 0; i < CHACHA_KEY_SIZE_WORDS; i++) + chacha20->key.u[i] ^= le32_to_cpu(buf[i + used_words]); + } + + /* Deterministic increment of nonce as required in RFC 7539 chapter 4 */ + chacha20->nonce[0]++; + if (chacha20->nonce[0] == 0) { + chacha20->nonce[1]++; + if (chacha20->nonce[1] == 0) + chacha20->nonce[2]++; + } + + /* Leave counter untouched as it is start value is undefined in RFC */ +} + +/* + * Seed the ChaCha20 DRNG by injecting the input data into the key part of + * the ChaCha20 state. If the input data is longer than the ChaCha20 key size, + * perform a ChaCha20 operation after processing of key size input data. + * This operation shall spread out the entropy into the ChaCha20 state before + * new entropy is injected into the key part. + */ +static int lrng_cc20_drng_seed_helper(void *drng, const u8 *inbuf, u32 inbuflen) +{ + struct chacha20_state *chacha20_state = (struct chacha20_state *)drng; + struct chacha20_block *chacha20 = &chacha20_state->block; + + while (inbuflen) { + u32 i, todo = min_t(u32, inbuflen, CHACHA_KEY_SIZE); + + for (i = 0; i < todo; i++) + chacha20->key.b[i] ^= inbuf[i]; + + /* Break potential dependencies between the inbuf key blocks */ + lrng_chacha20_update(chacha20_state, NULL, + CHACHA_BLOCK_WORDS); + inbuf += todo; + inbuflen -= todo; + } + + return 0; +} + +/* + * Chacha20 DRNG generation of random numbers: the stream output of ChaCha20 + * is the random number. After the completion of the generation of the + * stream, the entire ChaCha20 state is updated. + * + * Note, as the ChaCha20 implements a 32 bit counter, we must ensure + * that this function is only invoked for at most 2^32 - 1 ChaCha20 blocks + * before a reseed or an update happens. This is ensured by the variable + * outbuflen which is a 32 bit integer defining the number of bytes to be + * generated by the ChaCha20 DRNG. At the end of this function, an update + * operation is invoked which implies that the 32 bit counter will never be + * overflown in this implementation. + */ +static int lrng_cc20_drng_generate_helper(void *drng, u8 *outbuf, u32 outbuflen) +{ + struct chacha20_state *chacha20_state = (struct chacha20_state *)drng; + struct chacha20_block *chacha20 = &chacha20_state->block; + __le32 aligned_buf[CHACHA_BLOCK_WORDS]; + u32 ret = outbuflen, used = CHACHA_BLOCK_WORDS; + int zeroize_buf = 0; + + while (outbuflen >= CHACHA_BLOCK_SIZE) { + chacha20_block(&chacha20->constants[0], outbuf); + outbuf += CHACHA_BLOCK_SIZE; + outbuflen -= CHACHA_BLOCK_SIZE; + } + + if (outbuflen) { + chacha20_block(&chacha20->constants[0], (u8 *)aligned_buf); + memcpy(outbuf, aligned_buf, outbuflen); + used = ((outbuflen + sizeof(aligned_buf[0]) - 1) / + sizeof(aligned_buf[0])); + zeroize_buf = 1; + } + + lrng_chacha20_update(chacha20_state, aligned_buf, used); + + if (zeroize_buf) + memzero_explicit(aligned_buf, sizeof(aligned_buf)); + + return ret; +} + +void lrng_cc20_init_state(struct chacha20_state *state) +{ + lrng_cc20_init_rfc7539(&state->block); +} + +/* + * Allocation of the DRNG state + */ +static void *lrng_cc20_drng_alloc(u32 sec_strength) +{ + struct chacha20_state *state = NULL; + + if (sec_strength > CHACHA_KEY_SIZE) { + pr_err("Security strength of ChaCha20 DRNG (%u bits) lower than requested by LRNG (%u bits)\n", + CHACHA_KEY_SIZE * 8, sec_strength * 8); + return ERR_PTR(-EINVAL); + } + if (sec_strength < CHACHA_KEY_SIZE) + pr_warn("Security strength of ChaCha20 DRNG (%u bits) higher than requested by LRNG (%u bits)\n", + CHACHA_KEY_SIZE * 8, sec_strength * 8); + + state = kmalloc(sizeof(struct chacha20_state), GFP_KERNEL); + if (!state) + return ERR_PTR(-ENOMEM); + pr_debug("memory for ChaCha20 core allocated\n"); + + lrng_cc20_init_state(state); + + return state; +} + +static void lrng_cc20_drng_dealloc(void *drng) +{ + struct chacha20_state *chacha20_state = (struct chacha20_state *)drng; + + if (drng == &chacha20) { + memzero_explicit(chacha20_state, sizeof(*chacha20_state)); + pr_debug("static ChaCha20 core zeroized\n"); + return; + } + + pr_debug("ChaCha20 core zeroized and freed\n"); + kfree_sensitive(chacha20_state); +} + +/******************************* Hash Operation *******************************/ + +#ifdef CONFIG_CRYPTO_LIB_SHA256 + +#include + +static u32 lrng_cc20_hash_digestsize(void *hash) +{ + return SHA256_DIGEST_SIZE; +} + +static int lrng_cc20_hash_init(struct shash_desc *shash, void *hash) +{ + /* + * We do not need a TFM - we only need sufficient space for + * struct sha256_state on the stack. + */ + sha256_init(shash_desc_ctx(shash)); + return 0; +} + +static int lrng_cc20_hash_update(struct shash_desc *shash, + const u8 *inbuf, u32 inbuflen) +{ + sha256_update(shash_desc_ctx(shash), inbuf, inbuflen); + return 0; +} + +static int lrng_cc20_hash_final(struct shash_desc *shash, u8 *digest) +{ + sha256_final(shash_desc_ctx(shash), digest); + return 0; +} + +static const char *lrng_cc20_hash_name(void) +{ + return "SHA-256"; +} + +static void lrng_cc20_hash_desc_zero(struct shash_desc *shash) +{ + memzero_explicit(shash_desc_ctx(shash), sizeof(struct sha256_state)); +} + +#else /* CONFIG_CRYPTO_LIB_SHA256 */ + +#include +#include + +/* + * If the SHA-256 support is not compiled, we fall back to SHA-1 that is always + * compiled and present in the kernel. + */ +static u32 lrng_cc20_hash_digestsize(void *hash) +{ + return SHA1_DIGEST_SIZE; +} + +static void lrng_sha1_block_fn(struct sha1_state *sctx, const u8 *src, + int blocks) +{ + u32 temp[SHA1_WORKSPACE_WORDS]; + + while (blocks--) { + sha1_transform(sctx->state, src, temp); + src += SHA1_BLOCK_SIZE; + } + memzero_explicit(temp, sizeof(temp)); +} + +static int lrng_cc20_hash_init(struct shash_desc *shash, void *hash) +{ + /* + * We do not need a TFM - we only need sufficient space for + * struct sha1_state on the stack. + */ + sha1_base_init(shash); + return 0; +} + +static int lrng_cc20_hash_update(struct shash_desc *shash, + const u8 *inbuf, u32 inbuflen) +{ + return sha1_base_do_update(shash, inbuf, inbuflen, lrng_sha1_block_fn); +} + +static int lrng_cc20_hash_final(struct shash_desc *shash, u8 *digest) +{ + return sha1_base_do_finalize(shash, lrng_sha1_block_fn) ?: + sha1_base_finish(shash, digest); +} + +static const char *lrng_cc20_hash_name(void) +{ + return "SHA-1"; +} + +static void lrng_cc20_hash_desc_zero(struct shash_desc *shash) +{ + memzero_explicit(shash_desc_ctx(shash), sizeof(struct sha1_state)); +} + +#endif /* CONFIG_CRYPTO_LIB_SHA256 */ + +static void *lrng_cc20_hash_alloc(void) +{ + pr_info("Hash %s allocated\n", lrng_cc20_hash_name()); + return NULL; +} + +static void lrng_cc20_hash_dealloc(void *hash) +{ +} + +static const char *lrng_cc20_drng_name(void) +{ + return "ChaCha20 DRNG"; +} + +const struct lrng_crypto_cb lrng_cc20_crypto_cb = { + .lrng_drng_name = lrng_cc20_drng_name, + .lrng_hash_name = lrng_cc20_hash_name, + .lrng_drng_alloc = lrng_cc20_drng_alloc, + .lrng_drng_dealloc = lrng_cc20_drng_dealloc, + .lrng_drng_seed_helper = lrng_cc20_drng_seed_helper, + .lrng_drng_generate_helper = lrng_cc20_drng_generate_helper, + .lrng_hash_alloc = lrng_cc20_hash_alloc, + .lrng_hash_dealloc = lrng_cc20_hash_dealloc, + .lrng_hash_digestsize = lrng_cc20_hash_digestsize, + .lrng_hash_init = lrng_cc20_hash_init, + .lrng_hash_update = lrng_cc20_hash_update, + .lrng_hash_final = lrng_cc20_hash_final, + .lrng_hash_desc_zero = lrng_cc20_hash_desc_zero, +}; diff -urN linux-5.15/drivers/char/lrng/lrng_chacha20.h linux-5.15-lrng/drivers/char/lrng/lrng_chacha20.h --- linux-5.15/drivers/char/lrng/lrng_chacha20.h 1970-01-01 10:00:00.000000000 +1000 +++ linux-5.15-lrng/drivers/char/lrng/lrng_chacha20.h 2021-11-29 12:36:52.113279174 +1100 @@ -0,0 +1,25 @@ +/* SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause */ +/* + * LRNG ChaCha20 definitions + * + * Copyright (C) 2016 - 2021, Stephan Mueller + */ + +#include + +/* State according to RFC 7539 section 2.3 */ +struct chacha20_block { + u32 constants[4]; + union { +#define CHACHA_KEY_SIZE_WORDS (CHACHA_KEY_SIZE / sizeof(u32)) + u32 u[CHACHA_KEY_SIZE_WORDS]; + u8 b[CHACHA_KEY_SIZE]; + } key; + u32 counter; + u32 nonce[3]; +}; + +static inline void lrng_cc20_init_rfc7539(struct chacha20_block *chacha20) +{ + chacha_init_consts(chacha20->constants); +} diff -urN linux-5.15/drivers/char/lrng/lrng_drbg.c linux-5.15-lrng/drivers/char/lrng/lrng_drbg.c --- linux-5.15/drivers/char/lrng/lrng_drbg.c 1970-01-01 10:00:00.000000000 +1000 +++ linux-5.15-lrng/drivers/char/lrng/lrng_drbg.c 2021-11-29 12:37:37.193279002 +1100 @@ -0,0 +1,198 @@ +// SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause +/* + * Backend for the LRNG providing the cryptographic primitives using the + * kernel crypto API and its DRBG. + * + * Copyright (C) 2016 - 2021, Stephan Mueller + */ + +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt + +#include +#include +#include +#include + +#include "lrng_kcapi_hash.h" + +/* + * Define a DRBG plus a hash / MAC used to extract data from the entropy pool. + * For LRNG_HASH_NAME you can use a hash or a MAC (HMAC or CMAC) of your choice + * (Note, you should use the suggested selections below -- using SHA-1 or MD5 + * is not wise). The idea is that the used cipher primitive can be selected to + * be the same as used for the DRBG. I.e. the LRNG only uses one cipher + * primitive using the same cipher implementation with the options offered in + * the following. This means, if the CTR DRBG is selected and AES-NI is present, + * both the CTR DRBG and the selected cmac(aes) use AES-NI. + * + * The security strengths of the DRBGs are all 256 bits according to + * SP800-57 section 5.6.1. + * + * This definition is allowed to be changed. + */ +#ifdef CONFIG_CRYPTO_DRBG_CTR +static unsigned int lrng_drbg_type = 0; +#elif defined CONFIG_CRYPTO_DRBG_HMAC +static unsigned int lrng_drbg_type = 1; +#elif defined CONFIG_CRYPTO_DRBG_HASH +static unsigned int lrng_drbg_type = 2; +#else +#error "Unknown DRBG in use" +#endif + +/* The parameter must be r/o in sysfs as otherwise races appear. */ +module_param(lrng_drbg_type, uint, 0444); +MODULE_PARM_DESC(lrng_drbg_type, "DRBG type used for LRNG (0->CTR_DRBG, 1->HMAC_DRBG, 2->Hash_DRBG)"); + +struct lrng_drbg { + const char *hash_name; + const char *drbg_core; +}; + +static const struct lrng_drbg lrng_drbg_types[] = { + { /* CTR_DRBG with AES-256 using derivation function */ + .hash_name = "sha512", + .drbg_core = "drbg_nopr_ctr_aes256", + }, { /* HMAC_DRBG with SHA-512 */ + .hash_name = "sha512", + .drbg_core = "drbg_nopr_hmac_sha512", + }, { /* Hash_DRBG with SHA-512 using derivation function */ + .hash_name = "sha512", + .drbg_core = "drbg_nopr_sha512" + } +}; + +static int lrng_drbg_drng_seed_helper(void *drng, const u8 *inbuf, u32 inbuflen) +{ + struct drbg_state *drbg = (struct drbg_state *)drng; + LIST_HEAD(seedlist); + struct drbg_string data; + int ret; + + drbg_string_fill(&data, inbuf, inbuflen); + list_add_tail(&data.list, &seedlist); + ret = drbg->d_ops->update(drbg, &seedlist, drbg->seeded); + + if (ret >= 0) + drbg->seeded = true; + + return ret; +} + +static int lrng_drbg_drng_generate_helper(void *drng, u8 *outbuf, u32 outbuflen) +{ + struct drbg_state *drbg = (struct drbg_state *)drng; + + return drbg->d_ops->generate(drbg, outbuf, outbuflen, NULL); +} + +static void *lrng_drbg_drng_alloc(u32 sec_strength) +{ + struct drbg_state *drbg; + int coreref = -1; + bool pr = false; + int ret; + + drbg_convert_tfm_core(lrng_drbg_types[lrng_drbg_type].drbg_core, + &coreref, &pr); + if (coreref < 0) + return ERR_PTR(-EFAULT); + + drbg = kzalloc(sizeof(struct drbg_state), GFP_KERNEL); + if (!drbg) + return ERR_PTR(-ENOMEM); + + drbg->core = &drbg_cores[coreref]; + drbg->seeded = false; + ret = drbg_alloc_state(drbg); + if (ret) + goto err; + + if (sec_strength > drbg_sec_strength(drbg->core->flags)) { + pr_err("Security strength of DRBG (%u bits) lower than requested by LRNG (%u bits)\n", + drbg_sec_strength(drbg->core->flags) * 8, + sec_strength * 8); + goto dealloc; + } + + if (sec_strength < drbg_sec_strength(drbg->core->flags)) + pr_warn("Security strength of DRBG (%u bits) higher than requested by LRNG (%u bits)\n", + drbg_sec_strength(drbg->core->flags) * 8, + sec_strength * 8); + + pr_info("DRBG with %s core allocated\n", drbg->core->backend_cra_name); + + return drbg; + +dealloc: + if (drbg->d_ops) + drbg->d_ops->crypto_fini(drbg); + drbg_dealloc_state(drbg); +err: + kfree(drbg); + return ERR_PTR(-EINVAL); +} + +static void lrng_drbg_drng_dealloc(void *drng) +{ + struct drbg_state *drbg = (struct drbg_state *)drng; + + if (drbg && drbg->d_ops) + drbg->d_ops->crypto_fini(drbg); + drbg_dealloc_state(drbg); + kfree_sensitive(drbg); + pr_info("DRBG deallocated\n"); +} + +static void *lrng_drbg_hash_alloc(void) +{ + return lrng_kcapi_hash_alloc(lrng_drbg_types[lrng_drbg_type].hash_name); +} + +static const char *lrng_drbg_name(void) +{ + return lrng_drbg_types[lrng_drbg_type].drbg_core; +} + +static const char *lrng_hash_name(void) +{ + return lrng_drbg_types[lrng_drbg_type].hash_name; +} + +static const struct lrng_crypto_cb lrng_drbg_crypto_cb = { + .lrng_drng_name = lrng_drbg_name, + .lrng_hash_name = lrng_hash_name, + .lrng_drng_alloc = lrng_drbg_drng_alloc, + .lrng_drng_dealloc = lrng_drbg_drng_dealloc, + .lrng_drng_seed_helper = lrng_drbg_drng_seed_helper, + .lrng_drng_generate_helper = lrng_drbg_drng_generate_helper, + .lrng_hash_alloc = lrng_drbg_hash_alloc, + .lrng_hash_dealloc = lrng_kcapi_hash_dealloc, + .lrng_hash_digestsize = lrng_kcapi_hash_digestsize, + .lrng_hash_init = lrng_kcapi_hash_init, + .lrng_hash_update = lrng_kcapi_hash_update, + .lrng_hash_final = lrng_kcapi_hash_final, + .lrng_hash_desc_zero = lrng_kcapi_hash_zero, +}; + +static int __init lrng_drbg_init(void) +{ + if (lrng_drbg_type >= ARRAY_SIZE(lrng_drbg_types)) { + pr_err("lrng_drbg_type parameter too large (given %u - max: %lu)", + lrng_drbg_type, + (unsigned long)ARRAY_SIZE(lrng_drbg_types) - 1); + return -EAGAIN; + } + return lrng_set_drng_cb(&lrng_drbg_crypto_cb); +} + +static void __exit lrng_drbg_exit(void) +{ + lrng_set_drng_cb(NULL); +} + +late_initcall(lrng_drbg_init); +module_exit(lrng_drbg_exit); +MODULE_LICENSE("Dual BSD/GPL"); +MODULE_AUTHOR("Stephan Mueller "); +MODULE_DESCRIPTION("Linux Random Number Generator - SP800-90A DRBG backend"); diff -urN linux-5.15/drivers/char/lrng/lrng_drng.c linux-5.15-lrng/drivers/char/lrng/lrng_drng.c --- linux-5.15/drivers/char/lrng/lrng_drng.c 1970-01-01 10:00:00.000000000 +1000 +++ linux-5.15-lrng/drivers/char/lrng/lrng_drng.c 2021-11-29 12:36:52.113279174 +1100 @@ -0,0 +1,451 @@ +// SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause +/* + * LRNG DRNG processing + * + * Copyright (C) 2016 - 2021, Stephan Mueller + */ + +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt + +#include +#include + +#include "lrng_internal.h" + +/* + * Maximum number of seconds between DRNG reseed intervals of the DRNG. Note, + * this is enforced with the next request of random numbers from the + * DRNG. Setting this value to zero implies a reseeding attempt before every + * generated random number. + */ +int lrng_drng_reseed_max_time = 600; + +static atomic_t lrng_avail = ATOMIC_INIT(0); + +DEFINE_MUTEX(lrng_crypto_cb_update); + +/* DRNG for /dev/urandom, getrandom(2), get_random_bytes */ +static struct lrng_drng lrng_drng_init = { + .drng = &chacha20, + .crypto_cb = &lrng_cc20_crypto_cb, + .lock = __MUTEX_INITIALIZER(lrng_drng_init.lock), + .spin_lock = __SPIN_LOCK_UNLOCKED(lrng_drng_init.spin_lock), + .hash_lock = __RW_LOCK_UNLOCKED(lrng_drng_init.hash_lock) +}; + +/* + * DRNG for get_random_bytes when called in atomic context. This + * DRNG will always use the ChaCha20 DRNG. It will never benefit from a + * DRNG switch like the "regular" DRNG. If there was no DRNG switch, the atomic + * DRNG is identical to the "regular" DRNG. + * + * The reason for having this is due to the fact that DRNGs other than + * the ChaCha20 DRNG may sleep. + */ +static struct lrng_drng lrng_drng_atomic = { + .drng = &chacha20, + .crypto_cb = &lrng_cc20_crypto_cb, + .spin_lock = __SPIN_LOCK_UNLOCKED(lrng_drng_atomic.spin_lock), + .hash_lock = __RW_LOCK_UNLOCKED(lrng_drng_atomic.hash_lock) +}; + +static u32 max_wo_reseed = LRNG_DRNG_MAX_WITHOUT_RESEED; +#ifdef CONFIG_LRNG_RUNTIME_MAX_WO_RESEED_CONFIG +module_param(max_wo_reseed, uint, 0444); +MODULE_PARM_DESC(max_wo_reseed, + "Maximum number of DRNG generate operation without full reseed\n"); +#endif + +/********************************** Helper ************************************/ + +bool lrng_get_available(void) +{ + return likely(atomic_read(&lrng_avail)); +} + +void lrng_set_available(void) +{ + atomic_set(&lrng_avail, 1); +} + +struct lrng_drng *lrng_drng_init_instance(void) +{ + return &lrng_drng_init; +} + +struct lrng_drng *lrng_drng_atomic_instance(void) +{ + return &lrng_drng_atomic; +} + +void lrng_drng_reset(struct lrng_drng *drng) +{ + atomic_set(&drng->requests, LRNG_DRNG_RESEED_THRESH); + atomic_set(&drng->requests_since_fully_seeded, 0); + drng->last_seeded = jiffies; + drng->fully_seeded = false; + drng->force_reseed = true; + pr_debug("reset DRNG\n"); +} + +/* Initialize the default DRNG during boot */ +static void lrng_drng_seed(struct lrng_drng *drng); +void lrng_drngs_init_cc20(bool force_seed) +{ + unsigned long flags = 0; + + if (lrng_get_available()) + return; + + lrng_drng_lock(&lrng_drng_init, &flags); + if (lrng_get_available()) { + lrng_drng_unlock(&lrng_drng_init, &flags); + if (force_seed) + goto seed; + return; + } + + lrng_drng_reset(&lrng_drng_init); + lrng_cc20_init_state(&chacha20); + lrng_drng_unlock(&lrng_drng_init, &flags); + + lrng_drng_lock(&lrng_drng_atomic, &flags); + lrng_drng_reset(&lrng_drng_atomic); + /* + * We do not initialize the state of the atomic DRNG as it is identical + * to the DRNG at this point. + */ + lrng_drng_unlock(&lrng_drng_atomic, &flags); + + lrng_set_available(); + +seed: + /* Seed the DRNG with any entropy available */ + if (!lrng_pool_trylock()) { + lrng_drng_seed(&lrng_drng_init); + pr_info("ChaCha20 core initialized with first seeding\n"); + lrng_pool_unlock(); + } else { + pr_info("ChaCha20 core initialized without seeding\n"); + } +} + +bool lrng_sp80090c_compliant(void) +{ + if (!IS_ENABLED(CONFIG_LRNG_OVERSAMPLE_ENTROPY_SOURCES)) + return false; + + /* Entropy source hash must be capable of transporting enough entropy */ + if (lrng_get_digestsize() < + (lrng_security_strength() + CONFIG_LRNG_SEED_BUFFER_INIT_ADD_BITS)) + return false; + + /* SP800-90C only requested in FIPS mode */ + return fips_enabled; +} + +/************************* Random Number Generation ***************************/ + +/* Inject a data buffer into the DRNG */ +static void lrng_drng_inject(struct lrng_drng *drng, + const u8 *inbuf, u32 inbuflen, bool fully_seeded) +{ + const char *drng_type = unlikely(drng == &lrng_drng_atomic) ? + "atomic" : "regular"; + unsigned long flags = 0; + + BUILD_BUG_ON(LRNG_DRNG_RESEED_THRESH > INT_MAX); + pr_debug("seeding %s DRNG with %u bytes\n", drng_type, inbuflen); + lrng_drng_lock(drng, &flags); + if (drng->crypto_cb->lrng_drng_seed_helper(drng->drng, + inbuf, inbuflen) < 0) { + pr_warn("seeding of %s DRNG failed\n", drng_type); + drng->force_reseed = true; + } else { + int gc = LRNG_DRNG_RESEED_THRESH - atomic_read(&drng->requests); + + pr_debug("%s DRNG stats since last seeding: %lu secs; generate calls: %d\n", + drng_type, + (time_after(jiffies, drng->last_seeded) ? + (jiffies - drng->last_seeded) : 0) / HZ, gc); + + /* Count the numbers of generate ops since last fully seeded */ + if (fully_seeded) + atomic_set(&drng->requests_since_fully_seeded, 0); + else + atomic_add(gc, &drng->requests_since_fully_seeded); + + drng->last_seeded = jiffies; + atomic_set(&drng->requests, LRNG_DRNG_RESEED_THRESH); + drng->force_reseed = false; + + if (!drng->fully_seeded) { + drng->fully_seeded = fully_seeded; + if (drng->fully_seeded) + pr_debug("DRNG fully seeded\n"); + } + + if (drng->drng == lrng_drng_atomic.drng) { + lrng_drng_atomic.last_seeded = jiffies; + atomic_set(&lrng_drng_atomic.requests, + LRNG_DRNG_RESEED_THRESH); + lrng_drng_atomic.force_reseed = false; + } + } + lrng_drng_unlock(drng, &flags); +} + +/* + * Perform the seeding of the DRNG with data from noise source + */ +static inline void _lrng_drng_seed(struct lrng_drng *drng) +{ + struct entropy_buf seedbuf __aligned(LRNG_KCAPI_ALIGN); + + lrng_fill_seed_buffer(&seedbuf, + lrng_get_seed_entropy_osr(drng->fully_seeded)); + lrng_init_ops(&seedbuf); + lrng_drng_inject(drng, (u8 *)&seedbuf, sizeof(seedbuf), + lrng_fully_seeded(drng->fully_seeded, &seedbuf)); + memzero_explicit(&seedbuf, sizeof(seedbuf)); +} + +static int lrng_drng_get(struct lrng_drng *drng, u8 *outbuf, u32 outbuflen); +static void lrng_drng_seed(struct lrng_drng *drng) +{ + _lrng_drng_seed(drng); + + BUILD_BUG_ON(LRNG_MIN_SEED_ENTROPY_BITS > + LRNG_DRNG_SECURITY_STRENGTH_BITS); + + /* + * Reseed atomic DRNG from current DRNG, + * + * We can obtain random numbers from DRNG as the lock type + * chosen by lrng_drng_get is usable with the current caller. + */ + if ((drng->drng != lrng_drng_atomic.drng) && + (lrng_drng_atomic.force_reseed || + atomic_read(&lrng_drng_atomic.requests) <= 0 || + time_after(jiffies, lrng_drng_atomic.last_seeded + + lrng_drng_reseed_max_time * HZ))) { + u8 seedbuf[LRNG_DRNG_SECURITY_STRENGTH_BYTES] + __aligned(LRNG_KCAPI_ALIGN); + int ret = lrng_drng_get(drng, seedbuf, sizeof(seedbuf)); + + if (ret < 0) { + pr_warn("Error generating random numbers for atomic DRNG: %d\n", + ret); + } else { + lrng_drng_inject(&lrng_drng_atomic, seedbuf, ret, true); + } + memzero_explicit(&seedbuf, sizeof(seedbuf)); + } +} + +static inline void _lrng_drng_seed_work(struct lrng_drng *drng, u32 node) +{ + pr_debug("reseed triggered by interrupt noise source for DRNG on NUMA node %d\n", + node); + lrng_drng_seed(drng); + if (drng->fully_seeded) { + /* Prevent reseed storm */ + drng->last_seeded += node * 100 * HZ; + /* Prevent draining of pool on idle systems */ + lrng_drng_reseed_max_time += 100; + } +} + +/* + * DRNG reseed trigger: Kernel thread handler triggered by the schedule_work() + */ +void lrng_drng_seed_work(struct work_struct *dummy) +{ + struct lrng_drng **lrng_drng = lrng_drng_instances(); + u32 node; + + if (lrng_drng) { + for_each_online_node(node) { + struct lrng_drng *drng = lrng_drng[node]; + + if (drng && !drng->fully_seeded) { + _lrng_drng_seed_work(drng, node); + goto out; + } + } + } else { + if (!lrng_drng_init.fully_seeded) { + _lrng_drng_seed_work(&lrng_drng_init, 0); + goto out; + } + } + + lrng_pool_all_numa_nodes_seeded(true); + +out: + /* Allow the seeding operation to be called again */ + lrng_pool_unlock(); +} + +/* Force all DRNGs to reseed before next generation */ +void lrng_drng_force_reseed(void) +{ + struct lrng_drng **lrng_drng = lrng_drng_instances(); + u32 node; + + /* + * If the initial DRNG is over the reseed threshold, allow a forced + * reseed only for the initial DRNG as this is the fallback for all. It + * must be kept seeded before all others to keep the LRNG operational. + */ + if (!lrng_drng || + (atomic_read_u32(&lrng_drng_init.requests_since_fully_seeded) > + LRNG_DRNG_RESEED_THRESH)) { + lrng_drng_init.force_reseed = lrng_drng_init.fully_seeded; + pr_debug("force reseed of initial DRNG\n"); + return; + } + for_each_online_node(node) { + struct lrng_drng *drng = lrng_drng[node]; + + if (!drng) + continue; + + drng->force_reseed = drng->fully_seeded; + pr_debug("force reseed of DRNG on node %u\n", node); + } + lrng_drng_atomic.force_reseed = lrng_drng_atomic.fully_seeded; +} + +/* + * lrng_drng_get() - Get random data out of the DRNG which is reseeded + * frequently. + * + * @outbuf: buffer for storing random data + * @outbuflen: length of outbuf + * + * Return: + * * < 0 in error case (DRNG generation or update failed) + * * >=0 returning the returned number of bytes + */ +static int lrng_drng_get(struct lrng_drng *drng, u8 *outbuf, u32 outbuflen) +{ + unsigned long flags = 0; + u32 processed = 0; + + if (!outbuf || !outbuflen) + return 0; + + outbuflen = min_t(size_t, outbuflen, INT_MAX); + + lrng_drngs_init_cc20(false); + + /* If DRNG operated without proper reseed for too long, block LRNG */ + BUILD_BUG_ON(LRNG_DRNG_MAX_WITHOUT_RESEED < LRNG_DRNG_RESEED_THRESH); + if (atomic_read_u32(&drng->requests_since_fully_seeded) > max_wo_reseed) + lrng_unset_fully_seeded(drng); + + while (outbuflen) { + u32 todo = min_t(u32, outbuflen, LRNG_DRNG_MAX_REQSIZE); + int ret; + + /* All but the atomic DRNG are seeded during generation */ + if (atomic_dec_and_test(&drng->requests) || + drng->force_reseed || + time_after(jiffies, drng->last_seeded + + lrng_drng_reseed_max_time * HZ)) { + if (likely(drng != &lrng_drng_atomic)) { + if (lrng_pool_trylock()) { + drng->force_reseed = true; + } else { + lrng_drng_seed(drng); + lrng_pool_unlock(); + } + } + } + + lrng_drng_lock(drng, &flags); + ret = drng->crypto_cb->lrng_drng_generate_helper( + drng->drng, outbuf + processed, todo); + lrng_drng_unlock(drng, &flags); + if (ret <= 0) { + pr_warn("getting random data from DRNG failed (%d)\n", + ret); + return -EFAULT; + } + processed += ret; + outbuflen -= ret; + } + + return processed; +} + +int lrng_drng_get_atomic(u8 *outbuf, u32 outbuflen) +{ + return lrng_drng_get(&lrng_drng_atomic, outbuf, outbuflen); +} + +int lrng_drng_get_sleep(u8 *outbuf, u32 outbuflen) +{ + struct lrng_drng **lrng_drng = lrng_drng_instances(); + struct lrng_drng *drng = &lrng_drng_init; + int node = numa_node_id(); + + might_sleep(); + + if (lrng_drng && lrng_drng[node] && lrng_drng[node]->fully_seeded) + drng = lrng_drng[node]; + + return lrng_drng_get(drng, outbuf, outbuflen); +} + +/* Reset LRNG such that all existing entropy is gone */ +static void _lrng_reset(struct work_struct *work) +{ + struct lrng_drng **lrng_drng = lrng_drng_instances(); + unsigned long flags = 0; + + if (!lrng_drng) { + lrng_drng_lock(&lrng_drng_init, &flags); + lrng_drng_reset(&lrng_drng_init); + lrng_drng_unlock(&lrng_drng_init, &flags); + } else { + u32 node; + + for_each_online_node(node) { + struct lrng_drng *drng = lrng_drng[node]; + + if (!drng) + continue; + lrng_drng_lock(drng, &flags); + lrng_drng_reset(drng); + lrng_drng_unlock(drng, &flags); + } + } + lrng_set_entropy_thresh(LRNG_INIT_ENTROPY_BITS); + + lrng_reset_state(); +} + +static DECLARE_WORK(lrng_reset_work, _lrng_reset); + +void lrng_reset(void) +{ + schedule_work(&lrng_reset_work); +} + +/***************************** Initialize LRNG *******************************/ + +static int __init lrng_init(void) +{ + lrng_drngs_init_cc20(false); + + lrng_drngs_numa_alloc(); + return 0; +} + +late_initcall(lrng_init); + +MODULE_LICENSE("Dual BSD/GPL"); +MODULE_AUTHOR("Stephan Mueller "); +MODULE_DESCRIPTION("Linux Random Number Generator"); diff -urN linux-5.15/drivers/char/lrng/lrng_es_archrandom.c linux-5.15-lrng/drivers/char/lrng/lrng_es_archrandom.c --- linux-5.15/drivers/char/lrng/lrng_es_archrandom.c 1970-01-01 10:00:00.000000000 +1000 +++ linux-5.15-lrng/drivers/char/lrng/lrng_es_archrandom.c 2021-11-29 12:37:14.483279088 +1100 @@ -0,0 +1,226 @@ +// SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause +/* + * LRNG Fast Entropy Source: CPU-based entropy source + * + * Copyright (C) 2016 - 2021, Stephan Mueller + */ + +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt + +#include +#include +#include + +#include "lrng_internal.h" + +/* + * Estimated entropy of data is a 32th of LRNG_DRNG_SECURITY_STRENGTH_BITS. + * As we have no ability to review the implementation of those noise sources, + * it is prudent to have a conservative estimate here. + */ +#define LRNG_ARCHRANDOM_DEFAULT_STRENGTH CONFIG_LRNG_CPU_ENTROPY_RATE +#define LRNG_ARCHRANDOM_TRUST_CPU_STRENGTH LRNG_DRNG_SECURITY_STRENGTH_BITS +#ifdef CONFIG_RANDOM_TRUST_CPU +static u32 archrandom = LRNG_ARCHRANDOM_TRUST_CPU_STRENGTH; +#else +static u32 archrandom = LRNG_ARCHRANDOM_DEFAULT_STRENGTH; +#endif +#ifdef CONFIG_LRNG_RUNTIME_ES_CONFIG +module_param(archrandom, uint, 0644); +MODULE_PARM_DESC(archrandom, "Entropy in bits of 256 data bits from CPU noise source (e.g. RDSEED)"); +#endif + +static int __init lrng_parse_trust_cpu(char *arg) +{ + int ret; + bool trust_cpu = false; + + ret = kstrtobool(arg, &trust_cpu); + if (ret) + return ret; + + if (trust_cpu) { + archrandom = LRNG_ARCHRANDOM_TRUST_CPU_STRENGTH; + lrng_pool_add_entropy(); + } else { + archrandom = LRNG_ARCHRANDOM_DEFAULT_STRENGTH; + } + + return 0; +} +early_param("random.trust_cpu", lrng_parse_trust_cpu); + +u32 lrng_archrandom_entropylevel(u32 requested_bits) +{ + return lrng_fast_noise_entropylevel(archrandom, requested_bits); +} + +static u32 lrng_get_arch_data(u8 *outbuf, u32 requested_bits) +{ + u32 i; + + /* operate on full blocks */ + BUILD_BUG_ON(LRNG_DRNG_SECURITY_STRENGTH_BYTES % sizeof(unsigned long)); + BUILD_BUG_ON(CONFIG_LRNG_SEED_BUFFER_INIT_ADD_BITS % + sizeof(unsigned long)); + /* ensure we have aligned buffers */ + BUILD_BUG_ON(LRNG_KCAPI_ALIGN % sizeof(unsigned long)); + + for (i = 0; i < (requested_bits >> 3); + i += sizeof(unsigned long)) { + if (!arch_get_random_seed_long((unsigned long *)(outbuf + i)) && + !arch_get_random_long((unsigned long *)(outbuf + i))) { + archrandom = 0; + return 0; + } + } + + return requested_bits; +} + +static u32 inline lrng_get_arch_data_compress(u8 *outbuf, u32 requested_bits, + u32 data_multiplier) +{ + SHASH_DESC_ON_STACK(shash, NULL); + const struct lrng_crypto_cb *crypto_cb; + struct lrng_drng *drng = lrng_drng_init_instance(); + unsigned long flags; + u32 ent_bits = 0, i, partial_bits = 0, + full_bits = requested_bits * data_multiplier; + void *hash; + + /* Calculate oversampling for SP800-90C */ + if (lrng_sp80090c_compliant()) { + /* Complete amount of bits to be pulled */ + full_bits += CONFIG_LRNG_OVERSAMPLE_ES_BITS * data_multiplier; + /* Full blocks that will be pulled */ + data_multiplier = full_bits / requested_bits; + /* Partial block in bits to be pulled */ + partial_bits = full_bits - (data_multiplier * requested_bits); + } + + lrng_hash_lock(drng, &flags); + crypto_cb = drng->crypto_cb; + hash = drng->hash; + + if (crypto_cb->lrng_hash_init(shash, hash)) + goto out; + + /* Hash all data from the CPU entropy source */ + for (i = 0; i < data_multiplier; i++) { + ent_bits = lrng_get_arch_data(outbuf, requested_bits); + if (!ent_bits) + goto out; + + if (crypto_cb->lrng_hash_update(shash, outbuf, ent_bits >> 3)) + goto err; + } + + /* Hash partial block, if applicable */ + ent_bits = lrng_get_arch_data(outbuf, partial_bits); + if (ent_bits && + crypto_cb->lrng_hash_update(shash, outbuf, ent_bits >> 3)) + goto err; + + pr_debug("pulled %u bits from CPU RNG entropy source\n", full_bits); + + /* Generate the compressed data to be returned to the caller */ + ent_bits = crypto_cb->lrng_hash_digestsize(hash) << 3; + if (requested_bits < ent_bits) { + u8 digest[LRNG_MAX_DIGESTSIZE]; + + if (crypto_cb->lrng_hash_final(shash, digest)) + goto err; + + /* Truncate output data to requested size */ + memcpy(outbuf, digest, requested_bits >> 3); + memzero_explicit(digest, crypto_cb->lrng_hash_digestsize(hash)); + ent_bits = requested_bits; + } else { + if (crypto_cb->lrng_hash_final(shash, outbuf)) + goto err; + } + +out: + crypto_cb->lrng_hash_desc_zero(shash); + lrng_hash_unlock(drng, flags); + return ent_bits; + +err: + ent_bits = 0; + goto out; +} + +/* + * If CPU entropy source requires does not return full entropy, return the + * multiplier of how much data shall be sampled from it. + */ +static u32 lrng_arch_multiplier(void) +{ + static u32 data_multiplier = 0; + + if (data_multiplier > 0) { + return data_multiplier; + } else { + unsigned long v; + + if (IS_ENABLED(CONFIG_X86) && !arch_get_random_seed_long(&v)) { + /* + * Intel SPEC: pulling 512 blocks from RDRAND ensures + * one reseed making it logically equivalent to RDSEED. + */ + data_multiplier = 512; + } else if (IS_ENABLED(CONFIG_PPC)) { + /* + * PowerISA defines DARN to deliver at least 0.5 bits of + * entropy per data bit. + */ + data_multiplier = 2; + } else { + /* CPU provides full entropy */ + data_multiplier = CONFIG_LRNG_CPU_FULL_ENT_MULTIPLIER; + } + } + return data_multiplier; +} + +/* + * lrng_get_arch() - Get CPU entropy source entropy + * + * @outbuf: buffer to store entropy of size requested_bits + * + * Return: + * * > 0 on success where value provides the added entropy in bits + * * 0 if no fast source was available + */ +u32 lrng_get_arch(u8 *outbuf, u32 requested_bits) +{ + u32 ent_bits, data_multiplier = lrng_arch_multiplier(); + + if (data_multiplier <= 1) { + ent_bits = lrng_get_arch_data(outbuf, requested_bits); + } else { + ent_bits = lrng_get_arch_data_compress(outbuf, requested_bits, + data_multiplier); + } + + ent_bits = lrng_archrandom_entropylevel(ent_bits); + pr_debug("obtained %u bits of entropy from CPU RNG entropy source\n", + ent_bits); + return ent_bits; +} + +void lrng_arch_es_state(unsigned char *buf, size_t buflen) +{ + const struct lrng_drng *lrng_drng_init = lrng_drng_init_instance(); + u32 data_multiplier = lrng_arch_multiplier(); + + /* Assume the lrng_drng_init lock is taken by caller */ + snprintf(buf, buflen, + "CPU ES properties:\n" + " Hash for compressing data: %s\n" + " Data multiplier: %u\n", + (data_multiplier <= 1) ? + "N/A" : lrng_drng_init->crypto_cb->lrng_hash_name(), + data_multiplier); +} diff -urN linux-5.15/drivers/char/lrng/lrng_es_aux.c linux-5.15-lrng/drivers/char/lrng/lrng_es_aux.c --- linux-5.15/drivers/char/lrng/lrng_es_aux.c 1970-01-01 10:00:00.000000000 +1000 +++ linux-5.15-lrng/drivers/char/lrng/lrng_es_aux.c 2021-11-29 12:36:52.113279174 +1100 @@ -0,0 +1,294 @@ +// SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause +/* + * LRNG Slow Entropy Source: Auxiliary entropy pool + * + * Copyright (C) 2016 - 2021, Stephan Mueller + */ + +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt + +#include + +#include "lrng_internal.h" + +/* + * This is the auxiliary pool + * + * The aux pool array is aligned to 8 bytes to comfort the kernel crypto API + * cipher implementations of the hash functions used to read the pool: for some + * accelerated implementations, we need an alignment to avoid a realignment + * which involves memcpy(). The alignment to 8 bytes should satisfy all crypto + * implementations. + */ +struct lrng_pool { + u8 aux_pool[LRNG_POOL_SIZE]; /* Aux pool: digest state */ + atomic_t aux_entropy_bits; + atomic_t digestsize; /* Digest size of used hash */ + bool initialized; /* Aux pool initialized? */ + + /* Serialize read of entropy pool and update of aux pool */ + spinlock_t lock; +}; + +static struct lrng_pool lrng_pool __aligned(LRNG_KCAPI_ALIGN) = { + .aux_entropy_bits = ATOMIC_INIT(0), + .digestsize = ATOMIC_INIT(LRNG_ATOMIC_DIGEST_SIZE), + .initialized = false, + .lock = __SPIN_LOCK_UNLOCKED(lrng_pool.lock) +}; + +/********************************** Helper ***********************************/ + +/* Entropy in bits present in aux pool */ +u32 lrng_avail_aux_entropy(void) +{ + /* Cap available entropy with max entropy */ + u32 avail_bits = min_t(u32, lrng_get_digestsize(), + atomic_read_u32(&lrng_pool.aux_entropy_bits)); + + /* Consider oversampling rate due to aux pool conditioning */ + return lrng_reduce_by_osr(avail_bits); +} + +/* Set the digest size of the used hash in bytes */ +static inline void lrng_set_digestsize(u32 digestsize) +{ + struct lrng_pool *pool = &lrng_pool; + u32 ent_bits = atomic_xchg_relaxed(&pool->aux_entropy_bits, 0), + old_digestsize = lrng_get_digestsize(); + + atomic_set(&lrng_pool.digestsize, digestsize); + + /* + * Update the /proc/.../write_wakeup_threshold which must not be larger + * than the digest size of the curent conditioning hash. + */ + digestsize <<= 3; + lrng_proc_update_max_write_thresh(digestsize); + if (lrng_write_wakeup_bits > digestsize) + lrng_write_wakeup_bits = digestsize; + + /* + * In case the new digest is larger than the old one, cap the available + * entropy to the old message digest used to process the existing data. + */ + ent_bits = min_t(u32, ent_bits, old_digestsize); + atomic_add(ent_bits, &pool->aux_entropy_bits); +} + +/* Obtain the digest size provided by the used hash in bits */ +u32 lrng_get_digestsize(void) +{ + return atomic_read_u32(&lrng_pool.digestsize) << 3; +} + +/* Set entropy content in user-space controllable aux pool */ +void lrng_pool_set_entropy(u32 entropy_bits) +{ + atomic_set(&lrng_pool.aux_entropy_bits, entropy_bits); +} + +/* + * Replace old with new hash for auxiliary pool handling + * + * Assumption: the caller must guarantee that the new_cb is available during the + * entire operation (e.g. it must hold the write lock against pointer updating). + */ +int lrng_aux_switch_hash(const struct lrng_crypto_cb *new_cb, void *new_hash, + const struct lrng_crypto_cb *old_cb) +{ + struct lrng_pool *pool = &lrng_pool; + struct shash_desc *shash = (struct shash_desc *)pool->aux_pool; + u8 digest[LRNG_MAX_DIGESTSIZE]; + int ret; + + if (!IS_ENABLED(CONFIG_LRNG_DRNG_SWITCH)) + return -EOPNOTSUPP; + + if (unlikely(!pool->initialized)) + return 0; + + /* Get the aux pool hash with old digest ... */ + ret = old_cb->lrng_hash_final(shash, digest) ?: + /* ... re-initialize the hash with the new digest ... */ + new_cb->lrng_hash_init(shash, new_hash) ?: + /* + * ... feed the old hash into the new state. We may feed + * uninitialized memory into the new state, but this is + * considered no issue and even good as we have some more + * uncertainty here. + */ + new_cb->lrng_hash_update(shash, digest, sizeof(digest)); + if (!ret) { + lrng_set_digestsize(new_cb->lrng_hash_digestsize(new_hash)); + pr_debug("Re-initialize aux entropy pool with hash %s\n", + new_cb->lrng_hash_name()); + } + + memzero_explicit(digest, sizeof(digest)); + return ret; +} + +/* Insert data into auxiliary pool by using the hash update function. */ +static int +lrng_pool_insert_aux_locked(const u8 *inbuf, u32 inbuflen, u32 entropy_bits) +{ + struct lrng_pool *pool = &lrng_pool; + struct shash_desc *shash = (struct shash_desc *)pool->aux_pool; + struct lrng_drng *drng = lrng_drng_init_instance(); + const struct lrng_crypto_cb *crypto_cb; + unsigned long flags; + void *hash; + int ret; + + entropy_bits = min_t(u32, entropy_bits, inbuflen << 3); + + lrng_hash_lock(drng, &flags); + + crypto_cb = drng->crypto_cb; + hash = drng->hash; + + if (unlikely(!pool->initialized)) { + ret = crypto_cb->lrng_hash_init(shash, hash); + if (ret) + goto out; + pool->initialized = true; + } + + ret = crypto_cb->lrng_hash_update(shash, inbuf, inbuflen); + if (ret) + goto out; + + /* + * Cap the available entropy to the hash output size compliant to + * SP800-90B section 3.1.5.1 table 1. + */ + entropy_bits += atomic_read_u32(&pool->aux_entropy_bits); + atomic_set(&pool->aux_entropy_bits, + min_t(u32, entropy_bits, + crypto_cb->lrng_hash_digestsize(hash) << 3)); + +out: + lrng_hash_unlock(drng, flags); + return ret; +} + +int lrng_pool_insert_aux(const u8 *inbuf, u32 inbuflen, u32 entropy_bits) +{ + struct lrng_pool *pool = &lrng_pool; + unsigned long flags; + int ret; + + spin_lock_irqsave(&pool->lock, flags); + ret = lrng_pool_insert_aux_locked(inbuf, inbuflen, entropy_bits); + spin_unlock_irqrestore(&pool->lock, flags); + + lrng_pool_add_entropy(); + + return ret; +} + +/************************* Get data from entropy pool *************************/ + +/* + * Get auxiliary entropy pool and its entropy content for seed buffer. + * Caller must hold lrng_pool.pool->lock. + * @outbuf: buffer to store data in with size requested_bits + * @requested_bits: Requested amount of entropy + * @return: amount of entropy in outbuf in bits. + */ +static inline u32 lrng_get_aux_pool(u8 *outbuf, u32 requested_bits) +{ + struct lrng_pool *pool = &lrng_pool; + struct shash_desc *shash = (struct shash_desc *)pool->aux_pool; + struct lrng_drng *drng = lrng_drng_init_instance(); + const struct lrng_crypto_cb *crypto_cb; + unsigned long flags; + void *hash; + u32 collected_ent_bits, returned_ent_bits, unused_bits = 0, + digestsize; + u8 aux_output[LRNG_MAX_DIGESTSIZE]; + + if (unlikely(!pool->initialized)) + return 0; + + lrng_hash_lock(drng, &flags); + + crypto_cb = drng->crypto_cb; + hash = drng->hash; + digestsize = crypto_cb->lrng_hash_digestsize(hash); + + /* Ensure that no more than the size of aux_pool can be requested */ + requested_bits = min_t(u32, requested_bits, (LRNG_MAX_DIGESTSIZE << 3)); + + /* Cap entropy with entropy counter from aux pool and the used digest */ + collected_ent_bits = min_t(u32, digestsize << 3, + atomic_xchg_relaxed(&pool->aux_entropy_bits, 0)); + + /* We collected too much entropy and put the overflow back */ + if (collected_ent_bits > (requested_bits + lrng_compress_osr())) { + /* Amount of bits we collected too much */ + unused_bits = collected_ent_bits - requested_bits; + /* Put entropy back */ + atomic_add(unused_bits, &pool->aux_entropy_bits); + /* Fix collected entropy */ + collected_ent_bits = requested_bits; + } + + /* Apply oversampling: discount requested oversampling rate */ + returned_ent_bits = lrng_reduce_by_osr(collected_ent_bits); + + pr_debug("obtained %u bits by collecting %u bits of entropy from aux pool, %u bits of entropy remaining\n", + returned_ent_bits, collected_ent_bits, unused_bits); + + /* Get the digest for the aux pool to be returned to the caller ... */ + if (crypto_cb->lrng_hash_final(shash, aux_output) || + /* + * ... and re-initialize the aux state. Do not add the aux pool + * digest for backward secrecy as it will be added with the + * insertion of the complete seed buffer after it has been filled. + */ + crypto_cb->lrng_hash_init(shash, hash)) { + returned_ent_bits = 0; + } else { + /* + * Do not truncate the output size exactly to collected_ent_bits + * as the aux pool may contain data that is not credited with + * entropy, but we want to use them to stir the DRNG state. + */ + memcpy(outbuf, aux_output, requested_bits >> 3); + } + + lrng_hash_unlock(drng, flags); + memzero_explicit(aux_output, digestsize); + return returned_ent_bits; +} + +void lrng_get_backtrack_aux(struct entropy_buf *entropy_buf, u32 requested_bits) +{ + struct lrng_pool *pool = &lrng_pool; + unsigned long flags; + + /* Ensure aux pool extraction and backtracking op are atomic */ + spin_lock_irqsave(&pool->lock, flags); + + entropy_buf->a_bits = lrng_get_aux_pool(entropy_buf->a, requested_bits); + + /* Mix the extracted data back into pool for backtracking resistance */ + if (lrng_pool_insert_aux_locked((u8 *)entropy_buf, + sizeof(struct entropy_buf), 0)) + pr_warn("Backtracking resistance operation failed\n"); + + spin_unlock_irqrestore(&pool->lock, flags); +} + +void lrng_aux_es_state(unsigned char *buf, size_t buflen) +{ + const struct lrng_drng *lrng_drng_init = lrng_drng_init_instance(); + + /* Assume the lrng_drng_init lock is taken by caller */ + snprintf(buf, buflen, + "Auxiliary ES properties:\n" + " Hash for operating entropy pool: %s\n", + lrng_drng_init->crypto_cb->lrng_hash_name()); +} diff -urN linux-5.15/drivers/char/lrng/lrng_es_irq.c linux-5.15-lrng/drivers/char/lrng/lrng_es_irq.c --- linux-5.15/drivers/char/lrng/lrng_es_irq.c 1970-01-01 10:00:00.000000000 +1000 +++ linux-5.15-lrng/drivers/char/lrng/lrng_es_irq.c 2021-11-29 12:36:57.763279152 +1100 @@ -0,0 +1,823 @@ +// SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause +/* + * LRNG Slow Entropy Source: Interrupt data collection + * + * Copyright (C) 2016 - 2021, Stephan Mueller + */ + +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt + +#include +#include +#include +#include +#include +#include + +#include "lrng_internal.h" +#include "lrng_es_irq.h" + +/* + * Number of interrupts to be recorded to assume that DRNG security strength + * bits of entropy are received. + * Note: a value below the DRNG security strength should not be defined as this + * may imply the DRNG can never be fully seeded in case other noise + * sources are unavailable. + */ +#define LRNG_IRQ_ENTROPY_BITS CONFIG_LRNG_IRQ_ENTROPY_RATE + + +/* Number of interrupts required for LRNG_DRNG_SECURITY_STRENGTH_BITS entropy */ +static u32 lrng_irq_entropy_bits = LRNG_IRQ_ENTROPY_BITS; +/* Is high-resolution timer present? */ +static bool lrng_irq_highres_timer = false; + +static u32 irq_entropy __read_mostly = LRNG_IRQ_ENTROPY_BITS; +#ifdef CONFIG_LRNG_RUNTIME_ES_CONFIG +module_param(irq_entropy, uint, 0444); +MODULE_PARM_DESC(irq_entropy, + "How many interrupts must be collected for obtaining 256 bits of entropy\n"); +#endif + +/* Per-CPU array holding concatenated entropy events */ +static DEFINE_PER_CPU(u32 [LRNG_DATA_ARRAY_SIZE], lrng_pcpu_array) + __aligned(LRNG_KCAPI_ALIGN); +static DEFINE_PER_CPU(u32, lrng_pcpu_array_ptr) = 0; +static DEFINE_PER_CPU(atomic_t, lrng_pcpu_array_irqs) = ATOMIC_INIT(0); + +/* + * The entropy collection is performed by executing the following steps: + * 1. fill up the per-CPU array holding the time stamps + * 2. once the per-CPU array is full, a compression of the data into + * the entropy pool is performed - this happens in interrupt context + * + * If step 2 is not desired in interrupt context, the following boolean + * needs to be set to false. This implies that old entropy data in the + * per-CPU array collected since the last DRNG reseed is overwritten with + * new entropy data instead of retaining the entropy with the compression + * operation. + * + * Impact on entropy: + * + * If continuous compression is enabled, the maximum entropy that is collected + * per CPU between DRNG reseeds is equal to the digest size of the used hash. + * + * If continuous compression is disabled, the maximum number of entropy events + * that can be collected per CPU is equal to LRNG_DATA_ARRAY_SIZE. This amount + * of events is converted into an entropy statement which then represents the + * maximum amount of entropy collectible per CPU between DRNG reseeds. + */ +static bool lrng_pcpu_continuous_compression __read_mostly = + IS_ENABLED(CONFIG_LRNG_ENABLE_CONTINUOUS_COMPRESSION); + +#ifdef CONFIG_LRNG_SWITCHABLE_CONTINUOUS_COMPRESSION +module_param(lrng_pcpu_continuous_compression, bool, 0444); +MODULE_PARM_DESC(lrng_pcpu_continuous_compression, + "Perform entropy compression if per-CPU entropy data array is full\n"); +#endif + +/* + * Per-CPU entropy pool with compressed entropy event + * + * The per-CPU entropy pool is defined as the hash state. New data is simply + * inserted into the entropy pool by performing a hash update operation. + * To read the entropy pool, a hash final must be invoked. However, before + * the entropy pool is released again after a hash final, the hash init must + * be performed. + */ +static DEFINE_PER_CPU(u8 [LRNG_POOL_SIZE], lrng_pcpu_pool) + __aligned(LRNG_KCAPI_ALIGN); +/* + * Lock to allow other CPUs to read the pool - as this is only done during + * reseed which is infrequent, this lock is hardly contended. + */ +static DEFINE_PER_CPU(spinlock_t, lrng_pcpu_lock); +static DEFINE_PER_CPU(bool, lrng_pcpu_lock_init) = false; + +/* Number of time stamps analyzed to calculate a GCD */ +#define LRNG_GCD_WINDOW_SIZE 100 +static u32 lrng_gcd_history[LRNG_GCD_WINDOW_SIZE]; +static atomic_t lrng_gcd_history_ptr = ATOMIC_INIT(-1); + +/* The common divisor for all timestamps */ +static u32 lrng_gcd_timer = 0; + +static inline bool lrng_gcd_tested(void) +{ + return (lrng_gcd_timer != 0); +} + +/* Set the GCD for use in IRQ ES - if 0, the GCD calculation is restarted. */ +static inline void _lrng_gcd_set(u32 running_gcd) +{ + lrng_gcd_timer = running_gcd; + mb(); +} + +static void lrng_gcd_set(u32 running_gcd) +{ + if (!lrng_gcd_tested()) { + _lrng_gcd_set(running_gcd); + pr_debug("Setting GCD to %u\n", running_gcd); + } +} + +u32 lrng_gcd_analyze(u32 *history, size_t nelem) +{ + u32 running_gcd = 0; + size_t i; + + /* Now perform the analysis on the accumulated time data. */ + for (i = 0; i < nelem; i++) { + /* + * NOTE: this would be the place to add more analysis on the + * appropriateness of the timer like checking the presence + * of sufficient variations in the timer. + */ + + /* + * This calculates the gcd of all the time values. that is + * gcd(time_1, time_2, ..., time_nelem) + * + * Some timers increment by a fixed (non-1) amount each step. + * This code checks for such increments, and allows the library + * to output the number of such changes have occurred. + */ + running_gcd = (u32)gcd(history[i], running_gcd); + + /* Zeroize data */ + history[i] = 0; + } + + return running_gcd; +} + +static void lrng_gcd_add_value(u32 time) +{ + u32 ptr = (u32)atomic_inc_return_relaxed(&lrng_gcd_history_ptr); + + if (ptr < LRNG_GCD_WINDOW_SIZE) { + lrng_gcd_history[ptr] = time; + } else if (ptr == LRNG_GCD_WINDOW_SIZE) { + u32 gcd = lrng_gcd_analyze(lrng_gcd_history, + LRNG_GCD_WINDOW_SIZE); + + if (!gcd) + gcd = 1; + + /* + * Ensure that we have variations in the time stamp below the + * given value. This is just a safety measure to prevent the GCD + * becoming too large. + */ + if (gcd >= 1000) { + pr_warn("calculated GCD is larger than expected: %u\n", + gcd); + gcd = 1000; + } + + /* Adjust all deltas by the observed (small) common factor. */ + lrng_gcd_set(gcd); + atomic_set(&lrng_gcd_history_ptr, 0); + } +} + +/* Return boolean whether LRNG identified presence of high-resolution timer */ +static bool lrng_pool_highres_timer(void) +{ + return lrng_irq_highres_timer; +} + +/* Convert entropy in bits into number of IRQs with the same entropy content. */ +static inline u32 lrng_entropy_to_data(u32 entropy_bits) +{ + return ((entropy_bits * lrng_irq_entropy_bits) / + LRNG_DRNG_SECURITY_STRENGTH_BITS); +} + +/* Convert number of IRQs into entropy value. */ +static inline u32 lrng_data_to_entropy(u32 irqnum) +{ + return ((irqnum * LRNG_DRNG_SECURITY_STRENGTH_BITS) / + lrng_irq_entropy_bits); +} + +static inline bool lrng_pcpu_pool_online(int cpu) +{ + return per_cpu(lrng_pcpu_lock_init, cpu); +} + +static void lrng_pcpu_check_compression_state(void) +{ + /* One pool must hold sufficient entropy for disabled compression */ + if (!lrng_pcpu_continuous_compression) { + u32 max_ent = min_t(u32, lrng_get_digestsize(), + lrng_data_to_entropy(LRNG_DATA_NUM_VALUES)); + if (max_ent < lrng_security_strength()) { + pr_warn("Force continuous compression operation to ensure LRNG can hold enough entropy\n"); + lrng_pcpu_continuous_compression = true; + } + } +} + +static int __init lrng_init_time_source(void) +{ + /* Set a minimum number of interrupts that must be collected */ + irq_entropy = max_t(u32, LRNG_IRQ_ENTROPY_BITS, irq_entropy); + + if ((random_get_entropy() & LRNG_DATA_SLOTSIZE_MASK) || + (random_get_entropy() & LRNG_DATA_SLOTSIZE_MASK)) { + /* + * As the highres timer is identified here, previous interrupts + * obtained during boot time are treated like a lowres-timer + * would have been present. + */ + lrng_irq_highres_timer = true; + lrng_irq_entropy_bits = irq_entropy; + } else { + u32 new_entropy = irq_entropy * LRNG_IRQ_OVERSAMPLING_FACTOR; + + lrng_health_disable(); + lrng_irq_highres_timer = false; + lrng_irq_entropy_bits = (irq_entropy < new_entropy) ? + new_entropy : irq_entropy; + pr_warn("operating without high-resolution timer and applying IRQ oversampling factor %u\n", + LRNG_IRQ_OVERSAMPLING_FACTOR); + lrng_pcpu_check_compression_state(); + } + mb(); + + return 0; +} +core_initcall(lrng_init_time_source); + +/* + * Reset all per-CPU pools - reset entropy estimator but leave the pool data + * that may or may not have entropy unchanged. + */ +void lrng_pcpu_reset(void) +{ + int cpu; + + /* Trigger GCD calculation anew. */ + _lrng_gcd_set(0); + + for_each_online_cpu(cpu) + atomic_set(per_cpu_ptr(&lrng_pcpu_array_irqs, cpu), 0); +} + +u32 lrng_pcpu_avail_pool_size(void) +{ + u32 max_size = 0, max_pool = lrng_get_digestsize(); + int cpu; + + if (!lrng_pcpu_continuous_compression) + max_pool = min_t(u32, max_pool, LRNG_DATA_NUM_VALUES); + + for_each_online_cpu(cpu) { + if (lrng_pcpu_pool_online(cpu)) + max_size += max_pool; + } + + return max_size; +} + +/* Return entropy of unused IRQs present in all per-CPU pools. */ +u32 lrng_pcpu_avail_entropy(void) +{ + u32 digestsize_irqs, irq = 0; + int cpu; + + /* Obtain the cap of maximum numbers of IRQs we count */ + digestsize_irqs = lrng_entropy_to_data(lrng_get_digestsize()); + if (!lrng_pcpu_continuous_compression) { + /* Cap to max. number of IRQs the array can hold */ + digestsize_irqs = min_t(u32, digestsize_irqs, + LRNG_DATA_NUM_VALUES); + } + + for_each_online_cpu(cpu) { + if (!lrng_pcpu_pool_online(cpu)) + continue; + irq += min_t(u32, digestsize_irqs, + atomic_read_u32(per_cpu_ptr(&lrng_pcpu_array_irqs, + cpu))); + } + + /* Consider oversampling rate */ + return lrng_reduce_by_osr(lrng_data_to_entropy(irq)); +} + +/* + * Trigger a switch of the hash implementation for the per-CPU pool. + * + * For each per-CPU pool, obtain the message digest with the old hash + * implementation, initialize the per-CPU pool again with the new hash + * implementation and inject the message digest into the new state. + * + * Assumption: the caller must guarantee that the new_cb is available during the + * entire operation (e.g. it must hold the lock against pointer updating). + */ +int lrng_pcpu_switch_hash(int node, + const struct lrng_crypto_cb *new_cb, void *new_hash, + const struct lrng_crypto_cb *old_cb) +{ + u8 digest[LRNG_MAX_DIGESTSIZE]; + u32 digestsize_irqs, found_irqs; + int ret = 0, cpu; + + if (!IS_ENABLED(CONFIG_LRNG_DRNG_SWITCH)) + return -EOPNOTSUPP; + + for_each_online_cpu(cpu) { + struct shash_desc *pcpu_shash; + + /* + * Only switch the per-CPU pools for the current node because + * the crypto_cb only applies NUMA-node-wide. + */ + if (cpu_to_node(cpu) != node || !lrng_pcpu_pool_online(cpu)) + continue; + + pcpu_shash = (struct shash_desc *)per_cpu_ptr(lrng_pcpu_pool, + cpu); + + digestsize_irqs = old_cb->lrng_hash_digestsize(pcpu_shash); + digestsize_irqs = lrng_entropy_to_data(digestsize_irqs << 3); + + if (pcpu_shash->tfm == new_hash) + continue; + + /* Get the per-CPU pool hash with old digest ... */ + ret = old_cb->lrng_hash_final(pcpu_shash, digest) ?: + /* ... re-initialize the hash with the new digest ... */ + new_cb->lrng_hash_init(pcpu_shash, new_hash) ?: + /* + * ... feed the old hash into the new state. We may feed + * uninitialized memory into the new state, but this is + * considered no issue and even good as we have some more + * uncertainty here. + */ + new_cb->lrng_hash_update(pcpu_shash, digest, + sizeof(digest)); + if (ret) + goto out; + + /* + * In case the new digest is larger than the old one, cap + * the available entropy to the old message digest used to + * process the existing data. + */ + found_irqs = atomic_xchg_relaxed( + per_cpu_ptr(&lrng_pcpu_array_irqs, cpu), 0); + found_irqs = min_t(u32, found_irqs, digestsize_irqs); + atomic_add_return_relaxed(found_irqs, + per_cpu_ptr(&lrng_pcpu_array_irqs, cpu)); + + pr_debug("Re-initialize per-CPU entropy pool for CPU %d on NUMA node %d with hash %s\n", + cpu, node, new_cb->lrng_hash_name()); + } + +out: + memzero_explicit(digest, sizeof(digest)); + return ret; +} + +/* + * When reading the per-CPU message digest, make sure we use the crypto + * callbacks defined for the NUMA node the per-CPU pool is defined for because + * the LRNG crypto switch support is only atomic per NUMA node. + */ +static inline u32 +lrng_pcpu_pool_hash_one(const struct lrng_crypto_cb *pcpu_crypto_cb, + void *pcpu_hash, int cpu, u8 *digest, u32 *digestsize) +{ + struct shash_desc *pcpu_shash = + (struct shash_desc *)per_cpu_ptr(lrng_pcpu_pool, cpu); + spinlock_t *lock = per_cpu_ptr(&lrng_pcpu_lock, cpu); + unsigned long flags; + u32 digestsize_irqs, found_irqs; + + /* Lock guarding against reading / writing to per-CPU pool */ + spin_lock_irqsave(lock, flags); + + *digestsize = pcpu_crypto_cb->lrng_hash_digestsize(pcpu_hash); + digestsize_irqs = lrng_entropy_to_data(*digestsize << 3); + + /* Obtain entropy statement like for the entropy pool */ + found_irqs = atomic_xchg_relaxed( + per_cpu_ptr(&lrng_pcpu_array_irqs, cpu), 0); + /* Cap to maximum amount of data we can hold in hash */ + found_irqs = min_t(u32, found_irqs, digestsize_irqs); + + /* Cap to maximum amount of data we can hold in array */ + if (!lrng_pcpu_continuous_compression) + found_irqs = min_t(u32, found_irqs, LRNG_DATA_NUM_VALUES); + + /* Store all not-yet compressed data in data array into hash, ... */ + if (pcpu_crypto_cb->lrng_hash_update(pcpu_shash, + (u8 *)per_cpu_ptr(lrng_pcpu_array, cpu), + LRNG_DATA_ARRAY_SIZE * sizeof(u32)) ?: + /* ... get the per-CPU pool digest, ... */ + pcpu_crypto_cb->lrng_hash_final(pcpu_shash, digest) ?: + /* ... re-initialize the hash, ... */ + pcpu_crypto_cb->lrng_hash_init(pcpu_shash, pcpu_hash) ?: + /* ... feed the old hash into the new state. */ + pcpu_crypto_cb->lrng_hash_update(pcpu_shash, digest, *digestsize)) + found_irqs = 0; + + spin_unlock_irqrestore(lock, flags); + return found_irqs; +} + +/* + * Hash all per-CPU pools and return the digest to be used as seed data for + * seeding a DRNG. The caller must guarantee backtracking resistance. + * The function will only copy as much data as entropy is available into the + * caller-provided output buffer. + * + * This function handles the translation from the number of received interrupts + * into an entropy statement. The conversion depends on LRNG_IRQ_ENTROPY_BITS + * which defines how many interrupts must be received to obtain 256 bits of + * entropy. With this value, the function lrng_data_to_entropy converts a given + * data size (received interrupts, requested amount of data, etc.) into an + * entropy statement. lrng_entropy_to_data does the reverse. + * + * @outbuf: buffer to store data in with size requested_bits + * @requested_bits: Requested amount of entropy + * @fully_seeded: indicator whether LRNG is fully seeded + * @return: amount of entropy in outbuf in bits. + */ +u32 lrng_pcpu_pool_hash(u8 *outbuf, u32 requested_bits, bool fully_seeded) +{ + SHASH_DESC_ON_STACK(shash, NULL); + const struct lrng_crypto_cb *crypto_cb; + struct lrng_drng **lrng_drng = lrng_drng_instances(); + struct lrng_drng *drng = lrng_drng_init_instance(); + u8 digest[LRNG_MAX_DIGESTSIZE]; + unsigned long flags, flags2; + u32 found_irqs, collected_irqs = 0, collected_ent_bits, requested_irqs, + returned_ent_bits; + int ret, cpu; + void *hash; + + /* Lock guarding replacement of per-NUMA hash */ + lrng_hash_lock(drng, &flags); + + crypto_cb = drng->crypto_cb; + hash = drng->hash; + + /* The hash state of filled with all per-CPU pool hashes. */ + ret = crypto_cb->lrng_hash_init(shash, hash); + if (ret) + goto err; + + requested_irqs = lrng_entropy_to_data(requested_bits + + lrng_compress_osr()); + + /* + * Harvest entropy from each per-CPU hash state - even though we may + * have collected sufficient entropy, we will hash all per-CPU pools. + */ + for_each_online_cpu(cpu) { + struct lrng_drng *pcpu_drng = drng; + u32 digestsize, pcpu_unused_irqs = 0; + int node = cpu_to_node(cpu); + + /* If pool is not online, then no entropy is present. */ + if (!lrng_pcpu_pool_online(cpu)) + continue; + + if (lrng_drng && lrng_drng[node]) + pcpu_drng = lrng_drng[node]; + + if (pcpu_drng == drng) { + found_irqs = lrng_pcpu_pool_hash_one(crypto_cb, hash, + cpu, digest, + &digestsize); + } else { + lrng_hash_lock(pcpu_drng, &flags2); + found_irqs = + lrng_pcpu_pool_hash_one(pcpu_drng->crypto_cb, + pcpu_drng->hash, cpu, + digest, &digestsize); + lrng_hash_unlock(pcpu_drng, flags2); + } + + /* Inject the digest into the state of all per-CPU pools */ + ret = crypto_cb->lrng_hash_update(shash, digest, digestsize); + if (ret) + goto err; + + collected_irqs += found_irqs; + if (collected_irqs > requested_irqs) { + pcpu_unused_irqs = collected_irqs - requested_irqs; + atomic_add_return_relaxed(pcpu_unused_irqs, + per_cpu_ptr(&lrng_pcpu_array_irqs, cpu)); + collected_irqs = requested_irqs; + } + pr_debug("%u interrupts used from entropy pool of CPU %d, %u interrupts remain unused\n", + found_irqs - pcpu_unused_irqs, cpu, pcpu_unused_irqs); + } + + ret = crypto_cb->lrng_hash_final(shash, digest); + if (ret) + goto err; + + collected_ent_bits = lrng_data_to_entropy(collected_irqs); + /* Cap to maximum entropy that can ever be generated with given hash */ + collected_ent_bits = min_t(u32, collected_ent_bits, + crypto_cb->lrng_hash_digestsize(hash) << 3); + /* Apply oversampling: discount requested oversampling rate */ + returned_ent_bits = lrng_reduce_by_osr(collected_ent_bits); + + pr_debug("obtained %u bits by collecting %u bits of entropy from entropy pool noise source\n", + returned_ent_bits, collected_ent_bits); + + /* + * Truncate to available entropy as implicitly allowed by SP800-90B + * section 3.1.5.1.1 table 1 which awards truncated hashes full + * entropy. + * + * During boot time, we read requested_bits data with + * returned_ent_bits entropy. In case our conservative entropy + * estimate underestimates the available entropy we can transport as + * much available entropy as possible. + */ + memcpy(outbuf, digest, fully_seeded ? returned_ent_bits >> 3 : + requested_bits >> 3); + +out: + crypto_cb->lrng_hash_desc_zero(shash); + lrng_hash_unlock(drng, flags); + memzero_explicit(digest, sizeof(digest)); + return returned_ent_bits; + +err: + returned_ent_bits = 0; + goto out; +} + +/* Compress the lrng_pcpu_array array into lrng_pcpu_pool */ +static inline void lrng_pcpu_array_compress(void) +{ + struct shash_desc *shash = + (struct shash_desc *)this_cpu_ptr(lrng_pcpu_pool); + struct lrng_drng **lrng_drng = lrng_drng_instances(); + struct lrng_drng *drng = lrng_drng_init_instance(); + const struct lrng_crypto_cb *crypto_cb; + spinlock_t *lock = this_cpu_ptr(&lrng_pcpu_lock); + unsigned long flags, flags2; + int node = numa_node_id(); + void *hash; + bool init = false; + + /* Get NUMA-node local hash instance */ + if (lrng_drng && lrng_drng[node]) + drng = lrng_drng[node]; + + lrng_hash_lock(drng, &flags); + crypto_cb = drng->crypto_cb; + hash = drng->hash; + + if (unlikely(!this_cpu_read(lrng_pcpu_lock_init))) { + init = true; + spin_lock_init(lock); + this_cpu_write(lrng_pcpu_lock_init, true); + pr_debug("Initializing per-CPU entropy pool for CPU %d on NUMA node %d with hash %s\n", + raw_smp_processor_id(), node, + crypto_cb->lrng_hash_name()); + } + + spin_lock_irqsave(lock, flags2); + + if (unlikely(init) && crypto_cb->lrng_hash_init(shash, hash)) { + this_cpu_write(lrng_pcpu_lock_init, false); + pr_warn("Initialization of hash failed\n"); + } else if (lrng_pcpu_continuous_compression) { + /* Add entire per-CPU data array content into entropy pool. */ + if (crypto_cb->lrng_hash_update(shash, + (u8 *)this_cpu_ptr(lrng_pcpu_array), + LRNG_DATA_ARRAY_SIZE * sizeof(u32))) + pr_warn_ratelimited("Hashing of entropy data failed\n"); + } + + spin_unlock_irqrestore(lock, flags2); + lrng_hash_unlock(drng, flags); +} + +/* Compress data array into hash */ +static inline void lrng_pcpu_array_to_hash(u32 ptr) +{ + u32 *array = this_cpu_ptr(lrng_pcpu_array); + + /* + * During boot time the hash operation is triggered more often than + * during regular operation. + */ + if (unlikely(!lrng_state_fully_seeded())) { + if ((ptr & 31) && (ptr < LRNG_DATA_WORD_MASK)) + return; + } else if (ptr < LRNG_DATA_WORD_MASK) { + return; + } + + if (lrng_raw_array_entropy_store(*array)) { + u32 i; + + /* + * If we fed even a part of the array to external analysis, we + * mark that the entire array and the per-CPU pool to have no + * entropy. This is due to the non-IID property of the data as + * we do not fully know whether the existing dependencies + * diminish the entropy beyond to what we expect it has. + */ + atomic_set(this_cpu_ptr(&lrng_pcpu_array_irqs), 0); + + for (i = 1; i < LRNG_DATA_ARRAY_SIZE; i++) + lrng_raw_array_entropy_store(*(array + i)); + } else { + lrng_pcpu_array_compress(); + /* Ping pool handler about received entropy */ + lrng_pool_add_entropy(); + } +} + +/* + * Concatenate full 32 bit word at the end of time array even when current + * ptr is not aligned to sizeof(data). + */ +static inline void _lrng_pcpu_array_add_u32(u32 data) +{ + /* Increment pointer by number of slots taken for input value */ + u32 pre_ptr, mask, ptr = this_cpu_add_return(lrng_pcpu_array_ptr, + LRNG_DATA_SLOTS_PER_UINT); + unsigned int pre_array; + + /* + * This function injects a unit into the array - guarantee that + * array unit size is equal to data type of input data. + */ + BUILD_BUG_ON(LRNG_DATA_ARRAY_MEMBER_BITS != (sizeof(data) << 3)); + + /* + * The following logic requires at least two units holding + * the data as otherwise the pointer would immediately wrap when + * injection an u32 word. + */ + BUILD_BUG_ON(LRNG_DATA_NUM_VALUES <= LRNG_DATA_SLOTS_PER_UINT); + + lrng_pcpu_split_u32(&ptr, &pre_ptr, &mask); + + /* MSB of data go into previous unit */ + pre_array = lrng_data_idx2array(pre_ptr); + /* zeroization of slot to ensure the following OR adds the data */ + this_cpu_and(lrng_pcpu_array[pre_array], ~(0xffffffff & ~mask)); + this_cpu_or(lrng_pcpu_array[pre_array], data & ~mask); + + /* Invoke compression as we just filled data array completely */ + if (unlikely(pre_ptr > ptr)) + lrng_pcpu_array_to_hash(LRNG_DATA_WORD_MASK); + + /* LSB of data go into current unit */ + this_cpu_write(lrng_pcpu_array[lrng_data_idx2array(ptr)], + data & mask); + + if (likely(pre_ptr <= ptr)) + lrng_pcpu_array_to_hash(ptr); +} + +/* Concatenate a 32-bit word at the end of the per-CPU array */ +void lrng_pcpu_array_add_u32(u32 data) +{ + /* + * Disregard entropy-less data without continuous compression to + * avoid it overwriting data with entropy when array ptr wraps. + */ + if (lrng_pcpu_continuous_compression) + _lrng_pcpu_array_add_u32(data); +} + +/* Concatenate data of max LRNG_DATA_SLOTSIZE_MASK at the end of time array */ +static inline void lrng_pcpu_array_add_slot(u32 data) +{ + /* Get slot */ + u32 ptr = this_cpu_inc_return(lrng_pcpu_array_ptr) & + LRNG_DATA_WORD_MASK; + unsigned int array = lrng_data_idx2array(ptr); + unsigned int slot = lrng_data_idx2slot(ptr); + + BUILD_BUG_ON(LRNG_DATA_ARRAY_MEMBER_BITS % LRNG_DATA_SLOTSIZE_BITS); + /* Ensure consistency of values */ + BUILD_BUG_ON(LRNG_DATA_ARRAY_MEMBER_BITS != + sizeof(lrng_pcpu_array[0]) << 3); + + /* zeroization of slot to ensure the following OR adds the data */ + this_cpu_and(lrng_pcpu_array[array], + ~(lrng_data_slot_val(0xffffffff & LRNG_DATA_SLOTSIZE_MASK, + slot))); + /* Store data into slot */ + this_cpu_or(lrng_pcpu_array[array], lrng_data_slot_val(data, slot)); + + lrng_pcpu_array_to_hash(ptr); +} + +static inline void +lrng_time_process_common(u32 time, void(*add_time)(u32 data)) +{ + enum lrng_health_res health_test; + + if (lrng_raw_hires_entropy_store(time)) + return; + + health_test = lrng_health_test(time); + if (health_test > lrng_health_fail_use) + return; + + if (health_test == lrng_health_pass) + atomic_inc_return(this_cpu_ptr(&lrng_pcpu_array_irqs)); + + add_time(time); +} + +/* + * Batching up of entropy in per-CPU array before injecting into entropy pool. + */ +static inline void lrng_time_process(void) +{ + u32 now_time = random_get_entropy(); + + if (unlikely(!lrng_gcd_tested())) { + /* When GCD is unknown, we process the full time stamp */ + lrng_time_process_common(now_time, _lrng_pcpu_array_add_u32); + lrng_gcd_add_value(now_time); + } else { + /* GCD is known and applied */ + lrng_time_process_common((now_time / lrng_gcd_timer) & + LRNG_DATA_SLOTSIZE_MASK, + lrng_pcpu_array_add_slot); + } + + lrng_perf_time(now_time); +} + +/* Hot code path - Callback for interrupt handler */ +void add_interrupt_randomness(int irq, int irq_flg) +{ + if (lrng_pool_highres_timer()) { + lrng_time_process(); + } else { + struct pt_regs *regs = get_irq_regs(); + static atomic_t reg_idx = ATOMIC_INIT(0); + u64 ip; + u32 tmp; + + if (regs) { + u32 *ptr = (u32 *)regs; + int reg_ptr = atomic_add_return_relaxed(1, ®_idx); + size_t n = (sizeof(struct pt_regs) / sizeof(u32)); + + ip = instruction_pointer(regs); + tmp = *(ptr + (reg_ptr % n)); + tmp = lrng_raw_regs_entropy_store(tmp) ? 0 : tmp; + _lrng_pcpu_array_add_u32(tmp); + } else { + ip = _RET_IP_; + } + + lrng_time_process(); + + /* + * The XOR operation combining the different values is not + * considered to destroy entropy since the entirety of all + * processed values delivers the entropy (and not each + * value separately of the other values). + */ + tmp = lrng_raw_jiffies_entropy_store(jiffies) ? 0 : jiffies; + tmp ^= lrng_raw_irq_entropy_store(irq) ? 0 : irq; + tmp ^= lrng_raw_irqflags_entropy_store(irq_flg) ? 0 : irq_flg; + tmp ^= lrng_raw_retip_entropy_store(ip) ? 0 : ip; + tmp ^= ip >> 32; + _lrng_pcpu_array_add_u32(tmp); + } +} +EXPORT_SYMBOL(add_interrupt_randomness); + +void lrng_irq_es_state(unsigned char *buf, size_t buflen) +{ + const struct lrng_drng *lrng_drng_init = lrng_drng_init_instance(); + + /* Assume the lrng_drng_init lock is taken by caller */ + snprintf(buf, buflen, + "IRQ ES properties:\n" + " Hash for operating entropy pool: %s\n" + " per-CPU interrupt collection size: %u\n" + " Standards compliance: %s\n" + " High-resolution timer: %s\n" + " Continuous compression: %s\n", + lrng_drng_init->crypto_cb->lrng_hash_name(), + LRNG_DATA_NUM_VALUES, + lrng_sp80090b_compliant() ? "SP800-90B " : "", + lrng_pool_highres_timer() ? "true" : "false", + lrng_pcpu_continuous_compression ? "true" : "false"); +} diff -urN linux-5.15/drivers/char/lrng/lrng_es_irq.h linux-5.15-lrng/drivers/char/lrng/lrng_es_irq.h --- linux-5.15/drivers/char/lrng/lrng_es_irq.h 1970-01-01 10:00:00.000000000 +1000 +++ linux-5.15-lrng/drivers/char/lrng/lrng_es_irq.h 2021-11-29 12:36:57.773279152 +1100 @@ -0,0 +1,71 @@ +/* SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause */ +/* + * LRNG Slow Noise Source: Time stamp array handling + * + * Copyright (C) 2016 - 2021, Stephan Mueller + */ + +/* + * To limit the impact on the interrupt handling, the LRNG concatenates + * entropic LSB parts of the time stamps in a per-CPU array and only + * injects them into the entropy pool when the array is full. + */ + +/* Store multiple integers in one u32 */ +#define LRNG_DATA_SLOTSIZE_BITS (8) +#define LRNG_DATA_SLOTSIZE_MASK ((1 << LRNG_DATA_SLOTSIZE_BITS) - 1) +#define LRNG_DATA_ARRAY_MEMBER_BITS (4 << 3) /* ((sizeof(u32)) << 3) */ +#define LRNG_DATA_SLOTS_PER_UINT (LRNG_DATA_ARRAY_MEMBER_BITS / \ + LRNG_DATA_SLOTSIZE_BITS) + +/* + * Number of time values to store in the array - in small environments + * only one atomic_t variable per CPU is used. + */ +#define LRNG_DATA_NUM_VALUES (CONFIG_LRNG_COLLECTION_SIZE) +/* Mask of LSB of time stamp to store */ +#define LRNG_DATA_WORD_MASK (LRNG_DATA_NUM_VALUES - 1) + +#define LRNG_DATA_SLOTS_MASK (LRNG_DATA_SLOTS_PER_UINT - 1) +#define LRNG_DATA_ARRAY_SIZE (LRNG_DATA_NUM_VALUES / \ + LRNG_DATA_SLOTS_PER_UINT) + +/* Starting bit index of slot */ +static inline unsigned int lrng_data_slot2bitindex(unsigned int slot) +{ + return (LRNG_DATA_SLOTSIZE_BITS * slot); +} + +/* Convert index into the array index */ +static inline unsigned int lrng_data_idx2array(unsigned int idx) +{ + return idx / LRNG_DATA_SLOTS_PER_UINT; +} + +/* Convert index into the slot of a given array index */ +static inline unsigned int lrng_data_idx2slot(unsigned int idx) +{ + return idx & LRNG_DATA_SLOTS_MASK; +} + +/* Convert value into slot value */ +static inline unsigned int lrng_data_slot_val(unsigned int val, + unsigned int slot) +{ + return val << lrng_data_slot2bitindex(slot); +} + +/* + * Return the pointers for the previous and current units to inject a u32 into. + * Also return the mask which the u32 word is to be processed. + */ +static inline void lrng_pcpu_split_u32(u32 *ptr, u32 *pre_ptr, u32 *mask) +{ + /* ptr to previous unit */ + *pre_ptr = (*ptr - LRNG_DATA_SLOTS_PER_UINT) & LRNG_DATA_WORD_MASK; + *ptr &= LRNG_DATA_WORD_MASK; + + /* mask to split data into the two parts for the two units */ + *mask = ((1 << (*pre_ptr & (LRNG_DATA_SLOTS_PER_UINT - 1)) * + LRNG_DATA_SLOTSIZE_BITS)) - 1; +} diff -urN linux-5.15/drivers/char/lrng/lrng_es_jent.c linux-5.15-lrng/drivers/char/lrng/lrng_es_jent.c --- linux-5.15/drivers/char/lrng/lrng_es_jent.c 1970-01-01 10:00:00.000000000 +1000 +++ linux-5.15-lrng/drivers/char/lrng/lrng_es_jent.c 2021-11-29 12:38:04.443278898 +1100 @@ -0,0 +1,97 @@ +// SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause +/* + * LRNG Fast Entropy Source: Jitter RNG + * + * Copyright (C) 2016 - 2021, Stephan Mueller + */ + +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt + +#include +#include + +#include "lrng_internal.h" + +/* + * Estimated entropy of data is a 16th of LRNG_DRNG_SECURITY_STRENGTH_BITS. + * Albeit a full entropy assessment is provided for the noise source indicating + * that it provides high entropy rates and considering that it deactivates + * when it detects insufficient hardware, the chosen under estimation of + * entropy is considered to be acceptable to all reviewers. + */ +static u32 jitterrng = CONFIG_LRNG_JENT_ENTROPY_RATE; +#ifdef CONFIG_LRNG_RUNTIME_ES_CONFIG +module_param(jitterrng, uint, 0644); +MODULE_PARM_DESC(jitterrng, "Entropy in bits of 256 data bits from Jitter RNG noise source"); +#endif + +static bool lrng_jent_initialized = false; +static struct rand_data *lrng_jent_state; + +static int __init lrng_jent_initialize(void) +{ + /* Initialize the Jitter RNG after the clocksources are initialized. */ + if (jent_entropy_init() || + (lrng_jent_state = jent_entropy_collector_alloc(1, 0)) == NULL) { + jitterrng = 0; + pr_info("Jitter RNG unusable on current system\n"); + return 0; + } + lrng_jent_initialized = true; + lrng_pool_add_entropy(); + pr_debug("Jitter RNG working on current system\n"); + + return 0; +} +device_initcall(lrng_jent_initialize); + +/* + * lrng_get_jent() - Get Jitter RNG entropy + * + * @outbuf: buffer to store entropy + * @outbuflen: length of buffer + * + * Return: + * * > 0 on success where value provides the added entropy in bits + * * 0 if no fast source was available + */ +u32 lrng_get_jent(u8 *outbuf, u32 requested_bits) +{ + int ret; + u32 ent_bits = lrng_jent_entropylevel(requested_bits); + unsigned long flags; + static DEFINE_SPINLOCK(lrng_jent_lock); + + spin_lock_irqsave(&lrng_jent_lock, flags); + + if (!lrng_jent_initialized) { + spin_unlock_irqrestore(&lrng_jent_lock, flags); + return 0; + } + + ret = jent_read_entropy(lrng_jent_state, outbuf, requested_bits >> 3); + spin_unlock_irqrestore(&lrng_jent_lock, flags); + + if (ret) { + pr_debug("Jitter RNG failed with %d\n", ret); + return 0; + } + + pr_debug("obtained %u bits of entropy from Jitter RNG noise source\n", + ent_bits); + + return ent_bits; +} + +u32 lrng_jent_entropylevel(u32 requested_bits) +{ + return lrng_fast_noise_entropylevel((lrng_jent_initialized) ? + jitterrng : 0, requested_bits); +} + +void lrng_jent_es_state(unsigned char *buf, size_t buflen) +{ + snprintf(buf, buflen, + "JitterRNG ES properties:\n" + " Enabled: %s\n", lrng_jent_initialized ? "true" : "false"); +} diff -urN linux-5.15/drivers/char/lrng/lrng_es_mgr.c linux-5.15-lrng/drivers/char/lrng/lrng_es_mgr.c --- linux-5.15/drivers/char/lrng/lrng_es_mgr.c 1970-01-01 10:00:00.000000000 +1000 +++ linux-5.15-lrng/drivers/char/lrng/lrng_es_mgr.c 2021-11-29 12:36:52.113279174 +1100 @@ -0,0 +1,373 @@ +// SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause +/* + * LRNG Entropy sources management + * + * Copyright (C) 2016 - 2021, Stephan Mueller + */ + +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt + +#include +#include +#include +#include +#include + +#include "lrng_internal.h" + +struct lrng_state { + bool can_invalidate; /* Can invalidate batched entropy? */ + bool perform_seedwork; /* Can seed work be performed? */ + bool lrng_operational; /* Is DRNG operational? */ + bool lrng_fully_seeded; /* Is DRNG fully seeded? */ + bool lrng_min_seeded; /* Is DRNG minimally seeded? */ + bool all_online_numa_node_seeded;/* All NUMA DRNGs seeded? */ + + /* + * To ensure that external entropy providers cannot dominate the + * internal noise sources but yet cannot be dominated by internal + * noise sources, the following booleans are intended to allow + * external to provide seed once when a DRNG reseed occurs. This + * triggering of external noise source is performed even when the + * entropy pool has sufficient entropy. + */ + bool lrng_seed_hw; /* Allow HW to provide seed */ + bool lrng_seed_user; /* Allow user space to provide seed */ + + atomic_t boot_entropy_thresh; /* Reseed threshold */ + atomic_t reseed_in_progress; /* Flag for on executing reseed */ + struct work_struct lrng_seed_work; /* (re)seed work queue */ +}; + +static struct lrng_state lrng_state = { + false, false, false, false, false, false, true, true, + .boot_entropy_thresh = ATOMIC_INIT(LRNG_INIT_ENTROPY_BITS), + .reseed_in_progress = ATOMIC_INIT(0), +}; + +/********************************** Helper ***********************************/ + +/* External entropy provider is allowed to provide seed data */ +bool lrng_state_exseed_allow(enum lrng_external_noise_source source) +{ + if (source == lrng_noise_source_hw) + return lrng_state.lrng_seed_hw; + return lrng_state.lrng_seed_user; +} + +/* Enable / disable external entropy provider to furnish seed */ +void lrng_state_exseed_set(enum lrng_external_noise_source source, bool type) +{ + if (source == lrng_noise_source_hw) + lrng_state.lrng_seed_hw = type; + else + lrng_state.lrng_seed_user = type; +} + +static inline void lrng_state_exseed_allow_all(void) +{ + lrng_state_exseed_set(lrng_noise_source_hw, true); + lrng_state_exseed_set(lrng_noise_source_user, true); +} + +/* + * Reading of the LRNG pool is only allowed by one caller. The reading is + * only performed to (re)seed DRNGs. Thus, if this "lock" is already taken, + * the reseeding operation is in progress. The caller is not intended to wait + * but continue with its other operation. + */ +int lrng_pool_trylock(void) +{ + return atomic_cmpxchg(&lrng_state.reseed_in_progress, 0, 1); +} + +void lrng_pool_unlock(void) +{ + atomic_set(&lrng_state.reseed_in_progress, 0); +} + +/* Set new entropy threshold for reseeding during boot */ +void lrng_set_entropy_thresh(u32 new_entropy_bits) +{ + atomic_set(&lrng_state.boot_entropy_thresh, new_entropy_bits); +} + +/* + * Reset LRNG state - the entropy counters are reset, but the data that may + * or may not have entropy remains in the pools as this data will not hurt. + */ +void lrng_reset_state(void) +{ + lrng_pool_set_entropy(0); + lrng_pcpu_reset(); + lrng_state.lrng_operational = false; + lrng_state.lrng_fully_seeded = false; + lrng_state.lrng_min_seeded = false; + lrng_state.all_online_numa_node_seeded = false; + pr_debug("reset LRNG\n"); +} + +/* Set flag that all DRNGs are fully seeded */ +void lrng_pool_all_numa_nodes_seeded(bool set) +{ + lrng_state.all_online_numa_node_seeded = set; +} + +/* Return boolean whether LRNG reached minimally seed level */ +bool lrng_state_min_seeded(void) +{ + return lrng_state.lrng_min_seeded; +} + +/* Return boolean whether LRNG reached fully seed level */ +bool lrng_state_fully_seeded(void) +{ + return lrng_state.lrng_fully_seeded; +} + +/* Return boolean whether LRNG is considered fully operational */ +bool lrng_state_operational(void) +{ + return lrng_state.lrng_operational; +} + +/* Policy to check whether entropy buffer contains full seeded entropy */ +bool lrng_fully_seeded(bool fully_seeded, struct entropy_buf *eb) +{ + return ((eb->a_bits + eb->b_bits + eb->c_bits + eb->d_bits) >= + lrng_get_seed_entropy_osr(fully_seeded)); +} + +/* Mark one DRNG as not fully seeded */ +void lrng_unset_fully_seeded(struct lrng_drng *drng) +{ + drng->fully_seeded = false; + lrng_pool_all_numa_nodes_seeded(false); + + /* + * The init DRNG instance must always be fully seeded as this instance + * is the fall-back if any of the per-NUMA node DRNG instances is + * insufficiently seeded. Thus, we mark the entire LRNG as + * non-operational if the initial DRNG becomes not fully seeded. + */ + if (drng == lrng_drng_init_instance() && lrng_state_operational()) { + pr_debug("LRNG set to non-operational\n"); + lrng_state.lrng_operational = false; + lrng_state.lrng_fully_seeded = false; + + /* If sufficient entropy is available, reseed now. */ + lrng_pool_add_entropy(); + } +} + +/* Policy to enable LRNG operational mode */ +static inline void lrng_set_operational(u32 external_es) +{ + /* LRNG is operational if the initial DRNG is fully seeded ... */ + if (lrng_state.lrng_fully_seeded && + /* ... and either internal ES SP800-90B startup is complete ... */ + (lrng_sp80090b_startup_complete() || + /* ... or the external ES provided sufficient entropy. */ + (lrng_get_seed_entropy_osr(lrng_state_fully_seeded()) <= + external_es))) { + lrng_state.lrng_operational = true; + lrng_process_ready_list(); + lrng_init_wakeup(); + pr_info("LRNG fully operational\n"); + } +} + +/* Available entropy in the entire LRNG considering all entropy sources */ +u32 lrng_avail_entropy(void) +{ + u32 ent_thresh = lrng_security_strength(); + + /* + * Apply oversampling during initialization according to SP800-90C as + * we request a larger buffer from the ES. + */ + if (lrng_sp80090c_compliant() && + !lrng_state.all_online_numa_node_seeded) + ent_thresh += CONFIG_LRNG_SEED_BUFFER_INIT_ADD_BITS; + + return lrng_pcpu_avail_entropy() + lrng_avail_aux_entropy() + + lrng_archrandom_entropylevel(ent_thresh) + + lrng_jent_entropylevel(ent_thresh); +} + +/* + * lrng_init_ops() - Set seed stages of LRNG + * + * Set the slow noise source reseed trigger threshold. The initial threshold + * is set to the minimum data size that can be read from the pool: a word. Upon + * reaching this value, the next seed threshold of 128 bits is set followed + * by 256 bits. + * + * @eb: buffer containing the size of entropy currently injected into DRNG + */ +void lrng_init_ops(struct entropy_buf *eb) +{ + struct lrng_state *state = &lrng_state; + u32 requested_bits, seed_bits, external_es; + + if (state->lrng_operational) + return; + + requested_bits = lrng_get_seed_entropy_osr( + state->all_online_numa_node_seeded); + + /* + * Entropy provided by external entropy sources - if they provide + * the requested amount of entropy, unblock the interface. + */ + external_es = eb->a_bits + eb->c_bits + eb->d_bits; + seed_bits = external_es + eb->b_bits; + + /* DRNG is seeded with full security strength */ + if (state->lrng_fully_seeded) { + lrng_set_operational(external_es); + lrng_set_entropy_thresh(requested_bits); + } else if (lrng_fully_seeded(state->all_online_numa_node_seeded, eb)) { + if (state->can_invalidate) + invalidate_batched_entropy(); + + state->lrng_fully_seeded = true; + lrng_set_operational(external_es); + state->lrng_min_seeded = true; + pr_info("LRNG fully seeded with %u bits of entropy\n", + seed_bits); + lrng_set_entropy_thresh(requested_bits); + } else if (!state->lrng_min_seeded) { + + /* DRNG is seeded with at least 128 bits of entropy */ + if (seed_bits >= LRNG_MIN_SEED_ENTROPY_BITS) { + if (state->can_invalidate) + invalidate_batched_entropy(); + + state->lrng_min_seeded = true; + pr_info("LRNG minimally seeded with %u bits of entropy\n", + seed_bits); + lrng_set_entropy_thresh(requested_bits); + lrng_init_wakeup(); + + /* DRNG is seeded with at least LRNG_INIT_ENTROPY_BITS bits */ + } else if (seed_bits >= LRNG_INIT_ENTROPY_BITS) { + pr_info("LRNG initial entropy level %u bits of entropy\n", + seed_bits); + lrng_set_entropy_thresh(LRNG_MIN_SEED_ENTROPY_BITS); + } + } +} + +int __init rand_initialize(void) +{ + struct seed { + ktime_t time; + unsigned long data[(LRNG_MAX_DIGESTSIZE / + sizeof(unsigned long))]; + struct new_utsname utsname; + } seed __aligned(LRNG_KCAPI_ALIGN); + unsigned int i; + + BUILD_BUG_ON(LRNG_MAX_DIGESTSIZE % sizeof(unsigned long)); + + seed.time = ktime_get_real(); + + for (i = 0; i < ARRAY_SIZE(seed.data); i++) { + if (!arch_get_random_seed_long_early(&(seed.data[i])) && + !arch_get_random_long_early(&seed.data[i])) + seed.data[i] = random_get_entropy(); + } + memcpy(&seed.utsname, utsname(), sizeof(*(utsname()))); + + lrng_pool_insert_aux((u8 *)&seed, sizeof(seed), 0); + memzero_explicit(&seed, sizeof(seed)); + + /* Initialize the seed work queue */ + INIT_WORK(&lrng_state.lrng_seed_work, lrng_drng_seed_work); + lrng_state.perform_seedwork = true; + + lrng_drngs_init_cc20(true); + invalidate_batched_entropy(); + + lrng_state.can_invalidate = true; + + return 0; +} + +/* Interface requesting a reseed of the DRNG */ +void lrng_pool_add_entropy(void) +{ + /* + * Once all DRNGs are fully seeded, the interrupt noise + * sources will not trigger any reseeding any more. + */ + if (likely(lrng_state.all_online_numa_node_seeded)) + return; + + /* Only try to reseed if the DRNG is alive. */ + if (!lrng_get_available()) + return; + + /* Only trigger the DRNG reseed if we have collected entropy. */ + if (lrng_avail_entropy() < + atomic_read_u32(&lrng_state.boot_entropy_thresh)) + return; + + /* Ensure that the seeding only occurs once at any given time. */ + if (lrng_pool_trylock()) + return; + + /* Seed the DRNG with any available noise. */ + if (lrng_state.perform_seedwork) + schedule_work(&lrng_state.lrng_seed_work); + else + lrng_drng_seed_work(NULL); +} + +/* Fill the seed buffer with data from the noise sources */ +void lrng_fill_seed_buffer(struct entropy_buf *entropy_buf, u32 requested_bits) +{ + struct lrng_state *state = &lrng_state; + u32 req_ent = lrng_sp80090c_compliant() ? + lrng_security_strength() : LRNG_MIN_SEED_ENTROPY_BITS; + + /* Guarantee that requested bits is a multiple of bytes */ + BUILD_BUG_ON(LRNG_DRNG_SECURITY_STRENGTH_BITS % 8); + + /* always reseed the DRNG with the current time stamp */ + entropy_buf->now = random_get_entropy(); + + /* + * Require at least 128 bits of entropy for any reseed. If the LRNG is + * operated SP800-90C compliant we want to comply with SP800-90A section + * 9.2 mandating that DRNG is reseeded with the security strength. + */ + if (state->lrng_fully_seeded && (lrng_avail_entropy() < req_ent)) { + entropy_buf->a_bits = entropy_buf->b_bits = 0; + entropy_buf->c_bits = entropy_buf->d_bits = 0; + goto wakeup; + } + + /* Concatenate the output of the entropy sources. */ + entropy_buf->b_bits = lrng_pcpu_pool_hash(entropy_buf->b, + requested_bits, + state->lrng_fully_seeded); + entropy_buf->c_bits = lrng_get_arch(entropy_buf->c, requested_bits); + entropy_buf->d_bits = lrng_get_jent(entropy_buf->d, requested_bits); + lrng_get_backtrack_aux(entropy_buf, requested_bits); + + /* allow external entropy provider to provide seed */ + lrng_state_exseed_allow_all(); + +wakeup: + /* + * Shall we wake up user space writers? This location covers + * ensures that the user space provider does not dominate the internal + * noise sources since in case the first call of this function finds + * sufficient entropy in the entropy pool, it will not trigger the + * wakeup. This implies that when the next /dev/urandom read happens, + * the entropy pool is drained. + */ + lrng_writer_wakeup(); +} diff -urN linux-5.15/drivers/char/lrng/lrng_health.c linux-5.15-lrng/drivers/char/lrng/lrng_health.c --- linux-5.15/drivers/char/lrng/lrng_health.c 1970-01-01 10:00:00.000000000 +1000 +++ linux-5.15-lrng/drivers/char/lrng/lrng_health.c 2021-11-29 12:38:11.793278870 +1100 @@ -0,0 +1,410 @@ +// SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause +/* + * Linux Random Number Generator (LRNG) Health Testing + * + * Copyright (C) 2019 - 2021, Stephan Mueller + */ + +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt + +#include +#include + +#include "lrng_internal.h" + +/* Stuck Test */ +struct lrng_stuck_test { + u32 last_time; /* Stuck test: time of previous IRQ */ + u32 last_delta; /* Stuck test: delta of previous IRQ */ + u32 last_delta2; /* Stuck test: 2. time derivation of prev IRQ */ +}; + +/* Repetition Count Test */ +struct lrng_rct { + atomic_t rct_count; /* Number of stuck values */ +}; + +/* Adaptive Proportion Test */ +struct lrng_apt { + /* Data window size */ +#define LRNG_APT_WINDOW_SIZE 512 + /* LSB of time stamp to process */ +#define LRNG_APT_LSB 16 +#define LRNG_APT_WORD_MASK (LRNG_APT_LSB - 1) + atomic_t apt_count; /* APT counter */ + atomic_t apt_base; /* APT base reference */ + + atomic_t apt_trigger; + bool apt_base_set; /* Is APT base set? */ +}; + +/* The health test code must operate lock-less */ +struct lrng_health { + struct lrng_rct rct; + struct lrng_apt apt; + + bool health_test_enabled; + + /* SP800-90B startup health tests */ +#define LRNG_SP80090B_STARTUP_SAMPLES 1024 +#define LRNG_SP80090B_STARTUP_BLOCKS ((LRNG_SP80090B_STARTUP_SAMPLES + \ + LRNG_APT_WINDOW_SIZE - 1) / \ + LRNG_APT_WINDOW_SIZE) + bool sp80090b_startup_done; + atomic_t sp80090b_startup_blocks; +}; + +static struct lrng_health lrng_health = { + .rct.rct_count = ATOMIC_INIT(0), + + .apt.apt_count = ATOMIC_INIT(0), + .apt.apt_base = ATOMIC_INIT(-1), + .apt.apt_trigger = ATOMIC_INIT(LRNG_APT_WINDOW_SIZE), + .apt.apt_base_set = false, + + .health_test_enabled = true, + + .sp80090b_startup_blocks = ATOMIC_INIT(LRNG_SP80090B_STARTUP_BLOCKS), + .sp80090b_startup_done = false, +}; + +static DEFINE_PER_CPU(struct lrng_stuck_test, lrng_stuck_test); + +static inline bool lrng_sp80090b_health_requested(void) +{ + /* Health tests are only requested in FIPS mode */ + return fips_enabled; +} + +static inline bool lrng_sp80090b_health_enabled(void) +{ + struct lrng_health *health = &lrng_health; + + return lrng_sp80090b_health_requested() && health->health_test_enabled; +} + +/*************************************************************************** + * SP800-90B Compliance + * + * If the Linux-RNG is booted into FIPS mode, the following interfaces + * provide an SP800-90B compliant noise source: + * + * * /dev/random + * * getrandom(2) + * * get_random_bytes when using it in conjunction with + * add_random_ready_callback + * + * All other interfaces, including /dev/urandom or get_random_bytes without + * the add_random_ready_callback cannot claim to use an SP800-90B compliant + * noise source. + ***************************************************************************/ + +/* + * Perform SP800-90B startup testing + */ +static inline void lrng_sp80090b_startup(struct lrng_health *health) +{ + if (!health->sp80090b_startup_done && + atomic_dec_and_test(&health->sp80090b_startup_blocks)) { + struct entropy_buf eb; + + health->sp80090b_startup_done = true; + pr_info("SP800-90B startup health tests completed\n"); + memset(&eb, 0, sizeof(eb)); + lrng_init_ops(&eb); + + /* + * Force a reseed of DRNGs to ensure they are seeded with + * entropy that passed the SP800-90B health tests. + * As the DRNG always will reseed before generating + * random numbers, it does not need a reseed trigger. + */ + lrng_drng_force_reseed(); + } +} + +/* + * Handle failure of SP800-90B startup testing + */ +static inline void lrng_sp80090b_startup_failure(struct lrng_health *health) +{ + /* Reset of LRNG and its entropy - NOTE: we are in atomic context */ + lrng_reset(); + + /* + * Reset the SP800-90B startup test. + * + * NOTE SP800-90B section 4.3 bullet 4 does not specify what + * exactly is to be done in case of failure! Thus, we do what + * makes sense, i.e. restarting the health test and thus gating + * the output function of /dev/random and getrandom(2). + */ + atomic_set(&health->sp80090b_startup_blocks, + LRNG_SP80090B_STARTUP_BLOCKS); +} + +/* + * Handle failure of SP800-90B runtime testing + */ +static inline void lrng_sp80090b_runtime_failure(struct lrng_health *health) +{ + lrng_sp80090b_startup_failure(health); + health->sp80090b_startup_done = false; +} + +static inline void lrng_sp80090b_failure(struct lrng_health *health) +{ + if (health->sp80090b_startup_done) { + pr_err("SP800-90B runtime health test failure - invalidating all existing entropy and initiate SP800-90B startup\n"); + lrng_sp80090b_runtime_failure(health); + } else { + pr_err("SP800-90B startup test failure - resetting\n"); + lrng_sp80090b_startup_failure(health); + } +} + +/* + * Is the SP800-90B startup testing complete? + * + * This function is called by the LRNG to determine whether to unblock + * a certain user interface. Therefore, only the potentially blocking + * user interfaces are considered SP800-90B compliant. + */ +bool lrng_sp80090b_startup_complete(void) +{ + struct lrng_health *health = &lrng_health; + + return (lrng_sp80090b_health_enabled()) ? health->sp80090b_startup_done: + true; +} + +bool lrng_sp80090b_compliant(void) +{ + struct lrng_health *health = &lrng_health; + + return lrng_sp80090b_health_enabled() && health->sp80090b_startup_done; +} + +/*************************************************************************** + * Adaptive Proportion Test + * + * This test complies with SP800-90B section 4.4.2. + ***************************************************************************/ + +/* + * Reset the APT counter + * + * @health [in] Reference to health state + */ +static inline void lrng_apt_reset(struct lrng_health *health, + unsigned int time_masked) +{ + struct lrng_apt *apt = &health->apt; + + pr_debug("APT value %d for base %d\n", + atomic_read(&apt->apt_count), atomic_read(&apt->apt_base)); + + /* Reset APT */ + atomic_set(&apt->apt_count, 0); + atomic_set(&apt->apt_base, time_masked); +} + +static inline void lrng_apt_restart(struct lrng_health *health) +{ + struct lrng_apt *apt = &health->apt; + + atomic_set(&apt->apt_trigger, LRNG_APT_WINDOW_SIZE); +} + +/* + * Insert a new entropy event into APT + * + * This function does is void as it does not decide about the fate of a time + * stamp. An APT failure can only happen at the same time of a stuck test + * failure. Thus, the stuck failure will already decide how the time stamp + * is handled. + * + * @health [in] Reference to health state + * @now_time [in] Time stamp to process + */ +static inline void lrng_apt_insert(struct lrng_health *health, + unsigned int now_time) +{ + struct lrng_apt *apt = &health->apt; + + if (!lrng_sp80090b_health_requested()) + return; + + now_time &= LRNG_APT_WORD_MASK; + + /* Initialization of APT */ + if (!apt->apt_base_set) { + atomic_set(&apt->apt_base, now_time); + apt->apt_base_set = true; + return; + } + + if (now_time == (unsigned int)atomic_read(&apt->apt_base)) { + u32 apt_val = (u32)atomic_inc_return_relaxed(&apt->apt_count); + + if (apt_val >= CONFIG_LRNG_APT_CUTOFF) + lrng_sp80090b_failure(health); + } + + if (atomic_dec_and_test(&apt->apt_trigger)) { + lrng_apt_restart(health); + lrng_apt_reset(health, now_time); + lrng_sp80090b_startup(health); + } +} + +/*************************************************************************** + * Repetition Count Test + * + * The LRNG uses an enhanced version of the Repetition Count Test + * (RCT) specified in SP800-90B section 4.4.1. Instead of counting identical + * back-to-back values, the input to the RCT is the counting of the stuck + * values while filling the entropy pool. + * + * The RCT is applied with an alpha of 2^-30 compliant to FIPS 140-2 IG 9.8. + * + * During the counting operation, the LRNG always calculates the RCT + * cut-off value of C. If that value exceeds the allowed cut-off value, + * the LRNG will invalidate all entropy for the entropy pool which implies + * that no data can be extracted from the entropy pool unless new entropy + * is received. + ***************************************************************************/ + +/* + * Hot code path - Insert data for Repetition Count Test + * + * @health: Reference to health information + * @stuck: Decision of stuck test + */ +static inline void lrng_rct(struct lrng_health *health, int stuck) +{ + struct lrng_rct *rct = &health->rct; + + if (!lrng_sp80090b_health_requested()) + return; + + if (stuck) { + u32 rct_count = atomic_add_return_relaxed(1, &rct->rct_count); + + pr_debug("RCT count: %u\n", rct_count); + + /* + * The cutoff value is based on the following consideration: + * alpha = 2^-30 as recommended in FIPS 140-2 IG 9.8. + * In addition, we imply an entropy value H of 1 bit as this + * is the minimum entropy required to provide full entropy. + * + * Note, rct_count (which equals to value B in the + * pseudo code of SP800-90B section 4.4.1) starts with zero. + * Hence we need to subtract one from the cutoff value as + * calculated following SP800-90B. + */ + if (rct_count >= CONFIG_LRNG_RCT_CUTOFF) { + atomic_set(&rct->rct_count, 0); + + /* + * APT must start anew as we consider all previously + * recorded data to contain no entropy. + */ + lrng_apt_restart(health); + + lrng_sp80090b_failure(health); + } + } else { + atomic_set(&rct->rct_count, 0); + } +} + +/*************************************************************************** + * Stuck Test + * + * Checking the: + * 1st derivative of the event occurrence (time delta) + * 2nd derivative of the event occurrence (delta of time deltas) + * 3rd derivative of the event occurrence (delta of delta of time deltas) + * + * All values must always be non-zero. The stuck test is only valid disabled if + * high-resolution time stamps are identified after initialization. + ***************************************************************************/ + +static inline u32 lrng_delta(u32 prev, u32 next) +{ + /* + * Note that this (unsigned) subtraction does yield the correct value + * in the wraparound-case, i.e. when next < prev. + */ + return (next - prev); +} + +/* + * Hot code path + * + * @health: Reference to health information + * @now: Event time + * @return: 0 event occurrence not stuck (good time stamp) + * != 0 event occurrence stuck (reject time stamp) + */ +static inline int lrng_irq_stuck(struct lrng_stuck_test *stuck, u32 now_time) +{ + u32 delta = lrng_delta(stuck->last_time, now_time); + u32 delta2 = lrng_delta(stuck->last_delta, delta); + u32 delta3 = lrng_delta(stuck->last_delta2, delta2); + + stuck->last_time = now_time; + stuck->last_delta = delta; + stuck->last_delta2 = delta2; + + if (!delta || !delta2 || !delta3) + return 1; + + return 0; +} + +/*************************************************************************** + * Health test interfaces + ***************************************************************************/ + +/* + * Disable all health tests + */ +void lrng_health_disable(void) +{ + struct lrng_health *health = &lrng_health; + + health->health_test_enabled = false; + + if (lrng_sp80090b_health_requested()) + pr_warn("SP800-90B compliance requested but the Linux RNG is NOT SP800-90B compliant\n"); +} + +/* + * Hot code path - Perform health test on time stamp received from an event + * + * @now_time Time stamp + */ +enum lrng_health_res lrng_health_test(u32 now_time) +{ + struct lrng_health *health = &lrng_health; + struct lrng_stuck_test *stuck_test = this_cpu_ptr(&lrng_stuck_test); + int stuck; + + if (!health->health_test_enabled) + return lrng_health_pass; + + lrng_apt_insert(health, now_time); + + stuck = lrng_irq_stuck(stuck_test, now_time); + lrng_rct(health, stuck); + if (stuck) { + /* SP800-90B disallows using a failing health test time stamp */ + return lrng_sp80090b_health_requested() ? + lrng_health_fail_drop : lrng_health_fail_use; + } + + return lrng_health_pass; +} diff -urN linux-5.15/drivers/char/lrng/lrng_interfaces.c linux-5.15-lrng/drivers/char/lrng/lrng_interfaces.c --- linux-5.15/drivers/char/lrng/lrng_interfaces.c 1970-01-01 10:00:00.000000000 +1000 +++ linux-5.15-lrng/drivers/char/lrng/lrng_interfaces.c 2021-11-29 12:37:03.083279132 +1100 @@ -0,0 +1,654 @@ +// SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause +/* + * LRNG User and kernel space interfaces + * + * Copyright (C) 2016 - 2021, Stephan Mueller + */ + +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define CREATE_TRACE_POINTS +#include + +#include "lrng_internal.h" + +/* + * If the entropy count falls under this number of bits, then we + * should wake up processes which are selecting or polling on write + * access to /dev/random. + */ +u32 lrng_write_wakeup_bits = (LRNG_WRITE_WAKEUP_ENTROPY << 3); + +static LIST_HEAD(lrng_ready_list); +static DEFINE_SPINLOCK(lrng_ready_list_lock); + +static DECLARE_WAIT_QUEUE_HEAD(lrng_write_wait); +static DECLARE_WAIT_QUEUE_HEAD(lrng_init_wait); +static struct fasync_struct *fasync; + +/********************************** Helper ***********************************/ + +/* Is the DRNG seed level too low? */ +static inline bool lrng_need_entropy(void) +{ + return (lrng_avail_aux_entropy() < lrng_write_wakeup_bits); +} + +void lrng_writer_wakeup(void) +{ + if (lrng_need_entropy() && wq_has_sleeper(&lrng_write_wait)) { + wake_up_interruptible(&lrng_write_wait); + kill_fasync(&fasync, SIGIO, POLL_OUT); + } +} + +void lrng_init_wakeup(void) +{ + wake_up_all(&lrng_init_wait); + kill_fasync(&fasync, SIGIO, POLL_IN); +} + +/** + * lrng_process_ready_list() - Ping all kernel internal callers waiting until + * the DRNG is completely initialized to inform that the DRNG reached that + * seed level. + * + * When the SP800-90B testing is enabled, the ping only happens if the SP800-90B + * startup health tests are completed. This implies that kernel internal + * callers always have an SP800-90B compliant noise source when being + * pinged. + */ +void lrng_process_ready_list(void) +{ + unsigned long flags; + struct random_ready_callback *rdy, *tmp; + + if (!lrng_state_operational()) + return; + + spin_lock_irqsave(&lrng_ready_list_lock, flags); + list_for_each_entry_safe(rdy, tmp, &lrng_ready_list, list) { + struct module *owner = rdy->owner; + + list_del_init(&rdy->list); + rdy->func(rdy); + module_put(owner); + } + spin_unlock_irqrestore(&lrng_ready_list_lock, flags); +} + +void lrng_debug_report_seedlevel(const char *name) +{ +#ifdef CONFIG_WARN_ALL_UNSEEDED_RANDOM + static void *previous = NULL; + void *caller = (void *) _RET_IP_; + + if (READ_ONCE(previous) == caller) + return; + + if (!lrng_state_min_seeded()) + pr_notice("%pS %s called without reaching minimally seeded level (available entropy %u)\n", + caller, name, lrng_avail_entropy()); + + WRITE_ONCE(previous, caller); +#endif +} + +/************************ LRNG kernel input interfaces ************************/ + +/* + * add_hwgenerator_randomness() - Interface for in-kernel drivers of true + * hardware RNGs. + * + * Those devices may produce endless random bits and will be throttled + * when our pool is full. + * + * @buffer: buffer holding the entropic data from HW noise sources to be used to + * insert into entropy pool. + * @count: length of buffer + * @entropy_bits: amount of entropy in buffer (value is in bits) + */ +void add_hwgenerator_randomness(const char *buffer, size_t count, + size_t entropy_bits) +{ + /* + * Suspend writing if we are fully loaded with entropy. + * We'll be woken up again once below lrng_write_wakeup_thresh, + * or when the calling thread is about to terminate. + */ + wait_event_interruptible(lrng_write_wait, + lrng_need_entropy() || + lrng_state_exseed_allow(lrng_noise_source_hw) || + kthread_should_stop()); + lrng_state_exseed_set(lrng_noise_source_hw, false); + lrng_pool_insert_aux(buffer, count, entropy_bits); +} +EXPORT_SYMBOL_GPL(add_hwgenerator_randomness); + +/* + * add_bootloader_randomness() - Handle random seed passed by bootloader. + * + * If the seed is trustworthy, it would be regarded as hardware RNGs. Otherwise + * it would be regarded as device data. + * The decision is controlled by CONFIG_RANDOM_TRUST_BOOTLOADER. + * + * @buf: buffer holding the entropic data from HW noise sources to be used to + * insert into entropy pool. + * @size: length of buffer + */ +void add_bootloader_randomness(const void *buf, unsigned int size) +{ + lrng_pool_insert_aux(buf, size, + IS_ENABLED(CONFIG_RANDOM_TRUST_BOOTLOADER) ? + size * 8 : 0); +} +EXPORT_SYMBOL_GPL(add_bootloader_randomness); + +/* + * Callback for HID layer -- use the HID event values to stir the entropy pool + */ +void add_input_randomness(unsigned int type, unsigned int code, + unsigned int value) +{ + static unsigned char last_value; + + /* ignore autorepeat and the like */ + if (value == last_value) + return; + + last_value = value; + + lrng_pcpu_array_add_u32((type << 4) ^ code ^ (code >> 4) ^ value); +} +EXPORT_SYMBOL_GPL(add_input_randomness); + +/* + * add_device_randomness() - Add device- or boot-specific data to the entropy + * pool to help initialize it. + * + * None of this adds any entropy; it is meant to avoid the problem of + * the entropy pool having similar initial state across largely + * identical devices. + * + * @buf: buffer holding the entropic data from HW noise sources to be used to + * insert into entropy pool. + * @size: length of buffer + */ +void add_device_randomness(const void *buf, unsigned int size) +{ + lrng_pool_insert_aux((u8 *)buf, size, 0); +} +EXPORT_SYMBOL(add_device_randomness); + +#ifdef CONFIG_BLOCK +void rand_initialize_disk(struct gendisk *disk) { } +void add_disk_randomness(struct gendisk *disk) { } +EXPORT_SYMBOL(add_disk_randomness); +#endif + +#ifndef CONFIG_LRNG_IRQ +void add_interrupt_randomness(int irq, int irq_flg) { } +EXPORT_SYMBOL(add_interrupt_randomness); +#endif + +/* + * del_random_ready_callback() - Delete a previously registered readiness + * callback function. + * + * @rdy: callback definition that was registered initially + */ +void del_random_ready_callback(struct random_ready_callback *rdy) +{ + unsigned long flags; + struct module *owner = NULL; + + spin_lock_irqsave(&lrng_ready_list_lock, flags); + if (!list_empty(&rdy->list)) { + list_del_init(&rdy->list); + owner = rdy->owner; + } + spin_unlock_irqrestore(&lrng_ready_list_lock, flags); + + module_put(owner); +} +EXPORT_SYMBOL(del_random_ready_callback); + +/* + * add_random_ready_callback() - Add a callback function that will be invoked + * when the DRNG is fully initialized and seeded. + * + * @rdy: callback definition to be invoked when the LRNG is seeded + * + * Return: + * * 0 if callback is successfully added + * * -EALREADY if pool is already initialised (callback not called) + * * -ENOENT if module for callback is not alive + */ +int add_random_ready_callback(struct random_ready_callback *rdy) +{ + struct module *owner; + unsigned long flags; + int err = -EALREADY; + + if (likely(lrng_state_operational())) + return err; + + owner = rdy->owner; + if (!try_module_get(owner)) + return -ENOENT; + + spin_lock_irqsave(&lrng_ready_list_lock, flags); + if (lrng_state_operational()) + goto out; + + owner = NULL; + + list_add(&rdy->list, &lrng_ready_list); + err = 0; + +out: + spin_unlock_irqrestore(&lrng_ready_list_lock, flags); + + module_put(owner); + + return err; +} +EXPORT_SYMBOL(add_random_ready_callback); + +/*********************** LRNG kernel output interfaces ************************/ + +/* + * get_random_bytes() - Provider of cryptographic strong random numbers for + * kernel-internal usage. + * + * This function is appropriate for all in-kernel use cases. However, + * it will always use the ChaCha20 DRNG. + * + * @buf: buffer to store the random bytes + * @nbytes: size of the buffer + */ +void get_random_bytes(void *buf, int nbytes) +{ + lrng_drng_get_atomic((u8 *)buf, (u32)nbytes); + lrng_debug_report_seedlevel("get_random_bytes"); +} +EXPORT_SYMBOL(get_random_bytes); + +/* + * get_random_bytes_full() - Provider of cryptographic strong random numbers + * for kernel-internal usage. + * + * This function is appropriate only for non-atomic use cases as this + * function may sleep. Though, it provides access to the full functionality + * of LRNG including the switchable DRNG support, that may support other + * DRNGs such as the SP800-90A DRBG. + * + * @buf: buffer to store the random bytes + * @nbytes: size of the buffer + */ +void get_random_bytes_full(void *buf, int nbytes) +{ + lrng_drng_get_sleep((u8 *)buf, (u32)nbytes); + lrng_debug_report_seedlevel("get_random_bytes_full"); +} +EXPORT_SYMBOL(get_random_bytes_full); + +/* + * wait_for_random_bytes() - Wait for the LRNG to be seeded and thus + * guaranteed to supply cryptographically secure random numbers. + * + * This applies to: the /dev/urandom device, the get_random_bytes function, + * and the get_random_{u32,u64,int,long} family of functions. Using any of + * these functions without first calling this function forfeits the guarantee + * of security. + * + * Return: + * * 0 if the LRNG has been seeded. + * * -ERESTARTSYS if the function was interrupted by a signal. + */ +int wait_for_random_bytes(void) +{ + if (likely(lrng_state_min_seeded())) + return 0; + return wait_event_interruptible(lrng_init_wait, + lrng_state_min_seeded()); +} +EXPORT_SYMBOL(wait_for_random_bytes); + +/* + * get_random_bytes_arch() - This function will use the architecture-specific + * hardware random number generator if it is available. + * + * The arch-specific hw RNG will almost certainly be faster than what we can + * do in software, but it is impossible to verify that it is implemented + * securely (as opposed, to, say, the AES encryption of a sequence number using + * a key known by the NSA). So it's useful if we need the speed, but only if + * we're willing to trust the hardware manufacturer not to have put in a back + * door. + * + * @buf: buffer allocated by caller to store the random data in + * @nbytes: length of outbuf + * + * Return: number of bytes filled in. + */ +int __must_check get_random_bytes_arch(void *buf, int nbytes) +{ + u8 *p = buf; + + while (nbytes) { + unsigned long v; + int chunk = min_t(int, nbytes, sizeof(unsigned long)); + + if (!arch_get_random_long(&v)) + break; + + memcpy(p, &v, chunk); + p += chunk; + nbytes -= chunk; + } + + if (nbytes) + lrng_drng_get_atomic((u8 *)p, (u32)nbytes); + + return nbytes; +} +EXPORT_SYMBOL(get_random_bytes_arch); + +/* + * Returns whether or not the LRNG has been seeded. + * + * Returns: true if the urandom pool has been seeded. + * false if the urandom pool has not been seeded. + */ +bool rng_is_initialized(void) +{ + return lrng_state_operational(); +} +EXPORT_SYMBOL(rng_is_initialized); + +/************************ LRNG user output interfaces *************************/ + +static ssize_t lrng_read_common(char __user *buf, size_t nbytes) +{ + ssize_t ret = 0; + u8 tmpbuf[LRNG_DRNG_BLOCKSIZE] __aligned(LRNG_KCAPI_ALIGN); + u8 *tmp_large = NULL, *tmp = tmpbuf; + u32 tmplen = sizeof(tmpbuf); + + if (nbytes == 0) + return 0; + + /* + * Satisfy large read requests -- as the common case are smaller + * request sizes, such as 16 or 32 bytes, avoid a kmalloc overhead for + * those by using the stack variable of tmpbuf. + */ + if (!CONFIG_BASE_SMALL && (nbytes > sizeof(tmpbuf))) { + tmplen = min_t(u32, nbytes, LRNG_DRNG_MAX_REQSIZE); + tmp_large = kmalloc(tmplen + LRNG_KCAPI_ALIGN, GFP_KERNEL); + if (!tmp_large) + tmplen = sizeof(tmpbuf); + else + tmp = PTR_ALIGN(tmp_large, LRNG_KCAPI_ALIGN); + } + + while (nbytes) { + u32 todo = min_t(u32, nbytes, tmplen); + int rc = 0; + + /* Reschedule if we received a large request. */ + if ((tmp_large) && need_resched()) { + if (signal_pending(current)) { + if (ret == 0) + ret = -ERESTARTSYS; + break; + } + schedule(); + } + + rc = lrng_drng_get_sleep(tmp, todo); + if (rc <= 0) { + if (rc < 0) + ret = rc; + break; + } + if (copy_to_user(buf, tmp, rc)) { + ret = -EFAULT; + break; + } + + nbytes -= rc; + buf += rc; + ret += rc; + } + + /* Wipe data just returned from memory */ + if (tmp_large) + kfree_sensitive(tmp_large); + else + memzero_explicit(tmpbuf, sizeof(tmpbuf)); + + return ret; +} + +static ssize_t +lrng_read_common_block(int nonblock, char __user *buf, size_t nbytes) +{ + if (nbytes == 0) + return 0; + + if (unlikely(!lrng_state_operational())) { + int ret; + + if (nonblock) + return -EAGAIN; + + ret = wait_event_interruptible(lrng_init_wait, + lrng_state_operational()); + if (unlikely(ret)) + return ret; + } + + return lrng_read_common(buf, nbytes); +} + +static ssize_t lrng_drng_read_block(struct file *file, char __user *buf, + size_t nbytes, loff_t *ppos) +{ + return lrng_read_common_block(file->f_flags & O_NONBLOCK, buf, nbytes); +} + +static __poll_t lrng_random_poll(struct file *file, poll_table *wait) +{ + __poll_t mask; + + poll_wait(file, &lrng_init_wait, wait); + poll_wait(file, &lrng_write_wait, wait); + mask = 0; + if (lrng_state_operational()) + mask |= EPOLLIN | EPOLLRDNORM; + if (lrng_need_entropy() || + lrng_state_exseed_allow(lrng_noise_source_user)) { + lrng_state_exseed_set(lrng_noise_source_user, false); + mask |= EPOLLOUT | EPOLLWRNORM; + } + return mask; +} + +static ssize_t lrng_drng_write_common(const char __user *buffer, size_t count, + u32 entropy_bits) +{ + ssize_t ret = 0; + u8 buf[64] __aligned(LRNG_KCAPI_ALIGN); + const char __user *p = buffer; + u32 orig_entropy_bits = entropy_bits; + + if (!lrng_get_available()) + return -EAGAIN; + + count = min_t(size_t, count, INT_MAX); + while (count > 0) { + size_t bytes = min_t(size_t, count, sizeof(buf)); + u32 ent = min_t(u32, bytes<<3, entropy_bits); + + if (copy_from_user(&buf, p, bytes)) + return -EFAULT; + /* Inject data into entropy pool */ + lrng_pool_insert_aux(buf, bytes, ent); + + count -= bytes; + p += bytes; + ret += bytes; + entropy_bits -= ent; + + cond_resched(); + } + + /* Force reseed of DRNG during next data request. */ + if (!orig_entropy_bits) + lrng_drng_force_reseed(); + + return ret; +} + +static ssize_t lrng_drng_read(struct file *file, char __user *buf, + size_t nbytes, loff_t *ppos) +{ + if (!lrng_state_min_seeded()) + pr_notice_ratelimited("%s - use of insufficiently seeded DRNG (%zu bytes read)\n", + current->comm, nbytes); + else if (!lrng_state_operational()) + pr_debug_ratelimited("%s - use of not fully seeded DRNG (%zu bytes read)\n", + current->comm, nbytes); + + return lrng_read_common(buf, nbytes); +} + +static ssize_t lrng_drng_write(struct file *file, const char __user *buffer, + size_t count, loff_t *ppos) +{ + return lrng_drng_write_common(buffer, count, 0); +} + +static long lrng_ioctl(struct file *f, unsigned int cmd, unsigned long arg) +{ + u32 digestsize_bits; + int size, ent_count_bits; + int __user *p = (int __user *)arg; + + switch (cmd) { + case RNDGETENTCNT: + ent_count_bits = lrng_avail_entropy(); + if (put_user(ent_count_bits, p)) + return -EFAULT; + return 0; + case RNDADDTOENTCNT: + if (!capable(CAP_SYS_ADMIN)) + return -EPERM; + if (get_user(ent_count_bits, p)) + return -EFAULT; + ent_count_bits = (int)lrng_avail_aux_entropy() + ent_count_bits; + if (ent_count_bits < 0) + ent_count_bits = 0; + digestsize_bits = lrng_get_digestsize(); + if (ent_count_bits > digestsize_bits) + ent_count_bits = digestsize_bits; + lrng_pool_set_entropy(ent_count_bits); + return 0; + case RNDADDENTROPY: + if (!capable(CAP_SYS_ADMIN)) + return -EPERM; + if (get_user(ent_count_bits, p++)) + return -EFAULT; + if (ent_count_bits < 0) + return -EINVAL; + if (get_user(size, p++)) + return -EFAULT; + if (size < 0) + return -EINVAL; + /* there cannot be more entropy than data */ + ent_count_bits = min(ent_count_bits, size<<3); + return lrng_drng_write_common((const char __user *)p, size, + ent_count_bits); + case RNDZAPENTCNT: + case RNDCLEARPOOL: + /* Clear the entropy pool counter. */ + if (!capable(CAP_SYS_ADMIN)) + return -EPERM; + lrng_pool_set_entropy(0); + return 0; + case RNDRESEEDCRNG: + /* + * We leave the capability check here since it is present + * in the upstream's RNG implementation. Yet, user space + * can trigger a reseed as easy as writing into /dev/random + * or /dev/urandom where no privilege is needed. + */ + if (!capable(CAP_SYS_ADMIN)) + return -EPERM; + /* Force a reseed of all DRNGs */ + lrng_drng_force_reseed(); + return 0; + default: + return -EINVAL; + } +} + +static int lrng_fasync(int fd, struct file *filp, int on) +{ + return fasync_helper(fd, filp, on, &fasync); +} + +const struct file_operations random_fops = { + .read = lrng_drng_read_block, + .write = lrng_drng_write, + .poll = lrng_random_poll, + .unlocked_ioctl = lrng_ioctl, + .compat_ioctl = compat_ptr_ioctl, + .fasync = lrng_fasync, + .llseek = noop_llseek, +}; + +const struct file_operations urandom_fops = { + .read = lrng_drng_read, + .write = lrng_drng_write, + .unlocked_ioctl = lrng_ioctl, + .compat_ioctl = compat_ptr_ioctl, + .fasync = lrng_fasync, + .llseek = noop_llseek, +}; + +SYSCALL_DEFINE3(getrandom, char __user *, buf, size_t, count, + unsigned int, flags) +{ + if (flags & ~(GRND_NONBLOCK|GRND_RANDOM|GRND_INSECURE)) + return -EINVAL; + + /* + * Requesting insecure and blocking randomness at the same time makes + * no sense. + */ + if ((flags & + (GRND_INSECURE|GRND_RANDOM)) == (GRND_INSECURE|GRND_RANDOM)) + return -EINVAL; + + if (count > INT_MAX) + count = INT_MAX; + + if (flags & GRND_INSECURE) + return lrng_drng_read(NULL, buf, count, NULL); + + return lrng_read_common_block(flags & GRND_NONBLOCK, buf, count); +} diff -urN linux-5.15/drivers/char/lrng/lrng_internal.h linux-5.15-lrng/drivers/char/lrng/lrng_internal.h --- linux-5.15/drivers/char/lrng/lrng_internal.h 1970-01-01 10:00:00.000000000 +1000 +++ linux-5.15-lrng/drivers/char/lrng/lrng_internal.h 2021-11-29 12:36:52.113279174 +1100 @@ -0,0 +1,485 @@ +/* SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause */ +/* + * Copyright (C) 2018 - 2021, Stephan Mueller + */ + +#ifndef _LRNG_INTERNAL_H +#define _LRNG_INTERNAL_H + +#include +#include +#include +#include +#include +#include +#include +#include + +/*************************** General LRNG parameter ***************************/ + +/* Security strength of LRNG -- this must match DRNG security strength */ +#define LRNG_DRNG_SECURITY_STRENGTH_BYTES 32 +#define LRNG_DRNG_SECURITY_STRENGTH_BITS (LRNG_DRNG_SECURITY_STRENGTH_BYTES * 8) +#define LRNG_DRNG_BLOCKSIZE 64 /* Maximum of DRNG block sizes */ +#define LRNG_DRNG_INIT_SEED_SIZE_BITS (LRNG_DRNG_SECURITY_STRENGTH_BITS + \ + CONFIG_LRNG_SEED_BUFFER_INIT_ADD_BITS) +#define LRNG_DRNG_INIT_SEED_SIZE_BYTES (LRNG_DRNG_INIT_SEED_SIZE_BITS >> 3) + +/* + * SP800-90A defines a maximum request size of 1<<16 bytes. The given value is + * considered a safer margin. + * + * This value is allowed to be changed. + */ +#define LRNG_DRNG_MAX_REQSIZE (1<<12) + +/* + * SP800-90A defines a maximum number of requests between reseeds of 2^48. + * The given value is considered a much safer margin, balancing requests for + * frequent reseeds with the need to conserve entropy. This value MUST NOT be + * larger than INT_MAX because it is used in an atomic_t. + * + * This value is allowed to be changed. + */ +#define LRNG_DRNG_RESEED_THRESH (1<<20) + +/* + * Maximum DRNG generation operations without reseed having full entropy + * This value defines the absolute maximum value of DRNG generation operations + * without a reseed holding full entropy. LRNG_DRNG_RESEED_THRESH is the + * threshold when a new reseed is attempted. But it is possible that this fails + * to deliver full entropy. In this case the DRNG will continue to provide data + * even though it was not reseeded with full entropy. To avoid in the extreme + * case that no reseed is performed for too long, this threshold is enforced. + * If that absolute low value is reached, the LRNG is marked as not operational. + * + * This value is allowed to be changed. + */ +#define LRNG_DRNG_MAX_WITHOUT_RESEED (1<<30) + +/* + * Min required seed entropy is 128 bits covering the minimum entropy + * requirement of SP800-131A and the German BSI's TR02102. + * + * This value is allowed to be changed. + */ +#define LRNG_FULL_SEED_ENTROPY_BITS LRNG_DRNG_SECURITY_STRENGTH_BITS +#define LRNG_MIN_SEED_ENTROPY_BITS 128 +#define LRNG_INIT_ENTROPY_BITS 32 + +/* + * Wakeup value + * + * This value is allowed to be changed but must not be larger than the + * digest size of the hash operation used update the aux_pool. + */ +#ifdef CONFIG_CRYPTO_LIB_SHA256 +# define LRNG_ATOMIC_DIGEST_SIZE SHA256_DIGEST_SIZE +#else +# define LRNG_ATOMIC_DIGEST_SIZE SHA1_DIGEST_SIZE +#endif +#define LRNG_WRITE_WAKEUP_ENTROPY LRNG_ATOMIC_DIGEST_SIZE + +/* + * If the switching support is configured, we must provide support up to + * the largest digest size. Without switching support, we know it is only + * the built-in digest size. + */ +#ifdef CONFIG_LRNG_DRNG_SWITCH +# define LRNG_MAX_DIGESTSIZE 64 +#else +# define LRNG_MAX_DIGESTSIZE LRNG_ATOMIC_DIGEST_SIZE +#endif + +/* + * Oversampling factor of IRQ events to obtain + * LRNG_DRNG_SECURITY_STRENGTH_BYTES. This factor is used when a + * high-resolution time stamp is not available. In this case, jiffies and + * register contents are used to fill the entropy pool. These noise sources + * are much less entropic than the high-resolution timer. The entropy content + * is the entropy content assumed with LRNG_IRQ_ENTROPY_BITS divided by + * LRNG_IRQ_OVERSAMPLING_FACTOR. + * + * This value is allowed to be changed. + */ +#define LRNG_IRQ_OVERSAMPLING_FACTOR 10 + +/* Alignmask that is intended to be identical to CRYPTO_MINALIGN */ +#define LRNG_KCAPI_ALIGN ARCH_KMALLOC_MINALIGN + +/* + * This definition must provide a buffer that is equal to SHASH_DESC_ON_STACK + * as it will be casted into a struct shash_desc. + */ +#define LRNG_POOL_SIZE (sizeof(struct shash_desc) + HASH_MAX_DESCSIZE) + +/************************ Default DRNG implementation *************************/ + +extern struct chacha20_state chacha20; +extern const struct lrng_crypto_cb lrng_cc20_crypto_cb; +void lrng_cc20_init_state(struct chacha20_state *state); + +/********************************** /proc *************************************/ + +#ifdef CONFIG_SYSCTL +void lrng_pool_inc_numa_node(void); +void lrng_proc_update_max_write_thresh(u32 new_digestsize); +#else +static inline void lrng_pool_inc_numa_node(void) { } +static inline void lrng_proc_update_max_write_thresh(u32 new_digestsize) { } +#endif + +/****************************** LRNG interfaces *******************************/ + +extern u32 lrng_write_wakeup_bits; +extern int lrng_drng_reseed_max_time; + +void lrng_writer_wakeup(void); +void lrng_init_wakeup(void); +void lrng_debug_report_seedlevel(const char *name); +void lrng_process_ready_list(void); + +/* External interface to use of the switchable DRBG inside the kernel */ +void get_random_bytes_full(void *buf, int nbytes); + +/************************* Jitter RNG Entropy Source **************************/ + +#ifdef CONFIG_LRNG_JENT +u32 lrng_get_jent(u8 *outbuf, u32 requested_bits); +u32 lrng_jent_entropylevel(u32 requested_bits); +void lrng_jent_es_state(unsigned char *buf, size_t buflen); +#else /* CONFIG_LRNG_JENT */ +static inline u32 lrng_get_jent(u8 *outbuf, u32 requested_bits) { return 0; } +static inline u32 lrng_jent_entropylevel(u32 requested_bits) { return 0; } +static inline void lrng_jent_es_state(unsigned char *buf, size_t buflen) { } +#endif /* CONFIG_LRNG_JENT */ + +/************************** CPU-based Entropy Source **************************/ + +static inline u32 lrng_fast_noise_entropylevel(u32 ent_bits, u32 requested_bits) +{ + /* Obtain entropy statement */ + ent_bits = ent_bits * requested_bits / LRNG_DRNG_SECURITY_STRENGTH_BITS; + /* Cap entropy to buffer size in bits */ + ent_bits = min_t(u32, ent_bits, requested_bits); + return ent_bits; +} + +#ifdef CONFIG_LRNG_CPU +u32 lrng_get_arch(u8 *outbuf, u32 requested_bits); +u32 lrng_archrandom_entropylevel(u32 requested_bits); +void lrng_arch_es_state(unsigned char *buf, size_t buflen); +#else /* CONFIG_LRNG_CPU */ +static inline u32 lrng_get_arch(u8 *outbuf, u32 requested_bits) { return 0; } +static inline u32 lrng_archrandom_entropylevel(u32 requested_bits) { return 0; } +static inline void lrng_arch_es_state(unsigned char *buf, size_t buflen) { } +#endif /* CONFIG_LRNG_CPU */ + +/************************** Interrupt Entropy Source **************************/ + +#ifdef CONFIG_LRNG_IRQ +void lrng_pcpu_reset(void); +u32 lrng_pcpu_avail_pool_size(void); +u32 lrng_pcpu_avail_entropy(void); +int lrng_pcpu_switch_hash(int node, + const struct lrng_crypto_cb *new_cb, void *new_hash, + const struct lrng_crypto_cb *old_cb); +u32 lrng_pcpu_pool_hash(u8 *outbuf, u32 requested_bits, bool fully_seeded); +void lrng_pcpu_array_add_u32(u32 data); +u32 lrng_gcd_analyze(u32 *history, size_t nelem); +void lrng_irq_es_state(unsigned char *buf, size_t buflen); +#else /* CONFIG_LRNG_IRQ */ +static inline void lrng_pcpu_reset(void) { } +static inline u32 lrng_pcpu_avail_pool_size(void) { return 0; } +static inline u32 lrng_pcpu_avail_entropy(void) { return 0; } +static inline int lrng_pcpu_switch_hash(int node, + const struct lrng_crypto_cb *new_cb, void *new_hash, + const struct lrng_crypto_cb *old_cb) +{ + return 0; +} +static inline u32 lrng_pcpu_pool_hash(u8 *outbuf, u32 requested_bits, + bool fully_seeded) +{ + return 0; +} +static inline void lrng_pcpu_array_add_u32(u32 data) { } +static inline void lrng_irq_es_state(unsigned char *buf, size_t buflen) { } +#endif /* CONFIG_LRNG_IRQ */ + +/****************************** DRNG processing *******************************/ + +/* DRNG state handle */ +struct lrng_drng { + void *drng; /* DRNG handle */ + void *hash; /* Hash handle */ + const struct lrng_crypto_cb *crypto_cb; /* Crypto callbacks */ + atomic_t requests; /* Number of DRNG requests */ + atomic_t requests_since_fully_seeded; /* Number DRNG requests since + last fully seeded */ + unsigned long last_seeded; /* Last time it was seeded */ + bool fully_seeded; /* Is DRNG fully seeded? */ + bool force_reseed; /* Force a reseed */ + + /* Lock write operations on DRNG state, DRNG replacement of crypto_cb */ + struct mutex lock; + spinlock_t spin_lock; + /* Lock *hash replacement - always take before DRNG lock */ + rwlock_t hash_lock; +}; + +extern struct mutex lrng_crypto_cb_update; + +struct lrng_drng *lrng_drng_init_instance(void); +struct lrng_drng *lrng_drng_atomic_instance(void); + +static __always_inline bool lrng_drng_is_atomic(struct lrng_drng *drng) +{ + return (drng->drng == lrng_drng_atomic_instance()->drng); +} + +/* Lock the DRNG */ +static __always_inline void lrng_drng_lock(struct lrng_drng *drng, + unsigned long *flags) + __acquires(&drng->spin_lock) +{ + /* Use spin lock in case the atomic DRNG context is used */ + if (lrng_drng_is_atomic(drng)) { + spin_lock_irqsave(&drng->spin_lock, *flags); + + /* + * In case a lock transition happened while we were spinning, + * catch this case and use the new lock type. + */ + if (!lrng_drng_is_atomic(drng)) { + spin_unlock_irqrestore(&drng->spin_lock, *flags); + __acquire(&drng->spin_lock); + mutex_lock(&drng->lock); + } + } else { + __acquire(&drng->spin_lock); + mutex_lock(&drng->lock); + } +} + +/* Unlock the DRNG */ +static __always_inline void lrng_drng_unlock(struct lrng_drng *drng, + unsigned long *flags) + __releases(&drng->spin_lock) +{ + if (lrng_drng_is_atomic(drng)) { + spin_unlock_irqrestore(&drng->spin_lock, *flags); + } else { + mutex_unlock(&drng->lock); + __release(&drng->spin_lock); + } +} + +void lrng_reset(void); +void lrng_drngs_init_cc20(bool force_seed); +bool lrng_sp80090c_compliant(void); + +static inline u32 lrng_compress_osr(void) +{ + return lrng_sp80090c_compliant() ? CONFIG_LRNG_OVERSAMPLE_ES_BITS : 0; +} + +static inline u32 lrng_reduce_by_osr(u32 entropy_bits) +{ + u32 osr_bits = lrng_compress_osr(); + return (entropy_bits >= osr_bits) ? (entropy_bits - osr_bits) : 0; +} + +bool lrng_get_available(void); +void lrng_set_available(void); +void lrng_drng_reset(struct lrng_drng *drng); +int lrng_drng_get_atomic(u8 *outbuf, u32 outbuflen); +int lrng_drng_get_sleep(u8 *outbuf, u32 outbuflen); +void lrng_drng_force_reseed(void); +void lrng_drng_seed_work(struct work_struct *dummy); + +#ifdef CONFIG_NUMA +struct lrng_drng **lrng_drng_instances(void); +void lrng_drngs_numa_alloc(void); +#else /* CONFIG_NUMA */ +static inline struct lrng_drng **lrng_drng_instances(void) { return NULL; } +static inline void lrng_drngs_numa_alloc(void) { return; } +#endif /* CONFIG_NUMA */ + +/************************* Entropy sources management *************************/ + +enum lrng_external_noise_source { + lrng_noise_source_hw, + lrng_noise_source_user +}; + +void lrng_set_entropy_thresh(u32 new); +u32 lrng_avail_entropy(void); +void lrng_reset_state(void); + +bool lrng_state_exseed_allow(enum lrng_external_noise_source source); +void lrng_state_exseed_set(enum lrng_external_noise_source source, bool type); +bool lrng_state_min_seeded(void); +bool lrng_state_fully_seeded(void); +bool lrng_state_operational(void); + +int lrng_pool_trylock(void); +void lrng_pool_unlock(void); +void lrng_pool_all_numa_nodes_seeded(bool set); +void lrng_pool_add_entropy(void); + +struct entropy_buf { + u8 a[LRNG_DRNG_INIT_SEED_SIZE_BYTES]; + u8 b[LRNG_DRNG_INIT_SEED_SIZE_BYTES]; + u8 c[LRNG_DRNG_INIT_SEED_SIZE_BYTES]; + u8 d[LRNG_DRNG_INIT_SEED_SIZE_BYTES]; + u32 now, a_bits, b_bits, c_bits, d_bits; +}; + +bool lrng_fully_seeded(bool fully_seeded, struct entropy_buf *eb); +void lrng_unset_fully_seeded(struct lrng_drng *drng); +void lrng_fill_seed_buffer(struct entropy_buf *entropy_buf, u32 requested_bits); +void lrng_init_ops(struct entropy_buf *eb); + +/*********************** Auxiliary Pool Entropy Source ************************/ + +u32 lrng_avail_aux_entropy(void); +void lrng_aux_es_state(unsigned char *buf, size_t buflen); +u32 lrng_get_digestsize(void); +void lrng_pool_set_entropy(u32 entropy_bits); +int lrng_aux_switch_hash(const struct lrng_crypto_cb *new_cb, void *new_hash, + const struct lrng_crypto_cb *old_cb); +int lrng_pool_insert_aux(const u8 *inbuf, u32 inbuflen, u32 entropy_bits); +void lrng_get_backtrack_aux(struct entropy_buf *entropy_buf, + u32 requested_bits); + +/* Obtain the security strength of the LRNG in bits */ +static inline u32 lrng_security_strength(void) +{ + /* + * We use a hash to read the entropy in the entropy pool. According to + * SP800-90B table 1, the entropy can be at most the digest size. + * Considering this together with the last sentence in section 3.1.5.1.2 + * the security strength of a (approved) hash is equal to its output + * size. On the other hand the entropy cannot be larger than the + * security strength of the used DRBG. + */ + return min_t(u32, LRNG_FULL_SEED_ENTROPY_BITS, lrng_get_digestsize()); +} + +static inline u32 lrng_get_seed_entropy_osr(bool fully_seeded) +{ + u32 requested_bits = lrng_security_strength(); + + /* Apply oversampling during initialization according to SP800-90C */ + if (lrng_sp80090c_compliant() && !fully_seeded) + requested_bits += CONFIG_LRNG_SEED_BUFFER_INIT_ADD_BITS; + return requested_bits; +} + +/************************** Health Test linking code **************************/ + +enum lrng_health_res { + lrng_health_pass, /* Health test passes on time stamp */ + lrng_health_fail_use, /* Time stamp unhealthy, but mix in */ + lrng_health_fail_drop /* Time stamp unhealthy, drop it */ +}; + +#ifdef CONFIG_LRNG_HEALTH_TESTS +bool lrng_sp80090b_startup_complete(void); +bool lrng_sp80090b_compliant(void); + +enum lrng_health_res lrng_health_test(u32 now_time); +void lrng_health_disable(void); + +#else /* CONFIG_LRNG_HEALTH_TESTS */ +static inline bool lrng_sp80090b_startup_complete(void) { return true; } +static inline bool lrng_sp80090b_compliant(void) { return false; } + +static inline enum lrng_health_res +lrng_health_test(u32 now_time) { return lrng_health_pass; } +static inline void lrng_health_disable(void) { } +#endif /* CONFIG_LRNG_HEALTH_TESTS */ + +/****************************** Helper code ***********************************/ + +static inline u32 atomic_read_u32(atomic_t *v) +{ + return (u32)atomic_read(v); +} + +/******************** Crypto Primitive Switching Support **********************/ + +#ifdef CONFIG_LRNG_DRNG_SWITCH +static inline void lrng_hash_lock(struct lrng_drng *drng, unsigned long *flags) +{ + read_lock_irqsave(&drng->hash_lock, *flags); +} + +static inline void lrng_hash_unlock(struct lrng_drng *drng, unsigned long flags) +{ + read_unlock_irqrestore(&drng->hash_lock, flags); +} +#else /* CONFIG_LRNG_DRNG_SWITCH */ +static inline void lrng_hash_lock(struct lrng_drng *drng, unsigned long *flags) +{ } + +static inline void lrng_hash_unlock(struct lrng_drng *drng, unsigned long flags) +{ } +#endif /* CONFIG_LRNG_DRNG_SWITCH */ + +/*************************** Auxiliary functions ******************************/ + +void invalidate_batched_entropy(void); + +/***************************** Testing code ***********************************/ + +#ifdef CONFIG_LRNG_RAW_HIRES_ENTROPY +bool lrng_raw_hires_entropy_store(u32 value); +#else /* CONFIG_LRNG_RAW_HIRES_ENTROPY */ +static inline bool lrng_raw_hires_entropy_store(u32 value) { return false; } +#endif /* CONFIG_LRNG_RAW_HIRES_ENTROPY */ + +#ifdef CONFIG_LRNG_RAW_JIFFIES_ENTROPY +bool lrng_raw_jiffies_entropy_store(u32 value); +#else /* CONFIG_LRNG_RAW_JIFFIES_ENTROPY */ +static inline bool lrng_raw_jiffies_entropy_store(u32 value) { return false; } +#endif /* CONFIG_LRNG_RAW_JIFFIES_ENTROPY */ + +#ifdef CONFIG_LRNG_RAW_IRQ_ENTROPY +bool lrng_raw_irq_entropy_store(u32 value); +#else /* CONFIG_LRNG_RAW_IRQ_ENTROPY */ +static inline bool lrng_raw_irq_entropy_store(u32 value) { return false; } +#endif /* CONFIG_LRNG_RAW_IRQ_ENTROPY */ + +#ifdef CONFIG_LRNG_RAW_IRQFLAGS_ENTROPY +bool lrng_raw_irqflags_entropy_store(u32 value); +#else /* CONFIG_LRNG_RAW_IRQFLAGS_ENTROPY */ +static inline bool lrng_raw_irqflags_entropy_store(u32 value) { return false; } +#endif /* CONFIG_LRNG_RAW_IRQFLAGS_ENTROPY */ + +#ifdef CONFIG_LRNG_RAW_RETIP_ENTROPY +bool lrng_raw_retip_entropy_store(u32 value); +#else /* CONFIG_LRNG_RAW_RETIP_ENTROPY */ +static inline bool lrng_raw_retip_entropy_store(u32 value) { return false; } +#endif /* CONFIG_LRNG_RAW_RETIP_ENTROPY */ + +#ifdef CONFIG_LRNG_RAW_REGS_ENTROPY +bool lrng_raw_regs_entropy_store(u32 value); +#else /* CONFIG_LRNG_RAW_REGS_ENTROPY */ +static inline bool lrng_raw_regs_entropy_store(u32 value) { return false; } +#endif /* CONFIG_LRNG_RAW_REGS_ENTROPY */ + +#ifdef CONFIG_LRNG_RAW_ARRAY +bool lrng_raw_array_entropy_store(u32 value); +#else /* CONFIG_LRNG_RAW_ARRAY */ +static inline bool lrng_raw_array_entropy_store(u32 value) { return false; } +#endif /* CONFIG_LRNG_RAW_ARRAY */ + +#ifdef CONFIG_LRNG_IRQ_PERF +bool lrng_perf_time(u32 start); +#else /* CONFIG_LRNG_IRQ_PERF */ +static inline bool lrng_perf_time(u32 start) { return false; } +#endif /*CONFIG_LRNG_IRQ_PERF */ + +#endif /* _LRNG_INTERNAL_H */ diff -urN linux-5.15/drivers/char/lrng/lrng_kcapi.c linux-5.15-lrng/drivers/char/lrng/lrng_kcapi.c --- linux-5.15/drivers/char/lrng/lrng_kcapi.c 1970-01-01 10:00:00.000000000 +1000 +++ linux-5.15-lrng/drivers/char/lrng/lrng_kcapi.c 2021-11-29 12:37:45.153278971 +1100 @@ -0,0 +1,227 @@ +// SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause +/* + * Backend for the LRNG providing the cryptographic primitives using the + * kernel crypto API. + * + * Copyright (C) 2018 - 2021, Stephan Mueller + */ + +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt + +#include +#include +#include +#include +#include + +#include "lrng_kcapi_hash.h" + +static char *drng_name = NULL; +module_param(drng_name, charp, 0444); +MODULE_PARM_DESC(drng_name, "Kernel crypto API name of DRNG"); + +static char *pool_hash = "sha512"; +module_param(pool_hash, charp, 0444); +MODULE_PARM_DESC(pool_hash, + "Kernel crypto API name of hash or keyed message digest to read the entropy pool"); + +static char *seed_hash = NULL; +module_param(seed_hash, charp, 0444); +MODULE_PARM_DESC(seed_hash, + "Kernel crypto API name of hash with output size equal to seedsize of DRNG to bring seed string to the size required by the DRNG"); + +struct lrng_drng_info { + struct crypto_rng *kcapi_rng; + void *lrng_hash; +}; + +static void *lrng_kcapi_drng_hash_alloc(void) +{ + return lrng_kcapi_hash_alloc(pool_hash); +} + +static int lrng_kcapi_drng_seed_helper(void *drng, const u8 *inbuf, + u32 inbuflen) +{ + SHASH_DESC_ON_STACK(shash, NULL); + struct lrng_drng_info *lrng_drng_info = (struct lrng_drng_info *)drng; + struct crypto_rng *kcapi_rng = lrng_drng_info->kcapi_rng; + void *hash = lrng_drng_info->lrng_hash; + u32 digestsize = lrng_kcapi_hash_digestsize(hash); + u8 digest[64] __aligned(8); + int ret; + + if (!hash) + return crypto_rng_reset(kcapi_rng, inbuf, inbuflen); + + BUG_ON(digestsize > sizeof(digest)); + + ret = lrng_kcapi_hash_init(shash, hash) ?: + lrng_kcapi_hash_update(shash, inbuf, inbuflen) ?: + lrng_kcapi_hash_final(shash, digest); + lrng_kcapi_hash_zero(shash); + if (ret) + return ret; + + ret = crypto_rng_reset(kcapi_rng, digest, digestsize); + if (ret) + return ret; + + memzero_explicit(digest, digestsize); + return 0; +} + +static int lrng_kcapi_drng_generate_helper(void *drng, u8 *outbuf, + u32 outbuflen) +{ + struct lrng_drng_info *lrng_drng_info = (struct lrng_drng_info *)drng; + struct crypto_rng *kcapi_rng = lrng_drng_info->kcapi_rng; + int ret = crypto_rng_get_bytes(kcapi_rng, outbuf, outbuflen); + + if (ret < 0) + return ret; + + return outbuflen; +} + +static void *lrng_kcapi_drng_alloc(u32 sec_strength) +{ + struct lrng_drng_info *lrng_drng_info; + struct crypto_rng *kcapi_rng; + int seedsize; + void *ret = ERR_PTR(-ENOMEM); + + if (!drng_name) { + pr_err("DRNG name missing\n"); + return ERR_PTR(-EINVAL); + } + + if (!memcmp(drng_name, "drbg", 4) || + !memcmp(drng_name, "stdrng", 6) || + !memcmp(drng_name, "jitterentropy_rng", 17)) { + pr_err("Refusing to load the requested random number generator\n"); + return ERR_PTR(-EINVAL); + } + + lrng_drng_info = kmalloc(sizeof(*lrng_drng_info), GFP_KERNEL); + if (!lrng_drng_info) + return ERR_PTR(-ENOMEM); + + kcapi_rng = crypto_alloc_rng(drng_name, 0, 0); + if (IS_ERR(kcapi_rng)) { + pr_err("DRNG %s cannot be allocated\n", drng_name); + ret = ERR_CAST(kcapi_rng); + goto free; + } + lrng_drng_info->kcapi_rng = kcapi_rng; + + seedsize = crypto_rng_seedsize(kcapi_rng); + + if (sec_strength > seedsize) + pr_info("Seedsize DRNG (%u bits) lower than security strength of LRNG noise source (%u bits)\n", + crypto_rng_seedsize(kcapi_rng) * 8, sec_strength * 8); + + if (seedsize) { + void *lrng_hash; + + if (!seed_hash) { + switch (seedsize) { + case 32: + seed_hash = "sha256"; + break; + case 48: + seed_hash = "sha384"; + break; + case 64: + seed_hash = "sha512"; + break; + default: + pr_err("Seed size %d cannot be processed\n", + seedsize); + goto dealloc; + } + } + + lrng_hash = lrng_kcapi_hash_alloc(seed_hash); + if (IS_ERR(lrng_hash)) { + ret = ERR_CAST(lrng_hash); + goto dealloc; + } + + if (seedsize != lrng_kcapi_hash_digestsize(lrng_hash)) { + pr_err("Seed hash output size not equal to DRNG seed size\n"); + lrng_kcapi_hash_dealloc(lrng_hash); + ret = ERR_PTR(-EINVAL); + goto dealloc; + } + + lrng_drng_info->lrng_hash = lrng_hash; + + pr_info("Seed hash %s allocated\n", seed_hash); + } else { + lrng_drng_info->lrng_hash = NULL; + } + + pr_info("Kernel crypto API DRNG %s allocated\n", drng_name); + + return lrng_drng_info; + +dealloc: + crypto_free_rng(kcapi_rng); +free: + kfree(lrng_drng_info); + return ret; +} + +static void lrng_kcapi_drng_dealloc(void *drng) +{ + struct lrng_drng_info *lrng_drng_info = (struct lrng_drng_info *)drng; + struct crypto_rng *kcapi_rng = lrng_drng_info->kcapi_rng; + + crypto_free_rng(kcapi_rng); + if (lrng_drng_info->lrng_hash) + lrng_kcapi_hash_dealloc(lrng_drng_info->lrng_hash); + kfree(lrng_drng_info); + pr_info("DRNG %s deallocated\n", drng_name); +} + +static const char *lrng_kcapi_drng_name(void) +{ + return drng_name; +} + +static const char *lrng_kcapi_pool_hash(void) +{ + return pool_hash; +} + +static const struct lrng_crypto_cb lrng_kcapi_crypto_cb = { + .lrng_drng_name = lrng_kcapi_drng_name, + .lrng_hash_name = lrng_kcapi_pool_hash, + .lrng_drng_alloc = lrng_kcapi_drng_alloc, + .lrng_drng_dealloc = lrng_kcapi_drng_dealloc, + .lrng_drng_seed_helper = lrng_kcapi_drng_seed_helper, + .lrng_drng_generate_helper = lrng_kcapi_drng_generate_helper, + .lrng_hash_alloc = lrng_kcapi_drng_hash_alloc, + .lrng_hash_dealloc = lrng_kcapi_hash_dealloc, + .lrng_hash_digestsize = lrng_kcapi_hash_digestsize, + .lrng_hash_init = lrng_kcapi_hash_init, + .lrng_hash_update = lrng_kcapi_hash_update, + .lrng_hash_final = lrng_kcapi_hash_final, + .lrng_hash_desc_zero = lrng_kcapi_hash_zero, +}; + +static int __init lrng_kcapi_init(void) +{ + return lrng_set_drng_cb(&lrng_kcapi_crypto_cb); +} +static void __exit lrng_kcapi_exit(void) +{ + lrng_set_drng_cb(NULL); +} + +late_initcall(lrng_kcapi_init); +module_exit(lrng_kcapi_exit); +MODULE_LICENSE("Dual BSD/GPL"); +MODULE_AUTHOR("Stephan Mueller "); +MODULE_DESCRIPTION("Linux Random Number Generator - kernel crypto API DRNG backend"); diff -urN linux-5.15/drivers/char/lrng/lrng_kcapi_hash.c linux-5.15-lrng/drivers/char/lrng/lrng_kcapi_hash.c --- linux-5.15/drivers/char/lrng/lrng_kcapi_hash.c 1970-01-01 10:00:00.000000000 +1000 +++ linux-5.15-lrng/drivers/char/lrng/lrng_kcapi_hash.c 2021-11-29 12:37:24.863279049 +1100 @@ -0,0 +1,103 @@ +// SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause +/* + * Backend for providing the hash primitive using the kernel crypto API. + * + * Copyright (C) 2021, Stephan Mueller + */ + +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt + +#include + +#include "lrng_kcapi_hash.h" + +struct lrng_hash_info { + struct crypto_shash *tfm; +}; + +static inline void _lrng_kcapi_hash_free(struct lrng_hash_info *lrng_hash) +{ + struct crypto_shash *tfm = lrng_hash->tfm; + + crypto_free_shash(tfm); + kfree(lrng_hash); +} + +void *lrng_kcapi_hash_alloc(const char *name) +{ + struct lrng_hash_info *lrng_hash; + struct crypto_shash *tfm; + int ret; + + if (!name) { + pr_err("Hash name missing\n"); + return ERR_PTR(-EINVAL); + } + + tfm = crypto_alloc_shash(name, 0, 0); + if (IS_ERR(tfm)) { + pr_err("could not allocate hash %s\n", name); + return ERR_CAST(tfm); + } + + ret = sizeof(struct lrng_hash_info); + lrng_hash = kmalloc(ret, GFP_KERNEL); + if (!lrng_hash) { + crypto_free_shash(tfm); + return ERR_PTR(-ENOMEM); + } + + lrng_hash->tfm = tfm; + + pr_info("Hash %s allocated\n", name); + + return lrng_hash; +} +EXPORT_SYMBOL(lrng_kcapi_hash_alloc); + +u32 lrng_kcapi_hash_digestsize(void *hash) +{ + struct lrng_hash_info *lrng_hash = (struct lrng_hash_info *)hash; + struct crypto_shash *tfm = lrng_hash->tfm; + + return crypto_shash_digestsize(tfm); +} +EXPORT_SYMBOL(lrng_kcapi_hash_digestsize); + +void lrng_kcapi_hash_dealloc(void *hash) +{ + struct lrng_hash_info *lrng_hash = (struct lrng_hash_info *)hash; + + _lrng_kcapi_hash_free(lrng_hash); + pr_info("Hash deallocated\n"); +} +EXPORT_SYMBOL(lrng_kcapi_hash_dealloc); + +int lrng_kcapi_hash_init(struct shash_desc *shash, void *hash) +{ + struct lrng_hash_info *lrng_hash = (struct lrng_hash_info *)hash; + struct crypto_shash *tfm = lrng_hash->tfm; + + shash->tfm = tfm; + return crypto_shash_init(shash); +} +EXPORT_SYMBOL(lrng_kcapi_hash_init); + +int lrng_kcapi_hash_update(struct shash_desc *shash, const u8 *inbuf, + u32 inbuflen) +{ + return crypto_shash_update(shash, inbuf, inbuflen); +} +EXPORT_SYMBOL(lrng_kcapi_hash_update); + +int lrng_kcapi_hash_final(struct shash_desc *shash, u8 *digest) +{ + return crypto_shash_final(shash, digest); +} +EXPORT_SYMBOL(lrng_kcapi_hash_final); + +void lrng_kcapi_hash_zero(struct shash_desc *shash) +{ + shash_desc_zero(shash); +} +EXPORT_SYMBOL(lrng_kcapi_hash_zero); diff -urN linux-5.15/drivers/char/lrng/lrng_kcapi_hash.h linux-5.15-lrng/drivers/char/lrng/lrng_kcapi_hash.h --- linux-5.15/drivers/char/lrng/lrng_kcapi_hash.h 1970-01-01 10:00:00.000000000 +1000 +++ linux-5.15-lrng/drivers/char/lrng/lrng_kcapi_hash.h 2021-11-29 12:37:24.863279049 +1100 @@ -0,0 +1,20 @@ +/* SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause */ +/* + * Copyright (C) 2020 - 2021, Stephan Mueller + */ + +#ifndef _LRNG_KCAPI_HASH_H +#define _LRNG_KCAPI_HASH_H + +#include + +void *lrng_kcapi_hash_alloc(const char *name); +u32 lrng_kcapi_hash_digestsize(void *hash); +void lrng_kcapi_hash_dealloc(void *hash); +int lrng_kcapi_hash_init(struct shash_desc *shash, void *hash); +int lrng_kcapi_hash_update(struct shash_desc *shash, const u8 *inbuf, + u32 inbuflen); +int lrng_kcapi_hash_final(struct shash_desc *shash, u8 *digest); +void lrng_kcapi_hash_zero(struct shash_desc *shash); + +#endif /* _LRNG_KCAPI_HASH_H */ diff -urN linux-5.15/drivers/char/lrng/lrng_numa.c linux-5.15-lrng/drivers/char/lrng/lrng_numa.c --- linux-5.15/drivers/char/lrng/lrng_numa.c 1970-01-01 10:00:00.000000000 +1000 +++ linux-5.15-lrng/drivers/char/lrng/lrng_numa.c 2021-11-29 12:37:08.753279110 +1100 @@ -0,0 +1,122 @@ +// SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause +/* + * LRNG NUMA support + * + * Copyright (C) 2016 - 2021, Stephan Mueller + */ + +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt + +#include +#include + +#include "lrng_internal.h" + +static struct lrng_drng **lrng_drng __read_mostly = NULL; + +struct lrng_drng **lrng_drng_instances(void) +{ + return smp_load_acquire(&lrng_drng); +} + +/* Allocate the data structures for the per-NUMA node DRNGs */ +static void _lrng_drngs_numa_alloc(struct work_struct *work) +{ + struct lrng_drng **drngs; + struct lrng_drng *lrng_drng_init = lrng_drng_init_instance(); + u32 node; + bool init_drng_used = false; + + mutex_lock(&lrng_crypto_cb_update); + + /* per-NUMA-node DRNGs are already present */ + if (lrng_drng) + goto unlock; + + drngs = kcalloc(nr_node_ids, sizeof(void *), GFP_KERNEL|__GFP_NOFAIL); + for_each_online_node(node) { + struct lrng_drng *drng; + + if (!init_drng_used) { + drngs[node] = lrng_drng_init; + init_drng_used = true; + continue; + } + + drng = kmalloc_node(sizeof(struct lrng_drng), + GFP_KERNEL|__GFP_NOFAIL, node); + memset(drng, 0, sizeof(lrng_drng)); + + drng->crypto_cb = lrng_drng_init->crypto_cb; + drng->drng = drng->crypto_cb->lrng_drng_alloc( + LRNG_DRNG_SECURITY_STRENGTH_BYTES); + if (IS_ERR(drng->drng)) { + kfree(drng); + goto err; + } + + drng->hash = drng->crypto_cb->lrng_hash_alloc(); + if (IS_ERR(drng->hash)) { + drng->crypto_cb->lrng_drng_dealloc(drng->drng); + kfree(drng); + goto err; + } + + mutex_init(&drng->lock); + spin_lock_init(&drng->spin_lock); + rwlock_init(&drng->hash_lock); + + /* + * Switch the hash used by the per-CPU pool. + * We do not need to lock the new hash as it is not usable yet + * due to **drngs not yet being initialized. + */ + if (lrng_pcpu_switch_hash(node, drng->crypto_cb, drng->hash, + &lrng_cc20_crypto_cb)) + goto err; + + /* + * No reseeding of NUMA DRNGs from previous DRNGs as this + * would complicate the code. Let it simply reseed. + */ + lrng_drng_reset(drng); + drngs[node] = drng; + + lrng_pool_inc_numa_node(); + pr_info("DRNG and entropy pool read hash for NUMA node %d allocated\n", + node); + } + + /* counterpart to smp_load_acquire in lrng_drng_instances */ + if (!cmpxchg_release(&lrng_drng, NULL, drngs)) { + lrng_pool_all_numa_nodes_seeded(false); + goto unlock; + } + +err: + for_each_online_node(node) { + struct lrng_drng *drng = drngs[node]; + + if (drng == lrng_drng_init) + continue; + + if (drng) { + lrng_pcpu_switch_hash(node, &lrng_cc20_crypto_cb, NULL, + drng->crypto_cb); + drng->crypto_cb->lrng_hash_dealloc(drng->hash); + drng->crypto_cb->lrng_drng_dealloc(drng->drng); + kfree(drng); + } + } + kfree(drngs); + +unlock: + mutex_unlock(&lrng_crypto_cb_update); +} + +static DECLARE_WORK(lrng_drngs_numa_alloc_work, _lrng_drngs_numa_alloc); + +void lrng_drngs_numa_alloc(void) +{ + schedule_work(&lrng_drngs_numa_alloc_work); +} diff -urN linux-5.15/drivers/char/lrng/lrng_proc.c linux-5.15-lrng/drivers/char/lrng/lrng_proc.c --- linux-5.15/drivers/char/lrng/lrng_proc.c 1970-01-01 10:00:00.000000000 +1000 +++ linux-5.15-lrng/drivers/char/lrng/lrng_proc.c 2021-11-29 12:37:03.083279132 +1100 @@ -0,0 +1,199 @@ +// SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause +/* + * LRNG proc and sysctl interfaces + * + * Copyright (C) 2016 - 2021, Stephan Mueller + */ + +#include +#include +#include +#include +#include + +#include "lrng_internal.h" + +/* + * This function is used to return both the bootid UUID, and random + * UUID. The difference is in whether table->data is NULL; if it is, + * then a new UUID is generated and returned to the user. + * + * If the user accesses this via the proc interface, the UUID will be + * returned as an ASCII string in the standard UUID format; if via the + * sysctl system call, as 16 bytes of binary data. + */ +static int lrng_proc_do_uuid(struct ctl_table *table, int write, + void *buffer, size_t *lenp, loff_t *ppos) +{ + struct ctl_table fake_table; + unsigned char buf[64], tmp_uuid[16], *uuid; + + uuid = table->data; + if (!uuid) { + uuid = tmp_uuid; + generate_random_uuid(uuid); + } else { + static DEFINE_SPINLOCK(bootid_spinlock); + + spin_lock(&bootid_spinlock); + if (!uuid[8]) + generate_random_uuid(uuid); + spin_unlock(&bootid_spinlock); + } + + sprintf(buf, "%pU", uuid); + + fake_table.data = buf; + fake_table.maxlen = sizeof(buf); + + return proc_dostring(&fake_table, write, buffer, lenp, ppos); +} + +static int lrng_proc_do_entropy(struct ctl_table *table, int write, + void *buffer, size_t *lenp, loff_t *ppos) +{ + struct ctl_table fake_table; + int entropy_count; + + entropy_count = lrng_avail_entropy(); + + fake_table.data = &entropy_count; + fake_table.maxlen = sizeof(entropy_count); + + return proc_dointvec(&fake_table, write, buffer, lenp, ppos); +} + +static int lrng_proc_do_poolsize(struct ctl_table *table, int write, + void *buffer, size_t *lenp, loff_t *ppos) +{ + struct ctl_table fake_table; + int entropy_count; + + /* LRNG can at most retain entropy in per-CPU pools and aux pool */ + entropy_count = lrng_get_digestsize() + lrng_pcpu_avail_pool_size(); + + fake_table.data = &entropy_count; + fake_table.maxlen = sizeof(entropy_count); + + return proc_dointvec(&fake_table, write, buffer, lenp, ppos); +} + +static int lrng_min_write_thresh; +static int lrng_max_write_thresh = (LRNG_WRITE_WAKEUP_ENTROPY << 3); +static char lrng_sysctl_bootid[16]; +static int lrng_drng_reseed_max_min; + +void lrng_proc_update_max_write_thresh(u32 new_digestsize) +{ + lrng_max_write_thresh = (int)new_digestsize; + mb(); +} + +struct ctl_table random_table[] = { + { + .procname = "poolsize", + .maxlen = sizeof(int), + .mode = 0444, + .proc_handler = lrng_proc_do_poolsize, + }, + { + .procname = "entropy_avail", + .maxlen = sizeof(int), + .mode = 0444, + .proc_handler = lrng_proc_do_entropy, + }, + { + .procname = "write_wakeup_threshold", + .data = &lrng_write_wakeup_bits, + .maxlen = sizeof(int), + .mode = 0644, + .proc_handler = proc_dointvec_minmax, + .extra1 = &lrng_min_write_thresh, + .extra2 = &lrng_max_write_thresh, + }, + { + .procname = "boot_id", + .data = &lrng_sysctl_bootid, + .maxlen = 16, + .mode = 0444, + .proc_handler = lrng_proc_do_uuid, + }, + { + .procname = "uuid", + .maxlen = 16, + .mode = 0444, + .proc_handler = lrng_proc_do_uuid, + }, + { + .procname = "urandom_min_reseed_secs", + .data = &lrng_drng_reseed_max_time, + .maxlen = sizeof(int), + .mode = 0644, + .proc_handler = proc_dointvec, + .extra1 = &lrng_drng_reseed_max_min, + }, + { } +}; + +/* Number of online DRNGs */ +static u32 numa_drngs = 1; + +void lrng_pool_inc_numa_node(void) +{ + numa_drngs++; +} + +static int lrng_proc_type_show(struct seq_file *m, void *v) +{ + struct lrng_drng *lrng_drng_init = lrng_drng_init_instance(); + unsigned long flags = 0; + unsigned char buf[250], irq[200], aux[100], cpu[90], jent[45]; + + lrng_drng_lock(lrng_drng_init, &flags); + snprintf(buf, sizeof(buf), + "DRNG name: %s\n" + "LRNG security strength in bits: %d\n" + "number of DRNG instances: %u\n" + "Standards compliance: %s\n" + "Entropy Sources: %s%s%sAuxiliary\n" + "LRNG minimally seeded: %s\n" + "LRNG fully seeded: %s\n", + lrng_drng_init->crypto_cb->lrng_drng_name(), + lrng_security_strength(), + numa_drngs, + lrng_sp80090c_compliant() ? "SP800-90C " : "", + IS_ENABLED(CONFIG_LRNG_IRQ) ? "IRQ " : "", + IS_ENABLED(CONFIG_LRNG_JENT) ? "JitterRNG " : "", + IS_ENABLED(CONFIG_LRNG_CPU) ? "CPU " : "", + lrng_state_min_seeded() ? "true" : "false", + lrng_state_fully_seeded() ? "true" : "false"); + + lrng_aux_es_state(aux, sizeof(aux)); + + irq[0] = '\0'; + lrng_irq_es_state(irq, sizeof(irq)); + + jent[0] = '\0'; + lrng_jent_es_state(jent, sizeof(jent)); + + cpu[0] = '\0'; + lrng_arch_es_state(cpu, sizeof(cpu)); + + lrng_drng_unlock(lrng_drng_init, &flags); + + seq_write(m, buf, strlen(buf)); + seq_write(m, aux, strlen(aux)); + seq_write(m, irq, strlen(irq)); + seq_write(m, jent, strlen(jent)); + seq_write(m, cpu, strlen(cpu)); + + return 0; +} + +static int __init lrng_proc_type_init(void) +{ + proc_create_single("lrng_type", 0444, NULL, &lrng_proc_type_show); + return 0; +} + +module_init(lrng_proc_type_init); diff -urN linux-5.15/drivers/char/lrng/lrng_selftest.c linux-5.15-lrng/drivers/char/lrng/lrng_selftest.c --- linux-5.15/drivers/char/lrng/lrng_selftest.c 1970-01-01 10:00:00.000000000 +1000 +++ linux-5.15-lrng/drivers/char/lrng/lrng_selftest.c 2021-11-29 12:38:26.603278813 +1100 @@ -0,0 +1,386 @@ +// SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause +/* + * LRNG power-on and on-demand self-test + * + * Copyright (C) 2016 - 2021, Stephan Mueller + */ + +/* + * In addition to the self-tests below, the following LRNG components + * are covered with self-tests during regular operation: + * + * * power-on self-test: SP800-90A DRBG provided by the Linux kernel crypto API + * * power-on self-test: PRNG provided by the Linux kernel crypto API + * * runtime test: Raw noise source data testing including SP800-90B compliant + * tests when enabling CONFIG_LRNG_HEALTH_TESTS + * + * Additional developer tests present with LRNG code: + * * SP800-90B APT and RCT test enforcement validation when enabling + * CONFIG_LRNG_APT_BROKEN or CONFIG_LRNG_RCT_BROKEN. + * * Collection of raw entropy from the interrupt noise source when enabling + * CONFIG_LRNG_TESTING and pulling the data from the kernel with the provided + * interface. + */ + +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt + +#include +#include +#include + +#include "lrng_chacha20.h" +#include "lrng_internal.h" + +#define LRNG_SELFTEST_PASSED 0 +#define LRNG_SEFLTEST_ERROR_TIME (1 << 0) +#define LRNG_SEFLTEST_ERROR_CHACHA20 (1 << 1) +#define LRNG_SEFLTEST_ERROR_HASH (1 << 2) +#define LRNG_SEFLTEST_ERROR_GCD (1 << 3) +#define LRNG_SELFTEST_NOT_EXECUTED 0xffffffff + +#ifdef CONFIG_LRNG_IRQ + +#include "lrng_es_irq.h" + +static u32 lrng_data_selftest_ptr = 0; +static u32 lrng_data_selftest[LRNG_DATA_ARRAY_SIZE]; + +static inline void lrng_data_process_selftest_insert(u32 time) +{ + u32 ptr = lrng_data_selftest_ptr++ & LRNG_DATA_WORD_MASK; + unsigned int array = lrng_data_idx2array(ptr); + unsigned int slot = lrng_data_idx2slot(ptr); + + /* zeroization of slot to ensure the following OR adds the data */ + lrng_data_selftest[array] &= + ~(lrng_data_slot_val(0xffffffff & LRNG_DATA_SLOTSIZE_MASK, + slot)); + lrng_data_selftest[array] |= + lrng_data_slot_val(time & LRNG_DATA_SLOTSIZE_MASK, slot); +} + +static inline void lrng_data_process_selftest_u32(u32 data) +{ + u32 pre_ptr, ptr, mask; + unsigned int pre_array; + + /* Increment pointer by number of slots taken for input value */ + lrng_data_selftest_ptr += LRNG_DATA_SLOTS_PER_UINT; + + /* ptr to current unit */ + ptr = lrng_data_selftest_ptr; + + lrng_pcpu_split_u32(&ptr, &pre_ptr, &mask); + + /* MSB of data go into previous unit */ + pre_array = lrng_data_idx2array(pre_ptr); + /* zeroization of slot to ensure the following OR adds the data */ + lrng_data_selftest[pre_array] &= ~(0xffffffff & ~mask); + lrng_data_selftest[pre_array] |= data & ~mask; + + /* LSB of data go into current unit */ + lrng_data_selftest[lrng_data_idx2array(ptr)] = data & mask; +} + +static unsigned int lrng_data_process_selftest(void) +{ + u32 time; + u32 idx_zero_compare = (0 << 0) | (1 << 8) | (2 << 16) | (3 << 24); + u32 idx_one_compare = (4 << 0) | (5 << 8) | (6 << 16) | (7 << 24); + u32 idx_last_compare = + (((LRNG_DATA_NUM_VALUES - 4) & LRNG_DATA_SLOTSIZE_MASK) << 0) | + (((LRNG_DATA_NUM_VALUES - 3) & LRNG_DATA_SLOTSIZE_MASK) << 8) | + (((LRNG_DATA_NUM_VALUES - 2) & LRNG_DATA_SLOTSIZE_MASK) << 16) | + (((LRNG_DATA_NUM_VALUES - 1) & LRNG_DATA_SLOTSIZE_MASK) << 24); + + (void)idx_one_compare; + + /* "poison" the array to verify the operation of the zeroization */ + lrng_data_selftest[0] = 0xffffffff; + lrng_data_selftest[1] = 0xffffffff; + + lrng_data_process_selftest_insert(0); + /* + * Note, when using lrng_data_process_u32() on unaligned ptr, + * the first slots will go into next word, and the last slots go + * into the previous word. + */ + lrng_data_process_selftest_u32((4 << 0) | (1 << 8) | (2 << 16) | + (3 << 24)); + lrng_data_process_selftest_insert(5); + lrng_data_process_selftest_insert(6); + lrng_data_process_selftest_insert(7); + + if ((lrng_data_selftest[0] != idx_zero_compare) || + (lrng_data_selftest[1] != idx_one_compare)) + goto err; + + /* Reset for next test */ + lrng_data_selftest[0] = 0; + lrng_data_selftest[1] = 0; + lrng_data_selftest_ptr = 0; + + for (time = 0; time < LRNG_DATA_NUM_VALUES; time++) + lrng_data_process_selftest_insert(time); + + if ((lrng_data_selftest[0] != idx_zero_compare) || + (lrng_data_selftest[1] != idx_one_compare) || + (lrng_data_selftest[LRNG_DATA_ARRAY_SIZE - 1] != idx_last_compare)) + goto err; + + return LRNG_SELFTEST_PASSED; + +err: + pr_err("LRNG data array self-test FAILED\n"); + return LRNG_SEFLTEST_ERROR_TIME; +} + +static unsigned int lrng_gcd_selftest(void) +{ + u32 history[10]; + unsigned int i; + +#define LRNG_GCD_SELFTEST 3 + for (i = 0; i < ARRAY_SIZE(history); i++) + history[i] = i * LRNG_GCD_SELFTEST; + + if (lrng_gcd_analyze(history, ARRAY_SIZE(history)) == LRNG_GCD_SELFTEST) + return LRNG_SELFTEST_PASSED; + + pr_err("LRNG GCD self-test FAILED\n"); + return LRNG_SEFLTEST_ERROR_GCD; +} + +#else /* CONFIG_LRNG_IRQ */ + +static unsigned int lrng_data_process_selftest(void) +{ + return LRNG_SELFTEST_PASSED; +} + +static unsigned int lrng_gcd_selftest(void) +{ + return LRNG_SELFTEST_PASSED; +} + +#endif /* CONFIG_LRNG_IRQ */ + +static inline void lrng_selftest_bswap32(u32 *ptr, u32 words) +{ + u32 i; + + /* Byte-swap data which is an LE representation */ + for (i = 0; i < words; i++) { + __le32 *p = (__le32 *)ptr; + + *p = cpu_to_le32(*ptr); + ptr++; + } +} + +/* The test vectors are taken from crypto/testmgr.h */ +static unsigned int lrng_hash_selftest(void) +{ + SHASH_DESC_ON_STACK(shash, NULL); + const struct lrng_crypto_cb *crypto_cb = &lrng_cc20_crypto_cb; + static const u8 lrng_hash_selftest_result[] = +#ifdef CONFIG_CRYPTO_LIB_SHA256 + { 0xba, 0x78, 0x16, 0xbf, 0x8f, 0x01, 0xcf, 0xea, + 0x41, 0x41, 0x40, 0xde, 0x5d, 0xae, 0x22, 0x23, + 0xb0, 0x03, 0x61, 0xa3, 0x96, 0x17, 0x7a, 0x9c, + 0xb4, 0x10, 0xff, 0x61, 0xf2, 0x00, 0x15, 0xad }; +#else /* CONFIG_CRYPTO_LIB_SHA256 */ + { 0xa9, 0x99, 0x3e, 0x36, 0x47, 0x06, 0x81, 0x6a, 0xba, 0x3e, + 0x25, 0x71, 0x78, 0x50, 0xc2, 0x6c, 0x9c, 0xd0, 0xd8, 0x9d }; +#endif /* CONFIG_CRYPTO_LIB_SHA256 */ + static const u8 hash_input[] = { 0x61, 0x62, 0x63 }; /* "abc" */ + u8 digest[sizeof(lrng_hash_selftest_result)] __aligned(sizeof(u32)); + + BUG_ON(sizeof(digest) != crypto_cb->lrng_hash_digestsize(NULL)); + + if (!crypto_cb->lrng_hash_init(shash, NULL) && + !crypto_cb->lrng_hash_update(shash, hash_input, + sizeof(hash_input)) && + !crypto_cb->lrng_hash_final(shash, digest) && + !memcmp(digest, lrng_hash_selftest_result, sizeof(digest))) + return 0; + + pr_err("LRNG %s Hash self-test FAILED\n", crypto_cb->lrng_hash_name()); + return LRNG_SEFLTEST_ERROR_HASH; +} + +/* + * The test vectors were generated using the ChaCha20 DRNG from + * https://www.chronox.de/chacha20.html + */ +static unsigned int lrng_chacha20_drng_selftest(void) +{ + const struct lrng_crypto_cb *crypto_cb = &lrng_cc20_crypto_cb; + u8 seed[CHACHA_KEY_SIZE * 2] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + }; + struct chacha20_block chacha20; + int ret; + u8 outbuf[CHACHA_KEY_SIZE * 2] __aligned(sizeof(u32)); + + /* + * Expected result when ChaCha20 DRNG state is zero: + * * constants are set to "expand 32-byte k" + * * remaining state is 0 + * and pulling one half ChaCha20 DRNG block. + */ + static const u8 expected_halfblock[CHACHA_KEY_SIZE] = { + 0x76, 0xb8, 0xe0, 0xad, 0xa0, 0xf1, 0x3d, 0x90, + 0x40, 0x5d, 0x6a, 0xe5, 0x53, 0x86, 0xbd, 0x28, + 0xbd, 0xd2, 0x19, 0xb8, 0xa0, 0x8d, 0xed, 0x1a, + 0xa8, 0x36, 0xef, 0xcc, 0x8b, 0x77, 0x0d, 0xc7 }; + + /* + * Expected result when ChaCha20 DRNG state is zero: + * * constants are set to "expand 32-byte k" + * * remaining state is 0 + * followed by a reseed with two keyblocks + * 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + * 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + * 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + * 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + * 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + * 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + * 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + * 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f + * and pulling one ChaCha20 DRNG block. + */ + static const u8 expected_oneblock[CHACHA_KEY_SIZE * 2] = { + 0xe3, 0xb0, 0x8a, 0xcc, 0x34, 0xc3, 0x17, 0x0e, + 0xc3, 0xd8, 0xc3, 0x40, 0xe7, 0x73, 0xe9, 0x0d, + 0xd1, 0x62, 0xa3, 0x5d, 0x7d, 0xf2, 0xf1, 0x4a, + 0x24, 0x42, 0xb7, 0x1e, 0xb0, 0x05, 0x17, 0x07, + 0xb9, 0x35, 0x10, 0x69, 0x8b, 0x46, 0xfb, 0x51, + 0xe9, 0x91, 0x3f, 0x46, 0xf2, 0x4d, 0xea, 0xd0, + 0x81, 0xc1, 0x1b, 0xa9, 0x5d, 0x52, 0x91, 0x5f, + 0xcd, 0xdc, 0xc6, 0xd6, 0xc3, 0x7c, 0x50, 0x23 }; + + /* + * Expected result when ChaCha20 DRNG state is zero: + * * constants are set to "expand 32-byte k" + * * remaining state is 0 + * followed by a reseed with one key block plus one byte + * 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + * 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + * 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + * 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + * 0x20 + * and pulling less than one ChaCha20 DRNG block. + */ + static const u8 expected_block_nonalinged[CHACHA_KEY_SIZE + 4] = { + 0x9c, 0xfc, 0x5e, 0x31, 0x21, 0x62, 0x11, 0x85, + 0xd3, 0x77, 0xd3, 0x69, 0x0f, 0xa8, 0x16, 0x55, + 0xb4, 0x4c, 0xf6, 0x52, 0xf3, 0xa8, 0x37, 0x99, + 0x38, 0x76, 0xa0, 0x66, 0xec, 0xbb, 0xce, 0xa9, + 0x9c, 0x95, 0xa1, 0xfd }; + + BUILD_BUG_ON(sizeof(seed) % sizeof(u32)); + + memset(&chacha20, 0, sizeof(chacha20)); + lrng_cc20_init_rfc7539(&chacha20); + lrng_selftest_bswap32((u32 *)seed, sizeof(seed) / sizeof(u32)); + + /* Generate with zero state */ + ret = crypto_cb->lrng_drng_generate_helper(&chacha20, outbuf, + sizeof(expected_halfblock)); + if (ret != sizeof(expected_halfblock)) + goto err; + if (memcmp(outbuf, expected_halfblock, sizeof(expected_halfblock))) + goto err; + + /* Clear state of DRNG */ + memset(&chacha20.key.u[0], 0, 48); + + /* Reseed with 2 key blocks */ + ret = crypto_cb->lrng_drng_seed_helper(&chacha20, seed, + sizeof(expected_oneblock)); + if (ret < 0) + goto err; + ret = crypto_cb->lrng_drng_generate_helper(&chacha20, outbuf, + sizeof(expected_oneblock)); + if (ret != sizeof(expected_oneblock)) + goto err; + if (memcmp(outbuf, expected_oneblock, sizeof(expected_oneblock))) + goto err; + + /* Clear state of DRNG */ + memset(&chacha20.key.u[0], 0, 48); + + /* Reseed with 1 key block and one byte */ + ret = crypto_cb->lrng_drng_seed_helper(&chacha20, seed, + sizeof(expected_block_nonalinged)); + if (ret < 0) + goto err; + ret = crypto_cb->lrng_drng_generate_helper(&chacha20, outbuf, + sizeof(expected_block_nonalinged)); + if (ret != sizeof(expected_block_nonalinged)) + goto err; + if (memcmp(outbuf, expected_block_nonalinged, + sizeof(expected_block_nonalinged))) + goto err; + + return LRNG_SELFTEST_PASSED; + +err: + pr_err("LRNG ChaCha20 DRNG self-test FAILED\n"); + return LRNG_SEFLTEST_ERROR_CHACHA20; +} + +static unsigned int lrng_selftest_status = LRNG_SELFTEST_NOT_EXECUTED; + +static int lrng_selftest(void) +{ + unsigned int ret = lrng_data_process_selftest(); + + ret |= lrng_chacha20_drng_selftest(); + ret |= lrng_hash_selftest(); + ret |= lrng_gcd_selftest(); + + if (ret) { + if (IS_ENABLED(CONFIG_LRNG_SELFTEST_PANIC)) + panic("LRNG self-tests failed: %u\n", ret); + } else { + pr_info("LRNG self-tests passed\n"); + } + + lrng_selftest_status = ret; + + if (lrng_selftest_status) + return -EFAULT; + return 0; +} + +#ifdef CONFIG_SYSFS +/* Re-perform self-test when any value is written to the sysfs file. */ +static int lrng_selftest_sysfs_set(const char *val, + const struct kernel_param *kp) +{ + return lrng_selftest(); +} + +static const struct kernel_param_ops lrng_selftest_sysfs = { + .set = lrng_selftest_sysfs_set, + .get = param_get_uint, +}; +module_param_cb(selftest_status, &lrng_selftest_sysfs, &lrng_selftest_status, + 0644); +#endif /* CONFIG_SYSFS */ + +static int __init lrng_selftest_init(void) +{ + return lrng_selftest(); +} + +module_init(lrng_selftest_init); diff -urN linux-5.15/drivers/char/lrng/lrng_switch.c linux-5.15-lrng/drivers/char/lrng/lrng_switch.c --- linux-5.15/drivers/char/lrng/lrng_switch.c 1970-01-01 10:00:00.000000000 +1000 +++ linux-5.15-lrng/drivers/char/lrng/lrng_switch.c 2021-11-29 12:37:19.323279070 +1100 @@ -0,0 +1,226 @@ +// SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause +/* + * LRNG DRNG switching support + * + * Copyright (C) 2016 - 2021, Stephan Mueller + */ + +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt + +#include + +#include "lrng_internal.h" + +static int lrng_drng_switch(struct lrng_drng *drng_store, + const struct lrng_crypto_cb *cb, int node) +{ + const struct lrng_crypto_cb *old_cb; + unsigned long flags = 0, flags2 = 0; + int ret; + u8 seed[LRNG_DRNG_SECURITY_STRENGTH_BYTES]; + void *new_drng = cb->lrng_drng_alloc(LRNG_DRNG_SECURITY_STRENGTH_BYTES); + void *old_drng, *new_hash, *old_hash; + u32 current_security_strength; + bool sl = false, reset_drng = !lrng_get_available(); + + if (IS_ERR(new_drng)) { + pr_warn("could not allocate new DRNG for NUMA node %d (%ld)\n", + node, PTR_ERR(new_drng)); + return PTR_ERR(new_drng); + } + + new_hash = cb->lrng_hash_alloc(); + if (IS_ERR(new_hash)) { + pr_warn("could not allocate new LRNG pool hash (%ld)\n", + PTR_ERR(new_hash)); + cb->lrng_drng_dealloc(new_drng); + return PTR_ERR(new_hash); + } + + if (cb->lrng_hash_digestsize(new_hash) > LRNG_MAX_DIGESTSIZE) { + pr_warn("digest size of newly requested hash too large\n"); + cb->lrng_hash_dealloc(new_hash); + cb->lrng_drng_dealloc(new_drng); + return -EINVAL; + } + + current_security_strength = lrng_security_strength(); + lrng_drng_lock(drng_store, &flags); + + /* + * Pull from existing DRNG to seed new DRNG regardless of seed status + * of old DRNG -- the entropy state for the DRNG is left unchanged which + * implies that als the new DRNG is reseeded when deemed necessary. This + * seeding of the new DRNG shall only ensure that the new DRNG has the + * same entropy as the old DRNG. + */ + ret = drng_store->crypto_cb->lrng_drng_generate_helper( + drng_store->drng, seed, sizeof(seed)); + lrng_drng_unlock(drng_store, &flags); + + if (ret < 0) { + reset_drng = true; + pr_warn("getting random data from DRNG failed for NUMA node %d (%d)\n", + node, ret); + } else { + /* seed new DRNG with data */ + ret = cb->lrng_drng_seed_helper(new_drng, seed, ret); + memzero_explicit(seed, sizeof(seed)); + if (ret < 0) { + reset_drng = true; + pr_warn("seeding of new DRNG failed for NUMA node %d (%d)\n", + node, ret); + } else { + pr_debug("seeded new DRNG of NUMA node %d instance from old DRNG instance\n", + node); + } + } + + mutex_lock(&drng_store->lock); + write_lock_irqsave(&drng_store->hash_lock, flags2); + /* + * If we switch the DRNG from the initial ChaCha20 DRNG to something + * else, there is a lock transition from spin lock to mutex (see + * lrng_drng_is_atomic and how the lock is taken in lrng_drng_lock). + * Thus, we need to take both locks during the transition phase. + */ + if (lrng_drng_is_atomic(drng_store)) { + spin_lock_irqsave(&drng_store->spin_lock, flags); + sl = true; + } else { + __acquire(&drng_store->spin_lock); + } + + /* Trigger the switch of the aux entropy pool for current node. */ + if (drng_store == lrng_drng_init_instance()) { + ret = lrng_aux_switch_hash(cb, new_hash, drng_store->crypto_cb); + if (ret) + goto err; + } + + /* Trigger the switch of the per-CPU entropy pools for current node. */ + ret = lrng_pcpu_switch_hash(node, cb, new_hash, drng_store->crypto_cb); + if (ret) { + /* Switch the crypto operation back to be consistent */ + WARN_ON(lrng_aux_switch_hash(drng_store->crypto_cb, + drng_store->hash, cb)); + } else { + if (reset_drng) + lrng_drng_reset(drng_store); + + old_drng = drng_store->drng; + old_cb = drng_store->crypto_cb; + drng_store->drng = new_drng; + drng_store->crypto_cb = cb; + + old_hash = drng_store->hash; + drng_store->hash = new_hash; + pr_info("Entropy pool read-hash allocated for DRNG for NUMA node %d\n", + node); + + /* Reseed if previous LRNG security strength was insufficient */ + if (current_security_strength < lrng_security_strength()) + drng_store->force_reseed = true; + + /* Force oversampling seeding as we initialize DRNG */ + if (IS_ENABLED(CONFIG_LRNG_OVERSAMPLE_ENTROPY_SOURCES)) + lrng_unset_fully_seeded(drng_store); + + if (lrng_state_min_seeded()) + lrng_set_entropy_thresh(lrng_get_seed_entropy_osr( + drng_store->fully_seeded)); + + /* ChaCha20 serves as atomic instance left untouched. */ + if (old_drng != &chacha20) { + old_cb->lrng_drng_dealloc(old_drng); + old_cb->lrng_hash_dealloc(old_hash); + } + + pr_info("DRNG of NUMA node %d switched\n", node); + } + +err: + if (sl) + spin_unlock_irqrestore(&drng_store->spin_lock, flags); + else + __release(&drng_store->spin_lock); + write_unlock_irqrestore(&drng_store->hash_lock, flags2); + mutex_unlock(&drng_store->lock); + + return ret; +} + +/* + * Switch the existing DRNG instances with new using the new crypto callbacks. + * The caller must hold the lrng_crypto_cb_update lock. + */ +static int lrng_drngs_switch(const struct lrng_crypto_cb *cb) +{ + struct lrng_drng **lrng_drng = lrng_drng_instances(); + struct lrng_drng *lrng_drng_init = lrng_drng_init_instance(); + int ret = 0; + + /* Update DRNG */ + if (lrng_drng) { + u32 node; + + for_each_online_node(node) { + if (lrng_drng[node]) + ret = lrng_drng_switch(lrng_drng[node], cb, + node); + } + } else { + ret = lrng_drng_switch(lrng_drng_init, cb, 0); + } + + if (!ret) + lrng_set_available(); + + return 0; +} + +/* + * lrng_set_drng_cb - Register new cryptographic callback functions for DRNG + * The registering implies that all old DRNG states are replaced with new + * DRNG states. + * + * @cb: Callback functions to be registered -- if NULL, use the default + * callbacks pointing to the ChaCha20 DRNG. + * + * Return: + * * 0 on success + * * < 0 on error + */ +int lrng_set_drng_cb(const struct lrng_crypto_cb *cb) +{ + struct lrng_drng *lrng_drng_init = lrng_drng_init_instance(); + int ret; + + if (!cb) + cb = &lrng_cc20_crypto_cb; + + mutex_lock(&lrng_crypto_cb_update); + + /* + * If a callback other than the default is set, allow it only to be + * set back to the default callback. This ensures that multiple + * different callbacks can be registered at the same time. If a + * callback different from the current callback and the default + * callback shall be set, the current callback must be deregistered + * (e.g. the kernel module providing it must be unloaded) and the new + * implementation can be registered. + */ + if ((cb != &lrng_cc20_crypto_cb) && + (lrng_drng_init->crypto_cb != &lrng_cc20_crypto_cb)) { + pr_warn("disallow setting new cipher callbacks, unload the old callbacks first!\n"); + ret = -EINVAL; + goto out; + } + + ret = lrng_drngs_switch(cb); + +out: + mutex_unlock(&lrng_crypto_cb_update); + return ret; +} +EXPORT_SYMBOL(lrng_set_drng_cb); diff -urN linux-5.15/drivers/char/lrng/lrng_testing.c linux-5.15-lrng/drivers/char/lrng/lrng_testing.c --- linux-5.15/drivers/char/lrng/lrng_testing.c 1970-01-01 10:00:00.000000000 +1000 +++ linux-5.15-lrng/drivers/char/lrng/lrng_testing.c 2021-11-29 12:38:19.263278841 +1100 @@ -0,0 +1,689 @@ +// SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause +/* + * Linux Random Number Generator (LRNG) testing interfaces + * + * Copyright (C) 2019 - 2021, Stephan Mueller + */ + +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "lrng_internal.h" + +#define LRNG_TESTING_RINGBUFFER_SIZE 1024 +#define LRNG_TESTING_RINGBUFFER_MASK (LRNG_TESTING_RINGBUFFER_SIZE - 1) + +struct lrng_testing { + u32 lrng_testing_rb[LRNG_TESTING_RINGBUFFER_SIZE]; + u32 rb_reader; + u32 rb_writer; + atomic_t lrng_testing_enabled; + spinlock_t lock; + wait_queue_head_t read_wait; +}; + +/*************************** Generic Data Handling ****************************/ + +/* + * boot variable: + * 0 ==> No boot test, gathering of runtime data allowed + * 1 ==> Boot test enabled and ready for collecting data, gathering runtime + * data is disabled + * 2 ==> Boot test completed and disabled, gathering of runtime data is + * disabled + */ + +static inline void lrng_testing_reset(struct lrng_testing *data) +{ + unsigned long flags; + + spin_lock_irqsave(&data->lock, flags); + data->rb_reader = 0; + data->rb_writer = 0; + spin_unlock_irqrestore(&data->lock, flags); +} + +static inline void lrng_testing_init(struct lrng_testing *data, u32 boot) +{ + /* + * The boot time testing implies we have a running test. If the + * caller wants to clear it, he has to unset the boot_test flag + * at runtime via sysfs to enable regular runtime testing + */ + if (boot) + return; + + lrng_testing_reset(data); + atomic_set(&data->lrng_testing_enabled, 1); + pr_warn("Enabling data collection\n"); +} + +static inline void lrng_testing_fini(struct lrng_testing *data, u32 boot) +{ + /* If we have boot data, we do not reset yet to allow data to be read */ + if (boot) + return; + + atomic_set(&data->lrng_testing_enabled, 0); + lrng_testing_reset(data); + pr_warn("Disabling data collection\n"); +} + +static inline bool lrng_testing_store(struct lrng_testing *data, u32 value, + u32 *boot) +{ + unsigned long flags; + + if (!atomic_read(&data->lrng_testing_enabled) && (*boot != 1)) + return false; + + spin_lock_irqsave(&data->lock, flags); + + /* + * Disable entropy testing for boot time testing after ring buffer + * is filled. + */ + if (*boot) { + if (data->rb_writer > LRNG_TESTING_RINGBUFFER_SIZE) { + *boot = 2; + pr_warn_once("One time data collection test disabled\n"); + spin_unlock_irqrestore(&data->lock, flags); + return false; + } + + if (data->rb_writer == 1) + pr_warn("One time data collection test enabled\n"); + } + + data->lrng_testing_rb[data->rb_writer & LRNG_TESTING_RINGBUFFER_MASK] = + value; + data->rb_writer++; + + spin_unlock_irqrestore(&data->lock, flags); + + if (wq_has_sleeper(&data->read_wait)) + wake_up_interruptible(&data->read_wait); + + return true; +} + +static inline bool lrng_testing_have_data(struct lrng_testing *data) +{ + return ((data->rb_writer & LRNG_TESTING_RINGBUFFER_MASK) != + (data->rb_reader & LRNG_TESTING_RINGBUFFER_MASK)); +} + +static inline int lrng_testing_reader(struct lrng_testing *data, u32 *boot, + u8 *outbuf, u32 outbuflen) +{ + unsigned long flags; + int collected_data = 0; + + lrng_testing_init(data, *boot); + + while (outbuflen) { + spin_lock_irqsave(&data->lock, flags); + + /* We have no data or reached the writer. */ + if (!data->rb_writer || + (data->rb_writer == data->rb_reader)) { + + spin_unlock_irqrestore(&data->lock, flags); + + /* + * Now we gathered all boot data, enable regular data + * collection. + */ + if (*boot) { + *boot = 0; + goto out; + } + + wait_event_interruptible(data->read_wait, + lrng_testing_have_data(data)); + if (signal_pending(current)) { + collected_data = -ERESTARTSYS; + goto out; + } + + continue; + } + + /* We copy out word-wise */ + if (outbuflen < sizeof(u32)) { + spin_unlock_irqrestore(&data->lock, flags); + goto out; + } + + memcpy(outbuf, &data->lrng_testing_rb[data->rb_reader], + sizeof(u32)); + data->rb_reader++; + + spin_unlock_irqrestore(&data->lock, flags); + + outbuf += sizeof(u32); + outbuflen -= sizeof(u32); + collected_data += sizeof(u32); + } + +out: + lrng_testing_fini(data, *boot); + return collected_data; +} + +static int lrng_testing_extract_user(struct file *file, char __user *buf, + size_t nbytes, loff_t *ppos, + int (*reader)(u8 *outbuf, u32 outbuflen)) +{ + u8 *tmp, *tmp_aligned; + int ret = 0, large_request = (nbytes > 256); + + if (!nbytes) + return 0; + + /* + * The intention of this interface is for collecting at least + * 1000 samples due to the SP800-90B requirements. So, we make no + * effort in avoiding allocating more memory that actually needed + * by the user. Hence, we allocate sufficient memory to always hold + * that amount of data. + */ + tmp = kmalloc(LRNG_TESTING_RINGBUFFER_SIZE + sizeof(u32), GFP_KERNEL); + if (!tmp) + return -ENOMEM; + + tmp_aligned = PTR_ALIGN(tmp, sizeof(u32)); + + while (nbytes) { + int i; + + if (large_request && need_resched()) { + if (signal_pending(current)) { + if (ret == 0) + ret = -ERESTARTSYS; + break; + } + schedule(); + } + + i = min_t(int, nbytes, LRNG_TESTING_RINGBUFFER_SIZE); + i = reader(tmp_aligned, i); + if (i <= 0) { + if (i < 0) + ret = i; + break; + } + if (copy_to_user(buf, tmp_aligned, i)) { + ret = -EFAULT; + break; + } + + nbytes -= i; + buf += i; + ret += i; + } + + kfree_sensitive(tmp); + + if (ret > 0) + *ppos += ret; + + return ret; +} + +/************** Raw High-Resolution Timer Entropy Data Handling ***************/ + +#ifdef CONFIG_LRNG_RAW_HIRES_ENTROPY + +static u32 boot_raw_hires_test = 0; +module_param(boot_raw_hires_test, uint, 0644); +MODULE_PARM_DESC(boot_raw_hires_test, "Enable gathering boot time high resolution timer entropy of the first entropy events"); + +static struct lrng_testing lrng_raw_hires = { + .rb_reader = 0, + .rb_writer = 0, + .lock = __SPIN_LOCK_UNLOCKED(lrng_raw_hires.lock), + .read_wait = __WAIT_QUEUE_HEAD_INITIALIZER(lrng_raw_hires.read_wait) +}; + +bool lrng_raw_hires_entropy_store(u32 value) +{ + return lrng_testing_store(&lrng_raw_hires, value, &boot_raw_hires_test); +} + +static int lrng_raw_hires_entropy_reader(u8 *outbuf, u32 outbuflen) +{ + return lrng_testing_reader(&lrng_raw_hires, &boot_raw_hires_test, + outbuf, outbuflen); +} + +static ssize_t lrng_raw_hires_read(struct file *file, char __user *to, + size_t count, loff_t *ppos) +{ + return lrng_testing_extract_user(file, to, count, ppos, + lrng_raw_hires_entropy_reader); +} + +static const struct file_operations lrng_raw_hires_fops = { + .owner = THIS_MODULE, + .read = lrng_raw_hires_read, +}; + +#endif /* CONFIG_LRNG_RAW_HIRES_ENTROPY */ + +/********************* Raw Jiffies Entropy Data Handling **********************/ + +#ifdef CONFIG_LRNG_RAW_JIFFIES_ENTROPY + +static u32 boot_raw_jiffies_test = 0; +module_param(boot_raw_jiffies_test, uint, 0644); +MODULE_PARM_DESC(boot_raw_jiffies_test, "Enable gathering boot time high resolution timer entropy of the first entropy events"); + +static struct lrng_testing lrng_raw_jiffies = { + .rb_reader = 0, + .rb_writer = 0, + .lock = __SPIN_LOCK_UNLOCKED(lrng_raw_jiffies.lock), + .read_wait = __WAIT_QUEUE_HEAD_INITIALIZER(lrng_raw_jiffies.read_wait) +}; + +bool lrng_raw_jiffies_entropy_store(u32 value) +{ + return lrng_testing_store(&lrng_raw_jiffies, value, + &boot_raw_jiffies_test); +} + +static int lrng_raw_jiffies_entropy_reader(u8 *outbuf, u32 outbuflen) +{ + return lrng_testing_reader(&lrng_raw_jiffies, &boot_raw_jiffies_test, + outbuf, outbuflen); +} + +static ssize_t lrng_raw_jiffies_read(struct file *file, char __user *to, + size_t count, loff_t *ppos) +{ + return lrng_testing_extract_user(file, to, count, ppos, + lrng_raw_jiffies_entropy_reader); +} + +static const struct file_operations lrng_raw_jiffies_fops = { + .owner = THIS_MODULE, + .read = lrng_raw_jiffies_read, +}; + +#endif /* CONFIG_LRNG_RAW_JIFFIES_ENTROPY */ + +/************************** Raw IRQ Data Handling ****************************/ + +#ifdef CONFIG_LRNG_RAW_IRQ_ENTROPY + +static u32 boot_raw_irq_test = 0; +module_param(boot_raw_irq_test, uint, 0644); +MODULE_PARM_DESC(boot_raw_irq_test, "Enable gathering boot time entropy of the first IRQ entropy events"); + +static struct lrng_testing lrng_raw_irq = { + .rb_reader = 0, + .rb_writer = 0, + .lock = __SPIN_LOCK_UNLOCKED(lrng_raw_irq.lock), + .read_wait = __WAIT_QUEUE_HEAD_INITIALIZER(lrng_raw_irq.read_wait) +}; + +bool lrng_raw_irq_entropy_store(u32 value) +{ + return lrng_testing_store(&lrng_raw_irq, value, &boot_raw_irq_test); +} + +static int lrng_raw_irq_entropy_reader(u8 *outbuf, u32 outbuflen) +{ + return lrng_testing_reader(&lrng_raw_irq, &boot_raw_irq_test, outbuf, + outbuflen); +} + +static ssize_t lrng_raw_irq_read(struct file *file, char __user *to, + size_t count, loff_t *ppos) +{ + return lrng_testing_extract_user(file, to, count, ppos, + lrng_raw_irq_entropy_reader); +} + +static const struct file_operations lrng_raw_irq_fops = { + .owner = THIS_MODULE, + .read = lrng_raw_irq_read, +}; + +#endif /* CONFIG_LRNG_RAW_IRQ_ENTROPY */ + +/************************ Raw IRQFLAGS Data Handling **************************/ + +#ifdef CONFIG_LRNG_RAW_IRQFLAGS_ENTROPY + +static u32 boot_raw_irqflags_test = 0; +module_param(boot_raw_irqflags_test, uint, 0644); +MODULE_PARM_DESC(boot_raw_irqflags_test, "Enable gathering boot time entropy of the first IRQ flags entropy events"); + +static struct lrng_testing lrng_raw_irqflags = { + .rb_reader = 0, + .rb_writer = 0, + .lock = __SPIN_LOCK_UNLOCKED(lrng_raw_irqflags.lock), + .read_wait = __WAIT_QUEUE_HEAD_INITIALIZER(lrng_raw_irqflags.read_wait) +}; + +bool lrng_raw_irqflags_entropy_store(u32 value) +{ + return lrng_testing_store(&lrng_raw_irqflags, value, + &boot_raw_irqflags_test); +} + +static int lrng_raw_irqflags_entropy_reader(u8 *outbuf, u32 outbuflen) +{ + return lrng_testing_reader(&lrng_raw_irqflags, &boot_raw_irqflags_test, + outbuf, outbuflen); +} + +static ssize_t lrng_raw_irqflags_read(struct file *file, char __user *to, + size_t count, loff_t *ppos) +{ + return lrng_testing_extract_user(file, to, count, ppos, + lrng_raw_irqflags_entropy_reader); +} + +static const struct file_operations lrng_raw_irqflags_fops = { + .owner = THIS_MODULE, + .read = lrng_raw_irqflags_read, +}; + +#endif /* CONFIG_LRNG_RAW_IRQFLAGS_ENTROPY */ + +/************************ Raw _RET_IP_ Data Handling **************************/ + +#ifdef CONFIG_LRNG_RAW_RETIP_ENTROPY + +static u32 boot_raw_retip_test = 0; +module_param(boot_raw_retip_test, uint, 0644); +MODULE_PARM_DESC(boot_raw_retip_test, "Enable gathering boot time entropy of the first return instruction pointer entropy events"); + +static struct lrng_testing lrng_raw_retip = { + .rb_reader = 0, + .rb_writer = 0, + .lock = __SPIN_LOCK_UNLOCKED(lrng_raw_retip.lock), + .read_wait = __WAIT_QUEUE_HEAD_INITIALIZER(lrng_raw_retip.read_wait) +}; + +bool lrng_raw_retip_entropy_store(u32 value) +{ + return lrng_testing_store(&lrng_raw_retip, value, &boot_raw_retip_test); +} + +static int lrng_raw_retip_entropy_reader(u8 *outbuf, u32 outbuflen) +{ + return lrng_testing_reader(&lrng_raw_retip, &boot_raw_retip_test, + outbuf, outbuflen); +} + +static ssize_t lrng_raw_retip_read(struct file *file, char __user *to, + size_t count, loff_t *ppos) +{ + return lrng_testing_extract_user(file, to, count, ppos, + lrng_raw_retip_entropy_reader); +} + +static const struct file_operations lrng_raw_retip_fops = { + .owner = THIS_MODULE, + .read = lrng_raw_retip_read, +}; + +#endif /* CONFIG_LRNG_RAW_RETIP_ENTROPY */ + +/********************** Raw IRQ register Data Handling ************************/ + +#ifdef CONFIG_LRNG_RAW_REGS_ENTROPY + +static u32 boot_raw_regs_test = 0; +module_param(boot_raw_regs_test, uint, 0644); +MODULE_PARM_DESC(boot_raw_regs_test, "Enable gathering boot time entropy of the first interrupt register entropy events"); + +static struct lrng_testing lrng_raw_regs = { + .rb_reader = 0, + .rb_writer = 0, + .lock = __SPIN_LOCK_UNLOCKED(lrng_raw_regs.lock), + .read_wait = __WAIT_QUEUE_HEAD_INITIALIZER(lrng_raw_regs.read_wait) +}; + +bool lrng_raw_regs_entropy_store(u32 value) +{ + return lrng_testing_store(&lrng_raw_regs, value, &boot_raw_regs_test); +} + +static int lrng_raw_regs_entropy_reader(u8 *outbuf, u32 outbuflen) +{ + return lrng_testing_reader(&lrng_raw_regs, &boot_raw_regs_test, + outbuf, outbuflen); +} + +static ssize_t lrng_raw_regs_read(struct file *file, char __user *to, + size_t count, loff_t *ppos) +{ + return lrng_testing_extract_user(file, to, count, ppos, + lrng_raw_regs_entropy_reader); +} + +static const struct file_operations lrng_raw_regs_fops = { + .owner = THIS_MODULE, + .read = lrng_raw_regs_read, +}; + +#endif /* CONFIG_LRNG_RAW_REGS_ENTROPY */ + +/********************** Raw Entropy Array Data Handling ***********************/ + +#ifdef CONFIG_LRNG_RAW_ARRAY + +static u32 boot_raw_array = 0; +module_param(boot_raw_array, uint, 0644); +MODULE_PARM_DESC(boot_raw_array, "Enable gathering boot time raw noise array data of the first entropy events"); + +static struct lrng_testing lrng_raw_array = { + .rb_reader = 0, + .rb_writer = 0, + .lock = __SPIN_LOCK_UNLOCKED(lrng_raw_array.lock), + .read_wait = __WAIT_QUEUE_HEAD_INITIALIZER(lrng_raw_array.read_wait) +}; + +bool lrng_raw_array_entropy_store(u32 value) +{ + return lrng_testing_store(&lrng_raw_array, value, &boot_raw_array); +} + +static int lrng_raw_array_entropy_reader(u8 *outbuf, u32 outbuflen) +{ + return lrng_testing_reader(&lrng_raw_array, &boot_raw_array, outbuf, + outbuflen); +} + +static ssize_t lrng_raw_array_read(struct file *file, char __user *to, + size_t count, loff_t *ppos) +{ + return lrng_testing_extract_user(file, to, count, ppos, + lrng_raw_array_entropy_reader); +} + +static const struct file_operations lrng_raw_array_fops = { + .owner = THIS_MODULE, + .read = lrng_raw_array_read, +}; + +#endif /* CONFIG_LRNG_RAW_ARRAY */ + +/******************** Interrupt Performance Data Handling *********************/ + +#ifdef CONFIG_LRNG_IRQ_PERF + +static u32 boot_irq_perf = 0; +module_param(boot_irq_perf, uint, 0644); +MODULE_PARM_DESC(boot_irq_perf, "Enable gathering boot time interrupt performance data of the first entropy events"); + +static struct lrng_testing lrng_irq_perf = { + .rb_reader = 0, + .rb_writer = 0, + .lock = __SPIN_LOCK_UNLOCKED(lrng_irq_perf.lock), + .read_wait = __WAIT_QUEUE_HEAD_INITIALIZER(lrng_irq_perf.read_wait) +}; + +bool lrng_perf_time(u32 start) +{ + return lrng_testing_store(&lrng_irq_perf, random_get_entropy() - start, + &boot_irq_perf); +} + +static int lrng_irq_perf_reader(u8 *outbuf, u32 outbuflen) +{ + return lrng_testing_reader(&lrng_irq_perf, &boot_irq_perf, outbuf, + outbuflen); +} + +static ssize_t lrng_irq_perf_read(struct file *file, char __user *to, + size_t count, loff_t *ppos) +{ + return lrng_testing_extract_user(file, to, count, ppos, + lrng_irq_perf_reader); +} + +static const struct file_operations lrng_irq_perf_fops = { + .owner = THIS_MODULE, + .read = lrng_irq_perf_read, +}; + +#endif /* CONFIG_LRNG_IRQ_PERF */ + +/*********************************** ACVT ************************************/ + +#ifdef CONFIG_LRNG_ACVT_HASH + +/* maximum amount of data to be hashed as defined by ACVP */ +#define LRNG_ACVT_MAX_SHA_MSG (65536 >> 3) + +/* + * As we use static variables to store the data, it is clear that the + * test interface is only able to handle single threaded testing. This is + * considered to be sufficient for testing. If multi-threaded use of the + * ACVT test interface would be performed, the caller would get garbage + * but the kernel operation is unaffected by this. + */ +static u8 lrng_acvt_hash_data[LRNG_ACVT_MAX_SHA_MSG] + __aligned(LRNG_KCAPI_ALIGN); +static atomic_t lrng_acvt_hash_data_size = ATOMIC_INIT(0); +static u8 lrng_acvt_hash_digest[LRNG_ATOMIC_DIGEST_SIZE]; + +static ssize_t lrng_acvt_hash_write(struct file *file, const char __user *buf, + size_t nbytes, loff_t *ppos) +{ + if (nbytes > LRNG_ACVT_MAX_SHA_MSG) + return -EINVAL; + + atomic_set(&lrng_acvt_hash_data_size, (int)nbytes); + + return simple_write_to_buffer(lrng_acvt_hash_data, + LRNG_ACVT_MAX_SHA_MSG, ppos, buf, nbytes); +} + +static ssize_t lrng_acvt_hash_read(struct file *file, char __user *to, + size_t count, loff_t *ppos) +{ + SHASH_DESC_ON_STACK(shash, NULL); + const struct lrng_crypto_cb *crypto_cb = &lrng_cc20_crypto_cb; + ssize_t ret; + + if (count > LRNG_ATOMIC_DIGEST_SIZE) + return -EINVAL; + + ret = crypto_cb->lrng_hash_init(shash, NULL) ?: + crypto_cb->lrng_hash_update(shash, lrng_acvt_hash_data, + atomic_read_u32(&lrng_acvt_hash_data_size)) ?: + crypto_cb->lrng_hash_final(shash, lrng_acvt_hash_digest); + if (ret) + return ret; + + return simple_read_from_buffer(to, count, ppos, lrng_acvt_hash_digest, + sizeof(lrng_acvt_hash_digest)); +} + +static const struct file_operations lrng_acvt_hash_fops = { + .owner = THIS_MODULE, + .open = simple_open, + .llseek = default_llseek, + .read = lrng_acvt_hash_read, + .write = lrng_acvt_hash_write, +}; + +#endif /* CONFIG_LRNG_ACVT_DRNG */ + +/************************************************************************** + * Debugfs interface + **************************************************************************/ + +static int __init lrng_raw_init(void) +{ + struct dentry *lrng_raw_debugfs_root; + + lrng_raw_debugfs_root = debugfs_create_dir(KBUILD_MODNAME, NULL); + +#ifdef CONFIG_LRNG_RAW_HIRES_ENTROPY + debugfs_create_file_unsafe("lrng_raw_hires", 0400, + lrng_raw_debugfs_root, NULL, + &lrng_raw_hires_fops); +#endif +#ifdef CONFIG_LRNG_RAW_JIFFIES_ENTROPY + debugfs_create_file_unsafe("lrng_raw_jiffies", 0400, + lrng_raw_debugfs_root, NULL, + &lrng_raw_jiffies_fops); +#endif +#ifdef CONFIG_LRNG_RAW_IRQ_ENTROPY + debugfs_create_file_unsafe("lrng_raw_irq", 0400, lrng_raw_debugfs_root, + NULL, &lrng_raw_irq_fops); +#endif +#ifdef CONFIG_LRNG_RAW_IRQFLAGS_ENTROPY + debugfs_create_file_unsafe("lrng_raw_irqflags", 0400, + lrng_raw_debugfs_root, NULL, + &lrng_raw_irqflags_fops); +#endif +#ifdef CONFIG_LRNG_RAW_RETIP_ENTROPY + debugfs_create_file_unsafe("lrng_raw_retip", 0400, + lrng_raw_debugfs_root, NULL, + &lrng_raw_retip_fops); +#endif +#ifdef CONFIG_LRNG_RAW_REGS_ENTROPY + debugfs_create_file_unsafe("lrng_raw_regs", 0400, + lrng_raw_debugfs_root, NULL, + &lrng_raw_regs_fops); +#endif +#ifdef CONFIG_LRNG_RAW_ARRAY + debugfs_create_file_unsafe("lrng_raw_array", 0400, + lrng_raw_debugfs_root, NULL, + &lrng_raw_array_fops); +#endif +#ifdef CONFIG_LRNG_IRQ_PERF + debugfs_create_file_unsafe("lrng_irq_perf", 0400, lrng_raw_debugfs_root, + NULL, &lrng_irq_perf_fops); +#endif +#ifdef CONFIG_LRNG_ACVT_HASH + debugfs_create_file_unsafe("lrng_acvt_hash", 0600, + lrng_raw_debugfs_root, NULL, + &lrng_acvt_hash_fops); +#endif + + return 0; +} + +module_init(lrng_raw_init); diff -urN linux-5.15/include/crypto/drbg.h linux-5.15-lrng/include/crypto/drbg.h --- linux-5.15/include/crypto/drbg.h 2021-11-01 07:53:10.000000000 +1100 +++ linux-5.15-lrng/include/crypto/drbg.h 2021-11-29 12:37:31.183279025 +1100 @@ -278,4 +278,11 @@ DRBG_PREFIX3 }; +extern int drbg_alloc_state(struct drbg_state *drbg); +extern void drbg_dealloc_state(struct drbg_state *drbg); +extern void drbg_convert_tfm_core(const char *cra_driver_name, int *coreref, + bool *pr); +extern const struct drbg_core drbg_cores[]; +extern unsigned short drbg_sec_strength(drbg_flag_t flags); + #endif /* _DRBG_H */ diff -urN linux-5.15/include/crypto/internal/jitterentropy.h linux-5.15-lrng/include/crypto/internal/jitterentropy.h --- linux-5.15/include/crypto/internal/jitterentropy.h 1970-01-01 10:00:00.000000000 +1000 +++ linux-5.15-lrng/include/crypto/internal/jitterentropy.h 2021-11-29 12:37:52.903278942 +1100 @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: GPL-2.0-or-later + +extern void *jent_zalloc(unsigned int len); +extern void jent_zfree(void *ptr); +extern int jent_fips_enabled(void); +extern void jent_panic(char *s); +extern void jent_memcpy(void *dest, const void *src, unsigned int n); +extern void jent_get_nstime(__u64 *out); + +struct rand_data; +extern int jent_entropy_init(void); +extern int jent_read_entropy(struct rand_data *ec, unsigned char *data, + unsigned int len); + +extern struct rand_data *jent_entropy_collector_alloc(unsigned int osr, + unsigned int flags); +extern void jent_entropy_collector_free(struct rand_data *entropy_collector); diff -urN linux-5.15/include/linux/lrng.h linux-5.15-lrng/include/linux/lrng.h --- linux-5.15/include/linux/lrng.h 1970-01-01 10:00:00.000000000 +1000 +++ linux-5.15-lrng/include/linux/lrng.h 2021-11-29 12:36:52.113279174 +1100 @@ -0,0 +1,81 @@ +/* SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause */ +/* + * Copyright (C) 2018 - 2021, Stephan Mueller + */ + +#ifndef _LRNG_H +#define _LRNG_H + +#include +#include +#include + +/* + * struct lrng_crypto_cb - cryptographic callback functions + * @lrng_drng_name Name of DRNG + * @lrng_hash_name Name of Hash used for reading entropy pool + * @lrng_drng_alloc: Allocate DRNG -- the provided integer should be + * used for sanity checks. + * return: allocated data structure or PTR_ERR on + * error + * @lrng_drng_dealloc: Deallocate DRNG + * @lrng_drng_seed_helper: Seed the DRNG with data of arbitrary length + * drng: is pointer to data structure allocated + * with lrng_drng_alloc + * return: >= 0 on success, < 0 on error + * @lrng_drng_generate_helper: Generate random numbers from the DRNG with + * arbitrary length + * @lrng_hash_alloc: Allocate the hash for reading the entropy pool + * return: allocated data structure (NULL is + * success too) or ERR_PTR on error + * @lrng_hash_dealloc: Deallocate Hash + * @lrng_hash_digestsize: Return the digestsize for the used hash to read + * out entropy pool + * hash: is pointer to data structure allocated + * with lrng_hash_alloc + * return: size of digest of hash in bytes + * @lrng_hash_init: Initialize hash + * hash: is pointer to data structure allocated + * with lrng_hash_alloc + * return: 0 on success, < 0 on error + * @lrng_hash_update: Update hash operation + * hash: is pointer to data structure allocated + * with lrng_hash_alloc + * return: 0 on success, < 0 on error + * @lrng_hash_final Final hash operation + * hash: is pointer to data structure allocated + * with lrng_hash_alloc + * return: 0 on success, < 0 on error + * @lrng_hash_desc_zero Zeroization of hash state buffer + * + * Assumptions: + * + * 1. Hash operation will not sleep + * 2. The hash' volatile state information is provided with *shash by caller. + */ +struct lrng_crypto_cb { + const char *(*lrng_drng_name)(void); + const char *(*lrng_hash_name)(void); + void *(*lrng_drng_alloc)(u32 sec_strength); + void (*lrng_drng_dealloc)(void *drng); + int (*lrng_drng_seed_helper)(void *drng, const u8 *inbuf, u32 inbuflen); + int (*lrng_drng_generate_helper)(void *drng, u8 *outbuf, u32 outbuflen); + void *(*lrng_hash_alloc)(void); + void (*lrng_hash_dealloc)(void *hash); + u32 (*lrng_hash_digestsize)(void *hash); + int (*lrng_hash_init)(struct shash_desc *shash, void *hash); + int (*lrng_hash_update)(struct shash_desc *shash, const u8 *inbuf, + u32 inbuflen); + int (*lrng_hash_final)(struct shash_desc *shash, u8 *digest); + void (*lrng_hash_desc_zero)(struct shash_desc *shash); +}; + +/* Register cryptographic backend */ +#ifdef CONFIG_LRNG_DRNG_SWITCH +int lrng_set_drng_cb(const struct lrng_crypto_cb *cb); +#else /* CONFIG_LRNG_DRNG_SWITCH */ +static inline int +lrng_set_drng_cb(const struct lrng_crypto_cb *cb) { return -EOPNOTSUPP; } +#endif /* CONFIG_LRNG_DRNG_SWITCH */ + +#endif /* _LRNG_H */