How to read XPCS registers from Linux

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

How to read XPCS registers from Linux

688件の閲覧回数
minersrevolt
Contributor III

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

 

0 件の賞賛
返信
2 返答(返信)

640件の閲覧回数
chenyin_h
NXP Employee
NXP Employee

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

 

0 件の賞賛
返信

685件の閲覧回数
minersrevolt
Contributor III

Here is the section from the User Guide I implemented,

minersrevolt_0-1729283706722.png

 

0 件の賞賛
返信