]> git.lizzy.rs Git - plan9front.git/blobdiff - sys/src/9/omap/trap.c
usbohci: use 64-bit io base address, disable interrupts before reset, remove resetlck
[plan9front.git] / sys / src / 9 / omap / trap.c
index 7fab7c778570f614c37ec1734cec7580ddcc1aa9..6c8021f02bfd0717f0112a3476c724df53559e73 100644 (file)
@@ -333,7 +333,7 @@ faultarm(Ureg *ureg, uintptr va, int user, int read)
        }
        insyscall = up->insyscall;
        up->insyscall = 1;
-       n = fault(va, read);
+       n = fault(va, ureg->pc, read);
        if(n < 0){
                if(!user){
                        dumpregs(ureg);
@@ -390,7 +390,7 @@ irq(Ureg* ureg)
                switch (irqno) {
                case 56:
                case 57:
-                       iprint(" (I²C)");
+                       iprint(" (Iâ\81²C)");
                        break;
                case 83:
                case 86:
@@ -465,12 +465,7 @@ trap(Ureg *ureg)
                        rem, up, ureg, ureg->pc);
        }
 
-       user = (ureg->psr & PsrMask) == PsrMusr;
-       if(user){
-               up->dbgreg = ureg;
-               cycles(&up->kentry);
-       }
-
+       user = kenter(ureg);
        /*
         * All interrupts/exceptions should be resumed at ureg->pc-4,
         * except for Data Abort which resumes at ureg->pc-8.
@@ -589,16 +584,22 @@ trap(Ureg *ureg)
                break;
        case PsrMund:                   /* undefined instruction */
                if(user){
-                       /* look for floating point instructions to interpret */
-                       x = spllo();
-                       rv = fpiarm(ureg);
-                       splx(x);
-                       if(rv == 0){
-                               ldrexvalid = 0;
-                               snprint(buf, sizeof buf,
-                                       "undefined instruction: pc %#lux\n",
-                                       ureg->pc);
+                       if(seg(up, ureg->pc, 0) != nil &&
+                          *(u32int*)ureg->pc == 0xD1200070){
+                               snprint(buf, sizeof buf, "sys: breakpoint");
                                postnote(up, 1, buf, NDebug);
+                       }else{
+                               /* look for floating point instructions to interpret */
+                               x = spllo();
+                               rv = fpiarm(ureg);
+                               splx(x);
+                               if(rv == 0){
+                                       ldrexvalid = 0;
+                                       snprint(buf, sizeof buf,
+                                               "undefined instruction: pc %#lux\n",
+                                               ureg->pc);
+                                       postnote(up, 1, buf, NDebug);
+                               }
                        }
                }else{
                        if (ureg->pc & 3) {
@@ -638,7 +639,7 @@ callwithureg(void (*fn)(Ureg*))
        Ureg ureg;
 
        ureg.pc = getcallerpc(&fn);
-       ureg.sp = PTR2UINT(&fn);
+       ureg.sp = (uintptr)&fn;
        fn(&ureg);
 }