From nobody Tue Oct 7 09:58:51 2025 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.17]) (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 6AA61275B05 for ; Thu, 10 Jul 2025 15:09:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=198.175.65.17 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752160155; cv=fail; b=hYr/TFWuYXZm1kjlhsCE2vk5GE8I2U4fkVLRcPSggDPlqbciPCn73kLca/d253+QD0cfuySE9rKJ/B9zDEwtGXojt3CHtuLsGJlciTyzvlNsyZWd96CzHMPgjpAOzhi9lUjbAggg6yWrE4UzyN4wQ8d7+sP+MTV5cZiRmeQKZJk= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752160155; c=relaxed/simple; bh=EZ/0H/JOAnvs8/ojf5PXmYW15/TfTFdvctqFfzsfn8w=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=fEsfSb/p7xle3uByrAOM3I/IInvVmW8KoIFMht9e/VPrOD7ZHyJBU8yuNeano9IeOp3rILWBs5ioqun3kK7RlLBigurKaGk9hEWTNMp4HysFg+FXnX2sTl46gGDxaCwhWrqzC3VsZqAT39ZV88lfr1XFmOZ1TS59NixrMU1/bpw= ARC-Authentication-Results: i=2; 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=IEXK12R1; arc=fail smtp.client-ip=198.175.65.17 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="IEXK12R1" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1752160153; x=1783696153; h=from:to:cc:subject:date:message-id:in-reply-to: references:content-transfer-encoding:mime-version; bh=EZ/0H/JOAnvs8/ojf5PXmYW15/TfTFdvctqFfzsfn8w=; b=IEXK12R1a3e9Q0tyetcPbOJkkPhamsO98GGGvBe3OgiFqDJ8Qfke87zT DTFIvip3L3o9bZ/zlQUpoX7DKte4oNeHiSmFhthRRBeeieGauTLi3i9hE 471PDWd1KkgFTLpzYRnsyOBztLTPdJL7iXw6Uixggp9yx4Tq9B6iG2q1a 2uhScAhoNsQb4Lt0tcUe6LKgyqbf0OYxGSLVfK7uwv24fcE/UCtFmWDGp CMjaqbM1eTZhHKc4zBTXEdYEM5k1jQNffNkaGa1eiSfp3QYelmMWreFNq O4oz/FK/kGX++cnScDfm2/NOQNlbWp/VmTeWNEfV9kRN3NjrTkgkEb1NO A==; X-CSE-ConnectionGUID: QgLX9Cy0RZCDI8BTTVYBag== X-CSE-MsgGUID: A55UG6QbQfiLLbAQPzWs6A== X-IronPort-AV: E=McAfee;i="6800,10657,11490"; a="54416414" X-IronPort-AV: E=Sophos;i="6.16,300,1744095600"; d="scan'208";a="54416414" Received: from fmviesa003.fm.intel.com ([10.60.135.143]) by orvoesa109.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Jul 2025 08:09:13 -0700 X-CSE-ConnectionGUID: rzwCjY/9T6KJSDxkfcV3lA== X-CSE-MsgGUID: NWtwqNA+RHmd4ZqmrBzhpw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.16,300,1744095600"; d="scan'208";a="160137839" Received: from orsmsx901.amr.corp.intel.com ([10.22.229.23]) by fmviesa003.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Jul 2025 08:09:12 -0700 Received: from ORSMSX903.amr.corp.intel.com (10.22.229.25) by ORSMSX901.amr.corp.intel.com (10.22.229.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.25; Thu, 10 Jul 2025 08:09:11 -0700 Received: from ORSEDG901.ED.cps.intel.com (10.7.248.11) by ORSMSX903.amr.corp.intel.com (10.22.229.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.25 via Frontend Transport; Thu, 10 Jul 2025 08:09:11 -0700 Received: from NAM10-DM6-obe.outbound.protection.outlook.com (40.107.93.46) by edgegateway.intel.com (134.134.137.111) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.25; Thu, 10 Jul 2025 08:09:10 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=IyosrQO19Jd6OfQqExvkIxNjH4speYasOkwicHXYVyEx8PadB/xmNZfQeq/7Te25Ejo8obSDictKT6Gbq9Er4Ny8+bR1OuDrfD0Kph2BisVIU7jnHWUmR7cAlfqli5eTb/MMOFzCZaQKnp7keAi4w7M6ug5KluMjJnrKE/rV8U7NLkhMwpeKQoJnyiVAZe5eDhjAIYaTeDA2Dy9pfyo7Y2IyitWU1mIOou+4L8P09LRC5FsXIKtozeQJGgcp1hZli/09REx9x+7EgiU4df48505J44z5vqh2tUxKXUaMRjQZFAjMlvtTIVqi7tZJ40Ba5tl8f3FAlCZvgAcMhyqrSQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=XvbGwcIDkrOr5k9NYO11c4euOeLwNfeiNssYtXgaSo8=; b=roiBJUWi0BhkMvSdGjJF1f7aAfYvCZunpV/CDZ2Fy2u3rljm0abBrEbhHGZ06z1AQ064JrVeatzI2cUyRRhqnC4GnCFTvLY6i694MitToV2/rQvbY0cyr0JzN3QYS1XezoYgRYgUpg/V6sL/9YOYkOXaPuojuqoKjkTOq+UpOA6DQS94iUm6id2xq8vH7eoyUJOPVK+ou8+jQHLUscHUlRTcsmUUQL4QE7Tv+BV0vQWr3GJjA91+7fbJam3Qpr8wY4CnXPtYo050Ol1Q4H1ZP6jneiLqx7DJNv0RongGd4V5MRi+b7p2VdUSkI/NgpZA7nK0MvhY8MvQzB8diOItZg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; Received: from CYYPR11MB8430.namprd11.prod.outlook.com (2603:10b6:930:c6::19) by IA1PR11MB8861.namprd11.prod.outlook.com (2603:10b6:208:59a::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8901.27; Thu, 10 Jul 2025 15:08:40 +0000 Received: from CYYPR11MB8430.namprd11.prod.outlook.com ([fe80::76d2:8036:2c6b:7563]) by CYYPR11MB8430.namprd11.prod.outlook.com ([fe80::76d2:8036:2c6b:7563%5]) with mapi id 15.20.8901.024; Thu, 10 Jul 2025 15:08:40 +0000 From: Rodrigo Vivi To: , , CC: , , , , Badal Nilawar , Umesh Nerlige Ramappa , Rodrigo Vivi Subject: [PATCH 1/9] mei: bus: add mei_cldev_mtu interface Date: Thu, 10 Jul 2025 11:08:32 -0400 Message-ID: <20250710150831.3018674-12-rodrigo.vivi@intel.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250710150831.3018674-11-rodrigo.vivi@intel.com> References: <20250710150831.3018674-11-rodrigo.vivi@intel.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BY3PR05CA0051.namprd05.prod.outlook.com (2603:10b6:a03:39b::26) To CYYPR11MB8430.namprd11.prod.outlook.com (2603:10b6:930:c6::19) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CYYPR11MB8430:EE_|IA1PR11MB8861:EE_ X-MS-Office365-Filtering-Correlation-Id: ac7ce202-961e-4dac-0625-08ddbfc3a765 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?Em7KJ4ah5PYg7dk/HgD5HpsAJX0D7yduz2GDottkf3hr0d4RVWo7f4PF8W/7?= =?us-ascii?Q?R7hDXWKLw2cimFYnGDCX9FASNsxjH33vGyEep22jK/dov1KgEGwX2XNO5aPK?= =?us-ascii?Q?VNGuimsONYnb1zZ7iFDt0VJvnVzGDbL+ZZlzzLawIskuUoCHtmOwgR5TgVFg?= =?us-ascii?Q?CJvilgyXZlPcuSaNigRiOURi9spzp3nx6/ceA9mR1VBC1pAfcPt6dSiViDFM?= =?us-ascii?Q?v4I5neEXDxEMODp7+rrP35pQpLnVyPUIoltl1h8HB3soG//LjWsFm5bifC+Q?= =?us-ascii?Q?+6QgBeSDsd3a6niNzSJXO6NOJ5YxGDLnfB0im7hgIkkz5LDOBPwlToJxHW4y?= =?us-ascii?Q?nH2vaOVkJec9MKt7pyTq5Kdc11g/7kZyiRLPb/v1l3PwC99GwCUuppJ53oL4?= =?us-ascii?Q?bIRWdOkyjmBvFZrsMEE7Vg3Wsumd1RSTs9kulJEhbbiDlWGDByU4WixjypAS?= =?us-ascii?Q?HFjQrqU7nl5JwkOGcVdobCZZA1eCrir0FQFj+Boaf5aVDC40YKw9BqBU2f6q?= =?us-ascii?Q?bPQMDIArABc5QYSa2s2BQ6e9Hu6OZwJiTD5AWGz71tIWPtHV8CkQJPiANWJU?= =?us-ascii?Q?m+IzAjs9/JiGxNxvRVp/vd/F/4v9XZFk/DNgW2aEzWtAegYBpXXKETcXYG8A?= =?us-ascii?Q?9mtaugRbqJTWhc1Pn3Gmdh2O19h85JnvoP22Qbb0fqGP+5ek0HB0DydAR3sr?= =?us-ascii?Q?LlGfKhh+PG7sVGx/9vKLce3eNpXhQuxusKsKOUlQrnb7LIQhafv9fKeRmb36?= =?us-ascii?Q?JkLeyBcpTWOUCAE6AmPH4C7hlf8ShXieBINivGMrccVvYVwvzEDq1fwJiyQw?= =?us-ascii?Q?/mW1gW9io6+L6Pn43mRtX4dY1IpUfCwpHiPAPfCaJTolW1j1AUssFLiE1DwC?= =?us-ascii?Q?8wJoP+f/KjkKf67prf04X3uiWVDcATu75vvq6EwOwJ5iMXPGNnUbaa0EJVQ2?= =?us-ascii?Q?Sf9oDGNtKJ1Ub6MB4nSaX/mCNUnpF2quMQNxI7aNhDTJNg6Cd2QtohzvMaVZ?= =?us-ascii?Q?FUUzlc/QRBuVwZYs1pxtX/e3IEk+yCiDfJgt6XWGrodUtzX9eB9cDjXLuctu?= =?us-ascii?Q?v1bc5OSt3a/F9dtABGteAgnRs9HS5yncXbngDpr2IdlFOc/KoAIiPpqbbCEp?= =?us-ascii?Q?LPy/DyAElpILnjOMkNCqisO+m2Gwx+0cxsMJefngupHfjQ2Hw5Yr9nlGFyuM?= =?us-ascii?Q?hEb7cXcBvv71m0gcW5YBM4l1doQzni66g/92du8O0vwXSOA0IATubs485ckK?= =?us-ascii?Q?/Ec4PwlTi1QMtOYV2RGhIVhQ5OVovWku0/dcZT+9/F2YBvD/6+9jicX18OWG?= =?us-ascii?Q?DvTXfSPoMeHMBRDn34BXsr2opZkkJ6ttxu4Kfxb8+Yr7IJgUuHWg6RaKSxYk?= =?us-ascii?Q?rjKp5wFOq8OhZ+McJtO0yqry5Y+uV29GDt8AhU5rFRMtZ3tJ45Y5HJBMtGnn?= =?us-ascii?Q?lPfMxrQ9A2I=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CYYPR11MB8430.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?MlZP7s6A83+BDR57h5en/Qgl3bioDLM9tO+uv04RHdxvm3HgZa4ARx/Is/u0?= =?us-ascii?Q?NN+vGpU+vFw3m+p2+Liek4RNbAByBShL2zKZFFINIs2y0KW4W1HuoVpUu1aI?= =?us-ascii?Q?SSj+60ybBq0GmRsgd7NJH0PFz6wB6uxFpGroym7ZtzCnvt5nn15X3ZqqjRKo?= =?us-ascii?Q?YN1YB8aLb9dkNHiAhXoMs0ntEwyfR/cYXw4jyrQNCe39CjkQ0bCdoiNEi+Kf?= =?us-ascii?Q?fUerAwoET2jPVzNzuNmpk+zfsEgLBvDUcLFpviGWFAALAQO1oNeuzByVf4qR?= =?us-ascii?Q?gSXDLcH5pbEStSV9j8KrkBSGniS07qmgNTldSwPOLtJsiyAlvnRLoeLcMola?= =?us-ascii?Q?2IjALBBiiu4hlwp9J+q8V7vmzPsCowAzGwdkXTDqm6hrB/ijdO11UXx14hFU?= =?us-ascii?Q?bTlz9cTXzechwx4nUQp6YtU9uPH8HEH6vp9bFe1sZuNwtN/d5Ebv8tEINcAT?= =?us-ascii?Q?JCSiNj9tsgLIAC4p4BRwi1MNew1sKdPQL5FKIBDeSkuOTor9UPBQjBf55glY?= =?us-ascii?Q?x7k4CXK9KdsvJmezebFyjFrc5VCytqKhkC8O9P9Qovo53mpNZtVnOy1sJrEf?= =?us-ascii?Q?1bAbyKUUXDZ7yaOFKLVWyeGStvPmRNh2FAPwluEGwxSN13W+nmDuuvBG3jNL?= =?us-ascii?Q?kgjWLXkzUyg7qa0E98+RNvoR/GXN3RCV2s1AjcZfBiiL12p6Z0tPtK6fUQA3?= =?us-ascii?Q?YYhehFc7q7cS9WL5m5m1Tapk2XAzGDUbVBStUtOY62NFQfAVEMe7O9PxlkCw?= =?us-ascii?Q?9m4sshTGdyEsLg3h3TDsZ0EqXxQPHaNsPHOs5n0sD6d0G3jZWyvIn6WBZRrf?= =?us-ascii?Q?JnFSFPtn69lxXm2CCeA8epV+PY481O179X9FTXRG/u3KVkVo/dkme/szRs9S?= =?us-ascii?Q?OvLuxrklf7sER7f6O/3TzPdC/y72TqWYMpZI1tMsgC11fU6CJJivtcsovO94?= =?us-ascii?Q?qd45TRAGo22GQ91hD7SGdj/NFCV6yvy5uJCCw/uKGjV2be9Dd4yUNMg9olCU?= =?us-ascii?Q?/o5bViNBn9z+OH3KpjULtI49m9TXFpStndVft3jr8q9LQU5e9LWw3Tqis0dU?= =?us-ascii?Q?c7gbz1bKFlrwWdc+lLgkCfvOuSxhRqP5blMLaZlnumSuDqqwu6J5WtL2dyg/?= =?us-ascii?Q?SVgl+u71DUVi9NkwsDmACWBph2s/QdYxNUxIDmfsTraDTYMqfWDa7DkqSmSQ?= =?us-ascii?Q?iu2DkcNhK31MRUuokqo7ezkMWYTCIfxgGoK7ZUk2rshUrFbuINeaeoqnPqc+?= =?us-ascii?Q?GtlDCaLMB4AcwsamfVypZAXSeul9cYoN/MraJ5o1FldVWIidtBVLJnRIyDpP?= =?us-ascii?Q?XJHxR1VGk6YFMhYDbO+k8iusD6jTqZKxjrZ0CWixuKs4EJvomaIzPX3zjrCt?= =?us-ascii?Q?geqMSrwtckqixS40gWMGtikLnQW1GT/thtduf4wgXF8B8aGQLZIlpxIreziJ?= =?us-ascii?Q?gIF0HBaKQ+Uk7fW1wE7KY2Qx/4dsoZbn5OMzw38OLRRfliKy7nGhhdPyAIOD?= =?us-ascii?Q?bbQt4cwR4sdt6+8IBc5nCtXo5cDOs/Xw9pbWfJroiD78OTLgrfAhbllUgdcu?= =?us-ascii?Q?0NA/Fkthrv5TnTZia5O3sBtqfgAb0tb8TUzx0f4fH39kcWV6nY0Uuj05ymps?= =?us-ascii?Q?Qg=3D=3D?= X-MS-Exchange-CrossTenant-Network-Message-Id: ac7ce202-961e-4dac-0625-08ddbfc3a765 X-MS-Exchange-CrossTenant-AuthSource: CYYPR11MB8430.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Jul 2025 15:08:40.6317 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: d3cS0d89m34c4xCzT3tD9CXk0wVFdZQIIapdONjrLKgaeu3J4917OA5aB6enUi84aGX4MxDGXXu+pziar08TjA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA1PR11MB8861 X-OriginatorOrg: intel.com Content-Type: text/plain; charset="utf-8" From: Alexander Usyskin Add a new helper function that allows MEI client drivers to query the maximum transmission unit (MTU) for a connected MEI client. This is useful for clients that need to transmit large payloads, such as firmware blobs, allowing them to determine the maximum message size that can be safely sent before starting transmission and size of the buffer to allocate when receiving data. Signed-off-by: Alexander Usyskin Signed-off-by: Badal Nilawar Reviewed-by: Umesh Nerlige Ramappa Signed-off-by: Rodrigo Vivi --- Change in this revision: Proper commit message. drivers/misc/mei/bus.c | 13 +++++++++++++ include/linux/mei_cl_bus.h | 1 + 2 files changed, 14 insertions(+) diff --git a/drivers/misc/mei/bus.c b/drivers/misc/mei/bus.c index 67176caf5416..f860b1b6eda0 100644 --- a/drivers/misc/mei/bus.c +++ b/drivers/misc/mei/bus.c @@ -614,6 +614,19 @@ u8 mei_cldev_ver(const struct mei_cl_device *cldev) } EXPORT_SYMBOL_GPL(mei_cldev_ver); =20 +/** + * mei_cldev_mtu - max message that client can send and receive + * + * @cldev: mei client device + * + * Return: mtu or 0 if client is not connected + */ +size_t mei_cldev_mtu(const struct mei_cl_device *cldev) +{ + return mei_cl_mtu(cldev->cl); +} +EXPORT_SYMBOL_GPL(mei_cldev_mtu); + /** * mei_cldev_enabled - check whether the device is enabled * diff --git a/include/linux/mei_cl_bus.h b/include/linux/mei_cl_bus.h index 725fd7727422..a82755e1fc40 100644 --- a/include/linux/mei_cl_bus.h +++ b/include/linux/mei_cl_bus.h @@ -113,6 +113,7 @@ int mei_cldev_register_notif_cb(struct mei_cl_device *c= ldev, mei_cldev_cb_t notif_cb); =20 u8 mei_cldev_ver(const struct mei_cl_device *cldev); +size_t mei_cldev_mtu(const struct mei_cl_device *cldev); =20 void *mei_cldev_get_drvdata(const struct mei_cl_device *cldev); void mei_cldev_set_drvdata(struct mei_cl_device *cldev, void *data); --=20 2.49.0 From nobody Tue Oct 7 09:58:51 2025 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.17]) (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 E2DBD27703A for ; Thu, 10 Jul 2025 15:09:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=198.175.65.17 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752160159; cv=fail; b=NqltIAPVs5ti98qjGHUJt3hWXdsMWjAMeApTsK7ldC9P/l4edoLUBCuI6Hz5/Qg71sEfsqHkb8Rr/Nj8u2lUkHOZDpEBEubZenaO1eoOvVzOkQs36I7nmEK7DYp/sSSunBJj48VMk/KMKOYKexG4PKR4mEBhOpn1b25JfzAi4kg= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752160159; c=relaxed/simple; bh=U0/fLydlwgT/Mxh3znbQEBMMBrzp0Fvb6ydjwTo504g=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=H+OPlMBzNWA2p04DaaDxAA6ADfFXhOvFOdUJ3iPozs8AKwxpiHrImGeKPY0g0lADrbbiqbVo/ZYs53QNnIHfRFUeo66er60PWUV56Y+z+1aZ0s1XBqlg5O2bSJVVxuu+pP2JEzBoiLs3ukWOOk3EkdDz9jVJUqzA8d/oqoWNKJo= ARC-Authentication-Results: i=2; 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=n27QpJDk; arc=fail smtp.client-ip=198.175.65.17 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="n27QpJDk" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1752160157; x=1783696157; h=from:to:cc:subject:date:message-id:in-reply-to: references:content-transfer-encoding:mime-version; bh=U0/fLydlwgT/Mxh3znbQEBMMBrzp0Fvb6ydjwTo504g=; b=n27QpJDkgDr5e64qOe8hQ9a8V9a3kCZozOywQm31K+paektOIR8tNuXq hgRi1raivyip947G7YjTjxS7SdJalZrgHRP4790tTr2EhRaY8NJz5tFmy bu/1bB4PSW9y4UTC1WW9a8VPkKRbmx9yf+0DbmHXdSSsNU10JjGqbq6c6 67M4WtEKdq9R+/wN7JW3UW0ZR7VAJOhXNxjPRZnI5QeeRyg6EQ99JTfHR 2RMirlXzo2upWfPsKrFQBb9l+EKzJskT7c6pQLV8ejcPfVRKfSIwdELY4 r+gsv0hxw6FEzqYgErUJyHJ9qHZ2ScFgHTkYbLpoE5adRtaPx0aGbKb0m g==; X-CSE-ConnectionGUID: PCmisjBfRKOx5gpEO+SBjA== X-CSE-MsgGUID: 4OYxyqNdSpGbOe1Le5eEnw== X-IronPort-AV: E=McAfee;i="6800,10657,11490"; a="54416424" X-IronPort-AV: E=Sophos;i="6.16,300,1744095600"; d="scan'208";a="54416424" Received: from fmviesa003.fm.intel.com ([10.60.135.143]) by orvoesa109.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Jul 2025 08:09:17 -0700 X-CSE-ConnectionGUID: SlKuMBcSTZ6BnPZYxJKBGg== X-CSE-MsgGUID: cDVqZyPzSp+m5/pugyw6Ag== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.16,300,1744095600"; d="scan'208";a="160137879" Received: from orsmsx901.amr.corp.intel.com ([10.22.229.23]) by fmviesa003.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Jul 2025 08:09:16 -0700 Received: from ORSMSX903.amr.corp.intel.com (10.22.229.25) by ORSMSX901.amr.corp.intel.com (10.22.229.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.25; Thu, 10 Jul 2025 08:09:15 -0700 Received: from ORSEDG901.ED.cps.intel.com (10.7.248.11) by ORSMSX903.amr.corp.intel.com (10.22.229.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.25 via Frontend Transport; Thu, 10 Jul 2025 08:09:15 -0700 Received: from NAM10-DM6-obe.outbound.protection.outlook.com (40.107.93.46) by edgegateway.intel.com (134.134.137.111) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.25; Thu, 10 Jul 2025 08:09:12 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=bKrX++D7z4yEXLKeC2toptAISkDZ/FhPT2DkgYu2DRbB85ZKZiB4E+W1eecIO5xmieB536ReJ3QQSVlL6O3gCzrgD8hKLBDAVaZ37pIdLtGkkqwAWFGfFjjXC0mtLKhuYjhOL7hg1mVoTrOWGwISMtF9RGtwvHNNhoez5PpXSlWANv1MJ9OgV2ifLMUoAGXJIUOozUI31mk9u1VzPjPssRgAJWp6e7o3SFvbm9V622LhIBWwWgd39Dz+EvNSov+kBaDmd0viXXTdLzO7TLWRLMUYDsI/kEPr8uJ9Nr8CAclvoudIPO3dFvNNhrIuLbPTDtkMDuoetBso9TY+ASdApg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=HUaP/97ATvRTyJhz1ZDVf0+rWAy2flLX6t6mk+1r/o8=; b=tgmI2EY6s/A5cfUWPuaUPVSQnUm4QRJTiOhKaid7v3wSDwG92iaNlncToHeDpFzT9hlnWGLxxmJ3U60D9KWYHn14kPdFB7K+80/3GSUjxBYoq4E0ALPkcFJK5bUfaLAYXglr2uAKh3U2RxS4d87oc27B3nQ3nE3uOS297UZS/lmdwDllOnh4X/SZnPB5mq/ZMkTjzHy1zXMxZ5PUcr3oa9eSmf4lX1P1+Z8258NaQV8ZQATabnuYIZM/PklPn99K0Qs1M8LXHuoCGLZZTEgsf2sDSU65JZadPaJGthUV+LDfr/j795/XR8sAeFNrohYhEItIrbe7kQVBplJHqUqA2Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; Received: from CYYPR11MB8430.namprd11.prod.outlook.com (2603:10b6:930:c6::19) by IA1PR11MB8861.namprd11.prod.outlook.com (2603:10b6:208:59a::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8901.27; Thu, 10 Jul 2025 15:08:44 +0000 Received: from CYYPR11MB8430.namprd11.prod.outlook.com ([fe80::76d2:8036:2c6b:7563]) by CYYPR11MB8430.namprd11.prod.outlook.com ([fe80::76d2:8036:2c6b:7563%5]) with mapi id 15.20.8901.024; Thu, 10 Jul 2025 15:08:44 +0000 From: Rodrigo Vivi To: , , CC: , , , , Badal Nilawar , Rodrigo Vivi Subject: [PATCH 2/9] mei: late_bind: add late binding component driver Date: Thu, 10 Jul 2025 11:08:33 -0400 Message-ID: <20250710150831.3018674-13-rodrigo.vivi@intel.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250710150831.3018674-11-rodrigo.vivi@intel.com> References: <20250710150831.3018674-11-rodrigo.vivi@intel.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SJ0PR13CA0167.namprd13.prod.outlook.com (2603:10b6:a03:2c7::22) To CYYPR11MB8430.namprd11.prod.outlook.com (2603:10b6:930:c6::19) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CYYPR11MB8430:EE_|IA1PR11MB8861:EE_ X-MS-Office365-Filtering-Correlation-Id: 3bb0ba10-503a-4850-0d3c-08ddbfc3a97f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?UjRW/0nD+KWLbPGb6Gt8cwtXpektQ8INuCPB0fi+YCWyz7HzGGfQzgx7zBUg?= =?us-ascii?Q?avWCnXA3RXIA3aXFtvoxju0lHQs+Wn94PLp8Y3IN0sQY4TguLm/Av57b36bt?= =?us-ascii?Q?4xajsTG2J9jqG2r/EuejGSICWu4bIXH2c2zSkki7p0hR1htQAr+wwRehqGSY?= =?us-ascii?Q?9hgT9lUZ4e6FiYZC4Mk/H3QBmoWNkmXpT/UbQvlk6r15iLwLEKhdGiPF1Xa/?= =?us-ascii?Q?y2hDs4ngkmm27FjVzoJLeF1yS6HCLpw4AU0TdV2JDFgmUdScHRWbuXvp2sTd?= =?us-ascii?Q?wg3aljopXm4FT8Q632P2AoBE9Ptzn8lPu5BjPM9R0qbhJyI8mCTCpvRHX0CT?= =?us-ascii?Q?KD1qjElSeSd6kOREQO1zGWsUnlXwmNcMf3XTQBo4D/PaqHVjavtMLI9/VvJp?= =?us-ascii?Q?jZKgCxOU6xXyF1XOW6qQ2d9UcC3ysy8Lad08EHas6N/KLapRYeWjaAViV+zj?= =?us-ascii?Q?y6RcLApqcovpP7jPVSx8pW0N0R8hCZirQfFngDfXEQnutdAUkr28nZp6b7UQ?= =?us-ascii?Q?Ybf14o0h5JoOSIfsq0mExmmxBPmsLZtYxCToIm5h/zSg07p2HhbEO8rqve8b?= =?us-ascii?Q?K8eBiIa3/xjdbtAut5dGbz88uhU0ol+8NYGswNlx1wUT/OwQYEHRq9+o8dnN?= =?us-ascii?Q?ACTR7NOxhpZhqafJyLAMfscOrrR/QwW68//9YEuCC0rt4UfM0YgqyRzgWChS?= =?us-ascii?Q?B82kYkWAq3dyfTrOzwOJMMJ2zBvgzHcAiUMmqg4NwfAZJWWFV58eCr5UBn9X?= =?us-ascii?Q?MivRSoc3Sm37R80PQoXwR6/DGjJfaf82cvBHZDa7bHPCg564jJ42DRZMEptt?= =?us-ascii?Q?yzyZcE5QIeXvaN7UCj5BDAm6HX+ck4sbMUyZmy47kJIx0Z1y6yRT5q6pNv8f?= =?us-ascii?Q?eJAe0W/8Bw5FrnuvQH7k0J0ebJX294VXg6CM/euRPwguqxKn9iJbeywnc8mV?= =?us-ascii?Q?7H2ClY0QPW9FwCjuPLcAQEw6usw/ZGisFgmShhML1+PwZVASSt5Ounee2dpc?= =?us-ascii?Q?S8tq7Mlj2r7wpMUMIlQgtgmQq0Kc6eZjfEGs7LiikIJMXKOBRQB4CE8D62gf?= =?us-ascii?Q?EmedJEI9dlCXXqbhgodvASH82teJchw/aIX3r3Mq1sA9tGUJKMqOTajNwCy5?= =?us-ascii?Q?RNDvRNaY/D3rE0jARY75VAAIWXE5GAfTWMckXVEiDNaLAteOWlSgONLWTcN4?= =?us-ascii?Q?TbEcLz8e1J9lo7l4oZBi9ghoAnfLzfWNhVOmMlxnnhQXIxWszNweI7JT8EEs?= =?us-ascii?Q?Qv7HxaWAQLVPBAYqmuN+3L/0CVFWed7EqqFp8O4DwAZltbaWXjA4yU4CJb7F?= =?us-ascii?Q?MtF55qWSt2/XyF2/Q0A0mIDPCiIDmVcRJelQSD4c+rBRGB/EOIrrv0Tpl8IA?= =?us-ascii?Q?HadAolI/tuaBGCMd05qG+Pjl9lqbnAzKLDZHGDhrvX9QqzmmIBsyBRRk/lpt?= =?us-ascii?Q?ZJiag0eZ4TI=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CYYPR11MB8430.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?yt9I7XipUmgu2BA4rvxlVEU8jx0Yov4de0jQZpK/VWuLyXCO87zpfYewIZJr?= =?us-ascii?Q?J6YOlLJWXSwBbBt0UPg3CFQ7833Z5XyzxKFylFSuPdJuIf3+x1rMviOYFVni?= =?us-ascii?Q?w04rFRpgPNJhUy30UdAzKn8vWatluct5z2TiIGB1tIrkH4JJyO0P6I3M8Mzs?= =?us-ascii?Q?PrmQBVGdIaIBeYbj2kwWK84wPOksPjkuivtMYwdoYG/B4NXRoGCnBpxxoxXH?= =?us-ascii?Q?zx5SsIvEWn1/wxFJ40bs/p/4c6u6puU9hpxNWjY/R2bsCNCjaNJUIKzBcia+?= =?us-ascii?Q?xhEUx+uaMEu6goLoiwTYQNl27x/mTG4SLPm6eITKuekq16nAoc7WhjGVV+QX?= =?us-ascii?Q?zdfqXYLhykQFfVK0ekf4P/s7a48cVBQ9zUHgMaNWLv/9lwZxrs7HAxu/6sH4?= =?us-ascii?Q?5K6d6eU0O2aIOOHM41KGq/M0nI5pP8l9QMY75y9XZCaNbK4VT8Tm2n+iyMt7?= =?us-ascii?Q?VaJDBo4FJ4zessb3OXvyGPbC9lXL7jLhF3fz50K3Nc+BPnPnX6o/lznQvMQX?= =?us-ascii?Q?y0645Cazqe1dbWYphKm6GW0vvxVeTWDTAX3872ku5TLRKJrE1Iga8qvd7WN2?= =?us-ascii?Q?iyEYGRoayXxuiwkX3Unt3BqcFRCX+fScTA+GTUQd414Y5JrzZjr2xa9gt4Xk?= =?us-ascii?Q?QWgNV9nmv2Q5mah4qAau8CirPc45KaNhQjfskdkz3Fz69Zua6H6gKI9vQ2/z?= =?us-ascii?Q?yQ6sjf7f9vNmAP7slMTa8TnXEDNW2UZ82mlw8+MoWWcMfRqxSC1c6Oqpo/tK?= =?us-ascii?Q?+DGoCd6pUa6LaX+m2Wk+HtWtnHNJaHVBEVGkwxDxbLgORbw8Grl6X8saAKz8?= =?us-ascii?Q?SyKC/xdY09Lpyn8YQmEOs1fBv0aHA3cURWe/i8i38WkmMq2NCW+BDPnkf410?= =?us-ascii?Q?5zCtTMbWjC73RPh5aGI3Z481+SpXpcgteBwuLBcul2YDwPZF2KRyI6HykReR?= =?us-ascii?Q?+EEO4DJoDWLOXi31t3uP/mBxAHHRD49cCelxbIueyvUFaNcYtM909WTOn4g0?= =?us-ascii?Q?h6u51ZyvoHOWXcU7YwmeYksXE7iaZbUT6pqveiu0VUbct1YH+CWagb9ZuqTv?= =?us-ascii?Q?7DgqeX4+Y3+KHjSjepPJyho9I2wnmcrXXWQulDAGEg9JA5d0pP9/GdawP5LE?= =?us-ascii?Q?lVMRrfYQ1SszI7B4dAEKzs8JfSg1V7UmRfmwRzpCY+traE9M1TPdvYnEdUFo?= =?us-ascii?Q?/HvT8WrOkCfGoN0QmD5x8xHFzq/wwhTwls/TsK562RQzRXN6upw/DarK50vw?= =?us-ascii?Q?6tvlh4otlWhISyVPBOMJdaJpRAE6tfC8IreE4dd6daQxWk5I7TCG+Uxe6WuS?= =?us-ascii?Q?mM1tU8EOTvEoB2+LNu/a6Q1HD6blo73fe2Tz8qnHUsBfqfOZZVh6V1H6U2W0?= =?us-ascii?Q?Bc9vrUcUsN6q24ADvMBP8fRvo5pvgpxeMXBTR28Ii8PoadyM8843IOHddZra?= =?us-ascii?Q?LI/+NaYP8lpe7AemyMhsSaSsDonF6LHR7LlhkCD5akY0xNhvMhUY9Le8bIFt?= =?us-ascii?Q?jTMAMGm6YodC6yOo4EOAWBV/zDxmqGOxs9Nk+A7KWFtu3iCjxJheCSOBvFuv?= =?us-ascii?Q?oSpUUDaCp0vRVZ4/+SpTHQ1dTMY/dQj0moufyPFEFzIH98gKzloFSwvQBqlm?= =?us-ascii?Q?Og=3D=3D?= X-MS-Exchange-CrossTenant-Network-Message-Id: 3bb0ba10-503a-4850-0d3c-08ddbfc3a97f X-MS-Exchange-CrossTenant-AuthSource: CYYPR11MB8430.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Jul 2025 15:08:44.1913 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 9y2q/m4h/dGoz2OVQndQX1oZC5yEm/OK+m76/czuiHG9LCXO5N+Ju6b4uc87aSkbaHGkRTvNUgYU3ISPAA0cbA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA1PR11MB8861 X-OriginatorOrg: intel.com Content-Type: text/plain; charset="utf-8" From: Alexander Usyskin Introduce a new MEI client driver to support Late Binding firmware upload/update for Intel discrete graphics platforms. Late Binding is a runtime firmware upload/update mechanism that allows payloads, such as fan control and voltage regulator, to be securely delivered and applied without requiring SPI flash updates or system reboots. This driver enables the Xe graphics driver and other user-space tools to push such firmware blobs to the authentication firmware via the MEI interface. The driver handles authentication, versioning, and communication with the authentication firmware, which in turn coordinates with the PUnit/PCODE to apply the payload. This is a foundational component for enabling dynamic, secure, and re-entrant configuration updates on platforms like Battlemage. Signed-off-by: Alexander Usyskin Signed-off-by: Badal Nilawar Reviewed-by: Anshuman Gupta Signed-off-by: Rodrigo Vivi --- Changes in this revision: - Proper commit message - Proper explanation of 'Late Binding' on Kconfig help and doc - Consistency in naming: + mei_ prefix where it makes sense + use 'lb' for short of 'Late Binding' instead of 'late_bind' Including s/CONFIG_INTEL_MEI_LATE_BIND/CONFIG_INTEL_MEI_LB + remove stray 'struct module' + Fix structs and enum documentation style and fields + Remove 'CSC' to avoid yet another acronym. 'Authentication firmware' it= is. + specify size unit + s/push_config/push_payload drivers/misc/mei/Kconfig | 13 + drivers/misc/mei/Makefile | 1 + drivers/misc/mei/mei_lb.c | 315 +++++++++++++++++++++ include/drm/intel/i915_component.h | 1 + include/drm/intel/intel_lb_mei_interface.h | 70 +++++ 5 files changed, 400 insertions(+) create mode 100644 drivers/misc/mei/mei_lb.c create mode 100644 include/drm/intel/intel_lb_mei_interface.h diff --git a/drivers/misc/mei/Kconfig b/drivers/misc/mei/Kconfig index 7575fee96cc6..f8b04e49e4ba 100644 --- a/drivers/misc/mei/Kconfig +++ b/drivers/misc/mei/Kconfig @@ -81,6 +81,19 @@ config INTEL_MEI_VSC This driver can also be built as a module. If so, the module will be called mei-vsc. =20 +config INTEL_MEI_LB + tristate "Intel Late Binding (LB) support on ME Interface" + depends on INTEL_MEI_ME + depends on DRM_XE + help + Enable support for Intel Late Binding (LB) via the MEI interface. + + Late Binding is a method for applying firmware updates at runtime, + allowing the Intel Xe driver to load firmware payloads such as + fan controller or voltage regulator. These firmware updates are + authenticated and versioned, and do not require firmware flashing + or system reboot. + source "drivers/misc/mei/hdcp/Kconfig" source "drivers/misc/mei/pxp/Kconfig" source "drivers/misc/mei/gsc_proxy/Kconfig" diff --git a/drivers/misc/mei/Makefile b/drivers/misc/mei/Makefile index 6f9fdbf1a495..a203ed766b33 100644 --- a/drivers/misc/mei/Makefile +++ b/drivers/misc/mei/Makefile @@ -31,6 +31,7 @@ CFLAGS_mei-trace.o =3D -I$(src) obj-$(CONFIG_INTEL_MEI_HDCP) +=3D hdcp/ obj-$(CONFIG_INTEL_MEI_PXP) +=3D pxp/ obj-$(CONFIG_INTEL_MEI_GSC_PROXY) +=3D gsc_proxy/ +obj-$(CONFIG_INTEL_MEI_LB) +=3D mei_lb.o =20 obj-$(CONFIG_INTEL_MEI_VSC_HW) +=3D mei-vsc-hw.o mei-vsc-hw-y :=3D vsc-tp.o diff --git a/drivers/misc/mei/mei_lb.c b/drivers/misc/mei/mei_lb.c new file mode 100644 index 000000000000..fddef862712d --- /dev/null +++ b/drivers/misc/mei/mei_lb.c @@ -0,0 +1,315 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (C) 2025 Intel Corporation + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "mkhi.h" + +/** + * DOC: Late Binding Firmware Update/Upload + * + * Late Binding is a firmware update/upload mechanism that allows configur= ation + * payloads to be securely delivered and applied at runtime, rather than + * being embedded in the system firmware image (e.g., IFWI or SPI flash). + * + * This mechanism is used to update device-level configuration such as: + * - Fan controller + * - Voltage regulator (VR) + * + * Key Characteristics: + * --------------------- + * - Runtime Delivery: + * Firmware blobs are loaded by the host driver (e.g., Xe KMD) + * after the GPU or SoC has booted. + * + * - Secure and Authenticated: + * All payloads are signed and verified by the authentication firmware. + * + * - No Firmware Flashing Required: + * Updates are applied in volatile memory and do not require SPI flash + * modification or system reboot. + * + * - Re-entrant: + * Multiple updates of the same or different types can be applied + * sequentially within a single boot session. + * + * - Version Controlled: + * Each payload includes version and security version number (SVN) + * metadata to support anti-rollback enforcement. + * + * Upload Flow: + * ------------ + * 1. Host driver (KMD or user-space tool) loads the late binding firmware. + * 2. Firmware is passed to the MEI interface and forwarded to + * authentication firmware. + * 3. Authentication firmware authenticates the payload and extracts + * command and data arrays. + * 4. Authentication firmware delivers the configuration to PUnit/PCODE. + * 5. Status is returned back to the host via MEI. + */ + +#define INTEL_LB_CMD 0x12 +#define INTEL_LB_RSP (INTEL_LB_CMD | 0x80) + +#define INTEL_LB_SEND_TIMEOUT_MSEC 3000 +#define INTEL_LB_RECV_TIMEOUT_MSEC 3000 + +/** + * struct mei_lb_req - Late Binding request structure + * @header: MKHI message header (see struct mkhi_msg_hdr) + * @type: Type of the Late Binding payload + * @flags: Flags to be passed to the authentication firmware (e.g. %INTEL_= LB_FLAGS_IS_PERSISTENT) + * @reserved: Reserved for future use by authentication firmware, must be = set to 0 + * @payload_size: Size of the payload data in bytes + * @payload: Payload data to be sent to the authentication firmware + */ +struct mei_lb_req { + struct mkhi_msg_hdr header; + __le32 type; + __le32 flags; + __le32 reserved[2]; + __le32 payload_size; + u8 payload[] __counted_by(payload_size); +} __packed; + +/** + * struct mei_lb_rsp - Late Binding response structure + * @header: MKHI message header (see struct mkhi_msg_hdr) + * @type: Type of the Late Binding payload + * @reserved: Reserved for future use by authentication firmware, must be = set to 0 + * @status: Status returned by authentication firmware (see enum intel_lb_= status) + */ +struct mei_lb_rsp { + struct mkhi_msg_hdr header; + __le32 type; + __le32 reserved[2]; + __le32 status; +} __packed; + +static int mei_lb_check_response(const struct device *dev, const struct mk= hi_msg_hdr *hdr) +{ + if (hdr->group_id !=3D MKHI_GROUP_ID_GFX) { + dev_err(dev, "Mismatch group id: 0x%x instead of 0x%x\n", + hdr->group_id, MKHI_GROUP_ID_GFX); + return -EINVAL; + } + + if (hdr->command !=3D INTEL_LB_RSP) { + dev_err(dev, "Mismatch command: 0x%x instead of 0x%x\n", + hdr->command, INTEL_LB_RSP); + return -EINVAL; + } + + if (hdr->result) { + dev_err(dev, "Error in result: 0x%x\n", hdr->result); + return -EINVAL; + } + + return 0; +} + +static int mei_lb_push_payload(struct device *dev, + enum intel_lb_type type, u32 flags, + const void *payload, size_t payload_size) +{ + struct mei_cl_device *cldev; + struct mei_lb_req *req =3D NULL; + struct mei_lb_rsp rsp; + size_t req_size; + ssize_t bytes; + int ret; + + cldev =3D to_mei_cl_device(dev); + + ret =3D mei_cldev_enable(cldev); + if (ret) { + dev_dbg(dev, "mei_cldev_enable failed. %d\n", ret); + return ret; + } + + req_size =3D struct_size(req, payload, payload_size); + if (req_size > mei_cldev_mtu(cldev)) { + dev_err(dev, "Payload is too big %zu\n", payload_size); + ret =3D -EMSGSIZE; + goto end; + } + + req =3D kmalloc(req_size, GFP_KERNEL); + if (!req) { + ret =3D -ENOMEM; + goto end; + } + + req->header.group_id =3D MKHI_GROUP_ID_GFX; + req->header.command =3D INTEL_LB_CMD; + req->type =3D cpu_to_le32(type); + req->flags =3D cpu_to_le32(flags); + req->reserved[0] =3D 0; + req->reserved[1] =3D 0; + req->payload_size =3D cpu_to_le32(payload_size); + memcpy(req->payload, payload, payload_size); + + bytes =3D mei_cldev_send_timeout(cldev, + (void *)req, req_size, INTEL_LB_SEND_TIMEOUT_MSEC); + if (bytes < 0) { + dev_err(dev, "mei_cldev_send failed. %zd\n", bytes); + ret =3D bytes; + goto end; + } + + bytes =3D mei_cldev_recv_timeout(cldev, + (void *)&rsp, sizeof(rsp), INTEL_LB_RECV_TIMEOUT_MSEC); + if (bytes < 0) { + dev_err(dev, "mei_cldev_recv failed. %zd\n", bytes); + ret =3D bytes; + goto end; + } + if (bytes < sizeof(rsp.header)) { + dev_err(dev, "bad response header from the firmware: size %zd < %zu\n", + bytes, sizeof(rsp.header)); + ret =3D -EPROTO; + goto end; + } + if (mei_lb_check_response(dev, &rsp.header)) { + dev_err(dev, "bad result response from the firmware: 0x%x\n", + *(uint32_t *)&rsp.header); + ret =3D -EPROTO; + goto end; + } + if (bytes < sizeof(rsp)) { + dev_err(dev, "bad response from the firmware: size %zd < %zu\n", + bytes, sizeof(rsp)); + ret =3D -EPROTO; + goto end; + } + + dev_dbg(dev, "status =3D %u\n", le32_to_cpu(rsp.status)); + ret =3D (int)le32_to_cpu(rsp.status); +end: + mei_cldev_disable(cldev); + kfree(req); + return ret; +} + +static const struct intel_lb_component_ops mei_lb_ops =3D { + .push_payload =3D mei_lb_push_payload, +}; + +static int mei_lb_component_master_bind(struct device *dev) +{ + return component_bind_all(dev, (void *)&mei_lb_ops); +} + +static void mei_lb_component_master_unbind(struct device *dev) +{ + component_unbind_all(dev, (void *)&mei_lb_ops); +} + +static const struct component_master_ops mei_component_master_ops =3D { + .bind =3D mei_lb_component_master_bind, + .unbind =3D mei_lb_component_master_unbind, +}; + +/** + * mei_lb_component_match - compare function for matching mei late bind. + * + * This function checks if requester is Intel PCI_CLASS_DISPLAY_VGA or + * PCI_CLASS_DISPLAY_OTHER device, and checks if the requester is the + * grand parent of mei_if i.e. lb mei device + * + * @dev: master device + * @subcomponent: subcomponent to match (INTEL_COMPONENT_LB) + * @data: compare data (lb mei device on mei bus) + * + * Return: + * * 1 - if components match + * * 0 - otherwise + */ +static int mei_lb_component_match(struct device *dev, int subcomponent, + void *data) +{ + struct device *base =3D data; + struct pci_dev *pdev; + + if (!dev) + return 0; + + if (!dev_is_pci(dev)) + return 0; + + pdev =3D to_pci_dev(dev); + + if (pdev->vendor !=3D PCI_VENDOR_ID_INTEL) + return 0; + + if (pdev->class !=3D (PCI_CLASS_DISPLAY_VGA << 8) && + pdev->class !=3D (PCI_CLASS_DISPLAY_OTHER << 8)) + return 0; + + if (subcomponent !=3D INTEL_COMPONENT_LB) + return 0; + + base =3D base->parent; + if (!base) /* mei device */ + return 0; + + base =3D base->parent; /* pci device */ + + return !!base && dev =3D=3D base; +} + +static int mei_lb_probe(struct mei_cl_device *cldev, + const struct mei_cl_device_id *id) +{ + struct component_match *master_match =3D NULL; + int ret; + + component_match_add_typed(&cldev->dev, &master_match, + mei_lb_component_match, &cldev->dev); + if (IS_ERR_OR_NULL(master_match)) + return -ENOMEM; + + ret =3D component_master_add_with_match(&cldev->dev, + &mei_component_master_ops, + master_match); + if (ret < 0) + dev_err(&cldev->dev, "Master comp add failed %d\n", ret); + + return ret; +} + +static void mei_lb_remove(struct mei_cl_device *cldev) +{ + component_master_del(&cldev->dev, &mei_component_master_ops); +} + +#define MEI_GUID_MKHI UUID_LE(0xe2c2afa2, 0x3817, 0x4d19, \ + 0x9d, 0x95, 0x6, 0xb1, 0x6b, 0x58, 0x8a, 0x5d) + +static struct mei_cl_device_id mei_lb_tbl[] =3D { + { .uuid =3D MEI_GUID_MKHI, .version =3D MEI_CL_VERSION_ANY }, + { } +}; +MODULE_DEVICE_TABLE(mei, mei_lb_tbl); + +static struct mei_cl_driver mei_lb_driver =3D { + .id_table =3D mei_lb_tbl, + .name =3D KBUILD_MODNAME, + .probe =3D mei_lb_probe, + .remove =3D mei_lb_remove, +}; + +module_mei_cl_driver(mei_lb_driver); + +MODULE_AUTHOR("Intel Corporation"); +MODULE_LICENSE("GPL"); +MODULE_DESCRIPTION("MEI LB"); diff --git a/include/drm/intel/i915_component.h b/include/drm/intel/i915_co= mponent.h index 4ea3b17aa143..8082db222e00 100644 --- a/include/drm/intel/i915_component.h +++ b/include/drm/intel/i915_component.h @@ -31,6 +31,7 @@ enum i915_component_type { I915_COMPONENT_HDCP, I915_COMPONENT_PXP, I915_COMPONENT_GSC_PROXY, + INTEL_COMPONENT_LB, }; =20 /* MAX_PORT is the number of port diff --git a/include/drm/intel/intel_lb_mei_interface.h b/include/drm/intel= /intel_lb_mei_interface.h new file mode 100644 index 000000000000..602822706eb0 --- /dev/null +++ b/include/drm/intel/intel_lb_mei_interface.h @@ -0,0 +1,70 @@ +/* SPDX-License-Identifier: MIT */ +/* + * Copyright (c) 2025 Intel Corporation + */ + +#ifndef _INTEL_LB_MEI_INTERFACE_H_ +#define _INTEL_LB_MEI_INTERFACE_H_ + +#include + +struct device; + +/** + * INTEL_LB_FLAGS_IS_PERSISTENT - Mark the payload as persistent + * + * This flag indicates that the Late Binding payload should be stored + * persistently in flash across warm resets. + */ +#define INTEL_LB_FLAGS_IS_PERSISTENT BIT(0) + +/** + * intel_lb_type - enum to determine late binding payload type + */ +enum intel_lb_type { + INTEL_LB_TYPE_FAN_CONTROL =3D 1, +}; + +/** + * enum intel_lb_status - Status codes returned on Late Binding transmissi= ons + * @INTEL_LB_STATUS_SUCCESS: Operation completed successfully + * @INTEL_LB_STATUS_4ID_MISMATCH: Mismatch in the expected 4ID (firmware i= dentity/token) + * @INTEL_LB_STATUS_ARB_FAILURE: Arbitration failure (e.g. conflicting acc= ess or state) + * @INTEL_LB_STATUS_GENERAL_ERROR: General firmware error not covered by o= ther codes + * @INTEL_LB_STATUS_INVALID_PARAMS: One or more input parameters are inval= id + * @INTEL_LB_STATUS_INVALID_SIGNATURE: Payload has an invalid or untrusted= signature + * @INTEL_LB_STATUS_INVALID_PAYLOAD: Payload contents are not accepted by = firmware + * @INTEL_LB_STATUS_TIMEOUT: Operation timed out before completion + */ +enum intel_lb_status { + INTEL_LB_STATUS_SUCCESS =3D 0, + INTEL_LB_STATUS_4ID_MISMATCH =3D 1, + INTEL_LB_STATUS_ARB_FAILURE =3D 2, + INTEL_LB_STATUS_GENERAL_ERROR =3D 3, + INTEL_LB_STATUS_INVALID_PARAMS =3D 4, + INTEL_LB_STATUS_INVALID_SIGNATURE =3D 5, + INTEL_LB_STATUS_INVALID_PAYLOAD =3D 6, + INTEL_LB_STATUS_TIMEOUT =3D 7, +}; + +/** + * struct intel_lb_component_ops - Ops for Late Binding services. + * @push_payload: Callback to send a Late Binding payload + */ +struct intel_lb_component_ops { + /** + * push_payload - Sends a payload to the authentication firmware + * @dev: Device struct corresponding to the mei device + * @type: Payload type (see enum intel_lb_type) + * @flags: Payload flags bitmap (e.g. %INTEL_LB_FLAGS_IS_PERSISTENT) + * @payload: Pointer to payload buffer + * @payload_size: Payload buffer size in bytes + * + * Return: 0 success, negative errno value on transport failure, + * positive status returned by firmware + */ + int (*push_payload)(struct device *dev, u32 type, u32 flags, + const void *payload, size_t payload_size); +}; + +#endif /* _INTEL_LB_MEI_INTERFACE_H_ */ --=20 2.49.0 From nobody Tue Oct 7 09:58:51 2025 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.19]) (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 00C15272E54 for ; Thu, 10 Jul 2025 15:08:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=198.175.65.19 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752160132; cv=fail; b=aOkc3dgVJn06Fv/uV9y/huAhEdwoT2XAbZMn1JLaaLqJGSJ4s0M+Eqp+InHdQwHXwNNuFLnAiq+KdZTOlceaszk+pg1VLRiXoIHjIbUsPdkqWEwSw7hV6wriNjDyvBoSsvxqdZ46lXANUnzeI6Q73L391Q17d0NligWq+t9giEo= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752160132; c=relaxed/simple; bh=HpeZNnt7bcWtrfdCxjHj+Wxr8KrNWUfvK6196BdYCMI=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=bW1hNWOWF9lygf0WeyXI6m/CAztoiyIyvViM/VW59VmkgQBLAL5qtX09S83ub4+K/JzKuUK1Q4FkSUe3wyBYtoo+inKz3JgEXreBlJhLXwm1vVQ/cnjdLMOl2PN87HbSY/CnlkWGdfbT6JACbOLFcivC6zyG0oXMw7nXua8z0kA= ARC-Authentication-Results: i=2; 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=QquIh5Od; arc=fail smtp.client-ip=198.175.65.19 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="QquIh5Od" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1752160131; x=1783696131; h=from:to:cc:subject:date:message-id:in-reply-to: references:content-transfer-encoding:mime-version; bh=HpeZNnt7bcWtrfdCxjHj+Wxr8KrNWUfvK6196BdYCMI=; b=QquIh5OdcbJK1x8nhfKFHPlVw/MAdnN3+Zktblg7ZXMpUueCPROC1KMm 5XcBsCQGFTjVY1/+CMV/XfUC/1Fn6MiV1MNouPMGS1bIHiYhLe2pJOPAO yqAlLbqyYN/GS1DWIVTcUrvRv2G2vZSFmx7EDagQpRlkYnnRAfX/lqdjA MxWmDPYcRZktJh5hpamY/JtsdAIwTzz1WDr1cfi/06yROxQWHWy37mj3h f61MkBQ39QuXVJghvtYe756RIAggmDqH5CL5fI21SGx5DsV6nBdL0W804 NZgDO51IsYB/mmdzJc6m7fznqnA0H3h7aqN3ekdNRfthn+XHh92T7q0J4 g==; X-CSE-ConnectionGUID: K1U/5Ns/SheVMnHbIlDy3w== X-CSE-MsgGUID: NIUuwpXfTH2cck41XoW+3g== X-IronPort-AV: E=McAfee;i="6800,10657,11490"; a="54296535" X-IronPort-AV: E=Sophos;i="6.16,300,1744095600"; d="scan'208";a="54296535" Received: from orviesa008.jf.intel.com ([10.64.159.148]) by orvoesa111.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Jul 2025 08:08:50 -0700 X-CSE-ConnectionGUID: KCPkZFHrRDKW7aJv931eeA== X-CSE-MsgGUID: n+xdLNy3SgC8jCmKU526bg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.16,300,1744095600"; d="scan'208";a="156600158" Received: from orsmsx902.amr.corp.intel.com ([10.22.229.24]) by orviesa008.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Jul 2025 08:08:50 -0700 Received: from ORSMSX903.amr.corp.intel.com (10.22.229.25) by ORSMSX902.amr.corp.intel.com (10.22.229.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.25; Thu, 10 Jul 2025 08:08:49 -0700 Received: from ORSEDG903.ED.cps.intel.com (10.7.248.13) by ORSMSX903.amr.corp.intel.com (10.22.229.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.25 via Frontend Transport; Thu, 10 Jul 2025 08:08:49 -0700 Received: from NAM10-DM6-obe.outbound.protection.outlook.com (40.107.93.68) by edgegateway.intel.com (134.134.137.113) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.25; Thu, 10 Jul 2025 08:08:49 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=HOzLN0b5Dwxickvg6r/4x2FcPeiIxcTkD+kI7Da9eDohKBnjaTW+CENYdvK8MPb03Bj36ca9CkXSn6R/ahGi5beHv7UPTzx6gAHTREfTX7utq3OwTN/DhyTn0fCb98wNqrdppqcs91bzT8OA2x3uIUkgvgAWmTU9EMJwkQL2T7exVOmEnkMl0cgQoQYBNDFZZKIXiLtrsN4/L0JhkqgEZaATgF/jLxCn5GV8bkAerCvDV/OdqcnMIcSVgv0iNvgMnsulxBS4VYu9U5CdM+1tJfcXOQe7xbbrXLzAfzt4ajYOzq4RtH9SMl7RirIQ12/TLLapG4UspuX8BykgjtG6ww== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=3SI52kwXr3r4BFaopH+1Jh7/1AaStJCy9Tb0swbKKxk=; b=F2Ecvla1mRLZ1BUoV3BvnICALBElBhreUbvnS6/S2mk19vU3pNWZEx84BDK+fYrFZDMoQu6OLfEDX+KB8UyxzVJgaGx+1qYN4i6+mUdq5+1CAi8O03kiljsbGGufQgCRsF4UHdV8NYFxuH7G7FAeIWK2AfDDAVa4TY5jmRXgFmGWD0GVtrIvvn/Ottvw01tCQ3373lbLFvtDR1Cj+JxFLXEQ+UwbREfHyOGQEtEKuCbziKMpW2rdIHw6NBMVfBmVodyIghN002OPMW8udHXCQohgf4dYn59ukUBY9uhRF/GWksQx2pCFdAfz6Adw3fBIkqgVKr03/U/nj1Mgcc2neg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; Received: from CYYPR11MB8430.namprd11.prod.outlook.com (2603:10b6:930:c6::19) by SN7PR11MB8028.namprd11.prod.outlook.com (2603:10b6:806:2df::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8901.26; Thu, 10 Jul 2025 15:08:47 +0000 Received: from CYYPR11MB8430.namprd11.prod.outlook.com ([fe80::76d2:8036:2c6b:7563]) by CYYPR11MB8430.namprd11.prod.outlook.com ([fe80::76d2:8036:2c6b:7563%5]) with mapi id 15.20.8901.024; Thu, 10 Jul 2025 15:08:46 +0000 From: Rodrigo Vivi To: , , CC: , , , , Badal Nilawar , Rodrigo Vivi Subject: [PATCH 3/9] drm/xe/xe_late_bind_fw: Introducing xe_late_bind_fw Date: Thu, 10 Jul 2025 11:08:34 -0400 Message-ID: <20250710150831.3018674-14-rodrigo.vivi@intel.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250710150831.3018674-11-rodrigo.vivi@intel.com> References: <20250710150831.3018674-11-rodrigo.vivi@intel.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SJ0PR03CA0027.namprd03.prod.outlook.com (2603:10b6:a03:33a::32) To CYYPR11MB8430.namprd11.prod.outlook.com (2603:10b6:930:c6::19) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CYYPR11MB8430:EE_|SN7PR11MB8028:EE_ X-MS-Office365-Filtering-Correlation-Id: b793520b-7f50-44e4-efd3-08ddbfc3ab0e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|366016; X-Microsoft-Antispam-Message-Info: =?utf-8?B?aFdHZHFXdHQzaXB2Snc1cnRaaUlrQWxNK3p1djBOMmxTSlR5L2w2UTlKNGYr?= =?utf-8?B?UkdFMnFSSnZuRFRyRVJnajlGUjVCczFRQUdYYzNpRjZSeDg1eWlRMXdteVZC?= =?utf-8?B?QUF0TEJPWWZKR2FnUEhwd0orNGpSK29aTVE0aEFXNFVCaXQ5R3FiMFpmcDJN?= =?utf-8?B?dDYwRXJVL0J4RHhOTU82TkNiWWhCRVd3NTNxcllDdVpBNnBsR3ZkdnkrdUNM?= =?utf-8?B?OVlFeXZhcTNlTkdUMUg5cWFLTG41VmJTMVV4NzhaUGdNOUJZOEtMTjhpS3dx?= =?utf-8?B?V0VGeEdSN0hwaVdHY0FNYmpmUDFTNnMzOTU3Zm1yYS92bGliSC9uNDhLYlN1?= =?utf-8?B?bWRWR0N5Q1M0d0JWVXFMUzhIK0M4VDZHdzV1L3p0aFMvenV6djMvVHJXYjJZ?= =?utf-8?B?bXFRaEhFbHlMdFcwU3VFN0NFSGN1TWdveE5Nbnh1THVteG9JV0hoUGJFbkpG?= =?utf-8?B?VzhGSDlXWVQzTE13L1ZRL0ppWlNpWEJ4SzdwSkx0SityOFY0aVZZMUFVZ1Yx?= =?utf-8?B?SUtreVBPMytVanBiTEY5STJWY1JMallUQm54UWpxWDFlTS9ZMGxreUlrcG43?= =?utf-8?B?N2ZPSTIwcTE0SHM1bjBXNlYrTjFGcEV6OU5jd1lSVkNlNlRHWm50dlVVc1Ez?= =?utf-8?B?MUdoTy9GR3Z6bFFkZE1RRWxoMGVCb3V2L2lIVzBKdEJaRzFhU1NZL2NGdXFI?= =?utf-8?B?STRaLytWUWkyWGdGVzk4WjNvczlPdXZUYVlDeElhMkhMQVBRdjZHL3JhVlpF?= =?utf-8?B?bnJLMUh6TWhWL0JrUHV2eURpSjhDblpPc05ZZi9MUTl0Z2JaZWVvRUJ2QnVL?= =?utf-8?B?cjI2eit6ZEFSTXdOTEEzMk5JSzN4S1JnMjA2WDBNZHA2dWUxVnNzenhmUmZW?= =?utf-8?B?NDFjYjhxdU5Lcm1LQkNVTkMwWEYrMEMwSHlXY2l2di9RQmQ2dlFCeDJhamNK?= =?utf-8?B?RC9hSnBraGFVckIyNDh6eTQrVHc0bW9Ob0lIcTBPeGFFK0xmZThyem9tYk1J?= =?utf-8?B?WnNLRVN3eTV3cVpVTXNua3ZTZWpPQ2FjRzMvK1QybjBRVzIwVE0rWm9nTHhQ?= =?utf-8?B?cVBzM3Q2U3d0Wk9QaUhJZ2h5YlhaSVprTFkvQ2ZWcVhGWFRQU3YvT0lZZ0lY?= =?utf-8?B?aUcrSHEyaVczM3c1MlJOcGh6bGhuM3hLN3JGajAyWnJtMG1PLy82L0ZUUmdS?= =?utf-8?B?RHRNQkRxTXpZS0Y4eWcra2JOdFJ5MXlHc21TTXlJTTRyNUZqbGdPMnZKcGZ5?= =?utf-8?B?TFJ4UFp5ZWszL0xaMnBNOThpcGgreVkxb2h6eW1wRWFXa1hpTlpheFJTOUFW?= =?utf-8?B?T1pCSUNmNGdLbk15cXczVVZNVWI1aW44bnJsdCtpRHNjWHVndmQzQXVIcTRB?= =?utf-8?B?ZE1mTHJqOSsxQ1oxa2h6VFdHVVdPNDU5RzFNS1Fjc2Y2RmwxVHB3eitqaE0x?= =?utf-8?B?Y0JrNWpIWTdWaUNDbHFnVFpPNFcwZnZsazhtckZvcHZWeU5qZ1hEaDErWG9H?= =?utf-8?B?OERhZDFXUjB4a3lTOUQrUExWTzY2TTlsOE1YUzlpVUhNQVZHY2F5bmRLOS9Z?= =?utf-8?B?bG0ra0VWRTdLdUhSdE81NmhvMkhWZ3kwWk5RRFJoUUV0K0U2aC9mem9vNXZq?= =?utf-8?B?LzRMUXI1MjNWVFl3dzdQM21lckU4dHF6S1lkWkNJQnluMnVvb21kMW80S0RD?= =?utf-8?B?UzEvOGJIcE5IdTdJaGo1OHBScEFSQm1DdTZ0MkozTWtEWHFUVFBVbHR1Z0No?= =?utf-8?B?citJOE10NlJxUHFXTnR4OXUyL3F4eDJaeU40Q3FhN2FJMk1zZHV5T2U4c1pu?= =?utf-8?B?ZzhOcmZ2OUFyQVVwa1FrRFlGbzZYSWx3Uzh2SWVOVEtvU0c5YS9xR0k2Y0Jw?= =?utf-8?B?VkFkY3BlNTdsWVVheWhEeThOdUNPUEJqaDNlOEk0QW9lYTVTTTF0S2U3NVl5?= =?utf-8?Q?29yTEBLxSww=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CYYPR11MB8430.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(376014)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?ZGt0U0ZubHpxWWN1S3UxYjNOd0RubVBTMGRVQUR0NTZyWnpCQnlmTG1sOW1q?= =?utf-8?B?VDlYK2JNS0d4RHd1MUNXUVpiNmdjQVdBY2wyMFRZN3ZXdW95OGF6WVlqd0JO?= =?utf-8?B?STBvZFdQQ1ljc0J6MElWKzBpdzc1OGYwTmk1QllXVmF1YXloOUtlZ24rWVBG?= =?utf-8?B?OE9HYk9leTZEY1RKUkttV1NLM3J0YWFrZjZ4SmpIWjVkVGQ2ZlRLR0xraDRF?= =?utf-8?B?RTFvQ3JIUGtKR1hwZW90NmR2TXRTMkZQQXpRb1FWSnF0MVVWS3V6UU1QdmlZ?= =?utf-8?B?YS9Qcldiemk5ZTJ0S1Q2TjNUdnVvUndPZ1loeVJPZWFKS2FzSE92dFRFcTlR?= =?utf-8?B?UmQwdWRzN2FYZHgySnhEaS9XQ1RMNWZiK1haVmVqUUUrb3V4bGRoczUyOTRE?= =?utf-8?B?NmcrWlNJeHRvSFNMOTRCZUNmVFh2ZUZpY0s0U3QzT3FmSC9XVlB2NHVnVTk3?= =?utf-8?B?UXQya1MrOGdYUHdBZE42a3AwdGI1M2poUnlpK3U5OFRMczN4a2xWaXcwUlEx?= =?utf-8?B?ZWZSS041UUxXandWQmZacytmNmVvWlFHMDBHRjF1NXNoc1BZVUpSOHBvWnh0?= =?utf-8?B?Yk0vdE4wK045YTRobTVCQk9FRUVTdkZPY3h0akREVTN6bER6Nk1aMHFTbW1y?= =?utf-8?B?eTJITEdXYzZoTXhEMmV3UDlMbmM1dWFMWGxlcVdYN1FYVkJ1V1U4VVUwSVBK?= =?utf-8?B?V3ZEbUkzTHVWN2wzSG9nUTIwZnBPSVJlV2VFWU5mTDFaRXZqMTVCcU53SHl2?= =?utf-8?B?NTJROGo3Qk8xOHFCTHNLNEpmNmJTa2laY0NyYnRHRGxSZU85K2Y2RnhvMk1Q?= =?utf-8?B?RjArYnlIWUd4bzV1bjdLbE83RklwaTBYRGZaYi9FV2xtZFBkT1NEbjY0Q2Zo?= =?utf-8?B?YnUzYUwxa0dvZnphaG0zSUliYjAzckRUbzJNSGdETlZhelZuWWZoemUzYjZk?= =?utf-8?B?WjRBK0tGaW1sVzVrb1dONjJ6LzVmbTcxeFo2bGoydDBiV1dNbzN2SE95TUs2?= =?utf-8?B?cU9ZNFU4Vk9KVE9oVjE0UEwzaVFGRTZXWmJPbFhtWnpEQ2tOcHFMaVBJWXR5?= =?utf-8?B?LzB5ek51RWpBcC9jNlVUZWdDejE0N2VsY0w1Nnhkb3Eyd1JSNkRSQndORWZV?= =?utf-8?B?VjJHR1l0b3l1YUhNQmtWRjVzQkNaNVlXNFljcldxMitsd3Q3QTZrdlhrUXR1?= =?utf-8?B?ajZ1MS9TOUQ5TDFrUFQ0ZXp2U3h5V1lnZ2RvaHRvYldOVjE2Qk5lTFdzVnJ1?= =?utf-8?B?WGxHM2VXZzBXTjRkSlhsWC9VVXdYTUpaajVtNjQwTithaFlxTUxHNlJvSzdV?= =?utf-8?B?bk12VXZzOS9OTlRKS2FWRS9Id0NKUWFkTEtIUjcyQVIycGRxMXlPUVh5YVNB?= =?utf-8?B?TzVoQXIwUmNISlhxczRUeFJoUTNKVkx3dHl0REhISXhhUHVIUnpxWDVXQVlV?= =?utf-8?B?R1NsOUdDN2FGOWxmaS9UVVpNQW91Zkh5MGhMaWJkVlNxajYyS2wrMkVUMmFu?= =?utf-8?B?ZGpqdWg2aXRNcU5GeHpIc0p5NWpBeVZEZ1RaYzRRQkJ1aUZOZUR6cjhydVhB?= =?utf-8?B?NWZVaExudXJaWFdXVHpqTVR6YVIyNzg3VDYxUk1XcmRESDRyNnlKN2NSSTdj?= =?utf-8?B?MERPV2Z3Y3ZHeXl6cHpwT2lmU3BmemZXYjliREJaK1hIeVVORjlVNjZoc0FD?= =?utf-8?B?WGdYTWpSU3h1dGl0Zi8yYlJqaEFkUG1jUVhIbmJYVXc4VHRSci9XSmdYU3Ex?= =?utf-8?B?My9iR3g0QjlabEluQi9DU3BrRjlNaSs3bWgrSi9VRGdEekNLNlVhUHdPZEdS?= =?utf-8?B?Um1RbzRmMy90cVJ2RG45Rlp0dGNjN3Vib1JqQU9HcXVsYlBmc2g3TVdIWjVt?= =?utf-8?B?SE9IL2Q1K0Rrc2gydkpyYVY2ZmZwMjI5VWV6dEJxdTJkWEhmcE1IVEFROG13?= =?utf-8?B?cTM3eWx0S3NzeUNuaDIvbVZuTFRhaUlnOGQxK1NXV0pxclB3dW5UcTZGSzZV?= =?utf-8?B?c1VQUVBOSkFoa3cyMUdpYXl1Sjk3cFlhekJBZDNOZ3V5L1RYaFptL0RDN09x?= =?utf-8?B?L2pGMFBmWGJneEhtZ3lxOWdzWGRscWxLUTVRYmdmcVhwbHZtYW9rYkdvUW5z?= =?utf-8?B?Z3kxNzR3U3MycTgvaUhMK0VnRi9YdCt2Y3ZCOWVDRmtzRFc5SzZPRW9aVjBQ?= =?utf-8?B?VGc9PQ==?= X-MS-Exchange-CrossTenant-Network-Message-Id: b793520b-7f50-44e4-efd3-08ddbfc3ab0e X-MS-Exchange-CrossTenant-AuthSource: CYYPR11MB8430.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Jul 2025 15:08:46.7822 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: k1Rt2f7/KFpvfCV9ujplNRa1OyrhiCMD+Mh3YBE149+iAx8GAxPXjgBwDEXU2RiSA3S0ozWAKN6+mUrORioIJg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN7PR11MB8028 X-OriginatorOrg: intel.com From: Badal Nilawar Introducing xe_late_bind_fw to enable firmware loading for the devices, such as the fan controller, during the driver probe. Typically, firmware for such devices are part of IFWI flash image but can be replaced at probe after OEM tuning. This patch binds mei late binding component to enable firmware loading. v2: - Add devm_add_action_or_reset to remove the component (Daniele) - Add INTEL_MEI_GSC check in xe_late_bind_init() (Daniele) v3: - Fail driver probe if late bind initialization fails, add has_late_bind flag (Daniele) v4: - %S/I915_COMPONENT_LATE_BIND/INTEL_COMPONENT_LATE_BIND/ v6: - rebased Signed-off-by: Badal Nilawar Reviewed-by: Daniele Ceraolo Spurio Signed-off-by: Rodrigo Vivi --- drivers/gpu/drm/xe/Makefile | 1 + drivers/gpu/drm/xe/xe_device.c | 5 ++ drivers/gpu/drm/xe/xe_device_types.h | 6 ++ drivers/gpu/drm/xe/xe_late_bind_fw.c | 84 ++++++++++++++++++++++ drivers/gpu/drm/xe/xe_late_bind_fw.h | 15 ++++ drivers/gpu/drm/xe/xe_late_bind_fw_types.h | 33 +++++++++ drivers/gpu/drm/xe/xe_pci.c | 2 + drivers/gpu/drm/xe/xe_pci_types.h | 1 + 8 files changed, 147 insertions(+) create mode 100644 drivers/gpu/drm/xe/xe_late_bind_fw.c create mode 100644 drivers/gpu/drm/xe/xe_late_bind_fw.h create mode 100644 drivers/gpu/drm/xe/xe_late_bind_fw_types.h diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile index 1d97e5b63f4e..97e2b1368a6e 100644 --- a/drivers/gpu/drm/xe/Makefile +++ b/drivers/gpu/drm/xe/Makefile @@ -76,6 +76,7 @@ xe-y +=3D xe_bb.o \ xe_hw_fence.o \ xe_irq.o \ xe_lrc.o \ + xe_late_bind_fw.o \ xe_migrate.o \ xe_mmio.o \ xe_mocs.o \ diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/xe_device.c index 0b73cb72bad1..cb595bae5f55 100644 --- a/drivers/gpu/drm/xe/xe_device.c +++ b/drivers/gpu/drm/xe/xe_device.c @@ -44,6 +44,7 @@ #include "xe_hw_engine_group.h" #include "xe_hwmon.h" #include "xe_irq.h" +#include "xe_late_bind_fw.h" #include "xe_mmio.h" #include "xe_module.h" #include "xe_nvm.h" @@ -866,6 +867,10 @@ int xe_device_probe(struct xe_device *xe) if (err) return err; =20 + err =3D xe_late_bind_init(&xe->late_bind); + if (err && err !=3D -ENODEV) + return err; + err =3D xe_oa_init(xe); if (err) return err; diff --git a/drivers/gpu/drm/xe/xe_device_types.h b/drivers/gpu/drm/xe/xe_d= evice_types.h index 78c4acafd268..a8891833f980 100644 --- a/drivers/gpu/drm/xe/xe_device_types.h +++ b/drivers/gpu/drm/xe/xe_device_types.h @@ -16,6 +16,7 @@ #include "xe_devcoredump_types.h" #include "xe_heci_gsc.h" #include "xe_lmtt_types.h" +#include "xe_late_bind_fw_types.h" #include "xe_memirq_types.h" #include "xe_oa_types.h" #include "xe_platform_types.h" @@ -325,6 +326,8 @@ struct xe_device { u8 has_heci_cscfi:1; /** @info.has_heci_gscfi: device has heci gscfi */ u8 has_heci_gscfi:1; + /** @info.has_late_bind: Device has firmware late binding support */ + u8 has_late_bind:1; /** @info.has_llc: Device has a shared CPU+GPU last level cache */ u8 has_llc:1; /** @info.has_mbx_power_limits: Device has support to manage power limit= s using @@ -557,6 +560,9 @@ struct xe_device { /** @nvm: discrete graphics non-volatile memory */ struct intel_dg_nvm_dev *nvm; =20 + /** @late_bind: xe mei late bind interface */ + struct xe_late_bind late_bind; + /** @oa: oa observation subsystem */ struct xe_oa oa; =20 diff --git a/drivers/gpu/drm/xe/xe_late_bind_fw.c b/drivers/gpu/drm/xe/xe_l= ate_bind_fw.c new file mode 100644 index 000000000000..152f3e58de94 --- /dev/null +++ b/drivers/gpu/drm/xe/xe_late_bind_fw.c @@ -0,0 +1,84 @@ +// SPDX-License-Identifier: MIT +/* + * Copyright =C2=A9 2025 Intel Corporation + */ + +#include +#include + +#include +#include +#include +#include + +#include "xe_device.h" +#include "xe_late_bind_fw.h" + +static struct xe_device * +late_bind_to_xe(struct xe_late_bind *late_bind) +{ + return container_of(late_bind, struct xe_device, late_bind); +} + +static int xe_late_bind_component_bind(struct device *xe_kdev, + struct device *mei_kdev, void *data) +{ + struct xe_device *xe =3D kdev_to_xe_device(xe_kdev); + struct xe_late_bind *late_bind =3D &xe->late_bind; + + late_bind->component.ops =3D data; + late_bind->component.mei_dev =3D mei_kdev; + + return 0; +} + +static void xe_late_bind_component_unbind(struct device *xe_kdev, + struct device *mei_kdev, void *data) +{ + struct xe_device *xe =3D kdev_to_xe_device(xe_kdev); + struct xe_late_bind *late_bind =3D &xe->late_bind; + + late_bind->component.ops =3D NULL; +} + +static const struct component_ops xe_late_bind_component_ops =3D { + .bind =3D xe_late_bind_component_bind, + .unbind =3D xe_late_bind_component_unbind, +}; + +static void xe_late_bind_remove(void *arg) +{ + struct xe_late_bind *late_bind =3D arg; + struct xe_device *xe =3D late_bind_to_xe(late_bind); + + component_del(xe->drm.dev, &xe_late_bind_component_ops); +} + +/** + * xe_late_bind_init() - add xe mei late binding component + * @late_bind: pointer to late bind structure. + * + * Return: 0 if the initialization was successful, a negative errno otherw= ise. + */ +int xe_late_bind_init(struct xe_late_bind *late_bind) +{ + struct xe_device *xe =3D late_bind_to_xe(late_bind); + int err; + + if (!xe->info.has_late_bind) + return 0; + + if (!IS_ENABLED(CONFIG_INTEL_MEI_LATE_BIND) || !IS_ENABLED(CONFIG_INTEL_M= EI_GSC)) { + drm_info(&xe->drm, "Can't init xe mei late bind missing mei component\n"= ); + return -ENODEV; + } + + err =3D component_add_typed(xe->drm.dev, &xe_late_bind_component_ops, + INTEL_COMPONENT_LB); + if (err < 0) { + drm_info(&xe->drm, "Failed to add mei late bind component (%pe)\n", ERR_= PTR(err)); + return err; + } + + return devm_add_action_or_reset(xe->drm.dev, xe_late_bind_remove, late_bi= nd); +} diff --git a/drivers/gpu/drm/xe/xe_late_bind_fw.h b/drivers/gpu/drm/xe/xe_l= ate_bind_fw.h new file mode 100644 index 000000000000..4c73571c3e62 --- /dev/null +++ b/drivers/gpu/drm/xe/xe_late_bind_fw.h @@ -0,0 +1,15 @@ +/* SPDX-License-Identifier: MIT */ +/* + * Copyright =C2=A9 2025 Intel Corporation + */ + +#ifndef _XE_LATE_BIND_FW_H_ +#define _XE_LATE_BIND_FW_H_ + +#include + +struct xe_late_bind; + +int xe_late_bind_init(struct xe_late_bind *late_bind); + +#endif diff --git a/drivers/gpu/drm/xe/xe_late_bind_fw_types.h b/drivers/gpu/drm/x= e/xe_late_bind_fw_types.h new file mode 100644 index 000000000000..f79e5aefed94 --- /dev/null +++ b/drivers/gpu/drm/xe/xe_late_bind_fw_types.h @@ -0,0 +1,33 @@ +/* SPDX-License-Identifier: MIT */ +/* + * Copyright =C2=A9 2025 Intel Corporation + */ + +#ifndef _XE_LATE_BIND_TYPES_H_ +#define _XE_LATE_BIND_TYPES_H_ + +#include +#include +#include + +/** + * struct xe_late_bind_component - Late Binding services component + * @mei_dev: device that provide Late Binding service. + * @ops: Ops implemented by Late Binding driver, used by Xe driver. + * + * Communication between Xe and MEI drivers for Late Binding services + */ +struct xe_late_bind_component { + struct device *mei_dev; + const struct late_bind_component_ops *ops; +}; + +/** + * struct xe_late_bind + */ +struct xe_late_bind { + /** @component: struct for communication with mei component */ + struct xe_late_bind_component component; +}; + +#endif diff --git a/drivers/gpu/drm/xe/xe_pci.c b/drivers/gpu/drm/xe/xe_pci.c index ffd6ad569b7c..69b8ead9ca59 100644 --- a/drivers/gpu/drm/xe/xe_pci.c +++ b/drivers/gpu/drm/xe/xe_pci.c @@ -332,6 +332,7 @@ static const struct xe_device_desc bmg_desc =3D { .has_gsc_nvm =3D 1, .has_heci_cscfi =3D 1, .max_gt_per_tile =3D 2, + .has_late_bind =3D true, .needs_scratch =3D true, }; =20 @@ -578,6 +579,7 @@ static int xe_info_init_early(struct xe_device *xe, xe->info.has_gsc_nvm =3D desc->has_gsc_nvm; xe->info.has_heci_gscfi =3D desc->has_heci_gscfi; xe->info.has_heci_cscfi =3D desc->has_heci_cscfi; + xe->info.has_late_bind =3D desc->has_late_bind; xe->info.has_llc =3D desc->has_llc; xe->info.has_pxp =3D desc->has_pxp; xe->info.has_sriov =3D desc->has_sriov; diff --git a/drivers/gpu/drm/xe/xe_pci_types.h b/drivers/gpu/drm/xe/xe_pci_= types.h index 4de6f69ed975..51a607d323fb 100644 --- a/drivers/gpu/drm/xe/xe_pci_types.h +++ b/drivers/gpu/drm/xe/xe_pci_types.h @@ -39,6 +39,7 @@ struct xe_device_desc { u8 has_gsc_nvm:1; u8 has_heci_gscfi:1; u8 has_heci_cscfi:1; + u8 has_late_bind:1; u8 has_llc:1; u8 has_mbx_power_limits:1; u8 has_pxp:1; --=20 2.49.0 From nobody Tue Oct 7 09:58:51 2025 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.17]) (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 B10F32741D4 for ; Thu, 10 Jul 2025 15:08:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=198.175.65.17 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752160138; cv=fail; b=JU5uxOrgLJo+kjO/XEw6a2fSD739mX/39UBbgzZWTnhq7twWXxHEhF42yx79i4jfzcvNmRXPy9SJ4/rqLnUuynweKrzkJMY5htDmZOjXEKDdcnygzFL86b3r8nTllwM9KlWeL7cnBOds/5fKZrOuIrqvVjOpcIt/eDwBvw8N43g= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752160138; c=relaxed/simple; bh=VtZXA5ahV1WOZQ6IeXjeqpUxJ7aSPmAlXcezJWyBOJw=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=bVfi1nqGdO0nOuxSh+2rvm2bMLb0xiLHAwmr51FX0W67foHTZQTAErG+czeE92BBHlkpeU1SlwBcUczgA0nQEEGB0roQLgEDvOJ2mZuXBIdsX91hPtBbQlaaQ1wgq+xO9N5amupiIr0fmfmIlh07h8CrcdZt3NgofE4jEkpeDag= ARC-Authentication-Results: i=2; 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=BwdMAYmK; arc=fail smtp.client-ip=198.175.65.17 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="BwdMAYmK" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1752160137; x=1783696137; h=from:to:cc:subject:date:message-id:in-reply-to: references:content-transfer-encoding:mime-version; bh=VtZXA5ahV1WOZQ6IeXjeqpUxJ7aSPmAlXcezJWyBOJw=; b=BwdMAYmKj6OOgXX7mkW+Gkem+sMv32NwmiIRnyqSBcOwhr5O8SkNbsaO wfJDkOH+79JGIlXi3UmERDIScRlPf4CXbqhseBH+e7BXWtqFXY2kwNnJb 8mKbehDRFRJ4+QkIMfzSMou4lgla1DYXfWh2FInUaaS7HsJgVtSqGIaUU Dohf8smCub6dzeavMjNUcIaztCdQPNURE8wA2/5Og/0eK1ZkAwhPkb9T0 UPRC9lD+7dC3csoS/d/bZl8IRokyOoP4ZA4sJOD2PLwZSWUL/3TOsZpaQ HO9kHeV501YY3IwJaaD16BAEIU5mOMO6UADVCypMO1bhmbo6Fm+2ZwJS8 w==; X-CSE-ConnectionGUID: AhuZhKNQSCmhbis/tfQVkQ== X-CSE-MsgGUID: 7KXxkz3xT4S20tZsQyi3Lw== X-IronPort-AV: E=McAfee;i="6800,10657,11490"; a="54416372" X-IronPort-AV: E=Sophos;i="6.16,300,1744095600"; d="scan'208";a="54416372" Received: from fmviesa003.fm.intel.com ([10.60.135.143]) by orvoesa109.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Jul 2025 08:08:55 -0700 X-CSE-ConnectionGUID: tvT5z+WzSfCn6LHEI1/toA== X-CSE-MsgGUID: DGdG50IhRVqiGzVtE3FBUQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.16,300,1744095600"; d="scan'208";a="160137635" Received: from orsmsx901.amr.corp.intel.com ([10.22.229.23]) by fmviesa003.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Jul 2025 08:08:54 -0700 Received: from ORSMSX902.amr.corp.intel.com (10.22.229.24) by ORSMSX901.amr.corp.intel.com (10.22.229.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.25; Thu, 10 Jul 2025 08:08:54 -0700 Received: from ORSEDG901.ED.cps.intel.com (10.7.248.11) by ORSMSX902.amr.corp.intel.com (10.22.229.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.25 via Frontend Transport; Thu, 10 Jul 2025 08:08:54 -0700 Received: from NAM10-BN7-obe.outbound.protection.outlook.com (40.107.92.80) by edgegateway.intel.com (134.134.137.111) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.25; Thu, 10 Jul 2025 08:08:52 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=hnnn1w/q7nWTq0B8IXJgxOJq0rVdS9dbLKy2UnYGIIHZw2zq8RsofvaQHU7Rg0EEh91300Oo0PIR5LKeSKpzIDMd7OjgpKuJuQ7C4DklM3Ex5ybi1mr2QAwMwbHPy1ohNRxf7uM2573JRstOZxSPLRHOlDRAFNXCvDa4b7TZT677e8F4DZO6ZgJsfmGJuls//x7w1am2s1iiQhvUvbERWuFIy/0COXKW2PvSEQBlCkqnkBH8uxDWRI3g81I1E1jQJYb0Fax7344AY6ywMm4v01+YMNUbERe73E+59JsPy5g96AvKK2AcSg3eNlIOkcXcAzaMaLEn1Qyr0p3PuAgFTQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=2FaOl35HoGAgCV5HyPUGYH3cV0EJ6FePLdX6BJuU6SE=; b=h+mV7lSMEkOrBudM1dckr6nSz+OVdeHVUo/qEfW0maf1+eNKMe7xQNwhbQKpTH6HZBuyeOpCOfMkXSU6QrbmoZYK7U/8ahbFiz1z+6KRFOGhh/B9ibjzEZQPGrXrk/B/2ZzgTTlUZhQSySG05amiv2TAm++aY2THC0DplIm+2HrmPVryf3dCEC6RpjQ+cEEhXxfKPL1ciLMKwqBZevfYKHSUh+xtb8g4Mvs0Zrkudl/5vuk/UBo9eksXdKwulG3/VDtATluGWbWSFbs2D2DkBzZN1kbIEw+edrYVvLZt7M4PjPaCEDclCrbxPgoOmEum7Ns5pDaMfiEJGDnpf6p7HA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; Received: from CYYPR11MB8430.namprd11.prod.outlook.com (2603:10b6:930:c6::19) by IA1PR11MB7809.namprd11.prod.outlook.com (2603:10b6:208:3f2::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8901.27; Thu, 10 Jul 2025 15:08:49 +0000 Received: from CYYPR11MB8430.namprd11.prod.outlook.com ([fe80::76d2:8036:2c6b:7563]) by CYYPR11MB8430.namprd11.prod.outlook.com ([fe80::76d2:8036:2c6b:7563%5]) with mapi id 15.20.8901.024; Thu, 10 Jul 2025 15:08:49 +0000 From: Rodrigo Vivi To: , , CC: , , , , Badal Nilawar , Rodrigo Vivi Subject: [PATCH 4/9] drm/xe/xe_late_bind_fw: Initialize late binding firmware Date: Thu, 10 Jul 2025 11:08:35 -0400 Message-ID: <20250710150831.3018674-15-rodrigo.vivi@intel.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250710150831.3018674-11-rodrigo.vivi@intel.com> References: <20250710150831.3018674-11-rodrigo.vivi@intel.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BY5PR04CA0007.namprd04.prod.outlook.com (2603:10b6:a03:1d0::17) To CYYPR11MB8430.namprd11.prod.outlook.com (2603:10b6:930:c6::19) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CYYPR11MB8430:EE_|IA1PR11MB7809:EE_ X-MS-Office365-Filtering-Correlation-Id: 4b38399f-9a27-41a1-339e-08ddbfc3aca4 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?FwRU80GSIAWf81hmrEWXlHzLf3W6FM4jzg3EqcsjY+twBp/JfYHZVv/kBBi+?= =?us-ascii?Q?Hm2Y1GSnstYNsPeRNKq1vkWhVzDNo7aFnHTuhndYvm51VQxZbnmQpr9d2xfd?= =?us-ascii?Q?dUrelDbVDEFc4yERbo2G4X8hzcLcGsc63PBVXYgGNEnAHLcgY9PMfGp/mi3V?= =?us-ascii?Q?ielq7YiWk6xU4OlqBB+jDgRmal9JdjiOgI2N3KMynZJuPN9agmQZiX/rjq7O?= =?us-ascii?Q?aDFYNSTqzUl7SZhf/eM7oPqWVPmVyvx3Ipy+bwjeNLph4SY3t70LbxHaoGVT?= =?us-ascii?Q?4mG1tBObnKkyC7hnISjYXGmY6skqEdY4uzcnKd8M8EIefH3nZKpvmve1Ybrf?= =?us-ascii?Q?ay0DrSoHs4OoA158KEN3vcbx4e81V2dnjnYKEV4x/CWn2+lR51IGTw522jtm?= =?us-ascii?Q?MJKS1qTT2y1YL0dch/np44Fgmsn+ELxnH49ImDv3ihA4LEFTUrw72ZIRB/Fs?= =?us-ascii?Q?6ORYrnSV/nU/WULP9wSSWex2kCvrWz40xg+sY3oxlzwyDv6AWyFxG1vi3JD2?= =?us-ascii?Q?Y9KEtW803qaVak9bPP8QgIdVj7iDS64+ltfbIKCbfUM5Too5stlejQn8l/FW?= =?us-ascii?Q?rfBMcWJ451gQcHH3uzL5oOo549PAr22tcZYIcWTeQrtoJK1bOUuJKvSZlzkS?= =?us-ascii?Q?54/PGUbCj4B8KXyN1eJ69yj711AdE50DN4Ph+dPbdWM2zw8lYf5hAAEN6zZb?= =?us-ascii?Q?F2Rnr0hUHgFy+XDT6Sv67u9+DMu2tsaR+ie+6ec2xPLKPmu9YFa8tmi8PBE6?= =?us-ascii?Q?9Az3adZ8VGEcgtOiLj1j9CFwk/W3CJDGjkAvzCxyUAmILN4Pa0W+DGmEccNM?= =?us-ascii?Q?8f7nb9m//NAmCAr+sYK6IiSsPTwGcPO/Zdi3z5Onl0JhmzOpfNJlO46NsdXs?= =?us-ascii?Q?6Z0GrQ5gWujW1jdEM0BdnI8Td/dqRGc4qGSXYNYNCFlR/IPMU2Bb31wgjKtp?= =?us-ascii?Q?GS18NoyVaezPURcHotc1OMUA8UVj6NcUfnzBa3PDImvG6AVvGfkvJjoAflWZ?= =?us-ascii?Q?PD3At/76HKoPB9efgTDPi2bMQME/yMRMMqrtHbeC1bKRLEFoIJHpnxBzFzHd?= =?us-ascii?Q?2ffgXI72yMpQRa6B+1PGph/3tiEaoaJ3oL6cGKVe/izz3TeZoZ491t6XpsN7?= =?us-ascii?Q?B82iDopCQY9++89rzDXgWyKxHgyiq79TVaWfUGmxCjO39p/i7trWRfMsLvVO?= =?us-ascii?Q?jamkHjwytk8Ag8HMCrRg1Xpq9sN/4QejcSzlR66joL/bbPNGpweKTA6A/TUy?= =?us-ascii?Q?Mh45jbXjq9G6JGHg3MWB0ZIpyJeuE2Gjv3UTaVxrcG2c3BuunCZ9WJjYhPCv?= =?us-ascii?Q?srhQtmp+qIm8eUvWvxApdov1OYCUWKAyTRk9BEUBexWRlYmP/K8VSn1SBLHk?= =?us-ascii?Q?TJu+7m7fNGn7HWlrLewkGGdqlFsF5lLK/6sXsMyHApbMN1zvnbhIrPgCIFj8?= =?us-ascii?Q?C7QwhkrjVt4=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CYYPR11MB8430.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?96vMbT6dpbHQecARqtDgyoWajwkNUaWVFwaKBVqXmt5vy8OT/a6dyRJ/9U6G?= =?us-ascii?Q?n0l4jFVcwdqTT1ylOltWpv9JkdN3PCuVyGVv/XoWulvxPbWtp8Z2TBi1wBdY?= =?us-ascii?Q?8GPe+octZsl8psIIuVGcOtgnmn86RLk7KrHSarjiRKsRLwJWWb3C0qQV9yBb?= =?us-ascii?Q?+ewBSx67Pzorx68XD4NdIVLZhnLA57wlPPW4uc/sRUCPEy9rPcFNVtoYZGZi?= =?us-ascii?Q?/9UE6mKCo0Sxmk1zvhUR9xFnQCP/QmWv11LcX57GLgNm06lBIC924ejPSi+n?= =?us-ascii?Q?O7t7I5fMQ0YTRt/QUi5RTdv1aKpd9ldipMpKSwc6Q/ofDpiUm/i13zZg0fY2?= =?us-ascii?Q?U0vRadxOisWQb09Hl4U9zgiGx4AJvwIoU5irfs7CP10AMBm92Owr5w1nQ7Z5?= =?us-ascii?Q?SCvL8vY7C5kO/FAJj31Vb0ynudlxsNSypeRt/t4dRDo0AK8Ca4JszNxXO5Uk?= =?us-ascii?Q?MAKtbr23FI/Ji29hrLU9GAD7nyBjzHJ/nsmPBCe9I9+kREkI3xiswOFmPV73?= =?us-ascii?Q?xqG5TJcf42Pg058+eqmK/vzddadxXXQPaKEDbI+3U8JSaPVNZ5jDnfIfCUS3?= =?us-ascii?Q?8r7oQAQmPTMxoGsu8TEW2zpxGI6HJCGQTbjPXNLl5OA0mTCyklZGKpZJabEC?= =?us-ascii?Q?V5m+bKADbaj25OxUgq5r7RxAiVBIJRfIni6oVFYBfz0ofCB7ysRivNLcqFtA?= =?us-ascii?Q?ChhVt1wzY95kTmywqIQFkdLazF9YeUCJClPB0uYie9QZcBFUwvZczMujOQ2N?= =?us-ascii?Q?MT9A9C8d2haMFlS68AStcp/X1ChudQALRo+6mem5cePjQ34qwjUHS5BWtMqN?= =?us-ascii?Q?N0BCp8TXFzRnknv/C/CwdqWmPb9JEGD8KZmq0t9qi/fUZMLjtUC94GxI4vNv?= =?us-ascii?Q?jZYzW56qW9c/cxCijXiLV7o8tFLvilqf9Qit09jfwGOvQRQYnkkfv+I7cRus?= =?us-ascii?Q?5SKBN9KXlXhFnj7L/b+NPwtZWWBDCTXWqcbSVDaqFjozxTalu6LPdmtHsPky?= =?us-ascii?Q?XnY0uz8LwvJoUfCgsUw8KrNbcIczuuQZUZ+7dPqNJOEisd2K5xwe24WIIj9t?= =?us-ascii?Q?hmqKSHGTlGOkvEnoNXel8XDpMfxhkY71u+CHNUUupAipYh17kHt4quK44xen?= =?us-ascii?Q?8md5YyIDHJ6/JE5wgssjPBwapa5ZsZpa5TTxIxDiYxtHGn4IsfVhDNXFZ9Hs?= =?us-ascii?Q?Ow9ri7br9qqJY+WUnW9ZGfnyDe6D7NZZM/cw+zI1nnduqL2QCigXrZjTKYad?= =?us-ascii?Q?L7mZfWOFaO+d0dcx1uJGjE6+TJXg73BiCOPZMIqHAllR5uGWG242RvOH1NS0?= =?us-ascii?Q?e//dpZinOx8twCbF8amfdauqCQRAkMk/583xvq23JhFDOmfNup3NsjZu97ke?= =?us-ascii?Q?/scvy3bnia/BU6XkY5fdOL3xACBwoaitYrH9T0oK53hKBgeoSis4aY1VoGBh?= =?us-ascii?Q?SNKlr5LJQAYWlg8mghSu0m0s3ure7RogEoCSjJCWEQt+j/xeAtOP6vNjA8F4?= =?us-ascii?Q?pzq1fO74t6gB6OGK39xh+3W/xHrrcSAoQZnzJmwweXw4N6kUrsN1RpyoXkvx?= =?us-ascii?Q?fG2hs/IFGKS5NeMe8dQIqs0DGW+Wi3twya6qZLtmxNHYbZ1rJU7KzHV3tZvX?= =?us-ascii?Q?/Q=3D=3D?= X-MS-Exchange-CrossTenant-Network-Message-Id: 4b38399f-9a27-41a1-339e-08ddbfc3aca4 X-MS-Exchange-CrossTenant-AuthSource: CYYPR11MB8430.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Jul 2025 15:08:49.4589 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: UIplF9T9zwh8dUn+lqUfClIldXfHCiVW/8wZjYsHFVy90NVJOrOED0wcEfMPJq3GZgOGtY7+fIe91NLDy/9AKw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA1PR11MB7809 X-OriginatorOrg: intel.com Content-Type: text/plain; charset="utf-8" From: Badal Nilawar Search for late binding firmware binaries and populate the meta data of firmware structures. v2 (Daniele): - drm_err if firmware size is more than max pay load size - s/request_firmware/firmware_request_nowarn/ as firmware will not be available for all possible cards v3 (Daniele): - init firmware from within xe_late_bind_init, propagate error - switch late_bind_fw to array to handle multiple firmware types v4 (Daniele): - Alloc payload dynamically, fix nits v6 (Daniele) - %s/MAX_PAYLOAD_SIZE/XE_LB_MAX_PAYLOAD_SIZE/ Signed-off-by: Badal Nilawar Reviewed-by: Daniele Ceraolo Spurio Signed-off-by: Rodrigo Vivi --- drivers/gpu/drm/xe/xe_late_bind_fw.c | 100 ++++++++++++++++++++- drivers/gpu/drm/xe/xe_late_bind_fw_types.h | 30 +++++++ 2 files changed, 129 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/xe/xe_late_bind_fw.c b/drivers/gpu/drm/xe/xe_l= ate_bind_fw.c index 152f3e58de94..008be9b12fd9 100644 --- a/drivers/gpu/drm/xe/xe_late_bind_fw.c +++ b/drivers/gpu/drm/xe/xe_late_bind_fw.c @@ -5,6 +5,7 @@ =20 #include #include +#include =20 #include #include @@ -13,6 +14,16 @@ =20 #include "xe_device.h" #include "xe_late_bind_fw.h" +#include "xe_pcode.h" +#include "xe_pcode_api.h" + +static const u32 fw_id_to_type[] =3D { + [XE_LB_FW_FAN_CONTROL] =3D INTEL_LB_TYPE_FAN_CONTROL, + }; + +static const char * const fw_id_to_name[] =3D { + [XE_LB_FW_FAN_CONTROL] =3D "fan_control", + }; =20 static struct xe_device * late_bind_to_xe(struct xe_late_bind *late_bind) @@ -20,6 +31,89 @@ late_bind_to_xe(struct xe_late_bind *late_bind) return container_of(late_bind, struct xe_device, late_bind); } =20 +static int xe_late_bind_fw_num_fans(struct xe_late_bind *late_bind) +{ + struct xe_device *xe =3D late_bind_to_xe(late_bind); + struct xe_tile *root_tile =3D xe_device_get_root_tile(xe); + u32 uval; + + if (!xe_pcode_read(root_tile, + PCODE_MBOX(FAN_SPEED_CONTROL, FSC_READ_NUM_FANS, 0), &uval, NULL)) + return uval; + else + return 0; +} + +static int __xe_late_bind_fw_init(struct xe_late_bind *late_bind, u32 fw_i= d) +{ + struct xe_device *xe =3D late_bind_to_xe(late_bind); + struct pci_dev *pdev =3D to_pci_dev(xe->drm.dev); + struct xe_late_bind_fw *lb_fw; + const struct firmware *fw; + u32 num_fans; + int ret; + + if (fw_id >=3D XE_LB_FW_MAX_ID) + return -EINVAL; + + lb_fw =3D &late_bind->late_bind_fw[fw_id]; + + lb_fw->id =3D fw_id; + lb_fw->type =3D fw_id_to_type[lb_fw->id]; + lb_fw->flags &=3D ~INTEL_LB_FLAGS_IS_PERSISTENT; + + if (lb_fw->type =3D=3D INTEL_LB_TYPE_FAN_CONTROL) { + num_fans =3D xe_late_bind_fw_num_fans(late_bind); + drm_dbg(&xe->drm, "Number of Fans: %d\n", num_fans); + if (!num_fans) + return 0; + } + + snprintf(lb_fw->blob_path, sizeof(lb_fw->blob_path), "xe/%s_8086_%04x_%04= x_%04x.bin", + fw_id_to_name[lb_fw->id], pdev->device, + pdev->subsystem_vendor, pdev->subsystem_device); + + drm_dbg(&xe->drm, "Request late binding firmware %s\n", lb_fw->blob_path); + ret =3D firmware_request_nowarn(&fw, lb_fw->blob_path, xe->drm.dev); + if (ret) { + drm_dbg(&xe->drm, "%s late binding fw not available for current device", + fw_id_to_name[lb_fw->id]); + return 0; + } + + if (fw->size > XE_LB_MAX_PAYLOAD_SIZE) { + drm_err(&xe->drm, "Firmware %s size %zu is larger than max pay load size= %u\n", + lb_fw->blob_path, fw->size, XE_LB_MAX_PAYLOAD_SIZE); + release_firmware(fw); + return -ENODATA; + } + + lb_fw->payload_size =3D fw->size; + lb_fw->payload =3D drmm_kzalloc(&xe->drm, lb_fw->payload_size, GFP_KERNEL= ); + if (!lb_fw->payload) { + release_firmware(fw); + return -ENOMEM; + } + + memcpy((void *)lb_fw->payload, fw->data, lb_fw->payload_size); + release_firmware(fw); + + return 0; +} + +static int xe_late_bind_fw_init(struct xe_late_bind *late_bind) +{ + int ret; + int fw_id; + + for (fw_id =3D 0; fw_id < XE_LB_FW_MAX_ID; fw_id++) { + ret =3D __xe_late_bind_fw_init(late_bind, fw_id); + if (ret) + return ret; + } + return 0; +} + static int xe_late_bind_component_bind(struct device *xe_kdev, struct device *mei_kdev, void *data) { @@ -80,5 +174,9 @@ int xe_late_bind_init(struct xe_late_bind *late_bind) return err; } =20 - return devm_add_action_or_reset(xe->drm.dev, xe_late_bind_remove, late_bi= nd); + err =3D devm_add_action_or_reset(xe->drm.dev, xe_late_bind_remove, late_b= ind); + if (err) + return err; + + return xe_late_bind_fw_init(late_bind); } diff --git a/drivers/gpu/drm/xe/xe_late_bind_fw_types.h b/drivers/gpu/drm/x= e/xe_late_bind_fw_types.h index f79e5aefed94..c4a8042f2600 100644 --- a/drivers/gpu/drm/xe/xe_late_bind_fw_types.h +++ b/drivers/gpu/drm/xe/xe_late_bind_fw_types.h @@ -10,6 +10,34 @@ #include #include =20 +#define XE_LB_MAX_PAYLOAD_SIZE SZ_4K + +/** + * xe_late_bind_fw_id - enum to determine late binding fw index + */ +enum xe_late_bind_fw_id { + XE_LB_FW_FAN_CONTROL =3D 0, + XE_LB_FW_MAX_ID +}; + +/** + * struct xe_late_bind_fw + */ +struct xe_late_bind_fw { + /** @id: firmware index */ + u32 id; + /** @blob_path: firmware binary path */ + char blob_path[PATH_MAX]; + /** @type: firmware type */ + u32 type; + /** @flags: firmware flags */ + u32 flags; + /** @payload: to store the late binding blob */ + const u8 *payload; + /** @payload_size: late binding blob payload_size */ + size_t payload_size; +}; + /** * struct xe_late_bind_component - Late Binding services component * @mei_dev: device that provide Late Binding service. @@ -28,6 +56,8 @@ struct xe_late_bind_component { struct xe_late_bind { /** @component: struct for communication with mei component */ struct xe_late_bind_component component; + /** @late_bind_fw: late binding firmware array */ + struct xe_late_bind_fw late_bind_fw[XE_LB_FW_MAX_ID]; }; =20 #endif --=20 2.49.0 From nobody Tue Oct 7 09:58:51 2025 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.18]) (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 BCEBE274FC8 for ; Thu, 10 Jul 2025 15:08:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=198.175.65.18 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752160139; cv=fail; b=MQ8uLy3K/0hjxN9qsCRAdvtQizJSsTHCIFbxSaCn3dJ9DRPbEEWs+vn0Irqb9DCQVoTBc0IQuy3aCChimEZcuyzYkLD1/1hkezvdRJWjzj/Itej21sIFeLHzhj+asVfGAb6Ng8wUKdIWPGFVN8WM5bHJNzkHp0V+//7AgXQyRC0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752160139; c=relaxed/simple; bh=IDHCw2Jl37cRzeBjG0QxyIQSJhm5h8XZmib3QM7KAv8=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=hy8u/UaG/1DHUhdA4+WakgZZEY2BFs/WmZLG+R7zSInXBDgOmImB5vRd1JxzMRTZoRxJmp9FMXOognG1B0Pu8Lv5dg/bOKEhR3uoV4vYdvmI4k87xaXNEK4wkFNdBvaEI5lr8ADMCmCYJG73rggM43G99SgovOBhq3ESy6y+1YY= ARC-Authentication-Results: i=2; 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=hCmk3e8m; arc=fail smtp.client-ip=198.175.65.18 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="hCmk3e8m" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1752160138; x=1783696138; h=from:to:cc:subject:date:message-id:in-reply-to: references:content-transfer-encoding:mime-version; bh=IDHCw2Jl37cRzeBjG0QxyIQSJhm5h8XZmib3QM7KAv8=; b=hCmk3e8mT+UxxDXoCVZQ+c7z/w2bEKdwHlvZt/AO+SmDmLrxYQ2JSuhT wntWgP0X4meI5lmWJoAY44giWQsA/hTIR806utfVDdZ+L5L9HHh/TxBV5 52vqM5WnmQdn3V7YVE32L/0ltgHhLkUald6Xjfyux0rJ7k+nNmsg+OUwm j/YgNsxqTUxZVE7xhCSw/8ybFg/EclOXQdYUlL22UxarvW1DAiXhbXrDx uQcvd6BbyssVOGQgtkRbgTQHNz7kjmKM6PpU8PAy28RGVPj1FW0NC1uJl /YbT1UKJKk1kbzTJVPZ+tnTyOh137/9N5kK3XFOYv+aakv2vG3dCM/czq A==; X-CSE-ConnectionGUID: CsUr2CIOQJ+28AWPKLUnYQ== X-CSE-MsgGUID: XnFM5QMaQumnilQOHSVMZg== X-IronPort-AV: E=McAfee;i="6800,10657,11490"; a="54572978" X-IronPort-AV: E=Sophos;i="6.16,300,1744095600"; d="scan'208";a="54572978" Received: from orviesa002.jf.intel.com ([10.64.159.142]) by orvoesa110.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Jul 2025 08:08:57 -0700 X-CSE-ConnectionGUID: 5+x/Mb1tRoW+kpWiqOgKjg== X-CSE-MsgGUID: CfuFssVRReqMg/FQukHYag== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.16,300,1744095600"; d="scan'208";a="187119243" Received: from orsmsx903.amr.corp.intel.com ([10.22.229.25]) by orviesa002.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Jul 2025 08:08:57 -0700 Received: from ORSMSX903.amr.corp.intel.com (10.22.229.25) by ORSMSX903.amr.corp.intel.com (10.22.229.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.25; Thu, 10 Jul 2025 08:08:56 -0700 Received: from ORSEDG901.ED.cps.intel.com (10.7.248.11) by ORSMSX903.amr.corp.intel.com (10.22.229.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.25 via Frontend Transport; Thu, 10 Jul 2025 08:08:56 -0700 Received: from NAM10-BN7-obe.outbound.protection.outlook.com (40.107.92.80) by edgegateway.intel.com (134.134.137.111) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.25; Thu, 10 Jul 2025 08:08:54 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=SrV/BixFJwHOccuYJx8otynuxn2vUofCo+qv8G4NlbhZ2yZh1W7+1yQVKtjJlskJpnLrGtKOPAKj2u94UxWU20BV4Qxjo8khOyUF9ZcKuvG703FplBDTMn/JmsoNoyYscRPP4PQNRL/FkgvGRiNS/8m44wWOmFNKGoEnjUlZwS4h5MOgjXwOutVEopFeNgKkLLcOoMfT5Vya/UD5wNPojiiBko3lF4MFQfdSdJYoHJ9644GiZpqerjItbRvYVZsGIEOcTAYDvTIoiJ9b6x4JHJGh0UGtIAaJ0KVkEdE739T1mn+uYMUD5Z8eO6BhJ024ALNUcEzcL9JswuQ5l4T03A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=pUeK+Y9oNc6dsGRW+3q2zYEbSVfraJgRT1MVJ2F4/uE=; b=IIJFIuvTROxE2IE1MYkYf2M3vcn6MPt0FJuGbURaAkKD2gnqP0+E9sSd9l3aPEff04lvcmDuKwwTrMPJ2j306vMvqba8bAWacOMxYFJbpagZb6jupI3smu1FQ8L8fRf5R/EpDJ4Zcoq8P+JrEdYFXOW3PD+pgZkqG3v1QBjUro+NL4pibrI96f56zoZpkziM1Pa8p4gVmIRDsNF7+0RamE27BK3dNcfZdNCRPJ6MVh99KQaVn9WIdVVdQnQTgUTEy3nSRiPi6QjWWBSa/DCgBzhmWP5jVSd0xcNLnRLdiK2q/YzGDzeZ11EtG7jFFWcYFplVScXLaukyQjSFkYaK3w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; Received: from CYYPR11MB8430.namprd11.prod.outlook.com (2603:10b6:930:c6::19) by IA1PR11MB7809.namprd11.prod.outlook.com (2603:10b6:208:3f2::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8901.27; Thu, 10 Jul 2025 15:08:52 +0000 Received: from CYYPR11MB8430.namprd11.prod.outlook.com ([fe80::76d2:8036:2c6b:7563]) by CYYPR11MB8430.namprd11.prod.outlook.com ([fe80::76d2:8036:2c6b:7563%5]) with mapi id 15.20.8901.024; Thu, 10 Jul 2025 15:08:51 +0000 From: Rodrigo Vivi To: , , CC: , , , , Badal Nilawar , Rodrigo Vivi Subject: [PATCH 5/9] drm/xe/xe_late_bind_fw: Load late binding firmware Date: Thu, 10 Jul 2025 11:08:36 -0400 Message-ID: <20250710150831.3018674-16-rodrigo.vivi@intel.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250710150831.3018674-11-rodrigo.vivi@intel.com> References: <20250710150831.3018674-11-rodrigo.vivi@intel.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SJ0PR05CA0030.namprd05.prod.outlook.com (2603:10b6:a03:33b::35) To CYYPR11MB8430.namprd11.prod.outlook.com (2603:10b6:930:c6::19) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CYYPR11MB8430:EE_|IA1PR11MB7809:EE_ X-MS-Office365-Filtering-Correlation-Id: 1f327ea8-5329-45f7-7ce5-08ddbfc3ae1b X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?q6RY4IlCQ3ewVoNoUt6FjueVIHKH6LjZryF42zkjLAUFBmUWKQLuS/0CApB9?= =?us-ascii?Q?S3hcp2tMMekUFFay1cOawkxwBKhl4k/hZ7PTjX70AkS3+DCmXwMA6P0stCll?= =?us-ascii?Q?u+Ek9hZDqr64VlzI5RRk72lmPMHzWeL21vr8j9oKA1Paoq7kTso8JrkKbkay?= =?us-ascii?Q?IOMd+vqJ67wUJnMUb48kWh2DvEoLF6K3e75UI/jW36bWo9ywBuSPGDKbv/TY?= =?us-ascii?Q?jcNiviXJMRvarNoh6zgPNcMN4PwAsZ8ATavmOES6MLwK+l6GM2wK5UAQxvMH?= =?us-ascii?Q?8CE8cOedmHEvhajujKY2c78sBWBNI0/uR4/IKjKChJ19HRPIS0l7HbS7Q4TM?= =?us-ascii?Q?FnCN6+LCg1LwzOvawXHjEgpwzBZpQoIIWg6nQFLqVCynaha3486Yv/L2dfGz?= =?us-ascii?Q?wVtgf/eOVsQYxbwkYEQVfCh2FdpMCm0/XQCZgH7ghQ24oHXQOcSrV2w3V3vl?= =?us-ascii?Q?jku9kuMFnef7h4kDotVj9uOrx10HmI6U9dZK9in1/WEigL5T9VS5NBvfWrJt?= =?us-ascii?Q?aLORsOVf552qCEgGoQsT1NYWVLrXXYlZwYIRw8kHcAy9+eAt219C24En6w2H?= =?us-ascii?Q?aHV7A2x8vgVhKNqrfxa8+1Z0zuClH/8+RPvlbuN5QB/f24ZJ/brB8uyB2KEx?= =?us-ascii?Q?Hg+ykYbiTN/oXOKN6UKLLGqhtjITL5gdw0ycxINnZduIS11AHILvYJc9uu3t?= =?us-ascii?Q?ltDPksSEzJrLvvnI69ZzQ7RR7uiY9JCWchtbkVBHAu203roUk4+yErA6yJXw?= =?us-ascii?Q?I01vp88gBFfz15SVV74Z03occmPgUAGWrVuFqFRt2pddwZAv+lDkWdOV77+H?= =?us-ascii?Q?X40A+So+Pgth9/nYun5rKSVUlNjXSh+o/S/duk5Af8Xg3VW/AiLvcLBZBEfR?= =?us-ascii?Q?mUTrsdqbl2hCfr8Al9UGiv6xuYIiSuI0Vz6fPO8WgfEpsUToOsgapv2SFm3+?= =?us-ascii?Q?U024VJrx0jn1lgiB2lvLWrdQmhvfyMkNZ/rCTqnF4IlLYY6A5tnZozQanrbZ?= =?us-ascii?Q?13Am9sBQCiPM+oHjJTu+mJsmPHPKpAR2nFTHi1ubGMdxC14sN01T1NEuqdQZ?= =?us-ascii?Q?hJrxTZ3NShscaRw/wxwaG87cMO4mFn5xPQXP75Zfi8FiiT9ezmG73ZmWPrmX?= =?us-ascii?Q?GwpqvCF9TWQ1mLObv9S6tpJoUcI/34g3Qv9bOCPKjPNjqQBlrzrnEXFjIQ8L?= =?us-ascii?Q?K6t/zxaKw8MI/NGFuNm/puRfIB//0QITyRIbkCI1LUH+k0aYwsD4dRnZtsJK?= =?us-ascii?Q?z0R9CRFVzF9J25CZUCgOEfTfpQhaBWbtjbuoqtaKddFCMsHWS19leuCiwuGy?= =?us-ascii?Q?YhFxf5jF2aulpgVeyytS+2RSUICNf1FU6tdZ/YQtngRzFn2Hw1s6FCOpxUek?= =?us-ascii?Q?g6/cmGKjmU0wq7c9PrH+JXZdGPmF7fFiOcRobLwYZvXduGSyCA=3D=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CYYPR11MB8430.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?tVBau5ngy1aaMhllwwYs46LfXad3GF0/HAUfUbnPirjh5nyRBWrfuhfsyis1?= =?us-ascii?Q?dVmPSxjL/x60TIRAcC4X7xBUFXij7ThmKSYYhxqVmpG3TptF/Z3IGlyl2RbD?= =?us-ascii?Q?74FqlCWSshfCM/d/qb69biDYf+5OhrG8YphR2XUNNaJ/G2xDAeRvrxNvewkC?= =?us-ascii?Q?g4BR7Z7LhvxuMAd0JNpMz/Y+44Z19Rr9bl5i75J6liajdUFyM0gamxRdxQKg?= =?us-ascii?Q?U/sIT4So7K7UQB2SGWlnx5tTnm34wicgNpajObwnqQQjfLgaPaC/ryPxfPv0?= =?us-ascii?Q?HjgHTUIkSlzh7h/cNteB9oipLA56JyxtjKn48i4pKca7/pzwJIkMz/WgPu8Y?= =?us-ascii?Q?kCDLIPaQPsP9O++cRPo61+WdJWUDWnRUqefnnttIn8ico2fZupa8++S051cw?= =?us-ascii?Q?iDuZ7zrFM6CfJFvVt1OALZDZwRVQx/8BVKZlBJqpC7eCni5ncrgSMdkePEa2?= =?us-ascii?Q?6q3TARCUYH2zgCLhk6O+rzoA9lrSx1dQ4fjScRivi4iVPrm48K3qWvo/YQDd?= =?us-ascii?Q?jBHjTTOcrE6x13Cie+6zRAS9pgqmrsrNkLS9wmxT4mohEoBfl9L1HKerf4un?= =?us-ascii?Q?mxpyOjFDQeWuA7r2rhujYIiNbs95OzQEZWWHBSBVo2YIPc8Lv8zo0eB7J77Y?= =?us-ascii?Q?lowHUkTfc8QEp5C2jyMMvc1IVQR9zznJeprM2UvhL2h7gbximKQwN6LbS3J9?= =?us-ascii?Q?I/BK6ELtYvnVmLqxLIe9MF+cRs/zvpgNmGoOrJthxvb2AZgio/fI8Oe0kujD?= =?us-ascii?Q?y+G8sAZDj4lLYQfSlbTqD7nKE8fsywSZ0ZQ+PsFW/MhvBcmTLxhzGsiBmfGw?= =?us-ascii?Q?/+r3BidwdG1BAzHfR8E+2H3qIL40TpVvI3QIxImA4zfM/ELj2wQiQo8+y3YJ?= =?us-ascii?Q?htRz0k+WlqvCYicBUbOBQpUnmAxXTucXIzedboptGsckpWAkVaQpjErp0lls?= =?us-ascii?Q?NBZQEJ503ah6/o53EL/Pola4S59gY+/ywZazEeKN3xBuBwNsLAz5gTbVV0Ym?= =?us-ascii?Q?gX8Awls6wL6WKOXcX6MqrsJfeYViPGDsJjFNWPF66Erf0uIK9TS5N860cdY9?= =?us-ascii?Q?ZiXZLyBugCI/jO+7GHIdgVBlGcUwIoBBIKRfMoo02ABIh1bAmboNR5bEQE6h?= =?us-ascii?Q?4QQSu4UWYUejB89dDxgkQVFx0X9KRANOiD8H2bQsiGqeKsHyKMub9T531otW?= =?us-ascii?Q?BuWffue2aEbEYbMhkNE00I0DSiPEiO1Kt+R/mlYEKdISyeiiwcCcMMoblLlq?= =?us-ascii?Q?XYug+KEpKuTbS8o4uv2Vbi/54cjV8DeyIweuVddg6cJE8qTUzQNfWa5Dch2N?= =?us-ascii?Q?/7y6Qpm15lOThF3QPPwUNtimZRSyWFytzhvnUPOhxHVssqxlVau1VItYV2X1?= =?us-ascii?Q?Pla5vV2GTf/Kg5YOIMnFbkRlJqJ1j6LvpO+r+kCh2dlzpBYqyHNAui3AKYGR?= =?us-ascii?Q?XCT+F+R7hjbf3Yok2HVsGYdCUSKYm+sxsH4m6AT/rMw7OqFurCKStS4+vWQo?= =?us-ascii?Q?Ib7JrUmkh4zefEiqMVlzsbEtKmbYUNOPkW1DYVulI7r8rp1sCFdL5bYjTHeC?= =?us-ascii?Q?nkD6NoVe2NwSxjx+oCjgdhBapAf4gdCmgl3fybHLTrXOoXlLEpnZ+baxwqZr?= =?us-ascii?Q?Hw=3D=3D?= X-MS-Exchange-CrossTenant-Network-Message-Id: 1f327ea8-5329-45f7-7ce5-08ddbfc3ae1b X-MS-Exchange-CrossTenant-AuthSource: CYYPR11MB8430.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Jul 2025 15:08:51.9086 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: zhgyFW+KqzcbXxBfSimhoOP3n/ifkMPvLvpalyWp2JdhC/Eji9ZUy/DiovcC2fqi5fSlpg6/z+9+o3sLUxYJDA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA1PR11MB7809 X-OriginatorOrg: intel.com Content-Type: text/plain; charset="utf-8" From: Badal Nilawar Load late binding firmware v2: - s/EAGAIN/EBUSY/ - Flush worker in suspend and driver unload (Daniele) v3: - Use retry interval of 6s, in steps of 200ms, to allow other OS components release MEI CL handle (Sasha) v4: - return -ENODEV if component not added (Daniele) - parse and print status returned by csc v5: - Use payload to check firmware valid (Daniele) - Obtain the RPM reference before scheduling the worker to ensure the device remains awake until the worker completes firmware loading (Rodrigo) v6: - In case of error donot re-attempt fw download (Daniele) v7 (Rodrigo): - Rename of mei structs and callback. Signed-off-by: Badal Nilawar Reviewed-by: Daniele Ceraolo Spurio Signed-off-by: Rodrigo Vivi --- drivers/gpu/drm/xe/xe_late_bind_fw.c | 157 ++++++++++++++++++++- drivers/gpu/drm/xe/xe_late_bind_fw.h | 1 + drivers/gpu/drm/xe/xe_late_bind_fw_types.h | 9 +- 3 files changed, 165 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/xe/xe_late_bind_fw.c b/drivers/gpu/drm/xe/xe_l= ate_bind_fw.c index 008be9b12fd9..85cd42a1ec05 100644 --- a/drivers/gpu/drm/xe/xe_late_bind_fw.c +++ b/drivers/gpu/drm/xe/xe_late_bind_fw.c @@ -16,6 +16,20 @@ #include "xe_late_bind_fw.h" #include "xe_pcode.h" #include "xe_pcode_api.h" +#include "xe_pm.h" + +/* + * The component should load quite quickly in most cases, but it could take + * a bit. Using a very big timeout just to cover the worst case scenario + */ +#define LB_INIT_TIMEOUT_MS 20000 + +/* + * Retry interval set to 6 seconds, in steps of 200 ms, to allow time for + * other OS components to release the MEI CL handle + */ +#define LB_FW_LOAD_RETRY_MAXCOUNT 30 +#define LB_FW_LOAD_RETRY_PAUSE_MS 200 =20 static const u32 fw_id_to_type[] =3D { [XE_LB_FW_FAN_CONTROL] =3D INTEL_LB_TYPE_FAN_CONTROL, @@ -31,6 +45,30 @@ late_bind_to_xe(struct xe_late_bind *late_bind) return container_of(late_bind, struct xe_device, late_bind); } =20 +static const char *xe_late_bind_parse_status(uint32_t status) +{ + switch (status) { + case INTEL_LB_STATUS_SUCCESS: + return "success"; + case INTEL_LB_STATUS_4ID_MISMATCH: + return "4Id Mismatch"; + case INTEL_LB_STATUS_ARB_FAILURE: + return "ARB Failure"; + case INTEL_LB_STATUS_GENERAL_ERROR: + return "General Error"; + case INTEL_LB_STATUS_INVALID_PARAMS: + return "Invalid Params"; + case INTEL_LB_STATUS_INVALID_SIGNATURE: + return "Invalid Signature"; + case INTEL_LB_STATUS_INVALID_PAYLOAD: + return "Invalid Payload"; + case INTEL_LB_STATUS_TIMEOUT: + return "Timeout"; + default: + return "Unknown error"; + } +} + static int xe_late_bind_fw_num_fans(struct xe_late_bind *late_bind) { struct xe_device *xe =3D late_bind_to_xe(late_bind); @@ -44,6 +82,101 @@ static int xe_late_bind_fw_num_fans(struct xe_late_bind= *late_bind) return 0; } =20 +static void xe_late_bind_wait_for_worker_completion(struct xe_late_bind *l= ate_bind) +{ + struct xe_device *xe =3D late_bind_to_xe(late_bind); + struct xe_late_bind_fw *lbfw; + int fw_id; + + for (fw_id =3D 0; fw_id < XE_LB_FW_MAX_ID; fw_id++) { + lbfw =3D &late_bind->late_bind_fw[fw_id]; + if (lbfw->payload && late_bind->wq) { + drm_dbg(&xe->drm, "Flush work: load %s firmware\n", + fw_id_to_name[lbfw->id]); + flush_work(&lbfw->work); + } + } +} + +static void xe_late_bind_work(struct work_struct *work) +{ + struct xe_late_bind_fw *lbfw =3D container_of(work, struct xe_late_bind_f= w, work); + struct xe_late_bind *late_bind =3D container_of(lbfw, struct xe_late_bind, + late_bind_fw[lbfw->id]); + struct xe_device *xe =3D late_bind_to_xe(late_bind); + int retry =3D LB_FW_LOAD_RETRY_MAXCOUNT; + int ret; + int slept; + + xe_device_assert_mem_access(xe); + + /* we can queue this before the component is bound */ + for (slept =3D 0; slept < LB_INIT_TIMEOUT_MS; slept +=3D 100) { + if (late_bind->component.ops) + break; + msleep(100); + } + + if (!late_bind->component.ops) { + drm_err(&xe->drm, "Late bind component not bound\n"); + /* Do not re-attempt fw load */ + drmm_kfree(&xe->drm, (void *)lbfw->payload); + lbfw->payload =3D NULL; + goto out; + } + + drm_dbg(&xe->drm, "Load %s firmware\n", fw_id_to_name[lbfw->id]); + + do { + ret =3D late_bind->component.ops->push_payload(late_bind->component.mei_= dev, + lbfw->type, + lbfw->flags, + lbfw->payload, + lbfw->payload_size); + if (!ret) + break; + msleep(LB_FW_LOAD_RETRY_PAUSE_MS); + } while (--retry && ret =3D=3D -EBUSY); + + if (!ret) { + drm_dbg(&xe->drm, "Load %s firmware successful\n", + fw_id_to_name[lbfw->id]); + goto out; + } + + if (ret > 0) + drm_err(&xe->drm, "Load %s firmware failed with err %d, %s\n", + fw_id_to_name[lbfw->id], ret, xe_late_bind_parse_status(ret)); + else + drm_err(&xe->drm, "Load %s firmware failed with err %d", + fw_id_to_name[lbfw->id], ret); + /* Do not re-attempt fw load */ + drmm_kfree(&xe->drm, (void *)lbfw->payload); + lbfw->payload =3D NULL; + +out: + xe_pm_runtime_put(xe); +} + +int xe_late_bind_fw_load(struct xe_late_bind *late_bind) +{ + struct xe_device *xe =3D late_bind_to_xe(late_bind); + struct xe_late_bind_fw *lbfw; + int fw_id; + + if (!late_bind->component_added) + return -ENODEV; + + for (fw_id =3D 0; fw_id < XE_LB_FW_MAX_ID; fw_id++) { + lbfw =3D &late_bind->late_bind_fw[fw_id]; + if (lbfw->payload) { + xe_pm_runtime_get_noresume(xe); + queue_work(late_bind->wq, &lbfw->work); + } + } + return 0; +} + static int __xe_late_bind_fw_init(struct xe_late_bind *late_bind, u32 fw_i= d) { struct xe_device *xe =3D late_bind_to_xe(late_bind); @@ -97,6 +230,7 @@ static int __xe_late_bind_fw_init(struct xe_late_bind *l= ate_bind, u32 fw_id) =20 memcpy((void *)lb_fw->payload, fw->data, lb_fw->payload_size); release_firmware(fw); + INIT_WORK(&lb_fw->work, xe_late_bind_work); =20 return 0; } @@ -106,11 +240,16 @@ static int xe_late_bind_fw_init(struct xe_late_bind *= late_bind) int ret; int fw_id; =20 + late_bind->wq =3D alloc_ordered_workqueue("late-bind-ordered-wq", 0); + if (!late_bind->wq) + return -ENOMEM; + for (fw_id =3D 0; fw_id < XE_LB_FW_MAX_ID; fw_id++) { ret =3D __xe_late_bind_fw_init(late_bind, fw_id); if (ret) return ret; } + return 0; } =20 @@ -132,6 +271,8 @@ static void xe_late_bind_component_unbind(struct device= *xe_kdev, struct xe_device *xe =3D kdev_to_xe_device(xe_kdev); struct xe_late_bind *late_bind =3D &xe->late_bind; =20 + xe_late_bind_wait_for_worker_completion(late_bind); + late_bind->component.ops =3D NULL; } =20 @@ -145,7 +286,15 @@ static void xe_late_bind_remove(void *arg) struct xe_late_bind *late_bind =3D arg; struct xe_device *xe =3D late_bind_to_xe(late_bind); =20 + xe_late_bind_wait_for_worker_completion(late_bind); + + late_bind->component_added =3D false; + component_del(xe->drm.dev, &xe_late_bind_component_ops); + if (late_bind->wq) { + destroy_workqueue(late_bind->wq); + late_bind->wq =3D NULL; + } } =20 /** @@ -174,9 +323,15 @@ int xe_late_bind_init(struct xe_late_bind *late_bind) return err; } =20 + late_bind->component_added =3D true; + err =3D devm_add_action_or_reset(xe->drm.dev, xe_late_bind_remove, late_b= ind); if (err) return err; =20 - return xe_late_bind_fw_init(late_bind); + err =3D xe_late_bind_fw_init(late_bind); + if (err) + return err; + + return xe_late_bind_fw_load(late_bind); } diff --git a/drivers/gpu/drm/xe/xe_late_bind_fw.h b/drivers/gpu/drm/xe/xe_l= ate_bind_fw.h index 4c73571c3e62..28d56ed2bfdc 100644 --- a/drivers/gpu/drm/xe/xe_late_bind_fw.h +++ b/drivers/gpu/drm/xe/xe_late_bind_fw.h @@ -11,5 +11,6 @@ struct xe_late_bind; =20 int xe_late_bind_init(struct xe_late_bind *late_bind); +int xe_late_bind_fw_load(struct xe_late_bind *late_bind); =20 #endif diff --git a/drivers/gpu/drm/xe/xe_late_bind_fw_types.h b/drivers/gpu/drm/x= e/xe_late_bind_fw_types.h index c4a8042f2600..5c0574aff7b9 100644 --- a/drivers/gpu/drm/xe/xe_late_bind_fw_types.h +++ b/drivers/gpu/drm/xe/xe_late_bind_fw_types.h @@ -9,6 +9,7 @@ #include #include #include +#include =20 #define XE_LB_MAX_PAYLOAD_SIZE SZ_4K =20 @@ -36,6 +37,8 @@ struct xe_late_bind_fw { const u8 *payload; /** @payload_size: late binding blob payload_size */ size_t payload_size; + /** @work: worker to upload latebind blob */ + struct work_struct work; }; =20 /** @@ -47,7 +50,7 @@ struct xe_late_bind_fw { */ struct xe_late_bind_component { struct device *mei_dev; - const struct late_bind_component_ops *ops; + const struct intel_lb_component_ops *ops; }; =20 /** @@ -58,6 +61,10 @@ struct xe_late_bind { struct xe_late_bind_component component; /** @late_bind_fw: late binding firmware array */ struct xe_late_bind_fw late_bind_fw[XE_LB_FW_MAX_ID]; + /** @wq: workqueue to submit request to download late bind blob */ + struct workqueue_struct *wq; + /** @component_added: whether the component has been added */ + bool component_added; }; =20 #endif --=20 2.49.0 From nobody Tue Oct 7 09:58:51 2025 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.19]) (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 49103274FD7 for ; Thu, 10 Jul 2025 15:08:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=198.175.65.19 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752160142; cv=fail; b=NN8lxjDSF6VN4nUxrhMYU0Kx8TEzDC1Cj4jbadKL44STrS+mJU5NNBTBEo4Yzxxt3qN5tUeybwd8ev/TFI+TIRlKeCGcDh0Utc2jNkqGiPuY06ub+EKMktXYQjGuVUMnPe+uqeq8AbUeU5bH3HQ0SuoAnWkFzGGX+WnGiA0ILX0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752160142; c=relaxed/simple; bh=6d0asqTU2l+T1oEVvPkuupv3vFUSwDhi0vxX8jHfLIA=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=SBNPRz/CzZH53OSndv8Q/mBcEWi4reTWkfAljJ3WgtQJCZW2MjO+ojYqtPQC7GERX2o+sWnWWlk1J1x2ae4e63yx9zWm1KvXd1yQxA5IaElTGBEhmXObE5HvlCuOx7e16avDuMJ1xBpbmPGFXuCqVzqCY09N01ZDgkeHtCEh/Mk= ARC-Authentication-Results: i=2; 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=a52qqiDg; arc=fail smtp.client-ip=198.175.65.19 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="a52qqiDg" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1752160140; x=1783696140; h=from:to:cc:subject:date:message-id:in-reply-to: references:content-transfer-encoding:mime-version; bh=6d0asqTU2l+T1oEVvPkuupv3vFUSwDhi0vxX8jHfLIA=; b=a52qqiDglYbHbAHQ9GtLgdzxD+4QiajKsiu4muabsxcJvymxUKSS+Nlj pQXImBXyJ9CdrILD3/gf0O2P7TTFdaQJgAvmVDi+xO6822aPJGHmGOK6e rVc33YBVUYS4Yi/MR/TtAMpUOwCSK7pmrPhhJ0wqbUDqkyZaq7/KJM6GB euOkzV2xq3SAcM6Yzg239J0btwElNZamUc3WaLs/lAB8AnLjIb9S9gFk3 6Y0OFPyVn8WFsz3yimLyVEbyjFPfm7QcUYqR92dmp+xPoUDtuKjRG5kF/ Jlyj4UKyCJtlaWrQinGcuW/zsq8Ii4Nk310KLsEGrGZp01tlq6xqURmkd g==; X-CSE-ConnectionGUID: /GfatgpFTp6Woj90+/ELmQ== X-CSE-MsgGUID: Meq1rrzgQn2Ga1pRVidNEQ== X-IronPort-AV: E=McAfee;i="6800,10657,11490"; a="54296577" X-IronPort-AV: E=Sophos;i="6.16,300,1744095600"; d="scan'208";a="54296577" Received: from orviesa008.jf.intel.com ([10.64.159.148]) by orvoesa111.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Jul 2025 08:08:59 -0700 X-CSE-ConnectionGUID: zEzN1gHDQ7GM5bj2ET0cwA== X-CSE-MsgGUID: mQIF8iYHRQGakPy81JNV8w== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.16,300,1744095600"; d="scan'208";a="156600191" Received: from orsmsx902.amr.corp.intel.com ([10.22.229.24]) by orviesa008.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Jul 2025 08:09:00 -0700 Received: from ORSMSX902.amr.corp.intel.com (10.22.229.24) by ORSMSX902.amr.corp.intel.com (10.22.229.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.25; Thu, 10 Jul 2025 08:08:58 -0700 Received: from ORSEDG901.ED.cps.intel.com (10.7.248.11) by ORSMSX902.amr.corp.intel.com (10.22.229.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.25 via Frontend Transport; Thu, 10 Jul 2025 08:08:58 -0700 Received: from NAM10-BN7-obe.outbound.protection.outlook.com (40.107.92.71) by edgegateway.intel.com (134.134.137.111) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.25; Thu, 10 Jul 2025 08:08:57 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=nWqx1lr0tQAyZggedTQP+NTE4DtJejrgyz3qHaYuHYocVaOpaXl+xinH0Ts75nfdX6V8ln/1xA5zVmDcGwt3wFFCwF7D2WUvy15NejUdrwklR+edsEsy4LiK8+og9rTFRfE5SB2ZsHHnZ8JQjt/VB3FPpaP3vpmoAqsHh85GZCWTGIbpFYjtpoivKvVa8KinwLxfS/FAMyACXXNc1xdXFjEBuPubLFxLnrNA6bHJDIgJSb21IYoV+/4qyF5rLI0AiCrGkgUngZ66Mar/Ncv6dmR5lwKuM9cnaKhuGVHAKSoKzf6gQJnHbM6RA7w5QS+QXpT+id1I23Iy3jmRtZ5BoA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=O8Eh5IbYZcMogguf3/61UGGrrMBWjnBm42y7kxggy3Q=; b=gV1T5IdwGTX6/Zxn4YXBtQQHSma+6fBqQSztGBEfFOhJRXXiI3a+jxIPlx2DHCSJOJXOw447KsuHPP0DqCq86mEXu/yFBctZ5BqxqTQ6GTibi+lCtY8AOdBJFCIyqVYAIrTVJuuB/JA/GvLM6MvyINhrT2EPoN90uSOSae7QTRjDpFeRcfEC4HJm0A0kgcXZzYjzpZyZmnxP3c7frn6gQ+zTJDT+jeKPtYr8uT91ssPwneK82ScJhKZ6U3dLXsTvWenSL7n/mSc95BnCWvxE/ZnWstLE0/K8keBnJk/+5KAswVBxTqGnnOUxGXXyZUWdMTQuWNxJpwZK00z4XsOTTQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; Received: from CYYPR11MB8430.namprd11.prod.outlook.com (2603:10b6:930:c6::19) by IA1PR11MB7809.namprd11.prod.outlook.com (2603:10b6:208:3f2::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8901.27; Thu, 10 Jul 2025 15:08:55 +0000 Received: from CYYPR11MB8430.namprd11.prod.outlook.com ([fe80::76d2:8036:2c6b:7563]) by CYYPR11MB8430.namprd11.prod.outlook.com ([fe80::76d2:8036:2c6b:7563%5]) with mapi id 15.20.8901.024; Thu, 10 Jul 2025 15:08:54 +0000 From: Rodrigo Vivi To: , , CC: , , , , Badal Nilawar , Rodrigo Vivi Subject: [PATCH 6/9] drm/xe/xe_late_bind_fw: Reload late binding fw in rpm resume Date: Thu, 10 Jul 2025 11:08:37 -0400 Message-ID: <20250710150831.3018674-17-rodrigo.vivi@intel.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250710150831.3018674-11-rodrigo.vivi@intel.com> References: <20250710150831.3018674-11-rodrigo.vivi@intel.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BYAPR01CA0056.prod.exchangelabs.com (2603:10b6:a03:94::33) To CYYPR11MB8430.namprd11.prod.outlook.com (2603:10b6:930:c6::19) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CYYPR11MB8430:EE_|IA1PR11MB7809:EE_ X-MS-Office365-Filtering-Correlation-Id: 2bb7041a-7348-4e73-4fba-08ddbfc3afbd X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?rCBeeGlFnLg56cR/zOVWFf+05ab6+l0xe12iMNV82mXeLLidZLaBaRZfSHGl?= =?us-ascii?Q?WWeOoZUu7+8Q3rHguSoD8FnJrBPY3G92sN53onWzVY9tNmD9c3ak1IXsCJ5v?= =?us-ascii?Q?we/449SPdO/RCReUAp/h2LrEcIMjMtxuqcXg3kyrA9RSjD6nQTi1KfJmGg13?= =?us-ascii?Q?nTwRugpr+1STVNkJVa88i8xlqJaW2j1nZ1v6FDqj1muWUpDzaXODpgE8Twcm?= =?us-ascii?Q?4cCjpSRrCGKkWKiyNS66d3iq+EsXm3GnI1QvGaaYkiatYw9X/Jw7FkLo2+Yr?= =?us-ascii?Q?BlRnScWaT3DH/4nZ+VGmSU8io7UO1szAGi3GY50U3VcfEke2Wmv83E6pPDuL?= =?us-ascii?Q?eOXRsDJA6LP3ke/J01f6Fs4k0SRhBIh238f/tMj8O33XlbAytAJ+rkIoV6l1?= =?us-ascii?Q?yHlkWcGkTzj6VeD1f8jm24/ymcm2Dg4HRvPbbSR8XZmJzkzq0d/vt4U9a5JG?= =?us-ascii?Q?jd4/7u9DM/MHbls/JlKmmV125AUZsx3C0PHIykcBLk72BA1rTURbMstFg3jM?= =?us-ascii?Q?N7fHwFkAW0fZWkHga/KlSLZSqG+sKvMEtu7aZRfkQId4ruJg/Yn4aHJUUY43?= =?us-ascii?Q?C0cQUKopOqoAVm3pRLCpHlbEarfIaSuxwrTDaGrpvGP6EAhQersRg6VZcZQj?= =?us-ascii?Q?84xLRqoP5omDAG1+NX5JQI4UIbwT9kDHvxoNHL+lChQ8mAmBxLAdsEfTy6KA?= =?us-ascii?Q?AIKHB6PUtyKUchTUjkecJGjvtH6uLJ0pr75fuQoI2qftsw8DqjMkgnpwE9b6?= =?us-ascii?Q?HaPQRCSX26DB6cGc3T17FWdyJRpG7dpn+pSeLfx+7BoTmVbG8G6dCGp6NnFv?= =?us-ascii?Q?cWu+jDjkfCR7MQjg5GFgIr1Fm7GJmhWFp9xeddAFNom5zNmc3KNBVevWeKTN?= =?us-ascii?Q?/pC9falN6tNxZxZoa2rjvbqAFHTaGs1IXWly9csU93f/Jo5WIWCFzSPJoiZr?= =?us-ascii?Q?MPSjLBEmhoFwrK05M3bQDf6uGQJ9QDEcHCg3it5IAr7uTli8qmehrE12YY16?= =?us-ascii?Q?FsP06zhbTSCLWRlszCOhMQ4Eg2eIDOBr5hFMi9ymir+1gZ4CdgZd7wdXtyXZ?= =?us-ascii?Q?syZ589qujc4P+c9brljU+N/hjypCiDndQ+zsRbHJ4hPKwqVba3q+CQNPDDqX?= =?us-ascii?Q?ByQ/o+eDlkkub/jD6QIczpIbch5+5OfQdNyEYbkEqgA5L39nII0pW9hQ3JQL?= =?us-ascii?Q?otOApB7ye9SsGVEqQETMLsYoUi16lOWaGaR/n2kVTzB7rN7In53yNpxkI58B?= =?us-ascii?Q?VvzkpI/Oz0e2a09pVl84MJZ6yuxbOGDLPINoNvIsiOCyO6AschhW8yq65VJo?= =?us-ascii?Q?7DhlvqvlVvrv3O3wmFTFkhhcUck0ASjLABAyQjfjp7kYuLYQsR1Ml4BluQkV?= =?us-ascii?Q?VfjAnHdK2UTLMrI0seEwZS0vx3gGnowZUq3XwoT7kvWt0ovryXcfomNQ3ToT?= =?us-ascii?Q?tyyZCWZ2Qq4=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CYYPR11MB8430.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?QrkipQSguNBe9GOBEXjW00VxAE0UVi3vUlDo6uh5Y43ALYJEsEd1/Du5Ry1B?= =?us-ascii?Q?StuvCmHXB0qCZE0OZ9S5U6VSGIrRHzrpPL1rtI6OFbStYQOwLTSCdpHWdiaG?= =?us-ascii?Q?9DAaIjQUoOuYPajSep/oeUe1G8gKKyK1nfqYJgdomKl6xPnLW3OMTu61OU5K?= =?us-ascii?Q?u7KuoEXywx8SOIuy/j2WZLwv96aXaINVhdYSRACALtxXIt9WQb3XmcFQ2uIt?= =?us-ascii?Q?0mPlQATN31LvEAhK9ReVOAtD1SfegcAvTnlSSvGiHRzrNSwN3v87PeTbHcfG?= =?us-ascii?Q?cw7NVj+yEtwNVjLu58zi6ZLCO+T464Vo/Hpf2/RWmhAdV3PeIuF6VdafRRts?= =?us-ascii?Q?+tzDh2rIEk9rjtprPAmMXS05eEPFL1dyfrr0vaFM3bYnsUBz0kWxyQuOyX4G?= =?us-ascii?Q?3lwwd/pZ8i7wexKWtY3FiWE9KXt9Q0cHxaZStmUCWFVUZkkl0BXIv9dr597C?= =?us-ascii?Q?tFevcjwXbI9vOWXec4DZd5JbyDs2q8ZWwn91Ge9/0B+WPKBj5eQSjUEF5pRT?= =?us-ascii?Q?mBwWuDA6SeVM1fQNsyxFScMaEBDalQkwtOn6eWMwz1qt17fK8zYwR/g8LfXc?= =?us-ascii?Q?qi1yu5Rrj7VJhWV08CgAPhO1vYEa5K4PLn53+tr7zV/4s9PRdT3W/f7h8rzG?= =?us-ascii?Q?X6jgH7/vBR+EKrCfjMAs//ItAFkvFgt/v/PqcU8grKKf/fD4R4tP+vPDf5QV?= =?us-ascii?Q?FtKgBYNtLiqF5F/b9O0o0PpzPIW5/8TdzjkajCG/OO3rEVOL5uTkthDP7HVv?= =?us-ascii?Q?dBULmAvQo+QkYNGrShKC6LkVuMk0T4+QzhMOYgusf5X4hdfIsaBFXy7CW/hM?= =?us-ascii?Q?de0olEVwXm2brYbb/iMEeb7H0xDVlaT7WnW8+HQKBWfQwQB1Uajze4FNQUkc?= =?us-ascii?Q?lCugoWw6SVk6cqTWHEUwBxEDUET2tnOk1qvJ8KmSuan+4dftBZ112a6wM7WW?= =?us-ascii?Q?5PnW64rdNpe5LjQUU0IRR9I1clPuaIvv8mk5eVE8EBhWgRUG/u8omjS9ZGjh?= =?us-ascii?Q?iTiCgBgc3lgz/DXgwEAifpdZz3wggwxi7eOO8qXDUzjzbqaEpaH9T8VR+5E6?= =?us-ascii?Q?IhKBUupR/VgKWSxkQ43YoiVO1uwy6cw3EnWb9TE5g/ygoWxM89BD1hYLClw1?= =?us-ascii?Q?ej9+bQMOhgqUuw4Bw67NVSuMvkHwpM0ZgX6pSPCPXbnhm7/j3FoaKPhACjvY?= =?us-ascii?Q?uSffzQzb1FQ5dNLuzdKAyJ6nEMXrQFI4aLBbdFdU+wnKDhEZRGlc5vm/g//9?= =?us-ascii?Q?BZwPFjOQmrWUgLF4TSAubacFe6YXZn4hfV/9JWRfoiKcD2GNxgGqB8Fz5HQm?= =?us-ascii?Q?KcoZrlvSK/BR7DUcL+KDbsytbz0nsq2Y0pV9VpveOjYLGIDHiE6l+YGlZsrS?= =?us-ascii?Q?dLSrObQ7fm48QdkwPPSM/2O6lsnYqwtQNNrKABKdbyWCPtJq3j0rsjJuOtzE?= =?us-ascii?Q?fb7vWzN6DeJ+VvkNVtgO5dCF140ZNK5GxEpFK2xo0MJHkPbQfBYtAWXLxDCp?= =?us-ascii?Q?aarRG7H2rpnL1UQcTPBVLFt3gDUsKR2rtg9hjqafySMXO6YEsWf/LPbez2c/?= =?us-ascii?Q?ASzs+tvdZAsxwik7qGWPUSb0Zi2RHSRwdzaciul1oizSR78OI/+or4lyIFte?= =?us-ascii?Q?EQ=3D=3D?= X-MS-Exchange-CrossTenant-Network-Message-Id: 2bb7041a-7348-4e73-4fba-08ddbfc3afbd X-MS-Exchange-CrossTenant-AuthSource: CYYPR11MB8430.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Jul 2025 15:08:54.6442 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: R94Tj3ALUNWdmYS2F87o/t+2bTEAMG1B9VH+xqDHgPu8t1H3kzOMm0SLJk1ysCplcMp3zclbh/EjfezZLIVoOA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA1PR11MB7809 X-OriginatorOrg: intel.com Content-Type: text/plain; charset="utf-8" From: Badal Nilawar Reload late binding fw during runtime resume. Signed-off-by: Badal Nilawar Reviewed-by: Rodrigo Vivi Signed-off-by: Rodrigo Vivi --- drivers/gpu/drm/xe/xe_late_bind_fw.c | 2 +- drivers/gpu/drm/xe/xe_late_bind_fw.h | 1 + drivers/gpu/drm/xe/xe_pm.c | 4 ++++ 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/xe/xe_late_bind_fw.c b/drivers/gpu/drm/xe/xe_l= ate_bind_fw.c index 85cd42a1ec05..df43523e9043 100644 --- a/drivers/gpu/drm/xe/xe_late_bind_fw.c +++ b/drivers/gpu/drm/xe/xe_late_bind_fw.c @@ -82,7 +82,7 @@ static int xe_late_bind_fw_num_fans(struct xe_late_bind *= late_bind) return 0; } =20 -static void xe_late_bind_wait_for_worker_completion(struct xe_late_bind *l= ate_bind) +void xe_late_bind_wait_for_worker_completion(struct xe_late_bind *late_bin= d) { struct xe_device *xe =3D late_bind_to_xe(late_bind); struct xe_late_bind_fw *lbfw; diff --git a/drivers/gpu/drm/xe/xe_late_bind_fw.h b/drivers/gpu/drm/xe/xe_l= ate_bind_fw.h index 28d56ed2bfdc..07e437390539 100644 --- a/drivers/gpu/drm/xe/xe_late_bind_fw.h +++ b/drivers/gpu/drm/xe/xe_late_bind_fw.h @@ -12,5 +12,6 @@ struct xe_late_bind; =20 int xe_late_bind_init(struct xe_late_bind *late_bind); int xe_late_bind_fw_load(struct xe_late_bind *late_bind); +void xe_late_bind_wait_for_worker_completion(struct xe_late_bind *late_bin= d); =20 #endif diff --git a/drivers/gpu/drm/xe/xe_pm.c b/drivers/gpu/drm/xe/xe_pm.c index 7131c403cbe8..b2cd94dd817e 100644 --- a/drivers/gpu/drm/xe/xe_pm.c +++ b/drivers/gpu/drm/xe/xe_pm.c @@ -20,6 +20,7 @@ #include "xe_gt.h" #include "xe_guc.h" #include "xe_irq.h" +#include "xe_late_bind_fw.h" #include "xe_pcode.h" #include "xe_pxp.h" #include "xe_trace.h" @@ -545,6 +546,9 @@ int xe_pm_runtime_resume(struct xe_device *xe) =20 xe_pxp_pm_resume(xe->pxp); =20 + if (xe->d3cold.allowed) + xe_late_bind_fw_load(&xe->late_bind); + out: xe_rpm_lockmap_release(xe); xe_pm_write_callback_task(xe, NULL); --=20 2.49.0 From nobody Tue Oct 7 09:58:51 2025 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.19]) (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 62D97274FE5 for ; Thu, 10 Jul 2025 15:09:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=198.175.65.19 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752160142; cv=fail; b=dkEt0jpvAHOKJXtNsE4U2781J0Z6zPopGJGgRnI++zK05VFBYbqJRIvfC/ZduebROqDp/PdA7KBVyOF+9mQhv8C/z7OWvpDMnCuQP5x1VTWX0fMxcM6dWH/1LISw4H+3eCrOx3XaLMHOQrzC/6+do01Qu8nxpY8BpjR+u9nBc0U= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752160142; c=relaxed/simple; bh=BmalzQef0p0s+rP9nqDd9ic5JYAqJg5eIDQFxFbHgEU=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=cTk8w5IuNf9fxr85JB8SQVds5rL2wgaZpMGoNPVRJtsoIjCrr952lUjoJ7rwd+C8t9sht1rYElQNECzhtzAsE5MOZENn2RFls1wPlU2qQTzc5vBE3c4/4hNKiNRWRpm+QMr7MgxPoK5p7HK7jZyUndjM+ixl0Uxe7dcugc8RV98= ARC-Authentication-Results: i=2; 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=ga6JD0VP; arc=fail smtp.client-ip=198.175.65.19 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="ga6JD0VP" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1752160141; x=1783696141; h=from:to:cc:subject:date:message-id:in-reply-to: references:content-transfer-encoding:mime-version; bh=BmalzQef0p0s+rP9nqDd9ic5JYAqJg5eIDQFxFbHgEU=; b=ga6JD0VPLGVOmPPwooJ/ktYJSYPk+cK5pFHho+S+W6GMYNSfAjndrRso AFnyrpffVKqdGNQ2RJBsFyyrjKBhuegqZ+Upy6neD7vIoGHg7IBS8R1AH ud4DKKfb46q91g9VF6tM+yG63/asB71V6WfIW/95+rme6ejhkDF6B15B8 v8WpCjlFyND/c2hmddDQe0n7XmUTMQy4EqJozudIm0A1wkh7OCkgY4pl0 BV2TXV5Msh7zN4LVf+ZBclkCfWApLijR4J4dbVqbFi+ahdHrIgsUBnAoE XCZrlbMP7TbpbZLm3u04hBLts5eqyrfyKD2XtNDVY6oAYx7QpUcVzamPW w==; X-CSE-ConnectionGUID: +axdwRNgR8C+buBXqB8o4Q== X-CSE-MsgGUID: 0budLSwmSkSwgVqZo0KD0Q== X-IronPort-AV: E=McAfee;i="6800,10657,11490"; a="54296591" X-IronPort-AV: E=Sophos;i="6.16,300,1744095600"; d="scan'208";a="54296591" Received: from orviesa008.jf.intel.com ([10.64.159.148]) by orvoesa111.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Jul 2025 08:09:00 -0700 X-CSE-ConnectionGUID: wi+OJrMaQVm8PyWkZQKFRA== X-CSE-MsgGUID: zdrPiUEQTuymVvElOqBWJg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.16,300,1744095600"; d="scan'208";a="156600196" Received: from orsmsx902.amr.corp.intel.com ([10.22.229.24]) by orviesa008.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Jul 2025 08:09:01 -0700 Received: from ORSMSX903.amr.corp.intel.com (10.22.229.25) by ORSMSX902.amr.corp.intel.com (10.22.229.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.25; Thu, 10 Jul 2025 08:08:59 -0700 Received: from ORSEDG901.ED.cps.intel.com (10.7.248.11) by ORSMSX903.amr.corp.intel.com (10.22.229.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.25 via Frontend Transport; Thu, 10 Jul 2025 08:08:59 -0700 Received: from NAM10-BN7-obe.outbound.protection.outlook.com (40.107.92.71) by edgegateway.intel.com (134.134.137.111) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.25; Thu, 10 Jul 2025 08:08:59 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=p9eRRapYzLRKEJ0kAvaqLdQMjyl2rY+zKRSab2drHFAQVntBWjck98voNBkVKjbYWg/6A8PTICtNpz18TiclzzPxYQk0Dn2JuLSJDdz5XaYBHdLyeR6d4Ym2tF8silpdSNWWS8bUCj4gfWmPotDbNikkOej3fkTiQJhbaxAXa5Z732CDefbU8LjOuYn7JMjIIE8S/Cxq6uefTl/EmWGap6J+u/EedfxN6TLOMtioWIM20i6o6Spc++yMO3tB3qiDSe84fV0vcMxAkgrpA3GNXcs+KxsgpwyFUgnw+3flyVFFZ+dYERJ9WdrwhZjy839M92FnAvCIOLTTZvTZ0pbqsQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=lcJ9bZXaTMndB4s2gTBmen85R0QyJ+HZ/puOW1kZ89Q=; b=PFzzyrqpGOTYuDa0nD6L2NnRqDlTcM4awZdMh3DRG55j+p5wzXVy4Lu1oGTwpEMkYqmit2HlmED5Lju4lbq/Uz5G6mB1fD86DF5smeUHjSipIdpAKzmZMN13iobXywhkK2A2xD29NnIF1YjxvGY3A/os7jcxTNxqOHsp8ZF79kE83t0xDwYr/8bNzT/+0ouWEVcoo08ZEGchDStn31uByqyO+EarWqbca/ANQsWZ3OYuapnVVkftIbGAj7TejqgnT7poxapps3L9aXlnH1alxpLYfnO8ZRi/ZahYysufezRlZdXvPSM7ACxuwZWnrGI3AMo5l79AFco3EkUZ14YJTw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; Received: from CYYPR11MB8430.namprd11.prod.outlook.com (2603:10b6:930:c6::19) by IA1PR11MB7809.namprd11.prod.outlook.com (2603:10b6:208:3f2::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8901.27; Thu, 10 Jul 2025 15:08:57 +0000 Received: from CYYPR11MB8430.namprd11.prod.outlook.com ([fe80::76d2:8036:2c6b:7563]) by CYYPR11MB8430.namprd11.prod.outlook.com ([fe80::76d2:8036:2c6b:7563%5]) with mapi id 15.20.8901.024; Thu, 10 Jul 2025 15:08:57 +0000 From: Rodrigo Vivi To: , , CC: , , , , Badal Nilawar , Rodrigo Vivi Subject: [PATCH 7/9] drm/xe/xe_late_bind_fw: Reload late binding fw during system resume Date: Thu, 10 Jul 2025 11:08:38 -0400 Message-ID: <20250710150831.3018674-18-rodrigo.vivi@intel.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250710150831.3018674-11-rodrigo.vivi@intel.com> References: <20250710150831.3018674-11-rodrigo.vivi@intel.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SJ0PR05CA0084.namprd05.prod.outlook.com (2603:10b6:a03:332::29) To CYYPR11MB8430.namprd11.prod.outlook.com (2603:10b6:930:c6::19) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CYYPR11MB8430:EE_|IA1PR11MB7809:EE_ X-MS-Office365-Filtering-Correlation-Id: cc235ef7-1d2e-41f3-73e0-08ddbfc3b11d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?qXVqxaSH4DcvQVvPeaOpzwVgtTvQ4uVV14ID5utXOLqlcI86UAlarngayk6i?= =?us-ascii?Q?3QZFBuxga+F2Zc2p6wQU0cjNFdl/m0iQEkXYCE8UEM68+g6NWTC2bdqheExz?= =?us-ascii?Q?8ckDB9jCkONblAU2+mFoy/qa+hDxPcvEHt97+oiE8kKV3KK/o9cYmf3NAxSA?= =?us-ascii?Q?Krca9YPLSfcwi7YVXxKNsd+saSi8hQh3UoEXtnANJYx9ntHmco6JBdPtSyGQ?= =?us-ascii?Q?JXCqav2MIS3Nc8BPkGU/Ejk+QmaJJBnKWsplQuhi7tljjziYOsAkfz/Dy3VI?= =?us-ascii?Q?tvr7i3YOZdwECIDkP+Ys/JjUmyfCWKJRjF83x3V1i5gJu0vDvLLGGtca0e13?= =?us-ascii?Q?S9O/u5aFjXUXQYRr6BE3rCuzigwsG6CxG1EZRavIQW/BF00lsXAByiIB+ObM?= =?us-ascii?Q?UiKAwOaUIGXEejLwPC4rMeYT/324uajrpvYan3KXGu78h23jLWiwPBf9VLuL?= =?us-ascii?Q?joyr8qeCHR2hK3SD1Uh1E3HY8j5zXbk+eOyK0jVOuznyGrD2K0yOULOZ0ScB?= =?us-ascii?Q?J0SZc9BXcp5BHYk3+AAwN/LDRe68ecmuSHVRY9Dy0aeFQLEP+cMVZHKkrBy2?= =?us-ascii?Q?kWBkrnFrXdcbgk+7Ufcnhu3XeDlLmYr6belk9swMXq5R8AOs5yuoSQ11nuuw?= =?us-ascii?Q?p4SvkwBrTTs+KNL2G8M5601A+xW2gTfqTs8NxdhLdQg2+RU0nTQEJaJ8H8eH?= =?us-ascii?Q?NmJHNzV7N8Q/HmLSQ+61xl59WJJooNgh9aM94YELfNwTh01tRYl1WURJek41?= =?us-ascii?Q?AJuVC71K0UNit1CswK+hlfBl6QSIq4PhIt5aPjgkXVJaAk/4TvELVxwjHEuk?= =?us-ascii?Q?FF9t+K7waaVPwLTnBdbGimyfBJ1fpV85txxnwANMwANE8tApotRUz4E5yzS1?= =?us-ascii?Q?zgN1YgwCAsAwB4HwvKdISJxQudeJ9X83/2/EEu82863NEb+MbYxq4YYhIDKi?= =?us-ascii?Q?B7KIguNcSG0JiBIrKgvvfBK2XMxELhdpBd+zQdtHM1WsqlC3AZTdMl6FGzra?= =?us-ascii?Q?g3pJ0fVqQNKwela6jN9Obw683t3yQWShC6b4m9T5K0i0Befj3epJXwEK6pCL?= =?us-ascii?Q?IIn4R8KpxvL0k38spOo0jQ6vAvrKdZ+tlUth5KvkP4B042zUg7Z+qQJOPYA3?= =?us-ascii?Q?ZkdVC5S8YCAviH21LZ1mO7/eiAP4++Kroerv0NrrNT4FVA0t7PFShozuJL20?= =?us-ascii?Q?MFJChRQlXvtRudwjBbPgOGveFgbCnccFlNwJu9jKuq5TzMSkHf3+5HxrWN6Z?= =?us-ascii?Q?20Ei7Nh45vUSYo4qElMJojpsRpQ0+EvZJjuo0qfih7pmXSEFU8J2wVBoyvUX?= =?us-ascii?Q?GLrJ1MBUD71TDiBjBPFqWmRkQPFE0ZTHVZcEnB+KZafT9sAXyLSTIDtLJZyr?= =?us-ascii?Q?w6L8L/G7B+RWhXRVyMDay/PMAtNdJhxR4/0dIVjk7lK/8hPHrbIuno3N6BAt?= =?us-ascii?Q?lIejG5cvVfI=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CYYPR11MB8430.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?1ZTy/W8dX1mPTuq+fviFOze3s8msAXqSUSeYb07xfTWaS1/EIFInBJRxeCrM?= =?us-ascii?Q?UYzg3i8FphHhImfoNces0qx3b+b8u39s/G5dpCbBYSlLZbpKbCJNMzu10H24?= =?us-ascii?Q?AZp0zBfJrTvyqOwURoGOZ+0nGmFSJodnUW+b2SMIZK7++9g4YHYcn3AvcsRJ?= =?us-ascii?Q?0qzcJLHffBcMz9KHIelz1ENiU7sO/Q85NdAM+VX3IsJvPsVZKeU0lF97k9oi?= =?us-ascii?Q?87Co5eDNDkqM/yH/jeGvgxWhNBvUbbBn06bLxARfPaPSVLGyIrRSSv1JPiV0?= =?us-ascii?Q?OGm/WVpAl8fbF3qO/lOWkNAimdeid8jXFeol3QOZt5CYhvSKdRb+dnyrtJKI?= =?us-ascii?Q?aBj+nYCAf9uNINYN1WoaGxm9/haTGJEHAPpMd/0JiEvx6n4fQwoVMDimmdhD?= =?us-ascii?Q?BZQrDXMW7MouEETfThc5kJNK4k8Vt4UI/xKjf6LiUTbFMxLacrYL1wv4yZ24?= =?us-ascii?Q?/TWxxUeJpFO6kBlIGwpAx53ERlu3iTZC5rsZ1bJEweYuKRvk2oIeVIqoMzMH?= =?us-ascii?Q?QtkwKfbdqqLkV3tVGB0uVCE29k1wudslhQdTJZ9ZmtnElX1NCP/Ls2JsU85n?= =?us-ascii?Q?aGivRl5xqZFmve2ptimhh68sqjploR0mCj58INkF81EuHpb0z/WooywHsv9y?= =?us-ascii?Q?0OCow1VSX6ek3EpyOtVnsSHjY0w3PNUSGXP5NAjNLnInjgY2exAaOYmi3Z0O?= =?us-ascii?Q?AmA5HylNw6kdkPPbFvtCZZyCMno57sGOdw1K95LVYCoU1RprIE7nvPYB7lId?= =?us-ascii?Q?pBqzJIHFRCdR3ubed+oEM16f2bKZoDa4VQCVjdtmT0msoLAAIpM8zDFi70gh?= =?us-ascii?Q?kl+N4IG+xKBkihXzXdnqW+KCsGA2O3ODML1gtgz41mAcOG3MLxFMeHe9E2mP?= =?us-ascii?Q?kKwu55KRPThrC7rhbOs3X577cGWSn4IRmhetk3dbq+9pI1WqYWNMGeP4WJGb?= =?us-ascii?Q?Eq/SIKeasCFBjFAXyuzYcL2uBENuGz9pQeeZCtmJtbuz4orBCBbncR5jtxfI?= =?us-ascii?Q?55pz4+6Cdg6oIo/IllhJ7TeFt1yKtCEGK4NZzGNTRhTlCxid+5LUHvlDaZeN?= =?us-ascii?Q?w3iIm3Bxrr319FhNCmwx8hFkzGK+wNtTE7BOZtfvZkPOmdcz2jhc2sKPJkC/?= =?us-ascii?Q?plu5yTAttP/UFKI8R2evt8511k+QQk18zWe9+9tyLpcy/vXvwEOctQFXrf1o?= =?us-ascii?Q?Jum1KX8JZZq+Dkv0oC6AkPxiz9CHCBVnNS8XucRI2+m0Hu6Rvg6UdCHadwRj?= =?us-ascii?Q?KTBj48VWDNv8sA6ijCMUXQOZR9jroLmzohFG5zlKybuWAvujUzvduV2H5KJ+?= =?us-ascii?Q?Jc0p4gp6SENPlK1pf45ZxCbdbsRXMnFkDVRSCyhrqHW+PFRuPzeVJpoWW1U1?= =?us-ascii?Q?k/+NpgWaI0n7rwxx0Z4fMy/s7mvU8PZoFdKnQzNoH2FHgSCQUGPH8Mfrzwli?= =?us-ascii?Q?Psb9KXBPUofoBnlwXU7qNvN/r5JbnX4Dzw1W7aFflZg2SfqjXNzBlS3NVImU?= =?us-ascii?Q?Bn+VShqPGPXM42lOLdxpkIRQfSpsC6ll8zXG8k9eabdHdIHCM7pK/ztEhKFn?= =?us-ascii?Q?TIerYoPOgQoUKvkINWz9kQNlvTqQuANF7w/FSda6QhAgoKYZCVdUxmNG5dBr?= =?us-ascii?Q?DA=3D=3D?= X-MS-Exchange-CrossTenant-Network-Message-Id: cc235ef7-1d2e-41f3-73e0-08ddbfc3b11d X-MS-Exchange-CrossTenant-AuthSource: CYYPR11MB8430.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Jul 2025 15:08:56.9315 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: SQu9U8a4bH6LzsWk/kLalSUnPWXKA+0oDblQSHrZD14D3e8338V1C1rSXp0BkDwAA0MTFI8tAlkni/xeQCPjNA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA1PR11MB7809 X-OriginatorOrg: intel.com Content-Type: text/plain; charset="utf-8" From: Badal Nilawar Reload late binding fw during resume from system suspend v2: - Unconditionally reload late binding fw (Rodrigo) - Flush worker during system suspend Cc: Rodrigo Vivi Signed-off-by: Badal Nilawar Reviewed-by: Rodrigo Vivi Signed-off-by: Rodrigo Vivi --- drivers/gpu/drm/xe/xe_pm.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/gpu/drm/xe/xe_pm.c b/drivers/gpu/drm/xe/xe_pm.c index b2cd94dd817e..75b65eb61c76 100644 --- a/drivers/gpu/drm/xe/xe_pm.c +++ b/drivers/gpu/drm/xe/xe_pm.c @@ -127,6 +127,8 @@ int xe_pm_suspend(struct xe_device *xe) if (err) goto err; =20 + xe_late_bind_wait_for_worker_completion(&xe->late_bind); + for_each_gt(gt, xe, id) xe_gt_suspend_prepare(gt); =20 @@ -204,6 +206,8 @@ int xe_pm_resume(struct xe_device *xe) =20 xe_pxp_pm_resume(xe->pxp); =20 + xe_late_bind_fw_load(&xe->late_bind); + drm_dbg(&xe->drm, "Device resumed\n"); return 0; err: --=20 2.49.0 From nobody Tue Oct 7 09:58:51 2025 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.18]) (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 7BC362749C0 for ; Thu, 10 Jul 2025 15:09:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=198.175.65.18 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752160152; cv=fail; b=Bgzj8LIq7yvG1RPUAZpVjdHARghPF3AXX7RPVtQtRHG9yA81waduGHQVdNgX1fknMDvgDXYuQGXisORpGkIRhGgs9frTVQb8aqbkWm5TxKbw2UjwsLlZq+naUTMiIeWWcZiag9eKIypjTx3affaVTxW3lZ7kbg/0jntqz9wrSEg= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752160152; c=relaxed/simple; bh=mWQhRVEAdugKbCqp4ueaa+8W8nvp7T/979BhbR407To=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=C7sw+3QEba2DK6MZlujEF9/Oe6MqECUhvlvHOajcKQOsRHU4BkoCNpExw+KMa3mHr3m1vpUWZzwLg6EEwKDDDqeXVHHr9LTfV9gHKUIc26AMNYImgl7cRXCBh0UL3gAyB+RguIC+7GMzZn3eyejDRmVUiuj6Fe2N62CC0HZcTCs= ARC-Authentication-Results: i=2; 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=bMwPNXGv; arc=fail smtp.client-ip=198.175.65.18 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="bMwPNXGv" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1752160151; x=1783696151; h=from:to:cc:subject:date:message-id:in-reply-to: references:content-transfer-encoding:mime-version; bh=mWQhRVEAdugKbCqp4ueaa+8W8nvp7T/979BhbR407To=; b=bMwPNXGvvSgaMorXgrDwKhUjWCwQhfR96x1n5em1JFgKLtMnHFeGsMdq j8Fth7qH0Ab1UIFzH16Z5IIHeKZQjoxRm7OKRdaMRAfchvtkNgN/ZdFIb wZF3aMgHWj9ndTP7JAqnUugiWeo81qtrtwzptuHRgMauwgnheppDmkXJd WsTJIp7zRJz7JjyGjpZ2itqgUfNMaU3XI8Ycko5V0zYf5uZCJA0M7rah+ 7TqdPkn36DJFB4jKPJS1FIenVSB/1RgWgffdmo6Ax/6lVkNcF/21jqnaN yfaNqZXdb4T/FJYQZbthqslHLbuVX4GwHCuQOYFGTvhwkdOJATh4MVmAM Q==; X-CSE-ConnectionGUID: 1OwPLppbRaCOiCPVXp/QSQ== X-CSE-MsgGUID: nj7E0SZTSImXMU7kihjapw== X-IronPort-AV: E=McAfee;i="6800,10657,11490"; a="54573030" X-IronPort-AV: E=Sophos;i="6.16,300,1744095600"; d="scan'208";a="54573030" Received: from orviesa002.jf.intel.com ([10.64.159.142]) by orvoesa110.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Jul 2025 08:09:09 -0700 X-CSE-ConnectionGUID: BP0NLxIGTninJ3FXuYELHQ== X-CSE-MsgGUID: X+pN17FEQUOCiDJsy3U8IA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.16,300,1744095600"; d="scan'208";a="187119294" Received: from orsmsx903.amr.corp.intel.com ([10.22.229.25]) by orviesa002.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Jul 2025 08:09:08 -0700 Received: from ORSMSX901.amr.corp.intel.com (10.22.229.23) by ORSMSX903.amr.corp.intel.com (10.22.229.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.25; Thu, 10 Jul 2025 08:09:07 -0700 Received: from ORSEDG903.ED.cps.intel.com (10.7.248.13) by ORSMSX901.amr.corp.intel.com (10.22.229.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.25 via Frontend Transport; Thu, 10 Jul 2025 08:09:07 -0700 Received: from NAM10-MW2-obe.outbound.protection.outlook.com (40.107.94.86) by edgegateway.intel.com (134.134.137.113) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.25; Thu, 10 Jul 2025 08:09:07 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=BUETDdelCesU46JGsFIb7y5+6XjTxoIhe5ABqEbb5nPTVYvk3PBTnBcp/LUm6kXtn8X07FN/9dPFSO3EdW1Gb52G+EpnQhIdgUq6nmvwQ8bBdEWbeIO5s6WGpT9T6/0s/3r8XYUTYq9aVrtCgNPVdIiAIhN22OYbZ8Wj1kE/ErviC5GvtYRoq68raRTovAjUJWS0p+vOYa5GoQICrc7QWXJ2Ietk1zwENzo4K+ju6JZvcApXdEpXGacg59Q48qndRQav3QgQDKyKTqO/nIc5z4QzbhwDITXx75jGmhYpt3YCBMpysuAPMrIUmRn9bo4dZs01b26oTc5Ee35wxCIWow== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=P4dB4vDOB1AdohHF9UNtJaYLaayvUOKD3BQdS9NX7xU=; b=jAKlZP+2Khcg8sFVHkGJwxBeb5oSQEQeUaQyAqm0dtvE9FS92wgc4ycilbw7DzeC6SsC/iQcX531k/cMplNzTihnaJQd4kty9hFGyht80wU09cfOza2lIJcxJFNutjVb/61Vj+7ybNHOgsHq8xaB015/SPOWO8NfXGbZDtwnxsGZ3xaGYYRwzeQG5M/5bJ8s4zIredvmBbm/zCbjQE90ieB0Dxg/5vuw9Vl9pk4hRzDsdy5iGdw49NUe3xtQr/u+skPeR+Uinxj1X6FzOFz5tgkn7VKfR//h+WuLBgGqJ/+kOz9G3uNm0IoM1019m7hxYerX7MpuMQm4cwHkIBj2GA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; Received: from CYYPR11MB8430.namprd11.prod.outlook.com (2603:10b6:930:c6::19) by IA1PR11MB7809.namprd11.prod.outlook.com (2603:10b6:208:3f2::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8901.27; Thu, 10 Jul 2025 15:08:59 +0000 Received: from CYYPR11MB8430.namprd11.prod.outlook.com ([fe80::76d2:8036:2c6b:7563]) by CYYPR11MB8430.namprd11.prod.outlook.com ([fe80::76d2:8036:2c6b:7563%5]) with mapi id 15.20.8901.024; Thu, 10 Jul 2025 15:08:59 +0000 From: Rodrigo Vivi To: , , CC: , , , , Badal Nilawar , Rodrigo Vivi Subject: [PATCH 8/9] drm/xe/xe_late_bind_fw: Introduce debug fs node to disable late binding Date: Thu, 10 Jul 2025 11:08:39 -0400 Message-ID: <20250710150831.3018674-19-rodrigo.vivi@intel.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250710150831.3018674-11-rodrigo.vivi@intel.com> References: <20250710150831.3018674-11-rodrigo.vivi@intel.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SJ0PR13CA0169.namprd13.prod.outlook.com (2603:10b6:a03:2c7::24) To CYYPR11MB8430.namprd11.prod.outlook.com (2603:10b6:930:c6::19) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CYYPR11MB8430:EE_|IA1PR11MB7809:EE_ X-MS-Office365-Filtering-Correlation-Id: 052e82e0-4e8a-4e68-baa5-08ddbfc3b2c2 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?QD5rJ0/KcLryW5/w+k36zc4+UmfZBNe+0Db/DNnCWtSKkkOM3kHV9mvQG/Ry?= =?us-ascii?Q?dCGNEIasY36vasIsu5x1w5qNJzuICYrXxWKEJzrwyrlHIZiSs1mTV8EwYWze?= =?us-ascii?Q?F3OhX9nf694ANprD1nLZcT0WM+7qGUqyzMdBYY5ZESM+LPs2NXOZDXz6Zldi?= =?us-ascii?Q?vK4MgqTulsVvW3VootAjY6WahJuFM4Xu854W87b/IGyPJj+BnJJfyvSWHN+m?= =?us-ascii?Q?1557VQ5NihsH+jt3ak2adkrtum/UgTxgXFUjqps7Il3ztxM2qLO+a5DlAz7w?= =?us-ascii?Q?0nXF830lnZ7xzwNyWmdY4Vqf0NVHqWJoI7yGQe+hZ5ek32e7wc/X9fRmRYOq?= =?us-ascii?Q?PoRuvx43s0ZT319lBe2ObOmudiGlcv0qQ6cJL7iTHiK3TcUe5b5iuUcnZRHb?= =?us-ascii?Q?/N7QsO7WvjDXVuv+xwF+JA8yycCJJgTZQ9BOcvgdRgk8qezCjEfQX/Ub6k+/?= =?us-ascii?Q?NjqFu19GA7ysQoG1/VysHWeHBJ3+RdG8HE/O2hgddLMiA5UbObsfe05z61Nb?= =?us-ascii?Q?Qa9CJZTD9ZTU/rUJyglOHOmPgD54FRr1UTtA2o2Wxy3cRfL5/xVwI2z7Ge/N?= =?us-ascii?Q?aFkTkENXp5RuYlpoMfxoa/rvWmYWQ0MTi6dhtiqEr6qN7TIJqrJPjJ9uaUA6?= =?us-ascii?Q?3rAJ1+EvyYOH1Hnowznc43o4Y9XGo9vDgZpDvN8mdyk05hq5UheXC1PFsJH9?= =?us-ascii?Q?+zvmN53xEinb8+NHtPE3wcim80D/5b2JFloaUonBNHgiAnZIW7O9rY5QH1zX?= =?us-ascii?Q?lR2nOBiBycA2wuh84c0rEumUwWIbvAdT0AWqTZurLk0XLb1vcR0DBh159YRR?= =?us-ascii?Q?lZLiDctFDaVEAbT8Ohm8cEUMs+d966nuKsRZvZ8Uh4zPYaxZG94TFgTNx2do?= =?us-ascii?Q?Y5AHAUgY2XHwNhCc0QY9giVVKp5/YQ440/U2llKXbvX7MVgDG7TRRbXVHzme?= =?us-ascii?Q?6998DWZvAW6SRDT+fNLSKYVmpKM3cGAJhOjwTRiIMheeUZ6R5VBJCBPxxFlz?= =?us-ascii?Q?O8FoM+QM/pwRf4ziB5EbLIeVEDZWdCCKPJGqfwF9sYoIA40LP2if5BG78u6i?= =?us-ascii?Q?vhpVCloeZkVoD9UhLOdVMiJAwzKtkmztSMQL2ra642D2iq2iMC7sqFHLip5l?= =?us-ascii?Q?loJPt2WxzYD3OCNYrXdC37IJb05hSuLvuk4QiEq1WK8J49Dwqa2Uqq1wv6DE?= =?us-ascii?Q?R5J9czTlqIuAa0g5BMxEC6LA7163njufu9XSWvV8gt7JVD0DHO/21guOjvRS?= =?us-ascii?Q?JVbfefs15KCaWOtmjYRJQ8ZuknqAqAlhiyN2mBTaRdmCbDeG7Uk4aExVSswI?= =?us-ascii?Q?SCLqRO72MWkHb/eb5dMxGlHAbxy44g0X6pf4bg+B2zEMJM0Cgt1Bmudj7c2e?= =?us-ascii?Q?GcRo/cdwTMGAb8YRjlQQ51wsABfDEBnUnUhnnD9cvIdTZYVd546Rzo/Bt/Bv?= =?us-ascii?Q?cmrKnVs5kJs=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CYYPR11MB8430.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?UXger8PE/uJpjQSoXQspiEFSsH+xDpHeB3mVeuEpkz4T4APe6OiNnLLtb9Q+?= =?us-ascii?Q?gKUZsEPeacdWwnsDb8y0bwg8kHYro2G5BwTxxQPM3EEKi8hhJntBpXwf43kH?= =?us-ascii?Q?h76tsVYhQxm5n41+UC+nggJZ7a+aji68Xa+pHCpfkyATuX9IYgAc6nj2ULXc?= =?us-ascii?Q?1aEsgt+lxm0NpXyaOGbsxvc/VLkTM+wKTDJgs+fSIcox2OuKviYcyPvQrgld?= =?us-ascii?Q?ngeEDl+QdDroZw0XA0ztS2dNgfhRgOV/hhQa7hqaRvlrjY8h0ShwV/BaZD6q?= =?us-ascii?Q?bb3U/U+fNj6ID2y2agxA6AISRMSoxoYXy8nbanozapYh9HI9M2bRB7pP6hN9?= =?us-ascii?Q?t1dOh1pZESdDlo9hH74PZCOsm1ZwvEPF+zCCLsLFlNClLkJGalzxqQVXCyXI?= =?us-ascii?Q?kZE30a/jKOvY/9669+5fThBsyl+j1kLQz55QqQAJBaH4GEi8AeDtB/6Y7tR9?= =?us-ascii?Q?ped41LzgEjO7Ri/U0/FZa97qiFHwKOTfv7GWiqjCLNnq/TUlrkv0b0zSk0IN?= =?us-ascii?Q?h4ig5E/84ikfAQDRlnioKs2dho+oSw1lAGid3JBLHW7UMYJ8DGk2MfoB1odl?= =?us-ascii?Q?sKnYSqJDVKXLNI57BaVM6ryHCe3Oqwp47Ulwc6o9uZoIXHo36DX1iBVJJypi?= =?us-ascii?Q?BURuOUjosDpNS9SOZJAdO0WUhEcVmqJUbmnk/jajDogpBXnoUousjYA8XJgb?= =?us-ascii?Q?IfF7xj0vT4T5bH27/fH3yJo26laQLN0f66kDbBsUqQjCSMZfBs8qPEAtTgf/?= =?us-ascii?Q?rl2VhruLiRw6whJ+/dAs+4tCPIX5PugZ/SttjKUvkf164QwgfDu0X+tUR9tZ?= =?us-ascii?Q?ZgGXvRHe5RvvAyjlU8LcS5iRIHbh6B5qBBuGg9igR2+72nanRkZA5j0pWXJf?= =?us-ascii?Q?Vy8TSxFjbAziaoyF8FkY6Ho0PNXtfkgcuEJcfyhNR1sbTJpxk9SBllVN/bVn?= =?us-ascii?Q?U5pl3attiXAxuJdJb2lNwXZbcsUzAbeedXUcxHDXSVTFjBWnb/xUfolkYKGa?= =?us-ascii?Q?BrmN6+4Sz3iRqKxU6o/5pvEGEE8THHKUKpDRbGG/mSUWEnBFmnUtCMb6uobG?= =?us-ascii?Q?VPC8PxZHjt2C9NMyFuLgLvf9UAbSShS5CIPNe8F5+YO0vKHf3pC8Sf5h4f6R?= =?us-ascii?Q?3Raad2/3qk5TFqBfKIBjDxnJoea1tguAl5DCmMU9dG3yJ4ASZj+QIvbvI8U3?= =?us-ascii?Q?AMxOuI8+VMf7zU8g+F8JnVJLEJ5hi3bk7XTBPQ+HmLiqCjmP1nHRR1+n0t1V?= =?us-ascii?Q?cNpUyxyduv0+bT0WUtef5UahsS+C9ORVVO9jQg/ZrAcydqvgVB93Z/z3iJEM?= =?us-ascii?Q?GhBMbq9u+JE+7WAQsjR9dBxUqivLMreS4olDriOrftf7OY0r2hBUZ+Hajn9x?= =?us-ascii?Q?BAO2trZlk6urjFufcwT2h0rVU4wR2BMGMXPKpBx0ng15LoniSILuFhiyfBui?= =?us-ascii?Q?SOQhH4z+M6qlnINZAUi8A4oTXCqWyej6iOKktHjlLZM4UrWol9xJAVoIaLmC?= =?us-ascii?Q?wNc/qDgPtIiIgVPVyHENfube0DsSXKb3RHztMEdCLmPIPpf6bG+Cqv6tnT3f?= =?us-ascii?Q?9h5OnbLrBCsn0OeRjyqGAYMi5Rd7OSyDAsNiXJxm?= X-MS-Exchange-CrossTenant-Network-Message-Id: 052e82e0-4e8a-4e68-baa5-08ddbfc3b2c2 X-MS-Exchange-CrossTenant-AuthSource: CYYPR11MB8430.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Jul 2025 15:08:59.7400 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: yZBZE8Lr+HN2gvwHbOCU08jV+YfqLe8pXh5z2Wc4bwWYB1Ug/znQAeBif1Qee3udiVf9Dk0WopLUL9vn16gurA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA1PR11MB7809 X-OriginatorOrg: intel.com Content-Type: text/plain; charset="utf-8" From: Badal Nilawar Introduce a debug filesystem node to disable late binding fw reload during the system or runtime resume. This is intended for situations where the late binding fw needs to be loaded from user mode, perticularly for validation purpose. Note that xe kmd doesn't participate in late binding flow from user space. Binary loaded from the userspace will be lost upon entering to D3 cold hence user space app need to handle this situation. v2: - s/(uval =3D=3D 1) ? true : false/!!uval/ (Daniele) v3: - Refine the commit message (Daniele) Acked-by: Rodrigo Vivi Signed-off-by: Badal Nilawar Reviewed-by: Daniele Ceraolo Spurio Signed-off-by: Rodrigo Vivi --- drivers/gpu/drm/xe/xe_debugfs.c | 41 ++++++++++++++++++++++ drivers/gpu/drm/xe/xe_late_bind_fw.c | 3 ++ drivers/gpu/drm/xe/xe_late_bind_fw_types.h | 2 ++ 3 files changed, 46 insertions(+) diff --git a/drivers/gpu/drm/xe/xe_debugfs.c b/drivers/gpu/drm/xe/xe_debugf= s.c index d83cd6ed3fa8..d1f6f556efa2 100644 --- a/drivers/gpu/drm/xe/xe_debugfs.c +++ b/drivers/gpu/drm/xe/xe_debugfs.c @@ -226,6 +226,44 @@ static const struct file_operations atomic_svm_timesli= ce_ms_fops =3D { .write =3D atomic_svm_timeslice_ms_set, }; =20 +static ssize_t disable_late_binding_show(struct file *f, char __user *ubuf, + size_t size, loff_t *pos) +{ + struct xe_device *xe =3D file_inode(f)->i_private; + struct xe_late_bind *late_bind =3D &xe->late_bind; + char buf[32]; + int len; + + len =3D scnprintf(buf, sizeof(buf), "%d\n", late_bind->disable); + + return simple_read_from_buffer(ubuf, size, pos, buf, len); +} + +static ssize_t disable_late_binding_set(struct file *f, const char __user = *ubuf, + size_t size, loff_t *pos) +{ + struct xe_device *xe =3D file_inode(f)->i_private; + struct xe_late_bind *late_bind =3D &xe->late_bind; + u32 uval; + ssize_t ret; + + ret =3D kstrtouint_from_user(ubuf, size, sizeof(uval), &uval); + if (ret) + return ret; + + if (uval > 1) + return -EINVAL; + + late_bind->disable =3D !!uval; + return size; +} + +static const struct file_operations disable_late_binding_fops =3D { + .owner =3D THIS_MODULE, + .read =3D disable_late_binding_show, + .write =3D disable_late_binding_set, +}; + void xe_debugfs_register(struct xe_device *xe) { struct ttm_device *bdev =3D &xe->ttm; @@ -249,6 +287,9 @@ void xe_debugfs_register(struct xe_device *xe) debugfs_create_file("atomic_svm_timeslice_ms", 0600, root, xe, &atomic_svm_timeslice_ms_fops); =20 + debugfs_create_file("disable_late_binding", 0600, root, xe, + &disable_late_binding_fops); + for (mem_type =3D XE_PL_VRAM0; mem_type <=3D XE_PL_VRAM1; ++mem_type) { man =3D ttm_manager_type(bdev, mem_type); =20 diff --git a/drivers/gpu/drm/xe/xe_late_bind_fw.c b/drivers/gpu/drm/xe/xe_l= ate_bind_fw.c index df43523e9043..88355adce1d0 100644 --- a/drivers/gpu/drm/xe/xe_late_bind_fw.c +++ b/drivers/gpu/drm/xe/xe_late_bind_fw.c @@ -167,6 +167,9 @@ int xe_late_bind_fw_load(struct xe_late_bind *late_bind) if (!late_bind->component_added) return -ENODEV; =20 + if (late_bind->disable) + return 0; + for (fw_id =3D 0; fw_id < XE_LB_FW_MAX_ID; fw_id++) { lbfw =3D &late_bind->late_bind_fw[fw_id]; if (lbfw->payload) { diff --git a/drivers/gpu/drm/xe/xe_late_bind_fw_types.h b/drivers/gpu/drm/x= e/xe_late_bind_fw_types.h index 5c0574aff7b9..158dc1abe072 100644 --- a/drivers/gpu/drm/xe/xe_late_bind_fw_types.h +++ b/drivers/gpu/drm/xe/xe_late_bind_fw_types.h @@ -65,6 +65,8 @@ struct xe_late_bind { struct workqueue_struct *wq; /** @component_added: whether the component has been added */ bool component_added; + /** @disable: to block late binding reload during pm resume flow*/ + bool disable; }; =20 #endif --=20 2.49.0 From nobody Tue Oct 7 09:58:51 2025 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.17]) (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 DC60C273D9C for ; Thu, 10 Jul 2025 15:09:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=198.175.65.17 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752160151; cv=fail; b=jJ5eRpO578RBNbfO50VEQiqn5+7+mNK+qj9JGAuJFWwZ0DAEf0S3pq6kjfRW8L+l57lL3cz4Eh2h3wd3IKkEqkgpqZEPy3TUqBwQwpThOJcMtvm4ZUeTj0Wng1OLI9sa1TKnoHSKnxIYB9sUxl3P8WDTJQNhpQKj5pF4pa9F7UY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752160151; c=relaxed/simple; bh=IyDEY7+NhQ3Bu2KRNQret88x4Zo2tRyWIiNc42Krk54=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=J3JuTSYPGp465BcG5bgwzcuNEHp3soBYbtVNHfj4zR/JLsVytiNyBT01uTT7N5Oa+/NVI7M3PYvoDSR1az+wbBJ3mu0ssu+0jEWUXlmgsau9C2xzvF6zwv17VfCJ5QCz4chBzMB+YzlWT6jRYzz/ICvWdSl9Zudsx/oXIn1O3wE= ARC-Authentication-Results: i=2; 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=Q0sLDj13; arc=fail smtp.client-ip=198.175.65.17 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="Q0sLDj13" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1752160150; x=1783696150; h=from:to:cc:subject:date:message-id:in-reply-to: references:content-transfer-encoding:mime-version; bh=IyDEY7+NhQ3Bu2KRNQret88x4Zo2tRyWIiNc42Krk54=; b=Q0sLDj13KV2wcE8jKZJv024QKejHPKMmQOGHzjTmOb4LmrqBmrsmQLhJ GU30+Ug8qWOKEU27GH2JJ+YyrVKr2tno9pwoMwrup+g9LP7mB32SGfy3J iASsCK3ssEvFS20G6iBSe3urdNbv8/l6H9+6iH1eCqO38/EH3/MuH6G4p 0V1djXHr8LaarTRdvGFSi9ZF5xPmckIWorwB6Oyae4X1ekgCaYt2qO8CJ w+/hYYOOOnTKzqiIGltLB09vVmu54c3AON2OSfzFoR4nHm9O/MrrfK0Ob p5uYFSrg3p+4z9rkZLH2cJoHFcCe7d1RTtSHFyk4bksA5PODeclT1PYPT A==; X-CSE-ConnectionGUID: MQA6jIbET8y9THoNa+mZSw== X-CSE-MsgGUID: OGxBCH4gRWCe+C49Ue+L2A== X-IronPort-AV: E=McAfee;i="6800,10657,11490"; a="54416402" X-IronPort-AV: E=Sophos;i="6.16,300,1744095600"; d="scan'208";a="54416402" Received: from fmviesa003.fm.intel.com ([10.60.135.143]) by orvoesa109.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Jul 2025 08:09:10 -0700 X-CSE-ConnectionGUID: 8PektRdsQlWSASijTOMjFg== X-CSE-MsgGUID: fytMrxnyTxKWHhLbjsh/nA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.16,300,1744095600"; d="scan'208";a="160137799" Received: from orsmsx901.amr.corp.intel.com ([10.22.229.23]) by fmviesa003.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Jul 2025 08:09:09 -0700 Received: from ORSMSX902.amr.corp.intel.com (10.22.229.24) by ORSMSX901.amr.corp.intel.com (10.22.229.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.25; Thu, 10 Jul 2025 08:09:08 -0700 Received: from ORSEDG903.ED.cps.intel.com (10.7.248.13) by ORSMSX902.amr.corp.intel.com (10.22.229.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.25 via Frontend Transport; Thu, 10 Jul 2025 08:09:08 -0700 Received: from NAM10-MW2-obe.outbound.protection.outlook.com (40.107.94.86) by edgegateway.intel.com (134.134.137.113) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.25; Thu, 10 Jul 2025 08:09:07 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=uhXKRXGeRbuikt3/lnpqZZxHqCfREsCB7pYco0J/eCUVwXdnmlfdOOuY9cipTNam/cm6O9SFB6hs/b5jvFqzUrkWlqDICpM4ojfUQGZ6Vvj+1IFo+fGMapthJl5bzRvX50bh8pIoamdJJq4SNVYQY1d5iP8+qO55IxiQA9b7+HsL4GC0Ocvi9qegH5u3TAyYidlV4CxnnPaGhmhMMCxQbDpye9V0aYT47ym2gXGDaHXNLlYMEIld/R2Fr2irQVo5/IFzUBlISmSpk3Qs4A7568g8NIZQSSzCn4x3PQTsbw4nj9Bnkj0e825uinE/to5dkpknOcwHjrtVew/rLq0KnA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=hbpe7Bz80syMJOlIuHBELvcpQue9/HU3q2HJdAjb4Fs=; b=LhhvbGsOZpz9L5+eY7zvTCkbKKBks2h0GmRGJAM9c5K0Sni8agTNX9HqZfQeZ0Z13QkB44QscjPC9/DCV1YeJQ2QEfyLjzGVvZYoIlMnIVwIya1mUfECKhbLLiCI5mfPRqM//boHvVB8IOpEb9tOzxs1EVQHVIXFo5ZURkxnCvsyv1UITMIgsRCI68/uq5/bilQYKF1jsk56T8+50366pNWtiK0sg/Z9yDS+0nvGGS3TaMsPAwaKkHJGnBLXemoR0REHy0wbA6zniqIkr4cavuB9IngQuoUjeggpkcqguWnqDGtozpwu4MfbLV2DENqZoPZIYVKR83srljOv3e6aeg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; Received: from CYYPR11MB8430.namprd11.prod.outlook.com (2603:10b6:930:c6::19) by IA1PR11MB7809.namprd11.prod.outlook.com (2603:10b6:208:3f2::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8901.27; Thu, 10 Jul 2025 15:09:02 +0000 Received: from CYYPR11MB8430.namprd11.prod.outlook.com ([fe80::76d2:8036:2c6b:7563]) by CYYPR11MB8430.namprd11.prod.outlook.com ([fe80::76d2:8036:2c6b:7563%5]) with mapi id 15.20.8901.024; Thu, 10 Jul 2025 15:09:02 +0000 From: Rodrigo Vivi To: , , CC: , , , , Badal Nilawar , Rodrigo Vivi Subject: [PATCH 9/9] drm/xe/xe_late_bind_fw: Extract and print version info Date: Thu, 10 Jul 2025 11:08:40 -0400 Message-ID: <20250710150831.3018674-20-rodrigo.vivi@intel.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250710150831.3018674-11-rodrigo.vivi@intel.com> References: <20250710150831.3018674-11-rodrigo.vivi@intel.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SJ0PR03CA0098.namprd03.prod.outlook.com (2603:10b6:a03:333::13) To CYYPR11MB8430.namprd11.prod.outlook.com (2603:10b6:930:c6::19) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CYYPR11MB8430:EE_|IA1PR11MB7809:EE_ X-MS-Office365-Filtering-Correlation-Id: 8613ddc5-f136-41af-2719-08ddbfc3b475 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?BfFbKzBS77pUPuKQ2oUGu1QqASPqA1XjzHvaAKPbAsAlOz1yGMkiqlvzRHBw?= =?us-ascii?Q?gn1PGAqfrVXTNqhq/4eDuoYLFs4COnzX6XKj4TfdMyXr0CJxBzH8AXHyXZ0h?= =?us-ascii?Q?/9+Cr6XVqOghFjLvVurB0s/id6ZMAt71xgUpqcC5o6lA4DFh91gEmHVABj+h?= =?us-ascii?Q?jD8En8fC9D6JXeQqk90XvrPQZUfeYCyPJb8+EkeEbMzVyivwBB3pi0vbH0rT?= =?us-ascii?Q?FQu5eL6dfiTmmSAT8KYKycvhLaAZYrlGG4HBL6b99KKV38HLeMpB+Q2Sdxhy?= =?us-ascii?Q?TTV7Mev575IiZH5Idh/IVzclszuZDHZwNxqI8SOmj8ecG03YIqI7wH7kd+pV?= =?us-ascii?Q?pzk4htXFV/CRCwTCTltqPb5t5rBZ6/XmNOqXi9r5b77wuhH3utq9DNQUoc61?= =?us-ascii?Q?ynBHKRpoU8Ca1yZWb0JY8k4cY10JzHxhZgrKpNF+DFjEERHrEQWDMuU/21r7?= =?us-ascii?Q?lpZQNRJ3EL2A3AJJFNgP8FyBNABR3t4IXvtQcozrbdv68mgJNra/LPGQfi2a?= =?us-ascii?Q?912Qg+S6r3gW/s2uKRiJG/fKubT6SRGFGq1eJODZo+zwmecTaU0C517yivnx?= =?us-ascii?Q?5eFF3LgjuSLlpr3I6vzueIWIYP+rB5VDR38237W5uCDnnzKV8EZahUEfKYhw?= =?us-ascii?Q?2iHhH9bm+ntWdSdv2okM5V6ozE4Zo/cIdTcrNWOQ5pZitoEGt7OO38hj2Did?= =?us-ascii?Q?ROTl2jP+e+1+encXkaQpNNVVDEs5kbfZ66z6MfJiMboVCNg4iPI4xIlfcQFr?= =?us-ascii?Q?k999qTof8UPTTQqSgnuw3MbFgvDrhjQzQVXtZcIMfmp/v0hPHnkmXo6N0l3d?= =?us-ascii?Q?jCx25GiFijFW0HSf/9hRhR/M8cz//YwULHLCGP03HL9KzvD3c/BgOgR3qwuO?= =?us-ascii?Q?+4Isd7Wj1c/iVPqjhnsHMbyAuxCHLNmlcIV5wfKOti6bEXxOQzPfkNISYPE5?= =?us-ascii?Q?RwTWIM9tw94TVP9TV7zq3yNAqbN/HZEcT9NSvpyvCZhho6eIRN/V0yk2L/c/?= =?us-ascii?Q?10PJ/qEsHIP65pG2wOcX0t1Qw3PmrdNxq1QXupePPThc/+CJm+N3jbZ02NgL?= =?us-ascii?Q?tU9A6CFfR3B2yUe2WDwMOkZkSfVshMBvn/mo3/FV8ubUt5m2G8/by0A2ZwFs?= =?us-ascii?Q?OnAj1gabQyyPJX2oyFaTxc246sMaB2x9LZ73NLTGRlOPl0fnjrf0j8QBUCF/?= =?us-ascii?Q?A4wp2XHsdPvWXLSkn/xWXvy1G1Z7b+5qqndqgUBDNLgCn9MJ/ZnfbkU9LIpw?= =?us-ascii?Q?bDXmac6qfOpctbHGnS0OTV1NBjf0e6ZwuIHEtRamqFFlfnnpcJIzdfDuiQXB?= =?us-ascii?Q?w58Ed/JBJrJdPWENoUNKxBYg3TUNDekte7kAu3sieHoPxmLYH/EwJhacVCGY?= =?us-ascii?Q?batbwr6nXUs000p9tTeN5QzqiOn2hmWJzC/Ed0fLzazbaWITFHPKqVqIepMr?= =?us-ascii?Q?DqRd4hAilZ4=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CYYPR11MB8430.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?mr5GiL+E0IaM5fPOUmAepo0QwSLIEUHCrtjYPHhyGoGJGjG/Go3/vbMT6ByD?= =?us-ascii?Q?aO7YpzDxj+NHxlQFEDeqCU78cco6b0+Mvl/c1XWUzvLOico4vboDdSmaNPdn?= =?us-ascii?Q?yuZP9ShSvz/ecL3YRwG4YA5uSuDAbUND4nb1+dGZKcTyR0edIDQ6xI6iuZQd?= =?us-ascii?Q?pMNyg5iGs3hBjIf8k3Tl66ytALwJHKEMl2kO/S0IFz6+mb07KN/5krRMfNTg?= =?us-ascii?Q?7yheyo78UQYlG7SdXOTET/OrmgeS+yTx1KHEtD1p1D63e+SaQ8vS7pMI3vOr?= =?us-ascii?Q?8JkiP+t1bwLYD23B9UN4U+28iba/CR+iyt0dqfYotZ9iCCmqsDO3RjIZ3p/Q?= =?us-ascii?Q?LajxgwdQqcTv6xn4XxoF7DaNiF0sQQGgSILnV9kkyF2eYvgVGVcG2qsmVPH2?= =?us-ascii?Q?gBk6hKHNv+5pOC1FgCRAaYCzqnDh8OFhs9UCgwKo80Ti9f2o7vUEzupNB4s2?= =?us-ascii?Q?HI8HFY47jJQIkZAYnCPg+L2h44eEdk5XgBGVkrqxcWpvZP01j7LEyTrOYmEh?= =?us-ascii?Q?N2cN2F2eITJT6dsSk++HgvMiRJYmwPrlklzQeki+0QkooUfAGM1Tvw23zYUs?= =?us-ascii?Q?6OojlNsdKzwigmqeRSxT62pluSV4ikk+Gf3/NItJcLkRTgDSoAybECJ2fB5g?= =?us-ascii?Q?8n0XRfXW/sAkDKgqoipfZhUvPK4Orpjg/2QA5HQim6CLH7HkWGI7ywq8y6Zw?= =?us-ascii?Q?PC/MYoGoMUGw9L23sASXvAQH2y2QxhdxyjxEHqQSMJsZdmwAFw0Vrh6c3nQ1?= =?us-ascii?Q?7O0DJcpkjmZwXuqXNViyzDB6Y6FcAsxw8hZS9NH12qMUWO4g1Q/zI2/Si81i?= =?us-ascii?Q?ZLRGY0D81M+QKexcle8eYBNvZG3utmpah6uFD3zXlYXy0fbuZ4MlhBxl0EQd?= =?us-ascii?Q?B7KP6lr4HoAKET3Tc2vvazxhEl1+ks+Ik3MOm7ZGGpfCCi6dvH2tBQTRFXtj?= =?us-ascii?Q?2MPY7MqyvFjuFJGUfaVownFuNnJd8olL+/WYV2mpSxRUXlYP8odUSJdJ4cv9?= =?us-ascii?Q?1Dthh1HQ0tM3U+yR5wulRGZqpgn+XkmcXxeL4thum79f/CNUd2Xx0jpmem0J?= =?us-ascii?Q?VhpFDqKjG50t8W6Z7/1y0k3ry0duxwM8uMZLk/2FbSVZ8q/xOBafGTfxx3r3?= =?us-ascii?Q?HtH04oajZfJe+0lKNFC8JLw2rRKfH04xeudbFIioKITuPvQ/YR2RAKjOnuE9?= =?us-ascii?Q?RbaVg3fGxnwqmy3lC9ylnSLdY0lx5v5dDWd2p7yaT10PfZ0tsEc/d49rZDrN?= =?us-ascii?Q?Pue7zxNaR7rBlkV1zM6R5IS+lWkdC3q0IwzFH2AMDalvox1DQe71QEwxnPwL?= =?us-ascii?Q?Z3LLLGSPebShhPRdO660Uue5bQSEKggoVGJyYNDbsh8duVQAbpu9xUzlHrO0?= =?us-ascii?Q?iJYQEP5sk+TiD547IpyJP0/CIwbkEPR37mQQOS0j5q38a7gG3kjbLhV1v74k?= =?us-ascii?Q?DtZJrHx5pzgnHjfk90IKhtkAHNYdro3BGnZ4yj1hNPcVO3UZUqnxIrDpONE8?= =?us-ascii?Q?jlKzfEOByF2l2Uu0WbfYDfKciXe7sc//zDkJUrV6np61ba5DANz2pHHmMDsM?= =?us-ascii?Q?3hb6b/TcftWo9mQWcQEAnNKrDCIDYxDE5njClq+w?= X-MS-Exchange-CrossTenant-Network-Message-Id: 8613ddc5-f136-41af-2719-08ddbfc3b475 X-MS-Exchange-CrossTenant-AuthSource: CYYPR11MB8430.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Jul 2025 15:09:02.5547 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: /ytKCZSEvlheXsejuXqzOxkmY6CRTq2zBnB2JB8+JBQ2QjOq5T1eyA8F9vqdMDrrbHl1PQY4bdjLHPtbUa2EUg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA1PR11MB7809 X-OriginatorOrg: intel.com Content-Type: text/plain; charset="utf-8" From: Badal Nilawar Extract and print version info of the late binding binary. v2: Some refinements (Daniele) Signed-off-by: Badal Nilawar Reviewed-by: Daniele Ceraolo Spurio Signed-off-by: Rodrigo Vivi --- drivers/gpu/drm/xe/xe_late_bind_fw.c | 124 +++++++++++++++++++++ drivers/gpu/drm/xe/xe_late_bind_fw_types.h | 3 + drivers/gpu/drm/xe/xe_uc_fw_abi.h | 66 +++++++++++ 3 files changed, 193 insertions(+) diff --git a/drivers/gpu/drm/xe/xe_late_bind_fw.c b/drivers/gpu/drm/xe/xe_l= ate_bind_fw.c index 88355adce1d0..171771639761 100644 --- a/drivers/gpu/drm/xe/xe_late_bind_fw.c +++ b/drivers/gpu/drm/xe/xe_late_bind_fw.c @@ -45,6 +45,121 @@ late_bind_to_xe(struct xe_late_bind *late_bind) return container_of(late_bind, struct xe_device, late_bind); } =20 +static struct xe_device * +late_bind_fw_to_xe(struct xe_late_bind_fw *lb_fw) +{ + return container_of(lb_fw, struct xe_device, late_bind.late_bind_fw[lb_fw= ->id]); +} + +/* Refer to the "Late Bind based Firmware Layout" documentation entry for = details */ +static int parse_cpd_header(struct xe_late_bind_fw *lb_fw, + const void *data, size_t size, const char *manifest_entry) +{ + struct xe_device *xe =3D late_bind_fw_to_xe(lb_fw); + const struct gsc_cpd_header_v2 *header =3D data; + const struct gsc_manifest_header *manifest; + const struct gsc_cpd_entry *entry; + size_t min_size =3D sizeof(*header); + u32 offset; + int i; + + /* manifest_entry is mandatory */ + xe_assert(xe, manifest_entry); + + if (size < min_size || header->header_marker !=3D GSC_CPD_HEADER_MARKER) + return -ENOENT; + + if (header->header_length < sizeof(struct gsc_cpd_header_v2)) { + drm_err(&xe->drm, "%s late binding fw: Invalid CPD header length %u!\n", + fw_id_to_name[lb_fw->id], header->header_length); + return -EINVAL; + } + + min_size =3D header->header_length + sizeof(struct gsc_cpd_entry) * heade= r->num_of_entries; + if (size < min_size) { + drm_err(&xe->drm, "%s late binding fw: too small! %zu < %zu\n", + fw_id_to_name[lb_fw->id], size, min_size); + return -ENODATA; + } + + /* Look for the manifest first */ + entry =3D (void *)header + header->header_length; + for (i =3D 0; i < header->num_of_entries; i++, entry++) + if (strcmp(entry->name, manifest_entry) =3D=3D 0) + offset =3D entry->offset & GSC_CPD_ENTRY_OFFSET_MASK; + + if (!offset) { + drm_err(&xe->drm, "%s late binding fw: Failed to find manifest_entry\n", + fw_id_to_name[lb_fw->id]); + return -ENODATA; + } + + min_size =3D offset + sizeof(struct gsc_manifest_header); + if (size < min_size) { + drm_err(&xe->drm, "%s late binding fw: too small! %zu < %zu\n", + fw_id_to_name[lb_fw->id], size, min_size); + return -ENODATA; + } + + manifest =3D data + offset; + + lb_fw->version =3D manifest->fw_version; + + return 0; +} + +/* Refer to the "Late Bind based Firmware Layout" documentation entry for = details */ +static int parse_lb_layout(struct xe_late_bind_fw *lb_fw, + const void *data, size_t size, const char *fpt_entry) +{ + struct xe_device *xe =3D late_bind_fw_to_xe(lb_fw); + const struct csc_fpt_header *header =3D data; + const struct csc_fpt_entry *entry; + size_t min_size =3D sizeof(*header); + u32 offset; + int i; + + /* fpt_entry is mandatory */ + xe_assert(xe, fpt_entry); + + if (size < min_size || header->header_marker !=3D CSC_FPT_HEADER_MARKER) + return -ENOENT; + + if (header->header_length < sizeof(struct csc_fpt_header)) { + drm_err(&xe->drm, "%s late binding fw: Invalid FPT header length %u!\n", + fw_id_to_name[lb_fw->id], header->header_length); + return -EINVAL; + } + + min_size =3D header->header_length + sizeof(struct csc_fpt_entry) * heade= r->num_of_entries; + if (size < min_size) { + drm_err(&xe->drm, "%s late binding fw: too small! %zu < %zu\n", + fw_id_to_name[lb_fw->id], size, min_size); + return -ENODATA; + } + + /* Look for the cpd header first */ + entry =3D (void *)header + header->header_length; + for (i =3D 0; i < header->num_of_entries; i++, entry++) + if (strcmp(entry->name, fpt_entry) =3D=3D 0) + offset =3D entry->offset; + + if (!offset) { + drm_err(&xe->drm, "%s late binding fw: Failed to find fpt_entry\n", + fw_id_to_name[lb_fw->id]); + return -ENODATA; + } + + min_size =3D offset + sizeof(struct gsc_cpd_header_v2); + if (size < min_size) { + drm_err(&xe->drm, "%s late binding fw: too small! %zu < %zu\n", + fw_id_to_name[lb_fw->id], size, min_size); + return -ENODATA; + } + + return parse_cpd_header(lb_fw, data + offset, size - offset, "LTES.man"); +} + static const char *xe_late_bind_parse_status(uint32_t status) { switch (status) { @@ -224,6 +339,10 @@ static int __xe_late_bind_fw_init(struct xe_late_bind = *late_bind, u32 fw_id) return -ENODATA; } =20 + ret =3D parse_lb_layout(lb_fw, fw->data, fw->size, "LTES"); + if (ret) + return ret; + lb_fw->payload_size =3D fw->size; lb_fw->payload =3D drmm_kzalloc(&xe->drm, lb_fw->payload_size, GFP_KERNEL= ); if (!lb_fw->payload) { @@ -231,6 +350,11 @@ static int __xe_late_bind_fw_init(struct xe_late_bind = *late_bind, u32 fw_id) return -ENOMEM; } =20 + drm_info(&xe->drm, "Using %s firmware from %s version %u.%u.%u.%u\n", + fw_id_to_name[lb_fw->id], lb_fw->blob_path, + lb_fw->version.major, lb_fw->version.minor, + lb_fw->version.hotfix, lb_fw->version.build); + memcpy((void *)lb_fw->payload, fw->data, lb_fw->payload_size); release_firmware(fw); INIT_WORK(&lb_fw->work, xe_late_bind_work); diff --git a/drivers/gpu/drm/xe/xe_late_bind_fw_types.h b/drivers/gpu/drm/x= e/xe_late_bind_fw_types.h index 158dc1abe072..0f5da89ce98b 100644 --- a/drivers/gpu/drm/xe/xe_late_bind_fw_types.h +++ b/drivers/gpu/drm/xe/xe_late_bind_fw_types.h @@ -10,6 +10,7 @@ #include #include #include +#include "xe_uc_fw_abi.h" =20 #define XE_LB_MAX_PAYLOAD_SIZE SZ_4K =20 @@ -39,6 +40,8 @@ struct xe_late_bind_fw { size_t payload_size; /** @work: worker to upload latebind blob */ struct work_struct work; + /** @version: late binding blob manifest version */ + struct gsc_version version; }; =20 /** diff --git a/drivers/gpu/drm/xe/xe_uc_fw_abi.h b/drivers/gpu/drm/xe/xe_uc_f= w_abi.h index 87ade41209d0..78782d105fa9 100644 --- a/drivers/gpu/drm/xe/xe_uc_fw_abi.h +++ b/drivers/gpu/drm/xe/xe_uc_fw_abi.h @@ -318,4 +318,70 @@ struct gsc_manifest_header { u32 exponent_size; /* in dwords */ } __packed; =20 +/** + * DOC: Late binding Firmware Layout + * + * The Late binding binary starts with FPT header, which contains locations + * of various partitions of the binary. Here we're interested in finding o= ut + * manifest version. To the manifest version, we need to locate CPD header + * one of the entry in CPD header points to manifest header. Manifest head= er + * contains the version. + * + * +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D+ + * | FPT Header | + * +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D+ + * | FPT entries[] | + * | entry1 | + * | ... | + * | entryX | + * | "LTES" | + * | ... | + * | offset >-----------------------------|------o + * +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D+ | + * | + * +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D+ | + * | CPD Header |<-----o + * +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D+ + * | CPD entries[] | + * | entry1 | + * | ... | + * | entryX | + * | "LTES.man" | + * | ... | + * | offset >----------------------------|------o + * +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D+ | + * | + * +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D+ | + * | Manifest Header |<-----o + * | ... | + * | FW version | + * | ... | + * +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D+ + */ + +/* FPT Headers */ +struct csc_fpt_header { + u32 header_marker; +#define CSC_FPT_HEADER_MARKER 0x54504624 + u32 num_of_entries; + u8 header_version; + u8 entry_version; + u8 header_length; /* in bytes */ + u8 flags; + u16 ticks_to_add; + u16 tokens_to_add; + u32 uma_size; + u32 crc32; + struct gsc_version fitc_version; +} __packed; + +struct csc_fpt_entry { + u8 name[4]; /* partition name */ + u32 reserved1; + u32 offset; /* offset from beginning of CSE region */ + u32 length; /* partition length in bytes */ + u32 reserved2[3]; + u32 partition_flags; +} __packed; + #endif --=20 2.49.0