82xx/83xx MCC Super Channels - GUN Error

Russell McGuire rmcguire at videopresence.com
Sat Jul 26 09:50:58 EST 2008


Attempting to polish up an existing MCC HDLC driver, adding super channels
for an 8360E, though I imagine the specifics an answer, might work for any
82xx or 83xx architecture.

I have taken my existing working MCC HDLC driver <non-superchanneled>
interfaced to a T1 in clear channel mode, and found that I was using less
than optimized MCC configuration, i.e. using the TX SiRAM entries to
transmit 8 bytes chunks. Though his works, I get GUN errors probably every
10 minutes. So after careful reading, I decided to optimize and create super
channels using the 83xx version <16 bit entries only for 83xx> for the

After the super channel conversion, I now get GUN interrupts continuously
the instant I enable the TDM's / SI. 

I have written the extra code to program up the SiRAM entries, RX side to
use super channel 6 <for compatibility with later SATM code, SC must be
divisible by 4 after subtracting 2>, and the TX side uses channels 0-11 <12
channels of 2 bytes = 192 byes of a standard T1 B8ZS-ESF Frame>, my SCT
table of course routes slots 0-11 into SC 6. I am guessing this is correct,
and more likely I probably have a setup problem with configuring all the MCC
parameters, or init sequence.

After reading much Freescale documentation and their FAQ's online, I see
there are a couple of undocumented things that may or may not need to be
done, like stopping a super channel before issues the QE_INIT_TX_RX

So my question is this:
In order to not have GUN always occurring, how does one initialize a super
channel and its related sub-channels? This what I am doing now.
1) Program SI entries
2) Program MCC global PRAM?
3) Program SuperChannel ChanPRAM
4) Program SuperChannel XtraPRAM
5) Program SuperChannel Table <SCT>
6) Set rstate and tstate once for SuperChannel i.e. channel 6
7) Call QE_INIT_TX_RX once for channel block 0 <i.e. channels 0-31>.
8) Enable TDM's
9) GUN recovery code goes nuts until I reset.

Anybody have experience with this and super channels? I have seen hints that
perhaps I need to maybe set rstate and tstate for every channel in the super
channel, what about the 'first byte' in the SiRAM TX entry? Does that need
to be set for clear channels? I have seen one email for 82xx MCC that say
the super channel needs to be QE_STOP_TX before calling the MCC INIT code,
but not sure if that is really needed, or only for 82xx CPU's. What about
using the QE_INIT_TX_RX_16? I have tried this, and it causes silence in the
driver, i.e. can't even get interrupts if I use this command.

Ideas anyone?

Russell McGuire
Senior Systems Engineer
rmcguire at videopresence.com

More information about the Linuxppc-embedded mailing list