Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Lots of conflicts, by happily all cases of overlapping changes, parallel adds, things of that nature. Thanks to Stephen Rothwell, Saeed Mahameed, and others for their guidance in these resolutions. Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
@@ -2422,6 +2422,28 @@ static int ath10k_core_reset_rx_filter(struct ath10k *ar)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ath10k_core_compat_services(struct ath10k *ar)
|
||||
{
|
||||
struct ath10k_fw_file *fw_file = &ar->normal_mode_fw.fw_file;
|
||||
|
||||
/* all 10.x firmware versions support thermal throttling but don't
|
||||
* advertise the support via service flags so we have to hardcode
|
||||
* it here
|
||||
*/
|
||||
switch (fw_file->wmi_op_version) {
|
||||
case ATH10K_FW_WMI_OP_VERSION_10_1:
|
||||
case ATH10K_FW_WMI_OP_VERSION_10_2:
|
||||
case ATH10K_FW_WMI_OP_VERSION_10_2_4:
|
||||
case ATH10K_FW_WMI_OP_VERSION_10_4:
|
||||
set_bit(WMI_SERVICE_THERM_THROT, ar->wmi.svc_map);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int ath10k_core_start(struct ath10k *ar, enum ath10k_firmware_mode mode,
|
||||
const struct ath10k_fw_components *fw)
|
||||
{
|
||||
@@ -2621,6 +2643,12 @@ int ath10k_core_start(struct ath10k *ar, enum ath10k_firmware_mode mode,
|
||||
goto err_hif_stop;
|
||||
}
|
||||
|
||||
status = ath10k_core_compat_services(ar);
|
||||
if (status) {
|
||||
ath10k_err(ar, "compat services failed: %d\n", status);
|
||||
goto err_hif_stop;
|
||||
}
|
||||
|
||||
/* Some firmware revisions do not properly set up hardware rx filter
|
||||
* registers.
|
||||
*
|
||||
|
@@ -2578,8 +2578,9 @@ int ath10k_debug_register(struct ath10k *ar)
|
||||
debugfs_create_file("pktlog_filter", 0644, ar->debug.debugfs_phy, ar,
|
||||
&fops_pktlog_filter);
|
||||
|
||||
debugfs_create_file("quiet_period", 0644, ar->debug.debugfs_phy, ar,
|
||||
&fops_quiet_period);
|
||||
if (test_bit(WMI_SERVICE_THERM_THROT, ar->wmi.svc_map))
|
||||
debugfs_create_file("quiet_period", 0644, ar->debug.debugfs_phy, ar,
|
||||
&fops_quiet_period);
|
||||
|
||||
debugfs_create_file("tpc_stats", 0400, ar->debug.debugfs_phy, ar,
|
||||
&fops_tpc_stats);
|
||||
|
@@ -140,6 +140,9 @@ void ath10k_thermal_set_throttling(struct ath10k *ar)
|
||||
|
||||
lockdep_assert_held(&ar->conf_mutex);
|
||||
|
||||
if (!test_bit(WMI_SERVICE_THERM_THROT, ar->wmi.svc_map))
|
||||
return;
|
||||
|
||||
if (!ar->wmi.ops->gen_pdev_set_quiet_mode)
|
||||
return;
|
||||
|
||||
@@ -165,6 +168,9 @@ int ath10k_thermal_register(struct ath10k *ar)
|
||||
struct device *hwmon_dev;
|
||||
int ret;
|
||||
|
||||
if (!test_bit(WMI_SERVICE_THERM_THROT, ar->wmi.svc_map))
|
||||
return 0;
|
||||
|
||||
cdev = thermal_cooling_device_register("ath10k_thermal", ar,
|
||||
&ath10k_thermal_ops);
|
||||
|
||||
@@ -216,6 +222,9 @@ err_cooling_destroy:
|
||||
|
||||
void ath10k_thermal_unregister(struct ath10k *ar)
|
||||
{
|
||||
if (!test_bit(WMI_SERVICE_THERM_THROT, ar->wmi.svc_map))
|
||||
return;
|
||||
|
||||
sysfs_remove_link(&ar->dev->kobj, "cooling_device");
|
||||
thermal_cooling_device_unregister(ar->thermal.cdev);
|
||||
}
|
||||
|
@@ -1564,6 +1564,9 @@ wmi_tlv_svc_map_ext(const __le32 *in, unsigned long *out, size_t len)
|
||||
SVCMAP(WMI_TLV_SERVICE_SPOOF_MAC_SUPPORT,
|
||||
WMI_SERVICE_SPOOF_MAC_SUPPORT,
|
||||
WMI_TLV_MAX_SERVICE);
|
||||
SVCMAP(WMI_TLV_SERVICE_THERM_THROT,
|
||||
WMI_SERVICE_THERM_THROT,
|
||||
WMI_TLV_MAX_SERVICE);
|
||||
}
|
||||
|
||||
#undef SVCMAP
|
||||
|
@@ -205,6 +205,7 @@ enum wmi_service {
|
||||
WMI_SERVICE_SPOOF_MAC_SUPPORT,
|
||||
WMI_SERVICE_TX_DATA_ACK_RSSI,
|
||||
WMI_SERVICE_VDEV_DIFFERENT_BEACON_INTERVAL_SUPPORT,
|
||||
WMI_SERVICE_THERM_THROT,
|
||||
|
||||
/* keep last */
|
||||
WMI_SERVICE_MAX,
|
||||
|
Reference in New Issue
Block a user