1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 3 #include <stdint.h> 4 #include <arch/io.h> 5 #include <delay.h> 6 7 #include "chip.h" 8 #include "kempld.h" 9 #include "kempld_internal.h" 10 kempld_write8(const uint8_t addr,const uint8_t data)11void kempld_write8(const uint8_t addr, const uint8_t data) 12 { 13 outb(addr, KEMPLD_IDX); 14 outb(data, KEMPLD_DAT); 15 } 16 kempld_read8(const uint8_t addr)17uint8_t kempld_read8(const uint8_t addr) 18 { 19 outb(addr, KEMPLD_IDX); 20 return inb(KEMPLD_DAT); 21 } 22 kempld_get_mutex(int timeout_ms)23int kempld_get_mutex(int timeout_ms) 24 { 25 while (inb(KEMPLD_IDX) & KEMPLD_MUTEX_KEY && timeout_ms--) 26 mdelay(1); 27 return timeout_ms; 28 } 29 kempld_release_mutex(void)30void kempld_release_mutex(void) 31 { 32 outb(KEMPLD_MUTEX_KEY, KEMPLD_IDX); 33 } 34 kempld_enable_uart_for_console(void)35void kempld_enable_uart_for_console(void) 36 { 37 if (!CONFIG(CONSOLE_SERIAL)) 38 return; 39 40 if (kempld_get_mutex(100) < 0) 41 return; 42 43 switch (CONFIG_UART_FOR_CONSOLE) { 44 case 0: 45 kempld_write8(KEMPLD_UART_0, 46 KEMPLD_UART_ENABLE | KEMPLD_UART_3F8 << KEMPLD_UART_IO_SHIFT); 47 break; 48 case 1: 49 kempld_write8(KEMPLD_UART_1, 50 KEMPLD_UART_ENABLE | KEMPLD_UART_2F8 << KEMPLD_UART_IO_SHIFT); 51 break; 52 default: 53 break; 54 } 55 56 kempld_release_mutex(); 57 } 58