Compare commits
	
		
			19 Commits
		
	
	
		
			upstream-7
			...
			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 aspects we don't follow here. | ||||||
| --ignore C99_COMMENTS | --ignore C99_COMMENTS | ||||||
| --ignore GLOBAL_INITIALISERS | --ignore GLOBAL_INITIALISERS | ||||||
| --ignore COMPARISON_TO_NULL |  | ||||||
| --ignore INITIALISED_STATIC | --ignore INITIALISED_STATIC | ||||||
| --ignore LINE_SPACING | --ignore LINE_SPACING | ||||||
| --ignore NEW_TYPEDEFS | --ignore NEW_TYPEDEFS | ||||||
|  | --ignore PREFER_ALIGNED | ||||||
|  | --ignore PREFER_PACKED | ||||||
|  | --ignore PREFER_PRINTF | ||||||
| --ignore SPLIT_STRING | --ignore SPLIT_STRING | ||||||
| --ignore BLOCK_COMMENT_STYLE | --ignore BLOCK_COMMENT_STYLE | ||||||
| --ignore AVOID_EXTERNS | --ignore AVOID_EXTERNS | ||||||
| @@ -20,7 +22,6 @@ | |||||||
| --ignore PRINTK_WITHOUT_KERN_LEVEL | --ignore PRINTK_WITHOUT_KERN_LEVEL | ||||||
| --ignore ASSIGN_IN_IF | --ignore ASSIGN_IN_IF | ||||||
| --ignore UNNECESSARY_ELSE | --ignore UNNECESSARY_ELSE | ||||||
| --ignore GERRIT_CHANGE_ID |  | ||||||
|  |  | ||||||
| # FILE_PATH_CHANGES seems to not be working correctly. It will | # FILE_PATH_CHANGES seems to not be working correctly. It will | ||||||
| # choke on added / deleted files even if the MAINTAINERS file | # choke on added / deleted files even if the MAINTAINERS file | ||||||
|   | |||||||
							
								
								
									
										249
									
								
								.clang-format
									
									
									
									
									
								
							
							
						
						| @@ -1,228 +1,21 @@ | |||||||
