RPXLite 823 PCMCIA troubles

Mark S. Mathews mark at absoval.com
Wed Dec 1 06:43:07 EST 1999


Howdy Folks,

We've been working with the embedded 2.2.13 kernel on an RPX-Lite CW with
a XPC823ZT66A processor running at the 50MHz/8MHz setting.  We have a
pcmcia wireless lan card that we're trying to get working, but our
accesses to the common memory regions of the card are twitchy.  We can run
with the card briefly, but eventually we wind up with a machine-check.

Over the past week or so we've tried just about every variation of
settings we can think of with only slightly varying results.  No matter
what we try, it always ends in a machine check.  The wireless driver code
runs well on the x86, our PowerBook, and on a different 860 based platform
(non-Linux, no MMU) so we're fairly confident it isn't the code.

I've attached an outline of our initialization procedure at the end of
this mail.  Are we missing something?

Here are some of the things we've varied:

- Address space allocations (region and size)
- Bus timings
- Adding/removing delays between accesses
- Using readb/writeb vs. direct access

Most of the time the failure occurs on a read.

One specific question...when setting up the PCMCIA bus timings, the 823
book lists the settings in units of "clock cycles".  Which clock?  We've
been assuming GCLKx or GCLKx_50 which are both 50MHz (hence 20ns cycle).

Many Thanks,
-Mark

-----------------------------------------------------------------
Here's the outline of our initialization procedure:

- Clear the pcmcia registers
	PORx = 0
	PBRx = 0
	PER = 0
	PSCR = 0
	PGCRA = 0
	PGCRB = 0

- Test PIPR for card presence, if found assume it's our card

- Turn on power
	PGCR[OE] = 1			; deassert Output Enable
	RPX_BSCR[PCVLTCTLx] = 0000	; Vcc=Vpp=GND
	(delay for settle)
	RPX_BSCR[PCVLTCTLx] = 0110	; Vcc=Vpp=5v
	(delay for settle)
	PGCR[RESET] = 1			; Assert reset pin
	(delay for 500 usec)
	PGCR[RESET] = 0			; deassert reset pin
	(delay for 500 usec)
	PGCR[OE] = 0			; assert Output Enable
	(delay for 300 usec)

- Map card Attribute memory
	PBR1 = 0xe4000000
	POR1[BSIZE] = 01000		; 32K bank size
	POR1[PSLOT] = 1			; slot B
	remap_base = ioremap(PBR1)	; returns 0xc4000000
	POR1[PRS] = 010			; Attribute mem
	POR1[PSL] = 01001		; 9 clock cycles
	POR1[PSST] = 0100		; 4 clock cycles
	POR1[PSHT] = 0010		; 2 clock cycles
	POR1[PV] = 1			; this bank is valid

- Set pcmcia config index in option register at Attrib+0x800
	remap_base[0x800] = 01000001	; index 1 and level mode interrupts
					; enables card for mem+io

- Map card IO memory
	PBR0 = 0xe0000000
	POR0[BSIZE] = 01101		; 512 bytes bank size
	POR0[PSLOT] = 1			; slot B
	remap_base = ioremap(PBR0)	; returns 0xc4009000
	POR0[PRS] = 011			; IO space
	POR0[PSL] = 01001		; 9 clock cycles
	POR0[PSST] = 0100		; 4 clock cycles
	POR0[PSHT] = 0010		; 2 clock cycles
	POR0[PV] = 1			; this bank is valid

- Map card Common memory
	PBR2 = 0xe8000000
	POR2[BSIZE] = 01000		; 32K bank size
	POR2[PSLOT] = 1			; slot B
	remap_base = ioremap(PBR2)	; returns 0xc400b000
	POR2[PRS] = 000			; Common memory space
	POR2[PSL] = 01001		; 9 clock cycles
	POR2[PSST] = 0100		; 4 clock cycles
	POR2[PSHT] = 0010		; 2 clock cycles
	POR2[PV] = 1			; this bank is valid

- Setup interrupt
	(card specific)
	clear on-card interrupt status
	disable card generated interrupts
	(8xx specific)
	PER |= BIT24			; enable RDY/IRQ#
	PSCR = 0xffffffffff		; clear any pending
	PGCR |= BIT6			; set 8xx interrupt level 

	request_8xxirq( 13, &func, 0, "am930", NULL);
					; This func sets up SIMASK and SIPEND,
					;  right?

- Driver now waits for something to do....


Mark S. Mathews

AbsoluteValue Software     Web:    http://www.absoval.com
P.O. Box 941149            e-mail: mark at absoval.com
Maitland, FL 32794-1149    Phone:  407.644.8582
USA                        Fax:    407.539.1294


** Sent via the linuxppc-embedded mail list. See http://lists.linuxppc.org/





More information about the Linuxppc-embedded mailing list