From: "Jorge Ramirez-Ortiz, Foundries" <jorge@foundries.io>
To: Oleksandr Suvorov <cryosay@gmail.com>
Cc: Jorge Ramirez-Ortiz <jorge@foundries.io>,
jens.wiklander@linaro.org, u-boot@lists.denx.de
Subject: Re: [PATCH] drivers: tee: i2c: support the NXP SE05x probe errata
Date: Tue, 16 Aug 2022 18:10:25 +0200 [thread overview]
Message-ID: <20220816161025.GA1036449@trex> (raw)
In-Reply-To: <CAGgjyvH1t6nf-8ByXvq5JBA0tSmypZsR3dLd7_1bqo-jaaGnMA@mail.gmail.com>
On 16/08/22, Oleksandr Suvorov wrote:
> Hi Jorge,
>
> On Tue, Aug 16, 2022 at 2:28 PM Jorge Ramirez-Ortiz <jorge@foundries.io> wrote:
> >
> > Early instantiation of this I2C device would lock up when being
> > probed.
> >
> > Signed-off-by: Jorge Ramirez-Ortiz <jorge@foundries.io>
>
> With a small note below,
> Acked-by: Oleksandr Suvorov <oleksandr.suvorov@foundries.io>
>
> > ---
> > drivers/tee/optee/Kconfig | 14 +++++++++++++
> > drivers/tee/optee/i2c.c | 44 +++++++++++++++++++++++++++++++++++----
> > 2 files changed, 54 insertions(+), 4 deletions(-)
> >
> > diff --git a/drivers/tee/optee/Kconfig b/drivers/tee/optee/Kconfig
> > index d03028070b..05dfe2c9a8 100644
> > --- a/drivers/tee/optee/Kconfig
> > +++ b/drivers/tee/optee/Kconfig
> > @@ -37,6 +37,20 @@ config OPTEE_TA_SCP03
> > help
> > Enables support for controlling (enabling, provisioning) the
> > Secure Channel Protocol 03 operation in the OP-TEE SCP03 TA.
> > +
> > +config TEE_I2C_NXP_SE05X_ERRATA
> > + bool "Enable NXP SE05X Errata"
> > + select TEE_I2C_NXP_SE05X_ERRATA_IN_BUS
> > + default y
>
> I doubt this should be enabled by default.
you are probably right (was just fixing the problem as was being reported by
some user).
will remove the active default
>
> > + help
> > + This config prevents the I2C trampoline driver from probing
> > + on every transfer.
> > +
> > +config TEE_I2C_NXP_SE05X_ERRATA_IN_BUS
> > + int "I2C bus where to apply the NXP SE05X errata"
> > + depends on TEE_I2C_NXP_SE05X_ERRATA
> > + default 0
> > +
> > endmenu
> >
> > endif
> > diff --git a/drivers/tee/optee/i2c.c b/drivers/tee/optee/i2c.c
> > index ef4e10f991..a3ea34d4a2 100644
> > --- a/drivers/tee/optee/i2c.c
> > +++ b/drivers/tee/optee/i2c.c
> > @@ -3,13 +3,18 @@
> > * Copyright (c) 2020 Foundries.io Ltd
> > */
> >
> > +#define LOG_CATEGORY UCLASS_I2C
> > +
> > #include <common.h>
> > #include <dm.h>
> > #include <i2c.h>
> > +#include <stdlib.h>
> > #include <tee.h>
> > #include "optee_msg.h"
> > #include "optee_private.h"
> >
> > +#define NXP_SE05X_ADDR 0x48
> > +
> > static int check_xfer_flags(struct udevice *chip, uint tee_flags)
> > {
> > uint flags;
> > @@ -30,6 +35,30 @@ static int check_xfer_flags(struct udevice *chip, uint tee_flags)
> > return 0;
> > }
> >
> > +static struct udevice *get_chip_dev(int bnum, int addr)
> > +{
> > + struct udevice *chip;
> > + struct udevice *bus;
> > +
> > + if (IS_ENABLED(CONFIG_TEE_I2C_NXP_SE05X_ERRATA)) {
> > + if (bnum == CONFIG_TEE_I2C_NXP_SE05X_ERRATA_IN_BUS &&
> > + addr == NXP_SE05X_ADDR) {
> > + if (uclass_get_device_by_seq(UCLASS_I2C, bnum, &bus))
> > + return NULL;
> > +
> > + if (i2c_get_chip(bus, addr, 0, &chip))
> > + return NULL;
> > +
> > + return chip;
> > + }
> > + }
> > +
> > + if (i2c_get_chip_for_busnum(bnum, addr, 0, &chip))
> > + return NULL;
> > +
> > + return chip;
> > +}
> > +
> > void optee_suppl_cmd_i2c_transfer(struct optee_msg_arg *arg)
> > {
> > const u8 attr[] = {
> > @@ -38,7 +67,8 @@ void optee_suppl_cmd_i2c_transfer(struct optee_msg_arg *arg)
> > OPTEE_MSG_ATTR_TYPE_RMEM_INOUT,
> > OPTEE_MSG_ATTR_TYPE_VALUE_OUTPUT,
> > };
> > - struct udevice *chip_dev;
> > + struct udevice *chip_dev = NULL;
> > +
> > struct tee_shm *shm;
> > u8 *buf;
> > int ret;
> > @@ -56,9 +86,9 @@ void optee_suppl_cmd_i2c_transfer(struct optee_msg_arg *arg)
> > if (!buf)
> > goto bad;
> >
> > - if (i2c_get_chip_for_busnum((int)arg->params[0].u.value.b,
> > - (int)arg->params[0].u.value.c,
> > - 0, &chip_dev))
> > + chip_dev = get_chip_dev((int)arg->params[0].u.value.b,
> > + (int)arg->params[0].u.value.c);
> > + if (!chip_dev)
> > goto bad;
> >
> > if (check_xfer_flags(chip_dev, arg->params[1].u.value.a))
> > @@ -66,10 +96,16 @@ void optee_suppl_cmd_i2c_transfer(struct optee_msg_arg *arg)
> >
> > switch (arg->params[0].u.value.a) {
> > case OPTEE_MSG_RPC_CMD_I2C_TRANSFER_RD:
> > + log_debug("OPTEE_MSG_RPC_CMD_I2C_TRANSFER_RD %d\n",
> > + (size_t)arg->params[2].u.rmem.size);
> > +
> > ret = dm_i2c_read(chip_dev, 0, buf,
> > (size_t)arg->params[2].u.rmem.size);
> > break;
> > case OPTEE_MSG_RPC_CMD_I2C_TRANSFER_WR:
> > + log_debug("OPTEE_MSG_RPC_CMD_I2C_TRANSFER_WR %d\n",
> > + (size_t)arg->params[2].u.rmem.size);
> > +
> > ret = dm_i2c_write(chip_dev, 0, buf,
> > (size_t)arg->params[2].u.rmem.size);
> > break;
> > --
> > 2.34.1
> >
>
>
> --
> Best regards
> Oleksandr
>
> Oleksandr Suvorov
> cryosay@gmail.com
prev parent reply other threads:[~2022-08-16 16:10 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-08-16 11:28 [PATCH] drivers: tee: i2c: support the NXP SE05x probe errata Jorge Ramirez-Ortiz
2022-08-16 14:40 ` Oleksandr Suvorov
2022-08-16 16:10 ` Jorge Ramirez-Ortiz, Foundries [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220816161025.GA1036449@trex \
--to=jorge@foundries.io \
--cc=cryosay@gmail.com \
--cc=jens.wiklander@linaro.org \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.