From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by mx.groups.io with SMTP id smtpd.web11.10913.1624984912973121763 for ; Tue, 29 Jun 2021 09:41:53 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@intel.onmicrosoft.com header.s=selector2-intel-onmicrosoft-com header.b=SLUywmak; spf=pass (domain: intel.com, ip: 134.134.136.24, mailfrom: isaac.w.oram@intel.com) X-IronPort-AV: E=McAfee;i="6200,9189,10030"; a="208133411" X-IronPort-AV: E=Sophos;i="5.83,309,1616482800"; d="scan'208";a="208133411" Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 29 Jun 2021 09:41:51 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.83,309,1616482800"; d="scan'208";a="558781220" Received: from fmsmsx604.amr.corp.intel.com ([10.18.126.84]) by fmsmga001.fm.intel.com with ESMTP; 29 Jun 2021 09:41:50 -0700 Received: from fmsmsx608.amr.corp.intel.com (10.18.126.88) by fmsmsx604.amr.corp.intel.com (10.18.126.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.4; Tue, 29 Jun 2021 09:41:49 -0700 Received: from fmsmsx611.amr.corp.intel.com (10.18.126.91) by fmsmsx608.amr.corp.intel.com (10.18.126.88) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.4; Tue, 29 Jun 2021 09:41:49 -0700 Received: from fmsedg602.ED.cps.intel.com (10.1.192.136) by fmsmsx611.amr.corp.intel.com (10.18.126.91) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.4 via Frontend Transport; Tue, 29 Jun 2021 09:41:49 -0700 Received: from NAM12-DM6-obe.outbound.protection.outlook.com (104.47.59.168) by edgegateway.intel.com (192.55.55.71) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2242.4; Tue, 29 Jun 2021 09:41:44 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=DZgXw3f07eFtI+I9d4ZpKW/0XhRnImbG0iPjM0KyCUH7bMey2eeOaPJTE2//SHyhNFYEAPVW0I/P7Iy2z8aiX7B0balDiOCURwc3LkS3X8Hm2ZVzmxdkgn663kz7eyn85m7KFZ7vBZ6HWCKQ81sgvE9nX38iPtNmtvzLInGgBSrIC2NjDxzoCRWepC0zTcWkcXSokNXGIEKt60bFKEAV80+S/HtLfgDa63Fdn0Vn5e6Kwt1rewC2JSr+HnViNuGpuQmCh45KXTvzROkd514LOXCCZcULy7lcTctrE8E5pkI17/Nm5La396Eka1mxZDPbP3Xgy5n9B+zmJgTE7Ft/Pg== 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=AAwP+eD9Ja7lrWYmPBpJNps/0wKIfRkvc27Iu13yFQY=; b=oPgWBVVzqF3TwrLQCvidm2mCzibJNhii5rQuWfML7ddnbNAEoccdrmFYl+e3/RKD2G3ltEIOjkQgrkRbwLQtmVEAbQqhKSwNVwHodD11ak1zBfpUxUvsvdr/fMO+gLQsdBXhECTKNjJBd6A/wPjrEdb5V0YfiuECxk+29/r8J90wQLcf9tCdMwK7MosGQxlyXs4wTJtXdHVLYOimEgRJWMmgIKYxxQZTN2nQ35vBw2sMz+4Y1w+vpBtkxsJjL0XwbksLkuSSTZ/rLyMhqjHSBGuHCS6FMIpms6dRwtdoEy0ZFsrrgM1guSbCJt1pkrjvSmX1XJ8IA7VJsRYbaSrPnA== 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=AAwP+eD9Ja7lrWYmPBpJNps/0wKIfRkvc27Iu13yFQY=; b=SLUywmak7zSuF27NHaQgfWetK6/pstHr88B7yLmx67rrGGB9xJfMXZN4id1ov1faAwGxsssJF5CJ7URQKE1M6zGLnT6l6kQ789GIjXO1ms9KvZ1Qk+EQBLyEDn1vDzz9iruSy+mdU/Q41FrpNu3vIDCugiQIA+W2LQTWZtBtohE= Received: from MW3PR11MB4747.namprd11.prod.outlook.com (2603:10b6:303:2f::11) by MWHPR11MB1775.namprd11.prod.outlook.com (2603:10b6:300:10e::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4264.23; Tue, 29 Jun 2021 16:41:40 +0000 Received: from MW3PR11MB4747.namprd11.prod.outlook.com ([fe80::4cc2:7196:5a55:629e]) by MW3PR11MB4747.namprd11.prod.outlook.com ([fe80::4cc2:7196:5a55:629e%3]) with mapi id 15.20.4264.026; Tue, 29 Jun 2021 16:41:40 +0000 From: "Oram, Isaac W" To: "devel@edk2.groups.io" , "KARPAGAVINAYAGAM, MANICKAVASAKAM" , "Desimone, Nathaniel L" CC: Felix Polyudov , "DOPPALAPUDI, HARIKRISHNA" , "Jha, Manish" , "Bobroff, Zachary" Subject: Re: [edk2-devel] [EXTERNAL] RE: [edk2-platforms] [PATCH V1] PurleyOpenBoardPkg : Support for LINUX Boot Thread-Topic: [edk2-devel] [EXTERNAL] RE: [edk2-platforms] [PATCH V1] PurleyOpenBoardPkg : Support for LINUX Boot Thread-Index: AQHXYxMV5lm+3jz74E6hbT2hRYYm/qsg5xkggAo5DNCAACReQA== Date: Tue, 29 Jun 2021 16:41:40 +0000 Message-ID: References: <20210617005137.2583-1-nathaniel.l.desimone@intel.com> In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-version: 11.5.1.3 dlp-reaction: no-action authentication-results: edk2.groups.io; dkim=none (message not signed) header.d=none;edk2.groups.io; dmarc=none action=none header.from=intel.com; x-originating-ip: [134.134.136.211] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 24ae5697-2dd4-4bb1-6413-08d93b1cc548 x-ms-traffictypediagnostic: MWHPR11MB1775: 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:1417; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: TpsZnS3IeqlgwyYyOudvFDFvhBquuoRzCmu6bIM6OBnRKS62mloWkoCpGEyNx6F8Vp1b3i6TpIHh1Se7zYX0/OMSzTtqmSb19lFTlSqxKrsg6Gx5Iwomh30e2CGHzla1buCLFBWRecz8GU8g9JnrJm5Dhgp99UzuFu0kPKUKGcpOZ6x77qg7W8FOQyufYWP+D17bogCWdkwr7x8Q8iuTy773PUYskFQQSVdZvjOc1XKW5f5tGOD50AeDVxq1YpyzjiWxNIamF+9KQ8gS7SqVC8Nc+6Cd7IsXK/IY/imVb/BSTuZdZH8IDcKv3ugIDw4xEWpY7QJsFB0ZY/zlCwUYLvulRFUtNdjrQmuhVsZJs2jqYxKWzJ8zGDWsykUvptm5F4DLWGOlNCV6D6QzKUfNwc+hEzT8QEXEg7pVhwajk6P22BmeoAB1nl9NKTgXEiAIkYqoq0akRBvQJRTps84jt3FCkmcs0JJRxxPQDqzPFkiUoJjv+CaCygyazZeI2ceF6Gd+2rE/RF0/eIyi25OzjnbQugAzuXR+N1cbHPe6K2XEXLJFES6Xh1AWjco7CNHTKWlHRUv19QQyPXlJAqEVzw4Eg/PUctzlSk5RwO1b6k9OWMNwnM2DzBHDIvH1cB560GvtEE9j4+ooeXqsLvht7OJVdQt7Q9TiBKh0UF0fsn4++qp8c3mMSylwjIKESUJR0OYXUUWMnUWQ5z43PbPjlWSci3twMqtWTbv82aExJ3EeULMfZ952jooM/5NNh+0PlR3Rfj1JG9tx0X9y8jD4pcZ95LzC0G2A9aDSYKlpoMGQla6r1/X0+v3jYd6t8lQ0 x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MW3PR11MB4747.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(396003)(346002)(366004)(39860400002)(136003)(376002)(8936002)(53546011)(45080400002)(110136005)(54906003)(33656002)(8676002)(6506007)(478600001)(4326008)(71200400001)(316002)(26005)(6636002)(55016002)(966005)(30864003)(86362001)(66476007)(66556008)(66946007)(38100700002)(9686003)(7696005)(5660300002)(52536014)(19627235002)(2906002)(122000001)(64756008)(83380400001)(186003)(76116006)(66446008)(559001)(579004);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?ognuPvflZUrBdWY9DDFmTfpSrPAwNUdzoy7nKJKT1FpoenCxvLXNzxmoWohY?= =?us-ascii?Q?+bf6zVrbNvZopUb0/0TGjYACZLaF2n47IiCunybpMek3/Rra/t5jYcH9jStN?= =?us-ascii?Q?gVZLCLJUoU/pGgmDadvP6DlCdLXitUfD8hvq9NTROD69+LjmgsprVN8ybNlZ?= =?us-ascii?Q?xXxFKyhMF6ND4jpkoTlWS2bCRtIg4UHaaQDs71osA+jtAdWq8+L07JmxVxRx?= =?us-ascii?Q?RbcoeF5x/zkkIMbWrYBB7p2oP3KTf4YsHhyDTg8O3jxSqhYV/2VKMkVMCjKE?= =?us-ascii?Q?/RFjY+a2D/Q42B9sfIQwiQpmC5KtFToRUxJkkvs4PweZ+cXykXosVrZU4K5/?= =?us-ascii?Q?yqv9iV7HLfaYczTzC25heOeXdXh689svXKRms5oSNui13VN/EIStRd5G5qiH?= =?us-ascii?Q?5+oMZWyRSw9WiEpEAM3lq9ai4vakgM3d19exXB/uPWgRrXFOH0oqpxq8jy0F?= =?us-ascii?Q?1kUOxB05SmpdZGxZmtalmhdH4EwAxTE9ynR5H/XMYLTlL+Pcul0Btaqrv4P9?= =?us-ascii?Q?MAyj4kdDjDHkuLz1WaRPc7tZ6fgnC6GQ+73GbMTcXaGQ2rHN8a/lRCuAiPom?= =?us-ascii?Q?3UggK2OKJP78HpoG6gZb4d6W9hBuAKJ2CesU1ZKknuqTay2u2TvyUeK2MI0R?= =?us-ascii?Q?3xCIJZsx6bdAFPYTFik1b7gAiOFaLKDbbjoEwIoPpBkRYQAcgpv/+5Mo0uUT?= =?us-ascii?Q?v1k8kPh0qivItYiQH+1117Ow2Lz7E0DqljLrFlXXcJxRk6tmilgg5TU3GJoT?= =?us-ascii?Q?P6Uo0PWJf8ZNgyXQur1gQGVObsxV6cDQITj88afY3tWx/OM4hWR2Tqd23vyT?= =?us-ascii?Q?Tn1vs1ngzyx2CgoOogtjBGHlrP0nm0fW7GrHdmHCjq4xKy7mEu7HWDZOMmqk?= =?us-ascii?Q?mv/hn0CJyoD41Zd7zcEmi2Clhf9ofR6AcjU7zF+ns/+7a2/aFSX7HtdJO+ff?= =?us-ascii?Q?+s8NtuWYt2lVe1j/+s+qNp0TKrj3csbTXftwN/kerqkViwPEMPYYC5MVSfiK?= =?us-ascii?Q?9WU2r8Vbmsmd+VnnTsK+l/V9+32/JIK2djqnGafRwAT/RvOSkJRj6bX94aaZ?= =?us-ascii?Q?peUH0rpBYSbJnDFPllrJS6crZbbMTdXyRbo0rebgbJGJRwZ/pRDGw6Jl7fxs?= =?us-ascii?Q?7uJl5RJBvvsgQeLs+O57fpnzndZnRehOQFA/mx3aVE41stRBy1dEOmjOJ/ga?= =?us-ascii?Q?DwxrR/RlINN+NfiaFUjgwuJdprEF5kFEzjvuYuNczus9UGH2TWcMAhxQlK7Q?= =?us-ascii?Q?+D0YYHLrUkx3ZKb610uwNCUg4s7Hi5UeN3FjKh0L9Hd0AnYzAOBKs7qWYPcX?= =?us-ascii?Q?pG0aOgX+3g9smi27cBjoLUMj?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MW3PR11MB4747.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 24ae5697-2dd4-4bb1-6413-08d93b1cc548 X-MS-Exchange-CrossTenant-originalarrivaltime: 29 Jun 2021 16:41:40.3131 (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: QjwA+xCmg+qMH0qsSToEaE5YD5YoS7VM/MRmvjYubJ/A0AF10UK4loKNqjHNWOvLu7fgli8UsknoxPA5kSTwPw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR11MB1775 Return-Path: isaac.w.oram@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable I think Features/LinuxBoot would be consistent with other OpenBoardPkg orga= nization. Regards, Isaac -----Original Message----- From: devel@edk2.groups.io On Behalf Of manickavasa= kam karpagavinayagam Sent: Tuesday, June 29, 2021 7:32 AM To: Oram, Isaac W ; Desimone, Nathaniel L ; devel@edk2.groups.io Cc: Felix Polyudov ; DOPPALAPUDI, HARIKRISHNA ; Jha, Manish ; Bobroff, Zachary Subject: Re: [edk2-devel] [EXTERNAL] RE: [edk2-platforms] [PATCH V1] Purle= yOpenBoardPkg : Support for LINUX Boot Isaac : >>From our understanding, features under edk2-platform/Intel/XXXXOpenBoardPk= g are named without pkg https://github.com/tianocore/edk2-platforms/tree/m= aster/Platform/Intel/PurleyOpenBoardPkg (ex: Pci/PciPlatform, Acpi/BoardAcp= iDxe) Can we name it as "LinuxBoot" or ServerLinuxBoot"? Thank you -Manic -----Original Message----- From: Oram, Isaac W Sent: Friday, June 25, 2021 2:57 PM To: Desimone, Nathaniel L ; devel@edk2.gro= ups.io Cc: Manickavasakam Karpagavinayagam ; Felix Polyu= dov ; Harikrishna Doppalapudi ; Manis= h Jha ; Zachary Bobroff Subject: [EXTERNAL] RE: [edk2-platforms] [PATCH V1] PurleyOpenBoardPkg : S= upport for LINUX Boot **CAUTION: The e-mail below is from an external source. Please exercise ca= ution before opening attachments, clicking links, or following guidance.** Manic, I don't think that there is much value in having two different flash maps = for LinuxBoot enabled or disabled. It strikes me as unnecessary code to ma= intain. LinuxKernel.inf is missing a properly formatted file header. LinuxBoot.c should be run through code style compliance tools. Also there= is unnecessary commented out code and things like #if 1 that should be rem= oved. LinuxBoot.h has tabs in the source disrupting structure layout and not fol= lowing coding style. Please rename LinuxBootPkg as it is not an edk2 package and the name is a = bit misleading. We should do an RFC to talk about the various LinuxBoot integrations that = we see across the community and maybe discuss at the design meeting. I thi= nk you are fine to commit this version as it is fairly specific to your use= case, so that design discussion shouldn't block this fix. Regards, Isaac -----Original Message----- From: Desimone, Nathaniel L Sent: Wednesday, June 16, 2021 5:52 PM To: devel@edk2.groups.io Cc: KARPAGAVINAYAGAM, MANICKAVASAKAM ; Oram, Isaa= c W ; Felix Polyudov ; DOPPALAPUDI,= HARIKRISHNA ; Jha, Manish ; Bobroff= , Zachary Subject: [edk2-platforms] [PATCH V1] PurleyOpenBoardPkg : Support for LINU= X Boot From: Manickavasakam Karpagavinayagam Support for LINUX Boot To enable/disable feature, PcdLinuxBootEnable can be used 1. Follow directions on https://nam12.safelinks.protection.outlook.co= m/?url=3Dhttp%3A%2F%2Fosresearch.net%2FBuilding%2F&data=3D04%7C01%7Cman= ickavasakamk%40ami.com%7C0e17ba01178e4475fd4608d9380b131f%7C27e97857e15f486= cb58e86c2b3040f93%7C1%7C0%7C637602442487974382%7CUnknown%7CTWFpbGZsb3d8eyJW= IjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&s= data=3DancbqqKtQUlzJJLmDOfpIOQdZ2UNIZRd74njHBEkeLk%3D&reserved=3D0 to c= ompile the heads kernel and initrd for 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 Cc: Isaac Oram Cc: Felix Polyudov Cc: Harikrishna Doppalapudi Cc: Manish Jha Cc: Zachary Bobroff Cc: Manickavasakam Karpagavinayagam --- .../BoardTiogaPass/CoreDxeInclude.dsc | 5 +- .../BoardTiogaPass/CoreUefiBootInclude.fdf | 5 +- .../BoardTiogaPass/OpenBoardPkg.dsc | 7 + .../BoardTiogaPass/OpenBoardPkg.fdf | 57 ++- .../BoardTiogaPass/PlatformPkgConfig.dsc | 7 + .../LinuxBinaries/LinuxKernel.inf | 9 + .../LinuxBootPkg/LinuxBinaries/initrd.cpio.xz | Bin 0 -> 16 bytes .../LinuxBootPkg/LinuxBinaries/linux.efi | Bin 0 -> 16 bytes .../LinuxBootPkg/LinuxBoot.c | 422 ++++++++++++++++++ .../LinuxBootPkg/LinuxBoot.h | 193 ++++++++ .../LinuxBootPkg/LinuxBoot.inf | 46 ++ .../LinuxBootPkg/LinuxBootNull.c | 43 ++ .../LinuxBootPkg/LinuxBootNull.inf | 31 ++ .../Intel/PurleyOpenBoardPkg/OpenBoardPkg.dec | 2 + .../DxePlatformBootManagerLib/BdsPlatform.c | 9 + .../DxePlatformBootManagerLib.inf | 2 + Platform/Intel/Readme.md | 42 ++ 17 files changed, 872 insertions(+), 8 deletions(-) create mode 100644 P= latform/Intel/PurleyOpenBoardPkg/LinuxBootPkg/LinuxBinaries/LinuxKernel.inf create mode 100644 Platform/Intel/PurleyOpenBoardPkg/LinuxBootPkg/LinuxBi= naries/initrd.cpio.xz create mode 100644 Platform/Intel/PurleyOpenBoardPkg/LinuxBootPkg/LinuxBi= naries/linux.efi create mode 100644 Platform/Intel/PurleyOpenBoardPkg/LinuxBootPkg/LinuxBo= ot.c create mode 100644 Platform/Intel/PurleyOpenBoardPkg/LinuxBootPkg/LinuxBo= ot.h create mode 100644 Platform/Intel/PurleyOpenBoardPkg/LinuxBootPkg/LinuxBo= ot.inf create mode 100644 Platform/Intel/PurleyOpenBoardPkg/LinuxBootPkg/LinuxBo= otNull.c create mode 100644 Platform/Intel/PurleyOpenBoardPkg/LinuxBootPkg/LinuxBo= otNull.inf diff --git a/Platform/Intel/PurleyOpenBoardPkg/BoardTiogaPass/CoreDxeInclu= de.dsc b/Platform/Intel/PurleyOpenBoardPkg/BoardTiogaPass/CoreDxeInclude.ds= c index b0660d72dd..a17015704b 100644 --- a/Platform/Intel/PurleyOpenBoardPkg/BoardTiogaPass/CoreDxeInclude.dsc +++ b/Platform/Intel/PurleyOpenBoardPkg/BoardTiogaPass/CoreDxeInclude.ds +++ c @@ -83,6 +83,7 @@ $(PLATFORM_BOARD_PACKAGE)/Override/MdeModulePkg/Bus/Pci/PciBusDxe/PciBu= sDxe.inf #TiogaPass Override END +!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 MdeModulePkg/Universal/Disk/UnicodeCollation/EnglishDxe/EnglishDxe.inf FatPkg/EnhancedFatDxe/Fat.inf - +!endif #MdeModulePkg/Universal/Console/GraphicsOutputDxe/GraphicsOutputDxe.inf MdeModulePkg/Universal/Console/GraphicsConsoleDxe/GraphicsConsoleDxe.in= f +!if gPlatformTokenSpaceGuid.PcdLinuxBootEnable =3D=3D FALSE MdeModulePkg/Universal/Console/ConPlatformDxe/ConPlatformDxe.inf MdeModulePkg/Universal/Console/ConSplitterDxe/ConSplitterDxe.inf @@ -124,6 +126,7 @@ PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf } +!endif !if gMinPlatformPkgTokenSpaceGuid.PcdBootToShellOnly =3D=3D FALSE MdeModulePkg/Core/PiSmmCore/PiSmmIpl.inf diff --git a/Platform/Intel/PurleyOpenBoardPkg/BoardTiogaPass/CoreUefiBoot= Include.fdf b/Platform/Intel/PurleyOpenBoardPkg/BoardTiogaPass/CoreUefiBoot= Include.fdf index 141ce5dda3..6cd8ba6626 100644 --- a/Platform/Intel/PurleyOpenBoardPkg/BoardTiogaPass/CoreUefiBootInclude= .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/PciBusDxe/P= ciBusDxe.inf #TiogaPass Override END +!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.i= nf INF MdeModulePkg/Universal/Disk/PartitionDxe/PartitionDxe.inf INF MdeModulePkg/Universal/Disk/UnicodeCollation/EnglishDxe/EnglishDxe.i= nf INF FatPkg/EnhancedFatDxe/Fat.inf +!endif #INF MdeModulePkg/Universal/Console/GraphicsOutputDxe/GraphicsOutputDxe.= inf INF MdeModulePkg/Universal/Console/GraphicsConsoleDxe/GraphicsConsoleDxe= .inf +!if gPlatformTokenSpaceGuid.PcdLinuxBootEnable =3D=3D FALSE INF MdeModulePkg/Universal/Console/ConPlatformDxe/ConPlatformDxe.inf INF MdeModulePkg/Universal/Console/ConSplitterDxe/ConSplitterDxe.inf @@ -79,4 +82,4 @@ INF MdeModulePkg/Universal/DisplayEngineDxe/DisplayEngi= neDxe.inf INF MdeModulePkg/Application/UiApp/UiApp.inf INF MdeModulePkg/Application/BootManagerMenuApp/BootManagerMenuApp.inf - +!endif diff --git a/Platform/Intel/PurleyOpenBoardPkg/BoardTiogaPass/OpenBoardPkg= .dsc b/Platform/Intel/PurleyOpenBoardPkg/BoardTiogaPass/OpenBoardPkg.dsc index e4c8e7fbf1..06ed3f610e 100644 --- a/Platform/Intel/PurleyOpenBoardPkg/BoardTiogaPass/OpenBoardPkg.dsc +++ b/Platform/Intel/PurleyOpenBoardPkg/BoardTiogaPass/OpenBoardPkg.dsc @@ -104,6 +104,13 @@ #########################################################################= ####### [LibraryClasses.common] +!if gPlatformTokenSpaceGuid.PcdLinuxBootEnable =3D=3D TRUE + LinuxBootLib|$(PLATFORM_BOARD_PACKAGE)/LinuxBootPkg/LinuxBoot.inf + LoadLinuxLib|OvmfPkg/Library/LoadLinuxLib/LoadLinuxLib.inf +!else + LinuxBootLib|$(PLATFORM_BOARD_PACKAGE)/LinuxBootPkg/LinuxBootNull.inf +!endif + !if gPlatformTokenSpaceGuid.PcdFastBoot =3D=3D FALSE PlatformBootManagerLib|$(PLATFORM_PACKAGE)/Bds/Library/DxePlatformBootM= anagerLib/DxePlatformBootManagerLib.inf !else diff --git a/Platform/Intel/PurleyOpenBoardPkg/BoardTiogaPass/OpenBoardPkg= .fdf b/Platform/Intel/PurleyOpenBoardPkg/BoardTiogaPass/OpenBoardPkg.fdf index 43cd8d94e1..adbf28a936 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 used= in the system, and # the FlashMap edit tool can be used to change the values here, wit= hout 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 0= x00000000 # Flash addr (0xFF840000) +SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvAdvancedSize =3D 0= x00300000 # +SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvSecurityOffset =3D 0= x00300000 # Flash addr (0xFF8A0000) +SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvSecuritySize =3D 0= x00100000 # +SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvOsBootOffset =3D 0= x00400000 # Flash addr (0xFF910000) +SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvOsBootSize =3D 0= x00100000 # +SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspUOffset =3D 0= x00500000 # Flash addr (0xFFE00000) +SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspUSize =3D 0= x00100000 # +SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvUefiBootOffset =3D 0= x00600000 # Flash addr (0xFF9A0000) +SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvUefiBootSize =3D 0= x00600000 # +SET gMinPlatformPkgTokenSpaceGuid.PcdFlashNvStorageVariableOffset =3D 0= x00C00000 # Flash addr (0xFF800000) +SET gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize =3D 0= x0007C000 # + +!else + +SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvAdvancedOffset =3D 0= x00000000 # Flash addr (0xFF840000) +SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvAdvancedSize =3D 0= x00500000 # +SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvSecurityOffset =3D 0= x00500000 # Flash addr (0xFF8A0000) +SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvSecuritySize =3D 0= x00100000 # +SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvOsBootOffset =3D 0= x00600000 # Flash addr (0xFF910000) +SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvOsBootSize =3D 0= x00100000 # +SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspUOffset =3D 0= x00700000 # Flash addr (0xFFE00000) +SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspUSize =3D 0= x00200000 # +SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvUefiBootOffset =3D 0= x00900000 # Flash addr (0xFF9A0000) +SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvUefiBootSize =3D 0= x00300000 # +SET gMinPlatformPkgTokenSpaceGuid.PcdFlashNvStorageVariableOffset =3D 0= x00C00000 # Flash addr (0xFF800000) +SET gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize =3D 0= x0007C000 # + +!endif + [FD.Platform] BaseAddress =3D 0xFF000000 | gEfiPchTokenSpaceGuid.PcdFlashAreaBase= Address @@ -27,27 +59,27 @@ ErasePolarity =3D 1 BlockSize =3D 0x10000 NumBlocks =3D 0x100 -0x00000000|0x00500000 +gMinPlatformPkgTokenSpaceGuid.PcdFlashFvAdvancedOffset|gMinPlatformPkgT +okenSpaceGuid.PcdFlashFvAdvancedSize gMinPlatformPkgTokenSpaceGuid.PcdFlashFvAdvancedBase|gMinPlatformPkgToken= SpaceGuid.PcdFlashFvAdvancedSize FV =3D FvAdvanced -0x00500000|0x00100000 +gMinPlatformPkgTokenSpaceGuid.PcdFlashFvSecurityOffset|gMinPlatformPkgT +okenSpaceGuid.PcdFlashFvSecuritySize gMinPlatformPkgTokenSpaceGuid.PcdFlashFvSecurityBase|gMinPlatformPkgToken= SpaceGuid.PcdFlashFvSecuritySize FV =3D FvSecurity -0x00600000|0x00100000 +gMinPlatformPkgTokenSpaceGuid.PcdFlashFvOsBootOffset|gMinPlatformPkgTok +enSpaceGuid.PcdFlashFvOsBootSize gMinPlatformPkgTokenSpaceGuid.PcdFlashFvOsBootBase|gMinPlatformPkgTokenSp= aceGuid.PcdFlashFvOsBootSize FV =3D FvOsBoot -0x00700000|0x00200000 +gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspUOffset|gMinPlatformPkgToken +SpaceGuid.PcdFlashFvFspUSize gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspUBase|gMinPlatformPkgTokenSpac= eGuid.PcdFlashFvFspUSize FV =3D FvLateSiliconCompressed -0x00900000|0x00300000 +gMinPlatformPkgTokenSpaceGuid.PcdFlashFvUefiBootOffset|gMinPlatformPkgT +okenSpaceGuid.PcdFlashFvUefiBootSize gMinPlatformPkgTokenSpaceGuid.PcdFlashFvUefiBootBase|gMinPlatformPkgToken= SpaceGuid.PcdFlashFvUefiBootSize FV =3D FvUefiBoot -0x00C00000|0x0007C000 +gMinPlatformPkgTokenSpaceGuid.PcdFlashNvStorageVariableOffset|gEfiMdeMo +dulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase|gEfiMdeModul= ePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize #NV_VARIABLE_STORE DATA =3D { @@ -303,6 +335,19 @@ FILE DRIVER =3D db90bb7e-e4ba-4f07-96d6-b7076713bd2c = { INF MdeModulePkg/Bus/Pci/NvmExpressDxe/NvmExpressDxe.inf +!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)/LinuxBootPkg/LinuxBinaries/linux.efi +} + +FILE FREEFORM =3D 16b60e5d-f1c5-42f0-9b34-08C81C430473 { + SECTION RAW =3D +$(PLATFORM_BOARD_PACKAGE)/LinuxBootPkg/LinuxBinaries/initrd.cpio.xz +} + +!endif + [FV.FvUefiBoot] FvAlignment =3D 16 diff --git a/Platform/Intel/PurleyOpenBoardPkg/BoardTiogaPass/PlatformPkgC= onfig.dsc b/Platform/Intel/PurleyOpenBoardPkg/BoardTiogaPass/PlatformPkgCon= fig.dsc index 36a29c8d68..ff27252233 100644 --- a/Platform/Intel/PurleyOpenBoardPkg/BoardTiogaPass/PlatformPkgConfig.d= sc +++ b/Platform/Intel/PurleyOpenBoardPkg/BoardTiogaPass/PlatformPkgConfig +++ .dsc @@ -51,7 +51,14 @@ gMinPlatformPkgTokenSpaceGuid.PcdPerformanceEnable|TRUE + 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/LinuxBootPkg/LinuxBinaries/= LinuxKernel.inf b/Platform/Intel/PurleyOpenBoardPkg/LinuxBootPkg/LinuxBinar= ies/LinuxKernel.inf new file mode 100644 index 0000000000..a249027d22 --- /dev/null +++ b/Platform/Intel/PurleyOpenBoardPkg/LinuxBootPkg/LinuxBinaries/Linux +++ Kernel.inf @@ -0,0 +1,9 @@ +[Defines] + INF_VERSION =3D 1.27 + BASE_NAME =3D LinuxKernel + FILE_GUID =3D 81339b04-fa8c-4be0-9ca7-916fc5319eb5 + MODULE_TYPE =3D UEFI_DRIVER + VERSION_STRING =3D 1.0 + +[Binaries.common.AARCH64] + PE32|linux.efi|* diff --git a/Platform/Intel/PurleyOpenBoardPkg/LinuxBootPkg/LinuxBinaries/= initrd.cpio.xz b/Platform/Intel/PurleyOpenBoardPkg/LinuxBootPkg/LinuxBinari= es/initrd.cpio.xz new file mode 100644 index 0000000000000000000000000000000000000000..01d633b27e8ea9b17084fc911d= 0c8cc43a4170a9 GIT binary patch literal 16 KcmZQzKm`B*5C8!H literal 0 HcmV?d00001 diff --git a/Platform/Intel/PurleyOpenBoardPkg/LinuxBootPkg/LinuxBinaries/= linux.efi b/Platform/Intel/PurleyOpenBoardPkg/LinuxBootPkg/LinuxBinaries/li= nux.efi new file mode 100644 index 0000000000000000000000000000000000000000..01d633b27e8ea9b17084fc911d= 0c8cc43a4170a9 GIT binary patch literal 16 KcmZQzKm`B*5C8!H literal 0 HcmV?d00001 diff --git a/Platform/Intel/PurleyOpenBoardPkg/LinuxBootPkg/LinuxBoot.c b/= Platform/Intel/PurleyOpenBoardPkg/LinuxBootPkg/LinuxBoot.c new file mode 100644 index 0000000000..eec05824d6 --- /dev/null +++ b/Platform/Intel/PurleyOpenBoardPkg/LinuxBootPkg/LinuxBoot.c @@ -0,0 +1,422 @@ +/** @file + +Copyright (c) 2021, American Megatrends International LLC. All rights +reserved.
+SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +/** + * + * This library will load the Linux kernel and initrd from the BIOS and = launch it. + * + */ + +//--------------------------------------------------------------------- +------ + +#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 0C= 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 thi= s 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 boot_params *BootParams =3D NULL; + struct boot_params *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 the= kernel + Status =3D gBS->HandleProtocol(KernelHandle, &gEfiLoadedImageProtocol= Guid, (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 allocat= e an initalization buffer once verified + BootParams =3D (struct boot_params*) LoadedImage->ImageBase; + + Status =3D LoadLinuxCheckKernelSetup((VOID *) BootParams, sizeof(stru= ct boot_params)); + if (EFI_ERROR (Status)) { + DEBUG((DEBUG_ERROR, "LoadLinuxCheckKernelSetup failed; %r.\n", St= atus)); + goto FatalError; + } + + HandoverParams =3D LoadLinuxAllocateKernelSetupPages(EFI_SIZE_TO_PAGE= S(KERNEL_SETUP_SIZE)); + if (HandoverParams =3D=3D NULL) { + DEBUG((DEBUG_ERROR, "Could not allocate memory for kernel handove= r parameters.\n")); + goto FatalError; + } + DEBUG((DEBUG_INFO, "Handover parameters allocated at 0x%p\n", + HandoverParams)); + + gBS->CopyMem(&HandoverParams->hdr, &BootParams->hdr, sizeof(struct + setup_header)); + + Status =3D LoadLinuxInitializeKernelSetup(HandoverParams); + if (EFI_ERROR (Status)) { + DEBUG((DEBUG_ERROR, "Unable to initialize the handover parameters= ; %r.\n", Status)); + goto FatalError; + } + + // Allocate space for the kernel and copy it into the new buffer + KernelBuffer =3D LoadLinuxAllocateKernelPages(HandoverParams, EFI_SIZ= E_TO_PAGES(HandoverParams->hdr.init_size)); + if (KernelBuffer =3D=3D NULL) { + DEBUG((DEBUG_ERROR, "Unable to allocate memory for kernel.\n")); + goto FatalError; + } + + StartOffset =3D (HandoverParams->hdr.setup_secs + 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", Sta= tus)); + goto FatalError; + } + + HandoverParams->hdr.code32_start =3D (UINT32)(UINTN) KernelBuffer; + HandoverParams->hdr.loader_id =3D 0x21; + + DEBUG((DEBUG_INFO, "Kernel loaded.\n")); + +#if 1 +//#if defined(INTEGRATED_INITRAM_FS) && (INTEGRATED_INITRAM_FS =3D=3D0) + /// + /// 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, InitrdS= ize))); + 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.ramdisk_start =3D (UINT32)(UINTN) InitrdData; + HandoverParams->hdr.ramdisk_len =3D (UINT32) InitrdSize; + + DEBUG((DEBUG_INFO, "Initrd loaded.\n")); + DEBUG((DEBUG_INFO, "Printing first 0x%X bytes of initrd buffer:\n", M= IN(0x100, InitrdSize))); + DumpHex(2, 0, MIN(0x100, InitrdSize), InitrdData); + + // General cleanup before launching the kernel + gBS->FreePool(InitrdBuffer); + InitrdBuffer =3D NULL; +#endif + + 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) Initr= dData, EFI_SIZE_TO_PAGES(InitrdSize)); + if (KernelBuffer !=3D NULL) gBS->FreePages((EFI_PHYSICAL_ADDRESS) Ker= nelBuffer, EFI_SIZE_TO_PAGES(HandoverParams->hdr.init_size)); + if (HandoverParams !=3D NULL) gBS->FreePages((EFI_PHYSICAL_ADDRESS) H= andoverParams, 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 LINUX= BOOT_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/LinuxBootPkg/LinuxBoot.h b/= Platform/Intel/PurleyOpenBoardPkg/LinuxBootPkg/LinuxBoot.h new file mode 100644 index 0000000000..479fb8cbfd --- /dev/null +++ b/Platform/Intel/PurleyOpenBoardPkg/LinuxBootPkg/LinuxBoot.h @@ -0,0 +1,193 @@ +/** @file + +Copyright (c) 2021, American Megatrends International LLC. All rights +reserved.
+SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +/** + * + * Header for library definitions and prototypes. + * + */ + +#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 setup_header { + UINT8 setup_secs; /* Sectors for setup code */ + UINT16 root_flags; + UINT32 sys_size; + UINT16 ram_size; + UINT16 video_mode; + UINT16 root_dev; + UINT16 signature; /* Boot signature */ + UINT16 jump; + UINT32 header; + UINT16 version; + UINT16 su_switch; + UINT16 setup_seg; + UINT16 start_sys; + UINT16 kernel_ver; + UINT8 loader_id; + UINT8 load_flags; + UINT16 movesize; + UINT32 code32_start; /* Start of code loaded high */ + UINT32 ramdisk_start; /* Start of initial ramdisk */ + UINT32 ramdisk_len; /* Length of initial ramdisk */ + UINT32 bootsect_kludge; + UINT16 heap_end; + UINT8 ext_loader_ver; /* Extended boot loader version */ + UINT8 ext_loader_type; /* Extended boot loader ID */ + UINT32 cmd_line_ptr; /* 32-bit pointer to the kernel command lin= e */ + UINT32 ramdisk_max; /* Highest legal initrd address */ + UINT32 kernel_alignment; /* Physical addr alignment required for k= ernel */ + UINT8 relocatable_kernel; /* Whether kernel is relocatable or not = */ + UINT8 min_alignment; + UINT16 xloadflags; + UINT32 cmdline_size; + UINT32 hardware_subarch; + UINT64 hardware_subarch_data; + UINT32 payload_offset; + UINT32 payload_length; + UINT64 setup_data; + UINT64 pref_address; + UINT32 init_size; + UINT32 handover_offset; +}; + +struct efi_info { + UINT32 efi_loader_signature; + UINT32 efi_systab; + UINT32 efi_memdesc_size; + UINT32 efi_memdesc_version; + UINT32 efi_memmap; + UINT32 efi_memmap_size; + UINT32 efi_systab_hi; + UINT32 efi_memmap_hi; +}; + +struct e820_entry { + UINT64 addr; /* start of memory segment */ + UINT64 size; /* size of memory segment */ + UINT32 type; /* type of memory segment */ +}; + +struct screen_info { + UINT8 orig_x; /* 0x00 */ + UINT8 orig_y; /* 0x01 */ + UINT16 ext_mem_k; /* 0x02 */ + UINT16 orig_video_page; /* 0x04 */ + UINT8 orig_video_mode; /* 0x06 */ + UINT8 orig_video_cols; /* 0x07 */ + UINT8 flags; /* 0x08 */ + UINT8 unused2; /* 0x09 */ + UINT16 orig_video_ega_bx;/* 0x0a */ + UINT16 unused3; /* 0x0c */ + UINT8 orig_video_lines; /* 0x0e */ + UINT8 orig_video_isVGA; /* 0x0f */ + UINT16 orig_video_points;/* 0x10 */ + + /* VESA graphic mode -- linear frame buffer */ + UINT16 lfb_width; /* 0x12 */ + UINT16 lfb_height; /* 0x14 */ + UINT16 lfb_depth; /* 0x16 */ + UINT32 lfb_base; /* 0x18 */ + UINT32 lfb_size; /* 0x1c */ + UINT16 cl_magic, cl_offset; /* 0x20 */ + UINT16 lfb_linelength; /* 0x24 */ + UINT8 red_size; /* 0x26 */ + UINT8 red_pos; /* 0x27 */ + UINT8 green_size; /* 0x28 */ + UINT8 green_pos; /* 0x29 */ + UINT8 blue_size; /* 0x2a */ + UINT8 blue_pos; /* 0x2b */ + UINT8 rsvd_size; /* 0x2c */ + UINT8 rsvd_pos; /* 0x2d */ + UINT16 vesapm_seg; /* 0x2e */ + UINT16 vesapm_off; /* 0x30 */ + UINT16 pages; /* 0x32 */ + UINT16 vesa_attributes; /* 0x34 */ + UINT32 capabilities; /* 0x36 */ + UINT8 _reserved[6]; /* 0x3a */ +}; + +struct boot_params { + struct screen_info screen_info; + UINT8 apm_bios_info[0x14]; + UINT8 _pad2[4]; + UINT64 tboot_addr; + UINT8 ist_info[0x10]; + UINT8 _pad3[16]; + UINT8 hd0_info[16]; + UINT8 hd1_info[16]; + UINT8 sys_desc_table[0x10]; + UINT8 olpc_ofw_header[0x10]; + UINT8 _pad4[128]; + UINT8 edid_info[0x80]; + struct efi_info efi_info; + UINT32 alt_mem_k; + UINT32 scratch; + UINT8 e820_entries; + UINT8 eddbuf_entries; + UINT8 edd_mbr_sig_buf_entries; + UINT8 _pad6[6]; + struct setup_header hdr; + UINT8 _pad7[0x290-0x1f1-sizeof(struct setup_header)]; + UINT32 edd_mbr_sig_buffer[16]; + struct e820_entry e820_map[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/LinuxBootPkg/LinuxBoot.inf = b/Platform/Intel/PurleyOpenBoardPkg/LinuxBootPkg/LinuxBoot.inf new file mode 100644 index 0000000000..62e09a75c8 --- /dev/null +++ b/Platform/Intel/PurleyOpenBoardPkg/LinuxBootPkg/LinuxBoot.inf @@ -0,0 +1,46 @@ +## @file +# +# Copyright (c) 2021, American Megatrends International LLC. All rights +reserved.
# # SPDX-License-Identifier: BSD-2-Clause-Patent # ## + +## +# +# This library links with the Bds module to launch the Linux kernel. +# +## + +[Defines] + INF_VERSION =3D 0x00010005 + VERSION_STRING =3D 1.0 + BASE_NAME =3D LinuxBoot + FILE_GUID =3D 74a41ddc-fac5-4787-afad-d81ee30a8b6= 3 # {0x74a41ddc, 0xfac5, 0x4787, {0xaf, 0xad, 0xd8, 0x1e, 0xe3, 0x0a, = 0x8b, 0x63}} + 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/LinuxBootPkg/LinuxBootNull.= c b/Platform/Intel/PurleyOpenBoardPkg/LinuxBootPkg/LinuxBootNull.c new file mode 100644 index 0000000000..fa6ea117f4 --- /dev/null +++ b/Platform/Intel/PurleyOpenBoardPkg/LinuxBootPkg/LinuxBootNull.c @@ -0,0 +1,43 @@ +/** @file + +Copyright (c) 2021, American Megatrends International LLC. All rights +reserved.
+SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +/** + * + * This library will load the Linux kernel and initrd from the BIOS and = launch it. + * + */ + +//--------------------------------------------------------------------- +------ + +#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 LINUX= BOOT_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/LinuxBootPkg/LinuxBootNull.= inf b/Platform/Intel/PurleyOpenBoardPkg/LinuxBootPkg/LinuxBootNull.inf new file mode 100644 index 0000000000..3ed53c6ba0 --- /dev/null +++ b/Platform/Intel/PurleyOpenBoardPkg/LinuxBootPkg/LinuxBootNull.inf @@ -0,0 +1,31 @@ +## @file +# +# Copyright (c) 2021, American Megatrends International LLC. All rights +reserved.
# # SPDX-License-Identifier: BSD-2-Clause-Patent # ## + +## +# +# This library links with the Bds module to launch the Linux kernel. +# +## + +[Defines] + INF_VERSION =3D 0x00010005 + VERSION_STRING =3D 1.0 + BASE_NAME =3D LinuxBoot + FILE_GUID =3D 0551B6D3-0594-4B02-AF42-5A9C7515CEC= 8 + 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 @@ gPlatformTokenSpaceGuid.PcdUpdateConsoleInBds|TRUE|BOOLEAN|0x30000035 + gPlatformTokenSpaceGuid.PcdLinuxBootEnable|FALSE|BOOLEAN|0x30000036 + [PcdsDynamicEx] gPlatformTokenSpaceGuid.PcdDfxAdvDebugJumper|FALSE|BOOLEAN|0x6000001D diff --git a/Platform/Intel/PurleyOpenBoardPkg/Override/Platform/Intel/Min= PlatformPkg/Bds/Library/DxePlatformBootManagerLib/BdsPlatform.c b/Platform/= Intel/PurleyOpenBoardPkg/Override/Platform/Intel/MinPlatformPkg/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/OE= M. 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 gUsbClassKeybo= ardDevicePath =3D { { { @@ -1268,6 +1275,8 @@ PlatformBootManagerAfterConsole ( LocalBootMode =3D gBootMode; DEBUG ((DEBUG_INFO, "Current local bootmode - %x\n", LocalBootMode)); + LinuxBootStart(); + // // Go the different platform policy with different boot mode // Notes: this part code can be change with the table policy diff --git= a/Platform/Intel/PurleyOpenBoardPkg/Override/Platform/Intel/MinPlatformPkg= /Bds/Library/DxePlatformBootManagerLib/DxePlatformBootManagerLib.inf b/Plat= form/Intel/PurleyOpenBoardPkg/Override/Platform/Intel/MinPlatformPkg/Bds/Li= brary/DxePlatformBootManagerLib/DxePlatformBootManagerLib.inf index 5790743565..21ac65257c 100644 --- a/Platform/Intel/PurleyOpenBoardPkg/Override/Platform/Intel/MinPlatfor= mPkg/Bds/Library/DxePlatformBootManagerLib/DxePlatformBootManagerLib.inf +++ b/Platform/Intel/PurleyOpenBoardPkg/Override/Platform/Intel/MinPlatf +++ ormPkg/Bds/Library/DxePlatformBootManagerLib/DxePlatformBootManagerL +++ 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.dec diff --git a/Platform/Intel/Readme.md b/Platform/Intel/Readme.md index 06c= 5f32b1e..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 | Machine Name | Supported Chipsets = | BoardPkg | Board Name | @@ -250,6 +255,12 @@ return back to the minimum platform caller. | | | | build se= ttings, environment variables. | | | |---build_board.py: Optional b= oard-specific pre-build, | | | build, pos= t-build and clean functions. + | | |------PurleyOpenBoardPkg + | | | |------BoardTiogaPass + | | | |---build_config.cfg: BoardTio= gaPass specific + | | | | build se= ttings, environment variables. + | | | |---build_board.py: Optional b= oard-specific pre-build, + | | | build, pos= t-build and clean functions. | | | | | |------SimicsOpenBoardPkg | | | |------BoardX58Ich10 @@ -292,6 +303,18 @@ For PurleyOpenBoardPkg "bld cache-consume" Consume a cache of binary files from the specified= 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:\Edk2Worksp= ace. +2. Type "cd edk2-platforms\Platform\Intel\PurleyOpenBoardPkg\BoardTiogaPa= ss". +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 bina= ry 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\PLATFORM.fd or + Build\PurleyOpenBoardPkg\BoardTiagoPass\RELEASE_VS2015x86\FV\PLATFORM.= 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 201= 80629. 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 V= isual Studio 2015 build tools. +3. This firmware project does not build with the GCC compiler. +4. The validated version of iASL compiler that can build MinPurley is 201= 80629. 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 and +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 https://nam12.safelinks.protection.outlook.co= m/?url=3Dhttp%3A%2F%2Fosresearch.net%2FBuilding%2F&data=3D04%7C01%7Cman= ickavasakamk%40ami.com%7C0e17ba01178e4475fd4608d9380b131f%7C27e97857e15f486= cb58e86c2b3040f93%7C1%7C0%7C637602442487974382%7CUnknown%7CTWFpbGZsb3d8eyJW= IjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&s= data=3DancbqqKtQUlzJJLmDOfpIOQdZ2UNIZRd74njHBEkeLk%3D&reserved=3D0 to c= ompile the heads kernel and initrd for 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 Window= s 10 x64 and Ubuntu 17.10 with AHCI mode. -- 2.25.0.windows.1 Please consider the environment before printing this email. The information contained in this message may be confidential and propriet= ary to American Megatrends (AMI). This communication is intended to be rea= d only by the individual or entity to whom it is addressed or by their desi= gnee. If the reader of this message is not the intended recipient, you are = on notice that any distribution of this message, in any form, is strictly p= rohibited. Please promptly notify the sender by reply e-mail or by telepho= ne at 770-246-8600, and then delete or destroy all copies of the transmissi= on. GitPatchExtractor 1.1 -The information contained in this message may be confidential and proprie= tary to American Megatrends (AMI). This communication is intended to be rea= d only by the individual or entity to whom it is addressed or by their desi= gnee. If the reader of this message is not the intended recipient, you are = on notice that any distribution of this message, in any form, is strictly p= rohibited. Please promptly notify the sender by reply e-mail or by telephon= e at 770-246-8600, and then delete or destroy all copies of the transmissio= n.