coreboot/src/lib
Aaron Durbin 11453827c7 UPSTREAM: vboot/tpm2: enable nvmem commits on cr50 when writing firmware secdata
cr50 by default delays nvmem commits internally from the point of
reset to accumulate change state. However, the factory process can
put a board into dev mode through the recovery screen. This state
is stored in the TPM's nvmem space. When the factory process is
complete a disable_dev_request and battery_cutoff_request is performed.
This leads to disabling the dev mode in TPM, but the battery is
subsequently cut off so the nvmem contents never stick. Therefore,
whenever antirollback_write_space_firmware() is called we know there
was a change in secdata so request cr50 to immediately enable nvmem
commits going forward. This allows state changes to happen immediately.

The fallout from this is that when secdata is changed that current
boot will take longer because every transaction that writes to TPM
nvmem space will perform a write synchronously. All subsequent boots
do not have that effect.

It should also be noted that this approach to the implementation is
a pretty severe layering violation. However, the current TPM APIs
don't lend themselves well to extending commands or re-using code
outside of the current routines which inherently assume all knowledge
of every command (in conflict with vendor commands since those are
vendor-specific by definition).

BUG=b:35775104
BRANCH=reef
TEST=Confirmed disablement of dev mode sticks in the presence of:
crossystem disable_dev_request=1; crossystem
battery_cutoff_request=1; reboot;

