【转】AR8035 支持的方法

2016-04-21 备忘 4859 0

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内核版本而定)

在里面添加一行

CONFIG_AT803X_PHY=y

这样能确保 at803x 驱动被编译进内核

2. target/linux/ar71xx/files/arch/mips/ath79/mach-XXXX.c (需要添加 AR8035 支持的文件)

在开头部分添加 at803x 的头文件包含语句

#include <linux/platform_data/phy-at803x.h>

这样可以向 at803x 驱动传入一些 PHY 初始化设置

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

AR7141/AR7161设置如下:

static struct at803x_platform_data mi124_ar8035_data = {.enable_rgmii_tx_delay = 1,
};

AR934X/QCA955X设置如下:

static struct at803x_platform_data mi124_ar8035_data = {.enable_rgmii_rx_delay = 1,.fixup_rgmii_tx_delay = 1,
};

第二个是在注册 eth 设备时向 ag71xx 驱动传入的设置

static struct mdio_board_info mi124_mdio0_info[] = {{.bus_id = "ag71xx-mdio.0",.phy_addr = 0,.platform_data = &mi124_ar8035_data,},
};

这个变量让 ag71xx 在连接 at803x 驱动时向 at803x 驱动传入上面设置的变量。
.phy_addr = 0 指的是指定使用 MDIO 地址为 0 的 PHY,这个需要根据实际情况(在PCB上的bootstrap pin)来设置

修改代码中eth注册代码如下,确保只注册eth0

   ath79_register_mdio(1, 0x0);ath79_register_mdio(0, 0x0);mdiobus_register_board_info(mi124_mdio0_info, ARRAY_SIZE(mi124_mdio0_info));ath79_setup_ar934x_eth_cfg(AR934X_ETH_CFG_RGMII_GMAC0 | AR934X_ETH_CFG_SW_ONLY_MODE);/* GMAC0 is connected to an AR8035 Gigabit PHY */ath79_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_RGMII;ath79_eth0_data.phy_mask = BIT(0);ath79_eth0_data.mii_bus_dev = &ath79_mdio0_device.dev;ath79_eth0_pll_data.pll_1000 = 0x0e000000;ath79_eth0_pll_data.pll_100 = 0x0101;ath79_eth0_pll_data.pll_10 = 0x1313;ath79_register_eth(0);

这里面指定了接口类型为RGMII
这里面最重要的内容为3个pll值,这些值配合 at803x 的 txdelay 跟 rxdelay 能保证AR8035正常使用。上面代码中三个 pll 值是给 AR934X使用的。

如果使用 AR7141/AR7161,请使用下面的 pll 数值:

        ath79_eth0_pll_data.pll_1000 = 0x00110000;ath79_eth0_pll_data.pll_100 = 0x0001099;ath79_eth0_pll_data.pll_10 = 0x00991099;

并且请删掉 ath79_setup_ar934x_eth_cfg 这一行

如果使用 QCA9558/QCA9557,请使用下面的 pll 数值:

        ath79_eth0_pll_data.pll_1000 = 0x96000000;ath79_eth0_pll_data.pll_100 = 0x80000101;ath79_eth0_pll_data.pll_10 = 0x80001313;

并且请增加一行:ath79_setup_ar934x_eth_rx_delay(3, 3);

注意:
对于 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 值来源于逆向分析。
QCA9563 没遇到对应的板子,故没有对应的 txdelay/rxdelay 设置与 pll 值。AR7242 也是如此。
AR7242 + AR8021 因为没人愿意借楼主板子来测试,因此无解。

OpenWrt ar71xx 添加原生 AR8035 支持的方法 (AR934X/AR7161/QCA9558)
http://www.right.com.cn/forum/thread-168504-1-1.html

