Browse Source

Merge 4d71059d9b88a194d3511fc6bda9f0cc0c600753 on remote branch

Change-Id: I377c53a7453c587aa28bf739cbc20884844984dd
Linux Build Service Account 2 năm trước cách đây
mục cha
commit
daf5d7412f
4 tập tin đã thay đổi với 25 bổ sung13 xóa
  1. 5 10
      cnss2/main.c
  2. 5 2
      cnss2/qmi.c
  3. 2 0
      icnss2/main.c
  4. 13 1
      inc/cnss2.h

+ 5 - 10
cnss2/main.c

@@ -1,7 +1,7 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
  * Copyright (c) 2016-2021, The Linux Foundation. All rights reserved.
- * Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
  */
 
 #include <linux/delay.h>
@@ -494,7 +494,8 @@ int cnss_audio_smmu_map(struct device *dev, phys_addr_t paddr,
 	paddr -= page_offset;
 
 	return iommu_map(plat_priv->audio_iommu_domain, iova, paddr,
-			 roundup(size, PAGE_SIZE), IOMMU_READ | IOMMU_WRITE);
+			 roundup(size, PAGE_SIZE), IOMMU_READ | IOMMU_WRITE |
+			 IOMMU_CACHE);
 }
 EXPORT_SYMBOL(cnss_audio_smmu_map);
 
@@ -843,6 +844,7 @@ static int cnss_fw_ready_hdlr(struct cnss_plat_data *plat_priv)
 	clear_bit(CNSS_DEV_ERR_NOTIFY, &plat_priv->driver_state);
 
 	cnss_wlfw_send_pcie_gen_speed_sync(plat_priv);
+	cnss_send_subsys_restart_level_msg(plat_priv);
 
 	if (test_bit(CNSS_FW_BOOT_RECOVERY, &plat_priv->driver_state)) {
 		clear_bit(CNSS_FW_BOOT_RECOVERY, &plat_priv->driver_state);
@@ -3584,7 +3586,6 @@ static ssize_t recovery_store(struct device *dev,
 {
 	struct cnss_plat_data *plat_priv = dev_get_drvdata(dev);
 	unsigned int recovery = 0;
-	int ret;
 
 	if (!plat_priv)
 		return -ENODEV;
@@ -3602,13 +3603,7 @@ static ssize_t recovery_store(struct device *dev,
 	cnss_pr_dbg("%s PCSS recovery, count is %zu\n",
 		    plat_priv->recovery_pcss_enabled ? "Enable" : "Disable", count);
 
-	ret = cnss_send_subsys_restart_level_msg(plat_priv);
-	if (ret < 0) {
-		cnss_pr_err("pcss recovery setting failed with ret %d\n", ret);
-		plat_priv->recovery_pcss_enabled = false;
-		return -EINVAL;
-	}
-
+	cnss_send_subsys_restart_level_msg(plat_priv);
 	return count;
 }
 

+ 5 - 2
cnss2/qmi.c

@@ -3563,8 +3563,8 @@ int cnss_send_subsys_restart_level_msg(struct cnss_plat_data *plat_priv)
 		return -ENODEV;
 
 	if (!test_bit(CNSS_FW_READY, &plat_priv->driver_state)) {
-		cnss_pr_err("Can't send pcss cmd before fw ready\n");
-		return -EINVAL;
+		cnss_pr_dbg("Can't send pcss cmd before fw ready\n");
+		return 0;
 	}
 
 	pcss_enabled = plat_priv->recovery_pcss_enabled;
@@ -3579,6 +3579,9 @@ int cnss_send_subsys_restart_level_msg(struct cnss_plat_data *plat_priv)
 			    QMI_WLFW_SUBSYS_RESTART_LEVEL_REQ_V01,
 			    WLFW_SUBSYS_RESTART_LEVEL_REQ_MSG_V01_MAX_MSG_LEN,
 			    QMI_WLFW_TIMEOUT_JF);
+
+	if (ret < 0)
+		cnss_pr_err("pcss recovery setting failed with ret %d\n", ret);
 	return ret;
 }
 

+ 2 - 0
icnss2/main.c

@@ -4050,6 +4050,8 @@ static int icnss_smmu_fault_handler(struct iommu_domain *domain,
 
 	if (test_bit(ICNSS_FW_READY, &priv->state)) {
 		fw_down_data.crashed = true;
+		icnss_call_driver_uevent(priv, ICNSS_UEVENT_SMMU_FAULT,
+					 &fw_down_data);
 		icnss_call_driver_uevent(priv, ICNSS_UEVENT_FW_DOWN,
 					 &fw_down_data);
 	}

+ 13 - 1
inc/cnss2.h

@@ -1,7 +1,7 @@
 /* SPDX-License-Identifier: GPL-2.0-only */
 /*
  * Copyright (c) 2016-2021, The Linux Foundation. All rights reserved.
- * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
  */
 
 #ifndef _NET_CNSS2_H
@@ -21,6 +21,8 @@
  */
 #define CNSS_API_WITH_DEV
 
+#define CNSS_SSR_DRIVER_DUMP_MAX_REGIONS 32
+
 enum cnss_bus_width_type {
 	CNSS_BUS_WIDTH_NONE,
 	CNSS_BUS_WIDTH_IDLE,
@@ -122,6 +124,13 @@ struct cnss_uevent_data {
 	void *data;
 };
 
+struct cnss_ssr_driver_dump_entry {
+	char region_name[CNSS_SSR_DRIVER_DUMP_MAX_REGIONS];
+	void *buffer_pointer;
+	size_t buffer_size;
+};
+
+
 struct cnss_wlan_driver {
 	char *name;
 	int  (*probe)(struct pci_dev *pdev, const struct pci_device_id *id);
@@ -144,6 +153,9 @@ struct cnss_wlan_driver {
 	const struct pci_device_id *id_table;
 	u32 chip_version;
 	enum cnss_driver_mode (*get_driver_mode)(void);
+	int (*collect_driver_dump)(struct pci_dev *pdev,
+				   struct cnss_ssr_driver_dump_entry *input_array,
+				   size_t *num_entries_loaded);
 };
 
 struct cnss_ce_tgt_pipe_cfg {