wct4xxp: __t4_frame_in and __t4_framer_out slowdowns.
This is a partial revert of r10234 "wct4xxp: __t4_framer_in and __t4_framer_out speedups." There were some platform + firmware version combinations that would fail to properly configure the framer with the aforementioned speedups. The originally reported sympton was that interrupts would fail to start and while troubleshooting I also saw cases where one of the spans would stay in alarm after starting. By adding in additional reads to the version register, the overall process of writing / reading from the framer control registers is slowed down which increases reliability. This change does *not* affect the main path of TDM data which is DMAed directly into buffers in host memory and are not read / written to / from framer registers directly. Reported-and-Tested-by: Vahan Yerkanian <vahan@arminco.com> Signed-off-by: Shaun Ruffell <sruffell@digium.com> Origin: http://svnview.digium.com/svn/dahdi?view=rev&rev=10559 git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/branches/2.6@10565 a0bf4364-ded3-4de4-8d8a-66a801d63aff
This commit is contained in:
parent
6009f56f8b
commit
a2bfd1d4c2
@ -670,11 +670,12 @@ static unsigned int __t4_framer_in(const struct t4 *wc, int unit,
|
|||||||
|
|
||||||
val = ((unit & 0x3) << 8) | (addr & 0xff) | haddr;
|
val = ((unit & 0x3) << 8) | (addr & 0xff) | haddr;
|
||||||
writel(val, wc_laddr);
|
writel(val, wc_laddr);
|
||||||
/* readl(wc_version); */
|
readl(wc_version);
|
||||||
writel(val | WC_LFRMR_CS | WC_LREAD, wc_laddr);
|
writel(val | WC_LFRMR_CS | WC_LREAD, wc_laddr);
|
||||||
readl(wc_version);
|
readl(wc_version);
|
||||||
ret = readb(wc_ldata);
|
ret = readb(wc_ldata);
|
||||||
writel(val, wc_laddr);
|
writel(val, wc_laddr);
|
||||||
|
readl(wc_version);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -700,11 +701,13 @@ static void __t4_framer_out(const struct t4 *wc, int unit, const u8 addr,
|
|||||||
|
|
||||||
val = ((unit & 0x3) << 8) | (addr & 0xff) | haddr;
|
val = ((unit & 0x3) << 8) | (addr & 0xff) | haddr;
|
||||||
writel(val, wc_laddr);
|
writel(val, wc_laddr);
|
||||||
|
readl(wc_version);
|
||||||
writel(value, wc_ldata);
|
writel(value, wc_ldata);
|
||||||
readl(wc_version);
|
readl(wc_version);
|
||||||
writel(val | WC_LFRMR_CS | WC_LWRITE, wc_laddr);
|
writel(val | WC_LFRMR_CS | WC_LWRITE, wc_laddr);
|
||||||
/* readl(wc_version); */
|
readl(wc_version);
|
||||||
writel(val, wc_laddr);
|
writel(val, wc_laddr);
|
||||||
|
readl(wc_version);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void t4_framer_out(struct t4 *wc, int unit,
|
static void t4_framer_out(struct t4 *wc, int unit,
|
||||||
|
Loading…
Reference in New Issue
Block a user