15AH, San Francisco

California, United States.

Send Your Mail At:

tianyingkejishe@sina.cn

Working Hours

Mon-Sat: 9.30am To 7.00pm

归档标题

Autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et dolore feugait.

月度归档 12月 28, 2023

【LX2160】增加SGMII新网口支持

一、Uboot支持网卡

1、修改设备树

vim components/firmware/uboot/arch/arm/dts/fsl-lx2160a-rdb.dts

&dpmac11 {
        status = "okay";
        phy-handle = <&sgmii_phy1>;
        phy-connection-type = "sgmii";
};

sgmii_phy1: ethernet-phy@3 {
                // RTL8211F PHY
                compatible = "ethernet-phy-id001c.c916", "ethernet-phy-id004d.d072";
                reg = <0x3>;
        };

2、修改驱动

vim components/firmware/uboot/board/freescale/lx2160a/eth_lx2160ardb.c

/*Begin:add by zhaobaoxing for sgmii*/
        srds_s2 = in_le32(&gur->rcwsr[28]) &
                  FSL_CHASSIS3_RCWSR28_SRDS2_PRTCL_MASK;
        srds_s2 >>= FSL_CHASSIS3_RCWSR28_SRDS2_PRTCL_SHIFT;
        /*End:add by zhaobaoxing for sgmii*/

/*Begin:add by zhaobaoxing for sgmii*/
        if (get_board_rev() == 'C') {
                setup_eth_rev_c(srds_s2);
                goto next;
        }
        /*End:add by zhaobaoxing for sgmii*/

/*Begin:add by zhaobaoxing for sgmii*/
        switch (srds_s2){
        case 10:
                wriop_set_phy_address(WRIOP1_DPMAC11, 0,
                                      SGMII_PHY_ADDR1);
                printf("warning: zhaobaoxing for serdes2\r\n");
                break;
        default:
                printf("SerDes2 protocol 0x%x is not supported on LX2160ARDB\n",
                               srds_s2);
                //goto next;
                break;
        }
        /*End:add by zhaobaoxing for sgmii*/

3、修改功能宏定义

vim components/firmware/uboot/configs/lx2160ardb_tfa_defconfig

#CONFIG_DM_ETH=y

二、Linux支持网卡

1、修改设备树

&dpmac11 {
          phy-handle = <&sgmii_phy1>;
          phy-connection-type = "sgmii";
};

sgmii_phy1: ethernet-phy@3 {
     // RTL8211F PHY
     compatible = "ethernet-phy-id001c.c916", "ethernet-phy-id004d.d072";
     reg = <0x3>;
};

三、板卡配置

1、修改rcw文件

vim components/firmware/rcw/lx2160ardb_rev2/XGGFF_PP_HHHH_RR_19_5_2/rcw_2200_750_3200_19_5_2.rcw

SRDS_PRTCL_S1=3 #10G 8  #25G 17 CPRI-10G=3
SRDS_PRTCL_S2=10 #10 #CPRI 5 #-5GC #3#-BBU #5
SRDS_PRTCL_S3=3 #2

2、修改DPC文件

vim components/firmware/mc_utils/config/lx2160a/LX2160A-RDB/dpc-usxgmii.dts

 ports {
                        mac@3 {
                                /*Begin:changed by zhaobaoxing for 10G sfp+*/
                                /*link_type = "MAC_LINK_TYPE_PHY";
                                enet_if = "USXGMII";
                                */
                                /*End:changed by zhaobaoxing for 10G sfp+*/
                                link_type = "MAC_LINK_TYPE_FIXED";
                                enet_if = "XFI";
                        };

                        mac@4 {
                                /*Begin:changed by zhaobaoxing for 10G sfp+*/
                                /*link_type = "MAC_LINK_TYPE_PHY";
                                enet_if = "USXGMII";
                                */
                                /*End:changed by zhaobaoxing for 10G sfp+*/
                                link_type = "MAC_LINK_TYPE_FIXED";
                                enet_if = "XFI";
                        };

                        mac@11 {
                                link_type = "MAC_LINK_TYPE_PHY";
                        };

                        mac@17 {
                                link_type = "MAC_LINK_TYPE_PHY";
                        };
                        mac@18 {
                                link_type = "MAC_LINK_TYPE_PHY";
                        };
                };

