Hi > > +EFI_STATUS > > +EFIAPI > > +BspAcceptMemoryResourceRange ( > > + IN EFI_PHYSICAL_ADDRESS PhysicalAddress, > > + IN EFI_PHYSICAL_ADDRESS PhysicalEnd > > + ) > > +{ > > + EFI_STATUS Status; > > + UINT32 AcceptPageSize; > > + UINT64 StartAddress1; > > + UINT64 StartAddress2; > > + UINT64 StartAddress3; > > + UINT64 TotalLength; > > + UINT64 Length1; > > + UINT64 Length2; > > + UINT64 Length3; > > + UINT64 Pages; > > + > > + AcceptPageSize = FixedPcdGet32 (PcdTdxAcceptPageSize); > > + TotalLength = PhysicalEnd - PhysicalAddress; > > + StartAddress1 = 0; > > + StartAddress2 = 0; > > + StartAddress3 = 0; > > + Length1 = 0; > > + Length2 = 0; > > + Length3 = 0; > > + > > + if (TotalLength == 0) { > > + return EFI_SUCCESS; > > + } > > + > > + if ((AcceptPageSize == SIZE_4KB) || (TotalLength <= SIZE_2MB)) { > > + // > > + // if total length is less than 2M, then we accept pages in 4k > > + // > > + StartAddress1 = 0; > > + Length1 = 0; > > + StartAddress2 = PhysicalAddress; > > + Length2 = PhysicalEnd - PhysicalAddress; > > + StartAddress3 = 0; > > + Length3 = 0; > > + AcceptPageSize = SIZE_4KB; > > You've zero-initialized everything above, no need to do that again. Thanks for reminder. It will be updated in the next version. > You also can just use StartAddress1 + Length1 which uses 4k pages anyway. In the origin design, StartAddress1+Length1 and StartAddress3+Length3 are for BSP, StartAddress2+Length2 is for BSP/APs. Now only BSP accepts memory. So you're right. We can just use StartAddress1+Length1 which uses 4k pages anyway. > > > + } else if (AcceptPageSize == SIZE_2MB) { > > + // > > + // Total length is bigger than 2M and Page Accept size 2M is supported. > > + // > > + if ((PhysicalAddress & ALIGNED_2MB_MASK) == 0) { > > The logic is rather messy. It should become much simpler if you update > PhysicalAddress and TotalLength. You can also use the alignment macros. > > if (ALIGN_VALUE(PhysicalAddress, SIZE_2MB) != PhysicalAddress) { > StartAddress1 = PhysicalAddress; > Length1 = ALIGN_VALUE(PhysicalAddress, SIZE_2MB) - PhysicalAddress; > PhysicalAddress += Length1; > TotalLength -= Length1; > } > if (TotalLength > SIZE_2MB) { > StartAddress2 = PhysicalAddress; > Length2 = TotalLength & ~(UINT64)ALIGNED_2MB_MASK > PhysicalAddress += Length2; > TotalLength -= Length2; > } > if (TotalLength) { > StartAddress3 = PhysicalAddress; > Length3 = TotalLength; > } > Thanks for the suggestion. It's better. It will be updated in the next version.
Thanks Min -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#84969): https://edk2.groups.io/g/devel/message/84969 Mute This Topic: https://groups.io/mt/87696588/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-