From 57c6b64f099d10d4a7802ad2a619c463f0b13e01 Mon Sep 17 00:00:00 2001 From: MilhouseVH Date: Thu, 25 Jan 2018 19:03:58 +0000 Subject: [PATCH] RPi: update linux support patch for linux 4.14.15 --- .../patches/linux/linux-01-RPi_support.patch | 3344 +++++++++++++++-- 1 file changed, 2994 insertions(+), 350 deletions(-) diff --git a/projects/RPi/patches/linux/linux-01-RPi_support.patch b/projects/RPi/patches/linux/linux-01-RPi_support.patch index 1b6d55a8ae..5422b8a160 100644 --- a/projects/RPi/patches/linux/linux-01-RPi_support.patch +++ b/projects/RPi/patches/linux/linux-01-RPi_support.patch @@ -1,7 +1,7 @@ -From 99e77433bc79aa3129b3e2e8aaab2fa8c14db834 Mon Sep 17 00:00:00 2001 +From d9d890a9458fdeeabcb02d232934069e3ad35487 Mon Sep 17 00:00:00 2001 From: Dan Pasanen Date: Thu, 21 Sep 2017 09:55:42 -0500 -Subject: [PATCH 001/175] arm: partially revert +Subject: [PATCH 001/201] arm: partially revert 702b94bff3c50542a6e4ab9a4f4cef093262fe65 * Re-expose some dmi APIs for use in VCSM @@ -106,10 +106,10 @@ index 054b491ff7649ca067ff821770aec80a4da42102..70e8b7d3443467ae9595924f1a9d043b EXPORT_SYMBOL(cpu_cache); #endif -From a82fbd9f771bfa0eb2992a4dcef1daf79f7ba44f Mon Sep 17 00:00:00 2001 +From cec6171e90f1c71191086277abd50033794eba37 Mon Sep 17 00:00:00 2001 From: Steve Glendinning Date: Thu, 19 Feb 2015 18:47:12 +0000 -Subject: [PATCH 002/175] smsx95xx: fix crimes against truesize +Subject: [PATCH 002/201] smsx95xx: fix crimes against truesize smsc95xx is adjusting truesize when it shouldn't, and following a recent patch from Eric this is now triggering warnings. @@ -156,10 +156,10 @@ index 309b88acd3d0b6ca1528dde7b27a23926f9be952..25e37195ceb00cfc0ced7638e8b571a1 usbnet_skb_return(dev, ax_skb); } -From a56da5ed4dc92c3ac042bd1fec83a27e41e0f29f Mon Sep 17 00:00:00 2001 +From d8bf9e4d39f94900628fc3f3a8aec339bb3eca95 Mon Sep 17 00:00:00 2001 From: Sam Nazarko Date: Fri, 1 Apr 2016 17:27:21 +0100 -Subject: [PATCH 003/175] smsc95xx: Experimental: Enable turbo_mode and +Subject: [PATCH 003/201] smsc95xx: Experimental: Enable turbo_mode and packetsize=2560 by default See: http://forum.kodi.tv/showthread.php?tid=285288 @@ -202,10 +202,10 @@ index 25e37195ceb00cfc0ced7638e8b571a1b0b8e6f1..09c7d4a07299e70b1cdc9df2c2c4cb39 netif_dbg(dev, ifup, dev->net, "rx_urb_size=%ld\n", -From 039aebc023e51aacf2244d7514b67043f8f32784 Mon Sep 17 00:00:00 2001 +From 5f0e62912300acf4b2556537cf27d3defadad59c Mon Sep 17 00:00:00 2001 From: popcornmix Date: Tue, 26 Mar 2013 17:26:38 +0000 -Subject: [PATCH 004/175] Allow mac address to be set in smsc95xx +Subject: [PATCH 004/201] Allow mac address to be set in smsc95xx Signed-off-by: popcornmix --- @@ -301,10 +301,10 @@ index 09c7d4a07299e70b1cdc9df2c2c4cb39d2207c37..4d9704d0b184df9bd7ddbe6769e40a75 eth_hw_addr_random(dev->net); netif_dbg(dev, ifup, dev->net, "MAC address set to eth_random_addr\n"); -From 631269a1f9df2f4c045676429b285de0a8f6b0f2 Mon Sep 17 00:00:00 2001 +From abdd56722683d3086033efbb9648fd6843c6151a Mon Sep 17 00:00:00 2001 From: Phil Elwell Date: Fri, 13 Mar 2015 12:43:36 +0000 -Subject: [PATCH 005/175] Protect __release_resource against resources without +Subject: [PATCH 005/201] Protect __release_resource against resources without parents Without this patch, removing a device tree overlay can crash here. @@ -332,10 +332,10 @@ index 9b5f04404152c296af3a96132f27cfc80ffa9af9..f8a9af6e6b915812be2ba2c1c2b40106 for (;;) { tmp = *p; -From 67f129aa9c86fddd2bbb618234519291da276650 Mon Sep 17 00:00:00 2001 +From 230d8059390dd3268c00ea36b0ceed0fc2abc084 Mon Sep 17 00:00:00 2001 From: Phil Elwell Date: Fri, 4 Dec 2015 17:41:50 +0000 -Subject: [PATCH 006/175] irq-bcm2836: Prevent spurious interrupts, and trap +Subject: [PATCH 006/201] irq-bcm2836: Prevent spurious interrupts, and trap them early The old arch-specific IRQ macros included a dsb to ensure the @@ -362,10 +362,10 @@ index dc8c1e3eafe794a3af83dd987a6d6362d14dd5ee..e8204d9af58f1b893505c06902a83390 #endif } else if (stat) { -From 57050febd0e4fc724ee4ad2557bcea46fac0f85c Mon Sep 17 00:00:00 2001 +From 69bc65e0bda33413d94e83615091686d55195077 Mon Sep 17 00:00:00 2001 From: Phil Elwell Date: Thu, 9 Feb 2017 14:33:30 +0000 -Subject: [PATCH 007/175] irq-bcm2836: Avoid "Invalid trigger warning" +Subject: [PATCH 007/201] irq-bcm2836: Avoid "Invalid trigger warning" Initialise the level for each IRQ to avoid a warning from the arm arch timer code. @@ -389,10 +389,10 @@ index e8204d9af58f1b893505c06902a83390c2ea8509..6e3fab9587b782e026c01fa6b6e40338 static void -From f822085f0bb7b67cd48dd1b4285ea869bc5e1228 Mon Sep 17 00:00:00 2001 +From 60974c9110c3b85e69dc50fd9833e58eee719781 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= Date: Fri, 12 Jun 2015 19:01:05 +0200 -Subject: [PATCH 008/175] irqchip: bcm2835: Add FIQ support +Subject: [PATCH 008/201] irqchip: bcm2835: Add FIQ support MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit @@ -521,10 +521,10 @@ index d2da8a1e6b1b71381e382d034e7a94e865a6c3da..c4903360eabc2bef04f8e745782cea26 } -From 11efae6d64f72b6a2730289803c28e0e0cb7ab0a Mon Sep 17 00:00:00 2001 +From bd439dae74abfa099cbfecfeac07596746687108 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= Date: Fri, 23 Oct 2015 16:26:55 +0200 -Subject: [PATCH 009/175] irqchip: irq-bcm2835: Add 2836 FIQ support +Subject: [PATCH 009/201] irqchip: irq-bcm2835: Add 2836 FIQ support MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit @@ -623,10 +623,10 @@ index c4903360eabc2bef04f8e745782cea268fb22897..13356d3b7bcd508f058c6a9e3c4b0b38 for (b = 0; b < NR_BANKS; b++) { for (i = 0; i < bank_irqs[b]; i++) { -From 2164e4f9cef9303a120122546b54b116789f3ddd Mon Sep 17 00:00:00 2001 +From 92b23200bc99602ba036ef25c996f79789f2b19b Mon Sep 17 00:00:00 2001 From: Phil Elwell Date: Mon, 8 May 2017 16:43:40 +0100 -Subject: [PATCH 010/175] irq_bcm2836: Send event when onlining sleeping cores +Subject: [PATCH 010/201] irq_bcm2836: Send event when onlining sleeping cores In order to reduce power consumption and bus traffic, it is sensible for secondary cores to enter a low-power idle state when waiting to @@ -662,10 +662,10 @@ index 6e3fab9587b782e026c01fa6b6e40338ef0c8d0a..86b357ae027bf8ba1ac32cd150a8cf21 } -From 9692c48bb4e40ecdf6a6d20c6aa900f35fddbeda Mon Sep 17 00:00:00 2001 +From 8ae97fa3b5643f0247135586cdd983900e8fa479 Mon Sep 17 00:00:00 2001 From: Phil Elwell Date: Tue, 14 Jul 2015 10:26:09 +0100 -Subject: [PATCH 011/175] spidev: Add "spidev" compatible string to silence +Subject: [PATCH 011/201] spidev: Add "spidev" compatible string to silence warning See: https://github.com/raspberrypi/linux/issues/1054 @@ -686,10 +686,10 @@ index cda10719d1d1b21b32866d2b79363faa461ab8e1..4f3779d3aa0960640506725bde918075 }; MODULE_DEVICE_TABLE(of, spidev_dt_ids); -From 7f0cb955b39588a5292353838dc24cb0da5090e2 Mon Sep 17 00:00:00 2001 +From ff5155a91c3a801a49e7debfec3da1d545a8bb4c Mon Sep 17 00:00:00 2001 From: Phil Elwell Date: Wed, 24 Jun 2015 14:10:44 +0100 -Subject: [PATCH 012/175] spi-bcm2835: Support pin groups other than 7-11 +Subject: [PATCH 012/201] spi-bcm2835: Support pin groups other than 7-11 The spi-bcm2835 driver automatically uses GPIO chip-selects due to some unreliability of the native ones. In doing so it chooses the @@ -770,10 +770,10 @@ index f35cc10772f6670397ea923ad30158270dd68578..5dfe20ffc2866fa6789825016c585175 /* and set up the "mode" and level */ dev_info(&spi->dev, "setting up native-CS%i as GPIO %i\n", -From 0a9345126977f0893bbf5e799765af1b2b1e73e9 Mon Sep 17 00:00:00 2001 +From 37b23d0421c1277c5cdebb5d382689aaa7b07de6 Mon Sep 17 00:00:00 2001 From: Phil Elwell Date: Fri, 1 Jul 2016 22:09:24 +0100 -Subject: [PATCH 013/175] spi-bcm2835: Disable forced software CS +Subject: [PATCH 013/201] spi-bcm2835: Disable forced software CS Select software CS in bcm2708_common.dtsi, and disable the automatic conversion in the driver to allow hardware CS to be re-enabled with an @@ -807,10 +807,10 @@ index 5dfe20ffc2866fa6789825016c585175a29705b6..8493474d286f7a1ac6454a22c61c8c2c return 0; } -From 1463890bcee30eeafc7e4f35bb09e77da2073504 Mon Sep 17 00:00:00 2001 +From f668e0f1f82524ddc1f5a91acdc6d070d1cd8a72 Mon Sep 17 00:00:00 2001 From: Phil Elwell Date: Tue, 8 Nov 2016 21:35:38 +0000 -Subject: [PATCH 014/175] spi-bcm2835: Remove unused code +Subject: [PATCH 014/201] spi-bcm2835: Remove unused code --- drivers/spi/spi-bcm2835.c | 61 ----------------------------------------------- @@ -898,10 +898,10 @@ index 8493474d286f7a1ac6454a22c61c8c2cef9121bf..33d75ad38a7f77d085321ace9101900a } -From f1f7304a2c26f684a48d4522017cdbdd5cf2f214 Mon Sep 17 00:00:00 2001 +From 461fe630a09b9f287781e4c8822405228c965c2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= Date: Wed, 3 Jun 2015 12:26:13 +0200 -Subject: [PATCH 015/175] ARM: bcm2835: Set Serial number and Revision +Subject: [PATCH 015/201] ARM: bcm2835: Set Serial number and Revision MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit @@ -954,10 +954,10 @@ index 0c1edfc98696da0e0bb7f4a18cdfbcdd27a9795d..8f152266ba9b470df2eaaed9ebcf158e static const char * const bcm2835_compat[] = { -From 4afda3956e36825879b97c3da5344fd8bc83df1f Mon Sep 17 00:00:00 2001 +From b0dbc25891a5d62e2f9a8a2b9e7da6515752cf46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= Date: Sat, 3 Oct 2015 22:22:55 +0200 -Subject: [PATCH 016/175] dmaengine: bcm2835: Load driver early and support +Subject: [PATCH 016/201] dmaengine: bcm2835: Load driver early and support legacy API MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 @@ -1060,10 +1060,10 @@ index 6204cc32d09c5096df8aec304c3c37b3bcb6be44..599c218dc8a73172dd4bd4a058fc8f95 MODULE_ALIAS("platform:bcm2835-dma"); MODULE_DESCRIPTION("BCM2835 DMA engine driver"); -From c205280f8e8b6d98bb8f4fe91e7e14ea8363aece Mon Sep 17 00:00:00 2001 +From a25e1d451917d6d9372d59d2ffc46255e5faf067 Mon Sep 17 00:00:00 2001 From: popcornmix Date: Mon, 25 Jan 2016 17:25:12 +0000 -Subject: [PATCH 017/175] firmware: Updated mailbox header +Subject: [PATCH 017/201] firmware: Updated mailbox header --- include/soc/bcm2835/raspberrypi-firmware.h | 21 +++++++++++++++++++++ @@ -1149,10 +1149,10 @@ index cb979ad90401e299344dd5fae38d09c489d8bd58..cbd1674570433fc591df89f68c892b33 #endif /* __SOC_RASPBERRY_FIRMWARE_H__ */ -From 9c8d1c45d886fdebda6db54e7ada110ebd883553 Mon Sep 17 00:00:00 2001 +From de50c1891fef0e317188b005821ab47e420da894 Mon Sep 17 00:00:00 2001 From: Phil Elwell Date: Wed, 15 Jun 2016 16:48:41 +0100 -Subject: [PATCH 018/175] rtc: Add SPI alias for pcf2123 driver +Subject: [PATCH 018/201] rtc: Add SPI alias for pcf2123 driver Without this alias, Device Tree won't cause the driver to be loaded. @@ -1172,10 +1172,10 @@ index 8895f77726e8da5444afcd602dceff8f25a9b3fd..1833b8853ceb0e6147cceb93a00e558c MODULE_LICENSE("GPL"); +MODULE_ALIAS("spi:rtc-pcf2123"); -From 6176a496bef1707dbd8bb40856ffa8660a82282b Mon Sep 17 00:00:00 2001 +From f4dc338d40d1c667547bcac494133da94ab3bfde Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= Date: Fri, 7 Oct 2016 16:50:59 +0200 -Subject: [PATCH 019/175] watchdog: bcm2835: Support setting reboot partition +Subject: [PATCH 019/201] watchdog: bcm2835: Support setting reboot partition MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit @@ -1277,10 +1277,10 @@ index b339e0e67b4c1275fd4992fea4f1e24c0575b783..26b7177573fac2af1cd4ab5488d2686f static int bcm2835_wdt_probe(struct platform_device *pdev) -From 75bce7d69841c1585a9c2976e98bcb7cc2b80ebe Mon Sep 17 00:00:00 2001 +From 6ab5b331736e3aa5f2ec8aa3a8b6e5036a944313 Mon Sep 17 00:00:00 2001 From: popcornmix Date: Tue, 5 Apr 2016 19:40:12 +0100 -Subject: [PATCH 020/175] reboot: Use power off rather than busy spinning when +Subject: [PATCH 020/201] reboot: Use power off rather than busy spinning when halt is requested --- @@ -1303,10 +1303,10 @@ index 3b2aa9a9fe268d45335f781c4aa22cf573753a1b..0180d89a34af45c56243fe0f17fbe209 /* -From 9d6127b193fcc6f76292e528356127a8fb8161ee Mon Sep 17 00:00:00 2001 +From b723479ea0e9c2fc8eaca22845e2246579c96ef8 Mon Sep 17 00:00:00 2001 From: popcornmix Date: Wed, 9 Nov 2016 13:02:52 +0000 -Subject: [PATCH 021/175] bcm: Make RASPBERRYPI_POWER depend on PM +Subject: [PATCH 021/201] bcm: Make RASPBERRYPI_POWER depend on PM --- drivers/soc/bcm/Kconfig | 1 + @@ -1325,10 +1325,10 @@ index 49f1e2a75d614bc21db152327c7b425ae2504f8d..dccd2374ed00631abd441e3e9d78ee74 help This enables support for the RPi power domains which can be enabled -From 077835b3ad8296aa82e558679f2addd6a00647c2 Mon Sep 17 00:00:00 2001 +From 05f5ca04b1e42ae95641ec892d136baa4c78eac9 Mon Sep 17 00:00:00 2001 From: Martin Sperl Date: Fri, 2 Sep 2016 16:45:27 +0100 -Subject: [PATCH 022/175] Register the clocks early during the boot process, so +Subject: [PATCH 022/201] Register the clocks early during the boot process, so that special/critical clocks can get enabled early on in the boot process avoiding the risk of disabling a clock, pll_divider or pll when a claiming driver fails to install propperly - maybe it needs to defer. @@ -1373,10 +1373,10 @@ index 58ce6af8452db9ca8b4d3c380a06e448919f6a8d..11d89d106026f15719ea25047d6f357b MODULE_AUTHOR("Eric Anholt "); MODULE_DESCRIPTION("BCM2835 clock driver"); -From f112556d35706b3af74f4ca5857188210b023016 Mon Sep 17 00:00:00 2001 +From 0c1125f5ba05c664abf23cb90f4a1d8cc4d5ef66 Mon Sep 17 00:00:00 2001 From: popcornmix Date: Tue, 6 Dec 2016 17:05:39 +0000 -Subject: [PATCH 023/175] bcm2835-rng: Avoid initialising if already enabled +Subject: [PATCH 023/201] bcm2835-rng: Avoid initialising if already enabled Avoids the 0x40000 cycles of warmup again if firmware has already used it --- @@ -1402,10 +1402,10 @@ index 574211a495491d9d6021dcaefe4274a63ed02055..e66c0fca8c6090e32f72796c0877a1cf err = hwrng_register(&bcm2835_rng_ops); if (err) { -From e345c5cbc07b1e5ee6d5d784863281f35cf3b875 Mon Sep 17 00:00:00 2001 +From 7ba06e2550f7252889243435c63ae440d89a65ef Mon Sep 17 00:00:00 2001 From: Phil Elwell Date: Wed, 24 Aug 2016 16:28:44 +0100 -Subject: [PATCH 024/175] kbuild: Ignore dtco targets when filtering symbols +Subject: [PATCH 024/201] kbuild: Ignore dtco targets when filtering symbols --- scripts/Kbuild.include | 2 +- @@ -1425,10 +1425,10 @@ index 9ffd3dda3889c56a7a72229bed21ff5c49d62856..00da6c9bacbf33334233e22ca5209ade esac | tr ";" "\n" | sed -rn 's/^.*=== __KSYM_(.*) ===.*$$/KSYM_\1/p' -From 4ae2d16d0abff821cb5dce6b3b8e97c7818d604b Mon Sep 17 00:00:00 2001 +From f1d516520ca16f69f1fb8bb5fa64f2b98c332c0f Mon Sep 17 00:00:00 2001 From: Robert Tiemann Date: Mon, 20 Jul 2015 11:01:25 +0200 -Subject: [PATCH 025/175] BCM2835_DT: Fix I2S register map +Subject: [PATCH 025/201] BCM2835_DT: Fix I2S register map --- Documentation/devicetree/bindings/dma/brcm,bcm2835-dma.txt | 4 ++-- @@ -1466,10 +1466,10 @@ index 65783de0aedf3da79adc36fd077b7a89954ddb6b..a89fe4220fdc3f26f75ee66daf187554 dmas = <&dma 2>, <&dma 3>; -From 2cf2d502470d672bca1f87f3a21f6419ee5c143b Mon Sep 17 00:00:00 2001 +From 3cda44c973dbe59dcbb822df068487e09488064f Mon Sep 17 00:00:00 2001 From: Phil Elwell Date: Mon, 13 Feb 2017 17:20:08 +0000 -Subject: [PATCH 026/175] clk-bcm2835: Mark used PLLs and dividers CRITICAL +Subject: [PATCH 026/201] clk-bcm2835: Mark used PLLs and dividers CRITICAL The VPU configures and relies on several PLLs and dividers. Mark all enabled dividers and their PLLs as CRITICAL to prevent the kernel from @@ -1497,10 +1497,10 @@ index 11d89d106026f15719ea25047d6f357b4bfcb2c5..fe8f5d65f2749cb3ddc878df61664826 divider->data = data; -From 8f5c5cf161039e3bdce3fac485e6b551d8905955 Mon Sep 17 00:00:00 2001 +From 72e2aca50328a807fffe452fd6e0389a30759e75 Mon Sep 17 00:00:00 2001 From: Phil Elwell Date: Mon, 13 Feb 2017 17:20:08 +0000 -Subject: [PATCH 027/175] clk-bcm2835: Add claim-clocks property +Subject: [PATCH 027/201] clk-bcm2835: Add claim-clocks property The claim-clocks property can be used to prevent PLLs and dividers from being marked as critical. It contains a vector of clock IDs, @@ -1602,10 +1602,10 @@ index fe8f5d65f2749cb3ddc878df616648267441e0ee..92b5e0f5145b32d3bfc3592fe381e8be sizeof(cprman_parent_names)); of_clk_parent_fill(dev->of_node, cprman->real_parent_names, -From de8bc773b06f7bb3727c368ee7b3384e78b29787 Mon Sep 17 00:00:00 2001 +From 80ec4f24ef1e1bfd25efc5b7143724ac37d838f5 Mon Sep 17 00:00:00 2001 From: Phil Elwell Date: Mon, 6 Mar 2017 09:06:18 +0000 -Subject: [PATCH 028/175] clk-bcm2835: Read max core clock from firmware +Subject: [PATCH 028/201] clk-bcm2835: Read max core clock from firmware The VPU is responsible for managing the core clock, usually under direction from the bcm2835-cpufreq driver but not via the clk-bcm2835 @@ -1720,10 +1720,10 @@ index 92b5e0f5145b32d3bfc3592fe381e8be3cd90c72..336f8c9c44325d0a94e591a8557f7af2 for (i = 0; !of_property_read_u32_index(pdev->dev.of_node, "claim-clocks", -From 326c5529a8888f94639dfdb1571248b9ec9d0db4 Mon Sep 17 00:00:00 2001 +From af5d91fbc2094ac6f1c68b1e03ee6f389d16e964 Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Mon, 9 May 2016 17:28:18 -0700 -Subject: [PATCH 029/175] clk: bcm2835: Mark GPIO clocks enabled at boot as +Subject: [PATCH 029/201] clk: bcm2835: Mark GPIO clocks enabled at boot as critical. These divide off of PLLD_PER and are used for the ethernet and wifi @@ -1761,10 +1761,10 @@ index 336f8c9c44325d0a94e591a8557f7af246adc857..caa05e5ad0b7b5cd683e04fb3591a3df * Pass the CLK_SET_RATE_PARENT flag if we are allowed to propagate * rate changes on at least of the parents. -From e3554c13b1785b8164b80d6b275a38d5e7b3b3db Mon Sep 17 00:00:00 2001 +From 2a474d35b1673521d5d0d5c51eeaf5b893351c4e Mon Sep 17 00:00:00 2001 From: Phil Elwell Date: Thu, 9 Feb 2017 14:36:44 +0000 -Subject: [PATCH 030/175] sound: Demote deferral errors to INFO level +Subject: [PATCH 030/201] sound: Demote deferral errors to INFO level At present there is no mechanism to specify driver load order, which can lead to deferrals and repeated retries until successful. @@ -1799,10 +1799,10 @@ index fee4b0ef5566cf9e8de0bf5c568706da9cab2ea2..c728a4148903e983d61b6ae65765ba11 goto _err_defer; } -From 8508baa5e47654bbbb1c69f2bb13916181283b0a Mon Sep 17 00:00:00 2001 +From 5e5c88d4c4f445e6e7f7bf106d4c767566958af4 Mon Sep 17 00:00:00 2001 From: Claggy3 Date: Sat, 11 Feb 2017 14:00:30 +0000 -Subject: [PATCH 031/175] Update vfpmodule.c +Subject: [PATCH 031/201] Update vfpmodule.c Christopher Alexander Tobias Schulze - May 2, 2015, 11:57 a.m. This patch fixes a problem with VFP state save and restore related @@ -1939,10 +1939,10 @@ index a71a48e71fffa8626fe90106815376c44bbe679b..d6c0a5a0a5ae3510db3ace5e3f5d3410 /* * Save the userland NEON/VFP state. Under UP, -From b403fb373fb729837b87b58e28774476b32218c2 Mon Sep 17 00:00:00 2001 +From e5fa3bdb7debe74d8b271492139549df6a46ac2a Mon Sep 17 00:00:00 2001 From: Matt Flax Date: Wed, 8 Mar 2017 21:13:24 +1100 -Subject: [PATCH 032/175] ASoC: bcm2835_i2s.c: relax the ch2 register setting +Subject: [PATCH 032/201] ASoC: bcm2835_i2s.c: relax the ch2 register setting for 8 channels This patch allows ch2 registers to be set for 8 channels of audio. @@ -1963,10 +1963,10 @@ index 6ba20498202ed36906b52096893a88867a79269f..56df7d8a43d0aac055a91b0d24aca8e1 format |= BCM2835_I2S_CH1(BCM2835_I2S_CHPOS(ch1pos)); format |= BCM2835_I2S_CH2(BCM2835_I2S_CHPOS(ch2pos)); -From b4e251bcbf56ce240f1a7c2ce54285702859208e Mon Sep 17 00:00:00 2001 +From 0afa18284f78a743187b12aacc72b0f395e86be5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= Date: Tue, 1 Nov 2016 15:15:41 +0100 -Subject: [PATCH 033/175] i2c: bcm2835: Add debug support +Subject: [PATCH 033/201] i2c: bcm2835: Add debug support MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit @@ -2155,10 +2155,10 @@ index cd07a69e2e9355540442785f95e90823b05c9d10..47167f403cc8329bd811b47c7011c299 if (i2c_dev->msg_err & BCM2835_I2C_S_ERR) return -EREMOTEIO; -From b636d4110488638df9fbe04256b92a23cebf7b52 Mon Sep 17 00:00:00 2001 +From 70d56c42092cd38ab02deec1f607f1d4c4079bb9 Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Thu, 18 Dec 2014 16:07:15 -0800 -Subject: [PATCH 034/175] mm: Remove the PFN busy warning +Subject: [PATCH 034/201] mm: Remove the PFN busy warning See commit dae803e165a11bc88ca8dbc07a11077caf97bbcb -- the warning is expected sometimes when using CMA. However, that commit still spams @@ -2183,10 +2183,10 @@ index d51c2087c498c63f3f515d2931e42b5110efb62f..fd094c36e26c712d7537b16aa547d3e8 goto done; } -From e365d7872b1c33a8855a1a8118dab8596163f9dd Mon Sep 17 00:00:00 2001 +From d47099cc6511b448b6a389f335619c925ffec7d1 Mon Sep 17 00:00:00 2001 From: Phil Elwell Date: Thu, 23 Mar 2017 10:06:56 +0000 -Subject: [PATCH 035/175] ASoC: Add prompt for ICS43432 codec +Subject: [PATCH 035/201] ASoC: Add prompt for ICS43432 codec Without a prompt string, a config setting can't be included in a defconfig. Give CONFIG_SND_SOC_ICS43432 a prompt so that Pi soundcards @@ -2211,10 +2211,10 @@ index c367d11079bc90feec2ad0fa748d7ffc3035faba..91d5b531b69b49db97f7febbc60d33a2 config SND_SOC_INNO_RK3036 tristate "Inno codec driver for RK3036 SoC" -From 7e86f6e57045498c57f2b3cd6a3a04f0423cf90e Mon Sep 17 00:00:00 2001 +From d01c920bd5578d11a04a09ba1a772d32aebbc824 Mon Sep 17 00:00:00 2001 From: popcornmix Date: Sun, 12 May 2013 12:24:19 +0100 -Subject: [PATCH 036/175] Main bcm2708/bcm2709 linux port +Subject: [PATCH 036/201] Main bcm2708/bcm2709 linux port MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit @@ -2402,10 +2402,10 @@ index cfb4b4496dd9f61362dea012176c146120fada07..d9c6c217c4d6a2408abe2665bf7f2700 MODULE_AUTHOR("Lubomir Rintel "); MODULE_DESCRIPTION("BCM2835 mailbox IPC driver"); -From 6d6e6fea9b88e27c6d376196978dc43df4fb7047 Mon Sep 17 00:00:00 2001 +From 9ab2fcac834f0aae94d9266b5741b8ec16f7226e Mon Sep 17 00:00:00 2001 From: popcornmix Date: Wed, 1 May 2013 19:46:17 +0100 -Subject: [PATCH 037/175] Add dwc_otg driver +Subject: [PATCH 037/201] Add dwc_otg driver MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit @@ -63702,10 +63702,10 @@ index 0000000000000000000000000000000000000000..cdc9963176e5a4a0d5250613b61e26c5 +test_main(); +0; -From 9956154cf61011a769311d52a6fd5d6ac56c287c Mon Sep 17 00:00:00 2001 +From 83d0db162af7cf072e14f65ef6bca9ce9db1ffdb Mon Sep 17 00:00:00 2001 From: popcornmix Date: Wed, 17 Jun 2015 17:06:34 +0100 -Subject: [PATCH 038/175] bcm2708 framebuffer driver +Subject: [PATCH 038/201] bcm2708 framebuffer driver MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit @@ -67164,10 +67164,10 @@ index 3c14e43b82fefe1d32f591d1b2f61d2cd28d0fa8..7626beb6a5bb8df601ddf0f6e6909d1f +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 -From 71028e794308d8aac5b5cc7d4ef47cd24f1aa74c Mon Sep 17 00:00:00 2001 +From bfb014341e3d1640eec981e14419b139b9352ecf Mon Sep 17 00:00:00 2001 From: Florian Meier Date: Fri, 22 Nov 2013 14:22:53 +0100 -Subject: [PATCH 039/175] dmaengine: Add support for BCM2708 +Subject: [PATCH 039/201] dmaengine: Add support for BCM2708 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit @@ -67798,10 +67798,10 @@ index 0000000000000000000000000000000000000000..c5bfff2765be4606077e6c8af73040ec + +#endif /* _PLAT_BCM2708_DMA_H */ -From 1570c5367009f0bf1ffcf0604f9a6b3aecda69f4 Mon Sep 17 00:00:00 2001 +From 81346c04c8aacb9c0c6baacb4d2a1d6738607f76 Mon Sep 17 00:00:00 2001 From: gellert Date: Fri, 15 Aug 2014 16:35:06 +0100 -Subject: [PATCH 040/175] MMC: added alternative MMC driver +Subject: [PATCH 040/201] MMC: added alternative MMC driver MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit @@ -69681,10 +69681,10 @@ index 279b39008a33bb68745d9ea55ea5dd7ed522fd1c..49bdea5791a289251019a89419804dde unsigned int erase_size; /* erase size in sectors */ -From 38dc2198d38ad5758607572c8b6fd9f3b78bb404 Mon Sep 17 00:00:00 2001 +From 8c6d308d7d0d54ccadc799b92d878f8444acd11b Mon Sep 17 00:00:00 2001 From: Phil Elwell Date: Wed, 25 Mar 2015 17:49:47 +0000 -Subject: [PATCH 041/175] Adding bcm2835-sdhost driver, and an overlay to +Subject: [PATCH 041/201] Adding bcm2835-sdhost driver, and an overlay to enable it BCM2835 has two SD card interfaces. This driver uses the other one. @@ -72090,10 +72090,10 @@ index 0000000000000000000000000000000000000000..9c6f199a7830959f31012d86bc1f8b1a +MODULE_LICENSE("GPL v2"); +MODULE_AUTHOR("Phil Elwell"); -From a2b75b2f0461d5cf12ad93e9362b5ebb98aedb11 Mon Sep 17 00:00:00 2001 +From a9311a4fe71c12bc49e4bc3eefc343f00712697e Mon Sep 17 00:00:00 2001 From: popcornmix Date: Fri, 28 Oct 2016 15:36:43 +0100 -Subject: [PATCH 042/175] vc_mem: Add vc_mem driver for querying firmware +Subject: [PATCH 042/201] vc_mem: Add vc_mem driver for querying firmware memory addresses MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 @@ -72618,10 +72618,10 @@ index 0000000000000000000000000000000000000000..20a475377eb3078ea1ecaef2b24efc35 + +#endif /* _VC_MEM_H */ -From 27ec2190d605783279ba1d4f1d4c8e94ac4bb03a Mon Sep 17 00:00:00 2001 +From 88e3a68b24ac9fd54392cea9d36e0723fbc112cc Mon Sep 17 00:00:00 2001 From: Tim Gover Date: Tue, 22 Jul 2014 15:41:04 +0100 -Subject: [PATCH 043/175] vcsm: VideoCore shared memory service for BCM2835 +Subject: [PATCH 043/201] vcsm: VideoCore shared memory service for BCM2835 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit @@ -77499,10 +77499,10 @@ index 0000000000000000000000000000000000000000..b75729d762f25aace133f7a008633b40 + +#endif /* __VMCS_SM_IOCTL_H__INCLUDED__ */ -From 93642f411df103f353089b9972ae160457aa5e16 Mon Sep 17 00:00:00 2001 +From bb42462e0201a474a567bb7c61c9e56484465d57 Mon Sep 17 00:00:00 2001 From: Luke Wren Date: Fri, 21 Aug 2015 23:14:48 +0100 -Subject: [PATCH 044/175] Add /dev/gpiomem device for rootless user GPIO access +Subject: [PATCH 044/201] Add /dev/gpiomem device for rootless user GPIO access Signed-off-by: Luke Wren @@ -77810,10 +77810,10 @@ index 0000000000000000000000000000000000000000..f5e7f1ba8fb6f18dee77fad06a17480c +MODULE_DESCRIPTION("gpiomem driver for accessing GPIO from userspace"); +MODULE_AUTHOR("Luke Wren "); -From fa6d7b7b0083b4e2df8a10715e37a070ab23d15b Mon Sep 17 00:00:00 2001 +From 9fdee10fc9d1f51522b63457f6df2d08d04beff4 Mon Sep 17 00:00:00 2001 From: Luke Wren Date: Sat, 5 Sep 2015 01:14:45 +0100 -Subject: [PATCH 045/175] Add SMI driver +Subject: [PATCH 045/201] Add SMI driver Signed-off-by: Luke Wren --- @@ -79764,10 +79764,10 @@ index 0000000000000000000000000000000000000000..ee3a75edfc033eeb0d90a687ffb68b10 + +#endif /* BCM2835_SMI_H */ -From 60f29b295a8975070fd9757eb589dea9b0cbfe32 Mon Sep 17 00:00:00 2001 +From 843921cd0abe0ae194adc94e5d88abad280566b1 Mon Sep 17 00:00:00 2001 From: Martin Sperl Date: Tue, 26 Apr 2016 14:59:21 +0000 -Subject: [PATCH 046/175] MISC: bcm2835: smi: use clock manager and fix reload +Subject: [PATCH 046/201] MISC: bcm2835: smi: use clock manager and fix reload issues Use clock manager instead of self-made clockmanager. @@ -79936,10 +79936,10 @@ index 63a4ea08b9930a3a31a985f0a1d969b488ed49ec..1261540703127d1d63b9f3c87042c6e5 return 0; } -From b662f54dfdfc514eadf1f98c1e26dff0ee782dad Mon Sep 17 00:00:00 2001 +From 3cff724912c5a622d0e444089b4eb2fb8597e061 Mon Sep 17 00:00:00 2001 From: Luke Wren Date: Sat, 5 Sep 2015 01:16:10 +0100 -Subject: [PATCH 047/175] Add SMI NAND driver +Subject: [PATCH 047/201] Add SMI NAND driver Signed-off-by: Luke Wren --- @@ -80304,10 +80304,10 @@ index 0000000000000000000000000000000000000000..c4826ea1c2bae555ce780e61f1076ddd + ("Driver for NAND chips using Broadcom Secondary Memory Interface"); +MODULE_AUTHOR("Luke Wren "); -From ce7ac50087029eeeac74dc9fb06bbc9df576e7ad Mon Sep 17 00:00:00 2001 +From 9cc8682c6ea521697547539d4f0eda6b7036493c Mon Sep 17 00:00:00 2001 From: Aron Szabo Date: Sat, 16 Jun 2012 12:15:55 +0200 -Subject: [PATCH 048/175] lirc: added support for RaspberryPi GPIO +Subject: [PATCH 048/201] lirc: added support for RaspberryPi GPIO lirc_rpi: Use read_current_timer to determine transmitter delay. Thanks to jjmz and others See: https://github.com/raspberrypi/linux/issues/525 @@ -81167,10 +81167,10 @@ index 0000000000000000000000000000000000000000..fb69624ccef00ddbdccf8256d6baf1b1 + +#endif -From a6f196e2abeda7e4bac3b388551498745b0a8e66 Mon Sep 17 00:00:00 2001 +From 0b49632fca26af6d22ede4aadd77ac2917bafe97 Mon Sep 17 00:00:00 2001 From: popcornmix Date: Wed, 3 Jul 2013 00:49:20 +0100 -Subject: [PATCH 049/175] Add cpufreq driver +Subject: [PATCH 049/201] Add cpufreq driver Signed-off-by: popcornmix @@ -81434,10 +81434,10 @@ index 0000000000000000000000000000000000000000..99345969b0e4d651fd9033d67de2febb +module_init(bcm2835_cpufreq_module_init); +module_exit(bcm2835_cpufreq_module_exit); -From 137cced6c19a6da29616d13158fec5f6ed1004bd Mon Sep 17 00:00:00 2001 +From 2c3706c50ace661bb5cfda64528213ab8dcdc0c7 Mon Sep 17 00:00:00 2001 From: popcornmix Date: Wed, 17 Jun 2015 15:44:08 +0100 -Subject: [PATCH 050/175] Add Chris Boot's i2c driver +Subject: [PATCH 050/201] Add Chris Boot's i2c driver MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit @@ -82102,10 +82102,10 @@ index 0000000000000000000000000000000000000000..962f2e5c7455d91bf32925d785f5f16b +MODULE_LICENSE("GPL v2"); +MODULE_ALIAS("platform:" DRV_NAME); -From 2d1793e08965c22c7eb2143a9aef7f704ec49253 Mon Sep 17 00:00:00 2001 +From 09fc2eafc792b97cbc5d484a6d75145dce655ee2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= Date: Fri, 26 Jun 2015 14:27:06 +0200 -Subject: [PATCH 051/175] char: broadcom: Add vcio module +Subject: [PATCH 051/201] char: broadcom: Add vcio module MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit @@ -82330,10 +82330,10 @@ index 0000000000000000000000000000000000000000..c19bc2075c77879563ef5e59038b5a14 +MODULE_DESCRIPTION("Mailbox userspace access"); +MODULE_LICENSE("GPL"); -From d4bcf1971811d1a22a19da779928193c5a8952b4 Mon Sep 17 00:00:00 2001 +From a8e4611ec9bfeb2b09c234c168cd2add721fe4c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= Date: Fri, 26 Jun 2015 14:25:01 +0200 -Subject: [PATCH 052/175] firmware: bcm2835: Support ARCH_BCM270x +Subject: [PATCH 052/201] firmware: bcm2835: Support ARCH_BCM270x MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit @@ -82416,10 +82416,10 @@ index dd506cd3a5b874f9e1acd07efb8cd151bb6145d1..3f070bd38a91511c986e3fb114b15bd4 MODULE_AUTHOR("Eric Anholt "); MODULE_DESCRIPTION("Raspberry Pi firmware driver"); -From 856d97475f85ab1cd225b3a1b592b36ae2978d29 Mon Sep 17 00:00:00 2001 +From f19de1ec3b4eb3d5736f17cb4fdd3960eb47b25c Mon Sep 17 00:00:00 2001 From: Phil Elwell Date: Mon, 11 May 2015 09:00:42 +0100 -Subject: [PATCH 053/175] scripts: Add mkknlimg and knlinfo scripts from tools +Subject: [PATCH 053/201] scripts: Add mkknlimg and knlinfo scripts from tools repo The Raspberry Pi firmware looks for a trailer on the kernel image to @@ -82946,10 +82946,10 @@ index 0000000000000000000000000000000000000000..84be2593ec1de8f97b0167ff06b3e05d + return $trailer; +} -From 43f9079930eb070443b2fcbdcd01b3c21f1ebc74 Mon Sep 17 00:00:00 2001 +From 77f7f50decefc1ecd1b321562730334dab66b2d7 Mon Sep 17 00:00:00 2001 From: notro Date: Wed, 9 Jul 2014 14:46:08 +0200 -Subject: [PATCH 054/175] BCM2708: Add core Device Tree support +Subject: [PATCH 054/201] BCM2708: Add core Device Tree support MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit @@ -95414,10 +95414,10 @@ index 04b5633df1cfafa316f9086c4bf98a9ecf9d0939..d523d1e14220a369c4c766ca3a01208e # Bzip2 -From fdb8cc80c11e9d346629e44caec70dff4eb67c4c Mon Sep 17 00:00:00 2001 +From 6083ccfc6c46f4e2fe5340f9c335a5b99b532c07 Mon Sep 17 00:00:00 2001 From: Phil Elwell Date: Fri, 6 Feb 2015 13:50:57 +0000 -Subject: [PATCH 055/175] BCM270x_DT: Add pwr_led, and the required "input" +Subject: [PATCH 055/201] BCM270x_DT: Add pwr_led, and the required "input" trigger The "input" trigger makes the associated GPIO an input. This is to support @@ -95592,10 +95592,10 @@ index bf6db4fe895bcd67e04ee65e8f76ea104af6299f..8741dca6dba65e2d72fbdbc1702139c2 /* set_brightness_work / blink_timer flags, atomic, private. */ unsigned long work_flags; -From ed31b34f4cbcb7d45433e748af7743f6e1169b1d Mon Sep 17 00:00:00 2001 +From 28fe46f6859d440d44323192a4f5c09b57b76e88 Mon Sep 17 00:00:00 2001 From: Siarhei Siamashka Date: Mon, 17 Jun 2013 13:32:11 +0300 -Subject: [PATCH 056/175] fbdev: add FBIOCOPYAREA ioctl +Subject: [PATCH 056/201] fbdev: add FBIOCOPYAREA ioctl Based on the patch authored by Ali Gholami Rudi at https://lkml.org/lkml/2009/7/13/153 @@ -95863,10 +95863,10 @@ index 6cd9b198b7c64eb94821f2e3f2c5201e6c6d25eb..f36c92c2da7487437c33f7a4e2c6e09e __u32 dx; /* screen-relative */ __u32 dy; -From df30e3f16d1c2403022fa35d2493cb93da13ad4f Mon Sep 17 00:00:00 2001 +From 4fca9e95594935ddd4f44ee00be80fc7e5e76ef7 Mon Sep 17 00:00:00 2001 From: Harm Hanemaaijer Date: Thu, 20 Jun 2013 20:21:39 +0200 -Subject: [PATCH 057/175] Speed up console framebuffer imageblit function +Subject: [PATCH 057/201] Speed up console framebuffer imageblit function Especially on platforms with a slower CPU but a relatively high framebuffer fill bandwidth, like current ARM devices, the existing @@ -96075,10 +96075,10 @@ index a2bb276a8b2463eee98eb237c4647bc00cd93601..436494fba15abecb400ef28688466faf start_index, pitch_index); } else -From 86a4de9722e7844d560ebb3ccb1e7f54949e19a6 Mon Sep 17 00:00:00 2001 +From 08c58d5cc44f9c2e5be98bab47462d5e18d341dc Mon Sep 17 00:00:00 2001 From: popcornmix Date: Wed, 8 May 2013 11:46:50 +0100 -Subject: [PATCH 058/175] enabling the realtime clock 1-wire chip DS1307 and +Subject: [PATCH 058/201] enabling the realtime clock 1-wire chip DS1307 and 1-wire on GPIO4 (as a module) 1-wire: Add support for configuring pin for w1-gpio kernel module @@ -96328,10 +96328,10 @@ index 5b2972946dda5f9ad415f1eaeaab67743a5cc0f0..b3558b7c9efb2484b40e31312aee197b u8, w1_slave_found_callback); }; -From 8a8e1e839bbd2489b485c9866bc2f5bf2675104a Mon Sep 17 00:00:00 2001 +From 44a5520215fa3a30003def45a5cb570d5006c0f5 Mon Sep 17 00:00:00 2001 From: Gordon Hollingworth Date: Tue, 12 May 2015 14:47:56 +0100 -Subject: [PATCH 059/175] rpi-ft5406: Add touchscreen driver for pi LCD display +Subject: [PATCH 059/201] rpi-ft5406: Add touchscreen driver for pi LCD display Fix driver detection failure Check that the buffer response is non-zero meaning the touchscreen was detected @@ -96676,10 +96676,10 @@ index 0000000000000000000000000000000000000000..9d7d05482355d168c5c0c42508cd9789 +MODULE_DESCRIPTION("Touchscreen driver for memory based FT5406"); +MODULE_LICENSE("GPL"); -From 402b63060564a9a17c349315e2f2b93ad796c595 Mon Sep 17 00:00:00 2001 +From a61af86414ae71b36f5446f4bb68c68528a225db Mon Sep 17 00:00:00 2001 From: popcornmix Date: Mon, 28 Nov 2016 16:50:04 +0000 -Subject: [PATCH 060/175] Improve __copy_to_user and __copy_from_user +Subject: [PATCH 060/201] Improve __copy_to_user and __copy_from_user performance Provide a __copy_from_user that uses memcpy. On BCM2708, use @@ -98259,10 +98259,10 @@ index 971bc298f63eeeed418131b7b7200ac91b0d73f1..78e9f6e8c6fdebdb754cb703095d1726 bool "Broadcom BCM63xx DSL SoC" depends on ARCH_MULTI_V7 -From b12af255829529204bdd7d4c4afc81e92a75354d Mon Sep 17 00:00:00 2001 +From 5c7376c9bef9a2e162b0b7b74b3bafe145481a03 Mon Sep 17 00:00:00 2001 From: Phil Elwell Date: Thu, 25 Jun 2015 12:16:11 +0100 -Subject: [PATCH 061/175] gpio-poweroff: Allow it to work on Raspberry Pi +Subject: [PATCH 061/201] gpio-poweroff: Allow it to work on Raspberry Pi The Raspberry Pi firmware manages the power-down and reboot process. To do this it installs a pm_power_off handler, causing @@ -98297,10 +98297,10 @@ index be3d81ff51cc3f510d85e4eed7a52960e51e7bc1..a030ae9fb1fca325061c093696e82186 "%s: pm_power_off function already registered", __func__); -From 0872a65802000eeecfa57f9d8e904d414c767815 Mon Sep 17 00:00:00 2001 +From f49abedc49c2d7a682d72a38d18cd9a79c2dfce1 Mon Sep 17 00:00:00 2001 From: Phil Elwell Date: Tue, 14 Jul 2015 14:32:47 +0100 -Subject: [PATCH 062/175] mfd: Add Raspberry Pi Sense HAT core driver +Subject: [PATCH 062/201] mfd: Add Raspberry Pi Sense HAT core driver --- drivers/input/joystick/Kconfig | 8 + @@ -99165,10 +99165,10 @@ index 0000000000000000000000000000000000000000..56196dc2af10e464a1e3f98b028dca1c + +#endif -From b9048bb7c324a59743376e2b483a8f56ff423efc Mon Sep 17 00:00:00 2001 +From 73828fa4aa7d900e7f290f8ba1613400ee8e5781 Mon Sep 17 00:00:00 2001 From: Florian Meier Date: Fri, 22 Nov 2013 19:19:08 +0100 -Subject: [PATCH 063/175] ASoC: Add support for HifiBerry DAC +Subject: [PATCH 063/201] ASoC: Add support for HifiBerry DAC This adds a machine driver for the HifiBerry DAC. It is a sound card that can @@ -99343,10 +99343,10 @@ index 0000000000000000000000000000000000000000..ee9f133953544629282631e5ef3f73fe +MODULE_DESCRIPTION("ASoC Driver for HifiBerry DAC"); +MODULE_LICENSE("GPL v2"); -From 1dd167453218ac01ca691faaae32c3ec1f8ca8e9 Mon Sep 17 00:00:00 2001 +From a37d8f21cf2adfbfb17b1d1ff4a702b0fe3c569b Mon Sep 17 00:00:00 2001 From: Florian Meier Date: Mon, 25 Jan 2016 15:48:59 +0000 -Subject: [PATCH 064/175] ASoC: Add support for Rpi-DAC +Subject: [PATCH 064/201] ASoC: Add support for Rpi-DAC --- sound/soc/bcm/Kconfig | 7 +++ @@ -99630,10 +99630,10 @@ index 0000000000000000000000000000000000000000..afe1b419582aa40c4b2729d242bb13cd +MODULE_AUTHOR("Florian Meier "); +MODULE_LICENSE("GPL v2"); -From 684e45dbb848f1886f405d9c28bad453a158c591 Mon Sep 17 00:00:00 2001 +From 2dd94c9757d562e5e5e92bbedc2c536715b2a090 Mon Sep 17 00:00:00 2001 From: Daniel Matuschek Date: Wed, 15 Jan 2014 21:41:23 +0100 -Subject: [PATCH 065/175] ASoC: wm8804: Implement MCLK configuration options, +Subject: [PATCH 065/201] ASoC: wm8804: Implement MCLK configuration options, add 32bit support WM8804 can run with PLL frequencies of 256xfs and 128xfs for most sample rates. At 192kHz only 128xfs is supported. The existing driver selects 128xfs automatically for some lower samples rates. By using an @@ -99682,10 +99682,10 @@ index fc69b87443d80489382b97332de6d5ad12a58ec8..d8fdce81b297dcf02e144bdead0c6193 .component_driver = { .dapm_widgets = wm8804_dapm_widgets, -From 03e059c7033b3aeb8c700327e94b67d937dc3c45 Mon Sep 17 00:00:00 2001 +From 8d266bd0d2ae39d6819f064424d9672b73140e93 Mon Sep 17 00:00:00 2001 From: Daniel Matuschek Date: Wed, 15 Jan 2014 21:42:08 +0100 -Subject: [PATCH 066/175] ASoC: BCM:Add support for HiFiBerry Digi. Driver is +Subject: [PATCH 066/201] ASoC: BCM:Add support for HiFiBerry Digi. Driver is based on the patched WM8804 driver. Signed-off-by: Daniel Matuschek @@ -100029,10 +100029,10 @@ index 0000000000000000000000000000000000000000..7620dd02de40b6d644ff038b445d375d +MODULE_DESCRIPTION("ASoC Driver for HifiBerry Digi"); +MODULE_LICENSE("GPL v2"); -From c5b6ca615ec3586771cdf2b1519677a6c9d466e8 Mon Sep 17 00:00:00 2001 +From 71a5adf7d16ee42d871f3dd3ed19b46d59228fe5 Mon Sep 17 00:00:00 2001 From: Gordon Garrity Date: Sat, 8 Mar 2014 16:56:57 +0000 -Subject: [PATCH 067/175] Add IQaudIO Sound Card support for Raspberry Pi +Subject: [PATCH 067/201] Add IQaudIO Sound Card support for Raspberry Pi Set a limit of 0dB on Digital Volume Control @@ -100367,10 +100367,10 @@ index 0000000000000000000000000000000000000000..1ee4097c846376666775272ed692ca33 +MODULE_DESCRIPTION("ASoC Driver for IQAudio DAC"); +MODULE_LICENSE("GPL v2"); -From ab2a0415e5470c03901bb137f201e45cfb097228 Mon Sep 17 00:00:00 2001 +From 5c97aa9f802672182b386451525422a21cf09723 Mon Sep 17 00:00:00 2001 From: Daniel Matuschek Date: Mon, 4 Aug 2014 10:06:56 +0200 -Subject: [PATCH 068/175] Added support for HiFiBerry DAC+ +Subject: [PATCH 068/201] Added support for HiFiBerry DAC+ The driver is based on the HiFiBerry DAC driver. However HiFiBerry DAC+ uses a different codec chip (PCM5122), therefore a new driver is necessary. @@ -101005,10 +101005,10 @@ index 68feae262476492ae3a0b30855dbb09e96fa187e..f7b0977017ed5a6c02eafa0147d49d66 dev_err(dev, "No LRCLK?\n"); return -EINVAL; -From 9d7762cec49df044ae575106f2123f20bf4facb5 Mon Sep 17 00:00:00 2001 +From 2dfa22a719286eebced75b397d400fc5d4299da6 Mon Sep 17 00:00:00 2001 From: Daniel Matuschek Date: Mon, 4 Aug 2014 11:09:58 +0200 -Subject: [PATCH 069/175] Added driver for HiFiBerry Amp amplifier add-on board +Subject: [PATCH 069/201] Added driver for HiFiBerry Amp amplifier add-on board The driver contains a low-level hardware driver for the TAS5713 and the drivers for the Raspberry Pi I2S subsystem. @@ -101843,10 +101843,10 @@ index 0000000000000000000000000000000000000000..8f019e04898754d2f87e9630137be9e8 + +#endif /* _TAS5713_H */ -From b7f6642b1a15e95cb0e9aa0485d7ee0b298fef48 Mon Sep 17 00:00:00 2001 +From bf841bf59d5c6e71f5a5cc17c3f0fe805d629cbc Mon Sep 17 00:00:00 2001 From: Waldemar Brodkorb Date: Wed, 25 Mar 2015 09:26:17 +0100 -Subject: [PATCH 070/175] Add driver for rpi-proto +Subject: [PATCH 070/201] Add driver for rpi-proto Forward port of 3.10.x driver from https://github.com/koalo We are using a custom board and would like to use rpi 3.18.x @@ -102061,10 +102061,10 @@ index 0000000000000000000000000000000000000000..fadbfade100228aaafabb0d3bdf35c01 +MODULE_DESCRIPTION("ASoC Driver for Raspberry Pi connected to PROTO board (WM8731)"); +MODULE_LICENSE("GPL"); -From 5a5ab00ba1bce589797e41e0b19e4c702207117c Mon Sep 17 00:00:00 2001 +From 4806283a8513f5c2dcea3628766759324ed01ea6 Mon Sep 17 00:00:00 2001 From: Jan Grulich Date: Mon, 24 Aug 2015 16:03:47 +0100 -Subject: [PATCH 071/175] RaspiDAC3 support +Subject: [PATCH 071/201] RaspiDAC3 support Signed-off-by: Jan Grulich @@ -102307,10 +102307,10 @@ index 0000000000000000000000000000000000000000..ad2b5b89bc8213dc2e277306ef50d6e3 +MODULE_DESCRIPTION("ASoC Driver for RaspiDAC Rev.3x"); +MODULE_LICENSE("GPL v2"); -From 16a94cbf6585e239366042bacdfd53c758c5f6af Mon Sep 17 00:00:00 2001 +From 8f4a3638c3f9a55f5e068a8de27851a86e6a61f6 Mon Sep 17 00:00:00 2001 From: Aaron Shaw Date: Thu, 7 Apr 2016 21:26:21 +0100 -Subject: [PATCH 072/175] Add Support for JustBoom Audio boards +Subject: [PATCH 072/201] Add Support for JustBoom Audio boards justboom-dac: Adjust for ALSA API change @@ -102766,10 +102766,10 @@ index 0000000000000000000000000000000000000000..909cf8928f2f4313982316f9c5b8a709 +MODULE_DESCRIPTION("ASoC Driver for JustBoom PI Digi HAT Sound Card"); +MODULE_LICENSE("GPL v2"); -From 6fab6484abab973dd23ff41940169332f0a4416e Mon Sep 17 00:00:00 2001 +From 0d14a00822d7c833ea25e35c7dbb3a2549aa456d Mon Sep 17 00:00:00 2001 From: Andrey Grodzovsky Date: Tue, 3 May 2016 22:10:59 -0400 -Subject: [PATCH 073/175] ARM: adau1977-adc: Add basic machine driver for +Subject: [PATCH 073/201] ARM: adau1977-adc: Add basic machine driver for adau1977 codec driver. This commit adds basic support for the codec usage including: Device tree overlay, @@ -102951,10 +102951,10 @@ index 0000000000000000000000000000000000000000..f3d7e5db7bb912e1d7ca6f8e8d42df5f +MODULE_DESCRIPTION("ASoC Driver for ADAU1977 ADC"); +MODULE_LICENSE("GPL v2"); -From 6f55c465d91f101c7060d2e8e9a911989ec41d39 Mon Sep 17 00:00:00 2001 +From 4aede67713f17375f69ef485fc38568f04da4786 Mon Sep 17 00:00:00 2001 From: Matt Flax Date: Mon, 16 May 2016 21:36:31 +1000 -Subject: [PATCH 074/175] New AudioInjector.net Pi soundcard with low jitter +Subject: [PATCH 074/201] New AudioInjector.net Pi soundcard with low jitter audio in and out. Contains the sound/soc/bcm ALSA machine driver and necessary alterations to the Kconfig and Makefile. @@ -103205,10 +103205,10 @@ index 0000000000000000000000000000000000000000..491906bbf446826e55dd843f28e4860f +MODULE_ALIAS("platform:audioinjector-pi-soundcard"); + -From dbaf9662f429f920aa4ae82c312dd0a5fc8d87d7 Mon Sep 17 00:00:00 2001 +From eb0d6a4cbd4ba49c7fc41f72384416842ebedb06 Mon Sep 17 00:00:00 2001 From: DigitalDreamtime Date: Thu, 30 Jun 2016 18:38:42 +0100 -Subject: [PATCH 075/175] Add IQAudIO Digi WM8804 board support +Subject: [PATCH 075/201] Add IQAudIO Digi WM8804 board support Support IQAudIO Digi board with iqaudio_digi machine driver and iqaudio-digi-wm8804-audio overlay. @@ -103508,10 +103508,10 @@ index 0000000000000000000000000000000000000000..33aa2be8a43a12a12cfb5d844dd9732c +MODULE_DESCRIPTION("ASoC Driver for IQAudIO WM8804 Digi"); +MODULE_LICENSE("GPL v2"); -From 39c005ff8e5426495935212070631a8b896fe425 Mon Sep 17 00:00:00 2001 +From 832ee6ce6d016338f2ef4b893f5abdd50f4cf107 Mon Sep 17 00:00:00 2001 From: escalator2015 Date: Tue, 24 May 2016 16:20:09 +0100 -Subject: [PATCH 076/175] New driver for RRA DigiDAC1 soundcard using WM8741 + +Subject: [PATCH 076/201] New driver for RRA DigiDAC1 soundcard using WM8741 + WM8804 --- @@ -103984,10 +103984,10 @@ index 0000000000000000000000000000000000000000..f200688bb4ae32b90a0ced555aed94b0 +MODULE_DESCRIPTION("ASoC Driver for RRA DigiDAC1"); +MODULE_LICENSE("GPL v2"); -From 034fdda1b634bbef0e193d20188a5590f5e5e650 Mon Sep 17 00:00:00 2001 +From 21253b2ff4668f7fd77fb038e2c9d1b88e977716 Mon Sep 17 00:00:00 2001 From: DigitalDreamtime Date: Sat, 2 Jul 2016 16:26:19 +0100 -Subject: [PATCH 077/175] Add support for Dion Audio LOCO DAC-AMP HAT +Subject: [PATCH 077/201] Add support for Dion Audio LOCO DAC-AMP HAT Using dedicated machine driver and pcm5102a codec driver. @@ -104160,10 +104160,10 @@ index 0000000000000000000000000000000000000000..65e03741d349a2dc5bd91f69855ea952 +MODULE_DESCRIPTION("ASoC Driver for DionAudio LOCO"); +MODULE_LICENSE("GPL v2"); -From 7408fccec368e3d1a071da05e3d64b9f9adfce57 Mon Sep 17 00:00:00 2001 +From 5825a5350a42b057e95d6ce7f735ffa45c79c87a Mon Sep 17 00:00:00 2001 From: Clive Messer Date: Mon, 19 Sep 2016 14:01:04 +0100 -Subject: [PATCH 078/175] Allo Piano DAC boards: Initial 2 channel (stereo) +Subject: [PATCH 078/201] Allo Piano DAC boards: Initial 2 channel (stereo) support (#1645) Add initial 2 channel (stereo) support for Allo Piano DAC (2.0/2.1) boards, @@ -104370,10 +104370,10 @@ index 0000000000000000000000000000000000000000..eaf50fb6dbca1970ae1c6f8662088b0f +MODULE_DESCRIPTION("ALSA ASoC Machine Driver for Allo Piano DAC"); +MODULE_LICENSE("GPL v2"); -From e8da4c86df7697bd3eb6b3f65846658f390dcb98 Mon Sep 17 00:00:00 2001 +From b96f8bd4daf402dfb2229f921a3bd393228d19a4 Mon Sep 17 00:00:00 2001 From: Raashid Muhammed Date: Mon, 27 Mar 2017 12:35:00 +0530 -Subject: [PATCH 079/175] Add support for Allo Piano DAC 2.1 plus add-on board +Subject: [PATCH 079/201] Add support for Allo Piano DAC 2.1 plus add-on board for Raspberry Pi. The Piano DAC 2.1 has support for 4 channels with subwoofer. @@ -105461,10 +105461,10 @@ index 0000000000000000000000000000000000000000..1800f5e4d414e2d83a9487a89a2800a3 +MODULE_DESCRIPTION("ALSA ASoC Machine Driver for Allo Piano DAC Plus"); +MODULE_LICENSE("GPL v2"); -From 0d0e3c3ad1179d2ce18666448e2372fc1d470ec0 Mon Sep 17 00:00:00 2001 +From f2bc536db1fb37c95c546b4e0bb1f31f53acf964 Mon Sep 17 00:00:00 2001 From: BabuSubashChandar Date: Tue, 28 Mar 2017 20:04:42 +0530 -Subject: [PATCH 080/175] Add support for Allo Boss DAC add-on board for +Subject: [PATCH 080/201] Add support for Allo Boss DAC add-on board for Raspberry Pi. (#1924) Signed-off-by: Baswaraj K @@ -106167,10 +106167,10 @@ index 0000000000000000000000000000000000000000..203ab76c7045b081578e23bda1099dd1 +MODULE_DESCRIPTION("ALSA ASoC Machine Driver for Allo Boss DAC"); +MODULE_LICENSE("GPL v2"); -From 89f12c3ba16b58d777df75d550718538071d97ae Mon Sep 17 00:00:00 2001 +From 0386ef65c56f46a4a17e5704f61c9cebc31f2510 Mon Sep 17 00:00:00 2001 From: gtrainavicius Date: Sun, 23 Oct 2016 12:06:53 +0300 -Subject: [PATCH 081/175] Support for Blokas Labs pisound board +Subject: [PATCH 081/201] Support for Blokas Labs pisound board Pisound dynamic overlay (#1760) @@ -107369,10 +107369,10 @@ index 0000000000000000000000000000000000000000..06ff1e53dc9d860946965b6303577762 +MODULE_DESCRIPTION("ASoC Driver for pisound, http://blokas.io/pisound"); +MODULE_LICENSE("GPL v2"); -From 30c389cd96092e04acee798c1a125c799b02bad6 Mon Sep 17 00:00:00 2001 +From 9ccd97c57a4b4672888e0fd45f7af20574d89594 Mon Sep 17 00:00:00 2001 From: Matthias Reichl Date: Sun, 22 Jan 2017 12:49:37 +0100 -Subject: [PATCH 082/175] ASoC: Add driver for Cirrus Logic Audio Card +Subject: [PATCH 082/201] ASoC: Add driver for Cirrus Logic Audio Card Note: due to problems with deferred probing of regulators the following softdep should be added to a modprobe.d file @@ -108437,10 +108437,10 @@ index 0000000000000000000000000000000000000000..ac8651ddff7bd3701dffe22c7fb88352 +MODULE_DESCRIPTION("ASoC driver for Cirrus Logic Audio Card"); +MODULE_LICENSE("GPL"); -From 596824a611f5235c381cddd3071c887f83be81fa Mon Sep 17 00:00:00 2001 +From dd7f58d21cd5f1773492dc4af7380c6178f290b0 Mon Sep 17 00:00:00 2001 From: Miquel Date: Fri, 24 Feb 2017 20:51:06 +0100 -Subject: [PATCH 083/175] sound: Support for Dion Audio LOCO-V2 DAC-AMP HAT +Subject: [PATCH 083/201] sound: Support for Dion Audio LOCO-V2 DAC-AMP HAT Signed-off-by: Miquel Blauw --- @@ -108635,10 +108635,10 @@ index 0000000000000000000000000000000000000000..a009c49477972a9832175d86f201b035 +MODULE_DESCRIPTION("ASoC Driver for DionAudio LOCO-V2"); +MODULE_LICENSE("GPL v2"); -From 3db46dc8640ce33be746b32ca4a9efb728af94ff Mon Sep 17 00:00:00 2001 +From 26bc4d704fbd8993c8b4b4307d2534a8dad45976 Mon Sep 17 00:00:00 2001 From: Fe-Pi Date: Wed, 1 Mar 2017 04:42:43 -0700 -Subject: [PATCH 084/175] Add support for Fe-Pi audio sound card. (#1867) +Subject: [PATCH 084/201] Add support for Fe-Pi audio sound card. (#1867) Fe-Pi Audio Sound Card is based on NXP SGTL5000 codec. Mechanical specification of the board is the same the Raspberry Pi Zero. @@ -108852,10 +108852,10 @@ index 0000000000000000000000000000000000000000..015b56fd73cc36be5b5eecd17548fd03 +MODULE_DESCRIPTION("ASoC Driver for Fe-Pi Audio"); +MODULE_LICENSE("GPL v2"); -From 60e0b139bd7a9c7430c3b4c63522b8c735ef36f4 Mon Sep 17 00:00:00 2001 +From fae32964c6caa28cd73bb837a7d3bb433829fd0b Mon Sep 17 00:00:00 2001 From: Matt Flax Date: Wed, 8 Mar 2017 20:04:13 +1100 -Subject: [PATCH 085/175] Add support for the AudioInjector.net Octo sound card +Subject: [PATCH 085/201] Add support for the AudioInjector.net Octo sound card AudioInjector Octo: sample rates, regulators, reset @@ -109264,10 +109264,10 @@ index 0000000000000000000000000000000000000000..5e79f4eff93a21ed3495c77a90f73525 +MODULE_LICENSE("GPL v2"); +MODULE_ALIAS("platform:audioinjector-octo-soundcard"); -From 4875f48c02acf0531ef5d6cb552a92d23eff4263 Mon Sep 17 00:00:00 2001 +From 6de76c4af630d9dd2baadb4c98e0c029b76bfd17 Mon Sep 17 00:00:00 2001 From: Peter Malkin Date: Mon, 27 Mar 2017 16:38:21 -0700 -Subject: [PATCH 086/175] Driver support for Google voiceHAT soundcard. +Subject: [PATCH 086/201] Driver support for Google voiceHAT soundcard. --- sound/soc/bcm/Kconfig | 7 ++ @@ -109658,10 +109658,10 @@ index 0000000000000000000000000000000000000000..225854b8e5298b3c3018f59a49404354 +MODULE_DESCRIPTION("ASoC Driver for Google voiceHAT SoundCard"); +MODULE_LICENSE("GPL v2"); -From 1a2b2da4d3faca040e2538110ab09ca933a02b34 Mon Sep 17 00:00:00 2001 +From acee6c0272988ea5b9c4d3886ab951d82da0d4a5 Mon Sep 17 00:00:00 2001 From: sandeepal Date: Fri, 2 Jun 2017 18:59:46 +0530 -Subject: [PATCH 087/175] Allo Digione Driver (#2048) +Subject: [PATCH 087/201] Allo Digione Driver (#2048) Driver for the Allo Digione soundcard @@ -109984,10 +109984,10 @@ index 0000000000000000000000000000000000000000..9387b055875fdf92a13dc4a9d2727f95 +MODULE_DESCRIPTION("ASoC Driver for Allo DigiOne"); +MODULE_LICENSE("GPL v2"); -From 76e968fad4a3628ead25098893fdecaf39072fe5 Mon Sep 17 00:00:00 2001 +From 5dd049eb26f293f80cd10cfcd8221f5eaef2f1cf Mon Sep 17 00:00:00 2001 From: P33M Date: Wed, 21 Oct 2015 14:55:21 +0100 -Subject: [PATCH 088/175] rpi_display: add backlight driver and overlay +Subject: [PATCH 088/201] rpi_display: add backlight driver and overlay Add a mailbox-driven backlight controller for the Raspberry Pi DSI touchscreen display. Requires updated GPU firmware to recognise the @@ -110156,10 +110156,10 @@ index 0000000000000000000000000000000000000000..14a0d9b037395497c1fdae2961feccd5 +MODULE_DESCRIPTION("Raspberry Pi mailbox based Backlight Driver"); +MODULE_LICENSE("GPL"); -From 53b4c68dadcd7407d4a9b69eb36568611cca828d Mon Sep 17 00:00:00 2001 +From 57f8491f1dc5698da9a8eaedca787e1492d859ab Mon Sep 17 00:00:00 2001 From: popcornmix Date: Tue, 23 Feb 2016 19:56:04 +0000 -Subject: [PATCH 089/175] bcm2835-virtgpio: Virtual GPIO driver +Subject: [PATCH 089/201] bcm2835-virtgpio: Virtual GPIO driver Add a virtual GPIO driver that uses the firmware mailbox interface to request that the VPU toggles LEDs. @@ -110420,10 +110420,10 @@ index 0000000000000000000000000000000000000000..c3725546def9d4a6264fbb1f6b9814d0 +MODULE_DESCRIPTION("brcmvirt GPIO driver"); +MODULE_ALIAS("platform:brcmvirt-gpio"); -From c2b50acd078943b651fa42daff671e3a8aeca5ff Mon Sep 17 00:00:00 2001 +From 32eabba2b09847f1781f0a7ed0b86e3e958b4fe2 Mon Sep 17 00:00:00 2001 From: Dave Stevenson Date: Mon, 20 Feb 2017 17:01:21 +0000 -Subject: [PATCH 090/175] bcm2835-gpio-exp: Driver for GPIO expander via +Subject: [PATCH 090/201] bcm2835-gpio-exp: Driver for GPIO expander via mailbox service Pi3 and Compute Module 3 have a GPIO expander that the @@ -110732,10 +110732,10 @@ index 0000000000000000000000000000000000000000..d68adafaee4ad406f45f4ff0d6b7c1ad +MODULE_DESCRIPTION("brcm-exp GPIO driver"); +MODULE_ALIAS("platform:brcmexp-gpio"); -From f77f85550c1aaad2012efdfb24e4329f5ba41c1c Mon Sep 17 00:00:00 2001 +From 7bddac2fb5e08383a4ca4d290a0d39d0fc2c2622 Mon Sep 17 00:00:00 2001 From: Phil Elwell Date: Tue, 23 Feb 2016 17:26:48 +0000 -Subject: [PATCH 091/175] amba_pl011: Don't use DT aliases for numbering +Subject: [PATCH 091/201] amba_pl011: Don't use DT aliases for numbering The pl011 driver looks for DT aliases of the form "serial", and if found uses as the device ID. This can cause @@ -110764,10 +110764,10 @@ index 111e6a95077978c2c30bfe2a2de4a0d095e8d76e..584471add0962c0e26eb814fc0ef43ee uap->old_cr = 0; uap->port.dev = dev; -From f454045ae730931aa42e2c97df43d1e512586cf7 Mon Sep 17 00:00:00 2001 +From 83aaa369ae050bf58fa63fbeb1df51cfd234fe43 Mon Sep 17 00:00:00 2001 From: Phil Elwell Date: Wed, 1 Mar 2017 16:07:39 +0000 -Subject: [PATCH 092/175] amba_pl011: Round input clock up +Subject: [PATCH 092/201] amba_pl011: Round input clock up The UART clock is initialised to be as close to the requested frequency as possible without exceeding it. Now that there is a @@ -110853,10 +110853,10 @@ index 584471add0962c0e26eb814fc0ef43eea99b2d29..bfbc845d7be9ef804468d0a82da18d9b /* unregisters the driver also if no more ports are left */ static void pl011_unregister_port(struct uart_amba_port *uap) -From f85a5a55cbbfc37f9ed3373887e64b6e1fbc779c Mon Sep 17 00:00:00 2001 +From 765600d5387d1864fd9c0fdd52fa982503a547ca Mon Sep 17 00:00:00 2001 From: Pantelis Antoniou Date: Wed, 3 Dec 2014 13:23:28 +0200 -Subject: [PATCH 093/175] OF: DT-Overlay configfs interface +Subject: [PATCH 093/201] OF: DT-Overlay configfs interface This is a port of Pantelis Antoniou's v3 port that makes use of the new upstreamed configfs support for binary attributes. @@ -111289,10 +111289,10 @@ index 0000000000000000000000000000000000000000..0037e6868a6cda8706c88194c6a4454b +} +late_initcall(of_cfs_init); -From 074ee07a08a0e490c3cc213dc50b93549c6e513f Mon Sep 17 00:00:00 2001 +From 1f21e752ab29bcfe93c0ab8a4ecd284bc48dbff6 Mon Sep 17 00:00:00 2001 From: Cheong2K Date: Fri, 26 Feb 2016 18:20:10 +0800 -Subject: [PATCH 094/175] brcm: adds support for BCM43341 wifi +Subject: [PATCH 094/201] brcm: adds support for BCM43341 wifi brcmfmac: Disable power management @@ -111424,10 +111424,10 @@ index b3fa8ae804650f7ea838ff59ca84dfb6ca24da90..c1e86df297edf2fa7f641e36ccbfc733 BRCMF_FW_NVRAM_ENTRY(BRCM_CC_43362_CHIP_ID, 0xFFFFFFFE, 43362), BRCMF_FW_NVRAM_ENTRY(BRCM_CC_4339_CHIP_ID, 0xFFFFFFFF, 4339), -From f2d9cc4f425ada59b788898185a087603f7197ca Mon Sep 17 00:00:00 2001 +From 80d869dc18127aef8b73d817d8af4aa70c02b92d Mon Sep 17 00:00:00 2001 From: Phil Elwell Date: Fri, 17 Feb 2017 15:26:13 +0000 -Subject: [PATCH 095/175] brcmfmac: Mute expected startup 'errors' +Subject: [PATCH 095/201] brcmfmac: Mute expected startup 'errors' The brcmfmac WiFi driver always complains about the '00' country code. Modify the driver to ignore '00' silently. @@ -111451,10 +111451,10 @@ index 2d3b5e2a3ef7cd6186487b48665b401249380d18..e417454f5d6ec136cda29e65af5449f2 req->alpha2[0], req->alpha2[1]); return; -From 9209035daa9d48c13559b9d63c5706143e7bd687 Mon Sep 17 00:00:00 2001 +From bb160a8a88809cbcf1e12760480f05fbd983bb0b Mon Sep 17 00:00:00 2001 From: Phil Elwell Date: Thu, 17 Dec 2015 13:37:07 +0000 -Subject: [PATCH 096/175] hci_h5: Don't send conf_req when ACTIVE +Subject: [PATCH 096/201] hci_h5: Don't send conf_req when ACTIVE Without this patch, a modem and kernel can continuously bombard each other with conf_req and conf_rsp messages, in a demented game of tag. @@ -111477,10 +111477,10 @@ index c0e4e26dc30d7c3c6a771b7b86df88c8cf763646..7308287259eedcaf229f8a496a0e3826 if (H5_HDR_LEN(hdr) > 2) h5->tx_win = (data[2] & 0x07); -From 4837e5b9abac8661b043460d764d4f4a300e3301 Mon Sep 17 00:00:00 2001 +From 87b2ac98e2b817f2e3177981c0904b3f5971192a Mon Sep 17 00:00:00 2001 From: popcornmix Date: Mon, 13 Apr 2015 17:16:29 +0100 -Subject: [PATCH 097/175] config: Add default configs +Subject: [PATCH 097/201] config: Add default configs --- arch/arm/configs/bcm2709_defconfig | 1339 +++++++++++++++++++++++++++++++++++ @@ -114185,10 +114185,10 @@ index 0000000000000000000000000000000000000000..c1da808d40bc8e867b41d3566bd60a75 +CONFIG_CRC_ITU_T=y +CONFIG_LIBCRC32C=y -From 8a6f6d8110d6319b3a579d571d1cfdafac2b303a Mon Sep 17 00:00:00 2001 +From fb372e7424fe03700ef6252bdbe08a6efa2213c5 Mon Sep 17 00:00:00 2001 From: Michael Zoran Date: Wed, 24 Aug 2016 03:35:56 -0700 -Subject: [PATCH 098/175] Add arm64 configuration and device tree differences. +Subject: [PATCH 098/201] Add arm64 configuration and device tree differences. Disable MMC_BCM2835_SDHOST and MMC_BCM2835 since these drivers are crashing at the moment. @@ -115602,10 +115602,10 @@ index 0000000000000000000000000000000000000000..e6b09fafa27eed2b762e3d53b55041f7 +CONFIG_LIBCRC32C=y +CONFIG_BCM2835_VCHIQ=n -From 26adb7000e033bb34f717cecce125eac85ffdc42 Mon Sep 17 00:00:00 2001 +From 40a01ca28d17e8a8c0a931072f9997364d0d8dba Mon Sep 17 00:00:00 2001 From: Electron752 Date: Thu, 12 Jan 2017 07:07:08 -0800 -Subject: [PATCH 099/175] ARM64: Make it work again on 4.9 (#1790) +Subject: [PATCH 099/201] ARM64: Make it work again on 4.9 (#1790) * Invoke the dtc compiler with the same options used in arm mode. * ARM64 now uses the bcm2835 platform just like ARM32. @@ -116016,10 +116016,10 @@ index e6b09fafa27eed2b762e3d53b55041f793683d27..c7e891d72969a388d9b135a36dbfc9c9 CONFIG_LIBCRC32C=y -CONFIG_BCM2835_VCHIQ=n -From deb89098dcd643c130bdbbc0ec844e88f58f1dfe Mon Sep 17 00:00:00 2001 +From a064a768337f38644bea1b0a8e0947a10816cad7 Mon Sep 17 00:00:00 2001 From: Michael Zoran Date: Thu, 12 Jan 2017 19:10:07 -0800 -Subject: [PATCH 100/175] ARM64: Enable HDMI audio and vc04_services in +Subject: [PATCH 100/201] ARM64: Enable HDMI audio and vc04_services in bcmrpi3_defconfig Signed-off-by: Michael Zoran @@ -116048,10 +116048,10 @@ index c7e891d72969a388d9b135a36dbfc9c9cb609bf8..4b90f9b64abe9f089ba56b13d5a00de3 CONFIG_BCM2835_MBOX=y # CONFIG_IOMMU_SUPPORT is not set -From cf75bbd18192eb5bfe093eaa59ac16516b0cfe79 Mon Sep 17 00:00:00 2001 +From 27b4b6484d40985addac88b98b9c27b8a83cc5be Mon Sep 17 00:00:00 2001 From: Michael Zoran Date: Thu, 12 Jan 2017 19:14:03 -0800 -Subject: [PATCH 101/175] ARM64: Run bcmrpi3_defconfig through savedefconfig. +Subject: [PATCH 101/201] ARM64: Run bcmrpi3_defconfig through savedefconfig. Signed-off-by: Michael Zoran --- @@ -116096,10 +116096,10 @@ index 4b90f9b64abe9f089ba56b13d5a00de33343bfb9..dac962ca1634662ce7d966f1ffb53b5b CONFIG_FB_TFT_AGM1264K_FL=m CONFIG_FB_TFT_BD663474=m -From 2f5d41ff0f82ddeb0b3613227a26ead9bf36cc07 Mon Sep 17 00:00:00 2001 +From 82d703e843a501bc16d57835ec8e01bd4c012750 Mon Sep 17 00:00:00 2001 From: Electron752 Date: Sat, 14 Jan 2017 02:54:26 -0800 -Subject: [PATCH 102/175] ARM64: Enable Kernel Address Space Randomization +Subject: [PATCH 102/201] ARM64: Enable Kernel Address Space Randomization (#1792) Randomization allows the mapping between virtual addresses and physical @@ -116131,10 +116131,10 @@ index dac962ca1634662ce7d966f1ffb53b5bfa27c506..aae33b4b3c3e736ea7cd3ca242158ad6 CONFIG_BINFMT_MISC=y CONFIG_COMPAT=y -From 7b7a203234ec8d8d7d933bf15eafe319973f5c51 Mon Sep 17 00:00:00 2001 +From 779d30101ea76a4e982933ef6f0012938ba26eec Mon Sep 17 00:00:00 2001 From: Michael Zoran Date: Sun, 15 Jan 2017 07:31:59 -0800 -Subject: [PATCH 103/175] ARM64: Enable RTL8187/RTL8192CU wifi in build config +Subject: [PATCH 103/201] ARM64: Enable RTL8187/RTL8192CU wifi in build config These drivers build now, so they can be enabled back in the build configuration just like they are for @@ -116159,10 +116159,10 @@ index aae33b4b3c3e736ea7cd3ca242158ad6ba558aff..b7d762df19b85e369a32cd823dfd0621 CONFIG_ZD1211RW=m CONFIG_MAC80211_HWSIM=m -From fb4336857c4214506d91ce006ab8359caa08a33d Mon Sep 17 00:00:00 2001 +From 2053933ca50d38e8a8274d5e1e1d3c5dd539717a Mon Sep 17 00:00:00 2001 From: Michael Zoran Date: Sat, 14 Jan 2017 21:33:51 -0800 -Subject: [PATCH 104/175] ARM64/DWC_OTG: Port dwc_otg driver to ARM64 +Subject: [PATCH 104/201] ARM64/DWC_OTG: Port dwc_otg driver to ARM64 In ARM64, the FIQ mechanism used by this driver is not current implemented. As a workaround, reqular IRQ is used instead @@ -116505,10 +116505,10 @@ index 6b2c7d0c93f36a63863ff4b0ecc1f3eab77e058b..d7b700ff17821ad1944e36721fe6b2db /** The OS page size */ #define DWC_OS_PAGE_SIZE PAGE_SIZE -From 18e7a66f1ff8094c55c7ab9c9cceecf90b29f3fd Mon Sep 17 00:00:00 2001 +From 58d0226d71b7b474d0e80bf6b29520831ca09011 Mon Sep 17 00:00:00 2001 From: Michael Zoran Date: Sat, 14 Jan 2017 21:43:57 -0800 -Subject: [PATCH 105/175] ARM64: Round-Robin dispatch IRQs between CPUs. +Subject: [PATCH 105/201] ARM64: Round-Robin dispatch IRQs between CPUs. IRQ-CPU mapping is round robined on ARM64 to increase concurrency and allow multiple interrupts to be serviced @@ -116582,10 +116582,10 @@ index 86b357ae027bf8ba1ac32cd150a8cf21e36597e2..05b17ca993f405c4c8e61a782ec58149 .name = "bcm2836-gpu", .irq_mask = bcm2836_arm_irqchip_mask_gpu_irq, -From 9cc9a518b2c6d67dd89a8b401e36d6cadf745ae1 Mon Sep 17 00:00:00 2001 +From 18aa1ee4fddad6538a390cce55fcddf5f476450b Mon Sep 17 00:00:00 2001 From: Michael Zoran Date: Sat, 14 Jan 2017 21:45:03 -0800 -Subject: [PATCH 106/175] ARM64: Enable DWC_OTG Driver In ARM64 Build +Subject: [PATCH 106/201] ARM64: Enable DWC_OTG Driver In ARM64 Build Config(bcmrpi3_defconfig) Signed-off-by: Michael Zoran @@ -116606,10 +116606,10 @@ index b7d762df19b85e369a32cd823dfd062145bdefa7..4d85c231c5ea0244e1b05fb4a5e3c8fd CONFIG_USB_STORAGE=y CONFIG_USB_STORAGE_REALTEK=m -From d135ebd7803ea47894ad4d8d45353a27caccc319 Mon Sep 17 00:00:00 2001 +From 1dac622c1459cf531e02e4862d2edc7041bf7f7d Mon Sep 17 00:00:00 2001 From: Michael Zoran Date: Sat, 11 Feb 2017 01:18:31 -0800 -Subject: [PATCH 107/175] ARM64: Force hardware emulation of deprecated +Subject: [PATCH 107/201] ARM64: Force hardware emulation of deprecated instructions. --- @@ -116637,10 +116637,10 @@ index d06fbe4cd38d7423c900aff64b0e728f995478d3..877b7c90f9555203d5d55d739359a256 case INSN_OBSOLETE: insn->current_mode = INSN_UNDEF; -From 5d8c25e208f2d916fc97a168db6c5517eee1bbaa Mon Sep 17 00:00:00 2001 +From 064e0d7f2de4aade1bc42e2dd5df416876797c36 Mon Sep 17 00:00:00 2001 From: Khem Raj Date: Fri, 10 Feb 2017 17:57:08 -0800 -Subject: [PATCH 108/175] build/arm64: Add rules for .dtbo files for dts +Subject: [PATCH 108/201] build/arm64: Add rules for .dtbo files for dts overlays We now create overlays as .dtbo files. @@ -116665,10 +116665,10 @@ index 7318165cfc90b5b4e36048fbafd9287a1cf3516f..f6f5df3f262b0baf1338bea188d78883 dtbs: prepare scripts -From fa99adbafcdb5e8a0191bd6f800071838415a265 Mon Sep 17 00:00:00 2001 +From a355fc8c95ab5c87537f0d2cc9187e4a73f8610f Mon Sep 17 00:00:00 2001 From: Bilal Amarni Date: Wed, 24 May 2017 10:52:50 +0200 -Subject: [PATCH 109/175] enable drivers for GPIO expander and vcio +Subject: [PATCH 109/201] enable drivers for GPIO expander and vcio --- arch/arm64/configs/bcmrpi3_defconfig | 3 +++ @@ -116696,10 +116696,10 @@ index 4d85c231c5ea0244e1b05fb4a5e3c8fd3e651ddf..9dcb58a519d041fadae99c81a7bda621 CONFIG_GPIO_ARIZONA=m CONFIG_GPIO_STMPE=y -From 71fc554e1820401705664718ef6882c996fb97d1 Mon Sep 17 00:00:00 2001 +From 4d30c995c00ff35e79a9ab4a721ab1b507cb57c8 Mon Sep 17 00:00:00 2001 From: Phil Elwell Date: Thu, 23 Mar 2017 16:34:46 +0000 -Subject: [PATCH 110/175] bcm2835-aux: Add aux interrupt controller +Subject: [PATCH 110/201] bcm2835-aux: Add aux interrupt controller The AUX block has a shared interrupt line with a register indicating which devices have active IRQs. Expose this as a nested interrupt @@ -116863,10 +116863,10 @@ index bd750cf2238d61489811e7d7bd3b5f9950ed53c8..41e0702fae4692221980b0d02aed1ba6 BCM2835_AUX_CLOCK_COUNT, GFP_KERNEL); if (!onecell) -From 574f40ae0aa1364300180592835b9903df35e171 Mon Sep 17 00:00:00 2001 +From 3a238f69f13c69be212b13b54122eacb61eda3dd Mon Sep 17 00:00:00 2001 From: Yasunari Takiguchi Date: Fri, 14 Apr 2017 10:43:57 +0100 -Subject: [PATCH 111/175] This is the driver for Sony CXD2880 DVB-T2/T tuner + +Subject: [PATCH 111/201] This is the driver for Sony CXD2880 DVB-T2/T tuner + demodulator. It includes the CXD2880 driver and the CXD2880 SPI adapter. The current CXD2880 driver version is 1.4.1 - 1.0.1 released on April 13, 2017. @@ -132998,10 +132998,10 @@ index 0000000000000000000000000000000000000000..82e122349055be817eb74ed5bbcd7560 +MODULE_AUTHOR("Sony Semiconductor Solutions Corporation"); +MODULE_LICENSE("GPL v2"); -From 347ba06758e032d3eaa99121b5d7ce0b2034696c Mon Sep 17 00:00:00 2001 +From 4d555d47a7be37bb1e0dbf5669d515853157fa3d Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Wed, 14 Sep 2016 09:16:19 +0100 -Subject: [PATCH 112/175] raspberrypi-firmware: Export the general transaction +Subject: [PATCH 112/201] raspberrypi-firmware: Export the general transaction function. The vc4-firmware-kms module is going to be doing the MBOX FB call. @@ -133033,10 +133033,10 @@ index 3f070bd38a91511c986e3fb114b15bd4ac32634c..f261b64d1657c02290904d841e1f087c /** * rpi_firmware_property_list - Submit firmware property list -From 3e1d25beacaa95a78d3f1231fb621d34ebe16271 Mon Sep 17 00:00:00 2001 +From f06a63c1d072ef13e13b9ead3c388e97121c7a95 Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Wed, 14 Sep 2016 08:39:33 +0100 -Subject: [PATCH 113/175] drm/vc4: Add a mode for using the closed firmware for +Subject: [PATCH 113/201] drm/vc4: Add a mode for using the closed firmware for display. Signed-off-by: Eric Anholt @@ -133807,10 +133807,10 @@ index 0000000000000000000000000000000000000000..78c34305935501248b1ca548a1ee0175 + }, +}; -From 7cdf17ed7da977b06399ecb2d1c663d190d260bc Mon Sep 17 00:00:00 2001 +From ac9ee694a00ccda27bec826f211901dca9bab73f Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Wed, 1 Feb 2017 17:09:18 -0800 -Subject: [PATCH 114/175] drm/vc4: Name the primary and cursor planes in fkms. +Subject: [PATCH 114/201] drm/vc4: Name the primary and cursor planes in fkms. This makes debugging nicer, compared to trying to remember what the IDs are. @@ -133834,10 +133834,10 @@ index 78c34305935501248b1ca548a1ee01753b8fa099..d9a5551d01a2155e3df1bbbd78a1ee2b if (type == DRM_PLANE_TYPE_PRIMARY) { vc4_plane->fbinfo = -From 262a9a5a6941acd353bbd1066399eb8b456c9ed1 Mon Sep 17 00:00:00 2001 +From 1e85c926b2b8cb35c9f322b07465dca4a11fe1ce Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Wed, 1 Feb 2017 17:10:09 -0800 -Subject: [PATCH 115/175] drm/vc4: Add DRM_DEBUG_ATOMIC for the insides of +Subject: [PATCH 115/201] drm/vc4: Add DRM_DEBUG_ATOMIC for the insides of fkms. Trying to debug weston on fkms involved figuring out what calls I was @@ -133907,10 +133907,10 @@ index d9a5551d01a2155e3df1bbbd78a1ee2b961be946..e372666af0119b1876bad5167e6d0ff8 RPI_FIRMWARE_SET_CURSOR_STATE, &packet_state, -From b32cebad4ea18c91fb7f1411b0d6d9ff0a749ffb Mon Sep 17 00:00:00 2001 +From 5de11ee749f69e722b31e0e52dfa29a7f9f70abd Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Thu, 2 Feb 2017 09:42:18 -0800 -Subject: [PATCH 116/175] drm/vc4: Fix sending of page flip completion events +Subject: [PATCH 116/201] drm/vc4: Fix sending of page flip completion events in FKMS mode. In the rewrite of vc4_crtc.c for fkms, I dropped the part of the @@ -133952,10 +133952,10 @@ index e372666af0119b1876bad5167e6d0ff8945d1b80..4d7b7f218cbbc9e7abcaa37743978060 static void vc4_crtc_handle_page_flip(struct vc4_crtc *vc4_crtc) -From 44a6e03021581f2584d60dabf58208d0f3fbf25b Mon Sep 17 00:00:00 2001 +From 84415afa888f814f918ca74ea98063fb98f700a2 Mon Sep 17 00:00:00 2001 From: popcornmix Date: Tue, 18 Apr 2017 21:43:46 +0100 -Subject: [PATCH 117/175] vc4_fkms: Apply firmware overscan offset to hardware +Subject: [PATCH 117/201] vc4_fkms: Apply firmware overscan offset to hardware cursor --- @@ -134012,10 +134012,10 @@ index 4d7b7f218cbbc9e7abcaa37743978060b73fbdd1..d170775ccc985637ff018804f510a500 return 0; -From 0a6a09817f80b9a26c29ed557fb6719cbcacdc8e Mon Sep 17 00:00:00 2001 +From 29ea5d7340d272815a5f24681b7b70f8c67d7637 Mon Sep 17 00:00:00 2001 From: Matthias Reichl Date: Sun, 7 May 2017 11:34:26 +0200 -Subject: [PATCH 118/175] ASoC: bcm2835: Add support for TDM modes +Subject: [PATCH 118/201] ASoC: bcm2835: Add support for TDM modes bcm2835 supports arbitrary positioning of channel data within a frame and thus is capable of supporting TDM modes. Since @@ -134417,10 +134417,10 @@ index 56df7d8a43d0aac055a91b0d24aca8e1b4e308e4..dcacf7f83c9371df539a788ea33fedcf dev->dev = &pdev->dev; dev_set_drvdata(&pdev->dev, dev); -From c9fa449349e88035c32b088bcf8c1a69ee5a4542 Mon Sep 17 00:00:00 2001 +From b15e6fe5b00b9094cf747e5366318b26e3a6b9e3 Mon Sep 17 00:00:00 2001 From: Matthias Reichl Date: Sun, 7 May 2017 15:30:50 +0200 -Subject: [PATCH 119/175] ASoC: bcm2835: Support left/right justified and DSP +Subject: [PATCH 119/201] ASoC: bcm2835: Support left/right justified and DSP modes DSP modes and left/right justified modes can be supported @@ -134666,10 +134666,10 @@ index dcacf7f83c9371df539a788ea33fedcf97d64690..3a706fda4f39e42efbe12f19d87af9b1 } -From 332098d2c12b4c7327f8682b0a02d82582aa17f1 Mon Sep 17 00:00:00 2001 +From 79ca2adff8412b9ece850bcb10e312536672f3a1 Mon Sep 17 00:00:00 2001 From: Matthias Reichl Date: Sun, 7 May 2017 16:19:54 +0200 -Subject: [PATCH 120/175] ASoC: bcm2835: Support additional samplerates up to +Subject: [PATCH 120/201] ASoC: bcm2835: Support additional samplerates up to 384kHz Sample rates are only restricted by the capabilities of the @@ -134712,10 +134712,10 @@ index 3a706fda4f39e42efbe12f19d87af9b100a348a5..43f5715a0d5dda851731ecf7ff27e76c | SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S32_LE -From 49088d551c17088c00626cbf40824fedb2dafe2e Mon Sep 17 00:00:00 2001 +From d7ffa37856e4058803d9c2e9987782b93654c1c4 Mon Sep 17 00:00:00 2001 From: Matthias Reichl Date: Sun, 7 May 2017 16:24:57 +0200 -Subject: [PATCH 121/175] ASoC: bcm2835: Enforce full symmetry +Subject: [PATCH 121/201] ASoC: bcm2835: Enforce full symmetry bcm2835's configuration registers can't be changed when a stream is running, which means asymmetric configurations aren't supported. @@ -134751,10 +134751,10 @@ index 43f5715a0d5dda851731ecf7ff27e76c48fb6e57..2e449d7173fcecbcd647f90a26bd58b6 static bool bcm2835_i2s_volatile_reg(struct device *dev, unsigned int reg) -From 16d08e4bd003b098b8e7ed3523d9702ad64635b8 Mon Sep 17 00:00:00 2001 +From df47ba69cd31dfce715c53e70191f46345874dc9 Mon Sep 17 00:00:00 2001 From: Andrei Gherzan Date: Mon, 5 Jun 2017 16:40:38 +0100 -Subject: [PATCH 122/175] dma-bcm2708: Fix module compilation of +Subject: [PATCH 122/201] dma-bcm2708: Fix module compilation of CONFIG_DMA_BCM2708 bcm2708-dmaengine.c defines functions like bcm_dma_start which are @@ -134797,10 +134797,10 @@ index c5bfff2765be4606077e6c8af73040ec13ee8974..6ca874d332a8bc666b1c9576ac51f479 #endif /* _PLAT_BCM2708_DMA_H */ -From 2af517689bb046b56ac287414ff841ea8b8aa034 Mon Sep 17 00:00:00 2001 +From f9bf10ac70d1a44db0bb1ea8a63ba3fe807c09a4 Mon Sep 17 00:00:00 2001 From: popcornmix Date: Fri, 25 Aug 2017 19:18:13 +0100 -Subject: [PATCH 123/175] cache: export clean and invalidate +Subject: [PATCH 123/201] cache: export clean and invalidate --- arch/arm/mm/cache-v6.S | 4 ++-- @@ -134852,10 +134852,10 @@ index de78109d002db1a5e7c94a6c1bc8bb94161d07b8..4c850aa3af2b2439fced4e130441329a sub r3, r2, #1 bic r0, r0, r3 -From 5df12ff93c211a5c10642ad4259101277e2b951f Mon Sep 17 00:00:00 2001 +From 14e9ed95082a4b33d763f5aba63aaa90b8328e2b Mon Sep 17 00:00:00 2001 From: Phil Elwell Date: Fri, 29 Sep 2017 10:32:19 +0100 -Subject: [PATCH 124/175] amba_pl011: Insert mb() for correct FIFO handling +Subject: [PATCH 124/201] amba_pl011: Insert mb() for correct FIFO handling The pl011 register accessor functions use the _relaxed versions of the standard readl() and writel() functions, meaning that there are no @@ -134882,10 +134882,10 @@ index bfbc845d7be9ef804468d0a82da18d9b67857216..424bdc500864a86e5d431763ba416b52 return true; -From c20e67d1a53eabb6310d9bb5d3fa17f0a6dfc618 Mon Sep 17 00:00:00 2001 +From 63e79edcb34d67fb406964c288f1f1eb71163853 Mon Sep 17 00:00:00 2001 From: Chung-Hsien Hsu Date: Sun, 14 May 2017 20:11:05 -0500 -Subject: [PATCH 125/175] brcmfmac: add CLM download support +Subject: [PATCH 125/201] brcmfmac: add CLM download support Future firmwares will be provided with minimal built-in CLM - the NULL region (#n/0) becomes the initial country. It cannot be changed @@ -135313,10 +135313,10 @@ index 11ffaa01599eb4b343b7f675dc275fc8572d127e..b27170c12482de0ca4115b4bc9484c21 static int brcmf_usb_bus_setup(struct brcmf_usbdev_info *devinfo) -From 41c5e7c7b86ce53ffe7d55a3b7375ed72cf03d35 Mon Sep 17 00:00:00 2001 +From c08aa9459c59ff139ab358c7a60de482ce5ff7d8 Mon Sep 17 00:00:00 2001 From: Phil Elwell Date: Fri, 6 Oct 2017 13:23:32 +0100 -Subject: [PATCH 126/175] brcmfmac: request_firmware_direct is quieter +Subject: [PATCH 126/201] brcmfmac: request_firmware_direct is quieter Since we don't have any CLM-capable firmware yet, silence the warning of its absence by using request_firmware_direct, which should also @@ -135341,10 +135341,10 @@ index f0309e039592ba6e388084a13f052c03f99cf1ef..b5889360da96096775db6425337a7215 if (err == -ENOENT) return 0; -From bbfe28334b1f87c0147de5357013829e80ff528d Mon Sep 17 00:00:00 2001 +From a21640def9db02b0914bf81fe8a4c64480dc5f1c Mon Sep 17 00:00:00 2001 From: Phil Elwell Date: Fri, 29 Sep 2017 10:32:19 +0100 -Subject: [PATCH 127/175] amba_pl011: Add cts-event-workaround DT property +Subject: [PATCH 127/201] amba_pl011: Add cts-event-workaround DT property The BCM2835 PL011 implementation seems to have a bug that can lead to a transmission lockup if CTS changes frequently. A workaround was added to @@ -135393,10 +135393,10 @@ index 424bdc500864a86e5d431763ba416b5298c777dc..b224306633f62c398ef904734a903d4e uap->vendor = vendor; uap->fifosize = vendor->get_fifosize(dev); -From 78d2e9b8f6555dce754883489b8388f547d1c5ea Mon Sep 17 00:00:00 2001 +From b636216f39ae4d8f4c5c310f5058ec2283ee3955 Mon Sep 17 00:00:00 2001 From: Phil Elwell Date: Wed, 11 Oct 2017 13:48:04 +0100 -Subject: [PATCH 128/175] amba-pl011: Report AUTOCTS capability to framework +Subject: [PATCH 128/201] amba-pl011: Report AUTOCTS capability to framework The PL011 has full hardware RTS/CTS support which is enabled by the driver when flow control is requested. However, it doesn't @@ -135439,10 +135439,10 @@ index b224306633f62c398ef904734a903d4e75df65c3..3b743cf8a94c279ff8d0b747f98062d0 if (uap->vendor->oversampling) { -From 00828bc03a7d34fa17f7b2bce51d033927b5daa5 Mon Sep 17 00:00:00 2001 +From dfaa9137abedd793201a9caedd7d273dc20e154c Mon Sep 17 00:00:00 2001 From: Phil Elwell Date: Wed, 25 Oct 2017 09:20:56 +0100 -Subject: [PATCH 129/175] scripts: Update mkknlimg, just in case +Subject: [PATCH 129/201] scripts: Update mkknlimg, just in case With the removal of the vc_cma driver, mkknlimg lost an indication that the user had built a downstream kernel. Update the script, adding a few @@ -135485,10 +135485,10 @@ index 84be2593ec1de8f97b0167ff06b3e05d231c4ba0..d72e15224232d5164374e93be48949bf my $res = try_extract($kernel_file, $tmpfile1); -From 58a67efc17b88d116b930febc5c9567d7498164a Mon Sep 17 00:00:00 2001 +From a17d314e09f1eeff1d0ac803b5469c307f63e9ca Mon Sep 17 00:00:00 2001 From: James Hughes Date: Tue, 14 Nov 2017 15:13:15 +0000 -Subject: [PATCH 130/175] AXI performance monitor driver (#2222) +Subject: [PATCH 130/201] AXI performance monitor driver (#2222) Uses the debugfs I/F to provide access to the AXI bus performance monitors. @@ -136174,10 +136174,10 @@ index 0000000000000000000000000000000000000000..bafe03b6c000060e78404d65a0aa96d8 +MODULE_LICENSE("GPL"); + -From 20f02066ed613ea130913fe33925952bc59e9dd6 Mon Sep 17 00:00:00 2001 +From be4310b6541e57ae2377e20468401a6f35035560 Mon Sep 17 00:00:00 2001 From: James Hughes Date: Fri, 21 Jul 2017 09:55:12 +0100 -Subject: [PATCH 131/175] Sets the BCDC priority to constant 0 +Subject: [PATCH 131/201] Sets the BCDC priority to constant 0 This is to workaround for a possible issue in the wireless chip firmware where some packets with @@ -136203,10 +136203,10 @@ index 9f2d0b0cf6e5c452ad85a3caef58cf16a8cdad46..b009f3083490c2bc2733424f08f81b9f h->data_offset = offset; BCDC_SET_IF_IDX(h, ifidx); -From 36e2f978f46aad02b073f623689fff8fd0d145be Mon Sep 17 00:00:00 2001 +From 7be728d7550cb9632cc0e44680e8009cbc540214 Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Tue, 26 Apr 2016 13:46:13 -0700 -Subject: [PATCH 132/175] drm/panel: Add support for the Raspberry Pi 7" +Subject: [PATCH 132/201] drm/panel: Add support for the Raspberry Pi 7" Touchscreen. This driver communicates with the Atmel microcontroller for sequencing @@ -136787,10 +136787,10 @@ index 0000000000000000000000000000000000000000..1a536fe4d040f5fafe324baee110a622 +MODULE_DESCRIPTION("Raspberry Pi 7-inch touchscreen driver"); +MODULE_LICENSE("GPL v2"); -From ff80f0caeb6e761dda305c3c7c6c345f445a6266 Mon Sep 17 00:00:00 2001 +From 4cf15c95ccae8990c915adc0f7b35e8808ff7284 Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Wed, 12 Apr 2017 17:52:56 -0700 -Subject: [PATCH 133/175] panel-raspberrypi-touchscreen: Fix NULL deref if +Subject: [PATCH 133/201] panel-raspberrypi-touchscreen: Fix NULL deref if probe order goes wrong. If the i2c driver hadn't pobed before the panel driver probes, then @@ -136817,10 +136817,10 @@ index 1a536fe4d040f5fafe324baee110a6225dd0be08..5d6bfd81b07a11a0cb407f4301d22931 } -From e9c9c22965537cabc09b8684b5db1dee8c3ecf2d Mon Sep 17 00:00:00 2001 +From 4f9f1e26ba498259410e7c69a47ce73f74881505 Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Mon, 6 Mar 2017 12:17:16 -0800 -Subject: [PATCH 134/175] panel-raspberrypi-touchscreen: Round up clk rate to +Subject: [PATCH 134/201] panel-raspberrypi-touchscreen: Round up clk rate to fix DSI panel. Commit 488f9bc8e3def93e0baef53cee2026c2cb0d8956 slightly increased the @@ -136855,10 +136855,10 @@ index 5d6bfd81b07a11a0cb407f4301d22931705fb8b1..b57b7ad9aa4c5048186e98553af59ec9 .hsync_start = HACT + HFP, .hsync_end = HACT + HFP + HSW, -From a36f6a9d8c0573dc968d7678e412cac612ac4dd1 Mon Sep 17 00:00:00 2001 +From 9cd5dce6a01a330a307a4e9c7a1914d8ec698386 Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Thu, 2 Jun 2016 12:29:45 -0700 -Subject: [PATCH 135/175] BCM270X: Add the DSI panel to the defconfig. +Subject: [PATCH 135/201] BCM270X: Add the DSI panel to the defconfig. Signed-off-by: Eric Anholt --- @@ -136879,10 +136879,10 @@ index 9dcb58a519d041fadae99c81a7bda621b2a49f12..003209bf2362c2a136ab987b2f20065e CONFIG_DRM_VC4=m CONFIG_FB=y -From 2b98630a52a502e3e950849f11ca39ce6394fc82 Mon Sep 17 00:00:00 2001 +From 6ef35341d1f82a0f8d2bc8558a02108cc0a8caba Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Thu, 6 Jul 2017 11:45:48 -0700 -Subject: [PATCH 136/175] drm/vc4: Add support for setting DPMS in firmwarekms. +Subject: [PATCH 136/201] drm/vc4: Add support for setting DPMS in firmwarekms. This ensures that the screen goes blank during DPMS (screensaver), including the cursor. Planes don't necessarily get disabled during @@ -136985,10 +136985,10 @@ index d170775ccc985637ff018804f510a5003933c9ec..766f700417f7194d6b01fa1bc18dad40 if (!vc4_encoder) return -ENOMEM; -From 0bcc863a8836e1bad2ef94cee3ce243cee02577a Mon Sep 17 00:00:00 2001 +From eadb4d326f8aa01fe252b17e9a413063bcda97ba Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Fri, 14 Jul 2017 17:33:08 -0700 -Subject: [PATCH 137/175] drm/vc4: Fix pitch setup for T-format scanout. +Subject: [PATCH 137/201] drm/vc4: Fix pitch setup for T-format scanout. The documentation said to use src_w here, and I didn't consider that we actually needed to be using pitch somewhere in our setup. Fixes @@ -137036,10 +137036,10 @@ index 2968b3ebb895714cb8c8faeaf40dff1c996f2259..4ad0b9fcae99f74fb89d09dd52d9ffe5 DRM_DEBUG_KMS("Unsupported FB tiling flag 0x%16llx", (long long)fb->modifier); -From 827a68ac66d4f474c30ce0ef7461bd3ba3292c60 Mon Sep 17 00:00:00 2001 +From 5564baaa1d51b5513d76762fe6b8bcca10536734 Mon Sep 17 00:00:00 2001 From: Phil Elwell Date: Thu, 24 Aug 2017 16:16:16 +0100 -Subject: [PATCH 138/175] brcmfmac: Disable ARP offloading when promiscuous +Subject: [PATCH 138/201] brcmfmac: Disable ARP offloading when promiscuous This is a test patch for brcmfmac from Franky Lin at Broadcom to disable ARP offloading when in promiscuous mode, re-enabling the ability to @@ -137176,10 +137176,10 @@ index a4dd313140f37dc1fbb6955e1148f48bccf22f44..b9a96cbc70f0865ee8c9cff3c6164144 bool is_p2pdev, const char *name, u8 *mac_addr); void brcmf_remove_interface(struct brcmf_if *ifp, bool rtnl_locked); -From 19cbd9db97fc746aeacb0fe98dafd6a946704649 Mon Sep 17 00:00:00 2001 +From c73189c392bfee92f88c7b3eeaf2e491f40079ca Mon Sep 17 00:00:00 2001 From: Kevin Cernekee Date: Sat, 16 Sep 2017 21:08:22 -0700 -Subject: [PATCH 139/175] brcmfmac: Avoid possible out-of-bounds read +Subject: [PATCH 139/201] brcmfmac: Avoid possible out-of-bounds read In brcmf_p2p_notify_rx_mgmt_p2p_probereq(), chanspec is assigned before the length of rxframe is validated. This could lead to uninitialized @@ -137217,10 +137217,10 @@ index 2ce675ab40ef867cf6a86ca5257a6db7ef76e80a..1c450c0727cb577f7dae25a1ce82b2db return 0; } -From 04a190b80c47ad610ef62de66079259548418334 Mon Sep 17 00:00:00 2001 +From 2668907312a5346ff64956342b37387091ae8edd Mon Sep 17 00:00:00 2001 From: Kevin Cernekee Date: Sat, 16 Sep 2017 21:08:23 -0700 -Subject: [PATCH 140/175] brcmfmac: Delete redundant length check +Subject: [PATCH 140/201] brcmfmac: Delete redundant length check brcmf_fweh_process_event() sets event->datalen to the endian-swapped value of event_packet->msg.datalen, which is the @@ -137251,10 +137251,10 @@ index ef72baf6dd969c2478a2138ea57b9f691fdf12d8..e7eaa57d11d98f61280bd99013e649aa /* special handling of interface event */ if (event->code == BRCMF_E_IF) { -From 7a4d0e3bf082eb9f8042425c2c722379222a61ec Mon Sep 17 00:00:00 2001 +From 36aaacc4ae6fe43427f75ffdef1d4cb9b321976b Mon Sep 17 00:00:00 2001 From: Phil Elwell Date: Tue, 14 Nov 2017 11:03:22 +0000 -Subject: [PATCH 141/175] mcp2515: Use DT-supplied interrupt flags +Subject: [PATCH 141/201] mcp2515: Use DT-supplied interrupt flags The MCP2515 datasheet clearly describes a level-triggered interrupt pin. Therefore the receiving interrupt controller must also be @@ -137290,10 +137290,10 @@ index f3f05fea8e1f8e0ad3a1ebd7461d2019835e1d47..6c2d3aba25918f5536b2d67292334e74 flags | IRQF_ONESHOT, DEVICE_NAME, priv); if (ret) { -From e5b244cc3f5db5238fcd59673e60c871930a7d62 Mon Sep 17 00:00:00 2001 +From 4cf038b0db7d1283a584c87be64e6eca1da38a09 Mon Sep 17 00:00:00 2001 From: James Hughes Date: Thu, 16 Nov 2017 15:56:17 +0000 -Subject: [PATCH 142/175] Tidy up of the ft5406 driver to use DT (#2189) +Subject: [PATCH 142/201] Tidy up of the ft5406 driver to use DT (#2189) Driver was using a fixed resolution, this commit adds touchscreen size, and coordinate flip and swap @@ -137677,10 +137677,10 @@ index 9d7d05482355d168c5c0c42508cd978979ee5f14..40bbde9ce1bc4c51be50f47fc359c74f } -From 967f0e45cc48a89b45eb19e719c512bef8964cfd Mon Sep 17 00:00:00 2001 +From 435f4e101e9650940ed7153fdd4285f029bf4c2b Mon Sep 17 00:00:00 2001 From: notro Date: Thu, 10 Jul 2014 13:59:47 +0200 -Subject: [PATCH 143/175] pinctrl-bcm2835: Set base to 0 give expected gpio +Subject: [PATCH 143/201] pinctrl-bcm2835: Set base to 0 give expected gpio numbering Signed-off-by: Noralf Tronnes @@ -137702,10 +137702,10 @@ index ff782445dfb75d1a8af9eed775b8e8f7b275fee3..786efcddb5e56a06baf67cb91ddbbd8e .can_sleep = false, }; -From 90f42cd656e3fc0cd13d8b99cf0a18033d87d6ef Mon Sep 17 00:00:00 2001 +From 0f89084221947259d549a80e5a46307336a14ef0 Mon Sep 17 00:00:00 2001 From: P33M Date: Fri, 24 Nov 2017 13:49:26 +0000 -Subject: [PATCH 144/175] fiq_fsm: rewind DMA pointer for OUT transactions that +Subject: [PATCH 144/201] fiq_fsm: rewind DMA pointer for OUT transactions that fail (#2288) See: https://github.com/raspberrypi/linux/issues/2140 @@ -137749,10 +137749,10 @@ index e47d5b6de3ada73896ff9a81abd223d345e0de4f..ec804c7cd06d2db897ce6f72fce29733 if (st->nr_errors >= 3) { st->fsm = FIQ_NP_SPLIT_HS_ABORTED; -From 41289b93c20500d54cfc2d7d1210721a1efbd17e Mon Sep 17 00:00:00 2001 +From 1bb24111305718fdec2a03d394816c80c6d8b746 Mon Sep 17 00:00:00 2001 From: Phil Elwell Date: Fri, 21 Jul 2017 11:30:18 +0100 -Subject: [PATCH 145/175] lan78xx: Read MAC address from DT if present +Subject: [PATCH 145/201] lan78xx: Read MAC address from DT if present There is a standard mechanism for locating and using a MAC address from the Device Tree. Use this facility in the lan78xx driver to support @@ -137799,10 +137799,10 @@ index 0161f77641fac8eafc1284a5457a7ccb273efc39..01e72b267de8f2a82fbe1ab4557dcaab (addr[2] << 16) | (addr[3] << 24); addr_hi = addr[4] | (addr[5] << 8); -From d2e95c632662738c67b0e9a07a04b7c2c8afbdd6 Mon Sep 17 00:00:00 2001 +From bae039615a254018c9ae0f19e89cf0cef2071cc0 Mon Sep 17 00:00:00 2001 From: Phil Elwell Date: Tue, 28 Nov 2017 12:02:37 +0000 -Subject: [PATCH 146/175] lan78xx: Correctly indicate invalid OTP +Subject: [PATCH 146/201] lan78xx: Correctly indicate invalid OTP lan78xx_read_otp tries to return -EINVAL in the event of invalid OTP content, but the value gets overwritten before it is returned and the @@ -137829,10 +137829,10 @@ index 01e72b267de8f2a82fbe1ab4557dcaab67532da9..126fe75e75b19c1076a7dd4415a90403 return ret; -From 918f70c990a79143746894712ec0b471c370fbf2 Mon Sep 17 00:00:00 2001 +From 39649e39f8d29446663857849ad658593fd88e39 Mon Sep 17 00:00:00 2001 From: Phil Elwell Date: Tue, 17 Oct 2017 15:04:29 +0100 -Subject: [PATCH 147/175] lan78xx: Enable LEDs and auto-negotiation +Subject: [PATCH 147/201] lan78xx: Enable LEDs and auto-negotiation For applications of the LAN78xx that don't have valid programmed EEPROMs or OTPs, enabling both LEDs and auto-negotiation by default @@ -137880,10 +137880,10 @@ index 126fe75e75b19c1076a7dd4415a904035ba95402..26e04c732df49d09939d470c61a9ab46 ret = lan78xx_read_reg(dev, MAC_TX, &buf); -From fe8440224cee2a9729ede0ed864985d2d37c1804 Mon Sep 17 00:00:00 2001 +From 6b6ce2e5700732f07bf9626ff2f5e1c49eb37a8d Mon Sep 17 00:00:00 2001 From: Phil Elwell Date: Mon, 27 Nov 2017 17:14:54 +0000 -Subject: [PATCH 148/175] cgroup: Disable cgroup "memory" by default +Subject: [PATCH 148/201] cgroup: Disable cgroup "memory" by default Some Raspberry Pis have limited RAM and most users won't use the cgroup memory support so it is disabled by default. Enable with: @@ -137953,10 +137953,10 @@ index 030e4286f14c715ecb87fc7d2cc93d451bc2e860..c9b7a0cd1e3026b5e8d91fa5d252ddd5 * css_tryget_online_from_dir - get corresponding css from a cgroup dentry * @dentry: directory dentry of interest -From 8bd0462ab0a6a401a4232778c733b79fa0cb47be Mon Sep 17 00:00:00 2001 +From 859b45291f9ebb645482ac81fbe7ab64cde7ae72 Mon Sep 17 00:00:00 2001 From: Allen Wild Date: Tue, 26 Sep 2017 19:37:44 +0200 -Subject: [PATCH 149/175] thermal: enable broadcom menu for arm64 bcm2835 +Subject: [PATCH 149/201] thermal: enable broadcom menu for arm64 bcm2835 Moving the bcm2835 thermal driver to the broadcom directory prevented it from getting enabled for arm64 builds, since the broadcom directory is only @@ -137987,10 +137987,10 @@ index 07002df4f83acdde2efdf3f51299976ef25d2e1e..e3f0d1fd1720355bc601e766356ac528 endmenu -From 1c79fc48b0630e54602b2d5560c2263d956dfd25 Mon Sep 17 00:00:00 2001 +From 845af8c622940f97ff8dc857600385667fa74344 Mon Sep 17 00:00:00 2001 From: Gottfried Haider Date: Tue, 26 Sep 2017 11:59:51 +0000 -Subject: [PATCH 150/175] pwm: Set class for exported channels in sysfs +Subject: [PATCH 150/201] pwm: Set class for exported channels in sysfs [ Upstream commit 7e5d1fd75c3dde9fc10c4472b9368089d1b81d00 ] @@ -138026,10 +138026,10 @@ index a813239300c3d46bba1320caac77ec7adc8363a8..83f2b0b15712bf5745a0dc3a231c5ed0 export->child.parent = parent; export->child.devt = MKDEV(0, 0); -From 2a1eec79538868b62eaf9e607556573915ec2c26 Mon Sep 17 00:00:00 2001 +From d176ddddb0387113e33b8125683061e142eb2024 Mon Sep 17 00:00:00 2001 From: Giedrius Trainavicius Date: Tue, 25 Oct 2016 01:47:20 +0300 -Subject: [PATCH 151/175] Updates for Pisound module code: +Subject: [PATCH 151/201] Updates for Pisound module code: * Merged 'Fix a warning in DEBUG builds' (1c8b82b). * Updating some strings and copyright information. @@ -138454,10 +138454,10 @@ index 06ff1e53dc9d860946965b6303577762f958fae2..09739d51b70b877e24e4f74f6aaadebd +MODULE_DESCRIPTION("ASoC Driver for Pisound, https://blokas.io/pisound"); MODULE_LICENSE("GPL v2"); -From e3f9f63d1c45361937edd68dd45cc80cb1e77602 Mon Sep 17 00:00:00 2001 +From 61c2d1de32361236a980f898ea21e0672180c4a5 Mon Sep 17 00:00:00 2001 From: Phil Elwell Date: Sat, 9 Dec 2017 21:45:12 +0000 -Subject: [PATCH 152/175] overlays: Add applepi-dac overlay +Subject: [PATCH 152/201] overlays: Add applepi-dac overlay See: https://github.com/raspberrypi/linux/issues/2302 @@ -138562,10 +138562,10 @@ index 0000000000000000000000000000000000000000..fc02b295470efce41d61be241ba55022 + dtc -@ -H epapr -O dtb -o ApplePi-DAC.dtbo -W no-unit_address_vs_reg ApplePi-DAC.dts +*/ -From b4051dde9302052f762ba740960fbe12d1ea3b25 Mon Sep 17 00:00:00 2001 +From 8bb0b788b913fcb8b1061edf1f7d4a9d8d969ff1 Mon Sep 17 00:00:00 2001 From: Phil Elwell Date: Tue, 12 Dec 2017 12:12:46 +0000 -Subject: [PATCH 153/175] staging: vchiq_arm: Make debugfs failure non-fatal +Subject: [PATCH 153/201] staging: vchiq_arm: Make debugfs failure non-fatal It can be useful to be able to open multiple vchiq instances in a single process. This currently fails due to a debugfs collision, @@ -138594,10 +138594,10 @@ index 314ffac50bb8303971ca71a5f702f07fb8ed6639..e4bad872b7e547de268648fae690524f sema_init(&instance->insert_event, 0); sema_init(&instance->remove_event, 0); -From 23e72998849647cecbbbde564a4672ce91176fb2 Mon Sep 17 00:00:00 2001 +From 46c104d48839d145474d03b4074488ff2589cc9b Mon Sep 17 00:00:00 2001 From: Phil Elwell Date: Sat, 23 Dec 2017 22:10:37 +0000 -Subject: [PATCH 154/175] config: Add PINCTRL_MCP23S08 +Subject: [PATCH 154/201] config: Add PINCTRL_MCP23S08 As of Linux 4.12, the mcp23s08 driver moved from drivers/gpio to drivers/pinctrl. At the same time, the Kconfig symbols changed @@ -138638,10 +138638,10 @@ index c1da808d40bc8e867b41d3566bd60a758d052bdb..4cfd4e6a339009536d6ebaaff36e4007 CONFIG_GPIO_PCF857X=m CONFIG_GPIO_ARIZONA=m -From 98d11abfc4eaa2a6572f57f6b1b3e49657895456 Mon Sep 17 00:00:00 2001 +From 2af803bb1b10c902c03e6e5cd13cec4ee5fe7171 Mon Sep 17 00:00:00 2001 From: Alex Riesen Date: Thu, 21 Dec 2017 09:29:39 +0100 -Subject: [PATCH 155/175] Add Raspberry Pi firmware driver to the dependencies +Subject: [PATCH 155/201] Add Raspberry Pi firmware driver to the dependencies of backlight driver Otherwise the backlight driver fails to build if the firmware @@ -138665,10 +138665,10 @@ index e345a32945b7ec0712cebd0ac8e62c9e8955e24f..9244f2f7b642c6fe5725f0b3b841cece If you have the Raspberry Pi DSI touchscreen display, say Y to enable the mailbox-controlled backlight driver. -From afc041f17a226af560d5b4edf46cab8938b8a663 Mon Sep 17 00:00:00 2001 +From f15d2a7e3e646b9a2c85cc13474ab0b9e3f6ff89 Mon Sep 17 00:00:00 2001 From: Aaron Shaw Date: Sun, 24 Dec 2017 21:57:05 +0000 -Subject: [PATCH 156/175] overlays: Add media center HAT overlay (#2313) +Subject: [PATCH 156/201] overlays: Add media center HAT overlay (#2313) --- arch/arm/boot/dts/overlays/Makefile | 1 + @@ -138863,10 +138863,10 @@ index 0000000000000000000000000000000000000000..a42b8e2a846c6e614ca807f798bef238 + }; +}; -From 2fe406b123491456b31d4bf731be407cc31e32bf Mon Sep 17 00:00:00 2001 +From fe0a2683a2bbe729ec74cd4d7435e77d9aeb37bf Mon Sep 17 00:00:00 2001 From: Aaron Shaw Date: Thu, 28 Dec 2017 17:31:52 +0000 -Subject: [PATCH 157/175] add backlight control to rpi-display overlay +Subject: [PATCH 157/201] add backlight control to rpi-display overlay --- arch/arm/boot/dts/overlays/README | 1 + @@ -138910,10 +138910,10 @@ index d7e72eef594e08b309ffbaa04f43c68909c08f36..533b5c140b5447a0bcf426fee0a8b321 }; }; -From 456959b59a5fe3454a41b877945d7d379c7a922a Mon Sep 17 00:00:00 2001 +From 4340e66db1466d98e2955a76a9e9b0a5c70d01d4 Mon Sep 17 00:00:00 2001 From: Aaron Shaw Date: Thu, 28 Dec 2017 17:34:54 +0000 -Subject: [PATCH 158/175] add backlight control to media-center overlay +Subject: [PATCH 158/201] add backlight control to media-center overlay --- arch/arm/boot/dts/overlays/README | 1 + @@ -138960,10 +138960,10 @@ index a42b8e2a846c6e614ca807f798bef238ad002535..ce4db35228e9f68e3f3f40f0f9c02f89 gpio_out_pin = <&lirc_pins>,"brcm,pins:0"; gpio_in_pin = <&lirc_pins>,"brcm,pins:4"; -From c212fe7c3903d30a8e42b956fbbe6506f3de370f Mon Sep 17 00:00:00 2001 +From b6aa8f68bb98befe327dac394280cff8ed4cea3b Mon Sep 17 00:00:00 2001 From: penfold42 Date: Tue, 2 Jan 2018 00:15:19 +1100 -Subject: [PATCH 159/175] Add overlay for mcp3202 12 bit ADC +Subject: [PATCH 159/201] Add overlay for mcp3202 12 bit ADC --- arch/arm/boot/dts/overlays/Makefile | 1 + @@ -139216,10 +139216,10 @@ index 0000000000000000000000000000000000000000..9902c4614ea1f9e5725b3c4a2e62429a + }; +}; -From c287a762fe9b4001a09da6df07d696ebd85574be Mon Sep 17 00:00:00 2001 +From 0a7f7ca113a71789fc5f43717cd7e0dd5c8a1967 Mon Sep 17 00:00:00 2001 From: Stefan Schake Date: Sat, 2 Dec 2017 18:40:39 +0100 -Subject: [PATCH 160/175] drm/vc4: Release fence after signalling +Subject: [PATCH 160/201] drm/vc4: Release fence after signalling [ Upstream commit babc8110057cb9ca542c3c1666cbda4e8ccf9250 ] @@ -139266,10 +139266,10 @@ index 7d7af3a93d941bb9552afc1140c408c8da86be37..fc1fc43a924dcc0c44a7a13858bfb53c } vc4_submit_next_render_job(dev); -From b7a56c84d45e63b999d7af0820a32fc078804194 Mon Sep 17 00:00:00 2001 +From 9a9777684a05f6b427b978d2d9fc0a5ab272aa17 Mon Sep 17 00:00:00 2001 From: P33M Date: Tue, 9 Jan 2018 15:16:35 +0000 -Subject: [PATCH 161/175] dwc_otg: don't unconditionally force host mode in +Subject: [PATCH 161/201] dwc_otg: don't unconditionally force host mode in dwc_otg_cil_init() Add the ability to disable force_host_mode for those that want to use @@ -139330,10 +139330,10 @@ index af123d01f3ef9f99450c78efdf766ca35e15cbc9..e945900c503cb383d754381b055955b1 * * The following parameters may be specified when starting the module. -From fc65eafae43a8d92e82b2e2222c32124e8982e36 Mon Sep 17 00:00:00 2001 +From 6889eaa3913832dfbbd54563b22411b589bec178 Mon Sep 17 00:00:00 2001 From: Sugizaki Yukimasa Date: Thu, 4 Jan 2018 23:58:06 +0900 -Subject: [PATCH 162/175] vcsm: Define cache operation constants in user header +Subject: [PATCH 162/201] vcsm: Define cache operation constants in user header Without this change, users have to use raw values (1, 2, 3) to specify cache operation. @@ -139377,10 +139377,10 @@ index b75729d762f25aace133f7a008633b4094ae2de2..ddbeebc71ada82e88a1668fbdfd9821a struct vmcs_sm_ioctl_alloc { /* user -> kernel */ -From 8783d03b98b0fc46b5373fc7230dab6deccafc79 Mon Sep 17 00:00:00 2001 +From e3343bc0a679929bdb6eb0cde17f3a0d7d7744ac Mon Sep 17 00:00:00 2001 From: Sugizaki Yukimasa Date: Fri, 5 Jan 2018 00:01:30 +0900 -Subject: [PATCH 163/175] vcsm: Support for finding user/vc handle in memory +Subject: [PATCH 163/201] vcsm: Support for finding user/vc handle in memory pool vmcs_sm_{usr,vc}_handle_from_pid_and_address() were failing to find @@ -139422,10 +139422,10 @@ index 53843054d7617716761b74d8a3d91551b91ffb75..abd770566ed30102b95a01cec6a3825b pr_debug("[%s]: global map %p (pid %u, addr %lx) -> usr-hdl %x (vc-hdl %x)\n", -From 994237465f1628ca5eebddbb672e700f79359158 Mon Sep 17 00:00:00 2001 +From 70863f0684d05d286c54776d566890d6237c6016 Mon Sep 17 00:00:00 2001 From: Sugizaki Yukimasa Date: Fri, 5 Jan 2018 00:44:00 +0900 -Subject: [PATCH 164/175] vcsm: Unify cache manipulating functions +Subject: [PATCH 164/201] vcsm: Unify cache manipulating functions Signed-off-by: Sugizaki Yukimasa --- @@ -139811,10 +139811,10 @@ index abd770566ed30102b95a01cec6a3825b23afcd9d..b6cdc1934ad2092892898559f6f0d481 kfree(block); } -From f3fc73305ecadea9f11eba6458748f3e7a8a5037 Mon Sep 17 00:00:00 2001 +From 7dc83438d7f87a2ff1f91f166dc1bbb38dc03cf4 Mon Sep 17 00:00:00 2001 From: Sugizaki Yukimasa Date: Mon, 8 Jan 2018 21:07:17 +0900 -Subject: [PATCH 165/175] vcsm: Fix obscure conditions +Subject: [PATCH 165/201] vcsm: Fix obscure conditions Signed-off-by: Sugizaki Yukimasa --- @@ -139846,10 +139846,10 @@ index b6cdc1934ad2092892898559f6f0d481a7744fa9..95963ffba51afdbdfec26a8c75eec0f5 return -EINVAL; } -From 8fe4d3e8f053c9c7f1a5605bf4c78f5e02cd720e Mon Sep 17 00:00:00 2001 +From fc3017545e5eeda9213ea5be6ffa22a248a5cf4a Mon Sep 17 00:00:00 2001 From: Sugizaki Yukimasa Date: Mon, 8 Jan 2018 21:11:23 +0900 -Subject: [PATCH 166/175] vcsm: Fix memory leaking on clean_invalid2 ioctl +Subject: [PATCH 166/201] vcsm: Fix memory leaking on clean_invalid2 ioctl handler Signed-off-by: Sugizaki Yukimasa @@ -139871,10 +139871,10 @@ index 95963ffba51afdbdfec26a8c75eec0f5e0c2f4e1..380437f41cc64902c9576e53d0beaf76 kfree(block); } -From eb5e1b9c8bd6947edc89251bd71e8493f175aac1 Mon Sep 17 00:00:00 2001 +From 4639822b5395adf37dfbbc462bdb0c3d40608339 Mon Sep 17 00:00:00 2001 From: Sugizaki Yukimasa Date: Mon, 8 Jan 2018 21:15:13 +0900 -Subject: [PATCH 167/175] vcsm: Describe the use of cache operation constants +Subject: [PATCH 167/201] vcsm: Describe the use of cache operation constants Signed-off-by: Sugizaki Yukimasa --- @@ -139913,10 +139913,10 @@ index ddbeebc71ada82e88a1668fbdfd9821a39d7cd22..e881fa8ee8e1474cdaa0759b742a5f67 /* user -> kernel */ struct { -From fb33f460d73032245d82df8758d48ade6451da3d Mon Sep 17 00:00:00 2001 +From dc8f13b3910d196183b29cb20f2632b169e40ba8 Mon Sep 17 00:00:00 2001 From: Sugizaki Yukimasa Date: Tue, 9 Jan 2018 12:33:24 +0900 -Subject: [PATCH 168/175] vcsm: Fix obscure conditions again +Subject: [PATCH 168/201] vcsm: Fix obscure conditions again Signed-off-by: Sugizaki Yukimasa --- @@ -139939,10 +139939,10 @@ index 380437f41cc64902c9576e53d0beaf76ccdc1551..0d14c511da2ab8f542d51ad87746be85 pr_debug("[%s]: global map %p (pid %u, addr %lx) -> usr-hdl %x (vc-hdl %x)\n", -From a274eecd24dc04e12918c977f8b3a7b066925b49 Mon Sep 17 00:00:00 2001 +From cc8c97c4dcef600ec8c5f720e8c707a9169b5234 Mon Sep 17 00:00:00 2001 From: Sugizaki Yukimasa Date: Wed, 10 Jan 2018 04:32:20 +0900 -Subject: [PATCH 169/175] vcsm: Add no-op cache operation constant +Subject: [PATCH 169/201] vcsm: Add no-op cache operation constant Signed-off-by: Sugizaki Yukimasa --- @@ -140005,10 +140005,10 @@ index e881fa8ee8e1474cdaa0759b742a5f67c122c9eb..a4492b921b48e2c7fdd2745f2d2bad48 #define VCSM_CACHE_OP_CLEAN 0x02 #define VCSM_CACHE_OP_FLUSH 0x03 -From c3fc6d99ac2adccc9c886ebf15118d3e11da9da0 Mon Sep 17 00:00:00 2001 +From a12ca58115215b97d90d315a3132176d5c30c4df Mon Sep 17 00:00:00 2001 From: Sugizaki Yukimasa Date: Wed, 10 Jan 2018 06:25:51 +0900 -Subject: [PATCH 170/175] vcsm: Revert to do page-table-walk-based cache +Subject: [PATCH 170/201] vcsm: Revert to do page-table-walk-based cache manipulating on some ioctl calls On FLUSH, INVALID, CLEAN_INVALID ioctl calls, cache operations based on @@ -140243,10 +140243,10 @@ index 122ea149790b549aa7550ddb9cff64dc2195fc61..1bc37ee882255c0d05beac58bb3b9e31 break; } -From 3d32be3d432566ec14507267e574ec9dc3478fdc Mon Sep 17 00:00:00 2001 +From ddb358bb53765d3ca2c6a88f5e0afea2e3b670d9 Mon Sep 17 00:00:00 2001 From: Aaron Shaw Date: Thu, 4 Jan 2018 15:02:16 +0000 -Subject: [PATCH 171/175] add gpio-key overlay (#2329) +Subject: [PATCH 171/201] add gpio-key overlay (#2329) An overlay that allows a Linux key to be bound to a GPIO. --- @@ -140355,10 +140355,10 @@ index 0000000000000000000000000000000000000000..333d016d6f02981f69acedbf683171b4 + +}; -From 2a1e59afcf73f96f8c8d439f626141516ebc7530 Mon Sep 17 00:00:00 2001 +From c0f292abf10d876de6eab351ae31fbe21c477597 Mon Sep 17 00:00:00 2001 From: Aaron Shaw Date: Fri, 5 Jan 2018 15:08:37 +0000 -Subject: [PATCH 172/175] add additional overrides to rotary-encoder overlay +Subject: [PATCH 172/201] add additional overrides to rotary-encoder overlay (#2334) --- @@ -140435,10 +140435,10 @@ index c0c6bccff60cc15d9a9bf59d2c7cba41eb9c1cdc..f88f8a39d9a2f2afbf80edf2d9b32841 }; }; -From 5722b01a152b6f3cedef3b6f8d77d959d6d80c5f Mon Sep 17 00:00:00 2001 +From 775be202cf30f32b086f9bb64b120ba38c687e2e Mon Sep 17 00:00:00 2001 From: Phil Elwell Date: Fri, 12 Jan 2018 09:15:01 +0000 -Subject: [PATCH 173/175] overlays: Add uart0 overlay to change pin usage +Subject: [PATCH 173/201] overlays: Add uart0 overlay to change pin usage Signed-off-by: Phil Elwell --- @@ -140524,10 +140524,10 @@ index 0000000000000000000000000000000000000000..20b2a609c511b017d1231e08c901d165 + }; +}; -From 1a26624f96adffb7efe5403fe87995f4f323b1bd Mon Sep 17 00:00:00 2001 +From b51e64e9ee6e723cc38a2e0b24751745ed8954b4 Mon Sep 17 00:00:00 2001 From: popcornmix Date: Wed, 17 Jan 2018 13:54:41 +0000 -Subject: [PATCH 174/175] Revert "softirq: Let ksoftirqd do its job" +Subject: [PATCH 174/201] Revert "softirq: Let ksoftirqd do its job" This reverts commit 4cd13c21b207e80ddb1144c576500098f2d5f882. --- @@ -140576,10 +140576,10 @@ index 4e09821f9d9e8b5815037bd469110e2618abb7f6..58bb6f6359f4ea3fa46008060a1c9cbd #ifdef CONFIG_HAVE_IRQ_EXIT_ON_IRQ_STACK /* -From 73c278e89be28e95b5f4ba032051db7742da32c5 Mon Sep 17 00:00:00 2001 +From 36db437449567b828e0e19e460a9f45f8a57fe99 Mon Sep 17 00:00:00 2001 From: Phil Elwell Date: Tue, 16 Jan 2018 12:59:17 +0000 -Subject: [PATCH 175/175] overlays: Fix resetgpio and ledgpio for hy28a/b +Subject: [PATCH 175/201] overlays: Fix resetgpio and ledgpio for hy28a/b Offsets for overlay parameters are specified in bytes, not in access units. @@ -140622,3 +140622,2647 @@ index 8018aebde8e557f45ffd63eb86f6c7a1048fe3cb..70c1118064b64be1811ed2f1bb04efd6 + <&hy28b_pins>, "brcm,pins:8"; }; }; + +From 803e3c3b090dafdc3b17c3454ebce9ffc329ff61 Mon Sep 17 00:00:00 2001 +From: Matthias Reichl +Date: Thu, 18 Jan 2018 12:36:44 +0100 +Subject: [PATCH 176/201] ASoC: bcm2835: fix hw_params error when device is in + prepared state (#2345) + +commit 8d5737a5f53902a916ee1e1cb248c9b8b883b2ea upstream. + +If bcm2835 is configured as bitclock master calling hw_params() +after prepare() fails with EBUSY. This also makes it impossible to +use bcm2835 in full duplex mode. + +The error is caused by the split clock setup: clk_set_rate +is called in hw_params, clk_prepare_enable in prepare. As hw_params +doesn't check if the clock was already enabled clk_set_rate +fails with EBUSY. + +Fix this by moving clock startup from prepare to hw_params and +let hw_params properly deal with an already set up or enabled +clock. + +Signed-off-by: Matthias Reichl +--- + sound/soc/bcm/bcm2835-i2s.c | 20 ++++++++++++++------ + 1 file changed, 14 insertions(+), 6 deletions(-) + +diff --git a/sound/soc/bcm/bcm2835-i2s.c b/sound/soc/bcm/bcm2835-i2s.c +index 2e449d7173fcecbcd647f90a26bd58b6c421bcde..d5f73a8ab8932768c4df1470e94e78bff98d7787 100644 +--- a/sound/soc/bcm/bcm2835-i2s.c ++++ b/sound/soc/bcm/bcm2835-i2s.c +@@ -130,6 +130,7 @@ struct bcm2835_i2s_dev { + struct regmap *i2s_regmap; + struct clk *clk; + bool clk_prepared; ++ int clk_rate; + }; + + static void bcm2835_i2s_start_clock(struct bcm2835_i2s_dev *dev) +@@ -419,10 +420,19 @@ static int bcm2835_i2s_hw_params(struct snd_pcm_substream *substream, + } + + /* Clock should only be set up here if CPU is clock master */ +- if (bit_clock_master) { +- ret = clk_set_rate(dev->clk, bclk_rate); +- if (ret) +- return ret; ++ if (bit_clock_master && ++ (!dev->clk_prepared || dev->clk_rate != bclk_rate)) { ++ if (dev->clk_prepared) ++ bcm2835_i2s_stop_clock(dev); ++ ++ if (dev->clk_rate != bclk_rate) { ++ ret = clk_set_rate(dev->clk, bclk_rate); ++ if (ret) ++ return ret; ++ dev->clk_rate = bclk_rate; ++ } ++ ++ bcm2835_i2s_start_clock(dev); + } + + /* Setup the frame format */ +@@ -618,8 +628,6 @@ static int bcm2835_i2s_prepare(struct snd_pcm_substream *substream, + struct bcm2835_i2s_dev *dev = snd_soc_dai_get_drvdata(dai); + uint32_t cs_reg; + +- bcm2835_i2s_start_clock(dev); +- + /* + * Clear both FIFOs if the one that should be started + * is not empty at the moment. This should only happen + +From f699a6fbdeb37d160b6ac3acb2f24fd137f8b761 Mon Sep 17 00:00:00 2001 +From: Ahmet Inan +Date: Sat, 14 Oct 2017 10:10:53 -0700 +Subject: [PATCH 177/201] Input: add I2C attached EETI EXC3000 multi touch + driver + +commit 7e577a17f2eefeef32f1106ebf91e7cd143ba654 upstream. +beware: code adapted to use the old timer API. + +The 3000 series have a new protocol which allows to report up to 5 points +in a single 66 byte frame. One must always read in 66 byte frames. +To support up to 10 points, two consecutive frames need to be read: +The first frame says how many points until sync. +The second frame must say zero points or both frames must be discarded. + +To be able to work with the higher 400KHz I2C bus rate, one must +successfully send a special package prior _each_ read or the controller +will refuse to cooperate. + +This is a minimal implementation based on egalax_i2c.c (which can be found +on the internet) and egalax_ts.c but without the vendor interface and no +power management support. + +Signed-off-by: Ahmet Inan +Acked-by: Rob Herring +Signed-off-by: Dmitry Torokhov +--- + .../bindings/input/touchscreen/exc3000.txt | 27 +++ + drivers/input/touchscreen/Kconfig | 10 + + drivers/input/touchscreen/Makefile | 1 + + drivers/input/touchscreen/exc3000.c | 223 +++++++++++++++++++++ + 4 files changed, 261 insertions(+) + create mode 100644 Documentation/devicetree/bindings/input/touchscreen/exc3000.txt + create mode 100644 drivers/input/touchscreen/exc3000.c + +diff --git a/Documentation/devicetree/bindings/input/touchscreen/exc3000.txt b/Documentation/devicetree/bindings/input/touchscreen/exc3000.txt +new file mode 100644 +index 0000000000000000000000000000000000000000..1dcff4a43eaa8dc0091803f46b9c45454dd0660d +--- /dev/null ++++ b/Documentation/devicetree/bindings/input/touchscreen/exc3000.txt +@@ -0,0 +1,27 @@ ++* EETI EXC3000 Multiple Touch Controller ++ ++Required properties: ++- compatible: must be "eeti,exc3000" ++- reg: i2c slave address ++- interrupt-parent: the phandle for the interrupt controller ++- interrupts: touch controller interrupt ++- touchscreen-size-x: See touchscreen.txt ++- touchscreen-size-y: See touchscreen.txt ++ ++Optional properties: ++- touchscreen-inverted-x: See touchscreen.txt ++- touchscreen-inverted-y: See touchscreen.txt ++- touchscreen-swapped-x-y: See touchscreen.txt ++ ++Example: ++ ++ touchscreen@2a { ++ compatible = "eeti,exc3000"; ++ reg = <0x2a>; ++ interrupt-parent = <&gpio1>; ++ interrupts = <9 IRQ_TYPE_LEVEL_LOW>; ++ touchscreen-size-x = <4096>; ++ touchscreen-size-y = <4096>; ++ touchscreen-inverted-x; ++ touchscreen-swapped-x-y; ++ }; +diff --git a/drivers/input/touchscreen/Kconfig b/drivers/input/touchscreen/Kconfig +index c5237087c6024ba5520bf624251473c923fae85a..80c3f6e9fae38c12c2fae4dda55e414b44f16258 100644 +--- a/drivers/input/touchscreen/Kconfig ++++ b/drivers/input/touchscreen/Kconfig +@@ -316,6 +316,16 @@ config TOUCHSCREEN_EGALAX_SERIAL + To compile this driver as a module, choose M here: the + module will be called egalax_ts_serial. + ++config TOUCHSCREEN_EXC3000 ++ tristate "EETI EXC3000 multi-touch panel support" ++ depends on I2C ++ help ++ Say Y here to enable support for I2C connected EETI ++ EXC3000 multi-touch panels. ++ ++ To compile this driver as a module, choose M here: the ++ module will be called exc3000. ++ + config TOUCHSCREEN_FUJITSU + tristate "Fujitsu serial touchscreen" + select SERIO +diff --git a/drivers/input/touchscreen/Makefile b/drivers/input/touchscreen/Makefile +index cceb83c867a9da8d9885e8c5dc48831dc21f31c3..12ff1216da2019f694d13c79d6c3e29e1ead0f34 100644 +--- a/drivers/input/touchscreen/Makefile ++++ b/drivers/input/touchscreen/Makefile +@@ -39,6 +39,7 @@ obj-$(CONFIG_TOUCHSCREEN_ELAN) += elants_i2c.o + obj-$(CONFIG_TOUCHSCREEN_ELO) += elo.o + obj-$(CONFIG_TOUCHSCREEN_EGALAX) += egalax_ts.o + obj-$(CONFIG_TOUCHSCREEN_EGALAX_SERIAL) += egalax_ts_serial.o ++obj-$(CONFIG_TOUCHSCREEN_EXC3000) += exc3000.o + obj-$(CONFIG_TOUCHSCREEN_FUJITSU) += fujitsu_ts.o + obj-$(CONFIG_TOUCHSCREEN_GOODIX) += goodix.o + obj-$(CONFIG_TOUCHSCREEN_ILI210X) += ili210x.o +diff --git a/drivers/input/touchscreen/exc3000.c b/drivers/input/touchscreen/exc3000.c +new file mode 100644 +index 0000000000000000000000000000000000000000..bed0db6999050c3ad5adf9c5d02784a000481245 +--- /dev/null ++++ b/drivers/input/touchscreen/exc3000.c +@@ -0,0 +1,223 @@ ++/* ++ * Driver for I2C connected EETI EXC3000 multiple touch controller ++ * ++ * Copyright (C) 2017 Ahmet Inan ++ * ++ * minimal implementation based on egalax_ts.c and egalax_i2c.c ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#define EXC3000_NUM_SLOTS 10 ++#define EXC3000_SLOTS_PER_FRAME 5 ++#define EXC3000_LEN_FRAME 66 ++#define EXC3000_LEN_POINT 10 ++#define EXC3000_MT_EVENT 6 ++#define EXC3000_TIMEOUT_MS 100 ++ ++struct exc3000_data { ++ struct i2c_client *client; ++ struct input_dev *input; ++ struct touchscreen_properties prop; ++ struct timer_list timer; ++ u8 buf[2 * EXC3000_LEN_FRAME]; ++}; ++ ++static void exc3000_report_slots(struct input_dev *input, ++ struct touchscreen_properties *prop, ++ const u8 *buf, int num) ++{ ++ for (; num--; buf += EXC3000_LEN_POINT) { ++ if (buf[0] & BIT(0)) { ++ input_mt_slot(input, buf[1]); ++ input_mt_report_slot_state(input, MT_TOOL_FINGER, true); ++ touchscreen_report_pos(input, prop, ++ get_unaligned_le16(buf + 2), ++ get_unaligned_le16(buf + 4), ++ true); ++ } ++ } ++} ++ ++static void exc3000_timer(unsigned long d) ++{ ++ struct exc3000_data *data = (void *)d; ++ ++ input_mt_sync_frame(data->input); ++ input_sync(data->input); ++} ++ ++static int exc3000_read_frame(struct i2c_client *client, u8 *buf) ++{ ++ int ret; ++ ++ ret = i2c_master_send(client, "'", 2); ++ if (ret < 0) ++ return ret; ++ ++ if (ret != 2) ++ return -EIO; ++ ++ ret = i2c_master_recv(client, buf, EXC3000_LEN_FRAME); ++ if (ret < 0) ++ return ret; ++ ++ if (ret != EXC3000_LEN_FRAME) ++ return -EIO; ++ ++ if (get_unaligned_le16(buf) != EXC3000_LEN_FRAME || ++ buf[2] != EXC3000_MT_EVENT) ++ return -EINVAL; ++ ++ return 0; ++} ++ ++static int exc3000_read_data(struct i2c_client *client, ++ u8 *buf, int *n_slots) ++{ ++ int error; ++ ++ error = exc3000_read_frame(client, buf); ++ if (error) ++ return error; ++ ++ *n_slots = buf[3]; ++ if (!*n_slots || *n_slots > EXC3000_NUM_SLOTS) ++ return -EINVAL; ++ ++ if (*n_slots > EXC3000_SLOTS_PER_FRAME) { ++ /* Read 2nd frame to get the rest of the contacts. */ ++ error = exc3000_read_frame(client, buf + EXC3000_LEN_FRAME); ++ if (error) ++ return error; ++ ++ /* 2nd chunk must have number of contacts set to 0. */ ++ if (buf[EXC3000_LEN_FRAME + 3] != 0) ++ return -EINVAL; ++ } ++ ++ return 0; ++} ++ ++static irqreturn_t exc3000_interrupt(int irq, void *dev_id) ++{ ++ struct exc3000_data *data = dev_id; ++ struct input_dev *input = data->input; ++ u8 *buf = data->buf; ++ int slots, total_slots; ++ int error; ++ ++ error = exc3000_read_data(data->client, buf, &total_slots); ++ if (error) { ++ /* Schedule a timer to release "stuck" contacts */ ++ mod_timer(&data->timer, ++ jiffies + msecs_to_jiffies(EXC3000_TIMEOUT_MS)); ++ goto out; ++ } ++ ++ /* ++ * We read full state successfully, no contacts will be "stuck". ++ */ ++ del_timer_sync(&data->timer); ++ ++ while (total_slots > 0) { ++ slots = min(total_slots, EXC3000_SLOTS_PER_FRAME); ++ exc3000_report_slots(input, &data->prop, buf + 4, slots); ++ total_slots -= slots; ++ buf += EXC3000_LEN_FRAME; ++ } ++ ++ input_mt_sync_frame(input); ++ input_sync(input); ++ ++out: ++ return IRQ_HANDLED; ++} ++ ++static int exc3000_probe(struct i2c_client *client, ++ const struct i2c_device_id *id) ++{ ++ struct exc3000_data *data; ++ struct input_dev *input; ++ int error; ++ ++ data = devm_kzalloc(&client->dev, sizeof(*data), GFP_KERNEL); ++ if (!data) ++ return -ENOMEM; ++ ++ data->client = client; ++ setup_timer(&data->timer, exc3000_timer, (unsigned long)data); ++ ++ input = devm_input_allocate_device(&client->dev); ++ if (!input) ++ return -ENOMEM; ++ ++ data->input = input; ++ ++ input->name = "EETI EXC3000 Touch Screen"; ++ input->id.bustype = BUS_I2C; ++ ++ input_set_abs_params(input, ABS_MT_POSITION_X, 0, 4095, 0, 0); ++ input_set_abs_params(input, ABS_MT_POSITION_Y, 0, 4095, 0, 0); ++ touchscreen_parse_properties(input, true, &data->prop); ++ ++ error = input_mt_init_slots(input, EXC3000_NUM_SLOTS, ++ INPUT_MT_DIRECT | INPUT_MT_DROP_UNUSED); ++ if (error) ++ return error; ++ ++ error = input_register_device(input); ++ if (error) ++ return error; ++ ++ error = devm_request_threaded_irq(&client->dev, client->irq, ++ NULL, exc3000_interrupt, IRQF_ONESHOT, ++ client->name, data); ++ if (error) ++ return error; ++ ++ return 0; ++} ++ ++static const struct i2c_device_id exc3000_id[] = { ++ { "exc3000", 0 }, ++ { } ++}; ++MODULE_DEVICE_TABLE(i2c, exc3000_id); ++ ++#ifdef CONFIG_OF ++static const struct of_device_id exc3000_of_match[] = { ++ { .compatible = "eeti,exc3000" }, ++ { } ++}; ++MODULE_DEVICE_TABLE(of, exc3000_of_match); ++#endif ++ ++static struct i2c_driver exc3000_driver = { ++ .driver = { ++ .name = "exc3000", ++ .of_match_table = of_match_ptr(exc3000_of_match), ++ }, ++ .id_table = exc3000_id, ++ .probe = exc3000_probe, ++}; ++ ++module_i2c_driver(exc3000_driver); ++ ++MODULE_AUTHOR("Ahmet Inan "); ++MODULE_DESCRIPTION("I2C connected EETI EXC3000 multiple touch controller driver"); ++MODULE_LICENSE("GPL v2"); + +From 4d372cf956640256e984954fbb0da1de85c7b4c7 Mon Sep 17 00:00:00 2001 +From: Ahmet Inan +Date: Fri, 1 Sep 2017 15:14:23 +0200 +Subject: [PATCH 178/201] config: Add EETI EXC3000 touch controller module + +Signed-off-by: Ahmet Inan +--- + arch/arm/configs/bcm2709_defconfig | 1 + + arch/arm/configs/bcmrpi_defconfig | 1 + + 2 files changed, 2 insertions(+) + +diff --git a/arch/arm/configs/bcm2709_defconfig b/arch/arm/configs/bcm2709_defconfig +index 3cc3a9745c1366ef6fc7d8066462c56039d7a071..f1dcc7d974b674199c4f25e8d561f09b152ffa19 100644 +--- a/arch/arm/configs/bcm2709_defconfig ++++ b/arch/arm/configs/bcm2709_defconfig +@@ -554,6 +554,7 @@ CONFIG_JOYSTICK_RPISENSE=m + CONFIG_INPUT_TOUCHSCREEN=y + CONFIG_TOUCHSCREEN_ADS7846=m + CONFIG_TOUCHSCREEN_EGALAX=m ++CONFIG_TOUCHSCREEN_EXC3000=m + CONFIG_TOUCHSCREEN_GOODIX=m + CONFIG_TOUCHSCREEN_EDT_FT5X06=m + CONFIG_TOUCHSCREEN_RPI_FT5406=m +diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig +index 4cfd4e6a339009536d6ebaaff36e4007573cfe63..f2563f6824b6b16d9f44bc0ee1da818bc3ef5ebd 100644 +--- a/arch/arm/configs/bcmrpi_defconfig ++++ b/arch/arm/configs/bcmrpi_defconfig +@@ -549,6 +549,7 @@ CONFIG_JOYSTICK_RPISENSE=m + CONFIG_INPUT_TOUCHSCREEN=y + CONFIG_TOUCHSCREEN_ADS7846=m + CONFIG_TOUCHSCREEN_EGALAX=m ++CONFIG_TOUCHSCREEN_EXC3000=m + CONFIG_TOUCHSCREEN_GOODIX=m + CONFIG_TOUCHSCREEN_EDT_FT5X06=m + CONFIG_TOUCHSCREEN_RPI_FT5406=m + +From 7ab515ca002cf441672442295ebc17704a46bd49 Mon Sep 17 00:00:00 2001 +From: Ahmet Inan +Date: Fri, 1 Sep 2017 15:18:01 +0200 +Subject: [PATCH 179/201] overlays: Add EETI EXC3000 overlay + +Add support for I2C connected EETI EXC3000 multiple touch controller +using GPIO 4 (pin 7 on GPIO header) for interrupt. + +Signed-off-by: Ahmet Inan +--- + arch/arm/boot/dts/overlays/Makefile | 1 + + arch/arm/boot/dts/overlays/README | 12 +++++++ + arch/arm/boot/dts/overlays/exc3000-overlay.dts | 48 ++++++++++++++++++++++++++ + 3 files changed, 61 insertions(+) + create mode 100644 arch/arm/boot/dts/overlays/exc3000-overlay.dts + +diff --git a/arch/arm/boot/dts/overlays/Makefile b/arch/arm/boot/dts/overlays/Makefile +index 36db27e205cc3ff33cb49bb6357af9060be8eb17..5f6782edadf63eef2c46064a2f42bfbf204cbc14 100644 +--- a/arch/arm/boot/dts/overlays/Makefile ++++ b/arch/arm/boot/dts/overlays/Makefile +@@ -26,6 +26,7 @@ dtbo-$(CONFIG_ARCH_BCM2835) += \ + dwc2.dtbo \ + enc28j60.dtbo \ + enc28j60-spi2.dtbo \ ++ exc3000.dtbo \ + fe-pi-audio.dtbo \ + goodix.dtbo \ + googlevoicehat-soundcard.dtbo \ +diff --git a/arch/arm/boot/dts/overlays/README b/arch/arm/boot/dts/overlays/README +index f0a49892c57523a899c770b1e776e35b245b3ab2..620b3c4beae80ee290cba69b32f1fe23344b456d 100644 +--- a/arch/arm/boot/dts/overlays/README ++++ b/arch/arm/boot/dts/overlays/README +@@ -468,6 +468,18 @@ Params: int_pin GPIO used for INT (default 39) + speed SPI bus speed (default 12000000) + + ++Name: exc3000 ++Info: Enables I2C connected EETI EXC3000 multiple touch controller using ++ GPIO 4 (pin 7 on GPIO header) for interrupt. ++Load: dtoverlay=exc3000,= ++Params: interrupt GPIO used for interrupt (default 4) ++ sizex Touchscreen size x (default 4096) ++ sizey Touchscreen size y (default 4096) ++ invx Touchscreen inverted x axis ++ invy Touchscreen inverted y axis ++ swapxy Touchscreen swapped x y axis ++ ++ + Name: fe-pi-audio + Info: Configures the Fe-Pi Audio Sound Card + Load: dtoverlay=fe-pi-audio +diff --git a/arch/arm/boot/dts/overlays/exc3000-overlay.dts b/arch/arm/boot/dts/overlays/exc3000-overlay.dts +new file mode 100644 +index 0000000000000000000000000000000000000000..c5694033d03f31391b508b89845b029cb03ae5cd +--- /dev/null ++++ b/arch/arm/boot/dts/overlays/exc3000-overlay.dts +@@ -0,0 +1,48 @@ ++// Device tree overlay for I2C connected EETI EXC3000 multiple touch controller ++/dts-v1/; ++/plugin/; ++ ++/ { ++ compatible = "brcm,bcm2708"; ++ ++ fragment@0 { ++ target = <&gpio>; ++ __overlay__ { ++ exc3000_pins: exc3000_pins { ++ brcm,pins = <4>; // interrupt ++ brcm,function = <0>; // in ++ brcm,pull = <2>; // pull-up ++ }; ++ }; ++ }; ++ ++ fragment@1 { ++ target = <&i2c1>; ++ __overlay__ { ++ #address-cells = <1>; ++ #size-cells = <0>; ++ status = "okay"; ++ ++ exc3000: exc3000@2a { ++ compatible = "eeti,exc3000"; ++ reg = <0x2a>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&exc3000_pins>; ++ interrupt-parent = <&gpio>; ++ interrupts = <4 8>; // active low level-sensitive ++ touchscreen-size-x = <4096>; ++ touchscreen-size-y = <4096>; ++ }; ++ }; ++ }; ++ ++ __overrides__ { ++ interrupt = <&exc3000_pins>,"brcm,pins:0", ++ <&exc3000>,"interrupts:0"; ++ sizex = <&exc3000>,"touchscreen-size-x:0"; ++ sizey = <&exc3000>,"touchscreen-size-y:0"; ++ invx = <&exc3000>,"touchscreen-inverted-x?"; ++ invy = <&exc3000>,"touchscreen-inverted-y?"; ++ swapxy = <&exc3000>,"touchscreen-swapped-x-y?"; ++ }; ++}; + +From 7c76d487c72038e9b8500c205bd891ca29e5dc2b Mon Sep 17 00:00:00 2001 +From: Yevhen Kyriukha +Date: Sun, 14 Jan 2018 13:36:24 +0200 +Subject: [PATCH 180/201] Added support for mbed AudioCODEC (TLV320AIC23B) + +Signed-off-by: Yevhen Kyriukha +--- + arch/arm/boot/dts/overlays/Makefile | 1 + + arch/arm/boot/dts/overlays/README | 6 +++ + arch/arm/boot/dts/overlays/mbed-dac-overlay.dts | 64 +++++++++++++++++++++++++ + 3 files changed, 71 insertions(+) + create mode 100644 arch/arm/boot/dts/overlays/mbed-dac-overlay.dts + +diff --git a/arch/arm/boot/dts/overlays/Makefile b/arch/arm/boot/dts/overlays/Makefile +index 5f6782edadf63eef2c46064a2f42bfbf204cbc14..3c8222020562d932681bdc4676b9466aac931552 100644 +--- a/arch/arm/boot/dts/overlays/Makefile ++++ b/arch/arm/boot/dts/overlays/Makefile +@@ -58,6 +58,7 @@ dtbo-$(CONFIG_ARCH_BCM2835) += \ + justboom-dac.dtbo \ + justboom-digi.dtbo \ + lirc-rpi.dtbo \ ++ mbed-dac.dtbo \ + mcp23017.dtbo \ + mcp23s17.dtbo \ + mcp2515-can0.dtbo \ +diff --git a/arch/arm/boot/dts/overlays/README b/arch/arm/boot/dts/overlays/README +index 620b3c4beae80ee290cba69b32f1fe23344b456d..88f67db61e9e3c481a9df0b71e5c303b47261682 100644 +--- a/arch/arm/boot/dts/overlays/README ++++ b/arch/arm/boot/dts/overlays/README +@@ -965,6 +965,12 @@ Params: gpio_out_pin GPIO for output (default "17") + (default "off") + + ++Name: mbed-dac ++Info: Configures the mbed AudioCODEC (TLV320AIC23B) ++Load: dtoverlay=mbed-dac ++Params: ++ ++ + Name: mcp23017 + Info: Configures the MCP23017 I2C GPIO expander + Load: dtoverlay=mcp23017,= +diff --git a/arch/arm/boot/dts/overlays/mbed-dac-overlay.dts b/arch/arm/boot/dts/overlays/mbed-dac-overlay.dts +new file mode 100644 +index 0000000000000000000000000000000000000000..313563d6ed47fb1e0db8f8ffa4505b61d5e77108 +--- /dev/null ++++ b/arch/arm/boot/dts/overlays/mbed-dac-overlay.dts +@@ -0,0 +1,64 @@ ++// Definitions for mbed DAC ++/dts-v1/; ++/plugin/; ++ ++/ { ++ compatible = "brcm,bcm2708"; ++ ++ fragment@0 { ++ target = <&i2s>; ++ __overlay__ { ++ status = "okay"; ++ }; ++ }; ++ ++ fragment@1 { ++ target = <&i2c1>; ++ __overlay__ { ++ #address-cells = <1>; ++ #size-cells = <0>; ++ status = "okay"; ++ ++ tlv320aic23: codec@1a { ++ #sound-dai-cells = <0>; ++ reg = <0x1a>; ++ compatible = "ti,tlv320aic23"; ++ status = "okay"; ++ }; ++ }; ++ }; ++ ++ fragment@2 { ++ target = <&sound>; ++ __overlay__ { ++ compatible = "simple-audio-card"; ++ i2s-controller = <&i2s>; ++ status = "okay"; ++ ++ simple-audio-card,name = "mbed-DAC"; ++ ++ simple-audio-card,widgets = ++ "Microphone", "Mic Jack", ++ "Line", "Line In", ++ "Headphone", "Headphone Jack"; ++ ++ simple-audio-card,routing = ++ "Headphone Jack", "LHPOUT", ++ "Headphone Jack", "RHPOUT", ++ "LLINEIN", "Line In", ++ "RLINEIN", "Line In", ++ "MICIN", "Mic Jack"; ++ ++ simple-audio-card,format = "i2s"; ++ ++ simple-audio-card,cpu { ++ sound-dai = <&i2s>; ++ }; ++ ++ sound_master: simple-audio-card,codec { ++ sound-dai = <&tlv320aic23>; ++ system-clock-frequency = <12288000>; ++ }; ++ }; ++ }; ++}; + +From 227a662e6bd5f52888a2df01d497f0811c6c9bad Mon Sep 17 00:00:00 2001 +From: Phil Elwell +Date: Mon, 22 Jan 2018 12:17:27 +0000 +Subject: [PATCH 181/201] mmc: bcm2835-sdhost: Support underclocking + +Support underclocking of the SD bus in two ways: +1. using the max-frequency DT property (which currently has no DT + parameter), and +2. using the exiting sd_overclock parameter. + +The two methods differ slightly - in the former the MMC subsystem is +aware of the underclocking, while in the latter it isn't - but the +end results should be the same. + +See: https://github.com/raspberrypi/linux/issues/2350 + +Signed-off-by: Phil Elwell +--- + drivers/mmc/host/bcm2835-sdhost.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/drivers/mmc/host/bcm2835-sdhost.c b/drivers/mmc/host/bcm2835-sdhost.c +index 9c6f199a7830959f31012d86bc1f8b1a9922185f..6c0dafe6c64b03f91cfb0360861c29dd444b3ca5 100644 +--- a/drivers/mmc/host/bcm2835-sdhost.c ++++ b/drivers/mmc/host/bcm2835-sdhost.c +@@ -1519,8 +1519,7 @@ void bcm2835_sdhost_set_clock(struct bcm2835_host *host, unsigned int clock) + if (host->debug) + pr_info("%s: set_clock(%d)\n", mmc_hostname(host->mmc), clock); + +- if ((host->overclock_50 > 50) && +- (clock == 50*MHZ)) ++ if (host->overclock_50 && (clock == 50*MHZ)) + clock = host->overclock_50 * MHZ + (MHZ - 1); + + /* The SDCDIV register has 11 bits, and holds (div - 2). +@@ -1894,7 +1893,8 @@ int bcm2835_sdhost_add_host(struct bcm2835_host *host) + + mmc = host->mmc; + +- mmc->f_max = host->max_clk; ++ if (!mmc->f_max || mmc->f_max > host->max_clk) ++ mmc->f_max = host->max_clk; + mmc->f_min = host->max_clk / SDCDIV_MAX_CDIV; + + mmc->max_busy_timeout = (~(unsigned int)0)/(mmc->f_max/1000); + +From b1c4b373e17d7da51a18d65ae35ce689daebe422 Mon Sep 17 00:00:00 2001 +From: Phil Elwell +Date: Mon, 22 Jan 2018 12:22:01 +0000 +Subject: [PATCH 182/201] mmc: bcm2835-mmc: Support underclocking + +Support underclocking of the SD bus using the max-frequency DT property +(which currently has no DT parameter). The sd_overclock parameter +already provides another way to achieve the same thing which should be +equivalent in end result, but it is a bug not to support max-frequency +as well. + +See: https://github.com/raspberrypi/linux/issues/2350 + +Signed-off-by: Phil Elwell +--- + drivers/mmc/host/bcm2835-mmc.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/drivers/mmc/host/bcm2835-mmc.c b/drivers/mmc/host/bcm2835-mmc.c +index c4a5e992c6fb4a40b933239350ed4bfc8fb40155..b7f5fd96ecb6c59395022e868726f890ad3cd927 100644 +--- a/drivers/mmc/host/bcm2835-mmc.c ++++ b/drivers/mmc/host/bcm2835-mmc.c +@@ -1310,8 +1310,8 @@ static int bcm2835_mmc_add_host(struct bcm2835_host *host) + + host->clk_mul = 0; + +- mmc->f_max = host->max_clk; +- mmc->f_max = host->max_clk; ++ if (!mmc->f_max || mmc->f_max > host->max_clk) ++ mmc->f_max = host->max_clk; + mmc->f_min = host->max_clk / SDHCI_MAX_DIV_SPEC_300; + + /* SDHCI_QUIRK_DATA_TIMEOUT_USES_SDCLK */ + +From bde5bc3d8ea7a2e568ca1b3b04799699bf958644 Mon Sep 17 00:00:00 2001 +From: Phil Elwell +Date: Mon, 22 Jan 2018 17:26:38 +0000 +Subject: [PATCH 183/201] serial: 8250: bcm2835aux - suppress EPROBE_DEFER + +Signed-off-by: Phil Elwell +--- + drivers/tty/serial/8250/8250_bcm2835aux.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/drivers/tty/serial/8250/8250_bcm2835aux.c b/drivers/tty/serial/8250/8250_bcm2835aux.c +index a23c7da42ea81342efc26fb35a92a69d535b7cd0..4f8b8c97186879949a313ce185fcd6e089bd7bc0 100644 +--- a/drivers/tty/serial/8250/8250_bcm2835aux.c ++++ b/drivers/tty/serial/8250/8250_bcm2835aux.c +@@ -54,7 +54,8 @@ static int bcm2835aux_serial_probe(struct platform_device *pdev) + data->clk = devm_clk_get(&pdev->dev, NULL); + ret = PTR_ERR_OR_ZERO(data->clk); + if (ret) { +- dev_err(&pdev->dev, "could not get clk: %d\n", ret); ++ if (ret != -EPROBE_DEFER) ++ dev_err(&pdev->dev, "could not get clk: %d\n", ret); + return ret; + } + + +From 60aee17f855f734446ad5abecb5534c39b6a1453 Mon Sep 17 00:00:00 2001 +From: Phil Elwell +Date: Tue, 23 Jan 2018 16:52:45 +0000 +Subject: [PATCH 184/201] irqchip: irq-bcm2836: Remove regmap and syscon use + +The syscon node defines a register range that duplicates that used by +the local_intc node on bcm2836/7. Since irq-bcm2835 and irq-bcm2836 are +built in and always present together (both drivers are enabled by +CONFIG_ARCH_BCM2835), it is possible to replace the syscon usage with a +global variable that simplifies the code. Doing so does lose the +locking provided by regmap, but as only one side is using the regmap +interface (irq-bcm2835 uses readl and write) there is no loss of +atomicity. + +See: https://github.com/raspberrypi/firmware/issues/926 + +Signed-off-by: Phil Elwell +--- + arch/arm/boot/dts/bcm2709.dtsi | 5 ----- + arch/arm/boot/dts/bcm2710.dtsi | 5 ----- + drivers/irqchip/irq-bcm2835.c | 32 ++++++++++++-------------------- + drivers/irqchip/irq-bcm2836.c | 5 +++++ + 4 files changed, 17 insertions(+), 30 deletions(-) + +diff --git a/arch/arm/boot/dts/bcm2709.dtsi b/arch/arm/boot/dts/bcm2709.dtsi +index 343437db94820bb75a9b81e8bc6ecf6f31d9f04c..c3aedc6541ad00c9c4312bd2ac5882c19608b76b 100644 +--- a/arch/arm/boot/dts/bcm2709.dtsi ++++ b/arch/arm/boot/dts/bcm2709.dtsi +@@ -6,11 +6,6 @@ + soc { + ranges = <0x7e000000 0x3f000000 0x01000000>, + <0x40000000 0x40000000 0x00040000>; +- +- syscon@40000000 { +- compatible = "brcm,bcm2836-arm-local", "syscon"; +- reg = <0x40000000 0x100>; +- }; + }; + + __overrides__ { +diff --git a/arch/arm/boot/dts/bcm2710.dtsi b/arch/arm/boot/dts/bcm2710.dtsi +index d5ce5b60fb3b63a76831504c53145f828b089993..2169fbd14844dd907f027a36984f3372074b331c 100644 +--- a/arch/arm/boot/dts/bcm2710.dtsi ++++ b/arch/arm/boot/dts/bcm2710.dtsi +@@ -16,11 +16,6 @@ + interrupt-parent = <&local_intc>; + interrupts = <9>; + }; +- +- syscon@40000000 { +- compatible = "brcm,bcm2836-arm-local", "syscon"; +- reg = <0x40000000 0x100>; +- }; + }; + + __overrides__ { +diff --git a/drivers/irqchip/irq-bcm2835.c b/drivers/irqchip/irq-bcm2835.c +index 2a11c648cb2fdd5b2ddf4afd1b7e4fc20eee4f4a..ecb0147289746249676125a95c440f83a8d27c2b 100644 +--- a/drivers/irqchip/irq-bcm2835.c ++++ b/drivers/irqchip/irq-bcm2835.c +@@ -50,8 +50,6 @@ + #include + #include + #include +-#include +-#include + + #include + #ifndef CONFIG_ARM64 +@@ -103,7 +101,7 @@ struct armctrl_ic { + void __iomem *enable[NR_BANKS]; + void __iomem *disable[NR_BANKS]; + struct irq_domain *domain; +- struct regmap *local_regmap; ++ void __iomem *local_base; + }; + + static struct armctrl_ic intc __read_mostly; +@@ -140,24 +138,20 @@ static void armctrl_unmask_irq(struct irq_data *d) + if (d->hwirq >= NUMBER_IRQS) { + if (num_online_cpus() > 1) { + unsigned int data; +- int ret; + +- if (!intc.local_regmap) { +- pr_err("FIQ is disabled due to missing regmap\n"); ++ if (!intc.local_base) { ++ pr_err("FIQ is disabled due to missing arm_local_intc\n"); + return; + } + +- ret = regmap_read(intc.local_regmap, +- ARM_LOCAL_GPU_INT_ROUTING, &data); +- if (ret) { +- pr_err("Failed to read int routing %d\n", ret); +- return; +- } ++ data = readl_relaxed(intc.local_base + ++ ARM_LOCAL_GPU_INT_ROUTING); + + data &= ~0xc; + data |= (1 << 2); +- regmap_write(intc.local_regmap, +- ARM_LOCAL_GPU_INT_ROUTING, data); ++ writel_relaxed(data, ++ intc.local_base + ++ ARM_LOCAL_GPU_INT_ROUTING); + } + + writel_relaxed(REG_FIQ_ENABLE | hwirq_to_fiq(d->hwirq), +@@ -256,12 +250,10 @@ static int __init armctrl_of_init(struct device_node *node, + } + + if (is_2836) { +- intc.local_regmap = +- syscon_regmap_lookup_by_compatible("brcm,bcm2836-arm-local"); +- if (IS_ERR(intc.local_regmap)) { +- pr_err("Failed to get local register map. FIQ is disabled for cpus > 1\n"); +- intc.local_regmap = NULL; +- } ++ extern void __iomem * __attribute__((weak)) arm_local_intc; ++ intc.local_base = arm_local_intc; ++ if (!intc.local_base) ++ pr_err("Failed to get local intc base. FIQ is disabled for cpus > 1\n"); + } + + /* Make a duplicate irq range which is used to enable FIQ */ +diff --git a/drivers/irqchip/irq-bcm2836.c b/drivers/irqchip/irq-bcm2836.c +index 05b17ca993f405c4c8e61a782ec58149038069c2..963415c919146e66ef36f4da8f157cabc3aba6d1 100644 +--- a/drivers/irqchip/irq-bcm2836.c ++++ b/drivers/irqchip/irq-bcm2836.c +@@ -83,6 +83,9 @@ struct bcm2836_arm_irqchip_intc { + + static struct bcm2836_arm_irqchip_intc intc __read_mostly; + ++void __iomem *arm_local_intc; ++EXPORT_SYMBOL_GPL(arm_local_intc); ++ + static void bcm2836_arm_irqchip_mask_per_cpu_irq(unsigned int reg_offset, + unsigned int bit, + int cpu) +@@ -310,6 +313,8 @@ static int __init bcm2836_arm_irqchip_l1_intc_of_init(struct device_node *node, + panic("%pOF: unable to map local interrupt registers\n", node); + } + ++ arm_local_intc = intc.base; ++ + bcm2835_init_local_timer_frequency(); + + intc.domain = irq_domain_add_linear(node, LAST_IRQ + 1, + +From cea8e4e4a3d5e9442a7bde8296addd1712de5125 Mon Sep 17 00:00:00 2001 +From: Phil Elwell +Date: Wed, 24 Jan 2018 15:19:39 +0000 +Subject: [PATCH 185/201] lan78xx: Avoid spurious kevent 4 "error" + +lan78xx_defer_event generates an error message whenever the work item +is already scheduled. lan78xx_open defers three events - +EVENT_STAT_UPDATE, EVENT_DEV_OPEN and EVENT_LINK_RESET. Being aware +of the likelihood (or certainty) of an error message, the DEV_OPEN +event is added to the set of pending events directly, relying on +the subsequent deferral of the EVENT_LINK_RESET call to schedule the +work. Take the same precaution with EVENT_STAT_UPDATE to avoid a +totally unnecessary error message. + +Signed-off-by: Phil Elwell +--- + drivers/net/usb/lan78xx.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/net/usb/lan78xx.c b/drivers/net/usb/lan78xx.c +index 26e04c732df49d09939d470c61a9ab4638901e81..2fcad3698971efc0587e6352e4b09cd4f5fbea58 100644 +--- a/drivers/net/usb/lan78xx.c ++++ b/drivers/net/usb/lan78xx.c +@@ -2517,7 +2517,7 @@ static void lan78xx_init_stats(struct lan78xx_net *dev) + dev->stats.rollover_max.eee_tx_lpi_transitions = 0xFFFFFFFF; + dev->stats.rollover_max.eee_tx_lpi_time = 0xFFFFFFFF; + +- lan78xx_defer_kevent(dev, EVENT_STAT_UPDATE); ++ set_bit(EVENT_STAT_UPDATE, &dev->flags); + } + + static int lan78xx_open(struct net_device *net) + +From 5721058e77df9a45bf6244cd2d1ee852573aa764 Mon Sep 17 00:00:00 2001 +From: Phil Elwell +Date: Wed, 24 Jan 2018 20:00:48 +0000 +Subject: [PATCH 186/201] overlays: Allow multiple pps-gpio instantiations + +See: https://github.com/raspberrypi/linux/issues/2352 + +Signed-off-by: Phil Elwell +--- + arch/arm/boot/dts/overlays/pps-gpio-overlay.dts | 8 +++++--- + 1 file changed, 5 insertions(+), 3 deletions(-) + +diff --git a/arch/arm/boot/dts/overlays/pps-gpio-overlay.dts b/arch/arm/boot/dts/overlays/pps-gpio-overlay.dts +index 50143a4bb215807ba0a0d0562f5827fa29a04de4..9ee4bdfa6167355e82d7f8229613f29478caf4ee 100644 +--- a/arch/arm/boot/dts/overlays/pps-gpio-overlay.dts ++++ b/arch/arm/boot/dts/overlays/pps-gpio-overlay.dts +@@ -6,7 +6,7 @@ + fragment@0 { + target-path = "/"; + __overlay__ { +- pps: pps { ++ pps: pps@12 { + compatible = "pps-gpio"; + pinctrl-names = "default"; + pinctrl-0 = <&pps_pins>; +@@ -19,7 +19,7 @@ + fragment@1 { + target = <&gpio>; + __overlay__ { +- pps_pins: pps_pins { ++ pps_pins: pps_pins@12 { + brcm,pins = <18>; + brcm,function = <0>; // in + brcm,pull = <0>; // off +@@ -29,7 +29,9 @@ + + __overrides__ { + gpiopin = <&pps>,"gpios:4", +- <&pps_pins>,"brcm,pins:0"; ++ <&pps>,"reg:0", ++ <&pps_pins>,"brcm,pins:0", ++ <&pps_pins>,"reg:0"; + assert_falling_edge = <&pps>,"assert-falling-edge?"; + }; + }; + +From e6a75ac365934ba710df58161752ffa644676b17 Mon Sep 17 00:00:00 2001 +From: Thierry Reding +Date: Fri, 1 Sep 2017 16:49:54 +0200 +Subject: [PATCH 187/201] drm/vc4: Use correct path to trace include +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The header comment in include/trace/define_trace.h specifies that the +TRACE_INCLUDE_PATH needs to be relative to the define_trace.h header +rather than the trace file including it. Most instances get that wrong +and work around it by adding the $(src) directory to the include path. + +While this works, it is preferable to refer to the correct path to the +trace file in the first place and avoid any workaround. + +Acked-by: Christian König +Acked-by: Daniel Vetter +Signed-off-by: Thierry Reding +Link: https://patchwork.freedesktop.org/patch/msgid/20170901144954.19620-6-thierry.reding@gmail.com +(cherry picked from commit ff58a15a502a900c35ff2f20182249b65719d6d7) +--- + drivers/gpu/drm/vc4/Makefile | 2 -- + drivers/gpu/drm/vc4/vc4_trace.h | 2 +- + 2 files changed, 1 insertion(+), 3 deletions(-) + +diff --git a/drivers/gpu/drm/vc4/Makefile b/drivers/gpu/drm/vc4/Makefile +index 69f3bcd22857db92b5570f11634272492ecbd2d1..1eed0e92bd20a870e7e03022c1e652e587682617 100644 +--- a/drivers/gpu/drm/vc4/Makefile ++++ b/drivers/gpu/drm/vc4/Makefile +@@ -26,5 +26,3 @@ vc4-y := \ + vc4-$(CONFIG_DEBUG_FS) += vc4_debugfs.o + + obj-$(CONFIG_DRM_VC4) += vc4.o +- +-CFLAGS_vc4_trace_points.o := -I$(src) +diff --git a/drivers/gpu/drm/vc4/vc4_trace.h b/drivers/gpu/drm/vc4/vc4_trace.h +index ad7b1ea720c288eb587d16e5f8e10eace5de93f3..deafb32923e147f4bb9ad93ce441a6aecf32188c 100644 +--- a/drivers/gpu/drm/vc4/vc4_trace.h ++++ b/drivers/gpu/drm/vc4/vc4_trace.h +@@ -59,5 +59,5 @@ TRACE_EVENT(vc4_wait_for_seqno_end, + + /* This part must be outside protection */ + #undef TRACE_INCLUDE_PATH +-#define TRACE_INCLUDE_PATH . ++#define TRACE_INCLUDE_PATH ../../drivers/gpu/drm/vc4 + #include + +From f81366aba5bccf858a5f802923f47daec3d2cf99 Mon Sep 17 00:00:00 2001 +From: Colin Ian King +Date: Fri, 8 Sep 2017 15:05:04 +0100 +Subject: [PATCH 188/201] drm/vc4: clean up error handling on devm_kzalloc + failure + +The current error handling when devm_kzalloc fails performs a +non-null check on connector which is redundant because connector +is null at that failure point. Once this is removed, make the +failure path into a trivial -ENOMEM return to clean up the +error handling. Also remove need to initialize connector to NULL. + +Detected by CoverityScan CID#1339527 ("Logically dead code") +Signed-off-by: Colin Ian King +Signed-off-by: Eric Anholt +Reviewed-by: Eric Anholt +Link: https://patchwork.freedesktop.org/patch/msgid/20170908140504.1340-1-colin.king@canonical.com +(cherry picked from commit 5663077a56804890506c913b3ca9fee78764f8b3) +--- + drivers/gpu/drm/vc4/vc4_hdmi.c | 15 +++------------ + 1 file changed, 3 insertions(+), 12 deletions(-) + +diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c +index 8f71157a2b063b07a3d3c195ae5049a0ddcac03e..0b2088264039131f05c2f09bc9ba84d2d3793e39 100644 +--- a/drivers/gpu/drm/vc4/vc4_hdmi.c ++++ b/drivers/gpu/drm/vc4/vc4_hdmi.c +@@ -309,16 +309,13 @@ static const struct drm_connector_helper_funcs vc4_hdmi_connector_helper_funcs = + static struct drm_connector *vc4_hdmi_connector_init(struct drm_device *dev, + struct drm_encoder *encoder) + { +- struct drm_connector *connector = NULL; ++ struct drm_connector *connector; + struct vc4_hdmi_connector *hdmi_connector; +- int ret = 0; + + hdmi_connector = devm_kzalloc(dev->dev, sizeof(*hdmi_connector), + GFP_KERNEL); +- if (!hdmi_connector) { +- ret = -ENOMEM; +- goto fail; +- } ++ if (!hdmi_connector) ++ return ERR_PTR(-ENOMEM); + connector = &hdmi_connector->base; + + hdmi_connector->encoder = encoder; +@@ -336,12 +333,6 @@ static struct drm_connector *vc4_hdmi_connector_init(struct drm_device *dev, + drm_mode_connector_attach_encoder(connector, encoder); + + return connector; +- +- fail: +- if (connector) +- vc4_hdmi_connector_destroy(connector); +- +- return ERR_PTR(ret); + } + + static void vc4_hdmi_encoder_destroy(struct drm_encoder *encoder) + +From b580a62d2155d5330c20152315e2679a2646c6a0 Mon Sep 17 00:00:00 2001 +From: Boris Brezillon +Date: Thu, 19 Oct 2017 14:57:48 +0200 +Subject: [PATCH 189/201] drm/vc4: Add the DRM_IOCTL_VC4_GEM_MADVISE ioctl + +This ioctl will allow us to purge inactive userspace buffers when the +system is running out of contiguous memory. + +For now, the purge logic is rather dumb in that it does not try to +release only the amount of BO needed to meet the last CMA alloc request +but instead purges all objects placed in the purgeable pool as soon as +we experience a CMA allocation failure. + +Note that the in-kernel BO cache is always purged before the purgeable +cache because those objects are known to be unused while objects marked +as purgeable by a userspace application/library might have to be +restored when they are marked back as unpurgeable, which can be +expensive. + +Signed-off-by: Boris Brezillon +Signed-off-by: Eric Anholt +Reviewed-by: Eric Anholt +Link: https://patchwork.freedesktop.org/patch/msgid/20171019125748.3152-1-boris.brezillon@free-electrons.com +(cherry picked from commit b9f19259b84dc648f207a46f3581d15eeaedf4b6) +--- + drivers/gpu/drm/vc4/vc4_bo.c | 287 ++++++++++++++++++++++++++++++++++++++-- + drivers/gpu/drm/vc4/vc4_drv.c | 10 +- + drivers/gpu/drm/vc4/vc4_drv.h | 30 +++++ + drivers/gpu/drm/vc4/vc4_gem.c | 156 +++++++++++++++++++++- + drivers/gpu/drm/vc4/vc4_plane.c | 20 +++ + include/uapi/drm/vc4_drm.h | 19 +++ + 6 files changed, 507 insertions(+), 15 deletions(-) + +diff --git a/drivers/gpu/drm/vc4/vc4_bo.c b/drivers/gpu/drm/vc4/vc4_bo.c +index 3afdbf4bc10b37fcc1a21fc62b21aaa974405490..01a53ba304f89769ccedf66f2cba361f809b54c8 100644 +--- a/drivers/gpu/drm/vc4/vc4_bo.c ++++ b/drivers/gpu/drm/vc4/vc4_bo.c +@@ -53,6 +53,17 @@ static void vc4_bo_stats_dump(struct vc4_dev *vc4) + vc4->bo_labels[i].size_allocated / 1024, + vc4->bo_labels[i].num_allocated); + } ++ ++ mutex_lock(&vc4->purgeable.lock); ++ if (vc4->purgeable.num) ++ DRM_INFO("%30s: %6zdkb BOs (%d)\n", "userspace BO cache", ++ vc4->purgeable.size / 1024, vc4->purgeable.num); ++ ++ if (vc4->purgeable.purged_num) ++ DRM_INFO("%30s: %6zdkb BOs (%d)\n", "total purged BO", ++ vc4->purgeable.purged_size / 1024, ++ vc4->purgeable.purged_num); ++ mutex_unlock(&vc4->purgeable.lock); + } + + #ifdef CONFIG_DEBUG_FS +@@ -75,6 +86,17 @@ int vc4_bo_stats_debugfs(struct seq_file *m, void *unused) + } + mutex_unlock(&vc4->bo_lock); + ++ mutex_lock(&vc4->purgeable.lock); ++ if (vc4->purgeable.num) ++ seq_printf(m, "%30s: %6dkb BOs (%d)\n", "userspace BO cache", ++ vc4->purgeable.size / 1024, vc4->purgeable.num); ++ ++ if (vc4->purgeable.purged_num) ++ seq_printf(m, "%30s: %6dkb BOs (%d)\n", "total purged BO", ++ vc4->purgeable.purged_size / 1024, ++ vc4->purgeable.purged_num); ++ mutex_unlock(&vc4->purgeable.lock); ++ + return 0; + } + #endif +@@ -247,6 +269,109 @@ static void vc4_bo_cache_purge(struct drm_device *dev) + mutex_unlock(&vc4->bo_lock); + } + ++void vc4_bo_add_to_purgeable_pool(struct vc4_bo *bo) ++{ ++ struct vc4_dev *vc4 = to_vc4_dev(bo->base.base.dev); ++ ++ mutex_lock(&vc4->purgeable.lock); ++ list_add_tail(&bo->size_head, &vc4->purgeable.list); ++ vc4->purgeable.num++; ++ vc4->purgeable.size += bo->base.base.size; ++ mutex_unlock(&vc4->purgeable.lock); ++} ++ ++static void vc4_bo_remove_from_purgeable_pool_locked(struct vc4_bo *bo) ++{ ++ struct vc4_dev *vc4 = to_vc4_dev(bo->base.base.dev); ++ ++ /* list_del_init() is used here because the caller might release ++ * the purgeable lock in order to acquire the madv one and update the ++ * madv status. ++ * During this short period of time a user might decide to mark ++ * the BO as unpurgeable, and if bo->madv is set to ++ * VC4_MADV_DONTNEED it will try to remove the BO from the ++ * purgeable list which will fail if the ->next/prev fields ++ * are set to LIST_POISON1/LIST_POISON2 (which is what ++ * list_del() does). ++ * Re-initializing the list element guarantees that list_del() ++ * will work correctly even if it's a NOP. ++ */ ++ list_del_init(&bo->size_head); ++ vc4->purgeable.num--; ++ vc4->purgeable.size -= bo->base.base.size; ++} ++ ++void vc4_bo_remove_from_purgeable_pool(struct vc4_bo *bo) ++{ ++ struct vc4_dev *vc4 = to_vc4_dev(bo->base.base.dev); ++ ++ mutex_lock(&vc4->purgeable.lock); ++ vc4_bo_remove_from_purgeable_pool_locked(bo); ++ mutex_unlock(&vc4->purgeable.lock); ++} ++ ++static void vc4_bo_purge(struct drm_gem_object *obj) ++{ ++ struct vc4_bo *bo = to_vc4_bo(obj); ++ struct drm_device *dev = obj->dev; ++ ++ WARN_ON(!mutex_is_locked(&bo->madv_lock)); ++ WARN_ON(bo->madv != VC4_MADV_DONTNEED); ++ ++ drm_vma_node_unmap(&obj->vma_node, dev->anon_inode->i_mapping); ++ ++ dma_free_wc(dev->dev, obj->size, bo->base.vaddr, bo->base.paddr); ++ bo->base.vaddr = NULL; ++ bo->madv = __VC4_MADV_PURGED; ++} ++ ++static void vc4_bo_userspace_cache_purge(struct drm_device *dev) ++{ ++ struct vc4_dev *vc4 = to_vc4_dev(dev); ++ ++ mutex_lock(&vc4->purgeable.lock); ++ while (!list_empty(&vc4->purgeable.list)) { ++ struct vc4_bo *bo = list_first_entry(&vc4->purgeable.list, ++ struct vc4_bo, size_head); ++ struct drm_gem_object *obj = &bo->base.base; ++ size_t purged_size = 0; ++ ++ vc4_bo_remove_from_purgeable_pool_locked(bo); ++ ++ /* Release the purgeable lock while we're purging the BO so ++ * that other people can continue inserting things in the ++ * purgeable pool without having to wait for all BOs to be ++ * purged. ++ */ ++ mutex_unlock(&vc4->purgeable.lock); ++ mutex_lock(&bo->madv_lock); ++ ++ /* Since we released the purgeable pool lock before acquiring ++ * the BO madv one, the user may have marked the BO as WILLNEED ++ * and re-used it in the meantime. ++ * Before purging the BO we need to make sure ++ * - it is still marked as DONTNEED ++ * - it has not been re-inserted in the purgeable list ++ * - it is not used by HW blocks ++ * If one of these conditions is not met, just skip the entry. ++ */ ++ if (bo->madv == VC4_MADV_DONTNEED && ++ list_empty(&bo->size_head) && ++ !refcount_read(&bo->usecnt)) { ++ purged_size = bo->base.base.size; ++ vc4_bo_purge(obj); ++ } ++ mutex_unlock(&bo->madv_lock); ++ mutex_lock(&vc4->purgeable.lock); ++ ++ if (purged_size) { ++ vc4->purgeable.purged_size += purged_size; ++ vc4->purgeable.purged_num++; ++ } ++ } ++ mutex_unlock(&vc4->purgeable.lock); ++} ++ + static struct vc4_bo *vc4_bo_get_from_cache(struct drm_device *dev, + uint32_t size, + enum vc4_kernel_bo_type type) +@@ -293,6 +418,9 @@ struct drm_gem_object *vc4_create_object(struct drm_device *dev, size_t size) + if (!bo) + return ERR_PTR(-ENOMEM); + ++ bo->madv = VC4_MADV_WILLNEED; ++ refcount_set(&bo->usecnt, 0); ++ mutex_init(&bo->madv_lock); + mutex_lock(&vc4->bo_lock); + bo->label = VC4_BO_TYPE_KERNEL; + vc4->bo_labels[VC4_BO_TYPE_KERNEL].num_allocated++; +@@ -330,16 +458,38 @@ struct vc4_bo *vc4_bo_create(struct drm_device *dev, size_t unaligned_size, + * CMA allocations we've got laying around and try again. + */ + vc4_bo_cache_purge(dev); ++ cma_obj = drm_gem_cma_create(dev, size); ++ } + ++ if (IS_ERR(cma_obj)) { ++ /* ++ * Still not enough CMA memory, purge the userspace BO ++ * cache and retry. ++ * This is sub-optimal since we purge the whole userspace ++ * BO cache which forces user that want to re-use the BO to ++ * restore its initial content. ++ * Ideally, we should purge entries one by one and retry ++ * after each to see if CMA allocation succeeds. Or even ++ * better, try to find an entry with at least the same ++ * size. ++ */ ++ vc4_bo_userspace_cache_purge(dev); + cma_obj = drm_gem_cma_create(dev, size); +- if (IS_ERR(cma_obj)) { +- DRM_ERROR("Failed to allocate from CMA:\n"); +- vc4_bo_stats_dump(vc4); +- return ERR_PTR(-ENOMEM); +- } ++ } ++ ++ if (IS_ERR(cma_obj)) { ++ DRM_ERROR("Failed to allocate from CMA:\n"); ++ vc4_bo_stats_dump(vc4); ++ return ERR_PTR(-ENOMEM); + } + bo = to_vc4_bo(&cma_obj->base); + ++ /* By default, BOs do not support the MADV ioctl. This will be enabled ++ * only on BOs that are exposed to userspace (V3D, V3D_SHADER and DUMB ++ * BOs). ++ */ ++ bo->madv = __VC4_MADV_NOTSUPP; ++ + mutex_lock(&vc4->bo_lock); + vc4_bo_set_label(&cma_obj->base, type); + mutex_unlock(&vc4->bo_lock); +@@ -365,6 +515,8 @@ int vc4_dumb_create(struct drm_file *file_priv, + if (IS_ERR(bo)) + return PTR_ERR(bo); + ++ bo->madv = VC4_MADV_WILLNEED; ++ + ret = drm_gem_handle_create(file_priv, &bo->base.base, &args->handle); + drm_gem_object_put_unlocked(&bo->base.base); + +@@ -403,6 +555,12 @@ void vc4_free_object(struct drm_gem_object *gem_bo) + struct vc4_bo *bo = to_vc4_bo(gem_bo); + struct list_head *cache_list; + ++ /* Remove the BO from the purgeable list. */ ++ mutex_lock(&bo->madv_lock); ++ if (bo->madv == VC4_MADV_DONTNEED && !refcount_read(&bo->usecnt)) ++ vc4_bo_remove_from_purgeable_pool(bo); ++ mutex_unlock(&bo->madv_lock); ++ + mutex_lock(&vc4->bo_lock); + /* If the object references someone else's memory, we can't cache it. + */ +@@ -418,7 +576,8 @@ void vc4_free_object(struct drm_gem_object *gem_bo) + } + + /* If this object was partially constructed but CMA allocation +- * had failed, just free it. ++ * had failed, just free it. Can also happen when the BO has been ++ * purged. + */ + if (!bo->base.vaddr) { + vc4_bo_destroy(bo); +@@ -437,6 +596,10 @@ void vc4_free_object(struct drm_gem_object *gem_bo) + bo->validated_shader = NULL; + } + ++ /* Reset madv and usecnt before adding the BO to the cache. */ ++ bo->madv = __VC4_MADV_NOTSUPP; ++ refcount_set(&bo->usecnt, 0); ++ + bo->t_format = false; + bo->free_time = jiffies; + list_add(&bo->size_head, cache_list); +@@ -461,6 +624,56 @@ static void vc4_bo_cache_time_work(struct work_struct *work) + mutex_unlock(&vc4->bo_lock); + } + ++int vc4_bo_inc_usecnt(struct vc4_bo *bo) ++{ ++ int ret; ++ ++ /* Fast path: if the BO is already retained by someone, no need to ++ * check the madv status. ++ */ ++ if (refcount_inc_not_zero(&bo->usecnt)) ++ return 0; ++ ++ mutex_lock(&bo->madv_lock); ++ switch (bo->madv) { ++ case VC4_MADV_WILLNEED: ++ refcount_inc(&bo->usecnt); ++ ret = 0; ++ break; ++ case VC4_MADV_DONTNEED: ++ /* We shouldn't use a BO marked as purgeable if at least ++ * someone else retained its content by incrementing usecnt. ++ * Luckily the BO hasn't been purged yet, but something wrong ++ * is happening here. Just throw an error instead of ++ * authorizing this use case. ++ */ ++ case __VC4_MADV_PURGED: ++ /* We can't use a purged BO. */ ++ default: ++ /* Invalid madv value. */ ++ ret = -EINVAL; ++ break; ++ } ++ mutex_unlock(&bo->madv_lock); ++ ++ return ret; ++} ++ ++void vc4_bo_dec_usecnt(struct vc4_bo *bo) ++{ ++ /* Fast path: if the BO is still retained by someone, no need to test ++ * the madv value. ++ */ ++ if (refcount_dec_not_one(&bo->usecnt)) ++ return; ++ ++ mutex_lock(&bo->madv_lock); ++ if (refcount_dec_and_test(&bo->usecnt) && ++ bo->madv == VC4_MADV_DONTNEED) ++ vc4_bo_add_to_purgeable_pool(bo); ++ mutex_unlock(&bo->madv_lock); ++} ++ + static void vc4_bo_cache_time_timer(unsigned long data) + { + struct drm_device *dev = (struct drm_device *)data; +@@ -480,18 +693,52 @@ struct dma_buf * + vc4_prime_export(struct drm_device *dev, struct drm_gem_object *obj, int flags) + { + struct vc4_bo *bo = to_vc4_bo(obj); ++ struct dma_buf *dmabuf; ++ int ret; + + if (bo->validated_shader) { + DRM_DEBUG("Attempting to export shader BO\n"); + return ERR_PTR(-EINVAL); + } + +- return drm_gem_prime_export(dev, obj, flags); ++ /* Note: as soon as the BO is exported it becomes unpurgeable, because ++ * noone ever decrements the usecnt even if the reference held by the ++ * exported BO is released. This shouldn't be a problem since we don't ++ * expect exported BOs to be marked as purgeable. ++ */ ++ ret = vc4_bo_inc_usecnt(bo); ++ if (ret) { ++ DRM_ERROR("Failed to increment BO usecnt\n"); ++ return ERR_PTR(ret); ++ } ++ ++ dmabuf = drm_gem_prime_export(dev, obj, flags); ++ if (IS_ERR(dmabuf)) ++ vc4_bo_dec_usecnt(bo); ++ ++ return dmabuf; ++} ++ ++int vc4_fault(struct vm_fault *vmf) ++{ ++ struct vm_area_struct *vma = vmf->vma; ++ struct drm_gem_object *obj = vma->vm_private_data; ++ struct vc4_bo *bo = to_vc4_bo(obj); ++ ++ /* The only reason we would end up here is when user-space accesses ++ * BO's memory after it's been purged. ++ */ ++ mutex_lock(&bo->madv_lock); ++ WARN_ON(bo->madv != __VC4_MADV_PURGED); ++ mutex_unlock(&bo->madv_lock); ++ ++ return VM_FAULT_SIGBUS; + } + + int vc4_mmap(struct file *filp, struct vm_area_struct *vma) + { + struct drm_gem_object *gem_obj; ++ unsigned long vm_pgoff; + struct vc4_bo *bo; + int ret; + +@@ -507,16 +754,36 @@ int vc4_mmap(struct file *filp, struct vm_area_struct *vma) + return -EINVAL; + } + ++ if (bo->madv != VC4_MADV_WILLNEED) { ++ DRM_DEBUG("mmaping of %s BO not allowed\n", ++ bo->madv == VC4_MADV_DONTNEED ? ++ "purgeable" : "purged"); ++ return -EINVAL; ++ } ++ + /* + * Clear the VM_PFNMAP flag that was set by drm_gem_mmap(), and set the + * vm_pgoff (used as a fake buffer offset by DRM) to 0 as we want to map + * the whole buffer. + */ + vma->vm_flags &= ~VM_PFNMAP; +- vma->vm_pgoff = 0; + ++ /* This ->vm_pgoff dance is needed to make all parties happy: ++ * - dma_mmap_wc() uses ->vm_pgoff as an offset within the allocated ++ * mem-region, hence the need to set it to zero (the value set by ++ * the DRM core is a virtual offset encoding the GEM object-id) ++ * - the mmap() core logic needs ->vm_pgoff to be restored to its ++ * initial value before returning from this function because it ++ * encodes the offset of this GEM in the dev->anon_inode pseudo-file ++ * and this information will be used when we invalidate userspace ++ * mappings with drm_vma_node_unmap() (called from vc4_gem_purge()). ++ */ ++ vm_pgoff = vma->vm_pgoff; ++ vma->vm_pgoff = 0; + ret = dma_mmap_wc(bo->base.base.dev->dev, vma, bo->base.vaddr, + bo->base.paddr, vma->vm_end - vma->vm_start); ++ vma->vm_pgoff = vm_pgoff; ++ + if (ret) + drm_gem_vm_close(vma); + +@@ -580,6 +847,8 @@ int vc4_create_bo_ioctl(struct drm_device *dev, void *data, + if (IS_ERR(bo)) + return PTR_ERR(bo); + ++ bo->madv = VC4_MADV_WILLNEED; ++ + ret = drm_gem_handle_create(file_priv, &bo->base.base, &args->handle); + drm_gem_object_put_unlocked(&bo->base.base); + +@@ -633,6 +902,8 @@ vc4_create_shader_bo_ioctl(struct drm_device *dev, void *data, + if (IS_ERR(bo)) + return PTR_ERR(bo); + ++ bo->madv = VC4_MADV_WILLNEED; ++ + if (copy_from_user(bo->base.vaddr, + (void __user *)(uintptr_t)args->data, + args->size)) { +diff --git a/drivers/gpu/drm/vc4/vc4_drv.c b/drivers/gpu/drm/vc4/vc4_drv.c +index 8555069607e1f3b735be3132320dacef2e66e8f8..982ec1bb3f01bec7b97dec0d8035163ae2c8625f 100644 +--- a/drivers/gpu/drm/vc4/vc4_drv.c ++++ b/drivers/gpu/drm/vc4/vc4_drv.c +@@ -100,6 +100,7 @@ static int vc4_get_param_ioctl(struct drm_device *dev, void *data, + case DRM_VC4_PARAM_SUPPORTS_ETC1: + case DRM_VC4_PARAM_SUPPORTS_THREADED_FS: + case DRM_VC4_PARAM_SUPPORTS_FIXED_RCL_ORDER: ++ case DRM_VC4_PARAM_SUPPORTS_MADVISE: + args->value = true; + break; + default: +@@ -117,6 +118,12 @@ static void vc4_lastclose(struct drm_device *dev) + drm_fbdev_cma_restore_mode(vc4->fbdev); + } + ++static const struct vm_operations_struct vc4_vm_ops = { ++ .fault = vc4_fault, ++ .open = drm_gem_vm_open, ++ .close = drm_gem_vm_close, ++}; ++ + static const struct file_operations vc4_drm_fops = { + .owner = THIS_MODULE, + .open = drm_open, +@@ -142,6 +149,7 @@ static const struct drm_ioctl_desc vc4_drm_ioctls[] = { + DRM_IOCTL_DEF_DRV(VC4_SET_TILING, vc4_set_tiling_ioctl, DRM_RENDER_ALLOW), + DRM_IOCTL_DEF_DRV(VC4_GET_TILING, vc4_get_tiling_ioctl, DRM_RENDER_ALLOW), + DRM_IOCTL_DEF_DRV(VC4_LABEL_BO, vc4_label_bo_ioctl, DRM_RENDER_ALLOW), ++ DRM_IOCTL_DEF_DRV(VC4_GEM_MADVISE, vc4_gem_madvise_ioctl, DRM_RENDER_ALLOW), + }; + + static struct drm_driver vc4_drm_driver = { +@@ -166,7 +174,7 @@ static struct drm_driver vc4_drm_driver = { + + .gem_create_object = vc4_create_object, + .gem_free_object_unlocked = vc4_free_object, +- .gem_vm_ops = &drm_gem_cma_vm_ops, ++ .gem_vm_ops = &vc4_vm_ops, + + .prime_handle_to_fd = drm_gem_prime_handle_to_fd, + .prime_fd_to_handle = drm_gem_prime_fd_to_handle, +diff --git a/drivers/gpu/drm/vc4/vc4_drv.h b/drivers/gpu/drm/vc4/vc4_drv.h +index 9d5e35ea5a7c9f134ec6e661b0056b47df9719ef..0d71831571ea68526d26310daf874b766832e73e 100644 +--- a/drivers/gpu/drm/vc4/vc4_drv.h ++++ b/drivers/gpu/drm/vc4/vc4_drv.h +@@ -77,6 +77,19 @@ struct vc4_dev { + /* Protects bo_cache and bo_labels. */ + struct mutex bo_lock; + ++ /* Purgeable BO pool. All BOs in this pool can have their memory ++ * reclaimed if the driver is unable to allocate new BOs. We also ++ * keep stats related to the purge mechanism here. ++ */ ++ struct { ++ struct list_head list; ++ unsigned int num; ++ size_t size; ++ unsigned int purged_num; ++ size_t purged_size; ++ struct mutex lock; ++ } purgeable; ++ + uint64_t dma_fence_context; + + /* Sequence number for the last job queued in bin_job_list. +@@ -195,6 +208,16 @@ struct vc4_bo { + * for user-allocated labels. + */ + int label; ++ ++ /* Count the number of active users. This is needed to determine ++ * whether we can move the BO to the purgeable list or not (when the BO ++ * is used by the GPU or the display engine we can't purge it). ++ */ ++ refcount_t usecnt; ++ ++ /* Store purgeable/purged state here */ ++ u32 madv; ++ struct mutex madv_lock; + }; + + static inline struct vc4_bo * +@@ -506,6 +529,7 @@ int vc4_get_hang_state_ioctl(struct drm_device *dev, void *data, + struct drm_file *file_priv); + int vc4_label_bo_ioctl(struct drm_device *dev, void *data, + struct drm_file *file_priv); ++int vc4_fault(struct vm_fault *vmf); + int vc4_mmap(struct file *filp, struct vm_area_struct *vma); + struct reservation_object *vc4_prime_res_obj(struct drm_gem_object *obj); + int vc4_prime_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma); +@@ -516,6 +540,10 @@ void *vc4_prime_vmap(struct drm_gem_object *obj); + int vc4_bo_cache_init(struct drm_device *dev); + void vc4_bo_cache_destroy(struct drm_device *dev); + int vc4_bo_stats_debugfs(struct seq_file *m, void *arg); ++int vc4_bo_inc_usecnt(struct vc4_bo *bo); ++void vc4_bo_dec_usecnt(struct vc4_bo *bo); ++void vc4_bo_add_to_purgeable_pool(struct vc4_bo *bo); ++void vc4_bo_remove_from_purgeable_pool(struct vc4_bo *bo); + + /* vc4_crtc.c */ + extern struct platform_driver vc4_crtc_driver; +@@ -564,6 +592,8 @@ void vc4_job_handle_completed(struct vc4_dev *vc4); + int vc4_queue_seqno_cb(struct drm_device *dev, + struct vc4_seqno_cb *cb, uint64_t seqno, + void (*func)(struct vc4_seqno_cb *cb)); ++int vc4_gem_madvise_ioctl(struct drm_device *dev, void *data, ++ struct drm_file *file_priv); + + /* vc4_hdmi.c */ + extern struct platform_driver vc4_hdmi_driver; +diff --git a/drivers/gpu/drm/vc4/vc4_gem.c b/drivers/gpu/drm/vc4/vc4_gem.c +index e554cbf18a55c30e6dce1ef8bf3a5a60a6b73407..277707cc97a0d52759a5f6a6feee17445d065789 100644 +--- a/drivers/gpu/drm/vc4/vc4_gem.c ++++ b/drivers/gpu/drm/vc4/vc4_gem.c +@@ -188,11 +188,22 @@ vc4_save_hang_state(struct drm_device *dev) + continue; + + for (j = 0; j < exec[i]->bo_count; j++) { ++ bo = to_vc4_bo(&exec[i]->bo[j]->base); ++ ++ /* Retain BOs just in case they were marked purgeable. ++ * This prevents the BO from being purged before ++ * someone had a chance to dump the hang state. ++ */ ++ WARN_ON(!refcount_read(&bo->usecnt)); ++ refcount_inc(&bo->usecnt); + drm_gem_object_get(&exec[i]->bo[j]->base); + kernel_state->bo[j + prev_idx] = &exec[i]->bo[j]->base; + } + + list_for_each_entry(bo, &exec[i]->unref_list, unref_head) { ++ /* No need to retain BOs coming from the ->unref_list ++ * because they are naturally unpurgeable. ++ */ + drm_gem_object_get(&bo->base.base); + kernel_state->bo[j + prev_idx] = &bo->base.base; + j++; +@@ -233,6 +244,26 @@ vc4_save_hang_state(struct drm_device *dev) + state->fdbgs = V3D_READ(V3D_FDBGS); + state->errstat = V3D_READ(V3D_ERRSTAT); + ++ /* We need to turn purgeable BOs into unpurgeable ones so that ++ * userspace has a chance to dump the hang state before the kernel ++ * decides to purge those BOs. ++ * Note that BO consistency at dump time cannot be guaranteed. For ++ * example, if the owner of these BOs decides to re-use them or mark ++ * them purgeable again there's nothing we can do to prevent it. ++ */ ++ for (i = 0; i < kernel_state->user_state.bo_count; i++) { ++ struct vc4_bo *bo = to_vc4_bo(kernel_state->bo[i]); ++ ++ if (bo->madv == __VC4_MADV_NOTSUPP) ++ continue; ++ ++ mutex_lock(&bo->madv_lock); ++ if (!WARN_ON(bo->madv == __VC4_MADV_PURGED)) ++ bo->madv = VC4_MADV_WILLNEED; ++ refcount_dec(&bo->usecnt); ++ mutex_unlock(&bo->madv_lock); ++ } ++ + spin_lock_irqsave(&vc4->job_lock, irqflags); + if (vc4->hang_state) { + spin_unlock_irqrestore(&vc4->job_lock, irqflags); +@@ -639,9 +670,6 @@ vc4_queue_submit(struct drm_device *dev, struct vc4_exec_info *exec, + * The command validator needs to reference BOs by their index within + * the submitted job's BO list. This does the validation of the job's + * BO list and reference counting for the lifetime of the job. +- * +- * Note that this function doesn't need to unreference the BOs on +- * failure, because that will happen at vc4_complete_exec() time. + */ + static int + vc4_cl_lookup_bos(struct drm_device *dev, +@@ -693,16 +721,47 @@ vc4_cl_lookup_bos(struct drm_device *dev, + DRM_DEBUG("Failed to look up GEM BO %d: %d\n", + i, handles[i]); + ret = -EINVAL; +- spin_unlock(&file_priv->table_lock); +- goto fail; ++ break; + } ++ + drm_gem_object_get(bo); + exec->bo[i] = (struct drm_gem_cma_object *)bo; + } + spin_unlock(&file_priv->table_lock); + ++ if (ret) ++ goto fail_put_bo; ++ ++ for (i = 0; i < exec->bo_count; i++) { ++ ret = vc4_bo_inc_usecnt(to_vc4_bo(&exec->bo[i]->base)); ++ if (ret) ++ goto fail_dec_usecnt; ++ } ++ ++ kvfree(handles); ++ return 0; ++ ++fail_dec_usecnt: ++ /* Decrease usecnt on acquired objects. ++ * We cannot rely on vc4_complete_exec() to release resources here, ++ * because vc4_complete_exec() has no information about which BO has ++ * had its ->usecnt incremented. ++ * To make things easier we just free everything explicitly and set ++ * exec->bo to NULL so that vc4_complete_exec() skips the 'BO release' ++ * step. ++ */ ++ for (i-- ; i >= 0; i--) ++ vc4_bo_dec_usecnt(to_vc4_bo(&exec->bo[i]->base)); ++ ++fail_put_bo: ++ /* Release any reference to acquired objects. */ ++ for (i = 0; i < exec->bo_count && exec->bo[i]; i++) ++ drm_gem_object_put_unlocked(&exec->bo[i]->base); ++ + fail: + kvfree(handles); ++ kvfree(exec->bo); ++ exec->bo = NULL; + return ret; + } + +@@ -835,8 +894,12 @@ vc4_complete_exec(struct drm_device *dev, struct vc4_exec_info *exec) + } + + if (exec->bo) { +- for (i = 0; i < exec->bo_count; i++) ++ for (i = 0; i < exec->bo_count; i++) { ++ struct vc4_bo *bo = to_vc4_bo(&exec->bo[i]->base); ++ ++ vc4_bo_dec_usecnt(bo); + drm_gem_object_put_unlocked(&exec->bo[i]->base); ++ } + kvfree(exec->bo); + } + +@@ -1100,6 +1163,9 @@ vc4_gem_init(struct drm_device *dev) + INIT_WORK(&vc4->job_done_work, vc4_job_done_work); + + mutex_init(&vc4->power_lock); ++ ++ INIT_LIST_HEAD(&vc4->purgeable.list); ++ mutex_init(&vc4->purgeable.lock); + } + + void +@@ -1123,3 +1189,81 @@ vc4_gem_destroy(struct drm_device *dev) + if (vc4->hang_state) + vc4_free_hang_state(dev, vc4->hang_state); + } ++ ++int vc4_gem_madvise_ioctl(struct drm_device *dev, void *data, ++ struct drm_file *file_priv) ++{ ++ struct drm_vc4_gem_madvise *args = data; ++ struct drm_gem_object *gem_obj; ++ struct vc4_bo *bo; ++ int ret; ++ ++ switch (args->madv) { ++ case VC4_MADV_DONTNEED: ++ case VC4_MADV_WILLNEED: ++ break; ++ default: ++ return -EINVAL; ++ } ++ ++ if (args->pad != 0) ++ return -EINVAL; ++ ++ gem_obj = drm_gem_object_lookup(file_priv, args->handle); ++ if (!gem_obj) { ++ DRM_DEBUG("Failed to look up GEM BO %d\n", args->handle); ++ return -ENOENT; ++ } ++ ++ bo = to_vc4_bo(gem_obj); ++ ++ /* Only BOs exposed to userspace can be purged. */ ++ if (bo->madv == __VC4_MADV_NOTSUPP) { ++ DRM_DEBUG("madvise not supported on this BO\n"); ++ ret = -EINVAL; ++ goto out_put_gem; ++ } ++ ++ /* Not sure it's safe to purge imported BOs. Let's just assume it's ++ * not until proven otherwise. ++ */ ++ if (gem_obj->import_attach) { ++ DRM_DEBUG("madvise not supported on imported BOs\n"); ++ ret = -EINVAL; ++ goto out_put_gem; ++ } ++ ++ mutex_lock(&bo->madv_lock); ++ ++ if (args->madv == VC4_MADV_DONTNEED && bo->madv == VC4_MADV_WILLNEED && ++ !refcount_read(&bo->usecnt)) { ++ /* If the BO is about to be marked as purgeable, is not used ++ * and is not already purgeable or purged, add it to the ++ * purgeable list. ++ */ ++ vc4_bo_add_to_purgeable_pool(bo); ++ } else if (args->madv == VC4_MADV_WILLNEED && ++ bo->madv == VC4_MADV_DONTNEED && ++ !refcount_read(&bo->usecnt)) { ++ /* The BO has not been purged yet, just remove it from ++ * the purgeable list. ++ */ ++ vc4_bo_remove_from_purgeable_pool(bo); ++ } ++ ++ /* Save the purged state. */ ++ args->retained = bo->madv != __VC4_MADV_PURGED; ++ ++ /* Update internal madv state only if the bo was not purged. */ ++ if (bo->madv != __VC4_MADV_PURGED) ++ bo->madv = args->madv; ++ ++ mutex_unlock(&bo->madv_lock); ++ ++ ret = 0; ++ ++out_put_gem: ++ drm_gem_object_put_unlocked(gem_obj); ++ ++ return ret; ++} +diff --git a/drivers/gpu/drm/vc4/vc4_plane.c b/drivers/gpu/drm/vc4/vc4_plane.c +index 4ad0b9fcae99f74fb89d09dd52d9ffe5be123e45..e2b3cd6d885b080a3c3077cc160a549bec9b0330 100644 +--- a/drivers/gpu/drm/vc4/vc4_plane.c ++++ b/drivers/gpu/drm/vc4/vc4_plane.c +@@ -23,6 +23,7 @@ + #include + #include + ++#include "uapi/drm/vc4_drm.h" + #include "vc4_drv.h" + #include "vc4_regs.h" + +@@ -774,21 +775,40 @@ static int vc4_prepare_fb(struct drm_plane *plane, + { + struct vc4_bo *bo; + struct dma_fence *fence; ++ int ret; + + if ((plane->state->fb == state->fb) || !state->fb) + return 0; + + bo = to_vc4_bo(&drm_fb_cma_get_gem_obj(state->fb, 0)->base); ++ ++ ret = vc4_bo_inc_usecnt(bo); ++ if (ret) ++ return ret; ++ + fence = reservation_object_get_excl_rcu(bo->resv); + drm_atomic_set_fence_for_plane(state, fence); + + return 0; + } + ++static void vc4_cleanup_fb(struct drm_plane *plane, ++ struct drm_plane_state *state) ++{ ++ struct vc4_bo *bo; ++ ++ if (plane->state->fb == state->fb || !state->fb) ++ return; ++ ++ bo = to_vc4_bo(&drm_fb_cma_get_gem_obj(state->fb, 0)->base); ++ vc4_bo_dec_usecnt(bo); ++} ++ + static const struct drm_plane_helper_funcs vc4_plane_helper_funcs = { + .atomic_check = vc4_plane_atomic_check, + .atomic_update = vc4_plane_atomic_update, + .prepare_fb = vc4_prepare_fb, ++ .cleanup_fb = vc4_cleanup_fb, + }; + + static void vc4_plane_destroy(struct drm_plane *plane) +diff --git a/include/uapi/drm/vc4_drm.h b/include/uapi/drm/vc4_drm.h +index afae870049636e9c5db9a10a03d40dc3beb4c6ee..52263b575bdc4e5d9a6c6e628b12918eba32d918 100644 +--- a/include/uapi/drm/vc4_drm.h ++++ b/include/uapi/drm/vc4_drm.h +@@ -41,6 +41,7 @@ extern "C" { + #define DRM_VC4_SET_TILING 0x08 + #define DRM_VC4_GET_TILING 0x09 + #define DRM_VC4_LABEL_BO 0x0a ++#define DRM_VC4_GEM_MADVISE 0x0b + + #define DRM_IOCTL_VC4_SUBMIT_CL DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_SUBMIT_CL, struct drm_vc4_submit_cl) + #define DRM_IOCTL_VC4_WAIT_SEQNO DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_WAIT_SEQNO, struct drm_vc4_wait_seqno) +@@ -53,6 +54,7 @@ extern "C" { + #define DRM_IOCTL_VC4_SET_TILING DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_SET_TILING, struct drm_vc4_set_tiling) + #define DRM_IOCTL_VC4_GET_TILING DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_GET_TILING, struct drm_vc4_get_tiling) + #define DRM_IOCTL_VC4_LABEL_BO DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_LABEL_BO, struct drm_vc4_label_bo) ++#define DRM_IOCTL_VC4_GEM_MADVISE DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_GEM_MADVISE, struct drm_vc4_gem_madvise) + + struct drm_vc4_submit_rcl_surface { + __u32 hindex; /* Handle index, or ~0 if not present. */ +@@ -305,6 +307,7 @@ struct drm_vc4_get_hang_state { + #define DRM_VC4_PARAM_SUPPORTS_ETC1 4 + #define DRM_VC4_PARAM_SUPPORTS_THREADED_FS 5 + #define DRM_VC4_PARAM_SUPPORTS_FIXED_RCL_ORDER 6 ++#define DRM_VC4_PARAM_SUPPORTS_MADVISE 7 + + struct drm_vc4_get_param { + __u32 param; +@@ -333,6 +336,22 @@ struct drm_vc4_label_bo { + __u64 name; + }; + ++/* ++ * States prefixed with '__' are internal states and cannot be passed to the ++ * DRM_IOCTL_VC4_GEM_MADVISE ioctl. ++ */ ++#define VC4_MADV_WILLNEED 0 ++#define VC4_MADV_DONTNEED 1 ++#define __VC4_MADV_PURGED 2 ++#define __VC4_MADV_NOTSUPP 3 ++ ++struct drm_vc4_gem_madvise { ++ __u32 handle; ++ __u32 madv; ++ __u32 retained; ++ __u32 pad; ++}; ++ + #if defined(__cplusplus) + } + #endif + +From 94bbbc00be9d9f2e26faaf6859244204ad04958a Mon Sep 17 00:00:00 2001 +From: Boris Brezillon +Date: Wed, 22 Nov 2017 21:39:28 +0100 +Subject: [PATCH 190/201] drm/vc4: Fix false positive WARN() backtrace on + refcount_inc() usage + +With CONFIG_REFCOUNT_FULL enabled, refcount_inc() complains when it's +passed a refcount object that has its counter set to 0. In this driver, +this is a valid use case since we want to increment ->usecnt only when +the BO object starts to be used by real HW components and this is +definitely not the case when the BO is created. + +Fix the problem by using refcount_inc_not_zero() instead of +refcount_inc() and fallback to refcount_set(1) when +refcount_inc_not_zero() returns false. Note that this 2-steps operation +is not racy here because the whole section is protected by a mutex +which guarantees that the counter does not change between the +refcount_inc_not_zero() and refcount_set() calls. + +Fixes: b9f19259b84d ("drm/vc4: Add the DRM_IOCTL_VC4_GEM_MADVISE ioctl") +Reported-by: Stefan Wahren +Signed-off-by: Boris Brezillon +Acked-by: Eric Anholt +Link: https://patchwork.freedesktop.org/patch/msgid/20171122203928.28135-1-boris.brezillon@free-electrons.com +(cherry picked from commit 5bfd40139d55790cbc8e56ad1ce4f974f1fa186d) +--- + drivers/gpu/drm/vc4/vc4_bo.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/drivers/gpu/drm/vc4/vc4_bo.c b/drivers/gpu/drm/vc4/vc4_bo.c +index 01a53ba304f89769ccedf66f2cba361f809b54c8..55f03ad827ed82d967bcdb3c8f060226aac2036d 100644 +--- a/drivers/gpu/drm/vc4/vc4_bo.c ++++ b/drivers/gpu/drm/vc4/vc4_bo.c +@@ -637,7 +637,8 @@ int vc4_bo_inc_usecnt(struct vc4_bo *bo) + mutex_lock(&bo->madv_lock); + switch (bo->madv) { + case VC4_MADV_WILLNEED: +- refcount_inc(&bo->usecnt); ++ if (!refcount_inc_not_zero(&bo->usecnt)) ++ refcount_set(&bo->usecnt, 1); + ret = 0; + break; + case VC4_MADV_DONTNEED: + +From 4eebaa2a9e1d93784ba5f33b048af54969d669db Mon Sep 17 00:00:00 2001 +From: Eric Anholt +Date: Fri, 13 Oct 2017 17:12:55 -0700 +Subject: [PATCH 191/201] drm/vc4: Fix sleeps during the IRQ handler for DSI + transactions. + +VC4's DSI1 has a bug where the AXI connection is broken for 32-bit +writes from the CPU, so we use the DMA engine to DMA 32-bit values +into registers instead. That sleeps, so we can't do it from the top +half. + +As a solution, use an interrupt thread so that all our writes happen +when sleeping is is allowed. + +v2: Use IRQF_ONESHOT (suggested by Boris) +v3: Style nitpicks. + +Signed-off-by: Eric Anholt +Link: https://patchwork.freedesktop.org/patch/msgid/20171014001255.32005-1-eric@anholt.net +Reviewed-by: Boris Brezillon (v2) +(cherry picked from commit af0c8c10564aac5b6d67308129ec09c4ad5db476) +--- + drivers/gpu/drm/vc4/vc4_dsi.c | 32 ++++++++++++++++++++++++++++++-- + 1 file changed, 30 insertions(+), 2 deletions(-) + +diff --git a/drivers/gpu/drm/vc4/vc4_dsi.c b/drivers/gpu/drm/vc4/vc4_dsi.c +index 04796d7d0fdbb441c09ecbd9b4fbce41a7831534..9a1a559ba287c460b274c6a279883e69c62f7bdb 100644 +--- a/drivers/gpu/drm/vc4/vc4_dsi.c ++++ b/drivers/gpu/drm/vc4/vc4_dsi.c +@@ -1383,6 +1383,27 @@ static void dsi_handle_error(struct vc4_dsi *dsi, + *ret = IRQ_HANDLED; + } + ++/* ++ * Initial handler for port 1 where we need the reg_dma workaround. ++ * The register DMA writes sleep, so we can't do it in the top half. ++ * Instead we use IRQF_ONESHOT so that the IRQ gets disabled in the ++ * parent interrupt contrller until our interrupt thread is done. ++ */ ++static irqreturn_t vc4_dsi_irq_defer_to_thread_handler(int irq, void *data) ++{ ++ struct vc4_dsi *dsi = data; ++ u32 stat = DSI_PORT_READ(INT_STAT); ++ ++ if (!stat) ++ return IRQ_NONE; ++ ++ return IRQ_WAKE_THREAD; ++} ++ ++/* ++ * Normal IRQ handler for port 0, or the threaded IRQ handler for port ++ * 1 where we need the reg_dma workaround. ++ */ + static irqreturn_t vc4_dsi_irq_handler(int irq, void *data) + { + struct vc4_dsi *dsi = data; +@@ -1566,8 +1587,15 @@ static int vc4_dsi_bind(struct device *dev, struct device *master, void *data) + /* Clear any existing interrupt state. */ + DSI_PORT_WRITE(INT_STAT, DSI_PORT_READ(INT_STAT)); + +- ret = devm_request_irq(dev, platform_get_irq(pdev, 0), +- vc4_dsi_irq_handler, 0, "vc4 dsi", dsi); ++ if (dsi->reg_dma_mem) ++ ret = devm_request_threaded_irq(dev, platform_get_irq(pdev, 0), ++ vc4_dsi_irq_defer_to_thread_handler, ++ vc4_dsi_irq_handler, ++ IRQF_ONESHOT, ++ "vc4 dsi", dsi); ++ else ++ ret = devm_request_irq(dev, platform_get_irq(pdev, 0), ++ vc4_dsi_irq_handler, 0, "vc4 dsi", dsi); + if (ret) { + if (ret != -EPROBE_DEFER) + dev_err(dev, "Failed to get interrupt: %d\n", ret); + +From 501ce595625354292dddfa3cd32c519ed7f6fd5b Mon Sep 17 00:00:00 2001 +From: Kees Cook +Date: Tue, 24 Oct 2017 08:16:48 -0700 +Subject: [PATCH 192/201] drm/vc4: Convert timers to use timer_setup() + +In preparation for unconditionally passing the struct timer_list pointer to +all timer callbacks, switch to using the new timer_setup() and from_timer() +to pass the timer pointer explicitly. + +Cc: Eric Anholt +Cc: David Airlie +Cc: dri-devel@lists.freedesktop.org +Signed-off-by: Kees Cook +Signed-off-by: Eric Anholt +Link: https://patchwork.freedesktop.org/patch/msgid/20171024151648.GA104538@beast +Reviewed-by: Eric Anholt +(cherry picked from commit 33b54ea1109721dcd07d3f7ee753c07482021eed) +--- + drivers/gpu/drm/vc4/vc4_bo.c | 9 +++------ + drivers/gpu/drm/vc4/vc4_gem.c | 10 ++++------ + 2 files changed, 7 insertions(+), 12 deletions(-) + +diff --git a/drivers/gpu/drm/vc4/vc4_bo.c b/drivers/gpu/drm/vc4/vc4_bo.c +index 55f03ad827ed82d967bcdb3c8f060226aac2036d..2b587e5b4628fc62cbadd7e99466032438d7e5c3 100644 +--- a/drivers/gpu/drm/vc4/vc4_bo.c ++++ b/drivers/gpu/drm/vc4/vc4_bo.c +@@ -675,10 +675,9 @@ void vc4_bo_dec_usecnt(struct vc4_bo *bo) + mutex_unlock(&bo->madv_lock); + } + +-static void vc4_bo_cache_time_timer(unsigned long data) ++static void vc4_bo_cache_time_timer(struct timer_list *t) + { +- struct drm_device *dev = (struct drm_device *)data; +- struct vc4_dev *vc4 = to_vc4_dev(dev); ++ struct vc4_dev *vc4 = from_timer(vc4, t, bo_cache.time_timer); + + schedule_work(&vc4->bo_cache.time_work); + } +@@ -1040,9 +1039,7 @@ int vc4_bo_cache_init(struct drm_device *dev) + INIT_LIST_HEAD(&vc4->bo_cache.time_list); + + INIT_WORK(&vc4->bo_cache.time_work, vc4_bo_cache_time_work); +- setup_timer(&vc4->bo_cache.time_timer, +- vc4_bo_cache_time_timer, +- (unsigned long)dev); ++ timer_setup(&vc4->bo_cache.time_timer, vc4_bo_cache_time_timer, 0); + + return 0; + } +diff --git a/drivers/gpu/drm/vc4/vc4_gem.c b/drivers/gpu/drm/vc4/vc4_gem.c +index 277707cc97a0d52759a5f6a6feee17445d065789..638540943c61a5e095c87be8d2b2bf543ea933b1 100644 +--- a/drivers/gpu/drm/vc4/vc4_gem.c ++++ b/drivers/gpu/drm/vc4/vc4_gem.c +@@ -312,10 +312,10 @@ vc4_reset_work(struct work_struct *work) + } + + static void +-vc4_hangcheck_elapsed(unsigned long data) ++vc4_hangcheck_elapsed(struct timer_list *t) + { +- struct drm_device *dev = (struct drm_device *)data; +- struct vc4_dev *vc4 = to_vc4_dev(dev); ++ struct vc4_dev *vc4 = from_timer(vc4, t, hangcheck.timer); ++ struct drm_device *dev = vc4->dev; + uint32_t ct0ca, ct1ca; + unsigned long irqflags; + struct vc4_exec_info *bin_exec, *render_exec; +@@ -1156,9 +1156,7 @@ vc4_gem_init(struct drm_device *dev) + spin_lock_init(&vc4->job_lock); + + INIT_WORK(&vc4->hangcheck.reset_work, vc4_reset_work); +- setup_timer(&vc4->hangcheck.timer, +- vc4_hangcheck_elapsed, +- (unsigned long)dev); ++ timer_setup(&vc4->hangcheck.timer, vc4_hangcheck_elapsed, 0); + + INIT_WORK(&vc4->job_done_work, vc4_job_done_work); + + +From 4d3059fd708947186445b986b46d8cfdd9a8a782 Mon Sep 17 00:00:00 2001 +From: Stefan Schake +Date: Fri, 10 Nov 2017 02:05:06 +0100 +Subject: [PATCH 193/201] drm/vc4: Account for interrupts in flight + +Synchronously disable the IRQ to make the following cancel_work_sync +invocation effective. + +An interrupt in flight could enqueue further overflow mem work. As we +free the binner BO immediately following vc4_irq_uninstall this caused +a NULL pointer dereference in the work callback vc4_overflow_mem_work. + +Link: https://github.com/anholt/linux/issues/114 +Signed-off-by: Stefan Schake +Fixes: d5b1a78a772f ("drm/vc4: Add support for drawing 3D frames.") +Signed-off-by: Eric Anholt +Reviewed-by: Eric Anholt +Link: https://patchwork.freedesktop.org/patch/msgid/1510275907-993-2-git-send-email-stschake@gmail.com +(cherry picked from commit 253696ccd613fbdaa5aba1de44c461a058e0a114) +--- + drivers/gpu/drm/vc4/vc4_irq.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/drivers/gpu/drm/vc4/vc4_irq.c b/drivers/gpu/drm/vc4/vc4_irq.c +index fc1fc43a924dcc0c44a7a13858bfb53ccdf8fe32..26eddbb628936b91f20a000c405bfbc536324e89 100644 +--- a/drivers/gpu/drm/vc4/vc4_irq.c ++++ b/drivers/gpu/drm/vc4/vc4_irq.c +@@ -209,6 +209,9 @@ vc4_irq_postinstall(struct drm_device *dev) + { + struct vc4_dev *vc4 = to_vc4_dev(dev); + ++ /* Undo the effects of a previous vc4_irq_uninstall. */ ++ enable_irq(dev->irq); ++ + /* Enable both the render done and out of memory interrupts. */ + V3D_WRITE(V3D_INTENA, V3D_DRIVER_IRQS); + +@@ -226,6 +229,9 @@ vc4_irq_uninstall(struct drm_device *dev) + /* Clear any pending interrupts we might have left. */ + V3D_WRITE(V3D_INTCTL, V3D_DRIVER_IRQS); + ++ /* Finish any interrupt handler still in flight. */ ++ disable_irq(dev->irq); ++ + cancel_work_sync(&vc4->overflow_mem_work); + } + + +From dabedf91bcfc0b34ea482b4a720d4d0ff2cfebdb Mon Sep 17 00:00:00 2001 +From: Stefan Schake +Date: Fri, 29 Dec 2017 17:05:43 +0100 +Subject: [PATCH 194/201] drm/vc4: Move IRQ enable to PM path + +We were calling enable_irq on bind, where it was already enabled previously +by the IRQ helper. Additionally, dev->irq is not set correctly until after +postinstall and so was always zero here, triggering a warning in 4.15. +Fix both by moving the enable to the power management resume path, where we +know there was a previous disable invocation during suspend. + +Fixes: 253696ccd613 ("drm/vc4: Account for interrupts in flight") +Signed-off-by: Stefan Schake +Signed-off-by: Eric Anholt +Link: https://patchwork.freedesktop.org/patch/msgid/1514563543-32511-1-git-send-email-stschake@gmail.com +Tested-by: Stefan Wahren +Reviewed-by: Eric Anholt +(cherry picked from commit ce9caf2f79a5aa170a4b6456a03db639eed9c988) +--- + drivers/gpu/drm/vc4/vc4_irq.c | 3 --- + drivers/gpu/drm/vc4/vc4_v3d.c | 3 +++ + 2 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/drivers/gpu/drm/vc4/vc4_irq.c b/drivers/gpu/drm/vc4/vc4_irq.c +index 26eddbb628936b91f20a000c405bfbc536324e89..3dd62d75f5319dbffcd9d27ea6f60927d193eb92 100644 +--- a/drivers/gpu/drm/vc4/vc4_irq.c ++++ b/drivers/gpu/drm/vc4/vc4_irq.c +@@ -209,9 +209,6 @@ vc4_irq_postinstall(struct drm_device *dev) + { + struct vc4_dev *vc4 = to_vc4_dev(dev); + +- /* Undo the effects of a previous vc4_irq_uninstall. */ +- enable_irq(dev->irq); +- + /* Enable both the render done and out of memory interrupts. */ + V3D_WRITE(V3D_INTENA, V3D_DRIVER_IRQS); + +diff --git a/drivers/gpu/drm/vc4/vc4_v3d.c b/drivers/gpu/drm/vc4/vc4_v3d.c +index 622cd43840b8c53588396b6d1d82b5d234a69113..493f392b3a0a90e70820d3582c0847ebe3cc0bd7 100644 +--- a/drivers/gpu/drm/vc4/vc4_v3d.c ++++ b/drivers/gpu/drm/vc4/vc4_v3d.c +@@ -327,6 +327,9 @@ static int vc4_v3d_runtime_resume(struct device *dev) + return ret; + + vc4_v3d_init_hw(vc4->dev); ++ ++ /* We disabled the IRQ as part of vc4_irq_uninstall in suspend. */ ++ enable_irq(vc4->dev->irq); + vc4_irq_postinstall(vc4->dev); + + return 0; + +From 02cde8c33b3d6732cb3273cd793d4d82738cedf2 Mon Sep 17 00:00:00 2001 +From: Boris BREZILLON +Date: Wed, 1 Nov 2017 10:57:31 +0100 +Subject: [PATCH 195/201] drm/vc4: Fix wrong printk format in + vc4_bo_stats_debugfs() + +vc4->purgeable.size and vc4->purgeable.purged_size are size_t fields +and should be printed with a %zd specifier. + +Fixes: b9f19259b84d ("drm/vc4: Add the DRM_IOCTL_VC4_GEM_MADVISE ioctl") +Signed-off-by: Boris Brezillon +Reviewed-by: Gustavo Padovan +Reviewed-by: Eric Anholt +Link: https://patchwork.freedesktop.org/patch/msgid/20171101095731.14878-1-boris.brezillon@free-electrons.com +(cherry picked from commit 50f365cde4ffb5ae70c3f02384bbb46698aba65c) +--- + drivers/gpu/drm/vc4/vc4_bo.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/drivers/gpu/drm/vc4/vc4_bo.c b/drivers/gpu/drm/vc4/vc4_bo.c +index 2b587e5b4628fc62cbadd7e99466032438d7e5c3..2decc8e2c79f58aad6ea7626a32a0f26665d23eb 100644 +--- a/drivers/gpu/drm/vc4/vc4_bo.c ++++ b/drivers/gpu/drm/vc4/vc4_bo.c +@@ -88,11 +88,11 @@ int vc4_bo_stats_debugfs(struct seq_file *m, void *unused) + + mutex_lock(&vc4->purgeable.lock); + if (vc4->purgeable.num) +- seq_printf(m, "%30s: %6dkb BOs (%d)\n", "userspace BO cache", ++ seq_printf(m, "%30s: %6zdkb BOs (%d)\n", "userspace BO cache", + vc4->purgeable.size / 1024, vc4->purgeable.num); + + if (vc4->purgeable.purged_num) +- seq_printf(m, "%30s: %6dkb BOs (%d)\n", "total purged BO", ++ seq_printf(m, "%30s: %6zdkb BOs (%d)\n", "total purged BO", + vc4->purgeable.purged_size / 1024, + vc4->purgeable.purged_num); + mutex_unlock(&vc4->purgeable.lock); + +From dc229564cf81b042bd786d76a282f5dfc2cadc2c Mon Sep 17 00:00:00 2001 +From: Eric Anholt +Date: Wed, 20 Sep 2017 15:59:34 -0700 +Subject: [PATCH 196/201] drm/vc4: Reject HDMI modes with too high of clocks. + +Peter Robinson reported issues on Fedora with 4k monitors not having +their modes filtered down to 1920x1080 on Raspberry Pi. + +v2: Fix vc5 typo in place of vc4. + +Cc: Peter Robinson +Signed-off-by: Eric Anholt +Link: https://patchwork.freedesktop.org/patch/msgid/20170920225935.14566-1-eric@anholt.net +Acked-by: Daniel Vetter (v1) +(cherry picked from commit 32e823c63e90f7535ea1cc5311d25c0233e1456d) +--- + drivers/gpu/drm/vc4/vc4_hdmi.c | 15 +++++++++++++++ + 1 file changed, 15 insertions(+) + +diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c +index 0b2088264039131f05c2f09bc9ba84d2d3793e39..8ab20c1e9e69e90b90c7f74640033f932df76ae7 100644 +--- a/drivers/gpu/drm/vc4/vc4_hdmi.c ++++ b/drivers/gpu/drm/vc4/vc4_hdmi.c +@@ -695,7 +695,22 @@ static void vc4_hdmi_encoder_enable(struct drm_encoder *encoder) + } + } + ++static enum drm_mode_status ++vc4_hdmi_encoder_mode_valid(struct drm_encoder *crtc, ++ const struct drm_display_mode *mode) ++{ ++ /* HSM clock must be 108% of the pixel clock. Additionally, ++ * the AXI clock needs to be at least 25% of pixel clock, but ++ * HSM ends up being the limiting factor. ++ */ ++ if (mode->clock > HSM_CLOCK_FREQ / (1000 * 108 / 100)) ++ return MODE_CLOCK_HIGH; ++ ++ return MODE_OK; ++} ++ + static const struct drm_encoder_helper_funcs vc4_hdmi_encoder_helper_funcs = { ++ .mode_valid = vc4_hdmi_encoder_mode_valid, + .disable = vc4_hdmi_encoder_disable, + .enable = vc4_hdmi_encoder_enable, + }; + +From 135bf726b5e10f5c5819eb55053d1992f9baee74 Mon Sep 17 00:00:00 2001 +From: Dave Stevenson +Date: Thu, 16 Nov 2017 14:22:29 +0000 +Subject: [PATCH 197/201] drm/vc4: Add support for DRM_FORMAT_RGB888 and + DRM_FORMAT_BGR888 + +Filling out the list of supported formats based on those the +hardware can support. + +Signed-off-by: Dave Stevenson +Signed-off-by: Eric Anholt +Reviewed-by: Eric Anholt +Link: https://patchwork.freedesktop.org/patch/msgid/b551205d1c33fa49eef2c33ed2d60c5339b2f299.1510841336.git.dave.stevenson@raspberrypi.org +(cherry picked from commit 88f8156fba43d040dc5af42f88db2c53d6c69443) +--- + drivers/gpu/drm/vc4/vc4_plane.c | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/drivers/gpu/drm/vc4/vc4_plane.c b/drivers/gpu/drm/vc4/vc4_plane.c +index e2b3cd6d885b080a3c3077cc160a549bec9b0330..497cb7d50946c6aa8e4d676982902694ff46e113 100644 +--- a/drivers/gpu/drm/vc4/vc4_plane.c ++++ b/drivers/gpu/drm/vc4/vc4_plane.c +@@ -120,6 +120,14 @@ static const struct hvs_format { + .drm = DRM_FORMAT_XRGB1555, .hvs = HVS_PIXEL_FORMAT_RGBA5551, + .pixel_order = HVS_PIXEL_ORDER_ABGR, .has_alpha = false, + }, ++ { ++ .drm = DRM_FORMAT_RGB888, .hvs = HVS_PIXEL_FORMAT_RGB888, ++ .pixel_order = HVS_PIXEL_ORDER_XRGB, .has_alpha = false, ++ }, ++ { ++ .drm = DRM_FORMAT_BGR888, .hvs = HVS_PIXEL_FORMAT_RGB888, ++ .pixel_order = HVS_PIXEL_ORDER_XBGR, .has_alpha = false, ++ }, + { + .drm = DRM_FORMAT_YUV422, + .hvs = HVS_PIXEL_FORMAT_YCBCR_YUV422_3PLANE, + +From 5e7b8dd6089f196e15c331e66669518dc8504bd3 Mon Sep 17 00:00:00 2001 +From: Dave Stevenson +Date: Thu, 16 Nov 2017 14:22:30 +0000 +Subject: [PATCH 198/201] drm/vc4: Use .pixel_order instead of custom + .flip_cbcr + +The hardware has enums for altering the Cr and Cb order, +so use this instead of having a flag which swaps the +order the pointers are presented to the hardware +(that only worked for 3 plane formats anyway). + +Explicitly sets .pixel_order in each case, rather than +relying on then default XYCBCR order being a value 0. + +Signed-off-by: Dave Stevenson +Signed-off-by: Eric Anholt +Reviewed-by: Eric Anholt +Link: https://patchwork.freedesktop.org/patch/msgid/563872b69c1e5df142cb15ebfca7f20056b8a64c.1510841336.git.dave.stevenson@raspberrypi.org +(cherry picked from commit 090cb0c690183be849e2bfa0427220f1e435fa30) +--- + drivers/gpu/drm/vc4/vc4_plane.c | 20 ++++++++------------ + 1 file changed, 8 insertions(+), 12 deletions(-) + +diff --git a/drivers/gpu/drm/vc4/vc4_plane.c b/drivers/gpu/drm/vc4/vc4_plane.c +index 497cb7d50946c6aa8e4d676982902694ff46e113..5c67090e93f5e574de197735f01c6c4dbbdd0180 100644 +--- a/drivers/gpu/drm/vc4/vc4_plane.c ++++ b/drivers/gpu/drm/vc4/vc4_plane.c +@@ -86,7 +86,6 @@ static const struct hvs_format { + u32 hvs; /* HVS_FORMAT_* */ + u32 pixel_order; + bool has_alpha; +- bool flip_cbcr; + } hvs_formats[] = { + { + .drm = DRM_FORMAT_XRGB8888, .hvs = HVS_PIXEL_FORMAT_RGBA8888, +@@ -131,28 +130,32 @@ static const struct hvs_format { + { + .drm = DRM_FORMAT_YUV422, + .hvs = HVS_PIXEL_FORMAT_YCBCR_YUV422_3PLANE, ++ .pixel_order = HVS_PIXEL_ORDER_XYCBCR, + }, + { + .drm = DRM_FORMAT_YVU422, + .hvs = HVS_PIXEL_FORMAT_YCBCR_YUV422_3PLANE, +- .flip_cbcr = true, ++ .pixel_order = HVS_PIXEL_ORDER_XYCRCB, + }, + { + .drm = DRM_FORMAT_YUV420, + .hvs = HVS_PIXEL_FORMAT_YCBCR_YUV420_3PLANE, ++ .pixel_order = HVS_PIXEL_ORDER_XYCBCR, + }, + { + .drm = DRM_FORMAT_YVU420, + .hvs = HVS_PIXEL_FORMAT_YCBCR_YUV420_3PLANE, +- .flip_cbcr = true, ++ .pixel_order = HVS_PIXEL_ORDER_XYCRCB, + }, + { + .drm = DRM_FORMAT_NV12, + .hvs = HVS_PIXEL_FORMAT_YCBCR_YUV420_2PLANE, ++ .pixel_order = HVS_PIXEL_ORDER_XYCBCR, + }, + { + .drm = DRM_FORMAT_NV16, + .hvs = HVS_PIXEL_FORMAT_YCBCR_YUV422_2PLANE, ++ .pixel_order = HVS_PIXEL_ORDER_XYCBCR, + }, + }; + +@@ -625,15 +628,8 @@ static int vc4_plane_mode_set(struct drm_plane *plane, + * The pointers may be any byte address. + */ + vc4_state->ptr0_offset = vc4_state->dlist_count; +- if (!format->flip_cbcr) { +- for (i = 0; i < num_planes; i++) +- vc4_dlist_write(vc4_state, vc4_state->offsets[i]); +- } else { +- WARN_ON_ONCE(num_planes != 3); +- vc4_dlist_write(vc4_state, vc4_state->offsets[0]); +- vc4_dlist_write(vc4_state, vc4_state->offsets[2]); +- vc4_dlist_write(vc4_state, vc4_state->offsets[1]); +- } ++ for (i = 0; i < num_planes; i++) ++ vc4_dlist_write(vc4_state, vc4_state->offsets[i]); + + /* Pointer Context Word 0/1/2: Written by the HVS */ + for (i = 0; i < num_planes; i++) + +From 4dfeb8e735feaad74b65c9d8cee2bd1bce3750d0 Mon Sep 17 00:00:00 2001 +From: Dave Stevenson +Date: Thu, 16 Nov 2017 14:22:31 +0000 +Subject: [PATCH 199/201] drm/vc4: Add support for NV21 and NV61. + +NV12 (YUV420 2 plane) and NV16 (YUV422 2 plane) were +supported, but NV21 and NV61 (same but with Cb and Cr +swapped) weren't. Add them. + +Signed-off-by: Dave Stevenson +Signed-off-by: Eric Anholt +Reviewed-by: Eric Anholt +Link: https://patchwork.freedesktop.org/patch/msgid/1f50799525e3401551dff2b0b2828b9ab892f75f.1510841336.git.dave.stevenson@raspberrypi.org +(cherry picked from commit cb20dd170d6a7d41e0f347998771b0e0db183438) +--- + drivers/gpu/drm/vc4/vc4_plane.c | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +diff --git a/drivers/gpu/drm/vc4/vc4_plane.c b/drivers/gpu/drm/vc4/vc4_plane.c +index 5c67090e93f5e574de197735f01c6c4dbbdd0180..44a956cb87c2184e8631868307538b15d2d2d476 100644 +--- a/drivers/gpu/drm/vc4/vc4_plane.c ++++ b/drivers/gpu/drm/vc4/vc4_plane.c +@@ -152,11 +152,21 @@ static const struct hvs_format { + .hvs = HVS_PIXEL_FORMAT_YCBCR_YUV420_2PLANE, + .pixel_order = HVS_PIXEL_ORDER_XYCBCR, + }, ++ { ++ .drm = DRM_FORMAT_NV21, ++ .hvs = HVS_PIXEL_FORMAT_YCBCR_YUV420_2PLANE, ++ .pixel_order = HVS_PIXEL_ORDER_XYCRCB, ++ }, + { + .drm = DRM_FORMAT_NV16, + .hvs = HVS_PIXEL_FORMAT_YCBCR_YUV422_2PLANE, + .pixel_order = HVS_PIXEL_ORDER_XYCBCR, + }, ++ { ++ .drm = DRM_FORMAT_NV61, ++ .hvs = HVS_PIXEL_FORMAT_YCBCR_YUV422_2PLANE, ++ .pixel_order = HVS_PIXEL_ORDER_XYCRCB, ++ }, + }; + + static const struct hvs_format *vc4_get_hvs_format(u32 drm_format) + +From f71c503f85bd910fd15aaafa540d5e02eadd45ce Mon Sep 17 00:00:00 2001 +From: Eric Anholt +Date: Mon, 23 Jan 2017 11:41:54 -0800 +Subject: [PATCH 200/201] BCM270X: Disable VEC unless vc4-kms-v3d is present. + +Signed-off-by: Eric Anholt +(cherry picked from commit dabd52db47d2e799323639734787e3a338c2b2a5) +--- + arch/arm/boot/dts/bcm2708-rpi.dtsi | 4 ++++ + arch/arm/boot/dts/overlays/vc4-kms-v3d-overlay.dts | 7 +++++++ + 2 files changed, 11 insertions(+) + +diff --git a/arch/arm/boot/dts/bcm2708-rpi.dtsi b/arch/arm/boot/dts/bcm2708-rpi.dtsi +index 46a4d33e148438e4ca7c8cc17a328705000b1b3a..36dcd483925590b57c1927d7204be50672040539 100644 +--- a/arch/arm/boot/dts/bcm2708-rpi.dtsi ++++ b/arch/arm/boot/dts/bcm2708-rpi.dtsi +@@ -160,3 +160,7 @@ sdhost_pins: &sdhost_gpio48 { + &cpu_thermal { + /delete-node/ trips; + }; ++ ++&vec { ++ status = "disabled"; ++}; +diff --git a/arch/arm/boot/dts/overlays/vc4-kms-v3d-overlay.dts b/arch/arm/boot/dts/overlays/vc4-kms-v3d-overlay.dts +index 7d0d659b4886147e7e3b7eb3f60d546592cf2853..8baa7f77cd94ca76e9a01346015402321c314f20 100644 +--- a/arch/arm/boot/dts/overlays/vc4-kms-v3d-overlay.dts ++++ b/arch/arm/boot/dts/overlays/vc4-kms-v3d-overlay.dts +@@ -141,6 +141,13 @@ + }; + }; + ++ fragment@17 { ++ target = <&vec>; ++ __overlay__ { ++ status = "okay"; ++ }; ++ }; ++ + __overrides__ { + cma-256 = <0>,"+0-1-2-3-4"; + cma-192 = <0>,"-0+1-2-3-4"; + +From f2dddba6d5b3076bceda86ad3fabcbc1d67c07ef Mon Sep 17 00:00:00 2001 +From: Eric Anholt +Date: Thu, 21 Dec 2017 13:32:09 -0800 +Subject: [PATCH 201/201] drm/vc4: Flush the caches before the render jobs, as + well. + +If the frame samples from a render target that was just written, its +cache flush during the binning step may have occurred before the +previous frame's RCL was completed. Flush the texture caches again +before starting each RCL job to make sure that the sampling of the +previous RCL's output is correct. + +Fixes flickering in the top left of 3DMMES Taiji. + +Signed-off-by: Eric Anholt +Fixes: ca26d28bbaa3 ("drm/vc4: improve throughput by pipelining binning and rendering jobs") +--- + drivers/gpu/drm/vc4/vc4_gem.c | 21 +++++++++++++++++++++ + 1 file changed, 21 insertions(+) + +diff --git a/drivers/gpu/drm/vc4/vc4_gem.c b/drivers/gpu/drm/vc4/vc4_gem.c +index 638540943c61a5e095c87be8d2b2bf543ea933b1..e3e868cdee7943c2ed1c61a294804e11f7eefee0 100644 +--- a/drivers/gpu/drm/vc4/vc4_gem.c ++++ b/drivers/gpu/drm/vc4/vc4_gem.c +@@ -436,6 +436,19 @@ vc4_flush_caches(struct drm_device *dev) + VC4_SET_FIELD(0xf, V3D_SLCACTL_ICC)); + } + ++static void ++vc4_flush_texture_caches(struct drm_device *dev) ++{ ++ struct vc4_dev *vc4 = to_vc4_dev(dev); ++ ++ V3D_WRITE(V3D_L2CACTL, ++ V3D_L2CACTL_L2CCLR); ++ ++ V3D_WRITE(V3D_SLCACTL, ++ VC4_SET_FIELD(0xf, V3D_SLCACTL_T1CC) | ++ VC4_SET_FIELD(0xf, V3D_SLCACTL_T0CC)); ++} ++ + /* Sets the registers for the next job to be actually be executed in + * the hardware. + * +@@ -474,6 +487,14 @@ vc4_submit_next_render_job(struct drm_device *dev) + if (!exec) + return; + ++ /* A previous RCL may have written to one of our textures, and ++ * our full cache flush at bin time may have occurred before ++ * that RCL completed. Flush the texture cache now, but not ++ * the instructions or uniforms (since we don't write those ++ * from an RCL). ++ */ ++ vc4_flush_texture_caches(dev); ++ + submit_cl(dev, 1, exec->ct1ca, exec->ct1ea); + } +