From: Gregory CLEMENT <gregory.clement-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org> To: Wolfram Sang <wsa-z923LK4zBo2bacvFa/9K2g@public.gmane.org>, linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, Jason Cooper <jason-NLaQJdtUoK4Be96aLqz0jA@public.gmane.org>, Andrew Lunn <andrew-g2DYL2Zd6BY@public.gmane.org>, Gregory CLEMENT <gregory.clement-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org> Cc: Thomas Petazzoni <thomas.petazzoni-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>, Ezequiel Garcia <ezequiel.garcia-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>, Sebastian Hesselbarth <sebastian.hesselbarth-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org, Nicolas Pitre <nico-vtqb6HGKxmzR7s880joybQ@public.gmane.org>, Lior Amsalem <alior-eYqpPyKDWXRBDgjK7y7TUQ@public.gmane.org>, Maen Suleiman <maen-eYqpPyKDWXRBDgjK7y7TUQ@public.gmane.org>, Tawfik Bayouk <tawfik-eYqpPyKDWXRBDgjK7y7TUQ@public.gmane.org>, Shadi Ammouri <shadi-eYqpPyKDWXRBDgjK7y7TUQ@public.gmane.org>, Eran Ben-Avi <benavi-eYqpPyKDWXRBDgjK7y7TUQ@public.gmane.org>, Yehuda Yitschak <yehuday-eYqpPyKDWXRBDgjK7y7TUQ@public.gmane.org>, Nadav Haklai <nadavh-eYqpPyKDWXRBDgjK7y7TUQ@public.gmane.org>, Ike Pan <ike.pan-Z7WLFzj8eWMS+FvcfC7Uqw@public.gmane.org>, Chris Van Hoof <vanhoof-Z7WLFzj8eWMS+FvcfC7Uqw@public.gmane.org>, Dan Frazier <dann.frazier-Z7WLFzj8eWMS+FvcfC7Uqw@public.gmane.org>, Leif Lindholm <leif.lindholm-5wv7dgnIgG8@public.gmane.org>, Jon Masters <jcm-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>, David Marlin <dmarlin-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>, Zbigniew Bodek <zbb-nYOzD4b6Jr9Wk0Htik3J/w@public.gmane.org> Subject: [PATCH 2/3] i2c-mv64xxx: Fix timing issue on Armada XP (errata FE-8471889) Date: Mon, 15 Jul 2013 16:24:37 +0200 [thread overview] Message-ID: <1373898278-4805-3-git-send-email-gregory.clement@free-electrons.com> (raw) In-Reply-To: <1373898278-4805-1-git-send-email-gregory.clement-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org> All the Armada XP (mv78230, mv78260 and mv78460) have a silicon issue in the I2C controller which violate the i2c repeated start timing. The I2C standard requires a minimum of 4.7us for the repeated start condition whereas the I2C controller of the Armada XP this time is 2.9us. So this patch adds a 5us delay for the start case only if the the compatible i2c-mv78230 is set. Based on the initals patches from Zbigniew Bodek Signed-off-by: Gregory CLEMENT <gregory.clement-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org> Signed-off-by: Zbigniew Bodek <zbb-nYOzD4b6Jr9Wk0Htik3J/w@public.gmane.org> --- drivers/i2c/busses/i2c-mv64xxx.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/drivers/i2c/busses/i2c-mv64xxx.c b/drivers/i2c/busses/i2c-mv64xxx.c index 355ab64..75be30cce 100644 --- a/drivers/i2c/busses/i2c-mv64xxx.c +++ b/drivers/i2c/busses/i2c-mv64xxx.c @@ -24,6 +24,7 @@ #include <linux/of_i2c.h> #include <linux/clk.h> #include <linux/err.h> +#include <linux/delay.h> #define MV64XXX_I2C_ADDR_ADDR(val) ((val & 0x7f) << 1) #define MV64XXX_I2C_BAUD_DIV_N(val) (val & 0x7) @@ -147,6 +148,8 @@ struct mv64xxx_i2c_data { struct i2c_msg *msg; struct i2c_adapter adapter; bool offload_enabled; +/* 5us delay in order to avoid repeated start timing violation */ + bool errata_delay; }; static struct mv64xxx_i2c_regs mv64xxx_i2c_regs_mv64xxx = { @@ -450,6 +453,9 @@ mv64xxx_i2c_do_action(struct mv64xxx_i2c_data *drv_data) /* Setup for the next message */ mv64xxx_i2c_prepare_for_io(drv_data, drv_data->msgs); } + if (drv_data->errata_delay) + udelay(5); + /* * We're never at the start of the message here, and by this * time it's already too late to do any protocol mangling. @@ -509,6 +515,9 @@ mv64xxx_i2c_do_action(struct mv64xxx_i2c_data *drv_data) writel(drv_data->cntl_bits | MV64XXX_I2C_REG_CONTROL_STOP, drv_data->reg_base + drv_data->reg_offsets.control); drv_data->block = 0; + if (drv_data->errata_delay) + udelay(5); + wake_up(&drv_data->waitq); break; @@ -780,10 +789,12 @@ mv64xxx_of_config(struct mv64xxx_i2c_data *drv_data, /* * For controllers embedded in new SoCs activate the - * Transaction Generator support. + * Transaction Generator support and the errata fix. */ - if (of_device_is_compatible(np, "marvell,mv78230-i2c")) + if (of_device_is_compatible(np, "marvell,mv78230-i2c")) { drv_data->offload_enabled = true; + drv_data->errata_delay = true; + } out: return rc; -- 1.8.1.2
WARNING: multiple messages have this Message-ID (diff)
From: gregory.clement@free-electrons.com (Gregory CLEMENT) To: linux-arm-kernel@lists.infradead.org Subject: [PATCH 2/3] i2c-mv64xxx: Fix timing issue on Armada XP (errata FE-8471889) Date: Mon, 15 Jul 2013 16:24:37 +0200 [thread overview] Message-ID: <1373898278-4805-3-git-send-email-gregory.clement@free-electrons.com> (raw) In-Reply-To: <1373898278-4805-1-git-send-email-gregory.clement@free-electrons.com> All the Armada XP (mv78230, mv78260 and mv78460) have a silicon issue in the I2C controller which violate the i2c repeated start timing. The I2C standard requires a minimum of 4.7us for the repeated start condition whereas the I2C controller of the Armada XP this time is 2.9us. So this patch adds a 5us delay for the start case only if the the compatible i2c-mv78230 is set. Based on the initals patches from Zbigniew Bodek Signed-off-by: Gregory CLEMENT <gregory.clement@free-electrons.com> Signed-off-by: Zbigniew Bodek <zbb@semihalf.com> --- drivers/i2c/busses/i2c-mv64xxx.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/drivers/i2c/busses/i2c-mv64xxx.c b/drivers/i2c/busses/i2c-mv64xxx.c index 355ab64..75be30cce 100644 --- a/drivers/i2c/busses/i2c-mv64xxx.c +++ b/drivers/i2c/busses/i2c-mv64xxx.c @@ -24,6 +24,7 @@ #include <linux/of_i2c.h> #include <linux/clk.h> #include <linux/err.h> +#include <linux/delay.h> #define MV64XXX_I2C_ADDR_ADDR(val) ((val & 0x7f) << 1) #define MV64XXX_I2C_BAUD_DIV_N(val) (val & 0x7) @@ -147,6 +148,8 @@ struct mv64xxx_i2c_data { struct i2c_msg *msg; struct i2c_adapter adapter; bool offload_enabled; +/* 5us delay in order to avoid repeated start timing violation */ + bool errata_delay; }; static struct mv64xxx_i2c_regs mv64xxx_i2c_regs_mv64xxx = { @@ -450,6 +453,9 @@ mv64xxx_i2c_do_action(struct mv64xxx_i2c_data *drv_data) /* Setup for the next message */ mv64xxx_i2c_prepare_for_io(drv_data, drv_data->msgs); } + if (drv_data->errata_delay) + udelay(5); + /* * We're never at the start of the message here, and by this * time it's already too late to do any protocol mangling. @@ -509,6 +515,9 @@ mv64xxx_i2c_do_action(struct mv64xxx_i2c_data *drv_data) writel(drv_data->cntl_bits | MV64XXX_I2C_REG_CONTROL_STOP, drv_data->reg_base + drv_data->reg_offsets.control); drv_data->block = 0; + if (drv_data->errata_delay) + udelay(5); + wake_up(&drv_data->waitq); break; @@ -780,10 +789,12 @@ mv64xxx_of_config(struct mv64xxx_i2c_data *drv_data, /* * For controllers embedded in new SoCs activate the - * Transaction Generator support. + * Transaction Generator support and the errata fix. */ - if (of_device_is_compatible(np, "marvell,mv78230-i2c")) + if (of_device_is_compatible(np, "marvell,mv78230-i2c")) { drv_data->offload_enabled = true; + drv_data->errata_delay = true; + } out: return rc; -- 1.8.1.2
next prev parent reply other threads:[~2013-07-15 14:24 UTC|newest] Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top 2013-07-15 14:24 [PATCH 0/3] i2c-mv64xxx: Fixes and new feature for controlers embedded in Aramda XP Gregory CLEMENT 2013-07-15 14:24 ` Gregory CLEMENT [not found] ` <1373898278-4805-1-git-send-email-gregory.clement-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org> 2013-07-15 14:24 ` [PATCH 1/3] i2c-mv64xxx: Add I2C Transaction Generator support Gregory CLEMENT 2013-07-15 14:24 ` Gregory CLEMENT [not found] ` <1373898278-4805-2-git-send-email-gregory.clement-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org> 2013-07-16 8:05 ` Maxime Ripard 2013-07-16 8:05 ` Maxime Ripard 2013-08-06 12:05 ` Gregory CLEMENT 2013-08-06 12:05 ` Gregory CLEMENT [not found] ` <5200E684.5080003-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org> 2013-08-06 16:21 ` Maxime Ripard 2013-08-06 16:21 ` Maxime Ripard 2013-08-06 17:55 ` Thomas Petazzoni 2013-08-06 17:55 ` Thomas Petazzoni 2013-08-07 14:35 ` Wolfram Sang 2013-08-07 14:35 ` Wolfram Sang 2013-08-07 15:57 ` Jason Cooper 2013-08-07 15:57 ` Jason Cooper [not found] ` <20130807155700.GE19280-u4khhh1J0LxI1Ri9qeTfzeTW4wlIGRCZ@public.gmane.org> 2013-08-08 15:30 ` Gregory CLEMENT 2013-08-08 15:30 ` Gregory CLEMENT 2013-08-08 16:43 ` Mark Rutland 2013-08-08 16:43 ` Mark Rutland 2013-08-08 17:02 ` Jason Cooper 2013-08-08 17:02 ` Jason Cooper 2013-08-08 17:09 ` Mark Rutland 2013-08-08 17:09 ` Mark Rutland 2013-08-08 17:17 ` Jason Cooper 2013-08-08 17:17 ` Jason Cooper [not found] ` <5203B97A.8060605-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org> 2013-08-09 13:22 ` Wolfram Sang 2013-08-09 13:22 ` Wolfram Sang 2013-07-15 14:24 ` Gregory CLEMENT [this message] 2013-07-15 14:24 ` [PATCH 2/3] i2c-mv64xxx: Fix timing issue on Armada XP (errata FE-8471889) Gregory CLEMENT 2013-07-15 14:24 ` [PATCH 3/3] ARM: dts: mvebu: Introduce a new compatible string for mv64xxx-i2c Gregory CLEMENT 2013-07-15 14:24 ` Gregory CLEMENT [not found] ` <1373898278-4805-4-git-send-email-gregory.clement-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org> 2013-08-03 17:36 ` Jason Cooper 2013-08-03 17:36 ` Jason Cooper
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=1373898278-4805-3-git-send-email-gregory.clement@free-electrons.com \ --to=gregory.clement-wi1+55scjutkeb57/3fjtnbpr1lh4cv8@public.gmane.org \ --cc=alior-eYqpPyKDWXRBDgjK7y7TUQ@public.gmane.org \ --cc=andrew-g2DYL2Zd6BY@public.gmane.org \ --cc=benavi-eYqpPyKDWXRBDgjK7y7TUQ@public.gmane.org \ --cc=dann.frazier-Z7WLFzj8eWMS+FvcfC7Uqw@public.gmane.org \ --cc=dmarlin-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \ --cc=ezequiel.garcia-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org \ --cc=ike.pan-Z7WLFzj8eWMS+FvcfC7Uqw@public.gmane.org \ --cc=jason-NLaQJdtUoK4Be96aLqz0jA@public.gmane.org \ --cc=jcm-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \ --cc=leif.lindholm-5wv7dgnIgG8@public.gmane.org \ --cc=linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \ --cc=linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \ --cc=maen-eYqpPyKDWXRBDgjK7y7TUQ@public.gmane.org \ --cc=nadavh-eYqpPyKDWXRBDgjK7y7TUQ@public.gmane.org \ --cc=nico-vtqb6HGKxmzR7s880joybQ@public.gmane.org \ --cc=sebastian.hesselbarth-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \ --cc=shadi-eYqpPyKDWXRBDgjK7y7TUQ@public.gmane.org \ --cc=tawfik-eYqpPyKDWXRBDgjK7y7TUQ@public.gmane.org \ --cc=thomas.petazzoni-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org \ --cc=vanhoof-Z7WLFzj8eWMS+FvcfC7Uqw@public.gmane.org \ --cc=wsa-z923LK4zBo2bacvFa/9K2g@public.gmane.org \ --cc=yehuday-eYqpPyKDWXRBDgjK7y7TUQ@public.gmane.org \ --cc=zbb-nYOzD4b6Jr9Wk0Htik3J/w@public.gmane.org \ /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: linkBe 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.