source: trunk/package/mac80211/patches/530-ath9k_otp_rom.patch @ 24016

Last change on this file since 24016 was 24016, checked in by nbd, 6 years ago

ath9k: add some fixes for AR9003

File size: 4.1 KB
  • drivers/net/wireless/ath/ath9k/ar9003_eeprom.c

    a b error: 
    31043104        return false; 
    31053105} 
    31063106 
     3107static bool ar9300_otp_read_word(struct ath_hw *ah, int addr, u32 *data) 
     3108{ 
     3109        REG_READ(ah, AR9300_OTP_BASE + (4 * addr)); 
     3110 
     3111        if (!ath9k_hw_wait(ah, AR9300_OTP_STATUS, AR9300_OTP_STATUS_TYPE, 
     3112                           AR9300_OTP_STATUS_VALID, 1000)) 
     3113                return false; 
     3114 
     3115        *data = REG_READ(ah, AR9300_OTP_READ_DATA); 
     3116        return true; 
     3117} 
     3118 
     3119static bool ar9300_read_otp(struct ath_hw *ah, int address, u8 *buffer, 
     3120                            int count) 
     3121{ 
     3122        u32 data; 
     3123        int i; 
     3124 
     3125        for (i = 0; i < count; i++) { 
     3126                int offset = 8 * ((address - i) % 4); 
     3127                if (!ar9300_otp_read_word(ah, (address - i) / 4, &data)) 
     3128                        return false; 
     3129 
     3130                buffer[i] = (data >> offset) & 0xff; 
     3131        } 
     3132 
     3133        return true; 
     3134} 
     3135 
     3136 
    31073137static void ar9300_comp_hdr_unpack(u8 *best, int *code, int *reference, 
    31083138                                   int *length, int *major, int *minor) 
    31093139{ 
    static int ar9300_compress_decision(stru 
    32213251        return 0; 
    32223252} 
    32233253 
     3254typedef bool (*eeprom_read_op)(struct ath_hw *ah, int address, u8 *buffer, 
     3255                               int count); 
     3256 
     3257static bool ar9300_check_header(void *data) 
     3258{ 
     3259        u32 *word = data; 
     3260        return !(*word == 0 || *word == ~0); 
     3261} 
     3262 
     3263static bool ar9300_check_eeprom_header(struct ath_hw *ah, eeprom_read_op read, 
     3264                                       int base_addr) 
     3265{ 
     3266        u8 header[4]; 
     3267 
     3268        if (!read(ah, base_addr, header, 4)) 
     3269                return false; 
     3270 
     3271        return ar9300_check_header(header); 
     3272} 
     3273 
    32243274/* 
    32253275 * Read the configuration data from the eeprom. 
    32263276 * The data can be put in any specified memory buffer. 
    static int ar9300_eeprom_restore_interna 
    32413291        int it; 
    32423292        u16 checksum, mchecksum; 
    32433293        struct ath_common *common = ath9k_hw_common(ah); 
     3294        eeprom_read_op read; 
    32443295 
    32453296        word = kzalloc(2048, GFP_KERNEL); 
    32463297        if (!word) 
    static int ar9300_eeprom_restore_interna 
    32483299 
    32493300        memcpy(mptr, &ar9300_default, mdata_size); 
    32503301 
     3302        read = ar9300_read_eeprom; 
    32513303        cptr = AR9300_BASE_ADDR; 
     3304        ath_print(common, ATH_DBG_EEPROM, 
     3305                "Trying EEPROM accesss at Address 0x%04x\n", cptr); 
     3306        if (ar9300_check_eeprom_header(ah, read, cptr)) 
     3307                goto found; 
     3308 
     3309        cptr = AR9300_BASE_ADDR_512; 
     3310        ath_print(common, ATH_DBG_EEPROM, 
     3311                "Trying EEPROM accesss at Address 0x%04x\n", cptr); 
     3312        if (ar9300_check_eeprom_header(ah, read, cptr)) 
     3313                goto found; 
     3314 
     3315        read = ar9300_read_otp; 
     3316        cptr = AR9300_BASE_ADDR; 
     3317        ath_print(common, ATH_DBG_EEPROM, 
     3318                "Trying OTP accesss at Address 0x%04x\n", cptr); 
     3319        if (ar9300_check_eeprom_header(ah, read, cptr)) 
     3320                goto found; 
     3321 
     3322        cptr = AR9300_BASE_ADDR_512; 
     3323        ath_print(common, ATH_DBG_EEPROM, 
     3324                "Trying OTP accesss at Address 0x%04x\n", cptr); 
     3325        if (ar9300_check_eeprom_header(ah, read, cptr)) 
     3326                goto found; 
     3327 
     3328        goto fail; 
     3329 
     3330found: 
     3331        ath_print(common, ATH_DBG_EEPROM, "Found valid EEPROM data"); 
     3332 
    32523333        for (it = 0; it < MSTATE; it++) { 
    3253                 if (!ar9300_read_eeprom(ah, cptr, word, COMP_HDR_LEN)) 
     3334                if (!read(ah, cptr, word, COMP_HDR_LEN)) 
    32543335                        goto fail; 
    32553336 
    3256                 if ((word[0] == 0 && word[1] == 0 && word[2] == 0 && 
    3257                      word[3] == 0) || (word[0] == 0xff && word[1] == 0xff 
    3258                                        && word[2] == 0xff && word[3] == 0xff)) 
     3337                if (!ar9300_check_header(word)) 
    32593338                        break; 
    32603339 
    32613340                ar9300_comp_hdr_unpack(word, &code, &reference, 
    static int ar9300_eeprom_restore_interna 
    32723351                } 
    32733352 
    32743353                osize = length; 
    3275                 ar9300_read_eeprom(ah, cptr, word, 
    3276                                    COMP_HDR_LEN + osize + COMP_CKSUM_LEN); 
     3354                read(ah, cptr, word, COMP_HDR_LEN + osize + COMP_CKSUM_LEN); 
    32773355                checksum = ar9300_comp_cksum(&word[COMP_HDR_LEN], length); 
    32783356                mchecksum = word[COMP_HDR_LEN + osize] | 
    32793357                    (word[COMP_HDR_LEN + osize + 1] << 8); 
  • drivers/net/wireless/ath/ath9k/ar9003_eeprom.h

    a b  
    7979#define FIXED_CCA_THRESHOLD 15 
    8080 
    8181#define AR9300_BASE_ADDR 0x3ff 
     82#define AR9300_BASE_ADDR_512 0x1ff 
     83 
     84#define AR9300_OTP_BASE                 0x14000 
     85#define AR9300_OTP_STATUS               0x15f18 
     86#define AR9300_OTP_STATUS_TYPE          0x7 
     87#define AR9300_OTP_STATUS_VALID         0x4 
     88#define AR9300_OTP_STATUS_ACCESS_BUSY   0x2 
     89#define AR9300_OTP_STATUS_SM_BUSY       0x1 
     90#define AR9300_OTP_READ_DATA            0x15f1c 
    8291 
    8392enum targetPowerHTRates { 
    8493        HT_TARGET_RATE_0_8_16, 
Note: See TracBrowser for help on using the repository browser.