Compare commits
	
		
			19 Commits
		
	
	
		
			tcss-det
			...
			wip/nvidia
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					2d743165e7 | ||
| 
						 | 
					75468a84c0 | ||
| 
						 | 
					865292a883 | ||
| 
						 | 
					87aaef8d1a | ||
| 
						 | 
					182adc61a2 | ||
| 
						 | 
					1b49402e33 | ||
| 
						 | 
					8138513b35 | ||
| 
						 | 
					ba0100f010 | ||
| 
						 | 
					72cd47f9ba | ||
| 
						 | 
					8b8a831699 | ||
| 
						 | 
					fb352b86fc | ||
| 
						 | 
					084e54522a | ||
| 
						 | 
					8d28bd2c9f | ||
| 
						 | 
					9747417290 | ||
| 
						 | 
					2a0ab9f8cf | ||
| 
						 | 
					5ff2a1548f | ||
| 
						 | 
					ad3eee8f83 | ||
| 
						 | 
					90176c56f4 | ||
| 
						 | 
					cb8a72cace | 
@@ -4,10 +4,12 @@
 | 
			
		||||
# Ignore aspects we don't follow here.
 | 
			
		||||
--ignore C99_COMMENTS
 | 
			
		||||
--ignore GLOBAL_INITIALISERS
 | 
			
		||||
--ignore COMPARISON_TO_NULL
 | 
			
		||||
--ignore INITIALISED_STATIC
 | 
			
		||||
--ignore LINE_SPACING
 | 
			
		||||
--ignore NEW_TYPEDEFS
 | 
			
		||||
--ignore PREFER_ALIGNED
 | 
			
		||||
--ignore PREFER_PACKED
 | 
			
		||||
--ignore PREFER_PRINTF
 | 
			
		||||
--ignore SPLIT_STRING
 | 
			
		||||
--ignore BLOCK_COMMENT_STYLE
 | 
			
		||||
--ignore AVOID_EXTERNS
 | 
			
		||||
@@ -20,7 +22,6 @@
 | 
			
		||||
--ignore PRINTK_WITHOUT_KERN_LEVEL
 | 
			
		||||
--ignore ASSIGN_IN_IF
 | 
			
		||||
--ignore UNNECESSARY_ELSE
 | 
			
		||||
--ignore GERRIT_CHANGE_ID
 | 
			
		||||
 | 
			
		||||
# FILE_PATH_CHANGES seems to not be working correctly. It will
 | 
			
		||||
# choke on added / deleted files even if the MAINTAINERS file
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										249
									
								
								.clang-format
									
									
									
									
									
								
							
							
						
						@@ -1,228 +1,21 @@
 | 
			
		||||
# SPDX-License-Identifier: GPL-2.0-only
 | 
			
		||||
#
 | 
			
		||||
# clang-format configuration file. Intended for clang-format >= 16.
 | 
			
		||||
#
 | 
			
		||||
# For more information, see:
 | 
			
		||||
#
 | 
			
		||||
#   https://clang.llvm.org/docs/ClangFormat.html
 | 
			
		||||
#   https://clang.llvm.org/docs/ClangFormatStyleOptions.html
 | 
			
		||||
#   https://clang-format-configurator.site/
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
Language:        Cpp
 | 
			
		||||
AccessModifierOffset: -4
 | 
			
		||||
AlignAfterOpenBracket: Align
 | 
			
		||||
AlignArrayOfStructures: Left
 | 
			
		||||
AlignConsecutiveAssignments:
 | 
			
		||||
  Enabled:         false
 | 
			
		||||
  AcrossEmptyLines: false
 | 
			
		||||
  AcrossComments:  true
 | 
			
		||||
  AlignCompound:   false
 | 
			
		||||
  PadOperators:    true
 | 
			
		||||
AlignConsecutiveBitFields:
 | 
			
		||||
  Enabled:         true
 | 
			
		||||
  AcrossEmptyLines: false
 | 
			
		||||
  AcrossComments:  false
 | 
			
		||||
  AlignCompound:   false
 | 
			
		||||
  PadOperators:    true
 | 
			
		||||
AlignConsecutiveDeclarations:
 | 
			
		||||
  Enabled:         false
 | 
			
		||||
  AcrossEmptyLines: false
 | 
			
		||||
  AcrossComments:  false
 | 
			
		||||
  AlignCompound:   false
 | 
			
		||||
  PadOperators:    true
 | 
			
		||||
AlignConsecutiveMacros:
 | 
			
		||||
  Enabled:         true
 | 
			
		||||
  AcrossEmptyLines: false
 | 
			
		||||
  AcrossComments:  false
 | 
			
		||||
  AlignCompound:   false
 | 
			
		||||
  PadOperators:    true
 | 
			
		||||
AlignEscapedNewlines: Left
 | 
			
		||||
AlignOperands:   Align
 | 
			
		||||
AlignTrailingComments:
 | 
			
		||||
  Kind:            Always
 | 
			
		||||
  OverEmptyLines:  0
 | 
			
		||||
AllowAllArgumentsOnNextLine: true
 | 
			
		||||
AllowAllParametersOfDeclarationOnNextLine: false
 | 
			
		||||
AllowShortBlocksOnASingleLine: Never
 | 
			
		||||
AllowShortCaseLabelsOnASingleLine: false
 | 
			
		||||
AllowShortEnumsOnASingleLine: true
 | 
			
		||||
AllowShortFunctionsOnASingleLine: None
 | 
			
		||||
AllowShortIfStatementsOnASingleLine: Never
 | 
			
		||||
AllowShortLambdasOnASingleLine: All
 | 
			
		||||
AllowShortLoopsOnASingleLine: false
 | 
			
		||||
AlwaysBreakAfterDefinitionReturnType: None
 | 
			
		||||
AlwaysBreakAfterReturnType: None
 | 
			
		||||
AlwaysBreakBeforeMultilineStrings: false
 | 
			
		||||
AlwaysBreakTemplateDeclarations: MultiLine
 | 
			
		||||
 | 
			
		||||
# git grep '^#define [^[:space:]]*__.*[^[:space:]]*__attribute__' | grep -v "vendorcode\|payloads\|util" | sed "s|.*:||;s|^#define \([^[:space:]]*__[^([:space:]]*\).*$|  - '\1'|" | LC_ALL=C sort -u
 | 
			
		||||
AttributeMacros:
 | 
			
		||||
  - '__aligned'
 | 
			
		||||
  - '__always_inline'
 | 
			
		||||
  - '__always_unused'
 | 
			
		||||
  - '__cpu_driver'
 | 
			
		||||
  - '__fallthrough'
 | 
			
		||||
  - '__maybe_unused'
 | 
			
		||||
  - '__must_check'
 | 
			
		||||
  - '__noreturn'
 | 
			
		||||
  - '__packed'
 | 
			
		||||
  - '__pci_driver'
 | 
			
		||||
  - '__printf'
 | 
			
		||||
  - '__weak'
 | 
			
		||||
BinPackArguments: true
 | 
			
		||||
BinPackParameters: true
 | 
			
		||||
BitFieldColonSpacing: Both
 | 
			
		||||
BraceWrapping:
 | 
			
		||||
  AfterCaseLabel:  false
 | 
			
		||||
  AfterClass:      false
 | 
			
		||||
  AfterControlStatement: Never
 | 
			
		||||
  AfterEnum:       false
 | 
			
		||||
  AfterExternBlock: false
 | 
			
		||||
  AfterFunction:   true
 | 
			
		||||
  AfterNamespace:  true
 | 
			
		||||
  AfterObjCDeclaration: false
 | 
			
		||||
  AfterStruct:     false
 | 
			
		||||
  AfterUnion:      false
 | 
			
		||||
  BeforeCatch:     false
 | 
			
		||||
  BeforeElse:      false
 | 
			
		||||
  BeforeLambdaBody: false
 | 
			
		||||
  BeforeWhile:     false
 | 
			
		||||
  IndentBraces:    false
 | 
			
		||||
  SplitEmptyFunction: true
 | 
			
		||||
  SplitEmptyRecord: true
 | 
			
		||||
  SplitEmptyNamespace: true
 | 
			
		||||
BreakAfterAttributes: Never
 | 
			
		||||
BreakAfterJavaFieldAnnotations: false
 | 
			
		||||
BreakArrays:     false
 | 
			
		||||
BreakBeforeBinaryOperators: None
 | 
			
		||||
BreakBeforeConceptDeclarations: Always
 | 
			
		||||
BreakBeforeBraces: Custom
 | 
			
		||||
BreakBeforeInlineASMColon: OnlyMultiline
 | 
			
		||||
BreakBeforeTernaryOperators: false
 | 
			
		||||
BreakConstructorInitializers: AfterColon
 | 
			
		||||
BreakInheritanceList: AfterColon
 | 
			
		||||
BreakStringLiterals: false
 | 
			
		||||
ColumnLimit:     96
 | 
			
		||||
CommentPragmas:  '^ IWYU pragma:'
 | 
			
		||||
CompactNamespaces: false
 | 
			
		||||
ConstructorInitializerIndentWidth: 8
 | 
			
		||||
ContinuationIndentWidth: 8
 | 
			
		||||
Cpp11BracedListStyle: true
 | 
			
		||||
DerivePointerAlignment: false
 | 
			
		||||
DisableFormat:   false
 | 
			
		||||
EmptyLineAfterAccessModifier: Never
 | 
			
		||||
EmptyLineBeforeAccessModifier: LogicalBlock
 | 
			
		||||
ExperimentalAutoDetectBinPacking: false
 | 
			
		||||
FixNamespaceComments: false
 | 
			
		||||
 | 
			
		||||
# git grep '^#define [^[:space:]]*for_each[^[:space:]]*(' | grep -v "vendorcode\|payloads\|util" | sed "s|.*:||;s|^#define \([^[:space:]]*for_each[^[:space:]]*\)(.*$|  - '\1'|" | LC_ALL=C sort -u
 | 
			
		||||
ForEachMacros:
 | 
			
		||||
  - 'list_for_each'
 | 
			
		||||
 | 
			
		||||
# git grep -i '^#define \+if[^[:space:]]*(' | grep -v "vendorcode\|payloads\|util" | sed "s|.*:||;s|^#define \([^[:space:]]*if[^[:space:]]*\)(.*$|  - '\1'|I" | grep -v IFIX | LC_ALL=C sort -u
 | 
			
		||||
IfMacros:
 | 
			
		||||
  - 'IF_CHANNEL_POPULATED'
 | 
			
		||||
  - 'IF_DIMM_POPULATED'
 | 
			
		||||
  - 'IF_RANK_POPULATED'
 | 
			
		||||
  - 'IfBit0'
 | 
			
		||||
IncludeBlocks:   Preserve
 | 
			
		||||
IncludeIsMainSourceRegex: ''
 | 
			
		||||
IndentAccessModifiers: false
 | 
			
		||||
IndentCaseBlocks: false
 | 
			
		||||
IndentCaseLabels: false
 | 
			
		||||
IndentExternBlock: AfterExternBlock
 | 
			
		||||
IndentGotoLabels: false
 | 
			
		||||
IndentPPDirectives: None
 | 
			
		||||
IndentRequiresClause: true
 | 
			
		||||
IndentWidth:     8
 | 
			
		||||
IndentWrappedFunctionNames: false
 | 
			
		||||
InsertBraces:    false
 | 
			
		||||
InsertNewlineAtEOF: true
 | 
			
		||||
InsertTrailingCommas: None
 | 
			
		||||
IntegerLiteralSeparator:
 | 
			
		||||
  Binary:          0
 | 
			
		||||
  BinaryMinDigits: 0
 | 
			
		||||
  Decimal:         0
 | 
			
		||||
  DecimalMinDigits: 0
 | 
			
		||||
  Hex:             0
 | 
			
		||||
  HexMinDigits:    0
 | 
			
		||||
JavaScriptQuotes: Leave
 | 
			
		||||
JavaScriptWrapImports: true
 | 
			
		||||
KeepEmptyLinesAtTheStartOfBlocks: false
 | 
			
		||||
LambdaBodyIndentation: Signature
 | 
			
		||||
LineEnding:      LF
 | 
			
		||||
MacroBlockBegin: ''
 | 
			
		||||
MacroBlockEnd:   ''
 | 
			
		||||
MaxEmptyLinesToKeep: 1
 | 
			
		||||
NamespaceIndentation: None
 | 
			
		||||
ObjCBinPackProtocolList: Auto
 | 
			
		||||
ObjCBlockIndentWidth: 8
 | 
			
		||||
ObjCBreakBeforeNestedBlockParam: true
 | 
			
		||||
ObjCSpaceAfterProperty: true
 | 
			
		||||
ObjCSpaceBeforeProtocolList: true
 | 
			
		||||
PackConstructorInitializers: BinPack
 | 
			
		||||
PenaltyBreakAssignment: 10
 | 
			
		||||
PenaltyBreakBeforeFirstCallParameter: 30
 | 
			
		||||
PenaltyBreakComment: 10
 | 
			
		||||
PenaltyBreakFirstLessLess: 0
 | 
			
		||||
PenaltyBreakOpenParenthesis: 0
 | 
			
		||||
PenaltyBreakString: 10
 | 
			
		||||
PenaltyBreakTemplateDeclaration: 10
 | 
			
		||||
PenaltyExcessCharacter: 100
 | 
			
		||||
PenaltyIndentedWhitespace: 0
 | 
			
		||||
PenaltyReturnTypeOnItsOwnLine: 60
 | 
			
		||||
PointerAlignment: Right
 | 
			
		||||
PPIndentWidth:   -1
 | 
			
		||||
QualifierAlignment: Left
 | 
			
		||||
ReferenceAlignment: Pointer
 | 
			
		||||
ReflowComments:  false
 | 
			
		||||
RemoveBracesLLVM: false
 | 
			
		||||
RemoveSemicolon: false
 | 
			
		||||
RequiresClausePosition: OwnLine
 | 
			
		||||
RequiresExpressionIndentation: OuterScope
 | 
			
		||||
SeparateDefinitionBlocks: Leave
 | 
			
		||||
ShortNamespaceLines: 1
 | 
			
		||||
SortIncludes:    Never
 | 
			
		||||
SortJavaStaticImport: Before
 | 
			
		||||
SortUsingDeclarations: Never
 | 
			
		||||
SpaceAfterCStyleCast: false
 | 
			
		||||
SpaceAfterLogicalNot: false
 | 
			
		||||
SpaceAfterTemplateKeyword: true
 | 
			
		||||
SpaceAroundPointerQualifiers: Default
 | 
			
		||||
SpaceBeforeAssignmentOperators: true
 | 
			
		||||
SpaceBeforeCaseColon: false
 | 
			
		||||
SpaceBeforeCpp11BracedList: false
 | 
			
		||||
SpaceBeforeCtorInitializerColon: true
 | 
			
		||||
SpaceBeforeInheritanceColon: true
 | 
			
		||||
SpaceBeforeParens: ControlStatementsExceptControlMacros
 | 
			
		||||
SpaceBeforeParensOptions:
 | 
			
		||||
  AfterControlStatements: true
 | 
			
		||||
  AfterForeachMacros: false
 | 
			
		||||
  AfterFunctionDefinitionName: false
 | 
			
		||||
  AfterFunctionDeclarationName: false
 | 
			
		||||
  AfterIfMacros:   false
 | 
			
		||||
  AfterOverloadedOperator: false
 | 
			
		||||
  AfterRequiresInClause: false
 | 
			
		||||
  AfterRequiresInExpression: false
 | 
			
		||||
  BeforeNonEmptyParentheses: false
 | 
			
		||||
SpaceBeforeRangeBasedForLoopColon: true
 | 
			
		||||
SpaceBeforeSquareBrackets: false
 | 
			
		||||
SpaceInEmptyBlock: false
 | 
			
		||||
SpaceInEmptyParentheses: false
 | 
			
		||||
SpacesBeforeTrailingComments: 1
 | 
			
		||||
SpacesInAngles:  Never
 | 
			
		||||
SpacesInConditionalStatement: false
 | 
			
		||||
SpacesInContainerLiterals: false
 | 
			
		||||
SpacesInCStyleCastParentheses: false
 | 
			
		||||
SpacesInLineCommentPrefix:
 | 
			
		||||
  Minimum:         1
 | 
			
		||||
  Maximum:         1
 | 
			
		||||
SpacesInParentheses: false
 | 
			
		||||
SpacesInSquareBrackets: false
 | 
			
		||||
Standard:        c++17
 | 
			
		||||
TabWidth:        8
 | 
			
		||||
UseTab:          ForContinuationAndIndentation
 | 
			
		||||
...
 | 
			
		||||
 | 
			
		||||
BasedOnStyle:					LLVM
 | 
			
		||||
Language:					Cpp
 | 
			
		||||
IndentWidth:					8
 | 
			
		||||
UseTab:						Always
 | 
			
		||||
BreakBeforeBraces:				Linux
 | 
			
		||||
AllowShortIfStatementsOnASingleLine:		false
 | 
			
		||||
IndentCaseLabels:				false
 | 
			
		||||
SortIncludes:					false
 | 
			
		||||
ContinuationIndentWidth:			8
 | 
			
		||||
ColumnLimit:					96
 | 
			
		||||
AlwaysBreakBeforeMultilineStrings:		true
 | 
			
		||||
AllowShortLoopsOnASingleLine:			false
 | 
			
		||||
AllowShortFunctionsOnASingleLine:		false
 | 
			
		||||
AlignEscapedNewlinesLeft:			false
 | 
			
		||||
AlignTrailingComments:				true
 | 
			
		||||
AllowAllParametersOfDeclarationOnNextLine:	false
 | 
			
		||||
AlignAfterOpenBracket:				true
 | 
			
		||||
SpaceAfterCStyleCast:				false
 | 
			
		||||
MaxEmptyLinesToKeep:				2
 | 
			
		||||
BreakBeforeBinaryOperators:			NonAssignment
 | 
			
		||||
BreakStringLiterals:				false
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,3 @@ charset = utf-8
 | 
			
		||||
insert_final_newline = true
 | 
			
		||||
end_of_line = lf
 | 
			
		||||
trim_trailing_whitespace = true
 | 
			
		||||
 | 
			
		||||
[*.sh]
 | 
			
		||||
indent_style = space
 | 
			
		||||
indent_size = 2
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										6
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						@@ -9,7 +9,6 @@ defconfig
 | 
			
		||||
build/
 | 
			
		||||
coreboot-builds/
 | 
			
		||||
coreboot-builds*/
 | 
			
		||||
generated/
 | 
			
		||||
 | 
			
		||||
site-local
 | 
			
		||||
 | 
			
		||||
@@ -32,9 +31,6 @@ site-local
 | 
			
		||||
# Development friendly files
 | 
			
		||||
tags
 | 
			
		||||
.clang_complete
 | 
			
		||||
.cache
 | 
			
		||||
compile_commands.json
 | 
			
		||||
.vscode/
 | 
			
		||||
 | 
			
		||||
# Cross-compile toolkits
 | 
			
		||||
xgcc/
 | 
			
		||||
@@ -44,3 +40,5 @@ tarballs/
 | 
			
		||||
*~
 | 
			
		||||
*.kate-swp
 | 
			
		||||
*.kdev4
 | 
			
		||||
 | 
			
		||||
doxygen/*
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										8
									
								
								.gitmodules
									
									
									
									
										vendored
									
									
								
							
							
						
						@@ -48,7 +48,6 @@
 | 
			
		||||
	path = 3rdparty/cmocka
 | 
			
		||||
	url = https://review.coreboot.org/cmocka.git
 | 
			
		||||
	update = none
 | 
			
		||||
	branch = stable-1.1
 | 
			
		||||
[submodule "3rdparty/qc_blobs"]
 | 
			
		||||
	path = 3rdparty/qc_blobs
 | 
			
		||||
	url = https://review.coreboot.org/qc_blobs.git
 | 
			
		||||
@@ -61,10 +60,3 @@
 | 
			
		||||
	path = 3rdparty/stm
 | 
			
		||||
	url = https://review.coreboot.org/STM
 | 
			
		||||
	branch = stmpe
 | 
			
		||||
[submodule "util/goswid"]
 | 
			
		||||
	path = util/goswid
 | 
			
		||||
	url = https://review.coreboot.org/goswid.git
 | 
			
		||||
	branch = trunk
 | 
			
		||||
[submodule "src/vendorcode/amd/opensil/genoa_poc/opensil"]
 | 
			
		||||
	path = src/vendorcode/amd/opensil/genoa_poc/opensil
 | 
			
		||||
	url = https://review.coreboot.org/opensil_genoa_poc.git
 | 
			
		||||
 
 | 
			
		||||
@@ -2,4 +2,4 @@
 | 
			
		||||
host=review.coreboot.org
 | 
			
		||||
port=29418
 | 
			
		||||
project=coreboot
 | 
			
		||||
defaultbranch=main
 | 
			
		||||
defaultbranch=master
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										425
									
								
								.mailmap
									
									
									
									
									
								
							
							
						
						@@ -1,425 +0,0 @@
 | 
			
		||||
# Map author and committer names and email addresses to canonical real names and
 | 
			
		||||
# email addresses. https://git-scm.com/docs/gitmailmap
 | 
			
		||||
#
 | 
			
		||||
# Note that this is only needed in the case where someone has contributed
 | 
			
		||||
# with multiple different email addresses or Names.
 | 
			
		||||
#
 | 
			
		||||
# Forms: Proper Name <commit@email.xx>
 | 
			
		||||
#        Proper Name <proper@email.xx> <commit@email.xx>
 | 
			
		||||
#        Proper Name <proper@email.xx> Commit Name <commit@email.xx>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Aamir Bohra <aamirbohra@gmail.com> <aamir.bohra@intel.com>
 | 
			
		||||
Aaron Durbin <adurbin@chromium.org>
 | 
			
		||||
Aaron Durbin <adurbin@chromium.org> <adurbin@adurbin.bld.corp.google.com>
 | 
			
		||||
Aaron Durbin <adurbin@chromium.org> <adurbin@google.com>
 | 
			
		||||
Abhay Kumar <abhay.kumar@intel.com>
 | 
			
		||||
Abhinav Hardikar <realdevmaster64@gmail.com> devmaster64 <devmaster64@gmail.com>
 | 
			
		||||
Alex Levin <levinale@google.com> <levinale@chromium.org>
 | 
			
		||||
Alex Miao <alex.miao@mediatek.corp-partner.google.com>
 | 
			
		||||
Alexandru Gagniuc <mr.nuke.me@gmail.com> <alexandrux.gagniuc@intel.com>
 | 
			
		||||
Alexandru Gagniuc <mr.nuke.me@gmail.com> mrnuke <mrnuke@nukelap.gtech>
 | 
			
		||||
Amanda Huang <amanda_hwang@compal.corp-partner.google.com>
 | 
			
		||||
Amol N Sukerkar <amol.n.sukerkar@intel.com>
 | 
			
		||||
Andrea Barberio <barberio@fb.com> <insomniac@slackware.it>
 | 
			
		||||
Andrey Petrov <anpetrov@fb.com> <andrey.petrov@intel.com>
 | 
			
		||||
Andrey Pronin <apronin@chromium.org> <apronin@google.com>
 | 
			
		||||
Andriy Gapon <avg@FreeBSD.org> <avg@icyb.net.ua>
 | 
			
		||||
Anil Kumar <anil.kumar.k@intel.com> <anil.kumar.k@intel.corp-partner.google.com>
 | 
			
		||||
Anish K. Patel <anishp@win-ent.com>
 | 
			
		||||
Anton Kochkov <anton.kochkov@gmail.com> <a.kochkov@securitycode.ru>
 | 
			
		||||
Antonello Dettori <dev@dettori.io> <dettori.an@gmail.com>
 | 
			
		||||
Ariel Fang <ariel_fang@wistron.corp-partner.google.com>
 | 
			
		||||
Arne Georg Gleditsch <arne.gleditsch@numascale.com> <arne.gleditsch@numscale.com>
 | 
			
		||||
Asami Doi <d0iasm.pub@gmail.com> <doiasami1219@gmail.com>
 | 
			
		||||
Ashwin Kumar <ashk@codeaurora.org>
 | 
			
		||||
Axel Holewa <mono@posteo.de> Mono <mono-for-coreboot@donderklumpen.de>
 | 
			
		||||
Axel Holewa <mono@posteo.de> Mono <mono@posteo.de>
 | 
			
		||||
Bao Zheng <fishbaozi@gmail.com>
 | 
			
		||||
Bao Zheng <fishbaozi@gmail.com> <Zheng Bao zheng.bao@amd.com>
 | 
			
		||||
Bao Zheng <fishbaozi@gmail.com> <zheng.bao@amd.com>
 | 
			
		||||
Bayi Cheng <bayi.cheng@mediatek.com>
 | 
			
		||||
Ben Zhang <benzh@google.com> <benzh@chromium.org>
 | 
			
		||||
Bernhard M. Wiedermann <corebootbmw@lsmod.de>
 | 
			
		||||
Bill Xie <persmule@hardenedlinux.org> <persmule@gmail.com>
 | 
			
		||||
Bill Xie <persmule@hardenedlinux.org> Bill XIE <persmule@hardenedlinux.org>
 | 
			
		||||
Bingxun Shi <bingxunshi@gmail.com>
 | 
			
		||||
Bingxun Shi <bingxunshi@gmail.com> <bxshi@msik.com.cn>
 | 
			
		||||
Brandon Breitenstein <brandon.breitenstein@intel.com> <brandon.breitenstein@intel.corp-partner.google.com>
 | 
			
		||||
Bruce Griffith <bruce.griffith@se-eng.com> <Bruce.Griffith@se-eng.com>
 | 
			
		||||
Bryant Ou <Bryant.Ou.Q@gmail.com>
 | 
			
		||||
Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net> <Carl-Daniel Hailfinger>
 | 
			
		||||
Casper Chang<casper_chang@wistron.corp-partner.google.com> <casper.chang@bitland.corp-partner.google.com>
 | 
			
		||||
Caveh Jalali <caveh@chromium.org> <caveh@google.com>
 | 
			
		||||
Caveh Jalali <caveh@chromium.org> caveh jalali <caveh@chromium.org>
 | 
			
		||||
Charles Marslett <charles@scarlettechnologies.com> <charles.marslett@silverbackltd.com>
 | 
			
		||||
Chee Soon Lew <chee.soon.lew@intel.com>
 | 
			
		||||
Cheng-Yi Chiang <cychiang@chromium.org> <cychiang@google.com>
 | 
			
		||||
Chris Ching <chris@ching.codes> <chingcodes@chromium.org>
 | 
			
		||||
Chris Ching <chris@ching.codes> <chingcodes@google.com>
 | 
			
		||||
Chris Wang <chris.wang@amd-corp-partner.google.com> <chriswang@ami.corp-partner.google.com>
 | 
			
		||||
Chris Wang <chris.wang@amd-corp-partner.google.com> Chris Wang <chris.wang@amd-corp-partner.google.com>
 | 
			
		||||
Chris Wang <chris.wang@amd-corp-partner.google.com> chris wang <chris.wang@amd.corp-partner.google.com>
 | 
			
		||||
Chris Wang <chris.wang@amd-corp-partner.google.com> Chris.Wang <chris.wang@amd.corp-partner.google.com>
 | 
			
		||||
Chris Zhou <chris_zhou@compal.corp-partner.google.com>
 | 
			
		||||
Christian Ruppert <idl0r@qasl.de> <idl0r@gentoo.org>
 | 
			
		||||
Chun-Jie Chen <chun-jie.chen@mediatek.corp-partner.google.com>
 | 
			
		||||
Clay Daniels Jr <clay.daniels.jr@gmail.com>
 | 
			
		||||
Cole Nelson<colex.nelson@intel.com>
 | 
			
		||||
Corey Osgood <corey.osgod@gmail.com> <corey_osgood@verizon.net>
 | 
			
		||||
Corey Osgood <corey.osgod@gmail.com> <corey.osgood@gmail.com>
 | 
			
		||||
Cristian Măgherușan-Stanciu <cristi.magherusan@gmail.com>
 | 
			
		||||
Cristian Măgherușan-Stanciu <cristi.magherusan@gmail.com> Cristi Magherusan <cristi.magherusan@net.utcluj.ro>
 | 
			
		||||
Da Lao <dalao@tutanota.com> dalao <dalao@tutanota.com>
 | 
			
		||||
Daisuke Nojiri <dnojiri@chromium.org> dnojiri <dnojiri@chromium.org>
 | 
			
		||||
Dan Elkouby <streetwalkermc@gmail.com> <streetwalrus@codewalr.us>
 | 
			
		||||
Daphne Jansen <dcjansen@chromium.org> Justin TerAvest <teravest@chromium.org>
 | 
			
		||||
Daphne Jansen <dcjansen@chromium.org> Justin TerAvest <teravest@google.com>
 | 
			
		||||
Dave Parker <dparker@chromium.org>
 | 
			
		||||
David Hendricks <davidhendricks@gmail.com> <david.hendricks@gmail.com>
 | 
			
		||||
David Hendricks <davidhendricks@gmail.com> <dhendricks@fb.com>
 | 
			
		||||
David Hendricks <davidhendricks@gmail.com> <dhendrix@chromium.org>
 | 
			
		||||
David Hendricks <davidhendricks@gmail.com> <dhendrix@fb.com>
 | 
			
		||||
David Hendricks <davidhendricks@gmail.com> <dhendrix@google.com>
 | 
			
		||||
David Hendricks <davidhendricks@gmail.com> David W. Hendricks <dwh@lanl.gov>
 | 
			
		||||
David Wu <david_wu@quantatw.com> <david_wu@quanta.corp-partner.google.com>
 | 
			
		||||
David Wu <david_wu@quantatw.com> david <david_wu@quantatw.com>
 | 
			
		||||
Dawei Chien <dawei.chien@mediatek.com>
 | 
			
		||||
Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org> <GNUtoo@no-log.org>
 | 
			
		||||
Derek Huang <derek.huang@intel.com> <derek.huang@intel.corp-partner.google.com>
 | 
			
		||||
Dmitry Ponamorev <dponamorev@gmail.com>
 | 
			
		||||
Douglas Anderson <dianders@chromium.org>
 | 
			
		||||
Duncan Laurie <dlaurie@chromium.org> <dlaurie@google.com>
 | 
			
		||||
Ed Swierk <eswierk@aristanetworks.com> <eswierk@arastra.com>
 | 
			
		||||
Edward O'Callaghan <quasisec@google.com> <edward.ocallaghan@koparo.com>
 | 
			
		||||
Edward O'Callaghan <quasisec@google.com> <eocallaghan@alterapraxis.com>
 | 
			
		||||
Edward O'Callaghan <quasisec@google.com> <funfunctor@folklore1984.net>
 | 
			
		||||
Edward O'Callaghan <quasisec@google.com> <quasisec@chromium.org>
 | 
			
		||||
Eric Biederman <ebiederm@xmission.com> <ebiederman@lnxi.com>
 | 
			
		||||
Eric Biederman <ebiederm@xmission.com> Eric W. Biederman <ebiederm@xmission.com>
 | 
			
		||||
Eugene Myers <edmyers@tycho.nsa.gov> <cedarhouse@comcast.net>
 | 
			
		||||
Evgeny Zinoviev <me@ch1p.io> <me@ch1p.com>
 | 
			
		||||
Felix Durairaj <felixx.durairaj@intel.com>
 | 
			
		||||
Felix Held <felix-coreboot@felixheld.de> <felix-github@felixheld.de>
 | 
			
		||||
Felix Held <felix-coreboot@felixheld.de> <felix.held@amd.corp-partner.google.com>
 | 
			
		||||
Felix Singer <felixsinger@posteo.net> <felix.singer@9elements.com>
 | 
			
		||||
Felix Singer <felixsinger@posteo.net> <felix.singer@secunet.com>
 | 
			
		||||
Felix Singer <felixsinger@posteo.net> <migy@darmstadt.ccc.de>
 | 
			
		||||
Francois Toguo Fotso <francois.toguo.fotso@intel.com> Francois Toguo <francois.toguo.fotso@intel.com>
 | 
			
		||||
Frank Chu <frank_chu@pegatron.corp-partner.google.com>
 | 
			
		||||
Frank Chu <frank_chu@pegatron.corp-partner.google.com> Frank Chu <Frank_Chu@pegatron.corp-partner.google.com>
 | 
			
		||||
Frank Chu <frank_chu@pegatron.corp-partner.google.com> FrankChu <Frank_Chu@pegatron.corp-partner.google.com>
 | 
			
		||||
Frank Vibrans <efdesign98@gmail.com> efdesign98 <efdesign98@gmail.com>
 | 
			
		||||
Frank Vibrans <efdesign98@gmail.com> Frank Vibrans <frank.vibrans@amd.com>
 | 
			
		||||
Frank Vibrans <efdesign98@gmail.com> frank vibrans <frank.vibrans@scarletltd.com>
 | 
			
		||||
Frank Vibrans <efdesign98@gmail.com> Frank Vibrans <frank.vibrans@se-eng.com>
 | 
			
		||||
Frank Vibrans <efdesign98@gmail.com> Frank.Vibrans <frank.vibrans@amd.com>
 | 
			
		||||
Furquan Shaikh <furquan@chromium.org> <furquan@google.com>
 | 
			
		||||
G. Pangao <gtk_pangao@mediatek.com> <gtk_pangao@mediatek.corp-partner.google.com>
 | 
			
		||||
Gabe Black <gabeblack@chromium.org> <gabeblack@chromium.com>
 | 
			
		||||
Gabe Black <gabeblack@chromium.org> <gabeblack@google.com>
 | 
			
		||||
Gaggery Tsai <gaggery.tsai@intel.com>
 | 
			
		||||
Georg Wicherski <gwicherski@gmail.com> <gw@oxff.net>
 | 
			
		||||
Gomathi Kumar <gomathi.kumar@intel.com>
 | 
			
		||||
Greg V <greg@unrelenting.technology>
 | 
			
		||||
Greg Watson <gwatson@lanl.gov> <jarrah@users.sourceforge.net>
 | 
			
		||||
Hannah Williams <hannah.williams@dell.com> <hannah.williams@intel.com>
 | 
			
		||||
Hao Chou <hao_chou@pegatron.corp-partner.google.com>
 | 
			
		||||
Haridhar Kalvala <haridhar.kalvala@intel.com> haridhar <haridhar.kalvala@intel.com>
 | 
			
		||||
Harsha Priya <harshapriya.n@intel.com>
 | 
			
		||||
Harsha Priya <harshapriya.n@intel.com> <harhapriya.n@intel.com>
 | 
			
		||||
Harshit Sharma <harshitsharmajs@gmail.com> harshit <harshitsharmajs@gmail.com>
 | 
			
		||||
Henry C Chen <henryc.chen@mediatek.com> henryc.chen <henryc.chen@mediatek.com>
 | 
			
		||||
Himanshu Sahdev <sahdev.himan@gmail.com> <himanshusah@hcl.com>
 | 
			
		||||
Himanshu Sahdev <sahdev.himan@gmail.com> Himanshu Sahdev aka CunningLearner <sahdev.himan@gmail.com>
 | 
			
		||||
Hsuan Ting Chen <roccochen@chromium.org> Hsuan-ting Chen <roccochen@google.com>
 | 
			
		||||
Huang Lin <hl@rock-chips.com>
 | 
			
		||||
Huayang Duan <huayang.duan@mediatek.com>
 | 
			
		||||
Huki Huang <huki.huang@intel.com>
 | 
			
		||||
Idwer Vollering <vidwer@gmail.com> <idwer_v@hotmail.com>
 | 
			
		||||
Igor Bagnucki <bagnucki02@gmail.com> <igor.bagnucki@3mdeb.com>
 | 
			
		||||
Indrek Kruusa <indrek.kruusa@artecdesign.ee>  <Indrek Kruusa>
 | 
			
		||||
Ivy Jian <ivy_jian@compal.com> <ivy_jian@compal.corp-partner.google.com>
 | 
			
		||||
Jacob Laska <jlaska91@gmail.com> <jlaska@xes-inc.com>
 | 
			
		||||
Jakub Czapiga <jacz@semihalf.com>
 | 
			
		||||
Jason Wang <Qingpei.Wang@amd.com> Jason WangQingpei.wang <Jason WangQingpei.wang@amd.com>
 | 
			
		||||
JasonX Z Chen <jasonx.z.chen@intel.com>
 | 
			
		||||
Jens Kühnel <coreboot@jens.kuehnel.org> Jens Kuehnel <coreboot@jens.kuehnel.org>
 | 
			
		||||
Jens Rottmann <JRottmann@LiPPERTembedded.de> <JRottmann@LiPPERTEmbedded.de>
 | 
			
		||||
Jeremy Compostella  <jeremy.compostella@intel.com> <jeremy.compostella@gmail.com>
 | 
			
		||||
Jeremy Soller <jackpot51@gmail.com> <jeremy@system76.com>
 | 
			
		||||
Jiaxin Yu <jiaxin.yu@mediatek.com>
 | 
			
		||||
Jiazi Yang <Tomato_Yang@asus.com>
 | 
			
		||||
Jim Lai <jim.lai@intel.com>
 | 
			
		||||
Jingle Hsu <jingle_hsu@wiwynn.com>
 | 
			
		||||
Jinkun Hong <jinkun.hong@rock-chips.com>
 | 
			
		||||
Joe Moore <awokd@danwin1210.me>
 | 
			
		||||
Joe Pillow <joseph.a.pillow@gmail.com>
 | 
			
		||||
Johanna Schander <coreboot@mimoja.de>
 | 
			
		||||
John Zhao <john.zhao@intel.com>
 | 
			
		||||
Jonathan Kollasch <jakllsch@kollasch.net>
 | 
			
		||||
Jordan Crouse <jordan@cosmicpenguin.net>  <Jordan Crouse>
 | 
			
		||||
Jordan Crouse <jordan@cosmicpenguin.net> <jordan.crouse@amd.com>
 | 
			
		||||
Josef Kellermann <Joseph.Kellermann@heitec.de> <seppk@arcor.de>
 | 
			
		||||
Josef Kellermann <Joseph.Kellermann@heitec.de> Josef Kellermannseppk <Josef Kellermannseppk@arcor.de>
 | 
			
		||||
Joseph Smith <joe@settoplinux.org> <joe@settoplinux.org Acked-by: Joseph Smith joe@settoplinux.org>
 | 
			
		||||
Joseph Smith <joe@settoplinux.org> <joe@smittys.pointclark.net>
 | 
			
		||||
Juergen Beisert <juergen@kreuzholzen.de> <juergen127@kreuzholzen.de>
 | 
			
		||||
Julian Schroeder <julianmarcusschroeder@gmail.com> <julian.schroeder@amd.com>
 | 
			
		||||
Julien Viard de Galbert <julien@vdg.name> <jviarddegalbert@online.net>
 | 
			
		||||
Justin Wu <amersel@runbox.me>
 | 
			
		||||
Kaiyen Chang <kaiyen.chang@intel.com> <kaiyen.chang@intel.corp-partner.google.com>
 | 
			
		||||
Kane Chen <kane.chen@intel.com> <kane_chen@pegatron.corp-partner.google.com>
 | 
			
		||||
Kane Chen <kane.chen@intel.com> <kane.chen@intel.corp-partner.google.com>
 | 
			
		||||
Kane Chen <kane.chen@intel.com> Kane Chenffd <kane_chen@pegatron.corp-partner.google.com>
 | 
			
		||||
Kane Chen <kane.chen@intel.com> kane_chen <kane_chen@pegatron.corp-partner.google.com>
 | 
			
		||||
Kane Chen <kane.chen@intel.com> YanRu Chen <kane_chen@pegatron.corp-partner.google.com>
 | 
			
		||||
Kane Chen <kane.chen@intel.com> YenLu Chen <kane_chen@pegatron.corp-partner.google.com>
 | 
			
		||||
Karthikeyan Ramasubramanian <kramasub@google.com> <kramasub@chromium.org>
 | 
			
		||||
Katie Roberts-Hoffman <katierh@chromium.org>  <katierh@google.com>
 | 
			
		||||
Kerry She <kerry.she@amd.com> <Kerry.she@amd.com>
 | 
			
		||||
Kerry Sheh <shekairui@gmail.com>
 | 
			
		||||
Kevin Chang <kevin.chang@lcfc.corp-partner.google.com>
 | 
			
		||||
Kevin Chiu <kevin.chiu.17802@gmail.com> <kevin.chiu@quanta.corp-partner.google.com>
 | 
			
		||||
Kevin Chiu <kevin.chiu.17802@gmail.com> <kevin.chiu@quantatw.com>
 | 
			
		||||
Kevin Chiu <kevin.chiu.17802@gmail.com> <Kevin.Chiu@quantatw.com>
 | 
			
		||||
Kevin Paul Herbert <kph@platinasystems.com> <kevin@trippers.org>
 | 
			
		||||
Kevin Paul Herbert <kph@platinasystems.com> <kph@meraki.net>
 | 
			
		||||
Kirk Wang <kirk_wang@pegatron.corp-partner.google.com> kirk_wang <kirk_wang@pegatron.corp-partner.google.com>
 | 
			
		||||
Konstantin Aladyshev <aladyshev22@gmail.com> <aladyshev@nicevt.ru>
 | 
			
		||||
Kyösti Mälkki <kyosti.malkki@gmail.com>
 | 
			
		||||
Kyösti Mälkki <kyosti.malkki@gmail.com> <kyosti.malkki@3mdeb.com>
 | 
			
		||||
Lean Sheng Tan <sheng.tan@9elements.com> <lean.sheng.tan@intel.com>
 | 
			
		||||
Lee Leahy <lpleahyjr@gmail.com> <leroy.p.leahy@intel.com>
 | 
			
		||||
Li Cheng Sooi <li.cheng.sooi@intel.com>
 | 
			
		||||
Lijian Zhao <lijian.zhao@intel.com>
 | 
			
		||||
Lin Huang <hl@rock-chips.com>
 | 
			
		||||
Maciej Matuszczyk <maccraft123mc@gmail.com>
 | 
			
		||||
Maggie Li <maggie.li@amd.com> <Maggie.li@amd.com>
 | 
			
		||||
Manideep Kurumella <mkurumel@qualcomm.corp-partner.google.com> <mkurumel@codeaurora.org>
 | 
			
		||||
Marc Jones <marc@marcjonesconsulting.com> <marc.jones@amd.com>
 | 
			
		||||
Marc Jones <marc@marcjonesconsulting.com> <marc.jones@gmail.com>
 | 
			
		||||
Marc Jones <marc@marcjonesconsulting.com> <marc.jones@scarletltd.com>
 | 
			
		||||
Marc Jones <marc@marcjonesconsulting.com> <marc.jones@se-eng.com>
 | 
			
		||||
Marc Jones <marc@marcjonesconsulting.com> <marcj.jones@amd.com>
 | 
			
		||||
Marc Jones <marc@marcjonesconsulting.com> <marcj303@gmail.com>
 | 
			
		||||
Marc Jones <marc@marcjonesconsulting.com> <marcj303@yahoo.com>
 | 
			
		||||
Marc Jones <marc@marcjonesconsulting.com> <marcjones@sysproconsulting.com>
 | 
			
		||||
Marc Jones <marc@marcjonesconsulting.com> Marc Jones (marc.jones <Marc Jones (marc.jones@amd.com)>
 | 
			
		||||
Marc Jones <marc@marcjonesconsulting.com> Marc Jones(marc.jones <Marc Jones(marc.jones@amd.com)>
 | 
			
		||||
Marcello Sylvester Bauer <sylv@sylv.io>
 | 
			
		||||
Marcello Sylvester Bauer <sylv@sylv.io> <info@marcellobauer.com>
 | 
			
		||||
Marcello Sylvester Bauer <sylv@sylv.io> <sylvblck@sylv.io>
 | 
			
		||||
Marco Chen <marcochen@google.com> <marcochen@chromium.org>
 | 
			
		||||
Mariusz Szafrański <mariuszx.szafranski@intel.com> Mariusz Szafranski <mariuszx.szafranski@intel.com>
 | 
			
		||||
Marshall Dawson <marshalldawson3rd@gmail.com> <marshall.dawson@amd.corp-partner.google.com>
 | 
			
		||||
Marshall Dawson <marshalldawson3rd@gmail.com> <marshall.dawson@scarletltd.com>
 | 
			
		||||
Mart Raudsepp <leio@gentoo.org> <mart.raudsepp@artecdesign.ee>
 | 
			
		||||
Martin Kepplinger <martink@posteo.de> <martin.kepplinger@puri.sm>
 | 
			
		||||
Martin Roth <gaumless@gmail.com> <martin.roth@se-eng.com>
 | 
			
		||||
Martin Roth <gaumless@gmail.com> <martin@coreboot.org>
 | 
			
		||||
Martin Roth <gaumless@gmail.com> <martinr@coreboot.org>
 | 
			
		||||
Martin Roth <gaumless@gmail.com> <martinroth@chromium.org>
 | 
			
		||||
Martin Roth <gaumless@gmail.com> <martinroth@google.com>
 | 
			
		||||
Martin Roth <gaumless@gmail.com> Martin Roth <martin@se-eng.com>
 | 
			
		||||
Marx Wang <marx.wang@intel.com>
 | 
			
		||||
Mathias Krause <minipli@googlemail.com> <mathias.krause@secunet.com>
 | 
			
		||||
Mathias Krause <minipli@googlemail.com> <Mathias.Krause@secunet.com>
 | 
			
		||||
Mats Erik Andersson <mats.andersson@gisladisker.org> <mats.andersson@gisladisker.se>
 | 
			
		||||
Matt DeVillier <matt.devillier@gmail.com> <matt.devillier@puri.sm>
 | 
			
		||||
Matt Papageorge <matthewpapa07@gmail.com> <matt.papageorge@amd.corp-partner.google.com>
 | 
			
		||||
Matt Ziegelbaum <ziegs@google.com> <ziegs@chromium.org>
 | 
			
		||||
Maulik V Vaghela <maulik.v.vaghela@intel.com>
 | 
			
		||||
Maulik V Vaghela <maulik.v.vaghela@intel.com> <maulik.v.vaghela@intel.corp-partner.google.com>
 | 
			
		||||
Max Blau <tripleshiftone@gmail.com> Bluemax <1403092+BlueMax@users.noreply.github.com>
 | 
			
		||||
Maxim Polyakov <max.senia.poliak@gmail.com> <m.poliakov@yahoo.com>
 | 
			
		||||
Mengqi Zhang <Mengqi.Zhang@mediatek.com> mengqi.zhang <mengqi.zhang@mediatek.com>
 | 
			
		||||
Michael Niewöhner <foss@mniewoehner.de> <michael.niewoehner@8com.de>
 | 
			
		||||
Michael Xie <Michael.Xie@amd.com> <Michael Xie Michael.Xie@amd.com>
 | 
			
		||||
Michele Guerini Rocco <rnhmjoj@inventati.org>
 | 
			
		||||
Mike Banon <mikebdp2@gmail.com> <mike.banon@3mdeb.com>
 | 
			
		||||
Mike Hsieh <Mike_Hsieh@wistron.com> <mike_hsieh@wistron.corp-partner.google.com>
 | 
			
		||||
Mike Loptien <loptienm@gmail.com> <mike.loptien@se-eng.com>
 | 
			
		||||
Mondrian Nuessle <nuessle@uni-hd.de>
 | 
			
		||||
Mondrian Nuessle <nuessle@uni-hd.de> <nuessle@uni-mannheim.de>
 | 
			
		||||
Motiejus Jakštys <desired.mta@gmail.com>
 | 
			
		||||
Myles Watson <mylesgw@gmail.com>  <myles@pel.cs.byu.edu>
 | 
			
		||||
Nancy Lin <nancy.lin@mediatek.com>
 | 
			
		||||
Naresh Solanki <naresh.solanki@intel.com>
 | 
			
		||||
Naresh Solanki <naresh.solanki@intel.com> <Naresh.Solanki@intel.com>
 | 
			
		||||
Naveen Manohar <naveen.m@intel.com>
 | 
			
		||||
Naveen Manohar <naveen.m@intel.com>
 | 
			
		||||
Neil Chen <neilc@nvidia.com> <neilc%nvidia.com@gtempaccount.com>
 | 
			
		||||
Nick Chen <nick_xr_chen@wistron.corp-partner.google.com>
 | 
			
		||||
Nick Vaccaro <nvaccaro@google.com> <nvaccaro@chromium.org>
 | 
			
		||||
Nicky Sielicki <nlsielicki@wisc.edu>
 | 
			
		||||
Nico Huber <nico.h@gmx.de> <nico.huber@secunet.com>
 | 
			
		||||
Nicolas Boichat <drinkcat@chromium.org> <drinkcat@google.com>
 | 
			
		||||
Nicolas Reinecke <nr@das-labor.org>
 | 
			
		||||
Nils Jacobs <njacobs8@adsltotaal.nl> <njacobs8@hetnet.nl>
 | 
			
		||||
Nina Wu <nina-cm.wu@mediatek.com> <nina-cm.wu@mediatek.corp-partner.google.com>
 | 
			
		||||
Oskar Enoksson <enok@lysator.liu.se>
 | 
			
		||||
Oskar Enoksson <enok@lysator.liu.se> <oskeno@foi.se>
 | 
			
		||||
Pablo Moyano <42.pablo.ms@gmail.com> p4block <p4block@users.noreply.github.com>
 | 
			
		||||
Patrick Georgi <patrick@coreboot.org> <Patrick Georgi patrick.georgi@coresystems.de>
 | 
			
		||||
Patrick Georgi <patrick@coreboot.org> <Patrick Georgi patrick@georgi-clan.de>
 | 
			
		||||
Patrick Georgi <patrick@coreboot.org> <patrick.georgi@coresystems.de>
 | 
			
		||||
Patrick Georgi <patrick@coreboot.org> <patrick.georgi@secunet.com>
 | 
			
		||||
Patrick Georgi <patrick@coreboot.org> <Patrick.Georgi@secunet.com>
 | 
			
		||||
Patrick Georgi <patrick@coreboot.org> <patrick@georgi-clan.de>
 | 
			
		||||
Patrick Georgi <patrick@coreboot.org> <patrick@georgi.software>
 | 
			
		||||
Patrick Georgi <patrick@coreboot.org> Patrick Georgi <pgeorgi@chromium.org>
 | 
			
		||||
Patrick Georgi <patrick@coreboot.org> Patrick Georgi <pgeorgi@google.com>
 | 
			
		||||
Patrick Rudolph  <siro@das-labor.org> <patrick.rudolph@9elements.com>
 | 
			
		||||
Paul Fagerburg <pfagerburg@chromium.org> <pfagerburg@google.com>
 | 
			
		||||
Paul Kocialkowski <contact@paulk.fr>
 | 
			
		||||
Paul Ma <magf@bitland.com.cn> <magf@bitland.corp-partner.google.com>
 | 
			
		||||
Paul Ma <magf@bitland.com.cn> Magf - <magf@bitland.corp-partner.google.com>
 | 
			
		||||
Paul Menzel <pmenzel@molgen.mpg.de> <paulepanter@mailbox.org>
 | 
			
		||||
Paul Menzel <pmenzel@molgen.mpg.de> <paulepanter@users.sourceforge.net>
 | 
			
		||||
Peichao Wang <peichao.wang@bitland.corp-partner.google.com>
 | 
			
		||||
Peichao Wang <peichao.wang@bitland.corp-partner.google.com>
 | 
			
		||||
Philip Chen <philipchen@google.com>
 | 
			
		||||
Philip Chen <philipchen@google.com> <philipchen@chromium.org>
 | 
			
		||||
Philipp Deppenwiese <zaolin.daisuki@gmail.com>
 | 
			
		||||
Philipp Deppenwiese <zaolin.daisuki@gmail.com> <philipp.deppenwiese@9elements.com>
 | 
			
		||||
Philipp Deppenwiese <zaolin.daisuki@gmail.com> <zaolin@das-labor.org>
 | 
			
		||||
Ping-chung Chen <ping-chung.chen@intel.com>
 | 
			
		||||
Ping-chung Chen <ping-chung.chen@intel.com>
 | 
			
		||||
Piotr Kleinschmidt <piotr.kleinschmidt@3mdeb.com> <piotr.kleins@gmail.com>
 | 
			
		||||
Piotr Szymaniak <szarpaj@grubelek.pl>
 | 
			
		||||
Po Xu <jg_poxu@mediatek.com>
 | 
			
		||||
Po Xu <jg_poxu@mediatek.com> <jg_poxu@mediatek.corp-partner.google.com>
 | 
			
		||||
Praveen Hodagatta Pranesh <praveenx.hodagatta.pranesh@intel.com>
 | 
			
		||||
Preetham Chandrian <preetham.chandrian@intel.com>
 | 
			
		||||
Puthikorn Voravootivat <puthik@chromium.org> <puthik@google.com>
 | 
			
		||||
QingPei Wang <wangqingpei@gmail.com>
 | 
			
		||||
Quan Tran <qeed.quan@gmail.com>
 | 
			
		||||
Rasheed Hsueh <rasheed.hsueh@lcfc.corp-partner.google.com>
 | 
			
		||||
Raul Rangel <rrangel@chromium.org>
 | 
			
		||||
Ravi Kumar Bokka <rbokka@codeaurora.org>
 | 
			
		||||
Ravindra <ravindra@intel.com>
 | 
			
		||||
Ravindra <ravindra@intel.com> Ravindra N <ravindra@intel.corp-partner.google.com>
 | 
			
		||||
Ravishankar Sarawadi <ravishankar.sarawadi@intel.com>
 | 
			
		||||
Raymond Chung <raymondchung@ami.corp-partner.google.com>
 | 
			
		||||
Raymond Danks <raymonddanks@gmail.com> <ray.danks@se-eng.com>
 | 
			
		||||
Reka Norman <rekanorman@google.com> <rekanorman@chromium.org>
 | 
			
		||||
Ren Kuo <ren.kuo@quantatw.com>
 | 
			
		||||
Ren Kuo <ren.kuo@quantatw.com> <ren.kuo@quanta.corp-partner.google.com>
 | 
			
		||||
Rex-BC Chen <rex-bc.chen@mediatek.com> <rex-bc.chen@mediatek.corp-partner.google.com>
 | 
			
		||||
Ricardo Ribalda <ribalda@chromium.org> <ricardo.ribalda@gmail.com>
 | 
			
		||||
Richard Spiegel <richard.spiegel@silverbackltd.com> <richard.spiegel@amd.corp-partner.google.com>
 | 
			
		||||
Rishavnath Satapathy <rishavnath.satapathy@intel.com>
 | 
			
		||||
Ritul Guru <ritul.bits@gmail.com>
 | 
			
		||||
Rizwan Qureshi <rizwan.qureshi@intel.com> <rizwan.qureshi@intel.corp-partner.google.com>
 | 
			
		||||
Robbie Zhang <robbie.zhang@intel.com>
 | 
			
		||||
Robert Chen <robert.chen@quanta.corp-partner.google.com>
 | 
			
		||||
Robert Chen <robert.chen@quanta.corp-partner.google.com> = <robert.chen@quanta.corp-partner.google.com>
 | 
			
		||||
Roger Pau Monne <roger.pau@citrix.com>
 | 
			
		||||
Roman Kononov <kononov@dls.net> <kononov195-lbl@yahoo.com>
 | 
			
		||||
Ron Minnich <rminnich@gmail.com>
 | 
			
		||||
Ron Minnich <rminnich@gmail.com> <Ron Minnich>
 | 
			
		||||
Ron Minnich <rminnich@gmail.com> <Ronald G. Minnich rminnich@gmail.com>
 | 
			
		||||
Ron Minnich <rminnich@gmail.com> Ronald G. Minnich <minnich@google.com>
 | 
			
		||||
Ron Minnich <rminnich@gmail.com> Ronald G. Minnich <rminnich@chromium.org>
 | 
			
		||||
Ron Minnich <rminnich@gmail.com> Ronald G. Minnich <rminnich@google.com>
 | 
			
		||||
Ron Minnich <rminnich@gmail.com> Ronald G. Minnich <rminnich@lanl.gov>
 | 
			
		||||
Ron Minnich <rminnich@gmail.com> ronald g. minnich <ronald g. minnich>
 | 
			
		||||
Ron Minnich <rminnich@gmail.com> Ronald G. Minnich <Ronald G. Minnich>
 | 
			
		||||
Ronak Kanabar <ronak.kanabar@intel.com>
 | 
			
		||||
Rudolf Marek <r.marek@assembler.cz> <r.marek@asssembler.cz>
 | 
			
		||||
Ryan Chuang <ryan.chuang@mediatek.com> <ryan.chuang@mediatek.corp-partner.google.com>
 | 
			
		||||
Santhosh Janardhana Hassan <sahassan@google.com>
 | 
			
		||||
Scott Chao <scott_chao@wistron.corp-partner.google.com> <scott.chao@bitland.corp-partner.google.com>
 | 
			
		||||
Scott Duplichan <scott@notabs.org> <sc...@notabs.org>
 | 
			
		||||
Scott Tsai <AT>
 | 
			
		||||
Sebastian "Swift Geek" Grzywna <swiftgeek@gmail.com>
 | 
			
		||||
Selma Bensaid <selma.bensaid@intel.com>
 | 
			
		||||
Seunghwan Kim <sh_.kim@samsung.com>
 | 
			
		||||
Seunghwan Kim <sh_.kim@samsung.com> <sh_.kim@samsung.corp-partner.google.com>
 | 
			
		||||
Seunghwan Kim <sh_.kim@samsung.com> sh.kim <sh_.kim@samsung.corp-partner.google.com>
 | 
			
		||||
Shawn Chang <citypw@gmail.com>
 | 
			
		||||
Shawn Nematbakhsh <shawnn@google.com> <shawnn@chromium.org>
 | 
			
		||||
Shelley Chen <shchen@google.com> <shchen@chromium.org>
 | 
			
		||||
Sheng-Liang Pan <Sheng-Liang.Pan@quantatw.com> <sheng-liang.pan@quanta.corp-partner.google.com>
 | 
			
		||||
Shreesh Chhabbi <shreesh.chhabbi@intel.com> <shreesh.chhabbi@intel.corp-partner.google.com>
 | 
			
		||||
Shunqian Zheng <zhengsq@rock-chips.com>
 | 
			
		||||
Siyuan Wang <wangsiyuanbuaa@gmail.com>
 | 
			
		||||
Sowmya <v.sowmya@intel.com>
 | 
			
		||||
Sridhar Siricilla <sridhar.siricilla@intel.com>
 | 
			
		||||
Sridhar Siricilla <sridhar.siricilla@intel.com> <sridhar.siricilla@intel.corp-partner.google.com>
 | 
			
		||||
Srinidhi Kaushik <srinidhi.n.kaushik@intel.com>
 | 
			
		||||
Stanley Wu <stanley1.wu@lcfc.corp-partner.google.com>
 | 
			
		||||
Stefan Ott <stefan@ott.net> <coreboot@desire.ch>
 | 
			
		||||
Stefan Reinauer <stepan@coreboot.org> <reinauer@chromium.org>
 | 
			
		||||
Stefan Reinauer <stepan@coreboot.org> <reinauer@google.com>
 | 
			
		||||
Stefan Reinauer <stepan@coreboot.org> <Stefan Reinauerstepan@coresystems.de>
 | 
			
		||||
Stefan Reinauer <stepan@coreboot.org> <stefan.reinauer@coreboot.org>
 | 
			
		||||
Stefan Reinauer <stepan@coreboot.org> <stepan@coresystems.de>
 | 
			
		||||
Stefan Reinauer <stepan@coreboot.org> <stepan@openbios.org>
 | 
			
		||||
Stephan Guilloux <stephan.guilloux@free.fr> <mailto:stephan.guilloux@free.fr>
 | 
			
		||||
Subrata Banik <subratabanik@google.com> <subi.banik@gmail.com>
 | 
			
		||||
Subrata Banik <subratabanik@google.com> <subrata.banik@intel.com>
 | 
			
		||||
Subrata Banik <subratabanik@google.com> <subrata.banik@intel.com>
 | 
			
		||||
Sudheer Kumar Amrabadi <samrab@codeaurora.org>
 | 
			
		||||
Sumeet Pawnikar <sumeet.r.pawnikar@intel.com>
 | 
			
		||||
Sunwei Li <lisunwei@huaqin.corp-partner.google.com>
 | 
			
		||||
Susendra Selvaraj <susendra.selvaraj@intel.com>
 | 
			
		||||
Sylvain "ythier" Hitier <sylvain.hitier@gmail.com>
 | 
			
		||||
T Michael Turney <mturney@codeaurora.org> mturney mturney <quic_mturney@quicinc.com>
 | 
			
		||||
T Michael Turney <mturney@codeaurora.org> T Michael Turney <quic_mturney@quicinc.com>
 | 
			
		||||
T.H. Lin <T.H_Lin@quantatw.com> <t.h_lin@quanta.corp-partner.google.com>
 | 
			
		||||
T.H. Lin <T.H_Lin@quantatw.com> T.H.Lin <T.H_Lin@quantatw.com>
 | 
			
		||||
Taniya Das <quic_tdas@quicinc.com> <tdas@codeaurora.org>
 | 
			
		||||
Tao Xia <xiatao5@huaqin.corp-partner.google.com>
 | 
			
		||||
Thejaswani Putta  <thejaswani.putta@intel.com> <thejaswani.putta@intel.corp-partner.google.com>
 | 
			
		||||
Thejaswani Putta <thejaswani.putta@intel.com>
 | 
			
		||||
Thejaswani Putta <thejaswani.putta@intel.com> Thejaswani Puta thejaswani.putta@intel.com <thejaswani.putta@intel.com>
 | 
			
		||||
Thomas Heijligen <thomas.heijligen@secunet.com> <src@posteo.de>
 | 
			
		||||
Tim Chen <Tim-Chen@quantatw.com> <tim-chen@quanta.corp-partner.google.com>
 | 
			
		||||
Tim Chu <Tim.Chu@quantatw.com>
 | 
			
		||||
Tim Wawrzynczak <twawrzynczak@chromium.org> <twawrzynczak@google.com>
 | 
			
		||||
Timothy Pearson <tpearson@raptorengineering.com> <tpearson@raptorengineeringinc.com>
 | 
			
		||||
Tinghan Shen <tinghan.shen@mediatek.com>
 | 
			
		||||
Tobias Diedrich <ranma+coreboot@tdiedrich.de> <ranma+openocd@tdiedrich.de>
 | 
			
		||||
Tracy Wu <tracy.wu@intel.com> <tracy.wu@intel.corp-partner.google.com>
 | 
			
		||||
Tristan Corrick <tristan@corrick.kiwi> <tristancorrick86@gmail.com>
 | 
			
		||||
Tyler Wang <tyler.wang@quanta.corp-partner.google.com> <Tyler.Wang@quanta.corp-partner.google.com>
 | 
			
		||||
Usha P <usha.p@intel.com> <usha.p@intel.corp-partner.google.com>
 | 
			
		||||
V Sujith Kumar Reddy <vsujithk@codeaurora.org>
 | 
			
		||||
Vadim Bendebury <vbendeb@chromium.org> <vbendeb@google.com>
 | 
			
		||||
Vaibhav Shankar <vaibhav.shankar@intel.com>
 | 
			
		||||
Van Chen <van_chen@compal.corp-partner.google.com>
 | 
			
		||||
Varshit Pandya <varshit.b.pandya@intel.com>
 | 
			
		||||
Varshit Pandya <varshit.b.pandya@intel.com> Varshit B Pandya <varshit.b.pandya@intel.com>
 | 
			
		||||
Varun Joshi <varun.joshi@intel.com> <varun.joshi@intel.corp-partner.google.com>
 | 
			
		||||
Vincent Lim <vincent.lim@amd.com>  <Vincent Lim vincent.lim@amd.com>
 | 
			
		||||
Vladimir Serbinenko <phcoder@gmail.com>
 | 
			
		||||
Wayne3 Wang <wayne3_wang@pegatron.corp-partner.google.com> <Wayne3_Wang@pegatron.corp-partner.google.com>
 | 
			
		||||
William Wu <wulf@rock-chips.com>
 | 
			
		||||
Wim Vervoorn <wvervoorn@eltan.com>
 | 
			
		||||
Wisley Chen <wisley.chen@quantatw.com>
 | 
			
		||||
Wisley Chen <wisley.chen@quantatw.com> <wisley.chen@quanta.corp-partner.google.com>
 | 
			
		||||
Xi Chen <xixi.chen@mediatek.com> <xixi.chen@mediatek.corp-partner.google.com>
 | 
			
		||||
Xiang Wang <merle@hardenedlinux.org> <wxjstz@126.com>
 | 
			
		||||
Xingyu Wu <wuxy@bitland.corp-partner.google.com>
 | 
			
		||||
Xuxin Xiong <xuxinxiong@huaqin.corp-partner.google.com>
 | 
			
		||||
Yang A Fang <yang.a.fang@intel.com>
 | 
			
		||||
Yinghai Lu <yinghailu@gmail.com> <yinghai.lu at amd.com>
 | 
			
		||||
Yinghai Lu <yinghailu@gmail.com> <yinghai.lu@amd.com>
 | 
			
		||||
Yinghai Lu <yinghailu@gmail.com> <yinghai@kernel.org>
 | 
			
		||||
Yongkun Yu <yuyongkun@huaqin.corp-partner.google.com>
 | 
			
		||||
Yongqiang Niu <yongqiang.niu@mediatek.com>
 | 
			
		||||
Youness Alaoui <snifikino@gmail.com> <kakaroto@kakaroto.homelinux.net>
 | 
			
		||||
Youness Alaoui <snifikino@gmail.com> <youness.alaoui@puri.sm>
 | 
			
		||||
Yu-Hsuan Hsu <yuhsuan@google.com>
 | 
			
		||||
Yu-Hsuan Hsu <yuhsuan@google.com> <yuhsuan@chromium.org>
 | 
			
		||||
Yu-Ping Wu <yupingso@google.com> <yupingso@chromium.org>
 | 
			
		||||
Yuanlidingm <yuanliding@huaqin.corp-partner.google.com>
 | 
			
		||||
Yuchen Huang <yuchen.huang@mediatek.com> <yuchen.huang@mediatek.corp-partner.google.com>
 | 
			
		||||
Yuji Sasaki <sasakiy@chromium.org> <sasakiy@google.com>
 | 
			
		||||
Zanxi Chen <chenzanxi@huaqin.corp-partner.google.com>
 | 
			
		||||
Zhi Li <lizhi7@huaqin.corp-partner.google.com>
 | 
			
		||||
Zhongze Hu <frankhu@chromium.org> <frankhu@google.com>
 | 
			
		||||
Zhuo-Hao Lee <zhuo-hao.lee@intel.com>
 | 
			
		||||
Zhuohao Lee <zhuohao@chromium.org> <zhuohao@google.com>
 | 
			
		||||
							
								
								
									
										2
									
								
								3rdparty/amd_blobs
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
							
								
								
									
										2
									
								
								3rdparty/arm-trusted-firmware
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
							
								
								
									
										2
									
								
								3rdparty/blobs
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
							
								
								
									
										2
									
								
								3rdparty/chromeec
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
							
								
								
									
										2
									
								
								3rdparty/cmocka
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
							
								
								
									
										2
									
								
								3rdparty/fsp
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
							
								
								
									
										2
									
								
								3rdparty/intel-microcode
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
							
								
								
									
										2
									
								
								3rdparty/libgfxinit
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
							
								
								
									
										2
									
								
								3rdparty/libhwbase
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
							
								
								
									
										2
									
								
								3rdparty/opensbi
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
							
								
								
									
										2
									
								
								3rdparty/qc_blobs
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
							
								
								
									
										2
									
								
								3rdparty/vboot
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
							
								
								
									
										553
									
								
								AUTHORS
									
									
									
									
									
								
							
							
						
						@@ -10,212 +10,73 @@
 | 
			
		||||
 | 
			
		||||
3mdeb Embedded Systems Consulting
 | 
			
		||||
9elements Agency GmbH
 | 
			
		||||
Aamir Bohra
 | 
			
		||||
Aaron Durbin
 | 
			
		||||
Abe Levkoy
 | 
			
		||||
Abel Briggs
 | 
			
		||||
Abhinav Hardikar
 | 
			
		||||
AdaCore
 | 
			
		||||
Adam Liu
 | 
			
		||||
Adam Mills
 | 
			
		||||
Advanced Computing Lab, LANL
 | 
			
		||||
Advanced Micro Devices, Inc.
 | 
			
		||||
AdaCore
 | 
			
		||||
AG Electronics Ltd.
 | 
			
		||||
Ahamed Husni
 | 
			
		||||
Akshu Agrawal
 | 
			
		||||
Al Hirani
 | 
			
		||||
Alan Huang
 | 
			
		||||
AlanKY Lee
 | 
			
		||||
Alec Wang
 | 
			
		||||
Alex James
 | 
			
		||||
Alex Levin
 | 
			
		||||
Alex Miao
 | 
			
		||||
Alex Thiessen
 | 
			
		||||
Alex Züpke
 | 
			
		||||
Alex1 Kao
 | 
			
		||||
Alexander Couzens
 | 
			
		||||
Alexander Goncharov
 | 
			
		||||
Alexandru Gagniuc
 | 
			
		||||
Alexey Buyanov
 | 
			
		||||
Alexey Vazhnov
 | 
			
		||||
Alice Sell
 | 
			
		||||
Allen-KH Cheng
 | 
			
		||||
Amanda Hwang
 | 
			
		||||
American Megatrends International, LLC
 | 
			
		||||
Amersel
 | 
			
		||||
Amit Caleechurn
 | 
			
		||||
Analog Devices Inc.
 | 
			
		||||
Analogix Semiconductor
 | 
			
		||||
Anand Mistry
 | 
			
		||||
Anand Vaikar
 | 
			
		||||
Andre Heider
 | 
			
		||||
Andrew McRae
 | 
			
		||||
Andrew SH Cheng
 | 
			
		||||
Andrey Pronin
 | 
			
		||||
Andriy Gapon
 | 
			
		||||
Andy Fleming
 | 
			
		||||
Andy Pont
 | 
			
		||||
Andy-ld Lu
 | 
			
		||||
Angel Pons
 | 
			
		||||
Anil Kumar K
 | 
			
		||||
Anna Karaś
 | 
			
		||||
Annie Chen
 | 
			
		||||
Anton Kochkov
 | 
			
		||||
Ao Zhong
 | 
			
		||||
Arashk Mahshidfar
 | 
			
		||||
Arec Kao
 | 
			
		||||
Ariel Fang
 | 
			
		||||
ARM Limited and Contributors
 | 
			
		||||
Arthur Heymans
 | 
			
		||||
Asami Doi
 | 
			
		||||
Aseda Aboagye
 | 
			
		||||
Ashish Kumar Mishra
 | 
			
		||||
Ashqti
 | 
			
		||||
ASPEED Technology Inc.
 | 
			
		||||
Atheros Corporation
 | 
			
		||||
Atmel Corporation
 | 
			
		||||
Balaji Manigandan
 | 
			
		||||
Balázs Vinarz
 | 
			
		||||
BAP - Bruhnspace Advanced Projects
 | 
			
		||||
Baruch Siach
 | 
			
		||||
Ben Chuang
 | 
			
		||||
Ben Kao
 | 
			
		||||
Ben McMillen
 | 
			
		||||
Ben Zhang
 | 
			
		||||
Benjamin Doron
 | 
			
		||||
Bernardo Perez Priego
 | 
			
		||||
Bhanu Prakash Maiya
 | 
			
		||||
Bill Xie
 | 
			
		||||
Bin Meng
 | 
			
		||||
Bitland Tech Inc.
 | 
			
		||||
Bob Moragues
 | 
			
		||||
Bora Guvendik
 | 
			
		||||
Boris Barbulovski
 | 
			
		||||
Boris Mittelberg
 | 
			
		||||
Brandon Breitenstein
 | 
			
		||||
Brian Norris
 | 
			
		||||
Bryant Ou
 | 
			
		||||
Carl-Daniel Hailfinger
 | 
			
		||||
Casper Chang
 | 
			
		||||
Caveh Jalali
 | 
			
		||||
Cavium Inc.
 | 
			
		||||
Chao Gui
 | 
			
		||||
Chen-Tsung Hsieh
 | 
			
		||||
Chia-Ling Hou
 | 
			
		||||
Chien-Chih Tseng
 | 
			
		||||
Chris Wang
 | 
			
		||||
Christian Gmeiner
 | 
			
		||||
Christian Walter
 | 
			
		||||
Christoph Grenz
 | 
			
		||||
Christopher Meis
 | 
			
		||||
Chuangwei Technology Co., Ltd
 | 
			
		||||
Chun-Jie Chen
 | 
			
		||||
Cirrus Logic, Inc.
 | 
			
		||||
CK HU
 | 
			
		||||
Clay Daniels
 | 
			
		||||
Cliff Huang
 | 
			
		||||
Code Aurora Forum
 | 
			
		||||
Compal Electronics, Inc.
 | 
			
		||||
Cong Yang
 | 
			
		||||
CoolStar
 | 
			
		||||
coresystems GmbH
 | 
			
		||||
Corey Osgood
 | 
			
		||||
Curt Brune
 | 
			
		||||
Curtis Chen
 | 
			
		||||
Custom Ideas
 | 
			
		||||
Cyberus Technology GmbH
 | 
			
		||||
Da Lao
 | 
			
		||||
Daisuke Nojiri
 | 
			
		||||
Damien Zammit
 | 
			
		||||
Dan Callaghan
 | 
			
		||||
Daniel Campello
 | 
			
		||||
Daniel Gröber
 | 
			
		||||
Daniel Kang
 | 
			
		||||
Daniel Maslowski
 | 
			
		||||
Daniel Peng
 | 
			
		||||
Daniel Rosa Franzini
 | 
			
		||||
Dave Airlie
 | 
			
		||||
David Brownell
 | 
			
		||||
David Greenman
 | 
			
		||||
David Hendricks
 | 
			
		||||
David Lin
 | 
			
		||||
David Milosevic
 | 
			
		||||
David Mosberger-Tang
 | 
			
		||||
David Mueller
 | 
			
		||||
David S. Peterson
 | 
			
		||||
David Wu
 | 
			
		||||
Dawei Chien
 | 
			
		||||
Deepika Punyamurtula
 | 
			
		||||
Deepti Deshatty
 | 
			
		||||
Denis 'GNUtoo' Carikli
 | 
			
		||||
Denis Dowling
 | 
			
		||||
DENX Software Engineering
 | 
			
		||||
Deomid 'rojer' Ryabkov
 | 
			
		||||
Derek Basehore
 | 
			
		||||
Derek Huang
 | 
			
		||||
Derek Waldner
 | 
			
		||||
Digital Design Corporation
 | 
			
		||||
Dinesh Gehlot
 | 
			
		||||
Divya S Sasidharan
 | 
			
		||||
Dmitry Ponamorev
 | 
			
		||||
Dmitry Torokhov
 | 
			
		||||
DMP Electronics Inc.
 | 
			
		||||
Dominik Behr
 | 
			
		||||
Donghwa Lee
 | 
			
		||||
Drew Eckhardt
 | 
			
		||||
Dtrain Hsu
 | 
			
		||||
Duan Huayang
 | 
			
		||||
Dun Tan
 | 
			
		||||
Duncan Laurie
 | 
			
		||||
Dynon Avionics
 | 
			
		||||
Ed Sharma
 | 
			
		||||
Eddy Lu
 | 
			
		||||
Edward Hill
 | 
			
		||||
Edward O'Callaghan
 | 
			
		||||
Edward-JW Yang
 | 
			
		||||
Egbert Eich
 | 
			
		||||
Elias Souza
 | 
			
		||||
Eloy Degen
 | 
			
		||||
ELSOFT AG
 | 
			
		||||
Eltan B.V
 | 
			
		||||
Eltan B.V.
 | 
			
		||||
Elyes Haouas
 | 
			
		||||
Eran Mitrani
 | 
			
		||||
Eric Biederman
 | 
			
		||||
Eric Lai
 | 
			
		||||
Eric Peers
 | 
			
		||||
EricKY Cheng
 | 
			
		||||
EricR Lai
 | 
			
		||||
Erik van den Bogaert
 | 
			
		||||
Eswar Nallusamy
 | 
			
		||||
Ethan Tsao
 | 
			
		||||
Eugene Myers
 | 
			
		||||
Evan Green
 | 
			
		||||
Evgeny Zinoviev
 | 
			
		||||
Fabian Groffen
 | 
			
		||||
Fabian Kunkel
 | 
			
		||||
Fabio Aiuto
 | 
			
		||||
Fabrice Bellard
 | 
			
		||||
Facebook, Inc.
 | 
			
		||||
Felix Friedlander
 | 
			
		||||
Felix Held
 | 
			
		||||
Felix Singer
 | 
			
		||||
Fengquan Chen
 | 
			
		||||
Flora Fu
 | 
			
		||||
Florian Laufenböck
 | 
			
		||||
Francois Toguo Fotso
 | 
			
		||||
Frank Chu
 | 
			
		||||
Frank Wu
 | 
			
		||||
Franklin Lin
 | 
			
		||||
Frans Hendriks
 | 
			
		||||
Fred Reitberger
 | 
			
		||||
Frederic Potter
 | 
			
		||||
Free Software Foundation, Inc.
 | 
			
		||||
Freescale Semiconductor, Inc.
 | 
			
		||||
Furquan Shaikh
 | 
			
		||||
Gaggery Tsai
 | 
			
		||||
Gang C Chen 
 | 
			
		||||
Garmin Chang
 | 
			
		||||
Gary Jennejohn
 | 
			
		||||
George Trudeau
 | 
			
		||||
Gerald Van Baren
 | 
			
		||||
@@ -223,563 +84,163 @@ Gerd Hoffmann
 | 
			
		||||
Gergely Kiss
 | 
			
		||||
Google LLC
 | 
			
		||||
Greg Watson
 | 
			
		||||
Grzegorz Bernacki
 | 
			
		||||
Guennadi Liakhovetski
 | 
			
		||||
Guodong Liu
 | 
			
		||||
Gwendal Grignou
 | 
			
		||||
Hal Martin
 | 
			
		||||
Hao Chou
 | 
			
		||||
Hao Wang
 | 
			
		||||
HardenedLinux
 | 
			
		||||
Harsha B R
 | 
			
		||||
Harshit Sharma
 | 
			
		||||
Henry C Chen
 | 
			
		||||
Hewlett Packard Enterprise Development LP
 | 
			
		||||
Hewlett-Packard Development Company, L.P.
 | 
			
		||||
Himanshu Sahdev
 | 
			
		||||
Housong Zhang
 | 
			
		||||
Hsiao Chien Sung
 | 
			
		||||
Hsin-hsiung wang
 | 
			
		||||
Hsin-Te Yuan
 | 
			
		||||
Hsuan Ting Chen
 | 
			
		||||
Huaqin Technology Co., Ltd
 | 
			
		||||
Hewlett Packard Enterprise Development LP
 | 
			
		||||
Huaqin Telecom Inc.
 | 
			
		||||
Hui Liu
 | 
			
		||||
Huijuan Xie
 | 
			
		||||
Hung-Te Lin
 | 
			
		||||
Ian Douglas Scott
 | 
			
		||||
Ian Feng
 | 
			
		||||
IBM Corporation
 | 
			
		||||
Idwer Vollering
 | 
			
		||||
Igor Bagnucki
 | 
			
		||||
Igor Pavlov
 | 
			
		||||
Ikjoon Jang
 | 
			
		||||
Imagination Technologies
 | 
			
		||||
Infineon Technologies
 | 
			
		||||
InKi Dae
 | 
			
		||||
INSPUR Co., Ltd
 | 
			
		||||
Intel Corporation
 | 
			
		||||
Inventec Corp
 | 
			
		||||
Iru Cai
 | 
			
		||||
Isaac Lee
 | 
			
		||||
Isaku Yamahata
 | 
			
		||||
Ivan Chen
 | 
			
		||||
Ivan Vatlin
 | 
			
		||||
Ivy Jian
 | 
			
		||||
Jack Rosenthal
 | 
			
		||||
Jacob Garber
 | 
			
		||||
Jairaj Arava
 | 
			
		||||
Jakub Czapiga
 | 
			
		||||
James Chao
 | 
			
		||||
James Lo
 | 
			
		||||
James Ye
 | 
			
		||||
Jamie Chen
 | 
			
		||||
Jamie Ryu
 | 
			
		||||
Jan Dabros
 | 
			
		||||
Jan Samek
 | 
			
		||||
Jan Tatje
 | 
			
		||||
Jason Glenesk
 | 
			
		||||
Jason Nein
 | 
			
		||||
Jason V Le
 | 
			
		||||
Jason Z Chen
 | 
			
		||||
Jason Zhao
 | 
			
		||||
jason-ch chen
 | 
			
		||||
Jason-jh Lin
 | 
			
		||||
Jay Patel
 | 
			
		||||
Jeff Chase
 | 
			
		||||
Jeff Daly
 | 
			
		||||
Jeff Li
 | 
			
		||||
Jérémy Compostella
 | 
			
		||||
Jeremy Soller
 | 
			
		||||
Jes Klinke
 | 
			
		||||
Jesper Lin
 | 
			
		||||
Jessy Jiang
 | 
			
		||||
Jett Rink
 | 
			
		||||
Jg Daolongzhu
 | 
			
		||||
Jian Tong
 | 
			
		||||
Jianeng Ceng
 | 
			
		||||
Jianjun Wang
 | 
			
		||||
Jim Lai
 | 
			
		||||
Jimmy Su
 | 
			
		||||
Jincheng Li
 | 
			
		||||
Jingle Hsu
 | 
			
		||||
Jitao Shi
 | 
			
		||||
Joe Pillow
 | 
			
		||||
Joe Tessler
 | 
			
		||||
Joel Kitching
 | 
			
		||||
Joey Peng
 | 
			
		||||
Johanna Schander
 | 
			
		||||
John Su
 | 
			
		||||
John Zhao
 | 
			
		||||
Johnny Li
 | 
			
		||||
Johnny Lin
 | 
			
		||||
johnson wang
 | 
			
		||||
Jon Murphy
 | 
			
		||||
Jonas 'Sortie' Termansen
 | 
			
		||||
Jonas Loeffelholz
 | 
			
		||||
Jonathan A. Kollasch
 | 
			
		||||
Jonathan Neuschäfer
 | 
			
		||||
Jonathan Zhang
 | 
			
		||||
Jonathon Hall
 | 
			
		||||
Jordan Crouse
 | 
			
		||||
Jörg Mische
 | 
			
		||||
Joseph Smith
 | 
			
		||||
Josie Nordrum
 | 
			
		||||
Julia Tsai
 | 
			
		||||
Julian Schroeder
 | 
			
		||||
Julian Stecklina
 | 
			
		||||
Julien Viard de Galbert
 | 
			
		||||
Julius Werner
 | 
			
		||||
Kacper Stojek
 | 
			
		||||
Kaiyen Chang
 | 
			
		||||
Kane Chen
 | 
			
		||||
Kangheui Won
 | 
			
		||||
Kapil Porwal
 | 
			
		||||
Karol Zmyslowski
 | 
			
		||||
Karthik Ramasubramanian
 | 
			
		||||
Keith Hui
 | 
			
		||||
Keith Packard
 | 
			
		||||
Kenneth Chan
 | 
			
		||||
Kevin Chang
 | 
			
		||||
Kevin Cheng
 | 
			
		||||
Kevin Chiu
 | 
			
		||||
Kevin Chowski
 | 
			
		||||
Kevin Cody-Little
 | 
			
		||||
Kevin Keijzer
 | 
			
		||||
Kevin O'Connor
 | 
			
		||||
Kevin3 Yang
 | 
			
		||||
kewei xu
 | 
			
		||||
Kilari Raasi
 | 
			
		||||
Kirk Wang
 | 
			
		||||
Konrad Adamczyk
 | 
			
		||||
Kontron Europe GmbH
 | 
			
		||||
Kornel Dulęba
 | 
			
		||||
Krishna P Bhat D
 | 
			
		||||
Krystian Hebel
 | 
			
		||||
Kshitij
 | 
			
		||||
Kshitiz Godara
 | 
			
		||||
Kulkarni. Srinivas
 | 
			
		||||
Kun Liu
 | 
			
		||||
Kyle Lin
 | 
			
		||||
Kyösti Mälkki
 | 
			
		||||
Lance Zhao
 | 
			
		||||
Lawrence Chang
 | 
			
		||||
Leah Rowe
 | 
			
		||||
Lean Sheng Tan
 | 
			
		||||
Lei Wen
 | 
			
		||||
Lenovo Group Ltd
 | 
			
		||||
Leo Chou
 | 
			
		||||
Li-Ta Lo
 | 
			
		||||
Liam Flaherty
 | 
			
		||||
Libra Li
 | 
			
		||||
Libretrend LDA
 | 
			
		||||
Lijian Zhao
 | 
			
		||||
Liju-Clr Chen
 | 
			
		||||
Linaro Limited
 | 
			
		||||
linear
 | 
			
		||||
Linus Torvalds
 | 
			
		||||
Linux Networx, Inc.
 | 
			
		||||
LiPPERT ADLINK Technology GmbH
 | 
			
		||||
Liya Li
 | 
			
		||||
Lubomir Rintel
 | 
			
		||||
Luc Verhaegen
 | 
			
		||||
Lucas Chen
 | 
			
		||||
Mac Chiang
 | 
			
		||||
Maciej Matuszczyk
 | 
			
		||||
Maciej Pijanowski
 | 
			
		||||
Macpaul Lin
 | 
			
		||||
Madhusudanarao Amara
 | 
			
		||||
Magf
 | 
			
		||||
Malik Hsu
 | 
			
		||||
Mandy Liu
 | 
			
		||||
Manoj Gupta
 | 
			
		||||
Marc Bertens
 | 
			
		||||
Marc Jones
 | 
			
		||||
Marco Chen
 | 
			
		||||
Marek Kasiewicz
 | 
			
		||||
Marek Vasut
 | 
			
		||||
Mario Scheithauer
 | 
			
		||||
Marius Gröger
 | 
			
		||||
Mariusz Szafranski
 | 
			
		||||
Mariusz Szafrański
 | 
			
		||||
Mark Hasemeyer
 | 
			
		||||
Mark Hsieh
 | 
			
		||||
Mars Chen
 | 
			
		||||
Marshall Dawson
 | 
			
		||||
Martin Mares
 | 
			
		||||
Martin Renters
 | 
			
		||||
Martin Roth
 | 
			
		||||
Marvell International Ltd.
 | 
			
		||||
Marvell Semiconductor Inc.
 | 
			
		||||
Marx Wang
 | 
			
		||||
Masanori Ogino
 | 
			
		||||
Máté Kukri
 | 
			
		||||
Matei Dibu
 | 
			
		||||
Mathew King
 | 
			
		||||
Matt Chen
 | 
			
		||||
Matt Delco
 | 
			
		||||
Matt DeVillier
 | 
			
		||||
Matt Papageorge
 | 
			
		||||
Matthew Blecker
 | 
			
		||||
Matthew Ziegelbaum
 | 
			
		||||
Mattias Nissler
 | 
			
		||||
Maulik V Vaghela
 | 
			
		||||
MAULIK V VAGHELA
 | 
			
		||||
Maulik Vaghela
 | 
			
		||||
Max Fritz
 | 
			
		||||
Maxim Polyakov
 | 
			
		||||
Maximilian Brune
 | 
			
		||||
Mediatek Inc.
 | 
			
		||||
MediaTek Inc.
 | 
			
		||||
Meera Ravindranath
 | 
			
		||||
Meng-Huan Yu
 | 
			
		||||
Meta Platforms, Inc
 | 
			
		||||
mgabryelski1
 | 
			
		||||
Mice Lin
 | 
			
		||||
Michael Brunner
 | 
			
		||||
Michael Büchler
 | 
			
		||||
Michael Niewöhner
 | 
			
		||||
Michael Schroeder
 | 
			
		||||
Michael Strosche
 | 
			
		||||
Michael Walle
 | 
			
		||||
Michał Kopeć
 | 
			
		||||
Michal Suchanek
 | 
			
		||||
Michał Żygowski
 | 
			
		||||
Micro-Star INT'L CO., LTD.
 | 
			
		||||
Michael Niewöhner
 | 
			
		||||
Mika Westerberg
 | 
			
		||||
Mike Banon
 | 
			
		||||
Mike Shih
 | 
			
		||||
Miriam Polzer
 | 
			
		||||
mkurumel
 | 
			
		||||
Moises Garcia
 | 
			
		||||
Mondrian Nuessle
 | 
			
		||||
Monikaanan
 | 
			
		||||
MontaVista Software, Inc.
 | 
			
		||||
Morgan Jang
 | 
			
		||||
Moritz Fischer
 | 
			
		||||
Morris Hsu
 | 
			
		||||
mtk15698
 | 
			
		||||
mturney mturney
 | 
			
		||||
Musse Abdullahi
 | 
			
		||||
Myles Watson
 | 
			
		||||
Nancy.Lin
 | 
			
		||||
Naresh Solanki
 | 
			
		||||
Nathan Lu
 | 
			
		||||
Neill Corlett
 | 
			
		||||
Network Appliance Inc.
 | 
			
		||||
Nicholas Chin
 | 
			
		||||
Nicholas Sielicki
 | 
			
		||||
Nick Barker
 | 
			
		||||
Nick Chen
 | 
			
		||||
Nick Vaccaro
 | 
			
		||||
Nico Huber
 | 
			
		||||
Nico Rikken
 | 
			
		||||
Nicola Corna
 | 
			
		||||
Nicolas Boichat
 | 
			
		||||
Nicole Faerber
 | 
			
		||||
Nikolai Vyssotski
 | 
			
		||||
Nils Jacobs
 | 
			
		||||
Nina Wu
 | 
			
		||||
Nir Tzachar
 | 
			
		||||
Nokia Corporation
 | 
			
		||||
Nuvoton Technology Corporation
 | 
			
		||||
NVIDIA Corporation
 | 
			
		||||
Olivier Langlois
 | 
			
		||||
Ollie Lo
 | 
			
		||||
Omar Pakker
 | 
			
		||||
Online SAS
 | 
			
		||||
Opal Voravootivat
 | 
			
		||||
Orion Technologies, LLC
 | 
			
		||||
Pablo Ceballos
 | 
			
		||||
Pablo Stebler
 | 
			
		||||
Pan Gao
 | 
			
		||||
Patrick Georgi
 | 
			
		||||
Patrick Huang
 | 
			
		||||
Patrick Rudolph
 | 
			
		||||
Patrik Tesarik
 | 
			
		||||
Pattrick Hueper
 | 
			
		||||
Paul Fagerburg
 | 
			
		||||
Paul Menzel
 | 
			
		||||
Paul2 Huang
 | 
			
		||||
Paulo Alcantara
 | 
			
		||||
Pavel Sayekat
 | 
			
		||||
Paz Zcharya
 | 
			
		||||
PC Engines GmbH
 | 
			
		||||
Pegatron Corp
 | 
			
		||||
Peichao Li
 | 
			
		||||
Per Odlund
 | 
			
		||||
Peter Korsgaard
 | 
			
		||||
Peter Lemenkov
 | 
			
		||||
Peter Marheine
 | 
			
		||||
Peter Stuge
 | 
			
		||||
Petr Cvek
 | 
			
		||||
Philip Chen
 | 
			
		||||
Philipp Bartsch
 | 
			
		||||
Philipp Degler
 | 
			
		||||
Philipp Deppenwiese
 | 
			
		||||
Philipp Hug
 | 
			
		||||
Piotr Kleinschmidt
 | 
			
		||||
Po Xu
 | 
			
		||||
Prasad Malisetty
 | 
			
		||||
Prashant Malani
 | 
			
		||||
Pratik Vishwakarma
 | 
			
		||||
Pratikkumar Prajapati
 | 
			
		||||
Pratikkumar V Prajapati
 | 
			
		||||
Protectli
 | 
			
		||||
Purism SPC
 | 
			
		||||
Purism, SPC
 | 
			
		||||
Qii Wang
 | 
			
		||||
Qualcomm Technologies, Inc.
 | 
			
		||||
Quanta Computer INC
 | 
			
		||||
Raihow Shi
 | 
			
		||||
Rajat Jain
 | 
			
		||||
Rajesh Patil
 | 
			
		||||
Qualcomm Technologies
 | 
			
		||||
Raptor Engineering, LLC
 | 
			
		||||
Rasheed Hsueh
 | 
			
		||||
Raul Rangel
 | 
			
		||||
Ravi Kumar
 | 
			
		||||
Ravi Mistry
 | 
			
		||||
Ravindra
 | 
			
		||||
Ravishankar Sarawadi
 | 
			
		||||
Ray Han Lim Ng
 | 
			
		||||
Raymond Chung
 | 
			
		||||
Red Hat, Inc
 | 
			
		||||
ReddestDream
 | 
			
		||||
Rehan Ghori
 | 
			
		||||
Reinhard Meyer
 | 
			
		||||
Reka Norman
 | 
			
		||||
Ren Kuo
 | 
			
		||||
Renze Nicolai
 | 
			
		||||
Reto Buerki
 | 
			
		||||
Rex Chou
 | 
			
		||||
Rex-BC Chen
 | 
			
		||||
Ricardo Quesada
 | 
			
		||||
Ricardo Ribalda
 | 
			
		||||
Richard Spiegel
 | 
			
		||||
Richard Woodruff
 | 
			
		||||
Rick Lee
 | 
			
		||||
Ricky Chang
 | 
			
		||||
Riku Viitanen
 | 
			
		||||
Ritul Guru
 | 
			
		||||
Rizwan Qureshi
 | 
			
		||||
Rnhmjoj
 | 
			
		||||
Rob Barnes
 | 
			
		||||
Rob Landley
 | 
			
		||||
Robert Chen
 | 
			
		||||
Robert Reeves
 | 
			
		||||
Robert Zieba
 | 
			
		||||
Robinson P. Tryon
 | 
			
		||||
Rockchip, Inc.
 | 
			
		||||
Rocky Phagura
 | 
			
		||||
Roger Lu
 | 
			
		||||
Roja Rani Yarubandi
 | 
			
		||||
Romain Lievin
 | 
			
		||||
Roman Zippel
 | 
			
		||||
Ron Lee
 | 
			
		||||
Ron Minnich
 | 
			
		||||
Ronak Kanabar
 | 
			
		||||
Ronald G. Minnich
 | 
			
		||||
Rory Liu
 | 
			
		||||
Rudolf Marek
 | 
			
		||||
Rui Zhou
 | 
			
		||||
Ruihai Zhou
 | 
			
		||||
Runyang Chen
 | 
			
		||||
Russell King
 | 
			
		||||
Ruud Schramp
 | 
			
		||||
Ruwen Liu
 | 
			
		||||
Ryan Chuang
 | 
			
		||||
Ryan Lin
 | 
			
		||||
Sage Electronic Engineering, LLC
 | 
			
		||||
Sajida Bhanu
 | 
			
		||||
Sam Lewis
 | 
			
		||||
Sam McNally
 | 
			
		||||
Sam Ravnborg
 | 
			
		||||
Samsung Electronics
 | 
			
		||||
Samuel Holland
 | 
			
		||||
Sandeep Maheswaram
 | 
			
		||||
Sathya Prakash M R
 | 
			
		||||
Satya Priya Kakitapalli
 | 
			
		||||
Saurabh Mishra
 | 
			
		||||
SciTech Software, Inc.
 | 
			
		||||
Scott Chao
 | 
			
		||||
SDC Systems Ltd
 | 
			
		||||
Sean Rhodes
 | 
			
		||||
Sebastian 'Swift Geek' Grzywna
 | 
			
		||||
Sebastian Grzywna
 | 
			
		||||
secunet Security Networks AG
 | 
			
		||||
Selma Bensaid
 | 
			
		||||
Semihalf
 | 
			
		||||
Sen Chu
 | 
			
		||||
Sencore Inc
 | 
			
		||||
Sergej Ivanov
 | 
			
		||||
Sergii Dmytruk
 | 
			
		||||
Serin Yeh
 | 
			
		||||
Seven Lee
 | 
			
		||||
SH Kim
 | 
			
		||||
Shahina Shaik
 | 
			
		||||
Shaocheng Wang
 | 
			
		||||
Shaoming Chen
 | 
			
		||||
Shaunak Saha
 | 
			
		||||
Shelley Chen
 | 
			
		||||
Shelly Chang
 | 
			
		||||
Sheng-Liang Pan
 | 
			
		||||
Shiyu Sun
 | 
			
		||||
Shon Wang
 | 
			
		||||
Shou-Chieh Hsu
 | 
			
		||||
Shreesh Chhabbi
 | 
			
		||||
Shuo Liu
 | 
			
		||||
Siemens AG
 | 
			
		||||
SiFive, Inc
 | 
			
		||||
Silicom Ltd.
 | 
			
		||||
Silicon Integrated System Corporation
 | 
			
		||||
Silverback Ltd.
 | 
			
		||||
Simon Glass
 | 
			
		||||
Simon Yang
 | 
			
		||||
Simon Zhou
 | 
			
		||||
Sindhoor Tilak
 | 
			
		||||
Solomon Alan-Dei
 | 
			
		||||
Song Fan
 | 
			
		||||
Sridhar Siricilla
 | 
			
		||||
Srinidhi N Kaushik
 | 
			
		||||
Srinivasa Rao Mandadapu
 | 
			
		||||
ST Microelectronics
 | 
			
		||||
Stanley Wu
 | 
			
		||||
Star Labs Online Ltd
 | 
			
		||||
Stefan Binding
 | 
			
		||||
Stefan Ott
 | 
			
		||||
Stefan Reinauer
 | 
			
		||||
Stefan Tauner
 | 
			
		||||
Stephen Edworthy
 | 
			
		||||
Steve Magnani
 | 
			
		||||
Steve Shenton
 | 
			
		||||
Subrata Banik
 | 
			
		||||
Sudheer Amrabadi
 | 
			
		||||
Sugnan Prabhu S
 | 
			
		||||
Sukumar Ghorai
 | 
			
		||||
Sumeet R Pawnikar
 | 
			
		||||
Sunwei Li
 | 
			
		||||
ST Microelectronics
 | 
			
		||||
SUSE LINUX AG
 | 
			
		||||
Sven Schnelle
 | 
			
		||||
Syed Mohammed Khasim
 | 
			
		||||
System76, Inc.
 | 
			
		||||
szarpaj
 | 
			
		||||
T Michael Turney
 | 
			
		||||
TangYiwei
 | 
			
		||||
Taniya Das
 | 
			
		||||
Tao Xia
 | 
			
		||||
Tarun Tuli
 | 
			
		||||
Teddy Shih
 | 
			
		||||
Terry Chen
 | 
			
		||||
System76
 | 
			
		||||
Texas Instruments
 | 
			
		||||
The Android Open Source Project
 | 
			
		||||
The ChromiumOS Authors
 | 
			
		||||
The Linux Foundation
 | 
			
		||||
The Regents of the University of California
 | 
			
		||||
Thejaswani Putta
 | 
			
		||||
Thomas Heijligen
 | 
			
		||||
Thomas Winischhofer
 | 
			
		||||
Tim Chen
 | 
			
		||||
Tim Chu
 | 
			
		||||
Tim Crawford
 | 
			
		||||
Tim Van Patten
 | 
			
		||||
Tim Wawrzynczak
 | 
			
		||||
Timofey Komarov
 | 
			
		||||
Timothy Pearson
 | 
			
		||||
tinghan shen
 | 
			
		||||
Tobias Diedrich
 | 
			
		||||
Tom Hiller
 | 
			
		||||
Tommie Lin
 | 
			
		||||
Tony Huang
 | 
			
		||||
Tracy Wu
 | 
			
		||||
Trevor Wu
 | 
			
		||||
Tristan Corrick
 | 
			
		||||
Tungsten Graphics, Inc.
 | 
			
		||||
Tyan Computer Corp.
 | 
			
		||||
Tyler Wang
 | 
			
		||||
Tzung-Bi Shih
 | 
			
		||||
U.S. National Security Agency
 | 
			
		||||
ucRobotics Inc.
 | 
			
		||||
Uday Bhat
 | 
			
		||||
University of Heidelberg
 | 
			
		||||
Usha P
 | 
			
		||||
Uwe Hermann
 | 
			
		||||
Uwe Poeche
 | 
			
		||||
V Sowmya
 | 
			
		||||
Václav Straka
 | 
			
		||||
Vadim Bendebury
 | 
			
		||||
Van Chen
 | 
			
		||||
Varshit B Pandya
 | 
			
		||||
Veerabhadrarao Badiganti
 | 
			
		||||
Venkat Thogaru
 | 
			
		||||
Venkata Krishna Nimmagadda
 | 
			
		||||
VIA Technologies, Inc
 | 
			
		||||
Victor Ding
 | 
			
		||||
Vidya Gopalakrishnan
 | 
			
		||||
Vikram Narayanan
 | 
			
		||||
Vikrant L Jadeja
 | 
			
		||||
Vinod Polimera
 | 
			
		||||
Vipin Kumar
 | 
			
		||||
Vitaly Rodionov
 | 
			
		||||
Vladimir Serbinenko
 | 
			
		||||
Vlado Cibic
 | 
			
		||||
Vsujithk
 | 
			
		||||
Wang Qing Pei
 | 
			
		||||
Wanghao11
 | 
			
		||||
Ward Vandewege
 | 
			
		||||
Wayne Wang
 | 
			
		||||
Weimin Wu
 | 
			
		||||
Weiyi Lu
 | 
			
		||||
Wenbin Mei
 | 
			
		||||
Wentao Qin
 | 
			
		||||
Werner Zeh
 | 
			
		||||
Wilbert Duijvenvoorde
 | 
			
		||||
William Wei
 | 
			
		||||
Wilson Chou
 | 
			
		||||
Wim Vervoorn
 | 
			
		||||
Win Enterprises
 | 
			
		||||
Wisley Chen
 | 
			
		||||
Wistron Corp
 | 
			
		||||
Wiwynn Corp.
 | 
			
		||||
Wiwynn Corporation
 | 
			
		||||
Wizard Shen
 | 
			
		||||
Wojciech Macek
 | 
			
		||||
Wolfgang Denk
 | 
			
		||||
Won Chung
 | 
			
		||||
Wonkyu Kim
 | 
			
		||||
Wuxy 
 | 
			
		||||
Xin Ji
 | 
			
		||||
Xixi Chen
 | 
			
		||||
Xuxin Xiong
 | 
			
		||||
YADRO
 | 
			
		||||
Yan Liu
 | 
			
		||||
Yann Collet
 | 
			
		||||
Yaroslav Kurlaev
 | 
			
		||||
YH Lin
 | 
			
		||||
Yidi Lin
 | 
			
		||||
Yilin Yang
 | 
			
		||||
Yinghai Lu
 | 
			
		||||
Yolk Shih
 | 
			
		||||
Yong Zhi
 | 
			
		||||
Yongkun Yu
 | 
			
		||||
Yongqiang Niu
 | 
			
		||||
Yu-hsuan Hsu
 | 
			
		||||
Yu-Ping Wu
 | 
			
		||||
Yuanliding
 | 
			
		||||
Yuchen He
 | 
			
		||||
Yuchen Huang
 | 
			
		||||
Yunlong Jia
 | 
			
		||||
Zachary Yedidia
 | 
			
		||||
Zanxi Chen
 | 
			
		||||
Zhanyong Wang
 | 
			
		||||
Zheng Bao
 | 
			
		||||
Zhenguo Li
 | 
			
		||||
Zhi7 Li
 | 
			
		||||
Zhiqiang Ma
 | 
			
		||||
Zhixing Ma
 | 
			
		||||
Zhiyong Tao
 | 
			
		||||
zhongtian wu
 | 
			
		||||
Zhuohao Lee
 | 
			
		||||
Ziang Wang
 | 
			
		||||
Zoey Wu
 | 
			
		||||
Zoltan Baldaszti
 | 
			
		||||
小田喜陽彦
 | 
			
		||||
陳建宏
 | 
			
		||||
@@ -1,9 +0,0 @@
 | 
			
		||||
# See one of the following URLs for explanations of all the rules
 | 
			
		||||
# https://github.com/markdownlint/markdownlint/blob/master/docs/RULES.md
 | 
			
		||||
# https://web.archive.org/web/20220424164542/https://github.com/markdownlint/markdownlint/blob/master/docs/RULES.md
 | 
			
		||||
 | 
			
		||||
all
 | 
			
		||||
exclude_rule 'no-multiple-blanks'
 | 
			
		||||
exclude_rule 'blanks-around-headers'
 | 
			
		||||
exclude_rule 'blanks-around-lists'
 | 
			
		||||
rule 'line-length', :line_length => 72
 | 
			
		||||
							
								
								
									
										2441
									
								
								Documentation/Doxyfile.coreboot
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										2441
									
								
								Documentation/Doxyfile.coreboot_simple
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -1,24 +1,49 @@
 | 
			
		||||
## SPDX-License-Identifier: GPL-2.0-only
 | 
			
		||||
#
 | 
			
		||||
# Makefile for coreboot paper.
 | 
			
		||||
# hacked together by Stefan Reinauer <stepan@openbios.org>
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
BUILDDIR ?= _build
 | 
			
		||||
SPHINXOPTS ?= -j auto
 | 
			
		||||
PDFLATEX=pdflatex -t a4
 | 
			
		||||
 | 
			
		||||
export SPHINXOPTS
 | 
			
		||||
FIGS=codeflow.pdf hypertransport.pdf
 | 
			
		||||
 | 
			
		||||
all: sphinx
 | 
			
		||||
all: corebootPortingGuide.pdf
 | 
			
		||||
 | 
			
		||||
$(BUILDDIR):
 | 
			
		||||
	mkdir -p $(BUILDDIR)
 | 
			
		||||
SVG2PDF=$(shell which svg2pdf)
 | 
			
		||||
INKSCAPE=$(shell which inkscape)
 | 
			
		||||
CONVERT=$(shell which convert)
 | 
			
		||||
 | 
			
		||||
sphinx: $(BUILDDIR)
 | 
			
		||||
	$(MAKE) -f Makefile.sphinx html BUILDDIR="$(BUILDDIR)"
 | 
			
		||||
codeflow.pdf: codeflow.svg
 | 
			
		||||
ifneq ($(strip $(SVG2PDF)),)
 | 
			
		||||
	svg2pdf $< $@
 | 
			
		||||
else ifneq ($(strip $(INKSCAPE)),)
 | 
			
		||||
	inkscape $< --export-pdf=$@
 | 
			
		||||
else ifneq ($(strip $(CONVERT)),)
 | 
			
		||||
	convert $< $@
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
hypertransport.pdf: hypertransport.svg
 | 
			
		||||
ifneq ($(strip $(SVG2PDF)),)
 | 
			
		||||
	svg2pdf $< $@
 | 
			
		||||
else ifneq ($(strip $(INKSCAPE)),)
 | 
			
		||||
	inkscape $< --export-pdf=$@
 | 
			
		||||
else ifneq ($(strip $(CONVERT)),)
 | 
			
		||||
	convert $< $@
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
corebootPortingGuide.toc: $(FIGS) corebootBuildingGuide.tex
 | 
			
		||||
	# 2 times to make sure we have a current toc.
 | 
			
		||||
	$(PDFLATEX) corebootBuildingGuide.tex
 | 
			
		||||
	$(PDFLATEX) corebootBuildingGuide.tex
 | 
			
		||||
 | 
			
		||||
corebootPortingGuide.pdf: $(FIGS) corebootBuildingGuide.tex corebootPortingGuide.toc
 | 
			
		||||
	$(PDFLATEX) corebootBuildingGuide.tex
 | 
			
		||||
 | 
			
		||||
sphinx:
 | 
			
		||||
	$(MAKE) -f Makefile.sphinx html
 | 
			
		||||
 | 
			
		||||
clean-sphinx:
 | 
			
		||||
	$(MAKE) -f Makefile.sphinx clean BUILDDIR="$(BUILDDIR)"
 | 
			
		||||
	$(MAKE) -f Makefile.sphinx clean
 | 
			
		||||
 | 
			
		||||
clean: clean-sphinx
 | 
			
		||||
	rm -f *.aux *.idx *.log *.toc *.out $(FIGS)
 | 
			
		||||
@@ -26,25 +51,5 @@ clean: clean-sphinx
 | 
			
		||||
distclean: clean
 | 
			
		||||
	rm -f corebootPortingGuide.pdf
 | 
			
		||||
 | 
			
		||||
livesphinx: $(BUILDDIR)
 | 
			
		||||
	$(MAKE) -f Makefile.sphinx livehtml BUILDDIR="$(BUILDDIR)"
 | 
			
		||||
 | 
			
		||||
test:
 | 
			
		||||
	@echo "Test for logging purposes - Failing tests will not fail the build"
 | 
			
		||||
	-$(MAKE) -f Makefile.sphinx clean && $(MAKE) -K -f Makefile.sphinx html
 | 
			
		||||
	-$(MAKE) -f Makefile.sphinx clean && $(MAKE) -K -f Makefile.sphinx doctest
 | 
			
		||||
 | 
			
		||||
help:
 | 
			
		||||
	@echo "all            - Builds all documentation targets"
 | 
			
		||||
	@echo "sphinx         - Builds html documentation in _build directory"
 | 
			
		||||
	@echo "clean          - Cleans intermediate files"
 | 
			
		||||
	@echo "clean-sphinx   - Removes sphinx output files"
 | 
			
		||||
	@echo "distclean      - Removes PDF files as well"
 | 
			
		||||
	@echo "test           - Runs documentation tests"
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo "  Makefile.sphinx builds - run with $(MAKE) -f Makefile-sphinx [target]"
 | 
			
		||||
	@echo
 | 
			
		||||
	@$(MAKE) -s -f Makefile.sphinx help 2>/dev/null
 | 
			
		||||
 | 
			
		||||
.phony: help livesphinx sphinx test
 | 
			
		||||
.phony: distclean clean clean-sphinx
 | 
			
		||||
livesphinx:
 | 
			
		||||
	$(MAKE) -f Makefile.sphinx livehtml SPHINXOPTS="$(SPHINXOPTS)"
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,3 @@
 | 
			
		||||
## SPDX-License-Identifier: GPL-2.0-only
 | 
			
		||||
# Makefile for Sphinx documentation
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -51,7 +51,7 @@ index 28e78fb366..0cce41b316 100644
 | 
			
		||||
@@ -303,10 +303,10 @@ static void gpio_configure_pad(const struct pad_config *cfg)
 | 
			
		||||
                /* Patch GPIO settings for SoC specifically */
 | 
			
		||||
                soc_pad_conf = soc_gpio_pad_config_fixup(cfg, i, soc_pad_conf);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
-               if (CONFIG(DEBUG_GPIO))
 | 
			
		||||
+               if (soc_pad_conf != pad_conf)
 | 
			
		||||
                        printk(BIOS_DEBUG,
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										290
									
								
								Documentation/acpi/devicetree.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,290 @@
 | 
			
		||||
# Adding new devices to a device tree
 | 
			
		||||
 | 
			
		||||
## Introduction
 | 
			
		||||
 | 
			
		||||
ACPI exposes a platform-independent interface for operating systems to perform
 | 
			
		||||
power management and other platform-level functions.  Some operating systems
 | 
			
		||||
also use ACPI to enumerate devices that are not immediately discoverable, such
 | 
			
		||||
as those behind I2C or SPI buses (in contrast to PCI).  This document discusses
 | 
			
		||||
the way that coreboot uses the concept of a "device tree" to generate ACPI
 | 
			
		||||
tables for usage by the operating system.
 | 
			
		||||
 | 
			
		||||
## Devicetree and overridetree (if applicable)
 | 
			
		||||
 | 
			
		||||
For mainboards that are organized around a "reference board" or "baseboard"
 | 
			
		||||
model (see ``src/mainboard/google/octopus`` or ``hatch`` for examples), there is
 | 
			
		||||
typically a devicetree.cb file that all boards share, and any differences for a
 | 
			
		||||
specific board ("variant") are captured in the overridetree.cb file.  Any
 | 
			
		||||
settings changed in the overridetree take precedence over those in the main
 | 
			
		||||
devicetree.  Note, not all mainboards will have the devicetree/overridetree
 | 
			
		||||
distinction, and may only have a devicetree.cb file.  Or you can always just
 | 
			
		||||
write the ASL (ACPI Source Language) code yourself.
 | 
			
		||||
 | 
			
		||||
### Naming and referencing devices
 | 
			
		||||
 | 
			
		||||
When declaring a device, it can optionally be given an alias that can be
 | 
			
		||||
referred to elsewhere. This is particularly useful to declare a device in one
 | 
			
		||||
device tree while allowing its configuration to be more easily changed in an
 | 
			
		||||
overlay. For instance, the AMD Picasso SoC definition
 | 
			
		||||
(`soc/amd/picasso/chipset.cb`) declares an IOMMU on a PCI bus that is disabled
 | 
			
		||||
by default:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
chip soc/amd/picasso
 | 
			
		||||
	device domain 0 on
 | 
			
		||||
		...
 | 
			
		||||
		device pci 00.2 alias iommu off end
 | 
			
		||||
		...
 | 
			
		||||
	end
 | 
			
		||||
end
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
A device based on this SoC can override the configuration for the IOMMU without
 | 
			
		||||
duplicating addresses, as in
 | 
			
		||||
`mainboard/google/zork/variants/baseboard/devicetree_trembyle.cb`:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
chip soc/amd/picasso
 | 
			
		||||
	device domain 0
 | 
			
		||||
		...
 | 
			
		||||
		device ref iommu on end
 | 
			
		||||
		...
 | 
			
		||||
	end
 | 
			
		||||
end
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
In this example the override simply enables the IOMMU, but it could also
 | 
			
		||||
set additional properties (or even add child devices) inside the IOMMU `device`
 | 
			
		||||
block.
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
It is important to note that devices that use `device ref` syntax to override
 | 
			
		||||
previous definitions of a device by alias must be placed at **exactly the same
 | 
			
		||||
location in the device tree** as the original declaration. If not, this will
 | 
			
		||||
actually create another device rather than overriding the properties of the
 | 
			
		||||
existing one. For instance, if the above snippet from `devicetree_trembyle.cb`
 | 
			
		||||
were written as follows:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
chip soc/amd/picasso
 | 
			
		||||
	# NOTE: not inside domain 0!
 | 
			
		||||
	device ref iommu on end
 | 
			
		||||
end
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Then this would leave the SoC's IOMMU disabled, and instead create a new device
 | 
			
		||||
with no properties as a direct child of the SoC.
 | 
			
		||||
 | 
			
		||||
## Device drivers
 | 
			
		||||
 | 
			
		||||
Let's take a look at an example entry from
 | 
			
		||||
``src/mainboard/google/hatch/variants/hatch/overridetree.cb``:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
device pci 15.0 on
 | 
			
		||||
	chip drivers/i2c/generic
 | 
			
		||||
		register "hid" = ""ELAN0000""
 | 
			
		||||
		register "desc" = ""ELAN Touchpad""
 | 
			
		||||
		register "irq" = "ACPI_IRQ_WAKE_LEVEL_LOW(GPP_A21_IRQ)"
 | 
			
		||||
		register "wake" = "GPE0_DW0_21"
 | 
			
		||||
		device i2c 15 on end
 | 
			
		||||
	end
 | 
			
		||||
end # I2C #0
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
When this entry is processed during ramstage, it will create a device in the
 | 
			
		||||
ACPI SSDT table (all devices in devicetrees end up in the SSDT table).  The ACPI
 | 
			
		||||
generation routines in coreboot actually generate the raw bytecode that
 | 
			
		||||
represents the device's structure, but looking at ASL code is easier to
 | 
			
		||||
understand; see below for what the disassembled bytecode looks like:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
Scope (\_SB.PCI0.I2C0)
 | 
			
		||||
{
 | 
			
		||||
    Device (D015)
 | 
			
		||||
    {
 | 
			
		||||
        Name (_HID, "ELAN0000")  // _HID: Hardware ID
 | 
			
		||||
        Name (_UID, Zero)  // _UID: Unique ID
 | 
			
		||||
        Name (_DDN, "ELAN Touchpad")  // _DDN: DOS Device Name
 | 
			
		||||
        Method (_STA, 0, NotSerialized)  // _STA: Status
 | 
			
		||||
        {
 | 
			
		||||
            Return (0x0F)
 | 
			
		||||
        }
 | 
			
		||||
        Name (_CRS, ResourceTemplate ()  // _CRS: Current Resource Settings
 | 
			
		||||
        {
 | 
			
		||||
            I2cSerialBusV2 (0x0015, ControllerInitiated, 400000,
 | 
			
		||||
                AddressingMode7Bit, "\\_SB.PCI0.I2C0",
 | 
			
		||||
                0x00, ResourceConsumer, , Exclusive, )
 | 
			
		||||
            Interrupt (ResourceConsumer, Level, ActiveLow, ExclusiveAndWake, ,, )
 | 
			
		||||
            {
 | 
			
		||||
                0x0000002D,
 | 
			
		||||
            }
 | 
			
		||||
        })
 | 
			
		||||
        Name (_S0W, ACPI_DEVICE_SLEEP_D3_HOT)  // _S0W: S0 Device Wake State
 | 
			
		||||
        Name (_PRW, Package (0x02)  // _PRW: Power Resources for Wake
 | 
			
		||||
        {
 | 
			
		||||
            0x15, // GPE #21
 | 
			
		||||
            0x03  // Sleep state S3
 | 
			
		||||
        })
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
You can see it generates _HID, _UID, _DDN, _STA, _CRS, _S0W, and _PRW
 | 
			
		||||
names/methods in the Device's scope.
 | 
			
		||||
 | 
			
		||||
## Utilizing a device driver
 | 
			
		||||
 | 
			
		||||
The device driver must be enabled for your build.  There will be a CONFIG option
 | 
			
		||||
in the Kconfig file in the directory that the driver is in (e.g.,
 | 
			
		||||
``src/drivers/i2c/generic`` contains a Kconfig file; the option here is named
 | 
			
		||||
CONFIG_DRIVERS_I2C_GENERIC).  The config option will need to be added to your
 | 
			
		||||
mainboard's Kconfig file (e.g., ``src/mainboard/google/hatch/Kconfig``) in order
 | 
			
		||||
to be compiled into your build.
 | 
			
		||||
 | 
			
		||||
## Diving into the above example:
 | 
			
		||||
 | 
			
		||||
Let's take a look at how the devicetree language corresponds to the generated
 | 
			
		||||
ASL.
 | 
			
		||||
 | 
			
		||||
First, note this:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
    chip drivers/i2c/generic
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
This means that the device driver we're using has a corresponding structure,
 | 
			
		||||
located at ``src/drivers/i2c/generic/chip.h``, named **struct
 | 
			
		||||
drivers_i2c_generic_config** and it contains many properties you can specify to
 | 
			
		||||
be included in the ACPI table.
 | 
			
		||||
 | 
			
		||||
### hid
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
    register "hid" = ""ELAN0000""
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
This corresponds to **const char *hid** in the struct.  In the ACPI ASL, it
 | 
			
		||||
translates to:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
    Name (_HID, "ELAN0000") // _HID: Hardware ID
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
under the device.  **This property is used to match the device to its driver
 | 
			
		||||
during enumeration in the OS.**
 | 
			
		||||
 | 
			
		||||
### desc
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
    register "desc" = ""ELAN Touchpad""
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
corresponds to **const char *desc** and in ASL:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
    Name (_DDN, "ELAN Touchpad") // _DDN: DOS Device Name
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### irq
 | 
			
		||||
 | 
			
		||||
It also adds the interrupt,
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
    Interrupt (ResourceConsumer, Level, ActiveLow, ExclusiveAndWake, ,, )
 | 
			
		||||
    {
 | 
			
		||||
        0x0000002D,
 | 
			
		||||
    }
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
which comes from:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
    register "irq" = "ACPI_IRQ_WAKE_LEVEL_LOW(GPP_A21_IRQ)"
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
The GPIO pin IRQ settings control the "Level", "ActiveLow", and
 | 
			
		||||
"ExclusiveAndWake" settings seen above (level means it is a level-triggered
 | 
			
		||||
interrupt as opposed to edge-triggered; active low means the interrupt is
 | 
			
		||||
triggered when the signal is low).
 | 
			
		||||
 | 
			
		||||
Note that the ACPI_IRQ_WAKE_LEVEL_LOW macro informs the platform that the GPIO
 | 
			
		||||
will be routed through SCI (ACPI's System Control Interrupt) for use as a wake
 | 
			
		||||
source.  Also note that the IRQ names are SoC-specific, and you will need to
 | 
			
		||||
find the names in your SoC's header file.  The ACPI_* macros are defined in
 | 
			
		||||
``src/arch/x86/include/acpi/acpi_device.h``.
 | 
			
		||||
 | 
			
		||||
Using a GPIO as an IRQ requires that it is configured in coreboot correctly.
 | 
			
		||||
This is often done in a mainboard-specific file named ``gpio.c``.
 | 
			
		||||
 | 
			
		||||
### wake
 | 
			
		||||
 | 
			
		||||
The last register is:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
    register "wake" = "GPE0_DW0_21"
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
which indicates that the method of waking the system using the touchpad will be
 | 
			
		||||
through a GPE, #21 associated with DW0, which is set up in devicetree.cb from
 | 
			
		||||
this example.  The "21" indicates GPP_X21, where GPP_X is mapped onto DW0
 | 
			
		||||
elsewhere in the devicetree.
 | 
			
		||||
 | 
			
		||||
The last bit of the definition of that device includes:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
    device i2c 15 on end
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
which means it's an I2C device, with 7-bit address 0x15, and the device is "on",
 | 
			
		||||
meaning it will be exposed in the ACPI table.  The PCI device that the
 | 
			
		||||
controller is located in determines which I2C bus the device is expected to be
 | 
			
		||||
found on.  In this example, this is I2C bus 0.  This also determines the ACPI
 | 
			
		||||
"Scope" that the device names and methods will live under, in this case
 | 
			
		||||
"\_SB.PCI0.I2C0".
 | 
			
		||||
 | 
			
		||||
## Other auto-generated names
 | 
			
		||||
 | 
			
		||||
(see [ACPI specification
 | 
			
		||||
6.3](https://uefi.org/sites/default/files/resources/ACPI_6_3_final_Jan30.pdf)
 | 
			
		||||
for more details on ACPI methods)
 | 
			
		||||
 | 
			
		||||
### _S0W (S0 Device Wake State)
 | 
			
		||||
_S0W indicates the deepest S0 sleep state this device can wake itself from,
 | 
			
		||||
which in this case is ACPI_DEVICE_SLEEP_D3_HOT, representing _D3hot_.
 | 
			
		||||
 | 
			
		||||
### _PRW (Power Resources for Wake)
 | 
			
		||||
_PRW indicates the power resources and events required for wake.  There are no
 | 
			
		||||
dependent power resources, but the GPE (GPE0_DW0_21) is mentioned here (0x15),
 | 
			
		||||
as well as the deepest sleep state supporting waking the system (3), which is
 | 
			
		||||
S3.
 | 
			
		||||
 | 
			
		||||
### _STA (Status)
 | 
			
		||||
The _STA method is generated automatically, and its values, 0xF, indicates the
 | 
			
		||||
following:
 | 
			
		||||
 | 
			
		||||
    Bit [0] – Set if the device is present.
 | 
			
		||||
    Bit [1] – Set if the device is enabled and decoding its resources.
 | 
			
		||||
    Bit [2] – Set if the device should be shown in the UI.
 | 
			
		||||
    Bit [3] – Set if the device is functioning properly (cleared if device failed its diagnostics).
 | 
			
		||||
 | 
			
		||||
### _CRS (Current resource settings)
 | 
			
		||||
The _CRS method is generated automatically, as the driver knows it is an I2C
 | 
			
		||||
controller, and so specifies how to configure the controller for proper
 | 
			
		||||
operation with the touchpad.
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
Name (_CRS, ResourceTemplate ()  // _CRS: Current Resource Settings
 | 
			
		||||
{
 | 
			
		||||
    I2cSerialBusV2 (0x0015, ControllerInitiated, 400000,
 | 
			
		||||
                    AddressingMode7Bit, "\\_SB.PCI0.I2C0",
 | 
			
		||||
                    0x00, ResourceConsumer, , Exclusive, )
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Notes
 | 
			
		||||
 | 
			
		||||
 - **All fields that are left unspecified in the devicetree are initialized to
 | 
			
		||||
   zero.**
 | 
			
		||||
 - **All devices in devicetrees end up in the SSDT table, and are generated in
 | 
			
		||||
   coreboot's ramstage**
 | 
			
		||||
@@ -11,12 +11,6 @@ upwards.
 | 
			
		||||
 | 
			
		||||
- [GPIO toggling in ACPI AML](gpio.md)
 | 
			
		||||
 | 
			
		||||
## Windows-specific ACPI documentation
 | 
			
		||||
## devicetree
 | 
			
		||||
 | 
			
		||||
- [Windows-specific documentation](windows.md)
 | 
			
		||||
 | 
			
		||||
##  ACPI specification - Useful links
 | 
			
		||||
 | 
			
		||||
- [ACPI Specification 6.5](https://uefi.org/specs/ACPI/6.5/index.html)
 | 
			
		||||
- [ASL 2.0 Syntax](https://uefi.org/specs/ACPI/6.5/19_ASL_Reference.html#asl-2-0-symbolic-operators-and-expressions)
 | 
			
		||||
- [Predefined ACPI Names](https://uefi.org/specs/ACPI/6.5/05_ACPI_Software_Programming_Model.html#predefined-acpi-names)
 | 
			
		||||
- [Adding devices to a device tree](devicetree.md)
 | 
			
		||||
 
 | 
			
		||||
@@ -1,9 +0,0 @@
 | 
			
		||||
# Testing ACPI changes under Windows
 | 
			
		||||
 | 
			
		||||
When testing ACPI changes in coreboot against Windows 8 or newer, beware that
 | 
			
		||||
during a normal boot after a clean shutdown, Windows will use the fast startup
 | 
			
		||||
mechanism which results in it not evaluating the changed ACPI code but instead
 | 
			
		||||
using some cached version which won't include the changes that were supposed to
 | 
			
		||||
be tested. In order for Windows to actually use the new ACPI tables, either
 | 
			
		||||
disable the fast startup or just tell Windows to do a reboot which will make it
 | 
			
		||||
read and use the ACPI tables in memory instead of an outdated cached version.
 | 
			
		||||
@@ -26,7 +26,9 @@ In order to add support for x86_64 the following assumptions were made:
 | 
			
		||||
* A stage can install new page tables in RAM
 | 
			
		||||
 | 
			
		||||
## Page tables
 | 
			
		||||
A `pagetables` cbfs file is generated based on an assembly file.
 | 
			
		||||
Page tables are generated by a tool in `util/pgtblgen/pgtblgen`. It writes
 | 
			
		||||
the page tables to a file which is then included into the CBFS as file called
 | 
			
		||||
`pagetables`.
 | 
			
		||||
 | 
			
		||||
To generate the static page tables it must know the physical address where to
 | 
			
		||||
place the file.
 | 
			
		||||
 
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 230 KiB After Width: | Height: | Size: 230 KiB  | 
@@ -95,17 +95,6 @@ If you feel you have been falsely or unfairly accused of violating this
 | 
			
		||||
Code of Conduct, you should notify the arbitration team with a concise
 | 
			
		||||
description of your grievance.
 | 
			
		||||
 | 
			
		||||
## Legal action
 | 
			
		||||
 | 
			
		||||
Threatening or starting legal action against the project, sibling
 | 
			
		||||
projects hosted on coreboot.org infrastructure, project or infrastructure
 | 
			
		||||
maintainers leads to an immediate ban from coreboot.org and related
 | 
			
		||||
systems.
 | 
			
		||||
 | 
			
		||||
The ban can be reconsidered, but it's the default action because the
 | 
			
		||||
people who pour lots of time and money into the projects aren't interested
 | 
			
		||||
in seeing their resources used against them.
 | 
			
		||||
 | 
			
		||||
## Scope
 | 
			
		||||
 | 
			
		||||
We expect all community participants (contributors, paid or otherwise;
 | 
			
		||||
@@ -126,4 +115,4 @@ Our arbitration team consists of the following people
 | 
			
		||||
This Code of Conduct is distributed under
 | 
			
		||||
a [Creative Commons Attribution-ShareAlike
 | 
			
		||||
license](http://creativecommons.org/licenses/by-sa/3.0/).  It is based
 | 
			
		||||
on the [Citizen Code of Conduct](https://web.archive.org/web/20200330154000/http://citizencodeofconduct.org/)
 | 
			
		||||
on the [Citizen Code of Conduct](http://citizencodeofconduct.org/)
 | 
			
		||||
 
 | 
			
		||||
@@ -14,7 +14,7 @@ their development kit with them and conduct development sessions.
 | 
			
		||||
 | 
			
		||||
[Open Source Firmware at Facebook](https://fosdem.org/2019/schedule/event/open_source_firmware_at_facebook/)  by [David Hendricks](https://github.com/dhendrix) and [Andrea Barberio](https://github.com/insomniacslk) at [FOSDEM 2019](https://fosdem.org/2019/) ([video](https://video.fosdem.org/2019/K.4.401/open_source_firmware_at_facebook.mp4)) ([slides](https://insomniac.slackware.it/static/2019_fosdem_linuxboot_at_facebook.pdf)) (2019-02-03)
 | 
			
		||||
 | 
			
		||||
[Open Source Firmware - A love story](https://www.youtube.com/watch?v=xfqKm190dbU) by [Philipp Deppenwiese](https://cybersecurity.9elements.com) at [35c3](https://web.archive.org/web/20211027210118/https://events.ccc.de/congress/2018/wiki/index.php/Main_Page)
 | 
			
		||||
[Open Source Firmware - A love story](https://www.youtube.com/watch?v=xfqKm190dbU) by [Philipp Deppenwiese](https://cybersecurity.9elements.com) at [35c3](https://events.ccc.de/congress/2018)
 | 
			
		||||
([slides](https://cdn.media.ccc.de/congress/2018/slides-h264-hd/35c3-9778-deu-eng-Open_Source_Firmware_hd-slides.mp4)) (2018-12-27)
 | 
			
		||||
 | 
			
		||||
[coreboot mainboard porting with Intel FSP 2.0](https://www.youtube.com/watch?v=qUgo-AVsSCI) by Subrata Banik at OSFC 2018
 | 
			
		||||
 
 | 
			
		||||
@@ -14,7 +14,7 @@ read its
 | 
			
		||||
## Real time chat
 | 
			
		||||
 | 
			
		||||
We also have a real time chat room on [IRC](ircs://irc.libera.chat/#coreboot),
 | 
			
		||||
also bridged to [Matrix](https://matrix.to/#/#coreboot:matrix.org) and a
 | 
			
		||||
also bridged to [Matrix](https://matrix.to/#/#coreboot:libera.chat) and a
 | 
			
		||||
[Discord](https://discord.gg/JqT8NM5Zbg) presence. You can also find us on
 | 
			
		||||
[OSF Slack](https://osfw.slack.com/), which has channels on many open source
 | 
			
		||||
firmware related topics. Slack requires that people come from specific domains
 | 
			
		||||
@@ -31,7 +31,7 @@ topics, including community and technical matters that benefit from
 | 
			
		||||
an official decision.
 | 
			
		||||
 | 
			
		||||
We tried a whole lot of different tools, but so far the meetings worked
 | 
			
		||||
best with [Google Meet](https://meet.google.com/pyt-newq-rbb),
 | 
			
		||||
best with [Google Meet](https://meet.google.com/syn-toap-agu),
 | 
			
		||||
using [Google Docs](https://docs.google.com/document/d/1NRXqXcLBp5pFkHiJbrLdv3Spqh1Hu086HYkKrgKjeDQ/edit)
 | 
			
		||||
for the agenda and meeting minutes. Neither the video conference nor
 | 
			
		||||
the document require a Google account to participate, although editing
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +0,0 @@
 | 
			
		||||
# Community
 | 
			
		||||
 | 
			
		||||
* [Code of Conduct](code_of_conduct.md)
 | 
			
		||||
* [Language style](language_style.md)
 | 
			
		||||
* [Community forums](forums.md)
 | 
			
		||||
* [coreboot at conferences](conferences.md)
 | 
			
		||||
							
								
								
									
										45
									
								
								Documentation/community/services.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,45 @@
 | 
			
		||||
# Accounts on coreboot.org
 | 
			
		||||
 | 
			
		||||
There are a number of places where you can benefit from creaating an account
 | 
			
		||||
in our community. Since there is no single sign-on system in place (at this
 | 
			
		||||
time), they come with their own setup routines.
 | 
			
		||||
 | 
			
		||||
## Gerrit code review
 | 
			
		||||
We exchange and review patches to the code using our [Gerrit code review
 | 
			
		||||
system](https://review.coreboot.org).
 | 
			
		||||
 | 
			
		||||
It allows logging in with a Google or GitHub account using OAuth2 as well
 | 
			
		||||
as with any OpenID provider that you may already use.
 | 
			
		||||
 | 
			
		||||
On the [settings screen](https://review.coreboot.org/settings) you can register
 | 
			
		||||
all your email addresses you intend to use in the context of coreboot
 | 
			
		||||
development so that commits with your email address in them are associated with
 | 
			
		||||
you properly.
 | 
			
		||||
 | 
			
		||||
### https push access
 | 
			
		||||
When using the https URLs to git repositories, you can push with the "HTTP
 | 
			
		||||
Credentials" you can have Gerrit generate for you on that page. By default,
 | 
			
		||||
git uses `$HOME/.netrc` for http authentication data, so add a line there
 | 
			
		||||
stating:
 | 
			
		||||
 | 
			
		||||
    machine review.coreboot.org login $your-user-name password $your-password
 | 
			
		||||
 | 
			
		||||
### Gerrit user avatar
 | 
			
		||||
To setup an avatar to show in Gerrit, clone the avatars repository at
 | 
			
		||||
https://review.coreboot.org/gerrit-avatars.git and add a file named
 | 
			
		||||
$your-user-ID.jpg (the user ID is a number shown on the [settings screen](https://review.coreboot.org/settings)).
 | 
			
		||||
The image must be provided in JPEG format, must be square and have at most 50000
 | 
			
		||||
bytes.
 | 
			
		||||
 | 
			
		||||
After you push for review, the system will automatically verify your change
 | 
			
		||||
and, if adhering to these constraints, approve it. You can then immediately
 | 
			
		||||
submit it.
 | 
			
		||||
 | 
			
		||||
## Issue tracker
 | 
			
		||||
We have an [issue tracker](https://ticket.coreboot.org) that is used for
 | 
			
		||||
coreboot and related code, such as libpayload, as well as for the project's
 | 
			
		||||
infrastructure.
 | 
			
		||||
 | 
			
		||||
It can be helpful to refer to issues we track there in commit messages:
 | 
			
		||||
 | 
			
		||||
    Fixes: https://ticket.coreboot.org/issues/$id
 | 
			
		||||
@@ -55,7 +55,7 @@ else:
 | 
			
		||||
#
 | 
			
		||||
# This is also used if you do content translation via gettext catalogs.
 | 
			
		||||
# Usually you set "language" from the command line for these cases.
 | 
			
		||||
language = 'en'
 | 
			
		||||
language = None
 | 
			
		||||
 | 
			
		||||
# List of patterns, relative to source directory, that match files and
 | 
			
		||||
# directories to ignore when looking for source files.
 | 
			
		||||
@@ -87,13 +87,101 @@ html_theme = 'sphinx_rtd_theme'
 | 
			
		||||
# so a file named "default.css" will overwrite the builtin "default.css".
 | 
			
		||||
html_static_path = ['_static']
 | 
			
		||||
 | 
			
		||||
html_css_files = [
 | 
			
		||||
    'theme_overrides.css',  # override wide tables in RTD theme
 | 
			
		||||
]
 | 
			
		||||
html_context = {
 | 
			
		||||
      'css_files': [
 | 
			
		||||
        '_static/theme_overrides.css',  # override wide tables in RTD theme
 | 
			
		||||
      ],
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Output file base name for HTML help builder.
 | 
			
		||||
htmlhelp_basename = 'corebootdoc'
 | 
			
		||||
 | 
			
		||||
# -- Options for LaTeX output ---------------------------------------------
 | 
			
		||||
 | 
			
		||||
latex_elements = {
 | 
			
		||||
     # The paper size ('letterpaper' or 'a4paper').
 | 
			
		||||
     #
 | 
			
		||||
     # 'papersize': 'letterpaper',
 | 
			
		||||
 | 
			
		||||
     # The font size ('10pt', '11pt' or '12pt').
 | 
			
		||||
     #
 | 
			
		||||
     # 'pointsize': '10pt',
 | 
			
		||||
 | 
			
		||||
     # Additional stuff for the LaTeX preamble.
 | 
			
		||||
     #
 | 
			
		||||
     # 'preamble': '',
 | 
			
		||||
 | 
			
		||||
     # Latex figure (float) alignment
 | 
			
		||||
     #
 | 
			
		||||
     # 'figure_align': 'htbp',
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Grouping the document tree into LaTeX files. List of tuples
 | 
			
		||||
# (source start file, target name, title,
 | 
			
		||||
#  author, documentclass [howto, manual, or own class]).
 | 
			
		||||
latex_documents = [
 | 
			
		||||
    (master_doc, 'coreboot.tex', u'coreboot Documentation',
 | 
			
		||||
     u'the coreboot project', 'manual'),
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
# The name of an image file (relative to this directory) to place at the top of
 | 
			
		||||
# the title page.
 | 
			
		||||
#
 | 
			
		||||
# latex_logo = None
 | 
			
		||||
 | 
			
		||||
# For "manual" documents, if this is true, then toplevel headings are parts,
 | 
			
		||||
# not chapters.
 | 
			
		||||
#
 | 
			
		||||
# latex_use_parts = False
 | 
			
		||||
 | 
			
		||||
# If true, show page references after internal links.
 | 
			
		||||
#
 | 
			
		||||
# latex_show_pagerefs = False
 | 
			
		||||
 | 
			
		||||
# If true, show URL addresses after external links.
 | 
			
		||||
#
 | 
			
		||||
# latex_show_urls = False
 | 
			
		||||
 | 
			
		||||
# Documents to append as an appendix to all manuals.
 | 
			
		||||
#
 | 
			
		||||
# latex_appendices = []
 | 
			
		||||
 | 
			
		||||
# If false, will not define \strong, \code,	itleref, \crossref ... but only
 | 
			
		||||
# \sphinxstrong, ..., \sphinxtitleref, ... To help avoid clash with user added
 | 
			
		||||
# packages.
 | 
			
		||||
#
 | 
			
		||||
# latex_keep_old_macro_names = True
 | 
			
		||||
 | 
			
		||||
# If false, no module index is generated.
 | 
			
		||||
#
 | 
			
		||||
# latex_domain_indices = True
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# -- Options for manual page output ---------------------------------------
 | 
			
		||||
 | 
			
		||||
# One entry per manual page. List of tuples
 | 
			
		||||
# (source start file, name, description, authors, manual section).
 | 
			
		||||
man_pages = [
 | 
			
		||||
    (master_doc, 'coreboot', u'coreboot Documentation',
 | 
			
		||||
     [author], 1)
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
# If true, show URL addresses after external links.
 | 
			
		||||
#
 | 
			
		||||
# man_show_urls = False
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# -- Options for Texinfo output -------------------------------------------
 | 
			
		||||
 | 
			
		||||
# Grouping the document tree into Texinfo files. List of tuples
 | 
			
		||||
# (source start file, target name, title, author,
 | 
			
		||||
#  dir menu entry, description, category)
 | 
			
		||||
texinfo_documents = [
 | 
			
		||||
    (master_doc, 'coreboot', u'coreboot Documentation',
 | 
			
		||||
     author, 'coreboot', 'One line description of project.',
 | 
			
		||||
     'Miscellaneous'),
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
enable_auto_toc_tree = True
 | 
			
		||||
 | 
			
		||||
class MyCommonMarkParser(CommonMarkParser):
 | 
			
		||||
@@ -103,6 +191,23 @@ class MyCommonMarkParser(CommonMarkParser):
 | 
			
		||||
        n = nodes.literal(mdnode.literal, mdnode.literal)
 | 
			
		||||
        self.current_node.append(n)
 | 
			
		||||
 | 
			
		||||
# Documents to append as an appendix to all manuals.
 | 
			
		||||
#
 | 
			
		||||
# texinfo_appendices = []
 | 
			
		||||
 | 
			
		||||
# If false, no module index is generated.
 | 
			
		||||
#
 | 
			
		||||
# texinfo_domain_indices = True
 | 
			
		||||
 | 
			
		||||
# How to display URL addresses: 'footnote', 'no', or 'inline'.
 | 
			
		||||
#
 | 
			
		||||
# texinfo_show_urls = 'footnote'
 | 
			
		||||
 | 
			
		||||
# If true, do not generate a @detailmenu in the "Top" node's menu.
 | 
			
		||||
#
 | 
			
		||||
# texinfo_no_detailmenu = False
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def setup(app):
 | 
			
		||||
    from recommonmark.transform import AutoStructify
 | 
			
		||||
    # Load recommonmark on old Sphinx
 | 
			
		||||
 
 | 
			
		||||
@@ -3,17 +3,17 @@
 | 
			
		||||
This document describes the preferred C coding style for the
 | 
			
		||||
coreboot project. It is in many ways exactly the same as the Linux
 | 
			
		||||
kernel coding style. In fact, most of this document has been copied from
 | 
			
		||||
the [Linux kernel coding style](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/Documentation/process/4.Coding.rst)
 | 
			
		||||
the [Linux kernel coding style](http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/plain/Documentation/CodingStyle?id=HEAD)
 | 
			
		||||
 | 
			
		||||
The guidelines in this file should be seen as a strong suggestion, and
 | 
			
		||||
should overrule personal preference. They may be ignored in individual
 | 
			
		||||
instances when there are good practical reasons to do so, and reviewers
 | 
			
		||||
are in agreement.
 | 
			
		||||
should overrule personal preference. But they may be ignored in
 | 
			
		||||
individual instances when there are good practical reasons to do so, and
 | 
			
		||||
reviewers are in agreement.
 | 
			
		||||
 | 
			
		||||
Any style questions that are not mentioned in here should be decided
 | 
			
		||||
between the author and reviewers on a case-by-case basis. When modifying
 | 
			
		||||
existing files, authors should try to match the prevalent style in that
 | 
			
		||||
file -- otherwise, they should generally match similar existing files in
 | 
			
		||||
file -- otherwise, they should try to match similar existing files in
 | 
			
		||||
coreboot.
 | 
			
		||||
 | 
			
		||||
Bulk style changes to existing code ("cleanup patches") should avoid
 | 
			
		||||
@@ -24,8 +24,7 @@ be honored. (Note that `checkpatch.pl` is not part of this style guide,
 | 
			
		||||
and neither is `clang-format`. These tools can be useful to find
 | 
			
		||||
potential issues or simplify formatting in new submissions, but they
 | 
			
		||||
were not designed to directly match this guide and may have false
 | 
			
		||||
positives. They should not be bulk-applied to change existing code
 | 
			
		||||
except in cases where they directly match the style guide.)
 | 
			
		||||
positives. They should not be bulk-applied to change existing code.)
 | 
			
		||||
 | 
			
		||||
## Indentation
 | 
			
		||||
 | 
			
		||||
@@ -43,8 +42,7 @@ Now, some people will claim that having 8-character indentations makes
 | 
			
		||||
the code move too far to the right, and makes it hard to read on a
 | 
			
		||||
80-character terminal screen. The answer to that is that if you need
 | 
			
		||||
more than 3 levels of indentation, you're screwed anyway, and should
 | 
			
		||||
fix your program.  Note that coreboot has expanded the 80 character
 | 
			
		||||
limit to 96 characters to allow for modern wider screens.
 | 
			
		||||
fix your program.
 | 
			
		||||
 | 
			
		||||
In short, 8-char indents make things easier to read, and have the added
 | 
			
		||||
benefit of warning you when you're nesting your functions too deep.
 | 
			
		||||
@@ -68,7 +66,7 @@ case 'm':
 | 
			
		||||
case 'K':
 | 
			
		||||
case 'k':
 | 
			
		||||
	mem <<= 10;
 | 
			
		||||
	__fallthrough;
 | 
			
		||||
	/* fall through */
 | 
			
		||||
default:
 | 
			
		||||
	break;
 | 
			
		||||
}
 | 
			
		||||
@@ -89,9 +87,7 @@ Outside of comments, documentation and except in Kconfig, spaces are
 | 
			
		||||
never used for indentation, and the above example is deliberately
 | 
			
		||||
broken.
 | 
			
		||||
 | 
			
		||||
Get a decent editor and don't leave whitespace at the end of lines. This
 | 
			
		||||
will actually keep the patch from being tested in the CI, so patches
 | 
			
		||||
with ending whitespace cannot be merged.
 | 
			
		||||
Get a decent editor and don't leave whitespace at the end of lines.
 | 
			
		||||
 | 
			
		||||
## Breaking long lines and strings
 | 
			
		||||
 | 
			
		||||
@@ -507,14 +503,18 @@ comments to note or warn about something particularly clever (or ugly),
 | 
			
		||||
but try to avoid excess. Instead, put the comments at the head of the
 | 
			
		||||
function, telling people what it does, and possibly WHY it does it.
 | 
			
		||||
 | 
			
		||||
coreboot style for comments is the C89 "/* ... */" style. You may also
 | 
			
		||||
use C99-style "// ..." comments for single-line comments.
 | 
			
		||||
When commenting the kernel API functions, please use the kernel-doc
 | 
			
		||||
format. See the files Documentation/kernel-doc-nano-HOWTO.txt and
 | 
			
		||||
scripts/kernel-doc for details.
 | 
			
		||||
 | 
			
		||||
coreboot style for comments is the C89 "/* ... */" style. You may
 | 
			
		||||
use C99-style "// ..." comments.
 | 
			
		||||
 | 
			
		||||
The preferred style for *short* (multi-line) comments is:
 | 
			
		||||
 | 
			
		||||
```c
 | 
			
		||||
/* This is the preferred style for short multi-line
 | 
			
		||||
   comments in the coreboot source code.
 | 
			
		||||
   comments in the Linux kernel source code.
 | 
			
		||||
   Please use it consistently. */
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
@@ -523,7 +523,7 @@ The preferred style for *long* (multi-line) comments is:
 | 
			
		||||
```c
 | 
			
		||||
/*
 | 
			
		||||
 * This is the preferred style for multi-line
 | 
			
		||||
 * comments in the coreboot source code.
 | 
			
		||||
 * comments in the Linux kernel source code.
 | 
			
		||||
 * Please use it consistently.
 | 
			
		||||
 *
 | 
			
		||||
 * Description:  A column of asterisks on the left side,
 | 
			
		||||
@@ -578,8 +578,7 @@ To do the latter, you can stick the following in your .emacs file:
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
This will make emacs go better with the kernel coding style for C files
 | 
			
		||||
below ~/src/linux-trees.  Obviously, this should be updated to match
 | 
			
		||||
your own paths for coreboot.
 | 
			
		||||
below ~/src/linux-trees.
 | 
			
		||||
 | 
			
		||||
But even if you fail in getting emacs to do sane formatting, not
 | 
			
		||||
everything is lost: use "indent".
 | 
			
		||||
@@ -627,6 +626,38 @@ config ADFS_FS_RW
 | 
			
		||||
For full documentation on the configuration files, see the file
 | 
			
		||||
Documentation/kbuild/kconfig-language.txt.
 | 
			
		||||
 | 
			
		||||
Data structures
 | 
			
		||||
---------------
 | 
			
		||||
 | 
			
		||||
Data structures that have visibility outside the single-threaded
 | 
			
		||||
environment they are created and destroyed in should always have
 | 
			
		||||
reference counts. In the kernel, garbage collection doesn't exist (and
 | 
			
		||||
outside the kernel garbage collection is slow and inefficient), which
 | 
			
		||||
means that you absolutely _have_ to reference count all your uses.
 | 
			
		||||
 | 
			
		||||
Reference counting means that you can avoid locking, and allows multiple
 | 
			
		||||
users to have access to the data structure in parallel - and not having
 | 
			
		||||
to worry about the structure suddenly going away from under them just
 | 
			
		||||
because they slept or did something else for a while.
 | 
			
		||||
 | 
			
		||||
Note that locking is _not_ a replacement for reference counting.
 | 
			
		||||
Locking is used to keep data structures coherent, while reference
 | 
			
		||||
counting is a memory management technique. Usually both are needed, and
 | 
			
		||||
they are not to be confused with each other.
 | 
			
		||||
 | 
			
		||||
Many data structures can indeed have two levels of reference counting,
 | 
			
		||||
when there are users of different "classes". The subclass count counts
 | 
			
		||||
the number of subclass users, and decrements the global count just once
 | 
			
		||||
when the subclass count goes to zero.
 | 
			
		||||
 | 
			
		||||
Examples of this kind of "multi-level-reference-counting" can be found
 | 
			
		||||
in memory management ("struct mm_struct": mm_users and mm_count),
 | 
			
		||||
and in filesystem code ("struct super_block": s_count and
 | 
			
		||||
s_active).
 | 
			
		||||
 | 
			
		||||
Remember: if another thread can find your data structure, and you don't
 | 
			
		||||
have a reference count on it, you almost certainly have a bug.
 | 
			
		||||
 | 
			
		||||
Macros, Enums and RTL
 | 
			
		||||
---------------------
 | 
			
		||||
 | 
			
		||||
@@ -696,19 +727,35 @@ The cpp manual deals with macros exhaustively. The gcc internals manual
 | 
			
		||||
also covers RTL which is used frequently with assembly language in the
 | 
			
		||||
kernel.
 | 
			
		||||
 | 
			
		||||
Printing coreboot messages
 | 
			
		||||
Printing kernel messages
 | 
			
		||||
------------------------
 | 
			
		||||
 | 
			
		||||
coreboot developers like to be seen as literate. Do mind the spelling of
 | 
			
		||||
coreboot messages to make a good impression. Do not use crippled words
 | 
			
		||||
Kernel developers like to be seen as literate. Do mind the spelling of
 | 
			
		||||
kernel messages to make a good impression. Do not use crippled words
 | 
			
		||||
like "dont"; use "do not" or "don't" instead. Make the messages
 | 
			
		||||
concise, clear, and unambiguous.
 | 
			
		||||
 | 
			
		||||
coreboot messages do not have to be terminated with a period.
 | 
			
		||||
Kernel messages do not have to be terminated with a period.
 | 
			
		||||
 | 
			
		||||
Printing numbers in parentheses (%d) adds no value and should be
 | 
			
		||||
avoided.
 | 
			
		||||
 | 
			
		||||
There are a number of driver model diagnostic macros in
 | 
			
		||||
<linux/device.h> which you should use to make sure messages are
 | 
			
		||||
matched to the right device and driver, and are tagged with the right
 | 
			
		||||
level: dev_err(), dev_warn(), dev_info(), and so forth. For messages
 | 
			
		||||
that aren't associated with a particular device, <linux/printk.h>
 | 
			
		||||
defines pr_debug() and pr_info().
 | 
			
		||||
 | 
			
		||||
Coming up with good debugging messages can be quite a challenge; and
 | 
			
		||||
once you have them, they can be a huge help for remote troubleshooting.
 | 
			
		||||
Such messages should be compiled out when the DEBUG symbol is not
 | 
			
		||||
defined (that is, by default they are not included). When you use
 | 
			
		||||
dev_dbg() or pr_debug(), that's automatic. Many subsystems have
 | 
			
		||||
Kconfig options to turn on -DDEBUG. A related convention uses
 | 
			
		||||
VERBOSE_DEBUG to add dev_vdbg() messages to the ones already enabled
 | 
			
		||||
by DEBUG.
 | 
			
		||||
 | 
			
		||||
Allocating memory
 | 
			
		||||
-----------------
 | 
			
		||||
 | 
			
		||||
@@ -745,7 +792,12 @@ The inline disease
 | 
			
		||||
There appears to be a common misperception that gcc has a magic "make
 | 
			
		||||
me faster" speedup option called "inline". While the use of inlines
 | 
			
		||||
can be appropriate (for example as a means of replacing macros, see
 | 
			
		||||
Chapter 12), it very often is not.
 | 
			
		||||
Chapter 12), it very often is not. Abundant use of the inline keyword
 | 
			
		||||
leads to a much bigger kernel, which in turn slows the system as a whole
 | 
			
		||||
down, due to a bigger icache footprint for the CPU and simply because
 | 
			
		||||
there is less memory available for the pagecache. Just think about it; a
 | 
			
		||||
pagecache miss causes a disk seek, which easily takes 5 milliseconds.
 | 
			
		||||
There are a LOT of cpu cycles that can go into these 5 milliseconds.
 | 
			
		||||
 | 
			
		||||
A reasonable rule of thumb is to not put inline at functions that have
 | 
			
		||||
more than 3 lines of code in them. An exception to this rule are the
 | 
			
		||||
@@ -766,9 +818,9 @@ Function return values and names
 | 
			
		||||
 | 
			
		||||
Functions can return values of many different kinds, and one of the most
 | 
			
		||||
common is a value indicating whether the function succeeded or failed.
 | 
			
		||||
Such a value can be represented as an error-code integer (`CB_ERR_xxx`
 | 
			
		||||
(negative number) = failure, `CB_SUCCESS` (0) = success) or a "succeeded"
 | 
			
		||||
boolean (0 = failure, non-zero = success).
 | 
			
		||||
Such a value can be represented as an error-code integer (-Exxx =
 | 
			
		||||
failure, 0 = success) or a "succeeded" boolean (0 = failure, non-zero
 | 
			
		||||
= success).
 | 
			
		||||
 | 
			
		||||
Mixing up these two sorts of representations is a fertile source of
 | 
			
		||||
difficult-to-find bugs. If the C language included a strong distinction
 | 
			
		||||
@@ -780,84 +832,21 @@ If the name of a function is an action or an imperative command,
 | 
			
		||||
the function should return an error-code integer.  If the name
 | 
			
		||||
is a predicate, the function should return a "succeeded" boolean.
 | 
			
		||||
 | 
			
		||||
For example, "add work" is a command, and the `add_work()` function
 | 
			
		||||
returns 0 for success or `CB_ERR` for failure. In the same way, "PCI
 | 
			
		||||
device present" is a predicate, and the `pci_dev_present()` function
 | 
			
		||||
For example, "add work" is a command, and the add_work() function
 | 
			
		||||
returns 0 for success or -EBUSY for failure. In the same way, "PCI
 | 
			
		||||
device present" is a predicate, and the pci_dev_present() function
 | 
			
		||||
returns 1 if it succeeds in finding a matching device or 0 if it
 | 
			
		||||
doesn't.
 | 
			
		||||
 | 
			
		||||
All EXPORTed functions must respect this convention, and so should all
 | 
			
		||||
public functions. Private (static) functions need not, but it is
 | 
			
		||||
recommended that they do.
 | 
			
		||||
 | 
			
		||||
Functions whose return value is the actual result of a computation,
 | 
			
		||||
rather than an indication of whether the computation succeeded, are not
 | 
			
		||||
subject to this rule. Generally they indicate failure by returning some
 | 
			
		||||
out-of-range result. Typical examples would be functions that return
 | 
			
		||||
pointers; they use NULL to report failure.
 | 
			
		||||
 | 
			
		||||
Error handling, assertions and die()
 | 
			
		||||
-----------------------------
 | 
			
		||||
 | 
			
		||||
As firmware, coreboot has no means to let the user interactively fix things when
 | 
			
		||||
something goes wrong. We either succeed to boot or the device becomes a brick
 | 
			
		||||
that must be recovered through complicated external means (e.g. a flash
 | 
			
		||||
programmer). Therefore, coreboot code should strive to continue booting
 | 
			
		||||
wherever possible.
 | 
			
		||||
 | 
			
		||||
In most cases, errors should be handled by logging a message of at least
 | 
			
		||||
`BIOS_ERR` level, returning out of the function stack for the failed feature,
 | 
			
		||||
and then continuing execution. For example, if a function reading the EDID of an
 | 
			
		||||
eDP display panel encounters an I2C error, it should print a "cannot read EDID"
 | 
			
		||||
message and return an error code. The calling display initialization function
 | 
			
		||||
knows that without the EDID there is no way to initialize the display correctly,
 | 
			
		||||
so it will also immediately return with an error code without running its
 | 
			
		||||
remaining code that would initialize the SoC's display controller. Execution
 | 
			
		||||
returns further up the function stack to the mainboard initialization code
 | 
			
		||||
which continues booting despite the failed display initialization, since
 | 
			
		||||
display functionality is non-essential to the system. (Code is encouraged but
 | 
			
		||||
not required to use `enum cb_err` error codes to return these errors.)
 | 
			
		||||
 | 
			
		||||
coreboot also has the `die()` function that completely halts execution. `die()`
 | 
			
		||||
should only be used as a last resort, since it results in the worst user
 | 
			
		||||
experience (bricked system). It is generally preferrable to continue executing
 | 
			
		||||
even after a problem was encountered that might be fatal (e.g. SPI clock
 | 
			
		||||
couldn't be configured correctly), because a slight chance of successfully
 | 
			
		||||
booting is still better than not booting at all. The only cases where `die()`
 | 
			
		||||
should be used are:
 | 
			
		||||
 | 
			
		||||
1. There is no (simple) way to continue executing. For example, when loading the
 | 
			
		||||
   next stage from SPI flash fails, we don't have any more code to execute. When
 | 
			
		||||
   memory initialization fails, we have no space to load the ramstage into.
 | 
			
		||||
 | 
			
		||||
2. Continuing execution would pose a security risk. All security features in
 | 
			
		||||
   coreboot are optional, but when they are configured in the user must be able
 | 
			
		||||
   to rely on them. For example, if CBFS verification is enabled and the file
 | 
			
		||||
   hash when loading the romstage doesn't match what it should be, it is better
 | 
			
		||||
   to stop execution than to jump to potentially malicious code.
 | 
			
		||||
 | 
			
		||||
In addition to normal error logging with `printk()`, coreboot also offers the
 | 
			
		||||
`assert()` macro. `assert()` should be used judiciously to confirm that
 | 
			
		||||
conditions are true which the programmer _knows_ to be true, in order to catch
 | 
			
		||||
programming errors and incorrect assumptions. It is therefore different from a
 | 
			
		||||
normal `if ()`-check that is used to actually test for things which may turn
 | 
			
		||||
out to be true or false based on external conditions. For example, anything
 | 
			
		||||
that involves communicating with hardware, such as whether an attempt to read
 | 
			
		||||
from SPI flash succeeded, should _not_ use `assert()` and should instead just
 | 
			
		||||
be checked with a normal `if ()` and subsequent manual error handling. Hardware
 | 
			
		||||
can always fail for various reasons and the programmer can never 100% assume in
 | 
			
		||||
advance that it will work as expected. On the other hand, if a function takes a
 | 
			
		||||
pointer parameter `ctx` and the contract for that function (as documented in a
 | 
			
		||||
comment above its declaration) specifies that this parameter should point to a
 | 
			
		||||
valid context structure, then adding an `assert(ctx)` line to that function may
 | 
			
		||||
be a good idea. The programmer knows that this function should never be called
 | 
			
		||||
with a NULL pointer (because that's how it is specified), and if it was actually
 | 
			
		||||
called with a NULL pointer that would indicate a programming error on account of
 | 
			
		||||
the caller.
 | 
			
		||||
 | 
			
		||||
`assert()` can be configured to either just print an error message and continue
 | 
			
		||||
execution (default), or call `die()` (when `CONFIG_FATAL_ASSERTS` is set).
 | 
			
		||||
Developers are encouraged to always test their code with this option enabled to
 | 
			
		||||
make assertion errors (and therefore bugs) more easy to notice. Since assertions
 | 
			
		||||
thus do not always stop execution, they should never be relied upon to be the
 | 
			
		||||
sole guard against conditions that really _need_ to stop execution (e.g.
 | 
			
		||||
security guarantees should never be enforced only by `assert()`).
 | 
			
		||||
pointers; they use NULL or the ERR_PTR mechanism to report failure.
 | 
			
		||||
 | 
			
		||||
Headers and includes
 | 
			
		||||
---------------
 | 
			
		||||
@@ -871,7 +860,7 @@ in the same directory that is not part of a normal include path gets included
 | 
			
		||||
.c files should keep all C code wrapped in `#ifndef __ASSEMBLER__` blocks,
 | 
			
		||||
including includes to other headers that don't follow that provision. Where a
 | 
			
		||||
specific include order is required for technical reasons, it should be clearly
 | 
			
		||||
documented with comments. This should not be the norm.
 | 
			
		||||
documented with comments.
 | 
			
		||||
 | 
			
		||||
Files should generally include every header they need a definition from
 | 
			
		||||
directly (and not include any unnecessary extra headers). Excepted from
 | 
			
		||||
@@ -971,78 +960,17 @@ asm ("magic %reg1, #42nt"
 | 
			
		||||
	: /* outputs */ : /* inputs */ : /* clobbers */);
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
GCC extensions
 | 
			
		||||
--------------
 | 
			
		||||
 | 
			
		||||
GCC is the only officially-supported compiler for coreboot, and a
 | 
			
		||||
variety of its C language extensions are heavily used throughout the
 | 
			
		||||
code base. There have been occasional attempts to add clang as a second
 | 
			
		||||
compiler option, which is generally compatible to the same language
 | 
			
		||||
extensions that have been long-established by GCC.
 | 
			
		||||
 | 
			
		||||
Some GCC extensions (e.g. inline assembly) are basically required for
 | 
			
		||||
proper firmware development. Others enable more safe or flexible
 | 
			
		||||
coding patterns than can be expressed with standard C (e.g. statement
 | 
			
		||||
expressions and `typeof()` to avoid double evaluation in macros like
 | 
			
		||||
`MAX()`). Yet others just add some simple convenience and reduce
 | 
			
		||||
boilerplate (e.g. `void *` arithmetic).
 | 
			
		||||
 | 
			
		||||
Since some GCC extensions are necessary either way, there is no gain
 | 
			
		||||
from avoiding other GCC extensions elsewhere. The use of all official
 | 
			
		||||
GCC extensions is expressly allowed within coreboot. In cases where an
 | 
			
		||||
extension can be replaced by a 100% equivalent C standard feature with
 | 
			
		||||
no extra boilerplate or loss of readability, the C standard feature
 | 
			
		||||
should be preferred (this usually only happens when GCC retains an
 | 
			
		||||
older pre-standardization extension for backwards compatibility, e.g.
 | 
			
		||||
the old pre-C99 syntax for designated initializers). But if there is
 | 
			
		||||
any advantage offered by the GCC extension (e.g. using GCC zero-length
 | 
			
		||||
arrays instead of C99 variable-length arrays because they don't inhibit
 | 
			
		||||
`sizeof()`), there is no reason to deprive ourselves of that, and "this
 | 
			
		||||
is not C standard compliant" should not be a reason to argue against
 | 
			
		||||
its use in reviews.
 | 
			
		||||
 | 
			
		||||
This rule only applies to explicit GCC extensions listed in the
 | 
			
		||||
"Extensions to the C Language Family" section of the GCC manual. Code
 | 
			
		||||
should never rely on incidental GCC translation behavior that is not
 | 
			
		||||
explicitly documented as a feature and could change at any moment.
 | 
			
		||||
 | 
			
		||||
Refactoring
 | 
			
		||||
-----------
 | 
			
		||||
Because refactoring existing code can add bugs to tested code, any
 | 
			
		||||
refactors should be done only with serious consideration. Refactoring
 | 
			
		||||
for style differences should only be done if the existing style
 | 
			
		||||
conflicts with a documented coreboot guideline. If you believe that the
 | 
			
		||||
style should be modified, the pros and cons can be discussed on the
 | 
			
		||||
mailing list and in the coreboot leadership meeting.
 | 
			
		||||
 | 
			
		||||
Similarly, the original author should be respected. Changing working
 | 
			
		||||
code simply because of a stylistic disagreement is *prohibited*. This is
 | 
			
		||||
not saying that refactors that are objectively better (simpler, faster,
 | 
			
		||||
easier to understand) are not allowed, but there has to be a definite
 | 
			
		||||
improvement, not simply stylistic changes.
 | 
			
		||||
 | 
			
		||||
Basically, when refactoring code, there should be a clear benefit to
 | 
			
		||||
the project and codebase. The reviewers and submitters get to make the
 | 
			
		||||
call on how to interpret this.
 | 
			
		||||
 | 
			
		||||
When refactoring, adding unit tests to verify that the post-change
 | 
			
		||||
functionality matches or improves upon pre-change functionality is
 | 
			
		||||
encouraged.
 | 
			
		||||
 | 
			
		||||
References
 | 
			
		||||
----------
 | 
			
		||||
 | 
			
		||||
The C Programming Language, Second Edition by Brian W. Kernighan and
 | 
			
		||||
Dennis M. Ritchie. Prentice Hall, Inc., 1988. ISBN 0-13-110362-8
 | 
			
		||||
(paperback), 0-13-110370-9 (hardback). URL:
 | 
			
		||||
<https://duckduckgo.com/?q=isbn+0-13-110362-8> or
 | 
			
		||||
<https://www.google.com/search?q=isbn+0-13-110362-8>
 | 
			
		||||
 | 
			
		||||
<http://cm.bell-labs.com/cm/cs/cbook/>
 | 
			
		||||
 | 
			
		||||
The Practice of Programming by Brian W. Kernighan and Rob Pike.
 | 
			
		||||
Addison-Wesley, Inc., 1999. ISBN 0-201-61586-X. URL:
 | 
			
		||||
<https://duckduckgo.com/?q=ISBN+0-201-61586-X> or
 | 
			
		||||
<https://www.google.com/search?q=ISBN+0-201-61586-X>
 | 
			
		||||
<http://cm.bell-labs.com/cm/cs/tpop/>
 | 
			
		||||
 | 
			
		||||
GNU manuals - where in compliance with K&R and this text - for cpp, gcc,
 | 
			
		||||
gcc internals and indent, all available from
 | 
			
		||||
 
 | 
			
		||||
@@ -1,286 +0,0 @@
 | 
			
		||||
# Google Summer of Code
 | 
			
		||||
 | 
			
		||||
## Organization admins
 | 
			
		||||
 | 
			
		||||
The *organization admins* are managing the GSoC program for the coreboot
 | 
			
		||||
organization.
 | 
			
		||||
 | 
			
		||||
The organization admins are:
 | 
			
		||||
 | 
			
		||||
  * Felix Singer (primary)
 | 
			
		||||
  * Martin Roth
 | 
			
		||||
  * David Hendricks
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Contacts
 | 
			
		||||
 | 
			
		||||
If you are interested in participating in GSoC as a contributor or mentor,
 | 
			
		||||
please have a look at our [community forums] and reach out to us. Working closely
 | 
			
		||||
with the community is highly encouraged, as we've seen that our most successful
 | 
			
		||||
contributors are generally very involved.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Why work on coreboot for GSoC?
 | 
			
		||||
 | 
			
		||||
  * coreboot offers you the opportunity to work with various architectures
 | 
			
		||||
    right on the iron. coreboot supports both current and older silicon for a
 | 
			
		||||
    wide variety of chips and technologies.
 | 
			
		||||
 | 
			
		||||
  * coreboot has a worldwide developer and user base.
 | 
			
		||||
 | 
			
		||||
  * We are a very passionate team, so you will interact directly with the
 | 
			
		||||
    project initiators and project leaders.
 | 
			
		||||
 | 
			
		||||
  * We have a large, helpful community. coreboot has some extremely talented
 | 
			
		||||
    and helpful experts in firmware involved in the project. They are ready to
 | 
			
		||||
    assist and mentor contributors participating in GSoC.
 | 
			
		||||
 | 
			
		||||
  * One of the last areas where open source software is not common is firmware.
 | 
			
		||||
    Running proprietary firmware can have severe effects on user's freedom and
 | 
			
		||||
    security. coreboot has a mission to change that by providing a common
 | 
			
		||||
    framework for initial hardware initialization and you can help us succeed.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Collection of official GSoC guides & documents
 | 
			
		||||
 | 
			
		||||
  * [Timeline][GSoC Timeline]
 | 
			
		||||
 | 
			
		||||
  * [Roles and Responsibilities][GSoC Roles and Responsibilities]
 | 
			
		||||
 | 
			
		||||
  * [Contributor Guide][GSoC Contributor Guide]
 | 
			
		||||
 | 
			
		||||
  * [Contributor Advice][GSoC Contributor Advice]
 | 
			
		||||
 | 
			
		||||
  * [Mentor Guide][GSoC Mentor Guide]
 | 
			
		||||
 | 
			
		||||
  * [FAQ][GSoC FAQ]
 | 
			
		||||
 | 
			
		||||
  * [Rules][GSoC Rules]
 | 
			
		||||
 | 
			
		||||
  * [Glossary][GSoC Glossary]
 | 
			
		||||
 | 
			
		||||
  * [Organization Admin Tips][GSoC Organization Admin Tips]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Contributor requirements & commitments
 | 
			
		||||
 | 
			
		||||
Google Summer of Code is a significant time commitment for you. Medium-sized
 | 
			
		||||
projects are estimated to take 175 hours, while large-sized projects are
 | 
			
		||||
estimated to take 350 hours. Depending on the project size, this means we
 | 
			
		||||
expect you to work roughly half-time or full-time on your project during the
 | 
			
		||||
three months of coding. We expect to be able to see this level of effort in the
 | 
			
		||||
results.
 | 
			
		||||
 | 
			
		||||
The standard program duration is 12 weeks and in consultation with the mentor
 | 
			
		||||
it can be extended up to 22 weeks. Please keep in mind that the actual number
 | 
			
		||||
of hours you spend on the project highly depends on your skills and previous
 | 
			
		||||
experience.
 | 
			
		||||
 | 
			
		||||
Make sure that your schedule (exams, courses, day job) gives you a sufficient
 | 
			
		||||
amount of spare time. If this is not the case, then you should not apply.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Before applying
 | 
			
		||||
 | 
			
		||||
  * Join the [mailing list] and our other [community forums]. Introduce yourself
 | 
			
		||||
    and mention that you are a prospective GSoC contributor. Ask questions and
 | 
			
		||||
    discuss the project that you are considering. Community involvement is a
 | 
			
		||||
    key component of coreboot development.
 | 
			
		||||
 | 
			
		||||
  * You accept our [Code of Conduct] and [Language style].
 | 
			
		||||
 | 
			
		||||
  * Demonstrate that you can work with the coreboot codebase.
 | 
			
		||||
 | 
			
		||||
    * Look over some of the development processes guidelines: [Getting started],
 | 
			
		||||
      [Tutorial], [Flashing firmware tutorial] and [Coding style].
 | 
			
		||||
 | 
			
		||||
    * Download, build and boot coreboot in QEMU or on real hardware. Please email
 | 
			
		||||
      your serial output results to the [mailing list].
 | 
			
		||||
 | 
			
		||||
    * Look through some patches on Gerrit to get an understanding of the review
 | 
			
		||||
      process and common issues.
 | 
			
		||||
 | 
			
		||||
    * Get signed up for Gerrit and push at least one patch to Gerrit for review.
 | 
			
		||||
      Check the [small project list][Project ideas] or ask for simple tasks on
 | 
			
		||||
      the [mailing list] or on our other [community forums] if you need ideas.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### During the program
 | 
			
		||||
 | 
			
		||||
  * To pass and to be paid by Google requires that you meet certain milestones.
 | 
			
		||||
 | 
			
		||||
    * First, you must be in good standing with the community before the official
 | 
			
		||||
      start of the program. We expect you to post some design emails to the
 | 
			
		||||
      [mailing list], and get feedback on them, both before applying, and during
 | 
			
		||||
      the "community bonding period" between acceptance and official start.
 | 
			
		||||
 | 
			
		||||
    * You must have made progress and committed significant code before the
 | 
			
		||||
      mid-term point and by the final.
 | 
			
		||||
 | 
			
		||||
    * We require that accepted contributors to maintain a blog, where you are
 | 
			
		||||
      expected to write about your project *WEEKLY*. This is a way to measure
 | 
			
		||||
      progress and for the community at large to be able to help you. GSoC is
 | 
			
		||||
      *NOT* a private contract between your mentor and you.
 | 
			
		||||
 | 
			
		||||
  * You must be active in the community on IRC and the [mailing list].
 | 
			
		||||
 | 
			
		||||
  * You are expected to work on development publicly, and to push commits to the
 | 
			
		||||
    project on a regular basis. Depending on the project and what your mentor
 | 
			
		||||
    agrees to, these can be published directly to the project or to a public
 | 
			
		||||
    repository such as Gitlab or Github. If you are not publishing directly to
 | 
			
		||||
    the project codebase, be aware that we do not want large dumps of code that
 | 
			
		||||
    need to be rushed to meet the mid-term and final goals.
 | 
			
		||||
 | 
			
		||||
We don't expect our contributors to be experts in our problem domain, but we
 | 
			
		||||
don't want you to fail because some basic misunderstanding was in your way of
 | 
			
		||||
completing the task.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Projects
 | 
			
		||||
 | 
			
		||||
There are many development tasks available in coreboot. We prepared some ideas
 | 
			
		||||
for Summer of Code projects. These are projects that we think can be managed in
 | 
			
		||||
the timeline of GSoC, and they cover areas where coreboot is trying to reach
 | 
			
		||||
new users and new use cases.
 | 
			
		||||
 | 
			
		||||
Of course your application does not have to be based on any of the ideas listed.
 | 
			
		||||
It is entirely possible that you have a great idea that we just didn't think of
 | 
			
		||||
yet. Please let us know!
 | 
			
		||||
 | 
			
		||||
The blog posts related to previous GSoC projects might give some insights to
 | 
			
		||||
what it is like to be a coreboot GSoC contributor.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## coreboot Summer of Code Application
 | 
			
		||||
 | 
			
		||||
coreboot welcomes contributors from all backgrounds and levels of experience.
 | 
			
		||||
 | 
			
		||||
Your application should include a complete project proposal. You should
 | 
			
		||||
document that you have the knowledge and the ability to complete your proposed
 | 
			
		||||
project. This may require a little research and understanding of coreboot prior
 | 
			
		||||
to sending your application. The community and coreboot project mentors are your
 | 
			
		||||
best resource in fleshing out your project ideas and helping with a project
 | 
			
		||||
timeline. We recommend that you get feedback and recommendations on your
 | 
			
		||||
proposal before the application deadline.
 | 
			
		||||
 | 
			
		||||
Please complete the standard GSoC application and project proposal. Provide the
 | 
			
		||||
following information as part of your application. Make sure to provide multiple
 | 
			
		||||
ways of communicating in case your equipment (such as a laptop) is lost,
 | 
			
		||||
damaged, or stolen, or in case of a natural disaster that disrupts internet
 | 
			
		||||
service. You risk automatically failing if your mentor cannot contact you and if
 | 
			
		||||
you cannot provide updates according to GSoC deadlines.
 | 
			
		||||
 | 
			
		||||
**Personal Information**
 | 
			
		||||
 | 
			
		||||
  * Name
 | 
			
		||||
 | 
			
		||||
  * Email and contact options (IRC, Matrix, …)
 | 
			
		||||
 | 
			
		||||
  * Phone number (optional, but recommended)
 | 
			
		||||
 | 
			
		||||
  * Timezone, Usual working hours (UTC)
 | 
			
		||||
 | 
			
		||||
  * School / University, Degree Program, expected graduation date
 | 
			
		||||
 | 
			
		||||
  * Short bio / Overview of your background
 | 
			
		||||
 | 
			
		||||
  * What are your other time commitments? Do you have a job, classes, vacations?
 | 
			
		||||
    When and how long?
 | 
			
		||||
 | 
			
		||||
**Software experience**
 | 
			
		||||
 | 
			
		||||
If applicable, please provide the following information:
 | 
			
		||||
 | 
			
		||||
  * Portfolio, Website, blog, microblog, Github, Gitlab, ...
 | 
			
		||||
 | 
			
		||||
  * Links to one or more patches submitted
 | 
			
		||||
 | 
			
		||||
  * Links to posts on the [mailing list] with the serial output of your build.
 | 
			
		||||
 | 
			
		||||
  * Please comment on your software and firmware experience.
 | 
			
		||||
 | 
			
		||||
  * Have you contributed to an open source project? Which one? What was your
 | 
			
		||||
    experience?
 | 
			
		||||
 | 
			
		||||
  * What was your experience while building and running coreboot? Did you have
 | 
			
		||||
    problems?
 | 
			
		||||
 | 
			
		||||
**Your project**
 | 
			
		||||
 | 
			
		||||
  * Provide an overview of your project (in your own words).
 | 
			
		||||
 | 
			
		||||
  * Provide a breakdown of your project in small specific weekly goals. Think
 | 
			
		||||
    about the potential timeline.
 | 
			
		||||
 | 
			
		||||
  * How will you accomplish this goal? What is your working style?
 | 
			
		||||
 | 
			
		||||
  * Explain what risks or potential problems your project might experience.
 | 
			
		||||
 | 
			
		||||
  * What would you expect as a minimum level of success?
 | 
			
		||||
 | 
			
		||||
  * Do you have a stretch goal?
 | 
			
		||||
 | 
			
		||||
**Other**
 | 
			
		||||
 | 
			
		||||
  * Resume (optional)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Advice on how to apply
 | 
			
		||||
 | 
			
		||||
  * [GSoC Contributor Guide]
 | 
			
		||||
 | 
			
		||||
  * The Drupal project has a great page on how to write an GSoC application.
 | 
			
		||||
 | 
			
		||||
  * Secrets for GSoC success: [2]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Mentors
 | 
			
		||||
 | 
			
		||||
Each accepted project will have at least one mentor. We will match mentors and
 | 
			
		||||
contributors based on the project and experience level. If possible, we also
 | 
			
		||||
will try to match their time zones.
 | 
			
		||||
 | 
			
		||||
Mentors are expected to stay in frequent contact with the contributor and
 | 
			
		||||
provide guidance such as code reviews, pointers to useful documentation, etc.
 | 
			
		||||
This should generally be a time commitment of several hours per week.
 | 
			
		||||
 | 
			
		||||
Some projects might have more than one mentor, who can serve as a backup. They
 | 
			
		||||
are expected to coordinate with each other and a contributor on a regular basis,
 | 
			
		||||
and keep track of the contributor process. They should be able to take over
 | 
			
		||||
mentoring duty if one of the mentors is unavailable (vacations, sickness,
 | 
			
		||||
emergencies).
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Volunteering to be a mentor
 | 
			
		||||
 | 
			
		||||
If you'd like to volunteer to be a mentor, please read the [GSoC Mentor Guide].
 | 
			
		||||
This will give you a better idea of expectations, and where to go for help.
 | 
			
		||||
After that, contact Org Admins (see coreboot contacts section above).
 | 
			
		||||
 | 
			
		||||
The following coreboot developers have volunteered to be GSoC 2022 mentors.
 | 
			
		||||
Please stop by in our community forums and say hi to them and ask them
 | 
			
		||||
questions.
 | 
			
		||||
 | 
			
		||||
  * Tim Wawrzynczak
 | 
			
		||||
  * Raul Rangel
 | 
			
		||||
  * Ron Minnich
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
[community forums]: ../community/forums.md
 | 
			
		||||
[mailing list]: https://mail.coreboot.org/postorius/lists/coreboot.coreboot.org
 | 
			
		||||
[Getting started]: ../getting_started/index.md
 | 
			
		||||
[Tutorial]: ../tutorial/index.md
 | 
			
		||||
[Flashing firmware tutorial]: ../tutorial/flashing_firmware/index.md
 | 
			
		||||
[Coding style]: coding_style.md
 | 
			
		||||
[Code of Conduct]: ../community/code_of_conduct.md
 | 
			
		||||
[Language style]: ../community/language_style.md
 | 
			
		||||
[Project ideas]: project_ideas.md
 | 
			
		||||
[GSoC Timeline]: https://developers.google.com/open-source/gsoc/timeline
 | 
			
		||||
[GSoC Roles and Responsibilities]: https://developers.google.com/open-source/gsoc/help/responsibilities
 | 
			
		||||
[GSoC Contributor Guide]: https://google.github.io/gsocguides/student
 | 
			
		||||
[GSoC Contributor Advice]: https://developers.google.com/open-source/gsoc/help/student-advice
 | 
			
		||||
[GSoC Mentor Guide]: https://google.github.io/gsocguides/mentor
 | 
			
		||||
[GSoC FAQ]: https://developers.google.com/open-source/gsoc/faq
 | 
			
		||||
[GSoC Rules]: https://summerofcode.withgoogle.com/rules
 | 
			
		||||
[GSoC Glossary]: https://developers.google.com/open-source/gsoc/resources/glossary
 | 
			
		||||
[GSoC Organization Admin Tips]: https://developers.google.com/open-source/gsoc/help/oa-tips
 | 
			
		||||
@@ -1,7 +0,0 @@
 | 
			
		||||
# Contributing
 | 
			
		||||
 | 
			
		||||
* [Coding Style](coding_style.md)
 | 
			
		||||
* [Gerrit Guidelines](gerrit_guidelines.md)
 | 
			
		||||
* [Project Ideas](project_ideas.md)
 | 
			
		||||
* [Documentation Ideas](documentation_ideas.md)
 | 
			
		||||
* [Google Summer of Code](gsoc.md)
 | 
			
		||||
@@ -20,24 +20,6 @@ doubt if you can bring yourself up to speed in a required time frame
 | 
			
		||||
with the projects. We can then try together to figure out if you're a
 | 
			
		||||
good match for a project, even when requirements might not all be met.
 | 
			
		||||
 | 
			
		||||
## Small projects
 | 
			
		||||
 | 
			
		||||
This is a collection of tasks which don't require deep knowledge on
 | 
			
		||||
coreboot itself. If you are a beginner and want to get familiar with the
 | 
			
		||||
the project and the code base, or if you just want to get your hands
 | 
			
		||||
dirty with some small tasks, then these are for you.
 | 
			
		||||
 | 
			
		||||
  * Resolve static analysis issues reported by [scan-build] and
 | 
			
		||||
    [Coverity scan]. More details on the page for
 | 
			
		||||
    [Coverity scan integration].
 | 
			
		||||
 | 
			
		||||
  * Resolve issues reported by the [linter][Linter issues]
 | 
			
		||||
 | 
			
		||||
[scan-build]: https://coreboot.org/scan-build/
 | 
			
		||||
[Coverity scan]: https://scan.coverity.com/projects/coreboot
 | 
			
		||||
[Coverity scan integration]: ../infrastructure/coverity.md
 | 
			
		||||
[Linter issues]: https://qa.coreboot.org/job/coreboot-untested-files/lastSuccessfulBuild/artifact/lint.txt
 | 
			
		||||
 | 
			
		||||
## Provide toolchain binaries
 | 
			
		||||
Our crossgcc subproject provides a uniform compiler environment for
 | 
			
		||||
working on coreboot and related projects. Sadly, building it takes hours,
 | 
			
		||||
@@ -63,6 +45,7 @@ non-Linux builds or Docker for different Linux distributions.
 | 
			
		||||
* hardware requirements: Nothing special
 | 
			
		||||
 | 
			
		||||
### Mentors
 | 
			
		||||
* Patrick Georgi <patrick@georgi.software>
 | 
			
		||||
 | 
			
		||||
## Support Power9/Power8 in coreboot
 | 
			
		||||
There are some basic PPC64 stubs in coreboot, and there's open hardware
 | 
			
		||||
@@ -86,8 +69,8 @@ across architectures.
 | 
			
		||||
## Port payloads to ARM, AArch64 or RISC-V
 | 
			
		||||
While we have a rather big set of payloads for x86 based platforms, all other
 | 
			
		||||
architectures are rather limited. Improve the situation by porting a payload
 | 
			
		||||
to one of the platforms, for example GRUB2, U-Boot (the UI part), edk2,
 | 
			
		||||
FILO, or Linux-as-Payload.
 | 
			
		||||
to one of the platforms, for example GRUB2, U-Boot (the UI part), Tianocore,
 | 
			
		||||
yabits, FILO, or Linux-as-Payload.
 | 
			
		||||
 | 
			
		||||
Since this is a bit of a catch-all idea, an application to GSoC should pick a
 | 
			
		||||
combination of payload and architecture to support.
 | 
			
		||||
@@ -129,6 +112,7 @@ their bug reports.
 | 
			
		||||
  going on from the resulting logs.
 | 
			
		||||
 | 
			
		||||
### Mentors
 | 
			
		||||
* Patrick Georgi <patrick@georgi.software>
 | 
			
		||||
 | 
			
		||||
## Extend Ghidra to support analysis of firmware images
 | 
			
		||||
[Ghidra](https://ghidra-sre.org) is a recently released cross-platform
 | 
			
		||||
 
 | 
			
		||||
@@ -386,7 +386,7 @@ want to submit all commits in the currently checked-out branch for
 | 
			
		||||
review on gerrit:
 | 
			
		||||
{ \small
 | 
			
		||||
\begin{verbatim}
 | 
			
		||||
$ git config remote.origin.push HEAD:refs/for/main
 | 
			
		||||
$ git config remote.origin.push HEAD:refs/for/master
 | 
			
		||||
\end{verbatim}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -399,10 +399,10 @@ $ make gitconfig
 | 
			
		||||
 | 
			
		||||
\subsection{Work flow}
 | 
			
		||||
 | 
			
		||||
It is recommended that you make a new branch when you start to work, not pushing changes to main.
 | 
			
		||||
It is recommended that you make a new branch when you start to work, not pushing changes to master.
 | 
			
		||||
{ \small
 | 
			
		||||
\begin{verbatim}
 | 
			
		||||
$ git checkout main -b mybranch
 | 
			
		||||
$ git checkout master -b mybranch
 | 
			
		||||
\end{verbatim}
 | 
			
		||||
}
 | 
			
		||||
After you have done your changes, run:
 | 
			
		||||
@@ -452,7 +452,7 @@ make a new local commit that fixes the issues reported by the
 | 
			
		||||
reviewers, then rebase the change by preserving the same Change-ID. We
 | 
			
		||||
recommend you to use the git rebase command in interactive mode,
 | 
			
		||||
 | 
			
		||||
Once your patch gets a +2 comment, your patch can be merged (cherry-pick, actually) to origin/main.
 | 
			
		||||
Once your patch gets a +2 comment, your patch can be merged (cherry-pick, actually) to origin/master.
 | 
			
		||||
 | 
			
		||||
%
 | 
			
		||||
% Working with Gerrit
 | 
			
		||||
@@ -474,9 +474,9 @@ click \url{https://review.coreboot.org}
 | 
			
		||||
|Search for status:open                                     |
 | 
			
		||||
+-----------------------------------------------------------+
 | 
			
		||||
|Subject      Status   Owner  Project  Branch Updated CR V  |
 | 
			
		||||
|cpu: Rename..      Alexandru coreboot main   1:20 PM +1    |
 | 
			
		||||
|cpu: Only a..      Alexandru coreboot main   1:17 PM    X  |
 | 
			
		||||
|arch/x86: D..      Alexandru coreboot main   1:09 PM       |
 | 
			
		||||
|cpu: Rename..      Alexandru coreboot master 1:20 PM +1    |
 | 
			
		||||
|cpu: Only a..      Alexandru coreboot master 1:17 PM    X  |
 | 
			
		||||
|arch/x86: D..      Alexandru coreboot master 1:09 PM       |
 | 
			
		||||
|                                                           |
 | 
			
		||||
|                                                  Next ->  |
 | 
			
		||||
|Press '?' to view keyboard shortcuts | Powered by Gerrit   |
 | 
			
		||||
@@ -637,7 +637,7 @@ Gerrit makes reviews easier by showing changes in a side-by-side
 | 
			
		||||
display, and allowing inline comments to be added by any reviewer.
 | 
			
		||||
 | 
			
		||||
Gerrit simplifies Git based project maintainership by permitting any
 | 
			
		||||
authorized user to submit changes to the upstream Git repository, rather
 | 
			
		||||
authorized user to submit changes to the master Git repository, rather
 | 
			
		||||
than requiring all approved changes to be merged in by hand by the
 | 
			
		||||
project maintainer. This functionality enables a more centralized
 | 
			
		||||
usage of Git.
 | 
			
		||||
 
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 195 KiB  | 
@@ -1,40 +0,0 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 | 
			
		||||
<svg
 | 
			
		||||
   width="250"
 | 
			
		||||
   height="200"
 | 
			
		||||
   viewBox="0 0 250.00001 200"
 | 
			
		||||
   version="1.1"
 | 
			
		||||
   id="svg4"
 | 
			
		||||
   sodipodi:docname="coreboot_logo.svg"
 | 
			
		||||
   inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
 | 
			
		||||
   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
 | 
			
		||||
   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
 | 
			
		||||
   xmlns="http://www.w3.org/2000/svg"
 | 
			
		||||
   xmlns:svg="http://www.w3.org/2000/svg">
 | 
			
		||||
  <defs
 | 
			
		||||
     id="defs8" />
 | 
			
		||||
  <sodipodi:namedview
 | 
			
		||||
     id="namedview6"
 | 
			
		||||
     pagecolor="#ffffff"
 | 
			
		||||
     bordercolor="#666666"
 | 
			
		||||
     borderopacity="1.0"
 | 
			
		||||
     inkscape:pageshadow="2"
 | 
			
		||||
     inkscape:pageopacity="0.0"
 | 
			
		||||
     inkscape:pagecheckerboard="true"
 | 
			
		||||
     showgrid="false"
 | 
			
		||||
     width="250px"
 | 
			
		||||
     height="200px"
 | 
			
		||||
     inkscape:zoom="1.464382"
 | 
			
		||||
     inkscape:cx="-62.825135"
 | 
			
		||||
     inkscape:cy="121.21154"
 | 
			
		||||
     inkscape:window-width="1519"
 | 
			
		||||
     inkscape:window-height="920"
 | 
			
		||||
     inkscape:window-x="209"
 | 
			
		||||
     inkscape:window-y="73"
 | 
			
		||||
     inkscape:window-maximized="0"
 | 
			
		||||
     inkscape:current-layer="svg4" />
 | 
			
		||||
  <path
 | 
			
		||||
     id="path61"
 | 
			
		||||
     d="m 80.661062,0.13961031 c 0,0 8.15178,6.60943399 23.247088,18.58954069 1.05796,0.880056 1.33191,1.294888 1.12373,1.641232 -0.31985,0.543174 -1.75582,-0.08872 -1.75582,-0.08872 -11.664048,-4.438128 -24.834388,-6.953649 -33.759848,-6.376408 -2.95434,0.189259 -3.90102,0.665956 -4.321175,1.508159 -0.19683,0.395552 -0.226549,1.460608 0.765169,2.779745 3.900636,5.157312 13.294036,15.263399 28.921176,24.855056 16.060528,9.852834 44.423978,23.830157 69.508388,34.990773 11.22686,4.992657 19.31714,11.666735 16.74132,19.3658 -2.87674,8.579122 -13.98099,9.747592 -22.85157,6.198982 C 151.07253,100.72135 144.33596,91.685794 133.39489,79.565635 114.43868,58.561649 105.44571,50.180157 73.988942,56.584689 58.21986,59.796417 43.339503,72.701794 31.438885,86.322779 23.497569,96.338376 19.677814,104.66948 18.527118,114.71536 c 0,0 -2.168556,-3.98066 -0.01478,-14.17227 3.764359,-17.803609 -4.428375,-25.450182 -4.428375,-25.450182 -41.49508,58.844472 17.526881,112.045702 63.024789,61.095232 0,0 -14.887006,33.05468 -13.647358,43.34849 -6.349646,2.08185 -9.170023,7.92269 0.332682,14.9707 10.382756,7.69907 35.885136,7.03371 56.001494,-1.61165 37.55849,-16.14193 60.9693,-46.22207 72.57279,-65.32401 2.71019,-4.46651 5.57763,-6.63885 7.56296,-7.34857 3.01112,-1.08635 23.72764,0.16234 33.42717,-5.3451 1.34942,0.65673 3.06678,1.00763 5.33032,0.8354 C 245.71787,115.17969 250,106.76795 250,106.76795 c 0,0 -8.87062,-16.922111 -30.12254,-29.55327 C 199.86141,65.319739 194.02789,69.457093 176.05582,55.128281 147.99814,32.763519 114.02178,7.3201044 80.661062,0.13961031 Z M 102.26692,70.594304 c 13.26505,-0.0029 23.37736,4.660953 25.1286,13.170519 2.97326,14.478329 -27.955978,50.936567 -25.92334,51.521377 0.19683,0.0549 0.6391,-0.16704 1.28637,-0.60991 10.15186,-13.28789 29.37687,-33.69148 36.58765,-32.90227 12.92072,1.41187 17.38079,18.53779 17.38079,18.53779 l -43.07864,38.86837 c 8.89707,2.41684 18.6275,3.29074 28.363,2.54317 -19.24009,13.70237 -40.10745,17.52487 -53.007358,11.85088 20.405928,-14.79629 57.956938,-51.80601 57.956938,-51.80601 0,0 -6.24718,-15.74184 -17.51757,-6.10287 -10.90133,9.32102 -20.97474,20.96607 -24.95486,24.68502 -2.46226,2.29571 -6.636458,6.63454 -9.104398,4.76844 -3.00355,-2.26922 5.935248,-22.37963 12.771298,-39.0458 9.32669,-22.730028 -1.40413,-29.828637 -13.965258,-29.198404 -11.25525,0.565885 -26.629956,7.384774 -37.644841,14.120509 -3.118992,1.909626 -5.249017,3.0833 -6.036334,2.354652 -0.688903,-0.641589 0.03892,-1.850245 2.084808,-3.578182 C 68.148932,76.592284 87.233202,70.597548 102.26692,70.594304 Z"
 | 
			
		||||
     style="stroke-width:1.89259;fill:#ffffff" />
 | 
			
		||||
</svg>
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 3.6 KiB  | 
@@ -17,25 +17,6 @@ running on the Embedded Controller (EC) – a small microcontroller which provid
 | 
			
		||||
functions like battery management, keyboard support, and sensor interfacing –
 | 
			
		||||
is open source as well.
 | 
			
		||||
 | 
			
		||||
### Nitrokey
 | 
			
		||||
 | 
			
		||||
[Nitrokey](https://nitrokey.com) is a german IT security hardware vendor which
 | 
			
		||||
offers a range of laptops, PCs, HSMs, and networking devices with coreboot and
 | 
			
		||||
[Dasharo](https://dasharo.com/). The devices come with neutralized Intel
 | 
			
		||||
Management Engine (ME) and with pre-installed [Heads](http://osresearch.net) or
 | 
			
		||||
EDK2 payload providing measured boot and verified boot protection. For
 | 
			
		||||
additional security the systems can be physically sealed and pictures of those
 | 
			
		||||
sealings are sent via encrypted email.
 | 
			
		||||
 | 
			
		||||
### NovaCustom laptops
 | 
			
		||||
 | 
			
		||||
[NovaCustom](https://configurelaptop.eu/) sells configurable laptops with
 | 
			
		||||
[Dasharo](https://dasharo.com/) coreboot based firmware on board, maintained by
 | 
			
		||||
[3mdeb](https://3mdeb.com/). NovaCustom offers full GNU/Linux and Microsoft
 | 
			
		||||
Windows compatibility. NovaCustom ensures security updates via fwupd for 5 years
 | 
			
		||||
and the firmware is equipped with important security features such as measured
 | 
			
		||||
boot, verified boot, TPM integration and UEFI Secure Boot.
 | 
			
		||||
 | 
			
		||||
### PC Engines APUs
 | 
			
		||||
 | 
			
		||||
[PC Engines](https://pcengines.ch) designs and sells embedded PC hardware that
 | 
			
		||||
@@ -43,15 +24,12 @@ ships with coreboot and support upstream maintenance for the devices through a
 | 
			
		||||
third party, [3mdeb](https://3mdeb.com). They provide current and tested
 | 
			
		||||
firmware binaries on [GitHub](https://pcengines.github.io).
 | 
			
		||||
 | 
			
		||||
### Protectli
 | 
			
		||||
### System76
 | 
			
		||||
 | 
			
		||||
[Protectli](https://protectli.com) is dedicated to providing reliable,
 | 
			
		||||
cost-effective, and secure computer equipment with coreboot-based firmware
 | 
			
		||||
tailored for their hardware. It comes with the [Dasharo](#dasharo)
 | 
			
		||||
firmware, maintained by [3mdeb](https://3mdeb.com/). Protectli hardware has
 | 
			
		||||
verified support for many popular operating systems, such as Linux distributions,
 | 
			
		||||
FreeBSD, and Windows. Support includes Debian, Ubuntu, OPNsense, pfSense,
 | 
			
		||||
ProxMox VE, VMware ESXi, Windows 10 and 11, and many more.
 | 
			
		||||
[System76](https://system76.com/) manufactures Linux laptops, desktops, and
 | 
			
		||||
servers. Some models are sold with [System76 Open
 | 
			
		||||
Firmware](https://github.com/system76/firmware-open), an open source
 | 
			
		||||
distribution of coreboot, EDK2, and System76 firmware applications.
 | 
			
		||||
 | 
			
		||||
### Purism
 | 
			
		||||
 | 
			
		||||
@@ -60,31 +38,26 @@ security; part of that effort is to minimize the amount of proprietary and/or
 | 
			
		||||
binary code. Their laptops ship with a blob-free OS and coreboot firmware
 | 
			
		||||
with a neutralized Intel Management Engine (ME) and SeaBIOS as the payload.
 | 
			
		||||
 | 
			
		||||
### Star Labs
 | 
			
		||||
 | 
			
		||||
[Star Labs](https://starlabs.systems/) offers a range of laptops designed and
 | 
			
		||||
built specifically for Linux that are available with coreboot firmware. They
 | 
			
		||||
use edk2 as the payload and include an NVRAM option to disable the Intel
 | 
			
		||||
Management Engine.
 | 
			
		||||
 | 
			
		||||
### System76
 | 
			
		||||
 | 
			
		||||
[System76](https://system76.com/) manufactures Linux laptops, desktops, and
 | 
			
		||||
servers. Some models are sold with [System76 Open
 | 
			
		||||
Firmware](https://github.com/system76/firmware-open), an open source
 | 
			
		||||
distribution of coreboot, edk2, and System76 firmware applications.
 | 
			
		||||
 | 
			
		||||
## After-market firmware
 | 
			
		||||
 | 
			
		||||
### Dasharo
 | 
			
		||||
### Libreboot
 | 
			
		||||
 | 
			
		||||
[Dasharo](https://dasharo.com/) is an open-source based firmware distribution
 | 
			
		||||
focusing on clean and simple code, long-term maintenance, transparent
 | 
			
		||||
validation, privacy-respecting implementation, liberty for the owners, and
 | 
			
		||||
trustworthiness for all.
 | 
			
		||||
[Libreboot](https://libreboot.org) is a downstream coreboot distribution that
 | 
			
		||||
provides ready-made firmware images for supported devices: those which can be
 | 
			
		||||
built entirely from source code. Their copy of the coreboot repository is
 | 
			
		||||
therefore stripped of all devices that require binary components to boot.
 | 
			
		||||
 | 
			
		||||
Contributions are welcome,
 | 
			
		||||
[this document](https://docs.dasharo.com/ways-you-can-help-us/).
 | 
			
		||||
### MrChromebox
 | 
			
		||||
 | 
			
		||||
[MrChromebox](https://mrchromebox.tech/) provides upstream coreboot firmware
 | 
			
		||||
images for the vast majority of x86-based Chromebooks and Chromeboxes, using
 | 
			
		||||
Tianocore as the payload to provide a modern UEFI bootloader. Why replace
 | 
			
		||||
coreboot with coreboot? Mr Chromebox's images are built using upstream
 | 
			
		||||
coreboot (vs Google's older, static tree/branch), include many features and
 | 
			
		||||
fixes not found in the stock firmware, and offer much broader OS compatibility
 | 
			
		||||
(i.e., they run Windows as well as Linux). They also offer updated CPU
 | 
			
		||||
microcode, as well as firmware updates for the device's embedded controller
 | 
			
		||||
(EC). This firmware "takes the training wheels off" your ChromeOS device :)
 | 
			
		||||
 | 
			
		||||
### Heads
 | 
			
		||||
 | 
			
		||||
@@ -99,25 +72,6 @@ Heads is not just another Linux distribution – it combines physical hardening
 | 
			
		||||
of specific hardware platforms and flash security features with custom coreboot
 | 
			
		||||
firmware and a Linux boot loader in ROM.
 | 
			
		||||
 | 
			
		||||
### Libreboot
 | 
			
		||||
 | 
			
		||||
[Libreboot](https://libreboot.org) is a downstream coreboot distribution that
 | 
			
		||||
provides ready-made firmware images for supported devices: those which can be
 | 
			
		||||
built entirely from source code. Their copy of the coreboot repository is
 | 
			
		||||
therefore stripped of all devices that require binary components to boot.
 | 
			
		||||
 | 
			
		||||
### MrChromebox
 | 
			
		||||
 | 
			
		||||
[MrChromebox](https://mrchromebox.tech/) provides upstream coreboot firmware
 | 
			
		||||
images for the vast majority of x86-based Chromebooks and Chromeboxes, using
 | 
			
		||||
edk2 as the payload to provide a modern UEFI bootloader. Why replace
 | 
			
		||||
coreboot with coreboot? Mr Chromebox's images are built using upstream
 | 
			
		||||
coreboot (vs Google's older, static tree/branch), include many features and
 | 
			
		||||
fixes not found in the stock firmware, and offer much broader OS compatibility
 | 
			
		||||
(i.e., they run Windows as well as Linux). They also offer updated CPU
 | 
			
		||||
microcode, as well as firmware updates for the device's embedded controller
 | 
			
		||||
(EC). This firmware "takes the training wheels off" your ChromeOS device :)
 | 
			
		||||
 | 
			
		||||
### Skulls
 | 
			
		||||
 | 
			
		||||
[Skulls](https://github.com/merge/skulls) provides firmware images for
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										319
									
								
								Documentation/doxygen/Doxyfile.coreboot_platform
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,319 @@
 | 
			
		||||
# Doxyfile 1.8.11
 | 
			
		||||
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
# Project related configuration options
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
DOXYFILE_ENCODING      = UTF-8
 | 
			
		||||
PROJECT_NAME           = "coreboot for $(DOXYGEN_PLATFORM)"
 | 
			
		||||
PROJECT_NUMBER         =
 | 
			
		||||
PROJECT_BRIEF          = "coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers."
 | 
			
		||||
PROJECT_LOGO           = Documentation/coreboot_logo.png
 | 
			
		||||
OUTPUT_DIRECTORY       = $(DOXYGEN_OUTPUT_DIR)
 | 
			
		||||
CREATE_SUBDIRS         = YES
 | 
			
		||||
ALLOW_UNICODE_NAMES    = NO
 | 
			
		||||
OUTPUT_LANGUAGE        = English
 | 
			
		||||
BRIEF_MEMBER_DESC      = YES
 | 
			
		||||
REPEAT_BRIEF           = YES
 | 
			
		||||
ABBREVIATE_BRIEF       =
 | 
			
		||||
ALWAYS_DETAILED_SEC    = YES
 | 
			
		||||
INLINE_INHERITED_MEMB  = NO
 | 
			
		||||
FULL_PATH_NAMES        = YES
 | 
			
		||||
STRIP_FROM_PATH        =
 | 
			
		||||
STRIP_FROM_INC_PATH    =
 | 
			
		||||
SHORT_NAMES            = NO
 | 
			
		||||
JAVADOC_AUTOBRIEF      = YES
 | 
			
		||||
QT_AUTOBRIEF           = NO
 | 
			
		||||
MULTILINE_CPP_IS_BRIEF = NO
 | 
			
		||||
INHERIT_DOCS           = YES
 | 
			
		||||
SEPARATE_MEMBER_PAGES  = NO
 | 
			
		||||
TAB_SIZE               = 8
 | 
			
		||||
ALIASES                =
 | 
			
		||||
TCL_SUBST              =
 | 
			
		||||
OPTIMIZE_OUTPUT_FOR_C  = YES
 | 
			
		||||
OPTIMIZE_OUTPUT_JAVA   = NO
 | 
			
		||||
OPTIMIZE_FOR_FORTRAN   = NO
 | 
			
		||||
OPTIMIZE_OUTPUT_VHDL   = NO
 | 
			
		||||
EXTENSION_MAPPING      =
 | 
			
		||||
MARKDOWN_SUPPORT       = YES
 | 
			
		||||
AUTOLINK_SUPPORT       = YES
 | 
			
		||||
BUILTIN_STL_SUPPORT    = NO
 | 
			
		||||
CPP_CLI_SUPPORT        = NO
 | 
			
		||||
SIP_SUPPORT            = NO
 | 
			
		||||
IDL_PROPERTY_SUPPORT   = YES
 | 
			
		||||
DISTRIBUTE_GROUP_DOC   = NO
 | 
			
		||||
GROUP_NESTED_COMPOUNDS = NO
 | 
			
		||||
SUBGROUPING            = YES
 | 
			
		||||
INLINE_GROUPED_CLASSES = NO
 | 
			
		||||
INLINE_SIMPLE_STRUCTS  = NO
 | 
			
		||||
TYPEDEF_HIDES_STRUCT   = NO
 | 
			
		||||
LOOKUP_CACHE_SIZE      = 0
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
# Build related configuration options
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
EXTRACT_ALL            = YES
 | 
			
		||||
EXTRACT_PRIVATE        = NO
 | 
			
		||||
EXTRACT_PACKAGE        = NO
 | 
			
		||||
EXTRACT_STATIC         = YES
 | 
			
		||||
EXTRACT_LOCAL_CLASSES  = YES
 | 
			
		||||
EXTRACT_LOCAL_METHODS  = NO
 | 
			
		||||
EXTRACT_ANON_NSPACES   = NO
 | 
			
		||||
HIDE_UNDOC_MEMBERS     = NO
 | 
			
		||||
HIDE_UNDOC_CLASSES     = NO
 | 
			
		||||
HIDE_FRIEND_COMPOUNDS  = NO
 | 
			
		||||
HIDE_IN_BODY_DOCS      = NO
 | 
			
		||||
INTERNAL_DOCS          = NO
 | 
			
		||||
CASE_SENSE_NAMES       = YES
 | 
			
		||||
HIDE_SCOPE_NAMES       = NO
 | 
			
		||||
HIDE_COMPOUND_REFERENCE= NO
 | 
			
		||||
SHOW_INCLUDE_FILES     = YES
 | 
			
		||||
SHOW_GROUPED_MEMB_INC  = NO
 | 
			
		||||
FORCE_LOCAL_INCLUDES   = NO
 | 
			
		||||
INLINE_INFO            = YES
 | 
			
		||||
SORT_MEMBER_DOCS       = YES
 | 
			
		||||
SORT_BRIEF_DOCS        = NO
 | 
			
		||||
SORT_MEMBERS_CTORS_1ST = NO
 | 
			
		||||
SORT_GROUP_NAMES       = NO
 | 
			
		||||
SORT_BY_SCOPE_NAME     = NO
 | 
			
		||||
STRICT_PROTO_MATCHING  = NO
 | 
			
		||||
GENERATE_TODOLIST      = YES
 | 
			
		||||
GENERATE_TESTLIST      = YES
 | 
			
		||||
GENERATE_BUGLIST       = YES
 | 
			
		||||
GENERATE_DEPRECATEDLIST= YES
 | 
			
		||||
ENABLED_SECTIONS       =
 | 
			
		||||
MAX_INITIALIZER_LINES  = 30
 | 
			
		||||
SHOW_USED_FILES        = YES
 | 
			
		||||
SHOW_FILES             = YES
 | 
			
		||||
SHOW_NAMESPACES        = YES
 | 
			
		||||
FILE_VERSION_FILTER    =
 | 
			
		||||
LAYOUT_FILE            =
 | 
			
		||||
CITE_BIB_FILES         =
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
# Configuration options related to warning and progress messages
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
QUIET                  = YES
 | 
			
		||||
WARNINGS               = YES
 | 
			
		||||
WARN_IF_UNDOCUMENTED   = YES
 | 
			
		||||
WARN_IF_DOC_ERROR      = YES
 | 
			
		||||
WARN_NO_PARAMDOC       = YES
 | 
			
		||||
WARN_AS_ERROR          = NO
 | 
			
		||||
WARN_FORMAT            = "$file:$line: $text"
 | 
			
		||||
WARN_LOGFILE           =
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
# Configuration options related to the input files
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
INPUT                  = $(DOXYFILES)
 | 
			
		||||
INPUT_ENCODING         = UTF-8
 | 
			
		||||
FILE_PATTERNS          =
 | 
			
		||||
RECURSIVE              = NO
 | 
			
		||||
EXCLUDE                =
 | 
			
		||||
EXCLUDE_SYMLINKS       = NO
 | 
			
		||||
EXCLUDE_PATTERNS       =
 | 
			
		||||
EXCLUDE_SYMBOLS        =
 | 
			
		||||
EXAMPLE_PATH           =
 | 
			
		||||
EXAMPLE_PATTERNS       =
 | 
			
		||||
EXAMPLE_RECURSIVE      = NO
 | 
			
		||||
IMAGE_PATH             =
 | 
			
		||||
INPUT_FILTER           =
 | 
			
		||||
FILTER_PATTERNS        =
 | 
			
		||||
FILTER_SOURCE_FILES    = NO
 | 
			
		||||
FILTER_SOURCE_PATTERNS =
 | 
			
		||||
USE_MDFILE_AS_MAINPAGE =
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
# Configuration options related to source browsing
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
SOURCE_BROWSER         = YES
 | 
			
		||||
INLINE_SOURCES         = NO
 | 
			
		||||
STRIP_CODE_COMMENTS    = NO
 | 
			
		||||
REFERENCED_BY_RELATION = YES
 | 
			
		||||
REFERENCES_RELATION    = YES
 | 
			
		||||
REFERENCES_LINK_SOURCE = YES
 | 
			
		||||
SOURCE_TOOLTIPS        = YES
 | 
			
		||||
USE_HTAGS              = NO
 | 
			
		||||
VERBATIM_HEADERS       = YES
 | 
			
		||||
CLANG_ASSISTED_PARSING = NO
 | 
			
		||||
CLANG_OPTIONS          =
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
# Configuration options related to the alphabetical class index
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
ALPHABETICAL_INDEX     = YES
 | 
			
		||||
COLS_IN_ALPHA_INDEX    = 5
 | 
			
		||||
IGNORE_PREFIX          =
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
# Configuration options related to the HTML output
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
GENERATE_HTML          = YES
 | 
			
		||||
HTML_OUTPUT            = html
 | 
			
		||||
HTML_FILE_EXTENSION    = .html
 | 
			
		||||
HTML_HEADER            =
 | 
			
		||||
HTML_FOOTER            =
 | 
			
		||||
HTML_STYLESHEET        =
 | 
			
		||||
HTML_EXTRA_STYLESHEET  =
 | 
			
		||||
HTML_EXTRA_FILES       =
 | 
			
		||||
HTML_COLORSTYLE_HUE    = 220
 | 
			
		||||
HTML_COLORSTYLE_SAT    = 100
 | 
			
		||||
HTML_COLORSTYLE_GAMMA  = 80
 | 
			
		||||
HTML_TIMESTAMP         = NO
 | 
			
		||||
HTML_DYNAMIC_SECTIONS  = NO
 | 
			
		||||
HTML_INDEX_NUM_ENTRIES = 100
 | 
			
		||||
GENERATE_DOCSET        = NO
 | 
			
		||||
DOCSET_FEEDNAME        = "Doxygen documentation"
 | 
			
		||||
DOCSET_BUNDLE_ID       = org.doxygen.Project
 | 
			
		||||
DOCSET_PUBLISHER_ID    = org.doxygen.Publisher
 | 
			
		||||
DOCSET_PUBLISHER_NAME  = Publisher
 | 
			
		||||
GENERATE_HTMLHELP      = NO
 | 
			
		||||
CHM_FILE               =
 | 
			
		||||
HHC_LOCATION           =
 | 
			
		||||
GENERATE_CHI           = NO
 | 
			
		||||
CHM_INDEX_ENCODING     =
 | 
			
		||||
BINARY_TOC             = NO
 | 
			
		||||
TOC_EXPAND             = NO
 | 
			
		||||
GENERATE_QHP           = NO
 | 
			
		||||
QCH_FILE               =
 | 
			
		||||
QHP_NAMESPACE          = org.doxygen.Project
 | 
			
		||||
QHP_VIRTUAL_FOLDER     = doc
 | 
			
		||||
QHP_CUST_FILTER_NAME   =
 | 
			
		||||
QHP_CUST_FILTER_ATTRS  =
 | 
			
		||||
QHP_SECT_FILTER_ATTRS  =
 | 
			
		||||
QHG_LOCATION           =
 | 
			
		||||
GENERATE_ECLIPSEHELP   = NO
 | 
			
		||||
ECLIPSE_DOC_ID         = org.doxygen.Project
 | 
			
		||||
DISABLE_INDEX          = NO
 | 
			
		||||
GENERATE_TREEVIEW      = YES
 | 
			
		||||
ENUM_VALUES_PER_LINE   = 4
 | 
			
		||||
TREEVIEW_WIDTH         = 250
 | 
			
		||||
EXT_LINKS_IN_WINDOW    = NO
 | 
			
		||||
FORMULA_FONTSIZE       = 10
 | 
			
		||||
FORMULA_TRANSPARENT    = YES
 | 
			
		||||
USE_MATHJAX            = NO
 | 
			
		||||
MATHJAX_FORMAT         = HTML-CSS
 | 
			
		||||
MATHJAX_RELPATH        = http://cdn.mathjax.org/mathjax/latest
 | 
			
		||||
MATHJAX_EXTENSIONS     =
 | 
			
		||||
MATHJAX_CODEFILE       =
 | 
			
		||||
SEARCHENGINE           = YES
 | 
			
		||||
SERVER_BASED_SEARCH    = NO
 | 
			
		||||
EXTERNAL_SEARCH        = NO
 | 
			
		||||
SEARCHENGINE_URL       =
 | 
			
		||||
SEARCHDATA_FILE        = searchdata.xml
 | 
			
		||||
EXTERNAL_SEARCH_ID     =
 | 
			
		||||
EXTRA_SEARCH_MAPPINGS  =
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
# Configuration options related to the LaTeX output
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
GENERATE_LATEX         = NO
 | 
			
		||||
LATEX_OUTPUT           = latex
 | 
			
		||||
LATEX_CMD_NAME         = latex
 | 
			
		||||
MAKEINDEX_CMD_NAME     = makeindex
 | 
			
		||||
COMPACT_LATEX          = NO
 | 
			
		||||
PAPER_TYPE             = a4wide
 | 
			
		||||
EXTRA_PACKAGES         =
 | 
			
		||||
LATEX_HEADER           =
 | 
			
		||||
LATEX_FOOTER           =
 | 
			
		||||
LATEX_EXTRA_STYLESHEET =
 | 
			
		||||
LATEX_EXTRA_FILES      =
 | 
			
		||||
PDF_HYPERLINKS         = NO
 | 
			
		||||
USE_PDFLATEX           = NO
 | 
			
		||||
LATEX_BATCHMODE        = NO
 | 
			
		||||
LATEX_HIDE_INDICES     = NO
 | 
			
		||||
LATEX_SOURCE_CODE      = NO
 | 
			
		||||
LATEX_BIB_STYLE        = plain
 | 
			
		||||
LATEX_TIMESTAMP        = NO
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
# Configuration options related to the RTF output
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
GENERATE_RTF           = NO
 | 
			
		||||
RTF_OUTPUT             = rtf
 | 
			
		||||
COMPACT_RTF            = NO
 | 
			
		||||
RTF_HYPERLINKS         = NO
 | 
			
		||||
RTF_STYLESHEET_FILE    =
 | 
			
		||||
RTF_EXTENSIONS_FILE    =
 | 
			
		||||
RTF_SOURCE_CODE        = NO
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
# Configuration options related to the man page output
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
GENERATE_MAN           = NO
 | 
			
		||||
MAN_OUTPUT             = man
 | 
			
		||||
MAN_EXTENSION          = .3
 | 
			
		||||
MAN_SUBDIR             =
 | 
			
		||||
MAN_LINKS              = NO
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
# Configuration options related to the XML output
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
GENERATE_XML           = NO
 | 
			
		||||
XML_OUTPUT             = xml
 | 
			
		||||
XML_PROGRAMLISTING     = YES
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
# Configuration options related to the DOCBOOK output
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
GENERATE_DOCBOOK       = NO
 | 
			
		||||
DOCBOOK_OUTPUT         = docbook
 | 
			
		||||
DOCBOOK_PROGRAMLISTING = NO
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
# Configuration options for the AutoGen Definitions output
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
GENERATE_AUTOGEN_DEF   = NO
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
# Configuration options related to the Perl module output
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
GENERATE_PERLMOD       = NO
 | 
			
		||||
PERLMOD_LATEX          = NO
 | 
			
		||||
PERLMOD_PRETTY         = YES
 | 
			
		||||
PERLMOD_MAKEVAR_PREFIX =
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
# Configuration options related to the preprocessor
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
ENABLE_PREPROCESSING   = YES
 | 
			
		||||
MACRO_EXPANSION        = YES
 | 
			
		||||
EXPAND_ONLY_PREDEF     = YES
 | 
			
		||||
SEARCH_INCLUDES        = YES
 | 
			
		||||
INCLUDE_PATH           =
 | 
			
		||||
INCLUDE_FILE_PATTERNS  =
 | 
			
		||||
PREDEFINED             = __attribute__(x)=
 | 
			
		||||
EXPAND_AS_DEFINED      =
 | 
			
		||||
SKIP_FUNCTION_MACROS   = YES
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
# Configuration options related to external references
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
TAGFILES               =
 | 
			
		||||
GENERATE_TAGFILE       =
 | 
			
		||||
ALLEXTERNALS           = NO
 | 
			
		||||
EXTERNAL_GROUPS        = YES
 | 
			
		||||
EXTERNAL_PAGES         = YES
 | 
			
		||||
PERL_PATH              = /usr/bin/perl
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
# Configuration options related to the dot tool
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
CLASS_DIAGRAMS         = YES
 | 
			
		||||
MSCGEN_PATH            =
 | 
			
		||||
DIA_PATH               =
 | 
			
		||||
HIDE_UNDOC_RELATIONS   = NO
 | 
			
		||||
HAVE_DOT               = NO
 | 
			
		||||
DOT_NUM_THREADS        = 0
 | 
			
		||||
DOT_FONTNAME           = Helvetica
 | 
			
		||||
DOT_FONTSIZE           = 10
 | 
			
		||||
DOT_FONTPATH           =
 | 
			
		||||
CLASS_GRAPH            = YES
 | 
			
		||||
COLLABORATION_GRAPH    = YES
 | 
			
		||||
GROUP_GRAPHS           = YES
 | 
			
		||||
UML_LOOK               = YES
 | 
			
		||||
UML_LIMIT_NUM_FIELDS   = 10
 | 
			
		||||
TEMPLATE_RELATIONS     = NO
 | 
			
		||||
INCLUDE_GRAPH          = YES
 | 
			
		||||
INCLUDED_BY_GRAPH      = YES
 | 
			
		||||
CALL_GRAPH             = YES
 | 
			
		||||
CALLER_GRAPH           = YES
 | 
			
		||||
GRAPHICAL_HIERARCHY    = YES
 | 
			
		||||
DIRECTORY_GRAPH        = YES
 | 
			
		||||
DOT_IMAGE_FORMAT       = png
 | 
			
		||||
INTERACTIVE_SVG        = NO
 | 
			
		||||
DOT_PATH               =
 | 
			
		||||
DOTFILE_DIRS           =
 | 
			
		||||
MSCFILE_DIRS           =
 | 
			
		||||
DIAFILE_DIRS           =
 | 
			
		||||
PLANTUML_JAR_PATH      =
 | 
			
		||||
PLANTUML_INCLUDE_PATH  =
 | 
			
		||||
DOT_GRAPH_MAX_NODES    = 50
 | 
			
		||||
MAX_DOT_GRAPH_DEPTH    = 0
 | 
			
		||||
DOT_TRANSPARENT        = NO
 | 
			
		||||
DOT_MULTI_TARGETS      = YES
 | 
			
		||||
GENERATE_LEGEND        = YES
 | 
			
		||||
DOT_CLEANUP            = YES
 | 
			
		||||
@@ -1,143 +0,0 @@
 | 
			
		||||
# CBFS SMBIOS hooks
 | 
			
		||||
 | 
			
		||||
The document describes the coreboot options how to make CBFS files populate
 | 
			
		||||
platform-unique SMBIOS data.
 | 
			
		||||
 | 
			
		||||
## SMBIOS Serial Number
 | 
			
		||||
 | 
			
		||||
The [DMTF SMBIOS specification] defines a field in the type 1 System
 | 
			
		||||
Information and type 2 Baseboard Information called Serial Number. It
 | 
			
		||||
is a null-terminated string field assumed to be unique per platform. Certain
 | 
			
		||||
mainboard ports have SMBIOS hooks to generate the Serial Numbers from external
 | 
			
		||||
data, e.g. Lenovo Thinkpads (see DRIVER_LENOVO_SERIALS). This driver aims to
 | 
			
		||||
provide an option to populate the Serial Numbers from CBFS for boards that
 | 
			
		||||
can't generate the it from any source.
 | 
			
		||||
 | 
			
		||||
### Usage
 | 
			
		||||
 | 
			
		||||
In the coreboot configuration menu (`make menuconfig`) go to `Generic Drivers`
 | 
			
		||||
and select an option `Serial number in CBFS`. The Kconfig system will enable
 | 
			
		||||
`DRIVERS_GENERIC_CBFS_SERIAL` and the relevant code parts will be compiled into
 | 
			
		||||
coreboot image.
 | 
			
		||||
 | 
			
		||||
After the coreboot build for your board completes, use the cbfstool to include
 | 
			
		||||
the file containing the serial number:
 | 
			
		||||
 | 
			
		||||
```shell
 | 
			
		||||
./build/cbfstool build/coreboot.rom add -n serial_number -t raw -f /path/to/serial_file.txt
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Where `serial_file.txt` is the unterminated string representation of the SMBIOS
 | 
			
		||||
type 1 or type 2 Serial Number, e.g. `5Q4Q7Y1`. If you use vboot with 1 or 2 RW
 | 
			
		||||
partitions you will have to specify the RW regions where the file is going to
 | 
			
		||||
be added too. By default the RW CBFS partitions are truncated, so the files
 | 
			
		||||
would probably not fit, one needs to expand them first.
 | 
			
		||||
 | 
			
		||||
```shell
 | 
			
		||||
./build/cbfstool build/coreboot.rom expand -r FW_MAIN_A
 | 
			
		||||
./build/cbfstool build/coreboot.rom add -n serial_number -t raw \
 | 
			
		||||
	-f /path/to/serial_file.txt -r FW_MAIN_A
 | 
			
		||||
./build/cbfstool build/coreboot.rom truncate -r FW_MAIN_A
 | 
			
		||||
 | 
			
		||||
./build/cbfstool build/coreboot.rom expand -r FW_MAIN_B
 | 
			
		||||
./build/cbfstool build/coreboot.rom add -n serial_number -t raw \
 | 
			
		||||
	-f /path/to/serial_file.txt -r FW_MAIN_B
 | 
			
		||||
./build/cbfstool build/coreboot.rom truncate -r FW_MAIN_B
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
By default cbfstool adds files to COREBOOT region only, so when vboot is
 | 
			
		||||
enabled and the platform is booting from RW partition, the file would not be
 | 
			
		||||
picked up by the driver.
 | 
			
		||||
 | 
			
		||||
One may retrieve the Serial Number from running system (if it exists) using one
 | 
			
		||||
of the following commands:
 | 
			
		||||
 | 
			
		||||
```shell
 | 
			
		||||
# Type 1
 | 
			
		||||
echo -n `sudo dmidecode -s system-serial-number` > serial_file.txt
 | 
			
		||||
# OR Type 2
 | 
			
		||||
echo -n `sudo dmidecode -s baseboard-serial-number` > serial_file.txt
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Ensure the file does not end with whitespaces like LF and/or CR. The above
 | 
			
		||||
commands will not add any whitespaces. The driver automatically terminates the
 | 
			
		||||
Serial Number with the NULL character. If the CBFS file is not present, the
 | 
			
		||||
driver will fall back to the string defined in `MAINBOARD_SERIAL_NUMBER` build
 | 
			
		||||
option.
 | 
			
		||||
 | 
			
		||||
Please note that this driver provides `smbios_mainboard_serial_number` hook
 | 
			
		||||
overriding the default implementation which returns `MAINBOARD_SERIAL_NUMBER`
 | 
			
		||||
build option. If you wish to populate only type 2 Serial Number field your
 | 
			
		||||
board code needs to implement `smbios_system_serial_number`, otherwise the weak
 | 
			
		||||
implementation of `smbios_system_serial_number` will call
 | 
			
		||||
`smbios_mainboard_serial_number` from the `DRIVERS_GENERIC_CBFS_SERIAL`
 | 
			
		||||
implementation overriding it. So selecting the `DRIVERS_GENERIC_CBFS_SERIAL`
 | 
			
		||||
has a side-effect of populating both SMBIOS type 1 and type 2 Serial Numbers
 | 
			
		||||
if the board does not implement its own `smbios_system_serial_number`.
 | 
			
		||||
 | 
			
		||||
There is also SMBIOS type 3 Chassis Information Serial Number, but it is not
 | 
			
		||||
populated by `DRIVERS_GENERIC_CBFS_SERIAL` nor by the default weak
 | 
			
		||||
implementation (returns empty string). If you wish to populate type 3 Serial
 | 
			
		||||
Number, your board code should override the default
 | 
			
		||||
`smbios_chassis_serial_number` weak implementation.
 | 
			
		||||
 | 
			
		||||
## SMBIOS System UUID
 | 
			
		||||
 | 
			
		||||
The [DMTF SMBIOS specification] defines a field in the type 1 System
 | 
			
		||||
Information Structure called System UUID. It is a 16 bytes value compliant with
 | 
			
		||||
[RFC4122] and assumed to be unique per platform. Certain mainboard ports have
 | 
			
		||||
SMBIOS hooks to generate the UUID from external data, e.g. Lenovo Thinkpads
 | 
			
		||||
(see DRIVER_LENOVO_SERIALS). This driver aims to provide an option to populate
 | 
			
		||||
the UUID from CBFS for boards that can't generate the UUID from any source.
 | 
			
		||||
 | 
			
		||||
### Usage
 | 
			
		||||
 | 
			
		||||
In the coreboot configuration menu (`make menuconfig`) go to `Generic Drivers`
 | 
			
		||||
and select an option `System UUID in CBFS`. The Kconfig system will enable
 | 
			
		||||
`DRIVERS_GENERIC_CBFS_UUID` and the relevant code parts will be compiled into
 | 
			
		||||
coreboot image.
 | 
			
		||||
 | 
			
		||||
After the coreboot build for your board completes, use the cbfstool to include
 | 
			
		||||
the file containing the UUID:
 | 
			
		||||
 | 
			
		||||
```shell
 | 
			
		||||
./build/cbfstool build/coreboot.rom add -n system_uuid -t raw -f /path/to/uuid_file.txt
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Where `uuid_file.txt` is the unterminated string representation of the SMBIOS
 | 
			
		||||
type 1 UUID, e.g. `4c4c4544-0051-3410-8051-b5c04f375931`. If you use vboot with
 | 
			
		||||
1 or 2 RW partitions you will have to specify the RW regions where the file is
 | 
			
		||||
going to be added too. By default the RW CBFS partitions are truncated, so the
 | 
			
		||||
files would probably not fit, one needs to expand them first.
 | 
			
		||||
 | 
			
		||||
```shell
 | 
			
		||||
./build/cbfstool build/coreboot.rom expand -r FW_MAIN_A
 | 
			
		||||
./build/cbfstool build/coreboot.rom add -n system_uuid -t raw \
 | 
			
		||||
	-f /path/to/uuid_file.txt -r FW_MAIN_A
 | 
			
		||||
./build/cbfstool build/coreboot.rom truncate -r FW_MAIN_A
 | 
			
		||||
 | 
			
		||||
./build/cbfstool build/coreboot.rom expand -r FW_MAIN_B
 | 
			
		||||
./build/cbfstool build/coreboot.rom add -n system_uuid -t raw \
 | 
			
		||||
	-f /path/to/uuid_file.txt -r FW_MAIN_B
 | 
			
		||||
./build/cbfstool build/coreboot.rom truncate -r FW_MAIN_B
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
By default cbfstool adds files to COREBOOT region only, so when vboot is
 | 
			
		||||
enabled and the platform is booting from RW partition, the file would not be
 | 
			
		||||
picked up by the driver.
 | 
			
		||||
 | 
			
		||||
One may retrieve the UUID from running system (if it exists) using the
 | 
			
		||||
following command:
 | 
			
		||||
 | 
			
		||||
```shell
 | 
			
		||||
echo -n `sudo dmidecode -s system-uuid` > uuid_file.txt
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
The above command ensures the file does not end with whitespaces like LF and/or
 | 
			
		||||
CR. The above command will not add any whitespaces. But the driver will handle
 | 
			
		||||
situations where up to 2 additional bytes like CR and LF will be included in
 | 
			
		||||
the file. Any more than that will make the driver fail to populate UUID in
 | 
			
		||||
SMBIOS.
 | 
			
		||||
 | 
			
		||||
[DMTF SMBIOS specification]: https://www.dmtf.org/standards/smbios
 | 
			
		||||
[RFC4122]: https://www.ietf.org/rfc/rfc4122.txt
 | 
			
		||||
@@ -43,7 +43,7 @@ This policy monitors the temperature of participants and controls fans to spin
 | 
			
		||||
at varying speeds. These speeds are defined by the platform, and will be enabled
 | 
			
		||||
depending on the various temperatures reported by participants.
 | 
			
		||||
 | 
			
		||||
## Note about units
 | 
			
		||||
# Note about units
 | 
			
		||||
 | 
			
		||||
ACPI uses unusual units for specifying various physical measurements. For
 | 
			
		||||
example, temperatures are specified in 10ths of a degree K, and time is measured
 | 
			
		||||
@@ -69,7 +69,7 @@ data was a 0). The following Methods were removed:
 | 
			
		||||
2) There is no more implicit inclusion of _ACn methods for TCPU (these must be
 | 
			
		||||
   specified in the devicetree entries or by calling the DPTF acpigen API).
 | 
			
		||||
 | 
			
		||||
## ACPI Tables
 | 
			
		||||
# ACPI Tables
 | 
			
		||||
 | 
			
		||||
DPTF relies on an assortment of ACPI tables to provide parameters to the DPTF
 | 
			
		||||
application. We will discuss the more important ones here.
 | 
			
		||||
@@ -108,7 +108,7 @@ various informational properties.
 | 
			
		||||
This table describes performance states supported by a participant (typically
 | 
			
		||||
the battery charger).
 | 
			
		||||
 | 
			
		||||
## ACPI Methods
 | 
			
		||||
# ACPI Methods
 | 
			
		||||
 | 
			
		||||
The Active and Passive policies also provide for short Methods to define
 | 
			
		||||
different kinds of temperature thresholds.
 | 
			
		||||
@@ -141,7 +141,7 @@ a "graceful shutdown".
 | 
			
		||||
 | 
			
		||||
These are optional, and are enabled by selecting the Critical Policy.
 | 
			
		||||
 | 
			
		||||
## How to use the devicetree entries
 | 
			
		||||
# How to use the devicetree entries
 | 
			
		||||
 | 
			
		||||
The `drivers/intel/dptf` chip driver is organized into several sections:
 | 
			
		||||
- Policies
 | 
			
		||||
@@ -151,7 +151,7 @@ The `drivers/intel/dptf` chip driver is organized into several sections:
 | 
			
		||||
The Policies section (`policies.active`, `policies.passive`, and
 | 
			
		||||
`policies.critical`) is where the components of each policy are defined.
 | 
			
		||||
 | 
			
		||||
### Active Policy
 | 
			
		||||
## Active Policy
 | 
			
		||||
 | 
			
		||||
Each Active Policy is defined in terms of 4 parts:
 | 
			
		||||
1) A Source (this is implicitly defined as TFN1, the system fan)
 | 
			
		||||
@@ -182,7 +182,7 @@ the CPU's active cooling capability). When the CPU temperature first crosses
 | 
			
		||||
rest of the table (note that it *must* be defined from highest temperature/
 | 
			
		||||
percentage on down to the lowest).
 | 
			
		||||
 | 
			
		||||
### Passive Policy
 | 
			
		||||
## Passive Policy
 | 
			
		||||
 | 
			
		||||
Each Passive Policy is defined in terms of 5 parts:
 | 
			
		||||
1) Source - The device that can be throttled
 | 
			
		||||
@@ -201,7 +201,7 @@ This example sets up a policy to begin throttling the charger performance when
 | 
			
		||||
temperature sensor 1 reaches 65C. The sampling period here is 60000 ms (60 s).
 | 
			
		||||
The Priority is defaulted to 100 in this case.
 | 
			
		||||
 | 
			
		||||
### Critical Policy
 | 
			
		||||
## Critical Policy
 | 
			
		||||
 | 
			
		||||
Each Critical Policy is defined in terms of 3 parts:
 | 
			
		||||
1) Source - A device that can trigger a critical event
 | 
			
		||||
@@ -218,7 +218,7 @@ register "policies.critical[1]" = "DPTF_CRITICAL(CPU, 75, SHUTDOWN)"
 | 
			
		||||
This example sets up a policy wherein ACPI will cause the system to shutdown
 | 
			
		||||
(in a "graceful" manner) when the CPU temperature reaches 75C.
 | 
			
		||||
 | 
			
		||||
### Power Limits
 | 
			
		||||
## Power Limits
 | 
			
		||||
 | 
			
		||||
Control over the SoC's Running Average Power Limits (RAPL) is one of the tools
 | 
			
		||||
that DPTF uses to enact Passive policies. DPTF can control both PL1 and PL2, if
 | 
			
		||||
@@ -244,7 +244,7 @@ This example allow DPTF to control the SoC's PL1 level to between 3W and 15W,
 | 
			
		||||
over a time interval ranging from 28 to 32 seconds, and it can move PL1 in
 | 
			
		||||
increments of 200 mW.
 | 
			
		||||
 | 
			
		||||
### Charger Performance
 | 
			
		||||
## Charger Performance
 | 
			
		||||
 | 
			
		||||
The battery charger can be a large contributor of unwanted heat in a system that
 | 
			
		||||
has one. Controlling the rate of charging is another tool that DPTF uses to enact
 | 
			
		||||
@@ -266,7 +266,7 @@ register "controls.charger_perf[3]" = "{   8,  500 }"
 | 
			
		||||
In this example, when DPTF decides to throttle the charger, it has four different
 | 
			
		||||
performance states to choose from.
 | 
			
		||||
 | 
			
		||||
### Fan Performance
 | 
			
		||||
## Fan Performance
 | 
			
		||||
 | 
			
		||||
When using DPTF, the system fan (`TFN1`) is the device responsible for actively
 | 
			
		||||
cooling the other temperature sensors on the mainboard. A fan speed table can be
 | 
			
		||||
@@ -298,21 +298,21 @@ increment of 10 percentage points. This is common when specifying fine-grained
 | 
			
		||||
control of the fan, wherein DPTF will interpolate between the percentages in the
 | 
			
		||||
table for a given temperature threshold.
 | 
			
		||||
 | 
			
		||||
### Options
 | 
			
		||||
## Options
 | 
			
		||||
 | 
			
		||||
#### Fan
 | 
			
		||||
### Fan
 | 
			
		||||
1) Fine-grained control - a boolean (see Fan Performance section above)
 | 
			
		||||
2) Step-size - Recommended minimum step size (in percentage points) to adjust
 | 
			
		||||
   the fan speed when using fine-grained control (ranges from 1 - 9).
 | 
			
		||||
3) Low-speed notify - If true, the platform will issue a `Notify (0x80)` to the
 | 
			
		||||
   fan device if a low fan speed is detected.
 | 
			
		||||
 | 
			
		||||
#### Temperature sensors
 | 
			
		||||
### Temperature sensors
 | 
			
		||||
1) Hysteresis - The amount of hysteresis implemented in either circuitry or
 | 
			
		||||
   the firmware that reads the temperature sensor (in degrees C).
 | 
			
		||||
2) Name - This name is applied to the _STR property of the sensor
 | 
			
		||||
 | 
			
		||||
### OEM Variables
 | 
			
		||||
## OEM Variables
 | 
			
		||||
Platform vendors can define an array of OEM-specific values as OEM variables
 | 
			
		||||
to be used under DPTF policy. There are total six OEM variables available.
 | 
			
		||||
These can be used in AP policy for more specific actions. These OEM variables
 | 
			
		||||
 
 | 
			
		||||
@@ -1,309 +0,0 @@
 | 
			
		||||
# Driver Devicetree Entries
 | 
			
		||||
 | 
			
		||||
Let's take a look at an example entry from
 | 
			
		||||
``src/mainboard/google/hatch/variants/hatch/overridetree.cb``:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
device pci 15.0 on
 | 
			
		||||
	chip drivers/i2c/generic
 | 
			
		||||
		register "hid" = ""ELAN0000""
 | 
			
		||||
		register "desc" = ""ELAN Touchpad""
 | 
			
		||||
		register "irq" = "ACPI_IRQ_LEVEL_LOW(GPP_A21_IRQ)"
 | 
			
		||||
		register "detect" = "1"
 | 
			
		||||
		register "wake" = "GPE0_DW0_21"
 | 
			
		||||
		device i2c 15 on end
 | 
			
		||||
	end
 | 
			
		||||
end # I2C #0
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
When this entry is processed during ramstage, it will create a device in the
 | 
			
		||||
ACPI SSDT table (all devices in devicetrees end up in the SSDT table).  The ACPI
 | 
			
		||||
generation routines in coreboot actually generate the raw bytecode that
 | 
			
		||||
represents the device's structure, but looking at ASL code is easier to
 | 
			
		||||
understand; see below for what the disassembled bytecode looks like:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
Scope (\_SB.PCI0.I2C0)
 | 
			
		||||
{
 | 
			
		||||
    Device (D015)
 | 
			
		||||
    {
 | 
			
		||||
        Name (_HID, "ELAN0000")  // _HID: Hardware ID
 | 
			
		||||
        Name (_UID, Zero)  // _UID: Unique ID
 | 
			
		||||
        Name (_DDN, "ELAN Touchpad")  // _DDN: DOS Device Name
 | 
			
		||||
        Method (_STA, 0, NotSerialized)  // _STA: Status
 | 
			
		||||
        {
 | 
			
		||||
            Return (0x0F)
 | 
			
		||||
        }
 | 
			
		||||
        Name (_CRS, ResourceTemplate ()  // _CRS: Current Resource Settings
 | 
			
		||||
        {
 | 
			
		||||
            I2cSerialBusV2 (0x0015, ControllerInitiated, 400000,
 | 
			
		||||
                AddressingMode7Bit, "\\_SB.PCI0.I2C0",
 | 
			
		||||
                0x00, ResourceConsumer, , Exclusive, )
 | 
			
		||||
            Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive, ,, )
 | 
			
		||||
            {
 | 
			
		||||
                0x0000002D,
 | 
			
		||||
            }
 | 
			
		||||
        })
 | 
			
		||||
        Name (_S0W, ACPI_DEVICE_SLEEP_D3_HOT)  // _S0W: S0 Device Wake State
 | 
			
		||||
        Name (_PRW, Package (0x02)  // _PRW: Power Resources for Wake
 | 
			
		||||
        {
 | 
			
		||||
            0x15, // GPE #21
 | 
			
		||||
            0x03  // Sleep state S3
 | 
			
		||||
        })
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
You can see it generates \_HID, \_UID, \_DDN, \_STA, \_CRS, \_S0W, and \_PRW
 | 
			
		||||
names/methods in the Device's scope.
 | 
			
		||||
 | 
			
		||||
## Utilizing a device driver
 | 
			
		||||
 | 
			
		||||
The device driver must be enabled for your build.  There will be a CONFIG option
 | 
			
		||||
in the Kconfig file in the directory that the driver is in (e.g.,
 | 
			
		||||
``src/drivers/i2c/generic`` contains a Kconfig file; the option here is named
 | 
			
		||||
CONFIG_DRIVERS_I2C_GENERIC).  The config option will need to be added to your
 | 
			
		||||
mainboard's Kconfig file (e.g., ``src/mainboard/google/hatch/Kconfig``) in order
 | 
			
		||||
to be compiled into your build.
 | 
			
		||||
 | 
			
		||||
## Diving into the above example:
 | 
			
		||||
 | 
			
		||||
Let's take a look at how the devicetree language corresponds to the generated
 | 
			
		||||
ASL.
 | 
			
		||||
 | 
			
		||||
First, note this:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
    chip drivers/i2c/generic
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
This means that the device driver we're using has a corresponding structure,
 | 
			
		||||
located at ``src/drivers/i2c/generic/chip.h``, named **struct
 | 
			
		||||
drivers_i2c_generic_config** and it contains many properties you can specify to
 | 
			
		||||
be included in the ACPI table.
 | 
			
		||||
 | 
			
		||||
### hid
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
    register "hid" = ""ELAN0000""
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
This corresponds to **const char \*hid** in the struct.  In the ACPI ASL, it
 | 
			
		||||
translates to:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
    Name (_HID, "ELAN0000") // _HID: Hardware ID
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
under the device.  **This property is used to match the device to its driver
 | 
			
		||||
during enumeration in the OS.**
 | 
			
		||||
 | 
			
		||||
### desc
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
    register "desc" = ""ELAN Touchpad""
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
corresponds to **const char \*desc** and in ASL:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
    Name (_DDN, "ELAN Touchpad") // _DDN: DOS Device Name
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### irq
 | 
			
		||||
 | 
			
		||||
It also adds the interrupt,
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
    Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive, ,, )
 | 
			
		||||
    {
 | 
			
		||||
        0x0000002D,
 | 
			
		||||
    }
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
which comes from:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
    register "irq" = "ACPI_IRQ_LEVEL_LOW(GPP_A21_IRQ)"
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
The IRQ settings control the "Trigger" and "Polarity" settings seen above (level
 | 
			
		||||
means it is a level-triggered interrupt as opposed to
 | 
			
		||||
edge-triggered; active low means the interrupt is triggered when the signal is
 | 
			
		||||
low).
 | 
			
		||||
 | 
			
		||||
Also note that the IRQ names are SoC-specific, and you will need to
 | 
			
		||||
find the names in your SoC's header file.  The ACPI_* macros are defined in
 | 
			
		||||
``src/arch/x86/include/acpi/acpi_device.h``.
 | 
			
		||||
 | 
			
		||||
Using a GPIO as an IRQ requires that it is configured in coreboot correctly.
 | 
			
		||||
This is often done in a mainboard-specific file named ``gpio.c``.
 | 
			
		||||
 | 
			
		||||
AMD platforms don't have the ability to route GPIOs to the IO-APIC. Instead the
 | 
			
		||||
GPIO controller needs to be used directly. You can do this by setting the
 | 
			
		||||
`irq_gpio` register and using the `ACPI_GPIO_IRQ_X_X` macros.
 | 
			
		||||
 | 
			
		||||
i.e.,
 | 
			
		||||
```
 | 
			
		||||
register "irq_gpio" = "ACPI_GPIO_IRQ_EDGE_LOW(GPIO_40)"
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### detect
 | 
			
		||||
 | 
			
		||||
The next register is:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
    register "detect" = "1"
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
This flag tells the I2C driver that it should attempt to detect the presence of
 | 
			
		||||
the device (using an I2C zero-byte write), and only generate a SSDT entry if the
 | 
			
		||||
device is actually present. This alleviates the OS from having to determine if
 | 
			
		||||
a device is present or not (ChromeOS/Linux) and prevents resource conflict/
 | 
			
		||||
driver issues (Windows).
 | 
			
		||||
 | 
			
		||||
Currently, the detect feature works and is hooked up for all I2C touchpads,
 | 
			
		||||
and should be used any time a board has multiple touchpad options.
 | 
			
		||||
I2C audio devices should also work without issue.
 | 
			
		||||
 | 
			
		||||
Touchscreens can use this feature as well, but special care is needed to
 | 
			
		||||
implement the proper power sequencing for the device to be detected. Generally,
 | 
			
		||||
this means driving the enable GPIO high and holding the reset GPIO low in early
 | 
			
		||||
GPIO init (bootblock/romstage), then releasing reset in ramstage. The first
 | 
			
		||||
mainboards in the tree to implement this are google/skyrim and google/guybrush.
 | 
			
		||||
This feature has also been used in downstream forks without issue for some time
 | 
			
		||||
now on several other boards.
 | 
			
		||||
 | 
			
		||||
### wake
 | 
			
		||||
 | 
			
		||||
The last register is:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
    register "wake" = "GPE0_DW0_21"
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
which indicates that the method of waking the system using the touchpad will be
 | 
			
		||||
through a GPE, #21 associated with DW0, which is set up in devicetree.cb from
 | 
			
		||||
this example.  The "21" indicates GPP_X21, where GPP_X is mapped onto DW0
 | 
			
		||||
elsewhere in the devicetree.
 | 
			
		||||
 | 
			
		||||
### device
 | 
			
		||||
 | 
			
		||||
The last bit of the definition of that device includes:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
    device i2c 15 on end
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
which means it's an I2C device, with 7-bit address 0x15, and the device is "on",
 | 
			
		||||
meaning it will be exposed in the ACPI table.  The PCI device that the
 | 
			
		||||
controller is located in determines which I2C bus the device is expected to be
 | 
			
		||||
found on.  In this example, this is I2C bus 0.  This also determines the ACPI
 | 
			
		||||
"Scope" that the device names and methods will live under, in this case
 | 
			
		||||
"\_SB.PCI0.I2C0".
 | 
			
		||||
 | 
			
		||||
## Wake sources
 | 
			
		||||
 | 
			
		||||
The ACPI spec defines two methods to describe how a device can wake the system.
 | 
			
		||||
Only one of these methods should be used, otherwise duplicate wake events will
 | 
			
		||||
be generated.
 | 
			
		||||
 | 
			
		||||
### Using GPEs as a wake source
 | 
			
		||||
 | 
			
		||||
The `wake` property specified above is used to tell the ACPI subsystem that the
 | 
			
		||||
device can use a GPE to wake the system. The OS can control whether to enable
 | 
			
		||||
or disable the wake source by unmasking/masking off the GPE.
 | 
			
		||||
 | 
			
		||||
The `GPIO` -> `GPE` mapping must be configured in firmware. On AMD platforms this is
 | 
			
		||||
generally done by a mainboard specific `gpio.c` file that defines the GPIO
 | 
			
		||||
using `PAD_SCI`. The `GPIO` -> `GPE` mapping is returned by the
 | 
			
		||||
`soc_get_gpio_event_table` method that is defined in the SoC specific `gpio.c`
 | 
			
		||||
file. On Intel platforms, you fill in the `pmc_gpe0_dw0`, `pmc_gpe0_dw1`, and
 | 
			
		||||
`pmc_gpe0_dw2` fields in the devicetree to map 3 GPIO communities to `tier-1`
 | 
			
		||||
GPEs (the rest are available as `tier-2` GPEs).
 | 
			
		||||
 | 
			
		||||
Windows has a large caveat when using this method. If you use the `gpio_irq`
 | 
			
		||||
property to define a `GpioInt` in the `_CRS`, and then use the `wake` property
 | 
			
		||||
to define a `GPE`, Windows will
 | 
			
		||||
[BSOD](https://github.com/MicrosoftDocs/windows-driver-docs/blob/staging/windows-driver-docs-pr/debugger/bug-check-0xa5--acpi-bios-error.md)
 | 
			
		||||
complaining about an invalid ACPI configuration.
 | 
			
		||||
> 0x1000D - A device used both GPE and GPIO interrupts, which is not supported.
 | 
			
		||||
 | 
			
		||||
In order to avoid this error, you should use the `irq` property instead. AMD
 | 
			
		||||
platforms don't support routing GPIOs to the IO-APIC, so this workaround isn't
 | 
			
		||||
feasible. The other option is to use a wake capable GPIO as described below.
 | 
			
		||||
 | 
			
		||||
### Using GPIO interrupts as a wake source
 | 
			
		||||
 | 
			
		||||
The `ACPI_IRQ_WAKE_{EDGE,LEVEL}_{LOW,HIGH}` macros can be used when setting the
 | 
			
		||||
`irq` or `gpio_irq` properties. This ends up setting `ExclusiveAndWake` or
 | 
			
		||||
`SharedAndWake` on the `Interrupt` or `GpioInt` ACPI resource.
 | 
			
		||||
 | 
			
		||||
This method has a few caveats:
 | 
			
		||||
* On Intel and AMD platforms the IO-APIC can't wake the system. This means using
 | 
			
		||||
  the `ACPI_IRQ_WAKE_*` macros with the `irq` property won't actually wake the
 | 
			
		||||
  system. Instead you need to use the `gpio_irq` property, or a `GPE` as
 | 
			
		||||
  described above.
 | 
			
		||||
* The OS needs to know how to enable the `wake` bit on the GPIO. For linux this
 | 
			
		||||
  means the platform specific GPIO controller driver must implement the
 | 
			
		||||
  `irq_set_wake` callback. For AMD systems this wasn't
 | 
			
		||||
  [implemented](https://github.com/torvalds/linux/commit/d62bd5ce12d79bcd6a6c3e4381daa7375dc21158)
 | 
			
		||||
  until linux v5.15. If the controller doesn't define this callback, it's
 | 
			
		||||
  possible for the firmware to manually set the `wake` bit on the GPIO. This is
 | 
			
		||||
  often done in a mainboard-specific file named `gpio.c`. This is not
 | 
			
		||||
  recommended because then it's not possible for the OS to disable the wake
 | 
			
		||||
  source.
 | 
			
		||||
* As of
 | 
			
		||||
  [linux v6.0-rc5](https://github.com/torvalds/linux/releases/tag/v6.0-rc5),
 | 
			
		||||
  the ACPI subsystem doesn't take the interrupt `wake` bit into account when
 | 
			
		||||
  deciding on which power state to put the device in before suspending the
 | 
			
		||||
  system. This means that if you define a power resource for a device via
 | 
			
		||||
  `has_power_resource`, `enable_gpio`, etc, then the linux kernel will place the
 | 
			
		||||
  device into D3Cold. i.e., power off the device.
 | 
			
		||||
 | 
			
		||||
## Other auto-generated names
 | 
			
		||||
 | 
			
		||||
(see [ACPI specification
 | 
			
		||||
6.3](https://uefi.org/sites/default/files/resources/ACPI_6_3_final_Jan30.pdf)
 | 
			
		||||
for more details on ACPI methods)
 | 
			
		||||
 | 
			
		||||
### _S0W (S0 Device Wake State)
 | 
			
		||||
\_S0W indicates the deepest S0 sleep state this device can wake itself from,
 | 
			
		||||
which in this case is `ACPI_DEVICE_SLEEP_D3_HOT`, representing _D3hot_.
 | 
			
		||||
D3Hot means the `PR3` power resources are still on and the device is still
 | 
			
		||||
responsive on the bus. For i2c devices this is generally the same state as `D0`.
 | 
			
		||||
 | 
			
		||||
### \_PRW (Power Resources for Wake)
 | 
			
		||||
\_PRW indicates the power resources and events required for wake.  There are no
 | 
			
		||||
dependent power resources, but the GPE (GPE0_DW0_21) is mentioned here (0x15),
 | 
			
		||||
as well as the deepest sleep state supporting waking the system (3), which is
 | 
			
		||||
S3.
 | 
			
		||||
 | 
			
		||||
### \_STA (Status)
 | 
			
		||||
The \_STA method is generated automatically, and its values, 0xF, indicates the
 | 
			
		||||
following:
 | 
			
		||||
 | 
			
		||||
    Bit [0] – Set if the device is present.
 | 
			
		||||
    Bit [1] – Set if the device is enabled and decoding its resources.
 | 
			
		||||
    Bit [2] – Set if the device should be shown in the UI.
 | 
			
		||||
    Bit [3] – Set if the device is functioning properly (cleared if device failed its diagnostics).
 | 
			
		||||
 | 
			
		||||
### \_CRS (Current resource settings)
 | 
			
		||||
The \_CRS method is generated automatically, as the driver knows it is an I2C
 | 
			
		||||
controller, and so specifies how to configure the controller for proper
 | 
			
		||||
operation with the touchpad.
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
Name (_CRS, ResourceTemplate ()  // _CRS: Current Resource Settings
 | 
			
		||||
{
 | 
			
		||||
    I2cSerialBusV2 (0x0015, ControllerInitiated, 400000,
 | 
			
		||||
                    AddressingMode7Bit, "\\_SB.PCI0.I2C0",
 | 
			
		||||
                    0x00, ResourceConsumer, , Exclusive, )
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Notes
 | 
			
		||||
 | 
			
		||||
 - **All device driver entries in devicetrees end up in the SSDT table, and are
 | 
			
		||||
   generated in coreboot's ramstage**
 | 
			
		||||
   (The lone exception to this rule is i2c touchpads with the 'detect' flag set;
 | 
			
		||||
    in this case, devices not present will not be added to the SSDT)
 | 
			
		||||
@@ -4,14 +4,9 @@ The drivers can be found in `src/drivers`. They are intended for onboard
 | 
			
		||||
and plugin devices, significantly reducing integration complexity and
 | 
			
		||||
they allow to easily reuse existing code across platforms.
 | 
			
		||||
 | 
			
		||||
For details on how to connect device drivers to a mainboard, see [Driver Devicetree Entries](dt_entries.md).
 | 
			
		||||
 | 
			
		||||
Some of the drivers currently available include:
 | 
			
		||||
 | 
			
		||||
* [Intel DPTF](dptf.md)
 | 
			
		||||
* [IPMI KCS](ipmi_kcs.md)
 | 
			
		||||
* [SMMSTORE](smmstore.md)
 | 
			
		||||
* [SMMSTOREv2](smmstorev2.md)
 | 
			
		||||
* [SoundWire](soundwire.md)
 | 
			
		||||
* [SMMSTOREv2](smmstorev2.md)
 | 
			
		||||
* [USB4 Retimer](retimer.md)
 | 
			
		||||
* [CBFS SMBIOS hooks](cbfs_smbios.md)
 | 
			
		||||
 
 | 
			
		||||
@@ -42,15 +42,6 @@ The following registers can be set:
 | 
			
		||||
* `gpe_interrupt`
 | 
			
		||||
  * Integer
 | 
			
		||||
  * The bit in GPE (SCI) used to notify about a change on the KCS.
 | 
			
		||||
* `wait_for_bmc`
 | 
			
		||||
  * Boolean
 | 
			
		||||
  * Wait for BMC to boot. This can be used if the BMC takes a long time to boot
 | 
			
		||||
    after PoR:
 | 
			
		||||
     - AST2400 on Supermicro X11SSH: 34 s
 | 
			
		||||
* `bmc_boot_timeout`
 | 
			
		||||
  * Integer
 | 
			
		||||
  * The timeout in seconds to wait for the IPMI service to be loaded.
 | 
			
		||||
    Will be used if wait_for_bmc is true.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
[IPMI]: https://www.intel.com/content/dam/www/public/us/en/documents/product-briefs/ipmi-second-gen-interface-spec-v2-rev1-1.pdf
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
# USB4 Retimers
 | 
			
		||||
 | 
			
		||||
## Introduction
 | 
			
		||||
# Introduction
 | 
			
		||||
As USB speeds continue to increase (up to 5G, 10G, and even 20G or higher in
 | 
			
		||||
newer revisions of the spec), it becomes more difficult to maintain signal
 | 
			
		||||
integrity for longer traces. Devices such as retimers and redrivers can be used
 | 
			
		||||
@@ -17,7 +17,7 @@ by doing CDR and retransmitting the data (i.e., it is protocol-aware). Since
 | 
			
		||||
this is a digital component, it may have firmware.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Driver Usage
 | 
			
		||||
# Driver Usage
 | 
			
		||||
 | 
			
		||||
Some operating systems may have the ability to update firmware on USB4 retimers,
 | 
			
		||||
and ultimately will need some way to power the device on and off so that its new
 | 
			
		||||
 
 | 
			
		||||
@@ -21,7 +21,7 @@ operations is desired, as it reduces complexity and potential for bugs.
 | 
			
		||||
 | 
			
		||||
This can be used by a FTW (FaultTolerantWrite) implementation that uses
 | 
			
		||||
at least two regions in an A/B update scheme. The FTW implementation in
 | 
			
		||||
edk2 uses three different regions in the store:
 | 
			
		||||
EDK2 uses three different regions in the store:
 | 
			
		||||
 | 
			
		||||
- The variable store
 | 
			
		||||
- The FTW spare block
 | 
			
		||||
@@ -35,7 +35,7 @@ With 64 KiB as block size, the minimum size of the FTW-enabled store is:
 | 
			
		||||
- The FTW spare block: 2 blocks = 2 * 64 KiB
 | 
			
		||||
- The FTW working block: 1 block = 64 KiB
 | 
			
		||||
 | 
			
		||||
Therefore, the minimum size for edk2 FTW is 4 blocks, or 256 KiB.
 | 
			
		||||
Therefore, the minimum size for EDK2 FTW is 4 blocks, or 256 KiB.
 | 
			
		||||
 | 
			
		||||
## API
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,137 +0,0 @@
 | 
			
		||||
# External Resources
 | 
			
		||||
 | 
			
		||||
This is a list of resources that could be useful to coreboot developers.
 | 
			
		||||
These are not endorsed or officially recommended by the coreboot project,
 | 
			
		||||
but simply listed here in the hopes that someone will find something
 | 
			
		||||
useful.
 | 
			
		||||
 | 
			
		||||
Please add any helpful or informational links and sections as you see fit.
 | 
			
		||||
 | 
			
		||||
## Articles
 | 
			
		||||
 | 
			
		||||
* External Interrupts in the x86 system.
 | 
			
		||||
  * [Part 1: Interrupt controller evolution](https://habr.com/en/post/446312/)
 | 
			
		||||
  * [Part 2: Linux kernel boot options](https://habr.com/en/post/501660/)
 | 
			
		||||
  * [Part 3: Interrupt routing setup in a chipset](https://habr.com/en/post/501912/)
 | 
			
		||||
* System address map initialization in x86/x64 architecture.
 | 
			
		||||
  * [Part 1: PCI-based systems](https://resources.infosecinstitute.com/topic/system-address-map-initialization-in-x86x64-architecture-part-1-pci-based-systems/)
 | 
			
		||||
  * [Part 2: PCI express-based systems](https://resources.infosecinstitute.com/topic/system-address-map-initialization-x86x64-architecture-part-2-pci-express-based-systems/)
 | 
			
		||||
  * [PCIe elastic buffer](https://www.mindshare.com/files/resources/mindshare_pcie_elastic_buffer.pdf)
 | 
			
		||||
* [Boot Guard and PSB have user-hostile defaults](https://mjg59.dreamwidth.org/58424.html)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## General Information
 | 
			
		||||
 | 
			
		||||
* [OS Dev](https://wiki.osdev.org/Categorized_Main_Page)
 | 
			
		||||
* [Interface BUS](http://www.interfacebus.com/)
 | 
			
		||||
 | 
			
		||||
## OpenSecurityTraining2
 | 
			
		||||
 | 
			
		||||
OpenSecurityTraining2 is dedicated to sharing training material for any topic
 | 
			
		||||
related to computer security, including coreboot.
 | 
			
		||||
 | 
			
		||||
There are various ways to learn firmware, some are more efficient than others,
 | 
			
		||||
depending on the people. Before going straight to practice and experimenting
 | 
			
		||||
with hardware, it can be beneficial to learn the basics of computing. OST2
 | 
			
		||||
focuses on conveying computer architecture and security information in the form
 | 
			
		||||
of structured instructor-led classes, available to everyone for free.
 | 
			
		||||
 | 
			
		||||
All material is licensed [CC BY-SA 4.0](http://creativecommons.org/licenses/by-sa/4.0/),
 | 
			
		||||
allowing anyone to use the material however they see fit, so long as they share
 | 
			
		||||
modified works back to the community.
 | 
			
		||||
 | 
			
		||||
Below is a list of currently available courses that can help understand the
 | 
			
		||||
inner workings of coreboot and other firmware-related topics:
 | 
			
		||||
 | 
			
		||||
* [coreboot design principles and boot process](https://ost2.fyi/Arch4031)
 | 
			
		||||
* [x86-64 Assembly](https://ost2.fyi/Arch1001)
 | 
			
		||||
* [x86-64 OS Internals](https://ost2.fyi/Arch2001)
 | 
			
		||||
* [x86-64 Intel Firmware Attack & Defense](https://ost2.fyi/Arch4001)
 | 
			
		||||
 | 
			
		||||
There are [additional security courses](https://p.ost2.fyi/courses) at the site
 | 
			
		||||
as well (such as
 | 
			
		||||
[how to avoid writing exploitable code in C/C++](https://ost2.fyi/Vulns1001).)
 | 
			
		||||
 | 
			
		||||
## Firmware Specifications & Information
 | 
			
		||||
 | 
			
		||||
* [System Management BIOS - SMBIOS](https://www.dmtf.org/standards/smbios)
 | 
			
		||||
* [Desktop and Mobile Architecture for System Hardware - DASH](https://www.dmtf.org/standards/dash)
 | 
			
		||||
* [PNP BIOS](https://www.intel.com/content/dam/support/us/en/documents/motherboards/desktop/sb/pnpbiosspecificationv10a.pdf)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### ACPI
 | 
			
		||||
 | 
			
		||||
* [ACPI Specs](https://uefi.org/acpi/specs)
 | 
			
		||||
* [ACPI in Linux](https://www.kernel.org/doc/ols/2005/ols2005v1-pages-59-76.pdf)
 | 
			
		||||
* [ACPI 5 Linux](https://blog.linuxplumbersconf.org/2012/wp-content/uploads/2012/09/LPC2012-ACPI5.pdf)
 | 
			
		||||
* [ACPI 6 Linux](https://events.static.linuxfound.org/sites/events/files/slides/ACPI_6_and_Linux_0.pdf)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Security
 | 
			
		||||
 | 
			
		||||
* [Intel Boot Guard](https://edk2-docs.gitbook.io/understanding-the-uefi-secure-boot-chain/secure_boot_chain_in_uefi/intel_boot_guard)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Hardware information
 | 
			
		||||
 | 
			
		||||
* [WikiChip](https://en.wikichip.org/wiki/WikiChip)
 | 
			
		||||
* [Sandpile](https://www.sandpile.org/)
 | 
			
		||||
* [CPU-World](https://www.cpu-world.com/index.html)
 | 
			
		||||
* [CPU-Upgrade](https://www.cpu-upgrade.com/index.html)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Hardware Specifications & Standards
 | 
			
		||||
 | 
			
		||||
* [Bluetooth](https://www.bluetooth.com/specifications/specs/) - Bluetooth SIG
 | 
			
		||||
* [eMMC](https://www.jedec.org/)  - JEDEC - (LOGIN REQUIRED)
 | 
			
		||||
* [eSPI](https://cdrdv2.intel.com/v1/dl/getContent/645987) - Intel
 | 
			
		||||
* [I2c Spec](https://web.archive.org/web/20170704151406/https://www.nxp.com/docs/en/user-guide/UM10204.pdf),
 | 
			
		||||
  [Appnote](https://www.nxp.com/docs/en/application-note/AN10216.pdf) - NXP
 | 
			
		||||
* [I2S](https://www.nxp.com/docs/en/user-manual/UM11732.pdf) - NXP
 | 
			
		||||
* [I3C](https://www.mipi.org/specifications/i3c-sensor-specification) - MIPI Alliance (LOGIN REQUIRED)
 | 
			
		||||
* [Memory](https://www.jedec.org/)  - JEDEC - (LOGIN REQUIRED)
 | 
			
		||||
* [NVMe](https://nvmexpress.org/developers/) - NVMe Specifications
 | 
			
		||||
* [LPC](https://www.intel.com/content/dam/www/program/design/us/en/documents/low-pin-count-interface-specification.pdf) - Intel
 | 
			
		||||
* [PCI / PCIe / M.2](https://pcisig.com/specifications) -  PCI-SIG - (LOGIN REQUIRED)
 | 
			
		||||
* [Power Delivery](https://www.usb.org/documents) - USB Implementers Forum
 | 
			
		||||
* [SATA](https://sata-io.org/developers/purchase-specification) - SATA-IO (LOGIN REQUIRED)
 | 
			
		||||
* [SMBus](http://www.smbus.org/specs/) - System Management Interface Forum
 | 
			
		||||
* [Smart Battery](http://smartbattery.org/specs/) - Smart Battery System Implementers Forum
 | 
			
		||||
* [USB](https://www.usb.org/documents) - USB Implementers Forum
 | 
			
		||||
* [WI-FI](https://www.wi-fi.org/discover-wi-fi/specifications) - Wi-Fi Alliance
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Chip Vendor Documentation
 | 
			
		||||
 | 
			
		||||
* AMD
 | 
			
		||||
  * [Developer Guides, Manuals & ISA Documents](https://developer.amd.com/resources/developer-guides-manuals/)
 | 
			
		||||
  * [AMD Tech Docs - Official Documentation Page](https://www.amd.com/en/support/tech-docs)
 | 
			
		||||
* ARM
 | 
			
		||||
  * [Tools and Software - Specifications](https://developer.arm.com/tools-and-software/software-development-tools/specifications)
 | 
			
		||||
* Intel
 | 
			
		||||
  * [Developer Zone](https://www.intel.com/content/www/us/en/developer/overview.html)
 | 
			
		||||
  * [Resource & Documentation Center](https://www.intel.com/content/www/us/en/resources-documentation/developer.html)
 | 
			
		||||
  * [Architecture Software Developer Manuals](https://www.intel.com/content/www/us/en/developer/articles/technical/intel-sdm.html)
 | 
			
		||||
  * [Intel specific ACPI](https://www.intel.com/content/www/us/en/standards/processor-vendor-specific-acpi-specification.html)
 | 
			
		||||
  * [coreboot on Eagle Stream](https://www.intel.com/content/www/us/en/content-details/778593/coreboot-practice-on-eagle-stream.html)
 | 
			
		||||
 | 
			
		||||
* Rockchip
 | 
			
		||||
  * [Open Source Wiki](https://opensource.rock-chips.com/wiki_Main_Page)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Software
 | 
			
		||||
 | 
			
		||||
 * [Fiedka](https://github.com/fiedka/fiedka) - A graphical Firmware Editor
 | 
			
		||||
 * [IOTools](https://github.com/adurbin/iotools) - Command line tools to access hardware registers
 | 
			
		||||
 * [UEFITool](https://github.com/LongSoft/UEFITool) - Editor for UEFI PI compliant firmware images
 | 
			
		||||
 * [CHIPSEC](https://chipsec.github.io) - Framework for analyzing platform level security & configuration
 | 
			
		||||
 * [SPDEditor](https://github.com/integralfx/SPDEditor) - GUI to edit DDR3 SPD files
 | 
			
		||||
 * [DDR4XMPEditor](https://github.com/integralfx/DDR4XMPEditor) - Editor for DDR4 SPD and XMP
 | 
			
		||||
* [overclockSPD](https://github.com/baboomerang/overclockSPD) - Fast and easy way to read and write data to RAM SPDs.
 | 
			
		||||
* [VBiosFinder](https://github.com/coderobe/VBiosFinder) - This tool attempts to extract a VBIOS from a BIOS update.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Infrastructure software
 | 
			
		||||
 | 
			
		||||
* [Kconfig](https://www.kernel.org/doc/html/latest/kbuild/kconfig-language.html)
 | 
			
		||||
* [GNU Make](https://www.gnu.org/software/make/manual/)
 | 
			
		||||
							
								
								
									
										23
									
								
								Documentation/flash_tutorial/ext_standalone.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,23 @@
 | 
			
		||||
# Flashing firmware standalone
 | 
			
		||||
 | 
			
		||||
If none of the other methods work, there are three possibilities:
 | 
			
		||||
 | 
			
		||||
## Desolder
 | 
			
		||||
You must remove or desolder the flash IC before you can flash it.
 | 
			
		||||
It's recommended to solder a socket in place of the flash IC.
 | 
			
		||||
 | 
			
		||||
When flashing the IC, always connect all input pins.
 | 
			
		||||
If in doubt, pull /WP, /HOLD, /RESET and alike up towards Vcc.
 | 
			
		||||
 | 
			
		||||
## SPI flash emulator
 | 
			
		||||
If you are a developer, you might want to use an [EM100Pro] instead, which sets
 | 
			
		||||
the onboard flash on hold, and allows to run custom firmware.
 | 
			
		||||
It provides a very fast development cycle without actually writing to flash.
 | 
			
		||||
 | 
			
		||||
## SPI flash overwrite
 | 
			
		||||
It is possible to set the onboard flash on hold and use another flash chip.
 | 
			
		||||
Connect all lines one-to-one, except /HOLD. Pull /HOLD of the soldered flash IC
 | 
			
		||||
low, and /HOLD of your replacement flash IC high.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
[EM100Pro]: https://www.dediprog.com/product/EM100Pro
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 5.0 KiB  | 
| 
		 Before Width: | Height: | Size: 4.5 KiB After Width: | Height: | Size: 4.5 KiB  | 
@@ -3,7 +3,7 @@
 | 
			
		||||
## Overview
 | 
			
		||||
![][architecture]
 | 
			
		||||
 | 
			
		||||
[architecture]: comparison_coreboot_uefi.svg
 | 
			
		||||
[architecture]: comparision_coreboot_uefi.svg
 | 
			
		||||
 | 
			
		||||
## Stages
 | 
			
		||||
coreboot consists of multiple stages that are compiled as separate binaries and
 | 
			
		||||
 
 | 
			
		||||
@@ -7,10 +7,10 @@ to the point of providing its own custom language.
 | 
			
		||||
The overhead of learning this new syntax is (hopefully) offset by its lower
 | 
			
		||||
complexity.
 | 
			
		||||
 | 
			
		||||
The build system is defined in the toplevel `Makefile` and `toolchain.mk`
 | 
			
		||||
The build system is defined in the toplevel `Makefile` and `toolchain.inc`
 | 
			
		||||
and is supposed to be generic (and is in fact used with a number of other
 | 
			
		||||
projects).  Project specific configuration should reside in files called
 | 
			
		||||
`Makefile.mk`.
 | 
			
		||||
`Makefile.inc`.
 | 
			
		||||
 | 
			
		||||
In general, the build system provides a number of "classes" that describe
 | 
			
		||||
various parts of the build. These cover the various build targets in coreboot
 | 
			
		||||
@@ -36,7 +36,7 @@ TODO: explain how to create new classes and how to evaluate them.
 | 
			
		||||
### subdirs
 | 
			
		||||
`subdirs` contains subdirectories (relative to the current directory) that
 | 
			
		||||
should also be handled by the build system. The build system expects these
 | 
			
		||||
directories to contain a file called `Makefile.mk`.
 | 
			
		||||
directories to contain a file called `Makefile.inc`.
 | 
			
		||||
 | 
			
		||||
Subdirectories are not read at the point where the `subdirs` statement
 | 
			
		||||
resides but later, after the current directory is handled (and potentially
 | 
			
		||||
@@ -62,23 +62,6 @@ supported options are:
 | 
			
		||||
 | 
			
		||||
`position` and `align` are mutually exclusive.
 | 
			
		||||
 | 
			
		||||
### Adding Makefile fragments
 | 
			
		||||
 | 
			
		||||
You can use the `add_intermediate` helper to add new post-processing steps for
 | 
			
		||||
the final `coreboot.rom` image. For example you can add new files to CBFS by
 | 
			
		||||
adding something like this to `site-local/Makefile.mk`
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
$(call add_intermediate, add_mrc_data)
 | 
			
		||||
	$(CBFSTOOL) $< write -r RW_MRC_CACHE -f site-local/my-mrc-recording.bin
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Note that the second line must start with a tab, not spaces.
 | 
			
		||||
 | 
			
		||||
```eval_rst
 | 
			
		||||
See also :doc:`../tutorial/managing_local_additions`.
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
#### FMAP region support
 | 
			
		||||
With the addition of FMAP flash partitioning support to coreboot, there was a
 | 
			
		||||
need to extend the specification of files to provide more precise control
 | 
			
		||||
@@ -100,4 +83,4 @@ The default implementation just returns `COREBOOT` (the default region) for
 | 
			
		||||
all files.
 | 
			
		||||
 | 
			
		||||
vboot provides its own implementation of `regions-for-file` that can be used
 | 
			
		||||
as reference in `src/vboot/Makefile.mk`.
 | 
			
		||||
as reference in `src/vboot/Makefile.inc`.
 | 
			
		||||
 
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB  | 
@@ -1,87 +0,0 @@
 | 
			
		||||
# Adding new devices to a device tree
 | 
			
		||||
 | 
			
		||||
## Introduction
 | 
			
		||||
 | 
			
		||||
ACPI exposes a platform-independent interface for operating systems to perform
 | 
			
		||||
power management and other platform-level functions.  Some operating systems
 | 
			
		||||
also use ACPI to enumerate devices that are not immediately discoverable, such
 | 
			
		||||
as those behind I2C or SPI buses (in contrast to PCI).  This document discusses
 | 
			
		||||
the way that coreboot uses the concept of a "device tree" to generate ACPI
 | 
			
		||||
tables for usage by the operating system.
 | 
			
		||||
 | 
			
		||||
## Devicetree and overridetree (if applicable)
 | 
			
		||||
 | 
			
		||||
For mainboards that are organized around a "reference board" or "baseboard"
 | 
			
		||||
model (see ``src/mainboard/google/octopus`` or ``hatch`` for examples), there is
 | 
			
		||||
typically a devicetree.cb file that all boards share, and any differences for a
 | 
			
		||||
specific board ("variant") are captured in the overridetree.cb file.  Any
 | 
			
		||||
settings changed in the overridetree take precedence over those in the main
 | 
			
		||||
devicetree.  Note, not all mainboards will have the devicetree/overridetree
 | 
			
		||||
distinction, and may only have a devicetree.cb file.  Or you can always just
 | 
			
		||||
write the ASL (ACPI Source Language) code yourself.
 | 
			
		||||
 | 
			
		||||
### Naming and referencing devices
 | 
			
		||||
 | 
			
		||||
When declaring a device, it can optionally be given an alias that can be
 | 
			
		||||
referred to elsewhere. This is particularly useful to declare a device in one
 | 
			
		||||
device tree while allowing its configuration to be more easily changed in an
 | 
			
		||||
overlay. For instance, the AMD Picasso SoC definition
 | 
			
		||||
(`soc/amd/picasso/chipset.cb`) declares an IOMMU on a PCI bus that is disabled
 | 
			
		||||
by default:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
chip soc/amd/picasso
 | 
			
		||||
	device domain 0 on
 | 
			
		||||
		...
 | 
			
		||||
		device pci 00.2 alias iommu off end
 | 
			
		||||
		...
 | 
			
		||||
	end
 | 
			
		||||
end
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
A device based on this SoC can override the configuration for the IOMMU without
 | 
			
		||||
duplicating addresses, as in
 | 
			
		||||
`mainboard/google/zork/variants/baseboard/devicetree_trembyle.cb`:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
chip soc/amd/picasso
 | 
			
		||||
	device domain 0
 | 
			
		||||
		...
 | 
			
		||||
		device ref iommu on end
 | 
			
		||||
		...
 | 
			
		||||
	end
 | 
			
		||||
end
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
In this example the override simply enables the IOMMU, but it could also
 | 
			
		||||
set additional properties (or even add child devices) inside the IOMMU `device`
 | 
			
		||||
block.
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
It is important to note that devices that use `device ref` syntax to override
 | 
			
		||||
previous definitions of a device by alias must be placed at **exactly the same
 | 
			
		||||
location in the device tree** as the original declaration. If not, this will
 | 
			
		||||
actually create another device rather than overriding the properties of the
 | 
			
		||||
existing one. For instance, if the above snippet from `devicetree_trembyle.cb`
 | 
			
		||||
were written as follows:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
chip soc/amd/picasso
 | 
			
		||||
	# NOTE: not inside domain 0!
 | 
			
		||||
	device ref iommu on end
 | 
			
		||||
end
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Then this would leave the SoC's IOMMU disabled, and instead create a new device
 | 
			
		||||
with no properties as a direct child of the SoC.
 | 
			
		||||
 | 
			
		||||
## Device drivers
 | 
			
		||||
 | 
			
		||||
Platform independent device drivers are hooked up via entries in a devicetree.
 | 
			
		||||
See [Driver Devicetree Entries](../drivers/dt_entries.md) for more info.
 | 
			
		||||
 | 
			
		||||
## Notes
 | 
			
		||||
 | 
			
		||||
 - **All fields that are left unspecified in the devicetree are initialized to
 | 
			
		||||
   zero.**
 | 
			
		||||
@@ -1,312 +0,0 @@
 | 
			
		||||
# coreboot FAQ
 | 
			
		||||
 | 
			
		||||
## General coreboot questions
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### What is coreboot?
 | 
			
		||||
 | 
			
		||||
coreboot is a free and open software project designed to initialize
 | 
			
		||||
computers and embedded systems in a fast, secure, and auditable fashion.
 | 
			
		||||
The focus is on minimal hardware initialization: to do only what is
 | 
			
		||||
absolutely needed, then pass control to other software (a payload, in
 | 
			
		||||
coreboot parlance) in order to boot the operating system securely.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### What is a coreboot payload?
 | 
			
		||||
 | 
			
		||||
coreboot itself does not deal with boot media such as hard-drives,
 | 
			
		||||
SSDs, or USB flash-drives, beyond initializing the underlying hardware.
 | 
			
		||||
So in order to actually boot an operating system, another piece of
 | 
			
		||||
software which does do those things must be used. coreboot supports
 | 
			
		||||
a large number of diverse payloads; see below for more details.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Is coreboot the same as UEFI?
 | 
			
		||||
 | 
			
		||||
No. coreboot and UEFI are both system firmware that handle the
 | 
			
		||||
initialization of the hardware, but are otherwise not similar.
 | 
			
		||||
coreboot’s goal is to **just** initialize the hardware and exit.
 | 
			
		||||
This makes coreboot smaller and simpler, leading to faster boot times,
 | 
			
		||||
and making it easier to find and fix bugs. The result is a higher
 | 
			
		||||
overall security.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### What's the difference between coreboot and UEFI?
 | 
			
		||||
 | 
			
		||||
UEFI is actually a firmware specification, not a specific software
 | 
			
		||||
implementation. Intel, along with the rest of the Tianocore project,
 | 
			
		||||
has released an open-source implementation of the overall framework,
 | 
			
		||||
EDK2, but it does not come with hardware support. Most hardware running
 | 
			
		||||
UEFI uses a proprietary implementation built on top of EDK2.
 | 
			
		||||
 | 
			
		||||
coreboot does not implement the UEFI specification, but it can be used to
 | 
			
		||||
initialize the system, then launch a UEFI payload such as EDK2 in order
 | 
			
		||||
to provide UEFI boot services.
 | 
			
		||||
 | 
			
		||||
The UEFI specification also defines and allows for many things that are
 | 
			
		||||
outside of coreboot’s scope, including (but not limited to):
 | 
			
		||||
 | 
			
		||||
* Boot device selection
 | 
			
		||||
* Updating the firmware
 | 
			
		||||
* A CLI shell
 | 
			
		||||
* Network communication
 | 
			
		||||
* An integrated setup menu
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Can coreboot boot operating systems that require UEFI?
 | 
			
		||||
 | 
			
		||||
Yes, but... again, coreboot **just** initializes the hardware. coreboot
 | 
			
		||||
itself doesn’t load operating systems from storage media other than the
 | 
			
		||||
flash chip. Unlike UEFI, coreboot does not, and will not contain a Wi-Fi
 | 
			
		||||
driver or communicate directly with any sort of network. That sort of
 | 
			
		||||
functionality is not related to hardware initialization.
 | 
			
		||||
 | 
			
		||||
To boot operating systems that require UEFI, coreboot can be compiled with
 | 
			
		||||
EDK2 as the payload. This allows coreboot to perform the hardware init,
 | 
			
		||||
with EDK2 supplying the UEFI boot interface and runtime services to
 | 
			
		||||
the operating system.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### What non-UEFI payloads does coreboot support?
 | 
			
		||||
 | 
			
		||||
* SeaBIOS, behaves like a classic BIOS, allowing you to boot operating
 | 
			
		||||
  systems that rely on the legacy interrupts.
 | 
			
		||||
 | 
			
		||||
* GRUB can be used as a coreboot payload, and is currently the most
 | 
			
		||||
  common approach to full disk encryption (FDE).
 | 
			
		||||
 | 
			
		||||
* A Linux kernel and initramfs stored alongside coreboot in the boot
 | 
			
		||||
  ROM can also be used as a payload. In this scenario coreboot
 | 
			
		||||
  initializes hardware, loads Linux from boot ROM into RAM, and
 | 
			
		||||
  executes it. The embedded Linux environment can look for a target OS
 | 
			
		||||
  kernel to load from local storage or over a network and execute it
 | 
			
		||||
  using kexec. This is sometimes called LinuxBoot.
 | 
			
		||||
 | 
			
		||||
* U-boot, depthcharge, FILO, etc.
 | 
			
		||||
 | 
			
		||||
There’s [https://doc.coreboot.org/payloads.html](https://doc.coreboot.org/payloads.
 | 
			
		||||
html) with a list, although it’s not complete.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### What does coreboot leave in memory after it's done initializing the hardware?
 | 
			
		||||
 | 
			
		||||
While coreboot tries to remove itself completely from memory after
 | 
			
		||||
finishing, some tables and data need to remain for the OS. coreboot
 | 
			
		||||
reserves an area in memory known as CBMEM, to save this data after it
 | 
			
		||||
has finished booting. This contains things such as the boot log, tables
 | 
			
		||||
that get passed to the payload, SMBIOS, and ACPI tables for the OS.
 | 
			
		||||
 | 
			
		||||
In addition to CBMEM, on X86 systems, coreboot will typically set up
 | 
			
		||||
SMM, which will remain resident after coreboot exits.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Platforms
 | 
			
		||||
 | 
			
		||||
### What’s the best coreboot platform for a user?
 | 
			
		||||
 | 
			
		||||
The choice of the best coreboot platform for a user can vary depending
 | 
			
		||||
on their specific needs, preferences, and use cases.
 | 
			
		||||
 | 
			
		||||
Typically, people who want a system with a minimum of proprietary
 | 
			
		||||
firmware are restricted to older systems like the Lenovo X220, or more
 | 
			
		||||
expensive, non-x86 solutions like TALOS, from Raptor Engineering.
 | 
			
		||||
 | 
			
		||||
There are a number of companies selling modern systems, but those all
 | 
			
		||||
require more proprietary binaries in addition to coreboot (e.g., Intel
 | 
			
		||||
FSP). However, unlike the older ThinkPads, many of these newer devices
 | 
			
		||||
use open-source embedded controller (EC) firmware, so there are
 | 
			
		||||
tradeoffs with either option.
 | 
			
		||||
 | 
			
		||||
The coreboot project mantains a list of companies selling machines
 | 
			
		||||
which use coreboot on the [website](https://coreboot.org/users.html).
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### What’s the best platform for coreboot development?
 | 
			
		||||
 | 
			
		||||
Similar to the best platform for users, the best platform for
 | 
			
		||||
developers very much depends on what a developer is trying to do.
 | 
			
		||||
 | 
			
		||||
* QEMU is generally the easiest platform for coreboot development, just
 | 
			
		||||
  because it’s easy to run anywhere. However, it’s possible for things
 | 
			
		||||
  to work properly in QEMU but fail miserably on actual hardware.
 | 
			
		||||
 | 
			
		||||
While laptops tend to be harder to develop than desktop platforms, a
 | 
			
		||||
majority of newer platforms on coreboot tend to be laptops. The
 | 
			
		||||
development difficulty is due to a few different factors:
 | 
			
		||||
 | 
			
		||||
1. The EC (Embedded Controller) is a specialized microcontroller that
 | 
			
		||||
   typically handles keyboard and sometimes mouse input for a laptop.
 | 
			
		||||
   It also controls many power management functions such as fans, USB-C
 | 
			
		||||
   power delivery, etc. ECs run mainboard-specific firmware, which is
 | 
			
		||||
   typically undocumented.
 | 
			
		||||
2. ThinkPads (X230, 30-series, 20-series, T430, T540, T520). Sandy
 | 
			
		||||
   Bridge and Ivy Bridge are well-supported. Some may have
 | 
			
		||||
   difficult-to-reach SPI flash chips. Boards with two flash chips (e.g.
 | 
			
		||||
   30-series ThinkPads) are harder to externally reflash as one needs to
 | 
			
		||||
   make sure the non-targeted flash chip remains disabled at all times.
 | 
			
		||||
   The X230 is notoriously sensitive to external reflashing issues.
 | 
			
		||||
3. Laptops often lack a convenient method to obtain firmware boot logs.
 | 
			
		||||
   One can use EHCI debug on older systems and Chromebook-specific
 | 
			
		||||
   solutions for Chromebooks, but one often has to resort to flashconsole
 | 
			
		||||
   (writing coreboot logs to the flash chip where coreboot resides). On
 | 
			
		||||
   the other hand, several desktop mainboards still have a RS-232 serial
 | 
			
		||||
   port.
 | 
			
		||||
 | 
			
		||||
Some of the easiest physical systems to use for coreboot development
 | 
			
		||||
are Chromebooks. Newer Chromebooks allow for debug without opening the
 | 
			
		||||
case. Look for SuzyQ Cables or SuzyQables or instructions on how to
 | 
			
		||||
build one. These cables only work on a specific port in a specific
 | 
			
		||||
orientation. Google [supplies
 | 
			
		||||
specifications](https://chromium.googlesource.com/chromiumos/third_party/hdctools/+/master/docs/ccd.md#SuzyQ-SuzyQable)
 | 
			
		||||
for these cables.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### What platforms does coreboot support?
 | 
			
		||||
 | 
			
		||||
The most accurate way to determine what systems coreboot supports is by
 | 
			
		||||
browsing the src/mainboard tree or running “make menuconfig” and going
 | 
			
		||||
through the “Mainboard” submenu. You can also search Gerrit to see if
 | 
			
		||||
there are any unmerged ports for your board.
 | 
			
		||||
 | 
			
		||||
There is also the board status page
 | 
			
		||||
([https://coreboot.org/status/board-status.html](https://coreboot.org/status/board-status.html)),
 | 
			
		||||
however this does not currently show supported board variants.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## coreboot Development
 | 
			
		||||
 | 
			
		||||
### Can coreboot be ported to [this board]?
 | 
			
		||||
 | 
			
		||||
The best way to determine if coreboot can be ported to a system is to
 | 
			
		||||
see if the processor and chipset is supported. The next step is to see
 | 
			
		||||
whether the system is locked to the proprietary firmware which comes
 | 
			
		||||
with the board.
 | 
			
		||||
 | 
			
		||||
Intel Platforms:
 | 
			
		||||
 | 
			
		||||
* coreboot only supports a few northbridges (back when northbridges
 | 
			
		||||
  were on a separate package), and there's next to no support for
 | 
			
		||||
  "server" platforms (multi-socket and similar things). Here's a list
 | 
			
		||||
  of more recent supported Intel processors:
 | 
			
		||||
    * Alder Lake (2021 - Core Gen 12)
 | 
			
		||||
    * Apollo Lake (2016 - Atom)
 | 
			
		||||
    * Baytrail (2014 - Atom)
 | 
			
		||||
    * Braswell (2016 - Atom)
 | 
			
		||||
    * Broadwell (2014 - Core Gen 5)
 | 
			
		||||
    * Comet Lake (2019 - Core Gen 10)
 | 
			
		||||
    * Cannon Lake (2018 - Core Gen 8/9)
 | 
			
		||||
    * Denverton (2017)
 | 
			
		||||
    * Elkhart lake (2021 - Atom)
 | 
			
		||||
    * Haswell (2013 - Core Gen 4)
 | 
			
		||||
    * Ivy Bridge (2012 - Core Gen 3)
 | 
			
		||||
    * Jasper Lake (2021 - Atom)
 | 
			
		||||
    * Kaby Lake (2016 - Core Gen 7/8)
 | 
			
		||||
    * Meteor Lake (2023 - Gen 1 Ultra-mobile)
 | 
			
		||||
    * Sandy Bridge (2011 - Core Gen 2)
 | 
			
		||||
    * Sky Lake (2015 - Core Gen 6)
 | 
			
		||||
    * Tiger Lake (2020 - Core Gen 11)
 | 
			
		||||
    * Whiskey Lake (2018 - Core Gen 8)
 | 
			
		||||
 | 
			
		||||
* Intel Boot Guard is a security feature which tries to prevent loading
 | 
			
		||||
  unauthorized firmware by the mainboard. If supported by the platform,
 | 
			
		||||
  and the platform is supported by intelmetool, you should check if Boot
 | 
			
		||||
  Guard is enabled. If it is, then getting coreboot to run will be
 | 
			
		||||
  difficult or impossible even if it is ported. You can run
 | 
			
		||||
  `intelmetool -b` on supported platforms to see if Boot Guard is
 | 
			
		||||
  enabled (although it can fail because it wants to probe the ME
 | 
			
		||||
  beforehand).
 | 
			
		||||
 | 
			
		||||
AMD Ryzen-based platforms:
 | 
			
		||||
 | 
			
		||||
* The AMD platforms Ryzen-based platforms unfortunately are currently
 | 
			
		||||
  not well supported outside of the Chromebooks (and AMD reference
 | 
			
		||||
  boards) currently in the tree.
 | 
			
		||||
  The responsible teams are trying to fix this, but currently it's
 | 
			
		||||
  **very** difficult to do a new port. Recent supported SoCs:
 | 
			
		||||
    * Stoney Ridge
 | 
			
		||||
    * Picasso
 | 
			
		||||
    * Cezanne
 | 
			
		||||
    * Mendocino
 | 
			
		||||
    * Phoenix
 | 
			
		||||
 | 
			
		||||
General notes:
 | 
			
		||||
 | 
			
		||||
* Check the output of `lspci` to determine what processor/chipset
 | 
			
		||||
  family your system has. Processor/chipset support is the most
 | 
			
		||||
  important to determine if a board can be ported.
 | 
			
		||||
* Check the output of `superiotool` to see if it detects the Super I/O
 | 
			
		||||
  on the system. You can also check board schematics and/or boardviews
 | 
			
		||||
  if you can find them, or physically look at the mainboard for a chip
 | 
			
		||||
  from one of the common superio vendors.
 | 
			
		||||
* Check what EC your system has (mostly applicable to laptops, but some
 | 
			
		||||
  desktops have EC-like chips). You will likely need to refer to the
 | 
			
		||||
  actual board or schematics/boardviews for this. Physical observation
 | 
			
		||||
  is the most accurate identification procedure; software detection can
 | 
			
		||||
  then be used to double-check if the chip is correct, but one should
 | 
			
		||||
  not rely on software detection alone to identify an EC.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### How do I port coreboot to [this board]?
 | 
			
		||||
 | 
			
		||||
A critical piece for anyone attempting to do a board port is to make
 | 
			
		||||
sure that you have a method to recover your system from a failed flash.
 | 
			
		||||
 | 
			
		||||
We need an updated motherboard porting guide, but currently the guide
 | 
			
		||||
on the [wiki](https://www.coreboot.org/Motherboard_Porting_Guide) looks
 | 
			
		||||
to be the best reference.
 | 
			
		||||
 | 
			
		||||
At the moment, the best answer to this question is to ask for help on
 | 
			
		||||
one of the [various community
 | 
			
		||||
forums](https://doc.coreboot.org/community/forums.html).
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### What about the Intel ME?
 | 
			
		||||
 | 
			
		||||
There seems to be a lot of FUD about what the ME can and can’t do.
 | 
			
		||||
coreboot currently does not have a clear recommendation on how to
 | 
			
		||||
handle the ME. We understand that there are serious concerns about the
 | 
			
		||||
ME, and would like to flatly recommend removing as much as possible,
 | 
			
		||||
however modifying the ME can cause serious stability issues.
 | 
			
		||||
 | 
			
		||||
Additionally, coreboot and the Intel ME are completely separate entites
 | 
			
		||||
which in many cases simply happen to occupy the same flash chip. It is
 | 
			
		||||
not necessary to run coreboot to modify the ME, and running coreboot
 | 
			
		||||
does not imply anything about the ME's operational state.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#### A word of caution about the modifying ME
 | 
			
		||||
 | 
			
		||||
Messing with the ME firmware can cause issues, and this is outside the
 | 
			
		||||
scope of the coreboot project.
 | 
			
		||||
 | 
			
		||||
If you do decide to modify the ME firmware, please make sure coreboot
 | 
			
		||||
works **before** messing with it. Even if the vendor boot firmware
 | 
			
		||||
works when the ME isn't operating normally, it's possible that coreboot
 | 
			
		||||
doesn't handle it the same way and something breaks. If someone asks
 | 
			
		||||
for help with coreboot and we think the ME state may be a factor, we'll
 | 
			
		||||
ask them to try reproducing the issue with the ME running normally to
 | 
			
		||||
reduce the number of variables involved. This is especially important
 | 
			
		||||
when flashing coreboot for the first time, as it's best for newbies to
 | 
			
		||||
start with small steps: start by flashing coreboot to the BIOS region
 | 
			
		||||
and leaving the remaining regions untouched, then tinker around with
 | 
			
		||||
coreboot options (e.g. other payloads, bootsplash, RAM overclock...),
 | 
			
		||||
or try messing with the ME firmware **without changing coreboot**.
 | 
			
		||||
 | 
			
		||||
Most people don't understand the implications of messing with the ME
 | 
			
		||||
firmware, especially the use of `me_cleaner`. We admit that we don't
 | 
			
		||||
know everything about the ME, but we try to understand it as much as
 | 
			
		||||
possible. The ME is designed to operate correctly with the HAP (or
 | 
			
		||||
AltMeDisable) bit set, and it will gracefully enter a debug state (not
 | 
			
		||||
normal, but not an error). However, when using `me_cleaner` to remove
 | 
			
		||||
parts of the ME firmware, the ME will often end up in an error state
 | 
			
		||||
because parts of its FW are missing. It is known that removing some of
 | 
			
		||||
these parts ([`EFFS` and `FCRS` on Cougar Point,
 | 
			
		||||
c.f.](https://review.coreboot.org/c/coreboot/+/27798/6/src/mainboard/asus/p8h61-m_lx/Kconfig#63))
 | 
			
		||||
can cause problems. We do not know whether the state the ME ends up in
 | 
			
		||||
after applying `me_cleaner` is as secure as the state the ME goes to
 | 
			
		||||
when only the HAP bit is set: the removed FW modules could contain
 | 
			
		||||
steps to lock down important settings for security reasons.
 | 
			
		||||
 | 
			
		||||
To sum up, **we do not recommend messing with the ME firmware**. But if
 | 
			
		||||
you have to, please use `ifdtool` to set the HAP bit initially before
 | 
			
		||||
progressing to `me_cleaner` if necessary.
 | 
			
		||||
@@ -9,7 +9,7 @@ friction in the community.
 | 
			
		||||
 | 
			
		||||
Note that as with many rules, there are exceptions. Some have been noted
 | 
			
		||||
in the 'More Detail' section. If you feel there is an exception not listed
 | 
			
		||||
here, please discuss it in the mailing list to get this document updated.
 | 
			
		||||
here, please discuss it in the mailing list to get this document  updated.
 | 
			
		||||
Don't just assume that it's okay, even if someone on IRC says it is.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -41,7 +41,7 @@ project you're submitting the changes to. If you’re submitting code that
 | 
			
		||||
you wrote that might be owned by your employer, make sure that your
 | 
			
		||||
employer is aware and you are authorized to submit the code. For
 | 
			
		||||
clarification, see the Developer's Certificate of Origin in the coreboot
 | 
			
		||||
[Signed-off-by policy](#sign-off-procedure).
 | 
			
		||||
[Signed-off-by policy](https://www.coreboot.org/Development_Guidelines#Sign-off_Procedure).
 | 
			
		||||
 | 
			
		||||
* In general, patches should remain open for review for at least 24 hours
 | 
			
		||||
since the last significant modification to the change. The purpose is to
 | 
			
		||||
@@ -53,10 +53,7 @@ it's implemented, should restart the wait period.
 | 
			
		||||
a recently-introduced issue (build, boot or OS-level compatibility, not
 | 
			
		||||
necessarily identified by coreboot.org facilities). Its commit message
 | 
			
		||||
has to explain what change introduced the problem and the nature of
 | 
			
		||||
the problem so that the emergency need becomes apparent. Avoid stating
 | 
			
		||||
something like "fix build error" in the commit summary, describe what
 | 
			
		||||
the commit does instead, just like any other commit. In addition, it is
 | 
			
		||||
recommended to reference the commit that introduced the issue. The change
 | 
			
		||||
the problem so that the emergency need becomes apparent. The change
 | 
			
		||||
itself should be as limited in scope and impact as possible to make it
 | 
			
		||||
simple to assess the impact. Such a change can be merged early with 3
 | 
			
		||||
Code-Review+2. For emergency fixes that affect a single project (SoC,
 | 
			
		||||
@@ -127,54 +124,6 @@ those platforms. While it would be nice to update any other platforms, you
 | 
			
		||||
must at least provide a path that will allow other platforms to continue
 | 
			
		||||
working.
 | 
			
		||||
 | 
			
		||||
Sign-off Procedure
 | 
			
		||||
------------------
 | 
			
		||||
The coreboot project employs a sign-off procedure similar to what is
 | 
			
		||||
used by the Linux kernel. Each gerrit commit requires a sign-off line
 | 
			
		||||
saying that the contributed code abides by the Developer's certificate
 | 
			
		||||
of origin, below.
 | 
			
		||||
```text
 | 
			
		||||
Signed-off-by: Random J Developer <random@developer.example.org>
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Using '-s' with 'git commit' will automatically add a Signed-off-by line
 | 
			
		||||
to your commit message.  Patches without a Signed-off-by should not be
 | 
			
		||||
pushed to gerrit, and will be rejected by coreboot's CI system.
 | 
			
		||||
 | 
			
		||||
You must use a known identity in the Signed-off-by line. Anonymous
 | 
			
		||||
contributions cannot be committed! This can be anything sufficient to
 | 
			
		||||
identify and contact the source of a contribution, such as your name or
 | 
			
		||||
an established alias/nickname. Refer to [this LKML thread] and the
 | 
			
		||||
[SCO-Linux disputes] for the rationale behind the DCO.
 | 
			
		||||
 | 
			
		||||
Developer's Certificate of Origin 1.1
 | 
			
		||||
 | 
			
		||||
> By making a contribution to this project, I certify that:
 | 
			
		||||
>
 | 
			
		||||
> (a) The contribution was created in whole or in part by me and I have
 | 
			
		||||
> the right to submit it under the open source license indicated in the
 | 
			
		||||
> file; or
 | 
			
		||||
>
 | 
			
		||||
> (b) The contribution is based upon previous work that, to the best of
 | 
			
		||||
> my knowledge, is covered under an appropriate open source license and
 | 
			
		||||
> I have the right under that license to submit that work with
 | 
			
		||||
> modifications, whether created in whole or in part by me, under the
 | 
			
		||||
> same open source license (unless I am permitted to submit under a
 | 
			
		||||
> different license), as indicated in the file; or
 | 
			
		||||
>
 | 
			
		||||
> (c) The contribution was provided directly to me by some other person
 | 
			
		||||
> who certified (a), (b) or (c) and I have not modified it; and
 | 
			
		||||
>
 | 
			
		||||
> (d) In the case of each of (a), (b), or (c), I understand and agree
 | 
			
		||||
> that this project and the contribution are public and that a record of
 | 
			
		||||
> the contribution (including all personal information I submit with it,
 | 
			
		||||
> including my sign-off) is maintained indefinitely and may be
 | 
			
		||||
> redistributed consistent with this project or the open source license
 | 
			
		||||
> indicated in the file.
 | 
			
		||||
 | 
			
		||||
Note: The [Developer's Certificate of Origin 1.1] is licensed under the
 | 
			
		||||
terms of the [Creative Commons Attribution-ShareAlike 2.5 License].
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Recommendations for gerrit activity
 | 
			
		||||
-----------------------------------
 | 
			
		||||
@@ -221,10 +170,7 @@ This helps verify that the patch train won’t tie up the jenkins builders
 | 
			
		||||
for no reason if there are failing patches in the train. For running
 | 
			
		||||
parallel builds, you can specify the number of cores to use by setting the
 | 
			
		||||
the CPUS environment variable. Example:
 | 
			
		||||
 | 
			
		||||
```Bash
 | 
			
		||||
make what-jenkins-does CPUS=8
 | 
			
		||||
```
 | 
			
		||||
        make what-jenkins-does CPUS=8
 | 
			
		||||
 | 
			
		||||
* Use a topic when pushing a train of patches. This groups the commits
 | 
			
		||||
together so people can easily see the connection at the top level of
 | 
			
		||||
@@ -232,10 +178,7 @@ gerrit. Topics can be set for individual patches in gerrit by going into
 | 
			
		||||
the patch and clicking on the icon next to the topic line. Topics can also
 | 
			
		||||
be set when you push the patches into gerrit. For example, to push a set of
 | 
			
		||||
commits with the i915-kernel-x60 set, use the command:
 | 
			
		||||
 | 
			
		||||
```Bash
 | 
			
		||||
git push origin HEAD:refs/for/main%topic=i915-kernel-x60
 | 
			
		||||
```
 | 
			
		||||
        git push origin HEAD:refs/for/master%topic=i915-kernel-x60
 | 
			
		||||
 | 
			
		||||
* If one of your patches isn't ready to be merged, make sure it's obvious
 | 
			
		||||
that you don't feel it's ready for merge yet. The preferred way to show
 | 
			
		||||
@@ -245,28 +188,17 @@ Examples of this are "WIP: title" or "[NEEDS_TEST]: title".  Another way to
 | 
			
		||||
mark the patch as not ready would be to give it a -1 or -2 review, but
 | 
			
		||||
isn't as obvious as the commit message. These patches can also be pushed with
 | 
			
		||||
the wip flag:
 | 
			
		||||
 | 
			
		||||
```Bash
 | 
			
		||||
git push origin HEAD:refs/for/main%wip
 | 
			
		||||
```
 | 
			
		||||
	git push origin HEAD:refs/for/master%wip
 | 
			
		||||
 | 
			
		||||
* When pushing patches that are not for submission, these should be marked
 | 
			
		||||
as such. This can be done in the title ‘[DONOTSUBMIT]’, or can be pushed as
 | 
			
		||||
private changes, so that only explicitly added reviewers will see them. These
 | 
			
		||||
sorts of patches are frequently posted as ideas or RFCs for the community to
 | 
			
		||||
look at. Note that private changes can still be fetched from Gerrit by anybody
 | 
			
		||||
who knows their commit ID, so don't use this for sensitive changes. To push
 | 
			
		||||
a private change, use the command:
 | 
			
		||||
 | 
			
		||||
```Bash
 | 
			
		||||
git push origin HEAD:refs/for/main%private
 | 
			
		||||
```
 | 
			
		||||
sorts of patches are frequently posted as ideas or RFCs for the community
 | 
			
		||||
to look at. To push a private change, use the command:
 | 
			
		||||
        git push origin HEAD:refs/for/master%private
 | 
			
		||||
 | 
			
		||||
* Multiple push options can be combined:
 | 
			
		||||
 | 
			
		||||
```Bash
 | 
			
		||||
git push origin HEAD:refs/for/main%private,wip,topic=experiment
 | 
			
		||||
```
 | 
			
		||||
        git push origin HEAD:refs/for/master%private,wip,topic=experiment
 | 
			
		||||
 | 
			
		||||
* Respond to anyone who has taken the time to review your patches, even if
 | 
			
		||||
it's just to say that you disagree. While it may seem annoying to address a
 | 
			
		||||
@@ -292,7 +224,7 @@ changed.
 | 
			
		||||
helps others and shows that these mainboards are currently being
 | 
			
		||||
maintained. At some point, boards that are not up to date in the
 | 
			
		||||
board-status repo will probably end up getting removed from the coreboot
 | 
			
		||||
main branch.
 | 
			
		||||
master branch.
 | 
			
		||||
 | 
			
		||||
* Abandon patches that are no longer useful, or that you don’t intend to
 | 
			
		||||
keep working on to get submitted.
 | 
			
		||||
@@ -340,15 +272,13 @@ git/gerrit tags by prepending the lines with 'Original-'.  Marking
 | 
			
		||||
the original text this way makes it much easier to tell what changes
 | 
			
		||||
happened in which repository. This applies to these lines, not the actual
 | 
			
		||||
commit message itself:
 | 
			
		||||
 | 
			
		||||
	* Commit-Id:
 | 
			
		||||
	* Change-Id:
 | 
			
		||||
	* Signed-off-by:
 | 
			
		||||
	* Reviewed-on:
 | 
			
		||||
	* Tested-by:
 | 
			
		||||
	* Reviewed-by:
 | 
			
		||||
 | 
			
		||||
The script `util/gitconfig/rebase.sh` can be used to help automate this.
 | 
			
		||||
        Commit-Id:
 | 
			
		||||
        Change-Id:
 | 
			
		||||
        Signed-off-by:
 | 
			
		||||
        Reviewed-on:
 | 
			
		||||
        Tested-by:
 | 
			
		||||
        Reviewed-by:
 | 
			
		||||
The script 'util/gitconfig/rebase.sh' can be used to help automate this.
 | 
			
		||||
Other tags such as 'Commit-Queue' can simply be removed.
 | 
			
		||||
 | 
			
		||||
* Check if there's documentation that needs to be updated to remain current
 | 
			
		||||
@@ -434,7 +364,3 @@ Requests for clarification and suggestions for updates to these guidelines
 | 
			
		||||
should be sent to the coreboot mailing list at <coreboot@coreboot.org>.
 | 
			
		||||
 | 
			
		||||
[ready changes]: https://review.coreboot.org/q/age:1d+project:coreboot+status:open+is:mergeable+label:All-Comments-Resolved%253Dok+label:Code-Review%253D2+-label:Code-Review%253C0+label:Verified%253D1+-label:Verified-1
 | 
			
		||||
[Developer's Certificate of Origin 1.1]: https://developercertificate.org/
 | 
			
		||||
[Creative Commons Attribution-ShareAlike 2.5 License]: https://creativecommons.org/licenses/by-sa/2.5/
 | 
			
		||||
[this LKML thread]: https://lkml.org/lkml/2004/5/23/10
 | 
			
		||||
[SCO-Linux disputes]: https://en.wikipedia.org/wiki/SCO%E2%80%93Linux_disputes
 | 
			
		||||
@@ -162,82 +162,6 @@ The first is configuring a pin as an output, when it was designed to be an
 | 
			
		||||
input. There is a real risk in this case of short-circuiting a component which
 | 
			
		||||
could cause catastrophic failures, up to and including your mainboard!
 | 
			
		||||
 | 
			
		||||
### Intel SoCs
 | 
			
		||||
 | 
			
		||||
As per Intel Platform Controller Hub (PCH) EDS since Skylake, a GPIO PAD register
 | 
			
		||||
supports four different types of GPIO reset as:
 | 
			
		||||
 | 
			
		||||
```eval_rst
 | 
			
		||||
+------------------------+----------------+-------------+-------------+
 | 
			
		||||
|                        |                |         PAD Reset ?       |
 | 
			
		||||
+ PAD Reset Config       + Platform Reset +-------------+-------------+
 | 
			
		||||
|                        |                |     GPP     |     GPD     |
 | 
			
		||||
+========================+================+=============+=============+
 | 
			
		||||
| | 00 - Power Good      |  Warm Reset    |     N       |    N        |
 | 
			
		||||
| | (GPP: RSMRST,        +----------------+-------------+-------------+
 | 
			
		||||
| | GPD: DSW_PWROK)      |  Cold Reset    |     N       |    N        |
 | 
			
		||||
|                        +----------------+-------------+-------------+
 | 
			
		||||
|                        |  S3/S4/S5      |     N       |    N        |
 | 
			
		||||
|                        +----------------+-------------+-------------+
 | 
			
		||||
|                        |  Global Reset  |     N       |    N        |
 | 
			
		||||
|                        +----------------+-------------+-------------+
 | 
			
		||||
|                        |  Deep Sx       |     Y       |    N        |
 | 
			
		||||
|                        +----------------+-------------+-------------+
 | 
			
		||||
|                        |  G3            |     Y       |    Y        |
 | 
			
		||||
+------------------------+----------------+-------------+-------------+
 | 
			
		||||
| 01 - Deep              |  Warm Reset    |     Y       |    Y        |
 | 
			
		||||
|                        +----------------+-------------+-------------+
 | 
			
		||||
|                        |  Cold Reset    |     Y       |    Y        |
 | 
			
		||||
|                        +----------------+-------------+-------------+
 | 
			
		||||
|                        |  S3/S4/S5      |     N       |    N        |
 | 
			
		||||
|                        +----------------+-------------+-------------+
 | 
			
		||||
|                        |  Global Reset  |     Y       |    Y        |
 | 
			
		||||
|                        +----------------+-------------+-------------+
 | 
			
		||||
|                        |  Deep Sx       |     Y       |    Y        |
 | 
			
		||||
|                        +----------------+-------------+-------------+
 | 
			
		||||
|                        |  G3            |     Y       |    Y        |
 | 
			
		||||
+------------------------+----------------+-------------+-------------+
 | 
			
		||||
| 10 - Host Reset/PLTRST |  Warm Reset    |     Y       |    Y        |
 | 
			
		||||
|                        +----------------+-------------+-------------+
 | 
			
		||||
|                        |  Cold Reset    |     Y       |    Y        |
 | 
			
		||||
|                        +----------------+-------------+-------------+
 | 
			
		||||
|                        |  S3/S4/S5      |     Y       |    Y        |
 | 
			
		||||
|                        +----------------+-------------+-------------+
 | 
			
		||||
|                        |  Global Reset  |     Y       |    Y        |
 | 
			
		||||
|                        +----------------+-------------+-------------+
 | 
			
		||||
|                        |  Deep Sx       |     Y       |    Y        |
 | 
			
		||||
|                        +----------------+-------------+-------------+
 | 
			
		||||
|                        |  G3            |     Y       |    Y        |
 | 
			
		||||
+------------------------+----------------+-------------+-------------+
 | 
			
		||||
| | 11 - Resume Reset    |  Warm Reset    |     n/a     |    N        |
 | 
			
		||||
| | (GPP: Reserved,      +----------------+-------------+-------------+
 | 
			
		||||
| | GPD: RSMRST)         |  Cold Reset    |     n/a     |    N        |
 | 
			
		||||
|                        +----------------+-------------+-------------+
 | 
			
		||||
|                        |  S3/S4/S5      |     n/a     |    N        |
 | 
			
		||||
|                        +----------------+-------------+-------------+
 | 
			
		||||
|                        |  Global Reset  |     n/a     |    N        |
 | 
			
		||||
|                        +----------------+-------------+-------------+
 | 
			
		||||
|                        |  Deep Sx       |     n/a     |    Y        |
 | 
			
		||||
|                        +----------------+-------------+-------------+
 | 
			
		||||
|                        |  G3            |     n/a     |    Y        |
 | 
			
		||||
+------------------------+----------------+-------------+-------------+
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Each GPIO Community has a Pad Configuration Lock register for a GPP allowing locking
 | 
			
		||||
specific register fields in the PAD configuration register.
 | 
			
		||||
 | 
			
		||||
The Pad Config Lock registers reset type is default hardcoded to **Power Good** and
 | 
			
		||||
it's **not** configurable by GPIO PAD DW0.PadRstCfg. Hence, it may appear that for a GPP,
 | 
			
		||||
the Pad Reset Config (DW0 Bit 31) is configured differently from `Power Good`.
 | 
			
		||||
 | 
			
		||||
This would create confusion where the Pad configuration is returned to its `default`
 | 
			
		||||
value but remains `locked`, this would prevent software to reprogram the GPP.
 | 
			
		||||
Additionally, this means software can't rely on GPIOs being reset by PLTRST# or Sx entry.
 | 
			
		||||
 | 
			
		||||
Hence, as per GPIO BIOS Writers Guide (BWG) it's recommended to change the Pad Reset
 | 
			
		||||
Configuration for lock GPP as `Power Good` so that pad configuration and lock bit are
 | 
			
		||||
always in sync and can be reset at the same time.
 | 
			
		||||
 | 
			
		||||
## Soft Straps
 | 
			
		||||
 | 
			
		||||
Soft straps, that can be configured by the vendor in the Intel Flash Image Tool
 | 
			
		||||
 
 | 
			
		||||
@@ -4,7 +4,7 @@
 | 
			
		||||
* [Build System](build_system.md)
 | 
			
		||||
* [Submodules](submodules.md)
 | 
			
		||||
* [Kconfig](kconfig.md)
 | 
			
		||||
* [Gerrit Guidelines](gerrit_guidelines.md)
 | 
			
		||||
* [Documentation License](license.md)
 | 
			
		||||
* [Writing Documentation](writing_documentation.md)
 | 
			
		||||
* [Setting up GPIOs](gpio.md)
 | 
			
		||||
* [Adding devices to a device tree](devicetree.md)
 | 
			
		||||
* [Frequently Asked Questions](faq.md)
 | 
			
		||||
 
 | 
			
		||||
@@ -69,6 +69,9 @@ These variables are typically set in the makefiles or on the make command line.
 | 
			
		||||
These variables were added to Kconfig specifically for coreboot and are not
 | 
			
		||||
included in the Linux version.
 | 
			
		||||
 | 
			
		||||
- KCONFIG_STRICT=value. Define to enable warnings as errors.   This is enabled
 | 
			
		||||
  in coreboot, and should not be changed.
 | 
			
		||||
 | 
			
		||||
- KCONFIG_NEGATIVES=value. Define to show negative values in the autoconf.h file
 | 
			
		||||
  (build/config.h). This is enabled in coreboot, and should not be changed.
 | 
			
		||||
 | 
			
		||||
@@ -99,9 +102,6 @@ included in the Linux version.
 | 
			
		||||
- KCONFIG_SPLITCONFIG=”directory name for individual SYMBOL.h files”.
 | 
			
		||||
  coreboot sets this to $(obj)/config.
 | 
			
		||||
 | 
			
		||||
- KCONFIG_WERROR=value. Define to enable warnings as errors. This is enabled
 | 
			
		||||
  in coreboot, and should not be changed.
 | 
			
		||||
 | 
			
		||||
#### Used only for ‘make menuconfig’
 | 
			
		||||
- MENUCONFIG_MODE=single_menu.  Set to "single_menu" to enable.  All other
 | 
			
		||||
  values disable the option.  This makes submenus appear below the menu option
 | 
			
		||||
@@ -786,7 +786,7 @@ select <symbol> \[if <expr>\]
 | 
			
		||||
    config TPM
 | 
			
		||||
        bool
 | 
			
		||||
        default n
 | 
			
		||||
        select MEMORY_MAPPED_TPM if ARCH_X86
 | 
			
		||||
        select LPC_TPM if ARCH_X86
 | 
			
		||||
        select I2C_TPM if ARCH_ARM
 | 
			
		||||
        select I2C_TPM if ARCH_ARM64
 | 
			
		||||
        help
 | 
			
		||||
@@ -963,7 +963,7 @@ variable.  This is not set in coreboot, which uses the default CONFIG_ prefix
 | 
			
		||||
for all of its symbols.
 | 
			
		||||
 | 
			
		||||
The coreboot makefile forces the config.h file to be included into all coreboot
 | 
			
		||||
C files. This is done in Makefile.mk on the compiler command line using the
 | 
			
		||||
C files. This is done in Makefile.inc on the compiler command line using the
 | 
			
		||||
“-include $(obj)/config.h” command line option.
 | 
			
		||||
 | 
			
		||||
Example of various symbol types in the config.h file:
 | 
			
		||||
@@ -1160,6 +1160,10 @@ saved .config file. As always, a 'select' statement overrides any specified
 | 
			
		||||
- coreboot has added the glob operator '*' for the 'source' keyword.
 | 
			
		||||
- coreboot’s Kconfig always defines variables except for strings. In other
 | 
			
		||||
  Kconfig implementations, bools set to false/0/no are not defined.
 | 
			
		||||
- coreboot’s version of Kconfig adds the KCONFIG_STRICT environment variable to
 | 
			
		||||
  error out if there are any issues in the Kconfig files.  In the Linux kernel,
 | 
			
		||||
  Kconfig will generate a warning, but will still output an updated .config or
 | 
			
		||||
  config.h file.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Kconfig Editor Highlighting
 | 
			
		||||
 
 | 
			
		||||
@@ -159,5 +159,5 @@ TOC tree.
 | 
			
		||||
[guide]: http://www.sphinx-doc.org/en/stable/install.html
 | 
			
		||||
[Sphinx]: http://www.sphinx-doc.org/en/master/
 | 
			
		||||
[Markdown Guide]: https://www.markdownguide.org/
 | 
			
		||||
[Gerrit Guidelines]: ../contributing/gerrit_guidelines.md
 | 
			
		||||
[Gerrit Guidelines]: gerrit_guidelines.md
 | 
			
		||||
[review.coreboot.org]: https://review.coreboot.org
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,7 @@
 | 
			
		||||
 | 
			
		||||
A coreboot image for an Intel SoC contains two separate definitions of the
 | 
			
		||||
layout of the flash. The Intel Flash Descriptor (IFD) which defines offsets and
 | 
			
		||||
sizes of various regions of flash and the [coreboot FMAP](../../lib/flashmap.md).
 | 
			
		||||
sizes of various regions of flash and the [coreboot FMAP](../lib/flashmap.md).
 | 
			
		||||
 | 
			
		||||
The FMAP should define all of the of the regions defined by the IFD to ensure
 | 
			
		||||
that those regions are accounted for by coreboot and will not be accidentally
 | 
			
		||||
@@ -29,7 +29,7 @@ way to categorize anything required by the SoC but not provided by coreboot.
 | 
			
		||||
+------------+------------------+-----------+-------------------------------------------+
 | 
			
		||||
| 4          | Platform Data    | SI_PDR    |                                           |
 | 
			
		||||
+------------+------------------+-----------+-------------------------------------------+
 | 
			
		||||
| 8          | EC Firmware      | SI_EC     | Most ChromeOS devices do not use this     |
 | 
			
		||||
| 8          | EC Firmware      | SI_EC     | Most Chrome OS devices do not use this    |
 | 
			
		||||
|            |                  |           | region; EC firmware is stored in BIOS     |
 | 
			
		||||
|            |                  |           | region of flash                           |
 | 
			
		||||
+------------+------------------+-----------+-------------------------------------------+
 | 
			
		||||
@@ -1,13 +1,9 @@
 | 
			
		||||
# Welcome to the coreboot documentation
 | 
			
		||||
 | 
			
		||||
This is the developer documentation for [coreboot](https://coreboot.org).
 | 
			
		||||
It is built from Markdown files in the [Documentation] directory in the
 | 
			
		||||
source code.
 | 
			
		||||
 | 
			
		||||
## Spelling of coreboot
 | 
			
		||||
 | 
			
		||||
The correct spelling of coreboot is completely in lower case characters and in
 | 
			
		||||
one word without a space between the two parts.
 | 
			
		||||
It is built from Markdown files in the
 | 
			
		||||
[Documentation](https://review.coreboot.org/cgit/coreboot.git/tree/Documentation)
 | 
			
		||||
directory in the source code.
 | 
			
		||||
 | 
			
		||||
## Purpose of coreboot
 | 
			
		||||
 | 
			
		||||
@@ -25,7 +21,7 @@ initialization routines across many different use cases, no matter if
 | 
			
		||||
they provide standard interfaces or entirely custom boot flows.
 | 
			
		||||
 | 
			
		||||
Popular [payloads](payloads.md) in use with coreboot are SeaBIOS,
 | 
			
		||||
which provides PCBIOS services, edk2, which provides UEFI services,
 | 
			
		||||
which provides PCBIOS services, Tianocore, which provides UEFI services,
 | 
			
		||||
GRUB2, the bootloader used by many Linux distributions, or depthcharge,
 | 
			
		||||
a custom boot loader used on Chromebooks.
 | 
			
		||||
 | 
			
		||||
@@ -142,13 +138,13 @@ say hello!
 | 
			
		||||
## Getting the source code
 | 
			
		||||
 | 
			
		||||
coreboot is primarily developed in the
 | 
			
		||||
[git](https://review.coreboot.org/plugins/gitiles/coreboot) version control
 | 
			
		||||
[git](https://review.coreboot.org/cgit/coreboot.git) version control
 | 
			
		||||
system, using [Gerrit](https://review.coreboot.org) to manage
 | 
			
		||||
contributions and code review.
 | 
			
		||||
 | 
			
		||||
In general we try to keep the `main` branch in the repository functional
 | 
			
		||||
In general we try to keep the `master` branch in the repository functional
 | 
			
		||||
for all hardware we support. So far, the only guarantee we can make is
 | 
			
		||||
that the main branch will (nearly) always build for all boards in a
 | 
			
		||||
that the master branch will (nearly) always build for all boards in a
 | 
			
		||||
standard configuration.
 | 
			
		||||
 | 
			
		||||
However, we're continually working on improvements to our infrastructure to
 | 
			
		||||
@@ -172,8 +168,14 @@ Contents:
 | 
			
		||||
 | 
			
		||||
* [Getting Started](getting_started/index.md)
 | 
			
		||||
* [Tutorial](tutorial/index.md)
 | 
			
		||||
* [Contributing](contributing/index.md)
 | 
			
		||||
* [Community](community/index.md)
 | 
			
		||||
* [Coding Style](contributing/coding_style.md)
 | 
			
		||||
* [Project Ideas](contributing/project_ideas.md)
 | 
			
		||||
* [Documentation Ideas](contributing/documentation_ideas.md)
 | 
			
		||||
* [Code of Conduct](community/code_of_conduct.md)
 | 
			
		||||
* [Language style](community/language_style.md)
 | 
			
		||||
* [Community forums](community/forums.md)
 | 
			
		||||
* [Project services](community/services.md)
 | 
			
		||||
* [coreboot at conferences](community/conferences.md)
 | 
			
		||||
* [Payloads](payloads.md)
 | 
			
		||||
* [Distributions](distributions.md)
 | 
			
		||||
* [Technotes](technotes/index.md)
 | 
			
		||||
@@ -192,12 +194,6 @@ Contents:
 | 
			
		||||
* [SuperIO](superio/index.md)
 | 
			
		||||
* [Vendorcode](vendorcode/index.md)
 | 
			
		||||
* [Utilities](util.md)
 | 
			
		||||
* [Software Bill of Materials](sbom/sbom.md)
 | 
			
		||||
* [Project infrastructure & services](infrastructure/index.md)
 | 
			
		||||
* [Boards supported in each release directory](releases/boards_supported_on_branches.md)
 | 
			
		||||
* [Release notes](releases/index.md)
 | 
			
		||||
* [Acronyms & Definitions](acronyms.md)
 | 
			
		||||
* [External Resources](external_docs.md)
 | 
			
		||||
* [Documentation License](documentation_license.md)
 | 
			
		||||
 | 
			
		||||
[Documentation]: https://review.coreboot.org/plugins/gitiles/coreboot/+/refs/heads/main/Documentation/
 | 
			
		||||
* [coreboot infrastructure](infrastructure/index.md)
 | 
			
		||||
* [Release notes for past releases](releases/index.md)
 | 
			
		||||
* [Flashing firmware tutorial](flash_tutorial/index.md)
 | 
			
		||||
 
 | 
			
		||||
@@ -1,52 +0,0 @@
 | 
			
		||||
# Operating our services
 | 
			
		||||
 | 
			
		||||
## Mailing list moderation
 | 
			
		||||
 | 
			
		||||
Our [mailing lists] experience the same barrage of spam mails than any
 | 
			
		||||
other email address. We do have a spam filter in front of it, and
 | 
			
		||||
since the lists require registration, spam ends up in the moderation
 | 
			
		||||
queue. But not only spam ends up there, sometimes users send inquiries
 | 
			
		||||
without registering first. It's a custom of the project to let these
 | 
			
		||||
through, so that such emails can be discussed. This requires manual
 | 
			
		||||
intervention.
 | 
			
		||||
 | 
			
		||||
This section describes the tasks related to mailing list management.
 | 
			
		||||
 | 
			
		||||
### Registration
 | 
			
		||||
 | 
			
		||||
To participate in mailing list moderation, you need to become a list
 | 
			
		||||
moderator or owner. This is up for the existing owners to handle and
 | 
			
		||||
if you want to contribute in that area, it might be best to bring it
 | 
			
		||||
up at the leadership meeting.
 | 
			
		||||
 | 
			
		||||
After gaining leadership approval, list admins can add you to the
 | 
			
		||||
appropriate group in the [mailing list backend] by selecting the list,
 | 
			
		||||
then User / group-name, and add your email address there.
 | 
			
		||||
 | 
			
		||||
### Regular tasks
 | 
			
		||||
 | 
			
		||||
Most of our lists are auto-subscribing, so users can register
 | 
			
		||||
themselves and finish the process by responding to the double-opt-in
 | 
			
		||||
email. Some lists are manually managed though. The [mailing list
 | 
			
		||||
backend] shows the number of open subscription requests for these
 | 
			
		||||
lists on the mailing list's main page.
 | 
			
		||||
 | 
			
		||||
It also provides a list of held messages, where they can be accepted,
 | 
			
		||||
rejected or dropped. Spam should be dropped, that's clear. Emails with
 | 
			
		||||
huge attachments (e.g. screenshots) should be rejected, which gives
 | 
			
		||||
you an opportunity to explain the reason (in case of large
 | 
			
		||||
attachments, something like "Please re-send without attachments, offer
 | 
			
		||||
the files through some other mechanism please: Our emails are
 | 
			
		||||
distributed to hundreds of readers, and sending the files to everybody
 | 
			
		||||
is inconsiderate of traffic and storage constraints.")
 | 
			
		||||
 | 
			
		||||
Legit emails (often simple requests of the form "is this or that
 | 
			
		||||
supported") can be accepted, which means they'll be sent out.
 | 
			
		||||
 | 
			
		||||
If you notice recurring spam sources (e.g. marketers) you can put them
 | 
			
		||||
on the [global ban list] to filter them out across all lists. It takes
 | 
			
		||||
entries in regular expression format.
 | 
			
		||||
 | 
			
		||||
[mailing lists]: https://mail.coreboot.org/hyperkitty/
 | 
			
		||||
[mailing list backend]: https://mail.coreboot.org/postorius/
 | 
			
		||||
[global ban list]: https://mail.coreboot.org/postorius/bans/
 | 
			
		||||
@@ -8,8 +8,8 @@ Let a jenkins admin know that you’re interested in setting up a jenkins
 | 
			
		||||
build system.
 | 
			
		||||
 | 
			
		||||
For a permanent build system, this should generally be a dedicated
 | 
			
		||||
machine workstation or server class machine that is not generally being
 | 
			
		||||
used for other purposes.  The coreboot builds are very intensive.
 | 
			
		||||
machine that is not generally being used for other purposes.  The
 | 
			
		||||
coreboot builds are very intensive.
 | 
			
		||||
 | 
			
		||||
It's also best to be aware that although we don't know of any security
 | 
			
		||||
issues, the jenkins-node image is run with the privileged flag which
 | 
			
		||||
@@ -24,80 +24,56 @@ issues.
 | 
			
		||||
 | 
			
		||||
Currently active Jenkins admins:
 | 
			
		||||
*   Patrick Georgi:
 | 
			
		||||
    *   Email: [patrick@coreboot.org](mailto:patrick@coreboot.org)
 | 
			
		||||
*   Martin Roth:
 | 
			
		||||
    *   Email: [gaumless@gmail.com](mailto:gaumless@gmail.com)
 | 
			
		||||
    *   IRC: martinr
 | 
			
		||||
    *   Email: [patrick@georgi-clan.de](mailto:patrick@georgi-clan.de)
 | 
			
		||||
    *   IRC: pgeorgi
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Build Machine requirements
 | 
			
		||||
 | 
			
		||||
For a builder, we need a very fast system with lots of threads and
 | 
			
		||||
plenty of RAM.  The builder builds and stores the git repos and output
 | 
			
		||||
in tmpfs along with the ccache save area, so if there isn't enough
 | 
			
		||||
memory, the builds will slow down because of smaller ccache areas and
 | 
			
		||||
can run into "out of storage space" errors.
 | 
			
		||||
For a builder, we need a fast system with lots of threads and plenty of
 | 
			
		||||
RAM.  The builder builds and stores the git repos and output in tmpfs
 | 
			
		||||
along with the ccache save area, so if there isn't enough memory, the
 | 
			
		||||
builds will slow down because of smaller ccache areas and can run into
 | 
			
		||||
"out of storage space" errors.
 | 
			
		||||
 | 
			
		||||
#### Current Build Machines
 | 
			
		||||
 | 
			
		||||
To give an idea of what a suitable build machine might be, currently the
 | 
			
		||||
coreboot project has 6 active jenkins build machines.
 | 
			
		||||
 | 
			
		||||
These times are taken from the week of Feb 21 - Feb 28, 2022
 | 
			
		||||
coreboot project has 3 active jenkins build machines.
 | 
			
		||||
 | 
			
		||||
* Congenialbuilder - 128 threads, 256GiB RAM
 | 
			
		||||
  * Coverity Builds, Toolchain builds, Scanbuild-builds
 | 
			
		||||
  * Fastest Passing coreboot gerrit build: 6 min, 47 sec
 | 
			
		||||
  * Slowest Passing coreboot gerrit build: 14 min
 | 
			
		||||
  *  Fastest Passing coreboot gerrit build: 4 min, 30 sec
 | 
			
		||||
  *  Slowest Passing coreboot gerrit build: 9 min, 56 sec
 | 
			
		||||
 | 
			
		||||
* Gleefulbuilder - 64 threads, 64GiB RAM
 | 
			
		||||
  * Fastest Passing coreboot gerrit build: 10 min
 | 
			
		||||
  * Slowest Passing coreboot gerrit build: 46 min
 | 
			
		||||
 | 
			
		||||
* Fabulousbuilder - 64 threads, 64GiB RAM
 | 
			
		||||
  * Fastest Passing coreboot gerrit build: 7 min, 56 sec
 | 
			
		||||
  * Slowest Passing coreboot gerrit build: 56 min (No ccache)
 | 
			
		||||
* Gleeful builder - 64 thread, 64GiB RAM
 | 
			
		||||
  *  Fastest Passing coreboot gerrit build: 6 min, 6 sec
 | 
			
		||||
  *  Slowest Passing coreboot gerrit build, 34 min
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* Ultron (9elements) - 48 threads, 128GiB RAM
 | 
			
		||||
  * Fastest Passing coreboot gerrit build: 12 min
 | 
			
		||||
  * Slowest Passing coreboot gerrit build: 58 min
 | 
			
		||||
 | 
			
		||||
* Bob - 64 threads, 128GiB RAM
 | 
			
		||||
  * Fastest Passing coreboot gerrit build: 7 min
 | 
			
		||||
  * Slowest Passing coreboot gerrit build: 34 min
 | 
			
		||||
 | 
			
		||||
* Pokeybuilder - 32 Threads, 96GiB RAM
 | 
			
		||||
  * Runs coreboot-checkpatch and other lighter builds
 | 
			
		||||
  *  Fastest Passing coreboot gerrit build: 6 min, 32 sec
 | 
			
		||||
  *  Slowest Passing coreboot gerrit build: 44 min
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Jenkins Builds
 | 
			
		||||
 | 
			
		||||
There are a number of builds handled by the coreboot jenkins builders,
 | 
			
		||||
for a number of different projects - coreboot, flashrom, memtest86+,
 | 
			
		||||
em100, etc.  Many of these have builders for their current main branch
 | 
			
		||||
as well as Gerrit and [Coverity](coverity.md) builds.
 | 
			
		||||
em100, etc.  Many of these have builders for their current master branch
 | 
			
		||||
as well as gerrit and coverity builds.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#### Long builds - over 90 minutes on congenialbuilder
 | 
			
		||||
There are a few builds that take a long time even on the fastest
 | 
			
		||||
machines.  These tasks run overnight in the US timezones.
 | 
			
		||||
* coreboot_coverity - 9 to 12 hours
 | 
			
		||||
* coreboot_scanbuild - ~3 hours
 | 
			
		||||
* coreboot_toolchain - ~1 hour 45 minutes
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#### All builds
 | 
			
		||||
 | 
			
		||||
You can see all the builds in the main jenkins interface:
 | 
			
		||||
You can see all the builds here:
 | 
			
		||||
[https://qa.coreboot.org/](https://qa.coreboot.org/)
 | 
			
		||||
 | 
			
		||||
Most of the time on the builders is taken up by the coreboot main and
 | 
			
		||||
coreboot gerrit builds.
 | 
			
		||||
Most of the time on the builders is taken up by the coreboot master and
 | 
			
		||||
gerrit builds.
 | 
			
		||||
 | 
			
		||||
* [coreboot gerrit build](https://qa.coreboot.org/job/coreboot-gerrit/)
 | 
			
		||||
([Time trend](https://qa.coreboot.org/job/coreboot-gerrit/buildTimeTrend))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* [coreboot main build](https://qa.coreboot.org/job/coreboot/)
 | 
			
		||||
* [coreboot master build](https://qa.coreboot.org/job/coreboot/)
 | 
			
		||||
 ([Time trend](https://qa.coreboot.org/job/coreboot/buildTimeTrend))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -109,8 +85,8 @@ hour.
 | 
			
		||||
 | 
			
		||||
On a system with 32 cores, it was tested with this command:
 | 
			
		||||
 | 
			
		||||
```sh
 | 
			
		||||
stress-ng --cpu 20 --io 6 --vm 6 --vm-bytes 1G --verify --metrics-brief -t 60m
 | 
			
		||||
```
 | 
			
		||||
$ stress-ng --cpu 20 --io 6 --vm 6 --vm-bytes 1G --verify --metrics-brief -t 60m
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
You can watch the temperature with the sensors package or with ‘acpi -t’
 | 
			
		||||
@@ -120,8 +96,8 @@ You can check for thermal throttling by running this command and seeing
 | 
			
		||||
if the values go down on any of the cores after it's been running for a
 | 
			
		||||
while.
 | 
			
		||||
 | 
			
		||||
```sh
 | 
			
		||||
while [ true ]; do clear; cat /proc/cpuinfo | grep 'cpu MHz' ; sleep 1; done
 | 
			
		||||
```
 | 
			
		||||
$ while [ true ]; do clear; cat /proc/cpuinfo | grep 'cpu MHz' ; sleep 1; done
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
If the machine throttles or resets, you probably need to upgrade the
 | 
			
		||||
@@ -151,23 +127,10 @@ the machine remotely (if you allow them).
 | 
			
		||||
 | 
			
		||||
### Install and set up docker
 | 
			
		||||
 | 
			
		||||
Install docker by following [the
 | 
			
		||||
directions](https://docs.docker.com/engine/install/) on the docker site.
 | 
			
		||||
These instructions keep changing, so just check the latest information.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Set up the system for the jenkins builder
 | 
			
		||||
 | 
			
		||||
As a regular user - *Not root*, run:
 | 
			
		||||
 | 
			
		||||
```sh
 | 
			
		||||
sudo mkdir -p ${COREBOOT_JENKINS_CACHE_DIR}
 | 
			
		||||
sudo mkdir -p ${COREBOOT_JENKINS_CCACHE_DIR}
 | 
			
		||||
sudo chown $(whoami):$(whoami) ${COREBOOT_JENKINS_CCACHE_DIR}
 | 
			
		||||
sudo chown $(whoami):$(whoami) ${COREBOOT_JENKINS_CACHE_DIR}
 | 
			
		||||
wget http://www.dediprog.com/save/78.rar/to/EM100Pro.rar
 | 
			
		||||
mv EM100Pro.rar ${COREBOOT_JENKINS_CACHE_DIR}
 | 
			
		||||
```
 | 
			
		||||
Install docker by following the
 | 
			
		||||
[directions](https://docs.docker.com/engine/install/) on the docker
 | 
			
		||||
site.  These instructions keep changing, so just check the latest
 | 
			
		||||
information.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#### Set up environment variables
 | 
			
		||||
@@ -176,12 +139,12 @@ To make configuration and the later commands easier, these should go in
 | 
			
		||||
your shell's .rc file.  Note that you only need to set them if you're
 | 
			
		||||
using something other than the default.
 | 
			
		||||
 | 
			
		||||
```sh
 | 
			
		||||
```
 | 
			
		||||
# Set the port used on your machine to connect to jenkins.
 | 
			
		||||
export COREBOOT_JENKINS_PORT=49151
 | 
			
		||||
 | 
			
		||||
# Set the revision of the container from [docker hub](https://hub.docker.com/repository/docker/coreboot/coreboot-sdk)
 | 
			
		||||
export DOCKER_COMMIT=2021-09-23_b0d87f753c
 | 
			
		||||
# Set the revision of the container from docker hub
 | 
			
		||||
export DOCKER_COMMIT=65718760fa
 | 
			
		||||
 | 
			
		||||
# Set the location of where the jenkins cache directory will be.
 | 
			
		||||
export COREBOOT_JENKINS_CACHE_DIR="/srv/docker/coreboot-builder/cache"
 | 
			
		||||
@@ -198,13 +161,13 @@ continuing to the next step.
 | 
			
		||||
 | 
			
		||||
From the coreboot directory, run
 | 
			
		||||
 | 
			
		||||
```sh
 | 
			
		||||
```
 | 
			
		||||
make -C util/docker help
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
This will show you the available targets and variables needed:
 | 
			
		||||
 | 
			
		||||
```text
 | 
			
		||||
```
 | 
			
		||||
Commands for working with docker images:
 | 
			
		||||
  coreboot-sdk                 - Build coreboot-sdk container
 | 
			
		||||
  upload-coreboot-sdk          - Upload coreboot-sdk to hub.docker.com
 | 
			
		||||
@@ -236,10 +199,22 @@ Variables:
 | 
			
		||||
  DOCKER_COMMIT=65718760fa
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### Set up the system for the jenkins builder
 | 
			
		||||
 | 
			
		||||
As a regular user - *Not root*, run:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
sudo mkdir -p ${COREBOOT_JENKINS_CACHE_DIR}
 | 
			
		||||
sudo mkdir -p ${COREBOOT_JENKINS_CCACHE_DIR}
 | 
			
		||||
sudo chown $(whoami):$(whoami) ${COREBOOT_JENKINS_CCACHE_DIR}
 | 
			
		||||
sudo chown $(whoami):$(whoami) ${COREBOOT_JENKINS_CACHE_DIR}
 | 
			
		||||
wget http://www.dediprog.com/save/78.rar/to/EM100Pro.rar
 | 
			
		||||
mv EM100Pro.rar ${COREBOOT_JENKINS_CACHE_DIR}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### Install the coreboot jenkins builder
 | 
			
		||||
 | 
			
		||||
```sh
 | 
			
		||||
```
 | 
			
		||||
make -C util/docker docker-jenkins-server
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
@@ -251,17 +226,17 @@ machine profile on qa.coreboot.org.
 | 
			
		||||
 | 
			
		||||
They need to know:
 | 
			
		||||
*   Your external IP address or domain name.  If you don’t have a static
 | 
			
		||||
    IP, make sure you have a dynamic dns hostname configured.
 | 
			
		||||
IP, make sure you have a dynamic dns hostname configured.
 | 
			
		||||
*   The port on your machine and firewall that’s exposed for jenkins:
 | 
			
		||||
    `$COREBOOT_JENKINS_PORT`
 | 
			
		||||
`$COREBOOT_JENKINS_PORT`
 | 
			
		||||
*   The core count of the machine.
 | 
			
		||||
*   How much memory is available on the machine.  This helps determine
 | 
			
		||||
    the amount of memory used for ccache.
 | 
			
		||||
the amount of memory used for ccache.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### First build
 | 
			
		||||
On the first build after a machine is reset, it will frequently take
 | 
			
		||||
an hour to do the entire what-jenkins-does build while the ccache
 | 
			
		||||
20-25 minutes to do the entire what-jenkins-does build while the ccache
 | 
			
		||||
is getting filled up and the entire coreboot repo gets downloaded.  As
 | 
			
		||||
the ccache gets populated, the build time will drop.
 | 
			
		||||
 | 
			
		||||
@@ -270,40 +245,39 @@ the ccache gets populated, the build time will drop.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### How to log in to the docker instance for debugging
 | 
			
		||||
 | 
			
		||||
```sh
 | 
			
		||||
make -C util/docker docker-jenkins-attach
 | 
			
		||||
su coreboot
 | 
			
		||||
cd ~/slave-root/workspace
 | 
			
		||||
bash
 | 
			
		||||
```
 | 
			
		||||
    $ make -C util/docker docker-jenkins-attach
 | 
			
		||||
    $ su coreboot
 | 
			
		||||
    $ cd ~/slave-root/workspace
 | 
			
		||||
    $ bash
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
WARNING: This should not be used to make changes to the build system,
 | 
			
		||||
but just to debug issues. Changes to the build system image are highly
 | 
			
		||||
but just to debug issues. Changes to the build system are highly
 | 
			
		||||
discouraged as it leads to situations where patches can pass the build
 | 
			
		||||
testing on one builder and fail on another builder. Any changes that are
 | 
			
		||||
made in the image will be lost on the next update, so if you
 | 
			
		||||
accidentally change something, you can remove the containers and images,
 | 
			
		||||
then update to get a fresh installation.
 | 
			
		||||
accidentally change something, you can remove the containers and images
 | 
			
		||||
and update to get a fresh installation.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### How to download containers/images for a fresh installation and remove old containers
 | 
			
		||||
 | 
			
		||||
To delete the old containers & images:
 | 
			
		||||
 | 
			
		||||
```sh
 | 
			
		||||
docker stop $COREBOOT_JENKINS_CONTAINER
 | 
			
		||||
docker rm $COREBOOT_JENKINS_CONTAINER
 | 
			
		||||
docker images # lists all existing images
 | 
			
		||||
docker rmi XXXX # Use the image ID found in the above command.
 | 
			
		||||
```
 | 
			
		||||
$ docker stop $COREBOOT_JENKINS_CONTAINER
 | 
			
		||||
$ docker rm $COREBOOT_JENKINS_CONTAINER
 | 
			
		||||
$ docker images # lists all existing images
 | 
			
		||||
$ docker rmi XXXX # Use the image ID found in the above command.
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
To get and run the new coreboot-jenkins image, change the value in the
 | 
			
		||||
`DOCKER_COMMIT` variable to the new image value.
 | 
			
		||||
 | 
			
		||||
```sh
 | 
			
		||||
make -C util/docker docker-jenkins-server
 | 
			
		||||
```
 | 
			
		||||
$ make -C util/docker docker-jenkins-server
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
#### Getting ready to push the docker images
 | 
			
		||||
@@ -317,15 +291,15 @@ Get an admin to add the account to the coreboot team on hub.docker.com
 | 
			
		||||
Make sure your credentials are configured on your host machine by
 | 
			
		||||
running
 | 
			
		||||
 | 
			
		||||
```sh
 | 
			
		||||
docker login
 | 
			
		||||
```
 | 
			
		||||
$ docker login
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
This will prompt you for your docker username, password, and your email
 | 
			
		||||
address, and write out to ~/.docker/config.json.  Without this file, you
 | 
			
		||||
won’t be able to push the images.
 | 
			
		||||
 | 
			
		||||
#### Updating the Dockerfiles
 | 
			
		||||
#### Updating the Dockerfiles:
 | 
			
		||||
 | 
			
		||||
The coreboot-sdk Dockerfile will need to be updated when any additional
 | 
			
		||||
dependencies are added.  Both the coreboot-sdk and the
 | 
			
		||||
@@ -336,15 +310,15 @@ files are stored in the coreboot repo under coreboot/util/docker.
 | 
			
		||||
Read the [dockerfile best practices](https://docs.docker.com/v1.8/articles/dockerfile_best-practices/)
 | 
			
		||||
page before updating the files.
 | 
			
		||||
 | 
			
		||||
#### Rebuilding the coreboot-sdk docker image to update the toolchain
 | 
			
		||||
#### Rebuilding the coreboot-sdk docker image to update the toolchain:
 | 
			
		||||
 | 
			
		||||
```sh
 | 
			
		||||
make -C util/docker coreboot-sdk
 | 
			
		||||
```
 | 
			
		||||
$ make -C util/docker coreboot-sdk
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
This takes a relatively long time.
 | 
			
		||||
 | 
			
		||||
#### Test the coreboot-sdk docker image
 | 
			
		||||
#### Test the coreboot-sdk docker image:
 | 
			
		||||
 | 
			
		||||
There are two methods of running the docker image - interactively as a
 | 
			
		||||
shell, or doing the build directly.  Running interactively as a shell is
 | 
			
		||||
@@ -352,44 +326,44 @@ useful for early testing, because it allows you to update the image
 | 
			
		||||
(without any changes getting saved) and re-test builds.  This saves the
 | 
			
		||||
time of having to rebuild the image for every issue you find.
 | 
			
		||||
 | 
			
		||||
#### Running the docker image interactively
 | 
			
		||||
#### Running the docker image interactively:
 | 
			
		||||
 | 
			
		||||
Run:
 | 
			
		||||
 | 
			
		||||
```sh
 | 
			
		||||
make -C util/docker docker-jenkins-server
 | 
			
		||||
make -C util/docker docker-jenkins-attach
 | 
			
		||||
```
 | 
			
		||||
$ make -C util/docker docker-jenkins-server
 | 
			
		||||
$ make -C util/docker docker-jenkins-attach
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
#### Running the build directly
 | 
			
		||||
#### Running the build directly:
 | 
			
		||||
 | 
			
		||||
From the coreboot directory:
 | 
			
		||||
 | 
			
		||||
```sh
 | 
			
		||||
make -C util/docker docker-build-coreboot
 | 
			
		||||
```
 | 
			
		||||
$ make -C util/docker docker-build-coreboot
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
You’ll also want to test building the other projects and payloads:
 | 
			
		||||
ChromeEC, flashrom, memtest86+, em100, Grub2, SeaBIOS, iPXE, coreinfo,
 | 
			
		||||
nvramcui, tint...
 | 
			
		||||
 | 
			
		||||
#### Pushing the coreboot-sdk image to hub.docker.com for use
 | 
			
		||||
#### Pushing the coreboot-sdk image to hub.docker.com for use:
 | 
			
		||||
 | 
			
		||||
When you’re satisfied with the testing, push the coreboot-sdk image to
 | 
			
		||||
the hub.docker.com
 | 
			
		||||
 | 
			
		||||
```sh
 | 
			
		||||
make -C util/docker upload-coreboot-sdk
 | 
			
		||||
```
 | 
			
		||||
$ make -C util/docker upload-coreboot-sdk
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
#### Building and pushing the coreboot-jenkins-node docker image
 | 
			
		||||
#### Building and pushing the coreboot-jenkins-node docker image:
 | 
			
		||||
 | 
			
		||||
This docker image is pretty simple, so there’s not really any testing
 | 
			
		||||
that needs to be done.
 | 
			
		||||
 | 
			
		||||
```sh
 | 
			
		||||
make -C util/docker coreboot-jenkins-node
 | 
			
		||||
make -C util/docker upload-coreboot-jenkins-node
 | 
			
		||||
```
 | 
			
		||||
$ make -C util/docker coreboot-jenkins-node
 | 
			
		||||
$ make -C util/docker upload-coreboot-jenkins-node
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### Coverity Setup
 | 
			
		||||
@@ -402,7 +376,6 @@ to be marked as a coverity builder.
 | 
			
		||||
 | 
			
		||||
Download the Linux-64 coverity build tool and decompress it into your
 | 
			
		||||
cache directory as defined by the `$COREBOOT_JENKINS_CACHE_DIR` variable
 | 
			
		||||
on the jenkins server.
 | 
			
		||||
 | 
			
		||||
[https://scan.coverity.com/download](https://scan.coverity.com/download)
 | 
			
		||||
 | 
			
		||||
@@ -410,7 +383,7 @@ Rename the directory from its original name
 | 
			
		||||
(cov-analysis-linux64-7.7.0.4) to ‘coverity’, or better, create a
 | 
			
		||||
symlink:
 | 
			
		||||
 | 
			
		||||
```sh
 | 
			
		||||
```
 | 
			
		||||
ln -s cov-analysis-linux64-7.7.0.4 coverity
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,103 +0,0 @@
 | 
			
		||||
# Coverity Scan for open source firmware
 | 
			
		||||
 | 
			
		||||
## What’s Coverity and Coverity Scan?
 | 
			
		||||
 | 
			
		||||
Coverity is a static analysis tool. It hooks into the build process
 | 
			
		||||
and in addition to the compiler creating object files, Coverity collects
 | 
			
		||||
information about the code. That data is then processed in a separate pass
 | 
			
		||||
to identify common programming errors, like out of bounds accesses in C.
 | 
			
		||||
 | 
			
		||||
Coverity Scan is an online service for Open Source projects providing this
 | 
			
		||||
analysis for free. The analysis pass is done on their servers and issues
 | 
			
		||||
can be handled in their [web UI](https://scan.coverity.com/).
 | 
			
		||||
 | 
			
		||||
The Scan service has some quotas based on code size to avoid overloading
 | 
			
		||||
the system, but even at one build per week, that’s usually good enough
 | 
			
		||||
because the identified issues still need to be triaged and fixed or they
 | 
			
		||||
will simply be re-identified next week.
 | 
			
		||||
 | 
			
		||||
### Triage?
 | 
			
		||||
 | 
			
		||||
The Web UI looks a bit like an issue tracker, even if it’s not a very
 | 
			
		||||
good one. It’s possible to mark identified issues as valid or invalid,
 | 
			
		||||
and annotate them with metadata which CLs fix them. The latter isn’t
 | 
			
		||||
strictly necessary because Coverity Scan simply marks issues it can’t
 | 
			
		||||
find anymore as fixed, but at times it helped identify issues that made
 | 
			
		||||
a comeback.
 | 
			
		||||
 | 
			
		||||
### Alternatives
 | 
			
		||||
 | 
			
		||||
There’s also clang’s scan-build, which is fully open-source, and
 | 
			
		||||
finds different issues. As such, it’s less of an alternative and more
 | 
			
		||||
of a complement.
 | 
			
		||||
 | 
			
		||||
There’s a regular run of that for coreboot but not for the other projects
 | 
			
		||||
hosted at coreboot.org.
 | 
			
		||||
 | 
			
		||||
One downside is that it emits a bunch of HTML to report on issues,
 | 
			
		||||
but there’s no interactivity (e.g. marking issues solved), no way
 | 
			
		||||
to merge multiple builds (e.g. multiple board builds of a single tree)
 | 
			
		||||
or a simple way to extract burndown charts and the like from that.
 | 
			
		||||
 | 
			
		||||
#### Looking for a project?
 | 
			
		||||
 | 
			
		||||
On the upside, it can emit the data in a machine readable format, so if
 | 
			
		||||
anybody needs a project, a scan-build web-frontend like Coverity Scan would
 | 
			
		||||
be feasible without having to go through scan-build’s guts, just by parsing
 | 
			
		||||
text files - plus all the stateful and web parts to build on top.
 | 
			
		||||
 | 
			
		||||
## Logging into Coverity Scan
 | 
			
		||||
 | 
			
		||||
Coverity Scan needs an account. It supports its own accounts and GitHub
 | 
			
		||||
OAuth.
 | 
			
		||||
 | 
			
		||||
Access to the dashboards needs approval: Request and you shall receive.
 | 
			
		||||
 | 
			
		||||
## coreboot & friends and Coverity Scan
 | 
			
		||||
 | 
			
		||||
coreboot, flashrom, Chromium EC and other projects of that family have
 | 
			
		||||
been made Coverity aware, that is, their build systems support building
 | 
			
		||||
with a custom compiler configuration passed in “just right” to enable
 | 
			
		||||
Coverity to add its hooks.
 | 
			
		||||
 | 
			
		||||
The public coreboot CI system at
 | 
			
		||||
[https://qa.coreboot.org/](https://qa.coreboot.org/) regularly does
 | 
			
		||||
builds with Coverity and sends them off to Coverity Scan.
 | 
			
		||||
 | 
			
		||||
Specifically, it covers:
 | 
			
		||||
 | 
			
		||||
* Chromium EC: [Coverity Scan site][crECCoverity] ([build job][crECBuildJob])
 | 
			
		||||
* coreboot: [Coverity Scan site][corebootCoverity] ([build job][corebootBuildJob]), [scan-build output][corebootScanBuild] ([build job][corebootScanBuildJob])
 | 
			
		||||
* em100: [Coverity Scan site][em100Coverity] ([build job][em100BuildJob])
 | 
			
		||||
* fcode-utils: [Coverity Scan site][fcodeUtilsCoverity] ([build job][fcodeUtilsBuildJob])
 | 
			
		||||
* flashrom: [Coverity Scan site][flashromCoverity] ([build job][flashromBuildJob])
 | 
			
		||||
* memtest86+: [Coverity Scan site][memtestCoverity] ([build job][memtestBuildJob])
 | 
			
		||||
* vboot: [Coverity Scan site][vbootCoverity] ([build job][vbootBuildJob])
 | 
			
		||||
 | 
			
		||||
[crECCoverity]: https://scan.coverity.com/projects/chromium-ec
 | 
			
		||||
[corebootCoverity]: https://scan.coverity.com/projects/coreboot
 | 
			
		||||
[em100Coverity]: https://scan.coverity.com/projects/em100
 | 
			
		||||
[fcodeUtilsCoverity]: https://scan.coverity.com/projects/fcode-utils
 | 
			
		||||
[flashromCoverity]: https://scan.coverity.com/projects/flashrom
 | 
			
		||||
[memtestCoverity]: https://scan.coverity.com/projects/memtest86
 | 
			
		||||
[vbootCoverity]: https://scan.coverity.com/projects/vboot
 | 
			
		||||
 | 
			
		||||
[corebootScanBuild]: https://www.coreboot.org/scan-build/
 | 
			
		||||
 | 
			
		||||
[crECBuildJob]: https://qa.coreboot.org/view/coverity/job/ChromeEC-Coverity/
 | 
			
		||||
[corebootBuildJob]: https://qa.coreboot.org/view/coverity/job/coreboot-coverity/
 | 
			
		||||
[corebootScanBuildJob]: https://qa.coreboot.org/view/coverity/job/coreboot_scanbuild/
 | 
			
		||||
[em100BuildJob]: https://qa.coreboot.org/view/coverity/job/em100-coverity/
 | 
			
		||||
[fcodeUtilsBuildJob]: https://qa.coreboot.org/view/coverity/job/fcode-utils-coverity/
 | 
			
		||||
[flashromBuildJob]: https://qa.coreboot.org/view/coverity/job/flashrom-coverity/
 | 
			
		||||
[memtestBuildJob]: https://qa.coreboot.org/view/coverity/job/memtest86plus-coverity/
 | 
			
		||||
[vbootBuildJob]: https://qa.coreboot.org/view/coverity/job/vboot-coverity/
 | 
			
		||||
 | 
			
		||||
Some projects (e.g. Chromium EC) build a different subset of boards on
 | 
			
		||||
each run, ensuring that everything is analyzed eventually. The downside
 | 
			
		||||
is that coverity issues pop up and disappear somewhat randomly as they
 | 
			
		||||
are discovered and go unnoticed in a later build.
 | 
			
		||||
 | 
			
		||||
More projects that are hosted on review.coreboot.org (potentially as a
 | 
			
		||||
mirror, like vboot and EC) could be served through that pipeline. Reach
 | 
			
		||||
out to {stepan,patrick,martin}@coreboot.org.
 | 
			
		||||
@@ -1,12 +1,6 @@
 | 
			
		||||
# Project infrastructure & services
 | 
			
		||||
# coreboot infrastructure
 | 
			
		||||
 | 
			
		||||
This section contains documentation about our infrastructure
 | 
			
		||||
 | 
			
		||||
## Services
 | 
			
		||||
 | 
			
		||||
* [Project services](services.md)
 | 
			
		||||
* [Administrator's handbook](admin.md)
 | 
			
		||||
This section contains documentation about coreboot infrastructure
 | 
			
		||||
 | 
			
		||||
## Jenkins builders and builds
 | 
			
		||||
* [Setting up Jenkins build machines](builders.md)
 | 
			
		||||
* [Coverity Scan integration](coverity.md)
 | 
			
		||||
 
 | 
			
		||||
@@ -1,60 +0,0 @@
 | 
			
		||||
# Accounts on coreboot.org
 | 
			
		||||
 | 
			
		||||
There are a number of places where you can benefit from creating an account
 | 
			
		||||
in our community. Since there is no single sign-on system in place (at this
 | 
			
		||||
time), they come with their own setup routines.
 | 
			
		||||
 | 
			
		||||
## Gerrit code review
 | 
			
		||||
We exchange and review patches to the code using our [Gerrit code review
 | 
			
		||||
system](https://review.coreboot.org).
 | 
			
		||||
 | 
			
		||||
It allows logging in with a Google or GitHub account using OAuth2 as well
 | 
			
		||||
as with any OpenID provider that you may already use.
 | 
			
		||||
 | 
			
		||||
On the [settings screen](https://review.coreboot.org/settings) you can register
 | 
			
		||||
all your email addresses you intend to use in the context of coreboot
 | 
			
		||||
development so that commits with your email address in them are associated with
 | 
			
		||||
you properly.
 | 
			
		||||
 | 
			
		||||
Below is a list of its SSH host keys and fingerprints.
 | 
			
		||||
```Bash
 | 
			
		||||
[review.coreboot.org]:29418 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAvNDn8qGHlWM/5ndFltStlg3QTc8xvGOgyjxxZByhMZx8LVE4cfgF38WP3euq0avyFy7gAJNghHorXpYKoOzuQPn2WNi5QhyGsUhg7ZJz9hC7Z2gqxxsZF3E7rku4Uj9sN7hWx9fBngxD4z2tP4y/18FTT5XTMcC3Q2sBCOLM0XVAO5R/nb2GO3d27avy+sanKAFEwJHnZ996IoTlU8JJFyi1Y6g30dC2K75oFgCtzntxf++wvrkkKPa+CFQub8fp20shat9WwX9kXjpRjt/Yv9LgqFCaI5ztJvWXicAmbgghGVzbzz4GoSjjF9cxxJF//KTmNb4iGQqmP3Olm27xuw==
 | 
			
		||||
 | 
			
		||||
[review.coreboot.org]:29418 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBBzlwf/bFejt4EEz1QmbNOfK/HN1NtdcefrRs5Gs42uGnIvjxsff+vEF3//jCTvFPadoy3DrPsbQB3ioQAcYppk=
 | 
			
		||||
 | 
			
		||||
[review.coreboot.org]:29418 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOC3Z32gc+1rJXhKX+SW0vESlXR/h/mhcxd+62B1PWC2
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
```Bash
 | 
			
		||||
2048 SHA256:WW5prF7YE3MTnkRIxLklr9Gxddj9s5BZKUqWJF5dnTg review.coreboot.org:29418 (RSA)
 | 
			
		||||
256 SHA256:IuLv/DgrBtVn36eMP1zFD0ISAl3IxIoCeiRms6UDhZc review.coreboot.org:29418 (ECDSA)
 | 
			
		||||
256 SHA256:QFZieVHy8dCRl9tDib6qiwELnfa7SVU4ZWJ5VrXoC8k review.coreboot.org:29418 (ED25519)
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### https push access
 | 
			
		||||
When using the https URLs to git repositories, you can push with the "HTTP
 | 
			
		||||
Credentials" you can have Gerrit generate for you on that page. By default,
 | 
			
		||||
git uses `$HOME/.netrc` for http authentication data, so add a line there
 | 
			
		||||
stating:
 | 
			
		||||
 | 
			
		||||
    machine review.coreboot.org login $your-user-name password $your-password
 | 
			
		||||
 | 
			
		||||
### Gerrit user avatar
 | 
			
		||||
To setup an avatar to show in Gerrit, clone the avatars repository at
 | 
			
		||||
https://review.coreboot.org/gerrit-avatars.git and add a file named
 | 
			
		||||
$your-user-ID.jpg (the user ID is a number shown on the [settings screen](https://review.coreboot.org/settings)).
 | 
			
		||||
The image must be provided in JPEG format, must be square and have at most 50000
 | 
			
		||||
bytes.
 | 
			
		||||
 | 
			
		||||
After you push for review, the system will automatically verify your change
 | 
			
		||||
and, if adhering to these constraints, approve it. You can then immediately
 | 
			
		||||
submit it.
 | 
			
		||||
 | 
			
		||||
## Issue tracker
 | 
			
		||||
We have an [issue tracker](https://ticket.coreboot.org) that is used for
 | 
			
		||||
coreboot and related code, such as libpayload, as well as for the project's
 | 
			
		||||
infrastructure.
 | 
			
		||||
 | 
			
		||||
It can be helpful to refer to issues we track there in commit messages:
 | 
			
		||||
 | 
			
		||||
    Fixes: https://ticket.coreboot.org/issues/$id
 | 
			
		||||
@@ -4,7 +4,7 @@
 | 
			
		||||
 | 
			
		||||
[Flashmap](https://code.google.com/p/flashmap) (FMAP) is a binary format to
 | 
			
		||||
describe partitions in a flash chip. It was added to coreboot to support the
 | 
			
		||||
requirements of ChromiumOS firmware but then was also used in other scenarios
 | 
			
		||||
requirements of Chromium OS firmware but then was also used in other scenarios
 | 
			
		||||
where precise placement of data in flash was necessary, or for data that is
 | 
			
		||||
written to at runtime, as CBFS is considered too fragile for such situations.
 | 
			
		||||
The Flashmap implementation inside coreboot is the de facto standard today.
 | 
			
		||||
@@ -73,7 +73,7 @@ compiler](https://chromium-review.googlesource.com/#/c/255031) inside coreboot
 | 
			
		||||
utility folder that can be used to generate final firmware images (i.e.
 | 
			
		||||
`coreboot.rom`) formatted by Flashmap.
 | 
			
		||||
 | 
			
		||||
The FMD implementation is in coreboot `util/cbfstool` folder. Here's an
 | 
			
		||||
The FMD implementation is in coreboot `utils/cbfstool` folder. Here's an
 | 
			
		||||
informal language description:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
 
 | 
			
		||||
@@ -8,8 +8,8 @@ BIOS image to be used across a wide variety of devices which may have key differ
 | 
			
		||||
otherwise similar enough to use the same coreboot build target.
 | 
			
		||||
 | 
			
		||||
The initial implementation is designed to take advantage of a bitmask returned by the Embedded
 | 
			
		||||
Controller on Google ChromeOS devices which allows the manufacturer to use the same firmware
 | 
			
		||||
image across multiple devices by selecting various options at runtime.  See the ChromiumOS
 | 
			
		||||
Controller on Google Chrome OS devices which allows the manufacturer to use the same firmware
 | 
			
		||||
image across multiple devices by selecting various options at runtime.  See the Chromium OS
 | 
			
		||||
[Firmware Config][1] documentation for more information.
 | 
			
		||||
 | 
			
		||||
This firmware configuration interface differs from the CMOS option interface in that this
 | 
			
		||||
@@ -91,7 +91,7 @@ file in CBFS use the value it contains when matching fields and options.
 | 
			
		||||
 | 
			
		||||
### Embedded Controller
 | 
			
		||||
 | 
			
		||||
Google ChromeOS devices support an Embedded Controller interface for reading and writing the
 | 
			
		||||
Google Chrome OS devices support an Embedded Controller interface for reading and writing the
 | 
			
		||||
firmware configuration value, along with other board-specific information.  It is possible for
 | 
			
		||||
coreboot to read this value at boot on systems that support this feature.
 | 
			
		||||
 | 
			
		||||
@@ -101,13 +101,13 @@ possible by enabling the CBFS source and coreboot will look in CBFS first for a
 | 
			
		||||
before asking the embedded controller.
 | 
			
		||||
 | 
			
		||||
It is also possible to adjust the value in the embedded controller *(after disabling write
 | 
			
		||||
protection)* with the `ectool` command in a ChromeOS environment.
 | 
			
		||||
protection)* with the `ectool` command in a Chrome OS environment.
 | 
			
		||||
 | 
			
		||||
For more information on the firmware configuration field on ChromeOS devices see the Chromium
 | 
			
		||||
For more information on the firmware configuration field on Chrome OS devices see the Chromium
 | 
			
		||||
documentation for [Firmware Config][1] and [Board Info][2].
 | 
			
		||||
 | 
			
		||||
[1]: http://chromium.googlesource.com/chromiumos/docs/+/HEAD/design_docs/firmware_config.md
 | 
			
		||||
[2]: http://chromium.googlesource.com/chromiumos/docs/+/HEAD/design_docs/cros_board_info.md
 | 
			
		||||
[1]: http://chromium.googlesource.com/chromiumos/docs/+/master/design_docs/firmware_config.md
 | 
			
		||||
[2]: http://chromium.googlesource.com/chromiumos/docs/+/master/design_docs/cros_board_info.md
 | 
			
		||||
 | 
			
		||||
## Firmware Configuration Table
 | 
			
		||||
 | 
			
		||||
@@ -383,7 +383,7 @@ training.  This example expects that the default value of this `register` is set
 | 
			
		||||
 | 
			
		||||
void mainboard_memory_init_params(FSPM_UPD *mupd)
 | 
			
		||||
{
 | 
			
		||||
	if (fw_config_probe(FW_CONFIG(FEATURE, DISABLED))
 | 
			
		||||
	if (fw_config_probe_one(FW_CONFIG(FEATURE, DISABLED))
 | 
			
		||||
		mupd->ExampleFeature = false;
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 
 | 
			
		||||
@@ -180,5 +180,5 @@ The generated file includes a compressed initrd **initramfs.cpio.xz**, which
 | 
			
		||||
will be decompressed by the Linux kernel, a compressed kernel **Image.lzma**,
 | 
			
		||||
which will be decompressed by the FIT loader and an uncompressed devicetree blob.
 | 
			
		||||
 | 
			
		||||
[uImage.FIT]: https://github.com/u-boot/u-boot/blob/master/doc/usage/fit/howto.rst
 | 
			
		||||
[uImage.FIT]: https://raw.githubusercontent.com/u-boot/u-boot/master/doc/uImage.FIT/howto.txt
 | 
			
		||||
[U-Boot]: https://www.denx.de/wiki/U-Boot
 | 
			
		||||
 
 | 
			
		||||
@@ -1,177 +0,0 @@
 | 
			
		||||
# Acer G43T-AM3
 | 
			
		||||
 | 
			
		||||
The Acer G43T-AM3 is a microATX-sized desktop board. It was used for the
 | 
			
		||||
Acer models Aspire M3800, Aspire M5800 and possibly more.
 | 
			
		||||
 | 
			
		||||
## Technology
 | 
			
		||||
 | 
			
		||||
```eval_rst
 | 
			
		||||
+------------------+--------------------------------------------------+
 | 
			
		||||
| Northbridge      | Intel G43 (called x4x in coreboot code)          |
 | 
			
		||||
+------------------+--------------------------------------------------+
 | 
			
		||||
| Southbridge      | Intel ICH10R (called i82801jx in coreboot code)  |
 | 
			
		||||
+------------------+--------------------------------------------------+
 | 
			
		||||
| CPU socket       | LGA 775                                          |
 | 
			
		||||
+------------------+--------------------------------------------------+
 | 
			
		||||
| RAM              | 4 x DDR3-1066                                    |
 | 
			
		||||
+------------------+--------------------------------------------------+
 | 
			
		||||
| SuperIO          | ITE IT8720F                                      |
 | 
			
		||||
+------------------+--------------------------------------------------+
 | 
			
		||||
| Audio            | Realtek ALC888S                                  |
 | 
			
		||||
+------------------+--------------------------------------------------+
 | 
			
		||||
| Network          | Intel 82567V-2 Gigabit Ethernet                  |
 | 
			
		||||
+------------------+--------------------------------------------------+
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
There is no serial port. Serial console output is possible by soldering
 | 
			
		||||
to a point at the corresponding Super I/O pin and patching the
 | 
			
		||||
mainboard-specific code accordingly.
 | 
			
		||||
 | 
			
		||||
## Status
 | 
			
		||||
 | 
			
		||||
### Working
 | 
			
		||||
 | 
			
		||||
Tests were done with SeaBIOS 1.14.0 and slackware64-live from 2019-07-12
 | 
			
		||||
(linux-4.19.50).
 | 
			
		||||
 | 
			
		||||
+ Intel Core 2 processors at up to FSB 1333
 | 
			
		||||
+ All four DIMM slots at 1066 MHz (tested 2x2GB + 2x4GB)
 | 
			
		||||
+ Integrated graphics (libgfxinit)
 | 
			
		||||
+ HDMI and VGA ports
 | 
			
		||||
+ Both PCI slots
 | 
			
		||||
+ Both PCI-e slots
 | 
			
		||||
+ USB (8 internal, 4 external)
 | 
			
		||||
+ All six SATA ports
 | 
			
		||||
+ Onboard Ethernet
 | 
			
		||||
+ Onboard sound card with output on the rear stereo connector
 | 
			
		||||
+ PS/2 mouse and keyboard
 | 
			
		||||
    + With SeaBIOS, use CONFIG_SEABIOS_PS2_TIMEOUT, tested: 500
 | 
			
		||||
    + With FILO it works without further settings
 | 
			
		||||
+ Temperature readings from the Super I/O (including the CPU temperature
 | 
			
		||||
  via PECI)
 | 
			
		||||
+ Super I/O EC automatic fan control
 | 
			
		||||
+ S3 suspend/resume
 | 
			
		||||
+ Poweroff
 | 
			
		||||
 | 
			
		||||
### Not working
 | 
			
		||||
 | 
			
		||||
+ DDR3 memory with 512Mx8 chips (G43 limitation)
 | 
			
		||||
+ 4x4GB of DDR3 memory (works, but showed a single bit error within one
 | 
			
		||||
  pass of Memtest86+ 5.01)
 | 
			
		||||
+ Super I/O voltage reading conversions
 | 
			
		||||
 | 
			
		||||
### Untested
 | 
			
		||||
 | 
			
		||||
+ Other audio jacks or the front panel header
 | 
			
		||||
+ S/PDIF output
 | 
			
		||||
+ On-board Firewire
 | 
			
		||||
+ Wake-on-LAN
 | 
			
		||||
 | 
			
		||||
## Flashing coreboot
 | 
			
		||||
 | 
			
		||||
```eval_rst
 | 
			
		||||
+-------------------+---------------------+
 | 
			
		||||
| Type              | Value               |
 | 
			
		||||
+===================+=====================+
 | 
			
		||||
| Socketed flash    | No                  |
 | 
			
		||||
+-------------------+---------------------+
 | 
			
		||||
| Model             | Macronix MX25L1605D |
 | 
			
		||||
+-------------------+---------------------+
 | 
			
		||||
| Size              | 2 MiB               |
 | 
			
		||||
+-------------------+---------------------+
 | 
			
		||||
| Package           | 8-Pin SOP           |
 | 
			
		||||
+-------------------+---------------------+
 | 
			
		||||
| Write protection  | No                  |
 | 
			
		||||
+-------------------+---------------------+
 | 
			
		||||
| Dual BIOS feature | No                  |
 | 
			
		||||
+-------------------+---------------------+
 | 
			
		||||
| Internal flashing | Yes                 |
 | 
			
		||||
+-------------------+---------------------+
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
The flash is divided into the following regions, as obtained with
 | 
			
		||||
`ifdtool -f rom.layout backup.rom`:
 | 
			
		||||
```
 | 
			
		||||
00000000:00001fff fd
 | 
			
		||||
00100000:001fffff bios
 | 
			
		||||
00006000:000fffff me
 | 
			
		||||
00002000:00005fff gbe
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
In general, flashing is possible internally and from an external header. It
 | 
			
		||||
might be necessary to specify the chip type; `MX25L1605D/MX25L1608D/MX25L1673E`
 | 
			
		||||
is the correct one, not `MX25L1605`.
 | 
			
		||||
 | 
			
		||||
### Internal flashing
 | 
			
		||||
 | 
			
		||||
Internal access to the flash chip is unrestricted. When installing coreboot,
 | 
			
		||||
only the BIOS region should be updated by passing the `--ifd` and `-i bios`
 | 
			
		||||
parameters to flashrom. A full backup is advisable.
 | 
			
		||||
 | 
			
		||||
Here is an example:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
$ sudo flashrom \
 | 
			
		||||
  -p internal \
 | 
			
		||||
  -c "MX25L1605D/MX25L1608D/MX25L1673E" \
 | 
			
		||||
  -r backup.rom
 | 
			
		||||
$ sudo flashrom \
 | 
			
		||||
  -p internal \
 | 
			
		||||
  -c "MX25L1605D/MX25L1608D/MX25L1673E" \
 | 
			
		||||
  --ifd -i bios \
 | 
			
		||||
  -w coreboot.rom
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
```eval_rst
 | 
			
		||||
In addition to the information here, please see the
 | 
			
		||||
:doc:`../../tutorial/flashing_firmware/index`.
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### External flashing
 | 
			
		||||
 | 
			
		||||
The SPI flash chip on this board can be flashed externally through the
 | 
			
		||||
SPI_ROM1 header while the board is off and disconnected from power. There
 | 
			
		||||
seems to be a diode that prevents the external programmer from powering the
 | 
			
		||||
whole board.
 | 
			
		||||
 | 
			
		||||
The signal assignment on the header is identical to the pinout of the flash
 | 
			
		||||
chip. The pinout diagram below is valid when the PCI slots are on the left
 | 
			
		||||
and the CPU is on the right. Note that HOLD# and WP# must be pulled high
 | 
			
		||||
(to VCC) to be able to flash the chip.
 | 
			
		||||
 | 
			
		||||
                +---+---+
 | 
			
		||||
     SPI_CSn <- | x | x | -> VCC
 | 
			
		||||
                +---+---+
 | 
			
		||||
    SPI_MISO <- | x | x | -> HOLDn
 | 
			
		||||
                +---+---+
 | 
			
		||||
         WPn <- | x | x | -> SPI_CLK
 | 
			
		||||
                +---+---+
 | 
			
		||||
         GND <- | x | x | -> SPI_MOSI
 | 
			
		||||
                +---+---+
 | 
			
		||||
 | 
			
		||||
## Intel Management Engine
 | 
			
		||||
 | 
			
		||||
The Intel Management Engine (ME) can be disabled by setting the ME_DISABLE
 | 
			
		||||
jumper on the board. It pulls GPIO33 on the ICH10 low, causing the "Flash
 | 
			
		||||
Descriptor Security Override Strap" to be set. This disables the ME and also
 | 
			
		||||
disables any read/write restrictions to the flash chip that may be set in the
 | 
			
		||||
Intel Flash Descriptor (IFD) (none on this board). Note that changing this
 | 
			
		||||
jumper only comes into effect when starting the board from a shutdown or
 | 
			
		||||
suspend state, not during normal operation.
 | 
			
		||||
 | 
			
		||||
To completely remove the ME blob from the flash image and to decrease the size
 | 
			
		||||
of the ME region, thus increasing the size of the BIOS region, `me_cleaner` can
 | 
			
		||||
be used with the `-t`, `-r` and `-S` options.
 | 
			
		||||
 | 
			
		||||
## Fan control
 | 
			
		||||
 | 
			
		||||
There are two fan connectors that can be controlled individually. CPU_FAN
 | 
			
		||||
can only control a fan by a PWM signal and SYS_FAN only by voltage. See
 | 
			
		||||
the mainboard's `devicetree.cb` file for how coreboot configures the Super
 | 
			
		||||
I/O to control the fans.
 | 
			
		||||
 | 
			
		||||
## Variants
 | 
			
		||||
 | 
			
		||||
Various similar mainboards exist, like the Acer Q45T-AM. During a discussion
 | 
			
		||||
in #coreboot on IRC, ECS was suspected to be the original designer of this
 | 
			
		||||
series of mainboards. They have similar models such as the ECS G43T-WM.
 | 
			
		||||
@@ -1,80 +0,0 @@
 | 
			
		||||
# Pademelon board
 | 
			
		||||
 | 
			
		||||
## Specs (with Merlin Falcon SOC)
 | 
			
		||||
 | 
			
		||||
* Two 260-pin DDR4 SO-DIMM slots, 1.2V DDR4-1333/1600/1866/2133 SO-DIMMs
 | 
			
		||||
  Supports 4GB, 8GB and 16GB DDR4 unbuffered ECC (Merlin Falcon)SO-DIMMs
 | 
			
		||||
* Can use Prairie Falcon, Brown Falcon, Merlin Falcon, though coreboot
 | 
			
		||||
  code is specific for Merlin Falcon SOC. Some specs will change if not
 | 
			
		||||
  using Merlin Falcon.
 | 
			
		||||
* One half mini PCI-Express slot on back side of mainboard
 | 
			
		||||
* One PCI Express® 3.0 x8 slot
 | 
			
		||||
* Two SATA3 ports with 6Gb/s data transfer rate
 | 
			
		||||
* Two USB 2.0 ports at rear panel
 | 
			
		||||
* Two USB 3.0 ports at rear panel
 | 
			
		||||
* Dual Gigabit Ethernet from Realtek RTL8111F Gigabit controller
 | 
			
		||||
* 6-channel High-Definition audio from Realtek ALC662 codec
 | 
			
		||||
* One soldered down SPI flash with dediprog header
 | 
			
		||||
 | 
			
		||||
## Mainboard
 | 
			
		||||
 | 
			
		||||
![mainboard][pademelon]
 | 
			
		||||
 | 
			
		||||
Three items are marked in this picture
 | 
			
		||||
1. dediprog header
 | 
			
		||||
2. memory dimms, address 0xA0 and 0xA4
 | 
			
		||||
3. SATA cables connected to motherboard
 | 
			
		||||
 | 
			
		||||
## Back panel
 | 
			
		||||
 | 
			
		||||
![back panel][pademelon_io]
 | 
			
		||||
 | 
			
		||||
* The lower serial port is UART A (debug serial)
 | 
			
		||||
 | 
			
		||||
## Flashing coreboot
 | 
			
		||||
 | 
			
		||||
```eval_rst
 | 
			
		||||
+---------------------+--------------------+
 | 
			
		||||
| Type                | Value              |
 | 
			
		||||
+=====================+====================+
 | 
			
		||||
| Socketed flash      | no                 |
 | 
			
		||||
+---------------------+--------------------+
 | 
			
		||||
| Model               | Macronix MX256435E |
 | 
			
		||||
+---------------------+--------------------+
 | 
			
		||||
| Size                | 8 MiB              |
 | 
			
		||||
+---------------------+--------------------+
 | 
			
		||||
| Flash programming   | dediprog header    |
 | 
			
		||||
+---------------------+--------------------+
 | 
			
		||||
| Package             | SOIC-8             |
 | 
			
		||||
+---------------------+--------------------+
 | 
			
		||||
| Write protection    | No                 |
 | 
			
		||||
+---------------------+--------------------+
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Technology
 | 
			
		||||
 | 
			
		||||
```eval_rst
 | 
			
		||||
+---------------+------------------------------+
 | 
			
		||||
| Fan control   | Using fintek F81803A         |
 | 
			
		||||
+---------------+------------------------------+
 | 
			
		||||
| CPU           | Merlin Falcon (see reference)|
 | 
			
		||||
+---------------+------------------------------+
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Description of pictures within this document
 | 
			
		||||
 | 
			
		||||
```eval_rst
 | 
			
		||||
+----------------------------+----------------------------------------+
 | 
			
		||||
|pademelon.jpg               | Motherboard with components identified |
 | 
			
		||||
+----------------------------+----------------------------------------+
 | 
			
		||||
|pademelon_io.jpg            | Back panel picture                     |
 | 
			
		||||
+----------------------------+----------------------------------------+
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Reference
 | 
			
		||||
 | 
			
		||||
[Merlin Falcon BKDG][merlinfalcon]
 | 
			
		||||
 | 
			
		||||
[merlinfalcon]: ../../../soc/amd/family15h.md
 | 
			
		||||
[pademelon]: pademelon.jpg
 | 
			
		||||
[pademelon_io]: pademelon_io.jpg
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 79 KiB After Width: | Height: | Size: 79 KiB  | 
							
								
								
									
										80
									
								
								Documentation/mainboard/amd/padmelon/padmelon.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,80 @@
 | 
			
		||||
# Padmelon board
 | 
			
		||||
 | 
			
		||||
## Specs (with Merlin Falcon SOC)
 | 
			
		||||
 | 
			
		||||
* Two 260-pin DDR4 SO-DIMM slots, 1.2V DDR4-1333/1600/1866/2133 SO-DIMMs
 | 
			
		||||
  Supports 4GB, 8GB and 16GB DDR4 unbuffered ECC (Merlin Falcon)SO-DIMMs
 | 
			
		||||
* Can use Prairie Falcon, Brown Falcon, Merlin Falcon, though coreboot
 | 
			
		||||
  code is specific for Merlin Falcon SOC. Some specs will change if not
 | 
			
		||||
  using Merlin Falcon.
 | 
			
		||||
* One half mini PCI-Express slot on back side of mainboard
 | 
			
		||||
* One PCI Express® 3.0 x8 slot
 | 
			
		||||
* Two SATA3 ports with 6Gb/s data transfer rate
 | 
			
		||||
* Two USB 2.0 ports at rear panel
 | 
			
		||||
* Two USB 3.0 ports at rear panel
 | 
			
		||||
* Dual Gigabit Ethernet from Realtek RTL8111F Gigabit controller
 | 
			
		||||
* 6-channel High-Definition audio from Realtek ALC662 codec
 | 
			
		||||
* One soldered down SPI flash with dediprog header
 | 
			
		||||
 | 
			
		||||
## Mainboard
 | 
			
		||||
 | 
			
		||||
![mainboard][padmelon]
 | 
			
		||||
 | 
			
		||||
Three items are marked in this picture
 | 
			
		||||
1. dediprog header
 | 
			
		||||
2. memory dimms, address 0xA0 and 0xA4
 | 
			
		||||
3. SATA cables connected to motherboard
 | 
			
		||||
 | 
			
		||||
## Back panel
 | 
			
		||||
 | 
			
		||||
![back panel][padmelon_io]
 | 
			
		||||
 | 
			
		||||
* The lower serial port is UART A (debug serial)
 | 
			
		||||
 | 
			
		||||
## Flashing coreboot
 | 
			
		||||
 | 
			
		||||
```eval_rst
 | 
			
		||||
+---------------------+--------------------+
 | 
			
		||||
| Type                | Value              |
 | 
			
		||||
+=====================+====================+
 | 
			
		||||
| Socketed flash      | no                 |
 | 
			
		||||
+---------------------+--------------------+
 | 
			
		||||
| Model               | Macronix MX256435E |
 | 
			
		||||
+---------------------+--------------------+
 | 
			
		||||
| Size                | 8 MiB              |
 | 
			
		||||
+---------------------+--------------------+
 | 
			
		||||
| Flash programming   | dediprog header    |
 | 
			
		||||
+---------------------+--------------------+
 | 
			
		||||
| Package             | SOIC-8             |
 | 
			
		||||
+---------------------+--------------------+
 | 
			
		||||
| Write protection    | No                 |
 | 
			
		||||
+---------------------+--------------------+
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Technology
 | 
			
		||||
 | 
			
		||||
```eval_rst
 | 
			
		||||
+---------------+------------------------------+
 | 
			
		||||
| Fan control   | Using fintek F81803A         |
 | 
			
		||||
+---------------+------------------------------+
 | 
			
		||||
| CPU           | Merlin Falcon (see reference)|
 | 
			
		||||
+---------------+------------------------------+
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Description of pictures within this document
 | 
			
		||||
 | 
			
		||||
```eval_rst
 | 
			
		||||
+----------------------------+----------------------------------------+
 | 
			
		||||
|padmelon.jpg                | Motherboard with components identified |
 | 
			
		||||
+----------------------------+----------------------------------------+
 | 
			
		||||
|padmelon_io.jpg             | Back panel picture                     |
 | 
			
		||||
+----------------------------+----------------------------------------+
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Reference
 | 
			
		||||
 | 
			
		||||
[Merlin Falcon BKDG][merlinfalcon]
 | 
			
		||||
 | 
			
		||||
[merlinfalcon]: ../../../soc/amd/family15h.md
 | 
			
		||||
[padmelon]: padmelon.jpg
 | 
			
		||||
[padmelon_io]: padmelon_io.jpg
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 32 KiB  | 
@@ -58,7 +58,7 @@ The main SPI flash can be accessed using [flashrom]. By default, only
 | 
			
		||||
the BIOS region of the flash is writable. If you wish to change any
 | 
			
		||||
other region, such as the Management Engine or firmware descriptor, then
 | 
			
		||||
an external programmer is required (unless you find a clever way around
 | 
			
		||||
the flash protection). More information about this [here](../../tutorial/flashing_firmware/index.md).
 | 
			
		||||
the flash protection). More information about this [here](../../flash_tutorial/index.md).
 | 
			
		||||
 | 
			
		||||
### External programming
 | 
			
		||||
 | 
			
		||||
@@ -131,4 +131,4 @@ facing towards the bottom of the board.
 | 
			
		||||
[ASRock H110M-DVS]: https://www.asrock.com/mb/Intel/H110M-DVS%20R2.0/
 | 
			
		||||
[MX25L6473E]: http://www.macronix.com/Lists/Datasheet/Attachments/7380/MX25L6473E,%203V,%2064Mb,%20v1.4.pdf
 | 
			
		||||
[flashrom]: https://flashrom.org/Flashrom
 | 
			
		||||
[H110M-DVS manual]: https://web.archive.org/web/20191023230631/http://asrock.pc.cdn.bitgravity.com/Manual/H110M-DVS%20R2.0.pdf
 | 
			
		||||
[H110M-DVS manual]: http://asrock.pc.cdn.bitgravity.com/Manual/H110M-DVS%20R2.0.pdf
 | 
			
		||||
 
 | 
			
		||||
@@ -1,176 +0,0 @@
 | 
			
		||||
# ASRock H77 Pro4-M
 | 
			
		||||
 | 
			
		||||
The ASRock H77 Pro4-M is a microATX-sized desktop board for Intel Sandy
 | 
			
		||||
Bridge and Ivy Bridge CPUs.
 | 
			
		||||
 | 
			
		||||
## Technology
 | 
			
		||||
 | 
			
		||||
```eval_rst
 | 
			
		||||
+------------------+--------------------------------------------------+
 | 
			
		||||
| Northbridge      | :doc:`../../northbridge/intel/sandybridge/index` |
 | 
			
		||||
+------------------+--------------------------------------------------+
 | 
			
		||||
| Southbridge      | Intel H77 (bd82x6x)                              |
 | 
			
		||||
+------------------+--------------------------------------------------+
 | 
			
		||||
| CPU socket       | LGA 1155                                         |
 | 
			
		||||
+------------------+--------------------------------------------------+
 | 
			
		||||
| RAM              | 4 x DDR3-1600                                    |
 | 
			
		||||
+------------------+--------------------------------------------------+
 | 
			
		||||
| Super I/O        | Nuvoton NCT6776                                  |
 | 
			
		||||
+------------------+--------------------------------------------------+
 | 
			
		||||
| Audio            | Realtek ALC892                                   |
 | 
			
		||||
+------------------+--------------------------------------------------+
 | 
			
		||||
| Network          | Realtek RTL8111E                                 |
 | 
			
		||||
+------------------+--------------------------------------------------+
 | 
			
		||||
| Serial           | Internal header (RS-232)                         |
 | 
			
		||||
+------------------+--------------------------------------------------+
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Status
 | 
			
		||||
 | 
			
		||||
Tests were done with SeaBIOS 1.14.0 and slackware64-live from 2019-07-12
 | 
			
		||||
(linux-4.19.50).
 | 
			
		||||
 | 
			
		||||
### Working
 | 
			
		||||
 | 
			
		||||
- Sandy Bridge and Ivy Bridge CPUs (tested: i5-2500, Pentium G2120)
 | 
			
		||||
- Native RAM initialization with four DIMMs
 | 
			
		||||
- PS/2 combined port (mouse or keyboard)
 | 
			
		||||
- Integrated GPU by libgfxinit on all monitor ports (DVI-D, HDMI, D-Sub)
 | 
			
		||||
- PCIe graphics in the PEG slot
 | 
			
		||||
- All three additional PCIe slots
 | 
			
		||||
- All rear and internal USB2 ports
 | 
			
		||||
- All rear and internal USB3 ports
 | 
			
		||||
- All six SATA ports from the PCH (two 6 Gb/s, four 3 Gb/s)
 | 
			
		||||
- All two SATA ports from the ASM1061 PCIe-to-SATA bridge (6 Gb/s)
 | 
			
		||||
- Rear eSATA connector (multiplexed with one ASM1061 port)
 | 
			
		||||
- Gigabit Ethernet
 | 
			
		||||
- Console output on the serial port
 | 
			
		||||
- EDK II (MrChromebox's fork, at origin/uefipayload_202207) to boot
 | 
			
		||||
Windows 10 (22H2) and Linux (5.19.17) via GRUB 2
 | 
			
		||||
- SeaBIOS 1.16.1 to boot Windows 10 (needs VGA BIOS) and Linux via
 | 
			
		||||
extlinux
 | 
			
		||||
- Internal flashing with flashrom-1.2, see
 | 
			
		||||
[Internal Programming](#internal-programming)
 | 
			
		||||
- External flashing with flashrom-1.2 and a Raspberry Pi 1
 | 
			
		||||
- S3 suspend/resume from either Linux or Windows 10
 | 
			
		||||
- Poweroff
 | 
			
		||||
 | 
			
		||||
### Not working
 | 
			
		||||
 | 
			
		||||
- Booting from the two SATA ports provided by the ASM1061
 | 
			
		||||
- Automatic fan control with the NCT6776D Super I/O
 | 
			
		||||
 | 
			
		||||
### Untested
 | 
			
		||||
 | 
			
		||||
- EHCI debug
 | 
			
		||||
- S/PDIF audio
 | 
			
		||||
- Other audio jacks than the green one, and the front panel header
 | 
			
		||||
- Parallel port
 | 
			
		||||
- Infrared/CIR
 | 
			
		||||
- Wakeup from anything but the power button
 | 
			
		||||
 | 
			
		||||
## Flashing coreboot
 | 
			
		||||
 | 
			
		||||
```eval_rst
 | 
			
		||||
+---------------------+------------+
 | 
			
		||||
| Type                | Value      |
 | 
			
		||||
+=====================+============+
 | 
			
		||||
| Socketed flash      | yes        |
 | 
			
		||||
+---------------------+------------+
 | 
			
		||||
| Model               | W25Q64.V   |
 | 
			
		||||
+---------------------+------------+
 | 
			
		||||
| Size                | 8 MiB      |
 | 
			
		||||
+---------------------+------------+
 | 
			
		||||
| Package             | DIP-8      |
 | 
			
		||||
+---------------------+------------+
 | 
			
		||||
| Write protection    | no         |
 | 
			
		||||
+---------------------+------------+
 | 
			
		||||
| Dual BIOS feature   | no         |
 | 
			
		||||
+---------------------+------------+
 | 
			
		||||
| Internal flashing   | yes        |
 | 
			
		||||
+---------------------+------------+
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
The flash is divided into the following regions, as obtained with
 | 
			
		||||
`ifdtool -f rom.layout backup.rom`:
 | 
			
		||||
```
 | 
			
		||||
00000000:00000fff fd
 | 
			
		||||
00200000:007fffff bios
 | 
			
		||||
00001000:001fffff me
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### Internal programming
 | 
			
		||||
 | 
			
		||||
The main SPI flash can be accessed using flashrom. By default, only
 | 
			
		||||
the BIOS region of the flash is writable. If you wish to change any
 | 
			
		||||
other region (Management Engine or flash descriptor), then an external
 | 
			
		||||
programmer is required.
 | 
			
		||||
 | 
			
		||||
The following command may be used to flash coreboot:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
$ sudo flashrom --noverify-all --ifd -i bios -p internal -w coreboot.rom
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
The use of `--noverify-all` is required since the Management Engine
 | 
			
		||||
region is not readable even by the host.
 | 
			
		||||
 | 
			
		||||
```eval_rst
 | 
			
		||||
In addition to the information here, please see the
 | 
			
		||||
:doc:`../../tutorial/flashing_firmware/index`.
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Hardware monitoring and fan control
 | 
			
		||||
 | 
			
		||||
There are two fan headers for the CPU cooler, CPU_FAN1 and CPU_FAN2. They share
 | 
			
		||||
a single fan tachometer input on the Super I/O while some dedicated logic
 | 
			
		||||
selects which one is allowed to reach it. Two GPIO pins on the Super I/O are
 | 
			
		||||
used to control that logic. The firmware has to set them; coreboot selects
 | 
			
		||||
CPU_FAN1 by default, but the user can change that setting if it was built with
 | 
			
		||||
CONFIG_USE_OPTION_TABLE:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
$ sudo nvramtool -e cpu_fan_header
 | 
			
		||||
[..]
 | 
			
		||||
$ sudo nvramtool -w cpu_fan_header=CPU_FAN2
 | 
			
		||||
$ sudo nvramtool -w cpu_fan_header=None
 | 
			
		||||
$ sudo nvramtool -w cpu_fan_header=Both
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
The setting will take effect after a reboot. Selecting and connecting both fan
 | 
			
		||||
headers is possible but the Super I/O will report wrong fan speeds.
 | 
			
		||||
 | 
			
		||||
Currently there is no automatic, OS-independent fan control, but a software
 | 
			
		||||
like `fancontrol` from the lm-sensors package can be used instead.
 | 
			
		||||
 | 
			
		||||
## Serial port header
 | 
			
		||||
 | 
			
		||||
Serial port 1, provided by the Super I/O, is exposed on a pin header. The
 | 
			
		||||
RS-232 signals are assigned to the header so that its pin numbers map directly
 | 
			
		||||
to the pin numbers of a DE-9 connector. If your serial port doesn't seem to
 | 
			
		||||
work, check if your bracket expects a different assignment. Also don't try to
 | 
			
		||||
connect it directly to a device that operates at TTL levels - it would need a
 | 
			
		||||
level converter like a MAX232.
 | 
			
		||||
 | 
			
		||||
Here is a top view of the serial port header found on this board:
 | 
			
		||||
 | 
			
		||||
                 +---+---+
 | 
			
		||||
             N/C |   | 9 | RI  -> pin 9
 | 
			
		||||
                 +---+---+
 | 
			
		||||
    Pin 8 <- CTS | 8 | 7 | RTS -> pin 7
 | 
			
		||||
                 +---+---+
 | 
			
		||||
    Pin 6 <- DSR | 6 | 5 | GND -> pin 5
 | 
			
		||||
                 +---+---+
 | 
			
		||||
    Pin 4 <- DTR | 4 | 3 | TxD -> pin 3
 | 
			
		||||
                 +---+---+
 | 
			
		||||
    Pin 2 <- RxD | 2 | 1 | DCD -> pin 1
 | 
			
		||||
                 +---+---+
 | 
			
		||||
 | 
			
		||||
## eSATA
 | 
			
		||||
 | 
			
		||||
The eSATA port on the rear I/O panel and the internal connector SATA3_A1 share
 | 
			
		||||
the same controller port on the ASM1061. Attaching an eSATA drive causes a
 | 
			
		||||
multiplexer chip to disconnect the internal port from the SATA controller and
 | 
			
		||||
connect the eSATA port instead. This can be seen on GP23 of the Super I/O
 | 
			
		||||
GPIOs: it is '0' when something is connected to the eSATA port and '1'
 | 
			
		||||
otherwise.
 | 
			
		||||
@@ -130,4 +130,4 @@ Please also see :doc:`../../northbridge/intel/haswell/known-issues`.
 | 
			
		||||
[ASRock H81M-HDS]: https://www.asrock.com/mb/Intel/H81M-HDS/
 | 
			
		||||
[W25Q32FV]: https://www.winbond.com/resource-files/w25q32fv%20revi%2010202015.pdf
 | 
			
		||||
[flashrom]: https://flashrom.org/Flashrom
 | 
			
		||||
[Board manual]: https://web.archive.org/web/20191231093418/http://asrock.pc.cdn.bitgravity.com/Manual/H81M-HDS.pdf
 | 
			
		||||
[Board manual]: http://asrock.pc.cdn.bitgravity.com/Manual/H81M-HDS.pdf
 | 
			
		||||
 
 | 
			
		||||
@@ -190,9 +190,9 @@ This version is usable for all the GPUs.
 | 
			
		||||
- [Board manual]
 | 
			
		||||
- Flash chip datasheet [W25Q64FV]
 | 
			
		||||
 | 
			
		||||
[ASUS F2A85-M]: https://web.archive.org/web/20160320065008/http://www.asus.com/Motherboards/F2A85M/
 | 
			
		||||
[Board manual]: https://web.archive.org/web/20211028063105/https://dlcdnets.asus.com/pub/ASUS/mb/SocketFM2/F2A85-M/E8005_F2A85-M.pdf
 | 
			
		||||
[ASUS F2A85-M]: https://www.asus.com/Motherboards/F2A85M/
 | 
			
		||||
[Board manual]: https://dlcdnets.asus.com/pub/ASUS/mb/SocketFM2/F2A85-M/E8005_F2A85-M.pdf
 | 
			
		||||
[flashrom]: https://flashrom.org/Flashrom
 | 
			
		||||
[Piledriver]: https://en.wikipedia.org/wiki/Piledriver_%28microarchitecture%29#APU_lines
 | 
			
		||||
[TeraScale 3]: https://en.wikipedia.org/wiki/TeraScale_%28microarchitecture%29#TeraScale_3
 | 
			
		||||
[W25Q64FV]: https://web.archive.org/web/20220127184640/https://www.winbond.com/resource-files/w25q64fv%20revs%2007182017.pdf
 | 
			
		||||
[W25Q64FV]: https://www.winbond.com/resource-files/w25q64fv%20revs%2007182017.pdf
 | 
			
		||||
 
 | 
			
		||||
@@ -1,108 +0,0 @@
 | 
			
		||||
# ASUS P2B-LS
 | 
			
		||||
 | 
			
		||||
This page describes how to run coreboot on the ASUS P2B-LS mainboard.
 | 
			
		||||
 | 
			
		||||
## Variants
 | 
			
		||||
 | 
			
		||||
- P2B-LS
 | 
			
		||||
- P2B-L (Same circuit board with SCSI components omitted)
 | 
			
		||||
- P2B-S (Same circuit board with ethernet components omitted)
 | 
			
		||||
 | 
			
		||||
## Flashing coreboot
 | 
			
		||||
 | 
			
		||||
```eval_rst
 | 
			
		||||
+---------------------+---------------------------+
 | 
			
		||||
| Type                | Value                     |
 | 
			
		||||
+=====================+===========================+
 | 
			
		||||
| Model               | SST 39SF020A (or similar) |
 | 
			
		||||
+---------------------+---------------------------+
 | 
			
		||||
| Protocol            | Parallel                  |
 | 
			
		||||
+---------------------+---------------------------+
 | 
			
		||||
| Size                | 256 KiB                   |
 | 
			
		||||
+---------------------+---------------------------+
 | 
			
		||||
| Package             | DIP-32                    |
 | 
			
		||||
+---------------------+---------------------------+
 | 
			
		||||
| Socketed            | yes                       |
 | 
			
		||||
+---------------------+---------------------------+
 | 
			
		||||
| Write protection    | no                        |
 | 
			
		||||
+---------------------+---------------------------+
 | 
			
		||||
| Dual BIOS feature   | no                        |
 | 
			
		||||
+---------------------+---------------------------+
 | 
			
		||||
| Internal flashing   | yes                       |
 | 
			
		||||
+---------------------+---------------------------+
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
[flashrom] works out of the box since 0.9.2.
 | 
			
		||||
Because of deficiency in vendor firmware, user needs to override the laptop
 | 
			
		||||
warning as prompted. Once coreboot is in place there will be no further issue.
 | 
			
		||||
 | 
			
		||||
### CPU microcode considerations
 | 
			
		||||
 | 
			
		||||
By default, this board includes microcode updates for 5 families of Intel CPUs
 | 
			
		||||
because of the wide variety of CPUs the board supports, directly or with an
 | 
			
		||||
adapter. These take up a third of the total flash space leaving only 20kB free
 | 
			
		||||
in the final cbfs image. It may be necessary to build a custom microcode update
 | 
			
		||||
file by manually concatenating files in 3rdparty/intel-microcode/intel-ucode
 | 
			
		||||
for only CPU models that the board will actually be run with.
 | 
			
		||||
 | 
			
		||||
## Working
 | 
			
		||||
 | 
			
		||||
- Slot 1 and Socket 370 CPUs and their L1/L2 caches
 | 
			
		||||
- PS/2 keyboard with SeaBIOS (See [Known issues])
 | 
			
		||||
- IDE hard drives
 | 
			
		||||
- Ethernet (-LS, -L; Intel 82558)
 | 
			
		||||
- SCSI (-LS, -S; Adaptec AIC7890)
 | 
			
		||||
- USB
 | 
			
		||||
- ISA add-on cards
 | 
			
		||||
- PCI add-on cards
 | 
			
		||||
- AGP graphics card
 | 
			
		||||
- Floppy
 | 
			
		||||
- Serial ports 1 and 2
 | 
			
		||||
- Reboot
 | 
			
		||||
- Soft off
 | 
			
		||||
 | 
			
		||||
## Known issues
 | 
			
		||||
 | 
			
		||||
- PS/2 keyboard may not be usable until Linux has completely booted.
 | 
			
		||||
  With SeaBIOS as payload, setting keyboard initialization timeout to
 | 
			
		||||
  500ms may fix the issue.
 | 
			
		||||
 | 
			
		||||
- i440BX does not support 256Mbit RAM modules. If installed, coreboot
 | 
			
		||||
  will attempt to initialize them at half their capacity anyway
 | 
			
		||||
  whereas vendor firmware will not boot at all.
 | 
			
		||||
 | 
			
		||||
- ECC memory can be used, but ECC support is still pending.
 | 
			
		||||
 | 
			
		||||
- Termination is enabled for all SCSI ports (if equipped). Support to
 | 
			
		||||
  disable termination is pending. Note that the SCSI-68 port is
 | 
			
		||||
  always terminated, even with vendor firmware.
 | 
			
		||||
 | 
			
		||||
## Untested
 | 
			
		||||
 | 
			
		||||
- Parallel port
 | 
			
		||||
- EDO memory
 | 
			
		||||
- Infrared
 | 
			
		||||
- PC speaker
 | 
			
		||||
 | 
			
		||||
## Not working
 | 
			
		||||
 | 
			
		||||
- S3 suspend to RAM
 | 
			
		||||
 | 
			
		||||
## Technology
 | 
			
		||||
 | 
			
		||||
```eval_rst
 | 
			
		||||
+------------------+--------------------------------------------------+
 | 
			
		||||
| Northbridge      | Intel I440BX                                     |
 | 
			
		||||
+------------------+--------------------------------------------------+
 | 
			
		||||
| Southbridge      | i82371eb                                         |
 | 
			
		||||
+------------------+--------------------------------------------------+
 | 
			
		||||
| CPU              | P6 family for Slot 1 and Socket 370              |
 | 
			
		||||
|                  | (all models from model_63x to model_6bx)         |
 | 
			
		||||
+------------------+--------------------------------------------------+
 | 
			
		||||
| Super I/O        | winbond/w83977tf                                 |
 | 
			
		||||
+------------------+--------------------------------------------------+
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Extra resources
 | 
			
		||||
 | 
			
		||||
[flashrom]: https://flashrom.org/Flashrom
 | 
			
		||||
@@ -1,106 +0,0 @@
 | 
			
		||||
# ASUS P3B-F
 | 
			
		||||
 | 
			
		||||
This page describes how to run coreboot on the ASUS P3B-F mainboard.
 | 
			
		||||
 | 
			
		||||
## Flashing coreboot
 | 
			
		||||
 | 
			
		||||
```eval_rst
 | 
			
		||||
+---------------------+---------------------------+
 | 
			
		||||
| Type                | Value                     |
 | 
			
		||||
+=====================+===========================+
 | 
			
		||||
| Model               | SST 39SF020A (or similar) |
 | 
			
		||||
+---------------------+---------------------------+
 | 
			
		||||
| Protocol            | Parallel                  |
 | 
			
		||||
+---------------------+---------------------------+
 | 
			
		||||
| Size                | 256 KiB                   |
 | 
			
		||||
+---------------------+---------------------------+
 | 
			
		||||
| Package             | DIP-32                    |
 | 
			
		||||
+---------------------+---------------------------+
 | 
			
		||||
| Socketed            | yes                       |
 | 
			
		||||
+---------------------+---------------------------+
 | 
			
		||||
| Write protection    | See below                 |
 | 
			
		||||
+---------------------+---------------------------+
 | 
			
		||||
| Internal flashing   | yes                       |
 | 
			
		||||
+---------------------+---------------------------+
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
flashrom supports this mainboard since commit c7e9a6e15153684672bbadd1fc6baed8247ba0f6.
 | 
			
		||||
If you are using older versions of flashrom, below has to be done (with ACPI disabled!)
 | 
			
		||||
before flashrom can detect the flash chip:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
  #  rmmod w83781d
 | 
			
		||||
  #  modprobe i2c-dev
 | 
			
		||||
  #  i2cset 0 0x48 0x80 0x80
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Upon power up, flash chip is inaccessible until flashrom has been run once.
 | 
			
		||||
Since flashrom does not support reversing board enabling steps,
 | 
			
		||||
once it detects the flash chip, there will be no write protection until
 | 
			
		||||
the next power cycle.
 | 
			
		||||
 | 
			
		||||
### CPU microcode considerations
 | 
			
		||||
 | 
			
		||||
By default, this board includes microcode updates for 5 families of Intel CPUs
 | 
			
		||||
because of the wide variety of CPUs the board supports, directly or with an
 | 
			
		||||
adapter. These take up a third of the total flash space leaving only 20kB free
 | 
			
		||||
in the final cbfs image. It may be necessary to build a custom microcode update
 | 
			
		||||
file by manually concatenating files in 3rdparty/intel-microcode/intel-ucode
 | 
			
		||||
for only CPU models that the board will actually be run with.
 | 
			
		||||
 | 
			
		||||
## Working
 | 
			
		||||
 | 
			
		||||
- Slot 1 and Socket 370 CPUs and their L1/L2 caches
 | 
			
		||||
- PS/2 keyboard with SeaBIOS (See [Known issues])
 | 
			
		||||
- IDE hard drives
 | 
			
		||||
- USB
 | 
			
		||||
- PCI add-on cards
 | 
			
		||||
- AGP graphics cards
 | 
			
		||||
- Serial ports 1 and 2
 | 
			
		||||
- Reboot
 | 
			
		||||
 | 
			
		||||
## Known issues
 | 
			
		||||
 | 
			
		||||
- PS/2 keyboard may not be usable until Linux has completely booted. With SeaBIOS
 | 
			
		||||
  as payload, setting keyboard initialization timeout to 2500ms may help.
 | 
			
		||||
 | 
			
		||||
- The coreboot+SeaBIOS combination boots so quickly some IDE hard drives are not
 | 
			
		||||
  yet ready by the time SeaBIOS attempts to boot from them.
 | 
			
		||||
 | 
			
		||||
- i440BX does not support 256Mbit RAM modules. If installed, coreboot
 | 
			
		||||
  will attempt to initialize them at half their capacity anyway
 | 
			
		||||
  whereas vendor firmware will not boot at all.
 | 
			
		||||
 | 
			
		||||
- ECC memory can be used, but ECC support is still pending.
 | 
			
		||||
 | 
			
		||||
## Untested
 | 
			
		||||
 | 
			
		||||
- Floppy
 | 
			
		||||
- Parallel port
 | 
			
		||||
- EDO memory
 | 
			
		||||
- ECC memory
 | 
			
		||||
- Infrared
 | 
			
		||||
- PC speaker
 | 
			
		||||
 | 
			
		||||
## Not working
 | 
			
		||||
 | 
			
		||||
- ACPI (Support is currently [under gerrit review](https://review.coreboot.org/c/coreboot/+/41098))
 | 
			
		||||
 | 
			
		||||
## Technology
 | 
			
		||||
 | 
			
		||||
```eval_rst
 | 
			
		||||
+------------------+--------------------------------------------------+
 | 
			
		||||
| Northbridge      | Intel I440BX                                     |
 | 
			
		||||
+------------------+--------------------------------------------------+
 | 
			
		||||
| Southbridge      | i82371eb                                         |
 | 
			
		||||
+------------------+--------------------------------------------------+
 | 
			
		||||
| CPU              | P6 family for Slot 1 and Socket 370              |
 | 
			
		||||
|                  | (all models from model_63x to model_6bx)         |
 | 
			
		||||
+------------------+--------------------------------------------------+
 | 
			
		||||
| Super I/O        | winbond/w83977tf                                 |
 | 
			
		||||
+------------------+--------------------------------------------------+
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Extra resources
 | 
			
		||||
 | 
			
		||||
[flashrom]: https://flashrom.org/Flashrom
 | 
			
		||||
@@ -130,5 +130,5 @@ You can also control the CPU fan with similar rules:
 | 
			
		||||
    echo 2000 >/sys/class/hwmon/hwmon2/pwm1_tolerance
 | 
			
		||||
 | 
			
		||||
[ASUS P5Q]: https://www.asus.com/Motherboards/P5Q
 | 
			
		||||
[this guide]: ../../tutorial/flashing_firmware/int_flashrom.md
 | 
			
		||||
[this guide]: https://doc.coreboot.org/flash_tutorial/int_flashrom.html
 | 
			
		||||
[kernel docs]: https://www.kernel.org/doc/Documentation/hwmon/w83627ehf.rst
 | 
			
		||||
 
 | 
			
		||||