找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888
查看: 34978|回复: 60

OpenWrt ar71xx 添加原生 AR8035 支持的方法 (AR934X/AR7161/QCA9558)

  [复制链接]
发表于 2015-6-28 21:53 | 显示全部楼层 |阅读模式
本帖最后由 hackpascal 于 2016-7-8 09:57 编辑

(转载请注明原帖与作者)

Linux 自带 AR8035 驱动,但是很多人不知道。这里给出一个简单方便的方法,给 QCA9558/QCA9557/AR9342/AR9344/AR7141/AR7161 添加 AR8035 支持。
此方法直接使用 ag71xx 驱动,且不需添加驱动,更不用移植 ag7240/ag934x/arths_gmac。

Linux 内核中 AR8035 的 PHY 驱动名叫做 at803x,位于 drivers/net/phy/at803x.c

修改方法如下:
(所有改动均在 OpenWrt 代码目录)

1. target/linux/ar71xx/config-3.X (X 依据Linux内核版本而定)
在里面添加一行
  1. CONFIG_AT803X_PHY=y
复制代码
这样能确保 at803x 驱动被编译进内核

2. target/linux/ar71xx/files/arch/mips/ath79/mach-XXXX.c (需要添加 AR8035 支持的文件)
在开头部分添加 at803x 的头文件包含语句
  1. #include <linux/platform_data/phy-at803x.h>
复制代码
这样可以向 at803x 驱动传入一些 PHY 初始化设置

在第一个函数前面添加以下两个全局静态变量:
第一个是对 AR803X 设置 txdelay rxdelay。AR934X 跟 AR7141/AR7161 的设置方法不同。

AR7141/AR7161设置如下:
  1. static struct at803x_platform_data mi124_ar8035_data = {
  2.         .enable_rgmii_tx_delay = 1,
  3. };
复制代码

AR934X设置如下:
  1. static struct at803x_platform_data mi124_ar8035_data = {
  2.         .enable_rgmii_rx_delay = 1,
  3.         .fixup_rgmii_tx_delay = 1,
  4. };
复制代码

QCA955X设置如下:
  1. static struct at803x_platform_data mi124_ar8035_data = {
  2.         .enable_rgmii_tx_delay = 1,
  3. };
复制代码

第二个是在注册 eth 设备时向 ag71xx 驱动传入的设置
  1. static struct mdio_board_info mi124_mdio0_info[] = {
  2.         {
  3.                 .bus_id = "ag71xx-mdio.0",
  4.                 .phy_addr = 0,
  5.                 .platform_data = &mi124_ar8035_data,
  6.         },
  7. };
复制代码
这个变量让 ag71xx 在连接 at803x 驱动时向 at803x 驱动传入上面设置的变量。
.phy_addr = 0 指的是指定使用 MDIO 地址为 0 的 PHY,这个需要根据实际情况(在PCB上的bootstrap pin)来设置

修改代码中eth注册代码如下,确保只注册eth0
  1.         ath79_register_mdio(0, 0x0);

  2.         mdiobus_register_board_info(mi124_mdio0_info, ARRAY_SIZE(mi124_mdio0_info));

  3.         ath79_setup_ar934x_eth_cfg(AR934X_ETH_CFG_RGMII_GMAC0);

  4.         /* GMAC0 is connected to an AR8035 Gigabit PHY */
  5.         ath79_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_RGMII;
  6.         ath79_eth0_data.phy_mask = BIT(0);
  7.         ath79_eth0_data.mii_bus_dev = &ath79_mdio0_device.dev;
  8.         ath79_eth0_pll_data.pll_1000 = 0x0e000000;
  9.         ath79_eth0_pll_data.pll_100 = 0x0101;
  10.         ath79_eth0_pll_data.pll_10 = 0x1313;
  11.         ath79_register_eth(0);
复制代码
这里面指定了接口类型为RGMII
这里面最重要的内容为3个pll值,这些值配合 at803x 的 txdelay 跟 rxdelay 能保证AR8035正常使用。上面代码中三个 pll 值是给 AR934X使用的。

如果使用 AR7141/AR7161,请使用下面的 pll 数值:
  1.         ath79_eth0_pll_data.pll_1000 = 0x00110000;
  2.         ath79_eth0_pll_data.pll_100 = 0x0001099;
  3.         ath79_eth0_pll_data.pll_10 = 0x00991099;
复制代码
并且请删掉 ath79_setup_ar934x_eth_cfg 这一行

如果使用 QCA9558/QCA9557,请使用下面的 pll 数值:
  1.         ath79_eth0_pll_data.pll_1000 = 0x86000000;
  2.         ath79_eth0_pll_data.pll_100 = 0x80000101;
  3.         ath79_eth0_pll_data.pll_10 = 0x80001313;
