Port-sparc64 archive

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

Re: Removing duplicated pyro interrupt logic



Hi,

> I am working on adding interrupts to the Fire/MICV I2C controller on the
> U45, V245 and similar.  In OFW, the controller parent is mainbus, but the
> interrupts are routed through one of the pyro leaves.  This is similar to
> ebus@mainbus interrupt routing.

> I split pyro_intr_establish() into a stub which locates the softc from the
> pdb and then pyro_intr_establish_sc() which does the work.  In pyro_softc,
> I keep a pointer to pyro_intr_establish_sc().  This means that we can find
> the correct pyro leaf and call its pyro_intr_establish_sc() directly - I
> do this in firei2c_intr_establish().

I've committed these changes, including the corresponding change to
ebus@mainbus.

Running tests before and after the interrupt changes gives me a reduction
from around 50 seconds to around 4 seconds when reading an 8K EEPROM on the
i2c bus [*] and with a large decrease in system time too, as we no longer
busy-wait for i2c commands to complete.  Note, that pcfiic0 on U25/U45 is
slower, because they have a different implementation, so the 8K read
takes about 12 seconds there.

I also recently committed interrupt changes for pcfiic, so there is a
similar improvement there, for machines with working pcfiic interrupts.

Regards,

Julian

[*] for example:

  time dd if=/dev/seeprom3 of=/dev/null bs=1 count=8192
  8192+0 records in
  8192+0 records out
  8192 bytes transferred in 4.250 secs (1927 bytes/sec)
          4.26 real         0.00 user         0.13 sys

-- 


Home | Main Index | Thread Index | Old Index