All of lore.kernel.org
 help / color / mirror / Atom feed
From: Keerthy <j-keerthy@ti.com>
To: Tony Lindgren <tony@atomide.com>
Cc: devicetree@vger.kernel.org, "Dave Gerlach" <d-gerlach@ti.com>,
	"Tero Kristo" <t-kristo@ti.com>,
	"Benoît Cousson" <bcousson@baylibre.com>,
	linux-omap@vger.kernel.org, linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH 0/4] Update am437x and am335x dts to probe with ti-sysc
Date: Wed, 26 Sep 2018 09:38:12 +0530	[thread overview]
Message-ID: <d98aa7c1-5131-34c5-51e5-c7ef57cbc31e@ti.com> (raw)
In-Reply-To: <20180925175537.GQ5662@atomide.com>



On Tuesday 25 September 2018 11:25 PM, Tony Lindgren wrote:
> * Tony Lindgren <tony@atomide.com> [180925 14:44]:
>> * Keerthy <j-keerthy@ti.com> [180925 05:18]:
>>> I tried Branch [1] above. AM335x-boneblack is doing all good with ds0.
>>> AM437x-gp the following is happening:
>>>
>>> https://pastebin.ubuntu.com/p/fmZNYgJ9Sp/
>>>
>>> There seems to be a timeout due to which resume is not immediate i see
>>> 1-2s delay and i see i2c timeout.
>>>
>>> [  402.247271] omap_i2c 4802a000.i2c: controller timed out
>>> [  402.247441] pixcir_ts 1-005c: pixcir_int_enable: can't read reg 0x34
>>> : -110
>>> [  402.247486] pixcir_ts 1-005c: Failed to disable interrupt generation:
>>> -110
>>> [  402.247522] pixcir_ts 1-005c: Failed to stop
>>> [  402.247607] dpm_run_callback(): pixcir_i2c_ts_resume+0x0/0x98
>>> [pixcir_i2c_ts] returns -110
>>>
>>> so pixcir_i2c_ts_resume is retuning -110 which is timeout error code.
>>>
>>> I did some touch screen testing after DS0 resume seems to be working.
>>> Everything is in pastebin link provided above.
>>
>> Thanks for testing. Hmm no idea what might be going on with
>> the pixcir. I have edt-ft5x06 on the am437x-sk-evm and that
>> behaves just fine for suspend and resume. Both are on i2c1,
>> pixcir calls pixcir_start/stop from suspend and resume while
>> edt-ft5x06 does not reconfigure anything.
>>
>> I'll try read some edt-ft5x06 register values on suspend
>> and resume, let's see if that makes it reproducable here.
> 
> So after adding a call to edt_ft5x06_ts_readwrite to
> edt_ft5x06_ts_resume I see -110 errors too. Looks like we
> have i2c-omap not idled for suspend because of autoidle if
> an i2c client reconfigures it's registers for suspend.
> 
> Care to test with the following patch applied? If that works
> for you, I'll send a proper patch for that.

https://pastebin.ubuntu.com/p/KKNDB6sCcD/

So the below patch is solving the problem only for the first iteration
but i see the problem recurring from second iteration of suspend.

I tried the above cycle multiple times on am437x-gp-evm. I believe
we are one step closer still not completely fixed.

