Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp1029324yba; Thu, 4 Apr 2019 02:48:13 -0700 (PDT) X-Google-Smtp-Source: APXvYqzxonzdWAZwde4oqNm8UiIF4GtF/brDwptnXfJZwekNjw0nLwe3G2AIOmbGIURRR8D2+UPV X-Received: by 2002:a17:902:7785:: with SMTP id o5mr5389330pll.33.1554371293377; Thu, 04 Apr 2019 02:48:13 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1554371293; cv=none; d=google.com; s=arc-20160816; b=j1ZlNpseQAfSGxsauIeAoenmNjkhaHHiOY2mm205r3oqFE43zYrOeZ1fHF/xZk+Dyp WFBfOfRDdrd9FS3fgme/MwtxaE8yJG38E8aZEERIbRcdJs71udVqNXXOmOv6gNOHZpf9 i2//HjKI6osIlYCb8dX96yHGnT/s+oOvu+Q4ZzTBalFFCOiotxNXYqTJ+7KSVlJscoca 0j20y4yrAx72BqlsU3GpBpHANk9vgjhiXi2itEiA74KaAXoYIH+ZEa0gcsjHyDTowE+y BawPt6j27lzhjFUiGk8JOgZ7JdE8/EOQLoCdWWBlp+CQL0kggai7ZqZwpr0Ib9yQM3HL ZNTw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=ab8WP/DXmQ1Cdt7/MNgDndXXwPOVtw2zWB7kKF8Vlt8=; b=DXZ0ySA8ujtJy5KL/93m5wGncQYXGv5x3EwXKq+SCmUFJIVw3ic+9kcgoMCTe1oAsw xZoYhuVZqxK/8AVEFYsqEfHMsAOxvdGXy4q134k40xnPB6Cs7v5LDPE+wHuNGsqjba0D JMFxowVR89ikkWiNfWzaAXukCmx0mXavu7xlHhbhcsyDErzrKXMUeKvT55tAYQ1WA38t KJNNfwg42USWjj8lpm6CskREm3B6KOCxB3IugEkjJRHhseom2Xa1wycqDpa+GfotjHpz ij/zL14BTpuNpSVMI8oJDw+kgAlBkuDjd1A6rualqP/6FfK4RBtymrsM7aG0WxkJ1Jyz ggLA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=aslmg9Ey; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id a2si7310458pgn.530.2019.04.04.02.47.58; Thu, 04 Apr 2019 02:48:13 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=aslmg9Ey; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730763AbfDDJqQ (ORCPT + 99 others); Thu, 4 Apr 2019 05:46:16 -0400 Received: from mail.kernel.org ([198.145.29.99]:34668 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729868AbfDDI6k (ORCPT ); Thu, 4 Apr 2019 04:58:40 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 3182A2184E; Thu, 4 Apr 2019 08:58:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1554368319; bh=nMADdsGGqy93p6BnP93FT6TGT9ky/0AEr9SEYJhB98U=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=aslmg9Ey/MHGNaEVhBjbySlJ6ZziaHfMN6saAat9o9tc5J2hoSTamEn16Tow4NZqK a1gNAOlwWacLy/YJDdGxo47ly1LzoK0raxkMNwUkg8Nc1Yimwup9TEZwBJ1VgVES+X QwvbpF3ya81oZ6kSJvG1Y/F2K0sWRKaV3bLjN31Q= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Song Hongyan , Srinivas Pandruvada , Jiri Kosina , Sasha Levin Subject: [PATCH 4.14 103/121] HID: intel-ish: ipc: handle PIMR before ish_wakeup also clear PISR busy_clear bit Date: Thu, 4 Apr 2019 10:48:11 +0200 Message-Id: <20190404084550.872809250@linuxfoundation.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190404084545.245659903@linuxfoundation.org> References: <20190404084545.245659903@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review X-Patchwork-Hint: ignore MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.14-stable review patch. If anyone has any objections, please let me know. ------------------ [ Upstream commit 2edefc056e4f0e6ec9508dd1aca2c18fa320efef ] Host driver should handle interrupt mask register earlier than wake up ish FW else there will be conditions when FW interrupt comes, host PIMR register still not set ready, so move the interrupt mask setting before ish_wakeup. Clear PISR busy_clear bit in ish_irq_handler. If not clear, there will be conditions host driver received a busy_clear interrupt (before the busy_clear mask bit is ready), it will return IRQ_NONE after check_generated_interrupt, the interrupt will never be cleared, causing the DEVICE not sending following IRQ. Since PISR clear should not be called for the CHV device we do this change. After the change, both ISH2HOST interrupt and busy_clear interrupt will be considered as interrupt from ISH, busy_clear interrupt will return IRQ_HANDLED from IPC_IS_BUSY check. Signed-off-by: Song Hongyan Acked-by: Srinivas Pandruvada Signed-off-by: Jiri Kosina Signed-off-by: Sasha Levin --- drivers/hid/intel-ish-hid/ipc/ipc.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/drivers/hid/intel-ish-hid/ipc/ipc.c b/drivers/hid/intel-ish-hid/ipc/ipc.c index 9a60ec13cb10..a3106fcc2253 100644 --- a/drivers/hid/intel-ish-hid/ipc/ipc.c +++ b/drivers/hid/intel-ish-hid/ipc/ipc.c @@ -91,7 +91,10 @@ static bool check_generated_interrupt(struct ishtp_device *dev) IPC_INT_FROM_ISH_TO_HOST_CHV_AB(pisr_val); } else { pisr_val = ish_reg_read(dev, IPC_REG_PISR_BXT); - interrupt_generated = IPC_INT_FROM_ISH_TO_HOST_BXT(pisr_val); + interrupt_generated = !!pisr_val; + /* only busy-clear bit is RW, others are RO */ + if (pisr_val) + ish_reg_write(dev, IPC_REG_PISR_BXT, pisr_val); } return interrupt_generated; @@ -843,11 +846,11 @@ int ish_hw_start(struct ishtp_device *dev) { ish_set_host_rdy(dev); + set_host_ready(dev); + /* After that we can enable ISH DMA operation and wakeup ISHFW */ ish_wakeup(dev); - set_host_ready(dev); - /* wait for FW-initiated reset flow */ if (!dev->recvd_hw_ready) wait_event_interruptible_timeout(dev->wait_hw_ready, -- 2.19.1