Skip to content

Commit 24f7e05

Browse files
committed
drivers: sdhc: split caps into standard and extra
Make sure the capability bitfields fit the standard SD Association specification and move the extra capabilities to props. Affected Drivers: - ifx_cat1_sdio - imx_usdhc - intel_emmc_host - rcar_mmc - sdhc_ambiq - sdhc_esp32 - sdhc_max32 - sdhc_renesas_ra - xlnx_sdhc Affected Subsys - sd Reference: 2.2.26, SD Specifications, Part A2, SD Host Controller Simplified Specification, Version 4.20 URL: https://www.sdcard.org/downloads/pls/pdf/?p=PartA2_SD%20Host_Controller_Simplified_Specification_Ver4.20.jpg Signed-off-by: Amneesh Singh <a-singh7@ti.com>
1 parent 179045e commit 24f7e05

File tree

12 files changed

+46
-40
lines changed

12 files changed

+46
-40
lines changed

doc/releases/migration-guide-4.2.rst

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -338,6 +338,12 @@ Flash
338338
* Separate the ``compatible`` from ``renesas,ra-nv-flash`` to :dtcompatible:`renesas,ra-nv-code-flash.yaml`
339339
and :dtcompatible:`renesas,ra-nv-data-flash.yaml`.
340340

341+
SD Host Controller
342+
==================
343+
344+
* Moved extra fields from :c:struct:`sdhc_host_caps` to :c:struct:`sdhc_host_props` as per the
345+
`SD Host Controller Specification <https://www.sdcard.org/downloads/pls/pdf/?p=PartA2_SD%20Host_Controller_Simplified_Specification_Ver4.20.jpg>`_.
346+
341347

342348
Stepper
343349
=======

drivers/sdhc/ifx_cat1_sdio.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,7 @@ static int ifx_cat1_sdio_get_host_props(const struct device *dev, struct sdhc_ho
208208
memset(props, 0, sizeof(*props));
209209
props->f_max = IFX_CAT1_SDIO_F_MAX;
210210
props->f_min = IFX_CAT1_SDIO_F_MIN;
211-
props->host_caps.bus_4_bit_support = true;
211+
props->bus_4_bit_support = true;
212212
props->host_caps.high_spd_support = true;
213213
props->host_caps.sdr50_support = true;
214214
props->host_caps.sdio_async_interrupt_support = true;

drivers/sdhc/imx_usdhc.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -260,9 +260,9 @@ static void imx_usdhc_init_host_props(const struct device *dev)
260260
props->host_caps.sdr104_support = (bool)(caps.flags & kUSDHC_SupportSDR104Flag);
261261
props->host_caps.sdr50_support = (bool)(caps.flags & kUSDHC_SupportSDR50Flag);
262262
props->host_caps.bus_8_bit_support = (bool)(caps.flags & kUSDHC_Support8BitFlag);
263-
props->host_caps.bus_4_bit_support = (bool)(caps.flags & kUSDHC_Support4BitFlag);
264-
props->host_caps.hs200_support = (bool)(cfg->mmc_hs200_1_8v);
265-
props->host_caps.hs400_support = (bool)(cfg->mmc_hs400_1_8v);
263+
props->bus_4_bit_support = (bool)(caps.flags & kUSDHC_Support4BitFlag);
264+
props->hs200_support = (bool)(cfg->mmc_hs200_1_8v);
265+
props->hs400_support = (bool)(cfg->mmc_hs400_1_8v);
266266
}
267267

