2014-01-14 27 views
0

在arm平臺上,u-boot會在開始時使TLB,icache和BP數組無效,但是原因是什麼?有必要嗎?爲什麼uboot在開始時無效TLB s,icache,BP數組

cpu_init_crit: 
/* 
* Invalidate L1 I/D 
*/ 
mov r0, #0   @ set up for MCR 
mcr p15, 0, r0, c8, c7, 0 @ invalidate TLBs 
mcr p15, 0, r0, c7, c5, 0 @ invalidate icache 
mcr p15, 0, r0, c7, c5, 6 @ invalidate BP array 
mcr  p15, 0, r0, c7, c10, 4 @ DSB 
mcr  p15, 0, r0, c7, c5, 4 @ ISB 

回答

1

重置可能很難或很軟。有可能跳轉到重置向量。如果使用陳舊條目啓用緩存,代碼可能會崩潰導致系統無法引導。這可能比您想象的更常見,因爲SDRAM可能會錯過在冷啓動和誤讀導致崩潰後的行爲。通常看門狗或不可恢復的故障將跳轉到復位向量。最後,在XIP NOR閃存中可能有u-boot系統。某些系統/代碼可能會跳轉到此代碼以執行軟重置。

在所有這些情況下,可用的調試。您可能擁有99.9999%的案例工作系統。不得不在特定的硬件上發生啓動故障,這種情況只發生在熱門酒吧或冰淇淋冷櫃中,可能會讓您享受這些額外的代碼。也就是說,在極少數情況下需要它。

隨着電源軌的上線,硬件故障更爲常見。數據表描述了正常工作的系統的功率/溫度等範圍。 u-boot可能無法在這個理想的世界中運行。如果您的問題是啓動時間,那麼您可以更好地編寫自己的加載程序(儘管保留此代碼)或優化BSS清除等內容。

0

在A15/A7/A12你不需要做上電覆位後緩存/ MMU/BTB無效,所以這只是爲「偏執狂」的原因做了。但是,可能有核心在重置時不會執行自動無效操作,所以此代碼只是確保在不同核心類型中保留相同的行爲。

0

在硬件上未完成失效時重置(冷或暖)。另一個更實際的原因是U-Boot通常不是在硬件上運行的第一塊代碼。在大多數情況下,在U-Boot之前會運行ROM代碼,並且爲了避免在U-Boot獲得系統控制權時對硬件狀態做出任何假設,總是嘗試將硬件設置爲已知狀態並更安全從那裏出發。