diff options
author | Peter Robinson <pbrobinson@gmail.com> | 2018-04-23 17:16:43 +0100 |
---|---|---|
committer | Jeremy Cline <jeremy@jcline.org> | 2018-04-24 18:31:43 -0400 |
commit | 0edfe4f286703af715625ca588532edcbbb68e2a (patch) | |
tree | 1df6c5730b8538cdcf368270a6faad0bd234a9b8 | |
parent | d16f67c2d93b7bd5b8ff5ac87b863f641dfe3e71 (diff) | |
download | kernel-0edfe4f286703af715625ca588532edcbbb68e2a.tar.gz kernel-0edfe4f286703af715625ca588532edcbbb68e2a.tar.xz kernel-0edfe4f286703af715625ca588532edcbbb68e2a.zip |
Latest RPi3+ patches, RPi fixes, further lan78xx patches (some from 4.17, some under review), fixes for Marvell a37xx EspressoBin
-rw-r--r-- | bcm2837-gpio-expander.patch | 250 | ||||
-rw-r--r-- | bcm2837-lan78xx-fixes.patch | 911 | ||||
-rw-r--r-- | bcm2837-rpi-initial-3plus-support.patch | 560 | ||||
-rw-r--r-- | bcm2837-rpi-initial-support-for-the-3.patch | 209 | ||||
-rw-r--r-- | bcm283x-drm-vc4-fix-mem-leak.patch | 54 | ||||
-rw-r--r-- | kernel.spec | 17 | ||||
-rw-r--r-- | mvebu-a37xx-fixes.patch | 245 |
7 files changed, 1629 insertions, 617 deletions
diff --git a/bcm2837-gpio-expander.patch b/bcm2837-gpio-expander.patch index f5b8370b4..b2872cbe1 100644 --- a/bcm2837-gpio-expander.patch +++ b/bcm2837-gpio-expander.patch @@ -1,19 +1,7 @@ -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 08af112e79cab22f318ca0ad1a48187eee5ac2f0 Mon Sep 17 00:00:00 2001 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 +Subject: soc: bcm2835: sync firmware properties with downstream 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 @@ -21,18 +9,13 @@ 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 +Signed-off-by: Linus Walleij <linus.walleij@linaro.org> --- 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 +index cb979ad..50df5b2 100644 --- a/include/soc/bcm2835/raspberrypi-firmware.h +++ b/include/soc/bcm2835/raspberrypi-firmware.h @@ -63,6 +63,7 @@ enum rpi_firmware_property_tag { @@ -94,22 +77,12 @@ index cb979ad90401..50df5b28d2c9 100644 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 +-- +cgit v1.1 +From 9777d8099a4a9df1625b4caaee1388c0158478c5 Mon Sep 17 00:00:00 2001 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 +Subject: dt-bindings: gpio: add raspberry pi GPIO expander binding 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 @@ -117,20 +90,7 @@ 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 +Signed-off-by: Linus Walleij <linus.walleij@linaro.org> --- .../bindings/gpio/raspberrypi,firmware-gpio.txt | 30 ++++++++++++++++++++++ 1 file changed, 30 insertions(+) @@ -138,7 +98,7 @@ v2: 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 +index 0000000..ce97265 --- /dev/null +++ b/Documentation/devicetree/bindings/gpio/raspberrypi,firmware-gpio.txt @@ -0,0 +1,30 @@ @@ -172,26 +132,13 @@ index 000000000000..ce97265e23ba + #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 - +-- +cgit v1.1 +From a98d90e7d588045716c3c85d63f93dc3f15a079b Mon Sep 17 00:00:00 2001 From: Dave Stevenson <dave.stevenson@raspberrypi.org> +Date: Tue, 20 Feb 2018 14:19:33 +0200 +Subject: gpio: raspberrypi-exp: Driver for RPi3 GPIO expander via mailbox + service Pi3 and Compute Module 3 have a GPIO expander that the VPU communicates with. @@ -201,31 +148,7 @@ 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 +Signed-off-by: Linus Walleij <linus.walleij@linaro.org> --- drivers/gpio/Kconfig | 9 ++ drivers/gpio/Makefile | 1 + @@ -234,7 +157,7 @@ v2: create mode 100644 drivers/gpio/gpio-raspberrypi-exp.c diff --git a/drivers/gpio/Kconfig b/drivers/gpio/Kconfig -index 8dbb2280538d..fd0562a37f68 100644 +index 8dbb228..fd0562a 100644 --- a/drivers/gpio/Kconfig +++ b/drivers/gpio/Kconfig @@ -122,6 +122,15 @@ config GPIO_ATH79 @@ -254,7 +177,7 @@ index 8dbb2280538d..fd0562a37f68 100644 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 +index cccb0d4..76dc0a0 100644 --- a/drivers/gpio/Makefile +++ b/drivers/gpio/Makefile @@ -32,6 +32,7 @@ obj-$(CONFIG_GPIO_AMDPT) += gpio-amdpt.o @@ -267,7 +190,7 @@ index cccb0d40846c..76dc0a02bd56 100644 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 +index 0000000..d6d36d5 --- /dev/null +++ b/drivers/gpio/gpio-raspberrypi-exp.c @@ -0,0 +1,252 @@ @@ -523,36 +446,26 @@ index 000000000000..d6d36d537e37 +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 +-- +cgit v1.1 +From b0c07c5af6d286f3d3b907743998e9d41f6ab042 Mon Sep 17 00:00:00 2001 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 +Subject: ARM: dts: bcm2835: make the firmware node into a bus 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 +Reviewed-by: Eric Anholt <eric@anholt.net> +Signed-off-by: Eric Anholt <eric@anholt.net> --- 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 +index e36c392..0198bd4 100644 --- a/arch/arm/boot/dts/bcm2835-rpi.dtsi +++ b/arch/arm/boot/dts/bcm2835-rpi.dtsi @@ -18,7 +18,9 @@ @@ -566,50 +479,26 @@ index e36c392a2b8f..0198bd46ef7c 100644 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 +-- +cgit v1.1 +From 4d5b2eaf3ca80c56a59f230208c4ff11e3f68d55 Mon Sep 17 00:00:00 2001 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 +Subject: ARM: dts: bcm2837-rpi-3-b: add GPIO expander 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 +Reviewed-by: Eric Anholt <eric@anholt.net> +Signed-off-by: Eric Anholt <eric@anholt.net> --- 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 +index 3e4ed7c..0b31d99 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 @@ @@ -636,72 +525,5 @@ index 3e4ed7c5b0b3..0b31d995a066 100644 /* uart0 communicates with the BT module */ &uart0 { pinctrl-names = "default"; -From 257f497bb3e58f88500971145761ed55428618eb Mon Sep 17 00:00:00 2001 -From: Stefan Wahren <stefan.wahren@i2se.com> -Date: Wed, 7 Mar 2018 15:56:20 +0100 -Subject: [PATCH] ARM: dts: bcm2837: Add missing GPIOs of Expander - -Signed-off-by: Stefan Wahren <stefan.wahren@i2se.com> ---- - arch/arm/boot/dts/bcm2837-rpi-3-b.dts | 20 +++++++++++++++++++- - 1 file changed, 19 insertions(+), 1 deletion(-) - -diff --git a/arch/arm/boot/dts/bcm2837-rpi-3-b.dts b/arch/arm/boot/dts/bcm2837-rpi-3-b.dts -index 0b31d995a066..3e87ed05918e 100644 ---- a/arch/arm/boot/dts/bcm2837-rpi-3-b.dts -+++ b/arch/arm/boot/dts/bcm2837-rpi-3-b.dts -@@ -20,9 +20,14 @@ - - leds { - act { -- gpios = <&gpio 47 GPIO_ACTIVE_HIGH>; -+ gpios = <&expgpio 2 GPIO_ACTIVE_HIGH>; - }; - }; -+ -+ wifi_pwrseq: wifi-pwrseq { -+ compatible = "mmc-pwrseq-simple"; -+ reset-gpios = <&expgpio 1 GPIO_ACTIVE_HIGH>; -+ }; - }; - - &firmware { -@@ -42,6 +47,10 @@ - }; - }; - -+&hdmi { -+ hpd-gpios = <&expgpio 4 GPIO_ACTIVE_LOW>; -+}; -+ - /* uart0 communicates with the BT module */ - &uart0 { - pinctrl-names = "default"; -@@ -51,6 +60,7 @@ - bluetooth { - compatible = "brcm,bcm43438-bt"; - max-speed = <2000000>; -+ shutdown-gpios = <&expgpio 0 GPIO_ACTIVE_HIGH>; - }; - }; - -@@ -63,11 +73,19 @@ - - /* SDHCI is used to control the SDIO for wireless */ - &sdhci { -+ #address-cells = <1>; -+ #size-cells = <0>; - pinctrl-names = "default"; - pinctrl-0 = <&emmc_gpio34>; - status = "okay"; - bus-width = <4>; - non-removable; -+ mmc-pwrseq = <&wifi_pwrseq>; -+ -+ brcmf: wifi@1 { -+ reg = <1>; -+ compatible = "brcm,bcm4329-fmac"; -+ }; - }; - - /* SDHOST is used to drive the SD card */ +-- +cgit v1.1 diff --git a/bcm2837-lan78xx-fixes.patch b/bcm2837-lan78xx-fixes.patch index c8fd0b9f0..7fa432a5e 100644 --- a/bcm2837-lan78xx-fixes.patch +++ b/bcm2837-lan78xx-fixes.patch @@ -1,188 +1,268 @@ -From 6ed88d188a8240ba44da6578eab7d17e036d0e61 Mon Sep 17 00:00:00 2001 -From: Phil Elwell <phil@raspberrypi.org> -Date: Tue, 17 Oct 2017 15:04:29 +0100 -Subject: [PATCH] lan78xx: Enable LEDs if no valid EEPROM or OTP - -For applications of the LAN78xx that don't have valid programmed -EEPROMs or OTPs, enabling both LEDs by default seems reasonable. - -Signed-off-by: Phil Elwell <phil@raspberrypi.org> +From b23d39c166ca3ed30a2a0a4c8ba4cf29677eed83 Mon Sep 17 00:00:00 2001 +From: Raghuram Chary J <raghuramchary.jallipalli@microchip.com> +Date: Wed, 11 Apr 2018 20:36:36 +0530 +Subject: [PATCH 1/9] lan78xx: PHY DSP registers initialization to address EEE + link drop issues with long cables + +The patch is to configure DSP registers of PHY device +to handle Gbe-EEE failures with >40m cable length. + +Fixes: 55d7de9de6c3 ("Microchip's LAN7800 family USB 2/3 to 10/100/1000 Ethernet device driver") +Signed-off-by: Raghuram Chary J <raghuramchary.jallipalli@microchip.com> +Signed-off-by: David S. Miller <davem@davemloft.net> --- - drivers/net/usb/lan78xx.c | 6 ++++++ - 1 file changed, 6 insertions(+) - -diff --git a/drivers/net/usb/lan78xx.c b/drivers/net/usb/lan78xx.c -index a21039852f8d..cd20ce4ed87d 100644 ---- a/drivers/net/usb/lan78xx.c -+++ b/drivers/net/usb/lan78xx.c -@@ -2414,6 +2414,12 @@ static int lan78xx_reset(struct lan78xx_net *dev) + drivers/net/phy/microchip.c | 178 ++++++++++++++++++++++++++++++++++- + include/linux/microchipphy.h | 8 ++ + 2 files changed, 185 insertions(+), 1 deletion(-) + +diff --git a/drivers/net/phy/microchip.c b/drivers/net/phy/microchip.c +index 0f293ef28935..a97ac8c12c4c 100644 +--- a/drivers/net/phy/microchip.c ++++ b/drivers/net/phy/microchip.c +@@ -20,6 +20,7 @@ + #include <linux/ethtool.h> + #include <linux/phy.h> + #include <linux/microchipphy.h> ++#include <linux/delay.h> + + #define DRIVER_AUTHOR "WOOJUNG HUH <woojung.huh@microchip.com>" + #define DRIVER_DESC "Microchip LAN88XX PHY driver" +@@ -30,6 +31,16 @@ struct lan88xx_priv { + __u32 wolopts; + }; - ret = lan78xx_read_reg(dev, HW_CFG, &buf); - buf |= HW_CFG_MEF_; ++static int lan88xx_read_page(struct phy_device *phydev) ++{ ++ return __phy_read(phydev, LAN88XX_EXT_PAGE_ACCESS); ++} + -+ /* If no valid EEPROM and no valid OTP, enable the LEDs by default */ -+ if (lan78xx_read_eeprom(dev, 0, 0, NULL) && -+ lan78xx_read_otp(dev, 0, 0, NULL)) -+ buf |= HW_CFG_LED0_EN_ | HW_CFG_LED1_EN_; ++static int lan88xx_write_page(struct phy_device *phydev, int page) ++{ ++ return __phy_write(phydev, LAN88XX_EXT_PAGE_ACCESS, page); ++} + - ret = lan78xx_write_reg(dev, HW_CFG, buf); - - ret = lan78xx_read_reg(dev, USB_CFG0, &buf); -From 4a4710f3847cd087e150f83382dffd92e09d9914 Mon Sep 17 00:00:00 2001 -From: Phil Elwell <phil@raspberrypi.org> -Date: Sat, 17 Mar 2018 00:10:02 +0100 -Subject: [PATCH] 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 -applications without programmed EEPROM or OTP. - -Signed-off-by: Phil Elwell <phil@raspberrypi.org> ---- - drivers/net/usb/lan78xx.c | 10 ++++++++++ - 1 file changed, 10 insertions(+) - -diff --git a/drivers/net/usb/lan78xx.c b/drivers/net/usb/lan78xx.c -index 60a604cc7647..a21039852f8d 100644 ---- a/drivers/net/usb/lan78xx.c -+++ b/drivers/net/usb/lan78xx.c -@@ -36,6 +36,7 @@ - #include <linux/irq.h> - #include <linux/irqchip/chained_irq.h> - #include <linux/microchipphy.h> -+#include <linux/of_net.h> - #include <linux/phy.h> - #include "lan78xx.h" + static int lan88xx_phy_config_intr(struct phy_device *phydev) + { + int rc; +@@ -66,6 +77,150 @@ static int lan88xx_suspend(struct phy_device *phydev) + return 0; + } -@@ -1639,6 +1640,14 @@ static void lan78xx_init_mac_address(struct lan78xx_net *dev) - u32 addr_lo, addr_hi; - int ret; - u8 addr[6]; -+ const u8 *mac_addr; -+ -+ /* maybe the boot loader passed the MAC address in devicetree */ -+ mac_addr = of_get_mac_address(dev->udev->dev.of_node); -+ if (mac_addr) { -+ ether_addr_copy(addr, mac_addr); -+ goto set_mac_addr; ++static int lan88xx_TR_reg_set(struct phy_device *phydev, u16 regaddr, ++ u32 data) ++{ ++ int val, save_page, ret = 0; ++ u16 buf; ++ ++ /* Save current page */ ++ save_page = phy_save_page(phydev); ++ if (save_page < 0) { ++ pr_warn("Failed to get current page\n"); ++ goto err; + } - - ret = lan78xx_read_reg(dev, RX_ADDRL, &addr_lo); - ret = lan78xx_read_reg(dev, RX_ADDRH, &addr_hi); -@@ -1667,6 +1676,7 @@ static void lan78xx_init_mac_address(struct lan78xx_net *dev) - "MAC address set to random addr"); - } - -+set_mac_addr: - addr_lo = addr[0] | (addr[1] << 8) | - (addr[2] << 16) | (addr[3] << 24); - addr_hi = addr[4] | (addr[5] << 8); -From b5284e5d2d3562dac311443969a538b7fecb9848 Mon Sep 17 00:00:00 2001 -From: Phil Elwell <phil@raspberrypi.org> -Date: Wed, 28 Mar 2018 12:18:13 +0100 -Subject: [PATCH 1/5] lan78xx: Ignore DT MAC address if already valid - -The patch to set the lan78xx MAC address from DT does so regardless of -whether or not the interface already has a valid address. As the -initialisation function is called from the reset handler when the -interface is brought up, it is impossible to change the MAC address -in a way that persists across the interface being brought up. - -Fix the problem by moving the DT reading code after the check for a -valid address. - -See: https://www.raspberrypi.org/forums/viewtopic.php?f=28&t=209309 - -Signed-off-by: Phil Elwell <phil@raspberrypi.org> ---- - drivers/net/usb/lan78xx.c | 17 +++++++++-------- - 1 file changed, 9 insertions(+), 8 deletions(-) - -diff --git a/drivers/net/usb/lan78xx.c b/drivers/net/usb/lan78xx.c -index b43b16b6e7ee..97ee7d3f749d 100644 ---- a/drivers/net/usb/lan78xx.c -+++ b/drivers/net/usb/lan78xx.c -@@ -1641,14 +1641,6 @@ static void lan78xx_init_mac_address(struct lan78xx_net *dev) - u32 addr_lo, addr_hi; - int ret; - u8 addr[6]; -- const u8 *mac_addr; -- -- /* maybe the boot loader passed the MAC address in devicetree */ -- mac_addr = of_get_mac_address(dev->udev->dev.of_node); -- if (mac_addr) { -- ether_addr_copy(addr, mac_addr); -- goto set_mac_addr; -- } - - ret = lan78xx_read_reg(dev, RX_ADDRL, &addr_lo); - ret = lan78xx_read_reg(dev, RX_ADDRH, &addr_hi); -@@ -1661,6 +1653,15 @@ static void lan78xx_init_mac_address(struct lan78xx_net *dev) - addr[5] = (addr_hi >> 8) & 0xFF; - - if (!is_valid_ether_addr(addr)) { -+ const u8 *mac_addr; + -+ /* maybe the boot loader passed the MAC address in devicetree */ -+ mac_addr = of_get_mac_address(dev->udev->dev.of_node); -+ if (mac_addr) { -+ ether_addr_copy(addr, mac_addr); -+ goto set_mac_addr; -+ } ++ /* Switch to TR page */ ++ lan88xx_write_page(phydev, LAN88XX_EXT_PAGE_ACCESS_TR); + - /* reading mac address from EEPROM or OTP */ - if ((lan78xx_read_eeprom(dev, EEPROM_MAC_OFFSET, ETH_ALEN, - addr) == 0) || --- -2.17.0 - -From 2c5d6ac9133cbfed05b97b34246121bddaf2aea4 Mon Sep 17 00:00:00 2001 -From: Dave Stevenson <dave.stevenson@raspberrypi.org> -Date: Wed, 4 Apr 2018 16:34:24 +0100 -Subject: [PATCH 2/5] net: lan78xx: Allow for VLAN headers in timeout. - -The frame abort timeout being set by lan78xx_set_rx_max_frame_length -didn't account for any VLAN headers, resulting in very low -throughput if used with tagged VLANs. -Use VLAN_ETH_HLEN instead of ETH_HLEN to correct for this. - -See https://github.com/raspberrypi/linux/issues/2458 - -Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.org> ---- - drivers/net/usb/lan78xx.c | 5 +++-- - 1 file changed, 3 insertions(+), 2 deletions(-) - -diff --git a/drivers/net/usb/lan78xx.c b/drivers/net/usb/lan78xx.c -index 97ee7d3f749d..5fd7b8569cba 100644 ---- a/drivers/net/usb/lan78xx.c -+++ b/drivers/net/usb/lan78xx.c -@@ -2193,7 +2193,7 @@ static int lan78xx_change_mtu(struct net_device *netdev, int new_mtu) - if ((ll_mtu % dev->maxpacket) == 0) - return -EDOM; ++ ret = __phy_write(phydev, LAN88XX_EXT_PAGE_TR_LOW_DATA, ++ (data & 0xFFFF)); ++ if (ret < 0) { ++ pr_warn("Failed to write TR low data\n"); ++ goto err; ++ } ++ ++ ret = __phy_write(phydev, LAN88XX_EXT_PAGE_TR_HIGH_DATA, ++ (data & 0x00FF0000) >> 16); ++ if (ret < 0) { ++ pr_warn("Failed to write TR high data\n"); ++ goto err; ++ } ++ ++ /* Config control bits [15:13] of register */ ++ buf = (regaddr & ~(0x3 << 13));/* Clr [14:13] to write data in reg */ ++ buf |= 0x8000; /* Set [15] to Packet transmit */ ++ ++ ret = __phy_write(phydev, LAN88XX_EXT_PAGE_TR_CR, buf); ++ if (ret < 0) { ++ pr_warn("Failed to write data in reg\n"); ++ goto err; ++ } ++ ++ usleep_range(1000, 2000);/* Wait for Data to be written */ ++ val = __phy_read(phydev, LAN88XX_EXT_PAGE_TR_CR); ++ if (!(val & 0x8000)) ++ pr_warn("TR Register[0x%X] configuration failed\n", regaddr); ++err: ++ return phy_restore_page(phydev, save_page, ret); ++} ++ ++static void lan88xx_config_TR_regs(struct phy_device *phydev) ++{ ++ int err; ++ ++ /* Get access to Channel 0x1, Node 0xF , Register 0x01. ++ * Write 24-bit value 0x12B00A to register. Setting MrvlTrFix1000Kf, ++ * MrvlTrFix1000Kp, MasterEnableTR bits. ++ */ ++ err = lan88xx_TR_reg_set(phydev, 0x0F82, 0x12B00A); ++ if (err < 0) ++ pr_warn("Failed to Set Register[0x0F82]\n"); ++ ++ /* Get access to Channel b'10, Node b'1101, Register 0x06. ++ * Write 24-bit value 0xD2C46F to register. Setting SSTrKf1000Slv, ++ * SSTrKp1000Mas bits. ++ */ ++ err = lan88xx_TR_reg_set(phydev, 0x168C, 0xD2C46F); ++ if (err < 0) ++ pr_warn("Failed to Set Register[0x168C]\n"); ++ ++ /* Get access to Channel b'10, Node b'1111, Register 0x11. ++ * Write 24-bit value 0x620 to register. Setting rem_upd_done_thresh ++ * bits ++ */ ++ err = lan88xx_TR_reg_set(phydev, 0x17A2, 0x620); ++ if (err < 0) ++ pr_warn("Failed to Set Register[0x17A2]\n"); ++ ++ /* Get access to Channel b'10, Node b'1101, Register 0x10. ++ * Write 24-bit value 0xEEFFDD to register. Setting ++ * eee_TrKp1Long_1000, eee_TrKp2Long_1000, eee_TrKp3Long_1000, ++ * eee_TrKp1Short_1000,eee_TrKp2Short_1000, eee_TrKp3Short_1000 bits. ++ */ ++ err = lan88xx_TR_reg_set(phydev, 0x16A0, 0xEEFFDD); ++ if (err < 0) ++ pr_warn("Failed to Set Register[0x16A0]\n"); ++ ++ /* Get access to Channel b'10, Node b'1101, Register 0x13. ++ * Write 24-bit value 0x071448 to register. Setting ++ * slv_lpi_tr_tmr_val1, slv_lpi_tr_tmr_val2 bits. ++ */ ++ err = lan88xx_TR_reg_set(phydev, 0x16A6, 0x071448); ++ if (err < 0) ++ pr_warn("Failed to Set Register[0x16A6]\n"); ++ ++ /* Get access to Channel b'10, Node b'1101, Register 0x12. ++ * Write 24-bit value 0x13132F to register. Setting ++ * slv_sigdet_timer_val1, slv_sigdet_timer_val2 bits. ++ */ ++ err = lan88xx_TR_reg_set(phydev, 0x16A4, 0x13132F); ++ if (err < 0) ++ pr_warn("Failed to Set Register[0x16A4]\n"); ++ ++ /* Get access to Channel b'10, Node b'1101, Register 0x14. ++ * Write 24-bit value 0x0 to register. Setting eee_3level_delay, ++ * eee_TrKf_freeze_delay bits. ++ */ ++ err = lan88xx_TR_reg_set(phydev, 0x16A8, 0x0); ++ if (err < 0) ++ pr_warn("Failed to Set Register[0x16A8]\n"); ++ ++ /* Get access to Channel b'01, Node b'1111, Register 0x34. ++ * Write 24-bit value 0x91B06C to register. Setting ++ * FastMseSearchThreshLong1000, FastMseSearchThreshShort1000, ++ * FastMseSearchUpdGain1000 bits. ++ */ ++ err = lan88xx_TR_reg_set(phydev, 0x0FE8, 0x91B06C); ++ if (err < 0) ++ pr_warn("Failed to Set Register[0x0FE8]\n"); ++ ++ /* Get access to Channel b'01, Node b'1111, Register 0x3E. ++ * Write 24-bit value 0xC0A028 to register. Setting ++ * FastMseKp2ThreshLong1000, FastMseKp2ThreshShort1000, ++ * FastMseKp2UpdGain1000, FastMseKp2ExitEn1000 bits. ++ */ ++ err = lan88xx_TR_reg_set(phydev, 0x0FFC, 0xC0A028); ++ if (err < 0) ++ pr_warn("Failed to Set Register[0x0FFC]\n"); ++ ++ /* Get access to Channel b'01, Node b'1111, Register 0x35. ++ * Write 24-bit value 0x041600 to register. Setting ++ * FastMseSearchPhShNum1000, FastMseSearchClksPerPh1000, ++ * FastMsePhChangeDelay1000 bits. ++ */ ++ err = lan88xx_TR_reg_set(phydev, 0x0FEA, 0x041600); ++ if (err < 0) ++ pr_warn("Failed to Set Register[0x0FEA]\n"); ++ ++ /* Get access to Channel b'10, Node b'1101, Register 0x03. ++ * Write 24-bit value 0x000004 to register. Setting TrFreeze bits. ++ */ ++ err = lan88xx_TR_reg_set(phydev, 0x1686, 0x000004); ++ if (err < 0) ++ pr_warn("Failed to Set Register[0x1686]\n"); ++} ++ + static int lan88xx_probe(struct phy_device *phydev) + { + struct device *dev = &phydev->mdio.dev; +@@ -132,6 +287,25 @@ static void lan88xx_set_mdix(struct phy_device *phydev) + phy_write(phydev, LAN88XX_EXT_PAGE_ACCESS, LAN88XX_EXT_PAGE_SPACE_0); + } -- ret = lan78xx_set_rx_max_frame_length(dev, new_mtu + ETH_HLEN); -+ ret = lan78xx_set_rx_max_frame_length(dev, new_mtu + VLAN_ETH_HLEN); ++static int lan88xx_config_init(struct phy_device *phydev) ++{ ++ int val; ++ ++ genphy_config_init(phydev); ++ /*Zerodetect delay enable */ ++ val = phy_read_mmd(phydev, MDIO_MMD_PCS, ++ PHY_ARDENNES_MMD_DEV_3_PHY_CFG); ++ val |= PHY_ARDENNES_MMD_DEV_3_PHY_CFG_ZD_DLY_EN_; ++ ++ phy_write_mmd(phydev, MDIO_MMD_PCS, PHY_ARDENNES_MMD_DEV_3_PHY_CFG, ++ val); ++ ++ /* Config DSP registers */ ++ lan88xx_config_TR_regs(phydev); ++ ++ return 0; ++} ++ + static int lan88xx_config_aneg(struct phy_device *phydev) + { + lan88xx_set_mdix(phydev); +@@ -151,7 +325,7 @@ static struct phy_driver microchip_phy_driver[] = { + .probe = lan88xx_probe, + .remove = lan88xx_remove, - netdev->mtu = new_mtu; +- .config_init = genphy_config_init, ++ .config_init = lan88xx_config_init, + .config_aneg = lan88xx_config_aneg, -@@ -2488,7 +2488,8 @@ static int lan78xx_reset(struct lan78xx_net *dev) - buf |= FCT_TX_CTL_EN_; - ret = lan78xx_write_reg(dev, FCT_TX_CTL, buf); + .ack_interrupt = lan88xx_phy_ack_interrupt, +@@ -160,6 +334,8 @@ static struct phy_driver microchip_phy_driver[] = { + .suspend = lan88xx_suspend, + .resume = genphy_resume, + .set_wol = lan88xx_set_wol, ++ .read_page = lan88xx_read_page, ++ .write_page = lan88xx_write_page, + } }; -- ret = lan78xx_set_rx_max_frame_length(dev, dev->net->mtu + ETH_HLEN); -+ ret = lan78xx_set_rx_max_frame_length(dev, -+ dev->net->mtu + VLAN_ETH_HLEN); + module_phy_driver(microchip_phy_driver); +diff --git a/include/linux/microchipphy.h b/include/linux/microchipphy.h +index eb492d47f717..8f9c90379732 100644 +--- a/include/linux/microchipphy.h ++++ b/include/linux/microchipphy.h +@@ -70,4 +70,12 @@ + #define LAN88XX_MMD3_CHIP_ID (32877) + #define LAN88XX_MMD3_CHIP_REV (32878) - ret = lan78xx_read_reg(dev, MAC_RX, &buf); - buf |= MAC_RX_RXEN_; ++/* DSP registers */ ++#define PHY_ARDENNES_MMD_DEV_3_PHY_CFG (0x806A) ++#define PHY_ARDENNES_MMD_DEV_3_PHY_CFG_ZD_DLY_EN_ (0x2000) ++#define LAN88XX_EXT_PAGE_ACCESS_TR (0x52B5) ++#define LAN88XX_EXT_PAGE_TR_CR 16 ++#define LAN88XX_EXT_PAGE_TR_LOW_DATA 17 ++#define LAN88XX_EXT_PAGE_TR_HIGH_DATA 18 ++ + #endif /* _MICROCHIPPHY_H */ -- 2.17.0 -From 833315351413d94d7db407847448dfeddfafe127 Mon Sep 17 00:00:00 2001 -From: Peter Robinson <pbrobinson@gmail.com> -Date: Mon, 9 Apr 2018 17:51:35 +0100 -Subject: [PATCH 3/5] lan78xx: Connect phy early +From 7d76fccb22d71c80209eb9ef5b013a630424cb6c Mon Sep 17 00:00:00 2001 +From: Alexander Graf <agraf@suse.de> +Date: Wed, 4 Apr 2018 00:19:35 +0200 +Subject: [PATCH 2/9] lan78xx: Connect phy early When using wicked with a lan78xx device attached to the system, we end up with ethtool commands issued on the device before an ifup @@ -261,15 +341,16 @@ the interface up and down as many times as I want, without getting NULL pointer dereferences in between. Signed-off-by: Alexander Graf <agraf@suse.de> +Signed-off-by: David S. Miller <davem@davemloft.net> --- drivers/net/usb/lan78xx.c | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/drivers/net/usb/lan78xx.c b/drivers/net/usb/lan78xx.c -index 5fd7b8569cba..60fa1257721c 100644 +index 32cf21716f19..145bb7cbf5b2 100644 --- a/drivers/net/usb/lan78xx.c +++ b/drivers/net/usb/lan78xx.c -@@ -2094,10 +2094,6 @@ static int lan78xx_phy_init(struct lan78xx_net *dev) +@@ -2083,10 +2083,6 @@ static int lan78xx_phy_init(struct lan78xx_net *dev) dev->fc_autoneg = phydev->autoneg; @@ -280,7 +361,7 @@ index 5fd7b8569cba..60fa1257721c 100644 return 0; error: -@@ -2541,9 +2537,9 @@ static int lan78xx_open(struct net_device *net) +@@ -2523,9 +2519,9 @@ static int lan78xx_open(struct net_device *net) if (ret < 0) goto done; @@ -293,7 +374,7 @@ index 5fd7b8569cba..60fa1257721c 100644 /* for Link Check */ if (dev->urb_intr) { -@@ -2604,13 +2600,8 @@ static int lan78xx_stop(struct net_device *net) +@@ -2586,13 +2582,8 @@ static int lan78xx_stop(struct net_device *net) if (timer_pending(&dev->stat_monitor)) del_timer_sync(&dev->stat_monitor); @@ -309,7 +390,7 @@ index 5fd7b8569cba..60fa1257721c 100644 clear_bit(EVENT_DEV_OPEN, &dev->flags); netif_stop_queue(net); -@@ -3525,8 +3516,13 @@ static void lan78xx_disconnect(struct usb_interface *intf) +@@ -3507,8 +3498,13 @@ static void lan78xx_disconnect(struct usb_interface *intf) return; udev = interface_to_usbdev(intf); @@ -324,7 +405,7 @@ index 5fd7b8569cba..60fa1257721c 100644 unregister_netdev(net); cancel_delayed_work_sync(&dev->wq); -@@ -3682,8 +3678,14 @@ static int lan78xx_probe(struct usb_interface *intf, +@@ -3664,8 +3660,14 @@ static int lan78xx_probe(struct usb_interface *intf, pm_runtime_set_autosuspend_delay(&udev->dev, DEFAULT_AUTOSUSPEND_DELAY); @@ -339,7 +420,7 @@ index 5fd7b8569cba..60fa1257721c 100644 out3: lan78xx_unbind(dev, intf); out2: -@@ -4031,7 +4033,7 @@ static int lan78xx_reset_resume(struct usb_interface *intf) +@@ -4013,7 +4015,7 @@ static int lan78xx_reset_resume(struct usb_interface *intf) lan78xx_reset(dev); @@ -351,29 +432,67 @@ index 5fd7b8569cba..60fa1257721c 100644 -- 2.17.0 -From 7b4cc4a0af02c0d798007a143efa7509711d52d7 Mon Sep 17 00:00:00 2001 +From 502356f8db439d77a41958041feec187c42f72bb Mon Sep 17 00:00:00 2001 From: Phil Elwell <phil@raspberrypi.org> -Date: Wed, 4 Apr 2018 16:39:44 +0100 -Subject: [PATCH 4/5] lan78xx: Don't reset the interface on open +Date: Wed, 11 Apr 2018 12:02:47 +0100 +Subject: [PATCH 3/9] 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. -With Alexander Graf's patch ("lan78xx: Connect phy early") applied, -the call to lan78xx_reset within lan78xx_open prevents the phy -interrupt from being generated (even though the link is up). +Signed-off-by: Phil Elwell <phil@raspberrypi.org> +Signed-off-by: David S. Miller <davem@davemloft.net> +--- + drivers/net/usb/lan78xx.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) -Avoid this issue by removing the lan78xx_reset call. +diff --git a/drivers/net/usb/lan78xx.c b/drivers/net/usb/lan78xx.c +index 145bb7cbf5b2..bdb696612e11 100644 +--- a/drivers/net/usb/lan78xx.c ++++ b/drivers/net/usb/lan78xx.c +@@ -2503,7 +2503,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) +-- +2.17.0 + +From d9332c56373a8c43bc4761267ba3a246082e2270 Mon Sep 17 00:00:00 2001 +From: Phil Elwell <phil@raspberrypi.org> +Date: Tue, 10 Apr 2018 13:18:25 +0100 +Subject: [PATCH 4/9] lan78xx: Don't reset the interface on open -See: https://github.com/raspberrypi/linux/issues/2437 - https://github.com/raspberrypi/linux/issues/2442 - https://github.com/raspberrypi/linux/issues/2457 +Commit 92571a1aae40 ("lan78xx: Connect phy early") moves the PHY +initialisation into lan78xx_probe, but lan78xx_open subsequently calls +lan78xx_reset. As well as forcing a second round of link negotiation, +this reset frequently prevents the phy interrupt from being generated +(even though the link is up), rendering the interface unusable. + +Fix this issue by removing the lan78xx_reset call from lan78xx_open. + +Fixes: 92571a1aae40 ("lan78xx: Connect phy early") +Signed-off-by: Phil Elwell <phil@raspberrypi.org> +Signed-off-by: David S. Miller <davem@davemloft.net> --- drivers/net/usb/lan78xx.c | 4 ---- 1 file changed, 4 deletions(-) diff --git a/drivers/net/usb/lan78xx.c b/drivers/net/usb/lan78xx.c -index 60fa1257721c..293ed1847932 100644 +index bdb696612e11..0867f7275852 100644 --- a/drivers/net/usb/lan78xx.c +++ b/drivers/net/usb/lan78xx.c -@@ -2533,10 +2533,6 @@ static int lan78xx_open(struct net_device *net) +@@ -2515,10 +2515,6 @@ static int lan78xx_open(struct net_device *net) if (ret < 0) goto out; @@ -387,10 +506,53 @@ index 60fa1257721c..293ed1847932 100644 -- 2.17.0 -From ddbd11509f01c388b968872aeabf630654275b0a Mon Sep 17 00:00:00 2001 +From bce4fe9fa48df0cbbe842e80d9a520f7265b4cd4 Mon Sep 17 00:00:00 2001 +From: Dave Stevenson <dave.stevenson@raspberrypi.org> +Date: Wed, 4 Apr 2018 16:34:24 +0100 +Subject: [PATCH 5/9] net: lan78xx: Allow for VLAN headers in timeout. + +The frame abort timeout being set by lan78xx_set_rx_max_frame_length +didn't account for any VLAN headers, resulting in very low +throughput if used with tagged VLANs. +Use VLAN_ETH_HLEN instead of ETH_HLEN to correct for this. + +See https://github.com/raspberrypi/linux/issues/2458 + +Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.org> +--- + drivers/net/usb/lan78xx.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/drivers/net/usb/lan78xx.c b/drivers/net/usb/lan78xx.c +index 0867f7275852..5b46998a6dce 100644 +--- a/drivers/net/usb/lan78xx.c ++++ b/drivers/net/usb/lan78xx.c +@@ -2178,7 +2178,7 @@ static int lan78xx_change_mtu(struct net_device *netdev, int new_mtu) + if ((ll_mtu % dev->maxpacket) == 0) + return -EDOM; + +- ret = lan78xx_set_rx_max_frame_length(dev, new_mtu + ETH_HLEN); ++ ret = lan78xx_set_rx_max_frame_length(dev, new_mtu + VLAN_ETH_HLEN); + + netdev->mtu = new_mtu; + +@@ -2467,7 +2467,8 @@ static int lan78xx_reset(struct lan78xx_net *dev) + buf |= FCT_TX_CTL_EN_; + ret = lan78xx_write_reg(dev, FCT_TX_CTL, buf); + +- ret = lan78xx_set_rx_max_frame_length(dev, dev->net->mtu + ETH_HLEN); ++ ret = lan78xx_set_rx_max_frame_length(dev, ++ dev->net->mtu + VLAN_ETH_HLEN); + + ret = lan78xx_read_reg(dev, MAC_RX, &buf); + buf |= MAC_RX_RXEN_; +-- +2.17.0 + +From 6fecd97fd35e9c624d101495ca34c83b1cb23e3d Mon Sep 17 00:00:00 2001 From: Dave Stevenson <dave.stevenson@raspberrypi.org> Date: Mon, 9 Apr 2018 14:31:54 +0100 -Subject: [PATCH 5/5] net: lan78xx: Request s/w csum check on VLAN tagged +Subject: [PATCH 6/9] net: lan78xx: Request s/w csum check on VLAN tagged packets. There appears to be some issue in the LAN78xx where the checksum @@ -412,10 +574,10 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.org> 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/net/usb/lan78xx.c b/drivers/net/usb/lan78xx.c -index 293ed1847932..44cabda17bb6 100644 +index 5b46998a6dce..6b61bb21f2ae 100644 --- a/drivers/net/usb/lan78xx.c +++ b/drivers/net/usb/lan78xx.c -@@ -2937,8 +2937,12 @@ static void lan78xx_rx_csum_offload(struct lan78xx_net *dev, +@@ -2920,8 +2920,12 @@ static void lan78xx_rx_csum_offload(struct lan78xx_net *dev, struct sk_buff *skb, u32 rx_cmd_a, u32 rx_cmd_b) { @@ -432,3 +594,368 @@ index 293ed1847932..44cabda17bb6 100644 -- 2.17.0 +From 7528d39c5d01383fadb17a84b9840f9f685d1e0b Mon Sep 17 00:00:00 2001 +From: Phil Elwell <phil@raspberrypi.org> +Date: Thu, 19 Apr 2018 17:59:38 +0100 +Subject: [PATCH 7/9] 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 +applications without programmed EEPROM or OTP. At the same time, +regularise the handling of the different address sources. + +Signed-off-by: Phil Elwell <phil@raspberrypi.org> +--- + drivers/net/usb/lan78xx.c | 42 +++++++++++++++++++-------------------- + 1 file changed, 20 insertions(+), 22 deletions(-) + +diff --git a/drivers/net/usb/lan78xx.c b/drivers/net/usb/lan78xx.c +index 6b61bb21f2ae..6c38a74bb32d 100644 +--- a/drivers/net/usb/lan78xx.c ++++ b/drivers/net/usb/lan78xx.c +@@ -37,6 +37,7 @@ + #include <linux/irqchip/chained_irq.h> + #include <linux/microchipphy.h> + #include <linux/phy.h> ++#include <linux/of_net.h> + #include "lan78xx.h" + + #define DRIVER_AUTHOR "WOOJUNG HUH <woojung.huh@microchip.com>" +@@ -1652,34 +1653,31 @@ static void lan78xx_init_mac_address(struct lan78xx_net *dev) + addr[5] = (addr_hi >> 8) & 0xFF; + + if (!is_valid_ether_addr(addr)) { +- /* reading mac address from EEPROM or OTP */ +- if ((lan78xx_read_eeprom(dev, EEPROM_MAC_OFFSET, ETH_ALEN, +- addr) == 0) || +- (lan78xx_read_otp(dev, EEPROM_MAC_OFFSET, ETH_ALEN, +- addr) == 0)) { +- if (is_valid_ether_addr(addr)) { +- /* eeprom values are valid so use them */ +- netif_dbg(dev, ifup, dev->net, +- "MAC address read from EEPROM"); +- } else { +- /* generate random MAC */ +- random_ether_addr(addr); +- netif_dbg(dev, ifup, dev->net, +- "MAC address set to random addr"); +- } +- +- addr_lo = addr[0] | (addr[1] << 8) | +- (addr[2] << 16) | (addr[3] << 24); +- addr_hi = addr[4] | (addr[5] << 8); +- +- ret = lan78xx_write_reg(dev, RX_ADDRL, addr_lo); +- ret = lan78xx_write_reg(dev, RX_ADDRH, addr_hi); ++ if (!eth_platform_get_mac_address(&dev->udev->dev, addr)) { ++ /* valid address present in Device Tree */ ++ netif_dbg(dev, ifup, dev->net, ++ "MAC address read from Device Tree"); ++ } else if (((lan78xx_read_eeprom(dev, EEPROM_MAC_OFFSET, ++ ETH_ALEN, addr) == 0) || ++ (lan78xx_read_otp(dev, EEPROM_MAC_OFFSET, ++ ETH_ALEN, addr) == 0)) && ++ is_valid_ether_addr(addr)) { ++ /* eeprom values are valid so use them */ ++ netif_dbg(dev, ifup, dev->net, ++ "MAC address read from EEPROM"); + } else { + /* generate random MAC */ + random_ether_addr(addr); + netif_dbg(dev, ifup, dev->net, + "MAC address set to random addr"); + } ++ ++ addr_lo = addr[0] | (addr[1] << 8) | ++ (addr[2] << 16) | (addr[3] << 24); ++ addr_hi = addr[4] | (addr[5] << 8); ++ ++ ret = lan78xx_write_reg(dev, RX_ADDRL, addr_lo); ++ ret = lan78xx_write_reg(dev, RX_ADDRH, addr_hi); + } + + ret = lan78xx_write_reg(dev, MAF_LO(0), addr_lo); +-- +2.17.0 + +From f8f9ad43b37f5db5895619e4304aa9ba286cbbb0 Mon Sep 17 00:00:00 2001 +From: Phil Elwell <phil@raspberrypi.org> +Date: Thu, 19 Apr 2018 17:59:40 +0100 +Subject: [PATCH 8/9] dt-bindings: Document the DT bindings for lan78xx + +The Microchip LAN78XX family of devices are Ethernet controllers with +a USB interface. Despite being discoverable devices it can be useful to +be able to configure them from Device Tree, particularly in low-cost +applications without an EEPROM or programmed OTP. + +Document the supported properties in a bindings file. + +Signed-off-by: Phil Elwell <phil@raspberrypi.org> +Reviewed-by: Andrew Lunn <andrew@lunn.ch> +--- + .../bindings/net/microchip,lan78xx.txt | 54 +++++++++++++++++++ + 1 file changed, 54 insertions(+) + create mode 100644 Documentation/devicetree/bindings/net/microchip,lan78xx.txt + +diff --git a/Documentation/devicetree/bindings/net/microchip,lan78xx.txt b/Documentation/devicetree/bindings/net/microchip,lan78xx.txt +new file mode 100644 +index 000000000000..76786a0f6d3d +--- /dev/null ++++ b/Documentation/devicetree/bindings/net/microchip,lan78xx.txt +@@ -0,0 +1,54 @@ ++Microchip LAN78xx Gigabit Ethernet controller ++ ++The LAN78XX devices are usually configured by programming their OTP or with ++an external EEPROM, but some platforms (e.g. Raspberry Pi 3 B+) have neither. ++The Device Tree properties, if present, override the OTP and EEPROM. ++ ++Required properties: ++- compatible: Should be one of "usb424,7800", "usb424,7801" or "usb424,7850". ++ ++Optional properties: ++- local-mac-address: see ethernet.txt ++- mac-address: see ethernet.txt ++ ++Optional properties of the embedded PHY: ++- microchip,led-modes: a 0..4 element vector, with each element configuring ++ the operating mode of an LED. Omitted LEDs are turned off. Allowed values ++ are defined in "include/dt-bindings/net/microchip-lan78xx.h". ++ ++Example: ++ ++/* Based on the configuration for a Raspberry Pi 3 B+ */ ++&usb { ++ usb-port@1 { ++ compatible = "usb424,2514"; ++ reg = <1>; ++ #address-cells = <1>; ++ #size-cells = <0>; ++ ++ usb-port@1 { ++ compatible = "usb424,2514"; ++ reg = <1>; ++ #address-cells = <1>; ++ #size-cells = <0>; ++ ++ ethernet: ethernet@1 { ++ compatible = "usb424,7800"; ++ reg = <1>; ++ local-mac-address = [ 00 11 22 33 44 55 ]; ++ ++ mdio { ++ #address-cells = <0x1>; ++ #size-cells = <0x0>; ++ eth_phy: ethernet-phy@1 { ++ reg = <1>; ++ microchip,led-modes = < ++ LAN78XX_LINK_1000_ACTIVITY ++ LAN78XX_LINK_10_100_ACTIVITY ++ >; ++ }; ++ }; ++ }; ++ }; ++ }; ++}; +-- +2.17.0 + +From be24db04ec2949e9b03763366f100ae40836c61e Mon Sep 17 00:00:00 2001 +From: Peter Robinson <pbrobinson@gmail.com> +Date: Mon, 23 Apr 2018 14:31:26 +0100 +Subject: [PATCH 9/9] lan78xx: Read LED states from Device Tree + +Add support for DT property "microchip,led-modes", a vector of zero +to four cells (u32s) in the range 0-15, each of which sets the mode +for one of the LEDs. Some possible values are: + + 0=link/activity 1=link1000/activity + 2=link100/activity 3=link10/activity + 4=link100/1000/activity 5=link10/1000/activity + 6=link10/100/activity 14=off 15=on + +These values are given symbolic constants in a dt-bindings header. + +Also use the presence of the DT property to indicate that the +LEDs should be enabled - necessary in the event that no valid OTP +or EEPROM is available. + +Signed-off-by: Phil Elwell <phil@raspberrypi.org> +Reviewed-by: Andrew Lunn <andrew@lunn.ch> +--- + MAINTAINERS | 1 + + drivers/net/phy/microchip.c | 25 ++++++++++++++++ + drivers/net/usb/lan78xx.c | 32 ++++++++++++++++++++- + include/dt-bindings/net/microchip-lan78xx.h | 21 ++++++++++++++ + include/linux/microchipphy.h | 3 ++ + 5 files changed, 81 insertions(+), 1 deletion(-) + create mode 100644 include/dt-bindings/net/microchip-lan78xx.h + +diff --git a/MAINTAINERS b/MAINTAINERS +index 6e950b8b4a41..c7d5f8c60a2c 100644 +--- a/MAINTAINERS ++++ b/MAINTAINERS +@@ -14437,6 +14437,7 @@ M: Microchip Linux Driver Support <UNGLinuxDriver@microchip.com> + L: netdev@vger.kernel.org + S: Maintained + F: drivers/net/usb/lan78xx.* ++F: include/dt-bindings/net/microchip-lan78xx.h + + USB MASS STORAGE DRIVER + M: Alan Stern <stern@rowland.harvard.edu> +diff --git a/drivers/net/phy/microchip.c b/drivers/net/phy/microchip.c +index a97ac8c12c4c..2d67937866a3 100644 +--- a/drivers/net/phy/microchip.c ++++ b/drivers/net/phy/microchip.c +@@ -21,6 +21,8 @@ + #include <linux/phy.h> + #include <linux/microchipphy.h> + #include <linux/delay.h> ++#include <linux/of.h> ++#include <dt-bindings/net/microchip-lan78xx.h> + + #define DRIVER_AUTHOR "WOOJUNG HUH <woojung.huh@microchip.com>" + #define DRIVER_DESC "Microchip LAN88XX PHY driver" +@@ -225,6 +227,8 @@ static int lan88xx_probe(struct phy_device *phydev) + { + struct device *dev = &phydev->mdio.dev; + struct lan88xx_priv *priv; ++ u32 led_modes[4]; ++ int len; + + priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL); + if (!priv) +@@ -232,6 +236,27 @@ static int lan88xx_probe(struct phy_device *phydev) + + priv->wolopts = 0; + ++ len = of_property_read_variable_u32_array(dev->of_node, ++ "microchip,led-modes", ++ led_modes, ++ 0, ++ ARRAY_SIZE(led_modes)); ++ if (len >= 0) { ++ u32 reg = 0; ++ int i; ++ ++ for (i = 0; i < len; i++) { ++ if (led_modes[i] > 15) ++ return -EINVAL; ++ reg |= led_modes[i] << (i * 4); ++ } ++ for (; i < ARRAY_SIZE(led_modes); i++) ++ reg |= LAN78XX_FORCE_LED_OFF << (i * 4); ++ (void)phy_write(phydev, LAN78XX_PHY_LED_MODE_SELECT, reg); ++ } else if (len == -EOVERFLOW) { ++ return -EINVAL; ++ } ++ + /* these values can be used to identify internal PHY */ + priv->chip_id = phy_read_mmd(phydev, 3, LAN88XX_MMD3_CHIP_ID); + priv->chip_rev = phy_read_mmd(phydev, 3, LAN88XX_MMD3_CHIP_REV); +diff --git a/drivers/net/usb/lan78xx.c b/drivers/net/usb/lan78xx.c +index 6c38a74bb32d..01b876daa600 100644 +--- a/drivers/net/usb/lan78xx.c ++++ b/drivers/net/usb/lan78xx.c +@@ -37,6 +37,7 @@ + #include <linux/irqchip/chained_irq.h> + #include <linux/microchipphy.h> + #include <linux/phy.h> ++#include <linux/of_mdio.h> + #include <linux/of_net.h> + #include "lan78xx.h" + +@@ -1760,6 +1761,7 @@ static int lan78xx_mdiobus_write(struct mii_bus *bus, int phy_id, int idx, + + static int lan78xx_mdio_init(struct lan78xx_net *dev) + { ++ struct device_node *node; + int ret; + + dev->mdiobus = mdiobus_alloc(); +@@ -1788,7 +1790,13 @@ static int lan78xx_mdio_init(struct lan78xx_net *dev) + break; + } + +- ret = mdiobus_register(dev->mdiobus); ++ node = of_get_child_by_name(dev->udev->dev.of_node, "mdio"); ++ if (node) { ++ ret = of_mdiobus_register(dev->mdiobus, node); ++ of_node_put(node); ++ } else { ++ ret = mdiobus_register(dev->mdiobus); ++ } + if (ret) { + netdev_err(dev->net, "can't register MDIO bus\n"); + goto exit1; +@@ -2077,6 +2085,28 @@ static int lan78xx_phy_init(struct lan78xx_net *dev) + mii_adv = (u32)mii_advertise_flowctrl(dev->fc_request_control); + phydev->advertising |= mii_adv_to_ethtool_adv_t(mii_adv); + ++ if (phydev->mdio.dev.of_node) { ++ u32 reg; ++ int len; ++ ++ len = of_property_count_elems_of_size(phydev->mdio.dev.of_node, ++ "microchip,led-modes", ++ sizeof(u32)); ++ if (len >= 0) { ++ /* Ensure the appropriate LEDs are enabled */ ++ lan78xx_read_reg(dev, HW_CFG, ®); ++ reg &= ~(HW_CFG_LED0_EN_ | ++ HW_CFG_LED1_EN_ | ++ HW_CFG_LED2_EN_ | ++ HW_CFG_LED3_EN_); ++ reg |= (len > 0) * HW_CFG_LED0_EN_ | ++ (len > 1) * HW_CFG_LED1_EN_ | ++ (len > 2) * HW_CFG_LED2_EN_ | ++ (len > 3) * HW_CFG_LED3_EN_; ++ lan78xx_write_reg(dev, HW_CFG, reg); ++ } ++ } ++ + genphy_config_aneg(phydev); + + dev->fc_autoneg = phydev->autoneg; +diff --git a/include/dt-bindings/net/microchip-lan78xx.h b/include/dt-bindings/net/microchip-lan78xx.h +new file mode 100644 +index 000000000000..0742ff075307 +--- /dev/null ++++ b/include/dt-bindings/net/microchip-lan78xx.h +@@ -0,0 +1,21 @@ ++/* SPDX-License-Identifier: GPL-2.0 */ ++#ifndef _DT_BINDINGS_MICROCHIP_LAN78XX_H ++#define _DT_BINDINGS_MICROCHIP_LAN78XX_H ++ ++/* LED modes for LAN7800/LAN7850 embedded PHY */ ++ ++#define LAN78XX_LINK_ACTIVITY 0 ++#define LAN78XX_LINK_1000_ACTIVITY 1 ++#define LAN78XX_LINK_100_ACTIVITY 2 ++#define LAN78XX_LINK_10_ACTIVITY 3 ++#define LAN78XX_LINK_100_1000_ACTIVITY 4 ++#define LAN78XX_LINK_10_1000_ACTIVITY 5 ++#define LAN78XX_LINK_10_100_ACTIVITY 6 ++#define LAN78XX_DUPLEX_COLLISION 8 ++#define LAN78XX_COLLISION 9 ++#define LAN78XX_ACTIVITY 10 ++#define LAN78XX_AUTONEG_FAULT 12 ++#define LAN78XX_FORCE_LED_OFF 14 ++#define LAN78XX_FORCE_LED_ON 15 ++ ++#endif +diff --git a/include/linux/microchipphy.h b/include/linux/microchipphy.h +index 8f9c90379732..fd1fc8c248ef 100644 +--- a/include/linux/microchipphy.h ++++ b/include/linux/microchipphy.h +@@ -78,4 +78,7 @@ + #define LAN88XX_EXT_PAGE_TR_LOW_DATA 17 + #define LAN88XX_EXT_PAGE_TR_HIGH_DATA 18 + ++/* Registers specific to the LAN7800/LAN7850 embedded phy */ ++#define LAN78XX_PHY_LED_MODE_SELECT (0x1D) ++ + #endif /* _MICROCHIPPHY_H */ +-- +2.17.0 + diff --git a/bcm2837-rpi-initial-3plus-support.patch b/bcm2837-rpi-initial-3plus-support.patch new file mode 100644 index 000000000..e69303ada --- /dev/null +++ b/bcm2837-rpi-initial-3plus-support.patch @@ -0,0 +1,560 @@ +From patchwork Sat Apr 21 11:28:34 2018 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +Subject: [V2,1/9] ARM: dts: bcm283x: Fix PWM pin assignment +From: Stefan Wahren <stefan.wahren@i2se.com> +X-Patchwork-Id: 10354085 +Message-Id: <1524310122-9439-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>, Catalin Marinas <catalin.marinas@arm.com>, + Will Deacon <will.deacon@arm.com> +Cc: Stefan Wahren <stefan.wahren@i2se.com>, devicetree@vger.kernel.org, + Florian Fainelli <f.fainelli@gmail.com>, Arnd Bergmann <arnd@arndb.de>, + Scott Branden <sbranden@broadcom.com>, Ray Jui <rjui@broadcom.com>, + Phil Elwell <phil@raspberrypi.org>, Alexander Graf <agraf@suse.de>, + bcm-kernel-feedback-list@broadcom.com, + linux-rpi-kernel@lists.infradead.org, linux-arm-kernel@lists.infradead.org +Date: Sat, 21 Apr 2018 13:28:34 +0200 + +All RPi 1 and 2 boards used the PWM (audio out) on pin 40 and 45. +So it was easy to define them in bcm2835-rpi.dtsi. Starting with RPi 3 +this wont work anymore, because it uses pin 40 and 41. Furthermore the +Zero variants doesn't have audio out. + +This patch fixes this pin conflict by moving the PWM node to the board-level. + +Change summary: +RPi 3 B: PWM1 45 -> 41 +Zero, Zero W: PWM disabled +all other: no functional change + +Reported-by: Baruch Siach <baruch@tkos.co.il> +Signed-off-by: Stefan Wahren <stefan.wahren@i2se.com> +Reviewed-by: Eric Anholt <eric@anholt.net> +--- + arch/arm/boot/dts/bcm2835-rpi-a-plus.dts | 6 ++++++ + arch/arm/boot/dts/bcm2835-rpi-a.dts | 6 ++++++ + arch/arm/boot/dts/bcm2835-rpi-b-plus.dts | 6 ++++++ + arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts | 6 ++++++ + arch/arm/boot/dts/bcm2835-rpi-b.dts | 6 ++++++ + arch/arm/boot/dts/bcm2835-rpi.dtsi | 6 ------ + arch/arm/boot/dts/bcm2836-rpi-2-b.dts | 6 ++++++ + arch/arm/boot/dts/bcm2837-rpi-3-b.dts | 6 ++++++ + 8 files changed, 42 insertions(+), 6 deletions(-) + +diff --git a/arch/arm/boot/dts/bcm2835-rpi-a-plus.dts b/arch/arm/boot/dts/bcm2835-rpi-a-plus.dts +index aa1fc7b..2cd9c5e 100644 +--- a/arch/arm/boot/dts/bcm2835-rpi-a-plus.dts ++++ b/arch/arm/boot/dts/bcm2835-rpi-a-plus.dts +@@ -101,6 +101,12 @@ + hpd-gpios = <&gpio 46 GPIO_ACTIVE_LOW>; + }; + ++&pwm { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pwm0_gpio40 &pwm1_gpio45>; ++ status = "okay"; ++}; ++ + &uart0 { + pinctrl-names = "default"; + pinctrl-0 = <&uart0_gpio14>; +diff --git a/arch/arm/boot/dts/bcm2835-rpi-a.dts b/arch/arm/boot/dts/bcm2835-rpi-a.dts +index 425f6b0..067d1f0 100644 +--- a/arch/arm/boot/dts/bcm2835-rpi-a.dts ++++ b/arch/arm/boot/dts/bcm2835-rpi-a.dts +@@ -96,6 +96,12 @@ + hpd-gpios = <&gpio 46 GPIO_ACTIVE_HIGH>; + }; + ++&pwm { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pwm0_gpio40 &pwm1_gpio45>; ++ status = "okay"; ++}; ++ + &uart0 { + pinctrl-names = "default"; + pinctrl-0 = <&uart0_gpio14>; +diff --git a/arch/arm/boot/dts/bcm2835-rpi-b-plus.dts b/arch/arm/boot/dts/bcm2835-rpi-b-plus.dts +index effa195..cfbdaac 100644 +--- a/arch/arm/boot/dts/bcm2835-rpi-b-plus.dts ++++ b/arch/arm/boot/dts/bcm2835-rpi-b-plus.dts +@@ -103,6 +103,12 @@ + hpd-gpios = <&gpio 46 GPIO_ACTIVE_LOW>; + }; + ++&pwm { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pwm0_gpio40 &pwm1_gpio45>; ++ status = "okay"; ++}; ++ + &uart0 { + pinctrl-names = "default"; + pinctrl-0 = <&uart0_gpio14>; +diff --git a/arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts b/arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts +index 772ec3b..5641d16 100644 +--- a/arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts ++++ b/arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts +@@ -96,6 +96,12 @@ + hpd-gpios = <&gpio 46 GPIO_ACTIVE_LOW>; + }; + ++&pwm { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pwm0_gpio40 &pwm1_gpio45>; ++ status = "okay"; ++}; ++ + &uart0 { + pinctrl-names = "default"; + pinctrl-0 = <&uart0_gpio14>; +diff --git a/arch/arm/boot/dts/bcm2835-rpi-b.dts b/arch/arm/boot/dts/bcm2835-rpi-b.dts +index 434483d..31ff602 100644 +--- a/arch/arm/boot/dts/bcm2835-rpi-b.dts ++++ b/arch/arm/boot/dts/bcm2835-rpi-b.dts +@@ -91,6 +91,12 @@ + hpd-gpios = <&gpio 46 GPIO_ACTIVE_HIGH>; + }; + ++&pwm { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pwm0_gpio40 &pwm1_gpio45>; ++ status = "okay"; ++}; ++ + &uart0 { + pinctrl-names = "default"; + pinctrl-0 = <&uart0_gpio14>; +diff --git a/arch/arm/boot/dts/bcm2835-rpi.dtsi b/arch/arm/boot/dts/bcm2835-rpi.dtsi +index 6c3cfaa..cb2d6d7 100644 +--- a/arch/arm/boot/dts/bcm2835-rpi.dtsi ++++ b/arch/arm/boot/dts/bcm2835-rpi.dtsi +@@ -83,12 +83,6 @@ + bus-width = <4>; + }; + +-&pwm { +- pinctrl-names = "default"; +- pinctrl-0 = <&pwm0_gpio40 &pwm1_gpio45>; +- status = "okay"; +-}; +- + &usb { + power-domains = <&power RPI_POWER_DOMAIN_USB>; + }; +diff --git a/arch/arm/boot/dts/bcm2836-rpi-2-b.dts b/arch/arm/boot/dts/bcm2836-rpi-2-b.dts +index 5c339ad..2fef70a 100644 +--- a/arch/arm/boot/dts/bcm2836-rpi-2-b.dts ++++ b/arch/arm/boot/dts/bcm2836-rpi-2-b.dts +@@ -41,6 +41,12 @@ + hpd-gpios = <&gpio 46 GPIO_ACTIVE_LOW>; + }; + ++&pwm { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pwm0_gpio40 &pwm1_gpio45>; ++ status = "okay"; ++}; ++ + &uart0 { + pinctrl-names = "default"; + pinctrl-0 = <&uart0_gpio14>; +diff --git a/arch/arm/boot/dts/bcm2837-rpi-3-b.dts b/arch/arm/boot/dts/bcm2837-rpi-3-b.dts +index 0b31d99..cc39b6f 100644 +--- a/arch/arm/boot/dts/bcm2837-rpi-3-b.dts ++++ b/arch/arm/boot/dts/bcm2837-rpi-3-b.dts +@@ -42,6 +42,12 @@ + }; + }; + ++&pwm { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pwm0_gpio40 &pwm1_gpio41>; ++ status = "okay"; ++}; ++ + /* uart0 communicates with the BT module */ + &uart0 { + pinctrl-names = "default"; +From patchwork Sat Apr 21 11:28:35 2018 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +Subject: [V2,2/9] ARM: dts: bcm2837: Add missing GPIOs of Expander +From: Stefan Wahren <stefan.wahren@i2se.com> +X-Patchwork-Id: 10354079 +Message-Id: <1524310122-9439-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>, Catalin Marinas <catalin.marinas@arm.com>, + Will Deacon <will.deacon@arm.com> +Cc: Stefan Wahren <stefan.wahren@i2se.com>, devicetree@vger.kernel.org, + Florian Fainelli <f.fainelli@gmail.com>, Arnd Bergmann <arnd@arndb.de>, + Scott Branden <sbranden@broadcom.com>, Ray Jui <rjui@broadcom.com>, + Phil Elwell <phil@raspberrypi.org>, Alexander Graf <agraf@suse.de>, + bcm-kernel-feedback-list@broadcom.com, + linux-rpi-kernel@lists.infradead.org, linux-arm-kernel@lists.infradead.org +Date: Sat, 21 Apr 2018 13:28:35 +0200 + +After commit a98d90e7d588 ("gpio: raspberrypi-exp: Driver for RPi3 GPIO +expander via mailbox service") we are able to control the rest of the +GPIOs of the RPi 3. So add all the missing parts (ACT LED, +Wifi & BT control, HDMI detect) to the DT. + +Signed-off-by: Stefan Wahren <stefan.wahren@i2se.com> +Reviewed-by: Eric Anholt <eric@anholt.net> +--- + arch/arm/boot/dts/bcm2837-rpi-3-b.dts | 20 +++++++++++++++++++- + 1 file changed, 19 insertions(+), 1 deletion(-) + +diff --git a/arch/arm/boot/dts/bcm2837-rpi-3-b.dts b/arch/arm/boot/dts/bcm2837-rpi-3-b.dts +index cc39b6f..c318bcb 100644 +--- a/arch/arm/boot/dts/bcm2837-rpi-3-b.dts ++++ b/arch/arm/boot/dts/bcm2837-rpi-3-b.dts +@@ -20,9 +20,14 @@ + + leds { + act { +- gpios = <&gpio 47 GPIO_ACTIVE_HIGH>; ++ gpios = <&expgpio 2 GPIO_ACTIVE_HIGH>; + }; + }; ++ ++ wifi_pwrseq: wifi-pwrseq { ++ compatible = "mmc-pwrseq-simple"; ++ reset-gpios = <&expgpio 1 GPIO_ACTIVE_HIGH>; ++ }; + }; + + &firmware { +@@ -48,6 +53,10 @@ + status = "okay"; + }; + ++&hdmi { ++ hpd-gpios = <&expgpio 4 GPIO_ACTIVE_LOW>; ++}; ++ + /* uart0 communicates with the BT module */ + &uart0 { + pinctrl-names = "default"; +@@ -57,6 +66,7 @@ + bluetooth { + compatible = "brcm,bcm43438-bt"; + max-speed = <2000000>; ++ shutdown-gpios = <&expgpio 0 GPIO_ACTIVE_HIGH>; + }; + }; + +@@ -69,11 +79,19 @@ + + /* SDHCI is used to control the SDIO for wireless */ + &sdhci { ++ #address-cells = <1>; ++ #size-cells = <0>; + pinctrl-names = "default"; + pinctrl-0 = <&emmc_gpio34>; + status = "okay"; + bus-width = <4>; + non-removable; ++ mmc-pwrseq = <&wifi_pwrseq>; ++ ++ brcmf: wifi@1 { ++ reg = <1>; ++ compatible = "brcm,bcm4329-fmac"; ++ }; + }; + + /* SDHOST is used to drive the SD card */ +From patchwork Sat Apr 21 11:28:36 2018 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +Subject: [V2,3/9] dt-bindings: bcm: Add Raspberry Pi 3 B+ +From: Stefan Wahren <stefan.wahren@i2se.com> +X-Patchwork-Id: 10354081 +Message-Id: <1524310122-9439-4-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>, Catalin Marinas <catalin.marinas@arm.com>, + Will Deacon <will.deacon@arm.com> +Cc: Stefan Wahren <stefan.wahren@i2se.com>, devicetree@vger.kernel.org, + Florian Fainelli <f.fainelli@gmail.com>, Arnd Bergmann <arnd@arndb.de>, + Scott Branden <sbranden@broadcom.com>, Ray Jui <rjui@broadcom.com>, + Phil Elwell <phil@raspberrypi.org>, Alexander Graf <agraf@suse.de>, + bcm-kernel-feedback-list@broadcom.com, + linux-rpi-kernel@lists.infradead.org, linux-arm-kernel@lists.infradead.org +Date: Sat, 21 Apr 2018 13:28:36 +0200 + +This adds the root properties for the Raspberry Pi 3 B+ + +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/arm/bcm/brcm,bcm2835.txt | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/Documentation/devicetree/bindings/arm/bcm/brcm,bcm2835.txt b/Documentation/devicetree/bindings/arm/bcm/brcm,bcm2835.txt +index 3e3efa0..1e3e29a 100644 +--- a/Documentation/devicetree/bindings/arm/bcm/brcm,bcm2835.txt ++++ b/Documentation/devicetree/bindings/arm/bcm/brcm,bcm2835.txt +@@ -34,6 +34,10 @@ Raspberry Pi 3 Model B + Required root node properties: + compatible = "raspberrypi,3-model-b", "brcm,bcm2837"; + ++Raspberry Pi 3 Model B+ ++Required root node properties: ++compatible = "raspberrypi,3-model-b-plus", "brcm,bcm2837"; ++ + Raspberry Pi Compute Module + Required root node properties: + compatible = "raspberrypi,compute-module", "brcm,bcm2835"; +From patchwork Sat Apr 21 11:28:37 2018 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +Subject: [V2,4/9] ARM: dts: bcm2837: Add Raspberry Pi 3 B+ +From: Stefan Wahren <stefan.wahren@i2se.com> +X-Patchwork-Id: 10354075 +Message-Id: <1524310122-9439-5-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>, Catalin Marinas <catalin.marinas@arm.com>, + Will Deacon <will.deacon@arm.com> +Cc: Stefan Wahren <stefan.wahren@i2se.com>, devicetree@vger.kernel.org, + Florian Fainelli <f.fainelli@gmail.com>, Arnd Bergmann <arnd@arndb.de>, + Scott Branden <sbranden@broadcom.com>, Ray Jui <rjui@broadcom.com>, + Phil Elwell <phil@raspberrypi.org>, Alexander Graf <agraf@suse.de>, + bcm-kernel-feedback-list@broadcom.com, + linux-rpi-kernel@lists.infradead.org, linux-arm-kernel@lists.infradead.org +Date: Sat, 21 Apr 2018 13:28:37 +0200 + +The Raspberry Pi 3 B+ has the following major differences compared +to the model 3 B: +* Microchip LAN7515 (Gigabit Ethernet with integrated USB 2.0 HUB) +* Cypress CYW43455 (802.11n/ac and BT 4.2) + +We need to add the USB LAN chip so the bootloader can add the MAC address. +This is necessary because there ain't an EEPROM or a valid OTP. + +Signed-off-by: Phil Elwell <phil@raspberrypi.org> +Signed-off-by: Stefan Wahren <stefan.wahren@i2se.com> +Reviewed-by: Eric Anholt <eric@anholt.net> +--- + arch/arm/boot/dts/Makefile | 1 + + arch/arm/boot/dts/bcm2837-rpi-3-b-plus.dts | 108 +++++++++++++++++++++++++++++ + arch/arm/boot/dts/bcm283x-rpi-lan7515.dtsi | 27 ++++++++ + 3 files changed, 136 insertions(+) + create mode 100644 arch/arm/boot/dts/bcm2837-rpi-3-b-plus.dts + create mode 100644 arch/arm/boot/dts/bcm283x-rpi-lan7515.dtsi + +diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile +index 7e24249..a300a35 100644 +--- a/arch/arm/boot/dts/Makefile ++++ b/arch/arm/boot/dts/Makefile +@@ -75,6 +75,7 @@ dtb-$(CONFIG_ARCH_BCM2835) += \ + bcm2835-rpi-a-plus.dtb \ + bcm2836-rpi-2-b.dtb \ + bcm2837-rpi-3-b.dtb \ ++ bcm2837-rpi-3-b-plus.dtb \ + bcm2835-rpi-zero.dtb \ + bcm2835-rpi-zero-w.dtb + dtb-$(CONFIG_ARCH_BCM_5301X) += \ +diff --git a/arch/arm/boot/dts/bcm2837-rpi-3-b-plus.dts b/arch/arm/boot/dts/bcm2837-rpi-3-b-plus.dts +new file mode 100644 +index 0000000..4adb85e +--- /dev/null ++++ b/arch/arm/boot/dts/bcm2837-rpi-3-b-plus.dts +@@ -0,0 +1,108 @@ ++// SPDX-License-Identifier: GPL-2.0 ++/dts-v1/; ++#include "bcm2837.dtsi" ++#include "bcm2835-rpi.dtsi" ++#include "bcm283x-rpi-lan7515.dtsi" ++#include "bcm283x-rpi-usb-host.dtsi" ++ ++/ { ++ compatible = "raspberrypi,3-model-b-plus", "brcm,bcm2837"; ++ model = "Raspberry Pi 3 Model B+"; ++ ++ chosen { ++ /* 8250 auxiliary UART instead of pl011 */ ++ stdout-path = "serial1:115200n8"; ++ }; ++ ++ memory { ++ reg = <0 0x40000000>; ++ }; ++ ++ leds { ++ act { ++ gpios = <&gpio 29 GPIO_ACTIVE_HIGH>; ++ }; ++ ++ pwr { ++ label = "PWR"; ++ gpios = <&expgpio 2 GPIO_ACTIVE_LOW>; ++ }; ++ }; ++ ++ wifi_pwrseq: wifi-pwrseq { ++ compatible = "mmc-pwrseq-simple"; ++ reset-gpios = <&expgpio 1 GPIO_ACTIVE_HIGH>; ++ }; ++}; ++ ++&firmware { ++ expgpio: gpio { ++ compatible = "raspberrypi,firmware-gpio"; ++ gpio-controller; ++ #gpio-cells = <2>; ++ gpio-line-names = "BT_ON", ++ "WL_ON", ++ "STATUS_LED", ++ "LAN_RUN", ++ "", ++ "CAM_GPIO0", ++ "CAM_GPIO1", ++ ""; ++ status = "okay"; ++ }; ++}; ++ ++&hdmi { ++ hpd-gpios = <&gpio 28 GPIO_ACTIVE_LOW>; ++}; ++ ++&pwm { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pwm0_gpio40 &pwm1_gpio41>; ++ status = "okay"; ++}; ++ ++/* SDHCI is used to control the SDIO for wireless */ ++&sdhci { ++ #address-cells = <1>; ++ #size-cells = <0>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&emmc_gpio34>; ++ status = "okay"; ++ bus-width = <4>; ++ non-removable; ++ mmc-pwrseq = <&wifi_pwrseq>; ++ ++ brcmf: wifi@1 { ++ reg = <1>; ++ compatible = "brcm,bcm4329-fmac"; ++ }; ++}; ++ ++/* SDHOST is used to drive the SD card */ ++&sdhost { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&sdhost_gpio48>; ++ status = "okay"; ++ bus-width = <4>; ++}; ++ ++/* uart0 communicates with the BT module */ ++&uart0 { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&uart0_ctsrts_gpio30 &uart0_gpio32 &gpclk2_gpio43>; ++ status = "okay"; ++ ++ bluetooth { ++ compatible = "brcm,bcm43438-bt"; ++ max-speed = <2000000>; ++ shutdown-gpios = <&expgpio 0 GPIO_ACTIVE_HIGH>; ++ }; ++}; ++ ++/* uart1 is mapped to the pin header */ ++&uart1 { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&uart1_gpio14>; ++ status = "okay"; ++}; +diff --git a/arch/arm/boot/dts/bcm283x-rpi-lan7515.dtsi b/arch/arm/boot/dts/bcm283x-rpi-lan7515.dtsi +new file mode 100644 +index 0000000..9403da0 +--- /dev/null ++++ b/arch/arm/boot/dts/bcm283x-rpi-lan7515.dtsi +@@ -0,0 +1,27 @@ ++// SPDX-License-Identifier: GPL-2.0 ++/ { ++ aliases { ++ ethernet0 = ðernet; ++ }; ++}; ++ ++&usb { ++ usb-port@1 { ++ compatible = "usb424,2514"; ++ reg = <1>; ++ #address-cells = <1>; ++ #size-cells = <0>; ++ ++ usb-port@1 { ++ compatible = "usb424,2514"; ++ reg = <1>; ++ #address-cells = <1>; ++ #size-cells = <0>; ++ ++ ethernet: ethernet@1 { ++ compatible = "usb424,7800"; ++ reg = <1>; ++ }; ++ }; ++ }; ++}; +From patchwork Sat Apr 21 11:28:42 2018 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +Subject: [V2,9/9] arm64: dts: broadcom: Add reference to Raspberry Pi 3 B+ +From: Stefan Wahren <stefan.wahren@i2se.com> +X-Patchwork-Id: 10354077 +Message-Id: <1524310122-9439-10-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>, Catalin Marinas <catalin.marinas@arm.com>, + Will Deacon <will.deacon@arm.com> +Cc: Stefan Wahren <stefan.wahren@i2se.com>, devicetree@vger.kernel.org, + Florian Fainelli <f.fainelli@gmail.com>, Arnd Bergmann <arnd@arndb.de>, + Scott Branden <sbranden@broadcom.com>, Ray Jui <rjui@broadcom.com>, + Phil Elwell <phil@raspberrypi.org>, Alexander Graf <agraf@suse.de>, + bcm-kernel-feedback-list@broadcom.com, + linux-rpi-kernel@lists.infradead.org, linux-arm-kernel@lists.infradead.org +Date: Sat, 21 Apr 2018 13:28:42 +0200 + +This adds a reference to the dts of the Raspberry Pi 3 B+ +in arm, so don't need to maintain the content in arm64. + +Signed-off-by: Stefan Wahren <stefan.wahren@i2se.com> +Reviewed-by: Eric Anholt <eric@anholt.net> +--- + arch/arm64/boot/dts/broadcom/Makefile | 3 ++- + arch/arm64/boot/dts/broadcom/bcm2837-rpi-3-b-plus.dts | 2 ++ + 2 files changed, 4 insertions(+), 1 deletion(-) + create mode 100644 arch/arm64/boot/dts/broadcom/bcm2837-rpi-3-b-plus.dts + +diff --git a/arch/arm64/boot/dts/broadcom/Makefile b/arch/arm64/boot/dts/broadcom/Makefile +index 2a2591e..1193a9e 100644 +--- a/arch/arm64/boot/dts/broadcom/Makefile ++++ b/arch/arm64/boot/dts/broadcom/Makefile +@@ -1,5 +1,6 @@ + # SPDX-License-Identifier: GPL-2.0 +-dtb-$(CONFIG_ARCH_BCM2835) += bcm2837-rpi-3-b.dtb ++dtb-$(CONFIG_ARCH_BCM2835) += bcm2837-rpi-3-b.dtb \ ++ bcm2837-rpi-3-b-plus.dtb + + subdir-y += northstar2 + subdir-y += stingray +diff --git a/arch/arm64/boot/dts/broadcom/bcm2837-rpi-3-b-plus.dts b/arch/arm64/boot/dts/broadcom/bcm2837-rpi-3-b-plus.dts +new file mode 100644 +index 0000000..46ad202 +--- /dev/null ++++ b/arch/arm64/boot/dts/broadcom/bcm2837-rpi-3-b-plus.dts +@@ -0,0 +1,2 @@ ++// SPDX-License-Identifier: GPL-2.0 ++#include "arm/bcm2837-rpi-3-b-plus.dts" diff --git a/bcm2837-rpi-initial-support-for-the-3.patch b/bcm2837-rpi-initial-support-for-the-3.patch deleted file mode 100644 index c9bedfebc..000000000 --- a/bcm2837-rpi-initial-support-for-the-3.patch +++ /dev/null @@ -1,209 +0,0 @@ -From defa4876ece55751c691d17ffc928d9bfe049585 Mon Sep 17 00:00:00 2001 -From: Stefan Wahren <stefan.wahren@i2se.com> -Date: Fri, 16 Mar 2018 22:56:59 +0100 -Subject: [PATCH] arm64: dts: broadcom: Add reference to Raspberry Pi 3 B+ - -This adds a reference to the dts file of the Raspberry Pi 3 B+ - -Signed-off-by: Stefan Wahren <stefan.wahren@i2se.com> ---- - arch/arm64/boot/dts/broadcom/Makefile | 3 ++- - arch/arm64/boot/dts/broadcom/bcm2837-rpi-3-b-plus.dts | 2 ++ - 2 files changed, 4 insertions(+), 1 deletion(-) - create mode 100644 arch/arm64/boot/dts/broadcom/bcm2837-rpi-3-b-plus.dts - -diff --git a/arch/arm64/boot/dts/broadcom/Makefile b/arch/arm64/boot/dts/broadcom/Makefile -index 2a2591ef1fee..1193a9e34bbb 100644 ---- a/arch/arm64/boot/dts/broadcom/Makefile -+++ b/arch/arm64/boot/dts/broadcom/Makefile -@@ -1,5 +1,6 @@ - # SPDX-License-Identifier: GPL-2.0 --dtb-$(CONFIG_ARCH_BCM2835) += bcm2837-rpi-3-b.dtb -+dtb-$(CONFIG_ARCH_BCM2835) += bcm2837-rpi-3-b.dtb \ -+ bcm2837-rpi-3-b-plus.dtb - - subdir-y += northstar2 - subdir-y += stingray -diff --git a/arch/arm64/boot/dts/broadcom/bcm2837-rpi-3-b-plus.dts b/arch/arm64/boot/dts/broadcom/bcm2837-rpi-3-b-plus.dts -new file mode 100644 -index 000000000000..46ad2023cccf ---- /dev/null -+++ b/arch/arm64/boot/dts/broadcom/bcm2837-rpi-3-b-plus.dts -@@ -0,0 +1,2 @@ -+// SPDX-License-Identifier: GPL-2.0 -+#include "arm/bcm2837-rpi-3-b-plus.dts" - -From c7c06c54087dfadd065abcba0b7f614f7a88d549 Mon Sep 17 00:00:00 2001 -From: Phil Elwell <phil@raspberrypi.org> -Date: Fri, 16 Mar 2018 22:42:28 +0100 -Subject: [PATCH] ARM: dts: bcm2837: Add Raspberry Pi 3 B+ - -The Raspberry Pi 3 B+ has the following major differences compared -to the model 3 B: -* Microchip LAN7515 (Gigabit Ethernet) -* Cypress CYW43455 (802.11ac and BT 4.2) - -Signed-off-by: Phil Elwell <phil@raspberrypi.org> -Signed-off-by: Stefan Wahren <stefan.wahren@i2se.com> ---- - arch/arm/boot/dts/Makefile | 1 + - arch/arm/boot/dts/bcm2837-rpi-3-b-plus.dts | 102 +++++++++++++++++++++++++++++ - arch/arm/boot/dts/bcm283x-rpi-lan7515.dtsi | 27 ++++++++ - 3 files changed, 130 insertions(+) - create mode 100644 arch/arm/boot/dts/bcm2837-rpi-3-b-plus.dts - create mode 100644 arch/arm/boot/dts/bcm283x-rpi-lan7515.dtsi - -diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile -index 3b471e6787ff..dee85f848de9 100644 ---- a/arch/arm/boot/dts/Makefile -+++ b/arch/arm/boot/dts/Makefile -@@ -75,6 +75,7 @@ dtb-$(CONFIG_ARCH_BCM2835) += \ - bcm2835-rpi-a-plus.dtb \ - bcm2836-rpi-2-b.dtb \ - bcm2837-rpi-3-b.dtb \ -+ bcm2837-rpi-3-b-plus.dtb \ - bcm2835-rpi-zero.dtb \ - bcm2835-rpi-zero-w.dtb - dtb-$(CONFIG_ARCH_BCM_5301X) += \ -diff --git a/arch/arm/boot/dts/bcm2837-rpi-3-b-plus.dts b/arch/arm/boot/dts/bcm2837-rpi-3-b-plus.dts -new file mode 100644 -index 000000000000..fb9f6f7e965c ---- /dev/null -+++ b/arch/arm/boot/dts/bcm2837-rpi-3-b-plus.dts -@@ -0,0 +1,102 @@ -+// SPDX-License-Identifier: GPL-2.0 -+/dts-v1/; -+#include "bcm2837.dtsi" -+#include "bcm2835-rpi.dtsi" -+#include "bcm283x-rpi-lan7515.dtsi" -+#include "bcm283x-rpi-usb-host.dtsi" -+ -+/ { -+ compatible = "raspberrypi,3-model-b-plus", "brcm,bcm2837"; -+ model = "Raspberry Pi 3 Model B+"; -+ -+ chosen { -+ /* 8250 auxiliary UART instead of pl011 */ -+ stdout-path = "serial1:115200n8"; -+ }; -+ -+ memory { -+ reg = <0 0x40000000>; -+ }; -+ -+ leds { -+ act { -+ gpios = <&gpio 29 0>; -+ }; -+ -+ pwr { -+ label = "PWR"; -+ gpios = <&expgpio 2 GPIO_ACTIVE_LOW>; -+ }; -+ }; -+ -+ wifi_pwrseq: wifi-pwrseq { -+ compatible = "mmc-pwrseq-simple"; -+ reset-gpios = <&expgpio 1 GPIO_ACTIVE_HIGH>; -+ }; -+}; -+ -+&firmware { -+ expgpio: gpio { -+ compatible = "raspberrypi,firmware-gpio"; -+ gpio-controller; -+ #gpio-cells = <2>; -+ gpio-line-names = "BT_ON", -+ "WL_ON", -+ "STATUS_LED", -+ "LAN_RUN", -+ "", -+ "CAM_GPIO0", -+ "CAM_GPIO1", -+ ""; -+ status = "okay"; -+ }; -+}; -+ -+&hdmi { -+ hpd-gpios = <&gpio 28 GPIO_ACTIVE_LOW>; -+}; -+ -+/* uart0 communicates with the BT module */ -+&uart0 { -+ pinctrl-names = "default"; -+ pinctrl-0 = <&uart0_gpio32 &gpclk2_gpio43>; -+ status = "okay"; -+ -+ bluetooth { -+ compatible = "brcm,bcm43438-bt"; -+ max-speed = <2000000>; -+ shutdown-gpios = <&expgpio 0 GPIO_ACTIVE_HIGH>; -+ }; -+}; -+ -+/* uart1 is mapped to the pin header */ -+&uart1 { -+ pinctrl-names = "default"; -+ pinctrl-0 = <&uart1_gpio14>; -+ status = "okay"; -+}; -+ -+/* SDHCI is used to control the SDIO for wireless */ -+&sdhci { -+ #address-cells = <1>; -+ #size-cells = <0>; -+ pinctrl-names = "default"; -+ pinctrl-0 = <&emmc_gpio34>; -+ status = "okay"; -+ bus-width = <4>; -+ non-removable; -+ mmc-pwrseq = <&wifi_pwrseq>; -+ -+ brcmf: wifi@1 { -+ reg = <1>; -+ compatible = "brcm,bcm4329-fmac"; -+ }; -+}; -+ -+/* SDHOST is used to drive the SD card */ -+&sdhost { -+ pinctrl-names = "default"; -+ pinctrl-0 = <&sdhost_gpio48>; -+ status = "okay"; -+ bus-width = <4>; -+}; -diff --git a/arch/arm/boot/dts/bcm283x-rpi-lan7515.dtsi b/arch/arm/boot/dts/bcm283x-rpi-lan7515.dtsi -new file mode 100644 -index 000000000000..169203c5ce8b ---- /dev/null -+++ b/arch/arm/boot/dts/bcm283x-rpi-lan7515.dtsi -@@ -0,0 +1,27 @@ -+// SPDX-License-Identifier: GPL-2.0 -+/ { -+ aliases { -+ ethernet0 = ðernet; -+ }; -+}; -+ -+&usb { -+ usb1@1 { -+ compatible = "usb424,2514"; -+ reg = <1>; -+ #address-cells = <1>; -+ #size-cells = <0>; -+ -+ usb1_1@1 { -+ compatible = "usb424,2514"; -+ reg = <1>; -+ #address-cells = <1>; -+ #size-cells = <0>; -+ -+ ethernet: usbether@1 { -+ compatible = "usb424,7800"; -+ reg = <1>; -+ }; -+ }; -+ }; -+}; - diff --git a/bcm283x-drm-vc4-fix-mem-leak.patch b/bcm283x-drm-vc4-fix-mem-leak.patch new file mode 100644 index 000000000..58ffce722 --- /dev/null +++ b/bcm283x-drm-vc4-fix-mem-leak.patch @@ -0,0 +1,54 @@ +From c0db1b677e1d584fab5d7ac76a32e1c0157542e0 Mon Sep 17 00:00:00 2001 +From: Daniel J Blueman <daniel@quora.org> +Date: Mon, 2 Apr 2018 15:10:35 +0800 +Subject: drm/vc4: Fix memory leak during BO teardown + +During BO teardown, an indirect list 'uniform_addr_offsets' wasn't being +freed leading to leaking many 128B allocations. Fix the memory leak by +releasing it at teardown time. + +Cc: stable@vger.kernel.org +Fixes: 6d45c81d229d ("drm/vc4: Add support for branching in shader validation.") +Signed-off-by: Daniel J Blueman <daniel@quora.org> +Signed-off-by: Eric Anholt <eric@anholt.net> +Reviewed-by: Eric Anholt <eric@anholt.net> +Link: https://patchwork.freedesktop.org/patch/msgid/20180402071035.25356-1-daniel@quora.org +--- + drivers/gpu/drm/vc4/vc4_bo.c | 2 ++ + drivers/gpu/drm/vc4/vc4_validate_shaders.c | 1 + + 2 files changed, 3 insertions(+) + +diff --git a/drivers/gpu/drm/vc4/vc4_bo.c b/drivers/gpu/drm/vc4/vc4_bo.c +index 2decc8e..add9cc9 100644 +--- a/drivers/gpu/drm/vc4/vc4_bo.c ++++ b/drivers/gpu/drm/vc4/vc4_bo.c +@@ -195,6 +195,7 @@ static void vc4_bo_destroy(struct vc4_bo *bo) + vc4_bo_set_label(obj, -1); + + if (bo->validated_shader) { ++ kfree(bo->validated_shader->uniform_addr_offsets); + kfree(bo->validated_shader->texture_samples); + kfree(bo->validated_shader); + bo->validated_shader = NULL; +@@ -591,6 +592,7 @@ void vc4_free_object(struct drm_gem_object *gem_bo) + } + + if (bo->validated_shader) { ++ kfree(bo->validated_shader->uniform_addr_offsets); + kfree(bo->validated_shader->texture_samples); + kfree(bo->validated_shader); + bo->validated_shader = NULL; +diff --git a/drivers/gpu/drm/vc4/vc4_validate_shaders.c b/drivers/gpu/drm/vc4/vc4_validate_shaders.c +index d3f15bf..7cf82b0 100644 +--- a/drivers/gpu/drm/vc4/vc4_validate_shaders.c ++++ b/drivers/gpu/drm/vc4/vc4_validate_shaders.c +@@ -942,6 +942,7 @@ vc4_validate_shader(struct drm_gem_cma_object *shader_obj) + fail: + kfree(validation_state.branch_targets); + if (validated_shader) { ++ kfree(validated_shader->uniform_addr_offsets); + kfree(validated_shader->texture_samples); + kfree(validated_shader); + } +-- +cgit v1.1 diff --git a/kernel.spec b/kernel.spec index a70970041..5f7ce9e09 100644 --- a/kernel.spec +++ b/kernel.spec @@ -627,9 +627,19 @@ Patch319: clk-ti-fix-flag-space-conflict-with-clkctrl-clocks.patch Patch320: arm-dts-Add-am335x-pocketbeagle.patch +# https://patchwork.kernel.org/patch/10354521/ +# https://patchwork.kernel.org/patch/10354187/ +# https://patchwork.kernel.org/patch/10306793/ +# https://patchwork.kernel.org/patch/10133165/ +Patch321: mvebu-a37xx-fixes.patch + +# in 4.17, headed to stable +Patch329: bcm283x-drm-vc4-fix-mem-leak.patch + # Enabling Patches for the RPi3+ -Patch330: bcm2837-rpi-initial-support-for-the-3.patch -Patch331: bcm2837-gpio-expander.patch +Patch330: bcm2837-gpio-expander.patch +# http://www.spinics.net/lists/arm-kernel/msg647617.html +Patch331: bcm2837-rpi-initial-3plus-support.patch Patch332: bcm2837-enable-pmu.patch Patch333: bcm2837-lan78xx-fixes.patch @@ -1907,6 +1917,9 @@ fi %changelog * Sun Apr 22 2018 Peter Robinson <pbrobinson@fedoraproject.org> - Add quirk patch to fix X-Gene 1 console on HP m400/Mustang (RHBZ 1531140) +- Add fixes for Marvell a37xx EspressoBin +- Update to latest Raspberry Pi 3+ fixes +- More fixes for lan78xx on the Raspberry Pi 3+ * Thu Apr 19 2018 Jeremy Cline <jeremy@jcline.org> - 4.16.3-200 - Linux v4.16.3 diff --git a/mvebu-a37xx-fixes.patch b/mvebu-a37xx-fixes.patch new file mode 100644 index 000000000..25090c7fd --- /dev/null +++ b/mvebu-a37xx-fixes.patch @@ -0,0 +1,245 @@ +From patchwork Sun Apr 22 12:33:46 2018 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +Subject: serial: mvebu-uart: Fix local flags handling on termios update +From: Marc Zyngier <Marc.Zyngier@arm.com> +X-Patchwork-Id: 10354521 +Message-Id: <20180422123346.15538-1-marc.zyngier@arm.com> +To: linux-arm-kernel@lists.infradead.org, + linux-kernel@vger.kernel.org +Cc: Gregory CLEMENT <gregory.clement@free-electrons.com>, + Allen Yan <yanwei@marvell.com>, + Greg Kroah-Hartman <gregkh@linuxfoundation.org>, + Miquel Raynal <miquel.raynal@free-electrons.com> +Date: Sun, 22 Apr 2018 13:33:46 +0100 + +Commit 68a0db1d7da2 reworked the baud rate selection, but also added +a (not so) subtle change in the way the local flags (c_lflag in the +termios structure) are handled, forcing the new flags to always be the +same as the old ones. + +The reason for that particular change is both obscure and undocumented. +It also completely breaks userspace. Something as trivial as getty is +unusable: + +<example> + Debian GNU/Linux 9 sy-borg ttyMV0 + + sy-borg login: root + root + [timeout] + + Debian GNU/Linux 9 sy-borg ttyMV0 +</example> + +which is quite obvious in retrospect: getty cannot get in control of +the echo mode, is stuck in canonical mode, and times out without ever +seeing anything valid. It also begs the question of how this change was +ever tested. + +The fix is pretty obvious: stop messing with c_lflag, and the world +will be a happier place. + +Cc: stable@vger.kernel.org # 4.15+ +Fixes: 68a0db1d7da2 ("serial: mvebu-uart: add function to change baudrate") +Signed-off-by: Marc Zyngier <marc.zyngier@arm.com> +--- + drivers/tty/serial/mvebu-uart.c | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/drivers/tty/serial/mvebu-uart.c b/drivers/tty/serial/mvebu-uart.c +index 750e5645dc85..f503fab1e268 100644 +--- a/drivers/tty/serial/mvebu-uart.c ++++ b/drivers/tty/serial/mvebu-uart.c +@@ -495,7 +495,6 @@ static void mvebu_uart_set_termios(struct uart_port *port, + termios->c_iflag |= old->c_iflag & ~(INPCK | IGNPAR); + termios->c_cflag &= CREAD | CBAUD; + termios->c_cflag |= old->c_cflag & ~(CREAD | CBAUD); +- termios->c_lflag = old->c_lflag; + } + + spin_unlock_irqrestore(&port->lock, flags); +From patchwork Wed Apr 4 14:44:44 2018 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +Subject: cpufreq: armada-37xx: Fix clock leak +From: Gregory CLEMENT <gregory.clement@bootlin.com> +X-Patchwork-Id: 10322649 +Message-Id: <20180404144444.4142-1-gregory.clement@bootlin.com> +To: "Rafael J. Wysocki" <rjw@rjwysocki.net>, + Viresh Kumar <viresh.kumar@linaro.org>, linux-pm@vger.kernel.org +Cc: Andrew Lunn <andrew@lunn.ch>, Jason Cooper <jason@lakedaemon.net>, + Hua Jing <jinghua@marvell.com>, + Antoine Tenart <antoine.tenart@bootlin.com>, + Gregory CLEMENT <gregory.clement@bootlin.com>, stable@vger.kernel.org, + Maxime Chevallier <maxime.chevallier@bootlin.com>, + Nadav Haklai <nadavh@marvell.com>, Victor Gu <xigu@marvell.com>, + Neta Zur Hershkovits <neta@marvell.com>, + Thomas Petazzoni <thomas.petazzoni@bootlin.com>, + =?UTF-8?q?Miqu=C3=A8l=20Raynal?= <miquel.raynal@bootlin.com>, + Marcin Wojtas <mw@semihalf.com>, Wilson Ding <dingwei@marvell.com>, + linux-arm-kernel@lists.infradead.org, + Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com> +Date: Wed, 4 Apr 2018 16:44:44 +0200 + +There was no clk_put() balancing the clk_get(). This commit fixes it. + +Fixes: 92ce45fb875d ("cpufreq: Add DVFS support for Armada 37xx") +Cc: <stable@vger.kernel.org> +Reported-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com> +Signed-off-by: Gregory CLEMENT <gregory.clement@bootlin.com> +Acked-by: Viresh Kumar <viresh.kumar@linaro.org> +--- + drivers/cpufreq/armada-37xx-cpufreq.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/drivers/cpufreq/armada-37xx-cpufreq.c b/drivers/cpufreq/armada-37xx-cpufreq.c +index c6ebc88a7d8d..72a2975499db 100644 +--- a/drivers/cpufreq/armada-37xx-cpufreq.c ++++ b/drivers/cpufreq/armada-37xx-cpufreq.c +@@ -202,6 +202,7 @@ static int __init armada37xx_cpufreq_driver_init(void) + cur_frequency = clk_get_rate(clk); + if (!cur_frequency) { + dev_err(cpu_dev, "Failed to get clock rate for CPU\n"); ++ clk_put(clk); + return -EINVAL; + } + +@@ -210,6 +211,7 @@ static int __init armada37xx_cpufreq_driver_init(void) + return -EINVAL; + + armada37xx_cpufreq_dvfs_setup(nb_pm_base, clk, dvfs->divider); ++ clk_put(clk); + + for (load_lvl = ARMADA_37XX_DVFS_LOAD_0; load_lvl < LOAD_LEVEL_NR; + load_lvl++) { +From patchwork Sun Mar 25 19:57:36 2018 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 8bit +Subject: arm64: dts: armada-3720-espressobin: wire up spi flash +From: =?utf-8?q?Uwe_Kleine-K=C3=B6nig?= <u.kleine-koenig@pengutronix.de> +X-Patchwork-Id: 10306793 +Message-Id: <20180325195736.19782-1-u.kleine-koenig@pengutronix.de> +To: Jason Cooper <jason@lakedaemon.net>, Andrew Lunn <andrew@lunn.ch>, + Gregory Clement <gregory.clement@bootlin.com>, + Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com> +Cc: Ellie Reeves <ellierevves@gmail.com>, + linux-arm-kernel@lists.infradead.org, kernel@pengutronix.de +Date: Sun, 25 Mar 2018 21:57:36 +0200 + +From: Ellie Reeves <ellierevves@gmail.com> + +This is the storage the machine boots from by default. The partitioning +is taken from the U-Boot that is shipped with the board. There is some +more space on the flash that isn't used. + +Signed-off-by: Ellie Reeves <ellierevves@gmail.com> +Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> +--- + .../boot/dts/marvell/armada-3720-espressobin.dts | 27 ++++++++++++++++++++++ + 1 file changed, 27 insertions(+) + +diff --git a/arch/arm64/boot/dts/marvell/armada-3720-espressobin.dts b/arch/arm64/boot/dts/marvell/armada-3720-espressobin.dts +index 882d6e4a04e4..5f98c2fecca4 100644 +--- a/arch/arm64/boot/dts/marvell/armada-3720-espressobin.dts ++++ b/arch/arm64/boot/dts/marvell/armada-3720-espressobin.dts +@@ -108,6 +108,33 @@ + status = "okay"; + }; + ++&spi0 { ++ status = "okay"; ++ ++ flash@0 { ++ reg = <0>; ++ compatible = "winbond,w25q32dw", "jedec,spi-flash"; ++ spi-max-frequency = <104000000>; ++ m25p,fast-read; ++ ++ partitions { ++ compatible = "fixed-partitions"; ++ #address-cells = <1>; ++ #size-cells = <1>; ++ ++ partition@0 { ++ label = "uboot"; ++ reg = <0 0x180000>; ++ }; ++ ++ partition@180000 { ++ label = "ubootenv"; ++ reg = <0x180000 0x10000>; ++ }; ++ }; ++ }; ++}; ++ + /* Exported on the micro USB connector J5 through an FTDI */ + &uart0 { + pinctrl-names = "default"; +From patchwork Sat Apr 21 14:03:42 2018 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +Subject: arm64: dts: marvell: armada-37xx: reserve memory for ATF +From: Miquel Raynal <miquel.raynal@bootlin.com> +X-Patchwork-Id: 10354187 +Message-Id: <20180421140342.25082-1-miquel.raynal@bootlin.com> +To: Gregory Clement <gregory.clement@bootlin.com>, + Jason Cooper <jason@lakedaemon.net>, Andrew Lunn <andrew@lunn.ch>, + Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com> +Cc: Mark Rutland <mark.rutland@arm.com>, devicetree@vger.kernel.org, + Antoine Tenart <antoine.tenart@bootlin.com>, + Catalin Marinas <catalin.marinas@arm.com>, + Will Deacon <will.deacon@arm.com>, + Maxime Chevallier <maxime.chevallier@bootlin.com>, + Nadav Haklai <nadavh@marvell.com>, Rob Herring <robh+dt@kernel.org>, + Thomas Petazzoni <thomas.petazzoni@bootlin.com>, + Miquel Raynal <miquel.raynal@bootlin.com>, Victor Gu <xigu@marvell.com>, + linux-arm-kernel@lists.infradead.org +Date: Sat, 21 Apr 2018 16:03:42 +0200 + +From: Victor Gu <xigu@marvell.com> + +The PSCI area should be reserved in Linux for PSCI operations such as +suspend/resume. + +Reserve 2MiB of memory which matches the area used by ATF (BL1, BL2, +BL3x, see [1] in ATF source code). This covers all PSCI code and data +area and is 2MiB aligned, which is required by Linux for huge pages +handling. + +[1] plat/marvell/a3700/common/include/platform_def.h + +Signed-off-by: Victor Gu <xigu@marvell.com> +[miquel.raynal@bootlin.com: reword of commit message] +Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com> +--- + arch/arm64/boot/dts/marvell/armada-37xx.dtsi | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +diff --git a/arch/arm64/boot/dts/marvell/armada-37xx.dtsi b/arch/arm64/boot/dts/marvell/armada-37xx.dtsi +index 97207a61bc79..429ce91bfc39 100644 +--- a/arch/arm64/boot/dts/marvell/armada-37xx.dtsi ++++ b/arch/arm64/boot/dts/marvell/armada-37xx.dtsi +@@ -22,6 +22,17 @@ + serial1 = &uart1; + }; + ++ reserved-memory { ++ #address-cells = <2>; ++ #size-cells = <2>; ++ ranges; ++ ++ psci-area@4000000 { ++ reg = <0 0x4000000 0 0x200000>; ++ no-map; ++ }; ++ }; ++ + cpus { + #address-cells = <1>; + #size-cells = <0>; |