2009年2月10日 星期二

[心得] USB issue for UEFI

在可以boot到EFI shell時,發現usb mass storage無法使用,不管是1.1或者2.0的都會發生time-out的情況。一開始先從PCI IRQ routing著手,原本是沒做更改,沿用公板設定,後來將它們改成跟legacy BIOS一樣的設定,問題還是沒改善。

後來在跟BIOS team同仁討論時,才知道可能是CK505的問題,也就是必須去設定CK505,讓100MHZ變成96 MHZ的clock,才能除頻到讓USB可以用,FoxHollow的code原本就有去configure CK505,要寫進去的值也是正確的,但USB mass storage問題依舊存在。於是就想說把CK505的設定值讀出來看是否有正確寫進去,卻發現讀不出來的東西,也跟著發現原來對CK505下write block也是失敗的,失敗的原因是Device Error。經同仁的提醒後,才知道可能是SMBUS的切換問題,SMBUS的切換由三根PCH GPIO來做控制的,在將這三根GPIO pin都拉low後,即可以正確存取CK505 register了,而在EFI shell下,也可以ls到usb mass storage的內容了。

這次的USB issue,犯了三個錯誤,將之列出以作紀錄
1. 遇到問題時,沒有先去問其他人是否有遇到相同情況,而是自己埋頭苦幹。
2. data array沒有事先做initiate to zero,導致誤判RW結果。
3. 在透過SMBUS存取CK505時,沒有先看schematics,因而不知道需要bus的switch。

1 則留言:

阿凱 提到...

您的分享讓我這個資淺硬工學到很多,
感謝~