From a50fc3829ca7252b2a516e7149fd5a996d57ba06 Mon Sep 17 00:00:00 2001 From: Shaun Ruffell Date: Wed, 21 Mar 2012 16:34:06 +0000 Subject: 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 Signed-off-by: Shaun Ruffell git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/trunk@10559 a0bf4364-ded3-4de4-8d8a-66a801d63aff --- drivers/dahdi/wct4xxp/base.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/drivers/dahdi/wct4xxp/base.c b/drivers/dahdi/wct4xxp/base.c index 27fbc6a..a1018c5 100644 --- a/drivers/dahdi/wct4xxp/base.c +++ b/drivers/dahdi/wct4xxp/base.c @@ -680,11 +680,12 @@ static unsigned int __t4_framer_in(const struct t4 *wc, int unit, val = ((unit & 0x3) << 8) | (addr & 0xff) | haddr; writel(val, wc_laddr); - /* readl(wc_version); */ + readl(wc_version); writel(val | WC_LFRMR_CS | WC_LREAD, wc_laddr); readl(wc_version); ret = readb(wc_ldata); writel(val, wc_laddr); + readl(wc_version); return ret; } @@ -710,11 +711,13 @@ static void __t4_framer_out(const struct t4 *wc, int unit, const u8 addr, val = ((unit & 0x3) << 8) | (addr & 0xff) | haddr; writel(val, wc_laddr); + readl(wc_version); writel(value, wc_ldata); readl(wc_version); writel(val | WC_LFRMR_CS | WC_LWRITE, wc_laddr); - /* readl(wc_version); */ + readl(wc_version); writel(val, wc_laddr); + readl(wc_version); } static void t4_framer_out(struct t4 *wc, int unit, -- cgit v1.2.3