From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by spool.mail.gandi.net (Postfix) with ESMTPS id AC14F941BA3 for ; Mon, 29 Jan 2024 18:25:44 +0000 (UTC) DKIM-Signature: a=rsa-sha256; bh=DZN5hJsNtK29WuLmAqJ+1jEUiTKp+X8ZQpiQDo6//yc=; c=relaxed/simple; d=groups.io; h=ARC-Seal:ARC-Message-Signature:ARC-Authentication-Results:From:To:CC:Subject:Date:Message-ID:In-Reply-To:References:MIME-Version:Precedence:List-Subscribe:List-Help:Sender:List-Id:Mailing-List:Delivered-To:Reply-To:List-Unsubscribe-Post:List-Unsubscribe:Content-Transfer-Encoding:Content-Type; s=20140610; t=1706552743; v=1; b=vtiTvy0url63o6PS/7qQo9doPOe5/ar1NCfRw/sO5X3M9SS+8YIwcrNvNcUaaLdd8bxFjcZJ QBVP+5e92fsaEJ057eM0YOrusqqAsec1TQ2ezbL8eLwKFw5aXYXMtA9pVCxy0WyZOcbVP0VS7TJ ggK46vNncUfO3aLTiSl1qAtA= X-Received: by 127.0.0.2 with SMTP id qP8DYY7687511xNmTP7vSewf; Mon, 29 Jan 2024 10:25:43 -0800 X-Received: from NAM04-BN8-obe.outbound.protection.outlook.com (NAM04-BN8-obe.outbound.protection.outlook.com [40.107.100.100]) by mx.groups.io with SMTP id smtpd.web11.2501.1706552740109349493 for ; Mon, 29 Jan 2024 10:25:42 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=M/mQAHtTAMS9+w229OMB4fEiabvArCVC9EGcl9zvVoZ5n47A+7FTPu4lII+gxJA3qO/ObPE2tzNkLpFiw2Jt3h6CCE1nHWl2m4T+RwJjVk+8Lw2ZqcalUSxPPq4IaJ/mbmDZWWxVmhW4/iVq/wGZh8BWiw0d7MgrKWbU+E9/Rg8Dn3eMhUT14iAiDvbN//iZpP9oPwKVgU7AQVLe+goNAyoLOT5D68c0vO+NPUW5fN6Vzup3LGE06XDbnW9r7Ne2bCmroe5YgQELFt+YNxrkSK/RoEN40aDJk/THpKbr7Tc8h8esvsjKsBby9OwikJSO1bHWHEApT0Cr3bhpDw5NRw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=mR8ajm3TbEAIvDkodJvngoFPg0UL2RaRHhSvtgt2Ol8=; b=TeF4Og1KFGCodlmVxA7aTE4ttkM3d25yCX9fvIMRMTerCz6ggnI/XC1beIj5Yk1HvtBD3ymEHw5VAprUk5ROzU0inBSSmXoaOAC3Jyx8tTgLQkqD7gpnb43sMpGzQmVn8CV+fvcYWp0kq54Flvj6Ozhi/quXb+AUZh3RBtvHwFUVrJowGd9kZay4nQgtql2VbBg5NnB+jEcbCzW2MPLhtLweDsRFkDCBhaO59SS83trBHUa9G3R6M5v3liZ7tn2OD4Q0bN1rPZdBTKXnWluQk1vR4kOTcxK2BPLyMZ0w98PQtUtaUJ7Ny4wRHSK/eXmQBa2prIDAtO3I8rWJFIGtXQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=os.amperecomputing.com; dmarc=pass action=none header.from=os.amperecomputing.com; dkim=pass header.d=os.amperecomputing.com; arc=none X-Received: from LV3PR01MB8464.prod.exchangelabs.com (2603:10b6:408:1a3::7) by PH7PR01MB8495.prod.exchangelabs.com (2603:10b6:510:2ef::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7228.32; Mon, 29 Jan 2024 18:25:35 +0000 X-Received: from LV3PR01MB8464.prod.exchangelabs.com ([fe80::7748:d4a3:bcd9:14c1]) by LV3PR01MB8464.prod.exchangelabs.com ([fe80::7748:d4a3:bcd9:14c1%6]) with mapi id 15.20.7228.029; Mon, 29 Jan 2024 18:25:35 +0000 From: "Rebecca Cran via groups.io" To: Leif Lindholm , Ard Biesheuvel , Sami Mujawar , devel@edk2.groups.io CC: Rebecca Cran Subject: [edk2-devel] [PATCH v5 1/3] ArmPkg: Update GenericWatchdogDxe to allow setting full 48-bit offset Date: Mon, 29 Jan 2024 11:25:11 -0700 Message-ID: <20240129182514.1375466-2-rebecca@os.amperecomputing.com> In-Reply-To: <20240129182514.1375466-1-rebecca@os.amperecomputing.com> References: <20240129182514.1375466-1-rebecca@os.amperecomputing.com> X-ClientProxiedBy: CH2PR10CA0002.namprd10.prod.outlook.com (2603:10b6:610:4c::12) To LV3PR01MB8464.prod.exchangelabs.com (2603:10b6:408:1a3::7) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: LV3PR01MB8464:EE_|PH7PR01MB8495:EE_ X-MS-Office365-Filtering-Correlation-Id: 747f2318-920f-4cd8-0cdb-08dc20f7afbd X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Message-Info: KiDrYBNPrRCe6KxpmAND1Jv9kj5SoXPD1UD32COyQL0qSSpHfcY/s87E/IsY6Wj/XWs0D0zrP33U6h73aU+dFkqCGEmpcV6OXSTN51L3ORQ9dj0tj+rzQ2LHz9Ou8c2/ocP3VB82cE75a23ZCe+yI0YcJJWlgy1hnYhs6W6paDo6JB+Z1mCLXru7ECECJyuVflhfI8P4UlPPm+OzJCaKZDFv3zHjziFgvOTqeP9LeClZTxGeTQGndZSPsNt08PLDiMNNYuHmlh1GgId76oLw4dPAncmYQfFJIy1xo0v401T66HeulYO8qUD3hpNFdbKIBVyD5cc+dG8u54icy/OkwakjhuhxItSbiLLZYaCCdrd8+qcn/p5fHhL9fkxfgv7h2n3/ARfkxBwWTIwfTCk24foM1R1Sa3jIm9B2YhJlmE+sZPXKJ8pYlw/iYiuPgkjRCzAWk40YNg+RIp7ssqcuTP//OoH84bkfZeFPYJa6XpbuYFi+SgaB1SIu64mw0VQFGkoSPUP4ZnoIez9SjYcjzL+J7apOWZaZai7+7hSInpY0AvIjTKMxCYFmTBqYTs6NQi8YeCcJTjHcPiAH70nMhprC1Tutb3czP1eRj18wEGk= X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?3TqsMMRXQCY8zJuHA9IIOS+Jh1PvNmQooEYvcKydiTDC4oaRd0xLAHi7+D/Y?= =?us-ascii?Q?Ol33V+mGr4Tv7JH6cjm5aBByzNXKe7cheaC8UNUUcNT9jkXpB7spqTqJ9q0+?= =?us-ascii?Q?aIshMOJXAB2hMNy+c5z5fMNT1kt1LM3WSeCNWnpJwcKgylyGBEwx94zxz+Ua?= =?us-ascii?Q?uXNpy+rUSdilJDngmThiMnpaLqLnZUXQn/n2lhPEMapHeagSu/P7rrN4cp3p?= =?us-ascii?Q?VGCXUwIKqqsyA5M357ENLbsq9zDR/DQ+v4ZE6pf4T2MZRrwsEFskupbXj35J?= =?us-ascii?Q?RA3hw2KXEcUi3K/ub1U0oCBs04RnXLKU8bLjXaQFfCYczp63/kkP+7+hGKPp?= =?us-ascii?Q?NGUmH5BgydfFCtgTzPfs9M8AOYvo2Rxkw4KEWPjmcHBJ9D45AXdvcg6v/lb5?= =?us-ascii?Q?5z0HIuJ6MLtaq36wtUvuEEGq7+ZNqLy3aXOpTSuzSgvp20Ko1bAfoZQlZ0UQ?= =?us-ascii?Q?YOA7aReXpAK0b6+MU95ore+dCeNYPx4hSsz9mz6tac349xRIeZSQR1JV0Na0?= =?us-ascii?Q?8np5ACLIrXklEl7PbTAnbxPRV/+I5L+O9nHQI0RdIU+TxEcpO+8WwH5HtNhP?= =?us-ascii?Q?n0AQFTgpM84iMgZFw0/jj6hLFIPFP9fH+r9ABEOR2OI5+YOvbZN4uEDt0aOK?= =?us-ascii?Q?ZRuow0gQrrA9Q8n2eCwAqNFoEeac7KjIPh0zR5gZOf++TjqWdtpropsSSDem?= =?us-ascii?Q?E9pjEjAbedD6QN8e8+Yp1/C/xdJypGBT+zeM6OeKgDCB/KJ8iPEqxOdBKG/U?= =?us-ascii?Q?a5Bmt4jiHLy13IoyraZ37oMW01C3qcZqAJaiXMAr2AApjwPeFp48yh14BGoV?= =?us-ascii?Q?kh7Smi/zQFARvmLTVS3tZ3+53FiJEZfYd6UigSYxoSRsMAHnseO8jnmbahE4?= =?us-ascii?Q?jgaYusT0PGXu/xC8gHIP0imkFuQd7O+07xgnS8ovqYSKzIl+DlHpBFUHrPn7?= =?us-ascii?Q?Y80hU2G+x18+lTYN+Xo0IeEU+mqJuDg1GtwtdBo9wWfkgvYoxkf2BwlKQgU/?= =?us-ascii?Q?DE2cp/veuGq6Hl6mmjfJBBu+czUpQbXXAD/yevQjKZGMbT3SKvD8Jt2+aEvW?= =?us-ascii?Q?txtG/u3tpxGkQyhcreyRQSSTZdrGDEoRaCgyhR/w3p+Wkwe5jrhTO0UNEjam?= =?us-ascii?Q?gcRMf8kyKHal9QH+FvLW9W9gukkCF5gVAdZoG6HDAAJ/wt9pVWu++EHTO44a?= =?us-ascii?Q?+r3cO/qiOLKVuAzgU4pbPaeHCFcLkE+X/W7BS/XsRP3nyE9r0Sbg0HUE2F2G?= =?us-ascii?Q?ttr6y8pPRDC0rJy9R7chD0GfWrqC+m4u3+7cqAL+DS410yBMwCeB5UWYuWjL?= =?us-ascii?Q?z0Y7Yt9kWCYrqW+k6S5bE/Ggcq76/PMqSjgtD+vSVijrJoPxP3iaVbAq7KMj?= =?us-ascii?Q?ke+3c89DO+3Va6S1xvt3S54dGInsM3CAaPa0NoBlXZc2tqurz9QFPdNSjJ+7?= =?us-ascii?Q?AuR2kIl2JKNFrYIbJ032jxarKiCVxLmGRC0BZBQPGvHaGN670v96YJNfjD80?= =?us-ascii?Q?sjmOG1/wIOFswGrTU2eRp4q3MqvbozeuxiHijzi35q3AfanpNcXYFMKggjA5?= =?us-ascii?Q?VZA7+0a/6cA9LxrPp9jlYKnN0fjh0UcH5Q/4LWzdQoW/Byy3VVGWgkw9Uyyu?= =?us-ascii?Q?RwgVQ6bvBqAq5Xr4AX08XyI=3D?= X-OriginatorOrg: os.amperecomputing.com X-MS-Exchange-CrossTenant-Network-Message-Id: 747f2318-920f-4cd8-0cdb-08dc20f7afbd X-MS-Exchange-CrossTenant-AuthSource: LV3PR01MB8464.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Jan 2024 18:25:35.8258 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3bc2b170-fd94-476d-b0ce-4229bdc904a7 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: WcFAXto/qHkVv5k3uaC4hfr+aoAHshy9Bh2SsIs2WYuTovV14Ko9rQ7RuMkGHy+ij5pFy2meuGmZ3OJ89/gUuPLcD45ssDBRg4J0qyU44zQBhfx/6pXTRelUINlsdEWO X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR01MB8495 Precedence: Bulk List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,rebecca@os.amperecomputing.com List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: X-Gm-Message-State: 6dm2PoCkhAEamTe7R6JZHhTLx7686176AA= Content-Transfer-Encoding: quoted-printable Content-Type: text/plain X-GND-Status: LEGIT Authentication-Results: spool.mail.gandi.net; dkim=pass header.d=groups.io header.s=20140610 header.b=vtiTvy0u; dmarc=none; spf=pass (spool.mail.gandi.net: domain of bounce@groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce@groups.io The generic watchdog offset register is 48 bits wide, and can be set by performing two 32-bit writes. Add support for writing the high 16 bits of the offset register and update the signature of the WatchdogWriteOffsetRegister function to take a UINT64 value. Signed-off-by: Rebecca Cran --- ArmPkg/Drivers/GenericWatchdogDxe/GenericWatchdog.h | 11 ++++- ArmPkg/Drivers/GenericWatchdogDxe/GenericWatchdogDxe.c | 48 ++++++++++++++= ++++-- 2 files changed, 53 insertions(+), 6 deletions(-) diff --git a/ArmPkg/Drivers/GenericWatchdogDxe/GenericWatchdog.h b/ArmPkg/D= rivers/GenericWatchdogDxe/GenericWatchdog.h index 9bc3bf47047c..b7d6f7e7847e 100644 --- a/ArmPkg/Drivers/GenericWatchdogDxe/GenericWatchdog.h +++ b/ArmPkg/Drivers/GenericWatchdogDxe/GenericWatchdog.h @@ -1,9 +1,13 @@ /** @file * +* Copyright (c) 2023, Ampere Computing LLC. All rights reserved.
* Copyright (c) 2013-2017, ARM Limited. All rights reserved. * * SPDX-License-Identifier: BSD-2-Clause-Patent * +* @par Reference(s): +* - Generic Watchdog specification in Arm Base System Architecture 1.0C: +* https://developer.arm.com/documentation/den0094/c/ **/ =20 #ifndef GENERIC_WATCHDOG_H_ @@ -14,12 +18,17 @@ =20 // Control Frame: #define GENERIC_WDOG_CONTROL_STATUS_REG ((UINTN)FixedPcdGet64 (PcdGen= ericWatchdogControlBase) + 0x000) -#define GENERIC_WDOG_OFFSET_REG ((UINTN)FixedPcdGet64 (PcdGen= ericWatchdogControlBase) + 0x008) +#define GENERIC_WDOG_OFFSET_REG_LOW ((UINTN)FixedPcdGet64 (PcdGen= ericWatchdogControlBase) + 0x008) +#define GENERIC_WDOG_OFFSET_REG_HIGH ((UINTN)FixedPcdGet64 (PcdGen= ericWatchdogControlBase) + 0x00C) #define GENERIC_WDOG_COMPARE_VALUE_REG_LOW ((UINTN)FixedPcdGet64 (PcdGen= ericWatchdogControlBase) + 0x010) #define GENERIC_WDOG_COMPARE_VALUE_REG_HIGH ((UINTN)FixedPcdGet64 (PcdGen= ericWatchdogControlBase) + 0x014) +#define GENERIC_WDOG_IID_REG ((UINTN)FixedPcdGet64 (PcdGen= ericWatchdogControlBase) + 0xFCC) =20 // Values of bit 0 of the Control/Status Register #define GENERIC_WDOG_ENABLED 1 #define GENERIC_WDOG_DISABLED 0 =20 +#define GENERIC_WDOG_IID_ARCH_REV_SHIFT 16 +#define GENERIC_WDOG_IID_ARCH_REV_MASK 0xF + #endif // GENERIC_WATCHDOG_H_ diff --git a/ArmPkg/Drivers/GenericWatchdogDxe/GenericWatchdogDxe.c b/ArmPk= g/Drivers/GenericWatchdogDxe/GenericWatchdogDxe.c index 66c6c37c08b0..6ff947d4b746 100644 --- a/ArmPkg/Drivers/GenericWatchdogDxe/GenericWatchdogDxe.c +++ b/ArmPkg/Drivers/GenericWatchdogDxe/GenericWatchdogDxe.c @@ -1,5 +1,6 @@ /** @file * +* Copyright (c) 2023, Ampere Computing LLC. All rights reserved.
* Copyright (c) 2013-2018, ARM Limited. All rights reserved. * * SPDX-License-Identifier: BSD-2-Clause-Patent @@ -35,16 +36,53 @@ STATIC UINTN mTimerFrequencyHz =3D 0; It is therefore stored here. 0 means the timer is not running. */ STATIC UINT64 mNumTimerTicks =3D 0; =20 +/* disables watchdog interaction after Exit Boot Services */ +STATIC BOOLEAN mExitedBootServices =3D FALSE; + +#define MAX_UINT48 0xFFFFFFFFFFFFULL + STATIC EFI_HARDWARE_INTERRUPT2_PROTOCOL *mInterruptProtocol; STATIC EFI_WATCHDOG_TIMER_NOTIFY mWatchdogNotify; =20 +/** + This function returns the maximum watchdog offset register value. + + @retval MAX_UINT32 The watchdog offset register holds a 32-bit value. + @retval MAX_UINT48 The watchdog offset register holds a 48-bit value. +**/ +STATIC +UINT64 +GetMaxWatchdogOffsetRegisterValue ( + VOID + ) +{ + UINT64 MaxWatchdogOffsetValue; + UINT32 WatchdogIId; + UINT8 WatchdogArchRevision; + + WatchdogIId =3D MmioRead32 (GENERIC_WDOG_IID_REG); + WatchdogArchRevision =3D (WatchdogIId >> GENERIC_WDOG_IID_ARCH_REV_SHIFT= ) & GENERIC_WDOG_IID_ARCH_REV_MASK; + + if (WatchdogArchRevision =3D=3D 0) { + MaxWatchdogOffsetValue =3D MAX_UINT32; + } else { + MaxWatchdogOffsetValue =3D MAX_UINT48; + } + + return MaxWatchdogOffsetValue; + +} + STATIC VOID WatchdogWriteOffsetRegister ( - UINT32 Value + UINT64 Value ) { - MmioWrite32 (GENERIC_WDOG_OFFSET_REG, Value); + MmioWrite32 (GENERIC_WDOG_OFFSET_REG_LOW, Value & MAX_UINT32); + if (GetMaxWatchdogOffsetRegisterValue () =3D=3D MAX_UINT48) { + MmioWrite32 (GENERIC_WDOG_OFFSET_REG_HIGH, (Value >> 32) & MAX_UINT16)= ; + } } =20 STATIC @@ -211,17 +249,17 @@ WatchdogSetTimerPeriod ( /* If the number of required ticks is greater than the max the watchdog'= s offset register (WOR) can hold, we need to manually compute and set the compare register (WCV) */ - if (mNumTimerTicks > MAX_UINT32) { + if (mNumTimerTicks > MAX_UINT48) { /* We need to enable the watchdog *before* writing to the compare regi= ster, because enabling the watchdog causes an "explicit refresh", which clobbers the compare register (WCV). In order to make sure this doe= sn't trigger an interrupt, set the offset to max. */ - WatchdogWriteOffsetRegister (MAX_UINT32); + WatchdogWriteOffsetRegister (MAX_UINT48); WatchdogEnable (); SystemCount =3D ArmGenericTimerGetSystemCount (); WatchdogWriteCompareRegister (SystemCount + mNumTimerTicks); } else { - WatchdogWriteOffsetRegister ((UINT32)mNumTimerTicks); + WatchdogWriteOffsetRegister (mNumTimerTicks); WatchdogEnable (); } =20 --=20 2.34.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#114729): https://edk2.groups.io/g/devel/message/114729 Mute This Topic: https://groups.io/mt/104037319/7686176 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-