diff --git a/target/linux/realtek/files-6.12/arch/mips/include/asm/mach-rtl-otto/mach-rtl-otto.h b/target/linux/realtek/files-6.12/arch/mips/include/asm/mach-rtl-otto/mach-rtl-otto.h index 8639661a94..aa917c2ef7 100644 --- a/target/linux/realtek/files-6.12/arch/mips/include/asm/mach-rtl-otto/mach-rtl-otto.h +++ b/target/linux/realtek/files-6.12/arch/mips/include/asm/mach-rtl-otto/mach-rtl-otto.h @@ -29,6 +29,9 @@ #define RTL838X_INT_RW_CTRL (0x0058) #define RTL838X_EXT_VERSION (0x00D0) +#define RTL931X_LED_GLB_CTRL (0x0600) +#define RTL931X_MAC_L2_GLOBAL_CTRL2 (0x1358) + /* Definition of family IDs */ #define RTL8380_FAMILY_ID (0x8380) #define RTL8390_FAMILY_ID (0x8390) diff --git a/target/linux/realtek/files-6.12/arch/mips/rtl-otto/prom.c b/target/linux/realtek/files-6.12/arch/mips/rtl-otto/prom.c index 047ea74c69..2de9c83770 100644 --- a/target/linux/realtek/files-6.12/arch/mips/rtl-otto/prom.c +++ b/target/linux/realtek/files-6.12/arch/mips/rtl-otto/prom.c @@ -13,6 +13,7 @@ #include #include #include +#include #include #include @@ -103,6 +104,21 @@ static void __init apply_early_quirks(void) sw_w32(0x3, RTL838X_INT_RW_CTRL); } +static void __init apply_dts_quirks(void) +{ + struct device_node *node; + + node = of_find_compatible_node(NULL, NULL, "diodes,pt7a75xx-wdt"); + if (node) { + if (soc_info.family == RTL9310_FAMILY_ID) { + pr_info("apply quirk for diodes pt7a75xx watchdog\n"); + sw_w32_mask(GENMASK(13, 12), BIT(12), RTL931X_LED_GLB_CTRL); + sw_w32_mask(0x0, BIT(8), RTL931X_MAC_L2_GLOBAL_CTRL2); + }; + of_node_put(node); + } +} + void __init device_tree_init(void) { if (!fdt_check_header(&__appended_dtb)) { @@ -111,6 +127,7 @@ void __init device_tree_init(void) } initial_boot_params = (void *)fdt; unflatten_and_copy_device_tree(); + apply_dts_quirks(); /* delay cpc & smp probing to allow devicetree access */ mips_cpc_probe();