日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

【QCA】SDK11.2添加Marvell AQR114c的支持(uboot+linux)

發布時間:2024/3/7 linux 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【QCA】SDK11.2添加Marvell AQR114c的支持(uboot+linux) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 0.env
  • 1.前言
  • 2.uboot
    • 2.1 uboot-patch
      • 1.總結
      • 2.修改步驟
    • 2.2 uboot-流程分析
  • 3.linux
    • 1.添加驅動支持
      • 1.dts中添加節點
      • 2.驅動中添加設備信息
      • 3.qca驅動(參考)
    • 2.加載FW
      • 1.方法一:系統啟動后手動加載FW

0.env

ubuntu-1804
IPQ8076A,SDK11.2
AQR114c
nor+nand

1.前言

1.下載114c的FW,去Marvell官網下載 or xxxx.
2.高通有aquantia的驅動框架程序,添加114c的支持就好了

2.uboot

2.1 uboot-patch

1.總結

需要修改如下幾個地方:

1.xxx_init函數中添加114c的switch-case判斷
2.xxxx.dts中添加aquantia相關node信息
3.xxxx.h文件中添加114c這個chip相關的宏定義
4.xml中添加114c的FW(可以自定義二進制文件,此處只給出官方update_common_info.py生成的方法),且復制FW到指定位置

2.修改步驟

步驟1:修改init函數添加114c的支持
"uboot/drivers/net/ipq807x/ipq807x_edma.c"

ipq807x_edma_init(){switch(phy_chip_id){case AQUANTIA_PHY_114C: // 新增114c的case,ipq_board_fw_download(phy_addr); //并且調用該函數自動加載FW} }

步驟2:修改dts相關節點
"arch/arm/dts/ipq807x-hk14.dts" // 根據個人情況選擇dts

# M : ess-switch{}(確認)修改如下幾條信息switch_mac_mode = <0x2>; // 確定mode支持114c的5G ,這里是USXGMII,最高支持10G。//(具體參考Ess Switch Mac Modes定義,uboot與linux宏定義值不同)aquantia_port = <5>; // 這里的5指的是如下port_phyinfo{}第5個port為aquantia_portport_phyinfo{port@5 { //prot5phy_address = <0>; // 修改這里的phy_addresss與實際相符且與其他port無沖突phy_type = <3>; // 補充:我這里使用了switch_mac_mode2,所以這里設為3,默認為1。} }

步驟4:修改庫文件中宏定義
"uboot/drivers/net/ipq_common/ipq_phy.h"

#define AQUANTIA_PHY_114C 0x31c31c22 // 這個值是mdio讀出來然后計算而得,建議直接讀一下mdio填進去就好 #define AQU_PHY_ADDR 0x0 // 修改AQU_PHY_ADDR,與dts中保持一致,如這里實際phy_id為0,dts中配置為0,這里就修改為0

步驟4:xml中添加FW路徑及文件(使用官方工具生成img)

"common/build/ipq_x64" // 我用64bit系統,所以放在這里
“/common/build/ipq” // 32bit 請放這里
“apss_proc/out/meta-tools/ipq807x/flash_partition/norplusnand-partition.xml” // 我是nor+nand , 根據實際選擇不同xml。 這里不是原始文件,原始文件我一般不修改,這里的路徑僅供參考。

cp xxxxx/AQR114C_FW.mbn common/build/ipq_x64/ cp xxxxx/AQR114C_FW.mbn common/build/ipq/ vi apss_proc/out/meta-tools/ipq807x/flash_partition/norplusnand-partition.xml // 修改`0:ETHPHYFW` 這個分區(默認名字是這個),參考如下: 138 <name length="16" type="string">0:ETHPHYFW</name> .... 146 <img_name type="string">AQR114C_FW.mbn</img_name> // 這里原始是空的 添加了文件名,名字自定義,與上述cp的文件名相同就好了。

2.2 uboot-流程分析

1.從board_eth_init()開始分析

board/qca/arm/ipq807x/ipq807x.c

board_eth_init()
->ipq807x_edma_init():

2.分析ipq807x_edma_init():函數

"uboot/drivers/net/ipq807x/ipq807x_edma.c"

2.1)
獲取"/ess-switch"node下"8033_port"這個節點是否存在
獲取"/ess-switch"node下"aquantia_port"這個節點是否存在
獲取"/ess-switch"node下"switch_mac_mode"這個節點是否存在,不存在則return
獲取"/ess-switch"node下"/ess-switch/port_phyinfo"這個節點是否存在,不存在則return
默認初始化6個port,for讀取這6個port的dts,并執行對應的init程序。
2.2)
讀取phy_id,判斷是否超過最大PHY_MAX,然后把dts中"/ess-switch/port_phyinfo"下的"phy_address"賦值給phy_addr變量
判斷當前phy_addr是否和dts中"aquantia_port"相同,相同則把AQU_PHY_ADDR宏重新賦值給phy_addr
(這個宏需要根據實際phy_addr定義,假定為0,則需要修改宏,下文給出.h文件的修改方法)
2.3)
通過mdio讀取chip_id,如果是aquantia_port||id=4,再讀取不同偏移的addr,并重新賦值phy_chip_id,
2.4)
判斷phy_chip_id:進入不同chip的init程序,此處沒有114c的case,添加114c的case(case AQUANTIA_PHY_114C:),引用113c相同的init函數即可。
ipq_board_fw_download(); //加載FW,下完分析
ipq_qca_aquantia_phy_init(); // init
->return to board_eth_init()

