On 5/22/2025 9:34 AM, Miaoqing Pan wrote: > Introduce 'firmware-name' property to allow end-users and/or integrators to > decide which usecase-specific firmware to run on the WCN6855. This is > necessary due to resource limitations such as memory capacity and CPU > capability, or performance and power optimization for different application > scenarios. > > Currently, there are two firmwares, both files can be executed > interchangeably. > For example: > > - ath11k/WCN6855/hw2.0/amss.bin, > ath11k/WCN6855/hw2.0/m3.bin > ath11k/WCN6855/hw2.0/board-2.bin > > - ath11k/WCN6855/hw2.0/nfa765/amss.bin, > ath11k/WCN6855/hw2.0/nfa765/m3.bin > ath11k/WCN6855/hw2.0/board-2.bin > > The former is the default firmware, suitable for most WiFi 6 STA functions. > The latter adds support for commercial-quality SAP and optimizes power > consumption for IoT applications. And both use the same BDF/regdb data > within the main board-2.bin. > > Tested-on: WCN6855 hw2.1 PCI WLAN.HSP.1.1-04479-QCAHSPSWPL_V1_V2_SILICONZ_IOE-1 > > Signed-off-by: Miaoqing Pan <miaoqing.pan@xxxxxxxxxxxxxxxx> > --- > drivers/net/wireless/ath/ath11k/core.h | 13 +++++++++++-- > 1 file changed, 11 insertions(+), 2 deletions(-) > > diff --git a/drivers/net/wireless/ath/ath11k/core.h b/drivers/net/wireless/ath/ath11k/core.h > index 339d4fca1ed5..67b3b6d898fa 100644 > --- a/drivers/net/wireless/ath/ath11k/core.h > +++ b/drivers/net/wireless/ath/ath11k/core.h > @@ -17,6 +17,7 @@ > #include <linux/average.h> > #include <linux/firmware.h> > #include <linux/suspend.h> > +#include <linux/of.h> > > #include "qmi.h" > #include "htc.h" > @@ -1320,8 +1321,16 @@ static inline void ath11k_core_create_firmware_path(struct ath11k_base *ab, > const char *filename, > void *buf, size_t buf_len) > { > - snprintf(buf, buf_len, "%s/%s/%s", ATH11K_FW_DIR, > - ab->hw_params.fw.dir, filename); > + const char *fw_name = NULL; > + > + of_property_read_string(ab->dev->of_node, "firmware-name", &fw_name); > + > + if (fw_name && strncmp(filename, "board", 5)) > + snprintf(buf, buf_len, "%s/%s/%s/%s", ATH11K_FW_DIR, > + ab->hw_params.fw.dir, fw_name, filename); > + else > + snprintf(buf, buf_len, "%s/%s/%s", ATH11K_FW_DIR, > + ab->hw_params.fw.dir, filename); > } > > static inline const char *ath11k_bus_str(enum ath11k_bus bus) Reviewed-by: Baochen Qiang <quic_bqiang@xxxxxxxxxxx>