修改理由:
由於eboot 和KITL 同時調用 DM9000DBG_Init 這個函數,在eboot 掉用時使用的是沒有經過映射的地址,當鏡像載入完成後,時候的是映射過的地址。 而DM9000DBG_Init 任然時候的是沒有經過映射的地址。這樣做導致的直接後果是,KITL起來當訪問沒有這段地址(0x15000000)的時候立馬死機。
但是有引出了另外的一個問題,就是這樣修改在啟動eboot的時候,用的是映射過的地址,在eboot中訪問映射過的地址同樣會死機(因為mmu還沒有起來)。
最後找了一種比較折中的解決方案:
在編譯eboot的時候用下面代碼:
DM9000DBG_Init
{
......
//Add ed by peng
/OALPAtoVA((UINT32)0x15000000, FALSE);
//OALPAtoVA((UINT32)0x15000000+ 0x400, FALSE);
//Mask by peng
//Give the Index and Data port Address
dwIndexPortAddress = 0x15000000;
dwDataPortAddress = 0x15000000 + 0x400;
.......
}
編譯核心的時候用下面代碼:
DM9000DBG_Init
{
......
//Add ed by peng
dwIndexPortAddress = OALPAtoVA((UINT32)0x15000000, FALSE);
dwDataPortAddress = OALPAtoVA((UINT32)0x15000000+ 0x400, FALSE);
//Mask by peng
//Give the Index and Data port Address
//dwIndexPortAddress = 0x15000000;
//dwDataPortAddress = 0x15000000 + 0x400;
.......
}