Re: PCMCIA support for 860 -- lost interrupt

2 messages, 2 authors, 2000-05-24 · open the first message on its own page

Re: PCMCIA support for 860 -- lost interrupt

From: Shuangjun Zhu <hidden>
Date: 2000-05-24 05:09:26

1. why "lost interrupt"? irq for IDE is 9, PCMCIA_INTERRUPT=13,
   so, which hardware trigger IRQ 9?
2. why vpp=0.0, where can I change it, in ide_cs.c or m8xx_pcmcia.c?

Note:

I have changed arch/ppc/kernel/ppc8xx_pic.c, so that request_irq() looks
like this:
int request_irq(unsigned int irq, void (*handler)(int, void *, struct
pt_regs *),
 unsigned long irqflags, const char * devname, void *dev_id)
{
#ifdef CONFIG_MBX
        irq += i8259_pic.irq_offset;
#endif
 return (request_8xxirq(irq, handler, irqflags, devname, dev_id));
}
but the error information like following:
-------------------------------------------------------------
<30>Feb 16 20:38:12 cardmgr[128]: executing: 'insmod
/lib/modules/2.2.13/pcmci'
hda: , ATA DISK drive
hdb: probing with STATUS(0x00) instead of ALTSTATUS(0xb0)
hdb: no response (status = 0xa1), resetting drive
hdb: no response (status = 0xa1)
ide0 at 0x108-0x10f,0x10e on irq 9
hda: , 23MB w/0kB Cache, CHS=375/8/16
Partition check:
 hda:hda: lost interrupt
hda: lost interrupt
hda: lost interrupt
hda: lost interrupt
 unknown partition table
ide_cs: hda: Vcc = 5.0, Vpp = 0.0
I<30>Feb 16 20:39:09 cardmgr[128]: executing: './ide start hda'
 hda:hda: lost interrupt
hda: lost interrupt
 unknown partition table
hda: lost interrupt
hda: drive_cmd: status=0x51 { DriveReady SeekComplete Error }
hda: drive_cmd: error=0x04 { DriveStatusError }

bash#

In arch/ppc/kernel/m8xx_setup.c:m8xx_ide_init_hwif_ports()
==============================================================
base = (unsigned long) ioremap(PCMCIA_MEM_ADDR, 0x200);

/* For the M-Systems ATA card, the first 8 registers map 1:1.
 * The following register, control/Altstatus, is located at 0x0e.
 * Following that, the irq offset, is not used, so we place it in
 * an unused location, 0x0a.
 */
*p++ = base + 8;
=================================================================
This code means that ide_ioreg_t save the value as VMA, such 0xCxxxxxxx,
but in include/asm/io.h, it defined

#define outb(val, port)  out_8((unsigned char *)((port)+_IO_BASE), (val))

it uses the port as register offset, such as 0x10.

So, code access illegal address in macro
SELECT_DRIVE in drivers/block/ide-probe.c: do_probe()


quoted
In arch/ppc/mm/init.c, I have iorempa(_IO_BASE,_IO_BASE_SIZE),
which _IO_BASE = 0x80000000,

in macro SELECT_DRIVE in drivers/block/ide-probe.c: do_probe()
OUT_BYTE((drive)->select.all, hwif->io_ports[IDE_SELECT_OFFSET])
equal to OUT_BYTE((drive)->select.all, 0x80000000),
then system illegal access, so what's wrong?

Thanks in advanced!
quoted
Hi,



I recompiled the kernel (2.2.13, including fpu, damm, bossek patches) and
restarted it.
Then I used the rc.pcmcia to set the modules up. It fails because of...

I found that system acess the illegal address 0x80000000,
in macro SELECT_DRIVE in drivers/block/ide-probe.c: do_probe()

-------------------------------------------------------------------------
-
quoted
quoted
bash# ./rc.pcmcia start
Starting PCMCIA services: modulesLinux PCMCIA Card Services 3.1.10
 kernel build: 2.2.13 #496 Fri May 19 11:14:29 CST 2000
 options:  none
m8xx_pcmcia: Version 0.03, 14-Feb-2000, Magnus Damm
m8xx_pcmcia: FADS using SLOT_B with IRQ 13.
cardmgr.
H<30>Jan  1 00:35:21 cardmgr[131]: starting, version is 3.1.10
bash# A<30>Jan  1 00:35:22 cardmgr[131]: watching 1 sockets
A<30>Jan  1 00:35:22 cardmgr[131]: initializing socket 0
I<30>Jan  1 00:35:22 cardmgr[131]: socket 0: ATA/IDE Fixed Disk
a<30>Jan  1 00:35:22 cardmgr[131]: executing: 'insmod
/lib/modules/2.2.13/pcmci'
probing for hda: present=0, media=32, probetype=ATA





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

Re: PCMCIA support for 860 -- lost interrupt

From: Dan Malek <hidden>
Date: 2000-05-24 20:59:53

Shuangjun Zhu wrote:
1. why "lost interrupt"? irq for IDE is 9, PCMCIA_INTERRUPT=13,
   so, which hardware trigger IRQ 9?
2. why vpp=0.0, where can I change it, in ide_cs.c or m8xx_pcmcia.c?

Note:

I have changed arch/ppc/kernel/ppc8xx_pic.c, so that request_irq() looks
like this:
See, this is why I changed the function name in the first place.
request_irq() assumes a PC-like interrupt structure, which doesn't work
on the MPC8xx internal interrupt controller.  You need to add an
indirect function call to the 'md' structure that will install the
IDE interrupt handler.  When you use the PCMCIA for ATA/IDE, you should
call a function that installs the PCMCIA interrupt vector.


	-- Dan

** Sent via the linuxppc-embedded mail list. See http://lists.linuxppc.org/
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help