[PATCH 07/10] i2c/aspeed: Fix reset control

Ryan Chen ryan_chen at aspeedtech.com
Tue Jun 21 10:14:48 CEST 2022


> -----Original Message-----
> From: joel.stan at gmail.com <joel.stan at gmail.com> On Behalf Of Joel Stanley
> Sent: Monday, June 20, 2022 3:25 PM
> To: Ryan Chen <ryan_chen at aspeedtech.com>; BMC-SW
> <BMC-SW at aspeedtech.com>; Heiko Schocher <hs at denx.de>
> Cc: u-boot at lists.denx.de; Cédric Le Goater <clg at kaod.org>
> Subject: [PATCH 07/10] i2c/aspeed: Fix reset control
> 
> The reset control was written for the ast2500 and directly programs the
> clocking register.
> 
> So we can share the code with other SoC generations use the reset device to
> deassert the I2C reset line.
> 
> Signed-off-by: Joel Stanley <joel at jms.id.au>
Reviewed-by: Ryan Chen <ryan_chen at aspeedtech.com>
> ---
>  drivers/i2c/ast_i2c.c | 22 +++++++++++++++-------
>  1 file changed, 15 insertions(+), 7 deletions(-)
> 
> diff --git a/drivers/i2c/ast_i2c.c b/drivers/i2c/ast_i2c.c index
> 2d3fecaa14ea..0a93d7c82911 100644
> --- a/drivers/i2c/ast_i2c.c
> +++ b/drivers/i2c/ast_i2c.c
> @@ -16,6 +16,7 @@
>  #include <asm/arch/scu_ast2500.h>
>  #include <linux/delay.h>
>  #include <linux/err.h>
> +#include <reset.h>
> 
>  #include "ast_i2c.h"
> 
> @@ -108,19 +109,26 @@ static int ast_i2c_of_to_plat(struct udevice *dev)
> 
>  static int ast_i2c_probe(struct udevice *dev)  {
> -	struct ast2500_scu *scu;
> +	struct reset_ctl reset_ctl;
> +	int rc;
> 
>  	debug("Enabling I2C%u\n", dev_seq(dev));
> 
>  	/*
>  	 * Get all I2C devices out of Reset.
> -	 * Only needs to be done once, but doing it for every
> -	 * device does not hurt.
> +	 *
> +	 * Only needs to be done once so test before performing reset.
>  	 */
> -	scu = ast_get_scu();
> -	ast_scu_unlock(scu);
> -	clrbits_le32(&scu->sysreset_ctrl1, SCU_SYSRESET_I2C);
> -	ast_scu_lock(scu);
> +	rc = reset_get_by_index(dev, 0, &reset_ctl);
> +	if (rc) {
> +		printf("%s: Failed to get reset signal\n", __func__);
> +		return rc;
> +	}
> +
> +	if (reset_status(&reset_ctl) > 0) {
> +		reset_assert(&reset_ctl);
> +		reset_deassert(&reset_ctl);
> +	}
> 
>  	ast_i2c_init_bus(dev);
> 
> --
> 2.35.1



More information about the U-Boot mailing list