From 6778948f9de86c3cfaf36725a7c87dcff9ba247f Mon Sep 17 00:00:00 2001 From: hc <hc@nodka.com> Date: Mon, 11 Dec 2023 08:20:59 +0000 Subject: [PATCH] kernel_5.10 no rt --- kernel/drivers/mmc/host/rk_sdmmc_ops.c | 20 +++++++++++++++++--- 1 files changed, 17 insertions(+), 3 deletions(-) diff --git a/kernel/drivers/mmc/host/rk_sdmmc_ops.c b/kernel/drivers/mmc/host/rk_sdmmc_ops.c index 96f20d2..d0ef613 100644 --- a/kernel/drivers/mmc/host/rk_sdmmc_ops.c +++ b/kernel/drivers/mmc/host/rk_sdmmc_ops.c @@ -22,6 +22,8 @@ #include <linux/seq_file.h> #include <linux/mutex.h> #include <linux/miscdevice.h> +#include <linux/pm.h> +#include <linux/pm_runtime.h> #include "../core/block.h" #include "../core/card.h" #include "../core/core.h" @@ -131,7 +133,7 @@ /* * Transfer a single sector of kernel addressable data */ -int rk_emmc_transfer(u8 *buffer, unsigned addr, unsigned blksz, int write) +int rk_emmc_transfer(u8 *buffer, unsigned int addr, unsigned int datasz, int write) { int ret = 0; enum emmc_area_type areatype; @@ -150,11 +152,18 @@ mrq.data = &data; mrq.stop = &stop; - sg_init_one(&sg, buffer, blksz); + sg_init_one(&sg, buffer, datasz); - rk_emmc_prepare_mrq(&mrq, &sg, 1, addr, 1, blksz, write); + rk_emmc_prepare_mrq(&mrq, &sg, 1, addr, datasz / BLKSZ, BLKSZ, write); + pm_runtime_get_sync(&this_card->dev); mmc_claim_host(this_card->host); + + if (this_card->ext_csd.cmdq_en) { + ret = mmc_cmdq_disable(this_card); + if (ret) + goto exit; + } areatype = (enum emmc_area_type)this_card->ext_csd.part_config & EXT_CSD_PART_CONFIG_ACC_MASK; @@ -186,7 +195,12 @@ } exit: + if (this_card->reenable_cmdq && !this_card->ext_csd.cmdq_en) + mmc_cmdq_enable(this_card); + mmc_release_host(this_card->host); + pm_runtime_put(&this_card->dev); + return ret; } EXPORT_SYMBOL(rk_emmc_transfer); -- Gitblit v1.6.2