From 4612a15fb2d954a624b6d35d86b03264d4ee62f4 Mon Sep 17 00:00:00 2001 From: Sven-Ola Tuecke Date: Fri, 23 Jan 2026 20:55:14 +0100 Subject: [PATCH] Revert "Spacemit: temporarly revert kthread removal to fix HDMI audio" This reverts commit 99ad08839eed42d647e716a3ed090ea318d01d2e. --- ...-avoid-creating-busy-looping-mailbox.patch | 131 ------------------ 1 file changed, 131 deletions(-) delete mode 100644 patch/kernel/archive/spacemit-6.18/900-Revert-k1x_rproc-avoid-creating-busy-looping-mailbox.patch diff --git a/patch/kernel/archive/spacemit-6.18/900-Revert-k1x_rproc-avoid-creating-busy-looping-mailbox.patch b/patch/kernel/archive/spacemit-6.18/900-Revert-k1x_rproc-avoid-creating-busy-looping-mailbox.patch deleted file mode 100644 index 4fe816acd5..0000000000 --- a/patch/kernel/archive/spacemit-6.18/900-Revert-k1x_rproc-avoid-creating-busy-looping-mailbox.patch +++ /dev/null @@ -1,131 +0,0 @@ -From dc256ce61874b4b90b9417500abb3bbe28c0698d Mon Sep 17 00:00:00 2001 -From: Sven-Ola Tuecke -Date: Fri, 23 Jan 2026 17:30:17 +0100 -Subject: [PATCH] Revert "k1x_rproc: avoid creating busy looping mailbox - threads" - -This reverts commit 57803086cdfa1df3b4fd5f66889a1f3649b2e796. ---- - drivers/remoteproc/k1x-rproc.c | 51 +++++++++++++++++++++++++++++----- - 1 file changed, 44 insertions(+), 7 deletions(-) - -diff --git a/drivers/remoteproc/k1x-rproc.c b/drivers/remoteproc/k1x-rproc.c -index 36d3d17d4..8d0c318b5 100644 ---- a/drivers/remoteproc/k1x-rproc.c -+++ b/drivers/remoteproc/k1x-rproc.c -@@ -12,6 +12,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -57,6 +58,8 @@ struct spacemit_mbox { - const char name[10]; - struct mbox_chan *chan; - struct mbox_client client; -+ struct task_struct *mb_thread; -+ bool kthread_running; - struct completion mb_comp; - int vq_id; - }; -@@ -267,6 +270,27 @@ static struct rproc_ops spacemit_rproc_ops = { - .get_boot_addr = spacemit_get_boot_addr, - }; - -+static int __process_theread(void *arg) -+{ -+ int ret; -+ struct mbox_client *cl = arg; -+ struct rproc *rproc = dev_get_drvdata(cl->dev); -+ struct spacemit_mbox *mb = container_of(cl, struct spacemit_mbox, client); -+ struct sched_param param = {.sched_priority = 0 }; -+ -+ mb->kthread_running = true; -+ ret = sched_setscheduler(current, SCHED_FIFO, ¶m); -+ -+ do { -+ wait_for_completion_timeout(&mb->mb_comp, 10); -+ if (rproc_vq_interrupt(rproc, mb->vq_id) == IRQ_NONE) -+ dev_dbg(&rproc->dev, "no message found in vq%d\n", mb->vq_id); -+ } while (!kthread_should_stop()); -+ -+ mb->kthread_running = false; -+ -+ return 0; -+} - static void k1x_rproc_mb_callback(struct mbox_client *cl, void *data) - { - struct spacemit_mbox *mb = container_of(cl, struct spacemit_mbox, client); -@@ -281,9 +305,6 @@ static struct spacemit_mbox k1x_rpoc_mbox[] = { - .client = { - .rx_callback = k1x_rproc_mb_callback, - .tx_block = true, -- .tx_done = NULL, -- .tx_tout = 500, -- .knows_txdone = false, - }, - }, - { -@@ -292,10 +313,7 @@ static struct spacemit_mbox k1x_rpoc_mbox[] = { - .client = { - .rx_callback = k1x_rproc_mb_callback, - .tx_block = true, -- .tx_done = NULL, -- .tx_tout = 500, -- .knows_txdone = false, -- }, -+ }, - }, - }; - -@@ -569,6 +587,12 @@ static int spacemit_rproc_probe(struct platform_device *pdev) - dev_err(dev, "failed to request mbox channel\n"); - return -EINVAL; - } -+ -+ if (priv->mb[i].vq_id >= 0) { -+ priv->mb[i].mb_thread = kthread_run(__process_theread, (void *)cl, name); -+ if (IS_ERR(priv->mb[i].mb_thread)) -+ return PTR_ERR(priv->mb[i].mb_thread); -+ } - } - - #ifdef CONFIG_PM_SLEEP -@@ -604,7 +628,13 @@ static void k1x_rproc_free_mbox(struct rproc *rproc) - - static void spacemit_rproc_remove(struct platform_device *pdev) - { -+ int i = 0; - struct rproc *rproc = platform_get_drvdata(pdev); -+ struct spacemit_rproc *ddata = rproc->priv; -+ -+ for (i = 0; i < MAX_MBOX; ++i) -+ if (ddata->mb[i].kthread_running) -+ kthread_stop(ddata->mb[i].mb_thread); - - rproc_del(rproc); - k1x_rproc_free_mbox(rproc); -@@ -625,11 +655,18 @@ MODULE_DEVICE_TABLE(of, spacemit_rproc_of_match); - - static void spacemit_rproc_shutdown(struct platform_device *pdev) - { -+ int i; - struct rproc *rproc; - struct spacemit_rproc *priv; - - rproc = dev_get_drvdata(&pdev->dev); - priv = rproc->priv; -+ -+ for (i = 0; i < MAX_MBOX; ++i) { -+ /* release the resource of rt thread */ -+ kthread_stop(priv->mb[i].mb_thread); -+ /* mbox_free_channel(priv->mb[i].chan); */ -+ } - } - - static struct platform_driver spacemit_rproc_driver = { --- -2.34.1 -