Can you make a diagram as to where which PHY etc is connected?
I would also advise using mdio-tools to make it easy to test from userspace.
I dont think that RTL9301 is supported in OpenWrt at all.
Can you make a diagram as to where which PHY etc is connected?
I would also advise using mdio-tools to make it easy to test from userspace.
I dont think that RTL9301 is supported in OpenWrt at all.
My current understanding is below. And RTL930x seems to be supported?
i: IPQ8072A
r: RTL3901\nLAN/dp5_syn
a1: AQR113c\nWAN/dp6_syn
a2: AQR113c\nlan10G
r1: RTL8221B\nlan2.5G
r2: RTL8221B\nlan2.5G
w2: QCN5054
w5: QCN6024
w6: QCN9024
m: MXL3711
i -> w2: ?
i -> w5: ?
i -> w6: PCI-E # 1
i -> r: SGMII
i -> a1: SGMII
r -> a2: ?
r -> m: ?
r -> r1: ?
r -> r2: ?
It's supported as standalone switch under the Realtek target, though I am not sure if it actually works at all.
The way that the RTL DSA driver currently is, it won't work at all outside of it being used as a standalone switch.
And without the RTL switch, you basically have one port working.
Have you tried loading the AQR FW from userspace?
Re: RTL. That's bad news
Re: AQR: 1. I didn't find good instructions on how to do that. + Current initramfs image has no network at all. Any instructions would be helpful.
The AQR113 firmware seems to be loaded from the userspace, here's /lib/debug/aqr113c/arc_phyupgrade.sh
, it's called from an init script:
GET_WANPHYFW_MAJMINVER_FROMROM_CMD=`ssdk_sh debug phy get 8 0x401E0020 | grep Data | awk -F ":" '{print $2}'`
GET_WANPHYFW_BUILDVER_FROMROM_CMD=`ssdk_sh debug phy get 8 0x401EC885 | grep Data | awk -F ":" '{print $2}' | cut -c 5`
GET_PHYFW_NAME_CMD=`ls /lib/debug/aqr113c/*.cld`
GET_PHYFW_MAJVER_FROMFW_CMD=`echo $GET_PHYFW_NAME_CMD | awk -F "v" '{print $2}' | awk -F "-" '{print $1}' | awk -F "." '{print $1}'`
GET_PHYFW_MINVER_FROMFW_CMD=`echo $GET_PHYFW_NAME_CMD | awk -F "v" '{print $2}' | awk -F "-" '{print $1}' | awk -F "." '{print $2}'`
GET_PHYFW_BUILDVER_FROMFW_CMD=`echo $GET_PHYFW_NAME_CMD | awk -F "v" '{print $2}' | awk -F "-" '{print $1}' | awk -F "." '{print $3}'`
LANPHYFW_VER_RFILE=/data/version.aqr113c
# Decimal Conversion
WANVERSION_FROMROM_H=$GET_WANPHYFW_MAJMINVER_FROMROM_CMD$GET_WANPHYFW_BUILDVER_FROMROM_CMD
WANVERSION_FROMROM_D=$(echo $(($WANVERSION_FROMROM_H)))
VERSION_FROMFW_H=$(printf "0x%02d%02d%d" $GET_PHYFW_MAJVER_FROMFW_CMD $GET_PHYFW_MINVER_FROMFW_CMD $GET_PHYFW_BUILDVER_FROMFW_CMD)
VERSION_FROMFW_D=$(echo $(($VERSION_FROMFW_H)))
# phyupgrade return value: 0: upgrade successed; !0: Upgrade failed
PHYFW_UPGRADE_TOOL=/lib/debug/aqr113c/phyupgrade
WANPHYFW_MDIOLOAD_TOOL=aq-fw-download
LANPHYFW_MDIOLOAD_TOOL=/lib/debug/aqr113c/aqr_finetune
LOG_FILE=/dev/console
# return value: 0: no upgrade; 1: upgrade successed; 2: Upgrade failed
FlashWANPHYFW()
{
isWanUpgrade=$1
echo "[AQR113C] Flash WAN PHY Firmware Start" > $LOG_FILE
if [ $isWanUpgrade -eq 1 ]; then
echo "[AQR113C] phyupgrade WAN CMD = $PHYFW_UPGRADE_TOOL $GET_PHYFW_NAME_CMD wan" > $LOG_FILE
logger -t sysup -p info "[SYS.6][SYS][AQR113C] $PHYFW_UPGRADE_TOOL $GET_PHYFW_NAME_CMD wan"
ret_phyupgrade=$($PHYFW_UPGRADE_TOOL $GET_PHYFW_NAME_CMD wan | grep resultCode | awk -F ":" '{print $2}')
echo "[AQR113C] phyupgrade WAN result = $ret_phyupgrade" > $LOG_FILE
if [ $ret_phyupgrade -eq 0 ]; then
echo "[AQR113C] phyupgrade WAN successed" > $LOG_FILE
echo "[AQR113C] Flash WAN PHY Firmware Finish" > $LOG_FILE
return 1
else
echo "[AQR113C] phyupgrade WAN failed" > $LOG_FILE
echo "[AQR113C] Flash WAN PHY Firmware Finish" > $LOG_FILE
return 2
fi
else
echo "[AQR113C] WAN PHY FW is newer or equal to latest version, skip flash phy fw" > $LOG_FILE
echo "[AQR113C] Flash WAN PHY Firmware Finish" > $LOG_FILE
return 0
fi
}
FlashLANPHYFW()
{
isLanUpgrade=$1
echo "[AQR113C] Flash LAN PHY Firmware Start" > $LOG_FILE
if [ $isLanUpgrade -eq 1 ]; then
echo "[AQR113C] phyupgrade LAN CMD = $PHYFW_UPGRADE_TOOL $GET_PHYFW_NAME_CMD lan" > $LOG_FILE
logger -t sysup -p info "[SYS.6][SYS][AQR113C] $PHYFW_UPGRADE_TOOL $GET_PHYFW_NAME_CMD lan"
ret_phyupgrade=$($PHYFW_UPGRADE_TOOL $GET_PHYFW_NAME_CMD lan | grep resultCode | awk -F ":" '{print $2}')
echo "[AQR113C] phyupgrade LAN result = $ret_phyupgrade" > $LOG_FILE
if [ $ret_phyupgrade -eq 0 ]; then
echo $VERSION_FROMFW_H > $LANPHYFW_VER_RFILE
echo "[AQR113C] phyupgrade LAN successed" > $LOG_FILE
echo "[AQR113C] Flash LAN PHY Firmware Finish" > $LOG_FILE
return 1
else
echo "[AQR113C] phyupgrade LAN failed" > $LOG_FILE
echo "[AQR113C] Flash LAN PHY Firmware Finish" > $LOG_FILE
return 2
fi
else
echo "[AQR113C] LAN PHY FW is newer or equal to latest version, skip flash phy fw" > $LOG_FILE
echo "[AQR113C] Flash LAN PHY Firmware Finish" > $LOG_FILE
return 0
fi
}
MDIOLoadWANPHYFW()
{
isWanUpgrade=$1
echo "[AQR113C] MDIO load WAN PHY Firmware Start" > $LOG_FILE
if [ $isWanUpgrade -eq 1 ]; then
echo "[AQR113C] MDIO load WAN CMD = $WANPHYFW_MDIOLOAD_TOOL $GET_PHYFW_NAME_CMD miireg 8" > $LOG_FILE
logger -t sysup -p info "[SYS.6][SYS][AQR113C] $WANPHYFW_MDIOLOAD_TOOL $GET_PHYFW_NAME_CMD miireg 8"
ret_mdioload=$($WANPHYFW_MDIOLOAD_TOOL $GET_PHYFW_NAME_CMD miireg 8 | grep "Image load good" | wc -l)
echo "[AQR113C] MDIO load WAN result = $ret_mdioload" > $LOG_FILE
logger -t sysup -p info "[SYS.6][SYS][AQR113C] MDIO load WAN result = $ret_mdioload"
if [ $ret_mdioload -ne 0 ]; then
sleep 2
ssdk_sh debug phy set 8 0x4004c441 0x8
echo "[AQR113C] MDIO load WAN successed" > $LOG_FILE
echo "[AQR113C] MDIO load WAN PHY Firmware Finish" > $LOG_FILE
return 0
else
echo "[AQR113C] MDIO load WAN failed" > $LOG_FILE
echo "[AQR113C] MDIO load WAN PHY Firmware Finish" > $LOG_FILE
return 2
fi
else
echo "[AQR113C] WAN PHY FW is newer or equal to latest version, skip load phy fw" > $LOG_FILE
echo "[AQR113C] MDIO load WAN PHY Firmware Finish" > $LOG_FILE
return 0
fi
}
MDIOLoadLANPHYFW()
{
isLanUpgrade=$1
echo "[AQR113C] MDIO load LAN PHY Firmware Start" > $LOG_FILE
if [ $isLanUpgrade -eq 1 ]; then
echo "[AQR113C] MDIO load LAN CMD = $LANPHYFW_MDIOLOAD_TOOL $GET_PHYFW_NAME_CMD lan" > $LOG_FILE
logger -t sysup -p info "[SYS.6][SYS][AQR113C] $LANPHYFW_MDIOLOAD_TOOL $GET_PHYFW_NAME_CMD lan"
ret_mdioload=$($LANPHYFW_MDIOLOAD_TOOL $GET_PHYFW_NAME_CMD lan | grep resultCode | awk -F ":" '{print $2}')
echo "[AQR113C] MDIO load LAN result = $ret_mdioload" > $LOG_FILE
logger -t sysup -p info "[SYS.6][SYS][AQR113C] MDIO load LAN result = $ret_mdioload"
if [ $ret_mdioload -eq 0 ]; then
echo "[AQR113C] MDIO load LAN successed" > $LOG_FILE
echo "[AQR113C] MDIO load LAN PHY Firmware Finish" > $LOG_FILE
return 0
else
echo "[AQR113C] MDIO load LAN failed" > $LOG_FILE
echo "[AQR113C] MDIO load LAN PHY Firmware Finish" > $LOG_FILE
return 2
fi
else
echo "[AQR113C] LAN PHY FW is newer or equal to latest version, skip load phy fw" > $LOG_FILE
echo "[AQR113C] MDIO load LAN PHY Firmware Finish" > $LOG_FILE
return 0
fi
}
main()
{
echo "[AQR113C] PHY Firmware upgrade procedure start" > $LOG_FILE
logger -t sysup -p info "[SYS.6][SYS][AQR113C] PHY Firmware upgrade procedure start"
echo "[AQR113C] PHYFWNAME_FROMFW = $GET_PHYFW_NAME_CMD" > $LOG_FILE
echo "[AQR113C] PHYFWVERSION_FROMFW = $VERSION_FROMFW_H ($VERSION_FROMFW_D)" > $LOG_FILE
#echo "[AQR113C] GET_PHYFW_VER_FROMROM_CMD=$GET_WANPHYFW_MAJMINVER_CMD.$GET_WANPHYFW_BUILDVER_CMD" > $LOG_FILE
#echo "[AQR113C] GET_PHYFW_VER_FROMFW_CMD=$GET_PHYFW_MAJVER_FROMFW_CMD.$GET_PHYFW_MINVER_FROMFW_CMD.$GET_PHYFW_BUILDVER_FROMFW_CMD" > $LOG_FILE
echo "[AQR113C] WANPHYVERSION_FROMROM = $WANVERSION_FROMROM_H ($WANVERSION_FROMROM_D)" > $LOG_FILE
if [ -f "$LANPHYFW_VER_RFILE" ]; then
#echo "File $LANPHYFW_VER_RFILE exists." > $LOG_FILE
lanphy_ver_h=`cat $LANPHYFW_VER_RFILE`
lanphy_ver_d=$(echo $(($lanphy_ver_h)))
echo "[AQR113C] LANPHYVERSION_FROMRFILE = $lanphy_ver_h ($lanphy_ver_d)" > $LOG_FILE
else
#echo "File $LANPHYFW_VER_RFILE does not exists." > $LOG_FILE
lanphy_ver_h=$WANVERSION_FROMROM_H
lanphy_ver_d=$(echo $(($lanphy_ver_h)))
echo "[AQR113C] LANPHYVERSION_FROMWAN = $lanphy_ver_h ($lanphy_ver_d)" > $LOG_FILE
echo $lanphy_ver_h > $LANPHYFW_VER_RFILE
fi
if [ $WANVERSION_FROMROM_D -lt $VERSION_FROMFW_D ]; then
echo "[AQR113C] WANVERSION lt VERSION_FROMFW" > $LOG_FILE
isWanUpgrade=1
else
echo "[AQR113C] WANVERSION ge VERSION_FROMFW" > $LOG_FILE
isWanUpgrade=0
fi
if [ $lanphy_ver_d -lt $VERSION_FROMFW_D ]; then
echo "[AQR113C] LANVERSION lt VERSION_FROMFW" > $LOG_FILE
isLanUpgrade=1
else
echo "[AQR113C] LANVERSION ge VERSION_FROMFW" > $LOG_FILE
isLanUpgrade=0
fi
echo "[AQR113C] isWanUpgrade = $isWanUpgrade, isLanUpgrade = $isLanUpgrade" > $LOG_FILE
logger -t sysup -p info "[SYS.6][SYS][AQR113C] isWanUpgrade = $isWanUpgrade, isLanUpgrade = $isLanUpgrade"
MDIOLoadWANPHYFW $isWanUpgrade &
pid1=$!
MDIOLoadLANPHYFW $isLanUpgrade &
pid2=$!
wait $pid1
MDIOLoadWANPHYFW=$?
wait $pid2
ret_MDIOLoadLANPHYFW=$?
echo "[AQR113C] FlashWANPHYFW result = $MDIOLoadWANPHYFW, FlashLANPHYFW result = $ret_MDIOLoadLANPHYFW" > $LOG_FILE
logger -t sysup -p info "[SYS.6][SYS][AQR113C] FlashWANPHYFW result = $MDIOLoadWANPHYFW, FlashLANPHYFW result = $ret_MDIOLoadLANPHYFW"
if [ $MDIOLoadWANPHYFW -eq 2 ]; then
MDIOLoadWANPHYFW 1
ret_MDIOLoadWANPHYFW=$?
echo "[AQR113C] MDIOLoadWANPHYFW result = $ret_MDIOLoadWANPHYFW" > $LOG_FILE
logger -t sysup -p info "[SYS.6][SYS][AQR113C] MDIOLoadWANPHYFW result = $ret_MDIOLoadWANPHYFW"
fi
if [ $ret_MDIOLoadLANPHYFW -eq 2 ]; then
MDIOLoadLANPHYFW 1
ret_MDIOLoadLANPHYFW=$?
echo "[AQR113C] MDIOLoadLANPHYFW result = $ret_MDIOLoadLANPHYFW" > $LOG_FILE
logger -t sysup -p info "[SYS.6][SYS][AQR113C] MDIOLoadLANPHYFW result = $ret_MDIOLoadLANPHYFW"
fi
}
main
echo "[AQR113C] PHY Firmware upgrade procedure end" > $LOG_FILE
#!/bin/sh
GET_WANPHYFW_MAJMINVER_FROMROM_CMD=`ssdk_sh debug phy get 8 0x401E0020 | grep Data | awk -F ":" '{print $2}'`
GET_WANPHYFW_BUILDVER_FROMROM_CMD=`ssdk_sh debug phy get 8 0x401EC885 | grep Data | awk -F ":" '{print $2}' | cut -c 5`
GET_PHYFW_NAME_CMD=`ls /lib/debug/aqr113c/*.cld`
GET_PHYFW_MAJVER_FROMFW_CMD=`echo $GET_PHYFW_NAME_CMD | awk -F "v" '{print $2}' | awk -F "-" '{print $1}' | awk -F "." '{print $1}'`
GET_PHYFW_MINVER_FROMFW_CMD=`echo $GET_PHYFW_NAME_CMD | awk -F "v" '{print $2}' | awk -F "-" '{print $1}' | awk -F "." '{print $2}'`
GET_PHYFW_BUILDVER_FROMFW_CMD=`echo $GET_PHYFW_NAME_CMD | awk -F "v" '{print $2}' | awk -F "-" '{print $1}' | awk -F "." '{print $3}'`
LANPHYFW_VER_RFILE=/data/version.aqr113c
# Decimal Conversion
WANVERSION_FROMROM_H=$GET_WANPHYFW_MAJMINVER_FROMROM_CMD$GET_WANPHYFW_BUILDVER_FROMROM_CMD
WANVERSION_FROMROM_D=$(echo $(($WANVERSION_FROMROM_H)))
VERSION_FROMFW_H=$(printf "0x%02d%02d%d" $GET_PHYFW_MAJVER_FROMFW_CMD $GET_PHYFW_MINVER_FROMFW_CMD $GET_PHYFW_BUILDVER_FROMFW_CMD)
VERSION_FROMFW_D=$(echo $(($VERSION_FROMFW_H)))
# phyupgrade return value: 0: upgrade successed; !0: Upgrade failed
PHYFW_UPGRADE_TOOL=/lib/debug/aqr113c/phyupgrade
WANPHYFW_MDIOLOAD_TOOL=aq-fw-download
LANPHYFW_MDIOLOAD_TOOL=/lib/debug/aqr113c/aqr_finetune
LOG_FILE=/dev/console
# return value: 0: no upgrade; 1: upgrade successed; 2: Upgrade failed
FlashWANPHYFW()
{
isWanUpgrade=$1
echo "[AQR113C] Flash WAN PHY Firmware Start" > $LOG_FILE
if [ $isWanUpgrade -eq 1 ]; then
echo "[AQR113C] phyupgrade WAN CMD = $PHYFW_UPGRADE_TOOL $GET_PHYFW_NAME_CMD wan" > $LOG_FILE
logger -t sysup -p info "[SYS.6][SYS][AQR113C] $PHYFW_UPGRADE_TOOL $GET_PHYFW_NAME_CMD wan"
ret_phyupgrade=$($PHYFW_UPGRADE_TOOL $GET_PHYFW_NAME_CMD wan | grep resultCode | awk -F ":" '{print $2}')
echo "[AQR113C] phyupgrade WAN result = $ret_phyupgrade" > $LOG_FILE
if [ $ret_phyupgrade -eq 0 ]; then
echo "[AQR113C] phyupgrade WAN successed" > $LOG_FILE
echo "[AQR113C] Flash WAN PHY Firmware Finish" > $LOG_FILE
return 1
else
echo "[AQR113C] phyupgrade WAN failed" > $LOG_FILE
echo "[AQR113C] Flash WAN PHY Firmware Finish" > $LOG_FILE
return 2
fi
else
echo "[AQR113C] WAN PHY FW is newer or equal to latest version, skip flash phy fw" > $LOG_FILE
echo "[AQR113C] Flash WAN PHY Firmware Finish" > $LOG_FILE
return 0
fi
}
FlashLANPHYFW()
{
isLanUpgrade=$1
echo "[AQR113C] Flash LAN PHY Firmware Start" > $LOG_FILE
if [ $isLanUpgrade -eq 1 ]; then
echo "[AQR113C] phyupgrade LAN CMD = $PHYFW_UPGRADE_TOOL $GET_PHYFW_NAME_CMD lan" > $LOG_FILE
logger -t sysup -p info "[SYS.6][SYS][AQR113C] $PHYFW_UPGRADE_TOOL $GET_PHYFW_NAME_CMD lan"
ret_phyupgrade=$($PHYFW_UPGRADE_TOOL $GET_PHYFW_NAME_CMD lan | grep resultCode | awk -F ":" '{print $2}')
echo "[AQR113C] phyupgrade LAN result = $ret_phyupgrade" > $LOG_FILE
if [ $ret_phyupgrade -eq 0 ]; then
echo $VERSION_FROMFW_H > $LANPHYFW_VER_RFILE
echo "[AQR113C] phyupgrade LAN successed" > $LOG_FILE
echo "[AQR113C] Flash LAN PHY Firmware Finish" > $LOG_FILE
return 1
else
echo "[AQR113C] phyupgrade LAN failed" > $LOG_FILE
echo "[AQR113C] Flash LAN PHY Firmware Finish" > $LOG_FILE
return 2
fi
else
echo "[AQR113C] LAN PHY FW is newer or equal to latest version, skip flash phy fw" > $LOG_FILE
echo "[AQR113C] Flash LAN PHY Firmware Finish" > $LOG_FILE
return 0
fi
}
MDIOLoadWANPHYFW()
{
isWanUpgrade=$1
echo "[AQR113C] MDIO load WAN PHY Firmware Start" > $LOG_FILE
if [ $isWanUpgrade -eq 1 ]; then
echo "[AQR113C] MDIO load WAN CMD = $WANPHYFW_MDIOLOAD_TOOL $GET_PHYFW_NAME_CMD miireg 8" > $LOG_FILE
logger -t sysup -p info "[SYS.6][SYS][AQR113C] $WANPHYFW_MDIOLOAD_TOOL $GET_PHYFW_NAME_CMD miireg 8"
ret_mdioload=$($WANPHYFW_MDIOLOAD_TOOL $GET_PHYFW_NAME_CMD miireg 8 | grep "Image load good" | wc -l)
echo "[AQR113C] MDIO load WAN result = $ret_mdioload" > $LOG_FILE
logger -t sysup -p info "[SYS.6][SYS][AQR113C] MDIO load WAN result = $ret_mdioload"
if [ $ret_mdioload -ne 0 ]; then
sleep 2
ssdk_sh debug phy set 8 0x4004c441 0x8
echo "[AQR113C] MDIO load WAN successed" > $LOG_FILE
echo "[AQR113C] MDIO load WAN PHY Firmware Finish" > $LOG_FILE
return 0
else
echo "[AQR113C] MDIO load WAN failed" > $LOG_FILE
echo "[AQR113C] MDIO load WAN PHY Firmware Finish" > $LOG_FILE
return 2
fi
else
echo "[AQR113C] WAN PHY FW is newer or equal to latest version, skip load phy fw" > $LOG_FILE
echo "[AQR113C] MDIO load WAN PHY Firmware Finish" > $LOG_FILE
return 0
fi
}
MDIOLoadLANPHYFW()
{
isLanUpgrade=$1
echo "[AQR113C] MDIO load LAN PHY Firmware Start" > $LOG_FILE
if [ $isLanUpgrade -eq 1 ]; then
echo "[AQR113C] MDIO load LAN CMD = $LANPHYFW_MDIOLOAD_TOOL $GET_PHYFW_NAME_CMD lan" > $LOG_FILE
logger -t sysup -p info "[SYS.6][SYS][AQR113C] $LANPHYFW_MDIOLOAD_TOOL $GET_PHYFW_NAME_CMD lan"
ret_mdioload=$($LANPHYFW_MDIOLOAD_TOOL $GET_PHYFW_NAME_CMD lan | grep resultCode | awk -F ":" '{print $2}')
echo "[AQR113C] MDIO load LAN result = $ret_mdioload" > $LOG_FILE
logger -t sysup -p info "[SYS.6][SYS][AQR113C] MDIO load LAN result = $ret_mdioload"
if [ $ret_mdioload -eq 0 ]; then
echo "[AQR113C] MDIO load LAN successed" > $LOG_FILE
echo "[AQR113C] MDIO load LAN PHY Firmware Finish" > $LOG_FILE
return 0
else
echo "[AQR113C] MDIO load LAN failed" > $LOG_FILE
echo "[AQR113C] MDIO load LAN PHY Firmware Finish" > $LOG_FILE
return 2
fi
else
echo "[AQR113C] LAN PHY FW is newer or equal to latest version, skip load phy fw" > $LOG_FILE
echo "[AQR113C] MDIO load LAN PHY Firmware Finish" > $LOG_FILE
return 0
fi
}
main()
{
echo "[AQR113C] PHY Firmware upgrade procedure start" > $LOG_FILE
logger -t sysup -p info "[SYS.6][SYS][AQR113C] PHY Firmware upgrade procedure start"
echo "[AQR113C] PHYFWNAME_FROMFW = $GET_PHYFW_NAME_CMD" > $LOG_FILE
echo "[AQR113C] PHYFWVERSION_FROMFW = $VERSION_FROMFW_H ($VERSION_FROMFW_D)" > $LOG_FILE
#echo "[AQR113C] GET_PHYFW_VER_FROMROM_CMD=$GET_WANPHYFW_MAJMINVER_CMD.$GET_WANPHYFW_BUILDVER_CMD" > $LOG_FILE
#echo "[AQR113C] GET_PHYFW_VER_FROMFW_CMD=$GET_PHYFW_MAJVER_FROMFW_CMD.$GET_PHYFW_MINVER_FROMFW_CMD.$GET_PHYFW_BUILDVER_FROMFW_CMD" > $LOG_FILE
echo "[AQR113C] WANPHYVERSION_FROMROM = $WANVERSION_FROMROM_H ($WANVERSION_FROMROM_D)" > $LOG_FILE
if [ -f "$LANPHYFW_VER_RFILE" ]; then
#echo "File $LANPHYFW_VER_RFILE exists." > $LOG_FILE
lanphy_ver_h=`cat $LANPHYFW_VER_RFILE`
lanphy_ver_d=$(echo $(($lanphy_ver_h)))
echo "[AQR113C] LANPHYVERSION_FROMRFILE = $lanphy_ver_h ($lanphy_ver_d)" > $LOG_FILE
else
#echo "File $LANPHYFW_VER_RFILE does not exists." > $LOG_FILE
lanphy_ver_h=$WANVERSION_FROMROM_H
lanphy_ver_d=$(echo $(($lanphy_ver_h)))
echo "[AQR113C] LANPHYVERSION_FROMWAN = $lanphy_ver_h ($lanphy_ver_d)" > $LOG_FILE
echo $lanphy_ver_h > $LANPHYFW_VER_RFILE
fi
if [ $WANVERSION_FROMROM_D -lt $VERSION_FROMFW_D ]; then
echo "[AQR113C] WANVERSION lt VERSION_FROMFW" > $LOG_FILE
isWanUpgrade=1
else
echo "[AQR113C] WANVERSION ge VERSION_FROMFW" > $LOG_FILE
isWanUpgrade=0
fi
if [ $lanphy_ver_d -lt $VERSION_FROMFW_D ]; then
echo "[AQR113C] LANVERSION lt VERSION_FROMFW" > $LOG_FILE
isLanUpgrade=1
else
echo "[AQR113C] LANVERSION ge VERSION_FROMFW" > $LOG_FILE
isLanUpgrade=0
fi
echo "[AQR113C] isWanUpgrade = $isWanUpgrade, isLanUpgrade = $isLanUpgrade" > $LOG_FILE
logger -t sysup -p info "[SYS.6][SYS][AQR113C] isWanUpgrade = $isWanUpgrade, isLanUpgrade = $isLanUpgrade"
MDIOLoadWANPHYFW $isWanUpgrade &
pid1=$!
MDIOLoadLANPHYFW $isLanUpgrade &
pid2=$!
wait $pid1
MDIOLoadWANPHYFW=$?
wait $pid2
ret_MDIOLoadLANPHYFW=$?
echo "[AQR113C] FlashWANPHYFW result = $MDIOLoadWANPHYFW, FlashLANPHYFW result = $ret_MDIOLoadLANPHYFW" > $LOG_FILE
logger -t sysup -p info "[SYS.6][SYS][AQR113C] FlashWANPHYFW result = $MDIOLoadWANPHYFW, FlashLANPHYFW result = $ret_MDIOLoadLANPHYFW"
if [ $MDIOLoadWANPHYFW -eq 2 ]; then
MDIOLoadWANPHYFW 1
ret_MDIOLoadWANPHYFW=$?
echo "[AQR113C] MDIOLoadWANPHYFW result = $ret_MDIOLoadWANPHYFW" > $LOG_FILE
logger -t sysup -p info "[SYS.6][SYS][AQR113C] MDIOLoadWANPHYFW result = $ret_MDIOLoadWANPHYFW"
fi
if [ $ret_MDIOLoadLANPHYFW -eq 2 ]; then
MDIOLoadLANPHYFW 1
ret_MDIOLoadLANPHYFW=$?
echo "[AQR113C] MDIOLoadLANPHYFW result = $ret_MDIOLoadLANPHYFW" > $LOG_FILE
logger -t sysup -p info "[SYS.6][SYS][AQR113C] MDIOLoadLANPHYFW result = $ret_MDIOLoadLANPHYFW"
fi
}
main
echo "[AQR113C] PHY Firmware upgrade procedure end" > $LOG_FILE
I've seen that. but it look like a permanent flash upgrade to me, not happening on every boot, right?
No, seems to be happening on every boot, see S11aqr113c_init
.
Actually here's an excerpt from your OEM boot log, I guess it tries to flash on every boot but skips when detects a current firmware:
[ 76.041954] [SYS.6][SYS][AQR113C] PHY Firmware upgrade procedure start
[ 76.044362] [SYS.6][SYS][AQR113C] isWanUpgrade = 0, isLanUpgrade = 0
[ 76.047989] [SYS.6][SYS][AQR113C] MDIOLoadWANPHYFW result = 0, MDIOLoadLANPHYFW result = 0
[ 76.053929] [SYS.6][SYS][AQR113C] PHY Firmware upgrade procedure end
[AQR113C] PHYFWNAME_FROMFW = /lib/debug/aqr113c/aqr-v5.6.7.cld
[AQR113C] PHYFWVERSION_FROMFW = 0x05067 (20583)
[AQR113C] WANPHYVERSION_FROMROM = 0x05067 (20583)
[AQR113C] LANPHYVERSION_FROMRFILE = 0x05067 (20583)
[AQR113C] WANVERSION ge VERSION_FROMFW
[AQR113C] LANVERSION ge VERSION_FROMFW
[AQR113C] MDIO load WAN PHY Firmware Start
[AQR113C] WAN PHY FW is newer or equal to latest version, skip load phy fw
[AQR113C] MDIO load WAN PHY Firmware Finish
[AQR113C] MDIO load LAN PHY Firmware Start
[AQR113C] LAN PHY FW is newer or equal to latest version, skip load phy fw
[AQR113C] MDIO load LAN PHY Firmware Finish
That's exactly my question: it is doing nothing basically (as firmware is already there) and the AQR still works, right?
way earlier it says
[ 27.631069] aquantia_phy_api_ops_init[2187]:INFO:qca probe aquantia phy driver succeeded!
but my build doesn't have that
You're absolutely correct, I looked around U-boot and found something related to AQ:
aq_load_fw
and/or aq_phy_restart
in U-boot before you jump to your custom initramfs?
I tried it here: Adding Support for Verizon CR1000A - #307 by a_guy
Looks like it needs a firmware written to a specific partition but this router have some noise (or rtl9301 firmware?) there. Current (untested, destructive) step is to overwrite it with AQR firmware and see if it works.
However I still don't understand how the tftp works in uboot (via wan port) ? Meaning the firmware is already loaded by it? From where?
Ah, I see, I missed that post. Well I looked around bootipq
inside U-Boot, and I really can't find anything special about beyond the TestMode stuff we already know, seems like it's mostly Qualcomm U-Boot:
All references to ETHPHYFW
go through ipq_board_fw_download
, which is the same function that's run during aq_load_fw
.
The firmware for tftp is loaded through eth_initialize
function (I think), it's using the same ETHPHYFW
partition and ipq_board_fw_download
function.
The aquantia firmware needs to load after every powercycle (it's just loading the firmware to the PHY memory at runtime, this is not persistent) don't mix this up with a persistent firmware flashing to NAND or eMMC.
You can use aq-fw-dwonload utility to load the firmware from userspace.
Ok, as a side note to @meisterlone : seems like there is a way to load unsigned image directly from mmc, and the bootm hack is not needed?
@spol-eff
Does 'bootm' do the same things like bootipq does: 'aqr reset' first and eth_initialize at the end?
bootm isn't doing any network init as far as I can see, nor there are any deviations from the qualcomm u-boot. eth_init
seems to be called as part of tftpboot.
Another thing I've noticed is that bootipq initializes the network only if the image boot failed, and you can see that in the bootlogs in this thread: notice that EDMA ver 1 hw init ...
stuff is only present when bootipq couldn't load the kernel.
This all suggests that the netowrk init indeed happens from userspace somehow.
RTL9301 on CR1000A seems to be connected via SPI for register config, might it be possible to extend the existing driver to use SPI instead of memory mapping?
Re AQR is not initializing: did some digging: seems like this code from aquantia_phy.c
is never gets called
int aquantia_phy_init(a_uint32_t dev_id, a_uint32_t port_bmp)
{
static a_uint32_t phy_ops_flag = 0;
if(phy_ops_flag == 0) {
aquantia_phy_api_ops_init();
phy_ops_flag = 1;
}
aquantia_phy_hw_init(dev_id, port_bmp);
return 0;
}
the suspect is this: https://github.com/openwrt/openwrt/pull/12014
which makes it a module which gets loaded way later than expected creating a race condition?
it gets loaded like this
root@OpenWrt:/# dmesg | grep kmodloader
[ 3.078711] kmodloader: loading kernel modules from /etc/modules-boot.d/*
[ 4.543108] kmodloader: done loading kernel modules from /etc/modules-boot.d/*
...
while 'normal' init is expected to happen somewhere way earlier before this
[ 3.292638] regi_init[3953]:INFO:Initializing HPPE!!
[ 3.530048] ssdk_ppe_reset_init[1535]:INFO:ppe reset successfully!
[ 3.533647] qca_hppe_portctrl_hw_init[126]:INFO:Hawkeye PPE port initializing
for example here (https://openwrt.org/toh/qnap/301w) note that relative times are different but the order is still the same)
Have you installed mdio-tools
?
AQR could be left in reset by the bootloader, its a common thing to do.
AQR kmod is getting loaded really early so it's not a race condition, its 99% it's not being matched as it's not present on the MDIO bus