Attempting to read the SERDES XPCS registers from Linux following the S32G3 SerDes Subsystem Reference Manual and it does not return valid results. I wrote the following script to attempt this, would appreciate if someone could review this and provide a method if one already exists.
#!/bin/bash
# Write to S32G3 SERDES XPCS registers, reference
# S32G3 SerDes Subsystem Reference Manual section 5.2 Accessing XPCS registers
serdes=$1 # 0 or 1
xpcs=$2 # 0 or 1
reg=$3
write=$4
writeval=$5
debug=1
if [ $# -lt 3 ]; then
echo "Read Usage: $0 <serdes 0|1> <xpcs 0|1> <hex register>"
echo "Write Usage: $0 <serdes 0|1> <xpcs 0|1> <hex register> 1 <hex value to write>"
exit 1
elif [ $# -ne 5 ]; then
write=0
fi
addr_xpcs_0=0x823FC
addr_xpcs_1=0x82BFC
serdes0=0x40480000
serdes1=0x44180000
ofs=${reg#0x}
ofsleft="0x${ofs:0:4}" # First 4 characters
ofsright="0x${ofs:4:2}" # Last 2 characters
data1=$ofsleft
if [ $xpcs -eq 0 ]; then
addr1=$addr_xpcs_0
addr2=$((0x82000 + $ofsright * 4))
elif [ $xpcs -eq 1 ]; then
addr1=$addr_xpcs_1
addr2=$((0x82800 + $ofsright * 4))
else
echo "Invalid choice for xpcs must be 0|1"
exit 1
fi
if [ $serdes -eq 0 ]; then
addr1=$(($addr1 + $serdes0))
addr2=$(($addr2 + $serdes0))
elif [ $serdes -eq 1 ]; then
addr1=$(($addr1 + $serdes1))
addr2=$(($addr2 + $serdes1))
else
echo "Serdes must be 0|1"
exit 1
fi
addr1=$(printf "0x%x" $addr1)
addr2=$(printf "0x%x" $addr2)
devmem $addr1 32 $data1
if [ $write -eq 1 ]; then
echo "writing $writeval to $reg"
devmem $addr2 32 $writeval
else
echo "reading from $reg : $(devmem $addr2)"
fi
if [ $debug -eq 1 ]; then
echo "write $write"
echo "writeval $writeval"
echo "ofs $ofs"
echo "ofsleft $ofsleft"
echo "ofsright $ofsright"
echo "data1 $data1"
echo "addr1 $addr1"
echo "addr2 $addr2"
fi
Hello, @minersrevolt
Thanks for you post.
Well, I do not see any reference code/document that accessing the XPCS registers from user space, may I know if you have referenced the xpcs_read/write functions from the BSP Linux source code?
BR
Chenyin
Here is the section from the User Guide I implemented,