From 38e689e5ab01666cf0756cbbf7892f0de22bb7fd Mon Sep 17 00:00:00 2001 From: Clayton Craft Date: Tue, 6 Apr 2021 09:44:09 -0700 Subject: [PATCH] linux-purism-librem5: upgrade to 5.11.11pureos1 (MR 2116) Upstream changelog: https://source.puri.sm/Librem5/linux-next/-/commit/6dcba4b588f9269989be91cfb321960f8254cacc The redpine interrupt handler patch has been dropped since it's now merged in Purism's tree. [ci:skip-build]: already built successfully in CI --- ...ean-up-loop-in-the-interrupt-handler.patch | 371 ------------------ device/main/linux-purism-librem5/APKBUILD | 10 +- .../config-purism-librem5.aarch64 | 15 +- 3 files changed, 12 insertions(+), 384 deletions(-) delete mode 100644 device/main/linux-purism-librem5/0003-Revert-redpine-Clean-up-loop-in-the-interrupt-handler.patch diff --git a/device/main/linux-purism-librem5/0003-Revert-redpine-Clean-up-loop-in-the-interrupt-handler.patch b/device/main/linux-purism-librem5/0003-Revert-redpine-Clean-up-loop-in-the-interrupt-handler.patch deleted file mode 100644 index 3553e4cd0..000000000 --- a/device/main/linux-purism-librem5/0003-Revert-redpine-Clean-up-loop-in-the-interrupt-handler.patch +++ /dev/null @@ -1,371 +0,0 @@ -From 9fcc84f60f496a70d5e0245c7f507d7f2dc5a8e0 Mon Sep 17 00:00:00 2001 -From: Sebastian Krzyszkowiak -Date: Fri, 19 Mar 2021 06:31:20 +0100 -Subject: [PATCH 1/2] Revert "redpine: Clean up loop in the interrupt handler" - -This reverts commit d0ce5dd74f882d903a28cf4000e0fc4416c75ec3. ---- - .../net/wireless/redpine/rsi_91x_sdio_ops.c | 123 +++++++++--------- - 1 file changed, 61 insertions(+), 62 deletions(-) - -diff --git a/drivers/net/wireless/redpine/rsi_91x_sdio_ops.c b/drivers/net/wireless/redpine/rsi_91x_sdio_ops.c -index 7170cb02cb8b..b8e42ef157bf 100644 ---- a/drivers/net/wireless/redpine/rsi_91x_sdio_ops.c -+++ b/drivers/net/wireless/redpine/rsi_91x_sdio_ops.c -@@ -333,74 +333,73 @@ static void rsi_rx_handler(struct rsi_hw *adapter) - __func__, isr_status, (1 << MSDU_PKT_PENDING), - (1 << FW_ASSERT_IND)); - -- if (isr_status & BIT(PKT_BUFF_AVAILABLE)) { -- status = rsi_sdio_check_buffer_status(adapter, 0); -- if (status < 0) -- redpine_dbg(ERR_ZONE, -- "%s: Failed to check buffer status\n", -- __func__); -- rsi_sdio_ack_intr(common->priv, -- (1 << PKT_BUFF_AVAILABLE)); -- rsi_set_event(&common->tx_thread.event); -- -- redpine_dbg(ISR_ZONE, -- "%s: Buffer full/available\n", -- __func__); -- dev->buff_status_updated = 1; -- -- isr_status &= ~BIT(PKT_BUFF_AVAILABLE); -- } -- -- if (isr_status & BIT(FW_ASSERT_IND)) { -- redpine_dbg(ERR_ZONE, -- "%s: ==> FIRMWARE Assert <==\n", -- __func__); -- status = rsi_sdio_read_register(common->priv, -- SDIO_FW_STATUS_REG, -- &fw_status); -- if (status) { -- redpine_dbg(ERR_ZONE, -- "%s: Failed to read f/w reg\n", -- __func__); -- } else { -- redpine_dbg(ERR_ZONE, -- "%s: Firmware Status is 0x%x\n", -- __func__, fw_status); -+ do { -+ RSI_GET_SDIO_INTERRUPT_TYPE(isr_status, isr_type); -+ -+ switch (isr_type) { -+ case BUFFER_AVAILABLE: -+ status = rsi_sdio_check_buffer_status(adapter, 0); -+ if (status < 0) -+ redpine_dbg(ERR_ZONE, -+ "%s: Failed to check buffer status\n", -+ __func__); - rsi_sdio_ack_intr(common->priv, -- (1 << FW_ASSERT_IND)); -- } -- -- common->fsm_state = FSM_CARD_NOT_READY; -+ (1 << PKT_BUFF_AVAILABLE)); -+ rsi_set_event(&common->tx_thread.event); - -- isr_status &= ~BIT(FW_ASSERT_IND); -- } -- -- if (isr_status & BIT(MSDU_PKT_PENDING)) { -- redpine_dbg(ISR_ZONE, "Pkt pending interrupt\n"); -- dev->rx_info.total_sdio_msdu_pending_intr++; -+ redpine_dbg(ISR_ZONE, -+ "%s: Buffer full/available\n", -+ __func__); -+ dev->buff_status_updated = 1; -+ break; - -- status = rsi_process_pkt(common); -- if (status) { -+ case FIRMWARE_ASSERT_IND: - redpine_dbg(ERR_ZONE, -- "%s: Failed to read pkt\n", -+ "%s: ==> FIRMWARE Assert <==\n", - __func__); -- mutex_unlock(&common->rx_lock); -- common->rx_in_prog = false; -- return; -+ status = rsi_sdio_read_register(common->priv, -+ SDIO_FW_STATUS_REG, -+ &fw_status); -+ if (status) { -+ redpine_dbg(ERR_ZONE, -+ "%s: Failed to read f/w reg\n", -+ __func__); -+ } else { -+ redpine_dbg(ERR_ZONE, -+ "%s: Firmware Status is 0x%x\n", -+ __func__, fw_status); -+ rsi_sdio_ack_intr(common->priv, -+ (1 << FW_ASSERT_IND)); -+ } -+ -+ common->fsm_state = FSM_CARD_NOT_READY; -+ break; -+ -+ case MSDU_PACKET_PENDING: -+ redpine_dbg(ISR_ZONE, "Pkt pending interrupt\n"); -+ dev->rx_info.total_sdio_msdu_pending_intr++; -+ -+ status = rsi_process_pkt(common); -+ if (status) { -+ redpine_dbg(ERR_ZONE, -+ "%s: Failed to read pkt\n", -+ __func__); -+ mutex_unlock(&common->rx_lock); -+ common->rx_in_prog = false; -+ return; -+ } -+ break; -+ default: -+ rsi_sdio_ack_intr(common->priv, isr_status); -+ dev->rx_info.total_sdio_unknown_intr++; -+ isr_status = 0; -+ redpine_dbg(ISR_ZONE, -+ "Unknown Interrupt %x\n", -+ isr_status); -+ break; - } -- -- isr_status &= ~BIT(MSDU_PKT_PENDING); -- } -- -- if (isr_status) { -- rsi_sdio_ack_intr(common->priv, isr_status); -- dev->rx_info.total_sdio_unknown_intr++; -- isr_status = 0; -- redpine_dbg(ISR_ZONE, -- "Unknown Interrupt %x\n", -- isr_status); -- } -- -+ isr_status ^= BIT(isr_type - 1); -+ } while (isr_status); - mutex_unlock(&common->rx_lock); - } while (1); - common->rx_in_prog = false; --- -GitLab - - -From 11085503196282fb799a82526d87c0286859f18d Mon Sep 17 00:00:00 2001 -From: Sebastian Krzyszkowiak -Date: Fri, 19 Mar 2021 06:31:26 +0100 -Subject: [PATCH 2/2] Revert "redpine: Move card interrupt handling to RX - thread" - -This reverts commit 73e357c5a9cf52d300941d286d42bd8d61fd7847. ---- - drivers/net/wireless/redpine/rsi_91x_sdio.c | 7 +- - .../net/wireless/redpine/rsi_91x_sdio_ops.c | 76 +++++++++++++++---- - drivers/net/wireless/redpine/rsi_sdio.h | 9 ++- - 3 files changed, 76 insertions(+), 16 deletions(-) - -diff --git a/drivers/net/wireless/redpine/rsi_91x_sdio.c b/drivers/net/wireless/redpine/rsi_91x_sdio.c -index dc6559bb2462..827a5c47654b 100644 ---- a/drivers/net/wireless/redpine/rsi_91x_sdio.c -+++ b/drivers/net/wireless/redpine/rsi_91x_sdio.c -@@ -177,7 +177,9 @@ static void rsi_handle_interrupt(struct sdio_func *function) - - if (adapter->priv->fsm_state == FSM_FW_NOT_LOADED) - return; -- rsi_set_event(&dev->rx_thread.event); -+ dev->sdio_irq_task = current; -+ rsi_interrupt_handler(adapter); -+ dev->sdio_irq_task = NULL; - } - - static void rsi_gspi_init(struct rsi_hw *adapter) -@@ -1191,6 +1193,7 @@ static int rsi_init_sdio_interface(struct rsi_hw *adapter, - sdio_release_host(pfunction); - - adapter->determine_event_timeout = rsi_sdio_determine_event_timeout; -+ adapter->process_isr_hci = rsi_interrupt_handler; - adapter->check_intr_status_reg = rsi_read_intr_status_reg; - - #ifdef CONFIG_REDPINE_DEBUGFS -@@ -1292,6 +1295,8 @@ static int rsi_probe(struct sdio_func *pfunction, - redpine_dbg(ERR_ZONE, "%s: Unable to init rx thrd\n", __func__); - goto fail_kill_thread; - } -+ skb_queue_head_init(&sdev->rx_q.head); -+ sdev->rx_q.num_rx_pkts = 0; - - /*Receive buffer for handling RX interrupts in case of memory full*/ - sdev->temp_rcv_buf = kzalloc((RCV_BUFF_LEN *4), GFP_KERNEL); -diff --git a/drivers/net/wireless/redpine/rsi_91x_sdio_ops.c b/drivers/net/wireless/redpine/rsi_91x_sdio_ops.c -index b8e42ef157bf..f67b9f66f879 100644 ---- a/drivers/net/wireless/redpine/rsi_91x_sdio_ops.c -+++ b/drivers/net/wireless/redpine/rsi_91x_sdio_ops.c -@@ -74,26 +74,49 @@ int rsi_sdio_master_access_msword(struct rsi_hw *adapter, - return status; - } - --static void rsi_rx_handler(struct rsi_hw *adapter); -- - void rsi_sdio_rx_thread(struct rsi_common *common) - { - struct rsi_hw *adapter = common->priv; - struct rsi_91x_sdiodev *sdev = adapter->rsi_dev; -+ struct sk_buff *skb; - int status; -+ bool done = false; - - do { -- status = rsi_wait_event(&sdev->rx_thread.event, -+ status = rsi_wait_event(&sdev->rx_thread.event, - EVENT_WAIT_FOREVER); - if (status < 0) - break; - -- rsi_reset_event(&sdev->rx_thread.event); -- rsi_rx_handler(adapter); -+ if (atomic_read(&sdev->rx_thread.thread_done)) -+ break; - -- } while (!atomic_read(&sdev->rx_thread.thread_done)); -+ while (true) { -+ skb = skb_dequeue(&sdev->rx_q.head); -+ if (!skb) -+ break; -+ status = redpine_read_pkt(common, skb->data, skb->len); -+ if (status) { -+ redpine_dbg(ERR_ZONE, "Failed to read the packet\n"); -+ dev_kfree_skb(skb); -+ return; -+ } -+ dev_kfree_skb(skb); -+ if (sdev->rx_q.num_rx_pkts > 0) -+ sdev->rx_q.num_rx_pkts--; -+ -+ if (atomic_read(&sdev->rx_thread.thread_done)) { -+ done = true; -+ break; -+ } -+ } -+ rsi_reset_event(&sdev->rx_thread.event); -+ if (done) -+ break; -+ } while (1); - - redpine_dbg(INFO_ZONE, "%s: Terminated SDIO RX thread\n", __func__); -+ skb_queue_purge(&sdev->rx_q.head); - atomic_inc(&sdev->rx_thread.thread_done); - complete_and_exit(&sdev->rx_thread.completion, 0); - } -@@ -115,6 +138,7 @@ static int rsi_process_pkt(struct rsi_common *common) - int status = 0; - u8 value = 0; - u8 protocol = 0, unaggr_pkt = 0; -+ struct sk_buff *skb; - - - #define COEX_PKT 0 -@@ -155,18 +179,41 @@ static int rsi_process_pkt(struct rsi_common *common) - unaggr_pkt = 1; - - rcv_pkt_len = (num_blks * 256); -+ if (dev->rx_q.num_rx_pkts >= RSI_SDIO_MAX_RX_PKTS) -+ { -+ redpine_dbg(ISR_ZONE, "%s,%d: Reached MAX RX_Q size," -+ "dropping the packet\n",__func__,__LINE__); -+ goto DROP_PKT; -+ } -+ -+ skb = dev_alloc_skb(rcv_pkt_len); -+ -+ if (!skb) -+ { -+ redpine_dbg(ERR_ZONE, "%s,%d: Failed to allocate rx packet buffer," -+ "dropping packet\n",__func__,__LINE__); -+ goto DROP_PKT; -+ } - -- status = rsi_sdio_host_intf_read_pkt(adapter, dev->pktbuffer, rcv_pkt_len); -+ skb_put(skb, rcv_pkt_len); -+ status = rsi_sdio_host_intf_read_pkt(adapter, skb->data, skb->len); - if (status) { - redpine_dbg(ERR_ZONE, "%s,%d: Failed to read packet from card\n", - __func__,__LINE__); -+ dev_kfree_skb(skb); - return status; - } -- status = redpine_read_pkt(common, dev->pktbuffer, rcv_pkt_len); -- if (status) { -- redpine_dbg(ERR_ZONE, "Failed to read the packet\n"); -- return status; -- } -+ skb_queue_tail(&dev->rx_q.head, skb); -+ dev->rx_q.num_rx_pkts++; -+ rsi_set_event(&dev->rx_thread.event); -+ return 0; -+DROP_PKT: -+ status = rsi_sdio_host_intf_read_pkt(adapter, dev->temp_rcv_buf, rcv_pkt_len); -+ if (status) -+ redpine_dbg(ERR_ZONE, "%s,%d: Failed to read packet from card\n", -+ __func__,__LINE__); -+ -+ rsi_set_event(&dev->rx_thread.event); - return 0; - } - -@@ -273,17 +320,18 @@ int rsi_read_intr_status_reg(struct rsi_hw *adapter) - } - - /** -- * rsi_rx_handler() - This function read and process SDIO interrupts. -+ * rsi_interrupt_handler() - This function read and process SDIO interrupts. - * @adapter: Pointer to the adapter structure. - * - * Return: None. - */ --static void rsi_rx_handler(struct rsi_hw *adapter) -+void rsi_interrupt_handler(struct rsi_hw *adapter) - { - struct rsi_common *common = adapter->priv; - struct rsi_91x_sdiodev *dev = - (struct rsi_91x_sdiodev *)adapter->rsi_dev; - int status; -+ enum sdio_interrupt_type isr_type; - u8 isr_status = 0; - u8 fw_status = 0; - -diff --git a/drivers/net/wireless/redpine/rsi_sdio.h b/drivers/net/wireless/redpine/rsi_sdio.h -index 26ea697f91e4..bc22f75184fb 100644 ---- a/drivers/net/wireless/redpine/rsi_sdio.h -+++ b/drivers/net/wireless/redpine/rsi_sdio.h -@@ -133,6 +133,12 @@ struct receive_info { - u32 buf_available_counter; - }; - -+#define RSI_SDIO_MAX_RX_PKTS 100 -+struct rsi_sdio_rx_q { -+ u8 num_rx_pkts; -+ struct sk_buff_head head; -+}; -+ - struct rsi_91x_sdiodev { - struct sdio_func *pfunction; - struct task_struct *sdio_irq_task; -@@ -145,12 +151,13 @@ struct rsi_91x_sdiodev { - u32 tx_blk_size; - u8 write_fail; - u8 buff_status_updated; -+ struct rsi_sdio_rx_q rx_q; - struct rsi_thread rx_thread; - u8 *temp_rcv_buf; -- u8 pktbuffer[8192] __aligned(4); - }; - - void redpine_gpio_init(struct rsi_common *common); -+void rsi_interrupt_handler(struct rsi_hw *adapter); - int rsi_init_sdio_slave_regs(struct rsi_hw *adapter); - int rsi_sdio_device_init(struct rsi_common *common); - int rsi_sdio_read_register(struct rsi_hw *adapter, u32 addr, u8 *data); --- -GitLab - diff --git a/device/main/linux-purism-librem5/APKBUILD b/device/main/linux-purism-librem5/APKBUILD index da42d8815..3e03c9489 100644 --- a/device/main/linux-purism-librem5/APKBUILD +++ b/device/main/linux-purism-librem5/APKBUILD @@ -2,8 +2,8 @@ # Maintainer: Clayton Craft # Co-Maintainer: Bhushan Shah pkgname=linux-purism-librem5 -pkgver=5.11.6 -pkgrel=1 +pkgver=5.11.11 +pkgrel=0 _purismrel=1 # . _purismver=${pkgver}pureos$_purismrel @@ -37,7 +37,6 @@ source=" 8f11380ec32912370b8ae9134a0387a6f18862f7.patch 0001-Revert-arm64-dts-librem5-Drop-separte-DP-device-tree.patch 0002-bq25890_charger-enter-ship-mode-on-power-off.patch - 0003-Revert-redpine-Clean-up-loop-in-the-interrupt-handler.patch $_config " builddir="$srcdir/$_repository-pureos-$_purismver" @@ -76,9 +75,8 @@ dev() { ARCH="$_carch" \ INSTALL_HDR_PATH="$subpkgdir"/usr } -sha512sums="c79ca90f761cab9dd2806c91da2891a78f64c2a7c060a2dc2bd580235c991832f516ca8b23bf01d05d635f53a856aec9d7417baf611096599a7940aaea8c902a linux-purism-librem5-5.11.6pureos1.tar.gz +sha512sums="801e626e92e3d48da033f3c6bf3f8ce98be14d51a1487d5fcd046cc0fb1a64d00bff121e5441b617af998490e8132d24dfccbe99c0bc4f1a0a19bfd61f91937d linux-purism-librem5-5.11.11pureos1.tar.gz 9870bff4b187188b519b23264c2634ee4232011fed6d2f66a7b4971db354ac3dffa0e1552bd0dc953c66ec622e18ce8899fdbcfba94f60867fc5004d6da96753 8f11380ec32912370b8ae9134a0387a6f18862f7.patch 5baae99010bde62e253fdd56f21ba096c217ba2ab9c367c80b34bc0f445a79a8fb8b5d14682f71ad6061d73c81fc16a608f4be037d792978dbbaf74267844260 0001-Revert-arm64-dts-librem5-Drop-separte-DP-device-tree.patch 1a12f74895b0fc710792e3881f23754a8eb92d25b11a2751db007a1b08f72729043d1e824096c97dc795b8e33300274887b428997ddaacf4b61f52ef3bd78ce5 0002-bq25890_charger-enter-ship-mode-on-power-off.patch -00286a7ea3d3167150eca1025f271bb76e05d8a47c481879b1322ec9e88250c365b1b0ddcc8140ccc9b8f6138ffec843f184645c0c7d4ff11f75c988f5c4945c 0003-Revert-redpine-Clean-up-loop-in-the-interrupt-handler.patch -71d2dd80757556ed450f4a8576986ef011c480d9c15234bb178a276f8b4b0b14e71a10c406d961ca166d5c4032a4c920804877b726aead0872d3debc0f6df9b2 config-purism-librem5.aarch64" +45c10ccb08ad25591019f091f48b1b742ed512628ac86f6c1d462da3623314000b88022fc13c99f7e211257d2ec60e53f61a53862ffd4e763bc2ac9cd51ea875 config-purism-librem5.aarch64" diff --git a/device/main/linux-purism-librem5/config-purism-librem5.aarch64 b/device/main/linux-purism-librem5/config-purism-librem5.aarch64 index fc45d167d..fde80c693 100644 --- a/device/main/linux-purism-librem5/config-purism-librem5.aarch64 +++ b/device/main/linux-purism-librem5/config-purism-librem5.aarch64 @@ -1,8 +1,8 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/arm64 5.11.6 Kernel Configuration +# Linux/arm64 5.11.11 Kernel Configuration # -CONFIG_CC_VERSION_TEXT="aarch64-alpine-linux-musl-gcc (Alpine 10.2.1_git20210318) 10.2.1 20210318" +CONFIG_CC_VERSION_TEXT="aarch64-alpine-linux-musl-gcc (Alpine 10.2.1_git20210328) 10.2.1 20210328" CONFIG_CC_IS_GCC=y CONFIG_GCC_VERSION=100201 CONFIG_LD_VERSION=235020000 @@ -1394,6 +1394,7 @@ CONFIG_BT_LEDS=y # CONFIG_BT_MSFTEXT is not set CONFIG_BT_DEBUGFS=y # CONFIG_BT_SELFTEST is not set +# CONFIG_BT_FEATURE_DEBUG is not set # # Bluetooth device drivers @@ -1495,7 +1496,6 @@ CONFIG_PCIEASPM_DEFAULT=y CONFIG_PCIE_PME=y # CONFIG_PCIE_DPC is not set # CONFIG_PCIE_PTM is not set -# CONFIG_PCIE_BW is not set CONFIG_PCI_MSI=y CONFIG_PCI_MSI_IRQ_DOMAIN=y CONFIG_PCI_MSI_ARCH_FALLBACKS=y @@ -5999,7 +5999,8 @@ CONFIG_VFAT_FS=y CONFIG_FAT_DEFAULT_CODEPAGE=437 CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" # CONFIG_FAT_DEFAULT_UTF8 is not set -# CONFIG_EXFAT_FS is not set +CONFIG_EXFAT_FS=m +CONFIG_EXFAT_DEFAULT_IOCHARSET="utf8" # CONFIG_NTFS_FS is not set # end of DOS/FAT/EXFAT/NT Filesystems @@ -6073,7 +6074,7 @@ CONFIG_NFS_V4_1=y CONFIG_NFS_V4_2=y CONFIG_PNFS_FILE_LAYOUT=y CONFIG_PNFS_BLOCK=y -CONFIG_PNFS_FLEXFILE_LAYOUT=m +CONFIG_PNFS_FLEXFILE_LAYOUT=y CONFIG_NFS_V4_1_IMPLEMENTATION_ID_DOMAIN="kernel.org" # CONFIG_NFS_V4_1_MIGRATION is not set CONFIG_NFS_V4_SECURITY_LABEL=y @@ -6587,8 +6588,8 @@ CONFIG_CONSOLE_LOGLEVEL_DEFAULT=7 CONFIG_CONSOLE_LOGLEVEL_QUIET=4 CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4 # CONFIG_BOOT_PRINTK_DELAY is not set -CONFIG_DYNAMIC_DEBUG=y -CONFIG_DYNAMIC_DEBUG_CORE=y +# CONFIG_DYNAMIC_DEBUG is not set +# CONFIG_DYNAMIC_DEBUG_CORE is not set CONFIG_SYMBOLIC_ERRNAME=y CONFIG_DEBUG_BUGVERBOSE=y # end of printk and dmesg options