linux/arch/arm/mach-ixp4xx
Krzysztof Halasa 5dbc46506a IXP42x HSS support for setting internal clock rate
HSS usually uses external clocks, so it's not a big deal. Internal clock
is used for direct DTE-DTE connections and when the DCE doesn't provide
it's own clock.

This also depends on the oscillator frequency. Intel seems to have
calculated the clock register settings for 33.33 MHz (66.66 MHz timer
base). Their settings seem quite suboptimal both in terms of average
frequency (60 ppm is unacceptable for G.703 applications, their primary
intended usage(?)) and jitter.

Many (most?) platforms use a 33.333 MHz oscillator, a 10 ppm difference
from Intel's base.

Instead of creating static tables, I've created a procedure to program
the HSS clock register. The register consists of 3 parts (A, B, C).
The average frequency (= bit rate) is:
66.66x MHz / (A  + (B + 1) / (C + 1))
The procedure aims at the closest average frequency, possibly at the
cost of increased jitter. Nobody would be able to directly drive an
unbufferred transmitter with a HSS anyway, and the frequency error is
what it really counts.

I've verified the above with an oscilloscope on IXP425. It seems IXP46x
and possibly IXP43x use a bit different clock generation algorithm - it
looks like the avg frequency is:
(on IXP465) 66.66x MHz / (A  + B / (C + 1)).
Also they use much greater precomputed A and B - on IXP425 it would
simply result in more jitter, but I don't know how does it work on
IXP46x (perhaps 3 least significant bits aren't used?).

Anyway it looks that they were aiming for exactly +60 ppm or -60 ppm,
while <1 ppm is typically possible (with a synchronized clock, of
course).

The attached patch makes it possible to set almost any bit rate
(my IXP425 533 MHz quits at > 22 Mb/s if a single port is used, and the
minimum is ca. 65 Kb/s).

This is independent of MVIP (multi-E1/T1 on one HSS) mode.

Signed-off-by: Krzysztof Hałasa <khc@pm.waw.pl>
Signed-off-by: David S. Miller <davem@davemloft.net>
2009-09-07 01:56:49 -07:00
..
include/mach IXP4xx: Change QMgr function names to qmgr_stat_*_watermark and clean the comments. 2009-05-25 13:25:34 +02:00
avila-pci.c [ARM] Move include/asm-arm/arch-* to arch/arm/*/include/mach 2008-08-07 09:55:48 +01:00
avila-setup.c [ARM] Move include/asm-arm/arch-* to arch/arm/*/include/mach 2008-08-07 09:55:48 +01:00
common-pci.c IXP4xx: PCI ixp4xx_scan_bus() is __devinit. 2009-03-17 15:01:53 +01:00
common.c IXP42x HSS support for setting internal clock rate 2009-09-07 01:56:49 -07:00
coyote-pci.c [ARM] Move include/asm-arm/arch-* to arch/arm/*/include/mach 2008-08-07 09:55:48 +01:00
coyote-setup.c [ARM] Move include/asm-arm/arch-* to arch/arm/*/include/mach 2008-08-07 09:55:48 +01:00
dsmg600-pci.c [ARM] 5179/1: Replace obsolete IRQT_* and __IRQT_* values with IRQ_TYPE_* 2008-07-27 09:46:18 +01:00
dsmg600-setup.c i2c: Convert most new-style drivers to use module aliasing 2008-04-29 23:11:40 +02:00
fsg-pci.c [ARM] 5179/1: Replace obsolete IRQT_* and __IRQT_* values with IRQ_TYPE_* 2008-07-27 09:46:18 +01:00
fsg-setup.c net: convert print_mac to %pM 2008-10-27 17:06:18 -07:00
gateway7001-pci.c [ARM] Move include/asm-arm/arch-* to arch/arm/*/include/mach 2008-08-07 09:55:48 +01:00
gateway7001-setup.c [ARM] Move include/asm-arm/arch-* to arch/arm/*/include/mach 2008-08-07 09:55:48 +01:00
goramo_mlr.c IXP4xx: support for Goramo MultiLink router platform. 2009-05-23 23:58:30 +02:00
gtwx5715-pci.c [ARM] Move include/asm-arm/arch-* to arch/arm/*/include/mach 2008-08-07 09:55:48 +01:00
gtwx5715-setup.c [ARM] Move include/asm-arm/arch-* to arch/arm/*/include/mach 2008-08-07 09:55:48 +01:00
ixdp425-pci.c [ARM] Move include/asm-arm/arch-* to arch/arm/*/include/mach 2008-08-07 09:55:48 +01:00
ixdp425-setup.c [ARM] Convert asm/delay.h to linux/delay.h 2008-09-06 12:11:37 +01:00
ixdpg425-pci.c [ARM] Move include/asm-arm/arch-* to arch/arm/*/include/mach 2008-08-07 09:55:48 +01:00
ixp4xx_npe.c IXP42x: add NPE support for IXP425 rev. A0 processors. 2009-05-23 23:16:23 +02:00
ixp4xx_qmgr.c IXP42x: Use __fls() in QMgr interrupt handlers. 2009-05-23 23:37:04 +02:00
Kconfig IXP4xx: support for Goramo MultiLink router platform. 2009-05-23 23:58:30 +02:00
Makefile IXP4xx: support for Goramo MultiLink router platform. 2009-05-23 23:58:30 +02:00
Makefile.boot Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
nas100d-pci.c [ARM] 5179/1: Replace obsolete IRQT_* and __IRQT_* values with IRQ_TYPE_* 2008-07-27 09:46:18 +01:00
nas100d-setup.c net: convert print_mac to %pM 2008-10-27 17:06:18 -07:00
nslu2-pci.c [ARM] 5179/1: Replace obsolete IRQT_* and __IRQT_* values with IRQ_TYPE_* 2008-07-27 09:46:18 +01:00
nslu2-setup.c net: convert print_mac to %pM 2008-10-27 17:06:18 -07:00
wg302v2-pci.c [ARM] Move include/asm-arm/arch-* to arch/arm/*/include/mach 2008-08-07 09:55:48 +01:00
wg302v2-setup.c [ARM] Move include/asm-arm/arch-* to arch/arm/*/include/mach 2008-08-07 09:55:48 +01:00