Skip to content
Snippets Groups Projects
Commit 06920861 authored by Adam Wujek's avatar Adam Wujek :speech_balloon:
Browse files

userspace/wrsw_hal: change assignment of left port's LED


From now, turn left LED on when link is up. Depending on the configured
function LED will have the following color:
--orange for port configured as non-wr
--green for slave
--yellow for master and other cases (like wrong configuration)

Signed-off-by: default avatarAdam Wujek <adam.wujek@cern.ch>
parent a374bd52
No related merge requests found
...@@ -411,13 +411,13 @@ void shw_sfp_gpio_init(void) ...@@ -411,13 +411,13 @@ void shw_sfp_gpio_init(void)
for (i = 0; i < 18; i++) { for (i = 0; i < 18; i++) {
shw_sfp_set_led_synced(i, 1); shw_sfp_set_led_synced(i, 1);
shw_udelay(7000); shw_udelay(7000);
shw_sfp_set_led_link(i, 1); shw_sfp_set_generic(i, 1, SFP_LED_WRMODE_MASTER);
shw_udelay(7000); shw_udelay(7000);
} }
for (i = 0; i < 18; i++) { for (i = 0; i < 18; i++) {
shw_sfp_set_led_synced(i, 0); shw_sfp_set_led_synced(i, 0);
shw_udelay(7000); shw_udelay(7000);
shw_sfp_set_led_link(i, 0); shw_sfp_set_generic(i, 0, SFP_LED_WRMODE_MASTER);
shw_udelay(7000); shw_udelay(7000);
} }
...@@ -457,9 +457,9 @@ void shw_sfp_gpio_set(int num, uint8_t state) ...@@ -457,9 +457,9 @@ void shw_sfp_gpio_set(int num, uint8_t state)
else else
curr &= 0xf0; curr &= 0xf0;
if (state & SFP_LED_LINK) if (state & SFP_LED_WRMODE1)
curr |= SFP_LED_LINK_MASK(top); curr |= SFP_LED_LINK_MASK(top);
if (state & SFP_LED_WRMODE) if (state & SFP_LED_WRMODE2)
curr |= SFP_LED_WRMODE_MASK(top); curr |= SFP_LED_WRMODE_MASK(top);
if (state & SFP_LED_SYNCED) if (state & SFP_LED_SYNCED)
curr |= SFP_LED_SYNCED_MASK(top); curr |= SFP_LED_SYNCED_MASK(top);
...@@ -500,9 +500,9 @@ uint8_t shw_sfp_gpio_get(int num) ...@@ -500,9 +500,9 @@ uint8_t shw_sfp_gpio_get(int num)
i2c_transfer(bus, addr, 0, 1, &curr); i2c_transfer(bus, addr, 0, 1, &curr);
if (curr & SFP_LED_LINK_MASK(top)) if (curr & SFP_LED_LINK_MASK(top))
out |= SFP_LED_LINK; out |= SFP_LED_WRMODE1;
if (curr & SFP_LED_WRMODE_MASK(top)) if (curr & SFP_LED_WRMODE_MASK(top))
out |= SFP_LED_WRMODE; out |= SFP_LED_WRMODE2;
if (curr & SFP_LED_SYNCED_MASK(top)) if (curr & SFP_LED_SYNCED_MASK(top))
out |= SFP_LED_SYNCED; out |= SFP_LED_SYNCED;
if (curr & SFP_TX_DISABLE_MASK(top)) if (curr & SFP_TX_DISABLE_MASK(top))
......
#ifndef __LIBWR_SHW_SFPLIB_H #ifndef __LIBWR_SHW_SFPLIB_H
#define __LIBWR_SHW_SFPLIB_H #define __LIBWR_SHW_SFPLIB_H
#define SFP_LED_LINK (1 << 0) /* note each led contains green and orange part */
#define SFP_LED_WRMODE (1 << 1) #define SFP_LED_WRMODE_SLAVE (1) /* green */
#define SFP_LED_WRMODE_NON_WR (2) /* orange */
#define SFP_LED_WRMODE_MASTER (3) /* yellow */
#define SFP_LED_WRMODE_OFF (3) /* to off entire WRMODE LED */
#define SFP_LED_WRMODE1 (1 << 0)
#define SFP_LED_WRMODE2 (1 << 1)
#define SFP_LED_SYNCED (1 << 2) #define SFP_LED_SYNCED (1 << 2)
#define SFP_TX_DISABLE (1 << 3) #define SFP_TX_DISABLE (1 << 3)
#define shw_sfp_set_led_link(num, status) \
shw_sfp_set_generic(num, status, SFP_LED_LINK)
#define shw_sfp_set_led_wrmode(num, status) \
shw_sfp_set_generic(num, status, SFP_LED_WRMODE)
#define shw_sfp_set_led_synced(num, status) \ #define shw_sfp_set_led_synced(num, status) \
shw_sfp_set_generic(num, status, SFP_LED_SYNCED) shw_sfp_set_generic(num, status, SFP_LED_SYNCED)
......
...@@ -327,7 +327,8 @@ static int hal_port_link_down(struct hal_port_state * p, int link_up) ...@@ -327,7 +327,8 @@ static int hal_port_link_down(struct hal_port_state * p, int link_up)
rts_set_mode(RTS_MODE_GM_FREERUNNING); rts_set_mode(RTS_MODE_GM_FREERUNNING);
} }
shw_sfp_set_led_link(p->hw_index, 0); /* turn off link/wrmode LEDs */
shw_sfp_set_generic(p->hw_index, 0, SFP_LED_WRMODE_OFF);
p->state = HAL_PORT_STATE_LINK_DOWN; p->state = HAL_PORT_STATE_LINK_DOWN;
hal_port_reset_state(p); hal_port_reset_state(p);
...@@ -380,8 +381,17 @@ static void hal_port_fsm(struct hal_port_state * p) ...@@ -380,8 +381,17 @@ static void hal_port_fsm(struct hal_port_state * p)
p->tx_cal_pending = 0; p->tx_cal_pending = 0;
p->rx_cal_pending = 0; p->rx_cal_pending = 0;
/* set link/wrmode LEDs */
shw_sfp_set_led_link(p->hw_index, 1); if (p->mode == HEXP_PORT_MODE_WR_SLAVE) {/* slave */
shw_sfp_set_generic(p->hw_index, 1,
SFP_LED_WRMODE_SLAVE);
} else if (p->mode == HEXP_PORT_MODE_NON_WR) {/* non-wr */
shw_sfp_set_generic(p->hw_index, 1,
SFP_LED_WRMODE_NON_WR);
} else { /* master or other */
shw_sfp_set_generic(p->hw_index, 1,
SFP_LED_WRMODE_MASTER);
}
pr_info("%s: link up\n", p->name); pr_info("%s: link up\n", p->name);
p->state = HAL_PORT_STATE_UP; p->state = HAL_PORT_STATE_UP;
} }
......
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