From mboxrd@z Thu Jan  1 00:00:00 1970
Received: from EUR03-DB5-obe.outbound.protection.outlook.com (EUR03-DB5-obe.outbound.protection.outlook.com [])
 by mx.groups.io with SMTP id smtpd.web12.37177.1591018565558875974
 for <devel@edk2.groups.io>;
 Mon, 01 Jun 2020 06:36:23 -0700
Authentication-Results: mx.groups.io;
 dkim=fail reason="body hash did not verify" header.i=@nxp1.onmicrosoft.com header.s=selector2-nxp1-onmicrosoft-com header.b=L41Mrinm;
 spf=fail (domain: oss.nxp.com, ip: <nil>, mailfrom: pankaj.bansal@oss.nxp.com)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=MOk8xaQea/b+hpcqE8KqMMoydzZWLIYnoAfnkfmh9QNPGJl1m4feYJXuo9sLoeME0ysZfSeZ02LA4zAoddpz90cStYSXCkBGpLX1BnhDD/pnq8VIvd+DScTALh3ewh0Bi9r/BGyqITKRyXZiJNNN4H0R4rpWOu3QCIDz1+3+U4/Wx2rKRAz9YwsMU9BxwxQQyIQH9ZW7tkhuwNOmzXUcBIJIPDS9zHdS6in+TkpByq9nvzCNvihkQ0pO5mgsCUUrvEvey6u7QPrlXSeayLgNcZGvX2T7AHFcqcAs+n5eKtE6UJMs9BQJKaKDGWzvqf6ew97kUvKbnILAlLc/QZlIXw==
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-SenderADCheck;
 bh=JZ1Zw/FrgFHhmLCdw4iLRlW1ZnVrhZuO2EqpqSu1Htg=;
 b=handjz3Idohz9BROzSDzXiDINgUyLwYI/sN/Xix4OCZIL0PQQbIEhk7iaUnSuFGLlcRx9MbH4ZpaQsWgN/cfOqyZNMhMZomDACZdGCN7Se9+5m+mTm33olg28QyhPD5FUxDuWHIo4AHwXgkUVCkJiHZS2RX2n9iFyN5WBLUIzZIraqz4cWp87p32R2zTjCwRKSLSizz2Uq5wAz83khVrgVNg45ygAW/NXmWSxpqnntFtltZjxZjj13dh0fYW5q4QipMD0dIxVXVr/wM4XVtzxeywWYGv9QZZvFO+jApsj7Afoyp76Am6iHrNKTccYXAR0jivkd7mK7ElAKZiX6ukLw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com;
 dkim=pass header.d=oss.nxp.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com;
 s=selector2-NXP1-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=JZ1Zw/FrgFHhmLCdw4iLRlW1ZnVrhZuO2EqpqSu1Htg=;
 b=L41MrinmRbgn54KQir8zU63vPS50aRUoDJBgPKHzY1+DUPYShvH8bK+kTKJK+F68EWqbu9LOK4EPTh+9zj+EUDjGRG/F/GrylG08s3LIoG7o8Da9NcmVzO383HiaAqrC5Jmy/Zr3h/rOxPT5BgBiPmDggBWpCCS4ZQ8G2YmOMgM=
Authentication-Results: nuviainc.com; dkim=none (message not signed)
 header.d=none;nuviainc.com; dmarc=none action=none header.from=oss.nxp.com;
Received: from VI1PR04MB5933.eurprd04.prod.outlook.com (2603:10a6:803:ec::16)
 by VI1PR04MB6096.eurprd04.prod.outlook.com (2603:10a6:803:f6::22) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3045.17; Mon, 1 Jun
 2020 13:36:14 +0000
Received: from VI1PR04MB5933.eurprd04.prod.outlook.com
 ([fe80::45c4:8846:5327:9513]) by VI1PR04MB5933.eurprd04.prod.outlook.com
 ([fe80::45c4:8846:5327:9513%7]) with mapi id 15.20.3045.024; Mon, 1 Jun 2020
 13:36:14 +0000
From: "Pankaj Bansal" <pankaj.bansal@nxp.com>
To: Leif Lindholm <leif@nuviainc.com>,
	Meenakshi Aggarwal <meenakshi.aggarwal@nxp.com>,
	Michael D Kinney <michael.d.kinney@intel.com>,
	devel@edk2.groups.io,
	Varun Sethi <V.Sethi@nxp.com>,
	Samer El-Haj-Mahmoud <Samer.El-Haj-Mahmoud@arm.com>,
	Jon Nettleton <jon@solid-run.com>,
	Ard Biesheuvel <ard.biesheuvel@linaro.org>
