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

Commit 5c729815 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "wil6210: fix HALP handling in case of HALP vote time-out"

parents 900b21c8 f6b6193d
Loading
Loading
Loading
Loading
+9 −2
Original line number Diff line number Diff line
/*
 * Copyright (c) 2012-2015 Qualcomm Atheros, Inc.
 * Copyright (c) 2012-2016 Qualcomm Atheros, Inc.
 *
 * Permission to use, copy, modify, and/or distribute this software for any
 * purpose with or without fee is hereby granted, provided that the above
@@ -101,7 +101,7 @@ static void wil6210_mask_irq_misc(struct wil6210_priv *wil, bool mask_halp)
	      mask_halp ? WIL6210_IRQ_DISABLE : WIL6210_IRQ_DISABLE_NO_HALP);
}

static void wil6210_mask_halp(struct wil6210_priv *wil)
void wil6210_mask_halp(struct wil6210_priv *wil)
{
	wil_dbg_irq(wil, "%s()\n", __func__);

@@ -503,6 +503,13 @@ static int wil6210_debug_irq_mask(struct wil6210_priv *wil, u32 pseudo_cause)
				offsetof(struct RGF_ICR, ICR));
		u32 imv_misc = wil_r(wil, RGF_DMA_EP_MISC_ICR +
				     offsetof(struct RGF_ICR, IMV));

		/* HALP interrupt can be unmasked when misc interrupts are
		 * masked
		 */
		if (icr_misc & BIT_DMA_EP_MISC_ICR_HALP)
			return 0;

		wil_err(wil, "IRQ when it should be masked: pseudo 0x%08x\n"
				"Rx   icm:icr:imv 0x%08x 0x%08x 0x%08x\n"
				"Tx   icm:icr:imv 0x%08x 0x%08x 0x%08x\n"
+5 −2
Original line number Diff line number Diff line
@@ -1116,14 +1116,17 @@ void wil_halp_vote(struct wil6210_priv *wil)
	if (++wil->halp.ref_cnt == 1) {
		wil6210_set_halp(wil);
		rc = wait_for_completion_timeout(&wil->halp.comp, to_jiffies);
		if (!rc)
		if (!rc) {
			wil_err(wil, "%s: HALP vote timed out\n", __func__);
		else
			/* Mask HALP as done in case the interrupt is raised */
			wil6210_mask_halp(wil);
		} else {
			wil_dbg_misc(wil,
				     "%s: HALP vote completed after %d ms\n",
				     __func__,
				     jiffies_to_msecs(to_jiffies - rc));
		}
	}

	wil_dbg_misc(wil, "%s: end, HALP ref_cnt (%d)\n", __func__,
		     wil->halp.ref_cnt);
+1 −0
Original line number Diff line number Diff line
@@ -824,6 +824,7 @@ void wil_unmask_irq(struct wil6210_priv *wil);
void wil_configure_interrupt_moderation(struct wil6210_priv *wil);
void wil_disable_irq(struct wil6210_priv *wil);
void wil_enable_irq(struct wil6210_priv *wil);
void wil6210_mask_halp(struct wil6210_priv *wil);

/* P2P */
bool wil_p2p_is_social_scan(struct cfg80211_scan_request *request);