bool
        default y
 
-config HARDWARE_PM
-       def_bool y
-       depends on OPROFILE
-
 source "init/Kconfig"
 
 source "kernel/Kconfig.preempt"
        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
 
 #############################################################################
 
 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;
        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];
 #ifdef CONFIG_HARDWARE_PM
 .Lcall_do_ovf:
 
+       R0 = SP;
        SP += -12;
        call _pm_overflow;
        SP += 12;
 
 /*
  * 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
 
 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;
 
        CSYNC();
 }
 
-extern int pm_overflow_handler(int irq, struct pt_regs *regs);
+extern int pm_overflow_handler(struct pt_regs *regs);
 
 #endif
 
 
 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 */
        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;