Subject: [PATCH edk2-platforms v4 05/10] Platform/NXP/LX2160ARDB: Add ArmPlatformLib
Date: Mon,  1 Jun 2020 19:04:34 +0530
Message-ID: <20200601133439.5711-6-pankaj.bansal@oss.nxp.com>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20200601133439.5711-1-pankaj.bansal@oss.nxp.com>
References: <20200601133439.5711-1-pankaj.bansal@oss.nxp.com>
X-ClientProxiedBy: SG2PR02CA0097.apcprd02.prod.outlook.com
 (2603:1096:4:92::13) To VI1PR04MB5933.eurprd04.prod.outlook.com
 (2603:10a6:803:ec::16)
Return-Path: pankaj.bansal@oss.nxp.com
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
Received: from uefi-workstation.ap.freescale.net (92.120.0.69) by SG2PR02CA0097.apcprd02.prod.outlook.com (2603:1096:4:92::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3045.17 via Frontend Transport; Mon, 1 Jun 2020 13:36:12 +0000
X-Mailer: git-send-email 2.17.1
X-Originating-IP: [92.120.0.69]
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-HT: Tenant
X-MS-Office365-Filtering-Correlation-Id: b25128c0-3164-4e08-2ae4-08d80630c150
X-MS-TrafficTypeDiagnostic: VI1PR04MB6096:
X-MS-Exchange-SharedMailbox-RoutingAgent-Processed: True
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS: 
	<VI1PR04MB609603099B6DFC1E2156513FB08A0@VI1PR04MB6096.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:5236;
X-Forefront-PRVS: 0421BF7135
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: 
	Q7nMH8udQdgovGSEttF0ojqkF6S4Icmb6Yz6e5XetKhu5T+0Zej+wNHDwKNgo6dcMgIofSLHUWxNrHVJHWvD8BecCZzMwcGyZ2Ci7K1mn1NNrpVzxRPIRcFClDTYvWhcDE89zG+SijwR4Kp6FrM1tn54X3ZiDaH1Cy4kpaz86hyOtyTI4n/h/+OsWjTrJFiKKhhRN+6Go//Y2DpGUaEAKLGmPwzj52N3kWDFOAxhkN/dnSJn/504PJ/dhj/RRhit8SVPJBWICq3DazjF4A/Ya/6fVGnZHJ1jbt/GPxHsaZzJnKandRfk1jeGpm+FHHZYqkS1lL/eXwShqpZ2FnueeA==
X-Forefront-Antispam-Report: 
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5933.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFTY:;SFS:(4636009)(366004)(376002)(346002)(396003)(136003)(39860400002)(110136005)(1076003)(316002)(86362001)(6666004)(44832011)(16526019)(478600001)(6506007)(26005)(6512007)(186003)(6486002)(52116002)(956004)(66556008)(66476007)(66946007)(2906002)(2616005)(5660300002)(19627235002)(83380400001)(8936002)(8676002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData: 
	isDdA1TQLpw+4hRSJxe+36J8QPSx0N/7/Fu2Hz/ZVJ4qwSKFJ2/MGOy67Ti5M8pxNHwARVgLihYoPaUx6HyTc7jRHcLHfVTAK3OMDNnBniJtBzbbnkmfkAL3g1NdcKBRPuGqQtggmWbdKTJZrXnNJS5oR49sLrCDFBpddhKy0Vaa96izvnJdVCnHC9xKyWqd6IudPN7lknC9EiUbZQkfQN22KRDVVkCCLxiHIw4G6AUyP0/XE5de1KCQVM1M1mXMWBZZgSPC7TvPRoI1OBQjBT1sfIuLscttlOhAFBvyxyFVFs137VqcgzOhWZgREF0qSd4uGJyIjnWuPSkyMivlQFxjEvauYt2ZjssgyQIuq2tPpAEMP/hQeZuagJgdfk7g2k9LO6FfCsmGkF5jhSkIzjcScVOXkQGeVPT9k7aNSHstMH6NdnvVmCJydqENGW1r7Zsfv/NkqmncyaoWVNUKEyDBQM5ICkdMWImA8uuS1zo=
X-OriginatorOrg: oss.nxp.com
X-MS-Exchange-CrossTenant-Network-Message-Id: b25128c0-3164-4e08-2ae4-08d80630c150
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Jun 2020 13:36:14.7686
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: Q6qjKzcle1V5St4G+x1i8ypct4rZGCL9/Pm3JdYJBI0CMisbYXeD0Dox/cVKliz2aPQuJt3Xx/AuFZBKs3vJng==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB6096
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain

From: Pankaj Bansal <pankaj.bansal@nxp.com>

Add ArmPlatformLib for LX2160ARDB platform that is based on
ArmPlatformPkg/Library/ArmPlatformLibNull.

Apart from the the interfaces exposed by ArmPlatformLibNull, this
library also implements gPlatformGetClockPpi, which is specific to NXP
SOCs' based platforms.

Refer edk2-platforms/Silicon/NXP/Include/Ppi/NxpPlatformGetClock.h for
the details.

Signed-off-by: Pankaj Bansal <pankaj.bansal@nxp.com>
Reviewed-by: Leif Lindholm <leif@nuviainc.com>
---

Notes:
    V4:
    - Sorted [Packages] and [FixedPcd] alphabetically in
      Platform/NXP/LX2160aRdbPkg/Library/ArmPlatformLib/ArmPlatformLib.inf
   =20
    V3:
    - split Platform/NXP/LX2160aRdbPkg/Library/ArmPlatformLib/ in two parts
      part containing gPlatformGetClockPpi is put before PL011UartClockLib
      implementation.
   =20
    V2:
    - No change

 Platform/NXP/LX2160aRdbPkg/Library/ArmPlatformLib/ArmPlatformLib.inf      =
    |  39 ++++++
 Platform/NXP/LX2160aRdbPkg/Library/ArmPlatformLib/ArmPlatformLib.c        =
    | 145 ++++++++++++++++++++
 Platform/NXP/LX2160aRdbPkg/Library/ArmPlatformLib/ArmPlatformLibMem.c     =
    |  28 ++++
 Platform/NXP/LX2160aRdbPkg/Library/ArmPlatformLib/AArch64/ArmPlatformHelpe=
r.S |  45 ++++++
 4 files changed, 257 insertions(+)

diff --git a/Platform/NXP/LX2160aRdbPkg/Library/ArmPlatformLib/ArmPlatformL=
ib.inf b/Platform/NXP/LX2160aRdbPkg/Library/ArmPlatformLib/ArmPlatformLib.i=
nf
new file mode 100644
index 000000000000..53d8af58925a
--- /dev/null
+++ b/Platform/NXP/LX2160aRdbPkg/Library/ArmPlatformLib/ArmPlatformLib.inf
@@ -0,0 +1,39 @@
+#/* @file
+#  Copyright 2018, 2020 NXP
+#
+#  SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+#*/
+
+[Defines]
+  INF_VERSION                    =3D 0x0001001A
+  BASE_NAME                      =3D PlatformLib
+  FILE_GUID                      =3D d1361285-8a47-421c-9efd-6b262c9093fc
+  MODULE_TYPE                    =3D BASE
+  VERSION_STRING                 =3D 1.0
+  LIBRARY_CLASS                  =3D ArmPlatformLib
+
+[Packages]
+  ArmPkg/ArmPkg.dec
+  ArmPlatformPkg/ArmPlatformPkg.dec
+  MdeModulePkg/MdeModulePkg.dec
+  MdePkg/MdePkg.dec
+  Silicon/NXP/NxpQoriqLs.dec
+
+[LibraryClasses]
+  ArmLib
+  DebugLib
+
+[Sources.common]
+  ArmPlatformLib.c
+  ArmPlatformLibMem.c
+
+[Sources.AArch64]
+  AArch64/ArmPlatformHelper.S
+
+[FixedPcd]
+  gArmTokenSpaceGuid.PcdArmPrimaryCore
+  gArmTokenSpaceGuid.PcdArmPrimaryCoreMask
+
+[Ppis]
+  gArmMpCoreInfoPpiGuid
diff --git a/Platform/NXP/LX2160aRdbPkg/Library/ArmPlatformLib/ArmPlatformL=
ib.c b/Platform/NXP/LX2160aRdbPkg/Library/ArmPlatformLib/ArmPlatformLib.c
new file mode 100644
index 000000000000..806cfd180bee
--- /dev/null
+++ b/Platform/NXP/LX2160aRdbPkg/Library/ArmPlatformLib/ArmPlatformLib.c
@@ -0,0 +1,145 @@
+/** @file
+*
+*  Copyright 2018-2020 NXP
+*
+*  SPDX-License-Identifier: BSD-2-Clause-Patent
+*
+**/
+
+#include <Library/ArmLib.h>
+#include <Library/ArmPlatformLib.h>
+
+#include <Ppi/ArmMpCoreInfo.h>
+#include <Ppi/NxpPlatformGetClock.h>
+
+ARM_CORE_INFO mLX2160aMpCoreInfoTable[] =3D {
+  {
+    // Cluster 0, Core 0
+    0x0, 0x0,
+
+    // MP Core MailBox Set/Get/Clear Addresses and Clear Value
+    (EFI_PHYSICAL_ADDRESS)0,
+    (EFI_PHYSICAL_ADDRESS)0,
+    (EFI_PHYSICAL_ADDRESS)0,
+    (UINT64)0xFFFFFFFF
+  }
+};
+
+/**
+  Return the current Boot Mode
+
+  This function returns the boot reason on the platform
+
+**/
+EFI_BOOT_MODE
+ArmPlatformGetBootMode (
+  VOID
+  )
+{
+  return BOOT_WITH_FULL_CONFIGURATION;
+}
+
+/**
+  Get the clocks supplied by Platform(Board) to NXP Layerscape SOC IPs
+
+  @param[in]  ClockType  Variable of Type NXP_IP_CLOCK. Indicates which IP=
 clock
+                         is to be retrieved.
+  @param[in]  ...        Variable argument list which is parsed based on
+                         ClockType. e.g. if the ClockType is NXP_I2C_CLOCK=
, then
+                         the second argument will be interpreted as contro=
ller
+                         number.
+                         if ClockType is NXP_CORE_CLOCK, then second argum=
ent
+                         is interpreted as cluster number and third argume=
nt is
+                         interpreted as core number (within the cluster)
+
+  @return                Actual Clock Frequency. Return value 0 should be
+                         interpreted as clock not being provided to IP.
+**/
+UINT64
+EFIAPI
+NxpPlatformGetClock(
+  IN  UINT32  ClockType,
+  ...
+  )
+{
+  UINT64      Clock;
+  VA_LIST     Args;
+
+  Clock =3D 0;
+
+  VA_START (Args, ClockType);
+
+  switch (ClockType) {
+  case NXP_SYSTEM_CLOCK:
+    Clock =3D 100 * 1000 * 1000; // 100 MHz
+    break;
+  case NXP_I2C_CLOCK:
+  case NXP_UART_CLOCK:
+    Clock =3D NxpPlatformGetClock (NXP_SYSTEM_CLOCK);
+    break;
+  default:
+    break;
+  }
+
+  VA_END (Args);
+
+  return Clock;
+}
+
+/**
+  Initialize controllers that must setup in the normal world
+
+  This function is called by the ArmPlatformPkg/PrePi or ArmPlatformPkg/Pl=
atformPei
+  in the PEI phase.
+
+**/
+EFI_STATUS
+ArmPlatformInitialize (
+  IN  UINTN                     MpId
+  )
+{
+  //TODO: Implement me
+
+  return EFI_SUCCESS;
+}
+
+EFI_STATUS
+PrePeiCoreGetMpCoreInfo (
+  OUT UINTN                   *CoreCount,
+  OUT ARM_CORE_INFO           **ArmCoreTable
+  )
+{
+  if (ArmIsMpCore()) {
+    *CoreCount    =3D sizeof(mLX2160aMpCoreInfoTable) / sizeof(ARM_CORE_IN=
FO);
+    *ArmCoreTable =3D mLX2160aMpCoreInfoTable;
+    return EFI_SUCCESS;
+  } else {
+    return EFI_UNSUPPORTED;
+  }
+}
+
+ARM_MP_CORE_INFO_PPI mMpCoreInfoPpi =3D { PrePeiCoreGetMpCoreInfo };
+NXP_PLATFORM_GET_CLOCK_PPI gPlatformGetClockPpi =3D { NxpPlatformGetClock =
};
+
+EFI_PEI_PPI_DESCRIPTOR      gPlatformPpiTable[] =3D {
+  {
+    EFI_PEI_PPI_DESCRIPTOR_PPI,
+    &gArmMpCoreInfoPpiGuid,
+    &mMpCoreInfoPpi
+  }
+};
+
+VOID
+ArmPlatformGetPlatformPpiList (
+  OUT UINTN                   *PpiListSize,
+  OUT EFI_PEI_PPI_DESCRIPTOR  **PpiList
+  )
+{
+  if (ArmIsMpCore()) {
+    *PpiListSize =3D sizeof(gPlatformPpiTable);
+    *PpiList =3D gPlatformPpiTable;
+  } else {
+    *PpiListSize =3D 0;
+    *PpiList =3D NULL;
+  }
+}
diff --git a/Platform/NXP/LX2160aRdbPkg/Library/ArmPlatformLib/ArmPlatformL=
ibMem.c b/Platform/NXP/LX2160aRdbPkg/Library/ArmPlatformLib/ArmPlatformLibM=
em.c
new file mode 100644
index 000000000000..ad6862dd81eb
--- /dev/null
+++ b/Platform/NXP/LX2160aRdbPkg/Library/ArmPlatformLib/ArmPlatformLibMem.c
@@ -0,0 +1,28 @@
+/** @file
+*
+*  Copyright 2018, 2020 NXP
+*
+*  SPDX-License-Identifier: BSD-2-Clause-Patent
+*
+**/
+
+#include <Library/ArmPlatformLib.h>
+#include <Library/DebugLib.h>
+
+/**
+  Return the Virtual Memory Map of your platform
+
+  This Virtual Memory Map is used by MemoryInitPei Module to initialize th=
e MMU on your platform.
+
+  @param[out]   VirtualMemoryMap    Array of ARM_MEMORY_REGION_DESCRIPTOR =
describing a Physical-to-
+                                    Virtual Memory mapping. This array mus=
t be ended by a zero-filled
+                                    entry
+
+**/
+VOID
+ArmPlatformGetVirtualMemoryMap (
+  IN ARM_MEMORY_REGION_DESCRIPTOR** VirtualMemoryMap
+  )
+{
+  ASSERT(0);
+}
diff --git a/Platform/NXP/LX2160aRdbPkg/Library/ArmPlatformLib/AArch64/ArmP=
latformHelper.S b/Platform/NXP/LX2160aRdbPkg/Library/ArmPlatformLib/AArch64=
/ArmPlatformHelper.S
new file mode 100644
index 000000000000..b7c6dbdc2e61
--- /dev/null
+++ b/Platform/NXP/LX2160aRdbPkg/Library/ArmPlatformLib/AArch64/ArmPlatform=
Helper.S
@@ -0,0 +1,45 @@
+//
+//  Copyright (c) 2012-2013, ARM Limited. All rights reserved.
+//
+//  SPDX-License-Identifier: BSD-2-Clause-Patent
+//
+//
+
+#include <AsmMacroIoLibV8.h>
+#include <Library/ArmLib.h>
+
+ASM_FUNC(ArmPlatformPeiBootAction)
+  ret
+
+//UINTN
+//ArmPlatformGetCorePosition (
+//  IN UINTN MpId
+//  );
+// With this function: CorePos =3D (ClusterId * 4) + CoreId
+ASM_FUNC(ArmPlatformGetCorePosition)
+  and   x1, x0, #ARM_CORE_MASK
+  and   x0, x0, #ARM_CLUSTER_MASK
+  add   x0, x1, x0, LSR #6
+  ret
+
+//UINTN
+//ArmPlatformGetPrimaryCoreMpId (
+//  VOID
+//  );
+ASM_FUNC(ArmPlatformGetPrimaryCoreMpId)
+  MOV32  (w0, FixedPcdGet32 (PcdArmPrimaryCore))
+  ret
+
+//UINTN
+//ArmPlatformIsPrimaryCore (
+//  IN UINTN MpId
+//  );
+ASM_FUNC(ArmPlatformIsPrimaryCore)
+  MOV32  (w1, FixedPcdGet32 (PcdArmPrimaryCoreMask))
+  and   x0, x0, x1
+  MOV32  (w1, FixedPcdGet32 (PcdArmPrimaryCore))
+  cmp   w0, w1
+  mov   x0, #1
+  mov   x1, #0
+  csel  x0, x0, x1, eq
+  ret
--=20
2.17.1