QCN9575 uses a different HAL register layout from Wi-Fi 7 and requires a dedicated register table and HAL init path. Add QCN9575-specific HAL register definitions in wifi8/hal_qcn9575.c (qcn9575_regs) and its header. Add wifi8/hal.c with an ath12k_hw_version_map entry that points ATH12K_HW_QCN9575_HW20 to qcn9575_regs, and introduce ath12k_wifi8_hal_init(). Invoke ath12k_wifi8_hal_init() from ath12k_wifi8_hw_init() so HAL setup is hooked into the Wi-Fi 8 hardware init path. Keep HAL ops and params fields as NULL placeholders; follow-up patches fill operation tables and remaining HAL parameters. Update wifi8/Makefile to build hal.c and hal_qcn9575.c. Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.6-01243-QCAHKSWPL_SILICONZ-1 Tested-on: WCN7850 hw2.0 PCI WLAN.HMT.1.1.c7-00108-QCAHMTSWPL_V1.0_V2.0_SILICONZ_UPSTREAM-3 Signed-off-by: Madhavan Ganesan --- drivers/net/wireless/ath/ath12k/wifi8/Makefile | 2 ++ drivers/net/wireless/ath/ath12k/wifi8/hal.c | 23 ++++++++++++ drivers/net/wireless/ath/ath12k/wifi8/hal.h | 13 +++++++ .../net/wireless/ath/ath12k/wifi8/hal_qcn9575.c | 42 ++++++++++++++++++++++ .../net/wireless/ath/ath12k/wifi8/hal_qcn9575.h | 13 +++++++ drivers/net/wireless/ath/ath12k/wifi8/hw.c | 3 ++ 6 files changed, 96 insertions(+) diff --git a/drivers/net/wireless/ath/ath12k/wifi8/Makefile b/drivers/net/wireless/ath/ath12k/wifi8/Makefile index 277b5f13754d..b1b90c109c76 100644 --- a/drivers/net/wireless/ath/ath12k/wifi8/Makefile +++ b/drivers/net/wireless/ath/ath12k/wifi8/Makefile @@ -1,5 +1,7 @@ # SPDX-License-Identifier: BSD-3-Clause-Clear obj-$(CONFIG_ATH12K) += ath12k_wifi8.o ath12k_wifi8-y += core.o \ + hal.o \ + hal_qcn9575.o \ hw.o \ pci.o diff --git a/drivers/net/wireless/ath/ath12k/wifi8/hal.c b/drivers/net/wireless/ath/ath12k/wifi8/hal.c new file mode 100644 index 000000000000..1afc6fc21d0f --- /dev/null +++ b/drivers/net/wireless/ath/ath12k/wifi8/hal.c @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: BSD-3-Clause-Clear +/* + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. + */ +#include "../hal.h" +#include "../hif.h" +#include "hal.h" +#include "hal_qcn9575.h" + +static const struct ath12k_hw_version_map ath12k_wifi8_hw_ver_map[] = { + [ATH12K_HW_QCN9575_HW20] = { + .hw_regs = &qcn9575_regs, + }, +}; + +void ath12k_wifi8_hal_init(struct ath12k_base *ab) +{ + struct ath12k_hal *hal = &ab->hal; + + memset(hal, 0, sizeof(*hal)); + + hal->regs = ath12k_wifi8_hw_ver_map[ab->hw_rev].hw_regs; +} diff --git a/drivers/net/wireless/ath/ath12k/wifi8/hal.h b/drivers/net/wireless/ath/ath12k/wifi8/hal.h new file mode 100644 index 000000000000..311fc5b8015c --- /dev/null +++ b/drivers/net/wireless/ath/ath12k/wifi8/hal.h @@ -0,0 +1,13 @@ +/* SPDX-License-Identifier: BSD-3-Clause-Clear */ +/* + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. + */ + +#ifndef ATH12K_WIFI8_HAL_H +#define ATH12K_WIFI8_HAL_H + +#include "../core.h" + +void ath12k_wifi8_hal_init(struct ath12k_base *ab); + +#endif /* ATH12K_WIFI8_HAL_H */ diff --git a/drivers/net/wireless/ath/ath12k/wifi8/hal_qcn9575.c b/drivers/net/wireless/ath/ath12k/wifi8/hal_qcn9575.c new file mode 100644 index 000000000000..56d45785ecd4 --- /dev/null +++ b/drivers/net/wireless/ath/ath12k/wifi8/hal_qcn9575.c @@ -0,0 +1,42 @@ +// SPDX-License-Identifier: BSD-3-Clause-Clear +/* + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. + */ +#include "hal_qcn9575.h" + +const struct ath12k_hw_regs qcn9575_regs = { + /* SW2TCL(x) R0 ring configuration address */ + .tcl1_ring_id = 0x00001604, + .tcl1_ring_misc = 0x0000160c, + .tcl1_ring_tp_addr_lsb = 0x00001618, + .tcl1_ring_tp_addr_msb = 0x0000161c, + .tcl1_ring_consumer_int_setup_ix0 = 0x0000162c, + .tcl1_ring_consumer_int_setup_ix1 = 0x00001630, + .tcl1_ring_msi1_base_lsb = 0x00001644, + .tcl1_ring_msi1_base_msb = 0x00001648, + .tcl1_ring_msi1_data = 0x0000164c, + .tcl1_ring_base_lsb = 0x000015fc, + .tcl1_ring_base_msb = 0x00001600, + + /* REO DEST ring address */ + .reo1_ring_base_lsb = 0x00000848, + .reo1_ring_base_msb = 0x0000084c, + .reo1_ring_id = 0x00000850, + .reo1_ring_misc = 0x00000858, + .reo1_ring_hp_addr_lsb = 0x0000085c, + .reo1_ring_hp_addr_msb = 0x00000860, + .reo1_ring_producer_int_setup = 0x0000086c, + .reo1_ring_msi1_base_lsb = 0x00000890, + .reo1_ring_msi1_base_msb = 0x00000894, + .reo1_ring_msi1_data = 0x00000898, + + /* CE base address */ + .umac_ce0_src_reg_base = 0x01b80000, + .umac_ce0_dest_reg_base = 0x01b81000, + .umac_ce1_src_reg_base = 0x01b82000, + .umac_ce1_dest_reg_base = 0x01b83000, + + .gcc_gcc_pcie_hot_rst = 0x1e38438, + + .qrtr_node_id = 0x01e03300, +}; diff --git a/drivers/net/wireless/ath/ath12k/wifi8/hal_qcn9575.h b/drivers/net/wireless/ath/ath12k/wifi8/hal_qcn9575.h new file mode 100644 index 000000000000..e2dd68ebd82f --- /dev/null +++ b/drivers/net/wireless/ath/ath12k/wifi8/hal_qcn9575.h @@ -0,0 +1,13 @@ +/* SPDX-License-Identifier: BSD-3-Clause-Clear */ +/* + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. + */ + +#ifndef ATH12K_WIFI8_HAL_QCN9575_H +#define ATH12K_WIFI8_HAL_QCN9575_H + +#include "../hal.h" + +extern const struct ath12k_hw_regs qcn9575_regs; + +#endif /* ATH12K_WIFI8_HAL_QCN9575_H */ diff --git a/drivers/net/wireless/ath/ath12k/wifi8/hw.c b/drivers/net/wireless/ath/ath12k/wifi8/hw.c index 6e89a42111b6..91d8f762e642 100644 --- a/drivers/net/wireless/ath/ath12k/wifi8/hw.c +++ b/drivers/net/wireless/ath/ath12k/wifi8/hw.c @@ -11,6 +11,7 @@ #include "../debug.h" #include "../hw.h" #include "../mhi.h" +#include "hal.h" #include "hw.h" static const struct ath12k_hw_params ath12k_wifi8_hw_params[] = { @@ -129,6 +130,8 @@ int ath12k_wifi8_hw_init(struct ath12k_base *ab) ab->hw_params = hw_params; + ath12k_wifi8_hal_init(ab); + ath12k_info(ab, "Wi-Fi 8 Hardware name: %s\n", ab->hw_params->name); return 0; -- 2.34.1