From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from EUR04-VI1-obe.outbound.protection.outlook.com (EUR04-VI1-obe.outbound.protection.outlook.com [40.107.8.55]) by mx.groups.io with SMTP id smtpd.web11.26767.1658748010594847440 for ; Mon, 25 Jul 2022 04:20:11 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@armh.onmicrosoft.com header.s=selector2-armh-onmicrosoft-com header.b=QSpdpjGr; spf=pass (domain: arm.com, ip: 40.107.8.55, mailfrom: sami.mujawar@arm.com) ARC-Seal: i=2; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=pass; b=Kd64hAe3eUeAZla17fcGOQ0ffJHXiAiObxILyYaacMCKja+M7joTArTVkw+yo/GwO3+oLT79f2hMGEiiJAUdFXOGrScfNlU9N63bqLGjbAgxuxVSBi7j9fX1G8wKTTIFidp48XHGef2vOHZZ29QSLUMNqvFuPHAmNi6QLdbXWdVXhz4K+XcAWckBZussR8MPWnWst/RfgBOXlb36cSu0Awy0I635WkAPeoXb1WaOtB0/pAXjBKu3l7qOmRGissxmkVbOABiE0Kx5y5SLKwiteZHmZ7e1w/7UvEtEQvkLd40kBdNQRzcumUuCpOwJ+BEKLd1BsEIWv9k9Ro9VUgxT8g== ARC-Message-Signature: i=2; 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=PQx4zZLPnWkDBjuE5C5sPVKjRYmY1bC+vgHCuCFn2xQ=; b=IAuK5mmC4rVDWLNrYbIhE/w/To9Qrm2gZgN1d2SGANvdDSJLtTfEWzhFIFofkiMSCKXt+40Ps9yDFEuJXdDWXpspiyLIuXHYzptWGBLIJZg5+7wVpv1Be9c2MDyOHP6JyjJgSxO5rjc1kblN11uHpdaAfviFIrYv25Bg0pr51RQJBDxJR+JF/yLLYpBhTwsU/KP8yjGx+HTRDqXOtXkwdpuTcdm/R/r9/feRtVgNlpvNN48SLKvnfBrmYVBlVWCkdd2aPCn8pknRp5/z7IpW2yMbYKsV+l69CVuxZpu1Hyi0eOgMfxS5By3tWIWZzdqfyZ8IXxtnhf9V6BxZr6xevg== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=pass (sender ip is 63.35.35.123) smtp.rcpttodomain=edk2.groups.io smtp.mailfrom=arm.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=arm.com] dkim=[1,1,header.d=arm.com] dmarc=[1,1,header.from=arm.com]) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=PQx4zZLPnWkDBjuE5C5sPVKjRYmY1bC+vgHCuCFn2xQ=; b=QSpdpjGr+FDf7E60m/vT5ON/Pn+98gduCt9qJINx4lEpw7yFEuAn39Y5FhPVOFhcnUTNz1+y3MTLRPb/Y0CzXRIytaZ6Ql4hajeUBTVZSvfZTazXu/IlaK5VnhZt2I3gpUvi0aff3Tj3c3dSjGRDGe7Fl1FheEci5q/0pWm87Hc= Received: from AS9P194CA0007.EURP194.PROD.OUTLOOK.COM (2603:10a6:20b:46d::21) by AM8PR08MB6514.eurprd08.prod.outlook.com (2603:10a6:20b:36b::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5458.18; Mon, 25 Jul 2022 11:20:07 +0000 Received: from AM5EUR03FT045.eop-EUR03.prod.protection.outlook.com (2603:10a6:20b:46d:cafe::f9) by AS9P194CA0007.outlook.office365.com (2603:10a6:20b:46d::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5458.18 via Frontend Transport; Mon, 25 Jul 2022 11:20:07 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com;dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 63.35.35.123 as permitted sender) receiver=protection.outlook.com; client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com; pr=C Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by AM5EUR03FT045.mail.protection.outlook.com (10.152.17.105) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5458.17 via Frontend Transport; Mon, 25 Jul 2022 11:20:07 +0000 Received: ("Tessian outbound fccf984e7173:v123"); Mon, 25 Jul 2022 11:20:06 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: bd0b231c50f86df2 X-CR-MTA-TID: 64aa7808 Received: from d15cce5d9d21.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 48CED408-C306-4537-ABDF-F883747E5CA1.1; Mon, 25 Jul 2022 11:20:00 +0000 Received: from EUR05-AM6-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id d15cce5d9d21.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Mon, 25 Jul 2022 11:20:00 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=laCDZ4PgwSP5TIazF6CoOireOyyj8skfBY/kGCnLKmCgomczTOgDqpLxFsEWLhs+dPEILxoEehszFuEVx/4bljmdWLkVNWFnWgSG8r61QlyvUVZiM7BnQ/AycCg8wwTtc/HVgPMq1QU6pcqnMKux1qF4/C1WLHAZ9yZfGqa69g0dH5QnrIEMrjKS4ZeKJMBMCvlhgpwnKGh+4vc2x00XUGZlVVpWTfyDfSclaWDwj+6o6/yZIJ2nMykDvd+wwMmgRERc3q77GPW1KC5159IOMGBdLj+N0lzIV2HHDnBThr/NmiZRU79w37enRtSh14Rts75TjnTjZKD/LC1AxuBS/A== 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=PQx4zZLPnWkDBjuE5C5sPVKjRYmY1bC+vgHCuCFn2xQ=; b=nQqS15bCtqqkt3Z9MBB+5OiWjiZcr8sLgwTJBpit5hsCKHf0D28ihIoIG828pg8HALDqC1G76v09a/HDo9ih8Oi6Bd2pvs1eXpq9FyrhNiAMOZuXFHINumGxOA6wv5iN+3fFgPDQboLsKYt6GXzG29Eu0NP6MAgaK5A4+WP2292TmKNLmc/oB6RIAWsldauL0ykiKNSULnCjooCZl6HUu/17Vn3QJDoPKiV0xGrU7Lxa1N11163aHRzf/DTjNflJDKjJ1omy3e2vGmfPXaD/mqdioog9M1eoLnqxSJNpnnOrDGlFFwLwPHqL7D+FOIiiy3IdObgy/yhUkSqGS42eMQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=PQx4zZLPnWkDBjuE5C5sPVKjRYmY1bC+vgHCuCFn2xQ=; b=QSpdpjGr+FDf7E60m/vT5ON/Pn+98gduCt9qJINx4lEpw7yFEuAn39Y5FhPVOFhcnUTNz1+y3MTLRPb/Y0CzXRIytaZ6Ql4hajeUBTVZSvfZTazXu/IlaK5VnhZt2I3gpUvi0aff3Tj3c3dSjGRDGe7Fl1FheEci5q/0pWm87Hc= Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; Received: from AS8PR08MB6806.eurprd08.prod.outlook.com (2603:10a6:20b:39b::12) by AM9PR08MB6738.eurprd08.prod.outlook.com (2603:10a6:20b:30b::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5458.19; Mon, 25 Jul 2022 11:19:59 +0000 Received: from AS8PR08MB6806.eurprd08.prod.outlook.com ([fe80::d562:5a52:f638:7fe9]) by AS8PR08MB6806.eurprd08.prod.outlook.com ([fe80::d562:5a52:f638:7fe9%4]) with mapi id 15.20.5458.024; Mon, 25 Jul 2022 11:19:59 +0000 Message-ID: <5c02b879-24a3-0af7-5f82-f1b1408ac3f2@arm.com> Date: Mon, 25 Jul 2022 12:19:58 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.11.0 Subject: Re: [edk2-devel] [PATCH 1/1] ArmPlatformPkg/PrePeiCore: Print the firmware version early in boot To: devel@edk2.groups.io, Ard Biesheuvel , nd@arm.com References: <15026.1658420593869880980@groups.io> From: "Sami Mujawar" In-Reply-To: <15026.1658420593869880980@groups.io> X-ClientProxiedBy: LO2P265CA0301.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:a5::25) To AS8PR08MB6806.eurprd08.prod.outlook.com (2603:10a6:20b:39b::12) MIME-Version: 1.0 X-MS-Office365-Filtering-Correlation-Id: cafb3e16-c319-4bca-6242-08da6e2fa121 X-MS-TrafficTypeDiagnostic: AM9PR08MB6738:EE_|AM5EUR03FT045:EE_|AM8PR08MB6514:EE_ x-checkrecipientrouted: true NoDisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: 5eyUds3Wd+1ZyeFQLyHUhna8EqZrNo9r+n7imjjFA+BUPIAJz3+VBx/olGB7VQgx+zLxKT6/FQLvusUUdlCqz3/r9+ncLKUFMBkk+q/leqn8dVxlt0siWcldkMQQkFLTWRWfBYV8ASZfNV16WhK1M6uWivvJd6IkeooovaBMyMPwg7wyHoyfFA8C0hJ9/Zo5g1lkCShaYqBaMED7IZzTyjtdQ3NTih00ji53/VfYYpOIG3q9fytawHgMvbCFx0dVqkyrboz1loJxLwKkMOKXlnO5oHOR55fU0bT8LRMsnBZD16d/HxxOTiZmymqxyIChuFHhChqVrdTp/G8zpLgSM0eBqkBr3/ZNb3NGtT1mALgY6ELBj1o9xTQlYIMxGgakU/XsZjJKJIv+t+v5NUeMPwUMmh5gI8ziTlSKhI8lzbanFRc8VLegUh+UBII4D5ScyAMMr0cQxM6e8Cu4MiJN8l6mOzKYvJ1XKEnowsRBH90EsQGdac/Bc8RlTpFCTtmwIk2Cq5x19QzjvPR3ebgSdqHfA/+LuDgW2Bq32tUalKvlCJugBcaMHC2dhk6sxQsxAi+KSjuY9J/eKv0q9HJH4g67Fb2TvBIaPaShneEFFTKnE6svx4b/Er7zxYbTs0DyHlPTwv+HToM9UuTE4Ek9yBfzf4Rp4rikcmoDqpW0k/G0ZMWrv0THDG5dD0whDCVyfXO+CWEFphw5vXe7BEnN3fi/DxInyHusECkCnmCuMcSIQHDet5xofw84oPmORvJjMIIoMtqrU0w8LB9A16cmBnacCB56Lgfz3T+Y4Sb3FOc2ncn6WlYvZhI6SCeGZ6BCke2Wg4INY2LDjOjH4IV5ir3T9zYevSnINIWhMybIR4I/Pg6C+znrVqAKHCYkusdnlLPeUmdSF/vOoDtwGihsAg== X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AS8PR08MB6806.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230016)(4636009)(376002)(346002)(396003)(136003)(39860400002)(366004)(8936002)(26005)(44832011)(478600001)(6486002)(966005)(5660300002)(86362001)(66476007)(53546011)(66946007)(33964004)(6512007)(8676002)(6506007)(66556008)(83380400001)(41300700001)(31696002)(31686004)(6636002)(166002)(38100700002)(316002)(76236003)(2906002)(2616005)(186003)(36756003)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM9PR08MB6738 Original-Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; Return-Path: Sami.Mujawar@arm.com X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: AM5EUR03FT045.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 40084a5d-ff45-4105-fb57-08da6e2f9c7c X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: M/RbrHsgAoyzC8XJW3QZ1a+FFTUCzlIkfp7SiB7vKhUHsrbnRkbhMgIqQ8umIM75KTf1BUMi9qd6LNrdH+3ddsDYyrNKMGkHT32vV+Go4hpb7VsDs+kYYQqk+oXCmGQnr1/FcnewQhqErBmWWDUSyNj/p+FPvKqCpo0jxZ1AQpWBTH8jFCyq67mA3lRZG1NQl0hK7Zghd/dmcVGWmhrXT0kZiNa8Dxs2IlY+ERtfNvSgFKATd0rSamA8Diq+J1crCKHK/zYTeF3JGMxxHYppUFCWerGXoZ21dBpxtSIHqT7YTa/rl0DWgEvB3qo/mxPKIo+hLip5/6/BL8TpjM0rpk2VayBSXlwHnu9CUiQNd7KtPJ4KH4VGaVPZjvfw5Pyg16NHuNBMSSjymNED+zASJFJ60bFq7Hc8cTp9ySqogKq1viIAQj4kUeDnNegTSbE2YWmEN3CxyG/8y4j1nFGENSfijdEM08ex9+S5U4Asjsh8QGytI9tHhg08pNOlD0vLddlpbMFCVanRqe/qmyBQ2lfqBrYu/SsqoqgdkurGzwmYFLPo+W/e31ilevHtVuqJd71uW6XK+vFiAUrL1qNAexRfHbmo78GABzaI6IUsvSXeA28Vi4yeRwLMJ8H3vZvk/DLu1Uvbs/81tI9GxcmKaMj2cJDTTyCM7jXeBA14Cn9wqOUkDyInbr7Bb3rbBQsJTTu/WkVS5rp0Mu2Snaag4rrNRQX586GNxoSQ/luw7Q8GEF0jjKtPDXy1YlzHlQVXDSn1kWzXaTjLXUWRdczVcxlgNqthm56K9Qo8LbajrfeW5IrGgrC5mJ/i5Hy0U9oh8as7ZzI7iqVvyHhlx5BN+3UEVi2hA/YIuwnXGwwrCEA56e2urOv1tRaRaSxnJmtFyVoz0HQrVaMJ5WlDddnN3JF4hYY+l2jhv4VR4bqLxc8= X-Forefront-Antispam-Report: CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(13230016)(4636009)(376002)(136003)(396003)(346002)(39860400002)(46966006)(36840700001)(40470700004)(36860700001)(8936002)(6512007)(40480700001)(966005)(5660300002)(6486002)(478600001)(26005)(83380400001)(186003)(40460700003)(336012)(47076005)(86362001)(2616005)(76236003)(41300700001)(53546011)(44832011)(31696002)(6506007)(33964004)(166002)(31686004)(82740400003)(316002)(81166007)(356005)(36756003)(2906002)(6636002)(70586007)(70206006)(8676002)(82310400005)(43740500002);DIR:OUT;SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Jul 2022 11:20:07.1403 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: cafb3e16-c319-4bca-6242-08da6e2fa121 X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com] X-MS-Exchange-CrossTenant-AuthSource: AM5EUR03FT045.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM8PR08MB6514 Content-Type: multipart/alternative; boundary="------------rZXaU0SroCPaSSxpZ9BS3N1L" --------------rZXaU0SroCPaSSxpZ9BS3N1L Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: quoted-printable Hi Rebecca, Please find my response inline marked [SAMI]. Regards, Sami Mujawar On 21/07/2022 05:23 pm, Sami Mujawar via groups.io wrote: Hi Rebecca, Ard, On Tue, May 3, 2022 at 12:43 AM, Ard Biesheuvel wrote: // Data Cache enabled on Primary core when MMU is enabled. ArmDisableDataCache (); // Invalidate instruction cache @@ -90,6 +95,18 @@ CEntryPoint ( // If not primary Jump to Secondary Main if (ArmPlatformIsPrimaryCore (MpId)) { + // Initialize the Serial Port + SerialPortInitialize (); + CharCount =3D AsciiSPrint ( + Buffer, + sizeof (Buffer), + "UEFI firmware (version %s built at %a on %a)\n\r", + (CHAR16 *)PcdGetPtr (PcdFirmwareVersionString), Given that this runs before any library constructors are called, I'd be inclined to use FixedPcdGetPtr() here (and [FixedPcd] in the .INFs below), to ensure that we don't dereference garbage. I also wonder whether we need a call to ProcessLibraryConstructorList() somewhere. [SAMI] There is a patch at https://edk2.groups.io/g/devel/message/91113 whi= ch aims to call ProcessLibraryConstructorList(). The idea being that the De= bugLib constructor would be called which initializes the serial port. So, maybe these patches need adjustment so that we avoid calling SerialPort= Initialize () twice. [/SAMI] [/SAMI] I had a look at the SerialPortInitialize() implementation for PL011= and 16550 UARTs and it appears that both check the current settings before= programming the UART. Therefore, please ignore my comment above. [/SAMI] regards, Sami Mujawar + __TIME__, + __DATE__ + ); + SerialPortWrite ((UINT8 *)Buffer, CharCount); IMPORTANT NOTICE: The contents of this email and any attachments are confid= ential and may also be privileged. If you are not the intended recipient, p= lease notify the sender immediately and do not disclose the contents to any= other person, use it for any purpose, or store or copy the information in = any medium. Thank you. --------------rZXaU0SroCPaSSxpZ9BS3N1L Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable

