aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorAtsushi Nemoto <anemo@mba.ocn.ne.jp>2008-11-02 15:40:09 -0500
committerBartlomiej Zolnierkiewicz <bzolnier@gmail.com>2008-11-02 15:40:09 -0500
commit630a8b2500c8d04e87e597c4afa5e1fafff04591 (patch)
tree846c569c1f4f16bf6c1fdef1071850ce48f2c920 /drivers
parentccd32e221c3e3797ac56305c554ad8b07c13c815 (diff)
tx4938ide: Check minimum cycle time and SHWT range (v2)
SHWT value is used as address valid to -CSx assertion and -CSx to -DIOx assertion setup time, and contrarywise, -DIOx to -CSx release and -CSx release to address invalid hold time, so it actualy applies 4 times and so constitutes -DIOx recovery time. Check requirement of the recovery time and cycle time. Also check SHWT maximum value. Suggested-by: Sergei Shtylyov <sshtylyov@ru.mvista.com> Signed-off-by: Atsushi Nemoto <anemo@mba.ocn.ne.jp> Cc: ralf@linux-mips.org Acked-by: Sergei Shtylyov <sshtylyov@ru.mvista.com> Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/ide/tx4938ide.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/drivers/ide/tx4938ide.c b/drivers/ide/tx4938ide.c
index fa660f931a11..9c518e722707 100644
--- a/drivers/ide/tx4938ide.c
+++ b/drivers/ide/tx4938ide.c
@@ -39,10 +39,17 @@ static void tx4938ide_tune_ebusc(unsigned int ebus_ch,
39 /* Address-valid to DIOR/DIOW setup */ 39 /* Address-valid to DIOR/DIOW setup */
40 shwt = DIV_ROUND_UP(t->setup, cycle); 40 shwt = DIV_ROUND_UP(t->setup, cycle);
41 41
42 /* -DIOx recovery time (SHWT * 4) and cycle time requirement */
43 while ((shwt * 4 + wt + (wt ? 2 : 3)) * cycle < t->cycle)
44 shwt++;
45 if (shwt > 7) {
46 pr_warning("tx4938ide: SHWT violation (%d)\n", shwt);
47 shwt = 7;
48 }
42 pr_debug("tx4938ide: ebus %d, bus cycle %dns, WT %d, SHWT %d\n", 49 pr_debug("tx4938ide: ebus %d, bus cycle %dns, WT %d, SHWT %d\n",
43 ebus_ch, cycle, wt, shwt); 50 ebus_ch, cycle, wt, shwt);
44 51
45 __raw_writeq((cr & ~(0x3f007ull)) | (wt << 12) | shwt, 52 __raw_writeq((cr & ~0x3f007ull) | (wt << 12) | shwt,
46 &tx4938_ebuscptr->cr[ebus_ch]); 53 &tx4938_ebuscptr->cr[ebus_ch]);
47} 54}
48 55