> 
> Regards,
> 
> Tony
> 
> 8< -------------------
> diff --git a/drivers/i2c/busses/i2c-omap.c b/drivers/i2c/busses/i2c-omap.c
> --- a/drivers/i2c/busses/i2c-omap.c
> +++ b/drivers/i2c/busses/i2c-omap.c
> @@ -208,6 +208,8 @@ struct omap_i2c_dev {
>  						 * if set, should be trsh+1
>  						 */
>  	u32			rev;
> +	unsigned int		is_suspended:1;
> +	unsigned int		needs_resume:1;
>  	unsigned		b_hw:1;		/* bad h/w fixes */
>  	unsigned		bb_valid:1;	/* true when BB-bit reflects
>  						 * the I2C bus state
> @@ -1498,8 +1500,7 @@ static int omap_i2c_remove(struct platform_device *pdev)
>  	return 0;
>  }
>  
> -#ifdef CONFIG_PM
> -static int omap_i2c_runtime_suspend(struct device *dev)
> +static int __maybe_unused omap_i2c_runtime_suspend(struct device *dev)
>  {
>  	struct omap_i2c_dev *omap = dev_get_drvdata(dev);
>  
> @@ -1521,11 +1522,12 @@ static int omap_i2c_runtime_suspend(struct device *dev)
>  	}
>  
>  	pinctrl_pm_select_sleep_state(dev);
> +	omap->is_suspended = true;
>  
>  	return 0;
>  }
>  
> -static int omap_i2c_runtime_resume(struct device *dev)
> +static int __maybe_unused omap_i2c_runtime_resume(struct device *dev)
>  {
>  	struct omap_i2c_dev *omap = dev_get_drvdata(dev);
>  
> @@ -1535,6 +1537,47 @@ static int omap_i2c_runtime_resume(struct device *dev)
>  		return 0;
>  
>  	__omap_i2c_init(omap);
> +	omap->is_suspended = false;
> +
> +	return 0;
> +}
> +
> +static int __maybe_unused omap_i2c_suspend(struct device *dev)
> +{
> +	struct omap_i2c_dev *ddata = dev_get_drvdata(dev);
> +	int error;
> +
> +	/* Is device still enabled because of autosuspend? */
> +	if (!ddata->is_suspended) {
> +		error = pm_runtime_put_sync_suspend(dev);
> +		if (error < 0) {
> +			dev_err(dev, "%s failed: %i\n", __func__, error);
> +
> +			return error;
> +		}
> +		ddata->needs_resume = true;
> +	}
> +
> +	return 0;
> +}
> +
> +static int __maybe_unused omap_i2c_resume(struct device *dev)
> +{
> +	struct omap_i2c_dev *ddata = dev_get_drvdata(dev);
> +	int error;
> +
> +	if (ddata->needs_resume) {
> +		error = pm_runtime_get_sync(dev);
> +		if (error < 0) {
> +			dev_err(dev, "%s failed: %i\n", __func__, error);
> +			pm_runtime_put_noidle(dev);
> +
> +			return error;
> +		}
> +		pm_runtime_mark_last_busy(dev);
> +		pm_runtime_put_autosuspend(dev);
> +		ddata->needs_resume = false;
> +	}
>  
>  	return 0;
>  }
> @@ -1542,18 +1585,15 @@ static int omap_i2c_runtime_resume(struct device *dev)
>  static const struct dev_pm_ops omap_i2c_pm_ops = {
>  	SET_RUNTIME_PM_OPS(omap_i2c_runtime_suspend,
>  			   omap_i2c_runtime_resume, NULL)
> +	SET_SYSTEM_SLEEP_PM_OPS(omap_i2c_suspend, omap_i2c_resume)
>  };
> -#define OMAP_I2C_PM_OPS (&omap_i2c_pm_ops)
> -#else
> -#define OMAP_I2C_PM_OPS NULL
> -#endif /* CONFIG_PM */
>  
>  static struct platform_driver omap_i2c_driver = {
>  	.probe		= omap_i2c_probe,
>  	.remove		= omap_i2c_remove,
>  	.driver		= {
>  		.name	= "omap_i2c",
> -		.pm	= OMAP_I2C_PM_OPS,
> +		.pm	= &omap_i2c_pm_ops,
>  		.of_match_table = of_match_ptr(omap_i2c_of_match),
>  	},
>  };
> 

WARNING: multiple messages have this Message-ID (diff)
From: j-keerthy@ti.com (Keerthy)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 0/4] Update am437x and am335x dts to probe with ti-sysc
Date: Wed, 26 Sep 2018 09:38:12 +0530	[thread overview]
Message-ID: <d98aa7c1-5131-34c5-51e5-c7ef57cbc31e@ti.com> (raw)
In-Reply-To: <20180925175537.GQ5662@atomide.com>



On Tuesday 25 September 2018 11:25 PM, Tony Lindgren wrote:
> * Tony Lindgren <tony@atomide.com> [180925 14:44]:
>> * Keerthy <j-keerthy@ti.com> [180925 05:18]:
>>> I tried Branch [1] above. AM335x-boneblack is doing all good with ds0.
>>> AM437x-gp the following is happening:
>>>
>>> https://pastebin.ubuntu.com/p/fmZNYgJ9Sp/
>>>
>>> There seems to be a timeout due to which resume is not immediate i see
>>> 1-2s delay and i see i2c timeout.
>>>
>>> [  402.247271] omap_i2c 4802a000.i2c: controller timed out
>>> [  402.247441] pixcir_ts 1-005c: pixcir_int_enable: can't read reg 0x34
>>> : -110
>>> [  402.247486] pixcir_ts 1-005c: Failed to disable interrupt generation:
>>> -110
>>> [  402.247522] pixcir_ts 1-005c: Failed to stop
>>> [  402.247607] dpm_run_callback(): pixcir_i2c_ts_resume+0x0/0x98
>>> [pixcir_i2c_ts] returns -110
>>>
>>> so pixcir_i2c_ts_resume is retuning -110 which is timeout error code.
>>>
>>> I did some touch screen testing after DS0 resume seems to be working.
>>> Everything is in pastebin link provided above.
>>
>> Thanks for testing. Hmm no idea what might be going on with
>> the pixcir. I have edt-ft5x06 on the am437x-sk-evm and that
>> behaves just fine for suspend and resume. Both are on i2c1,
>> pixcir calls pixcir_start/stop from suspend and resume while
>> edt-ft5x06 does not reconfigure anything.
>>
>> I'll try read some edt-ft5x06 register values on suspend
>> and resume, let's see if that makes it reproducable here.
> 
> So after adding a call to edt_ft5x06_ts_readwrite to
> edt_ft5x06_ts_resume I see -110 errors too. Looks like we
> have i2c-omap not idled for suspend because of autoidle if
> an i2c client reconfigures it's registers for suspend.
> 
> Care to test with the following patch applied? If that works
> for you, I'll send a proper patch for that.

https://pastebin.ubuntu.com/p/KKNDB6sCcD/

So the below patch is solving the problem only for the first iteration
but i see the problem recurring from second iteration of suspend.

I tried the above cycle multiple times on am437x-gp-evm. I believe
we are one step closer still not completely fixed.