3、修改dpl文件

vim components/firmware/mc_utils/config/lx2160a/LX2160A-RDB/dpl-eth.19.dts

connections {

                connection@1{
                        endpoint1 = "dpni@0";
                        endpoint2 = "dpmac@3";
                };

                connection@2{
                        endpoint1 = "dpni@1";
                        endpoint2 = "dpmac@4";
                };

                connection@3{
                        endpoint1 = "dpni@2";
                        endpoint2 = "dpmac@5";
                };

                connection@4{
                        endpoint1 = "dpni@3";
                        endpoint2 = "dpmac@6";
                };

                connection@5{
                        endpoint1 = "dpni@4";
                        endpoint2 = "dpmac@7";
                };

                connection@6{
                        endpoint1 = "dpni@5";
                        endpoint2 = "dpmac@8";
                };

                connection@7{
                        endpoint1 = "dpni@6";
                        endpoint2 = "dpmac@9";
                };

                connection@8{
                        endpoint1 = "dpni@7";
                        endpoint2 = "dpmac@10";
                };

                connection@9{
                        endpoint1 = "dpni@8";
                        endpoint2 = "dpmac@11";
                };

                connection@10{
                        endpoint1 = "dpni@9";
                        endpoint2 = "dpmac@12";
                };

                connection@11{
                        endpoint1 = "dpni@10";
                        endpoint2 = "dpmac@17";
                };

                connection@12{
                        endpoint1 = "dpni@11";
                        endpoint2 = "dpmac@18";
                };
        };

【RK3568】gmac增加SGMII支持

一、SGMII+PHY

1、修改设备树

  • combophy

其中属性 rockchip,sgmii-mac-sel 表示使用的是哪个 gmac:

&combphy1_usq {
     + rockchip,sgmii-mac-sel = <0>; /* Use gmac0 for sgmii */
     status = "okay";
};
  • xpcs
&xpcs {
     status = "okay";
};
  • gmac0
&gmac0 {
     phy-mode = "sgmii";
     rockchip,pipegrf = <&pipegrf>;
     rockchip,xpcs = <&xpcs>;
     snps,reset-gpio = <&gpio2 RK_PC2 GPIO_ACTIVE_LOW>;
     snps,reset-active-low;
     snps,reset-delays-us = <0 20000 100000>;
     assigned-clocks = <&cru SCLK_GMAC0_RX_TX>;
     assigned-clock-parents = <&gmac0_xpcsclk>;
     pinctrl-names = "default";
     pinctrl-0 = <&gmac0_miim>;
     power-domains = <&power RK3568_PD_PIPE>;
     phys = <&combphy1_usq PHY_TYPE_SGMII>;
     phy-handle = <&sgmii_phy>;
     status = "okay";
};
&mdio0 {
     sgmii_phy: phy@1 {
     compatible = "ethernet-phy-ieee802.3-c22";
     reg = <0x1>;
     };
};
  • gmac1
&gmac1 {
     phy-mode = "sgmii";
     rockchip,pipegrf = <&pipegrf>;
     rockchip,xpcs = <&xpcs>;
     snps,reset-gpio = <&gpio2 RK_PC2 GPIO_ACTIVE_LOW>;
     snps,reset-active-low;
     snps,reset-delays-us = <0 20000 100000>;
     assigned-clocks = <&cru SCLK_GMAC1_RX_TX>;
     assigned-clock-parents = <&gmac1_xpcsclk>;
     pinctrl-names = "default";
     pinctrl-0 = <&gmac1_miim>;
     power-domains = <&power RK3568_PD_PIPE>;
     phys = <&combphy1_usq PHY_TYPE_SGMII>;
     phy-handle = <&sgmii_phy>;
     status = "okay";
};
&mdio1 {
    sgmii_phy: phy@1 {
        compatible = "ethernet-phy-ieee802.3-c22";
        reg = <0x1>;
    };
};

2、openwrt系统

驱动补丁:

3、其它系统

