Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
W
White Rabbit Switch - Software
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
83
Issues
83
List
Board
Labels
Milestones
Merge Requests
4
Merge Requests
4
CI / CD
CI / CD
Pipelines
Schedules
Wiki
Wiki
image/svg+xml
Discourse
Discourse
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Projects
White Rabbit Switch - Software
Commits
952cc5cb
Commit
952cc5cb
authored
Sep 02, 2019
by
Maciej Lipinski
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
WIP
parent
589d3c1f
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
53 additions
and
3 deletions
+53
-3
wrs-msg.h
userspace/libwr/include/libwr/wrs-msg.h
+1
-1
hal_port_fsm.c
userspace/wrsw_hal/hal_port_fsm.c
+12
-0
hal_port_fsm_rx.c
userspace/wrsw_hal/hal_port_fsm_rx.c
+32
-1
hal_port_fsm_rxP.h
userspace/wrsw_hal/hal_port_fsm_rxP.h
+1
-1
hal_port_fsm_tx.c
userspace/wrsw_hal/hal_port_fsm_tx.c
+4
-0
hal_ports.c
userspace/wrsw_hal/hal_ports.c
+3
-0
No files found.
userspace/libwr/include/libwr/wrs-msg.h
View file @
952cc5cb
...
...
@@ -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
...
...
userspace/wrsw_hal/hal_port_fsm.c
View file @
952cc5cb
...
...
@@ -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
;
}
...
...
userspace/wrsw_hal/hal_port_fsm_rx.c
View file @
952cc5cb
...
...
@@ -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
;
}
...
...
userspace/wrsw_hal/hal_port_fsm_rxP.h
View file @
952cc5cb
...
...
@@ -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
,
...
...
userspace/wrsw_hal/hal_port_fsm_tx.c
View file @
952cc5cb
...
...
@@ -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
,
...
...
userspace/wrsw_hal/hal_ports.c
View file @
952cc5cb
...
...
@@ -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
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment