From nobody Sun Feb 8 13:17:21 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+53829+1787277+3901457@groups.io; helo=web01.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+53829+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=intel.com Received: from web01.groups.io (web01.groups.io [66.175.222.12]) by mx.zohomail.com with SMTPS id 1580913154731750.1192848632597; Wed, 5 Feb 2020 06:32:34 -0800 (PST) Return-Path: X-Received: by 127.0.0.2 with SMTP id dKxVYY1788612xS5GL0ZQyrS; Wed, 05 Feb 2020 06:32:32 -0800 X-Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by mx.groups.io with SMTP id smtpd.web12.8104.1580913151403143252 for ; Wed, 05 Feb 2020 06:32:31 -0800 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False X-Received: from orsmga008.jf.intel.com ([10.7.209.65]) by fmsmga105.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 05 Feb 2020 06:32:30 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.70,405,1574150400"; d="scan'208";a="224669147" X-Received: from lgao4-mobl.ccr.corp.intel.com ([10.249.170.116]) by orsmga008.jf.intel.com with ESMTP; 05 Feb 2020 06:32:29 -0800 From: "Liming Gao" To: devel@edk2.groups.io Cc: Bob Feng Subject: [edk2-devel] [edk2-platform] FitGen: Support FV with the extension header Date: Wed, 5 Feb 2020 22:32:24 +0800 Message-Id: <20200205143224.2038-1-liming.gao@intel.com> MIME-Version: 1.0 Precedence: Bulk List-Unsubscribe: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,liming.gao@intel.com X-Gm-Message-State: g1wYx1XfjMFhpAawaMveeTchx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1580913152; bh=vQFm56tKiPtwYEjQ+R24y8csAgu/+ocvDZxo+5HxHjM=; h=Cc:Date:From:Reply-To:Subject:To; b=dkMMmjON3I0NQ8+lk2AagBIONoo5uhj8L5YE/apki0GJaN1dN5w0OVabFYuT92iNBaU eCjhOMGi8uil2HP0LYO7vfp/1JboADQNUV5b8zpdmzm+zhxc03JZPxZ1hIu18dWizWC3T /aNgd65B2N9I7M2ZjtdG/fzBPQFM8uqlF3Y= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Type: text/plain; charset="utf-8" BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=3D2086 To find Microcode FILE in FV image, need to skip FV header and FV extension header, then find the first RAW FFS file. Cc: Bob Feng Signed-off-by: Liming Gao Reviewed-by: Bob Feng --- Silicon/Intel/Tools/FitGen/FitGen.c | 40 +++++++++++++++++++++++++++++++--= ---- Silicon/Intel/Tools/FitGen/FitGen.h | 2 +- 2 files changed, 35 insertions(+), 7 deletions(-) diff --git a/Silicon/Intel/Tools/FitGen/FitGen.c b/Silicon/Intel/Tools/FitG= en/FitGen.c index 9f1db32a15..5f5638dc8b 100644 --- a/Silicon/Intel/Tools/FitGen/FitGen.c +++ b/Silicon/Intel/Tools/FitGen/FitGen.c @@ -747,6 +747,37 @@ CheckOverlap ( } } =20 +UINT8 * +GetMicrocodeBufferFromFv ( + EFI_FIRMWARE_VOLUME_HEADER *FvHeader + ) +{ + UINT8 *MicrocodeBuffer; + EFI_FFS_FILE_HEADER *FfsHeader; + + MicrocodeBuffer =3D NULL; + // + // Skip FV header + FV extension header + FFS header + // + FfsHeader =3D (EFI_FFS_FILE_HEADER *)((UINT8 *) FvHeader + FvHeader->Hea= derLength); + while ((UINT8 *) FfsHeader < (UINT8 *) FvHeader + FvHeader->FvLength) { + if (FfsHeader->Type =3D=3D EFI_FV_FILETYPE_RAW) { + // + // Find the first RAW ffs file as Microcode Buffer + // + MicrocodeBuffer =3D (UINT8 *)(FfsHeader + 1); + break; + } + if (GetFfsFileLength (FfsHeader) =3D=3D 0xFFFFFF) { + // spare space is found, and exit + break; + } + FfsHeader =3D (EFI_FFS_FILE_HEADER *) ((UINT8 *) FfsHeader + ((GetFfsF= ileLength (FfsHeader)+7)&~7)); + } + + return MicrocodeBuffer; +} + UINT32 GetFitEntryNumber ( IN INTN argc, @@ -1047,8 +1078,7 @@ Returns: =20 FvHeader =3D (EFI_FIRMWARE_VOLUME_HEADER *)MicrocodeFileBuffer; if (FvHeader->Signature =3D=3D EFI_FVH_SIGNATURE) { - // Skip FV header + FFS header - MicrocodeBuffer =3D MicrocodeFileBuffer + sizeof(EFI_FIRMWAR= E_VOLUME_HEADER) + sizeof(EFI_FV_BLOCK_MAP_ENTRY) + sizeof(EFI_FFS_FILE_HEA= DER); + MicrocodeBuffer =3D GetMicrocodeBufferFromFv (FvHeader); } else { MicrocodeBuffer =3D MicrocodeFileBuffer; } @@ -1388,8 +1418,7 @@ Returns: =20 FvHeader =3D (EFI_FIRMWARE_VOLUME_HEADER *)MicrocodeFileBuffer; if (FvHeader->Signature =3D=3D EFI_FVH_SIGNATURE) { - // Skip FV header + FFS header - MicrocodeBuffer =3D MicrocodeFileBuffer + sizeof(EFI_FIRMWARE_VO= LUME_HEADER) + sizeof(EFI_FV_BLOCK_MAP_ENTRY) + sizeof(EFI_FFS_FILE_HEADER); + MicrocodeBuffer =3D GetMicrocodeBufferFromFv (FvHeader); } else { MicrocodeBuffer =3D MicrocodeFileBuffer; } @@ -1401,8 +1430,7 @@ Returns: =20 FvHeader =3D (EFI_FIRMWARE_VOLUME_HEADER *)MicrocodeFileBuffer; if (FvHeader->Signature =3D=3D EFI_FVH_SIGNATURE) { - // Skip FV header + FFS header - MicrocodeBuffer =3D MicrocodeFileBuffer + sizeof(EFI_FIRMWARE_VO= LUME_HEADER) + sizeof(EFI_FV_BLOCK_MAP_ENTRY) + sizeof(EFI_FFS_FILE_HEADER); + MicrocodeBuffer =3D GetMicrocodeBufferFromFv (FvHeader); } else { MicrocodeBuffer =3D MicrocodeFileBuffer; } diff --git a/Silicon/Intel/Tools/FitGen/FitGen.h b/Silicon/Intel/Tools/FitG= en/FitGen.h index ecb5822d32..4d0a2dc6f8 100644 --- a/Silicon/Intel/Tools/FitGen/FitGen.h +++ b/Silicon/Intel/Tools/FitGen/FitGen.h @@ -31,7 +31,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent // Utility version information // #define UTILITY_MAJOR_VERSION 0 -#define UTILITY_MINOR_VERSION 57 +#define UTILITY_MINOR_VERSION 58 #define UTILITY_DATE __DATE__ =20 // --=20 2.13.0.windows.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#53829): https://edk2.groups.io/g/devel/message/53829 Mute This Topic: https://groups.io/mt/70996333/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-