From: Harshal Gohel Date: Tue, 15 Jul 2025 17:05:12 +0000 (+0200) Subject: realtek: rtl931x: Fix printing of port matrix X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=refs%2Fpull%2F19572%2Fhead;p=thirdparty%2Fopenwrt.git realtek: rtl931x: Fix printing of port matrix The function rtl93xx_setup() is called by both RTL930x and RTL931x. But only the RTL930x specific function to print port matrix was called. Unfortuntaly, RTL931x needs a different function to access the correct registers to retrieve the port matrix information. It is therefore necessary differentiate in rtl93xx_setup between the SoC families before calling the appropriate function. Signed-off-by: Harshal Gohel Signed-off-by: Sharadanand Karanjkar Link: https://github.com/openwrt/openwrt/pull/19572 Signed-off-by: Robert Marko --- diff --git a/target/linux/realtek/files-6.12/drivers/net/dsa/rtl83xx/dsa.c b/target/linux/realtek/files-6.12/drivers/net/dsa/rtl83xx/dsa.c index dc442af2b02..a4b1e40c8dd 100644 --- a/target/linux/realtek/files-6.12/drivers/net/dsa/rtl83xx/dsa.c +++ b/target/linux/realtek/files-6.12/drivers/net/dsa/rtl83xx/dsa.c @@ -519,7 +519,10 @@ static int rtl93xx_setup(struct dsa_switch *ds) } priv->r->traffic_set(priv->cpu_port, BIT_ULL(priv->cpu_port)); - rtl930x_print_matrix(); + if (priv->family_id == RTL9300_FAMILY_ID) + rtl930x_print_matrix(); + else if (priv->family_id == RTL9310_FAMILY_ID) + rtl931x_print_matrix(); /* TODO: Initialize statistics */ rtldsa_init_counters(priv); diff --git a/target/linux/realtek/files-6.12/drivers/net/dsa/rtl83xx/rtl83xx.h b/target/linux/realtek/files-6.12/drivers/net/dsa/rtl83xx/rtl83xx.h index abe61942a34..522560ca38c 100644 --- a/target/linux/realtek/files-6.12/drivers/net/dsa/rtl83xx/rtl83xx.h +++ b/target/linux/realtek/files-6.12/drivers/net/dsa/rtl83xx/rtl83xx.h @@ -190,6 +190,7 @@ irqreturn_t rtl931x_switch_irq(int irq, void *dev_id); int rtl931x_sds_cmu_band_get(int sds, phy_interface_t mode); int rtl931x_sds_cmu_band_set(int sds, bool enable, u32 band, phy_interface_t mode); extern void rtl931x_sds_init(u32 sds, phy_interface_t mode); +void rtl931x_print_matrix(void); int rtl83xx_lag_add(struct dsa_switch *ds, int group, int port, struct netdev_lag_upper_info *info); int rtl83xx_lag_del(struct dsa_switch *ds, int group, int port); diff --git a/target/linux/realtek/files-6.12/drivers/net/dsa/rtl83xx/rtl931x.c b/target/linux/realtek/files-6.12/drivers/net/dsa/rtl83xx/rtl931x.c index 25b7fc62578..ed6674e044b 100644 --- a/target/linux/realtek/files-6.12/drivers/net/dsa/rtl83xx/rtl931x.c +++ b/target/linux/realtek/files-6.12/drivers/net/dsa/rtl83xx/rtl931x.c @@ -464,12 +464,14 @@ int rtl931x_write_mmd_phy(u32 port, u32 devnum, u32 regnum, u32 val) void rtl931x_print_matrix(void) { - volatile u64 *ptr = RTL838X_SW_BASE + RTL839X_PORT_ISO_CTRL(0); + struct table_reg *r = rtl_table_get(RTL9310_TBL_2, 1); - for (int i = 0; i < 52; i += 4) - pr_debug("> %16llx %16llx %16llx %16llx\n", - ptr[i + 0], ptr[i + 1], ptr[i + 2], ptr[i + 3]); - pr_debug("CPU_PORT> %16llx\n", ptr[52]); + for (int i = 0; i < 64; i++) { + rtl_table_read(r, i); + pr_info("> %08x %08x\n", sw_r32(rtl_table_data(r, 0)), + sw_r32(rtl_table_data(r, 1))); + } + rtl_table_release(r); } void rtl931x_set_receive_management_action(int port, rma_ctrl_t type, action_type_t action)