linux/drivers/net/wireless/ath/ath9k
Daniel F. Dickinson ce938231bd ath9k: Avoid OF no-EEPROM quirks without qca,no-eeprom
ath9k_of_init() function[0] was initially written on the assumption that
if someone had an explicit ath9k OF node that "there must be something
wrong, why would someone add an OF node if everything is fine"[1]
(Quoting Martin Blumenstingl <martin.blumenstingl@googlemail.com>)

"it turns out it's not that simple. with your requirements I'm now aware
of two use-cases where the current code in ath9k_of_init() doesn't work
without modifications"[1]

The "your requirements" Martin speaks of is the result of the fact that I
have a device (PowerCloud Systems CR5000) has some kind of default - not
unique mac address - set and requires to set the correct MAC address via
mac-address devicetree property, however:

"some cards come with a physical EEPROM chip [or OTP] so "qca,no-eeprom"
should not be set (your use-case). in this case AH_USE_EEPROM should be
set (which is the default when there is no OF node)"[1]

The other use case is:

the firmware on some PowerMac G5 seems to add a OF node for the ath9k
card automatically. depending on the EEPROM on the card AH_NO_EEP_SWAP
should be unset (which is the default when there is no OF node). see [3]

After this patch to ath9k_of_init() the new behavior will be:

    if there's no OF node then everything is the same as before
    if there's an empty OF node then ath9k will use the hardware EEPROM
      (before ath9k would fail to initialize because no EEPROM data was
      provided by userspace)
    if there's an OF node with only a MAC address then ath9k will use
      the MAC address and the hardware EEPROM (see the case above)
    with "qca,no-eeprom" EEPROM data from userspace will be requested.
      the behavior here will not change
[1]

Martin provides additional background on EEPROM swapping[1].

Thanks to Christian Lamparter <chunkeey@gmail.com> for all his help on
troubleshooting this issue and the basis for this patch.

[0]https://elixir.bootlin.com/linux/v4.20-rc7/source/drivers/net/wireless/ath/ath9k/init.c#L615
[1]https://github.com/openwrt/openwrt/pull/1645#issuecomment-448027058
[2]https://github.com/openwrt/openwrt/pull/1613
[3]https://patchwork.kernel.org/patch/10241731/

