summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--AllWinner-net-emac.patch1187
-rw-r--r--baseconfig/CONFIG_CAN_HI311X1
-rw-r--r--baseconfig/CONFIG_CAN_MCBA_USB1
-rw-r--r--baseconfig/CONFIG_CAN_PEAK_PCIEFD1
-rw-r--r--baseconfig/CONFIG_CAN_VXCAN1
-rw-r--r--baseconfig/CONFIG_CRYPTO_DEV_CAVIUM_ZIP1
-rw-r--r--baseconfig/CONFIG_HID_ACCUTOUCH1
-rw-r--r--baseconfig/CONFIG_HID_NTI1
-rw-r--r--baseconfig/CONFIG_IEEE802154_CA82101
-rw-r--r--baseconfig/CONFIG_IEEE802154_CA8210_DEBUGFS1
-rw-r--r--baseconfig/CONFIG_MLX5_CORE_IPOIB1
-rw-r--r--baseconfig/CONFIG_MMC_CAVIUM_THUNDERX1
-rw-r--r--baseconfig/CONFIG_MMC_SDHCI_XENON1
-rw-r--r--baseconfig/CONFIG_NET_DSA_LOOP1
-rw-r--r--baseconfig/CONFIG_NET_DSA_MT75301
-rw-r--r--baseconfig/CONFIG_NET_DSA_SMSC_LAN9303_I2C1
-rw-r--r--baseconfig/CONFIG_NET_DSA_SMSC_LAN9303_MDIO1
-rw-r--r--baseconfig/CONFIG_NET_SCH_DEFAULT1
-rw-r--r--baseconfig/CONFIG_NET_XGENE_V21
-rw-r--r--baseconfig/CONFIG_RPMSG_CHAR1
-rw-r--r--baseconfig/CONFIG_RPMSG_QCOM_SMD1
-rw-r--r--baseconfig/CONFIG_TIGON3_HWMON1
-rw-r--r--baseconfig/CONFIG_VSOCKMON1
-rw-r--r--baseconfig/arm/CONFIG_RPMSG_QCOM_SMD1
-rw-r--r--baseconfig/arm/arm64/CONFIG_CRYPTO_DEV_CAVIUM_ZIP1
-rw-r--r--baseconfig/arm/arm64/CONFIG_MMC_CAVIUM_THUNDERX1
-rw-r--r--baseconfig/arm/arm64/CONFIG_NET_XGENE_V21
-rw-r--r--baseconfig/arm/armv7/CONFIG_CRYPTO_DEV_EXYNOS_RNG1
-rw-r--r--baseconfig/powerpc/CONFIG_CRYPTO_CRCT10DIF_VPMSUM1
-rw-r--r--baseconfig/powerpc/CONFIG_CRYPTO_VPMSUM_TESTER1
-rw-r--r--baseconfig/s390x/CONFIG_ARCH_RANDOM1
-rw-r--r--baseconfig/s390x/CONFIG_HW_RANDOM_S3901
-rw-r--r--baseconfig/s390x/CONFIG_MAX_PHYSMEM_BITS1
-rw-r--r--baseconfig/s390x/CONFIG_MDIO_DEVICE1
-rw-r--r--baseconfig/s390x/CONFIG_S390_CCW_IOMMU1
-rw-r--r--baseconfig/s390x/CONFIG_VFIO_CCW1
-rw-r--r--bcm283x-mmc-bcm2835.patch1932
-rw-r--r--gitrev2
-rw-r--r--kernel-aarch64-debug.config22
-rw-r--r--kernel-aarch64.config22
-rw-r--r--kernel-armv7hl-debug.config22
-rw-r--r--kernel-armv7hl-lpae-debug.config22
-rw-r--r--kernel-armv7hl-lpae.config22
-rw-r--r--kernel-armv7hl.config22
-rw-r--r--kernel-i686-PAE.config22
-rw-r--r--kernel-i686-PAEdebug.config22
-rw-r--r--kernel-i686-debug.config22
-rw-r--r--kernel-i686.config22
-rw-r--r--kernel-ppc64-debug.config24
-rw-r--r--kernel-ppc64.config24
-rw-r--r--kernel-ppc64le-debug.config24
-rw-r--r--kernel-ppc64le.config24
-rw-r--r--kernel-ppc64p7-debug.config24
-rw-r--r--kernel-ppc64p7.config24
-rw-r--r--kernel-s390x-debug.config28
-rw-r--r--kernel-s390x.config28
-rw-r--r--kernel-x86_64-debug.config22
-rw-r--r--kernel-x86_64.config22
-rw-r--r--kernel.spec18
-rw-r--r--netfilter-x_tables-deal-with-bogus-nextoffset-values.patch109
-rw-r--r--sources2
-rw-r--r--ti-bluetooth.patch2480
62 files changed, 1127 insertions, 5102 deletions
diff --git a/AllWinner-net-emac.patch b/AllWinner-net-emac.patch
index ebe9a3c94..fbe66a19e 100644
--- a/AllWinner-net-emac.patch
+++ b/AllWinner-net-emac.patch
@@ -1,21 +1,20 @@
-From patchwork Tue Mar 14 14:18:37 2017
+From patchwork Mon May 1 12:45:01 2017
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
-Subject: [v2, 01/20] net-next: stmmac: export
- stmmac_set_mac_addr/stmmac_get_mac_addr
+Subject: [v5,
+ 01/20] net: stmmac: export stmmac_set_mac_addr/stmmac_get_mac_addr
From: Corentin LABBE <clabbe.montjoie@gmail.com>
-X-Patchwork-Id: 9623505
-Message-Id: <20170314141856.24560-2-clabbe.montjoie@gmail.com>
+X-Patchwork-Id: 9706455
+Message-Id: <20170501124520.3769-2-clabbe.montjoie@gmail.com>
To: robh+dt@kernel.org, mark.rutland@arm.com,
- maxime.ripard@free-electrons.com,
- wens@csie.org, linux@armlinux.org.uk, catalin.marinas@arm.com,
- will.deacon@arm.com, peppe.cavallaro@st.com, alexandre.torgue@st.com,
- davem@davemloft.net
-Cc: devicetree@vger.kernel.org, f.fainelli@gmail.com, netdev@vger.kernel.org,
- linux-kernel@vger.kernel.org, Corentin Labbe <clabbe.montjoie@gmail.com>,
- linux-arm-kernel@lists.infradead.org
-Date: Tue, 14 Mar 2017 15:18:37 +0100
+ maxime.ripard@free-electrons.com, wens@csie.org,
+ linux@armlinux.org.uk, catalin.marinas@arm.com,
+ will.deacon@arm.com, peppe.cavallaro@st.com, alexandre.torgue@st.com
+Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
+ netdev@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
+ Corentin Labbe <clabbe.montjoie@gmail.com>
+Date: Mon, 1 May 2017 14:45:01 +0200
Thoses symbol will be needed for the dwmac-sun8i ethernet driver.
For letting it to be build as module, they need to be exported.
@@ -26,7 +25,7 @@ Signed-off-by: Corentin Labbe <clabbe.montjoie@gmail.com>
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac_lib.c b/drivers/net/ethernet/stmicro/stmmac/dwmac_lib.c
-index e60bfca..0ab985c8 100644
+index 38f9430..67af0bd 100644
--- a/drivers/net/ethernet/stmicro/stmmac/dwmac_lib.c
+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac_lib.c
@@ -248,6 +248,7 @@ void stmmac_set_mac_addr(void __iomem *ioaddr, u8 addr[6],
@@ -43,39 +42,39 @@ index e60bfca..0ab985c8 100644
}
-
+EXPORT_SYMBOL_GPL(stmmac_get_mac_addr);
-From patchwork Tue Mar 14 14:18:38 2017
+
+From patchwork Mon May 1 12:45:02 2017
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
-Subject: [v2,02/20] net-next: stmmac: add optional setup function
+Subject: [v5,02/20] net: stmmac: add optional setup function
From: Corentin LABBE <clabbe.montjoie@gmail.com>
-X-Patchwork-Id: 9623509
-Message-Id: <20170314141856.24560-3-clabbe.montjoie@gmail.com>
+X-Patchwork-Id: 9706501
+Message-Id: <20170501124520.3769-3-clabbe.montjoie@gmail.com>
To: robh+dt@kernel.org, mark.rutland@arm.com,
- maxime.ripard@free-electrons.com,
- wens@csie.org, linux@armlinux.org.uk, catalin.marinas@arm.com,
- will.deacon@arm.com, peppe.cavallaro@st.com, alexandre.torgue@st.com,
- davem@davemloft.net
-Cc: devicetree@vger.kernel.org, f.fainelli@gmail.com, netdev@vger.kernel.org,
- linux-kernel@vger.kernel.org, Corentin Labbe <clabbe.montjoie@gmail.com>,
- linux-arm-kernel@lists.infradead.org
-Date: Tue, 14 Mar 2017 15:18:38 +0100
-
-Instead of ading more ifthen logic for adding a new mac_device_info
+ maxime.ripard@free-electrons.com, wens@csie.org,
+ linux@armlinux.org.uk, catalin.marinas@arm.com,
+ will.deacon@arm.com, peppe.cavallaro@st.com, alexandre.torgue@st.com
+Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
+ netdev@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
+ Corentin Labbe <clabbe.montjoie@gmail.com>
+Date: Mon, 1 May 2017 14:45:02 +0200
+
+Instead of adding more ifthen logic for adding a new mac_device_info
setup function, it is easier to add a function pointer to the function
needed.
Signed-off-by: Corentin Labbe <clabbe.montjoie@gmail.com>
---
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 4 +++-
- include/linux/stmmac.h | 3 +++
- 2 files changed, 6 insertions(+), 1 deletion(-)
+ include/linux/stmmac.h | 1 +
+ 2 files changed, 4 insertions(+), 1 deletion(-)
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
-index 4498a38..856ac57 100644
+index cd8c601..b82ab64 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
-@@ -3101,7 +3101,9 @@ static int stmmac_hw_init(struct stmmac_priv *priv)
+@@ -3947,7 +3947,9 @@ static int stmmac_hw_init(struct stmmac_priv *priv)
struct mac_device_info *mac;
/* Identify the MAC HW device */
@@ -87,50 +86,42 @@ index 4498a38..856ac57 100644
mac = dwmac1000_setup(priv->ioaddr,
priv->plat->multicast_filter_bins,
diff --git a/include/linux/stmmac.h b/include/linux/stmmac.h
-index fc273e9..8f09f18 100644
+index 3921cb9..8bb550b 100644
--- a/include/linux/stmmac.h
+++ b/include/linux/stmmac.h
-@@ -109,6 +109,8 @@ struct stmmac_axi {
- bool axi_rb;
- };
-
-+struct stmmac_priv;
-+
- struct plat_stmmacenet_data {
- int bus_id;
- int phy_addr;
-@@ -136,6 +138,7 @@ struct plat_stmmacenet_data {
+@@ -177,6 +177,7 @@ struct plat_stmmacenet_data {
void (*fix_mac_speed)(void *priv, unsigned int speed);
int (*init)(struct platform_device *pdev, void *priv);
void (*exit)(struct platform_device *pdev, void *priv);
-+ struct mac_device_info *(*setup)(struct stmmac_priv *priv);
++ struct mac_device_info *(*setup)(void *priv);
void *bsp_priv;
struct clk *stmmac_clk;
struct clk *pclk;
-From patchwork Tue Mar 14 14:18:39 2017
+
+From patchwork Mon May 1 12:45:03 2017
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
-Subject: [v2,
- 03/20] ARM: sun8i: dt: Add DT bindings documentation for Allwinner
+Subject: [v5,
+ 03/20] dt-bindings: net: Add DT bindings documentation for Allwinner
dwmac-sun8i
From: Corentin LABBE <clabbe.montjoie@gmail.com>
-X-Patchwork-Id: 9623517
-Message-Id: <20170314141856.24560-4-clabbe.montjoie@gmail.com>
+X-Patchwork-Id: 9706457
+Message-Id: <20170501124520.3769-4-clabbe.montjoie@gmail.com>
To: robh+dt@kernel.org, mark.rutland@arm.com,
- maxime.ripard@free-electrons.com,
- wens@csie.org, linux@armlinux.org.uk, catalin.marinas@arm.com,
- will.deacon@arm.com, peppe.cavallaro@st.com, alexandre.torgue@st.com,
- davem@davemloft.net
-Cc: devicetree@vger.kernel.org, f.fainelli@gmail.com, netdev@vger.kernel.org,
- linux-kernel@vger.kernel.org, Corentin Labbe <clabbe.montjoie@gmail.com>,
- linux-arm-kernel@lists.infradead.org
-Date: Tue, 14 Mar 2017 15:18:39 +0100
+ maxime.ripard@free-electrons.com, wens@csie.org,
+ linux@armlinux.org.uk, catalin.marinas@arm.com,
+ will.deacon@arm.com, peppe.cavallaro@st.com, alexandre.torgue@st.com
+Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
+ netdev@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
+ Corentin Labbe <clabbe.montjoie@gmail.com>
+Date: Mon, 1 May 2017 14:45:03 +0200
This patch adds documentation for Device-Tree bindings for the
Allwinner dwmac-sun8i driver.
Signed-off-by: Corentin Labbe <clabbe.montjoie@gmail.com>
+Acked-by: Rob Herring <robh@kernel.org>
---
.../devicetree/bindings/net/dwmac-sun8i.txt | 77 ++++++++++++++++++++++
1 file changed, 77 insertions(+)
@@ -138,7 +129,7 @@ Signed-off-by: Corentin Labbe <clabbe.montjoie@gmail.com>
diff --git a/Documentation/devicetree/bindings/net/dwmac-sun8i.txt b/Documentation/devicetree/bindings/net/dwmac-sun8i.txt
new file mode 100644
-index 0000000..f01ef17
+index 0000000..05cd067
--- /dev/null
+++ b/Documentation/devicetree/bindings/net/dwmac-sun8i.txt
@@ -0,0 +1,77 @@
@@ -166,13 +157,13 @@ index 0000000..f01ef17
+- syscon: A phandle to the syscon of the SoC with one of the following
+ compatible string:
+ - allwinner,sun8i-h3-system-controller
-+ - allwinner,sun8i-a64-system-controller
++ - allwinner,sun50i-a64-system-controller
+ - allwinner,sun8i-a83t-system-controller
+
+Optional properties:
-+- allwinner,tx-delay: TX clock delay chain value. Range value is 0-0x07. Default is 0)
-+- allwinner,rx-delay: RX clock delay chain value. Range value is 0-0x1F. Default is 0)
-+Both delay properties are in 0.1ns step.
++- allwinner,tx-delay-ps: TX clock delay chain value in ps. Range value is 0-700. Default is 0)
++- allwinner,rx-delay-ps: RX clock delay chain value in ps. Range value is 0-3100. Default is 0)
++Both delay properties need to be a multiple of 100.
+
+Optional properties for "allwinner,sun8i-h3-emac":
+- allwinner,leds-active-low: EPHY LEDs are active low
@@ -219,25 +210,27 @@ index 0000000..f01ef17
+ };
+ };
+};
-From patchwork Tue Mar 14 14:18:40 2017
+
+From patchwork Mon May 1 12:45:04 2017
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
-Subject: [v2,
- 04/20] ARM: sun8i: dt: Add DT bindings documentation for Allwinner
- syscon
+Subject: [v5, 04/20] dt-bindings: syscon: Add DT bindings documentation for
+ Allwinner syscon
From: Corentin LABBE <clabbe.montjoie@gmail.com>
-X-Patchwork-Id: 9623533
-Message-Id: <20170314141856.24560-5-clabbe.montjoie@gmail.com>
+X-Patchwork-Id: 9706469
+Message-Id: <20170501124520.3769-5-clabbe.montjoie@gmail.com>
To: robh+dt@kernel.org, mark.rutland@arm.com,
- maxime.ripard@free-electrons.com,
- wens@csie.org, linux@armlinux.org.uk, catalin.marinas@arm.com,
- will.deacon@arm.com, peppe.cavallaro@st.com, alexandre.torgue@st.com,
- davem@davemloft.net
-Cc: devicetree@vger.kernel.org, f.fainelli@gmail.com, netdev@vger.kernel.org,
- linux-kernel@vger.kernel.org, Corentin Labbe <clabbe.montjoie@gmail.com>,
- linux-arm-kernel@lists.infradead.org
-Date: Tue, 14 Mar 2017 15:18:40 +0100
+ maxime.ripard@free-electrons.com, wens@csie.org,
+ linux@armlinux.org.uk, catalin.marinas@arm.com,
+ will.deacon@arm.com, peppe.cavallaro@st.com, alexandre.torgue@st.com
+Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
+ netdev@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
+ Corentin Labbe <clabbe.montjoie@gmail.com>
+Date: Mon, 1 May 2017 14:45:04 +0200
+
+This patch adds documentation for Device-Tree bindings for the
+syscon present in allwinner devices.
Signed-off-by: Corentin Labbe <clabbe.montjoie@gmail.com>
---
@@ -247,7 +240,7 @@ Signed-off-by: Corentin Labbe <clabbe.montjoie@gmail.com>
diff --git a/Documentation/devicetree/bindings/misc/allwinner,syscon.txt b/Documentation/devicetree/bindings/misc/allwinner,syscon.txt
new file mode 100644
-index 0000000..9f5f1f5
+index 0000000..cb57691
--- /dev/null
+++ b/Documentation/devicetree/bindings/misc/allwinner,syscon.txt
@@ -0,0 +1,19 @@
@@ -262,31 +255,31 @@ index 0000000..9f5f1f5
+- reg: address and length of the register for the device.
+- compatible: should be "syscon" and one of the following string:
+ "allwinner,sun8i-h3-system-controller"
-+ "allwinner,sun8i-a64-system-controller"
++ "allwinner,sun50i-a64-system-controller"
+ "allwinner,sun8i-a83t-system-controller"
+
+Example:
-+syscon: syscon@01c00000 {
-+ compatible = "syscon", "allwinner,sun8i-h3-system-controller";
++syscon: syscon@1c00000 {
++ compatible = "allwinner,sun8i-h3-system-controller", "syscon";
+ reg = <0x01c00000 0x1000>;
+};
-From patchwork Tue Mar 14 14:18:41 2017
+
+From patchwork Mon May 1 12:45:05 2017
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
-Subject: [v2,05/20] net-next: stmmac: Add dwmac-sun8i
+Subject: [v5,05/20] net: stmmac: Add dwmac-sun8i
From: Corentin LABBE <clabbe.montjoie@gmail.com>
-X-Patchwork-Id: 9623523
-Message-Id: <20170314141856.24560-6-clabbe.montjoie@gmail.com>
+X-Patchwork-Id: 9706473
+Message-Id: <20170501124520.3769-6-clabbe.montjoie@gmail.com>
To: robh+dt@kernel.org, mark.rutland@arm.com,
- maxime.ripard@free-electrons.com,
- wens@csie.org, linux@armlinux.org.uk, catalin.marinas@arm.com,
- will.deacon@arm.com, peppe.cavallaro@st.com, alexandre.torgue@st.com,
- davem@davemloft.net
-Cc: devicetree@vger.kernel.org, f.fainelli@gmail.com, netdev@vger.kernel.org,
- linux-kernel@vger.kernel.org, Corentin Labbe <clabbe.montjoie@gmail.com>,
- linux-arm-kernel@lists.infradead.org
-Date: Tue, 14 Mar 2017 15:18:41 +0100
+ maxime.ripard@free-electrons.com, wens@csie.org,
+ linux@armlinux.org.uk, catalin.marinas@arm.com,
+ will.deacon@arm.com, peppe.cavallaro@st.com, alexandre.torgue@st.com
+Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
+ netdev@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
+ Corentin Labbe <clabbe.montjoie@gmail.com>
+Date: Mon, 1 May 2017 14:45:05 +0200
The dwmac-sun8i is a heavy hacked version of stmmac hardware by
allwinner.
@@ -297,11 +290,11 @@ Signed-off-by: Corentin Labbe <clabbe.montjoie@gmail.com>
---
drivers/net/ethernet/stmicro/stmmac/Kconfig | 11 +
drivers/net/ethernet/stmicro/stmmac/Makefile | 1 +
- drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c | 938 +++++++++++++++++++++
- drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 27 +-
+ drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c | 973 +++++++++++++++++++++
+ drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 29 +
.../net/ethernet/stmicro/stmmac/stmmac_platform.c | 9 +-
include/linux/stmmac.h | 1 +
- 6 files changed, 984 insertions(+), 3 deletions(-)
+ 6 files changed, 1022 insertions(+), 2 deletions(-)
create mode 100644 drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c
diff --git a/drivers/net/ethernet/stmicro/stmmac/Kconfig b/drivers/net/ethernet/stmicro/stmmac/Kconfig
@@ -340,10 +333,10 @@ index 700c603..fd4937a 100644
stmmac-platform-objs:= stmmac_platform.o
diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c
new file mode 100644
-index 0000000..52ab67c
+index 0000000..66eb980
--- /dev/null
+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c
-@@ -0,0 +1,938 @@
+@@ -0,0 +1,973 @@
+/*
+ * dwmac-sun8i.c - Allwinner sun8i DWMAC specific glue layer
+ *
@@ -606,23 +599,24 @@ index 0000000..52ab67c
+ }
+}
+
-+static void sun8i_dwmac_enable_dma_irq(void __iomem *ioaddr)
++static void sun8i_dwmac_enable_dma_irq(void __iomem *ioaddr, u32 chan)
+{
+ writel(EMAC_RX_INT | EMAC_TX_INT, ioaddr + EMAC_INT_EN);
+}
+
-+static void sun8i_dwmac_disable_dma_irq(void __iomem *ioaddr)
++static void sun8i_dwmac_disable_dma_irq(void __iomem *ioaddr, u32 chan)
+{
+ writel(0, ioaddr + EMAC_INT_EN);
+}
+
-+static void sun8i_dwmac_dma_start_tx(void __iomem *ioaddr)
++static void sun8i_dwmac_dma_start_tx(void __iomem *ioaddr, u32 chan)
+{
+ u32 v;
+
-+ v = readl(ioaddr + EMAC_TX_CTL0);
-+ v |= EMAC_TX_TRANSMITTER_EN;
-+ writel(v, ioaddr + EMAC_TX_CTL0);
++ v = readl(ioaddr + EMAC_TX_CTL1);
++ v |= EMAC_TX_DMA_START;
++ v |= EMAC_TX_DMA_EN;
++ writel(v, ioaddr + EMAC_TX_CTL1);
+}
+
+static void sun8i_dwmac_enable_dma_transmission(void __iomem *ioaddr)
@@ -632,47 +626,39 @@ index 0000000..52ab67c
+ v = readl(ioaddr + EMAC_TX_CTL1);
+ v |= EMAC_TX_DMA_START;
+ v |= EMAC_TX_DMA_EN;
-+ writel_relaxed(v, ioaddr + EMAC_TX_CTL1);
++ writel(v, ioaddr + EMAC_TX_CTL1);
+}
+
-+static void sun8i_dwmac_dma_stop_tx(void __iomem *ioaddr)
++static void sun8i_dwmac_dma_stop_tx(void __iomem *ioaddr, u32 chan)
+{
+ u32 v;
+
-+ v = readl(ioaddr + EMAC_TX_CTL0);
-+ v &= ~EMAC_TX_TRANSMITTER_EN;
-+ writel(v, ioaddr + EMAC_TX_CTL0);
++ v = readl(ioaddr + EMAC_TX_CTL1);
++ v &= ~EMAC_TX_DMA_EN;
++ writel(v, ioaddr + EMAC_TX_CTL1);
+}
+
-+static void sun8i_dwmac_dma_start_rx(void __iomem *ioaddr)
++static void sun8i_dwmac_dma_start_rx(void __iomem *ioaddr, u32 chan)
+{
+ u32 v;
+
-+ v = readl(ioaddr + EMAC_RX_CTL0);
-+ v |= EMAC_RX_RECEIVER_EN;
-+ writel(v, ioaddr + EMAC_RX_CTL0);
-+
+ v = readl(ioaddr + EMAC_RX_CTL1);
+ v |= EMAC_RX_DMA_START;
+ v |= EMAC_RX_DMA_EN;
+ writel(v, ioaddr + EMAC_RX_CTL1);
+}
+
-+static void sun8i_dwmac_dma_stop_rx(void __iomem *ioaddr)
++static void sun8i_dwmac_dma_stop_rx(void __iomem *ioaddr, u32 chan)
+{
+ u32 v;
+
-+ v = readl(ioaddr + EMAC_RX_CTL0);
-+ v &= ~EMAC_RX_RECEIVER_EN;
-+ writel(v, ioaddr + EMAC_RX_CTL0);
-+
+ v = readl(ioaddr + EMAC_RX_CTL1);
+ v &= ~EMAC_RX_DMA_EN;
+ writel(v, ioaddr + EMAC_RX_CTL1);
+}
+
+static int sun8i_dwmac_dma_interrupt(void __iomem *ioaddr,
-+ struct stmmac_extra_stats *x)
++ struct stmmac_extra_stats *x, u32 chan)
+{
+ u32 v;
+ int ret = 0;
@@ -825,6 +811,27 @@ index 0000000..52ab67c
+ writel(v, ioaddr + EMAC_BASIC_CTL1);
+}
+
++static void sun8i_dwmac_set_mac(void __iomem *ioaddr, bool enable)
++{
++ u32 t, r;
++
++ t = readl(ioaddr + EMAC_TX_CTL0);
++ r = readl(ioaddr + EMAC_RX_CTL0);
++ if (enable) {
++ t |= EMAC_TX_TRANSMITTER_EN;
++ r |= EMAC_RX_RECEIVER_EN;
++ } else {
++ t &= ~EMAC_TX_TRANSMITTER_EN;
++ r &= ~EMAC_RX_RECEIVER_EN;
++ }
++ writel(t, ioaddr + EMAC_TX_CTL0);
++ writel(r, ioaddr + EMAC_RX_CTL0);
++}
++
++/* Set MAC address at slot reg_n
++ * All slot > 0 need to be enabled with MAC_ADDR_TYPE_DST
++ * If addr is NULL, clear the slot
++ */
+static void sun8i_dwmac_set_umac_addr(struct mac_device_info *hw,
+ unsigned char *addr,
+ unsigned int reg_n)
@@ -832,6 +839,11 @@ index 0000000..52ab67c
+ void __iomem *ioaddr = hw->pcsr;
+ u32 v;
+
++ if (!addr) {
++ writel(0, ioaddr + EMAC_MACADDR_HI(reg_n));
++ return;
++ }
++
+ stmmac_set_mac_addr(ioaddr, addr, EMAC_MACADDR_HI(reg_n),
+ EMAC_MACADDR_LO(reg_n));
+ if (reg_n > 0) {
@@ -869,39 +881,44 @@ index 0000000..52ab67c
+{
+ void __iomem *ioaddr = hw->pcsr;
+ u32 v;
-+ int i = 0;
++ int i = 1;
+ struct netdev_hw_addr *ha;
++ int macaddrs = netdev_uc_count(dev) + netdev_mc_count(dev) + 1;
+
-+ v = readl(ioaddr + EMAC_RX_FRM_FLT);
-+
-+ v |= EMAC_FRM_FLT_CTL;
++ v = EMAC_FRM_FLT_CTL;
+
+ if (dev->flags & IFF_PROMISC) {
+ v = EMAC_FRM_FLT_RXALL;
+ } else if (dev->flags & IFF_ALLMULTI) {
-+ v = EMAC_FRM_FLT_MULTICAST;
-+ } else if (!netdev_mc_empty(dev)) {
-+ netdev_for_each_mc_addr(ha, dev) {
-+ i++;
-+ sun8i_dwmac_set_umac_addr(hw, ha->addr, i);
++ v |= EMAC_FRM_FLT_MULTICAST;
++ } else if (macaddrs <= hw->unicast_filter_entries) {
++ if (!netdev_mc_empty(dev)) {
++ netdev_for_each_mc_addr(ha, dev) {
++ sun8i_dwmac_set_umac_addr(hw, ha->addr, i);
++ i++;
++ }
+ }
-+ }
-+
-+ if (netdev_uc_count(dev) + i > hw->unicast_filter_entries) {
++ if (!netdev_uc_empty(dev)) {
++ netdev_for_each_uc_addr(ha, dev) {
++ sun8i_dwmac_set_umac_addr(hw, ha->addr, i);
++ i++;
++ }
++ }
++ } else {
+ netdev_info(dev, "Too many address, switching to promiscuous\n");
+ v = EMAC_FRM_FLT_RXALL;
-+ } else {
-+ netdev_for_each_uc_addr(ha, dev) {
-+ i++;
-+ sun8i_dwmac_set_umac_addr(hw, ha->addr, i);
-+ }
+ }
++
++ /* Disable unused address filter slots */
++ while (i < hw->unicast_filter_entries)
++ sun8i_dwmac_set_umac_addr(hw, NULL, i++);
++
+ writel(v, ioaddr + EMAC_RX_FRM_FLT);
+}
+
+static void sun8i_dwmac_flow_ctrl(struct mac_device_info *hw,
-+ unsigned int duplex,
-+ unsigned int fc, unsigned int pause_time)
++ unsigned int duplex, unsigned int fc,
++ unsigned int pause_time, u32 tx_cnt)
+{
+ void __iomem *ioaddr = hw->pcsr;
+ u32 v;
@@ -981,7 +998,12 @@ index 0000000..52ab67c
+ }
+ }
+
-+ if (!of_property_read_u32(node, "allwinner,tx-delay", &val)) {
++ if (!of_property_read_u32(node, "allwinner,tx-delay-ps", &val)) {
++ if (val % 100) {
++ dev_err(priv->device, "tx-delay must be a multiple of 100\n");
++ return -EINVAL;
++ }
++ val /= 100;
+ dev_dbg(priv->device, "set tx-delay to %x\n", val);
+ if (val <= SYSCON_ETXDC_MASK) {
+ reg &= ~(SYSCON_ETXDC_MASK << SYSCON_ETXDC_SHIFT);
@@ -993,7 +1015,12 @@ index 0000000..52ab67c
+ }
+ }
+
-+ if (!of_property_read_u32(node, "allwinner,rx-delay", &val)) {
++ if (!of_property_read_u32(node, "allwinner,rx-delay-ps", &val)) {
++ if (val % 100) {
++ dev_err(priv->device, "rx-delay must be a multiple of 100\n");
++ return -EINVAL;
++ }
++ val /= 100;
+ dev_dbg(priv->device, "set rx-delay to %x\n", val);
+ if (val <= SYSCON_ERXDC_MASK) {
+ reg &= ~(SYSCON_ERXDC_MASK << SYSCON_ERXDC_SHIFT);
@@ -1043,21 +1070,20 @@ index 0000000..52ab67c
+ struct sunxi_priv_data *gmac = priv->plat->bsp_priv;
+ int ret;
+
-+ if (gmac->ephy_clk) {
-+ ret = clk_prepare_enable(gmac->ephy_clk);
-+ if (ret) {
-+ dev_err(priv->device, "Cannot enable ephy\n");
-+ return ret;
-+ }
++ if (!gmac->use_internal_phy)
++ return 0;
++
++ ret = clk_prepare_enable(gmac->ephy_clk);
++ if (ret) {
++ dev_err(priv->device, "Cannot enable ephy\n");
++ return ret;
+ }
+
-+ if (gmac->rst_ephy) {
-+ ret = reset_control_deassert(gmac->rst_ephy);
-+ if (ret) {
-+ dev_err(priv->device, "Cannot deassert ephy\n");
-+ clk_disable_unprepare(gmac->ephy_clk);
-+ return ret;
-+ }
++ ret = reset_control_deassert(gmac->rst_ephy);
++ if (ret) {
++ dev_err(priv->device, "Cannot deassert ephy\n");
++ clk_disable_unprepare(gmac->ephy_clk);
++ return ret;
+ }
+
+ return 0;
@@ -1065,10 +1091,11 @@ index 0000000..52ab67c
+
+static int sun8i_dwmac_unpower_internal_phy(struct sunxi_priv_data *gmac)
+{
-+ if (gmac->ephy_clk)
-+ clk_disable_unprepare(gmac->ephy_clk);
-+ if (gmac->rst_ephy)
-+ reset_control_assert(gmac->rst_ephy);
++ if (!gmac->use_internal_phy)
++ return 0;
++
++ clk_disable_unprepare(gmac->ephy_clk);
++ reset_control_assert(gmac->rst_ephy);
+ return 0;
+}
+
@@ -1116,6 +1143,7 @@ index 0000000..52ab67c
+
+static const struct stmmac_ops sun8i_dwmac_ops = {
+ .core_init = sun8i_dwmac_core_init,
++ .set_mac = sun8i_dwmac_set_mac,
+ .dump_regs = sun8i_dwmac_dump_mac_regs,
+ .rx_ipc = sun8i_dwmac_rx_ipc_enable,
+ .set_filter = sun8i_dwmac_set_filter,
@@ -1124,9 +1152,10 @@ index 0000000..52ab67c
+ .get_umac_addr = sun8i_dwmac_get_umac_addr,
+};
+
-+static struct mac_device_info *sun8i_dwmac_setup(struct stmmac_priv *priv)
++static struct mac_device_info *sun8i_dwmac_setup(void *ppriv)
+{
+ struct mac_device_info *mac;
++ struct stmmac_priv *priv = ppriv;
+ int ret;
+
+ mac = devm_kzalloc(priv->device, sizeof(*mac), GFP_KERNEL);
@@ -1182,13 +1211,13 @@ index 0000000..52ab67c
+
+ gmac->variant = of_device_get_match_data(&pdev->dev);
+ if (!gmac->variant) {
-+ dev_err(&pdev->dev, "Missing sun8i-emac variant\n");
++ dev_err(&pdev->dev, "Missing dwmac-sun8i variant\n");
+ return -EINVAL;
+ }
+
+ gmac->tx_clk = devm_clk_get(dev, "stmmaceth");
+ if (IS_ERR(gmac->tx_clk)) {
-+ dev_err(dev, "could not get tx clock\n");
++ dev_err(dev, "Could not get TX clock\n");
+ return PTR_ERR(gmac->tx_clk);
+ }
+
@@ -1197,7 +1226,7 @@ index 0000000..52ab67c
+ if (IS_ERR(gmac->regulator)) {
+ if (PTR_ERR(gmac->regulator) == -EPROBE_DEFER)
+ return -EPROBE_DEFER;
-+ dev_info(dev, "no regulator found\n");
++ dev_info(dev, "No regulator found\n");
+ gmac->regulator = NULL;
+ }
+
@@ -1205,7 +1234,7 @@ index 0000000..52ab67c
+ "syscon");
+ if (IS_ERR(gmac->regmap)) {
+ ret = PTR_ERR(gmac->regmap);
-+ dev_err(&pdev->dev, "unable to map SYSCON:%d\n", ret);
++ dev_err(&pdev->dev, "Unable to map syscon: %d\n", ret);
+ return ret;
+ }
+
@@ -1216,8 +1245,7 @@ index 0000000..52ab67c
+ gmac->ephy_clk = of_clk_get(plat_dat->phy_node, 0);
+ if (IS_ERR(gmac->ephy_clk)) {
+ ret = PTR_ERR(gmac->ephy_clk);
-+ dev_err(&pdev->dev, "Cannot get EPHY clock err=%d\n",
-+ ret);
++ dev_err(&pdev->dev, "Cannot get EPHY clock: %d\n", ret);
+ return -EINVAL;
+ }
+
@@ -1272,7 +1300,7 @@ index 0000000..52ab67c
+ .probe = sun8i_dwmac_probe,
+ .remove = stmmac_pltfr_remove,
+ .driver = {
-+ .name = "sun8i-dwmac",
++ .name = "dwmac-sun8i",
+ .pm = &stmmac_pltfr_pm_ops,
+ .of_match_table = sun8i_dwmac_match,
+ },
@@ -1283,10 +1311,10 @@ index 0000000..52ab67c
+MODULE_DESCRIPTION("Allwinner sun8i DWMAC specific glue layer");
+MODULE_LICENSE("GPL");
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
-index 856ac57..05e8018 100644
+index b82ab64..39777a7 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
-@@ -177,6 +177,17 @@ static void stmmac_clk_csr_set(struct stmmac_priv *priv)
+@@ -235,6 +235,17 @@ static void stmmac_clk_csr_set(struct stmmac_priv *priv)
else if ((clk_rate >= CSR_F_250M) && (clk_rate < CSR_F_300M))
priv->clk_csr = STMMAC_CSR_250_300M;
}
@@ -1304,18 +1332,22 @@ index 856ac57..05e8018 100644
}
static void print_pkt(unsigned char *buf, int len)
-@@ -697,6 +708,10 @@ static void stmmac_adjust_link(struct net_device *dev)
+@@ -784,6 +795,14 @@ static void stmmac_adjust_link(struct net_device *dev)
if (phydev->link) {
u32 ctrl = readl(priv->ioaddr + MAC_CTRL_REG);
-+ /* disable loopback */
-+ if (priv->plat->has_sun8i)
-+ ctrl &= ~BIT(1);
++ /* dwmac-sun8i handle loopback in MAC_CTRL_REG */
++ if (priv->plat->has_sun8i) {
++ if (dev->features & NETIF_F_LOOPBACK)
++ ctrl |= BIT(1);
++ else
++ ctrl &= ~BIT(1);
++ }
+
/* Now we make sure that we can be in full duplex mode.
* If not, we operate in half-duplex mode. */
if (phydev->duplex != priv->oldduplex) {
-@@ -714,6 +729,8 @@ static void stmmac_adjust_link(struct net_device *dev)
+@@ -800,6 +819,8 @@ static void stmmac_adjust_link(struct net_device *dev)
if (phydev->speed != priv->speed) {
new_state = 1;
@@ -1324,7 +1356,7 @@ index 856ac57..05e8018 100644
switch (phydev->speed) {
case 1000:
if (priv->plat->has_gmac ||
-@@ -725,6 +742,8 @@ static void stmmac_adjust_link(struct net_device *dev)
+@@ -811,6 +832,8 @@ static void stmmac_adjust_link(struct net_device *dev)
priv->plat->has_gmac4) {
ctrl |= priv->hw->link.port;
ctrl |= priv->hw->link.speed;
@@ -1333,7 +1365,7 @@ index 856ac57..05e8018 100644
} else {
ctrl &= ~priv->hw->link.port;
}
-@@ -734,6 +753,8 @@ static void stmmac_adjust_link(struct net_device *dev)
+@@ -820,6 +843,8 @@ static void stmmac_adjust_link(struct net_device *dev)
priv->plat->has_gmac4) {
ctrl |= priv->hw->link.port;
ctrl &= ~(priv->hw->link.speed);
@@ -1342,16 +1374,7 @@ index 856ac57..05e8018 100644
} else {
ctrl &= ~priv->hw->link.port;
}
-@@ -1702,7 +1723,7 @@ static int stmmac_hw_setup(struct net_device *dev, bool init_ptp)
- /* Enable the MAC Rx/Tx */
- if (priv->synopsys_id >= DWMAC_CORE_4_00)
- stmmac_dwmac4_set_mac(priv->ioaddr, true);
-- else
-+ else if (!priv->plat->has_sun8i)
- stmmac_set_mac(priv->ioaddr, true);
-
- /* Set the HW DMA mode and the COE */
-@@ -3123,6 +3144,10 @@ static int stmmac_hw_init(struct stmmac_priv *priv)
+@@ -3969,6 +3994,10 @@ static int stmmac_hw_init(struct stmmac_priv *priv)
priv->hw = mac;
@@ -1363,10 +1386,10 @@ index 856ac57..05e8018 100644
if (priv->synopsys_id >= DWMAC_CORE_4_00) {
priv->hw->mode = &dwmac4_ring_mode_ops;
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c
-index 0ba1caf..3c21862 100644
+index 7fc3a1e..3840529 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c
-@@ -160,6 +160,12 @@ static int stmmac_dt_phy(struct plat_stmmacenet_data *plat,
+@@ -309,6 +309,12 @@ static int stmmac_dt_phy(struct plat_stmmacenet_data *plat,
struct device_node *np, struct device *dev)
{
bool mdio = true;
@@ -1379,7 +1402,7 @@ index 0ba1caf..3c21862 100644
/* If phy-handle property is passed from DT, use it as the PHY */
plat->phy_node = of_parse_phandle(np, "phy-handle", 0);
-@@ -176,8 +182,7 @@ static int stmmac_dt_phy(struct plat_stmmacenet_data *plat,
+@@ -325,8 +331,7 @@ static int stmmac_dt_phy(struct plat_stmmacenet_data *plat,
mdio = false;
}
@@ -1390,10 +1413,10 @@ index 0ba1caf..3c21862 100644
} else {
/**
diff --git a/include/linux/stmmac.h b/include/linux/stmmac.h
-index 8f09f18..100386c 100644
+index 8bb550b..108739f 100644
--- a/include/linux/stmmac.h
+++ b/include/linux/stmmac.h
-@@ -147,6 +147,7 @@ struct plat_stmmacenet_data {
+@@ -186,6 +186,7 @@ struct plat_stmmacenet_data {
struct reset_control *stmmac_rst;
struct stmmac_axi *axi;
int has_gmac4;
@@ -1401,24 +1424,25 @@ index 8f09f18..100386c 100644
bool tso_en;
int mac_port_sel_speed;
bool en_tx_lpi_clockgating;
-From patchwork Tue Mar 14 14:18:42 2017
+
+From patchwork Mon May 1 12:45:06 2017
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
-Subject: [v2, 06/20] ARM: dts: sunxi-h3-h5: Add dt node for the syscon control
+Subject: [v5,
+ 06/20] arm: sun8i: sunxi-h3-h5: Add dt node for the syscon control
module
From: Corentin LABBE <clabbe.montjoie@gmail.com>
-X-Patchwork-Id: 9623549
-Message-Id: <20170314141856.24560-7-clabbe.montjoie@gmail.com>
+X-Patchwork-Id: 9706459
+Message-Id: <20170501124520.3769-7-clabbe.montjoie@gmail.com>
To: robh+dt@kernel.org, mark.rutland@arm.com,
- maxime.ripard@free-electrons.com,
- wens@csie.org, linux@armlinux.org.uk, catalin.marinas@arm.com,
- will.deacon@arm.com, peppe.cavallaro@st.com, alexandre.torgue@st.com,
- davem@davemloft.net
-Cc: devicetree@vger.kernel.org, f.fainelli@gmail.com, netdev@vger.kernel.org,
- linux-kernel@vger.kernel.org, Corentin Labbe <clabbe.montjoie@gmail.com>,
- linux-arm-kernel@lists.infradead.org
-Date: Tue, 14 Mar 2017 15:18:42 +0100
+ maxime.ripard@free-electrons.com, wens@csie.org,
+ linux@armlinux.org.uk, catalin.marinas@arm.com,
+ will.deacon@arm.com, peppe.cavallaro@st.com, alexandre.torgue@st.com
+Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
+ netdev@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
+ Corentin Labbe <clabbe.montjoie@gmail.com>
+Date: Mon, 1 May 2017 14:45:06 +0200
This patch add the dt node for the syscon register present on the
Allwinner H3/H5
@@ -1432,39 +1456,39 @@ Signed-off-by: Corentin Labbe <clabbe.montjoie@gmail.com>
1 file changed, 6 insertions(+)
diff --git a/arch/arm/boot/dts/sunxi-h3-h5.dtsi b/arch/arm/boot/dts/sunxi-h3-h5.dtsi
-index 2494ea0..07e4f36 100644
+index 1aeeacb..d9691fc 100644
--- a/arch/arm/boot/dts/sunxi-h3-h5.dtsi
+++ b/arch/arm/boot/dts/sunxi-h3-h5.dtsi
-@@ -102,6 +102,12 @@
+@@ -83,6 +83,12 @@
#size-cells = <1>;
ranges;
-+ syscon: syscon@01c00000 {
-+ compatible = "syscon",
-+ "allwinner,sun8i-h3-system-controller";
++ syscon: syscon@1c00000 {
++ compatible = "allwinner,sun8i-h3-system-controller",
++ "syscon";
+ reg = <0x01c00000 0x1000>;
+ };
+
dma: dma-controller@01c02000 {
compatible = "allwinner,sun8i-h3-dma";
reg = <0x01c02000 0x1000>;
-From patchwork Tue Mar 14 14:18:43 2017
+
+From patchwork Mon May 1 12:45:07 2017
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
-Subject: [v2,07/20] ARM: dts: sunxi-h3-h5: add dwmac-sun8i ethernet driver
+Subject: [v5,07/20] arm: sun8i: sunxi-h3-h5: add dwmac-sun8i ethernet driver
From: Corentin LABBE <clabbe.montjoie@gmail.com>
-X-Patchwork-Id: 9623561
-Message-Id: <20170314141856.24560-8-clabbe.montjoie@gmail.com>
+X-Patchwork-Id: 9706465
+Message-Id: <20170501124520.3769-8-clabbe.montjoie@gmail.com>
To: robh+dt@kernel.org, mark.rutland@arm.com,
- maxime.ripard@free-electrons.com,
- wens@csie.org, linux@armlinux.org.uk, catalin.marinas@arm.com,
- will.deacon@arm.com, peppe.cavallaro@st.com, alexandre.torgue@st.com,
- davem@davemloft.net
-Cc: devicetree@vger.kernel.org, f.fainelli@gmail.com, netdev@vger.kernel.org,
- linux-kernel@vger.kernel.org, Corentin Labbe <clabbe.montjoie@gmail.com>,
- linux-arm-kernel@lists.infradead.org
-Date: Tue, 14 Mar 2017 15:18:43 +0100
+ maxime.ripard@free-electrons.com, wens@csie.org,
+ linux@armlinux.org.uk, catalin.marinas@arm.com,
+ will.deacon@arm.com, peppe.cavallaro@st.com, alexandre.torgue@st.com
+Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
+ netdev@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
+ Corentin Labbe <clabbe.montjoie@gmail.com>
+Date: Mon, 1 May 2017 14:45:07 +0200
The dwmac-sun8i is an ethernet MAC hardware that support 10/100/1000
speed.
@@ -1474,21 +1498,21 @@ SoC H3/H5 have an internal PHY, so optionals syscon and ephy are set.
Signed-off-by: Corentin Labbe <clabbe.montjoie@gmail.com>
---
- arch/arm/boot/dts/sunxi-h3-h5.dtsi | 33 +++++++++++++++++++++++++++++++++
- 1 file changed, 33 insertions(+)
+ arch/arm/boot/dts/sunxi-h3-h5.dtsi | 34 ++++++++++++++++++++++++++++++++++
+ 1 file changed, 34 insertions(+)
diff --git a/arch/arm/boot/dts/sunxi-h3-h5.dtsi b/arch/arm/boot/dts/sunxi-h3-h5.dtsi
-index 07e4f36..c35af5e 100644
+index d9691fc..45a9a30 100644
--- a/arch/arm/boot/dts/sunxi-h3-h5.dtsi
+++ b/arch/arm/boot/dts/sunxi-h3-h5.dtsi
-@@ -272,6 +272,14 @@
+@@ -285,6 +285,14 @@
interrupt-controller;
#interrupt-cells = <3>;
-+ emac_rgmii_pins: emac0@0 {
++ emac_rgmii_pins: emac0 {
+ pins = "PD0", "PD1", "PD2", "PD3", "PD4",
-+ "PD5", "PD7", "PD8", "PD9", "PD10",
-+ "PD12", "PD13", "PD15", "PD16", "PD17";
++ "PD5", "PD7", "PD8", "PD9", "PD10",
++ "PD12", "PD13", "PD15", "PD16", "PD17";
+ function = "emac";
+ drive-strength = <40>;
+ };
@@ -1496,7 +1520,7 @@ index 07e4f36..c35af5e 100644
i2c0_pins: i2c0 {
pins = "PA11", "PA12";
function = "i2c0";
-@@ -368,6 +376,31 @@
+@@ -381,6 +389,32 @@
clocks = <&osc24M>;
};
@@ -1518,9 +1542,10 @@ index 07e4f36..c35af5e 100644
+ #address-cells = <1>;
+ #size-cells = <0>;
+ int_mii_phy: ethernet-phy@1 {
-+ reg = <1>;
-+ clocks = <&ccu CLK_BUS_EPHY>;
-+ resets = <&ccu RST_BUS_EPHY>;
++ compatible = "ethernet-phy-ieee802.3-c22";
++ reg = <1>;
++ clocks = <&ccu CLK_BUS_EPHY>;
++ resets = <&ccu RST_BUS_EPHY>;
+ };
+ };
+ };
@@ -1528,107 +1553,23 @@ index 07e4f36..c35af5e 100644
spi0: spi@01c68000 {
compatible = "allwinner,sun8i-h3-spi";
reg = <0x01c68000 0x1000>;
-From patchwork Tue Mar 14 14:18:44 2017
-Content-Type: text/plain; charset="utf-8"
-MIME-Version: 1.0
-Content-Transfer-Encoding: 7bit
-Subject: [v2,08/20] ARM: dts: sun8i: Enable dwmac-sun8i on the Banana Pi M2+
-From: Corentin LABBE <clabbe.montjoie@gmail.com>
-X-Patchwork-Id: 9623539
-Message-Id: <20170314141856.24560-9-clabbe.montjoie@gmail.com>
-To: robh+dt@kernel.org, mark.rutland@arm.com,
- maxime.ripard@free-electrons.com,
- wens@csie.org, linux@armlinux.org.uk, catalin.marinas@arm.com,
- will.deacon@arm.com, peppe.cavallaro@st.com, alexandre.torgue@st.com,
- davem@davemloft.net
-Cc: devicetree@vger.kernel.org, f.fainelli@gmail.com, netdev@vger.kernel.org,
- linux-kernel@vger.kernel.org, LABBE Corentin <clabbe.montjoie@gmail.com>,
- linux-arm-kernel@lists.infradead.org
-Date: Tue, 14 Mar 2017 15:18:44 +0100
-
-From: LABBE Corentin <clabbe.montjoie@gmail.com>
-
-The dwmac-sun8i hardware is present on the Banana Pi M2+
-It uses an external PHY rtl8211e via RGMII.
-
-This patch create the needed regulator, emac and phy nodes.
-Signed-off-by: Corentin Labbe <clabbe.montjoie@gmail.com>
----
- arch/arm/boot/dts/sun8i-h3-bananapi-m2-plus.dts | 37 +++++++++++++++++++++++++
- 1 file changed, 37 insertions(+)
-
-diff --git a/arch/arm/boot/dts/sun8i-h3-bananapi-m2-plus.dts b/arch/arm/boot/dts/sun8i-h3-bananapi-m2-plus.dts
-index 52acbe1..30b0a41 100644
---- a/arch/arm/boot/dts/sun8i-h3-bananapi-m2-plus.dts
-+++ b/arch/arm/boot/dts/sun8i-h3-bananapi-m2-plus.dts
-@@ -90,6 +90,18 @@
- pinctrl-0 = <&wifi_en_bpi_m2p>;
- reset-gpios = <&r_pio 0 7 GPIO_ACTIVE_LOW>; /* PL7 */
- };
-+
-+ reg_gmac_3v3: gmac-3v3 {
-+ compatible = "regulator-fixed";
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&gmac_power_pin_orangepi>;
-+ regulator-name = "gmac-3v3";
-+ regulator-min-microvolt = <3300000>;
-+ regulator-max-microvolt = <3300000>;
-+ startup-delay-us = <100000>;
-+ enable-active-high;
-+ gpio = <&pio 3 6 GPIO_ACTIVE_HIGH>;
-+ };
- };
-
- &ehci1 {
-@@ -186,3 +198,28 @@
- /* USB VBUS is on as long as VCC-IO is on */
- status = "okay";
- };
-+
-+&pio {
-+ gmac_power_pin_orangepi: gmac_power_pin@0 {
-+ pins = "PD6";
-+ function = "gpio_out";
-+ drive-strength = <10>;
-+ };
-+};
-+
-+&mdio {
-+ ext_rgmii_phy: ethernet-phy@1 {
-+ reg = <0>;
-+ };
-+};
-+
-+&emac {
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&emac_rgmii_pins>;
-+ phy-supply = <&reg_gmac_3v3>;
-+ phy-handle = <&ext_rgmii_phy>;
-+ phy-mode = "rgmii";
-+
-+ allwinner,leds-active-low;
-+ status = "okay";
-+};
-From patchwork Tue Mar 14 14:18:45 2017
+From patchwork Mon May 1 12:45:08 2017
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
-Subject: [v2,09/20] ARM: dts: sun8i: Enable dwmac-sun8i on the Orange PI PC
+Subject: [v5,08/20] arm: sun8i: orangepi-pc: Enable dwmac-sun8i
From: Corentin LABBE <clabbe.montjoie@gmail.com>
-X-Patchwork-Id: 9623555
-Message-Id: <20170314141856.24560-10-clabbe.montjoie@gmail.com>
+X-Patchwork-Id: 9706463
+Message-Id: <20170501124520.3769-9-clabbe.montjoie@gmail.com>
To: robh+dt@kernel.org, mark.rutland@arm.com,
- maxime.ripard@free-electrons.com,
- wens@csie.org, linux@armlinux.org.uk, catalin.marinas@arm.com,
- will.deacon@arm.com, peppe.cavallaro@st.com, alexandre.torgue@st.com,
- davem@davemloft.net
-Cc: devicetree@vger.kernel.org, f.fainelli@gmail.com, netdev@vger.kernel.org,
- linux-kernel@vger.kernel.org, LABBE Corentin <clabbe.montjoie@gmail.com>,
- linux-arm-kernel@lists.infradead.org
-Date: Tue, 14 Mar 2017 15:18:45 +0100
-
-From: LABBE Corentin <clabbe.montjoie@gmail.com>
+ maxime.ripard@free-electrons.com, wens@csie.org,
+ linux@armlinux.org.uk, catalin.marinas@arm.com,
+ will.deacon@arm.com, peppe.cavallaro@st.com, alexandre.torgue@st.com
+Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
+ netdev@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
+ Corentin Labbe <clabbe.montjoie@gmail.com>
+Date: Mon, 1 May 2017 14:45:08 +0200
The dwmac-sun8i hardware is present on the Orange PI PC.
It uses the internal PHY.
@@ -1641,96 +1582,102 @@ Signed-off-by: Corentin Labbe <clabbe.montjoie@gmail.com>
1 file changed, 8 insertions(+)
diff --git a/arch/arm/boot/dts/sun8i-h3-orangepi-pc.dts b/arch/arm/boot/dts/sun8i-h3-orangepi-pc.dts
-index f148111..746c25a 100644
+index f148111..52e6575 100644
--- a/arch/arm/boot/dts/sun8i-h3-orangepi-pc.dts
+++ b/arch/arm/boot/dts/sun8i-h3-orangepi-pc.dts
-@@ -53,6 +53,7 @@
+@@ -52,6 +52,7 @@
+ compatible = "xunlong,orangepi-pc", "allwinner,sun8i-h3";
aliases {
- serial0 = &uart0;
+ ethernet0 = &emac;
+ serial0 = &uart0;
};
- chosen {
-@@ -184,3 +185,10 @@
- /* USB VBUS is always on */
+@@ -109,6 +110,13 @@
status = "okay";
};
-+
+
+&emac {
+ phy-handle = <&int_mii_phy>;
+ phy-mode = "mii";
+ allwinner,leds-active-low;
+ status = "okay";
+};
-From patchwork Tue Mar 14 14:18:46 2017
++
+ &ir {
+ pinctrl-names = "default";
+ pinctrl-0 = <&ir_pins_a>;
+
+From patchwork Mon May 1 12:45:09 2017
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
-Subject: [v2,10/20] ARM: dts: sun8i: Enable dwmac-sun8i on the Orange Pi 2
+Subject: [v5,09/20] arm: sun8i: orangepi-zero: Enable dwmac-sun8i
From: Corentin LABBE <clabbe.montjoie@gmail.com>
-X-Patchwork-Id: 9623557
-Message-Id: <20170314141856.24560-11-clabbe.montjoie@gmail.com>
+X-Patchwork-Id: 9706461
+Message-Id: <20170501124520.3769-10-clabbe.montjoie@gmail.com>
To: robh+dt@kernel.org, mark.rutland@arm.com,
- maxime.ripard@free-electrons.com,
- wens@csie.org, linux@armlinux.org.uk, catalin.marinas@arm.com,
- will.deacon@arm.com, peppe.cavallaro@st.com, alexandre.torgue@st.com,
- davem@davemloft.net
-Cc: devicetree@vger.kernel.org, f.fainelli@gmail.com, netdev@vger.kernel.org,
- linux-kernel@vger.kernel.org, Corentin Labbe <clabbe.montjoie@gmail.com>,
- linux-arm-kernel@lists.infradead.org
-Date: Tue, 14 Mar 2017 15:18:46 +0100
+ maxime.ripard@free-electrons.com, wens@csie.org,
+ linux@armlinux.org.uk, catalin.marinas@arm.com,
+ will.deacon@arm.com, peppe.cavallaro@st.com, alexandre.torgue@st.com
+Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
+ netdev@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
+ Corentin Labbe <clabbe.montjoie@gmail.com>
+Date: Mon, 1 May 2017 14:45:09 +0200
-The dwmac-sun8i hardware is present on the Orange PI 2.
+The dwmac-sun8i hardware is present on the Orange PI Zero.
It uses the internal PHY.
This patch create the needed emac node.
Signed-off-by: Corentin Labbe <clabbe.montjoie@gmail.com>
---
- arch/arm/boot/dts/sun8i-h3-orangepi-2.dts | 8 ++++++++
+ arch/arm/boot/dts/sun8i-h2-plus-orangepi-zero.dts | 8 ++++++++
1 file changed, 8 insertions(+)
-diff --git a/arch/arm/boot/dts/sun8i-h3-orangepi-2.dts b/arch/arm/boot/dts/sun8i-h3-orangepi-2.dts
-index 5b6d145..3f54b12 100644
---- a/arch/arm/boot/dts/sun8i-h3-orangepi-2.dts
-+++ b/arch/arm/boot/dts/sun8i-h3-orangepi-2.dts
-@@ -55,6 +55,7 @@
+diff --git a/arch/arm/boot/dts/sun8i-h2-plus-orangepi-zero.dts b/arch/arm/boot/dts/sun8i-h2-plus-orangepi-zero.dts
+index 9e8b082..dd3525a 100644
+--- a/arch/arm/boot/dts/sun8i-h2-plus-orangepi-zero.dts
++++ b/arch/arm/boot/dts/sun8i-h2-plus-orangepi-zero.dts
+@@ -57,6 +57,7 @@
+ aliases {
serial0 = &uart0;
/* ethernet0 is the H3 emac, defined in sun8i-h3.dtsi */
- ethernet1 = &rtl8189;
+ ethernet0 = &emac;
+ ethernet1 = &xr819;
};
- chosen {
-@@ -203,3 +204,10 @@
- usb1_vbus-supply = <&reg_usb1_vbus>;
+@@ -103,6 +104,13 @@
status = "okay";
};
-+
+
+&emac {
+ phy-handle = <&int_mii_phy>;
+ phy-mode = "mii";
+ allwinner,leds-active-low;
+ status = "okay";
+};
-From patchwork Tue Mar 14 14:18:47 2017
++
+ &mmc0 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&mmc0_pins_a>;
+
+From patchwork Mon May 1 12:45:10 2017
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
-Subject: [v2,11/20] ARM: dts: sun8i: Enable dwmac-sun8i on the Orange PI One
+Subject: [v5,10/20] arm: sun8i: orangepi-one: Enable dwmac-sun8i
From: Corentin LABBE <clabbe.montjoie@gmail.com>
-X-Patchwork-Id: 9623541
-Message-Id: <20170314141856.24560-12-clabbe.montjoie@gmail.com>
+X-Patchwork-Id: 9706471
+Message-Id: <20170501124520.3769-11-clabbe.montjoie@gmail.com>
To: robh+dt@kernel.org, mark.rutland@arm.com,
- maxime.ripard@free-electrons.com,
- wens@csie.org, linux@armlinux.org.uk, catalin.marinas@arm.com,
- will.deacon@arm.com, peppe.cavallaro@st.com, alexandre.torgue@st.com,
- davem@davemloft.net
-Cc: devicetree@vger.kernel.org, f.fainelli@gmail.com, netdev@vger.kernel.org,
- linux-kernel@vger.kernel.org, Corentin Labbe <clabbe.montjoie@gmail.com>,
- linux-arm-kernel@lists.infradead.org
-Date: Tue, 14 Mar 2017 15:18:47 +0100
+ maxime.ripard@free-electrons.com, wens@csie.org,
+ linux@armlinux.org.uk, catalin.marinas@arm.com,
+ will.deacon@arm.com, peppe.cavallaro@st.com, alexandre.torgue@st.com
+Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
+ netdev@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
+ Corentin Labbe <clabbe.montjoie@gmail.com>
+Date: Mon, 1 May 2017 14:45:10 +0200
The dwmac-sun8i hardware is present on the Orange PI One.
It uses the internal PHY.
@@ -1743,18 +1690,18 @@ Signed-off-by: Corentin Labbe <clabbe.montjoie@gmail.com>
1 file changed, 8 insertions(+)
diff --git a/arch/arm/boot/dts/sun8i-h3-orangepi-one.dts b/arch/arm/boot/dts/sun8i-h3-orangepi-one.dts
-index ea8fd13..1f98ddc 100644
+index 5fea430..6880268 100644
--- a/arch/arm/boot/dts/sun8i-h3-orangepi-one.dts
+++ b/arch/arm/boot/dts/sun8i-h3-orangepi-one.dts
-@@ -53,6 +53,7 @@
+@@ -52,6 +52,7 @@
+ compatible = "xunlong,orangepi-one", "allwinner,sun8i-h3";
aliases {
- serial0 = &uart0;
+ ethernet0 = &emac;
+ serial0 = &uart0;
};
- chosen {
-@@ -93,6 +94,13 @@
+@@ -97,6 +98,13 @@
status = "okay";
};
@@ -1768,108 +1715,79 @@ index ea8fd13..1f98ddc 100644
&mmc0 {
pinctrl-names = "default";
pinctrl-0 = <&mmc0_pins_a>, <&mmc0_cd_pin>;
-From patchwork Tue Mar 14 14:18:48 2017
+
+From patchwork Mon May 1 12:45:11 2017
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
-Subject: [v2,12/20] ARM: dts: sun8i: Enable dwmac-sun8i on the Orange Pi plus
+Subject: [v5,11/20] arm: sun8i: orangepi-2: Enable dwmac-sun8i
From: Corentin LABBE <clabbe.montjoie@gmail.com>
-X-Patchwork-Id: 9623569
-Message-Id: <20170314141856.24560-13-clabbe.montjoie@gmail.com>
+X-Patchwork-Id: 9706467
+Message-Id: <20170501124520.3769-12-clabbe.montjoie@gmail.com>
To: robh+dt@kernel.org, mark.rutland@arm.com,
- maxime.ripard@free-electrons.com,
- wens@csie.org, linux@armlinux.org.uk, catalin.marinas@arm.com,
- will.deacon@arm.com, peppe.cavallaro@st.com, alexandre.torgue@st.com,
- davem@davemloft.net
-Cc: devicetree@vger.kernel.org, f.fainelli@gmail.com, netdev@vger.kernel.org,
- linux-kernel@vger.kernel.org, Corentin Labbe <clabbe.montjoie@gmail.com>,
- linux-arm-kernel@lists.infradead.org
-Date: Tue, 14 Mar 2017 15:18:48 +0100
-
-The dwmac-sun8i hardware is present on the Orange PI plus.
-It uses an external PHY rtl8211e via RGMII.
+ maxime.ripard@free-electrons.com, wens@csie.org,
+ linux@armlinux.org.uk, catalin.marinas@arm.com,
+ will.deacon@arm.com, peppe.cavallaro@st.com, alexandre.torgue@st.com
+Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
+ netdev@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
+ Corentin Labbe <clabbe.montjoie@gmail.com>
+Date: Mon, 1 May 2017 14:45:11 +0200
+
+The dwmac-sun8i hardware is present on the Orange PI 2.
+It uses the internal PHY.
-This patch create the needed regulator, emac and phy nodes.
+This patch create the needed emac node.
Signed-off-by: Corentin Labbe <clabbe.montjoie@gmail.com>
---
- arch/arm/boot/dts/sun8i-h3-orangepi-plus.dts | 35 ++++++++++++++++++++++++++++
- 1 file changed, 35 insertions(+)
+ arch/arm/boot/dts/sun8i-h3-orangepi-2.dts | 8 ++++++++
+ 1 file changed, 8 insertions(+)
-diff --git a/arch/arm/boot/dts/sun8i-h3-orangepi-plus.dts b/arch/arm/boot/dts/sun8i-h3-orangepi-plus.dts
-index 8c40ab7..4e075a2 100644
---- a/arch/arm/boot/dts/sun8i-h3-orangepi-plus.dts
-+++ b/arch/arm/boot/dts/sun8i-h3-orangepi-plus.dts
-@@ -58,6 +58,18 @@
- enable-active-high;
- gpio = <&pio 6 11 GPIO_ACTIVE_HIGH>;
+diff --git a/arch/arm/boot/dts/sun8i-h3-orangepi-2.dts b/arch/arm/boot/dts/sun8i-h3-orangepi-2.dts
+index 5b6d145..cedd326 100644
+--- a/arch/arm/boot/dts/sun8i-h3-orangepi-2.dts
++++ b/arch/arm/boot/dts/sun8i-h3-orangepi-2.dts
+@@ -54,6 +54,7 @@
+ aliases {
+ serial0 = &uart0;
+ /* ethernet0 is the H3 emac, defined in sun8i-h3.dtsi */
++ ethernet0 = &emac;
+ ethernet1 = &rtl8189;
};
-+
-+ reg_gmac_3v3: gmac-3v3 {
-+ compatible = "regulator-fixed";
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&gmac_power_pin_orangepi>;
-+ regulator-name = "gmac-3v3";
-+ regulator-min-microvolt = <3300000>;
-+ regulator-max-microvolt = <3300000>;
-+ startup-delay-us = <100000>;
-+ enable-active-high;
-+ gpio = <&pio 3 6 GPIO_ACTIVE_HIGH>;
-+ };
- };
- &ehci3 {
-@@ -86,8 +98,31 @@
- pins = "PG11";
- function = "gpio_out";
- };
-+
-+ gmac_power_pin_orangepi: gmac_power_pin@0 {
-+ pins = "PD6";
-+ function = "gpio_out";
-+ drive-strength = <10>;
-+ };
+@@ -108,6 +109,13 @@
+ status = "okay";
};
- &usbphy {
- usb3_vbus-supply = <&reg_usb3_vbus>;
- };
-+
-+&mdio {
-+ ext_rgmii_phy: ethernet-phy@1 {
-+ reg = <0>;
-+ };
-+};
-+
+&emac {
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&emac_rgmii_pins>;
-+ phy-supply = <&reg_gmac_3v3>;
-+ phy-handle = <&ext_rgmii_phy>;
-+ phy-mode = "rgmii";
-+
++ phy-handle = <&int_mii_phy>;
++ phy-mode = "mii";
+ allwinner,leds-active-low;
+ status = "okay";
+};
-From patchwork Tue Mar 14 14:18:49 2017
++
+ &ir {
+ pinctrl-names = "default";
+ pinctrl-0 = <&ir_pins_a>;
+
+From patchwork Mon May 1 12:45:12 2017
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
-Subject: [v2,
- 13/20] ARM: dts: sun8i: orangepi-pc-plus: Set EMAC activity LEDs to
- active high
+Subject: [v5,
+ 12/20] arm: sun8i: orangepi-pc-plus: Set EMAC activity LEDs to active
+ high
From: Corentin LABBE <clabbe.montjoie@gmail.com>
-X-Patchwork-Id: 9623593
-Message-Id: <20170314141856.24560-14-clabbe.montjoie@gmail.com>
+X-Patchwork-Id: 9706481
+Message-Id: <20170501124520.3769-13-clabbe.montjoie@gmail.com>
To: robh+dt@kernel.org, mark.rutland@arm.com,
- maxime.ripard@free-electrons.com,
- wens@csie.org, linux@armlinux.org.uk, catalin.marinas@arm.com,
- will.deacon@arm.com, peppe.cavallaro@st.com, alexandre.torgue@st.com,
- davem@davemloft.net
-Cc: devicetree@vger.kernel.org, f.fainelli@gmail.com, netdev@vger.kernel.org,
- linux-kernel@vger.kernel.org, Corentin Labbe <clabbe.montjoie@gmail.com>,
- linux-arm-kernel@lists.infradead.org
-Date: Tue, 14 Mar 2017 15:18:49 +0100
+ maxime.ripard@free-electrons.com, wens@csie.org,
+ linux@armlinux.org.uk, catalin.marinas@arm.com,
+ will.deacon@arm.com, peppe.cavallaro@st.com, alexandre.torgue@st.com
+Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
+ netdev@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
+ Corentin Labbe <clabbe.montjoie@gmail.com>
+Date: Mon, 1 May 2017 14:45:12 +0200
On the Orange Pi PC Plus, the polarity of the LEDs on the RJ45 Ethernet
port were changed from active low to active high.
@@ -1881,36 +1799,39 @@ Signed-off-by: Corentin Labbe <clabbe.montjoie@gmail.com>
1 file changed, 5 insertions(+)
diff --git a/arch/arm/boot/dts/sun8i-h3-orangepi-pc-plus.dts b/arch/arm/boot/dts/sun8i-h3-orangepi-pc-plus.dts
-index 8b93f5c..0380769 100644
+index 8b93f5c..a10281b 100644
--- a/arch/arm/boot/dts/sun8i-h3-orangepi-pc-plus.dts
+++ b/arch/arm/boot/dts/sun8i-h3-orangepi-pc-plus.dts
-@@ -86,3 +86,8 @@
- /* eMMC is missing pull-ups */
- bias-pull-up;
+@@ -53,6 +53,11 @@
+ };
};
-+
+
+&emac {
+ /* LEDs changed to active high on the plus */
+ /delete-property/ allwinner,leds-active-low;
+};
-From patchwork Tue Mar 14 14:18:50 2017
++
+ &mmc1 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&mmc1_pins_a>;
+
+From patchwork Mon May 1 12:45:13 2017
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
-Subject: [v2, 14/20] ARM64: dts: sun50i-a64: Add dt node for the syscon control
- module
+Subject: [v5, 13/20] arm64: allwinner: sun50i-a64: Add dt node for the syscon
+ control module
From: Corentin LABBE <clabbe.montjoie@gmail.com>
-X-Patchwork-Id: 9623591
-Message-Id: <20170314141856.24560-15-clabbe.montjoie@gmail.com>
+X-Patchwork-Id: 9706477
+Message-Id: <20170501124520.3769-14-clabbe.montjoie@gmail.com>
To: robh+dt@kernel.org, mark.rutland@arm.com,
- maxime.ripard@free-electrons.com,
- wens@csie.org, linux@armlinux.org.uk, catalin.marinas@arm.com,
- will.deacon@arm.com, peppe.cavallaro@st.com, alexandre.torgue@st.com,
- davem@davemloft.net
-Cc: devicetree@vger.kernel.org, f.fainelli@gmail.com, netdev@vger.kernel.org,
- linux-kernel@vger.kernel.org, Corentin Labbe <clabbe.montjoie@gmail.com>,
- linux-arm-kernel@lists.infradead.org
-Date: Tue, 14 Mar 2017 15:18:50 +0100
+ maxime.ripard@free-electrons.com, wens@csie.org,
+ linux@armlinux.org.uk, catalin.marinas@arm.com,
+ will.deacon@arm.com, peppe.cavallaro@st.com, alexandre.torgue@st.com
+Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
+ netdev@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
+ Corentin Labbe <clabbe.montjoie@gmail.com>
+Date: Mon, 1 May 2017 14:45:13 +0200
This patch add the dt node for the syscon register present on the
Allwinner A64.
@@ -1924,39 +1845,40 @@ Signed-off-by: Corentin Labbe <clabbe.montjoie@gmail.com>
1 file changed, 6 insertions(+)
diff --git a/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi b/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi
-index 1c64ea2..3b09af2 100644
+index c7f669f..d7341ba 100644
--- a/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi
+++ b/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi
-@@ -121,6 +121,12 @@
+@@ -129,6 +129,12 @@
#size-cells = <1>;
ranges;
-+ syscon: syscon@01c00000 {
-+ compatible = "syscon",
-+ "allwinner,sun8i-h3-system-controller";
++ syscon: syscon@1c00000 {
++ compatible = "allwinner,sun50i-a64-system-controller",
++ "syscon";
+ reg = <0x01c00000 0x1000>;
+ };
+
mmc0: mmc@1c0f000 {
compatible = "allwinner,sun50i-a64-mmc";
reg = <0x01c0f000 0x1000>;
-From patchwork Tue Mar 14 14:18:51 2017
+
+From patchwork Mon May 1 12:45:14 2017
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
-Subject: [v2,15/20] ARM64: dts: sun50i-a64: add dwmac-sun8i Ethernet driver
+Subject: [v5,
+ 14/20] arm64: allwinner: sun50i-a64: add dwmac-sun8i Ethernet driver
From: Corentin LABBE <clabbe.montjoie@gmail.com>
-X-Patchwork-Id: 9623621
-Message-Id: <20170314141856.24560-16-clabbe.montjoie@gmail.com>
+X-Patchwork-Id: 9706485
+Message-Id: <20170501124520.3769-15-clabbe.montjoie@gmail.com>
To: robh+dt@kernel.org, mark.rutland@arm.com,
- maxime.ripard@free-electrons.com,
- wens@csie.org, linux@armlinux.org.uk, catalin.marinas@arm.com,
- will.deacon@arm.com, peppe.cavallaro@st.com, alexandre.torgue@st.com,
- davem@davemloft.net
-Cc: devicetree@vger.kernel.org, f.fainelli@gmail.com, netdev@vger.kernel.org,
- linux-kernel@vger.kernel.org, Corentin Labbe <clabbe.montjoie@gmail.com>,
- linux-arm-kernel@lists.infradead.org
-Date: Tue, 14 Mar 2017 15:18:51 +0100
+ maxime.ripard@free-electrons.com, wens@csie.org,
+ linux@armlinux.org.uk, catalin.marinas@arm.com,
+ will.deacon@arm.com, peppe.cavallaro@st.com, alexandre.torgue@st.com
+Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
+ netdev@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
+ Corentin Labbe <clabbe.montjoie@gmail.com>
+Date: Mon, 1 May 2017 14:45:14 +0200
The dwmac-sun8i is an Ethernet MAC that supports 10/100/1000 Mbit
connections. It is very similar to the device found in the Allwinner
@@ -1967,30 +1889,28 @@ it disabled at this level.
Signed-off-by: Corentin Labbe <clabbe.montjoie@gmail.com>
---
- arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi | 37 +++++++++++++++++++++++++++
- 1 file changed, 37 insertions(+)
+ arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi | 35 +++++++++++++++++++++++++++
+ 1 file changed, 35 insertions(+)
diff --git a/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi b/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi
-index 3b09af2..57d69e5 100644
+index d7341ba..18b3642 100644
--- a/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi
+++ b/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi
-@@ -277,6 +277,23 @@
+@@ -287,6 +287,21 @@
bias-pull-up;
};
+ rmii_pins: rmii_pins {
-+ pins = "PD10", "PD11", "PD13", "PD14",
-+ "PD17", "PD18", "PD19", "PD20",
-+ "PD22", "PD23";
++ pins = "PD10", "PD11", "PD13", "PD14", "PD17",
++ "PD18", "PD19", "PD20", "PD22", "PD23";
+ function = "emac";
+ drive-strength = <40>;
+ };
+
+ rgmii_pins: rgmii_pins {
-+ pins = "PD8", "PD9", "PD10", "PD11",
-+ "PD12", "PD13", "PD15",
-+ "PD16", "PD17", "PD18", "PD19",
-+ "PD20", "PD21", "PD22", "PD23";
++ pins = "PD8", "PD9", "PD10", "PD11", "PD12",
++ "PD13", "PD15", "PD16", "PD17", "PD18",
++ "PD19", "PD20", "PD21", "PD22", "PD23";
+ function = "emac";
+ drive-strength = <40>;
+ };
@@ -1998,7 +1918,7 @@ index 3b09af2..57d69e5 100644
uart0_pins_a: uart0@0 {
pins = "PB8", "PB9";
function = "uart0";
-@@ -381,6 +398,26 @@
+@@ -391,6 +406,26 @@
#size-cells = <0>;
};
@@ -2025,47 +1945,40 @@ index 3b09af2..57d69e5 100644
gic: interrupt-controller@1c81000 {
compatible = "arm,gic-400";
reg = <0x01c81000 0x1000>,
-From patchwork Tue Mar 14 14:18:52 2017
+
+From patchwork Mon May 1 12:45:15 2017
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
-Subject: [v2,16/20] ARM: dts: sun50i-a64: enable dwmac-sun8i on pine64
+Subject: [v5,15/20] arm64: allwinner: pine64: Enable dwmac-sun8i
From: Corentin LABBE <clabbe.montjoie@gmail.com>
-X-Patchwork-Id: 9623607
-Message-Id: <20170314141856.24560-17-clabbe.montjoie@gmail.com>
+X-Patchwork-Id: 9706489
+Message-Id: <20170501124520.3769-16-clabbe.montjoie@gmail.com>
To: robh+dt@kernel.org, mark.rutland@arm.com,
- maxime.ripard@free-electrons.com,
- wens@csie.org, linux@armlinux.org.uk, catalin.marinas@arm.com,
- will.deacon@arm.com, peppe.cavallaro@st.com, alexandre.torgue@st.com,
- davem@davemloft.net
-Cc: devicetree@vger.kernel.org, f.fainelli@gmail.com, netdev@vger.kernel.org,
- linux-kernel@vger.kernel.org, Corentin Labbe <clabbe.montjoie@gmail.com>,
- linux-arm-kernel@lists.infradead.org
-Date: Tue, 14 Mar 2017 15:18:52 +0100
+ maxime.ripard@free-electrons.com, wens@csie.org,
+ linux@armlinux.org.uk, catalin.marinas@arm.com,
+ will.deacon@arm.com, peppe.cavallaro@st.com, alexandre.torgue@st.com
+Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
+ netdev@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
+ Corentin Labbe <clabbe.montjoie@gmail.com>
+Date: Mon, 1 May 2017 14:45:15 +0200
The dwmac-sun8i hardware is present on the pine64
It uses an external PHY via RMII.
Signed-off-by: Corentin Labbe <clabbe.montjoie@gmail.com>
---
- arch/arm64/boot/dts/allwinner/sun50i-a64-pine64.dts | 15 +++++++++++++++
- 1 file changed, 15 insertions(+)
+ arch/arm64/boot/dts/allwinner/sun50i-a64-pine64.dts | 16 ++++++++++++++++
+ 1 file changed, 16 insertions(+)
diff --git a/arch/arm64/boot/dts/allwinner/sun50i-a64-pine64.dts b/arch/arm64/boot/dts/allwinner/sun50i-a64-pine64.dts
-index c680ed3..b53994d 100644
+index c680ed3..3b491c0 100644
--- a/arch/arm64/boot/dts/allwinner/sun50i-a64-pine64.dts
+++ b/arch/arm64/boot/dts/allwinner/sun50i-a64-pine64.dts
-@@ -109,3 +109,18 @@
- &usbphy {
+@@ -70,6 +70,15 @@
status = "okay";
};
-+
-+&mdio {
-+ ext_rmii_phy1: ethernet-phy@1 {
-+ reg = <1>;
-+ };
-+};
-+
+
+&emac {
+ pinctrl-names = "default";
+ pinctrl-0 = <&rmii_pins>;
@@ -2074,37 +1987,55 @@ index c680ed3..b53994d 100644
+ status = "okay";
+
+};
-From patchwork Tue Mar 14 14:18:53 2017
++
+ &i2c1 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&i2c1_pins>;
+@@ -80,6 +89,13 @@
+ bias-pull-up;
+ };
+
++&mdio {
++ ext_rmii_phy1: ethernet-phy@1 {
++ compatible = "ethernet-phy-ieee802.3-c22";
++ reg = <1>;
++ };
++};
++
+ &mmc0 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&mmc0_pins>;
+
+From patchwork Mon May 1 12:45:16 2017
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
-Subject: [v2,17/20] ARM: dts: sun50i-a64: enable dwmac-sun8i on pine64 plus
+Subject: [v5,16/20] arm64: allwinner: pine64-plus: Enable dwmac-sun8i
From: Corentin LABBE <clabbe.montjoie@gmail.com>
-X-Patchwork-Id: 9623597
-Message-Id: <20170314141856.24560-18-clabbe.montjoie@gmail.com>
+X-Patchwork-Id: 9706511
+Message-Id: <20170501124520.3769-17-clabbe.montjoie@gmail.com>
To: robh+dt@kernel.org, mark.rutland@arm.com,
- maxime.ripard@free-electrons.com,
- wens@csie.org, linux@armlinux.org.uk, catalin.marinas@arm.com,
- will.deacon@arm.com, peppe.cavallaro@st.com, alexandre.torgue@st.com,
- davem@davemloft.net
-Cc: devicetree@vger.kernel.org, f.fainelli@gmail.com, netdev@vger.kernel.org,
- linux-kernel@vger.kernel.org, Corentin Labbe <clabbe.montjoie@gmail.com>,
- linux-arm-kernel@lists.infradead.org
-Date: Tue, 14 Mar 2017 15:18:53 +0100
+ maxime.ripard@free-electrons.com, wens@csie.org,
+ linux@armlinux.org.uk, catalin.marinas@arm.com,
+ will.deacon@arm.com, peppe.cavallaro@st.com, alexandre.torgue@st.com
+Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
+ netdev@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
+ Corentin Labbe <clabbe.montjoie@gmail.com>
+Date: Mon, 1 May 2017 14:45:16 +0200
The dwmac-sun8i hardware is present on the pine64 plus.
It uses an external PHY rtl8211e via RGMII.
Signed-off-by: Corentin Labbe <clabbe.montjoie@gmail.com>
---
- arch/arm64/boot/dts/allwinner/sun50i-a64-pine64-plus.dts | 16 +++++++++++++++-
- 1 file changed, 15 insertions(+), 1 deletion(-)
+ .../arm64/boot/dts/allwinner/sun50i-a64-pine64-plus.dts | 17 ++++++++++++++++-
+ 1 file changed, 16 insertions(+), 1 deletion(-)
diff --git a/arch/arm64/boot/dts/allwinner/sun50i-a64-pine64-plus.dts b/arch/arm64/boot/dts/allwinner/sun50i-a64-pine64-plus.dts
-index 790d14d..8e06aed 100644
+index 790d14d..24f1aac 100644
--- a/arch/arm64/boot/dts/allwinner/sun50i-a64-pine64-plus.dts
+++ b/arch/arm64/boot/dts/allwinner/sun50i-a64-pine64-plus.dts
-@@ -46,5 +46,19 @@
+@@ -46,5 +46,20 @@
model = "Pine64+";
compatible = "pine64,pine64-plus", "allwinner,sun50i-a64";
@@ -2112,60 +2043,54 @@ index 790d14d..8e06aed 100644
+ /* TODO: Camera, touchscreen, etc. */
+};
+
-+&mdio {
-+ ext_rgmii_phy: ethernet-phy@1 {
-+ reg = <1>;
-+ };
-+};
-+
+&emac {
+ pinctrl-names = "default";
+ pinctrl-0 = <&rgmii_pins>;
+ phy-mode = "rgmii";
+ phy-handle = <&ext_rgmii_phy>;
+ status = "okay";
++};
++
++&mdio {
++ ext_rgmii_phy: ethernet-phy@1 {
++ compatible = "ethernet-phy-ieee802.3-c22";
++ reg = <1>;
++ };
};
-From patchwork Tue Mar 14 14:18:54 2017
+
+From patchwork Mon May 1 12:45:17 2017
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
-Subject: [v2,
- 18/20] ARM: dts: sun50i-a64: enable dwmac-sun8i on the BananaPi M64
+Subject: [v5,17/20] arm64: allwinner: bananapi-m64: Enable dwmac-sun8i
From: Corentin LABBE <clabbe.montjoie@gmail.com>
-X-Patchwork-Id: 9623595
-Message-Id: <20170314141856.24560-19-clabbe.montjoie@gmail.com>
+X-Patchwork-Id: 9706509
+Message-Id: <20170501124520.3769-18-clabbe.montjoie@gmail.com>
To: robh+dt@kernel.org, mark.rutland@arm.com,
- maxime.ripard@free-electrons.com,
- wens@csie.org, linux@armlinux.org.uk, catalin.marinas@arm.com,
- will.deacon@arm.com, peppe.cavallaro@st.com, alexandre.torgue@st.com,
- davem@davemloft.net
-Cc: devicetree@vger.kernel.org, f.fainelli@gmail.com, netdev@vger.kernel.org,
- linux-kernel@vger.kernel.org, Corentin Labbe <clabbe.montjoie@gmail.com>,
- linux-arm-kernel@lists.infradead.org
-Date: Tue, 14 Mar 2017 15:18:54 +0100
+ maxime.ripard@free-electrons.com, wens@csie.org,
+ linux@armlinux.org.uk, catalin.marinas@arm.com,
+ will.deacon@arm.com, peppe.cavallaro@st.com, alexandre.torgue@st.com
+Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
+ netdev@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
+ Corentin Labbe <clabbe.montjoie@gmail.com>
+Date: Mon, 1 May 2017 14:45:17 +0200
The dwmac-sun8i hardware is present on the BananaPi M64.
It uses an external PHY rtl8211e via RGMII.
Signed-off-by: Corentin Labbe <clabbe.montjoie@gmail.com>
---
- arch/arm64/boot/dts/allwinner/sun50i-a64-bananapi-m64.dts | 14 ++++++++++++++
- 1 file changed, 14 insertions(+)
+ arch/arm64/boot/dts/allwinner/sun50i-a64-bananapi-m64.dts | 15 +++++++++++++++
+ 1 file changed, 15 insertions(+)
diff --git a/arch/arm64/boot/dts/allwinner/sun50i-a64-bananapi-m64.dts b/arch/arm64/boot/dts/allwinner/sun50i-a64-bananapi-m64.dts
-index 6872135..347c262 100644
+index 6872135..0d1f026 100644
--- a/arch/arm64/boot/dts/allwinner/sun50i-a64-bananapi-m64.dts
+++ b/arch/arm64/boot/dts/allwinner/sun50i-a64-bananapi-m64.dts
-@@ -77,6 +77,20 @@
- bias-pull-up;
+@@ -67,6 +67,14 @@
+ };
};
-+&mdio {
-+ ext_rgmii_phy: ethernet-phy@1 {
-+ reg = <1>;
-+ };
-+};
-+
+&emac {
+ pinctrl-names = "default";
+ pinctrl-0 = <&rgmii_pins>;
@@ -2174,6 +2099,132 @@ index 6872135..347c262 100644
+ status = "okay";
+};
+
+ &i2c1 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&i2c1_pins>;
+@@ -77,6 +85,13 @@
+ bias-pull-up;
+ };
+
++&mdio {
++ ext_rgmii_phy: ethernet-phy@1 {
++ compatible = "ethernet-phy-ieee802.3-c22";
++ reg = <1>;
++ };
++};
++
&mmc0 {
pinctrl-names = "default";
pinctrl-0 = <&mmc0_pins>;
+
+From patchwork Mon May 1 12:45:18 2017
+Content-Type: text/plain; charset="utf-8"
+MIME-Version: 1.0
+Content-Transfer-Encoding: 7bit
+Subject: [v5,18/20] arm: sunxi: Enable dwmac-sun8i driver on sunxi_defconfig
+From: Corentin LABBE <clabbe.montjoie@gmail.com>
+X-Patchwork-Id: 9706507
+Message-Id: <20170501124520.3769-19-clabbe.montjoie@gmail.com>
+To: robh+dt@kernel.org, mark.rutland@arm.com,
+ maxime.ripard@free-electrons.com, wens@csie.org,
+ linux@armlinux.org.uk, catalin.marinas@arm.com,
+ will.deacon@arm.com, peppe.cavallaro@st.com, alexandre.torgue@st.com
+Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
+ netdev@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
+ Corentin Labbe <clabbe.montjoie@gmail.com>
+Date: Mon, 1 May 2017 14:45:18 +0200
+
+Enable the dwmac-sun8i driver in the sunxi default configuration
+
+Signed-off-by: Corentin Labbe <clabbe.montjoie@gmail.com>
+---
+ arch/arm/configs/sunxi_defconfig | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/arch/arm/configs/sunxi_defconfig b/arch/arm/configs/sunxi_defconfig
+index 5cd5dd70..504e022 100644
+--- a/arch/arm/configs/sunxi_defconfig
++++ b/arch/arm/configs/sunxi_defconfig
+@@ -40,6 +40,7 @@ CONFIG_ATA=y
+ CONFIG_AHCI_SUNXI=y
+ CONFIG_NETDEVICES=y
+ CONFIG_SUN4I_EMAC=y
++CONFIG_DWMAC_SUN8I=y
+ # CONFIG_NET_VENDOR_ARC is not set
+ # CONFIG_NET_CADENCE is not set
+ # CONFIG_NET_VENDOR_BROADCOM is not set
+
+From patchwork Mon May 1 12:45:19 2017
+Content-Type: text/plain; charset="utf-8"
+MIME-Version: 1.0
+Content-Transfer-Encoding: 7bit
+Subject: [v5,
+ 19/20] arm: multi_v7: Enable dwmac-sun8i driver on multi_v7_defconfig
+From: Corentin LABBE <clabbe.montjoie@gmail.com>
+X-Patchwork-Id: 9706513
+Message-Id: <20170501124520.3769-20-clabbe.montjoie@gmail.com>
+To: robh+dt@kernel.org, mark.rutland@arm.com,
+ maxime.ripard@free-electrons.com, wens@csie.org,
+ linux@armlinux.org.uk, catalin.marinas@arm.com,
+ will.deacon@arm.com, peppe.cavallaro@st.com, alexandre.torgue@st.com
+Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
+ netdev@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
+ Corentin Labbe <clabbe.montjoie@gmail.com>
+Date: Mon, 1 May 2017 14:45:19 +0200
+
+Enable the dwmac-sun8i driver in the multi_v7 default configuration
+
+Signed-off-by: Corentin Labbe <clabbe.montjoie@gmail.com>
+---
+ arch/arm/configs/multi_v7_defconfig | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/arch/arm/configs/multi_v7_defconfig b/arch/arm/configs/multi_v7_defconfig
+index 2685e03..6da6af8 100644
+--- a/arch/arm/configs/multi_v7_defconfig
++++ b/arch/arm/configs/multi_v7_defconfig
+@@ -257,6 +257,7 @@ CONFIG_SMSC911X=y
+ CONFIG_STMMAC_ETH=y
+ CONFIG_STMMAC_PLATFORM=y
+ CONFIG_DWMAC_DWC_QOS_ETH=y
++CONFIG_DWMAC_SUN8I=y
+ CONFIG_TI_CPSW=y
+ CONFIG_XILINX_EMACLITE=y
+ CONFIG_AT803X_PHY=y
+
+From patchwork Mon May 1 12:45:20 2017
+Content-Type: text/plain; charset="utf-8"
+MIME-Version: 1.0
+Content-Transfer-Encoding: 7bit
+Subject: [v5,20/20] arm64: defconfig: Enable dwmac-sun8i driver on defconfig
+From: Corentin LABBE <clabbe.montjoie@gmail.com>
+X-Patchwork-Id: 9706505
+Message-Id: <20170501124520.3769-21-clabbe.montjoie@gmail.com>
+To: robh+dt@kernel.org, mark.rutland@arm.com,
+ maxime.ripard@free-electrons.com, wens@csie.org,
+ linux@armlinux.org.uk, catalin.marinas@arm.com,
+ will.deacon@arm.com, peppe.cavallaro@st.com, alexandre.torgue@st.com
+Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
+ netdev@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
+ Corentin Labbe <clabbe.montjoie@gmail.com>
+Date: Mon, 1 May 2017 14:45:20 +0200
+
+Enable the dwmac-sun8i ethernet driver as a module in the ARM64 defconfig.
+
+Signed-off-by: Corentin Labbe <clabbe.montjoie@gmail.com>
+---
+ arch/arm64/configs/defconfig | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/arch/arm64/configs/defconfig b/arch/arm64/configs/defconfig
+index ce07285..4575fbb 100644
+--- a/arch/arm64/configs/defconfig
++++ b/arch/arm64/configs/defconfig
+@@ -193,6 +193,7 @@ CONFIG_RAVB=y
+ CONFIG_SMC91X=y
+ CONFIG_SMSC911X=y
+ CONFIG_STMMAC_ETH=m
++CONFIG_DWMAC_SUN8I=m
+ CONFIG_REALTEK_PHY=m
+ CONFIG_MESON_GXL_PHY=m
+ CONFIG_MICREL_PHY=y
diff --git a/baseconfig/CONFIG_CAN_HI311X b/baseconfig/CONFIG_CAN_HI311X
new file mode 100644
index 000000000..a775c67f7
--- /dev/null
+++ b/baseconfig/CONFIG_CAN_HI311X
@@ -0,0 +1 @@
+CONFIG_CAN_HI311X=m
diff --git a/baseconfig/CONFIG_CAN_MCBA_USB b/baseconfig/CONFIG_CAN_MCBA_USB
new file mode 100644
index 000000000..9a21b3bcb
--- /dev/null
+++ b/baseconfig/CONFIG_CAN_MCBA_USB
@@ -0,0 +1 @@
+CONFIG_CAN_MCBA_USB=m
diff --git a/baseconfig/CONFIG_CAN_PEAK_PCIEFD b/baseconfig/CONFIG_CAN_PEAK_PCIEFD
new file mode 100644
index 000000000..3a388b984
--- /dev/null
+++ b/baseconfig/CONFIG_CAN_PEAK_PCIEFD
@@ -0,0 +1 @@
+CONFIG_CAN_PEAK_PCIEFD=m
diff --git a/baseconfig/CONFIG_CAN_VXCAN b/baseconfig/CONFIG_CAN_VXCAN
new file mode 100644
index 000000000..a6e002cff
--- /dev/null
+++ b/baseconfig/CONFIG_CAN_VXCAN
@@ -0,0 +1 @@
+CONFIG_CAN_VXCAN=m
diff --git a/baseconfig/CONFIG_CRYPTO_DEV_CAVIUM_ZIP b/baseconfig/CONFIG_CRYPTO_DEV_CAVIUM_ZIP
new file mode 100644
index 000000000..e6d3a0d6e
--- /dev/null
+++ b/baseconfig/CONFIG_CRYPTO_DEV_CAVIUM_ZIP
@@ -0,0 +1 @@
+# CONFIG_CRYPTO_DEV_CAVIUM_ZIP is not set
diff --git a/baseconfig/CONFIG_HID_ACCUTOUCH b/baseconfig/CONFIG_HID_ACCUTOUCH
new file mode 100644
index 000000000..7b8010de1
--- /dev/null
+++ b/baseconfig/CONFIG_HID_ACCUTOUCH
@@ -0,0 +1 @@
+CONFIG_HID_ACCUTOUCH=m
diff --git a/baseconfig/CONFIG_HID_NTI b/baseconfig/CONFIG_HID_NTI
new file mode 100644
index 000000000..c239c7052
--- /dev/null
+++ b/baseconfig/CONFIG_HID_NTI
@@ -0,0 +1 @@
+CONFIG_HID_NTI=m
diff --git a/baseconfig/CONFIG_IEEE802154_CA8210 b/baseconfig/CONFIG_IEEE802154_CA8210
new file mode 100644
index 000000000..d4a2158a3
--- /dev/null
+++ b/baseconfig/CONFIG_IEEE802154_CA8210
@@ -0,0 +1 @@
+CONFIG_IEEE802154_CA8210=m
diff --git a/baseconfig/CONFIG_IEEE802154_CA8210_DEBUGFS b/baseconfig/CONFIG_IEEE802154_CA8210_DEBUGFS
new file mode 100644
index 000000000..e919384b7
--- /dev/null
+++ b/baseconfig/CONFIG_IEEE802154_CA8210_DEBUGFS
@@ -0,0 +1 @@
+# CONFIG_IEEE802154_CA8210_DEBUGFS is not set
diff --git a/baseconfig/CONFIG_MLX5_CORE_IPOIB b/baseconfig/CONFIG_MLX5_CORE_IPOIB
new file mode 100644
index 000000000..d78d82d65
--- /dev/null
+++ b/baseconfig/CONFIG_MLX5_CORE_IPOIB
@@ -0,0 +1 @@
+CONFIG_MLX5_CORE_IPOIB=y
diff --git a/baseconfig/CONFIG_MMC_CAVIUM_THUNDERX b/baseconfig/CONFIG_MMC_CAVIUM_THUNDERX
new file mode 100644
index 000000000..1c1de4f0d
--- /dev/null
+++ b/baseconfig/CONFIG_MMC_CAVIUM_THUNDERX
@@ -0,0 +1 @@
+# CONFIG_MMC_CAVIUM_THUNDERX is not set
diff --git a/baseconfig/CONFIG_MMC_SDHCI_XENON b/baseconfig/CONFIG_MMC_SDHCI_XENON
new file mode 100644
index 000000000..7ced7b045
--- /dev/null
+++ b/baseconfig/CONFIG_MMC_SDHCI_XENON
@@ -0,0 +1 @@
+CONFIG_MMC_SDHCI_XENON=m
diff --git a/baseconfig/CONFIG_NET_DSA_LOOP b/baseconfig/CONFIG_NET_DSA_LOOP
new file mode 100644
index 000000000..08b25de7c
--- /dev/null
+++ b/baseconfig/CONFIG_NET_DSA_LOOP
@@ -0,0 +1 @@
+CONFIG_NET_DSA_LOOP=m
diff --git a/baseconfig/CONFIG_NET_DSA_MT7530 b/baseconfig/CONFIG_NET_DSA_MT7530
new file mode 100644
index 000000000..722095c89
--- /dev/null
+++ b/baseconfig/CONFIG_NET_DSA_MT7530
@@ -0,0 +1 @@
+CONFIG_NET_DSA_MT7530=m
diff --git a/baseconfig/CONFIG_NET_DSA_SMSC_LAN9303_I2C b/baseconfig/CONFIG_NET_DSA_SMSC_LAN9303_I2C
new file mode 100644
index 000000000..7c738fff2
--- /dev/null
+++ b/baseconfig/CONFIG_NET_DSA_SMSC_LAN9303_I2C
@@ -0,0 +1 @@
+CONFIG_NET_DSA_SMSC_LAN9303_I2C=m
diff --git a/baseconfig/CONFIG_NET_DSA_SMSC_LAN9303_MDIO b/baseconfig/CONFIG_NET_DSA_SMSC_LAN9303_MDIO
new file mode 100644
index 000000000..d7f1987e2
--- /dev/null
+++ b/baseconfig/CONFIG_NET_DSA_SMSC_LAN9303_MDIO
@@ -0,0 +1 @@
+CONFIG_NET_DSA_SMSC_LAN9303_MDIO=m
diff --git a/baseconfig/CONFIG_NET_SCH_DEFAULT b/baseconfig/CONFIG_NET_SCH_DEFAULT
new file mode 100644
index 000000000..a4c53d281
--- /dev/null
+++ b/baseconfig/CONFIG_NET_SCH_DEFAULT
@@ -0,0 +1 @@
+# CONFIG_NET_SCH_DEFAULT is not set
diff --git a/baseconfig/CONFIG_NET_XGENE_V2 b/baseconfig/CONFIG_NET_XGENE_V2
new file mode 100644
index 000000000..e7ebb61ad
--- /dev/null
+++ b/baseconfig/CONFIG_NET_XGENE_V2
@@ -0,0 +1 @@
+# CONFIG_NET_XGENE_V2 is not set
diff --git a/baseconfig/CONFIG_RPMSG_CHAR b/baseconfig/CONFIG_RPMSG_CHAR
new file mode 100644
index 000000000..3aa998906
--- /dev/null
+++ b/baseconfig/CONFIG_RPMSG_CHAR
@@ -0,0 +1 @@
+# CONFIG_RPMSG_CHAR is not set
diff --git a/baseconfig/CONFIG_RPMSG_QCOM_SMD b/baseconfig/CONFIG_RPMSG_QCOM_SMD
new file mode 100644
index 000000000..b4cec4c9c
--- /dev/null
+++ b/baseconfig/CONFIG_RPMSG_QCOM_SMD
@@ -0,0 +1 @@
+# CONFIG_RPMSG_QCOM_SMD is not set
diff --git a/baseconfig/CONFIG_TIGON3_HWMON b/baseconfig/CONFIG_TIGON3_HWMON
new file mode 100644
index 000000000..31215b555
--- /dev/null
+++ b/baseconfig/CONFIG_TIGON3_HWMON
@@ -0,0 +1 @@
+CONFIG_TIGON3_HWMON=y
diff --git a/baseconfig/CONFIG_VSOCKMON b/baseconfig/CONFIG_VSOCKMON
new file mode 100644
index 000000000..82594c488
--- /dev/null
+++ b/baseconfig/CONFIG_VSOCKMON
@@ -0,0 +1 @@
+CONFIG_VSOCKMON=m
diff --git a/baseconfig/arm/CONFIG_RPMSG_QCOM_SMD b/baseconfig/arm/CONFIG_RPMSG_QCOM_SMD
new file mode 100644
index 000000000..f65af3d10
--- /dev/null
+++ b/baseconfig/arm/CONFIG_RPMSG_QCOM_SMD
@@ -0,0 +1 @@
+CONFIG_RPMSG_QCOM_SMD=m
diff --git a/baseconfig/arm/arm64/CONFIG_CRYPTO_DEV_CAVIUM_ZIP b/baseconfig/arm/arm64/CONFIG_CRYPTO_DEV_CAVIUM_ZIP
new file mode 100644
index 000000000..d5226e157
--- /dev/null
+++ b/baseconfig/arm/arm64/CONFIG_CRYPTO_DEV_CAVIUM_ZIP
@@ -0,0 +1 @@
+CONFIG_CRYPTO_DEV_CAVIUM_ZIP=m
diff --git a/baseconfig/arm/arm64/CONFIG_MMC_CAVIUM_THUNDERX b/baseconfig/arm/arm64/CONFIG_MMC_CAVIUM_THUNDERX
new file mode 100644
index 000000000..8c4640a79
--- /dev/null
+++ b/baseconfig/arm/arm64/CONFIG_MMC_CAVIUM_THUNDERX
@@ -0,0 +1 @@
+CONFIG_MMC_CAVIUM_THUNDERX=m
diff --git a/baseconfig/arm/arm64/CONFIG_NET_XGENE_V2 b/baseconfig/arm/arm64/CONFIG_NET_XGENE_V2
new file mode 100644
index 000000000..7d5cbcdbf
--- /dev/null
+++ b/baseconfig/arm/arm64/CONFIG_NET_XGENE_V2
@@ -0,0 +1 @@
+CONFIG_NET_XGENE_V2=m
diff --git a/baseconfig/arm/armv7/CONFIG_CRYPTO_DEV_EXYNOS_RNG b/baseconfig/arm/armv7/CONFIG_CRYPTO_DEV_EXYNOS_RNG
new file mode 100644
index 000000000..f60ff08ee
--- /dev/null
+++ b/baseconfig/arm/armv7/CONFIG_CRYPTO_DEV_EXYNOS_RNG
@@ -0,0 +1 @@
+CONFIG_CRYPTO_DEV_EXYNOS_RNG=m
diff --git a/baseconfig/powerpc/CONFIG_CRYPTO_CRCT10DIF_VPMSUM b/baseconfig/powerpc/CONFIG_CRYPTO_CRCT10DIF_VPMSUM
new file mode 100644
index 000000000..eb0464d08
--- /dev/null
+++ b/baseconfig/powerpc/CONFIG_CRYPTO_CRCT10DIF_VPMSUM
@@ -0,0 +1 @@
+CONFIG_CRYPTO_CRCT10DIF_VPMSUM=m
diff --git a/baseconfig/powerpc/CONFIG_CRYPTO_VPMSUM_TESTER b/baseconfig/powerpc/CONFIG_CRYPTO_VPMSUM_TESTER
new file mode 100644
index 000000000..a3acefe62
--- /dev/null
+++ b/baseconfig/powerpc/CONFIG_CRYPTO_VPMSUM_TESTER
@@ -0,0 +1 @@
+# CONFIG_CRYPTO_VPMSUM_TESTER is not set
diff --git a/baseconfig/s390x/CONFIG_ARCH_RANDOM b/baseconfig/s390x/CONFIG_ARCH_RANDOM
new file mode 100644
index 000000000..51658fe1c
--- /dev/null
+++ b/baseconfig/s390x/CONFIG_ARCH_RANDOM
@@ -0,0 +1 @@
+CONFIG_ARCH_RANDOM=y
diff --git a/baseconfig/s390x/CONFIG_HW_RANDOM_S390 b/baseconfig/s390x/CONFIG_HW_RANDOM_S390
new file mode 100644
index 000000000..7108db8ff
--- /dev/null
+++ b/baseconfig/s390x/CONFIG_HW_RANDOM_S390
@@ -0,0 +1 @@
+CONFIG_HW_RANDOM_S390=m
diff --git a/baseconfig/s390x/CONFIG_MAX_PHYSMEM_BITS b/baseconfig/s390x/CONFIG_MAX_PHYSMEM_BITS
new file mode 100644
index 000000000..6ace7a163
--- /dev/null
+++ b/baseconfig/s390x/CONFIG_MAX_PHYSMEM_BITS
@@ -0,0 +1 @@
+CONFIG_MAX_PHYSMEM_BITS=46
diff --git a/baseconfig/s390x/CONFIG_MDIO_DEVICE b/baseconfig/s390x/CONFIG_MDIO_DEVICE
new file mode 100644
index 000000000..67ac6bad8
--- /dev/null
+++ b/baseconfig/s390x/CONFIG_MDIO_DEVICE
@@ -0,0 +1 @@
+CONFIG_MDIO_DEVICE=m
diff --git a/baseconfig/s390x/CONFIG_S390_CCW_IOMMU b/baseconfig/s390x/CONFIG_S390_CCW_IOMMU
new file mode 100644
index 000000000..7dd58dfa7
--- /dev/null
+++ b/baseconfig/s390x/CONFIG_S390_CCW_IOMMU
@@ -0,0 +1 @@
+CONFIG_S390_CCW_IOMMU=y
diff --git a/baseconfig/s390x/CONFIG_VFIO_CCW b/baseconfig/s390x/CONFIG_VFIO_CCW
new file mode 100644
index 000000000..15f7493a4
--- /dev/null
+++ b/baseconfig/s390x/CONFIG_VFIO_CCW
@@ -0,0 +1 @@
+CONFIG_VFIO_CCW=m
diff --git a/bcm283x-mmc-bcm2835.patch b/bcm283x-mmc-bcm2835.patch
deleted file mode 100644
index d9591b438..000000000
--- a/bcm283x-mmc-bcm2835.patch
+++ /dev/null
@@ -1,1932 +0,0 @@
-From patchwork Wed Mar 8 09:19:01 2017
-Content-Type: text/plain; charset="utf-8"
-MIME-Version: 1.0
-Content-Transfer-Encoding: 7bit
-Subject: [v4,1/7] dt-bindings: Add binding for brcm,bcm2835-sdhost.
-From: Gerd Hoffmann <kraxel@redhat.com>
-X-Patchwork-Id: 9610673
-Message-Id: <1488964751-22763-2-git-send-email-kraxel@redhat.com>
-To: linux-rpi-kernel@lists.infradead.org
-Cc: mark.rutland@arm.com, stefan.wahren@i2se.com, ulf.hansson@linaro.org,
- f.fainelli@gmail.com, sbranden@broadcom.com, devicetree@vger.kernel.org,
- rjui@broadcom.com, lee@kernel.org, will.deacon@arm.com,
- linux@armlinux.org.uk,
- linux-kernel@vger.kernel.org, eric@anholt.net, robh+dt@kernel.org,
- bcm-kernel-feedback-list@broadcom.com, Gerd Hoffmann <kraxel@redhat.com>,
- catalin.marinas@arm.com, linux-mmc@vger.kernel.org,
- linux-arm-kernel@lists.infradead.org
-Date: Wed, 8 Mar 2017 10:19:01 +0100
-
-From: Eric Anholt <eric@anholt.net>
-
-This is the other SD controller on the platform, which can be swapped
-to the role of SD card host using pin muxing.
-
-Signed-off-by: Eric Anholt <eric@anholt.net>
-Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
-Acked-by: Rob Herring <robh@kernel.org>
----
- .../bindings/mmc/brcm,bcm2835-sdhost.txt | 23 ++++++++++++++++++++++
- 1 file changed, 23 insertions(+)
- create mode 100644 Documentation/devicetree/bindings/mmc/brcm,bcm2835-sdhost.txt
-
-diff --git a/Documentation/devicetree/bindings/mmc/brcm,bcm2835-sdhost.txt b/Documentation/devicetree/bindings/mmc/brcm,bcm2835-sdhost.txt
-new file mode 100644
-index 0000000..d876580
---- /dev/null
-+++ b/Documentation/devicetree/bindings/mmc/brcm,bcm2835-sdhost.txt
-@@ -0,0 +1,23 @@
-+Broadcom BCM2835 SDHOST controller
-+
-+This file documents differences between the core properties described
-+by mmc.txt and the properties that represent the BCM2835 controller.
-+
-+Required properties:
-+- compatible: Should be "brcm,bcm2835-sdhost".
-+- clocks: The clock feeding the SDHOST controller.
-+
-+Optional properties:
-+- dmas: DMA channel for read and write.
-+ See Documentation/devicetree/bindings/dma/dma.txt for details
-+
-+Example:
-+
-+sdhost: mmc@7e202000 {
-+ compatible = "brcm,bcm2835-sdhost";
-+ reg = <0x7e202000 0x100>;
-+ interrupts = <2 24>;
-+ clocks = <&clocks BCM2835_CLOCK_VPU>;
-+ dmas = <&dma 13>;
-+ dma-names = "rx-tx";
-+};
-From patchwork Wed Mar 8 09:19:03 2017
-Content-Type: text/plain; charset="utf-8"
-MIME-Version: 1.0
-Content-Transfer-Encoding: 7bit
-Subject: [v4,2/7] mmc: bcm2835: Add new driver for the sdhost controller.
-From: Gerd Hoffmann <kraxel@redhat.com>
-X-Patchwork-Id: 9610701
-Message-Id: <1488964751-22763-4-git-send-email-kraxel@redhat.com>
-To: linux-rpi-kernel@lists.infradead.org
-Cc: mark.rutland@arm.com, stefan.wahren@i2se.com, ulf.hansson@linaro.org,
- f.fainelli@gmail.com, sbranden@broadcom.com, devicetree@vger.kernel.org,
- rjui@broadcom.com, lee@kernel.org, will.deacon@arm.com,
- linux@armlinux.org.uk,
- linux-kernel@vger.kernel.org, eric@anholt.net, robh+dt@kernel.org,
- bcm-kernel-feedback-list@broadcom.com, Gerd Hoffmann <kraxel@redhat.com>,
- catalin.marinas@arm.com, linux-mmc@vger.kernel.org,
- linux-arm-kernel@lists.infradead.org
-Date: Wed, 8 Mar 2017 10:19:03 +0100
-
-From: Eric Anholt <eric@anholt.net>
-
-The 2835 has two SD controllers: The Arasan sdhci controller (supported
-by the iproc driver) and a custom sdhost controller. This patch adds a
-driver for the latter.
-
-The sdhci controller supports both sdcard and sdio. The sdhost
-controller supports the sdcard only, but has better performance. Also
-note that the rpi3 has sdio wifi, so driving the sdcard with the sdhost
-controller allows to use the sdhci controller for wifi support.
-
-The configuration is done by devicetree via pin muxing. Both SD
-controller are available on the same pins (2 pin groups = pin 22 to 27 +
-pin 48 to 53). So it's possible to use both SD controllers at the same
-time with different pin groups.
-
-The code was originally written by Phil Elwell in the downstream
-Rasbperry Pi tree. In preparation for the upstream merge it was
-cleaned up and the code base was moderized by Eric Anholt, Stefan
-Wahren and Gerd Hoffmann.
-
-Signed-off-by: Eric Anholt <eric@anholt.net>
-Signed-off-by: Stefan Wahren <stefan.wahren@i2se.com>
-Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
----
- drivers/mmc/host/Kconfig | 14 +
- drivers/mmc/host/Makefile | 1 +
- drivers/mmc/host/bcm2835.c | 1465 ++++++++++++++++++++++++++++++++++++++++++++
- 3 files changed, 1480 insertions(+)
- create mode 100644 drivers/mmc/host/bcm2835.c
-
-diff --git a/drivers/mmc/host/Kconfig b/drivers/mmc/host/Kconfig
-index f08691a..a638cd0 100644
---- a/drivers/mmc/host/Kconfig
-+++ b/drivers/mmc/host/Kconfig
-@@ -799,6 +799,20 @@ config MMC_TOSHIBA_PCI
- depends on PCI
- help
-
-+config MMC_BCM2835
-+ tristate "Broadcom BCM2835 SDHOST MMC Controller support"
-+ depends on ARCH_BCM2835 || COMPILE_TEST
-+ depends on HAS_DMA
-+ help
-+ This selects the BCM2835 SDHOST MMC controller. If you have
-+ a BCM2835 platform with SD or MMC devices, say Y or M here.
-+
-+ Note that the BCM2835 has two SD controllers: The Arasan
-+ sdhci controller (supported by MMC_SDHCI_IPROC) and a custom
-+ sdhost controller (supported by this driver).
-+
-+ If unsure, say N.
-+
- config MMC_MTK
- tristate "MediaTek SD/MMC Card Interface support"
- depends on HAS_DMA
-diff --git a/drivers/mmc/host/Makefile b/drivers/mmc/host/Makefile
-index 6d548c4..bc2c2e2 100644
---- a/drivers/mmc/host/Makefile
-+++ b/drivers/mmc/host/Makefile
-@@ -59,6 +59,7 @@ obj-$(CONFIG_MMC_MOXART) += moxart-mmc.o
- obj-$(CONFIG_MMC_SUNXI) += sunxi-mmc.o
- obj-$(CONFIG_MMC_USDHI6ROL0) += usdhi6rol0.o
- obj-$(CONFIG_MMC_TOSHIBA_PCI) += toshsd.o
-+obj-$(CONFIG_MMC_BCM2835) += bcm2835.o
-
- obj-$(CONFIG_MMC_REALTEK_PCI) += rtsx_pci_sdmmc.o
- obj-$(CONFIG_MMC_REALTEK_USB) += rtsx_usb_sdmmc.o
-diff --git a/drivers/mmc/host/bcm2835.c b/drivers/mmc/host/bcm2835.c
-new file mode 100644
-index 0000000..7d1b0db7
---- /dev/null
-+++ b/drivers/mmc/host/bcm2835.c
-@@ -0,0 +1,1465 @@
-+/*
-+ * bcm2835 sdhost driver.
-+ *
-+ * The 2835 has two SD controllers: The Arasan sdhci controller
-+ * (supported by the iproc driver) and a custom sdhost controller
-+ * (supported by this driver).
-+ *
-+ * The sdhci controller supports both sdcard and sdio. The sdhost
-+ * controller supports the sdcard only, but has better performance.
-+ * Also note that the rpi3 has sdio wifi, so driving the sdcard with
-+ * the sdhost controller allows to use the sdhci controller for wifi
-+ * support.
-+ *
-+ * The configuration is done by devicetree via pin muxing. Both
-+ * SD controller are available on the same pins (2 pin groups = pin 22
-+ * to 27 + pin 48 to 53). So it's possible to use both SD controllers
-+ * at the same time with different pin groups.
-+ *
-+ * Author: Phil Elwell <phil@raspberrypi.org>
-+ * Copyright (C) 2015-2016 Raspberry Pi (Trading) Ltd.
-+ *
-+ * Based on
-+ * mmc-bcm2835.c by Gellert Weisz
-+ * which is, in turn, based on
-+ * sdhci-bcm2708.c by Broadcom
-+ * sdhci-bcm2835.c by Stephen Warren and Oleksandr Tymoshenko
-+ * sdhci.c and sdhci-pci.c by Pierre Ossman
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms and conditions of the GNU General Public License,
-+ * version 2, as published by the Free Software Foundation.
-+ *
-+ * This program is distributed in the hope it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
-+ * more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
-+ */
-+#include <linux/clk.h>
-+#include <linux/delay.h>
-+#include <linux/device.h>
-+#include <linux/dmaengine.h>
-+#include <linux/dma-mapping.h>
-+#include <linux/err.h>
-+#include <linux/highmem.h>
-+#include <linux/interrupt.h>
-+#include <linux/io.h>
-+#include <linux/iopoll.h>
-+#include <linux/module.h>
-+#include <linux/of_address.h>
-+#include <linux/of_irq.h>
-+#include <linux/platform_device.h>
-+#include <linux/scatterlist.h>
-+#include <linux/time.h>
-+#include <linux/workqueue.h>
-+
-+#include <linux/mmc/host.h>
-+#include <linux/mmc/mmc.h>
-+#include <linux/mmc/sd.h>
-+
-+#define SDCMD 0x00 /* Command to SD card - 16 R/W */
-+#define SDARG 0x04 /* Argument to SD card - 32 R/W */
-+#define SDTOUT 0x08 /* Start value for timeout counter - 32 R/W */
-+#define SDCDIV 0x0c /* Start value for clock divider - 11 R/W */
-+#define SDRSP0 0x10 /* SD card response (31:0) - 32 R */
-+#define SDRSP1 0x14 /* SD card response (63:32) - 32 R */
-+#define SDRSP2 0x18 /* SD card response (95:64) - 32 R */
-+#define SDRSP3 0x1c /* SD card response (127:96) - 32 R */
-+#define SDHSTS 0x20 /* SD host status - 11 R/W */
-+#define SDVDD 0x30 /* SD card power control - 1 R/W */
-+#define SDEDM 0x34 /* Emergency Debug Mode - 13 R/W */
-+#define SDHCFG 0x38 /* Host configuration - 2 R/W */
-+#define SDHBCT 0x3c /* Host byte count (debug) - 32 R/W */
-+#define SDDATA 0x40 /* Data to/from SD card - 32 R/W */
-+#define SDHBLC 0x50 /* Host block count (SDIO/SDHC) - 9 R/W */
-+
-+#define SDCMD_NEW_FLAG 0x8000
-+#define SDCMD_FAIL_FLAG 0x4000
-+#define SDCMD_BUSYWAIT 0x800
-+#define SDCMD_NO_RESPONSE 0x400
-+#define SDCMD_LONG_RESPONSE 0x200
-+#define SDCMD_WRITE_CMD 0x80
-+#define SDCMD_READ_CMD 0x40
-+#define SDCMD_CMD_MASK 0x3f
-+
-+#define SDCDIV_MAX_CDIV 0x7ff
-+
-+#define SDHSTS_BUSY_IRPT 0x400
-+#define SDHSTS_BLOCK_IRPT 0x200
-+#define SDHSTS_SDIO_IRPT 0x100
-+#define SDHSTS_REW_TIME_OUT 0x80
-+#define SDHSTS_CMD_TIME_OUT 0x40
-+#define SDHSTS_CRC16_ERROR 0x20
-+#define SDHSTS_CRC7_ERROR 0x10
-+#define SDHSTS_FIFO_ERROR 0x08
-+/* Reserved */
-+/* Reserved */
-+#define SDHSTS_DATA_FLAG 0x01
-+
-+#define SDHSTS_TRANSFER_ERROR_MASK (SDHSTS_CRC7_ERROR | \
-+ SDHSTS_CRC16_ERROR | \
-+ SDHSTS_REW_TIME_OUT | \
-+ SDHSTS_FIFO_ERROR)
-+
-+#define SDHSTS_ERROR_MASK (SDHSTS_CMD_TIME_OUT | \
-+ SDHSTS_TRANSFER_ERROR_MASK)
-+
-+#define SDHCFG_BUSY_IRPT_EN BIT(10)
-+#define SDHCFG_BLOCK_IRPT_EN BIT(8)
-+#define SDHCFG_SDIO_IRPT_EN BIT(5)
-+#define SDHCFG_DATA_IRPT_EN BIT(4)
-+#define SDHCFG_SLOW_CARD BIT(3)
-+#define SDHCFG_WIDE_EXT_BUS BIT(2)
-+#define SDHCFG_WIDE_INT_BUS BIT(1)
-+#define SDHCFG_REL_CMD_LINE BIT(0)
-+
-+#define SDVDD_POWER_OFF 0
-+#define SDVDD_POWER_ON 1
-+
-+#define SDEDM_FORCE_DATA_MODE BIT(19)
-+#define SDEDM_CLOCK_PULSE BIT(20)
-+#define SDEDM_BYPASS BIT(21)
-+
-+#define SDEDM_WRITE_THRESHOLD_SHIFT 9
-+#define SDEDM_READ_THRESHOLD_SHIFT 14
-+#define SDEDM_THRESHOLD_MASK 0x1f
-+
-+#define SDEDM_FSM_MASK 0xf
-+#define SDEDM_FSM_IDENTMODE 0x0
-+#define SDEDM_FSM_DATAMODE 0x1
-+#define SDEDM_FSM_READDATA 0x2
-+#define SDEDM_FSM_WRITEDATA 0x3
-+#define SDEDM_FSM_READWAIT 0x4
-+#define SDEDM_FSM_READCRC 0x5
-+#define SDEDM_FSM_WRITECRC 0x6
-+#define SDEDM_FSM_WRITEWAIT1 0x7
-+#define SDEDM_FSM_POWERDOWN 0x8
-+#define SDEDM_FSM_POWERUP 0x9
-+#define SDEDM_FSM_WRITESTART1 0xa
-+#define SDEDM_FSM_WRITESTART2 0xb
-+#define SDEDM_FSM_GENPULSES 0xc
-+#define SDEDM_FSM_WRITEWAIT2 0xd
-+#define SDEDM_FSM_STARTPOWDOWN 0xf
-+
-+#define SDDATA_FIFO_WORDS 16
-+
-+#define FIFO_READ_THRESHOLD 4
-+#define FIFO_WRITE_THRESHOLD 4
-+#define SDDATA_FIFO_PIO_BURST 8
-+
-+#define PIO_THRESHOLD 1 /* Maximum block count for PIO (0 = always DMA) */
-+
-+struct bcm2835_host {
-+ spinlock_t lock;
-+ struct mutex mutex;
-+
-+ void __iomem *ioaddr;
-+ u32 phys_addr;
-+
-+ struct mmc_host *mmc;
-+ struct platform_device *pdev;
-+
-+ int clock; /* Current clock speed */
-+ unsigned int max_clk; /* Max possible freq */
-+ struct work_struct dma_work;
-+ struct delayed_work timeout_work; /* Timer for timeouts */
-+ struct sg_mapping_iter sg_miter; /* SG state for PIO */
-+ unsigned int blocks; /* remaining PIO blocks */
-+ int irq; /* Device IRQ */
-+
-+ u32 ns_per_fifo_word;
-+
-+ /* cached registers */
-+ u32 hcfg;
-+ u32 cdiv;
-+
-+ struct mmc_request *mrq; /* Current request */
-+ struct mmc_command *cmd; /* Current command */
-+ struct mmc_data *data; /* Current data request */
-+ bool data_complete:1;/* Data finished before cmd */
-+ bool use_busy:1; /* Wait for busy interrupt */
-+ bool use_sbc:1; /* Send CMD23 */
-+
-+ /* for threaded irq handler */
-+ bool irq_block;
-+ bool irq_busy;
-+ bool irq_data;
-+
-+ /* DMA part */
-+ struct dma_chan *dma_chan_rxtx;
-+ struct dma_chan *dma_chan;
-+ struct dma_slave_config dma_cfg_rx;
-+ struct dma_slave_config dma_cfg_tx;
-+ struct dma_async_tx_descriptor *dma_desc;
-+ u32 dma_dir;
-+ u32 drain_words;
-+ struct page *drain_page;
-+ u32 drain_offset;
-+ bool use_dma;
-+};
-+
-+static void bcm2835_dumpcmd(struct bcm2835_host *host, struct mmc_command *cmd,
-+ const char *label)
-+{
-+ struct device *dev = &host->pdev->dev;
-+
-+ if (!cmd)
-+ return;
-+
-+ dev_dbg(dev, "%c%s op %d arg 0x%x flags 0x%x - resp %08x %08x %08x %08x, err %d\n",
-+ (cmd == host->cmd) ? '>' : ' ',
-+ label, cmd->opcode, cmd->arg, cmd->flags,
-+ cmd->resp[0], cmd->resp[1], cmd->resp[2], cmd->resp[3],
-+ cmd->error);
-+}
-+
-+static void bcm2835_dumpregs(struct bcm2835_host *host)
-+{
-+ struct mmc_request *mrq = host->mrq;
-+ struct device *dev = &host->pdev->dev;
-+
-+ if (mrq) {
-+ bcm2835_dumpcmd(host, mrq->sbc, "sbc");
-+ bcm2835_dumpcmd(host, mrq->cmd, "cmd");
-+ if (mrq->data) {
-+ dev_dbg(dev, "data blocks %x blksz %x - err %d\n",
-+ mrq->data->blocks,
-+ mrq->data->blksz,
-+ mrq->data->error);
-+ }
-+ bcm2835_dumpcmd(host, mrq->stop, "stop");
-+ }
-+
-+ dev_dbg(dev, "=========== REGISTER DUMP ===========\n");
-+ dev_dbg(dev, "SDCMD 0x%08x\n", readl(host->ioaddr + SDCMD));
-+ dev_dbg(dev, "SDARG 0x%08x\n", readl(host->ioaddr + SDARG));
-+ dev_dbg(dev, "SDTOUT 0x%08x\n", readl(host->ioaddr + SDTOUT));
-+ dev_dbg(dev, "SDCDIV 0x%08x\n", readl(host->ioaddr + SDCDIV));
-+ dev_dbg(dev, "SDRSP0 0x%08x\n", readl(host->ioaddr + SDRSP0));
-+ dev_dbg(dev, "SDRSP1 0x%08x\n", readl(host->ioaddr + SDRSP1));
-+ dev_dbg(dev, "SDRSP2 0x%08x\n", readl(host->ioaddr + SDRSP2));
-+ dev_dbg(dev, "SDRSP3 0x%08x\n", readl(host->ioaddr + SDRSP3));
-+ dev_dbg(dev, "SDHSTS 0x%08x\n", readl(host->ioaddr + SDHSTS));
-+ dev_dbg(dev, "SDVDD 0x%08x\n", readl(host->ioaddr + SDVDD));
-+ dev_dbg(dev, "SDEDM 0x%08x\n", readl(host->ioaddr + SDEDM));
-+ dev_dbg(dev, "SDHCFG 0x%08x\n", readl(host->ioaddr + SDHCFG));
-+ dev_dbg(dev, "SDHBCT 0x%08x\n", readl(host->ioaddr + SDHBCT));
-+ dev_dbg(dev, "SDHBLC 0x%08x\n", readl(host->ioaddr + SDHBLC));
-+ dev_dbg(dev, "===========================================\n");
-+}
-+
-+static void bcm2835_reset_internal(struct bcm2835_host *host)
-+{
-+ u32 temp;
-+
-+ writel(SDVDD_POWER_OFF, host->ioaddr + SDVDD);
-+ writel(0, host->ioaddr + SDCMD);
-+ writel(0, host->ioaddr + SDARG);
-+ writel(0xf00000, host->ioaddr + SDTOUT);
-+ writel(0, host->ioaddr + SDCDIV);
-+ writel(0x7f8, host->ioaddr + SDHSTS); /* Write 1s to clear */
-+ writel(0, host->ioaddr + SDHCFG);
-+ writel(0, host->ioaddr + SDHBCT);
-+ writel(0, host->ioaddr + SDHBLC);
-+
-+ /* Limit fifo usage due to silicon bug */
-+ temp = readl(host->ioaddr + SDEDM);
-+ temp &= ~((SDEDM_THRESHOLD_MASK << SDEDM_READ_THRESHOLD_SHIFT) |
-+ (SDEDM_THRESHOLD_MASK << SDEDM_WRITE_THRESHOLD_SHIFT));
-+ temp |= (FIFO_READ_THRESHOLD << SDEDM_READ_THRESHOLD_SHIFT) |
-+ (FIFO_WRITE_THRESHOLD << SDEDM_WRITE_THRESHOLD_SHIFT);
-+ writel(temp, host->ioaddr + SDEDM);
-+ msleep(20);
-+ writel(SDVDD_POWER_ON, host->ioaddr + SDVDD);
-+ msleep(20);
-+ host->clock = 0;
-+ writel(host->hcfg, host->ioaddr + SDHCFG);
-+ writel(host->cdiv, host->ioaddr + SDCDIV);
-+}
-+
-+static void bcm2835_reset(struct mmc_host *mmc)
-+{
-+ struct bcm2835_host *host = mmc_priv(mmc);
-+
-+ if (host->dma_chan)
-+ dmaengine_terminate_sync(host->dma_chan);
-+ bcm2835_reset_internal(host);
-+}
-+
-+static void bcm2835_finish_command(struct bcm2835_host *host);
-+
-+static void bcm2835_wait_transfer_complete(struct bcm2835_host *host)
-+{
-+ int timediff;
-+ u32 alternate_idle;
-+
-+ alternate_idle = (host->mrq->data->flags & MMC_DATA_READ) ?
-+ SDEDM_FSM_READWAIT : SDEDM_FSM_WRITESTART1;
-+
-+ timediff = 0;
-+
-+ while (1) {
-+ u32 edm, fsm;
-+
-+ edm = readl(host->ioaddr + SDEDM);
-+ fsm = edm & SDEDM_FSM_MASK;
-+
-+ if ((fsm == SDEDM_FSM_IDENTMODE) ||
-+ (fsm == SDEDM_FSM_DATAMODE))
-+ break;
-+ if (fsm == alternate_idle) {
-+ writel(edm | SDEDM_FORCE_DATA_MODE,
-+ host->ioaddr + SDEDM);
-+ break;
-+ }
-+
-+ timediff++;
-+ if (timediff == 100000) {
-+ dev_err(&host->pdev->dev,
-+ "wait_transfer_complete - still waiting after %d retries\n",
-+ timediff);
-+ bcm2835_dumpregs(host);
-+ host->mrq->data->error = -ETIMEDOUT;
-+ return;
-+ }
-+ cpu_relax();
-+ }
-+}
-+
-+static void bcm2835_dma_complete(void *param)
-+{
-+ struct bcm2835_host *host = param;
-+
-+ schedule_work(&host->dma_work);
-+}
-+
-+static void bcm2835_transfer_block_pio(struct bcm2835_host *host, bool is_read)
-+{
-+ unsigned long flags;
-+ size_t blksize;
-+ unsigned long wait_max;
-+
-+ blksize = host->data->blksz;
-+
-+ wait_max = jiffies + msecs_to_jiffies(500);
-+
-+ local_irq_save(flags);
-+
-+ while (blksize) {
-+ int copy_words;
-+ u32 hsts = 0;
-+ size_t len;
-+ u32 *buf;
-+
-+ if (!sg_miter_next(&host->sg_miter)) {
-+ host->data->error = -EINVAL;
-+ break;
-+ }
-+
-+ len = min(host->sg_miter.length, blksize);
-+ if (len % 4) {
-+ host->data->error = -EINVAL;
-+ break;
-+ }
-+
-+ blksize -= len;
-+ host->sg_miter.consumed = len;
-+
-+ buf = (u32 *)host->sg_miter.addr;
-+
-+ copy_words = len / 4;
-+
-+ while (copy_words) {
-+ int burst_words, words;
-+ u32 edm;
-+
-+ burst_words = min(SDDATA_FIFO_PIO_BURST, copy_words);
-+ edm = readl(host->ioaddr + SDEDM);
-+ if (is_read)
-+ words = ((edm >> 4) & 0x1f);
-+ else
-+ words = SDDATA_FIFO_WORDS - ((edm >> 4) & 0x1f);
-+
-+ if (words < burst_words) {
-+ int fsm_state = (edm & SDEDM_FSM_MASK);
-+ struct device *dev = &host->pdev->dev;
-+
-+ if ((is_read &&
-+ (fsm_state != SDEDM_FSM_READDATA &&
-+ fsm_state != SDEDM_FSM_READWAIT &&
-+ fsm_state != SDEDM_FSM_READCRC)) ||
-+ (!is_read &&
-+ (fsm_state != SDEDM_FSM_WRITEDATA &&
-+ fsm_state != SDEDM_FSM_WRITESTART1 &&
-+ fsm_state != SDEDM_FSM_WRITESTART2))) {
-+ hsts = readl(host->ioaddr + SDHSTS);
-+ dev_err(dev, "fsm %x, hsts %08x\n",
-+ fsm_state, hsts);
-+ if (hsts & SDHSTS_ERROR_MASK)
-+ break;
-+ }
-+
-+ if (time_after(jiffies, wait_max)) {
-+ dev_err(dev, "PIO %s timeout - EDM %08x\n",
-+ is_read ? "read" : "write",
-+ edm);
-+ hsts = SDHSTS_REW_TIME_OUT;
-+ break;
-+ }
-+ ndelay((burst_words - words) *
-+ host->ns_per_fifo_word);
-+ continue;
-+ } else if (words > copy_words) {
-+ words = copy_words;
-+ }
-+
-+ copy_words -= words;
-+
-+ while (words) {
-+ if (is_read)
-+ *(buf++) = readl(host->ioaddr + SDDATA);
-+ else
-+ writel(*(buf++), host->ioaddr + SDDATA);
-+ words--;
-+ }
-+ }
-+
-+ if (hsts & SDHSTS_ERROR_MASK)
-+ break;
-+ }
-+
-+ sg_miter_stop(&host->sg_miter);
-+
-+ local_irq_restore(flags);
-+}
-+
-+static void bcm2835_transfer_pio(struct bcm2835_host *host)
-+{
-+ struct device *dev = &host->pdev->dev;
-+ u32 sdhsts;
-+ bool is_read;
-+
-+ is_read = (host->data->flags & MMC_DATA_READ) != 0;
-+ bcm2835_transfer_block_pio(host, is_read);
-+
-+ sdhsts = readl(host->ioaddr + SDHSTS);
-+ if (sdhsts & (SDHSTS_CRC16_ERROR |
-+ SDHSTS_CRC7_ERROR |
-+ SDHSTS_FIFO_ERROR)) {
-+ dev_err(dev, "%s transfer error - HSTS %08x\n",
-+ is_read ? "read" : "write", sdhsts);
-+ host->data->error = -EILSEQ;
-+ } else if ((sdhsts & (SDHSTS_CMD_TIME_OUT |
-+ SDHSTS_REW_TIME_OUT))) {
-+ dev_err(dev, "%s timeout error - HSTS %08x\n",
-+ is_read ? "read" : "write", sdhsts);
-+ host->data->error = -ETIMEDOUT;
-+ }
-+}
-+
-+static
-+void bcm2835_prepare_dma(struct bcm2835_host *host, struct mmc_data *data)
-+{
-+ int len, dir_data, dir_slave;
-+ struct dma_async_tx_descriptor *desc = NULL;
-+ struct dma_chan *dma_chan;
-+
-+ dma_chan = host->dma_chan_rxtx;
-+ if (data->flags & MMC_DATA_READ) {
-+ dir_data = DMA_FROM_DEVICE;
-+ dir_slave = DMA_DEV_TO_MEM;
-+ } else {
-+ dir_data = DMA_TO_DEVICE;
-+ dir_slave = DMA_MEM_TO_DEV;
-+ }
-+
-+ /* The block doesn't manage the FIFO DREQs properly for
-+ * multi-block transfers, so don't attempt to DMA the final
-+ * few words. Unfortunately this requires the final sg entry
-+ * to be trimmed. N.B. This code demands that the overspill
-+ * is contained in a single sg entry.
-+ */
-+
-+ host->drain_words = 0;
-+ if ((data->blocks > 1) && (dir_data == DMA_FROM_DEVICE)) {
-+ struct scatterlist *sg;
-+ u32 len;
-+ int i;
-+
-+ len = min((u32)(FIFO_READ_THRESHOLD - 1) * 4,
-+ (u32)data->blocks * data->blksz);
-+
-+ for_each_sg(data->sg, sg, data->sg_len, i) {
-+ if (sg_is_last(sg)) {
-+ WARN_ON(sg->length < len);
-+ sg->length -= len;
-+ host->drain_page = sg_page(sg);
-+ host->drain_offset = sg->offset + sg->length;
-+ }
-+ }
-+ host->drain_words = len / 4;
-+ }
-+
-+ /* The parameters have already been validated, so this will not fail */
-+ (void)dmaengine_slave_config(dma_chan,
-+ (dir_data == DMA_FROM_DEVICE) ?
-+ &host->dma_cfg_rx :
-+ &host->dma_cfg_tx);
-+
-+ len = dma_map_sg(dma_chan->device->dev, data->sg, data->sg_len,
-+ dir_data);
-+
-+ if (len > 0) {
-+ desc = dmaengine_prep_slave_sg(dma_chan, data->sg,
-+ len, dir_slave,
-+ DMA_PREP_INTERRUPT |
-+ DMA_CTRL_ACK);
-+ }
-+
-+ if (desc) {
-+ desc->callback = bcm2835_dma_complete;
-+ desc->callback_param = host;
-+ host->dma_desc = desc;
-+ host->dma_chan = dma_chan;
-+ host->dma_dir = dir_data;
-+ }
-+}
-+
-+static void bcm2835_start_dma(struct bcm2835_host *host)
-+{
-+ dmaengine_submit(host->dma_desc);
-+ dma_async_issue_pending(host->dma_chan);
-+}
-+
-+static void bcm2835_set_transfer_irqs(struct bcm2835_host *host)
-+{
-+ u32 all_irqs = SDHCFG_DATA_IRPT_EN | SDHCFG_BLOCK_IRPT_EN |
-+ SDHCFG_BUSY_IRPT_EN;
-+
-+ if (host->dma_desc) {
-+ host->hcfg = (host->hcfg & ~all_irqs) |
-+ SDHCFG_BUSY_IRPT_EN;
-+ } else {
-+ host->hcfg = (host->hcfg & ~all_irqs) |
-+ SDHCFG_DATA_IRPT_EN |
-+ SDHCFG_BUSY_IRPT_EN;
-+ }
-+
-+ writel(host->hcfg, host->ioaddr + SDHCFG);
-+}
-+
-+static
-+void bcm2835_prepare_data(struct bcm2835_host *host, struct mmc_command *cmd)
-+{
-+ struct mmc_data *data = cmd->data;
-+
-+ WARN_ON(host->data);
-+
-+ host->data = data;
-+ if (!data)
-+ return;
-+
-+ host->data_complete = false;
-+ host->data->bytes_xfered = 0;
-+
-+ if (!host->dma_desc) {
-+ /* Use PIO */
-+ int flags = SG_MITER_ATOMIC;
-+
-+ if (data->flags & MMC_DATA_READ)
-+ flags |= SG_MITER_TO_SG;
-+ else
-+ flags |= SG_MITER_FROM_SG;
-+ sg_miter_start(&host->sg_miter, data->sg, data->sg_len, flags);
-+ host->blocks = data->blocks;
-+ }
-+
-+ bcm2835_set_transfer_irqs(host);
-+
-+ writel(data->blksz, host->ioaddr + SDHBCT);
-+ writel(data->blocks, host->ioaddr + SDHBLC);
-+}
-+
-+static u32 bcm2835_read_wait_sdcmd(struct bcm2835_host *host, u32 max_ms)
-+{
-+ struct device *dev = &host->pdev->dev;
-+ u32 value;
-+ int ret;
-+
-+ ret = readl_poll_timeout(host->ioaddr + SDCMD, value,
-+ !(value & SDCMD_NEW_FLAG), 1, 10);
-+ if (ret == -ETIMEDOUT)
-+ /* if it takes a while make poll interval bigger */
-+ ret = readl_poll_timeout(host->ioaddr + SDCMD, value,
-+ !(value & SDCMD_NEW_FLAG),
-+ 10, max_ms * 1000);
-+ if (ret == -ETIMEDOUT)
-+ dev_err(dev, "%s: timeout (%d ms)\n", __func__, max_ms);
-+
-+ return value;
-+}
-+
-+static void bcm2835_finish_request(struct bcm2835_host *host)
-+{
-+ struct dma_chan *terminate_chan = NULL;
-+ struct mmc_request *mrq;
-+
-+ cancel_delayed_work(&host->timeout_work);
-+
-+ mrq = host->mrq;
-+
-+ host->mrq = NULL;
-+ host->cmd = NULL;
-+ host->data = NULL;
-+
-+ host->dma_desc = NULL;
-+ terminate_chan = host->dma_chan;
-+ host->dma_chan = NULL;
-+
-+ if (terminate_chan) {
-+ int err = dmaengine_terminate_all(terminate_chan);
-+
-+ if (err)
-+ dev_err(&host->pdev->dev,
-+ "failed to terminate DMA (%d)\n", err);
-+ }
-+
-+ mmc_request_done(host->mmc, mrq);
-+}
-+
-+static
-+bool bcm2835_send_command(struct bcm2835_host *host, struct mmc_command *cmd)
-+{
-+ struct device *dev = &host->pdev->dev;
-+ u32 sdcmd, sdhsts;
-+ unsigned long timeout;
-+
-+ WARN_ON(host->cmd);
-+
-+ sdcmd = bcm2835_read_wait_sdcmd(host, 100);
-+ if (sdcmd & SDCMD_NEW_FLAG) {
-+ dev_err(dev, "previous command never completed.\n");
-+ bcm2835_dumpregs(host);
-+ cmd->error = -EILSEQ;
-+ bcm2835_finish_request(host);
-+ return false;
-+ }
-+
-+ if (!cmd->data && cmd->busy_timeout > 9000)
-+ timeout = DIV_ROUND_UP(cmd->busy_timeout, 1000) * HZ + HZ;
-+ else
-+ timeout = 10 * HZ;
-+ schedule_delayed_work(&host->timeout_work, timeout);
-+
-+ host->cmd = cmd;
-+
-+ /* Clear any error flags */
-+ sdhsts = readl(host->ioaddr + SDHSTS);
-+ if (sdhsts & SDHSTS_ERROR_MASK)
-+ writel(sdhsts, host->ioaddr + SDHSTS);
-+
-+ if ((cmd->flags & MMC_RSP_136) && (cmd->flags & MMC_RSP_BUSY)) {
-+ dev_err(dev, "unsupported response type!\n");
-+ cmd->error = -EINVAL;
-+ bcm2835_finish_request(host);
-+ return false;
-+ }
-+
-+ bcm2835_prepare_data(host, cmd);
-+
-+ writel(cmd->arg, host->ioaddr + SDARG);
-+
-+ sdcmd = cmd->opcode & SDCMD_CMD_MASK;
-+
-+ host->use_busy = false;
-+ if (!(cmd->flags & MMC_RSP_PRESENT)) {
-+ sdcmd |= SDCMD_NO_RESPONSE;
-+ } else {
-+ if (cmd->flags & MMC_RSP_136)
-+ sdcmd |= SDCMD_LONG_RESPONSE;
-+ if (cmd->flags & MMC_RSP_BUSY) {
-+ sdcmd |= SDCMD_BUSYWAIT;
-+ host->use_busy = true;
-+ }
-+ }
-+
-+ if (cmd->data) {
-+ if (cmd->data->flags & MMC_DATA_WRITE)
-+ sdcmd |= SDCMD_WRITE_CMD;
-+ if (cmd->data->flags & MMC_DATA_READ)
-+ sdcmd |= SDCMD_READ_CMD;
-+ }
-+
-+ writel(sdcmd | SDCMD_NEW_FLAG, host->ioaddr + SDCMD);
-+
-+ return true;
-+}
-+
-+static void bcm2835_transfer_complete(struct bcm2835_host *host)
-+{
-+ struct mmc_data *data;
-+
-+ WARN_ON(!host->data_complete);
-+
-+ data = host->data;
-+ host->data = NULL;
-+
-+ /* Need to send CMD12 if -
-+ * a) open-ended multiblock transfer (no CMD23)
-+ * b) error in multiblock transfer
-+ */
-+ if (host->mrq->stop && (data->error || !host->use_sbc)) {
-+ if (bcm2835_send_command(host, host->mrq->stop)) {
-+ /* No busy, so poll for completion */
-+ if (!host->use_busy)
-+ bcm2835_finish_command(host);
-+ }
-+ } else {
-+ bcm2835_wait_transfer_complete(host);
-+ bcm2835_finish_request(host);
-+ }
-+}
-+
-+static void bcm2835_finish_data(struct bcm2835_host *host)
-+{
-+ struct device *dev = &host->pdev->dev;
-+ struct mmc_data *data;
-+
-+ data = host->data;
-+
-+ host->hcfg &= ~(SDHCFG_DATA_IRPT_EN | SDHCFG_BLOCK_IRPT_EN);
-+ writel(host->hcfg, host->ioaddr + SDHCFG);
-+
-+ data->bytes_xfered = data->error ? 0 : (data->blksz * data->blocks);
-+
-+ host->data_complete = true;
-+
-+ if (host->cmd) {
-+ /* Data managed to finish before the
-+ * command completed. Make sure we do
-+ * things in the proper order.
-+ */
-+ dev_dbg(dev, "Finished early - HSTS %08x\n",
-+ readl(host->ioaddr + SDHSTS));
-+ } else {
-+ bcm2835_transfer_complete(host);
-+ }
-+}
-+
-+static void bcm2835_finish_command(struct bcm2835_host *host)
-+{
-+ struct device *dev = &host->pdev->dev;
-+ struct mmc_command *cmd = host->cmd;
-+ u32 sdcmd;
-+
-+ sdcmd = bcm2835_read_wait_sdcmd(host, 100);
-+
-+ /* Check for errors */
-+ if (sdcmd & SDCMD_NEW_FLAG) {
-+ dev_err(dev, "command never completed.\n");
-+ bcm2835_dumpregs(host);
-+ host->cmd->error = -EIO;
-+ bcm2835_finish_request(host);
-+ return;
-+ } else if (sdcmd & SDCMD_FAIL_FLAG) {
-+ u32 sdhsts = readl(host->ioaddr + SDHSTS);
-+
-+ /* Clear the errors */
-+ writel(SDHSTS_ERROR_MASK, host->ioaddr + SDHSTS);
-+
-+ if (!(sdhsts & SDHSTS_CRC7_ERROR) ||
-+ (host->cmd->opcode != MMC_SEND_OP_COND)) {
-+ if (sdhsts & SDHSTS_CMD_TIME_OUT) {
-+ host->cmd->error = -ETIMEDOUT;
-+ } else {
-+ dev_err(dev, "unexpected command %d error\n",
-+ host->cmd->opcode);
-+ bcm2835_dumpregs(host);
-+ host->cmd->error = -EILSEQ;
-+ }
-+ bcm2835_finish_request(host);
-+ return;
-+ }
-+ }
-+
-+ if (cmd->flags & MMC_RSP_PRESENT) {
-+ if (cmd->flags & MMC_RSP_136) {
-+ int i;
-+
-+ for (i = 0; i < 4; i++) {
-+ cmd->resp[3 - i] =
-+ readl(host->ioaddr + SDRSP0 + i * 4);
-+ }
-+ } else {
-+ cmd->resp[0] = readl(host->ioaddr + SDRSP0);
-+ }
-+ }
-+
-+ if (cmd == host->mrq->sbc) {
-+ /* Finished CMD23, now send actual command. */
-+ host->cmd = NULL;
-+ if (bcm2835_send_command(host, host->mrq->cmd)) {
-+ if (host->data && host->dma_desc)
-+ /* DMA transfer starts now, PIO starts
-+ * after irq
-+ */
-+ bcm2835_start_dma(host);
-+
-+ if (!host->use_busy)
-+ bcm2835_finish_command(host);
-+ }
-+ } else if (cmd == host->mrq->stop) {
-+ /* Finished CMD12 */
-+ bcm2835_finish_request(host);
-+ } else {
-+ /* Processed actual command. */
-+ host->cmd = NULL;
-+ if (!host->data)
-+ bcm2835_finish_request(host);
-+ else if (host->data_complete)
-+ bcm2835_transfer_complete(host);
-+ }
-+}
-+
-+static void bcm2835_timeout(struct work_struct *work)
-+{
-+ struct delayed_work *d = to_delayed_work(work);
-+ struct bcm2835_host *host =
-+ container_of(d, struct bcm2835_host, timeout_work);
-+ struct device *dev = &host->pdev->dev;
-+
-+ mutex_lock(&host->mutex);
-+
-+ if (host->mrq) {
-+ dev_err(dev, "timeout waiting for hardware interrupt.\n");
-+ bcm2835_dumpregs(host);
-+
-+ if (host->data) {
-+ host->data->error = -ETIMEDOUT;
-+ bcm2835_finish_data(host);
-+ } else {
-+ if (host->cmd)
-+ host->cmd->error = -ETIMEDOUT;
-+ else
-+ host->mrq->cmd->error = -ETIMEDOUT;
-+
-+ bcm2835_finish_request(host);
-+ }
-+ }
-+
-+ mutex_unlock(&host->mutex);
-+}
-+
-+static bool bcm2835_check_cmd_error(struct bcm2835_host *host, u32 intmask)
-+{
-+ struct device *dev = &host->pdev->dev;
-+
-+ if (!(intmask & SDHSTS_ERROR_MASK))
-+ return false;
-+
-+ if (!host->cmd)
-+ return true;
-+
-+ dev_err(dev, "sdhost_busy_irq: intmask %08x\n", intmask);
-+ if (intmask & SDHSTS_CRC7_ERROR) {
-+ host->cmd->error = -EILSEQ;
-+ } else if (intmask & (SDHSTS_CRC16_ERROR |
-+ SDHSTS_FIFO_ERROR)) {
-+ if (host->mrq->data)
-+ host->mrq->data->error = -EILSEQ;
-+ else
-+ host->cmd->error = -EILSEQ;
-+ } else if (intmask & SDHSTS_REW_TIME_OUT) {
-+ if (host->mrq->data)
-+ host->mrq->data->error = -ETIMEDOUT;
-+ else
-+ host->cmd->error = -ETIMEDOUT;
-+ } else if (intmask & SDHSTS_CMD_TIME_OUT) {
-+ host->cmd->error = -ETIMEDOUT;
-+ }
-+ bcm2835_dumpregs(host);
-+ return true;
-+}
-+
-+static void bcm2835_check_data_error(struct bcm2835_host *host, u32 intmask)
-+{
-+ if (!host->data)
-+ return;
-+ if (intmask & (SDHSTS_CRC16_ERROR | SDHSTS_FIFO_ERROR))
-+ host->data->error = -EILSEQ;
-+ if (intmask & SDHSTS_REW_TIME_OUT)
-+ host->data->error = -ETIMEDOUT;
-+}
-+
-+static void bcm2835_busy_irq(struct bcm2835_host *host)
-+{
-+ if (WARN_ON(!host->cmd)) {
-+ bcm2835_dumpregs(host);
-+ return;
-+ }
-+
-+ if (WARN_ON(!host->use_busy)) {
-+ bcm2835_dumpregs(host);
-+ return;
-+ }
-+ host->use_busy = false;
-+
-+ bcm2835_finish_command(host);
-+}
-+
-+static void bcm2835_data_irq(struct bcm2835_host *host, u32 intmask)
-+{
-+ /* There are no dedicated data/space available interrupt
-+ * status bits, so it is necessary to use the single shared
-+ * data/space available FIFO status bits. It is therefore not
-+ * an error to get here when there is no data transfer in
-+ * progress.
-+ */
-+ if (!host->data)
-+ return;
-+
-+ bcm2835_check_data_error(host, intmask);
-+ if (host->data->error)
-+ goto finished;
-+
-+ if (host->data->flags & MMC_DATA_WRITE) {
-+ /* Use the block interrupt for writes after the first block */
-+ host->hcfg &= ~(SDHCFG_DATA_IRPT_EN);
-+ host->hcfg |= SDHCFG_BLOCK_IRPT_EN;
-+ writel(host->hcfg, host->ioaddr + SDHCFG);
-+ bcm2835_transfer_pio(host);
-+ } else {
-+ bcm2835_transfer_pio(host);
-+ host->blocks--;
-+ if ((host->blocks == 0) || host->data->error)
-+ goto finished;
-+ }
-+ return;
-+
-+finished:
-+ host->hcfg &= ~(SDHCFG_DATA_IRPT_EN | SDHCFG_BLOCK_IRPT_EN);
-+ writel(host->hcfg, host->ioaddr + SDHCFG);
-+}
-+
-+static void bcm2835_data_threaded_irq(struct bcm2835_host *host)
-+{
-+ if (!host->data)
-+ return;
-+ if ((host->blocks == 0) || host->data->error)
-+ bcm2835_finish_data(host);
-+}
-+
-+static void bcm2835_block_irq(struct bcm2835_host *host)
-+{
-+ if (WARN_ON(!host->data)) {
-+ bcm2835_dumpregs(host);
-+ return;
-+ }
-+
-+ if (!host->dma_desc) {
-+ WARN_ON(!host->blocks);
-+ if (host->data->error || (--host->blocks == 0))
-+ bcm2835_finish_data(host);
-+ else
-+ bcm2835_transfer_pio(host);
-+ } else if (host->data->flags & MMC_DATA_WRITE) {
-+ bcm2835_finish_data(host);
-+ }
-+}
-+
-+static irqreturn_t bcm2835_irq(int irq, void *dev_id)
-+{
-+ irqreturn_t result = IRQ_NONE;
-+ struct bcm2835_host *host = dev_id;
-+ u32 intmask;
-+
-+ spin_lock(&host->lock);
-+
-+ intmask = readl(host->ioaddr + SDHSTS);
-+
-+ writel(SDHSTS_BUSY_IRPT |
-+ SDHSTS_BLOCK_IRPT |
-+ SDHSTS_SDIO_IRPT |
-+ SDHSTS_DATA_FLAG,
-+ host->ioaddr + SDHSTS);
-+
-+ if (intmask & SDHSTS_BLOCK_IRPT) {
-+ bcm2835_check_data_error(host, intmask);
-+ host->irq_block = true;
-+ result = IRQ_WAKE_THREAD;
-+ }
-+
-+ if (intmask & SDHSTS_BUSY_IRPT) {
-+ if (!bcm2835_check_cmd_error(host, intmask)) {
-+ host->irq_busy = true;
-+ result = IRQ_WAKE_THREAD;
-+ } else {
-+ result = IRQ_HANDLED;
-+ }
-+ }
-+
-+ /* There is no true data interrupt status bit, so it is
-+ * necessary to qualify the data flag with the interrupt
-+ * enable bit.
-+ */
-+ if ((intmask & SDHSTS_DATA_FLAG) &&
-+ (host->hcfg & SDHCFG_DATA_IRPT_EN)) {
-+ bcm2835_data_irq(host, intmask);
-+ host->irq_data = true;
-+ result = IRQ_WAKE_THREAD;
-+ }
-+
-+ spin_unlock(&host->lock);
-+
-+ return result;
-+}
-+
-+static irqreturn_t bcm2835_threaded_irq(int irq, void *dev_id)
-+{
-+ struct bcm2835_host *host = dev_id;
-+ unsigned long flags;
-+ bool block, busy, data;
-+
-+ spin_lock_irqsave(&host->lock, flags);
-+
-+ block = host->irq_block;
-+ busy = host->irq_busy;
-+ data = host->irq_data;
-+ host->irq_block = false;
-+ host->irq_busy = false;
-+ host->irq_data = false;
-+
-+ spin_unlock_irqrestore(&host->lock, flags);
-+
-+ mutex_lock(&host->mutex);
-+
-+ if (block)
-+ bcm2835_block_irq(host);
-+ if (busy)
-+ bcm2835_busy_irq(host);
-+ if (data)
-+ bcm2835_data_threaded_irq(host);
-+
-+ mutex_unlock(&host->mutex);
-+
-+ return IRQ_HANDLED;
-+}
-+
-+static void bcm2835_dma_complete_work(struct work_struct *work)
-+{
-+ struct bcm2835_host *host =
-+ container_of(work, struct bcm2835_host, dma_work);
-+ struct mmc_data *data = host->data;
-+
-+ mutex_lock(&host->mutex);
-+
-+ if (host->dma_chan) {
-+ dma_unmap_sg(host->dma_chan->device->dev,
-+ data->sg, data->sg_len,
-+ host->dma_dir);
-+
-+ host->dma_chan = NULL;
-+ }
-+
-+ if (host->drain_words) {
-+ unsigned long flags;
-+ void *page;
-+ u32 *buf;
-+
-+ if (host->drain_offset & PAGE_MASK) {
-+ host->drain_page += host->drain_offset >> PAGE_SHIFT;
-+ host->drain_offset &= ~PAGE_MASK;
-+ }
-+ local_irq_save(flags);
-+ page = kmap_atomic(host->drain_page);
-+ buf = page + host->drain_offset;
-+
-+ while (host->drain_words) {
-+ u32 edm = readl(host->ioaddr + SDEDM);
-+
-+ if ((edm >> 4) & 0x1f)
-+ *(buf++) = readl(host->ioaddr + SDDATA);
-+ host->drain_words--;
-+ }
-+
-+ kunmap_atomic(page);
-+ local_irq_restore(flags);
-+ }
-+
-+ bcm2835_finish_data(host);
-+
-+ mutex_unlock(&host->mutex);
-+}
-+
-+static void bcm2835_set_clock(struct bcm2835_host *host, unsigned int clock)
-+{
-+ int div;
-+
-+ /* The SDCDIV register has 11 bits, and holds (div - 2). But
-+ * in data mode the max is 50MHz wihout a minimum, and only
-+ * the bottom 3 bits are used. Since the switch over is
-+ * automatic (unless we have marked the card as slow...),
-+ * chosen values have to make sense in both modes. Ident mode
-+ * must be 100-400KHz, so can range check the requested
-+ * clock. CMD15 must be used to return to data mode, so this
-+ * can be monitored.
-+ *
-+ * clock 250MHz -> 0->125MHz, 1->83.3MHz, 2->62.5MHz, 3->50.0MHz
-+ * 4->41.7MHz, 5->35.7MHz, 6->31.3MHz, 7->27.8MHz
-+ *
-+ * 623->400KHz/27.8MHz
-+ * reset value (507)->491159/50MHz
-+ *
-+ * BUT, the 3-bit clock divisor in data mode is too small if
-+ * the core clock is higher than 250MHz, so instead use the
-+ * SLOW_CARD configuration bit to force the use of the ident
-+ * clock divisor at all times.
-+ */
-+
-+ if (clock < 100000) {
-+ /* Can't stop the clock, but make it as slow as possible
-+ * to show willing
-+ */
-+ host->cdiv = SDCDIV_MAX_CDIV;
-+ writel(host->cdiv, host->ioaddr + SDCDIV);
-+ return;
-+ }
-+
-+ div = host->max_clk / clock;
-+ if (div < 2)
-+ div = 2;
-+ if ((host->max_clk / div) > clock)
-+ div++;
-+ div -= 2;
-+
-+ if (div > SDCDIV_MAX_CDIV)
-+ div = SDCDIV_MAX_CDIV;
-+
-+ clock = host->max_clk / (div + 2);
-+ host->mmc->actual_clock = clock;
-+
-+ /* Calibrate some delays */
-+
-+ host->ns_per_fifo_word = (1000000000 / clock) *
-+ ((host->mmc->caps & MMC_CAP_4_BIT_DATA) ? 8 : 32);
-+
-+ host->cdiv = div;
-+ writel(host->cdiv, host->ioaddr + SDCDIV);
-+
-+ /* Set the timeout to 500ms */
-+ writel(host->mmc->actual_clock / 2, host->ioaddr + SDTOUT);
-+}
-+
-+static void bcm2835_request(struct mmc_host *mmc, struct mmc_request *mrq)
-+{
-+ struct bcm2835_host *host = mmc_priv(mmc);
-+ struct device *dev = &host->pdev->dev;
-+ u32 edm, fsm;
-+
-+ /* Reset the error statuses in case this is a retry */
-+ if (mrq->sbc)
-+ mrq->sbc->error = 0;
-+ if (mrq->cmd)
-+ mrq->cmd->error = 0;
-+ if (mrq->data)
-+ mrq->data->error = 0;
-+ if (mrq->stop)
-+ mrq->stop->error = 0;
-+
-+ if (mrq->data && !is_power_of_2(mrq->data->blksz)) {
-+ dev_err(dev, "unsupported block size (%d bytes)\n",
-+ mrq->data->blksz);
-+ mrq->cmd->error = -EINVAL;
-+ mmc_request_done(mmc, mrq);
-+ return;
-+ }
-+
-+ if (host->use_dma && mrq->data && (mrq->data->blocks > PIO_THRESHOLD))
-+ bcm2835_prepare_dma(host, mrq->data);
-+
-+ mutex_lock(&host->mutex);
-+
-+ WARN_ON(host->mrq);
-+ host->mrq = mrq;
-+
-+ edm = readl(host->ioaddr + SDEDM);
-+ fsm = edm & SDEDM_FSM_MASK;
-+
-+ if ((fsm != SDEDM_FSM_IDENTMODE) &&
-+ (fsm != SDEDM_FSM_DATAMODE)) {
-+ dev_err(dev, "previous command (%d) not complete (EDM %08x)\n",
-+ readl(host->ioaddr + SDCMD) & SDCMD_CMD_MASK,
-+ edm);
-+ bcm2835_dumpregs(host);
-+ mrq->cmd->error = -EILSEQ;
-+ bcm2835_finish_request(host);
-+ mutex_unlock(&host->mutex);
-+ return;
-+ }
-+
-+ host->use_sbc = !!mrq->sbc && (host->mrq->data->flags & MMC_DATA_READ);
-+ if (host->use_sbc) {
-+ if (bcm2835_send_command(host, mrq->sbc)) {
-+ if (!host->use_busy)
-+ bcm2835_finish_command(host);
-+ }
-+ } else if (bcm2835_send_command(host, mrq->cmd)) {
-+ if (host->data && host->dma_desc) {
-+ /* DMA transfer starts now, PIO starts after irq */
-+ bcm2835_start_dma(host);
-+ }
-+
-+ if (!host->use_busy)
-+ bcm2835_finish_command(host);
-+ }
-+
-+ mutex_unlock(&host->mutex);
-+}
-+
-+static void bcm2835_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
-+{
-+ struct bcm2835_host *host = mmc_priv(mmc);
-+
-+ mutex_lock(&host->mutex);
-+
-+ if (!ios->clock || ios->clock != host->clock) {
-+ bcm2835_set_clock(host, ios->clock);
-+ host->clock = ios->clock;
-+ }
-+
-+ /* set bus width */
-+ host->hcfg &= ~SDHCFG_WIDE_EXT_BUS;
-+ if (ios->bus_width == MMC_BUS_WIDTH_4)
-+ host->hcfg |= SDHCFG_WIDE_EXT_BUS;
-+
-+ host->hcfg |= SDHCFG_WIDE_INT_BUS;
-+
-+ /* Disable clever clock switching, to cope with fast core clocks */
-+ host->hcfg |= SDHCFG_SLOW_CARD;
-+
-+ writel(host->hcfg, host->ioaddr + SDHCFG);
-+
-+ mutex_unlock(&host->mutex);
-+}
-+
-+static struct mmc_host_ops bcm2835_ops = {
-+ .request = bcm2835_request,
-+ .set_ios = bcm2835_set_ios,
-+ .hw_reset = bcm2835_reset,
-+};
-+
-+static int bcm2835_add_host(struct bcm2835_host *host)
-+{
-+ struct mmc_host *mmc = host->mmc;
-+ struct device *dev = &host->pdev->dev;
-+ char pio_limit_string[20];
-+ int ret;
-+
-+ mmc->f_max = host->max_clk;
-+ mmc->f_min = host->max_clk / SDCDIV_MAX_CDIV;
-+
-+ mmc->max_busy_timeout = ~0 / (mmc->f_max / 1000);
-+
-+ dev_dbg(dev, "f_max %d, f_min %d, max_busy_timeout %d\n",
-+ mmc->f_max, mmc->f_min, mmc->max_busy_timeout);
-+
-+ /* host controller capabilities */
-+ mmc->caps |= MMC_CAP_SD_HIGHSPEED | MMC_CAP_MMC_HIGHSPEED |
-+ MMC_CAP_NEEDS_POLL | MMC_CAP_HW_RESET | MMC_CAP_ERASE |
-+ MMC_CAP_CMD23;
-+
-+ spin_lock_init(&host->lock);
-+ mutex_init(&host->mutex);
-+
-+ if (IS_ERR_OR_NULL(host->dma_chan_rxtx)) {
-+ dev_warn(dev, "unable to initialise DMA channel. Falling back to PIO\n");
-+ host->use_dma = false;
-+ } else {
-+ host->use_dma = true;
-+
-+ host->dma_cfg_tx.src_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
-+ host->dma_cfg_tx.dst_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
-+ host->dma_cfg_tx.slave_id = 13; /* DREQ channel */
-+ host->dma_cfg_tx.direction = DMA_MEM_TO_DEV;
-+ host->dma_cfg_tx.src_addr = 0;
-+ host->dma_cfg_tx.dst_addr = host->phys_addr + SDDATA;
-+
-+ host->dma_cfg_rx.src_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
-+ host->dma_cfg_rx.dst_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
-+ host->dma_cfg_rx.slave_id = 13; /* DREQ channel */
-+ host->dma_cfg_rx.direction = DMA_DEV_TO_MEM;
-+ host->dma_cfg_rx.src_addr = host->phys_addr + SDDATA;
-+ host->dma_cfg_rx.dst_addr = 0;
-+
-+ if (dmaengine_slave_config(host->dma_chan_rxtx,
-+ &host->dma_cfg_tx) != 0 ||
-+ dmaengine_slave_config(host->dma_chan_rxtx,
-+ &host->dma_cfg_rx) != 0)
-+ host->use_dma = false;
-+ }
-+
-+ mmc->max_segs = 128;
-+ mmc->max_req_size = 524288;
-+ mmc->max_seg_size = mmc->max_req_size;
-+ mmc->max_blk_size = 1024;
-+ mmc->max_blk_count = 65535;
-+
-+ /* report supported voltage ranges */
-+ mmc->ocr_avail = MMC_VDD_32_33 | MMC_VDD_33_34;
-+
-+ INIT_WORK(&host->dma_work, bcm2835_dma_complete_work);
-+ INIT_DELAYED_WORK(&host->timeout_work, bcm2835_timeout);
-+
-+ /* Set interrupt enables */
-+ host->hcfg = SDHCFG_BUSY_IRPT_EN;
-+
-+ bcm2835_reset_internal(host);
-+
-+ ret = request_threaded_irq(host->irq, bcm2835_irq,
-+ bcm2835_threaded_irq,
-+ 0, mmc_hostname(mmc), host);
-+ if (ret) {
-+ dev_err(dev, "failed to request IRQ %d: %d\n", host->irq, ret);
-+ return ret;
-+ }
-+
-+ ret = mmc_add_host(mmc);
-+ if (ret) {
-+ free_irq(host->irq, host);
-+ return ret;
-+ }
-+
-+ pio_limit_string[0] = '\0';
-+ if (host->use_dma && (PIO_THRESHOLD > 0))
-+ sprintf(pio_limit_string, " (>%d)", PIO_THRESHOLD);
-+ dev_info(dev, "loaded - DMA %s%s\n",
-+ host->use_dma ? "enabled" : "disabled", pio_limit_string);
-+
-+ return 0;
-+}
-+
-+static int bcm2835_probe(struct platform_device *pdev)
-+{
-+ struct device *dev = &pdev->dev;
-+ struct clk *clk;
-+ struct resource *iomem;
-+ struct bcm2835_host *host;
-+ struct mmc_host *mmc;
-+ const __be32 *regaddr_p;
-+ int ret;
-+
-+ dev_dbg(dev, "%s\n", __func__);
-+ mmc = mmc_alloc_host(sizeof(*host), dev);
-+ if (!mmc)
-+ return -ENOMEM;
-+
-+ mmc->ops = &bcm2835_ops;
-+ host = mmc_priv(mmc);
-+ host->mmc = mmc;
-+ host->pdev = pdev;
-+ spin_lock_init(&host->lock);
-+
-+ iomem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-+ host->ioaddr = devm_ioremap_resource(dev, iomem);
-+ if (IS_ERR(host->ioaddr)) {
-+ ret = PTR_ERR(host->ioaddr);
-+ goto err;
-+ }
-+
-+ /* Parse OF address directly to get the physical address for
-+ * DMA to our registers.
-+ */
-+ regaddr_p = of_get_address(pdev->dev.of_node, 0, NULL, NULL);
-+ if (!regaddr_p) {
-+ dev_err(dev, "Can't get phys address\n");
-+ ret = -EINVAL;
-+ goto err;
-+ }
-+
-+ host->phys_addr = be32_to_cpup(regaddr_p);
-+
-+ host->dma_chan = NULL;
-+ host->dma_desc = NULL;
-+
-+ host->dma_chan_rxtx = dma_request_slave_channel(dev, "rx-tx");
-+
-+ clk = devm_clk_get(dev, NULL);
-+ if (IS_ERR(clk)) {
-+ ret = PTR_ERR(clk);
-+ if (ret != -EPROBE_DEFER)
-+ dev_err(dev, "could not get clk: %d\n", ret);
-+ goto err;
-+ }
-+
-+ host->max_clk = clk_get_rate(clk);
-+
-+ host->irq = platform_get_irq(pdev, 0);
-+ if (host->irq <= 0) {
-+ dev_err(dev, "get IRQ failed\n");
-+ ret = -EINVAL;
-+ goto err;
-+ }
-+
-+ ret = mmc_of_parse(mmc);
-+ if (ret)
-+ goto err;
-+
-+ ret = bcm2835_add_host(host);
-+ if (ret)
-+ goto err;
-+
-+ platform_set_drvdata(pdev, host);
-+
-+ dev_dbg(dev, "%s -> OK\n", __func__);
-+
-+ return 0;
-+
-+err:
-+ dev_dbg(dev, "%s -> err %d\n", __func__, ret);
-+ mmc_free_host(mmc);
-+
-+ return ret;
-+}
-+
-+static int bcm2835_remove(struct platform_device *pdev)
-+{
-+ struct bcm2835_host *host = platform_get_drvdata(pdev);
-+
-+ mmc_remove_host(host->mmc);
-+
-+ writel(SDVDD_POWER_OFF, host->ioaddr + SDVDD);
-+
-+ free_irq(host->irq, host);
-+
-+ cancel_work_sync(&host->dma_work);
-+ cancel_delayed_work_sync(&host->timeout_work);
-+
-+ mmc_free_host(host->mmc);
-+ platform_set_drvdata(pdev, NULL);
-+
-+ return 0;
-+}
-+
-+static const struct of_device_id bcm2835_match[] = {
-+ { .compatible = "brcm,bcm2835-sdhost" },
-+ { }
-+};
-+MODULE_DEVICE_TABLE(of, bcm2835_match);
-+
-+static struct platform_driver bcm2835_driver = {
-+ .probe = bcm2835_probe,
-+ .remove = bcm2835_remove,
-+ .driver = {
-+ .name = "sdhost-bcm2835",
-+ .of_match_table = bcm2835_match,
-+ },
-+};
-+module_platform_driver(bcm2835_driver);
-+
-+MODULE_ALIAS("platform:sdhost-bcm2835");
-+MODULE_DESCRIPTION("BCM2835 SDHost driver");
-+MODULE_LICENSE("GPL v2");
-+MODULE_AUTHOR("Phil Elwell");
-From patchwork Wed Mar 8 09:19:05 2017
-Content-Type: text/plain; charset="utf-8"
-MIME-Version: 1.0
-Content-Transfer-Encoding: 7bit
-Subject: [v4,3/7] mmc: bcm2835: add sdhost controller to devicetree
-From: Gerd Hoffmann <kraxel@redhat.com>
-X-Patchwork-Id: 9610693
-Message-Id: <1488964751-22763-6-git-send-email-kraxel@redhat.com>
-To: linux-rpi-kernel@lists.infradead.org
-Cc: mark.rutland@arm.com, stefan.wahren@i2se.com, ulf.hansson@linaro.org,
- f.fainelli@gmail.com, sbranden@broadcom.com, devicetree@vger.kernel.org,
- rjui@broadcom.com, lee@kernel.org, will.deacon@arm.com,
- linux@armlinux.org.uk,
- linux-kernel@vger.kernel.org, eric@anholt.net, robh+dt@kernel.org,
- bcm-kernel-feedback-list@broadcom.com, Gerd Hoffmann <kraxel@redhat.com>,
- catalin.marinas@arm.com, linux-mmc@vger.kernel.org,
- linux-arm-kernel@lists.infradead.org
-Date: Wed, 8 Mar 2017 10:19:05 +0100
-
-Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
-Acked-by: Eric Anholt <eric@anholt.net>
-Acked-by: Stefan Wahren <stefan.wahren@i2se.com>
----
- arch/arm/boot/dts/bcm2835-rpi.dtsi | 6 ++++++
- arch/arm/boot/dts/bcm283x.dtsi | 10 ++++++++++
- 2 files changed, 16 insertions(+)
-
-diff --git a/arch/arm/boot/dts/bcm2835-rpi.dtsi b/arch/arm/boot/dts/bcm2835-rpi.dtsi
-index 1e00a28..8b95832 100644
---- a/arch/arm/boot/dts/bcm2835-rpi.dtsi
-+++ b/arch/arm/boot/dts/bcm2835-rpi.dtsi
-@@ -69,6 +69,12 @@
- bus-width = <4>;
- };
-
-+&sdhost {
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&sdhost_gpio48>;
-+ bus-width = <4>;
-+};
-+
- &pwm {
- pinctrl-names = "default";
- pinctrl-0 = <&pwm0_gpio40 &pwm1_gpio45>;
-diff --git a/arch/arm/boot/dts/bcm283x.dtsi b/arch/arm/boot/dts/bcm283x.dtsi
-index 9798bc9..19099a5 100644
---- a/arch/arm/boot/dts/bcm283x.dtsi
-+++ b/arch/arm/boot/dts/bcm283x.dtsi
-@@ -350,6 +350,16 @@
- arm,primecell-periphid = <0x00241011>;
- };
-
-+ sdhost: mmc@7e202000 {
-+ compatible = "brcm,bcm2835-sdhost";
-+ reg = <0x7e202000 0x100>;
-+ interrupts = <2 24>;
-+ clocks = <&clocks BCM2835_CLOCK_VPU>;
-+ dmas = <&dma 13>;
-+ dma-names = "rx-tx";
-+ status = "disabled";
-+ };
-+
- i2s: i2s@7e203000 {
- compatible = "brcm,bcm2835-i2s";
- reg = <0x7e203000 0x20>,
-From patchwork Wed Mar 8 09:19:07 2017
-Content-Type: text/plain; charset="utf-8"
-MIME-Version: 1.0
-Content-Transfer-Encoding: 7bit
-Subject: [v4, 4/7] arm: set CONFIG_MMC_BCM2835=y in bcm2835_defconfig and
- multi_v7_defconfig
-From: Gerd Hoffmann <kraxel@redhat.com>
-X-Patchwork-Id: 9610689
-Message-Id: <1488964751-22763-8-git-send-email-kraxel@redhat.com>
-To: linux-rpi-kernel@lists.infradead.org
-Cc: mark.rutland@arm.com, stefan.wahren@i2se.com, ulf.hansson@linaro.org,
- f.fainelli@gmail.com, sbranden@broadcom.com, devicetree@vger.kernel.org,
- rjui@broadcom.com, lee@kernel.org, will.deacon@arm.com,
- linux@armlinux.org.uk,
- linux-kernel@vger.kernel.org, eric@anholt.net, robh+dt@kernel.org,
- bcm-kernel-feedback-list@broadcom.com, Gerd Hoffmann <kraxel@redhat.com>,
- catalin.marinas@arm.com, linux-mmc@vger.kernel.org,
- linux-arm-kernel@lists.infradead.org
-Date: Wed, 8 Mar 2017 10:19:07 +0100
-
-We need to enable this controller so that we can switch the SD card's
-pinmux over to it by default, which will improve storage performance.
-
-Read access (dd with 64k blocks on rpi2):
- CONFIG_MMC_SDHCI_IPROC: 11-12 MB/s
- CONFIG_MMC_BCM2835: 19-20 MB/s
-
-Differences on write access are pretty much in the noise.
-
-Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
----
- arch/arm/configs/bcm2835_defconfig | 1 +
- arch/arm/configs/multi_v7_defconfig | 1 +
- 2 files changed, 2 insertions(+)
-
-diff --git a/arch/arm/configs/bcm2835_defconfig b/arch/arm/configs/bcm2835_defconfig
-index 4b89f4e..3767c24 100644
---- a/arch/arm/configs/bcm2835_defconfig
-+++ b/arch/arm/configs/bcm2835_defconfig
-@@ -92,6 +92,7 @@ CONFIG_MMC=y
- CONFIG_MMC_SDHCI=y
- CONFIG_MMC_SDHCI_PLTFM=y
- CONFIG_MMC_SDHCI_IPROC=y
-+CONFIG_MMC_BCM2835=y
- CONFIG_NEW_LEDS=y
- CONFIG_LEDS_CLASS=y
- CONFIG_LEDS_GPIO=y
-diff --git a/arch/arm/configs/multi_v7_defconfig b/arch/arm/configs/multi_v7_defconfig
-index a94126f..63b94d0 100644
---- a/arch/arm/configs/multi_v7_defconfig
-+++ b/arch/arm/configs/multi_v7_defconfig
-@@ -730,6 +730,7 @@ CONFIG_MMC_DW_EXYNOS=y
- CONFIG_MMC_DW_ROCKCHIP=y
- CONFIG_MMC_SH_MMCIF=y
- CONFIG_MMC_SUNXI=y
-+CONFIG_MMC_BCM2835=y
- CONFIG_NEW_LEDS=y
- CONFIG_LEDS_CLASS=y
- CONFIG_LEDS_CLASS_FLASH=m
-From patchwork Wed Mar 8 09:19:09 2017
-Content-Type: text/plain; charset="utf-8"
-MIME-Version: 1.0
-Content-Transfer-Encoding: 7bit
-Subject: [v4,5/7] arm64: set CONFIG_MMC_BCM2835=y in defconfig
-From: Gerd Hoffmann <kraxel@redhat.com>
-X-Patchwork-Id: 9610647
-Message-Id: <1488964751-22763-10-git-send-email-kraxel@redhat.com>
-To: linux-rpi-kernel@lists.infradead.org
-Cc: mark.rutland@arm.com, stefan.wahren@i2se.com, ulf.hansson@linaro.org,
- f.fainelli@gmail.com, sbranden@broadcom.com, devicetree@vger.kernel.org,
- rjui@broadcom.com, lee@kernel.org, will.deacon@arm.com,
- linux@armlinux.org.uk,
- linux-kernel@vger.kernel.org, eric@anholt.net, robh+dt@kernel.org,
- bcm-kernel-feedback-list@broadcom.com, Gerd Hoffmann <kraxel@redhat.com>,
- catalin.marinas@arm.com, linux-mmc@vger.kernel.org,
- linux-arm-kernel@lists.infradead.org
-Date: Wed, 8 Mar 2017 10:19:09 +0100
-
-We need to enable this controller so that we can switch the SD card's
-pinmux over to it by default, which will improve storage performance.
-
-Read access (dd with 64k blocks on rpi2):
- CONFIG_MMC_SDHCI_IPROC: 11-12 MB/s
- CONFIG_MMC_BCM2835: 19-20 MB/s
-
-Differences on write access are pretty much in the noise.
-
-Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
----
- arch/arm64/configs/defconfig | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/arch/arm64/configs/defconfig b/arch/arm64/configs/defconfig
-index 7c48028..519a55c 100644
---- a/arch/arm64/configs/defconfig
-+++ b/arch/arm64/configs/defconfig
-@@ -398,6 +398,7 @@ CONFIG_MMC_DW_EXYNOS=y
- CONFIG_MMC_DW_K3=y
- CONFIG_MMC_DW_ROCKCHIP=y
- CONFIG_MMC_SUNXI=y
-+CONFIG_MMC_BCM2835=y
- CONFIG_NEW_LEDS=y
- CONFIG_LEDS_CLASS=y
- CONFIG_LEDS_GPIO=y
-From patchwork Wed Mar 8 09:19:10 2017
-Content-Type: text/plain; charset="utf-8"
-MIME-Version: 1.0
-Content-Transfer-Encoding: 7bit
-Subject: [v4,6/7] arm: dts: bcm283x: switch from &sdhci to &sdhost
-From: Gerd Hoffmann <kraxel@redhat.com>
-X-Patchwork-Id: 9610687
-Message-Id: <1488964751-22763-11-git-send-email-kraxel@redhat.com>
-To: linux-rpi-kernel@lists.infradead.org
-Cc: mark.rutland@arm.com, stefan.wahren@i2se.com, ulf.hansson@linaro.org,
- f.fainelli@gmail.com, sbranden@broadcom.com, devicetree@vger.kernel.org,
- rjui@broadcom.com, lee@kernel.org, will.deacon@arm.com,
- linux@armlinux.org.uk,
- linux-kernel@vger.kernel.org, eric@anholt.net, robh+dt@kernel.org,
- bcm-kernel-feedback-list@broadcom.com, Gerd Hoffmann <kraxel@redhat.com>,
- catalin.marinas@arm.com, linux-mmc@vger.kernel.org,
- linux-arm-kernel@lists.infradead.org
-Date: Wed, 8 Mar 2017 10:19:10 +0100
-
-sdcard access with the sdhost controller is faster.
-
-Read access (dd with 64k blocks on rpi2):
- CONFIG_MMC_SDHCI_IPROC: 11-12 MB/s
- CONFIG_MMC_BCM2835: 19-20 MB/s
-
-Differences on write access are pretty much in the noise.
-
-Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
-Acked-by: Eric Anholt <eric@anholt.net>
----
- arch/arm/boot/dts/bcm2835-rpi.dtsi | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/arch/arm/boot/dts/bcm2835-rpi.dtsi b/arch/arm/boot/dts/bcm2835-rpi.dtsi
-index 8b95832..e36c392 100644
---- a/arch/arm/boot/dts/bcm2835-rpi.dtsi
-+++ b/arch/arm/boot/dts/bcm2835-rpi.dtsi
-@@ -65,13 +65,13 @@
- &sdhci {
- pinctrl-names = "default";
- pinctrl-0 = <&emmc_gpio48>;
-- status = "okay";
- bus-width = <4>;
- };
-
- &sdhost {
- pinctrl-names = "default";
- pinctrl-0 = <&sdhost_gpio48>;
-+ status = "okay";
- bus-width = <4>;
- };
-
-From patchwork Wed Mar 8 09:19:11 2017
-Content-Type: text/plain; charset="utf-8"
-MIME-Version: 1.0
-Content-Transfer-Encoding: 7bit
-Subject: [v4,7/7] arm64: dts: bcm2837: add &sdhci and &sdhost
-From: Gerd Hoffmann <kraxel@redhat.com>
-X-Patchwork-Id: 9610637
-Message-Id: <1488964751-22763-12-git-send-email-kraxel@redhat.com>
-To: linux-rpi-kernel@lists.infradead.org
-Cc: mark.rutland@arm.com, stefan.wahren@i2se.com, ulf.hansson@linaro.org,
- f.fainelli@gmail.com, sbranden@broadcom.com, devicetree@vger.kernel.org,
- rjui@broadcom.com, lee@kernel.org, will.deacon@arm.com,
- linux@armlinux.org.uk,
- linux-kernel@vger.kernel.org, eric@anholt.net, robh+dt@kernel.org,
- bcm-kernel-feedback-list@broadcom.com, Gerd Hoffmann <kraxel@redhat.com>,
- catalin.marinas@arm.com, linux-mmc@vger.kernel.org,
- linux-arm-kernel@lists.infradead.org
-Date: Wed, 8 Mar 2017 10:19:11 +0100
-
-For the raspberry pi 3 we'll need both sdhci (handles sdio wifi) and
-sdhost (handles sdcard).
-
-Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
-Acked-by: Eric Anholt <eric@anholt.net>
----
- arch/arm64/boot/dts/broadcom/bcm2837-rpi-3-b.dts | 17 +++++++++++++++++
- 1 file changed, 17 insertions(+)
-
-diff --git a/arch/arm64/boot/dts/broadcom/bcm2837-rpi-3-b.dts b/arch/arm64/boot/dts/broadcom/bcm2837-rpi-3-b.dts
-index c309633..972f14d 100644
---- a/arch/arm64/boot/dts/broadcom/bcm2837-rpi-3-b.dts
-+++ b/arch/arm64/boot/dts/broadcom/bcm2837-rpi-3-b.dts
-@@ -22,3 +22,20 @@
- &uart1 {
- status = "okay";
- };
-+
-+/* SDHCI is used to control the SDIO for wireless */
-+&sdhci {
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&emmc_gpio34>;
-+ status = "okay";
-+ bus-width = <4>;
-+ non-removable;
-+};
-+
-+/* SDHOST is used to drive the SD card */
-+&sdhost {
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&sdhost_gpio48>;
-+ status = "okay";
-+ bus-width = <4>;
-+};
-From patchwork Sat Mar 25 13:17:00 2017
-Content-Type: text/plain; charset="utf-8"
-MIME-Version: 1.0
-Content-Transfer-Encoding: 7bit
-Subject: mmc: bcm2835: Fix possible NULL ptr dereference in bcm2835_request
-From: Stefan Wahren <stefan.wahren@i2se.com>
-X-Patchwork-Id: 9644591
-Message-Id: <1490447820-751-1-git-send-email-stefan.wahren@i2se.com>
-To: Ulf Hansson <ulf.hansson@linaro.org>, Eric Anholt <eric@anholt.net>,
- Gerd Hoffmann <kraxel@redhat.com>
-Cc: Jaehoon Chung <jh80.chung@samsung.com>,
- Dan Carpenter <dan.carpenter@oracle.com>,
- linux-rpi-kernel@lists.infradead.org, linux-mmc@vger.kernel.org,
- Stefan Wahren <stefan.wahren@i2se.com>
-Date: Sat, 25 Mar 2017 13:17:00 +0000
-
-This fixes a NULL pointer dereference in case of a MMC request with a
-set block count command and no data.
-
-Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
-Signed-off-by: Stefan Wahren <stefan.wahren@i2se.com>
----
- drivers/mmc/host/bcm2835.c | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
-diff --git a/drivers/mmc/host/bcm2835.c b/drivers/mmc/host/bcm2835.c
-index 7d1b0db..1f343a4 100644
---- a/drivers/mmc/host/bcm2835.c
-+++ b/drivers/mmc/host/bcm2835.c
-@@ -1200,7 +1200,8 @@ static void bcm2835_request(struct mmc_host *mmc, struct mmc_request *mrq)
- return;
- }
-
-- host->use_sbc = !!mrq->sbc && (host->mrq->data->flags & MMC_DATA_READ);
-+ host->use_sbc = !!mrq->sbc && host->mrq->data &&
-+ (host->mrq->data->flags & MMC_DATA_READ);
- if (host->use_sbc) {
- if (bcm2835_send_command(host, mrq->sbc)) {
- if (!host->use_busy)
diff --git a/gitrev b/gitrev
index 6051de6ff..f40c51224 100644
--- a/gitrev
+++ b/gitrev
@@ -1 +1 @@
-d3b5d35290d729a2518af00feca867385a1b08fa
+89c9fea3c8034cdb2fd745f551cde0b507fd6893
diff --git a/kernel-aarch64-debug.config b/kernel-aarch64-debug.config
index 4af36abe6..b67337f95 100644
--- a/kernel-aarch64-debug.config
+++ b/kernel-aarch64-debug.config
@@ -697,14 +697,17 @@ CONFIG_CAN_ESD_USB2=m
# CONFIG_CAN_GRCAN is not set
CONFIG_CAN_GS_USB=m
CONFIG_CAN_GW=m
+CONFIG_CAN_HI311X=m
CONFIG_CAN_IFI_CANFD=m
CONFIG_CAN_KVASER_PCI=m
CONFIG_CAN_KVASER_USB=m
CONFIG_CAN_LEDS=y
CONFIG_CAN=m
CONFIG_CAN_M_CAN=m
+CONFIG_CAN_MCBA_USB=m
# CONFIG_CAN_MCP251X is not set
CONFIG_CAN_PEAK_PCIEC=y
+CONFIG_CAN_PEAK_PCIEFD=m
CONFIG_CAN_PEAK_PCI=m
# CONFIG_CAN_PEAK_PCMCIA is not set
CONFIG_CAN_PEAK_USB=m
@@ -719,6 +722,7 @@ CONFIG_CAN_SOFTING=m
CONFIG_CAN_SUN4I=m
# CONFIG_CAN_TSCAN1 is not set
CONFIG_CAN_VCAN=m
+CONFIG_CAN_VXCAN=m
# CONFIG_CAN_XILINXCAN is not set
CONFIG_CAPI_AVM=y
# CONFIG_CAPI_EICON is not set
@@ -961,6 +965,7 @@ CONFIG_CRYPTO_CTR=y
CONFIG_CRYPTO_CTS=y
CONFIG_CRYPTO_DEFLATE=m
CONFIG_CRYPTO_DES=m
+CONFIG_CRYPTO_DEV_CAVIUM_ZIP=m
CONFIG_CRYPTO_DEV_CCP_CRYPTO=m
CONFIG_CRYPTO_DEV_CCP_DD=m
CONFIG_CRYPTO_DEV_CCP=y
@@ -1730,6 +1735,7 @@ CONFIG_HI6220_MBOX=m
# CONFIG_HI8435 is not set
CONFIG_HIBERNATION=y
CONFIG_HID_A4TECH=m
+CONFIG_HID_ACCUTOUCH=m
CONFIG_HID_ACRUX_FF=y
CONFIG_HID_ACRUX=m
CONFIG_HID_ALPS=m
@@ -1773,6 +1779,7 @@ CONFIG_HID_MAYFLASH=m
CONFIG_HID_MICROSOFT=m
CONFIG_HID_MONTEREY=m
CONFIG_HID_MULTITOUCH=m
+CONFIG_HID_NTI=m
CONFIG_HID_NTRIG=y
CONFIG_HID_ORTEK=m
CONFIG_HID_PANTHERLORD=m
@@ -2013,6 +2020,8 @@ CONFIG_IEEE802154_ADF7242=m
# CONFIG_IEEE802154_AT86RF230_DEBUGFS is not set
CONFIG_IEEE802154_AT86RF230=m
CONFIG_IEEE802154_ATUSB=m
+# CONFIG_IEEE802154_CA8210_DEBUGFS is not set
+CONFIG_IEEE802154_CA8210=m
CONFIG_IEEE802154_CC2520=m
CONFIG_IEEE802154_DRIVERS=m
CONFIG_IEEE802154_FAKELB=m
@@ -2969,6 +2978,7 @@ CONFIG_MLX4_EN=m
CONFIG_MLX4_INFINIBAND=m
CONFIG_MLX5_CORE_EN_DCB=y
CONFIG_MLX5_CORE_EN=y
+CONFIG_MLX5_CORE_IPOIB=y
CONFIG_MLX5_CORE=m
CONFIG_MLX5_INFINIBAND=m
# CONFIG_MLX90614 is not set
@@ -2995,6 +3005,7 @@ CONFIG_MMC_BCM2835=m
CONFIG_MMC_BLOCK_BOUNCE=y
CONFIG_MMC_BLOCK=m
CONFIG_MMC_BLOCK_MINORS=8
+CONFIG_MMC_CAVIUM_THUNDERX=m
CONFIG_MMC_CB710=m
# CONFIG_MMC_DEBUG is not set
# CONFIG_MMC_DW_EXYNOS is not set
@@ -3025,6 +3036,7 @@ CONFIG_MMC_SDHCI_PCI=m
CONFIG_MMC_SDHCI_PLTFM=m
CONFIG_MMC_SDHCI_PXAV3=m
CONFIG_MMC_SDHCI_TEGRA=m
+CONFIG_MMC_SDHCI_XENON=m
CONFIG_MMC_SDRICOH_CS=m
CONFIG_MMC_SPI=m
CONFIG_MMC_SUNXI=m
@@ -3251,11 +3263,15 @@ CONFIG_NET_DEVLINK=m
CONFIG_NET_DROP_MONITOR=y
CONFIG_NET_DSA_BCM_SF2=m
CONFIG_NET_DSA_HWMON=y
+CONFIG_NET_DSA_LOOP=m
CONFIG_NET_DSA=m
+CONFIG_NET_DSA_MT7530=m
CONFIG_NET_DSA_MV88E6060=m
CONFIG_NET_DSA_MV88E6XXX_GLOBAL2=y
CONFIG_NET_DSA_MV88E6XXX=m
CONFIG_NET_DSA_QCA8K=m
+CONFIG_NET_DSA_SMSC_LAN9303_I2C=m
+CONFIG_NET_DSA_SMSC_LAN9303_MDIO=m
CONFIG_NET_EMATCH_CANID=m
CONFIG_NET_EMATCH_CMP=m
CONFIG_NET_EMATCH_IPSET=m
@@ -3378,6 +3394,7 @@ CONFIG_NET_SCH_ATM=m
CONFIG_NET_SCH_CBQ=m
CONFIG_NET_SCH_CHOKE=m
CONFIG_NET_SCH_CODEL=m
+# CONFIG_NET_SCH_DEFAULT is not set
CONFIG_NET_SCH_DRR=m
CONFIG_NET_SCH_DSMARK=m
CONFIG_NET_SCHED=y
@@ -3473,6 +3490,7 @@ CONFIG_NETWORK_FILESYSTEMS=y
CONFIG_NETWORK_PHY_TIMESTAMPING=y
CONFIG_NETXEN_NIC=m
CONFIG_NET_XGENE=m
+CONFIG_NET_XGENE_V2=m
CONFIG_NET=y
CONFIG_NEW_LEDS=y
CONFIG_NFC_DIGITAL=m
@@ -4275,6 +4293,8 @@ CONFIG_ROCKETPORT=m
CONFIG_ROMFS_FS=m
CONFIG_ROSE=m
CONFIG_RPCSEC_GSS_KRB5=m
+# CONFIG_RPMSG_CHAR is not set
+CONFIG_RPMSG_QCOM_SMD=m
CONFIG_RPR0521=m
CONFIG_RSI_91X=m
CONFIG_RSI_DEBUGFS=y
@@ -5439,6 +5459,7 @@ CONFIG_THUNDER_NIC_VF=m
# CONFIG_TI_DAC7512 is not set
CONFIG_TIFM_7XX1=m
CONFIG_TIFM_CORE=m
+CONFIG_TIGON3_HWMON=y
CONFIG_TIGON3=m
# CONFIG_TIMB_DMA is not set
# CONFIG_TIMER_STATS is not set
@@ -6123,6 +6144,7 @@ CONFIG_VLSI_FIR=m
# CONFIG_VMXNET3 is not set
CONFIG_VORTEX=m
CONFIG_VSOCKETS=m
+CONFIG_VSOCKMON=m
# CONFIG_VT6655 is not set
# CONFIG_VT6656 is not set
CONFIG_VT_CONSOLE=y
diff --git a/kernel-aarch64.config b/kernel-aarch64.config
index 530a9eab3..86df52c5b 100644
--- a/kernel-aarch64.config
+++ b/kernel-aarch64.config
@@ -697,14 +697,17 @@ CONFIG_CAN_ESD_USB2=m
# CONFIG_CAN_GRCAN is not set
CONFIG_CAN_GS_USB=m
CONFIG_CAN_GW=m
+CONFIG_CAN_HI311X=m
CONFIG_CAN_IFI_CANFD=m
CONFIG_CAN_KVASER_PCI=m
CONFIG_CAN_KVASER_USB=m
CONFIG_CAN_LEDS=y
CONFIG_CAN=m
CONFIG_CAN_M_CAN=m
+CONFIG_CAN_MCBA_USB=m
# CONFIG_CAN_MCP251X is not set
CONFIG_CAN_PEAK_PCIEC=y
+CONFIG_CAN_PEAK_PCIEFD=m
CONFIG_CAN_PEAK_PCI=m
# CONFIG_CAN_PEAK_PCMCIA is not set
CONFIG_CAN_PEAK_USB=m
@@ -719,6 +722,7 @@ CONFIG_CAN_SOFTING=m
CONFIG_CAN_SUN4I=m
# CONFIG_CAN_TSCAN1 is not set
CONFIG_CAN_VCAN=m
+CONFIG_CAN_VXCAN=m
# CONFIG_CAN_XILINXCAN is not set
CONFIG_CAPI_AVM=y
# CONFIG_CAPI_EICON is not set
@@ -960,6 +964,7 @@ CONFIG_CRYPTO_CTR=y
CONFIG_CRYPTO_CTS=y
CONFIG_CRYPTO_DEFLATE=m
CONFIG_CRYPTO_DES=m
+CONFIG_CRYPTO_DEV_CAVIUM_ZIP=m
CONFIG_CRYPTO_DEV_CCP_CRYPTO=m
CONFIG_CRYPTO_DEV_CCP_DD=m
CONFIG_CRYPTO_DEV_CCP=y
@@ -1713,6 +1718,7 @@ CONFIG_HI6220_MBOX=m
# CONFIG_HI8435 is not set
CONFIG_HIBERNATION=y
CONFIG_HID_A4TECH=m
+CONFIG_HID_ACCUTOUCH=m
CONFIG_HID_ACRUX_FF=y
CONFIG_HID_ACRUX=m
CONFIG_HID_ALPS=m
@@ -1756,6 +1762,7 @@ CONFIG_HID_MAYFLASH=m
CONFIG_HID_MICROSOFT=m
CONFIG_HID_MONTEREY=m
CONFIG_HID_MULTITOUCH=m
+CONFIG_HID_NTI=m
CONFIG_HID_NTRIG=y
CONFIG_HID_ORTEK=m
CONFIG_HID_PANTHERLORD=m
@@ -1996,6 +2003,8 @@ CONFIG_IEEE802154_ADF7242=m
# CONFIG_IEEE802154_AT86RF230_DEBUGFS is not set
CONFIG_IEEE802154_AT86RF230=m
CONFIG_IEEE802154_ATUSB=m
+# CONFIG_IEEE802154_CA8210_DEBUGFS is not set
+CONFIG_IEEE802154_CA8210=m
CONFIG_IEEE802154_CC2520=m
CONFIG_IEEE802154_DRIVERS=m
CONFIG_IEEE802154_FAKELB=m
@@ -2949,6 +2958,7 @@ CONFIG_MLX4_EN=m
CONFIG_MLX4_INFINIBAND=m
CONFIG_MLX5_CORE_EN_DCB=y
CONFIG_MLX5_CORE_EN=y
+CONFIG_MLX5_CORE_IPOIB=y
CONFIG_MLX5_CORE=m
CONFIG_MLX5_INFINIBAND=m
# CONFIG_MLX90614 is not set
@@ -2975,6 +2985,7 @@ CONFIG_MMC_BCM2835=m
CONFIG_MMC_BLOCK_BOUNCE=y
CONFIG_MMC_BLOCK=m
CONFIG_MMC_BLOCK_MINORS=8
+CONFIG_MMC_CAVIUM_THUNDERX=m
CONFIG_MMC_CB710=m
# CONFIG_MMC_DEBUG is not set
# CONFIG_MMC_DW_EXYNOS is not set
@@ -3005,6 +3016,7 @@ CONFIG_MMC_SDHCI_PCI=m
CONFIG_MMC_SDHCI_PLTFM=m
CONFIG_MMC_SDHCI_PXAV3=m
CONFIG_MMC_SDHCI_TEGRA=m
+CONFIG_MMC_SDHCI_XENON=m
CONFIG_MMC_SDRICOH_CS=m
CONFIG_MMC_SPI=m
CONFIG_MMC_SUNXI=m
@@ -3230,11 +3242,15 @@ CONFIG_NET_DEVLINK=m
CONFIG_NET_DROP_MONITOR=y
CONFIG_NET_DSA_BCM_SF2=m
CONFIG_NET_DSA_HWMON=y
+CONFIG_NET_DSA_LOOP=m
CONFIG_NET_DSA=m
+CONFIG_NET_DSA_MT7530=m
CONFIG_NET_DSA_MV88E6060=m
CONFIG_NET_DSA_MV88E6XXX_GLOBAL2=y
CONFIG_NET_DSA_MV88E6XXX=m
CONFIG_NET_DSA_QCA8K=m
+CONFIG_NET_DSA_SMSC_LAN9303_I2C=m
+CONFIG_NET_DSA_SMSC_LAN9303_MDIO=m
CONFIG_NET_EMATCH_CANID=m
CONFIG_NET_EMATCH_CMP=m
CONFIG_NET_EMATCH_IPSET=m
@@ -3357,6 +3373,7 @@ CONFIG_NET_SCH_ATM=m
CONFIG_NET_SCH_CBQ=m
CONFIG_NET_SCH_CHOKE=m
CONFIG_NET_SCH_CODEL=m
+# CONFIG_NET_SCH_DEFAULT is not set
CONFIG_NET_SCH_DRR=m
CONFIG_NET_SCH_DSMARK=m
CONFIG_NET_SCHED=y
@@ -3452,6 +3469,7 @@ CONFIG_NETWORK_FILESYSTEMS=y
CONFIG_NETWORK_PHY_TIMESTAMPING=y
CONFIG_NETXEN_NIC=m
CONFIG_NET_XGENE=m
+CONFIG_NET_XGENE_V2=m
CONFIG_NET=y
CONFIG_NEW_LEDS=y
CONFIG_NFC_DIGITAL=m
@@ -4253,6 +4271,8 @@ CONFIG_ROCKETPORT=m
CONFIG_ROMFS_FS=m
CONFIG_ROSE=m
CONFIG_RPCSEC_GSS_KRB5=m
+# CONFIG_RPMSG_CHAR is not set
+CONFIG_RPMSG_QCOM_SMD=m
CONFIG_RPR0521=m
CONFIG_RSI_91X=m
CONFIG_RSI_DEBUGFS=y
@@ -5416,6 +5436,7 @@ CONFIG_THUNDER_NIC_VF=m
# CONFIG_TI_DAC7512 is not set
CONFIG_TIFM_7XX1=m
CONFIG_TIFM_CORE=m
+CONFIG_TIGON3_HWMON=y
CONFIG_TIGON3=m
# CONFIG_TIMB_DMA is not set
# CONFIG_TIMER_STATS is not set
@@ -6100,6 +6121,7 @@ CONFIG_VLSI_FIR=m
# CONFIG_VMXNET3 is not set
CONFIG_VORTEX=m
CONFIG_VSOCKETS=m
+CONFIG_VSOCKMON=m
# CONFIG_VT6655 is not set
# CONFIG_VT6656 is not set
CONFIG_VT_CONSOLE=y
diff --git a/kernel-armv7hl-debug.config b/kernel-armv7hl-debug.config
index 9f6c2b236..d9eac6a58 100644
--- a/kernel-armv7hl-debug.config
+++ b/kernel-armv7hl-debug.config
@@ -745,14 +745,17 @@ CONFIG_CAN_FLEXCAN=m
# CONFIG_CAN_GRCAN is not set
CONFIG_CAN_GS_USB=m
CONFIG_CAN_GW=m
+CONFIG_CAN_HI311X=m
CONFIG_CAN_IFI_CANFD=m
CONFIG_CAN_KVASER_PCI=m
CONFIG_CAN_KVASER_USB=m
CONFIG_CAN_LEDS=y
CONFIG_CAN=m
CONFIG_CAN_M_CAN=m
+CONFIG_CAN_MCBA_USB=m
# CONFIG_CAN_MCP251X is not set
CONFIG_CAN_PEAK_PCIEC=y
+CONFIG_CAN_PEAK_PCIEFD=m
CONFIG_CAN_PEAK_PCI=m
# CONFIG_CAN_PEAK_PCMCIA is not set
CONFIG_CAN_PEAK_USB=m
@@ -770,6 +773,7 @@ CONFIG_CAN_SUN4I=m
# CONFIG_CAN_TI_HECC is not set
# CONFIG_CAN_TSCAN1 is not set
CONFIG_CAN_VCAN=m
+CONFIG_CAN_VXCAN=m
# CONFIG_CAN_XILINXCAN is not set
CONFIG_CAPI_AVM=y
# CONFIG_CAPI_EICON is not set
@@ -1007,7 +1011,9 @@ CONFIG_CRYPTO_CTR=y
CONFIG_CRYPTO_CTS=y
CONFIG_CRYPTO_DEFLATE=m
CONFIG_CRYPTO_DES=m
+# CONFIG_CRYPTO_DEV_CAVIUM_ZIP is not set
CONFIG_CRYPTO_DEV_CHELSIO=m
+CONFIG_CRYPTO_DEV_EXYNOS_RNG=m
CONFIG_CRYPTO_DEV_FSL_CAAM_AHASH_API=m
CONFIG_CRYPTO_DEV_FSL_CAAM_CRYPTO_API=m
# CONFIG_CRYPTO_DEV_FSL_CAAM_DEBUG is not set
@@ -1876,6 +1882,7 @@ CONFIG_HFSPLUS_FS=m
# CONFIG_HI8435 is not set
CONFIG_HIBERNATION=y
CONFIG_HID_A4TECH=m
+CONFIG_HID_ACCUTOUCH=m
CONFIG_HID_ACRUX_FF=y
CONFIG_HID_ACRUX=m
CONFIG_HID_ALPS=m
@@ -1919,6 +1926,7 @@ CONFIG_HID_MAYFLASH=m
CONFIG_HID_MICROSOFT=m
CONFIG_HID_MONTEREY=m
CONFIG_HID_MULTITOUCH=m
+CONFIG_HID_NTI=m
CONFIG_HID_NTRIG=y
CONFIG_HID_ORTEK=m
CONFIG_HID_PANTHERLORD=m
@@ -2161,6 +2169,8 @@ CONFIG_IEEE802154_ADF7242=m
# CONFIG_IEEE802154_AT86RF230_DEBUGFS is not set
CONFIG_IEEE802154_AT86RF230=m
CONFIG_IEEE802154_ATUSB=m
+# CONFIG_IEEE802154_CA8210_DEBUGFS is not set
+CONFIG_IEEE802154_CA8210=m
CONFIG_IEEE802154_CC2520=m
CONFIG_IEEE802154_DRIVERS=m
CONFIG_IEEE802154_FAKELB=m
@@ -3185,6 +3195,7 @@ CONFIG_MLX4_EN=m
CONFIG_MLX4_INFINIBAND=m
CONFIG_MLX5_CORE_EN_DCB=y
CONFIG_MLX5_CORE_EN=y
+CONFIG_MLX5_CORE_IPOIB=y
CONFIG_MLX5_CORE=m
CONFIG_MLX5_INFINIBAND=m
# CONFIG_MLX90614 is not set
@@ -3211,6 +3222,7 @@ CONFIG_MMC_BCM2835=m
CONFIG_MMC_BLOCK_BOUNCE=y
CONFIG_MMC_BLOCK=m
CONFIG_MMC_BLOCK_MINORS=8
+# CONFIG_MMC_CAVIUM_THUNDERX is not set
CONFIG_MMC_CB710=m
# CONFIG_MMC_DEBUG is not set
CONFIG_MMC_DW_EXYNOS=m
@@ -3250,6 +3262,7 @@ CONFIG_MMC_SDHCI_S3C_DMA=y
CONFIG_MMC_SDHCI_S3C=m
CONFIG_MMC_SDHCI_ST=m
CONFIG_MMC_SDHCI_TEGRA=m
+CONFIG_MMC_SDHCI_XENON=m
CONFIG_MMC_SDRICOH_CS=m
CONFIG_MMC_SPI=m
CONFIG_MMC_SUNXI=m
@@ -3511,11 +3524,15 @@ CONFIG_NET_DEVLINK=m
CONFIG_NET_DROP_MONITOR=y
CONFIG_NET_DSA_BCM_SF2=m
CONFIG_NET_DSA_HWMON=y
+CONFIG_NET_DSA_LOOP=m
CONFIG_NET_DSA=m
+CONFIG_NET_DSA_MT7530=m
CONFIG_NET_DSA_MV88E6060=m
CONFIG_NET_DSA_MV88E6XXX_GLOBAL2=y
CONFIG_NET_DSA_MV88E6XXX=m
CONFIG_NET_DSA_QCA8K=m
+CONFIG_NET_DSA_SMSC_LAN9303_I2C=m
+CONFIG_NET_DSA_SMSC_LAN9303_MDIO=m
CONFIG_NET_EMATCH_CANID=m
CONFIG_NET_EMATCH_CMP=m
CONFIG_NET_EMATCH_IPSET=m
@@ -3637,6 +3654,7 @@ CONFIG_NET_SCH_ATM=m
CONFIG_NET_SCH_CBQ=m
CONFIG_NET_SCH_CHOKE=m
CONFIG_NET_SCH_CODEL=m
+# CONFIG_NET_SCH_DEFAULT is not set
CONFIG_NET_SCH_DRR=m
CONFIG_NET_SCH_DSMARK=m
CONFIG_NET_SCHED=y
@@ -3734,6 +3752,7 @@ CONFIG_NET_VRF=m
CONFIG_NETWORK_FILESYSTEMS=y
CONFIG_NETWORK_PHY_TIMESTAMPING=y
CONFIG_NETXEN_NIC=m
+# CONFIG_NET_XGENE_V2 is not set
CONFIG_NET=y
CONFIG_NEW_LEDS=y
CONFIG_NFC_DIGITAL=m
@@ -4635,6 +4654,7 @@ CONFIG_ROMFS_FS=m
CONFIG_ROSE=m
CONFIG_RPCSEC_GSS_KRB5=m
# CONFIG_RPMSG_CHAR is not set
+CONFIG_RPMSG_QCOM_SMD=m
CONFIG_RPR0521=m
CONFIG_RSI_91X=m
CONFIG_RSI_DEBUGFS=y
@@ -5952,6 +5972,7 @@ CONFIG_TI_EDMA=y
CONFIG_TI_EMIF=m
CONFIG_TIFM_7XX1=m
CONFIG_TIFM_CORE=m
+CONFIG_TIGON3_HWMON=y
CONFIG_TIGON3=m
# CONFIG_TIMB_DMA is not set
# CONFIG_TIMER_STATS is not set
@@ -6702,6 +6723,7 @@ CONFIG_VLSI_FIR=m
# CONFIG_VMXNET3 is not set
CONFIG_VORTEX=m
CONFIG_VSOCKETS=m
+CONFIG_VSOCKMON=m
# CONFIG_VT6655 is not set
# CONFIG_VT6656 is not set
CONFIG_VT_CONSOLE=y
diff --git a/kernel-armv7hl-lpae-debug.config b/kernel-armv7hl-lpae-debug.config
index c7e2758e9..69cb8c8d0 100644
--- a/kernel-armv7hl-lpae-debug.config
+++ b/kernel-armv7hl-lpae-debug.config
@@ -723,14 +723,17 @@ CONFIG_CAN_ESD_USB2=m
# CONFIG_CAN_GRCAN is not set
CONFIG_CAN_GS_USB=m
CONFIG_CAN_GW=m
+CONFIG_CAN_HI311X=m
CONFIG_CAN_IFI_CANFD=m
CONFIG_CAN_KVASER_PCI=m
CONFIG_CAN_KVASER_USB=m
CONFIG_CAN_LEDS=y
CONFIG_CAN=m
CONFIG_CAN_M_CAN=m
+CONFIG_CAN_MCBA_USB=m
# CONFIG_CAN_MCP251X is not set
CONFIG_CAN_PEAK_PCIEC=y
+CONFIG_CAN_PEAK_PCIEFD=m
CONFIG_CAN_PEAK_PCI=m
# CONFIG_CAN_PEAK_PCMCIA is not set
CONFIG_CAN_PEAK_USB=m
@@ -748,6 +751,7 @@ CONFIG_CAN_SUN4I=m
# CONFIG_CAN_TI_HECC is not set
# CONFIG_CAN_TSCAN1 is not set
CONFIG_CAN_VCAN=m
+CONFIG_CAN_VXCAN=m
# CONFIG_CAN_XILINXCAN is not set
CONFIG_CAPI_AVM=y
# CONFIG_CAPI_EICON is not set
@@ -978,7 +982,9 @@ CONFIG_CRYPTO_CTR=y
CONFIG_CRYPTO_CTS=y
CONFIG_CRYPTO_DEFLATE=m
CONFIG_CRYPTO_DES=m
+# CONFIG_CRYPTO_DEV_CAVIUM_ZIP is not set
CONFIG_CRYPTO_DEV_CHELSIO=m
+CONFIG_CRYPTO_DEV_EXYNOS_RNG=m
CONFIG_CRYPTO_DEV_HIFN_795X=m
CONFIG_CRYPTO_DEV_HIFN_795X_RNG=y
CONFIG_CRYPTO_DEV_MARVELL_CESA=m
@@ -1780,6 +1786,7 @@ CONFIG_HFSPLUS_FS=m
# CONFIG_HI8435 is not set
CONFIG_HIBERNATION=y
CONFIG_HID_A4TECH=m
+CONFIG_HID_ACCUTOUCH=m
CONFIG_HID_ACRUX_FF=y
CONFIG_HID_ACRUX=m
CONFIG_HID_ALPS=m
@@ -1823,6 +1830,7 @@ CONFIG_HID_MAYFLASH=m
CONFIG_HID_MICROSOFT=m
CONFIG_HID_MONTEREY=m
CONFIG_HID_MULTITOUCH=m
+CONFIG_HID_NTI=m
CONFIG_HID_NTRIG=y
CONFIG_HID_ORTEK=m
CONFIG_HID_PANTHERLORD=m
@@ -2057,6 +2065,8 @@ CONFIG_IEEE802154_ADF7242=m
# CONFIG_IEEE802154_AT86RF230_DEBUGFS is not set
CONFIG_IEEE802154_AT86RF230=m
CONFIG_IEEE802154_ATUSB=m
+# CONFIG_IEEE802154_CA8210_DEBUGFS is not set
+CONFIG_IEEE802154_CA8210=m
CONFIG_IEEE802154_CC2520=m
CONFIG_IEEE802154_DRIVERS=m
CONFIG_IEEE802154_FAKELB=m
@@ -3048,6 +3058,7 @@ CONFIG_MLX4_EN=m
CONFIG_MLX4_INFINIBAND=m
CONFIG_MLX5_CORE_EN_DCB=y
CONFIG_MLX5_CORE_EN=y
+CONFIG_MLX5_CORE_IPOIB=y
CONFIG_MLX5_CORE=m
CONFIG_MLX5_INFINIBAND=m
# CONFIG_MLX90614 is not set
@@ -3074,6 +3085,7 @@ CONFIG_MMC_BCM2835=m
CONFIG_MMC_BLOCK_BOUNCE=y
CONFIG_MMC_BLOCK=m
CONFIG_MMC_BLOCK_MINORS=8
+# CONFIG_MMC_CAVIUM_THUNDERX is not set
CONFIG_MMC_CB710=m
# CONFIG_MMC_DEBUG is not set
CONFIG_MMC_DW_EXYNOS=m
@@ -3107,6 +3119,7 @@ CONFIG_MMC_SDHCI_PXAV3=m
CONFIG_MMC_SDHCI_S3C_DMA=y
CONFIG_MMC_SDHCI_S3C=m
CONFIG_MMC_SDHCI_TEGRA=m
+CONFIG_MMC_SDHCI_XENON=m
CONFIG_MMC_SDRICOH_CS=m
CONFIG_MMC_SPI=m
CONFIG_MMC_SUNXI=m
@@ -3349,11 +3362,15 @@ CONFIG_NET_DEVLINK=m
CONFIG_NET_DROP_MONITOR=y
CONFIG_NET_DSA_BCM_SF2=m
CONFIG_NET_DSA_HWMON=y
+CONFIG_NET_DSA_LOOP=m
CONFIG_NET_DSA=m
+CONFIG_NET_DSA_MT7530=m
CONFIG_NET_DSA_MV88E6060=m
CONFIG_NET_DSA_MV88E6XXX_GLOBAL2=y
CONFIG_NET_DSA_MV88E6XXX=m
CONFIG_NET_DSA_QCA8K=m
+CONFIG_NET_DSA_SMSC_LAN9303_I2C=m
+CONFIG_NET_DSA_SMSC_LAN9303_MDIO=m
CONFIG_NET_EMATCH_CANID=m
CONFIG_NET_EMATCH_CMP=m
CONFIG_NET_EMATCH_IPSET=m
@@ -3475,6 +3492,7 @@ CONFIG_NET_SCH_ATM=m
CONFIG_NET_SCH_CBQ=m
CONFIG_NET_SCH_CHOKE=m
CONFIG_NET_SCH_CODEL=m
+# CONFIG_NET_SCH_DEFAULT is not set
CONFIG_NET_SCH_DRR=m
CONFIG_NET_SCH_DSMARK=m
CONFIG_NET_SCHED=y
@@ -3570,6 +3588,7 @@ CONFIG_NET_VRF=m
CONFIG_NETWORK_FILESYSTEMS=y
CONFIG_NETWORK_PHY_TIMESTAMPING=y
CONFIG_NETXEN_NIC=m
+# CONFIG_NET_XGENE_V2 is not set
CONFIG_NET=y
CONFIG_NEW_LEDS=y
CONFIG_NFC_DIGITAL=m
@@ -4364,6 +4383,7 @@ CONFIG_ROMFS_FS=m
CONFIG_ROSE=m
CONFIG_RPCSEC_GSS_KRB5=m
# CONFIG_RPMSG_CHAR is not set
+CONFIG_RPMSG_QCOM_SMD=m
CONFIG_RPR0521=m
CONFIG_RSI_91X=m
CONFIG_RSI_DEBUGFS=y
@@ -5569,6 +5589,7 @@ CONFIG_TI_DAVINCI_MDIO=m
CONFIG_TI_EDMA=y
CONFIG_TIFM_7XX1=m
CONFIG_TIFM_CORE=m
+CONFIG_TIGON3_HWMON=y
CONFIG_TIGON3=m
# CONFIG_TIMB_DMA is not set
# CONFIG_TIMER_STATS is not set
@@ -6275,6 +6296,7 @@ CONFIG_VLSI_FIR=m
# CONFIG_VMXNET3 is not set
CONFIG_VORTEX=m
CONFIG_VSOCKETS=m
+CONFIG_VSOCKMON=m
# CONFIG_VT6655 is not set
# CONFIG_VT6656 is not set
CONFIG_VT_CONSOLE=y
diff --git a/kernel-armv7hl-lpae.config b/kernel-armv7hl-lpae.config
index 95b20a077..b030caff6 100644
--- a/kernel-armv7hl-lpae.config
+++ b/kernel-armv7hl-lpae.config
@@ -722,14 +722,17 @@ CONFIG_CAN_ESD_USB2=m
# CONFIG_CAN_GRCAN is not set
CONFIG_CAN_GS_USB=m
CONFIG_CAN_GW=m
+CONFIG_CAN_HI311X=m
CONFIG_CAN_IFI_CANFD=m
CONFIG_CAN_KVASER_PCI=m
CONFIG_CAN_KVASER_USB=m
CONFIG_CAN_LEDS=y
CONFIG_CAN=m
CONFIG_CAN_M_CAN=m
+CONFIG_CAN_MCBA_USB=m
# CONFIG_CAN_MCP251X is not set
CONFIG_CAN_PEAK_PCIEC=y
+CONFIG_CAN_PEAK_PCIEFD=m
CONFIG_CAN_PEAK_PCI=m
# CONFIG_CAN_PEAK_PCMCIA is not set
CONFIG_CAN_PEAK_USB=m
@@ -747,6 +750,7 @@ CONFIG_CAN_SUN4I=m
# CONFIG_CAN_TI_HECC is not set
# CONFIG_CAN_TSCAN1 is not set
CONFIG_CAN_VCAN=m
+CONFIG_CAN_VXCAN=m
# CONFIG_CAN_XILINXCAN is not set
CONFIG_CAPI_AVM=y
# CONFIG_CAPI_EICON is not set
@@ -976,7 +980,9 @@ CONFIG_CRYPTO_CTR=y
CONFIG_CRYPTO_CTS=y
CONFIG_CRYPTO_DEFLATE=m
CONFIG_CRYPTO_DES=m
+# CONFIG_CRYPTO_DEV_CAVIUM_ZIP is not set
CONFIG_CRYPTO_DEV_CHELSIO=m
+CONFIG_CRYPTO_DEV_EXYNOS_RNG=m
CONFIG_CRYPTO_DEV_HIFN_795X=m
CONFIG_CRYPTO_DEV_HIFN_795X_RNG=y
CONFIG_CRYPTO_DEV_MARVELL_CESA=m
@@ -1763,6 +1769,7 @@ CONFIG_HFSPLUS_FS=m
# CONFIG_HI8435 is not set
CONFIG_HIBERNATION=y
CONFIG_HID_A4TECH=m
+CONFIG_HID_ACCUTOUCH=m
CONFIG_HID_ACRUX_FF=y
CONFIG_HID_ACRUX=m
CONFIG_HID_ALPS=m
@@ -1806,6 +1813,7 @@ CONFIG_HID_MAYFLASH=m
CONFIG_HID_MICROSOFT=m
CONFIG_HID_MONTEREY=m
CONFIG_HID_MULTITOUCH=m
+CONFIG_HID_NTI=m
CONFIG_HID_NTRIG=y
CONFIG_HID_ORTEK=m
CONFIG_HID_PANTHERLORD=m
@@ -2040,6 +2048,8 @@ CONFIG_IEEE802154_ADF7242=m
# CONFIG_IEEE802154_AT86RF230_DEBUGFS is not set
CONFIG_IEEE802154_AT86RF230=m
CONFIG_IEEE802154_ATUSB=m
+# CONFIG_IEEE802154_CA8210_DEBUGFS is not set
+CONFIG_IEEE802154_CA8210=m
CONFIG_IEEE802154_CC2520=m
CONFIG_IEEE802154_DRIVERS=m
CONFIG_IEEE802154_FAKELB=m
@@ -3028,6 +3038,7 @@ CONFIG_MLX4_EN=m
CONFIG_MLX4_INFINIBAND=m
CONFIG_MLX5_CORE_EN_DCB=y
CONFIG_MLX5_CORE_EN=y
+CONFIG_MLX5_CORE_IPOIB=y
CONFIG_MLX5_CORE=m
CONFIG_MLX5_INFINIBAND=m
# CONFIG_MLX90614 is not set
@@ -3054,6 +3065,7 @@ CONFIG_MMC_BCM2835=m
CONFIG_MMC_BLOCK_BOUNCE=y
CONFIG_MMC_BLOCK=m
CONFIG_MMC_BLOCK_MINORS=8
+# CONFIG_MMC_CAVIUM_THUNDERX is not set
CONFIG_MMC_CB710=m
# CONFIG_MMC_DEBUG is not set
CONFIG_MMC_DW_EXYNOS=m
@@ -3087,6 +3099,7 @@ CONFIG_MMC_SDHCI_PXAV3=m
CONFIG_MMC_SDHCI_S3C_DMA=y
CONFIG_MMC_SDHCI_S3C=m
CONFIG_MMC_SDHCI_TEGRA=m
+CONFIG_MMC_SDHCI_XENON=m
CONFIG_MMC_SDRICOH_CS=m
CONFIG_MMC_SPI=m
CONFIG_MMC_SUNXI=m
@@ -3328,11 +3341,15 @@ CONFIG_NET_DEVLINK=m
CONFIG_NET_DROP_MONITOR=y
CONFIG_NET_DSA_BCM_SF2=m
CONFIG_NET_DSA_HWMON=y
+CONFIG_NET_DSA_LOOP=m
CONFIG_NET_DSA=m
+CONFIG_NET_DSA_MT7530=m
CONFIG_NET_DSA_MV88E6060=m
CONFIG_NET_DSA_MV88E6XXX_GLOBAL2=y
CONFIG_NET_DSA_MV88E6XXX=m
CONFIG_NET_DSA_QCA8K=m
+CONFIG_NET_DSA_SMSC_LAN9303_I2C=m
+CONFIG_NET_DSA_SMSC_LAN9303_MDIO=m
CONFIG_NET_EMATCH_CANID=m
CONFIG_NET_EMATCH_CMP=m
CONFIG_NET_EMATCH_IPSET=m
@@ -3454,6 +3471,7 @@ CONFIG_NET_SCH_ATM=m
CONFIG_NET_SCH_CBQ=m
CONFIG_NET_SCH_CHOKE=m
CONFIG_NET_SCH_CODEL=m
+# CONFIG_NET_SCH_DEFAULT is not set
CONFIG_NET_SCH_DRR=m
CONFIG_NET_SCH_DSMARK=m
CONFIG_NET_SCHED=y
@@ -3549,6 +3567,7 @@ CONFIG_NET_VRF=m
CONFIG_NETWORK_FILESYSTEMS=y
CONFIG_NETWORK_PHY_TIMESTAMPING=y
CONFIG_NETXEN_NIC=m
+# CONFIG_NET_XGENE_V2 is not set
CONFIG_NET=y
CONFIG_NEW_LEDS=y
CONFIG_NFC_DIGITAL=m
@@ -4342,6 +4361,7 @@ CONFIG_ROMFS_FS=m
CONFIG_ROSE=m
CONFIG_RPCSEC_GSS_KRB5=m
# CONFIG_RPMSG_CHAR is not set
+CONFIG_RPMSG_QCOM_SMD=m
CONFIG_RPR0521=m
CONFIG_RSI_91X=m
CONFIG_RSI_DEBUGFS=y
@@ -5546,6 +5566,7 @@ CONFIG_TI_DAVINCI_MDIO=m
CONFIG_TI_EDMA=y
CONFIG_TIFM_7XX1=m
CONFIG_TIFM_CORE=m
+CONFIG_TIGON3_HWMON=y
CONFIG_TIGON3=m
# CONFIG_TIMB_DMA is not set
# CONFIG_TIMER_STATS is not set
@@ -6252,6 +6273,7 @@ CONFIG_VLSI_FIR=m
# CONFIG_VMXNET3 is not set
CONFIG_VORTEX=m
CONFIG_VSOCKETS=m
+CONFIG_VSOCKMON=m
# CONFIG_VT6655 is not set
# CONFIG_VT6656 is not set
CONFIG_VT_CONSOLE=y
diff --git a/kernel-armv7hl.config b/kernel-armv7hl.config
index 48acb5257..77c7e7136 100644
--- a/kernel-armv7hl.config
+++ b/kernel-armv7hl.config
@@ -744,14 +744,17 @@ CONFIG_CAN_FLEXCAN=m
# CONFIG_CAN_GRCAN is not set
CONFIG_CAN_GS_USB=m
CONFIG_CAN_GW=m
+CONFIG_CAN_HI311X=m
CONFIG_CAN_IFI_CANFD=m
CONFIG_CAN_KVASER_PCI=m
CONFIG_CAN_KVASER_USB=m
CONFIG_CAN_LEDS=y
CONFIG_CAN=m
CONFIG_CAN_M_CAN=m
+CONFIG_CAN_MCBA_USB=m
# CONFIG_CAN_MCP251X is not set
CONFIG_CAN_PEAK_PCIEC=y
+CONFIG_CAN_PEAK_PCIEFD=m
CONFIG_CAN_PEAK_PCI=m
# CONFIG_CAN_PEAK_PCMCIA is not set
CONFIG_CAN_PEAK_USB=m
@@ -769,6 +772,7 @@ CONFIG_CAN_SUN4I=m
# CONFIG_CAN_TI_HECC is not set
# CONFIG_CAN_TSCAN1 is not set
CONFIG_CAN_VCAN=m
+CONFIG_CAN_VXCAN=m
# CONFIG_CAN_XILINXCAN is not set
CONFIG_CAPI_AVM=y
# CONFIG_CAPI_EICON is not set
@@ -1005,7 +1009,9 @@ CONFIG_CRYPTO_CTR=y
CONFIG_CRYPTO_CTS=y
CONFIG_CRYPTO_DEFLATE=m
CONFIG_CRYPTO_DES=m
+# CONFIG_CRYPTO_DEV_CAVIUM_ZIP is not set
CONFIG_CRYPTO_DEV_CHELSIO=m
+CONFIG_CRYPTO_DEV_EXYNOS_RNG=m
CONFIG_CRYPTO_DEV_FSL_CAAM_AHASH_API=m
CONFIG_CRYPTO_DEV_FSL_CAAM_CRYPTO_API=m
# CONFIG_CRYPTO_DEV_FSL_CAAM_DEBUG is not set
@@ -1859,6 +1865,7 @@ CONFIG_HFSPLUS_FS=m
# CONFIG_HI8435 is not set
CONFIG_HIBERNATION=y
CONFIG_HID_A4TECH=m
+CONFIG_HID_ACCUTOUCH=m
CONFIG_HID_ACRUX_FF=y
CONFIG_HID_ACRUX=m
CONFIG_HID_ALPS=m
@@ -1902,6 +1909,7 @@ CONFIG_HID_MAYFLASH=m
CONFIG_HID_MICROSOFT=m
CONFIG_HID_MONTEREY=m
CONFIG_HID_MULTITOUCH=m
+CONFIG_HID_NTI=m
CONFIG_HID_NTRIG=y
CONFIG_HID_ORTEK=m
CONFIG_HID_PANTHERLORD=m
@@ -2144,6 +2152,8 @@ CONFIG_IEEE802154_ADF7242=m
# CONFIG_IEEE802154_AT86RF230_DEBUGFS is not set
CONFIG_IEEE802154_AT86RF230=m
CONFIG_IEEE802154_ATUSB=m
+# CONFIG_IEEE802154_CA8210_DEBUGFS is not set
+CONFIG_IEEE802154_CA8210=m
CONFIG_IEEE802154_CC2520=m
CONFIG_IEEE802154_DRIVERS=m
CONFIG_IEEE802154_FAKELB=m
@@ -3165,6 +3175,7 @@ CONFIG_MLX4_EN=m
CONFIG_MLX4_INFINIBAND=m
CONFIG_MLX5_CORE_EN_DCB=y
CONFIG_MLX5_CORE_EN=y
+CONFIG_MLX5_CORE_IPOIB=y
CONFIG_MLX5_CORE=m
CONFIG_MLX5_INFINIBAND=m
# CONFIG_MLX90614 is not set
@@ -3191,6 +3202,7 @@ CONFIG_MMC_BCM2835=m
CONFIG_MMC_BLOCK_BOUNCE=y
CONFIG_MMC_BLOCK=m
CONFIG_MMC_BLOCK_MINORS=8
+# CONFIG_MMC_CAVIUM_THUNDERX is not set
CONFIG_MMC_CB710=m
# CONFIG_MMC_DEBUG is not set
CONFIG_MMC_DW_EXYNOS=m
@@ -3230,6 +3242,7 @@ CONFIG_MMC_SDHCI_S3C_DMA=y
CONFIG_MMC_SDHCI_S3C=m
CONFIG_MMC_SDHCI_ST=m
CONFIG_MMC_SDHCI_TEGRA=m
+CONFIG_MMC_SDHCI_XENON=m
CONFIG_MMC_SDRICOH_CS=m
CONFIG_MMC_SPI=m
CONFIG_MMC_SUNXI=m
@@ -3490,11 +3503,15 @@ CONFIG_NET_DEVLINK=m
CONFIG_NET_DROP_MONITOR=y
CONFIG_NET_DSA_BCM_SF2=m
CONFIG_NET_DSA_HWMON=y
+CONFIG_NET_DSA_LOOP=m
CONFIG_NET_DSA=m
+CONFIG_NET_DSA_MT7530=m
CONFIG_NET_DSA_MV88E6060=m
CONFIG_NET_DSA_MV88E6XXX_GLOBAL2=y
CONFIG_NET_DSA_MV88E6XXX=m
CONFIG_NET_DSA_QCA8K=m
+CONFIG_NET_DSA_SMSC_LAN9303_I2C=m
+CONFIG_NET_DSA_SMSC_LAN9303_MDIO=m
CONFIG_NET_EMATCH_CANID=m
CONFIG_NET_EMATCH_CMP=m
CONFIG_NET_EMATCH_IPSET=m
@@ -3616,6 +3633,7 @@ CONFIG_NET_SCH_ATM=m
CONFIG_NET_SCH_CBQ=m
CONFIG_NET_SCH_CHOKE=m
CONFIG_NET_SCH_CODEL=m
+# CONFIG_NET_SCH_DEFAULT is not set
CONFIG_NET_SCH_DRR=m
CONFIG_NET_SCH_DSMARK=m
CONFIG_NET_SCHED=y
@@ -3713,6 +3731,7 @@ CONFIG_NET_VRF=m
CONFIG_NETWORK_FILESYSTEMS=y
CONFIG_NETWORK_PHY_TIMESTAMPING=y
CONFIG_NETXEN_NIC=m
+# CONFIG_NET_XGENE_V2 is not set
CONFIG_NET=y
CONFIG_NEW_LEDS=y
CONFIG_NFC_DIGITAL=m
@@ -4613,6 +4632,7 @@ CONFIG_ROMFS_FS=m
CONFIG_ROSE=m
CONFIG_RPCSEC_GSS_KRB5=m
# CONFIG_RPMSG_CHAR is not set
+CONFIG_RPMSG_QCOM_SMD=m
CONFIG_RPR0521=m
CONFIG_RSI_91X=m
CONFIG_RSI_DEBUGFS=y
@@ -5929,6 +5949,7 @@ CONFIG_TI_EDMA=y
CONFIG_TI_EMIF=m
CONFIG_TIFM_7XX1=m
CONFIG_TIFM_CORE=m
+CONFIG_TIGON3_HWMON=y
CONFIG_TIGON3=m
# CONFIG_TIMB_DMA is not set
# CONFIG_TIMER_STATS is not set
@@ -6679,6 +6700,7 @@ CONFIG_VLSI_FIR=m
# CONFIG_VMXNET3 is not set
CONFIG_VORTEX=m
CONFIG_VSOCKETS=m
+CONFIG_VSOCKMON=m
# CONFIG_VT6655 is not set
# CONFIG_VT6656 is not set
CONFIG_VT_CONSOLE=y
diff --git a/kernel-i686-PAE.config b/kernel-i686-PAE.config
index 84e4291fe..a2c11e358 100644
--- a/kernel-i686-PAE.config
+++ b/kernel-i686-PAE.config
@@ -615,14 +615,17 @@ CONFIG_CAN_ESD_USB2=m
# CONFIG_CAN_GRCAN is not set
CONFIG_CAN_GS_USB=m
CONFIG_CAN_GW=m
+CONFIG_CAN_HI311X=m
CONFIG_CAN_IFI_CANFD=m
CONFIG_CAN_KVASER_PCI=m
CONFIG_CAN_KVASER_USB=m
CONFIG_CAN_LEDS=y
CONFIG_CAN=m
CONFIG_CAN_M_CAN=m
+CONFIG_CAN_MCBA_USB=m
# CONFIG_CAN_MCP251X is not set
CONFIG_CAN_PEAK_PCIEC=y
+CONFIG_CAN_PEAK_PCIEFD=m
CONFIG_CAN_PEAK_PCI=m
# CONFIG_CAN_PEAK_PCMCIA is not set
CONFIG_CAN_PEAK_USB=m
@@ -636,6 +639,7 @@ CONFIG_CAN_SLCAN=m
CONFIG_CAN_SOFTING=m
# CONFIG_CAN_TSCAN1 is not set
CONFIG_CAN_VCAN=m
+CONFIG_CAN_VXCAN=m
# CONFIG_CAN_XILINXCAN is not set
CONFIG_CAPI_AVM=y
CONFIG_CAPI_EICON=y
@@ -833,6 +837,7 @@ CONFIG_CRYPTO_CTR=y
CONFIG_CRYPTO_CTS=y
CONFIG_CRYPTO_DEFLATE=m
CONFIG_CRYPTO_DES=m
+# CONFIG_CRYPTO_DEV_CAVIUM_ZIP is not set
CONFIG_CRYPTO_DEV_CCP_CRYPTO=m
CONFIG_CRYPTO_DEV_CCP_DD=m
CONFIG_CRYPTO_DEV_CCP=y
@@ -1620,6 +1625,7 @@ CONFIG_HFSPLUS_FS=m
# CONFIG_HI8435 is not set
CONFIG_HIBERNATION=y
CONFIG_HID_A4TECH=m
+CONFIG_HID_ACCUTOUCH=m
CONFIG_HID_ACRUX_FF=y
CONFIG_HID_ACRUX=m
CONFIG_HID_ALPS=m
@@ -1664,6 +1670,7 @@ CONFIG_HID_MAYFLASH=m
CONFIG_HID_MICROSOFT=m
CONFIG_HID_MONTEREY=m
CONFIG_HID_MULTITOUCH=m
+CONFIG_HID_NTI=m
CONFIG_HID_NTRIG=y
CONFIG_HID_ORTEK=m
CONFIG_HID_PANTHERLORD=m
@@ -1913,6 +1920,8 @@ CONFIG_IEEE802154_ADF7242=m
# CONFIG_IEEE802154_AT86RF230_DEBUGFS is not set
CONFIG_IEEE802154_AT86RF230=m
CONFIG_IEEE802154_ATUSB=m
+# CONFIG_IEEE802154_CA8210_DEBUGFS is not set
+CONFIG_IEEE802154_CA8210=m
CONFIG_IEEE802154_CC2520=m
CONFIG_IEEE802154_DRIVERS=m
CONFIG_IEEE802154_FAKELB=m
@@ -2893,6 +2902,7 @@ CONFIG_MLX4_EN=m
CONFIG_MLX4_INFINIBAND=m
CONFIG_MLX5_CORE_EN_DCB=y
CONFIG_MLX5_CORE_EN=y
+CONFIG_MLX5_CORE_IPOIB=y
CONFIG_MLX5_CORE=m
# CONFIG_MLX5_INFINIBAND is not set
# CONFIG_MLX90614 is not set
@@ -2917,6 +2927,7 @@ CONFIG_MMA7660=m
CONFIG_MMC_BLOCK_BOUNCE=y
CONFIG_MMC_BLOCK=m
CONFIG_MMC_BLOCK_MINORS=8
+# CONFIG_MMC_CAVIUM_THUNDERX is not set
CONFIG_MMC_CB710=m
# CONFIG_MMC_DEBUG is not set
CONFIG_MMC=m
@@ -2934,6 +2945,7 @@ CONFIG_MMC_SDHCI=m
# CONFIG_MMC_SDHCI_OF is not set
CONFIG_MMC_SDHCI_PCI=m
CONFIG_MMC_SDHCI_PLTFM=m
+CONFIG_MMC_SDHCI_XENON=m
CONFIG_MMC_SDRICOH_CS=m
# CONFIG_MMC_SPI is not set
# CONFIG_MMC_TEST is not set
@@ -3149,11 +3161,15 @@ CONFIG_NET_DEVLINK=m
CONFIG_NET_DROP_MONITOR=y
CONFIG_NET_DSA_BCM_SF2=m
CONFIG_NET_DSA_HWMON=y
+CONFIG_NET_DSA_LOOP=m
CONFIG_NET_DSA=m
+CONFIG_NET_DSA_MT7530=m
CONFIG_NET_DSA_MV88E6060=m
CONFIG_NET_DSA_MV88E6XXX_GLOBAL2=y
CONFIG_NET_DSA_MV88E6XXX=m
CONFIG_NET_DSA_QCA8K=m
+CONFIG_NET_DSA_SMSC_LAN9303_I2C=m
+CONFIG_NET_DSA_SMSC_LAN9303_MDIO=m
CONFIG_NET_EMATCH_CANID=m
CONFIG_NET_EMATCH_CMP=m
CONFIG_NET_EMATCH_IPSET=m
@@ -3276,6 +3292,7 @@ CONFIG_NET_SCH_ATM=m
CONFIG_NET_SCH_CBQ=m
CONFIG_NET_SCH_CHOKE=m
CONFIG_NET_SCH_CODEL=m
+# CONFIG_NET_SCH_DEFAULT is not set
CONFIG_NET_SCH_DRR=m
CONFIG_NET_SCH_DSMARK=m
CONFIG_NET_SCHED=y
@@ -3368,6 +3385,7 @@ CONFIG_NET_VRF=m
CONFIG_NETWORK_FILESYSTEMS=y
CONFIG_NETWORK_PHY_TIMESTAMPING=y
CONFIG_NETXEN_NIC=m
+# CONFIG_NET_XGENE_V2 is not set
CONFIG_NET=y
CONFIG_NEW_LEDS=y
CONFIG_NFC_DIGITAL=m
@@ -4044,6 +4062,8 @@ CONFIG_ROCKETPORT=m
CONFIG_ROMFS_FS=m
CONFIG_ROSE=m
CONFIG_RPCSEC_GSS_KRB5=m
+# CONFIG_RPMSG_CHAR is not set
+# CONFIG_RPMSG_QCOM_SMD is not set
CONFIG_RPR0521=m
CONFIG_RSI_91X=m
CONFIG_RSI_DEBUGFS=y
@@ -5149,6 +5169,7 @@ CONFIG_THRUSTMASTER_FF=y
# CONFIG_TI_DAC7512 is not set
CONFIG_TIFM_7XX1=m
CONFIG_TIFM_CORE=m
+CONFIG_TIGON3_HWMON=y
CONFIG_TIGON3=m
# CONFIG_TIMB_DMA is not set
# CONFIG_TIMER_STATS is not set
@@ -5777,6 +5798,7 @@ CONFIG_VMWARE_VMCI_VSOCKETS=m
CONFIG_VMXNET3=m
CONFIG_VORTEX=m
CONFIG_VSOCKETS=m
+CONFIG_VSOCKMON=m
# CONFIG_VT6655 is not set
# CONFIG_VT6656 is not set
CONFIG_VT_CONSOLE=y
diff --git a/kernel-i686-PAEdebug.config b/kernel-i686-PAEdebug.config
index b04dcb37d..ac61b2886 100644
--- a/kernel-i686-PAEdebug.config
+++ b/kernel-i686-PAEdebug.config
@@ -616,14 +616,17 @@ CONFIG_CAN_ESD_USB2=m
# CONFIG_CAN_GRCAN is not set
CONFIG_CAN_GS_USB=m
CONFIG_CAN_GW=m
+CONFIG_CAN_HI311X=m
CONFIG_CAN_IFI_CANFD=m
CONFIG_CAN_KVASER_PCI=m
CONFIG_CAN_KVASER_USB=m
CONFIG_CAN_LEDS=y
CONFIG_CAN=m
CONFIG_CAN_M_CAN=m
+CONFIG_CAN_MCBA_USB=m
# CONFIG_CAN_MCP251X is not set
CONFIG_CAN_PEAK_PCIEC=y
+CONFIG_CAN_PEAK_PCIEFD=m
CONFIG_CAN_PEAK_PCI=m
# CONFIG_CAN_PEAK_PCMCIA is not set
CONFIG_CAN_PEAK_USB=m
@@ -637,6 +640,7 @@ CONFIG_CAN_SLCAN=m
CONFIG_CAN_SOFTING=m
# CONFIG_CAN_TSCAN1 is not set
CONFIG_CAN_VCAN=m
+CONFIG_CAN_VXCAN=m
# CONFIG_CAN_XILINXCAN is not set
CONFIG_CAPI_AVM=y
CONFIG_CAPI_EICON=y
@@ -835,6 +839,7 @@ CONFIG_CRYPTO_CTR=y
CONFIG_CRYPTO_CTS=y
CONFIG_CRYPTO_DEFLATE=m
CONFIG_CRYPTO_DES=m
+# CONFIG_CRYPTO_DEV_CAVIUM_ZIP is not set
CONFIG_CRYPTO_DEV_CCP_CRYPTO=m
CONFIG_CRYPTO_DEV_CCP_DD=m
CONFIG_CRYPTO_DEV_CCP=y
@@ -1638,6 +1643,7 @@ CONFIG_HFSPLUS_FS=m
# CONFIG_HI8435 is not set
CONFIG_HIBERNATION=y
CONFIG_HID_A4TECH=m
+CONFIG_HID_ACCUTOUCH=m
CONFIG_HID_ACRUX_FF=y
CONFIG_HID_ACRUX=m
CONFIG_HID_ALPS=m
@@ -1682,6 +1688,7 @@ CONFIG_HID_MAYFLASH=m
CONFIG_HID_MICROSOFT=m
CONFIG_HID_MONTEREY=m
CONFIG_HID_MULTITOUCH=m
+CONFIG_HID_NTI=m
CONFIG_HID_NTRIG=y
CONFIG_HID_ORTEK=m
CONFIG_HID_PANTHERLORD=m
@@ -1931,6 +1938,8 @@ CONFIG_IEEE802154_ADF7242=m
# CONFIG_IEEE802154_AT86RF230_DEBUGFS is not set
CONFIG_IEEE802154_AT86RF230=m
CONFIG_IEEE802154_ATUSB=m
+# CONFIG_IEEE802154_CA8210_DEBUGFS is not set
+CONFIG_IEEE802154_CA8210=m
CONFIG_IEEE802154_CC2520=m
CONFIG_IEEE802154_DRIVERS=m
CONFIG_IEEE802154_FAKELB=m
@@ -2913,6 +2922,7 @@ CONFIG_MLX4_EN=m
CONFIG_MLX4_INFINIBAND=m
CONFIG_MLX5_CORE_EN_DCB=y
CONFIG_MLX5_CORE_EN=y
+CONFIG_MLX5_CORE_IPOIB=y
CONFIG_MLX5_CORE=m
# CONFIG_MLX5_INFINIBAND is not set
# CONFIG_MLX90614 is not set
@@ -2937,6 +2947,7 @@ CONFIG_MMA7660=m
CONFIG_MMC_BLOCK_BOUNCE=y
CONFIG_MMC_BLOCK=m
CONFIG_MMC_BLOCK_MINORS=8
+# CONFIG_MMC_CAVIUM_THUNDERX is not set
CONFIG_MMC_CB710=m
# CONFIG_MMC_DEBUG is not set
CONFIG_MMC=m
@@ -2954,6 +2965,7 @@ CONFIG_MMC_SDHCI=m
# CONFIG_MMC_SDHCI_OF is not set
CONFIG_MMC_SDHCI_PCI=m
CONFIG_MMC_SDHCI_PLTFM=m
+CONFIG_MMC_SDHCI_XENON=m
CONFIG_MMC_SDRICOH_CS=m
# CONFIG_MMC_SPI is not set
# CONFIG_MMC_TEST is not set
@@ -3169,11 +3181,15 @@ CONFIG_NET_DEVLINK=m
CONFIG_NET_DROP_MONITOR=y
CONFIG_NET_DSA_BCM_SF2=m
CONFIG_NET_DSA_HWMON=y
+CONFIG_NET_DSA_LOOP=m
CONFIG_NET_DSA=m
+CONFIG_NET_DSA_MT7530=m
CONFIG_NET_DSA_MV88E6060=m
CONFIG_NET_DSA_MV88E6XXX_GLOBAL2=y
CONFIG_NET_DSA_MV88E6XXX=m
CONFIG_NET_DSA_QCA8K=m
+CONFIG_NET_DSA_SMSC_LAN9303_I2C=m
+CONFIG_NET_DSA_SMSC_LAN9303_MDIO=m
CONFIG_NET_EMATCH_CANID=m
CONFIG_NET_EMATCH_CMP=m
CONFIG_NET_EMATCH_IPSET=m
@@ -3296,6 +3312,7 @@ CONFIG_NET_SCH_ATM=m
CONFIG_NET_SCH_CBQ=m
CONFIG_NET_SCH_CHOKE=m
CONFIG_NET_SCH_CODEL=m
+# CONFIG_NET_SCH_DEFAULT is not set
CONFIG_NET_SCH_DRR=m
CONFIG_NET_SCH_DSMARK=m
CONFIG_NET_SCHED=y
@@ -3388,6 +3405,7 @@ CONFIG_NET_VRF=m
CONFIG_NETWORK_FILESYSTEMS=y
CONFIG_NETWORK_PHY_TIMESTAMPING=y
CONFIG_NETXEN_NIC=m
+# CONFIG_NET_XGENE_V2 is not set
CONFIG_NET=y
CONFIG_NEW_LEDS=y
CONFIG_NFC_DIGITAL=m
@@ -4065,6 +4083,8 @@ CONFIG_ROCKETPORT=m
CONFIG_ROMFS_FS=m
CONFIG_ROSE=m
CONFIG_RPCSEC_GSS_KRB5=m
+# CONFIG_RPMSG_CHAR is not set
+# CONFIG_RPMSG_QCOM_SMD is not set
CONFIG_RPR0521=m
CONFIG_RSI_91X=m
CONFIG_RSI_DEBUGFS=y
@@ -5171,6 +5191,7 @@ CONFIG_THRUSTMASTER_FF=y
# CONFIG_TI_DAC7512 is not set
CONFIG_TIFM_7XX1=m
CONFIG_TIFM_CORE=m
+CONFIG_TIGON3_HWMON=y
CONFIG_TIGON3=m
# CONFIG_TIMB_DMA is not set
# CONFIG_TIMER_STATS is not set
@@ -5799,6 +5820,7 @@ CONFIG_VMWARE_VMCI_VSOCKETS=m
CONFIG_VMXNET3=m
CONFIG_VORTEX=m
CONFIG_VSOCKETS=m
+CONFIG_VSOCKMON=m
# CONFIG_VT6655 is not set
# CONFIG_VT6656 is not set
CONFIG_VT_CONSOLE=y
diff --git a/kernel-i686-debug.config b/kernel-i686-debug.config
index 0bdbea6fb..3cb33285a 100644
--- a/kernel-i686-debug.config
+++ b/kernel-i686-debug.config
@@ -616,14 +616,17 @@ CONFIG_CAN_ESD_USB2=m
# CONFIG_CAN_GRCAN is not set
CONFIG_CAN_GS_USB=m
CONFIG_CAN_GW=m
+CONFIG_CAN_HI311X=m
CONFIG_CAN_IFI_CANFD=m
CONFIG_CAN_KVASER_PCI=m
CONFIG_CAN_KVASER_USB=m
CONFIG_CAN_LEDS=y
CONFIG_CAN=m
CONFIG_CAN_M_CAN=m
+CONFIG_CAN_MCBA_USB=m
# CONFIG_CAN_MCP251X is not set
CONFIG_CAN_PEAK_PCIEC=y
+CONFIG_CAN_PEAK_PCIEFD=m
CONFIG_CAN_PEAK_PCI=m
# CONFIG_CAN_PEAK_PCMCIA is not set
CONFIG_CAN_PEAK_USB=m
@@ -637,6 +640,7 @@ CONFIG_CAN_SLCAN=m
CONFIG_CAN_SOFTING=m
# CONFIG_CAN_TSCAN1 is not set
CONFIG_CAN_VCAN=m
+CONFIG_CAN_VXCAN=m
# CONFIG_CAN_XILINXCAN is not set
CONFIG_CAPI_AVM=y
CONFIG_CAPI_EICON=y
@@ -835,6 +839,7 @@ CONFIG_CRYPTO_CTR=y
CONFIG_CRYPTO_CTS=y
CONFIG_CRYPTO_DEFLATE=m
CONFIG_CRYPTO_DES=m
+# CONFIG_CRYPTO_DEV_CAVIUM_ZIP is not set
CONFIG_CRYPTO_DEV_CCP_CRYPTO=m
CONFIG_CRYPTO_DEV_CCP_DD=m
CONFIG_CRYPTO_DEV_CCP=y
@@ -1638,6 +1643,7 @@ CONFIG_HFSPLUS_FS=m
# CONFIG_HI8435 is not set
CONFIG_HIBERNATION=y
CONFIG_HID_A4TECH=m
+CONFIG_HID_ACCUTOUCH=m
CONFIG_HID_ACRUX_FF=y
CONFIG_HID_ACRUX=m
CONFIG_HID_ALPS=m
@@ -1682,6 +1688,7 @@ CONFIG_HID_MAYFLASH=m
CONFIG_HID_MICROSOFT=m
CONFIG_HID_MONTEREY=m
CONFIG_HID_MULTITOUCH=m
+CONFIG_HID_NTI=m
CONFIG_HID_NTRIG=y
CONFIG_HID_ORTEK=m
CONFIG_HID_PANTHERLORD=m
@@ -1931,6 +1938,8 @@ CONFIG_IEEE802154_ADF7242=m
# CONFIG_IEEE802154_AT86RF230_DEBUGFS is not set
CONFIG_IEEE802154_AT86RF230=m
CONFIG_IEEE802154_ATUSB=m
+# CONFIG_IEEE802154_CA8210_DEBUGFS is not set
+CONFIG_IEEE802154_CA8210=m
CONFIG_IEEE802154_CC2520=m
CONFIG_IEEE802154_DRIVERS=m
CONFIG_IEEE802154_FAKELB=m
@@ -2913,6 +2922,7 @@ CONFIG_MLX4_EN=m
CONFIG_MLX4_INFINIBAND=m
CONFIG_MLX5_CORE_EN_DCB=y
CONFIG_MLX5_CORE_EN=y
+CONFIG_MLX5_CORE_IPOIB=y
CONFIG_MLX5_CORE=m
# CONFIG_MLX5_INFINIBAND is not set
# CONFIG_MLX90614 is not set
@@ -2937,6 +2947,7 @@ CONFIG_MMA7660=m
CONFIG_MMC_BLOCK_BOUNCE=y
CONFIG_MMC_BLOCK=m
CONFIG_MMC_BLOCK_MINORS=8
+# CONFIG_MMC_CAVIUM_THUNDERX is not set
CONFIG_MMC_CB710=m
# CONFIG_MMC_DEBUG is not set
CONFIG_MMC=m
@@ -2954,6 +2965,7 @@ CONFIG_MMC_SDHCI=m
# CONFIG_MMC_SDHCI_OF is not set
CONFIG_MMC_SDHCI_PCI=m
CONFIG_MMC_SDHCI_PLTFM=m
+CONFIG_MMC_SDHCI_XENON=m
CONFIG_MMC_SDRICOH_CS=m
# CONFIG_MMC_SPI is not set
# CONFIG_MMC_TEST is not set
@@ -3169,11 +3181,15 @@ CONFIG_NET_DEVLINK=m
CONFIG_NET_DROP_MONITOR=y
CONFIG_NET_DSA_BCM_SF2=m
CONFIG_NET_DSA_HWMON=y
+CONFIG_NET_DSA_LOOP=m
CONFIG_NET_DSA=m
+CONFIG_NET_DSA_MT7530=m
CONFIG_NET_DSA_MV88E6060=m
CONFIG_NET_DSA_MV88E6XXX_GLOBAL2=y
CONFIG_NET_DSA_MV88E6XXX=m
CONFIG_NET_DSA_QCA8K=m
+CONFIG_NET_DSA_SMSC_LAN9303_I2C=m
+CONFIG_NET_DSA_SMSC_LAN9303_MDIO=m
CONFIG_NET_EMATCH_CANID=m
CONFIG_NET_EMATCH_CMP=m
CONFIG_NET_EMATCH_IPSET=m
@@ -3296,6 +3312,7 @@ CONFIG_NET_SCH_ATM=m
CONFIG_NET_SCH_CBQ=m
CONFIG_NET_SCH_CHOKE=m
CONFIG_NET_SCH_CODEL=m
+# CONFIG_NET_SCH_DEFAULT is not set
CONFIG_NET_SCH_DRR=m
CONFIG_NET_SCH_DSMARK=m
CONFIG_NET_SCHED=y
@@ -3388,6 +3405,7 @@ CONFIG_NET_VRF=m
CONFIG_NETWORK_FILESYSTEMS=y
CONFIG_NETWORK_PHY_TIMESTAMPING=y
CONFIG_NETXEN_NIC=m
+# CONFIG_NET_XGENE_V2 is not set
CONFIG_NET=y
CONFIG_NEW_LEDS=y
CONFIG_NFC_DIGITAL=m
@@ -4065,6 +4083,8 @@ CONFIG_ROCKETPORT=m
CONFIG_ROMFS_FS=m
CONFIG_ROSE=m
CONFIG_RPCSEC_GSS_KRB5=m
+# CONFIG_RPMSG_CHAR is not set
+# CONFIG_RPMSG_QCOM_SMD is not set
CONFIG_RPR0521=m
CONFIG_RSI_91X=m
CONFIG_RSI_DEBUGFS=y
@@ -5171,6 +5191,7 @@ CONFIG_THRUSTMASTER_FF=y
# CONFIG_TI_DAC7512 is not set
CONFIG_TIFM_7XX1=m
CONFIG_TIFM_CORE=m
+CONFIG_TIGON3_HWMON=y
CONFIG_TIGON3=m
# CONFIG_TIMB_DMA is not set
# CONFIG_TIMER_STATS is not set
@@ -5799,6 +5820,7 @@ CONFIG_VMWARE_VMCI_VSOCKETS=m
CONFIG_VMXNET3=m
CONFIG_VORTEX=m
CONFIG_VSOCKETS=m
+CONFIG_VSOCKMON=m
# CONFIG_VT6655 is not set
# CONFIG_VT6656 is not set
CONFIG_VT_CONSOLE=y
diff --git a/kernel-i686.config b/kernel-i686.config
index 7d4d6a342..05d9f82d1 100644
--- a/kernel-i686.config
+++ b/kernel-i686.config
@@ -615,14 +615,17 @@ CONFIG_CAN_ESD_USB2=m
# CONFIG_CAN_GRCAN is not set
CONFIG_CAN_GS_USB=m
CONFIG_CAN_GW=m
+CONFIG_CAN_HI311X=m
CONFIG_CAN_IFI_CANFD=m
CONFIG_CAN_KVASER_PCI=m
CONFIG_CAN_KVASER_USB=m
CONFIG_CAN_LEDS=y
CONFIG_CAN=m
CONFIG_CAN_M_CAN=m
+CONFIG_CAN_MCBA_USB=m
# CONFIG_CAN_MCP251X is not set
CONFIG_CAN_PEAK_PCIEC=y
+CONFIG_CAN_PEAK_PCIEFD=m
CONFIG_CAN_PEAK_PCI=m
# CONFIG_CAN_PEAK_PCMCIA is not set
CONFIG_CAN_PEAK_USB=m
@@ -636,6 +639,7 @@ CONFIG_CAN_SLCAN=m
CONFIG_CAN_SOFTING=m
# CONFIG_CAN_TSCAN1 is not set
CONFIG_CAN_VCAN=m
+CONFIG_CAN_VXCAN=m
# CONFIG_CAN_XILINXCAN is not set
CONFIG_CAPI_AVM=y
CONFIG_CAPI_EICON=y
@@ -833,6 +837,7 @@ CONFIG_CRYPTO_CTR=y
CONFIG_CRYPTO_CTS=y
CONFIG_CRYPTO_DEFLATE=m
CONFIG_CRYPTO_DES=m
+# CONFIG_CRYPTO_DEV_CAVIUM_ZIP is not set
CONFIG_CRYPTO_DEV_CCP_CRYPTO=m
CONFIG_CRYPTO_DEV_CCP_DD=m
CONFIG_CRYPTO_DEV_CCP=y
@@ -1620,6 +1625,7 @@ CONFIG_HFSPLUS_FS=m
# CONFIG_HI8435 is not set
CONFIG_HIBERNATION=y
CONFIG_HID_A4TECH=m
+CONFIG_HID_ACCUTOUCH=m
CONFIG_HID_ACRUX_FF=y
CONFIG_HID_ACRUX=m
CONFIG_HID_ALPS=m
@@ -1664,6 +1670,7 @@ CONFIG_HID_MAYFLASH=m
CONFIG_HID_MICROSOFT=m
CONFIG_HID_MONTEREY=m
CONFIG_HID_MULTITOUCH=m
+CONFIG_HID_NTI=m
CONFIG_HID_NTRIG=y
CONFIG_HID_ORTEK=m
CONFIG_HID_PANTHERLORD=m
@@ -1913,6 +1920,8 @@ CONFIG_IEEE802154_ADF7242=m
# CONFIG_IEEE802154_AT86RF230_DEBUGFS is not set
CONFIG_IEEE802154_AT86RF230=m
CONFIG_IEEE802154_ATUSB=m
+# CONFIG_IEEE802154_CA8210_DEBUGFS is not set
+CONFIG_IEEE802154_CA8210=m
CONFIG_IEEE802154_CC2520=m
CONFIG_IEEE802154_DRIVERS=m
CONFIG_IEEE802154_FAKELB=m
@@ -2893,6 +2902,7 @@ CONFIG_MLX4_EN=m
CONFIG_MLX4_INFINIBAND=m
CONFIG_MLX5_CORE_EN_DCB=y
CONFIG_MLX5_CORE_EN=y
+CONFIG_MLX5_CORE_IPOIB=y
CONFIG_MLX5_CORE=m
# CONFIG_MLX5_INFINIBAND is not set
# CONFIG_MLX90614 is not set
@@ -2917,6 +2927,7 @@ CONFIG_MMA7660=m
CONFIG_MMC_BLOCK_BOUNCE=y
CONFIG_MMC_BLOCK=m
CONFIG_MMC_BLOCK_MINORS=8
+# CONFIG_MMC_CAVIUM_THUNDERX is not set
CONFIG_MMC_CB710=m
# CONFIG_MMC_DEBUG is not set
CONFIG_MMC=m
@@ -2934,6 +2945,7 @@ CONFIG_MMC_SDHCI=m
# CONFIG_MMC_SDHCI_OF is not set
CONFIG_MMC_SDHCI_PCI=m
CONFIG_MMC_SDHCI_PLTFM=m
+CONFIG_MMC_SDHCI_XENON=m
CONFIG_MMC_SDRICOH_CS=m
# CONFIG_MMC_SPI is not set
# CONFIG_MMC_TEST is not set
@@ -3149,11 +3161,15 @@ CONFIG_NET_DEVLINK=m
CONFIG_NET_DROP_MONITOR=y
CONFIG_NET_DSA_BCM_SF2=m
CONFIG_NET_DSA_HWMON=y
+CONFIG_NET_DSA_LOOP=m
CONFIG_NET_DSA=m
+CONFIG_NET_DSA_MT7530=m
CONFIG_NET_DSA_MV88E6060=m
CONFIG_NET_DSA_MV88E6XXX_GLOBAL2=y
CONFIG_NET_DSA_MV88E6XXX=m
CONFIG_NET_DSA_QCA8K=m
+CONFIG_NET_DSA_SMSC_LAN9303_I2C=m
+CONFIG_NET_DSA_SMSC_LAN9303_MDIO=m
CONFIG_NET_EMATCH_CANID=m
CONFIG_NET_EMATCH_CMP=m
CONFIG_NET_EMATCH_IPSET=m
@@ -3276,6 +3292,7 @@ CONFIG_NET_SCH_ATM=m
CONFIG_NET_SCH_CBQ=m
CONFIG_NET_SCH_CHOKE=m
CONFIG_NET_SCH_CODEL=m
+# CONFIG_NET_SCH_DEFAULT is not set
CONFIG_NET_SCH_DRR=m
CONFIG_NET_SCH_DSMARK=m
CONFIG_NET_SCHED=y
@@ -3368,6 +3385,7 @@ CONFIG_NET_VRF=m
CONFIG_NETWORK_FILESYSTEMS=y
CONFIG_NETWORK_PHY_TIMESTAMPING=y
CONFIG_NETXEN_NIC=m
+# CONFIG_NET_XGENE_V2 is not set
CONFIG_NET=y
CONFIG_NEW_LEDS=y
CONFIG_NFC_DIGITAL=m
@@ -4044,6 +4062,8 @@ CONFIG_ROCKETPORT=m
CONFIG_ROMFS_FS=m
CONFIG_ROSE=m
CONFIG_RPCSEC_GSS_KRB5=m
+# CONFIG_RPMSG_CHAR is not set
+# CONFIG_RPMSG_QCOM_SMD is not set
CONFIG_RPR0521=m
CONFIG_RSI_91X=m
CONFIG_RSI_DEBUGFS=y
@@ -5149,6 +5169,7 @@ CONFIG_THRUSTMASTER_FF=y
# CONFIG_TI_DAC7512 is not set
CONFIG_TIFM_7XX1=m
CONFIG_TIFM_CORE=m
+CONFIG_TIGON3_HWMON=y
CONFIG_TIGON3=m
# CONFIG_TIMB_DMA is not set
# CONFIG_TIMER_STATS is not set
@@ -5777,6 +5798,7 @@ CONFIG_VMWARE_VMCI_VSOCKETS=m
CONFIG_VMXNET3=m
CONFIG_VORTEX=m
CONFIG_VSOCKETS=m
+CONFIG_VSOCKMON=m
# CONFIG_VT6655 is not set
# CONFIG_VT6656 is not set
CONFIG_VT_CONSOLE=y
diff --git a/kernel-ppc64-debug.config b/kernel-ppc64-debug.config
index 4e5626005..a2360db2d 100644
--- a/kernel-ppc64-debug.config
+++ b/kernel-ppc64-debug.config
@@ -602,16 +602,19 @@ CONFIG_CAN_ESD_USB2=m
# CONFIG_CAN_GRCAN is not set
CONFIG_CAN_GS_USB=m
CONFIG_CAN_GW=m
+CONFIG_CAN_HI311X=m
CONFIG_CAN_IFI_CANFD=m
CONFIG_CAN_KVASER_PCI=m
CONFIG_CAN_KVASER_USB=m
CONFIG_CAN_LEDS=y
CONFIG_CAN=m
CONFIG_CAN_M_CAN=m
+CONFIG_CAN_MCBA_USB=m
# CONFIG_CAN_MCP251X is not set
# CONFIG_CAN_MPC5XXX is not set
# CONFIG_CAN_MSCAN is not set
CONFIG_CAN_PEAK_PCIEC=y
+CONFIG_CAN_PEAK_PCIEFD=m
CONFIG_CAN_PEAK_PCI=m
# CONFIG_CAN_PEAK_PCMCIA is not set
CONFIG_CAN_PEAK_USB=m
@@ -625,6 +628,7 @@ CONFIG_CAN_SLCAN=m
CONFIG_CAN_SOFTING=m
# CONFIG_CAN_TSCAN1 is not set
CONFIG_CAN_VCAN=m
+CONFIG_CAN_VXCAN=m
# CONFIG_CAN_XILINXCAN is not set
CONFIG_CAPI_AVM=y
CONFIG_CAPI_EICON=y
@@ -814,11 +818,13 @@ CONFIG_CRYPTO_CMAC=m
CONFIG_CRYPTO_CRC32C_VPMSUM=m
CONFIG_CRYPTO_CRC32C=y
CONFIG_CRYPTO_CRC32=m
+CONFIG_CRYPTO_CRCT10DIF_VPMSUM=m
# CONFIG_CRYPTO_CRYPTD is not set
CONFIG_CRYPTO_CTR=y
CONFIG_CRYPTO_CTS=y
CONFIG_CRYPTO_DEFLATE=m
CONFIG_CRYPTO_DES=m
+# CONFIG_CRYPTO_DEV_CAVIUM_ZIP is not set
CONFIG_CRYPTO_DEV_CHELSIO=m
# CONFIG_CRYPTO_DEV_FSL_CAAM is not set
CONFIG_CRYPTO_DEV_HIFN_795X=m
@@ -888,6 +894,7 @@ CONFIG_CRYPTO_USER_API_RNG=y
CONFIG_CRYPTO_USER_API_SKCIPHER=y
CONFIG_CRYPTO_USER=m
CONFIG_CRYPTO_VMAC=m
+# CONFIG_CRYPTO_VPMSUM_TESTER is not set
CONFIG_CRYPTO_WP512=m
CONFIG_CRYPTO_XCBC=m
CONFIG_CRYPTO_XTS=y
@@ -1540,6 +1547,7 @@ CONFIG_HFSPLUS_FS=m
# CONFIG_HI8435 is not set
# CONFIG_HIBERNATION is not set
CONFIG_HID_A4TECH=m
+CONFIG_HID_ACCUTOUCH=m
CONFIG_HID_ACRUX_FF=y
CONFIG_HID_ACRUX=m
CONFIG_HID_ALPS=m
@@ -1583,6 +1591,7 @@ CONFIG_HID_MAYFLASH=m
CONFIG_HID_MICROSOFT=m
CONFIG_HID_MONTEREY=m
CONFIG_HID_MULTITOUCH=m
+CONFIG_HID_NTI=m
CONFIG_HID_NTRIG=y
CONFIG_HID_ORTEK=m
CONFIG_HID_PANTHERLORD=m
@@ -1822,6 +1831,8 @@ CONFIG_IEEE802154_ADF7242=m
# CONFIG_IEEE802154_AT86RF230_DEBUGFS is not set
CONFIG_IEEE802154_AT86RF230=m
CONFIG_IEEE802154_ATUSB=m
+# CONFIG_IEEE802154_CA8210_DEBUGFS is not set
+CONFIG_IEEE802154_CA8210=m
CONFIG_IEEE802154_CC2520=m
CONFIG_IEEE802154_DRIVERS=m
CONFIG_IEEE802154_FAKELB=m
@@ -2754,6 +2765,7 @@ CONFIG_MLX4_EN=m
CONFIG_MLX4_INFINIBAND=m
CONFIG_MLX5_CORE_EN_DCB=y
CONFIG_MLX5_CORE_EN=y
+CONFIG_MLX5_CORE_IPOIB=y
CONFIG_MLX5_CORE=m
CONFIG_MLX5_INFINIBAND=m
# CONFIG_MLX90614 is not set
@@ -2778,6 +2790,7 @@ CONFIG_MMA7660=m
CONFIG_MMC_BLOCK_BOUNCE=y
CONFIG_MMC_BLOCK=m
CONFIG_MMC_BLOCK_MINORS=8
+# CONFIG_MMC_CAVIUM_THUNDERX is not set
CONFIG_MMC_CB710=m
# CONFIG_MMC_DEBUG is not set
CONFIG_MMC=m
@@ -2796,6 +2809,7 @@ CONFIG_MMC_SDHCI=m
CONFIG_MMC_SDHCI_OF=m
CONFIG_MMC_SDHCI_PCI=m
CONFIG_MMC_SDHCI_PLTFM=m
+CONFIG_MMC_SDHCI_XENON=m
CONFIG_MMC_SDRICOH_CS=m
# CONFIG_MMC_SPI is not set
# CONFIG_MMC_TEST is not set
@@ -2995,11 +3009,15 @@ CONFIG_NET_DEVLINK=m
CONFIG_NET_DROP_MONITOR=y
CONFIG_NET_DSA_BCM_SF2=m
CONFIG_NET_DSA_HWMON=y
+CONFIG_NET_DSA_LOOP=m
CONFIG_NET_DSA=m
+CONFIG_NET_DSA_MT7530=m
CONFIG_NET_DSA_MV88E6060=m
CONFIG_NET_DSA_MV88E6XXX_GLOBAL2=y
CONFIG_NET_DSA_MV88E6XXX=m
CONFIG_NET_DSA_QCA8K=m
+CONFIG_NET_DSA_SMSC_LAN9303_I2C=m
+CONFIG_NET_DSA_SMSC_LAN9303_MDIO=m
CONFIG_NET_EMATCH_CANID=m
CONFIG_NET_EMATCH_CMP=m
CONFIG_NET_EMATCH_IPSET=m
@@ -3121,6 +3139,7 @@ CONFIG_NET_SCH_ATM=m
CONFIG_NET_SCH_CBQ=m
CONFIG_NET_SCH_CHOKE=m
CONFIG_NET_SCH_CODEL=m
+# CONFIG_NET_SCH_DEFAULT is not set
CONFIG_NET_SCH_DRR=m
CONFIG_NET_SCH_DSMARK=m
CONFIG_NET_SCHED=y
@@ -3217,6 +3236,7 @@ CONFIG_NET_VRF=m
CONFIG_NETWORK_FILESYSTEMS=y
CONFIG_NETWORK_PHY_TIMESTAMPING=y
CONFIG_NETXEN_NIC=m
+# CONFIG_NET_XGENE_V2 is not set
CONFIG_NET=y
CONFIG_NEW_LEDS=y
CONFIG_NFC_DIGITAL=m
@@ -3885,6 +3905,8 @@ CONFIG_ROCKETPORT=m
CONFIG_ROMFS_FS=m
CONFIG_ROSE=m
CONFIG_RPCSEC_GSS_KRB5=m
+# CONFIG_RPMSG_CHAR is not set
+# CONFIG_RPMSG_QCOM_SMD is not set
CONFIG_RPR0521=m
CONFIG_RSI_91X=m
CONFIG_RSI_DEBUGFS=y
@@ -4961,6 +4983,7 @@ CONFIG_THRUSTMASTER_FF=y
# CONFIG_TI_DAC7512 is not set
CONFIG_TIFM_7XX1=m
CONFIG_TIFM_CORE=m
+CONFIG_TIGON3_HWMON=y
CONFIG_TIGON3=m
# CONFIG_TIMB_DMA is not set
# CONFIG_TIMER_STATS is not set
@@ -5581,6 +5604,7 @@ CONFIG_VLSI_FIR=m
# CONFIG_VMXNET3 is not set
CONFIG_VORTEX=m
CONFIG_VSOCKETS=m
+CONFIG_VSOCKMON=m
CONFIG_VSX=y
# CONFIG_VT6655 is not set
# CONFIG_VT6656 is not set
diff --git a/kernel-ppc64.config b/kernel-ppc64.config
index d7646f02c..b0170af60 100644
--- a/kernel-ppc64.config
+++ b/kernel-ppc64.config
@@ -601,16 +601,19 @@ CONFIG_CAN_ESD_USB2=m
# CONFIG_CAN_GRCAN is not set
CONFIG_CAN_GS_USB=m
CONFIG_CAN_GW=m
+CONFIG_CAN_HI311X=m
CONFIG_CAN_IFI_CANFD=m
CONFIG_CAN_KVASER_PCI=m
CONFIG_CAN_KVASER_USB=m
CONFIG_CAN_LEDS=y
CONFIG_CAN=m
CONFIG_CAN_M_CAN=m
+CONFIG_CAN_MCBA_USB=m
# CONFIG_CAN_MCP251X is not set
# CONFIG_CAN_MPC5XXX is not set
# CONFIG_CAN_MSCAN is not set
CONFIG_CAN_PEAK_PCIEC=y
+CONFIG_CAN_PEAK_PCIEFD=m
CONFIG_CAN_PEAK_PCI=m
# CONFIG_CAN_PEAK_PCMCIA is not set
CONFIG_CAN_PEAK_USB=m
@@ -624,6 +627,7 @@ CONFIG_CAN_SLCAN=m
CONFIG_CAN_SOFTING=m
# CONFIG_CAN_TSCAN1 is not set
CONFIG_CAN_VCAN=m
+CONFIG_CAN_VXCAN=m
# CONFIG_CAN_XILINXCAN is not set
CONFIG_CAPI_AVM=y
CONFIG_CAPI_EICON=y
@@ -812,11 +816,13 @@ CONFIG_CRYPTO_CMAC=m
CONFIG_CRYPTO_CRC32C_VPMSUM=m
CONFIG_CRYPTO_CRC32C=y
CONFIG_CRYPTO_CRC32=m
+CONFIG_CRYPTO_CRCT10DIF_VPMSUM=m
# CONFIG_CRYPTO_CRYPTD is not set
CONFIG_CRYPTO_CTR=y
CONFIG_CRYPTO_CTS=y
CONFIG_CRYPTO_DEFLATE=m
CONFIG_CRYPTO_DES=m
+# CONFIG_CRYPTO_DEV_CAVIUM_ZIP is not set
CONFIG_CRYPTO_DEV_CHELSIO=m
# CONFIG_CRYPTO_DEV_FSL_CAAM is not set
CONFIG_CRYPTO_DEV_HIFN_795X=m
@@ -886,6 +892,7 @@ CONFIG_CRYPTO_USER_API_RNG=y
CONFIG_CRYPTO_USER_API_SKCIPHER=y
CONFIG_CRYPTO_USER=m
CONFIG_CRYPTO_VMAC=m
+# CONFIG_CRYPTO_VPMSUM_TESTER is not set
CONFIG_CRYPTO_WP512=m
CONFIG_CRYPTO_XCBC=m
CONFIG_CRYPTO_XTS=y
@@ -1522,6 +1529,7 @@ CONFIG_HFSPLUS_FS=m
# CONFIG_HI8435 is not set
# CONFIG_HIBERNATION is not set
CONFIG_HID_A4TECH=m
+CONFIG_HID_ACCUTOUCH=m
CONFIG_HID_ACRUX_FF=y
CONFIG_HID_ACRUX=m
CONFIG_HID_ALPS=m
@@ -1565,6 +1573,7 @@ CONFIG_HID_MAYFLASH=m
CONFIG_HID_MICROSOFT=m
CONFIG_HID_MONTEREY=m
CONFIG_HID_MULTITOUCH=m
+CONFIG_HID_NTI=m
CONFIG_HID_NTRIG=y
CONFIG_HID_ORTEK=m
CONFIG_HID_PANTHERLORD=m
@@ -1804,6 +1813,8 @@ CONFIG_IEEE802154_ADF7242=m
# CONFIG_IEEE802154_AT86RF230_DEBUGFS is not set
CONFIG_IEEE802154_AT86RF230=m
CONFIG_IEEE802154_ATUSB=m
+# CONFIG_IEEE802154_CA8210_DEBUGFS is not set
+CONFIG_IEEE802154_CA8210=m
CONFIG_IEEE802154_CC2520=m
CONFIG_IEEE802154_DRIVERS=m
CONFIG_IEEE802154_FAKELB=m
@@ -2733,6 +2744,7 @@ CONFIG_MLX4_EN=m
CONFIG_MLX4_INFINIBAND=m
CONFIG_MLX5_CORE_EN_DCB=y
CONFIG_MLX5_CORE_EN=y
+CONFIG_MLX5_CORE_IPOIB=y
CONFIG_MLX5_CORE=m
CONFIG_MLX5_INFINIBAND=m
# CONFIG_MLX90614 is not set
@@ -2757,6 +2769,7 @@ CONFIG_MMA7660=m
CONFIG_MMC_BLOCK_BOUNCE=y
CONFIG_MMC_BLOCK=m
CONFIG_MMC_BLOCK_MINORS=8
+# CONFIG_MMC_CAVIUM_THUNDERX is not set
CONFIG_MMC_CB710=m
# CONFIG_MMC_DEBUG is not set
CONFIG_MMC=m
@@ -2775,6 +2788,7 @@ CONFIG_MMC_SDHCI=m
CONFIG_MMC_SDHCI_OF=m
CONFIG_MMC_SDHCI_PCI=m
CONFIG_MMC_SDHCI_PLTFM=m
+CONFIG_MMC_SDHCI_XENON=m
CONFIG_MMC_SDRICOH_CS=m
# CONFIG_MMC_SPI is not set
# CONFIG_MMC_TEST is not set
@@ -2973,11 +2987,15 @@ CONFIG_NET_DEVLINK=m
CONFIG_NET_DROP_MONITOR=y
CONFIG_NET_DSA_BCM_SF2=m
CONFIG_NET_DSA_HWMON=y
+CONFIG_NET_DSA_LOOP=m
CONFIG_NET_DSA=m
+CONFIG_NET_DSA_MT7530=m
CONFIG_NET_DSA_MV88E6060=m
CONFIG_NET_DSA_MV88E6XXX_GLOBAL2=y
CONFIG_NET_DSA_MV88E6XXX=m
CONFIG_NET_DSA_QCA8K=m
+CONFIG_NET_DSA_SMSC_LAN9303_I2C=m
+CONFIG_NET_DSA_SMSC_LAN9303_MDIO=m
CONFIG_NET_EMATCH_CANID=m
CONFIG_NET_EMATCH_CMP=m
CONFIG_NET_EMATCH_IPSET=m
@@ -3099,6 +3117,7 @@ CONFIG_NET_SCH_ATM=m
CONFIG_NET_SCH_CBQ=m
CONFIG_NET_SCH_CHOKE=m
CONFIG_NET_SCH_CODEL=m
+# CONFIG_NET_SCH_DEFAULT is not set
CONFIG_NET_SCH_DRR=m
CONFIG_NET_SCH_DSMARK=m
CONFIG_NET_SCHED=y
@@ -3195,6 +3214,7 @@ CONFIG_NET_VRF=m
CONFIG_NETWORK_FILESYSTEMS=y
CONFIG_NETWORK_PHY_TIMESTAMPING=y
CONFIG_NETXEN_NIC=m
+# CONFIG_NET_XGENE_V2 is not set
CONFIG_NET=y
CONFIG_NEW_LEDS=y
CONFIG_NFC_DIGITAL=m
@@ -3862,6 +3882,8 @@ CONFIG_ROCKETPORT=m
CONFIG_ROMFS_FS=m
CONFIG_ROSE=m
CONFIG_RPCSEC_GSS_KRB5=m
+# CONFIG_RPMSG_CHAR is not set
+# CONFIG_RPMSG_QCOM_SMD is not set
CONFIG_RPR0521=m
CONFIG_RSI_91X=m
CONFIG_RSI_DEBUGFS=y
@@ -4937,6 +4959,7 @@ CONFIG_THRUSTMASTER_FF=y
# CONFIG_TI_DAC7512 is not set
CONFIG_TIFM_7XX1=m
CONFIG_TIFM_CORE=m
+CONFIG_TIGON3_HWMON=y
CONFIG_TIGON3=m
# CONFIG_TIMB_DMA is not set
# CONFIG_TIMER_STATS is not set
@@ -5557,6 +5580,7 @@ CONFIG_VLSI_FIR=m
# CONFIG_VMXNET3 is not set
CONFIG_VORTEX=m
CONFIG_VSOCKETS=m
+CONFIG_VSOCKMON=m
CONFIG_VSX=y
# CONFIG_VT6655 is not set
# CONFIG_VT6656 is not set
diff --git a/kernel-ppc64le-debug.config b/kernel-ppc64le-debug.config
index ce93a6c4a..16d1b0068 100644
--- a/kernel-ppc64le-debug.config
+++ b/kernel-ppc64le-debug.config
@@ -559,16 +559,19 @@ CONFIG_CAN_ESD_USB2=m
# CONFIG_CAN_GRCAN is not set
CONFIG_CAN_GS_USB=m
CONFIG_CAN_GW=m
+CONFIG_CAN_HI311X=m
CONFIG_CAN_IFI_CANFD=m
CONFIG_CAN_KVASER_PCI=m
CONFIG_CAN_KVASER_USB=m
CONFIG_CAN_LEDS=y
CONFIG_CAN=m
CONFIG_CAN_M_CAN=m
+CONFIG_CAN_MCBA_USB=m
# CONFIG_CAN_MCP251X is not set
# CONFIG_CAN_MPC5XXX is not set
# CONFIG_CAN_MSCAN is not set
CONFIG_CAN_PEAK_PCIEC=y
+CONFIG_CAN_PEAK_PCIEFD=m
CONFIG_CAN_PEAK_PCI=m
# CONFIG_CAN_PEAK_PCMCIA is not set
CONFIG_CAN_PEAK_USB=m
@@ -582,6 +585,7 @@ CONFIG_CAN_SLCAN=m
CONFIG_CAN_SOFTING=m
# CONFIG_CAN_TSCAN1 is not set
CONFIG_CAN_VCAN=m
+CONFIG_CAN_VXCAN=m
# CONFIG_CAN_XILINXCAN is not set
CONFIG_CAPI_AVM=y
CONFIG_CAPI_EICON=y
@@ -769,11 +773,13 @@ CONFIG_CRYPTO_CMAC=m
CONFIG_CRYPTO_CRC32C_VPMSUM=m
CONFIG_CRYPTO_CRC32C=y
CONFIG_CRYPTO_CRC32=m
+CONFIG_CRYPTO_CRCT10DIF_VPMSUM=m
# CONFIG_CRYPTO_CRYPTD is not set
CONFIG_CRYPTO_CTR=y
CONFIG_CRYPTO_CTS=y
CONFIG_CRYPTO_DEFLATE=m
CONFIG_CRYPTO_DES=m
+# CONFIG_CRYPTO_DEV_CAVIUM_ZIP is not set
CONFIG_CRYPTO_DEV_CHELSIO=m
# CONFIG_CRYPTO_DEV_FSL_CAAM is not set
CONFIG_CRYPTO_DEV_HIFN_795X=m
@@ -843,6 +849,7 @@ CONFIG_CRYPTO_USER_API_RNG=y
CONFIG_CRYPTO_USER_API_SKCIPHER=y
CONFIG_CRYPTO_USER=m
CONFIG_CRYPTO_VMAC=m
+# CONFIG_CRYPTO_VPMSUM_TESTER is not set
CONFIG_CRYPTO_WP512=m
CONFIG_CRYPTO_XCBC=m
CONFIG_CRYPTO_XTS=y
@@ -1494,6 +1501,7 @@ CONFIG_HFSPLUS_FS=m
# CONFIG_HI8435 is not set
# CONFIG_HIBERNATION is not set
CONFIG_HID_A4TECH=m
+CONFIG_HID_ACCUTOUCH=m
CONFIG_HID_ACRUX_FF=y
CONFIG_HID_ACRUX=m
CONFIG_HID_ALPS=m
@@ -1537,6 +1545,7 @@ CONFIG_HID_MAYFLASH=m
CONFIG_HID_MICROSOFT=m
CONFIG_HID_MONTEREY=m
CONFIG_HID_MULTITOUCH=m
+CONFIG_HID_NTI=m
CONFIG_HID_NTRIG=y
CONFIG_HID_ORTEK=m
CONFIG_HID_PANTHERLORD=m
@@ -1768,6 +1777,8 @@ CONFIG_IEEE802154_ADF7242=m
# CONFIG_IEEE802154_AT86RF230_DEBUGFS is not set
CONFIG_IEEE802154_AT86RF230=m
CONFIG_IEEE802154_ATUSB=m
+# CONFIG_IEEE802154_CA8210_DEBUGFS is not set
+CONFIG_IEEE802154_CA8210=m
CONFIG_IEEE802154_CC2520=m
CONFIG_IEEE802154_DRIVERS=m
CONFIG_IEEE802154_FAKELB=m
@@ -2700,6 +2711,7 @@ CONFIG_MLX4_EN=m
CONFIG_MLX4_INFINIBAND=m
CONFIG_MLX5_CORE_EN_DCB=y
CONFIG_MLX5_CORE_EN=y
+CONFIG_MLX5_CORE_IPOIB=y
CONFIG_MLX5_CORE=m
CONFIG_MLX5_INFINIBAND=m
# CONFIG_MLX90614 is not set
@@ -2724,6 +2736,7 @@ CONFIG_MMA7660=m
CONFIG_MMC_BLOCK_BOUNCE=y
CONFIG_MMC_BLOCK=m
CONFIG_MMC_BLOCK_MINORS=8
+# CONFIG_MMC_CAVIUM_THUNDERX is not set
CONFIG_MMC_CB710=m
# CONFIG_MMC_DEBUG is not set
CONFIG_MMC=m
@@ -2742,6 +2755,7 @@ CONFIG_MMC_SDHCI=m
CONFIG_MMC_SDHCI_OF=m
CONFIG_MMC_SDHCI_PCI=m
CONFIG_MMC_SDHCI_PLTFM=m
+CONFIG_MMC_SDHCI_XENON=m
CONFIG_MMC_SDRICOH_CS=m
# CONFIG_MMC_SPI is not set
# CONFIG_MMC_TEST is not set
@@ -2940,11 +2954,15 @@ CONFIG_NET_DEVLINK=m
CONFIG_NET_DROP_MONITOR=y
CONFIG_NET_DSA_BCM_SF2=m
CONFIG_NET_DSA_HWMON=y
+CONFIG_NET_DSA_LOOP=m
CONFIG_NET_DSA=m
+CONFIG_NET_DSA_MT7530=m
CONFIG_NET_DSA_MV88E6060=m
CONFIG_NET_DSA_MV88E6XXX_GLOBAL2=y
CONFIG_NET_DSA_MV88E6XXX=m
CONFIG_NET_DSA_QCA8K=m
+CONFIG_NET_DSA_SMSC_LAN9303_I2C=m
+CONFIG_NET_DSA_SMSC_LAN9303_MDIO=m
CONFIG_NET_EMATCH_CANID=m
CONFIG_NET_EMATCH_CMP=m
CONFIG_NET_EMATCH_IPSET=m
@@ -3066,6 +3084,7 @@ CONFIG_NET_SCH_ATM=m
CONFIG_NET_SCH_CBQ=m
CONFIG_NET_SCH_CHOKE=m
CONFIG_NET_SCH_CODEL=m
+# CONFIG_NET_SCH_DEFAULT is not set
CONFIG_NET_SCH_DRR=m
CONFIG_NET_SCH_DSMARK=m
CONFIG_NET_SCHED=y
@@ -3162,6 +3181,7 @@ CONFIG_NET_VRF=m
CONFIG_NETWORK_FILESYSTEMS=y
CONFIG_NETWORK_PHY_TIMESTAMPING=y
CONFIG_NETXEN_NIC=m
+# CONFIG_NET_XGENE_V2 is not set
CONFIG_NET=y
CONFIG_NEW_LEDS=y
CONFIG_NFC_DIGITAL=m
@@ -3825,6 +3845,8 @@ CONFIG_ROCKETPORT=m
CONFIG_ROMFS_FS=m
CONFIG_ROSE=m
CONFIG_RPCSEC_GSS_KRB5=m
+# CONFIG_RPMSG_CHAR is not set
+# CONFIG_RPMSG_QCOM_SMD is not set
CONFIG_RPR0521=m
CONFIG_RSI_91X=m
CONFIG_RSI_DEBUGFS=y
@@ -4890,6 +4912,7 @@ CONFIG_THRUSTMASTER_FF=y
# CONFIG_TI_DAC7512 is not set
CONFIG_TIFM_7XX1=m
CONFIG_TIFM_CORE=m
+CONFIG_TIGON3_HWMON=y
CONFIG_TIGON3=m
# CONFIG_TIMB_DMA is not set
# CONFIG_TIMER_STATS is not set
@@ -5510,6 +5533,7 @@ CONFIG_VLSI_FIR=m
# CONFIG_VMXNET3 is not set
CONFIG_VORTEX=m
CONFIG_VSOCKETS=m
+CONFIG_VSOCKMON=m
CONFIG_VSX=y
# CONFIG_VT6655 is not set
# CONFIG_VT6656 is not set
diff --git a/kernel-ppc64le.config b/kernel-ppc64le.config
index ba1dd4306..f2fccc557 100644
--- a/kernel-ppc64le.config
+++ b/kernel-ppc64le.config
@@ -558,16 +558,19 @@ CONFIG_CAN_ESD_USB2=m
# CONFIG_CAN_GRCAN is not set
CONFIG_CAN_GS_USB=m
CONFIG_CAN_GW=m
+CONFIG_CAN_HI311X=m
CONFIG_CAN_IFI_CANFD=m
CONFIG_CAN_KVASER_PCI=m
CONFIG_CAN_KVASER_USB=m
CONFIG_CAN_LEDS=y
CONFIG_CAN=m
CONFIG_CAN_M_CAN=m
+CONFIG_CAN_MCBA_USB=m
# CONFIG_CAN_MCP251X is not set
# CONFIG_CAN_MPC5XXX is not set
# CONFIG_CAN_MSCAN is not set
CONFIG_CAN_PEAK_PCIEC=y
+CONFIG_CAN_PEAK_PCIEFD=m
CONFIG_CAN_PEAK_PCI=m
# CONFIG_CAN_PEAK_PCMCIA is not set
CONFIG_CAN_PEAK_USB=m
@@ -581,6 +584,7 @@ CONFIG_CAN_SLCAN=m
CONFIG_CAN_SOFTING=m
# CONFIG_CAN_TSCAN1 is not set
CONFIG_CAN_VCAN=m
+CONFIG_CAN_VXCAN=m
# CONFIG_CAN_XILINXCAN is not set
CONFIG_CAPI_AVM=y
CONFIG_CAPI_EICON=y
@@ -767,11 +771,13 @@ CONFIG_CRYPTO_CMAC=m
CONFIG_CRYPTO_CRC32C_VPMSUM=m
CONFIG_CRYPTO_CRC32C=y
CONFIG_CRYPTO_CRC32=m
+CONFIG_CRYPTO_CRCT10DIF_VPMSUM=m
# CONFIG_CRYPTO_CRYPTD is not set
CONFIG_CRYPTO_CTR=y
CONFIG_CRYPTO_CTS=y
CONFIG_CRYPTO_DEFLATE=m
CONFIG_CRYPTO_DES=m
+# CONFIG_CRYPTO_DEV_CAVIUM_ZIP is not set
CONFIG_CRYPTO_DEV_CHELSIO=m
# CONFIG_CRYPTO_DEV_FSL_CAAM is not set
CONFIG_CRYPTO_DEV_HIFN_795X=m
@@ -841,6 +847,7 @@ CONFIG_CRYPTO_USER_API_RNG=y
CONFIG_CRYPTO_USER_API_SKCIPHER=y
CONFIG_CRYPTO_USER=m
CONFIG_CRYPTO_VMAC=m
+# CONFIG_CRYPTO_VPMSUM_TESTER is not set
CONFIG_CRYPTO_WP512=m
CONFIG_CRYPTO_XCBC=m
CONFIG_CRYPTO_XTS=y
@@ -1476,6 +1483,7 @@ CONFIG_HFSPLUS_FS=m
# CONFIG_HI8435 is not set
# CONFIG_HIBERNATION is not set
CONFIG_HID_A4TECH=m
+CONFIG_HID_ACCUTOUCH=m
CONFIG_HID_ACRUX_FF=y
CONFIG_HID_ACRUX=m
CONFIG_HID_ALPS=m
@@ -1519,6 +1527,7 @@ CONFIG_HID_MAYFLASH=m
CONFIG_HID_MICROSOFT=m
CONFIG_HID_MONTEREY=m
CONFIG_HID_MULTITOUCH=m
+CONFIG_HID_NTI=m
CONFIG_HID_NTRIG=y
CONFIG_HID_ORTEK=m
CONFIG_HID_PANTHERLORD=m
@@ -1750,6 +1759,8 @@ CONFIG_IEEE802154_ADF7242=m
# CONFIG_IEEE802154_AT86RF230_DEBUGFS is not set
CONFIG_IEEE802154_AT86RF230=m
CONFIG_IEEE802154_ATUSB=m
+# CONFIG_IEEE802154_CA8210_DEBUGFS is not set
+CONFIG_IEEE802154_CA8210=m
CONFIG_IEEE802154_CC2520=m
CONFIG_IEEE802154_DRIVERS=m
CONFIG_IEEE802154_FAKELB=m
@@ -2679,6 +2690,7 @@ CONFIG_MLX4_EN=m
CONFIG_MLX4_INFINIBAND=m
CONFIG_MLX5_CORE_EN_DCB=y
CONFIG_MLX5_CORE_EN=y
+CONFIG_MLX5_CORE_IPOIB=y
CONFIG_MLX5_CORE=m
CONFIG_MLX5_INFINIBAND=m
# CONFIG_MLX90614 is not set
@@ -2703,6 +2715,7 @@ CONFIG_MMA7660=m
CONFIG_MMC_BLOCK_BOUNCE=y
CONFIG_MMC_BLOCK=m
CONFIG_MMC_BLOCK_MINORS=8
+# CONFIG_MMC_CAVIUM_THUNDERX is not set
CONFIG_MMC_CB710=m
# CONFIG_MMC_DEBUG is not set
CONFIG_MMC=m
@@ -2721,6 +2734,7 @@ CONFIG_MMC_SDHCI=m
CONFIG_MMC_SDHCI_OF=m
CONFIG_MMC_SDHCI_PCI=m
CONFIG_MMC_SDHCI_PLTFM=m
+CONFIG_MMC_SDHCI_XENON=m
CONFIG_MMC_SDRICOH_CS=m
# CONFIG_MMC_SPI is not set
# CONFIG_MMC_TEST is not set
@@ -2918,11 +2932,15 @@ CONFIG_NET_DEVLINK=m
CONFIG_NET_DROP_MONITOR=y
CONFIG_NET_DSA_BCM_SF2=m
CONFIG_NET_DSA_HWMON=y
+CONFIG_NET_DSA_LOOP=m
CONFIG_NET_DSA=m
+CONFIG_NET_DSA_MT7530=m
CONFIG_NET_DSA_MV88E6060=m
CONFIG_NET_DSA_MV88E6XXX_GLOBAL2=y
CONFIG_NET_DSA_MV88E6XXX=m
CONFIG_NET_DSA_QCA8K=m
+CONFIG_NET_DSA_SMSC_LAN9303_I2C=m
+CONFIG_NET_DSA_SMSC_LAN9303_MDIO=m
CONFIG_NET_EMATCH_CANID=m
CONFIG_NET_EMATCH_CMP=m
CONFIG_NET_EMATCH_IPSET=m
@@ -3044,6 +3062,7 @@ CONFIG_NET_SCH_ATM=m
CONFIG_NET_SCH_CBQ=m
CONFIG_NET_SCH_CHOKE=m
CONFIG_NET_SCH_CODEL=m
+# CONFIG_NET_SCH_DEFAULT is not set
CONFIG_NET_SCH_DRR=m
CONFIG_NET_SCH_DSMARK=m
CONFIG_NET_SCHED=y
@@ -3140,6 +3159,7 @@ CONFIG_NET_VRF=m
CONFIG_NETWORK_FILESYSTEMS=y
CONFIG_NETWORK_PHY_TIMESTAMPING=y
CONFIG_NETXEN_NIC=m
+# CONFIG_NET_XGENE_V2 is not set
CONFIG_NET=y
CONFIG_NEW_LEDS=y
CONFIG_NFC_DIGITAL=m
@@ -3802,6 +3822,8 @@ CONFIG_ROCKETPORT=m
CONFIG_ROMFS_FS=m
CONFIG_ROSE=m
CONFIG_RPCSEC_GSS_KRB5=m
+# CONFIG_RPMSG_CHAR is not set
+# CONFIG_RPMSG_QCOM_SMD is not set
CONFIG_RPR0521=m
CONFIG_RSI_91X=m
CONFIG_RSI_DEBUGFS=y
@@ -4866,6 +4888,7 @@ CONFIG_THRUSTMASTER_FF=y
# CONFIG_TI_DAC7512 is not set
CONFIG_TIFM_7XX1=m
CONFIG_TIFM_CORE=m
+CONFIG_TIGON3_HWMON=y
CONFIG_TIGON3=m
# CONFIG_TIMB_DMA is not set
# CONFIG_TIMER_STATS is not set
@@ -5486,6 +5509,7 @@ CONFIG_VLSI_FIR=m
# CONFIG_VMXNET3 is not set
CONFIG_VORTEX=m
CONFIG_VSOCKETS=m
+CONFIG_VSOCKMON=m
CONFIG_VSX=y
# CONFIG_VT6655 is not set
# CONFIG_VT6656 is not set
diff --git a/kernel-ppc64p7-debug.config b/kernel-ppc64p7-debug.config
index 93fca9886..4650bf7f6 100644
--- a/kernel-ppc64p7-debug.config
+++ b/kernel-ppc64p7-debug.config
@@ -559,16 +559,19 @@ CONFIG_CAN_ESD_USB2=m
# CONFIG_CAN_GRCAN is not set
CONFIG_CAN_GS_USB=m
CONFIG_CAN_GW=m
+CONFIG_CAN_HI311X=m
CONFIG_CAN_IFI_CANFD=m
CONFIG_CAN_KVASER_PCI=m
CONFIG_CAN_KVASER_USB=m
CONFIG_CAN_LEDS=y
CONFIG_CAN=m
CONFIG_CAN_M_CAN=m
+CONFIG_CAN_MCBA_USB=m
# CONFIG_CAN_MCP251X is not set
# CONFIG_CAN_MPC5XXX is not set
# CONFIG_CAN_MSCAN is not set
CONFIG_CAN_PEAK_PCIEC=y
+CONFIG_CAN_PEAK_PCIEFD=m
CONFIG_CAN_PEAK_PCI=m
# CONFIG_CAN_PEAK_PCMCIA is not set
CONFIG_CAN_PEAK_USB=m
@@ -582,6 +585,7 @@ CONFIG_CAN_SLCAN=m
CONFIG_CAN_SOFTING=m
# CONFIG_CAN_TSCAN1 is not set
CONFIG_CAN_VCAN=m
+CONFIG_CAN_VXCAN=m
# CONFIG_CAN_XILINXCAN is not set
CONFIG_CAPI_AVM=y
CONFIG_CAPI_EICON=y
@@ -769,11 +773,13 @@ CONFIG_CRYPTO_CMAC=m
CONFIG_CRYPTO_CRC32C_VPMSUM=m
CONFIG_CRYPTO_CRC32C=y
CONFIG_CRYPTO_CRC32=m
+CONFIG_CRYPTO_CRCT10DIF_VPMSUM=m
# CONFIG_CRYPTO_CRYPTD is not set
CONFIG_CRYPTO_CTR=y
CONFIG_CRYPTO_CTS=y
CONFIG_CRYPTO_DEFLATE=m
CONFIG_CRYPTO_DES=m
+# CONFIG_CRYPTO_DEV_CAVIUM_ZIP is not set
CONFIG_CRYPTO_DEV_CHELSIO=m
# CONFIG_CRYPTO_DEV_FSL_CAAM is not set
CONFIG_CRYPTO_DEV_HIFN_795X=m
@@ -843,6 +849,7 @@ CONFIG_CRYPTO_USER_API_RNG=y
CONFIG_CRYPTO_USER_API_SKCIPHER=y
CONFIG_CRYPTO_USER=m
CONFIG_CRYPTO_VMAC=m
+# CONFIG_CRYPTO_VPMSUM_TESTER is not set
CONFIG_CRYPTO_WP512=m
CONFIG_CRYPTO_XCBC=m
CONFIG_CRYPTO_XTS=y
@@ -1493,6 +1500,7 @@ CONFIG_HFSPLUS_FS=m
# CONFIG_HI8435 is not set
# CONFIG_HIBERNATION is not set
CONFIG_HID_A4TECH=m
+CONFIG_HID_ACCUTOUCH=m
CONFIG_HID_ACRUX_FF=y
CONFIG_HID_ACRUX=m
CONFIG_HID_ALPS=m
@@ -1536,6 +1544,7 @@ CONFIG_HID_MAYFLASH=m
CONFIG_HID_MICROSOFT=m
CONFIG_HID_MONTEREY=m
CONFIG_HID_MULTITOUCH=m
+CONFIG_HID_NTI=m
CONFIG_HID_NTRIG=y
CONFIG_HID_ORTEK=m
CONFIG_HID_PANTHERLORD=m
@@ -1767,6 +1776,8 @@ CONFIG_IEEE802154_ADF7242=m
# CONFIG_IEEE802154_AT86RF230_DEBUGFS is not set
CONFIG_IEEE802154_AT86RF230=m
CONFIG_IEEE802154_ATUSB=m
+# CONFIG_IEEE802154_CA8210_DEBUGFS is not set
+CONFIG_IEEE802154_CA8210=m
CONFIG_IEEE802154_CC2520=m
CONFIG_IEEE802154_DRIVERS=m
CONFIG_IEEE802154_FAKELB=m
@@ -2699,6 +2710,7 @@ CONFIG_MLX4_EN=m
CONFIG_MLX4_INFINIBAND=m
CONFIG_MLX5_CORE_EN_DCB=y
CONFIG_MLX5_CORE_EN=y
+CONFIG_MLX5_CORE_IPOIB=y
CONFIG_MLX5_CORE=m
CONFIG_MLX5_INFINIBAND=m
# CONFIG_MLX90614 is not set
@@ -2723,6 +2735,7 @@ CONFIG_MMA7660=m
CONFIG_MMC_BLOCK_BOUNCE=y
CONFIG_MMC_BLOCK=m
CONFIG_MMC_BLOCK_MINORS=8
+# CONFIG_MMC_CAVIUM_THUNDERX is not set
CONFIG_MMC_CB710=m
# CONFIG_MMC_DEBUG is not set
CONFIG_MMC=m
@@ -2741,6 +2754,7 @@ CONFIG_MMC_SDHCI=m
CONFIG_MMC_SDHCI_OF=m
CONFIG_MMC_SDHCI_PCI=m
CONFIG_MMC_SDHCI_PLTFM=m
+CONFIG_MMC_SDHCI_XENON=m
CONFIG_MMC_SDRICOH_CS=m
# CONFIG_MMC_SPI is not set
# CONFIG_MMC_TEST is not set
@@ -2939,11 +2953,15 @@ CONFIG_NET_DEVLINK=m
CONFIG_NET_DROP_MONITOR=y
CONFIG_NET_DSA_BCM_SF2=m
CONFIG_NET_DSA_HWMON=y
+CONFIG_NET_DSA_LOOP=m
CONFIG_NET_DSA=m
+CONFIG_NET_DSA_MT7530=m
CONFIG_NET_DSA_MV88E6060=m
CONFIG_NET_DSA_MV88E6XXX_GLOBAL2=y
CONFIG_NET_DSA_MV88E6XXX=m
CONFIG_NET_DSA_QCA8K=m
+CONFIG_NET_DSA_SMSC_LAN9303_I2C=m
+CONFIG_NET_DSA_SMSC_LAN9303_MDIO=m
CONFIG_NET_EMATCH_CANID=m
CONFIG_NET_EMATCH_CMP=m
CONFIG_NET_EMATCH_IPSET=m
@@ -3065,6 +3083,7 @@ CONFIG_NET_SCH_ATM=m
CONFIG_NET_SCH_CBQ=m
CONFIG_NET_SCH_CHOKE=m
CONFIG_NET_SCH_CODEL=m
+# CONFIG_NET_SCH_DEFAULT is not set
CONFIG_NET_SCH_DRR=m
CONFIG_NET_SCH_DSMARK=m
CONFIG_NET_SCHED=y
@@ -3161,6 +3180,7 @@ CONFIG_NET_VRF=m
CONFIG_NETWORK_FILESYSTEMS=y
CONFIG_NETWORK_PHY_TIMESTAMPING=y
CONFIG_NETXEN_NIC=m
+# CONFIG_NET_XGENE_V2 is not set
CONFIG_NET=y
CONFIG_NEW_LEDS=y
CONFIG_NFC_DIGITAL=m
@@ -3824,6 +3844,8 @@ CONFIG_ROCKETPORT=m
CONFIG_ROMFS_FS=m
CONFIG_ROSE=m
CONFIG_RPCSEC_GSS_KRB5=m
+# CONFIG_RPMSG_CHAR is not set
+# CONFIG_RPMSG_QCOM_SMD is not set
CONFIG_RPR0521=m
CONFIG_RSI_91X=m
CONFIG_RSI_DEBUGFS=y
@@ -4889,6 +4911,7 @@ CONFIG_THRUSTMASTER_FF=y
# CONFIG_TI_DAC7512 is not set
CONFIG_TIFM_7XX1=m
CONFIG_TIFM_CORE=m
+CONFIG_TIGON3_HWMON=y
CONFIG_TIGON3=m
# CONFIG_TIMB_DMA is not set
# CONFIG_TIMER_STATS is not set
@@ -5509,6 +5532,7 @@ CONFIG_VLSI_FIR=m
# CONFIG_VMXNET3 is not set
CONFIG_VORTEX=m
CONFIG_VSOCKETS=m
+CONFIG_VSOCKMON=m
CONFIG_VSX=y
# CONFIG_VT6655 is not set
# CONFIG_VT6656 is not set
diff --git a/kernel-ppc64p7.config b/kernel-ppc64p7.config
index b6a559ae9..d8b8c478d 100644
--- a/kernel-ppc64p7.config
+++ b/kernel-ppc64p7.config
@@ -558,16 +558,19 @@ CONFIG_CAN_ESD_USB2=m
# CONFIG_CAN_GRCAN is not set
CONFIG_CAN_GS_USB=m
CONFIG_CAN_GW=m
+CONFIG_CAN_HI311X=m
CONFIG_CAN_IFI_CANFD=m
CONFIG_CAN_KVASER_PCI=m
CONFIG_CAN_KVASER_USB=m
CONFIG_CAN_LEDS=y
CONFIG_CAN=m
CONFIG_CAN_M_CAN=m
+CONFIG_CAN_MCBA_USB=m
# CONFIG_CAN_MCP251X is not set
# CONFIG_CAN_MPC5XXX is not set
# CONFIG_CAN_MSCAN is not set
CONFIG_CAN_PEAK_PCIEC=y
+CONFIG_CAN_PEAK_PCIEFD=m
CONFIG_CAN_PEAK_PCI=m
# CONFIG_CAN_PEAK_PCMCIA is not set
CONFIG_CAN_PEAK_USB=m
@@ -581,6 +584,7 @@ CONFIG_CAN_SLCAN=m
CONFIG_CAN_SOFTING=m
# CONFIG_CAN_TSCAN1 is not set
CONFIG_CAN_VCAN=m
+CONFIG_CAN_VXCAN=m
# CONFIG_CAN_XILINXCAN is not set
CONFIG_CAPI_AVM=y
CONFIG_CAPI_EICON=y
@@ -767,11 +771,13 @@ CONFIG_CRYPTO_CMAC=m
CONFIG_CRYPTO_CRC32C_VPMSUM=m
CONFIG_CRYPTO_CRC32C=y
CONFIG_CRYPTO_CRC32=m
+CONFIG_CRYPTO_CRCT10DIF_VPMSUM=m
# CONFIG_CRYPTO_CRYPTD is not set
CONFIG_CRYPTO_CTR=y
CONFIG_CRYPTO_CTS=y
CONFIG_CRYPTO_DEFLATE=m
CONFIG_CRYPTO_DES=m
+# CONFIG_CRYPTO_DEV_CAVIUM_ZIP is not set
CONFIG_CRYPTO_DEV_CHELSIO=m
# CONFIG_CRYPTO_DEV_FSL_CAAM is not set
CONFIG_CRYPTO_DEV_HIFN_795X=m
@@ -841,6 +847,7 @@ CONFIG_CRYPTO_USER_API_RNG=y
CONFIG_CRYPTO_USER_API_SKCIPHER=y
CONFIG_CRYPTO_USER=m
CONFIG_CRYPTO_VMAC=m
+# CONFIG_CRYPTO_VPMSUM_TESTER is not set
CONFIG_CRYPTO_WP512=m
CONFIG_CRYPTO_XCBC=m
CONFIG_CRYPTO_XTS=y
@@ -1475,6 +1482,7 @@ CONFIG_HFSPLUS_FS=m
# CONFIG_HI8435 is not set
# CONFIG_HIBERNATION is not set
CONFIG_HID_A4TECH=m
+CONFIG_HID_ACCUTOUCH=m
CONFIG_HID_ACRUX_FF=y
CONFIG_HID_ACRUX=m
CONFIG_HID_ALPS=m
@@ -1518,6 +1526,7 @@ CONFIG_HID_MAYFLASH=m
CONFIG_HID_MICROSOFT=m
CONFIG_HID_MONTEREY=m
CONFIG_HID_MULTITOUCH=m
+CONFIG_HID_NTI=m
CONFIG_HID_NTRIG=y
CONFIG_HID_ORTEK=m
CONFIG_HID_PANTHERLORD=m
@@ -1749,6 +1758,8 @@ CONFIG_IEEE802154_ADF7242=m
# CONFIG_IEEE802154_AT86RF230_DEBUGFS is not set
CONFIG_IEEE802154_AT86RF230=m
CONFIG_IEEE802154_ATUSB=m
+# CONFIG_IEEE802154_CA8210_DEBUGFS is not set
+CONFIG_IEEE802154_CA8210=m
CONFIG_IEEE802154_CC2520=m
CONFIG_IEEE802154_DRIVERS=m
CONFIG_IEEE802154_FAKELB=m
@@ -2678,6 +2689,7 @@ CONFIG_MLX4_EN=m
CONFIG_MLX4_INFINIBAND=m
CONFIG_MLX5_CORE_EN_DCB=y
CONFIG_MLX5_CORE_EN=y
+CONFIG_MLX5_CORE_IPOIB=y
CONFIG_MLX5_CORE=m
CONFIG_MLX5_INFINIBAND=m
# CONFIG_MLX90614 is not set
@@ -2702,6 +2714,7 @@ CONFIG_MMA7660=m
CONFIG_MMC_BLOCK_BOUNCE=y
CONFIG_MMC_BLOCK=m
CONFIG_MMC_BLOCK_MINORS=8
+# CONFIG_MMC_CAVIUM_THUNDERX is not set
CONFIG_MMC_CB710=m
# CONFIG_MMC_DEBUG is not set
CONFIG_MMC=m
@@ -2720,6 +2733,7 @@ CONFIG_MMC_SDHCI=m
CONFIG_MMC_SDHCI_OF=m
CONFIG_MMC_SDHCI_PCI=m
CONFIG_MMC_SDHCI_PLTFM=m
+CONFIG_MMC_SDHCI_XENON=m
CONFIG_MMC_SDRICOH_CS=m
# CONFIG_MMC_SPI is not set
# CONFIG_MMC_TEST is not set
@@ -2917,11 +2931,15 @@ CONFIG_NET_DEVLINK=m
CONFIG_NET_DROP_MONITOR=y
CONFIG_NET_DSA_BCM_SF2=m
CONFIG_NET_DSA_HWMON=y
+CONFIG_NET_DSA_LOOP=m
CONFIG_NET_DSA=m
+CONFIG_NET_DSA_MT7530=m
CONFIG_NET_DSA_MV88E6060=m
CONFIG_NET_DSA_MV88E6XXX_GLOBAL2=y
CONFIG_NET_DSA_MV88E6XXX=m
CONFIG_NET_DSA_QCA8K=m
+CONFIG_NET_DSA_SMSC_LAN9303_I2C=m
+CONFIG_NET_DSA_SMSC_LAN9303_MDIO=m
CONFIG_NET_EMATCH_CANID=m
CONFIG_NET_EMATCH_CMP=m
CONFIG_NET_EMATCH_IPSET=m
@@ -3043,6 +3061,7 @@ CONFIG_NET_SCH_ATM=m
CONFIG_NET_SCH_CBQ=m
CONFIG_NET_SCH_CHOKE=m
CONFIG_NET_SCH_CODEL=m
+# CONFIG_NET_SCH_DEFAULT is not set
CONFIG_NET_SCH_DRR=m
CONFIG_NET_SCH_DSMARK=m
CONFIG_NET_SCHED=y
@@ -3139,6 +3158,7 @@ CONFIG_NET_VRF=m
CONFIG_NETWORK_FILESYSTEMS=y
CONFIG_NETWORK_PHY_TIMESTAMPING=y
CONFIG_NETXEN_NIC=m
+# CONFIG_NET_XGENE_V2 is not set
CONFIG_NET=y
CONFIG_NEW_LEDS=y
CONFIG_NFC_DIGITAL=m
@@ -3801,6 +3821,8 @@ CONFIG_ROCKETPORT=m
CONFIG_ROMFS_FS=m
CONFIG_ROSE=m
CONFIG_RPCSEC_GSS_KRB5=m
+# CONFIG_RPMSG_CHAR is not set
+# CONFIG_RPMSG_QCOM_SMD is not set
CONFIG_RPR0521=m
CONFIG_RSI_91X=m
CONFIG_RSI_DEBUGFS=y
@@ -4865,6 +4887,7 @@ CONFIG_THRUSTMASTER_FF=y
# CONFIG_TI_DAC7512 is not set
CONFIG_TIFM_7XX1=m
CONFIG_TIFM_CORE=m
+CONFIG_TIGON3_HWMON=y
CONFIG_TIGON3=m
# CONFIG_TIMB_DMA is not set
# CONFIG_TIMER_STATS is not set
@@ -5485,6 +5508,7 @@ CONFIG_VLSI_FIR=m
# CONFIG_VMXNET3 is not set
CONFIG_VORTEX=m
CONFIG_VSOCKETS=m
+CONFIG_VSOCKMON=m
CONFIG_VSX=y
# CONFIG_VT6655 is not set
# CONFIG_VT6656 is not set
diff --git a/kernel-s390x-debug.config b/kernel-s390x-debug.config
index 072aef01e..5846bafdd 100644
--- a/kernel-s390x-debug.config
+++ b/kernel-s390x-debug.config
@@ -169,6 +169,7 @@ CONFIG_APPLDATA_OS=m
# CONFIG_APPLICOM is not set
CONFIG_AQUANTIA_PHY=m
CONFIG_AR5523=m
+CONFIG_ARCH_RANDOM=y
# CONFIG_ARCNET is not set
CONFIG_ARM64_ERRATUM_858921=y
CONFIG_ARM64_PTDUMP=y
@@ -556,14 +557,17 @@ CONFIG_CAN_ESD_USB2=m
# CONFIG_CAN_GRCAN is not set
CONFIG_CAN_GS_USB=m
CONFIG_CAN_GW=m
+CONFIG_CAN_HI311X=m
CONFIG_CAN_IFI_CANFD=m
# CONFIG_CAN is not set
CONFIG_CAN_KVASER_PCI=m
CONFIG_CAN_KVASER_USB=m
CONFIG_CAN_LEDS=y
CONFIG_CAN_M_CAN=m
+CONFIG_CAN_MCBA_USB=m
# CONFIG_CAN_MCP251X is not set
CONFIG_CAN_PEAK_PCIEC=y
+CONFIG_CAN_PEAK_PCIEFD=m
CONFIG_CAN_PEAK_PCI=m
# CONFIG_CAN_PEAK_PCMCIA is not set
CONFIG_CAN_PEAK_USB=m
@@ -577,6 +581,7 @@ CONFIG_CAN_SLCAN=m
CONFIG_CAN_SOFTING=m
# CONFIG_CAN_TSCAN1 is not set
CONFIG_CAN_VCAN=m
+CONFIG_CAN_VXCAN=m
# CONFIG_CAN_XILINXCAN is not set
CONFIG_CAPI_AVM=y
# CONFIG_CAPI_EICON is not set
@@ -772,6 +777,7 @@ CONFIG_CRYPTO_CTS=y
CONFIG_CRYPTO_DEFLATE=m
CONFIG_CRYPTO_DES=m
CONFIG_CRYPTO_DES_S390=m
+# CONFIG_CRYPTO_DEV_CAVIUM_ZIP is not set
CONFIG_CRYPTO_DEV_CHELSIO=m
CONFIG_CRYPTO_DEV_HIFN_795X=m
CONFIG_CRYPTO_DEV_HIFN_795X_RNG=y
@@ -1460,6 +1466,7 @@ CONFIG_HFSPLUS_FS=m
# CONFIG_HI8435 is not set
CONFIG_HIBERNATION=y
CONFIG_HID_A4TECH=m
+CONFIG_HID_ACCUTOUCH=m
CONFIG_HID_ACRUX_FF=y
CONFIG_HID_ACRUX=m
CONFIG_HID_ALPS=m
@@ -1504,6 +1511,7 @@ CONFIG_HID_MAYFLASH=m
CONFIG_HID_MICROSOFT=m
CONFIG_HID_MONTEREY=m
CONFIG_HID_MULTITOUCH=m
+CONFIG_HID_NTI=m
CONFIG_HID_NTRIG=y
CONFIG_HID_ORTEK=m
CONFIG_HID_PANTHERLORD=m
@@ -1623,6 +1631,7 @@ CONFIG_HWLAT_TRACER=y
# CONFIG_HWMON is not set
CONFIG_HWPOISON_INJECT=m
CONFIG_HW_RANDOM_OMAP=m
+CONFIG_HW_RANDOM_S390=m
CONFIG_HW_RANDOM_TIMERIOMEM=m
CONFIG_HW_RANDOM_TPM=m
CONFIG_HW_RANDOM_VIRTIO=m
@@ -1716,6 +1725,8 @@ CONFIG_IEEE802154_ADF7242=m
# CONFIG_IEEE802154_AT86RF230_DEBUGFS is not set
CONFIG_IEEE802154_AT86RF230=m
CONFIG_IEEE802154_ATUSB=m
+# CONFIG_IEEE802154_CA8210_DEBUGFS is not set
+CONFIG_IEEE802154_CA8210=m
CONFIG_IEEE802154_CC2520=m
# CONFIG_IEEE802154_DRIVERS is not set
CONFIG_IEEE802154_FAKELB=m
@@ -2444,6 +2455,7 @@ CONFIG_MAX30100=m
# CONFIG_MAX5821 is not set
# CONFIG_MAX63XX_WATCHDOG is not set
# CONFIG_MAXIM_THERMOCOUPLE is not set
+CONFIG_MAX_PHYSMEM_BITS=46
CONFIG_MAX_RAW_DEVS=8192
CONFIG_MAXSMP=y
# CONFIG_MC3230 is not set
@@ -2465,6 +2477,7 @@ CONFIG_MDIO_BITBANG=m
# CONFIG_MDIO_BUS_MUX_GPIO is not set
# CONFIG_MDIO_BUS_MUX is not set
# CONFIG_MDIO_BUS_MUX_MMIOREG is not set
+CONFIG_MDIO_DEVICE=m
# CONFIG_MDIO_GPIO is not set
# CONFIG_MDIO_HISI_FEMAC is not set
# CONFIG_MDIO_OCTEON is not set
@@ -2634,6 +2647,7 @@ CONFIG_MLX4_EN=m
CONFIG_MLX4_INFINIBAND=m
CONFIG_MLX5_CORE_EN_DCB=y
CONFIG_MLX5_CORE_EN=y
+CONFIG_MLX5_CORE_IPOIB=y
CONFIG_MLX5_CORE=m
CONFIG_MLX5_INFINIBAND=m
# CONFIG_MLX90614 is not set
@@ -2658,6 +2672,7 @@ CONFIG_MMA7660=m
CONFIG_MMC_BLOCK_BOUNCE=y
CONFIG_MMC_BLOCK=m
CONFIG_MMC_BLOCK_MINORS=8
+# CONFIG_MMC_CAVIUM_THUNDERX is not set
CONFIG_MMC_CB710=m
# CONFIG_MMC_DEBUG is not set
# CONFIG_MMC is not set
@@ -2675,6 +2690,7 @@ CONFIG_MMC_SDHCI=m
# CONFIG_MMC_SDHCI_OF is not set
CONFIG_MMC_SDHCI_PCI=m
CONFIG_MMC_SDHCI_PLTFM=m
+CONFIG_MMC_SDHCI_XENON=m
CONFIG_MMC_SDRICOH_CS=m
# CONFIG_MMC_SPI is not set
# CONFIG_MMC_TEST is not set
@@ -2869,11 +2885,15 @@ CONFIG_NET_DEVLINK=m
CONFIG_NET_DROP_MONITOR=y
CONFIG_NET_DSA_BCM_SF2=m
CONFIG_NET_DSA_HWMON=y
+CONFIG_NET_DSA_LOOP=m
CONFIG_NET_DSA=m
+CONFIG_NET_DSA_MT7530=m
CONFIG_NET_DSA_MV88E6060=m
CONFIG_NET_DSA_MV88E6XXX_GLOBAL2=y
CONFIG_NET_DSA_MV88E6XXX=m
CONFIG_NET_DSA_QCA8K=m
+CONFIG_NET_DSA_SMSC_LAN9303_I2C=m
+CONFIG_NET_DSA_SMSC_LAN9303_MDIO=m
CONFIG_NET_EMATCH_CANID=m
CONFIG_NET_EMATCH_CMP=m
CONFIG_NET_EMATCH_IPSET=m
@@ -2996,6 +3016,7 @@ CONFIG_NET_SCH_ATM=m
CONFIG_NET_SCH_CBQ=m
CONFIG_NET_SCH_CHOKE=m
CONFIG_NET_SCH_CODEL=m
+# CONFIG_NET_SCH_DEFAULT is not set
CONFIG_NET_SCH_DRR=m
CONFIG_NET_SCH_DSMARK=m
CONFIG_NET_SCHED=y
@@ -3088,6 +3109,7 @@ CONFIG_NET_VRF=m
CONFIG_NETWORK_FILESYSTEMS=y
CONFIG_NETWORK_PHY_TIMESTAMPING=y
CONFIG_NETXEN_NIC=m
+# CONFIG_NET_XGENE_V2 is not set
CONFIG_NET=y
# CONFIG_NEW_LEDS is not set
CONFIG_NFC_DIGITAL=m
@@ -3714,6 +3736,8 @@ CONFIG_ROCKETPORT=m
CONFIG_ROMFS_FS=m
CONFIG_ROSE=m
CONFIG_RPCSEC_GSS_KRB5=m
+# CONFIG_RPMSG_CHAR is not set
+# CONFIG_RPMSG_QCOM_SMD is not set
CONFIG_RPR0521=m
CONFIG_RSI_91X=m
CONFIG_RSI_DEBUGFS=y
@@ -3853,6 +3877,7 @@ CONFIG_RTLLIB=m
CONFIG_RTLWIFI=m
# CONFIG_RTS5208 is not set
CONFIG_S2IO=m
+CONFIG_S390_CCW_IOMMU=y
CONFIG_S390_GUEST_OLD_TRANSPORT=y
CONFIG_S390_GUEST=y
CONFIG_S390_HYPFS_FS=y
@@ -4779,6 +4804,7 @@ CONFIG_THRUSTMASTER_FF=y
# CONFIG_TI_DAC7512 is not set
CONFIG_TIFM_7XX1=m
# CONFIG_TIFM_CORE is not set
+CONFIG_TIGON3_HWMON=y
CONFIG_TIGON3=m
# CONFIG_TIMB_DMA is not set
# CONFIG_TIMER_STATS is not set
@@ -5262,6 +5288,7 @@ CONFIG_VETH=m
# CONFIG_VF610_ADC is not set
# CONFIG_VF610_DAC is not set
CONFIG_VFAT_FS=m
+CONFIG_VFIO_CCW=m
CONFIG_VFIO_IOMMU_TYPE1=m
CONFIG_VFIO=m
CONFIG_VFIO_MDEV_DEVICE=m
@@ -5399,6 +5426,7 @@ CONFIG_VMLOGRDR=m
# CONFIG_VMXNET3 is not set
CONFIG_VORTEX=m
CONFIG_VSOCKETS=m
+CONFIG_VSOCKMON=m
# CONFIG_VT6655 is not set
# CONFIG_VT6656 is not set
CONFIG_VT_CONSOLE=y
diff --git a/kernel-s390x.config b/kernel-s390x.config
index e62a6d411..6aee60bcb 100644
--- a/kernel-s390x.config
+++ b/kernel-s390x.config
@@ -169,6 +169,7 @@ CONFIG_APPLDATA_OS=m
# CONFIG_APPLICOM is not set
CONFIG_AQUANTIA_PHY=m
CONFIG_AR5523=m
+CONFIG_ARCH_RANDOM=y
# CONFIG_ARCNET is not set
CONFIG_ARM64_ERRATUM_858921=y
# CONFIG_AS3935 is not set
@@ -555,14 +556,17 @@ CONFIG_CAN_ESD_USB2=m
# CONFIG_CAN_GRCAN is not set
CONFIG_CAN_GS_USB=m
CONFIG_CAN_GW=m
+CONFIG_CAN_HI311X=m
CONFIG_CAN_IFI_CANFD=m
# CONFIG_CAN is not set
CONFIG_CAN_KVASER_PCI=m
CONFIG_CAN_KVASER_USB=m
CONFIG_CAN_LEDS=y
CONFIG_CAN_M_CAN=m
+CONFIG_CAN_MCBA_USB=m
# CONFIG_CAN_MCP251X is not set
CONFIG_CAN_PEAK_PCIEC=y
+CONFIG_CAN_PEAK_PCIEFD=m
CONFIG_CAN_PEAK_PCI=m
# CONFIG_CAN_PEAK_PCMCIA is not set
CONFIG_CAN_PEAK_USB=m
@@ -576,6 +580,7 @@ CONFIG_CAN_SLCAN=m
CONFIG_CAN_SOFTING=m
# CONFIG_CAN_TSCAN1 is not set
CONFIG_CAN_VCAN=m
+CONFIG_CAN_VXCAN=m
# CONFIG_CAN_XILINXCAN is not set
CONFIG_CAPI_AVM=y
# CONFIG_CAPI_EICON is not set
@@ -770,6 +775,7 @@ CONFIG_CRYPTO_CTS=y
CONFIG_CRYPTO_DEFLATE=m
CONFIG_CRYPTO_DES=m
CONFIG_CRYPTO_DES_S390=m
+# CONFIG_CRYPTO_DEV_CAVIUM_ZIP is not set
CONFIG_CRYPTO_DEV_CHELSIO=m
CONFIG_CRYPTO_DEV_HIFN_795X=m
CONFIG_CRYPTO_DEV_HIFN_795X_RNG=y
@@ -1442,6 +1448,7 @@ CONFIG_HFSPLUS_FS=m
# CONFIG_HI8435 is not set
CONFIG_HIBERNATION=y
CONFIG_HID_A4TECH=m
+CONFIG_HID_ACCUTOUCH=m
CONFIG_HID_ACRUX_FF=y
CONFIG_HID_ACRUX=m
CONFIG_HID_ALPS=m
@@ -1486,6 +1493,7 @@ CONFIG_HID_MAYFLASH=m
CONFIG_HID_MICROSOFT=m
CONFIG_HID_MONTEREY=m
CONFIG_HID_MULTITOUCH=m
+CONFIG_HID_NTI=m
CONFIG_HID_NTRIG=y
CONFIG_HID_ORTEK=m
CONFIG_HID_PANTHERLORD=m
@@ -1605,6 +1613,7 @@ CONFIG_HWLAT_TRACER=y
# CONFIG_HWMON is not set
CONFIG_HWPOISON_INJECT=m
CONFIG_HW_RANDOM_OMAP=m
+CONFIG_HW_RANDOM_S390=m
CONFIG_HW_RANDOM_TIMERIOMEM=m
CONFIG_HW_RANDOM_TPM=m
CONFIG_HW_RANDOM_VIRTIO=m
@@ -1698,6 +1707,8 @@ CONFIG_IEEE802154_ADF7242=m
# CONFIG_IEEE802154_AT86RF230_DEBUGFS is not set
CONFIG_IEEE802154_AT86RF230=m
CONFIG_IEEE802154_ATUSB=m
+# CONFIG_IEEE802154_CA8210_DEBUGFS is not set
+CONFIG_IEEE802154_CA8210=m
CONFIG_IEEE802154_CC2520=m
# CONFIG_IEEE802154_DRIVERS is not set
CONFIG_IEEE802154_FAKELB=m
@@ -2424,6 +2435,7 @@ CONFIG_MAX30100=m
# CONFIG_MAX5821 is not set
# CONFIG_MAX63XX_WATCHDOG is not set
# CONFIG_MAXIM_THERMOCOUPLE is not set
+CONFIG_MAX_PHYSMEM_BITS=46
CONFIG_MAX_RAW_DEVS=8192
# CONFIG_MC3230 is not set
# CONFIG_MCB is not set
@@ -2444,6 +2456,7 @@ CONFIG_MDIO_BITBANG=m
# CONFIG_MDIO_BUS_MUX_GPIO is not set
# CONFIG_MDIO_BUS_MUX is not set
# CONFIG_MDIO_BUS_MUX_MMIOREG is not set
+CONFIG_MDIO_DEVICE=m
# CONFIG_MDIO_GPIO is not set
# CONFIG_MDIO_HISI_FEMAC is not set
# CONFIG_MDIO_OCTEON is not set
@@ -2613,6 +2626,7 @@ CONFIG_MLX4_EN=m
CONFIG_MLX4_INFINIBAND=m
CONFIG_MLX5_CORE_EN_DCB=y
CONFIG_MLX5_CORE_EN=y
+CONFIG_MLX5_CORE_IPOIB=y
CONFIG_MLX5_CORE=m
CONFIG_MLX5_INFINIBAND=m
# CONFIG_MLX90614 is not set
@@ -2637,6 +2651,7 @@ CONFIG_MMA7660=m
CONFIG_MMC_BLOCK_BOUNCE=y
CONFIG_MMC_BLOCK=m
CONFIG_MMC_BLOCK_MINORS=8
+# CONFIG_MMC_CAVIUM_THUNDERX is not set
CONFIG_MMC_CB710=m
# CONFIG_MMC_DEBUG is not set
# CONFIG_MMC is not set
@@ -2654,6 +2669,7 @@ CONFIG_MMC_SDHCI=m
# CONFIG_MMC_SDHCI_OF is not set
CONFIG_MMC_SDHCI_PCI=m
CONFIG_MMC_SDHCI_PLTFM=m
+CONFIG_MMC_SDHCI_XENON=m
CONFIG_MMC_SDRICOH_CS=m
# CONFIG_MMC_SPI is not set
# CONFIG_MMC_TEST is not set
@@ -2847,11 +2863,15 @@ CONFIG_NET_DEVLINK=m
CONFIG_NET_DROP_MONITOR=y
CONFIG_NET_DSA_BCM_SF2=m
CONFIG_NET_DSA_HWMON=y
+CONFIG_NET_DSA_LOOP=m
CONFIG_NET_DSA=m
+CONFIG_NET_DSA_MT7530=m
CONFIG_NET_DSA_MV88E6060=m
CONFIG_NET_DSA_MV88E6XXX_GLOBAL2=y
CONFIG_NET_DSA_MV88E6XXX=m
CONFIG_NET_DSA_QCA8K=m
+CONFIG_NET_DSA_SMSC_LAN9303_I2C=m
+CONFIG_NET_DSA_SMSC_LAN9303_MDIO=m
CONFIG_NET_EMATCH_CANID=m
CONFIG_NET_EMATCH_CMP=m
CONFIG_NET_EMATCH_IPSET=m
@@ -2974,6 +2994,7 @@ CONFIG_NET_SCH_ATM=m
CONFIG_NET_SCH_CBQ=m
CONFIG_NET_SCH_CHOKE=m
CONFIG_NET_SCH_CODEL=m
+# CONFIG_NET_SCH_DEFAULT is not set
CONFIG_NET_SCH_DRR=m
CONFIG_NET_SCH_DSMARK=m
CONFIG_NET_SCHED=y
@@ -3066,6 +3087,7 @@ CONFIG_NET_VRF=m
CONFIG_NETWORK_FILESYSTEMS=y
CONFIG_NETWORK_PHY_TIMESTAMPING=y
CONFIG_NETXEN_NIC=m
+# CONFIG_NET_XGENE_V2 is not set
CONFIG_NET=y
# CONFIG_NEW_LEDS is not set
CONFIG_NFC_DIGITAL=m
@@ -3691,6 +3713,8 @@ CONFIG_ROCKETPORT=m
CONFIG_ROMFS_FS=m
CONFIG_ROSE=m
CONFIG_RPCSEC_GSS_KRB5=m
+# CONFIG_RPMSG_CHAR is not set
+# CONFIG_RPMSG_QCOM_SMD is not set
CONFIG_RPR0521=m
CONFIG_RSI_91X=m
CONFIG_RSI_DEBUGFS=y
@@ -3830,6 +3854,7 @@ CONFIG_RTLLIB=m
CONFIG_RTLWIFI=m
# CONFIG_RTS5208 is not set
CONFIG_S2IO=m
+CONFIG_S390_CCW_IOMMU=y
CONFIG_S390_GUEST_OLD_TRANSPORT=y
CONFIG_S390_GUEST=y
CONFIG_S390_HYPFS_FS=y
@@ -4755,6 +4780,7 @@ CONFIG_THRUSTMASTER_FF=y
# CONFIG_TI_DAC7512 is not set
CONFIG_TIFM_7XX1=m
# CONFIG_TIFM_CORE is not set
+CONFIG_TIGON3_HWMON=y
CONFIG_TIGON3=m
# CONFIG_TIMB_DMA is not set
# CONFIG_TIMER_STATS is not set
@@ -5238,6 +5264,7 @@ CONFIG_VETH=m
# CONFIG_VF610_ADC is not set
# CONFIG_VF610_DAC is not set
CONFIG_VFAT_FS=m
+CONFIG_VFIO_CCW=m
CONFIG_VFIO_IOMMU_TYPE1=m
CONFIG_VFIO=m
CONFIG_VFIO_MDEV_DEVICE=m
@@ -5375,6 +5402,7 @@ CONFIG_VMLOGRDR=m
# CONFIG_VMXNET3 is not set
CONFIG_VORTEX=m
CONFIG_VSOCKETS=m
+CONFIG_VSOCKMON=m
# CONFIG_VT6655 is not set
# CONFIG_VT6656 is not set
CONFIG_VT_CONSOLE=y
diff --git a/kernel-x86_64-debug.config b/kernel-x86_64-debug.config
index b7d5159e9..1f288c70f 100644
--- a/kernel-x86_64-debug.config
+++ b/kernel-x86_64-debug.config
@@ -620,14 +620,17 @@ CONFIG_CAN_ESD_USB2=m
# CONFIG_CAN_GRCAN is not set
CONFIG_CAN_GS_USB=m
CONFIG_CAN_GW=m
+CONFIG_CAN_HI311X=m
CONFIG_CAN_IFI_CANFD=m
CONFIG_CAN_KVASER_PCI=m
CONFIG_CAN_KVASER_USB=m
CONFIG_CAN_LEDS=y
CONFIG_CAN=m
CONFIG_CAN_M_CAN=m
+CONFIG_CAN_MCBA_USB=m
# CONFIG_CAN_MCP251X is not set
CONFIG_CAN_PEAK_PCIEC=y
+CONFIG_CAN_PEAK_PCIEFD=m
CONFIG_CAN_PEAK_PCI=m
# CONFIG_CAN_PEAK_PCMCIA is not set
CONFIG_CAN_PEAK_USB=m
@@ -641,6 +644,7 @@ CONFIG_CAN_SLCAN=m
CONFIG_CAN_SOFTING=m
# CONFIG_CAN_TSCAN1 is not set
CONFIG_CAN_VCAN=m
+CONFIG_CAN_VXCAN=m
# CONFIG_CAN_XILINXCAN is not set
CONFIG_CAPI_AVM=y
CONFIG_CAPI_EICON=y
@@ -851,6 +855,7 @@ CONFIG_CRYPTO_CTS=y
CONFIG_CRYPTO_DEFLATE=m
CONFIG_CRYPTO_DES3_EDE_X86_64=m
CONFIG_CRYPTO_DES=m
+# CONFIG_CRYPTO_DEV_CAVIUM_ZIP is not set
CONFIG_CRYPTO_DEV_CCP_CRYPTO=m
CONFIG_CRYPTO_DEV_CCP_DD=m
CONFIG_CRYPTO_DEV_CCP=y
@@ -1668,6 +1673,7 @@ CONFIG_HFSPLUS_FS=m
# CONFIG_HI8435 is not set
CONFIG_HIBERNATION=y
CONFIG_HID_A4TECH=m
+CONFIG_HID_ACCUTOUCH=m
CONFIG_HID_ACRUX_FF=y
CONFIG_HID_ACRUX=m
CONFIG_HID_ALPS=m
@@ -1712,6 +1718,7 @@ CONFIG_HID_MAYFLASH=m
CONFIG_HID_MICROSOFT=m
CONFIG_HID_MONTEREY=m
CONFIG_HID_MULTITOUCH=m
+CONFIG_HID_NTI=m
CONFIG_HID_NTRIG=y
CONFIG_HID_ORTEK=m
CONFIG_HID_PANTHERLORD=m
@@ -1960,6 +1967,8 @@ CONFIG_IEEE802154_ADF7242=m
# CONFIG_IEEE802154_AT86RF230_DEBUGFS is not set
CONFIG_IEEE802154_AT86RF230=m
CONFIG_IEEE802154_ATUSB=m
+# CONFIG_IEEE802154_CA8210_DEBUGFS is not set
+CONFIG_IEEE802154_CA8210=m
CONFIG_IEEE802154_CC2520=m
CONFIG_IEEE802154_DRIVERS=m
CONFIG_IEEE802154_FAKELB=m
@@ -2945,6 +2954,7 @@ CONFIG_MLX4_EN=m
CONFIG_MLX4_INFINIBAND=m
CONFIG_MLX5_CORE_EN_DCB=y
CONFIG_MLX5_CORE_EN=y
+CONFIG_MLX5_CORE_IPOIB=y
CONFIG_MLX5_CORE=m
CONFIG_MLX5_INFINIBAND=m
# CONFIG_MLX90614 is not set
@@ -2970,6 +2980,7 @@ CONFIG_MMA7660=m
CONFIG_MMC_BLOCK_BOUNCE=y
CONFIG_MMC_BLOCK=m
CONFIG_MMC_BLOCK_MINORS=8
+# CONFIG_MMC_CAVIUM_THUNDERX is not set
CONFIG_MMC_CB710=m
# CONFIG_MMC_DEBUG is not set
CONFIG_MMC=m
@@ -2987,6 +2998,7 @@ CONFIG_MMC_SDHCI=m
# CONFIG_MMC_SDHCI_OF is not set
CONFIG_MMC_SDHCI_PCI=m
CONFIG_MMC_SDHCI_PLTFM=m
+CONFIG_MMC_SDHCI_XENON=m
CONFIG_MMC_SDRICOH_CS=m
# CONFIG_MMC_SPI is not set
# CONFIG_MMC_TEST is not set
@@ -3193,11 +3205,15 @@ CONFIG_NET_DEVLINK=m
CONFIG_NET_DROP_MONITOR=y
CONFIG_NET_DSA_BCM_SF2=m
CONFIG_NET_DSA_HWMON=y
+CONFIG_NET_DSA_LOOP=m
CONFIG_NET_DSA=m
+CONFIG_NET_DSA_MT7530=m
CONFIG_NET_DSA_MV88E6060=m
CONFIG_NET_DSA_MV88E6XXX_GLOBAL2=y
CONFIG_NET_DSA_MV88E6XXX=m
CONFIG_NET_DSA_QCA8K=m
+CONFIG_NET_DSA_SMSC_LAN9303_I2C=m
+CONFIG_NET_DSA_SMSC_LAN9303_MDIO=m
CONFIG_NET_EMATCH_CANID=m
CONFIG_NET_EMATCH_CMP=m
CONFIG_NET_EMATCH_IPSET=m
@@ -3320,6 +3336,7 @@ CONFIG_NET_SCH_ATM=m
CONFIG_NET_SCH_CBQ=m
CONFIG_NET_SCH_CHOKE=m
CONFIG_NET_SCH_CODEL=m
+# CONFIG_NET_SCH_DEFAULT is not set
CONFIG_NET_SCH_DRR=m
CONFIG_NET_SCH_DSMARK=m
CONFIG_NET_SCHED=y
@@ -3412,6 +3429,7 @@ CONFIG_NET_VRF=m
CONFIG_NETWORK_FILESYSTEMS=y
CONFIG_NETWORK_PHY_TIMESTAMPING=y
CONFIG_NETXEN_NIC=m
+# CONFIG_NET_XGENE_V2 is not set
CONFIG_NET=y
CONFIG_NEW_LEDS=y
CONFIG_NFC_DIGITAL=m
@@ -4089,6 +4107,8 @@ CONFIG_ROCKETPORT=m
CONFIG_ROMFS_FS=m
CONFIG_ROSE=m
CONFIG_RPCSEC_GSS_KRB5=m
+# CONFIG_RPMSG_CHAR is not set
+# CONFIG_RPMSG_QCOM_SMD is not set
CONFIG_RPR0521=m
CONFIG_RSI_91X=m
CONFIG_RSI_DEBUGFS=y
@@ -5204,6 +5224,7 @@ CONFIG_THUNDERBOLT=m
# CONFIG_TI_DAC7512 is not set
CONFIG_TIFM_7XX1=m
CONFIG_TIFM_CORE=m
+CONFIG_TIGON3_HWMON=y
CONFIG_TIGON3=m
# CONFIG_TIMB_DMA is not set
# CONFIG_TIMER_STATS is not set
@@ -5836,6 +5857,7 @@ CONFIG_VOP_BUS=m
CONFIG_VOP=m
CONFIG_VORTEX=m
CONFIG_VSOCKETS=m
+CONFIG_VSOCKMON=m
# CONFIG_VT6655 is not set
# CONFIG_VT6656 is not set
CONFIG_VT_CONSOLE=y
diff --git a/kernel-x86_64.config b/kernel-x86_64.config
index 91a761a3e..07ba0e74f 100644
--- a/kernel-x86_64.config
+++ b/kernel-x86_64.config
@@ -619,14 +619,17 @@ CONFIG_CAN_ESD_USB2=m
# CONFIG_CAN_GRCAN is not set
CONFIG_CAN_GS_USB=m
CONFIG_CAN_GW=m
+CONFIG_CAN_HI311X=m
CONFIG_CAN_IFI_CANFD=m
CONFIG_CAN_KVASER_PCI=m
CONFIG_CAN_KVASER_USB=m
CONFIG_CAN_LEDS=y
CONFIG_CAN=m
CONFIG_CAN_M_CAN=m
+CONFIG_CAN_MCBA_USB=m
# CONFIG_CAN_MCP251X is not set
CONFIG_CAN_PEAK_PCIEC=y
+CONFIG_CAN_PEAK_PCIEFD=m
CONFIG_CAN_PEAK_PCI=m
# CONFIG_CAN_PEAK_PCMCIA is not set
CONFIG_CAN_PEAK_USB=m
@@ -640,6 +643,7 @@ CONFIG_CAN_SLCAN=m
CONFIG_CAN_SOFTING=m
# CONFIG_CAN_TSCAN1 is not set
CONFIG_CAN_VCAN=m
+CONFIG_CAN_VXCAN=m
# CONFIG_CAN_XILINXCAN is not set
CONFIG_CAPI_AVM=y
CONFIG_CAPI_EICON=y
@@ -849,6 +853,7 @@ CONFIG_CRYPTO_CTS=y
CONFIG_CRYPTO_DEFLATE=m
CONFIG_CRYPTO_DES3_EDE_X86_64=m
CONFIG_CRYPTO_DES=m
+# CONFIG_CRYPTO_DEV_CAVIUM_ZIP is not set
CONFIG_CRYPTO_DEV_CCP_CRYPTO=m
CONFIG_CRYPTO_DEV_CCP_DD=m
CONFIG_CRYPTO_DEV_CCP=y
@@ -1650,6 +1655,7 @@ CONFIG_HFSPLUS_FS=m
# CONFIG_HI8435 is not set
CONFIG_HIBERNATION=y
CONFIG_HID_A4TECH=m
+CONFIG_HID_ACCUTOUCH=m
CONFIG_HID_ACRUX_FF=y
CONFIG_HID_ACRUX=m
CONFIG_HID_ALPS=m
@@ -1694,6 +1700,7 @@ CONFIG_HID_MAYFLASH=m
CONFIG_HID_MICROSOFT=m
CONFIG_HID_MONTEREY=m
CONFIG_HID_MULTITOUCH=m
+CONFIG_HID_NTI=m
CONFIG_HID_NTRIG=y
CONFIG_HID_ORTEK=m
CONFIG_HID_PANTHERLORD=m
@@ -1942,6 +1949,8 @@ CONFIG_IEEE802154_ADF7242=m
# CONFIG_IEEE802154_AT86RF230_DEBUGFS is not set
CONFIG_IEEE802154_AT86RF230=m
CONFIG_IEEE802154_ATUSB=m
+# CONFIG_IEEE802154_CA8210_DEBUGFS is not set
+CONFIG_IEEE802154_CA8210=m
CONFIG_IEEE802154_CC2520=m
CONFIG_IEEE802154_DRIVERS=m
CONFIG_IEEE802154_FAKELB=m
@@ -2925,6 +2934,7 @@ CONFIG_MLX4_EN=m
CONFIG_MLX4_INFINIBAND=m
CONFIG_MLX5_CORE_EN_DCB=y
CONFIG_MLX5_CORE_EN=y
+CONFIG_MLX5_CORE_IPOIB=y
CONFIG_MLX5_CORE=m
CONFIG_MLX5_INFINIBAND=m
# CONFIG_MLX90614 is not set
@@ -2950,6 +2960,7 @@ CONFIG_MMA7660=m
CONFIG_MMC_BLOCK_BOUNCE=y
CONFIG_MMC_BLOCK=m
CONFIG_MMC_BLOCK_MINORS=8
+# CONFIG_MMC_CAVIUM_THUNDERX is not set
CONFIG_MMC_CB710=m
# CONFIG_MMC_DEBUG is not set
CONFIG_MMC=m
@@ -2967,6 +2978,7 @@ CONFIG_MMC_SDHCI=m
# CONFIG_MMC_SDHCI_OF is not set
CONFIG_MMC_SDHCI_PCI=m
CONFIG_MMC_SDHCI_PLTFM=m
+CONFIG_MMC_SDHCI_XENON=m
CONFIG_MMC_SDRICOH_CS=m
# CONFIG_MMC_SPI is not set
# CONFIG_MMC_TEST is not set
@@ -3173,11 +3185,15 @@ CONFIG_NET_DEVLINK=m
CONFIG_NET_DROP_MONITOR=y
CONFIG_NET_DSA_BCM_SF2=m
CONFIG_NET_DSA_HWMON=y
+CONFIG_NET_DSA_LOOP=m
CONFIG_NET_DSA=m
+CONFIG_NET_DSA_MT7530=m
CONFIG_NET_DSA_MV88E6060=m
CONFIG_NET_DSA_MV88E6XXX_GLOBAL2=y
CONFIG_NET_DSA_MV88E6XXX=m
CONFIG_NET_DSA_QCA8K=m
+CONFIG_NET_DSA_SMSC_LAN9303_I2C=m
+CONFIG_NET_DSA_SMSC_LAN9303_MDIO=m
CONFIG_NET_EMATCH_CANID=m
CONFIG_NET_EMATCH_CMP=m
CONFIG_NET_EMATCH_IPSET=m
@@ -3300,6 +3316,7 @@ CONFIG_NET_SCH_ATM=m
CONFIG_NET_SCH_CBQ=m
CONFIG_NET_SCH_CHOKE=m
CONFIG_NET_SCH_CODEL=m
+# CONFIG_NET_SCH_DEFAULT is not set
CONFIG_NET_SCH_DRR=m
CONFIG_NET_SCH_DSMARK=m
CONFIG_NET_SCHED=y
@@ -3392,6 +3409,7 @@ CONFIG_NET_VRF=m
CONFIG_NETWORK_FILESYSTEMS=y
CONFIG_NETWORK_PHY_TIMESTAMPING=y
CONFIG_NETXEN_NIC=m
+# CONFIG_NET_XGENE_V2 is not set
CONFIG_NET=y
CONFIG_NEW_LEDS=y
CONFIG_NFC_DIGITAL=m
@@ -4068,6 +4086,8 @@ CONFIG_ROCKETPORT=m
CONFIG_ROMFS_FS=m
CONFIG_ROSE=m
CONFIG_RPCSEC_GSS_KRB5=m
+# CONFIG_RPMSG_CHAR is not set
+# CONFIG_RPMSG_QCOM_SMD is not set
CONFIG_RPR0521=m
CONFIG_RSI_91X=m
CONFIG_RSI_DEBUGFS=y
@@ -5182,6 +5202,7 @@ CONFIG_THUNDERBOLT=m
# CONFIG_TI_DAC7512 is not set
CONFIG_TIFM_7XX1=m
CONFIG_TIFM_CORE=m
+CONFIG_TIGON3_HWMON=y
CONFIG_TIGON3=m
# CONFIG_TIMB_DMA is not set
# CONFIG_TIMER_STATS is not set
@@ -5814,6 +5835,7 @@ CONFIG_VOP_BUS=m
CONFIG_VOP=m
CONFIG_VORTEX=m
CONFIG_VSOCKETS=m
+CONFIG_VSOCKMON=m
# CONFIG_VT6655 is not set
# CONFIG_VT6656 is not set
CONFIG_VT_CONSOLE=y
diff --git a/kernel.spec b/kernel.spec
index b33b48cd5..3cffcc122 100644
--- a/kernel.spec
+++ b/kernel.spec
@@ -69,7 +69,7 @@ Summary: The Linux kernel
# The rc snapshot level
%global rcrev 0
# The git snapshot level
-%define gitrev 1
+%define gitrev 2
# Set rpm version accordingly
%define rpmversion 4.%{upstream_sublevel}.0
%endif
@@ -528,10 +528,6 @@ Patch425: ARM-tegra-usb-no-reset.patch
Patch426: AllWinner-h3.patch
Patch427: AllWinner-net-emac.patch
-# http://www.spinics.net/lists/linux-bluetooth/msg70169.html
-# https://www.spinics.net/lists/devicetree/msg170619.html
-Patch428: ti-bluetooth.patch
-
Patch429: arm64-hikey-fixes.patch
# http://www.spinics.net/lists/devicetree/msg163238.html
@@ -542,9 +538,6 @@ Patch431: arm-rk3288-tinker.patch
# http://www.spinics.net/lists/dri-devel/msg132235.html
Patch433: drm-vc4-Fix-OOPSes-from-trying-to-cache-a-partially-constructed-BO..patch
-# bcm283x mmc for wifi http://www.spinics.net/lists/arm-kernel/msg567077.html
-Patch434: bcm283x-mmc-bcm2835.patch
-
# Upstream fixes for i2c/serial/ethernet MAC addresses
Patch435: bcm283x-fixes.patch
@@ -612,9 +605,6 @@ Patch502: firmware-Drop-WARN-from-usermodehelper_read_trylock-.patch
Patch509: MODSIGN-Don-t-try-secure-boot-if-EFI-runtime-is-disa.patch
-#CVE-2016-3134 rhbz 1317383 1317384
-Patch665: netfilter-x_tables-deal-with-bogus-nextoffset-values.patch
-
#rhbz 1435154
Patch666: powerpc-prom-Increase-RMA-size-to-512MB.patch
@@ -1853,6 +1843,9 @@ rm -rf %{buildroot}%{_docdir}/perf-tip
mkdir -p %{buildroot}/%{_mandir}/man1
pushd %{buildroot}/%{_mandir}/man1
tar -xf %{SOURCE10}
+%if !%{with_tools}
+ rm -f kvm_stat.1
+%endif
popd
%endif
@@ -2193,6 +2186,9 @@ fi
#
#
%changelog
+* Wed May 03 2017 Justin M. Forbes <jforbes@fedoraproject.org> - 4.12.0-0.rc0.git2.1
+- Linux v4.11-4395-g89c9fea
+
* Tue May 02 2017 Justin M. Forbes <jforbes@fedoraproject.org> - 4.12.0-0.rc0.git1.1
- Linux v4.11-1464-gd3b5d35
- Reenable debugging options.
diff --git a/netfilter-x_tables-deal-with-bogus-nextoffset-values.patch b/netfilter-x_tables-deal-with-bogus-nextoffset-values.patch
deleted file mode 100644
index e6f5fa6f5..000000000
--- a/netfilter-x_tables-deal-with-bogus-nextoffset-values.patch
+++ /dev/null
@@ -1,109 +0,0 @@
-From 2b32a7d82223d76ace432305b18c5816cadff878 Mon Sep 17 00:00:00 2001
-From: Florian Westphal <fw () strlen ! de>
-Date: Thu, 10 Mar 2016 00:56:02 -0800
-Subject: [PATCH] netfilter: x_tables: deal with bogus nextoffset values
-
-Ben Hawkes says:
-
- In the mark_source_chains function (net/ipv4/netfilter/ip_tables.c) it
- is possible for a user-supplied ipt_entry structure to have a large
- next_offset field. This field is not bounds checked prior to writing a
- counter value at the supplied offset.
-
-Problem is that xt_entry_foreach() macro stops iterating once e->next_offset
-is out of bounds, assuming this is the last entry.
-
-With malformed data thats not necessarily the case so we can
-write outside of allocated area later as we might not have walked the
-entire blob.
-
-Fix this by simplifying mark_source_chains -- it already has to check
-if nextoff is in range to catch invalid jumps, so just do the check
-when we move to a next entry as well.
-
-Signed-off-by: Florian Westphal <fw@strlen.de>
----
- net/ipv4/netfilter/arp_tables.c | 8 ++++++++
- net/ipv4/netfilter/ip_tables.c | 8 ++++++++
- net/ipv6/netfilter/ip6_tables.c | 6 ++++++
- 3 files changed, 22 insertions(+)
-
-diff --git a/net/ipv4/netfilter/arp_tables.c b/net/ipv4/netfilter/arp_tables.c
-index 2033f92..a9b6c76 100644
---- a/net/ipv4/netfilter/arp_tables.c
-+++ b/net/ipv4/netfilter/arp_tables.c
-@@ -376,6 +376,10 @@ static int mark_source_chains(const struct xt_table_info *newinfo,
-
- /* Move along one */
- size = e->next_offset;
-+
-+ if (pos + size > newinfo->size - sizeof(*e))
-+ return 0;
-+
- e = (struct arpt_entry *)
- (entry0 + pos + size);
- if (pos + size >= newinfo->size)
-@@ -399,6 +403,10 @@ static int mark_source_chains(const struct xt_table_info *newinfo,
- if (newpos >= newinfo->size)
- return 0;
- }
-+
-+ if (newpos > newinfo->size - sizeof(*e))
-+ return 0;
-+
- e = (struct arpt_entry *)
- (entry0 + newpos);
- e->counters.pcnt = pos;
-diff --git a/net/ipv4/netfilter/ip_tables.c b/net/ipv4/netfilter/ip_tables.c
-index 54906e0..7530ecd 100644
---- a/net/ipv4/netfilter/ip_tables.c
-+++ b/net/ipv4/netfilter/ip_tables.c
-@@ -447,6 +447,10 @@ mark_source_chains(const struct xt_table_info *newinfo,
-
- /* Move along one */
- size = e->next_offset;
-+
-+ if (pos + size > newinfo->size - sizeof(*e))
-+ return 0;
-+
- e = (struct ipt_entry *)
- (entry0 + pos + size);
- if (pos + size >= newinfo->size)
-@@ -470,6 +474,10 @@ mark_source_chains(const struct xt_table_info *newinfo,
- if (newpos >= newinfo->size)
- return 0;
- }
-+
-+ if (newpos > newinfo->size - sizeof(*e))
-+ return 0;
-+
- e = (struct ipt_entry *)
- (entry0 + newpos);
- e->counters.pcnt = pos;
-diff --git a/net/ipv6/netfilter/ip6_tables.c b/net/ipv6/netfilter/ip6_tables.c
-index 63e06c3..894da69 100644
---- a/net/ipv6/netfilter/ip6_tables.c
-+++ b/net/ipv6/netfilter/ip6_tables.c
-@@ -474,6 +474,8 @@ mark_source_chains(const struct xt_table_info *newinfo,
-
- /* Move along one */
- size = e->next_offset;
-+ if (pos + size > newinfo->size - sizeof(*e))
-+ return 0;
- e = (struct ip6t_entry *)
- (entry0 + pos + size);
- if (pos + size >= newinfo->size)
-@@ -497,6 +499,10 @@ mark_source_chains(const struct xt_table_info *newinfo,
- if (newpos >= newinfo->size)
- return 0;
- }
-+
-+ if (newpos > newinfo->size - sizeof(*e))
-+ return 0;
-+
- e = (struct ip6t_entry *)
- (entry0 + newpos);
- e->counters.pcnt = pos;
---
-2.5.5
-
diff --git a/sources b/sources
index 0d4d8ae7a..8489c6a20 100644
--- a/sources
+++ b/sources
@@ -1,3 +1,3 @@
SHA512 (perf-man-4.11.tar.gz) = f6dec8c3a296fc5bb1dd58011d7d1340550b9f4f228169bab079b0b36f2d5d96784b808765acda2d547719f6e9fd73b2855ab825dfe4fea8af43c55e5786f8d6
SHA512 (linux-4.11.tar.xz) = 6610eed97ffb7207c71771198c36179b8244ace7222bebb109507720e26c5f17d918079a56d5febdd8605844d67fb2df0ebe910fa2f2f53690daf6e2a8ad09c3
-SHA512 (patch-4.11-git1.xz) = 192f4d8ba2c64040e01547d27b9f11f3a4471ed1103ab754a501a1ab12b054d7b26993ac56abe21f17319122d98aad1e98ed8b70864d73b42bf2c8491fadb5de
+SHA512 (patch-4.11-git2.xz) = 08bd451d07c139701bf8af78e06dbc176b6283200615d34b6f5ac048c559fc1519ddf87ed7bf01d19a0b347865273afb24ddb10c22ee6685e23f6a4ef9aba56a
diff --git a/ti-bluetooth.patch b/ti-bluetooth.patch
deleted file mode 100644
index 288eb7c94..000000000
--- a/ti-bluetooth.patch
+++ /dev/null
@@ -1,2480 +0,0 @@
-From patchwork Sat Aug 13 03:14:32 2016
-Content-Type: text/plain; charset="utf-8"
-MIME-Version: 1.0
-Content-Transfer-Encoding: 7bit
-Subject: [RFC,1/7] tty: serial: omap: add UPF_BOOT_AUTOCONF flag for DT init
-From: Sebastian Reichel <sre@kernel.org>
-X-Patchwork-Id: 9278297
-Message-Id: <1471058078-5579-2-git-send-email-sre@kernel.org>
-To: Sebastian Reichel <sre@kernel.org>, Tony Lindgren <tony@atomide.com>,
- Rob Herring <robh+dt@kernel.org>, Mark Rutland <mark.rutland@arm.com>,
- Marcel Holtmann <marcel@holtmann.org>,
- Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
- Jiri Slaby <jslaby@suse.com>
-Cc: Ville Tervo <ville.tervo@iki.fi>,
- =?UTF-8?q?Filip=20Matijevi=C4=87?= <filip.matijevic.pz@gmail.com>,
- Aaro Koskinen <aaro.koskinen@iki.fi>, Pavel Machek <pavel@ucw.cz>,
- =?UTF-8?q?Pali=20Roh=C3=A1r?= <pali.rohar@gmail.com>,
- ivo.g.dimitrov.75@gmail.com, linux-bluetooth@vger.kernel.org,
- linux-serial@vger.kernel.org, linux-omap@vger.kernel.org,
- devicetree@vger.kernel.org, linux-kernel@vger.kernel.org
-Date: Sat, 13 Aug 2016 05:14:32 +0200
-
----
- drivers/tty/serial/omap-serial.c | 3 +++
- 1 file changed, 3 insertions(+)
-Acked-by: Pavel Machek <pavel@ucw.cz>
-
-diff --git a/drivers/tty/serial/omap-serial.c b/drivers/tty/serial/omap-serial.c
-index a2a529994ba5..7c2c77789c2c 100644
---- a/drivers/tty/serial/omap-serial.c
-+++ b/drivers/tty/serial/omap-serial.c
-@@ -1542,6 +1542,9 @@ static struct omap_uart_port_info *of_get_uart_port_info(struct device *dev)
-
- of_property_read_u32(dev->of_node, "clock-frequency",
- &omap_up_info->uartclk);
-+
-+ omap_up_info->flags = UPF_BOOT_AUTOCONF;
-+
- return omap_up_info;
- }
-
-From 6102245c5711e73b83ad79ab0f2c3ec040262a87 Mon Sep 17 00:00:00 2001
-From: Sebastian Reichel <sre@kernel.org>
-Date: Tue, 28 Mar 2017 17:59:31 +0200
-Subject: [PATCH 01/13] serdev: add serdev_device_wait_until_sent
-
-Add method, which waits until the transmission buffer has been sent.
-Note, that the change in ttyport_write_wakeup is related, since
-tty_wait_until_sent will hang without that change.
-
-Acked-by: Rob Herring <robh@kernel.org>
-Acked-by: Pavel Machek <pavel@ucw.cz>
-Signed-off-by: Sebastian Reichel <sre@kernel.org>
-Signed-off-by: Rob Herring <robh@kernel.org>
----
- drivers/tty/serdev/core.c | 11 +++++++++++
- drivers/tty/serdev/serdev-ttyport.c | 18 ++++++++++++++----
- include/linux/serdev.h | 3 +++
- 3 files changed, 28 insertions(+), 4 deletions(-)
-
-diff --git a/drivers/tty/serdev/core.c b/drivers/tty/serdev/core.c
-index f4c6c90add78..a63b74031e22 100644
---- a/drivers/tty/serdev/core.c
-+++ b/drivers/tty/serdev/core.c
-@@ -173,6 +173,17 @@ void serdev_device_set_flow_control(struct serdev_device *serdev, bool enable)
- }
- EXPORT_SYMBOL_GPL(serdev_device_set_flow_control);
-
-+void serdev_device_wait_until_sent(struct serdev_device *serdev, long timeout)
-+{
-+ struct serdev_controller *ctrl = serdev->ctrl;
-+
-+ if (!ctrl || !ctrl->ops->wait_until_sent)
-+ return;
-+
-+ ctrl->ops->wait_until_sent(ctrl, timeout);
-+}
-+EXPORT_SYMBOL_GPL(serdev_device_wait_until_sent);
-+
- static int serdev_drv_probe(struct device *dev)
- {
- const struct serdev_device_driver *sdrv = to_serdev_device_driver(dev->driver);
-diff --git a/drivers/tty/serdev/serdev-ttyport.c b/drivers/tty/serdev/serdev-ttyport.c
-index d05393594f15..50dc75c4d204 100644
---- a/drivers/tty/serdev/serdev-ttyport.c
-+++ b/drivers/tty/serdev/serdev-ttyport.c
-@@ -14,6 +14,7 @@
- #include <linux/serdev.h>
- #include <linux/tty.h>
- #include <linux/tty_driver.h>
-+#include <linux/poll.h>
-
- #define SERPORT_ACTIVE 1
-
-@@ -46,11 +47,11 @@ static void ttyport_write_wakeup(struct tty_port *port)
- struct serdev_controller *ctrl = port->client_data;
- struct serport *serport = serdev_controller_get_drvdata(ctrl);
-
-- if (!test_and_clear_bit(TTY_DO_WRITE_WAKEUP, &port->tty->flags))
-- return;
--
-- if (test_bit(SERPORT_ACTIVE, &serport->flags))
-+ if (test_and_clear_bit(TTY_DO_WRITE_WAKEUP, &port->tty->flags) &&
-+ test_bit(SERPORT_ACTIVE, &serport->flags))
- serdev_controller_write_wakeup(ctrl);
-+
-+ wake_up_interruptible_poll(&port->tty->write_wait, POLLOUT);
- }
-
- static const struct tty_port_client_operations client_ops = {
-@@ -167,6 +168,14 @@ static void ttyport_set_flow_control(struct serdev_controller *ctrl, bool enable
- tty_set_termios(tty, &ktermios);
- }
-
-+static void ttyport_wait_until_sent(struct serdev_controller *ctrl, long timeout)
-+{
-+ struct serport *serport = serdev_controller_get_drvdata(ctrl);
-+ struct tty_struct *tty = serport->tty;
-+
-+ tty_wait_until_sent(tty, timeout);
-+}
-+
- static const struct serdev_controller_ops ctrl_ops = {
- .write_buf = ttyport_write_buf,
- .write_flush = ttyport_write_flush,
-@@ -175,6 +184,7 @@ static const struct serdev_controller_ops ctrl_ops = {
- .close = ttyport_close,
- .set_flow_control = ttyport_set_flow_control,
- .set_baudrate = ttyport_set_baudrate,
-+ .wait_until_sent = ttyport_wait_until_sent,
- };
-
- struct device *serdev_tty_port_register(struct tty_port *port,
-diff --git a/include/linux/serdev.h b/include/linux/serdev.h
-index 9519da6253a8..a308b206d204 100644
---- a/include/linux/serdev.h
-+++ b/include/linux/serdev.h
-@@ -81,6 +81,7 @@ struct serdev_controller_ops {
- void (*close)(struct serdev_controller *);
- void (*set_flow_control)(struct serdev_controller *, bool);
- unsigned int (*set_baudrate)(struct serdev_controller *, unsigned int);
-+ void (*wait_until_sent)(struct serdev_controller *, long);
- };
-
- /**
-@@ -186,6 +187,7 @@ int serdev_device_open(struct serdev_device *);
- void serdev_device_close(struct serdev_device *);
- unsigned int serdev_device_set_baudrate(struct serdev_device *, unsigned int);
- void serdev_device_set_flow_control(struct serdev_device *, bool);
-+void serdev_device_wait_until_sent(struct serdev_device *, long);
- int serdev_device_write_buf(struct serdev_device *, const unsigned char *, size_t);
- void serdev_device_write_flush(struct serdev_device *);
- int serdev_device_write_room(struct serdev_device *);
-@@ -223,6 +225,7 @@ static inline unsigned int serdev_device_set_baudrate(struct serdev_device *sdev
- return 0;
- }
- static inline void serdev_device_set_flow_control(struct serdev_device *sdev, bool enable) {}
-+static inline void serdev_device_wait_until_sent(struct serdev_device *sdev, long timeout) {}
- static inline int serdev_device_write_buf(struct serdev_device *sdev, const unsigned char *buf, size_t count)
- {
- return -ENODEV;
---
-2.12.2
-
-From 6e1713b03eab6f42251bad76ab05e7e1aa28b199 Mon Sep 17 00:00:00 2001
-From: Sebastian Reichel <sre@kernel.org>
-Date: Tue, 28 Mar 2017 17:59:32 +0200
-Subject: [PATCH 02/13] serdev: implement get/set tiocm
-
-Add method for getting and setting tiocm.
-
-Acked-by: Pavel Machek <pavel@ucw.cz>
-Acked-by: Rob Herring <robh@kernel.org>
-Signed-off-by: Sebastian Reichel <sre@kernel.org>
-Signed-off-by: Rob Herring <robh@kernel.org>
----
- drivers/tty/serdev/core.c | 22 ++++++++++++++++++++++
- drivers/tty/serdev/serdev-ttyport.c | 24 ++++++++++++++++++++++++
- include/linux/serdev.h | 13 +++++++++++++
- 3 files changed, 59 insertions(+)
-
-diff --git a/drivers/tty/serdev/core.c b/drivers/tty/serdev/core.c
-index a63b74031e22..1e1cbae3a0ea 100644
---- a/drivers/tty/serdev/core.c
-+++ b/drivers/tty/serdev/core.c
-@@ -184,6 +184,28 @@ void serdev_device_wait_until_sent(struct serdev_device *serdev, long timeout)
- }
- EXPORT_SYMBOL_GPL(serdev_device_wait_until_sent);
-
-+int serdev_device_get_tiocm(struct serdev_device *serdev)
-+{
-+ struct serdev_controller *ctrl = serdev->ctrl;
-+
-+ if (!ctrl || !ctrl->ops->get_tiocm)
-+ return -ENOTSUPP;
-+
-+ return ctrl->ops->get_tiocm(ctrl);
-+}
-+EXPORT_SYMBOL_GPL(serdev_device_get_tiocm);
-+
-+int serdev_device_set_tiocm(struct serdev_device *serdev, int set, int clear)
-+{
-+ struct serdev_controller *ctrl = serdev->ctrl;
-+
-+ if (!ctrl || !ctrl->ops->set_tiocm)
-+ return -ENOTSUPP;
-+
-+ return ctrl->ops->set_tiocm(ctrl, set, clear);
-+}
-+EXPORT_SYMBOL_GPL(serdev_device_set_tiocm);
-+
- static int serdev_drv_probe(struct device *dev)
- {
- const struct serdev_device_driver *sdrv = to_serdev_device_driver(dev->driver);
-diff --git a/drivers/tty/serdev/serdev-ttyport.c b/drivers/tty/serdev/serdev-ttyport.c
-index 50dc75c4d204..487c88f6aa0e 100644
---- a/drivers/tty/serdev/serdev-ttyport.c
-+++ b/drivers/tty/serdev/serdev-ttyport.c
-@@ -176,6 +176,28 @@ static void ttyport_wait_until_sent(struct serdev_controller *ctrl, long timeout
- tty_wait_until_sent(tty, timeout);
- }
-
-+static int ttyport_get_tiocm(struct serdev_controller *ctrl)
-+{
-+ struct serport *serport = serdev_controller_get_drvdata(ctrl);
-+ struct tty_struct *tty = serport->tty;
-+
-+ if (!tty->ops->tiocmget)
-+ return -ENOTSUPP;
-+
-+ return tty->driver->ops->tiocmget(tty);
-+}
-+
-+static int ttyport_set_tiocm(struct serdev_controller *ctrl, unsigned int set, unsigned int clear)
-+{
-+ struct serport *serport = serdev_controller_get_drvdata(ctrl);
-+ struct tty_struct *tty = serport->tty;
-+
-+ if (!tty->ops->tiocmset)
-+ return -ENOTSUPP;
-+
-+ return tty->driver->ops->tiocmset(tty, set, clear);
-+}
-+
- static const struct serdev_controller_ops ctrl_ops = {
- .write_buf = ttyport_write_buf,
- .write_flush = ttyport_write_flush,
-@@ -185,6 +207,8 @@ static const struct serdev_controller_ops ctrl_ops = {
- .set_flow_control = ttyport_set_flow_control,
- .set_baudrate = ttyport_set_baudrate,
- .wait_until_sent = ttyport_wait_until_sent,
-+ .get_tiocm = ttyport_get_tiocm,
-+ .set_tiocm = ttyport_set_tiocm,
- };
-
- struct device *serdev_tty_port_register(struct tty_port *port,
-diff --git a/include/linux/serdev.h b/include/linux/serdev.h
-index a308b206d204..e29a270f603c 100644
---- a/include/linux/serdev.h
-+++ b/include/linux/serdev.h
-@@ -15,6 +15,7 @@
-
- #include <linux/types.h>
- #include <linux/device.h>
-+#include <linux/termios.h>
-
- struct serdev_controller;
- struct serdev_device;
-@@ -82,6 +83,8 @@ struct serdev_controller_ops {
- void (*set_flow_control)(struct serdev_controller *, bool);
- unsigned int (*set_baudrate)(struct serdev_controller *, unsigned int);
- void (*wait_until_sent)(struct serdev_controller *, long);
-+ int (*get_tiocm)(struct serdev_controller *);
-+ int (*set_tiocm)(struct serdev_controller *, unsigned int, unsigned int);
- };
-
- /**
-@@ -188,6 +191,8 @@ void serdev_device_close(struct serdev_device *);
- unsigned int serdev_device_set_baudrate(struct serdev_device *, unsigned int);
- void serdev_device_set_flow_control(struct serdev_device *, bool);
- void serdev_device_wait_until_sent(struct serdev_device *, long);
-+int serdev_device_get_tiocm(struct serdev_device *);
-+int serdev_device_set_tiocm(struct serdev_device *, int, int);
- int serdev_device_write_buf(struct serdev_device *, const unsigned char *, size_t);
- void serdev_device_write_flush(struct serdev_device *);
- int serdev_device_write_room(struct serdev_device *);
-@@ -226,6 +231,14 @@ static inline unsigned int serdev_device_set_baudrate(struct serdev_device *sdev
- }
- static inline void serdev_device_set_flow_control(struct serdev_device *sdev, bool enable) {}
- static inline void serdev_device_wait_until_sent(struct serdev_device *sdev, long timeout) {}
-+static inline int serdev_device_get_tiocm(struct serdev_device *serdev)
-+{
-+ return -ENOTSUPP;
-+}
-+static inline int serdev_device_set_tiocm(struct serdev_device *serdev, int set, int clear)
-+{
-+ return -ENOTSUPP;
-+}
- static inline int serdev_device_write_buf(struct serdev_device *sdev, const unsigned char *buf, size_t count)
- {
- return -ENODEV;
---
-2.12.2
-
-From 9425a7e94dba6d5585c542c50f253f8fbf764a81 Mon Sep 17 00:00:00 2001
-From: Sebastian Reichel <sre@kernel.org>
-Date: Tue, 28 Mar 2017 17:59:33 +0200
-Subject: [PATCH 03/13] serdev: add helpers for cts and rts handling
-
-Add serdev helper functions for handling of cts and rts
-lines using the serdev's tiocm functions.
-
-Acked-by: Rob Herring <robh@kernel.org>
-Signed-off-by: Sebastian Reichel <sre@kernel.org>
-Signed-off-by: Rob Herring <robh@kernel.org>
----
- include/linux/serdev.h | 31 +++++++++++++++++++++++++++++++
- 1 file changed, 31 insertions(+)
-
-diff --git a/include/linux/serdev.h b/include/linux/serdev.h
-index e29a270f603c..37395b8eb8f1 100644
---- a/include/linux/serdev.h
-+++ b/include/linux/serdev.h
-@@ -16,6 +16,7 @@
- #include <linux/types.h>
- #include <linux/device.h>
- #include <linux/termios.h>
-+#include <linux/delay.h>
-
- struct serdev_controller;
- struct serdev_device;
-@@ -254,6 +255,36 @@ static inline int serdev_device_write_room(struct serdev_device *sdev)
-
- #endif /* CONFIG_SERIAL_DEV_BUS */
-
-+static inline bool serdev_device_get_cts(struct serdev_device *serdev)
-+{
-+ int status = serdev_device_get_tiocm(serdev);
-+ return !!(status & TIOCM_CTS);
-+}
-+
-+static inline int serdev_device_wait_for_cts(struct serdev_device *serdev, bool state, int timeout_ms)
-+{
-+ unsigned long timeout;
-+ bool signal;
-+
-+ timeout = jiffies + msecs_to_jiffies(timeout_ms);
-+ while (time_is_after_jiffies(timeout)) {
-+ signal = serdev_device_get_cts(serdev);
-+ if (signal == state)
-+ return 0;
-+ usleep_range(1000, 2000);
-+ }
-+
-+ return -ETIMEDOUT;
-+}
-+
-+static inline int serdev_device_set_rts(struct serdev_device *serdev, bool enable)
-+{
-+ if (enable)
-+ return serdev_device_set_tiocm(serdev, TIOCM_RTS, 0);
-+ else
-+ return serdev_device_set_tiocm(serdev, 0, TIOCM_RTS);
-+}
-+
- /*
- * serdev hooks into TTY core
- */
---
-2.12.2
-
-From 8656be75e893514bac2aa817f1c1b35e8dbd9e5b Mon Sep 17 00:00:00 2001
-From: Sebastian Reichel <sre@kernel.org>
-Date: Tue, 28 Mar 2017 17:59:34 +0200
-Subject: [PATCH 04/13] Bluetooth: hci_uart: add support for word alignment
-
-This will be used by Nokia's H4+ protocol, which
-uses 2-byte aligned packets.
-
-Acked-by: Pavel Machek <pavel@ucw.cz>
-Signed-off-by: Sebastian Reichel <sre@kernel.org>
-Signed-off-by: Rob Herring <robh@kernel.org>
----
- drivers/bluetooth/hci_h4.c | 17 +++++++++++++++++
- drivers/bluetooth/hci_ldisc.c | 4 ++++
- drivers/bluetooth/hci_uart.h | 3 +++
- 3 files changed, 24 insertions(+)
-
-diff --git a/drivers/bluetooth/hci_h4.c b/drivers/bluetooth/hci_h4.c
-index 635597b6e168..82e5a32b87a4 100644
---- a/drivers/bluetooth/hci_h4.c
-+++ b/drivers/bluetooth/hci_h4.c
-@@ -171,9 +171,20 @@ struct sk_buff *h4_recv_buf(struct hci_dev *hdev, struct sk_buff *skb,
- const unsigned char *buffer, int count,
- const struct h4_recv_pkt *pkts, int pkts_count)
- {
-+ struct hci_uart *hu = hci_get_drvdata(hdev);
-+ u8 alignment = hu->alignment;
-+
- while (count) {
- int i, len;
-
-+ /* remove padding bytes from buffer */
-+ for (; hu->padding && count > 0; hu->padding--) {
-+ count--;
-+ buffer++;
-+ }
-+ if (!count)
-+ break;
-+
- if (!skb) {
- for (i = 0; i < pkts_count; i++) {
- if (buffer[0] != (&pkts[i])->type)
-@@ -253,11 +264,17 @@ struct sk_buff *h4_recv_buf(struct hci_dev *hdev, struct sk_buff *skb,
- }
-
- if (!dlen) {
-+ hu->padding = (skb->len - 1) % alignment;
-+ hu->padding = (alignment - hu->padding) % alignment;
-+
- /* No more data, complete frame */
- (&pkts[i])->recv(hdev, skb);
- skb = NULL;
- }
- } else {
-+ hu->padding = (skb->len - 1) % alignment;
-+ hu->padding = (alignment - hu->padding) % alignment;
-+
- /* Complete frame */
- (&pkts[i])->recv(hdev, skb);
- skb = NULL;
-diff --git a/drivers/bluetooth/hci_ldisc.c b/drivers/bluetooth/hci_ldisc.c
-index 9497c469efd2..0ec8a94bd712 100644
---- a/drivers/bluetooth/hci_ldisc.c
-+++ b/drivers/bluetooth/hci_ldisc.c
-@@ -459,6 +459,10 @@ static int hci_uart_tty_open(struct tty_struct *tty)
- hu->tty = tty;
- tty->receive_room = 65536;
-
-+ /* disable alignment support by default */
-+ hu->alignment = 1;
-+ hu->padding = 0;
-+
- INIT_WORK(&hu->init_ready, hci_uart_init_work);
- INIT_WORK(&hu->write_work, hci_uart_write_work);
-
-diff --git a/drivers/bluetooth/hci_uart.h b/drivers/bluetooth/hci_uart.h
-index 070139513e65..4aff50960cac 100644
---- a/drivers/bluetooth/hci_uart.h
-+++ b/drivers/bluetooth/hci_uart.h
-@@ -92,6 +92,9 @@ struct hci_uart {
-
- unsigned int init_speed;
- unsigned int oper_speed;
-+
-+ u8 alignment;
-+ u8 padding;
- };
-
- /* HCI_UART proto flag bits */
---
-2.12.2
-
-From f2d830b35ce8c834eaa895ff29c461455024f05e Mon Sep 17 00:00:00 2001
-From: Rob Herring <robh@kernel.org>
-Date: Tue, 28 Mar 2017 17:59:35 +0200
-Subject: [PATCH 05/13] Bluetooth: hci_uart: add serdev driver support library
-
-This adds library functions for serdev based BT drivers. This is largely
-copied from hci_ldisc.c and modified to use serdev calls. There's a little
-bit of duplication, but I avoided intermixing this as the ldisc code should
-eventually go away.
-
-Signed-off-by: Rob Herring <robh@kernel.org>
-Cc: Marcel Holtmann <marcel@holtmann.org>
-Cc: Gustavo Padovan <gustavo@padovan.org>
-Cc: Johan Hedberg <johan.hedberg@gmail.com>
-Cc: linux-bluetooth@vger.kernel.org
-Acked-by: Pavel Machek <pavel@ucw.cz>
-[Fix style issues reported by Pavel]
-Signed-off-by: Sebastian Reichel <sre@kernel.org>
-Signed-off-by: Rob Herring <robh@kernel.org>
----
- drivers/bluetooth/Makefile | 1 +
- drivers/bluetooth/hci_serdev.c | 361 +++++++++++++++++++++++++++++++++++++++++
- drivers/bluetooth/hci_uart.h | 4 +
- 3 files changed, 366 insertions(+)
- create mode 100644 drivers/bluetooth/hci_serdev.c
-
-diff --git a/drivers/bluetooth/Makefile b/drivers/bluetooth/Makefile
-index 80627187c8b6..fd571689eed6 100644
---- a/drivers/bluetooth/Makefile
-+++ b/drivers/bluetooth/Makefile
-@@ -29,6 +29,7 @@ btmrvl-y := btmrvl_main.o
- btmrvl-$(CONFIG_DEBUG_FS) += btmrvl_debugfs.o
-
- hci_uart-y := hci_ldisc.o
-+hci_uart-$(CONFIG_SERIAL_DEV_BUS) += hci_serdev.o
- hci_uart-$(CONFIG_BT_HCIUART_H4) += hci_h4.o
- hci_uart-$(CONFIG_BT_HCIUART_BCSP) += hci_bcsp.o
- hci_uart-$(CONFIG_BT_HCIUART_LL) += hci_ll.o
-diff --git a/drivers/bluetooth/hci_serdev.c b/drivers/bluetooth/hci_serdev.c
-new file mode 100644
-index 000000000000..f5ccb2c7ef92
---- /dev/null
-+++ b/drivers/bluetooth/hci_serdev.c
-@@ -0,0 +1,361 @@
-+/*
-+ * Bluetooth HCI serdev driver lib
-+ *
-+ * Copyright (C) 2017 Linaro, Ltd., Rob Herring <robh@kernel.org>
-+ *
-+ * Based on hci_ldisc.c:
-+ *
-+ * Copyright (C) 2000-2001 Qualcomm Incorporated
-+ * Copyright (C) 2002-2003 Maxim Krasnyansky <maxk@qualcomm.com>
-+ * Copyright (C) 2004-2005 Marcel Holtmann <marcel@holtmann.org>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/types.h>
-+#include <linux/serdev.h>
-+#include <linux/skbuff.h>
-+
-+#include <net/bluetooth/bluetooth.h>
-+#include <net/bluetooth/hci_core.h>
-+
-+#include "hci_uart.h"
-+
-+struct serdev_device_ops hci_serdev_client_ops;
-+
-+static inline void hci_uart_tx_complete(struct hci_uart *hu, int pkt_type)
-+{
-+ struct hci_dev *hdev = hu->hdev;
-+
-+ /* Update HCI stat counters */
-+ switch (pkt_type) {
-+ case HCI_COMMAND_PKT:
-+ hdev->stat.cmd_tx++;
-+ break;
-+
-+ case HCI_ACLDATA_PKT:
-+ hdev->stat.acl_tx++;
-+ break;
-+
-+ case HCI_SCODATA_PKT:
-+ hdev->stat.sco_tx++;
-+ break;
-+ }
-+}
-+
-+static inline struct sk_buff *hci_uart_dequeue(struct hci_uart *hu)
-+{
-+ struct sk_buff *skb = hu->tx_skb;
-+
-+ if (!skb)
-+ skb = hu->proto->dequeue(hu);
-+ else
-+ hu->tx_skb = NULL;
-+
-+ return skb;
-+}
-+
-+static void hci_uart_write_work(struct work_struct *work)
-+{
-+ struct hci_uart *hu = container_of(work, struct hci_uart, write_work);
-+ struct serdev_device *serdev = hu->serdev;
-+ struct hci_dev *hdev = hu->hdev;
-+ struct sk_buff *skb;
-+
-+ /* REVISIT:
-+ * should we cope with bad skbs or ->write() returning an error value?
-+ */
-+ do {
-+ clear_bit(HCI_UART_TX_WAKEUP, &hu->tx_state);
-+
-+ while ((skb = hci_uart_dequeue(hu))) {
-+ int len;
-+
-+ len = serdev_device_write_buf(serdev,
-+ skb->data, skb->len);
-+ hdev->stat.byte_tx += len;
-+
-+ skb_pull(skb, len);
-+ if (skb->len) {
-+ hu->tx_skb = skb;
-+ break;
-+ }
-+
-+ hci_uart_tx_complete(hu, hci_skb_pkt_type(skb));
-+ kfree_skb(skb);
-+ }
-+ } while(test_bit(HCI_UART_TX_WAKEUP, &hu->tx_state));
-+
-+ clear_bit(HCI_UART_SENDING, &hu->tx_state);
-+}
-+
-+/* ------- Interface to HCI layer ------ */
-+
-+/* Initialize device */
-+static int hci_uart_open(struct hci_dev *hdev)
-+{
-+ struct hci_uart *hu = hci_get_drvdata(hdev);
-+
-+ BT_DBG("%s %p", hdev->name, hdev);
-+
-+ serdev_device_set_client_ops(hu->serdev, &hci_serdev_client_ops);
-+
-+ return serdev_device_open(hu->serdev);
-+}
-+
-+/* Reset device */
-+static int hci_uart_flush(struct hci_dev *hdev)
-+{
-+ struct hci_uart *hu = hci_get_drvdata(hdev);
-+
-+ BT_DBG("hdev %p serdev %p", hdev, hu->serdev);
-+
-+ if (hu->tx_skb) {
-+ kfree_skb(hu->tx_skb); hu->tx_skb = NULL;
-+ }
-+
-+ /* Flush any pending characters in the driver and discipline. */
-+ serdev_device_write_flush(hu->serdev);
-+
-+ if (test_bit(HCI_UART_PROTO_READY, &hu->flags))
-+ hu->proto->flush(hu);
-+
-+ return 0;
-+}
-+
-+/* Close device */
-+static int hci_uart_close(struct hci_dev *hdev)
-+{
-+ struct hci_uart *hu = hci_get_drvdata(hdev);
-+
-+ BT_DBG("hdev %p", hdev);
-+
-+ hci_uart_flush(hdev);
-+ hdev->flush = NULL;
-+
-+ serdev_device_close(hu->serdev);
-+
-+ return 0;
-+}
-+
-+/* Send frames from HCI layer */
-+static int hci_uart_send_frame(struct hci_dev *hdev, struct sk_buff *skb)
-+{
-+ struct hci_uart *hu = hci_get_drvdata(hdev);
-+
-+ BT_DBG("%s: type %d len %d", hdev->name, hci_skb_pkt_type(skb),
-+ skb->len);
-+
-+ hu->proto->enqueue(hu, skb);
-+
-+ hci_uart_tx_wakeup(hu);
-+
-+ return 0;
-+}
-+
-+static int hci_uart_setup(struct hci_dev *hdev)
-+{
-+ struct hci_uart *hu = hci_get_drvdata(hdev);
-+ struct hci_rp_read_local_version *ver;
-+ struct sk_buff *skb;
-+ unsigned int speed;
-+ int err;
-+
-+ /* Init speed if any */
-+ if (hu->init_speed)
-+ speed = hu->init_speed;
-+ else if (hu->proto->init_speed)
-+ speed = hu->proto->init_speed;
-+ else
-+ speed = 0;
-+
-+ if (speed)
-+ serdev_device_set_baudrate(hu->serdev, speed);
-+
-+ /* Operational speed if any */
-+ if (hu->oper_speed)
-+ speed = hu->oper_speed;
-+ else if (hu->proto->oper_speed)
-+ speed = hu->proto->oper_speed;
-+ else
-+ speed = 0;
-+
-+ if (hu->proto->set_baudrate && speed) {
-+ err = hu->proto->set_baudrate(hu, speed);
-+ if (err)
-+ BT_ERR("%s: failed to set baudrate", hdev->name);
-+ else
-+ serdev_device_set_baudrate(hu->serdev, speed);
-+ }
-+
-+ if (hu->proto->setup)
-+ return hu->proto->setup(hu);
-+
-+ if (!test_bit(HCI_UART_VND_DETECT, &hu->hdev_flags))
-+ return 0;
-+
-+ skb = __hci_cmd_sync(hdev, HCI_OP_READ_LOCAL_VERSION, 0, NULL,
-+ HCI_INIT_TIMEOUT);
-+ if (IS_ERR(skb)) {
-+ BT_ERR("%s: Reading local version information failed (%ld)",
-+ hdev->name, PTR_ERR(skb));
-+ return 0;
-+ }
-+
-+ if (skb->len != sizeof(*ver)) {
-+ BT_ERR("%s: Event length mismatch for version information",
-+ hdev->name);
-+ }
-+
-+ kfree_skb(skb);
-+ return 0;
-+}
-+
-+/** hci_uart_write_wakeup - transmit buffer wakeup
-+ * @serdev: serial device
-+ *
-+ * This function is called by the serdev framework when it accepts
-+ * more data being sent.
-+ */
-+static void hci_uart_write_wakeup(struct serdev_device *serdev)
-+{
-+ struct hci_uart *hu = serdev_device_get_drvdata(serdev);
-+
-+ BT_DBG("");
-+
-+ if (!hu || serdev != hu->serdev) {
-+ WARN_ON(1);
-+ return;
-+ }
-+
-+ if (test_bit(HCI_UART_PROTO_READY, &hu->flags))
-+ hci_uart_tx_wakeup(hu);
-+}
-+
-+/** hci_uart_receive_buf - receive buffer wakeup
-+ * @serdev: serial device
-+ * @data: pointer to received data
-+ * @count: count of received data in bytes
-+ *
-+ * This function is called by the serdev framework when it received data
-+ * in the RX buffer.
-+ *
-+ * Return: number of processed bytes
-+ */
-+static int hci_uart_receive_buf(struct serdev_device *serdev, const u8 *data,
-+ size_t count)
-+{
-+ struct hci_uart *hu = serdev_device_get_drvdata(serdev);
-+
-+ if (!hu || serdev != hu->serdev) {
-+ WARN_ON(1);
-+ return 0;
-+ }
-+
-+ if (!test_bit(HCI_UART_PROTO_READY, &hu->flags))
-+ return 0;
-+
-+ /* It does not need a lock here as it is already protected by a mutex in
-+ * tty caller
-+ */
-+ hu->proto->recv(hu, data, count);
-+
-+ if (hu->hdev)
-+ hu->hdev->stat.byte_rx += count;
-+
-+ return count;
-+}
-+
-+struct serdev_device_ops hci_serdev_client_ops = {
-+ .receive_buf = hci_uart_receive_buf,
-+ .write_wakeup = hci_uart_write_wakeup,
-+};
-+
-+int hci_uart_register_device(struct hci_uart *hu,
-+ const struct hci_uart_proto *p)
-+{
-+ int err;
-+ struct hci_dev *hdev;
-+
-+ BT_DBG("");
-+
-+ err = p->open(hu);
-+ if (err)
-+ return err;
-+
-+ hu->proto = p;
-+ set_bit(HCI_UART_PROTO_READY, &hu->flags);
-+
-+ /* Initialize and register HCI device */
-+ hdev = hci_alloc_dev();
-+ if (!hdev) {
-+ BT_ERR("Can't allocate HCI device");
-+ err = -ENOMEM;
-+ goto err_alloc;
-+ }
-+
-+ hu->hdev = hdev;
-+
-+ hdev->bus = HCI_UART;
-+ hci_set_drvdata(hdev, hu);
-+
-+ INIT_WORK(&hu->write_work, hci_uart_write_work);
-+
-+ /* Only when vendor specific setup callback is provided, consider
-+ * the manufacturer information valid. This avoids filling in the
-+ * value for Ericsson when nothing is specified.
-+ */
-+ if (hu->proto->setup)
-+ hdev->manufacturer = hu->proto->manufacturer;
-+
-+ hdev->open = hci_uart_open;
-+ hdev->close = hci_uart_close;
-+ hdev->flush = hci_uart_flush;
-+ hdev->send = hci_uart_send_frame;
-+ hdev->setup = hci_uart_setup;
-+ SET_HCIDEV_DEV(hdev, &hu->serdev->dev);
-+
-+ if (test_bit(HCI_UART_RAW_DEVICE, &hu->hdev_flags))
-+ set_bit(HCI_QUIRK_RAW_DEVICE, &hdev->quirks);
-+
-+ if (test_bit(HCI_UART_EXT_CONFIG, &hu->hdev_flags))
-+ set_bit(HCI_QUIRK_EXTERNAL_CONFIG, &hdev->quirks);
-+
-+ if (!test_bit(HCI_UART_RESET_ON_INIT, &hu->hdev_flags))
-+ set_bit(HCI_QUIRK_RESET_ON_CLOSE, &hdev->quirks);
-+
-+ if (test_bit(HCI_UART_CREATE_AMP, &hu->hdev_flags))
-+ hdev->dev_type = HCI_AMP;
-+ else
-+ hdev->dev_type = HCI_PRIMARY;
-+
-+ if (test_bit(HCI_UART_INIT_PENDING, &hu->hdev_flags))
-+ return 0;
-+
-+ if (hci_register_dev(hdev) < 0) {
-+ BT_ERR("Can't register HCI device");
-+ err = -ENODEV;
-+ goto err_register;
-+ }
-+
-+ set_bit(HCI_UART_REGISTERED, &hu->flags);
-+
-+ return 0;
-+
-+err_register:
-+ hci_free_dev(hdev);
-+err_alloc:
-+ clear_bit(HCI_UART_PROTO_READY, &hu->flags);
-+ p->close(hu);
-+ return err;
-+}
-diff --git a/drivers/bluetooth/hci_uart.h b/drivers/bluetooth/hci_uart.h
-index 4aff50960cac..1b41c661bbb8 100644
---- a/drivers/bluetooth/hci_uart.h
-+++ b/drivers/bluetooth/hci_uart.h
-@@ -58,6 +58,7 @@
- #define HCI_UART_VND_DETECT 5
-
- struct hci_uart;
-+struct serdev_device;
-
- struct hci_uart_proto {
- unsigned int id;
-@@ -77,6 +78,7 @@ struct hci_uart_proto {
-
- struct hci_uart {
- struct tty_struct *tty;
-+ struct serdev_device *serdev;
- struct hci_dev *hdev;
- unsigned long flags;
- unsigned long hdev_flags;
-@@ -108,6 +110,8 @@ struct hci_uart {
-
- int hci_uart_register_proto(const struct hci_uart_proto *p);
- int hci_uart_unregister_proto(const struct hci_uart_proto *p);
-+int hci_uart_register_device(struct hci_uart *hu, const struct hci_uart_proto *p);
-+
- int hci_uart_tx_wakeup(struct hci_uart *hu);
- int hci_uart_init_ready(struct hci_uart *hu);
- void hci_uart_init_tty(struct hci_uart *hu);
---
-2.12.2
-
-From c76b6c5106713b00e183ccb757bc15732d369a33 Mon Sep 17 00:00:00 2001
-From: Sebastian Reichel <sre@kernel.org>
-Date: Tue, 28 Mar 2017 17:59:36 +0200
-Subject: [PATCH 06/13] Bluetooth: hci_serdev: do not open device in hci open
-
-The device driver may need to communicate with the UART
-device while the Bluetooth device is closed (e.g. due
-to interrupts).
-
-Acked-by: Pavel Machek <pavel@ucw.cz>
-Signed-off-by: Sebastian Reichel <sre@kernel.org>
-Signed-off-by: Rob Herring <robh@kernel.org>
----
- drivers/bluetooth/hci_serdev.c | 12 +++---------
- 1 file changed, 3 insertions(+), 9 deletions(-)
-
-diff --git a/drivers/bluetooth/hci_serdev.c b/drivers/bluetooth/hci_serdev.c
-index f5ccb2c7ef92..3b8ac0ece3fb 100644
---- a/drivers/bluetooth/hci_serdev.c
-+++ b/drivers/bluetooth/hci_serdev.c
-@@ -104,13 +104,9 @@ static void hci_uart_write_work(struct work_struct *work)
- /* Initialize device */
- static int hci_uart_open(struct hci_dev *hdev)
- {
-- struct hci_uart *hu = hci_get_drvdata(hdev);
--
- BT_DBG("%s %p", hdev->name, hdev);
-
-- serdev_device_set_client_ops(hu->serdev, &hci_serdev_client_ops);
--
-- return serdev_device_open(hu->serdev);
-+ return 0;
- }
-
- /* Reset device */
-@@ -136,15 +132,11 @@ static int hci_uart_flush(struct hci_dev *hdev)
- /* Close device */
- static int hci_uart_close(struct hci_dev *hdev)
- {
-- struct hci_uart *hu = hci_get_drvdata(hdev);
--
- BT_DBG("hdev %p", hdev);
-
- hci_uart_flush(hdev);
- hdev->flush = NULL;
-
-- serdev_device_close(hu->serdev);
--
- return 0;
- }
-
-@@ -289,6 +281,8 @@ int hci_uart_register_device(struct hci_uart *hu,
-
- BT_DBG("");
-
-+ serdev_device_set_client_ops(hu->serdev, &hci_serdev_client_ops);
-+
- err = p->open(hu);
- if (err)
- return err;
---
-2.12.2
-
-From 7fe8800d90c5e0f614e72c475687a68a76592241 Mon Sep 17 00:00:00 2001
-From: Sebastian Reichel <sre@kernel.org>
-Date: Tue, 28 Mar 2017 17:59:37 +0200
-Subject: [PATCH 07/13] Bluetooth: hci_serdev: allow modular drivers
-
-For bluetooth protocol driver only supporting serdev it makes
-sense to follow common practice and built them into their own
-module.
-
-Such modules need access to hci_uart_register_device and
-hci_uart_tx_wakeup for using the common protocol helpers.
-
-Signed-off-by: Sebastian Reichel <sre@kernel.org>
-Signed-off-by: Rob Herring <robh@kernel.org>
----
- drivers/bluetooth/hci_ldisc.c | 1 +
- drivers/bluetooth/hci_serdev.c | 1 +
- 2 files changed, 2 insertions(+)
-
-diff --git a/drivers/bluetooth/hci_ldisc.c b/drivers/bluetooth/hci_ldisc.c
-index 0ec8a94bd712..17bcbc13623f 100644
---- a/drivers/bluetooth/hci_ldisc.c
-+++ b/drivers/bluetooth/hci_ldisc.c
-@@ -134,6 +134,7 @@ int hci_uart_tx_wakeup(struct hci_uart *hu)
-
- return 0;
- }
-+EXPORT_SYMBOL_GPL(hci_uart_tx_wakeup);
-
- static void hci_uart_write_work(struct work_struct *work)
- {
-diff --git a/drivers/bluetooth/hci_serdev.c b/drivers/bluetooth/hci_serdev.c
-index 3b8ac0ece3fb..7de0edc0ff8c 100644
---- a/drivers/bluetooth/hci_serdev.c
-+++ b/drivers/bluetooth/hci_serdev.c
-@@ -353,3 +353,4 @@ int hci_uart_register_device(struct hci_uart *hu,
- p->close(hu);
- return err;
- }
-+EXPORT_SYMBOL_GPL(hci_uart_register_device);
---
-2.12.2
-
-From 68bfebdd86741d45508148c6fa13b5bd21116c7e Mon Sep 17 00:00:00 2001
-From: Sebastian Reichel <sre@kernel.org>
-Date: Tue, 28 Mar 2017 17:59:38 +0200
-Subject: [PATCH 08/13] dt-bindings: net: bluetooth: Add nokia-bluetooth
-
-Add binding document for serial bluetooth chips using
-Nokia H4+ protocol.
-
-Acked-by: Rob Herring <robh@kernel.org>
-Signed-off-by: Sebastian Reichel <sre@kernel.org>
-
-Changes since PATCHv1:
- * change compatible strings
- * mention active high/low state for GPIOs
-Signed-off-by: Rob Herring <robh@kernel.org>
----
- .../devicetree/bindings/net/nokia-bluetooth.txt | 51 ++++++++++++++++++++++
- 1 file changed, 51 insertions(+)
- create mode 100644 Documentation/devicetree/bindings/net/nokia-bluetooth.txt
-
-diff --git a/Documentation/devicetree/bindings/net/nokia-bluetooth.txt b/Documentation/devicetree/bindings/net/nokia-bluetooth.txt
-new file mode 100644
-index 000000000000..42be7dc9a70b
---- /dev/null
-+++ b/Documentation/devicetree/bindings/net/nokia-bluetooth.txt
-@@ -0,0 +1,51 @@
-+Nokia Bluetooth Chips
-+---------------------
-+
-+Nokia phones often come with UART connected bluetooth chips from different
-+vendors and modified device API. Those devices speak a protocol named H4+
-+(also known as h4p) by Nokia, which is similar to the H4 protocol from the
-+Bluetooth standard. In addition to the H4 protocol it specifies two more
-+UART status lines for wakeup of UART transceivers to improve power management
-+and a few new packet types used to negotiate uart speed.
-+
-+Required properties:
-+
-+ - compatible: should contain "nokia,h4p-bluetooth" as well as one of the following:
-+ * "brcm,bcm2048-nokia"
-+ * "ti,wl1271-bluetooth-nokia"
-+ - reset-gpios: GPIO specifier, used to reset the BT module (active low)
-+ - bluetooth-wakeup-gpios: GPIO specifier, used to wakeup the BT module (active high)
-+ - host-wakeup-gpios: GPIO specifier, used to wakeup the host processor (active high)
-+ - clock-names: should be "sysclk"
-+ - clocks: should contain a clock specifier for every name in clock-names
-+
-+Optional properties:
-+
-+ - None
-+
-+Example:
-+
-+/ {
-+ /* controlled (enabled/disabled) directly by BT module */
-+ bluetooth_clk: vctcxo {
-+ compatible = "fixed-clock";
-+ #clock-cells = <0>;
-+ clock-frequency = <38400000>;
-+ };
-+};
-+
-+&uart2 {
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&uart2_pins>;
-+
-+ bluetooth {
-+ compatible = "ti,wl1271-bluetooth-nokia", "nokia,h4p-bluetooth";
-+
-+ reset-gpios = <&gpio1 26 GPIO_ACTIVE_LOW>; /* gpio26 */
-+ host-wakeup-gpios = <&gpio4 5 GPIO_ACTIVE_HIGH>; /* gpio101 */
-+ bluetooth-wakeup-gpios = <&gpio2 5 GPIO_ACTIVE_HIGH>; /* gpio37 */
-+
-+ clocks = <&bluetooth_clk>;
-+ clock-names = "sysclk";
-+ };
-+};
---
-2.12.2
-
-From 90753299ed56ee7c5807c09b2185094a91a2cbbe Mon Sep 17 00:00:00 2001
-From: Sebastian Reichel <sre@kernel.org>
-Date: Tue, 28 Mar 2017 17:59:39 +0200
-Subject: [PATCH 09/13] Bluetooth: add nokia driver
-
-This adds a driver for the Nokia H4+ protocol, which is used
-at least on the Nokia N9, N900 & N950.
-
-Signed-off-by: Sebastian Reichel <sre@kernel.org>
-Signed-off-by: Rob Herring <robh@kernel.org>
----
- drivers/bluetooth/Kconfig | 12 +
- drivers/bluetooth/Makefile | 2 +
- drivers/bluetooth/hci_nokia.c | 819 ++++++++++++++++++++++++++++++++++++++++++
- 3 files changed, 833 insertions(+)
- create mode 100644 drivers/bluetooth/hci_nokia.c
-
-diff --git a/drivers/bluetooth/Kconfig b/drivers/bluetooth/Kconfig
-index 08e054507d0b..479e2eacd1aa 100644
---- a/drivers/bluetooth/Kconfig
-+++ b/drivers/bluetooth/Kconfig
-@@ -86,6 +86,18 @@ config BT_HCIUART_H4
-
- Say Y here to compile support for HCI UART (H4) protocol.
-
-+config BT_HCIUART_NOKIA
-+ tristate "UART Nokia H4+ protocol support"
-+ depends on BT_HCIUART
-+ depends on SERIAL_DEV_BUS
-+ depends on PM
-+ help
-+ Nokia H4+ is serial protocol for communication between Bluetooth
-+ device and host. This protocol is required for Bluetooth devices
-+ with UART interface in Nokia devices.
-+
-+ Say Y here to compile support for Nokia's H4+ protocol.
-+
- config BT_HCIUART_BCSP
- bool "BCSP protocol support"
- depends on BT_HCIUART
-diff --git a/drivers/bluetooth/Makefile b/drivers/bluetooth/Makefile
-index fd571689eed6..a7f237320f4b 100644
---- a/drivers/bluetooth/Makefile
-+++ b/drivers/bluetooth/Makefile
-@@ -25,6 +25,8 @@ obj-$(CONFIG_BT_BCM) += btbcm.o
- obj-$(CONFIG_BT_RTL) += btrtl.o
- obj-$(CONFIG_BT_QCA) += btqca.o
-
-+obj-$(CONFIG_BT_HCIUART_NOKIA) += hci_nokia.o
-+
- btmrvl-y := btmrvl_main.o
- btmrvl-$(CONFIG_DEBUG_FS) += btmrvl_debugfs.o
-
-diff --git a/drivers/bluetooth/hci_nokia.c b/drivers/bluetooth/hci_nokia.c
-new file mode 100644
-index 000000000000..c77f04af01bf
---- /dev/null
-+++ b/drivers/bluetooth/hci_nokia.c
-@@ -0,0 +1,819 @@
-+/*
-+ * Bluetooth HCI UART H4 driver with Nokia Extensions AKA Nokia H4+
-+ *
-+ * Copyright (C) 2015 Marcel Holtmann <marcel@holtmann.org>
-+ * Copyright (C) 2015-2017 Sebastian Reichel <sre@kernel.org>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/clk.h>
-+#include <linux/kernel.h>
-+#include <linux/types.h>
-+#include <linux/interrupt.h>
-+#include <linux/pm_runtime.h>
-+#include <linux/firmware.h>
-+#include <linux/slab.h>
-+#include <linux/string.h>
-+#include <linux/errno.h>
-+#include <linux/skbuff.h>
-+#include <linux/gpio/consumer.h>
-+#include <linux/unaligned/le_struct.h>
-+#include <net/bluetooth/bluetooth.h>
-+#include <net/bluetooth/hci_core.h>
-+#include <linux/serdev.h>
-+
-+#include "hci_uart.h"
-+#include "btbcm.h"
-+
-+#define NOKIA_ID_BCM2048 0x04
-+#define NOKIA_ID_TI1271 0x31
-+
-+#define FIRMWARE_BCM2048 "nokia/bcmfw.bin"
-+#define FIRMWARE_TI1271 "nokia/ti1273.bin"
-+
-+#define HCI_NOKIA_NEG_PKT 0x06
-+#define HCI_NOKIA_ALIVE_PKT 0x07
-+#define HCI_NOKIA_RADIO_PKT 0x08
-+
-+#define HCI_NOKIA_NEG_HDR_SIZE 1
-+#define HCI_NOKIA_MAX_NEG_SIZE 255
-+#define HCI_NOKIA_ALIVE_HDR_SIZE 1
-+#define HCI_NOKIA_MAX_ALIVE_SIZE 255
-+#define HCI_NOKIA_RADIO_HDR_SIZE 2
-+#define HCI_NOKIA_MAX_RADIO_SIZE 255
-+
-+#define NOKIA_PROTO_PKT 0x44
-+#define NOKIA_PROTO_BYTE 0x4c
-+
-+#define NOKIA_NEG_REQ 0x00
-+#define NOKIA_NEG_ACK 0x20
-+#define NOKIA_NEG_NAK 0x40
-+
-+#define H4_TYPE_SIZE 1
-+
-+#define NOKIA_RECV_ALIVE \
-+ .type = HCI_NOKIA_ALIVE_PKT, \
-+ .hlen = HCI_NOKIA_ALIVE_HDR_SIZE, \
-+ .loff = 0, \
-+ .lsize = 1, \
-+ .maxlen = HCI_NOKIA_MAX_ALIVE_SIZE \
-+
-+#define NOKIA_RECV_NEG \
-+ .type = HCI_NOKIA_NEG_PKT, \
-+ .hlen = HCI_NOKIA_NEG_HDR_SIZE, \
-+ .loff = 0, \
-+ .lsize = 1, \
-+ .maxlen = HCI_NOKIA_MAX_NEG_SIZE \
-+
-+#define NOKIA_RECV_RADIO \
-+ .type = HCI_NOKIA_RADIO_PKT, \
-+ .hlen = HCI_NOKIA_RADIO_HDR_SIZE, \
-+ .loff = 1, \
-+ .lsize = 1, \
-+ .maxlen = HCI_NOKIA_MAX_RADIO_SIZE \
-+
-+struct hci_nokia_neg_hdr {
-+ u8 dlen;
-+} __packed;
-+
-+struct hci_nokia_neg_cmd {
-+ u8 ack;
-+ u16 baud;
-+ u16 unused1;
-+ u8 proto;
-+ u16 sys_clk;
-+ u16 unused2;
-+} __packed;
-+
-+#define NOKIA_ALIVE_REQ 0x55
-+#define NOKIA_ALIVE_RESP 0xcc
-+
-+struct hci_nokia_alive_hdr {
-+ u8 dlen;
-+} __packed;
-+
-+struct hci_nokia_alive_pkt {
-+ u8 mid;
-+ u8 unused;
-+} __packed;
-+
-+struct hci_nokia_neg_evt {
-+ u8 ack;
-+ u16 baud;
-+ u16 unused1;
-+ u8 proto;
-+ u16 sys_clk;
-+ u16 unused2;
-+ u8 man_id;
-+ u8 ver_id;
-+} __packed;
-+
-+#define MAX_BAUD_RATE 3692300
-+#define SETUP_BAUD_RATE 921600
-+#define INIT_BAUD_RATE 120000
-+
-+struct hci_nokia_radio_hdr {
-+ u8 evt;
-+ u8 dlen;
-+} __packed;
-+
-+struct nokia_bt_dev {
-+ struct hci_uart hu;
-+ struct serdev_device *serdev;
-+
-+ struct gpio_desc *reset;
-+ struct gpio_desc *wakeup_host;
-+ struct gpio_desc *wakeup_bt;
-+ unsigned long sysclk_speed;
-+
-+ int wake_irq;
-+ struct sk_buff *rx_skb;
-+ struct sk_buff_head txq;
-+ bdaddr_t bdaddr;
-+
-+ int init_error;
-+ struct completion init_completion;
-+
-+ u8 man_id;
-+ u8 ver_id;
-+
-+ bool initialized;
-+ bool tx_enabled;
-+ bool rx_enabled;
-+};
-+
-+static int nokia_enqueue(struct hci_uart *hu, struct sk_buff *skb);
-+
-+static void nokia_flow_control(struct serdev_device *serdev, bool enable)
-+{
-+ if (enable) {
-+ serdev_device_set_rts(serdev, true);
-+ serdev_device_set_flow_control(serdev, true);
-+ } else {
-+ serdev_device_set_flow_control(serdev, false);
-+ serdev_device_set_rts(serdev, false);
-+ }
-+}
-+
-+static irqreturn_t wakeup_handler(int irq, void *data)
-+{
-+ struct nokia_bt_dev *btdev = data;
-+ struct device *dev = &btdev->serdev->dev;
-+ int wake_state = gpiod_get_value(btdev->wakeup_host);
-+
-+ if (btdev->rx_enabled == wake_state)
-+ return IRQ_HANDLED;
-+
-+ if (wake_state)
-+ pm_runtime_get(dev);
-+ else
-+ pm_runtime_put(dev);
-+
-+ btdev->rx_enabled = wake_state;
-+
-+ return IRQ_HANDLED;
-+}
-+
-+static int nokia_reset(struct hci_uart *hu)
-+{
-+ struct nokia_bt_dev *btdev = hu->priv;
-+ struct device *dev = &btdev->serdev->dev;
-+ int err;
-+
-+ /* reset routine */
-+ gpiod_set_value_cansleep(btdev->reset, 1);
-+ gpiod_set_value_cansleep(btdev->wakeup_bt, 1);
-+
-+ msleep(100);
-+
-+ /* safety check */
-+ err = gpiod_get_value_cansleep(btdev->wakeup_host);
-+ if (err == 1) {
-+ dev_err(dev, "reset: host wakeup not low!");
-+ return -EPROTO;
-+ }
-+
-+ /* flush queue */
-+ serdev_device_write_flush(btdev->serdev);
-+
-+ /* init uart */
-+ nokia_flow_control(btdev->serdev, false);
-+ serdev_device_set_baudrate(btdev->serdev, INIT_BAUD_RATE);
-+
-+ gpiod_set_value_cansleep(btdev->reset, 0);
-+
-+ /* wait for cts */
-+ err = serdev_device_wait_for_cts(btdev->serdev, true, 200);
-+ if (err < 0) {
-+ dev_err(dev, "CTS not received: %d", err);
-+ return err;
-+ }
-+
-+ nokia_flow_control(btdev->serdev, true);
-+
-+ return 0;
-+}
-+
-+static int nokia_send_alive_packet(struct hci_uart *hu)
-+{
-+ struct nokia_bt_dev *btdev = hu->priv;
-+ struct device *dev = &btdev->serdev->dev;
-+ struct hci_nokia_alive_hdr *hdr;
-+ struct hci_nokia_alive_pkt *pkt;
-+ struct sk_buff *skb;
-+ int len;
-+
-+ init_completion(&btdev->init_completion);
-+
-+ len = H4_TYPE_SIZE + sizeof(*hdr) + sizeof(*pkt);
-+ skb = bt_skb_alloc(len, GFP_KERNEL);
-+ if (!skb)
-+ return -ENOMEM;
-+
-+ hci_skb_pkt_type(skb) = HCI_NOKIA_ALIVE_PKT;
-+ memset(skb->data, 0x00, len);
-+
-+ hdr = (struct hci_nokia_alive_hdr *)skb_put(skb, sizeof(*hdr));
-+ hdr->dlen = sizeof(*pkt);
-+ pkt = (struct hci_nokia_alive_pkt *)skb_put(skb, sizeof(*pkt));
-+ pkt->mid = NOKIA_ALIVE_REQ;
-+
-+ nokia_enqueue(hu, skb);
-+ hci_uart_tx_wakeup(hu);
-+
-+ dev_dbg(dev, "Alive sent");
-+
-+ if (!wait_for_completion_interruptible_timeout(&btdev->init_completion,
-+ msecs_to_jiffies(1000))) {
-+ return -ETIMEDOUT;
-+ }
-+
-+ if (btdev->init_error < 0)
-+ return btdev->init_error;
-+
-+ return 0;
-+}
-+
-+static int nokia_send_negotiation(struct hci_uart *hu)
-+{
-+ struct nokia_bt_dev *btdev = hu->priv;
-+ struct device *dev = &btdev->serdev->dev;
-+ struct hci_nokia_neg_cmd *neg_cmd;
-+ struct hci_nokia_neg_hdr *neg_hdr;
-+ struct sk_buff *skb;
-+ int len, err;
-+ u16 baud = DIV_ROUND_CLOSEST(btdev->sysclk_speed * 10, SETUP_BAUD_RATE);
-+ int sysclk = btdev->sysclk_speed / 1000;
-+
-+ len = H4_TYPE_SIZE + sizeof(*neg_hdr) + sizeof(*neg_cmd);
-+ skb = bt_skb_alloc(len, GFP_KERNEL);
-+ if (!skb)
-+ return -ENOMEM;
-+
-+ hci_skb_pkt_type(skb) = HCI_NOKIA_NEG_PKT;
-+
-+ neg_hdr = (struct hci_nokia_neg_hdr *)skb_put(skb, sizeof(*neg_hdr));
-+ neg_hdr->dlen = sizeof(*neg_cmd);
-+
-+ neg_cmd = (struct hci_nokia_neg_cmd *)skb_put(skb, sizeof(*neg_cmd));
-+ neg_cmd->ack = NOKIA_NEG_REQ;
-+ neg_cmd->baud = cpu_to_le16(baud);
-+ neg_cmd->unused1 = 0x0000;
-+ neg_cmd->proto = NOKIA_PROTO_BYTE;
-+ neg_cmd->sys_clk = cpu_to_le16(sysclk);
-+ neg_cmd->unused2 = 0x0000;
-+
-+ btdev->init_error = 0;
-+ init_completion(&btdev->init_completion);
-+
-+ nokia_enqueue(hu, skb);
-+ hci_uart_tx_wakeup(hu);
-+
-+ dev_dbg(dev, "Negotiation sent");
-+
-+ if (!wait_for_completion_interruptible_timeout(&btdev->init_completion,
-+ msecs_to_jiffies(10000))) {
-+ return -ETIMEDOUT;
-+ }
-+
-+ if (btdev->init_error < 0)
-+ return btdev->init_error;
-+
-+ /* Change to previously negotiated speed. Flow Control
-+ * is disabled until bluetooth adapter is ready to avoid
-+ * broken bytes being received.
-+ */
-+ nokia_flow_control(btdev->serdev, false);
-+ serdev_device_set_baudrate(btdev->serdev, SETUP_BAUD_RATE);
-+ err = serdev_device_wait_for_cts(btdev->serdev, true, 200);
-+ if (err < 0) {
-+ dev_err(dev, "CTS not received: %d", err);
-+ return err;
-+ }
-+ nokia_flow_control(btdev->serdev, true);
-+
-+ dev_dbg(dev, "Negotiation successful");
-+
-+ return 0;
-+}
-+
-+static int nokia_setup_fw(struct hci_uart *hu)
-+{
-+ struct nokia_bt_dev *btdev = hu->priv;
-+ struct device *dev = &btdev->serdev->dev;
-+ const char *fwname;
-+ const struct firmware *fw;
-+ const u8 *fw_ptr;
-+ size_t fw_size;
-+ int err;
-+
-+ dev_dbg(dev, "setup firmware");
-+
-+ if (btdev->man_id == NOKIA_ID_BCM2048) {
-+ fwname = FIRMWARE_BCM2048;
-+ } else if (btdev->man_id == NOKIA_ID_TI1271) {
-+ fwname = FIRMWARE_TI1271;
-+ } else {
-+ dev_err(dev, "Unsupported bluetooth device!");
-+ return -ENODEV;
-+ }
-+
-+ err = request_firmware(&fw, fwname, dev);
-+ if (err < 0) {
-+ dev_err(dev, "%s: Failed to load Nokia firmware file (%d)",
-+ hu->hdev->name, err);
-+ return err;
-+ }
-+
-+ fw_ptr = fw->data;
-+ fw_size = fw->size;
-+
-+ while (fw_size >= 4) {
-+ u16 pkt_size = get_unaligned_le16(fw_ptr);
-+ u8 pkt_type = fw_ptr[2];
-+ const struct hci_command_hdr *cmd;
-+ u16 opcode;
-+ struct sk_buff *skb;
-+
-+ switch (pkt_type) {
-+ case HCI_COMMAND_PKT:
-+ cmd = (struct hci_command_hdr *)(fw_ptr + 3);
-+ opcode = le16_to_cpu(cmd->opcode);
-+
-+ skb = __hci_cmd_sync(hu->hdev, opcode, cmd->plen,
-+ fw_ptr + 3 + HCI_COMMAND_HDR_SIZE,
-+ HCI_INIT_TIMEOUT);
-+ if (IS_ERR(skb)) {
-+ err = PTR_ERR(skb);
-+ dev_err(dev, "%s: FW command %04x failed (%d)",
-+ hu->hdev->name, opcode, err);
-+ goto done;
-+ }
-+ kfree_skb(skb);
-+ break;
-+ case HCI_NOKIA_RADIO_PKT:
-+ case HCI_NOKIA_NEG_PKT:
-+ case HCI_NOKIA_ALIVE_PKT:
-+ break;
-+ }
-+
-+ fw_ptr += pkt_size + 2;
-+ fw_size -= pkt_size + 2;
-+ }
-+
-+done:
-+ release_firmware(fw);
-+ return err;
-+}
-+
-+static int nokia_setup(struct hci_uart *hu)
-+{
-+ struct nokia_bt_dev *btdev = hu->priv;
-+ struct device *dev = &btdev->serdev->dev;
-+ int err;
-+
-+ btdev->initialized = false;
-+
-+ nokia_flow_control(btdev->serdev, false);
-+
-+ pm_runtime_get_sync(dev);
-+
-+ if (btdev->tx_enabled) {
-+ gpiod_set_value_cansleep(btdev->wakeup_bt, 0);
-+ pm_runtime_put(&btdev->serdev->dev);
-+ btdev->tx_enabled = false;
-+ }
-+
-+ dev_dbg(dev, "protocol setup");
-+
-+ /* 0. reset connection */
-+ err = nokia_reset(hu);
-+ if (err < 0) {
-+ dev_err(dev, "Reset failed: %d", err);
-+ goto out;
-+ }
-+
-+ /* 1. negotiate speed etc */
-+ err = nokia_send_negotiation(hu);
-+ if (err < 0) {
-+ dev_err(dev, "Negotiation failed: %d", err);
-+ goto out;
-+ }
-+
-+ /* 2. verify correct setup using alive packet */
-+ err = nokia_send_alive_packet(hu);
-+ if (err < 0) {
-+ dev_err(dev, "Alive check failed: %d", err);
-+ goto out;
-+ }
-+
-+ /* 3. send firmware */
-+ err = nokia_setup_fw(hu);
-+ if (err < 0) {
-+ dev_err(dev, "Could not setup FW: %d", err);
-+ goto out;
-+ }
-+
-+ nokia_flow_control(btdev->serdev, false);
-+ serdev_device_set_baudrate(btdev->serdev, MAX_BAUD_RATE);
-+ nokia_flow_control(btdev->serdev, true);
-+
-+ if (btdev->man_id == NOKIA_ID_BCM2048) {
-+ hu->hdev->set_bdaddr = btbcm_set_bdaddr;
-+ set_bit(HCI_QUIRK_INVALID_BDADDR, &hu->hdev->quirks);
-+ dev_dbg(dev, "bcm2048 has invalid bluetooth address!");
-+ }
-+
-+ dev_dbg(dev, "protocol setup done!");
-+
-+ gpiod_set_value_cansleep(btdev->wakeup_bt, 0);
-+ pm_runtime_put(dev);
-+ btdev->tx_enabled = false;
-+ btdev->initialized = true;
-+
-+ return 0;
-+out:
-+ pm_runtime_put(dev);
-+
-+ return err;
-+}
-+
-+static int nokia_open(struct hci_uart *hu)
-+{
-+ struct device *dev = &hu->serdev->dev;
-+
-+ dev_dbg(dev, "protocol open");
-+
-+ serdev_device_open(hu->serdev);
-+
-+ pm_runtime_enable(dev);
-+
-+ return 0;
-+}
-+
-+static int nokia_flush(struct hci_uart *hu)
-+{
-+ struct nokia_bt_dev *btdev = hu->priv;
-+
-+ dev_dbg(&btdev->serdev->dev, "flush device");
-+
-+ skb_queue_purge(&btdev->txq);
-+
-+ return 0;
-+}
-+
-+static int nokia_close(struct hci_uart *hu)
-+{
-+ struct nokia_bt_dev *btdev = hu->priv;
-+ struct device *dev = &btdev->serdev->dev;
-+
-+ dev_dbg(dev, "close device");
-+
-+ btdev->initialized = false;
-+
-+ skb_queue_purge(&btdev->txq);
-+
-+ kfree_skb(btdev->rx_skb);
-+
-+ /* disable module */
-+ gpiod_set_value(btdev->reset, 1);
-+ gpiod_set_value(btdev->wakeup_bt, 0);
-+
-+ pm_runtime_disable(&btdev->serdev->dev);
-+ serdev_device_close(btdev->serdev);
-+
-+ return 0;
-+}
-+
-+/* Enqueue frame for transmittion (padding, crc, etc) */
-+static int nokia_enqueue(struct hci_uart *hu, struct sk_buff *skb)
-+{
-+ struct nokia_bt_dev *btdev = hu->priv;
-+ int err;
-+
-+ /* Prepend skb with frame type */
-+ memcpy(skb_push(skb, 1), &bt_cb(skb)->pkt_type, 1);
-+
-+ /* Packets must be word aligned */
-+ if (skb->len % 2) {
-+ err = skb_pad(skb, 1);
-+ if (err)
-+ return err;
-+ *skb_put(skb, 1) = 0x00;
-+ }
-+
-+ skb_queue_tail(&btdev->txq, skb);
-+
-+ return 0;
-+}
-+
-+static int nokia_recv_negotiation_packet(struct hci_dev *hdev,
-+ struct sk_buff *skb)
-+{
-+ struct hci_uart *hu = hci_get_drvdata(hdev);
-+ struct nokia_bt_dev *btdev = hu->priv;
-+ struct device *dev = &btdev->serdev->dev;
-+ struct hci_nokia_neg_hdr *hdr;
-+ struct hci_nokia_neg_evt *evt;
-+ int ret = 0;
-+
-+ hdr = (struct hci_nokia_neg_hdr *)skb->data;
-+ if (hdr->dlen != sizeof(*evt)) {
-+ btdev->init_error = -EIO;
-+ ret = -EIO;
-+ goto finish_neg;
-+ }
-+
-+ evt = (struct hci_nokia_neg_evt *)skb_pull(skb, sizeof(*hdr));
-+
-+ if (evt->ack != NOKIA_NEG_ACK) {
-+ dev_err(dev, "Negotiation received: wrong reply");
-+ btdev->init_error = -EINVAL;
-+ ret = -EINVAL;
-+ goto finish_neg;
-+ }
-+
-+ btdev->man_id = evt->man_id;
-+ btdev->ver_id = evt->ver_id;
-+
-+ dev_dbg(dev, "Negotiation received: baud=%u:clk=%u:manu=%u:vers=%u",
-+ evt->baud, evt->sys_clk, evt->man_id, evt->ver_id);
-+
-+finish_neg:
-+ complete(&btdev->init_completion);
-+ kfree_skb(skb);
-+ return ret;
-+}
-+
-+static int nokia_recv_alive_packet(struct hci_dev *hdev, struct sk_buff *skb)
-+{
-+ struct hci_uart *hu = hci_get_drvdata(hdev);
-+ struct nokia_bt_dev *btdev = hu->priv;
-+ struct device *dev = &btdev->serdev->dev;
-+ struct hci_nokia_alive_hdr *hdr;
-+ struct hci_nokia_alive_pkt *pkt;
-+ int ret = 0;
-+
-+ hdr = (struct hci_nokia_alive_hdr *)skb->data;
-+ if (hdr->dlen != sizeof(*pkt)) {
-+ dev_err(dev, "Corrupted alive message");
-+ btdev->init_error = -EIO;
-+ ret = -EIO;
-+ goto finish_alive;
-+ }
-+
-+ pkt = (struct hci_nokia_alive_pkt *)skb_pull(skb, sizeof(*hdr));
-+
-+ if (pkt->mid != NOKIA_ALIVE_RESP) {
-+ dev_err(dev, "Alive received: invalid response: 0x%02x!",
-+ pkt->mid);
-+ btdev->init_error = -EINVAL;
-+ ret = -EINVAL;
-+ goto finish_alive;
-+ }
-+
-+ dev_dbg(dev, "Alive received");
-+
-+finish_alive:
-+ complete(&btdev->init_completion);
-+ kfree_skb(skb);
-+ return ret;
-+}
-+
-+static int nokia_recv_radio(struct hci_dev *hdev, struct sk_buff *skb)
-+{
-+ /* Packets received on the dedicated radio channel are
-+ * HCI events and so feed them back into the core.
-+ */
-+ hci_skb_pkt_type(skb) = HCI_EVENT_PKT;
-+ return hci_recv_frame(hdev, skb);
-+}
-+
-+/* Recv data */
-+static const struct h4_recv_pkt nokia_recv_pkts[] = {
-+ { H4_RECV_ACL, .recv = hci_recv_frame },
-+ { H4_RECV_SCO, .recv = hci_recv_frame },
-+ { H4_RECV_EVENT, .recv = hci_recv_frame },
-+ { NOKIA_RECV_ALIVE, .recv = nokia_recv_alive_packet },
-+ { NOKIA_RECV_NEG, .recv = nokia_recv_negotiation_packet },
-+ { NOKIA_RECV_RADIO, .recv = nokia_recv_radio },
-+};
-+
-+static int nokia_recv(struct hci_uart *hu, const void *data, int count)
-+{
-+ struct nokia_bt_dev *btdev = hu->priv;
-+ struct device *dev = &btdev->serdev->dev;
-+ int err;
-+
-+ if (!test_bit(HCI_UART_REGISTERED, &hu->flags))
-+ return -EUNATCH;
-+
-+ btdev->rx_skb = h4_recv_buf(hu->hdev, btdev->rx_skb, data, count,
-+ nokia_recv_pkts, ARRAY_SIZE(nokia_recv_pkts));
-+ if (IS_ERR(btdev->rx_skb)) {
-+ err = PTR_ERR(btdev->rx_skb);
-+ dev_err(dev, "Frame reassembly failed (%d)", err);
-+ btdev->rx_skb = NULL;
-+ return err;
-+ }
-+
-+ return count;
-+}
-+
-+static struct sk_buff *nokia_dequeue(struct hci_uart *hu)
-+{
-+ struct nokia_bt_dev *btdev = hu->priv;
-+ struct device *dev = &btdev->serdev->dev;
-+ struct sk_buff *result = skb_dequeue(&btdev->txq);
-+
-+ if (!btdev->initialized)
-+ return result;
-+
-+ if (btdev->tx_enabled == !!result)
-+ return result;
-+
-+ if (result) {
-+ pm_runtime_get_sync(dev);
-+ gpiod_set_value_cansleep(btdev->wakeup_bt, 1);
-+ } else {
-+ serdev_device_wait_until_sent(btdev->serdev, 0);
-+ gpiod_set_value_cansleep(btdev->wakeup_bt, 0);
-+ pm_runtime_put(dev);
-+ }
-+
-+ btdev->tx_enabled = !!result;
-+
-+ return result;
-+}
-+
-+static const struct hci_uart_proto nokia_proto = {
-+ .id = HCI_UART_NOKIA,
-+ .name = "Nokia",
-+ .open = nokia_open,
-+ .close = nokia_close,
-+ .recv = nokia_recv,
-+ .enqueue = nokia_enqueue,
-+ .dequeue = nokia_dequeue,
-+ .flush = nokia_flush,
-+ .setup = nokia_setup,
-+ .manufacturer = 1,
-+};
-+
-+static int nokia_bluetooth_serdev_probe(struct serdev_device *serdev)
-+{
-+ struct device *dev = &serdev->dev;
-+ struct nokia_bt_dev *btdev;
-+ struct clk *sysclk;
-+ int err = 0;
-+
-+ btdev = devm_kzalloc(dev, sizeof(*btdev), GFP_KERNEL);
-+ if (!btdev)
-+ return -ENOMEM;
-+
-+ btdev->hu.serdev = btdev->serdev = serdev;
-+ serdev_device_set_drvdata(serdev, btdev);
-+
-+ btdev->reset = devm_gpiod_get(dev, "reset", GPIOD_OUT_HIGH);
-+ if (IS_ERR(btdev->reset)) {
-+ err = PTR_ERR(btdev->reset);
-+ dev_err(dev, "could not get reset gpio: %d", err);
-+ return err;
-+ }
-+
-+ btdev->wakeup_host = devm_gpiod_get(dev, "host-wakeup", GPIOD_IN);
-+ if (IS_ERR(btdev->wakeup_host)) {
-+ err = PTR_ERR(btdev->wakeup_host);
-+ dev_err(dev, "could not get host wakeup gpio: %d", err);
-+ return err;
-+ }
-+
-+ btdev->wake_irq = gpiod_to_irq(btdev->wakeup_host);
-+
-+ err = devm_request_threaded_irq(dev, btdev->wake_irq, NULL,
-+ wakeup_handler,
-+ IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
-+ "wakeup", btdev);
-+ if (err) {
-+ dev_err(dev, "could request wakeup irq: %d", err);
-+ return err;
-+ }
-+
-+ btdev->wakeup_bt = devm_gpiod_get(dev, "bluetooth-wakeup",
-+ GPIOD_OUT_LOW);
-+ if (IS_ERR(btdev->wakeup_bt)) {
-+ err = PTR_ERR(btdev->wakeup_bt);
-+ dev_err(dev, "could not get BT wakeup gpio: %d", err);
-+ return err;
-+ }
-+
-+ sysclk = devm_clk_get(dev, "sysclk");
-+ if (IS_ERR(sysclk)) {
-+ err = PTR_ERR(sysclk);
-+ dev_err(dev, "could not get sysclk: %d", err);
-+ return err;
-+ }
-+
-+ clk_prepare_enable(sysclk);
-+ btdev->sysclk_speed = clk_get_rate(sysclk);
-+ clk_disable_unprepare(sysclk);
-+
-+ skb_queue_head_init(&btdev->txq);
-+
-+ btdev->hu.priv = btdev;
-+ btdev->hu.alignment = 2; /* Nokia H4+ is word aligned */
-+
-+ err = hci_uart_register_device(&btdev->hu, &nokia_proto);
-+ if (err) {
-+ dev_err(dev, "could not register bluetooth uart: %d", err);
-+ return err;
-+ }
-+
-+ return 0;
-+}
-+
-+static void nokia_bluetooth_serdev_remove(struct serdev_device *serdev)
-+{
-+ struct nokia_bt_dev *btdev = serdev_device_get_drvdata(serdev);
-+ struct hci_uart *hu = &btdev->hu;
-+ struct hci_dev *hdev = hu->hdev;
-+
-+ cancel_work_sync(&hu->write_work);
-+
-+ hci_unregister_dev(hdev);
-+ hci_free_dev(hdev);
-+ hu->proto->close(hu);
-+
-+ pm_runtime_disable(&btdev->serdev->dev);
-+}
-+
-+static int nokia_bluetooth_runtime_suspend(struct device *dev)
-+{
-+ struct serdev_device *serdev = to_serdev_device(dev);
-+
-+ nokia_flow_control(serdev, false);
-+ return 0;
-+}
-+
-+static int nokia_bluetooth_runtime_resume(struct device *dev)
-+{
-+ struct serdev_device *serdev = to_serdev_device(dev);
-+
-+ nokia_flow_control(serdev, true);
-+ return 0;
-+}
-+
-+static const struct dev_pm_ops nokia_bluetooth_pm_ops = {
-+ SET_RUNTIME_PM_OPS(nokia_bluetooth_runtime_suspend,
-+ nokia_bluetooth_runtime_resume,
-+ NULL)
-+};
-+
-+#ifdef CONFIG_OF
-+static const struct of_device_id nokia_bluetooth_of_match[] = {
-+ { .compatible = "nokia,h4p-bluetooth", },
-+ {},
-+};
-+MODULE_DEVICE_TABLE(of, nokia_bluetooth_of_match);
-+#endif
-+
-+static struct serdev_device_driver nokia_bluetooth_serdev_driver = {
-+ .probe = nokia_bluetooth_serdev_probe,
-+ .remove = nokia_bluetooth_serdev_remove,
-+ .driver = {
-+ .name = "nokia-bluetooth",
-+ .pm = &nokia_bluetooth_pm_ops,
-+ .of_match_table = of_match_ptr(nokia_bluetooth_of_match),
-+ },
-+};
-+
-+module_serdev_device_driver(nokia_bluetooth_serdev_driver);
---
-2.12.2
-
-From 5593378d18f2487bdce87a687b4263c9626510cb Mon Sep 17 00:00:00 2001
-From: Rob Herring <robh@kernel.org>
-Date: Wed, 5 Apr 2017 12:10:13 -0500
-Subject: [PATCH 10/13] dt-bindings: net: Add TI WiLink shared transport
- binding
-
-Add serial slave device binding for the TI WiLink series of Bluetooth/FM/GPS
-devices.
-
-Signed-off-by: Rob Herring <robh@kernel.org>
-Cc: Mark Rutland <mark.rutland@arm.com>
-Cc: netdev@vger.kernel.org
-Cc: devicetree@vger.kernel.org
----
- .../devicetree/bindings/net/ti,wilink-st.txt | 35 ++++++++++++++++++++++
- 1 file changed, 35 insertions(+)
- create mode 100644 Documentation/devicetree/bindings/net/ti,wilink-st.txt
-
-diff --git a/Documentation/devicetree/bindings/net/ti,wilink-st.txt b/Documentation/devicetree/bindings/net/ti,wilink-st.txt
-new file mode 100644
-index 000000000000..cbad73a84ac4
---- /dev/null
-+++ b/Documentation/devicetree/bindings/net/ti,wilink-st.txt
-@@ -0,0 +1,35 @@
-+TI WiLink 7/8 (wl12xx/wl18xx) Shared Transport BT/FM/GPS devices
-+
-+TI WiLink devices have a UART interface for providing Bluetooth, FM radio,
-+and GPS over what's called "shared transport". The shared transport is
-+standard BT HCI protocol with additional channels for the other functions.
-+
-+These devices also have a separate WiFi interface as described in
-+wireless/ti,wlcore.txt.
-+
-+This bindings follows the UART slave device binding in
-+../serial/slave-device.txt.
-+
-+Required properties:
-+ - compatible: should be one of the following:
-+ "ti,wl1271-st"
-+ "ti,wl1273-st"
-+ "ti,wl1831-st"
-+ "ti,wl1835-st"
-+ "ti,wl1837-st"
-+
-+Optional properties:
-+ - enable-gpios : GPIO signal controlling enabling of BT. Active high.
-+ - vio-supply : Vio input supply (1.8V)
-+ - vbat-supply : Vbat input supply (2.9-4.8V)
-+
-+Example:
-+
-+&serial0 {
-+ compatible = "ns16550a";
-+ ...
-+ bluetooth {
-+ compatible = "ti,wl1835-st";
-+ enable-gpios = <&gpio1 7 GPIO_ACTIVE_HIGH>;
-+ };
-+};
---
-2.12.2
-
-From d22a4564d1b8e1eeb7c442171cedcc3ae809cfff Mon Sep 17 00:00:00 2001
-From: Rob Herring <robh@kernel.org>
-Date: Tue, 17 Jan 2017 09:58:10 -0600
-Subject: [PATCH 11/13] bluetooth: hci_uart: remove unused hci_uart_init_tty
-
-There are no users of hci_uart_init_tty, so remove it.
-
-Signed-off-by: Rob Herring <robh@kernel.org>
-Cc: Marcel Holtmann <marcel@holtmann.org>
-Cc: Gustavo Padovan <gustavo@padovan.org>
-Cc: Johan Hedberg <johan.hedberg@gmail.com>
-Cc: linux-bluetooth@vger.kernel.org
----
- drivers/bluetooth/hci_ldisc.c | 19 -------------------
- drivers/bluetooth/hci_uart.h | 1 -
- 2 files changed, 20 deletions(-)
-
-diff --git a/drivers/bluetooth/hci_ldisc.c b/drivers/bluetooth/hci_ldisc.c
-index 17bcbc13623f..cec4438ede01 100644
---- a/drivers/bluetooth/hci_ldisc.c
-+++ b/drivers/bluetooth/hci_ldisc.c
-@@ -319,25 +319,6 @@ void hci_uart_set_speeds(struct hci_uart *hu, unsigned int init_speed,
- hu->oper_speed = oper_speed;
- }
-
--void hci_uart_init_tty(struct hci_uart *hu)
--{
-- struct tty_struct *tty = hu->tty;
-- struct ktermios ktermios;
--
-- /* Bring the UART into a known 8 bits no parity hw fc state */
-- ktermios = tty->termios;
-- ktermios.c_iflag &= ~(IGNBRK | BRKINT | PARMRK | ISTRIP |
-- INLCR | IGNCR | ICRNL | IXON);
-- ktermios.c_oflag &= ~OPOST;
-- ktermios.c_lflag &= ~(ECHO | ECHONL | ICANON | ISIG | IEXTEN);
-- ktermios.c_cflag &= ~(CSIZE | PARENB);
-- ktermios.c_cflag |= CS8;
-- ktermios.c_cflag |= CRTSCTS;
--
-- /* tty_set_termios() return not checked as it is always 0 */
-- tty_set_termios(tty, &ktermios);
--}
--
- void hci_uart_set_baudrate(struct hci_uart *hu, unsigned int speed)
- {
- struct tty_struct *tty = hu->tty;
-diff --git a/drivers/bluetooth/hci_uart.h b/drivers/bluetooth/hci_uart.h
-index 1b41c661bbb8..2b05e557fad0 100644
---- a/drivers/bluetooth/hci_uart.h
-+++ b/drivers/bluetooth/hci_uart.h
-@@ -114,7 +114,6 @@ int hci_uart_register_device(struct hci_uart *hu, const struct hci_uart_proto *p
-
- int hci_uart_tx_wakeup(struct hci_uart *hu);
- int hci_uart_init_ready(struct hci_uart *hu);
--void hci_uart_init_tty(struct hci_uart *hu);
- void hci_uart_set_baudrate(struct hci_uart *hu, unsigned int speed);
- void hci_uart_set_flow_control(struct hci_uart *hu, bool enable);
- void hci_uart_set_speeds(struct hci_uart *hu, unsigned int init_speed,
---
-2.12.2
-
-From 4664fe8eb293288c1fba2ebc50ac50131f6125cf Mon Sep 17 00:00:00 2001
-From: Rob Herring <robh@kernel.org>
-Date: Wed, 18 Jan 2017 11:41:25 -0600
-Subject: [PATCH 12/13] bluetooth: hci_uart: add LL protocol serdev driver
- support
-
-Turns out that the LL protocol and the TI-ST are the same thing AFAICT.
-The TI-ST adds firmware loading, GPIO control, and shared access for
-NFC, FM radio, etc. For now, we're only implementing what is needed for
-BT. This mirrors other drivers like BCM and Intel, but uses the new
-serdev bus.
-
-The firmware loading is greatly simplified by using existing
-infrastructure to send commands. It may be a bit slower than the
-original code using synchronous functions, but the real bottleneck is
-likely doing firmware load at 115.2kbps.
-
-Signed-off-by: Rob Herring <robh@kernel.org>
-Cc: Marcel Holtmann <marcel@holtmann.org>
-Cc: Gustavo Padovan <gustavo@padovan.org>
-Cc: Johan Hedberg <johan.hedberg@gmail.com>
-Cc: linux-bluetooth@vger.kernel.org
----
- drivers/bluetooth/hci_ll.c | 261 ++++++++++++++++++++++++++++++++++++++++++++-
- 1 file changed, 260 insertions(+), 1 deletion(-)
-
-diff --git a/drivers/bluetooth/hci_ll.c b/drivers/bluetooth/hci_ll.c
-index 02692fe30279..9b2054f5502d 100644
---- a/drivers/bluetooth/hci_ll.c
-+++ b/drivers/bluetooth/hci_ll.c
-@@ -34,20 +34,23 @@
- #include <linux/sched.h>
- #include <linux/types.h>
- #include <linux/fcntl.h>
-+#include <linux/firmware.h>
- #include <linux/interrupt.h>
- #include <linux/ptrace.h>
- #include <linux/poll.h>
-
- #include <linux/slab.h>
--#include <linux/tty.h>
- #include <linux/errno.h>
- #include <linux/string.h>
- #include <linux/signal.h>
- #include <linux/ioctl.h>
-+#include <linux/serdev.h>
- #include <linux/skbuff.h>
-+#include <linux/ti_wilink_st.h>
-
- #include <net/bluetooth/bluetooth.h>
- #include <net/bluetooth/hci_core.h>
-+#include <linux/gpio/consumer.h>
-
- #include "hci_uart.h"
-
-@@ -76,6 +79,12 @@ struct hcill_cmd {
- u8 cmd;
- } __packed;
-
-+struct ll_device {
-+ struct hci_uart hu;
-+ struct serdev_device *serdev;
-+ struct gpio_desc *enable_gpio;
-+};
-+
- struct ll_struct {
- unsigned long rx_state;
- unsigned long rx_count;
-@@ -136,6 +145,9 @@ static int ll_open(struct hci_uart *hu)
-
- hu->priv = ll;
-
-+ if (hu->serdev)
-+ serdev_device_open(hu->serdev);
-+
- return 0;
- }
-
-@@ -164,6 +176,13 @@ static int ll_close(struct hci_uart *hu)
-
- kfree_skb(ll->rx_skb);
-
-+ if (hu->serdev) {
-+ struct ll_device *lldev = serdev_device_get_drvdata(hu->serdev);
-+ gpiod_set_value_cansleep(lldev->enable_gpio, 0);
-+
-+ serdev_device_close(hu->serdev);
-+ }
-+
- hu->priv = NULL;
-
- kfree(ll);
-@@ -505,9 +524,245 @@ static struct sk_buff *ll_dequeue(struct hci_uart *hu)
- return skb_dequeue(&ll->txq);
- }
-
-+#ifdef CONFIG_SERIAL_DEV_BUS
-+static int read_local_version(struct hci_dev *hdev)
-+{
-+ int err = 0;
-+ unsigned short version = 0;
-+ struct sk_buff *skb;
-+ struct hci_rp_read_local_version *ver;
-+
-+ skb = __hci_cmd_sync(hdev, HCI_OP_READ_LOCAL_VERSION, 0, NULL, HCI_INIT_TIMEOUT);
-+ if (IS_ERR(skb)) {
-+ bt_dev_err(hdev, "Reading TI version information failed (%ld)",
-+ PTR_ERR(skb));
-+ err = PTR_ERR(skb);
-+ goto out;
-+ }
-+ if (skb->len != sizeof(*ver)) {
-+ err = -EILSEQ;
-+ goto out;
-+ }
-+
-+ ver = (struct hci_rp_read_local_version *)skb->data;
-+ if (le16_to_cpu(ver->manufacturer) != 13) {
-+ err = -ENODEV;
-+ goto out;
-+ }
-+
-+ version = le16_to_cpu(ver->lmp_subver);
-+
-+out:
-+ if (err) bt_dev_err(hdev, "Failed to read TI version info: %d", err);
-+ kfree_skb(skb);
-+ return err ? err : version;
-+}
-+
-+/**
-+ * download_firmware -
-+ * internal function which parses through the .bts firmware
-+ * script file intreprets SEND, DELAY actions only as of now
-+ */
-+static int download_firmware(struct ll_device *lldev)
-+{
-+ unsigned short chip, min_ver, maj_ver;
-+ int version, err, len;
-+ unsigned char *ptr, *action_ptr;
-+ unsigned char bts_scr_name[40]; /* 40 char long bts scr name? */
-+ const struct firmware *fw;
-+ struct sk_buff *skb;
-+ struct hci_command *cmd;
-+
-+ version = read_local_version(lldev->hu.hdev);
-+ if (version < 0)
-+ return version;
-+
-+ chip = (version & 0x7C00) >> 10;
-+ min_ver = (version & 0x007F);
-+ maj_ver = (version & 0x0380) >> 7;
-+ if (version & 0x8000)
-+ maj_ver |= 0x0008;
-+
-+ snprintf(bts_scr_name, sizeof(bts_scr_name),
-+ "ti-connectivity/TIInit_%d.%d.%d.bts",
-+ chip, maj_ver, min_ver);
-+
-+ err = request_firmware(&fw, bts_scr_name, &lldev->serdev->dev);
-+ if (err || !fw->data || !fw->size) {
-+ bt_dev_err(lldev->hu.hdev, "request_firmware failed(errno %d) for %s",
-+ err, bts_scr_name);
-+ return -EINVAL;
-+ }
-+ ptr = (void *)fw->data;
-+ len = fw->size;
-+ /* bts_header to remove out magic number and
-+ * version
-+ */
-+ ptr += sizeof(struct bts_header);
-+ len -= sizeof(struct bts_header);
-+
-+ while (len > 0 && ptr) {
-+ bt_dev_dbg(lldev->hu.hdev, " action size %d, type %d ",
-+ ((struct bts_action *)ptr)->size,
-+ ((struct bts_action *)ptr)->type);
-+
-+ action_ptr = &(((struct bts_action *)ptr)->data[0]);
-+
-+ switch (((struct bts_action *)ptr)->type) {
-+ case ACTION_SEND_COMMAND: /* action send */
-+ bt_dev_dbg(lldev->hu.hdev, "S");
-+ cmd = (struct hci_command *)action_ptr;
-+ if (cmd->opcode == 0xff36) {
-+ /* ignore remote change
-+ * baud rate HCI VS command */
-+ bt_dev_warn(lldev->hu.hdev, "change remote baud rate command in firmware");
-+ break;
-+ }
-+ if (cmd->prefix != 1)
-+ bt_dev_dbg(lldev->hu.hdev, "command type %d\n", cmd->prefix);
-+
-+ skb = __hci_cmd_sync(lldev->hu.hdev, cmd->opcode, cmd->plen, &cmd->speed, HCI_INIT_TIMEOUT);
-+ if (IS_ERR(skb)) {
-+ bt_dev_err(lldev->hu.hdev, "send command failed\n");
-+ goto out_rel_fw;
-+ }
-+ kfree_skb(skb);
-+ break;
-+ case ACTION_WAIT_EVENT: /* wait */
-+ /* no need to wait as command was synchronous */
-+ bt_dev_dbg(lldev->hu.hdev, "W");
-+ break;
-+ case ACTION_DELAY: /* sleep */
-+ bt_dev_info(lldev->hu.hdev, "sleep command in scr");
-+ mdelay(((struct bts_action_delay *)action_ptr)->msec);
-+ break;
-+ }
-+ len -= (sizeof(struct bts_action) +
-+ ((struct bts_action *)ptr)->size);
-+ ptr += sizeof(struct bts_action) +
-+ ((struct bts_action *)ptr)->size;
-+ }
-+
-+out_rel_fw:
-+ /* fw download complete */
-+ release_firmware(fw);
-+ return err;
-+}
-+
-+static int ll_setup(struct hci_uart *hu)
-+{
-+ int err, retry = 3;
-+ struct ll_device *lldev;
-+ struct serdev_device *serdev = hu->serdev;
-+ u32 speed;
-+
-+ if (!serdev)
-+ return 0;
-+
-+ lldev = serdev_device_get_drvdata(serdev);
-+
-+ serdev_device_set_flow_control(serdev, true);
-+
-+ do {
-+ /* Configure BT_EN to HIGH state */
-+ gpiod_set_value_cansleep(lldev->enable_gpio, 0);
-+ msleep(5);
-+ gpiod_set_value_cansleep(lldev->enable_gpio, 1);
-+ msleep(100);
-+
-+ err = download_firmware(lldev);
-+ if (!err)
-+ break;
-+
-+ /* Toggle BT_EN and retry */
-+ bt_dev_err(hu->hdev, "download firmware failed, retrying...");
-+ } while (retry--);
-+
-+ if (err)
-+ return err;
-+
-+ /* Operational speed if any */
-+ if (hu->oper_speed)
-+ speed = hu->oper_speed;
-+ else if (hu->proto->oper_speed)
-+ speed = hu->proto->oper_speed;
-+ else
-+ speed = 0;
-+
-+ if (speed) {
-+ struct sk_buff *skb = __hci_cmd_sync(hu->hdev, 0xff36, sizeof(speed), &speed, HCI_INIT_TIMEOUT);
-+ if (!IS_ERR(skb)) {
-+ kfree_skb(skb);
-+ serdev_device_set_baudrate(serdev, speed);
-+ }
-+ }
-+
-+ return 0;
-+}
-+
-+static const struct hci_uart_proto llp;
-+
-+static int hci_ti_probe(struct serdev_device *serdev)
-+{
-+ struct hci_uart *hu;
-+ struct ll_device *lldev;
-+ u32 max_speed = 3000000;
-+
-+ lldev = devm_kzalloc(&serdev->dev, sizeof(struct ll_device), GFP_KERNEL);
-+ if (!lldev)
-+ return -ENOMEM;
-+ hu = &lldev->hu;
-+
-+ serdev_device_set_drvdata(serdev, lldev);
-+ lldev->serdev = hu->serdev = serdev;
-+
-+ lldev->enable_gpio = devm_gpiod_get_optional(&serdev->dev, "enable", GPIOD_OUT_LOW);
-+ if (IS_ERR(lldev->enable_gpio))
-+ return PTR_ERR(lldev->enable_gpio);
-+
-+ of_property_read_u32(serdev->dev.of_node, "max-speed", &max_speed);
-+ hci_uart_set_speeds(hu, 115200, max_speed);
-+
-+ return hci_uart_register_device(hu, &llp);
-+}
-+
-+static void hci_ti_remove(struct serdev_device *serdev)
-+{
-+ struct ll_device *lldev = serdev_device_get_drvdata(serdev);
-+ struct hci_uart *hu = &lldev->hu;
-+ struct hci_dev *hdev = hu->hdev;
-+
-+ cancel_work_sync(&hu->write_work);
-+
-+ hci_unregister_dev(hdev);
-+ hci_free_dev(hdev);
-+ hu->proto->close(hu);
-+}
-+
-+static const struct of_device_id hci_ti_of_match[] = {
-+ { .compatible = "ti,wl1831-st" },
-+ { .compatible = "ti,wl1835-st" },
-+ { .compatible = "ti,wl1837-st" },
-+ {},
-+};
-+MODULE_DEVICE_TABLE(of, hci_ti_of_match);
-+
-+static struct serdev_device_driver hci_ti_drv = {
-+ .driver = {
-+ .name = "hci-ti",
-+ .of_match_table = of_match_ptr(hci_ti_of_match),
-+ },
-+ .probe = hci_ti_probe,
-+ .remove = hci_ti_remove,
-+};
-+#else
-+#define ll_setup NULL
-+#endif
-+
- static const struct hci_uart_proto llp = {
- .id = HCI_UART_LL,
- .name = "LL",
-+ .setup = ll_setup,
- .open = ll_open,
- .close = ll_close,
- .recv = ll_recv,
-@@ -518,10 +773,14 @@ static const struct hci_uart_proto llp = {
-
- int __init ll_init(void)
- {
-+ serdev_device_driver_register(&hci_ti_drv);
-+
- return hci_uart_register_proto(&llp);
- }
-
- int __exit ll_deinit(void)
- {
-+ serdev_device_driver_unregister(&hci_ti_drv);
-+
- return hci_uart_unregister_proto(&llp);
- }
---
-2.12.2
-
-From 33bbcaa7b1a4639a5e149e725a674324e7487b17 Mon Sep 17 00:00:00 2001
-From: Rob Herring <robh@kernel.org>
-Date: Mon, 21 Nov 2016 15:21:56 -0600
-Subject: [PATCH 13/13] arm64: dts: hikey: add WL1835 Bluetooth device node
-
-This adds the serial slave device for the WL1835 Bluetooth interface.
-
-Signed-off-by: Rob Herring <robh@kernel.org>
-Cc: Wei Xu <xuwei5@hisilicon.com>
-Cc: Mark Rutland <mark.rutland@arm.com>
----
- arch/arm64/boot/dts/hisilicon/hi6220-hikey.dts | 5 +++++
- 1 file changed, 5 insertions(+)
-
-diff --git a/arch/arm64/boot/dts/hisilicon/hi6220-hikey.dts b/arch/arm64/boot/dts/hisilicon/hi6220-hikey.dts
-index dba3c131c62c..9b4ba7169210 100644
---- a/arch/arm64/boot/dts/hisilicon/hi6220-hikey.dts
-+++ b/arch/arm64/boot/dts/hisilicon/hi6220-hikey.dts
-@@ -98,6 +98,11 @@
- assigned-clocks = <&sys_ctrl HI6220_UART1_SRC>;
- assigned-clock-rates = <150000000>;
- status = "ok";
-+
-+ bluetooth {
-+ compatible = "ti,wl1835-st";
-+ enable-gpios = <&gpio1 7 GPIO_ACTIVE_HIGH>;
-+ };
- };
-
- uart2: uart@f7112000 {
---
-2.12.2
-