forked from Minki/linux
5dbc46506a
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> |
||
---|---|---|
.. | ||
lmc | ||
.gitignore | ||
c101.c | ||
cosa.c | ||
cosa.h | ||
cycx_drv.c | ||
cycx_main.c | ||
cycx_x25.c | ||
dlci.c | ||
dscc4.c | ||
farsync.c | ||
farsync.h | ||
hd64570.c | ||
hd64570.h | ||
hd64572.c | ||
hd64572.h | ||
hdlc_cisco.c | ||
hdlc_fr.c | ||
hdlc_ppp.c | ||
hdlc_raw_eth.c | ||
hdlc_raw.c | ||
hdlc_x25.c | ||
hdlc.c | ||
hostess_sv11.c | ||
ixp4xx_hss.c | ||
Kconfig | ||
lapbether.c | ||
Makefile | ||
n2.c | ||
pc300_drv.c | ||
pc300_tty.c | ||
pc300-falc-lh.h | ||
pc300.h | ||
pc300too.c | ||
pci200syn.c | ||
sbni.c | ||
sbni.h | ||
sdla.c | ||
sealevel.c | ||
wanxl.c | ||
wanxl.h | ||
wanxlfw.inc_shipped | ||
wanxlfw.S | ||
x25_asy.c | ||
x25_asy.h | ||
z85230.c | ||
z85230.h |