Compare commits
	
		
			19 Commits
		
	
	
		
			4.20
			...
			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,7 +4,6 @@
 | 
			
		||||
# 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
 | 
			
		||||
@@ -23,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
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										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/*
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										37
									
								
								.gitmodules
									
									
									
									
										vendored
									
									
								
							
							
						
						@@ -1,67 +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
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										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
									
									
								
							
							
								
								
								
								
								
							
						
						
							
								
								
									
										1
									
								
								AUTHORS
									
									
									
									
									
								
							
							
						
						@@ -108,7 +108,6 @@ Jonas 'Sortie' Termansen
 | 
			
		||||
Jonathan A. Kollasch
 | 
			
		||||
Jonathan Neuschäfer
 | 
			
		||||
Jordan Crouse
 | 
			
		||||
Jörg Mische
 | 
			
		||||
Joseph Smith
 | 
			
		||||
Keith Hui
 | 
			
		||||
Keith Packard
 | 
			
		||||
 
 | 
			
		||||
@@ -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,4 +1,3 @@
 | 
			
		||||
## SPDX-License-Identifier: GPL-2.0-only
 | 
			
		||||
#
 | 
			
		||||
# Makefile for coreboot paper.
 | 
			
		||||
# hacked together by Stefan Reinauer <stepan@openbios.org>
 | 
			
		||||
@@ -10,9 +9,9 @@ FIGS=codeflow.pdf hypertransport.pdf
 | 
			
		||||
 | 
			
		||||
all: corebootPortingGuide.pdf
 | 
			
		||||
 | 
			
		||||
SVG2PDF=$(shell command -v svg2pdf)
 | 
			
		||||
INKSCAPE=$(shell command -v inkscape)
 | 
			
		||||
CONVERT=$(shell command -v convert)
 | 
			
		||||
SVG2PDF=$(shell which svg2pdf)
 | 
			
		||||
INKSCAPE=$(shell which inkscape)
 | 
			
		||||
CONVERT=$(shell which convert)
 | 
			
		||||
 | 
			
		||||
codeflow.pdf: codeflow.svg
 | 
			
		||||
ifneq ($(strip $(SVG2PDF)),)
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,3 @@
 | 
			
		||||
## SPDX-License-Identifier: GPL-2.0-only
 | 
			
		||||
# Makefile for Sphinx documentation
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										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,9 +11,6 @@ upwards.
 | 
			
		||||
 | 
			
		||||
- [GPIO toggling in ACPI AML](gpio.md)
 | 
			
		||||
 | 
			
		||||
## devicetree
 | 
			
		||||
 | 
			
		||||
##  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)
 | 
			
		||||
 
 | 
			
		||||
@@ -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  | 
@@ -115,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
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
@@ -3,7 +3,7 @@
 | 
			
		||||
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. But they may be ignored in
 | 
			
		||||
@@ -66,7 +66,7 @@ case 'm':
 | 
			
		||||
case 'K':
 | 
			
		||||
case 'k':
 | 
			
		||||
	mem <<= 10;
 | 
			
		||||
	__fallthrough;
 | 
			
		||||
	/* fall through */
 | 
			
		||||
default:
 | 
			
		||||
	break;
 | 
			
		||||
}
 | 
			
		||||
@@ -818,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
 | 
			
		||||
@@ -832,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
 | 
			
		||||
---------------
 | 
			
		||||
@@ -1023,55 +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.
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
 
 | 
			
		||||
| 
		 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  | 
@@ -8,15 +8,6 @@ and those providing after-market firmware to extend the usefulness of devices.
 | 
			
		||||
 | 
			
		||||
## Hardware shipping with coreboot
 | 
			
		||||
 | 
			
		||||
### 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.
 | 
			
		||||
 | 
			
		||||
### ChromeOS Devices
 | 
			
		||||
 | 
			
		||||
