[PATCH linux dev-5.4 1/2] fsi: aspeed: Run the bus at maximum speed

Eddie James eajames at linux.vnet.ibm.com
Wed Apr 15 08:27:08 AEST 2020


On 4/14/20 5:51 AM, Joel Stanley wrote:
> Testing of Tacoma has shown that the ASPEED master can be run at maximum
> speed.
>
> The exception is when wired externally with a cable, in which case we
> use a divisor of two to ensure reliable operation.


Reviewed-by: Eddie James <eajames at linux.ibm.com>


>
> Signed-off-by: Joel Stanley <joel at jms.id.au>
> ---
>   drivers/fsi/fsi-master-aspeed.c | 17 ++++++++++++++---
>   1 file changed, 14 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/fsi/fsi-master-aspeed.c b/drivers/fsi/fsi-master-aspeed.c
> index fe2da6f90590..80bc9132e4f8 100644
> --- a/drivers/fsi/fsi-master-aspeed.c
> +++ b/drivers/fsi/fsi-master-aspeed.c
> @@ -83,7 +83,11 @@ static const u32 fsi_base = 0xa0000000;
>   
>   #define FSI_LINK_ENABLE_SETUP_TIME	10	/* in mS */
>   
> -#define DEFAULT_DIVISOR			14
> +/* Run the bus at maximum speed by default */
> +#define FSI_DIVISOR_DEFAULT            1
> +#define FSI_DIVISOR_CABLED             2
> +static u16 aspeed_fsi_divisor = FSI_DIVISOR_DEFAULT;
> +
>   #define OPB_POLL_TIMEOUT		10000
>   
>   static int __opb_write(struct fsi_master_aspeed *aspeed, u32 addr,
> @@ -389,9 +393,11 @@ static int aspeed_master_init(struct fsi_master_aspeed *aspeed)
>   	opb_writel(aspeed, ctrl_base + FSI_MECTRL, reg);
>   
>   	reg = cpu_to_be32(FSI_MMODE_ECRC | FSI_MMODE_EPC | FSI_MMODE_RELA
> -			| fsi_mmode_crs0(DEFAULT_DIVISOR)
> -			| fsi_mmode_crs1(DEFAULT_DIVISOR)
> +			| fsi_mmode_crs0(aspeed_fsi_divisor)
> +			| fsi_mmode_crs1(aspeed_fsi_divisor)
>   			| FSI_MMODE_P8_TO_LSB);
> +	dev_info(aspeed->dev, "mmode set to %08x (divisor %d)\n",
> +			be32_to_cpu(reg), aspeed_fsi_divisor);
>   	opb_writel(aspeed, ctrl_base + FSI_MMODE, reg);
>   
>   	reg = cpu_to_be32(0xffff0000);
> @@ -450,6 +456,11 @@ static int tacoma_cabled_fsi_fixup(struct device *dev)
>   
>   	/* If the routing GPIO is high we should set the mux to low. */
>   	if (gpio) {
> +		/*
> +		 * Cable signal integrity means we should run the bus
> +		 * slightly slower
> +		 */
> +		aspeed_fsi_divisor = FSI_DIVISOR_CABLED;
>   		gpiod_direction_output(mux_gpio, 0);
>   		dev_info(dev, "FSI configured for external cable\n");
>   	} else {


More information about the openbmc mailing list