mirror of
https://github.com/CTCaer/hekate.git
synced 2024-11-22 18:06:40 +00:00
bdk: emmc: add emmc_set_partition
Additionally, add SDMMC index info to errors.
This commit is contained in:
parent
227fe9b7ea
commit
6257d20db9
5 changed files with 15 additions and 13 deletions
|
@ -131,6 +131,8 @@ bool emmc_initialize(bool power_cycle)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int emmc_set_partition(u32 partition) { return sdmmc_storage_set_mmc_partition(&emmc_storage, partition); }
|
||||||
|
|
||||||
void emmc_gpt_parse(link_t *gpt)
|
void emmc_gpt_parse(link_t *gpt)
|
||||||
{
|
{
|
||||||
gpt_t *gpt_buf = (gpt_t *)calloc(GPT_NUM_BLOCKS, EMMC_BLOCKSIZE);
|
gpt_t *gpt_buf = (gpt_t *)calloc(GPT_NUM_BLOCKS, EMMC_BLOCKSIZE);
|
||||||
|
|
|
@ -63,6 +63,7 @@ u16 *emmc_get_error_count();
|
||||||
u32 emmc_get_mode();
|
u32 emmc_get_mode();
|
||||||
int emmc_init_retry(bool power_cycle);
|
int emmc_init_retry(bool power_cycle);
|
||||||
bool emmc_initialize(bool power_cycle);
|
bool emmc_initialize(bool power_cycle);
|
||||||
|
int emmc_set_partition(u32 partition);
|
||||||
void emmc_end();
|
void emmc_end();
|
||||||
|
|
||||||
void emmc_gpt_parse(link_t *gpt);
|
void emmc_gpt_parse(link_t *gpt);
|
||||||
|
|
|
@ -1038,6 +1038,7 @@ DPRINTF("[SD] supports selected (U)HS mode\n");
|
||||||
|
|
||||||
u16 total_pwr_consumption = ((u16)buf[0] << 8) | buf[1];
|
u16 total_pwr_consumption = ((u16)buf[0] << 8) | buf[1];
|
||||||
DPRINTF("[SD] total max power: %d mW\n", total_pwr_consumption * 3600 / 1000);
|
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)
|
if (total_pwr_consumption <= 800)
|
||||||
{
|
{
|
||||||
|
|
|
@ -129,10 +129,7 @@ typedef struct _mmc_csd
|
||||||
u16 cmdclass;
|
u16 cmdclass;
|
||||||
u32 c_size;
|
u32 c_size;
|
||||||
u32 r2w_factor;
|
u32 r2w_factor;
|
||||||
u32 max_dtr;
|
|
||||||
u32 erase_size; /* In sectors */
|
|
||||||
u32 read_blkbits;
|
u32 read_blkbits;
|
||||||
u32 write_blkbits;
|
|
||||||
u32 capacity;
|
u32 capacity;
|
||||||
u8 write_protect;
|
u8 write_protect;
|
||||||
u16 busspeed;
|
u16 busspeed;
|
||||||
|
@ -186,6 +183,7 @@ typedef struct _sdmmc_storage_t
|
||||||
int is_low_voltage;
|
int is_low_voltage;
|
||||||
u32 partition;
|
u32 partition;
|
||||||
int initialized;
|
int initialized;
|
||||||
|
u32 card_power_limit;
|
||||||
u8 raw_cid[0x10];
|
u8 raw_cid[0x10];
|
||||||
u8 raw_csd[0x10];
|
u8 raw_csd[0x10];
|
||||||
u8 raw_scr[8];
|
u8 raw_scr[8];
|
||||||
|
|
|
@ -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 code_mask = (sdmmc->t210b01 || sdmmc->id != SDMMC_1) ? 0x1F : 0x7F;
|
||||||
u8 autocal_pu_status = sdmmc->regs->autocalsts & code_mask;
|
u8 autocal_pu_status = sdmmc->regs->autocalsts & code_mask;
|
||||||
if (!autocal_pu_status)
|
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)
|
else if (autocal_pu_status == code_mask)
|
||||||
EPRINTF("SDMMC: Comp Pad open!");
|
EPRINTFARGS("SDMMC%d: Comp Pad open!", sdmmc->id + 1);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// In case auto calibration fails, we load suggested standard values.
|
// 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)
|
if (norintsts & SDHCI_INT_ERROR)
|
||||||
{
|
{
|
||||||
#ifdef ERROR_EXTRA_PRINTING
|
#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
|
#endif
|
||||||
sdmmc->regs->errintsts = errintsts;
|
sdmmc->regs->errintsts = errintsts;
|
||||||
return SDMMC_MASKINT_ERROR;
|
return SDMMC_MASKINT_ERROR;
|
||||||
|
@ -988,7 +988,7 @@ static int _sdmmc_update_dma(sdmmc_t *sdmmc)
|
||||||
if (result != SDMMC_MASKINT_NOERROR)
|
if (result != SDMMC_MASKINT_NOERROR)
|
||||||
{
|
{
|
||||||
#ifdef ERROR_EXTRA_PRINTING
|
#ifdef ERROR_EXTRA_PRINTING
|
||||||
EPRINTFARGS("%08X!", result);
|
EPRINTFARGS("SDMMC%d: %08X!", sdmmc->id + 1, result);
|
||||||
#endif
|
#endif
|
||||||
_sdmmc_reset(sdmmc);
|
_sdmmc_reset(sdmmc);
|
||||||
return 0;
|
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))
|
if (!_sdmmc_config_dma(sdmmc, &blkcnt, req))
|
||||||
{
|
{
|
||||||
#ifdef ERROR_EXTRA_PRINTING
|
#ifdef ERROR_EXTRA_PRINTING
|
||||||
EPRINTF("SDMMC: DMA Wrong cfg!");
|
EPRINTFARGS("SDMMC%d: DMA Wrong cfg!", sdmmc->id + 1);
|
||||||
#endif
|
#endif
|
||||||
return 0;
|
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))
|
if (!_sdmmc_send_cmd(sdmmc, cmd, is_data_present))
|
||||||
{
|
{
|
||||||
#ifdef ERROR_EXTRA_PRINTING
|
#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
|
#endif
|
||||||
return 0;
|
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);
|
int result = _sdmmc_wait_response(sdmmc);
|
||||||
#ifdef ERROR_EXTRA_PRINTING
|
#ifdef ERROR_EXTRA_PRINTING
|
||||||
if (!result)
|
if (!result)
|
||||||
EPRINTF("SDMMC: Transfer timeout!");
|
EPRINTFARGS("SDMMC%d: Transfer timeout!", sdmmc->id + 1);
|
||||||
#endif
|
#endif
|
||||||
DPRINTF("rsp(%d): %08X, %08X, %08X, %08X\n", result,
|
DPRINTF("rsp(%d): %08X, %08X, %08X, %08X\n", result,
|
||||||
sdmmc->regs->rspreg0, sdmmc->regs->rspreg1, sdmmc->regs->rspreg2, sdmmc->regs->rspreg3);
|
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);
|
result = _sdmmc_cache_rsp(sdmmc, sdmmc->rsp, 0x10, cmd->rsp_type);
|
||||||
#ifdef ERROR_EXTRA_PRINTING
|
#ifdef ERROR_EXTRA_PRINTING
|
||||||
if (!result)
|
if (!result)
|
||||||
EPRINTF("SDMMC: Unknown response type!");
|
EPRINTFARGS("SDMMC%d: Unknown response type!", sdmmc->id + 1);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
if (req && result)
|
if (req && result)
|
||||||
|
@ -1057,7 +1057,7 @@ DPRINTF("rsp(%d): %08X, %08X, %08X, %08X\n", result,
|
||||||
result = _sdmmc_update_dma(sdmmc);
|
result = _sdmmc_update_dma(sdmmc);
|
||||||
#ifdef ERROR_EXTRA_PRINTING
|
#ifdef ERROR_EXTRA_PRINTING
|
||||||
if (!result)
|
if (!result)
|
||||||
EPRINTF("SDMMC: DMA Update failed!");
|
EPRINTFARGS("SDMMC%d: DMA Update failed!", sdmmc->id + 1);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1083,7 +1083,7 @@ DPRINTF("rsp(%d): %08X, %08X, %08X, %08X\n", result,
|
||||||
result = _sdmmc_wait_card_busy(sdmmc);
|
result = _sdmmc_wait_card_busy(sdmmc);
|
||||||
#ifdef ERROR_EXTRA_PRINTING
|
#ifdef ERROR_EXTRA_PRINTING
|
||||||
if (!result)
|
if (!result)
|
||||||
EPRINTF("SDMMC: Busy timeout!");
|
EPRINTFARGS("SDMMC%d: Busy timeout!", sdmmc->id + 1);
|
||||||
#endif
|
#endif
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue