1 // SPDX-License-Identifier: GPL-2.0+ 2 /* 3 * Copyright (C) 2016 Stefan Roese <sr@denx.de> 4 */ 5 6 #include <common.h> 7 #include <nuvoton_nct6102d.h> 8 #include <asm/io.h> 9 #include <asm/pnp_def.h> 10 11 static void superio_outb(int reg, int val) 12 { 13 outb(reg, NCT_EFER); 14 outb(val, NCT_EFDR); 15 } 16 17 static inline int superio_inb(int reg) 18 { 19 outb(reg, NCT_EFER); 20 return inb(NCT_EFDR); 21 } 22 23 static int superio_enter(void) 24 { 25 outb(NCT_ENTRY_KEY, NCT_EFER); /* Enter extended function mode */ 26 outb(NCT_ENTRY_KEY, NCT_EFER); /* Again according to manual */ 27 28 return 0; 29 } 30 31 static void superio_select(int ld) 32 { 33 superio_outb(NCT_LD_SELECT_REG, ld); 34 } 35 36 static void superio_exit(void) 37 { 38 outb(NCT_EXIT_KEY, NCT_EFER); /* Leave extended function mode */ 39 } 40 41 /* 42 * The Nuvoton NCT6102D starts per default after reset with both, 43 * the internal watchdog and the internal legacy UART enabled. This 44 * code provides a function to disable the watchdog. 45 */ 46 int nct6102d_wdt_disable(void) 47 { 48 superio_enter(); 49 /* Select logical device for WDT */ 50 superio_select(NCT6102D_LD_WDT); 51 superio_outb(NCT6102D_WDT_TIMEOUT, 0x00); 52 superio_exit(); 53 54 return 0; 55 } 56