Adding Support for Verizon CR1000A

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?

Summary

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 :pensive:

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:


There's some indirection happening, so I wasn't able to quickly determine how these functions are used.
Can you try calling 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.

1 Like

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?

I guess its a question to @olliver too

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