Skip to content

Commit a2ee75c

Browse files
committed
Further improvement to CMake interfaces and test scripts
1 parent 535293d commit a2ee75c

3 files changed

Lines changed: 82 additions & 53 deletions

File tree

.github/workflows/cmake-build.yml

Lines changed: 38 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -14,64 +14,73 @@ jobs:
1414
fail-fast: false
1515
matrix:
1616
config:
17-
# Default configuration
18-
- name: "Default"
19-
options: "-DWOLFTPM_INTERFACE=SWTPM"
20-
# Test different TPM modules
21-
- name: "Module Auto"
22-
options: "-DWOLFTPM_INTERFACE=SWTPM -DWOLFTPM_MODULE=auto"
23-
- name: "Module ST33"
24-
options: "-DWOLFTPM_INTERFACE=SWTPM -DWOLFTPM_MODULE=st33"
17+
# Default configuration (SWTPM first)
18+
- name: "Defaults"
19+
options: ""
20+
# ST33 supports both SPI and I2C
21+
- name: "Module ST33 SPI"
22+
options: "-DWOLFTPM_INTERFACE=SPI -DWOLFTPM_MODULE=st33"
23+
- name: "Module ST33 I2C"
24+
options: "-DWOLFTPM_INTERFACE=I2C -DWOLFTPM_MODULE=st33"
25+
# Other modules use SPI
2526
- name: "Module Microchip"
26-
options: "-DWOLFTPM_INTERFACE=SWTPM -DWOLFTPM_MODULE=microchip"
27+
options: "-DWOLFTPM_INTERFACE=SPI -DWOLFTPM_MODULE=microchip"
2728
- name: "Module Nuvoton"
28-
options: "-DWOLFTPM_INTERFACE=SWTPM -DWOLFTPM_MODULE=nuvoton"
29+
options: "-DWOLFTPM_INTERFACE=SPI -DWOLFTPM_MODULE=nuvoton"
2930
- name: "Module SLB9670"
30-
options: "-DWOLFTPM_INTERFACE=SWTPM -DWOLFTPM_MODULE=slb9670"
31+
options: "-DWOLFTPM_INTERFACE=SPI -DWOLFTPM_MODULE=slb9670"
3132
- name: "Module SLB9672"
32-
options: "-DWOLFTPM_INTERFACE=SWTPM -DWOLFTPM_MODULE=slb9672"
33-
- name: "Module SLB9673"
34-
options: "-DWOLFTPM_INTERFACE=SWTPM -DWOLFTPM_MODULE=slb9673"
33+
options: "-DWOLFTPM_INTERFACE=SPI -DWOLFTPM_MODULE=slb9672"
34+
# SLB9673 is I2C
35+
- name: "Module SLB9673 I2C"
36+
options: "-DWOLFTPM_INTERFACE=I2C -DWOLFTPM_MODULE=slb9673"
3537
# Test wrapper disabled
3638
- name: "No Wrapper"
37-
options: "-DWOLFTPM_INTERFACE=SWTPM -DWOLFTPM_WRAPPER=no"
39+
options: "-DWOLFTPM_WRAPPER=no"
3840
# Test I2C support (enables ADV_IO automatically)
39-
- name: "I2C Enabled"
40-
options: "-DWOLFTPM_INTERFACE=SWTPM -DWOLFTPM_I2C=yes"
41+
- name: "I2C Enabled (legacy)"
42+
options: "-DWOLFTPM_I2C=yes"
43+
# Test interface options
44+
- name: "Interface I2C"
45+
options: "-DWOLFTPM_INTERFACE=I2C"
46+
- name: "Interface SPI"
47+
options: "-DWOLFTPM_INTERFACE=SPI"
4148
# Test Advanced IO
4249
- name: "Advanced IO"
43-
options: "-DWOLFTPM_INTERFACE=SWTPM -DWOLFTPM_ADVIO=yes"
50+
options: "-DWOLFTPM_INTERFACE=SPI -DWOLFTPM_ADVIO=yes"
51+
- name: "Advanced IO I2C"
52+
options: "-DWOLFTPM_INTERFACE=I2C -DWOLFTPM_ADVIO=yes"
4453
# Test MMIO (enables ADV_IO automatically)
4554
- name: "MMIO Enabled"
46-
options: "-DWOLFTPM_INTERFACE=SWTPM -DWOLFTPM_MMIO=yes"
55+
options: "-DWOLFTPM_MMIO=yes"
4756
# Test Check Wait State
4857
- name: "Check Wait State Enabled"
49-
options: "-DWOLFTPM_INTERFACE=SWTPM -DWOLFTPM_CHECK_WAIT_STATE=yes"
58+
options: "-DWOLFTPM_INTERFACE=SPI -DWOLFTPM_CHECK_WAIT_STATE=yes"
5059
- name: "Check Wait State Disabled"
51-
options: "-DWOLFTPM_INTERFACE=SWTPM -DWOLFTPM_CHECK_WAIT_STATE=no"
60+
options: "-DWOLFTPM_INTERFACE=SPI -DWOLFTPM_CHECK_WAIT_STATE=no"
5261
# Test TIS Lock
5362
- name: "TIS Lock Enabled"
54-
options: "-DWOLFTPM_INTERFACE=SWTPM -DWOLFTPM_TIS_LOCK=yes"
63+
options: "-DWOLFTPM_INTERFACE=SPI -DWOLFTPM_TIS_LOCK=yes"
5564
# Test Small Stack
5665
- name: "Small Stack"
57-
options: "-DWOLFTPM_INTERFACE=SWTPM -DWOLFTPM_SMALL_STACK=yes"
66+
options: "-DWOLFTPM_INTERFACE=SPI -DWOLFTPM_SMALL_STACK=yes"
5867
# Test HAL disabled
5968
- name: "No HAL"
60-
options: "-DWOLFTPM_INTERFACE=SWTPM -DWOLFTPM_HAL=no"
69+
options: "-DWOLFTPM_HAL=no"
6170
# Test Firmware disabled
6271
- name: "No Firmware"
63-
options: "-DWOLFTPM_INTERFACE=SWTPM -DWOLFTPM_FIRMWARE=no"
72+
options: "-DWOLFTPM_FIRMWARE=no"
6473
# Test Debug modes
6574
- name: "Debug Verbose"
66-
options: "-DWOLFTPM_INTERFACE=SWTPM -DWOLFTPM_DEBUG=verbose"
75+
options: "-DWOLFTPM_DEBUG=verbose"
6776
- name: "Debug IO"
68-
options: "-DWOLFTPM_INTERFACE=SWTPM -DWOLFTPM_DEBUG=io"
77+
options: "-DWOLFTPM_DEBUG=io"
6978
# Test Examples disabled
7079
- name: "No Examples"
71-
options: "-DWOLFTPM_INTERFACE=SWTPM -DWOLFTPM_EXAMPLES=no"
80+
options: "-DWOLFTPM_EXAMPLES=no"
7281
# Test combination of options
7382
- name: "Combined Options"
74-
options: "-DWOLFTPM_INTERFACE=SWTPM -DWOLFTPM_MODULE=st33 -DWOLFTPM_I2C=yes -DWOLFTPM_ADVIO=yes -DWOLFTPM_CHECK_WAIT_STATE=yes"
83+
options: "-DWOLFTPM_INTERFACE=I2C -DWOLFTPM_MODULE=st33 -DWOLFTPM_ADVIO=yes -DWOLFTPM_CHECK_WAIT_STATE=yes"
7584

