armbian_build/patch/kernel/archive/sunxi-6.6/patches.megous/mailbox-Allow-to-run-mailbox-while-timekeeping-is-suspended.patch
Gunjan Gupta d1186b8a0e kernel: sunxi: Add patches for 6.6 kernel
I have changed the way the patches are generated a bit. Instead of using orange-pi branch from megous tree for 6.6 kernel, I have used the following kernel branches

	a83t-suspend, af8133j, anx, audio,
	axp, cam, drm, err, fixes, mbus,
	modem, opi3, pb, pinetab, pp, ppkb,
	samuel, speed, tbs-a711, ths

These branches were carefully chosen to include only allwinner related patches and remove importing of the rockchip related patches into the allwinner kernel.

Following patches are modified to fix patch application failure
- patches.armbian/arm64-dts-sun50i-h616-orangepi-zero2-reg_usb1_vbus-status-ok.patch
- patches.armbian/arm64-dts-sun50i-h616-orangepi-zero2-Enable-GPU-mali.patch
- patches.armbian/arm64-dts-allwinner-h616-Add-efuse_xlate-cpu-frequency-scaling-v1_6_2.patch
- patches.armbian/arm64-dts-allwinner-h616-LED-green_power_on-red_status_heartbeat.patch
- patches.armbian/arm64-dts-allwinner-overlay-Add-Overlays-for-sunxi64.patch
- patches.armbian/arm64-dts-sun50i-h616-bigtreetech-cb1.patch

Following patches are modified because of kernel api change to fix compilation failure
- patches.armbian/drv-gpu-drm-sun4i-Add-HDMI-audio-sun4i-hdmi-encoder.patch
- patches.armbian/drv-of-Device-Tree-Overlay-ConfigFS-interface.patch
2023-10-30 22:58:11 +05:30

65 lines
1.9 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ond=C5=99ej=20Jirman?= <megi@xff.cz>
Date: Sat, 2 Nov 2019 15:09:01 +0100
Subject: mailbox: Allow to run mailbox while timekeeping is suspended
This makes it possible to send messages from CPU suspend finisher.
We simply implement cl->tx_block using a busywait loop when
timekeeping is suspended, instead of using hrtimer.
Signed-off-by: Ondrej Jirman <megi@xff.cz>
---
drivers/mailbox/mailbox.c | 28 ++++++++--
1 file changed, 24 insertions(+), 4 deletions(-)
diff --git a/drivers/mailbox/mailbox.c b/drivers/mailbox/mailbox.c
index ebff3baf3045..9d6656a0dc38 100644
--- a/drivers/mailbox/mailbox.c
+++ b/drivers/mailbox/mailbox.c
@@ -84,10 +84,12 @@ static void msg_submit(struct mbox_chan *chan)
spin_unlock_irqrestore(&chan->lock, flags);
if (!err && (chan->txdone_method & TXDONE_BY_POLL)) {
- /* kick start the timer immediately to avoid delays */
- spin_lock_irqsave(&chan->mbox->poll_hrt_lock, flags);
- hrtimer_start(&chan->mbox->poll_hrt, 0, HRTIMER_MODE_REL);
- spin_unlock_irqrestore(&chan->mbox->poll_hrt_lock, flags);
+ if (!timekeeping_suspended) {
+ /* kick start the timer immediately to avoid delays */
+ spin_lock_irqsave(&chan->mbox->poll_hrt_lock, flags);
+ hrtimer_start(&chan->mbox->poll_hrt, 0, HRTIMER_MODE_REL);
+ spin_unlock_irqrestore(&chan->mbox->poll_hrt_lock, flags);
+ }
}
}
@@ -269,6 +271,24 @@ int mbox_send_message(struct mbox_chan *chan, void *mssg)
msg_submit(chan);
+ if (chan->cl->tx_block && timekeeping_suspended) {
+ int i = chan->cl->tx_tout * 10;
+ bool txdone;
+
+ while (i--) {
+ txdone = chan->mbox->ops->last_tx_done(chan);
+ if (txdone) {
+ tx_tick(chan, 0);
+ return 0;
+ }
+
+ udelay(100);
+ }
+
+ tx_tick(chan, -ETIME);
+ return -ETIME;
+ }
+
if (chan->cl->tx_block) {
unsigned long wait;
int ret;
--
Armbian