Hi Rebecca,

Please find my response inline marked [SAMI].

Regards,

Sami Mujawar

On 21/07/2022 05:23 pm, Sami Mujawar via gro= ups.io wrote:
= Hi Rebecca, Ard,

On Tue, May 3, 2022 at 12:43 AM, Ard Biesheuvel wrote:
// Data Cache enabled on Primary core when MMU is enabled.
ArmDisableDataCache ();
// Invalidate instruction cache
@@ -90,6 +95,18 @@ CEntryPoint (

// If not primary Jump to Secondary Main
if (ArmPlatformIsPrimaryCore (MpId)) {
+ // Initialize the Serial Port
+ SerialPortInitialize ();
+ CharCount =3D AsciiSPrint (
+ Buffer,
+ sizeof (Buffer),
+ "UEFI firmware (version %s built at %a on %a)\n\r",
+ (CHAR16 *)PcdGetPtr (PcdFirmwareVersionString),
Given that this runs before any library constructors are called, I'd
be inclined to use FixedPcdGetPtr() here (and [FixedPcd] in the .INFs
below), to ensure that we don't dereference garbage.

I also wonder whether we need a call to
ProcessLibraryConstructorList() somewhere.
[SAMI] There is a patch at https://edk2.groups.io/g/devel/message/91113 which aims to call Process= LibraryConstructorList(). The idea being that the DebugLib constructor woul= d be called which initializes the serial port.
So, maybe these patches need adjustment so that we avoid calling SerialPort= Initialize () twice.
[/SAMI]

[/SAMI] I had a look at the SerialPortInitialize() implementation for PL= 011 and 16550 UARTs and it appears that both check the current settings bef= ore programming the UART. Therefore, please ignore my comment above.

[/SAMI]
=
regards,

Sami Mujawar

+ __TIME__,
+ __DATE__
+ );
+ SerialPortWrite ((UINT8 *)Buffer, CharCount);
IMPORTANT NOTICE: The contents of this email and any attachments are confid= ential and may also be privileged. If you are not the intended recipient, p= lease notify the sender immediately and do not disclose the contents to any= other person, use it for any purpose, or store or copy the information in any medium. Thank you. --------------rZXaU0SroCPaSSxpZ9BS3N1L--