文章目录

  • 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)相关推荐

  1. springboot的jsp应该放在哪_详解SpringBoot 添加对JSP的支持(附常见坑点)

    序言: SpringBoot默认不支持JSP,如果想在项目中使用,需要进行相关初始化工作.为了方便大家更好的开发,本案例可直接作为JSP开发的脚手架工程 SpringBoot+War+JSP . 常见 ...

  2. WordPress 多媒体库添加分类和标签支持

    https://www.xhsay.com/wordpress-attachment-taxonomies.html 时不时看到有朋友说 WordPress 这么强大的系统,怎么多媒体附件都不支持分类 ...

  3. Eclipse如何添加Maven的scala支持

    Eclipse如何添加Maven的scala支持 搜索发现我们的Eclipse是没有Scala的 添加我们的配置 org.scala-tools.archetypes scala-archetype- ...

  4. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 图片:为图片添加圆角 (IE8 不支持)

    <!DOCTYPE html> <html><head><meta charset="utf-8"> <title>菜鸟 ...

  5. laravel-admin使添加、编辑按钮支持附带参数

    本篇博客教大家如何通过修改laravel-admin源码,使添加.编辑按钮支持附带参数,从而支持我们一些特殊业务.(对于高级版本的laravel-admin编辑方法不支持) 一.自定义添加方法 我们修 ...

  6. 【Abp VNext】实战入门(七):【1】xxx.Web网站层 —— API接口服务添加跨域访问支持

    一.前言 通过命令 abp new AoRuiDe.GasMonitoring 或者直接从官网下载的项目,默认没做跨域配置,会导致在前后端分离的网页中去访问后端接口的时候报错"Access- ...

  7. linux 桌面缩放比例,Linux Mint 20 Cinnamon 4.6桌面环境添加分数比例缩放支持

    如果您在高分辨率显示器上使用Cinnamon桌面环境?那么有一个好消息是:Cinnamon 4.6桌面环境将添加分数比例缩放支持,它会引入到Linux Mint 20(基于Ubuntu 20.04 L ...

  8. exfat单元分配要设置多少_微软宣布,支持往Linux内核里添加exFAT存储了!跨系统存储的福音...

    栗子 发自 凹非寺  量子位 报道 | 公众号 QbitAI exFAT,是微软开发的文件系统,为闪存而生. 你的U盘.SD卡.手机等等存储设备,能存4G以上的大文件,很大程度上是它的功劳. 可exF ...

  9. 千兆网口 Freescale ETSEC + Marvell 88E1111 uboot Linux 驱动分析

    原文  http://blog.csdn.net/gorilla0123/article/details/5972706 千兆网口 Freescale ETSEC + Marvell 88E1111 ...

最新文章

  1. 在应用程序中宿主MEF
  2. 001.搭建开发环境
  3. redis简单了解 二 (集群)
  4. EL表达式中使用replace函数对时长字符串进行处理
  5. spring-bean版本_如何模拟Spring bean(版本2)
  6. CSS每日学习笔记(3)
  7. RabbitMQ 手动签收
  8. 对当今流行的比赛评分系统的简单分类以及《评委计分系统-双屏版》的类别
  9. 过去式和过去分词的用法区别
  10. 如何区分网线是几类的_如何判断网线是几类线?
  11. nepctf pwn easystack(_stack_chk_fail)
  12. 软件开发、软件设计培训笔记
  13. 嚣张!泡沫见到橡胶硫化消泡粉还不跪地求饶
  14. 时间序列分析实验报告总结_时间序列分析试验报告
  15. Python语言课程设计名片管理系统
  16. 优雅的使用MacBook(一些小技巧,你不会知道的)
  17. Dragon slayer(搜索板题)
  18. 文件与base64格式转换
  19. anjuta , 88
  20. 360踩在3721尸体上扶摇直上(转载)

热门文章

  1. PaPerPass V3.0使用教程
  2. AAAI2022推荐系统论文集锦
  3. 深度学习笔记整理(五)——提高泛化能力的方法
  4. Scrapy-Splash爬取淘宝排行榜(三)
  5. 软件服务与汽车修理技术
  6. Sqlite中文排序研究
  7. 什么软件可以打印小学试卷书本?
  8. 罗克韦尔协议转换网关WTGNet-AB
  9. 完整的芯片反向设计流程原来是这样的!(实例讲解)
  10. 未能加载包studio package_SLAM组合拳之七 — 创建自定义Gazebo功能包(二)