Blackfin arch: get oprofile work for user space
Signed-off-by: Graf Yang <graf.yang@analog.com> Signed-off-by: Bryan Wu <cooloney@kernel.org>
This commit is contained in:
Родитель
6f985294f7
Коммит
f994607a2e
|
@ -60,10 +60,6 @@ config GENERIC_CALIBRATE_DELAY
|
|||
bool
|
||||
default y
|
||||
|
||||
config HARDWARE_PM
|
||||
def_bool y
|
||||
depends on OPROFILE
|
||||
|
||||
source "init/Kconfig"
|
||||
|
||||
source "kernel/Kconfig.preempt"
|
||||
|
@ -1019,6 +1015,12 @@ config EBIU_FCTLVAL
|
|||
hex "Flash Memory Bank Control Register"
|
||||
depends on BF54x
|
||||
default 6
|
||||
|
||||
config HARDWARE_PM
|
||||
bool "OProfile use hardware porformance monitor"
|
||||
depends on OPROFILE
|
||||
default n
|
||||
|
||||
endmenu
|
||||
|
||||
#############################################################################
|
||||
|
|
|
@ -152,6 +152,12 @@ ENTRY(_evt_ivhw)
|
|||
1:
|
||||
#endif
|
||||
|
||||
# We are going to dump something out, so make sure we print IPEND properly
|
||||
p2.l = lo(IPEND);
|
||||
p2.h = hi(IPEND);
|
||||
r0 = [p2];
|
||||
[sp + PT_IPEND] = r0;
|
||||
|
||||
#ifdef CONFIG_HARDWARE_PM
|
||||
r7 = [sp + PT_SEQSTAT];
|
||||
r7 = r7 >>> 0xe;
|
||||
|
@ -161,11 +167,6 @@ ENTRY(_evt_ivhw)
|
|||
cc = r7 == r5;
|
||||
if cc jump .Lcall_do_ovf; /* deal with performance counter overflow */
|
||||
#endif
|
||||
# We are going to dump something out, so make sure we print IPEND properly
|
||||
p2.l = lo(IPEND);
|
||||
p2.h = hi(IPEND);
|
||||
r0 = [p2];
|
||||
[sp + PT_IPEND] = r0;
|
||||
|
||||
/* set the EXCAUSE to HWERR for trap_c */
|
||||
r0 = [sp + PT_SEQSTAT];
|
||||
|
@ -196,6 +197,7 @@ ENTRY(_evt_ivhw)
|
|||
#ifdef CONFIG_HARDWARE_PM
|
||||
.Lcall_do_ovf:
|
||||
|
||||
R0 = SP;
|
||||
SP += -12;
|
||||
call _pm_overflow;
|
||||
SP += 12;
|
||||
|
|
|
@ -139,8 +139,8 @@ asmlinkage void irq_panic(int reason, struct pt_regs *regs)
|
|||
/*
|
||||
* call the handler of Performance overflow
|
||||
*/
|
||||
asmlinkage void pm_overflow(int irq, struct pt_regs *regs)
|
||||
asmlinkage void pm_overflow(struct pt_regs *regs)
|
||||
{
|
||||
pm_overflow_handler(irq, regs);
|
||||
pm_overflow_handler(regs);
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -126,20 +126,12 @@ static int op_bfin_create_files(struct super_block *sb, struct dentry *root)
|
|||
int __init oprofile_arch_init(struct oprofile_operations *ops)
|
||||
{
|
||||
#ifdef CONFIG_HARDWARE_PM
|
||||
unsigned int dspid;
|
||||
|
||||
mutex_init(&pfmon_lock);
|
||||
|
||||
dspid = bfin_dspid();
|
||||
|
||||
printk(KERN_INFO "Oprofile got the cpu id is 0x%x. \n", dspid);
|
||||
|
||||
switch (dspid) {
|
||||
case BFIN_533_ID:
|
||||
model = &op_model_bfin533;
|
||||
model->num_counters = 2;
|
||||
break;
|
||||
case BFIN_537_ID:
|
||||
switch (bfin_read_CHIPID() & CHIPID_MANUFACTURE) {
|
||||
case 0xca:
|
||||
printk(KERN_INFO "Oprofile: cpu vendor is Analog Devices.\n");
|
||||
model = &op_model_bfin533;
|
||||
model->num_counters = 2;
|
||||
break;
|
||||
|
|
|
@ -93,6 +93,6 @@ static inline void count_write(unsigned int *count)
|
|||
CSYNC();
|
||||
}
|
||||
|
||||
extern int pm_overflow_handler(int irq, struct pt_regs *regs);
|
||||
extern int pm_overflow_handler(struct pt_regs *regs);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -52,7 +52,7 @@ static unsigned curr_pfctl, curr_count[2];
|
|||
|
||||
static int bfin533_reg_setup(struct op_counter_config *ctr)
|
||||
{
|
||||
unsigned int pfctl = ctr_read();
|
||||
unsigned int pfctl = 0;
|
||||
unsigned int count[2];
|
||||
|
||||
/* set Blackfin perf monitor regs with ctr */
|
||||
|
@ -118,7 +118,7 @@ static int get_kernel(void)
|
|||
return is_kernel;
|
||||
}
|
||||
|
||||
int pm_overflow_handler(int irq, struct pt_regs *regs)
|
||||
int pm_overflow_handler(struct pt_regs *regs)
|
||||
{
|
||||
int is_kernel;
|
||||
int i, cpu;
|
||||
|
|
Загрузка…
Ссылка в новой задаче