summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* usb_spi: refactor to allow use in different contextsstabilize-quickfix-13099.93.B-cr50_stabstabilize-13099.94.B-cr50_stabstabilize-13099.90.B-cr50_stabstabilize-13099.85.B-cr50_stabstabilize-13099.73.B-cr50_stabstabilize-13099.72.B-cr50_stabstabilize-13099.70.B-cr50_stabstabilize-13099.118.B-cr50_stabstabilize-13099.110.B-cr50_stabstabilize-13099.101.B-cr50_stabrelease-R84-13099.B-cr50_stabVadim Bendebury2020-05-143-33/+64
| | | | | | | | | | | | | | | | | | | | | | | | | | | | The code which allows to read a section of AP or EC flash and calculate the section's SHA256 sum does not allow calculating the sum over multiple non-adjacent flash areas. This patch changes the implementation to allow calculations over more than one region. Initialization, calculation and reporting of the result become three separate API entries. The loop counting the number of the read flash chunks, is being simplified, a watchdog kick added to the brief loop interruptions, as it turns out that sleeping alone is not enough to prevent watchdog expiration when calculating hash over large SPI flash ranges. Also simplified prototypes for usb_spi_board_enable() and usb_spi_board_disable(). BUG=b:153764696 TEST=created an RO descriptor for the Atlas DUT and verified that 'gsctool -O' succeeds. Cq-Depend: chrome-internal:2939596 Signed-off-by: Vadim Bendebury <vbendeb@chromium.org> Change-Id: Iec7b8634c7c80ebc7600c5b708879eb322bc7fec Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2163569 Reviewed-by: Andrey Pronin <apronin@chromium.org>
* crypto_api: use const voidVadim Bendebury2020-05-146-17/+16
| | | | | | | | | | | | | | | | | | | This is a minor API clean up, it is not entirely clear why const void pointers were not used originally, but using this type for input data (and void pointer for output) makes interfacing with the library much easier. Also modified cases where the first parameter of DCRYPTO_SHA1_hash() was typecasted unnecessarily. BUG=none TEST=make buildall succeeds, Cr50 image supports booting a Chrome OS device just fine. Signed-off-by: Vadim Bendebury <vbendeb@chromium.org> Change-Id: Ic8a670aa7b26598ea323182845c184b7f1d715a1 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2163568 Reviewed-by: Andrey Pronin <apronin@chromium.org>
* ap_ro_hash.py: improve error processing and help messagesVadim Bendebury2020-05-141-5/+30
| | | | | | | | | | | | | | | | | | | | This patch adds processing of the case when the Cr50 does not support the vendor command setting the AP RO areas hash. Also improve help message and include text descriptions of the encountered errors, if any. BUG=b:153764696 TEST=with the rest of the patches applied verified that programming of the AP RO verification space succeeds when expected, and proper errors are reported in case of failure. ./util/test_ap_ro_hash.py also still succeeds. Signed-off-by: Vadim Bendebury <vbendeb@chromium.org> Change-Id: Ie3898ef5ab925404decd730f457267615c9ab39c Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2171397 Reviewed-by: Andrey Pronin <apronin@chromium.org>
* make cr50 agnostic about EC-EFS2Namyoon Woo2020-05-143-21/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch makes cr50 respond EC-EFS2 related TPM commands no matter it has the board property, BOARD_EC_CR50_COMM_SUPPORT or not. board_has_ec_cr50_comm_support() calls remain for configuring GPIO_EC_PACKET_MODE_EN only. BUG=b:155214584 TEST=checked gsctool running on Coral. [before] $ gsctool --getbootmode finding_device 18d1:5014 Found device. found interface 3 endpoint 4, chunk_len 64 READY ------- Error 8 in Getting boot mode [after] $ gsctool --getbootmode finding_device 18d1:5014 Found device. found interface 3 endpoint 4, chunk_len 64 READY ------- Boot mode = 0x00: NORMAL Also checked 'ec_comm' uart command. [before] > ec_comm No EC-CR50 comm support Invalid argument Usage: ec_comm [corrupt] [after] > ec_comm uart : 0xff packet mode : DISABLED phase : 0 preamble_count : 0 bytes_received : 0 bytes_expected : 0 response : 0x0000 ec_hash : UNLOADED <-- It is marked as unloaded, secdata_error_code : 0x00001203 <-- because of NVMEM error. boot_mode : NORMAL <-- Still, boot_mode is normal. Signed-off-by: Namyoon Woo <namyoon@google.com> Change-Id: I08dc9abd8f194c83484b5be9b0a5e8844b2fd221 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2185872 Tested-by: Namyoon Woo <namyoon@chromium.org> Reviewed-by: Vadim Bendebury <vbendeb@chromium.org> Commit-Queue: Namyoon Woo <namyoon@chromium.org>
* gsctool: print sensible date when listing flash log contentsVadim Bendebury2020-05-111-1/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | Displaying epoch values in the flash log entries does not help the end user to synchronize the flash log events with other logs generated on the device. This patch changes the log output format to display the device time zone in the first line and then all present log entries with timestamp in 'dd:mm:yy hh:mm:ss' format. BUG=b:153764696 TEST=ran the new gsctool image on a Chrome OS device: $ gsctool -a -L Log time zone is PST Dec 31 69 16:00:01 : 00 May 06 20 21:20:41 : 09 01 ... May 08 20 12:09:21 : 09 00 May 08 20 12:09:22 : 09 03 May 08 20 12:09:23 : 09 06 Signed-off-by: Vadim Bendebury <vbendeb@chromium.org> Change-Id: I3fca12e1679fbdd9e0e168606014e84c89c42402 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2191282 Reviewed-by: Namyoon Woo <namyoon@chromium.org>
* cr50: prepare to release 0.{5,6}.4Mary Ruthven2020-05-082-2/+2
| | | | | | | | | | BUG=none TEST=none Change-Id: Idc983499980c0211d29767bb9dfad6caac99dc00 Signed-off-by: Mary Ruthven <mruthven@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2189617 Reviewed-by: Vadim Bendebury <vbendeb@chromium.org>
* idle: reduce set of idle command actionsMary Ruthven2020-05-081-9/+7
| | | | | | | | | | | | | Remove 'deep sleep' and 'invalid' idle actions from the idle console command. BUG=b:156032428 TEST='idle s' and 'idle w' work when the console is open. Change-Id: I9da2fa0d679ef89ecb2eaaad82541bd3e9e16140 Signed-off-by: Mary Ruthven <mruthven@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2189616 Reviewed-by: Vadim Bendebury <vbendeb@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>