Skip to content

Commit

Permalink
ath9k: make endian check optional
Browse files Browse the repository at this point in the history
Turns out it triggers on some AR71xx devices where no swapping should be done.
Enable endian check for the lantiq target.

git-svn-id: svn://svn.openwrt.org/openwrt/trunk@31084 3c298f89-4303-0410-b956-a3cf2f4a3e73
  • Loading branch information
nbd committed Mar 27, 2012
1 parent a3bf9b4 commit 9f08710
Show file tree
Hide file tree
Showing 3 changed files with 58 additions and 2 deletions.
58 changes: 56 additions & 2 deletions package/mac80211/patches/501-ath9k-eeprom_endianess.patch
Expand Up @@ -9,7 +9,7 @@
u32 sum = 0, el;
bool need_swap = false;
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;
}

Expand All @@ -34,7 +34,8 @@
- "Invalid EEPROM Magic. Endianness mismatch.\n");
- 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);
+ need_swap = true;
+ eepdata = (u16 *) (&ah->eeprom);
Expand All @@ -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);
1 change: 1 addition & 0 deletions target/linux/generic/files/include/linux/ath9k_platform.h
Expand Up @@ -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);
Expand Down
Expand Up @@ -19,6 +19,7 @@ extern int (*ltqpci_plat_dev_init)(struct pci_dev *dev);
struct ath5k_platform_data ath5k_pdata;
struct ath9k_platform_data ath9k_pdata = {
.led_pin = -1,
.endian_check = true,
};

static int
Expand Down

0 comments on commit 9f08710

Please sign in to comment.