9
0
Fork 0
barebox/board/kp_ukd_r1_num/highlevel_init.c

125 lines
3.8 KiB
C

/*
* (C) 2007,2008 konzeptpark, Carsten Schlote <c.schlote@konzeptpark.de>
* See file CREDITS for list of people who contributed to this project.
*
* This file is part of U-Boot V2.
*
* U-Boot V2 is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* U-Boot V2 is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with U-Boot V2. If not, see <http://www.gnu.org/licenses/>.
*/
/** @file
* @brief This file contains high-level init functions.
*
*/
#include <common.h>
#include <reloc.h>
#include <config.h>
#include <mach/mcf54xx-regs.h>
static void board_gpio_init(void)
{
/*
* Enable Ethernet signals so that, if a cable is plugged into
* the ports, the lines won't be floating and potentially cause
* erroneous transmissions
*/
MCF_GPIO_PAR_FECI2CIRQ = 0
| MCF_GPIO_PAR_FECI2CIRQ_PAR_E1MDC_EMDC
| MCF_GPIO_PAR_FECI2CIRQ_PAR_E1MDIO_EMDIO
| MCF_GPIO_PAR_FECI2CIRQ_PAR_E1MII
| MCF_GPIO_PAR_FECI2CIRQ_PAR_E17
| MCF_GPIO_PAR_FECI2CIRQ_PAR_E0MDC
| MCF_GPIO_PAR_FECI2CIRQ_PAR_E0MDIO
| MCF_GPIO_PAR_FECI2CIRQ_PAR_E0MII
| MCF_GPIO_PAR_FECI2CIRQ_PAR_E07;
}
static void board_psc_init(void)
{
#if (CFG_EARLY_UART_PORT == 0)
MCF_GPIO_PAR_PSC0 = (0
#ifdef HARDWARE_FLOW_CONTROL
| MCF_GPIO_PAR_PSC0_PAR_CTS0_CTS
| MCF_GPIO_PAR_PSC0_PAR_RTS0_RTS
#endif
| MCF_GPIO_PAR_PSC0_PAR_TXD0
| MCF_GPIO_PAR_PSC0_PAR_RXD0);
#elif (CFG_EARLY_UART_PORT == 1)
MCF_GPIO_PAR_PSC1 = (0
#ifdef HARDWARE_FLOW_CONTROL
| MCF_GPIO_PAR_PSC1_PAR_CTS1_CTS
| MCF_GPIO_PAR_PSC1_PAR_RTS1_RTS
#endif
| MCF_GPIO_PAR_PSC1_PAR_TXD1
| MCF_GPIO_PAR_PSC1_PAR_RXD1);
#elif (CFG_EARLY_UART_PORT == 2)
MCF_GPIO_PAR_PSC2 = (0
#ifdef HARDWARE_FLOW_CONTROL
| MCF_GPIO_PAR_PSC2_PAR_CTS2_CTS
| MCF_GPIO_PAR_PSC2_PAR_RTS2_RTS
#endif
| MCF_GPIO_PAR_PSC2_PAR_TXD2
| MCF_GPIO_PAR_PSC2_PAR_RXD2);
#elif (CFG_EARLY_UART_PORT == 3)
MCF_GPIO_PAR_PSC3 = (0
#ifdef HARDWARE_FLOW_CONTROL
| MCF_GPIO_PAR_PSC3_PAR_CTS3_CTS
| MCF_GPIO_PAR_PSC3_PAR_RTS3_RTS
#endif
| MCF_GPIO_PAR_PSC3_PAR_TXD3
| MCF_GPIO_PAR_PSC3_PAR_RXD3);
#else
#error "Invalid CFG_EARLY_UART_PORT setting"
#endif
/* Put PSC in UART mode */
MCF_PSC_SICR(CFG_EARLY_UART_PORT) = MCF_PSC_SICR_SIM_UART;
/* Call generic UART initialization */
// mcf5xxx_uart_init(DBUG_UART_PORT, board_get_baud());
}
/** Do board specific early init
*
* @note We run at link address now, you can now call other code
*/
void board_init_highlevel(void)
{
/* Initialize platform specific GPIOs */
board_gpio_init();
/* Init UART GPIOs and Modes */
board_psc_init();
/* Setup the early init data */
#ifdef CONFIG_HAS_EARLY_INIT
early_init();
#endif
/* Configure the early debug output facility */
#ifdef CONFIG_DEBUG_LL
early_debug_init();
#endif
}
/** Provide address of early debug low-level output
*
* @todo Should return real address for UART register map.
*/
void *get_early_console_base(const char *name)
{
return (void*)1 + CFG_EARLY_UART_PORT;
}