Date   

Re: [PATCH] BaseTools:change some incorrect parameter defaults

Bob Feng
 

Reviewed-by: Bob Feng <bob.c.feng@...>

-----Original Message-----
From: Fan, ZhijuX
Sent: Thursday, September 12, 2019 4:18 PM
To: devel@edk2.groups.io
Cc: Gao, Liming <liming.gao@...>; Feng, Bob C <bob.c.feng@...>
Subject: [PATCH] BaseTools:change some incorrect parameter defaults

BZ:https://bugzilla.tianocore.org/show_bug.cgi?id=1858

for Dict={},There are pitfalls in the way this default parameter is set and Dict is not used in functions, other functions have these two cases, I will change some incorrect parameter defaults

This patch is going to fix this issue

Cc: Liming Gao <liming.gao@...>
Cc: Bob Feng <bob.c.feng@...>
Signed-off-by: Zhiju.Fan <zhijux.fan@...>
---
BaseTools/Source/Python/AutoGen/BuildEngine.py | 4 +++-
BaseTools/Source/Python/AutoGen/GenMake.py | 6 ++++--
BaseTools/Source/Python/Common/RangeExpression.py | 4 +++-
BaseTools/Source/Python/Common/StringUtils.py | 10 +++++++---
BaseTools/Source/Python/GenFds/AprioriSection.py | 4 +++-
BaseTools/Source/Python/GenFds/CompressSection.py | 4 +++-
BaseTools/Source/Python/GenFds/DataSection.py | 4 +++-
BaseTools/Source/Python/GenFds/EfiSection.py | 4 +++-
BaseTools/Source/Python/GenFds/FfsFileStatement.py | 5 ++++-
BaseTools/Source/Python/GenFds/FfsInfStatement.py | 5 +++--
BaseTools/Source/Python/GenFds/Fv.py | 4 +++-
BaseTools/Source/Python/GenFds/FvImageSection.py | 4 +++-
BaseTools/Source/Python/GenFds/GenFdsGlobalVariable.py | 2 +-
BaseTools/Source/Python/GenFds/GuidSection.py | 4 +++-
BaseTools/Source/Python/GenFds/OptRomFileStatement.py | 5 ++++-
BaseTools/Source/Python/GenFds/Region.py | 4 +++-
BaseTools/Source/Python/GenFds/Section.py | 2 +-
BaseTools/Source/Python/GenFds/UiSection.py | 4 +++-
BaseTools/Source/Python/GenFds/VerSection.py | 4 +++-
19 files changed, 60 insertions(+), 23 deletions(-)

diff --git a/BaseTools/Source/Python/AutoGen/BuildEngine.py b/BaseTools/Source/Python/AutoGen/BuildEngine.py
index bb91534477..069a3a1c9d 100644
--- a/BaseTools/Source/Python/AutoGen/BuildEngine.py
+++ b/BaseTools/Source/Python/AutoGen/BuildEngine.py
@@ -176,7 +176,9 @@ class FileBuildRule:
CommandString = "\n\t".join(self.CommandList)
return "%s : %s\n\t%s" % (DestString, SourceString, CommandString)

- def Instantiate(self, Macros={}):
+ def Instantiate(self, Macros = None):
+ if Macros is None:
+ Macros = {}
NewRuleObject = copy.copy(self)
NewRuleObject.BuildTargets = {}
NewRuleObject.DestFileList = [] diff --git a/BaseTools/Source/Python/AutoGen/GenMake.py b/BaseTools/Source/Python/AutoGen/GenMake.py
index 4f85a93055..3185ebe368 100755
--- a/BaseTools/Source/Python/AutoGen/GenMake.py
+++ b/BaseTools/Source/Python/AutoGen/GenMake.py
@@ -205,10 +205,12 @@ class BuildFile(object):
def GetRemoveDirectoryCommand(self, DirList):
return [self._RD_TEMPLATE_[self._FileType] % {'dir':Dir} for Dir in DirList]

- def PlaceMacro(self, Path, MacroDefinitions={}):
+ def PlaceMacro(self, Path, MacroDefinitions=None):
if Path.startswith("$("):
return Path
else:
+ if MacroDefinitions is None:
+ MacroDefinitions = {}
PathLength = len(Path)
for MacroName in MacroDefinitions:
MacroValue = MacroDefinitions[MacroName] @@ -1762,4 +1764,4 @@ def GetDependencyList(AutoGenObject, FileCache, File, ForceList, SearchPathList)

# This acts like the main() function for the script, unless it is 'import'ed into another script.
if __name__ == '__main__':
- pass
\ No newline at end of file
+ pass
diff --git a/BaseTools/Source/Python/Common/RangeExpression.py b/BaseTools/Source/Python/Common/RangeExpression.py
index e9296e03f6..039d281467 100644
--- a/BaseTools/Source/Python/Common/RangeExpression.py
+++ b/BaseTools/Source/Python/Common/RangeExpression.py
@@ -342,7 +342,9 @@ class RangeExpression(BaseExpression):
raise BadExpression(ERR_STRING_EXPR % Operator)


- def __init__(self, Expression, PcdDataType, SymbolTable = {}):
+ def __init__(self, Expression, PcdDataType, SymbolTable = None):
+ if SymbolTable is None:
+ SymbolTable = {}
super(RangeExpression, self).__init__(self, Expression, PcdDataType, SymbolTable)
self._NoProcess = False
if not isinstance(Expression, type('')):
diff --git a/BaseTools/Source/Python/Common/StringUtils.py b/BaseTools/Source/Python/Common/StringUtils.py
index 0febbc0034..73dafa797a 100644
--- a/BaseTools/Source/Python/Common/StringUtils.py
+++ b/BaseTools/Source/Python/Common/StringUtils.py
@@ -243,8 +243,10 @@ def SplitModuleType(Key):
#
# @retval NewList A new string list whose macros are replaced
#
-def ReplaceMacros(StringList, MacroDefinitions={}, SelfReplacement=False):
+def ReplaceMacros(StringList, MacroDefinitions=None, SelfReplacement=False):
NewList = []
+ if MacroDefinitions is None:
+ MacroDefinitions = {}
for String in StringList:
if isinstance(String, type('')):
NewList.append(ReplaceMacro(String, MacroDefinitions, SelfReplacement)) @@ -264,8 +266,10 @@ def ReplaceMacros(StringList, MacroDefinitions={}, SelfReplacement=False):
#
# @retval string The string whose macros are replaced
#
-def ReplaceMacro(String, MacroDefinitions={}, SelfReplacement=False, RaiseError=False):
+def ReplaceMacro(String, MacroDefinitions=None, SelfReplacement=False, RaiseError=False):
LastString = String
+ if MacroDefinitions is None:
+ MacroDefinitions = {}
while String and MacroDefinitions:
MacroUsed = GlobalData.gMacroRefPattern.findall(String)
# no macro found in String, stop replacing @@ -298,7 +302,7 @@ def ReplaceMacro(String, MacroDefinitions={}, SelfReplacement=False, RaiseError= # # @retval Path Formatted path # -def NormPath(Path, Defines={}):
+def NormPath(Path, Defines=None):
IsRelativePath = False
if Path:
if Path[0] == '.':
diff --git a/BaseTools/Source/Python/GenFds/AprioriSection.py b/BaseTools/Source/Python/GenFds/AprioriSection.py
index be2d9f6de5..9f64c613eb 100644
--- a/BaseTools/Source/Python/GenFds/AprioriSection.py
+++ b/BaseTools/Source/Python/GenFds/AprioriSection.py
@@ -46,7 +46,9 @@ class AprioriSection (object):
# @param Dict dictionary contains macro and its value
# @retval string Generated file name
#
- def GenFfs (self, FvName, Dict = {}, IsMakefile = False):
+ def GenFfs (self, FvName, Dict = None, IsMakefile = False):
+ if Dict is None:
+ Dict = {}
Buffer = BytesIO()
if self.AprioriType == "PEI":
AprioriFileGuid = PEI_APRIORI_GUID diff --git a/BaseTools/Source/Python/GenFds/CompressSection.py b/BaseTools/Source/Python/GenFds/CompressSection.py
index 4dae5dba35..e62280fc16 100644
--- a/BaseTools/Source/Python/GenFds/CompressSection.py
+++ b/BaseTools/Source/Python/GenFds/CompressSection.py
@@ -49,7 +49,7 @@ class CompressSection (CompressSectionClassObject) :
# @param Dict dictionary contains macro and its value
# @retval tuple (Generated file name, section alignment)
#
- def GenSection(self, OutputPath, ModuleName, SecNum, KeyStringList, FfsInf = None, Dict = {}, IsMakefile = False):
+ def GenSection(self, OutputPath, ModuleName, SecNum, KeyStringList, FfsInf = None, Dict = None, IsMakefile = False):

if FfsInf is not None:
self.CompType = FfsInf.__ExtendMacro__(self.CompType)
@@ -59,6 +59,8 @@ class CompressSection (CompressSectionClassObject) :
SectAlign = []
Index = 0
MaxAlign = None
+ if Dict is None:
+ Dict = {}
for Sect in self.SectionList:
Index = Index + 1
SecIndex = '%s.%d' %(SecNum, Index) diff --git a/BaseTools/Source/Python/GenFds/DataSection.py b/BaseTools/Source/Python/GenFds/DataSection.py
index 60b94fbe08..f20fd70225 100644
--- a/BaseTools/Source/Python/GenFds/DataSection.py
+++ b/BaseTools/Source/Python/GenFds/DataSection.py
@@ -44,10 +44,12 @@ class DataSection (DataSectionClassObject):
# @param Dict dictionary contains macro and its value
# @retval tuple (Generated file name list, section alignment)
#
- def GenSection(self, OutputPath, ModuleName, SecNum, keyStringList, FfsFile = None, Dict = {}, IsMakefile = False):
+ def GenSection(self, OutputPath, ModuleName, SecNum, keyStringList, FfsFile = None, Dict = None, IsMakefile = False):
#
# Prepare the parameter of GenSection
#
+ if Dict is None:
+ Dict = {}
if FfsFile is not None:
self.SectFileName = GenFdsGlobalVariable.ReplaceWorkspaceMacro(self.SectFileName)
self.SectFileName = GenFdsGlobalVariable.MacroExtend(self.SectFileName, Dict, FfsFile.CurrentArch) diff --git a/BaseTools/Source/Python/GenFds/EfiSection.py b/BaseTools/Source/Python/GenFds/EfiSection.py
index 74f176cfef..db892df345 100644
--- a/BaseTools/Source/Python/GenFds/EfiSection.py
+++ b/BaseTools/Source/Python/GenFds/EfiSection.py
@@ -49,7 +49,7 @@ class EfiSection (EfiSectionClassObject):
# @param Dict dictionary contains macro and its value
# @retval tuple (Generated file name list, section alignment)
#
- def GenSection(self, OutputPath, ModuleName, SecNum, KeyStringList, FfsInf = None, Dict = {}, IsMakefile = False) :
+ def GenSection(self, OutputPath, ModuleName, SecNum, KeyStringList, FfsInf = None, Dict = None, IsMakefile = False) :

if self.FileName is not None and self.FileName.startswith('PCD('):
self.FileName = GenFdsGlobalVariable.GetPcdValue(self.FileName)
@@ -76,6 +76,8 @@ class EfiSection (EfiSectionClassObject):

"""If the file name was pointed out, add it in FileList"""
FileList = []
+ if Dict is None:
+ Dict = {}
if Filename is not None:
Filename = GenFdsGlobalVariable.MacroExtend(Filename, Dict)
# check if the path is absolute or relative diff --git a/BaseTools/Source/Python/GenFds/FfsFileStatement.py b/BaseTools/Source/Python/GenFds/FfsFileStatement.py
index 9250361d14..9fb62b0a91 100644
--- a/BaseTools/Source/Python/GenFds/FfsFileStatement.py
+++ b/BaseTools/Source/Python/GenFds/FfsFileStatement.py
@@ -48,7 +48,7 @@ class FileStatement (FileStatementClassObject):
# @param FvParentAddr Parent Fv base address
# @retval string Generated FFS file name
#
- def GenFfs(self, Dict = {}, FvChildAddr=[], FvParentAddr=None, IsMakefile=False, FvName=None):
+ def GenFfs(self, Dict = None, FvChildAddr=[], FvParentAddr=None, IsMakefile=False, FvName=None):

if self.NameGuid and self.NameGuid.startswith('PCD('):
PcdValue = GenFdsGlobalVariable.GetPcdValue(self.NameGuid)
@@ -70,6 +70,9 @@ class FileStatement (FileStatementClassObject):
if not os.path.exists(OutputDir):
os.makedirs(OutputDir)

+ if Dict is None:
+ Dict = {}
+
Dict.update(self.DefineVarDict)
SectionAlignments = None
if self.FvName:
diff --git a/BaseTools/Source/Python/GenFds/FfsInfStatement.py b/BaseTools/Source/Python/GenFds/FfsInfStatement.py
index 43dbd0102f..20573ca28d 100644
--- a/BaseTools/Source/Python/GenFds/FfsInfStatement.py
+++ b/BaseTools/Source/Python/GenFds/FfsInfStatement.py
@@ -437,11 +437,12 @@ class FfsInfStatement(FfsInfStatementClassObject):
# @param FvParentAddr Parent Fv base address
# @retval string Generated FFS file name
#
- def GenFfs(self, Dict = {}, FvChildAddr = [], FvParentAddr=None, IsMakefile=False, FvName=None):
+ def GenFfs(self, Dict = None, FvChildAddr = [], FvParentAddr=None, IsMakefile=False, FvName=None):
#
# Parse Inf file get Module related information
#
-
+ if Dict is None:
+ Dict = {}
self.__InfParse__(Dict, IsGenFfs=True)
Arch = self.GetCurrentArch()
SrcFile = mws.join( GenFdsGlobalVariable.WorkSpaceDir, self.InfFileName); diff --git a/BaseTools/Source/Python/GenFds/Fv.py b/BaseTools/Source/Python/GenFds/Fv.py
index 206bd02005..16c944a0bd 100644
--- a/BaseTools/Source/Python/GenFds/Fv.py
+++ b/BaseTools/Source/Python/GenFds/Fv.py
@@ -71,9 +71,11 @@ class FV (object):
# @param MacroDict macro value pair
# @retval string Generated FV file path
#
- def AddToBuffer (self, Buffer, BaseAddress=None, BlockSize= None, BlockNum=None, ErasePloarity='1', MacroDict = {}, Flag=False):
+ def AddToBuffer (self, Buffer, BaseAddress=None, BlockSize= None, BlockNum=None, ErasePloarity='1', MacroDict = None, Flag=False):
if BaseAddress is None and self.UiFvName.upper() + 'fv' in GenFdsGlobalVariable.ImageBinDict:
return GenFdsGlobalVariable.ImageBinDict[self.UiFvName.upper() + 'fv']
+ if MacroDict is None:
+ MacroDict = {}

#
# Check whether FV in Capsule is in FD flash region.
diff --git a/BaseTools/Source/Python/GenFds/FvImageSection.py b/BaseTools/Source/Python/GenFds/FvImageSection.py
index b2953d822b..ff2d5ca3c0 100644
--- a/BaseTools/Source/Python/GenFds/FvImageSection.py
+++ b/BaseTools/Source/Python/GenFds/FvImageSection.py
@@ -47,9 +47,11 @@ class FvImageSection(FvImageSectionClassObject):
# @param Dict dictionary contains macro and its value
# @retval tuple (Generated file name, section alignment)
#
- def GenSection(self, OutputPath, ModuleName, SecNum, KeyStringList, FfsInf = None, Dict = {}, IsMakefile = False):
+ def GenSection(self, OutputPath, ModuleName, SecNum, KeyStringList, FfsInf = None, Dict = None, IsMakefile = False):

OutputFileList = []
+ if Dict is None:
+ Dict = {}
if self.FvFileType is not None:
FileList, IsSect = Section.Section.GetFileList(FfsInf, self.FvFileType, self.FvFileExtension)
if IsSect :
diff --git a/BaseTools/Source/Python/GenFds/GenFdsGlobalVariable.py b/BaseTools/Source/Python/GenFds/GenFdsGlobalVariable.py
index 3dc73c8f61..4d8b2bdee2 100644
--- a/BaseTools/Source/Python/GenFds/GenFdsGlobalVariable.py
+++ b/BaseTools/Source/Python/GenFds/GenFdsGlobalVariable.py
@@ -742,7 +742,7 @@ class GenFdsGlobalVariable:
# @param MacroDict Dictionary that contains macro value pair
#
@staticmethod
- def MacroExtend (Str, MacroDict={}, Arch=DataType.TAB_COMMON):
+ def MacroExtend (Str, MacroDict=None, Arch=DataType.TAB_COMMON):
if Str is None:
return None

diff --git a/BaseTools/Source/Python/GenFds/GuidSection.py b/BaseTools/Source/Python/GenFds/GuidSection.py
index 530e2b3957..8db6e2feb3 100644
--- a/BaseTools/Source/Python/GenFds/GuidSection.py
+++ b/BaseTools/Source/Python/GenFds/GuidSection.py
@@ -50,7 +50,7 @@ class GuidSection(GuidSectionClassObject) :
# @param Dict dictionary contains macro and its value
# @retval tuple (Generated file name, section alignment)
#
- def GenSection(self, OutputPath, ModuleName, SecNum, KeyStringList, FfsInf=None, Dict={}, IsMakefile=False):
+ def GenSection(self, OutputPath, ModuleName, SecNum, KeyStringList, FfsInf=None, Dict=None, IsMakefile=False):
#
# Generate all section
#
@@ -66,6 +66,8 @@ class GuidSection(GuidSectionClassObject) :
SectAlign = []
Index = 0
MaxAlign = None
+ if Dict is None:
+ Dict = {}
if self.FvAddr != []:
FvAddrIsSet = True
else:
diff --git a/BaseTools/Source/Python/GenFds/OptRomFileStatement.py b/BaseTools/Source/Python/GenFds/OptRomFileStatement.py
index 0c54f48da2..1bd4d4572a 100644
--- a/BaseTools/Source/Python/GenFds/OptRomFileStatement.py
+++ b/BaseTools/Source/Python/GenFds/OptRomFileStatement.py
@@ -34,7 +34,10 @@ class OptRomFileStatement:
# @param Dict dictionary contains macro and value pair
# @retval string Generated FFS file name
#
- def GenFfs(self, Dict = {}, IsMakefile=False):
+ def GenFfs(self, Dict = None, IsMakefile=False):
+
+ if Dict is None:
+ Dict = {}

if self.FileName is not None:
self.FileName = GenFdsGlobalVariable.ReplaceWorkspaceMacro(self.FileName)
diff --git a/BaseTools/Source/Python/GenFds/Region.py b/BaseTools/Source/Python/GenFds/Region.py
index 7d5a3ab173..e95cfcf965 100644
--- a/BaseTools/Source/Python/GenFds/Region.py
+++ b/BaseTools/Source/Python/GenFds/Region.py
@@ -73,8 +73,10 @@ class Region(object):
# @retval string Generated FV file path
#

- def AddToBuffer(self, Buffer, BaseAddress, BlockSizeList, ErasePolarity, ImageBinDict, MacroDict={}, Flag=False):
+ def AddToBuffer(self, Buffer, BaseAddress, BlockSizeList, ErasePolarity, ImageBinDict, MacroDict=None, Flag=False):
Size = self.Size
+ if MacroDict is None:
+ MacroDict = {}
if not Flag:
GenFdsGlobalVariable.InfLogger('\nGenerate Region at Offset 0x%X' % self.Offset)
GenFdsGlobalVariable.InfLogger(" Region Size = 0x%X" % Size)
diff --git a/BaseTools/Source/Python/GenFds/Section.py b/BaseTools/Source/Python/GenFds/Section.py
index b238956634..2acb70f412 100644
--- a/BaseTools/Source/Python/GenFds/Section.py
+++ b/BaseTools/Source/Python/GenFds/Section.py
@@ -92,7 +92,7 @@ class Section (SectionClassObject):
# @param FfsInf FfsInfStatement object that contains this section data
# @param Dict dictionary contains macro and its value
#
- def GenSection(self, OutputPath, GuidName, SecNum, keyStringList, FfsInf = None, Dict = {}):
+ def GenSection(self, OutputPath, GuidName, SecNum, keyStringList, FfsInf = None, Dict = None):
pass

## GetFileList() method
diff --git a/BaseTools/Source/Python/GenFds/UiSection.py b/BaseTools/Source/Python/GenFds/UiSection.py
index c9fc5997a1..f643058bd6 100644
--- a/BaseTools/Source/Python/GenFds/UiSection.py
+++ b/BaseTools/Source/Python/GenFds/UiSection.py
@@ -44,7 +44,7 @@ class UiSection (UiSectionClassObject):
# @param Dict dictionary contains macro and its value
# @retval tuple (Generated file name, section alignment)
#
- def GenSection(self, OutputPath, ModuleName, SecNum, KeyStringList, FfsInf=None, Dict={}, IsMakefile = False):
+ def GenSection(self, OutputPath, ModuleName, SecNum, KeyStringList, FfsInf=None, Dict=None, IsMakefile = False):
#
# Prepare the parameter of GenSection
#
@@ -58,6 +58,8 @@ class UiSection (UiSectionClassObject):
if self.StringData is not None :
NameString = self.StringData
elif self.FileName is not None:
+ if Dict is None:
+ Dict = {}
FileNameStr = GenFdsGlobalVariable.ReplaceWorkspaceMacro(self.FileName)
FileNameStr = GenFdsGlobalVariable.MacroExtend(FileNameStr, Dict)
FileObj = open(FileNameStr, 'r') diff --git a/BaseTools/Source/Python/GenFds/VerSection.py b/BaseTools/Source/Python/GenFds/VerSection.py
index 1e7b391412..7280e80cb4 100644
--- a/BaseTools/Source/Python/GenFds/VerSection.py
+++ b/BaseTools/Source/Python/GenFds/VerSection.py
@@ -42,7 +42,7 @@ class VerSection (VerSectionClassObject):
# @param Dict dictionary contains macro and its value
# @retval tuple (Generated file name, section alignment)
#
- def GenSection(self, OutputPath, ModuleName, SecNum, KeyStringList, FfsInf=None, Dict={}, IsMakefile = False):
+ def GenSection(self, OutputPath, ModuleName, SecNum, KeyStringList, FfsInf=None, Dict=None, IsMakefile = False):
#
# Prepare the parameter of GenSection
#
@@ -61,6 +61,8 @@ class VerSection (VerSectionClassObject):
if self.StringData:
StringData = self.StringData
elif self.FileName:
+ if Dict is None:
+ Dict = {}
FileNameStr = GenFdsGlobalVariable.ReplaceWorkspaceMacro(self.FileName)
FileNameStr = GenFdsGlobalVariable.MacroExtend(FileNameStr, Dict)
FileObj = open(FileNameStr, 'r')
--
2.14.1.windows.1


Re: [PATCH] BaseTools:Replace PlatformInfo with PlatformAutoGen for Moudle

Bob Feng
 

Reviewed-by: Bob Feng <bob.c.feng@...>

-----Original Message-----
From: Fan, ZhijuX
Sent: Thursday, September 12, 2019 4:19 PM
To: devel@edk2.groups.io
Cc: Gao, Liming <liming.gao@...>; Feng, Bob C <bob.c.feng@...>
Subject: [PATCH] BaseTools:Replace PlatformInfo with PlatformAutoGen for Moudle

BZ:https://bugzilla.tianocore.org/show_bug.cgi?id=2188

build -p MdeModulePkg\MdeModulePkg.dsc -a IA32 -m MdeModulePkg\Universal\PCD\Pei\Pcd.inf

Error:
AttributeError: 'PlatformInfo' object has no attribute 'DynamicPcdList'

The DSC data object used to build a separate module today is PlatformInfo rather than PlatformAutoGen 'PlatformAutoGen' object has attribute 'DynamicPcdList'

This patch is going to fixed this issue

Cc: Liming Gao <liming.gao@...>
Cc: Bob Feng <bob.c.feng@...>
Signed-off-by: Zhiju.Fan <zhijux.fan@...>
---
BaseTools/Source/Python/build/build.py | 3 +++
1 file changed, 3 insertions(+)

diff --git a/BaseTools/Source/Python/build/build.py b/BaseTools/Source/Python/build/build.py
index e81d3d6486..e845c139c9 100755
--- a/BaseTools/Source/Python/build/build.py
+++ b/BaseTools/Source/Python/build/build.py
@@ -1860,6 +1860,9 @@ class Build():
Ma = ModuleAutoGen(Wa, Module, BuildTarget, ToolChain, Arch, self.PlatformFile,Pa.DataPipe)
if Ma is None:
continue
+ if Ma.PcdIsDriver:
+ Ma.PlatformInfo = Pa
+ Ma.Workspace = Wa
MaList.append(Ma)

if GlobalData.gBinCacheSource and self.Target in [None, "", "all"]:
--
2.14.1.windows.1


[PATCH v2] MinPlatformPkg/TestPointCheckLib: Add return value when OutTable is NULL

Zhang, Shenglei
 

Currently there is no check for the parameter OutTable.
So add the logic that return value EFI_INVALID_PARAMETER when the
OutTable is NULL.

Cc: Michael Kubacki <michael.a.kubacki@...>
Cc: Chasel Chiu <chasel.chiu@...>
Cc: Nate DeSimone <@natedesimone>
Cc: Liming Gao <liming.gao@...>
Signed-off-by: Shenglei Zhang <shenglei.zhang@...>
---

v2:Update the copyright and the if...else statement coding style.

