Compare commits

..

376 Commits

Author SHA1 Message Date
Jeremy Soller
29f9270d39 darp7 SD card does not support RTD3
Change-Id: Ie393e9cd42f58d2b3b7172c99b9cd5a1b3a41d87
2020-12-28 09:30:35 -07:00
Jeremy Soller
b625b0db73 Disable invalid PLD group
Change-Id: I2c8f8aa405a34e56ba1bd8f38b35447bed999a5e
2020-12-22 14:45:08 -07:00
Jeremy Soller
d0dbaebd28 Fixes for S0ix
Change-Id: I293b4219332f6ea58f81a231a613b03b74f5e1c4
2020-12-22 14:28:06 -07:00
Jeremy Soller
7e69c5aae8 Fix PLD groups
Change-Id: I6b0aaab65350a6588cee7956f9a2d2d773bf458a
2020-12-22 14:27:20 -07:00
Jeremy Soller
7bb6096cb5 Enable darp7 color keyboard
Change-Id: I839e32dfea4a3c26f49da8b0aeb92bff711c7a9a
2020-12-22 13:26:01 -07:00
Jeremy Soller
5cf1e853cc Add darp7
Change-Id: I8c47a18095ad19f907c9018952dec551865e27fe
2020-12-22 11:32:42 -07:00
Jeremy Soller
6690cc7c7a Ensure that GPU SSID is restored
Change-Id: Iada67ff9b7d882167ca2047a1618230e73d4300d
2020-12-15 10:09:48 -07:00
Jeremy Soller
ebf03eb621 Fix galp5 integrated graphics mode
Change-Id: I3f46b0fd1e5c66ace2f0c45fa9e4bc580d907547
2020-12-14 14:59:13 -07:00
Jeremy Soller
776cb6366b Do not ping GPU_EVENT
Change-Id: I07f0852d57a1cc52f8595c06960db6e7dc78ce76
2020-12-08 09:07:39 -07:00
Jeremy Soller
36f3b1af84 Enable galp5 NVIDIA GPU
Change-Id: I9dd1a7b0150672925bf454202947ccace8b0edb7
2020-12-08 09:05:34 -07:00
Jeremy Soller
3b186d8baf Add debugging and _PR3 linkage for RTD3 driver
Change-Id: I243e0d8a65f682b1a68af68fa911c8fb8e000cb0
2020-12-08 09:03:52 -07:00
Jeremy Soller
5fbdab4ddb Remove invalid writes to set TCSS D3 2020-12-03 21:32:32 -07:00
Jeremy Soller
fd716f3457 Casually disable TBT RTD3
Change-Id: Ia20aded6de9769d9e69a374e67b7ceb569169bc5
2020-12-03 20:39:14 -07:00
Jeremy Soller
8d4dd30363 Use 9KB VBT
Change-Id: I19017f4af04bde2b681255a32a9ffc073deb4f62
2020-12-03 13:17:49 -07:00
Jeremy Soller
c6f49ca48a Revert removal of MMCONFIG
Change-Id: I22be03d5714b58bd19fdf0cd126487b1e72d7473
2020-12-03 11:03:30 -07:00
Jeremy Soller
a20126a4b3 Use SCI to wake from suspend whe on TGL models
Change-Id: I153a9627b846516404b8fd2dceb86872307eecd2
2020-12-03 09:08:25 -07:00
Jeremy Soller
869eebbbb5 Hide MMCONFIG on TGL and set VBT to 8KB
Change-Id: I46d9535266e2ca1946213d899ddecc1b426d2294
2020-12-03 08:45:48 -07:00
Jeremy Soller
bbfea8bd39 Merge remote-tracking branch 'upstream/master' into HEAD
Change-Id: Id25620ddd031ef761b2f7962acb6682223c9753b
2020-12-02 20:42:22 -07:00
Jeremy Soller
d95db48cd7 Re-enable lpit 2020-12-02 15:59:24 -07:00
Jeremy Soller
4dd22de634 Restore changes to TCSS ASL
Change-Id: I8e6093f117f5e5aa453a739b88d1d6fc3fed6598
2020-11-30 14:08:14 -07:00
Jeremy Soller
b69fba193b Enable UART on lemp10
Change-Id: If82418b9dfcb63dfb7fdd192107d3f6b3d77d3b9
2020-11-30 11:40:55 -07:00
Jeremy Soller
fd8c25ab61 Re-enable UART on galp5, default to disabled NVIDIA GPU
Change-Id: I7dffdce4d213f083f1742695943fcff0c4859e80
2020-11-30 10:56:45 -07:00
Jeremy Soller
c051009031 WIP: Revert changes that may cause TBT RTD3 issues
Change-Id: I8ada670bc06af11b79c721fcf39ed3bdfa362b17
2020-11-30 10:53:04 -07:00
Jeremy Soller
bf721bef43 Merge remote-tracking branch 'upstream/master' into galp5
Change-Id: Iaa3dca6a7c101b6e006d3487361d8a5b327e6d04
2020-11-30 10:01:26 -07:00
Jeremy Soller
5ae625110d Merge remote-tracking branch 'upstream/master' into galp5
Change-Id: I3b61b0368544499706b8416d093e1ceedd1143c6
2020-11-25 14:37:36 -07:00
Jeremy Soller
2672659890 Add DRIVERS_INTEL_PMC to galp5
Change-Id: I26b27e887e5e06ae65b8e55e24befa0cf679a20f
2020-11-25 14:33:00 -07:00
Jeremy Soller
4f36a5779d Sync USB ACPI and PMC mux to galp5
Change-Id: I3f3d3ad0486ec457960fbda3be5cce05e6a6d748
2020-11-25 13:48:31 -07:00
Jeremy Soller
0304273049 Fix lemp10 USB ACPI
Change-Id: Ie5c558db0de770b92bff4cec77fa52beab428bcb
2020-11-25 13:48:16 -07:00
Jeremy Soller
79f0e60861 Add USB ACPI drivers and re-enable PMC mux
Change-Id: Iec6f0a9ea29cba69fcdb0d708aaa5cc39a9e4f04
2020-11-25 13:33:12 -07:00
Jeremy Soller
3d37711899 Apply TCSS recommendations from 617016
Change-Id: Ia30fa057f3f03e8d7e82d067e09ea85a7bab3385
2020-11-24 14:40:41 -07:00
Jeremy Soller
13338f9ae2 Sync lemp10 iom config
Change-Id: Ie7a07c1447a3b41d3b53d1198e86cf04b51f96bc
2020-11-24 12:31:22 -07:00
Jeremy Soller
f28c6180a7 Disable IomTypeCPortPadCfg
Change-Id: Ic30860e5157fa31445a5bcc01b7adfb358ae5467
2020-11-24 12:29:47 -07:00
Jeremy Soller
d7ed6947c2 Remove duplicate TCSS ACPI
Change-Id: Ic19299f938541b48eb636fcc79f122fc39189833
2020-11-24 12:29:32 -07:00
Jeremy Soller
0182cebfbc Enable CNVi wake, document all RTD3 pins with names from schematics
Change-Id: I5581b39b3d4a072124cbb09cc4fbe16a671eb700
2020-11-24 08:54:16 -07:00
Jeremy Soller
b4dcbd3c28 Sync more tcss changes from alderlake to tigerlake
Change-Id: I4ec025714f48bed5623687827d3362e507dc6f90
2020-11-24 08:27:12 -07:00
Jeremy Soller
aebf02be02 Fixup
Change-Id: I4e124cb8a69496a11e9eac270612c65025bb1f7c
2020-11-23 20:58:31 -07:00
Jeremy Soller
c9d9c491ec Also require TBT0 and TBT1 resource for DMA and RP
Change-Id: I6238c0b6cb7b47c18f3918d53f0e5c1a6706ce57
2020-11-23 20:50:44 -07:00
Jeremy Soller
7f543c99f8 Try to use GPIO PM modes
Change-Id: I97a9ecabf2839e29d00a76db0c5b17db99965ee3
2020-11-23 20:45:41 -07:00
Jeremy Soller
bd6bbc3655 Merge remote-tracking branch 'upstream/master' into galp5
Change-Id: Ic25f3dba2af53111bca9e7762a2690c518c35fe1
2020-11-23 08:52:59 -07:00
Jeremy Soller
3cdc454b18 Sync galp5 with lemp10
Change-Id: I0596f182021758b6013733429a7a810963b09995
2020-11-23 08:50:51 -07:00
Jeremy Soller
10b8410a2e Try acoustic noise mitigation
Change-Id: I6d6bffedbb48f5340e664fc9c7bdd406e9ed8680
2020-11-20 19:58:33 -07:00
Jeremy Soller
aa2159786d Disable WiFi wake
Change-Id: Icf7490278872b11723fec5c6d820728945a8cfe0
2020-11-20 15:54:34 -07:00
Jeremy Soller
5352c7b0b2 Merge remote-tracking branch 'upstream/master' into galp5
Change-Id: I718ce2ea23c20405a0392793361cf3e52e864276
2020-11-20 10:30:40 -07:00
Jeremy Soller
f786129104 Add CPU LTR for lemp10
Change-Id: I6d3c0aad1d120185c5801420093c64f85ba89ada
2020-11-19 15:54:26 -07:00
Jeremy Soller
dafe9d6fe0 Add CPU LTR
Change-Id: I91c494b2d085abc6bea10bda0bc13fb31eec2cff
2020-11-19 15:49:37 -07:00
Jeremy Soller
953ceb040b Sync lemp10 with galp5
Change-Id: I1808db36e269b828d7cec0f3300915b4be2e6622
2020-11-19 13:32:49 -07:00
Jeremy Soller
f10995e09e Fix missing on
Change-Id: I0f8ffe1edfd19d05b735f7b95fdd46e469682950
2020-11-19 12:16:13 -07:00
Jeremy Soller
3fae15eea4 Fix typo
Change-Id: I92af63f5f4075e96ba0a4b60f34409d69dce9761
2020-11-19 12:15:25 -07:00
Jeremy Soller
b14e953b71 Remove unused USB ports and crash log
Change-Id: Id1978bddb3f63d1b9623d92b8b7d1b5b74cbd328
2020-11-19 12:13:11 -07:00
Jeremy Soller
7d302de633 WIP: Reorganize devicetree
Change-Id: Ia17916de8794077e57ce7fd04464e99d3751479d
2020-11-19 12:09:40 -07:00
Jeremy Soller
cf36cd8f13 WIP: adjust GPIOs to enable retimer
Change-Id: If9256d01dc844b7272433827ca40d874c55eb713
2020-11-19 10:46:13 -07:00
Jeremy Soller
77009f599d Add PEG0 definition
Change-Id: I75f36d32b53c0cf683a36cd3518cc0c966cf2077
2020-11-18 21:34:51 -07:00
Jeremy Soller
047e58bc35 Move CPU AER and PTM config to mainboard
Change-Id: Idd7908426e33a64afa34ea9e5d02ec7378a56271
2020-11-18 21:13:15 -07:00
Jeremy Soller
130a3b0281 WIP: undo changes that might impact CPU PCIe
Change-Id: Ied4e4ed4c11172a9bb1c7aa47787ba6fb7e72803
2020-11-18 20:27:11 -07:00
Jeremy Soller
18cb9b5ab0 Sync lemp10 CPU power config with lemp9
Change-Id: Ia326f80113c1d19c18d492d5387057fe939b3809
2020-11-18 12:50:34 -07:00
Jeremy Soller
2267ee62e4 Fix lemp10 USB config
Change-Id: If371e351956b4ef65e3c7989f45ec8a88c55e3af
2020-11-18 12:49:52 -07:00
Jeremy Soller
6d1cc1ca1d Sync galp5 with lemp10
Change-Id: I7fdb50fd56beba8a38bdeb10e838dc22eb857deb
2020-11-18 10:59:37 -07:00
Jeremy Soller
1331815d90 Disable CPU PCIe clock req messaging
Change-Id: I7936a770463d150b5310b89a4ab577d8c9aacc98
2020-11-17 20:48:05 -07:00
Jeremy Soller
9847012bc6 Disable Precision Time Measurement for CPU PCIe ports
Change-Id: I007b6825a7d558254f890723ef568b96d9e884bc
2020-11-17 19:26:27 -07:00
Duncan Laurie
efd716cef0 soc/intel/tigerlake: Expose UPD to disable Precision Time Measurement
Expose a config option that allows disabling the FSP UPD which controls
Precision Time Measurement for a particular PCIe root port.  Since this
is enabled by default the option is inverted to allow disabling for
a particular port while not affecting others.

BUG=b:160996445
TEST=boot on volteer with PTM disabled for the NVMe root port

Change-Id: Icb51b256eb581d942b2d30fcabfae52fa90e48d4
Signed-off-by: Duncan Laurie <dlaurie@google.com>
2020-11-17 19:24:07 -07:00
Patrick Rudolph
417fa84913 device/pciexp: Allow ASPM on bridge devices
The device acceptable latency field is only valid for 'endpoints',
but not for bridge devices. Set the maximum acceptable latency on
such devices to allow ASPM being enabled if supported on both sides.

Allows the PCIe link on bridge devices to go into L0s/L1.

This allows the package to enter a deeper sleep state when all links
are idle.

WARNING: This might cause issues on PCIe bridge devices that doesn't
properly support ASPM. In addition it might decrease performance.

Change-Id: I277efe0bd1448ee8bff633428aa729aeedf04e28
Signed-off-by: Patrick Rudolph <patrick.rudolph@9elements.com>
2020-11-17 19:13:14 -07:00
John Zhao
d13acd817d device: Enable ASPM for TBT PCIe root ports
The virtual/generic device under TBT PCIe root ports has path type as
DEVICE_PATH_GENERIC. While scanning the pcie bus, the generic device
blocks its root ports configuration. This change adds device path type
check and enables ASPM for TBT root ports.

BUG=b:173207454
TEST=Built image and booted to kernel on Voxel board. Verified both of
the TBT Root ports 00:07.0 and 00:07.1 ASPM are enabled.

Signed-off-by: John Zhao <john.zhao@intel.com>
Change-Id: I82ffaeb5a8821d9034d8dae9d98d3b5953a9608b
2020-11-17 19:12:04 -07:00
Jeremy Soller
79aa5fa87f Debug pcie rtd3
Change-Id: I60d2b7533178c8fad5871b0d3b0e3cd6a3cb99e8
2020-11-17 17:08:18 -07:00
Jeremy Soller
2d40287435 Add _PR3 power resource to RTD3 driver
Change-Id: Iddfeaaf1424f7af9983167dd5e234d656e252da7
2020-11-17 16:35:27 -07:00
Jeremy Soller
604e699ace Disable debug console
Change-Id: Ieca895cb4c7be95600f955ed85fc06f877ba9216
2020-11-17 13:53:16 -07:00
Jeremy Soller
68ccba9a11 Enable GNA and disable I2C2 pins
Change-Id: I46b6254748f13c763551ac48e390aedfb2a6def1
2020-11-17 13:51:16 -07:00
Jeremy Soller
faa6da02cc Do not disable PEG60 srcclk
Change-Id: I08808789e48f7e25d8419d752e238cc8c35c3df8
2020-11-16 21:19:39 -07:00
Jeremy Soller
3d0ab91fce Debug root port number in RTD3 driver
Change-Id: I2ce1d69bc8ccc4602b745dd3672af30a70ecff73
2020-11-16 20:59:51 -07:00
Michael Niewöhner
306b440892 [TEST] LPIT table test implementation
... cowardly stolen from CB:32350 ;-)

Change-Id: I08b9948366db68bf16076e330bbca8c8dc85e65c

