#include "uart/mvUart.h" | |
#include "rtc/integ_rtc/mvRtc.h" | |
/* UART timeout = UART_TIMEOUT * 100 usec */ | |
#define UART_TIMEOUT 500 | |
/* Function prototypes */ | |
MV_VOID mvBoardEnvInit(MV_VOID); | |
MV_STATUS mvCtrlEnvInit(MV_VOID); | |
MV_VOID mvCpuIfInit(MV_VOID); | |
MV_U32 mvGppValueGet(MV_U32 group, MV_U32 mask); | |
MV_U32 mvDramIfBankBaseGet(MV_U32 bankNum); | |
MV_U32 mvDramIfSizeGet(MV_VOID); | |
/* Global variables */ | |
extern unsigned int _TEXT_BASE; | |
/* Source code */ | |
void diag_board_init(char *board_name) | |
{ | |
mvBoardEnvInit(); | |
mvCtrlEnvInit(); | |
mvCpuIfInit(); | |
mvBoardNameGet(board_name); | |
} | |
void diag_get_mem_detail(unsigned int **mem_test_start_offset, | |
unsigned int **mem_test_end_offset) | |
{ | |
unsigned int start_offset, end_offset; | |
/* Get the base address of memory bank 0 */ | |
end_offset = start_offset = mvDramIfBankBaseGet(0); | |
/* Start from the location where u-boot ends | |
* FIXME: Additional _1M is added for heap size | |
*/ | |
start_offset += _TEXT_BASE + _1M + _1M; | |
/* TODO: If we are using same DRAM register init file for base and | |
* client, we need to hard-code end-offset for base to be 256M */ | |
end_offset += mvDramIfSizeGet(); | |
*mem_test_start_offset = (unsigned int *)start_offset; | |
*mem_test_end_offset = (unsigned int *)end_offset; | |
} | |
void diag_serial_init(int port, int baud_rate) | |
{ | |
mvUartInit(port, CFG_TCLK / (16 * baud_rate), mvUartBase(port)); | |
#if defined(LCP_88F6281) | |
unsigned int reg_val = 0; | |
if(port) | |
{ | |
/* Change MPP settings for UART1 */ | |
reg_val = MV_REG_READ(mvCtrlMppRegGet(1)); | |
reg_val &= ~(0xFF << 20); | |
reg_val |= (0x33 << 20); | |
MV_REG_WRITE(mvCtrlMppRegGet(1), reg_val); | |
/* Select UART from SD/UART selection switch - MPP34 */ | |
MV_REG_WRITE(0x10140, MV_REG_READ(0x10140) | BIT2); | |
/* Output enable */ | |
MV_REG_WRITE(0x10144, MV_REG_READ(0x10144) & ~(BIT2)); | |
} | |
#endif | |
} | |
void diag_int_lpbk(int port, int set) | |
{ | |
volatile MV_UART_PORT *pUartPort = (volatile MV_UART_PORT *)mvUartBase(port); | |
if(set) | |
pUartPort->mcr |= 0x10; | |
else | |
pUartPort->mcr &= ~(0x10); | |
} | |
void diag_uart_putc(int port, unsigned char c) | |
{ | |
mvUartPutc(port, c); | |
} | |
int diag_uart_getc(int port, unsigned char *c) | |
{ | |
volatile MV_UART_PORT *pUartPort = (volatile MV_UART_PORT *)mvUartBase(port); | |
int timeout = 0; | |
while ( ((pUartPort->lsr & LSR_DR) == 0) && (++timeout < UART_TIMEOUT) ) | |
{ | |
udelay(100); | |
} | |
if (timeout == UART_TIMEOUT) | |
return 1; | |
*c = pUartPort->rbr; | |
return 0; | |
} | |
void diag_get_rtc_time(int *hour, int *minute, int *second) | |
{ | |
MV_RTC_TIME mvRtcTime; | |
mvRtcTimeGet(&mvRtcTime); | |
*hour = mvRtcTime.hours; | |
*minute = mvRtcTime.minutes; | |
*second = mvRtcTime.seconds; | |
} | |
void diag_set_rtc_time(int hour, int minute, int second) | |
{ | |
MV_RTC_TIME mvRtcTime; | |
mvRtcTime.hours = hour; | |
mvRtcTime.minutes = minute; | |
mvRtcTime.seconds = second; | |
mvRtcTimeSet(&mvRtcTime); | |
} |