.../Test/Library/TestPointCheckLib/DxeCheckAcpi.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/Platform/Intel/MinPlatformPkg/Test/Library/TestPointCheckLib/DxeCheckAcpi.c b/Platform/Intel/MinPlatformPkg/Test/Library/TestPointCheckLib/DxeCheckAcpi.c
index 263781a2..83736bf3 100644
--- a/Platform/Intel/MinPlatformPkg/Test/Library/TestPointCheckLib/DxeCheckAcpi.c
+++ b/Platform/Intel/MinPlatformPkg/Test/Library/TestPointCheckLib/DxeCheckAcpi.c
@@ -1,6 +1,6 @@
/** @file

-Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2017 - 2019, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent

**/
@@ -610,6 +610,8 @@ DumpAcpiRsdt (

if (OutTable != NULL) {
*OutTable = NULL;
+ } else{
+ return EFI_INVALID_PARAMETER;
}

ReturnStatus = EFI_SUCCESS;
@@ -663,6 +665,8 @@ DumpAcpiXsdt (

if (OutTable != NULL) {
*OutTable = NULL;
+ } else{
+ return EFI_INVALID_PARAMETER;
}

ReturnStatus = EFI_SUCCESS;
--
2.18.0.windows.1


Re: [PATCH 1/3] MdeModulePkg: Entend the support keyboard type of Terminal console

Gao, Zhichao
 

-----Original Message-----
From: Wu, Hao A
Sent: Thursday, September 12, 2019 10:43 AM
To: Gao, Zhichao <zhichao.gao@...>; devel@edk2.groups.io
Cc: Wang, Jian J <jian.j.wang@...>; Ni, Ray <ray.ni@...>
Subject: RE: [PATCH 1/3] MdeModulePkg: Entend the support keyboard type
of Terminal console

-----Original Message-----
From: Gao, Zhichao
Sent: Thursday, September 12, 2019 9:02 AM
To: devel@edk2.groups.io
Cc: Wang, Jian J; Wu, Hao A; Ni, Ray
Subject: [PATCH 1/3] MdeModulePkg: Entend the support keyboard type
of
Terminal console

Hello,

Entend -> Extend
I would update it later.




REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2186

A common terminal console software Putty support various types of
keyboard type, such as normal mode, Linux mode, Xterm R6, Vt400,
VT100+ and SCO. Refer to the link:
https://www.ssh.com/ssh/putty/putty-
manuals/0.68/Chapter4.html#config-
funkeys

Cc: Jian J Wang <jian.j.wang@...>
Cc: Hao A Wu <hao.a.wu@...>
Cc: Ray Ni <ray.ni@...>
Signed-off-by: Zhichao Gao <zhichao.gao@...>
---
.../Include/Guid/TerminalConExtendedType.h | 25
+++++++++++++++++++
MdeModulePkg/MdeModulePkg.dec | 6 +++++
2 files changed, 31 insertions(+)
create mode 100644
MdeModulePkg/Include/Guid/TerminalConExtendedType.h

diff --git a/MdeModulePkg/Include/Guid/TerminalConExtendedType.h
b/MdeModulePkg/Include/Guid/TerminalConExtendedType.h
new file mode 100644
index 0000000000..18667413e8
--- /dev/null
+++ b/MdeModulePkg/Include/Guid/TerminalConExtendedType.h
@@ -0,0 +1,25 @@
+/** @file
+ GUID definition for Linux, XtermR6, Vt400 and SCO terminal type.
+
+
+ Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#ifndef __TERMINAL_CON_EXTENDED_TYPE_H__ #define
+__TERMINAL_CON_EXTENDED_TYPE_H__
+
+#define EDKII_LINUX_MODE_GUID \
+ { 0xe4364a7f, 0xf825, 0x430e, { 0x9d, 0x3a, 0x9c, 0x9b, 0xe6,
+0x81, 0x7c,
0xa5 } }
+
+#define EDKII_XTERM_R6_GUID \
+ { 0xfbfca56b, 0xbb36, 0x4b78, { 0xaa, 0xab, 0xbe, 0x1b, 0x97,
+0xec, 0x7c,
0xcb } }
+
+#define EDKII_VT400_GUID \
+ { 0x8e46dddd, 0x3d49, 0x4a9d, { 0xb8, 0x75, 0x3c, 0x08, 0x6f,
+0x6a, 0xa2,
0xbd } }
+
+#define EDKII_SCO_GUID \
+ { 0xfc7dd6e0, 0x813c, 0x434d, { 0xb4, 0xda, 0x3b, 0xd6, 0x49,
+0xe9, 0xe1,
0x5a } }
+

I would suggest to add corresponding GUID declarations just as what has
been done in:

MdePkg/Include/Guid/PcAnsi.h
MdeModulePkg/Include/Guid/TtyTerm.h


+#endif
diff --git a/MdeModulePkg/MdeModulePkg.dec
b/MdeModulePkg/MdeModulePkg.dec index 17beb45235..7528d52fcb
100644
--- a/MdeModulePkg/MdeModulePkg.dec
+++ b/MdeModulePkg/MdeModulePkg.dec
@@ -343,6 +343,12 @@
## Include/Guid/TtyTerm.h
gEfiTtyTermGuid = { 0x7d916d80, 0x5bb1, 0x458c, {0xa4, 0x8f, 0xe2,
0x5f, 0xdd, 0x51, 0xef, 0x94 }}

+ ## Include/Guid/TerminalConExtendedType.h
+ gEdkiiLinuxModeGuid = { 0xe4364a7f, 0xf825, 0x430e, { 0x9d, 0x3a,
0x9c, 0x9b, 0xe6, 0x81, 0x7c, 0xa5 } }
+ gEdkiiXtermR6Guid = { 0xfbfca56b, 0xbb36, 0x4b78, { 0xaa, 0xab,
0xbe, 0x1b, 0x97, 0xec, 0x7c, 0xcb } }
+ gEdkiiVT400Guid = { 0x8e46dddd, 0x3d49, 0x4a9d, { 0xb8, 0x75,
0x3c,
0x08, 0x6f, 0x6a, 0xa2, 0xbd } }
+ gEdkiiSCOGuid = { 0xfc7dd6e0, 0x813c, 0x434d, { 0xb4, 0xda, 0x3b,
0xd6, 0x49, 0xe9, 0xe1, 0x5a } }
+

After this patch, there will be 3 header files that describe different terminal
modes supported in TerminalDxe driver:

MdePkg/Include/Guid/PcAnsi.h (PcAnsi, VT100, VT100+, VTUTF8)
MdeModulePkg/Include/Guid/TtyTerm.h (TtyTerm)
MdeModulePkg/Include/Guid/TerminalConExtendedType.h (Linux, Xterm
R6, Vt400, SCO)

Do we have a plan to add those 5 non-UEFI modes in the UEFI spec?
No, we don't. But that can be taken into consideration.


If not, I am wondering is it possible to at least merge TtyTerm.h and
TerminalConExtendedType.h into one file so that we can avoid introducing
new header files every time new terminal modes are being added.
Great suggestion. For now, I would merge the TerminatlConExtendedType.h into TtyTerm.h. If the uefi spec would add the new types, then we can put all the types into one header file.

Thanks,
Zhichao


Best Regards,
Hao Wu


## Include/Guid/HiiBootMaintenanceFormset.h
gEfiIfrBootMaintenanceGuid = { 0xb2dedc91, 0xd59f, 0x48d2, { 0x89,
0x8a,
0x12, 0x49, 0xc, 0x74, 0xa4, 0xe0 }}

--
2.21.0.windows.1


[edk2-non-osi PATCHv2 1/1] Platform/RaspberryPi/RPi3: Use official Device Tree binaries

Pete Batard
 

With commit 5f003136c2bf86620c0caaef0ad146b5e7fd2f6b having been applied to
edk2-platforms, we can use the official Raspberry Pi 3 Device Trees from
https://github.com/raspberrypi/firmware/tree/master/boot, as the FdtDxe
driver for that platform can insert missing elements, if required.

This patch replaces the existing dtbs with the most recent official ones
and also removes the custom dts' from which previous dtbs were produced.

Signed-off-by: Pete Batard <@pbatard>
---
Platform/RaspberryPi/RPi3/DeviceTree/Readme.md | 14 +
Platform/RaspberryPi/RPi3/DeviceTree/bcm2710-rpi-3-b-plus.dtb | Bin 25617 -> 27082 bytes
Platform/RaspberryPi/RPi3/DeviceTree/bcm2710-rpi-3-b-plus.dts | 1263 --------------------
Platform/RaspberryPi/RPi3/DeviceTree/bcm2710-rpi-3-b.dtb | Bin 25354 -> 26463 bytes
Platform/RaspberryPi/RPi3/DeviceTree/bcm2710-rpi-3-b.dts | 1259 -------------------
5 files changed, 14 insertions(+), 2522 deletions(-)

diff --git a/Platform/RaspberryPi/RPi3/DeviceTree/Readme.md b/Platform/RaspberryPi/RPi3/DeviceTree/Readme.md
new file mode 100644
index 000000000000..708c2d1a630a
--- /dev/null
+++ b/Platform/RaspberryPi/RPi3/DeviceTree/Readme.md
@@ -0,0 +1,14 @@
+Device Tree for Raspberry Pi 3
+==============================
+
+This directory contains a copy of the official Device Trees for the
+Raspberry Pi 3 as published by the Raspberry Pi Foundation at
+https://github.com/raspberrypi/firmware/tree/master/boot.
+
+Especially, the dtbs found in this directory are an exact copy of
+the ones updated by the Raspberry Pi Foundation on 2019.06.24 with
+commit `64b5649a41b69d09bfe0ed05448d28a66be3edfd`.
+
+As per [the Foundation's Readme](https://github.com/raspberrypi/firmware/blob/64b5649a41b69d09bfe0ed05448d28a66be3edfd/README.md),
+because the dtbs are built from Linux kernel sources, the license
+that applies to them is the GPLv2.
diff --git a/Platform/RaspberryPi/RPi3/DeviceTree/bcm2710-rpi-3-b-plus.dtb b/Platform/RaspberryPi/RPi3/DeviceTree/bcm2710-rpi-3-b-plus.dtb
index d1b37bd1375de4fe4b5f26fe611e40a5a09d9327..bdc7e43f05cfe1f2d4001627672783f06ed9a155 100644
GIT binary patch
literal 27082
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
B18)ET

literal 25617
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
G;Qs)(;p;~L

diff --git a/Platform/RaspberryPi/RPi3/DeviceTree/bcm2710-rpi-3-b-plus.dts b/Platform/RaspberryPi/RPi3/DeviceTree/bcm2710-rpi-3-b-plus.dts
deleted file mode 100644
index e22c5d055f47..000000000000
--- a/Platform/RaspberryPi/RPi3/DeviceTree/bcm2710-rpi-3-b-plus.dts
+++ /dev/null
@@ -1,1263 +0,0 @@
-/dts-v1/;
-
-/*
- * Raspberry Pi 3 Model B+ DTS (Device Tree Source), for UEFI firmware.
- *
- * This source is the mostly identical to the decompiled version of the
- * official DTB (Device Tree Binary), as found at:
- * https://github.com/raspberrypi/firmware/tree/master/boot
- *
- * Only the following changes were applied:
- * - Two fixes for USB keyboard support under the usb@7e980000 section:
- * compatible = "brcm,bcm2708-usb"; -> compatible = "brcm,bcm2835-usb";
- * interrupts = <0x2 0x0 0x1 0x9>; -> interrupts = <0x1 0x9>;
- * - A 'psci' section was added, as it is provided by the ATF
- * - The 'enable-method' for CPUs was swicthed to "psci" instead of "spin-table"
- */
-
-/memreserve/ 0x0000000000000000 0x0000000000001000;
-/ {
- compatible = "raspberrypi,3-model-b-plus", "brcm,bcm2837";
- model = "Raspberry Pi 3 Model B+";
- interrupt-parent = <0x1>;
- #address-cells = <0x1>;
- #size-cells = <0x1>;
-
- aliases {
- serial0 = "/soc/serial@7e215040";
- serial1 = "/soc/serial@7e201000";
- audio = "/soc/audio";
- aux = "/soc/aux@0x7e215000";
- sound = "/soc/sound";
- soc = "/soc";
- dma = "/soc/dma@7e007000";
- intc = "/soc/interrupt-controller@7e00b200";
- watchdog = "/soc/watchdog@7e100000";
- random = "/soc/rng@7e104000";
- mailbox = "/soc/mailbox@7e00b880";
- gpio = "/soc/gpio@7e200000";
- uart0 = "/soc/serial@7e201000";
- sdhost = "/soc/mmc@7e202000";
- mmc0 = "/soc/mmc@7e202000";
- i2s = "/soc/i2s@7e203000";
- spi0 = "/soc/spi@7e204000";
- i2c0 = "/soc/i2c@7e205000";
- uart1 = "/soc/serial@7e215040";
- spi1 = "/soc/spi@7e215080";
- spi2 = "/soc/spi@7e2150c0";
- mmc = "/soc/mmc@7e300000";
- mmc1 = "/soc/mmc@7e300000";
- i2c1 = "/soc/i2c@7e804000";
- i2c2 = "/soc/i2c@7e805000";
- usb = "/soc/usb@7e980000";
- leds = "/leds";
- fb = "/soc/fb";
- vchiq = "/soc/vchiq";
- thermal = "/soc/thermal@7e212000";
- axiperf = "/soc/axiperf";
- ethernet0 = "/soc/usb@7e980000/usb1@1/usb1_1@1/usbether@1";
- };
-
- chosen {
- bootargs = "8250.nr_uarts=1";
- };
-
- thermal-zones {
-
- cpu-thermal {
- polling-delay-passive = <0x0>;
- polling-delay = <0x3e8>;
- thermal-sensors = <0x2>;
- coefficients = <0xfffffde6 0x64960>;
- phandle = <0x31>;
-
- cooling-maps {
- };
- };
- };
-
- soc {
- compatible = "simple-bus";
- #address-cells = <0x1>;
- #size-cells = <0x1>;
- ranges = <0x7e000000 0x3f000000 0x1000000 0x40000000 0x40000000 0x1000>;
- dma-ranges = <0xc0000000 0x0 0x3f000000>;
- phandle = <0x32>;
-
- dma@7e007000 {
- compatible = "brcm,bcm2835-dma";
- reg = <0x7e007000 0xf00>;
- interrupts = <0x1 0x10 0x1 0x11 0x1 0x12 0x1 0x13 0x1 0x14 0x1 0x15 0x1 0x16 0x1 0x17 0x1 0x18 0x1 0x19 0x1 0x1a 0x1 0x1b 0x1 0x1b 0x1 0x1b 0x1 0x1b 0x1 0x1c>;
- interrupt-names = "dma0", "dma1", "dma2", "dma3", "dma4", "dma5", "dma6", "dma7", "dma8", "dma9", "dma10", "dma11", "dma12", "dma13", "dma14", "dma-shared-all";
- #dma-cells = <0x1>;
- brcm,dma-channel-mask = <0x7f34>;
- phandle = <0xb>;
- };
-
- interrupt-controller@7e00b200 {
- compatible = "brcm,bcm2836-armctrl-ic";
- reg = <0x7e00b200 0x200>;
- interrupt-controller;
- #interrupt-cells = <0x2>;
- interrupt-parent = <0x3>;
- interrupts = <0x8>;
- phandle = <0x1>;
- };
-
- watchdog@7e100000 {
- compatible = "brcm,bcm2835-pm-wdt";
- reg = <0x7e100000 0x28>;
- phandle = <0x24>;
- };
-
- cprman@7e101000 {
- compatible = "brcm,bcm2835-cprman";
- #clock-cells = <0x1>;
- reg = <0x7e101000 0x2000>;
- clocks = <0x4 0x5 0x0 0x5 0x1 0x5 0x2 0x6 0x0 0x6 0x1 0x6 0x2>;
- firmware = <0x7>;
- phandle = <0x8>;
- };
-
- rng@7e104000 {
- compatible = "brcm,bcm2835-rng";
- reg = <0x7e104000 0x10>;
- interrupts = <0x2 0x1d>;
- phandle = <0x25>;
- };
-
- mailbox@7e00b880 {
- compatible = "brcm,bcm2835-mbox";
- reg = <0x7e00b880 0x40>;
- interrupts = <0x0 0x1>;
- #mbox-cells = <0x0>;
- phandle = <0x1a>;
- };
-
- gpio@7e200000 {
- compatible = "brcm,bcm2835-gpio";
- reg = <0x7e200000 0xb4>;
- interrupts = <0x2 0x11 0x2 0x12>;
- gpio-controller;
- #gpio-cells = <0x2>;
- interrupt-controller;
- #interrupt-cells = <0x2>;
- phandle = <0x10>;
-
- dpi_gpio0 {
- brcm,pins = <0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10 0x11 0x12 0x13 0x14 0x15 0x16 0x17 0x18 0x19 0x1a 0x1b>;
- brcm,function = <0x6>;
- phandle = <0x33>;
- };
-
- emmc_gpio22 {
- brcm,pins = <0x16 0x17 0x18 0x19 0x1a 0x1b>;
- brcm,function = <0x7>;
- phandle = <0x34>;
- };
-
- emmc_gpio34 {
- brcm,pins = <0x22 0x23 0x24 0x25 0x26 0x27>;
- brcm,function = <0x7>;
- brcm,pull = <0x0 0x2 0x2 0x2 0x2 0x2>;
- phandle = <0x35>;
- };
-
- emmc_gpio48 {
- brcm,pins = <0x30 0x31 0x32 0x33 0x34 0x35>;
- brcm,function = <0x7>;
- phandle = <0x36>;
- };
-
- gpclk0_gpio4 {
- brcm,pins = <0x4>;
- brcm,function = <0x4>;
- phandle = <0x37>;
- };
-
- gpclk1_gpio5 {
- brcm,pins = <0x5>;
- brcm,function = <0x4>;
- phandle = <0x38>;
- };
-
- gpclk1_gpio42 {
- brcm,pins = <0x2a>;
- brcm,function = <0x4>;
- phandle = <0x39>;
- };
-
- gpclk1_gpio44 {
- brcm,pins = <0x2c>;
- brcm,function = <0x4>;
- phandle = <0x3a>;
- };
-
- gpclk2_gpio6 {
- brcm,pins = <0x6>;
- brcm,function = <0x4>;
- phandle = <0x3b>;
- };
-
- gpclk2_gpio43 {
- brcm,pins = <0x2b>;
- brcm,function = <0x4>;
- phandle = <0x3c>;
- };
-
- i2c0_gpio0 {
- brcm,pins = <0x0 0x1>;
- brcm,function = <0x4>;
- phandle = <0x3d>;
- };
-
- i2c0_gpio28 {
- brcm,pins = <0x1c 0x1d>;
- brcm,function = <0x4>;
- phandle = <0x3e>;
- };
-
- i2c0_gpio44 {
- brcm,pins = <0x2c 0x2d>;
- brcm,function = <0x5>;
- phandle = <0x3f>;
- };
-
- i2c1_gpio2 {
- brcm,pins = <0x2 0x3>;
- brcm,function = <0x4>;
- phandle = <0x40>;
- };
-
- i2c1_gpio44 {
- brcm,pins = <0x2c 0x2d>;
- brcm,function = <0x6>;
- phandle = <0x41>;
- };
-
- i2c_slave_gpio18 {
- brcm,pins = <0x12 0x13 0x14 0x15>;
- brcm,function = <0x7>;
- phandle = <0x42>;
- };
-
- jtag_gpio4 {
- brcm,pins = <0x4 0x5 0x6 0xc 0xd>;
- brcm,function = <0x2>;
- phandle = <0x43>;
- };
-
- jtag_gpio22 {
- brcm,pins = <0x16 0x17 0x18 0x19 0x1a 0x1b>;
- brcm,function = <0x3>;
- phandle = <0x44>;
- };
-
- pcm_gpio18 {
- brcm,pins = <0x12 0x13 0x14 0x15>;
- brcm,function = <0x4>;
- phandle = <0x45>;
- };
-
- pcm_gpio28 {
- brcm,pins = <0x1c 0x1d 0x1e 0x1f>;
- brcm,function = <0x6>;
- phandle = <0x46>;
- };
-
- pwm0_gpio12 {
- brcm,pins = <0xc>;
- brcm,function = <0x4>;
- phandle = <0x47>;
- };
-
- pwm0_gpio18 {
- brcm,pins = <0x12>;
- brcm,function = <0x2>;
- phandle = <0x48>;
- };
-
- pwm0_gpio40 {
- brcm,pins = <0x28>;
- brcm,function = <0x4>;
- phandle = <0x49>;
- };
-
- pwm1_gpio13 {
- brcm,pins = <0xd>;
- brcm,function = <0x4>;
- phandle = <0x4a>;
- };
-
- pwm1_gpio19 {
- brcm,pins = <0x13>;
- brcm,function = <0x2>;
- phandle = <0x4b>;
- };
-
- pwm1_gpio41 {
- brcm,pins = <0x29>;
- brcm,function = <0x4>;
- phandle = <0x4c>;
- };
-
- pwm1_gpio45 {
- brcm,pins = <0x2d>;
- brcm,function = <0x4>;
- phandle = <0x4d>;
- };
-
- sdhost_gpio48 {
- brcm,pins = <0x30 0x31 0x32 0x33 0x34 0x35>;
- brcm,function = <0x4>;
- phandle = <0xc>;
- };
-
- spi0_gpio7 {
- brcm,pins = <0x7 0x8 0x9 0xa 0xb>;
- brcm,function = <0x4>;
- phandle = <0x4e>;
- };
-
- spi0_gpio35 {
- brcm,pins = <0x23 0x24 0x25 0x26 0x27>;
- brcm,function = <0x4>;
- phandle = <0x4f>;
- };
-
- spi1_gpio16 {
- brcm,pins = <0x10 0x11 0x12 0x13 0x14 0x15>;
- brcm,function = <0x3>;
- phandle = <0x50>;
- };
-
- spi2_gpio40 {
- brcm,pins = <0x28 0x29 0x2a 0x2b 0x2c 0x2d>;
- brcm,function = <0x3>;
- phandle = <0x51>;
- };
-
- uart0_gpio14 {
- brcm,pins = <0xe 0xf>;
- brcm,function = <0x4>;
- phandle = <0x52>;
- };
-
- uart0_ctsrts_gpio16 {
- brcm,pins = <0x10 0x11>;
- brcm,function = <0x7>;
- phandle = <0x53>;
- };
-
- uart0_ctsrts_gpio30 {
- brcm,pins = <0x1e 0x1f>;
- brcm,function = <0x7>;
- phandle = <0x54>;
- };
-
- uart0_gpio32 {
- brcm,pins = <0x20 0x21>;
- brcm,function = <0x7>;
- phandle = <0x55>;
- };
-
- uart0_gpio36 {
- brcm,pins = <0x24 0x25>;
- brcm,function = <0x6>;
- phandle = <0x56>;
- };
-
- uart0_ctsrts_gpio38 {
- brcm,pins = <0x26 0x27>;
- brcm,function = <0x6>;
- phandle = <0x57>;
- };
-
- uart1_gpio14 {
- brcm,pins = <0xe 0xf>;
- brcm,function = <0x2>;
- phandle = <0x58>;
- };
-
- uart1_ctsrts_gpio16 {
- brcm,pins = <0x10 0x11>;
- brcm,function = <0x2>;
- phandle = <0x59>;
- };
-
- uart1_gpio32 {
- brcm,pins = <0x20 0x21>;
- brcm,function = <0x2>;
- phandle = <0x5a>;
- };
-
- uart1_ctsrts_gpio30 {
- brcm,pins = <0x1e 0x1f>;
- brcm,function = <0x2>;
- phandle = <0x5b>;
- };
-
- uart1_gpio40 {
- brcm,pins = <0x28 0x29>;
- brcm,function = <0x2>;
- phandle = <0x5c>;
- };
-
- uart1_ctsrts_gpio42 {
- brcm,pins = <0x2a 0x2b>;
- brcm,function = <0x2>;
- phandle = <0x5d>;
- };
-
- dpi_18bit_gpio0 {
- brcm,pins = <0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10 0x11 0x12 0x13 0x14 0x15>;
- brcm,function = <0x6>;
- phandle = <0x5e>;
- };
-
- spi0_pins {
- brcm,pins = <0x9 0xa 0xb>;
- brcm,function = <0x4>;
- phandle = <0xe>;
- };
-
- spi0_cs_pins {
- brcm,pins = <0x8 0x7>;
- brcm,function = <0x1>;
- phandle = <0xf>;
- };
-
- i2c0 {
- brcm,pins = <0x0 0x1>;
- brcm,function = <0x4>;
- phandle = <0x11>;
- };
-
- i2c1 {
- brcm,pins = <0x2 0x3>;
- brcm,function = <0x4>;
- phandle = <0x15>;
- };
-
- i2s {
- brcm,pins = <0x12 0x13 0x14 0x15>;
- brcm,function = <0x4>;
- phandle = <0xd>;
- };
-
- sdio_pins {
- brcm,pins = <0x22 0x23 0x24 0x25 0x26 0x27>;
- brcm,function = <0x7>;
- brcm,pull = <0x0 0x2 0x2 0x2 0x2 0x2>;
- phandle = <0x19>;
- };
-
- bt_pins {
- brcm,pins = <0x2b>;
- brcm,function = <0x4>;
- brcm,pull = <0x0>;
- phandle = <0xa>;
- };
-
- uart0_pins {
- brcm,pins = <0x20 0x21>;
- brcm,function = <0x7>;
- brcm,pull = <0x0 0x2>;
- phandle = <0x9>;
- };
-
- uart1_pins {
- brcm,pins;
- brcm,function;
- brcm,pull;
- phandle = <0x13>;
- };
-
- audio_pins {
- brcm,pins = <0x28 0x29>;
- brcm,function = <0x4>;
- phandle = <0x1b>;
- };
- };
-
- serial@7e201000 {
- compatible = "brcm,bcm2835-pl011", "arm,pl011", "arm,primecell";
- reg = <0x7e201000 0x1000>;
- interrupts = <0x2 0x19>;
- clocks = <0x8 0x13 0x8 0x14>;
- clock-names = "uartclk", "apb_pclk";
- arm,primecell-periphid = <0x241011>;
- cts-event-workaround;
- pinctrl-names = "default";
- pinctrl-0 = <0x9 0xa>;
- status = "okay";
- phandle = <0x1d>;
- };
-
- mmc@7e202000 {
- compatible = "brcm,bcm2835-sdhost";
- reg = <0x7e202000 0x100>;
- interrupts = <0x2 0x18>;
- clocks = <0x8 0x14>;
- dmas = <0xb 0xd>;
- dma-names = "rx-tx";
- status = "okay";
- pinctrl-names = "default";
- pinctrl-0 = <0xc>;
- bus-width = <0x4>;
- brcm,overclock-50 = <0x0>;
- brcm,pio-limit = <0x1>;
- phandle = <0x26>;
- };
-
- i2s@7e203000 {
- compatible = "brcm,bcm2835-i2s";
- reg = <0x7e203000 0x24>;
- clocks = <0x8 0x1f>;
- dmas = <0xb 0x2 0xb 0x3>;
- dma-names = "tx", "rx";
- status = "disabled";
- #sound-dai-cells = <0x0>;
- pinctrl-names = "default";
- pinctrl-0 = <0xd>;
- phandle = <0x1f>;
- };
-
- spi@7e204000 {
- compatible = "brcm,bcm2835-spi";
- reg = <0x7e204000 0x1000>;
- interrupts = <0x2 0x16>;
- clocks = <0x8 0x14>;
- #address-cells = <0x1>;
- #size-cells = <0x0>;
- status = "disabled";
- dmas = <0xb 0x6 0xb 0x7>;
- dma-names = "tx", "rx";
- pinctrl-names = "default";
- pinctrl-0 = <0xe 0xf>;
- cs-gpios = <0x10 0x8 0x1 0x10 0x7 0x1>;
- phandle = <0x20>;
-
- spidev@0 {
- compatible = "spidev";
- reg = <0x0>;
- #address-cells = <0x1>;
- #size-cells = <0x0>;
- spi-max-frequency = <0x7735940>;
- phandle = <0x5f>;
- };
-
- spidev@1 {
- compatible = "spidev";
- reg = <0x1>;
- #address-cells = <0x1>;
- #size-cells = <0x0>;
- spi-max-frequency = <0x7735940>;
- phandle = <0x60>;
- };
- };
-
- i2c@7e205000 {
- compatible = "brcm,bcm2835-i2c";
- reg = <0x7e205000 0x1000>;
- interrupts = <0x2 0x15>;
- clocks = <0x8 0x14>;
- #address-cells = <0x1>;
- #size-cells = <0x0>;
- status = "disabled";
- pinctrl-names = "default";
- pinctrl-0 = <0x11>;
- clock-frequency = <0x186a0>;
- phandle = <0x21>;
- };
-
- pixelvalve@7e206000 {
- compatible = "brcm,bcm2835-pixelvalve0";
- reg = <0x7e206000 0x100>;
- interrupts = <0x2 0xd>;
- status = "disabled";
- phandle = <0x61>;
- };
-
- pixelvalve@7e207000 {
- compatible = "brcm,bcm2835-pixelvalve1";
- reg = <0x7e207000 0x100>;
- interrupts = <0x2 0xe>;
- status = "disabled";
- phandle = <0x62>;
- };
-
- dpi@7e208000 {
- compatible = "brcm,bcm2835-dpi";
- reg = <0x7e208000 0x8c>;
- clocks = <0x8 0x14 0x8 0x2c>;
- clock-names = "core", "pixel";
- #address-cells = <0x1>;
- #size-cells = <0x0>;
- status = "disabled";
- phandle = <0x63>;
- };
-
- dsi@7e209000 {
- compatible = "brcm,bcm2835-dsi0";
- reg = <0x7e209000 0x78>;
- interrupts = <0x2 0x4>;
- #address-cells = <0x1>;
- #size-cells = <0x0>;
- #clock-cells = <0x1>;
- clocks = <0x8 0x20 0x8 0x2f 0x8 0x31>;
- clock-names = "phy", "escape", "pixel";
- clock-output-names = "dsi0_byte", "dsi0_ddr2", "dsi0_ddr";
- phandle = <0x5>;
- };
-
- thermal@7e212000 {
- compatible = "brcm,bcm2837-thermal";
- reg = <0x7e212000 0x8>;
- clocks = <0x8 0x1b>;
- #thermal-sensor-cells = <0x0>;
- status = "okay";
- phandle = <0x2>;
- };
-
- aux@0x7e215000 {
- compatible = "brcm,bcm2835-aux";
- #clock-cells = <0x1>;
- reg = <0x7e215000 0x8>;
- clocks = <0x8 0x14>;
- interrupts = <0x1 0x1d>;
- interrupt-controller;
- #interrupt-cells = <0x1>;
- phandle = <0x12>;
- };
-
- serial@7e215040 {
- compatible = "brcm,bcm2835-aux-uart";
- reg = <0x7e215040 0x40>;
- interrupts = <0x0>;
- clocks = <0x12 0x0>;
- status = "okay";
- interrupt-parent = <0x12>;
- pinctrl-names = "default";
- pinctrl-0 = <0x13>;
- phandle = <0x1e>;
- };
-
- spi@7e215080 {
- compatible = "brcm,bcm2835-aux-spi";
- reg = <0x7e215080 0x40>;
- interrupts = <0x1>;
- clocks = <0x12 0x1>;
- #address-cells = <0x1>;
- #size-cells = <0x0>;
- status = "disabled";
- interrupt-parent = <0x12>;
- phandle = <0x64>;
- };
-
- spi@7e2150c0 {
- compatible = "brcm,bcm2835-aux-spi";
- reg = <0x7e2150c0 0x40>;
- interrupts = <0x2>;
- clocks = <0x12 0x2>;
- #address-cells = <0x1>;
- #size-cells = <0x0>;
- status = "disabled";
- interrupt-parent = <0x12>;
- phandle = <0x65>;
- };
-
- pwm@7e20c000 {
- compatible = "brcm,bcm2835-pwm";
- reg = <0x7e20c000 0x28>;
- clocks = <0x8 0x1e>;
- assigned-clocks = <0x8 0x1e>;
- assigned-clock-rates = <0x989680>;
- #pwm-cells = <0x2>;
- status = "disabled";
- phandle = <0x66>;
- };
-
- hvs@7e400000 {
- compatible = "brcm,bcm2835-hvs";
- reg = <0x7e400000 0x6000>;
- interrupts = <0x2 0x1>;
- status = "disabled";
- phandle = <0x67>;
- };
-
- dsi@7e700000 {
- compatible = "brcm,bcm2835-dsi1";
- reg = <0x7e700000 0x8c>;
- interrupts = <0x2 0xc>;
- #address-cells = <0x1>;
- #size-cells = <0x0>;
- #clock-cells = <0x1>;
- clocks = <0x8 0x23 0x8 0x30 0x8 0x32>;
- clock-names = "phy", "escape", "pixel";
- clock-output-names = "dsi1_byte", "dsi1_ddr2", "dsi1_ddr";
- status = "disabled";
- phandle = <0x6>;
- };
-
- csi0@7e800000 {
- compatible = "brcm,bcm2835-unicam";
- reg = <0x7e800000 0x800 0x7e802000 0x4>;
- interrupts = <0x2 0x6>;
- clocks = <0x8 0x2d>;
- clock-names = "lp";
- #address-cells = <0x1>;
- #size-cells = <0x0>;
- #clock-cells = <0x1>;
- status = "disabled";
- power-domains = <0x14 0xc>;
- phandle = <0x68>;
- };
-
- csi1@7e801000 {
- compatible = "brcm,bcm2835-unicam";
- reg = <0x7e801000 0x800 0x7e802004 0x4>;
- interrupts = <0x2 0x7>;
- clocks = <0x8 0x2e>;
- clock-names = "lp";
- #address-cells = <0x1>;
- #size-cells = <0x0>;
- #clock-cells = <0x1>;
- status = "disabled";
- power-domains = <0x14 0xd>;
- phandle = <0x69>;
-
- port {
-
- endpoint {
- data-lanes = <0x1 0x2>;
- };
- };
- };
-
- i2c@7e804000 {
- compatible = "brcm,bcm2835-i2c";
- reg = <0x7e804000 0x1000>;
- interrupts = <0x2 0x15>;
- clocks = <0x8 0x14>;
- #address-cells = <0x1>;
- #size-cells = <0x0>;
- status = "disabled";
- pinctrl-names = "default";
- pinctrl-0 = <0x15>;
- clock-frequency = <0x186a0>;
- phandle = <0x22>;
- };
-
- i2c@7e805000 {
- compatible = "brcm,bcm2835-i2c";
- reg = <0x7e805000 0x1000>;
- interrupts = <0x2 0x15>;
- clocks = <0x8 0x14>;
- #address-cells = <0x1>;
- #size-cells = <0x0>;
- status = "disabled";
- clock-frequency = <0x186a0>;
- phandle = <0x16>;
- };
-
- vec@7e806000 {
- compatible = "brcm,bcm2835-vec";
- reg = <0x7e806000 0x1000>;
- clocks = <0x8 0x18>;
- interrupts = <0x2 0x1b>;
- status = "disabled";
- phandle = <0x6a>;
- };
-
- pixelvalve@7e807000 {
- compatible = "brcm,bcm2835-pixelvalve2";
- reg = <0x7e807000 0x100>;
- interrupts = <0x2 0xa>;
- status = "disabled";
- phandle = <0x6b>;
- };
-
- hdmi@7e902000 {
- compatible = "brcm,bcm2835-hdmi";
- reg = <0x7e902000 0x600 0x7e808000 0x100>;
- interrupts = <0x2 0x8 0x2 0x9>;
- ddc = <0x16>;
- clocks = <0x8 0x10 0x8 0x19>;
- clock-names = "pixel", "hdmi";
- dmas = <0xb 0x11>;
- dma-names = "audio-rx";
- status = "disabled";
- power-domains = <0x14 0x5>;
- hpd-gpios = <0x10 0x1c 0x1>;
- phandle = <0x6c>;
- };
-
- usb@7e980000 {
- compatible = "brcm,bcm2835-usb";
- reg = <0x7e980000 0x10000 0x7e006000 0x1000>;
- interrupts = <0x1 0x9>;
- #address-cells = <0x1>;
- #size-cells = <0x0>;
- clocks = <0x17>;
- clock-names = "otg";
- phys = <0x18>;
- phy-names = "usb2-phy";
- power-domains = <0x14 0x6>;
- phandle = <0x6d>;
-
- usb1@1 {
- compatible = "usb424,2514";
- reg = <0x1>;
- #address-cells = <0x1>;
- #size-cells = <0x0>;
-
- usb1_1@1 {
- compatible = "usb424,2514";
- reg = <0x1>;
- #address-cells = <0x1>;
- #size-cells = <0x0>;
-
- usbether@1 {
- compatible = "usb424,7800";
- reg = <0x1>;
- microchip,eee-enabled;
- microchip,tx-lpi-timer = <0x258>;
- microchip,led-modes = <0x1 0x6>;
- phandle = <0x2d>;
- };
- };
- };
- };
-
- v3d@7ec00000 {
- compatible = "brcm,vc4-v3d";
- reg = <0x7ec00000 0x1000>;
- interrupts = <0x1 0xa>;
- power-domains = <0x14 0xa>;
- status = "disabled";
- phandle = <0x6e>;
- };
-
- gpu {
- compatible = "brcm,bcm2835-vc4";
- status = "disabled";
- phandle = <0x6f>;
- };
-
- local_intc@40000000 {
- compatible = "brcm,bcm2836-l1-intc";
- reg = <0x40000000 0x100>;
- interrupt-controller;
- #interrupt-cells = <0x1>;
- interrupt-parent = <0x3>;
- phandle = <0x3>;
- };
-
- mmc@7e300000 {
- compatible = "brcm,bcm2835-mmc", "brcm,bcm2835-sdhci";
- reg = <0x7e300000 0x100>;
- interrupts = <0x2 0x1e>;
- clocks = <0x8 0x1c>;
- dmas = <0xb 0xb>;
- dma-names = "rx-tx";
- brcm,overclock-50 = <0x0>;
- status = "okay";
- pinctrl-names = "default";
- pinctrl-0 = <0x19>;
- non-removable;
- bus-width = <0x4>;
- phandle = <0x27>;
- };
-
- firmwarekms@7e600000 {
- compatible = "raspberrypi,rpi-firmware-kms";
- reg = <0x7e600000 0x100>;
- interrupts = <0x2 0x10>;
- brcm,firmware = <0x7>;
- status = "disabled";
- phandle = <0x70>;
- };
-
- smi@7e600000 {
- compatible = "brcm,bcm2835-smi";
- reg = <0x7e600000 0x100>;
- interrupts = <0x2 0x10>;
- clocks = <0x8 0x2a>;
- assigned-clocks = <0x8 0x2a>;
- assigned-clock-rates = <0x7735940>;
- dmas = <0xb 0x4>;
- dma-names = "rx-tx";
- status = "disabled";
- phandle = <0x71>;
- };
-
- axiperf {
- compatible = "brcm,bcm2835-axiperf";
- reg = <0x7e009800 0x100 0x7ee08000 0x100>;
- firmware = <0x7>;
- status = "disabled";
- phandle = <0x28>;
- };
-
- gpiomem {
- compatible = "brcm,bcm2835-gpiomem";
- reg = <0x7e200000 0x1000>;
- };
-
- firmware {
- compatible = "raspberrypi,bcm2835-firmware";
- mboxes = <0x1a>;
- phandle = <0x7>;
- };
-
- power {
- compatible = "raspberrypi,bcm2835-power";
- firmware = <0x7>;
- #power-domain-cells = <0x1>;
- phandle = <0x14>;
- };
-
- fb {
- compatible = "brcm,bcm2708-fb";
- firmware = <0x7>;
- status = "okay";
- phandle = <0x72>;
- };
-
- vchiq {
- compatible = "brcm,bcm2835-vchiq";
- reg = <0x7e00b840 0xf>;
- interrupts = <0x0 0x2>;
- cache-line-size = <0x20>;
- firmware = <0x7>;
- phandle = <0x1c>;
- };
-
- vcsm {
- compatible = "raspberrypi,bcm2835-vcsm";
- firmware = <0x7>;
- status = "okay";
- phandle = <0x73>;
- };
-
- audio {
- compatible = "brcm,bcm2835-audio";
- brcm,pwm-channels = <0x8>;
- status = "disabled";
- pinctrl-names = "default";
- pinctrl-0 = <0x1b>;
- phandle = <0x23>;
- };
-
- sound {
- status = "disabled";
- phandle = <0x74>;
- };
-
- arm-pmu {
- compatible = "arm,cortex-a7-pmu";
- interrupt-parent = <0x3>;
- interrupts = <0x9>;
- };
-
- expgpio {
- compatible = "brcm,bcm2835-expgpio";
- gpio-controller;
- #gpio-cells = <0x2>;
- firmware = <0x7>;
- status = "okay";
- phandle = <0x30>;
- };
- };
-
- clocks {
- compatible = "simple-bus";
- #address-cells = <0x1>;
- #size-cells = <0x0>;
-
- clock@3 {
- compatible = "fixed-clock";
- reg = <0x3>;
- #clock-cells = <0x0>;
- clock-output-names = "osc";
- clock-frequency = <0x124f800>;
- phandle = <0x4>;
- };
-
- clock@4 {
- compatible = "fixed-clock";
- reg = <0x4>;
- #clock-cells = <0x0>;
- clock-output-names = "otg";
- clock-frequency = <0x1c9c3800>;
- phandle = <0x17>;
- };
- };
-
- phy {
- compatible = "usb-nop-xceiv";
- #phy-cells = <0x0>;
- phandle = <0x18>;
- };
-
- timer {
- compatible = "arm,armv7-timer";
- interrupt-parent = <0x3>;
- interrupts = <0x0 0x1 0x3 0x2>;
- always-on;
- };
-
- psci {
- compatible = "arm,psci-1.0";
- method = "smc";
- };
-
- cpus {
- #address-cells = <0x1>;
- #size-cells = <0x0>;
- enable-method = "brcm,bcm2836-smp";
- phandle = <0x75>;
-
- cpu@0 {
- device_type = "cpu";
- compatible = "arm,cortex-a53";
- reg = <0x0>;
- enable-method = "psci";
- cpu-release-addr = <0x0 0xd8>;
- phandle = <0x29>;
- };
-
- cpu@1 {
- device_type = "cpu";
- compatible = "arm,cortex-a53";
- reg = <0x1>;
- enable-method = "psci";
- cpu-release-addr = <0x0 0xe0>;
- phandle = <0x2a>;
- };
-
- cpu@2 {
- device_type = "cpu";
- compatible = "arm,cortex-a53";
- reg = <0x2>;
- enable-method = "psci";
- cpu-release-addr = <0x0 0xe8>;
- phandle = <0x2b>;
- };
-
- cpu@3 {
- device_type = "cpu";
- compatible = "arm,cortex-a53";
- reg = <0x3>;
- enable-method = "psci";
- cpu-release-addr = <0x0 0xf0>;
- phandle = <0x2c>;
- };
- };
-
- fixedregulator_5v0 {
- compatible = "regulator-fixed";
- regulator-name = "5v0";
- regulator-min-microvolt = <0x4c4b40>;
- regulator-max-microvolt = <0x4c4b40>;
- regulator-always-on;
- phandle = <0x76>;
- };
-
- fixedregulator_3v3 {
- compatible = "regulator-fixed";
- regulator-name = "3v3";
- regulator-min-microvolt = <0x325aa0>;
- regulator-max-microvolt = <0x325aa0>;
- regulator-always-on;
- phandle = <0x77>;
- };
-
- __overrides__ {
- cam0-pwdn-ctrl;
- cam0-pwdn;
- cam0-led-ctrl;
- cam0-led;
- cache_line_size = [00 00 00 1c 63 61 63 68 65 2d 6c 69 6e 65 2d 73 69 7a 65 3a 30 00];
- uart0 = [00 00 00 1d 73 74 61 74 75 73 00];
- uart1 = [00 00 00 1e 73 74 61 74 75 73 00];
- i2s = [00 00 00 1f 73 74 61 74 75 73 00];
- spi = "", "", "", " status";
- i2c0 = "", "", "", "!status";
- i2c1 = "", "", "", "\"status";
- i2c2_iknowwhatimdoing = [00 00 00 16 73 74 61 74 75 73 00];
- i2c0_baudrate = "", "", "", "!clock-frequency:0";
- i2c1_baudrate = "", "", "", "\"clock-frequency:0";
- i2c2_baudrate = [00 00 00 16 63 6c 6f 63 6b 2d 66 72 65 71 75 65 6e 63 79 3a 30 00];
- audio = "", "", "", "#status";
- watchdog = "", "", "", "$status";
- random = "", "", "", "%status";
- sd_overclock = "", "", "", "&brcm,overclock-50:0";
- sd_force_pio = "", "", "", "&brcm,force-pio?";
- sd_pio_limit = "", "", "", "&brcm,pio-limit:0";
- sd_debug = "", "", "", "&brcm,debug";
- sdio_overclock = "", "", "", "'brcm,overclock-50:0";
- axiperf = "", "", "", "(status";
- arm_freq = "", "", "", ")clock-frequency:0", "", "", "", "*clock-frequency:0", "", "", "", "+clock-frequency:0", "", "", "", ",clock-frequency:0";
- eee = "", "", "", "-microchip,eee-enabled?";
- tx_lpi_timer = "", "", "", "-microchip,tx-lpi-timer:0";
- eth_led0 = "", "", "", "-microchip,led-modes:0";
- eth_led1 = "", "", "", "-microchip,led-modes:4";
- act_led_gpio = "", "", "", ".gpios:4";
- act_led_activelow = "", "", "", ".gpios:8";
- act_led_trigger = "", "", "", ".linux,default-trigger";
- pwr_led_gpio = "", "", "", "/gpios:4";
- pwr_led_activelow = "", "", "", "/gpios:8";
- pwr_led_trigger = "", "", "", "/linux,default-trigger";
- };
-
- memory {
- device_type = "memory";
- reg = <0x0 0x0>;
- };
-
- leds {
- compatible = "gpio-leds";
- phandle = <0x78>;
-
- act {
- label = "led0";
- linux,default-trigger = "mmc0";
- gpios = <0x10 0x1d 0x0>;
- phandle = <0x2e>;
- };
-
- pwr {
- label = "led1";
- linux,default-trigger = "default-on";
- gpios = <0x30 0x2 0x1>;
- phandle = <0x2f>;
- };
- };
-
- __symbols__ {
- cpu_thermal = "/thermal-zones/cpu-thermal";
- soc = "/soc";
- dma = "/soc/dma@7e007000";
- intc = "/soc/interrupt-controller@7e00b200";
- watchdog = "/soc/watchdog@7e100000";
- clocks = "/soc/cprman@7e101000";
- random = "/soc/rng@7e104000";
- mailbox = "/soc/mailbox@7e00b880";
- gpio = "/soc/gpio@7e200000";
- dpi_gpio0 = "/soc/gpio@7e200000/dpi_gpio0";
- emmc_gpio22 = "/soc/gpio@7e200000/emmc_gpio22";
- emmc_gpio34 = "/soc/gpio@7e200000/emmc_gpio34";
- emmc_gpio48 = "/soc/gpio@7e200000/emmc_gpio48";
- gpclk0_gpio4 = "/soc/gpio@7e200000/gpclk0_gpio4";
- gpclk1_gpio5 = "/soc/gpio@7e200000/gpclk1_gpio5";
- gpclk1_gpio42 = "/soc/gpio@7e200000/gpclk1_gpio42";
- gpclk1_gpio44 = "/soc/gpio@7e200000/gpclk1_gpio44";
- gpclk2_gpio6 = "/soc/gpio@7e200000/gpclk2_gpio6";
- gpclk2_gpio43 = "/soc/gpio@7e200000/gpclk2_gpio43";
- i2c0_gpio0 = "/soc/gpio@7e200000/i2c0_gpio0";
- i2c0_gpio28 = "/soc/gpio@7e200000/i2c0_gpio28";
- i2c0_gpio44 = "/soc/gpio@7e200000/i2c0_gpio44";
- i2c1_gpio2 = "/soc/gpio@7e200000/i2c1_gpio2";
- i2c1_gpio44 = "/soc/gpio@7e200000/i2c1_gpio44";
- i2c_slave_gpio18 = "/soc/gpio@7e200000/i2c_slave_gpio18";
- jtag_gpio4 = "/soc/gpio@7e200000/jtag_gpio4";
- jtag_gpio22 = "/soc/gpio@7e200000/jtag_gpio22";
- pcm_gpio18 = "/soc/gpio@7e200000/pcm_gpio18";
- pcm_gpio28 = "/soc/gpio@7e200000/pcm_gpio28";
- pwm0_gpio12 = "/soc/gpio@7e200000/pwm0_gpio12";
- pwm0_gpio18 = "/soc/gpio@7e200000/pwm0_gpio18";
- pwm0_gpio40 = "/soc/gpio@7e200000/pwm0_gpio40";
- pwm1_gpio13 = "/soc/gpio@7e200000/pwm1_gpio13";
- pwm1_gpio19 = "/soc/gpio@7e200000/pwm1_gpio19";
- pwm1_gpio41 = "/soc/gpio@7e200000/pwm1_gpio41";
- pwm1_gpio45 = "/soc/gpio@7e200000/pwm1_gpio45";
- sdhost_pins = "/soc/gpio@7e200000/sdhost_gpio48";
- sdhost_gpio48 = "/soc/gpio@7e200000/sdhost_gpio48";
- spi0_gpio7 = "/soc/gpio@7e200000/spi0_gpio7";
- spi0_gpio35 = "/soc/gpio@7e200000/spi0_gpio35";
- spi1_gpio16 = "/soc/gpio@7e200000/spi1_gpio16";
- spi2_gpio40 = "/soc/gpio@7e200000/spi2_gpio40";
- uart0_gpio14 = "/soc/gpio@7e200000/uart0_gpio14";
- uart0_ctsrts_gpio16 = "/soc/gpio@7e200000/uart0_ctsrts_gpio16";
- uart0_ctsrts_gpio30 = "/soc/gpio@7e200000/uart0_ctsrts_gpio30";
- uart0_gpio32 = "/soc/gpio@7e200000/uart0_gpio32";
- uart0_gpio36 = "/soc/gpio@7e200000/uart0_gpio36";
- uart0_ctsrts_gpio38 = "/soc/gpio@7e200000/uart0_ctsrts_gpio38";
- uart1_gpio14 = "/soc/gpio@7e200000/uart1_gpio14";
- uart1_ctsrts_gpio16 = "/soc/gpio@7e200000/uart1_ctsrts_gpio16";
- uart1_gpio32 = "/soc/gpio@7e200000/uart1_gpio32";
- uart1_ctsrts_gpio30 = "/soc/gpio@7e200000/uart1_ctsrts_gpio30";
- uart1_gpio40 = "/soc/gpio@7e200000/uart1_gpio40";
- uart1_ctsrts_gpio42 = "/soc/gpio@7e200000/uart1_ctsrts_gpio42";
- dpi_18bit_gpio0 = "/soc/gpio@7e200000/dpi_18bit_gpio0";
- spi0_pins = "/soc/gpio@7e200000/spi0_pins";
- spi0_cs_pins = "/soc/gpio@7e200000/spi0_cs_pins";
- i2c0_pins = "/soc/gpio@7e200000/i2c0";
- i2c1_pins = "/soc/gpio@7e200000/i2c1";
- i2s_pins = "/soc/gpio@7e200000/i2s";
- sdio_pins = "/soc/gpio@7e200000/sdio_pins";
- bt_pins = "/soc/gpio@7e200000/bt_pins";
- uart0_pins = "/soc/gpio@7e200000/uart0_pins";
- uart1_pins = "/soc/gpio@7e200000/uart1_pins";
- audio_pins = "/soc/gpio@7e200000/audio_pins";
- uart0 = "/soc/serial@7e201000";
- sdhost = "/soc/mmc@7e202000";
- i2s = "/soc/i2s@7e203000";
- spi0 = "/soc/spi@7e204000";
- spi = "/soc/spi@7e204000";
- spidev0 = "/soc/spi@7e204000/spidev@0";
- spidev1 = "/soc/spi@7e204000/spidev@1";
- i2c0 = "/soc/i2c@7e205000";
- pixelvalve0 = "/soc/pixelvalve@7e206000";
- pixelvalve1 = "/soc/pixelvalve@7e207000";
- dpi = "/soc/dpi@7e208000";
- dsi0 = "/soc/dsi@7e209000";
- thermal = "/soc/thermal@7e212000";
- aux = "/soc/aux@0x7e215000";
- uart1 = "/soc/serial@7e215040";
- spi1 = "/soc/spi@7e215080";
- spi2 = "/soc/spi@7e2150c0";
- pwm = "/soc/pwm@7e20c000";
- hvs = "/soc/hvs@7e400000";
- dsi1 = "/soc/dsi@7e700000";
- csi0 = "/soc/csi0@7e800000";
- csi1 = "/soc/csi1@7e801000";
- i2c1 = "/soc/i2c@7e804000";
- i2c2 = "/soc/i2c@7e805000";
- vec = "/soc/vec@7e806000";
- pixelvalve2 = "/soc/pixelvalve@7e807000";
- hdmi = "/soc/hdmi@7e902000";
- usb = "/soc/usb@7e980000";
- ethernet = "/soc/usb@7e980000/usb1@1/usb1_1@1/usbether@1";
- v3d = "/soc/v3d@7ec00000";
- vc4 = "/soc/gpu";
- local_intc = "/soc/local_intc@40000000";
- mmc = "/soc/mmc@7e300000";
- firmwarekms = "/soc/firmwarekms@7e600000";
- smi = "/soc/smi@7e600000";
- axiperf = "/soc/axiperf";
- firmware = "/soc/firmware";
- power = "/soc/power";
- fb = "/soc/fb";
- vchiq = "/soc/vchiq";
- vcsm = "/soc/vcsm";
- audio = "/soc/audio";
- sound = "/soc/sound";
- expgpio = "/soc/expgpio";
- clk_osc = "/clocks/clock@3";
- clk_usb = "/clocks/clock@4";
- usbphy = "/phy";
- cpus = "/cpus";
- cpu0 = "/cpus/cpu@0";
- cpu1 = "/cpus/cpu@1";
- cpu2 = "/cpus/cpu@2";
- cpu3 = "/cpus/cpu@3";
- vdd_5v0_reg = "/fixedregulator_5v0";
- vdd_3v3_reg = "/fixedregulator_3v3";
- leds = "/leds";
- act_led = "/leds/act";
- pwr_led = "/leds/pwr";
- };
-};
diff --git a/Platform/RaspberryPi/RPi3/DeviceTree/bcm2710-rpi-3-b.dtb b/Platform/RaspberryPi/RPi3/DeviceTree/bcm2710-rpi-3-b.dtb
index 14c78a9eead443adefd229f81ad0ace70c8e0ec7..fb80a70a1847116d9ac7ac6a5cdb1716df19bb93 100644
GIT binary patch
literal 26463
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
AzW@LL

literal 25354
zcmd5^eT-#ERll!$KDxod0Tx&gc6+90nE~c*zxTR(rU&`Bu6!;mj35Fd@aFY<Z@TZ!
z`{Lc#Uz^wtuEIYqf-wk06!`-}j3FV2L`@w3Fi`|Tkf?tk!MG|Kh>{S38eM<CQ+4Xr
z{dn)qE(@`edvDdLQ>V^3b?Q{zx>fhfC;s=_LC|_a5CpFZg13(GJcsMaxK83iSo{Fs
z=S^JiHcOM{S+U7^JeL_CHIw0HXEZt(#^+bV-k{y-hMU3WsMR~a+3M9dRxe5k;y(k|
z6W^ftOPAxN)usDbVCf!*a|AK+#d=tV>C?G%&892OZrn^d36g^QG(2Ctk_=iaNoN!{
zyV1o?y|!Lms}cc$^oaBF98R@Xt@=1m1kQbe)7)vt1EfsZ+wgp&h3`kzeM8<9C2f{_
zv!OlM>9>(G<&NU{cESZ>U{683DY)%k6O2}?7abF%wT!DH`Eh>?_3jMEVQbJIj|Sat
zXCwtS>y~TcQ@8gE{$6w3+HMcFfJ3=F9M+i#&Zuv)*ECyn^K|4tAo;y!+}#}Pn`$;T
zta4b-Q*r&0;A{=!0T9515@9~|`yR<p+aRxB^6`+Vr`Hk^Bmy7;X)ymcX5@cJ^5c3U
z<yQ;kKVo<o#*&|vlk`7k%bWVwGvz76CrtT?c0?M#@7DoC^Yz61Pv`PmIT`;@@_V8K
zN|4vVAJ53YDfw}oGHk%i^X30Mlb@B5{C!^Xcalw%zqFC9{}}SWw9@UgrFWTjSpe*>
zrOdTWM5V20^M50--PU&ePJ*2+eNEuw?aruYJ7cz;PXPB}!D;Tt!_MfMls4thApR}M
z^Z8prq88Qo=#XwiR}jqMs<gHTNvF@G)PEAs?`_oAt9SQDjh*IboV+;2wJe1X4En}<
zu>5c*v~Z<C-}49)2((M2E3l3EZ+huv#92S{p`Xg?Bai&gKL^KNebvHPCPG|%R%<Zm
z#{I3Z*Bn~4N?Dc{8LW#SE$TH$;@+^^2{(5PHsR#yG%nvi3T?oce><{Xb%@AIEmDLh
zFYD@w^JBny{Y`=ph=*WlS0cpgxGF`rBsfn-p6}h)Lm(1{KpND+mBV0&=#MMx24L?%
zf;_Wb_#_=ZX@`8$ukcA9%P0FFpY%z5(!cQu`Q-Ub`+Syt{=|&uvyo5!8Ymuv<!XRi
zjkh{)tGuo8w$9rH-Y)XC!P_O?YNm*ksY#)ll&VRwFxhU7I_<F8?V^@cp9hGOZ`JQF
z2f;6{dFcpowzahXY*#OIr~|(ZE`-fduQeWZ!??vPuN^*(BuNVlkIIK_oObys#F=S%
zlQv=8rlrl;=QSN6PFaN4@?l1B*@ixU>*25$?zP7Rla{d&T7sE}`1J1rOz5|U@EU!1
zrkWc*h*zX-5J^kv+(cY;ZtG%YOSl9F`mcNuarPyS%?y0944<r@{*QrA!uj-cRrxB?
z$8l+$5#rR9@Ln8V1+Un5fQT{-q+@xFm?pytW8Wd&=U5oqE<*gdxTL=F;abYGe`VXE
zhk>2Ils@|F=WZY!c`(+=pn7DTe{VoSS9xH+6CR4wfeG~!(GXJkt{g52;4`=r2HC~-
zNS8X}lX5T*q4KY|F-{)-6Hn%A-W2<;M8Kn7EA3(2ARARA5Lk8yGHMHyS!tpUu?e<6
z+na5?h>LS+_FMSUfaBPcaM9tBK6xg;^l7wL`ZD@4`Y`rg`Y!q{>dwkB$Fi)$riIs4
zq{&C6gE@jQT(2W3IG`i^-U{8kox=WebXN(=&^?XxGOjbY?!rY|JB!QbSLu=$+9m_}
z&0oGu>oz}?X>Eh$h@&#GS!%c_EOkKUSgx#YwZjX@7hP=)Tixqb(Uu71m1Fy|J$*V}
zx)LGpBCeE9P3W+01}#TAyfn?W%hRDyc{*#-dTBY*c>WAJm&)i^!L)wT;k%or%lLU=
zhE84NqRtq!9O-yAC^ngw>nDMe%4O)Rv5^pbIxq0jW&FGd`9cTNSJPUiGm-}SSf(#3
z-7-2aF3_nvdr~?a`#s-TD%VR2bk<y-P&(9ch|A~4vx7>6JWi)nE@M5W(S5m?&$Le`
zuji;h=hpb~+E4iTDUVJg={9#e()2Y^lH~zDOZ5E|q<x>|^QV0sd<xxrl<xiG=9bsn
zSmriMk20xEsh{*|sveZ)PZwxDHh;%DY(13-@s}yxVXNm$Pn=tkopSi}UY@6COipl=
zp4!|Uz`ZjqU+U*y;ppx4OkcqK(knw9Qh%0*Qu}=+^2P3kj)v<8;NP{cPb07YR~2ZO
zr4ubfKF-bH<JBGwWB-^Xdu2$2<E7Fp>(lolUuCg0=muRG(x9FCH1e{%2KiYUYaCKs
z8Pa&3moDSuwaCxWkfA{9C5^m4$lJ<&N+W6G1$AtCitT))bGvODdcRp?UY<5>LikID
zv9TMDUPeakgY38PUzs_J@?R$N>wuf3x$0zAn#;gBgX=C_W%GhOpRf05+V+&8$Cn@d
zrgYxq^UAnQS0cnO<5FJjNJKRXj_Q^6%68^B%Q5LZu6&#2>HZ9Ggf7<&Y=@M=0C3_$
zpVFUn&S!Zl?U!%J(rS$pEJYY6<aD6)R0lr2yx)D}M0%@EcBNP5d-C*tHcOAQ;#D(Z
zWo2Cg-YHzuczaU`Eq{)oe5vjDwDRND&t++OdRujVP3e`{V4mKaeR|diZ?#Qn3zpYP
zg!o&sv^?Hwx74P2dT-6rdsJ<Zr*$Pu%j50V>?2R_=d<+4TV_37+u$7V^8PeW>up(D
z9&cu5OdTsd?XSL#<mtU#>G6H8wy_x-_v-oq+9@-S^vb(=Ntu77U*#C3{agFxwE0oq
z-uV8^`YPg^hjBka0)g^?zVNk(_!DsPJ<^vm??1^$N~@JLQgTvGb%v+ECL#XFe}9jV
zPoFQeIPXTB!Ph&}UYSy#_GI8F4H;B(G?+)4(`0&DN<%b5T<F=&Q#ih3ypeb3X>{05
zMmP9U<0*z^bPPC+_%bf_J7xYt{UXcU>bor8;ic})v8!2m<=kM(JCLix;#VTz(-wrD
z8FySO6Gz*43GqpOm^eP~K5g2Xqg`|CN*ghY{1P8Q+Faw_ds8JsCfh~m$fvO^9p&*H
zaPqz&Z_}I~laA0T`BcREslV*n)v#Nw)dH+`p7&y-xYucQymeRbfi>tQc3WN|7h&2b
zx&A`>$dq+J<cVB-(&m^48=pJNcED;v&>U_yxU2v;1M?xz+-h*<B>Mu>2y^%1#yIHA
zHQJqP&7JO;84Bwmu6>>`=zMN(aJ_jzBm}}hw-VvWv0HRwJ`dHa>8BIHBcEB_m<cAq
zwm#}$2}yQm2U8uu&K>NFi2JgW|3kp&m)O5Z5B_cL!O?y=-bVs~urmJ3WT&nuJN+ul
zG5wHvy7X@%&7k?8MBMX3l?dsxxI`z#&wf&lZIRUp5D7ydUGPSoRGB{G!Bl>IPlH`J
z`B@+J!1BCA4^YC$(*xRcZm%6D%}snS0}camDd*=T<?1ik1#zgG6KR=Bg!mFJ(>DsA
zFokweRtz*K!@#<&tP!H6ec<UHp31Mb51vZDF##;JC&}yUjpHHprhc_dZ)LVZ81<oJ
zFJ*zP&iy5x6a@KV7mSm3-bPLl2352>yHOQ!2GSsIVBm}i402XDUt%E6EV<cMUpbz<
zHA?X-j5ly;Te036(hRfe^?0AE?@9GuMIEeH>NcN&>(%r#uhd_(6Ck1t1NpOdav4#o
z)WOtGaGX}W$IDL2+MP18-N`TOWBTEs^6rnO=}Lt7X<Q=jFy8NUcbnbaj(p+2V84E|
zEd6`d52VPxO<38l0-H_Y<W$*DSlA?c2am#26L@7j>5h(BJo)xwc^ZObDNpPdq&JJF
zP2~x5V^I*l?*qob@<qD<qU5G}fUmqk(68cR85oEgFX=15t6O(QU!ObM8jL!D=o&eu
z40JTrwr9!FLV3|`J27%x%F4kxdA6;AXayzDR-f-98eO)+w2jFhVYB!|e&r_cw9mpP
zIbAFPPF<|nC)<-Wq2sx;!|j8hleC&cUo$2jbE~=UlHJDU!MGDhtlb{r+cIH@fd+%+
zuM#27d79{>d|QR!vd{WDx#(|fKo;p4y_{M?RCrgI_Hpmq)V%mk;1Q>6%%^T5<dHAo
zt+|um9wlXqHU~tMVIb|ijxCRunNR)ZdDQWWcx+F$jm}q@{ID%Ux}UQ7T2F*DZAbV`
z=bvu781Xnp`g&Xs!EeY(Av02bt{k4a93jn1>60G@pJ%aE3!9)v>6gT_<tEM-I1ksl
zBE&g&F|wHc?rldByu3{qS<2=Nr!L<Btq7OWSKa1i(Y^rvKGr^-kyq`g4SG3QGViL7
zMwXkP72)z_A?>^@3VXa|>7Xu=1?%$Shg(_yRqPW$L>UI<5q|h4)8{;x_R~93*gS2Y
z{X}7qWj+i(_<<W1hv|C|S6OHI-fI@Ovc1b~cHCe#V+;Wz$}pt7M@(MjO<}Yr(TRo4
z;$utk;TORNht&)p(yzQ7r`VH}#B{<4TIZF+p`>*zQ=dUTy!Vo+b`1SZ90Qg?hq~v`
z!)F~A>%P@7pytMa8a=;^0TKfZ2GW|PC(gM=uPuxpP?T)xBSQ!*Pk)*9XFL74)f97M
z{z=Gp<?sfv7J|bYON_8TFwfT)>rt56VQ681&z<cWT@#1pPvi1^g>4$4k=N-Y8BzcI
zeV{`by!NU@NN?j(xoaYKx}ldm+@jnN-^fj#%jD)bNP5(T%6+$m0scdm`-H8FI*SmG
zaaD!`9gc!Zr{5k9u!#(C2FvR_*KnzS>d3z;=AFUcIx1y~KB?@T;YI{<)S1@f)>nSi
z?+jWW^iulHunZo>K2+Yv^p14n@{dy9NwRQGBC_mu%(h>B@v-etY&#$#kHOjl`}kEP
zGi|5#jCrlYQ$MY9!AX5n?eTt;72eX<E$NN7`W{4|$>8xhM3ScKV9FEMN{Kg%r|ZBG
zp0?XP4jz}hg*28gjvYiq1_JY;B<SmXONbtWPrQMr<A-_54}5~u1Ae3&bTZHJQ`cFD
zt2#!UK1AMAS%<tknb#&)IpM%@>riZ0!YJ>9vi2J45|o3NtwDi?^P7BkAPxA>dA8Lv
zaDh+XH&-I0ySPMW{?=>27+Ah&V?dN#lW%nPK|r9Y!{90+6j{oGA2(O`bTxB~pzhQ*
z!SmeN!I;wmp-ElS=jpmG=*}O2rFzJhFB8bOuL~W+P*!B_A-{q$*j+9Kh|h5*0Bo(k
zcK*^j_W2?Z&N5s#q9NGyME*(B+o~@3KHU!HgCL`H@^po_KJwWfdR2B;+c0I$Bs24%
z6C@<_pxxG52qdNv$RqWB<?tqxrEQ`8$=8v>Xme$@rMeq{sMyQaaEBGJzM_qQCuSlr
ze-_OlaD--e&}w!Y7}Q#knSiGH%D)F(2)nhAn5+cB$sI}3^;@K-y&DSeEXzw}WL)?u
z9@h}OGsw@*t$>&XV1d3B6V35;C{6G9(!RlZ?(p!`Z}6LmE$jRO*H{UIJr~yJ!TX%Q
zu3q-ei8?2~V?N8$=Ho#dC(VZt$5ZOXvl1bG4wvZXT0H9QVJrOg9^V-_I%RB>?<kow
zW20dlYMBs)n2%uPgw0-MvQ$SjWa5E``S;_g^RrpD^-kaluZau^1s;pG3q+J*cr<*m
zJ+<wgpO$s+X$m9%p|`HgHaP@7+g9~l*1ogk9HG3(=^d{j|M`A{wSdC;8|W6g4~!E(
z{KgFwb8P^gGW*|W@$o$6gS!WMogR{+$08pdg2kZ@@&3yqZ0@X$5r9CM3U*}<AFeyw
z5=?_jeg6*9I<KKT5z@3D(bsUW*P-$dNSpm2W3x&-hnLq2>-ji}QgNiC_1uQI=_{Lv
znLH8By~AFtZiML>t32JZeyp_Fe}r~=982ovdQsLLr3mEB=sEaYggEyID2($P2GX=L
z%>NPMOKCb|3(5!E!}5_xgIj!AoA=L*sxEh18N5d$Gsk|ZD?P3`LFN=eW%)eHLUzHQ
zWXJ4}`R}>lPrg^EPgc3lC@+aS0y>qpmgB%_WEk~uT!u+0C-YN&@W$HuxU(NNFKVu9
zkHUDxHiIly|M6(dZbgC!l)JdDxtl>E4#LE97UcP>Ku~`>%^s`36S+G3LuG^Xi+$fi
zK>p*&1LwKqLHKB4LUG-UGOU9>_R*ZPBYH(>M5~OGhRo-#;d@j&lpKXqPgg7s@tD5J
zOaz;r`|coV`RRu%XTI;HD-jYX=kXrNG>YYC)ys0Wo|1Yq^XIvTpZ!}KKzH~N;<w{+
zdb3k$(&INM&WpqTU>NSVI`J+6uI&8ROfo}@{a*Ax#%>MIw~F7RedF52hYHQLd}nMM
zxbp5m^6FDblem2R3vN=!FfkJ?0&$(dWj2if9@g%rO)}Uz=D(9*s)itCaSqg2hs&Qh
zw`Y0G73RP1{PxD`g)r$2Nesc#uSAGbMLc7wAEj;Hkz;@%OK|CTg-`A4>tbS#4sD5n
zWzpy6zn_y6e(H$$3*`Tu#iPwdh;y!?^63Za$I651eijekK%KS@;o${74|OCE9xD&p
z?z4FKW?F~va2{!=2czD{%maDnHH(M;$ng+b9)u6^8>7zFPPaK8j2i2^#yUy&B(A_^
zVI~6)LlE=Ou1A(FvZm|7YhM$2`S*Hh7THYmD#Y8vRmQ{WZfbWkd9cVS5A`b_1zk<w
z8>DG~3q0&A4~@oP7ymiH#*L)W01$yR5RS0#X#7{a_^)~KkJvcIwj-Q#J*U-dZFfQ(
zx9)^V{6Oc0My*1JKL0(q?nuVXv3Itb@K4~nvjqMjz?X{fBcBEQR1qG04Diz>@SA`y
z7vV=Zr+Ru0PFcQ8Ix?z+*G8Rp?sWRC178;6e4R9B;Czepr{GZb`*5Af@j&?fxb7-}
z(@#D(2gjIk<i7wvD?X7;YARi?8m`%nnExI<?r^RRMy*bW8OlomlJ>#e;3#k`4dkF1
zd+}Js799A>qo*8ByR*5o#p03&9*)xAotwe~<$4&`^K$&Z1!XS*{`^v1y`U6&z7%Ta
z0{K>>{1~^7-h=1eoDd~1^vCm~uTS9{h>ASV0)CTlSo6;QdAqYP9FO9yEq^Q}UB26{
zl+fk-q=jebzK`%Jbj3g5ooz5W0H)ywZFl5Y4u-Ku<~o9eo0Lm`A0cu)ftlnjOf#qt
z9iv!7rP&%2jd1wYqaOvT?Ya*3aV)L)Fvvak1>h?TQNdNZ{6-`E4EJQ_;nS`W8G$go
zV;}u^+#l`;2L`6JIftapGWa~NAWhmrztKnzaJ;%}Js9!uj(PM?Rx&@FSjqirLgo5@
z@sAkvy~-EmzZ)e7@U85eWBjoHBZK$HqkkcM&|t8VWd1X=k~_LBy1Ns&Un#-O9h-Kz
zU!R6+jzT-!f18GDjxG!C5_tGt32y#4GHn95$L1&DnzJeEKoh#~amP+h$JJxS4*!lB
z_~LLZee!aC625m#n0%9$OVe@nD6sHy2k>86f{)K|{*hn7MH?P_!!%s)j3sg3F%8!o
zm32JaUyf@u?af0;cV`-|NB0bH-&KxVIA%-TQ5U~nf}cA+>vUoMUzD|dhii_-I{7|X
zLN|BR)!}|-3a(YL<Ka)saNY4zqd3Y&z5UfxTp4m4-M^iNYfl#`-G3~{wI{gJc`AAM
z_o=uX)lHuw?tf3iHAh92-{Z%p;!0N)T=b9QPc6YMIr{1F?|c;au%Y8&8GiQor{jBL
z8m>9k>2P0Gj%)RN!PnjK%jLNK5lo@G1b*LEf}1~9$+kWV+;}3ccT~(Au@m|%^9#39
z#vFZfJiUKn8TL1G{E<A7|KFaDD~eJ6e{UkL$G<tg=y)mXW7LmTyqg<R)-Oz;Uu$^u
zJ^hgXZ%izcm6i0rJrUQVpVj3;Wnvl9PtT8o{=$<c;(GM$Xhxkbqs-}&G9}0TM4y;5
zEYwTzvCFZVo>VeE0J>Rt(Ii~&h#mR39k{P9!R0uHY^j?#Z!E`=DJJP)4!I!z0hEb&
zI;YW7D#W1-*GlLl+2d_eC+3z5!xCKYIGW(WZ!GMW;F*5tj+r^!2Pfcq$HpA)drNS0
zN5cdc^UBBNzkomBfB%krR``WQi2Aet%%eUHeLsH%iS#rH+lY9-TcD$O=8b}QoF`BF
z&)_pb$Bf;X4Kwv>Zch*K{y^%>;pxU2)MM*g_%p#PZu-}J^G`stk+NP*H`6m8YYD-u
zfA-x59AoFjP2QxzcK#9kJ8|LjMjwSuwJPVAB)_<ERrAgJLUBVW^PdWRn>k8xBc<jW
zJt050;n30#e!zb-F8qV=U)<zH`m~3CGV=R}U^cv8h>AT>j_(*f6gEF8pGJ>Z%twF7
z{{s?p+y(Pa<L8(EgVEAkc*O8s*r39Ee3M$#_nsZ38LT{uW{x#svxmiFf138sOstbE
zK1J%+4F$zb2$s)9^Nv*90Kj~HFPQXSN__jMd^J-CkP%o8Yf6h|yh=X|6OOf!TmEk*
z)<_o586CP0qLy~)KWVv+^=83OKR6N}d@h=~V)5G^<XgNTWs2Y2P9pCmE3%-Km`D1Z
zi+Qie=DGO^)@l}Cx02m&h4qxhH*vLt3xx>e3+pM1R|LkJ`5L0|MhbUhCh^-TTwXd9
zKThHDB0xC&(_(+6d{JHVAIRr>YuMnq@ZVFm$-CuWs4I4L%E&_adkx&KETwBfi>*O#
z*c`_=5*o-)k%RQ-jzesZ!6x11CN_F^k|gBe<pit3Sf;jdb0DP}m?us=%YTS@TE?_8
ze-w&eQj%sX&_6L^i$cFW=mqv~fU?pS$QU2kv%#`%#@PmEM1f3SWUk3{jkkKhT}!xX
z%#~Z6U-|-Bu)~f7vuQy8ld9WBWP@A3Gp+`kgTc5t+Dd{U{!`3fo#OA#&4X~*Op<sP
zC!l<2psQl|Z)-9bB|&S@xppmX#ZV3iY(p9-4?=C>C#{e+v{8H!NtKzT(Xij_0dtwC
zMy0a;D@hRR<Hyv!W^&ytkp56PSWcVAHiuc%H3`!n0(C3FGJm3IE8#rX`!#d0Yyi@x
z!hlS$BzA45-x|k*zS)Q|+`*Z3Q;XqT&b8}l_7FeBjfdNDJHX^P?Ce4*;oe|$y*ZMN
z1t2Pa{4^ys1&cACG$6FmnaRf=WW&9<J>E7o`^)l{7hPnB8Ipe3ZpK!=RuWPoF&Zdv
zKV8wb%)9RrHa*xGV+mDTBiqQ9Ce2~1uiwj)Ae%-*kJ*qo31jiapN25*CV!;SZjPH_
zx5<C^w%e^>d)T%d!u`;24s6~1K|dT}>3Ww3vyGgt1=)a72e<lI$|`X7%aK(Oc`;T*
z&QOQ3jAnPQd60x?(;j-kpdEDjtSz)DOdR7@r!hXj@jov6jyl~Aepw!}>wBN}*h*fq
z7x%+n+!_sb2l#_P`UQ~MFN3E{;50`y9PYLIA*~~DNfSda_TWeXjIU%3ekE(r{m=)n
z=hqwY_5NUQZyO%0*T#_o^f)fsZNd?;al|`hQuQ>IwB=KtST;OQLq71}{cFGk9;gmq
zbC@unZRFL)nIu1eH)v7;d~E|f%FmKq0zf#D?qJVB^fL%taEh*p6kQ>T-feDnx<UDu
z542Q6eO$WW>@O#~IF^fD9LvF(<z7jc7x{IQV-k49^|G+2C@EcR^%7W36}7Yf8GkLx
zz&f1+qcq}%Zas|}aCRlqEg!B0E{c^zZ>3P9r~rM>{faJ)dvLtk18$coR=xP8G>&yN
zhqJbBM<Mejo?R2;cqF1-l%YwYSfJvtBylWiaCDM5DmE{!)Cx9bn}oN50OSG;s}^Y?
ztnhe=GVBdOuyva%@{25_U=S?141%rCAXttw2(W?tGKMHY1`CPlB7`)xfTf{r%>D!@
zT^7)nej}M+85Sk#y^@1Cyb?wVd7_2fI|N$P#qpbKxB|Q%NizpL*e8eT_(l})wI|@Y
zk`%ul$k7Fz2?X4I&K=+BjNXl&+~ms*wPunm`~KV<RVSqQ*-C>uqxj_f0~hC(GMB^+
iEDU#Qyw!PI4R+gYZk=dwZooKZbP~5d1ZF7CA^1PO>8mpU

diff --git a/Platform/RaspberryPi/RPi3/DeviceTree/bcm2710-rpi-3-b.dts b/Platform/RaspberryPi/RPi3/DeviceTree/bcm2710-rpi-3-b.dts
deleted file mode 100644
index 887eb09692b6..000000000000
--- a/Platform/RaspberryPi/RPi3/DeviceTree/bcm2710-rpi-3-b.dts
+++ /dev/null
@@ -1,1259 +0,0 @@
-/dts-v1/;
-
-/*
- * Raspberry Pi 3 Model B DTS (Device Tree Source), for UEFI firmware.
- *
- * This source is the mostly identical to the decompiled version of the
- * official DTB (Device Tree Binary), as found at:
- * https://github.com/raspberrypi/firmware/tree/master/boot
- *
- * Only the following changes were applied:
- * - Two fixes for USB keyboard support under the usb@7e980000 section:
- * compatible = "brcm,bcm2708-usb"; -> compatible = "brcm,bcm2835-usb";
- * interrupts = <0x2 0x0 0x1 0x9>; -> interrupts = <0x1 0x9>;
- * - A 'psci' section was added, as it is provided by the ATF
- * - The 'enable-method' for CPUs was swicthed to "psci" instead of "spin-table"
- */
-
-/memreserve/ 0x0000000000000000 0x0000000000001000;
-/ {
- compatible = "raspberrypi,3-model-b", "brcm,bcm2837";
- model = "Raspberry Pi 3 Model B";
- interrupt-parent = <0x1>;
- #address-cells = <0x1>;
- #size-cells = <0x1>;
-
- aliases {
- serial0 = "/soc/serial@7e215040";
- serial1 = "/soc/serial@7e201000";
- audio = "/soc/audio";
- aux = "/soc/aux@0x7e215000";
- sound = "/soc/sound";
- soc = "/soc";
- dma = "/soc/dma@7e007000";
- intc = "/soc/interrupt-controller@7e00b200";
- watchdog = "/soc/watchdog@7e100000";
- random = "/soc/rng@7e104000";
- mailbox = "/soc/mailbox@7e00b880";
- gpio = "/soc/gpio@7e200000";
- uart0 = "/soc/serial@7e201000";
- sdhost = "/soc/mmc@7e202000";
- mmc0 = "/soc/mmc@7e202000";
- i2s = "/soc/i2s@7e203000";
- spi0 = "/soc/spi@7e204000";
- i2c0 = "/soc/i2c@7e205000";
- uart1 = "/soc/serial@7e215040";
- spi1 = "/soc/spi@7e215080";
- spi2 = "/soc/spi@7e2150c0";
- mmc = "/soc/mmc@7e300000";
- mmc1 = "/soc/mmc@7e300000";
- i2c1 = "/soc/i2c@7e804000";
- i2c2 = "/soc/i2c@7e805000";
- usb = "/soc/usb@7e980000";
- leds = "/leds";
- fb = "/soc/fb";
- vchiq = "/soc/vchiq";
- thermal = "/soc/thermal@7e212000";
- axiperf = "/soc/axiperf";
- ethernet0 = "/soc/usb@7e980000/usb1@1/usbether@1";
- };
-
- chosen {
- bootargs = "8250.nr_uarts=1";
- };
-
- thermal-zones {
-
- cpu-thermal {
- polling-delay-passive = <0x0>;
- polling-delay = <0x3e8>;
- thermal-sensors = <0x2>;
- coefficients = <0xfffffde6 0x64960>;
- phandle = <0x31>;
-
- cooling-maps {
- };
- };
- };
-
- soc {
- compatible = "simple-bus";
- #address-cells = <0x1>;
- #size-cells = <0x1>;
- ranges = <0x7e000000 0x3f000000 0x1000000 0x40000000 0x40000000 0x1000>;
- dma-ranges = <0xc0000000 0x0 0x3f000000>;
- phandle = <0x32>;
-
- dma@7e007000 {
- compatible = "brcm,bcm2835-dma";
- reg = <0x7e007000 0xf00>;
- interrupts = <0x1 0x10 0x1 0x11 0x1 0x12 0x1 0x13 0x1 0x14 0x1 0x15 0x1 0x16 0x1 0x17 0x1 0x18 0x1 0x19 0x1 0x1a 0x1 0x1b 0x1 0x1b 0x1 0x1b 0x1 0x1b 0x1 0x1c>;
- interrupt-names = "dma0", "dma1", "dma2", "dma3", "dma4", "dma5", "dma6", "dma7", "dma8", "dma9", "dma10", "dma11", "dma12", "dma13", "dma14", "dma-shared-all";
- #dma-cells = <0x1>;
- brcm,dma-channel-mask = <0x7f34>;
- phandle = <0xb>;
- };
-
- interrupt-controller@7e00b200 {
- compatible = "brcm,bcm2836-armctrl-ic";
- reg = <0x7e00b200 0x200>;
- interrupt-controller;
- #interrupt-cells = <0x2>;
- interrupt-parent = <0x3>;
- interrupts = <0x8>;
- phandle = <0x1>;
- };
-
- watchdog@7e100000 {
- compatible = "brcm,bcm2835-pm-wdt";
- reg = <0x7e100000 0x28>;
- phandle = <0x25>;
- };
-
- cprman@7e101000 {
- compatible = "brcm,bcm2835-cprman";
- #clock-cells = <0x1>;
- reg = <0x7e101000 0x2000>;
- clocks = <0x4 0x5 0x0 0x5 0x1 0x5 0x2 0x6 0x0 0x6 0x1 0x6 0x2>;
- firmware = <0x7>;
- phandle = <0x8>;
- };
-
- rng@7e104000 {
- compatible = "brcm,bcm2835-rng";
- reg = <0x7e104000 0x10>;
- interrupts = <0x2 0x1d>;
- phandle = <0x26>;
- };
-
- mailbox@7e00b880 {
- compatible = "brcm,bcm2835-mbox";
- reg = <0x7e00b880 0x40>;
- interrupts = <0x0 0x1>;
- #mbox-cells = <0x0>;
- phandle = <0x1b>;
- };
-
- gpio@7e200000 {
- compatible = "brcm,bcm2835-gpio";
- reg = <0x7e200000 0xb4>;
- interrupts = <0x2 0x11 0x2 0x12>;
- gpio-controller;
- #gpio-cells = <0x2>;
- interrupt-controller;
- #interrupt-cells = <0x2>;
- phandle = <0x10>;
-
- dpi_gpio0 {
- brcm,pins = <0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10 0x11 0x12 0x13 0x14 0x15 0x16 0x17 0x18 0x19 0x1a 0x1b>;
- brcm,function = <0x6>;
- phandle = <0x33>;
- };
-
- emmc_gpio22 {
- brcm,pins = <0x16 0x17 0x18 0x19 0x1a 0x1b>;
- brcm,function = <0x7>;
- phandle = <0x34>;
- };
-
- emmc_gpio34 {
- brcm,pins = <0x22 0x23 0x24 0x25 0x26 0x27>;
- brcm,function = <0x7>;
- brcm,pull = <0x0 0x2 0x2 0x2 0x2 0x2>;
- phandle = <0x35>;
- };
-
- emmc_gpio48 {
- brcm,pins = <0x30 0x31 0x32 0x33 0x34 0x35>;
- brcm,function = <0x7>;
- phandle = <0x36>;
- };
-
- gpclk0_gpio4 {
- brcm,pins = <0x4>;
- brcm,function = <0x4>;
- phandle = <0x37>;
- };
-
- gpclk1_gpio5 {
- brcm,pins = <0x5>;
- brcm,function = <0x4>;
- phandle = <0x38>;
- };
-
- gpclk1_gpio42 {
- brcm,pins = <0x2a>;
- brcm,function = <0x4>;
- phandle = <0x39>;
- };
-
- gpclk1_gpio44 {
- brcm,pins = <0x2c>;
- brcm,function = <0x4>;
- phandle = <0x3a>;
- };
-
- gpclk2_gpio6 {
- brcm,pins = <0x6>;
- brcm,function = <0x4>;
- phandle = <0x3b>;
- };
-
- gpclk2_gpio43 {
- brcm,pins = <0x2b>;
- brcm,function = <0x4>;
- phandle = <0x3c>;
- };
-
- i2c0_gpio0 {
- brcm,pins = <0x0 0x1>;
- brcm,function = <0x4>;
- phandle = <0x3d>;
- };
-
- i2c0_gpio28 {
- brcm,pins = <0x1c 0x1d>;
- brcm,function = <0x4>;
- phandle = <0x3e>;
- };
-
- i2c0_gpio44 {
- brcm,pins = <0x2c 0x2d>;
- brcm,function = <0x5>;
- phandle = <0x3f>;
- };
-
- i2c1_gpio2 {
- brcm,pins = <0x2 0x3>;
- brcm,function = <0x4>;
- phandle = <0x40>;
- };
-
- i2c1_gpio44 {
- brcm,pins = <0x2c 0x2d>;
- brcm,function = <0x6>;
- phandle = <0x41>;
- };
-
- i2c_slave_gpio18 {
- brcm,pins = <0x12 0x13 0x14 0x15>;
- brcm,function = <0x7>;
- phandle = <0x42>;
- };
-
- jtag_gpio4 {
- brcm,pins = <0x4 0x5 0x6 0xc 0xd>;
- brcm,function = <0x2>;
- phandle = <0x43>;
- };
-
- jtag_gpio22 {
- brcm,pins = <0x16 0x17 0x18 0x19 0x1a 0x1b>;
- brcm,function = <0x3>;
- phandle = <0x44>;
- };
-
- pcm_gpio18 {
- brcm,pins = <0x12 0x13 0x14 0x15>;
- brcm,function = <0x4>;
- phandle = <0x45>;
- };
-
- pcm_gpio28 {
- brcm,pins = <0x1c 0x1d 0x1e 0x1f>;
- brcm,function = <0x6>;
- phandle = <0x46>;
- };
-
- pwm0_gpio12 {
- brcm,pins = <0xc>;
- brcm,function = <0x4>;
- phandle = <0x47>;
- };
-
- pwm0_gpio18 {
- brcm,pins = <0x12>;
- brcm,function = <0x2>;
- phandle = <0x48>;
- };
-
- pwm0_gpio40 {
- brcm,pins = <0x28>;
- brcm,function = <0x4>;
- phandle = <0x49>;
- };
-
- pwm1_gpio13 {
- brcm,pins = <0xd>;
- brcm,function = <0x4>;
- phandle = <0x4a>;
- };
-
- pwm1_gpio19 {
- brcm,pins = <0x13>;
- brcm,function = <0x2>;
- phandle = <0x4b>;
- };
-
- pwm1_gpio41 {
- brcm,pins = <0x29>;
- brcm,function = <0x4>;
- phandle = <0x4c>;
- };
-
- pwm1_gpio45 {
- brcm,pins = <0x2d>;
- brcm,function = <0x4>;
- phandle = <0x4d>;
- };
-
- sdhost_gpio48 {
- brcm,pins = <0x30 0x31 0x32 0x33 0x34 0x35>;
- brcm,function = <0x4>;
- phandle = <0xc>;
- };
-
- spi0_gpio7 {
- brcm,pins = <0x7 0x8 0x9 0xa 0xb>;
- brcm,function = <0x4>;
- phandle = <0x4e>;
- };
-
- spi0_gpio35 {
- brcm,pins = <0x23 0x24 0x25 0x26 0x27>;
- brcm,function = <0x4>;
- phandle = <0x4f>;
- };
-
- spi1_gpio16 {
- brcm,pins = <0x10 0x11 0x12 0x13 0x14 0x15>;
- brcm,function = <0x3>;
- phandle = <0x50>;
- };
-
- spi2_gpio40 {
- brcm,pins = <0x28 0x29 0x2a 0x2b 0x2c 0x2d>;
- brcm,function = <0x3>;
- phandle = <0x51>;
- };
-
- uart0_gpio14 {
- brcm,pins = <0xe 0xf>;
- brcm,function = <0x4>;
- phandle = <0x52>;
- };
-
- uart0_ctsrts_gpio16 {
- brcm,pins = <0x10 0x11>;
- brcm,function = <0x7>;
- phandle = <0x53>;
- };
-
- uart0_ctsrts_gpio30 {
- brcm,pins = <0x1e 0x1f>;
- brcm,function = <0x7>;
- phandle = <0x54>;
- };
-
- uart0_gpio32 {
- brcm,pins = <0x20 0x21>;
- brcm,function = <0x7>;
- phandle = <0x55>;
- };
-
- uart0_gpio36 {
- brcm,pins = <0x24 0x25>;
- brcm,function = <0x6>;
- phandle = <0x56>;
- };
-
- uart0_ctsrts_gpio38 {
- brcm,pins = <0x26 0x27>;
- brcm,function = <0x6>;
- phandle = <0x57>;
- };
-
- uart1_gpio14 {
- brcm,pins = <0xe 0xf>;
- brcm,function = <0x2>;
- phandle = <0x58>;
- };
-
- uart1_ctsrts_gpio16 {
- brcm,pins = <0x10 0x11>;
- brcm,function = <0x2>;
- phandle = <0x59>;
- };
-
- uart1_gpio32 {
- brcm,pins = <0x20 0x21>;
- brcm,function = <0x2>;
- phandle = <0x5a>;
- };
-
- uart1_ctsrts_gpio30 {
- brcm,pins = <0x1e 0x1f>;
- brcm,function = <0x2>;
- phandle = <0x5b>;
- };
-
- uart1_gpio40 {
- brcm,pins = <0x28 0x29>;
- brcm,function = <0x2>;
- phandle = <0x5c>;
- };
-
- uart1_ctsrts_gpio42 {
- brcm,pins = <0x2a 0x2b>;
- brcm,function = <0x2>;
- phandle = <0x5d>;
- };
-
- dpi_18bit_gpio0 {
- brcm,pins = <0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10 0x11 0x12 0x13 0x14 0x15>;
- brcm,function = <0x6>;
- phandle = <0x5e>;
- };
-
- spi0_pins {
- brcm,pins = <0x9 0xa 0xb>;
- brcm,function = <0x4>;
- phandle = <0xe>;
- };
-
- spi0_cs_pins {
- brcm,pins = <0x8 0x7>;
- brcm,function = <0x1>;
- phandle = <0xf>;
- };
-
- i2c0 {
- brcm,pins = <0x0 0x1>;
- brcm,function = <0x4>;
- phandle = <0x11>;
- };
-
- i2c1 {
- brcm,pins = <0x2 0x3>;
- brcm,function = <0x4>;
- phandle = <0x15>;
- };
-
- i2s {
- brcm,pins = <0x12 0x13 0x14 0x15>;
- brcm,function = <0x4>;
- phandle = <0xd>;
- };
-
- sdio_pins {
- brcm,pins = <0x22 0x23 0x24 0x25 0x26 0x27>;
- brcm,function = <0x7>;
- brcm,pull = <0x0 0x2 0x2 0x2 0x2 0x2>;
- phandle = <0x1a>;
- };
-
- bt_pins {
- brcm,pins = <0x2b>;
- brcm,function = <0x4>;
- brcm,pull = <0x0>;
- phandle = <0xa>;
- };
-
- uart0_pins {
- brcm,pins = <0x20 0x21>;
- brcm,function = <0x7>;
- brcm,pull = <0x0 0x2>;
- phandle = <0x9>;
- };
-
- uart1_pins {
- brcm,pins;
- brcm,function;
- brcm,pull;
- phandle = <0x13>;
- };
-
- audio_pins {
- brcm,pins = <0x28 0x29>;
- brcm,function = <0x4>;
- phandle = <0x1c>;
- };
- };
-
- serial@7e201000 {
- compatible = "brcm,bcm2835-pl011", "arm,pl011", "arm,primecell";
- reg = <0x7e201000 0x1000>;
- interrupts = <0x2 0x19>;
- clocks = <0x8 0x13 0x8 0x14>;
- clock-names = "uartclk", "apb_pclk";
- arm,primecell-periphid = <0x241011>;
- cts-event-workaround;
- pinctrl-names = "default";
- pinctrl-0 = <0x9 0xa>;
- status = "okay";
- phandle = <0x1e>;
- };
-
- mmc@7e202000 {
- compatible = "brcm,bcm2835-sdhost";
- reg = <0x7e202000 0x100>;
- interrupts = <0x2 0x18>;
- clocks = <0x8 0x14>;
- dmas = <0xb 0xd>;
- dma-names = "rx-tx";
- status = "okay";
- pinctrl-names = "default";
- pinctrl-0 = <0xc>;
- bus-width = <0x4>;
- brcm,overclock-50 = <0x0>;
- brcm,pio-limit = <0x1>;
- phandle = <0x27>;
- };
-
- i2s@7e203000 {
- compatible = "brcm,bcm2835-i2s";
- reg = <0x7e203000 0x24>;
- clocks = <0x8 0x1f>;
- dmas = <0xb 0x2 0xb 0x3>;
- dma-names = "tx", "rx";
- status = "disabled";
- #sound-dai-cells = <0x0>;
- pinctrl-names = "default";
- pinctrl-0 = <0xd>;
- phandle = <0x20>;
- };
-
- spi@7e204000 {
- compatible = "brcm,bcm2835-spi";
- reg = <0x7e204000 0x1000>;
- interrupts = <0x2 0x16>;
- clocks = <0x8 0x14>;
- #address-cells = <0x1>;
- #size-cells = <0x0>;
- status = "disabled";
- dmas = <0xb 0x6 0xb 0x7>;
- dma-names = "tx", "rx";
- pinctrl-names = "default";
- pinctrl-0 = <0xe 0xf>;
- cs-gpios = <0x10 0x8 0x1 0x10 0x7 0x1>;
- phandle = <0x21>;
-
- spidev@0 {
- compatible = "spidev";
- reg = <0x0>;
- #address-cells = <0x1>;
- #size-cells = <0x0>;
- spi-max-frequency = <0x7735940>;
- phandle = <0x5f>;
- };
-
- spidev@1 {
- compatible = "spidev";
- reg = <0x1>;
- #address-cells = <0x1>;
- #size-cells = <0x0>;
- spi-max-frequency = <0x7735940>;
- phandle = <0x60>;
- };
- };
-
- i2c@7e205000 {
- compatible = "brcm,bcm2835-i2c";
- reg = <0x7e205000 0x1000>;
- interrupts = <0x2 0x15>;
- clocks = <0x8 0x14>;
- #address-cells = <0x1>;
- #size-cells = <0x0>;
- status = "disabled";
- pinctrl-names = "default";
- pinctrl-0 = <0x11>;
- clock-frequency = <0x186a0>;
- phandle = <0x22>;
- };
-
- pixelvalve@7e206000 {
- compatible = "brcm,bcm2835-pixelvalve0";
- reg = <0x7e206000 0x100>;
- interrupts = <0x2 0xd>;
- status = "disabled";
- phandle = <0x61>;
- };
-
- pixelvalve@7e207000 {
- compatible = "brcm,bcm2835-pixelvalve1";
- reg = <0x7e207000 0x100>;
- interrupts = <0x2 0xe>;
- status = "disabled";
- phandle = <0x62>;
- };
-
- dpi@7e208000 {
- compatible = "brcm,bcm2835-dpi";
- reg = <0x7e208000 0x8c>;
- clocks = <0x8 0x14 0x8 0x2c>;
- clock-names = "core", "pixel";
- #address-cells = <0x1>;
- #size-cells = <0x0>;
- status = "disabled";
- phandle = <0x63>;
- };
-
- dsi@7e209000 {
- compatible = "brcm,bcm2835-dsi0";
- reg = <0x7e209000 0x78>;
- interrupts = <0x2 0x4>;
- #address-cells = <0x1>;
- #size-cells = <0x0>;
- #clock-cells = <0x1>;
- clocks = <0x8 0x20 0x8 0x2f 0x8 0x31>;
- clock-names = "phy", "escape", "pixel";
- clock-output-names = "dsi0_byte", "dsi0_ddr2", "dsi0_ddr";
- phandle = <0x5>;
- };
-
- thermal@7e212000 {
- compatible = "brcm,bcm2837-thermal";
- reg = <0x7e212000 0x8>;
- clocks = <0x8 0x1b>;
- #thermal-sensor-cells = <0x0>;
- status = "okay";
- phandle = <0x2>;
- };
-
- aux@0x7e215000 {
- compatible = "brcm,bcm2835-aux";
- #clock-cells = <0x1>;
- reg = <0x7e215000 0x8>;
- clocks = <0x8 0x14>;
- interrupts = <0x1 0x1d>;
- interrupt-controller;
- #interrupt-cells = <0x1>;
- phandle = <0x12>;
- };
-
- serial@7e215040 {
- compatible = "brcm,bcm2835-aux-uart";
- reg = <0x7e215040 0x40>;
- interrupts = <0x0>;
- clocks = <0x12 0x0>;
- status = "okay";
- interrupt-parent = <0x12>;
- pinctrl-names = "default";
- pinctrl-0 = <0x13>;
- phandle = <0x1f>;
- };
-
- spi@7e215080 {
- compatible = "brcm,bcm2835-aux-spi";
- reg = <0x7e215080 0x40>;
- interrupts = <0x1>;
- clocks = <0x12 0x1>;
- #address-cells = <0x1>;
- #size-cells = <0x0>;
- status = "disabled";
- interrupt-parent = <0x12>;
- phandle = <0x64>;
- };
-
- spi@7e2150c0 {
- compatible = "brcm,bcm2835-aux-spi";
- reg = <0x7e2150c0 0x40>;
- interrupts = <0x2>;
- clocks = <0x12 0x2>;
- #address-cells = <0x1>;
- #size-cells = <0x0>;
- status = "disabled";
- interrupt-parent = <0x12>;
- phandle = <0x65>;
- };
-
- pwm@7e20c000 {
- compatible = "brcm,bcm2835-pwm";
- reg = <0x7e20c000 0x28>;
- clocks = <0x8 0x1e>;
- assigned-clocks = <0x8 0x1e>;
- assigned-clock-rates = <0x989680>;
- #pwm-cells = <0x2>;
- status = "disabled";
- phandle = <0x66>;
- };
-
- hvs@7e400000 {
- compatible = "brcm,bcm2835-hvs";
- reg = <0x7e400000 0x6000>;
- interrupts = <0x2 0x1>;
- status = "disabled";
- phandle = <0x67>;
- };
-
- dsi@7e700000 {
- compatible = "brcm,bcm2835-dsi1";
- reg = <0x7e700000 0x8c>;
- interrupts = <0x2 0xc>;
- #address-cells = <0x1>;
- #size-cells = <0x0>;
- #clock-cells = <0x1>;
- clocks = <0x8 0x23 0x8 0x30 0x8 0x32>;
- clock-names = "phy", "escape", "pixel";
- clock-output-names = "dsi1_byte", "dsi1_ddr2", "dsi1_ddr";
- status = "disabled";
- phandle = <0x6>;
- };
-
- csi0@7e800000 {
- compatible = "brcm,bcm2835-unicam";
- reg = <0x7e800000 0x800 0x7e802000 0x4>;
- interrupts = <0x2 0x6>;
- clocks = <0x8 0x2d>;
- clock-names = "lp";
- #address-cells = <0x1>;
- #size-cells = <0x0>;
- #clock-cells = <0x1>;
- status = "disabled";
- power-domains = <0x14 0xc>;
- phandle = <0x68>;
- };
-
- csi1@7e801000 {
- compatible = "brcm,bcm2835-unicam";
- reg = <0x7e801000 0x800 0x7e802004 0x4>;
- interrupts = <0x2 0x7>;
- clocks = <0x8 0x2e>;
- clock-names = "lp";
- #address-cells = <0x1>;
- #size-cells = <0x0>;
- #clock-cells = <0x1>;
- status = "disabled";
- power-domains = <0x14 0xd>;
- phandle = <0x69>;
-
- port {
-
- endpoint {
- data-lanes = <0x1 0x2>;
- };
- };
- };
-
- i2c@7e804000 {
- compatible = "brcm,bcm2835-i2c";
- reg = <0x7e804000 0x1000>;
- interrupts = <0x2 0x15>;
- clocks = <0x8 0x14>;
- #address-cells = <0x1>;
- #size-cells = <0x0>;
- status = "disabled";
- pinctrl-names = "default";
- pinctrl-0 = <0x15>;
- clock-frequency = <0x186a0>;
- phandle = <0x23>;
- };
-
- i2c@7e805000 {
- compatible = "brcm,bcm2835-i2c";
- reg = <0x7e805000 0x1000>;
- interrupts = <0x2 0x15>;
- clocks = <0x8 0x14>;
- #address-cells = <0x1>;
- #size-cells = <0x0>;
- status = "disabled";
- clock-frequency = <0x186a0>;
- phandle = <0x16>;
- };
-
- vec@7e806000 {
- compatible = "brcm,bcm2835-vec";
- reg = <0x7e806000 0x1000>;
- clocks = <0x8 0x18>;
- interrupts = <0x2 0x1b>;
- status = "disabled";
- phandle = <0x6a>;
- };
-
- pixelvalve@7e807000 {
- compatible = "brcm,bcm2835-pixelvalve2";
- reg = <0x7e807000 0x100>;
- interrupts = <0x2 0xa>;
- status = "disabled";
- phandle = <0x6b>;
- };
-
- hdmi@7e902000 {
- compatible = "brcm,bcm2835-hdmi";
- reg = <0x7e902000 0x600 0x7e808000 0x100>;
- interrupts = <0x2 0x8 0x2 0x9>;
- ddc = <0x16>;
- clocks = <0x8 0x10 0x8 0x19>;
- clock-names = "pixel", "hdmi";
- dmas = <0xb 0x11>;
- dma-names = "audio-rx";
- status = "disabled";
- power-domains = <0x14 0x5>;
- hpd-gpios = <0x17 0x4 0x1>;
- phandle = <0x6c>;
- };
-
- usb@7e980000 {
- compatible = "brcm,bcm2835-usb";
- reg = <0x7e980000 0x10000 0x7e006000 0x1000>;
- interrupts = <0x1 0x9>;
- #address-cells = <0x1>;
- #size-cells = <0x0>;
- clocks = <0x18>;
- clock-names = "otg";
- phys = <0x19>;
- phy-names = "usb2-phy";
- power-domains = <0x14 0x6>;
- phandle = <0x6d>;
-
- usb1@1 {
- compatible = "usb424,9514";
- reg = <0x1>;
- #address-cells = <0x1>;
- #size-cells = <0x0>;
-
- usbether@1 {
- compatible = "usb424,ec00";
- reg = <0x1>;
- phandle = <0x6e>;
- };
- };
- };
-
- v3d@7ec00000 {
- compatible = "brcm,vc4-v3d";
- reg = <0x7ec00000 0x1000>;
- interrupts = <0x1 0xa>;
- power-domains = <0x14 0xa>;
- status = "disabled";
- phandle = <0x6f>;
- };
-
- gpu {
- compatible = "brcm,bcm2835-vc4";
- status = "disabled";
- phandle = <0x70>;
- };
-
- local_intc@40000000 {
- compatible = "brcm,bcm2836-l1-intc";
- reg = <0x40000000 0x100>;
- interrupt-controller;
- #interrupt-cells = <0x1>;
- interrupt-parent = <0x3>;
- phandle = <0x3>;
- };
-
- mmc@7e300000 {
- compatible = "brcm,bcm2835-mmc", "brcm,bcm2835-sdhci";
- reg = <0x7e300000 0x100>;
- interrupts = <0x2 0x1e>;
- clocks = <0x8 0x1c>;
- dmas = <0xb 0xb>;
- dma-names = "rx-tx";
- brcm,overclock-50 = <0x0>;
- status = "okay";
- pinctrl-names = "default";
- pinctrl-0 = <0x1a>;
- non-removable;
- bus-width = <0x4>;
- phandle = <0x28>;
- };
-
- firmwarekms@7e600000 {
- compatible = "raspberrypi,rpi-firmware-kms";
- reg = <0x7e600000 0x100>;
- interrupts = <0x2 0x10>;
- brcm,firmware = <0x7>;
- status = "disabled";
- phandle = <0x71>;
- };
-
- smi@7e600000 {
- compatible = "brcm,bcm2835-smi";
- reg = <0x7e600000 0x100>;
- interrupts = <0x2 0x10>;
- clocks = <0x8 0x2a>;
- assigned-clocks = <0x8 0x2a>;
- assigned-clock-rates = <0x7735940>;
- dmas = <0xb 0x4>;
- dma-names = "rx-tx";
- status = "disabled";
- phandle = <0x72>;
- };
-
- axiperf {
- compatible = "brcm,bcm2835-axiperf";
- reg = <0x7e009800 0x100 0x7ee08000 0x100>;
- firmware = <0x7>;
- status = "disabled";
- phandle = <0x29>;
- };
-
- gpiomem {
- compatible = "brcm,bcm2835-gpiomem";
- reg = <0x7e200000 0x1000>;
- };
-
- firmware {
- compatible = "raspberrypi,bcm2835-firmware";
- mboxes = <0x1b>;
- phandle = <0x7>;
- };
-
- power {
- compatible = "raspberrypi,bcm2835-power";
- firmware = <0x7>;
- #power-domain-cells = <0x1>;
- phandle = <0x14>;
- };
-
- fb {
- compatible = "brcm,bcm2708-fb";
- firmware = <0x7>;
- status = "okay";
- phandle = <0x73>;
- };
-
- vchiq {
- compatible = "brcm,bcm2835-vchiq";
- reg = <0x7e00b840 0xf>;
- interrupts = <0x0 0x2>;
- cache-line-size = <0x20>;
- firmware = <0x7>;
- phandle = <0x1d>;
- };
-
- vcsm {
- compatible = "raspberrypi,bcm2835-vcsm";
- firmware = <0x7>;
- status = "okay";
- phandle = <0x74>;
- };
-
- audio {
- compatible = "brcm,bcm2835-audio";
- brcm,pwm-channels = <0x8>;
- status = "disabled";
- pinctrl-names = "default";
- pinctrl-0 = <0x1c>;
- phandle = <0x24>;
- };
-
- sound {
- status = "disabled";
- phandle = <0x75>;
- };
-
- arm-pmu {
- compatible = "arm,cortex-a7-pmu";
- interrupt-parent = <0x3>;
- interrupts = <0x9>;
- };
-
- virtgpio {
- compatible = "brcm,bcm2835-virtgpio";
- gpio-controller;
- #gpio-cells = <0x2>;
- firmware = <0x7>;
- status = "okay";
- phandle = <0x30>;
- };
-
- expgpio {
- compatible = "brcm,bcm2835-expgpio";
- gpio-controller;
- #gpio-cells = <0x2>;
- firmware = <0x7>;
- status = "okay";
- phandle = <0x17>;
- };
- };
-
- clocks {
- compatible = "simple-bus";
- #address-cells = <0x1>;
- #size-cells = <0x0>;
-
- clock@3 {
- compatible = "fixed-clock";
- reg = <0x3>;
- #clock-cells = <0x0>;
- clock-output-names = "osc";
- clock-frequency = <0x124f800>;
- phandle = <0x4>;
- };
-
- clock@4 {
- compatible = "fixed-clock";
- reg = <0x4>;
- #clock-cells = <0x0>;
- clock-output-names = "otg";
- clock-frequency = <0x1c9c3800>;
- phandle = <0x18>;
- };
- };
-
- phy {
- compatible = "usb-nop-xceiv";
- #phy-cells = <0x0>;
- phandle = <0x19>;
- };
-
- timer {
- compatible = "arm,armv7-timer";
- interrupt-parent = <0x3>;
- interrupts = <0x0 0x1 0x3 0x2>;
- always-on;
- };
-
- psci {
- compatible = "arm,psci-1.0";
- method = "smc";
- };
-
- cpus {
- #address-cells = <0x1>;
- #size-cells = <0x0>;
- enable-method = "brcm,bcm2836-smp";
- phandle = <0x76>;
-
- cpu@0 {
- device_type = "cpu";
- compatible = "arm,cortex-a53";
- reg = <0x0>;
- enable-method = "psci";
- cpu-release-addr = <0x0 0xd8>;
- phandle = <0x2a>;
- };
-
- cpu@1 {
- device_type = "cpu";
- compatible = "arm,cortex-a53";
- reg = <0x1>;
- enable-method = "psci";
- cpu-release-addr = <0x0 0xe0>;
- phandle = <0x2b>;
- };
-
- cpu@2 {
- device_type = "cpu";
- compatible = "arm,cortex-a53";
- reg = <0x2>;
- enable-method = "psci";
- cpu-release-addr = <0x0 0xe8>;
- phandle = <0x2c>;
- };
-
- cpu@3 {
- device_type = "cpu";
- compatible = "arm,cortex-a53";
- reg = <0x3>;
- enable-method = "psci";
- cpu-release-addr = <0x0 0xf0>;
- phandle = <0x2d>;
- };
- };
-
- fixedregulator_5v0 {
- compatible = "regulator-fixed";
- regulator-name = "5v0";
- regulator-min-microvolt = <0x4c4b40>;
- regulator-max-microvolt = <0x4c4b40>;
- regulator-always-on;
- phandle = <0x77>;
- };
-
- fixedregulator_3v3 {
- compatible = "regulator-fixed";
- regulator-name = "3v3";
- regulator-min-microvolt = <0x325aa0>;
- regulator-max-microvolt = <0x325aa0>;
- regulator-always-on;
- phandle = <0x78>;
- };
-
- __overrides__ {
- cam0-pwdn-ctrl;
- cam0-pwdn;
- cam0-led-ctrl;
- cam0-led;
- cache_line_size = [00 00 00 1d 63 61 63 68 65 2d 6c 69 6e 65 2d 73 69 7a 65 3a 30 00];
- uart0 = [00 00 00 1e 73 74 61 74 75 73 00];
- uart1 = [00 00 00 1f 73 74 61 74 75 73 00];
- i2s = "", "", "", " status";
- spi = "", "", "", "!status";
- i2c0 = "", "", "", "\"status";
- i2c1 = "", "", "", "#status";
- i2c2_iknowwhatimdoing = [00 00 00 16 73 74 61 74 75 73 00];
- i2c0_baudrate = "", "", "", "\"clock-frequency:0";
- i2c1_baudrate = "", "", "", "#clock-frequency:0";
- i2c2_baudrate = [00 00 00 16 63 6c 6f 63 6b 2d 66 72 65 71 75 65 6e 63 79 3a 30 00];
- audio = "", "", "", "$status";
- watchdog = "", "", "", "%status";
- random = "", "", "", "&status";
- sd_overclock = "", "", "", "'brcm,overclock-50:0";
- sd_force_pio = "", "", "", "'brcm,force-pio?";
- sd_pio_limit = "", "", "", "'brcm,pio-limit:0";
- sd_debug = "", "", "", "'brcm,debug";
- sdio_overclock = "", "", "", "(brcm,overclock-50:0";
- axiperf = "", "", "", ")status";
- arm_freq = "", "", "", "*clock-frequency:0", "", "", "", "+clock-frequency:0", "", "", "", ",clock-frequency:0", "", "", "", "-clock-frequency:0";
- act_led_gpio = "", "", "", ".gpios:4";
- act_led_activelow = "", "", "", ".gpios:8";
- act_led_trigger = "", "", "", ".linux,default-trigger";
- pwr_led_gpio = "", "", "", "/gpios:4";
- pwr_led_activelow = "", "", "", "/gpios:8";
- pwr_led_trigger = "", "", "", "/linux,default-trigger";
- };
-
- memory {
- device_type = "memory";
- reg = <0x0 0x0>;
- };
-
- leds {
- compatible = "gpio-leds";
- phandle = <0x79>;
-
- act {
- label = "led0";
- linux,default-trigger = "mmc0";
- gpios = <0x30 0x0 0x0>;
- phandle = <0x2e>;
- };
-
- pwr {
- label = "led1";
- linux,default-trigger = "input";
- gpios = <0x17 0x7 0x0>;
- phandle = <0x2f>;
- };
- };
-
- __symbols__ {
- cpu_thermal = "/thermal-zones/cpu-thermal";
- soc = "/soc";
- dma = "/soc/dma@7e007000";
- intc = "/soc/interrupt-controller@7e00b200";
- watchdog = "/soc/watchdog@7e100000";
- clocks = "/soc/cprman@7e101000";
- random = "/soc/rng@7e104000";
- mailbox = "/soc/mailbox@7e00b880";
- gpio = "/soc/gpio@7e200000";
- dpi_gpio0 = "/soc/gpio@7e200000/dpi_gpio0";
- emmc_gpio22 = "/soc/gpio@7e200000/emmc_gpio22";
- emmc_gpio34 = "/soc/gpio@7e200000/emmc_gpio34";
- emmc_gpio48 = "/soc/gpio@7e200000/emmc_gpio48";
- gpclk0_gpio4 = "/soc/gpio@7e200000/gpclk0_gpio4";
- gpclk1_gpio5 = "/soc/gpio@7e200000/gpclk1_gpio5";
- gpclk1_gpio42 = "/soc/gpio@7e200000/gpclk1_gpio42";
- gpclk1_gpio44 = "/soc/gpio@7e200000/gpclk1_gpio44";
- gpclk2_gpio6 = "/soc/gpio@7e200000/gpclk2_gpio6";
- gpclk2_gpio43 = "/soc/gpio@7e200000/gpclk2_gpio43";
- i2c0_gpio0 = "/soc/gpio@7e200000/i2c0_gpio0";
- i2c0_gpio28 = "/soc/gpio@7e200000/i2c0_gpio28";
- i2c0_gpio44 = "/soc/gpio@7e200000/i2c0_gpio44";
- i2c1_gpio2 = "/soc/gpio@7e200000/i2c1_gpio2";
- i2c1_gpio44 = "/soc/gpio@7e200000/i2c1_gpio44";
- i2c_slave_gpio18 = "/soc/gpio@7e200000/i2c_slave_gpio18";
- jtag_gpio4 = "/soc/gpio@7e200000/jtag_gpio4";
- jtag_gpio22 = "/soc/gpio@7e200000/jtag_gpio22";
- pcm_gpio18 = "/soc/gpio@7e200000/pcm_gpio18";
- pcm_gpio28 = "/soc/gpio@7e200000/pcm_gpio28";
- pwm0_gpio12 = "/soc/gpio@7e200000/pwm0_gpio12";
- pwm0_gpio18 = "/soc/gpio@7e200000/pwm0_gpio18";
- pwm0_gpio40 = "/soc/gpio@7e200000/pwm0_gpio40";
- pwm1_gpio13 = "/soc/gpio@7e200000/pwm1_gpio13";
- pwm1_gpio19 = "/soc/gpio@7e200000/pwm1_gpio19";
- pwm1_gpio41 = "/soc/gpio@7e200000/pwm1_gpio41";
- pwm1_gpio45 = "/soc/gpio@7e200000/pwm1_gpio45";
- sdhost_pins = "/soc/gpio@7e200000/sdhost_gpio48";
- sdhost_gpio48 = "/soc/gpio@7e200000/sdhost_gpio48";
- spi0_gpio7 = "/soc/gpio@7e200000/spi0_gpio7";
- spi0_gpio35 = "/soc/gpio@7e200000/spi0_gpio35";
- spi1_gpio16 = "/soc/gpio@7e200000/spi1_gpio16";
- spi2_gpio40 = "/soc/gpio@7e200000/spi2_gpio40";
- uart0_gpio14 = "/soc/gpio@7e200000/uart0_gpio14";
- uart0_ctsrts_gpio16 = "/soc/gpio@7e200000/uart0_ctsrts_gpio16";
- uart0_ctsrts_gpio30 = "/soc/gpio@7e200000/uart0_ctsrts_gpio30";
- uart0_gpio32 = "/soc/gpio@7e200000/uart0_gpio32";
- uart0_gpio36 = "/soc/gpio@7e200000/uart0_gpio36";
- uart0_ctsrts_gpio38 = "/soc/gpio@7e200000/uart0_ctsrts_gpio38";
- uart1_gpio14 = "/soc/gpio@7e200000/uart1_gpio14";
- uart1_ctsrts_gpio16 = "/soc/gpio@7e200000/uart1_ctsrts_gpio16";
- uart1_gpio32 = "/soc/gpio@7e200000/uart1_gpio32";
- uart1_ctsrts_gpio30 = "/soc/gpio@7e200000/uart1_ctsrts_gpio30";
- uart1_gpio40 = "/soc/gpio@7e200000/uart1_gpio40";
- uart1_ctsrts_gpio42 = "/soc/gpio@7e200000/uart1_ctsrts_gpio42";
- dpi_18bit_gpio0 = "/soc/gpio@7e200000/dpi_18bit_gpio0";
- spi0_pins = "/soc/gpio@7e200000/spi0_pins";
- spi0_cs_pins = "/soc/gpio@7e200000/spi0_cs_pins";
- i2c0_pins = "/soc/gpio@7e200000/i2c0";
- i2c1_pins = "/soc/gpio@7e200000/i2c1";
- i2s_pins = "/soc/gpio@7e200000/i2s";
- sdio_pins = "/soc/gpio@7e200000/sdio_pins";
- bt_pins = "/soc/gpio@7e200000/bt_pins";
- uart0_pins = "/soc/gpio@7e200000/uart0_pins";
- uart1_pins = "/soc/gpio@7e200000/uart1_pins";
- audio_pins = "/soc/gpio@7e200000/audio_pins";
- uart0 = "/soc/serial@7e201000";
- sdhost = "/soc/mmc@7e202000";
- i2s = "/soc/i2s@7e203000";
- spi0 = "/soc/spi@7e204000";
- spi = "/soc/spi@7e204000";
- spidev0 = "/soc/spi@7e204000/spidev@0";
- spidev1 = "/soc/spi@7e204000/spidev@1";
- i2c0 = "/soc/i2c@7e205000";
- pixelvalve0 = "/soc/pixelvalve@7e206000";
- pixelvalve1 = "/soc/pixelvalve@7e207000";
- dpi = "/soc/dpi@7e208000";
- dsi0 = "/soc/dsi@7e209000";
- thermal = "/soc/thermal@7e212000";
- aux = "/soc/aux@0x7e215000";
- uart1 = "/soc/serial@7e215040";
- spi1 = "/soc/spi@7e215080";
- spi2 = "/soc/spi@7e2150c0";
- pwm = "/soc/pwm@7e20c000";
- hvs = "/soc/hvs@7e400000";
- dsi1 = "/soc/dsi@7e700000";
- csi0 = "/soc/csi0@7e800000";
- csi1 = "/soc/csi1@7e801000";
- i2c1 = "/soc/i2c@7e804000";
- i2c2 = "/soc/i2c@7e805000";
- vec = "/soc/vec@7e806000";
- pixelvalve2 = "/soc/pixelvalve@7e807000";
- hdmi = "/soc/hdmi@7e902000";
- usb = "/soc/usb@7e980000";
- ethernet = "/soc/usb@7e980000/usb1@1/usbether@1";
- v3d = "/soc/v3d@7ec00000";
- vc4 = "/soc/gpu";
- local_intc = "/soc/local_intc@40000000";
- mmc = "/soc/mmc@7e300000";
- firmwarekms = "/soc/firmwarekms@7e600000";
- smi = "/soc/smi@7e600000";
- axiperf = "/soc/axiperf";
- firmware = "/soc/firmware";
- power = "/soc/power";
- fb = "/soc/fb";
- vchiq = "/soc/vchiq";
- vcsm = "/soc/vcsm";
- audio = "/soc/audio";
- sound = "/soc/sound";
- virtgpio = "/soc/virtgpio";
- expgpio = "/soc/expgpio";
- clk_osc = "/clocks/clock@3";
- clk_usb = "/clocks/clock@4";
- usbphy = "/phy";
- cpus = "/cpus";
- cpu0 = "/cpus/cpu@0";
- cpu1 = "/cpus/cpu@1";
- cpu2 = "/cpus/cpu@2";
- cpu3 = "/cpus/cpu@3";
- vdd_5v0_reg = "/fixedregulator_5v0";
- vdd_3v3_reg = "/fixedregulator_3v3";
- leds = "/leds";
- act_led = "/leds/act";
- pwr_led = "/leds/pwr";
- };
-};
--
2.21.0.windows.1


[edk2-non-osi PATCHv2 0/1] Platform/RaspberryPi/RPi3: Use official Device Tree binaries

Pete Batard
 

v2 that clarifies licensing matters as well as the exact commit from
which we obtained the dtbs.

Pete Batard (1):
Platform/RaspberryPi/RPi3: Use official Device Tree binaries

Platform/RaspberryPi/RPi3/DeviceTree/Readme.md | 14 +
Platform/RaspberryPi/RPi3/DeviceTree/bcm2710-rpi-3-b-plus.dtb | Bin 25617 -> 27082 bytes
Platform/RaspberryPi/RPi3/DeviceTree/bcm2710-rpi-3-b-plus.dts | 1263 --------------------
Platform/RaspberryPi/RPi3/DeviceTree/bcm2710-rpi-3-b.dtb | Bin 25354 -> 26463 bytes
Platform/RaspberryPi/RPi3/DeviceTree/bcm2710-rpi-3-b.dts | 1259 -------------------
5 files changed, 14 insertions(+), 2522 deletions(-)
create mode 100644 Platform/RaspberryPi/RPi3/DeviceTree/Readme.md
delete mode 100644 Platform/RaspberryPi/RPi3/DeviceTree/bcm2710-rpi-3-b-plus.dts
delete mode 100644 Platform/RaspberryPi/RPi3/DeviceTree/bcm2710-rpi-3-b.dts

--
2.21.0.windows.1


Upcoming Event: TianoCore Design Meeting - APAC/NAMO - Thu, 09/19/2019 6:30pm-7:30pm #cal-reminder

devel@edk2.groups.io Calendar <devel@...>
 

Reminder: TianoCore Design Meeting - APAC/NAMO

When: Thursday, 19 September 2019, 6:30pm to 7:30pm, (GMT-07:00) America/Los Angeles

Where:https://zoom.us/j/969264410

View Event

Organizer: Stephano Cetola stephano.cetola@...

Description:

TOPIC
1. Python development process-coding standards (
30 mins) -  Kondal R Purma (Intel)

  Slides: Will update later.

Join Zoom Meeting

https://zoom.us/j/969264410

 

One tap mobile

+16465588656,,969264410# US (New York)

+17207072699,,969264410# US

 

Dial by your location

        +1 646 558 8656 US (New York)

        +1 720 707 2699 US

Meeting ID: 969 264 410

Find your local number: https://zoom.us/u/abOtdJckxL


Upcoming Event: TianoCore Bug Triage - APAC / NAMO - Thu, 09/19/2019 5:00pm-5:30pm #cal-reminder

devel@edk2.groups.io Calendar <devel@...>
 

Reminder: TianoCore Bug Triage - APAC / NAMO

When: Thursday, 19 September 2019, 5:00pm to 5:30pm, (GMT-07:00) America/Los Angeles

Where:https://zoom.us/j/251103409

View Event

Organizer: Stephano Cetola stephano.cetola@...

Description:

Join Zoom Meeting

https://zoom.us/j/251103409

 

One tap mobile

+17207072699,,251103409# US

+16465588656,,251103409# US (New York)

 

Dial by your location

        +1 720 707 2699 US

        +1 646 558 8656 US (New York)

Meeting ID: 251 103 409

Find your local number: https://zoom.us/u/acEIbOAUyA


Re: Polling Interval in MNP

Siyuan, Fu
 

Hi, Siva

 

The 10ms interval was chosen just by experience. This background polling intends to pick up the coming request (e.g. ARP request) when there is no active polling from upper layer. The ARP time out is 1 second, so using 10ms background polling make the network stack able to receive ARP request among 100 incoming package/second.

 

You can change this to a reasonable time for the inband network.

 

Best Regards

Siyuan

 

From: Sivaraman Nainar <sivaramann@...>
Sent: 2019910 17:17
To: devel@edk2.groups.io
Cc: Wu, Jiaxin <jiaxin.wu@...>; Fu, Siyuan <siyuan.fu@...>
Subject: reg: Polling Interval in MNP

 

Hi all:

 

In the Network Package, MNPDxe Driver has the timeout check in MnpCheckPacketTimeout() for the interval of 10 ms. This interval is OK when we have the On board / Add on network controllers.

 

In the cases of Network devices exposed via Inband (Virtual USB exposing network interfaces) when there is a packet read given to USB interfaces and it processed in lower level which could not provide the data within the 10 ms interval and it failed with timeout and communication failed when we perform the HTTP request.

 

Do we have any specific reason to have this as 10 ms? Do we have any max limit for this interval value?

 

-Siva


Re: [edk2-platforms][PATCH V2 1/1] Platform/Intel/Readme.md: Content update

Nate DeSimone
 

Reviewed-by: Nate DeSimone <@natedesimone>

-----Original Message-----
From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Kubacki, Michael A
Sent: Friday, September 13, 2019 7:09 PM
To: devel@edk2.groups.io
Cc: Agyeman, Prince <prince.agyeman@...>; Bi, Dandan <dandan.bi@...>; Chaganty, Rangasai V <rangasai.v.chaganty@...>; Chiu, Chasel <chasel.chiu@...>; Gao, Liming <liming.gao@...>; Desimone, Nathaniel L <@natedesimone>; Kinney, Michael D <michael.d.kinney@...>; Sinha, Ankit <ankit.sinha@...>; Wei, David Y <david.y.wei@...>
Subject: [edk2-devel] [edk2-platforms][PATCH V2 1/1] Platform/Intel/Readme.md: Content update

This change makes the following updates:
1. Add SimicsOpenBoardPkg details.
2. Update Python instructions to Python 3.x and mention
Python 2.x deprecation.
3. Add Linux build environment set up instructions.
4. Update supported compiler and tool versions to newer versions tested.
* Ubuntu build: 16.04.5 LTS to 18.04.1 LTS
* iASL: 20160527 to 20190816
* NASM: 2.11.08 to 2.12.02
5. Update ClevoOpenBoardPkg details.
6. Add instructions to build packages (e.g. AdvancedFeaturePkg).
6. Update Planned Activities and Ideas sections.

Cc: Agyeman Prince <prince.agyeman@...>
Cc: Dandan Bi <dandan.bi@...>
Cc: Sai Chaganty <rangasai.v.chaganty@...>
Cc: Chasel Chiu <chasel.chiu@...>
Cc: Liming Gao <liming.gao@...>
Cc: Nate DeSimone <@natedesimone>
Cc: Michael D Kinney <michael.d.kinney@...>
Cc: Ankit Sinha <ankit.sinha@...>
Cc: Wei David Y <david.y.wei@...>
Signed-off-by: Michael Kubacki <michael.a.kubacki@...>
---
Platform/Intel/Readme.md | 139 ++++++++++++++------
1 file changed, 101 insertions(+), 38 deletions(-)

diff --git a/Platform/Intel/Readme.md b/Platform/Intel/Readme.md index 3caf362983..7cf1321bb2 100644
--- a/Platform/Intel/Readme.md
+++ b/Platform/Intel/Readme.md
@@ -56,8 +56,43 @@ A UEFI firmware implementation using MinPlatformPkg is constructed using the fol
* The `ClevoOpenBoardPkg` contains board implementations for Clevo systems.
* The `KabylakeOpenBoardPkg` contains board implementations for Kaby Lake systems.
* The `PurleyOpenBoardPkg` contains board implementations for Purley systems.
+* The `SimicsOpenBoardPkg` contains board implementations for the Simics hardware simulator.
* The `WhiskeylakeOpenBoardPkg` contains board implementations for Whiskey Lake systems.

+### **Supported Hardware**
+
+#### Intel
+
+***Intel Reference and Validation Platform***
+
+| Machine Name | Supported Chipsets | BoardPkg | Board Name |
+----------------------------------------|--------------------------------------------|------------------------------|--------------------|
+| RVP 3 | Sky Lake, Kaby Lake, Kaby Lake Refresh | KabylakeOpenBoardPkg | KabylakeRvp3 |
+| WHL-U DDR4 RVP | Whiskey Lake | WhiskeylakeOpenBoardPkg | WhiskeylakeURvp |
+
+*Note: RVP = Reference and Validation Platform*
+
+#### Microsoft
+
+| Machine Name | Supported Chipsets | BoardPkg | Board Name |
+----------------------------------------|--------------------------------------------|------------------------------|--------------------|
+| Mt. Olympus | Purley | PurleyOpenBoardPkg | BoardMtOlympus |
+
+#### Simics
+
+| Machine Name | Supported Chipsets | BoardPkg | Board Name |
+----------------------------------------|--------------------------------------------|------------------------------|--------------------|
+| Simics Quick Start Package | Nehalem | SimicsOpenBoardPkg | BoardX58Ich10 |
+
+#### System 76
+
+***Galago Pro Laptop***
+
+| Machine Name | Supported Chipsets | BoardPkg | Board Name |
+----------------------------------------|--------------------------------------------|------------------------------|--------------------|
+| galp2 (Clevo N130BU) | Kaby Lake | ClevoOpenBoardPkg | N1xxWU |
+| galp3 & galp3-b (Clevo N1xxWU series) | Kaby Lake Refresh | ClevoOpenBoardPkg | N1xxWU |
+
## Board Package Organization
The board package follows the standard EDK II package structure with the following additional elements and guidelines:
* Only code usable across more than one board at the root level.
@@ -83,10 +118,19 @@ return back to the minimum platform caller.
- Install into ```C:\ASL``` to match default tools_def.txt configuration.
* NASM assembler: Available from: http://www.nasm.us/
- Install into ```C:\NASM``` to match default tools_def.txt configuration.
-* Python 2.7.6: Available from: https://www.python.org/download/releases/2.7.6/
- - Install into ```C:\Python27``` to match default tools_def.txt configuration.
- - Add C:\Python27 to your path
- - Other versions of 2.7 may also work fine.
+* Python 3.7.3: Available from:
+https://www.python.org/downloads/release/python-373/
+ - Other versions of Python 3.x should be compatible.
+ - It is recommended to use the Python launcher to ensure the Python build script is launched using Python 3.
+ - E.g. "py -3.7 build_bios.py -l"
+
+## **Linux Build Instructions**
+
+### Pre-requisites
+
+ * Set up a EDK II build environment for Linux following the instructions in
+ [Using EDK II with Native GCC](https://github.com/tianocore/tianocore.github.io/wiki/Using-EDK-II-with-Native-GCC).
+ * Proceed to the [Common EDK II build instructions for Linux](https://github.com/tianocore/tianocore.github.io/wiki/Common-instructions)
+ to verify your basic EDK II build environment is set up properly.

### Download the required components

@@ -106,11 +150,11 @@ return back to the minimum platform caller.
* FSP repository
* ``git clone https://github.com/IntelFsp/FSP.git``

-### Build
+### Board Builds

**Building with the python script**

-1. Open command window, go to the workspace directory, e.g. c:\Kabylake or ~/Kabylake in the case of a linux OS
+1. Open command window, go to the workspace directory, e.g.
+c:\Edk2Workspace or ~/Edk2Workspace in the case of a linux OS
2. If using a linux OS
* Type "cd edk2"
* Type "source edksetup.sh"
@@ -146,11 +190,19 @@ return back to the minimum platform caller.
* Type "python build_bios.py -h"

* Note
- * Python 2.7.16 and Python 3.7.3 compatible
- * Some dependency Python scripts might only support 2.x or 3.x, if that happened use
- "py -2" or "py -3" to launch build_bios.py
- * This python build script has been tested on Windows 10 and Ubuntu 16.04.5 LTS
- * See [cross-platform limitations](#Known-limitations)
+ * The Python build scripts were compatible with Python 2.7.16. But Python 2.x support is no longer maintained or recommended.
+
+ * This python build script has been tested on Windows 10 and Ubuntu 18.04.1 LTS.
+
+ * Unless otherwise noted, all boards build with the following components and versions:
+ * Linux build: Ubuntu 18.04.1 LTS with GCC version 5.4.0
+ * Windows build: Windows 10 with the Microsoft Visual Studio 2015 compiler
+ * iASL version: 20190816
+ * NASM version: 2.12.02
+
+ * Unless otherwise noted all boards have been tested for boot to Windows 10 x64 RS3.
+
+ * See [known limitations](#Known-limitations)

* Configuration Files
* The edk2-platforms\Platform\Intel\build.cfg file contains the default settings used by build_bios.py @@ -185,6 +237,7 @@ return back to the minimum platform caller.
| | | | build settings, environment variables.
| | | |---build_board.py: Optional board-specific pre-build, build
| | | and clean post-build functions.
+ | | |
| | |------PurleyOpenBoardPkg
| | | |------BoardMtOlympus
| | | |---build_config.cfg: BoardMtOlympus specific
@@ -192,19 +245,26 @@ return back to the minimum platform caller.
| | | |---build_board.py: Optional board-specific pre-build,
| | | build, post-build and clean functions.
| | |
+ | | |------SimicsOpenBoardPkg
+ | | | |------BoardX58Ich10
+ | | | |---build_config.cfg: BoardX58Ich10 specific
+ | | | | build settings, environment variables.
+ | | |
| | |------WhiskeylakeOpenBoardPkg
| | | |------WhiskeylakeURvp
| | | |---build_config.cfg: WhiskeylakeURvp specific build
| | | settings environment variables.
+ | | |
|------FSP
</pre>

**Building with the batch scripts**
+
Only PurleyOpenBoardPkg still supports batch script build. Future board packages must only use the Python build infrastructure.

For PurleyOpenBoardPkg
-1. Open command window, go to the workspace directory, e.g. c:\Purley.
+1. Open command window, go to the workspace directory, e.g. c:\Edk2Workspace.
2. Type "cd edk2-platforms\Platform\Intel\PurleyOpenBoardPkg\BoardMtOlympus".
3. Type "GitEdk2MinMtOlympus.bat" to setup GIT environment.
4. Type "bld" to build Purley Mt Olympus board UEFI firmware image, "bld release" for release build, "bld clean" to @@ -212,40 +272,43 @@ For PurleyOpenBoardPkg
"bld cache-consume" Consume a cache of binary files from the specified directory, BINARY_CACHE_PATH is empty,
used "BinCache" as default path.

-The validated version of iasl compiler that can build MinPurley is 20180629. Older version may generate ACPI build
+The validated version of iASL compiler that can build MinPurley is
+20180629. Older version may generate ACPI build
errors.

### **Known limitations**

**ClevoOpenBoardPkg**
-1. Currently, support is only being added for the N1xxWU series of boards.
-2. The Windows build was tested on Windows 10 with Microsoft Visual Studio 2015 compiler.
-3. The Linux build was tested on Ubuntu 16.04.5 LTS with GCC version 5.4.0.
-4. The build was tested with NASM version 2.11.08.
-5. The firmware project has not been tested on an actual board, it *should not* be expected to boot.
-6. The firmware project applies to all Clevo supported board configurations but is only being tested on System 76 Galago
- Pro devices.
+1. The firmware project has not been tested on the Galago Pro 3B.

**KabylakeOpenBoardPkg**
-1. This firmware project has only been tested on the Intel KabylakeRvp3 board.
-2. This firmware project has only been tested booting to Microsoft Windows 10 x64 with AHCI mode and Integrated Graphic
- Device.
-3. The Windows build was tested on Windows 10 with Microsoft Visual Studio 2015.
-4. The Linux build was tested on Ubuntu 16.04.5 LTS with GCC version 5.4.0.
-5. The build was tested with NASM version 2.11.08.
+1. This firmware project has only been tested for Microsoft Windows 10 x64 boot with AHCI mode and Integrated Graphic
+ Device.

**PurleyOpenBoardPkg**
-1. This firmware project has only been tested on the Microsoft MtOlympus board.
-2. This firmware project has only been tested booting to Microsoft Windows Server 2016 with NVME on M.2 slot.
-3. This firmware project build has only been tested using the Microsoft Visual Studio 2015 compiler.
+1. This firmware project has only been tested booting to Microsoft Windows Server 2016 with NVME on M.2 slot.
+2. This firmware project does not build with the GCC compiler.
+3. This firmware project does not build with the Python build script infrastructure.
+
+**SimicsOpenBoardPkg**
+1. This firmware project has only been tested booting to Microsoft Windows 10 x64 and Ubuntu 17.10 with AHCI mode.

**WhiskeylakeOpenBoardPkg**
-1. This firmware project has only been tested on the Intel WhiskeylakeURvp board.
-2. This firmware project has only been tested booting to Microsoft Windows 10 x64 with AHCI mode and Integrated Graphic
- Device.
-3. The Windows build was tested on Windows 10 with Microsoft Visual Studio 2015.
-4. The Linux build was tested on Ubuntu 16.04.5 LTS with GCC version 5.4.0.
-5. The build was tested with NASM version 2.11.08.
+1. This firmware project has only been tested booting to Microsoft Windows 10 x64 with AHCI mode and Integrated Graphic
+ Device.
+
+### **Package Builds**
+
+In some cases, such as AdvancedFeaturePkg, a package may provide a set
+of functionality that is included in other packages. To test the build of the whole package, the "build" command should be used following the instructions below.
+
+1. Execute edksetup.bat (Windows) or edksetup.sh (Linux).
+2. Verify the "WORKSPACE" environment variable is set to the edk2 directory in your workspace.
+3. Set the "PACKAGES_PATH" enviornment variable to include the edk2-platforms/Platform/Intel and edk2-platforms/Silicon/Intel
+ directories.
+ * Windows example: set
+PACKAGES_PATH=c:\Edk2Workspace\edk2-platforms\Platform\Intel;c:\Edk2Wor
+kspace\edk2-platforms\Silicon\Intel
+4. Build the package by specifying the package DSC as the platform build target from the Platform/Intel or Silicon/Intel directory:
+ "build -p AdvancedFeaturePkg/AdvancedFeaturePkg.dsc"
+

### **Firmware Image Flashing**

@@ -259,14 +322,14 @@ that authenticates the initial firmware boot image such as Boot Guard, it will f that is not signed properly.

### **Planned Activities**
-* Replace the batch build scripts with cross-platform Python build scripts.
-* Publish a Minimum Platform specification to describe the architecture and interfaces in more detail.
+* Expand Intel's open source platform code presence through new platform and board support.
+* Expand advanced feature code and quality.
+* Support open source community continuous integration for Minimum Platform compliant boards.

### **Ideas**
If you would like to help but are not sure where to start some areas currently identified for improvement include:
* Adding board ports for more motherboards and systems
* Adding Clang support
- * Adding GCC support

Please feel free to contact Michael Kubacki (michael.a.kubacki at intel.com) and Isaac Oram (isaac.w.oram at intel.com) if you would like to discuss contribution ideas.
--
2.16.2.windows.1


[edk2-platforms][PATCH V2 1/1] Platform/Intel/Readme.md: Content update

Kubacki, Michael A
 

This change makes the following updates:
1. Add SimicsOpenBoardPkg details.
2. Update Python instructions to Python 3.x and mention
Python 2.x deprecation.
3. Add Linux build environment set up instructions.
4. Update supported compiler and tool versions to newer versions tested.
* Ubuntu build: 16.04.5 LTS to 18.04.1 LTS
* iASL: 20160527 to 20190816
* NASM: 2.11.08 to 2.12.02
5. Update ClevoOpenBoardPkg details.
6. Add instructions to build packages (e.g. AdvancedFeaturePkg).
6. Update Planned Activities and Ideas sections.

Cc: Agyeman Prince <prince.agyeman@...>
Cc: Dandan Bi <dandan.bi@...>
Cc: Sai Chaganty <rangasai.v.chaganty@...>
Cc: Chasel Chiu <chasel.chiu@...>
Cc: Liming Gao <liming.gao@...>
Cc: Nate DeSimone <@natedesimone>
Cc: Michael D Kinney <michael.d.kinney@...>
Cc: Ankit Sinha <ankit.sinha@...>
Cc: Wei David Y <david.y.wei@...>
Signed-off-by: Michael Kubacki <michael.a.kubacki@...>
---
Platform/Intel/Readme.md | 139 ++++++++++++++------
1 file changed, 101 insertions(+), 38 deletions(-)

diff --git a/Platform/Intel/Readme.md b/Platform/Intel/Readme.md
index 3caf362983..7cf1321bb2 100644
--- a/Platform/Intel/Readme.md
+++ b/Platform/Intel/Readme.md
@@ -56,8 +56,43 @@ A UEFI firmware implementation using MinPlatformPkg is constructed using the fol
* The `ClevoOpenBoardPkg` contains board implementations for Clevo systems.
* The `KabylakeOpenBoardPkg` contains board implementations for Kaby Lake systems.
* The `PurleyOpenBoardPkg` contains board implementations for Purley systems.
+* The `SimicsOpenBoardPkg` contains board implementations for the Simics hardware simulator.
* The `WhiskeylakeOpenBoardPkg` contains board implementations for Whiskey Lake systems.

+### **Supported Hardware**
+
+#### Intel
+
+***Intel Reference and Validation Platform***
+
+| Machine Name | Supported Chipsets | BoardPkg | Board Name |
+----------------------------------------|--------------------------------------------|------------------------------|--------------------|
+| RVP 3 | Sky Lake, Kaby Lake, Kaby Lake Refresh | KabylakeOpenBoardPkg | KabylakeRvp3 |
+| WHL-U DDR4 RVP | Whiskey Lake | WhiskeylakeOpenBoardPkg | WhiskeylakeURvp |
+
+*Note: RVP = Reference and Validation Platform*
+
+#### Microsoft
+
+| Machine Name | Supported Chipsets | BoardPkg | Board Name |
+----------------------------------------|--------------------------------------------|------------------------------|--------------------|
+| Mt. Olympus | Purley | PurleyOpenBoardPkg | BoardMtOlympus |
+
+#### Simics
+
+| Machine Name | Supported Chipsets | BoardPkg | Board Name |
+----------------------------------------|--------------------------------------------|------------------------------|--------------------|
+| Simics Quick Start Package | Nehalem | SimicsOpenBoardPkg | BoardX58Ich10 |
+
+#### System 76
+
+***Galago Pro Laptop***
+
+| Machine Name | Supported Chipsets | BoardPkg | Board Name |
+----------------------------------------|--------------------------------------------|------------------------------|--------------------|
+| galp2 (Clevo N130BU) | Kaby Lake | ClevoOpenBoardPkg | N1xxWU |
+| galp3 & galp3-b (Clevo N1xxWU series) | Kaby Lake Refresh | ClevoOpenBoardPkg | N1xxWU |
+
## Board Package Organization
The board package follows the standard EDK II package structure with the following additional elements and guidelines:
* Only code usable across more than one board at the root level.
@@ -83,10 +118,19 @@ return back to the minimum platform caller.
- Install into ```C:\ASL``` to match default tools_def.txt configuration.
* NASM assembler: Available from: http://www.nasm.us/
- Install into ```C:\NASM``` to match default tools_def.txt configuration.
-* Python 2.7.6: Available from: https://www.python.org/download/releases/2.7.6/
- - Install into ```C:\Python27``` to match default tools_def.txt configuration.
- - Add C:\Python27 to your path
- - Other versions of 2.7 may also work fine.
+* Python 3.7.3: Available from: https://www.python.org/downloads/release/python-373/
+ - Other versions of Python 3.x should be compatible.
+ - It is recommended to use the Python launcher to ensure the Python build script is launched using Python 3.
+ - E.g. "py -3.7 build_bios.py -l"
+
+## **Linux Build Instructions**
+
+### Pre-requisites
+
+ * Set up a EDK II build environment for Linux following the instructions in
+ [Using EDK II with Native GCC](https://github.com/tianocore/tianocore.github.io/wiki/Using-EDK-II-with-Native-GCC).
+ * Proceed to the [Common EDK II build instructions for Linux](https://github.com/tianocore/tianocore.github.io/wiki/Common-instructions)
+ to verify your basic EDK II build environment is set up properly.

### Download the required components

@@ -106,11 +150,11 @@ return back to the minimum platform caller.
* FSP repository
* ``git clone https://github.com/IntelFsp/FSP.git``

-### Build
+### Board Builds

**Building with the python script**

-1. Open command window, go to the workspace directory, e.g. c:\Kabylake or ~/Kabylake in the case of a linux OS
+1. Open command window, go to the workspace directory, e.g. c:\Edk2Workspace or ~/Edk2Workspace in the case of a linux OS
2. If using a linux OS
* Type "cd edk2"
* Type "source edksetup.sh"
@@ -146,11 +190,19 @@ return back to the minimum platform caller.
* Type "python build_bios.py -h"

* Note
- * Python 2.7.16 and Python 3.7.3 compatible
- * Some dependency Python scripts might only support 2.x or 3.x, if that happened use
- "py -2" or "py -3" to launch build_bios.py
- * This python build script has been tested on Windows 10 and Ubuntu 16.04.5 LTS
- * See [cross-platform limitations](#Known-limitations)
+ * The Python build scripts were compatible with Python 2.7.16. But Python 2.x support is no longer maintained or recommended.
+
+ * This python build script has been tested on Windows 10 and Ubuntu 18.04.1 LTS.
+
+ * Unless otherwise noted, all boards build with the following components and versions:
+ * Linux build: Ubuntu 18.04.1 LTS with GCC version 5.4.0
+ * Windows build: Windows 10 with the Microsoft Visual Studio 2015 compiler
+ * iASL version: 20190816
+ * NASM version: 2.12.02
+
+ * Unless otherwise noted all boards have been tested for boot to Windows 10 x64 RS3.
+
+ * See [known limitations](#Known-limitations)

* Configuration Files
* The edk2-platforms\Platform\Intel\build.cfg file contains the default settings used by build_bios.py
@@ -185,6 +237,7 @@ return back to the minimum platform caller.
| | | | build settings, environment variables.
| | | |---build_board.py: Optional board-specific pre-build, build
| | | and clean post-build functions.
+ | | |
| | |------PurleyOpenBoardPkg
| | | |------BoardMtOlympus
| | | |---build_config.cfg: BoardMtOlympus specific
@@ -192,19 +245,26 @@ return back to the minimum platform caller.
| | | |---build_board.py: Optional board-specific pre-build,
| | | build, post-build and clean functions.
| | |
+ | | |------SimicsOpenBoardPkg
+ | | | |------BoardX58Ich10
+ | | | |---build_config.cfg: BoardX58Ich10 specific
+ | | | | build settings, environment variables.
+ | | |
| | |------WhiskeylakeOpenBoardPkg
| | | |------WhiskeylakeURvp
| | | |---build_config.cfg: WhiskeylakeURvp specific build
| | | settings environment variables.
+ | | |
|------FSP
</pre>

**Building with the batch scripts**
+
Only PurleyOpenBoardPkg still supports batch script build. Future board packages must only use the Python build
infrastructure.

For PurleyOpenBoardPkg
-1. Open command window, go to the workspace directory, e.g. c:\Purley.
+1. Open command window, go to the workspace directory, e.g. c:\Edk2Workspace.
2. Type "cd edk2-platforms\Platform\Intel\PurleyOpenBoardPkg\BoardMtOlympus".
3. Type "GitEdk2MinMtOlympus.bat" to setup GIT environment.
4. Type "bld" to build Purley Mt Olympus board UEFI firmware image, "bld release" for release build, "bld clean" to
@@ -212,40 +272,43 @@ For PurleyOpenBoardPkg
"bld cache-consume" Consume a cache of binary files from the specified directory, BINARY_CACHE_PATH is empty,
used "BinCache" as default path.

-The validated version of iasl compiler that can build MinPurley is 20180629. Older version may generate ACPI build
+The validated version of iASL compiler that can build MinPurley is 20180629. Older version may generate ACPI build
errors.

### **Known limitations**

**ClevoOpenBoardPkg**
-1. Currently, support is only being added for the N1xxWU series of boards.
-2. The Windows build was tested on Windows 10 with Microsoft Visual Studio 2015 compiler.
-3. The Linux build was tested on Ubuntu 16.04.5 LTS with GCC version 5.4.0.
-4. The build was tested with NASM version 2.11.08.
-5. The firmware project has not been tested on an actual board, it *should not* be expected to boot.
-6. The firmware project applies to all Clevo supported board configurations but is only being tested on System 76 Galago
- Pro devices.
+1. The firmware project has not been tested on the Galago Pro 3B.

**KabylakeOpenBoardPkg**
-1. This firmware project has only been tested on the Intel KabylakeRvp3 board.
-2. This firmware project has only been tested booting to Microsoft Windows 10 x64 with AHCI mode and Integrated Graphic
- Device.
-3. The Windows build was tested on Windows 10 with Microsoft Visual Studio 2015.
-4. The Linux build was tested on Ubuntu 16.04.5 LTS with GCC version 5.4.0.
-5. The build was tested with NASM version 2.11.08.
+1. This firmware project has only been tested for Microsoft Windows 10 x64 boot with AHCI mode and Integrated Graphic
+ Device.

**PurleyOpenBoardPkg**
-1. This firmware project has only been tested on the Microsoft MtOlympus board.
-2. This firmware project has only been tested booting to Microsoft Windows Server 2016 with NVME on M.2 slot.
-3. This firmware project build has only been tested using the Microsoft Visual Studio 2015 compiler.
+1. This firmware project has only been tested booting to Microsoft Windows Server 2016 with NVME on M.2 slot.
+2. This firmware project does not build with the GCC compiler.
+3. This firmware project does not build with the Python build script infrastructure.
+
+**SimicsOpenBoardPkg**
+1. This firmware project has only been tested booting to Microsoft Windows 10 x64 and Ubuntu 17.10 with AHCI mode.

**WhiskeylakeOpenBoardPkg**
-1. This firmware project has only been tested on the Intel WhiskeylakeURvp board.
-2. This firmware project has only been tested booting to Microsoft Windows 10 x64 with AHCI mode and Integrated Graphic
- Device.
-3. The Windows build was tested on Windows 10 with Microsoft Visual Studio 2015.
-4. The Linux build was tested on Ubuntu 16.04.5 LTS with GCC version 5.4.0.
-5. The build was tested with NASM version 2.11.08.
+1. This firmware project has only been tested booting to Microsoft Windows 10 x64 with AHCI mode and Integrated Graphic
+ Device.
+
+### **Package Builds**
+
+In some cases, such as AdvancedFeaturePkg, a package may provide a set of functionality that is included in other
+packages. To test the build of the whole package, the "build" command should be used following the instructions below.
+
+1. Execute edksetup.bat (Windows) or edksetup.sh (Linux).
+2. Verify the "WORKSPACE" environment variable is set to the edk2 directory in your workspace.
+3. Set the "PACKAGES_PATH" enviornment variable to include the edk2-platforms/Platform/Intel and edk2-platforms/Silicon/Intel
+ directories.
+ * Windows example: set PACKAGES_PATH=c:\Edk2Workspace\edk2-platforms\Platform\Intel;c:\Edk2Workspace\edk2-platforms\Silicon\Intel
+4. Build the package by specifying the package DSC as the platform build target from the Platform/Intel or Silicon/Intel directory:
+ "build -p AdvancedFeaturePkg/AdvancedFeaturePkg.dsc"
+

### **Firmware Image Flashing**

@@ -259,14 +322,14 @@ that authenticates the initial firmware boot image such as Boot Guard, it will f
that is not signed properly.

### **Planned Activities**
-* Replace the batch build scripts with cross-platform Python build scripts.
-* Publish a Minimum Platform specification to describe the architecture and interfaces in more detail.
+* Expand Intel's open source platform code presence through new platform and board support.
+* Expand advanced feature code and quality.
+* Support open source community continuous integration for Minimum Platform compliant boards.

### **Ideas**
If you would like to help but are not sure where to start some areas currently identified for improvement include:
* Adding board ports for more motherboards and systems
* Adding Clang support
- * Adding GCC support

Please feel free to contact Michael Kubacki (michael.a.kubacki at intel.com) and Isaac Oram (isaac.w.oram at intel.com)
if you would like to discuss contribution ideas.
--
2.16.2.windows.1


Re: [edk2-platforms][PATCH V1 1/1] Platform/Intel/Readme.md: Content update

Nate DeSimone
 

Hi Michael, Comments below.

On 9/13/2019 2:41 PM, Kubacki, Michael A wrote:
This change makes the following updates:
1. Add SimicsOpenBoardPkg details.
2. Update Python instructions to Python 3.x and mention
Python 2.x deprecation.
3. Add Linux build environment set up instructions.
4. Update supported compiler and tool versions to newer versions tested.
* Ubuntu build: 16.04.5 LTS to 18.04.1 LTS
* iASL: 20160527 to 20190816
* NASM: 2.11.08 to 2.12.02
5. Update ClevoOpenBoardPkg details.
6. Add instructions to build packages (e.g. AdvancedFeaturePkg).
6. Update Planned Activities and Ideas sections.

Cc: Agyeman Prince <prince.agyeman@...>
Cc: Dandan Bi <dandan.bi@...>
Cc: Sai Chaganty <rangasai.v.chaganty@...>
Cc: Chasel Chiu <chasel.chiu@...>
Cc: Liming Gao <liming.gao@...>
Cc: Nate DeSimone <@natedesimone>
Cc: Michael D Kinney <michael.d.kinney@...>
Cc: Ankit Sinha <ankit.sinha@...>
Cc: Wei David Y <david.y.wei@...>
Signed-off-by: Michael Kubacki <michael.a.kubacki@...>
---
Platform/Intel/Readme.md | 105 +++++++++++++-------
1 file changed, 71 insertions(+), 34 deletions(-)

diff --git a/Platform/Intel/Readme.md b/Platform/Intel/Readme.md
index 3caf362983..334c61e037 100644
--- a/Platform/Intel/Readme.md
+++ b/Platform/Intel/Readme.md
@@ -56,6 +56,7 @@ A UEFI firmware implementation using MinPlatformPkg is constructed using the fol
* The `ClevoOpenBoardPkg` contains board implementations for Clevo systems.
* The `KabylakeOpenBoardPkg` contains board implementations for Kaby Lake systems.
* The `PurleyOpenBoardPkg` contains board implementations for Purley systems.
+* The `SimicsOpenBoardPkg` contains board implementations for the Simics hardware simulator.
* The `WhiskeylakeOpenBoardPkg` contains board implementations for Whiskey Lake systems.

## Board Package Organization
@@ -83,10 +84,19 @@ return back to the minimum platform caller.
- Install into ```C:\ASL``` to match default tools_def.txt configuration.
* NASM assembler: Available from: http://www.nasm.us/
- Install into ```C:\NASM``` to match default tools_def.txt configuration.
-* Python 2.7.6: Available from: https://www.python.org/download/releases/2.7.6/
- - Install into ```C:\Python27``` to match default tools_def.txt configuration.
- - Add C:\Python27 to your path
- - Other versions of 2.7 may also work fine.
+* Python 3.7.3: Available from: https://www.python.org/downloads/release/python-373/
+ - Other versions of Python 3.x should be compatible.
+ - It is recommended to use the Python launcher to ensure the Python build script is launched using Python 3.
+ - E.g. "py -3.7 build_bios.py -l"
+
+## **Linux Build Instructions**
+
+### Pre-requisites
+
+ * Set up a EDK II build environment for Linux following the instructions in
+ [Using EDK II with Native GCC](https://github.com/tianocore/tianocore.github.io/wiki/Using-EDK-II-with-Native-GCC).
+ * Proceed to the [Common EDK II build instructions for Linux](https://github.com/tianocore/tianocore.github.io/wiki/Common-instructions)
+ to verify your basic EDK II build environment is set up properly.

### Download the required components

@@ -106,11 +116,11 @@ return back to the minimum platform caller.
* FSP repository
* ``git clone https://github.com/IntelFsp/FSP.git``

-### Build
+### Board Builds

**Building with the python script**

-1. Open command window, go to the workspace directory, e.g. c:\Kabylake or ~/Kabylake in the case of a linux OS
+1. Open command window, go to the workspace directory, e.g. c:\Edk2Workspace or ~/Edk2Workspace in the case of a linux OS
2. If using a linux OS
* Type "cd edk2"
* Type "source edksetup.sh"
@@ -146,11 +156,19 @@ return back to the minimum platform caller.
* Type "python build_bios.py -h"

* Note
- * Python 2.7.16 and Python 3.7.3 compatible
- * Some dependency Python scripts might only support 2.x or 3.x, if that happened use
- "py -2" or "py -3" to launch build_bios.py
- * This python build script has been tested on Windows 10 and Ubuntu 16.04.5 LTS
- * See [cross-platform limitations](#Known-limitations)
+ * The Python build scripts were compatible with Python 2.7.16. But Python 2.x support is no longer maintained or recommended.
+
+ * This python build script has been tested on Windows 10 and Ubuntu 18.04.1 LTS.
+
+ * Unless otherwise noted, all boards build with the following components and versions:
+ * Linux build: Ubuntu 18.04.1 LTS with GCC version 5.4.0
+ * Windows build: Windows 10 with the Microsoft Visual Studio 2015 compiler
+ * iASL version: 20190816
+ * NASM version: 2.12.02
+
+ * Unless otherwise noted all boards have been tested for boot to Windows 10 x64 RS3.
+
+ * See [known limitations](#Known-limitations)

* Configuration Files
* The edk2-platforms\Platform\Intel\build.cfg file contains the default settings used by build_bios.py
@@ -185,6 +203,7 @@ return back to the minimum platform caller.
| | | | build settings, environment variables.
| | | |---build_board.py: Optional board-specific pre-build, build
| | | and clean post-build functions.
+ | | |
| | |------PurleyOpenBoardPkg
| | | |------BoardMtOlympus
| | | |---build_config.cfg: BoardMtOlympus specific
@@ -192,19 +211,26 @@ return back to the minimum platform caller.
| | | |---build_board.py: Optional board-specific pre-build,
| | | build, post-build and clean functions.
| | |
+ | | |------SimicsOpenBoardPkg
+ | | | |------BoardX58Ich10
+ | | | |---build_config.cfg: BoardX58Ich10 specific
+ | | | | build settings, environment variables.
+ | | |
| | |------WhiskeylakeOpenBoardPkg
| | | |------WhiskeylakeURvp
| | | |---build_config.cfg: WhiskeylakeURvp specific build
| | | settings environment variables.
+ | | |
|------FSP
</pre>

**Building with the batch scripts**
+
Only PurleyOpenBoardPkg still supports batch script build. Future board packages must only use the Python build
infrastructure.

For PurleyOpenBoardPkg
-1. Open command window, go to the workspace directory, e.g. c:\Purley.
+1. Open command window, go to the workspace directory, e.g. c:\Edk2Workspace.
2. Type "cd edk2-platforms\Platform\Intel\PurleyOpenBoardPkg\BoardMtOlympus".
3. Type "GitEdk2MinMtOlympus.bat" to setup GIT environment.
4. Type "bld" to build Purley Mt Olympus board UEFI firmware image, "bld release" for release build, "bld clean" to
@@ -212,40 +238,51 @@ For PurleyOpenBoardPkg
"bld cache-consume" Consume a cache of binary files from the specified directory, BINARY_CACHE_PATH is empty,
used "BinCache" as default path.

-The validated version of iasl compiler that can build MinPurley is 20180629. Older version may generate ACPI build
+The validated version of iASL compiler that can build MinPurley is 20180629. Older version may generate ACPI build
errors.
Please do not bury the list of supported hardware into the Known
Limitations sections. I would recommend that we add a "supported boards"
section... something similar to this:

### **Supported Hardware**

*Intel

  | Machine Name                          | Supported
Chipsets                     |BoardPkg to Use |
  |
--------------------------------------|----------------------------------------|--------------------------|
  | RVP 3                                 | Sky Lake, Kaby Lake, Kaby
Lake Refresh | KabyLakeOpenBoardPkg     |
  | WHL-U RVP     | Whiskey Lake |WhiskeyLakeOpenBoardPkg  |
|                                             |

Note: RVP = Reference and Validation Platform

* System 76

  * Galago Pro Laptop

  | Machine Name                          | Supported
Chipsets                     |BoardPkg to Use |
  |
--------------------------------------|----------------------------------------|--------------------------|
  | galp2 (Clevo N130BU)              | Kaby Lake |
ClevoOpenBoardPkg/N1xxWU |
  | galp3 & galp3-b (Clevo N1xxWU series) | Kaby Lake Refresh
              |ClevoOpenBoardPkg/N1xxWU |
|                                     |

* Microsoft

  | Machine Name                          | Supported
Chipsets                     |BoardPkg to Use |
  |
--------------------------------------|----------------------------------------|--------------------------|
  | Mt. Olympus                           | Purley |
PurleyOpenBoardPkg       |
|                                             |

### **Known limitations**

**ClevoOpenBoardPkg**
1. Currently, support is only being added for the N1xxWU series of boards.
-2. The Windows build was tested on Windows 10 with Microsoft Visual Studio 2015 compiler.
-3. The Linux build was tested on Ubuntu 16.04.5 LTS with GCC version 5.4.0.
-4. The build was tested with NASM version 2.11.08.
-5. The firmware project has not been tested on an actual board, it *should not* be expected to boot.
-6. The firmware project applies to all Clevo supported board configurations but is only being tested on System 76 Galago
- Pro devices.
+2. The firmware project has not been tested on the System 76 Galago Pro 2 and System 76 Galago Pro 3-B.
+3. The firmware project applies to all Clevo supported board configurations but is only being tested on System 76 Galago
+ Pro devices.

**KabylakeOpenBoardPkg**
-1. This firmware project has only been tested on the Intel KabylakeRvp3 board.
-2. This firmware project has only been tested booting to Microsoft Windows 10 x64 with AHCI mode and Integrated Graphic
- Device.
-3. The Windows build was tested on Windows 10 with Microsoft Visual Studio 2015.
-4. The Linux build was tested on Ubuntu 16.04.5 LTS with GCC version 5.4.0.
-5. The build was tested with NASM version 2.11.08.
+1. This firmware project has only been tested on the Intel Kaby Lake 3 RVP board.
+2. This firmware project has only been tested for Microsoft Windows 10 x64 boot with AHCI mode and Integrated Graphic
+ Device.

**PurleyOpenBoardPkg**
-1. This firmware project has only been tested on the Microsoft MtOlympus board.
+1. This firmware project has only been tested on the Microsoft Mt. Olympus board.
2. This firmware project has only been tested booting to Microsoft Windows Server 2016 with NVME on M.2 slot.
-3. This firmware project build has only been tested using the Microsoft Visual Studio 2015 compiler.
+3. This firmware project does not build with the GCC compiler.
+4. This firmware project does not build with the Python build script infrastructure.
+
+**SimicsOpenBoardPkg**
+1. This firmware project has only been tested with the Simics Quick Start Package.
+2. This firmware project has only been tested booting to Microsoft Windows 10 x64 and Ubuntu 17.10 with AHCI mode and
+ Integrated Graphic Device.

**WhiskeylakeOpenBoardPkg**
-1. This firmware project has only been tested on the Intel WhiskeylakeURvp board.
+1. This firmware project has only been tested on the Intel Whiskey Lake U DDR4 RVP board.
2. This firmware project has only been tested booting to Microsoft Windows 10 x64 with AHCI mode and Integrated Graphic
Device.
-3. The Windows build was tested on Windows 10 with Microsoft Visual Studio 2015.
-4. The Linux build was tested on Ubuntu 16.04.5 LTS with GCC version 5.4.0.
-5. The build was tested with NASM version 2.11.08.
+
+### **Package Builds**
+
+In some cases, such as AdvancedFeaturePkg, a package may provide a set of functionality that is included in other
+packages. To test the build of the whole package, the "build" command should be used following the instructions below.
+
+1. Execute edksetup.bat (Windows) or edksetup.sh (Linux).
+2. Verify the "WORKSPACE" environment variable is set to the edk2 directory in your workspace.
+3. Set the "PACKAGES_PATH" enviornment variable to include the edk2-platforms/Platform/Intel and edk2-platforms/Silicon/Intel
+ directories.
+ * Windows example: set PACKAGES_PATH=c:\Edk2Workspace\edk2-platforms\Platform\Intel;c:\Edk2Workspace\edk2-platforms\Silicon\Intel
+4. Build the package by specifying the package DSC as the platform build target from the Platform/Intel or Silicon/Intel directory:
+ "build -p AdvancedFeaturePkg/AdvancedFeaturePkg.dsc"
+

### **Firmware Image Flashing**

@@ -259,14 +296,14 @@ that authenticates the initial firmware boot image such as Boot Guard, it will f
that is not signed properly.

### **Planned Activities**
-* Replace the batch build scripts with cross-platform Python build scripts.
-* Publish a Minimum Platform specification to describe the architecture and interfaces in more detail.
+* Expand Intel's open source platform code presence through new platform and board support.
+* Expand advanced feature code and quality.
+* Support open source community continuous integration for Minimum Platform compliant boards.

### **Ideas**
If you would like to help but are not sure where to start some areas currently identified for improvement include:
* Adding board ports for more motherboards and systems
* Adding Clang support
- * Adding GCC support

Please feel free to contact Michael Kubacki (michael.a.kubacki at intel.com) and Isaac Oram (isaac.w.oram at intel.com)
if you would like to discuss contribution ideas.


Re: [PATCH] MinPlatformPkg/TestPointCheckLib: Add check for pointers

Nate DeSimone
 

Hi Shenglei,

Looking at this patch more closely. There appear to be bugs... please
see below. Please fix this along with your poor use of semi-colons and
white-space.

Thanks,

Nate

On 9/12/2019 11:54 AM, Nate DeSimone wrote:
Your whitespace doesn't quite match the edk2 coding style guidelines, but we can fix that during commit.

Reviewed-by: Nate DeSimone <@natedesimone>

-----Original Message-----
From: Zhang, Shenglei
Sent: Wednesday, September 11, 2019 7:55 PM
To: devel@edk2.groups.io
Cc: Kubacki, Michael A <michael.a.kubacki@...>; Chiu, Chasel <chasel.chiu@...>; Desimone, Nathaniel L <@natedesimone>; Gao, Liming <liming.gao@...>
Subject: [PATCH] MinPlatformPkg/TestPointCheckLib: Add check for pointers

In DxeCheckBootVariable.c, add check for BootOrder and Variable that return EFI_NOT_FOUND when they are NULL.
In DxeCheckGcd.c, add check for GcdIoMap to ensure it not NULL when allocating memory to what it points to.

Cc: Michael Kubacki <michael.a.kubacki@...>
Cc: Chasel Chiu <chasel.chiu@...>
Cc: Nate DeSimone <@natedesimone>
Cc: Liming Gao <liming.gao@...>
Signed-off-by: Shenglei Zhang <shenglei.zhang@...>
---

v2: Update copyright

.../Test/Library/TestPointCheckLib/DxeCheckBootVariable.c | 8 +++++++-
.../Test/Library/TestPointCheckLib/DxeCheckGcd.c | 6 ++++--
2 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/Platform/Intel/MinPlatformPkg/Test/Library/TestPointCheckLib/DxeCheckBootVariable.c b/Platform/Intel/MinPlatformPkg/Test/Library/TestPointCheckLib/DxeCheckBootVariable.c
index 85bd5b3d..98130683 100644
--- a/Platform/Intel/MinPlatformPkg/Test/Library/TestPointCheckLib/DxeCheckBootVariable.c
+++ b/Platform/Intel/MinPlatformPkg/Test/Library/TestPointCheckLib/DxeCh
+++ eckBootVariable.c
@@ -1,6 +1,6 @@
/** @file

-Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2017-2019, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent

**/
@@ -130,6 +130,9 @@ TestPointCheckLoadOptionVariable (
for (ListIndex = 0; ListIndex < sizeof(mLoadOptionVariableList)/sizeof(mLoadOptionVariableList[0]); ListIndex++) {
UnicodeSPrint (BootOrderName, sizeof(BootOrderName), L"%sOrder", mLoadOptionVariableList[ListIndex]);
Status = GetVariable2 (BootOrderName, &gEfiGlobalVariableGuid, (VOID **)&BootOrder, &OrderSize);
+ if(BootOrder == NULL) {
+ return EFI_NOT_FOUND;;
+ }
if (EFI_ERROR(Status)) {
continue;
}
@@ -222,6 +225,9 @@ TestPointCheckKeyOptionVariable (
for (Index = 0; ; Index++) {
UnicodeSPrint (KeyOptionName, sizeof(KeyOptionName), L"%s%04x", mKeyOptionVariableList[ListIndex], Index);
Status = GetVariable2 (KeyOptionName, &gEfiGlobalVariableGuid, &Variable, &Size);
+ if(Variable == NULL) {
+ return EFI_NOT_FOUND;;
+ }
if (!EFI_ERROR(Status)) {
DumpKeyOption (KeyOptionName, Variable, Size);
} else {
diff --git a/Platform/Intel/MinPlatformPkg/Test/Library/TestPointCheckLib/DxeCheckGcd.c b/Platform/Intel/MinPlatformPkg/Test/Library/TestPointCheckLib/DxeCheckGcd.c
index 82709d44..c90b37f2 100644
--- a/Platform/Intel/MinPlatformPkg/Test/Library/TestPointCheckLib/DxeCheckGcd.c
+++ b/Platform/Intel/MinPlatformPkg/Test/Library/TestPointCheckLib/DxeCh
+++ eckGcd.c
@@ -1,6 +1,6 @@
/** @file

-Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2017-2019, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent

**/
@@ -241,7 +241,9 @@ TestPointDumpGcd (
}
}
if (GcdMemoryMap != NULL) {
- *GcdIoMap = AllocateCopyPool (NumberOfDescriptors * sizeof(EFI_GCD_IO_SPACE_DESCRIPTOR), IoMap);
+ if (GcdIoMap != NULL){
+ *GcdIoMap = AllocateCopyPool (NumberOfDescriptors * sizeof(EFI_GCD_IO_SPACE_DESCRIPTOR), IoMap);
+ }
GcdIoMap will always be NULL. Please see line 199 of this file. I
believe your patch is introducing a new bug.

*GcdIoMapNumberOfDescriptors = NumberOfDescriptors;
}
}
--
2.18.0.windows.1




Re: [Patch V2] UefiCpuPkg/CpuExceptionHandlerLib: Fix #AC split lock #ac

John E Lofgren
 

Hi Laszlo,
2. Yes, I can change commit message/comments to separate split lock and #AC.
3. Yes it’s a close platform that is enabling #AC which hits double fault because split lock inside CpuExceptionHandlerLib.

Code:
I was wondering same thing, why are they using locking mechanism. I wasn’t sure so that’s why keep xchg instead of changing to mov. I have yet to think of any reasons. I think it's a good idea to use mov instead it accomplishes the same thing and easier to understand.

Thank you,
John

-----Original Message-----
From: Laszlo Ersek [mailto:lersek@...]
Sent: Friday, September 13, 2019 9:32 AM
To: devel@edk2.groups.io; Lofgren, John E <john.e.lofgren@...>
Cc: Ni, Ray <ray.ni@...>; Gao, Liming <liming.gao@...>; Dong,
Eric <eric.dong@...>
Subject: Re: [edk2-devel] [Patch V2] UefiCpuPkg/CpuExceptionHandlerLib: Fix
#AC split lock

On 09/09/19 20:40, John E Lofgren wrote:
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2150

V2 changes:
Add xchg 16 bit instructions to handle sgdt and sidt base
63:48 bits and 47:32 bits.
Add comment to explain why xchg 64bit isnt being used

Fix #AC split lock's caused by seperating base and limit from sgdt and
sidt by changing xchg operands to 32-bit to stop from crossing
cacheline.

Signed-off-by: John E Lofgren <john.e.lofgren@...>
---

UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/ExceptionHandlerAsm.nas
m
| 20 ++++++++++++++------
1 file changed, 14 insertions(+), 6 deletions(-)
The commit message (and the bug report) are very difficult to understand.

This is the first time I hear about "split lock" and "alignment check exception",
so please bear with me. This is my take on the problem.

(1) "split lock" is explained well here:

https://lwn.net/Articles/784864/

In short, we can consider it a performance anti-pattern. A locking instruction
(such as XCHG) is invoked on incorrectly aligned data, which causes
performance degradation for the whole system. In some cases this can be a
security issue even, because less privileged code can block (slow down) more
privileged code running on a different CPU.

(2) Alignment Check Exception is a way to detect the occurrence of "split
lock". It must be configured explicitly, when the system software wishes to be
informed explicitly about a split lock event.

Therefore, the "#AC split lock" expression in the commit message is very
confusing. Those are two different things. One is the problem ("split lock"),
and the other is the (kind of) solution ("alignment check exception").

We don't care about #AC (the exception) here. My understanding is that the
open source edk2 tree does not enable #AC. The following include file:

MdePkg/Include/Register/Intel/Msr/P6Msr.h

defines MSR_P6_TEST_CTL (value 0x33), which the above LWN article
references as MSR_TEST_CTL. The article refers to bit 29, but that seems to be
part of the "Reserved1" bit-field in the MSR_P6_TEST_CTL_REGISTER.

There seems to be a bit field that could be related (Disable_LOCK, bit#31), but
again, there is no reference to Disable_LOCK in the edk2 codebase.

So my whole point here is that we should clearly separate "#AC" from "split
lock" in the commit message (and in the code comment). Those are separate
things. And "split lock" may apply to edk2, but "#AC" does not (to the open
source tree anyway).

(3) OK, assuming this code indeed triggers a "split lock" event. Why is that a
problem? Yes, it may degrade performance for the system. Why do we care?
We are *already* handling an exception. That should not be a very frequent
event, for any processor (BSP or AP) in the system.

Is the problem that a closed source platform enables #AC, and then the fault
handler in CpuExceptionHandlerLib -- which gets invoked due to an
independent fault -- runs into a *double* fault, due to the split lock raising
#AC?

This should be clearly explained in the commit message. I'm not prying at
proprietary platform details, but the circumstances / symptoms of the issue
should be clearly described.

More comments below, regarding the original code:


diff --git
a/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/ExceptionHandlerAsm.na
sm
b/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/ExceptionHandlerAsm.na
sm
index 4db1a09f28..7b7642b290 100644
---
a/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/ExceptionHandlerAsm.na
sm
+++
b/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/ExceptionHandlerAs
+++ m.nasm
@@ -180,21 +180,29 @@ HasErrorCode:
push qword [rbp + 24]

;; UINT64 Gdtr[2], Idtr[2];
+ ; sidt and sgdt saves 10 bytes to memory, 8 bytes = base and 2 bytes =
limit.
+ ; To avoid #AC split lock when separating base and limit into their
+ ; own separate 64 bit memory, we can’t use 64 bit xchg since base [63:48]
bits
+ ; may cross the cache line.
xor rax, rax
push rax
push rax
So, the contents of RAX is 0 now, and we've made 16 bytes (filled with
0) room on the stack.

sidt [rsp]
This instruction writes 10 bytes at the base of that "room" on the stack.
Offsets 0 and 1 contain the "limit", offsets 2-9 (inclusive) contain the "base
address".

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|L|L|B|B|B|B|B|B|B|B|0|0|0|0|0|0|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

- xchg rax, [rsp + 2]
(I guess this is the instruction that splits the lock.)

Now RAX has the base address, and the stack looks like:

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|L|L|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

- xchg rax, [rsp]
Now RAX has the limit, and the stack is:

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|B|B|B|B|B|B|B|B|0|0|0|0|0|0|0|0|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

- xchg rax, [rsp + 8]
Now RAX is zero again, and the stack is:

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|B|B|B|B|B|B|B|B|L|L|0|0|0|0|0|0|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

This is very "clever" and all, but why do we have to use a locking instruction?
We save RBX on the stack, earlier in CommonInterruptEntry, and we restore it
in the end. So what's wrong with:

sidt [rsp]
mov bx, word [rsp] ; read limit into bx
mov rax, qword [rsp + 2] ; read base address into rax
mov qword [rsp], rax ; write base address to qword#0
mov word [rsp + 8], bx ; write limit to qword#1

The second MOV instruction may straddle a cache line, yes, but there is no
locking at all.

Thanks,
Laszlo


Re: [PATCH] SimicsOpenBoardPkg: Always set the boot priority by default

Kubacki, Michael A
 

* The subject should indicate [edk2-platforms] for changes in the edk2-platforms repository.
* PatchCheck.py has the following errors. Please help fix it.

The commit message format is not valid:
* Line 3 of commit message is too long.
https://github.com/tianocore/tianocore.github.io/wiki/Commit-Message-Format
Code format is not valid:
* EFI_D_INFO was used, but DEBUG_INFO is now recommended
File: Platform/Intel/SimicsOpenBoardPkg/Library/PlatformBootManagerLib/BdsPlatform.c
Line: DEBUG((EFI_D_INFO, "PlatformBootManagerBeforeConsole\n"));

-----Original Message-----
From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of David
Wei
Sent: Friday, September 13, 2019 9:58 AM
To: devel@edk2.groups.io
Cc: Wu, Hao A <hao.a.wu@...>; Gao, Liming <liming.gao@...>;
Sinha, Ankit <ankit.sinha@...>; Agyeman, Prince
<prince.agyeman@...>; Kubacki, Michael A
<michael.a.kubacki@...>; Desimone, Nathaniel L
<@natedesimone>; Kinney, Michael D
<michael.d.kinney@...>
Subject: [edk2-devel] [PATCH] SimicsOpenBoardPkg: Always set the boot
priority by default

When running networks of multiple machines, Simics assigns different disk
IDs to each disk created.
this change the boot priority and can't boot from SATA HDD directly.
Clear boot priority in NVRAM can fix this issue.

Cc: Hao Wu <hao.a.wu@...>
Cc: Liming Gao <liming.gao@...>
Cc: Ankit Sinha <ankit.sinha@...>
Cc: Agyeman Prince <prince.agyeman@...>
Cc: Kubacki Michael A <michael.a.kubacki@...>
Cc: Nate DeSimone <@natedesimone>
Cc: Michael D Kinney <michael.d.kinney@...>

Signed-off-by: David Wei <david.y.wei@...>
---
.../Library/PlatformBootManagerLib/BdsPlatform.c | 14 +++++++++++-
--
1 file changed, 11 insertions(+), 3 deletions(-)

diff --git
a/Platform/Intel/SimicsOpenBoardPkg/Library/PlatformBootManagerLib/Bds
Platform.c
b/Platform/Intel/SimicsOpenBoardPkg/Library/PlatformBootManagerLib/Bd
sPlatform.c
index 953a4a6c15..926ed94ca1 100644
---
a/Platform/Intel/SimicsOpenBoardPkg/Library/PlatformBootManagerLib/Bds
Platform.c
+++
b/Platform/Intel/SimicsOpenBoardPkg/Library/PlatformBootManagerLib/B
+++ dsPlatform.c
@@ -338,10 +338,18 @@ PlatformBootManagerBeforeConsole (
VOID
)
{
-// EFI_HANDLE Handle;
-// EFI_STATUS Status;
+ EFI_BOOT_MANAGER_LOAD_OPTION *NvBootOptions;
+ UINTN NvBootOptionCount;
+ UINTN Index;
+ EFI_STATUS Status;
+
+ DEBUG((EFI_D_INFO, "PlatformBootManagerBeforeConsole\n"));
+
+ NvBootOptions = EfiBootManagerGetLoadOptions(&NvBootOptionCount,
+ LoadOptionTypeBoot); for (Index = 0; Index < NvBootOptionCount;
Index++) {
+ Status =
+
EfiBootManagerDeleteLoadOptionVariable(NvBootOptions[Index].OptionNu
mb
+ er, LoadOptionTypeBoot); }

- DEBUG ((EFI_D_INFO, "PlatformBootManagerBeforeConsole\n"));
InstallDevicePathCallback ();

VisitAllInstancesOfProtocol (&gEfiPciRootBridgeIoProtocolGuid,
--
2.16.2.windows.1



Re: [PATCH] SimicsOpenBoardPkg: Change to gEfiSmmSmramMemoryGuid to fix build error

Kubacki, Michael A
 

The code changes look good.

* The subject should indicate [edk2-platforms] for changes in the edk2-platforms repository.
* PatchCheck.py has the following errors. Please help fix it.

The commit message format is not valid:
* First line of commit message (subject line) is too long.
* Line 3 of commit message is too long.
https://github.com/tianocore/tianocore.github.io/wiki/Commit-Message-Format
The code passed all checks.

-----Original Message-----
From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of David
Wei
Sent: Friday, September 13, 2019 2:17 PM
To: devel@edk2.groups.io
Cc: Wu, Hao A <hao.a.wu@...>; Gao, Liming <liming.gao@...>;
Sinha, Ankit <ankit.sinha@...>; Agyeman, Prince
<prince.agyeman@...>; Kubacki, Michael A
<michael.a.kubacki@...>; Desimone, Nathaniel L
<@natedesimone>; Kinney, Michael D
<michael.d.kinney@...>
Subject: [edk2-devel] [PATCH] SimicsOpenBoardPkg: Change to
gEfiSmmSmramMemoryGuid to fix build error

MinPlatform PKG now use gEfiSmmSmramMemoryGuid instead of
gEfiSmmPeiSmramMemoryReserveGuid to build memory HOB.
SimicsOpenBoardPkg need to update for it accordingly.

Cc: Hao Wu <hao.a.wu@...>
Cc: Liming Gao <liming.gao@...>
Cc: Ankit Sinha <ankit.sinha@...>
Cc: Agyeman Prince <prince.agyeman@...>
Cc: Kubacki Michael A <michael.a.kubacki@...>
Cc: Nate DeSimone <@natedesimone>
Cc: Michael D Kinney <michael.d.kinney@...>

Signed-off-by: David Wei <david.y.wei@...>
---
Platform/Intel/SimicsOpenBoardPkg/SimicsPei/MemDetect.c | 2 +-
Platform/Intel/SimicsOpenBoardPkg/SimicsPei/SimicsPei.inf | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/Platform/Intel/SimicsOpenBoardPkg/SimicsPei/MemDetect.c
b/Platform/Intel/SimicsOpenBoardPkg/SimicsPei/MemDetect.c
index 90e6d1d3cf..ee0eead5a8 100644
--- a/Platform/Intel/SimicsOpenBoardPkg/SimicsPei/MemDetect.c
+++ b/Platform/Intel/SimicsOpenBoardPkg/SimicsPei/MemDetect.c
@@ -449,7 +449,7 @@ QemuInitializeRam (
SmramRanges = 1;

Hob.Raw = BuildGuidHob(
- &gEfiSmmPeiSmramMemoryReserveGuid,
+ &gEfiSmmSmramMemoryGuid,
BufferSize
);
ASSERT(Hob.Raw);
diff --git a/Platform/Intel/SimicsOpenBoardPkg/SimicsPei/SimicsPei.inf
b/Platform/Intel/SimicsOpenBoardPkg/SimicsPei/SimicsPei.inf
index ccc7037d75..e466d57e4e 100644
--- a/Platform/Intel/SimicsOpenBoardPkg/SimicsPei/SimicsPei.inf
+++ b/Platform/Intel/SimicsOpenBoardPkg/SimicsPei/SimicsPei.inf
@@ -39,7 +39,7 @@

[Guids]
gEfiMemoryTypeInformationGuid
- gEfiSmmPeiSmramMemoryReserveGuid ## CONSUMES
+ gEfiSmmSmramMemoryGuid ## CONSUMES

[LibraryClasses]
BaseLib
--
2.16.2.windows.1



[edk2-platforms][PATCH V1 1/1] Platform/Intel/Readme.md: Content update

Kubacki, Michael A
 

This change makes the following updates:
1. Add SimicsOpenBoardPkg details.
2. Update Python instructions to Python 3.x and mention
Python 2.x deprecation.
3. Add Linux build environment set up instructions.
4. Update supported compiler and tool versions to newer versions tested.
* Ubuntu build: 16.04.5 LTS to 18.04.1 LTS
* iASL: 20160527 to 20190816
* NASM: 2.11.08 to 2.12.02
5. Update ClevoOpenBoardPkg details.
6. Add instructions to build packages (e.g. AdvancedFeaturePkg).
6. Update Planned Activities and Ideas sections.

Cc: Agyeman Prince <prince.agyeman@...>
Cc: Dandan Bi <dandan.bi@...>
Cc: Sai Chaganty <rangasai.v.chaganty@...>
Cc: Chasel Chiu <chasel.chiu@...>
Cc: Liming Gao <liming.gao@...>
Cc: Nate DeSimone <@natedesimone>
Cc: Michael D Kinney <michael.d.kinney@...>
Cc: Ankit Sinha <ankit.sinha@...>
Cc: Wei David Y <david.y.wei@...>
Signed-off-by: Michael Kubacki <michael.a.kubacki@...>
---
Platform/Intel/Readme.md | 105 +++++++++++++-------
1 file changed, 71 insertions(+), 34 deletions(-)

diff --git a/Platform/Intel/Readme.md b/Platform/Intel/Readme.md
index 3caf362983..334c61e037 100644
--- a/Platform/Intel/Readme.md
+++ b/Platform/Intel/Readme.md
@@ -56,6 +56,7 @@ A UEFI firmware implementation using MinPlatformPkg is constructed using the fol
* The `ClevoOpenBoardPkg` contains board implementations for Clevo systems.
* The `KabylakeOpenBoardPkg` contains board implementations for Kaby Lake systems.
* The `PurleyOpenBoardPkg` contains board implementations for Purley systems.
+* The `SimicsOpenBoardPkg` contains board implementations for the Simics hardware simulator.
* The `WhiskeylakeOpenBoardPkg` contains board implementations for Whiskey Lake systems.

## Board Package Organization
@@ -83,10 +84,19 @@ return back to the minimum platform caller.
- Install into ```C:\ASL``` to match default tools_def.txt configuration.
* NASM assembler: Available from: http://www.nasm.us/
- Install into ```C:\NASM``` to match default tools_def.txt configuration.
-* Python 2.7.6: Available from: https://www.python.org/download/releases/2.7.6/
- - Install into ```C:\Python27``` to match default tools_def.txt configuration.
- - Add C:\Python27 to your path
- - Other versions of 2.7 may also work fine.
+* Python 3.7.3: Available from: https://www.python.org/downloads/release/python-373/
+ - Other versions of Python 3.x should be compatible.
+ - It is recommended to use the Python launcher to ensure the Python build script is launched using Python 3.
+ - E.g. "py -3.7 build_bios.py -l"
+
+## **Linux Build Instructions**
+
+### Pre-requisites
+
+ * Set up a EDK II build environment for Linux following the instructions in
+ [Using EDK II with Native GCC](https://github.com/tianocore/tianocore.github.io/wiki/Using-EDK-II-with-Native-GCC).
+ * Proceed to the [Common EDK II build instructions for Linux](https://github.com/tianocore/tianocore.github.io/wiki/Common-instructions)
+ to verify your basic EDK II build environment is set up properly.

### Download the required components

@@ -106,11 +116,11 @@ return back to the minimum platform caller.
* FSP repository
* ``git clone https://github.com/IntelFsp/FSP.git``

-### Build
+### Board Builds

**Building with the python script**

-1. Open command window, go to the workspace directory, e.g. c:\Kabylake or ~/Kabylake in the case of a linux OS
+1. Open command window, go to the workspace directory, e.g. c:\Edk2Workspace or ~/Edk2Workspace in the case of a linux OS
2. If using a linux OS
* Type "cd edk2"
* Type "source edksetup.sh"
@@ -146,11 +156,19 @@ return back to the minimum platform caller.
* Type "python build_bios.py -h"

* Note
- * Python 2.7.16 and Python 3.7.3 compatible
- * Some dependency Python scripts might only support 2.x or 3.x, if that happened use
- "py -2" or "py -3" to launch build_bios.py
- * This python build script has been tested on Windows 10 and Ubuntu 16.04.5 LTS
- * See [cross-platform limitations](#Known-limitations)
+ * The Python build scripts were compatible with Python 2.7.16. But Python 2.x support is no longer maintained or recommended.
+
+ * This python build script has been tested on Windows 10 and Ubuntu 18.04.1 LTS.
+
+ * Unless otherwise noted, all boards build with the following components and versions:
+ * Linux build: Ubuntu 18.04.1 LTS with GCC version 5.4.0
+ * Windows build: Windows 10 with the Microsoft Visual Studio 2015 compiler
+ * iASL version: 20190816
+ * NASM version: 2.12.02
+
+ * Unless otherwise noted all boards have been tested for boot to Windows 10 x64 RS3.
+
+ * See [known limitations](#Known-limitations)

* Configuration Files
* The edk2-platforms\Platform\Intel\build.cfg file contains the default settings used by build_bios.py
@@ -185,6 +203,7 @@ return back to the minimum platform caller.
| | | | build settings, environment variables.
| | | |---build_board.py: Optional board-specific pre-build, build
| | | and clean post-build functions.
+ | | |
| | |------PurleyOpenBoardPkg
| | | |------BoardMtOlympus
| | | |---build_config.cfg: BoardMtOlympus specific
@@ -192,19 +211,26 @@ return back to the minimum platform caller.
| | | |---build_board.py: Optional board-specific pre-build,
| | | build, post-build and clean functions.
| | |
+ | | |------SimicsOpenBoardPkg
+ | | | |------BoardX58Ich10
+ | | | |---build_config.cfg: BoardX58Ich10 specific
+ | | | | build settings, environment variables.
+ | | |
| | |------WhiskeylakeOpenBoardPkg
| | | |------WhiskeylakeURvp
| | | |---build_config.cfg: WhiskeylakeURvp specific build
| | | settings environment variables.
+ | | |
|------FSP
</pre>

**Building with the batch scripts**
+
Only PurleyOpenBoardPkg still supports batch script build. Future board packages must only use the Python build
infrastructure.

For PurleyOpenBoardPkg
-1. Open command window, go to the workspace directory, e.g. c:\Purley.
+1. Open command window, go to the workspace directory, e.g. c:\Edk2Workspace.
2. Type "cd edk2-platforms\Platform\Intel\PurleyOpenBoardPkg\BoardMtOlympus".
3. Type "GitEdk2MinMtOlympus.bat" to setup GIT environment.
4. Type "bld" to build Purley Mt Olympus board UEFI firmware image, "bld release" for release build, "bld clean" to
@@ -212,40 +238,51 @@ For PurleyOpenBoardPkg
"bld cache-consume" Consume a cache of binary files from the specified directory, BINARY_CACHE_PATH is empty,
used "BinCache" as default path.

-The validated version of iasl compiler that can build MinPurley is 20180629. Older version may generate ACPI build
+The validated version of iASL compiler that can build MinPurley is 20180629. Older version may generate ACPI build
errors.

### **Known limitations**

**ClevoOpenBoardPkg**
1. Currently, support is only being added for the N1xxWU series of boards.
-2. The Windows build was tested on Windows 10 with Microsoft Visual Studio 2015 compiler.
-3. The Linux build was tested on Ubuntu 16.04.5 LTS with GCC version 5.4.0.
-4. The build was tested with NASM version 2.11.08.
-5. The firmware project has not been tested on an actual board, it *should not* be expected to boot.
-6. The firmware project applies to all Clevo supported board configurations but is only being tested on System 76 Galago
- Pro devices.
+2. The firmware project has not been tested on the System 76 Galago Pro 2 and System 76 Galago Pro 3-B.
+3. The firmware project applies to all Clevo supported board configurations but is only being tested on System 76 Galago
+ Pro devices.

**KabylakeOpenBoardPkg**
-1. This firmware project has only been tested on the Intel KabylakeRvp3 board.
-2. This firmware project has only been tested booting to Microsoft Windows 10 x64 with AHCI mode and Integrated Graphic
- Device.
-3. The Windows build was tested on Windows 10 with Microsoft Visual Studio 2015.
-4. The Linux build was tested on Ubuntu 16.04.5 LTS with GCC version 5.4.0.
-5. The build was tested with NASM version 2.11.08.
+1. This firmware project has only been tested on the Intel Kaby Lake 3 RVP board.
+2. This firmware project has only been tested for Microsoft Windows 10 x64 boot with AHCI mode and Integrated Graphic
+ Device.

**PurleyOpenBoardPkg**
-1. This firmware project has only been tested on the Microsoft MtOlympus board.
+1. This firmware project has only been tested on the Microsoft Mt. Olympus board.
2. This firmware project has only been tested booting to Microsoft Windows Server 2016 with NVME on M.2 slot.
-3. This firmware project build has only been tested using the Microsoft Visual Studio 2015 compiler.
+3. This firmware project does not build with the GCC compiler.
+4. This firmware project does not build with the Python build script infrastructure.
+
+**SimicsOpenBoardPkg**
+1. This firmware project has only been tested with the Simics Quick Start Package.
+2. This firmware project has only been tested booting to Microsoft Windows 10 x64 and Ubuntu 17.10 with AHCI mode and
+ Integrated Graphic Device.

**WhiskeylakeOpenBoardPkg**
-1. This firmware project has only been tested on the Intel WhiskeylakeURvp board.
+1. This firmware project has only been tested on the Intel Whiskey Lake U DDR4 RVP board.
2. This firmware project has only been tested booting to Microsoft Windows 10 x64 with AHCI mode and Integrated Graphic
Device.
-3. The Windows build was tested on Windows 10 with Microsoft Visual Studio 2015.
-4. The Linux build was tested on Ubuntu 16.04.5 LTS with GCC version 5.4.0.
-5. The build was tested with NASM version 2.11.08.
+
+### **Package Builds**
+
+In some cases, such as AdvancedFeaturePkg, a package may provide a set of functionality that is included in other
+packages. To test the build of the whole package, the "build" command should be used following the instructions below.
+
+1. Execute edksetup.bat (Windows) or edksetup.sh (Linux).
+2. Verify the "WORKSPACE" environment variable is set to the edk2 directory in your workspace.
+3. Set the "PACKAGES_PATH" enviornment variable to include the edk2-platforms/Platform/Intel and edk2-platforms/Silicon/Intel
+ directories.
+ * Windows example: set PACKAGES_PATH=c:\Edk2Workspace\edk2-platforms\Platform\Intel;c:\Edk2Workspace\edk2-platforms\Silicon\Intel
+4. Build the package by specifying the package DSC as the platform build target from the Platform/Intel or Silicon/Intel directory:
+ "build -p AdvancedFeaturePkg/AdvancedFeaturePkg.dsc"
+

### **Firmware Image Flashing**

@@ -259,14 +296,14 @@ that authenticates the initial firmware boot image such as Boot Guard, it will f
that is not signed properly.

### **Planned Activities**
-* Replace the batch build scripts with cross-platform Python build scripts.
-* Publish a Minimum Platform specification to describe the architecture and interfaces in more detail.
+* Expand Intel's open source platform code presence through new platform and board support.
+* Expand advanced feature code and quality.
+* Support open source community continuous integration for Minimum Platform compliant boards.

### **Ideas**
If you would like to help but are not sure where to start some areas currently identified for improvement include:
* Adding board ports for more motherboards and systems
* Adding Clang support
- * Adding GCC support

Please feel free to contact Michael Kubacki (michael.a.kubacki at intel.com) and Isaac Oram (isaac.w.oram at intel.com)
if you would like to discuss contribution ideas.
--
2.16.2.windows.1


Re: [PATCH] StandaloneMmPkg: make package .DSC file build again

Yao, Jiewen
 

Reviewed-by: Jiewen Yao <jiewen.yao@...>

-----Original Message-----
From: Ard Biesheuvel <ard.biesheuvel@...>
Sent: Saturday, September 14, 2019 3:05 AM
To: devel@edk2.groups.io
Cc: lersek@...; achin.gupta@...; Yao, Jiewen
<jiewen.yao@...>; Ard Biesheuvel <ard.biesheuvel@...>
Subject: [PATCH] StandaloneMmPkg: make package .DSC file build again

The StandaloneMmPkg .DSC file went out of sync with the changes
applied to the package when I enabled this code on the Synquacer
platform in edk2-platforms. So apply the necessary changes to make
this package build in isolation.

Signed-off-by: Ard Biesheuvel <ard.biesheuvel@...>
---
StandaloneMmPkg/StandaloneMmPkg.dsc | 19 +++++++++++--------
1 file changed, 11 insertions(+), 8 deletions(-)

diff --git a/StandaloneMmPkg/StandaloneMmPkg.dsc
b/StandaloneMmPkg/StandaloneMmPkg.dsc
index 8c5b9b3a3d47..8a68d397469b 100644
--- a/StandaloneMmPkg/StandaloneMmPkg.dsc
+++ b/StandaloneMmPkg/StandaloneMmPkg.dsc
@@ -39,29 +39,32 @@
BaseMemoryLib|MdePkg/Library/BaseMemoryLib/BaseMemoryLib.inf
DebugLib|MdePkg/Library/BaseDebugLibNull/BaseDebugLibNull.inf

DebugPrintErrorLevelLib|MdePkg/Library/BaseDebugPrintErrorLevelLib/BaseDe
bugPrintErrorLevelLib.inf
+
ExtractGuidedSectionLib|EmbeddedPkg/Library/PrePiExtractGuidedSectionLib/P
rePiExtractGuidedSectionLib.inf
FvLib|StandaloneMmPkg/Library/FvLib/FvLib.inf
-
HobLib|StandaloneMmPkg/Library/StandaloneMmCoreHobLib/StandaloneMmC
oreHobLib.inf
+
HobLib|StandaloneMmPkg/Library/StandaloneMmHobLib/StandaloneMmHobLi
b.inf
IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf

MemLib|StandaloneMmPkg/Library/StandaloneMmMemLib/StandaloneMmMe
mLib.inf

MemoryAllocationLib|StandaloneMmPkg/Library/StandaloneMmCoreMemoryAl
locationLib/StandaloneMmCoreMemoryAllocationLib.inf
+
MmServicesTableLib|MdePkg/Library/StandaloneMmServicesTableLib/Standalo
neMmServicesTableLib.inf
PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf
+
PeCoffExtraActionLib|StandaloneMmPkg/Library/StandaloneMmPeCoffExtraAct
ionLib/StandaloneMmPeCoffExtraActionLib.inf
PeCoffLib|MdePkg/Library/BasePeCoffLib/BasePeCoffLib.inf
PrintLib|MdePkg/Library/BasePrintLib/BasePrintLib.inf

ReportStatusCodeLib|MdePkg/Library/BaseReportStatusCodeLibNull/BaseRepo
rtStatusCodeLibNull.inf
-
- #
- # Entry point
- #
-
StandaloneMmDriverEntryPoint|StandaloneMmPkg/Library/StandaloneMmDriv
erEntryPoint/StandaloneMmDriverEntryPoint.inf
+
StandaloneMmCoreEntryPoint|StandaloneMmPkg/Library/StandaloneMmCoreE
ntryPoint/StandaloneMmCoreEntryPoint.inf
+
StandaloneMmDriverEntryPoint|MdePkg/Library/StandaloneMmDriverEntryPoin
t/StandaloneMmDriverEntryPoint.inf

[LibraryClasses.AARCH64]
ArmLib|ArmPkg/Library/ArmLib/ArmBaseLib.inf

StandaloneMmMmuLib|ArmPkg/Library/StandaloneMmMmuLib/ArmMmuStand
aloneMmLib.inf
ArmSvcLib|ArmPkg/Library/ArmSvcLib/ArmSvcLib.inf

CacheMaintenanceLib|ArmPkg/Library/ArmCacheMaintenanceLib/ArmCacheMa
intenanceLib.inf
-
PeCoffExtraActionLib|StandaloneMmPkg/Library/StandaloneMmPeCoffExtraAct
ionLib/StandaloneMmPeCoffExtraActionLib.inf

-
StandaloneMmCoreEntryPoint|StandaloneMmPkg/Library/StandaloneMmCoreE
ntryPoint/StandaloneMmCoreEntryPoint.inf
+ NULL|ArmPkg/Library/CompilerIntrinsicsLib/CompilerIntrinsicsLib.inf
+ NULL|MdePkg/Library/BaseStackCheckLib/BaseStackCheckLib.inf
+
+[LibraryClasses.common.MM_CORE_STANDALONE]
+
HobLib|StandaloneMmPkg/Library/StandaloneMmCoreHobLib/StandaloneMmC
oreHobLib.inf


#################################################################
###############
#
--
2.17.1


[PATCH] SimicsOpenBoardPkg: Change to gEfiSmmSmramMemoryGuid to fix build error

David Wei
 

MinPlatform PKG now use gEfiSmmSmramMemoryGuid instead of gEfiSmmPeiSmramMemoryReserveGuid
to build memory HOB. SimicsOpenBoardPkg need to update for it accordingly.

Cc: Hao Wu <hao.a.wu@...>
Cc: Liming Gao <liming.gao@...>
Cc: Ankit Sinha <ankit.sinha@...>
Cc: Agyeman Prince <prince.agyeman@...>
Cc: Kubacki Michael A <michael.a.kubacki@...>
Cc: Nate DeSimone <@natedesimone>
Cc: Michael D Kinney <michael.d.kinney@...>

Signed-off-by: David Wei <david.y.wei@...>
---
Platform/Intel/SimicsOpenBoardPkg/SimicsPei/MemDetect.c | 2 +-
Platform/Intel/SimicsOpenBoardPkg/SimicsPei/SimicsPei.inf | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/Platform/Intel/SimicsOpenBoardPkg/SimicsPei/MemDetect.c b/Platform/Intel/SimicsOpenBoardPkg/SimicsPei/MemDetect.c
index 90e6d1d3cf..ee0eead5a8 100644
--- a/Platform/Intel/SimicsOpenBoardPkg/SimicsPei/MemDetect.c
+++ b/Platform/Intel/SimicsOpenBoardPkg/SimicsPei/MemDetect.c
@@ -449,7 +449,7 @@ QemuInitializeRam (
SmramRanges = 1;

Hob.Raw = BuildGuidHob(
- &gEfiSmmPeiSmramMemoryReserveGuid,
+ &gEfiSmmSmramMemoryGuid,
BufferSize
);
ASSERT(Hob.Raw);
diff --git a/Platform/Intel/SimicsOpenBoardPkg/SimicsPei/SimicsPei.inf b/Platform/Intel/SimicsOpenBoardPkg/SimicsPei/SimicsPei.inf
index ccc7037d75..e466d57e4e 100644
--- a/Platform/Intel/SimicsOpenBoardPkg/SimicsPei/SimicsPei.inf
+++ b/Platform/Intel/SimicsOpenBoardPkg/SimicsPei/SimicsPei.inf
@@ -39,7 +39,7 @@

[Guids]
gEfiMemoryTypeInformationGuid
- gEfiSmmPeiSmramMemoryReserveGuid ## CONSUMES
+ gEfiSmmSmramMemoryGuid ## CONSUMES

[LibraryClasses]
BaseLib
--
2.16.2.windows.1


Re: [RFC] EDK II Continuous Integration Phase 1

Sean
 

These tests require using the "edk2-pytool" stuff but are easy to integrate with the github PR or CI flow.  Example of it running the code compliance tests is here: https://dev.azure.com/tianocore/edk2-ci-play/_build?definitionId=13&_a=summary A test run takes about 3 minutes.  

The past week or so we also have been working on a more complete test run which adds to the above test suite three more tests.  Compile each package for Debug, Release, and Host Based Unit tests.  Obviously this adds more time and takes more resources but at the moment we have it down to 13 minutes. You can see it here: https://dev.azure.com/tianocore/edk2-ci-play/_build?definitionId=12&_a=summary 

To enable this framework you need the following. 

1. pip install a couple of edk2-pytool packages (see requirements.txt file)
2. Add the pytool based plugins to the edk2 code tree  See here: https://github.com/spbrogan/edk2-staging/tree/edk2-stuart-ci-latest/BaseTools/Plugin/Ci
3. Add a CiSettings.py file that satisfies the setup, update, and ci_build  See here: https://github.com/spbrogan/edk2-staging/blob/edk2-stuart-ci-latest/CISettings.py
4. Add a *.ci.yaml file to each package to configure test settings, ignore files, and other configuration for testing the package.  Example here: https://github.com/spbrogan/edk2-staging/blob/edk2-stuart-ci-latest/MdeModulePkg/MdeModulePkg.ci.yaml
5.  For Azure pipeline support (cloud based CI) you will need to add Azure pipeline.yaml flles.  

This can all be seen in the branch here.  https://github.com/spbrogan/edk2-staging/tree/edk2-stuart-ci-latest
Be aware that in that same branch we are enabling "Host based unit tests" which also requires more code changes so if diffing with clean edk2 you can ignore those (although that is all part of another RFC for unit test so any feedback on that would be great too).

Feedback would be appreciated.  I am hoping this RFC can move forward in the next few weeks.  

Thanks
Sean