268268
/*

drivers/sdhc/intel_emmc_host.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1168,9 +1168,9 @@ static int emmc_get_host_props(const struct device *dev, struct sdhc_host_props
11681168
props->host_caps.sdr104_support = (bool)(cap & BIT(33u));
11691169
props->host_caps.sdr50_support = (bool)(cap & BIT(32u));
11701170
props->host_caps.bus_8_bit_support = true;
1171-
props->host_caps.bus_4_bit_support = true;
1172-
props->host_caps.hs200_support = (bool)config->hs200_mode;
1173-
props->host_caps.hs400_support = (bool)config->hs400_mode;
1171+
props->bus_4_bit_support = true;
1172+
props->hs200_support = (bool)config->hs200_mode;
1173+
props->hs400_support = (bool)config->hs400_mode;
11741174

11751175
emmc->props = *props;
11761176

drivers/sdhc/rcar_mmc.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1206,7 +1206,7 @@ static int rcar_mmc_set_bus_width(const struct device *dev, struct sdhc_io *ios)
12061206
reg_width = RCAR_MMC_OPTION_WIDTH_1;
12071207
break;
12081208
case SDHC_BUS_WIDTH4BIT:
1209-
if (data->props.host_caps.bus_4_bit_support) {
1209+
if (data->props.bus_4_bit_support) {
12101210
reg_width = RCAR_MMC_OPTION_WIDTH_4;
12111211
} else {
12121212
LOG_ERR("SDHC I/O: 4-bits bus width isn't supported");
@@ -1331,7 +1331,7 @@ static int rcar_mmc_set_timings(const struct device *dev, struct sdhc_io *ios)
13311331
}
13321332
break;
13331333
case SDHC_TIMING_HS400:
1334-
if (!data->props.host_caps.hs400_support) {
1334+
if (!data->props.hs400_support) {
13351335
LOG_ERR("SDHC I/O: HS400 timing isn't supported");
13361336
return -ENOTSUP;
13371337
}
@@ -1347,7 +1347,7 @@ static int rcar_mmc_set_timings(const struct device *dev, struct sdhc_io *ios)
13471347
data->ddr_mode = 1;
13481348
break;
13491349
case SDHC_TIMING_HS200:
1350-
if (!data->props.host_caps.hs200_support) {
1350+
if (!data->props.hs200_support) {
13511351
LOG_ERR("SDHC I/O: HS200 timing isn't supported");
13521352
return -ENOTSUP;
13531353
}
@@ -1947,7 +1947,7 @@ static void rcar_mmc_init_host_props(const struct device *dev)
19471947
case SDHC_BUS_WIDTH8BIT:
19481948
host_caps->bus_8_bit_support = 1;
19491949
case SDHC_BUS_WIDTH4BIT:
1950-
host_caps->bus_4_bit_support = 1;
1950+
props->bus_4_bit_support = 1;
19511951
default:
19521952
break;
19531953
}
@@ -1958,9 +1958,9 @@ static void rcar_mmc_init_host_props(const struct device *dev)
19581958
host_caps->sdr50_support = cfg->uhs_support;
19591959
/* neither Linux nor U-boot support DDR50 mode, that's why we don't support it too */
19601960
host_caps->ddr50_support = 0;
1961-
host_caps->hs200_support = cfg->mmc_hs200_1_8v;
1961+
props->hs200_support = cfg->mmc_hs200_1_8v;
19621962
/* TODO: add support */
1963-
host_caps->hs400_support = 0;
1963+
props->hs400_support = 0;
19641964
#endif
19651965

19661966
host_caps->vol_330_support =

drivers/sdhc/sdhc_ambiq.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -164,13 +164,13 @@ static int ambiq_sdio_get_host_props(const struct device *dev, struct sdhc_host_
164164
props->host_caps.adma_2_support = true;
165165
props->host_caps.sdio_async_interrupt_support = true;
166166
props->host_caps.vol_180_support = true;
167-
props->host_caps.bus_4_bit_support = true;
168167
props->host_caps.bus_8_bit_support = true;
169168
props->host_caps.high_spd_support = true;
170169
props->host_caps.sdr50_support = true;
171170
props->host_caps.sdr104_support = true;
172171
props->host_caps.ddr50_support = true;
173-
props->host_caps.hs200_support = true;
172+
props->bus_4_bit_support = true;
173+
props->hs200_support = true;
174174
props->max_current_330 = 1020;
175175
props->max_current_300 = 1020;
176176
props->max_current_180 = 1020;

drivers/sdhc/sdhc_esp32.c

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1444,11 +1444,10 @@ static DEVICE_API(sdhc, sdhc_api) = {
14441444
.ddr50_support = false, \
14451445
.sdr104_support = false, \
14461446
.sdr50_support = false, \
1447-
.bus_8_bit_support = false, \
1448-
.bus_4_bit_support = \
1449-
(DT_INST_PROP(n, bus_width) == 4) ? true : false, \
1450-
.hs200_support = false, \
1451-
.hs400_support = false}}}; \
1447+
.bus_8_bit_support = false}, \
1448+
.bus_4_bit_support = (DT_INST_PROP(n, bus_width) == 4) ? true : false, \
1449+
.hs200_support = false, \
1450+
.hs400_support = false}}; \
14521451
\
14531452
static struct sdhc_esp32_data sdhc_esp32_##n##_data = { \
14541453
.bus_width = SDMMC_SLOT_WIDTH_DEFAULT, \

drivers/sdhc/sdhc_max32.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ static void sdhc_max32_init_props(const struct device *dev)
9494
sdhc_data->props.host_caps.sd_base_clk = 0x00;
9595
sdhc_data->props.host_caps.max_blk_len = 0b10;
9696
sdhc_data->props.host_caps.bus_8_bit_support = false;
97-
sdhc_data->props.host_caps.bus_4_bit_support = false;
97+
sdhc_data->props.bus_4_bit_support = false;
9898
sdhc_data->props.host_caps.adma_2_support = true;
9999
sdhc_data->props.host_caps.high_spd_support = true;
100100
sdhc_data->props.host_caps.sdma_support = true;
@@ -119,8 +119,8 @@ static void sdhc_max32_init_props(const struct device *dev)
119119
sdhc_data->props.host_caps.clk_multiplier = 0;
120120
sdhc_data->props.host_caps.adma3_support = false;
121121
sdhc_data->props.host_caps.vdd2_180_support = false;
122-
sdhc_data->props.host_caps.hs200_support = false;
123-
sdhc_data->props.host_caps.hs400_support = false;
122+
sdhc_data->props.hs200_support = false;
123+
sdhc_data->props.hs400_support = false;
124124
sdhc_data->props.power_delay = sdhc_config->power_delay_ms;
125125
}
126126

drivers/sdhc/sdhc_renesas_ra.c

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -713,12 +713,11 @@ static DEVICE_API(sdhc, sdhc_api) = {
713713
.ddr50_support = false, \
714714
.sdr104_support = false, \
715715
.sdr50_support = false, \
716-
.bus_8_bit_support = false, \
717-
.bus_4_bit_support = (DT_INST_PROP(index, bus_width) == 4) \
718-
? true \
719-
: false, \
720-
.hs200_support = false, \
721-
.hs400_support = false}}, \
716+
.bus_8_bit_support = false}, \
717+
.bus_4_bit_support = \
718+
(DT_INST_PROP(index, bus_width) == 4) ? true : false, \
719+
.hs200_support = false, \
720+
.hs400_support = false}, \
722721
RA_SDHI_EN(index), \
723722
RA_SDMMC_DTC_STRUCT_INIT(index)}; \
724723
\

drivers/sdhc/xlnx_sdhc.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -587,14 +587,14 @@ static int xlnx_sdhc_host_props(const struct device *dev, struct sdhc_host_props
587587
XLNX_SDHC_SLOT_TYPE_GET);
588588
props->host_caps.bus_8_bit_support = XLNX_SDHC_GET_HOST_PROP_BIT(cap,
589589
XLNX_SDHC_8BIT_SUPPORT);
590-
props->host_caps.bus_4_bit_support = XLNX_SDHC_GET_HOST_PROP_BIT(cap,
590+
props->bus_4_bit_support = XLNX_SDHC_GET_HOST_PROP_BIT(cap,
591591
XLNX_SDHC_4BIT_SUPPORT);
592592

593593
if ((cap & CHECK_BITS(XLNX_SDHC_SDR400_SUPPORT)) != 0U) {
594-
props->host_caps.hs400_support = (uint8_t)config->hs400_mode;
594+
props->hs400_support = (uint8_t)config->hs400_mode;
595595
dev_data->has_phy = true;
596596
}
597-
props->host_caps.hs200_support = (uint8_t)config->hs200_mode;
597+
props->hs200_support = (uint8_t)config->hs200_mode;
598598

599599
dev_data->props = *props;
600600

0 commit comments

Comments
 (0)