diff options
author | Damien Zammit <damien@zamaudio.com> | 2015-09-17 20:05:40 +1000 |
---|---|---|
committer | Damien Zammit <damien@zamaudio.com> | 2015-09-17 20:05:40 +1000 |
commit | 70661937b81a91238c1af9da7a07716faf43df2d (patch) | |
tree | 26e39c5db9c2664b6b5554a9ddf24a7ecde7d2af | |
parent | bce486d9c72799d19b76c30bf3e758bedcd01ee3 (diff) |
Added phyln off
Signed-off-by: Damien Zammit <damien@zamaudio.com>
-rw-r--r-- | firmware/interrupts.c | 809 |
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; |