From nobody Wed Apr 8 09:22:25 2026 Received: from DM5PR21CU001.outbound.protection.outlook.com (mail-centralusazon11011028.outbound.protection.outlook.com [52.101.62.28]) (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 1D3D62C11CB for ; Tue, 10 Feb 2026 06:46:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.62.28 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770705970; cv=fail; b=VaxjbCNFUZtHQtQ53bOPcGFqtlMYWQe4Bvyzz9igmNr8eKpTSmoseNVZ40d2SdW1aqmOgLMQ/L/r4U0fEiBHfNjIqdSjHKWhQXIGu7mWlFeyTofDca6TjEypIqAX3Q93tVgTJkPlxVOgMh6Ac0NHWpNfxxABnbfeNSsvGn0s+Fw= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770705970; c=relaxed/simple; bh=x2XR8Obgfpu7CILN1NSfSIskDi7B+LsIYDwKZIJbF8I=; h=From:To:Cc:Subject:Date:Message-ID:Content-Type:MIME-Version; b=dXjpRBtyQeaLz+GAtOenfWf7+XS/EXr6+DIr+TGokWifySiYDeeylCPwsCf2IG37qIZf6JVEnk9Mh1yCu4nZOOowzYGPfCkZCRy4kKCBWM4+1+B5H4asQKj1Gxci9F8tb6YO7r5EZJAv6F7bi/Xb4KBBIf5hI9RlKNYmK+UhJko= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=altera.com; spf=pass smtp.mailfrom=altera.com; dkim=pass (2048-bit key) header.d=altera.com header.i=@altera.com header.b=aSKdXNGy; arc=fail smtp.client-ip=52.101.62.28 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=altera.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=altera.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=altera.com header.i=@altera.com header.b="aSKdXNGy" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=cBiMXST6Crj5civSayJmyyot9XWnE7zmC5e9Q7z8ExHMAK4dH198i0VJrmpQ+uLj4Is4gmKZS4KquT5qJxzvpRjlNM/2KA4/Z6W4QWCSCojoDwiLPokL92pH0PphkXaJJhV0TBB3hNjtA5ox0L5UE5r37Ct9glgQSpU0QZcuTglpJpG+TurSnm2F7y/DE+kCDzGXAEmTrmc4ooEOnWzwPExVByBGPVBaTtjuhYhmDv7ZM3aoLD9c/jKVuttGZKIZNyu8DJzzY7ofMmVPyTeHESCewqJOm+zta7GDmFAaGfTsKIBl1mslSpjS4ZEeKQSu8xFM5gahajVLFmbJS5C/+A== 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=IhwEML3jQsvc7xFCpc9eH3GYcLjYbdYxH1fJJZm5Ppg=; b=fTXtQK+VfIcUWwWooqMzLaHAOABHR5GuPv7SV+0LFQBNk43frlywAfjRrsQVC/+HDOgCVvOIOKH/J7MOuO6Xm1yh0wyhTvZ9OPu+71yzUouPYHFFfmJVp7hFowLzKHuVHzKudIBKU5h7KdFONZ4wyZc16xHRbGT+WA5vRRko+AZMkyEuABmvhoa09nd1Z8GCeVrdAa48dhNePLejK2yPb1AvLMLXsdHuAAk9ihhyzcMEDbkX6tZNq0XNRhbvuJ9FCL6/Qg2iLUIl1l+yLUIhc+CHT/9NAoqwZdiv3wJlJhaUK1GUr3In3pcF5ytxRwshux+aklz2SUrM6Wy/o7pLlw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=altera.com; dmarc=pass action=none header.from=altera.com; dkim=pass header.d=altera.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=altera.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=IhwEML3jQsvc7xFCpc9eH3GYcLjYbdYxH1fJJZm5Ppg=; b=aSKdXNGyiw3b7PIVBxrCDg0UuZh1GfMAnblYIHov/nWynJJkVePVMU6innUUW4fzT16egTEKH7WSnt7WQpWjYb0wLIyDVkGkO6B1MW9LuwBsKpfVC0J32I6xcobAbInt3UKE+50WF/ar+RNzt2O8/GzZSRt9QieZvEUIU8EY5qoHNDzK3Fo43YGC4yfUglhop3kscT1uCaVqGeexRazp7I26Iwo/O8hZfLmhY5reBLZRFxvlTB6I+JAFdPs0LF3Af14HXxFH/r+lcUuUDPSRYk2qzJO1euubHNUovi1WxprgDksbTCPXJx7uVvQTPu8MnuXQAa5C160G5qNXRQOo3Q== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=altera.com; Received: from DM8PR03MB6230.namprd03.prod.outlook.com (2603:10b6:8:3c::13) by DM6PR03MB5130.namprd03.prod.outlook.com (2603:10b6:5:1e3::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.12; Tue, 10 Feb 2026 06:46:06 +0000 Received: from DM8PR03MB6230.namprd03.prod.outlook.com ([fe80::abad:9d80:7a13:9542]) by DM8PR03MB6230.namprd03.prod.outlook.com ([fe80::abad:9d80:7a13:9542%4]) with mapi id 15.20.9587.017; Tue, 10 Feb 2026 06:46:05 +0000 From: adrianhoyin.ng@altera.com To: dinguyen@kernel.org, linux-kernel@vger.kernel.org Cc: adrianhoyin.ng@altera.com Subject: [PATCH] firmware: stratix10-svc: Reduce polling interval for command status Date: Tue, 10 Feb 2026 14:42:56 +0800 Message-ID: <8dae092132148a7da80641801739b56d44883a65.1770704846.git.adrianhoyin.ng@altera.com> X-Mailer: git-send-email 2.49.GIT Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: KU2P306CA0062.MYSP306.PROD.OUTLOOK.COM (2603:1096:d10:39::16) To DM8PR03MB6230.namprd03.prod.outlook.com (2603:10b6:8:3c::13) 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: DM8PR03MB6230:EE_|DM6PR03MB5130:EE_ X-MS-Office365-Filtering-Correlation-Id: 1bf125ce-c6c8-4d74-ba8c-08de68700ff4 X-MS-Exchange-AtpMessageProperties: SA X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|366016|1800799024; X-Microsoft-Antispam-Message-Info: =?utf-8?B?V2I3YU1hTEhLWVl4L2NuKzFBbVJtWFRpQVF4d2NsWlA0NVFmd3ljVVRNWW5a?= =?utf-8?B?MHNJMUN2R0ZzVzZ1bkwzKzhMNTlIQk5kTDdqR2JGeUFwR0ZVVE5kU2xsM3h2?= =?utf-8?B?cEJadllaUFFBZjY4TkN2OEs4dVRmWUova0lGc0Y4RCtYTDk2SWdtYml2NHRL?= =?utf-8?B?ZkpWN0VCSVc2Z0xRaVZSdGN3dWJIM2o1dHFTc1lyYzkrNE5kdWlWN1dXYk5C?= =?utf-8?B?TUI5cDJ6Zlp3NVNNTUNWV1pQdmhJMTdsSC9PNU5wSE9wY1MvbU9oVHRmNk5M?= =?utf-8?B?TnVWNHZRZjdtWjNMdkNndTZ1OXQ3czRPYm1CRlBmL0FUcFpWR05OUkZmY1B4?= =?utf-8?B?cHZrejJxYTBDSlZJbnpyL3BzbWVoSGVmakRDaVBkbG5HalYxdE4yejl5MlZk?= =?utf-8?B?UGNUVXl5eXJWK3RKZlh6NnNoZnZxcXJDcVE3c2lWOFo2UTFkK1NhcDRjN0pW?= =?utf-8?B?djRYVDRrZ3YvOEJXcG5tZ0hJNFVPNmhPanZGV3NPdlRudFlHckFTcUlXNVlF?= =?utf-8?B?SVYrcXVlaktKSFBEUDlBVEU4ZXVwaXpsMFM4M3VabG56bG5zL04vaUMxVkt1?= =?utf-8?B?ZE54a0dGT21zUHZ3cGh6UTJmZ0Z2NmhXVnBoVjE2NXNHR1QwREt0U2dhVnpP?= =?utf-8?B?MWZqMHJFS1ZERmJTUTB5NG95N3N4RFpKZmNFM0FKMmg2L0VWVkNHRXBCREZR?= =?utf-8?B?eXliTjJzTXlIU0J4NFFrVnd6RHlUNUhvSm81VXdmWUdBZ1ppMFhHdnRiSElw?= =?utf-8?B?WW4vcU5SZXdRVHN6c2xhTjBhaE14Sloyc294RWM3OGZhVWxjdzVJSmR3ZWZD?= =?utf-8?B?RzBKTEZPNmRDdHpBaXlJemNrL3FwWk5ka0ZHTUpyQVBiRXpnNUcwd2RBYWRX?= =?utf-8?B?ZyttQWNvT1ZPdng2Y2FhdUlFQUhSeEF0ZTY2cEhrdjJRcWk0ZDJ0Ni82dmxY?= =?utf-8?B?VFh5UnpHY2tWcmN6eDJ2UW5LUTRMUmgwZGhpYklXMnFSN1k4VXFTcEdrN3JI?= =?utf-8?B?RjcvTFJWeUlxWC8wZ0pjNGJNMVFmN2llallXNjN4S2piQ2x2Z1hZREVxUXJi?= =?utf-8?B?S3lmTzVNNkhORmpCa0pmYmlZVXZ5V2p4VEJpTHBPczBqUTBWVFlxYWlRVE5a?= =?utf-8?B?N3VQM2pxN3M2ZHZQeTNCOC9PYnNnbmVWRHh4S0hFV2N1UG9CSGhSU3JEL0x5?= =?utf-8?B?d2dkc3dXZ3kwc3RmbjRaQUs5TGl2QWhRMXJDNThPWmVKK0dyZXNqRVY5Mk92?= =?utf-8?B?OHJVVjhaUWZsSnV5T2ZHRmRnQUFtc2F2TjM5OStGM2FBdW1wU1JyUlpKN0Rq?= =?utf-8?B?dVhSSUJ0a3ZEYXJMdWdkTUJTQmxUMXVsYW44NnZJV01uTFdMRXNUazdmdE0w?= =?utf-8?B?QWhuWEkzNzdad3RlNkJiaUttaDRxdHZvOWNuc0R4cWdMRUJrNlFsUEVzbSs3?= =?utf-8?B?WnE3c0syYWV4Ymh5d2xCb1VXVUlHYTJpRVZkK0xTWWJsWGtCYXVqRW82QmJr?= =?utf-8?B?SjJyeStWY2FkUkF1SEdpeHZnQmZIa25mODFodmNBYmlMd1FpRnZWMFNMVUFR?= =?utf-8?B?QlZ3MTFCencyVmhKNnNzeVBaaTZjRHJiRGdHbmtjV24rRXFIRy9uRzNpNW1o?= =?utf-8?B?RWkyMllSZDVVUithMUV3SVp0TnpWTnJXTUVlbUxLWXNzOTdEQnVtWWFqL0hv?= =?utf-8?B?NFgrVWh2TDAxVFI5VFg1eHl5dmRlTnovbjgrdlhqakFRQnc5ellZUTVjSVpJ?= =?utf-8?B?K2U4cVpkcmw2MFlmUmZ3Y2NILzNFNzFOcjVwV0xaQlBwM24zTHl3aW5SRTZV?= =?utf-8?B?TnFwSS9KNTNzcE5Rb3lxU3l5L3IwMlZjSXF2eGN5eVFXMVRRdTE2OUp5aTdS?= =?utf-8?B?WFdwZG9uM3ZWSnQrVnZDMFBxcjZJUGZYNXFUTE50b2lkcmk5bTNVd24raTRK?= =?utf-8?B?OXI1NnFubFBlSXJTNFpFSWJxcnJSVVNXZGtncmhBWUswWHM3MXlQQmxrYzdw?= =?utf-8?B?TUlrSG12L0tUUzF4anNGVFJoczZxdFVGditFVUZlWUN6YzF1cXpEYk1CazVl?= =?utf-8?B?dmVoR0k0TGpUemhHMisrdDBlbDZpcFIvM05oNmtJcU00NU40ajJtNUJHQm5s?= =?utf-8?Q?Ddfo=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM8PR03MB6230.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(366016)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?V1M0ekF2QW40TG5uT0NsV3lISzlDUUdESjBES3NuUHJHNmFOWGd2VjlkenAx?= =?utf-8?B?NmxuNVhKdEhSS1ExVTErYzdCdlFVamtxajk4SWFLUzJGWWloUWxrVTY1QmN6?= =?utf-8?B?OVdyMTBRNDVteWhoWnlmQUpVMjFDR2cyVmhiK05XRm43K1U4YWpwQUFnY1ZV?= =?utf-8?B?WkxZeGtzKzc1bEJlUERnSmN6NVk0d0o2b3MrNEx1TFJRUzdnS3pZK1d6MFBm?= =?utf-8?B?cERJdU9ab0hpMEFXZWpuQk8zeUdsaGE2TjFHaW9PR2lUYllUSFEzeU9KWDF4?= =?utf-8?B?dlNDeDJWRzdDRkpvT21pWUozYUR4VjJsVGowc3pqOFpPRzMrdDJvQmoyRVdG?= =?utf-8?B?UDlqUjd4SXdLSnNBUENmYVdOUHgvL2RDK21lZEUybldXNWQ1aHphL05VaEFn?= =?utf-8?B?R3Y3eFN2THBuVy9xQXZKOStLTWMzYVRjMFI3c1NXcmQzcnJvR2pWYTVGak1l?= =?utf-8?B?RlJIZEhGOXB6cHByUjlzRU9ZczFQTWZoaUxKRmNOVEgwN1BKa2E0TS80cGxn?= =?utf-8?B?eVlYRXNMZllOUXJ1UHZaQ1hnSmFYUjlua2R0dmpZYWRjVUxnUlhtNkl6a25E?= =?utf-8?B?TW8xRklvZWNWdXBlNXNQK091d3VGcXROTDhLVEVRZDVaY1FYemZGa3NRNU0z?= =?utf-8?B?QUJ0MFBUc3NWeCtLRzRMcVpYR0NtVnQ2VkVhUDBnODZqZjduL2hXcGIvb0tL?= =?utf-8?B?OU1MWmNIcWFkRC9SR3dPQTN3azI0ZTA2UHVacWVaY2duVEEyTnBERDRYZ2tl?= =?utf-8?B?V1BFMldqZjJHTVpRUkZ1b09DRVI1NVJoQnFjbVFqaklZTlBDREJHT2JFTFk1?= =?utf-8?B?VjJjRTFuVnZKRGExaFB1ODJOYWRUREg1ZHcxRnZCQlpiWmJoUy9rWkdBTzAx?= =?utf-8?B?aE1VaUN5czBWTXgxZnA3bkdHKy9rNXdUU0F3RWpBRVVacWpkd1BTQmR6MmVn?= =?utf-8?B?YkVndkE2UVZTcnlHakNkTHVzTEFtT3VhekJBU1NWeDRNY1VYQzdMUDM3VHVR?= =?utf-8?B?aGFpd21ybVo0c0hvWUhHNmg1c01NWVhsMm9MYjlSOVdMRXdiTTVlcmxLcWxR?= =?utf-8?B?bkZERFVTYzhlYU1qaitLakU4UTZMcDY3MGVmeUhvN29KNVpBRi8zTXBQVmpU?= =?utf-8?B?S29rK0xiMmRVdElqdDh2R0x0WGNTQk5ucVhJSGljV2pwcnJDN3czbDMzMGhh?= =?utf-8?B?RXk4TlcxWVFQZEFZdEVNT3dPd0pPaXVteGxMVHdUbVh4M0w3RUNBYjdwekZD?= =?utf-8?B?ODVLbHRkM0kxc1kra1IxaThWUnMxa081aGhlQWF0NTdTZ0l5MUdnOC9pcVlG?= =?utf-8?B?blV1dS9KOG9zNXFGWUxFY0RZeDUybEFxK2VCOWYrUjVMNWFheFR4QzZNelVl?= =?utf-8?B?Y0NJMVIraFBaeWtHalkrTWtxSHZ5TkFBb3loUGo4YkErNVBtTmV4MHVZM0Vv?= =?utf-8?B?SWpnQWtHemovenBYNXlOY2c3eUwwcUNVSzRsWE95eUhhZ01wMnRRVEZJOWdy?= =?utf-8?B?bVUvNEhLWW92V3FrZ3djdEpWK1Faazk0c0wrYUMzcStJM0gzaXVnRXBqV09t?= =?utf-8?B?ZXZYK3FweTRJeUpTVFBiSmtobytFQlZaOFBEZ0pxY2NMcy8ydFhBSjcxZE1v?= =?utf-8?B?WWhXUklZbWpaV1Y1OExXL2p5NEZhM0JGQ0s2cVdaZUw3RGRQWHk5R3hGdFF6?= =?utf-8?B?dmNpNlBGc1ByMHVkM0dNT2VKTGZaWHJySWRoSDJJUmY3R0hKN0Nrck1nQVc1?= =?utf-8?B?MVh3LzdZM2o4QnY1WnVGc2hTTEptaEx6OXdKcnExelhNRFpMa2ZmMDdDNFBV?= =?utf-8?B?bHB4bVByUmVLRk5NcVQzdW9KWlJXb2tzb3NHSGwwMGpUVFdWM2pMMFRtRTMz?= =?utf-8?B?dGJvWE5RZytnZDRGdlhwcjlGcW1ZUy85eU9vdGNJWlUwVkN1K1BGdUVDQyt4?= =?utf-8?B?OGFzMFZQNHRmN1lEVE9Ecm1iSTVDdzIxSWpmWFN0RWpZMkF0bStRekswQjZL?= =?utf-8?B?NU9WSDcyRVcxbGhOeGxmSDZuR1BmYnMwR0MvalRUMkNRQlQzRDFiNnpFMUhG?= =?utf-8?B?RnFxUFZGbUZYOXhWUVlXNlFxYUxyNzJQNWVjL05uekFuMUw4NE1Rc3R0Q1VY?= =?utf-8?B?dFRybDZxd3pnczJCYm5jdjBjN3dSK24yYTBGelAzQ29pTTlTY2VudjZzOHZG?= =?utf-8?B?Zm5VUitZTmZQbGN5TG0vZk8vWU5qM0hzd0xia0VLUnhlckU5d0tYbWZhS3V1?= =?utf-8?B?Tmp2RG9qUjFlKzNNQktKMGRXZlJUajlXVUEvdGZJNE9ZbThFSSsvN2xsZ3JF?= =?utf-8?B?cHBHNmVBRGV2YzRSYmV4KzdkS25NSkRVSmY0T1Z0Y2JxUnRGMEdDbmJxcHBH?= =?utf-8?Q?FLuGwrxtUNzeLG1c=3D?= X-OriginatorOrg: altera.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1bf125ce-c6c8-4d74-ba8c-08de68700ff4 X-MS-Exchange-CrossTenant-AuthSource: DM8PR03MB6230.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Feb 2026 06:46:04.9023 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: fbd72e03-d4a5-4110-adce-614d51f2077a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: fKrfZzwVDhGTS7C7pIOXVzeu6X/tTcHCKrAD3HNxjXHJLkC2fAPqufqTSfqt6ER+5oewnTxOBvOOhZlbKu5MKoEEuVz1/mbkXqH8l1gR318= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR03MB5130 From: Adrian Ng Ho Yin The service controller currently polls FPGA configuration status at a fixed 1 second interval until the 30 second timeout expires. This leads to slow response time for fast-returning commands and unnecessary delay before reporting completion. Introduce two polling modes: - Fast polling: 20 ms interval for up to 50 iterations (=E2=89=881 s total) - Slow polling: 500 ms interval for up to 29 seconds A new helper, svc_cmd_poll_status(), abstracts the polling logic and replaces the existing loop in svc_thread_cmd_config_status(). This allows the driver to respond quickly to short operations while still handling long-running configuration commands within the same overall timeout window. Signed-off-by: Adrian Ng Ho Yin --- drivers/firmware/stratix10-svc.c | 91 +++++++++++++++++++++++--------- 1 file changed, 67 insertions(+), 24 deletions(-) diff --git a/drivers/firmware/stratix10-svc.c b/drivers/firmware/stratix10-= svc.c index 515b948ff320..405661616376 100644 --- a/drivers/firmware/stratix10-svc.c +++ b/drivers/firmware/stratix10-svc.c @@ -36,9 +36,25 @@ * FPGA_CONFIG_STATUS_TIMEOUT_SEC - poll the FPGA configuration status, * service layer will return error to FPGA manager when timeout occurs, * timeout is set to 30 seconds (30 * 1000) at Intel Stratix10 SoC. + * + * SVC_POLL_INTERVAL_MS_FAST - interval for polling the service status + * at secure world for fast response commands. Interval is set to 20ms. + * + * SVC_POLL_INTERVAL_MS_SLOW - interval for polling the service status + * at secure world for slow response commands. Interval is set to 500ms. + * + * SVC_POLL_COUNT_FAST - number of count for polling service status for + * fast response commands. Count is set to 50 (50*20ms=3D1sec) + * + * SVC_POLL_COUNT_SLOW - number of count for polling service status for + * slow response commands. Count is set to 58 (58*500ms=3D29sec) */ #define SVC_NUM_DATA_IN_FIFO 32 #define SVC_NUM_CHANNEL 4 +#define SVC_POLL_INTERVAL_MS_FAST 20 +#define SVC_POLL_INTERVAL_MS_SLOW 500 +#define SVC_POLL_COUNT_FAST 50 +#define SVC_POLL_COUNT_SLOW 58 #define FPGA_CONFIG_DATA_CLAIM_TIMEOUT_MS 200 #define FPGA_CONFIG_STATUS_TIMEOUT_SEC 30 #define BYTE_TO_WORD_SIZE 4 @@ -373,6 +389,47 @@ static void svc_thread_cmd_data_claim(struct stratix10= _svc_controller *ctrl, wait_for_completion_timeout(&ctrl->complete_status, timeout)); } =20 +/** + * svc_cmd_poll_status() - poll for service status + * @p_data: pointer to service data structure + * @ctrl: pointer to service layer controller + * @res: pointer to store response + * @poll_count: pointer to poll count value + * @poll_interval_in_ms: interval value in milliseconds + * + * Check whether the service at secure world has completed, and then infor= m the + * response. + */ +static void svc_cmd_poll_status(struct stratix10_svc_data *p_data, + struct stratix10_svc_controller *ctrl, + struct arm_smccc_res *res, + int *poll_count, int poll_interval_in_ms) +{ + unsigned long a0, a1, a2; + + a0 =3D INTEL_SIP_SMC_FPGA_CONFIG_ISDONE; + a1 =3D (unsigned long)p_data->paddr; + a2 =3D (unsigned long)p_data->size; + + if (p_data->command =3D=3D COMMAND_POLL_SERVICE_STATUS) + a0 =3D INTEL_SIP_SMC_SERVICE_COMPLETED; + + while (*poll_count) { + ctrl->invoke_fn(a0, a1, a2, 0, 0, 0, 0, 0, res); + if (res->a0 =3D=3D INTEL_SIP_SMC_STATUS_OK || + res->a0 =3D=3D INTEL_SIP_SMC_STATUS_ERROR || + res->a0 =3D=3D INTEL_SIP_SMC_STATUS_REJECTED) + break; + + /* + * request is still in progress, go to sleep then + * poll again + */ + msleep(poll_interval_in_ms); + (*poll_count)--; + } +} + /** * svc_thread_cmd_config_status() - check configuration status * @ctrl: pointer to service layer controller @@ -387,8 +444,7 @@ static void svc_thread_cmd_config_status(struct stratix= 10_svc_controller *ctrl, struct stratix10_svc_cb_data *cb_data) { struct arm_smccc_res res; - int count_in_sec; - unsigned long a0, a1, a2; + int poll_count; =20 cb_data->kaddr1 =3D NULL; cb_data->kaddr2 =3D NULL; @@ -397,30 +453,17 @@ static void svc_thread_cmd_config_status(struct strat= ix10_svc_controller *ctrl, =20 pr_debug("%s: polling config status\n", __func__); =20 - a0 =3D INTEL_SIP_SMC_FPGA_CONFIG_ISDONE; - a1 =3D (unsigned long)p_data->paddr; - a2 =3D (unsigned long)p_data->size; - - if (p_data->command =3D=3D COMMAND_POLL_SERVICE_STATUS) - a0 =3D INTEL_SIP_SMC_SERVICE_COMPLETED; - - count_in_sec =3D FPGA_CONFIG_STATUS_TIMEOUT_SEC; - while (count_in_sec) { - ctrl->invoke_fn(a0, a1, a2, 0, 0, 0, 0, 0, &res); - if ((res.a0 =3D=3D INTEL_SIP_SMC_STATUS_OK) || - (res.a0 =3D=3D INTEL_SIP_SMC_STATUS_ERROR) || - (res.a0 =3D=3D INTEL_SIP_SMC_STATUS_REJECTED)) - break; - - /* - * request is still in progress, wait one second then - * poll again - */ - msleep(1000); - count_in_sec--; + poll_count =3D SVC_POLL_COUNT_FAST; + svc_cmd_poll_status(p_data, ctrl, &res, &poll_count, + SVC_POLL_INTERVAL_MS_FAST); + /* Increased poll interval if response is still not ready */ + if (!poll_count) { + poll_count =3D SVC_POLL_COUNT_SLOW; + svc_cmd_poll_status(p_data, ctrl, &res, &poll_count, + SVC_POLL_INTERVAL_MS_SLOW); } =20 - if (!count_in_sec) { + if (!poll_count) { pr_err("%s: poll status timeout\n", __func__); cb_data->status =3D BIT(SVC_STATUS_BUSY); } else if (res.a0 =3D=3D INTEL_SIP_SMC_STATUS_OK) { --=20 2.49.GIT