From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by mx.groups.io with SMTP id smtpd.web09.6352.1627543008622776276 for ; Thu, 29 Jul 2021 00:16:49 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@intel.onmicrosoft.com header.s=selector2-intel-onmicrosoft-com header.b=W5FNwPYm; spf=pass (domain: intel.com, ip: 134.134.136.126, mailfrom: nathaniel.l.desimone@intel.com) X-IronPort-AV: E=McAfee;i="6200,9189,10059"; a="200036761" X-IronPort-AV: E=Sophos;i="5.84,278,1620716400"; d="scan'208";a="200036761" Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 29 Jul 2021 00:16:45 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.84,278,1620716400"; d="scan'208";a="499650752" Received: from orsmsx606.amr.corp.intel.com ([10.22.229.19]) by fmsmga004.fm.intel.com with ESMTP; 29 Jul 2021 00:16:44 -0700 Received: from orsmsx607.amr.corp.intel.com (10.22.229.20) by ORSMSX606.amr.corp.intel.com (10.22.229.19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.10; Thu, 29 Jul 2021 00:16:43 -0700 Received: from orsedg603.ED.cps.intel.com (10.7.248.4) by orsmsx607.amr.corp.intel.com (10.22.229.20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.10 via Frontend Transport; Thu, 29 Jul 2021 00:16:43 -0700 Received: from NAM04-DM6-obe.outbound.protection.outlook.com (104.47.73.47) by edgegateway.intel.com (134.134.137.100) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2242.10; Thu, 29 Jul 2021 00:16:43 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=RaG+7yXMWNYUeeQiX88rzCB5fycbpKCv7bOndd593stsPs4k1krKTQ5m6xUZrbh8ieci5swywTP4+8zxrm8EvZp1VETTPaPIf+Wl6pBPf4L3LYUfZ4SBwgIP9RfEJFd2wFKFsojkbPVE59C6DOO5P6fE15+q4sQ/PwWuvUhhBCv2fezq7/fsbbfRGwXWAfyzmRnl5K5F1UooEcEP8VaB3dJIuoJOGTFamO7Wkn/Tgv9IUccoZ1k0UOetgGuC71KKKLLVzumwEYVf4NvyQXgv22EMbYeQFZoCM05c6XvQxg3z7bPejfyOdcDoO2ip1MH2oZVbhj4UbEK3tclZ9XVclg== 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=oIVupUdeLBUqk11vVz+2F6xAQeMFgTgSjNPoB3bbNbg=; b=UrfSE8Rm5yuKjyrcGzZZFk2nyzLY1s2Uf4AucqkdwE88R1nQqHNOtmU9aORZgMH13Ryco8W1kJ0UCsUr/8SZd4+T3HtYtOR6rIN/bifIt1u2hK3OECsHRiNacZqDoXSdpf2PzFqooj5XCJgpcBRiTpXbU8B28u9fKy6PyqhKB12rhpFdthQhHLTtxz7ghmEMoFhPUBgw27wR8UB2amSE0AvBsxIgjqDVhv96Ugn61AGGy0A+FbYs488ZKtCNUfS929ftQbSD0H6L4W2uyh7dw08vxI+mMCB+56X/qwZqyz29fGQ7JYQiEKLlfMcT//pR+QWJ0rqlaMjJDiZIzsaDHg== 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 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=intel.onmicrosoft.com; s=selector2-intel-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=oIVupUdeLBUqk11vVz+2F6xAQeMFgTgSjNPoB3bbNbg=; b=W5FNwPYmizuJyuvMhL8qHJow4bbiKGG+O9hA5TwfDtQSPM88QPxb/Qn9AwpBUhYWziuI8/1ptNfSt/v2ftFGzt+Cc7iPs0TuOv3Cog9sK6EQ0lPItVTjxYyLdTuApriDWceVq8DNDoRapGRUeoFClUsWbGzWOyZkkCxuG6dvhxE= Received: from MWHPR1101MB2160.namprd11.prod.outlook.com (10.174.101.140) by MWHPR11MB1456.namprd11.prod.outlook.com (10.172.53.138) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4373.17; Thu, 29 Jul 2021 07:16:40 +0000 Received: from MWHPR1101MB2160.namprd11.prod.outlook.com ([fe80::64ce:a6b0:9ae8:e644]) by MWHPR1101MB2160.namprd11.prod.outlook.com ([fe80::64ce:a6b0:9ae8:e644%12]) with mapi id 15.20.4373.021; Thu, 29 Jul 2021 07:16:40 +0000 From: "Nate DeSimone" To: "KARPAGAVINAYAGAM, MANICKAVASAKAM" , "devel@edk2.groups.io" CC: "Oram, Isaac W" , "Felixp@ami.com" , "DOPPALAPUDI, HARIKRISHNA" , "Jha, Manish" , "Bobroff, Zachary" , "KARPAGAVINAYAGAM, MANICKAVASAKAM" Subject: Re: [edk2-platforms][PATCH V2] PurleyOpenBoardPkg : Support for LINUX Boot Thread-Topic: [edk2-platforms][PATCH V2] PurleyOpenBoardPkg : Support for LINUX Boot Thread-Index: AQHXbfryi/Hcw+9YzU+igO2pf07wgatZd5Ng Date: Thu, 29 Jul 2021 07:16:40 +0000 Message-ID: References: <20210630215728.13625-1-manickavasakamk@ami.com> In-Reply-To: <20210630215728.13625-1-manickavasakamk@ami.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-reaction: no-action dlp-version: 11.5.1.3 dlp-product: dlpe-windows authentication-results: ami.com; dkim=none (message not signed) header.d=none;ami.com; dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: a07d3867-6fb5-4124-ad14-08d95260cfc4 x-ms-traffictypediagnostic: MWHPR11MB1456: x-ld-processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:10000; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: Ej0f0bphbZkERzaY8INN5gHEEquP4csSgbBCpIJRVeJzvDUpV8/iOX5lCLPb7v3sk1NGWaorGRAbXv6ymd4c7EPQ/Ixyq7C17r7+EyUCrcx8/4pMMrC2y8TNYv0XOBsRqW3Vjbktpb8nLvuTB+H+lTtDjLxQmcpUAbx351jTDDEaAyrgEG2e22W0mImxAANr1DOufCQ9lyReGA+u/ZJCmtqPoXd6XJeA5VbsSSPbaAxvj9W8R87GshJkIjISFZQHa5zowVhhLcwkM5oGCpDCMtQoFBF9ypXXDqE2dnPWEgmKITaAnaIWq/YpkifR8mmlmvxOu6YJIUws7fAv91Qh4CleyH+bJCcIV88twR3dwcgW+cCA35+zHacpiww3gfZxRM9mFh/QdpnGn/OT1uAfOWtN0ThFnqaxZsyDRGpKf96UDDpB/wjtWe7wRbVmHMg5Iq5RSi9k/i/okoDM06tVx1SqJwj308beA36VapDNDDvByeVt0k6LfR7jUwu05lnW+9SlBh63n0CdgypcuICxOvBwNwNxzuVSpXNQ5icMo+ug2IGfnyNXHCOF/lQy/WBWhzXT7Ep0lfqMt4/oOu0BcWNDrMnWqYw68Fpl1gnH1JPG7qSiQqhRQoTerz+Y8Q+cb5FCL57w+/ic2Tqh4J36WvKhQyZkpC/aNh6X3mNO8Oah6u0OsQSAv45lBcInxt+nr+6mgrGknscduxTX0zL39eI7YORIMa8DxEcl1UqYT8r0dyF44vYPHsMm0hRSbuEIdaXjBVEDTn/LVjRsJQphkqwz9rZvahBTBLvVrhSrzxU= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MWHPR1101MB2160.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(346002)(396003)(366004)(376002)(136003)(39860400002)(110136005)(64756008)(66556008)(66446008)(33656002)(86362001)(52536014)(66946007)(316002)(71200400001)(38070700005)(26005)(76116006)(186003)(66476007)(4326008)(54906003)(30864003)(2906002)(122000001)(55016002)(966005)(9686003)(7696005)(6506007)(8676002)(83380400001)(53546011)(8936002)(5660300002)(478600001)(45080400002)(38100700002)(579004)(559001);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?KSOcCJX63/yuY5JTCNjiZL9Cp47k19v09lZl5R+98SA7PrVhsbpS1A8rItMS?= =?us-ascii?Q?yrLp7N7c95wZ4bwFUyxglvxHvLMr+FuqZfljF7dzmWhZ95WeKTO2ke6faJqY?= =?us-ascii?Q?5tcJnDi4lZ6x1iotzAuytWHa3SOzDpFz41fi6HabO+8Cq/TimGJqx886pRs8?= =?us-ascii?Q?8Fi2TbdHbl8agjLX61sC1z3JtP3kNDyi3HjflFg7kBGojUIi2oAKtQ45aQzt?= =?us-ascii?Q?DVZL9xT/buHp5VqpJKNkpOLj3f3sUqobZJYrXdBxOQ65F9X28eu0J6Wj1lNQ?= =?us-ascii?Q?qSzwxrNgSEL7ZFz3AAtm4Y5X9IsPqxPvq5zlE149qdDaJCO3i5hdxBUtlyaa?= =?us-ascii?Q?i5S8dz2I1k74tsGyhWtkLhIXzq3pczpCjVHQA/+fhDY3SXdK31qlc9vsJUIL?= =?us-ascii?Q?symQDJgW8eCoR1QSkN+rtYqN2E6WFfYL8VFgxRUU3s8Kj9lQrtWpvowjvmk6?= =?us-ascii?Q?QvGNZu7hQ+rhJKf0LPbUpzpNcWVSEN8/5wue3SPsISlRc+0bRJ2n7Zd/YueV?= =?us-ascii?Q?iol30odA18olOY3j3Dfg5hEkPRZH9Kykw+mBRt18kmX3etNkcDfdCZC0fWAO?= =?us-ascii?Q?uIB6UG/xouMAhxlqFHDbwbKFZB+GX5UDf/ex357TA+/B6hH9rbq3H+0IvoN4?= =?us-ascii?Q?k7WNxspdNQ4Ann7z5AXMYVgu4KkaouOA+nXjKRMTMbx9aei0JBM8ReTD1sJK?= =?us-ascii?Q?gsnPMpVhZ6nRMIdLjlZ+5xiq60ApK2CNOIn5It5/3u7x5I4gtdGuYksL6ROI?= =?us-ascii?Q?opZe2tp48Wij2F4OOhhN+iP2oma7Nbi2pnZl5SUL760LQCUO4ZVEvP64Yn40?= =?us-ascii?Q?6FEWrGscBLBgbIDJ4iCZDpTavlLorjEj5FCyxxzNjC8IN7ZrhkRlqxvmoGgv?= =?us-ascii?Q?gcDGYRPLXN8/Iv1HkeevYQLxK4vQS0DFNznu4wQVJGuVgIxT/dGRamw+gwNu?= =?us-ascii?Q?0h4+ygedF3qF4f/u3i1M5/9qitaG8quYEG2ZKT71OjuDaisvNQcP1Oqwy2tV?= =?us-ascii?Q?h4WT00C7fxgBxcKzdvxnC38FLaT/QROOITYB5sZ1NqQ0NbRYCnqAE91QldQr?= =?us-ascii?Q?tVQW8M418PZ8XE7frqKFwcP4xZXykhhclMEb8nAbu0efK9MeKPuC2QmQlbzR?= =?us-ascii?Q?6S9wR85/rOzWZlmqbGL+NPJ1DWNZuaEXTYs0TjgCMi4rFfIy1HhbH/pQaxfz?= =?us-ascii?Q?Skh5+FrrfUJ0cVaIk0BpY9UChnyidMTsP0pWi0MuOH3YKHrpPZWAHPRbcMfe?= =?us-ascii?Q?AxsxOOAkY0qenc5NyLVGWZFfoO0l0CQhFpyH0Svomk9LbpSeoQx19OR6kuuc?= =?us-ascii?Q?6O0=3D?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MWHPR1101MB2160.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: a07d3867-6fb5-4124-ad14-08d95260cfc4 X-MS-Exchange-CrossTenant-originalarrivaltime: 29 Jul 2021 07:16:40.0419 (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: hL2A7vAu/5lY0s97oCF46XFa6AC3mwOa9Gsq11wKN+kg0dG1d9lIx6ilorq4kZfCKJvxLBPWUbnzpvE7JRJB6ciJeIhN2d5FZDjdmw6SDLg= X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR11MB1456 Return-Path: nathaniel.l.desimone@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Hi Manic, Unfortunately this patch cannot be merged as is. It appears to contain a pr= e-built binary of the Linux kernel that has been pre-configured for Linuxbo= ot use. While this is very convenient, the Linux kernel is licensed under t= he GPL and hence we cannot add it to edk2-platforms, which must be kept as = BSD only. It might be possible to add this to edk2-non-osi, but even then w= e would require that you provide a readme file that explains how to get and= compile the source code that you used to build this exact Linux image, as = required by the GPL. The easiest and safest option would be to remove the Linux binary all toget= her and provide instructions to the user for how to build their own image a= nd add it to the tree. Thanks, Nate > -----Original Message----- > From: manickavasakam karpagavinayagam > Sent: Wednesday, June 30, 2021 2:57 PM > To: devel@edk2.groups.io > Cc: Oram, Isaac W ; Desimone, Nathaniel L > ; Felixp@ami.com; DOPPALAPUDI, > HARIKRISHNA ; Jha, Manish ; > Bobroff, Zachary ; KARPAGAVINAYAGAM, > MANICKAVASAKAM > Subject: [edk2-platforms][PATCH V2] PurleyOpenBoardPkg : Support for > LINUX Boot >=20 > Support for LINUX Boot > To enable/disable feature, PcdLinuxBootEnable can be used > 1. Follow directions on http://osresearch.net/Building/ to compile the > heads kernel and initrd for qemu-system_x86_64 > 2. Copy the following built files > (1) initrd.cpio.xz to > PurleyOpenBoardPkg/Features/LinuxBoot/LinuxBinaries/initrd.cpio.xz > (2) bzimage to > PurleyOpenBoardPkg/Features/LinuxBoot/LinuxBinaries/linux.efi >=20 > Notes: > V2 : > - Rename LinuxBootPkg to LinuxBoot > - Move LinuxBootPkg to PurleyOpenBoardPkg/Features/LinuxBoot > - Follow Coding Standard in LinuxBoot.C and LinuxBoot.h >=20 > Signed-off-by: manickavasakam karpagavinayagam > > --- > .../BoardTiogaPass/CoreDxeInclude.dsc | 5 +- > .../BoardTiogaPass/CoreUefiBootInclude.fdf | 5 +- > .../BoardTiogaPass/OpenBoardPkg.dsc | 7 + > .../BoardTiogaPass/OpenBoardPkg.fdf | 57 ++- > .../BoardTiogaPass/PlatformPkgConfig.dsc | 7 + > .../LinuxBoot/LinuxBinaries/LinuxKernel.inf | 17 + > .../LinuxBoot/LinuxBinaries/initrd.cpio.xz | Bin 0 -> 16 bytes > .../LinuxBoot/LinuxBinaries/linux.efi | Bin 0 -> 16 bytes > .../Features/LinuxBoot/LinuxBoot.c | 412 ++++++++++++++++++ > .../Features/LinuxBoot/LinuxBoot.h | 185 ++++++++ > .../Features/LinuxBoot/LinuxBoot.inf | 40 ++ > .../Features/LinuxBoot/LinuxBootNull.c | 36 ++ > .../Features/LinuxBoot/LinuxBootNull.inf | 25 ++ > .../Intel/PurleyOpenBoardPkg/OpenBoardPkg.dec | 2 + > .../DxePlatformBootManagerLib/BdsPlatform.c | 9 + > .../DxePlatformBootManagerLib.inf | 2 + > Platform/Intel/Readme.md | 42 ++ > 17 files changed, 843 insertions(+), 8 deletions(-) create mode 100644 > Platform/Intel/PurleyOpenBoardPkg/Features/LinuxBoot/LinuxBinaries/Linu > xKernel.inf > create mode 100644 > Platform/Intel/PurleyOpenBoardPkg/Features/LinuxBoot/LinuxBinaries/initr > d.cpio.xz > create mode 100644 > Platform/Intel/PurleyOpenBoardPkg/Features/LinuxBoot/LinuxBinaries/linu > x.efi > create mode 100644 > Platform/Intel/PurleyOpenBoardPkg/Features/LinuxBoot/LinuxBoot.c > create mode 100644 > Platform/Intel/PurleyOpenBoardPkg/Features/LinuxBoot/LinuxBoot.h > create mode 100644 > Platform/Intel/PurleyOpenBoardPkg/Features/LinuxBoot/LinuxBoot.inf > create mode 100644 > Platform/Intel/PurleyOpenBoardPkg/Features/LinuxBoot/LinuxBootNull.c > create mode 100644 > Platform/Intel/PurleyOpenBoardPkg/Features/LinuxBoot/LinuxBootNull.inf >=20 > diff --git > a/Platform/Intel/PurleyOpenBoardPkg/BoardTiogaPass/CoreDxeInclude.dsc > b/Platform/Intel/PurleyOpenBoardPkg/BoardTiogaPass/CoreDxeInclude.dsc > index b0660d72dd..a17015704b 100644 > --- > a/Platform/Intel/PurleyOpenBoardPkg/BoardTiogaPass/CoreDxeInclude.dsc > +++ > b/Platform/Intel/PurleyOpenBoardPkg/BoardTiogaPass/CoreDxeInclude.ds > +++ c > @@ -83,6 +83,7 @@ >=20 > $(PLATFORM_BOARD_PACKAGE)/Override/MdeModulePkg/Bus/Pci/PciBus > Dxe/PciBusDxe.inf > #TiogaPass Override END >=20 > +!if gPlatformTokenSpaceGuid.PcdLinuxBootEnable =3D=3D FALSE > MdeModulePkg/Bus/Pci/SataControllerDxe/SataControllerDxe.inf > MdeModulePkg/Bus/Ata/AtaBusDxe/AtaBusDxe.inf > MdeModulePkg/Bus/Ata/AtaAtapiPassThru/AtaAtapiPassThru.inf > @@ -97,10 +98,11 @@ > MdeModulePkg/Universal/Disk/PartitionDxe/PartitionDxe.inf >=20 > MdeModulePkg/Universal/Disk/UnicodeCollation/EnglishDxe/EnglishDxe.inf > FatPkg/EnhancedFatDxe/Fat.inf > - > +!endif >=20 > #MdeModulePkg/Universal/Console/GraphicsOutputDxe/GraphicsOutputD > xe.inf >=20 > MdeModulePkg/Universal/Console/GraphicsConsoleDxe/GraphicsConsoleD > xe.inf >=20 > +!if gPlatformTokenSpaceGuid.PcdLinuxBootEnable =3D=3D FALSE > MdeModulePkg/Universal/Console/ConPlatformDxe/ConPlatformDxe.inf > MdeModulePkg/Universal/Console/ConSplitterDxe/ConSplitterDxe.inf >=20 > @@ -124,6 +126,7 @@ > > PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf > } > +!endif >=20 > !if gMinPlatformPkgTokenSpaceGuid.PcdBootToShellOnly =3D=3D FALSE > MdeModulePkg/Core/PiSmmCore/PiSmmIpl.inf > diff --git > a/Platform/Intel/PurleyOpenBoardPkg/BoardTiogaPass/CoreUefiBootInclud > e.fdf > b/Platform/Intel/PurleyOpenBoardPkg/BoardTiogaPass/CoreUefiBootInclud > e.fdf > index 141ce5dda3..6cd8ba6626 100644 > --- > a/Platform/Intel/PurleyOpenBoardPkg/BoardTiogaPass/CoreUefiBootInclud > e.fdf > +++ > b/Platform/Intel/PurleyOpenBoardPkg/BoardTiogaPass/CoreUefiBootInclu > +++ de.fdf > @@ -47,6 +47,7 @@ INF PcAtChipsetPkg/HpetTimerDxe/HpetTimerDxe.inf > INF > $(PLATFORM_BOARD_PACKAGE)/Override/MdeModulePkg/Bus/Pci/PciBus > Dxe/PciBusDxe.inf > #TiogaPass Override END >=20 > +!if gPlatformTokenSpaceGuid.PcdLinuxBootEnable =3D=3D FALSE > INF MdeModulePkg/Bus/Pci/SataControllerDxe/SataControllerDxe.inf > INF MdeModulePkg/Bus/Ata/AtaBusDxe/AtaBusDxe.inf > INF MdeModulePkg/Bus/Ata/AtaAtapiPassThru/AtaAtapiPassThru.inf > @@ -62,10 +63,12 @@ INF > MdeModulePkg/Universal/Disk/DiskIoDxe/DiskIoDxe.inf > INF MdeModulePkg/Universal/Disk/PartitionDxe/PartitionDxe.inf > INF > MdeModulePkg/Universal/Disk/UnicodeCollation/EnglishDxe/EnglishDxe.inf > INF FatPkg/EnhancedFatDxe/Fat.inf > +!endif >=20 > #INF > MdeModulePkg/Universal/Console/GraphicsOutputDxe/GraphicsOutputDx > e.inf > INF > MdeModulePkg/Universal/Console/GraphicsConsoleDxe/GraphicsConsoleD > xe.inf >=20 > +!if gPlatformTokenSpaceGuid.PcdLinuxBootEnable =3D=3D FALSE > INF > MdeModulePkg/Universal/Console/ConPlatformDxe/ConPlatformDxe.inf > INF MdeModulePkg/Universal/Console/ConSplitterDxe/ConSplitterDxe.inf >=20 > @@ -79,4 +82,4 @@ INF > MdeModulePkg/Universal/DisplayEngineDxe/DisplayEngineDxe.inf >=20 > INF MdeModulePkg/Application/UiApp/UiApp.inf > INF > MdeModulePkg/Application/BootManagerMenuApp/BootManagerMenuAp > p.inf > - > +!endif > diff --git > a/Platform/Intel/PurleyOpenBoardPkg/BoardTiogaPass/OpenBoardPkg.dsc > b/Platform/Intel/PurleyOpenBoardPkg/BoardTiogaPass/OpenBoardPkg.dsc > index e4c8e7fbf1..67472a1182 100644 > --- > a/Platform/Intel/PurleyOpenBoardPkg/BoardTiogaPass/OpenBoardPkg.dsc > +++ > b/Platform/Intel/PurleyOpenBoardPkg/BoardTiogaPass/OpenBoardPkg.dsc > @@ -104,6 +104,13 @@ >=20 > ########################################################## > ###################### >=20 > [LibraryClasses.common] > +!if gPlatformTokenSpaceGuid.PcdLinuxBootEnable =3D=3D TRUE > + > +LinuxBootLib|$(PLATFORM_BOARD_PACKAGE)/Features/LinuxBoot/LinuxB > oot.inf > + LoadLinuxLib|OvmfPkg/Library/LoadLinuxLib/LoadLinuxLib.inf > +!else > + > +LinuxBootLib|$(PLATFORM_BOARD_PACKAGE)/Features/LinuxBoot/LinuxB > ootNull > +.inf > +!endif > + > !if gPlatformTokenSpaceGuid.PcdFastBoot =3D=3D FALSE >=20 > PlatformBootManagerLib|$(PLATFORM_PACKAGE)/Bds/Library/DxePlatfor > mBootManagerLib/DxePlatformBootManagerLib.inf > !else > diff --git > a/Platform/Intel/PurleyOpenBoardPkg/BoardTiogaPass/OpenBoardPkg.fdf > b/Platform/Intel/PurleyOpenBoardPkg/BoardTiogaPass/OpenBoardPkg.fdf > index 43cd8d94e1..1623c44cd8 100644 > --- > a/Platform/Intel/PurleyOpenBoardPkg/BoardTiogaPass/OpenBoardPkg.fdf > +++ > b/Platform/Intel/PurleyOpenBoardPkg/BoardTiogaPass/OpenBoardPkg.fdf > @@ -19,6 +19,38 @@ > # Also all values will have a PCD assigned so that they can be use= d in the > system, and > # the FlashMap edit tool can be used to change the values here, wi= thout > effecting the code. > # This requires all code to only use the PCD tokens to recover the= values. > +!if gPlatformTokenSpaceGuid.PcdLinuxBootEnable =3D=3D TRUE > + > +SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvAdvancedOffset =3D > 0x00000000 # Flash addr (0xFF840000) > +SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvAdvancedSize =3D > 0x00300000 # > +SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvSecurityOffset =3D > 0x00300000 # Flash addr (0xFF8A0000) > +SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvSecuritySize =3D > 0x00100000 # > +SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvOsBootOffset =3D > 0x00400000 # Flash addr (0xFF910000) > +SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvOsBootSize =3D > 0x00100000 # > +SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspUOffset =3D > 0x00500000 # Flash addr (0xFFE00000) > +SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspUSize =3D > 0x00100000 # > +SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvUefiBootOffset =3D > 0x00600000 # Flash addr (0xFF9A0000) > +SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvUefiBootSize =3D > 0x00600000 # > +SET gMinPlatformPkgTokenSpaceGuid.PcdFlashNvStorageVariableOffset =3D > 0x00C00000 # Flash addr (0xFF800000) > +SET gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize > =3D 0x0007C000 # > + > +!else > + > +SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvAdvancedOffset =3D > 0x00000000 # Flash addr (0xFF840000) > +SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvAdvancedSize =3D > 0x00500000 # > +SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvSecurityOffset =3D > 0x00500000 # Flash addr (0xFF8A0000) > +SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvSecuritySize =3D > 0x00100000 # > +SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvOsBootOffset =3D > 0x00600000 # Flash addr (0xFF910000) > +SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvOsBootSize =3D > 0x00100000 # > +SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspUOffset =3D > 0x00700000 # Flash addr (0xFFE00000) > +SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspUSize =3D > 0x00200000 # > +SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvUefiBootOffset =3D > 0x00900000 # Flash addr (0xFF9A0000) > +SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvUefiBootSize =3D > 0x00300000 # > +SET gMinPlatformPkgTokenSpaceGuid.PcdFlashNvStorageVariableOffset =3D > 0x00C00000 # Flash addr (0xFF800000) > +SET gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize > =3D 0x0007C000 # > + > +!endif > + >=20 > [FD.Platform] > BaseAddress =3D 0xFF000000 | > gEfiPchTokenSpaceGuid.PcdFlashAreaBaseAddress > @@ -27,27 +59,27 @@ ErasePolarity =3D 1 > BlockSize =3D 0x10000 > NumBlocks =3D 0x100 >=20 > -0x00000000|0x00500000 > +gMinPlatformPkgTokenSpaceGuid.PcdFlashFvAdvancedOffset|gMinPlatfor > mPkgT > +okenSpaceGuid.PcdFlashFvAdvancedSize >=20 > gMinPlatformPkgTokenSpaceGuid.PcdFlashFvAdvancedBase|gMinPlatformP > kgTokenSpaceGuid.PcdFlashFvAdvancedSize > FV =3D FvAdvanced >=20 > -0x00500000|0x00100000 > +gMinPlatformPkgTokenSpaceGuid.PcdFlashFvSecurityOffset|gMinPlatform > PkgT > +okenSpaceGuid.PcdFlashFvSecuritySize >=20 > gMinPlatformPkgTokenSpaceGuid.PcdFlashFvSecurityBase|gMinPlatformPk > gTokenSpaceGuid.PcdFlashFvSecuritySize > FV =3D FvSecurity >=20 > -0x00600000|0x00100000 > +gMinPlatformPkgTokenSpaceGuid.PcdFlashFvOsBootOffset|gMinPlatform > PkgTok > +enSpaceGuid.PcdFlashFvOsBootSize >=20 > gMinPlatformPkgTokenSpaceGuid.PcdFlashFvOsBootBase|gMinPlatformPkg > TokenSpaceGuid.PcdFlashFvOsBootSize > FV =3D FvOsBoot >=20 > -0x00700000|0x00200000 > +gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspUOffset|gMinPlatformPk > gToken > +SpaceGuid.PcdFlashFvFspUSize >=20 > gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspUBase|gMinPlatformPkgTo > kenSpaceGuid.PcdFlashFvFspUSize > FV =3D FvLateSiliconCompressed >=20 > -0x00900000|0x00300000 > +gMinPlatformPkgTokenSpaceGuid.PcdFlashFvUefiBootOffset|gMinPlatfor > mPkgT > +okenSpaceGuid.PcdFlashFvUefiBootSize >=20 > gMinPlatformPkgTokenSpaceGuid.PcdFlashFvUefiBootBase|gMinPlatformPk > gTokenSpaceGuid.PcdFlashFvUefiBootSize > FV =3D FvUefiBoot >=20 > -0x00C00000|0x0007C000 > +gMinPlatformPkgTokenSpaceGuid.PcdFlashNvStorageVariableOffset|gEfiM > deMo > +dulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize >=20 > gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase|gEfiM > deModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize > #NV_VARIABLE_STORE > DATA =3D { > @@ -303,6 +335,19 @@ FILE DRIVER =3D db90bb7e-e4ba-4f07-96d6- > b7076713bd2c { >=20 > INF MdeModulePkg/Bus/Pci/NvmExpressDxe/NvmExpressDxe.inf >=20 > +!if gPlatformTokenSpaceGuid.PcdLinuxBootEnable =3D=3D TRUE > + > +FILE DRIVER =3D 81339b04-fa8c-4be0-9ca7-916fc5319eb5 { > + SECTION DXE_DEPEX_EXP =3D {FALSE} > + SECTION PE32 =3D > +$(PLATFORM_BOARD_PACKAGE)/Features/LinuxBoot/LinuxBinaries/linux. > efi > +} > + > +FILE FREEFORM =3D 16b60e5d-f1c5-42f0-9b34-08C81C430473 { > + SECTION RAW =3D > +$(PLATFORM_BOARD_PACKAGE)/Features/LinuxBoot/LinuxBinaries/initrd. > cpio. > +xz > +} > + > +!endif > + >=20 > [FV.FvUefiBoot] > FvAlignment =3D 16 > diff --git > a/Platform/Intel/PurleyOpenBoardPkg/BoardTiogaPass/PlatformPkgConfig.d > sc > b/Platform/Intel/PurleyOpenBoardPkg/BoardTiogaPass/PlatformPkgConfig. > dsc > index 36a29c8d68..ff27252233 100644 > --- > a/Platform/Intel/PurleyOpenBoardPkg/BoardTiogaPass/PlatformPkgConfig.d > sc > +++ > b/Platform/Intel/PurleyOpenBoardPkg/BoardTiogaPass/PlatformPkgConfig > +++ .dsc > @@ -51,7 +51,14 @@ >=20 > gMinPlatformPkgTokenSpaceGuid.PcdPerformanceEnable|TRUE >=20 > + gPlatformTokenSpaceGuid.PcdLinuxBootEnable|FALSE > + > +!if gPlatformTokenSpaceGuid.PcdLinuxBootEnable =3D=3D TRUE > + gPlatformTokenSpaceGuid.PcdFastBoot|TRUE > +!else > gPlatformTokenSpaceGuid.PcdFastBoot|FALSE > +!endif > + > !if gPlatformTokenSpaceGuid.PcdFastBoot =3D=3D TRUE > gIpmiFeaturePkgTokenSpaceGuid.PcdIpmiFeatureEnable|FALSE > gPlatformTokenSpaceGuid.PcdUpdateConsoleInBds|FALSE > diff --git > a/Platform/Intel/PurleyOpenBoardPkg/Features/LinuxBoot/LinuxBinaries/Li > nuxKernel.inf > b/Platform/Intel/PurleyOpenBoardPkg/Features/LinuxBoot/LinuxBinaries/Li > nuxKernel.inf > new file mode 100644 > index 0000000000..0e197ecb68 > --- /dev/null > +++ > b/Platform/Intel/PurleyOpenBoardPkg/Features/LinuxBoot/LinuxBinaries > +++ /LinuxKernel.inf > @@ -0,0 +1,17 @@ > +## @file > +# > +# Copyright (c) 2021, American Megatrends International LLC.
# # > +SPDX-License-Identifier: BSD-2-Clause-Patent # ## > + > +[Defines] > + INF_VERSION =3D 1.27 > + BASE_NAME =3D LinuxKernel > + FILE_GUID =3D 81339b04-fa8c-4be0-9ca7-916fc5319eb= 5 > + MODULE_TYPE =3D UEFI_DRIVER > + VERSION_STRING =3D 1.0 > + > +[Binaries.common.AARCH64] > + PE32|linux.efi|* > diff --git > a/Platform/Intel/PurleyOpenBoardPkg/Features/LinuxBoot/LinuxBinaries/ini > trd.cpio.xz > b/Platform/Intel/PurleyOpenBoardPkg/Features/LinuxBoot/LinuxBinaries/in > itrd.cpio.xz > new file mode 100644 > index > 0000000000000000000000000000000000000000..01d633b27e8ea9b17084fc911 > d0c8cc43a4170a9 > GIT binary patch > literal 16 > KcmZQzKm`B*5C8!H >=20 > literal 0 > HcmV?d00001 >=20 > diff --git > a/Platform/Intel/PurleyOpenBoardPkg/Features/LinuxBoot/LinuxBinaries/lin > ux.efi > b/Platform/Intel/PurleyOpenBoardPkg/Features/LinuxBoot/LinuxBinaries/li > nux.efi > new file mode 100644 > index > 0000000000000000000000000000000000000000..01d633b27e8ea9b17084fc911 > d0c8cc43a4170a9 > GIT binary patch > literal 16 > KcmZQzKm`B*5C8!H >=20 > literal 0 > HcmV?d00001 >=20 > diff --git > a/Platform/Intel/PurleyOpenBoardPkg/Features/LinuxBoot/LinuxBoot.c > b/Platform/Intel/PurleyOpenBoardPkg/Features/LinuxBoot/LinuxBoot.c > new file mode 100644 > index 0000000000..682047cef0 > --- /dev/null > +++ b/Platform/Intel/PurleyOpenBoardPkg/Features/LinuxBoot/LinuxBoot.c > @@ -0,0 +1,412 @@ > +/** @file > + > +Copyright (c) 2021, American Megatrends International LLC. All rights > +reserved.
> +SPDX-License-Identifier: BSD-2-Clause-Patent > + > +**/ > + > + > +#include > +#include > +#include > +#include > +#include > +#include > +#include #include > + > +#include > +#include #include > +#include #include > > +#include #include > +#include #include #include > + #include "LinuxBoot.h" > + > +//16b60e5d-f1c5-42f0-9b34-08C81C430473 > +#define LINUX_BOOT_INITRD_GUID \ > + { \ > + 0x16b60e5d, 0xf1c5, 0x42f0, {0x9b, 0x34, 0x08, 0xc8, 0x1c, 0x43, > +0x04, 0x73} \ > + } > + > +#define LINUX_BOOT_KERNEL_GUID \ > + { \ > + 0x81339b04, 0xfa8c, 0x4be0, {0x9c, 0xa7, 0x91, 0x6f, 0xc5, 0x31, > +0x9e, 0xb5} \ > + } > + > + > +EFI_STATUS > +EFIAPI > +LoadLinuxCheckKernelSetup ( > + IN VOID *KernelSetup, > + IN UINTN KernelSetupSize > + ); > + > +VOID* > +EFIAPI > +LoadLinuxAllocateKernelSetupPages ( > + IN UINTN Pages > + ); > + > +EFI_STATUS > +EFIAPI > +LoadLinuxInitializeKernelSetup ( > + IN VOID *KernelSetup > + ); > + > +VOID* > +EFIAPI > +LoadLinuxAllocateKernelPages ( > + IN VOID *KernelSetup, > + IN UINTN Pages > + ); > + > +EFI_STATUS > +EFIAPI > +LoadLinuxSetCommandLine ( > + IN OUT VOID *KernelSetup, > + IN CHAR8 *CommandLine > + ); > + > +EFI_STATUS > +EFIAPI > +LoadLinux ( > + IN VOID *Kernel, > + IN OUT VOID *KernelSetup > + ); > + > +VOID* > +EFIAPI > +LoadLinuxAllocateInitrdPages ( > + IN VOID *KernelSetup, > + IN UINTN Pages > + ); > + > +EFI_GUID gLinuxBootInitrdFileGuid =3D LINUX_BOOT_INITRD_GUID; > + > +EFI_GUID gLinuxBootKernelFileGuid =3D LINUX_BOOT_KERNEL_GUID; > + > +//--------------------------------------------------------------------- > +------ > + > +/** > + Dump some hexadecimal data to the screen. > + > + @note Function taken from > + ShellPkg/Library/UefiShellCommandLib/UefiShellCommandLib.c in EDKII > + > + @param[in] Indent How many spaces to indent the output. > + @param[in] Offset The offset of the printing. > + @param[in] DataSize The size in bytes of UserData. > + @param[in] UserData The data to print out. > +**/ > +static > +VOID > +DumpHex ( > + IN UINTN Indent, > + IN UINTN Offset, > + IN UINTN DataSize, > + IN VOID *UserData > + ) > +{ > + UINT8 *Data; > + CHAR8 Val[50]; > + CHAR8 Str[20]; > + UINT8 TempByte; > + UINTN Size; > + UINTN Index; > + CHAR8 Hex[] =3D { > + '0', '1', '2', '3', '4', '5', '6', '7', > + '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' > + }; > + > + DEBUG((DEBUG_INFO, "%*a 00 01 02 03 04 05 06 07 08 09 0A 0B 0= C 0D > 0E 0F\n", Indent, "")); > + DEBUG((DEBUG_INFO, "%*a -------------------------------------= ----------- > \n", Indent, "")); > + > + Data =3D UserData; > + while (DataSize !=3D 0) { > + Size =3D 16; > + if (Size > DataSize) { > + Size =3D DataSize; > + } > + > + for (Index =3D 0; Index < Size; Index +=3D 1) { > + TempByte =3D Data[Index]; > + Val[Index * 3 + 0] =3D Hex[TempByte >> 4]; > + Val[Index * 3 + 1] =3D Hex[TempByte & 0xF]; > + Val[Index * 3 + 2] =3D (CHAR8) ((Index =3D=3D 7) ? '-' : ' '); > + Str[Index] =3D (CHAR8) ((TempByte < ' ' || TempByte > 'z'= ) ? '.' : > TempByte); > + } > + > + Val[Index * 3] =3D 0; > + Str[Index] =3D 0; > + DEBUG((DEBUG_INFO, "%*a%08X: %-48a %a\n", Indent, "", Offset, Val, > + Str)); > + > + Data +=3D Size; > + Offset +=3D Size; > + DataSize -=3D Size; > + } > +} > + > + > +/** > + * This function completes a minimal amount of the necessary BDS > +functions to prepare > + * for booting the kernel. > + * > + * @param None > + * > + * @retval EFI_SUCCESS Successfully completed remaining tasks > + * @return EFI_ERROR Could not complete BDS tasks > + */ > +EFI_STATUS > +CompleteBdsTasks ( > + VOID > +) > +{ > + > + return EFI_SUCCESS; > +} > + > +/** > + * This function will load and launch the Linux kernel from a BIOS FV. > + * > + * @note This function is not intended to return. Any exiting from th= is > function indicates > + * a problem loading or launching the kernel. > + * > + * @param None > + * > + * @return EFI_ERROR Any error code > + */ > +EFI_STATUS > +LoadAndLaunchKernel ( > + VOID > +) > +{ > + EFI_LOADED_IMAGE_PROTOCOL *LoadedImage =3D NULL; > + EFI_STATUS Status; > + EFI_HANDLE KernelHandle =3D NULL; > + VOID *KernelBuffer =3D NULL; > + VOID *KernelFfsBuffer =3D NULL; > + UINTN KernelFfsSize =3D 0; > + VOID *InitrdData =3D NULL; > + VOID *InitrdBuffer =3D NULL; > + UINTN InitrdSize =3D 0; > + struct BootParams *BootParams =3D NULL; > + struct BootParams *HandoverParams =3D NULL; > + UINT32 StartOffset =3D 0; > + UINT32 KernelLength =3D 0; > + UINT8 *Temp; > + UINT8 CmdLine[] =3D " "; > + > + DEBUG((DEBUG_INFO, "LoadAndLaunchKernel Entry\n")); > + > + /// > + /// Kernel load and preparation > + /// > + DEBUG((DEBUG_INFO, "Preparing the kernel...\n")); > + > + // Retrieve the kernel from the firmware volume > + Status =3D GetSectionFromAnyFv( > + &gLinuxBootKernelFileGuid, > + EFI_SECTION_PE32, > + 0, > + &KernelFfsBuffer, > + &KernelFfsSize > + ); > + > + DEBUG((DEBUG_INFO, "Status %r\n",Status)); > + DEBUG((DEBUG_INFO, "KernelFfsBuffer %x\n",KernelFfsBuffer)); > + DEBUG((DEBUG_INFO, "KernelFfsSize %x\n",KernelFfsSize)); > + > + if (EFI_ERROR(Status)) { > + DEBUG((DEBUG_ERROR, "Could not retrieve kernel; %r.\n", Status))= ; > + goto FatalError; > + } > + > + DEBUG((DEBUG_INFO, "Loaded kernel to buffer at 0x%p with size > 0x%X.\n", KernelFfsBuffer, KernelFfsSize)); > + DEBUG((DEBUG_INFO, "Printing first 0x%X bytes:\n", > + MIN(KernelFfsSize, 0x100))); > + > + DumpHex(2, 0, MIN(0x100, KernelFfsSize), KernelFfsBuffer); > + > + // Create a LoadImage protocol for the kernel > + Status =3D gBS->LoadImage(TRUE, gImageHandle, NULL, KernelFfsBuffer, > KernelFfsSize, &KernelHandle); > + if (EFI_ERROR(Status)) { > + DEBUG((DEBUG_ERROR, "Could not create LoadImage for kernel %r\n"= , > Status)); > + goto FatalError; > + } > + > + // Get the new LoadedImage protocol to retrieve information about th= e > kernel > + Status =3D gBS->HandleProtocol(KernelHandle, > &gEfiLoadedImageProtocolGuid, (VOID **) &LoadedImage); > + if (EFI_ERROR(Status)) { > + DEBUG((DEBUG_ERROR, "Could not get kernel LoadedImage protocol; > %r\n", Status)); > + goto FatalError; > + } > + > + DEBUG((DEBUG_INFO, "Kernel LoadedImage information:\n")); > + DEBUG((DEBUG_INFO, " ImageBase =3D 0x%p\n", LoadedImage- > >ImageBase)); > + DEBUG((DEBUG_INFO, " ImageSize =3D 0x%p\n", > + LoadedImage->ImageSize)); > + > + // Verify the kernel boot parameters from the LoadedImage and alloca= te > an initalization buffer once verified > + BootParams =3D (struct BootParams*) LoadedImage->ImageBase; > + > + Status =3D LoadLinuxCheckKernelSetup((VOID *) BootParams, sizeof(str= uct > BootParams)); > + if (EFI_ERROR (Status)) { > + DEBUG((DEBUG_ERROR, "LoadLinuxCheckKernelSetup failed; %r.\n", > Status)); > + goto FatalError; > + } > + > + HandoverParams =3D > LoadLinuxAllocateKernelSetupPages(EFI_SIZE_TO_PAGES(KERNEL_SETUP_SI > ZE)); > + if (HandoverParams =3D=3D NULL) { > + DEBUG((DEBUG_ERROR, "Could not allocate memory for kernel > handover parameters.\n")); > + goto FatalError; > + } > + DEBUG((DEBUG_INFO, "Handover parameters allocated at 0x%p\n", > + HandoverParams)); > + > + gBS->CopyMem(&HandoverParams->Hdr, &BootParams->Hdr, > sizeof(struct > + SetupHeader)); > + > + Status =3D LoadLinuxInitializeKernelSetup(HandoverParams); > + if (EFI_ERROR (Status)) { > + DEBUG((DEBUG_ERROR, "Unable to initialize the handover parameter= s; > %r.\n", Status)); > + goto FatalError; > + } > + > + // Allocate space for the kernel and copy it into the new buffer > + KernelBuffer =3D LoadLinuxAllocateKernelPages(HandoverParams, > EFI_SIZE_TO_PAGES(HandoverParams->Hdr.InitSize)); > + if (KernelBuffer =3D=3D NULL) { > + DEBUG((DEBUG_ERROR, "Unable to allocate memory for kernel.\n")); > + goto FatalError; > + } > + > + StartOffset =3D (HandoverParams->Hdr.SetupSecs + 1) * 512; > + KernelLength =3D (UINT32) (KernelFfsSize - StartOffset); > + Temp =3D (UINT8 *) LoadedImage->ImageBase; > + > + DEBUG((DEBUG_INFO, "Kernel starts at offset 0x%X with length > + 0x%X\n", StartOffset, KernelLength)); > + > + gBS->CopyMem(KernelBuffer, (Temp + StartOffset), KernelLength); > + DEBUG((DEBUG_INFO, "First 0x%X bytes of new kernel buffer > + contents:\n", MIN(0x100, KernelLength))); > + > + DumpHex(2, 0, MIN(0x100, KernelLength), KernelBuffer); > + > + // Prepare the command line > + Status =3D LoadLinuxSetCommandLine(HandoverParams, (UINT8 *) > &CmdLine); > + if (EFI_ERROR (Status)) { > + DEBUG((EFI_D_INFO, "Unable to set linux command line; %r.\n", > Status)); > + goto FatalError; > + } > + > + HandoverParams->Hdr.Code32Start =3D (UINT32)(UINTN) KernelBuffer; > + HandoverParams->Hdr.LoaderId =3D 0x21; > + > + DEBUG((DEBUG_INFO, "Kernel loaded.\n")); > + > + // > + // Initrd load and preparation > + // > + DEBUG((DEBUG_INFO, "Preparing the initrd...\n")); > + > + // Retrieve the initrd from the firmware volume > + Status =3D GetSectionFromAnyFv( > + &gLinuxBootInitrdFileGuid, > + EFI_SECTION_RAW, > + 0, > + &InitrdBuffer, > + &InitrdSize > + ); > + > + if (EFI_ERROR(Status)) { > + DEBUG((DEBUG_ERROR, "Could not retrieve initrd; %r.\n", Status))= ; > + goto FatalError; > + } > + > + DEBUG((DEBUG_INFO, "Loaded initrd to buffer at 0x%p with size > 0x%X.\n", InitrdBuffer, InitrdSize)); > + DEBUG((DEBUG_INFO, "Printing first 0x%X bytes:\n", MIN(0x100, > InitrdSize))); > + DumpHex(2, 0, MIN(0x100, InitrdSize), InitrdBuffer); > + > + // Allocate the initrd for the kernel and copy it in > + InitrdData =3D LoadLinuxAllocateInitrdPages(HandoverParams, > EFI_SIZE_TO_PAGES(InitrdSize)); > + if (InitrdData =3D=3D NULL) { > + DEBUG((DEBUG_ERROR, "Unable to allocate memory for initrd.\n")); > + goto FatalError; > + } > + > + gBS->CopyMem(InitrdData, InitrdBuffer, InitrdSize); > + > + HandoverParams->Hdr.RamDiskStart =3D (UINT32)(UINTN) InitrdData; > + HandoverParams->Hdr.RamDiskLen =3D (UINT32) InitrdSize; > + > + DEBUG((DEBUG_INFO, "Initrd loaded.\n")); > + DEBUG((DEBUG_INFO, "Printing first 0x%X bytes of initrd buffer:\n", > MIN(0x100, InitrdSize))); > + DumpHex(2, 0, MIN(0x100, InitrdSize), InitrdData); > + > + // General cleanup before launching the kernel > + gBS->FreePool(InitrdBuffer); > + InitrdBuffer =3D NULL; > + > + gBS->UnloadImage(KernelHandle); > + gBS->FreePool(KernelFfsBuffer); > + KernelFfsBuffer =3D NULL; > + > + DEBUG((DEBUG_ERROR, "Launching the kernel\n")); > + > + > + // > + // Signal the EFI_EVENT_GROUP_READY_TO_BOOT event. > + // > + EfiSignalEventReadyToBoot(); > + > + > + // Launch the kernel > + Status =3D LoadLinux(KernelBuffer, HandoverParams); > + > + /// > + /// LoadLinux should never return if the kernel boots. Anything past= here > is an error scenario > + /// > + DEBUG((DEBUG_ERROR, "ERROR: LoadLinux has returned with status; > + %r.\n", Status)); > + > +FatalError: > + // Free everything > + if (InitrdData !=3D NULL) gBS->FreePages((EFI_PHYSICAL_ADDRESS) > InitrdData, EFI_SIZE_TO_PAGES(InitrdSize)); > + if (KernelBuffer !=3D NULL) gBS->FreePages((EFI_PHYSICAL_ADDRESS) > KernelBuffer, EFI_SIZE_TO_PAGES(HandoverParams->Hdr.InitSize)); > + if (HandoverParams !=3D NULL) gBS->FreePages((EFI_PHYSICAL_ADDRESS) > HandoverParams, EFI_SIZE_TO_PAGES(KERNEL_SETUP_SIZE)); > + if (InitrdBuffer !=3D NULL) gBS->FreePool(InitrdBuffer); > + if (KernelHandle !=3D NULL) gBS->UnloadImage(KernelHandle); > + if (KernelFfsBuffer !=3D NULL) gBS->FreePool(KernelFfsBuffer); > + > + return EFI_NOT_FOUND; > +} > + > +/** > + * This is the main function for this feature. This will handle > +finding and launching > + * the Linux kernel. > + * > + * @note In general, this function will never return to BDS. The > LINUXBOOT_ALLOW_RETURN_TO_BDS > + * token will allow you to return to BDS if the kernel fails to= launch for > some reason. > + * > + * @param None > + * > + * @retval None > + */ > + > +EFI_STATUS > +LinuxBootStart ( > + VOID > + ) > +{ > + EFI_STATUS Status =3D EFI_SUCCESS; > + > + // Finish BDS and then try to launch the kernel > + //Status =3D CompleteBdsTasks(); > + > + if (!EFI_ERROR(Status)) { > + LoadAndLaunchKernel(); > + } > + > + DEBUG((DEBUG_ERROR, "-----------------------------------\n")); > + DEBUG((DEBUG_ERROR, " ERROR: Kernel failed to launch.\n")); > + DEBUG((DEBUG_ERROR, "-----------------------------------\n")); > + return Status; > +} > + > +//--------------------------------------------------------------------- > +------ > diff --git > a/Platform/Intel/PurleyOpenBoardPkg/Features/LinuxBoot/LinuxBoot.h > b/Platform/Intel/PurleyOpenBoardPkg/Features/LinuxBoot/LinuxBoot.h > new file mode 100644 > index 0000000000..ebbcd6bfd8 > --- /dev/null > +++ > b/Platform/Intel/PurleyOpenBoardPkg/Features/LinuxBoot/LinuxBoot.h > @@ -0,0 +1,185 @@ > +/** @file > +Copyright (c) 2021, American Megatrends International LLC. All rights > +reserved.
> +SPDX-License-Identifier: BSD-2-Clause-Patent **/ > + > +#ifndef __LINUX_BOOT_PRIVATE__H__ > +#define __LINUX_BOOT_PRIVATE__H__ > +#ifdef __cplusplus > +extern "C" { > +#endif // #ifdef __cplusplus > + > +//--------------------------------------------------------------------- > +------ > + > +//#include > + > +#define BOOTSIG 0x1FE > +#define SETUP_HDR 0x53726448 /* 0x53726448 =3D=3D "HdrS" */ > + > +#define E820_RAM 1 > +#define E820_RESERVED 2 > +#define E820_ACPI 3 > +#define E820_NVS 4 > +#define E820_UNUSABLE 5 > + > +#pragma pack(1) > + > +struct SetupHeader { > + UINT8 SetupSecs; // Sectors for setup code > + UINT16 Rootflags; > + UINT32 SysSize; > + UINT16 RamSize; > + UINT16 VideoMode; > + UINT16 RootDev; > + UINT16 Signature; // Boot signature > + UINT16 Jump; > + UINT32 Header; > + UINT16 Version; > + UINT16 SuSwitch; > + UINT16 SetupSeg; > + UINT16 StartSys; > + UINT16 KernelVer; > + UINT8 LoaderId; > + UINT8 LoadFlags; > + UINT16 MoveSize; > + UINT32 Code32Start; // Start of code loaded high > + UINT32 RamDiskStart; // Start of initial ramdisk > + UINT32 RamDiskLen; // Length of initial ramdisk > + UINT32 BootSectkludge; > + UINT16 HeapEnd; > + UINT8 ExtLoaderVer; // Extended boot loader version > + UINT8 ExtLoaderType; // Extended boot loader ID > + UINT32 CmdLinePtr; // 32-bit pointer to the kernel command line > + UINT32 RamDiskMax; // Highest legal initrd address > + UINT32 KernelAlignment; // Physical addr alignment required for > +kernel > + UINT8 RelocatableKernel; // Whether kernel is relocatable or not > + UINT8 MinAlignment; > + UINT16 XloadFlags; > + UINT32 CmdlineSize; > + UINT32 HardwareSubarch; > + UINT64 HardwareSubarchData; > + UINT32 PayloadOffset; > + UINT32 PayloadLength; > + UINT64 SetupData; > + UINT64 PrefAddress; > + UINT32 InitSize; > + UINT32 HandoverOffset; > +}; > + > +struct EfiInfo { > + UINT32 EfiLoaderSignature; > + UINT32 EfiSystab; > + UINT32 EfiMemdescSize; > + UINT32 EfiMemdescVersion; > + UINT32 EfiMemMap; > + UINT32 EfiMemMapSize; > + UINT32 EfiSystabHi; > + UINT32 EfiMemMapHi; > +}; > + > +struct E820Entry { > + UINT64 Addr; // start of memory segment > + UINT64 Size; // size of memory segment > + UINT32 Type; // type of memory segment > +}; > + > +struct ScreenInfo { > + UINT8 OrigX; // 0x00 > + UINT8 OrigY; // 0x01 > + UINT16 ExtMemK; // 0x02 > + UINT16 OrigVideoPage; // 0x04 > + UINT8 OrigVideoMode; // 0x06 > + UINT8 OrigVideoCols; // 0x07 > + UINT8 Flags; // 0x08 > + UINT8 Unused2; // 0x09 > + UINT16 OrigVideoEgaBx;// 0x0a > + UINT16 Unused3; // 0x0c > + UINT8 OrigVideoLines; // 0x0e > + UINT8 OrigVideoIsVGA; // 0x0f > + UINT16 OrigVideoPoints;// 0x10 > + > + // VESA graphic mode -- linear frame buffer > + UINT16 LfbWidth; // 0x12 > + UINT16 LfbHeight; // 0x14 > + UINT16 LfbDepth; // 0x16 > + UINT32 LfbBase; // 0x18 > + UINT32 LfbSize; // 0x1c > + UINT16 ClMagic, ClOffset; // 0x20 > + UINT16 LfbLineLength; // 0x24 > + UINT8 RedSize; // 0x26 > + UINT8 RedPos; // 0x27 > + UINT8 GreenSize; // 0x28 > + UINT8 GreenPos; // 0x29 > + UINT8 BlueSize; // 0x2a > + UINT8 BluePos; // 0x2b > + UINT8 RsvdSize; // 0x2c > + UINT8 RsvdPos; // 0x2d > + UINT16 VesaPmSeg; // 0x2e > + UINT16 VesaPmOff; // 0x30 > + UINT16 Pages; // 0x32 > + UINT16 VesaAttributes; // 0x34 > + UINT32 Capabilities; // 0x36 > + UINT8 Reserved[6]; // 0x3a > +}; > + > +struct BootParams { > + struct ScreenInfo ScreenInfo; > + UINT8 ApmBiosInfo[0x14]; > + UINT8 Pad2[4]; > + UINT64 TbootAddr; > + UINT8 IstInfo[0x10]; > + UINT8 Pad3[16]; > + UINT8 Hd0Info[16]; > + UINT8 Hd1Info[16]; > + UINT8 SysDescTable[0x10]; > + UINT8 OlpcOfwHeader[0x10]; > + UINT8 Pad4[128]; > + UINT8 EdidInfo[0x80]; > + struct EfiInfo EfiInfo; > + UINT32 AltMemK; > + UINT32 Scratch; > + UINT8 E820Entries; > + UINT8 EddBufEntries; > + UINT8 EddMbrSigBufEntries; > + UINT8 Pad6[6]; > + struct SetupHeader Hdr; > + UINT8 Pad7[0x290-0x1f1-sizeof(struct SetupHeader)]; > + UINT32 EddMbrSigBuffer[16]; > + struct E820Entry E820Map[128]; > + UINT8 Pad8[48]; > + UINT8 EddBuf[0x1ec]; > + UINT8 Pad9[276]; > +}; > +#pragma pack () > + > +//--------------------------------------------------------------------- > +------ > + > +#ifndef MIN > +#define MIN(x,y) ((x) < (y) ? (x) : (y)) > +#endif // #ifndef MIN > + > +#define KERNEL_SETUP_SIZE 16384 > + > +//--------------------------------------------------------------------- > +------ > + > +/// > +/// Function prototypes from Bds module /// VOID ConnectEverything(); > +VOID RecoverTheMemoryAbove4Gb(); VOID > SignalAllDriversConnectedEvent(); > +VOID SignalProtocolEvent(IN EFI_GUID *ProtocolGuid); > + > +#if LINUXBOOT_SIGNAL_EXITPMAUTH =3D=3D 1 > +VOID SignalExitPmAuthProtocolEvent(VOID); > +#endif // #if LINUXBOOT_SIGNAL_EXITPMAUTH =3D=3D 1 > + > +typedef VOID (BDS_CONTROL_FLOW_FUNCTION)(); > + > +//--------------------------------------------------------------------- > +------ > + > +/****** DO NOT WRITE BELOW THIS LINE *******/ #ifdef __cplusplus } > +#endif // #ifdef __cplusplus #endif // #ifndef > +__LINUX_BOOT_PRIVATE__H__ > diff --git > a/Platform/Intel/PurleyOpenBoardPkg/Features/LinuxBoot/LinuxBoot.inf > b/Platform/Intel/PurleyOpenBoardPkg/Features/LinuxBoot/LinuxBoot.inf > new file mode 100644 > index 0000000000..5c09e5d317 > --- /dev/null > +++ > b/Platform/Intel/PurleyOpenBoardPkg/Features/LinuxBoot/LinuxBoot.inf > @@ -0,0 +1,40 @@ > +## @file > +# > +# Copyright (c) 2021, American Megatrends International LLC.
# # > +SPDX-License-Identifier: BSD-2-Clause-Patent # ## > + > +[Defines] > + INF_VERSION =3D 0x00010005 > + VERSION_STRING =3D 1.0 > + BASE_NAME =3D LinuxBoot > + FILE_GUID =3D 74a41ddc-fac5-4787-afad-d81ee30a8b= 63 # > {0x74a41ddc, 0xfac5, 0x4787, {0xaf, 0xad, 0xd8, 0x1e, 0xe3, 0x0a, 0x8b, 0= x63}} > + MODULE_TYPE =3D DXE_DRIVER > + LIBRARY_CLASS =3D LinuxBootLib|DXE_DRIVER > +[Sources] > + LinuxBoot.c > + LinuxBoot.h > + > +[Packages] > + MdePkg/MdePkg.dec > + MdeModulePkg/MdeModulePkg.dec > + MinPlatformPkg/MinPlatformPkg.dec > + > +[LibraryClasses] > + UefiDriverEntryPoint > + DxeServicesLib > + BaseMemoryLib > + DebugLib > + UefiRuntimeServicesTableLib > + UefiBootServicesTableLib > + UefiLib > + LoadLinuxLib > + > +[Guids] > + > +[Protocols] > + gEfiLoadedImageProtocolGuid > + > +[Pcd] > diff --git > a/Platform/Intel/PurleyOpenBoardPkg/Features/LinuxBoot/LinuxBootNull.c > b/Platform/Intel/PurleyOpenBoardPkg/Features/LinuxBoot/LinuxBootNull.c > new file mode 100644 > index 0000000000..2e5e44db6c > --- /dev/null > +++ > b/Platform/Intel/PurleyOpenBoardPkg/Features/LinuxBoot/LinuxBootNull > +++ .c > @@ -0,0 +1,36 @@ > +/** @file > + > +Copyright (c) 2021, American Megatrends International LLC. All rights > +reserved.
> +SPDX-License-Identifier: BSD-2-Clause-Patent > + > +**/ > + > + > +#include > +#include > +#include > +#include > + > + > +/** > + * This is the main function for this feature. This will handle > +finding and launching > + * the Linux kernel. > + * > + * @note In general, this function will never return to BDS. The > LINUXBOOT_ALLOW_RETURN_TO_BDS > + * token will allow you to return to BDS if the kernel fails to= launch for > some reason. > + * > + * @param None > + * > + * @retval None > + */ > + > +EFI_STATUS > +LinuxBootStart ( > + VOID > + ) > +{ > + > + return EFI_SUCCESS; > +} > + > + > diff --git > a/Platform/Intel/PurleyOpenBoardPkg/Features/LinuxBoot/LinuxBootNull.in > f > b/Platform/Intel/PurleyOpenBoardPkg/Features/LinuxBoot/LinuxBootNull.i > nf > new file mode 100644 > index 0000000000..e292be9671 > --- /dev/null > +++ > b/Platform/Intel/PurleyOpenBoardPkg/Features/LinuxBoot/LinuxBootNull > +++ .inf > @@ -0,0 +1,25 @@ > +## @file > +# > +# Copyright (c) 2021, American Megatrends International LLC.
# # > +SPDX-License-Identifier: BSD-2-Clause-Patent # ## > + > +[Defines] > + INF_VERSION =3D 0x00010005 > + VERSION_STRING =3D 1.0 > + BASE_NAME =3D LinuxBoot > + FILE_GUID =3D 0551B6D3-0594-4B02-AF42-5A9C7515CE= C8 > + MODULE_TYPE =3D DXE_DRIVER > + LIBRARY_CLASS =3D LinuxBootLib|DXE_DRIVER > +[Sources] > + LinuxBootNull.c > + > +[Packages] > + MdePkg/MdePkg.dec > + MdeModulePkg/MdeModulePkg.dec > + > +[LibraryClasses] > + UefiDriverEntryPoint > + DxeServicesLib > \ No newline at end of file > diff --git a/Platform/Intel/PurleyOpenBoardPkg/OpenBoardPkg.dec > b/Platform/Intel/PurleyOpenBoardPkg/OpenBoardPkg.dec > index 4dcec5430b..0c1ab318b8 100644 > --- a/Platform/Intel/PurleyOpenBoardPkg/OpenBoardPkg.dec > +++ b/Platform/Intel/PurleyOpenBoardPkg/OpenBoardPkg.dec > @@ -49,6 +49,8 @@ >=20 > gPlatformTokenSpaceGuid.PcdUpdateConsoleInBds|TRUE|BOOLEAN|0x300 > 00035 + > gPlatformTokenSpaceGuid.PcdLinuxBootEnable|FALSE|BOOLEAN|0x300000 > 36+ [PcdsDynamicEx] > gPlatformTokenSpaceGuid.PcdDfxAdvDebugJumper|FALSE|BOOLEAN|0x60 > 00001D diff --git > a/Platform/Intel/PurleyOpenBoardPkg/Override/Platform/Intel/MinPlatfor > mPkg/Bds/Library/DxePlatformBootManagerLib/BdsPlatform.c > b/Platform/Intel/PurleyOpenBoardPkg/Override/Platform/Intel/MinPlatfor > mPkg/Bds/Library/DxePlatformBootManagerLib/BdsPlatform.c > index b3b8ceba6f..bd0509ab10 100644 > --- > a/Platform/Intel/PurleyOpenBoardPkg/Override/Platform/Intel/MinPlatfor > mPkg/Bds/Library/DxePlatformBootManagerLib/BdsPlatform.c > +++ > b/Platform/Intel/PurleyOpenBoardPkg/Override/Platform/Intel/MinPlatf > +++ ormPkg/Bds/Library/DxePlatformBootManagerLib/BdsPlatform.c > @@ -2,6 +2,7 @@ > This file include all platform action which can be customized by IBV/O= EM. > Copyright (c) 2017, Intel Corporation. All rights reserved.
+Copyright= (c) > 2021, American Megatrends International LLC.
SPDX-License-Identifier: > BSD-2-Clause-Patent **/@@ -31,6 +32,12 @@ BOOLEAN > gPPRequireUIConfirm; > extern UINTN mBootMenuOptionNumber= ; > +EFI_STATUS+LinuxBootStart (+ VOID+ );++ > GLOBAL_REMOVE_IF_UNREFERENCED USB_CLASS_FORMAT_DEVICE_PATH > gUsbClassKeyboardDevicePath =3D { { {@@ -1268,6 +1275,8 @@ > PlatformBootManagerAfterConsole ( > LocalBootMode =3D gBootMode; DEBUG ((DEBUG_INFO, "Current local > bootmode - %x\n", LocalBootMode)); + LinuxBootStart();+ // // Go t= he > different platform policy with different boot mode // Notes: this part = code > can be change with the table policydiff --git > a/Platform/Intel/PurleyOpenBoardPkg/Override/Platform/Intel/MinPlatfor > mPkg/Bds/Library/DxePlatformBootManagerLib/DxePlatformBootManagerLi > b.inf > b/Platform/Intel/PurleyOpenBoardPkg/Override/Platform/Intel/MinPlatfor > mPkg/Bds/Library/DxePlatformBootManagerLib/DxePlatformBootManagerLi > b.inf > index 5790743565..21ac65257c 100644 > --- > a/Platform/Intel/PurleyOpenBoardPkg/Override/Platform/Intel/MinPlatfor > mPkg/Bds/Library/DxePlatformBootManagerLib/DxePlatformBootManagerLi > b.inf > +++ > b/Platform/Intel/PurleyOpenBoardPkg/Override/Platform/Intel/MinPlatf > +++ > ormPkg/Bds/Library/DxePlatformBootManagerLib/DxePlatformBootManage > rL > +++ ib.inf > @@ -2,6 +2,7 @@ > # Component name for module DxePlatformBootManagerLib # # Copyright > (c) 2017 - 2021, Intel Corporation. All rights reserved.
+# Copyright = (c) > 2021, American Megatrends International LLC.
# # SPDX-License- > Identifier: BSD-2-Clause-Patent #@@ -40,6 +41,7 @@ > PerformanceLib TimerLib Tcg2PhysicalPresenceLib+ LinuxBootLib > [Packages] MdePkg/MdePkg.decdiff --git a/Platform/Intel/Readme.md > b/Platform/Intel/Readme.md > index 06c5f32b1e..a34784ccb8 100644 > --- a/Platform/Intel/Readme.md > +++ b/Platform/Intel/Readme.md > @@ -87,6 +87,11 @@ A UEFI firmware implementation using > MinPlatformPkg is constructed using the fol > ----------------------------------------|-------------------------------= -------------|------ > ------------------------|--------------------| | Mt. Olympus = | Purley > | PurleyOpenBoardPkg | BoardMtOlympus | +| Machine Name > | Supported Chipsets | BoardPkg = | Board Name |+- > ---------------------------------------|---------------------------------= -----------|-------- > ----------------------|--------------------|+| TiogaPass = | Purley > | PurleyOpenBoardPkg | BoardTiogaPass |++ #### Simics | Ma= chine > Name | Supported Chipsets = | BoardPkg | > Board Name |@@ -250,6 +255,12 @@ return back to the minimum > platform caller. > | | | | build s= ettings, environment variables. > | | | |---build_board.py: Optional board-speci= fic pre-build, > | | | build, post-build an= d clean functions.+ | | > |------PurleyOpenBoardPkg+ | | | |------Board= TiogaPass+ | > | | |---build_config.cfg: BoardTiogaPass specific+ = | | | > | build settings, environment variables.+ | = | | |--- > build_board.py: Optional board-specific pre-build,+ | | = | > build, post-build and clean functions. | | = | | | |--- > ---SimicsOpenBoardPkg | | | |------BoardX58I= ch10@@ -292,6 > +303,18 @@ For PurleyOpenBoardPkg > "bld cache-consume" Consume a cache of binary files from the specifie= d > directory, BINARY_CACHE_PATH is empty, used "BinCache" as default path= . > +For PurleyOpenBoardPkg (TiogaPass)+1. Open command window, go to the > workspace directory, e.g. c:\Edk2Workspace.+2. Type "cd edk2- > platforms\Platform\Intel\PurleyOpenBoardPkg\BoardTiogaPass".+3. Type > "GitEdk2MinBoardTiogaPass.bat" to setup GIT environment.+4. Type "bld" to > build Purley BoardTiogaPass board UEFI firmware image, "bld release" for > release build, "bld clean" to+ remove intermediate files."bld cache- > produce" Generate a cache of binary files in the specified directory,+ = "bld > cache-consume" Consume a cache of binary files from the specified > directory, BINARY_CACHE_PATH is empty,+ used "BinCache" as default > path. +5. Final BIOS image will be > Build\PurleyOpenBoardPkg\BoardTiagoPass\DEBUG_VS2015x86\FV\PLATFO > RM.fd or + > Build\PurleyOpenBoardPkg\BoardTiagoPass\RELEASE_VS2015x86\FV\PLATF > ORM.fd, depending on bld batch script input.+6. This BIOS image needs to = be > merged with SPS FW + ### **Known limitations** > **KabylakeOpenBoardPkg**@@ -307,6 +330,25 @@ For > PurleyOpenBoardPkg > 2. This firmware project does not build with the GCC compiler. 3. The > validated version of iASL compiler that can build MinPurley is 20180629. = Older > versions may generate ACPI build errors. +**PurleyOpenBoardPkg Tioga > Pass **+1. This firmware project has only been tested on the Tioga Pass > hardware.+2. This firmware project build has only been tested using the > Microsoft Visual Studio 2015 build tools.+3. This firmware project does n= ot > build with the GCC compiler.+4. The validated version of iASL compiler th= at > can build MinPurley is 20180629. Older versions may generate ACPI build > errors.+5. Installed and booted to UEFI Windows 2016 on M.2 NVME slot+6. > Installed and booted to UEFI Windows 2019 on M.2 NVME slot and with SATA > HDD.+7. Installed and booted to UEFI RHEL 7.3 on SATA HDD+8. Installed an= d > booted to Ubuntu 18.04 on M.2 NVME slot.+9. Verified Mellanox card > detection during POST and OS+10. LINUX Boot Support (PcdLinuxBootEnable > needs to be enabled)++1. Follow directions on > http://osresearch.net/Building/ to compile the heads kernel and initrd fo= r > qemu-system_x86_64 +2. Copy the following built files +(1) > initrd.cpio.xz to LinuxBootPkg/LinuxBinaries/initrd.cpio.xz +(2) bzimage= to > LinuxBootPkg/LinuxBinaries/linux.efi+++ **SimicsOpenBoardPkg** 1. This > firmware project has only been tested booting to Microsoft Windows 10 x64 > and Ubuntu 17.10 with AHCI mode. -- > 2.25.0.windows.1 >=20 >=20 > Please consider the environment before printing this email. >=20 > The information contained in this message may be confidential and > proprietary to American Megatrends (AMI). This communication is intended > to be read only by the individual or entity to whom it is addressed or by= their > designee. If the reader of this message is not the intended recipient, yo= u are > on notice that any distribution of this message, in any form, is strictly > prohibited. Please promptly notify the sender by reply e-mail or by > telephone at 770-246-8600, and then delete or destroy all copies of the > transmission.