X-Git-Url: https://git.kernelconcepts.de/?p=karo-tx-redboot.git;a=blobdiff_plain;f=packages%2Fdevs%2Feth%2Fphy%2Fv2_0%2Fsrc%2Feth_phy.c;h=d3943987018c4a5e5f82c5245a959ad6fbe257a7;hp=040a8d8088b85010c6915a332674085286902059;hb=7a4ea0a4d67744fd3f6b5f207d857005fc707b46;hpb=f0c1bd5d9f8457be4a43912a28ca2df207a7f5a4 diff --git a/packages/devs/eth/phy/v2_0/src/eth_phy.c b/packages/devs/eth/phy/v2_0/src/eth_phy.c index 040a8d80..d3943987 100644 --- a/packages/devs/eth/phy/v2_0/src/eth_phy.c +++ b/packages/devs/eth/phy/v2_0/src/eth_phy.c @@ -52,8 +52,9 @@ //========================================================================== #include +#include +#include #include -#include #include #include @@ -86,26 +87,26 @@ phy_cmd(eth_phy_access_t *f, cyg_uint32 cmd) { cyg_uint32 retval; int i, off; - bool is_read = ((cmd & MII_Cmd) == MII_Read); + bool is_read = (cmd & MII_Cmd) == MII_Read; // Set both bits as output - (f->ops.bit_level_ops.set_dir)(1); + f->ops.bit_level_ops.set_dir(1); // Preamble for (i = 0; i < 32; i++) { - (f->ops.bit_level_ops.set_clock)(0); - (f->ops.bit_level_ops.set_data)(1); + f->ops.bit_level_ops.set_clock(0); + f->ops.bit_level_ops.set_data(1); CYGACC_CALL_IF_DELAY_US(1); - (f->ops.bit_level_ops.set_clock)(1); + f->ops.bit_level_ops.set_clock(1); CYGACC_CALL_IF_DELAY_US(1); } // Command/data for (i = 0, off = 31; i < (is_read ? 14 : 32); i++, --off) { - (f->ops.bit_level_ops.set_clock)(0); - (f->ops.bit_level_ops.set_data)((cmd >> off) & 0x00000001); + f->ops.bit_level_ops.set_clock(0); + f->ops.bit_level_ops.set_data((cmd >> off) & 0x00000001); CYGACC_CALL_IF_DELAY_US(1); - (f->ops.bit_level_ops.set_clock)(1); + f->ops.bit_level_ops.set_clock(1); CYGACC_CALL_IF_DELAY_US(1); } @@ -115,33 +116,33 @@ phy_cmd(eth_phy_access_t *f, cyg_uint32 cmd) if (is_read) { retval >>= 16; - (f->ops.bit_level_ops.set_clock)(0); - (f->ops.bit_level_ops.set_dir)(0); + f->ops.bit_level_ops.set_clock(0); + f->ops.bit_level_ops.set_dir(0); CYGACC_CALL_IF_DELAY_US(1); - (f->ops.bit_level_ops.set_clock)(1); + f->ops.bit_level_ops.set_clock(1); CYGACC_CALL_IF_DELAY_US(1); - (f->ops.bit_level_ops.set_clock)(0); + f->ops.bit_level_ops.set_clock(0); CYGACC_CALL_IF_DELAY_US(1); for (i = 0, off = 15; i < 16; i++, off--) { - (f->ops.bit_level_ops.set_clock)(1); + f->ops.bit_level_ops.set_clock(1); retval <<= 1; - retval |= (f->ops.bit_level_ops.get_data)(); + retval |= f->ops.bit_level_ops.get_data(); CYGACC_CALL_IF_DELAY_US(1); - (f->ops.bit_level_ops.set_clock)(0); + f->ops.bit_level_ops.set_clock(0); CYGACC_CALL_IF_DELAY_US(1); } } // Set both bits as output - (f->ops.bit_level_ops.set_dir)(1); + f->ops.bit_level_ops.set_dir(1); // Postamble for (i = 0; i < 32; i++) { - (f->ops.bit_level_ops.set_clock)(0); - (f->ops.bit_level_ops.set_data)(1); + f->ops.bit_level_ops.set_clock(0); + f->ops.bit_level_ops.set_data(1); CYGACC_CALL_IF_DELAY_US(1); - (f->ops.bit_level_ops.set_clock)(1); + f->ops.bit_level_ops.set_clock(1); CYGACC_CALL_IF_DELAY_US(1); } @@ -153,34 +154,33 @@ _eth_phy_init(eth_phy_access_t *f) { int addr; unsigned short state; - unsigned long id; + unsigned long id = 0; struct _eth_phy_dev_entry *dev; if (f->init_done) return true; - (f->init)(); + f->init(); // Scan to determine PHY address f->init_done = true; for (addr = 0; addr < 0x20; addr++) { if (_eth_phy_read(f, PHY_ID1, addr, &state)) { - if (state == 0xffff || state == 0x0000) { - continue; - } - id = state << 16; + id = state << 16; if (_eth_phy_read(f, PHY_ID2, addr, &state)) { id |= state; f->phy_addr = addr; for (dev = __ETH_PHY_TAB__; dev != &__ETH_PHY_TAB_END__; dev++) { if (dev->id == id) { - diag_printf("PHY: %s\n", dev->name); + eth_phy_printf("PHY: %s\n", dev->name); f->dev = dev; return true; } } - diag_printf("Unsupported PHY device - id: %08lx\n", id); - //break; // Can't handle this PHY, but look for others! } } } + if (addr >= 0x20) { + // Can't handle this PHY + eth_phy_printf("Unsupported PHY device - id: %lx\n", id); + } f->init_done = false; return false; } @@ -189,23 +189,23 @@ externC void _eth_phy_reset(eth_phy_access_t *f) { if (!f->init_done) { - diag_printf("PHY reset without init on PHY: %p\n", f); + eth_phy_printf("PHY reset without init on PHY: %p\n", f); return; } - (f->init)(); + f->init(); } externC void _eth_phy_write(eth_phy_access_t *f, int reg, int addr, unsigned short data) { if (!f->init_done) { - diag_printf("PHY write without init on PHY: %p\n", f); + eth_phy_printf("PHY write without init on PHY: %p\n", f); return; } if (f->ops_type == PHY_BIT_LEVEL_ACCESS_TYPE) { phy_cmd(f, MII_Start | MII_Write | MII_Phy(addr) | MII_Reg(reg) | MII_TA | data); } else { - (f->ops.reg_level_ops.put_reg)(reg, addr, data); + f->ops.reg_level_ops.put_reg(reg, addr, data); } } @@ -215,7 +215,7 @@ _eth_phy_read(eth_phy_access_t *f, int reg, int addr, unsigned short *val) cyg_uint32 ret; if (!f->init_done) { - diag_printf("PHY read without init on PHY: %p\n", f); + eth_phy_printf("PHY read without init on PHY: %p\n", f); return false; } if (f->ops_type == PHY_BIT_LEVEL_ACCESS_TYPE) { @@ -223,7 +223,7 @@ _eth_phy_read(eth_phy_access_t *f, int reg, int addr, unsigned short *val) *val = ret; return true; } else { - return (f->ops.reg_level_ops.get_reg)(reg, addr, val); + return f->ops.reg_level_ops.get_reg(reg, addr, val); } } @@ -236,7 +236,7 @@ _eth_phy_cfg(eth_phy_access_t *f, int mode) int i; if (!f->init_done) { - diag_printf("PHY config without init on PHY: %p\n", f); + eth_phy_printf("PHY config without init on PHY: %p\n", f); return 0; } @@ -247,12 +247,12 @@ _eth_phy_cfg(eth_phy_access_t *f, int mode) _eth_phy_write(f, PHY_BMCR, f->phy_addr, PHY_BMCR_RESET); for (i = 0; i < 5*100; i++) { phy_ok = _eth_phy_read(f, PHY_BMCR, f->phy_addr, &phy_state); - diag_printf("PHY: %04x\n", phy_state); + eth_phy_printf("PHY: %x\n", phy_state); if (phy_ok && !(phy_state & PHY_BMCR_RESET)) break; CYGACC_CALL_IF_DELAY_US(10000); // 10ms } if (!phy_ok || (phy_state & PHY_BMCR_RESET)) { - diag_printf("PPC405: Can't get PHY unit to soft reset: %04x\n", phy_state); + eth_phy_printf("PPC405: Can't get PHY unit to soft reset: %x\n", phy_state); return 0; } @@ -267,7 +267,7 @@ _eth_phy_cfg(eth_phy_access_t *f, int mode) } } if (phy_timeout <= 0) { - diag_printf("** PPC405 Warning: PHY LINK UP failed: %04x\n", phy_state); + eth_phy_printf("** PPC405 Warning: PHY LINK UP failed: %04x\n", phy_state); return 0; } @@ -280,10 +280,10 @@ _eth_phy_state(eth_phy_access_t *f) int state = 0; if (!f->init_done) { - diag_printf("PHY state without init on PHY: %p\n", f); + eth_phy_printf("PHY state without init on PHY: %p\n", f); return 0; } - if ((f->dev->stat)(f, &state)) { + if (f->dev->stat(f, &state)) { return state; } else { return 0;