Commit 952cc5cb authored by Maciej Lipinski's avatar Maciej Lipinski

WIP

parent 589d3c1f
......@@ -29,7 +29,7 @@ extern int wrs_msg_level; /* user can set it in main() or whatever */
/* Optional: prepare all defaults. Like argv[0] to be prefixed, signals... */
extern void wrs_msg_init(int argc, char **argv, int facility);
// #define DEBUG 1
#ifdef DEBUG /* We had it, so let's keep this build-time thing */
# define WRS_MSG_DEFAULT_LEVEL LOG_DEBUG
#else
......
......@@ -288,6 +288,7 @@ static int _hal_port_state_link_up(void *vpfg, int eventMsk, int isNewState) {
*/
static int _builPortEvents(void * vpfg) {
struct hal_port_state * ps=((halPortFsmGen_t *)vpfg)->ps;
halPortFsmGen_t *pfg = vpfg;
int portEventMask=HAL_PORT_EVENT_TIMER;
if ( ps->evt_linkUp != -1 ) {
......@@ -300,6 +301,17 @@ static int _builPortEvents(void * vpfg) {
}
portEventMask |= ps->sfpPresent ?
HAL_PORT_EVENT_SFP_INSERTED : HAL_PORT_EVENT_SFP_REMOVED;
if(ps->hw_index < 2)
printf("wri%d: ML-events-port_fsm (%s: %d=%s): SfpInsert=%d, SfpRemoved=%d, LinkUp=%d, "
"LinkDown=%d, Reset=%d\n", ps->hw_index+1,
pfg->fsm_name, pfg->st->state,
pfg->st->state < 0 ? "no state" : pfg->pt[pfg->st->state].stateName,
_isHalEventSfpInserted(portEventMask) ? 1 : 0,
_isHalEventSfpRemoved(portEventMask) ? 1 : 0,
_isHalEventLinkUp(portEventMask) ? 1 : 0,
_isHalEventLinkDown(portEventMask) ? 1 : 0,
_isHalEventReset(portEventMask) ? 1 : 0
);
return portEventMask;
}
......
......@@ -127,10 +127,23 @@ static int _hal_port_rx_setup_state_start(void *vpfg, int eventMsk, int isNewSta
if ( ps->lpdc.isSupported ) {
// LPDC support
// if(isNewState)
// {
// /* This is called when port_fsm LINK_DOWN is entered.
// In case the link was up and now it gone down,
// we reset PCS so that earlyLinkDown s cleared. */
// pcs_writel(ps, MDIO_LPC_CTRL_RESET_RX |
// MDIO_LPC_CTRL_TX_ENABLE |
// MDIO_LPC_CTRL_DMTD_SOURCE_RXRECCLK,
// MDIO_LPC_CTRL);
// shw_udelay(1);
// }
printf("wri%d: in rx_fsm_(start) - ",ps->hw_index+1);
pcs_writel(ps, MDIO_LPC_CTRL_TX_ENABLE |
MDIO_LPC_CTRL_DMTD_SOURCE_RXRECCLK,
MDIO_LPC_CTRL);
shw_udelay(1);
if( _isHalRxSetupEventEarlyLinkUp(eventMsk)) {
halPortLpdcRx_t *rxSetup=ps->lpdc.rxSetup;
......@@ -158,11 +171,13 @@ static int _hal_port_rx_setup_state_reset_pcs(void *vpfg, int eventMsk, int isNe
libwr_tmo_init(&rxSetup->link_timeout, 100, 1);
printf("wri%d: in rx_fsm_(reset_pcs) - ",ps->hw_index+1);
pcs_writel(ps, MDIO_LPC_CTRL_RESET_RX |
MDIO_LPC_CTRL_TX_ENABLE |
MDIO_LPC_CTRL_DMTD_SOURCE_RXRECCLK,
MDIO_LPC_CTRL);
shw_udelay(1);
printf("wri%d: in rx_fsm_(reset_pcs) - ",ps->hw_index+1);
pcs_writel(ps, MDIO_LPC_CTRL_TX_ENABLE |
MDIO_LPC_CTRL_DMTD_SOURCE_RXRECCLK,
MDIO_LPC_CTRL);
......@@ -208,16 +223,19 @@ static int _hal_port_rx_setup_state_validate(void *vpfg, int eventMsk, int isNew
struct hal_port_state * ps=((halPortFsmGen_t *)vpfg)->ps;
updatePllState(ps);
uint32_t *value;
if (_pll_state.channels[ps->hw_index].flags & CHAN_PMEAS_READY) {
int phase = _pll_state.channels[ps->hw_index].phase_loopback;
halPortLpdcRx_t *rxSetup=ps->lpdc.rxSetup;
uint32_t value;
printf("wri%d: in rx_fsm_(validate) - ",ps->hw_index+1);
pcs_writel(ps, MDIO_LPC_CTRL_RX_ENABLE |
MDIO_LPC_CTRL_TX_ENABLE |
MDIO_LPC_CTRL_DMTD_SOURCE_RXRECCLK,
MDIO_LPC_CTRL);
printf("wri%d: in rx_fsm_(validate) - ",ps->hw_index+1);
pcs_writel(ps, BMCR_ANENABLE | BMCR_ANRESTART, MII_BMCR);
//TODO-ML: change to port name
pr_info("wri%d: RX calibration complete at phase %d "
......@@ -225,6 +243,8 @@ static int _hal_port_rx_setup_state_validate(void *vpfg, int eventMsk, int isNew
phase, rxSetup->attempts);
rts_enable_ptracker(ps->hw_index, 0);
sleep(1); // fixme: really needed?
pcs_readl(ps, MII_BMSR, &value);
printf("BMSR %x\n", value & BMSR_ANEGCOMPLETE);
_fireState(vpfg, HAL_PORT_RX_SETUP_STATE_DONE);
}
......@@ -261,6 +281,7 @@ static int _hal_port_rx_setup_state_done(void *vpfg, int eventMsk, int isNewStat
/* Build FSM events */
static int _buildEvents(void *vpfg) {
struct hal_port_state * ps=((halPortFsmGen_t *)vpfg)->ps;
halPortFsmGen_t *pfg = vpfg;
int portEventMask=HAL_PORT_RX_SETUP_EVENT_TIMER;
......@@ -279,6 +300,16 @@ static int _buildEvents(void *vpfg) {
portEventMask |= HAL_PORT_RX_SETUP_EVENT_RX_ALIGNED;
}
}
if(ps->hw_index < 2)
printf("wri%d: ML-events-rx_setup (%s: %d=%s): LinkDown=%d, LinkUp=%d, EarlyLinkUp=%d, "
"RxAligned=%d\n", ps->hw_index+1,
pfg->fsm_name, pfg->st->state,
pfg->st->state < 0 ? "no state" : pfg->pt[pfg->st->state].stateName,
_isHalRxSetupEventLinkDown(portEventMask) ? 1 : 0,
_isHalRxSetupEventLinkUp(portEventMask) ? 1 : 0,
_isHalRxSetupEventEarlyLinkUp(portEventMask) ? 1 : 0,
_isHalRxSetupEventRxAligned(portEventMask) ? 1 : 0
);
return portEventMask;
}
......
......@@ -15,7 +15,7 @@
typedef enum {
HAL_PORT_RX_SETUP_STATE_START=0,
HAL_PORT_RX_SETUP_STATE_CALIB_NO_LPDC,
// HAL_PORT_RX_SETUP_STATE_CALIB_NO_LPDC,
HAL_PORT_RX_SETUP_STATE_RESET_PCS,
HAL_PORT_RX_SETUP_STATE_WAIT_LOCK,
HAL_PORT_RX_SETUP_STATE_VALIDATE,
......
......@@ -141,6 +141,7 @@ static int _hal_port_tx_setup_state_start(void *vpfg, int eventMsk, int isNewSta
rts_enable_ptracker(ps->hw_index, 0);
printf("wri%d: in tx_fsm_(start) - ",ps->hw_index+1);
pcs_writel(ps, MDIO_LPC_CTRL_RESET_RX |
MDIO_LPC_CTRL_DMTD_SOURCE_TXOUTCLK,
MDIO_LPC_CTRL);
......@@ -160,11 +161,13 @@ static int _hal_port_tx_setup_state_reset_pcs(void *vpfg, int eventMsk, int isNe
struct hal_port_state * ps=((halPortFsmGen_t *)vpfg)->ps;
rts_enable_ptracker(ps->hw_index, 0);
printf("wri%d: in tx_fsm_(reset_pcs) - ",ps->hw_index+1);
pcs_writel(ps, MDIO_LPC_CTRL_RESET_TX |
MDIO_LPC_CTRL_RESET_RX |
MDIO_LPC_CTRL_DMTD_SOURCE_TXOUTCLK,
MDIO_LPC_CTRL);
shw_udelay(1);
printf("wri%d: in tx_fsm_(reset_pcs) - ",ps->hw_index+1);
pcs_writel(ps, MDIO_LPC_CTRL_RESET_RX |
MDIO_LPC_CTRL_DMTD_SOURCE_TXOUTCLK,
MDIO_LPC_CTRL);
......@@ -286,6 +289,7 @@ static int _hal_port_tx_setup_state_validate(void *vpfg, int eventMsk, int isNew
rts_enable_ptracker(ps->hw_index, 0);
// enable the PCS on the port
printf("wri%d: in tx_fsm_(validate) - ",ps->hw_index+1);
pcs_writel(ps, MDIO_LPC_CTRL_RESET_RX |
MDIO_LPC_CTRL_TX_ENABLE |
MDIO_LPC_CTRL_DMTD_SOURCE_RXRECCLK,
......
......@@ -283,6 +283,7 @@ int pcs_writel(struct hal_port_state *ps, uint16_t value, int reg)
strncpy(ifr.ifr_name, ps->name, sizeof(ifr.ifr_name));
printf("pcs_writel (adr=0x%x, val=0x%x)\n", reg, value);
rv = NIC_WRITE_PHY_CMD(reg, value);
ifr.ifr_data = (void *)&rv;
if (ioctl(halPorts.hal_port_fd, PRIV_IOCPHYREG, &ifr) < 0)
......@@ -308,6 +309,8 @@ int pcs_readl(struct hal_port_state * p, int reg, uint32_t *value)
__func__, reg);
return -1;
}
printf("wri%d, pcs_readl (adr=0x%x, val=0x%x)\n", p->hw_index+1,
reg, NIC_RESULT_DATA(*value));
*value=NIC_RESULT_DATA(*value);
return 0;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment