mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-27 14:43:58 +08:00
tpmdd updates for Linux v5.8-rc4
-----BEGIN PGP SIGNATURE----- iJYEABYIAD4WIQRE6pSOnaBC00OEHEIaerohdGur0gUCXv4UMCAcamFya2tvLnNh a2tpbmVuQGxpbnV4LmludGVsLmNvbQAKCRAaerohdGur0kq/AQDC9w/N2eKgCl1S uxALoPLsc2W5OITMQP/aDQuayd+hWAEA9WYajToL4wP55q23xS3w1fd70lkX58cH vbP64TyofgI= =B4wJ -----END PGP SIGNATURE----- Merge tag 'tpmdd-next-v5.8-rc4' of git://git.infradead.org/users/jjs/linux-tpmdd Pull tpm fixes from Jarkko Sakkinen: "These are just fixes for bugs found lately. All of them are small scale things here and there, and all of them are for previous kernel releases (the oldest appeared in v2.6.17)" * tag 'tpmdd-next-v5.8-rc4' of git://git.infradead.org/users/jjs/linux-tpmdd: tpm_tis: Remove the HID IFX0102 tpm_tis_spi: Prefer async probe tpm: ibmvtpm: Wait for ready buffer before probing for TPM2 attributes tpm/st33zp24: fix spelling mistake "drescription" -> "description" tpm_tis: extra chip->ops check on error path in tpm_tis_core_init tpm_tis_spi: Don't send anything during flow control tpm: Fix TIS locality timeout problems
This commit is contained in:
commit
0c7415c31e
@ -210,7 +210,7 @@ static int st33zp24_i2c_request_resources(struct i2c_client *client)
|
||||
|
||||
/*
|
||||
* st33zp24_i2c_probe initialize the TPM device
|
||||
* @param: client, the i2c_client drescription (TPM I2C description).
|
||||
* @param: client, the i2c_client description (TPM I2C description).
|
||||
* @param: id, the i2c_device_id struct.
|
||||
* @return: 0 in case of success.
|
||||
* -1 in other case.
|
||||
|
@ -329,7 +329,7 @@ static int st33zp24_spi_request_resources(struct spi_device *dev)
|
||||
|
||||
/*
|
||||
* st33zp24_spi_probe initialize the TPM device
|
||||
* @param: dev, the spi_device drescription (TPM SPI description).
|
||||
* @param: dev, the spi_device description (TPM SPI description).
|
||||
* @return: 0 in case of success.
|
||||
* or a negative value describing the error.
|
||||
*/
|
||||
@ -378,7 +378,7 @@ static int st33zp24_spi_probe(struct spi_device *dev)
|
||||
|
||||
/*
|
||||
* st33zp24_spi_remove remove the TPM device
|
||||
* @param: client, the spi_device drescription (TPM SPI description).
|
||||
* @param: client, the spi_device description (TPM SPI description).
|
||||
* @return: 0 in case of success.
|
||||
*/
|
||||
static int st33zp24_spi_remove(struct spi_device *dev)
|
||||
|
@ -502,7 +502,7 @@ static const struct tpm_class_ops st33zp24_tpm = {
|
||||
|
||||
/*
|
||||
* st33zp24_probe initialize the TPM device
|
||||
* @param: client, the i2c_client drescription (TPM I2C description).
|
||||
* @param: client, the i2c_client description (TPM I2C description).
|
||||
* @param: id, the i2c_device_id struct.
|
||||
* @return: 0 in case of success.
|
||||
* -1 in other case.
|
||||
|
@ -189,15 +189,6 @@ ssize_t tpm_common_write(struct file *file, const char __user *buf,
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* atomic tpm command send and result receive. We only hold the ops
|
||||
* lock during this period so that the tpm can be unregistered even if
|
||||
* the char dev is held open.
|
||||
*/
|
||||
if (tpm_try_get_ops(priv->chip)) {
|
||||
ret = -EPIPE;
|
||||
goto out;
|
||||
}
|
||||
|
||||
priv->response_length = 0;
|
||||
priv->response_read = false;
|
||||
*off = 0;
|
||||
@ -211,11 +202,19 @@ ssize_t tpm_common_write(struct file *file, const char __user *buf,
|
||||
if (file->f_flags & O_NONBLOCK) {
|
||||
priv->command_enqueued = true;
|
||||
queue_work(tpm_dev_wq, &priv->async_work);
|
||||
tpm_put_ops(priv->chip);
|
||||
mutex_unlock(&priv->buffer_mutex);
|
||||
return size;
|
||||
}
|
||||
|
||||
/* atomic tpm command send and result receive. We only hold the ops
|
||||
* lock during this period so that the tpm can be unregistered even if
|
||||
* the char dev is held open.
|
||||
*/
|
||||
if (tpm_try_get_ops(priv->chip)) {
|
||||
ret = -EPIPE;
|
||||
goto out;
|
||||
}
|
||||
|
||||
ret = tpm_dev_transmit(priv->chip, priv->space, priv->data_buffer,
|
||||
sizeof(priv->data_buffer));
|
||||
tpm_put_ops(priv->chip);
|
||||
|
@ -683,13 +683,6 @@ static int tpm_ibmvtpm_probe(struct vio_dev *vio_dev,
|
||||
if (rc)
|
||||
goto init_irq_cleanup;
|
||||
|
||||
if (!strcmp(id->compat, "IBM,vtpm20")) {
|
||||
chip->flags |= TPM_CHIP_FLAG_TPM2;
|
||||
rc = tpm2_get_cc_attrs_tbl(chip);
|
||||
if (rc)
|
||||
goto init_irq_cleanup;
|
||||
}
|
||||
|
||||
if (!wait_event_timeout(ibmvtpm->crq_queue.wq,
|
||||
ibmvtpm->rtce_buf != NULL,
|
||||
HZ)) {
|
||||
@ -697,6 +690,13 @@ static int tpm_ibmvtpm_probe(struct vio_dev *vio_dev,
|
||||
goto init_irq_cleanup;
|
||||
}
|
||||
|
||||
if (!strcmp(id->compat, "IBM,vtpm20")) {
|
||||
chip->flags |= TPM_CHIP_FLAG_TPM2;
|
||||
rc = tpm2_get_cc_attrs_tbl(chip);
|
||||
if (rc)
|
||||
goto init_irq_cleanup;
|
||||
}
|
||||
|
||||
return tpm_chip_register(chip);
|
||||
init_irq_cleanup:
|
||||
do {
|
||||
|
@ -238,7 +238,6 @@ static int tpm_tis_pnp_init(struct pnp_dev *pnp_dev,
|
||||
static struct pnp_device_id tpm_pnp_tbl[] = {
|
||||
{"PNP0C31", 0}, /* TPM */
|
||||
{"ATM1200", 0}, /* Atmel */
|
||||
{"IFX0102", 0}, /* Infineon */
|
||||
{"BCM0101", 0}, /* Broadcom */
|
||||
{"BCM0102", 0}, /* Broadcom */
|
||||
{"NSC1200", 0}, /* National */
|
||||
|
@ -1085,7 +1085,7 @@ int tpm_tis_core_init(struct device *dev, struct tpm_tis_data *priv, int irq,
|
||||
|
||||
return 0;
|
||||
out_err:
|
||||
if ((chip->ops != NULL) && (chip->ops->clk_enable != NULL))
|
||||
if (chip->ops->clk_enable != NULL)
|
||||
chip->ops->clk_enable(chip, false);
|
||||
|
||||
tpm_tis_remove(chip);
|
||||
|
@ -53,8 +53,6 @@ static int tpm_tis_spi_flow_control(struct tpm_tis_spi_phy *phy,
|
||||
|
||||
if ((phy->iobuf[3] & 0x01) == 0) {
|
||||
// handle SPI wait states
|
||||
phy->iobuf[0] = 0;
|
||||
|
||||
for (i = 0; i < TPM_RETRY; i++) {
|
||||
spi_xfer->len = 1;
|
||||
spi_message_init(&m);
|
||||
@ -104,6 +102,8 @@ int tpm_tis_spi_transfer(struct tpm_tis_data *data, u32 addr, u16 len,
|
||||
if (ret < 0)
|
||||
goto exit;
|
||||
|
||||
/* Flow control transfers are receive only */
|
||||
spi_xfer.tx_buf = NULL;
|
||||
ret = phy->flow_control(phy, &spi_xfer);
|
||||
if (ret < 0)
|
||||
goto exit;
|
||||
@ -113,9 +113,8 @@ int tpm_tis_spi_transfer(struct tpm_tis_data *data, u32 addr, u16 len,
|
||||
spi_xfer.delay.value = 5;
|
||||
spi_xfer.delay.unit = SPI_DELAY_UNIT_USECS;
|
||||
|
||||
if (in) {
|
||||
spi_xfer.tx_buf = NULL;
|
||||
} else if (out) {
|
||||
if (out) {
|
||||
spi_xfer.tx_buf = phy->iobuf;
|
||||
spi_xfer.rx_buf = NULL;
|
||||
memcpy(phy->iobuf, out, transfer_len);
|
||||
out += transfer_len;
|
||||
@ -288,6 +287,7 @@ static struct spi_driver tpm_tis_spi_driver = {
|
||||
.pm = &tpm_tis_pm,
|
||||
.of_match_table = of_match_ptr(of_tis_spi_match),
|
||||
.acpi_match_table = ACPI_PTR(acpi_tis_spi_match),
|
||||
.probe_type = PROBE_PREFER_ASYNCHRONOUS,
|
||||
},
|
||||
.probe = tpm_tis_spi_driver_probe,
|
||||
.remove = tpm_tis_spi_remove,
|
||||
|
Loading…
Reference in New Issue
Block a user