From nobody Thu Oct 2 09:17:05 2025 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.10]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0125D2FE575 for ; Thu, 18 Sep 2025 13:17:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.10 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758201434; cv=none; b=IObgIj2XTgPg5gs99ALcOQtkneZS8DUYBlUvRgupTlhqRfRQvsEi6VR6ERZnpcVdBF98YTNB2DYNFvz/xXMwmgAVA9t6BjxkqBotRmMp/lpRnqJ01l4J/HfaGXRjmzB7RcayeR+LQdP6rE0fgJMntWbFM7IgQlYpSi+xU/k6sS4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758201434; c=relaxed/simple; bh=dhe0LcEudXUM/0ByQP9TwCeEHazgLIGsobggf5v6AJo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=YXfP5ENdeOJQCJY3Ru3tkl0phbCAgOCjdTktwe+OqGBFbH6hXSts84naEa6uQcCE/vywNCDktITCTqkT0bDV9sisQcqNyNkyPeJ9WVULNgDpwWNK5dmFrIF5NzizJ96Q3lfB6SxoOjPrukgsZQ8FEHGeubJWF1SHJICYtazSbeI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=OW4Verms; arc=none smtp.client-ip=198.175.65.10 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="OW4Verms" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1758201433; x=1789737433; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=dhe0LcEudXUM/0ByQP9TwCeEHazgLIGsobggf5v6AJo=; b=OW4VermsUyvGE5qMS2oPwF0sUJAFgB4wABgNWBRZnikLGDYyoCAt81cx OzrlFiyMnfQ2wAe4qIVqNx0mpG9J6luC+qyOn6NyMOQ05DqRuOKWkc50i wwiz8rxd5z30tB0p2Op0IVo2QHW5YTfJqxjK7i+8wvQ87Pocq8/muhyAq naTdY2sTRowEb9BfPa35gNdpObfbShkr01UXtEyTyNa39HLkbVKyhz2H9 OBvuyjbesbvs96ueVLV6IrGmvTNl6VLf+Ivt/HBCioCmESTVdRVYu+cxP HPh0oja/afj6bqU4PbxMrB1ibegUixtandMKYyLnY16Xt9f7HOLh8Psk3 g==; X-CSE-ConnectionGUID: VH0atjajR3m0JE4TlvDbgg== X-CSE-MsgGUID: R29piNf8Q4ykDMF8BhPZHQ== X-IronPort-AV: E=McAfee;i="6800,10657,11556"; a="77970700" X-IronPort-AV: E=Sophos;i="6.18,275,1751266800"; d="scan'208";a="77970700" Received: from orviesa006.jf.intel.com ([10.64.159.146]) by orvoesa102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Sep 2025 06:17:12 -0700 X-CSE-ConnectionGUID: v+8EzqSpRsmTlC5pwmlFsA== X-CSE-MsgGUID: w2crqmmJT8a7VVHJ8j2TXA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.18,275,1751266800"; d="scan'208";a="174648785" Received: from sannilnx-dsk.jer.intel.com ([10.12.231.107]) by orviesa006-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Sep 2025 06:17:10 -0700 From: Alexander Usyskin To: Greg Kroah-Hartman Cc: Reuven Abliyev , Alexander Usyskin , linux-kernel@vger.kernel.org Subject: [char-misc-next 1/5] mei: me: trigger link reset if hw ready is unexpected Date: Thu, 18 Sep 2025 16:04:31 +0300 Message-ID: <20250918130435.3327400-2-alexander.usyskin@intel.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250918130435.3327400-1-alexander.usyskin@intel.com> References: <20250918130435.3327400-1-alexander.usyskin@intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Driver can receive HW not ready interrupt unexpectedly. E.g. for cards that go donwn to D3cold. Trigger link reset in this case to synchronize driver and firmware state. No need to do that sync if driver is going down or interrupt is received before driver started initial link reset sequence. Introduce UNINITIALIZED device state to allow interrupt handler to ignore interrupts before first init. Signed-off-by: Alexander Usyskin --- drivers/misc/mei/hw-me.c | 17 ++++++++++++++--- drivers/misc/mei/init.c | 2 +- drivers/misc/mei/mei_dev.h | 3 ++- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/drivers/misc/mei/hw-me.c b/drivers/misc/mei/hw-me.c index 346633ebc6e6..3172dc095b53 100644 --- a/drivers/misc/mei/hw-me.c +++ b/drivers/misc/mei/hw-me.c @@ -1373,9 +1373,20 @@ irqreturn_t mei_me_irq_thread_handler(int irq, void = *dev_id) /* check if we need to start the dev */ if (!mei_host_is_ready(dev)) { if (mei_hw_is_ready(dev)) { - dev_dbg(&dev->dev, "we need to start the dev.\n"); - dev->recvd_hw_ready =3D true; - wake_up(&dev->wait_hw_ready); + /* synchronized by dev mutex */ + if (waitqueue_active(&dev->wait_hw_ready)) { + dev_dbg(&dev->dev, "we need to start the dev.\n"); + dev->recvd_hw_ready =3D true; + wake_up(&dev->wait_hw_ready); + } else if (dev->dev_state !=3D MEI_DEV_UNINITIALIZED && + dev->dev_state !=3D MEI_DEV_POWERING_DOWN && + dev->dev_state !=3D MEI_DEV_POWER_DOWN) { + dev_dbg(&dev->dev, "Force link reset.\n"); + schedule_work(&dev->reset_work); + } else { + dev_dbg(&dev->dev, "Ignore this interrupt in state =3D %d\n", + dev->dev_state); + } } else { dev_dbg(&dev->dev, "Spurious Interrupt\n"); } diff --git a/drivers/misc/mei/init.c b/drivers/misc/mei/init.c index 4d1d5423b612..b9fb54328a7b 100644 --- a/drivers/misc/mei/init.c +++ b/drivers/misc/mei/init.c @@ -399,7 +399,7 @@ void mei_device_init(struct mei_device *dev, init_waitqueue_head(&dev->wait_hw_ready); init_waitqueue_head(&dev->wait_pg); init_waitqueue_head(&dev->wait_hbm_start); - dev->dev_state =3D MEI_DEV_INITIALIZING; + dev->dev_state =3D MEI_DEV_UNINITIALIZED; dev->reset_count =3D 0; =20 INIT_LIST_HEAD(&dev->write_list); diff --git a/drivers/misc/mei/mei_dev.h b/drivers/misc/mei/mei_dev.h index 4ab2b9100fd4..9f2044ae6cc4 100644 --- a/drivers/misc/mei/mei_dev.h +++ b/drivers/misc/mei/mei_dev.h @@ -57,7 +57,8 @@ enum file_state { =20 /* MEI device states */ enum mei_dev_state { - MEI_DEV_INITIALIZING =3D 0, + MEI_DEV_UNINITIALIZED =3D 0, + MEI_DEV_INITIALIZING, MEI_DEV_INIT_CLIENTS, MEI_DEV_ENABLED, MEI_DEV_RESETTING, --=20 2.43.0 From nobody Thu Oct 2 09:17:05 2025 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.10]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D3E9E1A9FB8 for ; Thu, 18 Sep 2025 13:17:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.10 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758201435; cv=none; b=Z0I1ngEKiSrhh1YI5qKxPgVA0eYTZ/TmPUJvdWG0ThX/dN18xoQ1LmIjaTnGleho+f1iSN8p3AfMFGQ7gdEDH95XnxQEVrNMutAv20t93niMiBkdJziC1d/LofygPOMDZeTHpkXMWHhtGAcqOuYgI+lgsj7X5Oymans3g5ERT3E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758201435; c=relaxed/simple; bh=wmpH1IZheL6VhPF2kJkl7JWLrU5CCHpllonvyugZuLM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=TNgz4KfkzCvfxhpT1MNNTL4GwKYRGd9BfGsRwwhemlbHqT61rwg8rMelKactpSIMUVxzuWKuI0AZXaBVT3rYXCpJSPgLVZxl6hA54S5AKmxZS+5WvT/lcKRExHrWuHh6OidE7l6KOtmZ8a02tjLVJJX3Cz/PTX39gDU8xQP64/U= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=hdyXsoJs; arc=none smtp.client-ip=198.175.65.10 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="hdyXsoJs" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1758201434; x=1789737434; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=wmpH1IZheL6VhPF2kJkl7JWLrU5CCHpllonvyugZuLM=; b=hdyXsoJs7GrNyGeiz5N3zX2uS3U+7mdt7fx4Od+8/jbS/dqTUAa/LUI5 MW5/35oO+qsKfnCxTewjra3PWmJSgm8ImKRyDpGuK9zbtUIO8j7a8uuM3 odmN3kjKKFyHN4l0nov5WOaFuHBp9S7GdCpGQeCkvNXEMalDfW19DzBFK bzhOACgkx6fSss/1LirQ7d2bFTs0QSIOFAq57fAP4m8F1XDgeMxPhV6Qf 7Ud+EacJ1jAOzW/u9ThyBPTw9wmIBDEXPapfKQrg6ZlpFa0ICodpqK6ov ULrIG7EOEEAaIL/KzzaARZ8qp7eXNVMeMvR4IzFIJh9g3Zen2vSidmtwq g==; X-CSE-ConnectionGUID: V/UNihOvTn6TKgvu6H2DtA== X-CSE-MsgGUID: 2AWhan4hS0yE8aISLIUnNA== X-IronPort-AV: E=McAfee;i="6800,10657,11556"; a="77970705" X-IronPort-AV: E=Sophos;i="6.18,275,1751266800"; d="scan'208";a="77970705" Received: from orviesa006.jf.intel.com ([10.64.159.146]) by orvoesa102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Sep 2025 06:17:13 -0700 X-CSE-ConnectionGUID: Oa8Q/8KNT329sbeah5lbYw== X-CSE-MsgGUID: UcoAoAgjSFquIsX/aApd9Q== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.18,275,1751266800"; d="scan'208";a="174648798" Received: from sannilnx-dsk.jer.intel.com ([10.12.231.107]) by orviesa006-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Sep 2025 06:17:12 -0700 From: Alexander Usyskin To: Greg Kroah-Hartman Cc: Reuven Abliyev , Alexander Usyskin , linux-kernel@vger.kernel.org Subject: [char-misc-next 2/5] mei: make a local copy of client uuid in connect Date: Thu, 18 Sep 2025 16:04:32 +0300 Message-ID: <20250918130435.3327400-3-alexander.usyskin@intel.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250918130435.3327400-1-alexander.usyskin@intel.com> References: <20250918130435.3327400-1-alexander.usyskin@intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Connect ioctl has the same memory for in and out parameters. Copy in parameter (client uuid) to the local stack to avoid it be overwritten by out parameters fill. Signed-off-by: Alexander Usyskin --- drivers/misc/mei/main.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/drivers/misc/mei/main.c b/drivers/misc/mei/main.c index f37f9b8b1f51..2d41a05b8694 100644 --- a/drivers/misc/mei/main.c +++ b/drivers/misc/mei/main.c @@ -646,7 +646,7 @@ static long mei_ioctl(struct file *file, unsigned int c= md, unsigned long data) struct mei_cl *cl =3D file->private_data; struct mei_connect_client_data conn; struct mei_connect_client_data_vtag conn_vtag; - const uuid_le *cl_uuid; + uuid_le cl_uuid; struct mei_client *props; u8 vtag; u32 notify_get, notify_req; @@ -674,18 +674,18 @@ static long mei_ioctl(struct file *file, unsigned int= cmd, unsigned long data) rets =3D -EFAULT; goto out; } - cl_uuid =3D &conn.in_client_uuid; + cl_uuid =3D conn.in_client_uuid; props =3D &conn.out_client_properties; vtag =3D 0; =20 - rets =3D mei_vt_support_check(dev, cl_uuid); + rets =3D mei_vt_support_check(dev, &cl_uuid); if (rets =3D=3D -ENOTTY) goto out; if (!rets) - rets =3D mei_ioctl_connect_vtag(file, cl_uuid, props, + rets =3D mei_ioctl_connect_vtag(file, &cl_uuid, props, vtag); else - rets =3D mei_ioctl_connect_client(file, cl_uuid, props); + rets =3D mei_ioctl_connect_client(file, &cl_uuid, props); if (rets) goto out; =20 @@ -707,14 +707,14 @@ static long mei_ioctl(struct file *file, unsigned int= cmd, unsigned long data) goto out; } =20 - cl_uuid =3D &conn_vtag.connect.in_client_uuid; + cl_uuid =3D conn_vtag.connect.in_client_uuid; props =3D &conn_vtag.out_client_properties; vtag =3D conn_vtag.connect.vtag; =20 - rets =3D mei_vt_support_check(dev, cl_uuid); + rets =3D mei_vt_support_check(dev, &cl_uuid); if (rets =3D=3D -EOPNOTSUPP) cl_dbg(dev, cl, "FW Client %pUl does not support vtags\n", - cl_uuid); + &cl_uuid); if (rets) goto out; =20 @@ -724,7 +724,7 @@ static long mei_ioctl(struct file *file, unsigned int c= md, unsigned long data) goto out; } =20 - rets =3D mei_ioctl_connect_vtag(file, cl_uuid, props, vtag); + rets =3D mei_ioctl_connect_vtag(file, &cl_uuid, props, vtag); if (rets) goto out; =20 --=20 2.43.0 From nobody Thu Oct 2 09:17:05 2025 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.10]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0B88530B51D for ; Thu, 18 Sep 2025 13:17:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.10 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758201437; cv=none; b=Xbox13Yjy4aQTs9PiHHTb5mZeqFMC0cvkOswf+s29eshb+MRh7+LeqJVLIVDwbd67jBWPKPYZKPoWjmTnRdlhPQzfWX3vJMNB9ylfmqU0Xsg/yBFIdzxyCIm3QnfkOTSFmfExJ1dd+OYRrM75FFn69hSwD1kc+FYsxtsMQLwG+s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758201437; c=relaxed/simple; bh=e7pSmlvKKaCM1hV2B4SRXTfZFTkeEmDL37d00ocErAI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=lKKrwpeEvOd3+kjHEzTsrbEzoJneKPRSy6gni43W2XbaBYsCPcVyKKR8U3JKvb55r4yzD14W+6ue3H5eJ7+t0joDh0kljmL8X/l9M+t4p/6lUM6vJUprXx3nO6dwA+61HhxAdP/UJ5Tph96BhIedClc5Bv6/BWZ4l0NYdaVRoNk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=QbPOKRES; arc=none smtp.client-ip=198.175.65.10 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="QbPOKRES" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1758201436; x=1789737436; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=e7pSmlvKKaCM1hV2B4SRXTfZFTkeEmDL37d00ocErAI=; b=QbPOKRESSzYgTKlZ0GWCHpZoD5RvaOXVsiY7AY1F31q4QDnRqFrwLO2Q czyQCddOwP/dNnZzyvuY5/csLyGzSoWknXYleaGTST31zQ3G7g6bspNVJ JUR/8xhfUnhF7x2NsjlXjxvqjX3sIQy3GU586lAEWyIXGxXGR0YX1x8Bu ximgOxaIO6H8iAJOJ9ewheJnMds2DDbvtrxotxcjaGHVZqj04qwJ8Np1H LIIvXJ04WnE10uoSnnuIfpRl360dcXq70KeDXLXKTBjrQ3hZjAhvKJP33 iiylq1WZxx25wM8pEpJlgguxv+oTGjg+/lXbJ2VPv40zyKUVKJgQL/j1z w==; X-CSE-ConnectionGUID: wNEvOjcuSpWo00ea1Gn9cA== X-CSE-MsgGUID: zb3/uA0zQ2KOhtDZQKExNw== X-IronPort-AV: E=McAfee;i="6800,10657,11556"; a="77970712" X-IronPort-AV: E=Sophos;i="6.18,275,1751266800"; d="scan'208";a="77970712" Received: from orviesa006.jf.intel.com ([10.64.159.146]) by orvoesa102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Sep 2025 06:17:15 -0700 X-CSE-ConnectionGUID: rxRX1tnIQIm0K6/2RUPkRQ== X-CSE-MsgGUID: xxfcX6g6Sjih4uD04iz0nA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.18,275,1751266800"; d="scan'208";a="174648810" Received: from sannilnx-dsk.jer.intel.com ([10.12.231.107]) by orviesa006-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Sep 2025 06:17:14 -0700 From: Alexander Usyskin To: Greg Kroah-Hartman Cc: Reuven Abliyev , Alexander Usyskin , linux-kernel@vger.kernel.org Subject: [char-misc-next 3/5] mei: retry connect if interrupted by link reset Date: Thu, 18 Sep 2025 16:04:33 +0300 Message-ID: <20250918130435.3327400-4-alexander.usyskin@intel.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250918130435.3327400-1-alexander.usyskin@intel.com> References: <20250918130435.3327400-1-alexander.usyskin@intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" When device is in D3cold the connect message will wake device and cause link reset. Link reset flow cleans all queues and wakes all waiters. Retry the connect flow if connect is failed and link reset is detected. Signed-off-by: Alexander Usyskin --- drivers/misc/mei/hw.h | 2 ++ drivers/misc/mei/init.c | 2 ++ drivers/misc/mei/main.c | 25 +++++++++++++++++++++++++ drivers/misc/mei/mei_dev.h | 3 +++ 4 files changed, 32 insertions(+) diff --git a/drivers/misc/mei/hw.h b/drivers/misc/mei/hw.h index 2e9cf6f4efb6..3771aa09c592 100644 --- a/drivers/misc/mei/hw.h +++ b/drivers/misc/mei/hw.h @@ -27,6 +27,8 @@ #define MKHI_RCV_TIMEOUT 500 /* receive timeout in msec */ #define MKHI_RCV_TIMEOUT_SLOW 10000 /* receive timeout in msec, slow FW */ =20 +#define MEI_LINK_RESET_WAIT_TIMEOUT_MSEC 500 /* Max wait timeout for link= reset, in msec */ + /* * FW page size for DMA allocations */ diff --git a/drivers/misc/mei/init.c b/drivers/misc/mei/init.c index b9fb54328a7b..32ce6a879207 100644 --- a/drivers/misc/mei/init.c +++ b/drivers/misc/mei/init.c @@ -400,6 +400,7 @@ void mei_device_init(struct mei_device *dev, init_waitqueue_head(&dev->wait_pg); init_waitqueue_head(&dev->wait_hbm_start); dev->dev_state =3D MEI_DEV_UNINITIALIZED; + init_waitqueue_head(&dev->wait_dev_state); dev->reset_count =3D 0; =20 INIT_LIST_HEAD(&dev->write_list); @@ -442,5 +443,6 @@ void mei_device_init(struct mei_device *dev, dev->timeouts.hbm =3D mei_secs_to_jiffies(MEI_HBM_TIMEOUT); dev->timeouts.mkhi_recv =3D msecs_to_jiffies(MKHI_RCV_TIMEOUT); } + dev->timeouts.link_reset_wait =3D msecs_to_jiffies(MEI_LINK_RESET_WAIT_TI= MEOUT_MSEC); } EXPORT_SYMBOL_GPL(mei_device_init); diff --git a/drivers/misc/mei/main.c b/drivers/misc/mei/main.c index 2d41a05b8694..e69140fc5aa4 100644 --- a/drivers/misc/mei/main.c +++ b/drivers/misc/mei/main.c @@ -423,6 +423,7 @@ static int mei_ioctl_connect_client(struct file *file, cl->state !=3D MEI_FILE_DISCONNECTED) return -EBUSY; =20 +retry: /* find ME client we're trying to connect to */ me_cl =3D mei_me_cl_by_uuid(dev, in_client_uuid); if (!me_cl) { @@ -454,6 +455,28 @@ static int mei_ioctl_connect_client(struct file *file, =20 rets =3D mei_cl_connect(cl, me_cl, file); =20 + if (rets && cl->status =3D=3D -EFAULT && + (dev->dev_state =3D=3D MEI_DEV_RESETTING || + dev->dev_state =3D=3D MEI_DEV_INIT_CLIENTS)) { + /* in link reset, wait for it completion */ + mutex_unlock(&dev->device_lock); + rets =3D wait_event_interruptible_timeout(dev->wait_dev_state, + dev->dev_state =3D=3D MEI_DEV_ENABLED, + dev->timeouts.link_reset_wait); + mutex_lock(&dev->device_lock); + if (rets < 0) { + if (signal_pending(current)) + rets =3D -EINTR; + goto end; + } + if (dev->dev_state !=3D MEI_DEV_ENABLED) { + rets =3D -ETIME; + goto end; + } + mei_me_cl_put(me_cl); + goto retry; + } + end: mei_me_cl_put(me_cl); return rets; @@ -1120,6 +1143,8 @@ void mei_set_devstate(struct mei_device *dev, enum me= i_dev_state state) =20 dev->dev_state =3D state; =20 + wake_up_interruptible_all(&dev->wait_dev_state); + if (!dev->cdev) return; =20 diff --git a/drivers/misc/mei/mei_dev.h b/drivers/misc/mei/mei_dev.h index 9f2044ae6cc4..23afa381a0a0 100644 --- a/drivers/misc/mei/mei_dev.h +++ b/drivers/misc/mei/mei_dev.h @@ -466,6 +466,7 @@ struct mei_dev_timeouts { unsigned int d0i3; /* D0i3 set/unset max response time, in jiffies */ unsigned long hbm; /* HBM operation timeout, in jiffies */ unsigned long mkhi_recv; /* receive timeout, in jiffies */ + unsigned long link_reset_wait; /* link reset wait timeout, in jiffies */ }; =20 /** @@ -496,6 +497,7 @@ struct mei_dev_timeouts { * * @reset_count : number of consecutive resets * @dev_state : device state + * @wait_dev_state: wait queue for device state change * @hbm_state : state of host bus message protocol * @pxp_mode : PXP device mode * @init_clients_timer : HBM init handshake timeout @@ -588,6 +590,7 @@ struct mei_device { */ unsigned long reset_count; enum mei_dev_state dev_state; + wait_queue_head_t wait_dev_state; enum mei_hbm_state hbm_state; enum mei_dev_pxp_mode pxp_mode; u16 init_clients_timer; --=20 2.43.0 From nobody Thu Oct 2 09:17:05 2025 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.10]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E010530BF72 for ; Thu, 18 Sep 2025 13:17:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.10 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758201439; cv=none; b=SEoj/exMpokLiMC1LEx/z/9mwU2OZe/zCMIys+yD/l2Ncc/+TsW1hl8c4pMX23L/gImba3T3+eh84fAkpdEUyQguTcLYGjzxRt07VCJzWiEc41u8auxT9oZX5/rTCvQZ3erSeZSz9rWZ0YEfSeUiKyxYCAAKAPOSn0N33izjF3M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758201439; c=relaxed/simple; bh=cCKdZ3ZZ1wN9QStz9vQvSl2cJMIHWSxg2MtRAGlyOvw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=LRj4q6e/ty0w7/1W4z8t6ihSRWzOwl9Jk1+E33mC5gBtLhKGn3ZDgPj7egHy+xeEkv4S3JIyB4CQKDmUKNRezOsw3ob4aaxyJ6RWBTiNtnwgRJs8N47gslWiSyJtIiQkfekSoGzB0Iw+OoUdkd6JO4cQ0qeHeyaSz8fx9BU+WZE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=c9CI3B3W; arc=none smtp.client-ip=198.175.65.10 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="c9CI3B3W" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1758201438; x=1789737438; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=cCKdZ3ZZ1wN9QStz9vQvSl2cJMIHWSxg2MtRAGlyOvw=; b=c9CI3B3WCEg/HN2XwpIQi16hCcSdhL9DdmpVI8ZyFkviXI2UJeYdHJol AyHoD7oqF4Q3kxc5vR8cFX/0HTx6mnmZ/nSLsty5DfbcZ99Z9L3lYOmnC sEBiO7uYsuzpe0lDe8vqNwR9apJpfsLRn3pQJO+NsQZpOPO0sG5s5qEi1 bTvrMCPWe1IZA5ADayFcRb4UVSbkSdMFV63eW0UHgLOxmzslOjm1t+EK2 8dpmgRBHz5vPXqrF9quNyB1wfO5TL/wf06erDqsWKuWz8KaaOCFdamTTw Xt4eKDsMI0InSLPQDfIF505uxr9kKUJUp9nRRO1C7m/iYna+0hBby9jaL A==; X-CSE-ConnectionGUID: ELtz1gDfRkWynApQJhs4jQ== X-CSE-MsgGUID: STP0o3ogQ26snJrlce6/2g== X-IronPort-AV: E=McAfee;i="6800,10657,11556"; a="77970716" X-IronPort-AV: E=Sophos;i="6.18,275,1751266800"; d="scan'208";a="77970716" Received: from orviesa006.jf.intel.com ([10.64.159.146]) by orvoesa102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Sep 2025 06:17:17 -0700 X-CSE-ConnectionGUID: 6gF2HXcETfiH8kx7vOr6Bg== X-CSE-MsgGUID: jyapRIJyTkmnbVwd0tfogg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.18,275,1751266800"; d="scan'208";a="174648826" Received: from sannilnx-dsk.jer.intel.com ([10.12.231.107]) by orviesa006-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Sep 2025 06:17:16 -0700 From: Alexander Usyskin To: Greg Kroah-Hartman Cc: Reuven Abliyev , Alexander Usyskin , linux-kernel@vger.kernel.org Subject: [char-misc-next 4/5] mei: bus: demote error on connect Date: Thu, 18 Sep 2025 16:04:34 +0300 Message-ID: <20250918130435.3327400-5-alexander.usyskin@intel.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250918130435.3327400-1-alexander.usyskin@intel.com> References: <20250918130435.3327400-1-alexander.usyskin@intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" There are flows, like exit from D3cold where connect via bus can fail. Demote error print to debug level to unclutter dmesg. Signed-off-by: Alexander Usyskin --- drivers/misc/mei/bus.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/misc/mei/bus.c b/drivers/misc/mei/bus.c index 6c8ec5c0d359..38735a41f750 100644 --- a/drivers/misc/mei/bus.c +++ b/drivers/misc/mei/bus.c @@ -814,7 +814,7 @@ int mei_cldev_enable(struct mei_cl_device *cldev) =20 ret =3D mei_cl_connect(cl, cldev->me_cl, NULL); if (ret < 0) { - dev_err(&cldev->dev, "cannot connect\n"); + dev_dbg(&cldev->dev, "cannot connect\n"); mei_cl_bus_vtag_free(cldev); } =20 --=20 2.43.0 From nobody Thu Oct 2 09:17:05 2025 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.10]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6BA9430C0F0 for ; Thu, 18 Sep 2025 13:17:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.10 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758201441; cv=none; b=gpGLr7eduFmRUlSZMwmmlYkKyfMg1xy8njadYCRMAQDOz5OVzw2NtenihtSwn4bkv0XDAOTGUKqyqNbJcVSvooVTvGQGrWh4k5NE37FiGVAw+lz6AYBE4j+z5a8xQ3xEAhoWOSp2iv490pioIA0gUlmRx4nUBecQneuiZAeRZ0I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758201441; c=relaxed/simple; bh=HyQ8KCr8bpy6N16GzTZOo7lPRr6VBHlCVz/5w3LKQgg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=qbhwOEF+s2ga1EvjjjoGURNH0ZvCxQ//FDzTjnOOHxHDGjMrot+wAhB6maE7e089qvGd1RuEhEhOFacCf4Z3DJniDGtubrM1pW1TG97eo02x7UzZAQKMABAXa+j6wqVCVFBusZH+SGUI3t9lX7trimD0S6Ua+VRRdLLHBTr4zRc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=XwGuZumW; arc=none smtp.client-ip=198.175.65.10 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="XwGuZumW" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1758201439; x=1789737439; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=HyQ8KCr8bpy6N16GzTZOo7lPRr6VBHlCVz/5w3LKQgg=; b=XwGuZumWpT1vcqxlzHqGiL+PB+ANUCMOJYElwicrJDwtTCV0gWfKwS5i 9icucv8PfQbKHXJJjmYOjHKiYrNY1xNcx5SE9u8/9gSvOdAXKVRL5oOv3 5+maDWnhoADwxrb1C6uZkGTNiw7ETocck9zDl3/tjChxXX06tq/VZpU4o 4LN4x/TI4x0PZthN942J7ZPqSTdDbczKvtTjPRmGw1XRfmUW0zx4g/7Vh XKgtKaLNjXjYvcJfySQelxbL/mQhMJ+CLNJZXUu5if435aLE2zcmFFxhB 8tMBwUdN7XzKE52FxachJTaJmN9rIxYgJ93qVMCuxTmcW/Z7ji1FWMa1O w==; X-CSE-ConnectionGUID: uPPT5GqCTGu6E+8PiFh7uQ== X-CSE-MsgGUID: Cxw/1LglRy2XcMXSsKltng== X-IronPort-AV: E=McAfee;i="6800,10657,11556"; a="77970720" X-IronPort-AV: E=Sophos;i="6.18,275,1751266800"; d="scan'208";a="77970720" Received: from orviesa006.jf.intel.com ([10.64.159.146]) by orvoesa102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Sep 2025 06:17:19 -0700 X-CSE-ConnectionGUID: HsZYEMfLR3miYme8ygZ24g== X-CSE-MsgGUID: CKEJ96A1R1ahrZEgbmNQbg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.18,275,1751266800"; d="scan'208";a="174648837" Received: from sannilnx-dsk.jer.intel.com ([10.12.231.107]) by orviesa006-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Sep 2025 06:17:18 -0700 From: Alexander Usyskin To: Greg Kroah-Hartman Cc: Reuven Abliyev , Alexander Usyskin , linux-kernel@vger.kernel.org Subject: [char-misc-next 5/5] mei: gsc: demote unexpected reset print Date: Thu, 18 Sep 2025 16:04:35 +0300 Message-ID: <20250918130435.3327400-6-alexander.usyskin@intel.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250918130435.3327400-1-alexander.usyskin@intel.com> References: <20250918130435.3327400-1-alexander.usyskin@intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Discrete graphic card can go to D3cold. On the exit from D3cold the link reset is performed. Driver did not expect such link reset and print warning. Print debug message for unexpected reset in discrete graphic case and remove infrastructure to print warning is some cases. Signed-off-by: Alexander Usyskin --- drivers/misc/mei/hw-me.c | 42 +++----------------------------------- drivers/misc/mei/init.c | 17 --------------- drivers/misc/mei/mei_dev.h | 6 ------ 3 files changed, 3 insertions(+), 62 deletions(-) diff --git a/drivers/misc/mei/hw-me.c b/drivers/misc/mei/hw-me.c index 3172dc095b53..d4612c659784 100644 --- a/drivers/misc/mei/hw-me.c +++ b/drivers/misc/mei/hw-me.c @@ -493,43 +493,6 @@ static int mei_me_hw_ready_wait(struct mei_device *dev) return 0; } =20 -/** - * mei_me_check_fw_reset - check for the firmware reset error and exceptio= n conditions - * - * @dev: mei device - */ -static void mei_me_check_fw_reset(struct mei_device *dev) -{ - struct mei_fw_status fw_status; - char fw_sts_str[MEI_FW_STATUS_STR_SZ] =3D {0}; - int ret; - u32 fw_pm_event =3D 0; - - if (!dev->saved_fw_status_flag) - goto end; - - if (dev->gsc_reset_to_pxp =3D=3D MEI_DEV_RESET_TO_PXP_PERFORMED) { - ret =3D mei_fw_status(dev, &fw_status); - if (!ret) { - fw_pm_event =3D fw_status.status[1] & PCI_CFG_HFS_2_PM_EVENT_MASK; - if (fw_pm_event !=3D PCI_CFG_HFS_2_PM_CMOFF_TO_CMX_ERROR && - fw_pm_event !=3D PCI_CFG_HFS_2_PM_CM_RESET_ERROR) - goto end; - } else { - dev_err(&dev->dev, "failed to read firmware status: %d\n", ret); - } - } - - mei_fw_status2str(&dev->saved_fw_status, fw_sts_str, sizeof(fw_sts_str)); - dev_warn(&dev->dev, "unexpected reset: fw_pm_event =3D 0x%x, dev_state = =3D %u fw status =3D %s\n", - fw_pm_event, dev->saved_dev_state, fw_sts_str); - -end: - if (dev->gsc_reset_to_pxp =3D=3D MEI_DEV_RESET_TO_PXP_PERFORMED) - dev->gsc_reset_to_pxp =3D MEI_DEV_RESET_TO_PXP_DONE; - dev->saved_fw_status_flag =3D false; -} - /** * mei_me_hw_start - hw start routine * @@ -540,8 +503,9 @@ static int mei_me_hw_start(struct mei_device *dev) { int ret =3D mei_me_hw_ready_wait(dev); =20 - if (kind_is_gsc(dev) || kind_is_gscfi(dev)) - mei_me_check_fw_reset(dev); + if ((kind_is_gsc(dev) || kind_is_gscfi(dev)) && + dev->gsc_reset_to_pxp =3D=3D MEI_DEV_RESET_TO_PXP_PERFORMED) + dev->gsc_reset_to_pxp =3D MEI_DEV_RESET_TO_PXP_DONE; if (ret) return ret; dev_dbg(&dev->dev, "hw is ready\n"); diff --git a/drivers/misc/mei/init.c b/drivers/misc/mei/init.c index 32ce6a879207..b789c4d9c709 100644 --- a/drivers/misc/mei/init.c +++ b/drivers/misc/mei/init.c @@ -89,22 +89,6 @@ void mei_cancel_work(struct mei_device *dev) } EXPORT_SYMBOL_GPL(mei_cancel_work); =20 -static void mei_save_fw_status(struct mei_device *dev) -{ - struct mei_fw_status fw_status; - int ret; - - ret =3D mei_fw_status(dev, &fw_status); - if (ret) { - dev_err(&dev->dev, "failed to read firmware status: %d\n", ret); - return; - } - - dev->saved_dev_state =3D dev->dev_state; - dev->saved_fw_status_flag =3D true; - memcpy(&dev->saved_fw_status, &fw_status, sizeof(fw_status)); -} - /** * mei_reset - resets host and fw. * @@ -128,7 +112,6 @@ int mei_reset(struct mei_device *dev) if (kind_is_gsc(dev) || kind_is_gscfi(dev)) { dev_dbg(&dev->dev, "unexpected reset: dev_state =3D %s fw status =3D %s= \n", mei_dev_state_str(state), fw_sts_str); - mei_save_fw_status(dev); } else { dev_warn(&dev->dev, "unexpected reset: dev_state =3D %s fw status =3D %= s\n", mei_dev_state_str(state), fw_sts_str); diff --git a/drivers/misc/mei/mei_dev.h b/drivers/misc/mei/mei_dev.h index 23afa381a0a0..0bf8d552c3ea 100644 --- a/drivers/misc/mei/mei_dev.h +++ b/drivers/misc/mei/mei_dev.h @@ -551,9 +551,6 @@ struct mei_dev_timeouts { * * @dbgfs_dir : debugfs mei root directory * - * @saved_fw_status : saved firmware status - * @saved_dev_state : saved device state - * @saved_fw_status_flag : flag indicating that firmware status was saved * @gsc_reset_to_pxp : state of reset to the PXP mode * * @ops: : hw specific operations @@ -654,9 +651,6 @@ struct mei_device { struct dentry *dbgfs_dir; #endif /* CONFIG_DEBUG_FS */ =20 - struct mei_fw_status saved_fw_status; - enum mei_dev_state saved_dev_state; - bool saved_fw_status_flag; enum mei_dev_reset_to_pxp gsc_reset_to_pxp; =20 const struct mei_hw_ops *ops; --=20 2.43.0