> 
> Regards,
> 
> Tony
> 
> 8< -------------------
> diff --git a/drivers/i2c/busses/i2c-omap.c b/drivers/i2c/busses/i2c-omap.c
> --- a/drivers/i2c/busses/i2c-omap.c
> +++ b/drivers/i2c/busses/i2c-omap.c
> @@ -208,6 +208,8 @@ struct omap_i2c_dev {
>  						 * if set, should be trsh+1
>  						 */
>  	u32			rev;
> +	unsigned int		is_suspended:1;
> +	unsigned int		needs_resume:1;
>  	unsigned		b_hw:1;		/* bad h/w fixes */
>  	unsigned		bb_valid:1;	/* true when BB-bit reflects
>  						 * the I2C bus state
> @@ -1498,8 +1500,7 @@ static int omap_i2c_remove(struct platform_device *pdev)
>  	return 0;
>  }
>  
> -#ifdef CONFIG_PM
> -static int omap_i2c_runtime_suspend(struct device *dev)
> +static int __maybe_unused omap_i2c_runtime_suspend(struct device *dev)
>  {
>  	struct omap_i2c_dev *omap = dev_get_drvdata(dev);
>  
> @@ -1521,11 +1522,12 @@ static int omap_i2c_runtime_suspend(struct device *dev)
>  	}
>  
>  	pinctrl_pm_select_sleep_state(dev);
> +	omap->is_suspended = true;
>  
>  	return 0;
>  }
>  
> -static int omap_i2c_runtime_resume(struct device *dev)
> +static int __maybe_unused omap_i2c_runtime_resume(struct device *dev)
>  {
>  	struct omap_i2c_dev *omap = dev_get_drvdata(dev);
>  
> @@ -1535,6 +1537,47 @@ static int omap_i2c_runtime_resume(struct device *dev)
>  		return 0;
>  
>  	__omap_i2c_init(omap);
> +	omap->is_suspended = false;
> +
> +	return 0;
> +}
> +
> +static int __maybe_unused omap_i2c_suspend(struct device *dev)
> +{
> +	struct omap_i2c_dev *ddata = dev_get_drvdata(dev);
> +	int error;
> +
> +	/* Is device still enabled because of autosuspend? */
> +	if (!ddata->is_suspended) {
> +		error = pm_runtime_put_sync_suspend(dev);
> +		if (error < 0) {
> +			dev_err(dev, "%s failed: %i\n", __func__, error);
> +
> +			return error;
> +		}
> +		ddata->needs_resume = true;
> +	}
> +
> +	return 0;
> +}
> +
> +static int __maybe_unused omap_i2c_resume(struct device *dev)
> +{
> +	struct omap_i2c_dev *ddata = dev_get_drvdata(dev);
> +	int error;
> +
> +	if (ddata->needs_resume) {
> +		error = pm_runtime_get_sync(dev);
> +		if (error < 0) {
> +			dev_err(dev, "%s failed: %i\n", __func__, error);
> +			pm_runtime_put_noidle(dev);
> +
> +			return error;
> +		}
> +		pm_runtime_mark_last_busy(dev);
> +		pm_runtime_put_autosuspend(dev);
> +		ddata->needs_resume = false;
> +	}
>  
>  	return 0;
>  }
> @@ -1542,18 +1585,15 @@ static int omap_i2c_runtime_resume(struct device *dev)
>  static const struct dev_pm_ops omap_i2c_pm_ops = {
>  	SET_RUNTIME_PM_OPS(omap_i2c_runtime_suspend,
>  			   omap_i2c_runtime_resume, NULL)
> +	SET_SYSTEM_SLEEP_PM_OPS(omap_i2c_suspend, omap_i2c_resume)
>  };
> -#define OMAP_I2C_PM_OPS (&omap_i2c_pm_ops)
> -#else
> -#define OMAP_I2C_PM_OPS NULL
> -#endif /* CONFIG_PM */
>  
>  static struct platform_driver omap_i2c_driver = {
>  	.probe		= omap_i2c_probe,
>  	.remove		= omap_i2c_remove,
>  	.driver		= {
>  		.name	= "omap_i2c",
> -		.pm	= OMAP_I2C_PM_OPS,
> +		.pm	= &omap_i2c_pm_ops,
>  		.of_match_table = of_match_ptr(omap_i2c_of_match),
>  	},
>  };
> 

  parent reply	other threads:[~2018-09-26  4:08 UTC|newest]

