[PATCH 07/17] mmc: renesas_sdhi: Add max_divider to renesas_sdhi_hw_info
From: Biju
Date: Sat May 30 2026 - 12:14:13 EST
From: Biju Das <biju.das.jz@xxxxxxxxxxxxxx>
The RZ/G3L SoC has a maximum divider value of 2048 compared to 512 on the
rest of the SoCs.
Add a max_divider field to renesas_sdhi_hw_info and replace the hardcoded
value in renesas_sdhi_clk_enable() and renesas_sdhi_set_clock() with
max_divider.
All existing users are assigned max_divider = 512 via sdhi_hw_info_generic
in both the internal and sys DMAC paths, preserving current behaviour.
No functional change.
Signed-off-by: Biju Das <biju.das.jz@xxxxxxxxxxxxxx>
---
drivers/mmc/host/renesas_sdhi.h | 1 +
drivers/mmc/host/renesas_sdhi_core.c | 4 ++--
drivers/mmc/host/renesas_sdhi_internal_dmac.c | 1 +
drivers/mmc/host/renesas_sdhi_sys_dmac.c | 1 +
4 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/drivers/mmc/host/renesas_sdhi.h b/drivers/mmc/host/renesas_sdhi.h
index a7fc525b7218..a42934e6d49d 100644
--- a/drivers/mmc/host/renesas_sdhi.h
+++ b/drivers/mmc/host/renesas_sdhi.h
@@ -43,6 +43,7 @@ struct renesas_sdhi_of_data {
struct renesas_sdhi_hw_info {
u64 clk_mask;
+ unsigned int max_divider;
};
struct renesas_sdhi_of_data_with_info {
diff --git a/drivers/mmc/host/renesas_sdhi_core.c b/drivers/mmc/host/renesas_sdhi_core.c
index 2ff40950f209..16ed6fd8470d 100644
--- a/drivers/mmc/host/renesas_sdhi_core.c
+++ b/drivers/mmc/host/renesas_sdhi_core.c
@@ -117,7 +117,7 @@ static int renesas_sdhi_clk_enable(struct tmio_mmc_host *host)
* Minimum frequency is the minimum input clock frequency
* divided by our maximum divider.
*/
- mmc->f_min = max(clk_round_rate(priv->clk, 1) / 512, 1L);
+ mmc->f_min = max(clk_round_rate(priv->clk, 1) / priv->info->max_divider, 1L);
/* enable 16bit data access on SDBUF as default */
renesas_sdhi_sdbuf_width(host, 16);
@@ -206,7 +206,7 @@ static void renesas_sdhi_set_clock(struct tmio_mmc_host *host,
}
host->mmc->actual_clock = renesas_sdhi_clk_update(host, new_clock);
- clock = host->mmc->actual_clock / 512;
+ clock = host->mmc->actual_clock / priv->info->max_divider;
/*
* Add a margin of 1/1024 rate higher to the clock rate in order
diff --git a/drivers/mmc/host/renesas_sdhi_internal_dmac.c b/drivers/mmc/host/renesas_sdhi_internal_dmac.c
index 512ed70b3779..84b1b38ca465 100644
--- a/drivers/mmc/host/renesas_sdhi_internal_dmac.c
+++ b/drivers/mmc/host/renesas_sdhi_internal_dmac.c
@@ -234,6 +234,7 @@ static const struct soc_device_attribute sdhi_quirks_match[] = {
static const struct renesas_sdhi_hw_info sdhi_hw_info_generic = {
.clk_mask = 0x80000080,
+ .max_divider = 512,
};
static const struct renesas_sdhi_of_data_with_quirks of_r8a7795_compatible = {
diff --git a/drivers/mmc/host/renesas_sdhi_sys_dmac.c b/drivers/mmc/host/renesas_sdhi_sys_dmac.c
index 1291970c2810..9d34551c6836 100644
--- a/drivers/mmc/host/renesas_sdhi_sys_dmac.c
+++ b/drivers/mmc/host/renesas_sdhi_sys_dmac.c
@@ -75,6 +75,7 @@ static const struct renesas_sdhi_of_data of_rcar_gen2_compatible = {
static const struct renesas_sdhi_hw_info sdhi_hw_info_generic = {
.clk_mask = 0x80000080,
+ .max_divider = 512,
};
static const struct renesas_sdhi_of_data_with_info of_default_cfg_info = {
--
2.43.0