复制代码

注意:
对于 AR934X,有些板子的 AR8035 并没有使用 PHY Addr. 0,此时请把 ath79_eth0_data.phy_mask = BIT(0); 的 BIT(0)从0到15依次试一次。同时要修改上面的 .phy_addr 的值
楼主遇到一个板子,QCA9558 的,使用的 PHY Addr 是 7。。。。。。

以上方法添加的 AR8035 支持能够保证良好的兼容性以及可移植性。

上述方法中 txdelay/rxdelay 设置与 pll 的设置参考了Atheros  LSDK 中 U-Boot (AR934X) 和 redboot (AR7161) 代码中的设置。
QCA9558 的
txdelay/rxdelay 设置与 pll 值来源于实际测算。
AR7242 没遇到对应的板子,故没有对应的 txdelay/rxdelay 设置与 pll 值。
QCA9563 仅支持 SGMII 接口,故只能使用 AR8031 或 AR8033,且官方使用 AR8033,其配置与 RGMII  接口的 AR8035 不同,因此这里无法列出其注册方法。

评分

参与人数 6恩山币 +14 收起 理由
hwylq + 1 我来恩山就是为了看你!
小发籽 + 1 我来恩山就是为了看你!
jianqiumy + 1 亲,你太牛逼了,走,我请你吃鳇鱼头去~~~
yetianbai + 1 泥马,真给力,我要顶!
6331805 + 5 强大的恩山!(以下重复1万次)
点击修改密码 + 5 楼主威武—我就想问问挖掘机技术哪家强?

查看全部评分

我的恩山、我的无线 The best wifi forum is right here.
发表于 2015-6-28 21:57 | 显示全部楼层
支持楼主一下,顺便抢个沙发试试!
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2015-6-28 22:03 | 显示全部楼层
曲调前来捧场
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2015-6-28 22:23 来自手机 | 显示全部楼层
顶一顶更健康
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2015-6-28 23:00 | 显示全部楼层
https://dev.openwrt.org/changeset/45954
这个和楼主的差不多!{:soso_e115:}按着这个方法一直没驱动了!!
     明天试试楼主的方法!!谢啦!

点评

那个方法能用就怪了,关键参数都没设置  发表于 2015-6-28 23:07
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2015-6-29 00:08 | 显示全部楼层
硬件NAT?

点评

交换机都不是,还NAT  发表于 2015-6-29 00:24
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2015-6-29 07:04 | 显示全部楼层
撸过前来支持
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2015-6-29 07:53 | 显示全部楼层
前来支持
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2015-6-29 08:06 | 显示全部楼层
支持大神,能不能看看bcm5358的hg320 wifi怎么驱动呢?自带的3种驱动不能用。谢谢
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2015-6-29 12:29 | 显示全部楼层
谢谢楼主分享。
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2015-6-29 14:42 | 显示全部楼层
楼主在玩什么路由,很高端的样子
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2015-6-29 16:22 | 显示全部楼层
using namespace?貌似现在头文件都不用这种方法了吧?

点评

名称空间和头文件有毛线关系。。。 还有貌似名称空间是C++特性。。。  详情 回复 发表于 2015-6-29 18:19
what are you saying  发表于 2015-6-29 17:30
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2015-6-29 18:19 | 显示全部楼层
tartarus 发表于 2015-6-29 16:22
using namespace?貌似现在头文件都不用这种方法了吧?

名称空间和头文件有毛线关系。。。
还有貌似名称空间是C++特性。。。

点评

命名空间的话头文件就不用.h了  详情 回复 发表于 2015-6-30 11:33
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2015-6-30 11:33 | 显示全部楼层
981213 发表于 2015-6-29 18:19
名称空间和头文件有毛线关系。。。
还有貌似名称空间是C++特性。。。

命名空间的话头文件就不用.h了

点评

不用在这炫耀你学了多少C++了 Linux是纯C的  详情 回复 发表于 2015-6-30 12:17
你知道Linux内核是用C来写的么。。。。。。 还有,那些头文件不带.h的C++程序实际上是因为他include的文件本来就!没!有!扩展名。。。。。。  详情 回复 发表于 2015-6-30 12:14
想的美  详情 回复 发表于 2015-6-30 12:12
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2015-6-30 12:12 | 显示全部楼层
tartarus 发表于 2015-6-30 11:33
命名空间的话头文件就不用.h了

想的美
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

有疑问请添加管理员QQ86788181|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )

GMT+8, 2024-3-29 09:16

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

| 江苏省互联网有害信息举报中心 举报信箱:js12377 | @jischina.com.cn 举报电话:025-88802724 本站不良内容举报信箱:68610888@qq.com 举报电话:0519-86695797

快速回复 返回顶部 返回列表