U32 eMMC_CheckAlignPack(U8 u8_AlignByteCnt) { // check alignment if((U32)&(g_eMMCTestAlignPack_t.u8_0) & (u8_AlignByteCnt-1)) { eMMC_debug(eMMC_DEBUG_LEVEL_ERROR, 1, "eMMC Err: not aliged. expect %Xh but %Xh \n", u8_AlignByteCnt, (U32)&(g_eMMCTestAlignPack_t.u8_0)); eMMC_die("\n"); return eMMC_ST_ERR_NOT_ALIGN; } // check packed - 0 if((U32)&(g_eMMCTestAlignPack_t.u16_0)-(U32)&(g_eMMCTestAlignPack_t.u8_0) != 1 || (U32)&(g_eMMCTestAlignPack_t.u32_0)-(U32)&(g_eMMCTestAlignPack_t.u8_0) != 3 || (U32)&(g_eMMCTestAlignPack_t.u32_1)-(U32)&(g_eMMCTestAlignPack_t.u8_0) != 7) { eMMC_debug(eMMC_DEBUG_LEVEL_ERROR, 1, "eMMC Err: not packed. check err.0 \n"); eMMC_die("\n"); return eMMC_ST_ERR_NOT_PACKED; } // check packed - 1 if((U32)&(g_eMMCTestAlignPack_t.u16_0)-(U32)&(g_eMMCTestAlignPack_t.u8_0) != 1 || (U32)&(g_eMMCTestAlignPack_t.u32_0)-(U32)&(g_eMMCTestAlignPack_t.u16_0)!= 2 || (U32)&(g_eMMCTestAlignPack_t.u32_1)-(U32)&(g_eMMCTestAlignPack_t.u32_0)!= 4) { eMMC_debug(eMMC_DEBUG_LEVEL_ERROR, 1, "eMMC Err: not packed. check err.1 \n"); eMMC_die("\n"); return eMMC_ST_ERR_NOT_PACKED; } //eMMC_debug(eMMC_DEBUG_LEVEL_HIGH, 1, "ok\n"); return eMMC_ST_SUCCESS; }
U32 eMMC_ComapreData(U8 *pu8_Buf0, U8 *pu8_Buf1, U32 u32_ByteCnt) { U32 u32_i, u32_offset; for(u32_i=0; u32_i<u32_ByteCnt; u32_i++) { if(pu8_Buf0[u32_i] != pu8_Buf1[u32_i]) { eMMC_debug(eMMC_DEBUG_LEVEL_ERROR, 1, "eMMC Err: data mismatch: i:[%Xh], Buf0: %02Xh, Buf1: %02Xh\n", u32_i, pu8_Buf0[u32_i], pu8_Buf1[u32_i]); break; } } if(u32_i != u32_ByteCnt && 0==(g_eMMCDrv.u32_DrvFlag&DRV_FLAG_TUNING_TTABLE)) { u32_offset = (u32_i>>eMMC_SECTOR_512BYTE_BITS)<<eMMC_SECTOR_512BYTE_BITS; eMMC_debug(eMMC_DEBUG_LEVEL_ERROR,0,"\ndump Buf0, from %Xh-th bytes\n", u32_offset); eMMC_dump_mem(pu8_Buf0+u32_offset, eMMC_SECTOR_512BYTE); eMMC_debug(eMMC_DEBUG_LEVEL_ERROR,0,"dump Buf1, from %Xh-th bytes\n", u32_offset); eMMC_dump_mem(pu8_Buf1+u32_offset, eMMC_SECTOR_512BYTE); eMMC_debug(eMMC_DEBUG_LEVEL_ERROR,0,"\n"); return eMMC_ST_ERR_DATA_MISMATCH; }
static __inline void dump_mem_line_32(U32 *buf, int cnt) { U32 i; eMMC_debug(eMMC_DEBUG_LEVEL_ERROR, 0, " 0x%08X: ", (U32)buf); for (i= 0; i < cnt; i++) eMMC_debug(eMMC_DEBUG_LEVEL_ERROR, 0, "%08Xh ", buf[i]); }
static __inline void dump_mem_line(unsigned char *buf, U32 cnt) { U32 i; eMMC_debug(eMMC_DEBUG_LEVEL_ERROR, 0, " 0x%08X: ", (U32)buf); for (i= 0; i < cnt; i++) eMMC_debug(eMMC_DEBUG_LEVEL_ERROR, 0, "%02Xh ", buf[i]); eMMC_debug(eMMC_DEBUG_LEVEL_ERROR, 0, " | "); for (i = 0; i < cnt; i++) eMMC_debug(eMMC_DEBUG_LEVEL_ERROR, 0, "%c", (buf[i] >= 32 && buf[i] < 128) ? buf[i] : '.'); eMMC_debug(eMMC_DEBUG_LEVEL_ERROR, 0, "\n"); }
void eMMC_dump_mem_32(U32 *buf, U32 cnt) { U32 i; for (i= 0; i < cnt; i+= 8) { dump_mem_line_32(buf + i, 8); eMMC_debug(eMMC_DEBUG_LEVEL_ERROR, 0, " | 0x%08X \n", i+7); } }
U32 eMMC_FCIE_WaitD0High(U32 u32_us) { volatile U32 u32_cnt; REG_FCIE_SETBIT(FCIE_SD_MODE, BIT_SD_CLK_EN); u32_cnt = eMMC_FCIE_WaitD0High_Ex(u32_us); if(u32_us == u32_cnt) { eMMC_debug(eMMC_DEBUG_LEVEL_ERROR,1,"eMMC Err: wait D0 H timeout %u us\n", u32_cnt); return eMMC_ST_ERR_TIMEOUT_WAITD0HIGH; } // eMMC_hw_timer_delay(HW_TIMER_DELAY_1s * 2); return eMMC_ST_SUCCESS; }
// total 17 bytes 0~16 U8 HalFcie_CmdFifoGet(U8 u8addr) { U16 u16Tmp; if(u8addr>16) eMMC_debug(1, 1, "eMMC Err: Cmd FIFO addr overflow in get %d\n", u8addr); //REG_FCIE_SETBIT(FCIE_SD_CTRL, BIT_CHK_CMD); u16Tmp = REG_FCIE(FCIE_CMDFIFO_ADDR(u8addr>>1)); //REG_FCIE_CLRBIT(FCIE_SD_CTRL, BIT_CHK_CMD); if(u8addr&0x1) { return (U8)(u16Tmp>>8); } else { return (U8)(u16Tmp&0xFF);