From mboxrd@z Thu Jan 1 00:00:00 1970 From: christophe.ricard Date: Tue, 11 Aug 2015 23:42:55 +0200 Subject: [U-Boot] [PATCH 19/25] dm: tpm: sandbox: Convert TPM driver to driver model In-Reply-To: <1439304497-10081-20-git-send-email-sjg@chromium.org> References: <1439304497-10081-1-git-send-email-sjg@chromium.org> <1439304497-10081-20-git-send-email-sjg@chromium.org> Message-ID: <55CA6C5F.2000608@gmail.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Acked-by: Christophe Ricard On 11/08/2015 16:48, Simon Glass wrote: > Convert the sandbox TPM driver to use driver model. Add it to the device > tree so that it can be found on start-up. > > Signed-off-by: Simon Glass > --- > > arch/sandbox/dts/sandbox.dts | 4 ++++ > configs/sandbox_defconfig | 1 + > drivers/tpm/tpm_tis_sandbox.c | 48 ++++++++++++++++++++++++++++++++----------- > 3 files changed, 41 insertions(+), 12 deletions(-) > > diff --git a/arch/sandbox/dts/sandbox.dts b/arch/sandbox/dts/sandbox.dts > index 8927527..758c4a5 100644 > --- a/arch/sandbox/dts/sandbox.dts > +++ b/arch/sandbox/dts/sandbox.dts > @@ -156,6 +156,10 @@ > sides = <4>; > }; > > + tpm { > + compatible = "google,sandbox-tpm"; > + }; > + > triangle { > compatible = "demo-shape"; > colour = "cyan"; > diff --git a/configs/sandbox_defconfig b/configs/sandbox_defconfig > index b68d688..2600bf7 100644 > --- a/configs/sandbox_defconfig > +++ b/configs/sandbox_defconfig > @@ -31,6 +31,7 @@ CONFIG_CROS_EC_KEYB=y > CONFIG_LED=y > CONFIG_LED_GPIO=y > CONFIG_SANDBOX_SERIAL=y > +CONFIG_DM_TPM=y > CONFIG_TPM_TIS_SANDBOX=y > CONFIG_SYS_I2C_SANDBOX=y > CONFIG_SANDBOX_SPI=y > diff --git a/drivers/tpm/tpm_tis_sandbox.c b/drivers/tpm/tpm_tis_sandbox.c > index ed4b039..7a481dd 100644 > --- a/drivers/tpm/tpm_tis_sandbox.c > +++ b/drivers/tpm/tpm_tis_sandbox.c > @@ -5,6 +5,8 @@ > */ > > #include > +#include > +#include > #include > #include > #include > @@ -56,7 +58,7 @@ enum { > */ > static struct tpm_state { > uint8_t nvdata[NV_SEQ_COUNT][NV_DATA_SIZE]; > -} state; > +} g_state; > > /** > * sandbox_tpm_read_state() - read the sandbox EC state from the state file > @@ -82,7 +84,7 @@ static int sandbox_tpm_read_state(const void *blob, int node) > sprintf(prop_name, "nvdata%d", i); > prop = fdt_getprop(blob, node, prop_name, &len); > if (prop && len == NV_DATA_SIZE) > - memcpy(state.nvdata[i], prop, NV_DATA_SIZE); > + memcpy(g_state.nvdata[i], prop, NV_DATA_SIZE); > } > > return 0; > @@ -110,7 +112,7 @@ static int sandbox_tpm_write_state(void *blob, int node) > char prop_name[20]; > > sprintf(prop_name, "nvdata%d", i); > - fdt_setprop(blob, node, prop_name, state.nvdata[i], > + fdt_setprop(blob, node, prop_name, g_state.nvdata[i], > NV_DATA_SIZE); > } > > @@ -135,10 +137,11 @@ static int index_to_seq(uint32_t index) > return -1; > } > > -int tis_sendrecv(const u8 *sendbuf, size_t send_size, > - u8 *recvbuf, size_t *recv_len) > +static int sandbox_tpm_xfer(struct udevice *dev, const uint8_t *sendbuf, > + size_t send_size, uint8_t *recvbuf, > + size_t *recv_len) > { > - struct tpm_state *tpm = &state; > + struct tpm_state *tpm = dev_get_priv(dev); > uint32_t code, index, length, type; > uint8_t *data; > int seq; > @@ -241,20 +244,41 @@ int tis_sendrecv(const u8 *sendbuf, size_t send_size, > return 0; > } > > -int tis_open(void) > +static int sandbox_tpm_probe(struct udevice *dev) > { > - printf("%s\n", __func__); > + struct tpm_state *tpm = dev_get_priv(dev); > + > + memcpy(tpm, &g_state, sizeof(*tpm)); > + > return 0; > } > > -int tis_close(void) > +static int sandbox_tpm_open(struct udevice *dev) > { > - printf("%s\n", __func__); > return 0; > } > > -int tis_init(void) > +static int sandbox_tpm_close(struct udevice *dev) > { > - printf("%s\n", __func__); > return 0; > } > + > +static const struct tpm_ops sandbox_tpm_ops = { > + .open = sandbox_tpm_open, > + .close = sandbox_tpm_close, > + .xfer = sandbox_tpm_xfer, > +}; > + > +static const struct udevice_id sandbox_tpm_ids[] = { > + { .compatible = "google,sandbox-tpm" }, > + { } > +}; > + > +U_BOOT_DRIVER(sandbox_tpm) = { > + .name = "sandbox_tpm", > + .id = UCLASS_TPM, > + .of_match = sandbox_tpm_ids, > + .ops = &sandbox_tpm_ops, > + .probe = sandbox_tpm_probe, > + .priv_auto_alloc_size = sizeof(struct tpm_state), > +};