mirror of
https://github.com/logicog/RTLPlayground.git
synced 2026-08-30 14:52:51 +08:00
Adds an optional per-board mac_flash_offset. When non-zero, RTLPlayground reads a 6-byte MAC from that flash address and uses it if it is a valid globally-administered unicast address; otherwise it falls back to the generated locally-administered MAC. Offset 0 (default for every board) preserves current behaviour. Enable it for the SWTGW218AS, whose stock firmware keeps the factory MAC in nvcfg at 0x1FC000. RTLPlayground images and web upgrades only touch flash below that region, so the factory MAC survives flashing.
1140 lines
37 KiB
C
1140 lines
37 KiB
C
#include "machine.h"
|
|
#include "rtl837x_pins.h"
|
|
#include "rtl837x_leds.h"
|
|
#include "rtl837x_sfr.h"
|
|
#include "rtl837x_regs.h"
|
|
#include "rtl837x_common.h"
|
|
|
|
#ifdef MACHINE_KP_9000_6XHML_X2
|
|
__code const struct machine machine = {
|
|
.machine_name = "keepLink KP-9000-6XHML-X2",
|
|
.isRTL8373 = 0,
|
|
.min_port = 3,
|
|
.max_port = 8,
|
|
.n_sfp = 2,
|
|
.log_to_phys_port = {0, 0, 0, 5, 1, 2, 3, 4, 6},
|
|
.phys_to_log_port = {4, 5, 6, 7, 3, 8, 0, 0, 0},
|
|
.is_sfp = {0, 0, 0, 1, 0, 0, 0, 0, 2},
|
|
// Left SFP port (5)
|
|
.sfp_port[0].pin_detect = GPIO50_I2C_SCL2_UART1_TX,
|
|
.sfp_port[0].pin_los = GPIO10_LED10,
|
|
.sfp_port[0].pin_tx_disable = GPIO_NA,
|
|
.sfp_port[0].sds = 0,
|
|
.sfp_port[0].i2c = { .sda = GPIO41_I2C_SDA3_MDIO1, .scl = GPIO40_I2C_SCL3_MDC1 },
|
|
// Right SFP port (6)
|
|
.sfp_port[1].pin_detect = GPIO30_ACL_BIT3_EN,
|
|
.sfp_port[1].pin_los = GPIO37,
|
|
.sfp_port[1].pin_tx_disable = GPIO_NA,
|
|
.sfp_port[1].sds = 1,
|
|
.sfp_port[1].i2c = { .sda = GPIO39_I2C_SDA4, .scl = GPIO40_I2C_SCL3_MDC1 },
|
|
.reset_pin = GPIO54_ACL_BIT2_EN,
|
|
.high_leds = { .mux = LED_27 | LED_29, .enable = LED_28_SYS | LED_29 },
|
|
.port_led_set = { 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
|
/* Conditions for LED on:
|
|
* dual led orange: ledset_0 & ledset_2
|
|
* dual led green: ledset_2 & !ledset_0
|
|
* single right led green: ledset_0 & !ledset_1
|
|
*/
|
|
.led_sets = { { LEDS_2G5 | LEDS_1G | LEDS_100M | LEDS_10M | LEDS_LINK | LEDS_ACT | LEDS_10G,
|
|
LEDS_2G5 | LEDS_LINK | LEDS_10G,
|
|
LEDS_1G | LEDS_LINK,
|
|
0 },
|
|
},
|
|
};
|
|
|
|
void machine_custom_init(void) { }
|
|
|
|
#elif defined MACHINE_KP_9000_6XH_X
|
|
__code const struct machine machine = {
|
|
.machine_name = "keepLink KP-9000-6XH-X",
|
|
.isRTL8373 = 0,
|
|
.min_port = 3,
|
|
.max_port = 8,
|
|
.n_sfp = 1,
|
|
.log_to_phys_port = {0, 0, 0, 5, 1, 2, 3, 4, 6},
|
|
.phys_to_log_port = {4, 5, 6, 7, 3, 8, 0, 0, 0},
|
|
.is_sfp = {0, 0, 0, 0, 0, 0, 0, 0, 1},
|
|
.sfp_port[0].pin_detect = GPIO30_ACL_BIT3_EN,
|
|
.sfp_port[0].pin_los = GPIO37,
|
|
.sfp_port[0].pin_tx_disable = GPIO_NA,
|
|
.sfp_port[0].sds = 1,
|
|
.sfp_port[0].i2c = { .sda = GPIO39_I2C_SDA4, .scl = GPIO40_I2C_SCL3_MDC1 },
|
|
.reset_pin = GPIO_NA,
|
|
/* Conditions for LED on:
|
|
* dual led orange: ledset_0 & ledset_2
|
|
* dual led green: ledset_2 & !ledset_0
|
|
* single right led green: ledset_0 & !ledset_1
|
|
*/
|
|
.led_sets = { { LEDS_2G5 | LEDS_1G | LEDS_100M | LEDS_10M | LEDS_LINK | LEDS_ACT | LEDS_10G,
|
|
LEDS_2G5 | LEDS_LINK | LEDS_10G,
|
|
LEDS_1G | LEDS_LINK,
|
|
0 },
|
|
},
|
|
};
|
|
|
|
void machine_custom_init(void) { }
|
|
|
|
#elif defined MACHINE_KP_9000_6XH_X2
|
|
__code const struct machine machine = {
|
|
.machine_name = "keepLink KP-9000-6XH-X2",
|
|
.isRTL8373 = 0,
|
|
.min_port = 3,
|
|
.max_port = 8,
|
|
.n_sfp = 2,
|
|
.log_to_phys_port = {0, 0, 0, 6, 1, 2, 3, 4, 5},
|
|
.phys_to_log_port = {4, 5, 6, 7, 8, 3, 0, 0, 0},
|
|
.is_sfp = {0, 0, 0, 2, 0, 0, 0, 0, 1},
|
|
|
|
// Left SFP port
|
|
.sfp_port[0].pin_detect = GPIO38,
|
|
.sfp_port[0].pin_los = GPIO_NA,
|
|
.sfp_port[0].sds = 1,
|
|
.sfp_port[0].i2c = { .sda = GPIO39_I2C_SDA4, .scl = GPIO40_I2C_SCL3_MDC1 },
|
|
|
|
// Right SFP port
|
|
.sfp_port[1].pin_detect = GPIO37,
|
|
.sfp_port[1].pin_los = GPIO_NA,
|
|
.sfp_port[1].sds = 0,
|
|
.sfp_port[1].i2c = { .sda = GPIO41_I2C_SDA3_MDIO1, .scl = GPIO40_I2C_SCL3_MDC1 },
|
|
|
|
.reset_pin = GPIO48_I2C_SCL1, // Button-Switch is unpopulated on PCB, but can be added manually (hole in case is already there)
|
|
.high_leds = { .mux = LED_28_SYS | LED_29, .enable = LED_27 | LED_28_SYS | LED_29 },
|
|
.port_led_set = { 0, 0, 0, 1, 0, 0, 0, 0, 1},
|
|
.led_sets = {
|
|
{
|
|
LEDS_2G5 | LEDS_LINK, // Left LED (Amber)
|
|
LEDS_2G5 | LEDS_1G | LEDS_100M | LEDS_10M | LEDS_LINK | LEDS_ACT, // Right LED (Green)
|
|
0,
|
|
0
|
|
},
|
|
{
|
|
LEDS_10G | LEDS_2G5 | LEDS_1G | LEDS_100M | LEDS_10M | LEDS_LINK | LEDS_ACT,
|
|
0,
|
|
0,
|
|
0
|
|
},
|
|
},
|
|
.led_mux_custom = 1,
|
|
.led_mux = {
|
|
0x00,0x01,0x04,0x05,0x08,0x09,0x0c,0x3f,0x0d,0x10,
|
|
0x11,0x0e,0x14,0x11,0x12,0x15,0x15,0x16,0x18,0x19,
|
|
0x1a,0x19,0x1d,0x1e,0x1c,0x1d,0x20,0x21
|
|
},
|
|
};
|
|
|
|
void machine_custom_init(void) {
|
|
reg_bit_set(RTL837X_REG_LED_GLB_IO_EN, 6);
|
|
}
|
|
|
|
#elif defined MACHINE_KP_9000_9XH_X_EU
|
|
__code const struct machine machine = {
|
|
.machine_name = "keepLink KP-9000-9XH-X-EU",
|
|
.isRTL8373 = 1,
|
|
.min_port = 0,
|
|
.max_port = 8,
|
|
.n_sfp = 1,
|
|
.log_to_phys_port = {1, 2, 3, 4, 5, 6, 7, 8, 9},
|
|
.phys_to_log_port = {0, 1, 2, 3, 4, 5, 6, 7, 8},
|
|
.is_sfp = {0, 0, 0, 0, 0, 0, 0, 0, 1},
|
|
.sfp_port[0].pin_detect = GPIO30_ACL_BIT3_EN,
|
|
.sfp_port[0].pin_los = GPIO37,
|
|
.sfp_port[0].pin_tx_disable = GPIO_NA,
|
|
.sfp_port[0].sds = 1,
|
|
.sfp_port[0].i2c = { .sda = GPIO39_I2C_SDA4, .scl = GPIO40_I2C_SCL3_MDC1 },
|
|
.reset_pin = GPIO_NA,
|
|
.high_leds = { .mux = LED_27 | LED_29, .enable = LED_28_SYS | LED_29 },
|
|
.port_led_set = { 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
|
.led_sets = { { LEDS_2G5 | LEDS_TWO_PAIR_1G | LEDS_1G | LEDS_500M | LEDS_100M | LEDS_10M | LEDS_LINK | LEDS_ACT | LEDS_10G | LEDS_TWO_PAIR_5G | LEDS_5G | LEDS_TWO_PAIR_2G5,
|
|
LEDS_2G5 | LEDS_LINK,
|
|
LEDS_1G | LEDS_LINK,
|
|
LEDS_2G5 | LEDS_LINK | LEDS_ACT },
|
|
},
|
|
};
|
|
|
|
void machine_custom_init(void) { }
|
|
|
|
#elif defined MACHINE_KP_9000_9XHML_X_V2_2
|
|
__code const struct machine machine = {
|
|
.machine_name = "keepLink KP-9000-9XHML-X V2.2",
|
|
.isRTL8373 = 1,
|
|
.min_port = 0,
|
|
.max_port = 8,
|
|
.n_sfp = 1,
|
|
.log_to_phys_port = { 1, 2, 3, 4, 5, 6, 7, 8, 9 },
|
|
.phys_to_log_port = { 0, 1, 2, 3, 4, 5, 6, 7, 8 },
|
|
.is_sfp = { 0, 0, 0, 0, 0, 0, 0, 0, 1 },
|
|
.sfp_port[0].pin_detect = GPIO30_ACL_BIT3_EN,
|
|
.sfp_port[0].pin_los = GPIO37,
|
|
.sfp_port[0].pin_tx_disable = GPIO_NA,
|
|
.sfp_port[0].sds = 1,
|
|
.sfp_port[0].i2c = { .sda = GPIO39_I2C_SDA4, .scl = GPIO40_I2C_SCL3_MDC1 },
|
|
.reset_pin = GPIO54_ACL_BIT2_EN,
|
|
.high_leds = { .mux = LED_27 | LED_29, .enable = LED_28_SYS | LED_29 },
|
|
.port_led_set = { 0, 0, 0, 0, 0, 0, 0, 0, 1 },
|
|
.led_sets = {
|
|
{ /* Set 0 for RJ45 connectors */
|
|
/* LED0: Right Green */
|
|
LEDS_2G5 | LEDS_1G | LEDS_100M | LEDS_10M | LEDS_LINK | LEDS_ACT,
|
|
/* LED1: Left Orange */
|
|
LEDS_2G5 | LEDS_LINK,
|
|
/* LED2: Left Green */
|
|
LEDS_1G | LEDS_LINK,
|
|
/* LED3: None */
|
|
0,
|
|
}, { /* Set 1 for SFP port */
|
|
/* LED0: Single Green "9" LED */
|
|
LEDS_2G5 | LEDS_TWO_PAIR_1G | LEDS_1G | LEDS_500M | LEDS_100M | LEDS_10M | LEDS_LINK | LEDS_ACT | LEDS_10G | LEDS_TWO_PAIR_5G | LEDS_5G | LEDS_TWO_PAIR_2G5,
|
|
/* LED1: D23 LED on PCB */
|
|
LEDS_1G | LEDS_LINK,
|
|
/* LED2: D22 LED on PCB */
|
|
LEDS_2G5 | LEDS_LINK,
|
|
/* LED3: Unused */
|
|
LEDS_COL | LEDS_DUPLEX,
|
|
}, { /* Set 2: Unused, but set to same things as stock firmware for consistency */
|
|
LEDS_100M | LEDS_10M | LEDS_LINK | LEDS_ACT,
|
|
LEDS_1G | LEDS_LINK | LEDS_ACT,
|
|
LEDS_2G5 | LEDS_LINK | LEDS_ACT | LEDS_5G,
|
|
LEDS_10G | LEDS_ACT | LEDS_LINK,
|
|
}, { /* Set 3: Unused, but set to same things as stock firmware for consistency */
|
|
LEDS_TX,
|
|
LEDS_RX,
|
|
LEDS_2G5 | LEDS_TWO_PAIR_1G | LEDS_1G | LEDS_500M | LEDS_100M | LEDS_10M | LEDS_ACT | LEDS_10G | LEDS_TWO_PAIR_5G | LEDS_5G | LEDS_TWO_PAIR_2G5,
|
|
LEDS_2G5 | LEDS_TWO_PAIR_1G | LEDS_1G | LEDS_500M | LEDS_100M | LEDS_10M | LEDS_LINK | LEDS_10G | LEDS_TWO_PAIR_5G | LEDS_5G | LEDS_TWO_PAIR_2G5,
|
|
},
|
|
},
|
|
};
|
|
|
|
void machine_custom_init(void) { }
|
|
|
|
#elif defined MACHINE_KP_9000_9XHML_X_V3_1
|
|
__code const struct machine machine = {
|
|
.machine_name = "keepLink KP-9000-9XHML-X V3.1",
|
|
.isRTL8373 = 1,
|
|
.min_port = 0,
|
|
.max_port = 8,
|
|
.n_sfp = 1,
|
|
.log_to_phys_port = {1, 2, 3, 4, 5, 6, 7, 8, 9},
|
|
.phys_to_log_port = {0, 1, 2, 3, 4, 5, 6, 7, 8},
|
|
.is_sfp = {0, 0, 0, 0, 0, 0, 0, 0, 1},
|
|
.sfp_port[0].pin_detect = GPIO38,
|
|
.sfp_port[0].pin_los = GPIO_NA,
|
|
.sfp_port[0].sds = 1,
|
|
.sfp_port[0].i2c = { .sda = GPIO39_I2C_SDA4, .scl = GPIO40_I2C_SCL3_MDC1 },
|
|
.reset_pin = GPIO48_I2C_SCL1,
|
|
.high_leds = { .mux = LED_27 | LED_29, .enable = LED_28_SYS | LED_29 },
|
|
.port_led_set = { 0, 0, 0, 0, 0, 0, 0, 0, 1},
|
|
.led_sets = {
|
|
{ /* RJ45: First LED, yellow, second LED: green */
|
|
LEDS_2G5 | LEDS_LINK,
|
|
LEDS_2G5 | LEDS_1G | LEDS_100M | LEDS_10M | LEDS_LINK | LEDS_ACT,
|
|
0,
|
|
0,
|
|
}, { /* SFP PORT, SINGLE GREEN LED */
|
|
LEDS_2G5 | LEDS_1G | LEDS_100M | LEDS_10M | LEDS_LINK | LEDS_ACT | LEDS_10G,
|
|
0,
|
|
0,
|
|
0,
|
|
}},
|
|
.led_mux_custom = 1,
|
|
.led_mux = {0x00, 0x01, 0x04, 0x05, 0x08, 0x09, 0x0c, 0x09, 0x0d, 0x10,
|
|
0x11, 0x0e, 0x14, 0x11, 0x12, 0x15, 0x15, 0x16, 0x18, 0x19,
|
|
0x1a, 0x19, 0x1d, 0x1e, 0x1c, 0x1d, 0x20, 0x21},
|
|
};
|
|
|
|
void machine_custom_init(void) { }
|
|
|
|
#elif defined MACHINE_SWGT024_V2_0_MANAGED
|
|
__code const struct machine machine = {
|
|
.machine_name = "SWGT024 V2.0 Managed",
|
|
.isRTL8373 = 0,
|
|
.min_port = 3,
|
|
.max_port = 8,
|
|
.n_sfp = 2,
|
|
.log_to_phys_port = {0, 0, 0, 6, 1, 2, 3, 4, 5},
|
|
.phys_to_log_port = {4, 5, 6, 7, 8, 3, 0, 0, 0},
|
|
.is_sfp= {0, 0, 0, 2, 0, 0, 0, 0, 1},
|
|
// Left SFP port (J4)
|
|
.sfp_port[0].pin_detect = GPIO30_ACL_BIT3_EN,
|
|
.sfp_port[0].pin_los = GPIO_NA,
|
|
.sfp_port[0].pin_tx_disable = GPIO_NA,
|
|
.sfp_port[0].sds = 1,
|
|
.sfp_port[0].i2c = { .sda = GPIO39_I2C_SDA4, .scl = GPIO40_I2C_SCL3_MDC1 }, /* GPIO 39 */
|
|
// Right SFP port (J2)
|
|
.sfp_port[1].pin_detect = GPIO50_I2C_SCL2_UART1_TX,
|
|
.sfp_port[1].pin_los = GPIO_NA,
|
|
.sfp_port[1].pin_tx_disable = GPIO_NA,
|
|
.sfp_port[1].sds = 0,
|
|
.sfp_port[1].i2c = { .sda = GPIO41_I2C_SDA3_MDIO1, .scl = GPIO40_I2C_SCL3_MDC1 }, /* GPIO 40 */
|
|
.reset_pin = GPIO54_ACL_BIT2_EN,
|
|
.high_leds = { .mux = LED_27 | LED_29, .enable = LED_28_SYS | LED_29 },
|
|
.port_led_set = { 0, 0, 0, 1, 0, 0, 0, 0, 1},
|
|
.led_sets = {
|
|
{ /* RJ45: Green LED */
|
|
LEDS_1G | LEDS_100M | LEDS_10M | LEDS_LINK | LEDS_ACT | LEDS_10G,
|
|
0,
|
|
/* Amber LED */
|
|
LEDS_2G5 | LEDS_LINK | LEDS_ACT,
|
|
0
|
|
}, { /* SFP PORT: SINGLE GREEN LED */
|
|
LEDS_10M | LEDS_100M | LEDS_1G | LEDS_2G5 | LEDS_10G | LEDS_LINK | LEDS_ACT,
|
|
0,
|
|
0,
|
|
0,
|
|
},
|
|
},
|
|
};
|
|
|
|
void machine_custom_init(void) { }
|
|
|
|
#elif defined MACHINE_SWGT024_V2_0_UNMANAGED
|
|
__code const struct machine machine = {
|
|
.machine_name = "SWGT024 V2.0 Unmanaged",
|
|
.isRTL8373 = 0,
|
|
.min_port = 3,
|
|
.max_port = 8,
|
|
.n_sfp = 2,
|
|
.log_to_phys_port = {0, 0, 0, 6, 1, 2, 3, 4, 5},
|
|
.phys_to_log_port = {4, 5, 6, 7, 8, 3, 0, 0, 0},
|
|
.is_sfp= {0, 0, 0, 2, 0, 0, 0, 0, 1},
|
|
// Left SFP port (J4)
|
|
.sfp_port[0].pin_detect = GPIO30_ACL_BIT3_EN,
|
|
.sfp_port[0].pin_los = GPIO37,
|
|
.sfp_port[0].pin_tx_disable = GPIO_NA,
|
|
.sfp_port[0].sds = 1,
|
|
.sfp_port[0].i2c = { .sda = GPIO39_I2C_SDA4, .scl = GPIO40_I2C_SCL3_MDC1 }, /* GPIO 39 */
|
|
// Right SFP port (J2)
|
|
.sfp_port[1].pin_detect = GPIO50_I2C_SCL2_UART1_TX,
|
|
.sfp_port[1].pin_los = GPIO51_I2C_SDA2_UART1_RX,
|
|
.sfp_port[1].pin_tx_disable = GPIO_NA,
|
|
.sfp_port[1].sds = 0,
|
|
.sfp_port[1].i2c = { .sda = GPIO41_I2C_SDA3_MDIO1, .scl = GPIO40_I2C_SCL3_MDC1 }, /* GPIO 40 */
|
|
.reset_pin = GPIO_NA,
|
|
.high_leds = { .mux = LED_27 | LED_29, .enable = LED_28_SYS | LED_29 },
|
|
.port_led_set = { 0, 0, 0, 1, 0, 0, 0, 0, 1},
|
|
.led_sets = {
|
|
{ /* RJ45: Green LED */
|
|
LEDS_1G | LEDS_100M | LEDS_10M | LEDS_LINK | LEDS_ACT | LEDS_10G,
|
|
0,
|
|
/* Amber LED */
|
|
LEDS_2G5 | LEDS_LINK | LEDS_ACT,
|
|
0
|
|
}, { /* SFP PORT: SINGLE GREEN LED */
|
|
LEDS_10M | LEDS_100M | LEDS_1G | LEDS_2G5 | LEDS_10G | LEDS_LINK | LEDS_ACT,
|
|
0,
|
|
0,
|
|
0,
|
|
},
|
|
},
|
|
};
|
|
|
|
void machine_custom_init(void) { }
|
|
|
|
#elif defined MACHINE_SWTG018AS_A_V_2_0
|
|
__code const struct machine machine = {
|
|
.machine_name = "SWTG018AS-A V2.0",
|
|
.isRTL8373 = 1,
|
|
.min_port = 0,
|
|
.max_port = 8,
|
|
.n_sfp = 1,
|
|
.log_to_phys_port = {1, 2, 3, 4, 5, 6, 7, 8, 9},
|
|
.phys_to_log_port = {0, 1, 2, 3, 4, 5, 6, 7, 8},
|
|
.is_sfp = {0, 0, 0, 0, 0, 0, 0, 0, 1},
|
|
.sfp_port[0].pin_detect = GPIO38,
|
|
.sfp_port[0].pin_los = GPIO_NA,
|
|
.sfp_port[0].pin_tx_disable = GPIO_NA,
|
|
.sfp_port[0].sds = 1,
|
|
.sfp_port[0].i2c = { .sda = GPIO39_I2C_SDA4, .scl = GPIO40_I2C_SCL3_MDC1 },
|
|
.reset_pin = GPIO48_I2C_SCL1,
|
|
.high_leds = { .mux = LED_27 | LED_29, .enable = LED_28_SYS | LED_29 },
|
|
.port_led_set = { 0, 0, 0, 0, 0, 0, 0, 0, 1},
|
|
.led_sets = {
|
|
{ /* RJ45: First LED, yellow, second LED: green */
|
|
LEDS_2G5 | LEDS_LINK,
|
|
LEDS_2G5 | LEDS_1G | LEDS_100M | LEDS_10M | LEDS_LINK | LEDS_ACT,
|
|
0,
|
|
0,
|
|
}, { /* SFP PORT, SINGLE GREEN LED */
|
|
LEDS_2G5 | LEDS_1G | LEDS_100M | LEDS_10M | LEDS_LINK | LEDS_ACT | LEDS_10G,
|
|
0,
|
|
0,
|
|
0,
|
|
}},
|
|
.led_mux_custom = 1,
|
|
.led_mux = { 0x00, 0x01, 0x04, 0x05, 0x08, // 65e0
|
|
0x09, 0x0c, 0x09, 0x0d, 0x10, // 65e4
|
|
0x11, 0x0e, 0x14, 0x11, 0x12, // 65e8
|
|
0x15, 0x15, 0x16, 0x18, 0x19, // 65ec
|
|
0x1a, 0x19, 0x1d, 0x1e, 0x1c, // 65f0
|
|
0x1d, 0x20, 0x21 },
|
|
};
|
|
|
|
void machine_custom_init(void) { }
|
|
|
|
#elif defined MACHINE_HG0402XG_V1_1
|
|
__code const struct machine machine = {
|
|
.machine_name = "HG0402XG V1.1",
|
|
.isRTL8373 = 0,
|
|
.min_port = 3,
|
|
.max_port = 8,
|
|
.n_sfp = 2,
|
|
.log_to_phys_port = {0, 0, 0, 5, 1, 2, 3, 4, 6},
|
|
.phys_to_log_port = {4, 5, 6, 7, 3, 8, 0, 0, 0},
|
|
.is_sfp = {0, 0, 0, 2, 0, 0, 0, 0, 1},
|
|
.sfp_port[0].pin_detect = 50,
|
|
.sfp_port[0].pin_los = 10,
|
|
.sfp_port[0].pin_tx_disable = 0xFF,
|
|
.sfp_port[0].sds = 1,
|
|
.sfp_port[0].i2c = { .sda = GPIO41_I2C_SDA3_MDIO1, .scl = GPIO40_I2C_SCL3_MDC1 },
|
|
.sfp_port[1].pin_detect = 30,
|
|
.sfp_port[1].pin_los = 51,
|
|
.sfp_port[1].pin_tx_disable = 0xFF,
|
|
.sfp_port[1].sds = 0,
|
|
.sfp_port[1].i2c = { .sda = GPIO39_I2C_SDA4, .scl = GPIO40_I2C_SCL3_MDC1 },
|
|
.reset_pin = GPIO_NA,
|
|
.high_leds = { .mux = LED_27 , .enable = LED_27 | LED_29 },
|
|
.port_led_set = { 0, 0, 0, 1, 0, 0, 0, 0, 1},
|
|
/* The Ethernet ports have 1 amber LED (left) and 1 green LED (right)
|
|
* The SFP ports have also 1 amber LED and 1 green LED
|
|
* Ethernet ports use LED-set 0, SFP ports use LED-set 1
|
|
*/
|
|
.led_sets = { { LEDS_10M | LEDS_LINK | LEDS_ACT,
|
|
LEDS_1G | LEDS_100M | LEDS_10M | LEDS_2G5 | LEDS_LINK | LEDS_ACT,
|
|
LEDS_2G5 | LEDS_LINK | LEDS_ACT,
|
|
0 },
|
|
{ LEDS_100M | LEDS_10M | LEDS_LINK,
|
|
LEDS_2G5 | LEDS_1G | LEDS_100M | LEDS_10M | LEDS_10M | LEDS_LINK | LEDS_ACT | LEDS_10G,
|
|
LEDS_10G | LEDS_LINK,
|
|
0 },
|
|
},
|
|
};
|
|
|
|
void machine_custom_init(void) { }
|
|
|
|
#elif defined MACHINE_SWTGW218AS
|
|
|
|
__code const struct machine machine = {
|
|
.machine_name = "SWTGW218AS 8+1 Managed Switch",
|
|
.isRTL8373 = 1,
|
|
.mac_flash_offset = 0x1FC000,
|
|
.min_port = 0,
|
|
.max_port = 8,
|
|
.n_sfp = 1,
|
|
.log_to_phys_port = {1, 2, 3, 4, 5, 6, 7, 8, 9},
|
|
.phys_to_log_port = {0, 1, 2, 3, 4, 5, 6, 7, 8},
|
|
.is_sfp = {0, 0, 0, 0, 0, 0, 0, 0, 1},
|
|
.sfp_port[0].pin_detect = GPIO30_ACL_BIT3_EN,
|
|
.sfp_port[0].pin_los = GPIO37,
|
|
.sfp_port[0].pin_tx_disable = GPIO_NA,
|
|
.sfp_port[0].sds = 1,
|
|
.sfp_port[0].i2c = { .sda = GPIO39_I2C_SDA4, .scl = GPIO40_I2C_SCL3_MDC1 },
|
|
.reset_pin = GPIO54_ACL_BIT2_EN,
|
|
.high_leds = { .mux = LED_27 | LED_28_SYS | LED_29, .enable = LED_28_SYS | LED_29 },
|
|
.port_led_set = { 0, 0, 0, 0, 0, 0, 0, 0, 1},
|
|
.led_sets = { { LEDS_2G5 | LEDS_LINK | LEDS_ACT, // Green LED (right)
|
|
0, // unused
|
|
LEDS_1G | LEDS_100M | LEDS_10M | LEDS_LINK | LEDS_ACT, // Amber LED (left)
|
|
0
|
|
}, // unused
|
|
{ LEDS_10G | LEDS_5G | LEDS_2G5 | LEDS_1G | LEDS_100M | LEDS_LINK | LEDS_ACT, // SFP LED
|
|
0, // unused
|
|
0, // unused
|
|
0
|
|
}, // unused },
|
|
},
|
|
};
|
|
|
|
void machine_custom_init(void) { }
|
|
#elif defined MACHINE_LIANGUO_ZX_SWTGW215AS // Has PCB branded PCB-SWTG115AS-V2.0 but is labeled and reports as a ZX-SWTGW215AS, seems to be identical to the "real" ZX-SWTGW215AS except for the LEDs
|
|
__code const struct machine machine = {
|
|
.machine_name = "Lianguo ZX-SWTGW215AS",
|
|
.isRTL8373 = 0,
|
|
.min_port = 3,
|
|
.max_port = 8,
|
|
.n_sfp = 1,
|
|
.log_to_phys_port = {0, 0, 0, 5, 1, 2, 3, 4, 6},
|
|
.phys_to_log_port = {4, 5, 6, 7, 3, 8, 0, 0, 0},
|
|
.is_sfp = {0, 0, 0, 0, 0, 0, 0, 0, 1},
|
|
.sfp_port[0].pin_detect = GPIO30_ACL_BIT3_EN,
|
|
.sfp_port[0].pin_los = GPIO37,
|
|
.sfp_port[0].pin_tx_disable = GPIO_NA,
|
|
.sfp_port[0].sds = 1,
|
|
.sfp_port[0].i2c = { .sda = GPIO39_I2C_SDA4, .scl = GPIO40_I2C_SCL3_MDC1 },
|
|
.reset_pin = GPIO54_ACL_BIT2_EN,
|
|
.high_leds = { .mux = LED_27 | LED_28_SYS | LED_29, .enable = LED_28_SYS | LED_29 },
|
|
.port_led_set = { 0, 0, 0, 0, 0, 0, 0, 0, 1},
|
|
.led_sets = { { LEDS_2G5 | LEDS_LINK | LEDS_ACT, // Green LED (right)
|
|
0, // unused
|
|
LEDS_1G | LEDS_100M | LEDS_10M | LEDS_LINK | LEDS_ACT, // Amber LED (left)
|
|
0
|
|
}, // unused
|
|
{ LEDS_10G | LEDS_5G | LEDS_2G5 | LEDS_1G | LEDS_100M | LEDS_LINK | LEDS_ACT, // SFP LED
|
|
0, // unused
|
|
0, // unused
|
|
0
|
|
}, // unused },
|
|
},
|
|
.led_mux_custom = 0,
|
|
};
|
|
|
|
void machine_custom_init(void) { }
|
|
|
|
#elif defined MACHINE_DEFAULT_8C_1SFP
|
|
__code const struct machine machine = {
|
|
.machine_name = "8+1 SFP Port Switch",
|
|
.isRTL8373 = 1,
|
|
.min_port = 0,
|
|
.max_port = 8,
|
|
.n_sfp = 1,
|
|
.log_to_phys_port = {1, 2, 3, 4, 5, 6, 7, 8, 9},
|
|
.phys_to_log_port = {0, 1, 2, 3, 4, 5, 6, 7, 8},
|
|
.is_sfp = {0, 0, 0, 0, 0, 0, 0, 0, 1},
|
|
.sfp_port[0].pin_detect = GPIO30_ACL_BIT3_EN,
|
|
.sfp_port[0].pin_los = GPIO37,
|
|
.sfp_port[0].pin_tx_disable = GPIO_NA,
|
|
.sfp_port[0].sds = 1,
|
|
.sfp_port[0].i2c = { .sda = GPIO39_I2C_SDA4, .scl = GPIO40_I2C_SCL3_MDC1 },
|
|
.reset_pin = GPIO_NA,
|
|
.high_leds = { .mux = LED_27 | LED_29, .enable = LED_28_SYS | LED_29 },
|
|
.port_led_set = { 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
|
.led_sets = { { LEDS_2G5 | LEDS_TWO_PAIR_1G | LEDS_1G | LEDS_500M | LEDS_100M | LEDS_10M | LEDS_LINK | LEDS_ACT | LEDS_10G | LEDS_TWO_PAIR_5G | LEDS_5G | LEDS_TWO_PAIR_2G5,
|
|
LEDS_2G5 | LEDS_LINK,
|
|
LEDS_1G | LEDS_LINK,
|
|
LEDS_2G5 | LEDS_LINK | LEDS_ACT },
|
|
},
|
|
};
|
|
|
|
void machine_custom_init(void) { }
|
|
|
|
#elif defined MACHINE_TRENDNET_TEG_S562
|
|
__code const struct machine machine = {
|
|
.machine_name = "Trendnet TEG-S562",
|
|
.isRTL8373 = 0,
|
|
.min_port = 3,
|
|
.max_port = 8,
|
|
.n_sfp = 2,
|
|
.log_to_phys_port = {0, 0, 0, 6, 1, 2, 3, 4, 5},
|
|
.phys_to_log_port = {4, 5, 6, 7, 8, 3, 0, 0, 0},
|
|
.is_sfp = {0, 0, 0, 1, 0, 0, 0, 0, 2},
|
|
.sfp_port[0].pin_detect = GPIO38,
|
|
.sfp_port[0].pin_los = GPIO50_I2C_SCL2_UART1_TX,
|
|
.sfp_port[0].pin_tx_disable = GPIO54_ACL_BIT2_EN,
|
|
.sfp_port[0].sds = 0,
|
|
.sfp_port[0].i2c = { .sda = GPIO47_I2C_SDA0, .scl = GPIO46_I2C_SCL0 },
|
|
.sfp_port[1].pin_detect = GPIO36_PWM_OUT,
|
|
.sfp_port[1].pin_los = GPIO37,
|
|
.sfp_port[1].pin_tx_disable = GPIO51_I2C_SDA2_UART1_RX,
|
|
.sfp_port[1].sds = 1,
|
|
.sfp_port[1].i2c = { .sda = GPIO49_I2C_SDA1, .scl = GPIO48_I2C_SCL1 },
|
|
.reset_pin = GPIO_NA,
|
|
.port_led_set = { 0, 0, 0, 1, 0, 0, 0, 0, 1},
|
|
.led_sets = {
|
|
{
|
|
0, // Unused
|
|
LEDS_2G5 | LEDS_LINK | LEDS_ACT, // Green
|
|
LEDS_1G | LEDS_100M | LEDS_10M | LEDS_LINK | LEDS_ACT, // Amber
|
|
0 // Unused
|
|
},
|
|
{
|
|
0, // Unused
|
|
0, // Unused
|
|
LEDS_10G | LEDS_1G | LEDS_LINK | LEDS_ACT, // Green
|
|
0, // Unused
|
|
},
|
|
},
|
|
|
|
};
|
|
|
|
void machine_custom_init(void) { }
|
|
|
|
#elif defined(MACHINE_PCB_K0402WS_V3) || defined(MACHINE_HI_K0402WS) // Sold as a variety of devices, see doc/
|
|
__code const struct machine machine = {
|
|
.machine_name = "PCB-K0402WS-V3.0",
|
|
.isRTL8373 = 0,
|
|
.min_port = 3,
|
|
.max_port = 8,
|
|
.n_sfp = 2,
|
|
.log_to_phys_port = {0, 0, 0, 6, 1, 2, 3, 4, 5},
|
|
.phys_to_log_port = {4, 5, 6, 7, 8, 3, 0, 0, 0},
|
|
.is_sfp = {0, 0, 0, 2, 0, 0, 0, 0, 1},
|
|
|
|
// Left SFP port
|
|
.sfp_port[0].pin_detect = GPIO38,
|
|
.sfp_port[0].pin_los = GPIO_NA,
|
|
.sfp_port[0].sds = 1,
|
|
.sfp_port[0].i2c = { .sda = GPIO39_I2C_SDA4, .scl = GPIO40_I2C_SCL3_MDC1 },
|
|
|
|
// Right SFP port
|
|
.sfp_port[1].pin_detect = GPIO37,
|
|
.sfp_port[1].pin_los = GPIO_NA,
|
|
.sfp_port[1].sds = 0,
|
|
.sfp_port[1].i2c = { .sda = GPIO41_I2C_SDA3_MDIO1, .scl = GPIO40_I2C_SCL3_MDC1 },
|
|
|
|
.reset_pin = GPIO_NA,
|
|
.high_leds = { .mux = LED_28_SYS | LED_29, .enable = LED_27 | LED_28_SYS | LED_29 },
|
|
.port_led_set = { 0, 0, 0, 1, 0, 0, 0, 0, 1},
|
|
.led_sets = {
|
|
{
|
|
LEDS_2G5 | LEDS_LINK | LEDS_10M | LEDS_ACT,
|
|
LEDS_1G | LEDS_100M | LEDS_10M | LEDS_LINK | LEDS_ACT | LEDS_10G,
|
|
LEDS_1G | LEDS_LINK,
|
|
0
|
|
},
|
|
{
|
|
LEDS_10G | LEDS_2G5 | LEDS_1G | LEDS_100M | LEDS_10M | LEDS_LINK,
|
|
LEDS_10G | LEDS_2G5 | LEDS_1G | LEDS_100M | LEDS_10M | LEDS_ACT,
|
|
0,
|
|
0
|
|
},
|
|
},
|
|
.led_mux_custom = 1,
|
|
.led_mux = {
|
|
0x00,0x01,0x04,0x05,0x08,0x09,0x0c,0x3f,0x0d,0x10,0x11,0x0e,0x14,0x11,0x12,0x15,0x15,0x16,0x18,0x19,0x1a,0x19,0x1d,0x1e,0x1c,0x1d,0x20,0x21
|
|
},
|
|
};
|
|
|
|
void machine_custom_init(void) {
|
|
reg_bit_set(RTL837X_REG_LED_GLB_IO_EN, 6);
|
|
}
|
|
|
|
#elif defined MACHINE_K0501W_V2_0
|
|
__code const struct machine machine = {
|
|
.machine_name = "K0501W V2.0",
|
|
.isRTL8373 = 0,
|
|
.min_port = 3,
|
|
.max_port = 8,
|
|
.n_sfp = 1,
|
|
.log_to_phys_port = {0, 0, 0, 5, 1, 2, 3, 4, 6},
|
|
.phys_to_log_port = {4, 5, 6, 7, 3, 8, 0, 0, 0},
|
|
.is_sfp = {0, 0, 0, 0, 0, 0, 0, 0, 1},
|
|
.sfp_port[0].pin_detect = GPIO30_ACL_BIT3_EN,
|
|
.sfp_port[0].pin_los = GPIO37,
|
|
.sfp_port[0].pin_tx_disable = GPIO_NA,
|
|
.sfp_port[0].sds = 1,
|
|
.sfp_port[0].i2c = { .sda = GPIO39_I2C_SDA4, .scl = GPIO40_I2C_SCL3_MDC1 },
|
|
|
|
.reset_pin = GPIO_NA,
|
|
.port_led_set = { 0, 0, 0, 0, 0, 0, 0, 0, 1},
|
|
.led_sets = {
|
|
{
|
|
LEDS_2G5 | LEDS_LINK | LEDS_ACT,
|
|
0,
|
|
LEDS_1G | LEDS_100M | LEDS_10M | LEDS_LINK | LEDS_ACT,
|
|
0
|
|
},
|
|
{
|
|
LEDS_10G | LEDS_2G5 | LEDS_1G | LEDS_100M | LEDS_10M | LEDS_LINK | LEDS_ACT,
|
|
0,
|
|
0,
|
|
0
|
|
},
|
|
},
|
|
};
|
|
|
|
void machine_custom_init(void) { }
|
|
|
|
#elif defined MACHINE_ZX310S_4T2XH
|
|
__code const struct machine machine = {
|
|
.machine_name = "ZX310S-4T2XH",
|
|
.isRTL8373 = 0,
|
|
.min_port = 3,
|
|
.max_port = 8,
|
|
.n_sfp = 1,
|
|
.n_10g = 1,
|
|
.log_to_phys_port = {0, 0, 0, 5, 1, 2, 3, 4, 6},
|
|
.phys_to_log_port = {4, 5, 6, 7, 3, 8, 0, 0, 0},
|
|
.is_sfp = {0, 0, 0, 0, 0, 0, 0, 0, 1},
|
|
.sfp_port[0].pin_detect = GPIO38,
|
|
.sfp_port[0].pin_los = GPIO_NA,
|
|
.sfp_port[0].pin_tx_disable = GPIO_NA,
|
|
.sfp_port[0].sds = 1,
|
|
.sfp_port[0].i2c = { .sda = GPIO39_I2C_SDA4, .scl = GPIO40_I2C_SCL3_MDC1 },
|
|
.reset_pin = GPIO48_I2C_SCL1,
|
|
.high_leds = { .mux = LED_28_SYS, .enable = LED_27 | LED_28_SYS | LED_29 },
|
|
.led_mux_custom = 1,
|
|
.led_mux = { 0x00, 0x01, 0x04, 0x05, 0x08, // 65e0
|
|
0x09, 0x0c, 0x3f, 0x0d, 0x10, // 65e4
|
|
0x11, 0x0e, 0x14, 0x11, 0x12, // 65e8
|
|
0x15, 0x15, 0x16, 0x18, 0x19, // 65ec
|
|
0x1a, 0x19, 0x1d, 0x1e, 0x1c, // 65f0
|
|
0x1d, 0x20, 0x21 },
|
|
.port_led_set = { 0, 0, 0, 1, 0, 0, 0, 0, 1},
|
|
/* Ports 1-4: Orange: 2.5GBit, Green: 10/100/1000MBit
|
|
* Port 5: Blue: 10GBit, Green: 10Mbit-5GBit
|
|
* SFP-port: Blue: 10GBit, Green 100MBit-5GBit
|
|
*/
|
|
.led_sets = { { LEDS_2G5 | LEDS_LINK | LEDS_ACT,
|
|
LEDS_1G | LEDS_100M | LEDS_10M | LEDS_LINK | LEDS_ACT,
|
|
LEDS_DUPLEX,
|
|
LEDS_2G5 | LEDS_LINK | LEDS_ACT },
|
|
{
|
|
LEDS_2G5 | LEDS_1G | LEDS_100M | LEDS_LINK | LEDS_ACT | LEDS_5G,
|
|
LEDS_LINK | LEDS_ACT | LEDS_10G,
|
|
LEDS_2G5 | LEDS_LINK,
|
|
LEDS_COL | LEDS_DUPLEX
|
|
}
|
|
},
|
|
};
|
|
|
|
void machine_custom_init(void) { }
|
|
|
|
#elif defined MACHINE_STEAMEMO_IG204_V1
|
|
__code const struct machine machine = {
|
|
.machine_name = "Steamemo IG204 V1",
|
|
.isRTL8373 = 0,
|
|
.min_port = 3,
|
|
.max_port = 8,
|
|
.n_sfp = 2,
|
|
.log_to_phys_port = {0, 0, 0, 6, 1, 2, 3, 4, 5},
|
|
.phys_to_log_port = {4, 5, 6, 7, 8, 3, 0, 0, 0},
|
|
.is_sfp = {0, 0, 0, 2, 0, 0, 0, 0, 1},
|
|
// Left SFP port (5)
|
|
// LED pin 9
|
|
.sfp_port[0].pin_detect = GPIO30_ACL_BIT3_EN,
|
|
.sfp_port[0].pin_los = GPIO37,
|
|
.sfp_port[0].pin_tx_disable = GPIO_NA,
|
|
.sfp_port[0].sds = 1,
|
|
.sfp_port[0].i2c = { .sda = GPIO39_I2C_SDA4, .scl = GPIO40_I2C_SCL3_MDC1 },
|
|
// Right SFP port (6)
|
|
// LED pin 24
|
|
.sfp_port[1].pin_detect = GPIO50_I2C_SCL2_UART1_TX,
|
|
.sfp_port[1].pin_los = GPIO51_I2C_SDA2_UART1_RX,
|
|
.sfp_port[1].pin_tx_disable = GPIO_NA,
|
|
.sfp_port[1].sds = 0,
|
|
.sfp_port[1].i2c = { .sda = GPIO41_I2C_SDA3_MDIO1, .scl = GPIO40_I2C_SCL3_MDC1 },
|
|
.reset_pin = GPIO_NA,
|
|
.high_leds = { .mux = LED_27 | LED_28_SYS | LED_29, .enable = LED_28_SYS | LED_29 },
|
|
.port_led_set = { 0, 0, 0, 1, 0, 0, 0, 0, 1},
|
|
.led_sets = {
|
|
{
|
|
// RJ45 Amber LED (left)
|
|
LEDS_2G5 | LEDS_LINK,
|
|
// RJ45 Green LED (Right)
|
|
LEDS_2G5 | LEDS_1G | LEDS_100M | LEDS_10M | LEDS_LINK | LEDS_ACT,
|
|
0,
|
|
0,
|
|
},
|
|
{
|
|
// SFP LED
|
|
LEDS_10G | LEDS_5G | LEDS_2G5 | LEDS_1G | LEDS_100M | LEDS_LINK | LEDS_ACT,
|
|
0, // unused
|
|
0, // unused
|
|
0
|
|
},
|
|
},
|
|
.led_mux_custom = 1,
|
|
.led_mux = {
|
|
0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x0f, 0x20, 0x0d, 0x0e, 0x10, 0x11, 0x12, 0x14, 0x15, 0x16, 0x18, 0x19, 0x1a, 0x1c, 0x1d, 0x1e, 0x0c, 0x21, 0x22, 0x23
|
|
},
|
|
};
|
|
|
|
void machine_custom_init(void) { }
|
|
|
|
#elif defined MACHINE_HI_K0801WS
|
|
__code const struct machine machine = {
|
|
.machine_name = "Hi-Source HI-k0801WS",
|
|
.isRTL8373 = 1,
|
|
.min_port = 0,
|
|
.max_port = 8,
|
|
.n_sfp = 1,
|
|
.log_to_phys_port = {1, 2, 3, 4, 5, 6, 7, 8, 9},
|
|
.phys_to_log_port = {0, 1, 2, 3, 4, 5, 6, 7, 8},
|
|
.is_sfp = {0, 0, 0, 0, 0, 0, 0, 0, 1},
|
|
|
|
.sfp_port[0].pin_detect = GPIO30_ACL_BIT3_EN,
|
|
.sfp_port[0].pin_los = GPIO37,
|
|
.sfp_port[0].pin_tx_disable = GPIO_NA,
|
|
.sfp_port[0].sds = 1,
|
|
.sfp_port[0].i2c = {
|
|
.sda = GPIO39_I2C_SDA4,
|
|
.scl = GPIO40_I2C_SCL3_MDC1
|
|
},
|
|
|
|
.reset_pin = GPIO_NA,
|
|
|
|
.high_leds = {
|
|
.mux = LED_27 | LED_29,
|
|
.enable = LED_28_SYS | LED_29
|
|
},
|
|
|
|
/* Ports 1-8 use set 0, port 9 SFP uses set 1 */
|
|
.port_led_set = {0, 0, 0, 0, 0, 0, 0, 0, 1},
|
|
|
|
.led_sets = {
|
|
{ /* Set 0: RJ45 copper ports
|
|
* Amber = 2.5G
|
|
* Green = 1G/100M/10M with activity
|
|
*/
|
|
LEDS_2G5 | LEDS_LINK | LEDS_ACT, /* Amber */
|
|
0,
|
|
LEDS_1G | LEDS_100M | LEDS_10M | LEDS_LINK | LEDS_ACT, /* Green */
|
|
0
|
|
},
|
|
{ /* Set 1: SFP port, single green LED for all valid speeds */
|
|
LEDS_10G | LEDS_2G5 | LEDS_1G | LEDS_100M | LEDS_10M | LEDS_LINK | LEDS_ACT,
|
|
0,
|
|
0,
|
|
0
|
|
},
|
|
},
|
|
};
|
|
|
|
void machine_custom_init(void) { }
|
|
|
|
#elif defined MACHINE_FNS1200P
|
|
__code const struct machine machine = {
|
|
.machine_name = "FNS-1200P",
|
|
.isRTL8373 = 0,
|
|
.min_port = 3,
|
|
.max_port = 8,
|
|
.n_sfp = 2,
|
|
.log_to_phys_port = {0, 0, 0, 6, 1, 2, 3, 4, 5},
|
|
.phys_to_log_port = {4, 5, 6, 7, 8, 3, 0, 0, 0},
|
|
.is_sfp = {0, 0, 0, 2, 0, 0, 0, 0, 1},
|
|
|
|
/* Left SFP (logical 8, SDS1): GPIO30=ModAbs, GPIO37=RX_LOS */
|
|
.sfp_port[0].pin_detect = GPIO30_ACL_BIT3_EN,
|
|
.sfp_port[0].pin_los = GPIO37,
|
|
.sfp_port[0].pin_tx_disable = GPIO_NA,
|
|
.sfp_port[0].sds = 1,
|
|
.sfp_port[0].i2c = { .sda = GPIO39_I2C_SDA4, .scl = GPIO40_I2C_SCL3_MDC1 },
|
|
|
|
/* Right SFP (logical 3, SDS0): GPIO50=ModAbs, GPIO51=RX_LOS */
|
|
.sfp_port[1].pin_detect = GPIO50_I2C_SCL2_UART1_TX,
|
|
.sfp_port[1].pin_los = GPIO51_I2C_SDA2_UART1_RX,
|
|
.sfp_port[1].pin_tx_disable = GPIO_NA,
|
|
.sfp_port[1].sds = 0,
|
|
.sfp_port[1].i2c = { .sda = GPIO41_I2C_SDA3_MDIO1, .scl = GPIO40_I2C_SCL3_MDC1 },
|
|
|
|
.reset_pin = GPIO_NA,
|
|
|
|
.high_leds = { .mux = LED_27 | LED_28_SYS | LED_29, .enable = LED_28_SYS | LED_29 },
|
|
|
|
/* Copper ports use SET0; SFP ports use SET1 */
|
|
.port_led_set = {0, 0, 0, 1, 0, 0, 0, 0, 1},
|
|
|
|
.led_sets = {
|
|
{ /* SET0: copper — LED0=amber (2.5G), LED2=green (1G/100M/10M) */
|
|
LEDS_2G5 | LEDS_LINK | LEDS_ACT,
|
|
0,
|
|
LEDS_1G | LEDS_100M | LEDS_10M | LEDS_LINK | LEDS_ACT,
|
|
0
|
|
},
|
|
{ /* SET1: SFP — all speeds link/act */
|
|
LEDS_10G | LEDS_2G5 | LEDS_1G | LEDS_100M | LEDS_10M | LEDS_LINK | LEDS_ACT,
|
|
0,
|
|
0, 0
|
|
},
|
|
},
|
|
|
|
.led_mux_custom = 1,
|
|
.led_mux = {
|
|
0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, /* GPIO0-7: unused */
|
|
0x0f, 0x0c, 0x0d, 0x0e, 0x10, 0x11, 0x12, /* GPIO8-14 */
|
|
0x14, 0x15, 0x16, 0x18, 0x19, 0x1a, /* GPIO15-20 */
|
|
0x1c, 0x1d, 0x1e, 0x20, 0x21, 0x22, 0x23 /* GPIO21-27 */
|
|
},
|
|
};
|
|
|
|
void machine_custom_init(void)
|
|
{
|
|
reg_bit_set(RTL837X_REG_LED_GLB_IO_EN, 6);
|
|
}
|
|
|
|
|
|
#elif defined MACHINE_PCB_SWTG024AS_A_2_0_1
|
|
__code const struct machine machine = {
|
|
.machine_name = "PCB-SWTG024AS-A-2.0.1",
|
|
.isRTL8373 = 0,
|
|
.min_port = 3,
|
|
.max_port = 8,
|
|
.n_sfp = 2,
|
|
.log_to_phys_port = {0, 0, 0, 5, 1, 2, 3, 4, 6},
|
|
.phys_to_log_port = {4, 5, 6, 7, 3, 8, 0, 0, 0},
|
|
.is_sfp = {0, 0, 0, 1, 0, 0, 0, 0, 2},
|
|
|
|
// SFP port on SDS0 / logical port 3
|
|
.sfp_port[0].pin_detect = GPIO37,
|
|
.sfp_port[0].pin_los = GPIO_NA,
|
|
.sfp_port[0].pin_tx_disable = GPIO_NA,
|
|
.sfp_port[0].sds = 0,
|
|
.sfp_port[0].i2c = { .sda = GPIO41_I2C_SDA3_MDIO1, .scl = GPIO40_I2C_SCL3_MDC1 },
|
|
|
|
// SFP port on SDS1 / logical port 8
|
|
.sfp_port[1].pin_detect = GPIO38,
|
|
.sfp_port[1].pin_los = GPIO_NA,
|
|
.sfp_port[1].pin_tx_disable = GPIO_NA,
|
|
.sfp_port[1].sds = 1,
|
|
.sfp_port[1].i2c = { .sda = GPIO39_I2C_SDA4, .scl = GPIO40_I2C_SCL3_MDC1 },
|
|
|
|
.reset_pin = GPIO_NA,
|
|
.high_leds = { .mux = LED_28_SYS | LED_29, .enable = LED_27 | LED_28_SYS | LED_29 },
|
|
.port_led_set = { 0, 0, 0, 1, 0, 0, 0, 0, 1},
|
|
.led_sets = {
|
|
{
|
|
LEDS_2G5 | LEDS_LINK | LEDS_ACT,
|
|
LEDS_1G | LEDS_100M | LEDS_10M | LEDS_LINK | LEDS_ACT,
|
|
LEDS_DUPLEX,
|
|
LEDS_2G5 | LEDS_LINK | LEDS_ACT
|
|
},
|
|
{
|
|
LEDS_2G5 | LEDS_1G | LEDS_100M | LEDS_LINK | LEDS_ACT,
|
|
LEDS_10G | LEDS_LINK | LEDS_ACT,
|
|
LEDS_2G5 | LEDS_LINK,
|
|
LEDS_COL | LEDS_DUPLEX
|
|
},
|
|
},
|
|
.led_mux_custom = 1,
|
|
.led_mux = {
|
|
0x00,0x01,0x04,0x05,0x08,0x09,0x0c,0x3f,0x0d,0x10,0x11,0x0e,0x14,0x11,0x12,0x15,0x15,0x16,0x18,0x19,0x1a,0x19,0x1d,0x1e,0x1c,0x1d,0x20,0x21
|
|
},
|
|
};
|
|
|
|
void machine_custom_init(void)
|
|
{
|
|
reg_bit_set(RTL837X_REG_LED_GLB_IO_EN, 6);
|
|
reg_bit_set(RTL837X_REG_LED_MODE, 17);
|
|
reg_bit_clear(RTL837X_REG_LED_MODE, 9);
|
|
reg_bit_clear(RTL837X_REG_LED_MODE, 7);
|
|
}
|
|
|
|
#elif defined MACHINE_SWTG024AS_A_2_0_1_5C_1SFP
|
|
__code const struct machine machine = {
|
|
.machine_name = "SWTG024AS-A-V2.0.1-5C-1SFP",
|
|
.isRTL8373 = 0,
|
|
.min_port = 3,
|
|
.max_port = 8,
|
|
.n_sfp = 1,
|
|
.log_to_phys_port = {0, 0, 0, 5, 1, 2, 3, 4, 6},
|
|
.phys_to_log_port = {4, 5, 6, 7, 3, 8, 0, 0, 0},
|
|
.is_sfp = {0, 0, 0, 0, 0, 0, 0, 0, 1},
|
|
.sfp_port[0].pin_detect = GPIO38,
|
|
.sfp_port[0].pin_los = GPIO_NA,
|
|
.sfp_port[0].pin_tx_disable = GPIO_NA,
|
|
.sfp_port[0].sds = 1,
|
|
.sfp_port[0].i2c = { .sda = GPIO39_I2C_SDA4, .scl = GPIO40_I2C_SCL3_MDC1 },
|
|
|
|
.reset_pin = GPIO_NA,
|
|
.high_leds = { .mux = LED_28_SYS | LED_29, .enable = LED_27 | LED_28_SYS | LED_29 },
|
|
.port_led_set = { 0, 0, 0, 0, 0, 0, 0, 0, 1},
|
|
/* Ports 1-5 RJ45 use set 0, port 9 SFP uses set 1
|
|
* Ports 1-5: Green: 2.5GBit, Amber: 10/100/1000MBit
|
|
* SFP-port: Blue: 10GBit, Green: 100MBit-2.5GBit
|
|
*/
|
|
.led_sets = {
|
|
{
|
|
LEDS_2G5 | LEDS_LINK | LEDS_ACT,
|
|
LEDS_1G | LEDS_100M | LEDS_10M | LEDS_LINK | LEDS_ACT,
|
|
LEDS_DUPLEX,
|
|
LEDS_2G5 | LEDS_LINK | LEDS_ACT
|
|
},
|
|
{
|
|
LEDS_2G5 | LEDS_1G | LEDS_100M | LEDS_LINK | LEDS_ACT,
|
|
LEDS_10G | LEDS_LINK | LEDS_ACT,
|
|
LEDS_2G5 | LEDS_LINK,
|
|
LEDS_COL | LEDS_DUPLEX
|
|
},
|
|
},
|
|
.led_mux_custom = 1,
|
|
.led_mux = {
|
|
0x00,0x01,0x04,0x05,0x08,0x09,0x0c,0x3f,0x0d,0x10,0x11,0x0e,0x14,0x11,0x12,0x15,0x15,0x16,0x18,0x19,0x1a,0x19,0x1d,0x1e,0x1c,0x1d,0x20,0x21
|
|
},
|
|
};
|
|
|
|
void machine_custom_init(void)
|
|
{
|
|
uint16_t pval;
|
|
|
|
reg_bit_set(RTL837X_REG_LED_GLB_IO_EN, 6);
|
|
reg_bit_set(RTL837X_REG_LED_MODE, 17);
|
|
reg_bit_clear(RTL837X_REG_LED_MODE, 9);
|
|
reg_bit_clear(RTL837X_REG_LED_MODE, 7);
|
|
|
|
// OEM firmware sets these companion SDS0 polarity bits for the RTL8221B.
|
|
sds_read(0, 0, 0);
|
|
pval = SFR_DATA_U16;
|
|
sds_write_v(0, 0, 0, pval | 0x100);
|
|
|
|
sds_read(0, 6, 2);
|
|
pval = SFR_DATA_U16;
|
|
sds_write_v(0, 6, 2, pval | 0x4000);
|
|
}
|
|
|
|
#elif defined MACHINE_SWTG024AS_V2_0
|
|
__code const struct machine machine = {
|
|
.machine_name = "SWTG024AS-V2.0",
|
|
.isRTL8373 = 0,
|
|
.min_port = 3,
|
|
.max_port = 8,
|
|
.n_sfp = 1,
|
|
.log_to_phys_port = {0, 0, 0, 5, 1, 2, 3, 4, 6},
|
|
.phys_to_log_port = {4, 5, 6, 7, 3, 8, 0, 0, 0},
|
|
.is_sfp = {0, 0, 0, 0, 0, 0, 0, 0, 1},
|
|
.sfp_port[0].pin_detect = GPIO30_ACL_BIT3_EN,
|
|
.sfp_port[0].pin_los = GPIO37,
|
|
.sfp_port[0].pin_tx_disable = GPIO_NA,
|
|
.sfp_port[0].sds = 1,
|
|
.sfp_port[0].i2c = { .sda = GPIO39_I2C_SDA4, .scl = GPIO40_I2C_SCL3_MDC1 },
|
|
|
|
.reset_pin = GPIO_NA,
|
|
.high_leds = { .mux = LED_28_SYS | LED_29, .enable = LED_27 | LED_28_SYS | LED_29 },
|
|
.port_led_set = { 0, 0, 0, 0, 0, 0, 0, 0, 1},
|
|
/* Ports 1-5 RJ45 use set 0, port 9 SFP uses set 1
|
|
* Ports 1-5: Green: 2.5GBit, Amber: 10/100/1000MBit
|
|
* SFP-port: Blue: 10GBit, Amber: 100MBit-2.5GBit
|
|
*/
|
|
.led_sets = {
|
|
{
|
|
LEDS_2G5 | LEDS_LINK | LEDS_ACT,
|
|
LEDS_1G | LEDS_100M | LEDS_10M | LEDS_LINK | LEDS_ACT,
|
|
LEDS_DUPLEX,
|
|
LEDS_2G5 | LEDS_LINK | LEDS_ACT
|
|
},
|
|
{
|
|
LEDS_2G5 | LEDS_1G | LEDS_100M | LEDS_LINK | LEDS_ACT,
|
|
LEDS_10G | LEDS_LINK | LEDS_ACT,
|
|
LEDS_2G5 | LEDS_LINK,
|
|
LEDS_COL | LEDS_DUPLEX
|
|
},
|
|
},
|
|
.led_mux_custom = 1,
|
|
.led_mux = {
|
|
0x00,0x01,0x04,0x05,0x08,0x09,0x0c,0x3f,0x0d,0x10,0x11,0x0e,0x14,0x11,0x12,0x15,0x15,0x16,0x18,0x19,0x1a,0x19,0x1d,0x1e,0x1c,0x1d,0x20,0x21
|
|
},
|
|
};
|
|
|
|
void machine_custom_init(void)
|
|
{
|
|
uint16_t pval;
|
|
|
|
reg_bit_set(RTL837X_REG_LED_GLB_IO_EN, 6);
|
|
reg_bit_set(RTL837X_REG_LED_MODE, 17);
|
|
reg_bit_clear(RTL837X_REG_LED_MODE, 9);
|
|
reg_bit_clear(RTL837X_REG_LED_MODE, 7);
|
|
|
|
// OEM firmware sets these companion SDS0 polarity bits for the RTL8221B.
|
|
sds_read(0, 0, 0);
|
|
pval = SFR_DATA_U16;
|
|
sds_write_v(0, 0, 0, pval | 0x100);
|
|
|
|
sds_read(0, 6, 2);
|
|
pval = SFR_DATA_U16;
|
|
sds_write_v(0, 6, 2, pval | 0x4000);
|
|
}
|
|
|
|
#elif defined MACHINE_ZX310S_4T2XT
|
|
__code const struct machine machine = {
|
|
.machine_name = "ZX310S_4T2XT",
|
|
.isRTL8373 = 0,
|
|
.min_port = 3,
|
|
.max_port = 8,
|
|
.n_sfp = 0,
|
|
.n_10g = 2,
|
|
.log_to_phys_port = {0, 0, 0, 5, 1, 2, 3, 4, 6},
|
|
.phys_to_log_port = {4, 5, 6, 7, 3, 8, 0, 0, 0},
|
|
.is_sfp = {0, 0, 0, 0, 0, 0, 0, 0, 0},
|
|
.reset_pin = GPIO48_I2C_SCL1,
|
|
.high_leds = { .mux = LED_28_SYS | LED_29, .enable = LED_27 | LED_28_SYS | LED_29 },
|
|
.led_mux_custom = 1,
|
|
.led_mux = { 0x00, 0x01, 0x04, 0x05, 0x08, // 65e0
|
|
0x09, 0x0c, 0x3f, 0x0d, 0x10, // 65e4
|
|
0x11, 0x0e, 0x14, 0x11, 0x12, // 65e8
|
|
0x15, 0x15, 0x16, 0x18, 0x19, // 65ec
|
|
0x1a, 0x19, 0x1d, 0x1e, 0x1c, // 65f0
|
|
0x1d, 0x20, 0x21 },
|
|
.port_led_set = { 0, 0, 0, 1, 0, 0, 0, 0, 1},
|
|
/* Ports 1-4: Green: 2.5GBit, Orange: 10/100/1000MBit
|
|
* Ports 5-6: Green: 10GBit, Orange: <= 5GBit
|
|
*/
|
|
.led_sets = { { LEDS_2G5 | LEDS_LINK | LEDS_ACT,
|
|
LEDS_1G | LEDS_100M | LEDS_10M | LEDS_LINK | LEDS_ACT,
|
|
LEDS_DUPLEX,
|
|
LEDS_2G5 | LEDS_LINK | LEDS_ACT },
|
|
{
|
|
LEDS_2G5 | LEDS_1G | LEDS_100M | LEDS_LINK | LEDS_ACT,
|
|
LEDS_LINK | LEDS_ACT | LEDS_10G | LEDS_5G,
|
|
LEDS_2G5 | LEDS_LINK,
|
|
LEDS_COL | LEDS_DUPLEX
|
|
}
|
|
},
|
|
};
|
|
|
|
void machine_custom_init(void) {
|
|
// For this device, the reset value of RTL837X_PIN_MUX_0 is 0x30000000,
|
|
// which would disables all LEDS, enable them manually:
|
|
REG_SET(RTL837X_PIN_MUX_0, 0x30db68bf);
|
|
}
|
|
|
|
#elif defined MACHINE_FG_4GT_2SX_V2_0
|
|
__code const struct machine machine = {
|
|
.machine_name = "FG-4GT-2SX_V2.0",
|
|
.isRTL8373 = 0,
|
|
.min_port = 3,
|
|
.max_port = 8,
|
|
.n_sfp = 2,
|
|
.log_to_phys_port = {0, 0, 0, 6, 1, 2, 3, 4, 5},
|
|
.phys_to_log_port = {4, 5, 6, 7, 8, 3, 0, 0, 0},
|
|
.is_sfp = {0, 0, 0, 2, 0, 0, 0, 0, 1},
|
|
|
|
// Left SFP port
|
|
.sfp_port[0].pin_detect = GPIO38,
|
|
.sfp_port[0].pin_los = GPIO_NA,
|
|
.sfp_port[0].sds = 1,
|
|
.sfp_port[0].i2c = { .sda = GPIO39_I2C_SDA4, .scl = GPIO40_I2C_SCL3_MDC1 },
|
|
|
|
// Right SFP port
|
|
.sfp_port[1].pin_detect = GPIO37,
|
|
.sfp_port[1].pin_los = GPIO_NA,
|
|
.sfp_port[1].sds = 0,
|
|
.sfp_port[1].i2c = { .sda = GPIO41_I2C_SDA3_MDIO1, .scl = GPIO40_I2C_SCL3_MDC1 },
|
|
|
|
.reset_pin = GPIO_NA,
|
|
.high_leds = { .mux = LED_27 | LED_28_SYS | LED_29, .enable = LED_28_SYS | LED_29 },
|
|
.port_led_set = { 0, 0, 0, 1, 0, 0, 0, 0, 1},
|
|
/* Ports 1-4 RJ45 use set 0, port 5-6 SFP uses set 1
|
|
* Ports 1-4: Green: 2.5GBit, Amber: 10/100/1000MBit
|
|
* Ports 5-6: Green: 100MBit-10GBit
|
|
*/
|
|
.led_sets = {
|
|
{
|
|
LEDS_2G5 | LEDS_LINK | LEDS_ACT,
|
|
LEDS_1G | LEDS_100M | LEDS_10M | LEDS_LINK | LEDS_ACT,
|
|
0,
|
|
LEDS_2G5 | LEDS_LINK | LEDS_ACT
|
|
},
|
|
{
|
|
LEDS_10G | LEDS_5G | LEDS_2G5 | LEDS_1G | LEDS_100M | LEDS_10M | LEDS_LINK | LEDS_ACT,
|
|
LEDS_10G | LEDS_LINK,
|
|
0,
|
|
LEDS_COL | LEDS_DUPLEX
|
|
},
|
|
{
|
|
LEDS_1G | LEDS_100M | LEDS_10M | LEDS_LINK | LEDS_ACT,
|
|
LEDS_2G5 | LEDS_1G | LEDS_LINK,
|
|
LEDS_5G | LEDS_2G5 | LEDS_LINK | LEDS_ACT,
|
|
LEDS_10G | LEDS_LINK | LEDS_ACT
|
|
},
|
|
{
|
|
LEDS_TX,
|
|
LEDS_RX,
|
|
LEDS_10G | LEDS_TWO_PAIR_5G | LEDS_5G | LEDS_TWO_PAIR_2G5 |
|
|
LEDS_2G5 | LEDS_TWO_PAIR_1G | LEDS_1G | LEDS_500M | LEDS_100M | LEDS_10M | LEDS_ACT,
|
|
LEDS_10G | LEDS_TWO_PAIR_5G | LEDS_5G | LEDS_TWO_PAIR_2G5 |
|
|
LEDS_2G5 | LEDS_TWO_PAIR_1G | LEDS_1G | LEDS_500M | LEDS_100M | LEDS_10M | LEDS_LINK
|
|
},
|
|
},
|
|
.led_mux_custom = 1,
|
|
.led_mux = {
|
|
0x0c, 0x0d, 0x0e, 0x10, 0x11, 0x12, 0x14, 0x3f, 0x15, 0x16,
|
|
0x18, 0x0e, 0x19, 0x11, 0x12, 0x1a, 0x15, 0x16, 0x1c, 0x19,
|
|
0x1a, 0x1d, 0x1d, 0x1e, 0x1e, 0x20, 0x21, 0x22
|
|
},
|
|
};
|
|
|
|
void machine_custom_init(void) {
|
|
REG_SET(RTL837X_REG_LED_GLB_IO_EN, 0x7624155b);
|
|
}
|
|
|
|
#else
|
|
#error "Please select a machine type in machine.h"
|
|
#endif
|