mbox series

[v9,0/3] TPM TIS SPI Support

Message ID 20250216221155.30013-1-dantan@linux.vnet.ibm.com (mailing list archive)
Headers show
Series TPM TIS SPI Support | expand

Message

dan tan Feb. 16, 2025, 10:11 p.m. UTC
*** BLURB HERE ***

Version 9 summary:
    1/3 tpm/tpm_tis_spi: Support TPM for SPI
        - rebased with the master, and conform with the latest
          device property definition
    3/3 tests/qtest/tpm: add unit test to tis-spi
        - remove unnecessary tpm-tis-spi qtest start parameters

Version 8 summary:
    - re-package the email to comply with the convention.

Version 7 summary:
    - tpm/tpm_tis_spi: Support TPM for SPI
      - Reduce SPI wait states to improve performace.
        Although the real SPI buses have four wait states to accommodate
        the timing of various slave devices, there is no need to emulate
        that for this behavior model.

Version 6 summary:
    1/3 tpm/tpm_tis_spi: Support TPM for SPI
        - amend commit description
        - amend hw/tpm/tpm_tis_spi.c prolog to reflect the generic nature
          of the implementation
        - remove irrelevant define of IBM_PONQ
        - correct the function names to comply with the convention of
          beginning with tpm_tis_spi_xxxx()

    3/3 tests/qtest/tpm: add unit test to tis-spi
        - changed sleep(0.x) to g_usleep(G_USEC_PER_SEC / y) and adjust the
          timeouts

Version 5 summary:
    1/3 tpm/tpm_tis_spi: Support TPM for SPI
        - removed DEFINE_PROP_UINT32("irq", TPMStateSPI, tpm_state.irq_num, 0)
          from tpm_tis_spi_properties
        - In tpm.rst document, under section 'The QEMU TPM emulator device',
          moved the 'PowerNV machine' section to immeidately below 'pSeriese
          machine'.
    3/3 tests/qtest/tpm: add unit test to tis-spi
        - modified tpm_reg_readl() by
          - removing the special case for TPM_TIS_REG_DID_VID.
            - however, I did not use the more efficient 32bit access due
              to the SPI bus master implementation. The 16bit register
              still require special treatment with the SPI RWX bits.
          - correcting tpm_reg_readb() with uint16_t reg
        - tpm_set_verify_loc() added checking for TPM_TIS_CAPABILITIES_SUPPORTED2_0
        - test_spi_tpm_transmit_test() added
          - TPM_TIS_STS_TPM_FAMILY2_0 check in status register
          - TPM responses verification
        - fixed the PowerNV stdout msg from running qtest-ppc64/tpm-tis-spi-pnv-test

Revision 4 summary:
    - fold v3 commit 4/5 into 1/5
    - fold v3 commit 5/5 into 3/5

Revision 3 summary:
  device support:
    - moved variable tis_addr from TPMStateSPI struct to local
    - added the VM suspend/resume support:
      - added vmstate_tpm_tis_spi declaration
      - added tpm_tis_spi_pre_save() function
    - fixed trace formatting string
  qtest:
    - removed the function prototypes declaration
    - fixed code format to comply with convention
    - changed function names and variable names to be the same
      as the tpm-tis-i2c test.
    - change hard coded numbers to #define's with meaningful
      names that are identifiable with spec documentation

Version 2 summary,
    addressed the following review comments:
    - break up patch into 3 separate commits;
    - add more details in the commit logs;
      - I added links to the TCG TPM standard documents as this device
        model communicates to the TPM device (hw / swtpm) via
        tpm_tis_commom.c which is standard compliant;
      - the TPM SPI model implementation in itself is not platform
        specific. However, the SPI interface is via the PowerNV SPI
        bus master, thus it is only supported on the PowerNV platform
    - change all qemu_log() calls to trace events;
    - move static global variables to the TPMStateSPI struct;
    - fixed code formatting (verified by scripts/checkpatch.pl);
    - per requests, make the code more readable by using self-
      explanatory #defines and adding comments;
    - added some documentation support (tpm.rst);
    - beefed up the unit test exercising major supported locality
      functionality

