summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPeter Robinson <pbrobinson@gmail.com>2018-03-03 22:51:13 +0000
committerPeter Robinson <pbrobinson@gmail.com>2018-03-03 22:51:13 +0000
commit60e272367a705ccdb067c5b1e33f28dfb9fea0b9 (patch)
treeb03ec11acd4b265daf323239ff788394a8354b60
parent5860e766a687094612f3c37a219f248078148541 (diff)
downloadkernel-60e272367a705ccdb067c5b1e33f28dfb9fea0b9.tar.gz
kernel-60e272367a705ccdb067c5b1e33f28dfb9fea0b9.tar.xz
kernel-60e272367a705ccdb067c5b1e33f28dfb9fea0b9.zip
Add RPi3 GPIO expander, RPi fixes, OMAP serial update, general ARM fixes
-rw-r--r--bcm2835-fix-bluetooth.patch109
-rw-r--r--bcm2835-hwrng-Handle-deferred-clock-properly.patch42
-rw-r--r--bcm283x-Fix-probing-of-bcm2835-i2s.patch118
-rw-r--r--bcm283x-gpio-expander.patch638
-rw-r--r--configs/fedora/generic/CONFIG_TIMER_STATS1
-rw-r--r--configs/fedora/generic/arm/CONFIG_GPIO_RASPBERRYPI_EXP1
-rw-r--r--configs/fedora/generic/arm/aarch64/CONFIG_HW_RANDOM_OMAP1
-rw-r--r--configs/fedora/generic/arm/armv7/CONFIG_HW_RANDOM_OMAP1
-rw-r--r--configs/fedora/generic/arm/armv7/armv7/CONFIG_HW_RANDOM_OMAP1
-rw-r--r--configs/fedora/generic/arm/armv7/armv7/CONFIG_MFD_TI_LMU1
-rw-r--r--configs/fedora/generic/arm/armv7/armv7/CONFIG_REGULATOR_LM363X1
-rw-r--r--configs/fedora/generic/arm/armv7/armv7/CONFIG_REMOTEPROC1
-rw-r--r--configs/fedora/generic/arm/armv7/armv7/CONFIG_SERIAL_8250_OMAP2
-rw-r--r--configs/fedora/generic/arm/armv7/armv7/CONFIG_SERIAL_8250_OMAP_TTYO_FIXUP1
-rw-r--r--configs/fedora/generic/arm/armv7/armv7/CONFIG_SERIAL_OMAP2
-rw-r--r--configs/fedora/generic/arm/armv7/armv7/CONFIG_SERIAL_OMAP_CONSOLE1
-rw-r--r--kernel-aarch64-debug.config2
-rw-r--r--kernel-aarch64.config2
-rw-r--r--kernel-armv7hl-debug.config11
-rw-r--r--kernel-armv7hl-lpae-debug.config2
-rw-r--r--kernel-armv7hl-lpae.config2
-rw-r--r--kernel-armv7hl.config11
-rw-r--r--kernel-i686-PAE.config1
-rw-r--r--kernel-i686-PAEdebug.config1
-rw-r--r--kernel-i686-debug.config1
-rw-r--r--kernel-i686.config1
-rw-r--r--kernel-ppc64-debug.config1
-rw-r--r--kernel-ppc64.config1
-rw-r--r--kernel-ppc64le-debug.config1
-rw-r--r--kernel-ppc64le.config1
-rw-r--r--kernel-s390x-debug.config1
-rw-r--r--kernel-s390x.config1
-rw-r--r--kernel-x86_64-debug.config1
-rw-r--r--kernel-x86_64.config1
-rw-r--r--kernel.spec22
-rw-r--r--mmc-sdhci-iproc-Disable-preset-values-for-BCM2835.patch37
36 files changed, 987 insertions, 35 deletions
diff --git a/bcm2835-fix-bluetooth.patch b/bcm2835-fix-bluetooth.patch
new file mode 100644
index 000000000..fd11078fe
--- /dev/null
+++ b/bcm2835-fix-bluetooth.patch
@@ -0,0 +1,109 @@
+From patchwork Sun Feb 25 14:10:52 2018
+Content-Type: text/plain; charset="utf-8"
+MIME-Version: 1.0
+Content-Transfer-Encoding: 7bit
+Subject: [1/4] Bluetooth: hci_bcm: Make shutdown and device wake GPIO optional
+From: Stefan Wahren <stefan.wahren@i2se.com>
+X-Patchwork-Id: 10240917
+Message-Id: <1519567855-26105-2-git-send-email-stefan.wahren@i2se.com>
+To: Loic Poulain <loic.poulain@gmail.com>,
+ =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Danis?= <frederic.danis.oss@gmail.com>,
+ Marcel Holtmann <marcel@holtmann.org>,
+ Johan Hedberg <johan.hedberg@gmail.com>, Eric Anholt <eric@anholt.net>,
+ Rob Herring <robh+dt@kernel.org>, Mark Rutland <mark.rutland@arm.com>
+Cc: Stefan Wahren <stefan.wahren@i2se.com>, devicetree@vger.kernel.org,
+ Florian Fainelli <f.fainelli@gmail.com>,
+ Phil Elwell <phil@raspberrypi.org>,
+ linux-bluetooth@vger.kernel.org, Lukas Wunner <lukas@wunner.de>,
+ linux-rpi-kernel@lists.infradead.org, linux-arm-kernel@lists.infradead.org
+Date: Sun, 25 Feb 2018 15:10:52 +0100
+
+According to the devicetree binding the shutdown and device wake
+GPIOs are optional. Since commit 3e81a4ca51a1 ("Bluetooth: hci_bcm:
+Mandate presence of shutdown and device wake GPIO") this driver
+won't probe anymore on Raspberry Pi 3 and Zero W (no device wake GPIO
+connected). So fix this regression by reverting this commit partially.
+
+Cc: Lukas Wunner <lukas@wunner.de>
+Fixes: 3e81a4ca51a1 ("Bluetooth: hci_bcm: Mandate presence of shutdown and device wake GPIO")
+Signed-off-by: Stefan Wahren <stefan.wahren@i2se.com>
+---
+ drivers/bluetooth/hci_bcm.c | 8 +++++---
+ 1 file changed, 5 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/bluetooth/hci_bcm.c b/drivers/bluetooth/hci_bcm.c
+index 0438a64..f8728eb 100644
+--- a/drivers/bluetooth/hci_bcm.c
++++ b/drivers/bluetooth/hci_bcm.c
+@@ -922,12 +922,14 @@ static int bcm_get_resources(struct bcm_device *dev)
+
+ dev->clk = devm_clk_get(dev->dev, NULL);
+
+- dev->device_wakeup = devm_gpiod_get(dev->dev, "device-wakeup",
+- GPIOD_OUT_LOW);
++ dev->device_wakeup = devm_gpiod_get_optional(dev->dev,
++ "device-wakeup",
++ GPIOD_OUT_LOW);
+ if (IS_ERR(dev->device_wakeup))
+ return PTR_ERR(dev->device_wakeup);
+
+- dev->shutdown = devm_gpiod_get(dev->dev, "shutdown", GPIOD_OUT_LOW);
++ dev->shutdown = devm_gpiod_get_optional(dev->dev, "shutdown",
++ GPIOD_OUT_LOW);
+ if (IS_ERR(dev->shutdown))
+ return PTR_ERR(dev->shutdown);
+
+From patchwork Sun Feb 25 14:10:53 2018
+Content-Type: text/plain; charset="utf-8"
+MIME-Version: 1.0
+Content-Transfer-Encoding: 7bit
+Subject: [2/4] ARM: dts: bcm283x: Apply pull settings to Zero W relevant groups
+From: Stefan Wahren <stefan.wahren@i2se.com>
+X-Patchwork-Id: 10240919
+Message-Id: <1519567855-26105-3-git-send-email-stefan.wahren@i2se.com>
+To: Loic Poulain <loic.poulain@gmail.com>,
+ =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Danis?= <frederic.danis.oss@gmail.com>,
+ Marcel Holtmann <marcel@holtmann.org>,
+ Johan Hedberg <johan.hedberg@gmail.com>, Eric Anholt <eric@anholt.net>,
+ Rob Herring <robh+dt@kernel.org>, Mark Rutland <mark.rutland@arm.com>
+Cc: Stefan Wahren <stefan.wahren@i2se.com>, devicetree@vger.kernel.org,
+ Florian Fainelli <f.fainelli@gmail.com>,
+ Phil Elwell <phil@raspberrypi.org>,
+ linux-bluetooth@vger.kernel.org, Lukas Wunner <lukas@wunner.de>,
+ linux-rpi-kernel@lists.infradead.org, linux-arm-kernel@lists.infradead.org
+Date: Sun, 25 Feb 2018 15:10:53 +0100
+
+Instead of keeping the firmware's pull settings, we better apply
+them via the devicetree pin control. Start with the RPi Zero W relevant
+first to keep the effort low.
+
+Signed-off-by: Stefan Wahren <stefan.wahren@i2se.com>
+---
+ arch/arm/boot/dts/bcm283x.dtsi | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/arch/arm/boot/dts/bcm283x.dtsi b/arch/arm/boot/dts/bcm283x.dtsi
+index 8d9a0df..1a50b67 100644
+--- a/arch/arm/boot/dts/bcm283x.dtsi
++++ b/arch/arm/boot/dts/bcm283x.dtsi
+@@ -223,6 +223,7 @@
+ gpclk2_gpio43: gpclk2_gpio43 {
+ brcm,pins = <43>;
+ brcm,function = <BCM2835_FSEL_ALT0>;
++ brcm,pull = <BCM2835_PUD_OFF>;
+ };
+
+ i2c0_gpio0: i2c0_gpio0 {
+@@ -335,10 +336,12 @@
+ uart0_ctsrts_gpio30: uart0_ctsrts_gpio30 {
+ brcm,pins = <30 31>;
+ brcm,function = <BCM2835_FSEL_ALT3>;
++ brcm,pull = <BCM2835_PUD_UP BCM2835_PUD_OFF>;
+ };
+ uart0_gpio32: uart0_gpio32 {
+ brcm,pins = <32 33>;
+ brcm,function = <BCM2835_FSEL_ALT3>;
++ brcm,pull = <BCM2835_PUD_OFF BCM2835_PUD_UP>;
+ };
+ uart0_gpio36: uart0_gpio36 {
+ brcm,pins = <36 37>;
diff --git a/bcm2835-hwrng-Handle-deferred-clock-properly.patch b/bcm2835-hwrng-Handle-deferred-clock-properly.patch
new file mode 100644
index 000000000..4b4cdfea0
--- /dev/null
+++ b/bcm2835-hwrng-Handle-deferred-clock-properly.patch
@@ -0,0 +1,42 @@
+From patchwork Mon Feb 12 20:11:36 2018
+Content-Type: text/plain; charset="utf-8"
+MIME-Version: 1.0
+Content-Transfer-Encoding: 7bit
+Subject: hwrng: bcm2835: Handle deferred clock properly
+From: Stefan Wahren <stefan.wahren@i2se.com>
+X-Patchwork-Id: 10214385
+Message-Id: <1518466296-30161-1-git-send-email-stefan.wahren@i2se.com>
+To: Herbert Xu <herbert@gondor.apana.org.au>, Matt Mackall <mpm@selenic.com>
+Cc: Stefan Wahren <stefan.wahren@i2se.com>,
+ Florian Fainelli <f.fainelli@gmail.com>, Arnd Bergmann <arnd@arndb.de>,
+ Scott Branden <sbranden@broadcom.com>, Jon Mason <jonmason@broadcom.com>,
+ Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
+ Eric Anholt <eric@anholt.net>,
+ bcm-kernel-feedback-list@broadcom.com, linux-crypto@vger.kernel.org,
+ Ray Jui <rjui@broadcom.com>, linux-arm-kernel@lists.infradead.org
+Date: Mon, 12 Feb 2018 21:11:36 +0100
+
+In case the probe of the clock is deferred, we would assume it is
+optional. This is wrong, so defer the probe of this driver until
+the clock is available.
+
+Fixes: 791af4f4907a ("hwrng: bcm2835 - Manage an optional clock")
+Signed-off-by: Stefan Wahren <stefan.wahren@i2se.com>
+Acked-by: Florian Fainelli <f.fainelli@gmail.com>
+---
+ drivers/char/hw_random/bcm2835-rng.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/drivers/char/hw_random/bcm2835-rng.c b/drivers/char/hw_random/bcm2835-rng.c
+index 7a84cec..6767d96 100644
+--- a/drivers/char/hw_random/bcm2835-rng.c
++++ b/drivers/char/hw_random/bcm2835-rng.c
+@@ -163,6 +163,8 @@ static int bcm2835_rng_probe(struct platform_device *pdev)
+
+ /* Clock is optional on most platforms */
+ priv->clk = devm_clk_get(dev, NULL);
++ if (IS_ERR(priv->clk) && PTR_ERR(priv->clk) == -EPROBE_DEFER)
++ return -EPROBE_DEFER;
+
+ priv->rng.name = pdev->name;
+ priv->rng.init = bcm2835_rng_init;
diff --git a/bcm283x-Fix-probing-of-bcm2835-i2s.patch b/bcm283x-Fix-probing-of-bcm2835-i2s.patch
new file mode 100644
index 000000000..911b2d982
--- /dev/null
+++ b/bcm283x-Fix-probing-of-bcm2835-i2s.patch
@@ -0,0 +1,118 @@
+From patchwork Fri Feb 16 10:55:33 2018
+Content-Type: text/plain; charset="utf-8"
+MIME-Version: 1.0
+Content-Transfer-Encoding: 7bit
+Subject: [V3, 1/2,
+ RESEND] dt-bindings: bcm283x: Fix register ranges of bcm2835-i2s
+From: Stefan Wahren <stefan.wahren@i2se.com>
+X-Patchwork-Id: 10224429
+Message-Id: <1518778534-3328-2-git-send-email-stefan.wahren@i2se.com>
+To: Rob Herring <robh+dt@kernel.org>, Mark Rutland <mark.rutland@arm.com>,
+ Eric Anholt <eric@anholt.net>
+Cc: Stefan Wahren <stefan.wahren@i2se.com>, devicetree@vger.kernel.org,
+ alsa-devel@alsa-project.org, Liam Girdwood <lgirdwood@gmail.com>,
+ Mark Brown <broonie@kernel.org>, linux-rpi-kernel@lists.infradead.org,
+ linux-arm-kernel@lists.infradead.org
+Date: Fri, 16 Feb 2018 11:55:33 +0100
+
+Since 517e7a1537a ("ASoC: bcm2835: move to use the clock framework")
+the bcm2835-i2s requires a clock as DT property. Unfortunately
+the necessary DT change has never been applied. While we are at it
+also fix the first PCM register range to cover the PCM_GRAY register.
+
+This patch only fixes the affected dt-bindings.
+
+Signed-off-by: Stefan Wahren <stefan.wahren@i2se.com>
+Reviewed-by: Eric Anholt <eric@anholt.net>
+Reviewed-by: Rob Herring <robh@kernel.org>
+---
+ Documentation/devicetree/bindings/dma/brcm,bcm2835-dma.txt | 4 ++--
+ Documentation/devicetree/bindings/sound/brcm,bcm2835-i2s.txt | 9 ++++-----
+ 2 files changed, 6 insertions(+), 7 deletions(-)
+
+diff --git a/Documentation/devicetree/bindings/dma/brcm,bcm2835-dma.txt b/Documentation/devicetree/bindings/dma/brcm,bcm2835-dma.txt
+index baf9b34..b6a8cc0 100644
+--- a/Documentation/devicetree/bindings/dma/brcm,bcm2835-dma.txt
++++ b/Documentation/devicetree/bindings/dma/brcm,bcm2835-dma.txt
+@@ -74,8 +74,8 @@ Example:
+
+ bcm2835_i2s: i2s@7e203000 {
+ compatible = "brcm,bcm2835-i2s";
+- reg = < 0x7e203000 0x20>,
+- < 0x7e101098 0x02>;
++ reg = < 0x7e203000 0x24>;
++ clocks = <&clocks BCM2835_CLOCK_PCM>;
+
+ dmas = <&dma 2>,
+ <&dma 3>;
+diff --git a/Documentation/devicetree/bindings/sound/brcm,bcm2835-i2s.txt b/Documentation/devicetree/bindings/sound/brcm,bcm2835-i2s.txt
+index 65783de..7bb0362 100644
+--- a/Documentation/devicetree/bindings/sound/brcm,bcm2835-i2s.txt
++++ b/Documentation/devicetree/bindings/sound/brcm,bcm2835-i2s.txt
+@@ -2,9 +2,8 @@
+
+ Required properties:
+ - compatible: "brcm,bcm2835-i2s"
+-- reg: A list of base address and size entries:
+- * The first entry should cover the PCM registers
+- * The second entry should cover the PCM clock registers
++- reg: Should contain PCM registers location and length.
++- clocks: the (PCM) clock to use
+ - dmas: List of DMA controller phandle and DMA request line ordered pairs.
+ - dma-names: Identifier string for each DMA request line in the dmas property.
+ These strings correspond 1:1 with the ordered pairs in dmas.
+@@ -16,8 +15,8 @@ Example:
+
+ bcm2835_i2s: i2s@7e203000 {
+ compatible = "brcm,bcm2835-i2s";
+- reg = <0x7e203000 0x20>,
+- <0x7e101098 0x02>;
++ reg = <0x7e203000 0x24>;
++ clocks = <&clocks BCM2835_CLOCK_PCM>;
+
+ dmas = <&dma 2>,
+ <&dma 3>;
+From patchwork Fri Feb 16 10:55:34 2018
+Content-Type: text/plain; charset="utf-8"
+MIME-Version: 1.0
+Content-Transfer-Encoding: 7bit
+Subject: [V3,2/2,RESEND] ARM: dts: bcm283x: Fix probing of bcm2835-i2s
+From: Stefan Wahren <stefan.wahren@i2se.com>
+X-Patchwork-Id: 10224427
+Message-Id: <1518778534-3328-3-git-send-email-stefan.wahren@i2se.com>
+To: Rob Herring <robh+dt@kernel.org>, Mark Rutland <mark.rutland@arm.com>,
+ Eric Anholt <eric@anholt.net>
+Cc: Stefan Wahren <stefan.wahren@i2se.com>, devicetree@vger.kernel.org,
+ alsa-devel@alsa-project.org, Liam Girdwood <lgirdwood@gmail.com>,
+ Mark Brown <broonie@kernel.org>, linux-rpi-kernel@lists.infradead.org,
+ linux-arm-kernel@lists.infradead.org
+Date: Fri, 16 Feb 2018 11:55:34 +0100
+
+Since 517e7a1537a ("ASoC: bcm2835: move to use the clock framework")
+the bcm2835-i2s requires a clock as DT property. Unfortunately
+the necessary DT change has never been applied. While we are at it
+also fix the first PCM register range to cover the PCM_GRAY register.
+
+Fixes: 517e7a1537a ("ASoC: bcm2835: move to use the clock framework")
+Signed-off-by: Stefan Wahren <stefan.wahren@i2se.com>
+Reviewed-by: Eric Anholt <eric@anholt.net>
+Tested-by: Matthias Reichl <hias@horus.com>
+---
+ arch/arm/boot/dts/bcm283x.dtsi | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/arch/arm/boot/dts/bcm283x.dtsi b/arch/arm/boot/dts/bcm283x.dtsi
+index 013431e..e08203c 100644
+--- a/arch/arm/boot/dts/bcm283x.dtsi
++++ b/arch/arm/boot/dts/bcm283x.dtsi
+@@ -396,8 +396,8 @@
+
+ i2s: i2s@7e203000 {
+ compatible = "brcm,bcm2835-i2s";
+- reg = <0x7e203000 0x20>,
+- <0x7e101098 0x02>;
++ reg = <0x7e203000 0x24>;
++ clocks = <&clocks BCM2835_CLOCK_PCM>;
+
+ dmas = <&dma 2>,
+ <&dma 3>;
diff --git a/bcm283x-gpio-expander.patch b/bcm283x-gpio-expander.patch
new file mode 100644
index 000000000..55b7ec4d7
--- /dev/null
+++ b/bcm283x-gpio-expander.patch
@@ -0,0 +1,638 @@
+From patchwork Tue Feb 20 12:19:31 2018
+Content-Type: text/plain; charset="utf-8"
+MIME-Version: 1.0
+Content-Transfer-Encoding: 7bit
+Subject: [v5,1/5] ARM: bcm2835: sync firmware properties with downstream
+From: Baruch Siach <baruch@tkos.co.il>
+X-Patchwork-Id: 10229963
+Message-Id: <e7d1f1d0789f11d37957a8998bee23d035115aeb.1519128054.git.baruch@tkos.co.il>
+To: Linus Walleij <linus.walleij@linaro.org>,
+ Dave Stevenson <dave.stevenson@raspberrypi.org>,
+ Eric Anholt <eric@anholt.net>, Stefan Wahren <stefan.wahren@i2se.com>
+Cc: devicetree@vger.kernel.org, Baruch Siach <baruch@tkos.co.il>,
+ linux-gpio@vger.kernel.org, Michael Zoran <mzoran@crowfest.net>,
+ Rob Herring <robh+dt@kernel.org>, linux-rpi-kernel@lists.infradead.org,
+ Frank Rowand <frowand.list@gmail.com>, linux-arm-kernel@lists.infradead.org
+Date: Tue, 20 Feb 2018 14:19:31 +0200
+
+Add latest firmware property tags from the latest Raspberry Pi downstream
+kernel. This is needed for the GPIO tags, so we can control the GPIO
+multiplexor lines.
+
+Acked-by: Stefan Wahren <stefan.wahren@i2se.com>
+Signed-off-by: Baruch Siach <baruch@tkos.co.il>
+---
+v4: No change
+
+v3: Add Stefan's ack
+
+v2: No change
+---
+ include/soc/bcm2835/raspberrypi-firmware.h | 18 ++++++++++++++++++
+ 1 file changed, 18 insertions(+)
+
+diff --git a/include/soc/bcm2835/raspberrypi-firmware.h b/include/soc/bcm2835/raspberrypi-firmware.h
+index cb979ad90401..50df5b28d2c9 100644
+--- a/include/soc/bcm2835/raspberrypi-firmware.h
++++ b/include/soc/bcm2835/raspberrypi-firmware.h
+@@ -63,6 +63,7 @@ enum rpi_firmware_property_tag {
+ RPI_FIRMWARE_GET_MIN_VOLTAGE = 0x00030008,
+ RPI_FIRMWARE_GET_TURBO = 0x00030009,
+ RPI_FIRMWARE_GET_MAX_TEMPERATURE = 0x0003000a,
++ RPI_FIRMWARE_GET_STC = 0x0003000b,
+ RPI_FIRMWARE_ALLOCATE_MEMORY = 0x0003000c,
+ RPI_FIRMWARE_LOCK_MEMORY = 0x0003000d,
+ RPI_FIRMWARE_UNLOCK_MEMORY = 0x0003000e,
+@@ -72,12 +73,22 @@ enum rpi_firmware_property_tag {
+ RPI_FIRMWARE_SET_ENABLE_QPU = 0x00030012,
+ RPI_FIRMWARE_GET_DISPMANX_RESOURCE_MEM_HANDLE = 0x00030014,
+ RPI_FIRMWARE_GET_EDID_BLOCK = 0x00030020,
++ RPI_FIRMWARE_GET_CUSTOMER_OTP = 0x00030021,
+ RPI_FIRMWARE_GET_DOMAIN_STATE = 0x00030030,
+ RPI_FIRMWARE_SET_CLOCK_STATE = 0x00038001,
+ RPI_FIRMWARE_SET_CLOCK_RATE = 0x00038002,
+ RPI_FIRMWARE_SET_VOLTAGE = 0x00038003,
+ RPI_FIRMWARE_SET_TURBO = 0x00038009,
++ RPI_FIRMWARE_SET_CUSTOMER_OTP = 0x00038021,
+ RPI_FIRMWARE_SET_DOMAIN_STATE = 0x00038030,
++ RPI_FIRMWARE_GET_GPIO_STATE = 0x00030041,
++ RPI_FIRMWARE_SET_GPIO_STATE = 0x00038041,
++ RPI_FIRMWARE_SET_SDHOST_CLOCK = 0x00038042,
++ RPI_FIRMWARE_GET_GPIO_CONFIG = 0x00030043,
++ RPI_FIRMWARE_SET_GPIO_CONFIG = 0x00038043,
++ RPI_FIRMWARE_GET_PERIPH_REG = 0x00030045,
++ RPI_FIRMWARE_SET_PERIPH_REG = 0x00038045,
++
+
+ /* Dispmanx TAGS */
+ RPI_FIRMWARE_FRAMEBUFFER_ALLOCATE = 0x00040001,
+@@ -91,6 +102,8 @@ enum rpi_firmware_property_tag {
+ RPI_FIRMWARE_FRAMEBUFFER_GET_VIRTUAL_OFFSET = 0x00040009,
+ RPI_FIRMWARE_FRAMEBUFFER_GET_OVERSCAN = 0x0004000a,
+ RPI_FIRMWARE_FRAMEBUFFER_GET_PALETTE = 0x0004000b,
++ RPI_FIRMWARE_FRAMEBUFFER_GET_TOUCHBUF = 0x0004000f,
++ RPI_FIRMWARE_FRAMEBUFFER_GET_GPIOVIRTBUF = 0x00040010,
+ RPI_FIRMWARE_FRAMEBUFFER_RELEASE = 0x00048001,
+ RPI_FIRMWARE_FRAMEBUFFER_TEST_PHYSICAL_WIDTH_HEIGHT = 0x00044003,
+ RPI_FIRMWARE_FRAMEBUFFER_TEST_VIRTUAL_WIDTH_HEIGHT = 0x00044004,
+@@ -100,6 +113,7 @@ enum rpi_firmware_property_tag {
+ RPI_FIRMWARE_FRAMEBUFFER_TEST_VIRTUAL_OFFSET = 0x00044009,
+ RPI_FIRMWARE_FRAMEBUFFER_TEST_OVERSCAN = 0x0004400a,
+ RPI_FIRMWARE_FRAMEBUFFER_TEST_PALETTE = 0x0004400b,
++ RPI_FIRMWARE_FRAMEBUFFER_TEST_VSYNC = 0x0004400e,
+ RPI_FIRMWARE_FRAMEBUFFER_SET_PHYSICAL_WIDTH_HEIGHT = 0x00048003,
+ RPI_FIRMWARE_FRAMEBUFFER_SET_VIRTUAL_WIDTH_HEIGHT = 0x00048004,
+ RPI_FIRMWARE_FRAMEBUFFER_SET_DEPTH = 0x00048005,
+@@ -108,6 +122,10 @@ enum rpi_firmware_property_tag {
+ RPI_FIRMWARE_FRAMEBUFFER_SET_VIRTUAL_OFFSET = 0x00048009,
+ RPI_FIRMWARE_FRAMEBUFFER_SET_OVERSCAN = 0x0004800a,
+ RPI_FIRMWARE_FRAMEBUFFER_SET_PALETTE = 0x0004800b,
++ RPI_FIRMWARE_FRAMEBUFFER_SET_TOUCHBUF = 0x0004801f,
++ RPI_FIRMWARE_FRAMEBUFFER_SET_GPIOVIRTBUF = 0x00048020,
++ RPI_FIRMWARE_FRAMEBUFFER_SET_VSYNC = 0x0004800e,
++ RPI_FIRMWARE_FRAMEBUFFER_SET_BACKLIGHT = 0x0004800f,
+
+ RPI_FIRMWARE_VCHIQ_INIT = 0x00048010,
+
+From patchwork Tue Feb 20 12:19:32 2018
+Content-Type: text/plain; charset="utf-8"
+MIME-Version: 1.0
+Content-Transfer-Encoding: 7bit
+Subject: [v5,2/5] dt-bindings: gpio: add raspberry pi GPIO expander binding
+From: Baruch Siach <baruch@tkos.co.il>
+X-Patchwork-Id: 10229965
+Message-Id: <f400b48cbcd8a138c39d4e8f63d6c1f569090dcc.1519128054.git.baruch@tkos.co.il>
+To: Linus Walleij <linus.walleij@linaro.org>,
+ Dave Stevenson <dave.stevenson@raspberrypi.org>,
+ Eric Anholt <eric@anholt.net>, Stefan Wahren <stefan.wahren@i2se.com>
+Cc: devicetree@vger.kernel.org, Baruch Siach <baruch@tkos.co.il>,
+ linux-gpio@vger.kernel.org, Michael Zoran <mzoran@crowfest.net>,
+ Rob Herring <robh+dt@kernel.org>, linux-rpi-kernel@lists.infradead.org,
+ Frank Rowand <frowand.list@gmail.com>, linux-arm-kernel@lists.infradead.org
+Date: Tue, 20 Feb 2018 14:19:32 +0200
+
+The Raspberry Pi 3 GPIO expander is controlled by the VC4 firmware over
+I2C. The firmware mailbox interface allows the ARM core to control the
+GPIO lines.
+
+Signed-off-by: Baruch Siach <baruch@tkos.co.il>
+Reviewed-by: Rob Herring <robh@kernel.org>
+---
+v5:
+ * Remove the 'firmware' property
+ * Note that the gpio node is a child of the firmware node
+
+v4:
+ * Move the example gpio node under the firmware node
+ * Rename gpio node name to plain 'gpio'
+
+v3:
+ * Rename node name.
+
+v2:
+ * Rename compatible string to raspberrypi,firmware-gpio
+---
+ .../bindings/gpio/raspberrypi,firmware-gpio.txt | 30 ++++++++++++++++++++++
+ 1 file changed, 30 insertions(+)
+ create mode 100644 Documentation/devicetree/bindings/gpio/raspberrypi,firmware-gpio.txt
+
+diff --git a/Documentation/devicetree/bindings/gpio/raspberrypi,firmware-gpio.txt b/Documentation/devicetree/bindings/gpio/raspberrypi,firmware-gpio.txt
+new file mode 100644
+index 000000000000..ce97265e23ba
+--- /dev/null
++++ b/Documentation/devicetree/bindings/gpio/raspberrypi,firmware-gpio.txt
+@@ -0,0 +1,30 @@
++Raspberry Pi GPIO expander
++
++The Raspberry Pi 3 GPIO expander is controlled by the VC4 firmware. The
++firmware exposes a mailbox interface that allows the ARM core to control the
++GPIO lines on the expander.
++
++The Raspberry Pi GPIO expander node must be a child node of the Raspberry Pi
++firmware node.
++
++Required properties:
++
++- compatible : Should be "raspberrypi,firmware-gpio"
++- gpio-controller : Marks the device node as a gpio controller
++- #gpio-cells : Should be two. The first cell is the pin number, and
++ the second cell is used to specify the gpio polarity:
++ 0 = active high
++ 1 = active low
++
++Example:
++
++firmware: firmware-rpi {
++ compatible = "raspberrypi,bcm2835-firmware";
++ mboxes = <&mailbox>;
++
++ expgpio: gpio {
++ compatible = "raspberrypi,firmware-gpio";
++ gpio-controller;
++ #gpio-cells = <2>;
++ };
++};
+From patchwork Tue Feb 20 12:19:33 2018
+Content-Type: text/plain; charset="utf-8"
+MIME-Version: 1.0
+Content-Transfer-Encoding: 7bit
+Subject: [v5,
+ 3/5] gpio: raspberrypi-exp: Driver for RPi3 GPIO expander via mailbox
+ service
+From: Baruch Siach <baruch@tkos.co.il>
+X-Patchwork-Id: 10229967
+Message-Id: <8c34f287ee72b340fa9d693aa0e304b25541c74c.1519128054.git.baruch@tkos.co.il>
+To: Linus Walleij <linus.walleij@linaro.org>,
+ Dave Stevenson <dave.stevenson@raspberrypi.org>,
+ Eric Anholt <eric@anholt.net>, Stefan Wahren <stefan.wahren@i2se.com>
+Cc: devicetree@vger.kernel.org, Baruch Siach <baruch@tkos.co.il>,
+ linux-gpio@vger.kernel.org, Michael Zoran <mzoran@crowfest.net>,
+ Rob Herring <robh+dt@kernel.org>, linux-rpi-kernel@lists.infradead.org,
+ Frank Rowand <frowand.list@gmail.com>, linux-arm-kernel@lists.infradead.org
+Date: Tue, 20 Feb 2018 14:19:33 +0200
+
+From: Dave Stevenson <dave.stevenson@raspberrypi.org>
+
+Pi3 and Compute Module 3 have a GPIO expander that the
+VPU communicates with.
+There is a mailbox service that now allows control of this
+expander, so add a kernel driver that can make use of it.
+
+Reviewed-by: Stefan Wahren <stefan.wahren@i2se.com>
+Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.org>
+Signed-off-by: Baruch Siach <baruch@tkos.co.il>
+---
+v5:
+ * Use the parent node to find the firmware
+
+v4:
+ * Don't set the .owner driver field
+ * Add Stefan's review tag
+
+v3:
+ * Tweak Kconfig driver prompt
+ * Make GPIO_RASPBERRYPI_EXP tristate
+ * Make COMPILE_TEST independent of RASPBERRYPI_FIRMWARE
+ * Remove redundant DMA header
+ * Use less code lines for dev_err()
+ * Check rpi_exp_gpio_get_polarity() return value
+ * Remove redundant platform_set_drvdata() call
+
+v2:
+ * Rename driver to gpio-raspberrypi-exp
+ * Populate the gpiochip parent device pointer
+ * Use macro for the mailbox base GPIO number
+ * Drop linux/gpio.h and GPIOF_DIR_*
+ * Check and print firmware error value
+ * Use devm_gpiochip_add_data(); drop .remove
+ * A few more minor tweaks
+---
+ drivers/gpio/Kconfig | 9 ++
+ drivers/gpio/Makefile | 1 +
+ drivers/gpio/gpio-raspberrypi-exp.c | 252 ++++++++++++++++++++++++++++++++++++
+ 3 files changed, 262 insertions(+)
+ create mode 100644 drivers/gpio/gpio-raspberrypi-exp.c
+
+diff --git a/drivers/gpio/Kconfig b/drivers/gpio/Kconfig
+index 8dbb2280538d..fd0562a37f68 100644
+--- a/drivers/gpio/Kconfig
++++ b/drivers/gpio/Kconfig
+@@ -122,6 +122,15 @@ config GPIO_ATH79
+ Select this option to enable GPIO driver for
+ Atheros AR71XX/AR724X/AR913X SoC devices.
+
++config GPIO_RASPBERRYPI_EXP
++ tristate "Raspberry Pi 3 GPIO Expander"
++ default RASPBERRYPI_FIRMWARE
++ depends on OF_GPIO
++ depends on (ARCH_BCM2835 && RASPBERRYPI_FIRMWARE) || COMPILE_TEST
++ help
++ Turn on GPIO support for the expander on Raspberry Pi 3 boards, using
++ the firmware mailbox to communicate with VideoCore on BCM283x chips.
++
+ config GPIO_BCM_KONA
+ bool "Broadcom Kona GPIO"
+ depends on OF_GPIO && (ARCH_BCM_MOBILE || COMPILE_TEST)
+diff --git a/drivers/gpio/Makefile b/drivers/gpio/Makefile
+index cccb0d40846c..76dc0a02bd56 100644
+--- a/drivers/gpio/Makefile
++++ b/drivers/gpio/Makefile
+@@ -32,6 +32,7 @@ obj-$(CONFIG_GPIO_AMDPT) += gpio-amdpt.o
+ obj-$(CONFIG_GPIO_ARIZONA) += gpio-arizona.o
+ obj-$(CONFIG_GPIO_ATH79) += gpio-ath79.o
+ obj-$(CONFIG_GPIO_ASPEED) += gpio-aspeed.o
++obj-$(CONFIG_GPIO_RASPBERRYPI_EXP) += gpio-raspberrypi-exp.o
+ obj-$(CONFIG_GPIO_BCM_KONA) += gpio-bcm-kona.o
+ obj-$(CONFIG_GPIO_BD9571MWV) += gpio-bd9571mwv.o
+ obj-$(CONFIG_GPIO_BRCMSTB) += gpio-brcmstb.o
+diff --git a/drivers/gpio/gpio-raspberrypi-exp.c b/drivers/gpio/gpio-raspberrypi-exp.c
+new file mode 100644
+index 000000000000..d6d36d537e37
+--- /dev/null
++++ b/drivers/gpio/gpio-raspberrypi-exp.c
+@@ -0,0 +1,252 @@
++// SPDX-License-Identifier: GPL-2.0+
++/*
++ * Raspberry Pi 3 expander GPIO driver
++ *
++ * Uses the firmware mailbox service to communicate with the
++ * GPIO expander on the VPU.
++ *
++ * Copyright (C) 2017 Raspberry Pi Trading Ltd.
++ */
++
++#include <linux/err.h>
++#include <linux/gpio/driver.h>
++#include <linux/module.h>
++#include <linux/platform_device.h>
++#include <soc/bcm2835/raspberrypi-firmware.h>
++
++#define MODULE_NAME "raspberrypi-exp-gpio"
++#define NUM_GPIO 8
++
++#define RPI_EXP_GPIO_BASE 128
++
++#define RPI_EXP_GPIO_DIR_IN 0
++#define RPI_EXP_GPIO_DIR_OUT 1
++
++struct rpi_exp_gpio {
++ struct gpio_chip gc;
++ struct rpi_firmware *fw;
++};
++
++/* VC4 firmware mailbox interface data structures */
++
++struct gpio_set_config {
++ u32 gpio;
++ u32 direction;
++ u32 polarity;
++ u32 term_en;
++ u32 term_pull_up;
++ u32 state;
++};
++
++struct gpio_get_config {
++ u32 gpio;
++ u32 direction;
++ u32 polarity;
++ u32 term_en;
++ u32 term_pull_up;
++};
++
++struct gpio_get_set_state {
++ u32 gpio;
++ u32 state;
++};
++
++static int rpi_exp_gpio_get_polarity(struct gpio_chip *gc, unsigned int off)
++{
++ struct rpi_exp_gpio *gpio;
++ struct gpio_get_config get;
++ int ret;
++
++ gpio = gpiochip_get_data(gc);
++
++ get.gpio = off + RPI_EXP_GPIO_BASE; /* GPIO to update */
++
++ ret = rpi_firmware_property(gpio->fw, RPI_FIRMWARE_GET_GPIO_CONFIG,
++ &get, sizeof(get));
++ if (ret || get.gpio != 0) {
++ dev_err(gc->parent, "Failed to get GPIO %u config (%d %x)\n",
++ off, ret, get.gpio);
++ return ret ? ret : -EIO;
++ }
++ return get.polarity;
++}
++
++static int rpi_exp_gpio_dir_in(struct gpio_chip *gc, unsigned int off)
++{
++ struct rpi_exp_gpio *gpio;
++ struct gpio_set_config set_in;
++ int ret;
++
++ gpio = gpiochip_get_data(gc);
++
++ set_in.gpio = off + RPI_EXP_GPIO_BASE; /* GPIO to update */
++ set_in.direction = RPI_EXP_GPIO_DIR_IN;
++ set_in.term_en = 0; /* termination disabled */
++ set_in.term_pull_up = 0; /* n/a as termination disabled */
++ set_in.state = 0; /* n/a as configured as an input */
++
++ ret = rpi_exp_gpio_get_polarity(gc, off);
++ if (ret < 0)
++ return ret;
++ set_in.polarity = ret; /* Retain existing setting */
++
++ ret = rpi_firmware_property(gpio->fw, RPI_FIRMWARE_SET_GPIO_CONFIG,
++ &set_in, sizeof(set_in));
++ if (ret || set_in.gpio != 0) {
++ dev_err(gc->parent, "Failed to set GPIO %u to input (%d %x)\n",
++ off, ret, set_in.gpio);
++ return ret ? ret : -EIO;
++ }
++ return 0;
++}
++
++static int rpi_exp_gpio_dir_out(struct gpio_chip *gc, unsigned int off, int val)
++{
++ struct rpi_exp_gpio *gpio;
++ struct gpio_set_config set_out;
++ int ret;
++
++ gpio = gpiochip_get_data(gc);
++
++ set_out.gpio = off + RPI_EXP_GPIO_BASE; /* GPIO to update */
++ set_out.direction = RPI_EXP_GPIO_DIR_OUT;
++ set_out.term_en = 0; /* n/a as an output */
++ set_out.term_pull_up = 0; /* n/a as termination disabled */
++ set_out.state = val; /* Output state */
++
++ ret = rpi_exp_gpio_get_polarity(gc, off);
++ if (ret < 0)
++ return ret;
++ set_out.polarity = ret; /* Retain existing setting */
++
++ ret = rpi_firmware_property(gpio->fw, RPI_FIRMWARE_SET_GPIO_CONFIG,
++ &set_out, sizeof(set_out));
++ if (ret || set_out.gpio != 0) {
++ dev_err(gc->parent, "Failed to set GPIO %u to output (%d %x)\n",
++ off, ret, set_out.gpio);
++ return ret ? ret : -EIO;
++ }
++ return 0;
++}
++
++static int rpi_exp_gpio_get_direction(struct gpio_chip *gc, unsigned int off)
++{
++ struct rpi_exp_gpio *gpio;
++ struct gpio_get_config get;
++ int ret;
++
++ gpio = gpiochip_get_data(gc);
++
++ get.gpio = off + RPI_EXP_GPIO_BASE; /* GPIO to update */
++
++ ret = rpi_firmware_property(gpio->fw, RPI_FIRMWARE_GET_GPIO_CONFIG,
++ &get, sizeof(get));
++ if (ret || get.gpio != 0) {
++ dev_err(gc->parent,
++ "Failed to get GPIO %u config (%d %x)\n", off, ret,
++ get.gpio);
++ return ret ? ret : -EIO;
++ }
++ return !get.direction;
++}
++
++static int rpi_exp_gpio_get(struct gpio_chip *gc, unsigned int off)
++{
++ struct rpi_exp_gpio *gpio;
++ struct gpio_get_set_state get;
++ int ret;
++
++ gpio = gpiochip_get_data(gc);
++
++ get.gpio = off + RPI_EXP_GPIO_BASE; /* GPIO to update */
++ get.state = 0; /* storage for returned value */
++
++ ret = rpi_firmware_property(gpio->fw, RPI_FIRMWARE_GET_GPIO_STATE,
++ &get, sizeof(get));
++ if (ret || get.gpio != 0) {
++ dev_err(gc->parent,
++ "Failed to get GPIO %u state (%d %x)\n", off, ret,
++ get.gpio);
++ return ret ? ret : -EIO;
++ }
++ return !!get.state;
++}
++
++static void rpi_exp_gpio_set(struct gpio_chip *gc, unsigned int off, int val)
++{
++ struct rpi_exp_gpio *gpio;
++ struct gpio_get_set_state set;
++ int ret;
++
++ gpio = gpiochip_get_data(gc);
++
++ set.gpio = off + RPI_EXP_GPIO_BASE; /* GPIO to update */
++ set.state = val; /* Output state */
++
++ ret = rpi_firmware_property(gpio->fw, RPI_FIRMWARE_SET_GPIO_STATE,
++ &set, sizeof(set));
++ if (ret || set.gpio != 0)
++ dev_err(gc->parent,
++ "Failed to set GPIO %u state (%d %x)\n", off, ret,
++ set.gpio);
++}
++
++static int rpi_exp_gpio_probe(struct platform_device *pdev)
++{
++ struct device *dev = &pdev->dev;
++ struct device_node *np = dev->of_node;
++ struct device_node *fw_node;
++ struct rpi_firmware *fw;
++ struct rpi_exp_gpio *rpi_gpio;
++
++ fw_node = of_get_parent(np);
++ if (!fw_node) {
++ dev_err(dev, "Missing firmware node\n");
++ return -ENOENT;
++ }
++
++ fw = rpi_firmware_get(fw_node);
++ if (!fw)
++ return -EPROBE_DEFER;
++
++ rpi_gpio = devm_kzalloc(dev, sizeof(*rpi_gpio), GFP_KERNEL);
++ if (!rpi_gpio)
++ return -ENOMEM;
++
++ rpi_gpio->fw = fw;
++ rpi_gpio->gc.parent = dev;
++ rpi_gpio->gc.label = MODULE_NAME;
++ rpi_gpio->gc.owner = THIS_MODULE;
++ rpi_gpio->gc.of_node = np;
++ rpi_gpio->gc.base = -1;
++ rpi_gpio->gc.ngpio = NUM_GPIO;
++
++ rpi_gpio->gc.direction_input = rpi_exp_gpio_dir_in;
++ rpi_gpio->gc.direction_output = rpi_exp_gpio_dir_out;
++ rpi_gpio->gc.get_direction = rpi_exp_gpio_get_direction;
++ rpi_gpio->gc.get = rpi_exp_gpio_get;
++ rpi_gpio->gc.set = rpi_exp_gpio_set;
++ rpi_gpio->gc.can_sleep = true;
++
++ return devm_gpiochip_add_data(dev, &rpi_gpio->gc, rpi_gpio);
++}
++
++static const struct of_device_id rpi_exp_gpio_ids[] = {
++ { .compatible = "raspberrypi,firmware-gpio" },
++ { }
++};
++MODULE_DEVICE_TABLE(of, rpi_exp_gpio_ids);
++
++static struct platform_driver rpi_exp_gpio_driver = {
++ .driver = {
++ .name = MODULE_NAME,
++ .of_match_table = of_match_ptr(rpi_exp_gpio_ids),
++ },
++ .probe = rpi_exp_gpio_probe,
++};
++module_platform_driver(rpi_exp_gpio_driver);
++
++MODULE_LICENSE("GPL");
++MODULE_AUTHOR("Dave Stevenson <dave.stevenson@raspberrypi.org>");
++MODULE_DESCRIPTION("Raspberry Pi 3 expander GPIO driver");
++MODULE_ALIAS("platform:rpi-exp-gpio");
+From patchwork Tue Feb 20 12:19:34 2018
+Content-Type: text/plain; charset="utf-8"
+MIME-Version: 1.0
+Content-Transfer-Encoding: 7bit
+Subject: [v5,4/5] ARM: dts: bcm2835: make the firmware node into a bus
+From: Baruch Siach <baruch@tkos.co.il>
+X-Patchwork-Id: 10229961
+Message-Id: <43f9082a6835df6d7bcd3e16d79db687c52826d2.1519128054.git.baruch@tkos.co.il>
+To: Linus Walleij <linus.walleij@linaro.org>,
+ Dave Stevenson <dave.stevenson@raspberrypi.org>,
+ Eric Anholt <eric@anholt.net>, Stefan Wahren <stefan.wahren@i2se.com>
+Cc: devicetree@vger.kernel.org, Baruch Siach <baruch@tkos.co.il>,
+ linux-gpio@vger.kernel.org, Michael Zoran <mzoran@crowfest.net>,
+ Rob Herring <robh+dt@kernel.org>, linux-rpi-kernel@lists.infradead.org,
+ Frank Rowand <frowand.list@gmail.com>, linux-arm-kernel@lists.infradead.org
+Date: Tue, 20 Feb 2018 14:19:34 +0200
+
+This allows adding devices for which the firmware exposes control interface
+via the mailbox. An example of such device is the GPIO expander.
+
+Signed-off-by: Baruch Siach <baruch@tkos.co.il>
+Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
+---
+v4: New patch in this series
+---
+ arch/arm/boot/dts/bcm2835-rpi.dtsi | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/arch/arm/boot/dts/bcm2835-rpi.dtsi b/arch/arm/boot/dts/bcm2835-rpi.dtsi
+index e36c392a2b8f..0198bd46ef7c 100644
+--- a/arch/arm/boot/dts/bcm2835-rpi.dtsi
++++ b/arch/arm/boot/dts/bcm2835-rpi.dtsi
+@@ -18,7 +18,9 @@
+
+ soc {
+ firmware: firmware {
+- compatible = "raspberrypi,bcm2835-firmware";
++ compatible = "raspberrypi,bcm2835-firmware", "simple-bus";
++ #address-cells = <0>;
++ #size-cells = <0>;
+ mboxes = <&mailbox>;
+ };
+
+From patchwork Tue Feb 20 12:19:35 2018
+Content-Type: text/plain; charset="utf-8"
+MIME-Version: 1.0
+Content-Transfer-Encoding: 7bit
+Subject: [v5,5/5] ARM: dts: bcm2837-rpi-3-b: add GPIO expander
+From: Baruch Siach <baruch@tkos.co.il>
+X-Patchwork-Id: 10229995
+Message-Id: <a6d59692dc4847e0b1639a26542e28c95ad5240f.1519128054.git.baruch@tkos.co.il>
+To: Linus Walleij <linus.walleij@linaro.org>,
+ Dave Stevenson <dave.stevenson@raspberrypi.org>,
+ Eric Anholt <eric@anholt.net>, Stefan Wahren <stefan.wahren@i2se.com>
+Cc: devicetree@vger.kernel.org, Baruch Siach <baruch@tkos.co.il>,
+ linux-gpio@vger.kernel.org, Michael Zoran <mzoran@crowfest.net>,
+ Rob Herring <robh+dt@kernel.org>, linux-rpi-kernel@lists.infradead.org,
+ Frank Rowand <frowand.list@gmail.com>, linux-arm-kernel@lists.infradead.org
+Date: Tue, 20 Feb 2018 14:19:35 +0200
+
+Add a description of the RPi3 GPIO expander that the VC4 firmware controls.
+
+Acked-by: Stefan Wahren <stefan.wahren@i2se.com>
+Signed-off-by: Baruch Siach <baruch@tkos.co.il>
+Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
+---
+v5:
+ * Drop the 'firmware' property
+
+v4:
+ * Move the gpio node under the firmware node
+ * Rename the gpio node to plain 'gpio'
+ * Add Stefan's ack
+
+v3:
+ * List GPIO names one per line.
+
+v2:
+ * Move GPIO expander node out of the soc container
+ * Rename compatible string
+ * Add gpio-line-names property
+---
+ arch/arm/boot/dts/bcm2837-rpi-3-b.dts | 17 +++++++++++++++++
+ 1 file changed, 17 insertions(+)
+
+diff --git a/arch/arm/boot/dts/bcm2837-rpi-3-b.dts b/arch/arm/boot/dts/bcm2837-rpi-3-b.dts
+index 3e4ed7c5b0b3..0b31d995a066 100644
+--- a/arch/arm/boot/dts/bcm2837-rpi-3-b.dts
++++ b/arch/arm/boot/dts/bcm2837-rpi-3-b.dts
+@@ -25,6 +25,23 @@
+ };
+ };
+
++&firmware {
++ expgpio: gpio {
++ compatible = "raspberrypi,firmware-gpio";
++ gpio-controller;
++ #gpio-cells = <2>;
++ gpio-line-names = "BT_ON",
++ "WL_ON",
++ "STATUS_LED",
++ "LAN_RUN",
++ "HPD_N",
++ "CAM_GPIO0",
++ "CAM_GPIO1",
++ "PWR_LOW_N";
++ status = "okay";
++ };
++};
++
+ /* uart0 communicates with the BT module */
+ &uart0 {
+ pinctrl-names = "default";
diff --git a/configs/fedora/generic/CONFIG_TIMER_STATS b/configs/fedora/generic/CONFIG_TIMER_STATS
deleted file mode 100644
index 0dfc820be..000000000
--- a/configs/fedora/generic/CONFIG_TIMER_STATS
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_TIMER_STATS is not set
diff --git a/configs/fedora/generic/arm/CONFIG_GPIO_RASPBERRYPI_EXP b/configs/fedora/generic/arm/CONFIG_GPIO_RASPBERRYPI_EXP
new file mode 100644
index 000000000..c98e757e1
--- /dev/null
+++ b/configs/fedora/generic/arm/CONFIG_GPIO_RASPBERRYPI_EXP
@@ -0,0 +1 @@
+CONFIG_GPIO_RASPBERRYPI_EXP=m
diff --git a/configs/fedora/generic/arm/aarch64/CONFIG_HW_RANDOM_OMAP b/configs/fedora/generic/arm/aarch64/CONFIG_HW_RANDOM_OMAP
deleted file mode 100644
index cf37a6e35..000000000
--- a/configs/fedora/generic/arm/aarch64/CONFIG_HW_RANDOM_OMAP
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_HW_RANDOM_OMAP=m
diff --git a/configs/fedora/generic/arm/armv7/CONFIG_HW_RANDOM_OMAP b/configs/fedora/generic/arm/armv7/CONFIG_HW_RANDOM_OMAP
deleted file mode 100644
index cf37a6e35..000000000
--- a/configs/fedora/generic/arm/armv7/CONFIG_HW_RANDOM_OMAP
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_HW_RANDOM_OMAP=m
diff --git a/configs/fedora/generic/arm/armv7/armv7/CONFIG_HW_RANDOM_OMAP b/configs/fedora/generic/arm/armv7/armv7/CONFIG_HW_RANDOM_OMAP
deleted file mode 100644
index cf37a6e35..000000000
--- a/configs/fedora/generic/arm/armv7/armv7/CONFIG_HW_RANDOM_OMAP
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_HW_RANDOM_OMAP=m
diff --git a/configs/fedora/generic/arm/armv7/armv7/CONFIG_MFD_TI_LMU b/configs/fedora/generic/arm/armv7/armv7/CONFIG_MFD_TI_LMU
new file mode 100644
index 000000000..777cb90c8
--- /dev/null
+++ b/configs/fedora/generic/arm/armv7/armv7/CONFIG_MFD_TI_LMU
@@ -0,0 +1 @@
+CONFIG_MFD_TI_LMU=m
diff --git a/configs/fedora/generic/arm/armv7/armv7/CONFIG_REGULATOR_LM363X b/configs/fedora/generic/arm/armv7/armv7/CONFIG_REGULATOR_LM363X
new file mode 100644
index 000000000..a4610d589
--- /dev/null
+++ b/configs/fedora/generic/arm/armv7/armv7/CONFIG_REGULATOR_LM363X
@@ -0,0 +1 @@
+CONFIG_REGULATOR_LM363X=m
diff --git a/configs/fedora/generic/arm/armv7/armv7/CONFIG_REMOTEPROC b/configs/fedora/generic/arm/armv7/armv7/CONFIG_REMOTEPROC
deleted file mode 100644
index 5a1f9df99..000000000
--- a/configs/fedora/generic/arm/armv7/armv7/CONFIG_REMOTEPROC
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_REMOTEPROC=m
diff --git a/configs/fedora/generic/arm/armv7/armv7/CONFIG_SERIAL_8250_OMAP b/configs/fedora/generic/arm/armv7/armv7/CONFIG_SERIAL_8250_OMAP
index 582053b2d..0f7ea5449 100644
--- a/configs/fedora/generic/arm/armv7/armv7/CONFIG_SERIAL_8250_OMAP
+++ b/configs/fedora/generic/arm/armv7/armv7/CONFIG_SERIAL_8250_OMAP
@@ -1 +1 @@
-CONFIG_SERIAL_8250_OMAP=m
+CONFIG_SERIAL_8250_OMAP=y
diff --git a/configs/fedora/generic/arm/armv7/armv7/CONFIG_SERIAL_8250_OMAP_TTYO_FIXUP b/configs/fedora/generic/arm/armv7/armv7/CONFIG_SERIAL_8250_OMAP_TTYO_FIXUP
new file mode 100644
index 000000000..cffbc1b84
--- /dev/null
+++ b/configs/fedora/generic/arm/armv7/armv7/CONFIG_SERIAL_8250_OMAP_TTYO_FIXUP
@@ -0,0 +1 @@
+CONFIG_SERIAL_8250_OMAP_TTYO_FIXUP=y
diff --git a/configs/fedora/generic/arm/armv7/armv7/CONFIG_SERIAL_OMAP b/configs/fedora/generic/arm/armv7/armv7/CONFIG_SERIAL_OMAP
index 0dbd205b2..1c036ec4f 100644
--- a/configs/fedora/generic/arm/armv7/armv7/CONFIG_SERIAL_OMAP
+++ b/configs/fedora/generic/arm/armv7/armv7/CONFIG_SERIAL_OMAP
@@ -1 +1 @@
-CONFIG_SERIAL_OMAP=y
+# CONFIG_SERIAL_OMAP is not set
diff --git a/configs/fedora/generic/arm/armv7/armv7/CONFIG_SERIAL_OMAP_CONSOLE b/configs/fedora/generic/arm/armv7/armv7/CONFIG_SERIAL_OMAP_CONSOLE
deleted file mode 100644
index 84ab44f7f..000000000
--- a/configs/fedora/generic/arm/armv7/armv7/CONFIG_SERIAL_OMAP_CONSOLE
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_SERIAL_OMAP_CONSOLE=y
diff --git a/kernel-aarch64-debug.config b/kernel-aarch64-debug.config
index 023854fb8..ce239f899 100644
--- a/kernel-aarch64-debug.config
+++ b/kernel-aarch64-debug.config
@@ -1810,6 +1810,7 @@ CONFIG_GPIO_PCF857X=m
CONFIG_GPIO_PCI_IDIO_16=m
# CONFIG_GPIO_PISOSR is not set
CONFIG_GPIO_PL061=y
+CONFIG_GPIO_RASPBERRYPI_EXP=m
# CONFIG_GPIO_RDC321X is not set
# CONFIG_GPIO_SCH311X is not set
# CONFIG_GPIO_SX150X is not set
@@ -5805,7 +5806,6 @@ CONFIG_TIFM_CORE=m
CONFIG_TIGON3_HWMON=y
CONFIG_TIGON3=m
# CONFIG_TIMB_DMA is not set
-# CONFIG_TIMER_STATS is not set
CONFIG_TINYDRM_ILI9225=m
CONFIG_TINYDRM_MI0283QT=m
CONFIG_TINYDRM_MIPI_DBI=m
diff --git a/kernel-aarch64.config b/kernel-aarch64.config
index c48f5703a..90e9aeee4 100644
--- a/kernel-aarch64.config
+++ b/kernel-aarch64.config
@@ -1792,6 +1792,7 @@ CONFIG_GPIO_PCF857X=m
CONFIG_GPIO_PCI_IDIO_16=m
# CONFIG_GPIO_PISOSR is not set
CONFIG_GPIO_PL061=y
+CONFIG_GPIO_RASPBERRYPI_EXP=m
# CONFIG_GPIO_RDC321X is not set
# CONFIG_GPIO_SCH311X is not set
# CONFIG_GPIO_SX150X is not set
@@ -5781,7 +5782,6 @@ CONFIG_TIFM_CORE=m
CONFIG_TIGON3_HWMON=y
CONFIG_TIGON3=m
# CONFIG_TIMB_DMA is not set
-# CONFIG_TIMER_STATS is not set
CONFIG_TINYDRM_ILI9225=m
CONFIG_TINYDRM_MI0283QT=m
CONFIG_TINYDRM_MIPI_DBI=m
diff --git a/kernel-armv7hl-debug.config b/kernel-armv7hl-debug.config
index 59f12cd97..cf3035821 100644
--- a/kernel-armv7hl-debug.config
+++ b/kernel-armv7hl-debug.config
@@ -1927,6 +1927,7 @@ CONFIG_GPIO_PCF857X=m
CONFIG_GPIO_PCI_IDIO_16=m
# CONFIG_GPIO_PISOSR is not set
CONFIG_GPIO_PL061=y
+CONFIG_GPIO_RASPBERRYPI_EXP=m
# CONFIG_GPIO_RDC321X is not set
# CONFIG_GPIO_SCH311X is not set
CONFIG_GPIO_STMPE=y
@@ -3288,7 +3289,7 @@ CONFIG_MFD_T7L66XB=y
CONFIG_MFD_TC6387XB=y
# CONFIG_MFD_TC6393XB is not set
CONFIG_MFD_TI_AM335X_TSCADC=m
-# CONFIG_MFD_TI_LMU is not set
+CONFIG_MFD_TI_LMU=m
# CONFIG_MFD_TI_LP873X is not set
# CONFIG_MFD_TI_LP87565 is not set
# CONFIG_MFD_TIMBERDALE is not set
@@ -4765,6 +4766,7 @@ CONFIG_REGULATOR_FIXED_VOLTAGE=y
CONFIG_REGULATOR_GPIO=m
CONFIG_REGULATOR_ISL6271A=m
CONFIG_REGULATOR_ISL9305=m
+CONFIG_REGULATOR_LM363X=m
CONFIG_REGULATOR_LP3971=m
CONFIG_REGULATOR_LP3972=m
CONFIG_REGULATOR_LP872X=y
@@ -5416,7 +5418,8 @@ CONFIG_SERIAL_8250_MANY_PORTS=y
# CONFIG_SERIAL_8250_MID is not set
CONFIG_SERIAL_8250_MOXA=m
CONFIG_SERIAL_8250_NR_UARTS=32
-CONFIG_SERIAL_8250_OMAP=m
+CONFIG_SERIAL_8250_OMAP_TTYO_FIXUP=y
+CONFIG_SERIAL_8250_OMAP=y
CONFIG_SERIAL_8250_PCI=y
CONFIG_SERIAL_8250_RSA=y
CONFIG_SERIAL_8250_RT288X=y
@@ -5455,8 +5458,7 @@ CONFIG_SERIAL_MVEBU_CONSOLE=y
CONFIG_SERIAL_MVEBU_UART=y
# CONFIG_SERIAL_NONSTANDARD is not set
CONFIG_SERIAL_OF_PLATFORM=y
-CONFIG_SERIAL_OMAP_CONSOLE=y
-CONFIG_SERIAL_OMAP=y
+# CONFIG_SERIAL_OMAP is not set
# CONFIG_SERIAL_PCH_UART is not set
CONFIG_SERIAL_PXA_CONSOLE=y
CONFIG_SERIAL_PXA=y
@@ -6283,7 +6285,6 @@ CONFIG_TIFM_CORE=m
CONFIG_TIGON3_HWMON=y
CONFIG_TIGON3=m
# CONFIG_TIMB_DMA is not set
-# CONFIG_TIMER_STATS is not set
CONFIG_TINYDRM_ILI9225=m
CONFIG_TINYDRM_MI0283QT=m
CONFIG_TINYDRM_MIPI_DBI=m
diff --git a/kernel-armv7hl-lpae-debug.config b/kernel-armv7hl-lpae-debug.config
index 47770a418..cfbb4d765 100644
--- a/kernel-armv7hl-lpae-debug.config
+++ b/kernel-armv7hl-lpae-debug.config
@@ -1828,6 +1828,7 @@ CONFIG_GPIO_PCF857X=m
CONFIG_GPIO_PCI_IDIO_16=m
# CONFIG_GPIO_PISOSR is not set
CONFIG_GPIO_PL061=y
+CONFIG_GPIO_RASPBERRYPI_EXP=m
# CONFIG_GPIO_RDC321X is not set
# CONFIG_GPIO_SCH311X is not set
# CONFIG_GPIO_SX150X is not set
@@ -5874,7 +5875,6 @@ CONFIG_TIFM_CORE=m
CONFIG_TIGON3_HWMON=y
CONFIG_TIGON3=m
# CONFIG_TIMB_DMA is not set
-# CONFIG_TIMER_STATS is not set
CONFIG_TI_MESSAGE_MANAGER=m
CONFIG_TINYDRM_ILI9225=m
CONFIG_TINYDRM_MI0283QT=m
diff --git a/kernel-armv7hl-lpae.config b/kernel-armv7hl-lpae.config
index 5640a3557..5c73e5de6 100644
--- a/kernel-armv7hl-lpae.config
+++ b/kernel-armv7hl-lpae.config
@@ -1810,6 +1810,7 @@ CONFIG_GPIO_PCF857X=m
CONFIG_GPIO_PCI_IDIO_16=m
# CONFIG_GPIO_PISOSR is not set
CONFIG_GPIO_PL061=y
+CONFIG_GPIO_RASPBERRYPI_EXP=m
# CONFIG_GPIO_RDC321X is not set
# CONFIG_GPIO_SCH311X is not set
# CONFIG_GPIO_SX150X is not set
@@ -5850,7 +5851,6 @@ CONFIG_TIFM_CORE=m
CONFIG_TIGON3_HWMON=y
CONFIG_TIGON3=m
# CONFIG_TIMB_DMA is not set
-# CONFIG_TIMER_STATS is not set
CONFIG_TI_MESSAGE_MANAGER=m
CONFIG_TINYDRM_ILI9225=m
CONFIG_TINYDRM_MI0283QT=m
diff --git a/kernel-armv7hl.config b/kernel-armv7hl.config
index 640802611..c9c3b6dcf 100644
--- a/kernel-armv7hl.config
+++ b/kernel-armv7hl.config
@@ -1909,6 +1909,7 @@ CONFIG_GPIO_PCF857X=m
CONFIG_GPIO_PCI_IDIO_16=m
# CONFIG_GPIO_PISOSR is not set
CONFIG_GPIO_PL061=y
+CONFIG_GPIO_RASPBERRYPI_EXP=m
# CONFIG_GPIO_RDC321X is not set
# CONFIG_GPIO_SCH311X is not set
CONFIG_GPIO_STMPE=y
@@ -3267,7 +3268,7 @@ CONFIG_MFD_T7L66XB=y
CONFIG_MFD_TC6387XB=y
# CONFIG_MFD_TC6393XB is not set
CONFIG_MFD_TI_AM335X_TSCADC=m
-# CONFIG_MFD_TI_LMU is not set
+CONFIG_MFD_TI_LMU=m
# CONFIG_MFD_TI_LP873X is not set
# CONFIG_MFD_TI_LP87565 is not set
# CONFIG_MFD_TIMBERDALE is not set
@@ -4742,6 +4743,7 @@ CONFIG_REGULATOR_FIXED_VOLTAGE=y
CONFIG_REGULATOR_GPIO=m
CONFIG_REGULATOR_ISL6271A=m
CONFIG_REGULATOR_ISL9305=m
+CONFIG_REGULATOR_LM363X=m
CONFIG_REGULATOR_LP3971=m
CONFIG_REGULATOR_LP3972=m
CONFIG_REGULATOR_LP872X=y
@@ -5393,7 +5395,8 @@ CONFIG_SERIAL_8250_MANY_PORTS=y
# CONFIG_SERIAL_8250_MID is not set
CONFIG_SERIAL_8250_MOXA=m
CONFIG_SERIAL_8250_NR_UARTS=32
-CONFIG_SERIAL_8250_OMAP=m
+CONFIG_SERIAL_8250_OMAP_TTYO_FIXUP=y
+CONFIG_SERIAL_8250_OMAP=y
CONFIG_SERIAL_8250_PCI=y
CONFIG_SERIAL_8250_RSA=y
CONFIG_SERIAL_8250_RT288X=y
@@ -5432,8 +5435,7 @@ CONFIG_SERIAL_MVEBU_CONSOLE=y
CONFIG_SERIAL_MVEBU_UART=y
# CONFIG_SERIAL_NONSTANDARD is not set
CONFIG_SERIAL_OF_PLATFORM=y
-CONFIG_SERIAL_OMAP_CONSOLE=y
-CONFIG_SERIAL_OMAP=y
+# CONFIG_SERIAL_OMAP is not set
# CONFIG_SERIAL_PCH_UART is not set
CONFIG_SERIAL_PXA_CONSOLE=y
CONFIG_SERIAL_PXA=y
@@ -6259,7 +6261,6 @@ CONFIG_TIFM_CORE=m
CONFIG_TIGON3_HWMON=y
CONFIG_TIGON3=m
# CONFIG_TIMB_DMA is not set
-# CONFIG_TIMER_STATS is not set
CONFIG_TINYDRM_ILI9225=m
CONFIG_TINYDRM_MI0283QT=m
CONFIG_TINYDRM_MIPI_DBI=m
diff --git a/kernel-i686-PAE.config b/kernel-i686-PAE.config
index bf503e125..2a3870565 100644
--- a/kernel-i686-PAE.config
+++ b/kernel-i686-PAE.config
@@ -5440,7 +5440,6 @@ CONFIG_TIFM_CORE=m
CONFIG_TIGON3_HWMON=y
CONFIG_TIGON3=m
# CONFIG_TIMB_DMA is not set
-# CONFIG_TIMER_STATS is not set
CONFIG_TIPC=m
# CONFIG_TIPC_MEDIA_IB is not set
CONFIG_TIPC_MEDIA_UDP=y
diff --git a/kernel-i686-PAEdebug.config b/kernel-i686-PAEdebug.config
index 5a2e8c691..da863e5f9 100644
--- a/kernel-i686-PAEdebug.config
+++ b/kernel-i686-PAEdebug.config
@@ -5463,7 +5463,6 @@ CONFIG_TIFM_CORE=m
CONFIG_TIGON3_HWMON=y
CONFIG_TIGON3=m
# CONFIG_TIMB_DMA is not set
-# CONFIG_TIMER_STATS is not set
CONFIG_TIPC=m
# CONFIG_TIPC_MEDIA_IB is not set
CONFIG_TIPC_MEDIA_UDP=y
diff --git a/kernel-i686-debug.config b/kernel-i686-debug.config
index 487f2b76c..1420b7605 100644
--- a/kernel-i686-debug.config
+++ b/kernel-i686-debug.config
@@ -5463,7 +5463,6 @@ CONFIG_TIFM_CORE=m
CONFIG_TIGON3_HWMON=y
CONFIG_TIGON3=m
# CONFIG_TIMB_DMA is not set
-# CONFIG_TIMER_STATS is not set
CONFIG_TIPC=m
# CONFIG_TIPC_MEDIA_IB is not set
CONFIG_TIPC_MEDIA_UDP=y
diff --git a/kernel-i686.config b/kernel-i686.config
index 6ebbf4120..898c565a0 100644
--- a/kernel-i686.config
+++ b/kernel-i686.config
@@ -5440,7 +5440,6 @@ CONFIG_TIFM_CORE=m
CONFIG_TIGON3_HWMON=y
CONFIG_TIGON3=m
# CONFIG_TIMB_DMA is not set
-# CONFIG_TIMER_STATS is not set
CONFIG_TIPC=m
# CONFIG_TIPC_MEDIA_IB is not set
CONFIG_TIPC_MEDIA_UDP=y
diff --git a/kernel-ppc64-debug.config b/kernel-ppc64-debug.config
index eb1ec4f35..3289affb3 100644
--- a/kernel-ppc64-debug.config
+++ b/kernel-ppc64-debug.config
@@ -5227,7 +5227,6 @@ CONFIG_TIFM_CORE=m
CONFIG_TIGON3_HWMON=y
CONFIG_TIGON3=m
# CONFIG_TIMB_DMA is not set
-# CONFIG_TIMER_STATS is not set
CONFIG_TIPC=m
# CONFIG_TIPC_MEDIA_IB is not set
CONFIG_TIPC_MEDIA_UDP=y
diff --git a/kernel-ppc64.config b/kernel-ppc64.config
index 9ad2854ea..f211e4b89 100644
--- a/kernel-ppc64.config
+++ b/kernel-ppc64.config
@@ -5202,7 +5202,6 @@ CONFIG_TIFM_CORE=m
CONFIG_TIGON3_HWMON=y
CONFIG_TIGON3=m
# CONFIG_TIMB_DMA is not set
-# CONFIG_TIMER_STATS is not set
CONFIG_TIPC=m
# CONFIG_TIPC_MEDIA_IB is not set
CONFIG_TIPC_MEDIA_UDP=y
diff --git a/kernel-ppc64le-debug.config b/kernel-ppc64le-debug.config
index 6d64d5688..59b3e81bc 100644
--- a/kernel-ppc64le-debug.config
+++ b/kernel-ppc64le-debug.config
@@ -5155,7 +5155,6 @@ CONFIG_TIFM_CORE=m
CONFIG_TIGON3_HWMON=y
CONFIG_TIGON3=m
# CONFIG_TIMB_DMA is not set
-# CONFIG_TIMER_STATS is not set
CONFIG_TIPC=m
# CONFIG_TIPC_MEDIA_IB is not set
CONFIG_TIPC_MEDIA_UDP=y
diff --git a/kernel-ppc64le.config b/kernel-ppc64le.config
index 46135f8d5..93ed61ad6 100644
--- a/kernel-ppc64le.config
+++ b/kernel-ppc64le.config
@@ -5130,7 +5130,6 @@ CONFIG_TIFM_CORE=m
CONFIG_TIGON3_HWMON=y
CONFIG_TIGON3=m
# CONFIG_TIMB_DMA is not set
-# CONFIG_TIMER_STATS is not set
CONFIG_TIPC=m
# CONFIG_TIPC_MEDIA_IB is not set
CONFIG_TIPC_MEDIA_UDP=y
diff --git a/kernel-s390x-debug.config b/kernel-s390x-debug.config
index 37d0c7546..c05b3c585 100644
--- a/kernel-s390x-debug.config
+++ b/kernel-s390x-debug.config
@@ -5049,7 +5049,6 @@ CONFIG_TIFM_7XX1=m
CONFIG_TIGON3_HWMON=y
CONFIG_TIGON3=m
# CONFIG_TIMB_DMA is not set
-# CONFIG_TIMER_STATS is not set
CONFIG_TIPC=m
# CONFIG_TIPC_MEDIA_IB is not set
CONFIG_TIPC_MEDIA_UDP=y
diff --git a/kernel-s390x.config b/kernel-s390x.config
index 0044620f8..21eafc9b8 100644
--- a/kernel-s390x.config
+++ b/kernel-s390x.config
@@ -5024,7 +5024,6 @@ CONFIG_TIFM_7XX1=m
CONFIG_TIGON3_HWMON=y
CONFIG_TIGON3=m
# CONFIG_TIMB_DMA is not set
-# CONFIG_TIMER_STATS is not set
CONFIG_TIPC=m
# CONFIG_TIPC_MEDIA_IB is not set
CONFIG_TIPC_MEDIA_UDP=y
diff --git a/kernel-x86_64-debug.config b/kernel-x86_64-debug.config
index 926a0f27f..be00d23a7 100644
--- a/kernel-x86_64-debug.config
+++ b/kernel-x86_64-debug.config
@@ -5553,7 +5553,6 @@ CONFIG_TIFM_CORE=m
CONFIG_TIGON3_HWMON=y
CONFIG_TIGON3=m
# CONFIG_TIMB_DMA is not set
-# CONFIG_TIMER_STATS is not set
CONFIG_TIPC=m
# CONFIG_TIPC_MEDIA_IB is not set
CONFIG_TIPC_MEDIA_UDP=y
diff --git a/kernel-x86_64.config b/kernel-x86_64.config
index eeaf80507..ade2b9c70 100644
--- a/kernel-x86_64.config
+++ b/kernel-x86_64.config
@@ -5530,7 +5530,6 @@ CONFIG_TIFM_CORE=m
CONFIG_TIGON3_HWMON=y
CONFIG_TIGON3=m
# CONFIG_TIMB_DMA is not set
-# CONFIG_TIMER_STATS is not set
CONFIG_TIPC=m
# CONFIG_TIPC_MEDIA_IB is not set
CONFIG_TIPC_MEDIA_UDP=y
diff --git a/kernel.spec b/kernel.spec
index feab5c65c..70b7c9654 100644
--- a/kernel.spec
+++ b/kernel.spec
@@ -24,7 +24,7 @@ Summary: The Linux kernel
%global zipsed -e 's/\.ko$/\.ko.xz/'
%endif
-# define buildid .local
+%define buildid .rpi3
# baserelease defines which build revision of this kernel version we're
# building. We used to call this fedora_build, but the magical name
@@ -595,6 +595,20 @@ Patch311: arm-clk-bcm2835-hdmi-fixes.patch
# https://www.spinics.net/lists/arm-kernel/msg632925.html
Patch313: arm-crypto-sunxi-ss-Add-MODULE_ALIAS-to-sun4i-ss.patch
+Patch314: bcm283x-gpio-expander.patch
+
+# https://www.spinics.net/lists/arm-kernel/msg621982.html
+Patch315: bcm283x-Fix-probing-of-bcm2835-i2s.patch
+
+# https://www.spinics.net/lists/arm-kernel/msg633942.html
+Patch316: mmc-sdhci-iproc-Disable-preset-values-for-BCM2835.patch
+
+# https://www.spinics.net/lists/arm-kernel/msg633945.html
+Patch317: bcm2835-hwrng-Handle-deferred-clock-properly.patch
+
+# https://www.spinics.net/lists/linux-bluetooth/msg74414.html
+Patch318: bcm2835-fix-bluetooth.patch
+
# 400 - IBM (ppc/s390x) patches
# 500 - Temp fixes/CVEs etc
@@ -1863,6 +1877,12 @@ fi
#
#
%changelog
+* Sat Mar 3 2018 Peter Robinson <pbrobinson@fedoraproject.org>
+- Add GPIO expander driver for Raspberry Pi 3
+- Some Raspberry Pi fixes
+- Switch OMAP serial driver to new 8250 driver
+- General ARM updates
+
* Fri Mar 02 2018 Jeremy Cline <jeremy@jcline.org> - 4.16.0-0.rc3.git4.1
- Linux v4.16-rc3-245-g5d60e057d127
diff --git a/mmc-sdhci-iproc-Disable-preset-values-for-BCM2835.patch b/mmc-sdhci-iproc-Disable-preset-values-for-BCM2835.patch
new file mode 100644
index 000000000..7b3b2c01c
--- /dev/null
+++ b/mmc-sdhci-iproc-Disable-preset-values-for-BCM2835.patch
@@ -0,0 +1,37 @@
+From patchwork Mon Feb 12 20:02:44 2018
+Content-Type: text/plain; charset="utf-8"
+MIME-Version: 1.0
+Content-Transfer-Encoding: 7bit
+Subject: mmc: sdhci-iproc: Disable preset values for BCM2835
+From: Stefan Wahren <stefan.wahren@i2se.com>
+X-Patchwork-Id: 10214367
+Message-Id: <1518465764-30051-1-git-send-email-stefan.wahren@i2se.com>
+To: Adrian Hunter <adrian.hunter@intel.com>,
+ Ulf Hansson <ulf.hansson@linaro.org>
+Cc: Eric Anholt <eric@anholt.net>, Ray Jui <rjui@broadcom.com>,
+ Scott Branden <sbranden@broadcom.com>, Jon Mason <jonmason@broadcom.com>,
+ linux-arm-kernel@lists.infradead.org,
+ bcm-kernel-feedback-list@broadcom.com, linux-mmc@vger.kernel.org,
+ Stefan Wahren <stefan.wahren@i2se.com>
+Date: Mon, 12 Feb 2018 21:02:44 +0100
+
+According to the BCM2835 datasheet there are no preset value registers.
+This wasn't an issue before, because we didn't propagate 1.8V support.
+
+Signed-off-by: Stefan Wahren <stefan.wahren@i2se.com>
+---
+ drivers/mmc/host/sdhci-iproc.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/drivers/mmc/host/sdhci-iproc.c b/drivers/mmc/host/sdhci-iproc.c
+index 61666d2..0ef741b 100644
+--- a/drivers/mmc/host/sdhci-iproc.c
++++ b/drivers/mmc/host/sdhci-iproc.c
+@@ -214,6 +214,7 @@ static const struct sdhci_pltfm_data sdhci_bcm2835_pltfm_data = {
+ SDHCI_QUIRK_DATA_TIMEOUT_USES_SDCLK |
+ SDHCI_QUIRK_MISSING_CAPS |
+ SDHCI_QUIRK_NO_HISPD_BIT,
++ .quirks2 = SDHCI_QUIRK2_PRESET_VALUE_BROKEN,
+ .ops = &sdhci_iproc_32only_ops,
+ };
+