Navigation

    全志在线开发者论坛

    • Register
    • Login
    • Search
    • Categories
    • Tags
    • 在线文档
    • 社区主页
    1. Home
    2. axw_fae
    A
    • Profile
    • Following 0
    • Followers 0
    • my integral 572
    • Topics 4
    • Posts 9
    • Best 3
    • Groups 0

    axw_faeLV 4

    @axw_fae

    572
    integral
    4
    Reputation
    5
    Profile views
    9
    Posts
    0
    Followers
    0
    Following
    Joined Last Online

    axw_fae Unfollow Follow

    Best posts made by axw_fae

    • Reply: D1-H千兆网络丢包问题

      我把 gmac 修改成可以在线调整 tx_delay , rx_delay 部份放到这一篇了

      f133 挖坑3 ,RMII , RGMII 设置

      你可以测试看看,基本上我认為应该是调整一下,就可以解决你的问题了

      posted in D1系列-RISC-V
      A
      axw_fae
    • f133 挖坑3 ,RMII , RGMII 设置

      天天挖坑,老是有坑在!

      MQ-R 的 dts 默认没有把 gmac 使能,故要在 dts 开头处把 gmac 加上

              compatible = "allwinner,d1", "arm,sun20iw1p1", "allwinner,sun20iw1p1";
      
              aliases {
                      dsp0 = &dsp0;
                      dsp0_gpio_int= &dsp0_gpio_int;
                      gmac0 = &gmac0;
              };
      

      另外 DTS 默认驱动能力只有 10 , 若是非自制在同一片板子,使用开发版自行串接的,驱动能力可能不行! 故可以自上改动一些

      // mq-r
              gmac_pins_a: gmac@0 {
                      pins = "PG0", "PG1", "PG2", "PG3",
                             "PG4", "PG5", "PG6", "PG7",
                             "PG8", "PG9" , "PG10",
                             "PG12", "PG13", "PG14", "PG15";
                      function = "gmac0";
      //              drive-strength = <10>;
                      drive-strength = <40>;
              };
      
      

      另外很多文章中介绍使用 iperf3 来测试! 但是运行中有问题

      当连接在 百兆
      iperf3 -s ok
      iperf3-c ok
      当连接在 千兆
      iperf3 -s ok
      iperf3 -c 连 10兆 都达不到

      若使用 make menuconfig 中改用 iperf 版本
      以上都正常了!

      异常
      scrnli_2023_6_19 下午4-58-21.png

      正常
      scrnli_2023_6_19 下午5-00-01.png

      接收可达 400兆
      scrnli_2023_6_19 下午5-02-34.png

      另外 tx_delay , rx_delay 在千兆中调整十分重要! 不能直接使用 dts 中默认配的那一个! 有自已编写了一些测试工具! 若有人有需求可以提供!

      posted in 编译和烧写问题专区
      A
      axw_fae
    • Reply: D1-H千兆网络丢包问题

      d1-h 和 d1s (f133) 架构是一样的,之前调试时也出过类似的问题,你可以参考下面这一篇

      f133 挖坑3 ,RMII , RGMII 设置

      另外,你的版子是自已画的,还是用啥开发版吗? 那开发版有试过其他人的固件有一样的问题吗?

      若是自已画的 RGMII 上的走线要尽量一样等长,不要过 via ! 并且要注意 gnd 的铺设防止串音!

      若是别人的固件可以,你的固件有问题! 那就要查看看 dts 中的 tx_delay , rx_delay 的配置!
      这个配合的 phy 芯片、pcb 走线 都会造成异动,不能造抄!

      posted in D1系列-RISC-V
      A
      axw_fae

    Latest posts made by axw_fae

    • Reply: 全志 T113核心板驱动开发环境搭建

      不需要 mboot 吗? pack 就行了?

      posted in 其它全志芯片讨论区
      A
      axw_fae
    • Reply: D1-H千兆网络丢包问题

      我把 gmac 修改成可以在线调整 tx_delay , rx_delay 部份放到这一篇了

      f133 挖坑3 ,RMII , RGMII 设置

      你可以测试看看,基本上我认為应该是调整一下,就可以解决你的问题了

      posted in D1系列-RISC-V
      A
      axw_fae
    • Reply: f133 挖坑3 ,RMII , RGMII 设置

      在修改 tx_delay , rx_delay 需要在dts 中配置,每次都要重新再烧写过! 所以在调试时需要耗费很多气力。只要修改一下原本的驱动,就可以无需另外的工具,就可以进行的调试

      驱动位置 lichee/linux-5.4/drivers/net/ethernet/allwinner/sunxi-gmac.c

      原代码

      static ssize_t mii_write_store(struct device *dev,
                      struct device_attribute *attr, const char *buf, size_t count)
      {
              struct net_device *ndev = NULL;
              struct geth_priv *priv = NULL;
              int ret = 0;
              u16 reg, addr, val;
              char *ptr;
      
              ptr = (char *)buf;
      
              if (dev == NULL) {
                      pr_err("Argment is invalid\n");
                      return count;
              }
      
              ndev = dev_get_drvdata(dev);
              if (ndev == NULL) {
                      pr_err("Net device is null\n");
                      return count;
              }
      
              priv = netdev_priv(ndev);
              if (priv == NULL) {
                      pr_err("geth_priv is null\n");
                      return count;
              }
      
              if (!netif_running(ndev)) {
                      pr_warn("eth is down!\n");
                      return count;
              }
      
              ret = sunxi_parse_write_str(ptr, &addr, &reg, &val);
              if (ret)
                      return ret;
      
              priv->mii_reg.reg = reg;
              priv->mii_reg.addr = addr;
              priv->mii_reg.value = val;
      
              return count;
      }
      

      攸改过后

      static ssize_t mii_write_store(struct device *dev,
                      struct device_attribute *attr, const char *buf, size_t count)
      {
              struct net_device *ndev = NULL;
              struct geth_priv *priv = NULL;
              int ret = 0;
              u16 reg, addr, val;
              char *ptr;
      
              ptr = (char *)buf;
      
              if (dev == NULL) {
                      pr_err("Argment is invalid\n");
                      return count;
              }
      
              ndev = dev_get_drvdata(dev);
              if (ndev == NULL) {
                      pr_err("Net device is null\n");
                      return count;
              }
      
              priv = netdev_priv(ndev);
              if (priv == NULL) {
                      pr_err("geth_priv is null\n");
                      return count;
              }
      
              if (!netif_running(ndev)) {
                      pr_warn("eth is down!\n");
                      return count;
              }
      
              ret = sunxi_parse_write_str(ptr, &addr, &reg, &val);
              if (ret)
                      return ret;
      
              if((2 == reg) || (3 == reg))
              {
                      u32 clk_value;
                      u8 tdelay;
                      u8 rdelay;
      
                      clk_value = readl(priv->base_phy);
      
                      tdelay = (clk_value >> 10) & 0x07;
                      rdelay = (clk_value >> 5) & 0x1f;
      
                      printk("gmac delay read  tx--> %x , rx--> %x \n", tdelay, rdelay);
      
                      if(2 == reg)
                      {
                              tdelay = (val & 0x07);
                      }
                      else
                      {
                              rdelay = (val & 0x1f);
                      }
      
                      printk("gmac delay write tx--> %x , rx--> %x \n", tdelay, rdelay);
      
                      clk_value &= ~((0x07 << 10)| (0x1F << 5));
                      clk_value |= ((tdelay << 10) | (rdelay << 5));
      
                      writel(clk_value, priv->base_phy);
              }
      
              priv->mii_reg.reg = reg;
              priv->mii_reg.addr = addr;
              priv->mii_reg.value = val;
      
              return count;
      }
      

      使用方式如下:

      • 先使用 ifconfig eth0 192.168.1.100 ,啟动 gmac 驱动

      • 使用下面命令,进行 tx_delay 修改,3 个参数 , 第一个随便设,第二个需设置 2 , 第三个為 tx_delay 设置值,范围 0x0 ~ 0x7

      root@TinaLinux:/# echo 0 2 3 > /sys/devices/platform/soc@3000000/4500000.eth/mii_write
      [   66.901376] gmac delay read  tx--> 2 , rx--> d 
      [   66.911086] gmac delay write tx--> 3 , rx--> d 
      
      root@TinaLinux:/# echo 0 2 5 > /sys/devices/platform/soc@3000000/4500000.eth/mii_write
      [   92.944996] gmac delay read  tx--> 3 , rx--> d 
      [   92.954582] gmac delay write tx--> 5 , rx--> d 
      
      • 使用下面命令,进行 rx_delay 修改,3 个参数 , 第一个随便设,第二个需设置 3 , 第三个為 rx_delay 设置值,范围 0x0 ~ 0x1f , 输入需要使用 16 进位
      root@TinaLinux:/# echo 0 3  a > /sys/devices/platform/soc@3000000/4500000.eth/mi_write 
      [  108.317230] gmac delay read  tx--> 5 , rx--> d 
      [  108.327034] gmac delay write tx--> 5 , rx--> a 
      
      root@TinaLinux:/# echo 0 3  1c > /sys/devices/platform/soc@3000000/4500000.eth/mii_write
      [  120.347615] gmac delay read  tx--> 5 , rx--> a 
      [  120.357371] gmac delay write tx--> 5 , rx--> 1c
      
      root@TinaLinux:/# echo 0 3  1c > /sys/devices/platform/soc@3000000/4500000.eth/mii_write
      [  126.976849] gmac delay read  tx--> 5 , rx--> 1c 
      [  126.986301] gmac delay write tx--> 5 , rx--> 1c 
      
      • 测试时先使用外机 ping d1s ,调整 rx_delay 值后,使用 ifconfig 查看 rx_byte 及 crc 值,看是否有正常接收,并且无 crc 。 找出某一区间都正常,例如 4 ~ c 都是正常的! 此时将 rx_delay 设置在 8 。

      • rx_delay 设置后,在用 d1s ping 外机,调整 tx_delay 值,看在什么区间可以正常 ping 不丢包, 一样取中间值

      posted in 编译和烧写问题专区
      A
      axw_fae
    • Reply: D1-H千兆网络丢包问题

      @jxzhb 在 D1-H千兆网络丢包问题 中说:

      板子是自己画的,只有一个测试固件没有丢包。我们自己的固件DTS是和测试固件一致的

      只要别人的固件没丢包! 那肯定就 3 个地方!

      drive-strength / rx_delay / tx_delay 参数配置! 你们有别人的固件原码的 dts 吗? 和你们配置是一样的吗?

      若没有可以改一下程序 gamc.c ,在线配置改动一下! 测试 rx_delay , tx_delay 的参数!

      先用外机来 ping
      然后先调 rx_dealy 0 ~ 31 看看那一些值 crc 不报错! 取中间值
      再然后调 tx_dealy 0 ~ 7 , 看看啥值 ping 不丢包,一样取中间值

      反正我是这样改的! 用 mq-r 的开发版转到自已的千兆 phy ,是可以正常工作!

      posted in D1系列-RISC-V
      A
      axw_fae
    • Reply: D1-H千兆网络丢包问题

      d1-h 和 d1s (f133) 架构是一样的,之前调试时也出过类似的问题,你可以参考下面这一篇

      f133 挖坑3 ,RMII , RGMII 设置

      另外,你的版子是自已画的,还是用啥开发版吗? 那开发版有试过其他人的固件有一样的问题吗?

      若是自已画的 RGMII 上的走线要尽量一样等长,不要过 via ! 并且要注意 gnd 的铺设防止串音!

      若是别人的固件可以,你的固件有问题! 那就要查看看 dts 中的 tx_delay , rx_delay 的配置!
      这个配合的 phy 芯片、pcb 走线 都会造成异动,不能造抄!

      posted in D1系列-RISC-V
      A
      axw_fae
    • f133 挖坑3 ,RMII , RGMII 设置

      天天挖坑,老是有坑在!

      MQ-R 的 dts 默认没有把 gmac 使能,故要在 dts 开头处把 gmac 加上

              compatible = "allwinner,d1", "arm,sun20iw1p1", "allwinner,sun20iw1p1";
      
              aliases {
                      dsp0 = &dsp0;
                      dsp0_gpio_int= &dsp0_gpio_int;
                      gmac0 = &gmac0;
              };
      

      另外 DTS 默认驱动能力只有 10 , 若是非自制在同一片板子,使用开发版自行串接的,驱动能力可能不行! 故可以自上改动一些

      // mq-r
              gmac_pins_a: gmac@0 {
                      pins = "PG0", "PG1", "PG2", "PG3",
                             "PG4", "PG5", "PG6", "PG7",
                             "PG8", "PG9" , "PG10",
                             "PG12", "PG13", "PG14", "PG15";
                      function = "gmac0";
      //              drive-strength = <10>;
                      drive-strength = <40>;
              };
      
      

      另外很多文章中介绍使用 iperf3 来测试! 但是运行中有问题

      当连接在 百兆
      iperf3 -s ok
      iperf3-c ok
      当连接在 千兆
      iperf3 -s ok
      iperf3 -c 连 10兆 都达不到

      若使用 make menuconfig 中改用 iperf 版本
      以上都正常了!

      异常
      scrnli_2023_6_19 下午4-58-21.png

      正常
      scrnli_2023_6_19 下午5-00-01.png

      接收可达 400兆
      scrnli_2023_6_19 下午5-02-34.png

      另外 tx_delay , rx_delay 在千兆中调整十分重要! 不能直接使用 dts 中默认配的那一个! 有自已编写了一些测试工具! 若有人有需求可以提供!

      posted in 编译和烧写问题专区
      A
      axw_fae
    • F133 linux dts 配置值问题

      在测试购买的 F133 板子,飞线到自已的板子上时! 一直产生资料报错!

      不停的找错时,发现 dts 中有関 drive-strength 的配置值有正相関!

      看到 dts 中这值,有 3 种 10 , 20 , 30 。

      原本设置 10 时会报错! 改设置成 30 时! 报错大大的减少。

      这个没看到有文件说明! 全志的相関文档都说,要看 gpio ,但是 gpio 的 pdf 中,也没有针对这值的说明! 那这个值最大值是多少?

      我看 datasheet 中写的是! 默认 io 是 4mA 不是这个对应的数值是多少! 最大是 6mA 。

      posted in D1系列-RISC-V
      A
      axw_fae
    • f133 挖坑2 ,修改 uart0 -> uart3 设置

      按很多大老的分享! https://bbs.aw-ol.com/topic/1673/全志芯片tina-linux-修改-uart-引脚-uart端口?lang=zh-CN

      按其操作! 结果卡死在这儿

      scrnli_2023_6_6 下午4-44-31.png

      自已一顿操作! 发现一些和一些大老分享不一样的地方

             uart3_pins_a: uart3_pins@0 {  /* for mq-r uart3 */
                      pins = "PB6", "PB7";
                      function = "uart3";
                      muxsel = <7>;
                      drive-strength = <10>;
                      bias-pull-up;
              };
      
              uart3_pins_b: uart3_pins@1 {  /* For mq-r uart3 */
                      pins = "PB6", "PB7";
                      function = "gpio_in";
              };
      
      

      function 很多大老指向 uart0 ,但是这个明明是给 uart3 用的!
      再者 muxsel 必需要改成 7 ,这个才是 uart3 功能

      /*
      
      &uart0 {
              pinctrl-names = "default", "sleep";
              pinctrl-0 = <&uart0_pins_a>;
              pinctrl-1 = <&uart0_pins_b>;
              status = "okay";
      };
      
      &uart3 {
              compatible = "allwinner,sun20iw1-dsp-uart";
              pinctrl-names = "default", "sleep";
              pinctrl-0 = <&uart3_pins_a>;
              pinctrl-1 = <&uart3_pins_a>;
              status = "disabled";
      };
      
      mq-r
      */
      
      &uart0 {
              pinctrl-names = "default", "sleep";
              pinctrl-0 = <&uart0_pins_a>;
              pinctrl-1 = <&uart0_pins_b>;
              status = "disabled";
      };
      
      &uart3 {
              pinctrl-names = "default", "sleep";
              pinctrl-0 = <&uart3_pins_a>;
              pinctrl-1 = <&uart3_pins_b>;
              status = "okay";
      };
      
      

      这一句一定要删掉,要不然就开不起来
      compatible = "allwinner,sun20iw1-dsp-uart";

      目前坑还在接著挖! 有新坑再上来 po 文

      posted in 编译和烧写问题专区
      A
      axw_fae
    • f133 挖坑_1 ,环境配置问题

      按 https://mangopi.org/ 的资料,使用 https://github.com/mangopi-sbc/Tina-Linux 进行编译。

      结果编不过 错误讯息 "internal compiler error : Illegal instruction"

      55-21.png

      在不停的找错之下! 原来是 gcc 的版本不对! 太新了! 必需要用老的才行! 有文章说是 cpu 不支持 avx 才会报错!

      解决方法使用 riscv64-linux-x86_64-20200528.tar.xz 来编译就可以通过使用了

      scrnli_2023_6_612-04-59.png

      我是為了省空间! 使用 ln 指过去给 gcc 用

      ps. 安装过程中
      prebuilt.tar.gz
      dl.tar
      riscv64-linux-x86_64-20200528.tar.xz
      gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi.tar.xz

      这 4 个档解开就没用了! 可以删掉! vm 中空间能省就要省

      posted in 编译和烧写问题专区
      A
      axw_fae