From b0ed56d423756061cadb39b5228078bd2278251e Mon Sep 17 00:00:00 2001 From: DrDoof <8052722+DrDoof@users.noreply.github.com> Date: Mon, 5 Oct 2026 08:21:50 +0200 Subject: [PATCH] leds: move the LED register dump to BANK3 and behind a command leds_dump() printed the pin mux, the LED enables and every LED set on each boot, from BANK2. It now lives in its own file in BANK3, where there is room, and runs only on the new "leds" command, next to gpio and sds, so it stays at hand for bringing up a new board without costing BANK2 or boot output. --- Makefile | 1 + cmd_parser.c | 3 + rtl837x_leds.c | 143 ---------------------------------------- rtl837x_leds_dump.c | 155 ++++++++++++++++++++++++++++++++++++++++++++ rtlplayground.c | 2 - 5 files changed, 159 insertions(+), 145 deletions(-) create mode 100644 rtl837x_leds_dump.c diff --git a/Makefile b/Makefile index bb914904..24b9e793 100644 --- a/Makefile +++ b/Makefile @@ -79,6 +79,7 @@ SRCS += \ rtl837x_igmp.c \ rtl837x_init.c \ rtl837x_leds.c \ + rtl837x_leds_dump.c \ rtl837x_phy.c \ rtl837x_pins.c\ rtl837x_port.c \ diff --git a/cmd_parser.c b/cmd_parser.c index c493c9e9..73c61758 100644 --- a/cmd_parser.c +++ b/cmd_parser.c @@ -24,6 +24,7 @@ #include "version.h" #include "machine.h" +#include "rtl837x_leds.h" #include "phy.h" #pragma codeseg BANK2 @@ -1976,6 +1977,8 @@ void cmd_parser(void) __banked write_char('\n'); } else if (cmd_compare(0, "gpio")) { print_gpio_status(); + } else if (cmd_compare(0, "leds")) { + leds_dump(); } else if (cmd_compare(0, "regget")) { parse_regget(); } else if (cmd_compare(0, "regset")) { diff --git a/rtl837x_leds.c b/rtl837x_leds.c index 4811cafa..d1b8cf91 100644 --- a/rtl837x_leds.c +++ b/rtl837x_leds.c @@ -24,149 +24,6 @@ extern __code const struct machine machine; extern __xdata uint8_t sfr_data[4]; -void leds_dump(void) __banked -{ - print_string("RTL837X_PIN_MUX_0: "); print_reg(RTL837X_PIN_MUX_0); write_char('\n'); - print_string("RTL837X_REG_LED_GLB_IO_EN: "); print_reg(RTL837X_REG_LED_GLB_IO_EN); write_char('\n'); - print_string("RTL837X_REG_LED1_0_SET0: "); print_reg(RTL837X_REG_LED1_0_SET0); write_char('\n'); - print_string("RTL837X_REG_LED3_2_SET0: "); print_reg(RTL837X_REG_LED3_2_SET0); write_char('\n'); - print_string("RTL837X_REG_LED1_0_SET1: "); print_reg(RTL837X_REG_LED1_0_SET1); write_char('\n'); - print_string("RTL837X_REG_LED3_2_SET1: "); print_reg(RTL837X_REG_LED3_2_SET1); write_char('\n'); - print_string("RTL837X_REG_LED1_0_SET2: "); print_reg(RTL837X_REG_LED1_0_SET2); write_char('\n'); - print_string("RTL837X_REG_LED3_2_SET2: "); print_reg(RTL837X_REG_LED3_2_SET2); write_char('\n'); - print_string("RTL837X_REG_LED1_0_SET3: "); print_reg(RTL837X_REG_LED1_0_SET3); write_char('\n'); - print_string("RTL837X_REG_LED3_2_SET3: "); print_reg(RTL837X_REG_LED3_2_SET3); write_char('\n'); - print_string("RTL837X_REG_LED3_0_SET1: "); print_reg(RTL837X_REG_LED3_0_SET1); write_char('\n'); - print_string("RTL837X_REG_LED3_0_SET3: "); print_reg(RTL837X_REG_LED3_0_SET3); write_char('\n'); - print_string("RTL837X_LED_PORT_SET_SEL: "); print_reg(RTL837X_LED_PORT_SET_SEL); write_char('\n'); - print_string("RTL837X_REG_LED_GLB_MUX_1: "); print_reg(RTL837X_REG_LED_GLB_MUX_1); write_char('\n'); - print_string("RTL837X_REG_LED_GLB_MUX_2: "); print_reg(RTL837X_REG_LED_GLB_MUX_2); write_char('\n'); - print_string("RTL837X_REG_LED_GLB_MUX_3: "); print_reg(RTL837X_REG_LED_GLB_MUX_3); write_char('\n'); - print_string("RTL837X_REG_LED_GLB_MUX_4: "); print_reg(RTL837X_REG_LED_GLB_MUX_4); write_char('\n'); - print_string("RTL837X_REG_LED_GLB_MUX_5: "); print_reg(RTL837X_REG_LED_GLB_MUX_5); write_char('\n'); - print_string("RTL837X_REG_LED_GLB_MUX_6: "); print_reg(RTL837X_REG_LED_GLB_MUX_6); write_char('\n'); - print_string("RTL837X_REG_LED_GLB_ACTIVE: "); print_reg(RTL837X_REG_LED_GLB_ACTIVE); write_char('\n'); - print_string("RTL837X_REG_LED_MODE: "); print_reg(RTL837X_REG_LED_MODE); write_char('\n'); - print_string("LED pad Configuration:\n"); - for (uint8_t i = 0; i < 28; i++) { - print_byte(i); - write_char(' '); - } - write_char('\n'); - for (uint8_t i = 0; i < 28; i++) { - switch (i % 5) { - case 0: // 0 - reg_read_m(RTL837X_REG_LED_GLB_MUX_1 + (i / 5) * 4); - print_byte(sfr_data[3] & 0x3f); - break; - case 1: // 6 - print_byte(((sfr_data[3] >> 6) | (sfr_data[2] << 2)) & 0x3f); - break; - case 2: // 12 - print_byte(((sfr_data[1] << 4) | (sfr_data[2] >> 4)) & 0x3f); - break; - case 3: // 18 - print_byte((sfr_data[1] >> 2) & 0x3f); - break; - case 4: // 24 - print_byte(sfr_data[0] & 0x3f); - break; - } - write_char(' '); - } - write_char('\n'); - print_string("LED-set Configuration:\n"); - print_string("LED-ID\t\t0\t\t1\t\t2\t\t3\n"); - for (__xdata uint8_t set = 0; set < 4; set++) { - print_string("SET "); write_char('0' + set); write_char(':'); - for (__xdata uint8_t ledid = 0; ledid < 4; ledid++) { - print_string("\t "); - uint8_t b; - if (set < 2) { - reg_read_m(RTL837X_REG_LED3_0_SET1); - b = sfr_data[3-((set << 1) + (ledid >> 1))]; - print_byte(ledid & 1 ? b >> 4 : b & 0xf); - } else { - reg_read_m(RTL837X_REG_LED3_0_SET3); - b = sfr_data[3-(((set-2) << 1) + (ledid >> 1))]; - print_byte(ledid & 1 ? b >> 4 : b & 0xf); - } - reg_read_m(RTL837X_REG_LED1_0_SET0 - set * 8 - ((ledid >> 1) * 4)); - if (! (ledid & 1)) { // LEDID 0, 2 - print_byte(sfr_data[2]); print_byte(sfr_data[3]); - } else { - print_byte(sfr_data[0]); print_byte(sfr_data[1]); - } - } - write_char('\n'); - } - for (uint8_t i = machine.min_port; i <= machine.max_port; i++) { - reg_read_m(RTL837X_LED_PORT_SET_SEL); - __xdata uint8_t set = sfr_data[3 - (i >> 2)]; - set = (set >> ((i & 3) << 1)); - print_string("Port "); write_char('0' + i); print_string(": SET "); - write_char('0' + set); - print_string(": "); - for (__xdata uint8_t ledid = 0; ledid < 4; ledid++) { - write_char('('); - reg_read_m(RTL837X_REG_LED1_0_SET0 - set * 8 - ((ledid >> 1) * 4)); - if (ledid & 1) { // LEDID 1, 3 - sfr_data[2] = sfr_data[0]; - sfr_data[3] = sfr_data[1]; - } - if (sfr_data[3] & 0x01) - print_string(" 2G5"); - if (sfr_data[3] & 0x02) - print_string(" TWO_1G"); - if (sfr_data[3] & 0x04) - print_string(" 1G"); - if (sfr_data[3] & 0x08) - print_string(" 500M"); - if (sfr_data[3] & 0x10) - print_string(" 100M"); - if (sfr_data[3] & 0x20) - print_string(" 10M"); - if (sfr_data[3] & 0x40) - print_string(" LINK"); - if (sfr_data[3] & 0x80) - print_string(" LINK_FLASH"); - if (sfr_data[2] & 0x01) - print_string(" ACT"); - if (sfr_data[2] & 0x02) - print_string(" RX"); - if (sfr_data[2] & 0x04) - print_string(" TX"); - if (sfr_data[2] & 0x08) - print_string(" COL"); - if (sfr_data[2] & 0x10) - print_string(" DUPLEX"); - if (sfr_data[2] & 0x20) - print_string(" TRAINING"); - if (sfr_data[2] & 0x40) - print_string(" MASTER"); - __xdata uint8_t b; - if (set < 2) { - reg_read_m(RTL837X_REG_LED3_0_SET1); - b = sfr_data[3-((set << 1) + (ledid >> 1))]; - } else { - reg_read_m(RTL837X_REG_LED3_0_SET3); - b = sfr_data[3-(((set-2) << 1) + (ledid >> 1))]; - } - b = ledid & 1 ? b >> 4 : b & 0xf; - if (b & 0x1) - print_string(" 10G"); - if (b & 0x2) - print_string(" TWO_5G"); - if (b & 0x4) - print_string(" 5G"); - if (b & 0x8) - print_string(" TWO_2G5"); - print_string("), "); - } - write_char('\n'); - } -} - void leds_setup(void) __banked { diff --git a/rtl837x_leds_dump.c b/rtl837x_leds_dump.c new file mode 100644 index 00000000..8a820e3a --- /dev/null +++ b/rtl837x_leds_dump.c @@ -0,0 +1,155 @@ +#include +#include "rtl837x_common.h" +#include "rtl837x_sfr.h" +#include "rtl837x_regs.h" +#include "rtl837x_leds.h" +#include "machine.h" + +#pragma codeseg BANK3 +#pragma constseg BANK3 + +extern __code const struct machine machine; +extern __xdata uint8_t sfr_data[4]; + +void leds_dump(void) __banked +{ + print_string("RTL837X_PIN_MUX_0: "); print_reg(RTL837X_PIN_MUX_0); write_char('\n'); + print_string("RTL837X_REG_LED_GLB_IO_EN: "); print_reg(RTL837X_REG_LED_GLB_IO_EN); write_char('\n'); + print_string("RTL837X_REG_LED1_0_SET0: "); print_reg(RTL837X_REG_LED1_0_SET0); write_char('\n'); + print_string("RTL837X_REG_LED3_2_SET0: "); print_reg(RTL837X_REG_LED3_2_SET0); write_char('\n'); + print_string("RTL837X_REG_LED1_0_SET1: "); print_reg(RTL837X_REG_LED1_0_SET1); write_char('\n'); + print_string("RTL837X_REG_LED3_2_SET1: "); print_reg(RTL837X_REG_LED3_2_SET1); write_char('\n'); + print_string("RTL837X_REG_LED1_0_SET2: "); print_reg(RTL837X_REG_LED1_0_SET2); write_char('\n'); + print_string("RTL837X_REG_LED3_2_SET2: "); print_reg(RTL837X_REG_LED3_2_SET2); write_char('\n'); + print_string("RTL837X_REG_LED1_0_SET3: "); print_reg(RTL837X_REG_LED1_0_SET3); write_char('\n'); + print_string("RTL837X_REG_LED3_2_SET3: "); print_reg(RTL837X_REG_LED3_2_SET3); write_char('\n'); + print_string("RTL837X_REG_LED3_0_SET1: "); print_reg(RTL837X_REG_LED3_0_SET1); write_char('\n'); + print_string("RTL837X_REG_LED3_0_SET3: "); print_reg(RTL837X_REG_LED3_0_SET3); write_char('\n'); + print_string("RTL837X_LED_PORT_SET_SEL: "); print_reg(RTL837X_LED_PORT_SET_SEL); write_char('\n'); + print_string("RTL837X_REG_LED_GLB_MUX_1: "); print_reg(RTL837X_REG_LED_GLB_MUX_1); write_char('\n'); + print_string("RTL837X_REG_LED_GLB_MUX_2: "); print_reg(RTL837X_REG_LED_GLB_MUX_2); write_char('\n'); + print_string("RTL837X_REG_LED_GLB_MUX_3: "); print_reg(RTL837X_REG_LED_GLB_MUX_3); write_char('\n'); + print_string("RTL837X_REG_LED_GLB_MUX_4: "); print_reg(RTL837X_REG_LED_GLB_MUX_4); write_char('\n'); + print_string("RTL837X_REG_LED_GLB_MUX_5: "); print_reg(RTL837X_REG_LED_GLB_MUX_5); write_char('\n'); + print_string("RTL837X_REG_LED_GLB_MUX_6: "); print_reg(RTL837X_REG_LED_GLB_MUX_6); write_char('\n'); + print_string("RTL837X_REG_LED_GLB_ACTIVE: "); print_reg(RTL837X_REG_LED_GLB_ACTIVE); write_char('\n'); + print_string("RTL837X_REG_LED_MODE: "); print_reg(RTL837X_REG_LED_MODE); write_char('\n'); + print_string("LED pad Configuration:\n"); + for (uint8_t i = 0; i < 28; i++) { + print_byte(i); + write_char(' '); + } + write_char('\n'); + for (uint8_t i = 0; i < 28; i++) { + switch (i % 5) { + case 0: // 0 + reg_read_m(RTL837X_REG_LED_GLB_MUX_1 + (i / 5) * 4); + print_byte(sfr_data[3] & 0x3f); + break; + case 1: // 6 + print_byte(((sfr_data[3] >> 6) | (sfr_data[2] << 2)) & 0x3f); + break; + case 2: // 12 + print_byte(((sfr_data[1] << 4) | (sfr_data[2] >> 4)) & 0x3f); + break; + case 3: // 18 + print_byte((sfr_data[1] >> 2) & 0x3f); + break; + case 4: // 24 + print_byte(sfr_data[0] & 0x3f); + break; + } + write_char(' '); + } + write_char('\n'); + print_string("LED-set Configuration:\n"); + print_string("LED-ID\t\t0\t\t1\t\t2\t\t3\n"); + for (__xdata uint8_t set = 0; set < 4; set++) { + print_string("SET "); write_char('0' + set); write_char(':'); + for (__xdata uint8_t ledid = 0; ledid < 4; ledid++) { + print_string("\t "); + uint8_t b; + if (set < 2) { + reg_read_m(RTL837X_REG_LED3_0_SET1); + b = sfr_data[3-((set << 1) + (ledid >> 1))]; + print_byte(ledid & 1 ? b >> 4 : b & 0xf); + } else { + reg_read_m(RTL837X_REG_LED3_0_SET3); + b = sfr_data[3-(((set-2) << 1) + (ledid >> 1))]; + print_byte(ledid & 1 ? b >> 4 : b & 0xf); + } + reg_read_m(RTL837X_REG_LED1_0_SET0 - set * 8 - ((ledid >> 1) * 4)); + if (! (ledid & 1)) { // LEDID 0, 2 + print_byte(sfr_data[2]); print_byte(sfr_data[3]); + } else { + print_byte(sfr_data[0]); print_byte(sfr_data[1]); + } + } + write_char('\n'); + } + for (uint8_t i = machine.min_port; i <= machine.max_port; i++) { + reg_read_m(RTL837X_LED_PORT_SET_SEL); + __xdata uint8_t set = sfr_data[3 - (i >> 2)]; + set = (set >> ((i & 3) << 1)); + print_string("Port "); write_char('0' + i); print_string(": SET "); + write_char('0' + set); + print_string(": "); + for (__xdata uint8_t ledid = 0; ledid < 4; ledid++) { + write_char('('); + reg_read_m(RTL837X_REG_LED1_0_SET0 - set * 8 - ((ledid >> 1) * 4)); + if (ledid & 1) { // LEDID 1, 3 + sfr_data[2] = sfr_data[0]; + sfr_data[3] = sfr_data[1]; + } + if (sfr_data[3] & 0x01) + print_string(" 2G5"); + if (sfr_data[3] & 0x02) + print_string(" TWO_1G"); + if (sfr_data[3] & 0x04) + print_string(" 1G"); + if (sfr_data[3] & 0x08) + print_string(" 500M"); + if (sfr_data[3] & 0x10) + print_string(" 100M"); + if (sfr_data[3] & 0x20) + print_string(" 10M"); + if (sfr_data[3] & 0x40) + print_string(" LINK"); + if (sfr_data[3] & 0x80) + print_string(" LINK_FLASH"); + if (sfr_data[2] & 0x01) + print_string(" ACT"); + if (sfr_data[2] & 0x02) + print_string(" RX"); + if (sfr_data[2] & 0x04) + print_string(" TX"); + if (sfr_data[2] & 0x08) + print_string(" COL"); + if (sfr_data[2] & 0x10) + print_string(" DUPLEX"); + if (sfr_data[2] & 0x20) + print_string(" TRAINING"); + if (sfr_data[2] & 0x40) + print_string(" MASTER"); + __xdata uint8_t b; + if (set < 2) { + reg_read_m(RTL837X_REG_LED3_0_SET1); + b = sfr_data[3-((set << 1) + (ledid >> 1))]; + } else { + reg_read_m(RTL837X_REG_LED3_0_SET3); + b = sfr_data[3-(((set-2) << 1) + (ledid >> 1))]; + } + b = ledid & 1 ? b >> 4 : b & 0xf; + if (b & 0x1) + print_string(" 10G"); + if (b & 0x2) + print_string(" TWO_5G"); + if (b & 0x4) + print_string(" 5G"); + if (b & 0x8) + print_string(" TWO_2G5"); + print_string("), "); + } + write_char('\n'); + } +} diff --git a/rtlplayground.c b/rtlplayground.c index 916984f1..37d47312 100644 --- a/rtlplayground.c +++ b/rtlplayground.c @@ -1752,8 +1752,6 @@ void main(void) leds_setup(); machine_custom_init(); - leds_dump(); - set_sys_led_state(SYS_LED_SLOW); if (machine_detected.isRTL8373)