Fixes: 138b41253d ("ath9k: parse the device configuration from an OF node")
Reviewed-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
Tested-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
Signed-off-by: Daniel F. Dickinson <cshored@thecshore.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
2019-01-10 15:22:51 +02:00
..
ahb.c headers: separate linux/mod_devicetable.h from linux/platform_device.h 2018-07-07 17:52:26 +02:00
ani.c scripts/spelling.txt: add "aligment" pattern and fix typo instances 2017-02-27 18:43:46 -08:00
ani.h
antenna.c ath9k: fix RX_STAT_INC() etc macros 2018-10-13 20:27:35 +03:00
ar953x_initvals.h
ar955x_1p0_initvals.h
ar956x_initvals.h
ar5008_initvals.h
ar5008_phy.c ath9k: ar5008_phy: mark expected switch fall-through 2018-11-05 13:15:24 +02:00
ar9001_initvals.h
ar9002_calib.c ath9k: don't run periodic and nf calibation at the same time 2018-07-31 10:51:43 +03:00
ar9002_hw.c ath9k: replace eeprom_param EEP_MINOR_REV with get_eeprom_rev 2016-12-15 10:26:27 +02:00
ar9002_initvals.h
ar9002_mac.c ath9k: ar9002_mac: kill off ACCESS_ONCE() 2017-01-12 12:59:45 +02:00
ar9002_phy.c ath9k: ar9002_phy: mark expected switch fall-throughs 2018-11-05 13:15:34 +02:00
ar9002_phy.h
ar9003_2p2_initvals.h
ar9003_aic.c
ar9003_aic.h
ar9003_buffalo_initvals.h
ar9003_calib.c Revert "ath9k_hw: implement temperature compensation support for AR9003+" 2016-10-13 14:11:30 +03:00
ar9003_eeprom.c ath9k: Display calibration data piers in debugfs 2018-01-25 07:33:50 +02:00
ar9003_eeprom.h ath9k: Read noise floor calibration data from eeprom 2018-01-25 07:33:36 +02:00
ar9003_hw.c
ar9003_mac.c ath9k: remove cast to void pointer 2017-09-25 10:13:58 +03:00
ar9003_mac.h
ar9003_mci.c ath9k: remove set but not used variable 'new_flags' 2018-11-05 13:18:34 +02:00
ar9003_mci.h
ar9003_paprd.c treewide: kmalloc() -> kmalloc_array() 2018-06-12 16:19:22 -07:00
ar9003_phy.c ath9k_hw: set spectral scan enable bit on trigger for AR9003+ 2018-07-31 10:51:35 +03:00
ar9003_phy.h
ar9003_rtt.c
ar9003_rtt.h
ar9003_wow.c
ar9330_1p1_initvals.h
ar9330_1p2_initvals.h
ar9340_initvals.h
ar9462_2p0_initvals.h
ar9462_2p1_initvals.h
ar9485_initvals.h
ar9565_1p0_initvals.h
ar9565_1p1_initvals.h
ar9580_1p0_initvals.h
ath9k.h ath9k: dynack: make ewma estimation faster 2018-11-06 18:26:50 +02:00
beacon.c
btcoex.c
btcoex.h
calib.c ath9k: Fix get channel default noise floor 2018-02-07 16:14:08 +02:00
calib.h
channel.c ath9k: use timespec64 for tsf_ts 2018-06-29 14:44:49 +03:00
common-beacon.c
common-beacon.h
common-debug.c ath9k: add counters for good and errorneous FFT/spectral frames 2018-10-02 07:43:32 +03:00
common-debug.h ath9k: add counters for good and errorneous FFT/spectral frames 2018-10-02 07:43:32 +03:00
common-init.c ath9k: spelling s/premble/preamble/ 2018-03-26 18:22:44 +03:00
common-init.h
common-spectral.c ath9k: fix RX_STAT_INC() etc macros 2018-10-13 20:27:35 +03:00
common-spectral.h ath9k: fix and simplify FFT max index retrieval 2018-10-02 07:43:56 +03:00
common.c Merge ath-next from git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git 2017-05-19 11:47:44 +03:00
common.h
debug_sta.c ath9k: add reset for airtime station debugfs 2018-10-01 17:05:46 +03:00
debug.c ath9k: fix RX_STAT_INC() etc macros 2018-10-13 20:27:35 +03:00
debug.h ath9k: fix RX_STAT_INC() etc macros 2018-10-13 20:27:35 +03:00
dfs_debug.c wireless: Use octal not symbolic permissions 2018-03-27 11:01:13 +03:00
dfs_debug.h
dfs.c ath: add support to get the detected radar specifications 2018-05-25 13:15:21 +03:00
dfs.h
dynack.c ath9k: dynack: make ewma estimation faster 2018-11-06 18:26:50 +02:00
dynack.h ath9k: dynack: make ewma estimation faster 2018-11-06 18:26:50 +02:00
eeprom_4k.c ath9k: move RELAY and DEBUG_FS to ATH9K[_HTC]_DEBUGFS 2017-01-13 15:29:24 +02:00
eeprom_9287.c ath9k: move RELAY and DEBUG_FS to ATH9K[_HTC]_DEBUGFS 2017-01-13 15:29:24 +02:00
eeprom_def.c ath9k: move RELAY and DEBUG_FS to ATH9K[_HTC]_DEBUGFS 2017-01-13 15:29:24 +02:00
eeprom.c ath9k: remove unnecessary code 2017-05-19 10:57:55 +03:00
eeprom.h ath9k: Add cast to u8 to FREQ2FBIN macro 2017-04-19 17:00:48 +03:00
gpio.c ath: Convert timers to use timer_setup() 2017-10-27 16:54:19 +03:00
hif_usb.c ath9k: use irqsave() in USB's complete callback 2018-06-29 14:55:36 +03:00
hif_usb.h ath9k_htc: don't use HZ for usb msg timeouts 2016-12-01 13:18:33 +02:00
htc_drv_beacon.c ath9k: remove cast to void pointer 2017-09-25 10:13:58 +03:00
htc_drv_debug.c wireless: Use octal not symbolic permissions 2018-03-27 11:01:13 +03:00
htc_drv_gpio.c
htc_drv_init.c ath: Remove unnecessary ath_bcast_mac and use eth_broadcast_addr 2018-03-29 12:10:26 +03:00
htc_drv_main.c ath9k_htc: Add a sanity check in ath9k_htc_ampdu_action() 2017-12-14 17:30:11 +02:00
htc_drv_txrx.c ath9k: use irqsave() in USB's complete callback 2018-06-29 14:55:36 +03:00
htc_hst.c networking: make skb_push & __skb_push return void pointers 2017-06-16 11:48:40 -04:00
htc_hst.h
htc.h ath: Convert timers to use timer_setup() 2017-10-27 16:54:19 +03:00
hw-ops.h
hw.c ath9k: hw: mark expected switch fall-through 2018-11-05 13:15:46 +02:00
hw.h ath9k: use timespec64 for tsf_ts 2018-06-29 14:44:49 +03:00
init.c ath9k: Avoid OF no-EEPROM quirks without qca,no-eeprom 2019-01-10 15:22:51 +02:00
Kconfig ath9k: dynack: remove 'experimental' tag 2018-11-06 18:27:01 +02:00
link.c ath: Convert timers to use timer_setup() 2017-10-27 16:54:19 +03:00
mac.c ath9k: add MSI support 2018-01-16 16:29:22 +02:00
mac.h mac80211: separate encoding/bandwidth from flags 2017-04-28 10:41:45 +02:00
main.c ath9k: Fix a locking bug in ath9k_add_interface() 2018-11-06 18:43:30 +02:00
Makefile ath9k: move spectral scan support under a separate config symbol 2017-12-07 16:31:57 +02:00
mci.c ath9k: remove cast to void pointer 2017-09-25 10:13:58 +03:00
mci.h
pci.c ath9k: Remove unnecessary include of <linux/pci-aspm.h> 2018-08-06 14:32:21 -05:00
phy.h
recv.c ath9k: fix RX_STAT_INC() etc macros 2018-10-13 20:27:35 +03:00
reg_aic.h
reg_mci.h
reg_wow.h
reg.h ath9k: add MSI support 2018-01-16 16:29:22 +02:00
rng.c ath9k: avoid potential freezing during random generator read 2017-06-28 19:54:38 +03:00
tx99.c ath9k: add back support for using active monitor interfaces for tx99 2018-10-02 07:54:26 +03:00
wmi.c ath9k: use irqsave() in USB's complete callback 2018-06-29 14:55:36 +03:00
wmi.h
wow.c
xmit.c ath9k: dynack: make ewma estimation faster 2018-11-06 18:26:50 +02:00