summaryrefslogtreecommitdiffstats
path: root/sys/powerpc/booke
diff options
context:
space:
mode:
authorian <ian@FreeBSD.org>2014-05-14 14:08:45 +0000
committerian <ian@FreeBSD.org>2014-05-14 14:08:45 +0000
commit796f2c87ad85df08fa64cd699bc66b9054363166 (patch)
tree47b4dd928c54ad5a9bb1ca1738555cad170af43d /sys/powerpc/booke
parentdeadfc3726d811669f361da8003352165638c410 (diff)
downloadFreeBSD-src-796f2c87ad85df08fa64cd699bc66b9054363166.zip
FreeBSD-src-796f2c87ad85df08fa64cd699bc66b9054363166.tar.gz
MFC r258268, r258271, r258272, r258274, r258275, r258427, r258694, r258696,
r258697, r258757 Do not assume a value for #address-cells when parsing the OF translations map. This allows the kernel to get farther with OpenBIOS on 64-bit CPUs. Actually look up #address-cells instead of assuming it is correlated with the Uninorth version number. #interrupt-cells belongs to the iparent, not the device parent. Add a sysctl to allow disabling resetting the OF syscons. For PCI<->PCI bridges, #address-cells may be 3. Make RTAS calls, which call setfault() to recover from machine checks, preserve any existing fault buffer. badaddr() is used only in the grackle PCI driver, so move its definition there. Clean up a spurious setfault() declaration as well. This [phyp_console] driver doesn't need the /options node, so don't check for it. Use the Open Firmware-based CPU frequency determination as a generic fallback if we can't measure CPU frequency. This is also useful on a variety of embedded systems using FDT.
Diffstat (limited to 'sys/powerpc/booke')
-rw-r--r--sys/powerpc/booke/trap.c60
1 files changed, 0 insertions, 60 deletions
diff --git a/sys/powerpc/booke/trap.c b/sys/powerpc/booke/trap.c
index dc84ede..476f77f 100644
--- a/sys/powerpc/booke/trap.c
+++ b/sys/powerpc/booke/trap.c
@@ -87,12 +87,6 @@ static int fix_unaligned(struct thread *td, struct trapframe *frame);
static int handle_onfault(struct trapframe *frame);
static void syscall(struct trapframe *frame);
-int setfault(faultbuf); /* defined in locore.S */
-
-/* Why are these not defined in a header? */
-int badaddr(void *, size_t);
-int badaddr_read(void *, size_t, int *);
-
struct powerpc_exception {
u_int vector;
char *name;
@@ -461,60 +455,6 @@ trap_pfault(struct trapframe *frame, int user)
return ((rv == KERN_PROTECTION_FAILURE) ? SIGBUS : SIGSEGV);
}
-int
-badaddr(void *addr, size_t size)
-{
-
- return (badaddr_read(addr, size, NULL));
-}
-
-int
-badaddr_read(void *addr, size_t size, int *rptr)
-{
- struct thread *td;
- faultbuf env;
- int x;
-
- /* Get rid of any stale machine checks that have been waiting. */
- __asm __volatile ("sync; isync");
-
- td = curthread;
-
- if (setfault(env)) {
- td->td_pcb->pcb_onfault = 0;
- __asm __volatile ("sync");
- return (1);
- }
-
- __asm __volatile ("sync");
-
- switch (size) {
- case 1:
- x = *(volatile int8_t *)addr;
- break;
- case 2:
- x = *(volatile int16_t *)addr;
- break;
- case 4:
- x = *(volatile int32_t *)addr;
- break;
- default:
- panic("badaddr: invalid size (%d)", size);
- }
-
- /* Make sure we took the machine check, if we caused one. */
- __asm __volatile ("sync; isync");
-
- td->td_pcb->pcb_onfault = 0;
- __asm __volatile ("sync"); /* To be sure. */
-
- /* Use the value to avoid reorder. */
- if (rptr)
- *rptr = x;
-
- return (0);
-}
-
/*
* For now, this only deals with the particular unaligned access case
* that gcc tends to generate. Eventually it should handle all of the
OpenPOWER on IntegriCloud