lists.open-mesh.org
Sign In
Sign Up
Sign In
Sign Up
Manage this list
×
Keyboard Shortcuts
Thread View
j
: Next unread message
k
: Previous unread message
j a
: Jump to all threads
j l
: Jump to MailingList overview
2023
March
February
January
2022
December
November
October
September
August
July
June
May
April
March
February
January
2021
December
November
October
September
August
July
June
May
April
March
February
January
2020
December
November
October
September
August
July
June
May
April
March
February
January
2019
December
November
October
September
August
July
June
May
April
March
February
January
2018
December
November
October
September
August
July
June
May
April
March
February
January
2017
December
November
October
September
August
July
June
May
April
March
February
January
2016
December
November
October
September
August
July
June
May
April
March
February
January
2015
December
November
October
September
August
July
June
May
April
March
February
January
2014
December
November
October
September
August
July
June
May
April
March
February
January
2013
December
November
October
September
August
July
June
May
April
March
February
January
2012
December
November
October
September
August
July
June
May
April
March
February
January
2011
December
November
October
September
August
July
June
List overview
Download
linux-merge
July 2017
----- 2023 -----
March 2023
February 2023
January 2023
----- 2022 -----
December 2022
November 2022
October 2022
September 2022
August 2022
July 2022
June 2022
May 2022
April 2022
March 2022
February 2022
January 2022
----- 2021 -----
December 2021
November 2021
October 2021
September 2021
August 2021
July 2021
June 2021
May 2021
April 2021
March 2021
February 2021
January 2021
----- 2020 -----
December 2020
November 2020
October 2020
September 2020
August 2020
July 2020
June 2020
May 2020
April 2020
March 2020
February 2020
January 2020
----- 2019 -----
December 2019
November 2019
October 2019
September 2019
August 2019
July 2019
June 2019
May 2019
April 2019
March 2019
February 2019
January 2019
----- 2018 -----
December 2018
November 2018
October 2018
September 2018
August 2018
July 2018
June 2018
May 2018
April 2018
March 2018
February 2018
January 2018
----- 2017 -----
December 2017
November 2017
October 2017
September 2017
August 2017
July 2017
June 2017
May 2017
April 2017
March 2017
February 2017
January 2017
----- 2016 -----
December 2016
November 2016
October 2016
September 2016
August 2016
July 2016
June 2016
May 2016
April 2016
March 2016
February 2016
January 2016
----- 2015 -----
December 2015
November 2015
October 2015
September 2015
August 2015
July 2015
June 2015
May 2015
April 2015
March 2015
February 2015
January 2015
----- 2014 -----
December 2014
November 2014
October 2014
September 2014
August 2014
July 2014
June 2014
May 2014
April 2014
March 2014
February 2014
January 2014
----- 2013 -----
December 2013
November 2013
October 2013
September 2013
August 2013
July 2013
June 2013
May 2013
April 2013
March 2013
February 2013
January 2013
----- 2012 -----
December 2012
November 2012
October 2012
September 2012
August 2012
July 2012
June 2012
May 2012
April 2012
March 2012
February 2012
January 2012
----- 2011 -----
December 2011
November 2011
October 2011
September 2011
August 2011
July 2011
June 2011
linux-merge@lists.open-mesh.org
3 participants
43 discussions
Start a n
N
ew thread
Build check errors found: 2017-07-15
by postmaster@open-mesh.org
Name of failed tests ==================== master ------ * difference between net and batadv master maint ----- * difference between net and batadv maint Output of different failed tests ================================ maint: difference between net and batadv maint ---------------------------------------------- net/net/batman-adv/bat_iv_ogm.c | 9 +- net/net/batman-adv/bat_v.c | 2 net/net/batman-adv/bat_v_elp.c | 13 ++- net/net/batman-adv/bat_v_ogm.c | 6 - net/net/batman-adv/bridge_loop_avoidance.c | 73 ++++++++++---------- net/net/batman-adv/distributed-arp-table.c | 2 net/net/batman-adv/fragmentation.c | 3 net/net/batman-adv/icmp_socket.c | 2 net/net/batman-adv/main.h | 2 net/net/batman-adv/network-coding.c | 4 - net/net/batman-adv/routing.c | 4 - net/net/batman-adv/send.c | 6 - net/net/batman-adv/tp_meter.c | 9 +- net/net/batman-adv/translation-table.c | 21 +++-- 14 files changed, 81 insertions(+), 75 deletions(-) master: difference between net and batadv master ------------------------------------------------ netnext/net/batman-adv/bat_iv_ogm.c | 4 +++- netnext/net/batman-adv/bat_v_ogm.c | 4 ++-- netnext/net/batman-adv/distributed-arp-table.c | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) Statistics ========== master ------ Failed tests: 1 Started build tests: 73 Tested Linux versions: 29 Tested configs: 59 maint ----- Failed tests: 1 Started build tests: 76 Tested Linux versions: 31 Tested configs: 56
5 years, 8 months
1
0
0
0
Build check errors found: 2017-07-14
by postmaster@open-mesh.org
Name of failed tests ==================== master ------ * difference between net and batadv master maint ----- * difference between net and batadv maint Output of different failed tests ================================ maint: difference between net and batadv maint ---------------------------------------------- net/net/batman-adv/bat_iv_ogm.c | 9 +- net/net/batman-adv/bat_v.c | 2 net/net/batman-adv/bat_v_elp.c | 13 ++- net/net/batman-adv/bat_v_ogm.c | 6 - net/net/batman-adv/bridge_loop_avoidance.c | 73 ++++++++++---------- net/net/batman-adv/distributed-arp-table.c | 2 net/net/batman-adv/fragmentation.c | 3 net/net/batman-adv/icmp_socket.c | 2 net/net/batman-adv/main.h | 2 net/net/batman-adv/network-coding.c | 4 - net/net/batman-adv/routing.c | 4 - net/net/batman-adv/send.c | 6 - net/net/batman-adv/tp_meter.c | 9 +- net/net/batman-adv/translation-table.c | 21 +++-- 14 files changed, 81 insertions(+), 75 deletions(-) master: difference between net and batadv master ------------------------------------------------ netnext/net/batman-adv/bat_iv_ogm.c | 4 +++- netnext/net/batman-adv/bat_v_ogm.c | 4 ++-- netnext/net/batman-adv/distributed-arp-table.c | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) Statistics ========== master ------ Failed tests: 1 Started build tests: 59 Tested Linux versions: 27 Tested configs: 51 maint ----- Failed tests: 1 Started build tests: 68 Tested Linux versions: 28 Tested configs: 54
5 years, 8 months
1
0
0
0
Build check errors found: 2017-07-13
by postmaster@open-mesh.org
Name of failed tests ==================== master ------ * difference between net and batadv master maint ----- * difference between net and batadv maint Output of different failed tests ================================ maint: difference between net and batadv maint ---------------------------------------------- net/net/batman-adv/bat_iv_ogm.c | 9 +- net/net/batman-adv/bat_v.c | 2 net/net/batman-adv/bat_v_elp.c | 13 ++- net/net/batman-adv/bat_v_ogm.c | 6 - net/net/batman-adv/bridge_loop_avoidance.c | 73 ++++++++++---------- net/net/batman-adv/distributed-arp-table.c | 2 net/net/batman-adv/fragmentation.c | 3 net/net/batman-adv/icmp_socket.c | 2 net/net/batman-adv/main.h | 2 net/net/batman-adv/network-coding.c | 4 - net/net/batman-adv/routing.c | 4 - net/net/batman-adv/send.c | 6 - net/net/batman-adv/tp_meter.c | 9 +- net/net/batman-adv/translation-table.c | 21 +++-- 14 files changed, 81 insertions(+), 75 deletions(-) master: difference between net and batadv master ------------------------------------------------ netnext/net/batman-adv/bat_iv_ogm.c | 4 +++- netnext/net/batman-adv/bat_v_ogm.c | 4 ++-- netnext/net/batman-adv/distributed-arp-table.c | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) Statistics ========== master ------ Failed tests: 1 Started build tests: 70 Tested Linux versions: 28 Tested configs: 57 maint ----- Failed tests: 1 Started build tests: 64 Tested Linux versions: 27 Tested configs: 48
5 years, 8 months
1
0
0
0
Build check errors found: 2017-07-12
by postmaster@open-mesh.org
Name of failed tests ==================== master ------ * difference between net and batadv master maint ----- * difference between net and batadv maint Output of different failed tests ================================ maint: difference between net and batadv maint ---------------------------------------------- net/net/batman-adv/bat_iv_ogm.c | 9 +- net/net/batman-adv/bat_v.c | 2 net/net/batman-adv/bat_v_elp.c | 13 ++- net/net/batman-adv/bat_v_ogm.c | 6 - net/net/batman-adv/bridge_loop_avoidance.c | 73 ++++++++++---------- net/net/batman-adv/distributed-arp-table.c | 2 net/net/batman-adv/fragmentation.c | 3 net/net/batman-adv/icmp_socket.c | 2 net/net/batman-adv/main.h | 2 net/net/batman-adv/network-coding.c | 4 - net/net/batman-adv/routing.c | 4 - net/net/batman-adv/send.c | 6 - net/net/batman-adv/tp_meter.c | 9 +- net/net/batman-adv/translation-table.c | 21 +++-- 14 files changed, 81 insertions(+), 75 deletions(-) master: difference between net and batadv master ------------------------------------------------ netnext/net/batman-adv/bat_iv_ogm.c | 4 +++- netnext/net/batman-adv/bat_v_ogm.c | 4 ++-- netnext/net/batman-adv/distributed-arp-table.c | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) Statistics ========== master ------ Failed tests: 1 Started build tests: 66 Tested Linux versions: 27 Tested configs: 52 maint ----- Failed tests: 1 Started build tests: 75 Tested Linux versions: 29 Tested configs: 56
5 years, 8 months
1
0
0
0
[linux-next] LinuxNextTracking branch, master, updated. next-20170711
by batman@open-mesh.org
The following commit has been merged in the master branch: commit af3c8d98508d37541d4bf57f13a984a7f73a328c Merge: d3e3b7eac886fb1383db2f22b81550fa6d87f62f 00fc2c26bc46a64545cdf95a1511461ea9acecb4 Author: Linus Torvalds <torvalds(a)linux-foundation.org> Date: Sun Jul 9 18:48:37 2017 -0700 Merge tag 'drm-for-v4.13' of
git://people.freedesktop.org/~airlied/linux
Pull drm updates from Dave Airlie: "This is the main pull request for the drm, I think I've got one later driver pull for mediatek SoC driver, I'm undecided on if it needs to go to you yet. Otherwise summary below: Core drm: - Atomic add driver private objects - Deprecate preclose hook in modern drivers - MST bandwidth tracking - Use kvmalloc in more places - Add mode_valid hook for crtc/encoder/bridge - Reduce sync_file construction time - Documentation updates - New DRM synchronisation object support New drivers: - pl111 - pl111 CLCD display controller Panel: - Innolux P079ZCA panel driver - Add NL12880B20-05, NL192108AC18-02D, P320HVN03 panels - panel-samsung-s6e3ha2: Add s6e3hf2 panel support i915: - SKL+ watermark fixes - G4x/G33 reset improvements - DP AUX backlight improvements - Buffer based GuC/host communication - New getparam for (sub)slice infomation - Cannonlake and Coffeelake initial patches - Execbuf optimisations radeon/amdgpu: - Lots of Vega10 bug fixes - Preliminary raven support - KIQ support for compute rings - MEC queue management rework - DCE6 Audio support - SR-IOV improvements - Better radeon/amdgpu selection support nouveau: - HDMI stereoscopic support - Display code rework for >= GM20x GPUs msm: - GEM rework for fine-grained locking - Per-process pagetable work - HDMI fixes for Snapdragon 820. vc4: - Remove 256MB CMA limit from vc4 - Add out-fence support - Add support for cygnus - Get/set tiling ioctls support - Add T-format tiling support for scanout zte: - add VGA support. etnaviv: - Thermal throttle support for newer GPUs - Restore userspace buffer cache performance - dma-buf sync fix stm: - add stm32f429 display support exynos: - Rework vblank handling - Fixup sw-trigger code sun4i: - V3s display engine support - HDMI support for older SoCs - Preliminary work on dual-pipeline SoCs. rcar-du: - VSP work imx-drm: - Remove counter load enable from PRE - Double read/write reduction flag support tegra: - Documentation for the host1x and drm driver. - Lots of staging ioctl fixes due to grate project work. omapdrm: - dma-buf fence support - TILER rotation fixes" * tag 'drm-for-v4.13' of
git://people.freedesktop.org/~airlied/linux
: (1270 commits) drm: Remove unused drm_file parameter to drm_syncobj_replace_fence() drm/amd/powerplay: fix bug fail to remove sysfs when rmmod amdgpu. amdgpu: Set cik/si_support to 1 by default if radeon isn't built drm/amdgpu/gfx9: fix driver reload with KIQ drm/amdgpu/gfx8: fix driver reload with KIQ drm/amdgpu: Don't call amd_powerplay_destroy() if we don't have powerplay drm/ttm: Fix use-after-free in ttm_bo_clean_mm drm/amd/amdgpu: move get memory type function from early init to sw init drm/amdgpu/cgs: always set reference clock in mode_info drm/amdgpu: fix vblank_time when displays are off drm/amd/powerplay: power value format change for Vega10 drm/amdgpu/gfx9: support the amdgpu.disable_cu option drm/amd/powerplay: change PPSMC_MSG_GetCurrPkgPwr for Vega10 drm/amdgpu: Make amdgpu_cs_parser_init static (v2) drm/amdgpu/cs: fix a typo in a comment drm/amdgpu: Fix the exported always on CU bitmap drm/amdgpu/gfx9: gfx_v9_0_enable_gfx_static_mg_power_gating() can be static drm/amdgpu/psp: upper_32_bits/lower_32_bits for address setup drm/amd/powerplay/cz: print message if smc message fails drm/amdgpu: fix typo in amdgpu_debugfs_test_ib_init ... diff --combined Documentation/devicetree/bindings/vendor-prefixes.txt index 52cfd5f97b6b,f08284e7439b..daf465bef758 --- a/Documentation/devicetree/bindings/vendor-prefixes.txt +++ b/Documentation/devicetree/bindings/vendor-prefixes.txt @@@ -5,7 -5,6 +5,7 @@@ using them to avoid name-space collisio abcn Abracon Corporation abilis Abilis Systems +actions Actions Semiconductor Co., Ltd. active-semi Active-Semi International Inc ad Avionic Design GmbH adapteva Adapteva, Inc. @@@ -29,7 -28,6 +29,7 @@@ andestech Andes Technology Corporatio apm Applied Micro Circuits Corporation (APM) aptina Aptina Imaging arasan Arasan Chip Systems +arctic Arctic Sand aries Aries Embedded GmbH arm ARM Ltd. armadeus ARMadeus Systems SARL @@@ -46,7 -44,6 +46,7 @@@ avia avia semiconducto avic Shanghai AVIC Optoelectronics Co., Ltd. axentia Axentia Technologies AB axis Axis Communications AB +bananapi BIPAI KEJI LIMITED boe BOE Technology Group Co., Ltd. bosch Bosch Sensortec GmbH boundary Boundary Devices Inc. @@@ -161,8 -158,6 +161,8 @@@ iom Iomega Corporatio isee ISEE 2007 S.L. isil Intersil issi Integrated Silicon Solutions Inc. +itead ITEAD Intelligent Systems Co.Ltd +iwave iWave Systems Technologies Pvt. Ltd. jdi Japan Display Inc. jedec JEDEC Solid State Technology Association karo Ka-Ro electronics GmbH @@@ -170,7 -165,6 +170,7 @@@ keithkoep Keith & Koep Gmb keymile Keymile GmbH khadas Khadas kinetic Kinetic Technologies +kingnovel Kingnovel Technology Co., Ltd. kosagi Sutajio Ko-Usagi PTE Ltd. kyo Kyocera Corporation lacie LaCie @@@ -178,10 -172,8 +178,10 @@@ lantiq Lantiq Semiconducto lego LEGO Systems A/S lenovo Lenovo Group Ltd. lg LG Corporation +libretech Shenzhen Libre Technology Co., Ltd licheepi Lichee Pi linaro Linaro Limited +linksys Belkin International, Inc. (Linksys) linux Linux-specific binding lltc Linear Technology Corporation lsi LSI Corp. (LSI Logic) @@@ -227,6 -219,7 +227,7 @@@ nexbox Nexbo newhaven Newhaven Display International ni National Instruments nintendo Nintendo + nlt NLT Technologies, Ltd. nokia Nokia nordic Nordic Semiconductor nuvoton Nuvoton Technology Corporation @@@ -274,10 -267,8 +275,10 @@@ renesas Renesas Electronics Corporatio richtek Richtek Technology Corporation ricoh Ricoh Co. Ltd. rikomagic Rikomagic Tech Corp. Ltd +riscv RISC-V Foundation rockchip Fuzhou Rockchip Electronics Co., Ltd rohm ROHM Semiconductor Co., Ltd +roofull Shenzhen Roofull Technology Co, Ltd samsung Samsung Semiconductor samtec Samtec/Softing company sandisk Sandisk Corporation @@@ -341,7 -332,6 +342,7 @@@ tronfy Tronf tronsmart Tronsmart truly Truly Semiconductors Limited tyan Tyan Computer Corporation +ucrobotics uCRobotics udoo Udoo uniwest United Western Technologies Corp (UniWest) upisemi uPI Semiconductor Corp. @@@ -367,7 -357,6 +368,7 @@@ xlnx Xilin xunlong Shenzhen Xunlong Software CO.,Limited zarlink Zarlink Semiconductor zeitec ZEITEC Semiconductor Co., LTD. +zidoo Shenzhen Zidoo Technology Co., Ltd. zii Zodiac Inflight Innovations zte ZTE Corp. zyxel ZyXEL Communications Corp. diff --combined Documentation/gpu/todo.rst index 6162d0e9dc28,95a517077eb0..1ae42006deea --- a/Documentation/gpu/todo.rst +++ b/Documentation/gpu/todo.rst @@@ -177,19 -177,6 +177,6 @@@ following drivers still use ``struct_mu Contact: Daniel Vetter, respective driver maintainers - Switch to drm_connector_list_iter for any connector_list walking - ---------------------------------------------------------------- - - Connectors can be hotplugged, and we now have a special list of helpers to walk - the connector_list in a race-free fashion, without incurring deadlocks on - mutexes and other fun stuff. - - Unfortunately most drivers are not converted yet. At least all those supporting - DP MST hotplug should be converted, since for those drivers the difference - matters. See drm_for_each_connector_iter() vs. drm_for_each_connector(). - - Contact: Daniel Vetter - Core refactorings ================= @@@ -228,7 -215,7 +215,7 @@@ The DRM reference documentation is stil task would be to clean up interfaces like moving functions around between files to better group them and improving the interfaces like dropping return values for functions that never fail. Then write kerneldoc for all exported -functions and an overview section and integrate it all into the drm DocBook. +functions and an overview section and integrate it all into the drm book. See
https://dri.freedesktop.org/docs/drm/
for what's there already. diff --combined MAINTAINERS index 01dffc0a9e1f,068fd67bb637..7ad8107b47db --- a/MAINTAINERS +++ b/MAINTAINERS @@@ -155,7 -155,7 +155,7 @@@ S: Maintaine F: drivers/scsi/53c700* 6LOWPAN GENERIC (BTLE/IEEE 802.15.4) -M: Alexander Aring <aar(a)pengutronix.de> +M: Alexander Aring <alex.aring(a)gmail.com> M: Jukka Rissanen <jukka.rissanen(a)linux.intel.com> L: linux-bluetooth(a)vger.kernel.org L: linux-wpan(a)vger.kernel.org @@@ -478,7 -478,7 +478,7 @@@ L: linux-hwmon(a)vger.kernel.or S: Maintained F: Documentation/hwmon/ads1015 F: drivers/hwmon/ads1015.c -F: include/linux/i2c/ads1015.h +F: include/linux/platform_data/ads1015.h ADT746X FAN DRIVER M: Colin Leroy <colin(a)colino.net> @@@ -1036,22 -1036,6 +1036,22 @@@ S: Maintaine F: drivers/amba/ F: include/linux/amba/bus.h +ARM/ACTIONS SEMI ARCHITECTURE +M: Andreas Färber <afaerber(a)suse.de> +L: linux-arm-kernel(a)lists.infradead.org (moderated for non-subscribers) +S: Maintained +N: owl +F: arch/arm/mach-actions/ +F: arch/arm/boot/dts/owl-* +F: arch/arm64/boot/dts/actions/ +F: drivers/clocksource/owl-* +F: drivers/soc/actions/ +F: include/dt-bindings/power/owl-* +F: include/linux/soc/actions/ +F: Documentation/devicetree/bindings/arm/actions.txt +F: Documentation/devicetree/bindings/power/actions,owl-sps.txt +F: Documentation/devicetree/bindings/timer/actions,owl-timer.txt + ARM/ADS SPHERE MACHINE SUPPORT M: Lennert Buytenhek <kernel(a)wantstofly.org> L: linux-arm-kernel(a)lists.infradead.org (moderated for non-subscribers) @@@ -1223,9 -1207,7 +1223,9 @@@ L: linux-arm-kernel(a)lists.infradead.or S: Maintained F: drivers/hwtracing/coresight/* F: Documentation/trace/coresight.txt +F: Documentation/trace/coresight-cpu-debug.txt F: Documentation/devicetree/bindings/arm/coresight.txt +F: Documentation/devicetree/bindings/arm/coresight-cpu-debug.txt F: Documentation/ABI/testing/sysfs-bus-coresight-devices-* F: tools/perf/arch/arm/util/pmu.c F: tools/perf/arch/arm/util/auxtrace.c @@@ -1515,7 -1497,6 +1515,7 @@@ F: arch/arm64/boot/dts/marvell/armada 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/Marvell Berlin SoC support @@@ -1682,6 -1663,7 +1682,6 @@@ F: arch/arm/mach-qcom F: arch/arm64/boot/dts/qcom/* F: drivers/i2c/busses/i2c-qup.c F: drivers/clk/qcom/ -F: drivers/pinctrl/qcom/ F: drivers/dma/qcom/ F: drivers/soc/qcom/ F: drivers/spi/spi-qup.c @@@ -1697,13 -1679,6 +1697,13 @@@ M: Lennert Buytenhek <kernel@wantstofly L: linux-arm-kernel(a)lists.infradead.org (moderated for non-subscribers) S: Maintained +ARM/REALTEK ARCHITECTURE +M: Andreas Färber <afaerber(a)suse.de> +L: linux-arm-kernel(a)lists.infradead.org (moderated for non-subscribers) +S: Maintained +F: arch/arm64/boot/dts/realtek/ +F: Documentation/devicetree/bindings/arm/realtek.txt + ARM/RENESAS ARM64 ARCHITECTURE M: Simon Horman <horms(a)verge.net.au> M: Magnus Damm <magnus.damm(a)gmail.com> @@@ -1737,7 -1712,6 +1737,7 @@@ L: linux-rockchip(a)lists.infradead.or T: git
git://git.kernel.org/pub/scm/linux/kernel/git/mmind/linux-rockchip.git
S: Maintained F: arch/arm/boot/dts/rk3* +F: arch/arm/boot/dts/rv1108* F: arch/arm/mach-rockchip/ F: drivers/clk/rockchip/ F: drivers/i2c/busses/i2c-rk3x.c @@@ -1802,12 -1776,11 +1802,12 @@@ F: arch/arm/plat-samsung/s5p-dev-mfc. F: drivers/media/platform/s5p-mfc/ ARM/SAMSUNG S5P SERIES HDMI CEC SUBSYSTEM SUPPORT -M: Kyungmin Park <kyungmin.park(a)samsung.com> -L: linux-arm-kernel(a)lists.infradead.org +M: Marek Szyprowski <m.szyprowski(a)samsung.com> +L: linux-samsung-soc(a)vger.kernel.org (moderated for non-subscribers) L: linux-media(a)vger.kernel.org S: Maintained -F: drivers/staging/media/platform/s5p-cec/ +F: drivers/media/platform/s5p-cec/ +F: Documentation/devicetree/bindings/media/s5p-cec.txt ARM/SAMSUNG S5P SERIES JPEG CODEC SUPPORT M: Andrzej Pietrasiewicz <andrzej.p(a)samsung.com> @@@ -1870,8 -1843,8 +1870,8 @@@ F: drivers/i2c/busses/i2c-st. F: drivers/media/rc/st_rc.c F: drivers/media/platform/sti/c8sectpfe/ F: drivers/mmc/host/sdhci-st.c -F: drivers/phy/phy-miphy28lp.c -F: drivers/phy/phy-stih407-usb.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 @@@ -2349,15 -2322,6 +2349,15 @@@ F: Documentation/devicetree/bindings/in F: drivers/input/touchscreen/atmel_mxt_ts.c F: include/linux/platform_data/atmel_mxt_ts.h +ATOMIC INFRASTRUCTURE +M: Will Deacon <will.deacon(a)arm.com> +M: Peter Zijlstra <peterz(a)infradead.org> +R: Boqun Feng <boqun.feng(a)gmail.com> +L: linux-kernel(a)vger.kernel.org +S: Maintained +F: arch/*/include/asm/atomic*.h +F: include/*/atomic*.h + ATTO EXPRESSSAS SAS/SATA RAID SCSI DRIVER M: Bradley Grove <linuxdrivers(a)attotech.com> L: linux-scsi(a)vger.kernel.org @@@ -2631,21 -2595,6 +2631,21 @@@ S: Maintaine F: net/bluetooth/ F: include/net/bluetooth/ +DMA MAPPING HELPERS +M: Christoph Hellwig <hch(a)lst.de> +M: Marek Szyprowski <m.szyprowski(a)samsung.com> +R: Robin Murphy <robin.murphy(a)arm.com> +L: linux-kernel(a)vger.kernel.org +T: git
git://git.infradead.org/users/hch/dma-mapping.git
+W:
http://git.infradead.org/users/hch/dma-mapping.git
+S: Supported +F: lib/dma-debug.c +F: lib/dma-noop.c +F: lib/dma-virt.c +F: drivers/base/dma-mapping.c +F: drivers/base/dma-coherent.c +F: include/linux/dma-mapping.h + BONDING DRIVER M: Jay Vosburgh <j.vosburgh(a)gmail.com> M: Veaceslav Falico <vfalico(a)gmail.com> @@@ -2736,6 -2685,7 +2736,6 @@@ N: kon F: arch/arm/mach-bcm/ BROADCOM BCM2835 ARM ARCHITECTURE -M: Lee Jones <lee(a)kernel.org> M: Eric Anholt <eric(a)anholt.net> M: Stefan Wahren <stefan.wahren(a)i2se.com> L: linux-rpi-kernel(a)lists.infradead.org (moderated for non-subscribers) @@@ -2835,11 -2785,8 +2835,11 @@@ BROADCOM BRCM80211 IEEE802.11n WIRELES M: Arend van Spriel <arend.vanspriel(a)broadcom.com> M: Franky Lin <franky.lin(a)broadcom.com> M: Hante Meuleman <hante.meuleman(a)broadcom.com> +M: Chi-Hsien Lin <chi-hsien.lin(a)cypress.com> +M: Wright Feng <wright.feng(a)cypress.com> L: linux-wireless(a)vger.kernel.org L: brcm80211-dev-list.pdl(a)broadcom.com +L: brcm80211-dev-list(a)cypress.com S: Supported F: drivers/net/wireless/broadcom/brcm80211/ @@@ -3017,7 -2964,7 +3017,7 @@@ F: sound/pci/oxygen C6X ARCHITECTURE M: Mark Salter <msalter(a)redhat.com> -M: Aurelien Jacquiot <a-jacquiot(a)ti.com> +M: Aurelien Jacquiot <jacquiot.aurelien(a)gmail.com> L: linux-c6x-dev(a)linux-c6x.org W:
http://www.linux-c6x.org/wiki/index.php/Main_Page
S: Maintained @@@ -3190,7 -3137,6 +3190,7 @@@ F: include/media/cec. F: include/media/cec-notifier.h F: include/uapi/linux/cec.h F: include/uapi/linux/cec-funcs.h +F: Documentation/devicetree/bindings/media/cec.txt CELL BROADBAND ENGINE ARCHITECTURE M: Arnd Bergmann <arnd(a)arndb.de> @@@ -3640,6 -3586,7 +3640,6 @@@ T: git
git://git.kernel.org/pub/scm/lin
S: Maintained F: Documentation/crypto/ F: Documentation/devicetree/bindings/crypto/ -F: Documentation/DocBook/crypto-API.tmpl F: arch/*/crypto/ F: crypto/ F: drivers/crypto/ @@@ -3766,13 -3713,6 +3766,13 @@@ S: Supporte F: drivers/infiniband/hw/cxgb4/ F: include/uapi/rdma/cxgb4-abi.h +CXGB4 CRYPTO DRIVER (chcr) +M: Harsh Jain <harsh(a)chelsio.com> +L: linux-crypto(a)vger.kernel.org +W:
http://www.chelsio.com
+S: Supported +F: drivers/crypto/chelsio + CXGB4VF ETHERNET DRIVER (CXGB4VF) M: Casey Leedom <leedom(a)chelsio.com> L: netdev(a)vger.kernel.org @@@ -3781,8 -3721,8 +3781,8 @@@ S: Supporte F: drivers/net/ethernet/chelsio/cxgb4vf/ CXL (IBM Coherent Accelerator Processor Interface CAPI) DRIVER -M: Ian Munsie <imunsie(a)au1.ibm.com> M: Frederic Barrat <fbarrat(a)linux.vnet.ibm.com> +M: Andrew Donnellan <andrew.donnellan(a)au1.ibm.com> L: linuxppc-dev(a)lists.ozlabs.org S: Supported F: arch/powerpc/platforms/powernv/pci-cxl.c @@@ -3846,12 -3786,6 +3846,12 @@@ S: Supporte F: drivers/input/touchscreen/cyttsp* F: include/linux/input/cyttsp.h +D-LINK DIR-685 TOUCHKEYS DRIVER +M: Linus Walleij <linus.walleij(a)linaro.org> +L: linux-input(a)vger.kernel.org +S: Supported +F: drivers/input/dlink-dir685-touchkeys.c + DALLAS/MAXIM DS1685-FAMILY REAL TIME CLOCK M: Joshua Kinard <kumba(a)gentoo.org> S: Maintained @@@ -4054,10 -3988,7 +4054,10 @@@ W:
http://www.dialog-semiconductor.com/
S: Supported F: Documentation/hwmon/da90?? F: Documentation/devicetree/bindings/mfd/da90*.txt +F: Documentation/devicetree/bindings/input/da90??-onkey.txt +F: Documentation/devicetree/bindings/thermal/da90??-thermal.txt F: Documentation/devicetree/bindings/regulator/da92*.txt +F: Documentation/devicetree/bindings/watchdog/da92??-wdt.txt F: Documentation/devicetree/bindings/sound/da[79]*.txt F: drivers/gpio/gpio-da90??.c F: drivers/hwmon/da90??-hwmon.c @@@ -4072,7 -4003,6 +4072,7 @@@ F: drivers/power/supply/da9052-battery. F: drivers/power/supply/da91??-*.c F: drivers/regulator/da903x.c F: drivers/regulator/da9???-regulator.[ch] +F: drivers/thermal/da90??-thermal.c F: drivers/rtc/rtc-da90??.c F: drivers/video/backlight/da90??_bl.c F: drivers/watchdog/da90??_wdt.c @@@ -4213,7 -4143,8 +4213,7 @@@ M: Jonathan Corbet <corbet(a)lwn.net L: linux-doc(a)vger.kernel.org S: Maintained F: Documentation/ -F: scripts/docproc.c -F: scripts/kernel-doc* +F: scripts/kernel-doc X: Documentation/ABI/ X: Documentation/devicetree/ X: Documentation/acpi @@@ -4304,6 -4235,12 +4304,12 @@@ F: include/drm/drm F: include/uapi/drm/drm* F: include/linux/vga* + DRM DRIVER FOR ARM PL111 CLCD + M: Eric Anholt <eric(a)anholt.net> + T: git
git://anongit.freedesktop.org/drm/drm-misc
+ S: Supported + F: drivers/gpu/drm/pl111/ + DRM DRIVER FOR AST SERVER GRAPHICS CHIPS M: Dave Airlie <airlied(a)redhat.com> S: Odd Fixes @@@ -4311,6 -4248,8 +4317,8 @@@ F: drivers/gpu/drm/ast DRM DRIVERS FOR BRIDGE CHIPS M: Archit Taneja <architt(a)codeaurora.org> + M: Andrzej Hajda <a.hajda(a)samsung.com> + R: Laurent Pinchart <Laurent.pinchart(a)ideasonboard.com> S: Maintained T: git
git://anongit.freedesktop.org/drm/drm-misc
F: drivers/gpu/drm/bridge/ @@@ -4567,6 -4506,17 +4575,17 @@@ S: Maintaine F: drivers/gpu/drm/sti F: Documentation/devicetree/bindings/display/st,stih4xx.txt + DRM DRIVERS FOR STM + M: Yannick Fertre <yannick.fertre(a)st.com> + M: Philippe Cornu <philippe.cornu(a)st.com> + M: Benjamin Gaignard <benjamin.gaignard(a)linaro.org> + M: Vincent Abriou <vincent.abriou(a)st.com> + L: dri-devel(a)lists.freedesktop.org + T: git
git://anongit.freedesktop.org/drm/drm-misc
+ S: Maintained + F: drivers/gpu/drm/stm + F: Documentation/devicetree/bindings/display/st,stm32-ltdc.txt + DRM DRIVER FOR TDFX VIDEO CARDS S: Orphan / Obsolete F: drivers/gpu/drm/tdfx/ @@@ -4761,13 -4711,6 +4780,13 @@@ S: Maintaine F: drivers/media/usb/dvb-usb-v2/dvb_usb* F: drivers/media/usb/dvb-usb-v2/usb_urb.c +DONGWOON DW9714 LENS VOICE COIL DRIVER +M: Sakari Ailus <sakari.ailus(a)linux.intel.com> +L: linux-media(a)vger.kernel.org +T: git
git://linuxtv.org/media_tree.git
+S: Maintained +F: drivers/media/i2c/dw9714.c + DYNAMIC DEBUG M: Jason Baron <jbaron(a)akamai.com> S: Maintained @@@ -5075,12 -5018,6 +5094,12 @@@ T: git
git://git.kernel.org/pub/scm/lin
F: drivers/video/fbdev/s1d13xxxfb.c F: include/video/s1d13xxxfb.h +ERRSEQ ERROR TRACKING INFRASTRUCTURE +M: Jeff Layton <jlayton(a)poochiereds.net> +S: Maintained +F: lib/errseq.c +F: include/linux/errseq.h + ET131X NETWORK DRIVER M: Mark Einon <mark.einon(a)gmail.com> S: Odd Fixes @@@ -5364,7 -5301,7 +5383,7 @@@ S: Maintaine F: drivers/video/fbdev/fsl-diu-fb.* FREESCALE DMA DRIVER -M: Li Yang <leoli(a)freescale.com> +M: Li Yang <leoyang.li(a)nxp.com> M: Zhang Wei <zw(a)zh-kernel.org> L: linuxppc-dev(a)lists.ozlabs.org S: Maintained @@@ -5429,11 -5366,11 +5448,11 @@@ S: Maintaine F: drivers/net/ethernet/freescale/dpaa FREESCALE SOC DRIVERS -M: Scott Wood <oss(a)buserror.net> +M: Li Yang <leoyang.li(a)nxp.com> L: linuxppc-dev(a)lists.ozlabs.org L: linux-arm-kernel(a)lists.infradead.org S: Maintained -F: Documentation/devicetree/bindings/powerpc/fsl/ +F: Documentation/devicetree/bindings/soc/fsl/ F: drivers/soc/fsl/ F: include/linux/fsl/ @@@ -5446,14 -5383,14 +5465,14 @@@ F: include/soc/fsl/*qe*. F: include/soc/fsl/*ucc*.h FREESCALE USB PERIPHERAL DRIVERS -M: Li Yang <leoli(a)freescale.com> +M: Li Yang <leoyang.li(a)nxp.com> L: linux-usb(a)vger.kernel.org L: linuxppc-dev(a)lists.ozlabs.org S: Maintained F: drivers/usb/gadget/udc/fsl* FREESCALE QUICC ENGINE UCC ETHERNET DRIVER -M: Li Yang <leoli(a)freescale.com> +M: Li Yang <leoyang.li(a)nxp.com> L: netdev(a)vger.kernel.org L: linuxppc-dev(a)lists.ozlabs.org S: Maintained @@@ -5763,15 -5700,6 +5782,15 @@@ F: include/asm-generic/gpio. F: include/uapi/linux/gpio.h F: tools/gpio/ +GPIO ACPI SUPPORT +M: Mika Westerberg <mika.westerberg(a)linux.intel.com> +M: Andy Shevchenko <andriy.shevchenko(a)linux.intel.com> +L: linux-gpio(a)vger.kernel.org +L: linux-acpi(a)vger.kernel.org +S: Maintained +F: Documentation/acpi/gpio-properties.txt +F: drivers/gpio/gpiolib-acpi.c + GRE DEMULTIPLEXER DRIVER M: Dmitry Kozlov <xeb(a)mail.ru> L: netdev(a)vger.kernel.org @@@ -6116,7 -6044,7 +6135,7 @@@ F: drivers/hid/hid-sensor- F: drivers/iio/*/hid-* F: include/linux/hid-sensor-* -HIGH-RESOLUTION TIMERS, CLOCKEVENTS, DYNTICKS +HIGH-RESOLUTION TIMERS, CLOCKEVENTS M: Thomas Gleixner <tglx(a)linutronix.de> L: linux-kernel(a)vger.kernel.org T: git
git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git
timers/core @@@ -6124,6 -6052,7 +6143,6 @@@ S: Maintaine F: Documentation/timers/ F: kernel/time/hrtimer.c F: kernel/time/clockevents.c -F: kernel/time/tick*.* F: kernel/time/timer_*.c F: include/linux/clockchips.h F: include/linux/hrtimer.h @@@ -6516,7 -6445,7 +6535,7 @@@ F: Documentation/cdrom/ide-c F: drivers/ide/ide-cd* IEEE 802.15.4 SUBSYSTEM -M: Alexander Aring <aar(a)pengutronix.de> +M: Alexander Aring <alex.aring(a)gmail.com> M: Stefan Schmidt <stefan(a)osg.samsung.com> L: linux-wpan(a)vger.kernel.org W:
http://wpan.cakelab.org/
@@@ -6570,13 -6499,6 +6589,13 @@@ F: Documentation/ABI/testing/sysfs-bus- F: Documentation/devicetree/bindings/iio/adc/envelope-detector.txt F: drivers/iio/adc/envelope-detector.c +IIO MULTIPLEXER +M: Peter Rosin <peda(a)axentia.se> +L: linux-iio(a)vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/iio/multiplexer/iio-mux.txt +F: drivers/iio/multiplexer/iio-mux.c + IIO SUBSYSTEM AND DRIVERS M: Jonathan Cameron <jic23(a)kernel.org> R: Hartmut Knaack <knaack.h(a)gmx.de> @@@ -6694,10 -6616,8 +6713,10 @@@ S: Maintaine F: drivers/input/ F: include/linux/input.h F: include/uapi/linux/input.h +F: include/uapi/linux/input-event-codes.h F: include/linux/input/ F: Documentation/devicetree/bindings/input/ +F: Documentation/input/ INPUT MULTITOUCH (MT) PROTOCOL M: Henrik Rydberg <rydberg(a)bitmath.org> @@@ -6707,12 -6627,6 +6726,12 @@@ F: Documentation/input/multi-touch-prot F: drivers/input/input-mt.c K: \b(ABS|SYN)_MT_ +INSIDE SECURE CRYPTO DRIVER +M: Antoine Tenart <antoine.tenart(a)free-electrons.com> +F: drivers/crypto/inside-secure/ +S: Maintained +L: linux-crypto(a)vger.kernel.org + INTEL ASoC BDW/HSW DRIVERS M: Jie Yang <yang.jie(a)linux.intel.com> L: alsa-devel(a)alsa-project.org (moderated for non-subscribers) @@@ -6842,7 -6756,6 +6861,7 @@@ F: Documentation/networking/i40e.tx F: Documentation/networking/i40evf.txt F: drivers/net/ethernet/intel/ F: drivers/net/ethernet/intel/*/ +F: include/linux/avf/virtchnl.h INTEL RDMA RNIC DRIVER M: Faisal Latif <faisal.latif(a)intel.com> @@@ -7350,10 -7263,9 +7369,10 @@@ KERNEL SELFTEST FRAMEWOR M: Shuah Khan <shuahkh(a)osg.samsung.com> M: Shuah Khan <shuah(a)kernel.org> L: linux-kselftest(a)vger.kernel.org -T: git
git://git.kernel.org/pub/scm/shuah/linux-kselftest
+T: git
git://git.kernel.org/pub/scm/linux/kernel/git/shuah/linux-kselftest.git
S: Maintained -F: tools/testing/selftests +F: tools/testing/selftests/ +F: Documentation/dev-tools/kselftest* KERNEL VIRTUAL MACHINE (KVM) M: Paolo Bonzini <pbonzini(a)redhat.com> @@@ -7392,7 -7304,7 +7411,7 @@@ F: arch/powerpc/kvm KERNEL VIRTUAL MACHINE for s390 (KVM/s390) M: Christian Borntraeger <borntraeger(a)de.ibm.com> -M: Cornelia Huck <cornelia.huck(a)de.ibm.com> +M: Cornelia Huck <cohuck(a)redhat.com> L: linux-s390(a)vger.kernel.org W:
http://www.ibm.com/developerworks/linux/linux390/
T: git
git://git.kernel.org/pub/scm/linux/kernel/git/kvms390/linux.git
@@@ -7455,7 -7367,7 +7474,7 @@@ KEYS/KEYRINGS M: David Howells <dhowells(a)redhat.com> L: keyrings(a)vger.kernel.org S: Maintained -F: Documentation/security/keys.txt +F: Documentation/security/keys/core.rst F: include/linux/key.h F: include/linux/key-type.h F: include/linux/keyctl.h @@@ -7469,7 -7381,7 +7488,7 @@@ M: Mimi Zohar <zohar(a)linux.vnet.ibm.com L: linux-security-module(a)vger.kernel.org L: keyrings(a)vger.kernel.org S: Supported -F: Documentation/security/keys-trusted-encrypted.txt +F: Documentation/security/keys/trusted-encrypted.rst F: include/keys/trusted-type.h F: security/keys/trusted.c F: security/keys/trusted.h @@@ -7480,7 -7392,7 +7499,7 @@@ M: David Safford <safford(a)us.ibm.com L: linux-security-module(a)vger.kernel.org L: keyrings(a)vger.kernel.org S: Supported -F: Documentation/security/keys-trusted-encrypted.txt +F: Documentation/security/keys/trusted-encrypted.rst F: include/keys/encrypted-type.h F: security/keys/encrypted-keys/ @@@ -7490,7 -7402,7 +7509,7 @@@ W:
http://kgdb.wiki.kernel.org
L: kgdb-bugreport(a)lists.sourceforge.net T: git
git://git.kernel.org/pub/scm/linux/kernel/git/jwessel/kgdb.git
S: Maintained -F: Documentation/DocBook/kgdb.tmpl +F: Documentation/dev-tools/kgdb.rst F: drivers/misc/kgdbts.c F: drivers/tty/serial/kgdboc.c F: include/linux/kdb.h @@@ -7644,15 -7556,6 +7663,15 @@@ S: Maintaine F: drivers/ata/pata_*.c F: drivers/ata/ata_generic.c +LIBATA PATA FARADAY FTIDE010 AND GEMINI SATA BRIDGE DRIVERS +M: Linus Walleij <linus.walleij(a)linaro.org> +L: linux-ide(a)vger.kernel.org +T: git
git://git.kernel.org/pub/scm/linux/kernel/git/tj/libata.git
+S: Maintained +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 <hdegoede(a)redhat.com> M: Tejun Heo <tj(a)kernel.org> @@@ -7671,7 -7574,7 +7690,7 @@@ S: Maintaine F: drivers/ata/sata_promise.* LIBLOCKDEP -M: Sasha Levin <sasha.levin(a)oracle.com> +M: Sasha Levin <alexander.levin(a)verizon.com> S: Maintained F: tools/lib/lockdep/ @@@ -7707,7 -7610,9 +7726,7 @@@ M: Ross Zwisler <ross.zwisler(a)linux.int L: linux-nvdimm(a)lists.01.org Q:
https://patchwork.kernel.org/project/linux-nvdimm/list/
S: Supported -F: drivers/nvdimm/pmem.c -F: include/linux/pmem.h -F: arch/*/include/asm/pmem.h +F: drivers/nvdimm/pmem* LIGHTNVM PLATFORM SUPPORT M: Matias Bjorling <mb(a)lightnvm.io> @@@ -7798,7 -7703,6 +7817,7 @@@ T: git
git://git.kernel.org/pub/scm/lin
S: Maintained F: arch/powerpc/platforms/83xx/ F: arch/powerpc/platforms/85xx/ +F: Documentation/devicetree/bindings/powerpc/fsl/ LINUX FOR POWERPC PA SEMI PWRFICIENT L: linuxppc-dev(a)lists.ozlabs.org @@@ -8092,12 -7996,6 +8111,12 @@@ S: Maintaine F: drivers/net/ethernet/marvell/mv643xx_eth.* F: include/linux/mv643xx.h +MARVELL MV88X3310 PHY DRIVER +M: Russell King <rmk(a)armlinux.org.uk> +L: netdev(a)vger.kernel.org +S: Maintained +F: drivers/net/phy/marvell10g.c + MARVELL MVNETA ETHERNET DRIVER M: Thomas Petazzoni <thomas.petazzoni(a)free-electrons.com> L: netdev(a)vger.kernel.org @@@ -8151,16 -8049,6 +8170,16 @@@ S: Maintaine F: Documentation/hwmon/max20751 F: drivers/hwmon/max20751.c +MAX2175 SDR TUNER DRIVER +M: Ramesh Shanmugasundaram <ramesh.shanmugasundaram(a)bp.renesas.com> +L: linux-media(a)vger.kernel.org +T: git
git://linuxtv.org/media_tree.git
+S: Maintained +F: Documentation/devicetree/bindings/media/i2c/max2175.txt +F: Documentation/media/v4l-drivers/max2175.rst +F: drivers/media/i2c/max2175* +F: include/uapi/linux/max2175.h + MAX6650 HARDWARE MONITOR AND FAN CONTROLLER DRIVER L: linux-hwmon(a)vger.kernel.org S: Orphan @@@ -8191,11 -8079,11 +8210,11 @@@ S: Supporte F: drivers/power/supply/max14577_charger.c F: drivers/power/supply/max77693_charger.c -MAXIM MAX77802 MULTIFUNCTION PMIC DEVICE DRIVERS -M: Javier Martinez Canillas <javier(a)osg.samsung.com> +MAXIM MAX77802 PMIC REGULATOR DEVICE DRIVER +M: Javier Martinez Canillas <javier(a)dowhile0.org> L: linux-kernel(a)vger.kernel.org S: Supported -F: drivers/*/*max77802*.c +F: drivers/regulator/max77802-regulator.c F: Documentation/devicetree/bindings/*/*max77802.txt F: include/dt-bindings/*/*max77802.h @@@ -8241,27 -8129,6 +8260,27 @@@ L: linux-iio(a)vger.kernel.or S: Maintained F: drivers/iio/dac/cio-dac.c +MEDIA DRIVERS FOR RENESAS - DRIF +M: Ramesh Shanmugasundaram <ramesh.shanmugasundaram(a)bp.renesas.com> +L: linux-media(a)vger.kernel.org +L: linux-renesas-soc(a)vger.kernel.org +T: git
git://linuxtv.org/media_tree.git
+S: Supported +F: Documentation/devicetree/bindings/media/renesas,drif.txt +F: drivers/media/platform/rcar_drif.c + +MEDIA DRIVERS FOR FREESCALE IMX +M: Steve Longerbeam <slongerbeam(a)gmail.com> +M: Philipp Zabel <p.zabel(a)pengutronix.de> +L: linux-media(a)vger.kernel.org +T: git
git://linuxtv.org/media_tree.git
+S: Maintained +F: Documentation/devicetree/bindings/media/imx.txt +F: Documentation/media/v4l-drivers/imx.rst +F: drivers/staging/media/imx/ +F: include/linux/imx-media.h +F: include/media/imx.h + MEDIA DRIVERS FOR RENESAS - FCP M: Laurent Pinchart <laurent.pinchart(a)ideasonboard.com> L: linux-media(a)vger.kernel.org @@@ -8419,11 -8286,6 +8438,11 @@@ L: linux-wireless(a)vger.kernel.or S: Maintained F: drivers/net/wireless/mediatek/mt7601u/ +MEDIATEK RANDOM NUMBER GENERATOR SUPPORT +M: Sean Wang <sean.wang(a)mediatek.com> +S: Maintained +F: drivers/char/hw_random/mtk-rng.c + MEGACHIPS STDPXXXX-GE-B850V3-FW LVDS/DP++ BRIDGES M: Peter Senna Tschudin <peter.senna(a)collabora.com> M: Martin Donnelly <martin.donnelly(a)ge.com> @@@ -8467,26 -8329,6 +8486,26 @@@ W:
http://www.mellanox.co
Q:
http://patchwork.ozlabs.org/project/netdev/list/
F: drivers/net/ethernet/mellanox/mlx5/core/en_* +MELLANOX ETHERNET INNOVA DRIVER +M: Ilan Tayari <ilant(a)mellanox.com> +R: Boris Pismenny <borisp(a)mellanox.com> +L: netdev(a)vger.kernel.org +S: Supported +W:
http://www.mellanox.com
+Q:
http://patchwork.ozlabs.org/project/netdev/list/
+F: drivers/net/ethernet/mellanox/mlx5/core/fpga/* +F: include/linux/mlx5/mlx5_ifc_fpga.h + +MELLANOX ETHERNET INNOVA IPSEC DRIVER +M: Ilan Tayari <ilant(a)mellanox.com> +R: Boris Pismenny <borisp(a)mellanox.com> +L: netdev(a)vger.kernel.org +S: Supported +W:
http://www.mellanox.com
+Q:
http://patchwork.ozlabs.org/project/netdev/list/
+F: drivers/net/ethernet/mellanox/mlx5/core/en_ipsec/* +F: drivers/net/ethernet/mellanox/mlx5/core/ipsec* + MELLANOX ETHERNET SWITCH DRIVERS M: Jiri Pirko <jiri(a)mellanox.com> M: Ido Schimmel <idosch(a)mellanox.com> @@@ -8496,14 -8338,6 +8515,14 @@@ W:
http://www.mellanox.co
Q:
http://patchwork.ozlabs.org/project/netdev/list/
F: drivers/net/ethernet/mellanox/mlxsw/ +MELLANOX FIRMWARE FLASH LIBRARY (mlxfw) +M: Yotam Gigi <yotamg(a)mellanox.com> +L: netdev(a)vger.kernel.org +S: Supported +W:
http://www.mellanox.com
+Q:
http://patchwork.ozlabs.org/project/netdev/list/
+F: drivers/net/ethernet/mellanox/mlxfw/ + MELLANOX MLXCPLD I2C AND MUX DRIVER M: Vadim Pasternak <vadimp(a)mellanox.com> M: Michael Shych <michaelsh(a)mellanox.com> @@@ -8622,7 -8456,7 +8641,7 @@@ T: git git://git.monstr.eu/linux-2.6-mi S: Supported F: arch/microblaze/ -MICROCHIP / ATMEL AT91 / AT32 SERIAL DRIVER +MICROCHIP / ATMEL AT91 SERIAL DRIVER M: Richard Genoud <richard.genoud(a)gmail.com> S: Maintained F: drivers/tty/serial/atmel_serial.c @@@ -8645,16 -8479,6 +8664,16 @@@ F: drivers/media/platform/atmel/atmel-i F: drivers/media/platform/atmel/atmel-isc-regs.h F: devicetree/bindings/media/atmel-isc.txt +MICROCHIP KSZ SERIES ETHERNET SWITCH DRIVER +M: Woojung Huh <Woojung.Huh(a)microchip.com> +M: Microchip Linux Driver Support <UNGLinuxDriver(a)microchip.com> +L: netdev(a)vger.kernel.org +S: Maintained +F: net/dsa/tag_ksz.c +F: drivers/net/dsa/microchip/* +F: include/linux/platform_data/microchip-ksz.h +F: Documentation/devicetree/bindings/net/dsa/ksz.txt + MICROCHIP USB251XB DRIVER M: Richard Leitner <richard.leitner(a)skidata.com> L: linux-usb(a)vger.kernel.org @@@ -8910,15 -8734,6 +8929,15 @@@ S: Orpha F: drivers/mmc/host/mmc_spi.c F: include/linux/spi/mmc_spi.h +MULTIPLEXER SUBSYSTEM +M: Peter Rosin <peda(a)axentia.se> +S: Maintained +F: Documentation/ABI/testing/mux/sysfs-class-mux* +F: Documentation/devicetree/bindings/mux/ +F: include/linux/dt-bindings/mux/ +F: include/linux/mux/ +F: drivers/mux/ + MULTISOUND SOUND DRIVER M: Andrew Veliath <andrewtv(a)usa.net> S: Maintained @@@ -9136,7 -8951,9 +9155,7 @@@ F: lib/random32. NETWORKING [IPv4/IPv6] M: "David S. Miller" <davem(a)davemloft.net> M: Alexey Kuznetsov <kuznet(a)ms2.inr.ac.ru> -M: James Morris <jmorris(a)namei.org> M: Hideaki YOSHIFUJI <yoshfuji(a)linux-ipv6.org> -M: Patrick McHardy <kaber(a)trash.net> L: netdev(a)vger.kernel.org T: git
git://git.kernel.org/pub/scm/linux/kernel/git/davem/net.git
S: Maintained @@@ -9145,16 -8962,6 +9164,16 @@@ F: net/ipv6 F: include/net/ip* F: arch/x86/net/* +NETWORKING [TLS] +M: Ilya Lesokhin <ilyal(a)mellanox.com> +M: Aviad Yehezkel <aviadye(a)mellanox.com> +M: Dave Watson <davejwatson(a)fb.com> +L: netdev(a)vger.kernel.org +S: Maintained +F: net/tls/* +F: include/uapi/linux/tls.h +F: include/net/tls.h + NETWORKING [IPSEC] M: Steffen Klassert <steffen.klassert(a)secunet.com> M: Herbert Xu <herbert(a)gondor.apana.org.au> @@@ -9236,6 -9043,9 +9255,6 @@@ F: include/uapi/linux/nfc. F: drivers/nfc/ F: include/linux/platform_data/nfcmrvl.h F: include/linux/platform_data/nxp-nci.h -F: include/linux/platform_data/pn544.h -F: include/linux/platform_data/st21nfca.h -F: include/linux/platform_data/st-nci.h F: Documentation/devicetree/bindings/net/nfc/ NFS, SUNRPC, AND LOCKD CLIENTS @@@ -9290,17 -9100,6 +9309,17 @@@ T: git
git://git.kernel.org/pub/scm/lin
S: Maintained F: arch/nios2/ +NOHZ, DYNTICKS SUPPORT +M: Frederic Weisbecker <fweisbec(a)gmail.com> +M: Thomas Gleixner <tglx(a)linutronix.de> +M: Ingo Molnar <mingo(a)kernel.org> +L: linux-kernel(a)vger.kernel.org +T: git
git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git
timers/nohz +S: Maintained +F: kernel/time/tick*.* +F: include/linux/tick.h +F: include/linux/sched/nohz.h + NOKIA N900 CAMERA SUPPORT (ET8EK8 SENSOR, AD5820 FOCUS) M: Pavel Machek <pavel(a)ucw.cz> M: Sakari Ailus <sakari.ailus(a)iki.fi> @@@ -9638,13 -9437,6 +9657,13 @@@ M: Harald Welte <laforge(a)gnumonks.org S: Maintained F: drivers/char/pcmcia/cm4040_cs.* +OMNIVISION OV5640 SENSOR DRIVER +M: Steve Longerbeam <slongerbeam(a)gmail.com> +L: linux-media(a)vger.kernel.org +T: git
git://linuxtv.org/media_tree.git
+S: Maintained +F: drivers/media/i2c/ov5640.c + OMNIVISION OV5647 SENSOR DRIVER M: Ramiro Oliveira <roliveir(a)synopsys.com> L: linux-media(a)vger.kernel.org @@@ -9660,13 -9452,6 +9679,13 @@@ S: Maintaine F: drivers/media/i2c/ov7670.c F: Documentation/devicetree/bindings/media/i2c/ov7670.txt +OMNIVISION OV13858 SENSOR DRIVER +M: Sakari Ailus <sakari.ailus(a)linux.intel.com> +L: linux-media(a)vger.kernel.org +T: git
git://linuxtv.org/media_tree.git
+S: Maintained +F: drivers/media/i2c/ov13858.c + ONENAND FLASH DRIVER M: Kyungmin Park <kyungmin.park(a)samsung.com> L: linux-mtd(a)lists.infradead.org @@@ -9701,7 -9486,6 +9720,7 @@@ S: Maintaine F: drivers/of/ F: include/linux/of*.h F: scripts/dtc/ +F: Documentation/ABI/testing/sysfs-firmware-ofw OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS M: Rob Herring <robh+dt(a)kernel.org> @@@ -10170,16 -9954,9 +10189,16 @@@ S: Maintaine F: Documentation/devicetree/bindings/pci/hisilicon-pcie.txt F: drivers/pci/dwc/pcie-hisi.c +PCIE DRIVER FOR HISILICON KIRIN +M: Xiaowei Song <songxiaowei(a)hisilicon.com> +M: Binghui Wang <wangbinghui(a)hisilicon.com> +L: linux-pci(a)vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/pci/pcie-kirin.txt +F: drivers/pci/dwc/pcie-kirin.c + PCIE DRIVER FOR ROCKCHIP M: Shawn Lin <shawn.lin(a)rock-chips.com> -M: Wenrui Li <wenrui.li(a)rock-chips.com> L: linux-pci(a)vger.kernel.org L: linux-rockchip(a)lists.infradead.org S: Maintained @@@ -10201,14 -9978,6 +10220,14 @@@ S: Supporte F: Documentation/devicetree/bindings/pci/pci-thunder-* F: drivers/pci/host/pci-thunder-* +PCIE DRIVER FOR MEDIATEK +M: Ryder Lee <ryder.lee(a)mediatek.com> +L: linux-pci(a)vger.kernel.org +L: linux-mediatek(a)lists.infradead.org +S: Supported +F: Documentation/devicetree/bindings/pci/mediatek* +F: drivers/pci/host/*mediatek* + PCMCIA SUBSYSTEM P: Linux PCMCIA Team L: linux-pcmcia(a)lists.infradead.org @@@ -10333,13 -10102,6 +10352,13 @@@ M: Heikki Krogerus <heikki.krogerus@lin S: Maintained F: drivers/pinctrl/intel/ +PIN CONTROLLER - QUALCOMM +M: Bjorn Andersson <bjorn.andersson(a)linaro.org> +S: Maintained +L: linux-arm-msm(a)vger.kernel.org +F: Documentation/devicetree/bindings/pinctrl/qcom,*.txt +F: drivers/pinctrl/qcom/ + PIN CONTROLLER - RENESAS M: Laurent Pinchart <laurent.pinchart(a)ideasonboard.com> M: Geert Uytterhoeven <geert+renesas(a)glider.be> @@@ -10411,7 -10173,7 +10430,7 @@@ T: git
git://git.kernel.org/pub/scm/lin
S: Maintained F: Documentation/hwmon/pmbus F: drivers/hwmon/pmbus/ -F: include/linux/i2c/pmbus.h +F: include/linux/pmbus.h PMC SIERRA MaxRAID DRIVER L: linux-scsi(a)vger.kernel.org @@@ -10801,7 -10563,6 +10820,7 @@@ M: Laurentiu Tudor <laurentiu.tudor@nxp L: linux-kernel(a)vger.kernel.org S: Maintained F: drivers/staging/fsl-mc/ +F: Documentation/devicetree/bindings/misc/fsl,qoriq-mc.txt QT1010 MEDIA DRIVER M: Antti Palosaari <crope(a)iki.fi> @@@ -10841,14 -10602,6 +10860,14 @@@ T: git
git://git.kernel.org/pub/scm/lin
S: Supported F: arch/hexagon/ +QUALCOMM VENUS VIDEO ACCELERATOR DRIVER +M: Stanimir Varbanov <stanimir.varbanov(a)linaro.org> +L: linux-media(a)vger.kernel.org +L: linux-arm-msm(a)vger.kernel.org +T: git
git://linuxtv.org/media_tree.git
+S: Maintained +F: drivers/media/platform/qcom/venus/ + QUALCOMM WCN36XX WIRELESS DRIVER M: Eugene Krasnikov <k.eugene.e(a)gmail.com> L: wcn36xx(a)lists.infradead.org @@@ -10864,14 -10617,6 +10883,14 @@@ L: qemu-devel(a)nongnu.or S: Maintained F: drivers/firmware/qemu_fw_cfg.c +QUANTENNA QTNFMAC WIRELESS DRIVER +M: Igor Mitsyanko <imitsyanko(a)quantenna.com> +M: Avinash Patil <avinashp(a)quantenna.com> +M: Sergey Matyukevich <smatyukevich(a)quantenna.com> +L: linux-wireless(a)vger.kernel.org +S: Maintained +F: drivers/net/wireless/quantenna + RADOS BLOCK DEVICE (RBD) M: Ilya Dryomov <idryomov(a)gmail.com> M: Sage Weil <sage(a)redhat.com> @@@ -11105,11 -10850,11 +11124,11 @@@ L: linux-iio(a)vger.kernel.or S: Supported F: drivers/iio/adc/rcar_gyro_adc.c -RENESAS USB2 PHY DRIVER +RENESAS USB PHY DRIVER M: Yoshihiro Shimoda <yoshihiro.shimoda.uh(a)renesas.com> L: linux-renesas-soc(a)vger.kernel.org S: Maintained -F: drivers/phy/phy-rcar-gen3-usb2.c +F: drivers/phy/renesas/phy-rcar-gen3-usb*.c RESET CONTROLLER FRAMEWORK M: Philipp Zabel <p.zabel(a)pengutronix.de> @@@ -11266,7 -11011,7 +11285,7 @@@ S: Supporte F: arch/s390/ F: drivers/s390/ F: Documentation/s390/ -F: Documentation/DocBook/s390* +F: Documentation/driver-api/s390-drivers.rst S390 COMMON I/O LAYER M: Sebastian Ott <sebott(a)linux.vnet.ibm.com> @@@ -11334,7 -11079,7 +11353,7 @@@ S: Supporte F: drivers/iommu/s390-iommu.c S390 VFIO-CCW DRIVER -M: Cornelia Huck <cornelia.huck(a)de.ibm.com> +M: Cornelia Huck <cohuck(a)redhat.com> M: Dong Jia Shi <bjsdjshi(a)linux.vnet.ibm.com> L: linux-s390(a)vger.kernel.org L: kvm(a)vger.kernel.org @@@ -11511,12 -11256,12 +11530,12 @@@ L: linux-kernel(a)vger.kernel.or S: Supported F: Documentation/devicetree/bindings/phy/samsung-phy.txt F: Documentation/phy/samsung-usb2.txt -F: drivers/phy/phy-exynos4210-usb2.c -F: drivers/phy/phy-exynos4x12-usb2.c -F: drivers/phy/phy-exynos5250-usb2.c -F: drivers/phy/phy-s5pv210-usb2.c -F: drivers/phy/phy-samsung-usb2.c -F: drivers/phy/phy-samsung-usb2.h +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 SERIAL DRIVERS M: Greg Kroah-Hartman <gregkh(a)linuxfoundation.org> @@@ -11600,9 -11345,6 +11619,9 @@@ F: Documentation/tee.tx THUNDERBOLT DRIVER M: Andreas Noever <andreas.noever(a)gmail.com> +M: Michael Jamet <michael.jamet(a)intel.com> +M: Mika Westerberg <mika.westerberg(a)linux.intel.com> +M: Yehezkel Bernat <yehezkel.bernat(a)intel.com> S: Maintained F: drivers/thunderbolt/ @@@ -11630,14 -11372,6 +11649,14 @@@ F: kernel/time/alarmtimer. F: kernel/time/ntp.c F: tools/testing/selftests/timers/ +TI TRF7970A NFC DRIVER +M: Mark Greer <mgreer(a)animalcreek.com> +L: linux-wireless(a)vger.kernel.org +L: linux-nfc(a)lists.01.org (moderated for non-subscribers) +S: Supported +F: drivers/nfc/trf7970a.c +F: Documentation/devicetree/bindings/net/nfc/trf7970a.txt + SC1200 WDT DRIVER M: Zwane Mwaikambo <zwanem(a)gmail.com> S: Maintained @@@ -11778,8 -11512,6 +11797,8 @@@ F: kernel/seccomp. F: include/uapi/linux/seccomp.h F: include/linux/seccomp.h F: tools/testing/selftests/seccomp/* +F: tools/testing/selftests/kselftest_harness.h +F: Documentation/userspace-api/seccomp_filter.rst K: \bsecure_computing K: \bTIF_SECCOMP\b @@@ -11838,7 -11570,6 +11857,7 @@@ S: Supporte F: include/linux/selinux* F: security/selinux/ F: scripts/selinux/ +F: Documentation/admin-guide/LSM/SELinux.rst APPARMOR SECURITY MODULE M: John Johansen <john.johansen(a)canonical.com> @@@ -11847,21 -11578,18 +11866,21 @@@ W: apparmor.wiki.kernel.or T: git
git://git.kernel.org/pub/scm/linux/kernel/git/jj/apparmor-dev.git
S: Supported F: security/apparmor/ +F: Documentation/admin-guide/LSM/apparmor.rst LOADPIN SECURITY MODULE M: Kees Cook <keescook(a)chromium.org> T: git
git://git.kernel.org/pub/scm/linux/kernel/git/kees/linux.git
lsm/loadpin S: Supported F: security/loadpin/ +F: Documentation/admin-guide/LSM/LoadPin.rst YAMA SECURITY MODULE M: Kees Cook <keescook(a)chromium.org> T: git
git://git.kernel.org/pub/scm/linux/kernel/git/kees/linux.git
yama/tip S: Supported F: security/yama/ +F: Documentation/admin-guide/LSM/Yama.rst SENSABLE PHANTOM M: Jiri Slaby <jirislaby(a)gmail.com> @@@ -12079,13 -11807,6 +12098,13 @@@ S: Maintaine F: drivers/media/platform/davinci/ F: include/media/davinci/ +TI DAVINCI SERIES GPIO DRIVER +M: Keerthy <j-keerthy(a)ti.com> +L: linux-gpio(a)vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/gpio/gpio-davinci.txt +F: drivers/gpio/gpio-davinci.c + TI AM437X VPFE DRIVER M: "Lad, Prabhakar" <prabhakar.csengg(a)gmail.com> L: linux-media(a)vger.kernel.org @@@ -12171,7 -11892,7 +12190,7 @@@ L: linux-security-module(a)vger.kernel.or W:
http://schaufler-ca.com
T: git
git://github.com/cschaufler/smack-next
S: Maintained -F: Documentation/security/Smack.txt +F: Documentation/admin-guide/LSM/Smack.rst F: security/smack/ DRIVERS FOR ADAPTIVE VOLTAGE SCALING (AVS) @@@ -12261,9 -11982,8 +12280,9 @@@ F: drivers/leds/leds-net48xx. SOFTLOGIC 6x10 MPEG CODEC M: Bluecherry Maintainers <maintainers(a)bluecherrydvr.com> +M: Anton Sviridenko <anton(a)corp.bluecherry.net> M: Andrey Utkin <andrey.utkin(a)corp.bluecherry.net> -M: Andrey Utkin <andrey.krieger.utkin(a)gmail.com> +M: Andrey Utkin <andrey_utkin(a)fastmail.com> M: Ismael Luceno <ismael(a)iodev.co.uk> L: linux-media(a)vger.kernel.org S: Supported @@@ -12931,10 -12651,6 +12950,10 @@@ F: include/linux/soc/ti/ti_sci_protocol F: Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt F: include/dt-bindings/genpd/k2g.h F: drivers/soc/ti/ti_sci_pm_domains.c +F: Documentation/devicetree/bindings/reset/ti,sci-reset.txt +F: Documentation/devicetree/bindings/clock/ti,sci-clk.txt +F: drivers/clk/keystone/sci-clk.c +F: drivers/reset/reset-ti-sci.c THANKO'S RAREMONO AM/FM/SW RADIO RECEIVER USB DRIVER M: Hans Verkuil <hverkuil(a)xs4all.nl> @@@ -13184,7 -12900,7 +13203,7 @@@ M: Wolfram Sang <wsa+renesas@sang-engin L: linux-mmc(a)vger.kernel.org S: Supported F: drivers/mmc/host/tmio_mmc* -F: drivers/mmc/host/sh_mobile_sdhi.c +F: drivers/mmc/host/renesas_sdhi* F: include/linux/mfd/tmio.h TMP401 HARDWARE MONITOR DRIVER @@@ -13213,7 -12929,6 +13232,7 @@@ F: Documentation/media/v4l-drivers/tm60 TW5864 VIDEO4LINUX DRIVER M: Bluecherry Maintainers <maintainers(a)bluecherrydvr.com> +M: Anton Sviridenko <anton(a)corp.bluecherry.net> M: Andrey Utkin <andrey.utkin(a)corp.bluecherry.net> M: Andrey Utkin <andrey_utkin(a)fastmail.com> L: linux-media(a)vger.kernel.org @@@ -13766,17 -13481,6 +13785,17 @@@ W:
http://en.wikipedia.org/wiki/Util-li
T: git
git://git.kernel.org/pub/scm/utils/util-linux/util-linux.git
S: Maintained +UUID HELPERS +M: Christoph Hellwig <hch(a)lst.de> +R: Andy Shevchenko <andriy.shevchenko(a)linux.intel.com> +L: linux-kernel(a)vger.kernel.org +T: git
git://git.infradead.org/users/hch/uuid.git
+F: lib/uuid.c +F: lib/test_uuid.c +F: include/linux/uuid.h +F: include/uapi/linux/uuid.h +S: Maintained + UVESAFB DRIVER M: Michal Januszewski <spock(a)gentoo.org> L: linux-fbdev(a)vger.kernel.org @@@ -13839,12 -13543,6 +13858,12 @@@ S: Maintaine F: drivers/media/v4l2-core/videobuf2-* F: include/media/videobuf2-* +VIDEO MULTIPLEXER DRIVER +M: Philipp Zabel <p.zabel(a)pengutronix.de> +L: linux-media(a)vger.kernel.org +S: Maintained +F: drivers/media/platform/video-mux.c + VIRTIO AND VHOST VSOCK DRIVER M: Stefan Hajnoczi <stefanha(a)redhat.com> L: kvm(a)vger.kernel.org @@@ -13890,7 -13588,7 +13909,7 @@@ F: include/uapi/linux/virtio_*. F: drivers/crypto/virtio/ VIRTIO DRIVERS FOR S390 -M: Cornelia Huck <cornelia.huck(a)de.ibm.com> +M: Cornelia Huck <cohuck(a)redhat.com> M: Halil Pasic <pasic(a)linux.vnet.ibm.com> L: linux-s390(a)vger.kernel.org L: virtualization(a)lists.linux-foundation.org @@@ -14089,7 -13787,6 +14108,7 @@@ M: Evgeniy Polyakov <zbr(a)ioremap.net S: Maintained F: Documentation/w1/ F: drivers/w1/ +F: include/linux/w1.h W83791D HARDWARE MONITORING DRIVER M: Marc Hulsman <m.hulsman(a)tudelft.nl> @@@ -14304,8 -14001,6 +14323,8 @@@ F: drivers/xen F: arch/x86/include/asm/xen/ F: include/xen/ F: include/uapi/xen/ +F: Documentation/ABI/stable/sysfs-hypervisor-xen +F: Documentation/ABI/testing/sysfs-hypervisor-xen XEN HYPERVISOR ARM M: Stefano Stabellini <sstabellini(a)kernel.org> @@@ -14398,14 -14093,6 +14417,14 @@@ L: linux-kernel(a)vger.kernel.or S: Supported F: drivers/char/xillybus/ +XRA1403 GPIO EXPANDER +M: Nandor Han <nandor.han(a)ge.com> +M: Semi Malinen <semi.malinen(a)ge.com> +L: linux-gpio(a)vger.kernel.org +S: Maintained +F: drivers/gpio/gpio-xra1403.c +F: Documentation/devicetree/bindings/gpio/gpio-xra1403.txt + XTENSA XTFPGA PLATFORM SUPPORT M: Max Filippov <jcmvbkbc(a)gmail.com> L: linux-xtensa(a)linux-xtensa.org diff --combined drivers/bus/Kconfig index d2a5f1184022,b83c5351376c..2408ea38a39c --- a/drivers/bus/Kconfig +++ b/drivers/bus/Kconfig @@@ -57,7 -57,7 +57,7 @@@ config ARM_CC config BRCMSTB_GISB_ARB bool "Broadcom STB GISB bus arbiter" - depends on ARM || MIPS + depends on ARM || ARM64 || MIPS default ARCH_BRCMSTB || BMIPS_GENERIC help Driver for the Broadcom Set Top Box System-on-a-chip internal bus @@@ -121,7 -121,6 +121,6 @@@ config QCOM_EBI config SIMPLE_PM_BUS bool "Simple Power-Managed Bus Driver" depends on OF && PM - depends on ARCH_RENESAS || COMPILE_TEST help Driver for transparent busses that don't need a real driver, but where the bus controller is part of a PM domain, or under the control diff --combined drivers/gpu/drm/amd/amdgpu/amdgpu_device.c index bbac5d5d1fcf,2fe1e0a20c17..4a8fc15467cf --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c @@@ -54,8 -54,14 +54,14 @@@ #include <linux/pci.h> #include <linux/firmware.h> + MODULE_FIRMWARE("amdgpu/vega10_gpu_info.bin"); + MODULE_FIRMWARE("amdgpu/raven_gpu_info.bin"); + + #define AMDGPU_RESUME_MS 2000 + static int amdgpu_debugfs_regs_init(struct amdgpu_device *adev); static void amdgpu_debugfs_regs_cleanup(struct amdgpu_device *adev); + static int amdgpu_debugfs_test_ib_ring_init(struct amdgpu_device *adev); static const char *amdgpu_asic_name[] = { "TAHITI", @@@ -77,6 -83,7 +83,7 @@@ "POLARIS11", "POLARIS12", "VEGA10", + "RAVEN", "LAST", }; @@@ -478,9 -485,8 +485,8 @@@ void amdgpu_doorbell_get_kfd_info(struc /* * amdgpu_wb_*() - * Writeback is the the method by which the the GPU updates special pages - * in memory with the status of certain GPU events (fences, ring pointers, - * etc.). + * Writeback is the method by which the GPU updates special pages in memory + * with the status of certain GPU events (fences, ring pointers,etc.). */ /** @@@ -506,7 -512,7 +512,7 @@@ static void amdgpu_wb_fini(struct amdgp * * @adev: amdgpu_device pointer * - * Disables Writeback and frees the Writeback memory (all asics). + * Initializes writeback and allocates writeback memory (all asics). * Used at driver startup. * Returns 0 on success or an -error on failure. */ @@@ -614,7 -620,7 +620,7 @@@ void amdgpu_wb_free_64bit(struct amdgpu * @mc: memory controller structure holding memory informations * @base: base address at which to put VRAM * - * Function will place try to place VRAM at base address provided + * Function will try to place VRAM at base address provided * as parameter (which is so far either PCI aperture address or * for IGP TOM base address). * @@@ -636,7 -642,7 +642,7 @@@ * ones) * * Note: IGP TOM addr should be the same as the aperture addr, we don't - * explicitly check for that thought. + * explicitly check for that though. * * FIXME: when reducing VRAM size align new size on power of 2. */ @@@ -1067,6 -1073,10 +1073,10 @@@ def_value static void amdgpu_check_vm_size(struct amdgpu_device *adev) { + /* no need to check the default value */ + if (amdgpu_vm_size == -1) + return; + if (!amdgpu_check_pot_argument(amdgpu_vm_size)) { dev_warn(adev->dev, "VM size (%d) must be a power of 2\n", amdgpu_vm_size); @@@ -1152,12 -1162,16 +1162,12 @@@ static void amdgpu_switcheroo_set_state return; if (state == VGA_SWITCHEROO_ON) { - unsigned d3_delay = dev->pdev->d3_delay; - pr_info("amdgpu: switched on\n"); /* don't suspend or resume card normally */ dev->switch_power_state = DRM_SWITCH_POWER_CHANGING; amdgpu_device_resume(dev, true, true); - dev->pdev->d3_delay = d3_delay; - dev->switch_power_state = DRM_SWITCH_POWER_ON; drm_kms_helper_poll_enable(dev); } else { @@@ -1338,6 -1352,9 +1348,9 @@@ int amdgpu_ip_block_add(struct amdgpu_d if (!ip_block_version) return -EINVAL; + DRM_DEBUG("add ip block number %d <%s>\n", adev->num_ip_blocks, + ip_block_version->funcs->name); + adev->ip_blocks[adev->num_ip_blocks++].version = ip_block_version; return 0; @@@ -1388,6 -1405,104 +1401,104 @@@ static void amdgpu_device_enable_virtua } } + static int amdgpu_device_parse_gpu_info_fw(struct amdgpu_device *adev) + { + const char *chip_name; + char fw_name[30]; + int err; + const struct gpu_info_firmware_header_v1_0 *hdr; + + adev->firmware.gpu_info_fw = NULL; + + switch (adev->asic_type) { + case CHIP_TOPAZ: + case CHIP_TONGA: + case CHIP_FIJI: + case CHIP_POLARIS11: + case CHIP_POLARIS10: + case CHIP_POLARIS12: + case CHIP_CARRIZO: + case CHIP_STONEY: + #ifdef CONFIG_DRM_AMDGPU_SI + case CHIP_VERDE: + case CHIP_TAHITI: + case CHIP_PITCAIRN: + case CHIP_OLAND: + case CHIP_HAINAN: + #endif + #ifdef CONFIG_DRM_AMDGPU_CIK + case CHIP_BONAIRE: + case CHIP_HAWAII: + case CHIP_KAVERI: + case CHIP_KABINI: + case CHIP_MULLINS: + #endif + default: + return 0; + case CHIP_VEGA10: + chip_name = "vega10"; + break; + case CHIP_RAVEN: + chip_name = "raven"; + break; + } + + snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_gpu_info.bin", chip_name); + err = request_firmware(&adev->firmware.gpu_info_fw, fw_name, adev->dev); + if (err) { + dev_err(adev->dev, + "Failed to load gpu_info firmware \"%s\"\n", + fw_name); + goto out; + } + err = amdgpu_ucode_validate(adev->firmware.gpu_info_fw); + if (err) { + dev_err(adev->dev, + "Failed to validate gpu_info firmware \"%s\"\n", + fw_name); + goto out; + } + + hdr = (const struct gpu_info_firmware_header_v1_0 *)adev->firmware.gpu_info_fw->data; + amdgpu_ucode_print_gpu_info_hdr(&hdr->header); + + switch (hdr->version_major) { + case 1: + { + const struct gpu_info_firmware_v1_0 *gpu_info_fw = + (const struct gpu_info_firmware_v1_0 *)(adev->firmware.gpu_info_fw->data + + le32_to_cpu(hdr->header.ucode_array_offset_bytes)); + + adev->gfx.config.max_shader_engines = le32_to_cpu(gpu_info_fw->gc_num_se); + adev->gfx.config.max_cu_per_sh = le32_to_cpu(gpu_info_fw->gc_num_cu_per_sh); + adev->gfx.config.max_sh_per_se = le32_to_cpu(gpu_info_fw->gc_num_sh_per_se); + adev->gfx.config.max_backends_per_se = le32_to_cpu(gpu_info_fw->gc_num_rb_per_se); + adev->gfx.config.max_texture_channel_caches = + le32_to_cpu(gpu_info_fw->gc_num_tccs); + adev->gfx.config.max_gprs = le32_to_cpu(gpu_info_fw->gc_num_gprs); + adev->gfx.config.max_gs_threads = le32_to_cpu(gpu_info_fw->gc_num_max_gs_thds); + adev->gfx.config.gs_vgt_table_depth = le32_to_cpu(gpu_info_fw->gc_gs_table_depth); + adev->gfx.config.gs_prim_buffer_depth = le32_to_cpu(gpu_info_fw->gc_gsprim_buff_depth); + adev->gfx.config.double_offchip_lds_buf = + le32_to_cpu(gpu_info_fw->gc_double_offchip_lds_buffer); + adev->gfx.cu_info.wave_front_size = le32_to_cpu(gpu_info_fw->gc_wave_size); + adev->gfx.cu_info.max_waves_per_simd = + le32_to_cpu(gpu_info_fw->gc_max_waves_per_simd); + adev->gfx.cu_info.max_scratch_slots_per_cu = + le32_to_cpu(gpu_info_fw->gc_max_scratch_slots_per_cu); + adev->gfx.cu_info.lds_size = le32_to_cpu(gpu_info_fw->gc_lds_size); + break; + } + default: + dev_err(adev->dev, + "Unsupported gpu_info table %d\n", hdr->header.ucode_version); + err = -EINVAL; + goto out; + } + out: + return err; + } + static int amdgpu_early_init(struct amdgpu_device *adev) { int i, r; @@@ -1440,8 -1555,12 +1551,12 @@@ return r; break; #endif - case CHIP_VEGA10: - adev->family = AMDGPU_FAMILY_AI; + case CHIP_VEGA10: + case CHIP_RAVEN: + if (adev->asic_type == CHIP_RAVEN) + adev->family = AMDGPU_FAMILY_RV; + else + adev->family = AMDGPU_FAMILY_AI; r = soc15_set_ip_blocks(adev); if (r) @@@ -1452,6 -1571,10 +1567,10 @@@ return -EINVAL; } + r = amdgpu_device_parse_gpu_info_fw(adev); + if (r) + return r; + if (amdgpu_sriov_vf(adev)) { r = amdgpu_virt_request_full_gpu(adev, true); if (r) @@@ -1460,7 -1583,8 +1579,8 @@@ for (i = 0; i < adev->num_ip_blocks; i++) { if ((amdgpu_ip_block_mask & (1 << i)) == 0) { - DRM_ERROR("disabled ip block: %d\n", i); + DRM_ERROR("disabled ip block: %d <%s>\n", + i, adev->ip_blocks[i].version->funcs->name); adev->ip_blocks[i].status.valid = false; } else { if (adev->ip_blocks[i].version->funcs->early_init) { @@@ -1548,22 -1672,24 +1668,24 @@@ static int amdgpu_init(struct amdgpu_de return 0; } - static int amdgpu_late_init(struct amdgpu_device *adev) + static void amdgpu_fill_reset_magic(struct amdgpu_device *adev) + { + memcpy(adev->reset_magic, adev->gart.ptr, AMDGPU_RESET_MAGIC_NUM); + } + + static bool amdgpu_check_vram_lost(struct amdgpu_device *adev) + { + return !!memcmp(adev->gart.ptr, adev->reset_magic, + AMDGPU_RESET_MAGIC_NUM); + } + + static int amdgpu_late_set_cg_state(struct amdgpu_device *adev) { int i = 0, r; for (i = 0; i < adev->num_ip_blocks; i++) { if (!adev->ip_blocks[i].status.valid) continue; - if (adev->ip_blocks[i].version->funcs->late_init) { - r = adev->ip_blocks[i].version->funcs->late_init((void *)adev); - if (r) { - DRM_ERROR("late_init of IP block <%s> failed %d\n", - adev->ip_blocks[i].version->funcs->name, r); - return r; - } - adev->ip_blocks[i].status.late_initialized = true; - } /* skip CG for VCE/UVD, it's handled specially */ if (adev->ip_blocks[i].version->type != AMD_IP_BLOCK_TYPE_UVD && adev->ip_blocks[i].version->type != AMD_IP_BLOCK_TYPE_VCE) { @@@ -1577,6 -1703,31 +1699,31 @@@ } } } + return 0; + } + + static int amdgpu_late_init(struct amdgpu_device *adev) + { + int i = 0, r; + + for (i = 0; i < adev->num_ip_blocks; i++) { + if (!adev->ip_blocks[i].status.valid) + continue; + if (adev->ip_blocks[i].version->funcs->late_init) { + r = adev->ip_blocks[i].version->funcs->late_init((void *)adev); + if (r) { + DRM_ERROR("late_init of IP block <%s> failed %d\n", + adev->ip_blocks[i].version->funcs->name, r); + return r; + } + adev->ip_blocks[i].status.late_initialized = true; + } + } + + mod_delayed_work(system_wq, &adev->late_init_work, + msecs_to_jiffies(AMDGPU_RESUME_MS)); + + amdgpu_fill_reset_magic(adev); return 0; } @@@ -1668,6 -1819,13 +1815,13 @@@ static int amdgpu_fini(struct amdgpu_de return 0; } + static void amdgpu_late_init_func_handler(struct work_struct *work) + { + struct amdgpu_device *adev = + container_of(work, struct amdgpu_device, late_init_work.work); + amdgpu_late_set_cg_state(adev); + } + int amdgpu_suspend(struct amdgpu_device *adev) { int i, r; @@@ -1713,19 -1871,25 +1867,25 @@@ static int amdgpu_sriov_reinit_early(st { int i, r; - for (i = 0; i < adev->num_ip_blocks; i++) { - if (!adev->ip_blocks[i].status.valid) - continue; + static enum amd_ip_block_type ip_order[] = { + AMD_IP_BLOCK_TYPE_GMC, + AMD_IP_BLOCK_TYPE_COMMON, + AMD_IP_BLOCK_TYPE_IH, + }; - if (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_COMMON || - adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_GMC || - adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_IH) - r = adev->ip_blocks[i].version->funcs->hw_init(adev); + for (i = 0; i < ARRAY_SIZE(ip_order); i++) { + int j; + struct amdgpu_ip_block *block; - if (r) { - DRM_ERROR("resume of IP block <%s> failed %d\n", - adev->ip_blocks[i].version->funcs->name, r); - return r; + for (j = 0; j < adev->num_ip_blocks; j++) { + block = &adev->ip_blocks[j]; + + if (block->version->type != ip_order[i] || + !block->status.valid) + continue; + + r = block->version->funcs->hw_init(adev); + DRM_INFO("RE-INIT: %s %s\n", block->version->funcs->name, r?"failed":"successed"); } } @@@ -1736,33 -1900,67 +1896,67 @@@ static int amdgpu_sriov_reinit_late(str { int i, r; + static enum amd_ip_block_type ip_order[] = { + AMD_IP_BLOCK_TYPE_SMC, + AMD_IP_BLOCK_TYPE_DCE, + AMD_IP_BLOCK_TYPE_GFX, + AMD_IP_BLOCK_TYPE_SDMA, + AMD_IP_BLOCK_TYPE_VCE, + }; + + for (i = 0; i < ARRAY_SIZE(ip_order); i++) { + int j; + struct amdgpu_ip_block *block; + + for (j = 0; j < adev->num_ip_blocks; j++) { + block = &adev->ip_blocks[j]; + + if (block->version->type != ip_order[i] || + !block->status.valid) + continue; + + r = block->version->funcs->hw_init(adev); + DRM_INFO("RE-INIT: %s %s\n", block->version->funcs->name, r?"failed":"successed"); + } + } + + return 0; + } + + static int amdgpu_resume_phase1(struct amdgpu_device *adev) + { + int i, r; + for (i = 0; i < adev->num_ip_blocks; i++) { if (!adev->ip_blocks[i].status.valid) continue; - if (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_COMMON || adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_GMC || - adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_IH ) - continue; - - r = adev->ip_blocks[i].version->funcs->hw_init(adev); - if (r) { - DRM_ERROR("resume of IP block <%s> failed %d\n", - adev->ip_blocks[i].version->funcs->name, r); - return r; + adev->ip_blocks[i].version->type == + AMD_IP_BLOCK_TYPE_IH) { + r = adev->ip_blocks[i].version->funcs->resume(adev); + if (r) { + DRM_ERROR("resume of IP block <%s> failed %d\n", + adev->ip_blocks[i].version->funcs->name, r); + return r; + } } } return 0; } - static int amdgpu_resume(struct amdgpu_device *adev) + static int amdgpu_resume_phase2(struct amdgpu_device *adev) { int i, r; for (i = 0; i < adev->num_ip_blocks; i++) { if (!adev->ip_blocks[i].status.valid) continue; + if (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_COMMON || + adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_GMC || + adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_IH ) + continue; r = adev->ip_blocks[i].version->funcs->resume(adev); if (r) { DRM_ERROR("resume of IP block <%s> failed %d\n", @@@ -1774,6 -1972,18 +1968,18 @@@ return 0; } + static int amdgpu_resume(struct amdgpu_device *adev) + { + int r; + + r = amdgpu_resume_phase1(adev); + if (r) + return r; + r = amdgpu_resume_phase2(adev); + + return r; + } + static void amdgpu_device_detect_sriov_bios(struct amdgpu_device *adev) { if (adev->is_atom_fw) { @@@ -1856,8 -2066,6 +2062,6 @@@ int amdgpu_device_init(struct amdgpu_de amdgpu_check_arguments(adev); - /* Registers mapping */ - /* TODO: block userspace mapping of io register */ spin_lock_init(&adev->mmio_idx_lock); spin_lock_init(&adev->smc_idx_lock); spin_lock_init(&adev->pcie_idx_lock); @@@ -1873,6 -2081,13 +2077,13 @@@ INIT_LIST_HEAD(&adev->gtt_list); spin_lock_init(&adev->gtt_list_lock); + INIT_LIST_HEAD(&adev->ring_lru_list); + spin_lock_init(&adev->ring_lru_list_lock); + + INIT_DELAYED_WORK(&adev->late_init_work, amdgpu_late_init_func_handler); + + /* Registers mapping */ + /* TODO: block userspace mapping of io register */ if (adev->asic_type >= CHIP_BONAIRE) { adev->rmmio_base = pci_resource_start(adev->pdev, 5); adev->rmmio_size = pci_resource_len(adev->pdev, 5); @@@ -1985,6 -2200,8 +2196,8 @@@ adev->accel_working = true; + amdgpu_vm_check_compute_bug(adev); + /* Initialize the buffer migration limit. */ if (amdgpu_moverate >= 0) max_MBps = amdgpu_moverate; @@@ -2013,6 -2230,10 +2226,10 @@@ if (r) DRM_ERROR("registering register debugfs failed (%d).\n", r); + r = amdgpu_debugfs_test_ib_ring_init(adev); + if (r) + DRM_ERROR("registering register test ib ring debugfs failed (%d).\n", r); + r = amdgpu_debugfs_firmware_init(adev); if (r) DRM_ERROR("registering firmware debugfs failed (%d).\n", r); @@@ -2069,7 -2290,12 +2286,12 @@@ void amdgpu_device_fini(struct amdgpu_d amdgpu_fence_driver_fini(adev); amdgpu_fbdev_fini(adev); r = amdgpu_fini(adev); + if (adev->firmware.gpu_info_fw) { + release_firmware(adev->firmware.gpu_info_fw); + adev->firmware.gpu_info_fw = NULL; + } adev->accel_working = false; + cancel_delayed_work_sync(&adev->late_init_work); /* free i2c buses */ amdgpu_i2c_fini(adev); amdgpu_atombios_fini(adev); @@@ -2454,16 -2680,15 +2676,15 @@@ err * amdgpu_sriov_gpu_reset - reset the asic * * @adev: amdgpu device pointer - * @voluntary: if this reset is requested by guest. - * (true means by guest and false means by HYPERVISOR ) + * @job: which job trigger hang * * Attempt the reset the GPU if it has hung (all asics). * for SRIOV case. * Returns 0 for success or an error on failure. */ - int amdgpu_sriov_gpu_reset(struct amdgpu_device *adev, bool voluntary) + int amdgpu_sriov_gpu_reset(struct amdgpu_device *adev, struct amdgpu_job *job) { - int i, r = 0; + int i, j, r = 0; int resched; struct amdgpu_bo *bo, *tmp; struct amdgpu_ring *ring; @@@ -2476,22 -2701,39 +2697,39 @@@ /* block TTM */ resched = ttm_bo_lock_delayed_workqueue(&adev->mman.bdev); - /* block scheduler */ - for (i = 0; i < AMDGPU_MAX_RINGS; ++i) { - ring = adev->rings[i]; + /* we start from the ring trigger GPU hang */ + j = job ? job->ring->idx : 0; + /* block scheduler */ + for (i = j; i < j + AMDGPU_MAX_RINGS; ++i) { + ring = adev->rings[i % AMDGPU_MAX_RINGS]; if (!ring || !ring->sched.thread) continue; kthread_park(ring->sched.thread); + + if (job && j != i) + continue; + + /* here give the last chance to check if job removed from mirror-list + * since we already pay some time on kthread_park */ + if (job && list_empty(&job->base.node)) { + kthread_unpark(ring->sched.thread); + goto give_up_reset; + } + + if (amd_sched_invalidate_job(&job->base, amdgpu_job_hang_limit)) + amd_sched_job_kickout(&job->base); + + /* only do job_reset on the hang ring if @job not NULL */ amd_sched_hw_job_reset(&ring->sched); - } - /* after all hw jobs are reset, hw fence is meaningless, so force_completion */ - amdgpu_fence_driver_force_completion(adev); + /* after all hw jobs are reset, hw fence is meaningless, so force_completion */ + amdgpu_fence_driver_force_completion_ring(ring); + } /* request to take full control of GPU before re-initialization */ - if (voluntary) + if (job) amdgpu_virt_reset_gpu(adev); else amdgpu_virt_request_full_gpu(adev, true); @@@ -2541,20 -2783,28 +2779,28 @@@ } dma_fence_put(fence); - for (i = 0; i < AMDGPU_MAX_RINGS; ++i) { - struct amdgpu_ring *ring = adev->rings[i]; + for (i = j; i < j + AMDGPU_MAX_RINGS; ++i) { + ring = adev->rings[i % AMDGPU_MAX_RINGS]; if (!ring || !ring->sched.thread) continue; + if (job && j != i) { + kthread_unpark(ring->sched.thread); + continue; + } + amd_sched_job_recovery(&ring->sched); kthread_unpark(ring->sched.thread); } drm_helper_resume_force_mode(adev->ddev); + give_up_reset: ttm_bo_unlock_delayed_workqueue(&adev->mman.bdev, resched); if (r) { /* bad news, how to tell it to userspace ? */ dev_info(adev->dev, "GPU reset failed\n"); + } else { + dev_info(adev->dev, "GPU reset successed!\n"); } adev->gfx.in_reset = false; @@@ -2574,10 -2824,7 +2820,7 @@@ int amdgpu_gpu_reset(struct amdgpu_devi { int i, r; int resched; - bool need_full_reset; - - if (amdgpu_sriov_vf(adev)) - return amdgpu_sriov_gpu_reset(adev, true); + bool need_full_reset, vram_lost = false; if (!amdgpu_check_soft_reset(adev)) { DRM_INFO("No hardware hang detected. Did some blocks stall?\n"); @@@ -2637,16 -2884,27 +2880,27 @@@ retry if (!r) { dev_info(adev->dev, "GPU reset succeeded, trying to resume\n"); - r = amdgpu_resume(adev); + r = amdgpu_resume_phase1(adev); + if (r) + goto out; + vram_lost = amdgpu_check_vram_lost(adev); + if (vram_lost) { + DRM_ERROR("VRAM is lost!\n"); + atomic_inc(&adev->vram_lost_counter); + } + r = amdgpu_ttm_recover_gart(adev); + if (r) + goto out; + r = amdgpu_resume_phase2(adev); + if (r) + goto out; + if (vram_lost) + amdgpu_fill_reset_magic(adev); } } + out: if (!r) { amdgpu_irq_gpu_reset_resume_helper(adev); - if (need_full_reset && amdgpu_need_backup(adev)) { - r = amdgpu_ttm_recover_gart(adev); - if (r) - DRM_ERROR("gart recovery failed!!!\n"); - } r = amdgpu_ib_ring_tests(adev); if (r) { dev_err(adev->dev, "ib ring test failed (%d).\n", r); @@@ -2708,10 -2966,11 +2962,11 @@@ drm_helper_resume_force_mode(adev->ddev); ttm_bo_unlock_delayed_workqueue(&adev->mman.bdev, resched); - if (r) { + if (r) /* bad news, how to tell it to userspace ? */ dev_info(adev->dev, "GPU reset failed\n"); - } + else + dev_info(adev->dev, "GPU reset successed!\n"); return r; } @@@ -3495,11 -3754,60 +3750,60 @@@ static void amdgpu_debugfs_regs_cleanup } } + static int amdgpu_debugfs_test_ib(struct seq_file *m, void *data) + { + struct drm_info_node *node = (struct drm_info_node *) m->private; + struct drm_device *dev = node->minor->dev; + struct amdgpu_device *adev = dev->dev_private; + int r = 0, i; + + /* hold on the scheduler */ + for (i = 0; i < AMDGPU_MAX_RINGS; i++) { + struct amdgpu_ring *ring = adev->rings[i]; + + if (!ring || !ring->sched.thread) + continue; + kthread_park(ring->sched.thread); + } + + seq_printf(m, "run ib test:\n"); + r = amdgpu_ib_ring_tests(adev); + if (r) + seq_printf(m, "ib ring tests failed (%d).\n", r); + else + seq_printf(m, "ib ring tests passed.\n"); + + /* go on the scheduler */ + for (i = 0; i < AMDGPU_MAX_RINGS; i++) { + struct amdgpu_ring *ring = adev->rings[i]; + + if (!ring || !ring->sched.thread) + continue; + kthread_unpark(ring->sched.thread); + } + + return 0; + } + + static const struct drm_info_list amdgpu_debugfs_test_ib_ring_list[] = { + {"amdgpu_test_ib", &amdgpu_debugfs_test_ib} + }; + + static int amdgpu_debugfs_test_ib_ring_init(struct amdgpu_device *adev) + { + return amdgpu_debugfs_add_files(adev, + amdgpu_debugfs_test_ib_ring_list, 1); + } + int amdgpu_debugfs_init(struct drm_minor *minor) { return 0; } #else + static int amdgpu_debugfs_test_ib_ring_init(struct amdgpu_device *adev) + { + return 0; + } static int amdgpu_debugfs_regs_init(struct amdgpu_device *adev) { return 0; diff --combined drivers/gpu/drm/drm_internal.h index 14dfa9c83d1d,5cecc974d2f9..5edc24bd10fa --- a/drivers/gpu/drm/drm_internal.h +++ b/drivers/gpu/drm/drm_internal.h @@@ -53,8 -53,9 +53,9 @@@ int drm_name_info(struct seq_file *m, v int drm_clients_info(struct seq_file *m, void* data); int drm_gem_name_info(struct seq_file *m, void *data); - /* drm_irq.c */ + /* drm_vblank.c */ extern unsigned int drm_timestamp_monotonic; + void drm_vblank_disable_and_save(struct drm_device *dev, unsigned int pipe); /* IOCTLS */ int drm_wait_vblank(struct drm_device *dev, void *data, @@@ -142,7 -143,17 +143,21 @@@ static inline int drm_debugfs_crtc_crc_ { return 0; } + #endif + +drm_ioctl_t drm_version; +drm_ioctl_t drm_getunique; +drm_ioctl_t drm_getclient; ++ + /* drm_syncobj.c */ + void drm_syncobj_open(struct drm_file *file_private); + void drm_syncobj_release(struct drm_file *file_private); + int drm_syncobj_create_ioctl(struct drm_device *dev, void *data, + struct drm_file *file_private); + int drm_syncobj_destroy_ioctl(struct drm_device *dev, void *data, + struct drm_file *file_private); + int drm_syncobj_handle_to_fd_ioctl(struct drm_device *dev, void *data, + struct drm_file *file_private); + int drm_syncobj_fd_to_handle_ioctl(struct drm_device *dev, void *data, + struct drm_file *file_private); diff --combined drivers/gpu/drm/drm_ioctl.c index 335821153776,f1e568176da9..f1eb326524cf --- a/drivers/gpu/drm/drm_ioctl.c +++ b/drivers/gpu/drm/drm_ioctl.c @@@ -107,7 -107,7 +107,7 @@@ * * Copies the bus id from drm_device::unique into user space. */ -static int drm_getunique(struct drm_device *dev, void *data, +int drm_getunique(struct drm_device *dev, void *data, struct drm_file *file_priv) { struct drm_unique *u = data; @@@ -172,7 -172,7 +172,7 @@@ static int drm_set_busid(struct drm_dev * Searches for the client with the specified index and copies its information * into userspace */ -static int drm_getclient(struct drm_device *dev, void *data, +int drm_getclient(struct drm_device *dev, void *data, struct drm_file *file_priv) { struct drm_client *client = data; @@@ -241,6 -241,9 +241,9 @@@ static int drm_getcap(struct drm_devic req->value |= dev->driver->prime_fd_to_handle ? DRM_PRIME_CAP_IMPORT : 0; req->value |= dev->driver->prime_handle_to_fd ? DRM_PRIME_CAP_EXPORT : 0; return 0; + case DRM_CAP_SYNCOBJ: + req->value = drm_core_check_feature(dev, DRIVER_SYNCOBJ); + return 0; } /* Other caps only work with KMS drivers */ @@@ -461,7 -464,7 +464,7 @@@ static int drm_copy_field(char __user * * * Fills in the version information in \p arg. */ -static int drm_version(struct drm_device *dev, void *data, +int drm_version(struct drm_device *dev, void *data, struct drm_file *file_priv) { struct drm_version *version = data; @@@ -645,6 -648,15 +648,15 @@@ static const struct drm_ioctl_desc drm_ DRM_IOCTL_DEF(DRM_IOCTL_MODE_ATOMIC, drm_mode_atomic_ioctl, DRM_MASTER|DRM_CONTROL_ALLOW|DRM_UNLOCKED), DRM_IOCTL_DEF(DRM_IOCTL_MODE_CREATEPROPBLOB, drm_mode_createblob_ioctl, DRM_CONTROL_ALLOW|DRM_UNLOCKED), DRM_IOCTL_DEF(DRM_IOCTL_MODE_DESTROYPROPBLOB, drm_mode_destroyblob_ioctl, DRM_CONTROL_ALLOW|DRM_UNLOCKED), + + DRM_IOCTL_DEF(DRM_IOCTL_SYNCOBJ_CREATE, drm_syncobj_create_ioctl, + DRM_UNLOCKED|DRM_RENDER_ALLOW), + DRM_IOCTL_DEF(DRM_IOCTL_SYNCOBJ_DESTROY, drm_syncobj_destroy_ioctl, + DRM_UNLOCKED|DRM_RENDER_ALLOW), + DRM_IOCTL_DEF(DRM_IOCTL_SYNCOBJ_HANDLE_TO_FD, drm_syncobj_handle_to_fd_ioctl, + DRM_UNLOCKED|DRM_RENDER_ALLOW), + DRM_IOCTL_DEF(DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE, drm_syncobj_fd_to_handle_ioctl, + DRM_UNLOCKED|DRM_RENDER_ALLOW), }; #define DRM_CORE_IOCTL_COUNT ARRAY_SIZE( drm_ioctls ) @@@ -694,33 -706,6 +706,33 @@@ * structure. */ +long drm_ioctl_kernel(struct file *file, drm_ioctl_t *func, void *kdata, + u32 flags) +{ + struct drm_file *file_priv = file->private_data; + struct drm_device *dev = file_priv->minor->dev; + int retcode; + + if (drm_device_is_unplugged(dev)) + return -ENODEV; + + retcode = drm_ioctl_permit(flags, file_priv); + if (unlikely(retcode)) + return retcode; + + /* Enforce sane locking for modern driver ioctls. */ + if (!drm_core_check_feature(dev, DRIVER_LEGACY) || + (flags & DRM_UNLOCKED)) + retcode = func(dev, kdata, file_priv); + else { + mutex_lock(&drm_global_mutex); + retcode = func(dev, kdata, file_priv); + mutex_unlock(&drm_global_mutex); + } + return retcode; +} +EXPORT_SYMBOL(drm_ioctl_kernel); + /** * drm_ioctl - ioctl callback implementation for DRM drivers * @filp: file this ioctl is called on @@@ -789,6 -774,10 +801,6 @@@ long drm_ioctl(struct file *filp goto err_i1; } - retcode = drm_ioctl_permit(ioctl->flags, file_priv); - if (unlikely(retcode)) - goto err_i1; - if (ksize <= sizeof(stack_kdata)) { kdata = stack_kdata; } else { @@@ -807,7 -796,16 +819,7 @@@ if (ksize > in_size) memset(kdata + in_size, 0, ksize - in_size); - /* Enforce sane locking for modern driver ioctls. */ - if (!drm_core_check_feature(dev, DRIVER_LEGACY) || - (ioctl->flags & DRM_UNLOCKED)) - retcode = func(dev, kdata, file_priv); - else { - mutex_lock(&drm_global_mutex); - retcode = func(dev, kdata, file_priv); - mutex_unlock(&drm_global_mutex); - } - + retcode = drm_ioctl_kernel(filp, func, kdata, ioctl->flags); if (copy_to_user((void __user *)arg, kdata, out_size) != 0) retcode = -EFAULT; diff --combined drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c index 1013765274da,ee7069e93eda..5bd93169dac2 --- a/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c +++ b/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c @@@ -172,7 -172,7 +172,7 @@@ static int submit_fence_sync(const stru for (i = 0; i < submit->nr_bos; i++) { struct etnaviv_gem_object *etnaviv_obj = submit->bos[i].obj; bool write = submit->bos[i].flags & ETNA_SUBMIT_BO_WRITE; - bool explicit = !(submit->flags & ETNA_SUBMIT_NO_IMPLICIT); + bool explicit = !!(submit->flags & ETNA_SUBMIT_NO_IMPLICIT); ret = etnaviv_gpu_fence_sync_obj(etnaviv_obj, context, write, explicit); @@@ -345,9 -345,9 +345,9 @@@ int etnaviv_ioctl_gem_submit(struct drm * Copy the command submission and bo array to kernel space in * one go, and do this outside of any locks. */ - bos = drm_malloc_ab(args->nr_bos, sizeof(*bos)); - relocs = drm_malloc_ab(args->nr_relocs, sizeof(*relocs)); - stream = drm_malloc_ab(1, args->stream_size); + bos = kvmalloc_array(args->nr_bos, sizeof(*bos), GFP_KERNEL); + relocs = kvmalloc_array(args->nr_relocs, sizeof(*relocs), GFP_KERNEL); + stream = kvmalloc_array(1, args->stream_size, GFP_KERNEL); cmdbuf = etnaviv_cmdbuf_new(gpu->cmdbuf_suballoc, ALIGN(args->stream_size, 8) + 8, args->nr_bos); @@@ -489,11 -489,11 +489,11 @@@ err_submit_cmds if (cmdbuf) etnaviv_cmdbuf_free(cmdbuf); if (stream) - drm_free_large(stream); + kvfree(stream); if (bos) - drm_free_large(bos); + kvfree(bos); if (relocs) - drm_free_large(relocs); + kvfree(relocs); return ret; } diff --combined drivers/gpu/drm/i915/i915_debugfs.c index 4bd1467c17b1,4577b0af6886..3f44076ec8a0 --- a/drivers/gpu/drm/i915/i915_debugfs.c +++ b/drivers/gpu/drm/i915/i915_debugfs.c @@@ -229,7 -229,7 +229,7 @@@ static int i915_gem_stolen_list_info(st int ret; total = READ_ONCE(dev_priv->mm.object_count); - objects = drm_malloc_ab(total, sizeof(*objects)); + objects = kvmalloc_array(total, sizeof(*objects), GFP_KERNEL); if (!objects) return -ENOMEM; @@@ -274,7 -274,7 +274,7 @@@ mutex_unlock(&dev->struct_mutex); out: - drm_free_large(objects); + kvfree(objects); return ret; } @@@ -292,8 -292,6 +292,8 @@@ static int per_file_stats(int id, void struct file_stats *stats = data; struct i915_vma *vma; + lockdep_assert_held(&obj->base.dev->struct_mutex); + stats->count++; stats->total += obj->base.size; if (!obj->bind_count) @@@ -478,8 -476,6 +478,8 @@@ static int i915_gem_object_info(struct struct drm_i915_gem_request *request; struct task_struct *task; + mutex_lock(&dev->struct_mutex); + memset(&stats, 0, sizeof(stats)); stats.file_priv = file->driver_priv; spin_lock(&file->table_lock); @@@ -491,6 -487,7 +491,6 @@@ * still alive (e.g. get_pid(current) => fork() => exit()). * Therefore, we need to protect this ->comm access using RCU. */ - mutex_lock(&dev->struct_mutex); request = list_first_entry_or_null(&file_priv->mm.request_list, struct drm_i915_gem_request, client_link); @@@ -500,7 -497,6 +500,7 @@@ PIDTYPE_PID); print_file_stats(m, task ? task->comm : "<unknown>", stats); rcu_read_unlock(); + mutex_unlock(&dev->struct_mutex); } mutex_unlock(&dev->filelist_mutex); @@@ -1674,12 -1670,22 +1674,22 @@@ static int i915_fbc_status(struct seq_f seq_printf(m, "FBC disabled: %s\n", dev_priv->fbc.no_fbc_reason); - if (intel_fbc_is_active(dev_priv) && INTEL_GEN(dev_priv) >= 7) { - uint32_t mask = INTEL_GEN(dev_priv) >= 8 ? - BDW_FBC_COMPRESSION_MASK : - IVB_FBC_COMPRESSION_MASK; - seq_printf(m, "Compressing: %s\n", - yesno(I915_READ(FBC_STATUS2) & mask)); + if (intel_fbc_is_active(dev_priv)) { + u32 mask; + + if (INTEL_GEN(dev_priv) >= 8) + mask = I915_READ(IVB_FBC_STATUS2) & BDW_FBC_COMP_SEG_MASK; + else if (INTEL_GEN(dev_priv) >= 7) + mask = I915_READ(IVB_FBC_STATUS2) & IVB_FBC_COMP_SEG_MASK; + else if (INTEL_GEN(dev_priv) >= 5) + mask = I915_READ(ILK_DPFC_STATUS) & ILK_DPFC_COMP_SEG_MASK; + else if (IS_G4X(dev_priv)) + mask = I915_READ(DPFC_STATUS) & DPFC_COMP_SEG_MASK; + else + mask = I915_READ(FBC_STATUS) & (FBC_STAT_COMPRESSING | + FBC_STAT_COMPRESSED); + + seq_printf(m, "Compressing: %s\n", yesno(mask)); } mutex_unlock(&dev_priv->fbc.lock); @@@ -1688,7 -1694,7 +1698,7 @@@ return 0; } - static int i915_fbc_fc_get(void *data, u64 *val) + static int i915_fbc_false_color_get(void *data, u64 *val) { struct drm_i915_private *dev_priv = data; @@@ -1700,7 -1706,7 +1710,7 @@@ return 0; } - static int i915_fbc_fc_set(void *data, u64 val) + static int i915_fbc_false_color_set(void *data, u64 val) { struct drm_i915_private *dev_priv = data; u32 reg; @@@ -1721,8 -1727,8 +1731,8 @@@ return 0; } - DEFINE_SIMPLE_ATTRIBUTE(i915_fbc_fc_fops, - i915_fbc_fc_get, i915_fbc_fc_set, + DEFINE_SIMPLE_ATTRIBUTE(i915_fbc_false_color_fops, + i915_fbc_false_color_get, i915_fbc_false_color_set, "%llu\n"); static int i915_ips_status(struct seq_file *m, void *unused) @@@ -1992,6 -1998,12 +2002,12 @@@ static int i915_context_status(struct s seq_putc(m, '\n'); } + seq_printf(m, + "\tvma hashtable size=%u (actual %lu), count=%u\n", + ctx->vma_lut.ht_size, + BIT(ctx->vma_lut.ht_bits), + ctx->vma_lut.ht_count); + seq_putc(m, '\n'); } @@@ -2486,8 -2498,6 +2502,6 @@@ static void i915_guc_client_info(struc client->wq_size, client->wq_offset, client->wq_tail); seq_printf(m, "\tWork queue full: %u\n", client->no_wq_space); - seq_printf(m, "\tFailed doorbell: %u\n", client->b_fail); - seq_printf(m, "\tLast submission result: %d\n", client->retcode); for_each_engine(engine, dev_priv, id) { u64 submissions = client->submissions[id]; @@@ -2498,42 -2508,34 +2512,34 @@@ seq_printf(m, "\tTotal: %llu\n", tot); } - static int i915_guc_info(struct seq_file *m, void *data) + static bool check_guc_submission(struct seq_file *m) { struct drm_i915_private *dev_priv = node_to_i915(m->private); const struct intel_guc *guc = &dev_priv->guc; - struct intel_engine_cs *engine; - enum intel_engine_id id; - u64 total; if (!guc->execbuf_client) { seq_printf(m, "GuC submission %s\n", HAS_GUC_SCHED(dev_priv) ? "disabled" : "not supported"); - return 0; + return false; } + return true; + } + + static int i915_guc_info(struct seq_file *m, void *data) + { + struct drm_i915_private *dev_priv = node_to_i915(m->private); + const struct intel_guc *guc = &dev_priv->guc; + + if (!check_guc_submission(m)) + return 0; + seq_printf(m, "Doorbell map:\n"); seq_printf(m, "\t%*pb\n", GUC_NUM_DOORBELLS, guc->doorbell_bitmap); seq_printf(m, "Doorbell next cacheline: 0x%x\n\n", guc->db_cacheline); - seq_printf(m, "GuC total action count: %llu\n", guc->action_count); - seq_printf(m, "GuC action failure count: %u\n", guc->action_fail); - seq_printf(m, "GuC last action command: 0x%x\n", guc->action_cmd); - seq_printf(m, "GuC last action status: 0x%x\n", guc->action_status); - seq_printf(m, "GuC last action error code: %d\n", guc->action_err); - - total = 0; - seq_printf(m, "\nGuC submissions:\n"); - for_each_engine(engine, dev_priv, id) { - u64 submissions = guc->submissions[id]; - total += submissions; - seq_printf(m, "\t%-24s: %10llu, last seqno 0x%08x\n", - engine->name, submissions, guc->last_seqno[id]); - } - seq_printf(m, "\t%s: %llu\n", "Total", total); - seq_printf(m, "\nGuC execbuf client @ %p:\n", guc->execbuf_client); i915_guc_client_info(m, dev_priv, guc->execbuf_client); @@@ -2544,36 -2546,99 +2550,99 @@@ return 0; } - static int i915_guc_log_dump(struct seq_file *m, void *data) + static int i915_guc_stage_pool(struct seq_file *m, void *data) { struct drm_i915_private *dev_priv = node_to_i915(m->private); - struct drm_i915_gem_object *obj; - int i = 0, pg; + const struct intel_guc *guc = &dev_priv->guc; + struct guc_stage_desc *desc = guc->stage_desc_pool_vaddr; + struct i915_guc_client *client = guc->execbuf_client; + unsigned int tmp; + int index; - if (!dev_priv->guc.log.vma) + if (!check_guc_submission(m)) return 0; - obj = dev_priv->guc.log.vma->obj; - for (pg = 0; pg < obj->base.size / PAGE_SIZE; pg++) { - u32 *log = kmap_atomic(i915_gem_object_get_page(obj, pg)); + for (index = 0; index < GUC_MAX_STAGE_DESCRIPTORS; index++, desc++) { + struct intel_engine_cs *engine; + + if (!(desc->attribute & GUC_STAGE_DESC_ATTR_ACTIVE)) + continue; - for (i = 0; i < PAGE_SIZE / sizeof(u32); i += 4) - seq_printf(m, "0x%08x 0x%08x 0x%08x 0x%08x\n", - *(log + i), *(log + i + 1), - *(log + i + 2), *(log + i + 3)); + seq_printf(m, "GuC stage descriptor %u:\n", index); + seq_printf(m, "\tIndex: %u\n", desc->stage_id); + seq_printf(m, "\tAttribute: 0x%x\n", desc->attribute); + seq_printf(m, "\tPriority: %d\n", desc->priority); + seq_printf(m, "\tDoorbell id: %d\n", desc->db_id); + seq_printf(m, "\tEngines used: 0x%x\n", + desc->engines_used); + seq_printf(m, "\tDoorbell trigger phy: 0x%llx, cpu: 0x%llx, uK: 0x%x\n", + desc->db_trigger_phy, + desc->db_trigger_cpu, + desc->db_trigger_uk); + seq_printf(m, "\tProcess descriptor: 0x%x\n", + desc->process_desc); + seq_printf(m, "\tWorkqueue address: 0x%x, size: 0x%x\n", + desc->wq_addr, desc->wq_size); + seq_putc(m, '\n'); - kunmap_atomic(log); + for_each_engine_masked(engine, dev_priv, client->engines, tmp) { + u32 guc_engine_id = engine->guc_id; + struct guc_execlist_context *lrc = + &desc->lrc[guc_engine_id]; + + seq_printf(m, "\t%s LRC:\n", engine->name); + seq_printf(m, "\t\tContext desc: 0x%x\n", + lrc->context_desc); + seq_printf(m, "\t\tContext id: 0x%x\n", lrc->context_id); + seq_printf(m, "\t\tLRCA: 0x%x\n", lrc->ring_lrca); + seq_printf(m, "\t\tRing begin: 0x%x\n", lrc->ring_begin); + seq_printf(m, "\t\tRing end: 0x%x\n", lrc->ring_end); + seq_putc(m, '\n'); + } } + return 0; + } + + static int i915_guc_log_dump(struct seq_file *m, void *data) + { + struct drm_info_node *node = m->private; + struct drm_i915_private *dev_priv = node_to_i915(node); + bool dump_load_err = !!node->info_ent->data; + struct drm_i915_gem_object *obj = NULL; + u32 *log; + int i = 0; + + if (dump_load_err) + obj = dev_priv->guc.load_err_log; + else if (dev_priv->guc.log.vma) + obj = dev_priv->guc.log.vma->obj; + + if (!obj) + return 0; + + log = i915_gem_object_pin_map(obj, I915_MAP_WC); + if (IS_ERR(log)) { + DRM_DEBUG("Failed to pin object\n"); + seq_puts(m, "(log data unaccessible)\n"); + return PTR_ERR(log); + } + + for (i = 0; i < obj->base.size / sizeof(u32); i += 4) + seq_printf(m, "0x%08x 0x%08x 0x%08x 0x%08x\n", + *(log + i), *(log + i + 1), + *(log + i + 2), *(log + i + 3)); + seq_putc(m, '\n'); + i915_gem_object_unpin_map(obj); + return 0; } static int i915_guc_log_control_get(void *data, u64 *val) { - struct drm_device *dev = data; - struct drm_i915_private *dev_priv = to_i915(dev); + struct drm_i915_private *dev_priv = data; if (!dev_priv->guc.log.vma) return -EINVAL; @@@ -2585,14 -2650,13 +2654,13 @@@ static int i915_guc_log_control_set(void *data, u64 val) { - struct drm_device *dev = data; - struct drm_i915_private *dev_priv = to_i915(dev); + struct drm_i915_private *dev_priv = data; int ret; if (!dev_priv->guc.log.vma) return -EINVAL; - ret = mutex_lock_interruptible(&dev->struct_mutex); + ret = mutex_lock_interruptible(&dev_priv->drm.struct_mutex); if (ret) return ret; @@@ -2600,7 -2664,7 +2668,7 @@@ ret = i915_guc_log_control(dev_priv, val); intel_runtime_pm_put(dev_priv); - mutex_unlock(&dev->struct_mutex); + mutex_unlock(&dev_priv->drm.struct_mutex); return ret; } @@@ -2859,7 -2923,8 +2927,8 @@@ static int i915_dmc_info(struct seq_fil seq_printf(m, "version: %d.%d\n", CSR_VERSION_MAJOR(csr->version), CSR_VERSION_MINOR(csr->version)); - if (IS_SKYLAKE(dev_priv) && csr->version >= CSR_VERSION(1, 6)) { + if (IS_KABYLAKE(dev_priv) || + (IS_SKYLAKE(dev_priv) && csr->version >= CSR_VERSION(1, 6))) { seq_printf(m, "DC3 -> DC5 count: %d\n", I915_READ(SKL_CSR_DC3_DC5_COUNT)); seq_printf(m, "DC5 -> DC6 count: %d\n", @@@ -3047,36 -3112,6 +3116,6 @@@ static void intel_connector_info(struc intel_seq_print_mode(m, 2, mode); } - static bool cursor_active(struct drm_i915_private *dev_priv, int pipe) - { - u32 state; - - if (IS_I845G(dev_priv) || IS_I865G(dev_priv)) - state = I915_READ(CURCNTR(PIPE_A)) & CURSOR_ENABLE; - else - state = I915_READ(CURCNTR(pipe)) & CURSOR_MODE; - - return state; - } - - static bool cursor_position(struct drm_i915_private *dev_priv, - int pipe, int *x, int *y) - { - u32 pos; - - pos = I915_READ(CURPOS(pipe)); - - *x = (pos >> CURSOR_X_SHIFT) & CURSOR_POS_MASK; - if (pos & (CURSOR_POS_SIGN << CURSOR_X_SHIFT)) - *x = -*x; - - *y = (pos >> CURSOR_Y_SHIFT) & CURSOR_POS_MASK; - if (pos & (CURSOR_POS_SIGN << CURSOR_Y_SHIFT)) - *y = -*y; - - return cursor_active(dev_priv, pipe); - } - static const char *plane_type(enum drm_plane_type type) { switch (type) { @@@ -3099,17 -3134,17 +3138,17 @@@ static const char *plane_rotation(unsig { static char buf[48]; /* - * According to doc only one DRM_ROTATE_ is allowed but this + * According to doc only one DRM_MODE_ROTATE_ is allowed but this * will print them all to visualize if the values are misused */ snprintf(buf, sizeof(buf), "%s%s%s%s%s%s(0x%08x)", - (rotation & DRM_ROTATE_0) ? "0 " : "", - (rotation & DRM_ROTATE_90) ? "90 " : "", - (rotation & DRM_ROTATE_180) ? "180 " : "", - (rotation & DRM_ROTATE_270) ? "270 " : "", - (rotation & DRM_REFLECT_X) ? "FLIPX " : "", - (rotation & DRM_REFLECT_Y) ? "FLIPY " : "", + (rotation & DRM_MODE_ROTATE_0) ? "0 " : "", + (rotation & DRM_MODE_ROTATE_90) ? "90 " : "", + (rotation & DRM_MODE_ROTATE_180) ? "180 " : "", + (rotation & DRM_MODE_ROTATE_270) ? "270 " : "", + (rotation & DRM_MODE_REFLECT_X) ? "FLIPX " : "", + (rotation & DRM_MODE_REFLECT_Y) ? "FLIPY " : "", rotation); return buf; @@@ -3198,9 -3233,7 +3237,7 @@@ static int i915_display_info(struct seq seq_printf(m, "CRTC info\n"); seq_printf(m, "---------\n"); for_each_intel_crtc(dev, crtc) { - bool active; struct intel_crtc_state *pipe_config; - int x, y; drm_modeset_lock(&crtc->base.mutex, NULL); pipe_config = to_intel_crtc_state(crtc->base.state); @@@ -3212,14 -3245,18 +3249,18 @@@ yesno(pipe_config->dither), pipe_config->pipe_bpp); if (pipe_config->base.active) { + struct intel_plane *cursor = + to_intel_plane(crtc->base.cursor); + intel_crtc_info(m, crtc); - active = cursor_position(dev_priv, crtc->pipe, &x, &y); - seq_printf(m, "\tcursor visible? %s, position (%d, %d), size %dx%d, addr 0x%08x, active? %s\n", - yesno(crtc->cursor_base), - x, y, crtc->base.cursor->state->crtc_w, - crtc->base.cursor->state->crtc_h, - crtc->cursor_addr, yesno(active)); + seq_printf(m, "\tcursor visible? %s, position (%d, %d), size %dx%d, addr 0x%08x\n", + yesno(cursor->base.state->visible), + cursor->base.state->crtc_x, + cursor->base.state->crtc_y, + cursor->base.state->crtc_w, + cursor->base.state->crtc_h, + cursor->cursor.base); intel_scaler_info(m, crtc); intel_plane_info(m, crtc); } @@@ -3320,7 -3357,7 +3361,7 @@@ static int i915_engine_info(struct seq_ if (i915.enable_execlists) { u32 ptr, read, write; - struct rb_node *rb; + unsigned int idx; seq_printf(m, "\tExeclist status: 0x%08x %08x\n", I915_READ(RING_EXECLIST_STATUS_LO(engine)), @@@ -3338,8 -3375,7 +3379,7 @@@ if (read > write) write += GEN8_CSB_ENTRIES; while (read < write) { - unsigned int idx = ++read % GEN8_CSB_ENTRIES; - + idx = ++read % GEN8_CSB_ENTRIES; seq_printf(m, "\tExeclist CSB[%d]: 0x%08x, context: %d\n", idx, I915_READ(RING_CONTEXT_STATUS_BUF_LO(engine, idx)), @@@ -3347,28 -3383,30 +3387,30 @@@ } rcu_read_lock(); - rq = READ_ONCE(engine->execlist_port[0].request); - if (rq) { - seq_printf(m, "\t\tELSP[0] count=%d, ", - engine->execlist_port[0].count); - print_request(m, rq, "rq: "); - } else { - seq_printf(m, "\t\tELSP[0] idle\n"); - } - rq = READ_ONCE(engine->execlist_port[1].request); - if (rq) { - seq_printf(m, "\t\tELSP[1] count=%d, ", - engine->execlist_port[1].count); - print_request(m, rq, "rq: "); - } else { - seq_printf(m, "\t\tELSP[1] idle\n"); + for (idx = 0; idx < ARRAY_SIZE(engine->execlist_port); idx++) { + unsigned int count; + + rq = port_unpack(&engine->execlist_port[idx], + &count); + if (rq) { + seq_printf(m, "\t\tELSP[%d] count=%d, ", + idx, count); + print_request(m, rq, "rq: "); + } else { + seq_printf(m, "\t\tELSP[%d] idle\n", + idx); + } } rcu_read_unlock(); spin_lock_irq(&engine->timeline->lock); - for (rb = engine->execlist_first; rb; rb = rb_next(rb)) { - rq = rb_entry(rb, typeof(*rq), priotree.node); - print_request(m, rq, "\t\tQ "); + for (rb = engine->execlist_first; rb; rb = rb_next(rb)){ + struct i915_priolist *p = + rb_entry(rb, typeof(*p), node); + + list_for_each_entry(rq, &p->requests, + priotree.link) + print_request(m, rq, "\t\tQ "); } spin_unlock_irq(&engine->timeline->lock); } else if (INTEL_GEN(dev_priv) > 6) { @@@ -3708,16 -3746,10 +3750,10 @@@ static ssize_t i915_displayport_test_ac if (len == 0) return 0; - input_buffer = kmalloc(len + 1, GFP_KERNEL); - if (!input_buffer) - return -ENOMEM; - - if (copy_from_user(input_buffer, ubuf, len)) { - status = -EFAULT; - goto out; - } + input_buffer = memdup_user_nul(ubuf, len); + if (IS_ERR(input_buffer)) + return PTR_ERR(input_buffer); - input_buffer[len] = '\0'; DRM_DEBUG_DRIVER("Copied %d bytes from user\n", (unsigned int)len); drm_connector_list_iter_begin(dev, &conn_iter); @@@ -3743,7 -3775,6 +3779,6 @@@ } } drm_connector_list_iter_end(&conn_iter); - out: kfree(input_buffer); if (status < 0) return status; @@@ -3904,6 -3935,8 +3939,8 @@@ static void wm_latency_show(struct seq_ num_levels = 3; else if (IS_VALLEYVIEW(dev_priv)) num_levels = 1; + else if (IS_G4X(dev_priv)) + num_levels = 3; else num_levels = ilk_wm_max_level(dev_priv) + 1; @@@ -3916,8 -3949,10 +3953,10 @@@ * - WM1+ latency values in 0.5us units * - latencies are in us on gen9/vlv/chv */ - if (INTEL_GEN(dev_priv) >= 9 || IS_VALLEYVIEW(dev_priv) || - IS_CHERRYVIEW(dev_priv)) + if (INTEL_GEN(dev_priv) >= 9 || + IS_VALLEYVIEW(dev_priv) || + IS_CHERRYVIEW(dev_priv) || + IS_G4X(dev_priv)) latency *= 10; else if (level > 0) latency *= 5; @@@ -3978,7 -4013,7 +4017,7 @@@ static int pri_wm_latency_open(struct i { struct drm_i915_private *dev_priv = inode->i_private; - if (INTEL_GEN(dev_priv) < 5) + if (INTEL_GEN(dev_priv) < 5 && !IS_G4X(dev_priv)) return -ENODEV; return single_open(file, pri_wm_latency_show, dev_priv); @@@ -4020,6 -4055,8 +4059,8 @@@ static ssize_t wm_latency_write(struct num_levels = 3; else if (IS_VALLEYVIEW(dev_priv)) num_levels = 1; + else if (IS_G4X(dev_priv)) + num_levels = 3; else num_levels = ilk_wm_max_level(dev_priv) + 1; @@@ -4268,26 -4305,27 +4309,27 @@@ i915_drop_caches_set(void *data, u64 va { struct drm_i915_private *dev_priv = data; struct drm_device *dev = &dev_priv->drm; - int ret; + int ret = 0; DRM_DEBUG("Dropping caches: 0x%08llx\n", val); /* No need to check and wait for gpu resets, only libdrm auto-restarts * on ioctls on -EAGAIN. */ - ret = mutex_lock_interruptible(&dev->struct_mutex); - if (ret) - return ret; - - if (val & DROP_ACTIVE) { - ret = i915_gem_wait_for_idle(dev_priv, - I915_WAIT_INTERRUPTIBLE | - I915_WAIT_LOCKED); + if (val & (DROP_ACTIVE | DROP_RETIRE)) { + ret = mutex_lock_interruptible(&dev->struct_mutex); if (ret) - goto unlock; - } + return ret; + + if (val & DROP_ACTIVE) + ret = i915_gem_wait_for_idle(dev_priv, + I915_WAIT_INTERRUPTIBLE | + I915_WAIT_LOCKED); - if (val & DROP_RETIRE) - i915_gem_retire_requests(dev_priv); + if (val & DROP_RETIRE) + i915_gem_retire_requests(dev_priv); + + mutex_unlock(&dev->struct_mutex); + } lockdep_set_current_reclaim_state(GFP_KERNEL); if (val & DROP_BOUND) @@@ -4300,9 -4338,6 +4342,6 @@@ i915_gem_shrink_all(dev_priv); lockdep_clear_current_reclaim_state(); - unlock: - mutex_unlock(&dev->struct_mutex); - if (val & DROP_FREED) { synchronize_rcu(); i915_gem_drain_freed_objects(dev_priv); @@@ -4780,6 -4815,8 +4819,8 @@@ static const struct drm_info_list i915_ {"i915_guc_info", i915_guc_info, 0}, {"i915_guc_load_status", i915_guc_load_status_info, 0}, {"i915_guc_log_dump", i915_guc_log_dump, 0}, + {"i915_guc_load_err_log_dump", i915_guc_log_dump, 0, (void *)1}, + {"i915_guc_stage_pool", i915_guc_stage_pool, 0}, {"i915_huc_load_status", i915_huc_load_status_info, 0}, {"i915_frequency_info", i915_frequency_info, 0}, {"i915_hangcheck_info", i915_hangcheck_info, 0}, @@@ -4838,7 -4875,7 +4879,7 @@@ static const struct i915_debugfs_files {"i915_pri_wm_latency", &i915_pri_wm_latency_fops}, {"i915_spr_wm_latency", &i915_spr_wm_latency_fops}, {"i915_cur_wm_latency", &i915_cur_wm_latency_fops}, - {"i915_fbc_false_color", &i915_fbc_fc_fops}, + {"i915_fbc_false_color", &i915_fbc_false_color_fops}, {"i915_dp_test_data", &i915_displayport_test_data_fops}, {"i915_dp_test_type", &i915_displayport_test_type_fops}, {"i915_dp_test_active", &i915_displayport_test_active_fops}, diff --combined drivers/gpu/drm/i915/i915_gem_request.h index a4a920c4c454,7b7c84369d78..7579b9702c22 --- a/drivers/gpu/drm/i915/i915_gem_request.h +++ b/drivers/gpu/drm/i915/i915_gem_request.h @@@ -67,12 -67,18 +67,18 @@@ struct i915_dependency struct i915_priotree { struct list_head signalers_list; /* those before us, we depend upon */ struct list_head waiters_list; /* those after us, they depend upon us */ - struct rb_node node; + struct list_head link; int priority; #define I915_PRIORITY_MAX 1024 + #define I915_PRIORITY_NORMAL 0 #define I915_PRIORITY_MIN (-I915_PRIORITY_MAX) }; + struct i915_gem_capture_list { + struct i915_gem_capture_list *next; + struct i915_vma *vma; + }; + /** * Request queue structure. * @@@ -123,7 -129,7 +129,7 @@@ struct drm_i915_gem_request * It is used by the driver to then queue the request for execution. */ struct i915_sw_fence submit; - wait_queue_t submitq; + wait_queue_entry_t submitq; wait_queue_head_t execute; /* A list of everyone we wait upon, and everyone who waits upon us. @@@ -167,6 -173,12 +173,12 @@@ * error state dump only). */ struct i915_vma *batch; + /** Additional buffers requested by userspace to be captured upon + * a GPU hang. The vma/obj on this list are protected by their + * active reference - all objects on this list must also be + * on the active_list (of their final request). + */ + struct i915_gem_capture_list *capture_list; struct list_head active_list; /** Time at which this request was emitted, in jiffies. */ diff --combined drivers/gpu/drm/i915/i915_sw_fence.c index 380de4360b8a,474d23c0c0ce..f29540f922af --- a/drivers/gpu/drm/i915/i915_sw_fence.c +++ b/drivers/gpu/drm/i915/i915_sw_fence.c @@@ -12,6 -12,7 +12,7 @@@ #include <linux/reservation.h> #include "i915_sw_fence.h" + #include "i915_selftest.h" #define I915_SW_FENCE_FLAG_ALLOC BIT(3) /* after WQ_FLAG_* for safety */ @@@ -120,39 -121,11 +121,11 @@@ void i915_sw_fence_fini(struct i915_sw_ } #endif - static void i915_sw_fence_release(struct kref *kref) - { - struct i915_sw_fence *fence = container_of(kref, typeof(*fence), kref); - - WARN_ON(atomic_read(&fence->pending) > 0); - debug_fence_destroy(fence); - - if (fence->flags & I915_SW_FENCE_MASK) { - __i915_sw_fence_notify(fence, FENCE_FREE); - } else { - i915_sw_fence_fini(fence); - kfree(fence); - } - } - - static void i915_sw_fence_put(struct i915_sw_fence *fence) - { - debug_fence_assert(fence); - kref_put(&fence->kref, i915_sw_fence_release); - } - - static struct i915_sw_fence *i915_sw_fence_get(struct i915_sw_fence *fence) - { - debug_fence_assert(fence); - kref_get(&fence->kref); - return fence; - } - static void __i915_sw_fence_wake_up_all(struct i915_sw_fence *fence, struct list_head *continuation) { wait_queue_head_t *x = &fence->wait; - wait_queue_t *pos, *next; + wait_queue_entry_t *pos, *next; unsigned long flags; debug_fence_deactivate(fence); @@@ -160,30 -133,31 +133,30 @@@ /* * To prevent unbounded recursion as we traverse the graph of - * i915_sw_fences, we move the task_list from this, the next ready - * fence, to the tail of the original fence's task_list + * i915_sw_fences, we move the entry list from this, the next ready + * fence, to the tail of the original fence's entry list * (and so added to the list to be woken). */ spin_lock_irqsave_nested(&x->lock, flags, 1 + !!continuation); if (continuation) { - list_for_each_entry_safe(pos, next, &x->task_list, task_list) { + list_for_each_entry_safe(pos, next, &x->head, entry) { if (pos->func == autoremove_wake_function) pos->func(pos, TASK_NORMAL, 0, continuation); else - list_move_tail(&pos->task_list, continuation); + list_move_tail(&pos->entry, continuation); } } else { LIST_HEAD(extra); do { - list_for_each_entry_safe(pos, next, - &x->task_list, task_list) + list_for_each_entry_safe(pos, next, &x->head, entry) pos->func(pos, TASK_NORMAL, 0, &extra); if (list_empty(&extra)) break; - list_splice_tail_init(&extra, &x->task_list); + list_splice_tail_init(&extra, &x->head); } while (1); } spin_unlock_irqrestore(&x->lock, flags); @@@ -201,13 -175,15 +174,15 @@@ static void __i915_sw_fence_complete(st debug_fence_set_state(fence, DEBUG_FENCE_IDLE, DEBUG_FENCE_NOTIFY); - if (fence->flags & I915_SW_FENCE_MASK && - __i915_sw_fence_notify(fence, FENCE_COMPLETE) != NOTIFY_DONE) + if (__i915_sw_fence_notify(fence, FENCE_COMPLETE) != NOTIFY_DONE) return; debug_fence_set_state(fence, DEBUG_FENCE_NOTIFY, DEBUG_FENCE_IDLE); __i915_sw_fence_wake_up_all(fence, continuation); + + debug_fence_destroy(fence); + __i915_sw_fence_notify(fence, FENCE_FREE); } static void i915_sw_fence_complete(struct i915_sw_fence *fence) @@@ -231,33 -207,26 +206,26 @@@ void __i915_sw_fence_init(struct i915_s const char *name, struct lock_class_key *key) { - BUG_ON((unsigned long)fn & ~I915_SW_FENCE_MASK); + BUG_ON(!fn || (unsigned long)fn & ~I915_SW_FENCE_MASK); debug_fence_init(fence); __init_waitqueue_head(&fence->wait, name, key); - kref_init(&fence->kref); atomic_set(&fence->pending, 1); fence->flags = (unsigned long)fn; } - static void __i915_sw_fence_commit(struct i915_sw_fence *fence) - { - i915_sw_fence_complete(fence); - i915_sw_fence_put(fence); - } - void i915_sw_fence_commit(struct i915_sw_fence *fence) { debug_fence_activate(fence); - __i915_sw_fence_commit(fence); + i915_sw_fence_complete(fence); } -static int i915_sw_fence_wake(wait_queue_t *wq, unsigned mode, int flags, void *key) +static int i915_sw_fence_wake(wait_queue_entry_t *wq, unsigned mode, int flags, void *key) { - list_del(&wq->task_list); + list_del(&wq->entry); __i915_sw_fence_complete(wq->private, key); - i915_sw_fence_put(wq->private); + if (wq->flags & I915_SW_FENCE_FLAG_ALLOC) kfree(wq); return 0; @@@ -266,7 -235,7 +234,7 @@@ static bool __i915_sw_fence_check_if_after(struct i915_sw_fence *fence, const struct i915_sw_fence * const signaler) { - wait_queue_t *wq; + wait_queue_entry_t *wq; if (__test_and_set_bit(I915_SW_FENCE_CHECKED_BIT, &fence->flags)) return false; @@@ -274,7 -243,7 +242,7 @@@ if (fence == signaler) return true; - list_for_each_entry(wq, &fence->wait.task_list, task_list) { + list_for_each_entry(wq, &fence->wait.head, entry) { if (wq->func != i915_sw_fence_wake) continue; @@@ -287,12 -256,12 +255,12 @@@ static void __i915_sw_fence_clear_checked_bit(struct i915_sw_fence *fence) { - wait_queue_t *wq; + wait_queue_entry_t *wq; if (!__test_and_clear_bit(I915_SW_FENCE_CHECKED_BIT, &fence->flags)) return; - list_for_each_entry(wq, &fence->wait.task_list, task_list) { + list_for_each_entry(wq, &fence->wait.head, entry) { if (wq->func != i915_sw_fence_wake) continue; @@@ -306,7 -275,7 +274,7 @@@ static bool i915_sw_fence_check_if_afte unsigned long flags; bool err; - if (!IS_ENABLED(CONFIG_I915_SW_FENCE_CHECK_DAG)) + if (!IS_ENABLED(CONFIG_DRM_I915_SW_FENCE_CHECK_DAG)) return false; spin_lock_irqsave(&i915_sw_fence_lock, flags); @@@ -319,7 -288,7 +287,7 @@@ static int __i915_sw_fence_await_sw_fence(struct i915_sw_fence *fence, struct i915_sw_fence *signaler, - wait_queue_t *wq, gfp_t gfp) + wait_queue_entry_t *wq, gfp_t gfp) { unsigned long flags; int pending; @@@ -349,16 -318,16 +317,16 @@@ pending |= I915_SW_FENCE_FLAG_ALLOC; } - INIT_LIST_HEAD(&wq->task_list); + INIT_LIST_HEAD(&wq->entry); wq->flags = pending; wq->func = i915_sw_fence_wake; - wq->private = i915_sw_fence_get(fence); + wq->private = fence; i915_sw_fence_await(fence); spin_lock_irqsave(&signaler->wait.lock, flags); if (likely(!i915_sw_fence_done(signaler))) { - __add_wait_queue_tail(&signaler->wait, wq); + __add_wait_queue_entry_tail(&signaler->wait, wq); pending = 1; } else { i915_sw_fence_wake(wq, 0, 0, NULL); @@@ -371,7 -340,7 +339,7 @@@ int i915_sw_fence_await_sw_fence(struct i915_sw_fence *fence, struct i915_sw_fence *signaler, - wait_queue_t *wq) + wait_queue_entry_t *wq) { return __i915_sw_fence_await_sw_fence(fence, signaler, wq, 0); } @@@ -401,7 -370,7 +369,7 @@@ static void timer_i915_sw_fence_wake(un dma_fence_put(cb->dma); cb->dma = NULL; - __i915_sw_fence_commit(cb->fence); + i915_sw_fence_complete(cb->fence); cb->timer.function = NULL; } @@@ -412,7 -381,7 +380,7 @@@ static void dma_i915_sw_fence_wake(stru del_timer_sync(&cb->timer); if (cb->timer.function) - __i915_sw_fence_commit(cb->fence); + i915_sw_fence_complete(cb->fence); dma_fence_put(cb->dma); kfree(cb); @@@ -439,7 -408,7 +407,7 @@@ int i915_sw_fence_await_dma_fence(struc return dma_fence_wait(dma, false); } - cb->fence = i915_sw_fence_get(fence); + cb->fence = fence; i915_sw_fence_await(fence); cb->dma = NULL; @@@ -522,3 -491,7 +490,7 @@@ int i915_sw_fence_await_reservation(str return ret; } + + #if IS_ENABLED(CONFIG_DRM_I915_SELFTEST) + #include "selftests/i915_sw_fence.c" + #endif diff --combined drivers/gpu/drm/i915/i915_sw_fence.h index fd3c3bf6c8b7,1d3b6051daaf..fe2ef4dadfc6 --- a/drivers/gpu/drm/i915/i915_sw_fence.h +++ b/drivers/gpu/drm/i915/i915_sw_fence.h @@@ -23,7 -23,6 +23,6 @@@ struct reservation_object struct i915_sw_fence { wait_queue_head_t wait; unsigned long flags; - struct kref kref; atomic_t pending; }; @@@ -66,7 -65,7 +65,7 @@@ void i915_sw_fence_commit(struct i915_s int i915_sw_fence_await_sw_fence(struct i915_sw_fence *fence, struct i915_sw_fence *after, - wait_queue_t *wq); + wait_queue_entry_t *wq); int i915_sw_fence_await_sw_fence_gfp(struct i915_sw_fence *fence, struct i915_sw_fence *after, gfp_t gfp); diff --combined drivers/gpu/drm/i915/i915_vma.c index f066e2d785f5,532c709febbd..1cfe137cdc32 --- a/drivers/gpu/drm/i915/i915_vma.c +++ b/drivers/gpu/drm/i915/i915_vma.c @@@ -85,12 -85,12 +85,12 @@@ vma_create(struct drm_i915_gem_object * if (vma == NULL) return ERR_PTR(-ENOMEM); - INIT_LIST_HEAD(&vma->exec_list); for (i = 0; i < ARRAY_SIZE(vma->last_read); i++) init_request_active(&vma->last_read[i], i915_vma_retire); init_request_active(&vma->last_fence, NULL); vma->vm = vm; vma->obj = obj; + vma->resv = obj->resv; vma->size = obj->base.size; vma->display_alignment = I915_GTT_MIN_ALIGNMENT; @@@ -464,7 -464,7 +464,7 @@@ i915_vma_insert(struct i915_vma *vma, u size, obj->base.size, flags & PIN_MAPPABLE ? "mappable" : "total", end); - return -E2BIG; + return -ENOSPC; } ret = i915_gem_object_pin_pages(obj); @@@ -577,7 -577,7 +577,7 @@@ err_unpin return ret; } - void i915_vma_destroy(struct i915_vma *vma) + static void i915_vma_destroy(struct i915_vma *vma) { GEM_BUG_ON(vma->node.allocated); GEM_BUG_ON(i915_vma_is_active(vma)); @@@ -591,11 -591,33 +591,33 @@@ kmem_cache_free(to_i915(vma->obj->base.dev)->vmas, vma); } + void i915_vma_unlink_ctx(struct i915_vma *vma) + { + struct i915_gem_context *ctx = vma->ctx; + + if (ctx->vma_lut.ht_size & I915_CTX_RESIZE_IN_PROGRESS) { + cancel_work_sync(&ctx->vma_lut.resize); + ctx->vma_lut.ht_size &= ~I915_CTX_RESIZE_IN_PROGRESS; + } + + __hlist_del(&vma->ctx_node); + ctx->vma_lut.ht_count--; + + if (i915_vma_is_ggtt(vma)) + vma->obj->vma_hashed = NULL; + vma->ctx = NULL; + + i915_vma_put(vma); + } + void i915_vma_close(struct i915_vma *vma) { GEM_BUG_ON(i915_vma_is_closed(vma)); vma->flags |= I915_VMA_CLOSED; + if (vma->ctx) + i915_vma_unlink_ctx(vma); + list_del(&vma->obj_link); rb_erase(&vma->obj_node, &vma->obj->vma_tree); @@@ -650,11 -672,6 +672,11 @@@ int i915_vma_unbind(struct i915_vma *vm break; } + if (!ret) { + ret = i915_gem_active_retire(&vma->last_fence, + &vma->vm->i915->drm.struct_mutex); + } + __i915_vma_unpin(vma); if (ret) return ret; diff --combined drivers/gpu/drm/radeon/Makefile index 640f8b3f9443,a5d3cd3ecb5f..4acbb944bcd2 --- a/drivers/gpu/drm/radeon/Makefile +++ b/drivers/gpu/drm/radeon/Makefile @@@ -2,7 -2,7 +2,7 @@@ # Makefile for the drm device driver. This driver provides support for the # Direct Rendering Infrastructure (DRI) in XFree86 4.1.0 and higher. - ccflags-y := -Iinclude/drm -Idrivers/gpu/drm/amd/include + ccflags-y := -Idrivers/gpu/drm/amd/include hostprogs-y := mkregtable clean-files := rn50_reg_safe.h r100_reg_safe.h r200_reg_safe.h rv515_reg_safe.h r300_reg_safe.h r420_reg_safe.h rs600_reg_safe.h r600_reg_safe.h evergreen_reg_safe.h cayman_reg_safe.h @@@ -105,6 -105,7 +105,6 @@@ radeon-y += vce_v2_0.o \ radeon_kfd.o -radeon-$(CONFIG_COMPAT) += radeon_ioc32.o radeon-$(CONFIG_VGA_SWITCHEROO) += radeon_atpx_handler.o radeon-$(CONFIG_ACPI) += radeon_acpi.o diff --combined drivers/gpu/drm/radeon/radeon.h index e562a78510ff,68be1bfa22b9..5008f3d4cccc --- a/drivers/gpu/drm/radeon/radeon.h +++ b/drivers/gpu/drm/radeon/radeon.h @@@ -68,11 -68,11 +68,11 @@@ #include <linux/hashtable.h> #include <linux/dma-fence.h> - #include <ttm/ttm_bo_api.h> - #include <ttm/ttm_bo_driver.h> - #include <ttm/ttm_placement.h> - #include <ttm/ttm_module.h> - #include <ttm/ttm_execbuf_util.h> + #include <drm/ttm/ttm_bo_api.h> + #include <drm/ttm/ttm_bo_driver.h> + #include <drm/ttm/ttm_placement.h> + #include <drm/ttm/ttm_module.h> + #include <drm/ttm/ttm_execbuf_util.h> #include <drm/drm_gem.h> @@@ -115,6 -115,8 +115,8 @@@ extern int radeon_auxch extern int radeon_mst; extern int radeon_uvd; extern int radeon_vce; + extern int radeon_si_support; + extern int radeon_cik_support; /* * Copy from radeon_drv.h so we don't have to include both and have conflicting @@@ -375,7 -377,7 +377,7 @@@ struct radeon_fence unsigned ring; bool is_vm_update; - wait_queue_t fence_wake; + wait_queue_entry_t fence_wake; }; int radeon_fence_driver_start_ring(struct radeon_device *rdev, int ring); @@@ -767,24 -769,9 +769,9 @@@ struct r600_irq_stat_regs }; struct evergreen_irq_stat_regs { - u32 disp_int; - u32 disp_int_cont; - u32 disp_int_cont2; - u32 disp_int_cont3; - u32 disp_int_cont4; - u32 disp_int_cont5; - u32 d1grph_int; - u32 d2grph_int; - u32 d3grph_int; - u32 d4grph_int; - u32 d5grph_int; - u32 d6grph_int; - u32 afmt_status1; - u32 afmt_status2; - u32 afmt_status3; - u32 afmt_status4; - u32 afmt_status5; - u32 afmt_status6; + u32 disp_int[6]; + u32 grph_int[6]; + u32 afmt_status[6]; }; struct cik_irq_stat_regs { @@@ -2976,6 -2963,12 +2963,12 @@@ int r600_cs_common_vline_parse(struct r uint32_t *vline_start_end, uint32_t *vline_status); + /* interrupt control register helpers */ + void radeon_irq_kms_set_irq_n_enabled(struct radeon_device *rdev, + u32 reg, u32 mask, + bool enable, const char *name, + unsigned n); + #include "radeon_object.h" #endif diff --combined drivers/gpu/drm/radeon/radeon_drv.c index e25cb51ce0ca,b23c771f4216..74abd161237b --- a/drivers/gpu/drm/radeon/radeon_drv.c +++ b/drivers/gpu/drm/radeon/radeon_drv.c @@@ -38,11 -38,10 +38,11 @@@ #include <linux/module.h> #include <linux/pm_runtime.h> #include <linux/vga_switcheroo.h> +#include <linux/compat.h> #include <drm/drm_gem.h> #include <drm/drm_fb_helper.h> - #include "drm_crtc_helper.h" + #include <drm/drm_crtc_helper.h> #include "radeon_kfd.h" /* @@@ -116,10 -115,6 +116,6 @@@ int radeon_resume_kms(struct drm_devic u32 radeon_get_vblank_counter_kms(struct drm_device *dev, unsigned int pipe); int radeon_enable_vblank_kms(struct drm_device *dev, unsigned int pipe); void radeon_disable_vblank_kms(struct drm_device *dev, unsigned int pipe); - int radeon_get_vblank_timestamp_kms(struct drm_device *dev, unsigned int pipe, - int *max_error, - struct timeval *vblank_time, - unsigned flags); void radeon_driver_irq_preinstall_kms(struct drm_device *dev); int radeon_driver_irq_postinstall_kms(struct drm_device *dev); void radeon_driver_irq_uninstall_kms(struct drm_device *dev); @@@ -155,6 -150,8 +151,6 @@@ void radeon_gem_prime_unpin(struct drm_ struct reservation_object *radeon_gem_prime_res_obj(struct drm_gem_object *); void *radeon_gem_prime_vmap(struct drm_gem_object *obj); void radeon_gem_prime_vunmap(struct drm_gem_object *obj, void *vaddr); -extern long radeon_kms_compat_ioctl(struct file *filp, unsigned int cmd, - unsigned long arg); /* atpx handler */ #if defined(CONFIG_VGA_SWITCHEROO) @@@ -298,6 -295,14 +294,14 @@@ module_param_named(uvd, radeon_uvd, int MODULE_PARM_DESC(vce, "vce enable/disable vce support (1 = enable, 0 = disable)"); module_param_named(vce, radeon_vce, int, 0444); + int radeon_si_support = 1; + MODULE_PARM_DESC(si_support, "SI support (1 = enabled (default), 0 = disabled)"); + module_param_named(si_support, radeon_si_support, int, 0444); + + int radeon_cik_support = 1; + MODULE_PARM_DESC(cik_support, "CIK support (1 = enabled (default), 0 = disabled)"); + module_param_named(cik_support, radeon_cik_support, int, 0444); + static struct pci_device_id pciidlist[] = { radeon_PCI_IDS }; @@@ -504,21 -509,6 +508,21 @@@ long radeon_drm_ioctl(struct file *filp return ret; } +#ifdef CONFIG_COMPAT +static long radeon_kms_compat_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) +{ + unsigned int nr = DRM_IOCTL_NR(cmd); + int ret; + + if (nr < DRM_COMMAND_BASE) + return drm_compat_ioctl(filp, cmd, arg); + + ret = radeon_drm_ioctl(filp, cmd, arg); + + return ret; +} +#endif + static const struct dev_pm_ops radeon_pm_ops = { .suspend = radeon_pmops_suspend, .resume = radeon_pmops_resume, @@@ -544,6 -534,16 +548,16 @@@ static const struct file_operations rad #endif }; + static bool + radeon_get_crtc_scanout_position(struct drm_device *dev, unsigned int pipe, + bool in_vblank_irq, int *vpos, int *hpos, + ktime_t *stime, ktime_t *etime, + const struct drm_display_mode *mode) + { + return radeon_get_crtc_scanoutpos(dev, pipe, 0, vpos, hpos, + stime, etime, mode); + } + static struct drm_driver kms_driver = { .driver_features = DRIVER_USE_AGP | @@@ -558,8 -558,8 +572,8 @@@ .get_vblank_counter = radeon_get_vblank_counter_kms, .enable_vblank = radeon_enable_vblank_kms, .disable_vblank = radeon_disable_vblank_kms, - .get_vblank_timestamp = radeon_get_vblank_timestamp_kms, - .get_scanout_position = radeon_get_crtc_scanoutpos, + .get_vblank_timestamp = drm_calc_vbltimestamp_from_scanoutpos, + .get_scanout_position = radeon_get_crtc_scanout_position, .irq_preinstall = radeon_driver_irq_preinstall_kms, .irq_postinstall = radeon_driver_irq_postinstall_kms, .irq_uninstall = radeon_driver_irq_uninstall_kms, diff --combined sound/x86/intel_hdmi_audio.c index 37f06ffdf1e6,c19efc9708d7..a0951505c7f5 --- a/sound/x86/intel_hdmi_audio.c +++ b/sound/x86/intel_hdmi_audio.c @@@ -42,6 -42,11 +42,11 @@@ #include <drm/intel_lpe_audio.h> #include "intel_hdmi_audio.h" + #define for_each_pipe(card_ctx, pipe) \ + for ((pipe) = 0; (pipe) < (card_ctx)->num_pipes; (pipe)++) + #define for_each_port(card_ctx, port) \ + for ((port) = 0; (port) < (card_ctx)->num_ports; (port)++) + /*standard module options for ALSA. This module supports only one card*/ static int hdmi_card_index = SNDRV_DEFAULT_IDX1; static char *hdmi_card_id = SNDRV_DEFAULT_STR1; @@@ -189,15 -194,30 +194,30 @@@ static void had_substream_put(struct sn spin_unlock_irqrestore(&intelhaddata->had_spinlock, flags); } + static u32 had_config_offset(int pipe) + { + switch (pipe) { + default: + case 0: + return AUDIO_HDMI_CONFIG_A; + case 1: + return AUDIO_HDMI_CONFIG_B; + case 2: + return AUDIO_HDMI_CONFIG_C; + } + } + /* Register access functions */ - static u32 had_read_register_raw(struct snd_intelhad *ctx, u32 reg) + static u32 had_read_register_raw(struct snd_intelhad_card *card_ctx, + int pipe, u32 reg) { - return ioread32(ctx->mmio_start + ctx->had_config_offset + reg); + return ioread32(card_ctx->mmio_start + had_config_offset(pipe) + reg); } - static void had_write_register_raw(struct snd_intelhad *ctx, u32 reg, u32 val) + static void had_write_register_raw(struct snd_intelhad_card *card_ctx, + int pipe, u32 reg, u32 val) { - iowrite32(val, ctx->mmio_start + ctx->had_config_offset + reg); + iowrite32(val, card_ctx->mmio_start + had_config_offset(pipe) + reg); } static void had_read_register(struct snd_intelhad *ctx, u32 reg, u32 *val) @@@ -205,13 -225,13 +225,13 @@@ if (!ctx->connected) *val = 0; else - *val = had_read_register_raw(ctx, reg); + *val = had_read_register_raw(ctx->card_ctx, ctx->pipe, reg); } static void had_write_register(struct snd_intelhad *ctx, u32 reg, u32 val) { if (ctx->connected) - had_write_register_raw(ctx, reg, val); + had_write_register_raw(ctx->card_ctx, ctx->pipe, reg, val); } /* @@@ -1358,6 -1378,9 +1378,9 @@@ static void had_process_hot_plug(struc return; } + /* Disable Audio */ + had_enable_audio(intelhaddata, false); + intelhaddata->connected = true; dev_dbg(intelhaddata->dev, "%s @ %d:DEBUG PLUG/UNPLUG : HAD_DRV_CONNECTED\n", @@@ -1519,22 -1542,32 +1542,32 @@@ static const struct snd_kcontrol_new ha */ static irqreturn_t display_pipe_interrupt_handler(int irq, void *dev_id) { - struct snd_intelhad *ctx = dev_id; - u32 audio_stat; + struct snd_intelhad_card *card_ctx = dev_id; + u32 audio_stat[3] = {}; + int pipe, port; + + for_each_pipe(card_ctx, pipe) { + /* use raw register access to ack IRQs even while disconnected */ + audio_stat[pipe] = had_read_register_raw(card_ctx, pipe, + AUD_HDMI_STATUS) & + (HDMI_AUDIO_UNDERRUN | HDMI_AUDIO_BUFFER_DONE); + + if (audio_stat[pipe]) + had_write_register_raw(card_ctx, pipe, + AUD_HDMI_STATUS, audio_stat[pipe]); + } - /* use raw register access to ack IRQs even while disconnected */ - audio_stat = had_read_register_raw(ctx, AUD_HDMI_STATUS); + for_each_port(card_ctx, port) { + struct snd_intelhad *ctx = &card_ctx->pcm_ctx[port]; + int pipe = ctx->pipe; - if (audio_stat & HDMI_AUDIO_UNDERRUN) { - had_write_register_raw(ctx, AUD_HDMI_STATUS, - HDMI_AUDIO_UNDERRUN); - had_process_buffer_underrun(ctx); - } + if (pipe < 0) + continue; - if (audio_stat & HDMI_AUDIO_BUFFER_DONE) { - had_write_register_raw(ctx, AUD_HDMI_STATUS, - HDMI_AUDIO_BUFFER_DONE); - had_process_buffer_done(ctx); + if (audio_stat[pipe] & HDMI_AUDIO_BUFFER_DONE) + had_process_buffer_done(ctx); + if (audio_stat[pipe] & HDMI_AUDIO_UNDERRUN) + had_process_buffer_underrun(ctx); } return IRQ_HANDLED; @@@ -1543,9 -1576,10 +1576,10 @@@ /* * monitor plug/unplug notification from i915; just kick off the work */ - static void notify_audio_lpe(struct platform_device *pdev) + static void notify_audio_lpe(struct platform_device *pdev, int port) { - struct snd_intelhad *ctx = platform_get_drvdata(pdev); + struct snd_intelhad_card *card_ctx = platform_get_drvdata(pdev); + struct snd_intelhad *ctx = &card_ctx->pcm_ctx[port]; schedule_work(&ctx->hdmi_audio_wq); } @@@ -1556,47 -1590,51 +1590,51 @@@ static void had_audio_wq(struct work_st struct snd_intelhad *ctx = container_of(work, struct snd_intelhad, hdmi_audio_wq); struct intel_hdmi_lpe_audio_pdata *pdata = ctx->dev->platform_data; + struct intel_hdmi_lpe_audio_port_pdata *ppdata = &pdata->port[ctx->port]; pm_runtime_get_sync(ctx->dev); mutex_lock(&ctx->mutex); - if (!pdata->hdmi_connected) { - dev_dbg(ctx->dev, "%s: Event: HAD_NOTIFY_HOT_UNPLUG\n", - __func__); + if (ppdata->pipe < 0) { + dev_dbg(ctx->dev, "%s: Event: HAD_NOTIFY_HOT_UNPLUG : port = %d\n", + __func__, ctx->port); + memset(ctx->eld, 0, sizeof(ctx->eld)); /* clear the old ELD */ + + ctx->dp_output = false; + ctx->tmds_clock_speed = 0; + ctx->link_rate = 0; + + /* Shut down the stream */ had_process_hot_unplug(ctx); - } else { - struct intel_hdmi_lpe_audio_eld *eld = &pdata->eld; + ctx->pipe = -1; + } else { dev_dbg(ctx->dev, "%s: HAD_NOTIFY_ELD : port = %d, tmds = %d\n", - __func__, eld->port_id, pdata->tmds_clock_speed); - - switch (eld->pipe_id) { - case 0: - ctx->had_config_offset = AUDIO_HDMI_CONFIG_A; - break; - case 1: - ctx->had_config_offset = AUDIO_HDMI_CONFIG_B; - break; - case 2: - ctx->had_config_offset = AUDIO_HDMI_CONFIG_C; - break; - default: - dev_dbg(ctx->dev, "Invalid pipe %d\n", - eld->pipe_id); - break; - } + __func__, ctx->port, ppdata->ls_clock); - memcpy(ctx->eld, eld->eld_data, sizeof(ctx->eld)); + memcpy(ctx->eld, ppdata->eld, sizeof(ctx->eld)); - ctx->dp_output = pdata->dp_output; - ctx->tmds_clock_speed = pdata->tmds_clock_speed; - ctx->link_rate = pdata->link_rate; + ctx->dp_output = ppdata->dp_output; + if (ctx->dp_output) { + ctx->tmds_clock_speed = 0; + ctx->link_rate = ppdata->ls_clock; + } else { + ctx->tmds_clock_speed = ppdata->ls_clock; + ctx->link_rate = 0; + } + /* + * Shut down the stream before we change + * the pipe assignment for this pcm device + */ had_process_hot_plug(ctx); - /* Process mode change if stream is active */ + ctx->pipe = ppdata->pipe; + + /* Restart the stream if necessary */ had_process_mode_change(ctx); } + mutex_unlock(&ctx->mutex); pm_runtime_mark_last_busy(ctx->dev); pm_runtime_put_autosuspend(ctx->dev); @@@ -1605,11 -1643,17 +1643,17 @@@ /* * Jack interface */ - static int had_create_jack(struct snd_intelhad *ctx) + static int had_create_jack(struct snd_intelhad *ctx, + struct snd_pcm *pcm) { + char hdmi_str[32]; int err; - err = snd_jack_new(ctx->card, "HDMI/DP", SND_JACK_AVOUT, &ctx->jack, + snprintf(hdmi_str, sizeof(hdmi_str), + "HDMI/DP,pcm=%d", pcm->device); + + err = snd_jack_new(ctx->card_ctx->card, hdmi_str, + SND_JACK_AVOUT, &ctx->jack, true, false); if (err < 0) return err; @@@ -1623,13 -1667,18 +1667,18 @@@ static int hdmi_lpe_audio_runtime_suspend(struct device *dev) { - struct snd_intelhad *ctx = dev_get_drvdata(dev); - struct snd_pcm_substream *substream; + struct snd_intelhad_card *card_ctx = dev_get_drvdata(dev); + int port; - substream = had_substream_get(ctx); - if (substream) { - snd_pcm_suspend(substream); - had_substream_put(ctx); + for_each_port(card_ctx, port) { + struct snd_intelhad *ctx = &card_ctx->pcm_ctx[port]; + struct snd_pcm_substream *substream; + + substream = had_substream_get(ctx); + if (substream) { + snd_pcm_suspend(substream); + had_substream_put(ctx); + } } return 0; @@@ -1637,12 -1686,12 +1686,12 @@@ static int __maybe_unused hdmi_lpe_audio_suspend(struct device *dev) { - struct snd_intelhad *ctx = dev_get_drvdata(dev); + struct snd_intelhad_card *card_ctx = dev_get_drvdata(dev); int err; err = hdmi_lpe_audio_runtime_suspend(dev); if (!err) - snd_power_change_state(ctx->card, SNDRV_CTL_POWER_D3hot); + snd_power_change_state(card_ctx->card, SNDRV_CTL_POWER_D3hot); return err; } @@@ -1654,24 -1703,34 +1703,34 @@@ static int hdmi_lpe_audio_runtime_resum static int __maybe_unused hdmi_lpe_audio_resume(struct device *dev) { - struct snd_intelhad *ctx = dev_get_drvdata(dev); + struct snd_intelhad_card *card_ctx = dev_get_drvdata(dev); hdmi_lpe_audio_runtime_resume(dev); - snd_power_change_state(ctx->card, SNDRV_CTL_POWER_D0); + snd_power_change_state(card_ctx->card, SNDRV_CTL_POWER_D0); return 0; } /* release resources */ static void hdmi_lpe_audio_free(struct snd_card *card) { - struct snd_intelhad *ctx = card->private_data; + struct snd_intelhad_card *card_ctx = card->private_data; + struct intel_hdmi_lpe_audio_pdata *pdata = card_ctx->dev->platform_data; + int port; + + spin_lock_irq(&pdata->lpe_audio_slock); + pdata->notify_audio_lpe = NULL; + spin_unlock_irq(&pdata->lpe_audio_slock); - cancel_work_sync(&ctx->hdmi_audio_wq); + for_each_port(card_ctx, port) { + struct snd_intelhad *ctx = &card_ctx->pcm_ctx[port]; - if (ctx->mmio_start) - iounmap(ctx->mmio_start); - if (ctx->irq >= 0) - free_irq(ctx->irq, ctx); + cancel_work_sync(&ctx->hdmi_audio_wq); + } + + if (card_ctx->mmio_start) + iounmap(card_ctx->mmio_start); + if (card_ctx->irq >= 0) + free_irq(card_ctx->irq, card_ctx); } /* @@@ -1683,12 -1742,12 +1742,12 @@@ static int hdmi_lpe_audio_probe(struct platform_device *pdev) { struct snd_card *card; - struct snd_intelhad *ctx; + struct snd_intelhad_card *card_ctx; struct snd_pcm *pcm; struct intel_hdmi_lpe_audio_pdata *pdata; int irq; struct resource *res_mmio; - int i, ret; + int port, ret; pdata = pdev->dev.platform_data; if (!pdata) { @@@ -1699,8 -1758,8 +1758,8 @@@ /* get resources */ irq = platform_get_irq(pdev, 0); if (irq < 0) { - dev_err(&pdev->dev, "Could not get irq resource\n"); - return -ENODEV; + dev_err(&pdev->dev, "Could not get irq resource: %d\n", irq); + return irq; } res_mmio = platform_get_resource(pdev, IORESOURCE_MEM, 0); @@@ -1711,39 -1770,30 +1770,30 @@@ /* create a card instance with ALSA framework */ ret = snd_card_new(&pdev->dev, hdmi_card_index, hdmi_card_id, - THIS_MODULE, sizeof(*ctx), &card); + THIS_MODULE, sizeof(*card_ctx), &card); if (ret) return ret; - ctx = card->private_data; - spin_lock_init(&ctx->had_spinlock); - mutex_init(&ctx->mutex); - ctx->connected = false; - ctx->dev = &pdev->dev; - ctx->card = card; - ctx->aes_bits = SNDRV_PCM_DEFAULT_CON_SPDIF; + card_ctx = card->private_data; + card_ctx->dev = &pdev->dev; + card_ctx->card = card; strcpy(card->driver, INTEL_HAD); strcpy(card->shortname, "Intel HDMI/DP LPE Audio"); strcpy(card->longname, "Intel HDMI/DP LPE Audio"); - ctx->irq = -1; - ctx->tmds_clock_speed = DIS_SAMPLE_RATE_148_5; - INIT_WORK(&ctx->hdmi_audio_wq, had_audio_wq); + card_ctx->irq = -1; card->private_free = hdmi_lpe_audio_free; - /* assume pipe A as default */ - ctx->had_config_offset = AUDIO_HDMI_CONFIG_A; - - platform_set_drvdata(pdev, ctx); + platform_set_drvdata(pdev, card_ctx); dev_dbg(&pdev->dev, "%s: mmio_start = 0x%x, mmio_end = 0x%x\n", __func__, (unsigned int)res_mmio->start, (unsigned int)res_mmio->end); - ctx->mmio_start = ioremap_nocache(res_mmio->start, - (size_t)(resource_size(res_mmio))); - if (!ctx->mmio_start) { + card_ctx->mmio_start = ioremap_nocache(res_mmio->start, + (size_t)(resource_size(res_mmio))); + if (!card_ctx->mmio_start) { dev_err(&pdev->dev, "Could not get ioremap\n"); ret = -EACCES; goto err; @@@ -1751,54 -1801,79 +1801,79 @@@ /* setup interrupt handler */ ret = request_irq(irq, display_pipe_interrupt_handler, 0, - pdev->name, ctx); + pdev->name, card_ctx); if (ret < 0) { dev_err(&pdev->dev, "request_irq failed\n"); goto err; } - ctx->irq = irq; - - ret = snd_pcm_new(card, INTEL_HAD, PCM_INDEX, MAX_PB_STREAMS, - MAX_CAP_STREAMS, &pcm); - if (ret) - goto err; - - /* setup private data which can be retrieved when required */ - pcm->private_data = ctx; - pcm->info_flags = 0; - strncpy(pcm->name, card->shortname, strlen(card->shortname)); - /* setup the ops for playabck */ - snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &had_pcm_ops); + card_ctx->irq = irq; /* only 32bit addressable */ dma_set_mask(&pdev->dev, DMA_BIT_MASK(32)); dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(32)); - /* allocate dma pages; - * try to allocate 600k buffer as default which is large enough - */ - snd_pcm_lib_preallocate_pages_for_all(pcm, - SNDRV_DMA_TYPE_DEV, NULL, - HAD_DEFAULT_BUFFER, HAD_MAX_BUFFER); + init_channel_allocations(); - /* create controls */ - for (i = 0; i < ARRAY_SIZE(had_controls); i++) { - ret = snd_ctl_add(card, snd_ctl_new1(&had_controls[i], ctx)); - if (ret < 0) + card_ctx->num_pipes = pdata->num_pipes; + card_ctx->num_ports = pdata->num_ports; + + for_each_port(card_ctx, port) { + struct snd_intelhad *ctx = &card_ctx->pcm_ctx[port]; + int i; + + ctx->card_ctx = card_ctx; + ctx->dev = card_ctx->dev; + ctx->port = port; + ctx->pipe = -1; + + INIT_WORK(&ctx->hdmi_audio_wq, had_audio_wq); + + ret = snd_pcm_new(card, INTEL_HAD, port, MAX_PB_STREAMS, + MAX_CAP_STREAMS, &pcm); + if (ret) goto err; - } - init_channel_allocations(); + /* setup private data which can be retrieved when required */ + pcm->private_data = ctx; + pcm->info_flags = 0; + strncpy(pcm->name, card->shortname, strlen(card->shortname)); + /* setup the ops for playabck */ + snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &had_pcm_ops); - /* Register channel map controls */ - ret = had_register_chmap_ctls(ctx, pcm); - if (ret < 0) - goto err; + /* allocate dma pages; + * try to allocate 600k buffer as default which is large enough + */ + snd_pcm_lib_preallocate_pages_for_all(pcm, + SNDRV_DMA_TYPE_DEV, NULL, + HAD_DEFAULT_BUFFER, HAD_MAX_BUFFER); + + /* create controls */ + for (i = 0; i < ARRAY_SIZE(had_controls); i++) { + struct snd_kcontrol *kctl; + + kctl = snd_ctl_new1(&had_controls[i], ctx); + if (!kctl) { + ret = -ENOMEM; + goto err; + } - ret = had_create_jack(ctx); - if (ret < 0) - goto err; + kctl->id.device = pcm->device; + + ret = snd_ctl_add(card, kctl); + if (ret < 0) + goto err; + } + + /* Register channel map controls */ + ret = had_register_chmap_ctls(ctx, pcm); + if (ret < 0) + goto err; + + ret = had_create_jack(ctx, pcm); + if (ret < 0) + goto err; + } ret = snd_card_register(card); if (ret) @@@ -1806,7 -1881,6 +1881,6 @@@ spin_lock_irq(&pdata->lpe_audio_slock); pdata->notify_audio_lpe = notify_audio_lpe; - pdata->notify_pending = false; spin_unlock_irq(&pdata->lpe_audio_slock); pm_runtime_use_autosuspend(&pdev->dev); @@@ -1814,7 -1888,11 +1888,11 @@@ pm_runtime_set_active(&pdev->dev); dev_dbg(&pdev->dev, "%s: handle pending notification\n", __func__); - schedule_work(&ctx->hdmi_audio_wq); + for_each_port(card_ctx, port) { + struct snd_intelhad *ctx = &card_ctx->pcm_ctx[port]; + + schedule_work(&ctx->hdmi_audio_wq); + } return 0; @@@ -1830,9 -1908,9 +1908,9 @@@ err */ static int hdmi_lpe_audio_remove(struct platform_device *pdev) { - struct snd_intelhad *ctx = platform_get_drvdata(pdev); + struct snd_intelhad_card *card_ctx = platform_get_drvdata(pdev); - snd_card_free(ctx->card); + snd_card_free(card_ctx->card); return 0; } -- LinuxNextTracking
5 years, 8 months
1
0
0
0
Coverity Scan: Analysis completed for batctl
by scan-admin@coverity.com
Your request for analysis of batctl has been completed successfully. The results are available at
https://u2389337.ct.sendgrid.net/wf/click?upn=08onrYu34A-2BWcWUl-2F-2BfV0V0…
Analysis Summary: New defects found: 0 Defects eliminated: 1
5 years, 8 months
1
0
0
0
Build check errors found: 2017-07-11
by postmaster@open-mesh.org
Name of failed tests ==================== master ------ * difference between net and batadv master maint ----- * difference between net and batadv maint Output of different failed tests ================================ maint: difference between net and batadv maint ---------------------------------------------- net/net/batman-adv/bat_iv_ogm.c | 9 +- net/net/batman-adv/bat_v.c | 2 net/net/batman-adv/bat_v_elp.c | 13 ++- net/net/batman-adv/bat_v_ogm.c | 6 - net/net/batman-adv/bridge_loop_avoidance.c | 73 ++++++++++---------- net/net/batman-adv/distributed-arp-table.c | 2 net/net/batman-adv/fragmentation.c | 3 net/net/batman-adv/icmp_socket.c | 2 net/net/batman-adv/main.h | 2 net/net/batman-adv/network-coding.c | 4 - net/net/batman-adv/routing.c | 4 - net/net/batman-adv/send.c | 6 - net/net/batman-adv/tp_meter.c | 9 +- net/net/batman-adv/translation-table.c | 21 +++-- 14 files changed, 81 insertions(+), 75 deletions(-) master: difference between net and batadv master ------------------------------------------------ netnext/net/batman-adv/bat_iv_ogm.c | 4 +++- netnext/net/batman-adv/bat_v_ogm.c | 4 ++-- netnext/net/batman-adv/distributed-arp-table.c | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) Statistics ========== master ------ Failed tests: 1 Started build tests: 70 Tested Linux versions: 27 Tested configs: 51 maint ----- Failed tests: 1 Started build tests: 75 Tested Linux versions: 27 Tested configs: 57
5 years, 8 months
1
0
0
0
[linux-next] LinuxNextTracking branch, master, updated. next-20170710
by batman@open-mesh.org
The following commit has been merged in the master branch: commit 0dfaeb618f6cd2010b23e8b2be3c892c35d39633 Merge: 90311148415ab23f5767fbb577a012d4405f12e5 d791db9a57ab7f390916dce0fa1315130bb6664c Author: Linus Torvalds <torvalds(a)linux-foundation.org> Date: Thu Jul 6 15:33:27 2017 -0700 Merge tag 'platform-drivers-x86-v4.13-1' of
git://git.infradead.org/linux-platform-drivers-x86
Pull x86 platform driver updates from Darren Hart: "Introduce new bus architecture for WMI and expose BMOF data through sysfs. Correct several assumptions about WMI instance number from 1 to 0. Further fujitsu-laptop cleanups, continuing to prepare for separation into two modules. Add support for several new ideapad laptops and silead-based tablets. Various minor fixes and const cleanups. Detail summary: sony-laptop: - constify attribute_group and input index array fujitsu-laptop: - rework debugging - do not evaluate ACPI _INI methods - do not update ACPI device power status - sanitize hotkey input device identification - use strcpy to set ACPI device names and classes - remove redundant safety checks - use device-specific data in remaining module code - use device-specific data in LED-related code - explicitly pass ACPI device to call_fext_func() - track the last instantiated FUJ02E3 ACPI device - allocate fujitsu_laptop in acpi_fujitsu_laptop_add() - use device-specific data in backlight code - allocate fujitsu_bl in acpi_fujitsu_bl_add() - distinguish current uses of device-specific data msi-laptop: - constify msipf*_attribute_group eeepc-laptop: - constify platform_attribute_group toshiba_haps: - constify haps_attr_group dell-wmi-led: - Adjust instance of wmi_evaluate_method calls to 0 alienware-wmi: - Adjust instance of wmi_evaluate_method calls to 0 intel_menlow: - Add const to thermal_cooling_device_ops structure acerhdf: - Add const to thermal_cooling_device_ops structure dell-laptop: - Fix bogus keyboard backlight sysfs interface acer-wmi: - Using zero as first WMI instance number - Detect RF Button capability ideapad-laptop: - Add Y720-15IKBN to no_hw_rfkill - Add Y520-15IKBN to no_hw_rfkill - constify rfkill_ops structure - Squelch ACPI event 1 - hide unused 'touchpad_store' - Switch touchpad attribute to be RO - Add sysfs interface for touchpad state silead_dmi: - Add touchscreen info for PoV mobii wintab p800w - Add touchscreen info for Pipo W2S tablet - Add touchscreen info for GP-electronic T701 dell-rbtn: - constify rfkill_ops structures - Improve explanation about DELLABC6 samsung-laptop: - constify rfkill_ops structures panasonic-laptop: - remove unused code samsung-laptop: - Initialize loca variable dell-wmi: - Convert to the WMI bus infrastructure - Add a better description for "stealth mode" - Add a comment explaining the 0xb2 magic number wmi-bmof: - New driver to expose embedded Binary WMI MOF metadata wmi*: - Fix printing info about WDG structure - Add recent copyright statements - Require query for data blocks, rename writable to setable - Add an interface for subdrivers to access sibling devices - Bind the platform device, not the ACPI node - Add a new interface to read block data - Incorporate acpi_install_notify_handler - Instantiate all devices before adding them - Probe data objects for read and write capabilities - Split devices into types and add basic sysfs attributes - Fix error handling when creating devices - Turn WMI into a bus driver - Track wmi devices per ACPI device - Clean up acpi_wmi_add - Pass the acpi_device through to parse_wdg - Drop "Mapper (un)loaded" messages intel_cht_int33fe: - Set supplied-from property on max17047 dev intel_pmc_ipc: - Mark ipc_data_readb() as __maybe_unused topstar-laptop: - Add new device id peaq-wmi: - Add new peaq-wmi driver thinkpad_acpi: - Add a comment about 0 in module_param_call() - Join string literals back toshiba_acpi: - use memdup_user_nul" * tag 'platform-drivers-x86-v4.13-1' of
git://git.infradead.org/linux-platform-drivers-x86
: (67 commits) platform/x86: sony-laptop: constify attribute_group and input index array platform/x86: fujitsu-laptop: rework debugging platform/x86: fujitsu-laptop: do not evaluate ACPI _INI methods platform/x86: fujitsu-laptop: do not update ACPI device power status platform/x86: fujitsu-laptop: sanitize hotkey input device identification platform/x86: fujitsu-laptop: use strcpy to set ACPI device names and classes platform/x86: fujitsu-laptop: remove redundant safety checks platform/x86: msi-laptop: constify msipf*_attribute_group platform/x86: eeepc-laptop: constify platform_attribute_group platform/x86: toshiba_haps: constify haps_attr_group platform/x86: dell-wmi-led: Adjust instance of wmi_evaluate_method calls to 0 platform/x86: alienware-wmi: Adjust instance of wmi_evaluate_method calls to 0 platform/x86: intel_menlow: Add const to thermal_cooling_device_ops structure platform/x86: acerhdf: Add const to thermal_cooling_device_ops structure platform/x86: dell-laptop: Fix bogus keyboard backlight sysfs interface platform/x86: acer-wmi: Using zero as first WMI instance number platform/x86: ideapad-laptop: Add Y720-15IKBN to no_hw_rfkill platform/x86: ideapad-laptop: Add Y520-15IKBN to no_hw_rfkill platform/x86: silead_dmi: Add touchscreen info for PoV mobii wintab p800w platform/x86: silead_dmi: Add touchscreen info for Pipo W2S tablet ... diff --combined drivers/platform/x86/Kconfig index a3ccc3c795a5,c30f159353fd..b04860703740 --- a/drivers/platform/x86/Kconfig +++ b/drivers/platform/x86/Kconfig @@@ -195,16 -195,6 +195,6 @@@ config FUJITSU_LAPTO If you have a Fujitsu laptop, say Y or M here. - config FUJITSU_LAPTOP_DEBUG - bool "Verbose debug mode for Fujitsu Laptop Extras" - depends on FUJITSU_LAPTOP - default n - ---help--- - Enables extra debug output from the fujitsu extras driver, at the - expense of a slight increase in driver size. - - If you are not sure, say N here. - config FUJITSU_TABLET tristate "Fujitsu Tablet Extras" depends on ACPI @@@ -656,6 -646,18 +646,18 @@@ config ACPI_WM It is safe to enable this driver even if your DSDT doesn't define any ACPI-WMI devices. + config WMI_BMOF + tristate "WMI embedded Binary MOF driver" + depends on ACPI_WMI + default ACPI_WMI + ---help--- + Say Y here if you want to be able to read a firmware-embedded + WMI Binary MOF data. Using this requires userspace tools and may be + rather tedious. + + To compile this driver as a module, choose M here: the module will + be called wmi-bmof. + config MSI_WMI tristate "MSI WMI extras" depends on ACPI_WMI @@@ -669,6 -671,13 +671,13 @@@ To compile this driver as a module, choose M here: the module will be called msi-wmi. + config PEAQ_WMI + tristate "PEAQ 2-in-1 WMI hotkey driver" + depends on ACPI_WMI + depends on INPUT + help + Say Y here if you want to support WMI-based hotkeys on PEAQ 2-in-1s. + config TOPSTAR_LAPTOP tristate "Topstar Laptop Extras" depends on ACPI @@@ -794,25 -803,6 +803,25 @@@ config INTEL_CHT_INT33F This driver instantiates i2c-clients for these, so that standard i2c drivers for these chips can bind to the them. +config INTEL_INT0002_VGPIO + tristate "Intel ACPI INT0002 Virtual GPIO driver" + depends on GPIOLIB && ACPI + select GPIOLIB_IRQCHIP + ---help--- + Some peripherals on Bay Trail and Cherry Trail platforms signal a + Power Management Event (PME) to the Power Management Controller (PMC) + to wakeup the system. When this happens software needs to explicitly + clear the PME bus 0 status bit in the GPE0a_STS register to avoid an + IRQ storm on IRQ 9. + + This is modelled in ACPI through the INT0002 ACPI device, which is + called a "Virtual GPIO controller" in ACPI because it defines the + event handler to call when the PME triggers through _AEI and _L02 + methods as would be done for a real GPIO interrupt in ACPI. + + To compile this driver as a module, choose M here: the module will + be called intel_int0002_vgpio. + config INTEL_HID_EVENT tristate "INTEL HID Event" depends on ACPI diff --combined drivers/platform/x86/Makefile index ab22ce77fb66,6a1063edc6dc..91cec1751461 --- a/drivers/platform/x86/Makefile +++ b/drivers/platform/x86/Makefile @@@ -35,8 -35,10 +35,10 @@@ obj-$(CONFIG_PANASONIC_LAPTOP) += panas obj-$(CONFIG_INTEL_MENLOW) += intel_menlow.o obj-$(CONFIG_ACPI_WMI) += wmi.o obj-$(CONFIG_MSI_WMI) += msi-wmi.o + obj-$(CONFIG_PEAQ_WMI) += peaq-wmi.o obj-$(CONFIG_SURFACE3_WMI) += surface3-wmi.o obj-$(CONFIG_TOPSTAR_LAPTOP) += topstar-laptop.o + obj-$(CONFIG_WMI_BMOF) += wmi-bmof.o # toshiba_acpi must link after wmi to ensure that wmi devices are found # before toshiba_acpi initializes @@@ -46,7 -48,6 +48,7 @@@ obj-$(CONFIG_TOSHIBA_BT_RFKILL) += tosh obj-$(CONFIG_TOSHIBA_HAPS) += toshiba_haps.o obj-$(CONFIG_TOSHIBA_WMI) += toshiba-wmi.o obj-$(CONFIG_INTEL_CHT_INT33FE) += intel_cht_int33fe.o +obj-$(CONFIG_INTEL_INT0002_VGPIO) += intel_int0002_vgpio.o obj-$(CONFIG_INTEL_HID_EVENT) += intel-hid.o obj-$(CONFIG_INTEL_VBTN) += intel-vbtn.o obj-$(CONFIG_INTEL_SCU_IPC) += intel_scu_ipc.o diff --combined drivers/platform/x86/thinkpad_acpi.c index f6861b551178,cab115bece15..b22573131e53 --- a/drivers/platform/x86/thinkpad_acpi.c +++ b/drivers/platform/x86/thinkpad_acpi.c @@@ -590,8 -590,8 +590,8 @@@ static int acpi_evalf(acpi_handle handl break; /* add more types as needed */ default: - pr_err("acpi_evalf() called " - "with invalid format character '%c'\n", c); + pr_err("acpi_evalf() called with invalid format character '%c'\n", + c); va_end(ap); return 0; } @@@ -619,8 -619,8 +619,8 @@@ break; /* add more types as needed */ default: - pr_err("acpi_evalf() called " - "with invalid format character '%c'\n", res_type); + pr_err("acpi_evalf() called with invalid format character '%c'\n", + res_type); return 0; } @@@ -790,8 -790,8 +790,8 @@@ static int __init setup_acpi_notify(str ibm->acpi->type, dispatch_acpi_notify, ibm); if (ACPI_FAILURE(status)) { if (status == AE_ALREADY_EXISTS) { - pr_notice("another device driver is already " - "handling %s events\n", ibm->name); + pr_notice("another device driver is already handling %s events\n", + ibm->name); } else { pr_err("acpi_install_notify_handler(%s) failed: %s\n", ibm->name, acpi_format_exception(status)); @@@ -1095,8 -1095,7 +1095,7 @@@ static void printk_deprecated_attribute const char * const details) { tpacpi_log_usertask("deprecated sysfs attribute"); - pr_warn("WARNING: sysfs attribute %s is deprecated and " - "will be removed. %s\n", + pr_warn("WARNING: sysfs attribute %s is deprecated and will be removed. %s\n", what, details); } @@@ -1438,20 -1437,25 +1437,20 @@@ static int tpacpi_rfk_procfs_write(cons */ /* interface_version --------------------------------------------------- */ -static ssize_t tpacpi_driver_interface_version_show( - struct device_driver *drv, - char *buf) +static ssize_t interface_version_show(struct device_driver *drv, char *buf) { return snprintf(buf, PAGE_SIZE, "0x%08x\n", TPACPI_SYSFS_VERSION); } - -static DRIVER_ATTR(interface_version, S_IRUGO, - tpacpi_driver_interface_version_show, NULL); +static DRIVER_ATTR_RO(interface_version); /* debug_level --------------------------------------------------------- */ -static ssize_t tpacpi_driver_debug_show(struct device_driver *drv, - char *buf) +static ssize_t debug_level_show(struct device_driver *drv, char *buf) { return snprintf(buf, PAGE_SIZE, "0x%04x\n", dbg_level); } -static ssize_t tpacpi_driver_debug_store(struct device_driver *drv, - const char *buf, size_t count) +static ssize_t debug_level_store(struct device_driver *drv, const char *buf, + size_t count) { unsigned long t; @@@ -1462,28 -1466,34 +1461,28 @@@ return count; } - -static DRIVER_ATTR(debug_level, S_IWUSR | S_IRUGO, - tpacpi_driver_debug_show, tpacpi_driver_debug_store); +static DRIVER_ATTR_RW(debug_level); /* version ------------------------------------------------------------- */ -static ssize_t tpacpi_driver_version_show(struct device_driver *drv, - char *buf) +static ssize_t version_show(struct device_driver *drv, char *buf) { return snprintf(buf, PAGE_SIZE, "%s v%s\n", TPACPI_DESC, TPACPI_VERSION); } - -static DRIVER_ATTR(version, S_IRUGO, - tpacpi_driver_version_show, NULL); +static DRIVER_ATTR_RO(version); /* --------------------------------------------------------------------- */ #ifdef CONFIG_THINKPAD_ACPI_DEBUGFACILITIES /* wlsw_emulstate ------------------------------------------------------ */ -static ssize_t tpacpi_driver_wlsw_emulstate_show(struct device_driver *drv, - char *buf) +static ssize_t wlsw_emulstate_show(struct device_driver *drv, char *buf) { return snprintf(buf, PAGE_SIZE, "%d\n", !!tpacpi_wlsw_emulstate); } -static ssize_t tpacpi_driver_wlsw_emulstate_store(struct device_driver *drv, - const char *buf, size_t count) +static ssize_t wlsw_emulstate_store(struct device_driver *drv, const char *buf, + size_t count) { unsigned long t; @@@ -1497,16 -1507,22 +1496,16 @@@ return count; } - -static DRIVER_ATTR(wlsw_emulstate, S_IWUSR | S_IRUGO, - tpacpi_driver_wlsw_emulstate_show, - tpacpi_driver_wlsw_emulstate_store); +static DRIVER_ATTR_RW(wlsw_emulstate); /* bluetooth_emulstate ------------------------------------------------- */ -static ssize_t tpacpi_driver_bluetooth_emulstate_show( - struct device_driver *drv, - char *buf) +static ssize_t bluetooth_emulstate_show(struct device_driver *drv, char *buf) { return snprintf(buf, PAGE_SIZE, "%d\n", !!tpacpi_bluetooth_emulstate); } -static ssize_t tpacpi_driver_bluetooth_emulstate_store( - struct device_driver *drv, - const char *buf, size_t count) +static ssize_t bluetooth_emulstate_store(struct device_driver *drv, + const char *buf, size_t count) { unsigned long t; @@@ -1517,16 -1533,22 +1516,16 @@@ return count; } - -static DRIVER_ATTR(bluetooth_emulstate, S_IWUSR | S_IRUGO, - tpacpi_driver_bluetooth_emulstate_show, - tpacpi_driver_bluetooth_emulstate_store); +static DRIVER_ATTR_RW(bluetooth_emulstate); /* wwan_emulstate ------------------------------------------------- */ -static ssize_t tpacpi_driver_wwan_emulstate_show( - struct device_driver *drv, - char *buf) +static ssize_t wwan_emulstate_show(struct device_driver *drv, char *buf) { return snprintf(buf, PAGE_SIZE, "%d\n", !!tpacpi_wwan_emulstate); } -static ssize_t tpacpi_driver_wwan_emulstate_store( - struct device_driver *drv, - const char *buf, size_t count) +static ssize_t wwan_emulstate_store(struct device_driver *drv, const char *buf, + size_t count) { unsigned long t; @@@ -1537,16 -1559,22 +1536,16 @@@ return count; } - -static DRIVER_ATTR(wwan_emulstate, S_IWUSR | S_IRUGO, - tpacpi_driver_wwan_emulstate_show, - tpacpi_driver_wwan_emulstate_store); +static DRIVER_ATTR_RW(wwan_emulstate); /* uwb_emulstate ------------------------------------------------- */ -static ssize_t tpacpi_driver_uwb_emulstate_show( - struct device_driver *drv, - char *buf) +static ssize_t uwb_emulstate_show(struct device_driver *drv, char *buf) { return snprintf(buf, PAGE_SIZE, "%d\n", !!tpacpi_uwb_emulstate); } -static ssize_t tpacpi_driver_uwb_emulstate_store( - struct device_driver *drv, - const char *buf, size_t count) +static ssize_t uwb_emulstate_store(struct device_driver *drv, const char *buf, + size_t count) { unsigned long t; @@@ -1557,7 -1585,10 +1556,7 @@@ return count; } - -static DRIVER_ATTR(uwb_emulstate, S_IWUSR | S_IRUGO, - tpacpi_driver_uwb_emulstate_show, - tpacpi_driver_uwb_emulstate_store); +static DRIVER_ATTR_RW(uwb_emulstate); #endif /* --------------------------------------------------------------------- */ @@@ -1796,8 -1827,7 +1795,7 @@@ static void __init tpacpi_check_outdate * best if the user upgrades the firmware anyway. */ pr_warn("WARNING: Outdated ThinkPad BIOS/EC firmware\n"); - pr_warn("WARNING: This firmware may be missing critical bug " - "fixes and/or important features\n"); + pr_warn("WARNING: This firmware may be missing critical bug fixes and/or important features\n"); } } @@@ -2166,8 -2196,7 +2164,7 @@@ static int hotkey_mask_set(u32 mask * a given event. */ if (!hotkey_mask_get() && !rc && (fwmask & ~hotkey_acpi_mask)) { - pr_notice("asked for hotkey mask 0x%08x, but " - "firmware forced it to 0x%08x\n", + pr_notice("asked for hotkey mask 0x%08x, but firmware forced it to 0x%08x\n", fwmask, hotkey_acpi_mask); } @@@ -2192,11 -2221,9 +2189,9 @@@ static int hotkey_user_mask_set(const u (mask == 0xffff || mask == 0xffffff || mask == 0xffffffff)) { tp_warned.hotkey_mask_ff = 1; - pr_notice("setting the hotkey mask to 0x%08x is likely " - "not the best way to go about it\n", mask); - pr_notice("please consider using the driver defaults, " - "and refer to up-to-date thinkpad-acpi " - "documentation\n"); + pr_notice("setting the hotkey mask to 0x%08x is likely not the best way to go about it\n", + mask); + pr_notice("please consider using the driver defaults, and refer to up-to-date thinkpad-acpi documentation\n"); } /* Try to enable what the user asked for, plus whatever we need. @@@ -2571,17 -2598,14 +2566,14 @@@ static void hotkey_poll_setup(const boo NULL, TPACPI_NVRAM_KTHREAD_NAME); if (IS_ERR(tpacpi_hotkey_task)) { tpacpi_hotkey_task = NULL; - pr_err("could not create kernel thread " - "for hotkey polling\n"); + pr_err("could not create kernel thread for hotkey polling\n"); } } } else { hotkey_poll_stop_sync(); if (may_warn && (poll_driver_mask || poll_user_mask) && hotkey_poll_freq == 0) { - pr_notice("hot keys 0x%08x and/or events 0x%08x " - "require polling, which is currently " - "disabled\n", + pr_notice("hot keys 0x%08x and/or events 0x%08x require polling, which is currently disabled\n", poll_user_mask, poll_driver_mask); } } @@@ -2808,12 -2832,10 +2800,10 @@@ static ssize_t hotkey_source_mask_store mutex_unlock(&hotkey_mutex); if (rc < 0) - pr_err("hotkey_source_mask: " - "failed to update the firmware event mask!\n"); + pr_err("hotkey_source_mask: failed to update the firmware event mask!\n"); if (r_ev) - pr_notice("hotkey_source_mask: " - "some important events were disabled: 0x%04x\n", + pr_notice("hotkey_source_mask: some important events were disabled: 0x%04x\n", r_ev); tpacpi_disclose_usertask("hotkey_source_mask", "set to 0x%08lx\n", t); @@@ -3074,8 -3096,7 +3064,7 @@@ static void hotkey_exit(void if (((tp_features.hotkey_mask && hotkey_mask_set(hotkey_orig_mask)) | hotkey_status_set(false)) != 0) - pr_err("failed to restore hot key mask " - "to BIOS defaults\n"); + pr_err("failed to restore hot key mask to BIOS defaults\n"); } static void __init hotkey_unmap(const unsigned int scancode) @@@ -3587,11 -3608,8 +3576,8 @@@ static int __init hotkey_init(struct ib * userspace. tpacpi_detect_brightness_capabilities() must have * been called before this point */ if (acpi_video_get_backlight_type() != acpi_backlight_vendor) { - pr_info("This ThinkPad has standard ACPI backlight " - "brightness control, supported by the ACPI " - "video driver\n"); - pr_notice("Disabling thinkpad-acpi brightness events " - "by default...\n"); + pr_info("This ThinkPad has standard ACPI backlight brightness control, supported by the ACPI video driver\n"); + pr_notice("Disabling thinkpad-acpi brightness events by default...\n"); /* Disable brightness up/down on Lenovo thinkpads when * ACPI is handling them, otherwise it is plain impossible @@@ -3760,7 -3778,7 +3746,7 @@@ static bool adaptive_keyboard_hotkey_no TP_ACPI_HOTKEYSCAN_EXTENDED_START - TP_ACPI_HOTKEYSCAN_ADAPTIVE_START) { pr_info("Unhandled adaptive keyboard key: 0x%x\n", - scancode); + scancode); return false; } keycode = hotkey_keycode_map[scancode - FIRST_ADAPTIVE_KEY + @@@ -3957,14 -3975,12 +3943,12 @@@ static bool hotkey_notify_6xxx(const u3 /* recommended action: immediate sleep/hibernate */ break; case TP_HKEY_EV_ALARM_SENSOR_HOT: - pr_crit("THERMAL ALARM: " - "a sensor reports something is too hot!\n"); + pr_crit("THERMAL ALARM: a sensor reports something is too hot!\n"); /* recommended action: warn user through gui, that */ /* some internal component is too hot */ break; case TP_HKEY_EV_ALARM_SENSOR_XHOT: - pr_alert("THERMAL EMERGENCY: " - "a sensor reports something is extremely hot!\n"); + pr_alert("THERMAL EMERGENCY: a sensor reports something is extremely hot!\n"); /* recommended action: immediate sleep/hibernate */ break; case TP_HKEY_EV_AC_CHANGED: @@@ -4089,8 -4105,8 +4073,8 @@@ static void hotkey_notify(struct ibm_st } if (!known_ev) { pr_notice("unhandled HKEY event 0x%04x\n", hkey); - pr_notice("please report the conditions when this " - "event happened to %s\n", TPACPI_MAIL); + pr_notice("please report the conditions when this event happened to %s\n", + TPACPI_MAIL); } /* netlink events */ @@@ -4124,8 -4140,7 +4108,7 @@@ static void hotkey_resume(void if (hotkey_status_set(true) < 0 || hotkey_mask_set(hotkey_acpi_mask) < 0) - pr_err("error while attempting to reset the event " - "firmware interface\n"); + pr_err("error while attempting to reset the event firmware interface\n"); tpacpi_send_radiosw_update(); hotkey_tablet_mode_notify_change(); @@@ -4177,12 -4192,8 +4160,8 @@@ static void hotkey_enabledisable_warn(b { tpacpi_log_usertask("procfs hotkey enable/disable"); if (!WARN((tpacpi_lifecycle == TPACPI_LIFE_RUNNING || !enable), - pr_fmt("hotkey enable/disable functionality has been " - "removed from the driver. " - "Hotkeys are always enabled.\n"))) - pr_err("Please remove the hotkey=enable module " - "parameter, it is deprecated. " - "Hotkeys are always enabled.\n"); + pr_fmt("hotkey enable/disable functionality has been removed from the driver. Hotkeys are always enabled.\n"))) + pr_err("Please remove the hotkey=enable module parameter, it is deprecated. Hotkeys are always enabled.\n"); } static int hotkey_write(char *buf) @@@ -4840,8 -4851,7 +4819,7 @@@ static void video_exit(void dbg_printk(TPACPI_DBG_EXIT, "restoring original video autoswitch mode\n"); if (video_autosw_set(video_orig_autosw)) - pr_err("error while trying to restore original " - "video autoswitch mode\n"); + pr_err("error while trying to restore original video autoswitch mode\n"); } static int video_outputsw_get(void) @@@ -5931,8 -5941,7 +5909,7 @@@ static int __init led_init(struct ibm_i } #ifdef CONFIG_THINKPAD_ACPI_UNSAFE_LEDS - pr_notice("warning: userspace override of important " - "firmware LEDs is enabled\n"); + pr_notice("warning: userspace override of important firmware LEDs is enabled\n"); #endif return 0; } @@@ -5961,8 -5970,7 +5938,7 @@@ static int led_read(struct seq_file *m } } - seq_printf(m, "commands:\t" - "<led> on, <led> off, <led> blink (<led> is 0-15)\n"); + seq_printf(m, "commands:\t<led> on, <led> off, <led> blink (<led> is 0-15)\n"); return 0; } @@@ -6335,13 -6343,10 +6311,10 @@@ static int __init thermal_init(struct i if (ta1 == 0) { /* This is sheer paranoia, but we handle it anyway */ if (acpi_tmp7) { - pr_err("ThinkPad ACPI EC access misbehaving, " - "falling back to ACPI TMPx access " - "mode\n"); + pr_err("ThinkPad ACPI EC access misbehaving, falling back to ACPI TMPx access mode\n"); thermal_read_mode = TPACPI_THERMAL_ACPI_TMP07; } else { - pr_err("ThinkPad ACPI EC access misbehaving, " - "disabling thermal sensors access\n"); + pr_err("ThinkPad ACPI EC access misbehaving, disabling thermal sensors access\n"); thermal_read_mode = TPACPI_THERMAL_NONE; } } else { @@@ -6820,26 -6825,20 +6793,20 @@@ static int __init brightness_init(struc if (!brightness_enable) { dbg_printk(TPACPI_DBG_INIT | TPACPI_DBG_BRGHT, - "brightness support disabled by " - "module parameter\n"); + "brightness support disabled by module parameter\n"); return 1; } if (acpi_video_get_backlight_type() != acpi_backlight_vendor) { if (brightness_enable > 1) { - pr_info("Standard ACPI backlight interface " - "available, not loading native one\n"); + pr_info("Standard ACPI backlight interface available, not loading native one\n"); return 1; } else if (brightness_enable == 1) { - pr_warn("Cannot enable backlight brightness support, " - "ACPI is already handling it. Refer to the " - "acpi_backlight kernel parameter.\n"); + pr_warn("Cannot enable backlight brightness support, ACPI is already handling it. Refer to the acpi_backlight kernel parameter.\n"); return 1; } } else if (tp_features.bright_acpimode && brightness_enable > 1) { - pr_notice("Standard ACPI backlight interface not " - "available, thinkpad_acpi native " - "brightness control enabled\n"); + pr_notice("Standard ACPI backlight interface not available, thinkpad_acpi native brightness control enabled\n"); } /* @@@ -6890,10 -6889,10 +6857,10 @@@ "brightness is supported\n"); if (quirks & TPACPI_BRGHT_Q_ASK) { - pr_notice("brightness: will use unverified default: " - "brightness_mode=%d\n", brightness_mode); - pr_notice("brightness: please report to %s whether it works well " - "or not on your ThinkPad\n", TPACPI_MAIL); + pr_notice("brightness: will use unverified default: brightness_mode=%d\n", + brightness_mode); + pr_notice("brightness: please report to %s whether it works well or not on your ThinkPad\n", + TPACPI_MAIL); } /* Added by mistake in early 2007. Probably useless, but it could @@@ -6903,8 -6902,7 +6870,7 @@@ backlight_update_status(ibm_backlight_device); vdbg_printk(TPACPI_DBG_INIT | TPACPI_DBG_BRGHT, - "brightness: registering brightness hotkeys " - "as change notification\n"); + "brightness: registering brightness hotkeys as change notification\n"); tpacpi_hotkey_driver_mask_set(hotkey_driver_mask | TP_ACPI_HKEY_BRGHTUP_MASK | TP_ACPI_HKEY_BRGHTDWN_MASK); @@@ -7567,8 -7565,8 +7533,8 @@@ static int __init volume_init(struct ib return -EINVAL; if (volume_mode == TPACPI_VOL_MODE_UCMS_STEP) { - pr_err("UCMS step volume mode not implemented, " - "please contact %s\n", TPACPI_MAIL); + pr_err("UCMS step volume mode not implemented, please contact %s\n", + TPACPI_MAIL); return 1; } @@@ -7581,8 -7579,7 +7547,7 @@@ */ if (!alsa_enable) { vdbg_printk(TPACPI_DBG_INIT | TPACPI_DBG_MIXER, - "ALSA mixer disabled by parameter, " - "not loading volume subdriver...\n"); + "ALSA mixer disabled by parameter, not loading volume subdriver...\n"); return 1; } @@@ -7674,12 -7671,9 +7639,9 @@@ static int volume_read(struct seq_file if (volume_control_allowed) { seq_printf(m, "commands:\tunmute, mute\n"); if (!tp_features.mixer_no_level_control) { - seq_printf(m, - "commands:\tup, down\n"); - seq_printf(m, - "commands:\tlevel <level>" - " (<level> is 0-%d)\n", - TP_EC_VOLUME_MAX); + seq_printf(m, "commands:\tup, down\n"); + seq_printf(m, "commands:\tlevel <level> (<level> is 0-%d)\n", + TP_EC_VOLUME_MAX); } } } @@@ -7702,10 -7696,8 +7664,8 @@@ static int volume_write(char *buf if (!volume_control_allowed && tpacpi_lifecycle != TPACPI_LIFE_INIT) { if (unlikely(!tp_warned.volume_ctrl_forbidden)) { tp_warned.volume_ctrl_forbidden = 1; - pr_notice("Console audio control in monitor mode, " - "changes are not allowed\n"); - pr_notice("Use the volume_control=1 module parameter " - "to enable volume control\n"); + pr_notice("Console audio control in monitor mode, changes are not allowed\n"); + pr_notice("Use the volume_control=1 module parameter to enable volume control\n"); } return -EPERM; } @@@ -7987,8 -7979,7 +7947,7 @@@ TPACPI_HANDLE(sfan, ec, "SFAN", /* 570 static void fan_quirk1_setup(void) { if (fan_control_initial_status == 0x07) { - pr_notice("fan_init: initial fan status is unknown, " - "assuming it is in auto mode\n"); + pr_notice("fan_init: initial fan status is unknown, assuming it is in auto mode\n"); tp_features.fan_ctrl_status_undef = 1; } } @@@ -8385,8 -8376,8 +8344,8 @@@ static void fan_watchdog_fire(struct wo pr_notice("fan watchdog: enabling fan\n"); rc = fan_set_enable(); if (rc < 0) { - pr_err("fan watchdog: error %d while enabling fan, " - "will try again later...\n", -rc); + pr_err("fan watchdog: error %d while enabling fan, will try again later...\n", + rc); /* reschedule for later */ fan_watchdog_reset(); } @@@ -8574,13 -8565,14 +8533,13 @@@ static ssize_t fan_fan2_input_show(stru static DEVICE_ATTR(fan2_input, S_IRUGO, fan_fan2_input_show, NULL); /* sysfs fan fan_watchdog (hwmon driver) ------------------------------- */ -static ssize_t fan_fan_watchdog_show(struct device_driver *drv, - char *buf) +static ssize_t fan_watchdog_show(struct device_driver *drv, char *buf) { return snprintf(buf, PAGE_SIZE, "%u\n", fan_watchdog_maxinterval); } -static ssize_t fan_fan_watchdog_store(struct device_driver *drv, - const char *buf, size_t count) +static ssize_t fan_watchdog_store(struct device_driver *drv, const char *buf, + size_t count) { unsigned long t; @@@ -8597,7 -8589,9 +8556,7 @@@ return count; } - -static DRIVER_ATTR(fan_watchdog, S_IWUSR | S_IRUGO, - fan_fan_watchdog_show, fan_fan_watchdog_store); +static DRIVER_ATTR_RW(fan_watchdog); /* --------------------------------------------------------------------- */ static struct attribute *fan_attributes[] = { @@@ -8680,8 -8674,7 +8639,7 @@@ static int __init fan_init(struct ibm_i "secondary fan support enabled\n"); } } else { - pr_err("ThinkPad ACPI EC access misbehaving, " - "fan status and control unavailable\n"); + pr_err("ThinkPad ACPI EC access misbehaving, fan status and control unavailable\n"); return 1; } } @@@ -8780,8 -8773,8 +8738,8 @@@ static void fan_suspend(void fan_control_resume_level = 0; rc = fan_get_status_safe(&fan_control_resume_level); if (rc < 0) - pr_notice("failed to read fan level for later " - "restore during resume: %d\n", rc); + pr_notice("failed to read fan level for later restore during resume: %d\n", + rc); /* if it is undefined, don't attempt to restore it. * KEEP THIS LAST */ @@@ -8900,20 -8893,17 +8858,17 @@@ static int fan_read(struct seq_file *m break; default: - seq_printf(m, " (<level> is 0-7, " - "auto, disengaged, full-speed)\n"); + seq_printf(m, " (<level> is 0-7, auto, disengaged, full-speed)\n"); break; } } if (fan_control_commands & TPACPI_FAN_CMD_ENABLE) seq_printf(m, "commands:\tenable, disable\n" - "commands:\twatchdog <timeout> (<timeout> " - "is 0 (off), 1-120 (seconds))\n"); + "commands:\twatchdog <timeout> (<timeout> is 0 (off), 1-120 (seconds))\n"); if (fan_control_commands & TPACPI_FAN_CMD_SPEED) - seq_printf(m, "commands:\tspeed <speed>" - " (<speed> is 0-65535)\n"); + seq_printf(m, "commands:\tspeed <speed> (<speed> is 0-65535)\n"); return 0; } @@@ -9439,8 -9429,7 +9394,7 @@@ static int __must_check __init get_thin tp->ec_release = (ec_fw_string[4] << 8) | ec_fw_string[5]; } else { - pr_notice("ThinkPad firmware release %s " - "doesn't match the known patterns\n", + pr_notice("ThinkPad firmware release %s doesn't match the known patterns\n", ec_fw_string); pr_notice("please report this to %s\n", TPACPI_MAIL); @@@ -9635,8 -9624,7 +9589,7 @@@ MODULE_PARM_DESC(debug, "Sets debug lev module_param(force_load, bool, 0444); MODULE_PARM_DESC(force_load, - "Attempts to load the driver even on a " - "mis-identified ThinkPad when true"); + "Attempts to load the driver even on a mis-identified ThinkPad when true"); module_param_named(fan_control, fan_control_allowed, bool, 0444); MODULE_PARM_DESC(fan_control, @@@ -9644,8 -9632,7 +9597,7 @@@ module_param_named(brightness_mode, brightness_mode, uint, 0444); MODULE_PARM_DESC(brightness_mode, - "Selects brightness control strategy: " - "0=auto, 1=EC, 2=UCMS, 3=EC+NVRAM"); + "Selects brightness control strategy: 0=auto, 1=EC, 2=UCMS, 3=EC+NVRAM"); module_param(brightness_enable, uint, 0444); MODULE_PARM_DESC(brightness_enable, @@@ -9654,18 -9641,15 +9606,15 @@@ #ifdef CONFIG_THINKPAD_ACPI_ALSA_SUPPORT module_param_named(volume_mode, volume_mode, uint, 0444); MODULE_PARM_DESC(volume_mode, - "Selects volume control strategy: " - "0=auto, 1=EC, 2=N/A, 3=EC+NVRAM"); + "Selects volume control strategy: 0=auto, 1=EC, 2=N/A, 3=EC+NVRAM"); module_param_named(volume_capabilities, volume_capabilities, uint, 0444); MODULE_PARM_DESC(volume_capabilities, - "Selects the mixer capabilites: " - "0=auto, 1=volume and mute, 2=mute only"); + "Selects the mixer capabilites: 0=auto, 1=volume and mute, 2=mute only"); module_param_named(volume_control, volume_control_allowed, bool, 0444); MODULE_PARM_DESC(volume_control, - "Enables software override for the console audio " - "control when true"); + "Enables software override for the console audio control when true"); module_param_named(software_mute, software_mute_requested, bool, 0444); MODULE_PARM_DESC(software_mute, @@@ -9680,10 -9664,10 +9629,10 @@@ module_param_named(enable, alsa_enable MODULE_PARM_DESC(enable, "Enable the ALSA interface for the ACPI EC Mixer"); #endif /* CONFIG_THINKPAD_ACPI_ALSA_SUPPORT */ + /* The module parameter can't be read back, that's why 0 is used here */ #define TPACPI_PARAM(feature) \ module_param_call(feature, set_ibm_param, NULL, NULL, 0); \ - MODULE_PARM_DESC(feature, "Simulates thinkpad-acpi procfs command " \ - "at module load, see documentation") + MODULE_PARM_DESC(feature, "Simulates thinkpad-acpi procfs command at module load, see documentation") TPACPI_PARAM(hotkey); TPACPI_PARAM(bluetooth); -- LinuxNextTracking
5 years, 8 months
1
0
0
0
Build check errors found: 2017-07-10
by postmaster@open-mesh.org
Name of failed tests ==================== master ------ * difference between net and batadv master maint ----- * difference between net and batadv maint Output of different failed tests ================================ maint: difference between net and batadv maint ---------------------------------------------- net/net/batman-adv/bat_iv_ogm.c | 9 +- net/net/batman-adv/bat_v.c | 2 net/net/batman-adv/bat_v_elp.c | 13 ++- net/net/batman-adv/bat_v_ogm.c | 6 - net/net/batman-adv/bridge_loop_avoidance.c | 73 ++++++++++---------- net/net/batman-adv/distributed-arp-table.c | 2 net/net/batman-adv/fragmentation.c | 3 net/net/batman-adv/icmp_socket.c | 2 net/net/batman-adv/main.h | 2 net/net/batman-adv/network-coding.c | 4 - net/net/batman-adv/routing.c | 4 - net/net/batman-adv/send.c | 6 - net/net/batman-adv/tp_meter.c | 9 +- net/net/batman-adv/translation-table.c | 21 +++-- 14 files changed, 81 insertions(+), 75 deletions(-) master: difference between net and batadv master ------------------------------------------------ netnext/net/batman-adv/bat_iv_ogm.c | 4 +++- netnext/net/batman-adv/bat_v_ogm.c | 4 ++-- netnext/net/batman-adv/distributed-arp-table.c | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) Statistics ========== master ------ Failed tests: 1 Started build tests: 67 Tested Linux versions: 29 Tested configs: 51 maint ----- Failed tests: 1 Started build tests: 69 Tested Linux versions: 29 Tested configs: 50
5 years, 8 months
1
0
0
0
Build check errors found: 2017-07-09
by postmaster@open-mesh.org
Name of failed tests ==================== master ------ * difference between net and batadv master maint ----- * difference between net and batadv maint Output of different failed tests ================================ maint: difference between net and batadv maint ---------------------------------------------- net/net/batman-adv/bat_iv_ogm.c | 9 +- net/net/batman-adv/bat_v.c | 2 net/net/batman-adv/bat_v_elp.c | 13 ++- net/net/batman-adv/bat_v_ogm.c | 6 - net/net/batman-adv/bridge_loop_avoidance.c | 73 ++++++++++---------- net/net/batman-adv/distributed-arp-table.c | 2 net/net/batman-adv/fragmentation.c | 3 net/net/batman-adv/icmp_socket.c | 2 net/net/batman-adv/main.h | 2 net/net/batman-adv/network-coding.c | 4 - net/net/batman-adv/routing.c | 4 - net/net/batman-adv/send.c | 6 - net/net/batman-adv/tp_meter.c | 9 +- net/net/batman-adv/translation-table.c | 21 +++-- 14 files changed, 81 insertions(+), 75 deletions(-) master: difference between net and batadv master ------------------------------------------------ netnext/net/batman-adv/bat_iv_ogm.c | 4 +++- netnext/net/batman-adv/bat_v_ogm.c | 4 ++-- netnext/net/batman-adv/distributed-arp-table.c | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) Statistics ========== master ------ Failed tests: 1 Started build tests: 72 Tested Linux versions: 29 Tested configs: 52 maint ----- Failed tests: 1 Started build tests: 73 Tested Linux versions: 29 Tested configs: 59
5 years, 8 months
1
0
0
0
← Newer
1
2
3
4
5
Older →
Jump to page:
1
2
3
4
5
Results per page:
10
25
50
100
200