24 Apr, 2007

1 commit


14 Feb, 2007

1 commit

  • This is a clean up patch that includes the following changes:

    -Some comments were added to clarify the code based on feedback
    from the community.
    -The write_pm_cntrl() and set_count_mode() were passed a
    structure element from a global variable. The argument was
    removed so the functions now just operate on the global directly.
    -The set_pm_event() function call in the cell_virtual_cntr()
    routine was moved to a for-loop before the for_each_cpu loop

    Signed-off-by: Carl Love
    Signed-off-by: Maynard Johnson
    Signed-off-by: Arnd Bergmann

    Carl Love
     

04 Dec, 2006

3 commits

  • Add PPU event-based and cycle-based profiling support to Oprofile for Cell.

    Oprofile is expected to collect data on all CPUs simultaneously.
    However, there is one set of performance counters per node. There are
    two hardware threads or virtual CPUs on each node. Hence, OProfile must
    multiplex in time the performance counter collection on the two virtual
    CPUs.

    The multiplexing of the performance counters is done by a virtual
    counter routine. Initially, the counters are configured to collect data
    on the even CPUs in the system, one CPU per node. In order to capture
    the PC for the virtual CPU when the performance counter interrupt occurs
    (the specified number of events between samples has occurred), the even
    processors are configured to handle the performance counter interrupts
    for their node. The virtual counter routine is called via a kernel
    timer after the virtual sample time. The routine stops the counters,
    saves the current counts, loads the last counts for the other virtual
    CPU on the node, sets interrupts to be handled by the other virtual CPU
    and restarts the counters, the virtual timer routine is scheduled to run
    again. The virtual sample time is kept relatively small to make sure
    sampling occurs on both CPUs on the node with a relatively small
    granularity. Whenever the counters overflow, the performance counter
    interrupt is called to collect the PC for the CPU where data is being
    collected.

    The oprofile driver relies on a firmware RTAS call to setup the debug bus
    to route the desired signals to the performance counter hardware to be
    counted. The RTAS call must set the routing registers appropriately in
    each of the islands to pass the signals down the debug bus as well as
    routing the signals from a particular island onto the bus. There is a
    second firmware RTAS call to reset the debug bus to the non pass thru
    state when the counters are not in use.

    Signed-off-by: Carl Love
    Signed-off-by: Maynard Johnson
    Signed-off-by: Arnd Bergmann
    Signed-off-by: Paul Mackerras

    Maynard Johnson
     
  • The following routines are added to arch/powerpc/platforms/cell/pmu.c:
    cbe_clear_pm_interrupts()
    cbe_enable_pm_interrupts()
    cbe_disable_pm_interrupts()
    cbe_query_pm_interrupts()
    cbe_pm_irq()
    cbe_init_pm_irq()

    This also adds a routine in arch/powerpc/platforms/cell/interrupt.c and
    some macros in cbe_regs.h to manipulate the IIC_IR register:
    iic_set_interrupt_routing()

    Signed-off-by: Kevin Corry
    Signed-off-by: Carl Love
    Signed-off-by: Arnd Bergmann
    Signed-off-by: Paul Mackerras

    Kevin Corry
     
  • Move some PMU-related macros and function prototypes from cbe_regs.h
    and pmu.h in arch/powerpc/platforms/cell/ to a new header at
    include/asm-powerpc/cell-pmu.h

    This is cleaner to use from the oprofile code, since that sits in
    arch/powerpc/oprofile, not in the cell platform directory.

    Signed-off-by: Kevin Corry
    Signed-off-by: Arnd Bergmann
    Signed-off-by: Paul Mackerras

    Kevin Corry