diff options
-rw-r--r-- | docs/fingerprint/fingerprint-factory-quick-guide.md | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/docs/fingerprint/fingerprint-factory-quick-guide.md b/docs/fingerprint/fingerprint-factory-quick-guide.md new file mode 100644 index 0000000000..aeb84f157b --- /dev/null +++ b/docs/fingerprint/fingerprint-factory-quick-guide.md @@ -0,0 +1,97 @@ +# Chrome OS Fingerprint Sensor: Quick Factory Guide + +The goal of this document is to outline how ODM partners can make use of the +existing Chrome OS factory scripts to meet Chrome OS FPS factory requirements. + +[TOC] + +## Factory Requirements + +### Flash firmware for fingerprint sensor microcontroller (FPMCU) + +FPMCU firmware must be flashed before fingerprint functional test is run. ODM +partners may work with the module house to preflash FPMCU firmware before +factory SMT. However, this way ODM partners have to coordinate with the module +house to make sure the preflash FPMCU firmware blob is extracted from the FSI +release image (from /opt/google/biod/fw/). If the FPMCU firmware doesn’t match +the FPMCU firmware blob checked into the release image, the end users will see +the ‘critical update’ screen in their out-of-box experience, because +bio\_fw\_updater tries to update FPMCU firmware at boot time. This is a bad user +experience we want to avoid. Most importantly, in PVT/MP build, only the FPMCU +firmware in the release image would be signed by MP key. So you **MUST** ensure +FPMCU is flashed with the MP-signed firmware blob extracted from FSI, before +shipping the devices. + +As opposed to pre-flashing FPMCU in the module house, ODM partners are +encouraged to make use of +[update\_fpmcu\_firmware.py](https://chromium.googlesource.com/chromiumos/platform/factory/+/e5e903d0a0d8327dd8b9e47d2c808fd845ed73a4/py/test/pytests/update_fpmcu_firmware.py) +to update FPMCU firmware in the factory flow. This script can detect fingerprint +MCU board name, find the right FPMCU firmware blob for the DUT from the release +partition, and then flash FPMCU by flash\_fp\_mcu tool. Please note that this +script may take more than 30 secs to complete, which is slow. + +Since bio\_fw\_update has been disabled in factory test image via +[crrev/c/1913645](https://chromium-review.googlesource.com/c/chromiumos/platform2/+/1913645), +in the factory flow, the FPMCU firmware should not be overwritten by +boot-update-firmware service during reboot. + +### Run fingerprint sensor functional test + +Please add +[fingerprint\_mcu.py](https://chromium.git.corp.google.com/chromiumos/platform/factory/+/a283609cd8446ba4a4b75c2e1d84c9ba24ea8422/py/test/pytests/fingerprint_mcu.py) +to your device test list. A more detailed description about this test can be +found +[here](https://chromium.googlesource.com/chromiumos/platform/ec/+/refs/heads/master/docs/fingerprint/fingerprint-factory-requirements.md). + +### Initialize FPMCU entropy in factory finalization + +The support for FPMCU entropy initialization has been integrated into the +factory finalization script. So FPMCU entropy should be automatically +initialized in factory finalization, if a FPMCU is found on DUT. Note that FPMCU +entropy initialization would fail if rollback\_block\_id is not equal to zero, +which means the entropy has been initialized before. It is usually caused by +biod trying to initialize FPMCU entropy and increment rollback\_block\_id at +boot time. Since we have disabled biod and bio\_crypto\_init in factory test +image via +[crrev/c/1910290](https://chromium-review.googlesource.com/c/chromiumos/platform/factory/+/1910290), +we expect rollback\_block\_id would stay zero during the factory flow, and FPMCU +entropy initialization should succeed in factory finalization. So just run +factory finalization as any other CrOS boards. + +### Enable FPMCU software write protection (SWWP) in factory finalization in PVT/MP + +The support for FPMCU SWWP has been integrated into factory finalization script. +So FPMCU SWWP should be automatically enabled in factory finalization together +with AP/EC SWWP when write\_protection arg is set to true and a FPMCU is found +on DUT. Just run factory finalization as any other CrOS boards. + +### Reset entropy for factory re-finalization (in case of RMA or OQC) + +For the boards that have been finalized, FPMCU entropy has been initialized. So +running re-finalization for those boards are expected to fail at FPMCU entropy +initialization. Before running re-finalization for those boards, ODM partners +have to remove hardware write protection (HWWP) and then run +[update\_fpmcu\_firmware.py](https://chromium.googlesource.com/chromiumos/platform/factory/+/d399a0a1bdeb7249de2721b269e7365e4486e23c/py/test/pytests/update_fpmcu_firmware.py) +to reset rollback\_block\_id and entropy. So the follow-up re-finalization +(which re-initialize entropy) can succeed. + +## References + +* CrOS fingerprint factory requirements: + [doc link](https://chromium.googlesource.com/chromiumos/platform/ec/+/refs/heads/master/docs/fingerprint/fingerprint-factory-requirements.md) +* The summary of CLs: + * Add a factory script to update FPMCU firmware: + [crrev/c/1918679](https://chromium-review.googlesource.com/c/chromiumos/platform/factory/+/1918679), + [crrev/c/1913493](https://chromium-review.googlesource.com/c/chromiumos/platform/factory/+/1913493), + [crrev/c/1927149](https://chromium-review.googlesource.com/c/chromiumos/platform/factory/+/1927149), + [crrev/c/1984618](https://chromium-review.googlesource.com/c/chromiumos/platform/factory/+/1984618), + [crrev/c/2036574](https://chromium-review.googlesource.com/c/chromiumos/platform/factory/+/2036574) + * Disable FPS-related services that will interfere with the factory flow: + [crrev/c/1913645](https://chromium-review.googlesource.com/c/chromiumos/platform2/+/1913645), + [crrev/c/1910290](https://chromium-review.googlesource.com/c/chromiumos/platform/factory/+/1910290) + * Support FPMCU in factory finalization: + [crrev/c/1868795](https://chromium-review.googlesource.com/c/chromiumos/platform/factory/+/1868795), + [crrev/c/1902267](https://chromium-review.googlesource.com/c/chromiumos/platform/factory/+/1902267), + [crrev/c/1900503](https://chromium-review.googlesource.com/c/chromiumos/platform/factory/+/1900503), + [crrev/c/1925927](https://chromium-review.googlesource.com/c/chromiumos/platform/factory/+/1925927), + [crrev/c/1948163](https://chromium-review.googlesource.com/c/chromiumos/platform/factory/+/1948163) |