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

Commit ecac1071 authored by Dedy Lansky's avatar Dedy Lansky Committed by Maya Erez
Browse files

wil6210: store FW RF calibration result



Store initial FW RF calibration result in driver. Set this calibration
result back to FW after each FW reset in order to avoid future calibration
procedures.

Change-Id: Id7dec17d6306e3234285874bd83b71ba4009afef
Signed-off-by: default avatarDedy Lansky <qca_dlansky@qca.qualcomm.com>
Signed-off-by: default avatarMaya Erez <qca_merez@qca.qualcomm.com>
Signed-off-by: default avatarKalle Valo <kvalo@qca.qualcomm.com>
Git-commit: eb4c02155881696ee6abb090d554b765e41d46ed
Git-repo: git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git


Signed-off-by: default avatarMaya Erez <merez@codeaurora.org>
parent 7c6746da
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -1042,6 +1042,12 @@ int wil_reset(struct wil6210_priv *wil, bool load_fw)
		wil_s(wil, RGF_CAF_ICR + offsetof(struct RGF_ICR, ICR), 0);
		wil_w(wil, RGF_CAF_ICR + offsetof(struct RGF_ICR, IMV), ~0);

		if (wil->fw_calib_result > 0) {
			__le32 val = cpu_to_le32(wil->fw_calib_result |
						 (CALIB_RESULT_SIGNATURE << 8));
			wil_w(wil, RGF_USER_FW_CALIB_RESULT, (u32 __force)val);
		}

		wil_release_cpu(wil);
	}

+6 −0
Original line number Diff line number Diff line
@@ -175,6 +175,10 @@ struct RGF_ICR {
#define RGF_USER_USER_SCRATCH_PAD	(0x8802bc)
#define RGF_USER_BL			(0x880A3C) /* Boot Loader */
#define RGF_USER_FW_REV_ID		(0x880a8c) /* chip revision */
#define RGF_USER_FW_CALIB_RESULT	(0x880a90) /* b0-7:result
						    * b8-15:signature
						    */
	#define CALIB_RESULT_SIGNATURE	(0x11)
#define RGF_USER_CLKS_CTL_0		(0x880abc)
	#define BIT_USER_CLKS_CAR_AHB_SW_SEL	BIT(1) /* ref clk/PLL */
	#define BIT_USER_CLKS_RST_PWGD	BIT(11) /* reset on "power good" */
@@ -733,6 +737,8 @@ struct wil6210_priv {
	bool tt_data_set;
	struct wmi_tt_data tt_data;

	int fw_calib_result;

#ifdef CONFIG_PM
#ifdef CONFIG_PM_SLEEP
	struct notifier_block pm_notify;
+5 −0
Original line number Diff line number Diff line
@@ -345,6 +345,11 @@ static void wmi_evt_ready(struct wil6210_priv *wil, int id, void *d, int len)
	strlcpy(wdev->wiphy->fw_version, wil->fw_version,
		sizeof(wdev->wiphy->fw_version));

	if (len > offsetof(struct wmi_ready_event, rfc_read_calib_result)) {
		wil_dbg_wmi(wil, "rfc calibration result %d\n",
			    evt->rfc_read_calib_result);
		wil->fw_calib_result = evt->rfc_read_calib_result;
	}
	wil_set_recovery_state(wil, fw_recovery_idle);
	set_bit(wil_status_fwready, wil->status);
	/* let the reset sequence continue */
+2 −0
Original line number Diff line number Diff line
@@ -1300,6 +1300,8 @@ struct wmi_ready_event {
	/* enum wmi_phy_capability */
	u8 phy_capability;
	u8 numof_additional_mids;
	u8 rfc_read_calib_result;
	u8 reserved[3];
} __packed;

/* WMI_NOTIFY_REQ_DONE_EVENTID */