7685
steps:
7786
#pull wolfTPM

.github/workflows/make-test-swtpm.yml

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -167,23 +167,24 @@ jobs:
167167
sudo ldconfig
168168
169169
- name: Setup ibmswtpm2
170-
if: matrix.needs_swtpm != false
170+
if: matrix.needs_swtpm == true || matrix.needs_swtpm == null
171171
uses: actions/checkout@master
172172
with:
173173
repository: kgoldman/ibmswtpm2
174174
path: ibmswtpm2
175175

176176
- name: Generate TPM port
177-
if: matrix.needs_swtpm != false
177+
if: matrix.needs_swtpm == true || matrix.needs_swtpm == null
178178
run: |
179-
# Generate random port in high range (32768-65535)
180-
TPM_PORT=$((32768 + RANDOM % 32768))
179+
# Generate deterministic port from matrix name (base 40000, spacing 2 for port+1)
180+
MATRIX_HASH=$(echo -n "${{ matrix.name }}" | cksum | cut -d' ' -f1)
181+
TPM_PORT=$((40000 + (MATRIX_HASH % 1000) * 2))
181182
echo "TPM_PORT=$TPM_PORT" >> $GITHUB_ENV
182183
echo "TPM2_SWTPM_PORT=$TPM_PORT" >> $GITHUB_ENV
183-
echo "Generated TPM port: $TPM_PORT"
184+
echo "Generated TPM port: $TPM_PORT (matrix: ${{ matrix.name }})"
184185
185186
- name: Start TPM simulator
186-
if: matrix.needs_swtpm != false
187+
if: matrix.needs_swtpm == true || matrix.needs_swtpm == null
187188
working-directory: ./ibmswtpm2/src
188189
run: |
189190
make

