• Marty Faltesek's avatar
    ath10k: cache calibration data when the core is stopped · f67b107d
    Marty Faltesek authored
    Commit 0b8e3c4c ("ath10k: move cal data len to hw_params") broke retrieving
    the calibration data from cal_data debugfs file. The length of file was always
    zero. The reason is:
    
        static ssize_t ath10k_debug_cal_data_read(struct file *file,
                                              char __user *user_buf,
                                              size_t count, loff_t *ppos)
        {
            struct ath10k *ar = file->private_data;
            void *buf = file->private_data;
    
    This is obviously bogus, private_data cannot contain both struct ath10k and the
    buffer. Fix it by caching calibration data to ar->debug.cal_data. This also
    allows it to be accessed when the device is not active (interface is down).
    
    The cal_data buffer is fixed size because during the first firmware probe we
    don't yet know what will be the lenght of the calibration data. It was simplest
    just to use a fixed length. There's a WARN_ON() in
    ath10k_debug_cal_data_fetch() if the buffer is too small.
    
    Tested with qca988x and firmware 10.2.4.70.56.
    Reported-by: default avatarNikolay Martynov <mar.kolya@gmail.com>
    Fixes: 0b8e3c4c ("ath10k: move cal data len to hw_params")
    Cc: stable@vger.kernel.org # 4.7+
    Signed-off-by: default avatarMarty Faltesek <mfaltesek@google.com>
    [kvalo@qca.qualcomm.com: improve commit log and minor other changes]
    Signed-off-by: default avatarKalle Valo <kvalo@qca.qualcomm.com>
    f67b107d
core.h 22.4 KB