AN 957: Time-Sensitive Networking for Drive-on-Chip Design Example

ID 683707
Date 10/30/2021
Public

Visible to Intel only — GUID: llr1629280334040

Ixiasoft

Document Table of Contents

C. YOCTO Build Patch File (cvsx_doc_tsn_2_3-rt) for the TSN Drive-on-Chip Design Example

diff -Naur ./tmp_orig/ip-solutions-ref/meta-local/recipes-bsp/u-boot/files/2018.03/de-eval-board/socfpga.c ./tmp_mod_rt/ip-solutions-ref/meta-local/recipes-bsp/u-boot/files/2018.03/de-eval-board/socfpga.c --- ./tmp_orig/ip-solutions-ref/meta-local/recipes-bsp/u-boot/files/2018.03/de-eval-board/socfpga.c 2021-03-15 14:28:16.000000000 +0000 +++ ./tmp_mod_rt/ip-solutions-ref/meta-local/recipes-bsp/u-boot/files/2018.03/de-eval-board/socfpga.c 2021-07-28 15:51:41.262757585 +0100 @@ -17,7 +17,7 @@ int load_fpga_file(char *, char *, unsigned long); #define EEP_VPD_I2C_ADDR 0x51 -#define EEP_MAC_OFFSET 0x01 +#define EEP_MAC_OFFSET 0x2D #define EEP_SERIAL_OFFSET 0x7 #define SERIAL_LEN 10 @@ -50,7 +50,7 @@ const void *blob = gd->fdt_blob; printf("Reading MAC addresses from EEPROM ...\n"); - i2c_read(EEP_VPD_I2C_ADDR, EEP_MAC_OFFSET, 1, + i2c_read(EEP_VPD_I2C_ADDR, EEP_MAC_OFFSET, 2, enetaddr, sizeof(enetaddr)); eth_env_set_enetaddr_by_index("eth", 0, enetaddr); @@ -169,4 +169,4 @@ #endif return 0; } -#endif \ No newline at end of file +#endif diff -Naur ./tmp_orig/ip-solutions-ref/meta-local/recipes-bsp/u-boot/files/2018.03/de-eval-board/socfpga_cyclone5_de_eval_board_defconfig ./tmp_mod_rt/ip-solutions-ref/meta-local/recipes-bsp/u-boot/files/2018.03/de-eval-board/socfpga_cyclone5_de_eval_board_defconfig --- ./tmp_orig/ip-solutions-ref/meta-local/recipes-bsp/u-boot/files/2018.03/de-eval-board/socfpga_cyclone5_de_eval_board_defconfig 2021-03-15 14:28:16.000000000 +0000 +++ ./tmp_mod_rt/ip-solutions-ref/meta-local/recipes-bsp/u-boot/files/2018.03/de-eval-board/socfpga_cyclone5_de_eval_board_defconfig 2021-07-28 15:51:41.262757585 +0100 @@ -120,8 +120,8 @@ CONFIG_USE_TINY_PRINTF=y # CONFIG_LIB_RAND is not set CONFIG_AUTOBOOT_KEYED=y -CONFIG_AUTOBOOT_PROMPT="autoboot in %d seconds. Stop by pressing \"na\"\n" -CONFIG_AUTOBOOT_STOP_STR="na" +CONFIG_AUTOBOOT_PROMPT="autoboot in %d seconds. Stop by pressing \"n\"\n" +CONFIG_AUTOBOOT_STOP_STR="n" CONFIG_BOOTDELAY=5 CONFIG_NET_RANDOM_ETHADDR=y CONFIG_SYS_NO_FLASH=y diff -Naur ./tmp_orig/ip-solutions-ref/meta-local/recipes-bsp/u-boot/files/2018.03/de-eval-board/socfpga_cyclone5_socdk.h ./tmp_mod_rt/ip-solutions-ref/meta-local/recipes-bsp/u-boot/files/2018.03/de-eval-board/socfpga_cyclone5_socdk.h --- ./tmp_orig/ip-solutions-ref/meta-local/recipes-bsp/u-boot/files/2018.03/de-eval-board/socfpga_cyclone5_socdk.h 2021-03-15 14:28:16.000000000 +0000 +++ ./tmp_mod_rt/ip-solutions-ref/meta-local/recipes-bsp/u-boot/files/2018.03/de-eval-board/socfpga_cyclone5_socdk.h 2021-07-28 15:51:41.262757585 +0100 @@ -17,7 +17,7 @@ #define PHYS_SDRAM_1_SIZE 0x40000000 /* 1GiB on SoCDK */ /* Booting Linux */ -#define CONFIG_BOOTDELAY 3 +#define CONFIG_BOOTDELAY 5 #define CONFIG_BOOTFILE "zImage" #define CONFIG_BOOTARGS "console=ttyS0," __stringify(CONFIG_BAUDRATE) #define CONFIG_BOOTCOMMAND "run callscript; run mmcload; run mmcboot" diff -Naur ./tmp_orig/ip-solutions-ref/meta-local/recipes-ttt-rootfs/images/recovery-rootfs_1.0.0.bb ./tmp_mod_rt/ip-solutions-ref/meta-local/recipes-ttt-rootfs/images/recovery-rootfs_1.0.0.bb --- ./tmp_orig/ip-solutions-ref/meta-local/recipes-ttt-rootfs/images/recovery-rootfs_1.0.0.bb 2021-03-15 14:28:16.000000000 +0000 +++ ./tmp_mod_rt/ip-solutions-ref/meta-local/recipes-ttt-rootfs/images/recovery-rootfs_1.0.0.bb 2021-07-28 15:51:41.266757555 +0100 @@ -1,7 +1,7 @@ DESCRIPTION = "A TTTech recovery root filesystem for update" IMAGE_FEATURES += "ssh-server-openssh" -IMAGE_FSTYPES = "ext4" +IMAGE_FSTYPES = "ext4 tar.gz" IMAGE_INSTALL = "\ packagegroup-core-boot \ diff -Naur ./tmp_orig/ip-solutions-ref/meta-local/recipes-ttt-rootfs/images/sdcard-image_1.0.0.bb ./tmp_mod_rt/ip-solutions-ref/meta-local/recipes-ttt-rootfs/images/sdcard-image_1.0.0.bb --- ./tmp_orig/ip-solutions-ref/meta-local/recipes-ttt-rootfs/images/sdcard-image_1.0.0.bb 2021-03-15 15:04:17.000000000 +0000 +++ ./tmp_mod_rt/ip-solutions-ref/meta-local/recipes-ttt-rootfs/images/sdcard-image_1.0.0.bb 2021-07-28 15:51:41.266757555 +0100 @@ -68,6 +68,10 @@ linuxptp \ devmem2 \ python-pip \ + gdbserver \ + openssh-sftp-server \ + packagegroup-core-ssh-openssh \ + rt-tests \ haveged \ " diff -Naur ./tmp_orig/ip-solutions-ref/meta-local/recipes-ttt-rootfs/init/de-eval-board/ttt-ip-init.sh ./tmp_mod_rt/ip-solutions-ref/meta-local/recipes-ttt-rootfs/init/de-eval-board/ttt-ip-init.sh --- ./tmp_orig/ip-solutions-ref/meta-local/recipes-ttt-rootfs/init/de-eval-board/ttt-ip-init.sh 2021-03-15 14:28:16.000000000 +0000 +++ ./tmp_mod_rt/ip-solutions-ref/meta-local/recipes-ttt-rootfs/init/de-eval-board/ttt-ip-init.sh 2021-07-28 15:51:41.266757555 +0100 @@ -26,16 +26,23 @@ # Get a MAC address from the EEPROM from a given offset. get_mac() { - ret_mac=0 - for i in {1..6}; do - o=$(($(i2cget -y 0 0x51 $i b))) - ret_mac=$(($ret_mac *0x100 +$o)) - done - ret_mac=$(($ret_mac + $1)) + #ret_mac=0 + #for i in {1..6}; do + # o=$(($(i2cget -y 0 0x51 $i b))) + # ret_mac=$(($ret_mac *0x100 +$o)) + #done + #ret_mac=$(($ret_mac + $1)) # hex-print the mac address (12 chars = 6 octets in hex) # ... first sed puts ':' after every 2 chars, i.e., after every octet # ... second sed removes the last ':' trailing the line - printf "%012x" $ret_mac | sed 's/\(.\{2\}\)/\1:/g' | sed 's/:$//' + #printf "%012x" $ret_mac | sed 's/\(.\{2\}\)/\1:/g' | sed 's/:$//' + ret_mac="" + i2cset -y 0 0x51 0 $1 i + for i in 0 1 2 3 4 5; do + ret_mac=$ret_mac$(i2cget -y 0 0x51 | sed 's/0x/:/') + done + echo ${ret_mac#:} + } # Configure delays. @@ -61,15 +68,15 @@ echo -n "edgx_mdio-1:00" > /sys/class/net/sw0p2/phy/mdiobus echo -n "edgx_mdio-1:01" > /sys/class/net/sw0p3/phy/mdiobus - echo -n "edgx_mdio-1:02" > /sys/class/net/sw0p4/phy/mdiobus - echo -n "edgx_mdio-1:03" > /sys/class/net/sw0p5/phy/mdiobus + #echo -n "edgx_mdio-1:02" > /sys/class/net/sw0p4/phy/mdiobus + #echo -n "edgx_mdio-1:03" > /sys/class/net/sw0p5/phy/mdiobus - ip link set dev sw0p1 address $(get_mac 3) - ip link set dev sw0p2 address $(get_mac 4) - ip link set dev sw0p3 address $(get_mac 5) - ip link set dev sw0p4 address $(get_mac 6) - ip link set dev sw0p5 address $(get_mac 7) - ip link set dev sw0ep address $(get_mac 0) + ip link set dev sw0p1 address $(get_mac 45) + ip link set dev sw0p2 address $(get_mac 51) + ip link set dev sw0p3 address $(get_mac 57) + #ip link set dev sw0p4 address $(get_mac 6) + #ip link set dev sw0p5 address $(get_mac 7) + ip link set dev sw0ep address $(get_mac 69) # set default mqprio setup for 3 traffic classes tc qdisc add dev sw0ep root mqprio num_tc 3 map 0 0 0 0 1 1 2 2 2 2 2 2 2 2 2 2 hw 1 mode channel @@ -78,10 +85,10 @@ tc qdisc replace dev sw0ep parent 8001:3 pfifo # Marvell 88E1510P - standard latency mode - set_delays sw0p2 phydev tx 4032 412 109 rx 1083 220 203 - set_delays sw0p3 phydev tx 4032 412 109 rx 1083 220 203 - set_delays sw0p4 phydev tx 4032 412 109 rx 1083 220 203 - set_delays sw0p5 phydev tx 4032 412 109 rx 1083 220 203 + set_delays sw0p2 phydev tx 1663 156 92 rx 1140 180 207 + set_delays sw0p3 phydev tx 1663 156 92 rx 1140 180 207 + #set_delays sw0p4 phydev tx 4032 412 109 rx 1083 220 203 + #set_delays sw0p5 phydev tx 4032 412 109 rx 1083 220 203 } stop() @@ -94,7 +101,7 @@ case "$1" in start|restart|force-reload) echo "Configuring FPGA ..." - echo " Hardware S/N: "$(print_serial) + #echo " Hardware S/N: "$(print_serial) start ;; stop) diff -Naur ./tmp_orig/ip-solutions-ref/meta-local/recipes-ttt-rootfs/init-ifupdown/de-eval-board/interfaces ./tmp_mod_rt/ip-solutions-ref/meta-local/recipes-ttt-rootfs/init-ifupdown/de-eval-board/interfaces --- ./tmp_orig/ip-solutions-ref/meta-local/recipes-ttt-rootfs/init-ifupdown/de-eval-board/interfaces 2021-03-15 14:28:16.000000000 +0000 +++ ./tmp_mod_rt/ip-solutions-ref/meta-local/recipes-ttt-rootfs/init-ifupdown/de-eval-board/interfaces 2021-07-28 15:51:41.266757555 +0100 @@ -10,7 +10,7 @@ auto sw0ep:1 iface sw0ep:1 inet static - address 192.168.0.1 + address 192.168.1.20 netmask 255.255.255.0 auto br0 @@ -20,8 +20,7 @@ up ip link set dev sw0p1 master $IFACE up up ip link set dev sw0p2 master $IFACE up up ip link set dev sw0p3 master $IFACE up - up ip link set dev sw0p4 master $IFACE up - up ip link set dev sw0p5 master $IFACE up + up ip link set $IFACE type bridge stp_state 1 up mstpctl addbridge $IFACE up mstpctl setforcevers $IFACE mstp diff -Naur ./tmp_orig/poky/meta-tsn-base/recipes-sysrepo/libyang/libyang_1.0.164.bb ./tmp_mod_rt/poky/meta-tsn-base/recipes-sysrepo/libyang/libyang_1.0.164.bb --- ./tmp_orig/poky/meta-tsn-base/recipes-sysrepo/libyang/libyang_1.0.164.bb 2021-03-15 14:28:29.000000000 +0000 +++ ./tmp_mod_rt/poky/meta-tsn-base/recipes-sysrepo/libyang/libyang_1.0.164.bb 2021-07-28 15:51:40.054766660 +0100 @@ -4,7 +4,7 @@ LICENSE = "BSD-3-Clause" LIC_FILES_CHKSUM = "file://LICENSE;md5=2982272c97a8e417a844857ca0d303b1" -SRC_URI = "git://github.com/CESNET/libyang.git;protocol=https;branch=devel" +SRC_URI = "git://github.com/CESNET/libyang.git;protocol=https;nobranch=1" #PR ="r1" #SRCREV = "v${PV}" diff -Naur ./tmp_orig/poky/meta-tsn-bsp/conf/machine/de-eval-board.conf ./tmp_mod_rt/poky/meta-tsn-bsp/conf/machine/de-eval-board.conf --- ./tmp_orig/poky/meta-tsn-bsp/conf/machine/de-eval-board.conf 2021-03-15 14:28:31.000000000 +0000 +++ ./tmp_mod_rt/poky/meta-tsn-bsp/conf/machine/de-eval-board.conf 2021-07-28 15:51:41.122758637 +0100 @@ -7,7 +7,7 @@ # disable rtc support MACHINE_FEATURES_BACKFILL_CONSIDERED += "rtc" -IMAGE_FSTYPES = "wic.gz" +IMAGE_FSTYPES = "wic.gz tar.gz" WKS_FILE = "sdimage-cyclone5-de-eval-board.wks" KMACHINE = "cyclone5" diff -Naur ./tmp_orig/poky/meta-tsn-bsp/recipes-bsp/u-boot-scr/files/de-eval-board/u-boot.script ./tmp_mod_rt/poky/meta-tsn-bsp/recipes-bsp/u-boot-scr/files/de-eval-board/u-boot.script --- ./tmp_orig/poky/meta-tsn-bsp/recipes-bsp/u-boot-scr/files/de-eval-board/u-boot.script 2021-03-15 14:28:31.000000000 +0000 +++ ./tmp_mod_rt/poky/meta-tsn-bsp/recipes-bsp/u-boot-scr/files/de-eval-board/u-boot.script 2021-07-28 15:51:41.122758637 +0100 @@ -3,13 +3,13 @@ setenv bootimage zImage setenv fdtimage socfpga_cyclone5_de-eval-board.dtb setenv fpgaimage socfpga.rbf -setenv fpgadata 0x3000000 +#setenv fpgadata 0x3000000 -echo --- Programming FPGA --- +echo --- Not Programming FPGA --- -load mmc 0:1 $fpgadata $fpgaimage +#load mmc 0:1 $fpgadata $fpgaimage bridge disable -fpga load 0 $fpgadata $filesize +#fpga load 0 $fpgadata $filesize bridge enable diff -Naur ./tmp_orig/poky/meta-tsn-bsp/recipes-kernel/linux/5.4/dts/socfpga_cyclone5_de-eval-board_default.dts ./tmp_mod_rt/poky/meta-tsn-bsp/recipes-kernel/linux/5.4/dts/socfpga_cyclone5_de-eval-board_default.dts --- ./tmp_orig/poky/meta-tsn-bsp/recipes-kernel/linux/5.4/dts/socfpga_cyclone5_de-eval-board_default.dts 2021-03-15 14:28:31.000000000 +0000 +++ ./tmp_mod_rt/poky/meta-tsn-bsp/recipes-kernel/linux/5.4/dts/socfpga_cyclone5_de-eval-board_default.dts 2021-07-28 15:51:41.150758427 +0100 @@ -47,9 +47,9 @@ compatible = "snps,dwmac-mdio"; /* Micrel KSZ9031 */ - hps_phy1: phy@3 { + hps_phy1: phy@4 { compatible = "ethernet-phy-ieee802.3-c22"; - reg = <0x3>; + reg = <0x4>; rxc-skew-ps = <1680>; /* 780 ps */ rxdv-skew-ps = <420>; /* 0 ps */ txc-skew-ps = <1860>; /* 960 ps */ @@ -102,9 +102,9 @@ &i2c0 { status = "okay"; - hps1_eth_eeprom: eeprom@50 { + hps1_eth_eeprom: eeprom@51 { compatible = "atmel,at24c02"; - reg = <0x50>; + reg = <0x51>; }; }; diff -Naur ./tmp_orig/poky/meta-tsn-bsp/recipes-kernel/linux/linux-tttech-industrial_5.4.bb ./tmp_mod_rt/poky/meta-tsn-bsp/recipes-kernel/linux/linux-tttech-industrial_5.4.bb --- ./tmp_orig/poky/meta-tsn-bsp/recipes-kernel/linux/linux-tttech-industrial_5.4.bb 2021-03-15 14:28:31.000000000 +0000 +++ ./tmp_mod_rt/poky/meta-tsn-bsp/recipes-kernel/linux/linux-tttech-industrial_5.4.bb 2021-07-28 15:55:36.216992574 +0100 @@ -1,6 +1,14 @@ PR = "r0" +LINUX_VERSION_PATCHLEVEL ?= "40-rt24" + include linux-tttech-industrial_5.4.inc +# patch it to 5.4.40-rt24 +SRC_URI += "file://Upgrade-to-kernel-version-5.4.40-rt24.patch" + # machine specific kernel configuration fragment SRC_URI += "file://${MACHINE}.cfg" + +# basic rt-preempt configuration +SRC_URI += file://preempt.cfg