All ChromeOS devices ([Chromebooks](https://chromebookdb.com/), Chromeboxes,
 | 
			
		||||
@@ -33,19 +24,12 @@ ships with coreboot and support upstream maintenance for the devices through a
 | 
			
		||||
third party, [3mdeb](https://3mdeb.com). They provide current and tested
 | 
			
		||||
firmware binaries on [GitHub](https://pcengines.github.io).
 | 
			
		||||
 | 
			
		||||
### 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.
 | 
			
		||||
distribution of coreboot, EDK2, and System76 firmware applications.
 | 
			
		||||
 | 
			
		||||
### Purism
 | 
			
		||||
 | 
			
		||||
@@ -63,22 +47,11 @@ 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.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Dasharo
 | 
			
		||||
 | 
			
		||||
[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.
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
edk2 as the payload to provide a modern UEFI bootloader. Why replace
 | 
			
		||||
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
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										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,136 +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)
 | 
			
		||||
 | 
			
		||||
* 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
 | 
			
		||||
 
 | 
			
		||||
| 
		 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.**
 | 
			
		||||
@@ -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/master%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/master%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/master%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/master%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
 | 
			
		||||
@@ -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)
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
 
 | 
			
		||||
@@ -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,7 +138,7 @@ 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.
 | 
			
		||||
 | 
			
		||||
@@ -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/master/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
 | 
			
		||||
@@ -26,48 +26,34 @@ Currently active Jenkins admins:
 | 
			
		||||
*   Patrick Georgi:
 | 
			
		||||
    *   Email: [patrick@georgi-clan.de](mailto:patrick@georgi-clan.de)
 | 
			
		||||
    *   IRC: pgeorgi
 | 
			
		||||
*   Martin Roth:
 | 
			
		||||
    *   Email: [gaumless@gmail.com](mailto:gaumless@gmail.com)
 | 
			
		||||
    *   IRC: martinr
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### 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
 | 
			
		||||
@@ -75,24 +61,13 @@ These times are taken from the week of Feb 21 - Feb 28, 2022
 | 
			
		||||
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 master branch
 | 
			
		||||
as well as Gerrit and [Coverity](coverity.md) builds.
 | 
			
		||||
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 master and
 | 
			
		||||
coreboot gerrit builds.
 | 
			
		||||
gerrit builds.
 | 
			
		||||
 | 
			
		||||
* [coreboot gerrit build](https://qa.coreboot.org/job/coreboot-gerrit/)
 | 
			
		||||
([Time trend](https://qa.coreboot.org/job/coreboot-gerrit/buildTimeTrend))
 | 
			
		||||
@@ -110,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’
 | 
			
		||||
@@ -121,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
 | 
			
		||||
@@ -152,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
 | 
			
		||||
@@ -177,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"
 | 
			
		||||
@@ -199,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
 | 
			
		||||
@@ -237,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
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
@@ -252,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.
 | 
			
		||||
 | 
			
		||||
@@ -271,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
 | 
			
		||||
@@ -318,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
 | 
			
		||||
@@ -337,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
 | 
			
		||||
@@ -353,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
 | 
			
		||||
@@ -403,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)
 | 
			
		||||
 | 
			
		||||
@@ -411,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.
 | 
			
		||||
 
 | 
			
		||||
@@ -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,9 +101,9 @@ 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/+/master/design_docs/firmware_config.md
 | 
			
		||||
@@ -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;
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 
 | 
			
		||||
@@ -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      | :doc:`../../northbridge/intel/i440bx/index`      |
 | 
			
		||||
+------------------+--------------------------------------------------+
 | 
			
		||||
| 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      | :doc:`../../northbridge/intel/i440bx/index`      |
 | 
			
		||||
+------------------+--------------------------------------------------+
 | 
			
		||||
| 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
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,52 +0,0 @@
 | 
			
		||||
# QEMU PPC64 emulator
 | 
			
		||||
This page describes how to build and run coreboot for QEMU/PPC64.
 | 
			
		||||
 | 
			
		||||
## Building coreboot
 | 
			
		||||
```bash
 | 
			
		||||
make defconfig KBUILD_DEFCONFIG=configs/config.emulation_qemu_power9
 | 
			
		||||
make
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
This builds coreboot with no payload.
 | 
			
		||||
 | 
			
		||||
## Payloads
 | 
			
		||||
You can configure ELF or `skiboot` payload via `make menuconfig`. In either case
 | 
			
		||||
you might need to adjust "ROM chip size" and make it large enough to accommodate
 | 
			
		||||
the payload (see how much space it needs in the error you get if it doesn't
 | 
			
		||||
fit).
 | 
			
		||||
 | 
			
		||||
## Running coreboot in QEMU
 | 
			
		||||
```bash
 | 
			
		||||
qemu-system-ppc64 -M powernv,hb-mode=on \
 | 
			
		||||
                  -cpu power9 \
 | 
			
		||||
                  -bios build/coreboot.rom \
 | 
			
		||||
                  -drive file=build/coreboot.rom,if=mtd \
 | 
			
		||||
                  -serial stdio \
 | 
			
		||||
                  -display none
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
- The default CPU in QEMU for AArch64 is a 604. You specify a suitable
 | 
			
		||||
PowerPC CPU via `-cpu power9`.
 | 
			
		||||
- By default Hostboot mode is off and needs to be turned on to run coreboot
 | 
			
		||||
as a firmware rather than like an OS.
 | 
			
		||||
- `-bios` specifies initial program (bootloader should suffice, but whole image
 | 
			
		||||
works fine too).
 | 
			
		||||
- `-drive` specifies image for emulated flash device.
 | 
			
		||||
 | 
			
		||||
## Running with a kernel
 | 
			
		||||
Loading `skiboot` (built automatically by coreboot or otherwise) allows
 | 
			
		||||
specifying kernel and root file system to be run.
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
qemu-system-ppc64 -M powernv,hb-mode=on \
 | 
			
		||||
                  -cpu power9 \
 | 
			
		||||
                  -bios build/coreboot.rom \
 | 
			
		||||
                  -drive file=build/coreboot.rom,if=mtd \
 | 
			
		||||
                  -serial stdio \
 | 
			
		||||
                  -display none \
 | 
			
		||||
                  -kernel zImage \
 | 
			
		||||
                  -initrd initrd.cpio.xz
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
- Specify path to your kernel via `-kernel`.
 | 
			
		||||
- Specify path to your rootfs via `-initrd`.
 | 
			
		||||
@@ -1,8 +1,8 @@
 | 
			
		||||
# QEMU RISC-V emulator
 | 
			
		||||
# Qemu RISC-V emulator
 | 
			
		||||
 | 
			
		||||
## Building coreboot and running it in QEMU
 | 
			
		||||
## Building coreboot and running it in Qemu
 | 
			
		||||
 | 
			
		||||
- Configure coreboot and run `make` as usual
 | 
			
		||||
- Run `util/riscv/make-spike-elf.sh build/coreboot.rom build/coreboot.elf` to
 | 
			
		||||
  convert coreboot to an ELF that QEMU can load
 | 
			
		||||
  convert coreboot to an ELF that Qemu can load
 | 
			
		||||
- Run `qemu-system-riscv64 -M virt -m 1024M -nographic -kernel build/coreboot.elf`
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,10 @@ This page describes how to run coreboot on the Facebook FBG1701.
 | 
			
		||||
FBG1701 are assembled with different onboard memory modules:
 | 
			
		||||
	Rev 1.0	Onboard Samsung K4B8G1646D-MYKO memory
 | 
			
		||||
	Rev 1.1 and 1.2	Onboard Micron MT41K512M16HA-125A memory
 | 
			
		||||
	Rev 1.3 and 1.4 Onboard Kingston B5116ECMDXGGB memory
 | 
			
		||||
	Rev 1.3	Onboard Kingston B5116ECMDXGGB memory
 | 
			
		||||
 | 
			
		||||
Use make menuconfig to configure `onboard memory manufacturer Samsung` in
 | 
			
		||||
Mainboard menu.
 | 
			
		||||
 | 
			
		||||
## Required blobs
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -104,11 +104,11 @@ solution. Wires need to be connected to be able to flash using an external progr
 | 
			
		||||
- SMBus
 | 
			
		||||
- Initialization with FSP
 | 
			
		||||
- SeaBIOS payload (commit a5cab58e9a3fb6e168aba919c5669bea406573b4)
 | 
			
		||||
- edk2 payload (commit 860a8d95c2ee89c9916d6e11230f246afa1cd629)
 | 
			
		||||
- TianoCore payload (commit 860a8d95c2ee89c9916d6e11230f246afa1cd629)
 | 
			
		||||
- LinuxBoot (kernel kernel-4_19_97) (uroot commit 9c9db9dbd6b532f5f91a511a0de885c6562aadd7)
 | 
			
		||||
- eMMC
 | 
			
		||||
 | 
			
		||||
All of the above has been briefly tested by booting Linux from eMMC using the edk2 payload
 | 
			
		||||
All of the above has been briefly tested by booting Linux from eMMC using the TianoCore payload
 | 
			
		||||
and LinuxBoot.
 | 
			
		||||
 | 
			
		||||
SeaBios has been checked to the extend that it runs to the boot selection and provides display
 | 
			
		||||
 
 | 
			
		||||
@@ -142,7 +142,7 @@ Built gigabyte/ga-g41m-es2l (GA-G41M-ES2L)
 | 
			
		||||
 | 
			
		||||
```eval_rst
 | 
			
		||||
In addition to the information here, please see the
 | 
			
		||||
:doc:`../../tutorial/flashing_firmware/index`.
 | 
			
		||||
:doc:`../../flash_tutorial/index`.
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### Do backup
 | 
			
		||||
 
 | 
			
		||||
@@ -1,91 +0,0 @@
 | 
			
		||||
# HP EliteBook 2170p
 | 
			
		||||
 | 
			
		||||
This page is about the notebook [HP EliteBook 2170p].
 | 
			
		||||
 | 
			
		||||
## Release status
 | 
			
		||||
 | 
			
		||||
HP EliteBook 2170p was released in 2012 and is now end of life.
 | 
			
		||||
It can be bought from a secondhand market like Taobao or eBay.
 | 
			
		||||
 | 
			
		||||
## Required proprietary blobs
 | 
			
		||||
 | 
			
		||||
The following blobs are required to operate the hardware:
 | 
			
		||||
1. EC firmware
 | 
			
		||||
2. Intel ME firmware
 | 
			
		||||
 | 
			
		||||
EC firmware can be retrieved from the HP firmware update image, or the firmware
 | 
			
		||||
backup of the laptop. EC Firmware is part of the coreboot build process.
 | 
			
		||||
The guide on extracting EC firmware and using it to build coreboot is in
 | 
			
		||||
document [HP Laptops with KBC1126 Embedded Controller](hp_kbc1126_laptops).
 | 
			
		||||
 | 
			
		||||
Intel ME firmware is in the flash chip. It is not needed when building coreboot.
 | 
			
		||||
 | 
			
		||||
## Programming
 | 
			
		||||
 | 
			
		||||
The flash chip is located between the memory slots, WWAN card and CPU,
 | 
			
		||||
covered by the base enclosure, which needs to be removed according to
 | 
			
		||||
the [Maintenance and Service Guide] to access the flash chip. Unlike
 | 
			
		||||
other variants, the flash chip on 2170p is socketed, so it can be taken
 | 
			
		||||
off and operated with an external programmer.
 | 
			
		||||
 | 
			
		||||
Pin 1 of the flash chip is at the side near the CPU.
 | 
			
		||||
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
For more details have a look at the general [flashing tutorial].
 | 
			
		||||
 | 
			
		||||
## Debugging
 | 
			
		||||
 | 
			
		||||
The board can be debugged with serial port on the dock or EHCI debug.
 | 
			
		||||
The EHCI debug port is the left USB3 port.
 | 
			
		||||
 | 
			
		||||
## Test status
 | 
			
		||||
 | 
			
		||||
### Known issues
 | 
			
		||||
 | 
			
		||||
- GRUB payload freezes if at_keyboard module is in the GRUB image
 | 
			
		||||
  ([bug #141])
 | 
			
		||||
 | 
			
		||||
### Untested
 | 
			
		||||
 | 
			
		||||
- Fingerprint Reader
 | 
			
		||||
- Dock: Parallel port, PS/2 mouse, S-Video port
 | 
			
		||||
 | 
			
		||||
### Working
 | 
			
		||||
 | 
			
		||||
- Integrated graphics init with libgfxinit
 | 
			
		||||
- SATA
 | 
			
		||||
- Audio: speaker and microphone
 | 
			
		||||
- Ethernet
 | 
			
		||||
- WLAN
 | 
			
		||||
- WWAN
 | 
			
		||||
- Bluetooth
 | 
			
		||||
- SD Card Reader
 | 
			
		||||
- SmartCard Reader
 | 
			
		||||
- USB
 | 
			
		||||
- DisplayPort
 | 
			
		||||
- Keyboard, touchpad and trackpoint
 | 
			
		||||
- EC ACPI support and thermal control
 | 
			
		||||
- Dock: all USB ports, DVI-D, Serial debug, PS/2 keyboard
 | 
			
		||||
- TPM
 | 
			
		||||
- Internal flashing when IFD is unlocked
 | 
			
		||||
- Using `me_cleaner`
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Technology
 | 
			
		||||
 | 
			
		||||
```eval_rst
 | 
			
		||||
+------------------+--------------------------------------------------+
 | 
			
		||||
| CPU              | Intel Sandy/Ivy Bridge (FCPGA988)                |
 | 
			
		||||
+------------------+--------------------------------------------------+
 | 
			
		||||
| PCH              | Intel Panther Point QM77                         |
 | 
			
		||||
+------------------+--------------------------------------------------+
 | 
			
		||||
| EC               | SMSC KBC1126                                     |
 | 
			
		||||
+------------------+--------------------------------------------------+
 | 
			
		||||
| Coprocessor      | Intel Management Engine                          |
 | 
			
		||||
+------------------+--------------------------------------------------+
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
[HP EliteBook 2170p]: https://support.hp.com/us-en/product/hp-elitebook-2170p-notebook-pc/5245427
 | 
			
		||||
[Maintenance and Service Guide]: http://h10032.www1.hp.com/ctg/Manual/c03387961.pdf
 | 
			
		||||
[flashing tutorial]: ../../tutorial/flashing_firmware/ext_power.md
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 50 KiB  | 
@@ -94,6 +94,6 @@ Schematic of this laptop can be found on [Lab One].
 | 
			
		||||
 | 
			
		||||
[HP EliteBook 2560p]: https://support.hp.com/us-en/product/hp-elitebook-2560p-notebook-pc/5071201
 | 
			
		||||
[Maintenance and Service Guide]: http://h10032.www1.hp.com/ctg/Manual/c03011618
 | 
			
		||||
[flashing tutorial]: ../../tutorial/flashing_firmware/ext_power.md
 | 
			
		||||
[flashing tutorial]: ../../flash_tutorial/ext_power.md
 | 
			
		||||
[Lab One]: https://www.laboneinside.com/hp-elitebook-2560p-schematic-diagram/
 | 
			
		||||
[bug #141]: https://ticket.coreboot.org/issues/141
 | 
			
		||||
 
 | 
			
		||||