mirror of
https://github.com/armbian/build.git
synced 2025-09-19 20:51:12 +02:00
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
65 lines
1.9 KiB
Diff
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
|
|
|