mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-30 10:49:28 +00:00
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:
parent
6f985294f7
commit
f994607a2e
6 changed files with 21 additions and 25 deletions
|
@ -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
|
||||||
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)
|
||||||
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)
|
||||||
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)
|
||||||
#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)
|
||||||
/*
|
/*
|
||||||
* 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)
|
||||||
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 (bfin_read_CHIPID() & CHIPID_MANUFACTURE) {
|
||||||
|
case 0xca:
|
||||||
switch (dspid) {
|
printk(KERN_INFO "Oprofile: cpu vendor is Analog Devices.\n");
|
||||||
case BFIN_533_ID:
|
|
||||||
model = &op_model_bfin533;
|
|
||||||
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)
|
||||||
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];
|
||||||
|
|
||||||
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)
|
||||||
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;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue