/trunk/kernel/arch/sparc64/include/mm/tlb.h |
---|
429,6 → 429,8 |
extern void dtlb_insert_mapping(uintptr_t page, uintptr_t frame, int pagesize, bool locked, bool cacheable); |
extern void dump_sfsr_and_sfar(void); |
#endif /* !def __ASM__ */ |
#endif |
/trunk/kernel/arch/sparc64/src/trap/exception.c |
---|
34,6 → 34,7 |
*/ |
#include <arch/trap/exception.h> |
#include <arch/mm/tlb.h> |
#include <arch/interrupt.h> |
#include <interrupt.h> |
#include <arch/asm.h> |
156,6 → 157,7 |
{ |
fault_if_from_uspace(istate, "%s\n", __FUNCTION__); |
dump_istate(istate); |
dump_sfsr_and_sfar(); |
panic("%s\n", __FUNCTION__); |
} |
/trunk/kernel/arch/sparc64/src/mm/tlb.c |
---|
74,6 → 74,12 |
* Invalidate all non-locked DTLB and ITLB entries. |
*/ |
tlb_invalidate_all(); |
/* |
* Clear both SFSRs. |
*/ |
dtlb_sfsr_write(0); |
itlb_sfsr_write(0); |
} |
/** Insert privileged mapping into DMMU TLB. |
353,6 → 359,21 |
panic("%s\n", str); |
} |
void dump_sfsr_and_sfar(void) |
{ |
tlb_sfsr_reg_t sfsr; |
uintptr_t sfar; |
sfsr.value = dtlb_sfsr_read(); |
sfar = dtlb_sfar_read(); |
printf("DTLB SFSR: asi=%#x, ft=%#x, e=%d, ct=%d, pr=%d, w=%d, ow=%d, fv=%d\n", |
sfsr.asi, sfsr.ft, sfsr.e, sfsr.ct, sfsr.pr, sfsr.w, sfsr.ow, sfsr.fv); |
printf("DTLB SFAR: address=%p\n", sfar); |
dtlb_sfsr_write(0); |
} |
/** Invalidate all unlocked ITLB and DTLB entries. */ |
void tlb_invalidate_all(void) |
{ |
/trunk/kernel/arch/sparc64/src/drivers/fhc.c |
---|
40,12 → 40,12 |
*/ |
#include <arch/drivers/fhc.h> |
#include <arch/trap/interrupt.h> |
#include <arch/mm/page.h> |
#include <mm/slab.h> |
#include <arch/types.h> |
#include <typedefs.h> |
#include <genarch/ofw/ofw_tree.h> |
#include <genarch/kbd/z8530.h> |
fhc_t *central_fhc = NULL; |
94,8 → 94,7 |
{ |
switch (inr) { |
case FHC_UART_INR: |
fhc->uart_imap[FHC_UART_ICLR] = 0x0; |
fhc->uart_imap[FHC_UART_IMAP] = 0x80000000; |
fhc->uart_imap[FHC_UART_IMAP] |= IMAP_V_MASK; |
break; |
default: |
panic("Unexpected INR (%d)\n", inr); |
/trunk/kernel/arch/sparc64/src/drivers/pci.c |
---|
97,7 → 97,6 |
void pci_sabre_enable_interrupt(pci_t *pci, int inr) |
{ |
pci->reg[PCI_SABRE_ICLR_BASE + (inr & INO_MASK)] = 0; |
pci->reg[PCI_SABRE_IMAP_BASE + (inr & INO_MASK)] |= IMAP_V_MASK; |
} |