2022年3月30日 星期三

Openwrt 21.02 MX25L25635E 無法soft reboot


    原因是在於Kernel 5.4.179在回復狀態時, 多作了一個flag的檢查 SNOR_F_BROKEN_RESET. 目前看起來這個flag是為了在開機的時候有狀況而作的. 解決方式就是把它拿掉... 

下面是修改前的樣子.
void spi_nor_restore(struct spi_nor *nor)
{
    /* restore the addressing mode */
    if (nor->addr_width == 4 && !(nor->flags & SNOR_F_4B_OPCODES) &&
        nor->flags & SNOR_F_BROKEN_RESET)
            nor->params.set_4byte(nor, false);
}
下面是修改後.
void spi_nor_restore(struct spi_nor *nor)
{
    /* restore the addressing mode */
    if (nor->addr_width == 4 && !(nor->flags & SNOR_F_4B_OPCODES))
            nor->params.set_4byte(nor, false);
}
   


    下面是碎碎唸....
    之前為了MX25L25635E在Openwrt 19.07上boot開機的問題搞了好一陣子. 看到不少人講21.02已經修正這個問題. 想說總算不用那麼麻煩換版本還要改code的... 沒想到還是遇到了.
    其實去年中就有試過21.02發現Reboot還是會卡在System Restarting... 想說最近有了21.02.2了也是一樣, 應該是Kernel版本沒有變的關係吧...
 
    目前看起來21.02修正的內容應該是對那種本身有4B OPCODE的flash, 因為那些可以直接下READ4B/WRITE4B的命令, 而不需要執行EN4B/EX4B的flash. 像是MX25L25635F. 也就是因為沒有進到4 byte addressing mode, 所以重開機不受影響. 而MX25L25635E是需要的, 所以還是gg了.


    雖然最後發現拿掉那個判斷是最快的 但不是正式的, 看了比較新的source code那邊寫法又不一樣了, 等導入了再說吧. 到時候不要再折騰一次就好.

沒有留言:

張貼留言