* [PATCH] mtd: sh_flctl: Switch from tick-based to time-based timeout
@ 2012-07-04 14:05 Bastian Hecht
2012-07-18 12:02 ` Artem Bityutskiy
2012-07-25 15:21 ` Bastian Hecht
0 siblings, 2 replies; 4+ messages in thread
From: Bastian Hecht @ 2012-07-04 14:05 UTC (permalink / raw)
To: linux-mtd; +Cc: Bastian Hecht, Artem Bityutskiy, Linux-SH
Instead of counting down a compile-time value, we use a value based on
jiffies.
Signed-off-by: Bastian Hecht <hechtb@gmail.com>
---
Artem mentioned the idea a while ago - here is the simple implementation now.
drivers/mtd/nand/sh_flctl.c | 14 +++++++++-----
include/linux/mtd/sh_flctl.h | 2 +-
2 files changed, 10 insertions(+), 6 deletions(-)
diff --git a/drivers/mtd/nand/sh_flctl.c b/drivers/mtd/nand/sh_flctl.c
index ed03ed2..0d9cce7 100644
--- a/drivers/mtd/nand/sh_flctl.c
+++ b/drivers/mtd/nand/sh_flctl.c
@@ -73,6 +73,8 @@ static struct nand_bbt_descr flctl_4secc_largepage = {
.pattern = scan_ff_pattern,
};
+static int loop_timeout_max;
+
static void empty_fifo(struct sh_flctl *flctl)
{
writel(flctl->flintdmacr_base | AC1CLR | AC0CLR, FLINTDMACR(flctl));
@@ -91,7 +93,7 @@ static void timeout_error(struct sh_flctl *flctl, const char *str)
static void wait_completion(struct sh_flctl *flctl)
{
- uint32_t timeout = LOOP_TIMEOUT_MAX;
+ uint32_t timeout = loop_timeout_max;
while (timeout--) {
if (readb(FLTRCR(flctl)) & TREND) {
@@ -138,7 +140,7 @@ static void set_addr(struct mtd_info *mtd, int column, int page_addr)
static void wait_rfifo_ready(struct sh_flctl *flctl)
{
- uint32_t timeout = LOOP_TIMEOUT_MAX;
+ uint32_t timeout = loop_timeout_max;
while (timeout--) {
uint32_t val;
@@ -153,7 +155,7 @@ static void wait_rfifo_ready(struct sh_flctl *flctl)
static void wait_wfifo_ready(struct sh_flctl *flctl)
{
- uint32_t len, timeout = LOOP_TIMEOUT_MAX;
+ uint32_t len, timeout = loop_timeout_max;
while (timeout--) {
/* check FIFO */
@@ -168,7 +170,7 @@ static void wait_wfifo_ready(struct sh_flctl *flctl)
static enum flctl_ecc_res_t wait_recfifo_ready
(struct sh_flctl *flctl, int sector_number)
{
- uint32_t timeout = LOOP_TIMEOUT_MAX;
+ uint32_t timeout = loop_timeout_max;
void __iomem *ecc_reg[4];
int i;
int state = FL_SUCCESS;
@@ -247,7 +249,7 @@ static enum flctl_ecc_res_t wait_recfifo_ready
static void wait_wecfifo_ready(struct sh_flctl *flctl)
{
- uint32_t timeout = LOOP_TIMEOUT_MAX;
+ uint32_t timeout = loop_timeout_max;
uint32_t len;
while (timeout--) {
@@ -939,6 +941,8 @@ static int __devinit flctl_probe(struct platform_device *pdev)
pm_runtime_enable(&pdev->dev);
pm_runtime_resume(&pdev->dev);
+ loop_timeout_max = loops_per_jiffy * msecs_to_jiffies(LOOP_TIMEOUT_MS);
+
ret = nand_scan_ident(flctl_mtd, 1, NULL);
if (ret)
goto err_chip;
diff --git a/include/linux/mtd/sh_flctl.h b/include/linux/mtd/sh_flctl.h
index 01e4b15..ade44c1 100644
--- a/include/linux/mtd/sh_flctl.h
+++ b/include/linux/mtd/sh_flctl.h
@@ -129,7 +129,7 @@
#define _4ECCEND (0x1 << 1) /* 4 symbols end */
#define _4ECCEXST (0x1 << 0) /* 4 symbols exist */
-#define LOOP_TIMEOUT_MAX 0x00010000
+#define LOOP_TIMEOUT_MS 100
enum flctl_ecc_res_t {
FL_SUCCESS,
--
1.7.9.5
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH] mtd: sh_flctl: Switch from tick-based to time-based timeout
2012-07-04 14:05 [PATCH] mtd: sh_flctl: Switch from tick-based to time-based timeout Bastian Hecht
@ 2012-07-18 12:02 ` Artem Bityutskiy
2012-07-25 15:21 ` Bastian Hecht
1 sibling, 0 replies; 4+ messages in thread
From: Artem Bityutskiy @ 2012-07-18 12:02 UTC (permalink / raw)
To: Bastian Hecht; +Cc: Bastian Hecht, linux-mtd, Linux-SH
[-- Attachment #1: Type: text/plain, Size: 271 bytes --]
On Wed, 2012-07-04 at 16:05 +0200, Bastian Hecht wrote:
> Instead of counting down a compile-time value, we use a value based on
> jiffies.
>
> Signed-off-by: Bastian Hecht <hechtb@gmail.com>
Pushed to l2-mtd.git, thanks!
--
Best Regards,
Artem Bityutskiy
[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 836 bytes --]
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] mtd: sh_flctl: Switch from tick-based to time-based timeout
2012-07-04 14:05 [PATCH] mtd: sh_flctl: Switch from tick-based to time-based timeout Bastian Hecht
2012-07-18 12:02 ` Artem Bityutskiy
@ 2012-07-25 15:21 ` Bastian Hecht
2012-08-20 9:19 ` Artem Bityutskiy
1 sibling, 1 reply; 4+ messages in thread
From: Bastian Hecht @ 2012-07-25 15:21 UTC (permalink / raw)
To: Artem Bityutskiy, linux-mtd; +Cc: Bastian Hecht, Linux-SH
Hello Artem!
Could you please pull out this patch of your tree? While reworking the
driver for IRQ-driven use, I've realized that this conversion makes no
sense as all loops use a udelay(1) in them. So the timeout is already
time based.
Sorry for the inconvenience,
Bastian Hecht
2012/7/4 Bastian Hecht <hechtb@googlemail.com>:
> Instead of counting down a compile-time value, we use a value based on
> jiffies.
>
> Signed-off-by: Bastian Hecht <hechtb@gmail.com>
> ---
> Artem mentioned the idea a while ago - here is the simple implementation now.
>
> drivers/mtd/nand/sh_flctl.c | 14 +++++++++-----
> include/linux/mtd/sh_flctl.h | 2 +-
> 2 files changed, 10 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/mtd/nand/sh_flctl.c b/drivers/mtd/nand/sh_flctl.c
> index ed03ed2..0d9cce7 100644
> --- a/drivers/mtd/nand/sh_flctl.c
> +++ b/drivers/mtd/nand/sh_flctl.c
> @@ -73,6 +73,8 @@ static struct nand_bbt_descr flctl_4secc_largepage = {
> .pattern = scan_ff_pattern,
> };
>
> +static int loop_timeout_max;
> +
> static void empty_fifo(struct sh_flctl *flctl)
> {
> writel(flctl->flintdmacr_base | AC1CLR | AC0CLR, FLINTDMACR(flctl));
> @@ -91,7 +93,7 @@ static void timeout_error(struct sh_flctl *flctl, const char *str)
>
> static void wait_completion(struct sh_flctl *flctl)
> {
> - uint32_t timeout = LOOP_TIMEOUT_MAX;
> + uint32_t timeout = loop_timeout_max;
>
> while (timeout--) {
> if (readb(FLTRCR(flctl)) & TREND) {
> @@ -138,7 +140,7 @@ static void set_addr(struct mtd_info *mtd, int column, int page_addr)
>
> static void wait_rfifo_ready(struct sh_flctl *flctl)
> {
> - uint32_t timeout = LOOP_TIMEOUT_MAX;
> + uint32_t timeout = loop_timeout_max;
>
> while (timeout--) {
> uint32_t val;
> @@ -153,7 +155,7 @@ static void wait_rfifo_ready(struct sh_flctl *flctl)
>
> static void wait_wfifo_ready(struct sh_flctl *flctl)
> {
> - uint32_t len, timeout = LOOP_TIMEOUT_MAX;
> + uint32_t len, timeout = loop_timeout_max;
>
> while (timeout--) {
> /* check FIFO */
> @@ -168,7 +170,7 @@ static void wait_wfifo_ready(struct sh_flctl *flctl)
> static enum flctl_ecc_res_t wait_recfifo_ready
> (struct sh_flctl *flctl, int sector_number)
> {
> - uint32_t timeout = LOOP_TIMEOUT_MAX;
> + uint32_t timeout = loop_timeout_max;
> void __iomem *ecc_reg[4];
> int i;
> int state = FL_SUCCESS;
> @@ -247,7 +249,7 @@ static enum flctl_ecc_res_t wait_recfifo_ready
>
> static void wait_wecfifo_ready(struct sh_flctl *flctl)
> {
> - uint32_t timeout = LOOP_TIMEOUT_MAX;
> + uint32_t timeout = loop_timeout_max;
> uint32_t len;
>
> while (timeout--) {
> @@ -939,6 +941,8 @@ static int __devinit flctl_probe(struct platform_device *pdev)
> pm_runtime_enable(&pdev->dev);
> pm_runtime_resume(&pdev->dev);
>
> + loop_timeout_max = loops_per_jiffy * msecs_to_jiffies(LOOP_TIMEOUT_MS);
> +
> ret = nand_scan_ident(flctl_mtd, 1, NULL);
> if (ret)
> goto err_chip;
> diff --git a/include/linux/mtd/sh_flctl.h b/include/linux/mtd/sh_flctl.h
> index 01e4b15..ade44c1 100644
> --- a/include/linux/mtd/sh_flctl.h
> +++ b/include/linux/mtd/sh_flctl.h
> @@ -129,7 +129,7 @@
> #define _4ECCEND (0x1 << 1) /* 4 symbols end */
> #define _4ECCEXST (0x1 << 0) /* 4 symbols exist */
>
> -#define LOOP_TIMEOUT_MAX 0x00010000
> +#define LOOP_TIMEOUT_MS 100
>
> enum flctl_ecc_res_t {
> FL_SUCCESS,
> --
> 1.7.9.5
>
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] mtd: sh_flctl: Switch from tick-based to time-based timeout
2012-07-25 15:21 ` Bastian Hecht
@ 2012-08-20 9:19 ` Artem Bityutskiy
0 siblings, 0 replies; 4+ messages in thread
From: Artem Bityutskiy @ 2012-08-20 9:19 UTC (permalink / raw)
To: Bastian Hecht; +Cc: Bastian Hecht, linux-mtd, Linux-SH
[-- Attachment #1: Type: text/plain, Size: 373 bytes --]
On Wed, 2012-07-25 at 17:21 +0200, Bastian Hecht wrote:
> Hello Artem!
>
> Could you please pull out this patch of your tree? While reworking the
> driver for IRQ-driven use, I've realized that this conversion makes no
> sense as all loops use a udelay(1) in them. So the timeout is already
> time based.
Dropped, thanks!
--
Best Regards,
Artem Bityutskiy
[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 836 bytes --]
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2012-08-20 9:19 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-07-04 14:05 [PATCH] mtd: sh_flctl: Switch from tick-based to time-based timeout Bastian Hecht
2012-07-18 12:02 ` Artem Bityutskiy
2012-07-25 15:21 ` Bastian Hecht
2012-08-20 9:19 ` Artem Bityutskiy
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).