3.分析下fw加載的過程,即上文:ipq_board_fw_download();函數

"drivers/net/ipq6018/ipq6018_aquantia_phy.c"

注意這個結構體名字已經寫死了,"0:ETHPHYFW",這就是加載FW的分區名,不建議修改,需要多出同步修改。
判斷啟動flash類型,分類生成不同runcmd命令,如這里的spi nor boot,定義了runcmd為"sf probe && " "sf read 0x%p 0x%llx 0x%llx && "
通過run_command()函數,將flash中FW數據讀到內存中,
最后校驗內存中FW讀取是否ok
->return to ipq807x_edma_init();

"common/build/ipq_x64" // 我用64bit系統,所以放在這里
“/common/build/ipq” // 32bit 請放這里
“apss_proc/out/meta-tools/ipq807x/flash_partition/norplusnand-partition.xml” // 我是nor+nand , 根據實際選擇不同xml。 這里不是原始文件,原始文件我一般不修改,這里的路徑僅供參考

3.linux

1.添加驅動支持

1.dts中添加節點

qsdk/qca/src/linux-4.4/arch/arm64/boot/dts/qcom/xxxx.dts

368 phy4: ethernet-phy@4 { 369 compatible ="ethernet-phy-ieee802.3-c45"; 370 reg = <8>; 371 }; 372 phy5: ethernet-phy@5 { 373 compatible ="ethernet-phy-ieee802.3-c45"; 374 reg = <0>; 375 }; switch_mac_mode = 0xff //mac UXSGMII 406 port@4 { 407 port_id = <5>; 408 phy_address = <8>; 409 ethernet-phy-ieee802.3-c45; 410 }; 411 port@5 { 412 port_id = <6>; 413 phy_address = <0>; 414 ethernet-phy-ieee802.3-c45; 415 };

2.驅動中添加設備信息

drivers/net/phy/aquantia.c

+#define PHY_ID_AQR114C 0x31c31c22 18 +{19 + .phy_id = PHY_ID_AQR114C,20 + .phy_id_mask = 0xfffffff0,21 + .name = "Aquantia AQR114C",22 + .features = PHY_AQUANTIA_FEATURES,23 + .flags = PHY_HAS_INTERRUPT,24 + .probe = aquantia_phy_probe,25 + .soft_reset = aquantia_soft_reset,26 + .config_init = aquantia_config_init,27 + .aneg_done = aquantia_aneg_done,28 + .config_aneg = aquantia_config_aneg,29 + .config_intr = aquantia_config_intr,30 + .ack_interrupt = aquantia_ack_interrupt,31 + .read_status = aquantia_read_status,32 + .suspend = aquantia_suspend,33 + .resume = aquantia_resume,34 + .update_link = aquantia_update_link,35 + .driver = { .owner = THIS_MODULE,},36 +},37 }; 41 { PHY_ID_AQR112, 0xfffffff0 },42 { PHY_ID_AQR113C, 0xfffffff0 },43 { PHY_ID_AQR112C, 0xfffffff0 },44 + { PHY_ID_AQR114C, 0xfffffff0 },45 { }

3.qca驅動(參考)

qsdk/qca/src/qca-ssdk/include/hsl/phy/hsl_phy.h 添加芯片id

+#define AQUANTIA_PHY_114C 0x31c31c22

src/hsl/phy/hsl_phy.c switch中添加114c相關case

237 case AQUANTIA_PHY_113C_A1: 238 case AQUANTIA_PHY_112C: 239 + case AQUANTIA_PHY_114C: 240 phytype = AQUANTIA_PHY_CHIP; 241 break; 242 case QCA8030_PHY:

2.加載FW

1.方法一:系統啟動后手動加載FW

aq-fw-download /ssssss/114c.cld miireg 8 aq-fw-download /ssssss/114c.cld miireg 0 # 8 和 0 為PHY_ADDR # 再重新自協商一下(參考) ssdk_sh debug phy set 8 0x4004c441 0x8 ssdk_sh debug phy set 8 0x40070000 0x3200 ssdk_sh debug phy set 0 0x4004c441 0x8 ssdk_sh debug phy set 0 0x40070000 0x3200

總結

以上是生活随笔為你收集整理的【QCA】SDK11.2添加Marvell AQR114c的支持(uboot+linux)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。