bdk: sdmmc: small changes

- Log warning for comp pad calibration timeout
- Rename some func/defines
- Increase SDMMC1 power disable wait to 10ms
 No real perceived functionality change.
This commit is contained in:
CTCaer 2024-06-07 17:09:30 +03:00
parent 4a24fe0b35
commit a34206df5b
3 changed files with 12 additions and 9 deletions

View file

@ -46,7 +46,7 @@
/* OCR bit definitions */ /* OCR bit definitions */
#define SD_OCR_VDD_18 (1U << 7) /* VDD voltage 1.8 */ #define SD_OCR_VDD_18 (1U << 7) /* VDD voltage 1.8 */
#define SD_VHD_27_36 (1U << 8) /* VDD voltage 2.7 ~ 3.6 */ #define SD_VHS_27_36 (1U << 8) /* VDD voltage 2.7 ~ 3.6 */
#define SD_OCR_VDD_32_33 (1U << 20) /* VDD voltage 3.2 ~ 3.3 */ #define SD_OCR_VDD_32_33 (1U << 20) /* VDD voltage 3.2 ~ 3.3 */
#define SD_OCR_S18R (1U << 24) /* 1.8V switching request */ #define SD_OCR_S18R (1U << 24) /* 1.8V switching request */
#define SD_ROCR_S18A SD_OCR_S18R /* 1.8V switching accepted by card */ #define SD_ROCR_S18A SD_OCR_S18R /* 1.8V switching accepted by card */

View file

@ -910,7 +910,7 @@ void _sd_storage_debug_print_ssr(u8 *raw_ssr)
static int _sd_storage_send_if_cond(sdmmc_storage_t *storage, bool *is_sdsc) static int _sd_storage_send_if_cond(sdmmc_storage_t *storage, bool *is_sdsc)
{ {
sdmmc_cmd_t cmdbuf; sdmmc_cmd_t cmdbuf;
u16 vhd_pattern = SD_VHD_27_36 | 0xAA; u16 vhd_pattern = SD_VHS_27_36 | 0xAA;
sdmmc_init_cmd(&cmdbuf, SD_SEND_IF_COND, vhd_pattern, SDMMC_RSP_TYPE_5, 0); sdmmc_init_cmd(&cmdbuf, SD_SEND_IF_COND, vhd_pattern, SDMMC_RSP_TYPE_5, 0);
if (!sdmmc_execute_cmd(storage->sdmmc, &cmdbuf, NULL, NULL)) if (!sdmmc_execute_cmd(storage->sdmmc, &cmdbuf, NULL, NULL))
{ {

View file

@ -222,6 +222,9 @@ static void _sdmmc_autocal_execute(sdmmc_t *sdmmc, u32 power)
{ {
sdmmc->regs->autocalcfg &= ~SDHCI_TEGRA_AUTOCAL_ENABLE; sdmmc->regs->autocalcfg &= ~SDHCI_TEGRA_AUTOCAL_ENABLE;
_sdmmc_pad_config_fallback(sdmmc, power); _sdmmc_pad_config_fallback(sdmmc, power);
#ifdef ERROR_EXTRA_PRINTING
EPRINTFARGS("SDMMC%d: Comp Pad cal timeout!", sdmmc->id + 1);
#endif
} }
// Disable E_INPUT (SD) or enable E_PWRD (eMMC) to conserve power. // Disable E_INPUT (SD) or enable E_PWRD (eMMC) to conserve power.
@ -403,7 +406,7 @@ static void _sdmmc_card_clock_enable(sdmmc_t *sdmmc)
sdmmc->card_clock_enabled = 1; sdmmc->card_clock_enabled = 1;
} }
static void _sdmmc_sd_clock_disable(sdmmc_t *sdmmc) static void _sdmmc_card_clock_disable(sdmmc_t *sdmmc)
{ {
sdmmc->card_clock_enabled = 0; sdmmc->card_clock_enabled = 0;
sdmmc->regs->clkcon &= ~SDHCI_CLOCK_CARD_EN; sdmmc->regs->clkcon &= ~SDHCI_CLOCK_CARD_EN;
@ -934,7 +937,7 @@ static u32 _sdmmc_check_mask_interrupt(sdmmc_t *sdmmc, u16 *pout, u16 mask)
if (norintsts & SDHCI_INT_ERROR) if (norintsts & SDHCI_INT_ERROR)
{ {
#ifdef ERROR_EXTRA_PRINTING #ifdef ERROR_EXTRA_PRINTING
EPRINTFARGS("SDMMC%d: norintsts %08X, errintsts %08X\n", sdmmc->id + 1, norintsts, errintsts); EPRINTFARGS("SDMMC%d: norintsts %08X, errintsts %08X", sdmmc->id + 1, norintsts, errintsts);
#endif #endif
sdmmc->regs->errintsts = errintsts; sdmmc->regs->errintsts = errintsts;
return SDMMC_MASKINT_ERROR; return SDMMC_MASKINT_ERROR;
@ -1403,7 +1406,7 @@ int sdmmc_init(sdmmc_t *sdmmc, u32 id, u32 power, u32 bus_width, u32 type)
// Disable clock if enabled. // Disable clock if enabled.
if (clock_sdmmc_is_not_reset_and_enabled(id)) if (clock_sdmmc_is_not_reset_and_enabled(id))
{ {
_sdmmc_sd_clock_disable(sdmmc); _sdmmc_card_clock_disable(sdmmc);
_sdmmc_commit_changes(sdmmc); _sdmmc_commit_changes(sdmmc);
} }
@ -1456,16 +1459,16 @@ void sdmmc1_disable_power()
// T210B01 WAR: Set pads to discharge state. // T210B01 WAR: Set pads to discharge state.
_sdmmc_config_sdmmc1_pads(true); _sdmmc_config_sdmmc1_pads(true);
// Disable SD card IO power regulator. // Disable SD card IO power.
max7762x_regulator_enable(REGULATOR_LDO2, false); max7762x_regulator_enable(REGULATOR_LDO2, false);
usleep(4000); usleep(4000);
// Disable SD card IO power pin. // Disable SD card power.
gpio_write(GPIO_PORT_E, GPIO_PIN_4, GPIO_LOW); gpio_write(GPIO_PORT_E, GPIO_PIN_4, GPIO_LOW);
// T210/T210B01 WAR: Set start timer for IO and Controller power discharge. // T210/T210B01 WAR: Set start timer for IO and Controller power discharge.
sd_power_cycle_time_start = get_tmr_ms(); sd_power_cycle_time_start = get_tmr_ms();
usleep(1000); // To power cycle, min 1ms without power is needed. usleep(10000); // To power cycle, min 1ms without power is needed.
// Disable SDMMC1 controller power. // Disable SDMMC1 controller power.
PMC(APBDEV_PMC_NO_IOPOWER) |= PMC_NO_IOPOWER_SDMMC1_IO_EN; PMC(APBDEV_PMC_NO_IOPOWER) |= PMC_NO_IOPOWER_SDMMC1_IO_EN;
@ -1486,7 +1489,7 @@ void sdmmc_end(sdmmc_t *sdmmc)
{ {
if (!sdmmc->clock_stopped) if (!sdmmc->clock_stopped)
{ {
_sdmmc_sd_clock_disable(sdmmc); _sdmmc_card_clock_disable(sdmmc);
// Disable SDMMC power. // Disable SDMMC power.
_sdmmc_set_io_power(sdmmc, SDMMC_POWER_OFF); _sdmmc_set_io_power(sdmmc, SDMMC_POWER_OFF);
_sdmmc_commit_changes(sdmmc); _sdmmc_commit_changes(sdmmc);