From 217571b6abb3118a81e1cde32dd1151a9e95a0fc Mon Sep 17 00:00:00 2001 From: Christian Lamparter Date: Fri, 5 Nov 2021 22:50:45 +0100 Subject: [PATCH] ath79: WNDR3700/3800/MAC: utilize nvmem for caldata fetching converts the still popular WNDR3700 Series to fetch the caldata through nvmem. As the "MAC with NVMEM" has shown, there could pitfalls along the way. Signed-off-by: Christian Lamparter --- target/linux/ath79/dts/ar7161_netgear_wndr.dtsi | 2 -- .../ath79/dts/ar7161_netgear_wndr3700-v2.dts | 16 ++++++++++++---- .../linux/ath79/dts/ar7161_netgear_wndr3700.dts | 16 ++++++++++++---- .../linux/ath79/dts/ar7161_netgear_wndr3800.dts | 16 ++++++++++++---- .../ath79/dts/ar7161_netgear_wndr3800ch.dts | 16 ++++++++++++---- .../ath79/dts/ar7161_netgear_wndrmac-v1.dts | 16 ++++++++++++---- .../ath79/dts/ar7161_netgear_wndrmac-v2.dts | 16 ++++++++++++---- .../etc/hotplug.d/firmware/10-ath9k-eeprom | 16 ++-------------- 8 files changed, 74 insertions(+), 40 deletions(-) diff --git a/target/linux/ath79/dts/ar7161_netgear_wndr.dtsi b/target/linux/ath79/dts/ar7161_netgear_wndr.dtsi index 414d5e6d992..afbccb80169 100644 --- a/target/linux/ath79/dts/ar7161_netgear_wndr.dtsi +++ b/target/linux/ath79/dts/ar7161_netgear_wndr.dtsi @@ -153,7 +153,6 @@ compatible = "pci168c,0029"; reg = <0x8800 0 0 0 0>; - qca,no-eeprom; #gpio-cells = <2>; gpio-controller; @@ -181,7 +180,6 @@ compatible = "pci168c,0029"; reg = <0x9000 0 0 0 0>; - qca,no-eeprom; #gpio-cells = <2>; gpio-controller; }; diff --git a/target/linux/ath79/dts/ar7161_netgear_wndr3700-v2.dts b/target/linux/ath79/dts/ar7161_netgear_wndr3700-v2.dts index 0a133ce52ee..351d5e03647 100644 --- a/target/linux/ath79/dts/ar7161_netgear_wndr3700-v2.dts +++ b/target/linux/ath79/dts/ar7161_netgear_wndr3700-v2.dts @@ -39,13 +39,13 @@ }; &ath9k0 { - nvmem-cells = <&macaddr_art_c>; - nvmem-cell-names = "mac-address"; + nvmem-cells = <&macaddr_art_c>, <&cal_art_1000>; + nvmem-cell-names = "mac-address", "calibration"; }; &ath9k1 { - nvmem-cells = <&macaddr_art_0>; - nvmem-cell-names = "mac-address"; + nvmem-cells = <&macaddr_art_0>, <&cal_art_5000>; + nvmem-cell-names = "mac-address", "calibration"; }; ð0 { @@ -74,4 +74,12 @@ macaddr_art_c: macaddr@c { reg = <0xc 0x6>; }; + + cal_art_1000: cal@1000 { + reg = <0x1000 0xeb8>; + }; + + cal_art_5000: cal@5000 { + reg = <0x5000 0xeb8>; + }; }; diff --git a/target/linux/ath79/dts/ar7161_netgear_wndr3700.dts b/target/linux/ath79/dts/ar7161_netgear_wndr3700.dts index 99bc5f56bb5..eedd375cc9f 100644 --- a/target/linux/ath79/dts/ar7161_netgear_wndr3700.dts +++ b/target/linux/ath79/dts/ar7161_netgear_wndr3700.dts @@ -39,13 +39,13 @@ }; &ath9k0 { - nvmem-cells = <&macaddr_art_c>; - nvmem-cell-names = "mac-address"; + nvmem-cells = <&macaddr_art_c>, <&cal_art_1000>; + nvmem-cell-names = "mac-address", "calibration"; }; &ath9k1 { - nvmem-cells = <&macaddr_art_0>; - nvmem-cell-names = "mac-address"; + nvmem-cells = <&macaddr_art_0>, <&cal_art_5000>; + nvmem-cell-names = "mac-address", "calibration"; /* The original WNDR3700(v1) variant have four antennae dedicated * to the 5GHz radio as well. Again, two antennae are available for @@ -93,4 +93,12 @@ macaddr_art_c: macaddr@c { reg = <0xc 0x6>; }; + + cal_art_1000: cal@1000 { + reg = <0x1000 0xeb8>; + }; + + cal_art_5000: cal@5000 { + reg = <0x5000 0xeb8>; + }; }; diff --git a/target/linux/ath79/dts/ar7161_netgear_wndr3800.dts b/target/linux/ath79/dts/ar7161_netgear_wndr3800.dts index 0ad5c9d0e8e..487b00b0dd0 100644 --- a/target/linux/ath79/dts/ar7161_netgear_wndr3800.dts +++ b/target/linux/ath79/dts/ar7161_netgear_wndr3800.dts @@ -40,13 +40,13 @@ }; &ath9k0 { - nvmem-cells = <&macaddr_art_c>; - nvmem-cell-names = "mac-address"; + nvmem-cells = <&macaddr_art_c>, <&cal_art_1000>; + nvmem-cell-names = "mac-address", "calibration"; }; &ath9k1 { - nvmem-cells = <&macaddr_art_0>; - nvmem-cell-names = "mac-address"; + nvmem-cells = <&macaddr_art_0>, <&cal_art_5000>; + nvmem-cell-names = "mac-address", "calibration"; }; ð0 { @@ -75,4 +75,12 @@ macaddr_art_c: macaddr@c { reg = <0xc 0x6>; }; + + cal_art_1000: cal@1000 { + reg = <0x1000 0xeb8>; + }; + + cal_art_5000: cal@5000 { + reg = <0x5000 0xeb8>; + }; }; diff --git a/target/linux/ath79/dts/ar7161_netgear_wndr3800ch.dts b/target/linux/ath79/dts/ar7161_netgear_wndr3800ch.dts index be997211a9b..0c2eadae5c1 100644 --- a/target/linux/ath79/dts/ar7161_netgear_wndr3800ch.dts +++ b/target/linux/ath79/dts/ar7161_netgear_wndr3800ch.dts @@ -40,13 +40,13 @@ }; &ath9k0 { - nvmem-cells = <&macaddr_art_c>; - nvmem-cell-names = "mac-address"; + nvmem-cells = <&macaddr_art_c>, <&cal_art_1000>; + nvmem-cell-names = "mac-address", "calibration"; }; &ath9k1 { - nvmem-cells = <&macaddr_art_0>; - nvmem-cell-names = "mac-address"; + nvmem-cells = <&macaddr_art_0>, <&cal_art_5000>; + nvmem-cell-names = "mac-address", "calibration"; }; ð0 { @@ -75,4 +75,12 @@ macaddr_art_c: macaddr@c { reg = <0xc 0x6>; }; + + cal_art_1000: cal@1000 { + reg = <0x1000 0xeb8>; + }; + + cal_art_5000: cal@5000 { + reg = <0x5000 0xeb8>; + }; }; diff --git a/target/linux/ath79/dts/ar7161_netgear_wndrmac-v1.dts b/target/linux/ath79/dts/ar7161_netgear_wndrmac-v1.dts index fa0f40c424d..88c3170c6e8 100644 --- a/target/linux/ath79/dts/ar7161_netgear_wndrmac-v1.dts +++ b/target/linux/ath79/dts/ar7161_netgear_wndrmac-v1.dts @@ -39,13 +39,13 @@ }; &ath9k0 { - nvmem-cells = <&macaddr_art_c>; - nvmem-cell-names = "mac-address"; + nvmem-cells = <&macaddr_art_c>, <&cal_art_1000>; + nvmem-cell-names = "mac-address", "calibration"; }; &ath9k1 { - nvmem-cells = <&macaddr_art_0>; - nvmem-cell-names = "mac-address"; + nvmem-cells = <&macaddr_art_0>, <&cal_art_5000>; + nvmem-cell-names = "mac-address", "calibration"; }; ð0 { @@ -74,4 +74,12 @@ macaddr_art_c: macaddr@c { reg = <0xc 0x6>; }; + + cal_art_1000: cal@1000 { + reg = <0x1000 0xeb8>; + }; + + cal_art_5000: cal@5000 { + reg = <0x5000 0xeb8>; + }; }; diff --git a/target/linux/ath79/dts/ar7161_netgear_wndrmac-v2.dts b/target/linux/ath79/dts/ar7161_netgear_wndrmac-v2.dts index ba96eba2629..0536ecb0533 100644 --- a/target/linux/ath79/dts/ar7161_netgear_wndrmac-v2.dts +++ b/target/linux/ath79/dts/ar7161_netgear_wndrmac-v2.dts @@ -40,13 +40,13 @@ }; &ath9k0 { - nvmem-cells = <&macaddr_art_c>; - nvmem-cell-names = "mac-address"; + nvmem-cells = <&macaddr_art_c>, <&cal_art_1000>; + nvmem-cell-names = "mac-address", "calibration"; }; &ath9k1 { - nvmem-cells = <&macaddr_art_0>; - nvmem-cell-names = "mac-address"; + nvmem-cells = <&macaddr_art_0>, <&cal_art_5000>; + nvmem-cell-names = "mac-address", "calibration"; }; ð0 { @@ -75,4 +75,12 @@ macaddr_art_c: macaddr@c { reg = <0xc 0x6>; }; + + cal_art_1000: cal@1000 { + reg = <0x1000 0xeb8>; + }; + + cal_art_5000: cal@5000 { + reg = <0x5000 0xeb8>; + }; }; diff --git a/target/linux/ath79/generic/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom b/target/linux/ath79/generic/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom index 3e02b066a98..9a3054e2765 100644 --- a/target/linux/ath79/generic/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom +++ b/target/linux/ath79/generic/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom @@ -146,13 +146,7 @@ case "$FIRMWARE" in "ath9k-eeprom-pci-0000:00:11.0.bin") case $board in buffalo,wzr-600dhp|\ - buffalo,wzr-hp-ag300h|\ - netgear,wndr3700|\ - netgear,wndr3700-v2|\ - netgear,wndr3800|\ - netgear,wndr3800ch|\ - netgear,wndrmac-v1|\ - netgear,wndrmac-v2) + buffalo,wzr-hp-ag300h) caldata_extract "art" 0x1000 0xeb8 ;; dlink,dir-825-b1) @@ -170,13 +164,7 @@ case "$FIRMWARE" in "ath9k-eeprom-pci-0000:00:12.0.bin") case $board in buffalo,wzr-600dhp|\ - buffalo,wzr-hp-ag300h|\ - netgear,wndr3700|\ - netgear,wndr3700-v2|\ - netgear,wndr3800|\ - netgear,wndr3800ch|\ - netgear,wndrmac-v1|\ - netgear,wndrmac-v2) + buffalo,wzr-hp-ag300h) caldata_extract "art" 0x5000 0xeb8 ;; dlink,dir-825-b1)