diff --git a/bdk/storage/emmc.c b/bdk/storage/emmc.c index 67e939e..5412fb5 100644 --- a/bdk/storage/emmc.c +++ b/bdk/storage/emmc.c @@ -131,6 +131,8 @@ bool emmc_initialize(bool power_cycle) return false; } +int emmc_set_partition(u32 partition) { return sdmmc_storage_set_mmc_partition(&emmc_storage, partition); } + void emmc_gpt_parse(link_t *gpt) { gpt_t *gpt_buf = (gpt_t *)calloc(GPT_NUM_BLOCKS, EMMC_BLOCKSIZE); diff --git a/bdk/storage/emmc.h b/bdk/storage/emmc.h index 78e1490..f2010bf 100644 --- a/bdk/storage/emmc.h +++ b/bdk/storage/emmc.h @@ -63,6 +63,7 @@ u16 *emmc_get_error_count(); u32 emmc_get_mode(); int emmc_init_retry(bool power_cycle); bool emmc_initialize(bool power_cycle); +int emmc_set_partition(u32 partition); void emmc_end(); void emmc_gpt_parse(link_t *gpt); diff --git a/bdk/storage/sdmmc.c b/bdk/storage/sdmmc.c index 4ab775a..a41be8f 100644 --- a/bdk/storage/sdmmc.c +++ b/bdk/storage/sdmmc.c @@ -1038,6 +1038,7 @@ DPRINTF("[SD] supports selected (U)HS mode\n"); u16 total_pwr_consumption = ((u16)buf[0] << 8) | buf[1]; DPRINTF("[SD] total max power: %d mW\n", total_pwr_consumption * 3600 / 1000); + storage->card_power_limit = total_pwr_consumption; if (total_pwr_consumption <= 800) { diff --git a/bdk/storage/sdmmc.h b/bdk/storage/sdmmc.h index e17600b..283e0d4 100644 --- a/bdk/storage/sdmmc.h +++ b/bdk/storage/sdmmc.h @@ -129,10 +129,7 @@ typedef struct _mmc_csd u16 cmdclass; u32 c_size; u32 r2w_factor; - u32 max_dtr; - u32 erase_size; /* In sectors */ u32 read_blkbits; - u32 write_blkbits; u32 capacity; u8 write_protect; u16 busspeed; @@ -186,6 +183,7 @@ typedef struct _sdmmc_storage_t int is_low_voltage; u32 partition; int initialized; + u32 card_power_limit; u8 raw_cid[0x10]; u8 raw_csd[0x10]; u8 raw_scr[8]; diff --git a/bdk/storage/sdmmc_driver.c b/bdk/storage/sdmmc_driver.c index a20d127..e52d131 100644 --- a/bdk/storage/sdmmc_driver.c +++ b/bdk/storage/sdmmc_driver.c @@ -218,9 +218,9 @@ static void _sdmmc_autocal_execute(sdmmc_t *sdmmc, u32 power) u8 code_mask = (sdmmc->t210b01 || sdmmc->id != SDMMC_1) ? 0x1F : 0x7F; u8 autocal_pu_status = sdmmc->regs->autocalsts & code_mask; if (!autocal_pu_status) - EPRINTF("SDMMC: Comp Pad short to gnd!"); + EPRINTFARGS("SDMMC%d: Comp Pad short to gnd!", sdmmc->id + 1); else if (autocal_pu_status == code_mask) - EPRINTF("SDMMC: Comp Pad open!"); + EPRINTFARGS("SDMMC%d: Comp Pad open!", sdmmc->id + 1); #endif // In case auto calibration fails, we load suggested standard values. @@ -821,7 +821,7 @@ DPRINTF("norintsts %08X, errintsts %08X\n", norintsts, errintsts); if (norintsts & SDHCI_INT_ERROR) { #ifdef ERROR_EXTRA_PRINTING - EPRINTFARGS("SDMMC: norintsts %08X, errintsts %08X\n", norintsts, errintsts); + EPRINTFARGS("SDMMC%d: norintsts %08X, errintsts %08X\n", sdmmc->id + 1, norintsts, errintsts); #endif sdmmc->regs->errintsts = errintsts; return SDMMC_MASKINT_ERROR; @@ -988,7 +988,7 @@ static int _sdmmc_update_dma(sdmmc_t *sdmmc) if (result != SDMMC_MASKINT_NOERROR) { #ifdef ERROR_EXTRA_PRINTING - EPRINTFARGS("%08X!", result); + EPRINTFARGS("SDMMC%d: %08X!", sdmmc->id + 1, result); #endif _sdmmc_reset(sdmmc); return 0; @@ -1013,7 +1013,7 @@ static int _sdmmc_execute_cmd_inner(sdmmc_t *sdmmc, sdmmc_cmd_t *cmd, sdmmc_req_ if (!_sdmmc_config_dma(sdmmc, &blkcnt, req)) { #ifdef ERROR_EXTRA_PRINTING - EPRINTF("SDMMC: DMA Wrong cfg!"); + EPRINTFARGS("SDMMC%d: DMA Wrong cfg!", sdmmc->id + 1); #endif return 0; } @@ -1029,7 +1029,7 @@ static int _sdmmc_execute_cmd_inner(sdmmc_t *sdmmc, sdmmc_cmd_t *cmd, sdmmc_req_ if (!_sdmmc_send_cmd(sdmmc, cmd, is_data_present)) { #ifdef ERROR_EXTRA_PRINTING - EPRINTFARGS("SDMMC: Wrong Response type %08X!", cmd->rsp_type); + EPRINTFARGS("SDMMC%d: Wrong Response type %08X!", sdmmc->id + 1, cmd->rsp_type); #endif return 0; } @@ -1037,7 +1037,7 @@ static int _sdmmc_execute_cmd_inner(sdmmc_t *sdmmc, sdmmc_cmd_t *cmd, sdmmc_req_ int result = _sdmmc_wait_response(sdmmc); #ifdef ERROR_EXTRA_PRINTING if (!result) - EPRINTF("SDMMC: Transfer timeout!"); + EPRINTFARGS("SDMMC%d: Transfer timeout!", sdmmc->id + 1); #endif DPRINTF("rsp(%d): %08X, %08X, %08X, %08X\n", result, sdmmc->regs->rspreg0, sdmmc->regs->rspreg1, sdmmc->regs->rspreg2, sdmmc->regs->rspreg3); @@ -1049,7 +1049,7 @@ DPRINTF("rsp(%d): %08X, %08X, %08X, %08X\n", result, result = _sdmmc_cache_rsp(sdmmc, sdmmc->rsp, 0x10, cmd->rsp_type); #ifdef ERROR_EXTRA_PRINTING if (!result) - EPRINTF("SDMMC: Unknown response type!"); + EPRINTFARGS("SDMMC%d: Unknown response type!", sdmmc->id + 1); #endif } if (req && result) @@ -1057,7 +1057,7 @@ DPRINTF("rsp(%d): %08X, %08X, %08X, %08X\n", result, result = _sdmmc_update_dma(sdmmc); #ifdef ERROR_EXTRA_PRINTING if (!result) - EPRINTF("SDMMC: DMA Update failed!"); + EPRINTFARGS("SDMMC%d: DMA Update failed!", sdmmc->id + 1); #endif } } @@ -1083,7 +1083,7 @@ DPRINTF("rsp(%d): %08X, %08X, %08X, %08X\n", result, result = _sdmmc_wait_card_busy(sdmmc); #ifdef ERROR_EXTRA_PRINTING if (!result) - EPRINTF("SDMMC: Busy timeout!"); + EPRINTFARGS("SDMMC%d: Busy timeout!", sdmmc->id + 1); #endif return result; }