gpio: SOC only has 64 gpio not 96.

Remove BANK_A
Rename BANK_B to GPIO_00_31
Rename BACK_C to GPIO_32_63

Added also _INPUT, _DIRECTIOn registers
This commit is contained in:
René van Dorst
2025-09-06 17:04:25 +02:00
parent 8e9cababfb
commit 74b8280d80
4 changed files with 32 additions and 27 deletions
+1 -1
View File
@@ -428,7 +428,7 @@ void cmd_parser(void) __banked
if (cmd_compare(0, "gpio")) {
for (uint8_t idx = 0; idx < 3; idx++) {
reg_read(RTL837X_REG_GPIO_A + (idx * 4));
reg_read(RTL837X_REG_GPIO_32_63_OUTPUT + (idx * 4));
print_string("GPIO ");
write_char(idx + 'A');
write_char(':');
+2 -2
View File
@@ -423,13 +423,13 @@ void port_stats_print(void) __banked
break;
}
} else { // An SFP Module TODO: This is for 1 module devices
reg_read_m(RTL837X_REG_GPIO_B);
reg_read_m(RTL837X_REG_GPIO_00_31_INPUT);
if (!(sfr_data[0] & 0x40)) {
print_string("SFP OK\t");
} else {
print_string("NO SFP\t");
}
reg_read_m(RTL837X_REG_GPIO_C);
reg_read_m(RTL837X_REG_GPIO_32_63_INPUT);
if (sfr_data[3] & 0x20) {
print_string("Down\t");
} else {
+11 -6
View File
@@ -44,19 +44,24 @@
* Pin configuration (pinmux)
*/
#define RTL837X_PIN_MUX_A 0x7f8c
#define RTL837X_PIN_MUX_B 0x7f90
#define RTL837X_PIN_MUX_0 0x7f8c
#define RTL837X_PIN_MUX_1 0x7f90
#define RTL837X_REG_GPIO_A 0x40
// Output Registers
#define RTL837X_REG_GPIO_00_31_OUTPUT 0x3c
#define RTL837X_REG_GPIO_32_63_OUTPUT 0x40
// BIT 4 resets RTL8224 on 9000-9XH
#define RTL837X_REG_GPIO_B 0x44
// Input Registers
#define RTL837X_REG_GPIO_00_31_INPUT 0x44
#define RTL837X_REG_GPIO_32_63_INPUT 0x48
// Bit 1e cleared: SFP Module inserted on 9000-6XH (MOD_DEF0 pin)
#define RTL837X_REG_GPIO_C 0x48
// BIT 5 set: SIGNAL LOS of SFP module on 9000-6XH (RX_LOS pin)
#define RTL837X_REG_GPIO_CONF_A 0x50
// Direction Registers, 0 = input, 1 = output
#define RTL837X_REG_GPIO_00_31_DIRECTION 0x4c
#define RTL837X_REG_GPIO_32_63_DIRECTION 0x50
// Configures IO direction for bank a
#define RTL837X_REG_GPIO_EXT 0x63e8
+18 -18
View File
@@ -873,7 +873,7 @@ void sfp_print_info(uint8_t sfp)
void handle_sfp(void)
{
reg_read_m(RTL837X_REG_GPIO_B);
reg_read_m(RTL837X_REG_GPIO_00_31_INPUT);
if ((sfp_pins_last & 0x1) && (!(sfr_data[0] & 0x40))) {
sfp_pins_last &= ~0x01;
print_string("\n<MODULE INSERTED> ");
@@ -893,7 +893,7 @@ void handle_sfp(void)
print_string("\n<MODULE REMOVED>\n");
}
reg_read_m(RTL837X_REG_GPIO_C);
reg_read_m(RTL837X_REG_GPIO_32_63_INPUT);
if ((sfp_pins_last & 0x2) && (!(sfr_data[3] & 0x20))) {
sfp_pins_last &= ~0x02;
print_string("\n<SFP-RX OK>\n");
@@ -903,7 +903,7 @@ void handle_sfp(void)
print_string("\n<SFP-RX LOS>\n");
}
reg_read_m(RTL837X_REG_GPIO_C);
reg_read_m(RTL837X_REG_GPIO_32_63_INPUT);
if ((sfp_pins_last & 0x10) && (!(sfr_data[1] & 0x04))) {
sfp_pins_last &= ~0x10;
print_string("\n<MODULE 2 INSERTED> ");
@@ -989,7 +989,7 @@ void idle(void)
handle_sfp();
/* Button pressed on KL-8xhm-x2:
reg_read(RTL837X_REG_GPIO_C);
reg_read(RTL837X_REG_GPIO_32_63_INPUT);
if (!(sfr_data[2] & 0x40))
print_string("Button pressed\n");
*/
@@ -1038,12 +1038,12 @@ void setup_external_irqs(void)
void rtl8224_enable(void)
{
// Set Pin 4 low
reg_bit_clear(RTL837X_REG_GPIO_A, 4);
reg_bit_clear(RTL837X_REG_GPIO_32_63_OUTPUT, 4);
// Configure Pin as output
reg_bit_set(RTL837X_REG_GPIO_CONF_A, 4);
reg_bit_set(RTL837X_REG_GPIO_32_63_DIRECTION, 4);
delay(100);
// Set pin 4 high
reg_bit_set(RTL837X_REG_GPIO_A, 4);
reg_bit_set(RTL837X_REG_GPIO_32_63_OUTPUT, 4);
delay(500);
}
@@ -1064,9 +1064,9 @@ void setup_clock(void)
reg_write_m(RTL837X_REG_HW_CONF);
// Enable serial interface, set bit 0
reg_read_m(RTL837X_PIN_MUX_B);
reg_read_m(RTL837X_PIN_MUX_1);
sfr_mask_data(0, 0x1, 0x1);
reg_write_m(RTL837X_PIN_MUX_B);
reg_write_m(RTL837X_PIN_MUX_1);
}
@@ -1286,7 +1286,7 @@ void led_config_9xh(void)
reg_bit_clear(0x65dc, 0x1b);
// r7f8c:30000000 R7f8c-30000000 r7f8c:30000000 R7f8c-38000000
reg_bit_set(RTL837X_PIN_MUX_A, 0x1b);
reg_bit_set(RTL837X_PIN_MUX_0, 0x1b);
// R6548-0041017f
REG_SET(0x6548, 0x0041017f);
@@ -1338,13 +1338,13 @@ void led_config(void)
// Set bits 1b/1d of 0x7f8c: r7f8c:30000000 R7f8c-30000000 r7f8c:30000000 R7f8c-38000000
if (nSFPPorts == 2) {
reg_bit_set(RTL837X_PIN_MUX_A, 0x1b); // R7f8c-28000000
reg_bit_clear(RTL837X_PIN_MUX_A, 0x1c); // R7f8c-28000000
reg_bit_set(RTL837X_PIN_MUX_A, 0x1d); // R7f8c-28000000
reg_bit_set(RTL837X_PIN_MUX_0, 0x1b); // R7f8c-28000000
reg_bit_clear(RTL837X_PIN_MUX_0, 0x1c); // R7f8c-28000000
reg_bit_set(RTL837X_PIN_MUX_0, 0x1d); // R7f8c-28000000
} else {
reg_bit_set(RTL837X_PIN_MUX_A, 0x1d);
reg_bit_set(RTL837X_PIN_MUX_A, 0x1c);
reg_bit_set(RTL837X_PIN_MUX_A, 0x1b);
reg_bit_set(RTL837X_PIN_MUX_0, 0x1d);
reg_bit_set(RTL837X_PIN_MUX_0, 0x1c);
reg_bit_set(RTL837X_PIN_MUX_0, 0x1b);
}
// LED setup
// r6520:0021fdb0 R6520-0021e7b0 r6520:0021e7b0 R6520-0021e6b0 r65f8:00000018 R65f8-00000018 R65fc-fffff000 r6600:00000000 R6600-0000000f r65dc:5fffff00 R65dc-7fffff00 r65dc:7fffff00 R65dc-77ffff00
@@ -1620,10 +1620,10 @@ void setup_i2c(void)
REG_SET(0x041c, 0);
// HW Control register, enable I2C?
reg_read_m(RTL837X_PIN_MUX_B);
reg_read_m(RTL837X_PIN_MUX_1);
sfr_mask_data(3, 0x20, 0x00); // Clear bit 29
sfr_mask_data(0, 0x60, 0x40); // Set bits 5-6 to 0b10
reg_write_m(RTL837X_PIN_MUX_B);
reg_write_m(RTL837X_PIN_MUX_1);
}