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