I would point out that in systems where PEI FVs are updated independently of DXE FVs, we use 100% DynamicEx, because we try to make no assumptions. Basically, the PEIMs in the PEI FV are considered "binary builds" per Mike's classification.
Tim -----Original Message----- From: Kinney, Michael D [mailto:[email protected]] Sent: Wednesday, February 17, 2016 9:00 AM To: Gao, Liming <[email protected]>; Tim Lewis <[email protected]>; Zeng, Star <[email protected]>; [email protected]; Kinney, Michael D <[email protected]> Subject: RE: PCD Local Token Numbers in PEI/DXE Liming, Adding error message/assert when PEI and DXE databases are not compatible is a good idea. But I also think we should do everything we can to prevent PEI and DXE databases from ever being incompatible. Especially if 100% of the PCDs used are accessed as DynamixEx. Thanks, Mike > -----Original Message----- > From: Gao, Liming > Sent: Wednesday, February 17, 2016 7:07 AM > To: Tim Lewis <[email protected]>; Zeng, Star > <[email protected]>; Kinney, Michael D <[email protected]>; > [email protected] > Subject: RE: PCD Local Token Numbers in PEI/DXE > > Tim: > I think we can enhance PCD driver and Build tool to do this check. > If the mismatch happens, PcdDxe driver will report error message, and not > install PCD protocol. > > Thanks > Liming > -----Original Message----- > From: edk2-devel [mailto:[email protected]] On Behalf Of > Tim Lewis > Sent: Monday, February 15, 2016 1:59 PM > To: Zeng, Star <[email protected]>; Kinney, Michael D > <[email protected]>; [email protected] > Subject: Re: [edk2] PCD Local Token Numbers in PEI/DXE > > Star -- > > There are many cases where the PEI FV is not updated because it > resides in a portion of the flash that is specially protected, often > by a pin on the motherboard. In many platforms, this recovery firmware > in PEI is never updated throughout the life of the platform. But DXE might be > updated many times. > > We handle the mismatch case often, for HOBs, etc. We design the HOBs, > UEFI variables, etc. in such a way that the detection can be detected or > worked-around. > > But with PCDs, we cannot detect the mismatch without special > knowledge, because the PCD driver will return the wrong PCD value. > > Tim > > -----Original Message----- > From: Zeng, Star [mailto:[email protected]] > Sent: Sunday, February 14, 2016 9:54 PM > To: Tim Lewis <[email protected]>; Kinney, Michael D > <[email protected]>; [email protected] > Cc: Zeng, Star <[email protected]> > Subject: RE: PCD Local Token Numbers in PEI/DXE > > Tim, > > Basically, I aware PEI as the high-reliability, high-security portion of the > BIOS. > I mean for this case, should PEI FV be also updated? > > And the mismatch seems not a special case for PCD. Consider one > situation that new DXE wants to consume a HOB produced by new PEI, the > new DXE could also not work with old PEI. > > Thanks, > Star > -----Original Message----- > From: Tim Lewis [mailto:[email protected]] > Sent: Monday, February 15, 2016 1:45 PM > To: Zeng, Star; Kinney, Michael D; [email protected] > Subject: RE: PCD Local Token Numbers in PEI/DXE > > Star -- > > Consider the case where PEI FV is inside the flash boot block, but DXE > FV is outside of the flash boot block. This case is very common, using > PEI as the high-reliability, high-security portion of the BIOS. > > You are correct, there is another case which is: > > Build #1: PEI database A does not have PCD X, DXE database A has PCD X > Build #2: PEI database A has PCD X, DXE database A does not have PCD X > > If the PEI from #2 is combined with the DXE from #1, there will be two > copies of the PCD (one in PEI, one in DXE). In our work-around, we > searched PEI before DXE. The better method might be to timestamp (rather than > assume PEI before DXE). > > Tim > > -----Original Message----- > From: Zeng, Star [mailto:[email protected]] > Sent: Sunday, February 14, 2016 9:33 PM > To: Kinney, Michael D <[email protected]>; Tim Lewis > <[email protected]>; [email protected] > Subject: RE: PCD Local Token Numbers in PEI/DXE > > Mike, > > Could one PCD be accessed using both methods Dynamic and DynamicEx in one > build? > As I know, it could not. > > Another problem is about where the default PCD value stores. > Currently, PEI and PEI+DXE phase consumed PCDs are stored in PEI PCD > database, and only DXE phase consumed PCDs are stored in DXE PCD database. > If the new PEI consumes 4+ PCDs, the 4+ PCDs will be stored in PEI > database, and if DXE also consumes them, the new DXE would not work > with old PEI. And is it a valid case to only update DXE FV? > > > Thanks, > Star > -----Original Message----- > From: edk2-devel [mailto:[email protected]] On Behalf Of > Kinney, Michael D > Sent: Thursday, February 11, 2016 2:21 AM > To: Tim Lewis; [email protected]; Kinney, Michael D > Subject: Re: [edk2] PCD Local Token Numbers in PEI/DXE > > Tim, > > All good ideas to evaluate. > > We did design in the Dynamic PCDs with generated local tokens to > minimize the size overhead of the PCD database for source builds. We > can do some size impact analysis of these ideas to see which one makes the > most sense. > > The database is currently optimized for Dynamic PCDs. When a > DynamicEx PCD is used it is internally translated to a Dynamic > request. I think all of the ideas here require this concept to be > reversed. We need to optimized the database for DynamicEx and never > reference Dynamic part of database to process a DynamicEx request. If > Dynamic is used, it can either be internally translated to a DynamicEx > request with a fixed token space guid or be processed as a local > token. In mixed Dynamic/DynamicEx environments, the same PCD may be accessed > using both methods. Current design supports this mixed env, so we need to > make sure that aspect is not broken if we change internal code/database. > > Best regards, > > Mike > > > -----Original Message----- > > From: Tim Lewis [mailto:[email protected]] > > Sent: Wednesday, February 10, 2016 9:50 AM > > To: Kinney, Michael D <[email protected]>; > > [email protected] > > Subject: RE: PCD Local Token Numbers in PEI/DXE > > > > Mike -- > > > > Yes, we use all DynamicEx PCDs because we use a large number of > > binary deliverables in certain segments. > > > > It would be a much simpler database design if the look up was purely > > a GUID/token number/SkuId look-up (no local token numbers at all). > > The existing Dynamic PCDs could be supported by assigning them a > > single GUID. That is, Dynamic PCDs would be translated up to > > DynamicEx by using gEfiDynamicPcdGuid. Or we could deprecate > > Dynamic. Or make it auto-translate > to DynamicEx. > > > > Tim > > > > > > -----Original Message----- > > From: edk2-devel [mailto:[email protected]] On Behalf > > Of Kinney, Michael D > > Sent: Wednesday, February 10, 2016 9:41 AM > > To: Tim Lewis <[email protected]>; [email protected]; > > Kinney, Michael D <[email protected]> > > Subject: Re: [edk2] PCD Local Token Numbers in PEI/DXE > > > > Hi Tim, > > > > Your description looks correct to me. The current design does have > > an assumption that the PCD database used in PEI is aligned with the > > PCD database used in > DXE. > > > > If the number of Dynamic/DynamicEx PCDs used in a platform changes, > > then the PCD database associated with the PCD PEIM and PCD DXE > > Driver both need to be > updated. > > > > I think it would be good to work on a method that allows the PEI > > Database and DXE Database to be updated independently. > > > > In general, if binary modules are used, then Dynamic PCDs can not be > > used. Instead all Dynamic PCDs must be updated to by DynamicEx PCDs. > > That is for binary modules that performs PCD Get/Set operations > > through the PCD > PPI/Protocol. > > > > I think the gap here is that the PCD database does not have a build > > mode that forces use of only DynamicEx (TokenSpaceGuid, TokenNumber) > > for the entire > database contents. > > If we added that build mode (so there are no "local token numbers") > > then the PEI database and DXE database could be updated independently. > > > > This build mode could only be enabled if there are no Dynamic PCDs. > > In fact, this build mode could be automatic if there are no Dynamic PCDs in > > DSC file. > > > > Mike > > > > > -----Original Message----- > > > From: edk2-devel [mailto:[email protected]] On > > > Behalf Of Tim Lewis > > > Sent: Tuesday, February 9, 2016 10:24 AM > > > To: [email protected] > > > Subject: [edk2] PCD Local Token Numbers in PEI/DXE > > > > > > We have run into an interesting problem with the PCD database when > > > the PEI and DXE databases were not built at the same time. This > > > happens with boot-block type arrangements. This is not a Dynamic > > > vs. DynamicEx > issue. > > > > > > Short form: > > > > > > > > > 1) The standard PCD database for Dynamic/DynamicEx PCDs is broken > > > into two > > pieces, > > > based on whether the PCD is access by a PEIM, a DXE driver, or both. > > > The pieces are embedded directly into the PCD PEIM and PCD DXE > > > driver that produces > > the PCD services. > > > > > > 2) Each Dynamic/DynamicEx PCD is assigned a unique "local token > > > number" This > > > number is different than the token number which is in the PCD > > > declaration in the .dec file. This number is assigned at build time. > > > > > > 3) If a later version of the DXE PCD driver is a) built in a later > > > codebase > > where > > > there are more or less PEI-access PCDs, but later b) executed with > > > a version of the PEI PCD database from the earlier codebase where > > > there were fewer, it causes a problem. For example, if the new PEI > > > PCD database has 4 more, the new DXE PCD database will start its > > > numbering at +4. But when it is executed with the old PEI PCD > > > database, it will end up looking up the wrong PCD > > > > > > We're not sure what the best course is to solve this. Frankly, the > > > PCD database format is a muddle. We have a temporary work-around, > > > but we're wondering if anyone has thoughts on a good solution. > > > > > > Thanks, > > > > > > Tim > > > _______________________________________________ > > > edk2-devel mailing list > > > [email protected] > > > https://lists.01.org/mailman/listinfo/edk2-devel > > _______________________________________________ > > edk2-devel mailing list > > [email protected] > > https://lists.01.org/mailman/listinfo/edk2-devel > _______________________________________________ > edk2-devel mailing list > [email protected] > https://lists.01.org/mailman/listinfo/edk2-devel > _______________________________________________ > edk2-devel mailing list > [email protected] > https://lists.01.org/mailman/listinfo/edk2-devel _______________________________________________ edk2-devel mailing list [email protected] https://lists.01.org/mailman/listinfo/edk2-devel

