Re: [RFC][PATCH] at91_ide driver

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello.

Stanislaw Gruszka wrote:

   Besides, we have ide_timing_compute() doing the same thing.
I'm trying use it, but have too bigger results - 1 or 2 cycles is added.

That's most probably because ide_timing_compute() assumes non-zero minimum recovery time for PIO modes 0 to 2 (libata does the same) -- that actually smells of over-caution. It then tries to stretch the active time if the sum of active and recovery times is less than cycle time (all quantized already).

I'm doing something wrong.

Well, you don't compute t2i. And you use recover field returend by ide_timing_compute() instead of rev8b.

        T = 1000000000 / (mck_hz / 1000);
        pdbg("pio %u T %u\n", pio, T);
        ret = ide_timing_compute(drive, pio + XFER_PIO_0, &timing, T, 1);

        t0 = timing->cyc8b;
        t1 = timing->setup;
        t2 = timing->act8b;
        t2i = timing->recover;

  No, you should use rec8b.

        t9 = 0;
        pdbg("1: t0=%02u t1=%02u t2=%02u t2i=%02u t9=%02u\n", t0, t1, t2, t2i, t9);

Clock is approx 100MHz , results should be the same as in standard divided by 10.

hda: host max PIO5 wanted PIO0 selected PIO0
at91_ide_set_pio_mode pio 0 T 10004
set_ebi_timings 1: t0=60 t1=07 t2=32 t2i=29 t9=00
set_ebi_timings 2: t0=60 t1=07 t2=29 t2i=00 t9=02

Yeah, with the PIO0 active time 290 ns + revovery time 240 ns giving 530 ns, the function should stretch the active time.

hda: host max PIO5 wanted PIO1 selected PIO1
at91_ide_set_pio_mode pio 1 T 10004
set_ebi_timings 1: t0=39 t1=05 t2=29 t2i=18 t9=00
set_ebi_timings 2: t0=39 t1=05 t2=29 t2i=00 t9=02

  Here 290 + 100 gives 390, so no stretching occurs.

hda: host max PIO5 wanted PIO2 selected PIO2
at91_ide_set_pio_mode pio 2 T 10004
set_ebi_timings 1: t0=33 t1=03 t2=29 t2i=12 t9=00
set_ebi_timings 2: t0=24 t1=03 t2=29 t2i=00 t9=01

  Here 290 + 40 gives 330, so no stretching occurs.

hda: host max PIO5 wanted PIO3 selected PIO3
at91_ide_set_pio_mode pio 3 T 10004
set_ebi_timings 1: t0=18 t1=03 t2=09 t2i=09 t9=00
set_ebi_timings 2: t0=18 t1=03 t2=08 t2i=07 t9=04

  Here 80 + 70 gives 150, so the active time is stretched.

hda: host max PIO5 wanted PIO4 selected PIO4
at91_ide_set_pio_mode pio 4 T 10004
set_ebi_timings 1: t0=12 t1=03 t2=08 t2i=04 t9=00
set_ebi_timings 2: t0=12 t1=03 t2=07 t2i=03 t9=01

  Here 70 + 30 gives 100, so the active time is stretched.

hda: host max PIO5 wanted PIO5 selected PIO5
at91_ide_set_pio_mode pio 5 T 10004
set_ebi_timings 1: t0=12 t1=02 t2=07 t2i=05 t9=00
set_ebi_timings 2: t0=10 t1=02 t2=07 t2i=03 t9=01

Here 50 + 30 gives 80 (the IDE core doesn't know about CF extended modes, so uses non-standard PIO5 timings), so the active time is stretched again.

Cheers
Stanislaw Gruszka

MBR, Sergei


--
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Filesystems]     [Linux SCSI]     [Linux RAID]     [Git]     [Kernel Newbies]     [Linux Newbie]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Samba]     [Device Mapper]

  Powered by Linux