Re: [PATCH 2.6.23-rc3] pata_pdc2027x: PLL detection fixes

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

 



Hello.

Albert Lee wrote:

b) puts more work [the enter test mode stuff] in between the start
  and and sampling points, reducing the precision of the PLL
  detection; I actually observed quite noticeable differences
  in detected PLL frequency based on whether the start was sampled
  before or after the test mode enter code

  I'd think this differnce is negligible with 100 ms delay. But why not
-- shouldn't harm indeed (except it's better to read a stable counter
before than unstable one after entering test mode)?

 The fix is to move the read of the start value to after
 test mode is started, but before the mdelay() in test mode.

  This is not an issue, so no fix is needed.

 This also improves the precision of the PLL detection.

  BTW, looks like we don't even need to bother reading the darn
counter beforehand: bit 1 of the indexed register 1 (the same used to
enter/exit test mode by twiddling its bit 6) when being cleared
should reset the counter to 0

  Or maybe to 0x7fff?  I can't remember already -- never seen those
infamous Promise papers, and I was testing this code looong ago
already... :-)

I've tested reloading the pata_pdc2027x module before.
The counter seems not cleared when leaving the test mode.

    I never saud that. Counter should be cleared by resetting "test mode" bit.
But I'm seeing the cause of misinteprettion: one may think that bit 1 is used to clear counters but I meant to say that clearing bit 1 of that ssme register should clear the counters...

2. The code to compute the number of PLL decrements during the
 mdelay() in test mode fails to consider that the PLL counter
 only is 30 bits wide. If there is a wraparound, it will compute
 an incorrect and much too large value. On the PowerMac, the
 start count is zero, the end count is a large 30-bit value, so
 wraparound occurs and an out of bounds PLL clock is detected.

 The fix is to mask the (start - end) computation to 30 bits.

  Yeah, that's what I've done for the old IDE driver...

Except that due to what may be a typo pdc202xx_new masks to
26 bits, not 30.

  Indeed! :-<
  Thanks for noticing -- this is a typo, of course... And it's a pity
that Albert failed to notice it when he last touched that driver...

I was too blind to notice the wrong 26-bit mask. :(

Fortunately with the 10ms delay used by the IDE pdc202xx_new driver,
(start_count - end_count) is smaller than the 26-bit mask. So it
doesn't actually damage anything.

   Yeah, I thought so.

I was going to address that if/when this patch
goes in.

  Please do, I'm too short of time.  But I guess the difference was
never that large, so the clipped mask worked...
  I wonder if the true reason of the former issue which was attibuted
mdelay() being imprecise...

mdelay() is actually imprecise on my x86 PC. This can be measured by
doing some do_gettimeofday() tests. It's quite precise when tested on
ppc64...

   Hm...

--
albert

   Don't overquote, please. ;-)

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