You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 562b372
Browse filesBrowse the repository at this point in the historyBrowse files
@@ -9352,6 +9353,74 @@ Attempting boot from partition A
9352
9353
```
9353
9354
At this point, the kernel image in partition "A" is verified and staged and you should be seeing the log messages of your OS booting.
9354
9355
9356
+
## NAI 68INT6 (Intel Tiger Lake)
9357
+
9358
+
wolfBoot target `nai_68int6` for the North Atlantic Industries 68INT6, a 3U OpenVPX SOSA-aligned single board computer (Intel Core i7-1185GRE, Tiger Lake UP3). It uses the Intel FSP support described [above](#intel-x86_64-with-intel-fsp-support) and shares the Tiger Lake path with the Kontron target. wolfBoot boots a signed 64-bit Linux from the SATA disk with A/B update, measured boot and TPM anti-rollback, verified on a Rev D5 bench board. The public Tiger Lake FSP does not train this board's memory, so the FSP is extracted from a 68INT6 BIOS image.
9359
+
9360
+
|||
9361
+
|---|---|
9362
+
| CPU | i7-1185GRE (`06-8C-01`), Tiger Lake UP3, PCH-LP |
9363
+
| Memory | 2 x 32 GB DDR4-3200 SODIMM, non-ECC |
9364
+
| BIOS flash | Rev C/D5: 2 x W25R256JV (32 MB), selected by JP36. Next revision: one 64 MB device |
9365
+
| TPM | SLB9670 (SHA-1/256), or SLB9672, which adds a SHA-384 bank |
`nai_extract_fsp.sh` takes FSP-T/M/S and the microcode from a 68INT6 BIOS image. Without it the build uses the public FSP, which compiles but does not train memory. The `-n` stitch replaces the top 6 MB (`BOOTLOADER_PARTITION_SIZE`) of the 12 MB BIOS region and keeps the descriptor and CSME byte for byte. The board has no recovery region (recovery is the second flash device), so use `-n`, not `-m`. The result is `final_image.bin`.
9381
+
9382
+
### Integrity algorithms
9383
+
9384
+
ECC P-384 and SHA-384 match what Intel Boot Guard uses for the Initial Boot Block.
9385
+
9386
+
| Layer | Algorithm |
9387
+
|---|---|
9388
+
| Image signature | ECC P-384 (`SIGN=ECC384`) |
9389
+
| Image digest | SHA-384 (`HASH=SHA384`) |
9390
+
| Measured boot PCR | SHA-256 (the SLB9670 has only SHA-1 and SHA-256 banks) |
9391
+
9392
+
`wolfBoot_image_measure()` re-hashes the authenticated digest with the PCR bank's algorithm, so one image serves either TPM. `MEASURED_PCR_ALG=SHA384` needs an SLB9672 with its SHA-384 bank allocated (`TPM2_PCR_Allocate` under platform auth, a provisioning step).
9393
+
9394
+
### Configuration
9395
+
9396
+
Notable options in [config/examples/nai_68int6.config](../config/examples/nai_68int6.config):
9397
+
9398
+
| Option | Meaning |
9399
+
|---|---|
9400
+
|`X86_UART_NUMBER=2`| LPSS UART2 for all three FSP phases (Kontron uses 0) |
9401
+
|`ACPI=1`| Generate ACPI tables (RSDP/XSDT/FADT/MADT/MCFG and a minimal DSDT) for Linux |
9402
+
|`ANTI_ROLLBACK=1`| Persistent version floor and boot audit counters in TPM NV |
9403
+
|`MEASURED_BOOT=1`, `MEASURED_PCR_OS=4`| Firmware into PCR 0, the verified OS image into PCR 4 |
9404
+
|`WOLFBOOT_BOOT_DISK=0`| Boot from GPT partitions; the A/B indices (sda3/sda4) are set in `src/update_disk.c`|
9405
+
9406
+
### BIOS region lock
9407
+
9408
+
The BIOS region is not write-locked by default (`WOLFBOOT_DONT_LOCK_BIOS=1`), so the flash stays writable for in-field updates. To lock it, call `tgl_lock_bios_region()` (`hal/nai_68int6.c`) from a `hal_flash_protect()` override. It sets SPI Flash Protected Range 0 over the BIOS region and then FLOCKDN, which hold until the next platform reset.
9409
+
9410
+
### Anti-rollback
9411
+
9412
+
`ANTI_ROLLBACK=1` keeps a version floor and boot audit counters in a TPM NV index; the backend is `src/boot_state_tpm.c` and the policy is `src/boot_state.c`. The floor is the highest version ever booted, set trust-on-first-use. A validly signed older image still boots and records a rollback event. Only an untrustworthy reference halts the boot; `ANTI_ROLLBACK_STRICT=1` also halts when the TPM is unreachable or a write fails.
9413
+
9414
+
TPM NV is used instead of the partition state trailer because the floor must survive a full reimage of the disk or flash. `DISK_BOOT_CONFIRM` still handles per-slot confirmation, and the backend can move to a root-of-trust device later without changing the policy.
9415
+
9416
+
`ALLOW_DOWNGRADE` is left unset, the secure default: if the higher-versioned slot fails to verify, wolfBoot halts (`Rollback to lower version not allowed`) rather than boot the lower one. Building with `ALLOW_DOWNGRADE=1` allows that fall-back and leaves the TPM floor as the only rollback guard.
9417
+
9418
+
The booted OS cannot lower the floor. wolfBoot write-locks the NV index (`TPMA_NV_WRITE_STCLEAR`) on every boot, so it stays read-only until the next TPM reset. `wolfBoot_tpm2_deinit()` then sets the platform hierarchy auth to a random value nobody keeps, as in the TPM keystore build, so the OS cannot undefine the index and recreate it. `WOLFBOOT_TPM_NO_CHG_PLAT_AUTH` keeps platform auth unchanged.
9419
+
9420
+
### Boot, programming and recovery
9421
+
9422
+
wolfBoot boots the highest-versioned signed 64-bit `bzImage` that verifies from the two GPT boot partitions. It falls back to the other slot only if that is not a downgrade (see Anti-rollback), and holds in reset if neither boots. Program the flash with `flashrom` from the board's Linux, or with a Dediprog SF100 on JP4 while the board is off. JP36 selects which bank boots and which one a programmer sees; move it only with the board off. Software can only reprogram the bank the board booted from, so a development image that never reaches an OS has to be recovered with the SF100.
9423
+
9355
9424
## Infineon PSOC Control C3
9356
9425
9357
9426
The [PSOC Control C3](https://www.infineon.com/products/microcontroller/32-bit-psoc-arm-cortex/32-bit-psoc-control-arm-cortex-m33-mcu/psoc-control-c3-main-line) family (PSC3, CAT1B) is an Arm Cortex-M33 motor-control MCU. wolfBoot runs as the first application the BootROM launches, verifies the signed firmware in the BOOT partition and jumps to it.
0 commit comments