Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3b10cb37 authored by Mohammed Siddiq's avatar Mohammed Siddiq Committed by Gerrit - the friendly Code Review server
Browse files

cnss2: Log SW_CTRL GPIO value if PCIe link training fails



Add change to print SW_CTRL GPIO value when PCIe link training
fails during power on.

Change-Id: I77bd2db80dad4c56647f52d67acfab0fe7efb7a7
Signed-off-by: default avatarMohammed Siddiq <msiddiq@codeaurora.org>
parent 970f4dd4
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -84,6 +84,7 @@ struct cnss_pinctrl_info {
	struct pinctrl_state *wlan_en_active;
	struct pinctrl_state *wlan_en_sleep;
	int bt_en_gpio;
	int sw_ctrl_gpio;
};

#ifdef CONFIG_MSM_SUBSYSTEM_RESTART
@@ -481,4 +482,6 @@ unsigned int cnss_get_timeout(struct cnss_plat_data *plat_priv,
			      enum cnss_timeout_type);
int cnss_pci_update_qtime_sync_period(struct device *dev,
				      unsigned int qtime_sync_period);
int cnss_get_gpio_value(struct cnss_plat_data *plat_priv, int gpio_num);

#endif /* _CNSS_MAIN_H */
+6 −1
Original line number Diff line number Diff line
@@ -2054,7 +2054,7 @@ static int cnss_qca6290_powerup(struct cnss_pci_data *pci_priv)
	int ret = 0;
	struct cnss_plat_data *plat_priv = pci_priv->plat_priv;
	unsigned int timeout;
	int retry = 0;
	int retry = 0, sw_ctrl_gpio = plat_priv->pinctrl_info.sw_ctrl_gpio;

	if (plat_priv->ramdump_info_v2.dump_data_valid) {
		cnss_pci_clear_dump_info(pci_priv);
@@ -2071,6 +2071,8 @@ static int cnss_qca6290_powerup(struct cnss_pci_data *pci_priv)

	ret = cnss_resume_pci_link(pci_priv);
	if (ret) {
		cnss_pr_dbg("Value of SW_CNTRL GPIO: %d\n",
			    cnss_get_gpio_value(plat_priv, sw_ctrl_gpio));
		cnss_pr_err("Failed to resume PCI link, err = %d\n", ret);
		if (test_bit(IGNORE_PCI_LINK_FAILURE,
			     &plat_priv->ctrl_params.quirks)) {
@@ -2081,6 +2083,9 @@ static int cnss_qca6290_powerup(struct cnss_pci_data *pci_priv)
		if (ret == -EAGAIN && retry++ < POWER_ON_RETRY_MAX_TIMES) {
			cnss_power_off_device(plat_priv);
			cnss_pr_dbg("Retry to resume PCI link #%d\n", retry);
			cnss_pr_dbg("Value of SW_CNTRL GPIO: %d\n",
				    cnss_get_gpio_value(plat_priv,
							sw_ctrl_gpio));
			msleep(POWER_ON_RETRY_DELAY_MS * retry);
			goto retry;
		}
+29 −1
Original line number Diff line number Diff line
@@ -4,10 +4,10 @@
#include <linux/clk.h>
#include <linux/delay.h>
#include <linux/of.h>
#include <linux/of_gpio.h>
#include <linux/pinctrl/consumer.h>
#include <linux/regulator/consumer.h>
#include <soc/qcom/cmd-db.h>
#include <linux/of_gpio.h>

#include "main.h"
#include "debug.h"
@@ -42,6 +42,7 @@ static struct cnss_clk_cfg cnss_clk_list[] = {
#define BOOTSTRAP_GPIO			"qcom,enable-bootstrap-gpio"
#define BOOTSTRAP_ACTIVE		"bootstrap_active"
#define WLAN_EN_GPIO			"wlan-en-gpio"
#define SW_CTRL_GPIO			"qcom,sw-ctrl-gpio"
#define BT_EN_GPIO			"qcom,bt-en-gpio"
#define WLAN_EN_ACTIVE			"wlan_en_active"
#define WLAN_EN_SLEEP			"wlan_en_sleep"
@@ -712,6 +713,16 @@ int cnss_get_pinctrl(struct cnss_plat_data *plat_priv)
		pinctrl_info->bt_en_gpio = -EINVAL;
	}

	if (of_find_property(dev->of_node, SW_CTRL_GPIO, NULL)) {
		pinctrl_info->sw_ctrl_gpio = of_get_named_gpio(dev->of_node,
							       SW_CTRL_GPIO,
							       0);
		cnss_pr_dbg("Switch control GPIO: %d\n",
			    pinctrl_info->sw_ctrl_gpio);
	} else {
		pinctrl_info->sw_ctrl_gpio = -EINVAL;
	}

	return 0;
out:
	return ret;
@@ -826,6 +837,23 @@ static int cnss_select_pinctrl_enable(struct cnss_plat_data *plat_priv)
	return ret;
}

int cnss_get_gpio_value(struct cnss_plat_data *plat_priv, int gpio_num)
{
	int ret = 0;

	if (gpio_num < 0)
		return -EINVAL;

	ret = gpio_direction_input(gpio_num);
	if (ret) {
		cnss_pr_err("Failed to set direction of the GPIO(%d), err %d",
			    gpio_num, ret);
		return -EINVAL;
	}

	return  gpio_get_value(gpio_num);
}

int cnss_power_on_device(struct cnss_plat_data *plat_priv)
{
	int ret = 0;