mirror of
https://github.com/torvalds/linux.git
synced 2024-11-11 14:42:24 +00:00
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>
This commit is contained in:
parent
ccd32e221c
commit
630a8b2500
@ -39,10 +39,17 @@ static void tx4938ide_tune_ebusc(unsigned int ebus_ch,
|
||||
/* Address-valid to DIOR/DIOW setup */
|
||||
shwt = DIV_ROUND_UP(t->setup, cycle);
|
||||
|
||||
/* -DIOx recovery time (SHWT * 4) and cycle time requirement */
|
||||
while ((shwt * 4 + wt + (wt ? 2 : 3)) * cycle < t->cycle)
|
||||
shwt++;
|
||||
if (shwt > 7) {
|
||||
pr_warning("tx4938ide: SHWT violation (%d)\n", shwt);
|
||||
shwt = 7;
|
||||
}
|
||||
pr_debug("tx4938ide: ebus %d, bus cycle %dns, WT %d, SHWT %d\n",
|
||||
ebus_ch, cycle, wt, shwt);
|
||||
|
||||
__raw_writeq((cr & ~(0x3f007ull)) | (wt << 12) | shwt,
|
||||
__raw_writeq((cr & ~0x3f007ull) | (wt << 12) | shwt,
|
||||
&tx4938_ebuscptr->cr[ebus_ch]);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user