2015/04/27

Qemu Interrupt Simulation

This is an example.




// creates VIC 
sysbus_create_varargs("pl190", 0x10140000, ARM_CPU_IRQ, ARM_CPU_FIQ)
  qdev_create
    pl190_init
      // input GPIO, 32 inputs, set input handler
      qdev_init_gpio_in(..,pl190_set_irq,32)
      // output GPIO, 2 outputs
      sysbus_init_irq(... &s->irq)
      sysbus_init_irq(... &s->frq)
    // connect pl190 GPIO out to CPU GPIO in
    sysbus_connect_irq(n, IRQ or FIO)

      
pl190_set_irq will be called if any input GPIO were raised. 
// PL190's interrupt handler
pl190_set_irq, 
  pl190_update
    // raise the GPIO output, which connects to CPU's GPIO input
    qemu_set_irq(s->irq, ...)
    qemu_set_irq(s->frq, ...)

// CPU's interrupt handler
arm_cpu_set_irq
  cpu_interrupt
    tcg_handle_interrupt

2015/04/06

Kernel Early Print


Before the first early prink, __create_page_tables in arch/arm/kernel/head.S will create mapping entry of IO space for UART.


 /*
  * Map in IO space for serial debugging.
  * This allows debug messages to be output
  * via a serial console before paging_init.
  */
 addruart r7, r3, r0

 mov r3, r3, lsr #SECTION_SHIFT
 mov r3, r3, lsl #PMD_ORDER

 add r0, r4, r3
 mov r3, r7, lsr #SECTION_SHIFT
 ldr r7, [r10, #PROCINFO_IO_MMUFLAGS] @ io_mmuflags
 orr r3, r7, r3, lsl #SECTION_SHIFT

Post Code on Blogger

Simplest way to post code to blogger for me: <pre style="background: #f0f0f0; border: 1px dashed #CCCCCC; color: black;overflow-x:...