无操作

二、SGMII+非PHY

1、修改设备树

&gmac1 {
        phy-mode = "sgmii";

        rockchip,pipegrf = <&pipegrf>;
        rockchip,xpcs = <&xpcs>;

        assigned-clocks = <&cru SCLK_GMAC1_RX_TX>;
        assigned-clock-parents = <&gmac1_xpcsclk>;

        power-domains = <&power RK3568_PD_PIPE>;
        phys = <&combphy2 PHY_TYPE_SGMII>;

        status = "okay";

        fixed-link {
                speed = <1000>;
                full-duplex;
        };
};

2、驱动补丁

三、回环测试

1000baseX 走强制模式,PCS会自己link up,而SGMII 需要协商link, 这种情况一般是switch端没有固定好1000baseX模式的,之前rtl8310 switch端也是更新了很多次固件
我建议可以主控端先做一下回环,飞线要尽量短,
//driver 包产生
CONFIG_NET_PKTGEN=y
cd /proc/net/pktgen/
echo “add_device eth0” > /proc/net/pktgen/kpktgend_0
echo “pkt_size 1440” > /proc/net/pktgen/eth0
echo “count 99999999” > /proc/net/pktgen/eth0
echo “dst_mac FF:FF:FF:FF:FF:FF” > /proc/net/pktgen/eth0
echo “start” > /proc/net/pktgen/pgctrl
通过这种方式产生包,ifconfig 查看统计,确认能收到包。

【Ubuntu】systemback自定义系统镜像和系统备份

一、Systemback简介

Systemback是一个简单的系统备份和恢复应用程序,根据GPLv3许可条款发布。
Systemback的功能包括:
创建系统备份和用户配置文件。
将系统还原到以前的状态,就像Virtualbox的快照功能一样。
从现有安装创建可启动ISO文件。
将系统从一个分区复制到另一个分区。
升级软件。

二、安装 systemback

1、只在ubuntu16.04下在安装systemback

sudo add-apt-repository ppa:nemh/systemback
sudo apt update
sudo apt install systemback

2、在 18.04/19.10/20.04安装systemback

sudo add-apt-repository "deb http://ppa.launchpad.net/nemh/systemback/ubuntu xenial main"
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 382003C2C8B7B4AB813E915B14E4942973C62A1B

sudo apt update
sudo apt install systemback

3、可以从应用程序菜单启动Systemback,需要输入密码才能使用此软件,输入密码后,单击确定按钮

三、使用 systemback

1、创建自定义镜像

2、制作镜像

  • 工作目录需要有读写权限(可自定义)
  • 系统名称,可自定义,也可默认
  • 包含用户数据文件(已有文件也会一共包含在镜像中,不过此时镜像可能较大,视实际情况处理)
  • 创建新的,开始制作

3、制作中

制作时间主要参考以下几个因素:

  • 系统硬件配置(越高越快)
  • 包含的数据大小(越小越快)

4、老版本软件中,可能不会同时生成iso,所以可能需要把sblive转换为iso。对于小于4G的sblive可以直接转换,如下:

5、对于大于4G的可以采用udf文件系统。下面就是具体的解决方法了

解压 .sblive 文件:

mkdir sblive
tar -xf /home/systemback_live_2016-04-27.sblive -C sblive

重命名 syslinux 至 isolinux:

mv sblive/syslinux/syslinux.cfg sblive/syslinux/isolinux.cfg
mv sblive/syslinux sblive/isolinux

安装 cdtools

sudo gedit https://nchc.dl.sourceforge.net/project/cdrtools/alpha/cdrtools-3.02a07.tar.gz
tar -xzvf cdrtools-3.02a07.tar.gz
cd cdrtools-3.02
make
sudo make install

生成 ISO 文件:

/opt/schily/bin/mkisofs -iso-level 3 -r -V sblive -cache-inodes -J -l -b isolinux/isolinux.bin -no-emul-boot -boot-load-size 4 -boot-info-table -c isolinux/boot.cat -o sblive.iso sblive

【lx2160】外围驱动修改

一、DDR调试


