diff mbox series

[1/2] mfd: cros ec: spi: Don't send first message too soon

Message ID 1510607140-30582-1-git-send-email-jonathanh@nvidia.com
State Superseded, archived
Headers show
Series [1/2] mfd: cros ec: spi: Don't send first message too soon | expand

Commit Message

Jon Hunter Nov. 13, 2017, 9:05 p.m. UTC
On the Tegra124 Nyan-Big chromebook the very first SPI message sent to
the EC is failing.

The Tegra SPI driver configures the SPI chip-selects to be active-high
by default (and always has for many years). The EC SPI requires an
active-low chip-select and so the Tegra chip-select is reconfigured to
be active-low when the EC SPI driver calls spi_setup(). The problem is
that if the first SPI message to the EC is sent too soon after
reconfiguring the SPI chip-select, it fails.

The EC SPI driver prevents back-to-back SPI messages being sent too
soon by keeping track of the time the last transfer was sent via the
variable 'last_transfer_ns'. To prevent the very first transfer being
sent too soon, initialise the 'last_transfer_ns' variable after calling
spi_setup() and before sending the first SPI message.

Signed-off-by: Jon Hunter <jonathanh@nvidia.com>
---
Looks like this issue has been around for several Linux releases now
and it just depends on timing if this issue is seen or not and so there
is no specific commit this fixes. However, would be good to include for
v4.15.

 drivers/mfd/cros_ec_spi.c | 1 +
 1 file changed, 1 insertion(+)

Comments

Brian Norris Nov. 13, 2017, 9:19 p.m. UTC | #1
+ others

On Mon, Nov 13, 2017 at 09:05:39PM +0000, Jon Hunter wrote:
> On the Tegra124 Nyan-Big chromebook the very first SPI message sent to
> the EC is failing.
> 
> The Tegra SPI driver configures the SPI chip-selects to be active-high
> by default (and always has for many years). The EC SPI requires an
> active-low chip-select and so the Tegra chip-select is reconfigured to
> be active-low when the EC SPI driver calls spi_setup(). The problem is
> that if the first SPI message to the EC is sent too soon after
> reconfiguring the SPI chip-select, it fails.
> 
> The EC SPI driver prevents back-to-back SPI messages being sent too
> soon by keeping track of the time the last transfer was sent via the
> variable 'last_transfer_ns'. To prevent the very first transfer being
> sent too soon, initialise the 'last_transfer_ns' variable after calling
> spi_setup() and before sending the first SPI message.
> 
> Signed-off-by: Jon Hunter <jonathanh@nvidia.com>
> ---
> Looks like this issue has been around for several Linux releases now
> and it just depends on timing if this issue is seen or not and so there
> is no specific commit this fixes. However, would be good to include for
> v4.15.

I wonder if that doesn't mean we should have a stable tag still?

Cc: <stable@vger.kernel.org>

>  drivers/mfd/cros_ec_spi.c | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/drivers/mfd/cros_ec_spi.c b/drivers/mfd/cros_ec_spi.c
> index c9714072e224..a14196e95e9b 100644
> --- a/drivers/mfd/cros_ec_spi.c
> +++ b/drivers/mfd/cros_ec_spi.c
> @@ -667,6 +667,7 @@ static int cros_ec_spi_probe(struct spi_device *spi)
>  			   sizeof(struct ec_response_get_protocol_info);
>  	ec_dev->dout_size = sizeof(struct ec_host_request);
>  
> +	ec_spi->last_transfer_ns = ktime_get_ns();

Seems pretty reasonable to me:

Reviewed-by: Brian Norris <briannorris@chromium.org>

>  
>  	err = cros_ec_register(ec_dev);
>  	if (err) {
> -- 
> 2.7.4
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-tegra" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Jon Hunter Nov. 14, 2017, 2:44 p.m. UTC | #2
On 13/11/17 21:19, Brian Norris wrote:
> + others
> 
> On Mon, Nov 13, 2017 at 09:05:39PM +0000, Jon Hunter wrote:
>> On the Tegra124 Nyan-Big chromebook the very first SPI message sent to
>> the EC is failing.
>>
>> The Tegra SPI driver configures the SPI chip-selects to be active-high
>> by default (and always has for many years). The EC SPI requires an
>> active-low chip-select and so the Tegra chip-select is reconfigured to
>> be active-low when the EC SPI driver calls spi_setup(). The problem is
>> that if the first SPI message to the EC is sent too soon after
>> reconfiguring the SPI chip-select, it fails.
>>
>> The EC SPI driver prevents back-to-back SPI messages being sent too
>> soon by keeping track of the time the last transfer was sent via the
>> variable 'last_transfer_ns'. To prevent the very first transfer being
>> sent too soon, initialise the 'last_transfer_ns' variable after calling
>> spi_setup() and before sending the first SPI message.
>>
>> Signed-off-by: Jon Hunter <jonathanh@nvidia.com>
>> ---
>> Looks like this issue has been around for several Linux releases now
>> and it just depends on timing if this issue is seen or not and so there
>> is no specific commit this fixes. However, would be good to include for
>> v4.15.
> 
> I wonder if that doesn't mean we should have a stable tag still?
> 
> Cc: <stable@vger.kernel.org>

I was thinking about that as well after I sent it. I have resent as a V2
CC'ing stable.

Cheers
Jon
Lee Jones Nov. 29, 2017, 11:07 a.m. UTC | #3
On Mon, 13 Nov 2017, Jon Hunter wrote:

> On the Tegra124 Nyan-Big chromebook the very first SPI message sent to
> the EC is failing.
> 
> The Tegra SPI driver configures the SPI chip-selects to be active-high
> by default (and always has for many years). The EC SPI requires an
> active-low chip-select and so the Tegra chip-select is reconfigured to
> be active-low when the EC SPI driver calls spi_setup(). The problem is
> that if the first SPI message to the EC is sent too soon after
> reconfiguring the SPI chip-select, it fails.
> 
> The EC SPI driver prevents back-to-back SPI messages being sent too
> soon by keeping track of the time the last transfer was sent via the
> variable 'last_transfer_ns'. To prevent the very first transfer being
> sent too soon, initialise the 'last_transfer_ns' variable after calling
> spi_setup() and before sending the first SPI message.
> 
> Signed-off-by: Jon Hunter <jonathanh@nvidia.com>
> ---
> Looks like this issue has been around for several Linux releases now
> and it just depends on timing if this issue is seen or not and so there
> is no specific commit this fixes. However, would be good to include for
> v4.15.
> 
>  drivers/mfd/cros_ec_spi.c | 1 +
>  1 file changed, 1 insertion(+)

Applied, thanks.
diff mbox series

Patch

diff --git a/drivers/mfd/cros_ec_spi.c b/drivers/mfd/cros_ec_spi.c
index c9714072e224..a14196e95e9b 100644
--- a/drivers/mfd/cros_ec_spi.c
+++ b/drivers/mfd/cros_ec_spi.c
@@ -667,6 +667,7 @@  static int cros_ec_spi_probe(struct spi_device *spi)
 			   sizeof(struct ec_response_get_protocol_info);
 	ec_dev->dout_size = sizeof(struct ec_host_request);
 
+	ec_spi->last_transfer_ns = ktime_get_ns();
 
 	err = cros_ec_register(ec_dev);
 	if (err) {