From c528f49c023bad88f68a601732760ccfd2379e5c Mon Sep 17 00:00:00 2001 From: Justin M. Forbes Date: May 03 2017 17:50:25 +0000 Subject: Linux v4.11-4395-g89c9fea --- diff --git a/AllWinner-net-emac.patch b/AllWinner-net-emac.patch index ebe9a3c..fbe66a1 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 -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 , - 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 +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 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 -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 , - 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 +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 --- 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 -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 , - 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 +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 +Acked-by: Rob Herring --- .../devicetree/bindings/net/dwmac-sun8i.txt | 77 ++++++++++++++++++++++ 1 file changed, 77 insertions(+) @@ -138,7 +129,7 @@ Signed-off-by: Corentin Labbe 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 -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 , - 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 +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 --- @@ -247,7 +240,7 @@ Signed-off-by: Corentin Labbe 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 -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 , - 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 +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 --- 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 -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 , - 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 +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 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 -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 , - 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 +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 --- - 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 -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 , - linux-arm-kernel@lists.infradead.org -Date: Tue, 14 Mar 2017 15:18:44 +0100 - -From: LABBE Corentin - -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 ---- - 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 = <®_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 -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 , - linux-arm-kernel@lists.infradead.org -Date: Tue, 14 Mar 2017 15:18:45 +0100 - -From: LABBE Corentin + 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 +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 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 -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 , - 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 +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 --- - 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 = <®_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 -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 , - 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 +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 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 -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 , - 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 +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 --- - 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 = <®_usb3_vbus>; - }; -+ -+&mdio { -+ ext_rgmii_phy: ethernet-phy@1 { -+ reg = <0>; -+ }; -+}; -+ +&emac { -+ pinctrl-names = "default"; -+ pinctrl-0 = <&emac_rgmii_pins>; -+ phy-supply = <®_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 -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 , - 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 +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 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 -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 , - 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 +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 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 -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 , - 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 +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 --- - 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 -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 , - 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 +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 --- - 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 -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 , - 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 +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 --- - 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 -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 , - 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 +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 --- - 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 +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 +Date: Mon, 1 May 2017 14:45:18 +0200 + +Enable the dwmac-sun8i driver in the sunxi default configuration + +Signed-off-by: Corentin Labbe +--- + 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 +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 +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 +--- + 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 +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 +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 +--- + 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 0000000..a775c67 --- /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 0000000..9a21b3b --- /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 0000000..3a388b9 --- /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 0000000..a6e002c --- /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 0000000..e6d3a0d --- /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 0000000..7b8010d --- /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 0000000..c239c70 --- /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 0000000..d4a2158 --- /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 0000000..e919384 --- /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 0000000..d78d82d --- /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 0000000..1c1de4f --- /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 0000000..7ced7b0 --- /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 0000000..08b25de --- /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 0000000..722095c --- /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 0000000..7c738ff --- /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 0000000..d7f1987 --- /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 0000000..a4c53d2 --- /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 0000000..e7ebb61 --- /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 0000000..3aa9989 --- /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 0000000..b4cec4c --- /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 0000000..31215b5 --- /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 0000000..82594c4 --- /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 0000000..f65af3d --- /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 0000000..d5226e1 --- /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 0000000..8c4640a --- /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 0000000..7d5cbcd --- /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 0000000..f60ff08 --- /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 0000000..eb0464d --- /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 0000000..a3acefe --- /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 0000000..51658fe --- /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 0000000..7108db8 --- /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 0000000..6ace7a1 --- /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 0000000..67ac6ba --- /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 0000000..7dd58df --- /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 0000000..15f7493 --- /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 d9591b4..0000000 --- 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 -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 , - 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 - -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 -Signed-off-by: Gerd Hoffmann -Acked-by: Rob Herring ---- - .../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 -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 , - 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 - -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 -Signed-off-by: Stefan Wahren -Signed-off-by: Gerd Hoffmann ---- - 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 -+ * 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 . -+ */ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include -+#include -+#include -+ -+#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 -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 , - 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 -Acked-by: Eric Anholt -Acked-by: Stefan Wahren ---- - 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 -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 , - 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 ---- - 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 -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 , - 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 ---- - 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 -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 , - 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 -Acked-by: Eric Anholt ---- - 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 -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 , - 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 -Acked-by: Eric Anholt ---- - 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 -X-Patchwork-Id: 9644591 -Message-Id: <1490447820-751-1-git-send-email-stefan.wahren@i2se.com> -To: Ulf Hansson , Eric Anholt , - Gerd Hoffmann -Cc: Jaehoon Chung , - Dan Carpenter , - linux-rpi-kernel@lists.infradead.org, linux-mmc@vger.kernel.org, - Stefan Wahren -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 -Signed-off-by: Stefan Wahren ---- - 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 6051de6..f40c512 100644 --- a/gitrev +++ b/gitrev @@ -1 +1 @@ -d3b5d35290d729a2518af00feca867385a1b08fa +89c9fea3c8034cdb2fd745f551cde0b507fd6893 diff --git a/kernel-aarch64-debug.config b/kernel-aarch64-debug.config index 4af36ab..b67337f 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 530a9ea..86df52c 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 9f6c2b2..d9eac6a 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 c7e2758..69cb8c8 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 95b20a0..b030caf 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 48acb52..77c7e71 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 84e4291..a2c11e3 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 b04dcb3..ac61b28 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 0bdbea6..3cb3328 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 7d4d6a3..05d9f82 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 4e56260..a2360db 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 d7646f0..b0170af 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 ce93a6c..16d1b00 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 ba1dd43..f2fccc5 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 93fca98..4650bf7 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 b6a559a..d8b8c47 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 072aef0..5846baf 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 e62a6d4..6aee60b 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 b7d5159..1f288c7 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 91a761a..07ba0e7 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 b33b48c..3cffcc1 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 - 4.12.0-0.rc0.git2.1 +- Linux v4.11-4395-g89c9fea + * Tue May 02 2017 Justin M. Forbes - 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 e6f5fa6..0000000 --- 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 -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 ---- - 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 0d4d8ae..8489c6a 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 288eb7c..0000000 --- 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 -X-Patchwork-Id: 9278297 -Message-Id: <1471058078-5579-2-git-send-email-sre@kernel.org> -To: Sebastian Reichel , Tony Lindgren , - Rob Herring , Mark Rutland , - Marcel Holtmann , - Greg Kroah-Hartman , - Jiri Slaby -Cc: Ville Tervo , - =?UTF-8?q?Filip=20Matijevi=C4=87?= , - Aaro Koskinen , Pavel Machek , - =?UTF-8?q?Pali=20Roh=C3=A1r?= , - 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 - -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 -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 -Acked-by: Pavel Machek -Signed-off-by: Sebastian Reichel -Signed-off-by: Rob Herring ---- - 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 - #include - #include -+#include - - #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 -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 -Acked-by: Rob Herring -Signed-off-by: Sebastian Reichel -Signed-off-by: Rob Herring ---- - 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 - #include -+#include - - 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 -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 -Signed-off-by: Sebastian Reichel -Signed-off-by: Rob Herring ---- - 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 - #include - #include -+#include - - 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 -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 -Signed-off-by: Sebastian Reichel -Signed-off-by: Rob Herring ---- - 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 -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 -Cc: Marcel Holtmann -Cc: Gustavo Padovan -Cc: Johan Hedberg -Cc: linux-bluetooth@vger.kernel.org -Acked-by: Pavel Machek -[Fix style issues reported by Pavel] -Signed-off-by: Sebastian Reichel -Signed-off-by: Rob Herring ---- - 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 -+ * -+ * Based on hci_ldisc.c: -+ * -+ * Copyright (C) 2000-2001 Qualcomm Incorporated -+ * Copyright (C) 2002-2003 Maxim Krasnyansky -+ * Copyright (C) 2004-2005 Marcel Holtmann -+ * -+ * 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 -+#include -+#include -+#include -+ -+#include -+#include -+ -+#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 -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 -Signed-off-by: Sebastian Reichel -Signed-off-by: Rob Herring ---- - 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 -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 -Signed-off-by: Rob Herring ---- - 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 -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 -Signed-off-by: Sebastian Reichel - -Changes since PATCHv1: - * change compatible strings - * mention active high/low state for GPIOs -Signed-off-by: Rob Herring ---- - .../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 -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 -Signed-off-by: Rob Herring ---- - 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 -+ * Copyright (C) 2015-2017 Sebastian Reichel -+ * -+ * 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 -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#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 -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 -Cc: Mark Rutland -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 -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 -Cc: Marcel Holtmann -Cc: Gustavo Padovan -Cc: Johan Hedberg -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 -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 -Cc: Marcel Holtmann -Cc: Gustavo Padovan -Cc: Johan Hedberg -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 - #include - #include -+#include - #include - #include - #include - - #include --#include - #include - #include - #include - #include -+#include - #include -+#include - - #include - #include -+#include - - #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 -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 -Cc: Wei Xu -Cc: Mark Rutland ---- - 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 -