1、备份ddr_init.c platform.mk文件
2、修改ddir_init.c udimm参数,由codewarrior生成
3、在platform.mk增加CONFIG_DDR_NODIMM := 1

二、外设调试


1、IIC3调试
修改文件:rcw_2200_750_3200_19_5_2.rcw
修改内容:IIC3_PMUX=2改为0
2、增加OLED驱动
修改文件:fsl-lx2160a-rdb.dts
修改内容:增加
&i2c2 {
clock-frequency = <400000>;
pinctrl-names = “default”;
status = “okay”;
ssd1306: oled@3c {
compatible = “solomon,ssd1306fb-i2c”;
reg = <0x3c>;
//pwms = <&pwm 4 3000>;
//reset-gpios = <&gpio2 7>;
solomon,width = <128>;
solomon,height = <64>;
solomon,page-offset = <0>;
//solomon,com-lrremap;
solomon,com-invdir;
//solomon,com-offset = <0>;
//solomon,lookup-table = /bits/ 8 <0x3f 0x3f 0x3f 0x3f>;
};
};

3、增加5386驱动
注意事项:5386寄存器存在页的概念,需要先选择页,在读写寄存器值,
手册写着寄存器16位,其中前8位是页号,后8位是寄存器地址,数据手册存在误导。
修改文件:fsl-lx2160a-rdb.dts
修改内容:增加
si5386a: sync-clk@68 {
compatible = “newu,si5386a”;
reg = <0x68>;

    };

三、PCI调试


1、pic802
原理图电容型号搞错

四、以太网
1、10G光口调试
restool dpmac info dpmac.6
修改文件:dpc-usxgmii.dts
修改内容:改变
mac@3 {
/Begin:changed by zhaobaoxing for 10G sfp+/
/*link_type = “MAC_LINK_TYPE_PHY”;
enet_if = “USXGMII”;
*/
/End:changed by zhaobaoxing for 10G sfp+/
link_type = “MAC_LINK_TYPE_FIXED”;
enet_if = “XFI”;
};

2、千兆网卡调试
修改文件:fsl-lx2160a-rdb.dts
修改内容:增加
rgmii_phy1: ethernet-phy@1 {
/* AR8035 PHY */
compatible = “ethernet-phy-id001c.c916”, “ethernet-phy-id004d.d072”;
reg = <0x1>;
eee-broken-1000t;
};

五、RTC调试


修改文件:fsl-lx2160a-rdb.dts
修改内容:增加
rtc: rtc@51 {
compatible = “nxp,pcf8563”;
reg = <0x51>;
#clock-cells = <0>;
};

【接口】PCIe M.2 SSD Socket 3接口信号详述

一、接口定义

1、PCIE <–> M2

2、SATA <–> M 2

二、管脚详细说明

M.2接口有SATA和PCIE两种总线,协议分别是AHC 。NVME,非易失性内存主机控制器接口规范(Non-Volatile Memory express),是一个逻辑设备接口规范。

M.2
SATA3.0总线PCIE3.0总线
          AHCI协议        NVME协议
600MB/秒3,200MB/秒

NVME协议跑在PCIE总线上,由于速率的不同,耦合电容的选取值有所不同,PCIE1.0和PCIE2.0的AC耦合电容选取值的范围在75nf-265nf(可以选用0.1uF的电容); PCIE3.0的AC耦合电容选取值的范围在176nf-265nf(可以选用0.22uF的电容);

PCIE时钟需要100nF电容耦合

走SATA的话,耦合电容需要是12nF以下

三、电路参考设计

CPU端设计,需要在TX端加电容,如下图:

M.2接口端设计如下:

        如果PCIE够用,M.2接口最大可以接入四对PCIE。两对也可以使用,只是 速率低一些。

下图便是LED的设计,外部M.2设备会在通讯是操作PIN10,所以板卡设计上可以设计一个LED,也可以做一个座子,可以接入LED线束。

M.2的座子,69PIN是区分设备是PCIE还是SATA设备。

        NC,H 为PCIE

        GND,L为SATA

如果考虑周到一些,可以在电源上再多加一些东西,如下:

使用FB隔离电源,加TVS管,保护后级电源。