From nobody Sun Feb 8 01:41:57 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+51599+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+51599+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1575365451; cv=none; d=zohomail.com; s=zohoarc; b=ZDvwqFnVuFMoqIuR07vzDBDpdlHDwRMhFn5KkI84CrH/Y7JKc+y0pIZgcfN1ia4pqrPgklae8+DHkC6ias5pjTlxhQYq26JzyaFJjuw9Kk5eWv8CEjBAV4sYne2vUEIQo5cpdGAh3p9Q7pRG0bWoALOJpAdtjF/pXQRNsO3FIgs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1575365451; h=Date:From:List-Id:List-Unsubscribe:Message-ID:Reply-To:Sender:Subject:To; bh=8S/z/kISMGWFYDpSeVfbDooHkcjLrS+XvHk7wxg5l2U=; b=Wl0BMB7VhxhTUHjnyn1jHqL+vYS8jH7c1Cwhg7gsO7dGo/YzEVWFdwT1WpDxNPwHZ6gSbu/8bg1juEw7fHpcAdh4KY4DtjNTwd5pzu9K5aZkaqZg1dAPuVf7IWUP0RpV2O4TBG/uS9ful4+1Xh92ZyhRXFhHKsoA6/CdbDWDuKo= ARC-Authentication-Results: i=1; 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+51599+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) header.from= Received: from web01.groups.io (web01.groups.io [66.175.222.12]) by mx.zohomail.com with SMTPS id 1575365451019508.00485481969656; Tue, 3 Dec 2019 01:30:51 -0800 (PST) Return-Path: X-Received: by 127.0.0.2 with SMTP id aaaaYY1788612xaaaaaaaaaa; Tue, 03 Dec 2019 01:30:50 -0800 X-Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by mx.groups.io with SMTP id smtpd.web12.2976.1575359798175706398 for ; Mon, 02 Dec 2019 23:56:38 -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 fmsmga102.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 02 Dec 2019 23:56:37 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.69,272,1571727600"; d="scan'208";a="204879385" X-Received: from chenche4.ccr.corp.intel.com ([10.239.9.11]) by orsmga008.jf.intel.com with ESMTP; 02 Dec 2019 23:56:36 -0800 From: Chen A Chen To: devel@edk2.groups.io Subject: [edk2-devel] [[edk2-platform][PATCH v2]] Platform/FitGen: Add FitGen feature to support uCode Capsule Update Date: Tue, 3 Dec 2019 15:56:34 +0800 Message-Id: <20191203075634.28308-1-chen.a.chen@intel.com> 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,chen.a.chen@intel.com X-Gm-Message-State: aaaaaaaaaaaaaaaaaaaaaaaax1787277AA= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1575365450; bh=kC4Da8c8k/y3ZEG4BcfG3BravWgPQU06xXUV0IyN1pM=; h=Date:From:Reply-To:Subject:To; b=iPWKeOPP/EpO5TF4QwKyN2a6oNPciVaRol1c6PCpNP5M5wMAvrILUVXeY2Bn4G/uyUh /0SL6w+u1J3rkHwEy7SGBkSeWsVOsr+wvhRfJNcJqxCaEyYsnh6DS5DHbPN3HHEBRclqn 0kitl0r2anJXQGuLs4HunhD3o3XDQNHCxyY= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Add slot mode handling with a header array. BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=3D2321 Signed-off-by: Chen A Chen Reviewed-by: Liming Gao --- Silicon/Intel/Tools/FitGen/FitGen.c | 79 +++++++++++++++++++++++++++++++++= +++- 1 file changed, 77 insertions(+), 2 deletions(-) diff --git a/Silicon/Intel/Tools/FitGen/FitGen.c b/Silicon/Intel/Tools/FitG= en/FitGen.c index faf9880060..833610f2a0 100644 --- a/Silicon/Intel/Tools/FitGen/FitGen.c +++ b/Silicon/Intel/Tools/FitGen/FitGen.c @@ -315,6 +315,7 @@ Returns: "\t[-F ] [-F ] [-V= ]\n" "\t[-NA]\n" "\t[-CLEAR]\n" + "\t[-L ]\n" "\t[-I ]\n" "\t[-S |] [-V = ]\n" "\t[-B ] [-B ...] [-V ]\n" @@ -340,6 +341,8 @@ Returns: printf ("\tMicrocodeRegionOffset - Offset of Microcode region in input = FD image.\n"); printf ("\tMicrocodeRegionSize - Size of Microcode region in input FD= image.\n"); printf ("\tMicrocodeGuid - Guid of Microcode Module.\n"); + printf ("\tMicrocodeSlotSize - Occupied region size of each Microco= de binary.\n"); + printf ("\tMicrocodeFfsGuid - Guid of FFS which is used to save Mi= crocode binary"); printf ("\t-NA - No 0x800 aligned Microcode requireme= nt. No -NA means Microcode is 0x800 aligned.\n"); printf ("\tRecordType - FIT entry record type. User should e= nsure it is ordered.\n"); printf ("\tRecordDataAddress - FIT entry record data address.\n"); @@ -764,6 +767,7 @@ Returns: */ { EFI_GUID Guid; + EFI_GUID MicrocodeFfsGuid; INTN Index; UINT8 *FileBuffer; UINT32 FileSize; @@ -774,16 +778,22 @@ Returns: UINT32 MicrocodeBase; UINT32 MicrocodeSize; UINT8 *MicrocodeBuffer; + UINT32 MicrocodeBufferSize; + UINT8 *Walker; UINT32 MicrocodeRegionOffset; UINT32 MicrocodeRegionSize; + UINT32 SlotSize; STATUS Status; EFI_FIRMWARE_VOLUME_HEADER *FvHeader; UINTN FitEntryNumber; BOOLEAN BiosInfoExist; + BOOLEAN SlotMode; BIOS_INFO_HEADER *BiosInfo; BIOS_INFO_STRUCT *BiosInfoStruct; UINTN BiosInfoIndex; =20 + SlotMode =3D FALSE; + // // Init index // @@ -900,7 +910,34 @@ Returns: } =20 // - // 0.5 BiosInfo + // 0.5 SlotSize + // + if ((Index + 1 >=3D argc) || + ((strcmp (argv[Index], "-L") !=3D 0) && + (strcmp (argv[Index], "-l") !=3D 0)) ) { + // + // Bypass + // + SlotSize =3D 0; + } else { + SlotSize =3D xtoi (argv[Index + 1]); + + if (SlotSize =3D=3D 0) { + printf ("Invalid slotsize =3D %d\n", SlotSize); + return 0; + } + + SlotMode =3D IsGuidData(argv[Index + 2], &MicrocodeFfsGuid); + if (!SlotMode) { + printf ("Need a ffs GUID for search uCode ffs\n"); + return 0; + } + + Index +=3D 3; + } + + // + // 0.6 BiosInfo // if ((Index + 1 >=3D argc) || ((strcmp (argv[Index], "-I") !=3D 0) && @@ -1007,6 +1044,16 @@ Returns: } else { MicrocodeBuffer =3D MicrocodeFileBuffer; } + + if (SlotMode) { + MicrocodeBuffer =3D FindFileFromFvByGuid(MicrocodeFileBuffer= , MicrocodeFileSize, &MicrocodeFfsGuid, &MicrocodeBufferSize); + if (MicrocodeBuffer =3D=3D NULL) { + printf ("-L Parameter incorrect, GUID not found\n"); + // not found + return 0; + } + } + while ((UINT32)(MicrocodeBuffer - MicrocodeFileBuffer) < Micro= codeFileSize) { if (*(UINT32 *)(MicrocodeBuffer) !=3D 0x1) { // HeaderVersion break; @@ -1040,7 +1087,35 @@ Returns: gFitTableContext.MicrocodeNumber++; gFitTableContext.FitEntryNumber++; =20 - MicrocodeBuffer +=3D MicrocodeSize; + if (SlotSize !=3D 0) { + MicrocodeBuffer +=3D SlotSize; + } else { + MicrocodeBuffer +=3D MicrocodeSize; + } + } + + /// + /// Check the remaining buffer + /// + if (((UINT32)(MicrocodeBuffer - MicrocodeFileBuffer) < Microco= deFileSize) && SlotMode !=3D 0) { + for (Walker =3D MicrocodeBuffer; Walker < MicrocodeFileBuffe= r + MicrocodeFileSize; Walker++) { + if (*Walker !=3D 0xFF) { + printf ("Error: detect non-spare space after uCode array= , please check uCode array!\n"); + return 0; + } + } + + /// + /// Split the spare space as empty buffer for save uCode pat= ch. + /// + while (MicrocodeBuffer + SlotSize <=3D MicrocodeFileBuffer += MicrocodeFileSize) { + gFitTableContext.Microcode[gFitTableContext.MicrocodeNumbe= r].Type =3D FIT_TABLE_TYPE_MICROCODE; + gFitTableContext.Microcode[gFitTableContext.MicrocodeNumbe= r].Address =3D MicrocodeBase + ((UINT32) (UINTN) MicrocodeBuffer - (UINT32)= (UINTN) MicrocodeFileBuffer); + gFitTableContext.MicrocodeNumber++; + gFitTableContext.FitEntryNumber++; + + MicrocodeBuffer +=3D SlotSize; + } } } break; --=20 2.16.2.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 (#51599): https://edk2.groups.io/g/devel/message/51599 Mute This Topic: https://groups.io/mt/65680861/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-