On Sun, 19 Oct 2008 20:32:13 +0400, Sergei Shtylyov <sshtylyov@ru.mvista.com>
wrote:
> > + /* IORDY setup time: 35ns */
> > + wt = (35 + cycle - 1) / cycle;
>
> It's not that simple I'm afraid: you can't just wait IORDY for 35 ns as
> that won't guarantee the minimum DIOx- actime time for the current PIO mode;
> so t->act8 (since it's >= t->act) should be part of the equation here,
> possibly with subtraction of couple cycles, if I'm interpreting the timing
> diagrams in the datasheet correctly...
Hmm... so, does this statement seems correct?
wt = (t->act8b + 35 + cycle - 1) / cycle - 2;
> > + /* actual wait-cycle is max(wt & ~1, 1) */
>
> I got an impression that WT[0] bit is used otherwise in the ready mode,
> and PWT[1:0]:WT[3:1] = 00000 would mean 0 cycles, not 1...
From "7.3.6.3 Ready Mode":
When the number of wait cycles is 0, READY check is started in
1 cycle after asserting the CE* signal. When the number of
wait cycles is other than zero, after waiting only for the
specified number of cycles, READY check is started.
> > + if (pdata->ioport_shift) {
> > + hw.io_ports_array[0] = (unsigned long)mmport[0];
> > +#ifdef __BIG_ENDIAN
> > + mmport[0]++;
> > + mmport[1]++;
> > +#endif
> > + for (i = 1; i <= 7; i++)
> > + hw.io_ports_array[i] = (unsigned long)mmport[0] +
> > + (i << pdata->ioport_shift);
> > + hw.io_ports.ctl_addr = (unsigned long)mmport[1];
> > + } else
> > + ide_std_init_ports(&hw, (unsigned long)mmport[0],
> > + (unsigned long)mmport[1]);
>
> From the datasheet I got an impression that this case is not possible...
Yes, but certanly RBTX4938 works without ioport_shift, with a little
help from IOC-FPGA.
I will accept all other points. Thank you all the time!
---
Atsushi Nemoto
|