static void show_dtlb_entry(unsigned int index) { u32 tlbehi, tlbehi_save, tlbelo, mmucr, mmucr_save; unsigned long flags; local_irq_save(flags); mmucr_save = sysreg_read(MMUCR); tlbehi_save = sysreg_read(TLBEHI); mmucr = SYSREG_BFINS(DRP, index, mmucr_save); sysreg_write(MMUCR, mmucr); __builtin_tlbr(); cpu_sync_pipeline(); tlbehi = sysreg_read(TLBEHI); tlbelo = sysreg_read(TLBELO); printk("%2u: %c %c %02x %05x %05x %o %o %c %c %c %c\n", index, SYSREG_BFEXT(TLBEHI_V, tlbehi) ? '1' : '0', SYSREG_BFEXT(G, tlbelo) ? '1' : '0', SYSREG_BFEXT(ASID, tlbehi), SYSREG_BFEXT(VPN, tlbehi) >> 2, SYSREG_BFEXT(PFN, tlbelo) >> 2, SYSREG_BFEXT(AP, tlbelo), SYSREG_BFEXT(SZ, tlbelo), SYSREG_BFEXT(TLBELO_C, tlbelo) ? 'C' : ' ', SYSREG_BFEXT(B, tlbelo) ? 'B' : ' ', SYSREG_BFEXT(W, tlbelo) ? 'W' : ' ', SYSREG_BFEXT(TLBELO_D, tlbelo) ? 'D' : ' '); sysreg_write(MMUCR, mmucr_save); sysreg_write(TLBEHI, tlbehi_save); cpu_sync_pipeline(); local_irq_restore(flags); }
void reset_timer(void) { sysreg_write(COUNT, 0); cpu_sync_pipeline(); /* process any pending interrupts */ timer_overflow = 0; }