main/linux-postmarketos-qcom-msm8974: upgrade to 5.11.10 (MR 2015)

- Remove bam-dmux raw-ip related patches (already included in source)
- Depend on gmp-dev, mpc1-dev, mpfr-dev to build with GCC_PLUGINS support.
- Reduce package size (INSTALL_MOD_STRIP=1) from 119.6 MB to 21.5 MB
- Kernel config changes:
  - make interconnect module built-in
  - remove unused built-in DSI PHY drivers
This commit is contained in:
Luca Weiss 2021-03-27 16:27:58 +03:00 committed by Alexey Minnekhanov
parent 698a49058d
commit aca8e29d17
No known key found for this signature in database
GPG key ID: EBF5ECFFFEE34DED
9 changed files with 206 additions and 501 deletions

View file

@ -1,157 +0,0 @@
From 1cde3fcb0f1b0b9a6bdc96a1843db4d6cbbc3539 Mon Sep 17 00:00:00 2001
From: Minecrell <minecrell@minecrell.net>
Date: Thu, 15 Oct 2020 11:31:16 +0200
Subject: [PATCH 1/6] net: qualcomm: bam-dmux: Switch to Raw IP mode
---
drivers/net/ethernet/qualcomm/bam-dmux.c | 92 +++++++++++-------------
1 file changed, 43 insertions(+), 49 deletions(-)
diff --git a/drivers/net/ethernet/qualcomm/bam-dmux.c b/drivers/net/ethernet/qualcomm/bam-dmux.c
index c1346452c9d4..75b3f3932b4f 100644
--- a/drivers/net/ethernet/qualcomm/bam-dmux.c
+++ b/drivers/net/ethernet/qualcomm/bam-dmux.c
@@ -9,6 +9,7 @@
#include <linux/dma-mapping.h>
#include <linux/dmaengine.h>
#include <linux/etherdevice.h>
+#include <linux/if_arp.h>
#include <linux/interrupt.h>
#include <linux/module.h>
#include <linux/netdevice.h>
@@ -19,9 +20,11 @@
#include <linux/soc/qcom/smem_state.h>
#include <linux/spinlock.h>
#include <linux/workqueue.h>
+#include <net/pkt_sched.h>
#define BAM_DMUX_BUFFER_SIZE SZ_2K
#define BAM_DMUX_MAX_DATA_SIZE (BAM_DMUX_BUFFER_SIZE - sizeof(struct bam_dmux_hdr))
+#define BAM_DMUX_DEFAULT_MTU 2000
#define BAM_DMUX_NUM_SKB 32
#define BAM_DMUX_AUTOSUSPEND_DELAY 1000
@@ -442,25 +445,27 @@ static void bam_dmux_tx_wakeup_work(struct work_struct *work)
pm_runtime_put_autosuspend(dmux->dev);
}
-static const struct net_device_ops bam_dmux_ops_ether = {
- .ndo_open = bam_dmux_netdev_open,
- .ndo_stop = bam_dmux_netdev_stop,
- .ndo_start_xmit = bam_dmux_netdev_start_xmit,
- .ndo_set_mac_address = eth_mac_addr,
- .ndo_validate_addr = eth_validate_addr,
+static const struct net_device_ops bam_dmux_ops = {
+ .ndo_open = bam_dmux_netdev_open,
+ .ndo_stop = bam_dmux_netdev_stop,
+ .ndo_start_xmit = bam_dmux_netdev_start_xmit,
};
-static void bam_dmux_netdev_setup(struct net_device *netdev)
+static void bam_dmux_netdev_setup(struct net_device *dev)
{
- /* Hardcode ethernet mode for now */
- ether_setup(netdev);
- random_ether_addr(netdev->dev_addr);
- netdev->netdev_ops = &bam_dmux_ops_ether;
+ dev->netdev_ops = &bam_dmux_ops;
- netdev->needed_headroom = sizeof(struct bam_dmux_hdr);
- netdev->needed_tailroom = sizeof(u32); /* word-aligned */
- netdev->max_mtu = 2000;
- netdev->mtu = netdev->max_mtu;
+ dev->type = ARPHRD_RAWIP;
+ dev->mtu = BAM_DMUX_DEFAULT_MTU;
+ dev->max_mtu = BAM_DMUX_MAX_DATA_SIZE;
+ dev->needed_headroom = sizeof(struct bam_dmux_hdr);
+ dev->needed_tailroom = sizeof(u32); /* word-aligned */
+
+ /* This perm addr will be used as interface identifier by IPv6 */
+ dev->addr_assign_type = NET_ADDR_RANDOM;
+ eth_random_addr(dev->perm_addr);
+
+ dev->tx_queue_len = DEFAULT_TX_QUEUE_LEN;
}
static void bam_dmux_register_netdev_work(struct work_struct *work)
@@ -523,7 +528,7 @@ static bool bam_dmux_skb_dma_submit_rx(struct bam_dmux_skb_dma *skb_dma)
static bool bam_dmux_skb_dma_queue_rx(struct bam_dmux_skb_dma *skb_dma, gfp_t gfp)
{
- skb_dma->skb = __netdev_alloc_skb_ip_align(NULL, BAM_DMUX_BUFFER_SIZE, gfp);
+ skb_dma->skb = __netdev_alloc_skb(NULL, BAM_DMUX_BUFFER_SIZE, gfp);
if (!skb_dma->skb)
return false;
skb_put(skb_dma->skb, BAM_DMUX_BUFFER_SIZE);
@@ -532,38 +537,6 @@ static bool bam_dmux_skb_dma_queue_rx(struct bam_dmux_skb_dma *skb_dma, gfp_t gf
bam_dmux_skb_dma_submit_rx(skb_dma);
}
-/* FIXME: For some reason the modem send raw-ip packets even in ethernet mode.
- * The qmi_wwan driver mentions a similar problem due to a "firmware bug",
- * and uses code similar to the one below to generate an ethernet header
- * in case of such weird packets.
- */
-static __be16 bam_dmux_eth_type_trans(struct sk_buff *skb, struct net_device *dev)
-{
- __be16 protocol;
-
- /* Determine L3 protocol */
- switch (skb->data[0] & 0xf0) {
- case 0x40:
- protocol = htons(ETH_P_IP);
- break;
- case 0x60:
- protocol = htons(ETH_P_IPV6);
- break;
- default:
- /* Seems to be valid */
- return eth_type_trans(skb, dev);
- }
-
- /* Generate a dummy ethernet header */
- skb_push(skb, ETH_HLEN);
- skb_reset_mac_header(skb);
- eth_hdr(skb)->h_proto = protocol;
- eth_zero_addr(eth_hdr(skb)->h_source);
- memcpy(eth_hdr(skb)->h_dest, dev->dev_addr, ETH_ALEN);
-
- return eth_type_trans(skb, dev);
-}
-
static bool bam_dmux_cmd_data(struct bam_dmux_skb_dma *skb_dma)
{
struct bam_dmux *dmux = skb_dma->dmux;
@@ -587,7 +560,28 @@ static bool bam_dmux_cmd_data(struct bam_dmux_skb_dma *skb_dma)
skb_trim(skb, hdr->len);
skb->dev = netdev;
- skb->protocol = bam_dmux_eth_type_trans(skb, netdev);
+
+ /* There are several different configurations possible for the modem.
+ * - Ethernet / Raw-IP mode
+ * - Additional "QMI" QoS header
+ * - QMAP/rmnet MAP header (another muxing layer)
+ *
+ * Ethernet mode seems to be broken, Ethernet headers are only sent for
+ * DHCP replies, all other packets are Raw-IP. Therefore, only Raw-IP
+ * or QMAP mode are supported in this driver.
+ */
+ switch (skb->data[0] & 0xf0) {
+ case 0x40:
+ skb->protocol = htons(ETH_P_IP);
+ break;
+ case 0x60:
+ skb->protocol = htons(ETH_P_IPV6);
+ break;
+ default:
+ skb->protocol = htons(ETH_P_MAP);
+ break;
+ }
+
netif_rx_ni(skb);
if (bam_dmux_skb_dma_queue_rx(skb_dma, GFP_ATOMIC))
--
2.30.1

View file

@ -1,43 +0,0 @@
From 891503b7546ac4a5f3db5f20d26fe1bd709ae38c Mon Sep 17 00:00:00 2001
From: Minecrell <minecrell@minecrell.net>
Date: Mon, 19 Oct 2020 13:21:31 +0200
Subject: [PATCH 2/6] net: qualcomm: bam-dmux: Set parent device and device
type
---
drivers/net/ethernet/qualcomm/bam-dmux.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/drivers/net/ethernet/qualcomm/bam-dmux.c b/drivers/net/ethernet/qualcomm/bam-dmux.c
index 75b3f3932b4f..7bc02b20b643 100644
--- a/drivers/net/ethernet/qualcomm/bam-dmux.c
+++ b/drivers/net/ethernet/qualcomm/bam-dmux.c
@@ -451,11 +451,17 @@ static const struct net_device_ops bam_dmux_ops = {
.ndo_start_xmit = bam_dmux_netdev_start_xmit,
};
+static const struct device_type wwan_type = {
+ .name = "wwan",
+};
+
static void bam_dmux_netdev_setup(struct net_device *dev)
{
dev->netdev_ops = &bam_dmux_ops;
dev->type = ARPHRD_RAWIP;
+ SET_NETDEV_DEVTYPE(dev, &wwan_type);
+
dev->mtu = BAM_DMUX_DEFAULT_MTU;
dev->max_mtu = BAM_DMUX_MAX_DATA_SIZE;
dev->needed_headroom = sizeof(struct bam_dmux_hdr);
@@ -489,6 +495,7 @@ static void bam_dmux_register_netdev_work(struct work_struct *work)
if (!netdev)
return; /* -ENOMEM */
+ SET_NETDEV_DEV(netdev, dmux->dev);
bndev = netdev_priv(netdev);
bndev->dmux = dmux;
bndev->ch = ch;
--
2.30.1

View file

@ -1,27 +0,0 @@
From 27681f8d9c8ceb1c9f0e09c196d397f036f071c6 Mon Sep 17 00:00:00 2001
From: Minecrell <minecrell@minecrell.net>
Date: Sun, 25 Oct 2020 19:52:44 +0100
Subject: [PATCH 3/6] net: qualcomm: bam-dmux: Set netdev->dev_port to channel
ID
This allows reading the channel ID from userspace.
---
drivers/net/ethernet/qualcomm/bam-dmux.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/drivers/net/ethernet/qualcomm/bam-dmux.c b/drivers/net/ethernet/qualcomm/bam-dmux.c
index 7bc02b20b643..171af41eb10a 100644
--- a/drivers/net/ethernet/qualcomm/bam-dmux.c
+++ b/drivers/net/ethernet/qualcomm/bam-dmux.c
@@ -496,6 +496,8 @@ static void bam_dmux_register_netdev_work(struct work_struct *work)
return; /* -ENOMEM */
SET_NETDEV_DEV(netdev, dmux->dev);
+ netdev->dev_port = ch;
+
bndev = netdev_priv(netdev);
bndev->dmux = dmux;
bndev->ch = ch;
--
2.30.1

View file

@ -1,70 +0,0 @@
From b09965693f68b21abe33e99211218d21e99a5e17 Mon Sep 17 00:00:00 2001
From: Minecrell <minecrell@minecrell.net>
Date: Thu, 18 Feb 2021 11:44:28 +0100
Subject: [PATCH 4/6] net: qualcomm: bam-dmux: Always open/close channel with
network interface
Doesn't seem to cause issues and just seems cleaner...
---
drivers/net/ethernet/qualcomm/bam-dmux.c | 28 +++++-------------------
1 file changed, 6 insertions(+), 22 deletions(-)
diff --git a/drivers/net/ethernet/qualcomm/bam-dmux.c b/drivers/net/ethernet/qualcomm/bam-dmux.c
index 171af41eb10a..880e0ca14beb 100644
--- a/drivers/net/ethernet/qualcomm/bam-dmux.c
+++ b/drivers/net/ethernet/qualcomm/bam-dmux.c
@@ -90,7 +90,6 @@ struct bam_dmux {
struct bam_dmux_netdev {
struct bam_dmux *dmux;
u8 ch;
- bool open;
};
static void bam_dmux_pc_vote(struct bam_dmux *dmux, bool enable)
@@ -289,37 +288,22 @@ static int bam_dmux_send_cmd(struct bam_dmux_netdev *bndev, u8 cmd)
static int bam_dmux_netdev_open(struct net_device *netdev)
{
struct bam_dmux_netdev *bndev = netdev_priv(netdev);
- struct bam_dmux *dmux = bndev->dmux;
int ret;
- /* Need to resume before starting the queue */
- ret = pm_runtime_get_sync(dmux->dev);
- if (ret < 0) {
- pm_runtime_put_noidle(dmux->dev);
+ ret = bam_dmux_send_cmd(bndev, BAM_DMUX_HDR_CMD_OPEN);
+ if (ret)
return ret;
- }
-
- if (!bndev->open) {
- ret = bam_dmux_send_cmd(bndev, BAM_DMUX_HDR_CMD_OPEN);
- if (ret)
- goto err;
-
- bndev->open = true;
- } else {
- ret = 0;
- }
netif_start_queue(netdev);
-
-err:
- pm_runtime_mark_last_busy(dmux->dev);
- pm_runtime_put_autosuspend(dmux->dev);
- return ret;
+ return 0;
}
static int bam_dmux_netdev_stop(struct net_device *netdev)
{
+ struct bam_dmux_netdev *bndev = netdev_priv(netdev);
+
netif_stop_queue(netdev);
+ bam_dmux_send_cmd(bndev, BAM_DMUX_HDR_CMD_CLOSE);
return 0;
}
--
2.30.1

View file

@ -1,52 +0,0 @@
From 742b7d66ad440a5612c916fac83818915c0ab531 Mon Sep 17 00:00:00 2001
From: Minecrell <minecrell@minecrell.net>
Date: Thu, 18 Feb 2021 12:06:16 +0100
Subject: [PATCH 5/6] net: qualcomm: bam-dmux: Fixup default MTU
> 1500 probably doesn't make sense by default...
---
drivers/net/ethernet/qualcomm/bam-dmux.c | 7 ++-----
1 file changed, 2 insertions(+), 5 deletions(-)
diff --git a/drivers/net/ethernet/qualcomm/bam-dmux.c b/drivers/net/ethernet/qualcomm/bam-dmux.c
index 880e0ca14beb..33f4c4cf8557 100644
--- a/drivers/net/ethernet/qualcomm/bam-dmux.c
+++ b/drivers/net/ethernet/qualcomm/bam-dmux.c
@@ -8,7 +8,6 @@
#include <linux/bitops.h>
#include <linux/dma-mapping.h>
#include <linux/dmaengine.h>
-#include <linux/etherdevice.h>
#include <linux/if_arp.h>
#include <linux/interrupt.h>
#include <linux/module.h>
@@ -24,7 +23,6 @@
#define BAM_DMUX_BUFFER_SIZE SZ_2K
#define BAM_DMUX_MAX_DATA_SIZE (BAM_DMUX_BUFFER_SIZE - sizeof(struct bam_dmux_hdr))
-#define BAM_DMUX_DEFAULT_MTU 2000
#define BAM_DMUX_NUM_SKB 32
#define BAM_DMUX_AUTOSUSPEND_DELAY 1000
@@ -446,16 +444,15 @@ static void bam_dmux_netdev_setup(struct net_device *dev)
dev->type = ARPHRD_RAWIP;
SET_NETDEV_DEVTYPE(dev, &wwan_type);
- dev->mtu = BAM_DMUX_DEFAULT_MTU;
+ dev->mtu = ETH_DATA_LEN;
dev->max_mtu = BAM_DMUX_MAX_DATA_SIZE;
dev->needed_headroom = sizeof(struct bam_dmux_hdr);
dev->needed_tailroom = sizeof(u32); /* word-aligned */
+ dev->tx_queue_len = DEFAULT_TX_QUEUE_LEN;
/* This perm addr will be used as interface identifier by IPv6 */
dev->addr_assign_type = NET_ADDR_RANDOM;
eth_random_addr(dev->perm_addr);
-
- dev->tx_queue_len = DEFAULT_TX_QUEUE_LEN;
}
static void bam_dmux_register_netdev_work(struct work_struct *work)
--
2.30.1

View file

@ -1,25 +0,0 @@
From ba93068e49b89374de1286db907d403fe3b3fbfe Mon Sep 17 00:00:00 2001
From: Minecrell <minecrell@minecrell.net>
Date: Thu, 18 Feb 2021 12:17:41 +0100
Subject: [PATCH 6/6] net: qualcomm: bam-dmux: Set some additional flags
Those are also set by qmi_wwan and mhi_net, not sure about IFF_MULTICAST.
---
drivers/net/ethernet/qualcomm/bam-dmux.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/net/ethernet/qualcomm/bam-dmux.c b/drivers/net/ethernet/qualcomm/bam-dmux.c
index 33f4c4cf8557..749ae8d25d7f 100644
--- a/drivers/net/ethernet/qualcomm/bam-dmux.c
+++ b/drivers/net/ethernet/qualcomm/bam-dmux.c
@@ -443,6 +443,7 @@ static void bam_dmux_netdev_setup(struct net_device *dev)
dev->type = ARPHRD_RAWIP;
SET_NETDEV_DEVTYPE(dev, &wwan_type);
+ dev->flags = IFF_POINTOPOINT | IFF_NOARP;
dev->mtu = ETH_DATA_LEN;
dev->max_mtu = BAM_DMUX_MAX_DATA_SIZE;
--
2.30.1

View file

@ -1,29 +0,0 @@
From 19caaac9ad5e92b8c42d036ea6d7886d7849bad9 Mon Sep 17 00:00:00 2001
From: Minecrell <minecrell@minecrell.net>
Date: Sat, 20 Feb 2021 12:25:55 +0100
Subject: [PATCH] net: qualcomm: bam-dmux: Use netif_receive_skb(skb)
bam_dmux_rx_callback() is called in tasklet context, so we should use
netif_rx() instead of netif_rx_ni(). But actually we can apparently
even use netif_receive_skb(skb) in tasklet context. Not sure about
the exact difference... :D
---
drivers/net/ethernet/qualcomm/bam-dmux.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/ethernet/qualcomm/bam-dmux.c b/drivers/net/ethernet/qualcomm/bam-dmux.c
index 749ae8d25d7f..6eb094fe689c 100644
--- a/drivers/net/ethernet/qualcomm/bam-dmux.c
+++ b/drivers/net/ethernet/qualcomm/bam-dmux.c
@@ -573,7 +573,7 @@ static bool bam_dmux_cmd_data(struct bam_dmux_skb_dma *skb_dma)
break;
}
- netif_rx_ni(skb);
+ netif_receive_skb(skb);
if (bam_dmux_skb_dma_queue_rx(skb_dma, GFP_ATOMIC))
dma_async_issue_pending(dmux->rx);
--
2.30.1

View file

@ -3,9 +3,9 @@ _flavor=postmarketos-qcom-msm8974
_config="config-$_flavor.$CARCH"
pkgname=linux-$_flavor
pkgver=5.9.13
pkgrel=2
_commit="ad989a3e7324563b3a85e521e052fec2c6b56752"
pkgver=5.11.10
pkgrel=0
_commit="901cb33cc2ea167dbb1de7032815ea65fd49d81f"
pkgdesc="Kernel close to mainline with extra patches for Qualcomm MSM8974 devices"
arch="armv7"
_carch="arm"
@ -16,19 +16,15 @@ makedepends="
bison
findutils
flex
gmp-dev
installkernel
mpc1-dev
mpfr-dev
openssl-dev
perl
"
source="https://gitlab.com/postmarketOS/linux-postmarketos/-/archive/$_commit/linux-postmarketos-$_commit.tar.gz
config-$_flavor.armv7
0001-net-qualcomm-bam-dmux-Switch-to-Raw-IP-mode.patch
0002-net-qualcomm-bam-dmux-Set-parent-device-and-device-t.patch
0003-net-qualcomm-bam-dmux-Set-netdev-dev_port-to-channel.patch
0004-net-qualcomm-bam-dmux-Always-open-close-channel-with.patch
0005-net-qualcomm-bam-dmux-Fixup-default-MTU.patch
0006-net-qualcomm-bam-dmux-Set-some-additional-flags.patch
0007-net-qualcomm-bam-dmux-Use-netif_receive_skb-skb.patch
"
builddir="$srcdir/linux-postmarketos-$_commit"
@ -49,6 +45,7 @@ package() {
ARCH="$_carch" \
INSTALL_PATH="$pkgdir"/boot \
INSTALL_MOD_PATH="$pkgdir" \
INSTALL_MOD_STRIP=1 \
INSTALL_DTBS_PATH="$pkgdir"/usr/share/dtb
rm -f "$pkgdir"/lib/modules/*/build "$pkgdir"/lib/modules/*/source
@ -56,12 +53,5 @@ package() {
"$pkgdir/usr/share/kernel/$_flavor/kernel.release"
}
sha512sums="935b1949e659ba83a54430346c7e4a1c32cc51910e2300b89ed54e2d3da890b281cfea51eb12af633c1f6c94c599e95842b81c6db04fbb5b2dbded46d8d0180a linux-postmarketos-ad989a3e7324563b3a85e521e052fec2c6b56752.tar.gz
7a39434a698cd990416daa48ef642b8ed62a0814d79fe9796da34f0cfe61d22d4a8b7b6f74ad63be93c5a6918f5c6b435d7ae37bbdb389635dc7c7a0b9351526 config-postmarketos-qcom-msm8974.armv7
939309f98d4a2e6bc3982704670acb68eaad92c28e9130988f1bd3474ad5dc76dff3f69c2d90a0738c43c60ac279990da0ba61d295eafc78f49d7ab50715ce01 0001-net-qualcomm-bam-dmux-Switch-to-Raw-IP-mode.patch
e4083319e44400e7ac50daedf201a8a80b2cfc083a4ff32aafb7733b4a155493e277737c449a6a7ff8b72b8516b92b9828dd00ad74e2457238f2d1cd936ec58d 0002-net-qualcomm-bam-dmux-Set-parent-device-and-device-t.patch
6a0be72e5213d7407b0ec3be9a283c85cc8bb3afe511297b449f2ecd79308b291a9eb8031f9a880702d64a65ce9e5702cf9943b7f97b7f3f099b5da93ba3a35d 0003-net-qualcomm-bam-dmux-Set-netdev-dev_port-to-channel.patch
df549f886c67701d7dbea4de342d364e93b0af3f574a6e16baefb21105958a61770653cf4b70e35102927b215f1a7b4a31cc6b6a3cf97ce25009437de342331f 0004-net-qualcomm-bam-dmux-Always-open-close-channel-with.patch
bd6dc6ac91038c60574cd561f02962040d52f9be2b2031de29a6adfa09845bfac8dd7d428fa1625e584ed2691d8f2795683650492981675e593defbe114c199d 0005-net-qualcomm-bam-dmux-Fixup-default-MTU.patch
0ec9db7bda49aebbb31fb116ef0c4e2ed5957334405404a664b22c639fb0978bdfe66e6981a9e499d6936f3bcdea713a964eb0ebdcc002804cf69dcf7fe2c8d7 0006-net-qualcomm-bam-dmux-Set-some-additional-flags.patch
fa313af091abc4d5550fbde741935472d06e1f1203e25856fdaf1cee73b45edbece31b2b033cfcd21aaa3e74eca0d45fb3e5484eec2b6f52e6e131ebc949279d 0007-net-qualcomm-bam-dmux-Use-netif_receive_skb-skb.patch"
sha512sums="27393de29fb1e08867f6572194625453a220cc0fb2d884c73da7f12ebef86912bf96ba1cac881639e44b6b3da9d3cbd44951488b2e019f5b0d597b284588f39f linux-postmarketos-901cb33cc2ea167dbb1de7032815ea65fd49d81f.tar.gz
19846a0d7c0e51de89bdfd517acaebc94a1478f0e7e1ff8d7666e7d9cc5a0dc5d7edf09fb413aeb37448aabe80b5457c6c07ece9f825c9507110b1588e7ce5a2 config-postmarketos-qcom-msm8974.armv7"