* [PATCH v1 0/2] spi: fsl-dspi: better approximation for baudrate
@ 2015-04-02 9:11 Andy Shevchenko
[not found] ` <1427965907-28125-1-git-send-email-andy.shevchenko-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
0 siblings, 1 reply; 7+ messages in thread
From: Andy Shevchenko @ 2015-04-02 9:11 UTC (permalink / raw)
To: Aaron Brice, linux-spi-u79uwXL29TY76Z2rM5mHXA, Mark Brown; +Cc: Andy Shevchenko
This series makes better approximation when baud rate divisor parameters are
calculated.
The algorithm is represent as Python script here [1]. First parameter is
algorithm (0 - original, 1 - after patch 1/2, 2 - after patch 2/2, 3 - memory
vs. performance: use precalculated scales).
I played with let's say standard baud rates (which I used for Quark) and
separately run algorithms 0 and 1 for range 100-5000 baud. Input frequency is
64MHz. It seems my algo shows better results in all cases. Here is a diff for
'standard' baud rates
(speed_hz, DBR, i, BR, j, PBR, real baud rate, difference):
--- result0 2015-04-02 00:38:48.845761004 +0300
+++ result1 2015-04-02 00:38:48.913760154 +0300
@@ -5,7 +5,7 @@
25000000 0 0 2 0 2 16000000 9000000
20000000 0 0 2 0 2 16000000 4000000
16667000 0 0 2 0 2 16000000 667000
-13333000 0 0 2 0 2 16000000 2667000
+13333000 0 0 2 1 3 10666666 2666334
12500000 0 0 2 1 3 10666666 1833334
10000000 0 0 2 1 3 10666666 666666
8000000 0 1 4 0 2 8000000 0
@@ -17,36 +17,36 @@
3140500 0 1 4 2 5 3200000 59500
3125000 0 1 4 2 5 3200000 75000
3109500 0 1 4 2 5 3200000 90500
-2500000 0 1 4 3 7 2285714 214286
+2500000 0 3 8 1 3 2666666 166666
2000000 0 4 16 0 2 2000000 0
1563000 0 3 8 2 5 1600000 37000
-1250000 0 3 8 3 7 1142857 107143
+1250000 0 4 16 1 3 1333333 83333
1006000 0 5 32 0 2 1000000 6000
1000000 0 5 32 0 2 1000000 0
994000 0 5 32 0 2 1000000 6000
800000 0 4 16 2 5 800000 0
-781250 0 5 32 1 3 666666 114584
-625000 0 4 16 3 7 571428 53572
+781250 0 4 16 2 5 800000 18750
+625000 0 5 32 1 3 666666 41666
500000 0 6 64 0 2 500000 0
400000 0 5 32 2 5 400000 0
-390625 0 6 64 1 3 333333 57292
+390625 0 5 32 2 5 400000 9375
250000 0 7 128 0 2 250000 0
200000 0 6 64 2 5 200000 0
205313 0 6 64 2 5 200000 5313
-195313 0 7 128 1 3 166666 28647
-185313 0 7 128 1 3 166666 18647
+195313 0 6 64 2 5 200000 4687
+185313 0 6 64 2 5 200000 14687
125000 0 8 256 0 2 125000 0
100700 0 7 128 2 5 100000 700
100000 0 7 128 2 5 100000 0
-99300 0 8 256 1 3 83333 15967
+99300 0 7 128 2 5 100000 700
50000 0 8 256 2 5 50000 0
25000 0 9 512 2 5 25000 0
-10066 0 10 1024 3 7 8928 1138
-10016 0 10 1024 3 7 8928 1088
-9966 0 10 1024 3 7 8928 1038
-5065 0 11 2048 3 7 4464 601
-5040 0 11 2048 3 7 4464 576
-5015 0 11 2048 3 7 4464 551
+10066 0 11 2048 1 3 10416 350
+10016 0 11 2048 1 3 10416 400
+9966 0 11 2048 1 3 10416 450
+5065 0 12 4096 1 3 5208 143
+5040 0 12 4096 1 3 5208 168
+5015 0 12 4096 1 3 5208 193
1007 0 15 32768 0 2 976 31
1002 0 15 32768 0 2 976 26
997 0 15 32768 0 2 976 21
Patch 2 is RFC, since I don't know if all DSPI modules has that bit (at least
what I found on public for MC55xx) and how duty cycle is significant.
Not compiled. Not tested.
[1] http://pastebin.com/uy0CKc6b
Andy Shevchenko (2):
spi: fsl-dspi: increase precision of baud rate approximation
spi: fsl-dspi: use double baud rate in approximation
drivers/spi/spi-fsl-dspi.c | 50 +++++++++++++++++++++-------------------------
1 file changed, 23 insertions(+), 27 deletions(-)
--
1.9.3
--
To unsubscribe from this list: send the line "unsubscribe linux-spi" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v1 1/2] spi: fsl-dspi: increase precision of baud rate approximation
[not found] ` <1427965907-28125-1-git-send-email-andy.shevchenko-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
@ 2015-04-02 9:11 ` Andy Shevchenko
2015-04-02 9:11 ` [PATCH v1 2/2][RFC] spi: fsl-dspi: use double baud rate in approximation Andy Shevchenko
2015-04-03 17:50 ` [PATCH v1 0/2] spi: fsl-dspi: better approximation for baudrate Aaron Brice
2 siblings, 0 replies; 7+ messages in thread
From: Andy Shevchenko @ 2015-04-02 9:11 UTC (permalink / raw)
To: Aaron Brice, linux-spi-u79uwXL29TY76Z2rM5mHXA, Mark Brown; +Cc: Andy Shevchenko
The current approximation relies on scale comparison which is wrong in
two ways: a) the required scale doesn't take into consideration
remainder of the division, and b) minimal scale doesn't guarantee the
best approximation.
This patch change the approach to use comparison between remainders
instead of direct scale testing.
Signed-off-by: Andy Shevchenko <andy.shevchenko-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
---
drivers/spi/spi-fsl-dspi.c | 32 +++++++++++---------------------
1 file changed, 11 insertions(+), 21 deletions(-)
diff --git a/drivers/spi/spi-fsl-dspi.c b/drivers/spi/spi-fsl-dspi.c
index 96cac87..31cdee5 100644
--- a/drivers/spi/spi-fsl-dspi.c
+++ b/drivers/spi/spi-fsl-dspi.c
@@ -144,34 +144,24 @@ static void hz_to_spi_baud(char *pbr, char *br, int speed_hz,
{
/* Valid baud rate pre-scaler values */
int pbr_tbl[4] = {2, 3, 5, 7};
- int brs[16] = { 2, 4, 6, 8,
+ int brs[16] = {
+ 2, 4, 6, 8,
16, 32, 64, 128,
256, 512, 1024, 2048,
- 4096, 8192, 16384, 32768 };
- int scale_needed, scale, minscale = INT_MAX;
+ 4096, 8192, 16384, 32768,
+ };
+ unsigned long r = INT_MAX, tmp;
int i, j;
- scale_needed = clkrate / speed_hz;
-
for (i = 0; i < ARRAY_SIZE(brs); i++)
for (j = 0; j < ARRAY_SIZE(pbr_tbl); j++) {
- scale = brs[i] * pbr_tbl[j];
- if (scale >= scale_needed) {
- if (scale < minscale) {
- minscale = scale;
- *br = i;
- *pbr = j;
- }
- break;
- }
+ tmp = abs(clkrate / pbr_tbl[j] / brs[i] - speed_hz);
+ if (tmp >= r)
+ continue;
+ r = tmp;
+ *br = i;
+ *pbr = j;
}
-
- if (minscale == INT_MAX) {
- pr_warn("Can not find valid baud rate,speed_hz is %d,clkrate is %ld, we use the max prescaler value.\n",
- speed_hz, clkrate);
- *pbr = ARRAY_SIZE(pbr_tbl) - 1;
- *br = ARRAY_SIZE(brs) - 1;
- }
}
static int dspi_transfer_write(struct fsl_dspi *dspi)
--
1.9.3
--
To unsubscribe from this list: send the line "unsubscribe linux-spi" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v1 2/2][RFC] spi: fsl-dspi: use double baud rate in approximation
[not found] ` <1427965907-28125-1-git-send-email-andy.shevchenko-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2015-04-02 9:11 ` [PATCH v1 1/2] spi: fsl-dspi: increase precision of baud rate approximation Andy Shevchenko
@ 2015-04-02 9:11 ` Andy Shevchenko
2015-04-03 17:50 ` [PATCH v1 0/2] spi: fsl-dspi: better approximation for baudrate Aaron Brice
2 siblings, 0 replies; 7+ messages in thread
From: Andy Shevchenko @ 2015-04-02 9:11 UTC (permalink / raw)
To: Aaron Brice, linux-spi-u79uwXL29TY76Z2rM5mHXA, Mark Brown; +Cc: Andy Shevchenko
The CTAR register has DBR bit which allows to double a baud rate, though
it makes duty cycle deviate from 50/50.
This patch tries to approximate better using DBR. It helps in case of
highest possible baud rates.
Signed-off-by: Andy Shevchenko <andy.shevchenko-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
---
drivers/spi/spi-fsl-dspi.c | 34 ++++++++++++++++++++--------------
1 file changed, 20 insertions(+), 14 deletions(-)
diff --git a/drivers/spi/spi-fsl-dspi.c b/drivers/spi/spi-fsl-dspi.c
index 31cdee5..92d387a 100644
--- a/drivers/spi/spi-fsl-dspi.c
+++ b/drivers/spi/spi-fsl-dspi.c
@@ -47,6 +47,7 @@
#define SPI_TCR 0x08
#define SPI_CTAR(x) (0x0c + (((x) & 0x3) * 4))
+#define SPI_CTAR_DBR(x) (((x) & 0x00000001) << 31)
#define SPI_CTAR_FMSZ(x) (((x) & 0x0000000f) << 27)
#define SPI_CTAR_CPOL(x) ((x) << 26)
#define SPI_CTAR_CPHA(x) ((x) << 25)
@@ -139,8 +140,8 @@ static inline int is_double_byte_mode(struct fsl_dspi *dspi)
return ((val & SPI_FRAME_BITS_MASK) == SPI_FRAME_BITS(8)) ? 0 : 1;
}
-static void hz_to_spi_baud(char *pbr, char *br, int speed_hz,
- unsigned long clkrate)
+static void hz_to_spi_baud(char *dbr, char *pbr, char *br,
+ int speed_hz, unsigned long clkrate)
{
/* Valid baud rate pre-scaler values */
int pbr_tbl[4] = {2, 3, 5, 7};
@@ -151,17 +152,21 @@ static void hz_to_spi_baud(char *pbr, char *br, int speed_hz,
4096, 8192, 16384, 32768,
};
unsigned long r = INT_MAX, tmp;
- int i, j;
-
- for (i = 0; i < ARRAY_SIZE(brs); i++)
- for (j = 0; j < ARRAY_SIZE(pbr_tbl); j++) {
- tmp = abs(clkrate / pbr_tbl[j] / brs[i] - speed_hz);
- if (tmp >= r)
- continue;
- r = tmp;
- *br = i;
- *pbr = j;
+ int i, j, k;
+
+ for (k = 0; k < 2; k++) {
+ for (i = 0; i < ARRAY_SIZE(brs); i++) {
+ for (j = 0; j < ARRAY_SIZE(pbr_tbl); j++) {
+ tmp = abs(clkrate / pbr_tbl[j] / brs[i] - speed_hz);
+ if (tmp >= r)
+ continue;
+ r = tmp;
+ *br = i;
+ *pbr = j;
+ *dbr = k;
+ }
}
+ }
}
static int dspi_transfer_write(struct fsl_dspi *dspi)
@@ -342,7 +347,7 @@ static int dspi_setup(struct spi_device *spi)
{
struct chip_data *chip;
struct fsl_dspi *dspi = spi_master_get_devdata(spi->master);
- unsigned char br = 0, pbr = 0, fmsz = 0;
+ unsigned char br = 0, pbr = 0, dbr = 0, fmsz = 0;
if ((spi->bits_per_word >= 4) && (spi->bits_per_word <= 16)) {
fmsz = spi->bits_per_word - 1;
@@ -364,13 +369,14 @@ static int dspi_setup(struct spi_device *spi)
chip->void_write_data = 0;
- hz_to_spi_baud(&pbr, &br,
+ hz_to_spi_baud(&dbr, &pbr, &br,
spi->max_speed_hz, clk_get_rate(dspi->clk));
chip->ctar_val = SPI_CTAR_FMSZ(fmsz)
| SPI_CTAR_CPOL(spi->mode & SPI_CPOL ? 1 : 0)
| SPI_CTAR_CPHA(spi->mode & SPI_CPHA ? 1 : 0)
| SPI_CTAR_LSBFE(spi->mode & SPI_LSB_FIRST ? 1 : 0)
+ | SPI_CTAR_DBR(dbr)
| SPI_CTAR_PBR(pbr)
| SPI_CTAR_BR(br);
--
1.9.3
--
To unsubscribe from this list: send the line "unsubscribe linux-spi" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH v1 0/2] spi: fsl-dspi: better approximation for baudrate
[not found] ` <1427965907-28125-1-git-send-email-andy.shevchenko-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2015-04-02 9:11 ` [PATCH v1 1/2] spi: fsl-dspi: increase precision of baud rate approximation Andy Shevchenko
2015-04-02 9:11 ` [PATCH v1 2/2][RFC] spi: fsl-dspi: use double baud rate in approximation Andy Shevchenko
@ 2015-04-03 17:50 ` Aaron Brice
[not found] ` <551ED2F6.8020701-vSOi0k5x9wFWk0Htik3J/w@public.gmane.org>
2 siblings, 1 reply; 7+ messages in thread
From: Aaron Brice @ 2015-04-03 17:50 UTC (permalink / raw)
To: Andy Shevchenko, linux-spi-u79uwXL29TY76Z2rM5mHXA, Mark Brown
Andy,
See comments below.
On 04/02/2015 02:11 AM, Andy Shevchenko wrote:
> This series makes better approximation when baud rate divisor parameters are
> calculated.
>
> The algorithm is represent as Python script here [1]. First parameter is
> algorithm (0 - original, 1 - after patch 1/2, 2 - after patch 2/2, 3 - memory
> vs. performance: use precalculated scales).
>
> I played with let's say standard baud rates (which I used for Quark) and
> separately run algorithms 0 and 1 for range 100-5000 baud. Input frequency is
> 64MHz. It seems my algo shows better results in all cases. Here is a diff for
> 'standard' baud rates
> (speed_hz, DBR, i, BR, j, PBR, real baud rate, difference):
>
> --- result0 2015-04-02 00:38:48.845761004 +0300
> +++ result1 2015-04-02 00:38:48.913760154 +0300
> @@ -5,7 +5,7 @@
> 25000000 0 0 2 0 2 16000000 9000000
> 20000000 0 0 2 0 2 16000000 4000000
> 16667000 0 0 2 0 2 16000000 667000
> -13333000 0 0 2 0 2 16000000 2667000
> +13333000 0 0 2 1 3 10666666 2666334
This one is definitely a bug in the original due to dropping the
remainder in the 4.8 scale factor needed.
> 12500000 0 0 2 1 3 10666666 1833334
> 10000000 0 0 2 1 3 10666666 666666
> 8000000 0 1 4 0 2 8000000 0
> @@ -17,36 +17,36 @@
> 3140500 0 1 4 2 5 3200000 59500
> 3125000 0 1 4 2 5 3200000 75000
> 3109500 0 1 4 2 5 3200000 90500
> -2500000 0 1 4 3 7 2285714 214286
> +2500000 0 3 8 1 3 2666666 166666
The rest of these I'm not sure about. The property is called
"spi-max-frequency" and the description in the bindings document is:
- spi-max-frequency - (required) Maximum SPI clocking speed of device in Hz
In the rest of the examples you've gotten a closer baud rate by
exceeding the "Maximum" value. I don't think you want best
approximation, I think you want closest without going over..
> 2000000 0 4 16 0 2 2000000 0
> 1563000 0 3 8 2 5 1600000 37000
> -1250000 0 3 8 3 7 1142857 107143
> +1250000 0 4 16 1 3 1333333 83333
> 1006000 0 5 32 0 2 1000000 6000
> 1000000 0 5 32 0 2 1000000 0
> 994000 0 5 32 0 2 1000000 6000
> 800000 0 4 16 2 5 800000 0
> -781250 0 5 32 1 3 666666 114584
> -625000 0 4 16 3 7 571428 53572
> +781250 0 4 16 2 5 800000 18750
> +625000 0 5 32 1 3 666666 41666
> 500000 0 6 64 0 2 500000 0
> 400000 0 5 32 2 5 400000 0
> -390625 0 6 64 1 3 333333 57292
> +390625 0 5 32 2 5 400000 9375
> 250000 0 7 128 0 2 250000 0
> 200000 0 6 64 2 5 200000 0
> 205313 0 6 64 2 5 200000 5313
> -195313 0 7 128 1 3 166666 28647
> -185313 0 7 128 1 3 166666 18647
> +195313 0 6 64 2 5 200000 4687
> +185313 0 6 64 2 5 200000 14687
> 125000 0 8 256 0 2 125000 0
> 100700 0 7 128 2 5 100000 700
> 100000 0 7 128 2 5 100000 0
> -99300 0 8 256 1 3 83333 15967
> +99300 0 7 128 2 5 100000 700
> 50000 0 8 256 2 5 50000 0
> 25000 0 9 512 2 5 25000 0
> -10066 0 10 1024 3 7 8928 1138
> -10016 0 10 1024 3 7 8928 1088
> -9966 0 10 1024 3 7 8928 1038
> -5065 0 11 2048 3 7 4464 601
> -5040 0 11 2048 3 7 4464 576
> -5015 0 11 2048 3 7 4464 551
> +10066 0 11 2048 1 3 10416 350
> +10016 0 11 2048 1 3 10416 400
> +9966 0 11 2048 1 3 10416 450
> +5065 0 12 4096 1 3 5208 143
> +5040 0 12 4096 1 3 5208 168
> +5015 0 12 4096 1 3 5208 193
> 1007 0 15 32768 0 2 976 31
> 1002 0 15 32768 0 2 976 26
> 997 0 15 32768 0 2 976 21
>
> Patch 2 is RFC, since I don't know if all DSPI modules has that bit (at least
> what I found on public for MC55xx) and how duty cycle is significant.
>
> Not compiled. Not tested.
>
> [1] http://pastebin.com/uy0CKc6b
>
> Andy Shevchenko (2):
> spi: fsl-dspi: increase precision of baud rate approximation
> spi: fsl-dspi: use double baud rate in approximation
>
> drivers/spi/spi-fsl-dspi.c | 50 +++++++++++++++++++++-------------------------
> 1 file changed, 23 insertions(+), 27 deletions(-)
>
Thanks,
Aaron
--
To unsubscribe from this list: send the line "unsubscribe linux-spi" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v1 0/2] spi: fsl-dspi: better approximation for baudrate
[not found] ` <551ED2F6.8020701-vSOi0k5x9wFWk0Htik3J/w@public.gmane.org>
@ 2015-04-03 20:59 ` Andy Shevchenko
[not found] ` <CAHp75Vfa9b0s6rXMbUERbbGRowGp4bidKH1UZ4a8HAx23oSrLw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
0 siblings, 1 reply; 7+ messages in thread
From: Andy Shevchenko @ 2015-04-03 20:59 UTC (permalink / raw)
To: Aaron Brice; +Cc: linux-spi-u79uwXL29TY76Z2rM5mHXA, Mark Brown
On Fri, Apr 3, 2015 at 8:50 PM, Aaron Brice <aaron.brice-vSOi0k5x9wFWk0Htik3J/w@public.gmane.org> wrote:
> On 04/02/2015 02:11 AM, Andy Shevchenko wrote:
>>
>> This series makes better approximation when baud rate divisor parameters
>> are
>> calculated.
>>
>> The algorithm is represent as Python script here [1]. First parameter is
>> algorithm (0 - original, 1 - after patch 1/2, 2 - after patch 2/2, 3 -
>> memory
>> vs. performance: use precalculated scales).
>>
>> I played with let's say standard baud rates (which I used for Quark) and
>> separately run algorithms 0 and 1 for range 100-5000 baud. Input frequency
>> is
>> 64MHz. It seems my algo shows better results in all cases. Here is a diff
>> for
>> 'standard' baud rates
>> (speed_hz, DBR, i, BR, j, PBR, real baud rate, difference):
[]
>> 3140500 0 1 4 2 5 3200000 59500
>> 3125000 0 1 4 2 5 3200000 75000
>> 3109500 0 1 4 2 5 3200000 90500
>> -2500000 0 1 4 3 7 2285714 214286
>> +2500000 0 3 8 1 3 2666666 166666
>
> The rest of these I'm not sure about. The property is called
> "spi-max-frequency" and the description in the bindings document is:
>
> - spi-max-frequency - (required) Maximum SPI clocking speed of device in Hz
I think we are talking about real world and real hardware. As far as I
understand the problem with SPI (or any other) clocking is a
consistent error.
If you have that error is a big enough the data might be corrupted.
How big? Each difference between clocking is for hardware the shifted
phase. When phase is deviated your consumer might missed change of
the signal and inverted a bit.
Thus, if the delta for clocking is small the hardware will still catch
the change of the signal.
So, in practice it is quite unlikely to happen since usual devices
have enough frequency margin.
> In the rest of the examples you've gotten a closer baud rate by exceeding
> the "Maximum" value. I don't think you want best approximation, I think you
> want closest without going over..
Can you test on real hardware? I'm pretty sure it's quite hard to find
something that will not work.
--
With Best Regards,
Andy Shevchenko
--
To unsubscribe from this list: send the line "unsubscribe linux-spi" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v1 0/2] spi: fsl-dspi: better approximation for baudrate
[not found] ` <CAHp75Vfa9b0s6rXMbUERbbGRowGp4bidKH1UZ4a8HAx23oSrLw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
@ 2015-04-03 22:44 ` Aaron Brice
[not found] ` <551F17B1.3010109-vSOi0k5x9wFWk0Htik3J/w@public.gmane.org>
0 siblings, 1 reply; 7+ messages in thread
From: Aaron Brice @ 2015-04-03 22:44 UTC (permalink / raw)
To: Andy Shevchenko; +Cc: linux-spi-u79uwXL29TY76Z2rM5mHXA, Mark Brown
On 04/03/2015 01:59 PM, Andy Shevchenko wrote:
> On Fri, Apr 3, 2015 at 8:50 PM, Aaron Brice <aaron.brice-vSOi0k5x9wFWk0Htik3J/w@public.gmane.org> wrote:
>> On 04/02/2015 02:11 AM, Andy Shevchenko wrote:
>>>
>>> This series makes better approximation when baud rate divisor parameters
>>> are
>>> calculated.
>>>
>>> The algorithm is represent as Python script here [1]. First parameter is
>>> algorithm (0 - original, 1 - after patch 1/2, 2 - after patch 2/2, 3 -
>>> memory
>>> vs. performance: use precalculated scales).
>>>
>>> I played with let's say standard baud rates (which I used for Quark) and
>>> separately run algorithms 0 and 1 for range 100-5000 baud. Input frequency
>>> is
>>> 64MHz. It seems my algo shows better results in all cases. Here is a diff
>>> for
>>> 'standard' baud rates
>>> (speed_hz, DBR, i, BR, j, PBR, real baud rate, difference):
>
> []
>
>>> 3140500 0 1 4 2 5 3200000 59500
>>> 3125000 0 1 4 2 5 3200000 75000
>>> 3109500 0 1 4 2 5 3200000 90500
>>> -2500000 0 1 4 3 7 2285714 214286
>>> +2500000 0 3 8 1 3 2666666 166666
>>
>> The rest of these I'm not sure about. The property is called
>> "spi-max-frequency" and the description in the bindings document is:
>>
>> - spi-max-frequency - (required) Maximum SPI clocking speed of device in Hz
>
> I think we are talking about real world and real hardware. As far as I
> understand the problem with SPI (or any other) clocking is a
> consistent error.
>
> If you have that error is a big enough the data might be corrupted.
> How big? Each difference between clocking is for hardware the shifted
> phase. When phase is deviated your consumer might missed change of
> the signal and inverted a bit.
>
> Thus, if the delta for clocking is small the hardware will still catch
> the change of the signal.
>
> So, in practice it is quite unlikely to happen since usual devices
> have enough frequency margin.
>
You're probably right that the extra Hz are "unlikely" to break
anything. I think they're also unlikely to improve anything noticeably,
what systems do you have where the transfer speed of a SPI device is the
bottleneck? In my case [1], I'm 1000% more concerned about reliability
than throughput for the SPI devices.
If I had one that was a bottleneck I could always bump up the
spi-max-frequency to a value that exceeded the spec to see if it would
work, but at least I'd be explicitly exceeding the spec instead of
having the driver silently do it for me..
> Can you test on real hardware? I'm pretty sure it's quite hard to find
> something that will not work.
>
Shouldn't the burden be on you to prove that setting the frequency 8%
higher than the max frequency is safe on all hardware?
[1] http://datasoft.com/products/sidebridge/index.html
Aaron
--
To unsubscribe from this list: send the line "unsubscribe linux-spi" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v1 0/2] spi: fsl-dspi: better approximation for baudrate
[not found] ` <551F17B1.3010109-vSOi0k5x9wFWk0Htik3J/w@public.gmane.org>
@ 2015-04-06 16:49 ` Mark Brown
0 siblings, 0 replies; 7+ messages in thread
From: Mark Brown @ 2015-04-06 16:49 UTC (permalink / raw)
To: Aaron Brice; +Cc: Andy Shevchenko, linux-spi-u79uwXL29TY76Z2rM5mHXA
[-- Attachment #1: Type: text/plain, Size: 1023 bytes --]
On Fri, Apr 03, 2015 at 03:44:01PM -0700, Aaron Brice wrote:
> You're probably right that the extra Hz are "unlikely" to break
> anything. I think they're also unlikely to improve anything noticeably,
> what systems do you have where the transfer speed of a SPI device is the
> bottleneck? In my case [1], I'm 1000% more concerned about reliability
> than throughput for the SPI devices.
Reads from flash devices, anything doing firmware downloads... there's
probably other examples but those are the ones that spring to mind off
the top of my head.
> > Can you test on real hardware? I'm pretty sure it's quite hard to find
> > something that will not work.
> Shouldn't the burden be on you to prove that setting the frequency 8%
> higher than the max frequency is safe on all hardware?
8% seems like a huge error especially if that's 8% over, I can't see that
being OK for things operating at or near spec. Note also that it's
common to see constraints that the SPI clock be strictly less than some
other clock.
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 473 bytes --]
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2015-04-06 16:49 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-04-02 9:11 [PATCH v1 0/2] spi: fsl-dspi: better approximation for baudrate Andy Shevchenko
[not found] ` <1427965907-28125-1-git-send-email-andy.shevchenko-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2015-04-02 9:11 ` [PATCH v1 1/2] spi: fsl-dspi: increase precision of baud rate approximation Andy Shevchenko
2015-04-02 9:11 ` [PATCH v1 2/2][RFC] spi: fsl-dspi: use double baud rate in approximation Andy Shevchenko
2015-04-03 17:50 ` [PATCH v1 0/2] spi: fsl-dspi: better approximation for baudrate Aaron Brice
[not found] ` <551ED2F6.8020701-vSOi0k5x9wFWk0Htik3J/w@public.gmane.org>
2015-04-03 20:59 ` Andy Shevchenko
[not found] ` <CAHp75Vfa9b0s6rXMbUERbbGRowGp4bidKH1UZ4a8HAx23oSrLw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-04-03 22:44 ` Aaron Brice
[not found] ` <551F17B1.3010109-vSOi0k5x9wFWk0Htik3J/w@public.gmane.org>
2015-04-06 16:49 ` Mark Brown
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).