• Peijie Shao's avatar
    tpm_tis_spi: Release chip select when flow control fails · f0afba40
    Peijie Shao authored
    The failure paths in tpm_tis_spi_transfer() do not deactivate
    chip select. Send an empty message (cs_select == 0) to overcome
    this.
    
    The patch is tested by two ways.
    One way needs to touch hardware:
       1. force pull MISO pin down to GND, it emulates a forever
          'WAIT' timing.
       2. probe cs pin by an oscilloscope.
       3. load tpm_tis_spi.ko.
    After loading, dmesg prints:
        "probe of spi0.0 failed with error -110"
    and oscilloscope shows cs pin goes high(deactivated) after
    the failure. Before the patch, cs pin keeps low.
    
    Second way is by writing a fake spi controller.
       1. implement .transfer_one method, fill all rx buf with 0.
       2. implement .set_cs method, print the state of cs pin.
       we can see cs goes high after the failure.
    Signed-off-by: default avatarPeijie Shao <shaopeijie@cestc.cn>
    Reviewed-by: default avatarJarkko Sakkinen <jarkko@kernel.org>
    Signed-off-by: default avatarJarkko Sakkinen <jarkko@kernel.org>
    f0afba40
tpm_tis_spi_main.c 6.86 KB