summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDamien Zammit <damien@zamaudio.com>2015-09-17 20:05:40 +1000
committerDamien Zammit <damien@zamaudio.com>2015-09-17 20:05:40 +1000
commit70661937b81a91238c1af9da7a07716faf43df2d (patch)
tree26e39c5db9c2664b6b5554a9ddf24a7ecde7d2af
parentbce486d9c72799d19b76c30bf3e758bedcd01ee3 (diff)
Added phyln off
Signed-off-by: Damien Zammit <damien@zamaudio.com>
-rw-r--r--firmware/interrupts.c809
1 files changed, 620 insertions, 189 deletions
diff --git a/firmware/interrupts.c b/firmware/interrupts.c
index 71308d6..24664bd 100644
--- a/firmware/interrupts.c
+++ b/firmware/interrupts.c
@@ -20,51 +20,162 @@
#define OFF 0
#define ON 1
-static void halt(void)
+static void x1c300(u32 r1)
{
+ u32 reg, r3;
+
+ reg = 0x800108d8;
+ write8(reg, 1);
+ write8(reg+1, 1);
+retry:
+ r3 = read32(reg+32);
+ if (r3 >= r1)
+ goto found;
+ goto retry;
+found:
+ write8(reg, 0);
return;
}
-/*
-static void x17bdc()
+static void x18b20(void)
{
+ u32 r1, r2, r3, r4, r5, r6, r7, r8, r9;
+ u32 r10, r11, r12, r13, r14, r15, r16, ra;
-}
-*/
+ r3 = 0x1dff4;
+ r1 = read32(r3+28);
+ r2 = 0x1f850;
+ if (r1 >= 0)
+ goto skip;
+ r2 = r3;
+skip:
+ r1 = r2;
+ r12 = r1;
-static void set_phyln(int onoff)
-{
-/*
- // off
- r2 = read(0x1f39c)
- r1 = r2 & 3
- r3 = r2 & 8
+ r1 = 0x1dd94;
+ r8 = 0x1f610;
+ r11 = 0x1f438;
+ r13 = r8;
+ r2 = read8(r8);
+ r3 = read8(r11);
+ r15 = 0x1f43c;
+ r14 = 0x1f6bc;
+ r16 = r1;
+ r9 = 0;
+ if (r3 == r9)
+ goto x18bc4;
+ r4 = read32(r12+20);
+ r1 = r4 >> (u16)8;
+ r8 = r4 & 0xff;
+ r7 = r1 & 0xff;
+retry1:
+ r5 = r3 & 1;
+ r1 = r2 & 1;
+ r2 >>= 1;
+ r6 = r3 >> 1;
+ r4 = r8*r5;
+ r1 = (r1 == 0);
+ r2 = r2 & 0xff;
+ r3 = r6 & 0xff;
if (r1 == 0)
- goto x1a9a0
+ goto x18bbc;
+ r4 = r7*r5;
+x18bbc:
+ r9 = r9 + r4;
if (r3 != 0)
- goto x1a9a0
- r11 = sp+16
- r1 = r11
- call 17bdc
- r2 = read(0x1f39c)
- r1 = r11
- call 1916c
-x1a9a0:
- r1 = read(0x1f39c)
- r1 = r1 >> 2
- r1 &= 1
- r1 = (r1 == 0)
- if (r1 != 0)
- goto x1a9c8
- call 17cf0
- r1 = read(0x1f39c)
- r1 &= 0x10
+ goto retry1;
+x18bc4:
+ r8 = 0x1f614;
+ r11 = r11 + 1;
+ r7 = 2;
+x18bd4:
+ r1 = r11 + r7;
+ r2 = r8 + r7;
+ r3 = read8(r1);
+ r2 = read8(r2);
+ if (r3 == 0)
+ goto x18c28;
+ r4 = read32(r12+28);
+ r1 = r4 >> 8;
+ ra = r4 & 0xff;
+ r10 = r1 & 0xff;
+x18bf8:
+ r5 = r3 & 1;
+ r1 = r2 & 1;
+ r4 = ra * r5;
+ r1 = (r1 == 0);
+ r2 = r2 & 0xff;
+ r3 = r6 & 0xff;
+ if (r1 == 0)
+ goto x18c20;
+ r4 = r10 * r5;
+x18c20:
+ r9 = r9 + r4;
+ if (r3 != 0)
+ goto x18bf8;
+x18c28:
+ r7 = r7 + 1;
+ r1 = (r7 > 3);
+ if (r1 == 0)
+ goto x18bd4;
+ r8 = 0x1f610;
+ r7 = 0;
+x18c40:
+ r1 = r11 + r7;
+ r2 = r14 + r7;
+ r3 = read8(r1);
+ r2 = read8(r2);
+ r5 = 0;
+ if (r3 == r5)
+ goto x18cc4;
+ r10 = r8 + r7;
+x18c5c:
+ r1 = r2 & 1;
+ r6 = r3 >> 1;
+ r13 = r2 >> 1;
+ r1 = (r1 == 0);
+ r3 = r3 & 1;
+ ra = r5 + 1;
if (r1 != 0)
- goto x1a9c8
- call 1a200
-x1a9c8:
+ goto x18c84;
+ r2 = read8(r10+4);
+ r4 = read32(r12+28);
+ goto x18c8c;
+x18c84:
+ r2 = read8(r10+1);
+ r4 = read32(r12+20);
+x18c8c:
+ r2 = r2 >> r5;
+ r1 = r4 & 0xff;
+ r5 = r1 * r3;
+ r2 |= 1;
+ r2 = (r2 == 0);
+ r1 = r4 >> 8;
+ r1 = r1 & 0xff;
+ if (r2 == 0)
+ goto x18cb0;
+ r5 = r1 * r3;
+x18cb0:
+ r9 = r9 + r5;
+ r3 = r6 & 0xff;
+ r2 = r13 & 0xff;
+ r5 = ra;
+ if (r3 != 0)
+ goto x18c5c;
+x18cc4:
+ r7 = r7 + 1;
+ r1 = (r7 > 1);
+ if (r1 == 0)
+ goto x18c40;
+ r1 = r9 * 131;
+ r9 = r1 >> 11;
+ write16(r15+2, r9);
+ write16(r16+60, r9);
+ return;
+}
+static void halt(void)
+{
return;
-*/
}
static void set_ddiphy(int onoff)
@@ -360,6 +471,479 @@ end:
return;
}
+static void x17bdc(u32 r2)
+{
+ u32 r1, r3, r4, r5, r6, r7, r8, r9, r10;
+ u32 r11, r12, r13;
+
+ r5 = r2 >> 16;
+ r11 = r2 >> 24;
+ r9 = r2;
+ r12 = 0x1f6c8;
+ r2 = -r11;
+ r13 = r1;
+ r5 &= 0xff;
+ r2 = r2 + 7;
+ r7 = 8;
+ r6 = 0;
+x17c18:
+ r8 = r6 << 3;
+ r10 = 0xff;
+ r1 = r5 - r8;
+ r4 = r10 << r1;
+ r3 = r13 + r6;
+ r6++;
+ r1 = (r6 > 4);
+ if (r5 >= r7)
+ goto x17c5c;
+ write8(r3, r4);
+ write8(r3+5, r4);
+ r5 = r8 + 8;
+ if (r11 >= r7)
+ goto x17c5c;
+ r1 = r10 >> r2;
+ r1 = r4 & r1;
+ write8(r3+5, r1);
+ write8(r3, r1);
+ goto x17c68;
+
+x17c5c:
+ r7 = r7 + 8;
+ r2 = r2 + 8;
+ if (r1 == 0)
+ goto x17c18;
+
+x17c68:
+ r8 = r9 >> 1;
+ r6 = 0;
+x17c70:
+ r3 = r13 + r6;
+ r5 = r9 & 1;
+ r1 = read8(r3);
+ r7 = (r5 == 0);
+ if (r1 == 0)
+ goto x17cd0;
+ r2 = r12 + r6;
+ r4 = ~r1;
+ if (r7 != 0)
+ goto x17ca0;
+ r1 = read8(r2);
+ r1 = r4 & r1;
+ write8(r2, r1);
+ goto x17ca4;
+
+x17ca0:
+ write8(r3, r5);
+x17ca4:
+ r2 = r8 & 1;
+ r1 = (r2 == 0);
+ r4 = r12 + r6;
+ if (r1 != 0)
+ goto x17ccc;
+ r1 = read8(r3+5);
+ r2 = read8(r4+8);
+ r1 = ~r1;
+ r1 &= r2;
+ write8(r4+8, r1);
+ goto x17cd0;
+x17ccc:
+ write8(r3+5, r2);
+x17cd0:
+ r6++;
+ r1 = (r6 > 4);
+ if (r1 == 0)
+ goto x17c70;
+ return;
+}
+
+static void x1916c(u32 r1, u32 r2)
+{
+ u32 r3, r4, r5, r6, r7, r8, r9, r10;
+ u32 r11, r12, r13, r14, r15, r16, r17, r18, r19, r20;
+ u32 r21, r22, r23, r24, r25, fp;
+
+ r18 = r1;
+ r22 = 0x1f6c8;
+ r1 = 0;
+ r23 = 0x1f3c4;
+ fp = 0x1f438;
+ r21 = 0x1f710;
+ r20 = 0x1f718;
+ r24 = r2;
+ r14 = r1;
+ r16 = r22;
+ r13 = r18;
+x1920c:
+ r1 = read8(r13);
+ r17 = 0;
+ r25 = r17;
+ if (r1 != r17)
+ goto x19224;
+ r1 = read8(r13+5);
+ if (r1 == r17)
+ goto x19448;
+x19224:
+ r1 = read8(r16+56);
+ r1 = (r1 != 0xff);
+ if (r1 != 0)
+ goto x192f8;
+ r1 = read8(r16+64);
+ r1 = (r1 != 0xff);
+ if (r1 != 0)
+ goto x192f8;
+ r19 = 0x10000;
+ r15 = r14 << 2;
+ r1 = r19 | 0xd844;
+ r1 = r15 + r1;
+ r12 = read32(r1);
+ r11 = 0x1df88;
+ r1 = r12 + 11;
+ r2 = 0x80080000;
+ write32(r2+160, r1);
+ r1 = read32(r2+164);
+
+ r11 = r15 + r11;
+ write32(r11, r1);
+ r1 = r12 + 12;
+ r2 = 0x80080000;
+ write32(r2+160, r1);
+ r1 = read32(r2+164);
+
+ r2 = (r14 > 2);
+ write32(r11+20, r1);
+ if (r2 != 0)
+ goto x192ac;
+ r11 = 0x1dfb0;
+ r1 = r12 + 0x400f;
+ r2 = 0x80080000;
+ write32(r2+160, r1);
+ r1 = read32(r2+164);
+
+ r11 = r15 + r11;
+ write32(r11, r1);
+ r1 = r12 + 0x400a;
+ r2 = 0x80080000;
+ write32(r2+160, r1);
+ r1 = read32(r2+164);
+
+ r2 = 0xfffd;
+ r1 &= r2;
+ write32(r11+20, r1);
+x192ac:
+ r12 = r17;
+x192b0:
+ r1 = 0x1d844;
+ r1 = r15 + r1;
+ r1 = read32(r1);
+ r3 = r12 << 7;
+ r2 = 0x1df50;
+ r11 = r14 << 3;
+ r1 = r1 + r3;
+ r11 = r11 + r2;
+ r1 = r1 + 0x6005;
+ r2 = 0x80080000;
+ write32(r2+160, r1);
+ r1 = read32(r2+164);
+
+ r11 = r11 + r12;
+ r1 >>= 24;
+ r12 = r12 + 1;
+ r2 = (r12 > (u32)7);
+ write8(r11, r1);
+ if (r2 == 0)
+ goto x192b0;
+x192f8:
+ r1 = read8(r16);
+ r2 = read8(r16+8);
+ r5 = r21 + r14;
+ r6 = r20 + r14;
+ r1 |= r2;
+ r1 &= 0xff;
+ r7 = r24 & 1;
+ if (r1 == 0)
+ goto x19374;
+ r2 = read8(r5);
+ r3 = 1;
+ r1 = read8(r13);
+ r2 = r3 << r2;
+ r4 = read8(r13+5);
+ r2 = ~r2;
+ r2 &= r1;
+ write8(r13, r2);
+ r1 = read8(r6);
+ r1 = r3 << r1;
+ r1 = ~r1;
+ r2 &= r1;
+ write8(r13, r2);
+ r1 = read8(r5);
+ r1 = r3 << r1;
+ r1 = ~r1;
+ r1 &= r4;
+ write8(r13+5, r1);
+ r2 = read8(r6);
+ r3 <<= r2;
+ r1 &= r3;
+ goto x193d4;
+
+x19374:
+ r2 = r18 + r14; // arg?
+ r1 = 1;
+ write8(r2-20, r1);
+ r1 = read8(r5);
+ r3 = 1;
+ r2 = read8(r13);
+ r1 = r3 << r1;
+ r4 = read8(r13+5);
+ r1 |= r2;
+ write8(r13, r1);
+ r2 = read8(r6);
+ r17 = r3;
+ r25 = r3;
+ r2 = r3 << r2;
+ r1 |= r2;
+ write8(r13, r1);
+ r1 = read8(r5);
+ r1 = r3 << r1;
+ r1 |= r4;
+ write8(r13+5, r1);
+ r2 = read8(r6);
+ r3 = r3 << r2;
+ r1 |= r3;
+x193d4:
+ write8(r13+5, r1);
+ r1 = r7 | r25;
+ r1 = (r1 == 0);
+ if (r1 != 0)
+ goto x1940c;
+ r3 = read8(r13);
+ r2 = read8(r16+56);
+ r1 = r24 + r14; // arg?
+ r2 = r3 & r2;
+ r2 = r2 & 0xff;
+ r4 = 1;
+ if (r3 == r2)
+ goto x19408;
+ r4 = read8(r1);
+
+x19408:
+ write8(r1, r4);
+x1940c:
+ r1 = r24 >> 1;
+ r1 &= 1;
+ r1 |= r17;
+ r1 = (r1 == 0);
+ if (r1 == 0)
+ goto x19448;
+ r3 = read8(r13+5);
+ r2 = read8(r16+64);
+ r1 = r24 + r14; // arg?
+ r2 = r3 & r2;
+ r2 &= 0xff;
+ r4 = 1;
+ if (r3 == r2)
+ goto x19444;
+ r4 = read8(r1);
+
+x19444:
+ write8(r1, r4);
+x19448:
+ r14 += 1;
+ r1 = (r14 > 4);
+ r13 += 1;
+ r16 += 1;
+ if (r1 == 0)
+ goto x1920c;
+
+ r14 = 0;
+ r11 = r24; // arg?
+ r10 = r24; // arg?
+ r3 = r23;
+x1946c:
+ r4 = r18 + r14;
+ r5 = r22 + r14;
+ r1 = r11 + r14;
+ r1 = read8(r1);
+ r9 = (r14 > 4);
+ r7 = r4;
+ r8 = r5;
+ if (r1 == 0)
+ goto x194b8;
+ r2 = read8(r4);
+ r1 = read8(r3);
+ r1 |= r2;
+ write8(r3, r1);
+ r1 = read8(r4);
+ r2 = read8(r5+56);
+ r1 = ~r1;
+ r1 &= r2;
+ write8(r5+56, r1);
+x194b8:
+ r1 = read8(r6);
+ if (r1 == 0)
+ goto x194e4;
+ r2 = read8(r7+5);
+ r1 = read8(r3+2);
+ r1 |= r2;
+ write8(r3+2, r1);
+ r1 = read8(r7+5);
+ r2 = read8(r8+64);
+ r1 = ~r1;
+ r1 &= r2;
+ write8(r8+64, r1);
+
+x194e4:
+ r3 = r3 + 4;
+ if (r9 == 0)
+ goto x1946c;
+
+//x19564
+ r1 = 2000;
+ r14 = 0;
+ x1c300(r1);
+ r13 = r18;
+ r15 = r23;
+ r16 = r14;
+x1957c:
+ r1 = 0x1d830;
+ r12 = r22 + r14;
+ r5 = read8(r13);
+ r6 = read8(r13+5);
+ r7 = r16 + r1;
+ r3 = read8(r12);
+ r2 = read8(r12+8);
+ r1 = r17 + r14;
+ r4 = r18 + r14;
+ r1 = read8(r1);
+ r4 = read8(r4);
+ r3 &= r5;
+ r2 &= r6;
+ r3 ^= r5;
+ r2 ^= r6;
+ r2 |= r3;
+ r1 |= r4;
+ r2 &= 0xff;
+ r1 &= 0xff;
+ if (r1 == 0)
+ goto x19678;
+ r11 = read32(r7);
+ r1 = r11 | 2;
+ r3 = 0x80080000;
+ write32(r3+160, r1);
+ r1 = read32(r3+164);
+ r1 |= r2;
+ write32(r3+164, r1);
+
+ r1 = read8(r12+56);
+ if (r1 != 0)
+ goto x19600;
+ r3 = 0x80080000;
+ write32(r3+160, r1);
+ r1 = read32(r3+164);
+ r1 &= r2;
+ write32(r3+164, r1);
+
+x19600:
+ r1 = 0x1d844;
+ r5 = r16 + r1;
+ r1 = r17 + r14;
+ r1 = read8(r1);
+ r3 = r16 + r23;
+ r4 = r18 + r14;
+ if (r1 == 0)
+ goto x19630;
+ r2 = read8(r13+5);
+ r1 = read8(r3+3);
+ r1 |= r2;
+ write8(r3+3, r1);
+x19630:
+ r1 = read8(r4);
+ if (r1 == 0)
+ goto x19648;
+ r1 = read8(r15+1);
+ r2 = read8(r13);
+ r1 |= r2;
+ write8(r15+1, r1);
+x19648:
+ r1 = read32(r5);
+ r2 = read32(r15);
+ r1 |= 0x12;
+ r3 = 0x80080000;
+ write32(r3+160, r1);
+ write32(r3+164, r2);
+
+ r1 = read8(r15+3);
+ r2 = read8(r15+1);
+ r4 = fp + r14;
+ r3 = read8(r4);
+ r1 &= r2;
+ r1 = ~r1;
+ r1 &= r3;
+ write8(r4, r1);
+x19678:
+ r14++;
+ r1 = (r14 > 4);
+ r13++;
+ r16 += 4;
+ r15 += 4;
+ if (r1 == 0)
+ goto x1957c;
+ x18b20();
+
+ return;
+}
+
+static void set_phyln(int onoff)
+{
+ u32 r1, r2, r3, r4, r5, r11;
+
+ switch (onoff) {
+ default:
+ case OFF:
+ r2 = read32(0x1f39c);
+ r1 = r2 & 3;
+ r3 = r2 & 8;
+ if (r1 == 0)
+ goto x1a9a0;
+ if (r3 != 0)
+ goto x1a9a0;
+ r11 = 0;
+ r1 = r11;
+ x17bdc(r2);
+
+ r2 = read32(0x1f39c);
+ r1 = r11;
+ x1916c(r1, r2);
+x1a9a0:
+ r1 = read32(0x1f39c);
+ r1 = r1 >> 2;
+ r1 &= 1;
+ r1 = (r1 == 0);
+ if (r1 != 0)
+ goto end;
+ r2 = 0x1f6c4;
+ r3 = read8(r2+61);
+ r1 = read8(r2+62);
+ r5 = read8(r2+69);
+ r4 = read8(r2+70);
+ r1 |= r4;
+ r1 <<= 8;
+ r3 |= r5;
+ r1 |= r3;
+ write16(r2+2, r1);
+
+ r1 = read32(0x1f39c);
+ r1 &= 0x10;
+ if (r1 != 0)
+ goto end;
+ x1a200();
+ break;
+ case ON:
+ break;
+ }
+end:
+ return;
+}
+
static void x196e0(void)
{
u32 r1, r2, r3, r4;
@@ -677,150 +1261,14 @@ end:
return;
}
-static void x18b20(void)
-{
- u32 r1, r2, r3, r4, r5, r6, r7, r8, r9;
- u32 r10, r11, r12, r13, r14, r15, r16, ra;
-
- r3 = 0x1dff4;
- r1 = read32(r3+28);
- r2 = 0x1f850;
- if (r1 >= 0)
- goto skip;
- r2 = r3;
-skip:
- r1 = r2;
- r12 = r1;
-
- r1 = 0x1dd94;
- r8 = 0x1f610;
- r11 = 0x1f438;
- r13 = r8;
- r2 = read8(r8);
- r3 = read8(r11);
- r15 = 0x1f43c;
- r14 = 0x1f6bc;
- r16 = r1;
- r9 = 0;
- if (r3 == r9)
- goto x18bc4;
- r4 = read32(r12+20);
- r1 = r4 >> (u16)8;
- r8 = r4 & 0xff;
- r7 = r1 & 0xff;
-retry1:
- r5 = r3 & 1;
- r1 = r2 & 1;
- r2 >>= 1;
- r6 = r3 >> 1;
- r4 = r8*r5;
- r1 = (r1 == 0);
- r2 = r2 & 0xff;
- r3 = r6 & 0xff;
- if (r1 == 0)
- goto x18bbc;
- r4 = r7*r5;
-x18bbc:
- r9 = r9 + r4;
- if (r3 != 0)
- goto retry1;
-x18bc4:
- r8 = 0x1f614;
- r11 = r11 + 1;
- r7 = 2;
-x18bd4:
- r1 = r11 + r7;
- r2 = r8 + r7;
- r3 = read8(r1);
- r2 = read8(r2);
- if (r3 == 0)
- goto x18c28;
- r4 = read32(r12+28);
- r1 = r4 >> 8;
- ra = r4 & 0xff;
- r10 = r1 & 0xff;
-x18bf8:
- r5 = r3 & 1;
- r1 = r2 & 1;
- r4 = ra * r5;
- r1 = (r1 == 0);
- r2 = r2 & 0xff;
- r3 = r6 & 0xff;
- if (r1 == 0)
- goto x18c20;
- r4 = r10 * r5;
-x18c20:
- r9 = r9 + r4;
- if (r3 != 0)
- goto x18bf8;
-x18c28:
- r7 = r7 + 1;
- r1 = (r7 > 3);
- if (r1 == 0)
- goto x18bd4;
- r8 = 0x1f610;
- r7 = 0;
-x18c40:
- r1 = r11 + r7;
- r2 = r14 + r7;
- r3 = read8(r1);
- r2 = read8(r2);
- r5 = 0;
- if (r3 == r5)
- goto x18cc4;
- r10 = r8 + r7;
-x18c5c:
- r1 = r2 & 1;
- r6 = r3 >> 1;
- r13 = r2 >> 1;
- r1 = (r1 == 0);
- r3 = r3 & 1;
- ra = r5 + 1;
- if (r1 != 0)
- goto x18c84;
- r2 = read8(r10+4);
- r4 = read32(r12+28);
- goto x18c8c;
-x18c84:
- r2 = read8(r10+1);
- r4 = read32(r12+20);
-x18c8c:
- r2 = r2 >> r5;
- r1 = r4 & 0xff;
- r5 = r1 * r3;
- r2 |= 1;
- r2 = (r2 == 0);
- r1 = r4 >> 8;
- r1 = r1 & 0xff;
- if (r2 == 0)
- goto x18cb0;
- r5 = r1 * r3;
-x18cb0:
- r9 = r9 + r5;
- r3 = r6 & 0xff;
- r2 = r13 & 0xff;
- r5 = ra;
- if (r3 != 0)
- goto x18c5c;
-x18cc4:
- r7 = r7 + 1;
- r1 = (r7 > 1);
- if (r1 == 0)
- goto x18c40;
- r1 = r9 * 131;
- r9 = r1 >> 11;
- write16(r15+2, r9);
- write16(r16+60, r9);
- return;
-}
static void set_x16off(void)
{
if ((read32(0x1f39c) & 0x10) != 0)
- goto skip;
+ goto end;
x1a200();
x18b20();
-skip:
+end:
return;
}
@@ -982,23 +1430,6 @@ static void reconfigure()
{
}
-static void x1c300(u32 r1)
-{
- u32 reg, r3;
-
- reg = 0x800108d8;
- write8(reg, 1);
- write8(reg+1, 1);
-retry:
- r3 = read32(reg+32);
- if (r3 >= r1)
- goto found;
- goto retry;
-found:
- write8(reg, 0);
- return;
-}
-
static void pciepllswitch()
{
u32 r1, reg;