AR8035 linux相关推荐

  1. linux ns级定时器_预热 | 万众期待的单片机、Linux二合一的STM32MP157开发板亮相

    STM32mp157  GUI操作体验视频 GUI架构简介 支持多种应用场景的HMI2.0应用,根据应用的类型将整个UI分为五个大类:多媒体,智能家电,卫生医疗,公共服务,系统.均支持于100ask_ ...

  2. 关于基于高通的AP方案 AR9344 + AR9382 + AR8035

    模块规格书 https://wenku.baidu.com/view/52d76c43fd0a79563d1e7208.html CPU: AR9344 RF: AR9382 (模块25) https ...

  3. Mastering Embedded Linux Programming 学习 (五)在百问网157开发板上,解决网络配置问题

    Mastering Embedded Linux Programming 学习 (五)在百问网157开发板上,解决网络配置问题 思考.参考 搜索发现,需要配置设备树,参考这个链接 修改设备树 找到百问 ...

  4. 移植Linux 5.5.3 到 TI AM4372平台

    前言 瘟疫期间,闲着无聊移植了从www.kernel.org上下载的linux 5.5.3到st的stm32f429-discovery和大升电气的am4372平台上. 大部分时间是在修改dts和me ...

  5. 过滤Linux下不同大小的文件,linux查找当前目录下 M/G 大小的文件,删除Linux下指定大小的文件

    过滤Linux下不同大小的文件,linux查找当前目录下 M/G 大小的文件,删除Linux下指定大小的文件 find ./ -type f -size +1G| xargs rm 在清理系统日志文件 ...

  6. linux环境下nacos的安装+启动,阿里云服务器安装nacos

    nacos安装+启动(linux环境): 基础:安装java环境 官网下载压缩包:如 nacos-server-1.2.1.tar.gz 放在自定义目录下 # 解压 tar -xvf nacos-se ...

  7. Alibaba Cloud Linux 2.1903 LTS 64位服务器yum源下载404,Alibaba Cloud Linux 2实例中使用docker-ce、epel等YUM源安装软件失败

    [Alibaba Cloud Linux 2.1903 LTS 64位]服务器yum源下载404 failure: repodata/repomd.xml from docker-ce-stable: ...

  8. Linux下创建硬链接,文件访问为空,提示:xxxx: 符号连接的层数过多

    Linux下创建软链接|硬链接,文件访问为空,提示:x x x: 符号连接的层数过多. 原因:创建符号链接的时候未使用绝对路径,无论是源文件路径还是目标路径,都需要使用绝对路径. 如: ln -s / ...

  9. 作为一个java程序员,常用的linux命令(越攒越多)

    本篇记录我在工作中不断遇到的常用的linux命令,并进行总结,时常更新! 1. 升级服务时先停止服务,然后进行替换 linux中杀进程时候,如果你是知道它所占用的端口号的话,可以通过 netstat ...

  10. 设置linux初始root密码

    简单一步设置linux第一个root密码 sudo passwd root #输入当前账户密码 #输入准备设置的root密码 #确认密码 如下所示:

最新文章

  1. 学计算机技术基础B课件,大学计算机基础试题一
  2. SpringCloud(第 002 篇)简单电影微服务类(消费方,而提供方为用户微服务)
  3. 查看linux机器是32位还是64位的方法
  4. cad画流程图的插件_CAD制图太慢?62款辅助插件汇总,款款精品,效率提升80%
  5. 利用Caffe训练模型(solver、deploy、train_val) + python如何使用已训练模型
  6. 多媒体制作技术心得体会_多媒体课件制作学习心得体会
  7. wxWidgets:wxStaticBox类用法
  8. fraction在java_Fraction.java
  9. wpf使用入式mysql_c#之wpf:从mysql数据库中数据绑定到页面上
  10. SqlServer智能提示工具
  11. 用MATLAB画出双极性NRZ,[工学]通信原理MATLAB仿真教程第7章.ppt
  12. 基于单片机的智能家居环境监控系统的设计
  13. 数据科学库(六)pandas中的时间序列
  14. 聊斋2聂小倩java华语版,[转载]《聊斋志异》2.聂小倩(二)蒲松龄 著  宋德利 译...
  15. 1 网站压力测试工具 WEB性能测试 Web Bench
  16. 无法安装X64 在计算机找到X32,怎么看电脑适合装32位还是64位
  17. mysql locate不走索引_索引失效的情况及原因定位
  18. 英飞凌Traveo II SDL(Sample Driver Lib)简介
  19. NAND flash和NOR flash 基础知识
  20. android应用更新升级

热门文章

  1. 安全测试-Drozer安全测试框架实践记录篇
  2. SQL笔记之开天辟地
  3. Chapter 2 大规模MIMO系统信息论基础及信道容量分析
  4. DiskFileUpload 中文乱码 解决方法
  5. bandzip关闭右键新建文件夹选项方法步骤
  6. usbcan系列便携式can分析仪
  7. HTML CSS学生网页设计,网页设计与制作(HTML+CSS)
  8. unity ugui序列帧动画
  9. 全国所有县的12.5m分辨率DEM数据制作与分享
  10. SHP(shapefile)文件