summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* Clear OWNERS for factory/firmware branchfactory-drallion-13080.B-cr50_stabBrian Norris2021-09-101-9/+1
| | | | | | | | | | | | BUG=none TEST=none Change-Id: I0f03f432ada1064ffba9595be78ca7ab4d25ecd1 Signed-off-by: Brian Norris <briannorris@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3155046 Reviewed-by: Jack Rosenthal <jrosenth@chromium.org> Owners-Override: Jora Jacobi <jora@google.com> Tested-by: Jack Rosenthal <jrosenth@chromium.org>
* cr50: prepare to release 0.{5,6}.3Mary Ruthven2020-05-042-2/+2
| | | | | | | | | | BUG=none TEST=none Change-Id: I33ad7debedb98f8ff90b4e8eaff96e25c73da4cd Signed-off-by: Mary Ruthven <mruthven@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2180880 Reviewed-by: Vadim Bendebury <vbendeb@chromium.org>
* util: script for generating RO hashesVadim Bendebury2020-05-042-0/+867
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This python script will be run in a Chrome OS factory image, with limited availability of chromite libraries. The command line parameters of the script are a set of AP firmware address ranges and FMAP section names. The script does the following: - use flashrom to read the FMAP area from the AP flash and dump_fmap to generate the flash map description. - verify that section names passed in as parameters (if any) are indeed are present in the flash map. - verify that all passed in ranges and sections fit into the WP_RO area of the flash (as defined if the flash map). - prepare a layout file to instruct flashrom to read only the sections of interest (as defined by ranges and section names passed in the command line). - use flashrom again to read the required sections of the AP flash into a file. - read the file and and pass the required sections through the sha256 hash calculation. - prepare the Cr50 vendor command to pass information about the flash ranges and the sha256 sum to Cr50 and send the command. A unit test is also being added. BUG=b:153764696 TEST=./util/test_ap_ro_hash.py succeeds. with the rest of the patches added end to end AP RO verification procedure also succeeds. Signed-off-by: Vadim Bendebury <vbendeb@chromium.org> Change-Id: Ic0fa3759b3a32db8cf521be28c3c7dfe0cd35278 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2161576 Reviewed-by: Mary Ruthven <mruthven@chromium.org>
* sps: do not generate AP_INT_L pulse until controller is readyVadim Bendebury2020-05-041-19/+32
| | | | | | | | | | | | | | | | | | | The recent interrupt pulse extension brought to fore an old bug where the AP_INT_L pulse is generated by the SPS driver before the controller is actually ready to accept the next SPI frame. This patch rearranges the code to make sure that the pulse is generated after all controller clean up. BUG=b:154458891 TEST=verified that Atlas device is still booting fine. Will test it on other devices which seemed to be triggering the bug. Signed-off-by: Vadim Bendebury <vbendeb@chromium.org> Change-Id: I480760b4afea24295f96abde2fc75c414017c27f Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2171452 Reviewed-by: Namyoon Woo <namyoon@chromium.org> Reviewed-by: Andrey Pronin <apronin@chromium.org>
* cr50: prepare to release 0.{5,6}.2stabilize-13070.B-cr50_stabMary Ruthven2020-04-282-2/+2
| | | | | | | | | | BUG=none TEST=none Change-Id: Ic84368d12832dc5bb08d7085090ad727130c3114 Signed-off-by: Mary Ruthven <mruthven@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2171517 Reviewed-by: Vadim Bendebury <vbendeb@chromium.org>
* fix to set the TPM VC response size as zero on error casesNamyoon Woo2020-04-281-1/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch fixes cr50 to set the TPM VC response size as zero before it returns an error code upon VENDOR_CC_GET_BOOT_MODE or VENDOR_CC_RESET_EC. BUG=b:155214584 TEST=ran 'gsctool --getbootmode' on atlas where the board property does not contain BOARD_EC_CR50_COMM_SUPPORT. [cr50] > brdprop properties = 0x1041 [Before the fix] $ gsctool --getbootmode finding_device 18d1:5014 Found device. found interface 3 endpoint 4, chunk_len 64 READY ------- ../../util/usb_if.c:209, libusb_bulk_transfer returned -8 (Overflow) [After the fix] $ gsctool -g finding_device 18d1:5014 Found device. found interface 3 endpoint 4, chunk_len 64 READY ------- Error 8 in Getting boot mode Signed-off-by: Namyoon Woo <namyoon@google.com> Change-Id: Ic1d9b261415487f0a3a0690e6090cbb5387ddd64 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2171167 Tested-by: Namyoon Woo <namyoon@chromium.org> Reviewed-by: Mary Ruthven <mruthven@chromium.org> Reviewed-by: Vadim Bendebury <vbendeb@chromium.org> Commit-Queue: Namyoon Woo <namyoon@chromium.org>
* .pylintrc: update list of suppressed messagesVadim Bendebury2020-04-231-10/+11
| | | | | | | | | | | | | | | | | | | This patch sorts the list of the suppressed messages alphanumerically and adds 'missing-print-function' to the list, as this error does not apply to Python3. BUG=none TEST=linter error message R: 1, 0: Missing "from __future__ import print_function... is not reported any more, the rest of the linter output did not change. Signed-off-by: Vadim Bendebury <vbendeb@chromium.org> Change-Id: Ie97d88fcecfa70a89323d9122c3781e3da23f533 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2161575 Reviewed-by: Mary Ruthven <mruthven@chromium.org>
* ec: Convert comments to C-styleLouis Collard2020-04-151-48/+52
| | | | | | | | | | | | BUG=b:123686979 TEST=make buildall -j Change-Id: I1fc49f44c6f1be3bcacb26662862cb68899be299 Signed-off-by: Louis Collard <louiscollard@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2102092 Tested-by: Leo Lai <cylai@google.com> Reviewed-by: Vadim Bendebury <vbendeb@chromium.org> Commit-Queue: Leo Lai <cylai@google.com>
* ec: Remove typedefs from u2f.hLouis Collard2020-04-152-37/+38
| | | | | | | | | | | | | | BUG=b:123686979 TEST=make buildall -j Cq-Depend: chromium:2051792 Signed-off-by: Louis Collard <louiscollard@chromium.org> Change-Id: I9558ebcf5a83ae8a422a43b776147bececea70ba Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2102091 Tested-by: Leo Lai <cylai@google.com> Reviewed-by: Vadim Bendebury <vbendeb@chromium.org> Reviewed-by: Andrey Pronin <apronin@chromium.org> Commit-Queue: Leo Lai <cylai@google.com>
* ec: Run clang-format on u2f.cLouis Collard2020-04-151-30/+21
| | | | | | | | | | | | | | Also replaces uses of 'unsigned' with 'unsigned int' BUG=b:123686979 TEST=make buildall -j Change-Id: I2c7a861540f4ca3491b78f0c87e77ed01f57f0a0 Signed-off-by: Louis Collard <louiscollard@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2102090 Tested-by: Leo Lai <cylai@google.com> Reviewed-by: Vadim Bendebury <vbendeb@chromium.org> Commit-Queue: Leo Lai <cylai@google.com>
* ec: Run clang-format on u2f.hLouis Collard2020-04-151-53/+53
| | | | | | | | | | | | BUG=b:123686979 TEST=make buildall -j Signed-off-by: Louis Collard <louiscollard@chromium.org> Change-Id: I646483719d5b97bf9622bbdd2f78ec3dce995d4a Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2102089 Tested-by: Leo Lai <cylai@google.com> Reviewed-by: Vadim Bendebury <vbendeb@chromium.org> Commit-Queue: Leo Lai <cylai@google.com>
* gsctool: supprot enabling write protection (WP)Vadim Bendebury2020-04-141-13/+39
| | | | | | | | | | | | | | | | This patch makes use of the modification of the vendor command VENDOR_CC_WP, which allows to enable WP. BUG=b:153881773 TEST=verified that attempts to enable WP when running the unmodified Cr50 image fail with error message "Early Cr50 versions do not support setting WP", and that the updated Cr50 image allows to enable WP using 'gsctool -a -w enable' Signed-off-by: Vadim Bendebury <vbendeb@chromium.org> Change-Id: Ie28c1c9b171dd6ea2e3edc0ae624f953cb4fa4fe Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2149526 Reviewed-by: Mary Ruthven <mruthven@chromium.org>
* VENDOR_CC_WP: allow to enable write protection (WP)Vadim Bendebury2020-04-142-1/+17
| | | | | | | | | | | | | | | | | | | | | | | The gsctool utility allows to examine the device WP status, but does not allow to set it. It would be useful to provide the user with a means of enabling WP at any time. This patch extends the existing vendor command VENDOR_CC_WP implementation to allow an optional one byte parameter. If the parameter is present, the Cr50 will unconditionally invoke set_wp_state(1) when processing the command. BUG=b:153881773 TEST=with the corresponding gsctool.c changes coming up in the next patch verified that attempts to enable WP when running the unmodified Cr50 image fail with error message "Early Cr50 versions do not support setting WP", and that the updated Cr50 image allows to enable WP using 'gsctool -a -w enable' Signed-off-by: Vadim Bendebury <vbendeb@chromium.org> Change-Id: I75c200bbb9085e9f74c227ef80f782defdaaa29e Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2149519 Reviewed-by: Mary Ruthven <mruthven@chromium.org>
* Implement sequence for detecting trigger for AP RO verificationVadim Bendebury2020-04-132-0/+114
| | | | | | | | | | | | | | | | | | | | | | | | | | | | When supported, the AP RO verification would be triggered by the operator pressing and keeping pressed the power button and then pressing and releasing a few times the refresh key. As proposed in this patch, to trigger the verification the operator must complete the sequence within 3 seconds by pressing the refresh key three times. The sequences is controlled by periodic polling. Enabling refresh key press interrupts was investigated, the issue is that the key generates plenty of interrupts due to dribbling, to the tune of a hundred each time it is pressed. It is much cheaper to just poll every 20 ms. The CONFIG_AP_RO_VERIFICATION config flag controls enabling of this feature. BUG=b:141191727 TEST=enabled the new feature and verified proper operation by both detecting the trigger and abandoning the sequence due to released power button or not enough times pressed refresh key. Signed-off-by: Vadim Bendebury <vbendeb@chromium.org> Change-Id: I55376a87009d6f8020358ad11db1e47d0b8393ed Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2144944 Reviewed-by: Mary Ruthven <mruthven@chromium.org>
* Add a sw flag to indicate usb_i2c statusNamyoon Woo2020-04-091-7/+6
| | | | | | | | | | | | | | | Cr50 used to read GPIO_EN_PP3300_INA_L value to detect if USB_I2C is enabled. However it requires an external pullup. Instead, this patch adds a sw flag to indicate USB_I2C status, so that it can keep USB_I2C status regardless external HW factors. BUG=b:152946978 TEST=ran flash_ec on waddledee, ampton, and dragonegg. Signed-off-by: Namyoon Woo <namyoon@chromium.org> Change-Id: Ie1a3a8c790e9643a3b49b6c519167ee3bdecc650 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2140535 Reviewed-by: Vadim Bendebury <vbendeb@chromium.org>
* speed up AP State polling when CCD is active.Vadim Bendebury2020-04-081-2/+27
| | | | | | | | | | | | | | | | | | | It turns out that the Cr50 not shutting off the AP UART quickly enough causes violation of the JSL power sequence requirements due to the leakage caused by the active UART lines. Let's speed up AP state polling when CCD is active. When CCD is not active the UART is shut of to start with. BUG=b:152446186 TEST=running the new image verified that that timing constraints are not violated any more. Also verified reliable UART=>USB bridging operation. Signed-off-by: Vadim Bendebury <vbendeb@chromium.org> Change-Id: Iffb7f8bc33c4516bb7cf5cbf58c5ced277cd1aec Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2139732 Reviewed-by: Mary Ruthven <mruthven@chromium.org>
* cr50: prepare to release 0.{5,6}.1Mary Ruthven2020-04-082-4/+4
| | | | | | | | | | BUG=none TEST=none Change-Id: Ib0a272579ea750ab439a1bbede4e3ac9cc1380e6 Signed-off-by: Mary Ruthven <mruthven@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2142450 Reviewed-by: Vadim Bendebury <vbendeb@chromium.org>
* prevent reading ECRW hash from TPM nvmem on non-EFS2 boardsNamyoon Woo2020-04-071-0/+3
| | | | | | | | | | | | | | | This patch make sure that cr50 attempts to read ECRW hash from TPM nvmem only if the board supports EC-EFS2. Though this attempt is not critical, it prints an read error message in console, which could mislead the reader. BUG=none TEST=none Signed-off-by: Namyoon Woo <namyoon@chromium.org> Change-Id: I95e8407b19259fd62e0d1858efdd2696042dcd95 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2138601 Reviewed-by: Mary Ruthven <mruthven@chromium.org>
* cr50: prepare to release 0.{3,4}.28Mary Ruthven2020-04-072-2/+2
| | | | | | | | | | BUG=none TEST=none Change-Id: Ia5c4b11ef217bad279b865a91c1618d9b6571c17 Signed-off-by: Mary Ruthven <mruthven@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2137911 Reviewed-by: Vadim Bendebury <vbendeb@chromium.org>
* prevent EC UART TX channel lockup caused by EFS introductionNamyoon Woo2020-04-041-22/+31
| | | | | | | | | | | | | | | | | | | If UART-EC TX is disabled, the USB input data used to be ignored in UART-EC TX interrupt handler, but it neglected to call uartn_tx_stop(), which was a defect. In this patch, those data shall be ignored when they arrive from USB (in USB RX stream handler), which is earlier than UART-EC TX interrupt, and uartn_tx_start() won't be called. BUG=b:153198965 TEST=Repeated to lock and open CCD, and checked EC-UART is RO or RW. Checked EC-EFS2 working, and uart_stress_tester as well. Signed-off-by: Namyoon Woo <namyoon@google.com> Change-Id: I1c3c2c5a7626850f6389616bbe1f69188d5eca6d Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2135140 Tested-by: Namyoon Woo <namyoon@chromium.org> Reviewed-by: Vadim Bendebury <vbendeb@chromium.org> Commit-Queue: Namyoon Woo <namyoon@chromium.org>
* cmsg: use two byte ints to send function name string indicesstabilize-sylas-13019.B-cr50_stabstabilize-13020.87.B-cr50_stabstabilize-13020.67.B-cr50_stabstabilize-13020.55.B-cr50_stabrelease-R83-13020.B-cr50_stabVadim Bendebury2020-04-012-6/+13
| | | | | | | | | | | | | | | | | | | | | | When a string parameter __func__ ie encountered in the source code, the function name is saved in the format strings dictionary, and then packet is prepared, instead of sending the string, a byte of 0xff is sent and then the four byte value which is the string index. But two bytes is enough to send the string index, as it is a 16 bit value by design. This patch modifies both transmit and receive sides to start using 2 byte indices for __func__. BUG=b:149964350 TEST=built the new image, tried running it, observed correct function names in the console output. Signed-off-by: Vadim Bendebury <vbendeb@chromium.org> Change-Id: I682dd18cb4dd434e6982d33f1918ef398d5caa20 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2131046 Reviewed-by: Randall Spangler <rspangler@chromium.org>
* util_precompile: add ability to reuse previously created blobsVadim Bendebury2020-04-012-0/+69
| | | | | | | | | | | | | | | | | | | | | | | | | | Most strings in the Cr50 image are not going to change any time soon, the most likely change is the addition of new strings. With this in mind, it makes sense to keep the string dictionary around and just keep updating it when building a new image, maybe adding new strings, or most often just reusing the ones already in the blob. This patch tries reading the blob before processing the inputs, and if the blob is read and unzipped/unpickled successfully, its contents are used to seed the string dictionary before the inputs are processed. With this approach 100% compatibility between the Cr50 image and the blob is not required, most of the strings would be interpreted properly even with older blobs. A test case is being added to verify this behavior. BUG=b:149964350 TEST=./util/test_util_precompile.py Signed-off-by: Vadim Bendebury <vbendeb@chromium.org> Change-Id: I761d6b043dfc85b54352aadaa66d24d4027e95f8 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2119144
* Make acroterm work with Cr50Vadim Bendebury2020-03-312-93/+383
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | One of the difference between Acropora and Cr50 is such that in case of Acropora the format strings are transferred within packets, and in case of Cr50 only the index of the string is passed in the packet, the string itself is obtained from the list prepared by running util_precompile.py. Another difference is that in Acropora each console packet message represents a full line, in Cr50 the message could be representing just a part of the line, down to a single character. These differences require modifications of the packet header on the DUT side and modifications of the Packet class in Acroterm. Cr50Packet class inherits from Packet, to abstract header structure differences a class specific method of unpack_ph() is being added. The new method extracts packet fields, returning fields common for both packet formats, and saving the class unique values in the object attributes. This allows to consolidate the packet validation function and only divert processing when decode_packet() is invoked. Cr50Packet constructor is passed the list of format strings, the str_index field from packet header is the index of the format string in the list. The Cr50Term class inherits from Acroterm, the only difference is that Cr50Term uses Cr50Packet for packet processing, and prepares the list of strings, retrieving it from the blob created by util_precompile.py. Two new command line options are being added: --cr50_mode enables Cr50 packet mode console support --cr50_str_blob points at the strings blob, by default build/cr50/RW/str_blob is used. Note that on the DUT the Cr50 packet mode is disabled by default. To start using console packet one needs to add the line to board/cr50/board.h and rebuild the image. BUG=b:149964350 TEST=./util/test_acroterm.py succeeds. When Cr50 is built with the suggested modification of board/cr50/board.h, acroterm invoked as $ util/acroterm.py --tty /dev/ttyUSBx --cr50_mode allows to open terminal sessions with USB and UART consoles. Change-Id: I301a5515a0994dba91f2cb40a77c4b59c3becd45 Signed-off-by: Vadim Bendebury <vbendeb@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2116277 Reviewed-by: Randall Spangler <rspangler@chromium.org>
* Prepare for transitioning to packet mode consoleVadim Bendebury2020-03-317-9/+54
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | A very few changes are needed to support the packet mode: - provide functions to report how much room is left in USB/UART transmit buffers; - compile out cprintf/cprints/cputs just in case to be able to catch cases where util_precompile.py fails to convert them for whatever reason; - do not add CR to every LF, this messes up packet transmissions, and the terminal is doing the right thing anyways - there is a problem with the USB channel in packet mode: the device reboots as soon as an attempt to send something to the host is undertaken. The problem can be rectified by disabling the deferred function path in the Cr50 console USB channel. A bug was open to track it down, but in packet mode using deferred function in this path is less critical, as the amount of sent data always is at least as much as the packet header size BUG=b:149964350, b:152116489 TEST=with the rest of the patches applied packet mode console works fine. When packet mode is disabled the conventional mode console works fine. Change-Id: Ib010cede36adc87cf80f49e5d76ec9e274d9e608 Signed-off-by: Vadim Bendebury <vbendeb@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2114238 Reviewed-by: Randall Spangler <rspangler@chromium.org> Reviewed-by: Namyoon Woo <namyoon@chromium.org>
* cmsg.c, console packet mode driverVadim Bendebury2020-03-314-3/+428
| | | | | | | | | | | | | | | | | | | | | | | | | This patch adds a console driver for packet mode. The driver processes information prepared by util_precomplie.py when processing printf invocations in the source code. Each invocation is replaced by a cmsgX function, where X is the number of format arguments. cmsgX functions prepare an array of parameters of size X and invoke a common function, passing it the array and an integer value, consisting of up to 8 4 bit fields, describing the parameters. Since both console drivers need to be able to filter logical console channels, the channel_mask variable is made global. BUG=b:149964350 TEST=with the rest of patches applied and packet mode enabled, verified proper operation of both Cr50 consoles (USB and UART). Signed-off-by: Vadim Bendebury <vbendeb@chromium.org> Change-Id: I1f6ef5ea50bffbe14d3e3850fff0191c54f37033 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2113931 Reviewed-by: Randall Spangler <rspangler@chromium.org>
* make: add preprocessor stageVadim Bendebury2020-03-315-1/+216
| | | | | | | | | | | | | | | | | | | | | | | | | | | For the upcoming introduction of transitioning Cr50 console communications to packet mode, there is a need to be able to replace all print function invocations in the code with calls to packet sending function. This replacement is easiest to make in C preprocessor outputs, as there all macros are replaced with actual function invocations. This patch adds a configuration option CONFIG_EXTRACT_PRINTF_STRINGS, when enabled, building of the image object files starts happening in three steps instead of one, instead of .c => .o transition, the steps are .c => .E => .Ep => .o, where .E is the C preprocessor output, and .Ep is result of post processing by ./util/util_precompile.py. BUG=b:149964350 TEST=image layout does not change if CONFIG_EXTRACT_PRINTF_STRINGS is not defined. With the rest of the patches applied defining the above config option allows to build a Cr50 image supporting packet console communications mode. Signed-off-by: Vadim Bendebury <vbendeb@chromium.org> Change-Id: I20b8ba7c5d13cb54ac6adbdbce856d92023ce997 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2113122 Reviewed-by: Randall Spangler <rspangler@chromium.org>
* script for processing preprocessor outputVadim Bendebury2020-03-312-0/+715
| | | | | | | | | | | | | | | | | | | | This script is customized to be used in Chrome OS EC codebase, where functions cprintf(), cprints() and cputs()are used to generate console output. The operation of the script is extensively described in the docstring of the file, a unit test is provided to verify basic functionality. BUG=b:149964350 TEST=./util/test_util_precompile.py succeeds with the rest of the patches applied built a Cr50 image, verified that using a verified version of Acroterm one can communicate with Cr50 console the same way it works today over regular UART. Change-Id: I2c92088a8b08dcf7fdb606a01fbc94ab0d2df6e6 Signed-off-by: Vadim Bendebury <vbendeb@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2106863 Reviewed-by: Randall Spangler <rspangler@chromium.org>
* Modify ec_comm command to corrupt NVMEM copy of kernel secdataNamyoon Woo2020-03-315-25/+69
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 'ec_comm corrupt' used to corrupt a copy of EC-RW hash in ec_efs.c for test purpose. This patch makes it corrupt the copy stored in the TPM NVMEM cache first, and then read it into the cache in ec_efs.c. 'corrupt' option is available for regular image as well onl if CCD is opened. 'reload' option is obsolete. BUG=b:150650877 TEST=checked the behavior in the sequence below: 0. program regular image cr50> ec_comm corrupt CCD is not opened Access Denied Usage: ec_comm [corrupt] 1. open ccd. 2. Checked the original hash code. cr50> ec_comm ... ec_hash_sec_data : /* original hash code, Hm. */ 3. Corrupt the hash code. cr50> ec_comm corrupt ... ec_hash_sec_data : /* corrupted hash code, Hc. */ 4. Reboot EC. ec> reboot ap-off 5. Check the boot mode is NO_BOOT mode. chroot$ gsctool --getbootmode ... Boot mode = 0x01: NO_BOOT 6. Turn on AP by tapping the power button. Check AP rewrites the secdata, and Cr50 reloads it. cr50> ec_comm ... ec_hash_sec_data : /* original hash code, Hm. */ Signed-off-by: Namyoon Woo <namyoon@google.com> Change-Id: Id34239911da204e1eacd285fa601a9b5db03c4ee Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2119130 Reviewed-by: Daisuke Nojiri <dnojiri@chromium.org> Reviewed-by: Mary Ruthven <mruthven@chromium.org> Commit-Queue: Namyoon Woo <namyoon@chromium.org> Tested-by: Namyoon Woo <namyoon@chromium.org>
* Print EC-EFS2 boot-mode upon ec_comm uart commandNamyoon Woo2020-03-281-0/+7
| | | | | | | | | | | | | | | | | | | | This patch makes ec_comm uart command to display EC-EFS2 boot mode, either 'NORMAL' or 'NO_BOOT'. This shall be used for test purpose. BUG=b:150650877 TEST=manually checked on uart. > ec_comm ... ec_hash : LOADED secdata_error_code : 0x00000000 boot_mode : NORMAL Signed-off-by: Namyoon Woo <namyoon@google.com> Change-Id: Ia2ac1bf9fdecc641558856754f9df2c917434d95 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2125155 Tested-by: Namyoon Woo <namyoon@chromium.org> Reviewed-by: Mary Ruthven <mruthven@chromium.org> Commit-Queue: Namyoon Woo <namyoon@chromium.org>
* cr50: prepare to release 0.{3,4}.27Mary Ruthven2020-03-272-2/+2
| | | | | | | | | | BUG=none TEST=none Change-Id: I67d8c30ee7ee1bfb9e75cee478a67f46feb19f88 Signed-off-by: Mary Ruthven <mruthven@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2124951 Reviewed-by: Vadim Bendebury <vbendeb@chromium.org>
* Add .pylintrcVadim Bendebury2020-03-261-0/+170
| | | | | | | | | | | | | | | | | | This is a renamed copy of the recommended platform/dev/contrib/pylintrc@8021dab with a single addition: 12a13 > max-line-length = 80 replacing default limit of 100 chars. BUG=none TEST='cros lint <py file>' Signed-off-by: Vadim Bendebury <vbendeb@chromium.org> Change-Id: Ie9647f5b38faf39a4839b9b9fdefa8bd85f483ab Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2122768 Reviewed-by: Mary Ruthven <mruthven@chromium.org>
* Bring in acroterm from the Dauntless project.Vadim Bendebury2020-03-252-0/+1191
| | | | | | | | | | | | | acroterm.py is a copy taken as if from Acropora core tree at sha 80bf39f and modified to add the Chromium OS authors headers. BUG=b:149964350 TEST=./util/test_acroterm.py Change-Id: I48e866e205ef62f6e776e6c50b0f970c9df5202a Signed-off-by: Vadim Bendebury <vbendeb@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2114240 Reviewed-by: Mary Ruthven <mruthven@chromium.org>
* tpm2: clean up stubs.cVadim Bendebury2020-03-251-17/+4
| | | | | | | | | | | | | | | Drop the unused function and use ccprintf() instead of uart_printf(). Using ccprintf() will make it easier to use this code when packet mode is enabled. Used tabs in the changed lines s to pacify repo upload. BUG=b:149964350 TEST=make buildall -j Signed-off-by: Vadim Bendebury <vbendeb@chromium.org> Change-Id: I97522e9278a4393ef75b9a6a90e6995ba2449f30 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2114237
* cr50: Configure clang-format to AlignConsecutiveMacrosstabilize-12997.B-cr50_stabLouis Collard2020-03-231-0/+1
| | | | | | | | | | | | | BUG=none BRANCH=cr50 TEST=git-clang-format Signed-off-by: Louis Collard <louiscollard@chromium.org> Change-Id: I2618d7b6d731200e605e207bc7343930e4701293 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2111912 Tested-by: Vadim Bendebury <vbendeb@chromium.org> Reviewed-by: Vadim Bendebury <vbendeb@chromium.org> Commit-Queue: Vadim Bendebury <vbendeb@chromium.org>
* g: add CONFIG_USB_CONSOLE_DEFAULT_DISABLEDMarius Schilder2020-03-202-6/+14
| | | | | | | | | | | | | | | | | | | | | | | | | | To avoid some sort of race in private-cr52 endpoint initialization, which results in a reboot loop. Calling usb_console_enable() in HOOK_LAST instead appears stable, at cost of missing some early console output. While at it, reduce some SRAM usage and improve legibility by moving to bool from int. Strictly opt-in; behavior unchanged for existing code. BUG=chromium:1063240 BRANCH=cr50 TEST=make buildall; cr52 build w/ usb_console now enumerates w/o resets. Signed-off-by: mschilder@google.com Change-Id: I352edb4c045df401cb99573da5765b88deb45d0d Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2111450 Reviewed-by: Vadim Bendebury <vbendeb@chromium.org> Reviewed-by: Marius Schilder <mschilder@chromium.org> Reviewed-by: Namyoon Woo <namyoon@chromium.org> Commit-Queue: Marius Schilder <mschilder@chromium.org> Tested-by: Marius Schilder <mschilder@chromium.org> Auto-Submit: Marius Schilder <mschilder@chromium.org>
* Makefile.rules: prevent unnecessary updates of ec_version.hVadim Bendebury2020-03-191-1/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | While working on a different issue it was discovered that $(out)/RW/board/cr50/board.o is rebuilt every time make is ran, even if there has been no changes. Further investigation has shown that the problem is that $(out)/RW/board/cr50/board.o depends on $(out)/ec_version.h, which is not rebuilt unless something changed, but is declared .PHONY in Makefile.rules Turns out the declaration is supposed to be conditional on actual change in ec_version.h, but the condition is always True. This in turn was due to the fact that when checking if there is a change, some relevant make variables (CR50_DEV, CR50_SQA, and CRYPTO_TEST) were not set when invoking ./util/getversion.sh. When the variables are set, ec_version.h is not decalred PHONY, no unnecessary compilation is invoked. BUG=none TEST=repetitive running of make BOARD=cr50 CR50_DEV=1 build/cr50/RW/board/cr50/board.o does not trigger recompilation of board.o any more Signed-off-by: Vadim Bendebury <vbendeb@chromium.org> Change-Id: Ibe75bcda9a774e748f973d85841bbde9c29fd104 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2108920 Reviewed-by: Namyoon Woo <namyoon@chromium.org> Reviewed-by: Andrey Pronin <apronin@chromium.org>
* PRESUBMIT.cfg does not need to enforce BRANCH=Vadim Bendebury2020-03-181-1/+0
| | | | | | | | | | | | | | | This is the cr50_stab branch, pretty much all patches will have to be cherry picked into cr50-prepvt and cr50-mp, no need to add noise to patch descriptions. BUG=none TEST='repo upload' does not complain about missing BRANCH= in the patch descriptions. Signed-off-by: Vadim Bendebury <vbendeb@chromium.org> Change-Id: Iaac7c4576317025c750872fb6b9c56e64c82cc15 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2108719 Reviewed-by: Namyoon Woo <namyoon@chromium.org>
* remove CONFIG_USB_HID_KEYBOARD and CONFIG_USB_UPDATENamyoon Woo2020-03-136-1107/+0
| | | | | | | | | | | | | | | | | | | | | | This path removes CONFIG_USB_HID_KEYBOARD support and CONFIG_USB_UPDATE support because they are not used in any cr5X board configuration. Ths patch also removes some subsidiary configs as upload hook script guides. > CONFIG_USB_PAIRING > CONFIG_TOUCHPAD_VIRTUAL_OFF > CONFIG_USB_CONSOLE_READ BUG=none BRANCH=cr50 TEST=make buildall Signed-off-by: Namyoon Woo <namyoon@google.com> Change-Id: Iafa553fdf58772744b1d9a5c7f5460f42264f468 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2103045 Tested-by: Namyoon Woo <namyoon@chromium.org> Reviewed-by: Mary Ruthven <mruthven@chromium.org> Commit-Queue: Namyoon Woo <namyoon@chromium.org>
* change the init proiorities of ec_efs_init() and ec_comm_init()release-R82-12974.B-cr50_stabNamyoon Woo2020-03-124-3/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch reprioritizes ec_comm_init() and ec_efs_init() so that they won't be executed prior to board_init(), which executes nvmem_init(). BUG=b:151187315 BRANCH=cr50 TEST=let cr50 reboot a few times, and checked the console message and the ec_comm command output that Kernel secdata was reloaded without error. Swapped cr50 image from normal to dev, vice versa, and repeated the rebooting. [Reset cause: hard] [0.003799 Inits done] strap pin readings: a1:2 a9:3 a6:0 a12:0 [0.005893 Valid strap: 0xe properties: 0xa00041] [0.007991 init_jittery_clock_locking_optional: run level high, ... [0.045539 init took 29953] [0.051185 tpm_rst_asserted] [0.052074 EC-COMM: Initializtion] Console is enabled; type HELP for help. ... > ec_comm ... response : 0xec00 ec_hash : LOADED secdata_error_code : 0x00000000 > Change-Id: Ia695896986374ac9d23ac111fe0086ec6a13923e Signed-off-by: Namyoon Woo <namyoon@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2093102 Reviewed-by: Vadim Bendebury <vbendeb@chromium.org>
* add corrupt and reload options to 'ec_comm' console cmdNamyoon Woo2020-03-113-2/+39
| | | | | | | | | | | | | | | | | | | | Two new options for 'ec_comm' are for test usage only. - ec_comm corrupt: it corrupts the ECRW hash in ec_comm module. Hash corruption will cause EC-FW verification failure. It can be useful to check how AP firmware performs software sync on this failure. - ec_comm reload: it forces Cr50 to reload ECRW hash from tpm nvmem. This is to restore the EC EFS2 status in Cr50 from corrupted status. BUG=b:150650877 BRANCH=cr50 TEST=manually ran 'ec_comm corrupt' or 'ec_comm reload' with dev image. Checked cr50 normal image refuses those command lines. Signed-off-by: Namyoon Woo <namyoon@chromium.org> Change-Id: Ib4aa9532132e1ee786e623bd658a68987e4681dc Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2094781 Reviewed-by: Vadim Bendebury <vbendeb@chromium.org>
* introducing an unittest of EC-EFSNamyoon Woo2020-03-1116-19/+620
| | | | | | | | | | | | | | | This patch adds a test case for EC-EFS functions. BUG=b:150650877 BRANCH=cr50 TEST=make run-ec_comm make runhosttests make buildall -j Signed-off-by: Namyoon Woo <namyoon@chromium.org> Change-Id: I90cdc3aa73cf8946da4cf094de5ca0adfaaa0a7c Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2096338 Reviewed-by: Vadim Bendebury <vbendeb@chromium.org>
* minor cleanup on EC-EFS2 implementationNamyoon Woo2020-03-112-2/+1
| | | | | | | | | | | | | | usart.h doesn't need to be included in ec_comm.c. This patch also fixes nit output format in cprints. BUG=none BRANCH=cr50 TEST=make run-ec_comm Signed-off-by: Namyoon Woo <namyoon@chromium.org> Change-Id: Icadf0d860cee8d3cf882cdb4571aaa2bc325adf9 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2094751 Reviewed-by: Vadim Bendebury <vbendeb@chromium.org>
* allowing repeating an EC-EFS command, SET_BOOT_MODENamyoon Woo2020-03-111-2/+27
| | | | | | | | | | | | | | | | This patch allows the repeating SET_BOOT_MODE command except one case that attempts to change the boot mode from NO_BOOT to NORMAL. Cr50 resets EC on those violating commands. This patch adds error handling for an unknown boot mode parameter. BUG=none BRANCH=cr50 TEST=ran unittest, 'make run-ec_comm'. Signed-off-by: Namyoon Woo <namyoon@chromium.org> Change-Id: Ib6c97596ed9c7b7563fbe5e6497cbd668f57a474 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2096840 Reviewed-by: Mary Ruthven <mruthven@chromium.org>
* system: avoid printing one character at a timeVadim Bendebury2020-03-111-13/+35
| | | | | | | | | | | | | | | | | | | | With the upcoming transition to handling console traffic in packet mode it is very expensive to be shipping one character at a time, each character results in sending a packet of 16 or so bytes. This patch modifies print_build_string() such that it splits the long build version string into manageable substrings and prints them instead of printing one character at a time. BRANCH=cr50, cr50-mp BUG=b:149964350 TEST=built a Cr50 image, verified that build string is printed as expected. Signed-off-by: Vadim Bendebury <vbendeb@chromium.org> Change-Id: I743205932892b0f14c161ade5ea856a658fb26e6 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2097444 Reviewed-by: Mary Ruthven <mruthven@chromium.org>
* gpio_commands: reduce number of vararg parametersVadim Bendebury2020-03-111-17/+24
| | | | | | | | | | | | | | | | | | | | | | | | | | | The extended GPIO state support command uses a lot of format elements when trying to report properties of the GPIOs. The upcoming source code processing scripts do not support more than eight format elements per format string. On top of that there is no need to even try to generate the string in case extended GPIO command mode is supported. Let's move generating the string with properties into the conditionally compiled section, to make sure that it is generated/processed only when needed, and let's use snprintf() first to reduce the number of format elements in the following ccprintf invocation. BRANCH=cr50, cr50-mp BUG=b:149964350 TEST=verified proper 'gpiog' command output when code is compiled both with and without CONFIG_CMD_GPIO_EXTENDED Change-Id: I0836a350d1f787c84d2079f10de3652523a8a5a9 Signed-off-by: Vadim Bendebury <vbendeb@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2097442 Reviewed-by: Mary Ruthven <mruthven@chromium.org> Reviewed-by: Namyoon Woo <namyoon@chromium.org>
* move ec_comm implementation to common directoryNamyoon Woo2020-03-107-2/+8
| | | | | | | | | | | | | | | This patch moves ec_comm.c and ec_efs.c from board/cr50 to common/, so that they can be shared with other board configuration (like host). This is to build unittest for those files. BUG=none BRANCH=cr50 TEST=make buildall -j Signed-off-by: Namyoon Woo <namyoon@chromium.org> Change-Id: I67ac313054ebe4604848a176f0a42e3483957e74 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2094076 Reviewed-by: Vadim Bendebury <vbendeb@chromium.org>
* fix in EC-EFS command, SET_BOOT_MODENamyoon Woo2020-03-101-1/+1
| | | | | | | | | | | | | | | | This patch changes fixes the pre-condition to check before it processes the command, SET_BOOT_MODE. It should check if the current boot mode is NORMAL mode, but it used to check if the input parameter value is NORMAL mode. BUG=none BRANCH=cr50 TEST=make buildall -j Signed-off-by: Namyoon Woo <namyoon@chromium.org> Change-Id: I85e0a3a1ed27a276262a7b9d3889c826cca14d19 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2094075 Reviewed-by: Daisuke Nojiri <dnojiri@chromium.org>
* util: add flash_cr50 script for updating cr50.Mary Ruthven2020-03-091-0/+771
| | | | | | | | | | | | | | | | | | | | | | | | | | | Add a flash_cr50 script for updating cr50. The script supports updating through gsctool and cr50-rescue. BUG=b:144048851 BRANCH=none TEST=manual python util/flash_cr50.py -i $IMAGE -p 9999 -c cr50-rescue on octopus. python util/flash_cr50.py -i $IMAGE -p 9999 --method=cr50_reset_odl -c cr50-rescue python util/flash_cr50.py -i $IMAGE -c 'sudo gsctool' python util/flash_cr50.py -i $IMAGE -s $SERIAL Change-Id: Ibdd213446fea4cb66f77c6b7249c02914bd0712a Signed-off-by: Mary Ruthven <mruthven@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/1907469 Reviewed-by: Vadim Bendebury <vbendeb@chromium.org> (cherry picked from commit ba216cfef2a005717938b28ceab15b79406f7f3b) Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2092916 Tested-by: Vadim Bendebury <vbendeb@chromium.org> Commit-Queue: Vadim Bendebury <vbendeb@chromium.org>
* bs: use platform/cr50 as EC_ROOTMary Ruthven2020-03-071-1/+1
| | | | | | | | | | | | | BUG=none BRANCH=none TEST=manual sudo CR50_BOARD_ID="FFFF:0:10" H1_DEVIDS="${DEVID}" ./util/signer/bs Change-Id: I54f149bf5c0248a8672514258b596455d442ef69 Signed-off-by: Mary Ruthven <mruthven@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2088552 Reviewed-by: Namyoon Woo <namyoon@chromium.org> Reviewed-by: Vadim Bendebury <vbendeb@chromium.org>
* cr50: remove create_released_imageMary Ruthven2020-03-071-232/+0
| | | | | | | | | | | BUG=none BRANCH=none TEST=none Change-Id: I63a586c946f1b69547197767753e60f3319aad90 Signed-off-by: Mary Ruthven <mruthven@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2092211 Reviewed-by: Namyoon Woo <namyoon@chromium.org>