CMakeLists.txt

Lines changed: 37 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ endif()
140140
set(WOLFTPM_INTERFACE "auto" CACHE STRING
141141
"Select interface to TPM")
142142
set_property(CACHE WOLFTPM_INTERFACE
143-
PROPERTY STRINGS "auto;SWTPM;WINAPI;DEVTPM")
143+
PROPERTY STRINGS "auto;SWTPM;WINAPI;DEVTPM;SPI;I2C;MMIO")
144144

145145
# automatically set
146146
message("INTERFACE ${WOLFTPM_INTERFACE}")
@@ -173,12 +173,24 @@ elseif("${WOLFTPM_INTERFACE}" STREQUAL "DEVTPM")
173173
elseif("${WOLFTPM_INTERFACE}" STREQUAL "WINAPI")
174174
list(APPEND WOLFTPM_DEFINITIONS "-DWOLFTPM_WINAPI")
175175
target_link_libraries(wolftpm PRIVATE tbs)
176+
177+
elseif("${WOLFTPM_INTERFACE}" STREQUAL "SPI")
178+
# SPI interface
179+
180+
elseif("${WOLFTPM_INTERFACE}" STREQUAL "I2C")
181+
# I2C interface - requires I2C (ADV_IO will be enabled automatically in ADV_IO section)
182+
list(APPEND WOLFTPM_DEFINITIONS "-DWOLFTPM_I2C")
183+
184+
elseif("${WOLFTPM_INTERFACE}" STREQUAL "MMIO")
185+
# MMIO interface - requires MMIO (ADV_IO will be enabled automatically in ADV_IO section)
186+
list(APPEND WOLFTPM_DEFINITIONS "-DWOLFTPM_MMIO")
187+
176188
else()
177189
get_property(INTERFACE_OPTS CACHE WOLFTPM_INTERFACE
178190
PROPERTY STRINGS)
179191
message(FATAL_ERROR "\"${WOLFTPM_INTERFACE}\" is not known WOLFTPM_INTERFACE:"
180192
" ${INTERFACE_OPTS}")
181-
endif("${WOLFTPM_INTERFACE}" STREQUAL "SWTPM")
193+
endif()
182194

183195
# TPM Module Selection
184196
set(WOLFTPM_MODULE "auto" CACHE STRING
@@ -221,21 +233,28 @@ if(NOT WOLFTPM_WRAPPER)
221233
list(APPEND WOLFTPM_DEFINITIONS "-DWOLFTPM2_NO_WRAPPER")
222234
endif()
223235

224-
# I2C Support
236+
# I2C Support (for backward compatibility - use WOLFTPM_INTERFACE=I2C for new code)
225237
set(WOLFTPM_I2C "no" CACHE STRING
226-
"Enable I2C TPM Support (default: disabled)")
238+
"Enable I2C TPM Support (default: disabled, use WOLFTPM_INTERFACE=I2C for new code)")
227239
set_property(CACHE WOLFTPM_I2C
228240
PROPERTY STRINGS "yes;no")
229-
if(WOLFTPM_I2C)
241+
242+
# Handle I2C option for backward compatibility
243+
# If interface is not SPI or I2C, and I2C is explicitly enabled, set interface to I2C
244+
if(WOLFTPM_I2C OR "${WOLFTPM_INTERFACE}" STREQUAL "I2C")
245+
# Backward compatibility: if I2C is enabled and interface is not SPI/I2C, enable I2C definition
230246
list(APPEND WOLFTPM_DEFINITIONS "-DWOLFTPM_I2C")
247+
list(APPEND WOLFTPM_DEFINITIONS "-DWOLFTPM_ADV_IO")
231248
endif()
232249