dan tan (3):
  tpm/tpm_tis_spi: Support TPM for SPI (Serial Peripheral Interface)
  tpm/tpm_tis_spi: activation for the PowerNV machines
  tests/qtest/tpm: add unit test to tis-spi

 docs/specs/tpm.rst                 |  15 +
 include/system/tpm.h               |   3 +
 hw/tpm/tpm_tis_spi.c               | 358 +++++++++++++++
 tests/qtest/tpm-tis-spi-pnv-test.c | 711 +++++++++++++++++++++++++++++
 hw/ppc/Kconfig                     |   1 +
 hw/tpm/Kconfig                     |   6 +
 hw/tpm/meson.build                 |   1 +
 hw/tpm/trace-events                |   7 +
 tests/qtest/meson.build            |   2 +
 9 files changed, 1104 insertions(+)
 create mode 100644 hw/tpm/tpm_tis_spi.c
 create mode 100644 tests/qtest/tpm-tis-spi-pnv-test.c

Comments

Stefan Berger Feb. 17, 2025, 8:12 p.m. UTC | #1
On 2/16/25 5:11 PM, dan tan wrote:
> *** BLURB HERE ***
> 
> Version 9 summary:
>      1/3 tpm/tpm_tis_spi: Support TPM for SPI
>          - rebased with the master, and conform with the latest
>            device property definition
>      3/3 tests/qtest/tpm: add unit test to tis-spi
>          - remove unnecessary tpm-tis-spi qtest start parameters

Were you able to test it with Linux now?
dan tan Feb. 17, 2025, 8:24 p.m. UTC | #2
Stefan,

I have yet found a ppc64le Linux distro that has SPI enabled in the 
kernel. Attempts to build my own was not successful either. I am trying 
to get the LTC (Linux Technology Center) involved. They have more 
expertise in building the ppc64le kernel. I am hoping to get that tested 
soon.

thank you,
---
dan tan
power simulation
phone:+1.7373.099.138
email:dantan@linux.ibm.com


On 2025-02-17 14:12, Stefan Berger wrote:
> On 2/16/25 5:11 PM, dan tan wrote:
>> *** BLURB HERE ***
>> 
>> Version 9 summary:
>>      1/3 tpm/tpm_tis_spi: Support TPM for SPI
>>          - rebased with the master, and conform with the latest
>>            device property definition
>>      3/3 tests/qtest/tpm: add unit test to tis-spi
>>          - remove unnecessary tpm-tis-spi qtest start parameters
> 
> Were you able to test it with Linux now?
Stefan Berger Feb. 18, 2025, 6:55 p.m. UTC | #3
On 2/17/25 3:24 PM, dan tan wrote:
> Stefan,
> 
> I have yet found a ppc64le Linux distro that has SPI enabled in the 
> kernel. Attempts to build my own was not successful either. I am trying 
> to get the LTC (Linux Technology Center) involved. They have more 
> expertise in building the ppc64le kernel. I am hoping to get that tested 
> soon.

I'll wait for this then.

Once it works it may be worth to try an experiment with the last 
remaining wait state and see whether also that one can be removed. I am 
not sure whether we should have it since it only negatively affects 
performance and it is also part of the device's state, so it would not 
be so easy to remove once we have it.


> 
> thank you,
> ---
> dan tan
> power simulation
> phone:+1.7373.099.138
> email:dantan@linux.ibm.com
> 
> 
> On 2025-02-17 14:12, Stefan Berger wrote:
>> On 2/16/25 5:11 PM, dan tan wrote:
>>> *** BLURB HERE ***
>>>
>>> Version 9 summary:
>>>      1/3 tpm/tpm_tis_spi: Support TPM for SPI
>>>          - rebased with the master, and conform with the latest
>>>            device property definition
>>>      3/3 tests/qtest/tpm: add unit test to tis-spi
>>>          - remove unnecessary tpm-tis-spi qtest start parameters
>>
>> Were you able to test it with Linux now?