[PATCH linux dev-5.4] fsi: core: Set slave local bus ownership during init

Joel Stanley joel at jms.id.au
Tue Jun 2 12:05:25 AEST 2020


On Wed, 20 May 2020 at 18:17, Eddie James <eajames at linux.ibm.com> wrote:
>
> The driver ought to claim local bus ownership of the slave it's
> communicating with.

I am not familiar with this register's purpose so feel free to explain
the details.

Should we also "un-claim" ownership at any point?

>
> Signed-off-by: Eddie James <eajames at linux.ibm.com>
> ---
>  drivers/fsi/fsi-core.c | 16 +++++++++++++++-
>  1 file changed, 15 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/fsi/fsi-core.c b/drivers/fsi/fsi-core.c
> index 8244da8a7241..48424b672295 100644
> --- a/drivers/fsi/fsi-core.c
> +++ b/drivers/fsi/fsi-core.c
> @@ -50,6 +50,7 @@ static const int engine_page_size = 0x400;
>  #define FSI_SMODE              0x0     /* R/W: Mode register */
>  #define FSI_SISC               0x8     /* R/W: Interrupt condition */
>  #define FSI_SSTAT              0x14    /* R  : Slave status */
> +#define FSI_SLBUS              0x30    /* W  : LBUS Ownership */
>  #define FSI_LLMODE             0x100   /* R/W: Link layer mode register */
>
>  /*
> @@ -66,6 +67,11 @@ static const int engine_page_size = 0x400;
>  #define FSI_SMODE_LBCRR_SHIFT  8               /* Clk ratio shift */
>  #define FSI_SMODE_LBCRR_MASK   0xf             /* Clk ratio mask */
>
> +/*
> + * SLBUS fields
> + */
> +#define FSI_SLBUS_FORCE                0x80000000      /* Force LBUS ownership */
> +
>  /*
>   * LLMODE fields
>   */
> @@ -981,7 +987,7 @@ static int fsi_slave_init(struct fsi_master *master, int link, uint8_t id)
>         uint32_t cfam_id;
>         struct fsi_slave *slave;
>         uint8_t crc;
> -       __be32 data, llmode;
> +       __be32 data, llmode, slbus;
>         int rc;
>
>         /* Currently, we only support single slaves on a link, and use the
> @@ -1052,6 +1058,14 @@ static int fsi_slave_init(struct fsi_master *master, int link, uint8_t id)
>
>         }
>
> +       slbus = cpu_to_be32(FSI_SLBUS_FORCE);
> +       rc = fsi_master_write(master, link, id, FSI_SLAVE_BASE + FSI_SLBUS,
> +                             &slbus, sizeof(slbus));
> +       if (rc)
> +               dev_warn(&master->dev,
> +                        "can't set slbus on slave:%02x:%02x %d\n", link, id,
> +                        rc);
> +
>         rc = fsi_slave_set_smode(slave);
>         if (rc) {
>                 dev_warn(&master->dev,
> --
> 2.24.0
>


More information about the openbmc mailing list