233-
# MMIO Support
250+
# MMIO Support (deprecated - use WOLFTPM_INTERFACE=MMIO for new code)
234251
set(WOLFTPM_MMIO "no" CACHE STRING
235-
"Enable built-in MMIO callbacks (default: disabled)")
252+
"Enable built-in MMIO callbacks (deprecated: use WOLFTPM_INTERFACE=MMIO for new code)")
236253
set_property(CACHE WOLFTPM_MMIO
237254
PROPERTY STRINGS "yes;no")
238-
if(WOLFTPM_MMIO)
255+
# Handle MMIO option for backward compatibility
256+
# If interface is MMIO or MMIO is explicitly enabled, set MMIO definition
257+
if(WOLFTPM_MMIO OR "${WOLFTPM_INTERFACE}" STREQUAL "MMIO")
239258
list(APPEND WOLFTPM_DEFINITIONS "-DWOLFTPM_MMIO")
240259
endif()
241260

@@ -244,7 +263,10 @@ set(WOLFTPM_ADVIO "no" CACHE STRING
244263
"Enable Advanced IO (default: disabled)")
245264
set_property(CACHE WOLFTPM_ADVIO
246265
PROPERTY STRINGS "yes;no")
247-
if(WOLFTPM_ADVIO OR WOLFTPM_I2C OR WOLFTPM_MMIO)
266+
# ADV_IO is automatically enabled for I2C or MMIO interfaces
267+
if(WOLFTPM_ADVIO OR WOLFTPM_I2C OR WOLFTPM_MMIO OR
268+
"${WOLFTPM_INTERFACE}" STREQUAL "I2C" OR
269+
"${WOLFTPM_INTERFACE}" STREQUAL "MMIO")
248270
list(APPEND WOLFTPM_DEFINITIONS "-DWOLFTPM_ADV_IO")
249271
endif()
250272

@@ -253,15 +275,12 @@ set(WOLFTPM_CHECK_WAIT_STATE "auto" CACHE STRING
253275
"Enable TIS / SPI Check Wait State support (default: auto - depends on chip)")
254276
set_property(CACHE WOLFTPM_CHECK_WAIT_STATE
255277
PROPERTY STRINGS "yes;no;auto")
256-
# Auto-enable for certain modules
278+
# Check wait state is required for all TPM except Infineon
257279
if("${WOLFTPM_CHECK_WAIT_STATE}" STREQUAL "auto")
258-
if("${WOLFTPM_MODULE}" STREQUAL "auto" OR
259-
"${WOLFTPM_MODULE}" STREQUAL "microchip" OR
260-
"${WOLFTPM_MODULE}" STREQUAL "attpm20" OR
261-
"${WOLFTPM_MODULE}" STREQUAL "mchp" OR
262-
"${WOLFTPM_MODULE}" STREQUAL "st33" OR
263-
"${WOLFTPM_MODULE}" STREQUAL "nuvoton" OR
264-
"${WOLFTPM_MODULE}" STREQUAL "npct75x")
280+
if(NOT "${WOLFTPM_MODULE}" STREQUAL "infineon" AND
281+
NOT "${WOLFTPM_MODULE}" STREQUAL "slb9670" AND
282+
NOT "${WOLFTPM_MODULE}" STREQUAL "slb9672" AND
283+
NOT "${WOLFTPM_MODULE}" STREQUAL "slb9673")
265284
set(WOLFTPM_CHECK_WAIT_STATE_ENABLED ON)
266285
else()
267286
set(WOLFTPM_CHECK_WAIT_STATE_ENABLED OFF)
@@ -305,7 +324,7 @@ set(WOLFTPM_HAL "yes" CACHE STRING
305324
"Enable example HAL interfaces (default: enabled)")
306325
set_property(CACHE WOLFTPM_HAL
307326
PROPERTY STRINGS "yes;no")
308-
if(WOLFTPM_HAL OR WOLFTPM_MMIO)
327+
if(WOLFTPM_HAL OR WOLFTPM_MMIO OR "${WOLFTPM_INTERFACE}" STREQUAL "MMIO")
309328
list(APPEND WOLFTPM_DEFINITIONS "-DWOLFTPM_EXAMPLE_HAL")
310329
endif()
311330

0 commit comments

Comments
 (0)