Change-Id: Ia2f5ec97f750570c3b16aa68b01ab1eaa94f6960
Signed-off-by: Patrick Georgi <pgeorgi@chromium.org>
Original-Commit-Id: eeb77379e0
Original-Change-Id: I3395db9cbdfea45da1f5cb994c6570978593b944
Original-Signed-off-by: Aaron Durbin <adurbin@chromium.org>
Original-Reviewed-on: https://review.coreboot.org/18681
Original-Reviewed-by: Duncan Laurie <dlaurie@chromium.org>
Original-Tested-by: build bot (Jenkins)
Reviewed-on: https://chromium-review.googlesource.com/452888
2017-03-10 10:54:45 -08:00
..
gnat UPSTREAM: Hook up libhwbase in ramstage 2016-12-21 03:12:47 -08:00
b64_decode.c UPSTREAM: src/lib: Add "int" following "unsigned" 2017-03-10 10:54:42 -08:00
boot_device.c UPSTREAM: lib/boot_device: add RW boot device construct 2016-08-19 14:20:23 -07:00
bootblock.c UPSTREAM: arch/x86: fix cmos post logging in non romcc bootblock 2017-01-09 23:46:44 -08:00
bootmem.c lib/bootmem: allow architecture specific bootmem ranges 2016-04-21 20:46:45 +02:00
bootmode.c UPSTREAM: bootmode: Get rid of CONFIG_BOOTMODE_STRAPS 2016-07-28 22:56:28 -07:00
cbfs.c UPSTREAM: src/lib: Fix space between type, * and variable name 2017-03-10 10:54:42 -08:00
cbmem_common.c UPSTREAM: src/lib: Fix space between type, * and variable name 2017-03-10 10:54:42 -08:00
cbmem_console.c UPSTREAM: cbmem_console: Remove "buffer_" prefix from all structure fields 2017-02-09 14:58:27 -08:00
cbmem_stage_cache.c tree: drop last paragraph of GPL copyright header 2015-10-31 21:37:39 +01:00
compute_ip_checksum.c UPSTREAM: src/lib: Add space before ( 2017-03-10 10:54:43 -08:00
coreboot_table.c UPSTREAM: src/lib: Add space before ( 2017-03-10 10:54:43 -08:00
debug.c UPSTREAM: src/lib: Add "int" following "unsigned" 2017-03-10 10:54:42 -08:00
delay.c UPSTREAM: src/lib: Add space before ( 2017-03-10 10:54:43 -08:00
edid.c UPSTREAM: src/lib: Add space before ( 2017-03-10 10:54:43 -08:00
ext_stage_cache.c UPSTREAM: soc/intel/apollolake: Implement stage cache to improve resume time 2016-10-11 14:31:54 -07:00
fallback_boot.c UPSTREAM: pc80: Move set_boot_successful() 2016-12-16 01:49:05 -08:00
fmap.c UPSTREAM: lib/fmap: provide RW region device support 2016-08-22 00:11:45 -07:00
gcc.c tree: drop last paragraph of GPL copyright header 2015-10-31 21:37:39 +01:00
gcov-glue.c UPSTREAM: src/lib: Remove braces for single statements 2017-03-10 10:54:42 -08:00
gcov-io.c UPSTREAM: src/lib: Add "int" following "unsigned" 2017-03-10 10:54:42 -08:00
gcov-io.h UPSTREAM: src/lib: Add "int" following "unsigned" 2017-03-10 10:54:42 -08:00
gcov-iov.h Implement GCC code coverage analysis 2013-01-12 19:09:55 +01:00
generic_dump_spd.c UPSTREAM: src/lib: Add space before ( 2017-03-10 10:54:43 -08:00
generic_sdram.c UPSTREAM: src/lib: Add space before ( 2017-03-10 10:54:43 -08:00
gpio.c UPSTREAM: src/lib: Add space before ( 2017-03-10 10:54:43 -08:00
halt.c UPSTREAM: src/lib: Remove braces for single statements 2017-03-10 10:54:42 -08:00
hardwaremain.c UPSTREAM: src/lib: Remove spaces after ( and before ) 2017-03-09 05:14:35 -08:00
hexdump.c lib/hexdump: Refactor to skip lines with all ones as well 2016-01-22 14:10:28 +01:00
hexstrtobin.c UPSTREAM: hexstrtobin: Add a library function to decode ASCII hex into binary 2016-05-26 03:21:43 -07:00
hw-time-timer.adb UPSTREAM: Hook up libhwbase in ramstage 2016-12-21 03:12:47 -08:00
imd.c Correct some common spelling mistakes 2016-01-07 22:57:02 +01:00
imd_cbmem.c UPSTREAM: arch/x86,lib: make cbmem console work in postcar stage 2016-09-21 19:36:55 -07:00
jpeg.c UPSTREAM: src/lib: Remove braces for single statements 2017-03-10 10:54:42 -08:00
jpeg.h tree: drop last paragraph of GPL copyright header 2015-10-31 21:37:39 +01:00
libgcc.c tree: drop last paragraph of GPL copyright header 2015-10-31 21:37:39 +01:00
libgcov.c UPSTREAM: src/lib: Fix space between type, * and variable name 2017-03-10 10:54:42 -08:00
lzma.c UPSTREAM: lib: remove ulzma() 2016-07-07 01:08:55 -07:00
lzmadecode.c UPSTREAM: src/lib: Add space before ( 2017-03-10 10:54:43 -08:00
lzmadecode.h Since some people disapprove of white space cleanups mixed in regular commits 2010-04-27 06:56:47 +00:00
Makefile.inc UPSTREAM: ddr3 spd: move accessor code into lib/spd_bin.c 2017-02-13 10:01:11 -08:00
malloc.c Remove leftover smi_get_tseg_base 2015-05-29 07:06:37 +02:00
memchr.c Add an implementation for the memchr library function 2012-03-09 20:00:53 +01:00
memcmp.c UPSTREAM: src/lib: Add space before ( 2017-03-10 10:54:43 -08:00
memcpy.c fix compiler warnings (trivial) 2009-01-20 21:40:16 +00:00
memmove.c UPSTREAM: src/lib: Add space before ( 2017-03-10 10:54:43 -08:00
memrange.c lib/memrange: avoid shadow object declarations 2016-02-26 02:14:56 +01:00
memset.c fix compiler warnings (trivial) 2009-01-20 21:40:16 +00:00
mocked_tlcl.c UPSTREAM: src/lib: Fix space between type, * and variable name 2017-03-10 10:54:42 -08:00
nhlt.c UPSTREAM: lib/nhlt: add support for setting the oem_revision 2016-12-02 14:23:05 -08:00
primitive_memtest.c UPSTREAM: src/lib: Add space before ( 2017-03-10 10:54:43 -08:00
prog_loaders.c UPSTREAM: romstage_handoff: add helper to determine resume status 2016-12-02 14:22:57 -08:00
prog_ops.c lib/prog_loading: introduce prog_segment_loaded() 2016-04-02 03:56:37 +02:00
program.ld UPSTREAM: lib/program.ld: add .sdata sections 2016-11-03 14:44:10 -07:00
ramtest.c UPSTREAM: quick_ram_check: Remove reference to RAMBASE 2016-11-08 23:24:09 -08:00
reg_script.c UPSTREAM: src/lib: Fix space between type, * and variable name 2017-03-10 10:54:42 -08:00
region_file.c UPSTREAM: lib: add region file support 2016-12-09 03:29:43 -08:00
rmodule.c lib/prog_loading: introduce prog_segment_loaded() 2016-04-02 03:56:37 +02:00
rmodule.ld rmodule: use program.ld for linking 2015-09-09 19:35:30 +00:00
romstage_handoff.c UPSTREAM: lib: put romstage_handoff implementation in own compilation unit 2016-12-02 14:23:00 -08:00
romstage_stack.c UPSTREAM: intel post-car: Increase stacktop alignment 2016-11-21 11:53:20 -08:00
rtc.c UPSTREAM: lib: Add real-time-clock functions 2016-07-07 01:08:44 -07:00
selfboot.c UPSTREAM: src/lib: Add space before ( 2017-03-10 10:54:43 -08:00
spd_bin.c UPSTREAM: src/lib: Add space before ( 2017-03-10 10:54:43 -08:00
stack.c UPSTREAM: src/lib: Add space before ( 2017-03-10 10:54:43 -08:00
thread.c UPSTREAM: src/lib: Remove braces for single statements 2017-03-10 10:54:42 -08:00
timer.c UPSTREAM: src/lib: Add "int" following "unsigned" 2017-03-10 10:54:42 -08:00
timer_queue.c tree: drop last paragraph of GPL copyright header 2015-10-31 21:37:39 +01:00
timestamp.c UPSTREAM: src/lib: Fix space between type, * and variable name 2017-03-10 10:54:42 -08:00
tlcl.c UPSTREAM: src/lib: Fix space between type, * and variable name 2017-03-10 10:54:42 -08:00
tlcl_internal.h vboot2: read secdata and nvdata 2015-03-23 19:51:47 +01:00
tlcl_structures.h vboot2: copy tlcl from vboot_reference as a preparation for vboot2 integration 2015-01-27 01:43:57 +01:00
tpm2_marshaling.c UPSTREAM: vboot/tpm2: enable nvmem commits on cr50 when writing firmware secdata 2017-03-10 10:54:45 -08:00
tpm2_marshaling.h tpm2: avoid comparison between signed and unsigned ints 2016-07-07 19:30:09 -07:00
tpm2_tlcl.c UPSTREAM: vboot/tpm2: enable nvmem commits on cr50 when writing firmware secdata 2017-03-10 10:54:45 -08:00
tpm2_tlcl_structures.h UPSTREAM: vboot/tpm2: enable nvmem commits on cr50 when writing firmware secdata 2017-03-10 10:54:45 -08:00
tpm_error_messages.h UPSTREAM: src/lib: Fix checkpatch warnings 2016-09-08 17:57:25 -07:00
trace.c UPSTREAM: src/lib: Fix checkpatch warnings 2016-09-08 17:57:25 -07:00
version.c UPSTREAM: lib/version: Correct whitespace alignment 2016-07-15 08:39:33 -07:00
wrdd.c lib: Implement framework for retrieving WiFi regulatory domain 2016-03-08 18:41:33 +01:00