diff --git a/doc/devices/KP-9000-6XH-X2.md b/doc/devices/KP-9000-6XH-X2.md new file mode 100644 index 0000000..4cc21d7 --- /dev/null +++ b/doc/devices/KP-9000-6XH-X2.md @@ -0,0 +1,57 @@ +# Keeplink KP-9000-6XH-X2 + +Following is documentation for unmanaged switch marked as `KP-9000-6XH-X2`. + +Using SPI clamp in-board is the only method for initial installation. + +### Label specifications + +- **Name**: 4X 2.5G RJ45 Port + 2 X 10G SFP+ Port +- **Model**: KP-9000-6XH-X2 +- **Ports**: + - 4 × RJ45: 10/100/1000/2500 Mbps + - 2 × SFP+: 1000 / 2500 / 10000 Mbps + +### What works + +- All four 2.5GBASE-T RJ45 ports at 10/100/1000/2500 Mbps +- SFP port with 10G modules +- LEDs +- untested due to missing Hardware: SFP+ ports equipped with 1G or 2.5G SFPs. + +### Hardware overview + +Front side: + + + +Label: + + + + + +### PCB overview + +**Board markings** +- Top silkscreen: 2M-PCB43-V2.1 + +Top side + + + +Bottom + + + +## Reset Button + +There's an unpopulated Reset button on the front left side of the PCB. +It can easily be soldered, you'll need an 4.5mmx4.5mm 90° button switch with a 3-pin footprint. +I got mine here: https://de.aliexpress.com/item/1005007295346702.html +The front case has already the hole in the metal case, you just have to punch a hole through the foil. + +## Power supply + +Input power is delivered via barell plug, `12V 1A` adapter was provided. + diff --git a/doc/devices/photos/2M-PCB43-V2.1-unmanaged/KP-9000-6XH-X2-front.jpg b/doc/devices/photos/2M-PCB43-V2.1-unmanaged/KP-9000-6XH-X2-front.jpg new file mode 100644 index 0000000..73ace2a Binary files /dev/null and b/doc/devices/photos/2M-PCB43-V2.1-unmanaged/KP-9000-6XH-X2-front.jpg differ diff --git a/doc/devices/photos/2M-PCB43-V2.1-unmanaged/2M-PCB43-V2.1-label.jpg b/doc/devices/photos/2M-PCB43-V2.1-unmanaged/KP-9000-6XH-X2-label.jpg similarity index 100% rename from doc/devices/photos/2M-PCB43-V2.1-unmanaged/2M-PCB43-V2.1-label.jpg rename to doc/devices/photos/2M-PCB43-V2.1-unmanaged/KP-9000-6XH-X2-label.jpg diff --git a/machine.c b/machine.c index 300f8aa..83a583f 100644 --- a/machine.c +++ b/machine.c @@ -73,6 +73,58 @@ __code const struct machine machine = { 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", diff --git a/machine.h b/machine.h index 610a757..3c0bbc6 100644 --- a/machine.h +++ b/machine.h @@ -8,6 +8,7 @@ */ // #define MACHINE_KP_9000_6XHML_X2 // #define MACHINE_KP_9000_6XH_X +// #define MACHINE_KP_9000_6XH_X2 // #define MACHINE_KP_9000_9XH_X_EU // #define MACHINE_KP_9000_9XHML_X_V2_2 // #define MACHINE_KP_9000_9XHML_X_V3_1