[edk2-devel] [PATCH v5 6/8] ShellPkg: Acpiview: IORT parser update for IORT Rev E.d spec

Sami Mujawar sami.mujawar at arm.com
Wed Jul 13 16:39:14 UTC 2022


Hi Pierre,

Thank you for the feedback.

Please find my response inline marked [SAMI]

On 13/07/2022 01:10 pm, Pierre Gondois wrote:
> Hi Sami,
>
>> +
>>   /**
>>     Helper Macro for populating the IORT Node header in the 
>> ACPI_PARSER array.
>>   @@ -108,15 +160,15 @@ ValidateItsIdArrayReference (
>>     @param [out] ValidateIdArrayReference  Optional pointer to a 
>> function for
>>                                            validating the ID Array 
>> reference.
>>   **/
>> -#define PARSE_IORT_NODE_HEADER(ValidateIdMappingCount, \
>> - ValidateIdArrayReference)                 \
>> -  { L"Type", 1, 0, L"%d", NULL, (VOID**)&IortNodeType, NULL, NULL 
>> },     \
>> -  { L"Length", 2, 1, L"%d", NULL, (VOID**)&IortNodeLength, NULL, 
>> NULL }, \
>> -  { L"Revision", 1, 3, L"%d", NULL, NULL, NULL, NULL 
>> },                  \
>> -  { L"Reserved", 4, 4, L"0x%x", NULL, NULL, NULL, NULL 
>> },                \
>> -  { L"Number of ID mappings", 4, 8, L"%d", 
>> NULL,                         \
>> -    (VOID**)&IortIdMappingCount, ValidateIdMappingCount, NULL 
>> },         \
>> -  { L"Reference to ID Array", 4, 12, L"0x%x", 
>> NULL,                      \
>> +#define PARSE_IORT_NODE_HEADER(ValidateIdMappingCount, \
>> + ValidateIdArrayReference)                      \
>> +  { L"Type", 1, 0, L"%d", NULL, (VOID**)&IortNodeType, NULL, NULL 
>> },          \
>> +  { L"Length", 2, 1, L"%d", NULL, (VOID**)&IortNodeLength, NULL, 
>> NULL },      \
>> +  { L"Revision", 1, 3, L"%d", NULL, (VOID**)&IortNodeRevision, NULL, 
>> NULL },  \
>> +  { L"Identifier", 4, 4, L"0x%x", NULL, NULL, NULL, NULL 
>> },                   \
>> +  { L"Number of ID mappings", 4, 8, L"%d", 
>> NULL,                              \
>> +    (VOID**)&IortIdMappingCount, ValidateIdMappingCount, NULL 
>> },              \
>> +  { L"Reference to ID Array", 4, 12, L"0x%x", 
>> NULL,                           \
>>       (VOID**)&IortIdMappingOffset, ValidateIdArrayReference, NULL }
>>     /**
>> @@ -235,11 +287,13 @@ STATIC CONST ACPI_PARSER 
>> IortNodeNamedComponentParser[] = {
>>   **/
>>   STATIC CONST ACPI_PARSER  IortNodeRootComplexParser[] = {
>>     PARSE_IORT_NODE_HEADER (NULL, NULL),
>> -  { L"Memory access properties",8,    16,  L"0x%lx", NULL,       
>> NULL, NULL, NULL },
>> -  { L"ATS Attribute",           4,    24,  L"0x%x", NULL,       
>> NULL, NULL, NULL },
>> -  { L"PCI Segment number",      4,    28,  L"0x%x", NULL,       
>> NULL, NULL, NULL },
>> -  { L"Memory access size limit",1,    32,  L"0x%x", NULL,       
>> NULL, NULL, NULL },
>> -  { L"Reserved",                3,    33,  L"%x %x %x", Dump3Chars, 
>> NULL, NULL, NULL }
>> +  { L"Memory access properties",8,    16,  L"0x%lx", NULL, NULL, 
>> NULL, NULL },
>> +  { L"ATS Attribute",           4,    24,  L"0x%x",  NULL, NULL, 
>> NULL, NULL },
>> +  { L"PCI Segment number",      4,    28,  L"0x%x",  NULL, NULL, 
>> NULL, NULL },
>> +  { L"Memory access size limit",1,    32,  L"0x%x",  NULL, NULL, 
>> NULL, NULL },
>> +  { L"PASID capabilities",      2,    33,  L"0x%x",  NULL, NULL, 
>> NULL, NULL },
>> +  { L"Reserved",                1,    35,  L"%x",    NULL, NULL, 
>> NULL, NULL },
>> +  { L"Flags",                   4,    36,  L"%x",    NULL, NULL, 
>> NULL, NULL },
>
> It seems flags are usually printed as L"0x%x"
[SAMI] Ack.
>
>>   };
>>     /**
>> @@ -253,6 +307,29 @@ STATIC CONST ACPI_PARSER IortNodePmcgParser[] = {
>>     { L"Page 1 Base Address",                           8, 32,  
>> L"0x%lx", NULL, NULL, NULL, NULL }
>>   };
>>   +/**
>> +  An ACPI_PARSER array describing the IORT RMR node.
>> +**/
>> +STATIC CONST ACPI_PARSER  IortNodeRmrParser[] = {
>> +  PARSE_IORT_NODE_HEADER (NULL, NULL),
>> +  { L"Flags",                   4,                      16, L"0x%x", 
>> NULL, NULL, NULL, NULL },
>> +  { L"Memory Range Desc count", 4,                      20, L"%d",   
>> NULL,
>> +    (VOID **)&RmrMemDescCount, ValidateRmrMemDescCount,NULL },
>> +  { L"Memory Range Desc Ref",   4,                      24, L"0x%x", 
>> NULL,
>> +    (VOID **)&RmrMemDescOffset, NULL, NULL }
>> +};
>> +
>> +/**
>> +  An ACPI_PARSER array describing the IORT RMR Memory Range Descriptor.
>> +**/
>> +STATIC CONST ACPI_PARSER  IortNodeRmrMemRangeDescParser[] = {
>> +  { L"Physical Range offset", 8, 0,  L"0x%lx", NULL, NULL, 
>> ValidatePhysicalRange,
>> +    NULL },
>> +  { L"Physical Range length", 8, 8,  L"0x%lx", NULL, NULL, 
>> ValidatePhysicalRange,
>> +    NULL },
>> +  { L"Reserved",              4, 16, L"0x%x",  NULL, NULL, 
>> NULL,                 NULL}
>> +};
>> +
>>   /**
>
> [snip]
>
>>   /**
>>     This function parses the ACPI IORT table.
>> -  When trace is enabled this function parses the IORT table and 
>> traces the ACPI fields.
>> +  When trace is enabled this function parses the IORT table and 
>> traces the ACPI
>> +  fields.
>>       This function also parses the following nodes:
>>       - ITS Group
>> @@ -618,6 +788,7 @@ DumpIortNodePmcg (
>>       - SMMUv1/2
>>       - SMMUv3
>>       - PMCG
>> +    - RMR
>>       This function also performs validation of the ACPI table fields.
>>   @@ -643,6 +814,13 @@ ParseAcpiIort (
>>       return;
>>     }
>>   +  if (AcpiTableRevision == 4) {
>> +    IncrementErrorCount ();
>> +    Print (
>> +      L"ERROR: IORT tabe Revision E.c is deprecated and must not be 
>> used.\n"
>> +      );
>> +  }
>> +
>
> I think a macro corresponding to rev E.c should be added in MdePkg
> so we can identify the deprecated revision easily.
> Similar comment for the Rmr revision (=2) which is checked in 
> DumpIortNodeRmr().
>
[SAMI] Ack.
>
>>     ParseAcpi (
>>       TRUE,
>>       0,
>> @@ -765,7 +943,14 @@ ParseAcpiIort (
>>             *IortIdMappingOffset
>>             );
>>           break;
>> -
>> +      case EFI_ACPI_IORT_TYPE_RMR:
>> +        DumpIortNodeRmr (
>> +          NodePtr,
>> +          *IortNodeLength,
>> +          *IortIdMappingCount,
>> +          *IortIdMappingOffset
>> +          );
>> +        break;
>>         default:
>>           IncrementErrorCount ();
>>           Print (L"ERROR: Unsupported IORT Node type = %d\n", 
>> *IortNodeType);


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#91316): https://edk2.groups.io/g/devel/message/91316
Mute This Topic: https://groups.io/mt/92334076/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-




More information about the edk2-devel-archive mailing list