| # SPDX-License-Identifier: GPL-2.0 | BasedOnStyle:					LLVM | ||||||
| # | Language:					Cpp | ||||||
| # clang-format configuration file. Intended for clang-format >= 16. | IndentWidth:					8 | ||||||
| # | UseTab:						Always | ||||||
| # For more information, see: | BreakBeforeBraces:				Linux | ||||||
| # | AllowShortIfStatementsOnASingleLine:		false | ||||||
| #   https://clang.llvm.org/docs/ClangFormat.html | IndentCaseLabels:				false | ||||||
| #   https://clang.llvm.org/docs/ClangFormatStyleOptions.html | SortIncludes:					false | ||||||
| #   https://clang-format-configurator.site/ | ContinuationIndentWidth:			8 | ||||||
| # | ColumnLimit:					96 | ||||||
|  | AlwaysBreakBeforeMultilineStrings:		true | ||||||
| --- | AllowShortLoopsOnASingleLine:			false | ||||||
| Language:        Cpp | AllowShortFunctionsOnASingleLine:		false | ||||||
| AccessModifierOffset: -4 | AlignEscapedNewlinesLeft:			false | ||||||
| AlignAfterOpenBracket: Align | AlignTrailingComments:				true | ||||||
| AlignArrayOfStructures: Left | AllowAllParametersOfDeclarationOnNextLine:	false | ||||||
| AlignConsecutiveAssignments: | AlignAfterOpenBracket:				true | ||||||
|   Enabled:         false | SpaceAfterCStyleCast:				false | ||||||
|   AcrossEmptyLines: false | MaxEmptyLinesToKeep:				2 | ||||||
|   AcrossComments:  true | BreakBeforeBinaryOperators:			NonAssignment | ||||||
|   AlignCompound:   false | BreakStringLiterals:				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 |  | ||||||
| ... |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -9,7 +9,3 @@ charset = utf-8 | |||||||
| insert_final_newline = true | insert_final_newline = true | ||||||
| end_of_line = lf | end_of_line = lf | ||||||
| trim_trailing_whitespace = true | trim_trailing_whitespace = true | ||||||
|  |  | ||||||
| [*.sh] |  | ||||||
| indent_style = space |  | ||||||
| indent_size = 2 |  | ||||||
|   | |||||||
							
								
								
									
										5
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						| @@ -31,9 +31,6 @@ site-local | |||||||
| # Development friendly files | # Development friendly files | ||||||
| tags | tags | ||||||
| .clang_complete | .clang_complete | ||||||
| .cache |  | ||||||
| compile_commands.json |  | ||||||
| .vscode/ |  | ||||||
|  |  | ||||||
| # Cross-compile toolkits | # Cross-compile toolkits | ||||||
| xgcc/ | xgcc/ | ||||||
| @@ -43,3 +40,5 @@ tarballs/ | |||||||
| *~ | *~ | ||||||
| *.kate-swp | *.kate-swp | ||||||
| *.kdev4 | *.kdev4 | ||||||
|  |  | ||||||
|  | doxygen/* | ||||||
|   | |||||||
							
								
								
									
										40
									
								
								.gitmodules
									
									
									
									
										vendored
									
									
								
							
							
						
						| @@ -1,70 +1,62 @@ | |||||||
| [submodule "3rdparty/blobs"] | [submodule "3rdparty/blobs"] | ||||||
| 	path = 3rdparty/blobs | 	path = 3rdparty/blobs | ||||||
| 	url = ../blobs.git | 	url = https://review.coreboot.org/blobs.git | ||||||
| 	update = none | 	update = none | ||||||
| 	ignore = dirty | 	ignore = dirty | ||||||
| [submodule "util/nvidia-cbootimage"] | [submodule "util/nvidia-cbootimage"] | ||||||
| 	path = util/nvidia/cbootimage | 	path = util/nvidia/cbootimage | ||||||
| 	url = ../nvidia-cbootimage.git | 	url = https://review.coreboot.org/nvidia-cbootimage.git | ||||||
| [submodule "vboot"] | [submodule "vboot"] | ||||||
| 	path = 3rdparty/vboot | 	path = 3rdparty/vboot | ||||||
| 	url = ../vboot.git | 	url = https://review.coreboot.org/vboot.git | ||||||
| 	branch = main | 	branch = main | ||||||
| [submodule "arm-trusted-firmware"] | [submodule "arm-trusted-firmware"] | ||||||
| 	path = 3rdparty/arm-trusted-firmware | 	path = 3rdparty/arm-trusted-firmware | ||||||
| 	url = ../arm-trusted-firmware.git | 	url = https://review.coreboot.org/arm-trusted-firmware.git | ||||||
| [submodule "3rdparty/chromeec"] | [submodule "3rdparty/chromeec"] | ||||||
| 	path = 3rdparty/chromeec | 	path = 3rdparty/chromeec | ||||||
| 	url = ../chrome-ec.git | 	url = https://review.coreboot.org/chrome-ec.git | ||||||
| [submodule "libhwbase"] | [submodule "libhwbase"] | ||||||
| 	path = 3rdparty/libhwbase | 	path = 3rdparty/libhwbase | ||||||
| 	url = ../libhwbase.git | 	url = https://review.coreboot.org/libhwbase.git | ||||||
| [submodule "libgfxinit"] | [submodule "libgfxinit"] | ||||||
| 	path = 3rdparty/libgfxinit | 	path = 3rdparty/libgfxinit | ||||||
| 	url = ../libgfxinit.git | 	url = https://review.coreboot.org/libgfxinit.git | ||||||
| [submodule "3rdparty/fsp"] | [submodule "3rdparty/fsp"] | ||||||
| 	path = 3rdparty/fsp | 	path = 3rdparty/fsp | ||||||
| 	url = ../fsp.git | 	url = https://review.coreboot.org/fsp.git | ||||||
| 	update = none | 	update = none | ||||||
| 	ignore = dirty | 	ignore = dirty | ||||||
| [submodule "opensbi"] | [submodule "opensbi"] | ||||||
| 	path = 3rdparty/opensbi | 	path = 3rdparty/opensbi | ||||||
| 	url = ../opensbi.git | 	url = https://review.coreboot.org/opensbi.git | ||||||
| [submodule "intel-microcode"] | [submodule "intel-microcode"] | ||||||
| 	path = 3rdparty/intel-microcode | 	path = 3rdparty/intel-microcode | ||||||
| 	url = ../intel-microcode.git | 	url = https://review.coreboot.org/intel-microcode.git | ||||||
| 	update = none | 	update = none | ||||||
| 	ignore = dirty | 	ignore = dirty | ||||||
| 	branch = main | 	branch = main | ||||||
| [submodule "3rdparty/ffs"] | [submodule "3rdparty/ffs"] | ||||||
| 	path = 3rdparty/ffs | 	path = 3rdparty/ffs | ||||||
| 	url = ../ffs.git | 	url = https://review.coreboot.org/ffs.git | ||||||
| [submodule "3rdparty/amd_blobs"] | [submodule "3rdparty/amd_blobs"] | ||||||
| 	path = 3rdparty/amd_blobs | 	path = 3rdparty/amd_blobs | ||||||
| 	url = ../amd_blobs | 	url = https://review.coreboot.org/amd_blobs | ||||||
| 	update = none | 	update = none | ||||||
| 	ignore = dirty | 	ignore = dirty | ||||||
| [submodule "3rdparty/cmocka"] | [submodule "3rdparty/cmocka"] | ||||||
| 	path = 3rdparty/cmocka | 	path = 3rdparty/cmocka | ||||||
| 	url = ../cmocka.git | 	url = https://review.coreboot.org/cmocka.git | ||||||
| 	update = none | 	update = none | ||||||
| 	branch = stable-1.1 |  | ||||||
| [submodule "3rdparty/qc_blobs"] | [submodule "3rdparty/qc_blobs"] | ||||||
| 	path = 3rdparty/qc_blobs | 	path = 3rdparty/qc_blobs | ||||||
| 	url = ../qc_blobs.git | 	url = https://review.coreboot.org/qc_blobs.git | ||||||
| 	update = none | 	update = none | ||||||
| 	ignore = dirty | 	ignore = dirty | ||||||
| [submodule "3rdparty/intel-sec-tools"] | [submodule "3rdparty/intel-sec-tools"] | ||||||
| 	path = 3rdparty/intel-sec-tools | 	path = 3rdparty/intel-sec-tools | ||||||
| 	url = ../9esec-security-tooling.git | 	url = https://review.coreboot.org/9esec-security-tooling.git | ||||||
| [submodule "3rdparty/stm"] | [submodule "3rdparty/stm"] | ||||||
| 	path = 3rdparty/stm | 	path = 3rdparty/stm | ||||||
| 	url = ../STM | 	url = https://review.coreboot.org/STM | ||||||
| 	branch = stmpe | 	branch = stmpe | ||||||
| [submodule "util/goswid"] |  | ||||||
| 	path = util/goswid |  | ||||||
| 	url = ../goswid |  | ||||||
| 	branch = trunk |  | ||||||
| [submodule "src/vendorcode/amd/opensil/genoa_poc/opensil"] |  | ||||||
| 	path = src/vendorcode/amd/opensil/genoa_poc/opensil |  | ||||||
| 	url = ../opensil_genoa_poc.git |  | ||||||
|   | |||||||
							
								
								
									
										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 | 3mdeb Embedded Systems Consulting | ||||||
| 9elements Agency GmbH | 9elements Agency GmbH | ||||||
| Aamir Bohra |  | ||||||
| Aaron Durbin |  | ||||||
| Abe Levkoy |  | ||||||
| Abel Briggs |  | ||||||
| Abhinav Hardikar | Abhinav Hardikar | ||||||
| AdaCore |  | ||||||
| Adam Liu |  | ||||||
| Adam Mills |  | ||||||
| Advanced Computing Lab, LANL | Advanced Computing Lab, LANL | ||||||
| Advanced Micro Devices, Inc. | Advanced Micro Devices, Inc. | ||||||
|  | AdaCore | ||||||
| AG Electronics Ltd. | AG Electronics Ltd. | ||||||
| Ahamed Husni |  | ||||||
| Akshu Agrawal |  | ||||||
| Al Hirani |  | ||||||
| Alan Huang |  | ||||||
| AlanKY Lee |  | ||||||
| Alec Wang |  | ||||||
| Alex James |  | ||||||
| Alex Levin |  | ||||||
| Alex Miao |  | ||||||
| Alex Thiessen | Alex Thiessen | ||||||
| Alex Züpke | Alex Züpke | ||||||
| Alex1 Kao |  | ||||||
| Alexander Couzens | Alexander Couzens | ||||||
| Alexander Goncharov |  | ||||||
| Alexandru Gagniuc | Alexandru Gagniuc | ||||||
| Alexey Buyanov |  | ||||||
| Alexey Vazhnov |  | ||||||
| Alice Sell |  | ||||||
| Allen-KH Cheng |  | ||||||
| Amanda Hwang |  | ||||||
| American Megatrends International, LLC |  | ||||||
| Amersel |  | ||||||
| Amit Caleechurn |  | ||||||
| Analog Devices Inc. | Analog Devices Inc. | ||||||
| Analogix Semiconductor | Analogix Semiconductor | ||||||
| Anand Mistry |  | ||||||
| Anand Vaikar |  | ||||||
| Andre Heider | Andre Heider | ||||||
| Andrew McRae |  | ||||||
| Andrew SH Cheng |  | ||||||
| Andrey Pronin |  | ||||||
| Andriy Gapon | Andriy Gapon | ||||||
| Andy Fleming | Andy Fleming | ||||||
| Andy Pont |  | ||||||
| Andy-ld Lu |  | ||||||
| Angel Pons | Angel Pons | ||||||
| Anil Kumar K |  | ||||||
| Anna Karaś |  | ||||||
| Annie Chen |  | ||||||
| Anton Kochkov | Anton Kochkov | ||||||
| Ao Zhong |  | ||||||
| Arashk Mahshidfar |  | ||||||
| Arec Kao |  | ||||||
| Ariel Fang |  | ||||||
| ARM Limited and Contributors | ARM Limited and Contributors | ||||||
| Arthur Heymans | Arthur Heymans | ||||||
| Asami Doi | Asami Doi | ||||||
| Aseda Aboagye |  | ||||||
| Ashish Kumar Mishra |  | ||||||
| Ashqti |  | ||||||
| ASPEED Technology Inc. | ASPEED Technology Inc. | ||||||
| Atheros Corporation | Atheros Corporation | ||||||
| Atmel Corporation | Atmel Corporation | ||||||
| Balaji Manigandan |  | ||||||
| Balázs Vinarz |  | ||||||
| BAP - Bruhnspace Advanced Projects | BAP - Bruhnspace Advanced Projects | ||||||
| Baruch Siach |  | ||||||
| Ben Chuang |  | ||||||
| Ben Kao |  | ||||||
| Ben McMillen |  | ||||||
| Ben Zhang |  | ||||||
| Benjamin Doron |  | ||||||
| Bernardo Perez Priego |  | ||||||
| Bhanu Prakash Maiya |  | ||||||
| Bill Xie | Bill Xie | ||||||
| Bin Meng |  | ||||||
| Bitland Tech Inc. | Bitland Tech Inc. | ||||||
| Bob Moragues |  | ||||||
| Bora Guvendik |  | ||||||
| Boris Barbulovski | Boris Barbulovski | ||||||
| Boris Mittelberg |  | ||||||
| Brandon Breitenstein |  | ||||||
| Brian Norris |  | ||||||
| Bryant Ou |  | ||||||
| Carl-Daniel Hailfinger | Carl-Daniel Hailfinger | ||||||
| Casper Chang |  | ||||||
| Caveh Jalali |  | ||||||
| Cavium Inc. | Cavium Inc. | ||||||
| Chao Gui |  | ||||||
| Chen-Tsung Hsieh |  | ||||||
| Chia-Ling Hou |  | ||||||
| Chien-Chih Tseng |  | ||||||
| Chris Wang |  | ||||||
| Christian Gmeiner |  | ||||||
| Christian Walter |  | ||||||
| Christoph Grenz | Christoph Grenz | ||||||
| Christopher Meis |  | ||||||
| Chuangwei Technology Co., Ltd |  | ||||||
| Chun-Jie Chen |  | ||||||
| Cirrus Logic, Inc. |  | ||||||
| CK HU |  | ||||||
| Clay Daniels |  | ||||||
| Cliff Huang |  | ||||||
| Code Aurora Forum | Code Aurora Forum | ||||||
| Compal Electronics, Inc. |  | ||||||
| Cong Yang |  | ||||||
| CoolStar |  | ||||||
| coresystems GmbH | coresystems GmbH | ||||||
| Corey Osgood | Corey Osgood | ||||||
| Curt Brune | Curt Brune | ||||||
| Curtis Chen |  | ||||||
| Custom Ideas | Custom Ideas | ||||||
| Cyberus Technology GmbH |  | ||||||
| Da Lao |  | ||||||
| Daisuke Nojiri |  | ||||||
| Damien Zammit | Damien Zammit | ||||||
| Dan Callaghan |  | ||||||
| Daniel Campello |  | ||||||
| Daniel Gröber |  | ||||||
| Daniel Kang |  | ||||||
| Daniel Maslowski |  | ||||||
| Daniel Peng |  | ||||||
| Daniel Rosa Franzini |  | ||||||
| Dave Airlie | Dave Airlie | ||||||
| David Brownell | David Brownell | ||||||
| David Greenman | David Greenman | ||||||
| David Hendricks | David Hendricks | ||||||
| David Lin |  | ||||||
| David Milosevic |  | ||||||
| David Mosberger-Tang | David Mosberger-Tang | ||||||
| David Mueller | David Mueller | ||||||
| David S. Peterson | David S. Peterson | ||||||
| David Wu |  | ||||||
| Dawei Chien |  | ||||||
| Deepika Punyamurtula |  | ||||||
| Deepti Deshatty |  | ||||||
| Denis 'GNUtoo' Carikli | Denis 'GNUtoo' Carikli | ||||||
| Denis Dowling | Denis Dowling | ||||||
| DENX Software Engineering | DENX Software Engineering | ||||||
| Deomid 'rojer' Ryabkov |  | ||||||
| Derek Basehore |  | ||||||
| Derek Huang |  | ||||||
| Derek Waldner | Derek Waldner | ||||||
| Digital Design Corporation | Digital Design Corporation | ||||||
| Dinesh Gehlot |  | ||||||
| Divya S Sasidharan |  | ||||||
| Dmitry Ponamorev |  | ||||||
| Dmitry Torokhov |  | ||||||
| DMP Electronics Inc. | DMP Electronics Inc. | ||||||
| Dominik Behr |  | ||||||
| Donghwa Lee | Donghwa Lee | ||||||
| Drew Eckhardt | Drew Eckhardt | ||||||
| Dtrain Hsu |  | ||||||
| Duan Huayang |  | ||||||
| Dun Tan |  | ||||||
| Duncan Laurie |  | ||||||
| Dynon Avionics | Dynon Avionics | ||||||
| Ed Sharma |  | ||||||
| Eddy Lu |  | ||||||
| Edward Hill |  | ||||||
| Edward O'Callaghan | Edward O'Callaghan | ||||||
| Edward-JW Yang |  | ||||||
| Egbert Eich | Egbert Eich | ||||||
| Elias Souza |  | ||||||
| Eloy Degen |  | ||||||
| ELSOFT AG | ELSOFT AG | ||||||
| Eltan B.V | Eltan B.V | ||||||
| Eltan B.V. |  | ||||||
| Elyes Haouas | Elyes Haouas | ||||||
| Eran Mitrani |  | ||||||
| Eric Biederman | Eric Biederman | ||||||
| Eric Lai |  | ||||||
| Eric Peers |  | ||||||
| EricKY Cheng |  | ||||||
| EricR Lai |  | ||||||
| Erik van den Bogaert |  | ||||||
| Eswar Nallusamy | Eswar Nallusamy | ||||||
| Ethan Tsao |  | ||||||
| Eugene Myers |  | ||||||
| Evan Green |  | ||||||
| Evgeny Zinoviev | Evgeny Zinoviev | ||||||
| Fabian Groffen |  | ||||||
| Fabian Kunkel | Fabian Kunkel | ||||||
| Fabio Aiuto |  | ||||||
| Fabrice Bellard | Fabrice Bellard | ||||||
| Facebook, Inc. | Facebook, Inc. | ||||||
| Felix Friedlander |  | ||||||
| Felix Held | Felix Held | ||||||
| Felix Singer | Felix Singer | ||||||
| Fengquan Chen |  | ||||||
| Flora Fu |  | ||||||
| Florian Laufenböck |  | ||||||
| Francois Toguo Fotso |  | ||||||
| Frank Chu |  | ||||||
| Frank Wu |  | ||||||
| Franklin Lin |  | ||||||
| Frans Hendriks |  | ||||||
| Fred Reitberger |  | ||||||
| Frederic Potter | Frederic Potter | ||||||
| Free Software Foundation, Inc. | Free Software Foundation, Inc. | ||||||
| Freescale Semiconductor, Inc. | Freescale Semiconductor, Inc. | ||||||
| Furquan Shaikh |  | ||||||
| Gaggery Tsai |  | ||||||
| Gang C Chen  |  | ||||||
| Garmin Chang |  | ||||||
| Gary Jennejohn | Gary Jennejohn | ||||||
| George Trudeau | George Trudeau | ||||||
| Gerald Van Baren | Gerald Van Baren | ||||||
| @@ -223,563 +84,163 @@ Gerd Hoffmann | |||||||
| Gergely Kiss | Gergely Kiss | ||||||
| Google LLC | Google LLC | ||||||
| Greg Watson | Greg Watson | ||||||
| Grzegorz Bernacki |  | ||||||
| Guennadi Liakhovetski | Guennadi Liakhovetski | ||||||
| Guodong Liu |  | ||||||
| Gwendal Grignou |  | ||||||
| Hal Martin | Hal Martin | ||||||
| Hao Chou |  | ||||||
| Hao Wang |  | ||||||
| HardenedLinux | HardenedLinux | ||||||
| Harsha B R |  | ||||||
| Harshit Sharma |  | ||||||
| Henry C Chen |  | ||||||
| Hewlett Packard Enterprise Development LP |  | ||||||
| Hewlett-Packard Development Company, L.P. | Hewlett-Packard Development Company, L.P. | ||||||
| Himanshu Sahdev | Hewlett Packard Enterprise Development LP | ||||||
| Housong Zhang |  | ||||||
| Hsiao Chien Sung |  | ||||||
| Hsin-hsiung wang |  | ||||||
| Hsin-Te Yuan |  | ||||||
| Hsuan Ting Chen |  | ||||||
| Huaqin Technology Co., Ltd |  | ||||||
| Huaqin Telecom Inc. | Huaqin Telecom Inc. | ||||||
| Hui Liu |  | ||||||
| Huijuan Xie |  | ||||||
| Hung-Te Lin |  | ||||||
| Ian Douglas Scott |  | ||||||
| Ian Feng |  | ||||||
| IBM Corporation | IBM Corporation | ||||||
| Idwer Vollering | Idwer Vollering | ||||||
| Igor Bagnucki |  | ||||||
| Igor Pavlov | Igor Pavlov | ||||||
| Ikjoon Jang |  | ||||||
| Imagination Technologies | Imagination Technologies | ||||||
| Infineon Technologies | Infineon Technologies | ||||||
| InKi Dae | InKi Dae | ||||||
| INSPUR Co., Ltd |  | ||||||
| Intel Corporation | Intel Corporation | ||||||
| Inventec Corp |  | ||||||
| Iru Cai | Iru Cai | ||||||
| Isaac Lee |  | ||||||
| Isaku Yamahata | Isaku Yamahata | ||||||
| Ivan Chen |  | ||||||
| Ivan Vatlin | Ivan Vatlin | ||||||
| Ivy Jian |  | ||||||
| Jack Rosenthal |  | ||||||
| Jacob Garber |  | ||||||
| Jairaj Arava |  | ||||||
| Jakub Czapiga |  | ||||||
| James Chao |  | ||||||
| James Lo |  | ||||||
| James Ye | 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 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 Pillow | ||||||
| Joe Tessler |  | ||||||
| Joel Kitching |  | ||||||
| Joey Peng |  | ||||||
| Johanna Schander | Johanna Schander | ||||||
| John Su |  | ||||||
| John Zhao |  | ||||||
| Johnny Li |  | ||||||
| Johnny Lin |  | ||||||
| johnson wang |  | ||||||
| Jon Murphy |  | ||||||
| Jonas 'Sortie' Termansen | Jonas 'Sortie' Termansen | ||||||
| Jonas Loeffelholz |  | ||||||
| Jonathan A. Kollasch | Jonathan A. Kollasch | ||||||
| Jonathan Neuschäfer | Jonathan Neuschäfer | ||||||
| Jonathan Zhang |  | ||||||
| Jonathon Hall |  | ||||||
| Jordan Crouse | Jordan Crouse | ||||||
| Jörg Mische |  | ||||||
| Joseph Smith | 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 Hui | ||||||
| Keith Packard | Keith Packard | ||||||
| Kenneth Chan |  | ||||||
| Kevin Chang |  | ||||||
| Kevin Cheng |  | ||||||
| Kevin Chiu |  | ||||||
| Kevin Chowski |  | ||||||
| Kevin Cody-Little | Kevin Cody-Little | ||||||
| Kevin Keijzer |  | ||||||
| Kevin O'Connor | Kevin O'Connor | ||||||
| Kevin3 Yang |  | ||||||
| kewei xu |  | ||||||
| Kilari Raasi |  | ||||||
| Kirk Wang |  | ||||||
| Konrad Adamczyk |  | ||||||
| Kontron Europe GmbH | Kontron Europe GmbH | ||||||
| Kornel Dulęba |  | ||||||
| Krishna P Bhat D |  | ||||||
| Krystian Hebel |  | ||||||
| Kshitij | Kshitij | ||||||
| Kshitiz Godara |  | ||||||
| Kulkarni. Srinivas |  | ||||||
| Kun Liu |  | ||||||
| Kyle Lin |  | ||||||
| Kyösti Mälkki | Kyösti Mälkki | ||||||
| Lance Zhao |  | ||||||
| Lawrence Chang |  | ||||||
| Leah Rowe | Leah Rowe | ||||||
| Lean Sheng Tan |  | ||||||
| Lei Wen | Lei Wen | ||||||
| Lenovo Group Ltd |  | ||||||
| Leo Chou |  | ||||||
| Li-Ta Lo | Li-Ta Lo | ||||||
| Liam Flaherty |  | ||||||
| Libra Li | Libra Li | ||||||
| Libretrend LDA | Libretrend LDA | ||||||
| Lijian Zhao |  | ||||||
| Liju-Clr Chen |  | ||||||
| Linaro Limited | Linaro Limited | ||||||
| linear |  | ||||||
| Linus Torvalds | Linus Torvalds | ||||||
| Linux Networx, Inc. | Linux Networx, Inc. | ||||||
| LiPPERT ADLINK Technology GmbH | LiPPERT ADLINK Technology GmbH | ||||||
| Liya Li |  | ||||||
| Lubomir Rintel | Lubomir Rintel | ||||||
| Luc Verhaegen | Luc Verhaegen | ||||||
| Lucas Chen |  | ||||||
| Mac Chiang |  | ||||||
| Maciej Matuszczyk | Maciej Matuszczyk | ||||||
| Maciej Pijanowski |  | ||||||
| Macpaul Lin |  | ||||||
| Madhusudanarao Amara |  | ||||||
| Magf |  | ||||||
| Malik Hsu |  | ||||||
| Mandy Liu |  | ||||||
| Manoj Gupta |  | ||||||
| Marc Bertens | Marc Bertens | ||||||
| Marc Jones | Marc Jones | ||||||
| Marco Chen |  | ||||||
| Marek Kasiewicz |  | ||||||
| Marek Vasut | Marek Vasut | ||||||
| Mario Scheithauer |  | ||||||
| Marius Gröger | Marius Gröger | ||||||
| Mariusz Szafranski |  | ||||||
| Mariusz Szafrański |  | ||||||
| Mark Hasemeyer |  | ||||||
| Mark Hsieh |  | ||||||
| Mars Chen |  | ||||||
| Marshall Dawson |  | ||||||
| Martin Mares | Martin Mares | ||||||
| Martin Renters | Martin Renters | ||||||
| Martin Roth | Martin Roth | ||||||
| Marvell International Ltd. | Marvell International Ltd. | ||||||
| Marvell Semiconductor Inc. | Marvell Semiconductor Inc. | ||||||
| Marx Wang |  | ||||||
| Masanori Ogino |  | ||||||
| Máté Kukri |  | ||||||
| Matei Dibu |  | ||||||
| Mathew King |  | ||||||
| Matt Chen |  | ||||||
| Matt Delco |  | ||||||
| Matt DeVillier | Matt DeVillier | ||||||
| Matt Papageorge |  | ||||||
| Matthew Blecker |  | ||||||
| Matthew Ziegelbaum |  | ||||||
| Mattias Nissler |  | ||||||
| Maulik V Vaghela |  | ||||||
| MAULIK V VAGHELA |  | ||||||
| Maulik Vaghela |  | ||||||
| Max Fritz |  | ||||||
| Maxim Polyakov | Maxim Polyakov | ||||||
| Maximilian Brune |  | ||||||
| Mediatek Inc. |  | ||||||
| MediaTek Inc. | MediaTek Inc. | ||||||
| Meera Ravindranath |  | ||||||
| Meng-Huan Yu |  | ||||||
| Meta Platforms, Inc |  | ||||||
| mgabryelski1 |  | ||||||
| Mice Lin |  | ||||||
| Michael Brunner | Michael Brunner | ||||||
| Michael Büchler |  | ||||||
| Michael Niewöhner |  | ||||||
| Michael Schroeder | Michael Schroeder | ||||||
| Michael Strosche | Michael Niewöhner | ||||||
| Michael Walle |  | ||||||
| Michał Kopeć |  | ||||||
| Michal Suchanek |  | ||||||
| Michał Żygowski |  | ||||||
| Micro-Star INT'L CO., LTD. |  | ||||||
| Mika Westerberg | Mika Westerberg | ||||||
| Mike Banon |  | ||||||
| Mike Shih |  | ||||||
| Miriam Polzer |  | ||||||
| mkurumel |  | ||||||
| Moises Garcia |  | ||||||
| Mondrian Nuessle | Mondrian Nuessle | ||||||
| Monikaanan |  | ||||||
| MontaVista Software, Inc. | MontaVista Software, Inc. | ||||||
| Morgan Jang |  | ||||||
| Moritz Fischer |  | ||||||
| Morris Hsu |  | ||||||
| mtk15698 |  | ||||||
| mturney mturney |  | ||||||
| Musse Abdullahi |  | ||||||
| Myles Watson | Myles Watson | ||||||
| Nancy.Lin |  | ||||||
| Naresh Solanki |  | ||||||
| Nathan Lu |  | ||||||
| Neill Corlett |  | ||||||
| Network Appliance Inc. | Network Appliance Inc. | ||||||
| Nicholas Chin |  | ||||||
| Nicholas Sielicki | Nicholas Sielicki | ||||||
| Nick Barker | Nick Barker | ||||||
| Nick Chen |  | ||||||
| Nick Vaccaro |  | ||||||
| Nico Huber | Nico Huber | ||||||
| Nico Rikken | Nico Rikken | ||||||
| Nicola Corna | Nicola Corna | ||||||
| Nicolas Boichat |  | ||||||
| Nicole Faerber |  | ||||||
| Nikolai Vyssotski |  | ||||||
| Nils Jacobs | Nils Jacobs | ||||||
| Nina Wu |  | ||||||
| Nir Tzachar | Nir Tzachar | ||||||
| Nokia Corporation | Nokia Corporation | ||||||
| Nuvoton Technology Corporation |  | ||||||
| NVIDIA Corporation | NVIDIA Corporation | ||||||
| Olivier Langlois | Olivier Langlois | ||||||
| Ollie Lo | Ollie Lo | ||||||
| Omar Pakker | Omar Pakker | ||||||
| Online SAS | Online SAS | ||||||
| Opal Voravootivat |  | ||||||
| Orion Technologies, LLC | Orion Technologies, LLC | ||||||
| Pablo Ceballos |  | ||||||
| Pablo Stebler |  | ||||||
| Pan Gao |  | ||||||
| Patrick Georgi | Patrick Georgi | ||||||
| Patrick Huang |  | ||||||
| Patrick Rudolph | Patrick Rudolph | ||||||
| Patrik Tesarik |  | ||||||
| Pattrick Hueper | Pattrick Hueper | ||||||
| Paul Fagerburg |  | ||||||
| Paul Menzel |  | ||||||
| Paul2 Huang |  | ||||||
| Paulo Alcantara | Paulo Alcantara | ||||||
| Pavel Sayekat | Pavel Sayekat | ||||||
| Paz Zcharya |  | ||||||
| PC Engines GmbH | PC Engines GmbH | ||||||
| Pegatron Corp |  | ||||||
| Peichao Li |  | ||||||
| Per Odlund | Per Odlund | ||||||
| Peter Korsgaard | Peter Korsgaard | ||||||
| Peter Lemenkov |  | ||||||
| Peter Marheine |  | ||||||
| Peter Stuge | Peter Stuge | ||||||
| Petr Cvek |  | ||||||
| Philip Chen |  | ||||||
| Philipp Bartsch |  | ||||||
| Philipp Degler | Philipp Degler | ||||||
| Philipp Deppenwiese | Philipp Deppenwiese | ||||||
| Philipp Hug | Philipp Hug | ||||||
| Piotr Kleinschmidt |  | ||||||
| Po Xu |  | ||||||
| Prasad Malisetty |  | ||||||
| Prashant Malani |  | ||||||
| Pratik Vishwakarma |  | ||||||
| Pratikkumar Prajapati |  | ||||||
| Pratikkumar V Prajapati |  | ||||||
| Protectli | Protectli | ||||||
| Purism SPC | Purism SPC | ||||||
| Purism, SPC | Qualcomm Technologies | ||||||
| Qii Wang |  | ||||||
| Qualcomm Technologies, Inc. |  | ||||||
| Quanta Computer INC |  | ||||||
| Raihow Shi |  | ||||||
| Rajat Jain |  | ||||||
| Rajesh Patil |  | ||||||
| Raptor Engineering, LLC | Raptor Engineering, LLC | ||||||
| Rasheed Hsueh |  | ||||||
| Raul Rangel |  | ||||||
| Ravi Kumar |  | ||||||
| Ravi Mistry |  | ||||||
| Ravindra |  | ||||||
| Ravishankar Sarawadi |  | ||||||
| Ray Han Lim Ng |  | ||||||
| Raymond Chung |  | ||||||
| Red Hat, Inc | Red Hat, Inc | ||||||
| ReddestDream |  | ||||||
| Rehan Ghori |  | ||||||
| Reinhard Meyer | Reinhard Meyer | ||||||
| Reka Norman |  | ||||||
| Ren Kuo |  | ||||||
| Renze Nicolai | Renze Nicolai | ||||||
| Reto Buerki |  | ||||||
| Rex Chou |  | ||||||
| Rex-BC Chen |  | ||||||
| Ricardo Quesada |  | ||||||
| Ricardo Ribalda |  | ||||||
| Richard Spiegel | Richard Spiegel | ||||||
| Richard Woodruff | Richard Woodruff | ||||||
| Rick Lee |  | ||||||
| Ricky Chang |  | ||||||
| Riku Viitanen |  | ||||||
| Ritul Guru |  | ||||||
| Rizwan Qureshi |  | ||||||
| Rnhmjoj |  | ||||||
| Rob Barnes |  | ||||||
| Rob Landley | Rob Landley | ||||||
| Robert Chen |  | ||||||
| Robert Reeves | Robert Reeves | ||||||
| Robert Zieba |  | ||||||
| Robinson P. Tryon | Robinson P. Tryon | ||||||
| Rockchip, Inc. | Rockchip, Inc. | ||||||
| Rocky Phagura |  | ||||||
| Roger Lu |  | ||||||
| Roja Rani Yarubandi |  | ||||||
| Romain Lievin | Romain Lievin | ||||||
| Roman Zippel | Roman Zippel | ||||||
| Ron Lee |  | ||||||
| Ron Minnich |  | ||||||
| Ronak Kanabar |  | ||||||
| Ronald G. Minnich | Ronald G. Minnich | ||||||
| Rory Liu |  | ||||||
| Rudolf Marek | Rudolf Marek | ||||||
| Rui Zhou |  | ||||||
| Ruihai Zhou |  | ||||||
| Runyang Chen |  | ||||||
| Russell King | Russell King | ||||||
| Ruud Schramp | Ruud Schramp | ||||||
| Ruwen Liu |  | ||||||
| Ryan Chuang |  | ||||||
| Ryan Lin |  | ||||||
| Sage Electronic Engineering, LLC | Sage Electronic Engineering, LLC | ||||||
| Sajida Bhanu |  | ||||||
| Sam Lewis |  | ||||||
| Sam McNally |  | ||||||
| Sam Ravnborg | Sam Ravnborg | ||||||
| Samsung Electronics | Samsung Electronics | ||||||
| Samuel Holland | Samuel Holland | ||||||
| Sandeep Maheswaram |  | ||||||
| Sathya Prakash M R |  | ||||||
| Satya Priya Kakitapalli |  | ||||||
| Saurabh Mishra |  | ||||||
| SciTech Software, Inc. | SciTech Software, Inc. | ||||||
| Scott Chao | Sebastian Grzywna | ||||||
| SDC Systems Ltd |  | ||||||
| Sean Rhodes |  | ||||||
| Sebastian 'Swift Geek' Grzywna |  | ||||||
| secunet Security Networks AG | secunet Security Networks AG | ||||||
| Selma Bensaid |  | ||||||
| Semihalf |  | ||||||
| Sen Chu |  | ||||||
| Sencore Inc | Sencore Inc | ||||||
| Sergej Ivanov | 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 | Siemens AG | ||||||
| SiFive, Inc | SiFive, Inc | ||||||
| Silicom Ltd. |  | ||||||
| Silicon Integrated System Corporation | Silicon Integrated System Corporation | ||||||
| Silverback Ltd. | 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 Reinauer | ||||||
| Stefan Tauner | Stefan Tauner | ||||||
| Stephen Edworthy |  | ||||||
| Steve Magnani | Steve Magnani | ||||||
| Steve Shenton | Steve Shenton | ||||||
| Subrata Banik | ST Microelectronics | ||||||
| Sudheer Amrabadi |  | ||||||
| Sugnan Prabhu S |  | ||||||
| Sukumar Ghorai |  | ||||||
| Sumeet R Pawnikar |  | ||||||
| Sunwei Li |  | ||||||
| SUSE LINUX AG | SUSE LINUX AG | ||||||
| Sven Schnelle | Sven Schnelle | ||||||
| Syed Mohammed Khasim | Syed Mohammed Khasim | ||||||
| System76, Inc. | System76 | ||||||
| szarpaj |  | ||||||
| T Michael Turney |  | ||||||
| TangYiwei |  | ||||||
| Taniya Das |  | ||||||
| Tao Xia |  | ||||||
| Tarun Tuli |  | ||||||
| Teddy Shih |  | ||||||
| Terry Chen |  | ||||||
| Texas Instruments | Texas Instruments | ||||||
| The Android Open Source Project | The Android Open Source Project | ||||||
| The ChromiumOS Authors | The ChromiumOS Authors | ||||||
| The Linux Foundation | The Linux Foundation | ||||||
| The Regents of the University of California | The Regents of the University of California | ||||||
| Thejaswani Putta |  | ||||||
| Thomas Heijligen |  | ||||||
| Thomas Winischhofer | Thomas Winischhofer | ||||||
| Tim Chen |  | ||||||
| Tim Chu |  | ||||||
| Tim Crawford |  | ||||||
| Tim Van Patten |  | ||||||
| Tim Wawrzynczak |  | ||||||
| Timofey Komarov |  | ||||||
| Timothy Pearson | Timothy Pearson | ||||||
| tinghan shen |  | ||||||
| Tobias Diedrich | Tobias Diedrich | ||||||
| Tom Hiller |  | ||||||
| Tommie Lin |  | ||||||
| Tony Huang |  | ||||||
| Tracy Wu |  | ||||||
| Trevor Wu |  | ||||||
| Tristan Corrick | Tristan Corrick | ||||||
| Tungsten Graphics, Inc. | Tungsten Graphics, Inc. | ||||||
| Tyan Computer Corp. | Tyan Computer Corp. | ||||||
| Tyler Wang |  | ||||||
| Tzung-Bi Shih |  | ||||||
| U.S. National Security Agency |  | ||||||
| ucRobotics Inc. | ucRobotics Inc. | ||||||
| Uday Bhat |  | ||||||
| University of Heidelberg | University of Heidelberg | ||||||
| Usha P |  | ||||||
| Uwe Hermann | 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 | VIA Technologies, Inc | ||||||
| Victor Ding |  | ||||||
| Vidya Gopalakrishnan |  | ||||||
| Vikram Narayanan | Vikram Narayanan | ||||||
| Vikrant L Jadeja |  | ||||||
| Vinod Polimera |  | ||||||
| Vipin Kumar | Vipin Kumar | ||||||
| Vitaly Rodionov |  | ||||||
| Vladimir Serbinenko | Vladimir Serbinenko | ||||||
| Vlado Cibic | Vlado Cibic | ||||||
| Vsujithk |  | ||||||
| Wang Qing Pei | Wang Qing Pei | ||||||
| Wanghao11 |  | ||||||
| Ward Vandewege | Ward Vandewege | ||||||
| Wayne Wang |  | ||||||
| Weimin Wu |  | ||||||
| Weiyi Lu |  | ||||||
| Wenbin Mei |  | ||||||
| Wentao Qin |  | ||||||
| Werner Zeh |  | ||||||
| Wilbert Duijvenvoorde | Wilbert Duijvenvoorde | ||||||
| William Wei |  | ||||||
| Wilson Chou |  | ||||||
| Wim Vervoorn |  | ||||||
| Win Enterprises | Win Enterprises | ||||||
| Wisley Chen |  | ||||||
| Wistron Corp |  | ||||||
| Wiwynn Corp. | Wiwynn Corp. | ||||||
| Wiwynn Corporation |  | ||||||
| Wizard Shen |  | ||||||
| Wojciech Macek |  | ||||||
| Wolfgang Denk | Wolfgang Denk | ||||||
| Won Chung |  | ||||||
| Wonkyu Kim |  | ||||||
| Wuxy  |  | ||||||
| Xin Ji |  | ||||||
| Xixi Chen |  | ||||||
| Xuxin Xiong |  | ||||||
| YADRO | YADRO | ||||||
| Yan Liu |  | ||||||
| Yann Collet | Yann Collet | ||||||
| Yaroslav Kurlaev |  | ||||||
| YH Lin |  | ||||||
| Yidi Lin |  | ||||||
| Yilin Yang |  | ||||||
| Yinghai Lu | 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 | 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. | # Makefile for coreboot paper. | ||||||
| # hacked together by Stefan Reinauer <stepan@openbios.org> | # hacked together by Stefan Reinauer <stepan@openbios.org> | ||||||
| # | # | ||||||
|  |  | ||||||
| BUILDDIR ?= _build | PDFLATEX=pdflatex -t a4 | ||||||
| SPHINXOPTS ?= -j auto |  | ||||||
|  |  | ||||||
| export SPHINXOPTS | FIGS=codeflow.pdf hypertransport.pdf | ||||||
|  |  | ||||||
| all: sphinx | all: corebootPortingGuide.pdf | ||||||
|  |  | ||||||
| $(BUILDDIR): | SVG2PDF=$(shell which svg2pdf) | ||||||
| 	mkdir -p $(BUILDDIR) | INKSCAPE=$(shell which inkscape) | ||||||
|  | CONVERT=$(shell which convert) | ||||||
|  |  | ||||||
| sphinx: $(BUILDDIR) | codeflow.pdf: codeflow.svg | ||||||
| 	$(MAKE) -f Makefile.sphinx html BUILDDIR="$(BUILDDIR)" | 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: | clean-sphinx: | ||||||
| 	$(MAKE) -f Makefile.sphinx clean BUILDDIR="$(BUILDDIR)" | 	$(MAKE) -f Makefile.sphinx clean | ||||||
|  |  | ||||||
| clean: clean-sphinx | clean: clean-sphinx | ||||||
| 	rm -f *.aux *.idx *.log *.toc *.out $(FIGS) | 	rm -f *.aux *.idx *.log *.toc *.out $(FIGS) | ||||||
| @@ -26,25 +51,5 @@ clean: clean-sphinx | |||||||
| distclean: clean | distclean: clean | ||||||
| 	rm -f corebootPortingGuide.pdf | 	rm -f corebootPortingGuide.pdf | ||||||
|  |  | ||||||
| livesphinx: $(BUILDDIR) | livesphinx: | ||||||
| 	$(MAKE) -f Makefile.sphinx livehtml BUILDDIR="$(BUILDDIR)" | 	$(MAKE) -f Makefile.sphinx livehtml SPHINXOPTS="$(SPHINXOPTS)" | ||||||
|  |  | ||||||
| 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 |  | ||||||
|   | |||||||
| @@ -1,4 +1,3 @@ | |||||||
| ## SPDX-License-Identifier: GPL-2.0-only |  | ||||||
| # Makefile for Sphinx documentation | # 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) | @@ -303,10 +303,10 @@ static void gpio_configure_pad(const struct pad_config *cfg) | ||||||
|                 /* Patch GPIO settings for SoC specifically */ |                 /* Patch GPIO settings for SoC specifically */ | ||||||
|                 soc_pad_conf = soc_gpio_pad_config_fixup(cfg, i, soc_pad_conf); |                 soc_pad_conf = soc_gpio_pad_config_fixup(cfg, i, soc_pad_conf); | ||||||
|  |   | ||||||
| -               if (CONFIG(DEBUG_GPIO)) | -               if (CONFIG(DEBUG_GPIO)) | ||||||
| +               if (soc_pad_conf != pad_conf) | +               if (soc_pad_conf != pad_conf) | ||||||
|                         printk(BIOS_DEBUG, |                         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) | - [GPIO toggling in ACPI AML](gpio.md) | ||||||
|  |  | ||||||
| ## Windows-specific ACPI documentation | ## devicetree | ||||||
|  |  | ||||||
| - [Windows-specific documentation](windows.md) | - [Adding devices to a device tree](devicetree.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) |  | ||||||
|   | |||||||
| @@ -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 | * A stage can install new page tables in RAM | ||||||
|  |  | ||||||
| ## Page tables | ## 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 | To generate the static page tables it must know the physical address where to | ||||||
| place the file. | 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 | Code of Conduct, you should notify the arbitration team with a concise | ||||||
| description of your grievance. | 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 | ## Scope | ||||||
|  |  | ||||||
| We expect all community participants (contributors, paid or otherwise; | 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 | This Code of Conduct is distributed under | ||||||
| a [Creative Commons Attribution-ShareAlike | a [Creative Commons Attribution-ShareAlike | ||||||
| license](http://creativecommons.org/licenses/by-sa/3.0/).  It is based | 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 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) | ([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 | [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 | ## Real time chat | ||||||
|  |  | ||||||
| We also have a real time chat room on [IRC](ircs://irc.libera.chat/#coreboot), | 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 | [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 | [OSF Slack](https://osfw.slack.com/), which has channels on many open source | ||||||
| firmware related topics. Slack requires that people come from specific domains | 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. | an official decision. | ||||||
|  |  | ||||||
| We tried a whole lot of different tools, but so far the meetings worked | 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) | using [Google Docs](https://docs.google.com/document/d/1NRXqXcLBp5pFkHiJbrLdv3Spqh1Hu086HYkKrgKjeDQ/edit) | ||||||
| for the agenda and meeting minutes. Neither the video conference nor | for the agenda and meeting minutes. Neither the video conference nor | ||||||
| the document require a Google account to participate, although editing | 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. | # This is also used if you do content translation via gettext catalogs. | ||||||
| # Usually you set "language" from the command line for these cases. | # 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 | # List of patterns, relative to source directory, that match files and | ||||||
| # directories to ignore when looking for source files. | # 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". | # so a file named "default.css" will overwrite the builtin "default.css". | ||||||
| html_static_path = ['_static'] | html_static_path = ['_static'] | ||||||
|  |  | ||||||
| html_css_files = [ | html_context = { | ||||||
|     'theme_overrides.css',  # override wide tables in RTD theme |       'css_files': [ | ||||||
| ] |         '_static/theme_overrides.css',  # override wide tables in RTD theme | ||||||
|  |       ], | ||||||
|  | } | ||||||
|  |  | ||||||
| # Output file base name for HTML help builder. | # Output file base name for HTML help builder. | ||||||
| htmlhelp_basename = 'corebootdoc' | 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 | enable_auto_toc_tree = True | ||||||
|  |  | ||||||
| class MyCommonMarkParser(CommonMarkParser): | class MyCommonMarkParser(CommonMarkParser): | ||||||
| @@ -103,6 +191,23 @@ class MyCommonMarkParser(CommonMarkParser): | |||||||
|         n = nodes.literal(mdnode.literal, mdnode.literal) |         n = nodes.literal(mdnode.literal, mdnode.literal) | ||||||
|         self.current_node.append(n) |         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): | def setup(app): | ||||||
|     from recommonmark.transform import AutoStructify |     from recommonmark.transform import AutoStructify | ||||||
|     # Load recommonmark on old Sphinx |     # Load recommonmark on old Sphinx | ||||||
|   | |||||||
| @@ -3,17 +3,17 @@ | |||||||
| This document describes the preferred C coding style for the | This document describes the preferred C coding style for the | ||||||
| coreboot project. It is in many ways exactly the same as the Linux | 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 | 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 | The guidelines in this file should be seen as a strong suggestion, and | ||||||
| should overrule personal preference. They may be ignored in individual | should overrule personal preference. But they may be ignored in | ||||||
| instances when there are good practical reasons to do so, and reviewers | individual instances when there are good practical reasons to do so, and | ||||||
| are in agreement. | reviewers are in agreement. | ||||||
|  |  | ||||||
| Any style questions that are not mentioned in here should be decided | 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 | 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 | 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. | coreboot. | ||||||
|  |  | ||||||
| Bulk style changes to existing code ("cleanup patches") should avoid | 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 | and neither is `clang-format`. These tools can be useful to find | ||||||
| potential issues or simplify formatting in new submissions, but they | potential issues or simplify formatting in new submissions, but they | ||||||
| were not designed to directly match this guide and may have false | were not designed to directly match this guide and may have false | ||||||
| positives. They should not be bulk-applied to change existing code | positives. They should not be bulk-applied to change existing code.) | ||||||
| except in cases where they directly match the style guide.) |  | ||||||
|  |  | ||||||
| ## Indentation | ## 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 | 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 | 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 | more than 3 levels of indentation, you're screwed anyway, and should | ||||||
| fix your program.  Note that coreboot has expanded the 80 character | fix your program. | ||||||
| limit to 96 characters to allow for modern wider screens. |  | ||||||
|  |  | ||||||
| In short, 8-char indents make things easier to read, and have the added | 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. | benefit of warning you when you're nesting your functions too deep. | ||||||
| @@ -68,7 +66,7 @@ case 'm': | |||||||
| case 'K': | case 'K': | ||||||
| case 'k': | case 'k': | ||||||
| 	mem <<= 10; | 	mem <<= 10; | ||||||
| 	__fallthrough; | 	/* fall through */ | ||||||
| default: | default: | ||||||
| 	break; | 	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 | never used for indentation, and the above example is deliberately | ||||||
| broken. | broken. | ||||||
|  |  | ||||||
| Get a decent editor and don't leave whitespace at the end of lines. This | Get a decent editor and don't leave whitespace at the end of lines. | ||||||
| will actually keep the patch from being tested in the CI, so patches |  | ||||||
| with ending whitespace cannot be merged. |  | ||||||
|  |  | ||||||
| ## Breaking long lines and strings | ## 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 | 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. | function, telling people what it does, and possibly WHY it does it. | ||||||
|  |  | ||||||
| coreboot style for comments is the C89 "/* ... */" style. You may also | When commenting the kernel API functions, please use the kernel-doc | ||||||
| use C99-style "// ..." comments for single-line comments. | 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: | The preferred style for *short* (multi-line) comments is: | ||||||
|  |  | ||||||
| ```c | ```c | ||||||
| /* This is the preferred style for short multi-line | /* 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. */ |    Please use it consistently. */ | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| @@ -523,7 +523,7 @@ The preferred style for *long* (multi-line) comments is: | |||||||
| ```c | ```c | ||||||
| /* | /* | ||||||
|  * This is the preferred style for multi-line |  * 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. |  * Please use it consistently. | ||||||
|  * |  * | ||||||
|  * Description:  A column of asterisks on the left side, |  * 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 | 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 | below ~/src/linux-trees. | ||||||
| your own paths for coreboot. |  | ||||||
|  |  | ||||||
| But even if you fail in getting emacs to do sane formatting, not | But even if you fail in getting emacs to do sane formatting, not | ||||||
| everything is lost: use "indent". | everything is lost: use "indent". | ||||||
| @@ -627,6 +626,38 @@ config ADFS_FS_RW | |||||||
| For full documentation on the configuration files, see the file | For full documentation on the configuration files, see the file | ||||||
| Documentation/kbuild/kconfig-language.txt. | 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 | 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 | also covers RTL which is used frequently with assembly language in the | ||||||
| kernel. | kernel. | ||||||
|  |  | ||||||
| Printing coreboot messages | Printing kernel messages | ||||||
| ------------------------ | ------------------------ | ||||||
|  |  | ||||||
| coreboot developers like to be seen as literate. Do mind the spelling of | Kernel 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 messages to make a good impression. Do not use crippled words | ||||||
| like "dont"; use "do not" or "don't" instead. Make the messages | like "dont"; use "do not" or "don't" instead. Make the messages | ||||||
| concise, clear, and unambiguous. | 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 | Printing numbers in parentheses (%d) adds no value and should be | ||||||
| avoided. | 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 | Allocating memory | ||||||
| ----------------- | ----------------- | ||||||
|  |  | ||||||
| @@ -745,7 +792,12 @@ The inline disease | |||||||
| There appears to be a common misperception that gcc has a magic "make | There appears to be a common misperception that gcc has a magic "make | ||||||
| me faster" speedup option called "inline". While the use of inlines | me faster" speedup option called "inline". While the use of inlines | ||||||
| can be appropriate (for example as a means of replacing macros, see | 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 | 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 | 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 | Functions can return values of many different kinds, and one of the most | ||||||
| common is a value indicating whether the function succeeded or failed. | 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` | Such a value can be represented as an error-code integer (-Exxx = | ||||||
| (negative number) = failure, `CB_SUCCESS` (0) = success) or a "succeeded" | failure, 0 = success) or a "succeeded" boolean (0 = failure, non-zero | ||||||
| boolean (0 = failure, non-zero = success). | = success). | ||||||
|  |  | ||||||
| Mixing up these two sorts of representations is a fertile source of | Mixing up these two sorts of representations is a fertile source of | ||||||
| difficult-to-find bugs. If the C language included a strong distinction | 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 | the function should return an error-code integer.  If the name | ||||||
| is a predicate, the function should return a "succeeded" boolean. | is a predicate, the function should return a "succeeded" boolean. | ||||||
|  |  | ||||||
| For example, "add work" is a command, and the `add_work()` function | 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 | returns 0 for success or -EBUSY for failure. In the same way, "PCI | ||||||
| device present" is a predicate, and the `pci_dev_present()` function | 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 | returns 1 if it succeeds in finding a matching device or 0 if it | ||||||
| doesn't. | 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, | Functions whose return value is the actual result of a computation, | ||||||
| rather than an indication of whether the computation succeeded, are not | rather than an indication of whether the computation succeeded, are not | ||||||
| subject to this rule. Generally they indicate failure by returning some | subject to this rule. Generally they indicate failure by returning some | ||||||
| out-of-range result. Typical examples would be functions that return | out-of-range result. Typical examples would be functions that return | ||||||
| pointers; they use NULL to report failure. | pointers; they use NULL or the ERR_PTR mechanism 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. Exeuction |  | ||||||
| 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()`). |  | ||||||
|  |  | ||||||
| Headers and includes | 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, | .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 | 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 | 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 | Files should generally include every header they need a definition from | ||||||
| directly (and not include any unnecessary extra headers). Excepted from | directly (and not include any unnecessary extra headers). Excepted from | ||||||
| @@ -971,78 +960,17 @@ asm ("magic %reg1, #42nt" | |||||||
| 	: /* outputs */ : /* inputs */ : /* clobbers */); | 	: /* 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 | References | ||||||
| ---------- | ---------- | ||||||
|  |  | ||||||
| The C Programming Language, Second Edition by Brian W. Kernighan and | The C Programming Language, Second Edition by Brian W. Kernighan and | ||||||
| Dennis M. Ritchie. Prentice Hall, Inc., 1988. ISBN 0-13-110362-8 | Dennis M. Ritchie. Prentice Hall, Inc., 1988. ISBN 0-13-110362-8 | ||||||
| (paperback), 0-13-110370-9 (hardback). URL: | (paperback), 0-13-110370-9 (hardback). URL: | ||||||
| <https://duckduckgo.com/?q=isbn+0-13-110362-8> or | <http://cm.bell-labs.com/cm/cs/cbook/> | ||||||
| <https://www.google.com/search?q=isbn+0-13-110362-8> |  | ||||||
|  |  | ||||||
|  |  | ||||||
| The Practice of Programming by Brian W. Kernighan and Rob Pike. | The Practice of Programming by Brian W. Kernighan and Rob Pike. | ||||||
| Addison-Wesley, Inc., 1999. ISBN 0-201-61586-X. URL: | Addison-Wesley, Inc., 1999. ISBN 0-201-61586-X. URL: | ||||||
| <https://duckduckgo.com/?q=ISBN+0-201-61586-X> or | <http://cm.bell-labs.com/cm/cs/tpop/> | ||||||
| <https://www.google.com/search?q=ISBN+0-201-61586-X> |  | ||||||
|  |  | ||||||
| GNU manuals - where in compliance with K&R and this text - for cpp, gcc, | GNU manuals - where in compliance with K&R and this text - for cpp, gcc, | ||||||
| gcc internals and indent, all available from | 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 | 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. | 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 | ## Provide toolchain binaries | ||||||
| Our crossgcc subproject provides a uniform compiler environment for | Our crossgcc subproject provides a uniform compiler environment for | ||||||
| working on coreboot and related projects. Sadly, building it takes hours, | 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 | * hardware requirements: Nothing special | ||||||
|  |  | ||||||
| ### Mentors | ### Mentors | ||||||
|  | * Patrick Georgi <patrick@georgi.software> | ||||||
|  |  | ||||||
| ## Support Power9/Power8 in coreboot | ## Support Power9/Power8 in coreboot | ||||||
| There are some basic PPC64 stubs in coreboot, and there's open hardware | 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 | ## Port payloads to ARM, AArch64 or RISC-V | ||||||
| While we have a rather big set of payloads for x86 based platforms, all other | 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 | 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, | to one of the platforms, for example GRUB2, U-Boot (the UI part), Tianocore, | ||||||
| FILO, or Linux-as-Payload. | yabits, FILO, or Linux-as-Payload. | ||||||
|  |  | ||||||
| Since this is a bit of a catch-all idea, an application to GSoC should pick a | Since this is a bit of a catch-all idea, an application to GSoC should pick a | ||||||
| combination of payload and architecture to support. | combination of payload and architecture to support. | ||||||
| @@ -129,6 +112,7 @@ their bug reports. | |||||||
|   going on from the resulting logs. |   going on from the resulting logs. | ||||||
|  |  | ||||||
| ### Mentors | ### Mentors | ||||||
|  | * Patrick Georgi <patrick@georgi.software> | ||||||
|  |  | ||||||
| ## Extend Ghidra to support analysis of firmware images | ## Extend Ghidra to support analysis of firmware images | ||||||
| [Ghidra](https://ghidra-sre.org) is a recently released cross-platform | [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: | review on gerrit: | ||||||
| { \small | { \small | ||||||
| \begin{verbatim} | \begin{verbatim} | ||||||
| $ git config remote.origin.push HEAD:refs/for/main | $ git config remote.origin.push HEAD:refs/for/master | ||||||
| \end{verbatim} | \end{verbatim} | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -399,10 +399,10 @@ $ make gitconfig | |||||||
|  |  | ||||||
| \subsection{Work flow} | \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 | { \small | ||||||
| \begin{verbatim} | \begin{verbatim} | ||||||
| $ git checkout main -b mybranch | $ git checkout master -b mybranch | ||||||
| \end{verbatim} | \end{verbatim} | ||||||
| } | } | ||||||
| After you have done your changes, run: | 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 | reviewers, then rebase the change by preserving the same Change-ID. We | ||||||
| recommend you to use the git rebase command in interactive mode, | 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 | % Working with Gerrit | ||||||
| @@ -474,9 +474,9 @@ click \url{https://review.coreboot.org} | |||||||
| |Search for status:open                                     | | |Search for status:open                                     | | ||||||
| +-----------------------------------------------------------+ | +-----------------------------------------------------------+ | ||||||
| |Subject      Status   Owner  Project  Branch Updated CR V  | | |Subject      Status   Owner  Project  Branch Updated CR V  | | ||||||
| |cpu: Rename..      Alexandru coreboot main   1:20 PM +1    | | |cpu: Rename..      Alexandru coreboot master 1:20 PM +1    | | ||||||
| |cpu: Only a..      Alexandru coreboot main   1:17 PM    X  | | |cpu: Only a..      Alexandru coreboot master 1:17 PM    X  | | ||||||
| |arch/x86: D..      Alexandru coreboot main   1:09 PM       | | |arch/x86: D..      Alexandru coreboot master 1:09 PM       | | ||||||
| |                                                           | | |                                                           | | ||||||
| |                                                  Next ->  | | |                                                  Next ->  | | ||||||
| |Press '?' to view keyboard shortcuts | Powered by Gerrit   | | |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. | display, and allowing inline comments to be added by any reviewer. | ||||||
|  |  | ||||||
| Gerrit simplifies Git based project maintainership by permitting any | 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 | than requiring all approved changes to be merged in by hand by the | ||||||
| project maintainer. This functionality enables a more centralized | project maintainer. This functionality enables a more centralized | ||||||
| usage of Git. | 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 – | functions like battery management, keyboard support, and sensor interfacing – | ||||||
| is open source as well. | 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 APUs | ||||||
|  |  | ||||||
| [PC Engines](https://pcengines.ch) designs and sells embedded PC hardware that | [PC Engines](https://pcengines.ch) designs and sells embedded PC hardware that | ||||||
| @@ -43,6 +24,13 @@ ships with coreboot and support upstream maintenance for the devices through a | |||||||
| third party, [3mdeb](https://3mdeb.com). They provide current and tested | third party, [3mdeb](https://3mdeb.com). They provide current and tested | ||||||
| firmware binaries on [GitHub](https://pcengines.github.io). | firmware binaries on [GitHub](https://pcengines.github.io). | ||||||
|  |  | ||||||
|  | ### 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. | ||||||
|  |  | ||||||
| ### Purism | ### Purism | ||||||
|  |  | ||||||
| [Purism](https://www.puri.sm) sells laptops with a focus on user privacy and | [Purism](https://www.puri.sm) sells laptops with a focus on user privacy and | ||||||
| @@ -50,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 | 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. | 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 | ## After-market firmware | ||||||
|  |  | ||||||
| ### Dasharo | ### Libreboot | ||||||
|  |  | ||||||
| [Dasharo](https://dasharo.com/) is an open-source based firmware distribution | [Libreboot](https://libreboot.org) is a downstream coreboot distribution that | ||||||
| focusing on clean and simple code, long-term maintenance, transparent | provides ready-made firmware images for supported devices: those which can be | ||||||
| validation, privacy-respecting implementation, liberty for the owners, and | built entirely from source code. Their copy of the coreboot repository is | ||||||
| trustworthiness for all. | therefore stripped of all devices that require binary components to boot. | ||||||
|  |  | ||||||
| Contributions are welcome, | ### MrChromebox | ||||||
| [this document](https://docs.dasharo.com/ways-you-can-help-us/). |  | ||||||
|  | [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 | ### Heads | ||||||
|  |  | ||||||
| @@ -89,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 | of specific hardware platforms and flash security features with custom coreboot | ||||||
| firmware and a Linux boot loader in ROM. | 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 | ||||||
|  |  | ||||||
| [Skulls](https://github.com/merge/skulls) provides firmware images for | [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 | at varying speeds. These speeds are defined by the platform, and will be enabled | ||||||
| depending on the various temperatures reported by participants. | depending on the various temperatures reported by participants. | ||||||
|  |  | ||||||
| ## Note about units | # Note about units | ||||||
|  |  | ||||||
| ACPI uses unusual units for specifying various physical measurements. For | ACPI uses unusual units for specifying various physical measurements. For | ||||||
| example, temperatures are specified in 10ths of a degree K, and time is measured | 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 | 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). |    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 | DPTF relies on an assortment of ACPI tables to provide parameters to the DPTF | ||||||
| application. We will discuss the more important ones here. | 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 | This table describes performance states supported by a participant (typically | ||||||
| the battery charger). | the battery charger). | ||||||
|  |  | ||||||
| ## ACPI Methods | # ACPI Methods | ||||||
|  |  | ||||||
| The Active and Passive policies also provide for short Methods to define | The Active and Passive policies also provide for short Methods to define | ||||||
| different kinds of temperature thresholds. | different kinds of temperature thresholds. | ||||||
| @@ -141,7 +141,7 @@ a "graceful shutdown". | |||||||
|  |  | ||||||
| These are optional, and are enabled by selecting the Critical Policy. | 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: | The `drivers/intel/dptf` chip driver is organized into several sections: | ||||||
| - Policies | - Policies | ||||||
| @@ -151,7 +151,7 @@ The `drivers/intel/dptf` chip driver is organized into several sections: | |||||||
| The Policies section (`policies.active`, `policies.passive`, and | The Policies section (`policies.active`, `policies.passive`, and | ||||||
| `policies.critical`) is where the components of each policy are defined. | `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: | Each Active Policy is defined in terms of 4 parts: | ||||||
| 1) A Source (this is implicitly defined as TFN1, the system fan) | 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/ | rest of the table (note that it *must* be defined from highest temperature/ | ||||||
| percentage on down to the lowest). | percentage on down to the lowest). | ||||||
|  |  | ||||||
| ### Passive Policy | ## Passive Policy | ||||||
|  |  | ||||||
| Each Passive Policy is defined in terms of 5 parts: | Each Passive Policy is defined in terms of 5 parts: | ||||||
| 1) Source - The device that can be throttled | 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). | temperature sensor 1 reaches 65C. The sampling period here is 60000 ms (60 s). | ||||||
| The Priority is defaulted to 100 in this case. | The Priority is defaulted to 100 in this case. | ||||||
|  |  | ||||||
| ### Critical Policy | ## Critical Policy | ||||||
|  |  | ||||||
| Each Critical Policy is defined in terms of 3 parts: | Each Critical Policy is defined in terms of 3 parts: | ||||||
| 1) Source - A device that can trigger a critical event | 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 | This example sets up a policy wherein ACPI will cause the system to shutdown | ||||||
| (in a "graceful" manner) when the CPU temperature reaches 75C. | (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 | 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 | 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 | over a time interval ranging from 28 to 32 seconds, and it can move PL1 in | ||||||
| increments of 200 mW. | increments of 200 mW. | ||||||
|  |  | ||||||
| ### Charger Performance | ## Charger Performance | ||||||
|  |  | ||||||
| The battery charger can be a large contributor of unwanted heat in a system that | 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 | 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 | In this example, when DPTF decides to throttle the charger, it has four different | ||||||
| performance states to choose from. | performance states to choose from. | ||||||
|  |  | ||||||
| ### Fan Performance | ## Fan Performance | ||||||
|  |  | ||||||
| When using DPTF, the system fan (`TFN1`) is the device responsible for actively | 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 | 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 | control of the fan, wherein DPTF will interpolate between the percentages in the | ||||||
| table for a given temperature threshold. | table for a given temperature threshold. | ||||||
|  |  | ||||||
| ### Options | ## Options | ||||||
|  |  | ||||||
| #### Fan | ### Fan | ||||||
| 1) Fine-grained control - a boolean (see Fan Performance section above) | 1) Fine-grained control - a boolean (see Fan Performance section above) | ||||||
| 2) Step-size - Recommended minimum step size (in percentage points) to adjust | 2) Step-size - Recommended minimum step size (in percentage points) to adjust | ||||||
|    the fan speed when using fine-grained control (ranges from 1 - 9). |    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 | 3) Low-speed notify - If true, the platform will issue a `Notify (0x80)` to the | ||||||
|    fan device if a low fan speed is detected. |    fan device if a low fan speed is detected. | ||||||
|  |  | ||||||
| #### Temperature sensors | ### Temperature sensors | ||||||
| 1) Hysteresis - The amount of hysteresis implemented in either circuitry or | 1) Hysteresis - The amount of hysteresis implemented in either circuitry or | ||||||
|    the firmware that reads the temperature sensor (in degrees C). |    the firmware that reads the temperature sensor (in degrees C). | ||||||
| 2) Name - This name is applied to the _STR property of the sensor | 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 | 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. | 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 | 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 | and plugin devices, significantly reducing integration complexity and | ||||||
| they allow to easily reuse existing code across platforms. | 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) | * [Intel DPTF](dptf.md) | ||||||
| * [IPMI KCS](ipmi_kcs.md) | * [IPMI KCS](ipmi_kcs.md) | ||||||
| * [SMMSTORE](smmstore.md) | * [SMMSTORE](smmstore.md) | ||||||
| * [SMMSTOREv2](smmstorev2.md) |  | ||||||
| * [SoundWire](soundwire.md) | * [SoundWire](soundwire.md) | ||||||
|  | * [SMMSTOREv2](smmstorev2.md) | ||||||
| * [USB4 Retimer](retimer.md) | * [USB4 Retimer](retimer.md) | ||||||
| * [CBFS SMBIOS hooks](cbfs_smbios.md) |  | ||||||
|   | |||||||
| @@ -42,15 +42,6 @@ The following registers can be set: | |||||||
| * `gpe_interrupt` | * `gpe_interrupt` | ||||||
|   * Integer |   * Integer | ||||||
|   * The bit in GPE (SCI) used to notify about a change on the KCS. |   * 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 | [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 | # USB4 Retimers | ||||||
|  |  | ||||||
| ## Introduction | # Introduction | ||||||
| As USB speeds continue to increase (up to 5G, 10G, and even 20G or higher in | 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 | 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 | 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. | 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, | 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 | 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 | 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 | 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 variable store | ||||||
| - The FTW spare block | - 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 spare block: 2 blocks = 2 * 64 KiB | ||||||
| - The FTW working block: 1 block = 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 | ## 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 | ## Overview | ||||||
| ![][architecture] | ![][architecture] | ||||||
|  |  | ||||||
| [architecture]: comparison_coreboot_uefi.svg | [architecture]: comparision_coreboot_uefi.svg | ||||||
|  |  | ||||||
| ## Stages | ## Stages | ||||||
| coreboot consists of multiple stages that are compiled as separate binaries and | coreboot consists of multiple stages that are compiled as separate binaries and | ||||||
|   | |||||||
| @@ -62,23 +62,6 @@ supported options are: | |||||||
|  |  | ||||||
| `position` and `align` are mutually exclusive. | `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.inc` |  | ||||||
|  |  | ||||||
| ``` |  | ||||||
| $(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 | #### FMAP region support | ||||||
| With the addition of FMAP flash partitioning support to coreboot, there was a | 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 | need to extend the specification of files to provide more precise control | ||||||
|   | |||||||
| 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.** |  | ||||||
| @@ -9,7 +9,7 @@ friction in the community. | |||||||
| 
 | 
 | ||||||
| Note that as with many rules, there are exceptions. Some have been noted | 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 | 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. | 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 | 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 | employer is aware and you are authorized to submit the code. For | ||||||
| clarification, see the Developer's Certificate of Origin in the coreboot | 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 | * 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 | 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 | a recently-introduced issue (build, boot or OS-level compatibility, not | ||||||
| necessarily identified by coreboot.org facilities). Its commit message | necessarily identified by coreboot.org facilities). Its commit message | ||||||
| has to explain what change introduced the problem and the nature of | has to explain what change introduced the problem and the nature of | ||||||
| the problem so that the emergency need becomes apparent. Avoid stating | the problem so that the emergency need becomes apparent. The change | ||||||
| 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 |  | ||||||
| itself should be as limited in scope and impact as possible to make it | 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 | 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, | 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 | must at least provide a path that will allow other platforms to continue | ||||||
| working. | 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 | 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 | 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 | parallel builds, you can specify the number of cores to use by setting the | ||||||
| the CPUS environment variable. Example: | the CPUS environment variable. Example: | ||||||
| 
 |         make what-jenkins-does CPUS=8 | ||||||
| ```Bash |  | ||||||
| make what-jenkins-does CPUS=8 |  | ||||||
| ``` |  | ||||||
| 
 | 
 | ||||||
| * Use a topic when pushing a train of patches. This groups the commits | * 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 | 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 | 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 | 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: | commits with the i915-kernel-x60 set, use the command: | ||||||
| 
 |         git push origin HEAD:refs/for/master%topic=i915-kernel-x60 | ||||||
| ```Bash |  | ||||||
| git push origin HEAD:refs/for/main%topic=i915-kernel-x60 |  | ||||||
| ``` |  | ||||||
| 
 | 
 | ||||||
| * If one of your patches isn't ready to be merged, make sure it's obvious | * 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 | 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 | 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 | isn't as obvious as the commit message. These patches can also be pushed with | ||||||
| the wip flag: | the wip flag: | ||||||
| 
 | 	git push origin HEAD:refs/for/master%wip | ||||||
| ```Bash |  | ||||||
| git push origin HEAD:refs/for/main%wip |  | ||||||
| ``` |  | ||||||
| 
 | 
 | ||||||
| * When pushing patches that are not for submission, these should be marked | * 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 | 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 | 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 | sorts of patches are frequently posted as ideas or RFCs for the community | ||||||
| look at. Note that private changes can still be fetched from Gerrit by anybody | to look at. To push a private change, use the command: | ||||||
| who knows their commit ID, so don't use this for sensitive changes. To push |         git push origin HEAD:refs/for/master%private | ||||||
| a private change, use the command: |  | ||||||
| 
 |  | ||||||
| ```Bash |  | ||||||
| git push origin HEAD:refs/for/main%private |  | ||||||
| ``` |  | ||||||
| 
 | 
 | ||||||
| * Multiple push options can be combined: | * Multiple push options can be combined: | ||||||
| 
 |         git push origin HEAD:refs/for/master%private,wip,topic=experiment | ||||||
| ```Bash |  | ||||||
| git push origin HEAD:refs/for/main%private,wip,topic=experiment |  | ||||||
| ``` |  | ||||||
| 
 | 
 | ||||||
| * Respond to anyone who has taken the time to review your patches, even if | * 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 | 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 | helps others and shows that these mainboards are currently being | ||||||
| maintained. At some point, boards that are not up to date in the | 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 | 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 | * Abandon patches that are no longer useful, or that you don’t intend to | ||||||
| keep working on to get submitted. | 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 | 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 | happened in which repository. This applies to these lines, not the actual | ||||||
| commit message itself: | commit message itself: | ||||||
| 
 |         Commit-Id: | ||||||
| 	* Commit-Id: |         Change-Id: | ||||||
| 	* Change-Id: |         Signed-off-by: | ||||||
| 	* Signed-off-by: |         Reviewed-on: | ||||||
| 	* Reviewed-on: |         Tested-by: | ||||||
| 	* Tested-by: |         Reviewed-by: | ||||||
| 	* Reviewed-by: | The script 'util/gitconfig/rebase.sh' can be used to help automate this. | ||||||
| 
 |  | ||||||
| The script `util/gitconfig/rebase.sh` can be used to help automate this. |  | ||||||
| Other tags such as 'Commit-Queue' can simply be removed. | Other tags such as 'Commit-Queue' can simply be removed. | ||||||
| 
 | 
 | ||||||
| * Check if there's documentation that needs to be updated to remain current | * 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>. | 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 | [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 | 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! | 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 | ||||||
|  |  | ||||||
| Soft straps, that can be configured by the vendor in the Intel Flash Image Tool | Soft straps, that can be configured by the vendor in the Intel Flash Image Tool | ||||||
|   | |||||||
| @@ -4,6 +4,7 @@ | |||||||
| * [Build System](build_system.md) | * [Build System](build_system.md) | ||||||
| * [Submodules](submodules.md) | * [Submodules](submodules.md) | ||||||
| * [Kconfig](kconfig.md) | * [Kconfig](kconfig.md) | ||||||
|  | * [Gerrit Guidelines](gerrit_guidelines.md) | ||||||
|  | * [Documentation License](license.md) | ||||||
| * [Writing Documentation](writing_documentation.md) | * [Writing Documentation](writing_documentation.md) | ||||||
| * [Setting up GPIOs](gpio.md) | * [Setting up GPIOs](gpio.md) | ||||||
| * [Adding devices to a device tree](devicetree.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 | These variables were added to Kconfig specifically for coreboot and are not | ||||||
| included in the Linux version. | 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 | - 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. |   (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”. | - KCONFIG_SPLITCONFIG=”directory name for individual SYMBOL.h files”. | ||||||
|   coreboot sets this to $(obj)/config. |   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’ | #### Used only for ‘make menuconfig’ | ||||||
| - MENUCONFIG_MODE=single_menu.  Set to "single_menu" to enable.  All other | - MENUCONFIG_MODE=single_menu.  Set to "single_menu" to enable.  All other | ||||||
|   values disable the option.  This makes submenus appear below the menu option |   values disable the option.  This makes submenus appear below the menu option | ||||||
| @@ -786,7 +786,7 @@ select <symbol> \[if <expr>\] | |||||||
|     config TPM |     config TPM | ||||||
|         bool |         bool | ||||||
|         default n |         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_ARM | ||||||
|         select I2C_TPM if ARCH_ARM64 |         select I2C_TPM if ARCH_ARM64 | ||||||
|         help |         help | ||||||
| @@ -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 has added the glob operator '*' for the 'source' keyword. | ||||||
| - coreboot’s Kconfig always defines variables except for strings. In other | - coreboot’s Kconfig always defines variables except for strings. In other | ||||||
|   Kconfig implementations, bools set to false/0/no are not defined. |   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 | ## Kconfig Editor Highlighting | ||||||
|   | |||||||
| @@ -159,5 +159,5 @@ TOC tree. | |||||||
| [guide]: http://www.sphinx-doc.org/en/stable/install.html | [guide]: http://www.sphinx-doc.org/en/stable/install.html | ||||||
| [Sphinx]: http://www.sphinx-doc.org/en/master/ | [Sphinx]: http://www.sphinx-doc.org/en/master/ | ||||||
| [Markdown Guide]: https://www.markdownguide.org/ | [Markdown Guide]: https://www.markdownguide.org/ | ||||||
| [Gerrit Guidelines]: ../contributing/gerrit_guidelines.md | [Gerrit Guidelines]: gerrit_guidelines.md | ||||||
| [review.coreboot.org]: https://review.coreboot.org | [review.coreboot.org]: https://review.coreboot.org | ||||||
|   | |||||||
| @@ -2,7 +2,7 @@ | |||||||
| 
 | 
 | ||||||
| A coreboot image for an Intel SoC contains two separate definitions of the | 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 | 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 | 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 | 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    |                                           | | | 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; EC firmware is stored in BIOS     | | ||||||
| |            |                  |           | region of flash                           | | |            |                  |           | region of flash                           | | ||||||
| +------------+------------------+-----------+-------------------------------------------+ | +------------+------------------+-----------+-------------------------------------------+ | ||||||
| @@ -1,13 +1,9 @@ | |||||||
| # Welcome to the coreboot documentation | # Welcome to the coreboot documentation | ||||||
|  |  | ||||||
| This is the developer documentation for [coreboot](https://coreboot.org). | This is the developer documentation for [coreboot](https://coreboot.org). | ||||||
| It is built from Markdown files in the [Documentation] directory in the | It is built from Markdown files in the | ||||||
| source code. | [Documentation](https://review.coreboot.org/cgit/coreboot.git/tree/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. |  | ||||||
|  |  | ||||||
| ## Purpose of coreboot | ## 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. | they provide standard interfaces or entirely custom boot flows. | ||||||
|  |  | ||||||
| Popular [payloads](payloads.md) in use with coreboot are SeaBIOS, | 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, | GRUB2, the bootloader used by many Linux distributions, or depthcharge, | ||||||
| a custom boot loader used on Chromebooks. | a custom boot loader used on Chromebooks. | ||||||
|  |  | ||||||
| @@ -142,13 +138,13 @@ say hello! | |||||||
| ## Getting the source code | ## Getting the source code | ||||||
|  |  | ||||||
| coreboot is primarily developed in the | 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 | system, using [Gerrit](https://review.coreboot.org) to manage | ||||||
| contributions and code review. | 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 | 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. | standard configuration. | ||||||
|  |  | ||||||
| However, we're continually working on improvements to our infrastructure to | However, we're continually working on improvements to our infrastructure to | ||||||
| @@ -172,8 +168,14 @@ Contents: | |||||||
|  |  | ||||||
| * [Getting Started](getting_started/index.md) | * [Getting Started](getting_started/index.md) | ||||||
| * [Tutorial](tutorial/index.md) | * [Tutorial](tutorial/index.md) | ||||||
| * [Contributing](contributing/index.md) | * [Coding Style](contributing/coding_style.md) | ||||||
| * [Community](community/index.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) | * [Payloads](payloads.md) | ||||||
| * [Distributions](distributions.md) | * [Distributions](distributions.md) | ||||||
| * [Technotes](technotes/index.md) | * [Technotes](technotes/index.md) | ||||||
| @@ -192,12 +194,6 @@ Contents: | |||||||
| * [SuperIO](superio/index.md) | * [SuperIO](superio/index.md) | ||||||
| * [Vendorcode](vendorcode/index.md) | * [Vendorcode](vendorcode/index.md) | ||||||
| * [Utilities](util.md) | * [Utilities](util.md) | ||||||
| * [Software Bill of Materials](sbom/sbom.md) | * [coreboot infrastructure](infrastructure/index.md) | ||||||
| * [Project infrastructure & services](infrastructure/index.md) | * [Release notes for past releases](releases/index.md) | ||||||
| * [Boards supported in each release directory](releases/boards_supported_on_branches.md) | * [Flashing firmware tutorial](flash_tutorial/index.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/ |  | ||||||
|   | |||||||
| @@ -8,8 +8,8 @@ Let a jenkins admin know that you’re interested in setting up a jenkins | |||||||
| build system. | build system. | ||||||
|  |  | ||||||
| For a permanent build system, this should generally be a dedicated | For a permanent build system, this should generally be a dedicated | ||||||
| machine workstation or server class machine that is not generally being | machine that is not generally being used for other purposes.  The | ||||||
| used for other purposes.  The coreboot builds are very intensive. | coreboot builds are very intensive. | ||||||
|  |  | ||||||
| It's also best to be aware that although we don't know of any security | 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 | issues, the jenkins-node image is run with the privileged flag which | ||||||
| @@ -24,80 +24,56 @@ issues. | |||||||
|  |  | ||||||
| Currently active Jenkins admins: | Currently active Jenkins admins: | ||||||
| *   Patrick Georgi: | *   Patrick Georgi: | ||||||
|     *   Email: [patrick@coreboot.org](mailto:patrick@coreboot.org) |     *   Email: [patrick@georgi-clan.de](mailto:patrick@georgi-clan.de) | ||||||
| *   Martin Roth: |     *   IRC: pgeorgi | ||||||
|     *   Email: [gaumless@gmail.com](mailto:gaumless@gmail.com) |  | ||||||
|     *   IRC: martinr |  | ||||||
|  |  | ||||||
| ### Build Machine requirements | ### Build Machine requirements | ||||||
|  |  | ||||||
| For a builder, we need a very fast system with lots of threads and | For a builder, we need a fast system with lots of threads and plenty of | ||||||
| plenty of RAM.  The builder builds and stores the git repos and output | RAM.  The builder builds and stores the git repos and output in tmpfs | ||||||
| in tmpfs along with the ccache save area, so if there isn't enough | along with the ccache save area, so if there isn't enough memory, the | ||||||
| memory, the builds will slow down because of smaller ccache areas and | builds will slow down because of smaller ccache areas and can run into | ||||||
| can run into "out of storage space" errors. | "out of storage space" errors. | ||||||
|  |  | ||||||
| #### Current Build Machines | #### Current Build Machines | ||||||
|  |  | ||||||
| To give an idea of what a suitable build machine might be, currently the | To give an idea of what a suitable build machine might be, currently the | ||||||
| coreboot project has 6 active jenkins build machines. | coreboot project has 3 active jenkins build machines. | ||||||
|  |  | ||||||
| These times are taken from the week of Feb 21 - Feb 28, 2022 |  | ||||||
|  |  | ||||||
| * Congenialbuilder - 128 threads, 256GiB RAM | * Congenialbuilder - 128 threads, 256GiB RAM | ||||||
|   * Coverity Builds, Toolchain builds, Scanbuild-builds |   *  Fastest Passing coreboot gerrit build: 4 min, 30 sec | ||||||
|   * Fastest Passing coreboot gerrit build: 6 min, 47 sec |   *  Slowest Passing coreboot gerrit build: 9 min, 56 sec | ||||||
|   * Slowest Passing coreboot gerrit build: 14 min |  | ||||||
|  |  | ||||||
| * Gleefulbuilder - 64 threads, 64GiB RAM |  | ||||||
|   * Fastest Passing coreboot gerrit build: 10 min |  | ||||||
|   * Slowest Passing coreboot gerrit build: 46 min |  | ||||||
|  |  | ||||||
| * Fabulousbuilder - 64 threads, 64GiB RAM | * Gleeful builder - 64 thread, 64GiB RAM | ||||||
|   * Fastest Passing coreboot gerrit build: 7 min, 56 sec |   *  Fastest Passing coreboot gerrit build: 6 min, 6 sec | ||||||
|   * Slowest Passing coreboot gerrit build: 56 min (No ccache) |   *  Slowest Passing coreboot gerrit build, 34 min | ||||||
|  |  | ||||||
|  |  | ||||||
| * Ultron (9elements) - 48 threads, 128GiB RAM | * Ultron (9elements) - 48 threads, 128GiB RAM | ||||||
|   * Fastest Passing coreboot gerrit build: 12 min |   *  Fastest Passing coreboot gerrit build: 6 min, 32 sec | ||||||
|   * Slowest Passing coreboot gerrit build: 58 min |   *  Slowest Passing coreboot gerrit build: 44 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 |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ### Jenkins Builds | ### Jenkins Builds | ||||||
|  |  | ||||||
| There are a number of builds handled by the coreboot jenkins builders, | There are a number of builds handled by the coreboot jenkins builders, | ||||||
| for a number of different projects - coreboot, flashrom, memtest86+, | for a number of different projects - coreboot, flashrom, memtest86+, | ||||||
| em100, etc.  Many of these have builders for their current main branch | em100, etc.  Many of these have builders for their current master branch | ||||||
| as well as Gerrit and [Coverity](coverity.md) builds. | as well as gerrit and coverity builds. | ||||||
|  |  | ||||||
|  | You can see all the builds here: | ||||||
| #### 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: |  | ||||||
| [https://qa.coreboot.org/](https://qa.coreboot.org/) | [https://qa.coreboot.org/](https://qa.coreboot.org/) | ||||||
|  |  | ||||||
| Most of the time on the builders is taken up by the coreboot main and | Most of the time on the builders is taken up by the coreboot master and | ||||||
| coreboot gerrit builds. | gerrit builds. | ||||||
|  |  | ||||||
| * [coreboot gerrit build](https://qa.coreboot.org/job/coreboot-gerrit/) | * [coreboot gerrit build](https://qa.coreboot.org/job/coreboot-gerrit/) | ||||||
| ([Time trend](https://qa.coreboot.org/job/coreboot-gerrit/buildTimeTrend)) | ([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)) |  ([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: | 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’ | 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 | if the values go down on any of the cores after it's been running for a | ||||||
| while. | 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 | 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 and set up docker | ||||||
|  |  | ||||||
| Install docker by following [the | Install docker by following the | ||||||
| directions](https://docs.docker.com/engine/install/) on the docker site. | [directions](https://docs.docker.com/engine/install/) on the docker | ||||||
| These instructions keep changing, so just check the latest information. | 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} |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #### Set up environment variables | #### 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 | your shell's .rc file.  Note that you only need to set them if you're | ||||||
| using something other than the default. | using something other than the default. | ||||||
|  |  | ||||||
| ```sh | ``` | ||||||
| # Set the port used on your machine to connect to jenkins. | # Set the port used on your machine to connect to jenkins. | ||||||
| export COREBOOT_JENKINS_PORT=49151 | export COREBOOT_JENKINS_PORT=49151 | ||||||
|  |  | ||||||
| # Set the revision of the container from [docker hub](https://hub.docker.com/repository/docker/coreboot/coreboot-sdk) | # Set the revision of the container from docker hub | ||||||
| export DOCKER_COMMIT=2021-09-23_b0d87f753c | export DOCKER_COMMIT=65718760fa | ||||||
|  |  | ||||||
| # Set the location of where the jenkins cache directory will be. | # Set the location of where the jenkins cache directory will be. | ||||||
| export COREBOOT_JENKINS_CACHE_DIR="/srv/docker/coreboot-builder/cache" | export COREBOOT_JENKINS_CACHE_DIR="/srv/docker/coreboot-builder/cache" | ||||||
| @@ -198,13 +161,13 @@ continuing to the next step. | |||||||
|  |  | ||||||
| From the coreboot directory, run | From the coreboot directory, run | ||||||
|  |  | ||||||
| ```sh | ``` | ||||||
| make -C util/docker help | make -C util/docker help | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| This will show you the available targets and variables needed: | This will show you the available targets and variables needed: | ||||||
|  |  | ||||||
| ```text | ``` | ||||||
| Commands for working with docker images: | Commands for working with docker images: | ||||||
|   coreboot-sdk                 - Build coreboot-sdk container |   coreboot-sdk                 - Build coreboot-sdk container | ||||||
|   upload-coreboot-sdk          - Upload coreboot-sdk to hub.docker.com |   upload-coreboot-sdk          - Upload coreboot-sdk to hub.docker.com | ||||||
| @@ -236,10 +199,22 @@ Variables: | |||||||
|   DOCKER_COMMIT=65718760fa |   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 | ### Install the coreboot jenkins builder | ||||||
|  |  | ||||||
| ```sh | ``` | ||||||
| make -C util/docker docker-jenkins-server | make -C util/docker docker-jenkins-server | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| @@ -251,17 +226,17 @@ machine profile on qa.coreboot.org. | |||||||
|  |  | ||||||
| They need to know: | They need to know: | ||||||
| *   Your external IP address or domain name.  If you don’t have a static | *   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: | *   The port on your machine and firewall that’s exposed for jenkins: | ||||||
|     `$COREBOOT_JENKINS_PORT` | `$COREBOOT_JENKINS_PORT` | ||||||
| *   The core count of the machine. | *   The core count of the machine. | ||||||
| *   How much memory is available on the machine.  This helps determine | *   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 | ### First build | ||||||
| On the first build after a machine is reset, it will frequently take | 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 | is getting filled up and the entire coreboot repo gets downloaded.  As | ||||||
| the ccache gets populated, the build time will drop. | 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 | ### How to log in to the docker instance for debugging | ||||||
|  | ``` | ||||||
| ```sh |     $ make -C util/docker docker-jenkins-attach | ||||||
| make -C util/docker docker-jenkins-attach |     $ su coreboot | ||||||
| su coreboot |     $ cd ~/slave-root/workspace | ||||||
| cd ~/slave-root/workspace |     $ bash | ||||||
| bash |  | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
|  |  | ||||||
| WARNING: This should not be used to make changes to the build system, | 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 | 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 | 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 | made in the image will be lost on the next update, so if you | ||||||
| accidentally change something, you can remove the containers and images, | accidentally change something, you can remove the containers and images | ||||||
| then update to get a fresh installation. | and update to get a fresh installation. | ||||||
|  |  | ||||||
|  |  | ||||||
| ### How to download containers/images for a fresh installation and remove old containers | ### How to download containers/images for a fresh installation and remove old containers | ||||||
|  |  | ||||||
| To delete the old containers & images: | To delete the old containers & images: | ||||||
|  |  | ||||||
| ```sh | ``` | ||||||
| docker stop $COREBOOT_JENKINS_CONTAINER | $ docker stop $COREBOOT_JENKINS_CONTAINER | ||||||
| docker rm $COREBOOT_JENKINS_CONTAINER | $ docker rm $COREBOOT_JENKINS_CONTAINER | ||||||
| docker images # lists all existing images | $ docker images # lists all existing images | ||||||
| docker rmi XXXX # Use the image ID found in the above command. | $ 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 | To get and run the new coreboot-jenkins image, change the value in the | ||||||
| `DOCKER_COMMIT` variable to the new image value. | `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 | #### 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 | Make sure your credentials are configured on your host machine by | ||||||
| running | running | ||||||
|  |  | ||||||
| ```sh | ``` | ||||||
| docker login | $ docker login | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| This will prompt you for your docker username, password, and your email | This will prompt you for your docker username, password, and your email | ||||||
| address, and write out to ~/.docker/config.json.  Without this file, you | address, and write out to ~/.docker/config.json.  Without this file, you | ||||||
| won’t be able to push the images. | 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 | The coreboot-sdk Dockerfile will need to be updated when any additional | ||||||
| dependencies are added.  Both the coreboot-sdk and the | 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/) | Read the [dockerfile best practices](https://docs.docker.com/v1.8/articles/dockerfile_best-practices/) | ||||||
| page before updating the files. | 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. | 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 | There are two methods of running the docker image - interactively as a | ||||||
| shell, or doing the build directly.  Running interactively as a shell is | 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 | (without any changes getting saved) and re-test builds.  This saves the | ||||||
| time of having to rebuild the image for every issue you find. | time of having to rebuild the image for every issue you find. | ||||||
|  |  | ||||||
| #### Running the docker image interactively | #### Running the docker image interactively: | ||||||
|  |  | ||||||
| Run: | Run: | ||||||
|  |  | ||||||
| ```sh | ``` | ||||||
| make -C util/docker docker-jenkins-server | $ make -C util/docker docker-jenkins-server | ||||||
| make -C util/docker docker-jenkins-attach | $ make -C util/docker docker-jenkins-attach | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| #### Running the build directly | #### Running the build directly: | ||||||
|  |  | ||||||
| From the coreboot directory: | 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: | You’ll also want to test building the other projects and payloads: | ||||||
| ChromeEC, flashrom, memtest86+, em100, Grub2, SeaBIOS, iPXE, coreinfo, | ChromeEC, flashrom, memtest86+, em100, Grub2, SeaBIOS, iPXE, coreinfo, | ||||||
| nvramcui, tint... | 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 | When you’re satisfied with the testing, push the coreboot-sdk image to | ||||||
| the hub.docker.com | 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 | This docker image is pretty simple, so there’s not really any testing | ||||||
| that needs to be done. | that needs to be done. | ||||||
|  |  | ||||||
| ```sh | ``` | ||||||
| make -C util/docker coreboot-jenkins-node | $ make -C util/docker coreboot-jenkins-node | ||||||
| make -C util/docker upload-coreboot-jenkins-node | $ make -C util/docker upload-coreboot-jenkins-node | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| ### Coverity Setup | ### 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 | Download the Linux-64 coverity build tool and decompress it into your | ||||||
| cache directory as defined by the `$COREBOOT_JENKINS_CACHE_DIR` variable | 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) | [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 | (cov-analysis-linux64-7.7.0.4) to ‘coverity’, or better, create a | ||||||
| symlink: | symlink: | ||||||
|  |  | ||||||
| ```sh | ``` | ||||||
| ln -s cov-analysis-linux64-7.7.0.4 coverity | 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) |  | ||||||
|  |  | ||||||
|  | This section contains documentation about coreboot infrastructure | ||||||
|  |  | ||||||
| ## Jenkins builders and builds | ## Jenkins builders and builds | ||||||
| * [Setting up Jenkins build machines](builders.md) | * [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 | [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 | 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 | 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. | written to at runtime, as CBFS is considered too fragile for such situations. | ||||||
| The Flashmap implementation inside coreboot is the de facto standard today. | 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. | utility folder that can be used to generate final firmware images (i.e. | ||||||
| `coreboot.rom`) formatted by Flashmap. | `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: | 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. | 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 | 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 | 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 ChromiumOS | image across multiple devices by selecting various options at runtime.  See the Chromium OS | ||||||
| [Firmware Config][1] documentation for more information. | [Firmware Config][1] documentation for more information. | ||||||
|  |  | ||||||
| This firmware configuration interface differs from the CMOS option interface in that this | 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 | ### 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 | 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. | 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. | before asking the embedded controller. | ||||||
|  |  | ||||||
| It is also possible to adjust the value in the embedded controller *(after disabling write | 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]. | documentation for [Firmware Config][1] and [Board Info][2]. | ||||||
|  |  | ||||||
| [1]: http://chromium.googlesource.com/chromiumos/docs/+/HEAD/design_docs/firmware_config.md | [1]: http://chromium.googlesource.com/chromiumos/docs/+/master/design_docs/firmware_config.md | ||||||
| [2]: http://chromium.googlesource.com/chromiumos/docs/+/HEAD/design_docs/cros_board_info.md | [2]: http://chromium.googlesource.com/chromiumos/docs/+/master/design_docs/cros_board_info.md | ||||||
|  |  | ||||||
| ## Firmware Configuration Table | ## 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) | 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; | 		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**, | 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. | 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 | [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 | 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 | other region, such as the Management Engine or firmware descriptor, then | ||||||
| an external programmer is required (unless you find a clever way around | 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 | ### 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/ | [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 | [MX25L6473E]: http://www.macronix.com/Lists/Datasheet/Attachments/7380/MX25L6473E,%203V,%2064Mb,%20v1.4.pdf | ||||||
| [flashrom]: https://flashrom.org/Flashrom | [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/ | [ASRock H81M-HDS]: https://www.asrock.com/mb/Intel/H81M-HDS/ | ||||||
| [W25Q32FV]: https://www.winbond.com/resource-files/w25q32fv%20revi%2010202015.pdf | [W25Q32FV]: https://www.winbond.com/resource-files/w25q32fv%20revi%2010202015.pdf | ||||||
| [flashrom]: https://flashrom.org/Flashrom | [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] | - [Board manual] | ||||||
| - Flash chip datasheet [W25Q64FV] | - Flash chip datasheet [W25Q64FV] | ||||||
|  |  | ||||||
| [ASUS F2A85-M]: https://web.archive.org/web/20160320065008/http://www.asus.com/Motherboards/F2A85M/ | [ASUS F2A85-M]: https://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 | [Board manual]: https://dlcdnets.asus.com/pub/ASUS/mb/SocketFM2/F2A85-M/E8005_F2A85-M.pdf | ||||||
| [flashrom]: https://flashrom.org/Flashrom | [flashrom]: https://flashrom.org/Flashrom | ||||||
| [Piledriver]: https://en.wikipedia.org/wiki/Piledriver_%28microarchitecture%29#APU_lines | [Piledriver]: https://en.wikipedia.org/wiki/Piledriver_%28microarchitecture%29#APU_lines | ||||||
| [TeraScale 3]: https://en.wikipedia.org/wiki/TeraScale_%28microarchitecture%29#TeraScale_3 | [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 |     echo 2000 >/sys/class/hwmon/hwmon2/pwm1_tolerance | ||||||
|  |  | ||||||
| [ASUS P5Q]: https://www.asus.com/Motherboards/P5Q | [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 | [kernel docs]: https://www.kernel.org/doc/Documentation/hwmon/w83627ehf.rst | ||||||
|   | |||||||
| @@ -106,6 +106,6 @@ region is not readable even by the host. | |||||||
| - [Flash chip datasheet][W25Q32BV] | - [Flash chip datasheet][W25Q32BV] | ||||||
|  |  | ||||||
| [ASUS P8H61-M LX]: https://www.asus.com/Motherboards/P8H61M_LX/ | [ASUS P8H61-M LX]: https://www.asus.com/Motherboards/P8H61M_LX/ | ||||||
| [W25Q32BV]: https://web.archive.org/web/20211002141814/https://www.winbond.com/resource-files/w25q32bv_revi_100413_wo_automotive.pdf | [W25Q32BV]: https://www.winbond.com/resource-files/w25q32bv_revi_100413_wo_automotive.pdf | ||||||
| [flashrom]: https://flashrom.org/Flashrom | [flashrom]: https://flashrom.org/Flashrom | ||||||
| [Board manual]: http://dlcdnet.asus.com/pub/ASUS/mb/LGA1155/P8H61_M_LX/E6803_P8H61-M_LX.zip | [Board manual]: http://dlcdnet.asus.com/pub/ASUS/mb/LGA1155/P8H61_M_LX/E6803_P8H61-M_LX.zip | ||||||
|   | |||||||
| @@ -1,137 +0,0 @@ | |||||||
| # ASUS P8Z77-M |  | ||||||
|  |  | ||||||
| This page describes how to run coreboot on the [ASUS P8Z77-M]. |  | ||||||
|  |  | ||||||
| ## Flashing coreboot |  | ||||||
|  |  | ||||||
| ```eval_rst |  | ||||||
| +---------------------+----------------+ |  | ||||||
| | Type                | Value          | |  | ||||||
| +=====================+================+ |  | ||||||
| | Model               | W25Q64FVA1Q    | |  | ||||||
| +---------------------+----------------+ |  | ||||||
| | Size                | 8 MiB          | |  | ||||||
| +---------------------+----------------+ |  | ||||||
| | Package             | DIP-8          | |  | ||||||
| +---------------------+----------------+ |  | ||||||
| | Socketed            | yes            | |  | ||||||
| +---------------------+----------------+ |  | ||||||
| | Write protection    | yes            | |  | ||||||
| +---------------------+----------------+ |  | ||||||
| | Dual BIOS feature   | no             | |  | ||||||
| +---------------------+----------------+ |  | ||||||
| | Internal flashing   | yes            | |  | ||||||
| +---------------------+----------------+ |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| The flash chip is located between the blue SATA ports. |  | ||||||
|  |  | ||||||
| The main SPI flash cannot be written internally because Asus disables BIOSWE and |  | ||||||
| enables ``BLE/SMM_BWP`` flags in ``BIOS_CNTL`` for their latest bioses. |  | ||||||
| To install coreboot for the first time, the flash chip must be removed and |  | ||||||
| flashed with an external programmer; flashing in-circuit doesn't work. |  | ||||||
| The flash chip is socketed, so it's easy to remove and reflash. |  | ||||||
|  |  | ||||||
| ## Working |  | ||||||
|  |  | ||||||
| - All USB2 ports (mouse, keyboard and thumb drive) |  | ||||||
| - USB3 ports on rear (Boots SystemRescue 6.0.3 off a Kingston DataTraveler G4 8GB) |  | ||||||
| - Gigabit Ethernet (RTL8111F) |  | ||||||
| - SATA3, SATA2 (all ports, hot-swap not tested) |  | ||||||
|        (Blue SATA2)  (Blue SATA2)  (White SATA3) |  | ||||||
|         port 5        port 3        port 1 |  | ||||||
|         port 6        port 4        port 2 |  | ||||||
|  |  | ||||||
| - CPU Temp sensors and hardware monitor (some values don't make sense) |  | ||||||
| - Native and MRC memory initialization |  | ||||||
|   (please see [Native raminit compatibility] and [MRC memory compatibility]) |  | ||||||
|  |  | ||||||
| - Integrated graphics with both libgfxinit and the Intel Video BIOS OpROM |  | ||||||
|   (VGA/DVI-D/HDMI tested and working) |  | ||||||
| - 16x PCIe GPU in PCIe-16x/4x slots (tested using nVidia Quadro 600 under SystemRescue 6.0.3 |  | ||||||
|   (Arch based)) |  | ||||||
| - Serial port |  | ||||||
| - PCI slot |  | ||||||
|   Rockwell HSF 56k PCI modem, Sound Blaster Live! CT4780 (cards detected, not function tested) |  | ||||||
|   Promise SATA150 TX2plus (R/W OK to connected IDE hard drive, OpRom loaded, cannot boot from |  | ||||||
|   SeaBIOS) |  | ||||||
| - S3 suspend from Linux |  | ||||||
| - 2-channel analog audio (WAV playback by mplayer via back panel line out port) |  | ||||||
| - Windows 10 with libgfxinit high resolution framebuffer and VBT |  | ||||||
|  |  | ||||||
| ## Known issues |  | ||||||
|  |  | ||||||
| - If you use MRC raminit, the NVRAM variable gfx_uma_size may be ignored as IGP's UMA could |  | ||||||
|   be reconfigured by the blob. |  | ||||||
|  |  | ||||||
| - If SeaBIOS is used for payload with libgfxinit, it must be brought in via coreboot's config. |  | ||||||
|   Otherwise integrated graphics would fail with a black screen. |  | ||||||
|  |  | ||||||
| - PCI POST card is not functional because the PCI bridge early init is not yet done. |  | ||||||
|  |  | ||||||
| - The black PCIEX16_2 slot, although can physically fit an x16, only has physical contacts for |  | ||||||
|   an x8, and is electrically an x4 only. |  | ||||||
|  |  | ||||||
| ## Untested |  | ||||||
|  |  | ||||||
| - Wake-on-LAN |  | ||||||
| - USB3 on header |  | ||||||
| - TPM header |  | ||||||
| - EHCI debugging (Debug port is on the 5-pin side of USB2_910 header) |  | ||||||
| - HDMI and S/PDIF audio out |  | ||||||
|  |  | ||||||
| ## Not working |  | ||||||
|  |  | ||||||
| - PS/2 keyboard or mouse |  | ||||||
| - 4 and 6 channel analog audio out: Rear left and right audio is a muted |  | ||||||
|   copy of front left and right audio, and the other two channels are silent. |  | ||||||
|  |  | ||||||
| ## Native (and MRC) raminit compatibility |  | ||||||
|  |  | ||||||
| - OCZ OCZ3G1600LVAM 2x2GB kit works at DDR3-1066 instead of DDR3-1600. |  | ||||||
|  |  | ||||||
| - GSkill F3-1600C9D-16GRSL 2x8GB SODIMM kit on adapter boots, but is highly unstable |  | ||||||
|   with obvious pattern of bit errors during memtest86+ runs. |  | ||||||
|  |  | ||||||
| - Samsung PC3-10600U 2x2GB kit works at full rated speed. |  | ||||||
|  |  | ||||||
| - Kingston KTH9600B-4G 2x4GB kit works at full rated speed. |  | ||||||
|  |  | ||||||
| ## Extra onboard buttons |  | ||||||
|  |  | ||||||
| The board has two onboard buttons, and each has a related LED nearby. |  | ||||||
| What controls the LEDs and what the buttons control are unknown, |  | ||||||
| therefore they currently do nothing under coreboot. |  | ||||||
|  |  | ||||||
| - BIOS_FLBK |  | ||||||
|   OEM firmware uses this button to facilitate a simple update mechanism |  | ||||||
|   via a USB drive plugged into the bottom USB port of the USB/LAN stack. |  | ||||||
|  |  | ||||||
| - MemOK! |  | ||||||
|   OEM firmware uses this button for memory tuning related to overclocking. |  | ||||||
|  |  | ||||||
| ## Technology |  | ||||||
|  |  | ||||||
| ```eval_rst |  | ||||||
| +------------------+--------------------------------------------------+ |  | ||||||
| | Northbridge      | :doc:`../../northbridge/intel/sandybridge/index` | |  | ||||||
| +------------------+--------------------------------------------------+ |  | ||||||
| | Southbridge      | bd82x6x                                          | |  | ||||||
| +------------------+--------------------------------------------------+ |  | ||||||
| | CPU              | model_206ax                                      | |  | ||||||
| +------------------+--------------------------------------------------+ |  | ||||||
| | Super I/O        | Nuvoton NCT6779D                                 | |  | ||||||
| +------------------+--------------------------------------------------+ |  | ||||||
| | EC               | None                                             | |  | ||||||
| +------------------+--------------------------------------------------+ |  | ||||||
| | Coprocessor      | Intel Management Engine                          | |  | ||||||
| +------------------+--------------------------------------------------+ |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| ## Extra resources |  | ||||||
|  |  | ||||||
| - [Flash chip datasheet][W25Q64FVA1Q] |  | ||||||
|  |  | ||||||
| [ASUS P8Z77-M]: https://www.asus.com/Motherboards/P8Z77M/ |  | ||||||
| [W25Q64FVA1Q]: https://www.winbond.com/resource-files/w25q64fv%20revs%2007182017.pdf |  | ||||||
| [flashrom]: https://flashrom.org/Flashrom |  | ||||||
| @@ -37,7 +37,7 @@ easy to remove and reflash. | |||||||
|  |  | ||||||
| ## Working | ## Working | ||||||
|  |  | ||||||
| - PS/2 keyboard with SeaBIOS & edk2 (in Mint 18.3/19.1) | - PS/2 keyboard with SeaBIOS & Tianocore (in Mint 18.3/19.1) | ||||||
|  |  | ||||||
| - Rear/front headphones connector audio & mic | - Rear/front headphones connector audio & mic | ||||||
|  |  | ||||||
| @@ -57,7 +57,7 @@ easy to remove and reflash. | |||||||
|        port 3        port 5         port 1             port 8 |        port 3        port 5         port 1             port 8 | ||||||
|        port 4        port 6         port 2             port 7 |        port 4        port 6         port 2             port 7 | ||||||
|  |  | ||||||
| - NVME SSD boot on PCIe-x16/x8/4x slot using edk2 | - NVME SSD boot on PCIe-x16/x8/4x slot using Tianocore | ||||||
|   (tested with M.2-to-PCIe adapter and a M.2 Samsung EVO 970 SSD) |   (tested with M.2-to-PCIe adapter and a M.2 Samsung EVO 970 SSD) | ||||||
|  |  | ||||||
| - CPU Temp sensors (tested PSensor on linux + HWINFO64 on Win10) | - CPU Temp sensors (tested PSensor on linux + HWINFO64 on Win10) | ||||||
| @@ -89,7 +89,7 @@ easy to remove and reflash. | |||||||
| - If you use the MRC.bin, the NVRAM variable gfx_uma_size may be ignored | - If you use the MRC.bin, the NVRAM variable gfx_uma_size may be ignored | ||||||
|   as IGP's UMA could be reconfigured by the blob |   as IGP's UMA could be reconfigured by the blob | ||||||
|  |  | ||||||
| - Using edk2 + a PCIe GPU under Windows crashes with an | - Using TianoCore + a PCIe GPU under Windows crashes with an | ||||||
|   ACPI_BIOS_ERROR fatal code, not sure why. Using just the IGP |   ACPI_BIOS_ERROR fatal code, not sure why. Using just the IGP | ||||||
|   works perfectly |   works perfectly | ||||||
|  |  | ||||||
| @@ -105,9 +105,9 @@ easy to remove and reflash. | |||||||
|  |  | ||||||
| ## Not working | ## Not working | ||||||
|  |  | ||||||
| - PS/2 keyboard in Win10 using edk2 (please see [Known issues]) | - PS/2 keyboard in Win10 using Tianocore (please see [Known issues]) | ||||||
| - PS/2 mouse using edk2 | - PS/2 mouse using Tianocore | ||||||
| - PCIe graphics card on Windows and edk2 (throws critical ACPI_BIOS_ERROR) | - PCIe graphics card on Windows and Tianocore (throws critical ACPI_BIOS_ERROR) | ||||||
|  |  | ||||||
| ## Native raminit compatibility | ## Native raminit compatibility | ||||||
|  |  | ||||||
|   | |||||||