Signed-off-by: Shaunak Saha <shaunak.saha@intel.com>
Signed-off-by: Michael Niewöhner <foss@mniewoehner.de>
Change-Id: Ibb7f34d03120824710e84d69f8459ea8bd35fbcb
2020-11-16 19:54:13 -07:00
Michael Niewöhner
903d70ab8e soc/intel/common/acpi,mb/*: replace the two obsolete LPID with PEPD
Replace the two obsolete LPID implementations with the new PEPD device.

The PEPD device gets included in the plaforms' `southbridge.asl`, since
it is required to load the `intel_pmc_core` module in Linux, which
checks for the _HID. (See CB:46469 for more info on that.)

There is no harm for mainboards not supporting S0ix, because the _DSM
function won't be called with the LPS0 UUID on such boards. Such boards
can use the debugging functionality of `intel_pmc_core`, too.

Change-Id: Ic8427db33286451618b50ca429d41b604dbb08a5
Signed-off-by: Michael Niewöhner <foss@mniewoehner.de>
2020-11-16 19:54:13 -07:00
Michael Niewöhner
914ec1eb46 soc/intel/common/acpi: add _HID to PEPD
Add the _HID INT33A1 to PEPD to make Linux recognize it as "Intel Power
Engine" in the pmc core driver.

The _ADR gets dropped, because _HID and _ADR are mutually exclusive.

Change-Id: I7a0335681f1601f7fd8a9245a3dea72ffd100b55
Signed-off-by: Michael Niewöhner <foss@mniewoehner.de>
2020-11-16 19:54:13 -07:00
Michael Niewöhner
0b02151c1a soc/intel/common/acpi: correct return value for PEPD enum function
The PEPD enum function returns a bitmask to announce supported/enabled
PEPD functions. Add a comment describing this bitmask and correct the
return value to announce function 1, 5 and 6 as supported.

Also add comments to the disabled functions 3 and 4.

Change-Id: Ib523a54f5ad695e79005aba422282e03f2bc4bed
Signed-off-by: Michael Niewöhner <foss@mniewoehner.de>
2020-11-16 19:54:13 -07:00
Michael Niewöhner
032971dc2c soc/intel/common/acpi: work around Windows crash on S0ix-enabled boards
Windows does not comply with the Low Power Idle S0 specification and
crashes with an `INTERNAL_POWER_ERROR` bluescreen when function 1, does
not return at least one device constraint, even when function 1 is
announced as being not available by the enum function. Returning an
empty package does not work.

At least the following Windows versions were verified to be affected:
- Windows 8.1 x64, release 6.3.9600
- Windoes 10 x64, version 1809, build 17763.379
- Windows 10 x64, version 1903, build 18362.53
- Windows 10 x64, version 2004, build 19041.508
- Windows 10 x64, version 20H2 / 2009, build 19042.450

To make Windows work on S0ix-enabled boards, return a dummy constraint
package with a disabled dummy device.

Since the device constraints are only used for debugging low power
states in Linux and probably also in Windows, there shouldn't be any
negative effect to S0ix. Real device constraint entries could be added
at a later point, if needed.

Note: to fully prevent the BSOD mentioned above the LPIT table is
required on Windows, too. The patch for this is WIP, see CB:32350.
If you want to test this, you need to applie the whole ACPI patch
series including the hacky LPIT test implementation from CB:47242:
https://review.coreboot.org/q/topic:%22low_power_idle_fix%22

Test: no bluescreen anymore on Clevo L140CU on all Windows versions
listed above and S0ix gets detected in `powercfg -a`.

Change-Id: Icd08cbcb1dfcb8cbb23f4f4c902bf8c367c8e3ac
Signed-off-by: Michael Niewöhner <foss@mniewoehner.de>
2020-11-16 19:54:13 -07:00
Michael Niewöhner
c4726c168e soc/intel/common/acpi: drop return value for disabled PEPD function 2
PEPD function 2 is currently unused and disabled. Thus, drop the return
value, which matches the default return value.

Change-Id: Ia95b8b36fcb78e8976b66de15ec214a38c178cda
Signed-off-by: Michael Niewöhner <foss@mniewoehner.de>
2020-11-16 19:54:13 -07:00
Michael Niewöhner
72ceea7118 soc/intel/common/acpi: rename PEPD/LPI macros for clarification
`ARG2` in the macro's names does not really provide any useful
information. Drop it and add `LPI` to clarify the relation to only
low-power idle states.

Change-Id: I8d44c9e4974c7f34aa5c32ba00328725f536fda6
Signed-off-by: Michael Niewöhner <foss@mniewoehner.de>
2020-11-16 19:54:13 -07:00
Michael Niewöhner
1ff04c8b7d soc/intel/common/acpi: rename LPID to PEPD
Rename LPID to PEPD for consistency. PEPD means "Power Engine Plug-In
Device" and is the name Intel and vendors usually use, so let's comply.

Change-Id: I1caa009a3946b1c55da8afbae058cafe98940c6d
Signed-off-by: Michael Niewöhner <foss@mniewoehner.de>
2020-11-16 19:54:13 -07:00
Michael Niewöhner
8369925be2 soc/intel/common/acpi: move S0ix UUID to the condition
Move the UUID to the condition, since there is no need to assign a name
when it is only used once. Also add a comment to make clear that the
functions inside that condition are only used by the Low Power Idle S0
functionality, while the PEPD in general can be present on boards
without S0ix capability, too. For details check CB:46469.

Change-Id: Ic62c37090ad1b747f9d7d204363cc58f96ef67ef
Signed-off-by: Michael Niewöhner <foss@mniewoehner.de>
2020-11-16 19:54:13 -07:00
Michael Niewöhner
0bf0c25af4 soc/intel/common/acpi: drop the southridge scope around PEPD
PEPD will get included directly in the southbridge. Thus, drop the
scope around it.

Change-Id: Icb7a40e476966a7aca36bee055ee71d181508b87
Signed-off-by: Michael Niewöhner <foss@mniewoehner.de>
2020-11-16 19:54:12 -07:00
Jeremy Soller
8bd1ee6bd4 Remove lpit acpi code
Change-Id: Iaa51fa7a58a5649be4671437377d2fc94cd8ff8d
2020-11-16 19:54:12 -07:00
Jeremy Soller
d206f606e1 Disable legacy 8254 timer on lemp10
Change-Id: I0d8acc95b778d0d3c1acb29890c765d9c8eba0b3
2020-11-16 10:56:18 -07:00
Jeremy Soller
8ddde8e912 Enable SATA SALP support
Change-Id: If261f708d943df3ad46082a9d4365fd1b9f47f06
2020-11-16 10:49:51 -07:00
Jeremy Soller
abb149ebce Add default IomTypeCPortPadCfg
Change-Id: I5b6639f7f5a2b62aa644c93c69889dda590c34d5
2020-11-16 09:24:34 -07:00
Duncan Laurie
5c341798b3 soc/intel/common: Use per-soc definition for BAR sizes
The various platform BARs are not always the same size across different
SOCs, so use the defined size rather than a hardcoded value.

This results in the following change on TGL which increased the MCHBAR
size to 128K:

-system 00:00: [mem 0xfedc0000-0xfeddffff] has been reserved
+system 00:00: [mem 0xfedc0000-0xfedc7fff] has been reserved

And fixes the following error output from the kernel:

resource sanity check: requesting [mem 0xfedc0000-0xfedcdfff],
  which spans more than pnp 00:00 [mem 0xfedc0000-0xfedc7fff]

Change-Id: I82796c2fc81dec883f3c69ae7bdcedc7d3f16c64
Signed-off-by: Duncan Laurie <dlaurie@google.com>
2020-11-16 08:52:31 -07:00
Duncan Laurie
d4e3f5a44c soc/intel/tigerlake: Enable GPIO IOSTANDBY configuration
Enable SOC_INTEL_COMMON_BLOCK_GPIO_IOSTANDBY so the pads can be
configured with non-zero IOSSTATE values.

BUG=b:171993054

Signed-off-by: Duncan Laurie <dlaurie@google.com>
Change-Id: I1f895dbdbb71a353a98272db6dc70b54e8e172a3
2020-11-16 08:51:03 -07:00
Jeremy Soller
934fe49137 Add lpit asl to lemp10
Change-Id: I52fb84961cdd0ca8aef23f53ebab06041610a014
2020-11-14 21:20:28 -07:00
Jeremy Soller
32e9a708d5 Select retimer driver
Change-Id: I03304ffe1e6bc108c4557a9dfbe448729d2eaec0
2020-11-14 20:38:13 -07:00
Jeremy Soller
d695072b56 Add retimer device
Change-Id: I40f380af709acce80ce96c674eca521683b1252d
2020-11-14 20:36:36 -07:00
Jeremy Soller
7a1774b337 Enable SATA devslp on lemp10
Change-Id: Ic41d672431d76519406eb3403f8ce1f8b154d6d9
2020-11-14 20:24:11 -07:00
Jeremy Soller
2214f27d92 Add rtd3 config for lemp10 m.2 slots
Change-Id: I0d49ba23205801dbcca7fe420ed8e763e1e80514
2020-11-14 20:13:22 -07:00
Duncan Laurie
bcda5840d2 soc/intel/tigerlake: Enable RTD3 driver and IPC mailbox
This SOC overrides the common PMC device and instantiates the PMC device
in the SSDT.  It needs to call the common PMC function to provide the
IPC mailbox method.

The common PCIe RTD3 driver can also be enabled which will allow
mainboards to enable Runtime D3 power control for PCIe devices.

BUG=b:160996445
TEST=boot on volteer with this driver enabled for the NVMe device in the
devicetree and disassemble the SSDT to ensure the RTD3 code is present.

Signed-off-by: Duncan Laurie <dlaurie@google.com>
Change-Id: Ifa54ec3b8cebcc2752916cc4f8616fcb6fd2fecc
2020-11-14 19:59:42 -07:00
Duncan Laurie
3a549208b5 soc/intel/common: Add PCIe Runtime D3 driver for ACPI
This driver is for devices attached to a PCIe root port that support
Runtime D3.  It creates the necessary PowerResource in the root port to
provide _ON/_OFF methods for which will turn off power and clocks to the
device when it is in the D3cold state.

The mainboard declares the driver in devicetree and provides the GPIOs
that control power/reset for the device attached to the root port and
the SRCCLK pin used for the PMC IPC mailbox to enable/disable the clock.

An additional device property is created for storage devices if it
matches the PCI storage class which is used to indicate that the storage
device should use D3 for power savings.

BUG=b:160996445
TEST=boot on volteer device with this driver enabled in the devicetree
and disassemble the SSDT to ensure this code exists.

Signed-off-by: Duncan Laurie <dlaurie@google.com>
Change-Id: I13e59c996b4f5e4c2657694bda9fad869b64ffde
2020-11-14 19:59:25 -07:00
Jeremy Soller
e2c16d57e3 Merge remote-tracking branch 'upstream/master' into galp5
Change-Id: I13cd0997db873191951e5c74c819b00acbbf1e89
2020-11-14 19:56:37 -07:00
Jeremy Soller
721cfbc4c5 Disable s3
Change-Id: I1fa063eed7f439ae390225340a10050d0549e65b
2020-11-14 16:35:35 -07:00
Jeremy Soller
2ad8956e6a Add fivr and lpm config
Change-Id: I702cc273aed7d676016c587e38f31945948b2bc6
2020-11-13 21:55:23 -07:00
Jeremy Soller
dfaccb9009 Enable S0iX
Change-Id: Iba1828a385456a1a5a4e998af9b22e312e298119
2020-11-13 19:58:42 -07:00
Jeremy Soller
247a002d4a Disable PM timer to prevent TCO watchdog timeout on resume from suspend
Change-Id: I46047d5fe36320fbb4673ac92f523d8bb2832f0c
2020-11-13 09:14:39 -07:00
Jeremy Soller
69ed89d502 Disable GPU RTD3 temporarily
Change-Id: I12ca425807c9a71137a7595fabad37ee2ebd35fc
2020-11-11 08:47:21 -07:00
Jeremy Soller
82bca31f3f Disable CPU PCIE RP AER by default
Change-Id: I619e7845d16eeca5544cd88789facebe18742c46
2020-11-10 14:26:37 -07:00
Jeremy Soller
e82bbc5f2f Enable smbus and fix m.2 clkreqs
Change-Id: I521a30570efafb528e4d77688677307507f97742
2020-11-10 09:18:47 -07:00
Jeremy Soller
0ecb18229e Sync some galp5 and lemp10 gpios
Change-Id: I0159b093bb5fc6edde3ca94c014645f3a19cb148
2020-11-09 09:26:18 -07:00
Jeremy Soller
2fb0138a9b Annotate lemp10 gpios
Change-Id: I54b39f7f58330bad642e80d6d04de3ca76671a06
2020-11-09 09:22:33 -07:00
Jeremy Soller
ce6bff58d2 Allow TGL mixed topology to have mismatched SPD length
Change-Id: I1a0d66ed580cf2f11c61500b801335500b35c603
2020-11-06 11:01:01 -07:00
Jeremy Soller
15436f7225 Enable lemp10 integrated memory
Change-Id: Ic2e74a34e2e1b3c0044f23d6b24114a5b0575f64
2020-11-06 10:41:17 -07:00
Jeremy Soller
287fc4c7dc Update lemp10 touchpad GPIO
Change-Id: Idf45d3e41b4cf3c9480d0a11cfbd5017e69087cd
2020-11-03 11:43:14 -07:00
Jeremy Soller
56da115d48 Disable integrated memory on lemp10 temporarily
Change-Id: I31bce31c853234f2e30a84e3da82434704da3ff3
2020-11-03 11:40:05 -07:00
Jeremy Soller
fdfd543cca Sync galp5 and lemp10 romstage
Change-Id: I777d52fe47e5c60613442afc8c036c44fbe31ac6
2020-11-03 11:00:10 -07:00
Jeremy Soller
00396acb5c Update devicetree definition of wifi
Change-Id: I1cfebe558953e375d17b8b98d627b05556ab5743
2020-11-03 10:40:47 -07:00
Jeremy Soller
063c9484d7 Merge remote-tracking branch 'upstream/master' into galp5
Change-Id: Idb9f8389e2f1b16091f06f2a786e44968b566be3
2020-11-03 10:26:49 -07:00
Jeremy Soller
6576e07dd7 lemp10
Change-Id: Ia3d636931efd5bab6047a4305ba934b707043568
2020-10-30 11:48:31 -06:00
Jeremy Soller
11d4c0495d Adjust touchpad interrupt
Change-Id: Ia04988d063b52fe03ef21a34a154b40af7c2bef4
2020-10-28 14:51:21 -06:00
Jeremy Soller
8d7bbb9369 Fix galp5 compilation
Change-Id: I20eec17107cf7d609a8b21fede86095a29e34db7
2020-10-28 12:42:38 -06:00
Jeremy Soller
3ace8eb089 Merge remote-tracking branch 'upstream/master' into galp5
Change-Id: Ia43c6f4cdd97cd8c20a15a71499291ad4a92dedf
2020-10-28 12:03:28 -06:00
Jeremy Soller
581081092e Update galp5 power limits
Change-Id: Ic9b22570cc2e61b5489f7bbdb58e7920a4507b7f
2020-10-27 08:36:48 -06:00
Jeremy Soller
467ae4536d Move TGL MMCONF address to CNL address
Change-Id: Ibe2b299d8026ad84a0197093effcfa8756e4b7e9
2020-10-16 13:13:52 -06:00
Jeremy Soller
bcd90d09a3 Use MMCONF address for DGPU PCIe registers
Change-Id: I6ff555e2695a6495b00af30daefae55cb0a532e7
2020-10-16 13:08:42 -06:00
Jeremy Soller
87712d8d53 Fix use of DGPU_DEVICE config
Change-Id: I019227731e0f0db7f5202fa8144392dd8d073198
2020-10-16 12:54:40 -06:00
Jeremy Soller
789a6f3815 Fix GPU root port
Change-Id: I270199003437634c7cd07efcafa9a01d48be6f15
2020-10-16 12:46:19 -06:00
Jeremy Soller
4714bc94b1 Configurable GPU root port
Change-Id: Iae1641a407e075087179f11e186092b40c0c3022
2020-10-16 12:42:57 -06:00
Jeremy Soller
a1aaca8cc8 Add i915_gpu_controller_info
Change-Id: I5f4e360974aefc75570ec20e500bb77bd962ca0a
2020-10-16 12:01:09 -06:00
Jeremy Soller
d58c413a7a Enable NVIDIA GPU and ACPI backlight
Change-Id: If92c122ab2eaf0ef6fad13e2fe42b0532a25ee15
2020-10-16 11:56:32 -06:00
Jeremy Soller
bd046ce5dd ROM stage has been confirmed
Change-Id: Ib2b73d8a9498907416a3f8c31f5eac0965310f66
2020-10-16 11:49:46 -06:00
Jeremy Soller
94cfd014ee Add PEG60 IRQ mappings
Change-Id: I747a58fb056c5c19f4c4e3e50eedf2f396077f8b
2020-10-16 11:24:17 -06:00
Jeremy Soller
3449cbbdca Disable GMA ACPI
Change-Id: Ifc07265b35bc41a980cb0c8f034294144409f510
2020-10-16 09:32:50 -06:00
Jeremy Soller
1bb86c038d Adjustments to device tree
Change-Id: I3016dbdea9f6d6fb463d5306b7f4ffda2536e08c
2020-10-16 08:51:00 -06:00
Jeremy Soller
a67207b24e Disable GPU sleep hook
Change-Id: I99cae1176de1a163cdcc7fde19c3757b26c590b5
2020-10-15 20:58:13 -06:00
Jeremy Soller
ace9fe645a Enable more PCIe devices
Change-Id: I1113ae7f601b8c9db05ea8ec794d6e4b149af6b5
2020-10-15 20:54:01 -06:00
Jeremy Soller
0a7afd5b4c Disable GPU driver
Change-Id: I689a7ff7ef1fec0e78d85116c4b97e7ba0f394fd
2020-10-15 20:53:50 -06:00
Jeremy Soller
eb2feb01fe Fix UART and touchpad interrupt
Change-Id: I1a13f34d9efa0e381ffffa3bbc5263b6c3d94974
2020-10-15 19:41:51 -06:00
Jeremy Soller
cbcb467005 Enable UART2_TXD
Change-Id: I130f92018524f1746133ae37bdc6106226082cfa
2020-10-15 12:49:16 -06:00
Jeremy Soller
532ba5d55e Disable GPU, document GPIOs
Change-Id: Ieee0c7c5dd4a1e6da29bf3fca10ff957f89eaf95
2020-10-15 10:15:36 -06:00
Jeremy Soller
3c0bcaa4a1 Add displayport config
Change-Id: Id86108ad223695c994018cc2c7481b168264dc00
2020-10-15 08:49:30 -06:00
Jeremy Soller
ce3053ad87 Set continuous serirq
Change-Id: I2c099901a1e7b8b1402b5261c2a5c5a1685ec69f
2020-10-15 08:49:15 -06:00
Jeremy Soller
83f634f231 Add SSD1 clkreq
Change-Id: Id10a760c2c854583297c53c096f588a7c58b2248
2020-10-14 20:21:13 -06:00
Jeremy Soller
53be4d2666 Disable unused TBT devices
Change-Id: Id5831f95fd1ac3545063b6155f957bfe1943e340
2020-10-14 20:19:30 -06:00
Jeremy Soller
3c75673da2 Adjust GPIO init to look like prior boards
Change-Id: I36ff193a1d540f1723f45ebd7326a02b24c090d7
2020-10-14 20:14:03 -06:00
Jeremy Soller
d811be0127 Fix ROM stage
Change-Id: Iede1a99d7a40e236c8cf9a89f652e23adb2289ed
2020-10-14 20:13:50 -06:00
Jeremy Soller
43da0a5d6e Updates for new FSP
Change-Id: I7709d5f69d113cc5a4464f0e163403ffea1f2313
2020-10-14 15:58:51 -06:00
Jeremy Soller
a742e159e4 Fix DIMM addresses
Change-Id: I0314d0942a9f84e547d0899f723b33af3671a19c
2020-10-14 15:39:48 -06:00
Jeremy Soller
05708809fc Add some GPIO comments
Change-Id: I5137f61e40f081da7d97f5478414b77fc13e0bca
2020-10-13 13:17:35 -06:00
Jeremy Soller
bd9d221978 More compilation fixes
Change-Id: I9cfffd9792675eaaa036225f4229da127caa143f
2020-10-13 12:41:20 -06:00
Jeremy Soller
da78b7d723 Add missing include
Change-Id: I03d9c548353af9067223723a67ad3996cd2f92a1
2020-10-13 12:31:05 -06:00
Jeremy Soller
a90ec66c0a Fix compilation
Change-Id: Ie6e0bf1d4ad7829d0d76c716d241ac5c15e9c331
2020-10-13 12:29:53 -06:00
Jeremy Soller
9d7f328e41 galp5
Change-Id: I09342ee3a49331f8c1463f962ea8fc2d522ef448
2020-10-13 11:59:41 -06:00
Jeremy Soller
ce6ff1d16f Update .gitmodules
Change-Id: I8c6e912aedc4527b58009ec930e9769424af4ba4
2020-10-13 11:59:05 -06:00
Jeremy Soller
3a3b10b81d Merge remote-tracking branch 'upstream/master' into galp5
Change-Id: I10d9f61ff58ff2edd7d6e8430dd42be3b93cc994
2020-10-13 11:54:56 -06:00
Tim Crawford
8be09c0c61 mb/system76/oryp5: Use VBT from oryp6
Change-Id: I0c2c9fd90ad9b54ce7af3c67c747f7c7e299632a
Signed-off-by: Tim Crawford <tcrawford@system76.com>
2020-10-07 06:32:56 -07:00
Tim Crawford
a88ed3f87a mb/system76/oryp5: gpio: Convert raw pads to macros
Tested with BUILD_TIMELESS=1

Change-Id: I5e9c2eae1245690e1efccf1211dcaee831067436
Signed-off-by: Tim Crawford <tcrawford@system76.com>
2020-10-07 06:32:56 -07:00
Tim Crawford
32a9c2f786 mb/system76/oryp5: Add Oryx Pro 5
Change-Id: I0bbbddbb46c1a4a70146e7384ce1fbc9448c9269
Signed-off-by: Tim Crawford <tcrawford@system76.com>
2020-10-07 06:32:56 -07:00
Jeremy Soller
5a710b2387 Add PCI_DEVICE_ID_INTEL_CNP_H_SMBUS to soc/intel/common/block/smbus/smbus.c
Change-Id: I9fd425b199c17d11c49add504c645d9aa1aae122
2020-10-05 13:58:14 -07:00
Jeremy Soller
a4a356011b Sync addw1 with addw2
Change-Id: Ie4bf24567eb3da046e6b2102e61db697e7c0f932
2020-10-05 13:58:14 -07:00
Jeremy Soller
84bb9befff addw1
Change-Id: Iae42a750dce4d93d1dea75eef6c47f08160f3fe1
2020-10-05 13:58:14 -07:00
Jeremy Soller
caf3ce984c Save and restore ECOS during suspend/resume
Change-Id: I137ef6c574a372601bc51f6e815158767acd0e1b
2020-09-29 19:42:54 -06:00
Tim Crawford
35d6693a27 mb/system76: Enable battery charging thresholds
Change-Id: Icdd0d67c4d054fdbbb726db4827ca6164753c477
Signed-off-by: Tim Crawford <tcrawford@system76.com>
2020-09-22 16:08:13 -06:00
Tim Crawford
1f24cd4271 ec/system76/ec: Add battery charging thresholds
Change-Id: I3d656291c096f320d469274677e9fe6c74819d25
Signed-off-by: Tim Crawford <tcrawford@system76.com>
2020-09-22 16:08:13 -06:00
Jeremy Soller
2ee83f8df4 cml-u,whl-u: Disable above 4G allocation to fix running out of MTRRs
Change-Id: Icfee8750ad225e5b4f2fd1118230b7c0b8d0f850
2020-09-22 11:21:38 -06:00
Jeremy Soller
64004943b4 cml-u: Remove unused TBT ACPI code
Change-Id: Iade0316d76f2bd1fb037fcdb18e7d81f3b6fdbb0
2020-09-22 06:23:05 -06:00
Jeremy Soller
c97a435978 cml-u: Sync devicetree changes from lemp9
Change-Id: I69855d082708b185815343b2d92807f3028b2478
2020-09-22 06:23:01 -06:00
Jeremy Soller
e13bade2dd cml-u: Remove hacks no longer required for thunderbolt and camera toggle
Change-Id: I17e293f524253a14d7a07842f7abf8e75ad472a8
2020-09-22 06:22:55 -06:00
Tim Crawford
1853d8737b mb/system76: Convert to devicetree subsystemid
Upstream has converted all uses of SUBSYSTEM_{VENDOR,DEVICE}_ID in
Kconfig to subsystemid in devicetree. It will soon produce a lint error
from Jenkins [1].

[1]: https://review.coreboot.org/c/coreboot/+/45513/

Change-Id: I66d5d5f23d3c8ab6ed79dad432a0773841147eea
Signed-off-by: Tim Crawford <tcrawford@system76.com>
2020-09-21 08:12:25 -06:00
Tim Crawford
7ba5665046 mb/system76/thelio-b1: Fix devicetree formatting
Change-Id: I35b238aaea49b6213c1b4094d0ac153ab9a76c8c
Signed-off-by: Tim Crawford <tcrawford@system76.com>
2020-09-21 08:12:25 -06:00
Tim Crawford
1ff8f316f4 ec/system76/ec: Sync changes from upstream
Change-Id: I277324a731548fd9d30e790922834172ac86c2a3
2020-09-18 11:52:27 -06:00
Tim Crawford
3dd5bc6550 mb/system76: Remove FSP_M_XIP
FSP_M_XIP is already selected by the soc.

Ref: 48833363da ("mb/system76/lemp9: drop FSP_M_XIP")
Change-Id: I4bb33208119e27d036e8a0bcb63a99dec9cf3bce
2020-09-17 09:56:28 -06:00
Jeremy Soller
1a8107d238 Add OLED screen toggle 2020-09-03 12:13:31 -06:00
Jeremy Soller
b39c286f31 Add ACPI thermal interface to S76D
Change-Id: I1ada73d5a255074a2f628e18cc605e8dc6109c0e
2020-09-03 12:13:31 -06:00
Jeremy Soller
f338b238da gaze15: fix touchpad interrupt
Change-Id: I535fa847d791aa2d7c805ce616163d7582b689b0
2020-09-02 08:40:50 -06:00
Jeremy Soller
fa5896209f ec/system76/ec: Clean up and document ACPI EC registers
Change-Id: I8d60b1826fd5402978fb7092fe807da0c4dd5179
2020-09-02 08:40:50 -06:00
Jeremy Soller
fbf0bd5b7e soc/intel/cannonlake: Allow setting of PCIe subsystem IDs after FSP SiliconInit
Change-Id: Ie5c7d497e4a64a2f5e2960a2cdca8e5780dc07ea
2020-08-24 14:49:06 -06:00
Patrick Rudolph
264a0fee22 soc/intel/cannonlake/acpi/serialio.asl: Don't advertise unavailable devices
On PCH-H the I2C4 0:19.0 device isn't usable and thus 0:19.1 and
0:19.2 can't be detected using standard PCI probing.

Remove I2C4, I2C5 and UART2 from generic ASL code on PCH-H platforms
that advertise its PCI conformance by the _ADR attribute.

Change-Id: I89f9ab7d4afb2e7d1b1e24d072adf99e0da6fecf
Signed-off-by: Patrick Rudolph <patrick.rudolph@9elements.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/44198
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Angel Pons <th3fanbus@gmail.com>
2020-08-24 10:22:08 -06:00
Patrick Rudolph
fbd57b1dac soc/intel/cannonlake: Fix DMAR when no iGPU is present
Don't emit RMRR for the iGPU if it's not present. This is done on
other platforms as well.

Fixes an DMAR error seen in dmesg on platforms without iGPU.

Change-Id: Iafe86e6938a120b707aaae935cb8168f790bb22f
Signed-off-by: Patrick Rudolph <patrick.rudolph@9elements.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/43994
Reviewed-by: Angel Pons <th3fanbus@gmail.com>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
2020-08-24 10:22:05 -06:00
Jeremy Soller
f6268a00d4 soc/intel/cannonlake: Add PCIe RP 17-24 ACPI information
Change-Id: I119b9cd6dbaa8f2d17d6132dbd9d44a778ff8111
2020-08-20 14:06:32 -06:00
Gaggery Tsai
4f1c9f486a soc/intel/cannonlake: Add Iccmax and loadlines for CML-S
Following up 3ccae2b7, this patch adds Iccmax and AC/DC
loadlines and iPL2 for CML-S CPUs. The information is from
CML EDS volume 1, doc #606599 and pdg #610244.

Change-Id: Id2797a979a8b6a52a34baae66f95c7136ed1dc72
Signed-off-by: Gaggery Tsai <gaggery.tsai@intel.com>
2020-08-19 14:20:55 -06:00
Jeremy Soller
fa580ac218 bonw14: set TBT reset GPIOs to RSMRST reset group 2020-08-19 13:01:14 -06:00
Jeremy Soller
0cdfae9d40 gaze15: fix display GPIOs
Change-Id: I3273f8bf668d16c4ede81695e2676db77047df42
2020-08-19 11:49:41 -06:00
Jeremy Soller
eb1110c8d0 bonw14: fix TBT 2020-08-19 11:38:23 -06:00
Jeremy Soller
d928cd856b addw2: add annotations for LAN and TBT reset lines 2020-08-19 11:38:23 -06:00
Jeremy Soller
729a256348 soc/intel/cannonlake: Allow PCIe root port #1 to use clockreq 2020-08-19 11:38:22 -06:00
Jeremy Soller
a9d462e94f Add Cometlake-H/S Q0 (10+2) CPU 2020-08-19 11:38:22 -06:00
Tim Crawford
376945c45f mb/system76/gaze15: Add NB_ENAVDD to early_gpio_table
Fixes FSP not finding a valid framebuffer on reboots, which resulted in
a black screen when running the edk2 payload.

Change-Id: I946adb0657c07cf6c5a9aeb369e4fdfd8826abb2
2020-08-14 12:15:33 -06:00
Tim Crawford
25e164c5e2 mb/system76/gaze15: Annotate GPIOs
This was done using the schematics for the 15" GTX 1660 Ti variant.

Change-Id: I2f7628d68bd5491438b6d71556b5cb73873b9b89
2020-08-14 11:34:44 -06:00
Jeremy Soller
df0ecca51d select TPM_RDRESP_NEED_DELAY for system76 laptops
Change-Id: I7909b05e9203ce9ad07c8e87a847bc46cf281b34
2020-08-13 13:12:15 -06:00
Jeremy Soller
e4bfd5b28a Merge pull request #23 from system76/bonw14
bonw14
2020-08-13 12:20:24 -06:00
Jeremy Soller
fe9ea17423 bonw14
Change-Id: I533acb5e835de97c1ac52a201bca95671f53d932
2020-08-13 12:18:59 -06:00
Tim Crawford
efe04c82e0 mb/system76: Fix left USB3 port on gaze14/gaze15
The USB table in the manuals incorrectly list the USB3 port as 5.
The labeled pins show it correctly as port 2.

Change-Id: I9a6a96af847ca66ad667738d83cfca7c3166956a
2020-08-13 08:01:00 -06:00
Jeremy Soller
011439cb91 Sync addw2 devicetree with oryp6
Change-Id: Id32845c96479ce124a6bb55c2434e78e6f96b519
2020-08-06 08:24:46 -06:00
Jeremy Soller
599ca05c8c Update devicetree.cb 2020-08-04 10:42:15 -06:00
Jeremy Soller
d563135d4b Sync changes from upstream PRs
Change-Id: If65cd6262ab625047edb8d242d00f520e4ff8d14
2020-07-21 09:09:38 -06:00
Jeremy Soller
bccef94545 Quote MAINBOARD_DIR
Change-Id: Ida3ca099fd8ab6d7b1112e5f203b791e6c46dd0d
2020-07-20 12:09:30 -06:00
Jeremy Soller
dca083da74 Absolute path for qc_blobs in gitmodules
Change-Id: I5bab7ace1503f54fafff9073b35f9b3e0952c0b7
2020-07-20 11:55:13 -06:00
Jeremy Soller
94612338ef Merge remote-tracking branch 'upstream/master' into system76
Change-Id: Idceb013b3495324b8d84a388ea5ee5b5ea4b69db
2020-07-20 11:54:36 -06:00
Jeremy Soller
9e729e44a8 Refactor DGPU support code into drivers/system76/dgpu
Change-Id: Id29d6ade82b7212a3a68f6f3c27769e17d3fdcdc
2020-07-20 11:52:44 -06:00
Jeremy Soller
65600cdec6 Move most mainboard/system76 ACPI code to ec/system76 (#21)
* Move most mainboard/system76 ACPI code to ec/system76

* Move drivers/system76_ec to ec/system76

* Include system76_ec.c when CONSOLE_SYSTEM76 is set

* Fix inclusion of system76 EC code

* Default CONSOLE_SYSTEM76_EC to n

* addw2: fix SSD2 clkreq
2020-07-18 13:49:05 -06:00
Jeremy Soller
8321d760b0 Add addw2 smart amp init
Change-Id: Icbd640dd9584f0c58833dffc9a46a6afb4787abc
2020-07-14 11:29:11 -06:00
Jeremy Soller
cff2635a22 Move smart-amp init to mainboard
Change-Id: I8f60e98d7d8f70c7a7374baf978461c963694cb8
2020-07-14 09:45:51 -06:00
Jeremy Soller
f3ba5937e7 Change system76_ec timeout to 10 ms
Change-Id: Ic3d01892df83c09d8323433585e1d8fe507f8c3a
2020-07-02 09:39:46 -06:00
Jeremy Soller
5a9fddc3de gaze15 does not support SaOcSupport 2020-07-01 15:23:52 -06:00
Jeremy Soller
46dacbd7c3 Sync addw2 and gaze15 with oryp6 2020-07-01 12:44:59 -06:00
Jeremy Soller
9ba7399ee9 oryp6: allow memory clocks higher than 2933 MHz
Change-Id: I6ea0e402f5ec0c89fa97cdd50615209551ad839f
2020-06-30 15:28:06 -06:00
Jeremy Soller
4459b6355f oryp6: set reset config of TBT GPIO pins to RSMRST, and configure them early 2020-06-29 14:15:38 -06:00
Jeremy Soller
04c88e9113 oryp6: Set M.2 and LAN power and reset lines to reset with RSMRST to avoid glitching during reboots 2020-06-29 10:12:23 -06:00
Jeremy Soller
87a74eb767 oryp6: set subsystem IDs
Change-Id: I659ae6da3c5ff61c22a10ed112b82984cb3168d7
2020-06-26 14:25:57 -07:00
Jeremy Soller
264f4cd55b oryp6: Enable DMIC microphone on ALC1220 2020-06-26 10:35:03 -07:00
Jeremy Soller
8e7ffe4952 Refactor DGPU implementation, fix hybrid suspend
Change-Id: Ia7873a016e003532346170a3d27469bf085a47c4
2020-06-26 10:35:03 -07:00
Jeremy Soller
3b8e9fa539 oryp6: Disable PCH DMIC, remove verbs for other codecs
Change-Id: Ib22dca12568ec768a0b10883c38dfb0fcf4e4499
2020-06-26 10:35:03 -07:00
Jeremy Soller
b294e590d9 oryp6: Add GPIO_LANRTD3 to early_gpio_table 2020-06-25 11:02:57 -06:00
Jeremy Soller
6e2c6eb6b5 oryp6: Add GPIO descriptions
Change-Id: I668d72e655ceb12d7f15ffff51b86780628b4bbf
2020-06-25 10:27:23 -06:00
Jeremy Soller
f1e696b4a5 Add smart amp init
Change-Id: I55749428284387629ba760fc713d0bfb62e8f8ab
2020-06-23 14:10:53 -06:00
Jeremy Soller
11aca6bb7c Add stub for tas5825m driver and add it to oryp6 model 2020-06-19 09:39:18 -06:00
Jeremy Soller
90a93a8a32 Update cml-h pl2 to 90W
Change-Id: Ibc1c142c4191334308eb02c5dee65d38c51b34e8
2020-06-17 11:52:14 -06:00
Jeremy Soller
e0de23478e Sync addw2 and gaze15 with oryp6
Change-Id: Ifb117d95d98c42a8ed0004e66b822df947e610ba
2020-06-17 11:29:11 -06:00
Jeremy Soller
b0a89bfc26 Disable GPU power if GC6 is not enterred 2020-06-16 09:21:47 -06:00
Jeremy Soller
c9ec63b78b oryp6 GC6 support
Change-Id: Ic2be6aecf1c4ab1fbba6b20d1d2a11e4b69df07f
2020-06-11 22:04:16 -06:00
Jeremy Soller
0484c85cb3 Disable s0ix
Change-Id: I8c3249a6c5f652a0a032835e55a2045b95758aa5
2020-06-11 12:55:57 -06:00
Jeremy Soller
8a580cb7a7 Add ACPI backlight code
Change-Id: I325fb544e2f2fa06606fd02138b95b236782fdbf
2020-06-11 12:55:57 -06:00
Jeremy Soller
bc3e31005d Use DISABLE HECI message instead of HMRFPO
Change-Id: If1c3dfed4aff7f8299951cfe429677c9ea92b086
2020-06-11 12:55:57 -06:00
Jeremy Soller
1ca3e44c90 Add gaze15 and oryp6
Change-Id: Iff7c619b388f95ef60b32a77858c790d2e0f6126
2020-06-11 12:55:57 -06:00
Jeremy Soller
42cf287a62 Disable i2c-hid on galp3-c and galp4 2020-06-04 11:42:37 -06:00
Jeremy Soller
05577fc186 Revert "whl-u: remove invalid i2c_hid interrupt"
This reverts commit 09b8f28bb0.
2020-06-04 11:27:04 -06:00
Jeremy Soller
09b8f28bb0 whl-u: remove invalid i2c_hid interrupt
Change-Id: Id62800031ba9c2e990bfd25de708ab249c9f2e96
2020-06-04 11:13:57 -06:00
Jeremy Soller
cde1985ec3 Add addw2
Change-Id: I773fc5561857591da12c31f0f7be9f74cc98a239
2020-06-04 10:11:18 -06:00
Jeremy Soller
5b18ffb566 Update cannonlake FSP
Change-Id: I7be51195779a1cca77186e8dab54b168fc234fb0
2020-06-04 10:09:13 -06:00
Jeremy Soller
24ba49558e system76_ec: Improve performance
Change-Id: I4c35dd70067d78c3eded549de1a37ded6db3d364
2020-06-04 10:05:39 -06:00
Jeremy Soller
d06f9c7699 kbl-u: Fix compilation 2020-06-04 09:13:54 -06:00
Jeremy Soller
6bd5d1934c kbl-u: remove MAINBOARD_USES_FSP2_0 2020-06-04 08:59:27 -06:00
Jeremy Soller
37dc6de31d kbl-u: Sync some changes from whl-u 2020-06-04 08:56:09 -06:00
Jeremy Soller
5c6c34c32b whl-u: Sync with cml-u 2020-06-04 08:41:06 -06:00
Jeremy Soller
64faf29f6b cml-u: enable s0ix and c6dram 2020-06-04 08:40:48 -06:00
Jeremy Soller
27753e2b4f lemp9: enable s0ix and c6dram 2020-06-04 08:40:35 -06:00
Jeremy Soller
7f40e1b1f7 lemp9: Remove backlight code 2020-06-04 08:40:21 -06:00
Jeremy Soller
15eec6ad44 cml-u: sync with lemp9, enable i2c-hid 2020-06-03 15:39:47 -06:00
Jeremy Soller
ba59168f06 cml-u: update license headers 2020-06-03 15:39:19 -06:00
Jeremy Soller
a14d7ac871 Fix submodule URLs 2020-06-03 14:19:46 -06:00
Jeremy Soller
0625765de5 Merge remote-tracking branch 'origin/master' into system76
Change-Id: I4593b91276d447f8ac00daca7388fdfb22bca7f2
2020-06-01 14:11:34 -06:00
Jeremy Soller
b7dd4abee4 Sync cannonlake graphics with skylake 2020-05-15 13:03:55 -06:00
Jeremy Soller
ec5cb88ea1 Merge tag '4.12' into system76
coreboot version 4.12
2020-05-15 13:01:54 -06:00
Jeremy Soller
37384c6b67 Improve support for Intel HID event filter 2020-05-15 11:43:36 -06:00
Tim Crawford
0348ce2085 mainboard/system76: Fix compiling other boards on 4.12
Signed-off-by: Tim Crawford <tcrawford@system76.com>
2020-05-13 12:15:45 -06:00
Jeremy Soller
45535e4a05 lemp9: add custom backlight levels 2020-05-09 13:26:35 -06:00
Jeremy Soller
e294752055 Work around double definition of GFX0 2020-05-09 13:11:52 -06:00
Jeremy Soller
88117c16f0 Update serirq mode in lemp9 mainboard 2020-05-09 13:11:28 -06:00
Jeremy Soller
d164dd2f24 Fix merge issues in src/soc/intel 2020-05-09 13:09:05 -06:00
Jeremy Soller
f208e51e57 Merge remote-tracking branch 'upstream/master' into system76 2020-05-09 12:56:34 -06:00
Jeremy Soller
0f11811ab7 mainboard/system76/lemp9: add GMA backlight control 2020-05-09 12:37:26 -06:00
Jeremy Soller
fa200b0587 soc/intel/cannonlake: add GMA backlight control 2020-05-09 12:36:59 -06:00
Jeremy Soller
419d23908a Enable i2c-hid interface for touchpad 2020-05-09 09:37:08 -06:00
Jeremy Soller
84ff4bbc2b Fix clkreq comments 2020-04-08 16:19:44 -06:00
Jeremy Soller
888064d65d Enable system agent thermal device 2020-04-06 08:08:52 -06:00
Jeremy Soller
f33e07f0bc lemp9: increase power limits to 20W/30W 2020-04-05 13:14:28 -06:00
Jeremy Soller
9364864ad1 lemp9: remove sleeps from ACPI tables 2020-04-05 13:13:50 -06:00
Jeremy Soller
2edffffa2d System76 EC console support
Change-Id: I04c2aeb19d780a7c6638b502192fa9f569e32e94
2020-03-15 12:23:51 -06:00
Jeremy Soller
8d7937abb9 Move EC memory map to avoid conflicts 2020-02-25 14:20:19 -07:00
Jeremy Soller
4bf67af212 Add LPC decode of new memory map regions to cml-u and whl-u 2020-02-18 10:22:15 -07:00
Jeremy Soller
89f919072d TPM_PIRQ is not required 2020-02-17 20:21:01 -07:00
Jeremy Soller
1bd5d2e07d Do not set TPM IRQ in GPIO settings
Change-Id: Iba2aea1908c23640546801cc5ef54dbd4e392259
2020-02-17 20:08:26 -07:00
Jeremy Soller
afb3a7bd22 TPM support
Change-Id: I1d106ac7da4d7229706cb8ad5a98c58b32d86a40
2020-02-17 19:27:22 -07:00
Jeremy Soller
d48dd84ae8 Add LPC decode of new memory map regions 2020-02-17 09:24:23 -07:00
Jeremy Soller
92780afb68 Update pin configuration for headset microphone 2020-02-13 14:15:25 -07:00
Jeremy Soller
adc0d3b4e9 Merge remote-tracking branch 'upstream/master' into system76 2020-02-13 14:03:34 -07:00
Jeremy Soller
3f76a2ec4c Merge remote-tracking branch 'upstream/master' into system76 2020-01-27 12:28:25 -07:00
Jeremy Soller
5cb80763d7 Fix syntax error from last commit 2020-01-22 10:35:16 -07:00
Jeremy Soller
1c6cbf3a6a Update cml-u and whl-u with lemp9 changes 2020-01-22 10:34:04 -07:00
Jeremy Soller
887093b627 Allow FSP to use coreboot stack 2020-01-22 10:19:01 -07:00
Jeremy Soller
6fbb57fb22 Add serirq setting to lemp9 2020-01-22 10:18:47 -07:00
Jeremy Soller
f0bd902a2a Merge remote-tracking branch 'upstream/master' into system76 2020-01-22 10:11:28 -07:00
Jeremy Soller
3005ceecf2 mainboard/system76: Add System76 Lemur Pro (lemp9)
The System76 Lemur Pro (lemp9) is an upcoming laptop computer. Support
in coreboot is developed by System76 and provided as the default
firmware option. Testing is done on a pre-production model expected to
be identical from a firmware perspective to the production model.

Working:
- Payload
    - Tianocore
- CPU
    - Intel i7-10510U
    - Intel i5-10210U
- EC
    - ITE IT5570E running https://github.com/system76/ec
    - Backlit Keyboard, with standard PS/2 keycodes and SCI hotkeys
    - Battery
    - Charger, using AC adapter or USB-C PD
    - Suspend/resume
    - Touchpad
- GPU
    - Intel UHD Graphics 620
    - GOP driver is recommended, VBT is provided
    - eDP 14-inch 1920x1080 LCD
    - HDMI video
    - USB-C DisplayPort video
- Memory
    - 8-GB DDR4 Samsung K4AAG165WA-BCTD (Channel 0)
    - 8-GB/16-GB/32-GB DDR4 SO-DIMM (Channel 1)
- Networking
    - M.2 PCIe/CNVi WiFi/Bluetooth
- Sound
    - Realtek ALC293D
    - Internal speaker
    - Internal microphone
    - Combined headphone/microphone 3.5-mm jack
    - HDMI audio
    - USB-C DisplayPort audio
- Storage
    - M.2 PCIe/SATA SSD-1
    - M.2 PCIe/SATA SSD-2
    - RTS5227S MicroSD card reader
- USB
    - 1280x720 CCD camera
    - USB 3.1 Gen 2 Type-C (left)
    - USB 3.1 Gen 2 Type-A (left)
    - USB 3.1 Gen 1 Type-A (right)

Not working:
- TPM2 - SPI bus 0, chip select 2 is used. Chip selects other than 0
  are not currently supported by the intel fast_spi driver.

Signed-off-by: Jeremy Soller <jeremy@system76.com>
Change-Id: Ib0a32bbc6f89a662085ab4a254676bc1fad7dc60
2020-01-22 10:09:25 -07:00
Jeremy Soller
8aa05ff5de Remove lemp9 to prepare for merge of upstream lemp9 PR 2020-01-22 10:09:13 -07:00
Jeremy Soller
3b4db8f4a7 Merge branch 'upstream-35946' into system76 2020-01-13 11:05:21 -07:00
Jeremy Soller
d4440fa641 pciexp: Add support for allocating PCI express hotplug resources
This change adds support for allocating resources for PCI express hotplug
bridges when PCIEXP_HOTPLUG is selected. By default, this will add 32 PCI
subordinate numbers (buses), 256 MiB of prefetchable memory, 8 MiB of
non-prefetchable memory, and 8 KiB of I/O space to any device with the
PCI_EXP_SLTCAP_HPC bit set in the PCI_EXP_SLTCAP register, which
indicates hot-plugging capability. The resource allocation is configurable,
please see the PCIEXP_HOTPLUG_* variables in src/device/Kconfig.

In order to support the allocation of hotplugged PCI buses, a new field
is added to struct device called hotplug_buses. This is defaulted to
zero, but when set, it adds the hotplug_buses value to the subordinate
value of the PCI bridge. This allows devices to be plugged in and
unplugged after boot.

This code was tested on the System76 Darter Pro (darp6). Before this
change, there are not enough resources allocated to the Thunderbolt
PCI bridge to allow plugging in new devices after boot. This can be
worked around in the Linux kernel by passing a boot param such as:
pci=assign-busses,hpbussize=32,realloc

This change makes it possible to use Thunderbolt hotplugging without
kernel parameters, and attempts to match closely what our motherboard
manufacturer's firmware does by default.

Signed-off-by: Jeremy Soller <jeremy@system76.com>
Change-Id: I500191626584b83e6a8ae38417fd324b5e803afc
2020-01-13 11:03:00 -07:00
Jeremy Soller
28dab93390 Enable deep s5 for lemp9 2019-12-21 15:56:32 -07:00
Jeremy Soller
4f613c1b1f Fix inclusion of SPD information 2019-12-17 16:09:29 -07:00
Jeremy Soller
9c786fa310 Add lemp9 2019-12-17 15:48:54 -07:00
Jeremy Soller
8a3dadab7c Revert "Set USB power plane to off during restart"
This reverts commit ca35998d29.
2019-11-20 08:43:58 -07:00
Jeremy Soller
f81e2ad385 Update kbl-u 2019-11-19 08:57:13 -07:00
Jeremy Soller
ca35998d29 Set USB power plane to off during restart
Change-Id: I9d722b7b74dac1ccb7f0a80559cbdf763f4c6c1f
2019-11-04 18:45:17 -07:00
Jeremy Soller
d49c64e17f Revert "Full reset by default"
This reverts commit 5bf53bc73b.
2019-11-04 14:26:05 -07:00
Jeremy Soller
5bf53bc73b Full reset by default 2019-11-04 14:14:57 -07:00
Jeremy Soller
560238e052 Fix sleepstates ACPI include 2019-11-04 09:31:21 -07:00
Jeremy Soller
ecd04d98b2 Fix globalnvs ACPI include 2019-11-04 09:27:26 -07:00
Jeremy Soller
dae38b24e7 Remove duplicate code 2019-11-04 09:03:32 -07:00
Jeremy Soller
c8600c36d7 Merge remote-tracking branch 'upstream/master' into system75 2019-11-04 09:01:17 -07:00
Jeremy Soller
37c69a0123 Update whl-u to match cml-u 2019-11-01 14:54:22 -06:00
Jeremy Soller
27b4ae24f4 Only RP01 is a hotplug port 2019-10-30 15:48:01 -06:00
Jeremy Soller
852283919e Enable UART 2019-10-30 12:08:01 -06:00
Jeremy Soller
36f788c558 Disable HECI 2019-10-27 19:33:10 -06:00
Jeremy Soller
ad1ddc0343 Set subsystem IDs 2019-10-24 09:57:48 -06:00
Jeremy Soller
76e2ab61bb Disable thunderbolt force power and do not enable thunderbolt rtd3 power 2019-10-22 21:08:31 -06:00
Jeremy Soller
46cc5d6b53 Set prefetch and non-prefetch hotplug memory separately 2019-10-11 10:15:34 -06:00
Jeremy Soller
0a0b9c599d Add PCIe hotplug bridge support
Change-Id: I7b7ed634685d85a6ca30130c16b39007bd327167
2019-10-10 15:36:40 -06:00
Jeremy Soller
610b680154 Remove thunderbolt driver
Change-Id: I2cfda79ab838e76170219e9081daf8218b4c09fc
2019-10-10 15:36:15 -06:00
Jeremy Soller
486c132f1e Add comments 2019-10-09 21:36:31 -06:00
Jeremy Soller
9ca336f837 Remove debugging 2019-10-09 21:33:58 -06:00
Jeremy Soller
e2e360e3f8 Add hotplug_buses to device struct to allow removal of hack 2019-10-09 21:28:04 -06:00
Jeremy Soller
9f16fa4e74 Hack to add 32 to subordinate 2019-10-09 16:44:38 -06:00
Jeremy Soller
f0e552d664 Enable allocation of resources to device 1 on thunderbolt bus 2019-10-09 16:28:18 -06:00
Jeremy Soller
a22c00bc39 Fix cml-u board info 2019-10-09 16:19:57 -06:00
Jeremy Soller
14fa57aa54 Enable PCIE debug info and disable fake devices under thunderbolt controller 2019-10-09 15:11:14 -06:00
Jeremy Soller
57d53e9635 WIP Thunderbolt support 2019-10-09 14:24:00 -06:00
Jeremy Soller
954d813a61 soc/intel/cannonlake: Add debugging of a number of FSPM parameters
This implements soc_display_fspm_upd_params for soc/intel/cannonlake

Some parameters are available only on Coffee Lake FSP or Comet Lake FSP

Tested on System76 galp3-c (Coffee Lake FSP) and System76 galp4 (Comet 
Lake FSP)
2019-10-04 11:40:11 -06:00
Jeremy Soller
d4e111ff97 Revert "soc/intel/cannonlake: Allow coreboot to reserve stack for fsp"
This reverts commit 349b6a1152.
2019-10-04 11:31:28 -06:00
Jeremy Soller
86ddef58dc system76/whl-u: Do not use FSP from repository 2019-10-04 10:28:10 -06:00
Jeremy Soller
0fd77e191b Merge remote-tracking branch 'upstream/master' into system76 2019-10-03 16:21:13 -06:00
Jeremy Soller
015f42bbe4 Attempt to disable ME 2019-10-03 13:40:45 -06:00
Jeremy Soller
7a944bda90 Remove old devicetree option 2019-10-02 11:10:46 -06:00
Jeremy Soller
3225862d82 Update ACPI in system76 cfl-h mainboard 2019-10-02 11:08:52 -06:00
Jeremy Soller
fbdb388c39 Revert "soc/intel/cannonlake: Remove DMA support for PTT"
This reverts commit d5018a8f78.
2019-10-02 10:15:22 -06:00
Jeremy Soller
3e2083ba43 Merge remote-tracking branch 'upstream/master' into system76 2019-10-02 08:05:15 -06:00
Jeremy Soller
00b6224b65 Update smmstore patches 2019-09-26 15:01:19 -06:00
Jeremy Soller
57c382c424 Merge branch 'master' into system76 2019-09-26 14:57:23 -06:00
Jeremy Soller
bc09219912 Fix camera toggle on cml-u 2019-09-23 13:58:48 -06:00
Jeremy Soller
9d22c72d15 Use i2ec to enable camera toggle 2019-09-23 12:58:12 -06:00
Jeremy Soller
d99ff72fa9 Fix SMMSTORE compilation in QEMU target 2019-09-20 14:07:50 -06:00
Jeremy Soller
7214976b60 Fix use of PCI ID 2019-09-19 16:25:10 -06:00
Jeremy Soller
ea8658b1d1 Fix mainboard_dir 2019-09-19 16:23:20 -06:00
Jeremy Soller
ad626ce7de Disable FSP_USE_REPO 2019-09-19 16:20:01 -06:00
Jeremy Soller
49b4fe8478 Fix darp6 name 2019-09-19 16:04:18 -06:00
Jeremy Soller
26f0060f60 Add Comet Lake U models 2019-09-19 15:52:02 -06:00
Jeremy Soller
b09afbb9fa Fix failure to boot grub by enabling the 8254 timer 2019-08-30 09:59:50 -06:00
Jeremy Soller
aaba647096 Port previous commit to kbl-u 2019-08-22 10:54:02 -06:00
Jeremy Soller
5e46698ee9 Merge branch 'system76_cleanup' of https://github.com/system76/coreboot into system76_cleanup 2019-08-22 10:50:56 -06:00
Jeremy Soller
a8cb89b101 Improvements for color keyboard when kernel driver not loaded 2019-08-22 10:50:45 -06:00
Jeremy Soller
fcd2891d6f Implement EC init for kbl-u 2019-08-21 14:54:31 -06:00
Jeremy Soller
d472cda80a Move EC initialization from kernel driver to ACPI and motherboard init 2019-08-21 12:36:20 -06:00
Jeremy Soller
7c8a9f60f4 Enable PCH SPI 2019-08-09 11:44:19 -06:00
Jeremy Soller
fc1062809a Fix smmstore compilation 2019-08-09 10:00:08 -06:00
Jeremy Soller
8a734e7045 Merge remote-tracking branch 'upstream/master' into system76_cleanup 2019-08-09 09:52:58 -06:00
Jeremy Soller
5a4a99cf43 Fix compilation of bootblock 2019-08-09 09:14:33 -06:00
Jeremy Soller
adc9851e1f Add bootblock to set early GPIOs, set TBT GPIOs to match proprietary BIOS 2019-08-09 09:02:12 -06:00
Jeremy Soller
9784a2c677 Merge remote-tracking branch 'upstream/master' into system76_cleanup 2019-07-15 14:28:03 -06:00
Jeremy Soller
f7b117bba7 Remove old clock gate patch 2019-07-15 14:26:18 -06:00
Jeremy Soller
95778bf7ea Merge branch 'master' into system76_cleanup
Change-Id: Ida07401fa877243cc64fae9ac96a65b5a58d01ab
2019-07-01 08:30:40 -06:00
Jeremy Soller
744c9acbe1 Organize GPPs by name 2019-06-26 13:47:53 -06:00
Jeremy Soller
99406e6b09 Fix PMC and GPIO mappings (again) 2019-06-26 13:44:10 -06:00
Jeremy Soller
f5519f0df3 Truly fix gpio misccfg values 2019-06-26 10:36:29 -06:00
Jeremy Soller
fbfba7cb84 Revert "Fix gpio miscfg register values"
This reverts commit d1e6a842c7.
2019-06-26 10:26:19 -06:00
Jeremy Soller
82dd1fc5a1 Add device specific data for thunderbolt 2019-06-26 10:03:18 -06:00
Jeremy Soller
97317433ed Force thunderbolt power 2019-06-26 10:03:05 -06:00
Jeremy Soller
87e186e7a8 Update gpe config 2019-06-20 15:58:29 -06:00
Jeremy Soller
d1e6a842c7 Fix gpio miscfg register values 2019-06-20 15:58:20 -06:00
Jeremy Soller
1d39c09349 Add more EC RAM items 2019-06-20 14:51:32 -06:00
Jeremy Soller
fcba28382a Fix order of outb 2019-06-20 14:51:16 -06:00
Jeremy Soller
2e9bae8216 Fix PMC GPP mappings 2019-06-20 14:51:05 -06:00
Jeremy Soller
0bcf238f2c Update gpio's after fixing coreboot-collector 2019-06-20 13:57:30 -06:00
Jeremy Soller
80c4017d85 Merge remote-tracking branch 'upstream/master' into system76_cleanup 2019-06-13 14:36:33 -06:00
Jeremy Soller
8d5df05d7d Add code to attempt to enable GPU, when configured 2019-06-13 14:29:53 -06:00
Jeremy Soller
39223b859e Update whl-u memory config 2019-06-12 10:52:56 -06:00
Jeremy Soller
2106c470f3 Add gaze14 1660ti variant files 2019-06-06 14:49:49 -06:00
Jeremy Soller
ee528da151 Fix smmstore driver compilation 2019-06-05 14:19:48 -06:00
Jeremy Soller
6adc503a3b Update cfl-h to new memory configuration struct 2019-06-05 14:19:34 -06:00
Jeremy Soller
1eb4a65e0a Merge remote-tracking branch 'upstream/master' into system76_cleanup 2019-06-05 14:09:13 -06:00
Jeremy Soller
aeb79392cc Remove pei_data from kbl-u 2019-06-04 08:27:02 -06:00
Jeremy Soller
53c0e6c494 Fix slow serial 2019-05-13 14:21:47 -06:00
Jeremy Soller
1c813a7e4b Initialize early GPIOs 2019-05-13 14:03:59 -06:00
Jeremy Soller
6ac5c4bf8a Disable C22 and C23 2019-05-13 14:01:37 -06:00
Jeremy Soller
e90c6c8e4c No longer need NO_UART_ON_SUPERIO 2019-05-13 14:00:36 -06:00
Jeremy Soller
d249ac929f Enable UART, unlock GPIO, set clksrcusage for GPU 2019-05-13 13:04:52 -06:00
Jeremy Soller
09f85ecf66 Enable SATA ports 2019-05-13 10:49:17 -06:00
Jeremy Soller
635c88090e Enable more PCI devices 2019-05-13 10:49:10 -06:00
Jeremy Soller
34b4341eac Define NO_UART_ON_SUPERIO 2019-05-13 09:04:59 -06:00
Jeremy Soller
12bb32890f Merge remote-tracking branch 'upstream/master' into system76_cleanup 2019-05-10 17:35:18 -06:00
Jeremy Soller
6512180461 Update ACPI GPE config 2019-05-10 11:07:09 -06:00
Jeremy Soller
764d87a6d4 Update LPC and GPE config 2019-05-10 11:03:24 -06:00
Jeremy Soller
747364169f Update GPIO settings 2019-05-10 10:19:02 -06:00
Jeremy Soller
6bbc98a1ef Update CPU count and add GPU clkreq 2019-05-10 10:18:52 -06:00
Jeremy Soller
5580493101 Add HDA settings and disable GPU by default (temporary) 2019-05-10 08:42:54 -06:00
Jeremy Soller
724c1b5cf8 Use color keyboard ACPI tables on gaze14 2019-05-09 21:35:32 -06:00
Jeremy Soller
852d63f618 Fix gpio syntax 2019-05-09 21:32:44 -06:00
Jeremy Soller
e90740693f WIP: add cfl-h models, starting with gaze14 2019-05-09 20:54:13 -06:00
Jeremy Soller
b99d0bfa32 Update memory settings for thelio-b1 2019-05-06 11:47:23 -06:00
Jeremy Soller
51802ead2d Fix thelio-b1 devicetree 2019-05-02 20:44:32 -06:00
Jeremy Soller
b0f598558e whl-u: Remove VmxEnable and DebugConsent from devicetree.cb 2019-05-02 15:41:18 -06:00
Jeremy Soller
28148e9442 Add system76 mainboard module 2019-05-02 15:32:17 -06:00
Jeremy Soller
8a67395e4e Update .gitmodules 2019-05-02 15:32:06 -06:00
Jeremy Soller
e1e1025c6b Revert "soc/intel/cannonlake: Remove DMA support for PTT"
This reverts commit d5018a8f78.
2019-05-02 15:31:16 -06:00
Jeremy Soller
67a5b962d0 soc/intel/cannonlake: Set correct serirq mode based on SERIRQ_CONTINUOUS_MODE
Tested on system76 galp3-c

Signed-off-by: Jeremy Soller <jeremy@system76.com>
Change-Id: I9ad4f5a6c7391fc6e813ec1306c708f449a69f59
2019-05-02 15:29:09 -06:00
Jeremy Soller
00b535505d soc/intel/cannonlake: Set FSP-S Enable8254ClockGating using clock_gate_8254 devicetree parameter
Tested on system76 galp3-c

Signed-off-by: Jeremy Soller <jeremy@system76.com>
Change-Id: Id346173ac7ae5246de0b38b9dd23be7b72e70f1e
2019-05-02 15:27:04 -06:00
Arthur Heymans
946ecabd31 sb/intel/common/smihandler: Hook up smmstore
TESTED on Asus P5QC

Change-Id: I20b87f3dcb898656ad31478820dd5153e4053cb2
Signed-off-by: Arthur Heymans <arthur@aheymans.xyz>
2019-05-02 15:24:30 -06:00
Arthur Heymans
ef4042cf61 drivers/smmstore: Fix some issues
This fixes the following:
- Fix smmstore_read_region to actually read stuff
- Make the API ARCH independent (no dependency on size_t)
- clean up the code a little
- Change the loglevel for non error messages to BIOS_DEBUG

Change-Id: I629be25d2a9b65796ae8f7a700b6bdab57b91b22
Signed-off-by: Arthur Heymans <arthur@aheymans.xyz>
2019-05-02 15:24:13 -06:00
9722 changed files with 266843 additions and 730151 deletions

View File

@@ -20,9 +20,6 @@
--ignore SPDX_LICENSE_TAG
--ignore UNDOCUMENTED_DT_STRING
--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
@@ -33,8 +30,5 @@
# some commits unnecessarily.
--ignore EXECUTE_PERMISSIONS
# Exclude vendorcode directories that don't follow coreboot's coding style.
--exclude src/vendorcode/amd
--exclude src/vendorcode/cavium
--exclude src/vendorcode/intel
--exclude src/vendorcode/mediatek
# Exclude the vendorcode directory
--exclude src/vendorcode

2
.gitignore vendored
View File

@@ -40,3 +40,5 @@ tarballs/
*~
*.kate-swp
*.kdev4
doxygen/*

35
.gitmodules vendored
View File

@@ -1,63 +1,60 @@
[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
branch = main
url = https://review.coreboot.org/vboot.git
[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.git
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

425
.mailmap
View File

@@ -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/blobs vendored

2
3rdparty/fsp vendored

2
3rdparty/vboot vendored

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,239 @@
<!DOCTYPE html>
<html>
<head>
<title>Board</title>
</head>
<body>
<h1>x86 Board Development</h1>
<p>
Board development requires System-on-a-Chip (SoC) support.
The combined steps are listed
<a target="_blank" href="../development.html">here</a>.
The development steps for the board are listed below:
</p>
<ol>
<li><a href="#RequiredFiles">Required Files</a></li>
<li>Enable <a href="#SerialOutput">Serial Output</a></li>
<li>Load the <a href="#SpdData">Memory Timing Data</a></li>
<li><a href="#DisablePciDevices">Disable</a> the PCI devices</li>
<li><a href="#AcpiTables">ACPI Tables</a></li>
</ol>
<hr>
<h2><a name="RequiredFiles">Required Files</a></h2>
<p>
Create the board directory as src/mainboard/&lt;Vendor&gt;/&lt;Board&gt;.
</p>
<p>
The following files are required to build a new board:
</p>
<ol>
<li>Kconfig.name - Defines the Kconfig value for the board</li>
<li>Kconfig
<ol type="A">
<li>Selects the SoC for the board and specifies the SPI flash size
<ol type="I">
<li>BOARD_ROMSIZE_KB_&lt;Size&gt;</li>
<li>SOC_&lt;Vendor&gt;_&lt;Chip Family&gt;</li>
</ol>
</li>
<li>Declare the Kconfig values for:
<ol type="I">
<li>MAINBOARD_DIR</li>
<li>MAINBOARD_PART_NUMBER</li>
<li>MAINBOARD_VENDOR</li>
</ol>
</li>
</ol>
</li>
<li>devicetree.cb - Enable root bridge and serial port
<ol type="A">
<li>The first line must be "chip soc/Intel/&lt;soc family&gt;";
this path is used by the generated static.c to include the chip.h
header file
</li>
</ol>
</li>
<li>romstage.c
<ol type="A">
<li>Add routine mainboard_romstage_entry which calls romstage_common</li>
</ol>
</li>
<li>Configure coreboot build:
<ol type="A">
<li>Set LOCALVERSION</li>
<li>Select vendor for the board</li>
<li>Select the board</li>
<li>CBFS_SIZE = 0x00100000</li>
<li>Set the CPU_MICROCODE_CBFS_LEN</li>
<li>Set the CPU_MICROCODE_CBFS_LOC</li>
<li>Set the FSP_IMAGE_ID_STRING</li>
<li>Set the FSP_LOC</li>
<li>No payload</li>
<li>Choose the default value for all other options</li>
</ol>
</li>
</ol>
<hr>
<h2><a name="SerialOutput">Enable Serial Output</a></h2>
<p>
Use the following steps to enable serial output:
</p>
<ol>
<li>Implement the car_mainboard_pre_console_init routine in the com_init.c
file:
<ol type="A">
<li>Power on and enable the UART controller</li>
<li>Connect the UART receive and transmit data lines to the
appropriate SoC pins
</li>
</ol>
</li>
<li>Add Makefile.inc
<ol type="A">
<li>Add com_init.c to romstage</li>
</ol>
</li>
</ol>
<hr>
<h2><a name="SpdData">Memory Timing Data</a></h2>
<p>
Memory timing data is located in the flash. This data is in the format of
<a target="_blank" href="https://en.wikipedia.org/wiki/Serial_presence_detect">serial presence detect</a>
(SPD) data.
Use the following steps to load the SPD data:
</p>
<ol>
<li>Edit Kconfig to add the DISPLAY_SPD_DATA" value which enables the
display of the SPD data being passed to MemoryInit
</li>
<li>Create an "spd" subdirectory</li>
<li>Create an spd/spd.c file for the SPD implementation
<ol type="A">
<li>Implement the mainboard_fill_spd_data routine
<ol type="i">
<li>Read the SPD data either from the spd.bin file or using I2C or SMBUS</li>
<li>Fill in the pei_data structure with SPD data for each of the DIMMs</li>
<li>Set the DIMM channel configuration</li>
</ol>
</li>
</ol>
</li>
<li>Add an .spd.hex file containing the memory timing data to the spd subdirectory</li>
<li>Create spd/Makefile.inc
<ol type="A">
<li>Add spd.c to romstage</li>
<li>Add the .spd.hex file to SPD_SOURCES</li>
</ol>
</li>
<li>Edit Makefile.inc to add the spd subdirectory</li>
<li>Edit romstage.c
<ol type="A">
<li>Call mainboard_fill_spd_data</li>
<li>Add mainboard_memory_init_params to copy the SPD and DRAM
configuration data from the pei_data structure into the UPDs
for MemoryInit
</li>
</ol>
</li>
<li>Edit devicetree.cb
<ol type="A">
<li>Include the UPD parameters for MemoryInit except for:
<ul>
<li>Address of SPD data</li>
<li>DRAM configuration set above</li>
</ul>
</li>
</ol>
</li>
<li>A working FSP
<a target="_blank" href="../fsp1_1.html#MemoryInit">MemoryInit</a>
routine is required to complete debugging</li>
<li>Debug the result until port 0x80 outputs
<ol type="A">
<li>0x34:
- Just after entering
<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/drivers/intel/fsp1_1/raminit.c;hb=HEAD#l67">raminit</a>
</li>
<li>0x36:
- Just before displaying the
<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/drivers/intel/fsp1_1/raminit.c;hb=HEAD#l106">UPD parameters</a>
for FSP MemoryInit
</li>
<li>0x92: <a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/include/console/post_codes.h;hb=HEAD#l219">POST_FSP_MEMORY_INIT</a>
- Just before calling FSP
<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/drivers/intel/fsp1_1/raminit.c;hb=HEAD#l125">MemoryInit</a>
</li>
<li>0x37:
- Just after returning from FSP
<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/drivers/intel/fsp1_1/raminit.c;hb=HEAD#l127">MemoryInit</a>
</li>
</ol>
</li>
<li>Continue debugging with CONFIG_DISPLAY_HOBS enabled until TempRamExit is called</li>
</ol>
<hr>
<h2><a name="DisablePciDevices">Disable PCI Devices</a></h2>
<p>
Ramstage's BS_DEV_ENUMERATE state displays the PCI vendor and device IDs for all
of the devices in the system. Edit the devicetree.cb file:
</p>
<ol>
<li>Edit the devicetree.cb file:
<ol type="A">
<li>Add an entry for a PCI device.function and turn it off. The entry
should look similar to:
<pre><code>device pci 14.0 off end</code></pre>
</li>
<li>Turn on the devices for:
<ul>
<li>Memory Controller</li>
<li>Debug serial device</li>
</ul>
</li>
</ol>
</li>
<li>Debug until the BS_DEV_ENUMERATE state shows the proper state for all of the devices</li>
</ol>
<hr>
<h2><a name="AcpiTables">ACPI Tables</a></h2>
<ol>
<li>Edit Kconfig
<ol type="A">
<li>Add "select HAVE_ACPI_TABLES"</li>
</ol>
</li>
<li>Add the acpi_tables.c module:
<ol type="A">
<li>Include soc/acpi.h</li>
<li>Add the acpi_create_fadt routine
<ol type="I">
<li>fill in the ACPI header</li>
<li>Call the acpi_fill_fadt routine</li>
</ol>
</li>
</ol>
</li>
<li>Add the dsdt.asl module:
</li>
</ol>
<hr>
<p>Modified: 20 February 2016</p>
</body>
</html>

View File

@@ -0,0 +1,113 @@
<!DOCTYPE html>
<html>
<head>
<title>Galileo</title>
</head>
<body>
<h1>Intel&reg; Galileo Development Board</h1>
<table>
<tr>
<td><a target="_blank" href="http://www.mouser.com/images/microsites/Intel_Galileo2_lrg.jpg"><img alt="Galileo Gen 2" src="http://www.mouser.com/images/microsites/Intel_Galileo2_lrg.jpg" width=500></a></td>
<td>
The Intel&reg; Galileo Gen 2 mainboard code was developed along with the Intel&reg;
<a target="_blank" href="../SoC/quark.html">Quark&trade;</a> SoC:
<ul>
<li><a target="_blank" href="../development.html">Overall</a> development</li>
<li><a target="_blank" href="../SoC/soc.html">SoC</a> support</li>
<li><a target="_blank" href="../fsp1_1.html">FSP 1.1</a> integration</li>
<li><a target="_blank" href="board.html">Board</a> support</li>
</ul>
</td>
</tr>
</table>
<hr>
<h2>Galileo Board Documentation</h2>
<ul>
<li>Common Components
<ul>
<li>A/D: Texas Instruments <a target="_blank" href="http://www.ti.com/lit/ds/symlink/adc108s102.pdf">ADC108S102</a></li>
<li>Analog Switch: Texas Instruments <a target="_blank" href="http://www.ti.com/lit/ds/symlink/ts5a23159.pdf">TS5A23159</a></li>
<li>Ethernet (10/100 MB/S): Texas Instruments <a target="_blank" href="http://www.ti.com/lit/ds/symlink/dp83848-ep.pdf">DP83848</a></li>
<li>Load Switch: Texas Instruments <a target="_blank" href="http://www.ti.com/lit/ds/symlink/tps22920.pdf">TPS22920x</a></li>
<li>Memory (256 MiB): Micron <a target="_blank" href="https://www.micron.com/~/media/Documents/Products/Data%20Sheet/DRAM/DDR3/1Gb_1_35V_DDR3L.pdf">MT41K128M8</a></li>
<li>SoC: Intel&reg; Quark&trade; <a target="_blank" href="../SoC/quark.html">X-1000</a></li>
<li>Serial EEPROM (1 KiB): ON Semiconductor&reg; <a target="_blank" href="http://www.onsemi.com/pub_link/Collateral/CAT24C01-D.PDF">CAT24C08</a></li>
<li>SPI Flash (8 MiB): Winbond&trade; <a target="_blank" href="http://www.winbond-usa.com/resource-files/w25q64fv_revl1_100713.pdf">W25Q64FV</a></li>
<li>Step Down Converter: Texas Instruments <a target="_blank" href="http://www.ti.com/lit/ds/slvsag7c/slvsag7c.pdf">TPS62130</a></li>
<li>Step Down Converter: Texas Instruments <a target="_blank" href="http://www.ti.com/lit/ug/slvu570/slvu570.pdf">TPS652510</a></li>
<li>Termination Regulator: Texas Instruments <a target="_blank" href="http://www.ti.com/lit/ds/symlink/tps51200.pdf">TPS51200</a></li>
</ul>
</li>
<li>Make a bootable <a target="_blank" href="https://software.intel.com/en-us/get-started-galileo-linux-step1">micro SD card</a></li>
</ul>
<h3>Galileo Gen 2 Board Documentation</h3>
<ul>
<li><a target="_blank" href="http://files.linuxgizmos.com/intel_galileo_gen2_blockdiagram.jpg">Block Diagram</a></li>
<li><a target="_blank" href="https://software.intel.com/en-us/iot/library/galileo-getting-started">Getting Started</a></li>
<li><a target="_blank" href="http://www.intel.com/content/www/us/en/embedded/products/galileo/galileo-overview.html">Overview</a></li>
<li><a target="_blank" href="http://files.linuxgizmos.com/intel_galileo_gen2_ports.jpg">Port Diagram</a></li>
<li><a target="_blank" href="http://download.intel.com/support/galileo/sb/intelgalileogen2prodbrief_330736_003.pdf">Product Brief</a></li>
<li><a target="_blank" href="http://www.intel.com/content/dam/www/public/us/en/documents/guides/galileo-g2-schematic.pdf">Schematic</a></li>
<li><a target="_blank" href="http://download.intel.com/support/galileo/sb/galileo_boarduserguide_330237_001.pdf">User Guide</a></li>
<li>Components
<ul>
<li>A/D: Texas Instruments <a target="_blank" href="http://www.ti.com/lit/ds/symlink/adc108s102.pdf">ADC108S102</a></li>
<li>I2C 16-channel, 12-bit PWM: NXP Semiconductors <a target="_blank" href="http://cache.nxp.com/documents/data_sheet/PCA9685.pdf">PCA9685</a></li>
<li>I2C I/O Ports: NXP Semiconductors <a target="_blank" href="http://www.nxp.com/documents/data_sheet/PCAL9535A.pdf">PCAL9535A</a></li>
<li>Octal Buffer/Driver: Texas Instruments <a target="_blank" href="http://www.ti.com/lit/ds/symlink/sn74lv541at.pdf">SN74LV541AT</a></li>
<li>Quadruple Bus Buffer: Texas Instruments <a target="_blank" href="http://www.ti.com/lit/ds/symlink/sn74lv125a.pdf">SN74LV125A</a></li>
<li>Quadruple Bus Buffer with 3-State Outputs: Texas Instruments <a target="_blank" href="http://www.ti.com/lit/ds/symlink/sn74lvc126a.pdf">SN74LVC126A</a></li>
<li>Serial EEPROM (1 KiB): ON Semiconductor&reg; <a target="_blank" href="http://www.onsemi.com/pub_link/Collateral/CAT24C01-D.PDF">CAT24C08</a></li>
<li>Single 2-input multiplexer: NXP Semiconductors <a target="_blank" href="http://www.nxp.com/documents/data_sheet/74LVC1G157.pdf">74LVC1G157</a></li>
<li>Step Down Converter: Texas Instruments <a target="_blank" href="http://www.ti.com/lit/ds/slvsag7c/slvsag7c.pdf">TPS62130</a></li>
</ul>
</li>
</ul>
<h3>Galileo Gen 1 Board Documentation</h3>
<ul>
<li><a target="_blank" href="http://www.intel.com/content/dam/www/public/us/en/documents/datasheets/galileo-g1-datasheet.pdf">Datasheet</a></li>
<li><a target="_blank" href="http://www.intel.com/content/dam/www/public/us/en/documents/guides/galileo-g1-schematic.pdf">Schematic</a></li>
<li>Components
<ul>
<li>A/D: Analog Devices <a target="_blank" href="http://www.analog.com/media/en/technical-documentation/data-sheets/AD7298-1.pdf">AD7298</a></li>
<li>Analog Switch, 2 channel: Texas Instruments <a target="_blank" href="http://www.ti.com.cn/cn/lit/ds/symlink/ts5a23159.pdf">TS5A23159</a></li>
<li>EEPROM & GPIO: Cypress <a target="_blank" href="http://www.cypress.com/file/37971/download">CY8C9540A</a></li>
<li>Power Distribution Switch: Texas Instruments <a target="_blank" href="http://www.ti.com/lit/ds/symlink/tps2044b.pdf">TPS2051BDBVR</a></li>
<li>RS232 Converter: Texas Instruments <a target="_blank" href="http://www.ti.com/lit/ds/symlink/max3232.pdf">MAX3232</a></li>
<li>Voltage-Level Translator: Texas Instruments<a target="_blank" href="http://www.ti.com/lit/ds/symlink/txs0108e.pdf">TXS0108E</a></li>
</ul>
</li>
</ul>
<hr>
<h2>Debug Tools</h2>
<ul>
<li>Flash Programmer:
<ul>
<li>Dediprog <a target="_blank" href="http://www.dediprog.com/pd/spi-flash-solution/SF100">SF100</a> ISP IC Programmer</li>
</ul>
</li>
<li>JTAG Connector: <a target="_blank" href="https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=Olimex+ARM-JTAG-20-10">Olimex ARM-JTAG-20-10</a></li>
<li>JTAG Debugger:
<ul>
<li>Olimex LTD <a target="_blank" href="https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=Olimex+ARM-USB-OCD-H">ARM-USB-OCD-H</a></li>
<li>Tincan Tools <a target="_blank" href="https://www.tincantools.com/wiki/Flyswatter2">Flyswatter2</a></li>
</ul>
</li>
<li><a target="_blank" href="http://download.intel.com/support/processors/quark/sb/sourcedebugusingopenocd_quark_appnote_330015_003.pdf">Hardware Setup and Software Installation</a></li>
<li>USB Serial cable: FTDI <a target="_blank" href="https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=FTDI+TTL-232R-3V3">TTL-232R-3V3</a></li>
</ul>
<hr>
<p>Modified: 29 February 2016</p>
</body>
</html>

View File

@@ -0,0 +1,220 @@
<!DOCTYPE html>
<html>
<head>
<title>Quark&trade; SoC</title>
</head>
<body>
<h1>Intel&reg; Quark&trade; SoC</h1>
<table>
<tr>
<td><a target="_blank" href="http://www.intel.com/content/dam/www/public/us/en/images/embedded/16x9/edc-quark-block-diagram-16x9.png"><img alt="Quark Block Diagram" src="http://www.intel.com/content/dam/www/public/us/en/images/embedded/16x9/edc-quark-block-diagram-16x9.png" width=500></a></td>
<td>
The Quark&trade; SoC code was developed using the
<a target="_blank" href="../Board/galileo.html">Galileo Gen 2</a>
board:
<ul>
<li><a target="_blank" href="../development.html">Overall</a> development</li>
<li><a target="_blank" href="soc.html">SoC</a> support</li>
<li><a target="_blank" href="../fsp1_1.html">FSP 1.1</a> integration</li>
<li><a target="_blank" href="../Board/board.html">Board</a> support</li>
<li><a target="_blank" href="#QuarkFsp">Quark&trade; FSP</a></li>
<li><a target="_blank" href="#CorebootPayloadPkg">CorebootPayloadPkg</a></li>
</ul>
</td>
</tr>
</table>
<hr>
<h2>Quark&trade; Documentation</h2>
<ul>
<li><a target="_blank" href="http://www.intel.com/content/dam/www/public/us/en/images/embedded/16x9/edc-quark-block-diagram-16x9.png">Block Diagram</a></li>
<li><a target="_blank" href="http://www.intel.com/content/www/us/en/embedded/products/quark/specifications.html">Specifications</a>:
<ul>
<li><a target="_blank" href="http://ark.intel.com/products/79084/Intel-Quark-SoC-X1000-16K-Cache-400-MHz">X1000</a>
- <a target="_blank" href="http://www.intel.com/content/www/us/en/search.html?keyword=X1000">Documentation</a>:
<ul>
<li><a target="_blank" href="http://www.intel.com/content/dam/www/public/us/en/documents/datasheets/quark-x1000-datasheet.pdf">Datasheet</a></li>
<li><a target="_blank" href="http://www.intel.com/content/dam/support/us/en/documents/processors/quark/sb/intelquarkcore_devman_001.pdf">Developer's Manual</a></li>
<li><a target="_blank" href="http://www.intel.com/content/dam/www/public/us/en/documents/product-briefs/intel-quark-product-brief-v3.pdf">Product Brief</a></li>
</ul>
</li>
</ul>
</li>
<li><a target="_blank" href="../index.html#Documentation">More documentation</a></li>
</ul>
<hr>
<h2><a name="CorebootPayloadPkg">Quark&trade; EDK2 CorebootPayloadPkg</a></h2>
<p>
Build Instructions:
</p>
<ol>
<li>Set up <a href="#BuildEnvironment">build environment</a></li>
<li>Linux (assumes GCC48):
<pre><code>build -p CorebootPayloadPkg/CorebootPayloadPkgIa32.dsc -a IA32 \
-t GCC48 -b DEBUG -DDEBUG_PROPERTY_MASK=0x27 \
-DDEBUG_PRINT_ERROR_LEVEL=0x80000042 -DSHELL_TYPE=BUILD_SHELL \
-DMAX_LOGICAL_PROCESSORS=1
ls Build/CorebootPayloadPkgIA32/DEBUG_GCC48/FV/UEFIPAYLOAD.fd
</code></pre>
</li>
<li>Windows (assumes Visual Studio 2015):
<pre><code>build -p CorebootPayloadPkg\CorebootPayloadPkgIa32.dsc -a IA32 -t VS2015x86 -b DEBUG -DDEBUG_PROPERTY_MASK=0x27 -DDEBUG_PRINT_ERROR_LEVEL=0x80000042 -DSHELL_TYPE=BUILD_SHELL -DMAX_LOGICAL_PROCESSORS=1
dir Build\CorebootPayloadPkgIA32\DEBUG_VS2015x86\FV\UEFIPAYLOAD.fd
</code></pre>
</li>
<li>In the .config for coreboot, set the following Kconfig values:
<ul>
<li>CONFIG_PAYLOAD_ELF=y</li>
<li>CONFIG_PAYLOAD_FILE="path to UEFIPAYLOAD.fd"</li>
</ul>
</li>
<li>Build coreboot</li>
<li>Copy the image build/coreboot.rom into flash</li>
</ol>
<hr>
<h2><a name="BuildEnvironment">Quark&trade; EDK2 Build Environment</a></h2>
<p>
Use the following steps to setup a build environment:
</p>
<ol>
<li>Get the EDK2 sources:
<ol type="A">
<li>EDK2: git clone <a target="_blank" href="https://github.com/tianocore/edk2.git">https://github.com/tianocore/edk2.git</a></li>
<li>EDK2-non-osi: git clone <a target="_blank" href="https://github.com/tianocore/edk2-non-osi.git">https://github.com/tianocore/edk2-non-osi.git</a></li>
<li>Win32 BaseTools: git clone <a target="_blank" href="https://github.com/tianocore/edk2-BaseTools-win32.git">https://github.com/tianocore/edk2-BaseTools-win32.git</a></li>
</ol>
</li>
<li>Set up a build window:
<ul>
<li>Linux:
<pre><code>export WORKSPACE=$PWD
export PACKAGES_PATH="$PWD/edk2:$PWD/edk2-non-osi"
cd edk2
export WORKSPACE=$PWD
. edksetup.sh
</code></pre>
</li>
<li>Windows:
<pre><code>set WORKSPACE=%CD%
set PACKAGES_PATH=%WORKSPACE%\edk2;%WORKSPACE%\edk2-non-osi
set EDK_TOOLS_BIN=%WORKSPACE%\edk2-BaseTools-win32
cd edk2
edksetup.bat
</code></pre>
</li>
</ul>
</li>
</ol>
<hr>
<h2><a name="QuarkFsp">Quark&trade; FSP</a></h2>
<p>
Getting the Quark FSP source:
</p>
<ol>
<li>Set up an EDK-II <a href="#BuildEnvironment">Build Environment</a></li>
<li>cd edk2</li>
<li>mkdir QuarkFspPkg</li>
<li>cd QuarkFspPkg</li>
<li>Use git to clone <a target="_blank" href="https://review.gerrithub.io/#/admin/projects/LeeLeahy/quarkfsp">QuarkFspPkg</a> into the QuarkFpsPkg directory (.)</li>
</ol>
<h3>Building QuarkFspPkg</h3>
<p>
There are two versions of FSP: FSP 1.1 and FSP 2.0. There are also two
different implementations of FSP, one using subroutines without SEC and
PEI core and the original implementation which relies on SEC and PEI core.
Finally there are two different build x86 types release (r32) and debug (d32).
</p>
<p>Note that the subroutine implementations are a <b>work in progress</b>.</p>
<p>
Build commands shown building debug FSP:
</p>
<ul>
<li>Linux:
<ul>
<li>QuarkFspPkg/BuildFsp1_1.sh -d32</li>
<li>QuarkFspPkg/BuildFsp1_1Pei.sh -d32</li>
<li>QuarkFspPkg/BuildFsp2_0.sh -d32</li>
<li>QuarkFspPkg/BuildFsp2_0Pei.sh -d32</li>
</ul>
<li>Windows:
<ul>
<li>QuarkFspPkg/BuildFsp1_1.bat -d32</li>
<li>Windows: QuarkFspPkg/BuildFsp2_0.bat -d32</li>
</ul>
</li>
</ul>
<h3>Copying FSP files into coreboot Source Tree</h3>
<p>
There are some helper scripts to copy the FSP output into the coreboot
source tree. The parameters to these scripts are:
</p>
<ol>
<li>EDK2 tree root</li>
<li>coreboot tree root</li>
<li>Build type: DEBUG or RELEASE</li>
</ol>
<p>
Script files:
</p>
<ul>
<li>Linux:
<ul>
<li>QuarkFspPkg/coreboot_fsp1_1.sh</li>
<li>QuarkFspPkg/coreboot_fsp1_1Pei.sh</li>
<li>QuarkFspPkg/coreboot_fsp2_0.sh</li>
<li>QuarkFspPkg/coreboot_fsp2_0Pei.sh</li>
</ul>
</ul>
<hr>
<h2>Quark&trade; EDK2 BIOS</h2>
<p>
Build Instructions:
</p>
<ol>
<li>Set up <a href="#BuildEnvironment">build environment</a></li>
<li>Build the image:
<ul>
<li>Linux:
<pre><code>build -p QuarkPlatformPkg/Quark.dsc -a IA32 -t GCC48 -b DEBUG -DDEBUG_PROPERTY_MASK=0x27 -DDEBUG_PRINT_ERROR_LEVEL=0x80000042
ls Build/Quark/DEBUG_GCC48/FV/Quark.fd
</code></pre>
</li>
<li>Windows:
<pre><code>build -p QuarkPlatformPkg/Quark.dsc -a IA32 -t VS2012x86 -b DEBUG -DDEBUG_PROPERTY_MASK=0x27 -DDEBUG_PRINT_ERROR_LEVEL=0x80000042
dir Build\Quark\DEBUG_VS2012x86\FV\Quark.fd
</code></pre>
</li>
</ul>
</li>
</ol>
<p>
Documentation:
</p>
<ul>
<li><a target="_blank" href="https://github.com/tianocore/edk2/tree/master/QuarkPlatformPkg">EDK II firmware for Intel&reg; Quark&trade; SoC X1000 based platforms</a></li>
<li>Intel&reg; Quark&trade; SoC X1000 <a target="_blank" href="http://www.intel.com/content/dam/www/public/us/en/documents/guides/quark-x1000-uefi-firmware-writers-guide.pdf">UEFI Firmware Writer's Guide</a></li>
</ul>
<hr>
<p>Modified: 17 May 2016</p>
</body>
</html>

View File

@@ -0,0 +1,730 @@
<!DOCTYPE html>
<html>
<head>
<title>SoC</title>
</head>
<body>
<h1>x86 System on a Chip (SoC) Development</h1>
<p>
SoC development is best done in parallel with development for a specific
board. The combined steps are listed
<a target="_blank" href="../development.html">here</a>.
The development steps for the SoC are listed below:
</p>
<ol>
<li><a target="_blank" href="../fsp1_1.html#RequiredFiles">FSP 1.1</a> required files</li>
<li>SoC <a href="#RequiredFiles">Required Files</a></li>
<li><a href="#Descriptor">Start Booting</a></li>
<li><a href="#EarlyDebug">Early Debug</a></li>
<li><a href="#Bootblock">Bootblock</a></li>
<li><a href="#TempRamInit">TempRamInit</a></li>
<li><a href="#Romstage">Romstage</a>
<ol type="A">
<li>Enable <a href="#SerialOutput">Serial Output"</a></li>
<li>Get the <a href="#PreviousSleepState">Previous Sleep State</a></li>
<li>Add the <a href="#MemoryInit">MemoryInit</a> Support</li>
<li>Disable the <a href="#DisableShadowRom">Shadow ROM</a></li>
</ol>
</li>
<li><a href="#Ramstage">Ramstage</a>
<ol type="A">
<li><a href="#DeviceTree">Start Device Tree Processing</a></li>
<li>Set up the <a href="#MemoryMap">Memory Map"</a></li>
</ol>
</li>
<li><a href="#AcpiTables">ACPI Tables</a></li>
<li><a href="#LegacyHardware">Legacy Hardware</a></li>
</ol>
<hr>
<h2><a name="RequiredFiles">Required Files</a></h2>
<p>
Create the directory as src/soc/&lt;Vendor&gt;/&lt;Chip Family&gt;.
</p>
<p>
The following files are required to build a new SoC:
</p>
<ul>
<li>Include files
<ul>
<li>include/soc/pei_data.h</li>
<li>include/soc/pm.h</li>
</ul>
</li>
<li>Kconfig - Defines the Kconfig value for the SoC and selects the tool
chains for the various stages:
<ul>
<li>select ARCH_BOOTBLOCK_&lt;Tool Chain&gt;</li>
<li>select ARCH_RAMSTAGE_&lt;Tool Chain&gt;</li>
<li>select ARCH_ROMSTAGE_&lt;Tool Chain&gt;</li>
<li>select ARCH_VERSTAGE_&lt;Tool Chain&gt;</li>
</ul>
</li>
<li>Makefile.inc - Specify the include paths</li>
<li>memmap.c - Top of usable RAM</li>
</ul>
<hr>
<h2><a name="Descriptor">Start Booting</a></h2>
<p>
Some SoC parts require additional firmware components in the flash.
This section describes how to add those pieces.
</p>
<h3>Intel Firmware Descriptor</h3>
<p>
The Intel Firmware Descriptor (IFD) is located at the base of the flash part.
The following command overwrites the base of the flash image with the Intel
Firmware Descriptor:
</p>
<pre><code>dd if=descriptor.bin of=build/coreboot.rom conv=notrunc >/dev/null 2>&1</code></pre>
<h3><a name="MEB">Management Engine Binary</a></h3>
<p>
Some SoC parts contain and require that the Management Engine (ME) be running
before it is possible to bring the x86 processor out of reset. A binary file
containing the management engine code must be added to the firmware using the
ifdtool. The following commands add this binary blob:
</p>
<pre><code>util/ifdtool/ifdtool -i ME:me.bin build/coreboot.rom
mv build/coreboot.rom.new build/coreboot.rom
</code></pre>
<h3><a name="EarlyDebug">Early Debug</a></h3>
<p>
Early debugging between the reset vector and the time the serial port is enabled
is most easily done by writing values to port 0x80.
</p>
<h3>Success</h3>
<p>
When the reset vector is successfully invoked, port 0x80 will output the following value:
</p>
<ul>
<li>0x01: <a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/include/console/post_codes.h;hb=HEAD#l45">POST_RESET_VECTOR_CORRECT</a>
- Bootblock successfully executed the
<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/cpu/x86/16bit/reset16.inc;hb=HEAD#l4">reset vector</a>
and entered the 16-bit code at
<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/cpu/x86/16bit/entry16.inc;hb=HEAD#l35">_start</a>
</li>
</ul>
<hr>
<h2><a name="Bootblock">Bootblock</a></h2>
<p>
Implement the bootblock using the following steps:
</p>
<ol>
<li>Create the directory as src/soc/&lt;Vendor&gt;/&lt;Chip Family&gt;/bootblock</li>
<li>Add the timestamp.inc file which initializes the floating point registers and saves
the initial timestamp.
</li>
<li>Add the bootblock.c file which:
<ol type="A">
<li>Enables memory-mapped PCI config access</li>
<li>Updates the microcode by calling intel_update_microcode_from_cbfs</li>
<li>Enable ROM caching</li>
</ol>
</li>
<li>Edit the src/soc/&lt;Vendor&gt;/&lt;Chip Family&gt;/Kconfig file
<ol type="A">
<li>Add the BOOTBLOCK_CPU_INIT value to point to the bootblock.c file</li>
<li>Add the CHIPSET_BOOTBLOCK_INCLUDE value to point to the timestamp.inc file</li>
</ol>
</li>
<li>Edit the src/soc/&lt;Vendor&gt;/&lt;Chip Family&gt;/Makefile.inc file
<ol type="A">
<li>Add the bootblock subdirectory</li>
</ol>
</li>
<li>Edit the src/soc/&lt;Vendor&gt;/&lt;Chip Family&gt;/memmap.c file
<ol type="A">
<li>Add the fsp/memmap.h include file</li>
</ol>
</li>
<li>Add the necessary .h files to define the necessary values and structures</li>
<li>When successful port 0x80 will output the following values:
<ol type="A">
<li>0x01: <a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/include/console/post_codes.h;hb=HEAD#l45">POST_RESET_VECTOR_CORRECT</a>
- Bootblock successfully executed the
<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/cpu/x86/16bit/reset16.inc;hb=HEAD#l4">reset vector</a>
and entered the 16-bit code at
<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/cpu/x86/16bit/entry16.inc;hb=HEAD#l35">_start</a>
</li>
<li>0x10: <a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/include/console/post_codes.h;hb=HEAD#l53">POST_ENTER_PROTECTED_MODE</a>
- Bootblock executing in
<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/cpu/x86/32bit/entry32.inc;hb=HEAD#l55">32-bit mode</a>
</li>
<li>0x10 - Verstage/romstage reached 32-bit mode</li>
</ol>
</li>
</ol>
<p>
<b>Build Note:</b> The following files are included into the default bootblock image:
</p>
<ul>
<li><a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/arch/x86/bootblock_romcc.S;hb=HEAD">src/arch/x86/bootblock_romcc.S</a>
added by <a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/arch/x86/Makefile.inc;hb=HEAD#l133">src/arch/x86/Makefile.inc</a>
and includes the following files:
<ul>
<li><a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/arch/x86/prologue.inc">src/arch/x86/prologue.inc</a></li>
<li><a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/cpu/x86/16bit/reset16.inc">src/cpu/x86/16bit/reset16.inc</a></li>
<li><a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/cpu/x86/16bit/entry16.inc">src/cpu/x86/16bit/entry16.inc</a></li>
<li><a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/cpu/x86/32bit/entry32.inc">src/cpu/x86/32bit/entry32.inc</a></li>
<li>The code in
<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/arch/x86/bootblock_romcc.S">src/arch/x86/bootblock_romcc.S</a>
includes src/soc/&lt;Vendor&gt;/&lt;Chip Family&gt;/bootblock/timestamp.inc using the
CONFIG_CHIPSET_BOOTBLOCK_INCLUDE value set above
</li>
<li><a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/cpu/x86/sse_enable.inc">src/cpu/x86/sse_enable.inc</a></li>
<li>The code in
<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/arch/x86/Makefile.inc;hb=HEAD#l156">src/arch/x86/Makefile.inc</a>
invokes the ROMCC tool to convert the following "C" code into assembler as bootblock.inc:
<ul>
<li><a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/arch/x86/include/arch/bootblock_romcc.h">src/arch/x86/include/arch/bootblock_romcc.h</a></li>
<li><a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/cpu/x86/lapic/boot_cpu.c">src/cpu/x86/lapic/boot_cpu.c</a></li>
<li>The CONFIG_BOOTBLOCK_CPU_INIT value set above typically points to the code in
src/soc/&lt;Vendor&gt;/&lt;Chip Family&gt;/bootblock/bootblock.c
</li>
</ul>
</li>
</ul>
</li>
<li><a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/arch/x86/id.S">src/arch/x86/id.S</a>
added by <a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/arch/x86/Makefile.inc;hb=HEAD#l110">src/arch/x86/Makefile.inc</a>
</li>
<li><a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/cpu/intel/fit/fit.S">src/cpu/intel/fit/fit.S</a>
added by <a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/cpu/intel/fit/Makefile.inc;hb=HEAD">src/cpu/intel/fit/Makefile.inc</a>
</li>
<li><a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/arch/x86/walkcbfs.S">src/arch/x86/walkcbfs.S</a>
added by <a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/arch/x86/Makefile.inc;hb=HEAD#l137">src/arch/x86/Makefile.inc</a>
</li>
</ul>
<hr>
<h2><a name="TempRamInit">TempRamInit</a></h2>
<p>
Enable the call to TempRamInit in two stages:
</p>
<ol>
<li>Finding the FSP binary in the read-only CBFS region</li>
<li>Call TempRamInit</li>
</ol>
<h3>Find FSP Binary</h3>
<p>
Use the following steps to locate the FSP binary:
</p>
<ol>
<li>Edit the src/soc/&lt;Vendor&gt;/&lt;Chip Family&gt;/Kconfig file
<ol type="A">
<li>Add "select USE_GENERIC_FSP_CAR_INC" to enable the use of
<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/drivers/intel/fsp1_1/cache_as_ram.inc">src/drivers/intel/fsp1_1/cache_as_ram.inc</a>
</li>
<li>Add "select SOC_INTEL_COMMON" to enable the use of the files from src/soc/intel/common
</li>
</ol>
</li>
<li>Debug the result until port 0x80 outputs
<ol type="A">
<li>0x90: <a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/include/console/post_codes.h;hb=HEAD#l205">POST_FSP_TEMP_RAM_INIT</a>
- Just before calling
<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/drivers/intel/fsp1_1/cache_as_ram.inc;hb=HEAD#l73">TempRamInit</a>
</li>
<li>Alternating 0xba and 0x01 - The FSP image was not found</li>
</ol>
</li>
<li>Add the <a target="_blank" href="../fsp1_1.html#FspBinary">FSP binary file</a> to the flash image</li>
<li>Set the following Kconfig values:
<ul>
<li>CONFIG_FSP_LOC to the FSP base address specified in the previous step</li>
<li>CONFIG_FSP_IMAGE_ID_STRING</li>
</ul>
</li>
<li>Debug the result until port 0x80 outputs
<ol type="A">
<li>0x90: <a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/include/console/post_codes.h;hb=HEAD#l205">POST_FSP_TEMP_RAM_INIT</a>
- Just before calling
<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/drivers/intel/fsp1_1/cache_as_ram.inc;hb=HEAD#l73">TempRamInit</a>
</li>
<li>Alternating 0xbb and 0x02 - TempRamInit executed, no CPU microcode update found</li>
</ol>
</li>
</ol>
<h3>Calling TempRamInit</h3>
<p>
Use the following steps to debug the call to TempRamInit:
</p>
<ol>
<li>Add the CPU microcode update file
<ol type="A">
<li>Add the microcode file with the following command
<pre><code>util/cbfstool/cbfstool build/coreboot.rom add -t microcode -n cpu_microcode_blob.bin -b &lt;base address&gt; -f cpu_microcode_blob.bin</code></pre>
</li>
<li>Set the Kconfig values
<ul>
<li>CONFIG_CPU_MICROCODE_CBFS_LOC set to the value from the previous step</li>
<li>CONFIG_CPU_MICROCODE_CBFS_LEN</li>
</ul>
</li>
</ol>
</li>
<li>Debug the result until port 0x80 outputs
<ol type="A">
<li>0x90: <a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/include/console/post_codes.h;hb=HEAD#l205">POST_FSP_TEMP_RAM_INIT</a>
- Just before calling
<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/drivers/intel/fsp1_1/cache_as_ram.inc;hb=HEAD#l73">TempRamInit</a>
</li>
<li>0x2A - Just before calling
<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/drivers/intel/fsp1_1/cache_as_ram.inc;hb=HEAD#l151">cache_as_ram_main</a>
which is the start of the verstage code which may be part of romstage
</li>
</ol>
</li>
</ol>
<hr>
<h2><a name="Romstage">Romstage</a></h2>
<h3><a name="SerialOutput">Serial Output</a></h3>
<p>
The following steps add the serial output support for romstage:
</p>
<ol>
<li>Create the romstage subdirectory</li>
<li>Add romstage/romstage.c
<ol type="A">
<li>Program the necessary base addresses</li>
<li>Disable the TCO</li>
</ol>
</li>
<li>Add romstage/Makefile.inc
<ol type="A">
<li>Add romstage.c to romstage</li>
</ol>
</li>
<li>Add gpio configuration support if necessary</li>
<li>Add the necessary .h files to support the build</li>
<li>Update Makefile.inc
<ol type="A">
<li>Add the romstage subdirectory</li>
<li>Add the gpio configuration support file to romstage</li>
</ol>
</li>
<li>Set the necessary Kconfig values to enable serial output:
<ul>
<li>CONFIG_DRIVERS_UART_&lt;driver&gt;=y</li>
<li>CONFIG_CONSOLE_SERIAL=y</li>
<li>CONFIG_UART_FOR_CONSOLE=&lt;port&gt;</li>
<li>CONFIG_CONSOLE_SERIAL_115200=y</li>
</ul>
</li>
</ol>
<h3><a name="PreviousSleepState">Determine Previous Sleep State</a></h3>
<p>
The following steps implement the code to get the previous sleep state:
</p>
<ol>
<li>Implement the fill_power_state routine which determines the previous sleep state</li>
<li>Debug the result until port 0x80 outputs
<ol type="A">
<li>0x32:
- Just after entering
<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/drivers/intel/fsp1_1/romstage.c;hb=HEAD#l99">romstage_common</a>
</li>
<li>0x33 - Just after calling
<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/drivers/intel/fsp1_1/romstage.c;hb=HEAD#l113">soc_pre_ram_init</a>
</li>
<li>0x34:
- Just after entering
<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/drivers/intel/fsp1_1/raminit.c;hb=HEAD#l67">raminit</a>
</li>
</ol>
</ol>
<h3><a name="MemoryInit">MemoryInit Support</a></h3>
<p>
The following steps implement the code to support the FSP MemoryInit call:
</p>
<ol>
<li>Add the chip.h header file to define the UPD values which get passed
to MemoryInit. Skip the values containing SPD addresses and DRAM
configuration data which is determined by the board.
<p>
<b>Build Note</b>: The src/mainboard/&lt;Vendor&gt;/&lt;Board&gt;/devicetree.cb
file specifies the default values for these parameters. The build
process creates the static.c module which contains the config data
structure containing these values.
</p>
</li>
<li>Edit romstage/romstage.c
<ol type="A">
<li>Implement the romstage/romstage.c/soc_memory_init_params routine to
copy the values from the config structure into the UPD structure
</li>
<li>Implement the soc_display_memory_init_params routine to display
the updated UPD parameters by calling fsp_display_upd_value
</li>
</ol>
</li>
</ol>
<h3><a name="DisableShadowRom">Disable Shadow ROM</a></h3>
<p>
A shadow of the SPI flash part is mapped from 0x000e0000 to 0x000fffff.
This shadow needs to be disabled to allow RAM to properly respond to
this address range.
</p>
<ol>
<li>Edit romstage/romstage.c and add the soc_after_ram_init routine</li>
</ol>
<hr>
<h2><a name="Ramstage">Ramstage</a></h2>
<h3><a name="DeviceTree">Start Device Tree Processing</a></h3>
<p>
The src/mainboard/&lt;Vendor&gt;/&lt;Board&gt;/devicetree.cb file drives the
execution during ramstage. This file is processed by the util/sconfig utility
to generate build/mainboard/&lt;Vendor&gt;/&lt;Board&gt;/static.c. The various
state routines in
src/lib/<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/lib/hardwaremain.c;hb=HEAD#l128">hardwaremain.c</a>
call dev_* routines which use the tables in static.c to locate operation tables
associated with the various chips and devices. After location the operation
tables, the state routines call one or more functions depending upon the
state of the state machine.
</p>
<h4><a name="ChipOperations">Chip Operations</a></h4>
<p>
Kick-starting the ramstage state machine requires creating the operation table
for the chip listed in devicetree.cb:
</p>
<ol>
<li>Edit src/soc/&lt;SoC Vendor&gt;/&lt;SoC Family&gt;/chip.c:
<ol type="A">
<li>
This chip's operation table has the name
soc_&lt;SoC Vendor&gt;_&lt;SoC Family&gt;_ops which is derived from the
chip path specified in the devicetree.cb file.
</li>
<li>Use the CHIP_NAME macro to specify the name for the chip</li>
<li>For FSP 1.1, specify a .init routine which calls intel_silicon_init</li>
</ol>
</li>
<li>Edit src/soc/&lt;SoC Vendor&gt;/&lt;SoC Family&gt;/Makefile.inc and add chip.c to ramstage</li>
</ol>
<h4>Domain Operations</h4>
<p>
coreboot uses the domain operation table to initiate operations on all of the
devices in the domain. By default coreboot enables all PCI devices which it
finds. Listing a device in devicetree.cb gives the board vendor control over
the device state. Non-PCI devices may also be listed under PCI device such as
the LPC bus or SMbus devices.
</p>
<ol>
<li>Edit src/soc/&lt;SoC Vendor&gt;/&lt;SoC Family&gt;/chip.c:
<ol type="A">
<li>
The domain operation table is typically placed in
src/soc/&lt;SoC Vendor&gt;/&lt;SoC Family&gt;/chip.c.
The table typically looks like the following:
<pre><code>static struct device_operations pci_domain_ops = {
.read_resources = pci_domain_read_resources,
.set_resources = pci_domain_set_resources,
.scan_bus = pci_domain_scan_bus,
};
</code></pre>
</li>
<li>
Create a .enable_dev entry in the chip operations table which points to a
routine which sets the domain table for the device with the DEVICE_PATH_DOMAIN.
<pre><code> if (dev->path.type == DEVICE_PATH_DOMAIN) {
dev->ops = &pci_domain_ops;
}
</code></pre>
</li>
<li>
During the BS_DEV_ENUMERATE state, ramstage now display the device IDs
for the PCI devices on the bus.
</li>
</ol>
</li>
<li>Set CONFIG_DEBUG_BOOT_STATE=y in the .config file</li>
<li>
Debug the result until the PCI vendor and device IDs are displayed
during the BS_DEV_ENUMERATE state.
</li>
</ol>
<h3><a name="DeviceDrivers">PCI Device Drivers</a></h3>
<p>
PCI device drivers consist of a ".c" file which contains a "pci_driver" data
structure at the end of the file with the attribute tag "__pci_driver". This
attribute tag places an entry into a link time table listing the various
coreboot device drivers.
</p>
<p>
Specify the following fields in the table:
</p>
<ol>
<li>.vendor - PCI vendor ID value of the device</li>
<li>.device - PCI device ID value of the device or<br>
.devices - Address of a zero terminated array of PCI device IDs
</li>
<li>.ops - Operations table for the device. This is the address
of a "static struct device_operations" data structure specifying
the routines to execute during the different states and sub-states
of ramstage's processing.
</li>
<li>Turn on the device in mainboard/&lt;Vendor&gt;/&lt;Board&gt;/devicetree.cb</li>
<li>
Debug until the device is on and properly configured in coreboot and
usable by the payload
</li>
</ol>
<h4><a name="SubsystemIds">Subsystem IDs</a></h4>
<p>
PCI subsystem IDs are assigned during the BS_DEV_ENABLE state. The device
driver may use the common mechanism to assign subsystem IDs by adding
the ".ops_pci" to the pci_driver data structure. This field points to
a "struct pci_operations" that specifies a routine to set the subsystem
IDs for the device. The routine might look something like this:
</p>
<pre><code>static void pci_set_subsystem(struct device *dev, unsigned vendor, unsigned device)
{
if (!vendor || !device) {
vendor = pci_read_config32(dev, PCI_VENDOR_ID);
device = vendor >> 16;
}
printk(BIOS_SPEW,
"PCI: %02x:%02x:%d subsystem vendor: 0x%04x, device: 0x%04x\n",
0, PCI_SLOT(dev->path.pci.devfn), PCI_FUNC(dev->path.pci.devfn),
vendor & 0xffff, device);
pci_write_config32(dev, PCI_SUBSYSTEM_VENDOR_ID,
((device & 0xffff) << 16) | (vendor & 0xffff));
}
</code></pre>
<h3>Set up the <a name="MemoryMap">Memory Map</a></h3>
<p>
The memory map is built by the various PCI device drivers during the
BS_DEV_RESOURCES state of ramstage. The northcluster driver will typically
specify the DRAM resources while the other drivers will typically specify
the IO resources. These resources are hung off the struct device *data structure by
src/device/device_util.c/<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/device/device_util.c;hb=HEAD#l448">new_resource</a>.
</p>
<p>
During the BS_WRITE_TABLES state, coreboot collects these resources and
places them into a data structure identified by LB_MEM_TABLE.
</p>
<p>
Edit the device driver file:
</p>
<ol>
<li>
Implement a read_resources routine which calls macros defined in
src/include/device/<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/include/device/device.h;hb=HEAD#l237">device.h</a>
like:
<ul>
<li>ram_resource</li>
<li>reserved_ram_resource</li>
<li>bad_ram_resource</li>
<li>uma_resource</li>
<li>mmio_resource</li>
</ul>
</li>
</ol>
<p>
Testing: Verify that the resources are properly displayed by coreboot during the BS_WRITE_TABLES state.
</p>
<hr>
<h2><a name="AcpiTables">ACPI Tables</a></h2>
<p>
One of the payloads that needs ACPI tables is the EDK2 <a target="_blank" href="quark.html#CorebootPayloadPkg">CorebootPayloadPkg</a>.
</p>
<h3>FADT</h3>
<p>
The EDK2 module
CorebootModulePkg/Library/CbParseLib/<a target="_blank" href="https://github.com/tianocore/edk2/blob/master/CorebootModulePkg/Library/CbParseLib/CbParseLib.c#l450">CbParseLib.c</a>
requires that the FADT contains the values in the table below.
These values are placed into a HOB identified by
<a target="_blank" href="https://github.com/tianocore/edk2/blob/master/CorebootModulePkg/CorebootModulePkg.dec#l36">gUefiAcpiBoardInfoGuid</a>
by routine
CorebootModulePkg/CbSupportPei/CbSupportPei/<a target="_blank" href="https://github.com/tianocore/edk2/blob/master/CorebootModulePkg/CbSupportPei/CbSupportPei.c#l364">CbPeiEntryPoint</a>.
</p>
<table border="1">
<tr bgcolor="#c0ffc0">
<td>coreboot Field</td>
<td>EDK2 Field</td>
<td>gUefiAcpiBoardInfoGuid</td>
<td>Use</li>
<td>
<a target="_blank" href="http://www.uefi.org/sites/default/files/resources/ACPI_6.0.pdf">ACPI Spec.</a>
Section
</td>
</tr>
<tr>
<td>gpe0_blk<br>gpe0_blk_len</td>
<td>Gpe0Blk<br>Gpe0BlkLen</td>
<td>
<a target="_blank" href="https://github.com/tianocore/edk2/blob/master/CorebootModulePkg/Library/CbParseLib/CbParseLib.c#l477">PmGpeEnBase</a>
</td>
<td><a target="_blank" href="https://github.com/tianocore/edk2/blob/master/CorebootPayloadPkg/Library/ResetSystemLib/ResetSystemLib.c#l129">Shutdown</a></td>
<td>4.8.4.1</td>
</tr>
<tr>
<td>pm1a_cnt_blk</td>
<td>Pm1aCntBlk</td>
<td>PmCtrlRegBase</td>
<td>
<a target="_blank" href="https://github.com/tianocore/edk2/blob/master/CorebootPayloadPkg/Library/ResetSystemLib/ResetSystemLib.c#l139">Shutdown</a><br>
<a target="_blank" href="https://github.com/tianocore/edk2/blob/master/CorebootPayloadPkg/Library/ResetSystemLib/ResetSystemLib.c#l40">Suspend</a>
</td>
<td>4.8.3.2.1</td>
</tr>
<tr>
<td>pm1a_evt_blk</td>
<td>Pm1aEvtBlk</td>
<td>PmEvtBase</td>
<td><a target="_blank" href="https://github.com/tianocore/edk2/blob/master/CorebootPayloadPkg/Library/ResetSystemLib/ResetSystemLib.c#l134">Shutdown</a></td>
<td>4.8.3.1.1</td>
</tr>
<tr>
<td>pm_tmr_blk</td>
<td>PmTmrBlk</td>
<td>PmTimerRegBase</td>
<td>
<a target="_blank" href="https://github.com/tianocore/edk2/blob/master/CorebootPayloadPkg/Library/AcpiTimerLib/AcpiTimerLib.c#l55">Timer</a>
</td>
<td>4.8.3.3</td>
</tr>
<tr>
<td>reset_reg.</td>
<td>ResetReg.Address</td>
<td>ResetRegAddress</td>
<td>
<a target="_blank" href="https://github.com/tianocore/edk2/blob/master/CorebootPayloadPkg/Library/ResetSystemLib/ResetSystemLib.c#l71">Cold</a>
and
<a target="_blank" href="https://github.com/tianocore/edk2/blob/master/CorebootPayloadPkg/Library/ResetSystemLib/ResetSystemLib.c#l98">Warm</a>
resets
</td>
<td>4.3.3.6</td>
</tr>
<tr>
<td>reset_value</td>
<td>ResetValue</td>
<td>ResetValue</td>
<td>
<a target="_blank" href="https://github.com/tianocore/edk2/blob/master/CorebootPayloadPkg/Library/ResetSystemLib/ResetSystemLib.c#l71">Cold</a>
and
<a target="_blank" href="https://github.com/tianocore/edk2/blob/master/CorebootPayloadPkg/Library/ResetSystemLib/ResetSystemLib.c#l98">Warm</a>
resets
</td>
<td>4.8.3.6</td>
</tr>
</table>
<p>
The EDK2 data structure is defined in
MdeModulePkg/Include/IndustryStandard/<a target="_blank" href="https://github.com/tianocore/edk2/blob/master/MdePkg/Include/IndustryStandard/Acpi61.h#l111">Acpi61.h</a>
The coreboot data structure is defined in
src/arch/x86/include/arch/<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/arch/x86/include/acpi/acpi.h;hb=HEAD#l237">acpi.h</a>
</p>
<ol>
<li>
Select <a target="_blank" href="../Board/board.html#AcpiTables">HAVE_ACPI_TABLES</a>
in the board's Kconfig file
</li>
<li>Create a acpi.c module:
<ol type="A">
<li>Add the acpi_fill_fadt routine and initialize the values above</li>
</ol>
</li>
</ol>
<hr>
<h2><a name="LegacyHardware">Legacy Hardware</a></h2>
<p>
One of the payloads that needs legacy hardare is the EDK2 <a target="_blank" href="quark.html#CorebootPayloadPkg">CorebootPayloadPkg</a>.
</p>
<table border="1">
<tr bgcolor="c0ffc0">
<th>Peripheral</th>
<th>Use</th>
<th>8259 Interrupt Vector</th>
<th>IDT Base Offset</th>
<th>Interrupt Handler</th>
</tr>
<tr>
<td>
<a target="_blank" href="http://www.scs.stanford.edu/10wi-cs140/pintos/specs/8254.pdf">8254</a>
Programmable Interval Timer
</td>
<td>
EDK2: PcAtChipsetPkg/8254TimerDxe/<a target="_blank" href="https://github.com/tianocore/edk2/blob/master/PcAtChipsetPkg/8254TimerDxe/Timer.c">Timer.c</a>
</td>
<td>0</td>
<td>0x340</td>
<td>
<a target="_blank" href="https://github.com/tianocore/edk2/blob/master/PcAtChipsetPkg/8254TimerDxe/Timer.c#l71">TimerInterruptHandler</a>
</td>
</tr>
<tr>
<td>
<a target="_blank" href="https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0ahUKEwibxYKU3ZDLAhVOzWMKHfuqB40QFggcMAA&url=http%3A%2F%2Fbochs.sourceforge.net%2Ftechspec%2Fintel-8259a-pic.pdf.gz&usg=AFQjCNF1NT0OQ6ys1Pn6Iv9sv6cKRzZbGg&sig2=HfBszp9xTVO_fajjPWCsJw">8259</a>
Programmable Interrupt Controller
</td>
<td>
EDK2: PcAtChipsetPkg/8259InterruptControllerDxe/<a target="_blank" href="https://github.com/tianocore/edk2/blob/master/PcAtChipsetPkg/8259InterruptControllerDxe/8259.c">8259.c</a>
</td>
<td>
Master interrupts: 0, 2 - 7<br>
Slave interrupts: 8 - 15<br>
Interrupt vector 1 is never generated, the cascaded input generates interrupts 8 - 15
</td>
<td>
Master: 0x340, 0x350 - 0x378<br>
Slave: 0x380 - 0x3b8<br>
Interrupt descriptors are 8 bytes each
</td>
<td>&nbsp;</td>
</tr>
</table>
<hr>
<p>Modified: 4 March 2016</p>
</body>
</html>

View File

@@ -0,0 +1,377 @@
<!DOCTYPE html>
<html>
<head>
<title>Development</title>
</head>
<body>
<h1>Intel&reg; x86 coreboot/FSP Development Process</h1>
<p>
The x86 development process for coreboot is broken into the following components:
</p>
<ul>
<li>coreboot <a target="_blank" href="SoC/soc.html">SoC</a> development</li>
<li>coreboot <a target="_blank" href="Board/board.html">mainboard</a> development</li>
<li><a target="_blank" href="fsp1_1.html">FSP 1.1</a> integration</li>
</ul>
<p>
The development process has two main phases:
</p>
<ol>
<li>Minimal coreboot; This phase is single threaded</li>
<li>Adding coreboot features</li>
</ol>
<h2>Minimal coreboot</h2>
<p>
The combined steps below describe how to bring up a minimal coreboot for a
system-on-a-chip (SoC) and a development board:
</p>
<table>
<tr bgcolor="#ffffc0">
<td>The initial coreboot steps are single threaded!
The initial minimal FSP development is also single threaded.
Progress can speed up by adding more developers after the minimal coreboot/FSP
implementation reaches the payload.
</td>
</tr>
</table>
<ol>
<li>Get the necessary tools:
<ul>
<li>Linux: Use your package manager to install m4 bison flex and the libcurses development
package.
<ul>
<li>Ubuntu or other Linux distribution that use apt, run:
<pre><code>sudo apt-get install m4 bison flex libncurses5-dev
</code></pre>
</li>
</ul>
</li>
</ul>
</li>
<li>Build the cross tools for i386:
<ul>
<li>Linux:
<pre><code>make crossgcc-i386</code></pre>
To use multiple processors for the toolchain build (which takes a long time), use:
<pre><code>make crossgcc-i386 CPUS=N</code></pre>
where N is the number of cores to use for the build.
</li>
</ul>
</li>
<li>Get something to build:
<ol type="A">
<li><a target="_blank" href="fsp1_1.html#RequiredFiles">FSP 1.1</a> required files</li>
<li><a target="_blank" href="SoC/soc.html#RequiredFiles">SoC</a> required files</li>
<li><a target="_blank" href="Board/board.html#RequiredFiles">Board</a> required files</li>
</ol>
</li>
<li>Get result to start <a target="_blank" href="SoC/soc.html#Descriptor">booting</a></li>
<li><a target="_blank" href="SoC/soc.html#EarlyDebug">Early Debug</a></li>
<li>Implement and debug the <a target="_blank" href="SoC/soc.html#Bootblock">bootblock</a> code</li>
<li>Implement and debug the call to <a target="_blank" href="SoC/soc.html#TempRamInit">TempRamInit</a></li>
<li>Enable the serial port
<ol type="A">
<li>Power on, enable and configure GPIOs for the
<a target="_blank" href="Board/board.html#SerialOutput">debug serial UART</a>
</li>
<li>Add the <a target="_blank" href="SoC/soc.html#SerialOutput">serial outupt</a>
support to romstage
</li>
</ol>
</li>
<li>Enable <a target="_blank" href="fsp1_1.html#corebootFspDebugging">coreboot/FSP</a> debugging</li>
<li>Determine the <a target="_blank" href="SoC/soc.html#PreviousSleepState">Previous Sleep State</a></li>
<li>Enable DRAM:
<ol type="A">
<li>Implement the SoC
<a target="_blank" href="SoC/soc.html#MemoryInit">MemoryInit</a>
Support
</li>
<li>Implement the board support to read the
<a target="_blank" href="Board/board.html#SpdData">Memory Timing Data</a>
</li>
</ol>
</li>
<li>Disable the
<a target="_blank" href="SoC/soc.html#DisableShadowRom">Shadow ROM</a>
</li>
<li>Enable CONFIG_DISPLAY_MTRRS to verify the MTRR configuration</li>
<li>
Implement the .init routine for the
<a target="_blank" href="SoC/soc.html#ChipOperations">chip operations</a>
structure which calls FSP SiliconInit
</li>
<li>
Start ramstage's
<a target="_blank" href="SoC/soc.html#DeviceTree">device tree processing</a>
to display the PCI vendor and device IDs
</li>
<li>
Disable the
<a target="_blank" href="Board/board.html#DisablePciDevices">PCI devices</a>
</li>
<li>
Implement the
<a target="_blank" href="SoC/soc.html#MemoryMap">memory map</a>
</li>
<li>coreboot should now attempt to load the payload</li>
</ol>
<h2>Add coreboot Features</h2>
<p>
Most of the coreboot development gets done in this phase. Implementation tasks in this
phase are easily done in parallel.
</p>
<ul>
<li>Payload and OS Features:
<ul>
<li><a target="_blank" href="SoC/soc.html#AcpiTables">ACPI Tables</a></li>
<li><a target="_blank" href="SoC/soc.html#LegacyHardware">Legacy hardware</a> support</li>
</ul>
</li>
</ul>
<hr>
<table border="1">
<tr bgcolor="#c0ffc0">
<th colspan=3><h1>Features</h1></th>
</tr>
<tr bgcolor="#c0ffc0">
<th>SoC</th>
<th>Where</th>
<th>Testing</th>
</tr>
<tr>
<td>8254 Programmable Interval Timer</td>
<td><a target="_blank" href="SoC/soc.html#LegacyHardware">Legacy hardware</a> support</td>
<td><a target="_blank" href="SoC/quark.html#CorebootPayloadPkg">CorebootPayloadPkg</a> gets to shell prompt</td>
</tr>
<tr>
<td>8259 Programmable Interrupt Controller</td>
<td><a target="_blank" href="SoC/soc.html#LegacyHardware">Legacy hardware</a> support</td>
<td><a target="_blank" href="SoC/quark.html#CorebootPayloadPkg">CorebootPayloadPkg</a> gets to shell prompt</td>
</tr>
<tr>
<td>Cache-as-RAM</td>
<td>
<a target="_blank" href="SoC/soc.html#TempRamInit">Find</a>
FSP binary:
<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/drivers/intel/fsp1_1/cache_as_ram.inc;hb=HEAD#l38">cache_as_ram.inc</a><br>
Enable: FSP 1.1 <a target="_blank" href="SoC/soc.html#TempRamInit">TempRamInit</a>
called from
<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/drivers/intel/fsp1_1/cache_as_ram.inc;hb=HEAD#l73">cache_as_ram.inc</a><br>
Disable: FSP 1.1 TempRamExit called from
<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/drivers/intel/fsp1_1/after_raminit.S;hb=HEAD#l41">after_raminit.S</a><br>
</td>
<td>FindFSP: POST code 0x90
(<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/include/console/post_codes.h;hb=HEAD#l205">POST_FSP_TEMP_RAM_INIT</a>)
is displayed<br>
Enable: POST code
<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/drivers/intel/fsp1_1/cache_as_ram.inc;hb=HEAD#l151">0x2A</a>
is displayed<br>
Disable: CONFIG_DISPLAY_MTRRS=y, MTRRs displayed after call to TempRamExit
</td>
</tr>
<tr>
<td>Memory Map</td>
<td>
Implement a device driver for the
<a target="_blank" href="SoC/soc.html#MemoryMap">north cluster</a>
</td>
<td>coreboot displays the memory map correctly during the BS_WRITE_TABLES state</td>
</tr>
<tr>
<td>MTRRs</td>
<td>
Set values: src/drivers/intel/fsp1_1/stack.c/<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/drivers/intel/fsp1_1/stack.c;hb=HEAD#l42">setup_stack_and_mtrrs</a><br>
Load values: src/drivers/intel/fsp1_1/<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/drivers/intel/fsp1_1/after_raminit.S;hb=HEAD#l71">after_raminit.S</a>
</td>
<td>Set: Post code 0x91
(<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/include/console/post_codes.h;hb=HEAD#l213">POST_FSP_TEMP_RAM_EXIT</a>)
is displayed by
<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/drivers/intel/fsp1_1/after_raminit.S;hb=HEAD#l41">after_raminit.S</a><br>
Load: Post code 0x3C is displayed by
<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/drivers/intel/fsp1_1/after_raminit.S;hb=HEAD#l152">after_raminit.S</a><br>
and CONFIG_DISPLAY_MTRRS=y displays the correct memory regions</td>
</tr>
<tr>
<td>PCI Device Support</td>
<td>Implement a PCI <a target="_blank" href="SoC/soc.html#DeviceDrivers">device driver</a></td>
<td>The device is detected by coreboot and usable by the payload</td>
</tr>
<tr>
<td>Ramstage state machine</td>
<td>
Implement the chip and domain operations to start the
<a target="_blank" href="SoC/soc.html#DeviceTree">device tree</a>
processing
</td>
<td>
During the BS_DEV_ENUMERATE state, ramstage now display the device IDs
for the PCI devices on the bus.
</td>
</tr>
<tr>
<td>ROM Shadow<br>0x000E0000 - 0x000FFFFF</td>
<td>
Disable: src/soc/&lt;Vendor&gt;/&lt;Chip Family&gt;/romstage/romstage.c/<a target="_blank" href="SoC/soc.html#DisableShadowRom">soc_after_ram_init routine</a>
</td>
<td>Operates as RAM: Writes followed by a read to the 0x000E0000 - 0x000FFFFF region returns the value written</td>
</tr>
<tr bgcolor="#c0ffc0">
<th>Board</th>
<th>Where</th>
<th>Testing</th>
</tr>
<tr>
<td>Device Tree</td>
<td>
<a target="_blank" href="SoC/soc.html#DeviceTree">List</a> PCI vendor and device IDs by starting
the device tree processing<br>
<a target="_blank" href="Board/board.html#DisablePciDevices">Disable</a> PCI devices<br>
Enable: Implement a PCI <a target="_blank" href="SoC/soc.html#DeviceDrivers">device driver</a>
<td>
List: BS_DEV_ENUMERATE state displays PCI vendor and device IDs<br>
Disable: BS_DEV_ENUMERATE state shows the devices as disabled<br>
Enable: BS_DEV_ENUMERATE state shows the device as on and the device works for the payload
</td>
</tr>
<tr>
<td>DRAM</td>
<td>
Load SPD data: src/soc/mainboard/&lt;Vendor&gt;/&lt;Board&gt;/spd/<a target="_blank" href="Board/board.html#SpdData">spd.c</a><br>
UPD Setup:
<ul>
<li>src/soc&lt;Vendor&gt;//&lt;Chip Family&gt;/romstage/<a target="_blank" href="SoC/soc.html#MemoryInit">romstage.c</a></li>
<li>src/mainboard/&lt;Vendor&gt;/&lt;Board&gt;/<a target="_blank" href="Board/board.html#SpdData">romstage.c</a></li>
</ul>
FSP 1.1 MemoryInit called from src/drivers/intel/fsp1_1/<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/drivers/intel/fsp1_1/raminit.c;hb=HEAD#l126">raminit.c</a>
</td>
<td>Select the following Kconfig values
<ul>
<li>DISPLAY_HOBS</li>
<li>DISPLAY_UPD_DATA</li>
</ul>
Testing successful if:
<ul>
<li>MemoryInit UPD values are correct</li>
<li>MemoryInit returns 0 (success) and</li>
<li>The message "ERROR - coreboot's requirements not met by FSP binary!"
is not displayed
</li>
</ul>
</td>
</tr>
<tr>
<td>Serial Port</td>
<td>
SoC <a target="_blank" href="SoC/soc.html#SerialOutput">Support</a><br>
Enable: src/soc/mainboard/&lt;Board&gt;/com_init.c/<a target="_blank" href="Board/board.html#SerialOutput">car_mainboard_pre_console_init</a>
</td>
<td>Debug serial output works</td>
</tr>
<tr bgcolor="#c0ffc0">
<th>Payload</th>
<th>Where</th>
<th>Testing</th>
</tr>
<tr>
<td>ACPI Tables</td>
<td>
SoC <a target="_blank" href="SoC/soc.html#AcpiTables">Support</a><br>
</td>
<td>Verified by payload or OS</td>
</tr>
<tr bgcolor="#c0ffc0">
<th>FSP</th>
<th>Where</th>
<th>Testing</th>
</tr>
<tr>
<td>TempRamInit</td>
<td>FSP <a target="_blank" href="SoC/soc.html#TempRamInit">TempRamInit</a></td>
<td>FSP binary found: POST code 0x90
(<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/include/console/post_codes.h;hb=HEAD#l205">POST_FSP_TEMP_RAM_INIT</a>)
is displayed<br>
TempRamInit successful: POST code
<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/drivers/intel/fsp1_1/cache_as_ram.inc;hb=HEAD#l151">0x2A</a>
is displayed<br>
</td>
</tr>
<tr>
<td>MemoryInit</td>
<td><a target="_blank" href="SoC/soc.html#MemoryInit">SoC</a> support<br>
<a target="_blank" href="Board/board.html#SpdData">Board</a> support<br>
</td>
<td>Select the following Kconfig values
<ul>
<li>DISPLAY_HOBS</li>
<li>DISPLAY_UPD_DATA</li>
</ul>
Testing successful if:
<ul>
<li>MemoryInit UPD values are correct</li>
<li>MemoryInit returns 0 (success) and</li>
<li>The message "ERROR - coreboot's requirements not met by FSP binary!"
is not displayed
</li>
</ul>
</td>
</tr>
<tr>
<td>TempRamExit</td>
<td>src/drivers/intel/fsp1_1/<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/drivers/intel/fsp1_1/after_raminit.S;hb=HEAD#l51">after_raminit.S</a></td>
<td>Post code 0x91
(<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/include/console/post_codes.h;hb=HEAD#l212">POST_FSP_TEMP_RAM_EXIT</a>)
is displayed before calling TempRamExit by
<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/drivers/intel/fsp1_1/after_raminit.S;hb=HEAD#l141">after_raminit.S</a>,
CONFIG_DISPLAY_MTRRS=y displays the correct memory regions and
Post code 0x39 is displayed by
<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/drivers/intel/fsp1_1/after_raminit.S;hb=HEAD#l141">after_raminit.S</a><br>
</td>
</tr>
<tr>
<td>SiliconInit</td>
<td>
Implement the .init routine for the
<a target="_blank" href="SoC/soc.html#ChipOperations">chip operations</a> structure
</td>
<td>During BS_DEV_INIT_CHIPS state, SiliconInit gets called and returns 0x00000000</td>
</tr>
<tr>
<td>FspNotify</td>
<td>
The code which calls FspNotify is located in
src/drivers/intel/fsp1_1/<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/drivers/intel/fsp1_1/fsp_util.c;hb=HEAD#l182">fsp_util.c</a>.
The fsp_notify_boot_state_callback routine is called three times as specified
by the BOOT_STATE_INIT_ENTRY macros below the routine.
</td>
<td>
The FspNotify routines are called during:
<ul>
<li>BS_DEV_RESOURCES - on exit</li>
<li>BS_PAYLOAD_LOAD - on exit</li>
<li>BS_OS_RESUME - on entry (S3 resume)</li>
</ul>
</td>
</tr>
</table>
<hr>
<p>Modified: 4 March 2016</p>
</body>
</html>

View File

@@ -0,0 +1,79 @@
<!DOCTYPE html>
<html>
<head>
<title>FSP 1.1</title>
</head>
<body>
<h1>FSP 1.1</h1>
<h2>x86 FSP 1.1 Integration</h2>
<p>
Firmware Support Package (FSP) integration requires System-on-a-Chip (SoC)
and board support. The combined steps are listed
<a target="_blank" href="development.html">here</a>.
The development steps for FSP are listed below:
</p>
<ol>
<li><a href="#RequiredFiles">Required Files</a></li>
<li>Add the <a href="#FspBinary">FSP Binary File</a> to the coreboot File System</li>
<li>Enable <a href="#corebootFspDebugging">coreboot/FSP Debugging</a></li>
</ol>
<p>
FSP Documentation:
</p>
<ul>
<li>Intel&reg; Firmware Support Package External Architecture Specification <a target="_blank" href="http://www.intel.com/content/dam/www/public/us/en/documents/technical-specifications/fsp-architecture-spec-v1-1.pdf">V1.1</a></li>
</ul>
<hr>
<h2><a name="RequiredFiles">Required Files</a></h2>
<h3><a name="corebootRequiredFiles">coreboot Required Files</a></h3>
<ol>
<li>Create the following directories if they do not already exist:
<ul>
<li>src/vendorcode/intel/fsp/fsp1_1/&lt;Chip Family&gt;</li>
<li>3rdparty/blobs/mainboard/&lt;Board Vendor&gt;/&lt;Board Name&gt;</li>
</ul>
</li>
<li>
The following files may need to be copied from the FSP build or release into the
directories above if they are not present or are out of date:
<ul>
<li>FspUpdVpd.h: src/vendorcode/intel/fsp/fsp1_1/&lt;Chip Family&gt;/FspUpdVpd.h</li>
<li>FSP.bin: 3rdparty/blobs/mainboard/&lt;Board Vendor&gt;/&lt;Board Name&gt;/fsp.bin</li>
</ul>
</li>
</ol>
<hr>
<h2><a name="FspBinary">Add the FSP Binary File to coreboot File System</a></h2>
<p>
Add the FSP binary to the coreboot flash image using the following command:
</p>
<pre><code>util/cbfstool/cbfstool build/coreboot.rom add -t fsp -n fsp.bin -b &lt;base address&gt; -f fsp.bin</code></pre>
<p>
This command relocates the FSP binary to the 4K byte aligned location in CBFS so that the
FSP code for TempRamInit may be executed in place.
</p>
<hr>
<h2><a name="corebootFspDebugging">Enable coreboot/FSP Debugging</a></h2>
<p>
Set the following Kconfig values:
</p>
<ul>
<li>CONFIG_DISPLAY_FSP_ENTRY_POINTS - Display the FSP entry points in romstage</li>
<li>CONFIG_DISPLAY_HOBS - Display and verify the hand-off-blocks (HOBs) returned by MemoryInit</li>
<li>CONFIG_DISPLAY_VBT - Display Video BIOS Table (VBT) used for GOP</li>
<li>CONFIG_DISPLAY_UPD_DATA - Display the user specified product data passed to MemoryInit and SiliconInit</li>
</ul>
<hr>
<p>Modified: 17 May 2016</p>
</body>
</html>

View File

@@ -0,0 +1,128 @@
<!DOCTYPE html>
<html>
<head>
<title>Intel&reg; x86</title>
</head>
<body>
<h1>Intel&reg; x86</h1>
<h2>Intel&reg; x86 Boards</h2>
<ul>
<li><a target="_blank" href="Board/galileo.html">Galileo</a></li>
<li><a target="_blank" href="http://wiki.minnowboard.org/Coreboot">MinnowBoard MAX</a></li>
</ul>
<h2>Intel&reg; x86 SoCs</h2>
<ul>
<li><a target="_blank" href="SoC/quark.html">Quark&trade;</a></li>
</ul>
<hr>
<h2>x86 coreboot Development</h2>
<ul>
<li>Get the <a target="_blank" href="https://www.coreboot.org/Git">coreboot source</li>
<li><a target="_blank" href="development.html">Overall</a> development</li>
<li><a target="_blank" href="fsp1_1.html">FSP 1.1</a> integration
</li>
<li><a target="_blank" href="SoC/soc.html">SoC</a> support</li>
<li><a target="_blank" href="Board/board.html">Board</a> support</li>
</ul>
<hr>
<h2>Payload Development</h2>
<ul>
<li><a target="_blank" href="SoC/quark.html#CorebootPayloadPkg">CorebootPayloadPkg</a>
<ul>
<li><a target="_blank" href="https://github.com/tianocore/tianocore.github.io/wiki/EDK-II-Development-Process">EDK II Development Process</a></li>
<li>EDK II <a target="_blank" href="https://github.com/tianocore/tianocore.github.io/wiki/EDK%20II%20White%20papers">White Papers</a></li>
<li><a target="_blank" href="https://github.com/tianocore/tianocore.github.io/wiki/SourceForge-to-Github-Quick-Start">SourceForge to Github Quick Start</a></li>
<li>UEFI <a target="_blank" href="http://www.uefi.org/sites/default/files/resources/UEFI%20Spec%202_5_Errata_A.PDF">2.5 Errata A</a></li>
</ul>
</li>
</ul>
<hr>
<h2><a name="Documentation">Documentation</a></h2>
<ul>
<li>Intel&reg; 64 and IA-32 Architectures <a target="_blank" href="http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-manual-325462.pdf">Software Developer Manual</a></li>
<li><a target="_blank" href="http://www.uefi.org/specifications">UEFI Specifications</a></li>
</ul>
<h3><a name="Edk2Documentation">EDK-II Documentation</a></h3>
<ul>
<li>Build <a target="_blank" href="https://github.com/tianocore-docs/Docs/raw/master/Specifications/Build_Spec_1_26.pdf">V1.26</a></li>
<li>Coding Standards <a target="_blank" href="https://github.com/tianocore-docs/Docs/raw/master/Specifications/CCS_2_1_Draft.pdf">V2.1</a></li>
<li>DEC <a target="_blank" href="https://github.com/tianocore-docs/Docs/raw/master/Specifications/DEC_Spec_1_25.pdf">V1.25</a></li>
<li>DSC <a target="_blank" href="https://github.com/tianocore-docs/Docs/raw/master/Specifications/DSC_Spec_1_26.pdf">V1.26</a></li>
<li><a target="_blank" href="https://github.com/tianocore/tianocore.github.io/wiki/UEFI-Driver-Writer's-Guide">Driver Writer's Guide</a></li>
<li>Expression Syntax <a target="_blank" href="https://github.com/tianocore-docs/Docs/raw/master/Specifications/ExpressionSyntax_1.1.pdf">V1.1</a></li>
<li>FDF <a target="_blank" href="https://github.com/tianocore-docs/Docs/raw/master/Specifications/FDF_Spec_1_26.pdf">V1.26</a></li>
<li>INF <a target="_blank" href="https://github.com/tianocore-docs/Docs/raw/master/Specifications/INF_Spec_1_25.pdf">V1.25</a></li>
<li>PCD <a target="_blank" href="https://github.com/tianocore-docs/Docs/raw/master/Specifications/PCD_Infrastructure.pdf">PCD</a>V0.55</li>
<li>UNI <a target="_blank" href="https://github.com/tianocore-docs/Docs/raw/master/Specifications/UNI_File_Spec_v1_2_Errata_A.pdf">V1.2 Errata A</a></li>
<li>VRF <a target="_blank" href="https://github.com/tianocore-docs/Docs/raw/master/Specifications/VFR_1_9.pdf">V1.9</a></li>
</ul>
<h3><a name="FspDocumentation">FSP Documentation</a></h3>
<ul>
<li>Intel&reg; Firmware Support Package External Architecture Specification <a target="_blank" href="http://www.intel.com/content/dam/www/public/us/en/documents/technical-specifications/fsp-architecture-spec-v2.pdf">V2.0</a></li>
<li>Intel&reg; Firmware Support Package External Architecture Specification <a target="_blank" href="http://www.intel.com/content/dam/www/public/us/en/documents/technical-specifications/fsp-architecture-spec-v1-1.pdf">V1.1</a></li>
<li>Intel&reg; Firmware Support Package External Architecture Specification <a target="_blank" href="http://www.intel.com/content/dam/www/public/us/en/documents/technical-specifications/fsp-architecture-spec.pdf">V1.0</a></li>
</ul>
<h3><a name="FeatureDocumentation">Feature Documentation</a></h3>
<table border="1">
<tr bgcolor="#c0ffc0"><th>Feature/Specification</th><th>Linux View/Test</th><th>EDK-II View/Test</th></tr>
<tr>
<td><a target="_blank" href="https://en.wikipedia.org/wiki/E820">e820</a></td>
<td><a target="_blank" href="http://manpages.ubuntu.com/manpages/trusty/man1/dmesg.1.html">dmesg</a></td>
<td>&nbsp;</td>
</tr>
<tr>
<td><a target="_blank" href="http://www.uefi.org/specifications">ACPI</a></td>
<td><a target="_blank" href="http://manpages.ubuntu.com/manpages/precise/man1/acpidump.1.html">acpidump</a></td>
<td>&nbsp;</td>
</tr>
<tr>
<td><a target="_blank" href="https://en.wikipedia.org/wiki/Extended_Display_Identification_Data">EDID</a></td>
<td><a target="_blank" href="http://manpages.ubuntu.com/manpages/trusty/man1/get-edid.1.html">get-edid | parse-edid</a></td>
<td>&nbsp;</td>
</tr>
<tr>
<td><a target="_blank" href="http://www.nxp.com/documents/user_manual/UM10204.pdf">I2C</a></td>
<td><a target="_blank" href="http://manpages.ubuntu.com/manpages/trusty/man1/get-edid.1.html">i2cdetect</a></td>
<td>&nbsp;</td>
</tr>
<tr>
<td><a target="_blank" href="http://www.intel.com/design/archives/processors/pro/docs/242016.htm">Multiprocessor</a></td>
<td><a target="_blank" href="http://manpages.ubuntu.com/manpages/trusty/man1/lscpu.1.html">lscpu</a></td>
<td>&nbsp;</td>
</tr>
<tr>
<td><a target="_blank" href="https://pcisig.com/specifications">PCI</a></td>
<td><a target="_blank" href="http://manpages.ubuntu.com/manpages/trusty/man8/lspci.8.html">lspci</a></td>
<td><a target="_blank" href="http://www.uefi.org/sites/default/files/resources/UEFI_Shell_Spec_2_0.pdf">pci</a></td>
</tr>
<tr>
<td><a target="_blank" href="https://www.dmtf.org/sites/default/files/standards/documents/DSP0134_3.0.0.pdf">SMBIOS</a></td>
<td><a target="_blank" href="http://manpages.ubuntu.com/manpages/trusty/man8/dmidecode.8.html">dmidecode</a></td>
<td><a target="_blank" href="http://www.uefi.org/sites/default/files/resources/UEFI_Shell_Spec_2_0.pdf">smbiosview</a></td>
</tr>
<tr>
<td><a target="_blank" href="http://www.usb.org/developers/docs/">USB</a></td>
<td><a target="_blank" href="http://manpages.ubuntu.com/manpages/xenial/man8/lsusb.8.html">lsusb</a></td>
<td>&nbsp;</td>
</tr>
</table>
<hr>
<p>Modified: 18 June 2016</p>
</body>
</html>

View File

@@ -7,7 +7,7 @@ change.
\section{Scope}
This document defines how LinuxBIOS programmers can specify chips that
are used, specified, and initialized. The current scope is for superio
are used, specified, and initalized. The current scope is for superio
chips, but the architecture should allow for specification of other chips such
as southbridges. Multiple chips of same or different type are supported.

View File

@@ -1,98 +0,0 @@
# Background
CB:31250 ("soc/intel/cannonlake: Configure GPIOs again after FSP-S is
done") introduced a workaround in coreboot for `soc/intel/cannonlake`
platforms to save and restore GPIO configuration performed by
mainboard across call to FSP Silicon Init (FSP-S). This workaround was
required because FSP-S was configuring GPIOs differently than
mainboard resulting in boot and runtime issues because of
misconfigured GPIOs. This issue was observed on `google/hatch`
mainboard and was raised with Intel to get the FSP behavior
fixed. Until the fix in FSP was available, this workaround was used to
ensure that the mainboards can operate correctly and were not impacted
by the GPIO misconfiguration in FSP-S.
The issues observed on `google/hatch` mainboard were fixed by adding
(if required) and initializing appropriate FSP UPDs. This UPD
initialization ensured that FSP did not configure any GPIOs
differently than the mainboard configuration. Fixes included:
* CB:31375 ("soc/intel/cannonlake: Configure serial debug uart")
* CB:31520 ("soc/intel/cannonlake: Assign FSP UPDs for HPD and Data/CLK of DDI ports")
* CB:32176 ("mb/google/hatch: Update GPIO settings for SD card and SPI1 Chip select")
* CB:34900 ("soc/intel/cnl: Add provision to configure SD controller write protect pin")
With the above changes merged, it was verified on `google/hatch`
mainboard that the workaround for GPIO reconfiguration was not
needed. However, at the time, we missed dropping the workaround in
'soc/intel/cannonlake`. Currently, this workaround is used by the
following mainboards:
* `google/drallion`
* `google/sarien`
* `purism/librem_cnl`
* `system76/lemp9`
As verified on `google/hatch`, FSP v1263 included all UPD additions
that were required for addressing this issue.
# Proposal
* The workaround can be safely dropped from `soc/intel/cannonlake`
only after the above mainboards have verified that FSP-S does not
configure any pads differently than the mainboard in coreboot. Since
the fix included initialization of FSP UPDs correctly, the above
mainboards can use the following diff to check what pads change
after FSP-S has run:
```
diff --git a/src/soc/intel/common/block/gpio/gpio.c b/src/soc/intel/common/block/gpio/gpio.c
index 28e78fb366..0cce41b316 100644
--- a/src/soc/intel/common/block/gpio/gpio.c
+++ b/src/soc/intel/common/block/gpio/gpio.c
@@ -303,10 +303,10 @@ static void gpio_configure_pad(const struct pad_config *cfg)
/* Patch GPIO settings for SoC specifically */
soc_pad_conf = soc_gpio_pad_config_fixup(cfg, i, soc_pad_conf);
- if (CONFIG(DEBUG_GPIO))
+ if (soc_pad_conf != pad_conf)
printk(BIOS_DEBUG,
- "gpio_padcfg [0x%02x, %02zd] DW%d [0x%08x : 0x%08x"
- " : 0x%08x]\n",
+ "%d: gpio_padcfg [0x%02x, %02zd] DW%d [0x%08x : 0x%08x"
+ " : 0x%08x]\n", cfg->pad,
comm->port, relative_pad_in_comm(comm, cfg->pad), i,
pad_conf,/* old value */
cfg->pad_config[i],/* value passed from gpio table */
```
Depending upon the pads that are misconfigured by FSP-S, these
mainboards will have to set UPDs appropriately. Once this is verified
by the above mainboards, the workaround implemented in CB:31250 can be
dropped.
* The fix implemented in FSP/coreboot for `soc/intel/cannonlake`
platforms is not really the right long term solution for the
problem. Ideally, FSP should not be touching any GPIO configuration
and letting coreboot configure the pads as per mainboard
design. This recommendation was accepted and implemented by Intel
starting with Jasper Lake and Tiger Lake platforms using a single
UPD `GpioOverride` that coreboot can set so that FSP does not change
any GPIO configuration. However, this implementation is not
backported to any older platforms. Given the issues that we have
observed across different platforms, the second proposal is to:
- Add a Kconfig `CHECK_GPIO_CONFIG_CHANGES` that enables checks
in coreboot to stash GPIO pad configuration before various calls
to FSP and compares the configuration on return from FSP.
- This will have to be implemented as part of
drivers/intel/fsp/fsp2_0/ to check for the above config selection
and make callbacks `gpio_snapshot()` and `gpio_verify_snapshot()`
to identify and print information about pads that have changed
configuration after calls to FSP.
- This config can be kept disabled by default and mainboard
developers can enable them as and when required for debug.
- This will be helpful not just for the `soc/intel/cannonlake`
platforms that want to get rid of the above workaround, but also
for all future platforms using FSP to identify and catch any GPIO
misconfigurations that might slip in to any platforms (in case the
`GpioOverride` UPD is not honored by any code path within FSP).

View File

@@ -5,7 +5,7 @@
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
as those behind I2C or SPI busses (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.
@@ -20,62 +20,6 @@ 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
@@ -86,7 +30,7 @@ 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 "irq" = "ACPI_IRQ_WAKE_EDGE_LOW(GPP_A21_IRQ)"
register "wake" = "GPE0_DW0_21"
device i2c 15 on end
end
@@ -116,12 +60,12 @@ Scope (\_SB.PCI0.I2C0)
I2cSerialBusV2 (0x0015, ControllerInitiated, 400000,
AddressingMode7Bit, "\\_SB.PCI0.I2C0",
0x00, ResourceConsumer, , Exclusive, )
Interrupt (ResourceConsumer, Level, ActiveLow, ExclusiveAndWake, ,, )
Interrupt (ResourceConsumer, Edge, ActiveLow, ExclusiveAndWake, ,, )
{
0x0000002D,
}
})
Name (_S0W, ACPI_DEVICE_SLEEP_D3_HOT) // _S0W: S0 Device Wake State
Name (_S0W, 0x04) // _S0W: S0 Device Wake State
Name (_PRW, Package (0x02) // _PRW: Power Resources for Wake
{
0x15, // GPE #21
@@ -192,7 +136,7 @@ corresponds to **const char *desc** and in ASL:
It also adds the interrupt,
```
Interrupt (ResourceConsumer, Level, ActiveLow, ExclusiveAndWake, ,, )
Interrupt (ResourceConsumer, Edge, ActiveLow, ExclusiveAndWake, ,, )
{
0x0000002D,
}
@@ -201,15 +145,15 @@ It also adds the interrupt,
which comes from:
```
register "irq" = "ACPI_IRQ_WAKE_LEVEL_LOW(GPP_A21_IRQ)"
register "irq" = "ACPI_IRQ_WAKE_EDGE_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).
The GPIO pin IRQ settings control the "Edge", "ActiveLow", and
"ExclusiveAndWake" settings seen above (edge means it is an edge-triggered
interrupt as opposed to level-triggered; active low means the interrupt is
triggered on a falling edge).
Note that the ACPI_IRQ_WAKE_LEVEL_LOW macro informs the platform that the GPIO
Note that the ACPI_IRQ_WAKE_EDGE_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
@@ -252,7 +196,7 @@ 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_.
which in this case is 4, representing _D3cold_.
### _PRW (Power Resources for Wake)
_PRW indicates the power resources and events required for wake. There are no

View File

@@ -84,6 +84,15 @@ the raw Rx gpio value.
## Implementation Details
ACPI library in coreboot will provide weak definitions for all the
above functions with error messages indicating that these functions
are being used. This allows drivers to conditionally make use of GPIOs
based on device-tree entries or any other config option. It is
recommended that the SoC code in coreboot should provide
implementations of all the above functions generating ACPI AML code
irrespective of them being used in any driver. This allows mainboards
to use any drivers and take advantage of this common infrastructure.
Platforms are restricted to using Local5, Local6 and Local7 variables
only in implementations of the above functions. Any AML methods called
by the above functions do not have any such restrictions on use of
@@ -150,6 +159,7 @@ for the GPIO.
*/
acpigen_write_if_and(Local5, TX_BIT);
acpigen_write_store_args(ONE_OP, LOCAL0_OP);
acpigen_pop_len();
acpigen_write_else();
acpigen_write_store_args(ZERO_OP, LOCAL0_OP);
acpigen_pop_len();

View File

@@ -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.
@@ -63,33 +65,3 @@ The reference implementation is
* Test how well CAR works with x86_64 and paging
* Improve mode switches
* Test libgfxinit / VGA Option ROMs / FSP
## Known bugs on real hardware
According to Intel x86_64 mode hasn't been validated in CAR environments.
Until now it could be verified on various Intel platforms and no issues have
been found.
## Known bugs on KVM enabled qemu
The `x86_64` reference code runs fine in qemu soft-cpu, but has serious issues
when using KVM mode on some machines. The workaround is to *not* place
page-tables in ROM, as done in
[CB:49228](https://review.coreboot.org/c/coreboot/+/49228).
Here's a list of known issues:
* After entering long mode, the FPU doesn't work anymore, including accessing
MMX registers. It works fine before entering long mode. It works fine when
switching back to protected mode. Other registers, like SSE registers, are
working fine.
* Reading from virtual memory, when the page tables are stored in ROM, causes
the MMU to abort the "page table walking" mechanism when the lower address
bits of the virtual address to be translated have a specific pattern.
Instead of loading the correct physical page, the one containing the
page tables in ROM will be loaded and used, which breaks code and data as
the page table doesn't contain the expected data. This in turn leads to
undefined behaviour whenever the 'wrong' address is being read.
* Disabling paging in compatibility mode crashes the CPU.
* Returning from long mode to compatibility mode crashes the CPU.
* Entering long mode crashes on AMD host platforms.

View File

@@ -1,30 +1,16 @@
# Coding Style
This document describes the preferred C coding style for the
This is a short document describing the preferred 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](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
individual instances when there are good practical reasons to do so, and
reviewers are in agreement.
Please at least consider the points made here.
Any style questions that are not mentioned in here should be decided
between the author and reviewers on a case-by-case basis. When modifying
existing files, authors should try to match the prevalent style in that
file -- otherwise, they should try to match similar existing files in
coreboot.
First off, I'd suggest printing out a copy of the GNU coding standards,
and NOT read it. Burn them, it's a great symbolic gesture.
Bulk style changes to existing code ("cleanup patches") should avoid
changing existing style choices unless they actually violate this style
guide, or there is broad consensus that the new version is an
improvement. By default the style choices of the original author should
be honored. (Note that `checkpatch.pl` is not part of this style guide,
and neither is `clang-format`. These tools can be useful to find
potential issues or simplify formatting in new submissions, but they
were not designed to directly match this guide and may have false
positives. They should not be bulk-applied to change existing code.)
Anyway, here goes:
## Indentation
@@ -544,7 +530,7 @@ than desirable (in fact, they are worse than random typing - an infinite
number of monkeys typing into GNU emacs would never make a good program).
So, you can either get rid of GNU emacs, or change it to use saner values.
To do the latter, you can stick the following in your .emacs file:
To do the latter, you can stick the following in your .emacs file:
```lisp
(defun c-lineup-arglist-tabs-only (ignored)
@@ -801,7 +787,7 @@ There are a LOT of cpu cycles that can go into these 5 milliseconds.
A reasonable rule of thumb is to not put inline at functions that have
more than 3 lines of code in them. An exception to this rule are the
cases where a parameter is known to be a compile time constant, and as a
cases where a parameter is known to be a compiletime constant, and as a
result of this constantness you *know* the compiler will be able to
optimize most of your function away at compile time. For a good example
of this later case, see the kmalloc() inline function.
@@ -848,53 +834,22 @@ 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 or the ERR_PTR mechanism to report failure.
Headers and includes
---------------
Don't re-invent the kernel macros
----------------------------------
Headers should always be included at the top of the file. Includes should
always use the `#include <file.h>` notation, except for rare cases where a file
in the same directory that is not part of a normal include path gets included
(e.g. local headers in mainboard directories), which should use `#include
"file.h"`. Local "file.h" includes should always come separately after all
<file.h> includes. Headers that can be included from both assembly files and
.c files should keep all C code wrapped in `#ifndef __ASSEMBLER__` blocks,
including includes to other headers that don't follow that provision. Where a
specific include order is required for technical reasons, it should be clearly
documented with comments.
Files should generally include every header they need a definition from
directly (and not include any unnecessary extra headers). Excepted from
this are certain headers that intentionally chain-include other headers
which logically belong to them and are just factored out into a separate
location for implementation or organizatory reasons. This could be
because part of the definitions is generic and part SoC-specific (e.g.
`<gpio.h>` chain-including `<soc/gpio.h>`), architecture-specific (e.g.
`<device/mmio.h>` chain-including `<arch/mmio.h>`), separated out into
commonlib[/bsd] for sharing/license reasons (e.g. `<cbfs.h>`
chain-including `<commonlib/bsd/cbfs_serialized.h>`) or just split out
to make organizing subunits of a larger header easier. This can also
happen when certain definitions need to be in a specific header for
legacy POSIX reasons but we would like to logically group them together
(e.g. `uintptr_t` is in `<stdint.h>` and `size_t` in `<stddef.h>`, but
it's nicer to be able to just include `<types.h>` and get all the common
type and helper function stuff we need everywhere).
The headers `<kconfig.h>`, `<rules.h>` and `<commonlib/bsd/compiler.h>`
are always automatically included in all compilation units by the build
system and should not be included manually.
Don't re-invent common macros
-----------------------------
The header file `src/commonlib/bsd/include/commonlib/bsd/helpers.h`
contains a number of macros that you should use, rather than explicitly
coding some variant of them yourself. For example, if you need to
calculate the length of an array, take advantage of the macro
The header file include/linux/kernel.h contains a number of macros that
you should use, rather than explicitly coding some variant of them
yourself. For example, if you need to calculate the length of an array,
take advantage of the macro
```c
#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
```
There are also min() and max() macros that do strict type checking if
you need them. Feel free to peruse that header file to see what else is
already defined that you shouldn't reproduce in your code.
Editor modelines and other cruft
--------------------------------
@@ -960,55 +915,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

View File

@@ -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/)

View File

@@ -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

View File

@@ -11,29 +11,8 @@ You can subscribe on its
read its
[archives](https://mail.coreboot.org/hyperkitty/list/coreboot@coreboot.org/).
## Real time chat
## IRC
We also have a real time chat room on [IRC](ircs://irc.libera.chat/#coreboot),
also bridged to [Matrix](https://matrix.to/#/#coreboot:libera.chat) and a
[Discord](https://discord.gg/JqT8NM5Zbg) presence. You can also find us on
[OSF Slack](https://osfw.slack.com/), which has channels on many open source
firmware related topics. Slack requires that people come from specific domains
or are explicitly invited. To work around that, there's an
[invite bot](https://slack.osfw.dev/) to let people in.
## Fortnightly coreboot leadership meeting
There's a leadership meeting held every 14 days (currently every other
Wednesday at 10am Pacific Time, usually 18:00 UTC with some deviation
possible due to daylight saving time related shifts). The meeting
is open to everyone and provides a forum to discuss general coreboot
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/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
access to the document is limited to adding comments - any desired
agenda item added that way will be approved in time before the meeting.
We also have a
[real time chat](https://webchat.freenode.net?channels=%23coreboot)
on the Freenode IRC network's #coreboot channel.

View File

@@ -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)

View File

@@ -1,6 +1,6 @@
# Accounts on coreboot.org
There are a number of places where you can benefit from creating an account
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.

View File

@@ -185,7 +185,7 @@ texinfo_documents = [
enable_auto_toc_tree = True
class MyCommonMarkParser(CommonMarkParser):
# remove this hack once upstream RecommonMark supports inline code
# remove this hack once upsteam RecommonMark supports inline code
def visit_code(self, mdnode):
from docutils import nodes
n = nodes.literal(mdnode.literal, mdnode.literal)

View File

@@ -1,275 +0,0 @@
# Google Summer of Code
## 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.
Felix Singer, David Hendricks and Martin Roth are the coreboot GSoC admins for
2022. Please feel free to reach out to them directly if you have any questions.
## 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]
## 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 [easy 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

View File

@@ -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)

View File

@@ -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.
## Easy 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 easy 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/untested-coreboot-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,
@@ -84,6 +66,25 @@ across architectures.
### Mentors
* Timothy Pearson <tpearson@raptorengineering.com>
## Add Kernel Address Sanitizer functionality to coreboot
The Kernel Address Sanitizer (KASAN) is a runtime dynamic memory error detector.
The idea is to check every memory access (variables) for its validity
during runtime and find bugs like stack overflow or out-of-bounds accesses.
Implementing this stub into coreboot like "Undefined behavior sanitizer support"
would help to ensure code quality and make the runtime code more robust.
### Requirements
* knowledge in the coreboot build system and the concept of stages
* the KASAN feature can be improved in a way so that the memory space needed
during runtime is not on a fixed address provided during compile time but
determined during runtime. For this to achieve a small patch to the GCC will
be helpful. Therefore minor GCC knowledge would be beneficial.
* Implementation can be initially done in QEMU and improved on different
mainboards and platforms
### Mentors
* Werner Zeh <werner.zeh@gmx.net>
## 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
@@ -220,9 +221,9 @@ Build an open source replacement written in Golang using existing tools
and libraries, consisting of a backend, a frontend and client side
scripts. The backend should connect to an SQL database with can be
controlled using a RESTful API. The RESTful API should have basic authentication
for management tasks and new board status uploads.
for managment tasks and new board status uploads.
At least one older test result should be kept in the database.
At least one older test result should be keept in the database.
The frontend should use established UI libraries or frameworks (for example
Angular) to display the current board status, that is if it's working or not

View File

@@ -8,24 +8,28 @@ and those providing after-market firmware to extend the usefulness of devices.
## Hardware shipping with coreboot
### NovaCustom laptops
### Purism
[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.
[Purism](https://www.puri.sm) sells laptops with a focus on user privacy and
security; part of that effort is to minimize the amount of proprietary and/or
binary code. Their laptops ship with a blob-free OS and coreboot firmware
with a neutralized Intel Management Engine (ME) and SeaBIOS as the payload.
### ChromeOS Devices
All ChromeOS devices ([Chromebooks](https://chromebookdb.com/), Chromeboxes,
Chromebit, etc) released from 2012 onward use coreboot for their main system
firmware. Additionally, starting with the 2013 Chromebook Pixel, the firmware
running on the Embedded Controller (EC) a small microcontroller which provides
functions like battery management, keyboard support, and sensor interfacing
running on the Embedded Controller (EC - a small microcontroller which provides
functions like battery management, keyboard support, and sensor interfacing)
is open source as well.
### Libretrend
[Libretrend](https://libretrend.com) sells the Librebox, a NUC-like PC which
ships with coreboot firmware.
### PC Engines APUs
[PC Engines](https://pcengines.ch) designs and sells embedded PC hardware that
@@ -33,27 +37,6 @@ 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 Tianocore 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.
### Purism
[Purism](https://www.puri.sm) sells laptops with a focus on user privacy and
security; part of that effort is to minimize the amount of proprietary and/or
binary code. Their laptops ship with a blob-free OS and coreboot firmware
with a neutralized Intel Management Engine (ME) and SeaBIOS as the payload.
## After-market firmware
### Libreboot
@@ -63,15 +46,6 @@ 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.
### MrChromebox
[MrChromebox](https://mrchromebox.tech/) provides upstream coreboot firmware

View 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

View File

@@ -311,19 +311,3 @@ table for a given temperature threshold.
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
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
can be defined as below mentioned example and can be used any variable between
[0], [1],...,[5]. Platform vendors can enable and use this for specific platform
by defining OEM variables macro under board variant.
Example:
```C
register "oem_data.oem_variables" = "{
[1] = 0x6,
[3] = 0x1
}"
```

View File

@@ -2,11 +2,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.
they allow to easily reuse existing code accross platforms.
* [Intel DPTF](dptf.md)
* [IPMI KCS](ipmi_kcs.md)
* [SMMSTORE](smmstore.md)
* [SoundWire](soundwire.md)
* [SMMSTOREv2](smmstorev2.md)
* [USB4 Retimer](retimer.md)

View File

@@ -375,7 +375,7 @@ chip and can be decoded for this table with the codec datasheet and board schema
* @version: SoundWire specification version from &enum soundwire_version.
* @link_id: Zero-based SoundWire Link Number.
* @unique_id: Unique ID for multiple devices.
* @manufacturer_id: Manufacturer ID from include/mipi/ids.h.
* @manufacturer_id: Manufacturer ID from include/device/mipi_ids.h.
* @part_id: Vendor defined part ID.
* @class: MIPI class encoding in &enum mipi_class.
*/

View File

Before

Width:  |  Height:  |  Size: 5.0 KiB

After

Width:  |  Height:  |  Size: 5.0 KiB

View File

Before

Width:  |  Height:  |  Size: 4.5 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

View File

@@ -0,0 +1,111 @@
# Flashing firmware tutorial
Updating the firmware is possible using the **internal method**, where the updates
happen from a running system, or using the **external method**, where the system
is in a shut down state and an external programmer is attached to write into the
flash IC.
## Contents
* [Flashing internaly](int_flashrom.md)
* [Flashing firmware standalone](ext_standalone.md)
* [Flashing firmware externally supplying direct power](ext_power.md)
* [Flashing firmware externally without supplying direct power](no_ext_power.md)
## General advice
* It's recommended to only flash the BIOS region.
* Always verify the firmware image.
* If you flash externally and have transmission errors:
* Use short wires
* Reduce clock frequency
* Check power supply
* Make sure that there are no other bus masters (EC, ME, SoC, ...)
## Internal method
This method using [flashrom] is available on many platforms, as long as they
aren't locked down.
There are various protection schemes that make it impossible to modify or
replace a firmware from a running system. coreboot allows to disable these
mechanisms, making it possible to overwrite (or update) the firmware from a
running system.
Usually you must use the **external method** once to install a retrofitted
coreboot and then you can use the **internal method** for future updates.
There are multiple ways to update the firmware:
* Using flashrom's *internal* programmer to directly write into the firmware
flash IC, running on the target machine itself
* A proprietary software to update the firmware, running on the target machine
itself
* A UEFI firmware update capsule
More details on flashrom's
* [internal programmer](int_flashrom.md)
## External method
External flashing is possible on many platforms, but requires disassembling
the target hardware. You need to buy a flash programmer, that
exposes the same interface as your flash IC (likely SPI).
Please also have a look at the mainboard-specific documentation for details.
After exposing the firmware flash IC, read the schematics and use one of the
possible methods:
* [Flashing firmware standalone](ext_standalone.md)
* [Flashing firmware externally supplying direct power](ext_power.md)
* [Flashing firmware externally without supplying direct power](no_ext_power.md)
**WARNING:** Using the wrong method or accidentally using the wrong pinout might
permanently damage your hardware!
**WARNING:** Do not rely on dots *painted* on flash ICs to orient the pins!
Any dots painted on flash ICs may only indicate if they've been tested. Dots
that appear in datasheets to indicate pin 1 correspond to some kind of physical
marker, such as a drilled hole, or one side being more flat than the other.
## Using a layout file
On platforms where the flash IC is shared with other components you might want
to write only a part of the flash IC. On Intel for example there are IFD, ME and
GBE which don't need to be updated to install coreboot.
To make [flashrom] only write the *bios* region, leaving Intel ME and Intel IFD
untouched, you can use a layout file, which can be created with ifdtool and a backup
of the original firmware.
```bash
ifdtool -f rom.layout backup.rom
```
and looks similar to:
```
00000000:00000fff fd
00500000:00bfffff bios
00003000:004fffff me
00001000:00002fff gbe
```
By specifying *-l* and *-i* [flashrom] writes a single region:
```bash
flashrom -l rom.layout -i bios -w coreboot.rom -p <programmer>
```
## Using an IFD to determine the layout
flashrom version 1.0 supports reading the layout from the IFD (first 4KiB of
the ROM). You don't need to manually specify a layout it, but it only works
under the following conditions:
* Only available on Intel ICH7+
* There's only one flash IC when flashing externally
```bash
flashrom --ifd -i bios -w coreboot.rom -p <programmer>
```
**TODO** explain FMAP regions, normal/fallback mechanism, flash lock mechanisms
[flashrom]: https://www.flashrom.org/Flashrom

View File

@@ -19,7 +19,7 @@ time). The file gcov-io.c is unchanged.
+#define BITS_PER_UNIT 8
+#define LONG_LONG_TYPE_SIZE 64
+
+/* There are many gcc_assertions. Set the value to 1 if we want a warning
+/* There are many gcc_assertions. Set the vaule to 1 if we want a warning
+ message if the assertion fails. */
+#ifndef ENABLE_ASSERT_CHECKING
+#define ENABLE_ASSERT_CHECKING 1

View File

@@ -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
@@ -41,7 +41,7 @@ The bootblock loads the romstage or the verstage if verified boot is enabled.
### Cache-As-Ram
The *Cache-As-Ram*, also called Non-Eviction mode, or *CAR* allows to use the
CPU cache like regular SRAM. This is particullary useful for high level
CPU cache like regular SRAM. This is particullary usefull for high level
languages like `C`, which need RAM for heap and stack.
The CAR needs to be activated using vendor specific CPU instructions.
@@ -85,7 +85,7 @@ The ramstage does the main device init:
* CPU init (like set up SMM)
After initialization tables are written to inform the payload or operating system
about the current hardware existence and state. That includes:
about the current hardware existance and state. That includes:
* ACPI tables (x86 specific)
* SMBIOS tables (x86 specific)

View File

@@ -193,10 +193,8 @@ the wip flag:
* 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:
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:
@@ -322,47 +320,6 @@ is criticising your code, but the whole idea is to get better code into our
codebase. Again, this also applies in the other direction: review code,
criticize code, but dont make it personal.
Gerrit user roles
-----------------
There are a few relevant roles a user can have on Gerrit:
- The anonymous user can check out source code.
- A registered user can also comment and give "+1" and "-1" code reviews.
- A reviewer can also give "+2" code reviews.
- A core developer can also give "-2" (that is, blocking) code reviews
and submit changes.
Anybody can register an account on our instance, using either an
OpenID provider or OAuth through GitHub or Google.
The reviewer group is still quite open: Any core developer can add
registered users to that group and should do so once some activity
(commits, code reviews, and so on) has demonstrated rough knowledge
of how we handle things.
A core developer should be sufficiently well established in the
community so that they feel comfortable when submitting good patches,
when asking for improvements to less good patches and reasonably
uncomfortable when -2'ing patches. They're typically the go-to
person for _some_ part of the coreboot tree and ideally listed as its
maintainer in our MAINTAINERS registry. To become part of this group,
a candidate developer who already demonstrated proficiency with the
code base as a reviewer should be nominated, by themselves or others,
at the regular [coreboot leadership meetings](../community/forums.md)
where a decision is made.
Core developers are expected to use their privileges for the good of the
project, which includes any of their own coreboot development but also beyond
that. They should make sure that [ready changes] don't linger around needlessly
just because their authors aren't well-connected with core developers but
submit them if they went through review and generally look reasonable. They're
also expected to help clean-up breakage as a result of their submissions.
Since the project expects some activity by core developers, long-term absence
(as in "years") can lead to removal from the group, which can easily be
reversed after they come back.
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

View File

@@ -115,44 +115,6 @@ variant's override table.
This configuration is often hooked into the mainboard's `enable_dev` callback,
defined in its `struct chip_operations`.
## Unconnected and unused pads
In digital electronics, it is generally recommended to tie unconnected GPIOs to
a defined signal like VCC or GND by setting their direction to output, adding an
external pull resistor or configuring an internal pull resistor. This is done to
prevent floating of the pin state, which can cause various issues like EMI,
higher power usage due to continuously switching logic, etc.
On Intel PCHs from Sunrise Point onwards, termination of unconnected GPIOs is
explicitly not required, when the input buffer is disabled by setting the bit
`GPIORXDIS` which effectively disconnects the pad from the internal logic. All
pads defaulting to GPIO mode have this bit set. However, in the mainboard's
GPIO configuration the macro `PAD_NC(pad, NONE)` can be used to explicitly
configure a pad as unconnected.
In case there are no schematics available for a board and the vendor set a
pad to something like `GPIORXDIS=1`, `GPIOTXDIS=1` with an internal pull
resistor, an unconnected or otherwise unused pad can be assumed. In this case it
is recommended to keep the pull resistor, because the external circuit might
rely on it.
Unconnected pads defaulting to a native function (input and output) usually
don't need to be configured as GPIO with the `GPIORXDIS` bit set. For clarity
and documentation purpose the macro may be used as well for them.
Some pads configured as native input function explicitly require external
pull-ups when being unused, according to the PDGs:
- eDP_HPD
- SMBCLK/SMBDATA
- SML0CLK/SML0DATA/SML0ALERT
- SATAGP*
When the board was designed correctly, nothing needs to be done for them
explicitly, while using `PAD_NC(pad, NONE)` can act as documentation. If such a
pad is missing the external pull resistor due to bad board design, the pad
should be configured with `PAD_NC(pad, NONE)` anyway to disconnect it
internally.
## Potential issues (gotchas!)
There are a couple of configurations that you need to especially careful about,
@@ -162,97 +124,8 @@ 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
(FIT), can influence some pads' default mode. It is possible to select either a
native function or GPIO mode for some pads on non-server SoCs, while on server
SoCs most pads can be controlled. Thus, it is generally recommended to always
configure all pads and don't just rely on the defaults mentioned in the
datasheet(s) which might not reflect what the vendor configured.
## Pad-related known issues and workarounds
### LPC_CLKRUNB blocks S0ix states when board uses eSPI
When using eSPI, the pad implementing `LPC_CLKRUNB` must be set to GPIO mode.
Other pin settings i.e. Rx path enable/disable, Tx path enable/disable, pull up
enable/disable etc are ignored. Leaving this pin in native mode will keep the
LPC Controller awake and prevent S0ix entry. This issues is know at least on
Apollolake and Geminilake.
The other configuration option to watch out for deals with unconnected GPIOs.
If no pullup or pulldown is declared with these, they may end up "floating",
i.e., not at logical high or logical low. This can cause problems such as
unwanted power consumption or not reading the pin correctly, if it was intended
to be strapped.

View File

@@ -4,5 +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)

View File

@@ -55,6 +55,10 @@ command line.
- savedefconfig - Creates a defconfig file, stripping out all of the symbols
that were left as default values. This is very useful for debugging, and is
how config files should be saved.
- silentoldconfig - This evaluates the .config file the same way that the
oldconfig target does, but does not print out each question as it is
evaluated. It still stops to query the user if an option with no answer in
the .config file is found.
### Targets not typically used in coreboot
@@ -603,7 +607,7 @@ int &lt;expr&gt; \[if &lt;expr&gt;\]
##### Example:
config PRE_GRAPHICS_DELAY_MS
config PRE_GRAPHICS_DELAY
int "Graphics initialization delay in ms"
default 0
help
@@ -786,7 +790,7 @@ select &lt;symbol&gt; \[if &lt;expr&gt;\]
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
@@ -1188,7 +1192,7 @@ https://github.com/martinlroth/language-kconfig
## Syntax Checking:
The Kconfig utility does some basic syntax checking on the Kconfig tree.
Running "make oldconfig" will show any errors that the Kconfig utility
Running "make silentoldconfig" will show any errors that the Kconfig utility
sees.
### util/kconfig_lint

View File

@@ -6,7 +6,7 @@
That said please always try to write documentation! One problem in the
firmware development is the missing documentation. In this document
you will get a brief introduction how to write, submit and publish
documentation to coreboot.
documenation to coreboot.
## Preparations
@@ -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

View File

@@ -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
@@ -19,7 +19,7 @@ way to categorize anything required by the SoC but not provided by coreboot.
| IFD Region | IFD Region name | FMAP Name | Notes |
| index | | | |
+============+==================+===========+===========================================+
| 0 | Flash Descriptor | SI_DESC | Always the top 4 KiB of flash |
| 0 | Flash Descriptor | SI_DESC | Always the top 4KB of flash |
+------------+------------------+-----------+-------------------------------------------+
| 1 | BIOS | SI_BIOS | This is the region that contains coreboot |
+------------+------------------+-----------+-------------------------------------------+
@@ -40,9 +40,9 @@ way to categorize anything required by the SoC but not provided by coreboot.
The ifdtool can be used to manipulate a firmware image with a IFD. This tool
will not take into account the FMAP while modifying the image which can lead to
unexpected and hard to debug issues with the firmware image. For example if the
ME region is defined at 6 MiB in the IFD but the FMAP only allocates 4 MiB for
the ME, then when the ME is added by the ifdtool 6 MiB will be written which
could overwrite 2 MiB of the BIOS.
ME region is defined at 6 MB in the IFD but the FMAP only allocates 4 MB for the
ME, then when the ME is added by the ifdtool 6 MB will be written which could
overwrite 2 MB of the BIOS.
In order to validate that the FMAP and the IFD are compatible the ifdtool
provides --validate (-t) option. `ifdtool -t` will read both the IFD and the
@@ -75,4 +75,4 @@ Region mismatch between pd and SI_PDR
FMAP area SI_PDR:
offset: 0x007fc000
length: 0x00004000
```
```

View File

@@ -45,12 +45,6 @@ to the payload), but it's also a value that is deeply ingrained in the
project. We fearlessly rip out parts of the architecture and remodel it
when a better way of doing the same was identified.
That said, since there are attempts to coerce coreboot to move in various
directions by outside "standardization", long-established practices of
coreboot as well as aligned projects can be documented as best practices,
making them standards in their own right. However we reserve the right to
retire them as the landscape shifts around us.
### One tree for everything
Another difference to various other firmware projects is that we try
@@ -168,8 +162,14 @@ Contents:
* [Getting Started](getting_started/index.md)
* [Tutorial](tutorial/index.md)
* [Contributing](contributing/index.md)
* [Community](community/index.md)
* [Coding Style](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)
@@ -183,12 +183,9 @@ Contents:
* [Mainboard](mainboard/index.md)
* [Payloads](lib/payloads/index.md)
* [Libraries](lib/index.md)
* [Options](lib/option.md)
* [Security](security/index.md)
* [SuperIO](superio/index.md)
* [Vendorcode](vendorcode/index.md)
* [Utilities](util.md)
* [Project infrastructure & services](infrastructure/index.md)
* [Boards supported in each release directory](releases/boards_supported_on_branches.md)
* [Release notes](releases/index.md)
* [Documentation License](documentation_license.md)
* [Release notes for past releases](releases/index.md)
* [Flashing firmware tutorial](flash_tutorial/index.md)

View File

@@ -1,401 +0,0 @@
# Jenkins builder setup and configuration
## How to set up a new jenkins builder
### Contact a jenkins admin
Let a jenkins admin know that youre 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.
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
gives the container root access to the build machine. See
[this article](https://blog.trendmicro.com/trendlabs-security-intelligence/why-running-a-privileged-container-in-docker-is-a-bad-idea/)
about why this is discouraged.
It's recommended that you give an admin root access on your machine so
that they can reset it in case of a failure. This is not a requirement,
as the system can just be disabled until someone is available to fix any
issues.
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.
#### Current Build Machines
To give an idea of what a suitable build machine might be, currently the
coreboot project has 4 active jenkins build machines.
These times are taken from the week of Feb 21 - Feb 28, 2022
* Congenialbuilder - 128 threads, 256GiB RAM
* Fastest Passing coreboot gerrit build: 6 min, 47 sec
* Slowest Passing coreboot gerrit build: 14 min
* Gleefulbuilder - 64 threads, 64GiB RAM
* Fastest Passing coreboot gerrit build: 10 min
* Slowest Passing coreboot gerrit build: 46 min
* Fabulousbuilder - 64 threads, 64GiB RAM
* Fastest Passing coreboot gerrit build: 7 min, 56 sec
* Slowest Passing coreboot gerrit build: 56 min (No ccache)
* Ultron (9elements) - 48 threads, 128GiB RAM
* Fastest Passing coreboot gerrit build: 12
* Slowest Passing coreboot gerrit build: 58 min
### Jenkins Builds
There are a number of builds handled by the coreboot jenkins builders,
for a number of different projects - coreboot, flashrom, memtest86+,
em100, etc. Many of these have builders for their current master branch
as well as Gerrit and [Coverity](coverity.md) builds.
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.
*[coreboot gerrit build](https://qa.coreboot.org/job/coreboot-gerrit/)
([Time trend](https://qa.coreboot.org/job/coreboot-gerrit/buildTimeTrend))
*[coreboot master build](https://qa.coreboot.org/job/coreboot/)
([Time trend](https://qa.coreboot.org/job/coreboot/buildTimeTrend))
### Stress test the machine
Test the machine to make sure that building won't stress the hardware
too much. Install stress-ng, then run the stress test for at least an
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
```
You can watch the temperature with the sensors package or with acpi -t
if your machine supports that.
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
```
If the machine throttles or resets, you probably need to upgrade the
cooling system.
## jenkins-server docker installation
### Manual Installation
If youve met all the above requirements, and an admin has agreed to set
up the builder in jenkins, youre ready to go on to the next steps.
### Set up your network so jenkins can talk to the container
Expose a local port through any firewalls you might have on your router.
This would generally be in the port forwarding section, and you'd just
forward a port (typically 49151) from the internet directly to the
builders IP address.
You might also want to set up a port to forward to port 22 on your
machine and set up openssh so you or the jenkins admins can manage
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}
```
#### Set up environment variables
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 location of where the jenkins cache directory will be.
export COREBOOT_JENKINS_CACHE_DIR="/srv/docker/coreboot-builder/cache"
# Set the name of the container
export COREBOOT_JENKINS_CONTAINER="coreboot_jenkins"
```
Make sure any variables needed are set in your environment before
continuing to the next step.
### Using the Makefile for docker installation
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
coreboot-jenkins-node - Build coreboot-jenkins-node container
upload-coreboot-jenkins-node - Upload coreboot-jenkins-node to hub.docker.com
doc.coreboot.org - Build doc.coreboot.org container
clean-coreboot-containers - Remove all docker coreboot containers
clean-coreboot-images - Remove all docker coreboot images
docker-clean - Remove docker coreboot containers & images
Commands for using docker images
docker-build-coreboot - Build coreboot under coreboot-sdk
<BUILD_CMD=target>
docker-abuild - Run abuild under coreboot-sdk
<ABUILD_ARGS='-a -B'>
docker-what-jenkins-does - Run 'what-jenkins-does' target
docker-shell - Bash prompt in coreboot-jenkins-node
<USER=root or USER=coreboot>
docker-jenkins-server - Run coreboot-jenkins-node image (for server)
docker-jenkins-attach - Open shell in running jenkins server
docker-build-docs - Build the documentation
docker-livehtml-docs - Run sphinx-autobuild
Variables:
COREBOOT_JENKINS_PORT=49151
COREBOOT_JENKINS_CACHE_DIR=/srv/docker/coreboot-builder/cache
COREBOOT_JENKINS_CONTAINER=coreboot_jenkins
COREBOOT_IMAGE_TAG=f2741aa632f
DOCKER_COMMIT=65718760fa
```
### Install the coreboot jenkins builder
```sh
make -C util/docker docker-jenkins-server
```
Your installation is complete on your side.
### Tell the Admins that the machine is set up
Let the admins know that the builder is set up so they can set up the
machine profile on qa.coreboot.org.
They need to know:
* Your external IP address or domain name. If you dont have a static
IP, make sure you have a dynamic dns hostname configured.
* The port on your machine and firewall thats exposed for jenkins:
`$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.
### 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
is getting filled up and the entire coreboot repo gets downloaded. As
the ccache gets populated, the build time will drop.
## Additional Information
### 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
```
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
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.
### 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.
```
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
```
#### Getting ready to push the docker images
Set up an account on hub.docker.com
Get an admin to add the account to the coreboot team on hub.docker.com
[https://hub.docker.com/u/coreboot/dashboard/teams/?team=owners](https://hub.docker.com/u/coreboot/dashboard/teams/?team=owners)
Make sure your credentials are configured on your host machine by
running
```sh
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
wont be able to push the images.
#### Updating the Dockerfiles
The coreboot-sdk Dockerfile will need to be updated when any additional
dependencies are added. Both the coreboot-sdk and the
coreboot-jenkins-node Dockerfiles will need to be updated to the new
version number and git commit id anytime the toolchain is updated. Both
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
```sh
make -C util/docker coreboot-sdk
```
This takes a relatively long time.
#### 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
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
Run:
```sh
make -C util/docker docker-jenkins-server
make -C util/docker docker-jenkins-attach
```
#### Running the build directly
From the coreboot directory:
```sh
make -C util/docker docker-build-coreboot
```
Youll 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
When youre satisfied with the testing, push the coreboot-sdk image to
the hub.docker.com
```sh
make -C util/docker upload-coreboot-sdk
```
#### Building and pushing the coreboot-jenkins-node docker image
This docker image is pretty simple, so theres 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
```
### Coverity Setup
To run coverity jobs, the builder needs to have the tools available, and
to be marked as a coverity builder.
#### Set up the Coverity tools
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)
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
```
Let the admins know that the coverity label can be added to the
builder.

View File

@@ -1,103 +0,0 @@
# Coverity Scan for open source firmware
## Whats 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, thats 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 its not a very
good one. Its possible to mark identified issues as valid or invalid,
and annotate them with metadata which CLs fix them. The latter isnt
strictly necessary because Coverity Scan simply marks issues it cant
find anymore as fixed, but at times it helped identify issues that made
a comeback.
### Alternatives
Theres also clangs scan-build, which is fully open-source, and
finds different issues. As such, its less of an alternative and more
of a complement.
Theres 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 theres 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-builds 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.

View File

@@ -1,12 +0,0 @@
# Project infrastructure & services
This section contains documentation about our infrastructure
## Services
* [Project services](services.md)
## Jenkins builders and builds
* [Setting up Jenkins build machines](builders.md)
* [Coverity Scan integration](coverity.md)

View File

@@ -17,8 +17,7 @@ something else) should have its own Flashmap section, and everything else should
normally go into CBFS.
The Flashmap itself starts with a header `struct fmap` and followed by a list of
section descriptions in `struct fmap_area`. All fields in those structures are
in little endian format.
section descriptions in `struct fmap_area`.
### Header
The header `struct fmap` has following fields:

View File

@@ -121,48 +121,12 @@ Each field is defined by providing the field name and the start and end bit mark
location in the bitmask. Field names must be at least three characters long in order to
satisfy the sconfig parser requirements and they must be unique with non-overlapping masks.
field <name> <start-bit> <end-bit> [option...] end
field <name> <start-bit> <end-bit> [option...] end
For single-bit fields only one number is needed:
field <name> <bit> [option...] end
A field definition can also contain multiple sets of bit masks, which can be dis-contiguous.
They are treated as if they are contiguous when defining option values. This allows for
extending fields even after the bits after its current masks are occupied.
field <name> <start-bit0> <end-bit0> | <start-bit1> <end-bit1> | ...
For example, if more audio options need to be supported:
field AUDIO 3 3
option AUDIO_0 0
option AUDIO_1 1
end
field OTHER 4 4
...
end
the following can be done:
field AUDIO 3 3 | 5 5
option AUDIO_FOO 0
option AUDIO_BLAH 1
option AUDIO_BAR 2
option AUDIO_BAZ 3
end
field OTHER 4 4
...
end
In that case, the AUDIO masks are extended like so:
#define FW_CONFIG_FIELD_AUDIO_MASK 0x28
#define FW_CONFIG_FIELD_AUDIO_OPTION_AUDIO_FOO_VALUE 0x0
#define FW_CONFIG_FIELD_AUDIO_OPTION_AUDIO_BLAH_VALUE 0x8
#define FW_CONFIG_FIELD_AUDIO_OPTION_AUDIO_BAR_VALUE 0x20
#define FW_CONFIG_FIELD_AUDIO_OPTION_AUDIO_BAz_VALUE 0x28
Each `field` definition starts a new block that can be composed of zero or more field options,
and it is terminated with `end`.

View File

@@ -1,31 +0,0 @@
# Option API
The option API around the `set_option(const char *name, void *val)` and
`get_option(void *dest, const char *name)` functions deprecated in favor
of a type-safe API.
Historically, options were stored in RTC battery-backed CMOS RAM inside
the chipset on PC platforms. Nowadays, options can also be stored in the
same flash chip as the boot firmware or through some BMC interface.
The new type-safe option framework can be used by calling
`enum cb_err set_uint_option(const char *name, unsigned int value)` and
`unsigned int get_uint_option(const char *name, const unsigned int fallback)`.
The default setting is `OPTION_BACKEND_NONE`, which disables any runtime
configurable options. If supported by a mainboard, the `USE_OPTION_TABLE`
and `USE_MAINBOARD_SPECIFIC_OPTION_BACKEND` choices are visible, and can
be selected to enable runtime configurability.
# Mainboard-specific option backend
Mainboards with a mainboard-specific (vendor-defined) method to access
options can select `HAVE_MAINBOARD_SPECIFIC_OPTION_BACKEND` to provide
implementations of the option API accessors. To allow choosing between
multiple option backends, the mainboard-specific implementation should
only be built when `USE_MAINBOARD_SPECIFIC_OPTION_BACKEND` is selected.
Where possible, using a generic, mainboard-independent mechanism should
be preferred over reinventing the wheel in mainboard-specific code. The
mainboard-specific approach should only be used when the option storage
mechanism has to satisfy externally-imposed, vendor-defined constraints.

View File

@@ -25,7 +25,7 @@ The section must be named in order to be found by the FIT parser:
## Architecture specifics
The FIT parser needs architecture support.
The FIT parser needs architecure support.
### aarch32
The source code can be found in `src/arch/arm/fit_payload.c`.

View File

@@ -99,7 +99,7 @@ exist and an entry structure to hold variable number of entries.
### entries
This field holds the details of each timestamp entry, up to a maximum
This field holds the details of each timestamp entry, upto a maximum
of `MAX_TIMESTAMP_CACHE` which is defined as 16 entries. Each entry is
defined by:

View File

@@ -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.

View File

@@ -43,7 +43,7 @@ Three items are marked in this picture
+---------------------+--------------------+
| Size | 8 MiB |
+---------------------+--------------------+
| Flash programming | dediprog header |
| Flash programing | dediprog header |
+---------------------+--------------------+
| Package | SOIC-8 |
+---------------------+--------------------+

View File

@@ -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

View File

@@ -1,174 +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
- SeaBIOS 1.14.0 and 1.15.0 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.

View File

@@ -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

View File

@@ -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

View File

@@ -2,7 +2,9 @@
This page describes how to run coreboot on the [ASUS P5Q] desktop board.
## Working
## TODO
The following things are working in this coreboot port:
+ PCI slots
+ PCI-e slots
@@ -13,21 +15,20 @@ This page describes how to run coreboot on the [ASUS P5Q] desktop board.
+ All 4 DIMM slots
+ S3 suspend and resume
+ Red SATA ports
+ Fan control through the W83667HG chip
+ FireWire
## Not working
The following things are still missing from this coreboot port:
+ PS/2 mouse support
+ PATA aka IDE (because of buggy IDE controller)
+ Fan profiles with Q-Fan
+ Fan control (will be working on 100% power)
+ TPM module (support not implemented)
## Untested
The following things are untested on this coreboot port:
+ S/PDIF
+ CD Audio In
+ Floppy disk drive
+ FireWire: PCI device shows up and driver loads, no further test
## Flashing coreboot
@@ -72,63 +73,5 @@ You can flash coreboot into your motherboard using [this guide].
+------------------+---------------------------------------------------+
```
## Controlling fans
With vendor firmware, the P5Q uses the ATK0110 ACPI device to control its fans
according to the parameters configured in the BIOS setup menu. With coreboot,
one can instead control the Super I/O directly as described in the
[kernel docs]:
+ pwm1 controls fan1 (CHA_FAN1) and fan4 (CHA_FAN2)
+ pwm2 controls fan2 (CPU_FAN)
+ fan3 (PWR_FAN) cannot be controlled
+ temp1 (board) can be used to control fan1 and fan4
+ temp2 (CPU) can be used to control fan2
### Manual fan speed
These commands set the chassis fans to a constant speed:
# Use PWM output
echo 1 >/sys/class/hwmon/hwmon2/pwm1_mode
# Set to manual mode
echo 1 >/sys/class/hwmon/hwmon2/pwm1_enable
# Set relative speed: 0 (stop) to 255 (full)
echo 150 >/sys/class/hwmon/hwmon2/pwm1
### Automatic fan speed
The W83667HG can adjust fan speeds when things get too warm. These settings will
control the chassis fans:
# Set to "Thermal Cruise" mode
echo 2 >/sys/class/hwmon/hwmon2/pwm1_enable
# Target temperature: 60°C
echo 60000 >/sys/class/hwmon/hwmon2/pwm1_target
# Minimum fan speed when spinning up
echo 135 >/sys/class/hwmon/hwmon2/pwm1_start_output
# Minimum fan speed when spinning down
echo 135 >/sys/class/hwmon/hwmon2/pwm1_stop_output
# Tolerance: 2°C
echo 2000 >/sys/class/hwmon/hwmon2/pwm1_tolerance
# Turn fans off after 600 seconds when below defined range
echo 600000 >/sys/class/hwmon/hwmon2/pwm1_stop_time
You can also control the CPU fan with similar rules:
# Switch to "Thermal Cruise" mode
echo 2 >/sys/class/hwmon/hwmon2/pwm2_enable
# Target temperature: 55°C
echo 55000 >/sys/class/hwmon/hwmon2/pwm2_target
# Minimum fan speed when spinning down
echo 50 >/sys/class/hwmon/hwmon2/pwm2_stop_output
# Rate of fan speed change
echo 50 >/sys/class/hwmon/hwmon2/pwm2_step_output
# Maximum fan speed
echo 200 >/sys/class/hwmon/hwmon2/pwm2_max_output
# Tolerance: 2°C
echo 2000 >/sys/class/hwmon/hwmon2/pwm1_tolerance
[ASUS P5Q]: https://www.asus.com/Motherboards/P5Q
[this guide]: ../../tutorial/flashing_firmware/int_flashrom.md
[kernel docs]: https://www.kernel.org/doc/Documentation/hwmon/w83627ehf.rst
[this guide]: https://doc.coreboot.org/flash_tutorial/int_flashrom.html

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

View File

@@ -1,94 +0,0 @@
# ASUS P8C WS
This page describes how to run coreboot on the [ASUS P8H77-V].
## Flashing coreboot
```eval_rst
+---------------------+----------------+
| Type | Value |
+=====================+================+
| Socketed flash | yes |
+---------------------+----------------+
| Model | W25Q64FVA1Q |
+---------------------+----------------+
| Size | 8 MiB |
+---------------------+----------------+
| Package | DIP-8 |
+---------------------+----------------+
| Write protection | no |
+---------------------+----------------+
| Dual BIOS feature | no |
+---------------------+----------------+
| Internal flashing | yes |
+---------------------+----------------+
```
The flash IC is located beside the SATA ports (circled):
![](p8c_ws.jpg)
### How to flash
Unlike ordinary desktop boards, the BIOS version 3202 of ASUS P8C WS does not
apply any write protection, so the main SPI flash can be accessed using
[flashrom], and the whole flash is writable.
The following command may be used to flash coreboot. (To do so, linux kernel
should be started with `iomem=relaxed`)
```
# flashrom -p internal -w coreboot.rom
```
The flash chip is a socketed DIP-8 SPI flash, so it's also easy to remove and
flash externally.
## Working
- Intel Xeon E3-1225 V2 with 4 M391B1G73BH0-YK0 UDIMMs, ECC confirmed active
- PS/2 keyboard with SeaBIOS 1.14.0 and Debian GNU/Linux with kernel 5.10.40
- Both Onboard NIC
- S3 Suspend to RAM
- USB2 on rear and front panel connectors
- USB3
- Integrated SATA
- CPU Temp sensors (tested PSensor on GNU/Linux)
- LPC TPM on TPM-header (tested tpm-tools with TPM 1.2 Infineon SLB9635TT12)
- Native raminit
- Integrated graphics with libgfxinit (both analog and digital output from DVI-I)
- Nvidia Quadro 600 in all PCIe-16x slots
- Compex WLM200NX (Qualcomm Atheros AR9220) in PCI slot
- Onboard IEEE1394 controller under PCI bus
- Debug output from serial port
## Untested
- EHCI debugging
- S/PDIF audio
- PS/2 mouse
- LPT port
## Technology
```eval_rst
+------------------+--------------------------------------------------+
| Northbridge | :doc:`../../northbridge/intel/sandybridge/index` |
+------------------+--------------------------------------------------+
| Southbridge | bd82x6x |
+------------------+--------------------------------------------------+
| CPU | model_206ax |
+------------------+--------------------------------------------------+
| Super I/O | Nuvoton NCT6776F |
+------------------+--------------------------------------------------+
| EC | None |
+------------------+--------------------------------------------------+
| Coprocessor | Intel Management Engine |
+------------------+--------------------------------------------------+
```
## Extra resources
- [Flash chip datasheet][W25Q64FVA1Q]
[ASUS P8C WS]: https://www.asus.com/supportonly/p8c_ws/helpdesk_knowledge/
[W25Q64FVA1Q]: https://www.winbond.com/resource-files/w25q64fv%20revs%2007182017.pdf
[flashrom]: https://flashrom.org/Flashrom

View File

@@ -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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

View File

@@ -1,81 +0,0 @@
# ASUS P8Z77-V
This page describes how to run coreboot on the [ASUS P8H77-V].
## Flashing coreboot
```eval_rst
+---------------------+----------------+
| Type | Value |
+=====================+================+
| Socketed flash | yes |
+---------------------+----------------+
| Model | W25Q64FVA1Q |
+---------------------+----------------+
| Size | 8 MiB |
+---------------------+----------------+
| Package | DIP-8 |
+---------------------+----------------+
| Write protection | yes |
+---------------------+----------------+
| Dual BIOS feature | no |
+---------------------+----------------+
| Internal flashing | no |
+---------------------+----------------+
```
The flash IC is located beside the SATA ports (circled):
![](p8z77-v.jpg)
### How to flash
The main SPI flash cannot be written because the vendor firmware disables BIOSWE
and enables BLE/SMM_BWP flags in BIOS_CNTL for their latest BIOSes. An external
programmer is required. You must flash standalone, flashing in-circuit doesn't
work. The flash chip is socketed, so it's easy to remove and reflash.
## Working
- PS/2 keyboard with SeaBIOS 1.14.0 and Debian GNU/Linux with kernel 5.10.28
- Integrated Ethernet NIC
- S3 Suspend to RAM
- USB2 on rear and front panel connectors
- USB3
- Integrated SATA
- CPU Temp sensors (tested PSensor on GNU/Linux)
- Native raminit
- Integrated graphics with libgfxinit (VGA/DVI-D/HDMI tested and working)
- PCIe in PCIe-16x slots
- Debug output from serial port
## Untested
- EHCI debugging
- S/PDIF audio
- PS/2 mouse
## 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 P8H77-V]: https://www.asus.com/supportonly/p8h77v/helpdesk_knowledge/
[W25Q64FVA1Q]: https://www.winbond.com/resource-files/w25q64fv%20revs%2007182017.pdf
[flashrom]: https://flashrom.org/Flashrom

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

View File

@@ -1,112 +0,0 @@
# ASUS P8Z77-V
This page describes how to run coreboot on the [ASUS P8Z77-V].
## Flashing coreboot
```eval_rst
+---------------------+----------------+
| Type | Value |
+=====================+================+
| Socketed flash | yes |
+---------------------+----------------+
| Model | W25Q64FVA1Q |
+---------------------+----------------+
| Size | 8 MiB |
+---------------------+----------------+
| Package | DIP-8 |
+---------------------+----------------+
| Write protection | yes |
+---------------------+----------------+
| Dual BIOS feature | no |
+---------------------+----------------+
| Internal flashing | no |
+---------------------+----------------+
```
The flash IC is located between the black and white PCI Express x16 slots (circled):
![](p8z77-v.jpg)
### How to flash
The main SPI flash cannot be written because the vendor firmware disables BIOSWE
and enables BLE/SMM_BWP flags in BIOS_CNTL for their latest BIOSes. An external
programmer is required. You must flash standalone, flashing in-circuit doesn't
work. The flash chip is socketed, so it's easy to remove and reflash.
## Working
- PS/2 keyboard with SeaBIOS 1.14.0 and Debian GNU/Linux with kernel 5.10.28
- Integrated Ethernet NIC
- S3 Suspend to RAM
- USB2 on rear and front panel connectors
- USB3 (Z77's and ASMedia's works)
- Integrated SATA of Z77
- Integrated SATA of ASM1061 (works under GNU/Linux but not under SeaBIOS)
- CPU Temp sensors (tested PSensor on GNU/Linux)
- TPM on TPM-header (tested tpm-tools with TPM 1.2 Infineon SLB9635TT12)
- Native raminit
- Integrated graphics with libgfxinit (VGA/DVI-D/HDMI tested and working)
- PCIe in PCIe-16x/8x slots (tested using an S3 Matrix GPU)
- Debug output from serial port
- Atheros AR9485 half-height mini PCIe WNIC adapted with Wi-Fi Go! Adapter
- Default PCIe config (PCIEX_16_3 as 1x, PCIe Port 4 to ASM1061 SATA, see below
for other potential options)
## Untested
- EHCI debugging
- S/PDIF audio
- PS/2 mouse
## Not working
- PCIEX_1_2 (expected under default PCIe config)
- Other PCIe configs (see below)
## PCIe config
On Asus vendor firmware, other than the default config already supported here,
there remain another two configs: "PCIEX_16_3 as x4, with PCIEX_1_1, PCIEX_1_2
and onboard ASM1061 disabled" and "PCIEX_16_3 as x1, but PCIe Port 4 to PCIEX_1_2,
with onboard ASM1061 disabled".
Configuring PCIEX_16_3 as x4 needs to program 0x3 to the LSB of PCHSTRP9, but
also needs to configure GPIOs in the Super I/O chip different than the default
config in this board's override tree.
Configuring PCIe Port 4 to PCIEX_1_2 needs to configure GPIOs in the Super I/O
chip differently than the default config.
I have tried a lot, but sadly I am unable to produce the same result as the vendor
firmware.
## Asus Wi-Fi Go!
Asus Wi-Fi Go! has several versions. P8Z77-V has the earliest version.
See [Asus Wi-Fi Go! v1].
## 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-V]: https://www.asus.com/supportonly/p8z77v/helpdesk_knowledge/
[W25Q64FVA1Q]: https://www.winbond.com/resource-files/w25q64fv%20revs%2007182017.pdf
[flashrom]: https://flashrom.org/Flashrom
[Asus Wi-Fi Go! v1]: ./wifigo_v1.md

View File

@@ -1,40 +0,0 @@
# Asus Wi-Fi Go! v1
In this version, a standard half-length mPCIe card is mounted on the Asus Wi-Fi
Go! daughter board, and the daughter board is connected to the motherboard
through a proprietary 16-1 pin connector.
![](wifigo_v1_connector.jpg)
I managed to grope the most pinout of the proprietary connector.
See [Mini PCIe pinout] for more info.
```eval_rst
+------------+----------+-----------+------------+----------+-----------+
| WIFIGO Pin | Usage | mPCIe pin | WIFIGO Pin | Usage | mPCIe pin |
+============+==========+===========+============+==========+===========+
| 1 | 3.3v | (many) | 2 | REFCLK- | 11 |
+------------+----------+-----------+------------+----------+-----------+
| 3 | GND | (many) | 4 | REFCLK+ | 13 |
+------------+----------+-----------+------------+----------+-----------+
| 5 | WAKE# | 1 | 6 | PERn0 | 23 |
+------------+----------+-----------+------------+----------+-----------+
| 7 | (absent) | | 8 | PERp0 | 25 |
+------------+----------+-----------+------------+----------+-----------+
| 9 | GND | | 10 | PETn0 | 31 |
+------------+----------+-----------+------------+----------+-----------+
| 11 | PERST# | 20 | 12 | PETp0 | 33 |
+------------+----------+-----------+------------+----------+-----------+
| 13 | GND | | 14 | (USBD-?) | (36?) |
+------------+----------+-----------+------------+----------+-----------+
| 15 | 3.3v | | 16 | (USBD+?) | (38?) |
+------------+----------+-----------+------------+----------+-----------+
```
There are two kinds of daughter boards using this connector. One among them has
one MMCX antenna connector, the other has two antenna connectors and USB lane
wired (this kind may be called BT Go!). I can only obtain the former, so I
cannot confirm the exact way the USB data lane gets wired.
![](wifigo_v1_board.jpg)
## Extra resources
[Mini PCIe pinout]: https://pinoutguide.com/Slots/mini_pcie_pinout.shtml

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

View File

@@ -1,5 +1,5 @@
# QEMU AArch64 emulator
This page describes how to build and run coreboot for QEMU/AArch64.
This page discribes how to build and run coreboot for QEMU/AArch64.
You can use LinuxBoot via `make menuconfig` or an arbitrary FIT image
as a payload for QEMU/AArch64.

View File

@@ -15,7 +15,7 @@ processor supports x86_64 instructions (long mode).
The qemu-i440fx mainboard has been ported to x86_64 and will serve as
reference platform to enable additional platforms.
To enable the support set the Kconfig option ``CONFIG_USE_EXP_X86_64_SUPPORT=y``.
To enable the support set the Kconfig option ``CONFIG_CPU_QEMU_X86_64=y``.
## Installing qemu

View File

@@ -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`.

View File

@@ -15,7 +15,7 @@ processor supports x86_64 instructions (long mode).
The qemu-q35 mainboard has been ported to x86_64 and will serve as
reference platform to enable additional platforms.
To enable the support set the Kconfig option ``CONFIG_USE_EXP_X86_64_SUPPORT=y``.
To enable the support set the Kconfig option ``CONFIG_CPU_QEMU_X86_64=y``.
## Installing qemu

View File

@@ -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`

View File

@@ -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

View File

@@ -41,8 +41,8 @@ These can be extracted from the original flash image as follows:
00003000:006FFFFF me
00001000:00002fff gbe
```
3) Use `ifdtool -n <layout_file> <flash_image>` to resize the *bios* region from the default 6 MiB
to 9 MiB, this is required to create sufficient space for LinuxBoot.
3) Use `ifdtool -n <layout_file> <flash_image>` to resize the *bios* region from the default 6MB
to 9 MB, this is required to create sufficient space for LinuxBoot.
NOTE: Please make sure only the firmware descriptor (*fd*) region is changed. Older versions
of the ifdtool corrupt the *me* region.
4) Use `ifdtool -x <resized_flash_image>` to extract the components.

View File

@@ -1,283 +0,0 @@
# Gigabyte GA-G41M-ES2L rev 1.1
This page describes how to use coreboot on the [Gigabyte GA-G41M-ES2L rev 1.1](https://www.gigabyte.com/Motherboard/GA-G41M-ES2L-rev-11) mainboard.
This motherboard [also works with Libreboot](https://libreboot.org/docs/install/ga-g41m-es2l.html).
## Technology
```eval_rst
+------------------+--------------------------------------------------+
| Type | Value |
+==================+==================================================+
| BIOS flash chips | 2 x SST25VF080B (8 Mbit SPI) (DUAL BIOS) |
+------------------+--------------------------------------------------+
| Northbridge | Intel G41 |
+------------------+--------------------------------------------------+
| Southbridge | Intel ICH7 |
+------------------+--------------------------------------------------+
| CPU socket | LGA775 |
+------------------+--------------------------------------------------+
| RAM | 2 x DDR2 800, max. 8 GiB |
+------------------+--------------------------------------------------+
| SuperIO | ITE IT8718F-S |
+------------------+--------------------------------------------------+
| Audio | Realtek ALC888B |
+------------------+--------------------------------------------------+
| Network | Realtek RTL8111C PCIe Gigabit Ethernet |
+------------------+--------------------------------------------------+
```
## Preparation
```eval_rst
For more datails how to get sources and build the toolchain, see :doc:`../../tutorial/part1`.
```
### Devuan 4 Chimaera
This probably works also for any fresh Debian/Ubuntu-based distros.
Install tools and libraries needed for coreboot:
```shell
sudo apt-get -V install bison build-essential curl flex git gnat libncurses5-dev m4 zlib1g-dev wget python2 python-is-python2 flashrom
```
### Get sources
You need about 700 MB disk space for sources only and ~2GB disk space for sources + build results
```shell
git clone --recursive https://review.coreboot.org/coreboot.git
```
### Build toolchain
Your system compilers can be different with versions, tested by coreboot developers.
So, it is recommended to build cross-compilers with special versions, which were tested with coreboot.
It is possible to skip this time-consuming part and use `ANY_TOOLCHAIN=y`, but this not recommended.
You can build them for all platforms: `make crossgcc CPUS=2` but this takes ~2 hours with Intel core2duo E8400.
The best way, probably, is to build cross-compilers for your platform (this takes ~20 minutes with Intel core2duo E8400):
```shell
make crossgcc-i386 CPUS=2
```
### Save MAC-address of internal LAN
Run `ip -c link show`, you will find MAC-address like 6c:f0:49:xx:xx:xx
```
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
link/ether 6c:f0:49:xx:xx:xx brd ff:ff:ff:ff:ff:ff
```
## Configure
Create file `payloads/external/SeaBIOS/.config_seabios`:
```shell
CONFIG_COREBOOT=y
CONFIG_ATA_DMA=y
CONFIG_VGA_COREBOOT=y
```
Edit file `configs/config.gigabyte_ga-g41m-es2l`, replace `CONFIG_REALTEK_8168_MACADDRESS` value with your MAC-address.
Run
```shell
make defconfig KBUILD_DEFCONFIG="configs/config.gigabyte_ga-g41m-es2l"
```
## Build
Just execute:
```shell
make
```
It takes ~2 minutes with Intel core2duo E8400.
Example of last part in the output:
```
CBFSPRINT coreboot.rom
FMAP REGION: COREBOOT
Name Offset Type Size Comp
cbfs master header 0x0 cbfs header 32 none
fallback/romstage 0x80 stage 62316 none
cpu_microcode_blob.bin 0xf480 microcode 180224 none
fallback/ramstage 0x3b500 stage 98745 none
vgaroms/seavgabios.bin 0x53700 raw 28672 none
config 0x5a740 raw 301 none
revision 0x5a8c0 raw 675 none
build_info 0x5abc0 raw 103 none
fallback/dsdt.aml 0x5ac80 raw 8447 none
rt8168-macaddress 0x5cdc0 raw 17 none
vbt.bin 0x5ce40 raw 802 LZMA (1899 decompressed)
cmos.default 0x5d1c0 cmos_default 256 none
cmos_layout.bin 0x5d300 cmos_layout 1040 none
fallback/postcar 0x5d740 stage 20844 none
fallback/payload 0x62900 simple elf 70270 none
payload_config 0x73bc0 raw 1699 none
payload_revision 0x742c0 raw 237 none
(empty) 0x74400 null 482904 none
bootblock 0xea280 bootblock 23360 none
HOSTCC cbfstool/ifwitool.o
HOSTCC cbfstool/ifwitool (link)
Built gigabyte/ga-g41m-es2l (GA-G41M-ES2L)
```
## Flashing coreboot
```eval_rst
In addition to the information here, please see the
:doc:`../../tutorial/flashing_firmware/index`.
```
### Do backup
The above commands read the SPI flash chip(s), write into file and then verify content again with the chip:
```shell
sudo flashrom -p internal:dualbiosindex=0 -r m_bios.rom
sudo flashrom -p internal:dualbiosindex=0 -v m_bios.rom
sudo flashrom -p internal:dualbiosindex=1 -r b_bios.rom
sudo flashrom -p internal:dualbiosindex=1 -v b_bios.rom
```
If access error appeared, then add `iomem=relaxed` to Linux kernel parameters and restart your Linux system.
You can also repeat backup and compare checksums manually.
Backup file should be stored elsewhere, so that in case the coreboot build is faulty, some external procedure can be used without having to extract the backup from the target device first.
### Write new flash image
Let's write new image into SPI flash chip, verify checksum again and erase second flash chip:
```shell
sudo flashrom -p internal:dualbiosindex=0 -w build/coreboot.rom
sudo flashrom -p internal:dualbiosindex=0 -v build/coreboot.rom
sudo flashrom -p internal:dualbiosindex=1 -E
```
## Set text mode for GRUB
Update your `/etc/default/grub` with:
```shell
GRUB_TERMINAL=console
```
And recreate GRUB configuration `/boot/grub/grub.cfg` by command
```shell
sudo update-grub
```
## Boot with new firmware
Restart your system:
```shell
sudo shutdown -r now
```
If it is needed, use <kbd>Esc</kbd> key to choose boot device.
Remove `iomem=relaxed` from Linux kernel parameters.
Enjoy!
## Status
```
+-----------------------+--------------------------+--------+-------------------------------+
| coreboot version | Date of sources checkout | Status | Comment |
+-----------------------+--------------------------+--------+-------------------------------+
| 4.13-1531-g2fae1c0494 | 2021-01-28 | Good | |
+-----------------------+--------------------------+--------+-------------------------------+
| 4.13-2182-g6410a0002f | 2021-02-18 | Good | |
+-----------------------+--------------------------+--------+-------------------------------+
```
### Known issues
Lm-sensors shows wrong values from it87:
```
coretemp-isa-0000
Adapter: ISA adapter
Core 0: +27.0°C (high = +80.0°C, crit = +100.0°C)
Core 1: +31.0°C (high = +80.0°C, crit = +100.0°C)
it8718-isa-0290
Adapter: ISA adapter
in0: 1.06 V (min = +0.00 V, max = +4.08 V)
in1: 1.90 V (min = +0.00 V, max = +4.08 V)
in2: 3.34 V (min = +0.00 V, max = +4.08 V)
+5V: 2.96 V (min = +0.00 V, max = +4.08 V)
in4: 224.00 mV (min = +0.00 V, max = +4.08 V)
in5: 4.08 V (min = +0.00 V, max = +4.08 V) ALARM
in6: 4.08 V (min = +0.00 V, max = +4.08 V) ALARM
in7: 3.09 V (min = +0.00 V, max = +4.08 V)
Vbat: 2.82 V
fan1: 1290 RPM (min = 0 RPM)
fan2: 0 RPM (min = 0 RPM)
temp1: -54.0°C (low = +0.0°C, high = +127.0°C) sensor = thermistor
temp2: -1.0°C (low = +0.0°C, high = +127.0°C) sensor = thermistor
temp3: +44.0°C (low = +0.0°C, high = +127.0°C) sensor = thermal diode
cpu0_vid: +1.100 V
intrusion0: ALARM
```
### Working
- RAM 1,2x1GiB DDR2 PC2-6400 Kingston KTC1G-UDIMM (1.8V, 2Rx8 ?)
- RAM 1x1GiB DDR2 PC2-5300 Brooktree AU1G08E32-667P005 / Apogee AU1G082-667P005 CL6 (1.8V, 2Rx8 ?)
- CPU E8400
- ACPI
- CPU frequency scaling
- flashrom under coreboot
- Gigabit Ethernet
- Hardware monitoring
- Integrated graphics
- SATA
- PCI POST card
### Not working
- SuperIO based fan control: PWM fan speed is not changing in depend of CPU temperature
- RAM 1,2x4GiB DDR2 PC2-6400 Samsung M378T5263AZ3-CF7 (2Rx4 PC2-6400U-666-12-E3)
### Not tested
- KVM virtualization
- Onboard audio
- PCI
- PCIe
- PS/2 keyboard mouse (during payload, bootloader)
- Serial port
- USB (disabling XHCI controller makes to work as fallback USB2.0 ports)
- IOMMU
## Interesting facts
`lshw` output is different for BIOS and coreboot.
```shell
diff --side-by-side --ignore-all-space --strip-trailing-cr \
Documentation/mainboard/gigabyte/ga-g41m-es2l_lshw_before_coreboot.txt \
Documentation/mainboard/gigabyte/ga-g41m-es2l_lshw_after_coreboot.txt
```

View File

@@ -1,306 +0,0 @@
my-desktop
description: Desktop Computer
product: GA-G41M-ES2L
vendor: GIGABYTE
version: 1.0
serial: 123456789
width: 64 bits
capabilities: smbios-3.0.0 dmi-3.0.0 smp vsyscall32
configuration: boot=normal chassis=desktop
*-core
description: Motherboard
product: GA-G41M-ES2L
vendor: GIGABYTE
physical id: 0
version: 1.0
serial: 123456789
*-firmware
description: BIOS
vendor: coreboot
physical id: 0
version: 4.13-1531-g2fae1c0494
date: 01/29/2021
size: 1MiB
capacity: 1MiB
capabilities: pci pcmcia upgrade bootselect acpi
*-cpu
description: CPU
product: Intel(R) Core(TM)2 Duo CPU E8400 @ 3.00GHz
vendor: Intel Corp.
physical id: 4
bus info: cpu@0
version: Intel(R) Core(TM)2 Duo CPU E8400 @ 3.00GHz
slot: CPU0
size: 2943MHz
capacity: 3GHz
width: 64 bits
capabilities: fpu fpu_exception wp vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ht tm pbe syscall nx x86-64 constant_tsc arch_perfmon pebs bts rep_good nopl cpuid aperfmperf pni dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm sse4_1 xsave lahf_lm pti tpr_shadow vnmi flexpriority vpid dtherm cpufreq
*-cache
description: L2 cache
physical id: 7
slot: CACHE2
size: 6MiB
capacity: 6MiB
capabilities: internal unified
configuration: level=2
*-memory
description: System memory
physical id: 1
size: 2GiB
*-pci
description: Host bridge
product: 4 Series Chipset DRAM Controller
vendor: Intel Corporation
physical id: 100
bus info: pci@0000:00:00.0
version: 03
width: 32 bits
clock: 33MHz
*-pci:0
description: PCI bridge
product: 4 Series Chipset PCI Express Root Port
vendor: Intel Corporation
physical id: 1
bus info: pci@0000:00:01.0
version: 03
width: 32 bits
clock: 33MHz
capabilities: pci pm msi pciexpress normal_decode bus_master cap_list
configuration: driver=pcieport
resources: irq:24
*-display:0
description: VGA compatible controller
product: 4 Series Chipset Integrated Graphics Controller
vendor: Intel Corporation
physical id: 2
bus info: pci@0000:00:02.0
version: 03
width: 64 bits
clock: 33MHz
capabilities: msi pm vga_controller bus_master cap_list rom
configuration: driver=i915 latency=0
resources: irq:16 memory:90000000-903fffff memory:80000000-8fffffff ioport:20a0(size=8) memory:c0000-dffff
*-display:1 UNCLAIMED
description: Display controller
product: 4 Series Chipset Integrated Graphics Controller
vendor: Intel Corporation
physical id: 2.1
bus info: pci@0000:00:02.1
version: 03
width: 64 bits
clock: 33MHz
capabilities: pm cap_list
configuration: latency=0
resources: memory:90400000-904fffff
*-multimedia
description: Audio device
product: NM10/ICH7 Family High Definition Audio Controller
vendor: Intel Corporation
physical id: 1b
bus info: pci@0000:00:1b.0
version: 01
width: 64 bits
clock: 33MHz
capabilities: pm msi pciexpress bus_master cap_list
configuration: driver=snd_hda_intel latency=0
resources: irq:28 memory:90700000-90703fff
*-pci:1
description: PCI bridge
product: NM10/ICH7 Family PCI Express Port 1
vendor: Intel Corporation
physical id: 1c
bus info: pci@0000:00:1c.0
version: 01
width: 32 bits
clock: 33MHz
capabilities: pci pciexpress msi pm normal_decode bus_master cap_list
configuration: driver=pcieport
resources: irq:25
*-pci:2
description: PCI bridge
product: NM10/ICH7 Family PCI Express Port 2
vendor: Intel Corporation
physical id: 1c.1
bus info: pci@0000:00:1c.1
version: 01
width: 32 bits
clock: 33MHz
capabilities: pci pciexpress msi pm normal_decode bus_master cap_list
configuration: driver=pcieport
resources: irq:26 ioport:1000(size=4096) memory:90600000-906fffff ioport:90500000(size=1048576)
*-network
description: Ethernet interface
product: RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller
vendor: Realtek Semiconductor Co., Ltd.
physical id: 0
bus info: pci@0000:03:00.0
logical name: eth0
version: 02
serial: 6c:f0:49:a3:e3:d5
size: 1Gbit/s
capacity: 1Gbit/s
width: 64 bits
clock: 33MHz
capabilities: pm msi pciexpress msix vpd bus_master cap_list rom ethernet physical tp mii 10bt 10bt-fd 100bt 100bt-fd 1000bt 1000bt-fd autonegotiation
configuration: autonegotiation=on broadcast=yes driver=r8169 driverversion=5.10.0-2-amd64 duplex=full ip=192.168.155.136 latency=0 link=yes multicast=yes port=MII speed=1Gbit/s
resources: irq:17 ioport:1000(size=256) memory:90510000-90510fff memory:90500000-9050ffff memory:90600000-9060ffff
*-usb:0
description: USB controller
product: NM10/ICH7 Family USB UHCI Controller #1
vendor: Intel Corporation
physical id: 1d
bus info: pci@0000:00:1d.0
version: 01
width: 32 bits
clock: 33MHz
capabilities: uhci bus_master
configuration: driver=uhci_hcd latency=0
resources: irq:23 ioport:2000(size=32)
*-usb:1
description: USB controller
product: NM10/ICH7 Family USB UHCI Controller #2
vendor: Intel Corporation
physical id: 1d.1
bus info: pci@0000:00:1d.1
version: 01
width: 32 bits
clock: 33MHz
capabilities: uhci bus_master
configuration: driver=uhci_hcd latency=0
resources: irq:19 ioport:2020(size=32)
*-usb:2
description: USB controller
product: NM10/ICH7 Family USB UHCI Controller #3
vendor: Intel Corporation
physical id: 1d.2
bus info: pci@0000:00:1d.2
version: 01
width: 32 bits
clock: 33MHz
capabilities: uhci bus_master
configuration: driver=uhci_hcd latency=0
resources: irq:18 ioport:2040(size=32)
*-usb:3
description: USB controller
product: NM10/ICH7 Family USB UHCI Controller #4
vendor: Intel Corporation
physical id: 1d.3
bus info: pci@0000:00:1d.3
version: 01
width: 32 bits
clock: 33MHz
capabilities: uhci bus_master
configuration: driver=uhci_hcd latency=0
resources: irq:16 ioport:2060(size=32)
*-usb:4
description: USB controller
product: NM10/ICH7 Family USB2 EHCI Controller
vendor: Intel Corporation
physical id: 1d.7
bus info: pci@0000:00:1d.7
version: 01
width: 32 bits
clock: 33MHz
capabilities: pm debug ehci bus_master cap_list
configuration: driver=ehci-pci latency=0
resources: irq:23 memory:90704000-907043ff
*-pci:3
description: PCI bridge
product: 82801 PCI Bridge
vendor: Intel Corporation
physical id: 1e
bus info: pci@0000:00:1e.0
version: e1
width: 32 bits
clock: 33MHz
capabilities: pci subtractive_decode bus_master cap_list
*-isa
description: ISA bridge
product: 82801GB/GR (ICH7 Family) LPC Interface Bridge
vendor: Intel Corporation
physical id: 1f
bus info: pci@0000:00:1f.0
version: 01
width: 32 bits
clock: 33MHz
capabilities: isa bus_master cap_list
configuration: driver=lpc_ich latency=0
resources: irq:0
*-ide:0
description: IDE interface
product: 82801G (ICH7 Family) IDE Controller
vendor: Intel Corporation
physical id: 1f.1
bus info: pci@0000:00:1f.1
version: 01
width: 32 bits
clock: 33MHz
capabilities: ide isa_compat_mode pci_native_mode bus_master
configuration: driver=ata_piix latency=0
resources: irq:18 ioport:1f0(size=8) ioport:3f6 ioport:170(size=8) ioport:376 ioport:2080(size=16)
*-ide:1
description: IDE interface
product: NM10/ICH7 Family SATA Controller [IDE mode]
vendor: Intel Corporation
physical id: 1f.2
bus info: pci@0000:00:1f.2
logical name: scsi2
version: 01
width: 32 bits
clock: 66MHz
capabilities: ide pm isa_compat_mode pci_native_mode bus_master cap_list emulated
configuration: driver=ata_piix latency=0
resources: irq:19 ioport:20b8(size=8) ioport:20d0(size=4) ioport:20c0(size=8) ioport:20d4(size=4) ioport:2090(size=16)
*-disk
description: ATA Disk
product: WDC WD5000BPVT-2
vendor: Western Digital
physical id: 0.0.0
bus info: scsi@2:0.0.0
logical name: /dev/sda
version: 1A03
serial: WD-WXD1E71MYND4
size: 465GiB (500GB)
capabilities: gpt-1.00 partitioned partitioned:gpt
configuration: ansiversion=5 guid=868a1c85-f309-4f3d-8282-6b5c4c373275 logicalsectorsize=512 sectorsize=4096
*-serial
description: SMBus
product: NM10/ICH7 Family SMBus Controller
vendor: Intel Corporation
physical id: 1f.3
bus info: pci@0000:00:1f.3
version: 01
width: 32 bits
clock: 33MHz
configuration: driver=i801_smbus latency=0
resources: irq:19 ioport:400(size=32)
*-pnp00:00
product: PnP device PNP0c02
physical id: 2
capabilities: pnp
configuration: driver=system
*-pnp00:01
product: PnP device PNP0103
physical id: 3
capabilities: pnp
configuration: driver=system
*-pnp00:02
product: PnP device PNP0c02
physical id: 5
capabilities: pnp
configuration: driver=system
*-pnp00:03
product: PnP device PNP0b00
physical id: 6
capabilities: pnp
configuration: driver=rtc_cmos
*-pnp00:04
product: PnP device PNP0303
physical id: 7
capabilities: pnp
configuration: driver=i8042 kbd
*-pnp00:05
product: PnP device PNP0f13
physical id: 8
capabilities: pnp
configuration: driver=i8042 aux

View File

@@ -1,304 +0,0 @@
my-desktop
description: Desktop Computer
product: G41M-ES2L
vendor: Gigabyte Technology Co., Ltd.
width: 64 bits
capabilities: smbios-2.4 dmi-2.4 smp vsyscall32
configuration: boot=normal chassis=desktop uuid=00000000-0000-0000-0000-6CF049A3E3D5
*-core
description: Motherboard
product: G41M-ES2L
vendor: Gigabyte Technology Co., Ltd.
physical id: 0
*-firmware
description: BIOS
vendor: Award Software International, Inc.
physical id: 0
version: F9
date: 06/21/2010
size: 128KiB
capacity: 1MiB
capabilities: pci pnp apm upgrade shadowing cdboot bootselect edd int13floppy360 int13floppy1200 int13floppy720 int13floppy2880 int5printscreen int9keyboard int14serial int17printer int10video acpi usb ls120boot zipboot biosbootspecification
*-cpu
description: CPU
product: Intel(R) Core(TM)2 Duo CPU E8400 @ 3.00GHz
vendor: Intel Corp.
physical id: 4
bus info: cpu@0
version: Intel(R) Core(TM)2 Duo CPU
slot: Socket 775
size: 2631MHz
capacity: 4GHz
width: 64 bits
clock: 333MHz
capabilities: fpu fpu_exception wp vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ht tm pbe syscall nx x86-64 constant_tsc arch_perfmon pebs bts rep_good nopl cpuid aperfmperf pni dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm sse4_1 xsave lahf_lm pti tpr_shadow vnmi flexpriority vpid dtherm cpufreq
*-cache:0
description: L1 cache
physical id: a
slot: Internal Cache
size: 64KiB
capacity: 64KiB
capabilities: synchronous internal write-back
configuration: level=1
*-cache:1
description: L2 cache
physical id: b
slot: External Cache
size: 6MiB
capabilities: synchronous internal write-back
configuration: level=2
*-memory
description: System Memory
physical id: 19
slot: System board or motherboard
size: 2GiB
*-bank:0
description: DIMM 800 MHz (1.2 ns)
physical id: 0
slot: A0
size: 1GiB
width: 64 bits
clock: 800MHz (1.2ns)
*-bank:1
description: DIMM [empty]
physical id: 1
slot: A1
*-bank:2
description: DIMM 800 MHz (1.2 ns)
physical id: 2
slot: A2
size: 1GiB
width: 64 bits
clock: 800MHz (1.2ns)
*-bank:3
description: DIMM [empty]
physical id: 3
slot: A3
*-pci
description: Host bridge
product: 4 Series Chipset DRAM Controller
vendor: Intel Corporation
physical id: 100
bus info: pci@0000:00:00.0
version: 03
width: 32 bits
clock: 33MHz
*-display
description: VGA compatible controller
product: 4 Series Chipset Integrated Graphics Controller
vendor: Intel Corporation
physical id: 2
bus info: pci@0000:00:02.0
version: 03
width: 64 bits
clock: 33MHz
capabilities: msi pm vga_controller bus_master cap_list rom
configuration: driver=i915 latency=0
resources: irq:16 memory:fd800000-fdbfffff memory:d0000000-dfffffff ioport:ff00(size=8) memory:c0000-dffff
*-multimedia
description: Audio device
product: NM10/ICH7 Family High Definition Audio Controller
vendor: Intel Corporation
physical id: 1b
bus info: pci@0000:00:1b.0
version: 01
width: 64 bits
clock: 33MHz
capabilities: pm msi pciexpress bus_master cap_list
configuration: driver=snd_hda_intel latency=0
resources: irq:27 memory:fdff8000-fdffbfff
*-pci:0
description: PCI bridge
product: NM10/ICH7 Family PCI Express Port 1
vendor: Intel Corporation
physical id: 1c
bus info: pci@0000:00:1c.0
version: 01
width: 32 bits
clock: 33MHz
capabilities: pci pciexpress msi pm normal_decode bus_master cap_list
configuration: driver=pcieport
resources: irq:24 ioport:1000(size=4096) memory:7dd00000-7defffff ioport:80000000(size=2097152)
*-pci:1
description: PCI bridge
product: NM10/ICH7 Family PCI Express Port 2
vendor: Intel Corporation
physical id: 1c.1
bus info: pci@0000:00:1c.1
version: 01
width: 32 bits
clock: 33MHz
capabilities: pci pciexpress msi pm normal_decode bus_master cap_list
configuration: driver=pcieport
resources: irq:25 ioport:d000(size=4096) memory:fdd00000-fddfffff ioport:fde00000(size=1048576)
*-network
description: Ethernet interface
product: RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller
vendor: Realtek Semiconductor Co., Ltd.
physical id: 0
bus info: pci@0000:02:00.0
logical name: eth0
version: 02
serial: 6c:f0:49:a3:e3:d5
size: 1Gbit/s
capacity: 1Gbit/s
width: 64 bits
clock: 33MHz
capabilities: pm msi pciexpress msix vpd bus_master cap_list rom ethernet physical tp mii 10bt 10bt-fd 100bt 100bt-fd 1000bt 1000bt-fd autonegotiation
configuration: autonegotiation=on broadcast=yes driver=r8169 driverversion=5.10.0-2-amd64 duplex=full ip=192.168.155.137 latency=0 link=yes multicast=yes port=MII speed=1Gbit/s
resources: irq:17 ioport:de00(size=256) memory:fdeff000-fdefffff memory:fdee0000-fdeeffff memory:fdd00000-fdd0ffff
*-usb:0
description: USB controller
product: NM10/ICH7 Family USB UHCI Controller #1
vendor: Intel Corporation
physical id: 1d
bus info: pci@0000:00:1d.0
version: 01
width: 32 bits
clock: 33MHz
capabilities: uhci bus_master
configuration: driver=uhci_hcd latency=0
resources: irq:23 ioport:fe00(size=32)
*-usb:1
description: USB controller
product: NM10/ICH7 Family USB UHCI Controller #2
vendor: Intel Corporation
physical id: 1d.1
bus info: pci@0000:00:1d.1
version: 01
width: 32 bits
clock: 33MHz
capabilities: uhci bus_master
configuration: driver=uhci_hcd latency=0
resources: irq:19 ioport:fd00(size=32)
*-usb:2
description: USB controller
product: NM10/ICH7 Family USB UHCI Controller #3
vendor: Intel Corporation
physical id: 1d.2
bus info: pci@0000:00:1d.2
version: 01
width: 32 bits
clock: 33MHz
capabilities: uhci bus_master
configuration: driver=uhci_hcd latency=0
resources: irq:18 ioport:fc00(size=32)
*-usb:3
description: USB controller
product: NM10/ICH7 Family USB UHCI Controller #4
vendor: Intel Corporation
physical id: 1d.3
bus info: pci@0000:00:1d.3
version: 01
width: 32 bits
clock: 33MHz
capabilities: uhci bus_master
configuration: driver=uhci_hcd latency=0
resources: irq:16 ioport:fb00(size=32)
*-usb:4
description: USB controller
product: NM10/ICH7 Family USB2 EHCI Controller
vendor: Intel Corporation
physical id: 1d.7
bus info: pci@0000:00:1d.7
version: 01
width: 32 bits
clock: 33MHz
capabilities: pm ehci bus_master cap_list
configuration: driver=ehci-pci latency=0
resources: irq:23 memory:fdfff000-fdfff3ff
*-pci:2
description: PCI bridge
product: 82801 PCI Bridge
vendor: Intel Corporation
physical id: 1e
bus info: pci@0000:00:1e.0
version: e1
width: 32 bits
clock: 33MHz
capabilities: pci subtractive_decode cap_list
*-isa
description: ISA bridge
product: 82801GB/GR (ICH7 Family) LPC Interface Bridge
vendor: Intel Corporation
physical id: 1f
bus info: pci@0000:00:1f.0
version: 01
width: 32 bits
clock: 33MHz
capabilities: isa bus_master cap_list
configuration: driver=lpc_ich latency=0
resources: irq:0
*-ide:0
description: IDE interface
product: 82801G (ICH7 Family) IDE Controller
vendor: Intel Corporation
physical id: 1f.1
bus info: pci@0000:00:1f.1
version: 01
width: 32 bits
clock: 33MHz
capabilities: ide isa_compat_mode pci_native_mode bus_master
configuration: driver=ata_piix latency=0
resources: irq:18 ioport:1f0(size=8) ioport:3f6 ioport:170(size=8) ioport:376 ioport:f800(size=16)
*-ide:1
description: IDE interface
product: NM10/ICH7 Family SATA Controller [IDE mode]
vendor: Intel Corporation
physical id: 1f.2
bus info: pci@0000:00:1f.2
logical name: scsi2
version: 01
width: 32 bits
clock: 66MHz
capabilities: ide pm isa_compat_mode pci_native_mode bus_master cap_list emulated
configuration: driver=ata_piix latency=0
resources: irq:19 ioport:f700(size=8) ioport:f600(size=4) ioport:f500(size=8) ioport:f400(size=4) ioport:f300(size=16)
*-disk
description: ATA Disk
product: WDC WD5000BPVT-2
vendor: Western Digital
physical id: 0.0.0
bus info: scsi@2:0.0.0
logical name: /dev/sda
version: 1A03
serial: WD-WXD1E71MYND4
size: 465GiB (500GB)
capabilities: gpt-1.00 partitioned partitioned:gpt
configuration: ansiversion=5 guid=868a1c85-f309-4f3d-8282-6b5c4c373275 logicalsectorsize=512 sectorsize=4096
*-serial
description: SMBus
product: NM10/ICH7 Family SMBus Controller
vendor: Intel Corporation
physical id: 1f.3
bus info: pci@0000:00:1f.3
version: 01
width: 32 bits
clock: 33MHz
configuration: driver=i801_smbus latency=0
resources: irq:19 ioport:500(size=32)
*-pnp00:00
product: PnP device PNP0c02
physical id: 1
capabilities: pnp
configuration: driver=system
*-pnp00:01
product: PnP device PNP0b00
physical id: 2
capabilities: pnp
configuration: driver=rtc_cmos
*-pnp00:02
product: PnP device PNP0c02
physical id: 3
capabilities: pnp
configuration: driver=system
*-pnp00:03
product: PnP device PNP0c02
physical id: 5
capabilities: pnp
configuration: driver=system
*-pnp00:04
product: PnP device PNP0c01
physical id: 6
capabilities: pnp
configuration: driver=system

View File

@@ -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

Some files were not shown because too many files have changed in this diff Show More