xref: /linux/drivers/net/wireless/ath/ath12k/wifi7/ahb.c (revision 37a93dd5c49b5fda807fd204edf2547c3493319c)
1a7202704SKiran Venkatappa // SPDX-License-Identifier: BSD-3-Clause-Clear
2a7202704SKiran Venkatappa /*
3a7202704SKiran Venkatappa  * Copyright (c) 2018-2019 The Linux Foundation. All rights reserved.
4a7202704SKiran Venkatappa  * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
5a7202704SKiran Venkatappa  */
6a7202704SKiran Venkatappa 
7a7202704SKiran Venkatappa #include <linux/of_device.h>
8a7202704SKiran Venkatappa #include <linux/platform_device.h>
9a7202704SKiran Venkatappa #include <linux/soc/qcom/mdt_loader.h>
10a7202704SKiran Venkatappa #include "../ahb.h"
11a7202704SKiran Venkatappa #include "ahb.h"
12a7202704SKiran Venkatappa #include "../debug.h"
13a7202704SKiran Venkatappa #include "../hif.h"
14a7202704SKiran Venkatappa #include "hw.h"
15*614c23e2SRipan Deuri #include "dp.h"
16*614c23e2SRipan Deuri #include "core.h"
17a7202704SKiran Venkatappa 
18a7202704SKiran Venkatappa static const struct of_device_id ath12k_wifi7_ahb_of_match[] = {
19a7202704SKiran Venkatappa 	{ .compatible = "qcom,ipq5332-wifi",
20a7202704SKiran Venkatappa 	  .data = (void *)ATH12K_HW_IPQ5332_HW10,
21a7202704SKiran Venkatappa 	},
22a7202704SKiran Venkatappa 	{ }
23a7202704SKiran Venkatappa };
24a7202704SKiran Venkatappa 
25a7202704SKiran Venkatappa MODULE_DEVICE_TABLE(of, ath12k_wifi7_ahb_of_match);
26a7202704SKiran Venkatappa 
27a7202704SKiran Venkatappa static int ath12k_wifi7_ahb_probe(struct platform_device *pdev)
28a7202704SKiran Venkatappa {
29a7202704SKiran Venkatappa 	struct ath12k_ahb *ab_ahb;
30a7202704SKiran Venkatappa 	enum ath12k_hw_rev hw_rev;
31a7202704SKiran Venkatappa 	struct ath12k_base *ab;
32a7202704SKiran Venkatappa 	int ret;
33a7202704SKiran Venkatappa 
34a7202704SKiran Venkatappa 	ab = platform_get_drvdata(pdev);
35a7202704SKiran Venkatappa 	ab_ahb = ath12k_ab_to_ahb(ab);
36a7202704SKiran Venkatappa 
37a7202704SKiran Venkatappa 	hw_rev = (enum ath12k_hw_rev)(kernel_ulong_t)of_device_get_match_data(&pdev->dev);
38a7202704SKiran Venkatappa 	switch (hw_rev) {
39a7202704SKiran Venkatappa 	case ATH12K_HW_IPQ5332_HW10:
40a7202704SKiran Venkatappa 		ab_ahb->userpd_id = ATH12K_IPQ5332_USERPD_ID;
41a7202704SKiran Venkatappa 		break;
42a7202704SKiran Venkatappa 	default:
43a7202704SKiran Venkatappa 		return -EOPNOTSUPP;
44a7202704SKiran Venkatappa 	}
45a7202704SKiran Venkatappa 
46a7202704SKiran Venkatappa 	ab->target_mem_mode = ATH12K_QMI_MEMORY_MODE_DEFAULT;
47a7202704SKiran Venkatappa 	ab->hw_rev = hw_rev;
48a7202704SKiran Venkatappa 
49a7202704SKiran Venkatappa 	ret = ath12k_wifi7_hw_init(ab);
50a7202704SKiran Venkatappa 	if (ret) {
51a7202704SKiran Venkatappa 		ath12k_err(ab, "WiFi-7 hw_init for AHB failed: %d\n", ret);
52a7202704SKiran Venkatappa 		return ret;
53a7202704SKiran Venkatappa 	}
54a7202704SKiran Venkatappa 
55a7202704SKiran Venkatappa 	return 0;
56a7202704SKiran Venkatappa }
57a7202704SKiran Venkatappa 
58a7202704SKiran Venkatappa static struct ath12k_ahb_driver ath12k_wifi7_ahb_driver = {
59a7202704SKiran Venkatappa 	.name = "ath12k_wifi7_ahb",
60a7202704SKiran Venkatappa 	.id_table = ath12k_wifi7_ahb_of_match,
61a7202704SKiran Venkatappa 	.ops.probe = ath12k_wifi7_ahb_probe,
62*614c23e2SRipan Deuri 	.ops.arch_init = ath12k_wifi7_arch_init,
63*614c23e2SRipan Deuri 	.ops.arch_deinit = ath12k_wifi7_arch_deinit,
64a7202704SKiran Venkatappa };
65a7202704SKiran Venkatappa 
66a7202704SKiran Venkatappa int ath12k_wifi7_ahb_init(void)
67a7202704SKiran Venkatappa {
68a7202704SKiran Venkatappa 	return ath12k_ahb_register_driver(ATH12K_DEVICE_FAMILY_WIFI7,
69a7202704SKiran Venkatappa 					  &ath12k_wifi7_ahb_driver);
70a7202704SKiran Venkatappa }
71a7202704SKiran Venkatappa 
72a7202704SKiran Venkatappa void ath12k_wifi7_ahb_exit(void)
73a7202704SKiran Venkatappa {
74a7202704SKiran Venkatappa 	ath12k_ahb_unregister_driver(ATH12K_DEVICE_FAMILY_WIFI7);
75a7202704SKiran Venkatappa }
76