131 lines
2.9 KiB
C
131 lines
2.9 KiB
C
|
|
#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);
|
|
}
|