mirror of https://github.com/hak5/openwrt.git
ath9k: make endian check optional
Turns out it triggers on some AR71xx devices where no swapping should be done. Enable endian check for the lantiq target. SVN-Revision: 31084lede-17.01
parent
2143633bd2
commit
5f799a0e97
|
@ -9,7 +9,7 @@
|
||||||
u32 sum = 0, el;
|
u32 sum = 0, el;
|
||||||
bool need_swap = false;
|
bool need_swap = false;
|
||||||
int i, addr, size;
|
int i, addr, size;
|
||||||
@@ -277,27 +277,15 @@ static int ath9k_hw_def_check_eeprom(str
|
@@ -277,27 +277,16 @@ static int ath9k_hw_def_check_eeprom(str
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -34,7 +34,8 @@
|
||||||
- "Invalid EEPROM Magic. Endianness mismatch.\n");
|
- "Invalid EEPROM Magic. Endianness mismatch.\n");
|
||||||
- return -EINVAL;
|
- return -EINVAL;
|
||||||
- }
|
- }
|
||||||
+ if (swab16(magic) == AR5416_EEPROM_MAGIC) {
|
+ if (swab16(magic) == AR5416_EEPROM_MAGIC &&
|
||||||
|
+ !(ah->ah_flags & AH_NO_EEP_SWAP)) {
|
||||||
+ size = sizeof(struct ar5416_eeprom_def);
|
+ size = sizeof(struct ar5416_eeprom_def);
|
||||||
+ need_swap = true;
|
+ need_swap = true;
|
||||||
+ eepdata = (u16 *) (&ah->eeprom);
|
+ eepdata = (u16 *) (&ah->eeprom);
|
||||||
|
@ -46,3 +47,56 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
--- a/drivers/net/wireless/ath/ath9k/eeprom_4k.c
|
||||||
|
+++ b/drivers/net/wireless/ath/ath9k/eeprom_4k.c
|
||||||
|
@@ -196,7 +196,7 @@ static int ath9k_hw_4k_check_eeprom(stru
|
||||||
|
int i, addr;
|
||||||
|
|
||||||
|
|
||||||
|
- if (!ath9k_hw_use_flash(ah)) {
|
||||||
|
+ if (!(ah->ah_flags & AH_NO_EEP_SWAP)) {
|
||||||
|
if (!ath9k_hw_nvram_read(common, AR5416_EEPROM_MAGIC_OFFSET,
|
||||||
|
&magic)) {
|
||||||
|
ath_err(common, "Reading Magic # failed\n");
|
||||||
|
--- a/drivers/net/wireless/ath/ath9k/eeprom_9287.c
|
||||||
|
+++ b/drivers/net/wireless/ath/ath9k/eeprom_9287.c
|
||||||
|
@@ -189,7 +189,7 @@ static int ath9k_hw_ar9287_check_eeprom(
|
||||||
|
struct ar9287_eeprom *eep = &ah->eeprom.map9287;
|
||||||
|
struct ath_common *common = ath9k_hw_common(ah);
|
||||||
|
|
||||||
|
- if (!ath9k_hw_use_flash(ah)) {
|
||||||
|
+ if (!(ah->ah_flags & AH_NO_EEP_SWAP)) {
|
||||||
|
if (!ath9k_hw_nvram_read(common, AR5416_EEPROM_MAGIC_OFFSET,
|
||||||
|
&magic)) {
|
||||||
|
ath_err(common, "Reading Magic # failed\n");
|
||||||
|
--- a/drivers/net/wireless/ath/ath9k/hw.h
|
||||||
|
+++ b/drivers/net/wireless/ath/ath9k/hw.h
|
||||||
|
@@ -662,6 +662,7 @@ enum ath_cal_list {
|
||||||
|
#define AH_USE_EEPROM 0x1
|
||||||
|
#define AH_UNPLUGGED 0x2 /* The card has been physically removed. */
|
||||||
|
#define AH_FASTCC 0x4
|
||||||
|
+#define AH_NO_EEP_SWAP 0x8 /* Do not swap EEPROM data */
|
||||||
|
|
||||||
|
struct ath_hw {
|
||||||
|
struct ath_ops reg_ops;
|
||||||
|
--- a/drivers/net/wireless/ath/ath9k/init.c
|
||||||
|
+++ b/drivers/net/wireless/ath/ath9k/init.c
|
||||||
|
@@ -537,6 +537,8 @@ static int ath9k_init_softc(u16 devid, s
|
||||||
|
ah->is_clk_25mhz = pdata->is_clk_25mhz;
|
||||||
|
ah->get_mac_revision = pdata->get_mac_revision;
|
||||||
|
ah->external_reset = pdata->external_reset;
|
||||||
|
+ if (!pdata->endian_check)
|
||||||
|
+ ah->ah_flags |= AH_NO_EEP_SWAP;
|
||||||
|
}
|
||||||
|
|
||||||
|
common = ath9k_hw_common(ah);
|
||||||
|
--- a/include/linux/ath9k_platform.h
|
||||||
|
+++ b/include/linux/ath9k_platform.h
|
||||||
|
@@ -29,6 +29,7 @@ struct ath9k_platform_data {
|
||||||
|
u32 gpio_mask;
|
||||||
|
u32 gpio_val;
|
||||||
|
|
||||||
|
+ bool endian_check;
|
||||||
|
bool is_clk_25mhz;
|
||||||
|
int (*get_mac_revision)(void);
|
||||||
|
int (*external_reset)(void);
|
||||||
|
|
|
@ -29,6 +29,7 @@ struct ath9k_platform_data {
|
||||||
u32 gpio_mask;
|
u32 gpio_mask;
|
||||||
u32 gpio_val;
|
u32 gpio_val;
|
||||||
|
|
||||||
|
bool endian_check;
|
||||||
bool is_clk_25mhz;
|
bool is_clk_25mhz;
|
||||||
int (*get_mac_revision)(void);
|
int (*get_mac_revision)(void);
|
||||||
int (*external_reset)(void);
|
int (*external_reset)(void);
|
||||||
|
|
|
@ -19,6 +19,7 @@ extern int (*ltqpci_plat_dev_init)(struct pci_dev *dev);
|
||||||
struct ath5k_platform_data ath5k_pdata;
|
struct ath5k_platform_data ath5k_pdata;
|
||||||
struct ath9k_platform_data ath9k_pdata = {
|
struct ath9k_platform_data ath9k_pdata = {
|
||||||
.led_pin = -1,
|
.led_pin = -1,
|
||||||
|
.endian_check = true,
|
||||||
};
|
};
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
|
Loading…
Reference in New Issue