Patch "tpm: constify transmit data pointers" has been added to the 4.14-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
tpm: constify transmit data pointers
to the 4.14-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
tpm-constify-transmit-data-pointers.patch
and it can be found in the queue-4.14 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
c37fbc09bd4977736f6bc4050c6f099c587052a7Mon Sep 17 00:00:00 2001
From: Arnd Bergmann <[email protected]>
Date: Thu, 7 Sep 2017 15:30:45 +0200
Subject: tpm: constify transmit data pointers
From: Arnd Bergmann <[email protected]>
commit c37fbc09bd4977736f6bc4050c6f099c587052a7 upstream.
Making cmd_getticks 'const' introduced a couple of harmless warnings:
drivers/char/tpm/tpm_tis_core.c: In function 'probe_itpm':drivers/char/tpm/tpm_tis_core.c:469:31: error: passing argument 2 of 'tpm_tis_send_data' discards 'const' qualifier from pointer target type [-Werror=discarded-qualifiers]
rc = tpm_tis_send_data(chip, cmd_getticks, len);drivers/char/tpm/tpm_tis_core.c:477:31: error: passing argument 2 of 'tpm_tis_send_data' discards 'const' qualifier from pointer target type [-Werror=discarded-qualifiers]
rc = tpm_tis_send_data(chip, cmd_getticks, len);drivers/char/tpm/tpm_tis_core.c:255:12: note: expected 'u8 * {aka unsigned char *}' but argument is of type 'const u8 * {aka const unsigned char *}'
static int tpm_tis_send_data(struct tpm_chip *chip, u8 *buf, size_t len)
This changes the related functions to all take 'const' pointers so that gcc can see this as being correct. I had to slightly modify the logic around tpm_tis_spi_transfer() for this to work without introducing ugly casts.
--- drivers/char/tpm/tpm_tis.c | 2 +- drivers/char/tpm/tpm_tis_core.c | 4 ++-- drivers/char/tpm/tpm_tis_core.h | 4 ++-- drivers/char/tpm/tpm_tis_spi.c | 25 +++++++++++-------------- 4 files changed, 16 insertions(+), 19 deletions(-)
drivers/char/tpm/tpm_tis.c +1 -1
@@ -223,7 +223,7 @@ static int tpm_tcg_read_bytes(struct tpm }static int tpm_tcg_write_bytes (struct tpm_tis_data *data,u32 addr,u16 len, -u8 *value) +const u8 *value) {struct tpm_tis_tcg_phy *phy =to_tpm_tis_tcg_phy (data);
drivers/char/tpm/tpm_tis_core.c +2 -2
@@ -253,7 +253,7 @@ out:* tpm.c can skip polling for the data to be available as the interrupt is * waited for here */ -static int tpm_tis_send_data (struct tpm_chip *chip,u8 *buf,size_t len) +static int tpm_tis_send_data (struct tpm_chip *chip,const u8 *buf,size_t len) {struct tpm_tis_data *priv =dev_get_drvdata (&chip->dev);int rc, status, burstcnt;
@@ -344,7 +344,7 @@ static void disable_interrupts(struct tp* tpm.c can skip polling for the data to be available as the interrupt is * waited for here */ -static int tpm_tis_send_main (struct tpm_chip *chip,u8 *buf,size_t len) +static int tpm_tis_send_main (struct tpm_chip *chip,const u8 *buf,size_t len) {struct tpm_tis_data *priv =dev_get_drvdata (&chip->dev);int rc;
drivers/char/tpm/tpm_tis_core.h +2 -2
@@ -98,7 +98,7 @@ struct tpm_tis_phy_ops {int (*read_bytes)(struct tpm_tis_data *data,u32 addr,u16 len,u8 *result);int (*write_bytes)(struct tpm_tis_data *data,u32 addr,u16 len, -u8 *value); +const u8 *value);int (*read16)(struct tpm_tis_data *data,u32 addr,u16 *result);int (*read32)(struct tpm_tis_data *data,u32 addr,u32 *result);int (*write32)(struct tpm_tis_data *data,u32 addr,u32 src);
@@ -128,7 +128,7 @@ static inline int tpm_tis_read32(struct }static inline int tpm_tis_write_bytes (struct tpm_tis_data *data,u32 addr, -u16 len,u8 *value) +u16 len,const u8 *value) {return data->phy_ops->write_bytes (data, addr, len, value); }
drivers/char/tpm/tpm_tis_spi.c +11 -14
@@ -57,7 +57,7 @@ static inline struct tpm_tis_spi_phy *to }static int tpm_tis_spi_transfer (struct tpm_tis_data *data,u32 addr,u16 len, -u8 *buffer,u8 direction) +u8 *in,const u8 *out) {struct tpm_tis_spi_phy *phy =to_tpm_tis_spi_phy (data);int ret =0 ;
@@ -71,7 +71,7 @@ static int tpm_tis_spi_transfer(struct twhile (len) { transfer_len =min_t (u16, len,MAX_SPI_FRAMESIZE ); - phy->tx_buf[0 ] = direction | (transfer_len -1 ); + phy->tx_buf[0 ] = (in ?0x80 :0 ) | (transfer_len -1 ); phy->tx_buf[1 ] =0xd4 ; phy->tx_buf[2 ] = addr >>8 ; phy->tx_buf[3 ] = addr;
@@ -112,14 +112,8 @@ static int tpm_tis_spi_transfer(struct t spi_xfer.cs_change =0 ; spi_xfer.len = transfer_len; spi_xfer.delay_usecs =5 ; - -if (direction) { - spi_xfer.tx_buf =NULL ; - spi_xfer.rx_buf = buffer; - }else { - spi_xfer.tx_buf = buffer; - spi_xfer.rx_buf =NULL ; - } + spi_xfer.tx_buf = out; + spi_xfer.rx_buf = in;spi_message_init (&m);spi_message_add_tail (&spi_xfer, &m);
@@ -128,7 +122,10 @@ static int tpm_tis_spi_transfer(struct t goto exit; len -= transfer_len; - buffer += transfer_len; +if (in) + in += transfer_len; +if (out) + out += transfer_len; } exit:
@@ -139,13 +136,13 @@ exit:static int tpm_tis_spi_read_bytes (struct tpm_tis_data *data,u32 addr,u16 len,u8 *result) { -return tpm_tis_spi_transfer (data, addr, len, result,0x80 ); +return tpm_tis_spi_transfer (data, addr, len, result,NULL ); }static int tpm_tis_spi_write_bytes (struct tpm_tis_data *data,u32 addr, -u16 len,u8 *value) +u16 len,const u8 *value) { -return tpm_tis_spi_transfer (data, addr, len, value,0 ); +return tpm_tis_spi_transfer (data, addr, len,NULL , value); }static int tpm_tis_spi_read16 (struct tpm_tis_data *data,u32 addr,u16 *result)
Patches currently in stable-queue which might be from [email protected] are
queue-4.14/tpm-constify-transmit-data-pointers.patch