Thread overview: 66+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-09-25  0:05 [PATCH 0/4] Update am437x and am335x dts to probe with ti-sysc Tony Lindgren
2018-09-25  0:05 ` Tony Lindgren
2018-09-25  0:05 ` [PATCH 1/4] ARM: dts: am437x: Add l4 interconnect hierarchy and ti-sysc data Tony Lindgren
2018-09-25  0:05   ` Tony Lindgren
2018-09-25  0:05 ` [PATCH 2/4] ARM: dts: am437x: Move l4 child devices to probe them with ti-sysc Tony Lindgren
2018-09-25  0:05   ` Tony Lindgren
2018-12-04 12:23   ` Peter Ujfalusi
2018-12-04 12:23     ` Peter Ujfalusi
2018-12-04 18:11     ` Tony Lindgren
2018-12-04 18:11       ` Tony Lindgren
2018-12-04 23:18       ` Tony Lindgren
2018-12-04 23:18         ` Tony Lindgren
2018-12-05  6:14         ` Peter Ujfalusi
2018-12-05 19:00           ` Tony Lindgren
2018-12-05 19:00             ` Tony Lindgren
2018-12-05 23:02             ` Tony Lindgren
2018-12-05 23:02               ` Tony Lindgren
2018-12-07 12:46               ` Peter Ujfalusi
2018-09-25  0:05 ` [PATCH 3/4] ARM: dts: am335x: Add l4 interconnect hierarchy and ti-sysc data Tony Lindgren
2018-09-25  0:05   ` Tony Lindgren
2018-09-27 14:56   ` Tony Lindgren
2018-09-27 14:56     ` Tony Lindgren
2018-09-25  0:05 ` [PATCH 4/4] ARM: dts: am335x: Move l4 child devices to probe them with ti-sysc Tony Lindgren
2018-09-25  0:05   ` Tony Lindgren
2018-11-27 13:03   ` Peter Ujfalusi
2018-11-27 13:03     ` Peter Ujfalusi
2018-11-27 16:16     ` Tony Lindgren
2018-11-27 16:16       ` Tony Lindgren
2018-11-28 12:52       ` Peter Ujfalusi
2018-11-28 12:52         ` Peter Ujfalusi
2018-11-29 19:07         ` Tony Lindgren
2018-11-29 19:07           ` Tony Lindgren
2018-09-25  5:14 ` [PATCH 0/4] Update am437x and am335x dts to probe " Keerthy
2018-09-25  5:14   ` Keerthy
2018-09-25 14:40   ` Tony Lindgren
2018-09-25 14:40     ` Tony Lindgren
2018-09-25 17:55     ` Tony Lindgren
2018-09-25 17:55       ` Tony Lindgren
2018-09-25 21:16       ` Grygorii Strashko
2018-09-25 21:16         ` Grygorii Strashko
2018-09-26  4:08       ` Keerthy [this message]
2018-09-26  4:08         ` Keerthy
2018-09-26 15:59         ` Tony Lindgren
2018-09-26 15:59           ` Tony Lindgren
2018-09-26 16:23           ` Tony Lindgren
2018-09-26 16:23             ` Tony Lindgren
2018-09-26 21:36             ` Grygorii Strashko
2018-09-26 21:36               ` Grygorii Strashko
2018-09-26 23:31               ` Tony Lindgren
2018-09-26 23:31                 ` Tony Lindgren
2018-09-27  4:55                 ` Keerthy
2018-09-27  4:55                   ` Keerthy
2018-09-27 14:53                   ` Tony Lindgren
2018-09-27 14:53                     ` Tony Lindgren
2018-09-27 21:43                     ` Tony Lindgren
2018-09-27 21:43                       ` Tony Lindgren
2018-10-01 16:32                   ` Tony Lindgren
2018-10-01 16:32                     ` Tony Lindgren
2018-10-04  4:29                     ` Keerthy
2018-10-04  4:29                       ` Keerthy
2018-10-04 14:23                       ` Tony Lindgren
2018-10-04 14:23                         ` Tony Lindgren
2018-09-27 19:11                 ` Grygorii Strashko
2018-09-27 19:11                   ` Grygorii Strashko
2018-09-27 19:38                   ` Tony Lindgren
2018-09-27 19:38                     ` Tony Lindgren

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=d98aa7c1-5131-34c5-51e5-c7ef57cbc31e@ti.com \
    --to=j-keerthy@ti.com \
    --cc=bcousson@baylibre.com \
    --cc=d-gerlach@ti.com \
    --cc=devicetree@vger.kernel.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-omap@vger.kernel.org \
    --cc=t-kristo@ti.com \
    --cc=tony@atomide.com \
    /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.