armbian_build/patch/kernel/archive/sunxi-6.6/patches.megous/mmc-sunxi-mmc-Remove-runtime-PM.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

144 lines
5.2 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ond=C5=99ej=20Jirman?= <megi@xff.cz>
Date: Mon, 15 Feb 2021 09:11:16 +0100
Subject: mmc: sunxi-mmc: Remove runtime-PM
With runtime PM I get a lot of errors like (on H5/H6 f2fs formatted
rootfs):
[81360.499781] mmc_erase: group start error -110, status 0x0
[81360.550703] mmc_erase: group start error -110, status 0x0
[81360.599594] sunxi-mmc 4020000.mmc: data error, sending stop command
[81360.599611] sunxi-mmc 4020000.mmc: send stop command failed
[83474.053131] mmc_erase: group start error -110, status 0x0
[83474.104043] mmc_erase: group start error -110, status 0x0
[83850.888258] mmc_erase: group start error -110, status 0x0
[83850.938810] mmc_erase: group start error -110, status 0x0
[83850.989808] mmc_erase: group start error -110, status 0x0
[83851.040888] mmc_erase: group start error -110, status 0x0
[83851.091908] mmc_erase: group start error -110, status 0x0
[83851.142938] mmc_erase: group start error -110, status 0x0
[83851.193806] sunxi-mmc 4020000.mmc: data error, sending stop command
[83851.193825] sunxi-mmc 4020000.mmc: send stop command failed
[83851.201040] sunxi-mmc 4020000.mmc: data error, sending stop command
[83851.201062] sunxi-mmc 4020000.mmc: send stop command failed
[83851.720183] mmc_erase: group start error -110, status 0x0
[83851.770866] mmc_erase: group start error -110, status 0x0
[83851.821418] mmc_erase: group start error -110, status 0x0
[83851.872081] mmc_erase: group start error -110, status 0x0
[83851.922757] mmc_erase: group start error -110, status 0x0
[83851.999497] mmc_erase: group start error -110, status 0x0
[83852.050151] mmc_erase: group start error -110, status 0x0
[83852.101319] mmc_erase: group start error -110, status 0x0
[83852.152189] mmc_erase: group start error -110, status 0x0
[83852.202866] mmc_erase: group start error -110, status 0x0
Signed-off-by: Ondrej Jirman <megi@xff.cz>
---
drivers/mmc/host/sunxi-mmc.c | 35 +++++-----
1 file changed, 19 insertions(+), 16 deletions(-)
diff --git a/drivers/mmc/host/sunxi-mmc.c b/drivers/mmc/host/sunxi-mmc.c
index d3bd0ac99ec4..e9370c736497 100644
--- a/drivers/mmc/host/sunxi-mmc.c
+++ b/drivers/mmc/host/sunxi-mmc.c
@@ -949,9 +949,15 @@ static void sunxi_mmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
{
struct sunxi_mmc_host *host = mmc_priv(mmc);
+ if (ios->power_mode == MMC_POWER_OFF)
+ sunxi_mmc_reset_host(host);
+
sunxi_mmc_card_power(host, ios);
sunxi_mmc_set_bus_width(host, ios->bus_width);
sunxi_mmc_set_clk(host, ios);
+
+ if (ios->power_mode == MMC_POWER_UP)
+ sunxi_mmc_init_host(host);
}
static int sunxi_mmc_volt_switch(struct mmc_host *mmc, struct mmc_ios *ios)
@@ -977,8 +983,8 @@ static void sunxi_mmc_enable_sdio_irq(struct mmc_host *mmc, int enable)
unsigned long flags;
u32 imask;
- if (enable)
- pm_runtime_get_noresume(host->dev);
+ //if (enable)
+ //pm_runtime_get_noresume(host->dev);
spin_lock_irqsave(&host->lock, flags);
@@ -993,8 +999,8 @@ static void sunxi_mmc_enable_sdio_irq(struct mmc_host *mmc, int enable)
mmc_writel(host, REG_IMASK, imask);
spin_unlock_irqrestore(&host->lock, flags);
- if (!enable)
- pm_runtime_put_noidle(host->mmc->parent);
+ //if (!enable)
+ //pm_runtime_put_noidle(host->mmc->parent);
}
static void sunxi_mmc_hw_reset(struct mmc_host *mmc)
@@ -1464,10 +1470,10 @@ static int sunxi_mmc_probe(struct platform_device *pdev)
if (ret)
goto error_free_dma;
- pm_runtime_set_active(&pdev->dev);
- pm_runtime_set_autosuspend_delay(&pdev->dev, 50);
- pm_runtime_use_autosuspend(&pdev->dev);
- pm_runtime_enable(&pdev->dev);
+ //pm_runtime_set_active(&pdev->dev);
+ //pm_runtime_set_autosuspend_delay(&pdev->dev, 50);
+ //pm_runtime_use_autosuspend(&pdev->dev);
+ //pm_runtime_enable(&pdev->dev);
ret = mmc_add_host(mmc);
if (ret)
@@ -1492,11 +1498,11 @@ static void sunxi_mmc_remove(struct platform_device *pdev)
struct sunxi_mmc_host *host = mmc_priv(mmc);
mmc_remove_host(mmc);
- pm_runtime_disable(&pdev->dev);
- if (!pm_runtime_status_suspended(&pdev->dev)) {
+ //pm_runtime_disable(&pdev->dev);
+ //if (!pm_runtime_status_suspended(&pdev->dev)) {
disable_irq(host->irq);
sunxi_mmc_disable(host);
- }
+ //}
dma_free_coherent(&pdev->dev, PAGE_SIZE, host->sg_cpu, host->sg_dma);
mmc_free_host(mmc);
}
@@ -1531,7 +1537,6 @@ static int sunxi_mmc_runtime_suspend(struct device *dev)
* Disabling the irq will prevent this.
*/
disable_irq(host->irq);
- sunxi_mmc_reset_host(host);
sunxi_mmc_disable(host);
return 0;
@@ -1539,8 +1544,6 @@ static int sunxi_mmc_runtime_suspend(struct device *dev)
#endif
static const struct dev_pm_ops sunxi_mmc_pm_ops = {
- SET_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend,
- pm_runtime_force_resume)
SET_RUNTIME_PM_OPS(sunxi_mmc_runtime_suspend,
sunxi_mmc_runtime_resume,
NULL)
@@ -1550,8 +1553,8 @@ static struct platform_driver sunxi_mmc_driver = {
.driver = {
.name = "sunxi-mmc",
.probe_type = PROBE_PREFER_ASYNCHRONOUS,
- .of_match_table = sunxi_mmc_of_match,
- .pm = &sunxi_mmc_pm_ops,
+ .of_match_table = of_match_ptr(sunxi_mmc_of_match),
+ //.pm = &sunxi_mmc_pm_ops,
},
.probe = sunxi_mmc_probe,
.remove_new = sunxi_mmc_remove,
--
Armbian