提交 f994607a 编写于 作者: G Graf Yang 提交者: Bryan Wu

Blackfin arch: get oprofile work for user space

Signed-off-by: NGraf Yang <graf.yang@analog.com>
Signed-off-by: NBryan Wu <cooloney@kernel.org>
上级 6f985294
...@@ -60,10 +60,6 @@ config GENERIC_CALIBRATE_DELAY ...@@ -60,10 +60,6 @@ config GENERIC_CALIBRATE_DELAY
bool bool
default y default y
config HARDWARE_PM
def_bool y
depends on OPROFILE
source "init/Kconfig" source "init/Kconfig"
source "kernel/Kconfig.preempt" source "kernel/Kconfig.preempt"
...@@ -1019,6 +1015,12 @@ config EBIU_FCTLVAL ...@@ -1019,6 +1015,12 @@ config EBIU_FCTLVAL
hex "Flash Memory Bank Control Register" hex "Flash Memory Bank Control Register"
depends on BF54x depends on BF54x
default 6 default 6
config HARDWARE_PM
bool "OProfile use hardware porformance monitor"
depends on OPROFILE
default n
endmenu endmenu
############################################################################# #############################################################################
......
...@@ -152,6 +152,12 @@ ENTRY(_evt_ivhw) ...@@ -152,6 +152,12 @@ ENTRY(_evt_ivhw)
1: 1:
#endif #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 #ifdef CONFIG_HARDWARE_PM
r7 = [sp + PT_SEQSTAT]; r7 = [sp + PT_SEQSTAT];
r7 = r7 >>> 0xe; r7 = r7 >>> 0xe;
...@@ -161,11 +167,6 @@ ENTRY(_evt_ivhw) ...@@ -161,11 +167,6 @@ ENTRY(_evt_ivhw)
cc = r7 == r5; cc = r7 == r5;
if cc jump .Lcall_do_ovf; /* deal with performance counter overflow */ if cc jump .Lcall_do_ovf; /* deal with performance counter overflow */
#endif #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 */ /* set the EXCAUSE to HWERR for trap_c */
r0 = [sp + PT_SEQSTAT]; r0 = [sp + PT_SEQSTAT];
...@@ -196,6 +197,7 @@ ENTRY(_evt_ivhw) ...@@ -196,6 +197,7 @@ ENTRY(_evt_ivhw)
#ifdef CONFIG_HARDWARE_PM #ifdef CONFIG_HARDWARE_PM
.Lcall_do_ovf: .Lcall_do_ovf:
R0 = SP;
SP += -12; SP += -12;
call _pm_overflow; call _pm_overflow;
SP += 12; SP += 12;
......
...@@ -139,8 +139,8 @@ asmlinkage void irq_panic(int reason, struct pt_regs *regs) ...@@ -139,8 +139,8 @@ asmlinkage void irq_panic(int reason, struct pt_regs *regs)
/* /*
* call the handler of Performance overflow * 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 #endif
...@@ -126,20 +126,12 @@ static int op_bfin_create_files(struct super_block *sb, struct dentry *root) ...@@ -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) int __init oprofile_arch_init(struct oprofile_operations *ops)
{ {
#ifdef CONFIG_HARDWARE_PM #ifdef CONFIG_HARDWARE_PM
unsigned int dspid;
mutex_init(&pfmon_lock); mutex_init(&pfmon_lock);
dspid = bfin_dspid();
printk(KERN_INFO "Oprofile got the cpu id is 0x%x. \n", dspid);
switch (dspid) { switch (bfin_read_CHIPID() & CHIPID_MANUFACTURE) {
case BFIN_533_ID: case 0xca:
model = &op_model_bfin533; printk(KERN_INFO "Oprofile: cpu vendor is Analog Devices.\n");
model->num_counters = 2;
break;
case BFIN_537_ID:
model = &op_model_bfin533; model = &op_model_bfin533;
model->num_counters = 2; model->num_counters = 2;
break; break;
......
...@@ -93,6 +93,6 @@ static inline void count_write(unsigned int *count) ...@@ -93,6 +93,6 @@ static inline void count_write(unsigned int *count)
CSYNC(); CSYNC();
} }
extern int pm_overflow_handler(int irq, struct pt_regs *regs); extern int pm_overflow_handler(struct pt_regs *regs);
#endif #endif
...@@ -52,7 +52,7 @@ static unsigned curr_pfctl, curr_count[2]; ...@@ -52,7 +52,7 @@ static unsigned curr_pfctl, curr_count[2];
static int bfin533_reg_setup(struct op_counter_config *ctr) static int bfin533_reg_setup(struct op_counter_config *ctr)
{ {
unsigned int pfctl = ctr_read(); unsigned int pfctl = 0;
unsigned int count[2]; unsigned int count[2];
/* set Blackfin perf monitor regs with ctr */ /* set Blackfin perf monitor regs with ctr */
...@@ -118,7 +118,7 @@ static int get_kernel(void) ...@@ -118,7 +118,7 @@ static int get_kernel(void)
return is_kernel; 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 is_kernel;
int i, cpu; int i, cpu;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册