aijuboard bootloader: fix 10BASE-T / 100BASE-TX support

This commit is contained in:
aiju 2018-02-10 13:15:57 +00:00
parent f113e2d6d5
commit debb786fea

View file

@ -168,20 +168,25 @@ ethinit(ulong *r)
while((mdread(r, MDSTATUS) & LINK) == 0) while((mdread(r, MDSTATUS) & LINK) == 0)
; ;
} }
*(u32int*)(SLCR_BASE + SLCR_UNLOCK) = UNLOCK_KEY;
v = mdread(r, MDPHYCTRL); v = mdread(r, MDPHYCTRL);
if((v & 0x40) != 0){ if((v & 0x40) != 0){
puts("1000BASE-T"); puts("1000BASE-T");
while((mdread(r, MDGSTATUS) & RECVOK) != RECVOK) while((mdread(r, MDGSTATUS) & RECVOK) != RECVOK)
; ;
r[NET_CFG] |= GIGE_EN; r[NET_CFG] |= GIGE_EN;
*(u32int*)(SLCR_BASE + GEM0_CLK_CTRL) = 1 << 20 | 8 << 8 | 1;
}else if((v & 0x20) != 0){ }else if((v & 0x20) != 0){
puts("100BASE-TX"); puts("100BASE-TX");
r[NET_CFG] = NET_CFG & ~GIGE_EN | SPEED; r[NET_CFG] = r[NET_CFG] & ~GIGE_EN | SPEED;
*(u32int*)(SLCR_BASE + GEM0_CLK_CTRL) = 5 << 20 | 8 << 8 | 1;
}else if((v & 0x10) != 0){ }else if((v & 0x10) != 0){
puts("10BASE-T"); puts("10BASE-T");
r[NET_CFG] = NET_CFG & ~(GIGE_EN | SPEED); r[NET_CFG] = r[NET_CFG] & ~(GIGE_EN | SPEED);
*(u32int*)(SLCR_BASE + GEM0_CLK_CTRL) = 20 << 20 | 20 << 8 | 1;
}else }else
puts("???"); puts("???");
*(u32int*)(SLCR_BASE + SLCR_UNLOCK) = LOCK_KEY;
if((v & 0x08) != 0) if((v & 0x08) != 0)
puts(" Full Duplex\n"); puts(" Full Duplex\n");
else{ else{