The board comes up with only core 0 active. The other cores are left powered off until needed to conserve power and reduce heat generation. To start up a core, do this:
new_core ( core, func, arg );Here "core" is an integer, 1, 2, or 3 indicating which core to start up. The argument "func" is a function pointer to the code that should be run. It will be called as:
func ( int core, void *arg );
h3_spin_lock ( lock ); h3_spin_unlock ( lock );Where "lock" is an integer from 0 - 31.
gic_soft ( sgi, core );Where "sgi" is the software interrupt number (0-15) and "core" is the target core (0-3). As usual under Kyu, the receiver sets up a callback function to handle the interrupt via:
irq_hookup ( IRQ_SGI_2, handler, void *arg );Here "IRQ_SGI" is the IRQ number of the SGI (by coincidence identical to the SGI number since the first 16 IRQ are assigned to SGI).
Kyu / [email protected]