在itop4412移植linux4.14和設備樹遇到的問題及解決


  Linux4.14的設備樹下已經對itop4412做了支持,本來應該很容易進行移植,可是在使用訊為給的資料中,對exynos4412-itop-scp-core.dtsi中原本的代碼全部進行了注釋,並自己添加了部分節點。導致我移植完成后cpu只有一個核心在工作。

於是重新到linux官網下載源碼得到exynos4412-itop-scp-core.dtsi文件,編譯燒寫后發現卡在

  Starting kernel ...

  Uncompressing Linux... done, booting the kernel.

經過網上搜索發現是無法解析firmware節點導致,於是把這段代碼注釋掉

  firmware@0203F000 {
  compatible = "samsung,secure-firmware";
  reg = <0x0203F000 0x1000>;
  };

重點來了,注釋掉上段代碼后,可以正常啟動linux,可就是掛載不上根文件系統,往上翻log顯示:

  [ 2.504695] mmcblk1: error -5 sending status command, retrying

  ...

  [ 3.024971] dwmmc_exynos 12550000.mmc: Busy; trying anyway
  [ 3.528986] mmc_host mmc1: Timeout sending command (cmd 0x202000 arg 0x0 status 0x80202000)
  [ 3.562416] mmc_host mmc1: Bus speed (slot 0) = 50000000Hz (slot req 400000Hz, actual 396825HZ div = 63)

  (我把根文件系統放在emmc中,在uboot中emmc為mmc0,可是被linux識別成emmc1,所以root=/dev/mmcblk1p2,暫時沒搞清楚怎么更改)

從log可以看出是與emmc通訊受阻,因為在用訊為給的exynos4412-itop-scp-core.dtsi文件是可以正常使用emmc的,所以查看設備樹的emmc節點  

首先是exynos4412.dtsi:

  329 mshc_0: mmc@12550000 {
  330 compatible = "samsung,exynos4412-dw-mshc";
  331 reg = <0x12550000 0x1000>;
  332 interrupts = <GIC_SPI 77 IRQ_TYPE_LEVEL_HIGH>;
  333 #address-cells = <1>;
  334 #size-cells = <0>;
  335 fifo-depth = <0x80>;
  336 clocks = <&clock CLK_SDMMC4>, <&clock CLK_SCLK_MMC4>;
  337 clock-names = "biu", "ciu";
  338 status = "disable";
  339 };

exynos4412-itop-scp-core.dtsi:

  &mshc_0 {

    pinctrl-0 = <&sd4_clk &sd4_cmd &sd4_bus4 &sd4_bus8>;
    pinctrl-names = "default";
    status = "okay";
    vmmc-supply = <&buck9_reg>;
    broken-cd;
    card-detect-delay = <200>;
    samsung,dw-mshc-ciu-div = <3>;
    samsung,dw-mshc-sdr-timing = <2 3>;
    samsung,dw-mshc-ddr-timing = <1 2>;
    bus-width = <8>;
    cap-mmc-highspeed;
  };

上面都是在官方linux下的設備樹中的片段,而訊為做出以下改動

exynos4412-itop-scp-core.dtsi:  

  mshc_0: mmc@12550000 {
    compatible = "samsung,exynos4412-dw-mshc";
    reg = <0x12550000 0x1000>;
    interrupts = <0 77 0>;
    #address-cells = <1>;
    #size-cells = <0>;
    fifo-depth = <0x80>;
    clocks = <&clock CLK_SDMMC4>, <&clock CLK_SCLK_MMC4>;
    clock-names = "biu", "ciu";
    status = "disabled";
   };

訊為無論是在dts還是dtsi中都沒有描述vmmc-supply = <&buck9_reg>;這個節點,而查看S5M8767A的原理圖

可以看到剛啟動的時候,BUCK9是OFF狀態也就是沒有電壓,接下來看emmc的原理圖

原理圖明確標出emmc的供電就是VDDF28_EMMC,這就是問題所在,在uboot中我也用到了emmc,而這時pmu根本沒有初始化,也就是說如果原理圖正確的話emmc在uboot是不能工作的。所以結論就是訊為給的原理圖居然是錯誤的,導致官方的設備樹文件emmc的供電部分給出了vmmc-supply = <&buck9_reg>,經過我的查找確定了emmc的供電為VDDIOAP_MMC012_28,就是最下面這個,這個供電默認狀態是開啟的。

 

於是修改vmmc-supply = <&buck9_reg>為vmmc-supply = <&ldo17_reg>,編譯后正常啟動並可以掛載根文件系統,也有四顆核心在工作了。

[ 0.002640] CPU: Testing write buffer coherency: ok
[ 0.003759] CPU0: thread -1, cpu 0, socket 10, mpidr 80000a00
[ 0.040055] Setting up static identity map for 0x40100000 - 0x40100060
[ 0.060012] Hierarchical SRCU implementation.
[ 0.119998] smp: Bringing up secondary CPUs ...
[ 0.200218] CPU1: thread -1, cpu 1, socket 10, mpidr 80000a01
[ 0.280091] CPU2: thread -1, cpu 2, socket 10, mpidr 80000a02
[ 0.360092] CPU3: thread -1, cpu 3, socket 10, mpidr 80000a03
[ 0.360292] smp: Brought up 1 node, 4 CPUs
[ 0.360319] SMP: Total of 4 processors activated (192.00 BogoMIPS).

...

[    2.528840] VFS: Mounted root (ext4 filesystem) on device 179:2


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM