[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: MVME5500 status, and on to PMC interrupts




On Feb 28, 2005, at 10:00 AM, Kate Feng wrote:


If you are running from the CVS head, the PMC interrupts should work. The PMC1 IRQ number is equivalent to BSP_GPP8_IRQ_OFFSET, which is defined in irq.h. The PMC2 IRQ number is BSP_GPP_PMC2_INTA. To be documentary, in irq.h, I added :



Here's what I'm doing, based on looking at the ethernet drivers.

I'll use the pmc730 in PMC1 on the MVME5500 as an example.

I look up the pmc730 (I don't really use all constants, of course), using the functions in mvme5500 for now, which means I manually keep track of what it calls "pciNum":

pciNum=0;
BSP_PCIxFindDevice(0x16d5, 0x4457, 0, pciNum, &bus, &dev, &fun);

And I find it on pciNum == 0 and get back:
bus=0
dev=6
fun=0

Now I look up the base address and interrupt:

PCIx_read_config_dword(pciNum, bus, dev, fun, PCI0_BASE_ADDRESS_0, &addr);
PCIx_read_config_byte (pciNum, bus, dev, fun, PCI0_INTERRUPT_LINE, &intr_line);


Both are successful and I get back:
addr=0x80200000
intr_line=0x08

And sure enough, address 0x80200000 corresponds to a PMC730 register set. So far so good.

Now I want to install the interrupt (this is probably where I go wrong). I do the moral equivalent of this:

static void no_op(const rtems_irq_connect_data *irq) { return; }

static int dunno(const rtems_irq_connect_data *irq) {
 printk("pmc730 is on?  I don't know\n");
 return 0;
}

static rtems_isr pmc730_hdl(void) {
  printk("pmc730_hdl: Ouch!\n");
}

irqInfo.name = intr_line;
irqInfo.on = no_op;
irqInfo.off = no_op;
irqInfo.isOn = dunno;
irqInfo.hdl = pmc730_hdl;

BSP_install_rtems_irq_handler(&irqInfo);

I check the return code and don't get an error.

Finally I twiddle the pmc730 registers until it says it is interrupting, but nothing happens.

Peter

Peter Dufault
HD Associates, Inc.