On Sat, Aug 22, 2020 at 5:18 PM Krzysztof Kozlowski [off-list ref] wrote:
On Sat, Aug 22, 2020 at 04:52:40PM +0200, Tomasz Figa wrote:
quoted
On Sat, Aug 22, 2020 at 2:43 PM Krzysztof Kozlowski [off-list ref] wrote:
quoted
On Fri, Aug 21, 2020 at 06:13:59PM +0200, Łukasz Stelmach wrote:
quoted
cur_speed is used to calculate transfer timeout and needs to be
set to the actual value of (half) the clock speed for precise
calculations.
If you need this only for timeout calculation just divide it in
s3c64xx_wait_for_dma().
Division is not the point of the patch. The point is that
clk_set_rate() that was originally there doesn't guarantee that the
rate is set exactly.
Unfortunately onlt that point of timeout is mentioned in commit msg. If
the correction of timeout was not the point of the patch, then describe
the real point...
quoted
The rate directly determines the SPI transfer
speed and thus the driver needs to use the rate that was actually set
for further calculations.
Yep, makes sense.
quoted
quoted
Otherwise why only if (cmu) case is updated?
Right, the !cmu case actually suffers from the same problem. The code
divides the parent clock rate with the requested speed to obtain the
divider to program into the register. This is subject to integer
rounding, so (parent / (parent / speed)) doesn't always equal (speed).
It is not only this problem. The meaning of cur_speed is now changed.
For !cmu_case this the requested in trasnfer SPI bus clock frequency,
for cmu_case this is now real src_clk frequency. It's getting slightly
messier.
quoted
quoted
You are also affecting here not only timeout but
s3c64xx_enable_datapath() which is not mentioned in commit log. In other
words, this looks wrong.
Actually this is right and fixes one more problem, which I didn't spot
when looking at this code when I suggested the change (I only spotted
the effects on timeout calculation). The rounding error might have
caused wrong configuration there, because e.g. 30000000 Hz could be
requested and rounded to 28000000 Hz. The former is a threshold for
setting the S3C64XX_SPI_CH_HS_EN bit, but the real frequency wouldn't
actually require setting it.
Wrong is here describing one thing and doing much more.
Yeah, agreed that the description could be improved. :)
Best regards,
Tomasz
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel