icnss2: Add cmem support for wcn7750

Add cmem support for wcn7750 and pass the mem info
as part of soc info to wlan host driver.

Change-Id: Icb40d8cfe50cdd160471b8210a67ce9dc8dd3ad0
CRs-Fixed: 3750961
This commit is contained in:
Sandeep Singh
2024-03-04 15:14:03 +05:30
committed by Ravindra Konda
parent b6c97a4162
commit f6e67cd993
4 changed files with 24 additions and 2 deletions

View File

@@ -3400,6 +3400,8 @@ int icnss_get_soc_info(struct device *dev, struct icnss_soc_info *info)
info->rd_card_chain_cap = priv->rd_card_chain_cap; info->rd_card_chain_cap = priv->rd_card_chain_cap;
info->phy_he_channel_width_cap = priv->phy_he_channel_width_cap; info->phy_he_channel_width_cap = priv->phy_he_channel_width_cap;
info->phy_qam_cap = priv->phy_qam_cap; info->phy_qam_cap = priv->phy_qam_cap;
memcpy(&info->dev_mem_info, &priv->dev_mem_info,
sizeof(info->dev_mem_info));
return 0; return 0;
} }

View File

@@ -433,6 +433,7 @@ struct icnss_priv {
uint32_t nr_mem_region; uint32_t nr_mem_region;
struct icnss_mem_region_info struct icnss_mem_region_info
mem_region[WLFW_MAX_NUM_MEMORY_REGIONS]; mem_region[WLFW_MAX_NUM_MEMORY_REGIONS];
struct icnss_dev_mem_info dev_mem_info[ICNSS_MAX_DEV_MEM_NUM];
struct dentry *root_dentry; struct dentry *root_dentry;
spinlock_t on_off_lock; spinlock_t on_off_lock;
struct icnss_stats stats; struct icnss_stats stats;

View File

@@ -695,7 +695,7 @@ out:
int wlfw_cap_send_sync_msg(struct icnss_priv *priv) int wlfw_cap_send_sync_msg(struct icnss_priv *priv)
{ {
int ret; int ret = 0, i = 0;
struct wlfw_cap_req_msg_v01 *req; struct wlfw_cap_req_msg_v01 *req;
struct wlfw_cap_resp_msg_v01 *resp; struct wlfw_cap_resp_msg_v01 *resp;
struct qmi_txn txn; struct qmi_txn txn;
@@ -774,6 +774,18 @@ int wlfw_cap_send_sync_msg(struct icnss_priv *priv)
WLFW_MAX_TIMESTAMP_LEN + 1); WLFW_MAX_TIMESTAMP_LEN + 1);
} }
if (resp->dev_mem_info_valid) {
for (i = 0; i < QMI_WLFW_MAX_DEV_MEM_NUM_V01; i++) {
priv->dev_mem_info[i].start =
resp->dev_mem_info[i].start;
priv->dev_mem_info[i].size =
resp->dev_mem_info[i].size;
icnss_pr_info("Device memory info[%d]: start = 0x%llx, size = 0x%llx\n",
i, priv->dev_mem_info[i].start,
priv->dev_mem_info[i].size);
}
}
if (resp->voltage_mv_valid) { if (resp->voltage_mv_valid) {
priv->cpr_info.voltage = resp->voltage_mv; priv->cpr_info.voltage = resp->voltage_mv;
icnss_pr_dbg("Voltage for CPR: %dmV\n", icnss_pr_dbg("Voltage for CPR: %dmV\n",

View File

@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: GPL-2.0-only */ /* SPDX-License-Identifier: GPL-2.0-only */
/* /*
* Copyright (c) 2015-2021, The Linux Foundation. All rights reserved. * Copyright (c) 2015-2021, The Linux Foundation. All rights reserved.
* Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved. * Copyright (c) 2023-2024 Qualcomm Innovation Center, Inc. All rights reserved.
*/ */
#ifndef _ICNSS_WLAN_H_ #ifndef _ICNSS_WLAN_H_
#define _ICNSS_WLAN_H_ #define _ICNSS_WLAN_H_
@@ -13,6 +13,7 @@
#define IWCN_MAX_IRQ_REGISTRATIONS 32 #define IWCN_MAX_IRQ_REGISTRATIONS 32
#define ICNSS_MAX_TIMESTAMP_LEN 32 #define ICNSS_MAX_TIMESTAMP_LEN 32
#define ICNSS_WLFW_MAX_BUILD_ID_LEN 128 #define ICNSS_WLFW_MAX_BUILD_ID_LEN 128
#define ICNSS_MAX_DEV_MEM_NUM 4
#define DEVICE_NAME_MAX 10 #define DEVICE_NAME_MAX 10
enum icnss_uevent { enum icnss_uevent {
@@ -40,6 +41,11 @@ struct icnss_uevent_data {
void *data; void *data;
}; };
struct icnss_dev_mem_info {
u64 start;
u64 size;
};
/* Device information like supported device ids, etc*/ /* Device information like supported device ids, etc*/
struct device_info { struct device_info {
char name[DEVICE_NAME_MAX]; char name[DEVICE_NAME_MAX];
@@ -165,6 +171,7 @@ struct icnss_soc_info {
enum icnss_rd_card_chain_cap rd_card_chain_cap; enum icnss_rd_card_chain_cap rd_card_chain_cap;
enum icnss_phy_he_channel_width_cap phy_he_channel_width_cap; enum icnss_phy_he_channel_width_cap phy_he_channel_width_cap;
enum icnss_phy_qam_cap phy_qam_cap; enum icnss_phy_qam_cap phy_qam_cap;
struct icnss_dev_mem_info dev_mem_info[ICNSS_MAX_DEV_MEM_NUM];
}; };
#define icnss_register_driver(ops) \ #define icnss_register_driver(ops) \